commit 6fd0bee8a37c8f1b2feba0d3ea084783c5e050f6 Author: anitak Date: Wed Apr 22 16:07:47 2026 +0530 add yml file diff --git a/.bundle/config b/.bundle/config new file mode 100644 index 0000000..848943b --- /dev/null +++ b/.bundle/config @@ -0,0 +1,2 @@ +BUNDLE_PATH: "vendor/bundle" +BUNDLE_FORCE_RUBY_PLATFORM: 1 diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 0000000..187894b --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,4 @@ +module.exports = { + root: true, + extends: '@react-native', +}; diff --git a/.gitea/workflows/test.yml b/.gitea/workflows/test.yml new file mode 100644 index 0000000..8da45cd --- /dev/null +++ b/.gitea/workflows/test.yml @@ -0,0 +1,133 @@ +# name: RN APK Build + +# on: +# push: +# branches: +# - main + +# jobs: +# build: +# runs-on: ubuntu-latest + +# steps: +# - name: Checkout code +# uses: actions/checkout@v4 + +# # ---------------- NODE ---------------- +# - name: Setup Node +# uses: actions/setup-node@v4 +# with: +# node-version: 20 +# cache: npm + +# - name: Install dependencies +# run: npm ci + +# # ---------------- JAVA ---------------- +# - name: Setup Java +# uses: actions/setup-java@v4 +# with: +# distribution: temurin +# java-version: 17 +# cache: gradle + +# # ---------------- ANDROID ---------------- +# - name: Setup Android SDK +# uses: android-actions/setup-android@v3 + +# - name: Grant permission +# run: chmod +x android/gradlew + +# # ---------------- BUILD APK ---------------- +# - name: Build Release APK +# run: | +# cd android +# ./gradlew assembleRelease --stacktrace --info + +# # ---------------- VERIFY APK ---------------- +# - name: Check APK Output +# run: ls -R android/app/build/outputs/apk + +# # ---------------- SAVE TO VM ---------------- +# - name: Save APK to VM folder +# run: | +# mkdir -p /home/pgadmin1/builds +# cp android/app/build/outputs/apk/release/app-release.apk /home/pgadmin1/builds/app-release.apk + +# # ---------------- UPLOAD ARTIFACT ---------------- +# - name: Upload APK +# uses: actions/upload-artifact@v3 +# with: +# name: app-release +# path: android/app/build/outputs/apk/release/app-release.apk + + + + +name: RN APK Build + +on: + push: + branches: + - main + +jobs: + build: + runs-on: ubuntu-latest # ye same rahega (host mapping runner config me hai) + + steps: + - name: Checkout code + uses: actions/checkout@v4 + + # ---------------- NODE ---------------- + - name: Setup Node + uses: actions/setup-node@v4 + with: + node-version: 20 + cache: npm + + - name: Install dependencies + run: npm ci + + # ---------------- JAVA ---------------- + - name: Setup Java + uses: actions/setup-java@v4 + with: + distribution: temurin + java-version: 17 + + # ---------------- ANDROID ---------------- + - name: Setup Android SDK + uses: android-actions/setup-android@v3 + + - name: Grant permission + run: chmod +x android/gradlew + + # ---------------- BUILD APK ---------------- + - name: Build Release APK + run: | + cd android + ./gradlew assembleRelease --stacktrace --info + + # ---------------- VERIFY APK ---------------- + - name: Check APK Output + run: | + ls -R android/app/build/outputs/apk + + # ---------------- SAVE TO VM ---------------- + - name: Save APK to VM folder + run: | + mkdir -p /home/pgadmin1/builds + cp android/app/build/outputs/apk/release/*.apk /home/pgadmin1/builds/ + + # ---------------- VERIFY FINAL ---------------- + - name: Verify APK in VM + run: | + ls -l /home/pgadmin1/builds + + # ---------------- (OPTIONAL) ARTIFACT ---------------- + - name: Upload APK (optional) + uses: actions/upload-artifact@v3 + with: + name: app-release + path: android/app/build/outputs/apk/release/*.apk \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..de99955 --- /dev/null +++ b/.gitignore @@ -0,0 +1,75 @@ +# OSX +# +.DS_Store + +# Xcode +# +build/ +*.pbxuser +!default.pbxuser +*.mode1v3 +!default.mode1v3 +*.mode2v3 +!default.mode2v3 +*.perspectivev3 +!default.perspectivev3 +xcuserdata +*.xccheckout +*.moved-aside +DerivedData +*.hmap +*.ipa +*.xcuserstate +**/.xcode.env.local + +# Android/IntelliJ +# +build/ +.idea +.gradle +local.properties +*.iml +*.hprof +.cxx/ +*.keystore +!debug.keystore +.kotlin/ + +# node.js +# +node_modules/ +npm-debug.log +yarn-error.log + +# fastlane +# +# It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the +# screenshots whenever they are needed. +# For more information about the recommended setup visit: +# https://docs.fastlane.tools/best-practices/source-control/ + +**/fastlane/report.xml +**/fastlane/Preview.html +**/fastlane/screenshots +**/fastlane/test_output + +# Bundle artifact +*.jsbundle + +# Ruby / CocoaPods +**/Pods/ +/vendor/bundle/ + +# Temporary files created by Metro to check the health of the file watcher +.metro-health-check* + +# testing +/coverage + +# Yarn +.yarn/* +!.yarn/patches +!.yarn/plugins +!.yarn/releases +!.yarn/sdks +!.yarn/versions diff --git a/.prettierrc.js b/.prettierrc.js new file mode 100644 index 0000000..06860c8 --- /dev/null +++ b/.prettierrc.js @@ -0,0 +1,5 @@ +module.exports = { + arrowParens: 'avoid', + singleQuote: true, + trailingComma: 'all', +}; diff --git a/.watchmanconfig b/.watchmanconfig new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/.watchmanconfig @@ -0,0 +1 @@ +{} diff --git a/App.js b/App.js new file mode 100644 index 0000000..e69de29 diff --git a/AppSpecificContant.js b/AppSpecificContant.js new file mode 100644 index 0000000..4ec1e94 --- /dev/null +++ b/AppSpecificContant.js @@ -0,0 +1,6 @@ +const PerformicsIRAppName="PerformicsIR"; +const PerformicsAppName="Performics"; +const AppName=PerformicsAppName; +const DBName="Performics"; + +export {AppName,PerformicsAppName,DBName,PerformicsIRAppName}; \ No newline at end of file diff --git a/Gemfile b/Gemfile new file mode 100644 index 0000000..6a4c5f1 --- /dev/null +++ b/Gemfile @@ -0,0 +1,16 @@ +source 'https://rubygems.org' + +# You may use http://rbenv.org/ or https://rvm.io/ to install and use this version +ruby ">= 2.6.10" + +# Exclude problematic versions of cocoapods and activesupport that causes build failures. +gem 'cocoapods', '>= 1.13', '!= 1.15.0', '!= 1.15.1' +gem 'activesupport', '>= 6.1.7.5', '!= 7.1.0' +gem 'xcodeproj', '< 1.26.0' +gem 'concurrent-ruby', '< 1.3.4' + +# Ruby 3.4.0 has removed some libraries from the standard library. +gem 'bigdecimal' +gem 'logger' +gem 'benchmark' +gem 'mutex_m' diff --git a/PerformicsSrc/src.zip b/PerformicsSrc/src.zip new file mode 100644 index 0000000..92da0b6 Binary files /dev/null and b/PerformicsSrc/src.zip differ diff --git a/PerformicsSrc/src/NotificationApiService/apiService.tsx b/PerformicsSrc/src/NotificationApiService/apiService.tsx new file mode 100644 index 0000000..06b9601 --- /dev/null +++ b/PerformicsSrc/src/NotificationApiService/apiService.tsx @@ -0,0 +1,75 @@ +import replaceAndRemoveTrailingSlash from '../utils/ReplaceAndRemoveTrailingSlash'; + +const NOTIFICATION_BASE_URL = 'https://api1.parinaam.in/api/notify/'; + +export function createApiFunction(apiUrl: string) { + console.log(apiUrl, "urlllll"); + + return { + post: (data: FormData | Record, id: string = '') => { + const url = `${apiUrl}/${id}`; + return fetchData(url, 'POST', data); + }, + patch: (id: string | number, data: FormData | Record) => { + const url = `${apiUrl}/${id}`; + return fetchData(url, 'PATCH', data); + }, + put: (id: string | number, data: FormData | Record) => { + const url = `${apiUrl}/${id}`; + return fetchData(url, 'PUT', data); + }, + }; +} + +async function fetchData( + url: string, + method: string, + data: FormData | Record, +) { + const headers: Record = { + 'Access-Control-Allow-Origin': '*', + }; + + if (!(data instanceof FormData)) { + headers['Content-Type'] = 'application/json'; + } + + const options = { + method: method, + headers, + body: data ? createRequestBody(data) : undefined, + }; + + try { + const fullUrl = NOTIFICATION_BASE_URL + replaceAndRemoveTrailingSlash(url); + console.log(`Fetching URL: ${fullUrl}`); + console.log('Request options:', options); + + const response = await fetch(fullUrl, options); + + const textResponse = await response.text(); // Get the raw response text + console.log('Raw response:', textResponse); + + if (!response.ok) { + console.error('HTTP error:', response.status, response.statusText); + throw new Error(`HTTP error: ${response.status} ${response.statusText}`); + } + + let jsonResponse; + try { + jsonResponse = JSON.parse(textResponse); // Attempt to parse JSON + } catch (jsonError) { + console.error('Error parsing JSON:', jsonError); + throw new Error(`Error parsing JSON: ${jsonError}`); + } + + return jsonResponse; + } catch (error) { + console.error('Fetch error:', error); + throw error; + } +} + +function createRequestBody(data: FormData | Record) { + return data instanceof FormData ? data : JSON.stringify(data); +} diff --git a/PerformicsSrc/src/NotificationApiService/index.tsx b/PerformicsSrc/src/NotificationApiService/index.tsx new file mode 100644 index 0000000..7d07585 --- /dev/null +++ b/PerformicsSrc/src/NotificationApiService/index.tsx @@ -0,0 +1,12 @@ +import {createApiFunction} from './apiService'; + +const NOTIFICATIONAPISERVICES = { + +getfcmtokenstatus: createApiFunction('getFCMTokenStatus'), +updatefcmtokenstatus: createApiFunction('UpdateFCMToken'), +getnotificationlist : createApiFunction('GetNotificationListofUser'), +updatenotificationreadstatus : createApiFunction('UpdateNotificationReadStatus') + +}; + +export default NOTIFICATIONAPISERVICES; diff --git a/PerformicsSrc/src/assets/badge.png b/PerformicsSrc/src/assets/badge.png new file mode 100644 index 0000000..626658e Binary files /dev/null and b/PerformicsSrc/src/assets/badge.png differ diff --git a/PerformicsSrc/src/assets/cpm_logo.png b/PerformicsSrc/src/assets/cpm_logo.png new file mode 100644 index 0000000..e4d9ae6 Binary files /dev/null and b/PerformicsSrc/src/assets/cpm_logo.png differ diff --git a/PerformicsSrc/src/assets/fonts/Roboto-Bold.ttf b/PerformicsSrc/src/assets/fonts/Roboto-Bold.ttf new file mode 100644 index 0000000..43da14d Binary files /dev/null and b/PerformicsSrc/src/assets/fonts/Roboto-Bold.ttf differ diff --git a/PerformicsSrc/src/assets/fonts/Roboto-Italic.ttf b/PerformicsSrc/src/assets/fonts/Roboto-Italic.ttf new file mode 100644 index 0000000..1b5eaa3 Binary files /dev/null and b/PerformicsSrc/src/assets/fonts/Roboto-Italic.ttf differ diff --git a/PerformicsSrc/src/assets/fonts/Roboto-Light.ttf b/PerformicsSrc/src/assets/fonts/Roboto-Light.ttf new file mode 100644 index 0000000..e7307e7 Binary files /dev/null and b/PerformicsSrc/src/assets/fonts/Roboto-Light.ttf differ diff --git a/PerformicsSrc/src/assets/fonts/Roboto-Regular.ttf b/PerformicsSrc/src/assets/fonts/Roboto-Regular.ttf new file mode 100644 index 0000000..ddf4bfa Binary files /dev/null and b/PerformicsSrc/src/assets/fonts/Roboto-Regular.ttf differ diff --git a/PerformicsSrc/src/assets/fonts/Zocial.ttf b/PerformicsSrc/src/assets/fonts/Zocial.ttf new file mode 100644 index 0000000..e4ae46c Binary files /dev/null and b/PerformicsSrc/src/assets/fonts/Zocial.ttf differ diff --git a/PerformicsSrc/src/assets/icons/ChatbotIcon.svg b/PerformicsSrc/src/assets/icons/ChatbotIcon.svg new file mode 100644 index 0000000..a44be9b --- /dev/null +++ b/PerformicsSrc/src/assets/icons/ChatbotIcon.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/PerformicsSrc/src/assets/icons/Gyancastsicon.svg b/PerformicsSrc/src/assets/icons/Gyancastsicon.svg new file mode 100644 index 0000000..32593a6 --- /dev/null +++ b/PerformicsSrc/src/assets/icons/Gyancastsicon.svg @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/PerformicsSrc/src/assets/icons/Gyancastsicon_red.svg b/PerformicsSrc/src/assets/icons/Gyancastsicon_red.svg new file mode 100644 index 0000000..f918d54 --- /dev/null +++ b/PerformicsSrc/src/assets/icons/Gyancastsicon_red.svg @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/PerformicsSrc/src/assets/icons/Mic.svg b/PerformicsSrc/src/assets/icons/Mic.svg new file mode 100644 index 0000000..17f5ff7 --- /dev/null +++ b/PerformicsSrc/src/assets/icons/Mic.svg @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/PerformicsSrc/src/assets/icons/SendIcon.svg b/PerformicsSrc/src/assets/icons/SendIcon.svg new file mode 100644 index 0000000..e7952f8 --- /dev/null +++ b/PerformicsSrc/src/assets/icons/SendIcon.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/PerformicsSrc/src/assets/icons/astrickcamera.svg b/PerformicsSrc/src/assets/icons/astrickcamera.svg new file mode 100644 index 0000000..76c8c8c --- /dev/null +++ b/PerformicsSrc/src/assets/icons/astrickcamera.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/PerformicsSrc/src/assets/icons/chatai.svg b/PerformicsSrc/src/assets/icons/chatai.svg new file mode 100644 index 0000000..6b5a425 --- /dev/null +++ b/PerformicsSrc/src/assets/icons/chatai.svg @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/PerformicsSrc/src/assets/icons/noNotification_icon.png b/PerformicsSrc/src/assets/icons/noNotification_icon.png new file mode 100644 index 0000000..d9d23a8 Binary files /dev/null and b/PerformicsSrc/src/assets/icons/noNotification_icon.png differ diff --git a/PerformicsSrc/src/assets/icons/normalcamera.svg b/PerformicsSrc/src/assets/icons/normalcamera.svg new file mode 100644 index 0000000..ed8b75a --- /dev/null +++ b/PerformicsSrc/src/assets/icons/normalcamera.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/PerformicsSrc/src/assets/icons/performics_notification_icon.png b/PerformicsSrc/src/assets/icons/performics_notification_icon.png new file mode 100644 index 0000000..fc3c7f3 Binary files /dev/null and b/PerformicsSrc/src/assets/icons/performics_notification_icon.png differ diff --git a/PerformicsSrc/src/assets/icons/read_msg.png b/PerformicsSrc/src/assets/icons/read_msg.png new file mode 100644 index 0000000..0c4d982 Binary files /dev/null and b/PerformicsSrc/src/assets/icons/read_msg.png differ diff --git a/PerformicsSrc/src/assets/icons/read_tag.png b/PerformicsSrc/src/assets/icons/read_tag.png new file mode 100644 index 0000000..03b2c13 Binary files /dev/null and b/PerformicsSrc/src/assets/icons/read_tag.png differ diff --git a/PerformicsSrc/src/assets/icons/unread_msg.png b/PerformicsSrc/src/assets/icons/unread_msg.png new file mode 100644 index 0000000..a8323e4 Binary files /dev/null and b/PerformicsSrc/src/assets/icons/unread_msg.png differ diff --git a/PerformicsSrc/src/assets/icons/unread_tag.png b/PerformicsSrc/src/assets/icons/unread_tag.png new file mode 100644 index 0000000..e98c66a Binary files /dev/null and b/PerformicsSrc/src/assets/icons/unread_tag.png differ diff --git a/PerformicsSrc/src/assets/image/15SecBack.svg b/PerformicsSrc/src/assets/image/15SecBack.svg new file mode 100644 index 0000000..b696e2e --- /dev/null +++ b/PerformicsSrc/src/assets/image/15SecBack.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/PerformicsSrc/src/assets/image/15SecForward.svg b/PerformicsSrc/src/assets/image/15SecForward.svg new file mode 100644 index 0000000..0dd5b16 --- /dev/null +++ b/PerformicsSrc/src/assets/image/15SecForward.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/PerformicsSrc/src/assets/image/Aud_Icon.svg b/PerformicsSrc/src/assets/image/Aud_Icon.svg new file mode 100644 index 0000000..c7fe161 --- /dev/null +++ b/PerformicsSrc/src/assets/image/Aud_Icon.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/PerformicsSrc/src/assets/image/Gyan_buddy.gif b/PerformicsSrc/src/assets/image/Gyan_buddy.gif new file mode 100644 index 0000000..47e3a4e Binary files /dev/null and b/PerformicsSrc/src/assets/image/Gyan_buddy.gif differ diff --git a/PerformicsSrc/src/assets/image/Gyancast.gif b/PerformicsSrc/src/assets/image/Gyancast.gif new file mode 100644 index 0000000..36495e4 Binary files /dev/null and b/PerformicsSrc/src/assets/image/Gyancast.gif differ diff --git a/PerformicsSrc/src/assets/image/LangIcon.svg b/PerformicsSrc/src/assets/image/LangIcon.svg new file mode 100644 index 0000000..5c641b8 --- /dev/null +++ b/PerformicsSrc/src/assets/image/LangIcon.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/PerformicsSrc/src/assets/image/Like.svg b/PerformicsSrc/src/assets/image/Like.svg new file mode 100644 index 0000000..7a884e8 --- /dev/null +++ b/PerformicsSrc/src/assets/image/Like.svg @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/PerformicsSrc/src/assets/image/MICWithCircle.svg b/PerformicsSrc/src/assets/image/MICWithCircle.svg new file mode 100644 index 0000000..ccf2353 --- /dev/null +++ b/PerformicsSrc/src/assets/image/MICWithCircle.svg @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/PerformicsSrc/src/assets/image/Pause.png b/PerformicsSrc/src/assets/image/Pause.png new file mode 100644 index 0000000..305d08c Binary files /dev/null and b/PerformicsSrc/src/assets/image/Pause.png differ diff --git a/PerformicsSrc/src/assets/image/PauseIcon2.svg b/PerformicsSrc/src/assets/image/PauseIcon2.svg new file mode 100644 index 0000000..ed96fc0 --- /dev/null +++ b/PerformicsSrc/src/assets/image/PauseIcon2.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/PerformicsSrc/src/assets/image/PerformicsLogo.png b/PerformicsSrc/src/assets/image/PerformicsLogo.png new file mode 100644 index 0000000..1d072e2 Binary files /dev/null and b/PerformicsSrc/src/assets/image/PerformicsLogo.png differ diff --git a/PerformicsSrc/src/assets/image/PlayIcon.png b/PerformicsSrc/src/assets/image/PlayIcon.png new file mode 100644 index 0000000..a868b5a Binary files /dev/null and b/PerformicsSrc/src/assets/image/PlayIcon.png differ diff --git a/PerformicsSrc/src/assets/image/PlaySVG.svg b/PerformicsSrc/src/assets/image/PlaySVG.svg new file mode 100644 index 0000000..a245680 --- /dev/null +++ b/PerformicsSrc/src/assets/image/PlaySVG.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/PerformicsSrc/src/assets/image/Replay.svg b/PerformicsSrc/src/assets/image/Replay.svg new file mode 100644 index 0000000..5da7262 --- /dev/null +++ b/PerformicsSrc/src/assets/image/Replay.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/PerformicsSrc/src/assets/image/RightIcon.svg b/PerformicsSrc/src/assets/image/RightIcon.svg new file mode 100644 index 0000000..b53ca5a --- /dev/null +++ b/PerformicsSrc/src/assets/image/RightIcon.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/PerformicsSrc/src/assets/image/ThaiNamthip.Thai_1024x1024.png b/PerformicsSrc/src/assets/image/ThaiNamthip.Thai_1024x1024.png new file mode 100644 index 0000000..2e766ba Binary files /dev/null and b/PerformicsSrc/src/assets/image/ThaiNamthip.Thai_1024x1024.png differ diff --git a/PerformicsSrc/src/assets/image/VideoIcon.svg b/PerformicsSrc/src/assets/image/VideoIcon.svg new file mode 100644 index 0000000..87d2e03 --- /dev/null +++ b/PerformicsSrc/src/assets/image/VideoIcon.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/PerformicsSrc/src/assets/image/aprooved_icon.svg b/PerformicsSrc/src/assets/image/aprooved_icon.svg new file mode 100644 index 0000000..d974347 --- /dev/null +++ b/PerformicsSrc/src/assets/image/aprooved_icon.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/PerformicsSrc/src/assets/image/astrickcamera.svg b/PerformicsSrc/src/assets/image/astrickcamera.svg new file mode 100644 index 0000000..76c8c8c --- /dev/null +++ b/PerformicsSrc/src/assets/image/astrickcamera.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/PerformicsSrc/src/assets/image/aviatoricon.svg b/PerformicsSrc/src/assets/image/aviatoricon.svg new file mode 100644 index 0000000..b848722 --- /dev/null +++ b/PerformicsSrc/src/assets/image/aviatoricon.svg @@ -0,0 +1,196 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/PerformicsSrc/src/assets/image/cam_icon.svg b/PerformicsSrc/src/assets/image/cam_icon.svg new file mode 100644 index 0000000..3570081 --- /dev/null +++ b/PerformicsSrc/src/assets/image/cam_icon.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/PerformicsSrc/src/assets/image/camera.png b/PerformicsSrc/src/assets/image/camera.png new file mode 100644 index 0000000..7de3799 Binary files /dev/null and b/PerformicsSrc/src/assets/image/camera.png differ diff --git a/PerformicsSrc/src/assets/image/camera_asterisk.png b/PerformicsSrc/src/assets/image/camera_asterisk.png new file mode 100644 index 0000000..bd5c39a Binary files /dev/null and b/PerformicsSrc/src/assets/image/camera_asterisk.png differ diff --git a/PerformicsSrc/src/assets/image/camera_icon_grey.svg b/PerformicsSrc/src/assets/image/camera_icon_grey.svg new file mode 100644 index 0000000..d2351bc --- /dev/null +++ b/PerformicsSrc/src/assets/image/camera_icon_grey.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/PerformicsSrc/src/assets/image/chatbot_grey.svg b/PerformicsSrc/src/assets/image/chatbot_grey.svg new file mode 100644 index 0000000..a875c59 --- /dev/null +++ b/PerformicsSrc/src/assets/image/chatbot_grey.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/PerformicsSrc/src/assets/image/delete.svg b/PerformicsSrc/src/assets/image/delete.svg new file mode 100644 index 0000000..d2587d3 --- /dev/null +++ b/PerformicsSrc/src/assets/image/delete.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/PerformicsSrc/src/assets/image/gallery_icon.svg b/PerformicsSrc/src/assets/image/gallery_icon.svg new file mode 100644 index 0000000..dfadc5c --- /dev/null +++ b/PerformicsSrc/src/assets/image/gallery_icon.svg @@ -0,0 +1,3 @@ + + + diff --git a/PerformicsSrc/src/assets/image/greybg.jpg b/PerformicsSrc/src/assets/image/greybg.jpg new file mode 100644 index 0000000..418a8ea Binary files /dev/null and b/PerformicsSrc/src/assets/image/greybg.jpg differ diff --git a/PerformicsSrc/src/assets/image/grooming_icon.svg b/PerformicsSrc/src/assets/image/grooming_icon.svg new file mode 100644 index 0000000..4920050 --- /dev/null +++ b/PerformicsSrc/src/assets/image/grooming_icon.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/PerformicsSrc/src/assets/image/image-gallery.png b/PerformicsSrc/src/assets/image/image-gallery.png new file mode 100644 index 0000000..b5b9f14 Binary files /dev/null and b/PerformicsSrc/src/assets/image/image-gallery.png differ diff --git a/PerformicsSrc/src/assets/image/loader.gif b/PerformicsSrc/src/assets/image/loader.gif new file mode 100644 index 0000000..d2decc9 Binary files /dev/null and b/PerformicsSrc/src/assets/image/loader.gif differ diff --git a/PerformicsSrc/src/assets/image/loader.svg b/PerformicsSrc/src/assets/image/loader.svg new file mode 100644 index 0000000..a3072bf --- /dev/null +++ b/PerformicsSrc/src/assets/image/loader.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/PerformicsSrc/src/assets/image/logo.png b/PerformicsSrc/src/assets/image/logo.png new file mode 100644 index 0000000..11a738a Binary files /dev/null and b/PerformicsSrc/src/assets/image/logo.png differ diff --git a/PerformicsSrc/src/assets/image/normalcamera.svg b/PerformicsSrc/src/assets/image/normalcamera.svg new file mode 100644 index 0000000..ed8b75a --- /dev/null +++ b/PerformicsSrc/src/assets/image/normalcamera.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/PerformicsSrc/src/assets/image/olay_logo.png b/PerformicsSrc/src/assets/image/olay_logo.png new file mode 100644 index 0000000..18e7128 Binary files /dev/null and b/PerformicsSrc/src/assets/image/olay_logo.png differ diff --git a/PerformicsSrc/src/assets/image/parinaam_tag_line.png b/PerformicsSrc/src/assets/image/parinaam_tag_line.png new file mode 100644 index 0000000..1d072e2 Binary files /dev/null and b/PerformicsSrc/src/assets/image/parinaam_tag_line.png differ diff --git a/PerformicsSrc/src/assets/image/pending_icon.svg b/PerformicsSrc/src/assets/image/pending_icon.svg new file mode 100644 index 0000000..763cd23 --- /dev/null +++ b/PerformicsSrc/src/assets/image/pending_icon.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/PerformicsSrc/src/assets/image/ppay_icon.svg b/PerformicsSrc/src/assets/image/ppay_icon.svg new file mode 100644 index 0000000..c5b23a7 --- /dev/null +++ b/PerformicsSrc/src/assets/image/ppay_icon.svg @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/PerformicsSrc/src/assets/image/reject_icon.svg b/PerformicsSrc/src/assets/image/reject_icon.svg new file mode 100644 index 0000000..722022d --- /dev/null +++ b/PerformicsSrc/src/assets/image/reject_icon.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/PerformicsSrc/src/assets/image/routeicon.svg b/PerformicsSrc/src/assets/image/routeicon.svg new file mode 100644 index 0000000..a2411fc --- /dev/null +++ b/PerformicsSrc/src/assets/image/routeicon.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/PerformicsSrc/src/assets/image/storegeoicon.svg b/PerformicsSrc/src/assets/image/storegeoicon.svg new file mode 100644 index 0000000..b41c787 --- /dev/null +++ b/PerformicsSrc/src/assets/image/storegeoicon.svg @@ -0,0 +1,3 @@ + + + diff --git a/PerformicsSrc/src/assets/performics/Covered.svg b/PerformicsSrc/src/assets/performics/Covered.svg new file mode 100644 index 0000000..6c6ef6d --- /dev/null +++ b/PerformicsSrc/src/assets/performics/Covered.svg @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/PerformicsSrc/src/assets/performics/Planned.svg b/PerformicsSrc/src/assets/performics/Planned.svg new file mode 100644 index 0000000..430c66f --- /dev/null +++ b/PerformicsSrc/src/assets/performics/Planned.svg @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/PerformicsSrc/src/assets/performics/add_image.svg b/PerformicsSrc/src/assets/performics/add_image.svg new file mode 100644 index 0000000..3168e51 --- /dev/null +++ b/PerformicsSrc/src/assets/performics/add_image.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/PerformicsSrc/src/assets/performics/apply_for_leave.svg b/PerformicsSrc/src/assets/performics/apply_for_leave.svg new file mode 100644 index 0000000..c7b52f5 --- /dev/null +++ b/PerformicsSrc/src/assets/performics/apply_for_leave.svg @@ -0,0 +1,128 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/PerformicsSrc/src/assets/performics/arrow_danger_icon.svg b/PerformicsSrc/src/assets/performics/arrow_danger_icon.svg new file mode 100644 index 0000000..47728bd --- /dev/null +++ b/PerformicsSrc/src/assets/performics/arrow_danger_icon.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/PerformicsSrc/src/assets/performics/arrow_success_icon.svg b/PerformicsSrc/src/assets/performics/arrow_success_icon.svg new file mode 100644 index 0000000..d913034 --- /dev/null +++ b/PerformicsSrc/src/assets/performics/arrow_success_icon.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/PerformicsSrc/src/assets/performics/arrow_warning_icon.svg b/PerformicsSrc/src/assets/performics/arrow_warning_icon.svg new file mode 100644 index 0000000..2684a5b --- /dev/null +++ b/PerformicsSrc/src/assets/performics/arrow_warning_icon.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/PerformicsSrc/src/assets/performics/calendar_icon.svg b/PerformicsSrc/src/assets/performics/calendar_icon.svg new file mode 100644 index 0000000..7e76159 --- /dev/null +++ b/PerformicsSrc/src/assets/performics/calendar_icon.svg @@ -0,0 +1,4 @@ + + + + diff --git a/PerformicsSrc/src/assets/performics/call_outline.svg b/PerformicsSrc/src/assets/performics/call_outline.svg new file mode 100644 index 0000000..bd245ab --- /dev/null +++ b/PerformicsSrc/src/assets/performics/call_outline.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/PerformicsSrc/src/assets/performics/camera_asterisk.svg b/PerformicsSrc/src/assets/performics/camera_asterisk.svg new file mode 100644 index 0000000..405a7de --- /dev/null +++ b/PerformicsSrc/src/assets/performics/camera_asterisk.svg @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + * + + + diff --git a/PerformicsSrc/src/assets/performics/camera_front_image.svg b/PerformicsSrc/src/assets/performics/camera_front_image.svg new file mode 100644 index 0000000..263e3ef --- /dev/null +++ b/PerformicsSrc/src/assets/performics/camera_front_image.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/PerformicsSrc/src/assets/performics/camera_icon.svg b/PerformicsSrc/src/assets/performics/camera_icon.svg new file mode 100644 index 0000000..bb79ad7 --- /dev/null +++ b/PerformicsSrc/src/assets/performics/camera_icon.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/PerformicsSrc/src/assets/performics/camera_icon_grey.svg b/PerformicsSrc/src/assets/performics/camera_icon_grey.svg new file mode 100644 index 0000000..d2351bc --- /dev/null +++ b/PerformicsSrc/src/assets/performics/camera_icon_grey.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/PerformicsSrc/src/assets/performics/camera_tick.svg b/PerformicsSrc/src/assets/performics/camera_tick.svg new file mode 100644 index 0000000..8e7ef2f --- /dev/null +++ b/PerformicsSrc/src/assets/performics/camera_tick.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/PerformicsSrc/src/assets/performics/camera_white_icon.svg b/PerformicsSrc/src/assets/performics/camera_white_icon.svg new file mode 100644 index 0000000..bf3e379 --- /dev/null +++ b/PerformicsSrc/src/assets/performics/camera_white_icon.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/PerformicsSrc/src/assets/performics/circle_cream.svg b/PerformicsSrc/src/assets/performics/circle_cream.svg new file mode 100644 index 0000000..0c6f141 --- /dev/null +++ b/PerformicsSrc/src/assets/performics/circle_cream.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/PerformicsSrc/src/assets/performics/circle_green.svg b/PerformicsSrc/src/assets/performics/circle_green.svg new file mode 100644 index 0000000..d519224 --- /dev/null +++ b/PerformicsSrc/src/assets/performics/circle_green.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/PerformicsSrc/src/assets/performics/circle_grey.svg b/PerformicsSrc/src/assets/performics/circle_grey.svg new file mode 100644 index 0000000..3ec9c9c --- /dev/null +++ b/PerformicsSrc/src/assets/performics/circle_grey.svg @@ -0,0 +1,87 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + diff --git a/PerformicsSrc/src/assets/performics/circle_red.svg b/PerformicsSrc/src/assets/performics/circle_red.svg new file mode 100644 index 0000000..0e7cce8 --- /dev/null +++ b/PerformicsSrc/src/assets/performics/circle_red.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/PerformicsSrc/src/assets/performics/client_logo.svg b/PerformicsSrc/src/assets/performics/client_logo.svg new file mode 100644 index 0000000..2682c93 --- /dev/null +++ b/PerformicsSrc/src/assets/performics/client_logo.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/PerformicsSrc/src/assets/performics/clock_icon.svg b/PerformicsSrc/src/assets/performics/clock_icon.svg new file mode 100644 index 0000000..ff257df --- /dev/null +++ b/PerformicsSrc/src/assets/performics/clock_icon.svg @@ -0,0 +1,4 @@ + + + + diff --git a/PerformicsSrc/src/assets/performics/close_shot.svg b/PerformicsSrc/src/assets/performics/close_shot.svg new file mode 100644 index 0000000..89f31e7 --- /dev/null +++ b/PerformicsSrc/src/assets/performics/close_shot.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + Close Shot + + diff --git a/PerformicsSrc/src/assets/performics/daily_route_plan.svg b/PerformicsSrc/src/assets/performics/daily_route_plan.svg new file mode 100644 index 0000000..bb6c450 --- /dev/null +++ b/PerformicsSrc/src/assets/performics/daily_route_plan.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/PerformicsSrc/src/assets/performics/delete_icon.svg b/PerformicsSrc/src/assets/performics/delete_icon.svg new file mode 100644 index 0000000..81aef24 --- /dev/null +++ b/PerformicsSrc/src/assets/performics/delete_icon.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/PerformicsSrc/src/assets/performics/delete_icon_red.svg b/PerformicsSrc/src/assets/performics/delete_icon_red.svg new file mode 100644 index 0000000..89fdf16 --- /dev/null +++ b/PerformicsSrc/src/assets/performics/delete_icon_red.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/PerformicsSrc/src/assets/performics/download_data.svg b/PerformicsSrc/src/assets/performics/download_data.svg new file mode 100644 index 0000000..8f27aaf --- /dev/null +++ b/PerformicsSrc/src/assets/performics/download_data.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/PerformicsSrc/src/assets/performics/image.svg b/PerformicsSrc/src/assets/performics/image.svg new file mode 100644 index 0000000..2c3f623 --- /dev/null +++ b/PerformicsSrc/src/assets/performics/image.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/PerformicsSrc/src/assets/performics/leave_status.svg b/PerformicsSrc/src/assets/performics/leave_status.svg new file mode 100644 index 0000000..43fe08f --- /dev/null +++ b/PerformicsSrc/src/assets/performics/leave_status.svg @@ -0,0 +1,182 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/PerformicsSrc/src/assets/performics/like.svg b/PerformicsSrc/src/assets/performics/like.svg new file mode 100644 index 0000000..b12631b --- /dev/null +++ b/PerformicsSrc/src/assets/performics/like.svg @@ -0,0 +1,4 @@ + + + + diff --git a/PerformicsSrc/src/assets/performics/lock_outline.svg b/PerformicsSrc/src/assets/performics/lock_outline.svg new file mode 100644 index 0000000..46d0ca2 --- /dev/null +++ b/PerformicsSrc/src/assets/performics/lock_outline.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/PerformicsSrc/src/assets/performics/login.svg b/PerformicsSrc/src/assets/performics/login.svg new file mode 100644 index 0000000..494adb0 --- /dev/null +++ b/PerformicsSrc/src/assets/performics/login.svg @@ -0,0 +1,358 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LOGIN + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Login + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/PerformicsSrc/src/assets/performics/long_shot.svg b/PerformicsSrc/src/assets/performics/long_shot.svg new file mode 100644 index 0000000..868150a --- /dev/null +++ b/PerformicsSrc/src/assets/performics/long_shot.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + Long Shot + + diff --git a/PerformicsSrc/src/assets/performics/main_menu_icons/POSM_tracking_icon.svg b/PerformicsSrc/src/assets/performics/main_menu_icons/POSM_tracking_icon.svg new file mode 100644 index 0000000..484d196 --- /dev/null +++ b/PerformicsSrc/src/assets/performics/main_menu_icons/POSM_tracking_icon.svg @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/PerformicsSrc/src/assets/performics/main_menu_icons/addFree_visibility_icon.svg b/PerformicsSrc/src/assets/performics/main_menu_icons/addFree_visibility_icon.svg new file mode 100644 index 0000000..985741e --- /dev/null +++ b/PerformicsSrc/src/assets/performics/main_menu_icons/addFree_visibility_icon.svg @@ -0,0 +1,228 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/PerformicsSrc/src/assets/performics/main_menu_icons/backroom_stock_icon.svg b/PerformicsSrc/src/assets/performics/main_menu_icons/backroom_stock_icon.svg new file mode 100644 index 0000000..10c96ab --- /dev/null +++ b/PerformicsSrc/src/assets/performics/main_menu_icons/backroom_stock_icon.svg @@ -0,0 +1,148 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/PerformicsSrc/src/assets/performics/main_menu_icons/brand_sampling_icon.svg b/PerformicsSrc/src/assets/performics/main_menu_icons/brand_sampling_icon.svg new file mode 100644 index 0000000..6842c48 --- /dev/null +++ b/PerformicsSrc/src/assets/performics/main_menu_icons/brand_sampling_icon.svg @@ -0,0 +1,970 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/PerformicsSrc/src/assets/performics/main_menu_icons/competition_promotion_icon.svg b/PerformicsSrc/src/assets/performics/main_menu_icons/competition_promotion_icon.svg new file mode 100644 index 0000000..c7598ce --- /dev/null +++ b/PerformicsSrc/src/assets/performics/main_menu_icons/competition_promotion_icon.svg @@ -0,0 +1,183 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/PerformicsSrc/src/assets/performics/main_menu_icons/competition_sampling_icon.svg b/PerformicsSrc/src/assets/performics/main_menu_icons/competition_sampling_icon.svg new file mode 100644 index 0000000..09dbcb0 --- /dev/null +++ b/PerformicsSrc/src/assets/performics/main_menu_icons/competition_sampling_icon.svg @@ -0,0 +1,970 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/PerformicsSrc/src/assets/performics/main_menu_icons/competition_visibility_icon.svg b/PerformicsSrc/src/assets/performics/main_menu_icons/competition_visibility_icon.svg new file mode 100644 index 0000000..92b1d4e --- /dev/null +++ b/PerformicsSrc/src/assets/performics/main_menu_icons/competition_visibility_icon.svg @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/PerformicsSrc/src/assets/performics/main_menu_icons/contact_conversion_icon.svg b/PerformicsSrc/src/assets/performics/main_menu_icons/contact_conversion_icon.svg new file mode 100644 index 0000000..a634cdc --- /dev/null +++ b/PerformicsSrc/src/assets/performics/main_menu_icons/contact_conversion_icon.svg @@ -0,0 +1,997 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/PerformicsSrc/src/assets/performics/main_menu_icons/other_visibility_icon.svg b/PerformicsSrc/src/assets/performics/main_menu_icons/other_visibility_icon.svg new file mode 100644 index 0000000..eb2d8d5 --- /dev/null +++ b/PerformicsSrc/src/assets/performics/main_menu_icons/other_visibility_icon.svg @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/PerformicsSrc/src/assets/performics/main_menu_icons/paid_visibility_icon.svg b/PerformicsSrc/src/assets/performics/main_menu_icons/paid_visibility_icon.svg new file mode 100644 index 0000000..e7373b2 --- /dev/null +++ b/PerformicsSrc/src/assets/performics/main_menu_icons/paid_visibility_icon.svg @@ -0,0 +1,237 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/PerformicsSrc/src/assets/performics/main_menu_icons/program_icon.svg b/PerformicsSrc/src/assets/performics/main_menu_icons/program_icon.svg new file mode 100644 index 0000000..438124a --- /dev/null +++ b/PerformicsSrc/src/assets/performics/main_menu_icons/program_icon.svg @@ -0,0 +1,1090 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/PerformicsSrc/src/assets/performics/main_menu_icons/promotion_icon.svg b/PerformicsSrc/src/assets/performics/main_menu_icons/promotion_icon.svg new file mode 100644 index 0000000..954fa09 --- /dev/null +++ b/PerformicsSrc/src/assets/performics/main_menu_icons/promotion_icon.svg @@ -0,0 +1,750 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/PerformicsSrc/src/assets/performics/main_menu_icons/sale_icon.svg b/PerformicsSrc/src/assets/performics/main_menu_icons/sale_icon.svg new file mode 100644 index 0000000..d9c6275 --- /dev/null +++ b/PerformicsSrc/src/assets/performics/main_menu_icons/sale_icon.svg @@ -0,0 +1,167 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/PerformicsSrc/src/assets/performics/main_menu_icons/share_of_shelf_icon.svg b/PerformicsSrc/src/assets/performics/main_menu_icons/share_of_shelf_icon.svg new file mode 100644 index 0000000..9e90d9a --- /dev/null +++ b/PerformicsSrc/src/assets/performics/main_menu_icons/share_of_shelf_icon.svg @@ -0,0 +1,133 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/PerformicsSrc/src/assets/performics/main_menu_icons/stock_icon.svg b/PerformicsSrc/src/assets/performics/main_menu_icons/stock_icon.svg new file mode 100644 index 0000000..5292ace --- /dev/null +++ b/PerformicsSrc/src/assets/performics/main_menu_icons/stock_icon.svg @@ -0,0 +1,235 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/PerformicsSrc/src/assets/performics/main_menu_icons/window_icon.svg b/PerformicsSrc/src/assets/performics/main_menu_icons/window_icon.svg new file mode 100644 index 0000000..541b878 --- /dev/null +++ b/PerformicsSrc/src/assets/performics/main_menu_icons/window_icon.svg @@ -0,0 +1,627 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/PerformicsSrc/src/assets/performics/map_icon.svg b/PerformicsSrc/src/assets/performics/map_icon.svg new file mode 100644 index 0000000..81e1766 --- /dev/null +++ b/PerformicsSrc/src/assets/performics/map_icon.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/PerformicsSrc/src/assets/performics/message_icon.svg b/PerformicsSrc/src/assets/performics/message_icon.svg new file mode 100644 index 0000000..2a3d688 --- /dev/null +++ b/PerformicsSrc/src/assets/performics/message_icon.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/PerformicsSrc/src/assets/performics/message_outline.svg b/PerformicsSrc/src/assets/performics/message_outline.svg new file mode 100644 index 0000000..fc93fe9 --- /dev/null +++ b/PerformicsSrc/src/assets/performics/message_outline.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/PerformicsSrc/src/assets/performics/mpin.svg b/PerformicsSrc/src/assets/performics/mpin.svg new file mode 100644 index 0000000..631f8ff --- /dev/null +++ b/PerformicsSrc/src/assets/performics/mpin.svg @@ -0,0 +1,374 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + MPIN + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Next + + + + + + + Confirm Your Pin + + Your Pin + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/PerformicsSrc/src/assets/performics/next_icon.svg b/PerformicsSrc/src/assets/performics/next_icon.svg new file mode 100644 index 0000000..e24c619 --- /dev/null +++ b/PerformicsSrc/src/assets/performics/next_icon.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/PerformicsSrc/src/assets/performics/notification_icon.svg b/PerformicsSrc/src/assets/performics/notification_icon.svg new file mode 100644 index 0000000..7aa1985 --- /dev/null +++ b/PerformicsSrc/src/assets/performics/notification_icon.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/PerformicsSrc/src/assets/performics/oqad_graphic.svg b/PerformicsSrc/src/assets/performics/oqad_graphic.svg new file mode 100644 index 0000000..ae9c2cd --- /dev/null +++ b/PerformicsSrc/src/assets/performics/oqad_graphic.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/PerformicsSrc/src/assets/performics/otp.svg b/PerformicsSrc/src/assets/performics/otp.svg new file mode 100644 index 0000000..be7e059 --- /dev/null +++ b/PerformicsSrc/src/assets/performics/otp.svg @@ -0,0 +1,1397 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OTP + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Next + + + + OTP + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/PerformicsSrc/src/assets/performics/password.svg b/PerformicsSrc/src/assets/performics/password.svg new file mode 100644 index 0000000..2bb75db --- /dev/null +++ b/PerformicsSrc/src/assets/performics/password.svg @@ -0,0 +1,355 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + PASSWORD + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Next + + + + User id + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/PerformicsSrc/src/assets/performics/pasword_icon.svg b/PerformicsSrc/src/assets/performics/pasword_icon.svg new file mode 100644 index 0000000..07fd623 --- /dev/null +++ b/PerformicsSrc/src/assets/performics/pasword_icon.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/PerformicsSrc/src/assets/performics/performic_logo.png b/PerformicsSrc/src/assets/performics/performic_logo.png new file mode 100644 index 0000000..9245be9 Binary files /dev/null and b/PerformicsSrc/src/assets/performics/performic_logo.png differ diff --git a/PerformicsSrc/src/assets/performics/performic_logo.svg b/PerformicsSrc/src/assets/performics/performic_logo.svg new file mode 100644 index 0000000..76fc328 --- /dev/null +++ b/PerformicsSrc/src/assets/performics/performic_logo.svg @@ -0,0 +1,76 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/PerformicsSrc/src/assets/performics/product_id.svg b/PerformicsSrc/src/assets/performics/product_id.svg new file mode 100644 index 0000000..307f924 --- /dev/null +++ b/PerformicsSrc/src/assets/performics/product_id.svg @@ -0,0 +1,1395 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + PROJECT ID + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Next + + + + Project Id + + + + + + + + + diff --git a/PerformicsSrc/src/assets/performics/profile_default.svg b/PerformicsSrc/src/assets/performics/profile_default.svg new file mode 100644 index 0000000..6e54875 --- /dev/null +++ b/PerformicsSrc/src/assets/performics/profile_default.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/PerformicsSrc/src/assets/performics/reason_icon.svg b/PerformicsSrc/src/assets/performics/reason_icon.svg new file mode 100644 index 0000000..3c02161 --- /dev/null +++ b/PerformicsSrc/src/assets/performics/reason_icon.svg @@ -0,0 +1,6 @@ + + + + ! + + diff --git a/PerformicsSrc/src/assets/performics/share.svg b/PerformicsSrc/src/assets/performics/share.svg new file mode 100644 index 0000000..537b453 --- /dev/null +++ b/PerformicsSrc/src/assets/performics/share.svg @@ -0,0 +1,4 @@ + + + + diff --git a/PerformicsSrc/src/assets/performics/sidemenu_icons/adhoc_route_plan_icon.svg b/PerformicsSrc/src/assets/performics/sidemenu_icons/adhoc_route_plan_icon.svg new file mode 100644 index 0000000..d6ea1d6 --- /dev/null +++ b/PerformicsSrc/src/assets/performics/sidemenu_icons/adhoc_route_plan_icon.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/PerformicsSrc/src/assets/performics/sidemenu_icons/automated_reimbursement.svg b/PerformicsSrc/src/assets/performics/sidemenu_icons/automated_reimbursement.svg new file mode 100644 index 0000000..361fd39 --- /dev/null +++ b/PerformicsSrc/src/assets/performics/sidemenu_icons/automated_reimbursement.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/PerformicsSrc/src/assets/performics/sidemenu_icons/break_management_icon.svg b/PerformicsSrc/src/assets/performics/sidemenu_icons/break_management_icon.svg new file mode 100644 index 0000000..3f25a34 --- /dev/null +++ b/PerformicsSrc/src/assets/performics/sidemenu_icons/break_management_icon.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/PerformicsSrc/src/assets/performics/sidemenu_icons/change_password.svg b/PerformicsSrc/src/assets/performics/sidemenu_icons/change_password.svg new file mode 100644 index 0000000..2a2c9f4 --- /dev/null +++ b/PerformicsSrc/src/assets/performics/sidemenu_icons/change_password.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/PerformicsSrc/src/assets/performics/sidemenu_icons/consumer_section_icon.svg b/PerformicsSrc/src/assets/performics/sidemenu_icons/consumer_section_icon.svg new file mode 100644 index 0000000..ef7c2ab --- /dev/null +++ b/PerformicsSrc/src/assets/performics/sidemenu_icons/consumer_section_icon.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/PerformicsSrc/src/assets/performics/sidemenu_icons/daily_route_plan_icon.svg b/PerformicsSrc/src/assets/performics/sidemenu_icons/daily_route_plan_icon.svg new file mode 100644 index 0000000..a5b12cd --- /dev/null +++ b/PerformicsSrc/src/assets/performics/sidemenu_icons/daily_route_plan_icon.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/PerformicsSrc/src/assets/performics/sidemenu_icons/download_data_icon.svg b/PerformicsSrc/src/assets/performics/sidemenu_icons/download_data_icon.svg new file mode 100644 index 0000000..6bd9d53 --- /dev/null +++ b/PerformicsSrc/src/assets/performics/sidemenu_icons/download_data_icon.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/PerformicsSrc/src/assets/performics/sidemenu_icons/exit_icon.svg b/PerformicsSrc/src/assets/performics/sidemenu_icons/exit_icon.svg new file mode 100644 index 0000000..8253861 --- /dev/null +++ b/PerformicsSrc/src/assets/performics/sidemenu_icons/exit_icon.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/PerformicsSrc/src/assets/performics/sidemenu_icons/language_selection_icon.svg b/PerformicsSrc/src/assets/performics/sidemenu_icons/language_selection_icon.svg new file mode 100644 index 0000000..3164483 --- /dev/null +++ b/PerformicsSrc/src/assets/performics/sidemenu_icons/language_selection_icon.svg @@ -0,0 +1,3 @@ + + + diff --git a/PerformicsSrc/src/assets/performics/sidemenu_icons/leave_management_icon.svg b/PerformicsSrc/src/assets/performics/sidemenu_icons/leave_management_icon.svg new file mode 100644 index 0000000..c040973 --- /dev/null +++ b/PerformicsSrc/src/assets/performics/sidemenu_icons/leave_management_icon.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/PerformicsSrc/src/assets/performics/sidemenu_icons/non_merchandised_icon.svg b/PerformicsSrc/src/assets/performics/sidemenu_icons/non_merchandised_icon.svg new file mode 100644 index 0000000..9f94076 --- /dev/null +++ b/PerformicsSrc/src/assets/performics/sidemenu_icons/non_merchandised_icon.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/PerformicsSrc/src/assets/performics/sidemenu_icons/personal_document_icon.svg b/PerformicsSrc/src/assets/performics/sidemenu_icons/personal_document_icon.svg new file mode 100644 index 0000000..484ce94 --- /dev/null +++ b/PerformicsSrc/src/assets/performics/sidemenu_icons/personal_document_icon.svg @@ -0,0 +1,3 @@ + + + diff --git a/PerformicsSrc/src/assets/performics/sidemenu_icons/reports_icon.svg b/PerformicsSrc/src/assets/performics/sidemenu_icons/reports_icon.svg new file mode 100644 index 0000000..d9590ae --- /dev/null +++ b/PerformicsSrc/src/assets/performics/sidemenu_icons/reports_icon.svg @@ -0,0 +1,3 @@ + + + diff --git a/PerformicsSrc/src/assets/performics/sidemenu_icons/services_icon.svg b/PerformicsSrc/src/assets/performics/sidemenu_icons/services_icon.svg new file mode 100644 index 0000000..308bcc0 --- /dev/null +++ b/PerformicsSrc/src/assets/performics/sidemenu_icons/services_icon.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/PerformicsSrc/src/assets/performics/sidemenu_icons/training_section_icon.svg b/PerformicsSrc/src/assets/performics/sidemenu_icons/training_section_icon.svg new file mode 100644 index 0000000..2fd7c17 --- /dev/null +++ b/PerformicsSrc/src/assets/performics/sidemenu_icons/training_section_icon.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/PerformicsSrc/src/assets/performics/sidemenu_icons/upload_data_icon.svg b/PerformicsSrc/src/assets/performics/sidemenu_icons/upload_data_icon.svg new file mode 100644 index 0000000..78b247c --- /dev/null +++ b/PerformicsSrc/src/assets/performics/sidemenu_icons/upload_data_icon.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/PerformicsSrc/src/assets/performics/sidemenu_icons/user_profile_icon.svg b/PerformicsSrc/src/assets/performics/sidemenu_icons/user_profile_icon.svg new file mode 100644 index 0000000..5ecbe52 --- /dev/null +++ b/PerformicsSrc/src/assets/performics/sidemenu_icons/user_profile_icon.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/PerformicsSrc/src/assets/performics/sidemenu_icons/visitor_login_icon.svg b/PerformicsSrc/src/assets/performics/sidemenu_icons/visitor_login_icon.svg new file mode 100644 index 0000000..e366181 --- /dev/null +++ b/PerformicsSrc/src/assets/performics/sidemenu_icons/visitor_login_icon.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/PerformicsSrc/src/assets/performics/store.svg b/PerformicsSrc/src/assets/performics/store.svg new file mode 100644 index 0000000..8012d06 --- /dev/null +++ b/PerformicsSrc/src/assets/performics/store.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/PerformicsSrc/src/assets/performics/store_covered.svg b/PerformicsSrc/src/assets/performics/store_covered.svg new file mode 100644 index 0000000..0b1d331 --- /dev/null +++ b/PerformicsSrc/src/assets/performics/store_covered.svg @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/PerformicsSrc/src/assets/performics/store_merch.svg b/PerformicsSrc/src/assets/performics/store_merch.svg new file mode 100644 index 0000000..d9f117f --- /dev/null +++ b/PerformicsSrc/src/assets/performics/store_merch.svg @@ -0,0 +1,227 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/PerformicsSrc/src/assets/performics/time_icon.svg b/PerformicsSrc/src/assets/performics/time_icon.svg new file mode 100644 index 0000000..46d5bdd --- /dev/null +++ b/PerformicsSrc/src/assets/performics/time_icon.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/PerformicsSrc/src/assets/performics/training.svg b/PerformicsSrc/src/assets/performics/training.svg new file mode 100644 index 0000000..407514e --- /dev/null +++ b/PerformicsSrc/src/assets/performics/training.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/PerformicsSrc/src/assets/performics/upload_data.svg b/PerformicsSrc/src/assets/performics/upload_data.svg new file mode 100644 index 0000000..8c81ee7 --- /dev/null +++ b/PerformicsSrc/src/assets/performics/upload_data.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/PerformicsSrc/src/assets/performics/uploaded_icon.svg b/PerformicsSrc/src/assets/performics/uploaded_icon.svg new file mode 100644 index 0000000..b277114 --- /dev/null +++ b/PerformicsSrc/src/assets/performics/uploaded_icon.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/PerformicsSrc/src/assets/performics/user_icon.svg b/PerformicsSrc/src/assets/performics/user_icon.svg new file mode 100644 index 0000000..7077d5f --- /dev/null +++ b/PerformicsSrc/src/assets/performics/user_icon.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/PerformicsSrc/src/assets/performics/user_outline.svg b/PerformicsSrc/src/assets/performics/user_outline.svg new file mode 100644 index 0000000..10e454f --- /dev/null +++ b/PerformicsSrc/src/assets/performics/user_outline.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/PerformicsSrc/src/assets/performics/users-strike.png b/PerformicsSrc/src/assets/performics/users-strike.png new file mode 100644 index 0000000..d92afc5 Binary files /dev/null and b/PerformicsSrc/src/assets/performics/users-strike.png differ diff --git a/PerformicsSrc/src/components/AndroidShareModal.js b/PerformicsSrc/src/components/AndroidShareModal.js new file mode 100644 index 0000000..22f1f97 --- /dev/null +++ b/PerformicsSrc/src/components/AndroidShareModal.js @@ -0,0 +1,159 @@ +import React from "react"; +import { + View, + Text, + TouchableOpacity, + Modal, + StyleSheet, +} from "react-native"; +import Share from "react-native-share"; +import RNFS from "react-native-fs"; +import MaterialCommunityIcons from "react-native-vector-icons/MaterialCommunityIcons"; + +export default function AndroidShareModal({ visible, imageUri, onClose }) { + const moveToExternal = async (uri) => { + const filename = "shared_image.jpg"; // or png + const dest = RNFS.PicturesDirectoryPath + "/" + filename; // public folder + // Copy file + await RNFS.copyFile(uri.replace("file://", ""), dest); + return "file://" + dest; // add file:// for sharing + }; + const shareOptions = [ + { + name: "Instagram", + social: Share.Social.INSTAGRAM, + icon: "instagram", + color: "#E1306C", + package: "com.instagram.android" + }, + { + name: "WhatsApp", + social: Share.Social.WHATSAPP, + icon: "whatsapp", // MaterialCommunityIcons name + color: "#25D366", // WhatsApp green + package: "com.whatsapp" + }, + { + name: "Facebook", + social: Share.Social.FACEBOOK, + icon: "facebook", + color: "#1877F2", + package: "com.facebook.katana" + }, + { + name: "Twitter / X", + social: Share.Social.TWITTER, + icon: "twitter", + color: "#000", + package: "com.twitter.android" + }, + ]; + + + const shareTo = async (socialApp) => { + try { + // Copy file from cache → external + const finalUri = await moveToExternal(imageUri); + console.log("finalUri", socialApp) + await Share.shareSingle({ + url: imageUri, + social: Share.Social.WHATSAPP, + type: "image/jpeg", + }); + onClose(); + } catch (e) { + console.log("Share Error:", e); + } + }; + + return ( + + + + + + + Share your Selfie + + + {shareOptions.map((opt, index) => ( + shareTo(opt.social)} + > + + {opt.name} + + ))} + + + + Cancel + + + + + + ); +} + +const styles = StyleSheet.create({ + overlay: { + flex: 1, + justifyContent: "flex-end", + backgroundColor: "rgba(0,0,0,0.5)", + }, + modal: { + backgroundColor: "#fff", + borderTopLeftRadius: 25, + borderTopRightRadius: 25, + paddingHorizontal: 20, + paddingTop: 15, + paddingBottom: 25, + }, + handle: { + width: 45, + height: 5, + backgroundColor: "#ccc", + borderRadius: 3, + alignSelf: "center", + marginBottom: 15, + }, + title: { + fontSize: 20, + fontWeight: "600", + textAlign: "center", + marginBottom: 20, + }, + optionsRow: { + flexDirection: "row", + justifyContent: "space-around", + marginBottom: 15, + }, + option: { + alignItems: "center", + width: 90, + }, + optionText: { + marginTop: 6, + fontSize: 15, + fontWeight: "500", + textAlign: "center", + }, + cancelBtn: { + backgroundColor: "#f2f2f2", + paddingVertical: 12, + borderRadius: 10, + }, + cancelText: { + color: "red", + fontSize: 17, + fontWeight: "600", + textAlign: "center", + }, +}); diff --git a/PerformicsSrc/src/components/BadgeModal.js b/PerformicsSrc/src/components/BadgeModal.js new file mode 100644 index 0000000..a4d05e8 --- /dev/null +++ b/PerformicsSrc/src/components/BadgeModal.js @@ -0,0 +1,306 @@ +import React, { useRef, useState } from "react"; +import { + Modal, + View, + Text, + Image, + TouchableOpacity, + StyleSheet, ActionSheetIOS, +} from "react-native"; +import * as ImagePicker from "react-native-image-crop-picker"; +import ViewShot from "react-native-view-shot"; +import { Ionicons } from "./icons"; +import Share from "react-native-share"; +import AndroidShareModal from "./AndroidShareModal"; + +export default function BadgeModal({ visible, onClose, onSave }) { + // Android share modal state + const [shareUri, setShareUri] = useState(null); + const [showShareModal, setShowShareModal] = useState(false); + const [photo, setPhoto] = useState(null); + const shotRef = useRef(null); + + const openCamera = () => { + ImagePicker.openCamera({ + width: 300, // crop width + height: 400, + cropping: true, + //freeStyleCropEnabled: true, // allows user to crop any way they want + cropperToolbarTitle: "Crop your selfie", // optional + compressImageQuality: 0.8, // optional + mediaType: 'photo', + useFrontCamera: true, // selfie only + }) + .then(image => { + console.log(image.path); + setPhoto(image.path); // set captured & cropped photo + }) + .catch(e => { + if (e.code === 'E_PICKER_CANCELLED') { + console.log('User cancelled image picker'); + } else { + console.log('Error: ', e); + } + }); + }; + + const sharePhoto = async () => { + try { + if (!shotRef.current) return; + setTimeout(async () => { + const uri = await shotRef.current.capture(); + onSave(uri); + // setShareUri(uri); + // setShowShareModal(true); + onClose(); + setTimeout(() => { + setPhoto(null); + }, 1000); + const options = { + title: "Share Image", + url: uri, // file:// or base64 + type: "image/jpeg", + }; + await Share.open(options); + }, 100); + } catch (error) { + console.log("Share Error:", error); + } + }; + + return ( + <> + + + + + {/* CLOSE */} + + × + + + {/* The layout that will be exported */} + + + + {/* Badge frame + photo */} + + + + {photo && ( + console.log("Photo loaded")} + /> + )} + + {!photo ? ( + + + Smile, Click, Celebrate! + + {'\n'} + Take your Retail Day selfie! + {'\n'} + Share it on Instagram and tag + {'\n'} + + @cpmindiasm + + + + ) : ( + + I’m a Retail Star with{"\n"}CPM India + + )} + + + + + {/* ACTION BUTTONS */} + + {!photo ? ( + + + Take a Selfie + + + ) : ( + + + + Share with friends + + + + + Click Selfie again + + + + )} + + + + + setShowShareModal(false)} + /> + + ); +} + +const styles = StyleSheet.create({ + + overlay: { + flex: 1, + backgroundColor: "rgba(0,0,0,0.6)", + justifyContent: "center", + alignItems: "center", + paddingHorizontal: 5, + }, + + card: { + width: "95%", + backgroundColor: "#fff", + borderRadius: 20, + paddingBottom: 25, + alignItems: "center", + }, + + closeBtn: { + alignSelf: "flex-end", + padding: 10, + }, + + closeText: { + fontSize: 30, + width: 40, // circle width + height: 40, // circle height + borderRadius: 20, // half of width/height = circle + backgroundColor: "#F2F2F2", // optional + shadowOpacity: 0.2, + shadowRadius: 4, + textAlign: "center", + }, + + badgeContainer: { + width: "100%", + padding: 15, + alignItems: "center", + backgroundColor: "white" + }, + + bgImage: { + ...StyleSheet.absoluteFillObject, + opacity: 0.25, + borderRadius: 20, + }, + + centerWrapper: { + width: 300, + height: 300, + justifyContent: "center", + alignItems: "center", + marginBottom: 15, + position: "relative", + overflow: "hidden", // clip the photo within the badge + }, + + badgeFrame: { + width: "100%", + height: "100%", + position: "absolute", + }, + + profilePhoto: { + width: 125, + height: 125, + borderRadius: 60, + position: "absolute", + top: "52.5%", // move to center vertically + left: "49%", + transform: [{ translateX: -60 }, { translateY: -60 }], // offset half of width/height + resizeMode: "cover", + }, + + subtextWithout: { + fontSize: 16, + fontWeight: "500", + textAlign: "center", + color: "#000", + }, + subtext: { + fontSize: 25, + fontWeight: "900", + textAlign: "center", + color: "#000", + lineHeight: 30, + }, + + blue: { + color: "#1E73FF", // same bright blue as your sample + fontWeight: "900", + }, + + btn: { + width: "90%", + backgroundColor: "#1A73E8", + paddingVertical: 14, + borderRadius: 10, + marginTop: 20, + }, + + btnText: { + color: "#fff", + fontSize: 18, + textAlign: "center", + }, + + shareBtn: { + flexDirection: "row", + alignItems: "center", + paddingVertical: 10, + paddingHorizontal: 18, + borderWidth: 1, + borderColor: "#E0E0E0", + borderRadius: 10, + alignSelf: "center", + backgroundColor: "#fff", + }, + + retakeBtn: { + flexDirection: "row", + alignItems: "center", + paddingVertical: 5, + paddingHorizontal: 10, + borderWidth: 1, + borderColor: "#EDF7FF", + borderRadius: 15, + alignSelf: "center", + backgroundColor: "#EDF7FF", + }, + + shareText: { + fontSize: 16, + fontWeight: "600", + color: "#000", // same black text + }, + +}); diff --git a/PerformicsSrc/src/components/Camera.js b/PerformicsSrc/src/components/Camera.js new file mode 100644 index 0000000..dcf4619 --- /dev/null +++ b/PerformicsSrc/src/components/Camera.js @@ -0,0 +1,641 @@ +import React, { useRef, useCallback, useState, useEffect, useMemo } from "react"; +import { Dimensions, Image, Platform, StatusBar, Text, TouchableOpacity, View, Animated, Alert, StyleSheet } from "react-native"; +import Reanimated, { + Extrapolate, interpolate, runOnJS, useAnimatedProps, useAnimatedReaction, useSharedValue, +} from 'react-native-reanimated'; + +import { customCamera, customStyles, deffontfamily, GetPageTheme, WP } from "../styles/Global"; +import { useRoute } from '@react-navigation/native'; +import { useCameraDevice, useCameraDevices, useFrameProcessor } from 'react-native-vision-camera'; +import PropTypes from 'prop-types'; +import { notify } from "./notify"; +import { hasCameraPermission } from "./geolocation"; +import { AntDesign, Entypo, MaterialCommunityIcons, MaterialIcons } from "./icons"; +import { connect } from 'react-redux'; +import { mapStateToProps, mapDispatchToProps } from '../reducers/contextProvider'; +import { launchImageLibrary } from 'react-native-image-picker'; +import Orientation from 'react-native-orientation-locker'; +import { PORTRAIT } from "react-native-orientation-locker"; +import moment from "moment"; +import * as RNFS from 'react-native-fs'; +import ViewShot, { CaptureOptions, captureRef } from "react-native-view-shot"; +import { Gesture, PinchGestureHandler } from 'react-native-gesture-handler'; +import CustomModal from "./CustomModal"; +const { width, height } = Dimensions.get('window'); +//import { Camera } from "react-native-vision-camera-v3-image-labeling"; +import { Camera } from "react-native-vision-camera"; +import { useNavigation } from '@react-navigation/native'; +import { SafeAreaView } from "react-native-safe-area-context"; +//useImageLabeler +const VC_OR = { + "landscapeLeft": "landscapeLeft", + "landscapeRight": "landscapeRight", + "portraitUpsideDown": "portraitUpsideDown", + "portrait": "portrait", +} + +function CustomCamera(props) { + const cameraRef = useRef(null); + const route = useRoute(); + const navigation = useNavigation(); + const PageTheme = GetPageTheme(props.DarkTheme, route.name); + const cameraStyle = customCamera(props.DarkMode, route.name); + const customStyle = customStyles(props.DarkMode, route.name); + const camera = useRef(null) + const viewShotRef = useRef(); + const devices = useCameraDevices(); + const supportsCameraFlipping = useMemo(() => devices.back != null && devices.front != null, [devices.back, devices.front]); + const dim = Dimensions.get("window"); + const [barcode, setBarcode] = React.useState({}); + const [qrCodeEnable, setQRCodeEnable] = useState(false); + const orAnim = useRef(new Animated.Value(0)).current; + const [showImage, setshowImage] = useState(false); + const [imgurl, setimgurl] = useState(''); + const [temp_imgurl, setTemp_imgurl] = useState(''); + const [BottomText, setBottomText] = useState(props.BottomText || ''); + const [TopText, setTopText] = useState(''); + const [photoObj, setPhotoObj] = useState({}); + const [isActive, setisActive] = useState(false); + const [isPhotoTaken, setIsPhotoTaken] = useState(false); + const [isCameraActive, setIsCameraActive] = useState(false); + const [activeFlashMode, setActiveFlashMode] = useState('off'); + + const [orientation, setOrientation] = useState(PORTRAIT.toLowerCase()); + const [islandscape, setIslandscape] = useState(false); + const [showCameraForScreen, setShowCameraForScreen] = useState(true); + const [gridEnable, setGridEnable] = useState(false); + const [showCapLandsImgAlert, setShowCapLandsImgAlert] = useState(false); + const [count, setCount] = useState(0); + const [ImageExtraSPace, setImageExtraSPace] = useState(1.06); + const [cameraPosition, setCameraPosition] = useState((props.cameraType == 'front' ? 'front' : 'back')); + const devices1 = useCameraDevice(props.cameraType == 'front' ? 'front' : 'back'); + const ReanimatedCamera = Reanimated.createAnimatedComponent(Camera) + ////detect object + const alertShown = useRef(false); + const TARGET_LABELS = [ + 'Mobile phone', + 'TV', + 'Television', + 'Tablet', + 'Laptop', + 'Computer', + 'Musical instrument' + ]; + + const onDataReceived = useCallback((data) => { + // console.log("data_new", data) + // if (alertShown.current) return; + + // const filtered = data.filter(item => + // TARGET_LABELS.includes(item.label) + // ); + // if (filtered.length > 0) { + // console.log("filtered_new", filtered) + // alertShown.current = true; + // Alert.alert( + // '⚠️ Warning!', + // 'Fake image detected!', + // [{ + // text: 'OK', onPress: () => { + // console.log("ddlfkdff") + // navigation.goBack(); + // } + // }] + // ); + // } + }, []); + + Reanimated.addWhitelistedNativeProps({ + zoom: true, + }) + const zoom = useSharedValue(0) + zoom.value = 0 + // const minZoom = device?.minZoom ?? 1; + const minZoom = devices1?.minZoom ?? 1; + const maxZoom = Math.min(devices1?.maxZoom ?? 1, 20); + const onZoomPress = useCallback(() => { + // setCount(count+1) + zoom.value = withSpring(count) + }, [count]) + const SCALE_FULL_ZOOM = 3; + // const zoom = useSharedValue(1); + const startZoom = useSharedValue(1); + const onPinchGesture = Gesture.Pinch() + .onBegin(() => { + startZoom.value = zoom.value; + }) + .onUpdate((event) => { + // Map pinch scale to linear zoom + const scale = interpolate( + event.scale, + [1 - 1 / SCALE_FULL_ZOOM, 1, SCALE_FULL_ZOOM], + [-1, 0, 1], + Extrapolate.CLAMP + ); + zoom.value = interpolate( + scale, + [-1, 0, 1], + [minZoom, startZoom.value, maxZoom], + Extrapolate.CLAMP + ); + }); + + const animatedProps = useAnimatedProps( + () => ({ zoom: zoom.value }), + [zoom] + ) + + useEffect(() => { + let showGrid = props.gridEnable != null ? (props.gridEnable) : false; + setGridEnable(showGrid); + }, [props.gridEnable]) + + useEffect(() => { + let showQRCam = props.QRCodeEnable != null ? (props.QRCodeEnable) : false; + setQRCodeEnable(showQRCam); + }, [props.QRCodeEnable]) + + useEffect(() => { + console.log('CameraGallery in camera :', props.CameraGallery, 'for screen:', props.enableGallerForScreen); + let showScreenCam = props.enableGallerForScreen != null ? (props.enableGallerForScreen) : true; + setShowCameraForScreen(showScreenCam); + hasCameraPermission(); + Orientation.addDeviceOrientationListener((orientation) => { + let or = orientation.toLowerCase(); + if (or == 'unknown') or = 'portrait'; + let isLS = (or == 'landscape-left' || or == 'landscape-right' || or == 'landscape'); + let or_VC = or == 'landscape-left' ? VC_OR.landscapeRight : (or == 'landscape-right' ? VC_OR.landscapeLeft : (or == 'portrait-upside-down' ? VC_OR.portraitUpsideDown : VC_OR.portrait)); + setOrientation(or_VC); + setIslandscape(isLS); + Animated.timing(orAnim, { + toValue: isLS ? 1 : 0, + duration: 400, + useNativeDriver: false, + }).start(); + + console.log("onchange:", orientation, or_VC); + }); + + return () => { + Orientation.removeOrientationListener((orientation) => { console.log("or listener removed") }); + Orientation.removeAllListeners(); + } + + }, []); + + useEffect(() => { + console.log('showCamera changed:', props.showCamera); + alertShown.current = false; + if (props.showCamera == true) { + showCamera(); + } + else { + hideCamera(); + } + }, [props.showCamera]); + + function showCamera() { + console.log('showCamera customcamera'); + if (props.cameraType != 'front') { + setShowCapLandsImgAlert(true); + setTimeout(() => { + setShowCapLandsImgAlert(false); + }, 1500); + } + setIsCameraActive(true); + setisActive(true); + } + + async function hideCamera(type = '') { + setIsCameraActive(false); + setisActive(false); + setimgurl(''); + setIsPhotoTaken(false); + setshowImage(true); + console.log("isCameraScreen", props.isCameraScreen, type) + if (props.isCameraScreen != null && props.isCameraScreen == true) { + // Don't call onHideCamera if it is a camera screen + if (type == 'cancel') { + props.onHideCamera(); + } + } + else { + if (props.onHideCamera != null && typeof props.onHideCamera == 'function') { + props.onHideCamera(); + } + } + } + + function closeCamera() { + setIsCameraActive(false); + } + const onFlipCameraPressed = useCallback(() => { + setCameraPosition((p) => (p === 'back' ? 'front' : 'back')); + }, []); + + async function takePhoto() { + console.log("Take foto") + if (camera.current != null && typeof camera.current === 'object') { + const photo = await camera.current.takePhoto({ + flash: activeFlashMode, + }) + // console.log("taken photo params:",photo) + if (photo != null) { + let path = 'file://' + photo.path; + let picture_clicked_time = moment().format('DD-MM-YYYY HH:mm:ss'); + console.log(path); + // required larger height of image for landscape image + let ExtraSpace = 1.1; // portrait image def + if (photo.width > photo.height) { + // landscape image + ExtraSpace = 1.2 + } + + console.log("takephhoto:w x h", photo.width, photo.height, photo); + let obj = { uri: path, original_path: photo.path, width: parseInt(photo.width), height: parseInt(photo.height), ExtendedHeight: parseInt(photo.height * ExtraSpace), or_Mode: orientation }; + setImageExtraSPace(ExtraSpace); + setPhotoObj(obj); + setTemp_imgurl(path) + let bText = props.BottomText + " | Date: " + picture_clicked_time; + setBottomText(bText); + setTopText(picture_clicked_time); + setIsPhotoTaken(true); + } + else { + notify('Something went wrong! Cannot take picture.'); + setisActive(false); + } + } + else { + notify('Camera not found!.'); + setisActive(false); + } + + closeCamera(); + } + + async function onRetake() { + await RNFS.unlink(temp_imgurl); + // setTemp_imgurl(''); + setIsPhotoTaken(false); + setshowImage(false); + setIsCameraActive(true); + setisActive(true); + } + async function onCameraImgOk() { + zoom.value = 0 + let obj = photoObj; + obj.viewShotRef = viewShotRef; + setPhotoObj(obj); + setisActive(false); + setIsPhotoTaken(false); + setshowImage(true); + if (props.onImageCaptured != null && typeof props.onImageCaptured == 'function') { + props.onImageCaptured(obj); + } + + hideCamera(); + } + + async function onQRScanned(qrData) { + console.log("qrData:", qrData.data); + setisActive(false); + if (props.onImageCaptured != null && typeof props.onImageCaptured == 'function') { + let QR_withValidChars = qrData.data != null && qrData.data != '' ? qrData.data.replace(/["']/g, '') : ''; + props.onImageCaptured(QR_withValidChars); + } + hideCamera(); + } + + function flashOnOff(type = '') { + console.log('setflashmode:', type); + if (type != '' && type != null) { + setActiveFlashMode(type); + if (type == 'on') { + + } + else if (type == 'off') { + + } + else if (type == 'auto') { + + } + } + } + + function pickGalleryImage(img) { + console.log('pickGalleryImage:', img, typeof img.assets); + if (img != null && img.assets != null && typeof img.assets == 'object' && img.assets.length > 0 && img.assets[0].uri != null) { + let photo = img.assets[0]; + let path = photo.uri; + console.log(path); + let times = photo.timestamp != null && photo.timestamp != '' ? photo.timestamp : new Date(); + let obj = { uri: path, width: photo.width, height: photo.height, 'fromGallery': true, 'datetime': times }; + setPhotoObj(obj); + setTemp_imgurl(path) + let picture_clicked_time = moment().format('DD-MM-YYYY HH:mm:ss'); + let bText = props.BottomText + " | " + picture_clicked_time; + + setTopText(picture_clicked_time); + setBottomText(bText); + setIsPhotoTaken(true); + } + else { + notify('Something went wrong! Cannot take picture.'); + setisActive(false); + } + } + + function getImageFromGallery() { + launchImageLibrary({ mediaType: 'photo', selectionLimit: 1, includeExtra: true, cameraType: 'front' }, pickGalleryImage) + } + + function _renderCaptureBtn() { + return ( + <> + { takePhoto(); }}> + + + + ) + } + + function _renderGalleryBtn() { + return ( + { getImageFromGallery() }}> + + + + + + + ) + } + + function _renderBottomControls() { + return ( + + {_renderCaptureBtn()} + {props.CameraGallery == true && showCameraForScreen == true && + _renderGalleryBtn() + } + + ) + } + function _renderOrientationIcon() { + let deg = 0; + if (orAnim != null) { + deg = orAnim.interpolate({ + inputRange: [0, 1], + outputRange: ['0deg', '90deg'], + }); + } + return ( + + + + ) + } + + function _renderCancelBtn() { + return ( + { hideCamera('cancel') }}> + + + Cancel + + + ) + } + + function _renderRetakeBtn() { + return ( + { onRetake() }}> + + + + + Retake + + + ) + } + + + + function _renderSaveImgBtn() { + return ( + { onCameraImgOk() }}> + + + Ok + + + ) + } + + + + function _renderImageControls() { + return ( + + + {_renderCancelBtn()} + {_renderRetakeBtn()} + {_renderSaveImgBtn()} + + + ) + } + + function _renderFlashBtn(type = 'on') { + return ( + { flashOnOff(type) }}> + {type == 'on' && } + {type == 'off' && } + {type == 'auto' && } + + ) + } + + function _renderCameraSwapMode() { + return ( + { onFlipCameraPressed() }}> + {cameraPosition == 'front' && } + {cameraPosition == 'back' && } + + ) + } + + function _renderTopControls() { + return ( + + + {_renderFlashBtn('on')} + {_renderFlashBtn('off')} + + + ) + } + + function _renderSideControls() { + + let enableCameraFlip = props.enableCameraFlip != null ? (props.enableCameraFlip) : false; + return ( + + + {_renderFlashBtn('on')} + {_renderFlashBtn('off')} + {supportsCameraFlipping && enableCameraFlip == true && + _renderCameraSwapMode() + } + + + ) + } + const cameraAnimatedProps = useAnimatedProps(() => { + const z = Math.max(Math.min(zoom.value, maxZoom), minZoom); + return { + zoom: z, + }; + }, [maxZoom, minZoom, zoom]); + + + + const cameraView = () => { + // return ( + // + // ) + } + + function _render_AutoAlertModal() { + return ( + + + + ) + } + + function _renderSCreenSHotView() { + let is_photo_mode_LS = (photoObj.or_Mode == VC_OR.landscapeLeft || photoObj.or_Mode == VC_OR.landscapeRight) + let imgSIze = (photoObj.or_Mode != null && photoObj.or_Mode != '' ? (is_photo_mode_LS ? { width: '100%' } : { height: '100%' }) : {}); + let vieshotStyle = {}; + let itemW = photoObj.width, itemH = photoObj.height; + + let hR = (itemH / itemW) * 100; + let screenWidth = WP('100%'); + let ht = screenWidth * (hR / 100); + vieshotStyle = { width: '100%', height: ht }; + + + + return ( + + {temp_imgurl != null && temp_imgurl != '' && + + {/* (props.cameraType == 'front' && Platform.OS=='ios' ? { transform: [{ scaleX: -1 }] } : {}) */} + + } + {_renderImageControls()} + + ) + } + + return ( + + {temp_imgurl != null && temp_imgurl != '' && + + + + + {TopText != null && TopText != '' && {TopText}} + {BottomText != null && BottomText != '' && {BottomText}} + + + + } + {props.showCamera == true && isActive == true && + + + } + + ) + +}; + +export default connect(mapStateToProps, mapDispatchToProps)(CustomCamera); + +CustomCamera.propTypes = { + cameraType: PropTypes.oneOf(['front', 'back']), + showCamera: PropTypes.bool, + onImageCaptured: PropTypes.func, + onHideCamera: PropTypes.func, + + +}; diff --git a/PerformicsSrc/src/components/Camera_Bckup.js b/PerformicsSrc/src/components/Camera_Bckup.js new file mode 100644 index 0000000..054795d --- /dev/null +++ b/PerformicsSrc/src/components/Camera_Bckup.js @@ -0,0 +1,517 @@ +import React, { useRef, useState, useEffect } from "react"; +import { Dimensions, Image, Platform, ScrollView, StatusBar, Text, TouchableOpacity, View } from "react-native"; +import { customCamera, customStyles, GetPageTheme, HP, WP } from "../styles/Global"; +import { customCamera_LS } from "../styles/Global_LS"; +import { useRoute } from '@react-navigation/native'; +import { Camera, useCameraDevices } from 'react-native-vision-camera'; +import PropTypes from 'prop-types'; +import { notify } from "./notify"; +import { hasCameraPermission } from "./geolocation"; +import { Entypo, MaterialCommunityIcons } from "./icons"; +import { useOrientation, useOrientation2 } from "../controller/functions"; +import { connect } from 'react-redux'; +import { mapStateToProps, mapDispatchToProps } from '../reducers/contextProvider'; +import { launchCamera, launchImageLibrary, CameraOptions } from 'react-native-image-picker'; +// import Orientation from 'react-native-orientation'; +import Orientation from 'react-native-orientation-locker'; +import { OrientationLocker, PORTRAIT, LANDSCAPE } from "react-native-orientation-locker"; +import moment from "moment"; +import * as RNFS from 'react-native-fs'; +import ViewShot from "react-native-view-shot"; +import { AllKpiImg } from "../../src(Camera&img)/constants/constants"; +import CustomModal from "./CustomModal"; + +function CustomCamera(props) { + const route = useRoute(); + const PageTheme = GetPageTheme(props.DarkTheme, route.name); + const cameraStyle = customCamera(props.DarkMode, route.name); + // const [cameraStyle, setCameraStyle] = useState(customCamera(props.DarkMode,route.name)); + const customStyle = customStyles(props.DarkMode, route.name); + + const camera = useRef(null) + const viewShort = useRef(); + const devices = useCameraDevices('wide-angle-camera'); + const device = props.cameraType == 'front' ? devices.front : devices.back; + const dim = Dimensions.get("window"); + // const [camera,setcamera]=useState(null); + const [showImage, setshowImage] = useState(false); + const [imgurl, setimgurl] = useState(''); + const [temp_imgurl, setTemp_imgurl] = useState(''); + const [photoObj, setPhotoObj] = useState({}); + const [isActive, setisActive] = useState(false); + const [isPhotoTaken, setIsPhotoTaken] = useState(false); + const [isCameraActive, setIsCameraActive] = useState(false); + const [activeFlashMode, setActiveFlashMode] = useState('off'); + const [orientation, setOrientation] = useState(useOrientation(dim.width, dim.height)); + const [currentOr, setCurrentOr] = useState(""); + const [showCameraForScreen, setShowCameraForScreen] = useState(true); + const [gridEnable, setGridEnable] = useState(false); + const [showCapLandsImgAlert, setShowCapLandsImgAlert] = useState(false); + + + + // useEffect(()=>{ + // if(device != null && (temp_imgurl != null && temp_imgurl != '') && isPhotoTaken){ + // console.log('take screenshot now2!!',photoObj.or_Mode,photoObj); + // screenShort(); + // } + // },[isPhotoTaken]) + + function screenShort(){ + setTimeout(function (){ + console.log('after 10 sec'); + },20*1000) + } + + async function screenShort2(){ + console.log('in screenShort2'); + let test = await viewShort.current.capture() + let FileName = 'abc146.png'; + let tst = RNFS.PicturesDirectoryPath+"/Telegram"+FileName + console.log("album--",tst, " --",test) + + await RNFS.copyFile(test, tst).then(res=>console.log("passssedd")) + setCurrentOr("") + } + + useEffect(() => { + let showGrid = props.gridEnable != null ? (props.gridEnable) : false; + + console.log("props.gridEnable-----------",props.gridEnable, " ---",showGrid) + setGridEnable(showGrid); + },[props.gridEnable]) + + + useEffect(() => { + + console.log('CameraGallery in camera :', props.CameraGallery, 'for screen:', props.enableGallerForScreen); + let showScreenCam = props.enableGallerForScreen != null ? (props.enableGallerForScreen) : true; + setShowCameraForScreen(showScreenCam); + hasCameraPermission(); + + + // Dimensions.addEventListener('change', ({window:{width,height}})=>{ + // let or=useOrientation(width,height); + // setOrientation(or); + // }); + // const initial = Orientation.getInitialOrientation(); + // console.log('initial:',initial); + Orientation.addDeviceOrientationListener((orientation) => { + let or = useOrientation2(orientation) + // console.log("or ------") + setOrientation(or); + + }); + + return () => { + Orientation.removeOrientationListener((orientation) => { + console.log('orientation: listener removed:', orientation); + }); + Orientation.removeAllListeners(); + } + + }, []); + + useEffect(() => { + console.log('showCamera changed:', props.showCamera); + if (props.showCamera == true) { + showCamera(); + } + else { + hideCamera(); + } + }, [props.showCamera]); + + function showCamera() { + console.log('showCamera customcamera'); + if(props.cameraType != 'front' ){ + setShowCapLandsImgAlert(true); + setTimeout(() => { + setShowCapLandsImgAlert(false); + }, 3000); + } + + setIsCameraActive(true); + setisActive(true); + } + + async function hideCamera() { + + if(temp_imgurl!=null && temp_imgurl!='') + { + await RNFS.unlink(temp_imgurl); + } + setIsCameraActive(false); + setisActive(false); + setPhotoObj({}); + setimgurl(''); + setIsPhotoTaken(false); + setshowImage(true); + setTemp_imgurl(''); + if (props.onHideCamera != null && typeof props.onHideCamera == 'function') { + props.onHideCamera(); + } + } + + function closeCamera() { + setIsCameraActive(false); + } + + async function takePhoto() { + // let test = await viewShort.current.capture() + // let FileName = 'abc143.png'; + // let tst = RNFS.PicturesDirectoryPath+"/Telegram"+FileName + // console.log("album--",tst, " --",test) + + // await RNFS.copyFile(test, tst).then(res=>console.log("passssedd")) + if (camera.current != null && typeof camera.current === 'object') { + console.log("orientation---------------current--",orientation) + // setCurrentOr(orientation) + const photo = await camera.current.takePhoto({ + // flash: 'on', + }) + + // console.log("file://------1",photo) + if (photo != null) { + let path = 'file://' + photo.path; + + console.log(path); + let obj = { uri: path, width: photo.width, height: photo.height,or_Mode:orientation }; + setPhotoObj(obj); + setTemp_imgurl(path) + setIsPhotoTaken(true); + } + else { + notify('Something went wrong! Cannot take picture.'); + setisActive(false); + } + } + else { + notify('Camera not found!.'); + setisActive(false); + } + closeCamera(); + } + + async function onRetake() { + await RNFS.unlink(temp_imgurl); + setTemp_imgurl(''); + setIsPhotoTaken(false); + setshowImage(false); + setIsCameraActive(true); + setisActive(true); + } + async function onCameraImgOk() { + let test = await viewShort.current.capture() + let obj = photoObj; + if( gridEnable){ + obj.uri = test; + }else{ + obj.uri = temp_imgurl; + } + setPhotoObj(obj); + setimgurl(temp_imgurl); + setisActive(false); + setIsPhotoTaken(false); + setshowImage(true); + setTemp_imgurl(''); + + if (props.onImageCaptured != null && typeof props.onImageCaptured == 'function') { + console.log('call onImageCaptured'); + props.onImageCaptured(obj); + + } + hideCamera(); + } + + function flashOnOff(type = '') { + console.log('setflashmode:', type); + if (type != '' && type != null) { + setActiveFlashMode(type); + if (type == 'on') { + + } + else if (type == 'off') { + + } + else if (type == 'auto') { + + } + } + } + + function pickGalleryImage(img) { + console.log('pickGalleryImage:', img, typeof img.assets); + if (img != null && img.assets != null && typeof img.assets == 'object' && img.assets.length > 0 && img.assets[0].uri != null) { + let photo = img.assets[0]; + let path = photo.uri; + console.log(path); + let times = photo.timestamp != null && photo.timestamp != '' ? photo.timestamp : new Date(); + let obj = { uri: path, width: photo.width, height: photo.height, 'fromGallery': true, 'datetime': times }; + setPhotoObj(obj); + setTemp_imgurl(path) + setIsPhotoTaken(true); + } + else { + notify('Something went wrong! Cannot take picture.'); + setisActive(false); + } + } + + function getImageFromGallery() { + launchImageLibrary({ mediaType: 'photo', selectionLimit: 1, includeExtra: true, cameraType: 'front' }, pickGalleryImage) + } + + function _renderCaptureBtn() { + return ( + { takePhoto(); }}> + + + ) + } + + function _renderGalleryBtn() { + return ( + { getImageFromGallery() }}> + + + + + + + ) + } + + function _renderBottomControls() { + return ( + + {_renderCaptureBtn()} + {props.CameraGallery == true && showCameraForScreen == true && + _renderGalleryBtn() + } + + ) + } + + function _renderCancelBtn() { + return ( + { hideCamera() }}> + + + Cancel + + + ) + } + + function _renderRetakeBtn() { + return ( + { onRetake() }}> + + + + + Retake + + + ) + } + + + + function _renderSaveImgBtn() { + return ( + { onCameraImgOk() }}> + + + Ok + + + ) + } + + + + function _renderImageControls() { + return ( + + + {_renderCancelBtn()} + {_renderRetakeBtn()} + {_renderSaveImgBtn()} + + + ) + } + + function _renderFlashBtn(type = 'on') { + return ( + { flashOnOff(type) }}> + {type == 'on' && } + {type == 'off' && } + {type == 'auto' && } + + ) + } + + function _renderTopControls() { + return ( + + + {_renderFlashBtn('on')} + {_renderFlashBtn('off')} + + + ) + } + + function _renderSideControls() { + return ( + + + {_renderFlashBtn('on')} + {_renderFlashBtn('off')} + + + ) + } + + function _renderSCreenSHotView(){ + let imgSIze=(photoObj.or_Mode!=null && photoObj.or_Mode!='' ?(photoObj.or_Mode==='LANDSCAPE'?{width:'100%'}:{height:'100%'}):{}); + let vieshotStyle={}; + let itemW=photoObj.width,itemH=photoObj.height; + if(photoObj.or_Mode==='LANDSCAPE'){ + if(photoObj.or_Mode===orientation){ + vieshotStyle ={width:'100%',height:'100%'}; + } + else{ + let hR=(itemH/itemW )*100; + let screenWidth=WP('100%'); + let ht=screenWidth*(hR/100); + vieshotStyle ={width:'100%',height:ht}; + } + + } + else{ + if(photoObj.or_Mode===orientation){ + vieshotStyle ={width:'100%',height:'100%'}; + } + else{ + let wR=(itemW/itemH )*100; + let screenHt=WP('100%'); + let wd=screenHt*(wR/100); + vieshotStyle ={width:wd,height:'100%'}; + } + } + + console.log('vieshotStyle',vieshotStyle); + + return( + + + {console.log('image is showing :')} + + { + gridEnable && + + + + + + + + + + + + + } + + {_renderImageControls()} + + ) + } + + function _render_AutoAlertModal(){ + console.log('_render_AutoAlertModal2',showCapLandsImgAlert); + return ( + + + + ) + } + + if (props.showCamera == true && isActive == true) { + + return ( + + console.log('onChange', orientation)} + onDeviceChange={orientation => console.log('onDeviceChange', orientation)} + /> + + ); + } + else { + return () + } + +}; + +export default connect(mapStateToProps, mapDispatchToProps)(CustomCamera); + +CustomCamera.propTypes = { + cameraType: PropTypes.oneOf(['front', 'back']), + showCamera: PropTypes.bool, + onImageCaptured: PropTypes.func, + onHideCamera: PropTypes.func, +}; \ No newline at end of file diff --git a/PerformicsSrc/src/components/CompletionModal.js b/PerformicsSrc/src/components/CompletionModal.js new file mode 100644 index 0000000..84692c3 --- /dev/null +++ b/PerformicsSrc/src/components/CompletionModal.js @@ -0,0 +1,140 @@ +import React from 'react'; +import { Modal, View, Text, StyleSheet, TouchableOpacity, Image } from 'react-native'; +import Like from '../assets/image/Like.svg' +import DeleteIcon from '../assets/image/delete.svg' +import RightIcon from '../assets/image/RightIcon.svg' +import { SvgXml } from 'react-native-svg'; + +const CompletionModal = ({ visible, onClose, correct, wrong, total, PlayerObj }) => { + const percentage = total > 0 ? (correct / total) * 100 : 0; + const getMessage = () => { + if (percentage === 100) { + return "Congrats! Perfect score!!!"; + } else if (percentage >= 71) { + return "Well done - just a bit more !"; + } else { + return "Can do better !"; + } + }; + + return ( + + + + + {/* Congratulations! */} + {/* + Great job! You're doing fantastic.{"\n"}Keep up the excellent work! + */} + + + {getMessage()} + + + + TOTAL QUESTIONS: {total} + + + + + + + {correct} + + CORRECT + + + + + + {wrong} + + WRONG + + + + + Okay + + + + + ); +}; + +const styles = StyleSheet.create({ + modalOverlay: { + flex: 1, + justifyContent: 'center', + alignItems: 'center', + backgroundColor: 'rgba(0,0,0,0.4)', + }, + modalContent: { + backgroundColor: '#fff', + borderRadius: 16, + padding: 24, + alignItems: 'center', + width: '85%', + }, + image: { + width: 80, + height: 80, + marginBottom: 16, + }, + title: { + fontSize: 20, + fontWeight: 'bold', + marginBottom: 8, + color: '#333', + }, + subtitle: { + textAlign: 'center', + fontSize: 20, + color: '#666', + marginBottom: 16, + }, + total: { + fontSize: 14, + marginBottom: 12, + color: '#000', + }, + statsRow: { + flexDirection: 'row', + justifyContent: 'space-between', + width: '80%', + marginBottom: 20, + }, + statBox: { + alignItems: 'center', + }, + correctIcon: { + fontSize: 24, + color: 'green', + }, + wrongIcon: { + fontSize: 24, + color: 'red', + }, + statValue: { + fontSize: 20, + fontWeight: 'bold', + marginLeft: 10 + }, + statLabel: { + fontSize: 12, + color: '#555', + }, + okButton: { + backgroundColor: '#007bff', + borderRadius: 30, + paddingVertical: 10, + paddingHorizontal: 40, + }, + okText: { + color: '#fff', + fontSize: 16, + fontWeight: 'bold', + }, +}); + +export default CompletionModal; diff --git a/PerformicsSrc/src/components/CustomImagePickerModal.js b/PerformicsSrc/src/components/CustomImagePickerModal.js new file mode 100644 index 0000000..f06cafc --- /dev/null +++ b/PerformicsSrc/src/components/CustomImagePickerModal.js @@ -0,0 +1,118 @@ +import React from 'react'; +import { Modal, View, Text, TouchableOpacity, StyleSheet,Image } from 'react-native'; +import CamIcon from '../assets/image/cam_icon.svg' +import GalleryIcon from '../assets/image/gallery_icon.svg' + + +const CustomImagePickerModal = ({ visible, onClose, onCamera, onGallery }) => { + return ( + + + + Select Image Source + + { + onClose(); + onCamera(); + }} + > + {/* 📷 Take Photo */} + + + + {/* */} + Take Photo + + + + { + onClose(); + onGallery(); + }} + > + {/* 🖼️ Choose from Gallery */} + + + {/* */} + Choose from Gallery + + + + + Cancel + + + + + ); +}; + +export default CustomImagePickerModal; + +const styles = StyleSheet.create({ + overlay: { + flex: 1, + backgroundColor: 'rgba(0,0,0,0.4)', + justifyContent: 'flex-end', + }, + sheet: { + backgroundColor: '#fff', + padding: 20, + borderTopLeftRadius: 20, + borderTopRightRadius: 20, + elevation: 10, + }, + title: { + fontSize: 18, + fontWeight: 'bold', + marginBottom: 12, + textAlign: 'center', + }, + option: { + backgroundColor: '#D0ECFF', + padding: 14, + borderRadius: 10, + marginVertical: 6, + }, + cancel: { + backgroundColor: '#f9f8f8ff', + padding: 14, + borderRadius: 10, + marginTop: 10, + borderColor:'#ADBFD8', + borderWidth: 0.5, + + }, + optionText: { + color: 'black', + fontSize: 14, + textAlign: 'center', + }, + row: { + flexDirection: 'row', + alignItems: 'center', + justifyContent:'center', + + }, + icon: { + width: 22, + height: 22, + marginRight: 10, + resizeMode: 'contain', + }, +}); diff --git a/PerformicsSrc/src/components/CustomLoader.js b/PerformicsSrc/src/components/CustomLoader.js new file mode 100644 index 0000000..2d9b205 --- /dev/null +++ b/PerformicsSrc/src/components/CustomLoader.js @@ -0,0 +1,37 @@ +import React from "react"; +import { Text, TouchableOpacity ,View,Image,ImageBackground,ActivityIndicator, StatusBar, Platform} from "react-native"; +import { customeButtons,GetPageTheme,customStyles,globalStyles, HP } from "../styles/Global"; +import { useRoute } from '@react-navigation/native'; +import { AntDesign } from "./icons"; + +const CustomLoader = (props) => { + const route = useRoute(); + const PageTheme=GetPageTheme(props.DarkTheme,route.name); + const globalStyle=globalStyles(props.DarkMode,route.name); + const customStyle=customStyles(props.DarkMode,route.name); + + const htStyle=props.fullHeight?{height:HP('100%')+StatusBar.currentHeight}:{}; + + return ( + + + { + Platform.OS==='ios' && + + + + } + { + Platform.OS!=='ios' && + + + + + + } + {props.title && {props.title}} + + + ); +}; +export default CustomLoader; \ No newline at end of file diff --git a/PerformicsSrc/src/components/CustomModal.js b/PerformicsSrc/src/components/CustomModal.js new file mode 100644 index 0000000..afeac18 --- /dev/null +++ b/PerformicsSrc/src/components/CustomModal.js @@ -0,0 +1,32 @@ +import React,{useRef,useEffect} from "react"; +import { Text, TouchableOpacity ,View,Image,Animated,ActivityIndicator,StatusBar} from "react-native"; +import { customeButtons,GetPageTheme,customStyles,globalStyles,HP } from "../styles/Global"; +import { useRoute } from '@react-navigation/native'; +import { AntDesign } from "./icons"; + +const CustomModal = (props) => { + const route = useRoute(); + const PageTheme=GetPageTheme(props.DarkTheme,route.name); + const globalStyle=globalStyles(props.DarkMode,route.name); + const customStyle=customStyles(props.DarkMode,route.name); + + const htStyle={height:HP('100%')+StatusBar.currentHeight}; + + if(props.showModal==true){ + return ( + + + {(props.title!=null) && {props.title}} + {(props.message!=null) && {props.message}} + {props.children} + + + ); + } + else { + return ; + } + + +}; +export default CustomModal; \ No newline at end of file diff --git a/PerformicsSrc/src/components/CustomModal2.js b/PerformicsSrc/src/components/CustomModal2.js new file mode 100644 index 0000000..79e39fd --- /dev/null +++ b/PerformicsSrc/src/components/CustomModal2.js @@ -0,0 +1,33 @@ +import React,{useRef,useEffect} from "react"; +import { Text, TouchableOpacity ,View,Image,Animated,ActivityIndicator,StatusBar, Keyboard, KeyboardAvoidingView} from "react-native"; +import { customeButtons,GetPageTheme,customStyles,globalStyles,HP } from "../styles/Global"; +import { useRoute } from '@react-navigation/native'; +import { AntDesign } from "./icons"; + +const CustomModal2 = (props) => { + const route = useRoute(); + const PageTheme=GetPageTheme(props.DarkTheme,route.name); + const globalStyle=globalStyles(props.DarkMode,route.name); + const customStyle=customStyles(props.DarkMode,route.name); + + const htStyle={height:HP('100%')+StatusBar.currentHeight}; + + if(props.showModal==true){ + return ( + {Keyboard.dismiss()}} style={[customStyle.loaderBackdrop,htStyle,{width:'100%'}]}> + + {(props.title!=null) && {props.title}} + {(props.message!=null) && {props.message}} + {props.children} + + + + ); + } + else { + return ; + } + + +}; +export default CustomModal2; \ No newline at end of file diff --git a/PerformicsSrc/src/components/CustomPicker.js b/PerformicsSrc/src/components/CustomPicker.js new file mode 100644 index 0000000..8bfce58 --- /dev/null +++ b/PerformicsSrc/src/components/CustomPicker.js @@ -0,0 +1,180 @@ +import React, { useState, useEffect, useRef } from 'react'; +import { useRoute } from '@react-navigation/native'; +import { customStyles, deffontfamily, GetPageTheme } from '../styles/Global'; +import ModalSelector from 'react-native-modal-selector'; +import { Text, View } from 'react-native'; + +export function CustomPicker(props,Pickerdata,label_key,value_key,onchangeKeyLbl,onchangeKey,onChange=()=>{},selected_data={},selectStyle={},InputStyle={},appendIdInName='',routeParam=null,isDisable=false){ + try{ + const ST=props.StaticText || {}; + const route =routeParam!=null && routeParam.name!=null?routeParam:{name:'ABCScreen'};//useRoute(); + + // get all theme styles acc to current theme set + const PageTheme=GetPageTheme(props.DarkMode,route.name); + const customStyle=customStyles(props.DarkMode,route.name); + let otherData=selected_data?.otherData?selected_data?.otherData:{}; + var data=[]; + + let selectedFName=''; + Pickerdata?.map((item,index)=>{ + let label1=(item[label_key]+(appendIdInName && item[value_key]!=""?(` (${item[value_key]})`):'')); + let obj={ key: index, label: label1,value:item[value_key],item }; + if((appendIdInName==false && selected_data?.value==item[label_key]) || (appendIdInName && selected_data?.value==item[value_key])){ + selectedFName=label1; + obj['component']= {label1}; + } + data.push(obj); + }); + + return ( + {onChange(option,onchangeKeyLbl,onchangeKey,otherData) }} + overlayStyle={customStyle.addVisPickerOverlay} + cancelContainerStyle={customStyle.addVisPicker_OptionContainerStyle} + optionStyle={customStyle.addvis_opStyle} + optionTextStyle={customStyle.addvis_opTextStyle} + optionContainerStyle={customStyle.addVisPicker_OptionContainerStyle} + selectedKey={'1'} + cancelText={ST.Cancel} + disabled={isDisable} + cancelStyle={{fontFamily:deffontfamily}} + cancelTextStyle={{fontFamily:deffontfamily}} + > + {(selectedFName || '-'+ST.select+'-')} + + ) + } + catch(err){ + console.log("CustomPicker error:",err); + return null; + } +} + + +export function CustomPickerStock(props, Pickerdata, label_key, value_key, onchangeKeyLbl, onchangeKey, onChange = () => { }, selected_data = {}, selectStyle = {}, InputStyle = {}, appendIdInName = '', routeParam = null, isDisable = false) { + try { + const ST = props.StaticText || {}; + const route = routeParam != null && routeParam.name != null ? routeParam : { name: 'ABCScreen' };//useRoute(); + + // get all theme styles acc to current theme set + const PageTheme = GetPageTheme(props.DarkMode, route.name); + const customStyle = customStyles(props.DarkMode, route.name); + let otherData = selected_data?.otherData ? selected_data?.otherData : {}; + var data = []; + + let selectedFName = ''; + Pickerdata?.map((item, index) => { + let label1 = (item[label_key] + (appendIdInName && item[value_key] != "" ? (` (${item[value_key]})`) : '')); + let obj = { key: index, label: label1, value: item[value_key], item }; + if ((appendIdInName == false && selected_data?.value == item[label_key]) || (appendIdInName && selected_data?.value == item[value_key])) { + selectedFName = label1; + obj['component'] = {label1}; + } + data.push(obj); + }); + + return ( + { onChange(option, onchangeKeyLbl, onchangeKey, otherData) }} + overlayStyle={customStyle.addVisPickerOverlay} + cancelContainerStyle={customStyle.addVisPicker_OptionContainerStyle} + optionStyle={customStyle.addvis_opStyle} + optionTextStyle={customStyle.addvis_opTextStyle} + optionContainerStyle={customStyle.addVisPicker_OptionContainerStyle} + selectedKey={'1'} + cancelText={ST.Cancel} + disabled={isDisable} + cancelStyle={{ fontFamily: deffontfamily }} + cancelTextStyle={{ fontFamily: deffontfamily }} + > + + + {selectedFName || `-${ST.select}-`} + + + + + ) + } + catch (err) { + console.log("CustomPicker error:", err); + return null; + } +} + +export function CustomPicker2(props) { + try { + const ST = props.StaticText || {}; + const route = useRoute(); + + // get all theme styles acc to current theme set + const PageTheme = GetPageTheme(props.DarkMode, route.name); + const customStyle = customStyles(props.DarkMode, route.name); + let { Pickerdata, label_key, value_key, onchangeKeyLbl, onchangeKey, onChange, selected_data, isDisable } = props; + let otherData = selected_data?.otherData ? selected_data?.otherData : {}; + + const [data, setdata] = useState([]); + + useEffect(() => { + let arr = [] + Pickerdata?.map((item, index) => { + let obj = { key: index, label: item[label_key], value: item[value_key] }; + + if (selected_data?.value == item[label_key]) + obj['component'] = {item[label_key]}; + + arr.push(obj); + if (index == Pickerdata.length - 1) { + setdata(arr); + } + }); + }, [props.Pickerdata]); + + + return ( + { onChange(option, onchangeKeyLbl, onchangeKey, otherData) }} + overlayStyle={customStyle.addVisPickerOverlay} + cancelContainerStyle={customStyle.addVisPicker_OptionContainerStyle} + optionStyle={customStyle.addvis_opStyle} + optionTextStyle={customStyle.addvis_opTextStyle} + optionContainerStyle={customStyle.addVisPicker_OptionContainerStyle} + selectedKey={'1'} + cancelText={ST.Cancel} + disabled={isDisable} + cancelStyle={{ fontFamily: deffontfamily }} + cancelTextStyle={{ fontFamily: deffontfamily }} + > + {(selected_data?.value || '-' + ST.select + '-')} + + ) + + } + catch (err) { + console.log("CustomPicker2 error:", err); + return null; + } +} \ No newline at end of file diff --git a/PerformicsSrc/src/components/HeaderTabs.js b/PerformicsSrc/src/components/HeaderTabs.js new file mode 100644 index 0000000..d9da3a6 --- /dev/null +++ b/PerformicsSrc/src/components/HeaderTabs.js @@ -0,0 +1,284 @@ +// import React from "react"; +// import { Text, TouchableOpacity,View,ScrollView } from "react-native"; +// import { customStyles,GetPageTheme } from "../styles/Global"; +// import { useRoute } from '@react-navigation/native'; +// const HeaderTabs = (props) => { +// const route = useRoute(); +// const PageTheme=GetPageTheme(props.DarkTheme,route.name); +// const customStyle=customStyles(props.DarkMode,route.name); +// const ST=props.StaticText || {}; +// const isAdhocScreen=props.isAdhocScreen; +// const isBeatPlan=props.isBeatPlan; +// const isDBPOSMScreen=props.isDBPOSMScreen; +// const isAddStoreScreen=props.isAddStoreScreen; +// const isNonMerchan=props.isNonMerchans; +// const isNonProgs=props.isNonProgs; +// const isStoreSearch=props.isStoreSearch; +// return ( +// +// +// {props.navigation.pop();props.navigation.push('StoreList')}}> +// {ST.Planned} +// +// {props.navigation.pop();props.navigation.push('StoreList',{'isAdhoc': true,'isBeat':false,'isNonMerchans':false,'isNonProgs':false,'isStoreSearch':false})}}> +// {ST.Adhoc} +// +// {props.ShowBeatPlanList==true && +// {props.navigation.pop();props.navigation.push('StoreList',{'isAdhoc': false,'isBeat':true})}}> +// {'Beat Plan'} +// +// } +// {props.ShowStoreAdd==true && +// {props.navigation.navigate('AddStoreScreen',{})}}> +// {'Add Store'} +// +// } +// {props.ShowNonMerList==true && +// {props.navigation.pop();props.navigation.push('StoreList',{'isAdhoc': false,'isBeat':false,'isNonMerchans':true,'isNonProgs':false,'isStoreSearch':false})}}> +// {'Non Merch.'} +// +// } +// {props.ShowNonProgram==true && +// {props.navigation.pop();props.navigation.push('StoreList',{'isAdhoc': false,'isBeat':false,'isNonMerchans':false, 'isNonProgs':true,'isStoreSearch':false})}}> +// {props.NonProgramLabel} +// +// } + +// {props.ShowStoreSearch==true && +// {props.navigation.pop();props.navigation.push('StoreList',{'isAdhoc': false,'isBeat':false,'isNonMerchans':false, 'isNonProgs':false,'isStoreSearch':true})}}> +// {props.ShowStoreSearchLabel} +// +// } + +// {props.ShowDBPOSM==true && +// {props.navigation.navigate('DistributorList',{})}}> +// {'Distributors'} +// +// } + + + +// +// +// ); +// }; +// export default HeaderTabs; + + +import React from "react"; +import { Text, TouchableOpacity,View,ScrollView } from "react-native"; +import { customStyles,GetPageTheme } from "../styles/Global"; +import { useRoute } from '@react-navigation/native'; + +const HeaderTabs = (props) => { + const route = useRoute(); + const PageTheme = GetPageTheme(props.DarkTheme, route.name); + const customStyle = customStyles(props.DarkMode, route.name); + + const ST = props.StaticText || {}; + + const isAdhocScreen = props.isAdhocScreen; + const isBeatPlan = props.isBeatPlan; + const isDBPOSMScreen = props.isDBPOSMScreen; + const isAddStoreScreen = props.isAddStoreScreen; + const isNonMerchan = props.isNonMerchans; + const isNonProgs = props.isNonProgs; + const isStoreSearch = props.isStoreSearch; + + // 🔹 helper to avoid duplicate navigation + const navigateIfNotActive = (isActive, routeName, params = {}, useNavigate = false) => { + if (isActive) return; + props.navigation.pop(); + if (useNavigate) { + props.navigation.navigate(routeName, params); + } else { + props.navigation.push(routeName, params); + } + }; + return ( + + + {/* Planned */} + navigateIfNotActive( + (!isAdhocScreen && !isBeatPlan && !isDBPOSMScreen && !isAddStoreScreen && !isNonMerchan && !isNonProgs && !isStoreSearch), + 'StoreList' + )} + > + + {ST.Planned} + + + + {/* Adhoc */} + + navigateIfNotActive(isAdhocScreen, 'StoreList', { + isAdhoc: true, + isBeat: false, + isNonMerchans: false, + isNonProgs: false, + isStoreSearch: false + }) + } + > + + {ST.Adhoc} + + + + {/* Beat Plan */} + {props.ShowBeatPlanList && ( + + navigateIfNotActive(isBeatPlan, 'StoreList', { + isAdhoc: false, + isBeat: true + }) + } + > + + Beat Plan + + + )} + + {/* Add Store */} + {props.ShowStoreAdd && ( + + navigateIfNotActive(isAddStoreScreen, 'AddStoreScreen', {}, true) + } + > + + Add Store + + + )} + + {/* Non Merch */} + {props.ShowNonMerList && ( + + navigateIfNotActive(isNonMerchan, 'StoreList', { + isAdhoc: false, + isBeat: false, + isNonMerchans: true, + isNonProgs: false, + isStoreSearch: false + }) + } + > + + Non Merch. + + + )} + + {/* Non Program */} + {props.ShowNonProgram && ( + + navigateIfNotActive(isNonProgs, 'StoreList', { + isAdhoc: false, + isBeat: false, + isNonMerchans: false, + isNonProgs: true, + isStoreSearch: false + }) + } + > + + {props.NonProgramLabel} + + + )} + + {/* Store Search */} + {props.ShowStoreSearch && ( + + navigateIfNotActive(isStoreSearch, 'StoreList', { + isAdhoc: false, + isBeat: false, + isNonMerchans: false, + isNonProgs: false, + isStoreSearch: true + }) + } + > + + {props.ShowStoreSearchLabel} + + + )} + + {/* Distributors */} + {props.ShowDBPOSM && ( + + navigateIfNotActive(isDBPOSMScreen, 'DistributorList', {}, true) + } + > + + Distributors + + + )} + + + + ); +}; +export default HeaderTabs; \ No newline at end of file diff --git a/PerformicsSrc/src/components/IRLogin.js b/PerformicsSrc/src/components/IRLogin.js new file mode 100644 index 0000000..0f196ce --- /dev/null +++ b/PerformicsSrc/src/components/IRLogin.js @@ -0,0 +1,3 @@ +import { NativeModules } from 'react-native'; +const { IRLogin } = NativeModules; +export default IRLogin; \ No newline at end of file diff --git a/PerformicsSrc/src/components/ImageMarkText.js b/PerformicsSrc/src/components/ImageMarkText.js new file mode 100644 index 0000000..13af71f --- /dev/null +++ b/PerformicsSrc/src/components/ImageMarkText.js @@ -0,0 +1,3 @@ +import { NativeModules } from 'react-native'; +const { ImageMarkText } = NativeModules; +export default ImageMarkText; \ No newline at end of file diff --git a/PerformicsSrc/src/components/MoreInfoCheckbox.js b/PerformicsSrc/src/components/MoreInfoCheckbox.js new file mode 100644 index 0000000..294eeb3 --- /dev/null +++ b/PerformicsSrc/src/components/MoreInfoCheckbox.js @@ -0,0 +1,59 @@ +import React from "react"; +import { Pressable, Text, View, StyleSheet } from "react-native"; + +export default function MoreInfoCheckbox({ checked, onToggle, label = "More Info" }) { + return ( + [ + styles.container, + pressed && { opacity: 0.8 } + ]} + hitSlop={10} + > + + {checked ? : null} + + {label} + + ); +} + +const styles = StyleSheet.create({ + container: { + flexDirection: "row", + alignItems: "center", + backgroundColor: "#fff", + paddingVertical: 5, + paddingHorizontal: 20, + borderRadius: 12, + shadowColor: "#000", + shadowOpacity: 0.1, + shadowOffset: { width: 0, height: 2 }, + shadowRadius: 4, + }, + checkbox: { + width: 22, + height: 22, + borderRadius: 6, + borderWidth: 2, + borderColor: "#4A90E2", + alignItems: "center", + justifyContent: "center", + backgroundColor: "#fff", + }, + checkedBox: { + backgroundColor: "#4A90E2", + }, + checkmark: { + color: "#fff", + fontSize: 16, + fontWeight: "600", + }, + label: { + marginLeft: 15, + fontSize: 15, + fontWeight: "500", + color: "#333", + }, +}); diff --git a/PerformicsSrc/src/components/NetworkStatusBar.js b/PerformicsSrc/src/components/NetworkStatusBar.js new file mode 100644 index 0000000..8378668 --- /dev/null +++ b/PerformicsSrc/src/components/NetworkStatusBar.js @@ -0,0 +1,68 @@ +import React, { useRef,useEffect } from "react"; +import { Text ,View,Animated, Platform} from "react-native"; +import { customeButtons,GetPageTheme,customStyles,globalStyles, HP } from "../styles/Global"; +import { useRoute } from '@react-navigation/native'; +import { AntDesign } from "./icons"; + +const NetworkStatusBar = (props) => { + const route = useRoute(); + const PageTheme=GetPageTheme(props.DarkTheme,route.name); + const globalStyle=globalStyles(props.DarkMode,route.name); + const customStyle=customStyles(props.DarkMode,route.name); + + const NSBarAnim=useRef(new Animated.Value(0)).current; + + + useEffect(() => { + + }, []); + + useEffect(() => { + showAnim() + }, [props.isInternetAvailable]); + + function showAnim(){ + console.log('show con change:',props.showConnChange,props.isInternetAvailable) + if(props.showConnChange==true){ + animateView() + } + } + + function animateView(){ + // show + Animated.timing(NSBarAnim, { + toValue: 1, + duration: 500, + useNativeDriver:(Platform.OS=='ios'?false:true), + }).start(); + + if(props.isInternetAvailable==true){ + // hide NS bar + setTimeout(()=>{ + console.log('hidebar') + Animated.timing(NSBarAnim, { + toValue: 0, + duration: 500, + useNativeDriver:(Platform.OS=='ios'?false:true), + }).start(); + },2500) + props.show_ConnChange({showConnChange:false}) + } + + + } + + const tY=NSBarAnim.interpolate({ + inputRange:[0,1], + outputRange:[50,0], + }); + + return ( + + {(props.isInternetAvailable==true?'Back Online':'No Connection! You are offline')} + + ) +}; +export default NetworkStatusBar; \ No newline at end of file diff --git a/PerformicsSrc/src/components/NoDataComponent.js b/PerformicsSrc/src/components/NoDataComponent.js new file mode 100644 index 0000000..aa2d0ed --- /dev/null +++ b/PerformicsSrc/src/components/NoDataComponent.js @@ -0,0 +1,23 @@ +import React,{useState,useEffect,useRef} from "react"; +import { Text, TouchableOpacity ,View,Image,StatusBar} from "react-native"; +import { GetPageTheme,customStyles,globalStyles } from "../styles/Global"; +import { useRoute } from '@react-navigation/native'; +import { FontAwesome } from "./icons"; + +function NoDataComponent(props) { + const route = useRoute(); + const PageTheme=GetPageTheme(props.DarkTheme,route.name); + const globalStyle=globalStyles(props.DarkMode,route.name); + const customStyle=customStyles(props.DarkMode,route.name); + + const ST=props.StaticText || {}; + return ( + + + + {ST.NoDataFoundPleaseDownloadDataFirst} + + + ); +} +export default NoDataComponent; \ No newline at end of file diff --git a/PerformicsSrc/src/components/QRCodeScannerKit.js b/PerformicsSrc/src/components/QRCodeScannerKit.js new file mode 100644 index 0000000..8f626de --- /dev/null +++ b/PerformicsSrc/src/components/QRCodeScannerKit.js @@ -0,0 +1,97 @@ +// components/QRCodeScannerKit.js +import React, { useEffect } from 'react'; +import { + View, + TouchableOpacity, + Text, + StyleSheet, + BackHandler, + Modal, +} from 'react-native'; +import { Camera } from 'react-native-camera-kit'; +import { Ionicons } from './icons'; // tumhara icon wrapper + +function QRCodeScannerKit({ visible, onClose, onQRScanned }) { + // 🔙 Android hardware back button handle + useEffect(() => { + if (!visible) return; + + const backHandler = BackHandler.addEventListener( + 'hardwareBackPress', + () => { + onClose && onClose(); + return true; + } + ); + + return () => backHandler.remove(); + }, [visible, onClose]); + + if (!visible) return null; + + const handleReadCode = (event) => { + const value = event?.nativeEvent?.codeStringValue ?? ''; + console.log('QR Value:', value); + if (!value) return; + + onQRScanned && onQRScanned(value); + }; + + return ( + + + + + {/* Top overlay bar with close button */} + + + + + Scan QR Code + + + + ); +} + +const styles = StyleSheet.create({ + container: { + flex: 1, + backgroundColor: '#000', + }, + camera: { + flex: 1, + }, + topBar: { + position: 'absolute', + top: 40, + left: 0, + right: 0, + flexDirection: 'row', + alignItems: 'center', + paddingHorizontal: 16, + }, + closeBtn: { + padding: 8, + marginRight: 12, + }, + title: { + color: '#fff', + fontSize: 18, + fontWeight: '600', + }, +}); + +export default QRCodeScannerKit; diff --git a/PerformicsSrc/src/components/QRScanner.js b/PerformicsSrc/src/components/QRScanner.js new file mode 100644 index 0000000..37be251 --- /dev/null +++ b/PerformicsSrc/src/components/QRScanner.js @@ -0,0 +1,107 @@ +'use strict'; + +import React, { Component, useEffect, useState } from 'react'; + +// import QRCodeScanner from 'react-native-qrcode-scanner'; +import Container from '../components/container'; +import { useRoute } from '@react-navigation/native'; +import { globalStyles,customStyles,GetPageTheme } from "../styles/Global"; +import {StatusBar,Image,TextInput,View,Text,ScrollView,TouchableOpacity,Platform,PermissionsAndroid,FlatList, Alert, Animated, DeviceEventEmitter,StyleSheet} from 'react-native'; +import { ReactReduxContext,connect,useSelector, useDispatch } from 'react-redux'; +import { mapStateToProps,mapDispatchToProps } from '../reducers/contextProvider'; +import {notify} from '../components/notify'; +import moment from 'moment'; + +function QRScanner (props){ + + const route = useRoute(); + + // get all theme styles acc to current theme set + const PageTheme=GetPageTheme(props.DarkMode,route.name); + const customStyle=customStyles(props.DarkMode,route.name); + + const [processing, setProcessing] = useState(false); + const [loaderTitle, setLoaderTitle] = useState('loading...'); + const [params, setParams] = useState({'cameraType':'back'}); + const [showCamera, setShowCamera] = useState(true); + const [hasUnsavedChanges,setHasUnsavedChanges] = useState(false); + + const d1=new Date(); + const d2=moment(d1).format('MM/DD/YYYY'); + + + useEffect(() => { + // let params1=props.route.params? props.route.params:{}; + // setParams(params1); + }, []); + + + + useEffect(() => { + console.log('QR Page:', props.showCamera); + + },[props.showCamera]); + + async function hideCamera() { + if (props.onHideCamera != null && typeof props.onHideCamera == 'function') { + props.onHideCamera(); + } + props.navigation.goBack(); + } + + async function onImageCaptured(imgData){ + console.log('on data rec:',imgData.data); + console.log('onImageCaptured in camera screen'); + // imgData['storeData']=params.storeData + // emit onImageCaptured in the screen from where this screen is opened + DeviceEventEmitter.emit("OnQRSuccess",imgData.data); + props.navigation.goBack(); + } + + + + return ( + + + {/* + scan the QR code. + + } + bottomContent={ + + OK. Got it! + + } + /> */} + + ); + +} + +const styles = StyleSheet.create({ + centerText: { + flex: 1, + fontSize: 18, + padding: 32, + color: '#777' + }, + textBold: { + fontWeight: '500', + color: '#000' + }, + buttonText: { + fontSize: 21, + color: 'rgb(0,122,255)' + }, + buttonTouchable: { + padding: 16 + } +}); + + +export default connect(mapStateToProps, mapDispatchToProps)(QRScanner); diff --git a/PerformicsSrc/src/components/SamplingHeaderTab.js b/PerformicsSrc/src/components/SamplingHeaderTab.js new file mode 100644 index 0000000..3fa477e --- /dev/null +++ b/PerformicsSrc/src/components/SamplingHeaderTab.js @@ -0,0 +1,129 @@ +import React, { useEffect } from "react"; +import { Text, TouchableOpacity,View,ScrollView } from "react-native"; +import { customStyles,GetPageTheme } from "../styles/Global"; +import { useRoute } from '@react-navigation/native'; +import { AntDesign } from "./icons"; +import { notify } from "./notify"; + +const SamplingHeaderTab = (props) => { + const route = useRoute(); + const PageTheme=GetPageTheme(props.DarkTheme,route.name); + const customStyle=customStyles(props.DarkMode,route.name); + + + const currentMenu=props.currentMenu; + const SamplingData=props.SamplingData || {}; + const SamplingTabObj=props.SamplingTabObj || {}; + const AllTabDisabled=props.AllTabDisabled!=null?props.AllTabDisabled:false; + + let storeData=props.storeData; + let hasUnsavedChanges=props.hasUnsavedChanges + let setShowAlert=props.setShowAlert + let setSaveModalDObj=props.setSaveModalDObj + let isSaleDependEnable=Boolean(SamplingTabObj.isSaleDependEnable) + + // const isCustomerConversionRequired=( SamplingData && SamplingData.CustomerConversionRequired!=""?SamplingData.CustomerConversionRequired : false); + // const isCustomerTrackingRequired=SamplingData && SamplingData.CustomerTrackingRequired!=""?SamplingData.CustomerTrackingRequired : false; + // const isSaleRequired=SamplingData && SamplingData.SaleRequired!=""?SamplingData.SaleRequired : false; + // const isStockRequired=SamplingData && SamplingData.StockRequird!=""?SamplingData.StockRequird : false; + // const isInventoryRequired=SamplingData && SamplingData.InventoryRequired!=""?SamplingData.InventoryRequired : false; + + const isInventoryRequired=SamplingData.InventoryRequired==true || SamplingData.InventoryRequired=="true"?1:0; + const isCustomerTrackingRequired=SamplingData.CustomerTrackingRequired==true || SamplingData.CustomerTrackingRequired=="true"?1:0; + const isCustomerConversionRequired=SamplingData.CustomerConversionRequired==true || SamplingData.CustomerConversionRequired=="true"?1:0; + const isSaleRequired=SamplingData.SaleRequired==true || SamplingData.SaleRequired=="true"?1:0; + const isStockRequired=SamplingData.StockRequird==true || SamplingData.StockRequird=="true"?1:0; + + + // let inventoryDis= AllTabDisabled || SamplingTabObj ?false:(SamplingTabObj && SamplingTabObj.inventoryIsAvlbl==true ); + // let converDis=(SamplingTabObj && SamplingTabObj.allTabDisable) ?false:true; + // let trackDis=(SamplingTabObj && SamplingTabObj.allTabDisable) ?false:(SamplingTabObj && SamplingTabObj.trackIsAvlbl==true ); + // let SaleDis=(SamplingTabObj && SamplingTabObj.allTabDisable) ?false:(SamplingTabObj && SamplingTabObj.SaleIsAvlbl==true ); + // let stockDis=(SamplingTabObj && SamplingTabObj.allTabDisable) ?false:(SamplingTabObj && SamplingTabObj.StockIsAvlbl==true ); + + + let inventoryDis= AllTabDisabled || SamplingTabObj.inventoryIsAvlbl==false?true:false; + let converDis=AllTabDisabled; + let trackDis= AllTabDisabled || SamplingTabObj.trackIsAvlbl==false?true:false; + let SaleDis= AllTabDisabled || SamplingTabObj.SaleIsAvlbl==false?true:( isSaleDependEnable && SamplingTabObj.StockAvil==false && isStockRequired==true? true:false); + // let SaleDis= AllTabDisabled || SamplingTabObj.SaleIsAvlbl==false?true:false; + let stockDis=AllTabDisabled || SamplingTabObj.StockIsAvlbl==false?true:false; + + const commonPageParams={'SamplingData':SamplingData,'storeData':storeData,'menu':currentMenu}; + const SalePageParams={'SamplingData':SamplingData,'storeData':storeData,'menu':currentMenu,"SamplingSaleFlag":true}; + const ContactConvPageParams={'SamplingData':SamplingData,'storeData':storeData,'menu':currentMenu,"SamplingFlag":true,'showTotalSampled':true}; + + function goToPage(screenName,params){ + if(hasUnsavedChanges){ + setSaveModalDObj({screenName,params}); + setShowAlert(true); + } + else{ + let movetoScreen=true; + if(screenName=="SamplingStock"){ + if(SamplingTabObj.SaleIsDone==true){ + movetoScreen=false; + notify("Sampling Sale has been filled! You cannot change stock now") + } + } + + if(movetoScreen){ + props.navigation.navigate(screenName,params); + } + } + } + + return ( + + { + (isInventoryRequired==true) && + {goToPage('SamplingInventory',commonPageParams); }}> + {"INVENTORY"} + { ( SamplingTabObj.inventoryIsDone==true) && + + } + + } + { + (isCustomerTrackingRequired==true) && + {goToPage('SamplingCustTrack',commonPageParams); }}> + {"CUST-TRACK"} + { ( SamplingTabObj.trackIsDone==true) && + + } + + } + { + (isStockRequired==true) && + {goToPage('SamplingStock',commonPageParams); }}> + {"STOCK"} + { ( SamplingTabObj.StockIsDone==true) && + + } + + } + { + (isSaleRequired==true) && + {goToPage('SamplingStock',SalePageParams); }}> + {"SALE"} + { ( SamplingTabObj.SaleIsDone==true) && + + } + + } + + { + (isCustomerConversionRequired==true) && + {goToPage('ContactConversion',ContactConvPageParams); }}> + {"CONVERSION"} + { ( SamplingTabObj.ContactIsDone==true) && + + } + + } + + {/* */} + + ); +}; +export default SamplingHeaderTab; \ No newline at end of file diff --git a/PerformicsSrc/src/components/SearchableSelector.js b/PerformicsSrc/src/components/SearchableSelector.js new file mode 100644 index 0000000..2136cf9 --- /dev/null +++ b/PerformicsSrc/src/components/SearchableSelector.js @@ -0,0 +1,99 @@ +import React, { useState } from 'react'; +import { View, TextInput, FlatList, Text, TouchableOpacity, Modal, StyleSheet } from 'react-native'; + +const SearchableSelector = ({ data, placeholder,customStyle,selectedVal,setSelectedVal }) => { + const [modalVisible, setModalVisible] = useState(false); + const [searchQuery, setSearchQuery] = useState(''); + const [selectedItem, setSelectedItem] = useState(null); + + const filteredData = data.filter(item => + item?.StockistName?.toLowerCase().includes(searchQuery?.toLowerCase()) + ); + + const handleSelect = (item) => { + setSelectedItem(item); + setSelectedVal(item) + setModalVisible(false); + }; + + return ( + + setModalVisible(true)} style={[customStyle.openStk_prd_inputStyle,customStyle.openStk_prd_flex_inputStyle,customStyle.openStk_prd_inplBlue]} > + {selectedItem?.StockistName || selectedVal?.StockistName || placeholder} + + + + + + item} + renderItem={({ item }) => ( + handleSelect(item)} style={styles.item}> + {item?.StockistName} + + )} + /> + setModalVisible(false)} style={styles.closeButton}> + Close + + + + + ); +}; + +const styles = StyleSheet.create({ + container: { + // margin: 20, + width:"100%" + }, + selector: { + padding: 10, + borderWidth: 1, + borderColor: '#ccc', + borderRadius: 5, + }, + selectedText: { + color: '#333', + }, + modalContainer: { + flex: 1, + justifyContent: 'center', + backgroundColor: 'white', + padding: 20, + }, + searchInput: { + borderWidth: 1, + borderColor: '#ccc', + borderRadius: 5, + padding: 10, + marginBottom: 10, + }, + item: { + padding: 10, + borderBottomWidth: 1, + borderBottomColor: '#ccc', + }, + closeButton: { + marginTop: 20, + padding: 10, + backgroundColor: '#007BFF', + borderRadius: 5, + alignItems: 'center', + }, + closeButtonText: { + color: 'white', + }, +}); + +export default SearchableSelector; diff --git a/PerformicsSrc/src/components/SurveyPopup.js b/PerformicsSrc/src/components/SurveyPopup.js new file mode 100644 index 0000000..7466401 --- /dev/null +++ b/PerformicsSrc/src/components/SurveyPopup.js @@ -0,0 +1,127 @@ + +import { WebView } from "react-native-webview"; +import { useIsFocused } from "@react-navigation/native"; +import Modal from "react-native-modal"; + + +const [surveydata, setSurveyData] = useState({}); +const [modalVisiblesurvey, setModalVisibleSurvey] = useState(false); +const [surveyloader, setSurveyLoader] = useState(false); +const [isWebViewReady, setWebViewReady] = useState(false); +const webViewRef = useRef(null); +const isFocused = useIsFocused(); + +const ShowSurveyPopup = async () => { + try { + setSurveyLoader(true); + const raw = JSON.stringify({ + ProjectId: "0", + UserId: user?.emp_code, + // UserId: "80307", + + }); + let res = await fetch( + "https://api1.parinaam.in/api/cpminternal/GetPopupWeburl", + { + method: "POST", + body: raw, + headers: { + Accept: "application/json", + "Content-Type": "application/json", + }, + } + ); + let responseJson = await res.json(); + if (responseJson) { + setSurveyData(responseJson?.GetPopupWeburl || {}); + // console.log("responseJson?.GetPopupWeburl[0]?.Status",responseJson?.GetPopupWeburl[0]) + if (responseJson?.GetPopupWeburl[0]?.Status) { + setModalVisibleSurvey(false); + } else { + setModalVisibleSurvey(true); + } + + } else { + setSurveyData({}); + } + } catch (error) { + alert("Survey Popup:" + error); + } finally { + setSurveyLoader(false); + } +}; + +useEffect(() => { + ShowSurveyPopup(); +}, [isFocused]); + +let webUrl = surveydata[0]?.WebUrl; + + +const injectedJS = ` +(function() { + const element = document.getElementById('cpminternalclose'); + console.log(element, "element") + if (element) { + window.ReactNativeWebView.postMessage(JSON.stringify({ id: element.id })); + } else { + // window.ReactNativeWebView.postMessage(JSON.stringify({ message: "Element not found" })); + } +})(); +true; +`; + +const handleMessage = (event) => { + try { + const data = JSON.parse(event.nativeEvent.data); + if (data.error) { + alert(data.error); + } else { + console.log('Element data:', data); + if (data?.id == 'cpminternalclose') { + setTimeout(() => { + setModalVisibleSurvey(false); + ShowSurveyPopup(); + }, 2000); + } else { + alert("Id not found"); + } + + } + } catch (error) { + alert('Error parsing message:', error); + } +}; + + + +{ + setModalVisibleSurvey(false)} + > + + + + setSurveyLoader(true)} + onLoadEnd={() => { + setSurveyLoader(false); + // setWebViewReady(true); + console.log("ENd Loadingggg...---"); + }} + ref={webViewRef} + injectedJavaScript={injectedJS} + onMessage={handleMessage} + /> + + + +} \ No newline at end of file diff --git a/PerformicsSrc/src/components/TrainingPromptModal.js b/PerformicsSrc/src/components/TrainingPromptModal.js new file mode 100644 index 0000000..687d1ec --- /dev/null +++ b/PerformicsSrc/src/components/TrainingPromptModal.js @@ -0,0 +1,133 @@ +import React, { useState } from 'react'; +import { + Modal, + View, + Text, + TouchableOpacity, + StyleSheet, + Image, + ActivityIndicator, +} from 'react-native'; + +const TrainingPromptModal = ({ visible, onDoIt, onNotNow, dueDate, item }) => { + const [loading, setLoading] = useState(false); + + return ( + + + + + {loading && ( + + )} + + setLoading(true)} + onLoadEnd={() => setLoading(false)} + onError={() => setLoading(false)} // in case image fails + /> + + + {item?.Subject} + {item?.Message} + + onDoIt(item)} + > + Let's do it + + + {item?.PopupId != 1 && ( + onNotNow(item)} + > + Not now + + )} + + + + ); +}; + +const styles = StyleSheet.create({ + overlay: { + flex: 1, + backgroundColor: 'rgba(0,0,0,0.2)', + justifyContent: 'center', + alignItems: 'center', + }, + container: { + width: 320, + backgroundColor: '#fff', + borderRadius: 20, + alignItems: 'center', + padding: 24, + elevation: 8, + }, + bear: { + width: 140, + height: 140, + marginBottom: 10, + resizeMode: 'contain', + }, + imageWrapper: { + justifyContent: 'center', + alignItems: 'center', + }, + loader: { + position: 'absolute', // overlay on top of image + }, + title: { + fontSize: 18, + fontWeight: 'bold', + marginBottom: 8, + color: '#222', + }, + desc: { + fontSize: 14, + color: '#444', + textAlign: 'center', + marginBottom: 24, + }, + date: { + fontWeight: 'bold', + color: '#1793d1', + }, + doItBtn: { + backgroundColor: '#1793d1', + borderRadius: 24, + width: '100%', + alignItems: 'center', + paddingVertical: 12, + marginBottom: 10, + }, + doItText: { + color: '#fff', + fontSize: 16, + fontWeight: 'bold', + }, + notNowBtn: { + borderColor: '#1793d1', + borderWidth: 1, + borderRadius: 24, + width: '100%', + alignItems: 'center', + paddingVertical: 12, + }, + notNowText: { + color: '#1793d1', + fontSize: 16, + fontWeight: 'bold', + }, +}); + +export default TrainingPromptModal; diff --git a/PerformicsSrc/src/components/YesNoToggle.js b/PerformicsSrc/src/components/YesNoToggle.js new file mode 100644 index 0000000..71436ae --- /dev/null +++ b/PerformicsSrc/src/components/YesNoToggle.js @@ -0,0 +1,68 @@ +import React, { useRef, useEffect } from "react"; +import { View, Text, TouchableOpacity, Animated } from "react-native"; +import { customStyles } from "../styles/Global"; + +export default function YesNoToggle({ + label, + value, // 1 or 0 + onChange, + styles, + yesLabel = "Yes", + noLabel = "No", +}) { + + // const customStyle=customStyles(props.DarkMode,route.name); + const animatedChoice = useRef(new Animated.Value(value ? 1 : 0)).current; + + // Animate when value changes + useEffect(() => { + Animated.timing(animatedChoice, { + toValue: value ? 1 : 0, + duration: 200, + useNativeDriver: true, + }).start(); + }, [value]); + + const xpos = animatedChoice.interpolate({ + inputRange: [0, 1], + outputRange: [0, -75], // match your original movement + }); + + return ( + + {label ? ( + {label} + ) : null} + + + + + + onChange(1)} + > + + {yesLabel} + + + + onChange(0)} + > + + {noLabel} + + + + + + ); +} diff --git a/PerformicsSrc/src/components/alert.js b/PerformicsSrc/src/components/alert.js new file mode 100644 index 0000000..aba6f75 --- /dev/null +++ b/PerformicsSrc/src/components/alert.js @@ -0,0 +1,63 @@ +import React from 'react'; +import {Platform,ToastAndroid,Alert,View,TouchableOpacity,Text} from 'react-native'; +import CustomModal from './CustomModal'; +import { useRoute } from '@react-navigation/native'; +import { customStyles, GetPageTheme } from '../styles/Global'; + +export const CustomAlert = (title='',msg='',onCancel=function (){},onDone=function (){}) => { + Alert.alert( + title, + msg, + [ + { + text: "Cancel", + onPress: () => console.log('tw'), + style: "cancel" + }, + { text: "OK", onPress: () => console.log('jhdh') } + ] + ); +} + +export function ConfirmSaveAlert(props,showAlert=false,onCancelCallBack=()=>{},onYesCallBack=()=>{},msg='Do you really want to save data?'){ + const route = useRoute(); + const PageTheme=GetPageTheme(props.DarkMode,route.name); + const customStyle=customStyles(props.DarkMode,route.name); + const ST= props.StaticText || {}; + + + return ( + + + {onCancelCallBack()}}> + {ST.Cancel} + + {onYesCallBack()}}> + {ST.Yes} + + + + ) +} + + +export function ExitScreenAlert(props,callback){ + Alert.alert( + "", + "Do you really want to exit the screen?", + [ + { + text: "Cancel", + onPress: () => {}, + style: "cancel" + }, + { text: "OK", onPress: () => {props.navigation.goBack();} } + ] + ); +} + diff --git a/PerformicsSrc/src/components/container.js b/PerformicsSrc/src/components/container.js new file mode 100644 index 0000000..c74cc0d --- /dev/null +++ b/PerformicsSrc/src/components/container.js @@ -0,0 +1,64 @@ +import * as React from "react"; +import { View, Alert } from "react-native"; +import { SafeAreaView } from "react-native-safe-area-context"; +import { globalStyles, customStyles } from "../styles/Global"; +import { useRoute } from '@react-navigation/native'; +import NetworkStatusBar from "./NetworkStatusBar"; +import RNExitApp from 'react-native-exit-app'; +import moment from "moment"; +import { db } from "../constants/constants"; +import {isDeviceTimeValid } from '../controller/functions'; + + +function onRemoveScreen(e) { + Alert.alert( + "", + "Your Device Date and Time is not correct. Please correct and restart App.", + [ + { + text: "OK", onPress: async () => { + RNExitApp.exitApp(); + } + } + ] + ); +} + +const Container = (props) => { + const route = useRoute(); + const globalStyle = globalStyles(props.DarkMode, route.name); + const paddingS = props.pt != null ? { paddingTop: props.pt } : {}; + + let d1 = new Date(); + let d2 = moment(d1).format('MM/DD/YYYY'); + + React.useEffect(() => { + ///this function for date and time match + isDeviceTimeValid(); + // comment becuase server date table not coming from backent + // CheckVisitDate() + }, []) + + const CheckVisitDate = async () => { + db.transaction(function (txn) { + txn.executeSql(`select * from ServerTime`, [], function (txn1, txnres) { + let data = txnres.rows.item(0); + console.log('check to show DT alert', route.name, d2 != data.ServerDate); + if (d2 != data.ServerDate && route.name != "MpinLogin" && route.name != "PrevStoreReason" && route.name != "initialScreen" && route.name != "Project" && route.name != "Login" && route.name != "Mpin" && route.name != "One_QAD" && route.name != "Notice Board" && route.name != "NoticeBoard") { + console.log('show DT alert', route.name); + onRemoveScreen() + } + }, function (txnE, txnerr) { + console.log(txnerr); + }); + }); + } + return ( + + {props.children} + + + ); +}; + +export default Container; \ No newline at end of file diff --git a/PerformicsSrc/src/components/customButton.js b/PerformicsSrc/src/components/customButton.js new file mode 100644 index 0000000..cd502de --- /dev/null +++ b/PerformicsSrc/src/components/customButton.js @@ -0,0 +1,20 @@ +import React from "react"; +import { Text, TouchableOpacity } from "react-native"; +import { customeButtons,GetPageTheme } from "../styles/Global"; +import { useRoute } from '@react-navigation/native'; + +const CustomButton = (props) => { + const route = useRoute(); + // const PageTheme=GetPageTheme(props.DarkTheme,route.name); + const customeButton=customeButtons(props.DarkMode,route.name); + + return ( + + {props.title} + + ); +}; +export default CustomButton; \ No newline at end of file diff --git a/PerformicsSrc/src/components/customHeader.js b/PerformicsSrc/src/components/customHeader.js new file mode 100644 index 0000000..2dd8737 --- /dev/null +++ b/PerformicsSrc/src/components/customHeader.js @@ -0,0 +1,137 @@ +import React, { useState, useEffect, useRef } from "react"; +import { Text, View, Image, StatusBar, StyleSheet, TouchableOpacity } from "react-native"; +// import { TouchableOpacity } from "react-native-gesture-handler"; +import { customeButtons, GetPageTheme, customStyles, globalStyles } from "../styles/Global"; +import { useRoute } from '@react-navigation/native'; +import { AntDesign, Entypo, Fontisto, MaterialCommunityIcons, FontAwesome } from "./icons"; +import moment from 'moment'; +import LinearGradient from 'react-native-linear-gradient'; + +function CustomHeader(props) { + const route = useRoute(); + const isCancelled = useRef(false); + const PageTheme = GetPageTheme(props.DarkTheme, route.name); + const globalStyle = globalStyles(props.DarkMode, route.name); + const customStyle = customStyles(props.DarkMode, route.name); + const [currentTime, setCurrentTime] = useState(''); + const [currentDate, setCurrentDate] = useState(''); + + + const goBack = () => { + props.navigation.goBack(); + } + + useEffect(() => { + + setTimer(); + + return () => { + isCancelled.current = true; + }; + }, []); + + function setTimer() { + if (!isCancelled.current) { + let d1 = new Date(); + let now = moment(d1).format('hh:mm:ss a'); + let ndate = moment(d1).format('DD/MM/YYYY'); + setCurrentTime(now); + setCurrentDate(ndate); + setTimeout(() => { setTimer(); }, 1000); + } + + } + + return ( + + + + {props.title} + + { props.onPress != null ? props.onPress() : goBack() }}> + + + + {props.hideBellIcon != true && + + {props.projectCode != null && {(props.projectCode != null ? (props.projectCode.length > 15 ? props.projectCode.substring(0, 15) + '...' : props.projectCode) : '')}} + { + props?.screen === "AddStoreInfo" ? ( + props.navigation.navigate('StoreInfoList')}> + + + ) : props?.screen !== "NotificationList" && props?.screen !== "NotificationListDetail" ? ( + + props.navigation.navigate('NotificationList')} > + + + + + {props?.badgeCount ? props?.badgeCount : 0 } + + + + + + ) : null + } + + } + + { + props.hideTimer != true && + + + {currentDate} + {currentTime} + + {/* AddNewStoreInJCP */} + {props.showaddstore != true && props.AddNewStoreInJCP==true && + props.navigation.navigate('AddStore')} > + {"Add Store"} + } + {props.screen == 'AddStore' && props.ShowAddNewStore==true && + props.navigation.navigate('AddedStoreList')} > + {"Added Stores"} + } + + } + + + + + ); +} +export default CustomHeader; + +const styles = StyleSheet.create({ + button: { + paddingRight: 20 + }, + itemCountContainer: { + position: "absolute", + height: 19, + width: 20, + borderRadius: 15, + backgroundColor: "#FF7D7D", + left: 20, + bottom: 6, + alignItems: "center", + justifyContent: "center", + zIndex: 5000, + }, + itemCountText: { + color: "white", + fontWeight: "bold", + textAlign: "center", + }, + linearGradient: { + position: 'relative', // Ensure the linear gradient container has a position style set + } +}) diff --git a/PerformicsSrc/src/components/customInput.js b/PerformicsSrc/src/components/customInput.js new file mode 100644 index 0000000..6e7b3ec --- /dev/null +++ b/PerformicsSrc/src/components/customInput.js @@ -0,0 +1,13 @@ +import * as React from "react"; +import { TextInput } from "react-native"; +import { globalStyle } from "../styles/Global"; +import { PrimaryTheme } from "../styles/Themes"; + +const CustomInput = (props) => { + return ( + + + ); +}; + +export default CustomInput; \ No newline at end of file diff --git a/PerformicsSrc/src/components/downloadApkModal.js b/PerformicsSrc/src/components/downloadApkModal.js new file mode 100644 index 0000000..1279526 --- /dev/null +++ b/PerformicsSrc/src/components/downloadApkModal.js @@ -0,0 +1,57 @@ +import React,{useRef,useEffect} from "react"; +import { Text, TouchableOpacity ,View,Image,Animated,ActivityIndicator,StatusBar} from "react-native"; +import { customeButtons,GetPageTheme,customStyles,globalStyles,HP } from "../styles/Global"; +import { useRoute } from '@react-navigation/native'; +import { AntDesign } from "./icons"; + +// import LoadingSVG from '../assets/image/loader.svg' +// import { SvgXml } from "react-native-svg"; +// import { heightPercentageToDP } from "react-native-responsive-screen"; + +const DownloadAPKModal = (props) => { + const route = useRoute(); + const PageTheme=GetPageTheme(props.DarkTheme,route.name); + const globalStyle=globalStyles(props.DarkMode,route.name); + const customStyle=customStyles(props.DarkMode,route.name); + + const downloadAnimated = useRef(new Animated.Value(0)).current; + + const htStyle={height:HP('100%')+StatusBar.currentHeight}; + let dc=props.downloadCount; + let tc=props.totalCount; + let p=tc==0?0:((dc/tc)*100); + + const bar_width=(p=='Infinity')?'0%':(p>100?'100%':p+'%'); + + // downloadAnimated.setValue(0); + // Animated.timing(downloadAnimated, { + // toValue: 1, + // duration:100, + // useNativeDriver:false, + // }).start(); + // let prev_dc=dc<1?dc-1:dc; + // const bar_width=downloadAnimated.interpolate({ + // inputRange:[prev_dc,dc], + // outputRange:[((prev_dc/tc)*100)+'%',((dc/tc)*100)+'%'], + // }); + + return ( + + + {(props.title!=null) && {props.title}} + {(props.downloadCount!=null && props.totalCount!=null) && props.hideCounter!=true && {(dc+1)+'/'+(tc+1)}} + + + + + {props.subtitle!=null && + + {} + {(props.subtitle!=null) && {props.subtitle}} + + } + + + ); +}; +export default DownloadAPKModal; \ No newline at end of file diff --git a/PerformicsSrc/src/components/downloadDataModal.js b/PerformicsSrc/src/components/downloadDataModal.js new file mode 100644 index 0000000..45192ca --- /dev/null +++ b/PerformicsSrc/src/components/downloadDataModal.js @@ -0,0 +1,61 @@ +import React,{useRef,useEffect} from "react"; +import { Text, TouchableOpacity ,View,Image,Animated,ActivityIndicator,StatusBar} from "react-native"; +import { customeButtons,GetPageTheme,customStyles,globalStyles,HP } from "../styles/Global"; +import { useRoute } from '@react-navigation/native'; +import { AntDesign } from "./icons"; + +const DownloadDataModal = (props) => { + const route = useRoute(); + const PageTheme=GetPageTheme(props.DarkTheme,route.name); + const globalStyle=globalStyles(props.DarkMode,route.name); + const customStyle=customStyles(props.DarkMode,route.name); + + const downloadAnimated = useRef(new Animated.Value(0)).current; + + const htStyle={height:HP('100%')+StatusBar.currentHeight}; + let dc=props.downloadCount; + let tc=props.totalCount; + let p=((dc/tc)*100); + + const bar_width=p>p?'100%':p+'%'; + + let showProgresssBar=(props.showProgresssBar!=null && props.showProgresssBar!='')?props.showProgresssBar:(props.showProgresssBar===false?false:true); + + // downloadAnimated.setValue(0); + // Animated.timing(downloadAnimated, { + // toValue: 1, + // duration:100, + // useNativeDriver:false, + // }).start(); + // let prev_dc=dc<1?dc-1:dc; + // const bar_width=downloadAnimated.interpolate({ + // inputRange:[prev_dc,dc], + // outputRange:[((prev_dc/tc)*100)+'%',((dc/tc)*100)+'%'], + // }); + + return ( + + + {(props.title!=null) && {props.title}} + {(props.downloadCount!=null && props.totalCount!=null) && props.hideCounter!=true && showProgresssBar && {(dc+1)+'/'+(tc+1)}} + {(props.downloadCount!=null && props.totalCount!=null && showProgresssBar) && + + + + + } + {(props.subtitle!=null) && {props.subtitle}} + {(props.showOkButton!=true) && } + + {(props.showOkButton==true && props.OnOKClick!=null) && + + {props.OnOKClick()}}> + Ok + + + } + + + ); +}; +export default DownloadDataModal; \ No newline at end of file diff --git a/PerformicsSrc/src/components/downloadTasks.js b/PerformicsSrc/src/components/downloadTasks.js new file mode 100644 index 0000000..86df638 --- /dev/null +++ b/PerformicsSrc/src/components/downloadTasks.js @@ -0,0 +1,855 @@ +import React, { useState, useEffect } from 'react'; +import moment from 'moment'; +import { get_item, set_item, clear_item } from '../components/localStorage'; +import { db } from '../constants/constants'; +import { getMethodName, METHODS } from '../constants/methodNames'; +import { getDownloadJson1 } from '../controller/functions'; +import { AppName, PerformicsIRAppName } from '../../../AppSpecificContant'; +import { Platform } from 'react-native'; + +export const PJP_colList = ['MID', 'ChannelId', 'StoreId', 'StoreCode', 'EmpId', 'VisitDate', 'ChainId', 'ChainName', 'StoreName', 'Address', 'Location', 'Landmark', 'CityId', 'CityName', 'StateId', 'StateName', 'RegionId', 'StoreTypeId', 'StoreType', 'Pincode', 'Latitude', 'Longitude', 'Phone', 'Mobile', 'ContactPerson', 'Email', 'UploadStatus', 'GeoTag', 'GeoFenceRadius', 'ExpiryStock', 'InTime', 'OutTime', 'CameraAllow', 'AddVisiAllow', 'LastVisitDate', 'Score', 'MinTimeTaken', 'StoreCategoryId', 'StoreCategory', 'StoreClassId', 'StoreClass', 'TaxType', 'GSTno', 'GSTImage', 'MTDMerchandised', 'DistributorId']; + +export function getDownloadDataTask() { + var DownloadTasks = ["Table_Structure"]; // not required in redownload + DownloadTasks.push("Mapping_JourneyPlan"); // not required in redownload + DownloadTasks.push("Adhoc_JourneyPlan"); // not required in redownload + DownloadTasks.push("NonProgram_JourneyPlan"); // not required in redownload + DownloadTasks.push("Master_Distributor"); // not required in redownload + // DownloadTasks.push("Master_Route"); // not required in redownload + DownloadTasks.push("Master_MenuAppDashboard"); + + DownloadTasks.push("Product_Master"); + DownloadTasks.push("Report_AferCheckIn"), + + DownloadTasks.push("Non_Working_Reason"); // not required in redownload + DownloadTasks.push("Menu_Master"); // not required in redownload + DownloadTasks.push("Mapping_Menu"); + DownloadTasks.push("Mapping_MenuConfiguration"); // not required in redownload + DownloadTasks.push("Mapping_MenuDistributorPoint"); + DownloadTasks.push("Master_Category"); // not required in redownload + DownloadTasks.push("Master_Competitor"); // not required in redownload && only used in competition vis, comp promo, sampling + DownloadTasks.push("Master_NonVisibility"); // not required in redownload + DownloadTasks.push("Master_Display"); // not required in redownload + DownloadTasks.push("Mapping_ProductAssortmentStorewise"); + DownloadTasks.push("Mapping_ProductAssortment"); + DownloadTasks.push("Mapping_Visibility"); + DownloadTasks.push("LastVisit_ClosingStock"); + + DownloadTasks.push("Master_Feedback"); // not required in redownload + DownloadTasks.push("Master_IssueCategory"); + DownloadTasks.push("Master_IssueType"); // not required in redownload + DownloadTasks.push("Master_PromoType"); // not required in redownload + DownloadTasks.push("Master_WindowDefinition"); + DownloadTasks.push("Mapping_StoreWindow"); + DownloadTasks.push("Master_WindowQuestion"); + DownloadTasks.push("Mapping_WindowQuestion"); + DownloadTasks.push("Master_WindowReason"); + DownloadTasks.push("Master_WindowStockDefinition"); + DownloadTasks.push("Master_POSMDefinition"); + DownloadTasks.push("Mapping_StorePOSM"); + DownloadTasks.push("Master_POSMReason"); + DownloadTasks.push("Master_POSMQuestion"); + DownloadTasks.push("Mapping_POSMQuestion"); + // DownloadTasks.push("User_CurrentPosmStock"); + DownloadTasks.push("Master_VisibilityDefinition"); + DownloadTasks.push("Mapping_StoreVisibility"); + DownloadTasks.push("Master_VisibilityQuestion"); + DownloadTasks.push("Mapping_VisibilityQuestion"); + DownloadTasks.push("Master_VisibilityStockDefinition"); + DownloadTasks.push("Master_VisibilityReason"); + DownloadTasks.push("Master_PromotionDefinition"); + DownloadTasks.push("Mapping_StorePromotion"); + DownloadTasks.push("Master_PromotionQuestion"); + DownloadTasks.push("Mapping_PromotionQuestion"); + DownloadTasks.push("Master_PromotionStockDefinition"); + DownloadTasks.push("Master_PromotionReason"); + DownloadTasks.push("Master_ShareOfShelfDefinition"); + DownloadTasks.push("Mapping_StoreShareOfShelf"); + DownloadTasks.push("Mapping_ShareOfShelfTarget"); + DownloadTasks.push("Mapping_StoreShareOfShelfTarget"); + DownloadTasks.push("Master_ImageType"); // not required in redownload + DownloadTasks.push("Report_PromoterMerchandiserPerformance"); // not required in redownload + DownloadTasks.push("Master_Checklist"); + DownloadTasks.push("Mapping_DisplayChecklist"); + DownloadTasks.push("Master_SurveyQuestion"); + DownloadTasks.push("Master_FeedbackQuestion"); + DownloadTasks.push("Mapping_Survey"); + DownloadTasks.push("Master_CategoryDefinition"); + DownloadTasks.push("Mapping_StoreCategory"); + DownloadTasks.push("Master_CategoryQuestion"); + DownloadTasks.push("Mapping_CategoryQuestion"); + DownloadTasks.push("Master_CategoryStockDefinition"); + DownloadTasks.push("Master_CategoryReason"); + DownloadTasks.push("Master_PosSaleDefinition"); + DownloadTasks.push("Mapping_PosSaleDefinition"); + DownloadTasks.push("Mapping_StorePosSaleDefinition"); + DownloadTasks.push("Master_PosSaleReason"); + DownloadTasks.push("Report_ComplianceScore"); // not required in redownload + DownloadTasks.push("Master_Document"); // not required in redownload + DownloadTasks.push("Master_StoreChecklist"); + DownloadTasks.push("Master_MenuReports"); // not required in redownload + DownloadTasks.push("Master_City"); // not required in redownload + DownloadTasks.push("Master_StoreType"); // not required in redownload + DownloadTasks.push("Master_Chain"); // not required in redownload + DownloadTasks.push("Master_StoreCategory"); // not required in redownload + DownloadTasks.push("Master_StoreClass"); // not required in redownload + DownloadTasks.push("Non_Working_ReasonDistributor"); // not required in redownload + DownloadTasks.push("Master_Channel"); // not required in redownload + DownloadTasks.push("PriviousVisit_Orders"); + DownloadTasks.push("NonMerchandising_JourneyPlan"); // not required in redownload + DownloadTasks.push("Master_VisitorFeedbackQuestion"); + DownloadTasks.push("Master_VisitorLoginQuestion"); + DownloadTasks.push("Mapping_StoreVisibilitySpecific"); + DownloadTasks.push("Master_SamplingDefinition"); + DownloadTasks.push("Master_SamplingStockDefinition"); + DownloadTasks.push("Mapping_StoreSampling"); + DownloadTasks.push("Master_SamplingQuestion"); + DownloadTasks.push("Mapping_SamplingQuestion"); + DownloadTasks.push("Master_SamplingReason"); + DownloadTasks.push("Master_Program"); + DownloadTasks.push("Master_ProgramDefinition"); + DownloadTasks.push("Mapping_StoreProgram"); + DownloadTasks.push("Master_ProgramQuestion"); + DownloadTasks.push("Mapping_ProgramQuestion"); + DownloadTasks.push("Master_ProgramStockDefinition"); + DownloadTasks.push("Master_ProgramReason"); + DownloadTasks.push("Mapping_StoreAuditGrading"); + DownloadTasks.push("Mapping_StoreTargetBased"); + DownloadTasks.push("Master_TargetBasedQuestion"); + DownloadTasks.push("Mapping_TargetBasedQuestion"); + DownloadTasks.push("Master_ContractFormQuestion"); + DownloadTasks.push("Mapping_ContractForm"); + DownloadTasks.push("Master_NonContractFromReason"); + DownloadTasks.push("Master_ShareOfShelfEyeLevelDefinition"); + DownloadTasks.push("Mapping_StoreShareOfShelfEyeLevel"); + DownloadTasks.push("Master_DistributorFilter"); + DownloadTasks.push("Master_CityFilter"); + DownloadTasks.push("Master_StoreTypeFilter"); + DownloadTasks.push("Master_DetailerContent"); // not required in redownload + DownloadTasks.push("Master_UserHomeLocation"); + // DownloadTasks.push("Mapping_WarehouseItem"); + DownloadTasks.push("Master_WarehouseItem"); + DownloadTasks.push("Master_WarehouseItemQuestion"); + DownloadTasks.push("Mapping_WarehouseItemQuestion"); + DownloadTasks.push("Master_WarehouseNonDeployReason"); + DownloadTasks.push("Mapping_WarehouseCampaignItem"); + DownloadTasks.push("Mapping_WarehouseCampaignItemQuestion"); + DownloadTasks.push("Mapping_WarehouseCampaignDeployment"); + DownloadTasks.push("Mapping_WarehousePrimaryItem"); + DownloadTasks.push("Report_WarehouseStockInHand"); + DownloadTasks.push("Warehouse_InwardData"); + DownloadTasks.push("Master_WarehouseReason"); + DownloadTasks.push("Master_StockPromoType"); + DownloadTasks.push("Training_Document"); + DownloadTasks.push("Mapping_AddStoreConfiguration"); + + DownloadTasks.push("KYC_StoreList"); + DownloadTasks.push("Mapping_KYCConfiguration"); + DownloadTasks.push("KYC_StoreListRejected"); + DownloadTasks.push("Mapping_KYCUploaded"); + let DownloadTasks1 = []; + for (let i = 0; i < DownloadTasks.length; i++) { + let key = DownloadTasks[i]; + let index = i + 1; + let IsMandatory = (key == 'Table_Structure' || key == 'Mapping_JourneyPlan') ? true : false; + let obj = { "KeyId": index, "DownloadKey": key, "IsMandatory": IsMandatory, "DevActive": true, "ProdActive": true, "DownloadSequence": index }; + DownloadTasks1.push(obj); + if (i == DownloadTasks.length - 1) { + return DownloadTasks1; + } + } + // return DownloadTasks; +} + +export const devDownloadKeys = (availableTables = []) => { + const allDevKeys = [ + // "Master_MenuReportStoreWise", + // "Mapping_SideMenuMiscellaneous", + // "StoreList_OfflineOrder", + // "Master_NonOrderReason", + // "Mapping_AdditionalVisibilityProduct", + // "Gyancast_TrainingContent", + // "Gyancast_TrainingContentQuestion", + // "Gyancast_PopupMessage" + ]; + + // ✅ Filter only those keys which exist in Table_Structure + const filteredKeys = allDevKeys.filter(key => availableTables.includes(key)); + + return filteredKeys.map((key, index) => { + const IsMandatory = (key === 'Table_Structure' || key === 'Mapping_JourneyPlan'); + return { + KeyId: index + 1, + DownloadKey: key, + IsMandatory, + DevActive: true, + ProdActive: true, + DownloadSequence: index + 1 + }; + }); +}; + +// export const devDownloadKeys = (availableTables = []) => { +// const allDevKeys = [ +// "Mapping_ProductPTR" +// ]; + +// const shouldFilter = Array.isArray(availableTables) && availableTables.length > 0; +// console.log("AvailbleFilterTable:",shouldFilter) + +// const filteredKeys = shouldFilter +// ? allDevKeys.filter(key => availableTables.includes(key)) +// : allDevKeys; // 🔥 fallback + +// return filteredKeys.map((key, index) => ({ +// KeyId: index + 1000, +// DownloadKey: key, +// IsMandatory: false, +// DevActive: true, +// ProdActive: true, +// DownloadSequence: index + 100 +// })); +// }; + + + + + +export async function getReDDownloadTask(AddKeys = []) { + return await new Promise((resolve, reject) => { + let myd = []; + myd.push("Mapping_ProductAssortmentStorewise"); + myd.push("Mapping_ProductAssortment"); + myd.push("LastVisit_ClosingStock"); + myd.push("Mapping_StoreWindow"); + myd.push("Mapping_WindowQuestion"); + myd.push("Mapping_StorePOSM"); + myd.push("Mapping_POSMQuestion"); + myd.push("Mapping_StoreVisibility"); + myd.push("Mapping_VisibilityQuestion"); + myd.push("Mapping_StorePromotion"); + myd.push("Mapping_PromotionQuestion"); + myd.push("Mapping_StoreShareOfShelf"); + myd.push("Mapping_DisplayChecklist"); + myd.push("Mapping_Survey"); + myd.push("Mapping_StoreCategory"); + myd.push("Mapping_CategoryQuestion"); + myd.push("Mapping_StoreVisibilitySpecific"); + myd.push("Mapping_ShareOfShelfTarget"); + myd.push("Product_Master"); + myd.push("Mapping_Menu"); + myd.push("Mapping_MenuDistributorPoint"); + myd.push("Master_WindowDefinition"); + myd.push("Master_WindowQuestion"); + myd.push("Master_WindowReason"); + myd.push("Master_WindowStockDefinition"); + myd.push("Master_POSMDefinition"); + myd.push("Master_POSMReason"); + myd.push("Master_POSMQuestion"); + myd.push("User_CurrentPosmStock"); + myd.push("Master_VisibilityDefinition"); + myd.push("Master_VisibilityQuestion"); + myd.push("Master_VisibilityStockDefinition"); + myd.push("Master_VisibilityReason"); + myd.push("Master_PromotionDefinition"); + myd.push("Master_PromotionQuestion"); + myd.push("Master_PromotionStockDefinition"); + myd.push("Master_PromotionReason"); + myd.push("Master_ShareOfShelfDefinition"); + myd.push("Master_Checklist"); + myd.push("Master_SurveyQuestion"); + myd.push("Master_FeedbackQuestion"); + myd.push("Master_CategoryDefinition"); + myd.push("Master_CategoryQuestion"); + myd.push("Master_CategoryStockDefinition"); + myd.push("Master_CategoryReason"); + myd.push("Master_PosSaleDefinition"); + myd.push("Mapping_PosSaleDefinition"); + myd.push("Master_PosSaleReason"); + myd.push("Master_StoreChecklist"); + myd.push("PriviousVisit_Orders"); + myd.push("Master_VisitorFeedbackQuestion"); + myd.push("Master_SamplingDefinition"); + myd.push("Master_SamplingStockDefinition"); + myd.push("Mapping_StoreSampling"); + myd.push("Master_SamplingQuestion"); + myd.push("Master_Program"); + myd.push("Master_ProgramDefinition"); + myd.push("Mapping_StoreProgram"); + myd.push("Master_ProgramQuestion"); + myd.push("Mapping_ProgramQuestion"); + myd.push("Master_ProgramStockDefinition"); + myd.push("Mapping_StoreTargetBased"); + myd.push("Master_TargetBasedQuestion"); + myd.push("Mapping_TargetBasedQuestion"); + var DownloadTasks = AddKeys.concat(myd); + + let DownloadTasks1 = []; + for (let i = 0; i < DownloadTasks.length; i++) { + let key = DownloadTasks[i]; + let index = i + 1; + let IsMandatory = (key == 'Table_Structure' || key == 'Mapping_JourneyPlan') ? true : false; + let obj = { "KeyId": index, "DownloadKey": key, "IsMandatory": IsMandatory, "DevActive": true, "ProdActive": true, "DownloadSequence": index }; + DownloadTasks1.push(obj); + if (i == DownloadTasks.length - 1) { + // console.log('DownloadTasks1:',DownloadTasks1); + resolve(DownloadTasks1); + } + } + }).catch((Err) => { + console.log(Err); + return []; + }) + + +} + +export async function getReDownloadTasks1(props) { + console.log('getReDownloadTasks1'); + return new Promise(async (resolve, reject) => { + var DownloadTasks1 = []; + console.log('chekc 1', props.DownloadKey); + if (props.DownloadKey != null && props.DownloadKey != '') { + console.log('props.DownloadKey'); + let prop_dk = JSON.parse(props.DownloadKey); + let AllDTs = prop_dk['DownloadKey'] || []; + console.log('set server d keys', AllDTs.length); + if (AllDTs.length > 0) { + for (let i = 0; i < AllDTs.length; i++) { + let item = AllDTs[i]; + if (item.ReDownload == 1 || item.ReDownload == 'true' || item.ReDownload == '1') { + DownloadTasks1.push(item); + } + if (i == AllDTs.length - 1) { + console.log('set server d2 keys', DownloadTasks1.length); + let sortedDTs = await SortDownloadkeys(DownloadTasks1); + resolve(sortedDTs); + } + } + } + else { + resolve([]); + } + } + else { + DownloadTasks1 = getDownloadDataTask(); + resolve(DownloadTasks1); + } + + }).catch((Err) => { + console.log('getDTasks err', Err); + return []; + }) + +} + +export async function SortDownloadkeys(AllDTs) { + return await new Promise.all(AllDTs.sort((a, b) => { + if (a.DownloadSequence < b.DownloadSequence) { + return -1; + } + if (a.DownloadSequence > b.DownloadSequence) { + return 1; + } + // a must be equal to b + return 0; + })).then((val) => { + return AllDTs; + }); +} + +export async function getBeatDownloadTask() { + let DownloadTasks = ["JourneyPlan_RouteWise"]; + return await getReDDownloadTask(DownloadTasks); +} + +export async function getNewStoresDownloadTask(PJP_Table) { + let DownloadTasks = ["Mapping_JourneyPlan", "Adhoc_JourneyPlan"]; + return await getReDDownloadTask(DownloadTasks); +} + + +export async function onNoData(data = [], shouldStop = false, tbname = '', props, showErrorModal = () => { }, res) { + console.log("res on no data in ReDownloadTask:", res); + const ST = props.StaticText || {}; + if (tbname != '') { + db.transaction(function (txn) { + // delete all today data + txn.executeSql(`delete from ${tbname} where 1=1`, [], function (txn1, txnres) { + console.log('deleted all data for ' + tbname); + }, function (Etxn, err) { + console.log('err:', err); + }); + }); + } + + if (shouldStop == true) { + let msg = ''; + // res should be set only when there is network or other related issue + if (res == '') { + msg = ST.Nodatafoundfor + tbname + ''; + if (tbname == 'Mapping_JourneyPlan') { + msg = ST.Youhavenojourneyplanfortoday; + } + } + else { + msg = res + " Please ensure you are connected to the internet and retry downloading! "; + } + console.log("msg :", msg); + // set is Data downloaded to false so that no other parts of app can be accessed if data is not downloaded + // update download status on local async storage + let dateWiseDataDownload = await get_item('dateWiseDataDownload'); + let dateWiseDataDownload1 = dateWiseDataDownload != null ? JSON.parse(dateWiseDataDownload) : {}; + let todayDate = moment(new Date()).format('DD/MM/YYYY'); + dateWiseDataDownload1[todayDate] = false; + set_item('dateWiseDataDownload', JSON.stringify(dateWiseDataDownload1)); + // update downloaed status on redux props + props.setTodayDataExists(false); + props.setGlobalData({ isDataDownloaded: false }) + // notify(msg); + // show error msg + let obj = { "ErrorMsg": "!! Error in downloading data !!", "ErrorSubMsg": tbname, "ErrorDetail": msg } + props.set_startDownload({ startDownload: false }); + //hide download modal and show Error in Download modal with details + showErrorModal(obj); + } + else { + + } +} + +export async function insert_TaskDownloadedData( + res, + D_key, + D_ColList = [], + props, + showErrorModal = () => {}, + setTaskResponse = () => {} +) { + console.log('insert_TaskDownloadedData:', D_key); + let r_obj = { r: false, data_arr: [] }; + + try { + if (res && typeof res === 'object' && res[D_key] != null && res[D_key] !== '') { + const jsonData = res[D_key] || []; + + if (!Array.isArray(jsonData) || jsonData.length === 0) { + console.warn(`⚠️ No data to insert in table: ${D_key}`); + return { r: true, data_arr: [] }; + } + + const columns = Array.from( + new Set(jsonData.flatMap(row => Object.keys(row))) + ); + + const normalizedData = jsonData.map(row => { + const normalizedRow = {}; + columns.forEach(col => { + normalizedRow[col] = row.hasOwnProperty(col) ? row[col] : null; + }); + return normalizedRow; + }); + + console.log("normalizedData", normalizedData); + + const valuesArray = normalizedData.map(row => { + const valueList = columns.map(col => { + const val = row[col]; + if (val === null || val === undefined) return 'NULL'; + if (typeof val === 'number') return val; + if (typeof val === 'boolean') return val ? 1 : 0; + + return `'${val.toString().replace(/'/g, "")}'`; + + }); + return `(${valueList.join(',')})`; + }); + + const sql = `INSERT INTO ${D_key} (${columns.join(',')}) VALUES ${valuesArray.join(',')};`; + + await new Promise((resolve, reject) => { + db.transaction((txn) => { + txn.executeSql(`DELETE FROM ${D_key}`, [], () => { + txn.executeSql(sql, [], () => { + setTaskResponse(jsonData); + console.log(`✅ Inserted data into table: ${D_key}`); + resolve(); + }, (tx, error) => { + console.error(`❌ Insert failed in table: ${D_key}`, error); + reject(error); + }); + }, (tx, error) => { + console.error(`❌ Delete failed in table: ${D_key}`, error); + reject(error); + }); + }); + }); + + return { r: true, data_arr: jsonData }; + } + + if (res && typeof res === 'object' && res[0]?.Result === "No Data") { + console.log('No data found'); + return { r: true, data_arr: [] }; + } + + if (res && typeof res === 'object' && res.success === false) { + console.log('Error in downloading network', res); + return { r: false, data_arr: [] }; + } + + console.log('Error in downloading else', res); + return { r: false, data_arr: [] }; + + } catch (err) { + console.log('err:', err); + return { r: false, data_arr: [] }; + } +} + + + + +export async function checkIfDataAvlbl(storeData, D_key, cols = 'StoreId') { + console.log('checkIfDataAvlbl', D_key) + let { StoreId, ChannelId, RegionId, StoreTypeId } = storeData; + let colsToCompare = cols.split(','); + if (cols != '' && cols != null && storeData != null && colsToCompare.length > 0) { + return new Promise((resolve, reject) => { + let q = '', whereq = ''; + q = `Select * from ${D_key}`; + for (let i = 0; i < colsToCompare.length; i++) { + let column = colsToCompare[i]; + if (column != null && column != '' && storeData[column] != null && storeData[column] != '') { + whereq += whereq == '' ? ` Where ` : ' and '; + whereq += ` ${column}=${storeData[column]} `; + } + } + q += ' ' + whereq; + console.log('query to check store data:', q) + db.transaction(function (txn) { + // delete all today data + txn.executeSql(q, [], function (txn1, txnres) { + console.log(D_key + ' data length:', txnres.rows.length); + if (txnres.rows.length > 0) { + resolve(true); + } + else { + resolve(false); + } + }, function (txnE, txnerr) { + console.log(txnerr); + resolve(false); + }); + }); + }).catch((err) => { + console.log('error:', err); + return false; + }) + } + else { + return false; + } +} + +//************************** download functionallity******************* +export async function startRedownload(props, DownloadTasks, dowloadedCount, totalCount, setDowloadedCount = () => { }, setTotalCount = () => { }) { + console.log('startRedownload', DownloadTasks); + if (totalCount == (DownloadTasks.length - 1) && totalCount > 0) { + console.log('setDowloadedCount', dowloadedCount, 0); + setDowloadedCount(0); + } + else { + console.log('setTotalCount', totalCount, (DownloadTasks.length - 1)); + setTotalCount((DownloadTasks.length - 1)); + } + return DownloadTasks; +} + +export async function executeTasks(props, storeData, DownloadTasks, dowloadedCount, totalCount, setDowloadedCount = () => { }, setDownloadingText = () => { }, onDownloadComplete = () => { }, setTaskResponse = () => { }, showErrorModal = () => { }) { + // var DownloadTasks=getDownloadDataTask(); + let loginInfo = await get_item('loginInfo'); + const loginDetails = JSON.parse(loginInfo); + var currentIndex = dowloadedCount; + console.log('currentIndex:', currentIndex); + if (currentIndex >= 0) { + let dk_data = DownloadTasks[currentIndex]; + console.log('dk_data', dk_data); + let key = dk_data.DownloadKey || ''; + setDownloadingText(key); + let IsDataExists = await CheckIfRequiredDownload(storeData, currentIndex, DownloadTasks); + if (!IsDataExists) { + var data = await getPostData(DownloadTasks, currentIndex); + var url = props.baseurl + getMethodName(METHODS.DOWNLOADJSON_METHOD); + console.log(url, data); + await getDownloadJson1(url, data) + .then(async (res) => { + console.log('res of download get'); + let isAdded = await updateTaskRes(props, storeData, res, currentIndex, DownloadTasks, setTaskResponse, true, showErrorModal); + if (isAdded == true) { + if (currentIndex == DownloadTasks.length - 1) { + console.log('last found all downloaded'); + onDownloadComplete(); + } + else { + console.log('all downloaded but last not found '); + } + } + else { + console.log('Cannot download all Data'); + } + }) + .catch(err => { + console.log('onPage Team error', err); + }); + } + else { + let isAdded = await updateTaskRes(props, storeData, [{ "Result": "No Data" }], currentIndex, DownloadTasks, setTaskResponse, false, showErrorModal); + if (isAdded == true) { + if (currentIndex == DownloadTasks.length - 1) { + console.log('last found all downloaded'); + onDownloadComplete(); + } + else { + console.log('all downloaded but last not found '); + } + } + else { + console.log('Cannot download all Data'); + } + } + } + +} + + +////need to optimize this function +export async function CheckIfRequiredDownload(storeData, index, DownloadTasks) { + let dk_data = DownloadTasks[index]; + let key = dk_data.DownloadKey || ''; + return new Promise(async (resolve, reject) => { + switch (key) { + case 'Mapping_Menu': { + let IsDataAvlbl = await checkIfDataAvlbl(storeData, key, 'ChannelId,RegionId,StoreTypeId,StoreCategoryId'); + console.log('IsDataAvlbl:', IsDataAvlbl); + resolve(IsDataAvlbl); + break; + } + case 'Mapping_Visibility': { + let IsDataAvlbl = await checkIfDataAvlbl(storeData, key, 'StoreId'); + console.log('IsDataAvlbl:', IsDataAvlbl); + resolve(IsDataAvlbl); + break; + } + + case 'Mapping_Promotion': { + let IsDataAvlbl = await checkIfDataAvlbl(storeData, key, 'StateId,ChainId,StoreTypeId'); + console.log('IsDataAvlbl:', IsDataAvlbl); + resolve(IsDataAvlbl); + break; + } + case 'Mapping_ProductAssortmentStorewise': { + let IsDataAvlbl = await checkIfDataAvlbl(storeData, key, 'StoreId,ProductId,MSL,MBQ'); + console.log('IsDataAvlbl:', IsDataAvlbl); + resolve(IsDataAvlbl); + break; + } + + case 'Mapping_ProductAssortment': { + let IsDataAvlbl = await checkIfDataAvlbl(storeData, key, 'StoreId,ProductId,MSL,MBQ'); + console.log('IsDataAvlbl:', IsDataAvlbl); + resolve(IsDataAvlbl); + break; + } + + case 'LastVisit_ClosingStock': { + let IsDataAvlbl = await checkIfDataAvlbl(storeData, key, 'StoreId'); + console.log('IsDataAvlbl:', IsDataAvlbl); + resolve(IsDataAvlbl); + break; + } + + case 'Mapping_StoreWindow': { + let IsDataAvlbl = await checkIfDataAvlbl(storeData, key, 'StoreId'); + console.log('IsDataAvlbl:', IsDataAvlbl); + resolve(IsDataAvlbl); + break; + } + case 'Mapping_StorePOSM': { + let IsDataAvlbl = await checkIfDataAvlbl(storeData, key, 'StoreId'); + console.log('IsDataAvlbl:', IsDataAvlbl); + resolve(IsDataAvlbl); + break; + } + case 'Mapping_StoreShelfTalker': { + let IsDataAvlbl = await checkIfDataAvlbl(storeData, key, 'StoreId'); + console.log('IsDataAvlbl:', IsDataAvlbl); + resolve(IsDataAvlbl); + break; + } + + case 'Mapping_StoreVisibility': { + let IsDataAvlbl = await checkIfDataAvlbl(storeData, key, 'StoreId'); + console.log('IsDataAvlbl:', IsDataAvlbl); + resolve(IsDataAvlbl); + break; + } + + case 'Mapping_StorePromotion': { + let IsDataAvlbl = await checkIfDataAvlbl(storeData, key, 'StoreId'); + console.log('IsDataAvlbl:', IsDataAvlbl); + resolve(IsDataAvlbl); + break; + } + + case 'Mapping_StoreShareOfShelf': { + let IsDataAvlbl = await checkIfDataAvlbl(storeData, key, 'StoreId'); + console.log('IsDataAvlbl:', IsDataAvlbl); + resolve(IsDataAvlbl); + break; + } + case 'Mapping_Survey': { + let IsDataAvlbl = await checkIfDataAvlbl(storeData, key, 'StoreId'); + console.log('IsDataAvlbl:', IsDataAvlbl); + resolve(IsDataAvlbl); + break; + } + case 'Mapping_StoreCategory': { + let IsDataAvlbl = await checkIfDataAvlbl(storeData, key, 'StoreId'); + console.log('IsDataAvlbl:', IsDataAvlbl); + resolve(IsDataAvlbl); + break; + } + case 'Mapping_StoreVisibilitySpecific': { + let IsDataAvlbl = await checkIfDataAvlbl(storeData, key, 'StoreId'); + console.log('IsDataAvlbl:', IsDataAvlbl); + resolve(IsDataAvlbl); + break; + } + case 'Mapping_ShareOfShelfTarget': { + let IsDataAvlbl = await checkIfDataAvlbl(storeData, key, 'StateId'); + console.log('IsDataAvlbl:', IsDataAvlbl); + resolve(IsDataAvlbl); + break; + } + + case 'Mapping_MenuDistributorPoint': { + let IsDataAvlbl = await checkIfDataAvlbl(storeData, key, 'MenuId'); + console.log('IsDataAvlbl:', IsDataAvlbl); + resolve(IsDataAvlbl); + break; + } + + case 'PriviousVisit_Orders': { + let IsDataAvlbl = await checkIfDataAvlbl(storeData, key, 'StoreId'); + console.log('IsDataAvlbl:', IsDataAvlbl); + resolve(IsDataAvlbl); + break; + } + case 'Mapping_StoreSampling': { + let IsDataAvlbl = await checkIfDataAvlbl(storeData, key, 'StoreId'); + console.log('IsDataAvlbl:', IsDataAvlbl); + resolve(IsDataAvlbl); + break; + } + case 'Mapping_StoreAuditGrading': { + let IsDataAvlbl = await checkIfDataAvlbl(storeData, key, 'StoreId'); + console.log('IsDataAvlbl:', IsDataAvlbl); + resolve(IsDataAvlbl); + break; + } + case 'Mapping_StoreProgram': { + let IsDataAvlbl = await checkIfDataAvlbl(storeData, key, 'StoreId'); + console.log('IsDataAvlbl:', IsDataAvlbl); + resolve(IsDataAvlbl); + break; + } + case 'Mapping_StoreTargetBased': { + let IsDataAvlbl = await checkIfDataAvlbl(storeData, key, 'StoreId'); + console.log('IsDataAvlbl:', IsDataAvlbl); + resolve(IsDataAvlbl); + break; + } + + default: resolve(false); break; + + } + + }).catch((err) => { + console.log('error in check', err); + return false; + }); + +} + +////need to optimize this function +export async function updateTaskRes( + props, + storeData, + res, + index, + DownloadTasks, + setTaskResponse = () => {}, + isDownloadExists = true, + showErrorModal = () => {} +) { + try { + const dk_data = DownloadTasks[index]; + const key = dk_data?.DownloadKey || ''; + const IsMandatory = dk_data?.IsMandatory === 'true' || dk_data?.IsMandatory === 1; + console.log("res-------", key); + const i_res = await insert_TaskDownloadedData(res, key, {}, props, showErrorModal); + const { data_arr, r } = i_res; + if (r) { + setTaskResponse(data_arr); + } + console.log('r:', r); + return r; + } catch (err) { + console.log('error in downloading', err); + return false; + } +} + + + +export async function getPostData(DownloadTasks, index = 0) { + // var DownloadTasks=getDownloadDataTask(); + // let token=await get_item('loginToken'); + let dk_data = DownloadTasks[index]; + let key = dk_data.DownloadKey || ''; + let loginInfo = await get_item('loginInfo'); + const loginDetails = JSON.parse(loginInfo); + const todate = new Date(); + const today = moment(todate).format("HH:mm:ss"); + let projectInfo = await get_item('projectInfo'); + let projectDetails = projectInfo != null ? JSON.parse(projectInfo) : {}; + var postdata = {}; + if (index >= 0) { + postdata = { + Downloadtype: key, + Username: loginDetails.UserId, + Param1: '', + Param2: (key == "Gyancast_TrainingContent" || key == "Gyancast_PopupMessage") ? projectDetails?.ProjectCode : (Platform.OS == "ios" ? "iOS" : "Android"), + + }; + } + return postdata; +} + +export async function getPostData2(key = '') { + let loginInfo = await get_item('loginInfo'); + const loginDetails = JSON.parse(loginInfo); + var postdata = {}; + if (key != '') { + postdata = { + Downloadtype: key, + Username: loginDetails.UserId, + Param1: '', + Param2: Platform.OS == "ios" ? "iOS" : "Android", + }; + } + + return postdata; +} + diff --git a/PerformicsSrc/src/components/drawerHeader.js b/PerformicsSrc/src/components/drawerHeader.js new file mode 100644 index 0000000..fec9444 --- /dev/null +++ b/PerformicsSrc/src/components/drawerHeader.js @@ -0,0 +1,130 @@ + + +import React, { useState, useEffect, useRef } from "react"; +import { Text, TouchableOpacity, View, Image, StatusBar, StyleSheet } from "react-native"; + +import { GetPageTheme, customStyles, globalStyles } from "../styles/Global"; +import { useRoute } from '@react-navigation/native'; +import {Entypo, Fontisto, MaterialCommunityIcons, FontAwesome } from "./icons"; +import moment from 'moment'; +import LinearGradient from 'react-native-linear-gradient'; +import { DevType } from "../constants/constants"; + +function DrawerHeader(props) { + const route = useRoute(); + const isCancelled = useRef(false); + const PageTheme = GetPageTheme(props.DarkTheme, route.name); + const globalStyle = globalStyles(props.DarkMode, route.name); + const customStyle = customStyles(props.DarkMode, route.name); + const [currentTime, setCurrentTime] = useState(''); + const [currentDate, setCurrentDate] = useState(''); + const [isRed, setIsRed] = useState(true); + + + useEffect(() => { + setTimer(); + return () => { isCancelled.current = true; }; + }, []); + + useEffect(() => { + var interval + if (props?.TrainingOrg2?.length > 0) { + interval = setInterval(() => { + setIsRed(prev => !prev); + }, 500); // changes every 500ms + } + return () => clearInterval(interval); // cleanup + }, [props?.TrainingOrg2]); + + function setTimer() { + if (!isCancelled.current) { + let d1 = new Date(); + let now = moment(d1).format('hh:mm:ss a'); + let ndate = moment(d1).format('DD/MM/YYYY'); + setCurrentTime(now); + setCurrentDate(ndate); + setTimeout(() => { setTimer(); }, 1000); + } + } + + + function toggleDrawer() { + props.navigation.toggleDrawer(); + } + + + return ( + + + + {props.drawer_title != null ? props.drawer_title : route.name} + + { toggleDrawer() }}> + + + + + {'Id : ' + (DevType == "Prod" ? (props.projectCode != null ? props.projectCode : '') : props?.projectCode + "_Dev")} + props.navigation.navigate('NotificationList')} > + + + + {props?.badgeCount ? props?.badgeCount : 0} + + + + {/* + {currentDate} + {currentTime} + */} + + + + + + {currentDate} + {currentTime} + + + {props.Gyancast && + { props.navigation.navigate('Gyancasts') }}> + {/* 0?Gyancastsicon_red:Mic}/> */} + + + {props?.TrainingOrg2?.length > 0 && {'\u2022'}} + + GyanCast + } + + + ) +} + +export default DrawerHeader; + +const styles = StyleSheet.create({ + button: { + marginRight: 20, + }, + itemCountContainer: { + position: "absolute", + height: 20, + width: 20, + borderRadius: 15, + backgroundColor: "#FF7D7D", + left: 18, + bottom: 10, + alignItems: "center", + justifyContent: "center", + zIndex: 2000, + }, + itemCountText: { + color: "white", + fontWeight: "bold", + textAlign: "center", + }, +}) \ No newline at end of file diff --git a/PerformicsSrc/src/components/enc_dec.js b/PerformicsSrc/src/components/enc_dec.js new file mode 100644 index 0000000..9ac3106 --- /dev/null +++ b/PerformicsSrc/src/components/enc_dec.js @@ -0,0 +1,30 @@ +import base64 from 'base-64'; +import utf8 from 'utf8'; + +const SALT = 'ć92😳☕ĸ♊ǛƶÃƱzÙŒwŷygƃ☈8ò☢¯♓ǰ'; +const PREPENDING_STR = '__enc__'; + + export function encodeCredential(input) { + if (input // if the input exists + && typeof input === 'string' // and it's a string + ) { + const newInput = `${input}${SALT}`; // add salt to the input + const utf8Bytes = utf8.encode(newInput); // utf8 encode it + const encoded = base64.encode(utf8Bytes); // base64 encode it + return `${PREPENDING_STR}${encoded}`; // add a prepending string + } + return input; +} + +export function decodeCredential(input) { + if (input // if the input exists + && typeof input === 'string' // and it's a string + && input.startsWith(PREPENDING_STR) === true // and it's encoded yet + ) { + const newInput = input.replace(PREPENDING_STR, ''); // remove the prepending string + const utf8Bytes = base64.decode(newInput); // base64 decode it + const output = utf8.decode(utf8Bytes); // utf8 decode it + return output.replace(SALT, ''); + } + return input; +} \ No newline at end of file diff --git a/PerformicsSrc/src/components/geolocation.js b/PerformicsSrc/src/components/geolocation.js new file mode 100644 index 0000000..a5a0989 --- /dev/null +++ b/PerformicsSrc/src/components/geolocation.js @@ -0,0 +1,255 @@ +import {PermissionsAndroid,Platform} from 'react-native'; +import { notify } from "./notify"; +import Permissions, { PERMISSIONS, RESULTS } from 'react-native-permissions' + +export async function CheckAndAskForPermission(Permm){ + if (Platform.OS === 'ios') { + console.log('CheckAndAskForPermission ios'); + let IOS_hasPermission = await Permissions.check(Permm) + if (IOS_hasPermission==RESULTS.GRANTED) return true; + let IOS_status = await Permissions.request(Permm); + console.log('IOS_status:',IOS_status); + if (IOS_status === RESULTS.GRANTED) return true; + if (IOS_status === RESULTS.DENIED) { + notify('Location permission denied by user.'); + } else if (RESULTS === RESULTS.UNAVAILABLE) { + notify('Location permission not available.'); + } + return true; + } + else if (Platform.OS === 'android') { + const hasPermission = await PermissionsAndroid.check(Permm); + if (hasPermission) return true; + const status = await PermissionsAndroid.request(Permm); + if (status === PermissionsAndroid.RESULTS.GRANTED) return true; + if (status === PermissionsAndroid.RESULTS.DENIED) { + notify('Location permission denied by user.'); + } else if (status === PermissionsAndroid.RESULTS.NEVER_ASK_AGAIN) { + notify('Location permission revoked by user.'); + } + return false; + } + + return true; +} + +export async function CheckAndAskForMulitplePermissions(Permms=[]){ + let hasPermission = await Permissions.checkMultiple(Permms) + let k_IOSLoc='ios.permission.LOCATION_WHEN_IN_USE',k_IOSCamera='ios.permission.CAMERA',k_IOSStorage='ios.permission.PHOTO_LIBRARY',k_IOSMic=PERMISSIONS.IOS.MICROPHONE,k_IOSmedia=PERMISSIONS.IOS.MEDIA_LIBRARY; + let k_Loc='android.permission.ACCESS_FINE_LOCATION',k_Camera='android.permission.CAMERA',k_Storage='android.permission.WRITE_EXTERNAL_STORAGE',k_StorageRead='android.permission.READ_EXTERNAL_STORAGE',k_Mic=PERMISSIONS.ANDROID.RECORD_AUDIO; + if (Platform.OS === 'ios') { + if (hasPermission[k_IOSLoc]==RESULTS.GRANTED && hasPermission[k_IOSCamera]==RESULTS.GRANTED && hasPermission[k_IOSStorage]==RESULTS.GRANTED && hasPermission[k_IOSMic]==RESULTS.GRANTED && hasPermission[k_IOSmedia]==RESULTS.GRANTED) return true; + } + else{ + if (hasPermission[k_Loc]==RESULTS.GRANTED && hasPermission[k_Camera]==RESULTS.GRANTED && hasPermission[k_Storage]==RESULTS.GRANTED && hasPermission[k_StorageRead]==RESULTS.GRANTED && hasPermission[k_Mic]==RESULTS.GRANTED) return true; + } + + let statuses = await Permissions.requestMultiple(Permms); + let denies=[]; + let notavlbl=[]; + console.log(statuses); + if (Platform.OS === 'ios') { + if (statuses[k_IOSLoc]==RESULTS.GRANTED && statuses[k_IOSCamera]==RESULTS.GRANTED && statuses[k_IOSStorage]==RESULTS.GRANTED && statuses[k_IOSMic]==RESULTS.GRANTED && statuses[k_IOSmedia]==RESULTS.GRANTED) return true; + if (statuses[k_IOSLoc]=== RESULTS.DENIED) { + denies.push('Location'); + } else if (statuses[k_IOSLoc] === RESULTS.UNAVAILABLE) { + notavlbl.push('Location'); + } + + if (statuses[k_IOSCamera]=== RESULTS.DENIED) { + denies.push('Camera'); + } else if (statuses[k_IOSCamera] === RESULTS.UNAVAILABLE) { + notavlbl.push('Camera'); + } + + if (statuses[k_IOSStorage]=== RESULTS.DENIED) { + denies.push('Photo Library'); + } else if (statuses[k_IOSStorage] === RESULTS.UNAVAILABLE) { + notavlbl.push('Photo Library'); + } + + if (statuses[k_IOSMic]=== RESULTS.DENIED) { + denies.push('Microphone'); + } else if (statuses[k_IOSMic] === RESULTS.UNAVAILABLE) { + notavlbl.push('Microphone'); + } + + if (statuses[k_IOSmedia]=== RESULTS.DENIED) { + denies.push('Media Library'); + } else if (statuses[k_IOSmedia] === RESULTS.UNAVAILABLE) { + notavlbl.push('Media Library'); + } + } + else{ + if (statuses[k_Loc]==RESULTS.GRANTED && statuses[k_Camera]==RESULTS.GRANTED && statuses[k_Storage]==RESULTS.GRANTED && statuses[k_StorageRead]==RESULTS.GRANTED && statuses[k_Mic]==RESULTS.GRANTED) return true; + if (statuses[k_Loc]=== RESULTS.DENIED) { + denies.push('Location'); + } else if (statuses[k_Loc] === RESULTS.UNAVAILABLE) { + notavlbl.push('Location'); + } + + if (statuses[k_Camera]=== RESULTS.DENIED) { + denies.push('Camera'); + } else if (statuses[k_Camera] === RESULTS.UNAVAILABLE) { + notavlbl.push('Camera'); + } + + if (statuses[k_StorageRead]=== RESULTS.DENIED) { + denies.push('Read External Storage'); + } else if (statuses[k_StorageRead] === RESULTS.UNAVAILABLE) { + notavlbl.push('Read External Storage'); + } + + if (statuses[k_Storage]=== RESULTS.DENIED) { + denies.push('Photo Library'); + } else if (statuses[k_Storage] === RESULTS.UNAVAILABLE) { + notavlbl.push('Photo Library'); + } + + if (statuses[k_Mic]=== RESULTS.DENIED) { + denies.push('Record Audio'); + } else if (statuses[k_Mic] === RESULTS.UNAVAILABLE) { + notavlbl.push('Record Audio'); + } + } + + let msg=''; + if(denies.length>0){ + msg+='User denied '+denies.join(', ')+(denies.length>1?' permissions':' permission'); + } + if(notavlbl.length>0){ + msg+=msg!=''?', ':''; + msg+=notavlbl.join(', ')+(notavlbl.length>1?' permissions':' permission')+' not available'; + } + + if(denies.length>0 || notavlbl.length>0){ + notify(msg); + } + + return true; +} + +export const hasLocationPermission = async () => { + if (Platform.OS === 'android' && Platform.Version < 21) { + return true; + } + else if(Platform.OS === 'ios'){ + let status=await CheckAndAskForPermission(PERMISSIONS.IOS.LOCATION_WHEN_IN_USE); + return status; + } + else if(Platform.OS === 'android'){ + let status=await CheckAndAskForPermission(PermissionsAndroid.PERMISSIONS.ACCESS_FINE_LOCATION); + return status; + } + return true; +} + +export const hasCameraPermission = async () => { + if (Platform.OS === 'android' && Platform.Version < 21) { + return true; + } + else if(Platform.OS === 'ios'){ + let status=await CheckAndAskForPermission(PERMISSIONS.IOS.CAMERA); + return status; + } + else if(Platform.OS === 'android'){ + let status=await CheckAndAskForPermission(PermissionsAndroid.PERMISSIONS.CAMERA); + return status; + } + return true; +} + +export const hasStoragePermission = async () => { + if (Platform.OS === 'android' && Platform.Version < 21) { + return true; + } + else if(Platform.OS === 'ios'){ + let status=await CheckAndAskForPermission(PERMISSIONS.IOS.PHOTO_LIBRARY); + return status; + } + else if(Platform.OS === 'android'){ + let status=await CheckAndAskForPermission(PermissionsAndroid.PERMISSIONS.WRITE_EXTERNAL_STORAGE); + return status; + } + return true; +} + +export const requestMultiplePerms = async () => { + console.log('requestMultiplePerms'); + if (Platform.OS === 'android' && Platform.Version < 21) { + return true; + } + else{ + let OSPer=Platform.OS === 'ios'?PERMISSIONS.IOS:PERMISSIONS.ANDROID; + let IOSPERMS=[OSPer.LOCATION_WHEN_IN_USE,OSPer.CAMERA,OSPer.PHOTO_LIBRARY,OSPer.MICROPHONE,OSPer.MEDIA_LIBRARY]; + let ANDROIDPERMS=[OSPer.ACCESS_FINE_LOCATION,OSPer.CAMERA,OSPer.READ_EXTERNAL_STORAGE,OSPer.WRITE_EXTERNAL_STORAGE,OSPer.RECORD_AUDIO]; + let allperms=Platform.OS === 'ios'?IOSPERMS:ANDROIDPERMS; + let status=await CheckAndAskForMulitplePermissions(allperms); + return status; + } +} + + + +export const _checkLocationPermission = async () => { + if(Platform.OS === 'android' && Platform.Version < 21){ + return true; + } + else if (Platform.OS === 'ios' ){ + let IOS_hasPermission = await Permissions.check(PERMISSIONS.IOS.LOCATION_WHEN_IN_USE); + let IOS_P=IOS_hasPermission==RESULTS.GRANTED?true:false; + return IOS_P; + } + else if (Platform.OS === 'android') { + const hasPermission = await PermissionsAndroid.check( + PermissionsAndroid.PERMISSIONS.ACCESS_FINE_LOCATION + ); + + if (hasPermission) return true; + + const granted = await PermissionsAndroid.request( + PermissionsAndroid.PERMISSIONS.ACCESS_FINE_LOCATION + ); + + return granted === PermissionsAndroid.RESULTS.GRANTED; +} + else{return true;} +} + +export const _checkCameraPermission = async () => { + if(Platform.OS === 'android' && Platform.Version < 21){ + return true; + } + else if (Platform.OS === 'ios' ){ + let IOS_hasPermission = await Permissions.check(PERMISSIONS.IOS.CAMERA); + let IOS_P=IOS_hasPermission==RESULTS.GRANTED?true:false; + return IOS_P; + } + else if(Platform.OS === 'android' ){ + const hasPermission = await PermissionsAndroid.check(PermissionsAndroid.PERMISSIONS.CAMERA); + return hasPermission; + } + else{return true;} +} + +export const _checkStoragePermission = async () => { + if(Platform.OS === 'android' && Platform.Version < 21){ + return true; + } + else if (Platform.OS === 'ios' ){ + let IOS_hasPermission = await Permissions.check(PERMISSIONS.IOS.PHOTO_LIBRARY); + let IOS_P=IOS_hasPermission==RESULTS.GRANTED?true:false; + return IOS_P; + } + else if(Platform.OS === 'android' ){ + const hasPermission = await PermissionsAndroid.check(PermissionsAndroid.PERMISSIONS.WRITE_EXTERNAL_STORAGE); + return hasPermission; + } + else{return true;} +} + +export async function checkPermissions(){ + await hasLocationPermission(); + await hasCameraPermission(); + await hasStoragePermission(); +} \ No newline at end of file diff --git a/PerformicsSrc/src/components/gradientButton.js b/PerformicsSrc/src/components/gradientButton.js new file mode 100644 index 0000000..09c520d --- /dev/null +++ b/PerformicsSrc/src/components/gradientButton.js @@ -0,0 +1,24 @@ +import React from "react"; +import { Text, TouchableOpacity } from "react-native"; +import { customeButtons,GetPageTheme } from "../styles/Global"; +import { useRoute } from '@react-navigation/native'; +import LinearGradient from 'react-native-linear-gradient'; + +const GradientButton = (props) => { + const route = useRoute(); + const PageTheme=GetPageTheme(props.DarkTheme,route.name); + const customeButton=customeButtons(props.DarkMode,route.name); + + return ( + + + {props.title} + + + ); +}; +export default GradientButton; \ No newline at end of file diff --git a/PerformicsSrc/src/components/icons.js b/PerformicsSrc/src/components/icons.js new file mode 100644 index 0000000..40c1b0d --- /dev/null +++ b/PerformicsSrc/src/components/icons.js @@ -0,0 +1,49 @@ +import MaterialCommunityIconsI from 'react-native-vector-icons/MaterialCommunityIcons' +import SimpleLineIconsI from 'react-native-vector-icons/SimpleLineIcons' +import AntDesignI from 'react-native-vector-icons/AntDesign' +import MaterialIconsI from 'react-native-vector-icons/MaterialIcons' +import FontAwesomeI from 'react-native-vector-icons/FontAwesome' +import FontAwesome5I from 'react-native-vector-icons/FontAwesome5'; +import FoundationI from 'react-native-vector-icons/Foundation' +import EvilIconsI from 'react-native-vector-icons/EvilIcons' +import OcticonsI from 'react-native-vector-icons/Octicons' +import IoniconsI from 'react-native-vector-icons/Ionicons' +import FeatherI from 'react-native-vector-icons/Feather' +import EntypoI from 'react-native-vector-icons/Entypo' +import ZocialI from 'react-native-vector-icons/Zocial' +import FontistoI from 'react-native-vector-icons/Fontisto' +import React from 'react' + +export const MaterialCommunityIcons = props => ( + +) + const SimpleLineIcons = props => + const MaterialIcons = props => + const AntDesign = props => + const FontAwesome = props => + const FontAwesome5 = props => + const Foundation = props => + const EvilIcons = props => + const Ionicons = props => + const Octicons = props => + const Feather = props => + const Entypo = props => + const Zocial = props => + const Fontisto = props => + +export { + SimpleLineIcons, + MaterialIcons, + FontAwesome, + FontAwesome5, + Foundation, + AntDesign, + EvilIcons, + Ionicons, + Fontisto, + Octicons, + Feather, + Entypo, + Zocial, + +} \ No newline at end of file diff --git a/PerformicsSrc/src/components/localStorage.js b/PerformicsSrc/src/components/localStorage.js new file mode 100644 index 0000000..4a1dbeb --- /dev/null +++ b/PerformicsSrc/src/components/localStorage.js @@ -0,0 +1,53 @@ +import React from "react"; +// import AsyncStorage from '@react-native-async-storage/async-storage'; +import * as Keychain from 'react-native-keychain'; + + +export const set_item = async (key, data) => { + if (key && data) { + try { + await Keychain.setInternetCredentials(key, key, data); + } catch (err) { + console.log('Cannot save:', key, err); + } + } +}; + + +export const get_item = async (key) => { + try { + const creds = await Keychain.getInternetCredentials(key); + return creds ? creds.password : null; + } catch (err) { + console.log('Cannot get:', key, err); + return null; + } +}; + + +// export const clear_item = async (key) => { +// try { +// await Keychain.resetInternetCredentials(key); +// console.log('Credentials reset for:', key); +// } catch (err) { +// console.log('Cannot reset:', key, err); +// } +// }; + +export const clear_item = async (key) => { + try { + await Keychain.resetInternetCredentials({ + server: key, // 👈 yaha object dena zaroori hai + }); + console.log('Credentials reset for:', key); + } catch (err) { + console.log('Cannot reset:', key, err); + } +}; + + +export const clear_all=async()=>{ + // Retrieve the credentials + const allkeys=await Keychain.getAllGenericPasswordServices(); + console.log(allkeys); +} \ No newline at end of file diff --git a/PerformicsSrc/src/components/logout.js b/PerformicsSrc/src/components/logout.js new file mode 100644 index 0000000..018da91 --- /dev/null +++ b/PerformicsSrc/src/components/logout.js @@ -0,0 +1,13 @@ +import React from "react"; +import {get_item,set_item,clear_item} from '../components/localStorage'; +import { mapStateToProps,mapDispatchToProps } from '../reducers/contextProvider'; +import { connect} from 'react-redux'; +import {BackHandler} from 'react-native'; +import RNExitApp from 'react-native-exit-app'; + +export async function logout(props){ + + const pdata={islogin:false,SecurityToken:''}; + RNExitApp.exitApp(); + +} \ No newline at end of file diff --git a/PerformicsSrc/src/components/notify.js b/PerformicsSrc/src/components/notify.js new file mode 100644 index 0000000..29d76d1 --- /dev/null +++ b/PerformicsSrc/src/components/notify.js @@ -0,0 +1,16 @@ +import React from 'react'; +import {Platform,ToastAndroid,Text} from 'react-native'; +// import {Snackbar} from 'react-native-paper'; +import Snackbar from 'react-native-snackbar'; + +export const notify = (message='',type='SHORT') => { + if (Platform.OS != 'android') { + Snackbar.show({ + text:message, + duration: Snackbar.LENGTH_SHORT,//(type=='SHORT'?Snackbar.LENGTH_SHORT:Snackbar.LENGTH_LONG), + }); + } else { + const toast_time=ToastAndroid.SHORT;//type=='SHORT'?ToastAndroid.SHORT:ToastAndroid.LONG; + ToastAndroid.show(message, toast_time); + } +} \ No newline at end of file diff --git a/PerformicsSrc/src/constants/ConstantQueries.js b/PerformicsSrc/src/constants/ConstantQueries.js new file mode 100644 index 0000000..94a8de8 --- /dev/null +++ b/PerformicsSrc/src/constants/ConstantQueries.js @@ -0,0 +1,2575 @@ +import moment from 'moment'; +import React from 'react'; +import { getKPIFields } from '../controller/functions'; +import { db } from './constants'; +import { AppTables } from './tableConstants'; + + +export function Q_GetAvailabityDefaultData(storeData, isCompetitorClause) { + console.log('Q_GetAvailabityDefaultData', isCompetitorClause) + let { StoreId, ChainId, StoreTypeId, StateId, StoreClassId, StoreCategoryId } = storeData; + let join = ` INNER JOIN Product_Master p on c.CategoryId=p.CategoryId `; + let join2 = ` INNER JOIN Mapping_ProductAssortmentStorewise mp on p.ProductId=mp.ProductId`; + // let q=` SELECT DISTINCT c.CategoryId,c.CategoryName,'' as MSL from Master_Category c ${join} ${join2} Where mp.StoreId ='${StoreId}' and p.IsCompetitor='0' order by p.CategorySequence`; + let q = ` SELECT DISTINCT c.CategoryId,c.CategoryName,'' as MSL from Master_Category c ${join} ${join2} Where mp.StoreId ='${StoreId}' and ${isCompetitorClause} order by p.CategorySequence`; + return q; +} + +export function Q_GetAvailablePrds(ScreenName, storeData, AllKPIFields, cols, condition, TBName) { + let { StoreId, ChainId, StoreTypeId, StateId, StoreClassId, StoreCategoryId } = storeData; + + let COMPStockAllow_Index = AllKPIFields.findIndex(i => i.KPIFieldName == 'COMPStockAllow' && i.ScreenName == ScreenName); + let COMPStockAllow_Obj = COMPStockAllow_Index >= 0 ? AllKPIFields[COMPStockAllow_Index] : {}; + let isCOMPStockAllow = COMPStockAllow_Index >= 0 ? COMPStockAllow_Obj['KPIFieldEnable'] : false; + + let d1 = new Date(); + let d2 = moment(d1).format('MM/DD/YYYY'); + let where = ` Where 1=1 ${(isCOMPStockAllow == true ? '' : ` and p.IsCompetitor='0' `)} ${condition} `; + let stock_join = ` LEFT OUTER JOIN ${TBName} as s on p.ProductId=s.PRODUCT_ID and s.STORE_ID='${StoreId}' and s.VISIT_DATE='${d2}' `; + let join2 = ` inner join Master_Category mc on mc.CategoryId=p.CategoryId `; + let join = ` INNER JOIN Mapping_ProductAssortmentStorewise mp on p.ProductId=mp.ProductId and mp.StoreId='${StoreId}'`; + let q = ` SELECT DISTINCT p.ProductId,p.ProductName ${cols} from Product_Master p ${join} ${join2} ${stock_join} ${where} order by p.ProductSequence`; + + return q; +} + + +export function Q_getdefaltShareofSelf(storeData) { + let { StoreId, ChainId, StoreTypeId, StateId } = storeData; + let join = ` INNER JOIN Master_Category mc on mc.CategoryId = p.CategoryId `; + let join2 = ` INNER JOIN Mapping_ShareOfShelf m on p.SubCategoryId=m.SubCategoryId `; + let q = `SELECT DISTINCT p.CategoryId,p.CategoryName from Product_Master p ${join} ${join2} Where m.StateId ='${StateId}' and m.ChainId ='${ChainId}' and m.StoreTypeId ='${StoreTypeId}' order by p.CategorySequence`; + return q; +} + +export function Q_getpaidvisibility(storeData) { + let { StoreId, ChainId, StoreTypeId } = storeData; + let join = ` INNER JOIN Mapping_Visibility v on p.SubCategoryId=v.SubCategoryId `; + let join2 = ` INNER join Master_Display md on md.DisplayId=v.DisplayId `; + let q = `SELECT DISTINCT p.SubCategoryName,p.SubCategoryId from Product_Master p ${join} ${join2} Where v.StoreId='${StoreId}' and md.Paid='1' `; + + return q; +} + +export function Q_getpromotionmappingList(storeData) { + let { StoreId, ChainId, StoreTypeId, StateId } = storeData; + let join = ` INNER JOIN Mapping_Promotion m on p.SubCategoryId=m.SubCategoryId`; + let q = `SELECT DISTINCT p.SubCategoryId,p.SubCategoryName from Product_Master p ${join} where m.StateId='${StateId}' and m.ChainId='${ChainId}' and m.StoreTypeId='${StoreTypeId}' `; + return q; +} + +export function Q_getSamplingData(storeData) { + let { StoreId, ChainId, StoreTypeId, StateId } = storeData; + let join = ` INNER JOIN Mapping_Sample m on s.SampleId=m.SampleId`; + let q = `SELECT DISTINCT s.Sample,s.SampleId from Master_Sample s ${join} where m.ChainId='${ChainId}' and m.StateId='${StateId}' and m.StoreTypeId='${StoreTypeId}' `; + return q; +} + +export function Q_getSurveys(storeData) { + let { StoreId, ChainId, StoreTypeId, StateId } = storeData; + let join = ` INNER JOIN Mapping_Survey M on T.SurveyId=M.SurveyId`; + let q = `Select Distinct T.SurveyName ,T.SurveyId ,T.ShowCat from Master_SurveyQuestion T ${join} where M.StoreId='${StoreId}'`; + return q; +} + +export function Q_MenuList(storeData1, screen = '') { + let { StoreId, ChannelId, RegionId, StoreTypeId, StoreCategoryId } = storeData1; + + let join = ` INNER join Mapping_Menu t2 on t1.MenuId=t2.MenuId`; + let q = `SELECT DISTINCT t1.MenuId,t1.MenuName,t1.NormalIcon,t1.TickIcon,t1.GreyIcon,t1.MenuPath,t1.ScreenName,t1.UploadKeyName,t1.InnerScreenConfig from Menu_Master t1 ${join} where t2.ChannelId='${ChannelId}' and t2.RegionId='${RegionId}' and t2.StoreTypeId='${StoreTypeId}' and t2.StoreCategoryId='${StoreCategoryId}'`; + q += screen != '' ? ` and t1.ScreenName='${screen}' ` : ''; + q += ' Order by t1.MenuSequence '; + + + return q; + // and t2.StoreCategoryId='${StoreCategoryId}' +} + +export function Q_ALLScreenName() { + let q = `SELECT DISTINCT t1.MenuId,t1.MenuName,t1.ScreenName from Menu_Master t1 Order by t1.MenuSequence `; + return q; +} + +export function Q_DBMenuList(storeData1, screen = '') { + let { StoreId, ChannelId, RegionId, StoreTypeId } = storeData1; + + let join = ` INNER join Mapping_MenuDistributorPoint t2 on t1.MenuId=t2.MenuId`; + let q = `SELECT DISTINCT t1.MenuId,t1.MenuName,t1.NormalIcon,t1.TickIcon,t1.GreyIcon,t1.MenuPath,t1.ScreenName from Menu_Master t1 ${join}`; + q += screen != '' ? ` where t1.ScreenName='${screen}' ` : ''; + q += ' Order by t1.MenuSequence '; + return q; +} + +export async function Q_getMyStoresList(isAdhoc = false, isBeat = false, isNonMerchan = false, isNonProgam = false, isStoreSearch = false) { + let q = '', tb4 = 'JourneyPlan_RouteWise', tb1 = 'Mapping_JourneyPlan', tb2 = AppTables.CHECKIN_DATA, tb3 = 'Adhoc_JourneyPlan', tb5 = "NonMerchandising_JourneyPlan", tb6 = "NonProgram_JourneyPlan", tb7 = "StoreSearch_JourneyPlan"; + let join_tbl = isStoreSearch == true ? tb7 : (isBeat == true ? tb4 : (isAdhoc == true ? tb3 : (isNonMerchan == true ? tb5 : (isNonProgam == true ? tb6 : tb1)))); + let superQ_tblName = 'StoreCats'; + // let superQ2_tblName='StoreData'; + let d1 = new Date(); + let d2 = moment(d1).format('MM/DD/YYYY'); + + + let menusQ = ` (select Distinct JP.*,MMAS.MenuId from ${join_tbl} JP + inner join Mapping_Menu MM on JP.ChannelId=MM.ChannelId and JP.StoreTypeId=MM.StoreTypeId and JP.RegionId=MM.RegionId + inner join Menu_Master MMAS on MM.MenuId=MMAS.MenuId + where JP.VisitDate='${d2}' + Order by JP.StoreId, MMAS.MenuId) as Menu `; + + + let config_join = `Left Outer Join (Select Distinct ScreenName,KPIFieldName,KPIFieldEnable,KPIFieldDisplayName from Mapping_MenuConfiguration Where KPIFieldName='PartialSaveAllow') c on c.ScreenName=MM.ScreenName `; + + let menuQ2 = `(select Distinct JP.*,MM.MenuId,c.KPIFieldEnable as PSAllow from ${join_tbl} JP + Left outer join + (select * from Mapping_Menu MN inner join Menu_Master MMAS on MN.MenuId=MMAS.MenuId) MM on JP.ChannelId=MM.ChannelId and JP.StoreTypeId=MM.StoreTypeId and JP.RegionId=MM.RegionId and JP.StoreCategoryId=MM.StoreCategoryId + ${config_join} + where JP.VisitDate='${d2}' + Order by JP.StoreId, MM.MenuId) as Menu `; + + + // and JP.StoreCategoryId=MM.StoreCategoryId + // inner join Product_Master PM on MPA.ProductId=PM.ProductId + // let stored_Select=`${superQ_tblName}.StoreId as StoreId,${superQ_tblName}.StoreCode as StoreCode,${superQ_tblName}.MID as MID,${superQ_tblName}.ChannelId as ChannelId,${superQ_tblName}.StoreId as StoreId,${superQ_tblName}.EmpId as EmpId,${superQ_tblName}.VisitDate as VisitDate,${superQ_tblName}.ChainId as ChainId,${superQ_tblName}.ChainName as ChainName,${superQ_tblName}.StoreName as StoreName,${superQ_tblName}.Address as Address,${superQ_tblName}.Location as Location,${superQ_tblName}.Landmark as Landmark,${superQ_tblName}.CityId as CityId,${superQ_tblName}.CityName as CityName,${superQ_tblName}.StateId as StateId,${superQ_tblName}.StateName as StateName,${superQ_tblName}.RegionId as RegionId,${superQ_tblName}.StoreTypeId as StoreTypeId,${superQ_tblName}.StoreType as StoreType,${superQ_tblName}.Pincode as Pincode,${superQ_tblName}.Latitude as Latitude,${superQ_tblName}.Longitude as Longitude,${superQ_tblName}.Phone as Phone,${superQ_tblName}.Mobile as Mobile,${superQ_tblName}.ContactPerson as ContactPerson,${superQ_tblName}.Email as Email,${superQ_tblName}.UploadStatus as UploadStatus,${superQ_tblName}.GeoTag as GeoTag,${superQ_tblName}.GeoFenceRadius as GeoFenceRadius,${superQ_tblName}.ExpiryStock as ExpiryStock,${superQ_tblName}.InTime as InTime,${superQ_tblName}.OutTime as OutTime,${superQ_tblName}.CameraAllow as CameraAllow,${superQ_tblName}.AddVisiAllow as AddVisiAllow`; + let stored_Select = `MDist.DistributorId,MDist.DistributorName,${superQ_tblName}.StoreId,${superQ_tblName}.StoreCode,${superQ_tblName}.MID,${superQ_tblName}.ChannelId,${superQ_tblName}.StoreId,${superQ_tblName}.EmpId,${superQ_tblName}.VisitDate,${superQ_tblName}.ChainId,${superQ_tblName}.ChainName,${superQ_tblName}.StoreName,${superQ_tblName}.Address,${superQ_tblName}.Location,${superQ_tblName}.Landmark,${superQ_tblName}.CityId,${superQ_tblName}.CityName,${superQ_tblName}.StateId,${superQ_tblName}.StateName,${superQ_tblName}.RegionId,${superQ_tblName}.StoreTypeId,${superQ_tblName}.StoreType,${superQ_tblName}.Pincode,${superQ_tblName}.Latitude,${superQ_tblName}.Longitude,${superQ_tblName}.Phone,${superQ_tblName}.Mobile,${superQ_tblName}.ContactPerson,${superQ_tblName}.Email,${superQ_tblName}.UploadStatus,${superQ_tblName}.GeoTag,${superQ_tblName}.GeoFenceRadius,${superQ_tblName}.ExpiryStock,${superQ_tblName}.InTime,${superQ_tblName}.OutTime,${superQ_tblName}.CameraAllow,${superQ_tblName}.AddVisiAllow,${superQ_tblName}.LastVisitDate,${superQ_tblName}.Score,${superQ_tblName}.MinTimeTaken,${superQ_tblName}.MTDMerchandised,${superQ_tblName}.StoreCategoryId,${superQ_tblName}.StoreCategory,${superQ_tblName}.StoreClassId,${superQ_tblName}.StoreClass,${superQ_tblName}.TaxType,${superQ_tblName}.GSTno,${superQ_tblName}.GSTImage,${superQ_tblName}.Deviation,${superQ_tblName}.StoreBgColor`; + let checkinSelect = `CheckInData.CHECKIN_TIME as CheckInTime,CheckInData.CHECKOUT_TIME as CheckOutTime,CheckInData.JCP_TYPE`; + let Distributor_join = ` Left Outer Join Master_Distributor MDist on ${superQ_tblName}.DistributorId=MDist.DistributorId `; + + let AllKPIFields = await getKPIFields({}, true); + let DataAvailable_QList = ``, KPIAvailable_QList = ``; + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + let mq = `SELECT DISTINCT t1.ScreenName,t1.MenuId from Menu_Master t1 INNER join Mapping_Menu t2 on t1.MenuId=t2.MenuId `; + + await txn.executeSql(mq, [], async function (txn2, txnres) { + if (txnres.rows.length > 0) { + for (let i = 0; i < txnres.rows.length; i++) { + let data = txnres.rows.item(i); + let avlblQ = getAvailblQuery(data, isAdhoc, isBeat, isNonMerchan, isNonProgam, isStoreSearch, AllKPIFields); + let isDoneQ = getQuery(data, isAdhoc, isBeat, isNonMerchan, isNonProgam, isStoreSearch); + console.log("testingIsDone", isDoneQ, data) + + KPIAvailable_QList += KPIAvailable_QList != '' && avlblQ != '' ? ' UNION ' : ' '; + DataAvailable_QList += DataAvailable_QList != '' && isDoneQ != '' ? ' UNION ' : ' '; + KPIAvailable_QList += ' ' + avlblQ + ' '; + DataAvailable_QList += ' ' + isDoneQ + ' '; + + if (i == txnres.rows.length - 1) { + + let KPIAvlblJoin = `LEFT Outer Join ( ${KPIAvailable_QList} ) as AVLSTK ON Menu.StoreId=AVLSTK.StoreId and Menu.MenuId=AVLSTK.MenuId `; + let DataAvailableJoin = ` Left Outer Join ( ${DataAvailable_QList} ) dataavl ON Menu.StoreId=dataavl.StoreId and Menu.MenuId=dataavl.MenuId `; + let StoreData_join = ` Left Outer Join ( Select ${tb2}.* From ${tb2} Where ${tb2}.JCP_TYPE='${join_tbl}' and ${tb2}.VISIT_DATE='${d2}') as CheckInData on ${superQ_tblName}.StoreId=CheckInData.STORE_ID `;//and ${superQ_tblName}.UploadStatus in ('I','C','D','U','L') + + q = `Select Menu.*, IFNULL(KPIAVBL, 0) as KPIAVBL, CASE WHEN IFNULL(dataavl.DataRowCount, 0)>0 THEN 1 ELSE 0 END as DataRowCount, + dataavl.DataRowCount as DataDoneCount, + AVLSTK.DataRowAvlblCount, + Menu.PSAllow, + CASE WHEN (KPIAVBL = 1 AND Menu.PSAllow IS NOT NULL AND (Menu.PSAllow = 'true' OR Menu.PSAllow = 1) AND dataavl.DataRowCount >= AVLSTK.DataRowAvlblCount) + THEN 1 WHEN (KPIAVBL = 1 AND (Menu.PSAllow IS NULL OR (Menu.PSAllow <> 'true' AND Menu.PSAllow <> 1)) + AND dataavl.DataRowCount > 0) THEN 1 ELSE 0 END AS IsKPIDone + from ${menuQ2} ${KPIAvlblJoin} ${DataAvailableJoin} `; + console.log("localquery", q) + // ######## Old PS_MenuDoneCount done logic end ######## + let superQ = `select ${checkinSelect},${stored_Select},count((CASE WHEN (${superQ_tblName}.KPIAVBL==1) THEN 1 ELSE null END)) as MenuCount, + count(StoreCats.KPIAVBL) as MenuCountWithNonAvlbl, + count((CASE WHEN (${superQ_tblName}.KPIAVBL==1 and ${superQ_tblName}.DataRowCount>0) THEN 1 ELSE null END )) as MenuDoneCount, + count (CASE WHEN StoreCats.IsKPIDone==1 THEN 1 ELSE NULL END) as PS_MenuDoneCount + + from (${q}) as ${superQ_tblName} ${StoreData_join} ${Distributor_join} GROUP BY ${superQ_tblName}.StoreId`; + resolve( + superQ + + " ORDER BY CASE StoreCats.UploadStatus " + + "WHEN 'I' THEN 1 " + + "WHEN 'P' THEN 2 " + + "WHEN 'D' THEN 3 " + + "WHEN 'U' THEN 4 " + + "WHEN 'L' THEN 5 " + + "WHEN 'N' THEN 6 " + + "WHEN '' THEN 7 " + + "ELSE 8 END" + ); + } + } + } + else { + let StoreData_join = ` Left Outer Join ( Select ${tb2}.* From ${tb2} Where ${tb2}.JCP_TYPE='${join_tbl}' and ${tb2}.VISIT_DATE='${d2}') as CheckInData on ${superQ_tblName}.StoreId=CheckInData.STORE_ID `; + q = `Select Menu.*, 0 as KPIAVBL, 0 as DataRowCount from ${menuQ2} `; + let superQ = `select ${checkinSelect},${stored_Select},0 as MenuCount,0 as MenuCountWithNonAvlbl,0 as MenuDoneCount from (${q}) as ${superQ_tblName} ${StoreData_join} ${Distributor_join} GROUP BY ${superQ_tblName}.StoreId`; + resolve( + superQ + + " ORDER BY CASE StoreCats.UploadStatus " + + "WHEN 'I' THEN 1 " + + "WHEN 'P' THEN 2 " + + "WHEN 'D' THEN 3 " + + "WHEN 'U' THEN 4 " + + "WHEN 'L' THEN 5 " + + "WHEN 'N' THEN 6 " + + "WHEN '' THEN 7 " + + "ELSE 8 END" + ); + } + }, function (txnE, txnerr) { console.log('txnerr in store q:', txnerr); resolve(''); },); + + }); + }).catch((err) => { + console.log('error in query:', err); + return ''; + }) + +} + +export async function Q_getMyDistributorList(props) { + let q = '', tb2 = AppTables.DISTRIBUTOR_CHECKIN; + let join_tbl = 'Master_Distributor'; + let superQ_tblName = 'StoreCats'; + let d1 = new Date(); + let d2 = moment(d1).format('MM/DD/YYYY'); + + // Mapping_MenuDistributorPoint + let menusQ = ` (select Distinct JP.*,MM.MenuId from ${join_tbl} JP + cross join (select MMAS.* from Menu_Master MMAS Inner Join Mapping_MenuDistributorPoint MMap on MenuId on MMap.MenuId=MMAS.MenuId) as MM + Order by JP.DistributorId, MM.MenuId) as Menu `; + + + let menuQ2 = `(select Distinct JP.*,MM.MenuId from ${join_tbl} JP + Left outer join + (select Distinct JP.DistributorId,MM_Inner.* from ${join_tbl} JP cross join (select MMAS.* from Menu_Master MMAS Inner Join Mapping_MenuDistributorPoint MMap on MMap.MenuId=MMAS.MenuId) as MM_Inner) + MM on JP.DistributorId=MM.DistributorId + Order by JP.DistributorId, MM.MenuId) as Menu `; + + let stored_Select = `${superQ_tblName}.DMID as MID,${superQ_tblName}.EmpId,${superQ_tblName}.DistributorId as StoreId,${superQ_tblName}.DistributorName as StoreName,${superQ_tblName}.DistributorCode as StoreCode,${superQ_tblName}.Latitude,${superQ_tblName}.Longitude,${superQ_tblName}.InTime,${superQ_tblName}.OutTime,${superQ_tblName}.UploadStatus,${superQ_tblName}.GeoTag`; + let checkinSelect = `CheckInData.CHECKIN_TIME as CheckInTime,CheckInData.CHECKOUT_TIME as CheckOutTime`; + + let DataAvailable_QList = ``, KPIAvailable_QList = ``; + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + let mq = `SELECT DISTINCT t1.ScreenName,t1.MenuId from Menu_Master t1 INNER join Mapping_MenuDistributorPoint t2 on t1.MenuId=t2.MenuId`; + + await txn.executeSql(mq, [], async function (txn2, txnres) { + if (txnres.rows.length > 0) { + for (let i = 0; i < txnres.rows.length; i++) { + let data = txnres.rows.item(i); + let avlblQ = get_DBAvailblQuery(props, data, join_tbl); + let isDoneQ = get_DBQuery(data, join_tbl); + + KPIAvailable_QList += KPIAvailable_QList != '' && avlblQ != '' ? ' UNION ' : ' '; + DataAvailable_QList += DataAvailable_QList != '' && isDoneQ != '' ? ' UNION ' : ' '; + KPIAvailable_QList += ' ' + avlblQ + ' '; + DataAvailable_QList += ' ' + isDoneQ + ' '; + + if (i == txnres.rows.length - 1) { + + let KPIAvlblJoin = `LEFT Outer Join ( ${KPIAvailable_QList} ) as AVLSTK ON Menu.DistributorId=AVLSTK.DistributorId and Menu.MenuId=AVLSTK.MenuId `; + let DataAvailableJoin = ` Left Outer Join ( ${DataAvailable_QList} ) dataavl ON Menu.DistributorId=dataavl.DistributorId and Menu.MenuId=dataavl.MenuId `; + + let StoreData_join = ` Left Outer Join ( Select ${tb2}.* From ${tb2} Where ${tb2}.VISIT_DATE='${d2}') as CheckInData on ${superQ_tblName}.DistributorId=CheckInData.DISTRIBUTOR_ID `;//and ${superQ_tblName}.UploadStatus in ('I','C','D','U','L') + // var SD_orderby=` group by ${join_tbl}.StoreId,${join_tbl}.VisitDate order by ${join_tbl}.StoreName,${tb2}.KEY_ID desc`; + + + q = `Select Menu.*, IFNULL(KPIAVBL, 0) as KPIAVBL, CASE WHEN IFNULL(dataavl.DataRowCount, 0)>0 THEN 1 ELSE 0 END as DataRowCount from ${menuQ2} ${KPIAvlblJoin} ${DataAvailableJoin} `; + let superQ = `select ${checkinSelect},${stored_Select},count((CASE WHEN (${superQ_tblName}.KPIAVBL==1) THEN 1 ELSE null END)) as MenuCount,count((CASE WHEN (${superQ_tblName}.KPIAVBL==1 and ${superQ_tblName}.DataRowCount==1) THEN 1 ELSE null END )) as MenuDoneCount from (${q}) as ${superQ_tblName} ${StoreData_join} GROUP BY ${superQ_tblName}.DistributorId`; + resolve( + superQ + + " ORDER BY CASE StoreCats.UploadStatus " + + "WHEN 'I' THEN 1 " + + "WHEN 'P' THEN 2 " + + "WHEN 'D' THEN 3 " + + "WHEN 'U' THEN 4 " + + "WHEN 'L' THEN 5 " + + "WHEN 'N' THEN 6 " + + "WHEN '' THEN 7 " + + "ELSE 8 END" + ); + } + + } + } + else { + + let StoreData_join = ` Left Outer Join ( Select ${tb2}.* From ${tb2} Where ${tb2}.VISIT_DATE='${d2}') as CheckInData on ${superQ_tblName}.DistributorId=CheckInData.DISTRIBUTOR_ID `;//and ${superQ_tblName}.UploadStatus in ('I','C','D','U','L') + q = `Select Menu.*, 0 as KPIAVBL, 0 as DataRowCount from ${menuQ2} `; + let superQ = `select ${checkinSelect},${stored_Select},0 as MenuCount,0 as MenuDoneCount from (${q}) as ${superQ_tblName} ${StoreData_join} GROUP BY ${superQ_tblName}.DistributorId`; + resolve( + superQ + + " ORDER BY CASE StoreCats.UploadStatus " + + "WHEN 'I' THEN 1 " + + "WHEN 'P' THEN 2 " + + "WHEN 'D' THEN 3 " + + "WHEN 'U' THEN 4 " + + "WHEN 'L' THEN 5 " + + "WHEN 'N' THEN 6 " + + "WHEN '' THEN 7 " + + "ELSE 8 END" + ); + } + }, function (txnE, txnerr) { console.log('txnerr in store q:', txnerr); resolve(''); },); + + }); + }).catch((err) => { + console.log('error in query:', err); + return ''; + }) + +} + +export async function Q_getMyStoresMenuList(isAdhoc = false, storeData, cat, isBeat = false, isNonMerchan = false, isNonProgam = false, isStoreSearch = false, props) { + // console.log('Q_getMyStoresCatList:',storeData) + let q = '', tb4 = 'JourneyPlan_RouteWise', tb1 = 'Mapping_JourneyPlan', tb2 = AppTables.CHECKIN_DATA, tb3 = 'Adhoc_JourneyPlan', tb5 = "NonMerchandising_JourneyPlan", tb6 = 'NonProgram_JourneyPlan', tb7 = 'StoreSearch_JourneyPlan'; + //let join_tbl=isBeat==true?tb4:(isAdhoc==true?tb3:(isNonMerchan==true?tb5:isNonProgam==true?tb6:tb1)); + let join_tbl = isStoreSearch == true ? tb7 : (isBeat == true ? tb4 : (isAdhoc == true ? tb3 : (isNonMerchan == true ? tb5 : (isNonProgam == true ? tb6 : tb1)))); + let superQ_tblName = 'StoreCats'; + // let superQ2_tblName='StoreData'; + let d1 = new Date(); + let d2 = moment(d1).format('MM/DD/YYYY'); + + let menusQ = ` (select Distinct JP.StoreId,MMAS.MenuId,MMAS.MenuName,MMAS.NormalIcon,MMAS.TickIcon,MMAS.GreyIcon,MMAS.MenuPath,MMAS.ScreenName,MMAS.MenuSequence,MMAS.InnerScreenConfig,c.KPIFieldEnable as PSAllow,c.KPIFieldDisplayName as PSTableName from ${join_tbl} JP + inner join Mapping_Menu MM on JP.ChannelId=MM.ChannelId and JP.StoreTypeId=MM.StoreTypeId and JP.RegionId=MM.RegionId and JP.StoreCategoryId=MM.StoreCategoryId + inner join Menu_Master MMAS on MM.MenuId=MMAS.MenuId + Left Outer Join (Select Distinct ScreenName,KPIFieldName,KPIFieldEnable,KPIFieldDisplayName from Mapping_MenuConfiguration Where KPIFieldName='PartialSaveAllow' and (KPIFieldEnable='true' or KPIFieldEnable=1 or KPIFieldEnable='1') ) c on c.ScreenName=MMAS.ScreenName + where JP.VisitDate='${d2}' + Order by JP.StoreId, MMAS.MenuId) as Menu `; + console.log("menuQ-->", menusQ) + + let DataAvailable_QList = ``, KPIAvailable_QList = ``; + let AllKPIFields = await getKPIFields({}, true); + return await new Promise((resolve, reject) => { + db.transaction(async function (txn) { + let config_join = `Left Outer Join (Select Distinct ScreenName,KPIFieldName,KPIFieldEnable,KPIFieldDisplayName from Mapping_MenuConfiguration Where KPIFieldName='PartialSaveAllow') c on c.ScreenName=t1.ScreenName `; + let mq = `SELECT DISTINCT t1.ScreenName,t1.MenuId,t1.MenuName,c.KPIFieldEnable as PSAllow,c.KPIFieldDisplayName as PSTableName from Menu_Master t1 INNER join Mapping_Menu t2 on t1.MenuId=t2.MenuId ${config_join}`; + await txn.executeSql(mq, [], async function (txn2, txnres) { + // console.log("menuslist check-----",txnres.rows.length) + if (txnres.rows.length > 0) { + for (let i = 0; i < txnres.rows.length; i++) { + let data = txnres.rows.item(i); + + // console.log('data in menu query: KPIFieldEnable:',data.ScreenName,data.KPIFieldEnable,data.KPIFieldDisplayName) + let avlblQ = getAvailblQuery(data, isAdhoc, isBeat, isNonMerchan, isNonProgam, isStoreSearch, AllKPIFields); + let isDoneQ = getQuery(data, isAdhoc, isBeat, isNonMerchan, isNonProgam, isStoreSearch); + + KPIAvailable_QList += KPIAvailable_QList != '' && avlblQ != '' ? ' UNION ' : ' '; + DataAvailable_QList += DataAvailable_QList != '' && isDoneQ != '' ? ' UNION ' : ' '; + KPIAvailable_QList += ' ' + avlblQ + ' '; + DataAvailable_QList += ' ' + isDoneQ + ' '; + + + if (i == txnres.rows.length - 1) { + console.log("rows.length", i, txnres.rows.length) + let KPIAvlblJoin = `LEFT Outer Join ( ${KPIAvailable_QList} ) as AVLSTK ON Menu.StoreId=AVLSTK.StoreId and Menu.MenuId=AVLSTK.MenuId`; + let DataAvailableJoin = ` Left Outer Join ( ${DataAvailable_QList} ) dataavl ON Menu.StoreId=dataavl.StoreId and Menu.MenuId=dataavl.MenuId `; + q = `Select Menu.*, IFNULL(KPIAVBL, 0) as KPIAVBL, CASE WHEN IFNULL(dataavl.DataRowCount, 0)>0 THEN 1 ELSE 0 END as DataRowCount,dataavl.DataRowCount as DataDoneCount,AVLSTK.DataRowAvlblCount from ${menusQ} ${KPIAvlblJoin} ${DataAvailableJoin} Where Menu.StoreId='${storeData.StoreId}' order by Menu.MenuSequence `; + resolve(q); + } + + } + } + else { + resolve(''); + } + }, function (txnE, txnerr) { console.log(txnerr); resolve(''); },); + + }); + }).then((val) => { + // console.log('myval',val); + return val; + }).catch((err) => { + console.log('error in query:', err); + return ''; + }) + + +} + +export async function Q_getMyDBMenuList(storeData, props) { + console.log('Q_getMyDBMenuList:', storeData) + let q = '', tb2 = AppTables.CHECKIN_DATA; + let join_tbl = 'Master_Distributor'; + let superQ_tblName = 'StoreCats'; + // let superQ2_tblName='StoreData'; + let d1 = new Date(); + let d2 = moment(d1).format('MM/DD/YYYY'); + + let menusQ = `(select Distinct JP.DistributorId,MM_Inner.MenuId,MM_Inner.MenuName,MM_Inner.NormalIcon,MM_Inner.TickIcon,MM_Inner.GreyIcon,MM_Inner.MenuPath,MM_Inner.ScreenName,MM_Inner.MenuSequence from ${join_tbl} JP + cross join + (select MMAS.* from Menu_Master MMAS Inner Join Mapping_MenuDistributorPoint MMap on MMap.MenuId=MMAS.MenuId) as MM_Inner + Order by JP.DistributorId, MM_Inner.MenuId) as Menu `; + + + let DataAvailable_QList = ``, KPIAvailable_QList = ``; + return await new Promise((resolve, reject) => { + db.transaction(async function (txn) { + let mq = `SELECT DISTINCT t1.ScreenName,t1.MenuId from Menu_Master t1 INNER join Mapping_MenuDistributorPoint t2 on t1.MenuId=t2.MenuId`; + + await txn.executeSql(mq, [], async function (txn2, txnres) { + + if (txnres.rows.length > 0) { + for (let i = 0; i < txnres.rows.length; i++) { + let data = txnres.rows.item(i); + + let avlblQ = get_DBAvailblQuery(props, data, join_tbl); + let isDoneQ = get_DBQuery(data, join_tbl); + + KPIAvailable_QList += KPIAvailable_QList != '' && avlblQ != '' ? ' UNION ' : ' '; + DataAvailable_QList += DataAvailable_QList != '' && isDoneQ != '' ? ' UNION ' : ' '; + KPIAvailable_QList += ' ' + avlblQ + ' '; + DataAvailable_QList += ' ' + isDoneQ + ' '; + + + if (i == txnres.rows.length - 1) { + let KPIAvlblJoin = `LEFT Outer Join ( ${KPIAvailable_QList} ) as AVLSTK ON Menu.DistributorId=AVLSTK.DistributorId and Menu.MenuId=AVLSTK.MenuId`; + let DataAvailableJoin = ` Left Outer Join ( ${DataAvailable_QList} ) dataavl ON Menu.DistributorId=dataavl.DistributorId and Menu.MenuId=dataavl.MenuId `; + q = `Select Menu.*, IFNULL(KPIAVBL, 0) as KPIAVBL, CASE WHEN IFNULL(dataavl.DataRowCount, 0)>0 THEN 1 ELSE 0 END as DataRowCount from ${menusQ} ${KPIAvlblJoin} ${DataAvailableJoin} Where Menu.DistributorId='${storeData.StoreId}' order by Menu.MenuSequence `; + resolve(q); + } + + } + } + else { + resolve(''); + } + }, function (txnE, txnerr) { console.log(txnerr); resolve(''); },); + + }); + }).then((val) => { + // console.log('myval',val); + return val; + }).catch((err) => { + console.log('error in query:', err); + return ''; + }) + + +} + + +export async function checkFilledSurveys(ScreenName, txnres2, storeData) { + const d1 = new Date(); + const d2 = moment(d1).format('MM/DD/YYYY'); + let { StoreId } = storeData; + let isSurveyDone = true; + + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + if (txnres2.rows.length > 0) { + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + let c_index = i; + let { SurveyId, ShowCat } = data; + let isshowcat = (ShowCat == 1 || ShowCat == 'true' || ShowCat == true); + let isDone = await checkIf_surveyDone(storeData, SurveyId, isshowcat); + if (!isDone) { + isSurveyDone = false; + resolve(isSurveyDone); + break; + } + else if (i == txnres2.rows.length - 1) { + resolve(isSurveyDone) + } + } + } + else { + resolve(true); + } + }); + }).then(val => { + return val; + }).catch(err => { + console.log(err); + return false; + }); + + +} + + +//################### get KPI availbale queries start ############################ + +export function Q_getAvailbl_Stock(menuItem, PJP_Table = '', AllKPIFields) { + let { MenuId, ScreenName } = menuItem + let d1 = new Date(); + let d2 = moment(d1).format('MM/DD/YYYY'); + + let COMPStockAllow_Index = AllKPIFields?.findIndex(i => i.KPIFieldName == 'COMPStockAllow' && i.ScreenName == ScreenName); + let COMPStockAllow_Obj = COMPStockAllow_Index >= 0 ? AllKPIFields[COMPStockAllow_Index] : {}; + let isCOMPStockAllow = COMPStockAllow_Index >= 0 ? COMPStockAllow_Obj['KPIFieldEnable'] : false; + + + let q = `SELECT JP.StoreId , ${MenuId} as MenuID,CASE WHEN count(PM.ProductId)>0 THEN 1 ELSE 0 END as KPIAVBL,IFNULL(count(PM.ProductId),0) as DataRowAvlblCount + from ${PJP_Table} JP + INNER JOIN Mapping_ProductAssortmentStorewise MP on JP.StoreId=MP.StoreId + INNER JOIN Product_Master PM on PM.ProductId=MP.ProductId Where JP.VisitDate='${d2}' ${(isCOMPStockAllow == true ? '' : ` and (PM.IsCompetitor='0' or PM.IsCompetitor = 0) `)} + group by JP.StoreId`; + + + return q; +} +export function Q_getAvailbl_KycOneApp(menuItem, PJP_Table = '', AllKPIFields) { + let { MenuId, ScreenName } = menuItem + let d1 = new Date(); + let d2 = moment(d1).format('MM/DD/YYYY'); + + let COMPStockAllow_Index = AllKPIFields?.findIndex(i => i.KPIFieldName == 'COMPStockAllow' && i.ScreenName == ScreenName); + let COMPStockAllow_Obj = COMPStockAllow_Index >= 0 ? AllKPIFields[COMPStockAllow_Index] : {}; + let isCOMPStockAllow = COMPStockAllow_Index >= 0 ? COMPStockAllow_Obj['KPIFieldEnable'] : false; + + + // q = ` + // SELECT JP.StoreId, ${MenuId} AS MenuID, + // CASE WHEN EXISTS (SELECT 1 FROM Mapping_KYCConfiguration) THEN 1 ELSE 0 END AS KPIAVBL, + // (SELECT COUNT(1) FROM Mapping_KYCConfiguration) AS DataRowAvlblCount + // FROM ${PJP_Table} JP + // WHERE JP.VisitDate = '${d2}' + // GROUP BY JP.StoreId + // `; + // return q; + + + q = ` + SELECT JP.StoreId, ${MenuId} AS MenuID, + CASE + WHEN EXISTS (SELECT 1 FROM Mapping_KYCConfiguration) + AND NOT EXISTS (SELECT 1 FROM Mapping_KYCUploaded KYC_U WHERE KYC_U.StoreId = JP.StoreId) + THEN 1 + ELSE 0 + END AS KPIAVBL, + (SELECT COUNT(1) FROM Mapping_KYCConfiguration WHERE (IsMandatory = 'true' or IsMandatory=1)) AS DataRowAvlblCount + FROM ${PJP_Table} JP + WHERE JP.VisitDate = '${d2}' + GROUP BY JP.StoreId + `; + return q; +} + +export function Q_getAvailbl_ProgramOneApp(menuItem, PJP_Table = '', AllKPIFields) { + let { MenuId, ScreenName } = menuItem + let d1 = new Date(); + let d2 = moment(d1).format('MM/DD/YYYY'); + + let q = `SELECT JP.StoreId, ${MenuId} as MenuID,CASE WHEN count(1)>0 THEN 1 ELSE 0 END as KPIAVBL ,IFNULL(count(W.ProgramDefinitionId),0) as DataRowAvlblCount + from ${PJP_Table} JP + INNER JOIN Mapping_StoreProgram MW on MW.StoreId=JP.StoreId + INNER JOIN Master_ProgramDefinition W on W.ProgramDefinitionId=MW.ProgramDefinitionId and W.MenuId='${MenuId}' + Where JP.VisitDate='${d2}' + group by JP.StoreId`; + + return q; +} + +export function Q_getAvailbl_TGBASEDONEAPP(menuItem, PJP_Table = '', AllKPIFields) { + let { MenuId, ScreenName } = menuItem + let d1 = new Date(); + let d2 = moment(d1).format('MM/DD/YYYY'); + + let q = `SELECT JP.StoreId, ${MenuId} as MenuID,CASE WHEN count(1)>0 THEN 1 ELSE 0 END as KPIAVBL ,IFNULL(count(MW.TargetId),0) as DataRowAvlblCount + from ${PJP_Table} JP + INNER JOIN Mapping_StoreTargetBased MW on MW.StoreId=JP.StoreId and MW.MenuId='${MenuId}' + Where JP.VisitDate='${d2}' + group by JP.StoreId`; + + return q; +} + +export function Q_getAvailbl_DynamicStorescore(menuItem, PJP_Table = '', AllKPIFields) { + let { MenuId, ScreenName } = menuItem + let d1 = new Date(); + let d2 = moment(d1).format('MM/DD/YYYY'); + + let q = `SELECT JP.StoreId, ${MenuId} as MenuID,CASE WHEN count(1)>0 THEN 1 ELSE 0 END as KPIAVBL ,1 as DataRowAvlblCount + from ${PJP_Table} JP + Where JP.VisitDate='${d2}' + group by JP.StoreId`; + + return q; +} + +export function Q_getAvailbl_Training(menuItem, PJP_Table = '') { + let { MenuId } = menuItem + let d1 = new Date(); + let d2 = moment(d1).format('MM/DD/YYYY'); + + let q = `SELECT JP.StoreId, ${MenuId} as MenuID,1 as KPIAVBL ,1 as DataRowAvlblCount + from ${PJP_Table} JP + Where JP.VisitDate='${d2}' + group by JP.StoreId`; + + return q; +} + +export function Q_getMissedCall(menuItem, PJP_Table = '') { + let { MenuId } = menuItem + let d1 = new Date(); + let d2 = moment(d1).format('MM/DD/YYYY'); + + let q = `SELECT JP.StoreId, ${MenuId} as MenuID,CASE WHEN count(1)>0 THEN 1 ELSE 0 END as KPIAVBL ,1 as DataRowAvlblCount + from ${PJP_Table} JP + CROSS JOIN (SELECT Topic FROM Master_DetailerContent) MS + Where JP.VisitDate='${d2}' + group by JP.StoreId`; + + return q; +} + +export function Q_getAvailbl_Default(menuItem, PJP_Table = '') { + let { MenuId } = menuItem + let d1 = new Date(); + let d2 = moment(d1).format('MM/DD/YYYY'); + // ***************************************** + let q = `SELECT JP.StoreId, ${MenuId} as MenuID,1 as KPIAVBL,1 as DataRowAvlblCount + from ${PJP_Table} JP + Where JP.VisitDate='${d2}' + group by JP.StoreId`; + + return q; +} + +export function Q_getAvailbl_SOS(menuItem, PJP_Table = '') { + let { MenuId } = menuItem + let d1 = new Date(); + let d2 = moment(d1).format('MM/DD/YYYY'); + // let join=` INNER JOIN Master_Category mc on mc.CategoryId = p.CategoryId `; + // let join2=` INNER JOIN Mapping_ShareOfShelf m on p.SubCategoryId=m.SubCategoryId `; + // let q=`SELECT DISTINCT p.CategoryId,p.CategoryName from Product_Master p ${join} ${join2} Where m.StateId ='${StateId}' and m.ChainId ='${ChainId}' and m.StoreTypeId ='${StoreTypeId}' order by p.CategorySequence`; + + let q = `SELECT JP.StoreId , ${MenuId} as MenuID,CASE WHEN count(PM.ProductId)>0 THEN 1 ELSE 0 END as KPIAVBL,IFNULL(count(PM.ProductId),0) as DataRowAvlblCount + from ${PJP_Table} JP + INNER JOIN Mapping_ShareOfShelf MP on JP.StateId=MP.StateId and JP.ChainId=MP.ChainId and JP.StoreTypeId=MP.StoreTypeId + INNER JOIN Product_Master PM on PM.SubCategoryId=MP.SubCategoryId Where JP.VisitDate='${d2}' + group by JP.StoreId`; + return q; +} + +export function Q_getAvailbl_Vis(menuItem, PJP_Table = '', type = 'Paid') { + + let { MenuId } = menuItem + let d1 = new Date(); + let d2 = moment(d1).format('MM/DD/YYYY'); + // let join=` INNER JOIN Mapping_Visibility v on p.SubCategoryId=v.SubCategoryId `; + // let join2=` INNER join Master_Display md on md.DisplayId=v.DisplayId `; + // let q=`SELECT DISTINCT p.SubCategoryName,p.SubCategoryId from Product_Master p ${join} ${join2} Where v.StoreId='${StoreId}' and md.Paid='1' `; + let q = ''; + if (type == 'Paid') { + q = `SELECT JP.StoreId , ${MenuId} as MenuID,CASE WHEN count(MD.DisplayId)>0 THEN 1 ELSE 0 END as KPIAVBL,1 as DataRowAvlblCount + from ${PJP_Table} JP + INNER JOIN Mapping_Visibility v on v.StoreId=JP.StoreId + INNER JOIN Master_Display MD on MD.DisplayId=v.DisplayId and MD.Paid='1' + Where JP.VisitDate='${d2}' + group by JP.StoreId`; + } + else { + q = `SELECT DISTINCT JP.StoreId , ${MenuId} as MenuID,CASE WHEN count(MD.DisplayId)>0 THEN 1 ELSE 0 END as KPIAVBL , 1 as DataRowAvlblCount + from ${PJP_Table} JP + CROSS JOIN (select * from Master_Display WHERE + ${(type == 'Add' ? `Additional='1' or Additional=1 or Additional='true'` : '')} + ${(type == 'Comp' ? + ` Competitor='1' or Competitor='true' or Competitor=1 + `: '')} + ) MD + Where JP.VisitDate='${d2}' ${(type == 'Add' ? ` and JP.AddVisiAllow='Y'` : '')} + group by JP.StoreId`; + } + + return q; +} + + +export function Q_getAvailbl_ReturnStk(menuItem, PJP_Table = '') { + + let { MenuId } = menuItem + let d1 = new Date(); + let d2 = moment(d1).format('MM/DD/YYYY'); + let q = ''; + + q = `SELECT DISTINCT JP.StoreId , ${MenuId} as MenuID,CASE WHEN count(MD.ProductId)>0 THEN 1 ELSE 0 END as KPIAVBL , 1 as DataRowAvlblCount + from ${PJP_Table} JP + CROSS JOIN (select * from Product_master + )as MD + Where JP.VisitDate='${d2}' + group by JP.StoreId`; + + return q; +} + + +export function Q_getAvailbl_Promo(menuItem, PJP_Table = '') { + let { MenuId } = menuItem + let d1 = new Date(); + let d2 = moment(d1).format('MM/DD/YYYY'); + let q = `SELECT JP.StoreId, ${MenuId} as MenuID,CASE WHEN count(1)>0 THEN 1 ELSE 0 END as KPIAVBL,IFNULL(count(1),0) as DataRowAvlblCount + from ${PJP_Table} JP + INNER JOIN Mapping_Promotion MP on JP.StateId=MP.StateId and JP.ChainId=MP.ChainId and JP.StoreTypeId=MP.StoreTypeId + INNER JOIN (Select Distinct CategoryId, SubCategoryId from Product_Master) PMM on PMM.SubCategoryId=MP.SubCategoryId + Where JP.VisitDate='${d2}' + group by JP.StoreId`; + return q; +} + +export function Q_getAvailbl_CompPromo(menuItem, PJP_Table = '') { + let { MenuId } = menuItem + let d1 = new Date(); + let d2 = moment(d1).format('MM/DD/YYYY'); + // let q=` select distinct CompanyId,Company from Master_Competitor `; + + // let q=`SELECT JP.StoreId, ${MenuId} as MenuID,CASE WHEN count(1)>0 THEN 1 ELSE 0 END as KPIAVBL + // from ${PJP_Table} JP + // INNER JOIN Mapping_Promotion MP on JP.StateId=MP.StateId and JP.ChainId=MP.ChainId and JP.StoreTypeId=MP.StoreTypeId + // INNER JOIN (Select Distinct CategoryId, SubCategoryId from Master_Competitor) PMM on PMM.SubCategoryId=MP.SubCategoryId + // Where JP.VisitDate='${d2}' + // group by JP.StoreId`; + + let q = `SELECT JP.StoreId, ${MenuId} as MenuID,CASE WHEN count(1)>0 THEN 1 ELSE 0 END as KPIAVBL,1 as DataRowAvlblCount + from ${PJP_Table} JP + CROSS JOIN (select * from Master_Competitor) + Where JP.VisitDate='${d2}' + group by JP.StoreId`; + + return q; +} + +export function Q_getAvailbl_Survey(menuItem, PJP_Table = '') { + let { MenuId } = menuItem + let d1 = new Date(); + let d2 = moment(d1).format('MM/DD/YYYY'); + // let join=` INNER JOIN Mapping_Survey M on T.SurveyId=M.SurveyId`; + // let q=`Select Distinct T.SurveyName ,T.SurveyId ,T.ShowCat from Master_SurveyQuestion T ${join} where M.StoreId='${StoreId}'`; + let q = `SELECT JP.StoreId, ${MenuId} as MenuID,CASE WHEN count(1)>0 THEN 1 ELSE 0 END as KPIAVBL,IFNULL(count(1),0) as DataRowAvlblCount + from ${PJP_Table} JP + INNER JOIN Mapping_Survey MS on MS.StoreId=JP.StoreId + INNER JOIN (Select Distinct SurveyId,MenuId from Master_SurveyQuestion) S on S.SurveyId=MS.SurveyId and S.MenuId='${MenuId}' + Where JP.VisitDate='${d2}' + group by JP.StoreId`; + + return q; +} + +export function Q_getAvailbl_Sampling(menuItem, PJP_Table = '') { + let { MenuId } = menuItem + let d1 = new Date(); + let d2 = moment(d1).format('MM/DD/YYYY'); + // let join=` INNER JOIN Mapping_Survey M on T.SurveyId=M.SurveyId`; + // let q=`Select Distinct T.SurveyName ,T.SurveyId ,T.ShowCat from Master_SurveyQuestion T ${join} where M.StoreId='${StoreId}'`; + let q = `SELECT JP.StoreId, ${MenuId} as MenuID,CASE WHEN count(1)>0 THEN 1 ELSE 0 END as KPIAVBL,IFNULL(count(S.SamplingDefinitionId),0) as DataRowAvlblCount + from ${PJP_Table} JP + INNER JOIN Mapping_StoreSampling MS on MS.StoreId=JP.StoreId + INNER JOIN Master_SamplingDefinition S on S.SamplingDefinitionId=MS.SamplingDefinitionId + Where JP.VisitDate='${d2}' + group by JP.StoreId`; + + return q; +} + +export function Q_getAvailbl_Feedback(menuItem, PJP_Table = '') { + let { MenuId } = menuItem + let d1 = new Date(); + let d2 = moment(d1).format('MM/DD/YYYY'); + // let q=`SELECT DISTINCT FeedbackQuestionId FROM Master_FeedbackQuestion `; + let q = `SELECT JP.StoreId, ${MenuId} as MenuID,CASE WHEN count(1)>0 THEN 1 ELSE 0 END as KPIAVBL,IFNULL(count(1),0) as DataRowAvlblCount + from ${PJP_Table} JP + INNER JOIN (SELECT DISTINCT FeedbackQuestionId,JP.StoreId FROM Master_FeedbackQuestion) MS on MS.StoreId=JP.StoreId + Where JP.VisitDate='${d2}' + group by JP.StoreId`; + return q; +} + +export function Q_getAvailbl_Window(menuItem, PJP_Table = '') { + let { MenuId } = menuItem + let d1 = new Date(); + let d2 = moment(d1).format('MM/DD/YYYY'); + // let q=`SELECT DISTINCT w.WindowId FROM Master_WindowDefinition w inner join Mapping_StoreWindow s on w.WindowDefinitionId=s.WindowDefinitionId where s.StoreId='${StoreId}'`; + let q = `SELECT JP.StoreId, ${MenuId} as MenuID,CASE WHEN count(1)>0 THEN 1 ELSE 0 END as KPIAVBL ,IFNULL(count(1),0) as DataRowAvlblCount + from ${PJP_Table} JP + INNER JOIN Mapping_StoreWindow MW on MW.StoreId=JP.StoreId + INNER JOIN Master_WindowDefinition W on W.WindowDefinitionId=MW.WindowDefinitionId and W.MenuId='${MenuId}' + Where JP.VisitDate='${d2}' + group by JP.StoreId`; + return q; +} + +export function Q_getAvailbl_POSM(menuItem, PJP_Table = '') { + let { MenuId } = menuItem + let d1 = new Date(); + let d2 = moment(d1).format('MM/DD/YYYY'); + // let q=``SELECT DISTINCT w.POSMDefinitionId,w.PosmId FROM Master_POSMDefinition w inner join Mapping_StorePOSM s on s.POSMDefinitionId=w.POSMDefinitionId where s.StoreId='${StoreId}'`;`; + let q = `SELECT JP.StoreId, ${MenuId} as MenuID,CASE WHEN count(1)>0 THEN 1 ELSE 0 END as KPIAVBL ,IFNULL(count(1),0) as DataRowAvlblCount + from ${PJP_Table} JP + INNER JOIN Mapping_StorePOSM MW on MW.StoreId=JP.StoreId + INNER JOIN Master_POSMDefinition W on W.POSMDefinitionId=MW.POSMDefinitionId + Where JP.VisitDate='${d2}' + group by JP.StoreId`; + return q; +} + +export function Q_getAvailbl_StoreImage(menuItem, PJP_Table = '') { + let { MenuId } = menuItem + let d1 = new Date(); + let d2 = moment(d1).format('MM/DD/YYYY'); + // let q=`SELECT * FROM Master_ImageType `; + let q = `SELECT JP.StoreId, ${MenuId} as MenuID,CASE WHEN count(1)>0 THEN 1 ELSE 0 END as KPIAVBL ,1 as DataRowAvlblCount + from ${PJP_Table} JP + CROSS JOIN (SELECT ImageTypeId FROM Master_ImageType) MS + Where JP.VisitDate='${d2}' + group by JP.StoreId`; + return q; +} + +export function Q_getAvailbl_ShelfTalker(menuItem, PJP_Table = '') { + let { MenuId } = menuItem + let d1 = new Date(); + let d2 = moment(d1).format('MM/DD/YYYY'); + // let q=`SELECT DISTINCT w.StDefinitionId FROM Master_ShelfTalkerDefinition w inner join Mapping_StoreShelfTalker s on w.StDefinitionId=s.StDefinitionId where s.StoreId='${StoreId}' `; + let q = `SELECT JP.StoreId, ${MenuId} as MenuID,CASE WHEN count(1)>0 THEN 1 ELSE 0 END as KPIAVBL, IFNULL(count(1),0) as DataRowAvlblCount + from ${PJP_Table} JP + INNER JOIN Mapping_StoreShelfTalker MW on MW.StoreId=JP.StoreId + INNER JOIN Master_ShelfTalkerDefinition W on W.StDefinitionId=MW.StDefinitionId + Where JP.VisitDate='${d2}' + group by JP.StoreId`; + return q; +} + + +export function Q_getAvailbl_PromoOneApp(menuItem, PJP_Table = '') { + let { MenuId } = menuItem + let d1 = new Date(); + let d2 = moment(d1).format('MM/DD/YYYY'); + // let q=`SELECT DISTINCT w.PromoDefinitionId FROM Master_PromotionDefinition w inner join Mapping_StorePromotion s on w.PromoDefinitionId=s.PromoDefinitionId where s.StoreId='${StoreId}' `; + let q = `SELECT JP.StoreId, ${MenuId} as MenuID,CASE WHEN count(1)>0 THEN 1 ELSE 0 END as KPIAVBL , IFNULL(count(W.PromoDefinitionId),0) as DataRowAvlblCount + from ${PJP_Table} JP + INNER JOIN Mapping_StorePromotion MW on MW.StoreId=JP.StoreId + INNER JOIN Master_PromotionDefinition W on W.PromoDefinitionId=MW.PromoDefinitionId + Where JP.VisitDate='${d2}' + group by JP.StoreId`; + return q; +} + +export function Q_getAvailbl_PaidVisOneApp(menuItem, PJP_Table = '', AllKPIFields) { + let { MenuId } = menuItem + let d1 = new Date(); + let d2 = moment(d1).format('MM/DD/YYYY'); + + let isSpecificMapIndex = AllKPIFields?.findIndex(i => i.KPIFieldName == 'SpecificMapping') + let isSpecificMapKPIObj = isSpecificMapIndex >= 0 ? AllKPIFields[isSpecificMapIndex] : {}; + let isSpecificMappingEnable = isSpecificMapIndex >= 0 ? isSpecificMapKPIObj['KPIFieldEnable'] : false; + + // let AllKPIFields=await getKPIFields(menuItem); + // console.log("AllKPIFields--------------ad",AllKPIFields) + // let isSpecificMapIndex=AllKPIFields.findIndex(i=>i.KPIFieldName=='SpecificMapping') + // let isSpecificMapKPIObj=isSpecificMapIndex>=0?AllKPIFields[isSpecificMapIndex]:{}; + // let isSpecificMappingEnable=isSpecificMapIndex>=0?isSpecificMapKPIObj['KPIFieldEnable']:true; + // let q=`SELECT DISTINCT w.VisibilityDefinitionId FROM Master_VisibilityDefinition w inner join Mapping_StoreVisibility s on w.VisibilityDefinitionId=s.VisibilityDefinitionId where s.StoreId='${StoreId}' `; + let q = `SELECT JP.StoreId, ${MenuId} as MenuID,CASE WHEN count(1)>0 THEN 1 ELSE 0 END as KPIAVBL ,IFNULL(count(W.VisibilityDefinitionId),0) as DataRowAvlblCount + from ${PJP_Table} JP + INNER JOIN (select distinct StoreId,VisibilityDefinitionId from ${isSpecificMappingEnable == true ? 'Mapping_StoreVisibilitySpecific' : "Mapping_StoreVisibility"}) MW on MW.StoreId=JP.StoreId + INNER JOIN Master_VisibilityDefinition W on W.VisibilityDefinitionId=MW.VisibilityDefinitionId and W.MenuId='${MenuId}' + Where JP.VisitDate='${d2}' + group by JP.StoreId`; + + // console.log("Q_getAvailbl_PaidVisOneApp q:",q); + return q; +} + +export function Q_getAvailbl_WareHouseDeploy(menuItem, PJP_Table = '', AllKPIFields) { + let { MenuId, MenuName } = menuItem + let d1 = new Date(); + let d2 = moment(d1).format('MM/DD/YYYY'); + + let DeploymentTypeH = AllKPIFields?.find((i) => i.ScreenName == "WAREHOUSEDEPLOY" && i.KPIFieldName == "DeploymentTypeHide"); + + let DeploymentTypeHArr = DeploymentTypeH?.KPIType?.split(":"); + let DeploymentTypeHMenu = DeploymentTypeHArr?.length > 0 ? DeploymentTypeHArr[DeploymentTypeHArr?.length - 1] : null; + + + let q = `SELECT JP.StoreId, ${MenuId} as MenuID,CASE WHEN count(1)>0 THEN 1 ELSE 0 END as KPIAVBL ,IFNULL(count(W.ItemId),0) as DataRowAvlblCount + from ${PJP_Table} JP + INNER JOIN ${DeploymentTypeHMenu == MenuId ? "Mapping_WarehousePrimaryItem" : "Mapping_WarehouseCampaignDeployment"} MW on MW.MenuId='${MenuId}' and MW.StoreId=JP.StoreId + INNER JOIN Master_WarehouseItem W on W.ItemId=MW.ItemId + Where JP.VisitDate='${d2}' + group by JP.StoreId`; + + // let q=`SELECT JP.StoreId, ${MenuId} as MenuID,CASE WHEN count(1)>0 THEN 1 ELSE 0 END as KPIAVBL ,IFNULL(count(W.ItemId),0) as DataRowAvlblCount + // from ${PJP_Table} JP + // INNER JOIN Mapping_WarehouseCampaignDeployment MW on MW.ItemId=W.ItemId + // INNER JOIN Master_WarehouseItem W on W.ItemCategory='${MenuName=="Temporary Visibility"?"Temporary Visibility":"Permanent Visibility"}' + // Where JP.VisitDate='${d2}' + // group by JP.StoreId`; + + // WHERE w.ItemCategory='${menu1?.MenuName=="Temporary Visibility"?"Temporary Visibility":"Permanent Visibility"}' + console.log("Q_getAvailbl_WarehouseDeployment q:", q, DeploymentTypeH); + return q; +} + +export function Q_getAvailbl_WarehouseDeploymentCampaign(menuItem, PJP_Table = '', AllKPIFields) { + let { MenuId } = menuItem + + console.log("menuItem-----", menuItem) + let d1 = new Date(); + let d2 = moment(d1).format('MM/DD/YYYY'); + + + let q = `SELECT JP.StoreId, ${MenuId} as MenuID,CASE WHEN count(1)>0 THEN 1 ELSE 0 END as KPIAVBL ,IFNULL(count(W.ItemId),0) as DataRowAvlblCount + from ${PJP_Table} JP + INNER JOIN Mapping_WarehouseCampaignItem MW on MW.CityId=JP.CityId and MW.StoreTypeId=JP.StoreTypeId + INNER JOIN Master_WarehouseItem W on W.ItemId=MW.ItemId + Where JP.VisitDate='${d2}' + group by JP.StoreId`; + + // let q=`SELECT JP.StoreId, ${MenuId} as MenuID,CASE WHEN count(1)>0 THEN 1 ELSE 0 END as KPIAVBL ,IFNULL(count(W.ItemId),0) as DataRowAvlblCount + // from ${PJP_Table} JP + // INNER JOIN Mapping_WarehouseCampaignDeployment MW on MW.MenuId='${MenuId}' + // INNER JOIN Master_WarehouseItem W on W.ItemId=MW.ItemId + // Where JP.VisitDate='${d2}' + // group by JP.StoreId`; + + // let q=`SELECT JP.StoreId, ${MenuId} as MenuID,CASE WHEN count(1)>0 THEN 1 ELSE 0 END as KPIAVBL ,IFNULL(count(W.ItemId),0) as DataRowAvlblCount + // from ${PJP_Table} JP + // INNER JOIN Mapping_WarehouseItem MW on MW.MenuId='${MenuId}' + // INNER JOIN Master_WarehouseItem W on W.ItemId=MW.ItemIds + // Where JP.VisitDate='${d2}' + // group by JP.StoreId`; + + // console.log("Q_getAvailbl_WarehouseDeploymentCampaign q:",q); + return q; +} + +export function Q_getAvailbl_SOSOneApp(menuItem, PJP_Table = '', AllKPIFields = []) { + let { MenuId, ScreenName } = menuItem + let d1 = new Date(); + let d2 = moment(d1).format('MM/DD/YYYY'); + + let sosCheckAssortmentI = AllKPIFields?.findIndex(i => i.KPIFieldName == 'SOSCheckAssortment' && i.ScreenName == ScreenName); + let sosCheckAssortmentObj = sosCheckAssortmentI >= 0 ? AllKPIFields[sosCheckAssortmentI] : {}; + let sosCheckAssortment = sosCheckAssortmentI >= 0 ? sosCheckAssortmentObj['KPIFieldEnable'] : false; + + function getprodq(fname = 'CategoryId') { + let prodq = ` Select DISTINCT JP1.StoreId,p.${fname} from ${PJP_Table} JP1 + INNER JOIN Mapping_ProductAssortmentStorewise mp on mp.StoreId=JP1.StoreId + INNER JOIN Product_Master p on p.ProductId=mp.ProductId `; + return prodq; + } + + let cat_assrtq = getprodq('CategoryId'); + let subcat_assrtq = getprodq('SubCategoryId'); + let brand_assrtq = getprodq('BrandId'); + let prd_assrtq = getprodq('ProductId'); + + let q = ``; + + if (sosCheckAssortment) { + + q = `SELECT JP.StoreId, ${MenuId} as MenuID,CASE WHEN count(1)>0 THEN 1 ELSE 0 END as KPIAVBL ,IFNULL(count(W.SOSDefinitionId),0) as DataRowAvlblCount + from ${PJP_Table} JP + INNER JOIN Mapping_StoreShareOfShelf MW on MW.StoreId=JP.StoreId + INNER JOIN (Select * from Master_ShareOfShelfDefinition where SOSChildTable='Master_Category') W on W.SOSDefinitionId=MW.SOSDefinitionId + INNER JOIN (${cat_assrtq}) p on p.CategoryId=W.SOSChildValue and p.StoreId=JP.StoreId + Where JP.VisitDate='${d2}' + group by JP.StoreId + + UNION + + SELECT JP.StoreId, ${MenuId} as MenuID,CASE WHEN count(1)>0 THEN 1 ELSE 0 END as KPIAVBL ,IFNULL(count(W.SOSDefinitionId),0) as DataRowAvlblCount + from ${PJP_Table} JP + INNER JOIN Mapping_StoreShareOfShelf MW on MW.StoreId=JP.StoreId + INNER JOIN (Select * from Master_ShareOfShelfDefinition where SOSChildTable='Master_SubCategory') W on W.SOSDefinitionId=MW.SOSDefinitionId + INNER JOIN (${subcat_assrtq}) p on p.SubCategoryId=W.SOSChildValue and p.StoreId=JP.StoreId + Where JP.VisitDate='${d2}' + group by JP.StoreId + + + UNION + + SELECT JP.StoreId, ${MenuId} as MenuID,CASE WHEN count(1)>0 THEN 1 ELSE 0 END as KPIAVBL ,IFNULL(count(W.SOSDefinitionId),0) as DataRowAvlblCount + from ${PJP_Table} JP + INNER JOIN Mapping_StoreShareOfShelf MW on MW.StoreId=JP.StoreId + INNER JOIN (Select * from Master_ShareOfShelfDefinition where SOSChildTable='Master_Brand') W on W.SOSDefinitionId=MW.SOSDefinitionId + INNER JOIN (${brand_assrtq}) p on p.BrandId=W.SOSChildValue and p.StoreId=JP.StoreId + Where JP.VisitDate='${d2}' + group by JP.StoreId + + UNION + + SELECT JP.StoreId, ${MenuId} as MenuID,CASE WHEN count(1)>0 THEN 1 ELSE 0 END as KPIAVBL ,IFNULL(count(W.SOSDefinitionId),0) as DataRowAvlblCount + from ${PJP_Table} JP + INNER JOIN Mapping_StoreShareOfShelf MW on MW.StoreId=JP.StoreId + INNER JOIN (Select * from Master_ShareOfShelfDefinition where SOSChildTable='Master_Product') W on W.SOSDefinitionId=MW.SOSDefinitionId + INNER JOIN (${prd_assrtq}) p on p.ProductId=W.SOSChildValue and p.StoreId=JP.StoreId + Where JP.VisitDate='${d2}' + group by JP.StoreId + `; + + } + else { + + q = `SELECT JP.StoreId, ${MenuId} as MenuID,CASE WHEN count(1)>0 THEN 1 ELSE 0 END as KPIAVBL ,IFNULL(count(W.SOSDefinitionId),0) as DataRowAvlblCount + from ${PJP_Table} JP + INNER JOIN Mapping_StoreShareOfShelf MW on MW.StoreId=JP.StoreId + INNER JOIN Master_ShareOfShelfDefinition W on W.SOSDefinitionId=MW.SOSDefinitionId + Where JP.VisitDate='${d2}' + group by JP.StoreId`; + + } + + // console.log('Q_getAvailbl_SOSOneApp AllKPIFields:',AllKPIFields); + // console.log('Q_getAvailbl_SOSOneApp sosCheckAssortment:',sosCheckAssortment,q); + + return q; +} + +export function Q_getAvailbl_SosEyeLevel(menuItem, PJP_Table = '', AllKPIFields = []) { + let { MenuId, ScreenName } = menuItem + let d1 = new Date(); + let d2 = moment(d1).format('MM/DD/YYYY'); + + let sosCheckAssortmentI = AllKPIFields?.findIndex(i => i.KPIFieldName == 'SOSCheckAssortment' && i.ScreenName == ScreenName); + let sosCheckAssortmentObj = sosCheckAssortmentI >= 0 ? AllKPIFields[sosCheckAssortmentI] : {}; + let sosCheckAssortment = sosCheckAssortmentI >= 0 ? sosCheckAssortmentObj['KPIFieldEnable'] : false; + + function getprodq(fname = 'CategoryId') { + let prodq = ` Select DISTINCT JP1.StoreId,p.${fname} from ${PJP_Table} JP1 + INNER JOIN Mapping_ProductAssortmentStorewise mp on mp.StoreId=JP1.StoreId + INNER JOIN Product_Master p on p.ProductId=mp.ProductId `; + return prodq; + } + + let cat_assrtq = getprodq('CategoryId'); + let subcat_assrtq = getprodq('SubCategoryId'); + let brand_assrtq = getprodq('BrandId'); + let prd_assrtq = getprodq('ProductId'); + + let q = ``; + console.log("sosCheckAssortment------", sosCheckAssortment) + if (sosCheckAssortment) { + + q = `SELECT JP.StoreId, ${MenuId} as MenuID,CASE WHEN count(1)>0 THEN 1 ELSE 0 END as KPIAVBL ,IFNULL(count(W.SOSDefinitionId),0) as DataRowAvlblCount + from ${PJP_Table} JP + INNER JOIN Mapping_StoreShareOfShelfEyeLevel MW on MW.StoreId=JP.StoreId + INNER JOIN (Select * from Master_ShareOfShelfEyeLevelDefinition where SOSChildTable='Master_Category') W on W.SOSDefinitionId=MW.SOSDefinitionId + INNER JOIN (${cat_assrtq}) p on p.CategoryId=W.SOSChildValue and p.StoreId=JP.StoreId + Where JP.VisitDate='${d2}' + group by JP.StoreId + + UNION + + SELECT JP.StoreId, ${MenuId} as MenuID,CASE WHEN count(1)>0 THEN 1 ELSE 0 END as KPIAVBL ,IFNULL(count(W.SOSDefinitionId),0) as DataRowAvlblCount + from ${PJP_Table} JP + INNER JOIN Mapping_StoreShareOfShelfEyeLevel MW on MW.StoreId=JP.StoreId + INNER JOIN (Select * from Master_ShareOfShelfEyeLevelDefinition where SOSChildTable='Master_SubCategory') W on W.SOSDefinitionId=MW.SOSDefinitionId + INNER JOIN (${subcat_assrtq}) p on p.SubCategoryId=W.SOSChildValue and p.StoreId=JP.StoreId + Where JP.VisitDate='${d2}' + group by JP.StoreId + + + UNION + + SELECT JP.StoreId, ${MenuId} as MenuID,CASE WHEN count(1)>0 THEN 1 ELSE 0 END as KPIAVBL ,IFNULL(count(W.SOSDefinitionId),0) as DataRowAvlblCount + from ${PJP_Table} JP + INNER JOIN Mapping_StoreShareOfShelfEyeLevel MW on MW.StoreId=JP.StoreId + INNER JOIN (Select * from Master_ShareOfShelfEyeLevelDefinition where SOSChildTable='Master_Brand') W on W.SOSDefinitionId=MW.SOSDefinitionId + INNER JOIN (${brand_assrtq}) p on p.BrandId=W.SOSChildValue and p.StoreId=JP.StoreId + Where JP.VisitDate='${d2}' + group by JP.StoreId + + UNION + + SELECT JP.StoreId, ${MenuId} as MenuID,CASE WHEN count(1)>0 THEN 1 ELSE 0 END as KPIAVBL ,IFNULL(count(W.SOSDefinitionId),0) as DataRowAvlblCount + from ${PJP_Table} JP + INNER JOIN Mapping_StoreShareOfShelfEyeLevel MW on MW.StoreId=JP.StoreId + INNER JOIN (Select * from Master_ShareOfShelfEyeLevelDefinition where SOSChildTable='Master_Product') W on W.SOSDefinitionId=MW.SOSDefinitionId + INNER JOIN (${prd_assrtq}) p on p.ProductId=W.SOSChildValue and p.StoreId=JP.StoreId + Where JP.VisitDate='${d2}' + group by JP.StoreId + `; + + } + else { + + q = `SELECT JP.StoreId, ${MenuId} as MenuID,CASE WHEN count(1)>0 THEN 1 ELSE 0 END as KPIAVBL ,IFNULL(count(W.SOSDefinitionId),0) as DataRowAvlblCount + from ${PJP_Table} JP + INNER JOIN Mapping_StoreShareOfShelfEyeLevel MW on MW.StoreId=JP.StoreId + INNER JOIN Master_ShareOfShelfEyeLevelDefinition W on W.SOSDefinitionId=MW.SOSDefinitionId + Where JP.VisitDate='${d2}' + group by JP.StoreId`; + + } + + // console.log('Q_getAvailbl_SOSOneApp AllKPIFields:',AllKPIFields); + // console.log('Q_getAvailbl_SOSOneApp sosCheckAssortment:',sosCheckAssortment,q); + + return q; +} + +export function Q_getAvailbl_POSSaleOneApp(menuItem, PJP_Table = '') { + // let {MenuId}= menuItem + // // console.log('PossaleMenuId',MenuId) + // let d1=new Date(); + // let d2=moment(d1).format('MM/DD/YYYY'); + // let q=`SELECT JP.StoreId, ${MenuId} as MenuID,CASE WHEN count(ps.PosDefinitionId)>0 THEN 1 ELSE 0 END as KPIAVBL + // from ${PJP_Table} JP + // CROSS JOIN (SELECT * from Master_PosSaleDefinition) ps + // Where JP.VisitDate='${d2}' + // group by JP.StoreId`; + // console.log('qpos',q) + + let { MenuId } = menuItem + let d1 = new Date(); + let d2 = moment(d1).format('MM/DD/YYYY'); + // let q=SELECT DISTINCT w.SOSDefinitionId FROM Master_ShareOfShelfDefinition w inner join Mapping_StoreShareOfShelf s on w.SOSDefinitionId=s.SOSDefinitionId where s.StoreId='${StoreId}' ; + let q = `SELECT JP.StoreId, ${MenuId} as MenuID,CASE WHEN count(1)>0 THEN 1 ELSE 0 END as KPIAVBL ,IFNULL(count(ps.PosDefinitionId),0) as DataRowAvlblCount + from ${PJP_Table} JP + CROSS JOIN (SELECT * ,mps.StoreId from Master_PosSaleDefinition p INNER join Mapping_StorePosSaleDefinition mps on p.PosDefinitionId=mps.PosDefinitionId ) ps on ps.StoreId=JP.StoreId + Where JP.VisitDate='${d2}' + group by JP.StoreId`; + return q; +} + +export function Q_getAvailbl_StoreCategoryOneApp(menuItem, PJP_Table = '') { + let { MenuId } = menuItem + let d1 = new Date(); + let d2 = moment(d1).format('MM/DD/YYYY'); + // let q=SELECT DISTINCT w.SOSDefinitionId FROM Master_ShareOfShelfDefinition w inner join Mapping_StoreShareOfShelf s on w.SOSDefinitionId=s.SOSDefinitionId where s.StoreId='${StoreId}' ; + let q = `SELECT JP.StoreId, ${MenuId} as MenuID,CASE WHEN count(1)>0 THEN 1 ELSE 0 END as KPIAVBL ,IFNULL(count(W.CategoryDefinitionId),0) as DataRowAvlblCount + from ${PJP_Table} JP + INNER JOIN Mapping_StoreCategory MW on MW.StoreId=JP.StoreId + INNER JOIN Master_CategoryDefinition W on W.CategoryDefinitionId=MW.CategoryDefinitionId + Where JP.VisitDate='${d2}' + group by JP.StoreId`; + return q; +} + +export function Q_getAvailbl_StoreScore(menuItem, PJP_Table = '') { + let { MenuId } = menuItem + let d1 = new Date(); + let d2 = moment(d1).format('MM/DD/YYYY'); + let q = `SELECT JP.StoreId, ${MenuId} as MenuID,1 as KPIAVBL ,1 as DataRowAvlblCount + from ${PJP_Table} JP + INNER JOIN Report_ComplianceScore Rp on Rp.StoreId=JP.StoreId + Where JP.VisitDate='${d2}' + group by JP.StoreId`; + // INNER JOIN Report_ComplianceScore Rp on Rp.StoreId=JP.StoreId + return q; +} + +export function Q_getAvailbl_OrderStatus(menuItem, PJP_Table = '') { + let { MenuId } = menuItem + let d1 = new Date(); + let d2 = moment(d1).format('MM/DD/YYYY'); + // ***************************************** + let q = `SELECT JP.StoreId, ${MenuId} as MenuID,CASE WHEN count(1)>0 THEN 1 ELSE 0 END as KPIAVBL ,IFNULL(count(1),0) as DataRowAvlblCount + from ${PJP_Table} JP + CROSS JOIN (SELECT OrderId, StoreId FROM PriviousVisit_Orders) as MS + Where JP.VisitDate='${d2}' and MS.StoreId=JP.StoreId + group by JP.StoreId`; + + return q; +} + +//################### get KPI availbale queries End ############################ + +export function Q_getAvailbl_BreakTime(menuItem, PJP_Table = '') { + let { MenuId } = menuItem + let d1 = new Date(); + let d2 = moment(d1).format('MM/DD/YYYY'); + // ***************************************** + let q = `SELECT JP.StoreId, ${MenuId} as MenuID,CASE WHEN count(1)>0 THEN 1 ELSE 0 END as KPIAVBL ,1 as DataRowAvlblCount + from ${PJP_Table} JP + CROSS JOIN (SELECT BreakId FROM Master_Break) MS + Where JP.VisitDate='${d2}' + group by JP.StoreId`; + + return q; +} + + +export function getAvailblQuery(menu, isAdhoc, isBeat, isNonMerchan, isNonProgam, isStoreSearch, AllKPIFields) { + let { ScreenName, MenuId } = menu + let PJP_Table = isBeat == true ? 'JourneyPlan_RouteWise' : (isAdhoc == true ? 'Adhoc_JourneyPlan' : isNonMerchan == true ? 'NonMerchandising_JourneyPlan' : isNonProgam == true ? 'NonProgram_JourneyPlan' : isStoreSearch == true ? 'StoreSearch_JourneyPlan' : 'Mapping_JourneyPlan'); + let d1 = new Date(); + let d2 = moment(d1).format('MM/DD/YYYY'); + let q = ``; + + switch (ScreenName) { + case 'STOCK': + q = Q_getAvailbl_Stock(menu, PJP_Table, AllKPIFields); + // console.log("chehcstock---",q) + return q; + case 'STOCKWITHPROMO': + q = Q_getAvailbl_Stock(menu, PJP_Table, AllKPIFields); + return q; + //arman + case 'ONEAPPSTOCKQRSCAN': + q = Q_getAvailbl_Stock(menu, PJP_Table, AllKPIFields); + return q; + case 'ONEAPPSALEQRSCAN': + q = Q_getAvailbl_Stock(menu, PJP_Table, AllKPIFields); + return q; + case 'KYCONEAPP': + q = Q_getAvailbl_KycOneApp(menu, PJP_Table, AllKPIFields); + return q; + + case 'STOCKWITHCATEGORY': + q = Q_getAvailbl_Stock(menu, PJP_Table, AllKPIFields); + return q; + case 'OPSTOCK': + q = Q_getAvailbl_Stock(menu, PJP_Table, AllKPIFields); + return q; + case 'BACKSTOCK': + q = Q_getAvailbl_Stock(menu, PJP_Table, AllKPIFields); + return q; + case 'MDSTOCK': + q = Q_getAvailbl_Stock(menu, PJP_Table, AllKPIFields); + return q; + case 'CLSSTOCK': + q = Q_getAvailbl_Stock(menu, PJP_Table, AllKPIFields); + return q; + case 'SOS': + q = Q_getAvailbl_SOS(menu, PJP_Table); + return q; + case 'PAIDVISI': + q = Q_getAvailbl_Vis(menu, PJP_Table, 'Paid'); + return q; + case 'ADDITIONALVISI': + q = Q_getAvailbl_Vis(menu, PJP_Table, 'Add'); + return q; + case 'ADDITIONALVISI_IR': + q = Q_getAvailbl_Vis(menu, PJP_Table, 'Add'); + return q; + case 'ADDITIONALVISI_IR_ONLY': + q = Q_getAvailbl_Vis(menu, PJP_Table, 'Add'); + return q; + case 'COMPVISI': + q = Q_getAvailbl_Vis(menu, PJP_Table, 'Comp'); + console.log("COMPVISI_qqqq", q) + return q; + case 'COMPVISI_IR': + q = Q_getAvailbl_Vis(menu, PJP_Table, 'Comp'); + return q; + case 'PROMOTION': + q = Q_getAvailbl_Promo(menu, PJP_Table); + return q; + case 'COMPROMO': + q = Q_getAvailbl_CompPromo(menu, PJP_Table); + return q; + case 'CONCOV': + q = Q_getAvailbl_Default(menu, PJP_Table); + return q; + case 'SALE': + q = Q_getAvailbl_Stock(menu, PJP_Table, AllKPIFields); + return q; + case 'SURVEY': + q = Q_getAvailbl_Survey(menu, PJP_Table); + return q; + case 'WINDOW': + q = Q_getAvailbl_Window(menu, PJP_Table); + return q; + case 'WINDOW_IR': + q = Q_getAvailbl_Window(menu, PJP_Table); + return q; + case 'POSM': + q = Q_getAvailbl_POSM(menu, PJP_Table); + return q; + case 'FEEDBACK': + q = Q_getAvailbl_Feedback(menu, PJP_Table); + return q; + case 'PROMOTION2': + q = Q_getAvailbl_Promo(menu, PJP_Table); + return q; + case 'STOREIMG': + q = Q_getAvailbl_StoreImage(menu, PJP_Table); + return q; + case 'SHELFTALKER': + q = Q_getAvailbl_ShelfTalker(menu, PJP_Table); + return q; + case 'PROMOTIONONEAPP': + q = Q_getAvailbl_PromoOneApp(menu, PJP_Table); + return q; + case 'PROMOTIONONEAPP_IR': + q = Q_getAvailbl_PromoOneApp(menu, PJP_Table); + return q; + case 'PAIDVISIONEAPP': + q = Q_getAvailbl_PaidVisOneApp(menu, PJP_Table, AllKPIFields); + return q; + case 'PAIDVISIONEAPP_IR': + q = Q_getAvailbl_PaidVisOneApp(menu, PJP_Table, AllKPIFields); + return q; + case 'PAIDVISIONEAPP_IR_ONLY': + q = Q_getAvailbl_PaidVisOneApp(menu, PJP_Table, AllKPIFields); + return q; + case 'SOSONEAPP': + q = Q_getAvailbl_SOSOneApp(menu, PJP_Table, AllKPIFields); + return q; + case 'SOSONEAPP_IR': + q = Q_getAvailbl_SOSOneApp(menu, PJP_Table, AllKPIFields); + return q; + case 'SOSONEAPP_IR_ONLY': + q = Q_getAvailbl_SOSOneApp(menu, PJP_Table, AllKPIFields); + return q; + case 'CATEXEONEAPP': + q = Q_getAvailbl_StoreCategoryOneApp(menu, PJP_Table); + return q; + case 'STORESCORE': + q = Q_getAvailbl_StoreScore(menu, PJP_Table); + return q; + case 'ORDER': + q = Q_getAvailbl_Stock(menu, PJP_Table, AllKPIFields); + return q; + case 'ORDERSTATUS': + q = Q_getAvailbl_OrderStatus(menu, PJP_Table); + return q; + case 'TRAININGONEAPP': + q = Q_getAvailbl_Training(menu, PJP_Table); + return q; + case 'POSSALEONEAPP': + q = Q_getAvailbl_POSSaleOneApp(menu, PJP_Table); + // console.log('menu+PJPTable',q) + return q; + case 'SAMPLINGONEAPP': + q = Q_getAvailbl_Sampling(menu, PJP_Table); + return q; + case 'PROGRAMONEAPP': + q = Q_getAvailbl_ProgramOneApp(menu, PJP_Table, AllKPIFields); + return q; + case 'TGBASEDONEAPP': + q = Q_getAvailbl_TGBASEDONEAPP(menu, PJP_Table, AllKPIFields); + return q; + case 'STOREDYNAMICSCORE': + q = Q_getAvailbl_DynamicStorescore(menu, PJP_Table, AllKPIFields); + return q; + case 'ONEAPPMISSEDCALL': + q = Q_getMissedCall(menu, PJP_Table, AllKPIFields); + return q; + case 'SOSEYELEVELONEAPP': + q = Q_getAvailbl_SosEyeLevel(menu, PJP_Table, AllKPIFields); + return q; + case 'BREAKTIME': + q = Q_getAvailbl_BreakTime(menu, PJP_Table); + return q; + case 'WAREHOUSEDEPLOY': + q = Q_getAvailbl_WareHouseDeploy(menu, PJP_Table, AllKPIFields); + return q; + case 'WAREHOUSECAMPAIGN': + q = Q_getAvailbl_WarehouseDeploymentCampaign(menu, PJP_Table, AllKPIFields); + return q; + case 'RETURNSTOCKONEAPP': + q = Q_getAvailbl_ReturnStk(menu, PJP_Table); + return q; + + case 'ORDERSIMPLIFYONEAPP': + q = Q_getAvailbl_ReturnStk(menu, PJP_Table); + return q; + default: return ''; + + } +} + +export function getIfAvlbl(ScreenName, txnres2, storeData = {}) { + let isAvlbl = false; + switch (ScreenName) { + case 'STOCK': + if (txnres2.rows.length > 0) { isAvlbl = true; } + return isAvlbl; + case 'STOCKWITHCATEGORY': + if (txnres2.rows.length > 0) { isAvlbl = true; } + return isAvlbl; + case 'OPSTOCK': + if (txnres2.rows.length > 0) { isAvlbl = true; } + return isAvlbl; + case 'BACKSTOCK': + if (txnres2.rows.length > 0) { isAvlbl = true; } + return isAvlbl; + case 'MDSTOCK': + if (txnres2.rows.length > 0) { isAvlbl = true; } + return isAvlbl; + case 'CLSSTOCK': + if (txnres2.rows.length > 0) { isAvlbl = true; } + return isAvlbl; + case 'SOS': + if (txnres2.rows.length > 0) { isAvlbl = true; } + return isAvlbl; + case 'PAIDVISI': + if (txnres2.rows.length > 0) { isAvlbl = true; } + return isAvlbl; + case 'RETURNSTOCKONEAPP': + if (txnres2.rows.length > 0) { isAvlbl = true; } + return isAvlbl; + + case 'ORDERSIMPLIFYONEAPP': + if (txnres2.rows.length > 0) { isAvlbl = true; } + return isAvlbl; + + case 'ADDITIONALVISI': + if (txnres2.rows.length > 0 && storeData.AddVisiAllow == 'Y') { isAvlbl = true; } + return isAvlbl; + case 'ADDITIONALVISI_IR': + if (txnres2.rows.length > 0 && storeData.AddVisiAllow == 'Y') { isAvlbl = true; } + return isAvlbl; + case 'COMPVISI': + if (txnres2.rows.length > 0) { isAvlbl = true; } + return isAvlbl; + case 'COMPVISI_IR': + if (txnres2.rows.length > 0) { isAvlbl = true; } + return isAvlbl; + case 'PROMOTION': + if (txnres2.rows.length > 0) { isAvlbl = true; } + return isAvlbl; + // case 10: + // if(txnres2.rows.length>0){ isAvlbl=true;} + // return isAvlbl; + // case 11:isAvlbl=true; + // return isAvlbl; + // case 12: + // if(txnres2.rows.length>0){ isAvlbl=true;} + // return isAvlbl; + case 'COMPROMO': + if (txnres2.rows.length > 0) { isAvlbl = true; } + return isAvlbl; + case 'CONCOV': + isAvlbl = true; + return isAvlbl; + case 'SALE': + if (txnres2.rows.length > 0) { isAvlbl = true; } + return isAvlbl; + case 'SURVEY': + if (txnres2.rows.length > 0) { isAvlbl = true; } + return isAvlbl; + case 'WINDOW': + if (txnres2.rows.length > 0) { isAvlbl = true; } + return isAvlbl; + case 'WINDOW_IR': + if (txnres2.rows.length > 0) { isAvlbl = true; } + return isAvlbl; + case 'POSM': + if (txnres2.rows.length > 0) { isAvlbl = true; } + return isAvlbl; + case 'FEEDBACK': + if (txnres2.rows.length > 0) { isAvlbl = true; } + return isAvlbl; + case 'PROMOTION2': + if (txnres2.rows.length > 0) { isAvlbl = true; } + return isAvlbl; + case 'STOREIMG': + if (txnres2.rows.length > 0) { isAvlbl = true; } + return isAvlbl; + case 'SHELFTALKER': + if (txnres2.rows.length > 0) { isAvlbl = true; } + return isAvlbl; + case 'PROMOTIONONEAPP': + if (txnres2.rows.length > 0) { isAvlbl = true; } + return isAvlbl; + case 'PAIDVISIONEAPP': + if (txnres2.rows.length > 0) { isAvlbl = true; } + return isAvlbl; + case 'PAIDVISIONEAPP_IR': + if (txnres2.rows.length > 0) { isAvlbl = true; } + return isAvlbl; + case 'SOSONEAPP': + if (txnres2.rows.length > 0) { isAvlbl = true; } + return isAvlbl; + case 'SOSONEAPP_IR': + if (txnres2.rows.length > 0) { isAvlbl = true; } + return isAvlbl; + case 'POSSALEONEAPP': + if (txnres2.rows.length > 0) { isAvlbl = true; } + return isAvlbl; + + default: return isAvlbl; + } +} + +export function getQuery(menu, isAdhoc, isBeat, isNonMerchan, isNonProgam, isStoreSearch) { + let { ScreenName, MenuId } = menu; + let PJP_Table = isBeat == true ? 'JourneyPlan_RouteWise' : (isAdhoc == true ? 'Adhoc_JourneyPlan' : isNonMerchan == true ? 'NonMerchandising_JourneyPlan' : isNonProgam == true ? 'NonProgram_JourneyPlan' : isStoreSearch == true ? 'StoreSearch_JourneyPlan' : 'Mapping_JourneyPlan'); + let d1 = new Date(); + let d2 = moment(d1).format('MM/DD/YYYY'); + + let q = ``; + switch (ScreenName) { + case 'STOCK': + // SELECT STORE_ID AS StoreId , IFNULL(COUNT(1),0) AS DATAROWCOUNT FROM ${AppTables.STOCK2HDR_DATA} WHERE VISIT_DATE='${d2}' and IS_UPDATED='1' GROUP BY STORE_ID + q = ` SELECT Jp.StoreId, ${MenuId} as MenuID, IFNULL(DR.DataRowCount,0) as DataRowCount FROM ${PJP_Table} JP LEFT OUTER JOIN + (SELECT STORE_ID AS StoreId , IFNULL(COUNT(1),0) AS DATAROWCOUNT FROM ${AppTables.STOCK2_DATA} WHERE VISIT_DATE='${d2}' GROUP BY STORE_ID) DR + ON JP.StoreId=DR.StoreId WHERE Jp.VisitDate='${d2}' `; + return q; + + case 'STOCKWITHPROMO': + // SELECT STORE_ID AS StoreId , IFNULL(COUNT(1),0) AS DATAROWCOUNT FROM ${AppTables.STOCK2HDR_DATA} WHERE VISIT_DATE='${d2}' and IS_UPDATED='1' GROUP BY STORE_ID + q = ` SELECT Jp.StoreId, ${MenuId} as MenuID, IFNULL(DR.DataRowCount,0) as DataRowCount FROM ${PJP_Table} JP LEFT OUTER JOIN + (SELECT STORE_ID AS StoreId , IFNULL(COUNT(1),0) AS DATAROWCOUNT FROM ${AppTables.STOCKPROMO_DATA} WHERE VISIT_DATE='${d2}' GROUP BY STORE_ID) DR + ON JP.StoreId=DR.StoreId WHERE Jp.VisitDate='${d2}' `; + return q; + + ///arman + case 'ONEAPPSTOCKQRSCAN': + // SELECT STORE_ID AS StoreId , IFNULL(COUNT(1),0) AS DATAROWCOUNT FROM ${AppTables.STOCK2HDR_DATA} WHERE VISIT_DATE='${d2}' and IS_UPDATED='1' GROUP BY STORE_ID + q = ` SELECT Jp.StoreId, ${MenuId} as MenuID, IFNULL(DR.DataRowCount,0) as DataRowCount FROM ${PJP_Table} JP LEFT OUTER JOIN + (SELECT STORE_ID AS StoreId , IFNULL(COUNT(1),0) AS DATAROWCOUNT FROM ${AppTables.QRCODE_SCANNER} WHERE VISIT_DATE='${d2}' GROUP BY STORE_ID) DR + ON JP.StoreId=DR.StoreId WHERE Jp.VisitDate='${d2}' `; + console.log("ONEAPPSTOCKQRSCAN--", q) + return q; + + case 'ONEAPPSALEQRSCAN': + // SELECT STORE_ID AS StoreId , IFNULL(COUNT(1),0) AS DATAROWCOUNT FROM ${AppTables.STOCK2HDR_DATA} WHERE VISIT_DATE='${d2}' and IS_UPDATED='1' GROUP BY STORE_ID + q = ` SELECT Jp.StoreId, ${MenuId} as MenuID, IFNULL(DR.DataRowCount,0) as DataRowCount FROM ${PJP_Table} JP LEFT OUTER JOIN + (SELECT STORE_ID AS StoreId , IFNULL(COUNT(1),0) AS DATAROWCOUNT FROM ${AppTables.QRCODE_SALE} WHERE VISIT_DATE='${d2}' GROUP BY STORE_ID) DR + ON JP.StoreId=DR.StoreId WHERE Jp.VisitDate='${d2}' `; + console.log("ONEAPPSALEQRSCAN--", q) + return q; + + case 'KYCONEAPP': + // SELECT STORE_ID AS StoreId , IFNULL(COUNT(1),0) AS DATAROWCOUNT FROM ${AppTables.STOCK2HDR_DATA} WHERE VISIT_DATE='${d2}' and IS_UPDATED='1' GROUP BY STORE_ID + q = ` SELECT Jp.StoreId, ${MenuId} as MenuID, IFNULL(DR.DataRowCount,0) as DataRowCount FROM ${PJP_Table} JP LEFT OUTER JOIN + (SELECT STORE_ID AS StoreId , IFNULL(COUNT(1),0) AS DATAROWCOUNT FROM ${AppTables.STORE_KYC_INFO} WHERE VISIT_DATE='${d2}' GROUP BY STORE_ID) DR + ON JP.StoreId=DR.StoreId WHERE Jp.VisitDate='${d2}' `; + console.log("KYCONEAPP--", q) + return q; + + + case 'STOCKWITHCATEGORY': + q = `SELECT Jp.StoreId,${MenuId} as MenuID, IFNULL(DR.StoreDone,0) as DataRowCount FROM ${PJP_Table} JP + LEFT OUTER JOIN + (SELECT JP.StoreId,count(MC.CategoryId) as CatCount,count((CASE WHEN CR.StockCount>0 THEN 1 ElSE null END)) as CatDoneCount + ,CASE WHEN count(MC.CategoryId)==count((CASE WHEN CR.StockCount>0 THEN 1 ElSE null END)) THEN 1 ELSE 0 END as StoreDone + FROM ${PJP_Table} JP + CROSS JOIN (Select Distinct CategoryId,CategoryName from Product_Master p + INNER join Mapping_ProductAssortmentStorewise mp on p.ProductId=mp.ProductId where mp.StoreId=JP.StoreId) MC + LEFT OUTER JOIN + (SELECT STORE_ID AS StoreId ,CATEGORY_ID as CategoryId, IFNULL(COUNT(STOCK),0) AS StockCount FROM ${AppTables.STOCKWITHCAT_DATA} WHERE VISIT_DATE='${d2}' GROUP BY STORE_ID,CATEGORY_ID ) CR + ON JP.StoreId=CR.StoreId and MC.CategoryId=CR.CategoryId + GROUP BY JP.StoreId) DR + ON DR.StoreId=JP.StoreId Where Jp.VisitDate='${d2}' GROUP BY JP.StoreId`; + return q; + case 'OPSTOCK': + q = ` SELECT Jp.StoreId, ${MenuId} as MenuID, IFNULL(DR.DataRowCount,0) as DataRowCount FROM ${PJP_Table} JP LEFT OUTER JOIN + (SELECT STORE_ID AS StoreId , IFNULL(COUNT(1),0) AS DATAROWCOUNT FROM ${AppTables.STOCK_DATA} WHERE VISIT_DATE='${d2}' GROUP BY STORE_ID) DR + ON JP.StoreId=DR.StoreId WHERE Jp.VisitDate='${d2}'`; + return q; + case 'BACKSTOCK': + // q=`SELECT DISTINCT STOCK FROM ${AppTables.CHILD_BACK_OF_STORE} WHERE STORE_ID='${storeData.StoreId}' and VISIT_DATE='${d2}'`; + q = ` SELECT Jp.StoreId, ${MenuId} as MenuID, IFNULL(DR.DataRowCount,0) as DataRowCount FROM ${PJP_Table} JP LEFT OUTER JOIN + (SELECT STORE_ID AS StoreId , IFNULL(COUNT(1),0) AS DATAROWCOUNT FROM ${AppTables.CHILD_BACK_OF_STORE} WHERE VISIT_DATE='${d2}' GROUP BY STORE_ID) DR + ON JP.StoreId=DR.StoreId WHERE Jp.VisitDate='${d2}'`; + return q; + case 'MDSTOCK': + // q=`SELECT DISTINCT MIDDAY_STOCK FROM ${AppTables.STOCK_DATA} WHERE STORE_ID='${storeData.StoreId}' and VISIT_DATE='${d2}'`; + q = ` SELECT Jp.StoreId, ${MenuId} as MenuID, IFNULL(DR.DataRowCount,0) as DataRowCount FROM ${PJP_Table} JP LEFT OUTER JOIN + (SELECT DISTINCT MIDDAY_STOCK,STORE_ID AS StoreId , IFNULL(COUNT(1),0) AS DATAROWCOUNT FROM ${AppTables.STOCK_DATA} WHERE VISIT_DATE='${d2}' and MIDDAY_STOCK is not null and MIDDAY_STOCK!='' GROUP BY STORE_ID) DR + ON JP.StoreId=DR.StoreId WHERE Jp.VisitDate='${d2}'`; + + return q; + case 'CLSSTOCK': + // q=`SELECT DISTINCT CLOSING_STOCK FROM ${AppTables.STOCK_DATA} WHERE STORE_ID='${storeData.StoreId}' and VISIT_DATE='${d2}'`; + q = ` SELECT Jp.StoreId, ${MenuId} as MenuID, IFNULL(DR.DataRowCount,0) as DataRowCount FROM ${PJP_Table} JP LEFT OUTER JOIN + (SELECT DISTINCT CLOSING_STOCK,STORE_ID AS StoreId , IFNULL(COUNT(1),0) AS DATAROWCOUNT FROM ${AppTables.STOCK_DATA} WHERE VISIT_DATE='${d2}' and CLOSING_STOCK is not null and CLOSING_STOCK!='' GROUP BY STORE_ID) DR + ON JP.StoreId=DR.StoreId where Jp.VisitDate='${d2}' `; + return q; + case 'SOS': + // q=`SELECT * FROM ${AppTables.SHARE_OF_SHELF_IMAGE} WHERE STORE_ID='${storeData.StoreId}' and VISIT_DATE='${d2}' ` + q = ` SELECT Jp.StoreId, ${MenuId} as MenuID, IFNULL(DR.DataRowCount,0) as DataRowCount FROM ${PJP_Table} JP LEFT OUTER JOIN + (SELECT STORE_ID AS StoreId , IFNULL(COUNT(1),0) AS DATAROWCOUNT FROM ${AppTables.SHARE_OF_SHELF_IMAGE} WHERE VISIT_DATE='${d2}' GROUP BY STORE_ID) DR + ON JP.StoreId=DR.StoreId WHERE Jp.VisitDate='${d2}'`; + return q; + case 'PAIDVISI': + // q=`SELECT * FROM ${AppTables.PAID_VISIBILITY_CHILD_DATA} WHERE STORE_ID='${storeData.StoreId}' and VISIT_DATE='${d2}' ` + q = ` SELECT Jp.StoreId, ${MenuId} as MenuID, IFNULL(DR.DataRowCount,0) as DataRowCount FROM ${PJP_Table} JP LEFT OUTER JOIN + (SELECT STORE_ID AS StoreId , IFNULL(COUNT(1),0) AS DATAROWCOUNT FROM ${AppTables.PAID_VISIBILITY_CHILD_DATA} WHERE VISIT_DATE='${d2}' and IS_UPDATED='1' GROUP BY STORE_ID) DR + ON JP.StoreId=DR.StoreId WHERE Jp.VisitDate='${d2}'`; + return q; + + case 'RETURNSTOCKONEAPP': + q = ` SELECT Jp.StoreId, ${MenuId} as MenuID, IFNULL(DR.DataRowCount,0) as DataRowCount FROM ${PJP_Table} JP LEFT OUTER JOIN + (SELECT STORE_ID AS StoreId , IFNULL(COUNT(1),0) AS DATAROWCOUNT FROM ${AppTables.RETURN_STOCK} WHERE VISIT_DATE='${d2}' and IS_UPDATED='1' GROUP BY STORE_ID) DR + ON JP.StoreId=DR.StoreId WHERE Jp.VisitDate='${d2}'`; + return q; + + case 'ORDERSIMPLIFYONEAPP': + q = ` SELECT Jp.StoreId, ${MenuId} as MenuID, IFNULL(DR.DataRowCount,0) as DataRowCount FROM ${PJP_Table} JP LEFT OUTER JOIN + (SELECT STORE_ID AS StoreId , IFNULL(COUNT(1),0) AS DATAROWCOUNT FROM ${AppTables.ORDER_SIMPLIFY} WHERE VISIT_DATE='${d2}' and IS_UPDATED='1' GROUP BY STORE_ID) DR + ON JP.StoreId=DR.StoreId WHERE Jp.VisitDate='${d2}'`; + return q; + + case 'ADDITIONALVISI': + // q=`SELECT * FROM ${AppTables.ADDITIONAL_VISIBILITY} WHERE STORE_ID='${storeData.StoreId}' and VISIT_DATE='${d2}' ` + q = ` SELECT Jp.StoreId, ${MenuId} as MenuID, IFNULL(DR.DataRowCount,0) as DataRowCount FROM ${PJP_Table} JP LEFT OUTER JOIN + (SELECT STORE_ID AS StoreId , IFNULL(COUNT(1),0) AS DATAROWCOUNT FROM ${AppTables.ADDITIONAL_VISIBILITY} WHERE VISIT_DATE='${d2}' and IS_UPDATED='1' GROUP BY STORE_ID) DR + ON JP.StoreId=DR.StoreId WHERE Jp.VisitDate='${d2}'`; + return q; + case 'ADDITIONALVISI_IR': + // q=`SELECT * FROM ${AppTables.ADDITIONAL_VISIBILITY} WHERE STORE_ID='${storeData.StoreId}' and VISIT_DATE='${d2}' ` + q = ` SELECT Jp.StoreId, ${MenuId} as MenuID, IFNULL(DR.DataRowCount,0) as DataRowCount FROM ${PJP_Table} JP LEFT OUTER JOIN + (SELECT STORE_ID AS StoreId , IFNULL(COUNT(1),0) AS DATAROWCOUNT FROM ${AppTables.ADDITIONAL_VISIBILITY} WHERE VISIT_DATE='${d2}' and IS_UPDATED='1' GROUP BY STORE_ID) DR + ON JP.StoreId=DR.StoreId WHERE Jp.VisitDate='${d2}'`; + return q; + case 'ADDITIONALVISI_IR_ONLY': + // q=`SELECT * FROM ${AppTables.ADDITIONAL_VISIBILITY} WHERE STORE_ID='${storeData.StoreId}' and VISIT_DATE='${d2}' ` + q = ` SELECT Jp.StoreId, ${MenuId} as MenuID, IFNULL(DR.DataRowCount,0) as DataRowCount FROM ${PJP_Table} JP LEFT OUTER JOIN + (SELECT STORE_ID AS StoreId , IFNULL(COUNT(1),0) AS DATAROWCOUNT FROM ${AppTables.ADDITIONAL_VISIBILITY} WHERE VISIT_DATE='${d2}' and IS_UPDATED='1' GROUP BY STORE_ID) DR + ON JP.StoreId=DR.StoreId WHERE Jp.VisitDate='${d2}'`; + return q; + case 'COMPVISI': + // q=`SELECT * FROM ${AppTables.COMPETITION_VISIBILITY} WHERE STORE_ID='${storeData.StoreId}' and VISIT_DATE='${d2}' ` + q = ` SELECT Jp.StoreId, ${MenuId} as MenuID, IFNULL(DR.DataRowCount,0) as DataRowCount FROM ${PJP_Table} JP LEFT OUTER JOIN + (SELECT STORE_ID AS StoreId , IFNULL(COUNT(1),0) AS DATAROWCOUNT FROM ${AppTables.COMPETITION_VISIBILITY} WHERE VISIT_DATE='${d2}' GROUP BY STORE_ID) DR + ON JP.StoreId=DR.StoreId WHERE Jp.VisitDate='${d2}'`; + return q; + case 'COMPVISI_IR': + // q=`SELECT * FROM ${AppTables.COMPETITION_VISIBILITY} WHERE STORE_ID='${storeData.StoreId}' and VISIT_DATE='${d2}' ` + q = ` SELECT Jp.StoreId, ${MenuId} as MenuID, IFNULL(DR.DataRowCount,0) as DataRowCount FROM ${PJP_Table} JP LEFT OUTER JOIN + (SELECT STORE_ID AS StoreId , IFNULL(COUNT(1),0) AS DATAROWCOUNT FROM ${AppTables.COMPETITION_VISIBILITY} WHERE VISIT_DATE='${d2}' GROUP BY STORE_ID) DR + ON JP.StoreId=DR.StoreId WHERE Jp.VisitDate='${d2}'`; + return q; + case 'PROMOTION': + // q=`SELECT * FROM ${AppTables.PROMOTION_DATA} WHERE STORE_ID='${storeData.StoreId}' and VISIT_DATE='${d2}' ` + q = ` SELECT Jp.StoreId, ${MenuId} as MenuID, IFNULL(DR.DataRowCount,0) as DataRowCount FROM ${PJP_Table} JP LEFT OUTER JOIN + (SELECT STORE_ID AS StoreId , IFNULL(COUNT(1),0) AS DATAROWCOUNT FROM ${AppTables.PROMOTION_DATA} WHERE VISIT_DATE='${d2}' GROUP BY STORE_ID) DR + ON JP.StoreId=DR.StoreId WHERE Jp.VisitDate='${d2}'`; + return q; + + case 'COMPROMO': + // q=`SELECT * FROM ${AppTables.COMPETITION_PROMOTION} WHERE STORE_ID='${storeData.StoreId}' and VISIT_DATE='${d2}' ` + q = ` SELECT Jp.StoreId, ${MenuId} as MenuID, IFNULL(DR.DataRowCount,0) as DataRowCount FROM ${PJP_Table} JP LEFT OUTER JOIN + (SELECT STORE_ID AS StoreId , IFNULL(COUNT(1),0) AS DATAROWCOUNT FROM ${AppTables.COMPETITION_PROMOTION} WHERE VISIT_DATE='${d2}' GROUP BY STORE_ID) DR + ON JP.StoreId=DR.StoreId WHERE Jp.VisitDate='${d2}'`; + return q; + case 'CONCOV': + // q=`SELECT * FROM ${AppTables.CONTACT_CONVERSION} WHERE STORE_ID='${storeData.StoreId}' and VISIT_DATE='${d2}' ` + q = ` SELECT Jp.StoreId, ${MenuId} as MenuID, IFNULL(DR.DataRowCount,0) as DataRowCount FROM ${PJP_Table} JP LEFT OUTER JOIN + (SELECT STORE_ID AS StoreId , IFNULL(COUNT(1),0) AS DATAROWCOUNT FROM ${AppTables.CONTACT_CONVERSION} WHERE SCREEN_TYPE='Contact' AND VISIT_DATE='${d2}' GROUP BY STORE_ID) DR + ON JP.StoreId=DR.StoreId WHERE Jp.VisitDate='${d2}'`; + return q; + case 'SALE': + // q=`SELECT DISTINCT STOCK FROM ${AppTables.SALES} WHERE STORE_ID='${storeData.StoreId}' and VISIT_DATE='${d2}' ` + q = ` SELECT Jp.StoreId, ${MenuId} as MenuID, IFNULL(DR.DataRowCount,0) as DataRowCount FROM ${PJP_Table} JP LEFT OUTER JOIN + (SELECT STORE_ID AS StoreId , IFNULL(COUNT(1),0) AS DATAROWCOUNT FROM ${AppTables.SALES} WHERE VISIT_DATE='${d2}' GROUP BY STORE_ID) DR + ON JP.StoreId=DR.StoreId WHERE Jp.VisitDate='${d2}'`; + return q; + case 'ORDER': + // q=`SELECT DISTINCT STOCK FROM ${AppTables.SALES} WHERE STORE_ID='${storeData.StoreId}' and VISIT_DATE='${d2}' ` + q = ` SELECT Jp.StoreId, ${MenuId} as MenuID, IFNULL(DR.DataRowCount,0) as DataRowCount FROM ${PJP_Table} JP LEFT OUTER JOIN + (SELECT STORE_ID AS StoreId , IFNULL(COUNT(1),0) AS DATAROWCOUNT FROM ${AppTables.ORDER} WHERE VISIT_DATE='${d2}' GROUP BY STORE_ID) DR + ON JP.StoreId=DR.StoreId WHERE Jp.VisitDate='${d2}'`; + return q; + case 'ORDERSTATUS': + // q=` SELECT Jp.StoreId, ${MenuId} as MenuID, IFNULL(DR.DataRowCount,0) as DataRowCount FROM ${PJP_Table} JP LEFT OUTER JOIN + // (SELECT STORE_ID AS StoreId , IFNULL(COUNT(1),0) AS DATAROWCOUNT FROM ${AppTables.ORDERSTATUS} WHERE VISIT_DATE='${d2}' GROUP BY STORE_ID) DR + // ON JP.StoreId=DR.StoreId WHERE Jp.VisitDate='${d2}'`; + + + q = `select Distinct DR.StoreId,${MenuId} as MenuID, (CASE WHEN count(DR.OrderId)==count(DR.IsDone) THEN 1 ELSE 0 END) as DataRowCount + from + (select Distinct JP.StoreId,JP.VisitDate,p.OrderId,p2.ProductCount,(CASE WHEN o.FilledProdCount>0 THEN 1 ELSE null END) as IsDone from ${PJP_Table} as JP + INNER join PriviousVisit_Orders p on p.StoreId=JP.StoreId + LEFT OUTER JOIN (select OrderId,count(ProductId) as ProductCount from PriviousVisit_Orders GROUP BY OrderId ) p2 on p.OrderId=p2.OrderId + LEFT OUTER JOIN (Select ORDER_ID,count(ORDER_ID) as FilledProdCount from ORDER_STATUS where VISIT_DATE='${d2}' group by ORDER_ID) o on p.OrderId=o.ORDER_ID + )DR WHERE DR.VisitDate='${d2}' group by DR.StoreId`; + + return q; + case 'SURVEY': + q = `SELECT JP.StoreId, ${MenuId} as MenuID, DataRowCount FROM ${PJP_Table} JP + LEFT OUTER JOIN + (SELECT SR.StoreId,SR.ShowCat,(CASE WHEN Count(SR.SurveyId) = count(CASE WHEN SR.SurveyDone==1 THEN 1 ELSE null END) + THEN 1 ELSE 0 END) as DataRowCount FROM + (SELECT DISTINCT JP.StoreId,T.SurveyId,T.ShowCat,(CASE WHEN SF.Qtns>0 THEN 1 ELSE 0 END ) AS SurveyDone FROM Master_SurveyQuestion T + INNER JOIN Mapping_Survey M ON T.SurveyId=M.SurveyId + INNER JOIN ${PJP_Table} JP ON M.StoreId=JP.StoreId + LEFT OUTER JOIN + ( + SELECT T1.STORE_ID AS StoreId, T1.SURVEY_ID AS SurveyId, CASE WHEN COUNT(T1.QUESTION_ID) = M.TotalQuestion THEN 1 ELSE 0 END AS Qtns from ${AppTables.SURVEY} T1 + INNER JOIN ( SELECT m.StoreId, m.SurveyId, COUNT(DISTINCT t.QuestionId) AS TotalQuestion FROM Mapping_Survey m + INNER JOIN ${PJP_Table} n ON n.StoreId = m.StoreId INNER JOIN Master_SurveyQuestion t ON t.SurveyId = m.SurveyId WHERE t.MenuId = '${MenuId}' + GROUP BY m.StoreId, m.SurveyId + ) AS M ON M.StoreId = T1.STORE_ID AND M.SurveyId = T1.SURVEY_ID + where T1.VISIT_DATE='${d2}' and T1.MENU_ID='${MenuId}' + GROUP BY T1.STORE_ID,T1.SURVEY_ID, M.TotalQuestion + + ) SF + on T.SurveyId=SF.SurveyId and JP.StoreId=SF.StoreId Where T.MenuId='${MenuId}') SR GROUP BY SR.StoreId ) DR + ON JP.StoreId=DR.StoreId WHERE JP.VisitDate='${d2}' + + + UNION + + SELECT JP.StoreId, ${MenuId} as MenuID, DR.DataRowCount as DataRowCount FROM ${PJP_Table} JP + LEFT OUTER JOIN + (SELECT SR.StoreId,SR.ShowCat, (CASE WHEN Count(SR.SurveyId) = count(CASE WHEN SR.SurveyDone==1 THEN 1 ELSE null END) THEN 1 ELSE 0 END) as DataRowCount + FROM + (SELECT DISTINCT JP.StoreId,T.SurveyId,SCF.ShowCat,(CASE WHEN count(SCF.CategoryId) = count(CASE WHEN SCF.SurveyCatDone=1 THEN 1 ELSE null END) and count(SCF.CategoryId)>0 THEN 1 ELSE 0 END ) as SurveyDone + FROM (Select DISTINCT SurveyId,ShowCat, CategoryId from Master_SurveyQuestion Where MenuId='${MenuId}') T + INNER JOIN Mapping_Survey M ON T.SurveyId=M.SurveyId + INNER JOIN ${PJP_Table} JP ON M.StoreId=JP.StoreId + LEFT OUTER JOIN + + (SELECT DISTINCT JP.StoreId,T.SurveyId,T.ShowCat,T.CategoryId,(CASE WHEN count(SF.Qtns)>0 THEN 1 ELSE 0 END) as SurveyCatDone + FROM Master_SurveyQuestion T + INNER JOIN Mapping_Survey M ON T.SurveyId=M.SurveyId + INNER JOIN ${PJP_Table} JP ON M.StoreId=JP.StoreId + LEFT OUTER JOIN + ( SELECT DISTINCT T1.STORE_ID as StoreId,T1.SURVEY_ID as SurveyId,T1.CATEGORY_ID as CategoryId,count(T1.QUESTION_ID) as Qtns from ${AppTables.SURVEY} T1 where VISIT_DATE='${d2}' and MENU_ID='${MenuId}' GROUP BY STORE_ID,SURVEY_ID,CATEGORY_ID) SF + on T.SurveyId=SF.SurveyId and JP.StoreId=SF.StoreId and T.CategoryId=SF.CategoryId + Where T.MenuId='${MenuId}' + + GROUP BY JP.StoreId,T.SurveyId,T.CategoryId + ) SCF on M.StoreId=SCF.StoreId and T.SurveyId=SCF.SurveyId and T.CategoryId=SCF.CategoryId + GROUP BY JP.StoreId,T.SurveyId + ) SR GROUP BY SR.StoreId + )DR on JP.StoreId=DR.StoreId WHERE JP.VisitDate='${d2}' + + `; + // console.log('survey done q:',q); + // AND DR.ShowCat='1' + //AND DR.ShowCat='0' + + // q=`SELECT JP.StoreId, ${MenuId} as MenuID, DataRowCount FROM ${PJP_Table} JP + // LEFT OUTER JOIN + // (SELECT SR.StoreId,SR.ShowCat,(CASE WHEN Count(SR.SurveyId) = count(CASE WHEN SR.SurveyDone==1 THEN 1 ELSE null END) THEN 1 ELSE 0 END) as DataRowCount + // FROM + // (SELECT DISTINCT JP.StoreId,T.SurveyId,T.ShowCat,(CASE WHEN SF.Qtns>0 THEN 1 ELSE 0 END ) AS SurveyDone FROM Master_SurveyQuestion T + // INNER JOIN Mapping_Survey M ON T.SurveyId=M.SurveyId + // INNER JOIN ${PJP_Table} JP ON M.StoreId=JP.StoreId + // LEFT OUTER JOIN + // ( SELECT DISTINCT T1.STORE_ID as StoreId,T1.SURVEY_ID as SurveyId,count(T1.QUESTION_ID ) as Qtns from ${AppTables.SURVEY} T1 where VISIT_DATE='${d2}' and MENU_ID='${MenuId}' GROUP BY STORE_ID,SURVEY_ID) SF + // on T.SurveyId=SF.SurveyId and JP.StoreId=SF.StoreId Where T.MenuId='${MenuId}') SR GROUP BY SR.StoreId ) DR + // ON JP.StoreId=DR.StoreId WHERE JP.VisitDate='${d2}' + + + + // UNION + + + + // SELECT JP.StoreId, ${MenuId} as MenuID, DR.DataRowCount as DataRowCount FROM ${PJP_Table} JP + // LEFT OUTER JOIN + // (SELECT SR.StoreId,SR.ShowCat, (CASE WHEN Count(SR.SurveyId) = count(CASE WHEN SR.SurveyDone==1 THEN 1 ELSE null END) THEN 1 ELSE 0 END) as DataRowCount + // FROM + // (SELECT DISTINCT JP.StoreId,T.SurveyId,SCF.ShowCat,(CASE WHEN count(SCF.CategoryId) = count(CASE WHEN SCF.SurveyCatDone=1 THEN 1 ELSE null END) and count(SCF.CategoryId)>0 THEN 1 ELSE 0 END ) as SurveyDone + // FROM (Select DISTINCT SurveyId,ShowCat, CategoryId from Master_SurveyQuestion Where MenuId='${MenuId}') T + // INNER JOIN Mapping_Survey M ON T.SurveyId=M.SurveyId + // INNER JOIN ${PJP_Table} JP ON M.StoreId=JP.StoreId + // LEFT OUTER JOIN + + // (SELECT DISTINCT JP.StoreId,T.SurveyId,T.ShowCat,T.CategoryId,(CASE WHEN count(SF.Qtns)>0 THEN 1 ELSE 0 END) as SurveyCatDone + // FROM Master_SurveyQuestion T + // INNER JOIN Mapping_Survey M ON T.SurveyId=M.SurveyId + // INNER JOIN ${PJP_Table} JP ON M.StoreId=JP.StoreId + // LEFT OUTER JOIN + // ( SELECT DISTINCT T1.STORE_ID as StoreId,T1.SURVEY_ID as SurveyId,T1.CATEGORY_ID as CategoryId,count(T1.QUESTION_ID) as Qtns from ${AppTables.SURVEY} T1 where VISIT_DATE='${d2}' and MENU_ID='${MenuId}' GROUP BY STORE_ID,SURVEY_ID,CATEGORY_ID) SF + // on T.SurveyId=SF.SurveyId and JP.StoreId=SF.StoreId and T.CategoryId=SF.CategoryId + // Where T.MenuId='${MenuId}' + + // GROUP BY JP.StoreId,T.SurveyId,T.CategoryId + // ) SCF on M.StoreId=SCF.StoreId and T.SurveyId=SCF.SurveyId and T.CategoryId=SCF.CategoryId + // GROUP BY JP.StoreId,T.SurveyId + // ) SR GROUP BY SR.StoreId + // )DR on JP.StoreId=DR.StoreId WHERE JP.VisitDate='${d2}' + + + // `; + return q; + + case 'WINDOW': + // q=`SELECT DISTINCT WINDOW_DEFINITION_ID FROM ${AppTables.WINDOW_HDR_DATA} WHERE STORE_ID='${storeData.StoreId}' and VISIT_DATE='${d2}' `; + q = ` SELECT Jp.StoreId, ${MenuId} as MenuID, IFNULL(DR.DataRowCount,0) as DataRowCount FROM ${PJP_Table} JP LEFT OUTER JOIN + (SELECT STORE_ID AS StoreId , IFNULL(COUNT(1),0) AS DATAROWCOUNT FROM ${AppTables.WINDOW_HDR_DATA} WHERE VISIT_DATE='${d2}' and MENU_ID='${MenuId}' GROUP BY STORE_ID) DR + ON JP.StoreId=DR.StoreId WHERE Jp.VisitDate='${d2}'`; + return q; + case 'WINDOW_IR': + // q=`SELECT DISTINCT WINDOW_DEFINITION_ID FROM ${AppTables.WINDOW_HDR_DATA} WHERE STORE_ID='${storeData.StoreId}' and VISIT_DATE='${d2}' `; + q = ` SELECT Jp.StoreId, ${MenuId} as MenuID, IFNULL(DR.DataRowCount,0) as DataRowCount FROM ${PJP_Table} JP LEFT OUTER JOIN + (SELECT STORE_ID AS StoreId , IFNULL(COUNT(1),0) AS DATAROWCOUNT FROM ${AppTables.WINDOW_HDR_DATA} WHERE VISIT_DATE='${d2}' and MENU_ID='${MenuId}' GROUP BY STORE_ID) DR + ON JP.StoreId=DR.StoreId WHERE Jp.VisitDate='${d2}'`; + return q; + case 'POSM': + // q=`SELECT DISTINCT POSM_DEFINITION_ID FROM ${AppTables.POSM_HDR_DATA} WHERE STORE_ID='${storeData.StoreId}' and VISIT_DATE='${d2}' `; + q = ` SELECT Jp.StoreId, ${MenuId} as MenuID, IFNULL(DR.DataRowCount,0) as DataRowCount FROM ${PJP_Table} JP LEFT OUTER JOIN + (SELECT STORE_ID AS StoreId , IFNULL(COUNT(1),0) AS DATAROWCOUNT FROM ${AppTables.POSM_HDR_DATA} WHERE VISIT_DATE='${d2}' and IS_UPDATED='1' GROUP BY STORE_ID) DR + ON JP.StoreId=DR.StoreId WHERE Jp.VisitDate='${d2}'`; + return q; + case 'FEEDBACK': + // q=`SELECT DISTINCT QUESTION_ID FROM ${AppTables.FEEDBACK_DATA} WHERE STORE_ID='${storeData.StoreId}' and VISIT_DATE='${d2}' `; + q = ` SELECT Jp.StoreId, ${MenuId} as MenuID, IFNULL(DR.DataRowCount,0) as DataRowCount FROM ${PJP_Table} JP LEFT OUTER JOIN + (SELECT STORE_ID AS StoreId , IFNULL(COUNT(1),0) AS DATAROWCOUNT FROM ${AppTables.FEEDBACK_DATA} WHERE VISIT_DATE='${d2}' GROUP BY STORE_ID) DR + ON JP.StoreId=DR.StoreId WHERE Jp.VisitDate='${d2}'`; + return q; + case 'PROMOTION2': + // q=`SELECT * FROM ${AppTables.SIMPLE_PROMOTION_DATA} WHERE STORE_ID='${storeData.StoreId}' and VISIT_DATE='${d2}' ` + q = ` SELECT Jp.StoreId, ${MenuId} as MenuID, IFNULL(DR.DataRowCount,0) as DataRowCount FROM ${PJP_Table} JP LEFT OUTER JOIN + (SELECT STORE_ID AS StoreId , IFNULL(COUNT(1),0) AS DATAROWCOUNT FROM ${AppTables.SIMPLE_PROMOTION_DATA} WHERE VISIT_DATE='${d2}' GROUP BY STORE_ID) DR + ON JP.StoreId=DR.StoreId WHERE Jp.VisitDate='${d2}'`; + return q; + case 'STOREIMG': + // q=`SELECT * FROM ${AppTables.STORE_IMAGES} WHERE STORE_ID='${storeData.StoreId}' and VISIT_DATE='${d2}' ` + // q=` SELECT Jp.StoreId, ${MenuId} as MenuID, IFNULL(DR.DataRowCount,0) as DataRowCount FROM ${PJP_Table} JP LEFT OUTER JOIN + // (SELECT STORE_ID AS StoreId , IFNULL(COUNT(1),0) AS DATAROWCOUNT FROM ${AppTables.STORE_IMAGES} WHERE VISIT_DATE='${d2}' GROUP BY STORE_ID) DR + // ON JP.StoreId=DR.StoreId WHERE Jp.VisitDate='${d2}'`; + + q = `SELECT StoreId , ${MenuId} as MenuID, (CASE WHEN count(d.ImageTypeId)=count(d.isStImageDone) THEN 1 ELSE 0 END) as DATAROWCOUNT from ( + select distinct jtbl.StoreId,jtbl.ImageTypeId,jtbl.ImageType,jtbl.MinImage, count(i.IMAGE) as ImageCount,(CASE WHEN count(i.IMAGE)>=jtbl.MinImage THEN 1 ELSE NULL END ) isStImageDone + from (select JPTbl.*,m.ImageTypeId,m.ImageType,m.MinImage from ${PJP_Table} JPTbl cross join Master_ImageType m ) jtbl + Left Outer join ${AppTables.STORE_IMAGES} i on jtbl.ImageTypeId=i.IMAGE_TYPE_ID and jtbl.StoreId=i.STORE_ID and i.VISIT_DATE='${d2}' + group by jtbl.StoreId,jtbl.ImageTypeId + ) d GROUP BY StoreId` + + + // console.log("DataRowCount-----d",q) + return q; + + case 'SHELFTALKER': + // q=`SELECT DISTINCT ST_DEFINITION_ID FROM ${AppTables.ST_HDR_DATA} WHERE STORE_ID='${storeData.StoreId}' and VISIT_DATE='${d2}' ` + q = ` SELECT Jp.StoreId, ${MenuId} as MenuID, IFNULL(DR.DataRowCount,0) as DataRowCount FROM ${PJP_Table} JP LEFT OUTER JOIN + (SELECT STORE_ID AS StoreId , IFNULL(COUNT(1),0) AS DATAROWCOUNT FROM ${AppTables.ST_HDR_DATA} WHERE VISIT_DATE='${d2}' GROUP BY STORE_ID) DR + ON JP.StoreId=DR.StoreId WHERE Jp.VisitDate='${d2}'`; + return q; + + case 'PROMOTIONONEAPP': + // q=`SELECT DISTINCT PROMO_DEFINITION_ID FROM ${AppTables.PROMO_HDR_DATA} WHERE STORE_ID='${storeData.StoreId}' and VISIT_DATE='${d2}' ` + q = ` SELECT Jp.StoreId, ${MenuId} as MenuID, IFNULL(DR.DataRowCount,0) as DataRowCount FROM ${PJP_Table} JP LEFT OUTER JOIN + (SELECT STORE_ID AS StoreId , IFNULL(COUNT(1),0) AS DATAROWCOUNT FROM ${AppTables.PROMO_HDR_DATA} WHERE VISIT_DATE='${d2}' and IS_UPDATED='1' GROUP BY STORE_ID) DR + ON JP.StoreId=DR.StoreId WHERE Jp.VisitDate='${d2}'`; + return q; + case 'PROMOTIONONEAPP_IR': + // q=`SELECT DISTINCT PROMO_DEFINITION_ID FROM ${AppTables.PROMO_HDR_DATA} WHERE STORE_ID='${storeData.StoreId}' and VISIT_DATE='${d2}' ` + q = ` SELECT Jp.StoreId, ${MenuId} as MenuID, IFNULL(DR.DataRowCount,0) as DataRowCount FROM ${PJP_Table} JP LEFT OUTER JOIN + (SELECT STORE_ID AS StoreId , IFNULL(COUNT(1),0) AS DATAROWCOUNT FROM ${AppTables.PROMO_HDR_DATA} WHERE VISIT_DATE='${d2}' and IS_UPDATED='1' GROUP BY STORE_ID) DR + ON JP.StoreId=DR.StoreId WHERE Jp.VisitDate='${d2}'`; + return q; + case 'PAIDVISIONEAPP': + // q=`SELECT DISTINCT PVIS_DEFINITION_ID FROM ${AppTables.PAIDVIS_HDR_DATA} WHERE STORE_ID='${storeData.StoreId}' and VISIT_DATE='${d2}' ` + q = ` SELECT Jp.StoreId, ${MenuId} as MenuID, IFNULL(DR.DataRowCount,0) as DataRowCount FROM ${PJP_Table} JP LEFT OUTER JOIN + (SELECT STORE_ID AS StoreId , IFNULL(COUNT(1),0) AS DATAROWCOUNT FROM ${AppTables.PAIDVIS_HDR_DATA} WHERE VISIT_DATE='${d2}' and MENU_ID='${MenuId}' and IS_UPDATED='1' GROUP BY STORE_ID) DR + ON JP.StoreId=DR.StoreId WHERE Jp.VisitDate='${d2}'`; + return q; + case 'WAREHOUSEDEPLOY': + // q=`SELECT DISTINCT PVIS_DEFINITION_ID FROM ${AppTables.PAIDVIS_HDR_DATA} WHERE STORE_ID='${storeData.StoreId}' and VISIT_DATE='${d2}' ` + q = ` SELECT Jp.StoreId, ${MenuId} as MenuID, IFNULL(DR.DataRowCount,0) as DataRowCount FROM ${PJP_Table} JP LEFT OUTER JOIN + (SELECT STORE_ID AS StoreId , IFNULL(COUNT(1),0) AS DATAROWCOUNT FROM ${AppTables.WAREHOUSE_HDR_DATA} WHERE VISIT_DATE='${d2}' and MENU_ID='${MenuId}' GROUP BY STORE_ID) DR + ON JP.StoreId=DR.StoreId WHERE Jp.VisitDate='${d2}'`; + return q; + case 'WAREHOUSECAMPAIGN': + // q=`SELECT DISTINCT PVIS_DEFINITION_ID FROM ${AppTables.PAIDVIS_HDR_DATA} WHERE STORE_ID='${storeData.StoreId}' and VISIT_DATE='${d2}' ` + q = ` SELECT Jp.StoreId, ${MenuId} as MenuID, IFNULL(DR.DataRowCount,0) as DataRowCount FROM ${PJP_Table} JP LEFT OUTER JOIN + (SELECT STORE_ID AS StoreId , IFNULL(COUNT(1),0) AS DATAROWCOUNT FROM ${AppTables.WAREHOUSE_CAMPAIGN_HDR_DATA} WHERE VISIT_DATE='${d2}' and MENU_ID='${MenuId}' GROUP BY STORE_ID) DR + ON JP.StoreId=DR.StoreId WHERE Jp.VisitDate='${d2}'`; + return q; + case 'PAIDVISIONEAPP_IR': + // q=`SELECT DISTINCT PVIS_DEFINITION_ID FROM ${AppTables.PAIDVIS_HDR_DATA} WHERE STORE_ID='${storeData.StoreId}' and VISIT_DATE='${d2}' ` + q = ` SELECT Jp.StoreId, ${MenuId} as MenuID, IFNULL(DR.DataRowCount,0) as DataRowCount FROM ${PJP_Table} JP LEFT OUTER JOIN + (SELECT STORE_ID AS StoreId , IFNULL(COUNT(1),0) AS DATAROWCOUNT FROM ${AppTables.PAIDVIS_HDR_DATA} WHERE VISIT_DATE='${d2}' and MENU_ID='${MenuId}' and IS_UPDATED='1' GROUP BY STORE_ID) DR + ON JP.StoreId=DR.StoreId WHERE Jp.VisitDate='${d2}'`; + return q; + case 'PAIDVISIONEAPP_IR_ONLY': + // q=`SELECT DISTINCT PVIS_DEFINITION_ID FROM ${AppTables.PAIDVIS_HDR_DATA} WHERE STORE_ID='${storeData.StoreId}' and VISIT_DATE='${d2}' ` + q = ` SELECT Jp.StoreId, ${MenuId} as MenuID, IFNULL(DR.DataRowCount,0) as DataRowCount FROM ${PJP_Table} JP LEFT OUTER JOIN + (SELECT STORE_ID AS StoreId , IFNULL(COUNT(1),0) AS DATAROWCOUNT FROM ${AppTables.PAIDVIS_HDR_DATA} WHERE VISIT_DATE='${d2}' and MENU_ID='${MenuId}' and IS_UPDATED='1' GROUP BY STORE_ID) DR + ON JP.StoreId=DR.StoreId WHERE Jp.VisitDate='${d2}'`; + return q; + + case 'SOSONEAPP': + // q=`SELECT DISTINCT SOS_DEFINITION_ID FROM ${AppTables.SOS_HDR_DATA} WHERE STORE_ID='${storeData.StoreId}' and VISIT_DATE='${d2}' ` + q = ` SELECT Jp.StoreId, ${MenuId} as MenuID, IFNULL(DR.DataRowCount,0) as DataRowCount FROM ${PJP_Table} JP LEFT OUTER JOIN + (SELECT STORE_ID AS StoreId , IFNULL(COUNT(1),0) AS DATAROWCOUNT FROM ${AppTables.SOS_CHILD_DATA} WHERE VISIT_DATE='${d2}' GROUP BY STORE_ID) DR + ON JP.StoreId=DR.StoreId WHERE Jp.VisitDate='${d2}'`; + return q; + case 'SOSONEAPP_IR': + // q=`SELECT DISTINCT SOS_DEFINITION_ID FROM ${AppTables.SOS_HDR_DATA} WHERE STORE_ID='${storeData.StoreId}' and VISIT_DATE='${d2}' ` + q = ` SELECT Jp.StoreId, ${MenuId} as MenuID, IFNULL(DR.DataRowCount,0) as DataRowCount FROM ${PJP_Table} JP LEFT OUTER JOIN + (SELECT STORE_ID AS StoreId , IFNULL(COUNT(1),0) AS DATAROWCOUNT FROM ${AppTables.SOS_CHILD_DATA} WHERE VISIT_DATE='${d2}' GROUP BY STORE_ID) DR + ON JP.StoreId=DR.StoreId WHERE Jp.VisitDate='${d2}'`; + return q; + case 'SOSONEAPP_IR_ONLY': + // q=`SELECT DISTINCT SOS_DEFINITION_ID FROM ${AppTables.SOS_HDR_DATA} WHERE STORE_ID='${storeData.StoreId}' and VISIT_DATE='${d2}' ` + q = ` SELECT Jp.StoreId, ${MenuId} as MenuID, IFNULL(DR.DataRowCount,0) as DataRowCount FROM ${PJP_Table} JP LEFT OUTER JOIN + (SELECT STORE_ID AS StoreId , IFNULL(COUNT(1),0) AS DATAROWCOUNT FROM ${AppTables.SOS_CHILD_DATA} WHERE VISIT_DATE='${d2}' GROUP BY STORE_ID) DR + ON JP.StoreId=DR.StoreId WHERE Jp.VisitDate='${d2}'`; + return q; + case 'CATEXEONEAPP': + // q=`SELECT DISTINCT SOS_DEFINITION_ID FROM ${AppTables.SOS_HDR_DATA} WHERE STORE_ID='${storeData.StoreId}' and VISIT_DATE='${d2}' ` + q = ` SELECT Jp.StoreId, ${MenuId} as MenuID, IFNULL(DR.DataRowCount,0) as DataRowCount FROM ${PJP_Table} JP LEFT OUTER JOIN + (SELECT STORE_ID AS StoreId , IFNULL(COUNT(1),0) AS DATAROWCOUNT FROM ${AppTables.CATEXE_HDR_DATA} WHERE VISIT_DATE='${d2}' GROUP BY STORE_ID) DR + ON JP.StoreId=DR.StoreId WHERE Jp.VisitDate='${d2}'`; + return q; + case 'STORESCORE': + q = ` SELECT Jp.StoreId, ${MenuId} as MenuID, 1 as DataRowCount FROM ${PJP_Table} JP`; + return q; + case 'TRAININGONEAPP': + q = ` SELECT Jp.StoreId, ${MenuId} as MenuID, 1 as DataRowCount FROM ${PJP_Table} JP`; + return q; + case 'SAMPLINGONEAPP': + //count(CASE WHEN l.ISFILLED='1' THEN 1 ELSE NULL END) as DataRowCount, + // (CASE WHEN (count(CASE WHEN l.ISFILLED='1' THEN 1 ELSE NULL END))==count(T.SamplingDefinitionId) THEN 1 ELSE 0 END ) as DataRowCount + q = ` SELECT DR.StoreId, ${MenuId} as MenuID, IFNULL(DR.DataRowCount,0) as DataRowCount + FROM + (SELECT JP1.StoreId, + (CASE WHEN (count(CASE WHEN l.ISFILLED='1' THEN 1 ELSE NULL END))==count(T.SamplingDefinitionId) THEN 1 ELSE 0 END ) as DataRowCount, + + count(T.SamplingDefinitionId) as SamplingAvlblCount + + From ${PJP_Table} JP1 + INNER JOIN Mapping_StoreSampling M on JP1.StoreId=M.StoreId + INNER JOIN Master_SamplingDefinition T ON T.SamplingDefinitionId=M.SamplingDefinitionId + Left Outer Join ${AppTables.SAMPLING_LIST} l on T.SamplingDefinitionId=l.SAMPLING_DEFINITION_ID and JP1.StoreId=l.STORE_ID and l.VISIT_DATE='${d2}' + GROUP BY JP1.StoreId) DR ` + + return q; + case 'POSSALEONEAPP': + q = ` SELECT Jp.StoreId, ${MenuId} as MenuID, IFNULL(DR.DataRowCount,0) as DataRowCount FROM ${PJP_Table} JP LEFT OUTER JOIN + (SELECT STORE_ID AS StoreId , IFNULL(COUNT(1),0) AS DATAROWCOUNT FROM ${AppTables.POSSALE_DATA} WHERE VISIT_DATE='${d2}' GROUP BY STORE_ID) DR + ON JP.StoreId=DR.StoreId WHERE Jp.VisitDate='${d2}'`; + return q; + + case 'PROGRAMONEAPP': + q = ` SELECT Jp.StoreId, ${MenuId} as MenuID, IFNULL(DR.DataRowCount,0) as DataRowCount FROM ${PJP_Table} JP LEFT OUTER JOIN + (SELECT STORE_ID AS StoreId , IFNULL(COUNT(1),0) AS DATAROWCOUNT FROM ${AppTables.PROGRAM_HDR_DATA} WHERE VISIT_DATE='${d2}' and MENU_ID='${MenuId}' and IS_UPDATED='1' GROUP BY STORE_ID) DR + ON JP.StoreId=DR.StoreId WHERE Jp.VisitDate='${d2}'`; + return q; + case 'TGBASEDONEAPP': + // q=`SELECT DISTINCT PVIS_DEFINITION_ID FROM ${AppTables.PAIDVIS_HDR_DATA} WHERE STORE_ID='${storeData.StoreId}' and VISIT_DATE='${d2}' ` + q = ` SELECT Jp.StoreId, ${MenuId} as MenuID, IFNULL(DR.DataRowCount,0) as DataRowCount FROM ${PJP_Table} JP LEFT OUTER JOIN + (SELECT STORE_ID AS StoreId , IFNULL(COUNT(1),0) AS DATAROWCOUNT FROM ${AppTables.VISICO_HDR_DATA} WHERE VISIT_DATE='${d2}' and MENU_ID='${MenuId}' and IS_UPDATED='1' GROUP BY STORE_ID) DR + ON JP.StoreId=DR.StoreId WHERE Jp.VisitDate='${d2}'`; + return q; + case 'STOREDYNAMICSCORE': + // q=`SELECT DISTINCT PVIS_DEFINITION_ID FROM ${AppTables.PAIDVIS_HDR_DATA} WHERE STORE_ID='${storeData.StoreId}' and VISIT_DATE='${d2}' ` + q = ` SELECT Jp.StoreId, ${MenuId} as MenuID, 1 as DataRowCount FROM ${PJP_Table} JP WHERE Jp.VisitDate='${d2}'` + return q; + case 'ONEAPPMISSEDCALL': + // q=`SELECT DISTINCT PVIS_DEFINITION_ID FROM ${AppTables.PAIDVIS_HDR_DATA} WHERE STORE_ID='${storeData.StoreId}' and VISIT_DATE='${d2}' ` + q = ` SELECT Jp.StoreId, ${MenuId} as MenuID, IFNULL(DR.DataRowCount,0) as DataRowCount FROM ${PJP_Table} JP LEFT OUTER JOIN + (SELECT STORE_ID AS StoreId , IFNULL(COUNT(1),0) AS DATAROWCOUNT FROM ${AppTables.MISSED_CALL} WHERE VISIT_DATE='${d2}' and IS_UPDATED='1' GROUP BY STORE_ID) DR + ON JP.StoreId=DR.StoreId WHERE Jp.VisitDate='${d2}'`; + return q; + + case 'SOSEYELEVELONEAPP': + // q=`SELECT DISTINCT SOS_DEFINITION_ID FROM ${AppTables.SOS_HDR_DATA} WHERE STORE_ID='${storeData.StoreId}' and VISIT_DATE='${d2}' ` + q = ` SELECT Jp.StoreId, ${MenuId} as MenuID, IFNULL(DR.DataRowCount,0) as DataRowCount FROM ${PJP_Table} JP LEFT OUTER JOIN + (SELECT STORE_ID AS StoreId , IFNULL(COUNT(1),0) AS DATAROWCOUNT FROM ${AppTables.EYE_LEVEL_CHILD_DATA} WHERE VISIT_DATE='${d2}' GROUP BY STORE_ID) DR + ON JP.StoreId=DR.StoreId WHERE Jp.VisitDate='${d2}'`; + return q; + + case 'BREAKTIME': + + // q=`SELECT JP.StoreId, ${MenuId} as MenuID, IFNULL(DR.DataRowCount,0) as DataRowCount + // FROM ${PJP_Table} JP LEFT OUTER JOIN( + // SELECT STORE_ID AS StoreId , (CASE WHEN count(c.Status)=count(c.BreakId) THEN 1 ELSE 0 END) AS DATAROWCOUNT FROM + // (SELECT DISTINCT B.STORE_ID,B.VISIT_DATE,B.BreakId ,A.MINNUMBER,A.MAXNUMBER,B.COUNT, CASE WHEN B.COUNT>=A.MINNUMBER THEN 1 ELSE null END AS STATUS FROM + // (select BreakId ,MINNUMBER,MAXNUMBER from ${AppTables.BREAKTIME} WHERE VISIT_DATE='06/12/2023' )A + // LEFT JOIN (select store_id, VISIT_DATE,breakid , count (*) as count from ${AppTables.BREAKTIME} group by store_id, VISIT_DATE,breakid) B + // ON A.BreakId=B.BreakId ) c + // INNER JOIN Master_Break T ON T.BreakId=c.breakid + // ) DR ON JP.StoreId=DR.StoreId WHERE Jp.VisitDate='${d2}'` + + // q=`SELECT StoreId , ${MenuId} as MenuID, (CASE WHEN count(d.BreakId)=count(d.isStImageDone) THEN 1 ELSE 0 END) as DATAROWCOUNT from + // (select distinct jtbl.StoreId,jtbl.BreakId,jtbl.Break_Name,jtbl.Minimum, + // count(i.BREAKID) as BreakCount,(CASE WHEN count(i.BREAKID)>=jtbl.Minimum THEN 1 ELSE NULL END ) isStImageDone + // from + // (select JPTbl.*,m.BreakId,m.Break_Name,m.Minimum from ${PJP_Table} JPTbl cross join Master_Break m ) jtbl + // Left Outer join ${AppTables.BREAKTIME} i on jtbl.BreakId=i.BREAKID and jtbl.StoreId=i.STORE_ID and i.VISIT_DATE='${d2}' + // group by jtbl.StoreId,jtbl.BreakId + // ) d GROUP BY StoreId` + + q = `SELECT StoreId , ${MenuId} as MenuID, (CASE WHEN count(d.isStImageDone) THEN 1 ELSE 0 END) as DATAROWCOUNT from + (select distinct jtbl.StoreId,jtbl.BreakId,jtbl.Break_Name,jtbl.Minimum, + count(i.BREAKID) as BreakCount,(CASE WHEN count(i.BREAKID)>=jtbl.Minimum THEN 1 ELSE NULL END ) isStImageDone + from + (select JPTbl.*,m.BreakId,m.Break_Name,m.Minimum from ${PJP_Table} JPTbl cross join Master_Break m ) jtbl + Left Outer join ${AppTables.BREAKTIME} i on jtbl.BreakId=i.BREAKID and jtbl.StoreId=i.STORE_ID and i.VISIT_DATE='${d2}' + group by jtbl.StoreId,jtbl.BreakId + ) d GROUP BY StoreId` + + console.log("BreakTime list q:1", q) + return q; + + default: return ''; + + } +} + +export async function getIfKPIDone(ScreenName, txnres2, storeData) { + let isDone = false; + switch (ScreenName) { + case 'STOCK': + if (txnres2.rows.length > 0) { + let sdata = txnres2.rows.item(0); + if (sdata.STORE_ID != null && sdata.STORE_ID != '') isDone = true; + } + return isDone; + + case 'STOCKWITHCATEGORY': + let isDone = await checkIf_StockWithCat_KPIDone(txnres2, storeData); + return isDone; + case 'OPSTOCK': + if (txnres2.rows.length > 0) { + let sdata = txnres2.rows.item(0); + if (sdata.STORE_ID != null && sdata.STORE_ID != '') isDone = true; + } + return isDone; + case 'BACKSTOCK': + if (txnres2.rows.length > 0) { + let sdata = txnres2.rows.item(0); + if (sdata.STOCK === 0 || (sdata.STOCK != null && sdata.STOCK != '')) isDone = true; + } + return isDone; + case 'MDSTOCK': + if (txnres2.rows.length > 0) { + let sdata = txnres2.rows.item(0); + if (sdata.MIDDAY_STOCK === 0 || (sdata.MIDDAY_STOCK != null && sdata.MIDDAY_STOCK != '')) isDone = true; + } + return isDone; + case 'CLSSTOCK': + if (txnres2.rows.length > 0) { + let sdata = txnres2.rows.item(0); + if (sdata.CLOSING_STOCK === 0 || (sdata.CLOSING_STOCK != null && sdata.CLOSING_STOCK != '')) isDone = true; + } + return isDone; + case 'SOS': + if (txnres2.rows.length > 0) isDone = true; + return isDone; + case 'PAIDVISI': + if (txnres2.rows.length > 0) isDone = true; + return isDone; + case 'RETURNSTOCKONEAPP': + if (txnres2.rows.length > 0) isDone = true; + return isDone; + + case 'ORDERSIMPLIFYONEAPP': + if (txnres2.rows.length > 0) isDone = true; + return isDone; + + case 'ADDITIONALVISI': + if (txnres2.rows.length > 0) isDone = true; + return isDone; + case 'ADDITIONALVISI_IR': + if (txnres2.rows.length > 0) isDone = true; + return isDone; + case 'COMPVISI': + if (txnres2.rows.length > 0) isDone = true; + return isDone; + case 'COMPVISI_IR': + if (txnres2.rows.length > 0) isDone = true; + return isDone; + case 'PROMOTION': + if (txnres2.rows.length > 0) isDone = true; + return isDone; + // case 10: + // if(txnres2.rows.length>0) isDone=true; + // return isDone; + // case 11: + // if(txnres2.rows.length>0){ + // let grdata=txnres2.rows.item(0); + // if(grdata.IMAGE!=null && grdata.IMAGE!='' ) isDone=true; + // } + // return isDone; + // case 12: + // if(txnres2.rows.length>0) isDone=true; + // return isDone; + case 'COMPROMO': + if (txnres2.rows.length > 0) isDone = true; + return isDone; + case 'CONCOV': + if (txnres2.rows.length > 0) { + let ccdata = txnres2.rows.item(0); + if (ccdata.TOTAL_CONTACT === 0 || (ccdata.TOTAL_CONTACT != null && ccdata.TOTAL_CONTACT != '')) isDone = true; + } + return isDone; + case 'SALE': + if (txnres2.rows.length > 0) { + let sdata = txnres2.rows.item(0); + if (sdata.STOCK === 0 || (sdata.STOCK != null && sdata.STOCK != '')) isDone = true; + } + return isDone; + case 'SURVEY': + isDone = await checkFilledSurveys(ScreenName, txnres2, storeData); + return isDone; + case 'WINDOW': + if (txnres2.rows.length > 0) { + isDone = true; + } + return isDone; + case 'WINDOW_IR': + if (txnres2.rows.length > 0) { + isDone = true; + } + return isDone; + case 'POSM': + if (txnres2.rows.length > 0) { isDone = true; } + return isDone; + case 'FEEDBACK': + if (txnres2.rows.length > 0) { isDone = true; } + return isDone; + case 'PROMOTION2': + if (txnres2.rows.length > 0) { isDone = true; } + return isDone; + case 'STOREIMG': + if (txnres2.rows.length > 0) { isDone = true; } + return isDone; + case 'SHELFTALKER': + if (txnres2.rows.length > 0) { isDone = true; } + return isDone; + case 'PROMOTIONONEAPP': + if (txnres2.rows.length > 0) { isDone = true; } + return isDone; + case 'POSSALEONEAPP': + if (txnres2.rows.length > 0) { isDone = true; } + return isDone; + case 'PAIDVISIONEAPP': + if (txnres2.rows.length > 0) { isDone = true; } + return isDone; + case 'PAIDVISIONEAPP_IR': + if (txnres2.rows.length > 0) { isDone = true; } + return isDone; + case 'SOSONEAPP': + if (txnres2.rows.length > 0) { isDone = true; } + return isDone; + case 'SOSONEAPP_IR': + if (txnres2.rows.length > 0) { isDone = true; } + return isDone; + + default: return isDone; + + } +} + + +// ##### DB get available queries start + +export function Q_getAvlblDBPOSM(props, menuItem, PJP_Table = '') { + let { MenuId } = menuItem + let d1 = new Date(); + let d2 = moment(d1).format('MM/DD/YYYY'); + + let q = `SELECT JP.DistributorId, ${MenuId} as MenuID,CASE WHEN count(dbPOSM.POSMDefinitionId)>0 THEN 1 ELSE 0 END as KPIAVBL + from ${PJP_Table} JP + Inner Join + (select Distinct db.DistributorId,W.POSMDefinitionId from ${PJP_Table} db + INNER JOIN Mapping_JourneyPlan jcp on db.DistributorId=jcp.DistributorId + INNER JOIN Mapping_StorePOSM MW on MW.StoreId=jcp.StoreId + INNER JOIN Master_POSMDefinition W on W.POSMDefinitionId=MW.POSMDefinitionId + Where jcp.VisitDate='${d2}' order by db.DistributorId,W.POSMDefinitionId) dbPOSM + on dbPOSM.DistributorId=JP.DistributorId + group by JP.DistributorId + + union + + SELECT JP.DistributorId, ${MenuId} as MenuID,CASE WHEN count(dbPOSM.POSMDefinitionId)>0 THEN 1 ELSE 0 END as KPIAVBL + from ${PJP_Table} JP + Inner Join + (select Distinct db.DistributorId,W.POSMDefinitionId from ${PJP_Table} db + INNER JOIN Adhoc_JourneyPlan jcp on db.DistributorId=jcp.DistributorId + INNER JOIN Mapping_StorePOSM MW on MW.StoreId=jcp.StoreId + INNER JOIN Master_POSMDefinition W on W.POSMDefinitionId=MW.POSMDefinitionId + Where jcp.VisitDate='${d2}' order by db.DistributorId,W.POSMDefinitionId) dbPOSM + on dbPOSM.DistributorId=JP.DistributorId + group by JP.DistributorId + + `+ (props.ShowNonMerList == true ? ` + union + + SELECT JP.DistributorId, ${MenuId} as MenuID,CASE WHEN count(dbPOSM.POSMDefinitionId)>0 THEN 1 ELSE 0 END as KPIAVBL + from ${PJP_Table} JP + Inner Join + (select Distinct db.DistributorId,W.POSMDefinitionId from ${PJP_Table} db + INNER JOIN NonMerchandising_JourneyPlan jcp on db.DistributorId=jcp.DistributorId + INNER JOIN Mapping_StorePOSM MW on MW.StoreId=jcp.StoreId + INNER JOIN Master_POSMDefinition W on W.POSMDefinitionId=MW.POSMDefinitionId + Where jcp.VisitDate='${d2}' order by db.DistributorId,W.POSMDefinitionId) dbPOSM + on dbPOSM.DistributorId=JP.DistributorId + group by JP.DistributorId + `: '') + + (props.ShowNonProgram == true ? ` + union + + SELECT JP.DistributorId, ${MenuId} as MenuID,CASE WHEN count(dbPOSM.POSMDefinitionId)>0 THEN 1 ELSE 0 END as KPIAVBL + from ${PJP_Table} JP + Inner Join + (select Distinct db.DistributorId,W.POSMDefinitionId from ${PJP_Table} db + INNER JOIN NonProgram_JourneyPlan jcp on db.DistributorId=jcp.DistributorId + INNER JOIN Mapping_StorePOSM MW on MW.StoreId=jcp.StoreId + INNER JOIN Master_POSMDefinition W on W.POSMDefinitionId=MW.POSMDefinitionId + Where jcp.VisitDate='${d2}' order by db.DistributorId,W.POSMDefinitionId) dbPOSM + on dbPOSM.DistributorId=JP.DistributorId + group by JP.DistributorId + + `: '') + + (props.ShowStoreSearch == true ? ` + union + + SELECT JP.DistributorId, ${MenuId} as MenuID,CASE WHEN count(dbPOSM.POSMDefinitionId)>0 THEN 1 ELSE 0 END as KPIAVBL + from ${PJP_Table} JP + Inner Join + (select Distinct db.DistributorId,W.POSMDefinitionId from ${PJP_Table} db + INNER JOIN StoreSearch_JourneyPlan jcp on db.DistributorId=jcp.DistributorId + INNER JOIN Mapping_StorePOSM MW on MW.StoreId=jcp.StoreId + INNER JOIN Master_POSMDefinition W on W.POSMDefinitionId=MW.POSMDefinitionId + Where jcp.VisitDate='${d2}' order by db.DistributorId,W.POSMDefinitionId) dbPOSM + on dbPOSM.DistributorId=JP.DistributorId + group by JP.DistributorId + + `: '') + + (props.ShowBeatPlanList == true ? + ` + union + + SELECT JP.DistributorId, ${MenuId} as MenuID,CASE WHEN count(dbPOSM.POSMDefinitionId)>0 THEN 1 ELSE 0 END as KPIAVBL + from ${PJP_Table} JP + Inner Join + (select Distinct db.DistributorId,W.POSMDefinitionId from ${PJP_Table} db + INNER JOIN JourneyPlan_RouteWise jcp on db.DistributorId=jcp.DistributorId + INNER JOIN Mapping_StorePOSM MW on MW.StoreId=jcp.StoreId + INNER JOIN Master_POSMDefinition W on W.POSMDefinitionId=MW.POSMDefinitionId + Where jcp.VisitDate='${d2}' order by db.DistributorId,W.POSMDefinitionId) dbPOSM + on dbPOSM.DistributorId=JP.DistributorId + group by JP.DistributorId + + `: ''); + + return q; +} + +export function Q_getAvlblDBWindow(props, menuItem, PJP_Table = '') { + let { MenuId } = menuItem + let d1 = new Date(); + let d2 = moment(d1).format('MM/DD/YYYY'); + + let q = `SELECT JP.DistributorId, ${MenuId} as MenuID,CASE WHEN count(dbPOSM.WindowDefinitionId)>0 THEN 1 ELSE 0 END as KPIAVBL + from ${PJP_Table} JP + Inner Join + (select Distinct db.DistributorId,W.WindowDefinitionId from ${PJP_Table} db + INNER JOIN Mapping_JourneyPlan jcp on db.DistributorId=jcp.DistributorId + INNER JOIN Mapping_StoreWindow MW on MW.StoreId=jcp.StoreId + INNER JOIN Master_WindowDefinition W on W.WindowDefinitionId=MW.WindowDefinitionId + Where jcp.VisitDate='${d2}' order by db.DistributorId,W.WindowDefinitionId) dbPOSM + on dbPOSM.DistributorId=JP.DistributorId + group by JP.DistributorId + + union + + SELECT JP.DistributorId, ${MenuId} as MenuID,CASE WHEN count(dbPOSM.WindowDefinitionId)>0 THEN 1 ELSE 0 END as KPIAVBL + from ${PJP_Table} JP + Inner Join + (select Distinct db.DistributorId,W.WindowDefinitionId from ${PJP_Table} db + INNER JOIN Adhoc_JourneyPlan jcp on db.DistributorId=jcp.DistributorId + INNER JOIN Mapping_StoreWindow MW on MW.StoreId=jcp.StoreId + INNER JOIN Master_WindowDefinition W on W.WindowDefinitionId=MW.WindowDefinitionId + Where jcp.VisitDate='${d2}' order by db.DistributorId,W.WindowDefinitionId) dbPOSM + on dbPOSM.DistributorId=JP.DistributorId + group by JP.DistributorId + + `+ (props.ShowNonMerList == true ? ` + + union + + SELECT JP.DistributorId, ${MenuId} as MenuID,CASE WHEN count(dbPOSM.WindowDefinitionId)>0 THEN 1 ELSE 0 END as KPIAVBL + from ${PJP_Table} JP + Inner Join + (select Distinct db.DistributorId,W.WindowDefinitionId from ${PJP_Table} db + INNER JOIN NonMerchandising_JourneyPlan jcp on db.DistributorId=jcp.DistributorId + INNER JOIN Mapping_StoreWindow MW on MW.StoreId=jcp.StoreId + INNER JOIN Master_WindowDefinition W on W.WindowDefinitionId=MW.WindowDefinitionId + Where jcp.VisitDate='${d2}' order by db.DistributorId,W.WindowDefinitionId) dbPOSM + on dbPOSM.DistributorId=JP.DistributorId + group by JP.DistributorId + + `: '') + + (props.ShowNonProgram == true ? ` + + union + + SELECT JP.DistributorId, ${MenuId} as MenuID,CASE WHEN count(dbPOSM.WindowDefinitionId)>0 THEN 1 ELSE 0 END as KPIAVBL + from ${PJP_Table} JP + Inner Join + (select Distinct db.DistributorId,W.WindowDefinitionId from ${PJP_Table} db + INNER JOIN NonProgram_JourneyPlan jcp on db.DistributorId=jcp.DistributorId + INNER JOIN Mapping_StoreWindow MW on MW.StoreId=jcp.StoreId + INNER JOIN Master_WindowDefinition W on W.WindowDefinitionId=MW.WindowDefinitionId + Where jcp.VisitDate='${d2}' order by db.DistributorId,W.WindowDefinitionId) dbPOSM + on dbPOSM.DistributorId=JP.DistributorId + group by JP.DistributorId + + `: '') + + (props.ShowStoreSearch == true ? ` + + union + + SELECT JP.DistributorId, ${MenuId} as MenuID,CASE WHEN count(dbPOSM.WindowDefinitionId)>0 THEN 1 ELSE 0 END as KPIAVBL + from ${PJP_Table} JP + Inner Join + (select Distinct db.DistributorId,W.WindowDefinitionId from ${PJP_Table} db + INNER JOIN StoreSearch_JourneyPlan jcp on db.DistributorId=jcp.DistributorId + INNER JOIN Mapping_StoreWindow MW on MW.StoreId=jcp.StoreId + INNER JOIN Master_WindowDefinition W on W.WindowDefinitionId=MW.WindowDefinitionId + Where jcp.VisitDate='${d2}' order by db.DistributorId,W.WindowDefinitionId) dbPOSM + on dbPOSM.DistributorId=JP.DistributorId + group by JP.DistributorId + + `: '') + + (props.ShowBeatPlanList == true ? + ` + union + + SELECT JP.DistributorId, ${MenuId} as MenuID,CASE WHEN count(dbPOSM.WindowDefinitionId)>0 THEN 1 ELSE 0 END as KPIAVBL + from ${PJP_Table} JP + Inner Join + (select Distinct db.DistributorId,W.WindowDefinitionId from ${PJP_Table} db + INNER JOIN JourneyPlan_RouteWise jcp on db.DistributorId=jcp.DistributorId + INNER JOIN Mapping_StoreWindow MW on MW.StoreId=jcp.StoreId + INNER JOIN Master_WindowDefinition W on W.WindowDefinitionId=MW.WindowDefinitionId + Where jcp.VisitDate='${d2}' order by db.DistributorId,W.WindowDefinitionId) dbPOSM + on dbPOSM.DistributorId=JP.DistributorId + group by JP.DistributorId + + `: ''); + return q; +} + + +export function Q_getAvlblDBVisicooler(props, menu, PJP_Table = '') { + let { MenuId } = menu + let d1 = new Date(); + let d2 = moment(d1).format('MM/DD/YYYY'); + + let q = `SELECT JP.DistributorId, ${MenuId} as MenuID,1 as KPIAVBL ,1 as DataRowAvlblCount + from ${PJP_Table} JP + INNER JOIN Mapping_MenuDistributorPoint MW on MW.MenuId='${MenuId}' + group by JP.DistributorId`; + // Where JP.VisitDate='${d2}' + + // let join2=` inner join Sup_VisibilityAudit s on w.VisibilityDefinitionId=s.VisibilityDefinitionId `; + // let q=` Select * from Sup_Master_VisibilityDefinition w ${join2} where s.StoreId='${StoreId}'`; + + return q; +} + +// ##### DB get available queries end + +export function get_DBAvailblQuery(props, menu, PJP_Table) { + let { ScreenName, MenuId } = menu + let d1 = new Date(); + let d2 = moment(d1).format('MM/DD/YYYY'); + let q = ``; + + switch (ScreenName) { + case 'DBPOSMONEAPP': + q = Q_getAvlblDBPOSM(props, menu, PJP_Table); + return q; + case 'DBWINDOWONEAPP': + q = Q_getAvlblDBWindow(props, menu, PJP_Table); + return q; + case 'DBVISICOOLERONEAPP': + q = Q_getAvlblDBVisicooler(props, menu, PJP_Table); + return q; + default: return ''; + } +} + +export function get_DBQuery(menu, PJP_Table) { + let { ScreenName, MenuId } = menu + let d1 = new Date(); + let d2 = moment(d1).format('MM/DD/YYYY'); + let q = ``; + + switch (ScreenName) { + case 'DBPOSMONEAPP': + q = ` SELECT Jp.DistributorId, ${MenuId} as MenuID, IFNULL(DR.DataRowCount,0) as DataRowCount FROM ${PJP_Table} JP LEFT OUTER JOIN + (SELECT DISTRIBUTOR_ID AS DistributorId , IFNULL(COUNT(1),0) AS DATAROWCOUNT FROM ${AppTables.DBPOSM_HDR_DATA} WHERE VISIT_DATE='${d2}' GROUP BY DISTRIBUTOR_ID) DR + ON JP.DistributorId=DR.DistributorId `; + return q; + case 'DBWINDOWONEAPP': + q = ` SELECT Jp.DistributorId, ${MenuId} as MenuID, IFNULL(DR.DataRowCount,0) as DataRowCount FROM ${PJP_Table} JP LEFT OUTER JOIN + (SELECT DISTRIBUTOR_ID AS DistributorId , IFNULL(COUNT(1),0) AS DATAROWCOUNT FROM ${AppTables.DB_WINDOW_HDR_DATA} WHERE VISIT_DATE='${d2}' GROUP BY DISTRIBUTOR_ID) DR + ON JP.DistributorId=DR.DistributorId `; + return q; + case 'DBVISICOOLERONEAPP': + q = ` SELECT Jp.DistributorId, ${MenuId} as MenuID, IFNULL(DR.DataRowCount,0) as DataRowCount FROM ${PJP_Table} JP LEFT OUTER JOIN + (SELECT DISTRIBUTOR_ID AS DistributorId , IFNULL(COUNT(1),0) AS DATAROWCOUNT FROM ${AppTables.DB_VISICOOLER} WHERE VISIT_DATE='${d2}' GROUP BY DISTRIBUTOR_ID) DR + ON JP.DistributorId=DR.DistributorId `; + return q; + default: return ''; + + } +} + + +async function checkIf_StockWithCat_KPIDone(txnres2, storeData) { + let { StoreId } = storeData; + return await new Promise((resolve, reject) => { + if (txnres2.rows.length > 0) { + db.transaction(async function (txn) { + let allDone = true; + for (var i = 0; i < txnres2.rows.length; i++) { + let cat = txnres2.rows.item(i); + let isDone = await isCatDone(storeData, cat) + if (isDone == false) { + allDone = false; + } + + if (i == txnres2.rows.length - 1) { + resolve(allDone); + } + } + }); + + } + else { + resolve(false); + } + }).catch((err) => { + console.log(err); + return false; + }); + +} + +async function isCatDone(storeData1, cat) { + let { StoreId, ChainId, StateId, StoreTypeId } = storeData1; + return await new Promise((resolve, reject) => { + db.transaction(async function (txn) { + let seletlist = `STOCK_UID,PRODUCT as ProductName,PRODUCT_ID as ProductId,BRAND as BrandName,BRAND_ID as BrandId,SUB_CATEGORY as SubCategoryName,SUB_CATEGORY_ID as SubCategoryId,MSL,STOCK,BACKROOM_STOCK,DAMAGED_STOCK,LOST_STOCK,EXPIRY_STOCK,IS_SKU_STOCK_PRESENT,NREXPIRY1_STOCK,NREXPIRY2_STOCK,NREXPIRY3_STOCK`; + let sku_q = `SELECT ${seletlist} FROM ${AppTables.STOCKWITHCAT_DATA} WHERE STORE_ID='${StoreId}' and CATEGORY_ID='${cat.CategoryId}' `; + await txn.executeSql(sku_q, [], async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + resolve(true); + } else { + resolve(false); + } + }, function (txnE, txnerr) { console.log(txnerr); resolve(false); },); + + }); + }).catch((err) => { + console.log(err); + return false; + }) +} + +export async function checkIf_surveyCatDone(storeData1, SurveyId, CategoryId, ShowCat1) { + var d1 = new Date(); + var d2 = moment(d1).format('MM/DD/YYYY'); + return new Promise((resolve, reject) => { + try { + db.transaction(async function (txn) { + + let { StoreId } = storeData1; + + // get inserted audit + let selectlist = ` DISTINCT T.MaxLength as MaxLength,T.MinLength as MinLength,T.CategoryId,T.Category,T.SubCategoryId,T.SubCategory,T.LengthValidation as LengthValidation,T.QuestionImageAllow as QuestionImageAllow,T.DateRange as DateRange,T.Question as Question,T.QuestionId as QuestionId,T.QuestionType as QuestionType,T.OTP as OTP,T1.ANSWER As Answer, T1.ANSWER_ID as AnswerId,T1.IMAGE_ALLOW1 as ImageAllow1,T1.IMAGE1 as Image1,T1.IMAGE_ALLOW2 as ImageAllow2,T1.IMAGE2 as Image2,T1.MULTI_OPTIONS_IDS as multi_op_ids `; + let join = ` INNER JOIN Mapping_Survey M on T.SurveyId=M.SurveyId`; + let join2 = ` INNER JOIN ${AppTables.SURVEY} T1 on T.SurveyId=T1.SURVEY_ID and T.CategoryId=T1.CATEGORY_ID and T.SubCategoryId=T1.SUB_CATEGORY_ID And T.QuestionId=T1.QUESTION_ID`; + let q2 = `Select ${selectlist} FROM Master_SurveyQuestion T ${join} ${join2} WHERE T1.STORE_ID='${StoreId}' AND T1.VISIT_DATE= '${d2}' AND T1.SURVEY_ID=${SurveyId} and T1.ANSWER_ID Is Not NULL `; + if (ShowCat1 == true) { + q2 += ` AND T1.CATEGORY_ID=${CategoryId} `; + } + q2 += ` ORDER BY T.SubCategorySequence `; + + await txn.executeSql(q2, [], async function (txn2, txnres) { + + if (txnres.rows.length > 0) { + resolve(true); + } + else { + resolve(false); + } + + }, function (txnE, txnerr) { console.log(txnerr); resolve(false); },); + + }); + + } + catch (err) { + console.log('checkIfDone Error CatSurvey', err) + resolve(false); + } + }).catch((err) => { + console.log('checkIfDone Error CatSurvey', err) + return false; + }); +} + +export async function checkIf_surveyDone(storeData1, SurveyId, ShowCat1) { + var d1 = new Date(); + var d2 = moment(d1).format('MM/DD/YYYY'); + return new Promise((resolve, reject) => { + try { + db.transaction(async function (txn) { + let { StoreId } = storeData1; + if (ShowCat1 == true) { + let q2 = `SELECT DISTINCT T.Category,T.CategoryId , T.CategorySequence FROM Master_SurveyQuestion T INNER JOIN Mapping_Survey M ON T.SurveyId=M.SurveyId WHERE M.StoreId='${StoreId}' and T.SurveyId='${SurveyId}' order by T.CategorySequence`; + await txn.executeSql(q2, [], async function (txn2, txnres) { + + if (txnres.rows.length > 0) { + let arr = [], isSurveyDone = true; + for (var i = 0; i < txnres.rows.length; i++) { + let data = txnres.rows.item(i); + let isDone = await checkIf_surveyCatDone(storeData1, SurveyId, data.CategoryId, true) + if (isDone != true) { + isSurveyDone = false; + resolve(isSurveyDone) + break; + } + else if (i == txnres.rows.length - 1) { + resolve(isSurveyDone) + } + } + } + else { + resolve(true); + } + }, function (txnE, txnerr) { console.log(txnerr); resolve(false); },); + } + else { + let isDone = await checkIf_surveyCatDone(storeData1, SurveyId, '', false) + resolve(isDone) + } + }); + + } + catch (err) { + console.log('checkIfDone Error CatSurvey', err) + resolve(false); + } + }).catch((err) => { + console.log('checkIfDone Error CatSurvey', err) + return false; + }); +} + +export function getProgramChecklistAvailableQ(storeData, menu, program) { + let { StoreId } = storeData; + let { ProgramId } = program; + console.log("program:", program); + let q = ""; + let join1 = `inner join Mapping_StoreProgram s on w.ProgramDefinitionId=s.ProgramDefinitionId `; + let join2 = `inner join Mapping_StoreAuditGrading mg on s.ProgramDefinitionId=mg.ProgramDefinitionId and s.StoreId = mg.StoreId`; + q = `select mg.* from Master_ProgramDefinition w ${join1} ${join2} where s.StoreId='${StoreId}' and w.MenuId='${menu.MenuId}' and w.ProgramId='${ProgramId}' `; + return q; +} + +export function Q_getContractFormStoresList(props) { + let d1 = new Date(); + let d2 = moment(d1).format('MM/DD/YYYY'); + let join1 = "inner join Master_ProgramDefinition w on w.ProgramDefinitionId=mp.ProgramDefinitionId and w.ProgramId=mp.ProgramId "; + // let join2="inner join Mapping_StoreProgram mp on mp.StoreId=jp.StoreId "; + let join2 = "inner join Mapping_ContractForm mp on mp.StoreId=jp.StoreId "; + let mapq = `select DISTINCT jp.*,'Mapping_JourneyPlan' as JcpType from Mapping_JourneyPlan jp ${join2} ${join1} where jp.VisitDate='${d2}'`; + let adhoc_q = `select DISTINCT jp.*,'Adhoc_JourneyPlan' as JcpType from Adhoc_JourneyPlan jp ${join2} ${join1} where jp.VisitDate='${d2}'`; + let NonMer_q = `select DISTINCT jp.*,'NonMerchandising_JourneyPlan' as JcpType from NonMerchandising_JourneyPlan jp ${join2} ${join1} where jp.VisitDate='${d2}'`; + let NonProg_q = `select DISTINCT jp.*,'NonProgram_JourneyPlan' as JcpType from NonProgram_JourneyPlan jp ${join2} ${join1} where jp.VisitDate='${d2}'`; + let StoreSearch_q = `select DISTINCT jp.*,'StoreSearch_JourneyPlan' as JcpType from StoreSearch_JourneyPlan jp ${join2} ${join1} where jp.VisitDate='${d2}'`; + let JPRoute_q = `select DISTINCT jp.*,'JourneyPlan_RouteWise' as JcpType from JourneyPlan_RouteWise jp ${join2} ${join1} where jp.VisitDate='${d2}'`; + + let q = mapq + ' UNION ' + adhoc_q; + if (props.ShowNonMerList == true) { + q += ' UNION ' + NonMer_q; + } + if (props.ShowNonProgram == true) { + q += ' UNION ' + NonProg_q; + } + if (props.ShowStoreSearch == true) { + q += ' UNION ' + StoreSearch_q; + } + if (props.ShowBeatPlanList == true) { + q += ' UNION ' + JPRoute_q; + } + + return q; +} + +export function Q_getContractFormPrograms(storeData) { + let { JcpType, StoreId } = storeData; + let d1 = new Date(); + let d2 = moment(d1).format('MM/DD/YYYY'); + let join1 = "inner join Master_ProgramDefinition w on w.ProgramDefinitionId=mp.ProgramDefinitionId and w.ProgramId=mp.ProgramId "; + let join2 = "inner join Mapping_ContractForm mp on mp.StoreId=jp.StoreId "; + let join3 = `Left outer join ${AppTables.CONTRACT_FORM} cf on mp.ProgramId=cf.PROGRAM_ID and mp.StoreId=cf.STORE_ID and mp.ProgramDefinitionId=cf.PROGRAM_DEFINITION_ID `; + let q = `select w.ProgramDefinitionId,w.ProgramId,w.ChildName as ProgramName,mp.ContractFormStatus,'0' as DataDoneCount,(CASE WHEN cf.STORE_ID is not null THEN 1 ELSE 0 END) as IsDataExists from ${JcpType} jp ${join2} ${join1} ${join3} where jp.VisitDate='${d2}' and jp.StoreId='${StoreId}' order by w.ChildName`; + return q; +} \ No newline at end of file diff --git a/PerformicsSrc/src/constants/DashboardData.js b/PerformicsSrc/src/constants/DashboardData.js new file mode 100644 index 0000000..daf049f --- /dev/null +++ b/PerformicsSrc/src/constants/DashboardData.js @@ -0,0 +1,159 @@ +import { Image, View } from 'react-native'; +import store_plannedIcon from '../assets/performics/Planned.svg'; +import store_coveredIcon from '../assets/performics/Covered.svg'; +import { AntDesign, MaterialCommunityIcons } from '../components/icons'; +import ChatbotGreyIcon from '../assets/image/chatbot_grey.svg'; +import PpayIcon from '../assets/image/ppay_icon.svg'; +import ChatbotGIF from '../assets/image/Gyan_buddy.gif'; +import { notify } from '../components/notify'; +import Grooming_icon from '../assets/image/grooming_icon.svg'; +import { logout } from '../components/logout'; + +export function getDashBoardConstData(props, customStyle = {}, PageTheme = {}, NB_AskForDownload = () => { }, NB_AskForUpload = () => { },NB_pPAYLink =() => {}) { + const QuickLinks = [ + { + text: 'Download Data', + icon: () => { + return ( + + + + ) + }, + iconType: 'Icon', + itemOnPress: () => { NB_AskForDownload() } + }, + { + text: 'Daily Route Plan', + icon: () => { + return ( + + + + ) + }, + iconType: 'Icon', + itemOnPress: () => { props.navigation.navigate('StoreList'); } + }, + + props.GroomingObj && Object.keys(props.GroomingObj || {}).length > 0 && props.GroomingObj !== undefined + ? { + text: props.GroomingObj.MenuName, + icon: () => ( + + + + ), + iconType: 'Icon', + itemOnPress: () => + props.navigation.navigate('GroomingPictures', { storeData: {} }), + } + : [] + , + { + text: 'Reports', + icon: () => { + return ( + + + + ) + }, + iconType: 'Icon', + itemOnPress: () => { props.navigation.navigate('ReportsMenu'); } + + }, + { + text: 'Upload Data', + icon: () => { + return ( + + + + ) + }, + iconType: 'Icon', + itemOnPress: () => { NB_AskForUpload() } + + }, + + { + text: 'Exit', + icon: () => { + return ( + + + + ) + }, + iconType: 'Icon', + itemOnPress: () => { logout(props) } + }, + ]; + + const storeperformancetext = [ + { + text: 'MTD Attendance', + icon: store_plannedIcon, + value_Key: 'MTDManday', + }, + { + text: 'MTD OQAD Score', + icon: store_coveredIcon, + value_Key: 'MTD_OQAD', + }, + ]; + + if (props.pPAYObj && Object.keys(props.pPAYObj || {}).length > 0 && props.pPAYObj !== undefined) { + QuickLinks.unshift({ + text: props?.pPAYObj?.MenuName, + icon: () => { + return ( + + {} + + ) + }, + iconType: 'Icon', + itemOnPress: () => { NB_pPAYLink(props?.pPAYObj?.Ppay_ExternalLink) } + },) + } + + if (props.Chatbot) { + const now = new Date(); + const hours = now.getHours(); // 0–23 + const isWithinTime = hours >= 8 && hours < 20; // 8 AM to before 8 PM + QuickLinks.unshift({ + text: 'Gyan Buddy', + icon: () => { + return ( + + {isWithinTime ? : } + + + ) + }, + iconType: 'Icon', + itemOnPress: () => { + if (isWithinTime) { + props.navigation.navigate('ChatScreen'); + } else { + notify("⏰ Gyan Buddy is available between 8:00 AM and 8:00 PM only.") + } + } + },) + } + + return { + "QuickLinks": QuickLinks, + "StorePerformanceText": storeperformancetext, + } +} diff --git a/PerformicsSrc/src/constants/Images.js b/PerformicsSrc/src/constants/Images.js new file mode 100644 index 0000000..6edaf26 --- /dev/null +++ b/PerformicsSrc/src/constants/Images.js @@ -0,0 +1,13 @@ +const IMAGES = { + readmsg: require('../assets/icons/read_msg.png'), + unreadmsg: require('../assets/icons/unread_msg.png'), + p_notification_icon: require('../assets/icons/performics_notification_icon.png'), + unread_tag_icon: require('../assets/icons/unread_tag.png'), + read_tag_icon: require('../assets/icons/read_tag.png'), + noNotification_icon : require('../assets/icons/noNotification_icon.png'), + + + }; + + export default IMAGES; + \ No newline at end of file diff --git a/PerformicsSrc/src/constants/Text_eng.json b/PerformicsSrc/src/constants/Text_eng.json new file mode 100644 index 0000000..995bff9 --- /dev/null +++ b/PerformicsSrc/src/constants/Text_eng.json @@ -0,0 +1,837 @@ +{ + "Performics": "Performics", + "HeyThere": "Hey There", + "EnteryourProjectId": "Enter your Project Id", + "ProjectId": "Project Id", + "Next": "Next", + "Loadingwithdots" : "Loading...", + "LoadingChecklistwithdots" : "Loading Checklist...", + "PleaseenterProjectId": "Please enter Project Id", + "ProjectnotfoundensureifyouhaveenteredcorrectprojectId": "Project not found, ensure if you have entered correct project Id", + "LoggingIn": "Logging In", + "Logintoyouraccount": "Login to your account", + "Username": "Username", + "Password": "Password", + "Cannotgetuserposition": "Cannot get user position", + "Pleaseallowlocationpermissiontologin": "Please allow location permission to login", + "Pleaseconnecttointernet": "Please connect to internet", + "LoginSuccess": "Login Success", + "CannotloginSomethingwentwrong": "Cannot login! Something went wrong", + "Pleaseenterusername": "Please enter username", + "Pleaseenterpassword": "Please enter password", + "CreateMPin": "Create M-Pin", + "SetMPintologinyouraccount": "Set M-Pin to login your account", + "EnterMPin": "Enter M-Pin", + "ConfirmMPin": "Confirm M-Pin", + "PleaseenterMPin": "Please enter M-Pin", + "Pleaseenter4digitMPin": "Please enter 4-digit M-Pin", + "PleaseconfirmyourMPin": "Please confirm your M-Pin", + "ConfirmMPindoesnotmatch": "Confirm M-Pin does not match", + "Sessionnotfoundpleaseloginagain": "Session not found, please login again", + "YouenteredwrongMPin": "You entered wrong M-Pin", + "MPintologinyouraccount": "M-Pin to login your account", + "ForgotMPin": "Forgot M-Pin", + "Login": "Login", + "Appupdateavailableversion": "App update available version:", + "UpdateapptothenewversionYourdataissafeandwillnotbelostduringthisupdate": "Update app to the new version! Your data is safe and will not be lost during this update.", + "Downloadingapk": "Downloading apk", + "Loading": "Loading", + "Pleaseselectyouranswer": "Please select your answer", + "OneQuestionADay": "One Question A Day", + "WellDoneGoodJob": "Well Done! Good Job", + "OopsBetterlucknexttime": "Oops! Better luck next time", + "OpS" : "OpS", + "Back": "Back", + "Submit": "Submit", + "NoticeBoard": "Notice Board", + "Cannotloaddashboarddata": "Cannot load dashboard data!", + "PleaseConnecttotheinternet": "Please Connect to the internet!", + "CannotdownloadallData": "Cannot download all Data!", + "Data" :"Data", + "FromDate" : "From Date", + "ToDate" : "To Date", + "PleaseSelectTheFromDate" : "Please Select The From Date ", + "PleaseSelectTheToDate" : "Please Select The To Date", + "StartTimeaddedsuccessfully" :"Start Time added successfully", + "EndTimeaddedsuccessfully":"End Time added successfully", + "PleaseretrydownloadingThereissomeerrorwhiledownloadingdata": "Please retry downloading! There is some error while downloading data", + "Pleaseallowlocationpermissionandkeepyourlocationon": "Please allow location permission and keep your location on!", + "Dashboardreportsrefreshed": "Dashboard reports refreshed!", + "DashboardReport" :"Dashboard Report", + "Cannotrefreshdashboardreports": "Cannot refresh dashboard reports!", + "CannotUploadDataSomethingwentwrong": "Cannot Upload Data! Something went wrong.", + "Nosessiontoupload": "No session to upload!", + "AllimagessyncedNosessiontoupload": "All images synced! No session to upload.", + "ImagesLoguploadedforsession": "Images Log uploaded for session:", + "Images" : "Images", + "Cannotaddsplitwindowimages" : "Cannot add split window images", + "Cannotaddwindowstockdata" : "Cannot add window stock data", + "WindowQuestions" : "Window Questions", + "Cannotaddwindowquestionsdata" : "Cannot add window questions data", + "CannotaddpaidvisibilityIRImagesdata" :"Cannot add paid visibility IR Images data", + "CannotaddpaidvisibilityIRStatusdata" :"Cannot add paid visibility IR Status data", + "Paidvisibilityupdatedsuccessfully" :"Paid visibility updated successfully", + "Windowdataupdatedsuccessfully" : "Window data updated successfully", + "Windowupdatedsuccessfully" :"Window updated successfully!", + "Cannotaddwindowdata" : "Cannot add window data", + "PleaseclickImagesfor" :"Please click Images for", + "cannotuploadlogforsession": "cannot upload log for session:", + "Cannotuploadimagesforsession": "Cannot upload images for session:", + "AllIRimagesuploaded": "All IR images uploaded!", + "SomeIRImagesarestillnotuploaded" :"Some IR Images are still not uploaded!", + "UploadingIRSessions": "Uploading IR Sessions!", + "UploadingIRSessionss": "Uploading IR Sessions", + "IRPendingImagesDetails" :"IR Pending Images Details", + "CannotcaptureimagesasgettingSessionNull" :"Cannot capture images as getting Session Null.", + "Cannotdeletephoto" :"Cannot delete photo!", + "CannotdeletephotoFoundNullSession" :"Cannot delete photo! Found Null Session.", + "Erroroccurwhileretakingphoto" :"Error occur while retaking photo!", + "CannotstartcameraFoundNullSession" :"Cannot start camera! Found Null Session.", + "CannotaddShareOfShelfImagesdata" :"Cannot add Share Of Shelf Images data", + "CannotaddShareOfShelfIRImagesdata" :"Cannot add Share Of Shelf IR Images data", + "CannotaddShareOfShelfIRSessiondata" :"Cannot add Share Of Shelf IR Session data", + "stockfacingIRUploadstatusadded" :"stock facing IR Upload status added", + "outof": "out of", + "Ok": "Ok", + "UploadingData...": "Uploading Data...", + "UploadingContracts": "Uploading Contracts", + "UploadingAddStoreInfo": "Uploading Add Store Info", + "Cannotupdatecontractform" :"Cannot update contract form!", + "ContractSigned" :"Contract Signed?", + "Contractformuploaded" :"Contract form uploaded!", + "Cannotupdatecontractformstatus" : "Cannot update contract form status", + "Cannotuploadcontractformimagesandfiles" :"Cannot upload contract form images and files!", + "Pleaseselectreasonfornotsigningthecontract" :"Please select reason for not signing the contract", + "UploadingDataforStore": "Uploading Data for Store:", + "SyncingIRSessionsStatus": "Syncing IR Sessions Status ...", + "IRSessionsuploadedPleaseRetry": "IR Sessions uploaded! Please Retry", + "UploadingIRSessionsData": "Uploading IR Sessions Data...", + "SessionUploadTimeout": "Session Upload Timeout", + "Uploadingdatafordistributor": "Uploading data for distributor:", + "Cannotupdatedistributorstatus" :"Cannot update distributor status!", + "UploadingdataforStoreIdProgramId": "Uploading data for (StoreId,ProgramId):", + "UploadingContractImagesFiles": "Uploading Contract Images/Files...", + "Contractformsuccessfullyupdated" :"Contract form successfully updated!", + "Uploadingdistributors": "Uploading distributors...", + "Distributors": "Distributors", + "DistributorList" :"Distributor List", + "DistributorVisited" :"Distributor Visited", + "DistributorCheckIn" :"Distributor Check-In", + "DistributorId" :"Distributor Id", + "DistributorCode" :"Distributor Code", + "DistributorMenu":"Distributor Menu", + "PleaseclickselfieinfrontofDistributor" :"Please click selfie in front of Distributor", + "Pleaseclickdistributorfrontimage" :"Please click distributor front image", + "Clickdistributorfrontimage" :"Click distributor front image", + "ClickselfieinfrontofDistributor" :"Click selfie in front of Distributor", + "Alldataalreadyuploadedforthedistributor" :"All data already uploaded for the distributor", + "Alreadymarkednotworkingreasonsforthedistributor" :"Already marked not working reasons for the distributor", + "Nomenumapforthisdistributor" :"No menu map for this distributor!", + "Youhavealreadycheckedinintootherdistributor" :"You have already checked in into other distributor", + "YoucannotcheckoutYouarenotwithinthealloweddistancefromthedistributor" :"You cannot checkout! You are not within the allowed distance from the distributor", + "UploadingDataforDistributor" :"Uploading Data for Distributor", + "Youneedtogeotagdistributor" :"You need to geotag distributor", + "GeoLocation" : "Geo Location", + "UniversalIdnotfound": ". Universal Id not found", + "QuickLinks": "Quick Links", + "Performance": "Performance", + "Covered": "Covered", + "Merchandised": "Merchandised", + "FTD": "FTD", + "MTD": "MTD", + "IRAlertText": "IR Image Upload Pending! Please upload all IR image by clicking side menu 'Upload Data' button", + "Youhavenojourneyplanfortoday": "You have no journey plan for today!", + "Cannotdownloaddata": "Cannot download data!", + "UploadingData": "Uploading Data", + "StoreChecklistupdatedsuccessfully" : "Store Checklist updated successfully!", + "Youcancapturemaximum" : "You can capture maximum", + "CaptureWindowImages" : "Capture Window Images", + "Capture" :"Capture", + "Uploadingvisitorsdata": "Uploading Visitors Data", + "AllDataUploaded": "All Data Uploaded", + "CannotUploadVisitors": "Cannot Upload Visitors", + "UploadingDatafor": "Uploading Data for", + "Erroroccurwhileuploadingdatafor": "Error occur while uploading data for", + "Alldatauploadedfor": "All data uploaded for", + "NodatatoUpload": "No data to Upload", + "UploadingImages": "Uploading Images", + "DataandImagesUploaded" : "Data and Images Uploaded", + "Alldataandimagesuploadedfor": "All data and images uploaded for", + "Cannotuploadimagesfor": "Cannot upload images for", + "Couldnotstartupload": "Could not start upload!", + "DownloadData": "Download Data", + "Beat": "Beat", + "Beats" :"Beats", + "BeatPlan": "Beat Plan", + "SelectthisBeatPlan":"Select this Beat Plan!", + "CannotUpdateBeat" :"Cannot Update Beat!", + "AddStore": "Add Store", + "AddedStores": "Added Stores", + "AddStoreInfo": "Add Store Info", + "NonMerch": "Non Merch.", + "NonMerchandised": "Non Merchandised", + "NonProgram": "Non Program", + "Program" :"Program", + "ContractForms": "Contract Forms", + "ContractForm" :"Contract Form", + "Contractformfor" :"Contract form for", + "isalreadyFilled" :"is already Filled", + "ContractFormStores" :"Contract Form Stores", + "ContractFormPrograms" :"Contract Form Programs", + "DownloadingData": "Downloading Data", + "ConsumerSection": "Consumer Section", + "GetDb": "GetDb", + "Doyouwanttodownloaddata": "Do you want to download data?", + "DataDownloaded": "Data Downloaded", + "Couldnotdownload": "Could not download", + "Nodatafoundfor": "No data found for ", + "Couldnotstartdownload": "Could not start download!", + "DailyRoutePlan": "Daily Route Plan", + "StoreList": "Store List", + "Planned": "Planned", + "StoreName": "Store Name", + "StoreAddress": "Store Address", + "Store_Name": "Store Name:", + "StoreReport" :"Store Report", + "PleaseenterStoreName" :"Please enter Store Name", + "PleaseenterAddress" :"Please enter Address", + "PleaseenterLocation" :"Please enter Location", + "PleaseenterPincode" :"Please enter Pincode", + "Pleaseentervalid" :"Please enter valid", + "PleaseentervalidPincode" :"Please enter valid Pincode", + "PleaseentervalidContactNumber" :"Please enter valid Contact Number", + "PleaseentervalidMobileNumber" :"Please enter valid Mobile Number", + "PleaseentervalidEmail" :"Please enter valid Email", + "CannotAddStoreProfile" :"Cannot Add Store Profile!", + "PleaseselectTaxType" :"Please select TaxType", + "PleaseenterGSTNo" :"Please enter GST No", + "PleaseTakeGSTImage" :"Please Take GST Image", + "PleaseselectCityId" :"Please select CityId", + "PleaseselectStoreTypeId" :"Please select StoreTypeId", + "PleaseselectChainId" :"Please select ChainId", + "PleaseselectChannelId" :"Please select ChannelId", + "PleaseselectStoreCategoryId" :"Please select StoreCategoryId", + "PleaseselectStoreClassId" :"Please select StoreClassId", + "PleaseselectDistributorId" :"Please select DistributorId", + "StoreCategory": "Store Category:", + "StoreCategories" :"Store Categories", + "Distributor": "Distributor:", + "LastVisitDate": "Last Visit Date:", + "LastVisitScore" :"Last Visit Score", + "StoreId": "Store Id", + "StoreScore": "Store Score:", + "Nomenumapforthisstore": "No menu map for this store!", + "PleasefilltheNoworkingreason": "Please fill the No working reason", + "YouarenotallowedtoCheckoutbefore": "You are not allowed to Check-out before", + "MinutesfromCheckintimeYourCurrentDurationis": "Minutes from Check-in time. Your Current Duration is", + "CurrentLocation" :"Current Location", + "Minutes": "Minutes.", + "m": " m", + "U" :"U", + "N" :"N", + "P" :"P", + "MTDMerchandisedCount": "MTD Merchandised Count:", + "UserId": "User Id", + "UserName" : "User Name", + "ImageType": "Image Type:", + "StoreProfile" : "Store Profile", + "NotWorking" : "Not Working", + "StoreChecklist" : "Store Checklist", + "Skip" : "Skip", + "VisitorImage" : "Visitor Image", + "Inventory" : "Inventory", + "CustomerTracking" : " Customer Tracking", + "ImageTypeCheckOut": "Image Type: Check Out", + "ImageTypeCheckIn": "Image Type: Check In", + "StoreType": "Store Type", + "StoreCode": "Store Code", + "Address": "Address", + "StoreVisited": "Store Visited", + "Yes": "Yes", + "No": "No", + "YouneedtobeinthestoretoCheckInCheckOut": "You need to be in the store to CheckIn/CheckOut", + "Youneedtobeinthestore": "You need to be in the store", + "toCheckInCheckOut": "to CheckIn/CheckOut", + "Alloweddistancefromstore": "Allowed distance from store", + "Yourdistancefromstore": "Your distance from store", + "OK": "OK", + "NoDataFound": "No Data Found!", + "inQtn" : "in Qtn", + "Minimumdigitsallowedis" :"Minimum digits allowed is", + "Maximumdigitsallowedis" :"Maximum digits allowed is", + "ClickSelfieinfrontofStore": "Click Selfie in front of Store", + "Youare": "You are", + "Awayfromthestore": "away from the store!", + "NoDataFoundPleaseDownloadDataFirst": "No Data Found! Please Download Data First", + "AllDataalreadyuploadedforthisstore": "All Data already uploaded for this store!", + "Alreadymarkedasnotworkingstatusforthisstore": "Already marked as not working status for this store!", + "CheckinImage": "Checkin Image", + "CheckIndatanotavailable": "Check-In data not available!", + "Alreadycheckedout": "Already checked out!", + "Dataalreadyuploaded": "Data already uploaded!", + "Datapartiallyuploaded": "Data partially uploaded!", + "Youarealreadycheckedintotheotherstore": "You are already checked in to the other store!", + "YouhaveclearedtheAppDataRestoringCheckinInfo": "You have cleared the App-Data! Restoring Checkin Info", + "Pleaseallowlocationpermission": "Please allow location permission", + "StoreLocation" :"Store Location", + "Storelocationnotavailable": "Store location not available", + "Nodatafound": "No data found", + "NoData": "No Data", + "SorryCannotdownloadfile": "Sorry! Cannot download file", + "SorryCannotdownloadfileasfiledoesnotexistsonserver": "Sorry! Cannot download file as file does not exists on server!", + "Fileisdownloaded": "File is downloaded!", + "PleasefillallKPI": "Please fill all KPI", + "Gettinglocation": "Getting location", + "Youcannotcheckout": "You cannot checkout!", + "Youcannotcheckin": "You cannot checkin!", + "Youarenotwithinthealloweddistancefromthestore": " You are not within the allowed distance from the store i.e.", + "UpdatingCheckoutStatus": "Updating Checkout Status", + "Erroroccurwhilecheckout": "Error occur while checkout", + "Somethingwentwrong": "Something went wrong!", + "Erroroccurwhileuploadingdata": "Error occur while uploading data", + "DeletingCheckInData": "Deleting Check-In Data", + "CheckInRemoved": "Check-In Removed", + "CheckInremovedsuccessfullybutcannotupdatestatus": "Check-In removed successfully, but cannot update status!", + "CannotRemoveCheckIn": "Cannot Remove Check-In!", + "DoyoureallywanttoCancelCheckIn": "Do you really want to Cancel Check-In?", + "Yourallcheckindatawillbelost": "Your all check-in data will be lost!", + "Errorimagefilewritefailed": "ERROR: image file write failed", + "Pleasecaptureaimage": "Please capture a image", + "CannotProcessImage": "Cannot Process Image", + "Pleaseclickselfieinfrontofstore": "Please click selfie in front of store", + "Doyoureallywanttocheckout": "Do you really want to checkout?", + "Youneedtogeotagstore": "You need to geotag store", + "Cameraunavailable": "Camera unavailable", + "CheckIn": "Check In", + "CheckedIn": "Checked In", + "CheckOut": "Check Out", + "CheckedOut": "Checked Out", + "CheckOutImage": "Check-Out Image", + "Uploaded": "Uploaded", + "PartiallyUploaded": "Partially Uploaded", + "DataUploaded": "Data Uploaded", + "Searchby": "Search by", + "Save": "Save", + "Close": "Close", + "Reasonfornotworkinginstore": "Reason for not working in store", + "NonWorkingReason": "Non Working Reason", + "DataUploadedButcouldnotupdatestorestatus": "Data Uploaded! But could not update store status!", + "Cannotuploaddata": "Cannot upload data", + "OopsSomethingwentwrongcannotcreateJCP": "Oops! Something went wrong, cannot create JCP", + "Pleaseselectreasonfornotworking": "Please select reason for not working", + "Youcannotselectthisreasonasthereisalreadyastore": "You cannot select this reason as there is already a store which data has been uploaded!", + "CouldnotcreateJCP": "Could not create JCP!", + "Geotag": "Geotag", + "UploadGeotag": "Upload Geotag", + "ClickStoreFrontImage": "Click Store Front Image", + "StoreImage": "Store Image", + "Cannotuploadgeotag ": "Cannot upload geotag!", + "GeoTagDataUploadedSuccessfully": "GeoTag Data Uploaded Successfully", + "Geotaguploadedbutcannotupdategeotagstatus": "Geotag uploaded but cannot update geotag status!", + "Pleaseclickstorefrontimage": "Please click store front image", + "StoreCheckIn": "Store Check-In", + "RemovingImage" :"Removing Image", + "ProcessingImage" :"Processing Image", + "ProcessingCheckIn": "Processing Check-In", + "CheckinSuccessful": "Check-in Successful", + "CheckInDataUploadedsuccessfully": "Check-In Data Uploaded successfully", + "CouldnotaddCheckIndata": "Could not add Check In data!", + "DailyMenu": "Daily Menu", + "Youhaveunsavedchangesin": "You have unsaved changes in", + "Pleasesaveyourlastchanges": "Please save your last changes", + "StockReceived" : "Stock Received", + "MiddayStockorClosingStockhasbeenupdatedOpeningstockcannotbechangednow": "Midday Stock or Closing Stock has been updated, Opening stock cannot be changed now!", + "OopsErroroccurwhileupdatingMiddayStock": "Oops! Error occur while updating Midday-Stock", + "FillStockfirst": "Fill Stock first!", + "MiddayStockupdatedsuccessfully":"Midday-Stock updated successfully", + "PleaseenterMiddayStockforatleastoneProductIfnotpresentthenEnter0" : "Please enter Midday-Stock for atleast one Product (If not present then Enter '0')" , + "PleaseenterMiddayStockfor" : "Please enter Midday-Stock for ", + "PleaseenterClosingStockfor" : "Please enter Closing-Stock for ", + "MBQ": "'MBQ :", + "Pleaseselectrequiredoptionsfor": "Please select required options for ", + "SurveyId": "Survey Id", + "CategoryId": "Category Id", + "Cannotaddcategoryexecutionimages" : "Cannot add category execution images", + "Cannotaddcategoryexecutionstockdata" : "Cannot add category execution stock data", + "CategoryExecutionupdatedsuccessfully" : "Category Execution updated successfully", + "CategoryExecutionImages" : "Category Execution Images", + "CategoryExecutionQuestions" :"Category Execution Questions", + "Cannotaddcategoryexecutiondata" : "Cannot add category execution data", + "Cannotaddcategoryexecutionquestionsdata" : "Cannot add category execution questions data", + "Pressmictostartrecordingvoice": "Press mic to start recording voice", + "Doyoureallywanttoexitthescreen": "Do you really want to exit the screen?", + "Pleasestoprecordingfirst": "Please stop recording first", + "AlreadyRecording": "Already Recording", + "Pleasestopplayerfirst": "Please stop player first!", + "RecordingPressmictostoprecording": "Recording... ! Press mic to stop recording", + "Maximumrecordtimelimitreached": "Maximum record time limit reached.", + "Cannotopenfileforrecording": "Cannot open file for recording!", + "AlreadyPlaying": "Already Playing", + "Filenotfound": "File not found!", + "Pleaseselectoptionsfortherequiredfield": "Please select options for the required field", + "Pleasepickadate": "Please pick a date", + "Pleaseselectrating": "Please select rating", + "Pleasefillalldetails": "Please fill all details", + "Pleaserecordaudioclipfortherequiredfield": "Please record audio clip for the required field", + "Pleaseaddimages": "Please add images", + "Pleaseaddminimum" : "Please add minimum", + "Youcanaddmaximumof" : "You can add maximum of", + "DragItemsInOrder": "Drag Items In Order", + "Pressandholdtodrag": "Press and hold to drag", + "RecordVoiceClip": "Record Voice Clip", + "Youcanrecordmaxfor60secs": "You can record max for 60 secs", + "SavingData": "Saving Data", + + "Surveyupdatedsuccessfully": "Survey updated successfully", + "Cannotupdatesurvey": "Cannot update survey", + + "OpeningStock": "Opening Stock", + "Bundlepack": "Bundle pack", + "Stock": "Stock", + "EnterStocks" : "Enter Stocks", + "ExpiryStock": "Expiry Stock", + "Doyoureallywanttosavedata": "Do you really want to save data?", + "Cancel": "Cancel", + "StockUpdateSuccessfully": "Stock Update Successfully", + "BackroomStock": "Backroom Stock", + "MiddayStock": "Midday Stock", + "ClosingStock": "Closing Stock", + "OpSMdS" : "'OpS+MdS'", + "ShareofShelf": "Share of Shelf", + "SOSPercent" : "SOS Percent :", + "SOSTarget" : "SOS Target:", + "SOSHeaderImage" : "SOS Header Image", + "CaptureSOSHeaderImages" : "Capture SOS Header Images", + "CaptureSOSChildImages" : "Capture SOS Child Images", + "Errorloadingchecklistdata" : "Error loading checklist data!", + "Somethingwentwrongwhiledeleteingolddata" : "Something went wrong while deleteing old data!", + "ShareOfShelfdataupdatedsuccessfully" : "Share Of Shelf data updated successfully", + "CannotaddShareOfShelfdata" : "Cannot add Share Of Shelf data", + "Pleaseclickheaderimagefor" :"Please click header image for", + "PleaseclickheaderimageforSOS" :"Please click header image for SOS", + "Sumofall" : "Sum of all", + "shouldbelessthanorequalsto" : "should be less than or equals to", + "PleaseenterHeaderFacingfor" : "Please enter Header Facing for", + "Pleaseclickallchildimagesfor" : "Please click all child images for", + "Pleaseclickallheaderimagesfor" : "Please click all header images for", + "SubCategoryFacing": "Sub Category Facing", + "BrandFacing": "Brand Facing", + "PaidVisibility": "Paid Visibility", + "Cannotaddpaidvisibilityimages" : "Cannot add paid visibility images", + "Cannotaddpaidvisibilitystockdata" : "Cannot add paid visibility stock data", + "Cannotaddpaidvisibilityquestionsdata" : "Cannot add paid visibility questions data", + "Questions" : "Questions", + "Endcap": "Endcap", + "IsPresent": "Is Present", + "CaptureImage": "Capture Image", + "Reason": "Reason", + "Select": "Select", + "AddlfreeVisibility": "Addl./free Visibility", + "Category": "Category", + "SubCategory": "Sub-Category", + "SubCategorytrim" : "SubCategory", + "Sub_Category" : "Sub Category", + "Brands": "Brands", + "Brand" : "Brand", + "Product" :"Product", + "TotalStock" : "Total Stock", + "DisplayType": "Display Type", + "Remark": "Remark", + "Image": "Image", + "Add": "Add", + "Detail" :"Detail", + "AddedVisibilities": "Added Visibilities", + "Pleaseaddfirst": "Please add first", + "Pleaseselectcompany" : "Please select company", + "AdditionalvisibilityUpdateSuccessfully": "Additional visibility Update Successfully", + "CompetitionVisibility": "Competition Visibility", + "CompetitionVisibilityaddedsuccessfully" : "Competition Visibility added successfully", + "Cannotaddcompetitionvisibility" : "Cannot add competition visibility", + "Company": "Company", + "PromoTalker": "Promo Talker", + "PromoType" :"Promo Type", + "RunningonPOS": "Running on POS", + "Promotion": "Promotion", + "PromotionType" :"Promotion Type", + "PromotionDetails" :"Promotion Details", + "PromotionUpdateSuccessfully": "Promotion Update Successfully", + "CompetitionPromotion": "Competition Promotion", + "CompetitionPromotionaddedsuccessfully" :"Competition Promotion added successfully", + "CannotaddcompetitionPromotion" :"Cannot add competition Promotion", + "Pleaseselectpromotiontype" :"Please select promotion type", + "Doyoureallywanttoremovethispromotion" :"Do you really want to remove this promotion?", + "Doyoureallywanttoremoveallpromotiondata" :"Do you really want to remove all promotion data?", + "AddedPromotions" :"Added Promotions", + "MRP" :"MRP", + "PleaseenterMRP" :"Please enter MRP", + "SellingpriceshouldnotbegreaterthanMRP" :"Selling price should not be greater than MRP", + "SellingPrice" :"Selling Price", + "Pleaseenterremark" :"Please enter remark", + "Pleaseclick" :"Please click", + "Promotionaddedsuccessfully" :"Promotion added successfully", + "Promotionremovedsuccessfully" :"Promotion removed successfully", + "CannotremovePromotionnotfound" :"Cannot remove! Promotion not found", + "ContactConversion": "Contact Conversion", + "TotalContacts" :"Total Contacts", + "TotalSampled" :"Total Sampled", + "CustomerConverted" :"Customer Converted", + "SConversion" :"S-Conversion", + "Contactconversionaddedsuccessfully":"Contact conversion added successfully", + "Cannotaddcontactconversion" :"Cannot add contact conversion", + "Pleaseentertotalcontactsfortoday" :"Please enter total contacts for today", + "Totalcontactscannotbegreaterthan" :"Total contacts cannot be greater than", + "Pleaseentercustomerconvertedfortoday" :"Please enter customer converted for today", + "CustomerConvertedcannotbegreaterthanTotalContacts":"Customer Converted cannot be greater than Total Contacts", + "Pleaseentertotalsampledfortoday" :"Please enter total sampled for today", + "TotalSampledcannotbegreaterthanTotalContacts" :"Total Sampled cannot be greater than Total Contacts", + "TotalContact": "Total Contact", + "SStock" :"S-Stock", + "STracking" :"S-Tracking", + "CustomerTrackingQuestion":"Customer Tracking Question", + "Sale": "Sale", + "SSale" :"S-Sale", + "Salesupdatedsuccessfully" :"Sales updated successfully", + "CannotupdateSales" :"Cannot update Sales", + "SaleShouldnotbegreaterthanthestockfor" :"Sale Should not be greater than the stock for", + "Saleshouldnotbegreaterthanstockfor" :"Sale should not be greater than stock for", + "Pleaseentersaleforatleastoneproduct" :"Please enter sale for atleast one product!", + "PleaseenterSaleforatleastoneProductIfnotpresentthenEnter0" :"Please enter Sale for atleast one Product (If not present then Enter '0')", + "SaleShouldnotbegreaterthanthesumofOpeningStockandMiddayStockfor" : "Sale Should not be greater than the sum of Opening-Stock and Midday-Stock for", + "Survey": "Survey", + "Adhoc": "Adhoc", + "NoDataAvailable": "No Data Available", + "UplaodData": "Upload Data", + "Doyouwanttouploaddata": "Do you want to upload data?", + "Nodatatoupload": "No data to upload", + "VisitorLogin": "Visitor Login", + "VisitorFeedback": "Visitor Feedback", + "visitorfeedbackaddedsuccessfully": "visitor feedback added successfully", + "ClickSelfieImage": "Click Selfie Image", + "FeedbackQuestions": "Feedback Questions", + "Cannotupdatefeedback": "Cannot update feedback", + "Uploadedsuccessully": "Uploaded successully", + "CannotuploadvisitorfeedbackQAdata" : "CannotuploadvisitorfeedbackQAdata", + "visitorfeedbackupdatedsuccessfully" : "visitor feedback updated successfully", + "Feedback": "Feedback", + "EmployeeIDismissing": "Employee ID is missing..", + "Employeedataismissing": "Employee data is missing..", + "Pleasesearchemployee": "Please search employee", + "Upload": "Upload", + "AddVisitors": "Add Visitors", + "Employeecode": "Employee code", + "Visitors": "Visitors", + "Name": "Name", + "Designation": "Designation", + "Actions": "Actions", + "AddVisitor": "Add", + "PickItems": "Pick Items", + "Answer": "Answer", + "Pleaseenteremployeecode": "Please enter employee code", + "GettingEmployeeDetails": "Getting Employee Details", + "AddingEmployee": "Adding Employee", + "Visitoraddedsuccessfully": "Visitor added successfully", + "Cannotaddvisitor": "Cannot add visitor", + "Errorwhileaddingvisitor": "Error while adding visitor", + "PleaseclickCheckInImage": "Please click Check-In Image", + "PleaseclickCheckOutImage": "Please click Check-Out Image", + "Cannotdeletevisitornow": "Cannot delete visitor now", + "Visitoralreadyhadcheckedout": "Visitor already had checked out!", + "RemovingEmployee": "Removing Employee", + "Visitorremovedsuccessfully": "Visitor removed successfully", + "CannotRemovevisitor": "Cannot remove visitor", + "Errorwhileremovingvisitor": "Error while removing visitor", + "UploadingVisitorData": "Uploading Visitor Data", + "Visitorupdatedsuccessfully": "Visitor updated successfully", + "Cannotupdatevisitor": "Cannot update visitor", + "Errorwhileaddingemployee": "Error while adding employee", + "Visitordatauploaded": "Visitor data uploaded", + "Cannotuploadvisitordata": "Cannot upload visitor data", + "VisitorCheckOut": "Visitor Check Out", + "DoyoureallywanttoremoveVisitor": "Do you really want to remove Visitor?", + "Visitor": "Visitor", + "Alreadyexists": "already exists", + "Report": "Report", + "ReportsMenu": "Reports Menu", + "Total": "Total", + "MiscDocuments": "Misc. Documents", + "ConsumerSectionContent": "Consumer Section Content", + "TrainingContent": "Training Content", + "Description": "Description", + "ContentType": "Content Type", + "Target": "Target", + "Achivement": "Achivement", + "Go": "Go", + "Offtake": "Off take", + "FocusPack": "Focus Pack", + "Mandays": "Mandays", + "Sos": "Sos", + "SOS" : "SOS", + "1Qad": "1 Qad", + "Training": "Training", + "Exit": "Exit", + "Settings": "Settings", + "ClearDataLogout": "Clear Data & Logout", + "DoyoureallywanttoclearalldataThiswillremoveallcacheandstorage": "Do you really want to clear all data? This will remove all cache and storage.", + "Warning": "Warning!", + "Allcacheandstoragewillbedeletedfortheapp": "All cache and storage will be deleted for the app.", + "PrivacyPolicy": "Privacy Policy", + "ContactUs": "Contact Us", + "MeetUs": "Meet Us", + "Manufacturingdate": "Manufacturing date", + "PleaseSelectCategory": "Please select category", + "SearchByProductName": "Search by Product Name", + "MiddayStockhasbeenupdatedOpeningStockDatacannotbechangednow": "Midday-Stock has been updated! Opening-Stock Data cannot be changed now", + "ClosingStockhasbeenupdatedMiddayStockDatacannotbechangednow": "Closing-Stock has been updated! Midday-Stock Data cannot be changed now", + "ClosingStockShouldnotbegreaterthanthesumofOpeningStockandMiddayStockfor" : "Closing-Stock Should not be greater than the sum of Opening-Stock and Midday-Stock for ", + "ClosingStockShouldnotbegreaterthantheOpeningStockfor" : "Closing-Stock Should not be greater than the Opening-Stock for ", + "ShouldnotbegreaterthanthesumofOpeningStockandMiddayStockfor" :" Should not be greater than the sum of Opening-Stock and Midday-Stock for ", + + "FillOpenningStockfirst": "Fill Openning-Stock first", + "FillMiddayStockfirst": "Fill Midday-Stock first", + "Stockupdatedsuccessfully": "Stock updated successfully", + "Cannotaddstock": "Cannot add stock", + "Pleaseclickimagefor": "Please click image for ", + "Pleaseenter": "Please enter ", + "for": "for", + "in" : "in", + "value" :"value", + "Pleaseenterwholenumbersonly": "Please enter whole numbers only", + "SearchbyDisplayNameorSubCategoryName": "Search by Display Name or Sub Category Name", + "PaidVisibilityupdatedsuccessfully": "Paid Visibility updated successfully", + "Cannotaddpaidvisibilitydata" : "Cannot add paid visibility data", + "Cannotaddpaidvisibility": "Cannot add paid visibility", + "Pleaseselectifvisiblitypresentornotfor": "Please select if visiblity present or not for", + "Pleaseselectreasonfor": "Please select reason for", + "Pleaseclickallimagesfor": "Please click all images for", + "Pleasefillalltherequiredfieldin" : "Please fill all the required field in", + "Pleaseaddimagesin" : "Please add images in", + "Pleasepickadatefortherequiredfieldin" : "Please pick a date for the required field in", + "Pleaseselectoptionsfortherequiredfieldin" : "Please select options for the required field in", + "SelectReason": "Select Reason", + "select": "Select", + "Pleaseselectdate": "Please select date!", + "Pleaseenterstock": "Please enter stock!", + "Pleaseenterlotno": "Please enter lot no.!", + "ThisdateisalreadyaddedPleaseselectdifferentdate": "This date is already added! Please select different date", + "AddNearExpiryStock": "Add Near Expiry Stock", + "ExpiryDate": "Expiry Date", + "LotNo": "Lot No.", + "Date": "Date", + "Doyoureallywanttoremovethisstock": "Do you really want to remove this stock?", + "Doyoureallywanttoremovethisvisibility": "Do you really want to remove this visibility?", + "Doyoureallywanttoremoveallvisibilitydata": "Do you really want to remove all visibility data?", + "AdditionalVisibilityaddedsuccessfully": "Additional Visibility added successfully", + "AddStoreInfoaddedsuccessfully": "Add Store Info added successfully", + "Cannotaddaddstoreinfo": "Cannot add Add Store info", + + "Visibilityaddedsuccessfully" : "Visibility added successfully", + "Cannotaddadditionalvisibility": "Cannot add additional visibility", + "Pleaseselectsubcategory": "Please select sub category", + "Pleaseselectbrand": "Please select brand", + "Pleaseselectproduct" :"Please select product", + "Pleaseselectdisplaytype": "Please select display type", + "Pleaseclickimage": "Please click image", + "Thisvisibilityhasalreadybeenadded": "This visibility has already been added", + "Visibilityremovedsuccessfully": "Visibility removed successfully", + "CannotremoveVisibilitynotfound": "Cannot remove! Visibility not found", + "ImageTypes": "Image Types", + "Imagesaddedsuccessfully": "Images added successfully", + "Cannotaddimages": "Cannot add images", + "DoyoureallywanttoremovethisImage": "Do you really want to remove this Image?", + "Promotionupdatedsuccessfully": "Promotion updated successfully", + "CannotupdatePromotion": "Cannot update Promotion", + "Pleaseselectifpromotionpresentornotfor": "Please select if promotion present or not for", + "Pleaseselectifstockisavailablefor": "Please select if stock is available for", + "Cannotaddsplitshelftalkerimages": "Cannot add split shelf talker images", + "Cannotaddshelftalkerstockdata": "Cannot add shelf talker stock data", + "Cannotaddshelftalkerquestionsdata": "Cannot add shelf talker questions data", + "ShelfTalkerdataupdatedsuccessfully": "Shelf Talker data updated successfully", + "Cannotaddshelftalkerdata": "Cannot add shelf talker data", + "Pleaseenterstockfor": "Please enter stock for ", + "Pleaseenterwholenumbersonlyfor" : "Please enter whole numbers only for ", + "Pleaseenterexpirystockfor" :"Please enter expiry stock for ", + "PleaseselectatleastoneSKUfor": "Please select atleast one SKU for", + "ExpiryStockvalueshouldbelessthanorequaltoStockfor" : "Expiry Stock value should be less than or equal to Stock for ", + "In": "In", + "Pleasepickadatefortherequiredfield": "Please pick a date for the required field", + "Pleaseselectratingfortherequiredfield": "Please select rating for the required field", + "Pleasefillalltherequiredfield": "Please fill all the required field", + "SelectProducts": "Select Products", + "SelectAll": "Select All", + "CaptureShelfTalkerImages": "Capture Shelf Talker Images", + "ShelfTalkerQuestions": "Shelf Talker Questions", + "SearchItems": "Search Items", + "SearchbyPromotion": "Search by Promotion", + "PromotionImage" : "Promotion Image", + "Yourdatawillbeclean" : "Your data will be clean", + "Cannotaddposmquestionsdata": "Cannot add POSM questions data", + "POSMdataupdatedsuccessfully": "POSM data updated successfully", + "CannotaddPOSMdata": "Cannot add POSM data", + "Cannotaddpromotionimages": "Cannot add promotion images", + "Cannotaddpromotionstockdata": "Cannot add promotion stock data", + "Cannotaddpromotionquestionsdata": "Cannot add promotion questions data", + "Promotiondataupdatedsuccessfully": "Promotion data updated successfully", + "Cannotaddpromotiondata": "Cannot add promotion data", + "CapturePromotionImages": "Capture Promotion Images", + "PromotionQuestions": "Promotion Questions", + "POSMQuestions": "POSM Questions", + "EnterRemark": "Enter Remark", + "PleaseEnterRemarkFor": "Please enter remark for", + "Pleaseselectdeploymenttypefor":"Please select deployment type for", + "Cannotsavepossaledata" : "Cannot save possale data", + "Cannotsaveheaderpossaledata" : "Cannot save headerpossale data", + "Pleaseselectmonth" :"Please select month", + "PleaseSelectReason" :"Please Select Reason", + "Month" :"Month", + "MissedCalladdedsuccessfully" :"Missed Call added successfully", + "CannotaddMissedCall" : "Cannot add Missed Call", + "PleaseenterUniqueCode" :"Please enter Unique Code", + "Numberisalreadyexist" :"Number is already exist", + "PleaseenterUniqueCodein" :"Please enter Unique Code in", + "MissedCallImage" :"Missed Call Image", + "UniqueCode" :"Unique Code", + "AddedCodes" :"Added Codes", + "Adduniquecode" :"Add unique code?", + "DoyoureallywanttoremovethismissedcallCode" :"Do you really want to remove this missed call Code", + "DoyoureallywanttoremovethismissedcallCodedata" :"Do you really want to remove this missed call Code data", + "Creatingstore" :"Creating store", + "AddStoreImage" :"Add Store Image", + "Location" :"Location", + "PinCode" :"Pin Code", + "TaxType" :"Tax Type", + "GSTNo" :"GST No", + "ContactPerson" :"Contact Person", + "ContactNumber" :"Contact Number", + "MobileNumber" :"Mobile Number", + "Email" :"Email", + "City" :"City", + "ChainName" :"Chain Name", + "ChannelName" :"Channel Name", + "StoreClass" :"Store Class", + "DistributorName" :"Distributor Name", + "Pleaseenterbackroomstockfor" :"Please enter backroom stock for", + "BreakType" :"Break Type", + "BreakTimeRules" :"Break Time Rules", + "addedsuccessfully":"added successfully", + "CannotaddTime" :"Cannot add Time", + "MinCount" :"Min Count", + "MaxCount" :"Max Count", + "LoginTime":"Login Time", + "StartTime" :"Start Time", + "EndTime" :"End Time", + "Duration" :"Duration", + "START":"START", + "END" :"END", + "SaveNUpload" : "Save & Upload", + "DBNonWorking" :"DB Non Working", + "Plesaeclickselfieinfrontofwarehouse" :"Plesae click selfie in front of warehouse", + "Reasonfornotworkinginwarehouse" :"Reason for not working in warehouse", + "Youcannotselectthisreasonyouhavealreadyuploadeddataforadistributor" :"You cannot select this reason, you have already uploaded data for a distributor!", + "ProgramList" :"Program List", + "CannotaddpaidProgramimages" :"Cannot add paid Program images", + "CannotaddpaidProgramstockdata" :"Cannot add paid Program stock data", + "CannotaddpaidProgramquestionsdata" :"Cannot add paid Program questions data", + "PaidProgramupdatedsuccessfully" :"Paid Program updated successfully", + "CannotaddpaidProgramdata" :"Cannot add paid Program data", + "PleaseselectreasonforPlusin" :"Please select reason for Plus in", + "PleaseselectreasonforMinusin" :"Please select reason for Minus in", + "inLastVisit" :"in Last Visit", + "ReasonforPlus" :"Reason for Plus", + "ReasonforMinus" :"Reason for Minus", + "SInventory" :"S-Inventory", + "SamplingInventoryupdatedsuccessfully" :"Sampling Inventory updated successfully", + "Samplingaddedsuccessfully" :"Sampling added successfully", + "Cannotaddsamplingdata" :"Cannot add sampling data", + "CannotupdateSamplingInventory" :"Cannot update Sampling Inventory", + "InventoryQuestion" :"Inventory Question", + "Youhavealreadystartedlunch" :"You have already started lunch", + "Youhavealreadyendlunch" :"You have already end lunch", + "Pleasecapturestarttimeimage" :"Please capture start time image", + "PleasefilldataforInventory" :"Please fill data for Inventory", + "PleasefilldataforCustomerTracking" :"Please fill data for Customer Tracking", + "PleasefilldataforContactConversion" :"Please fill data for Contact Conversion", + "PleasefilldataforSale" :"Please fill data for Sale", + "PleaseaddLunchStartTiming" :"Please add Lunch Start Timing", + "PleaseaddLunchEndTiming" :"Please add Lunch End Timing", + "EndTimeImage" :"End Time Image", + "StartLunch" :"Start Lunch", + "EndLunch" :"End Lunch", + "Pleasesaveyourdatabeforechangetab" :"Please save your data before change tab", + "Doyoureallywanttoremovethissampling" :"Do you really want to remove this sampling?", + "Doyoureallywanttoremovealldata" :"Do you really want to remove all data?", + "Retake" :"Retake", + "IfanyimageisblurredyoucanRetakeorDeletetheImage" :"If any image is blurred you can 'Retake' or 'Delete' the Image?", + "UploadIRImagesYoucannoteditafterimagesuploadedtotheserver" :"Upload IR Images! You cannot edit after images uploaded to the server!", + "Delete" :"Delete", + "StartSession" :"Start Session", + "ResumeSession" :"Resume Session", + "PreviousAuditScore" :"Previous Audit Score", + "QuestionCategory" :"Question Category", + "ObtainScore" :"Obtain Score", + "Calculated" :"Calculated", + "TotalScore" :"Total Score", + "CityName" :"City Name", + "ChannelId" :"Channel Id", + "UpdatingStoreProfile" :"Updating Store Profile", + "CannotupdateStoreChecklist" :"Cannot update Store Checklist!", + "ProductCategories" :"Product Categories", + "CannotaddAdditionalVisibilityIRImagesdata" :"Cannot add Additional Visibility IR Images data", + "CannotaddAdditionalVisibilityIRStatusdata" :"Cannot add Additional Visibility IR Status data", + "CannotaddCompetitionVisibilityIRImagesdata" :"Cannot add Competition Visibility IR Images data", + "CannotaddCompetitionVisibilityIRStatusdata" :"Cannot add Competition Visibility IR Status data", + "Pleaseclickimages" :"Please click images", + "AdditionalVisibilityImage" :"Additional Visibility Image", + "KPIName" :"KPI Name", + "VisitDate" :"Visit Date", + "PendingImagesCount" :"Pending Images Count", + "PendingSessionsCount" :"Pending Sessions Count", + "IRSessionsUploaded" :"IR Sessions Uploaded.", + "AllUploaded" :"All Uploaded", + "UploadIRSession" :"Upload IR Session", + "IRPendingImages" :"IR Pending Images", + "OrderId" :"Order Id", + "StorePO" :"Store PO", + "SystemPO" :"System PO", + "ProductCount" :"Product Count", + "OrderStatus" :"Order Status", + "OrderStatusupdatedsuccessfully" :"Order Status updated successfully", + "CannotupdateOrderStatus" :"Cannot update Order Status", + "PleaseFill" :"Please Fill", + "OrderQty" :"Order Qty", + "OrderDetail" :"Order Detail", + "DoyoureallywanttoremoveallOrderData" :"Do you really want to remove all Order Data?", + "Orderupdatedsuccessfully" :"Order updated successfully", + "PleaseenterOrderQtyforatleastoneProduct" :"Please enter Order Qty for atleast one Product", + "BannerDetail" :"Banner Detail", + "Grade" :"Grade", + "AuditDate" :"Audit Date", + "SomethingwentwrongCannotloadwarehousePOSM" :"Something went wrong! Cannot load warehouse POSM", + "Somethingwentwrongwhilesavingdata" :"Something went wrong while saving data!", + "Warehouses" :"Warehouses", + "Warehouse" :"Warehouse", + "WarehouseId" :"Warehouse Id", + "TakenPOSMQty" :"Taken POSM Qty", + "Datauploadedsuccessfuly" :"Data uploaded successfuly!", + "Cannotupdatestatus" :"Cannot update status!", + "POSMquantityshouldnotbegreaterthanthecurrentwarehousePOSMStockfor" :"POSM quantity should not be greater than the current warehouse POSM Stock for", + "Doyoureallywanttosaveanduploaddata" :"Do you really want to save and upload data?", + "WarehousePOSM" :"Warehouse POSM", + "WarehousePOSMStock" :"Warehouse POSM Stock", + "UserPOSMStockAvailable" :"User POSM Stock Available", + "POSMQuantity" :"POSM Quantity", + "MSLMandatory" :"MSL (Mandatory)", + "NonMSLNonMandatory" :"Non-MSL (Non-Mandatory)", + "Latitude" :"Latitude", + "Longitude" :"Longitude", + "Pleaseselectdistributorname": "Please select distributor name", + "Pleaseselectcityname": "Please select city name", + "Pleaseselectstoretype": "Please select store type", + "Pleasefillthestorename": "Please fill the store name", + "Pleasefillthestoreaddress": "Please fill the store address", + "Pleaseclickaddfirst": "Please click add first", + "Storeaddedinlastsevendays" : "Store added in last 7 days" + + + + } + \ No newline at end of file diff --git a/PerformicsSrc/src/constants/Text_thai.json b/PerformicsSrc/src/constants/Text_thai.json new file mode 100644 index 0000000..61e2e8e --- /dev/null +++ b/PerformicsSrc/src/constants/Text_thai.json @@ -0,0 +1,355 @@ +{ + "HeyThere":"สวัสดีค่ะ", + "EnteryourProjectId":"ป้อนรหัสโปรเจ็คของคุณ", + "ProjectId":"รหัสโปรเจ็ค", + "Next":"ต่อไป", + "PleaseenterProjectId":"โปรดป้อนรหัสโปรเจ็ค", + "ProjectnotfoundensureifyouhaveenteredcorrectprojectId":"ไม่พบโปรเจ็ค ตรวจสอบว่าคุณป้อนรหัสโปรเจ็คที่ถูกต้อง", + "LoggingIn":"เข้าสู่ระบบ", + "Logintoyouraccount":"ลงชื่อเข้าใช้บัญชีของคุณ", + "Username":"ชื่อผู้ใช้", + "Password":"รหัสผ่าน", + "Cannotgetuserposition":"ไม่สามารถรับตำแหน่งผู้ใช้", + "Pleaseallowlocationpermissiontologin":"โปรดอนุญาตให้แอพเข้าถึงการระบุตำแหน่ง", + "Pleaseconnecttointernet":"โปรดเชื่อมต่ออินเตอร์เน็ต", + "LoginSuccess":"เข้าสู่ระบบสำเร็จ", + "CannotloginSomethingwentwrong":"ล็อกอินไม่ได้! บางอย่างผิดพลาด", + "Pleaseenterusername":"โปรดใส่ชื่อผู้ใช้", + "Pleaseenterpassword":"โปรดใส่รหัสผ่าน", + "CreateMPin":"สร้าง M-Pin", + "SetMPintologinyouraccount":"ตั้งค่า M-Pin เพื่อเข้าสู่ระบบบัญชีของคุณ", + "EnterMPin":"ป้อน M-Pin", + "ConfirmMPin":"ยืนยัน M-Pin", + "PleaseenterMPin":"โปรดกรอก M-Pin", + "Pleaseenter4digitMPin":"โปรดป้อน M-Pin 4 หลัก", + "PleaseconfirmyourMPin":"โปรดยืนยัน M-Pin ของคุณ", + "ConfirmMPindoesnotmatch":"ยืนยัน M-Pin ไม่ตรงกัน", + "Sessionnotfoundpleaseloginagain":"ไม่พบข้อมูล โปรดเข้าสู่ระบบอีกครั้ง", + "YouenteredwrongMPin":"คุณป้อน M-Pin ผิด", + "MPintologinyouraccount":"กรอก M-PIN เพื่อเข้าสู่ระบบ", + "ForgotMPin":"ลืม M-PIN", + "Login":"เข้าสู่ระบบ", + "Appupdateavailableversion":"อัปเดตแอปเวอร์ชันที่มีให้:", + "UpdateapptothenewversionYourdataissafeandwillnotbelostduringthisupdate":"อัปเดตแอปเป็นเวอร์ชันใหม่! ข้อมูลของคุณปลอดภัยและจะไม่สูญหายระหว่างการอัปเดตนี้", + "Downloadingapk":"กำลังดาวน์โหลด apk", + "Loading":"กำลังโหลด", + "Pleaseselectyouranswer":"โปรดเลือกคำตอบของคุณ", + "OneQuestionADay":"หนึ่งคำถามต่อวัน", + "WellDoneGoodJob":"ยอดเยี่ยม", + "OopsBetterlucknexttime":"อุ๊บส์! ครั้งหน้าขอให้โชคดี", + "Back":"กลับ", + "Submit":"ส่ง", + "NoticeBoard":"ประกาศ", + "Youhavenojourneyplanfortoday":"คุณไม่มีแผนงานสำหรับวันนี้!", + "Cannotdownloaddata":"ดาวน์โหลดข้อมูลไม่ได้!", + "UploadingData":"กำลังอัพโหลดข้อมูล", + "Uploadingvisitorsdata":"กำลังอัพโหลดข้อมูลของคุณ", + "AllDataUploaded":"อัพโหลดข้อมูลทั้งหมดแล้ว", + "CannotUploadVisitors":"ไม่สามารถอัปโหลดข้อมูลของคุณได้", + "UploadingDatafor":"กำลังอัปโหลดข้อมูลสำหรับ", + "Erroroccurwhileuploadingdatafor":"เกิดข้อผิดพลาดขณะอัปโหลดข้อมูลสำหรับ", + "Alldatauploadedfor":"ข้อมูลทั้งหมดที่อัปโหลดสำหรับ", + "NodatatoUpload":"ไม่มีข้อมูลที่จะอัปโหลด", + "UploadingImages":"กำลังอัพโหลดรูปภาพ", + "Alldataandimagesuploadedfor":"ข้อมูลและรูปภาพทั้งหมดที่อัปโหลดสำหรับ", + "Cannotuploadimagesfor":"ไม่สามารถอัปโหลดภาพสำหรับ", + "Couldnotstartupload":"ไม่สามารถเริ่มอัปโหลดได้!", + "DownloadData":"ดาวโหลดข้อมูล", + "DownloadingData":"กำลังดาวน์โหลดข้อมูล", + "Doyouwanttodownloaddata":"ต้องการดาวโหลดข้อมูลหรือไม่", + "DataDownloaded":"ดาวโหลดข้อมูลสำเร็จ", + "Couldnotdownload":"ดาวน์โหลดไม่ได้", + "Nodatafoundfor":"ไม่พบข้อมูลสำหรับ", + "Couldnotstartdownload":"ไม่สามารถเริ่มดาวน์โหลด!", + "DailyRoutePlan":"แผนเยี่ยมร้านค้ารายวัน", + "StoreList":"รายชื่อร้านค้า", + "Planned":"แผน", + "StoreName":"ชื่อร้าน", + "StoreId":"ID ร้านค้า", + "StoreType":"ประเภทร้านค้า", + "StoreCode":"รหัสร้านค้า", + "Address":"ที่อยู่", + "StoreVisited":"เข้าเยี่ยมร้านค้า", + "Yes":"ใช่", + "No":"ไม่ใช่", + "YouneedtobeinthestoretoCheckInCheckOut":"คุณต้องอยู่ภายในบริเวณร้านค้าเพื่อ เช็คอิน / เช็คเอ้าท์", + "Youneedtobeinthestore":"ต้องอยู่ในร้าน", + "toCheckInCheckOut":"เพื่อเช็คอิน/เช็คเอ้าท์", + "Alloweddistancefromstore":"ระยะห่างจากร้านค้าที่อนุญาต คือ", + "Yourdistancefromstore":"คุณอยู่ห่างจากร้านค้า ", + "OK":"ตกลง", + "ClickSelfieinfrontofStore":"เลือกเพื่อถ่ายรูปตนเองกับร้านค้า", + "Youare":"คุณคือ", + "Awayfromthestore":"ห่างจากร้าน!", + "NoDataFoundPleaseDownloadDataFirst":"ไม่พบข้อมูล! โปรดดาวน์โหลดข้อมูลก่อน", + "AllDataalreadyuploadedforthisstore":"อัปโหลดข้อมูลทั้งหมดสำหรับร้านค้านี้แล้ว!", + "Alreadymarkedasnotworkingstatusforthisstore":"ทำเครื่องหมายว่าไม่ทำงานสำหรับร้านค้านี้แล้ว!", + "CheckIndatanotavailable":"ไม่มีข้อมูลการเช็คอิน!", + "Alreadycheckedout":"เช็คเอ้าท์แล้ว!", + "Dataalreadyuploaded":"อัพโหลดข้อมูลแล้ว!", + "Datapartiallyuploaded":"ข้อมูลถูกอัปโหลดบางส่วน!", + "Youarealreadycheckedintotheotherstore":"คุณได้เช็คอินไปยังร้านอื่นแล้ว!", + "YouhaveclearedtheAppDataRestoringCheckinInfo":"คุณได้ล้างข้อมูลแอพแล้ว! กำลังกู้คืนข้อมูลการเช็คอิน", + "Pleaseallowlocationpermission":"ขออนุญาตระบุตำแหน่ง", + "Storelocationnotavailable":"ไม่พบสถานที่ตั้งของร้าน", + "Nodatafound":"ไม่พบข้อมูล", + "PleasefillallKPI":"โปรดกรอก KPI ให้ครบ", + "Gettinglocation":"รับตำแหน่งปัจจุบัน", + "Youcannotcheckout":"คุณไม่สามารถ เช็คเอ้าท์", + "Youcannotcheckin":"คุณไม่สามารถเช็คอินได้!", + "Youarenotwithinthealloweddistancefromthestore":"คุณไม่ได้อยู่ภายในระยะทางที่กำหนดของร้านค้า เช่น", + "UpdatingCheckoutStatus":"กำลังอัปเดตสถานะการเช็คเอ้าท์", + "Erroroccurwhilecheckout":"เกิดข้อผิดพลาดขณะเช็คเอ้าท์", + "Somethingwentwrong":"บางอย่างผิดพลาด!", + "Erroroccurwhileuploadingdata":"เกิดข้อผิดพลาดขณะอัปโหลดข้อมูล", + "DeletingCheckInData":"ลบข้อมูลการเช็คอิน", + "CheckInRemoved":"ลบข้อมูลการเช็คอินแล้ว", + "CheckInremovedsuccessfullybutcannotupdatestatus":"ลบข้อมูลการเช็คอินเรียบร้อยแล้ว แต่ไม่สามารถอัปเดตสถานะได้!", + "CannotRemoveCheckIn":"ไม่สามารถลบข้อมูลการเช็คอินได้!", + "DoyoureallywanttoCancelCheckIn":"คุณต้องการยกเลิกการเช็คอินจริงหรือ?", + "Yourallcheckindatawillbelost":"ข้อมูลการเช็คอินทั้งหมดของคุณจะหายไป!", + "Errorimagefilewritefailed":"ข้อผิดพลาด: ไฟล์รูปภาพล้มเหลว", + "Pleasecaptureaimage":"โปรดถ่ายรูป", + "CannotProcessImage":"ไม่สามารถประมวลผลภาพ", + "Pleaseclickselfieinfrontofstore":"โปรดกดเซลฟี่หน้าร้าน", + "Doyoureallywanttocheckout":"คุณต้องการที่จะ เช็คเอ้าท์ใช่หรือไม่?", + "Youneedtogeotagstore":"คุณต้องระบุตำแหน่งร้าน", + "Cameraunavailable":"กล้องไม่พร้อมใช้งาน", + "CheckIn":"เช็คอิน", + "CheckedIn":"เช็คอินสำเร็จ", + "CheckOut":"เช็คเอ้าท์", + "CheckedOut":"เช็คเอ้าท์สำเร็จ", + "CheckOutImage":"ภาพเช็คเอ้าท์", + "NotWorking":"ไม่ทำงาน", + "Uploaded":"อัพโหลดแล้ว", + "PartiallyUploaded":"อัปโหลดบางส่วน", + "DataUploaded":"อัพโหลดข้อมูลแล้ว", + "Searchby":"ค้นหาโดย", + "Save":"บันทึก", + "Close":"ปิด", + "Reasonfornotworkinginstore":"สาเหตุที่ไม่ได้ทำงานที่ร้าน", + "NonWorkingReason":"สาเหตุที่ไม่ได้ทำงานที่ร้าน", + "DataUploadedButcouldnotupdatestorestatus":"อัพโหลดข้อมูลแล้ว! แต่ไม่สามารถอัพเดทสถานะร้านได้!", + "Cannotuploaddata":"อัพโหลดข้อมูลไม่ได้", + "OopsSomethingwentwrongcannotcreateJCP":"อุ๊บส์! มีบางอย่างผิดพลาด ไม่สามารถสร้าง JCP", + "Pleaseselectreasonfornotworking":"โปรดเลือกเหตุผลที่ไม่ทำงาน", + "Youcannotselectthisreasonasthereisalreadyastore":"คุณไม่สามารถเลือกเหตุผลนี้ได้เพราะ มีร้านค้าที่อัพโหลดข้อมูลแล้ว!", + "CouldnotcreateJCP":"ไม่สามารถสร้าง JCP!", + "Geotag":"พิกัด", + "UploadGeotag":"อัพโหลดพิกัด", + "ClickStoreFrontImage":"คลิกรูปภาพหน้าร้าน", + "Cannotuploadgeotag ":"ไม่สามารถอัพโหลดพิกัดได้", + "GeoTagDataUploadedSuccessfully":"อัพโหลดข้อมูลพิกัดเรียบร้อยแล้ว", + "Geotaguploadedbutcannotupdategeotagstatus":"อัพโหลดพิกัดสำเร็จ แต่ไม่สามารถอัพเดทสถานะพิกัดได้!", + "Pleaseclickstorefrontimage":"โปรดคลิกที่รูปหน้าร้าน", + "StoreCheckIn":"เช็คอินที่ร้าน", + "ProcessingCheckIn":"กำลังดำเนินการเช็คอิน", + "CheckinSuccessful":"เช็คอินสำเร็จ", + "CheckInDataUploadedsuccessfully":"อัพโหลดข้อมูลเช็คอินเรียบร้อยแล้ว", + "CouldnotaddCheckIndata":"เพิ่มข้อมูลการเช็คอินไม่ได้!", + "DailyMenu":"เมนูประจำวัน", + "SurveyId":"รหัสแบบสำรวจ", + "CategoryId":"หมวดหมู่", + "Pressmictostartrecordingvoice":"กดไมโครโฟนเพื่อเริ่มบันทึกเสียง", + "Doyoureallywanttoexitthescreen":"คุณต้องการที่จะออกจากหน้าจอ?", + "Pleasestoprecordingfirst":"โปรดหยุดบันทึกก่อน", + "AlreadyRecording":"การบันทึก", + "Pleasestopplayerfirst":"โปรดหยุดผู้เล่นก่อน!", + "RecordingPressmictostoprecording":"การบันทึก... ! กดไมค์เพื่อหยุดการบันทึก", + "Maximumrecordtimelimitreached":"ถึงขีดจำกัดเวลาบันทึกสูงสุดแล้ว", + "Cannotopenfileforrecording":"ไม่สามารถเปิดไฟล์สำหรับบันทึกได้!", + "AlreadyPlaying":"กำลังเล่น", + "Filenotfound":"ไม่พบไฟล์!", + "Pleaseselectoptionsfortherequiredfield":"โปรดเลือกตัวเลือกข้อมูลที่ต้องการ", + "Pleasepickadate":"โปรดเลือกวันที่", + "Pleaseselectrating":"โปรดเลือกเรตติ้ง", + "Pleasefillalldetails":"โปรดกรอกรายละเอียดให้ครบถ้วน", + "Pleaserecordaudioclipfortherequiredfield":"โปรดบันทึกคลิปเสียงสำหรับช่องที่ต้องกรอก", + "Pleaseaddimages":"โปรดเพิ่มรูปภาพ", + "DragItemsInOrder":"ลากรายการตามลำดับ", + "Pressandholdtodrag":"กดค้างไว้เพื่อลาก", + "RecordVoiceClip":"บันทึกคลิปเสียง", + "Youcanrecordmaxfor60secs":"คุณสามารถบันทึกได้สูงสุด 60 วินาที", + "SavingData":"บันทึกข้อมูล", + "Surveyupdatedsuccessfully":"อัพเดทแบบสำรวจเรียบร้อยแล้ว", + "Cannotupdatesurvey":"ไม่สามารถอัปเดตแบบสำรวจได้", + "OpeningStock":"สต๊อคเริ่มต้นของวัน", + "Bundlepack":"แพ็คคู่", + "Stock":"สต๊อค", + "ExpiryStock":"สต๊อคสินค้าหมดอายุ", + "Doyoureallywanttosavedata":"คุณต้องการบันทึกข้อมูลหรือไม่", + "Cancel":"ยกเลิก", + "StockUpdateSuccessfully":"อัพเดทสต๊อคเรียบร้อยแล้ว", + "BackroomStock":"สต๊อคหลังร้าน", + "MiddayStock":"สต๊อคระหว่างวัน", + "ClosingStock":"สต๊อคสุดท้ายของวัน", + "ShareofShelf":"Share of Shelf", + "SubCategoryFacing":"", + "BrandFacing":"", + "PaidVisibility":"พื้นที่พิเศษ", + "Endcap":"หัวชั้น", + "IsPresent":"พบที่สาขาหรือไม่?", + "CaptureImage":"บันทึกภาพ", + "Reason":"เหตุผล", + "Select":"เลือก", + "AddlfreeVisibility":"พื้นที่พิเศษเพิ่มเติม", + "Category":"หมวดหมู่", + "SubCategory":"หมวดหมู่ย่อย", + "Brands":"ยี่ห้อ", + "DisplayType":"ประเภทพื้นที่พิเศษ", + "Remark":"หมายเหตุ", + "Image":"รูปภาพ", + "Add":"เพิ่ม", + "AddedVisibilities":"เพิ่ม รายการพื้นที่พิเศษเพิ่มเติม", + "Pleaseaddfirst":"กรุณาเพิ่มก่อน", + "AdditionalvisibilityUpdateSuccessfully":"รายการพื้นที่พิเศษเพิ่มเติม อัพเดตสำเร็จ", + "CompetitionVisibility":"พื้นที่พิเศษของคู่แข่ง", + "Company":"บริษัท", + "Promotion":"โปรโมชั่น", + "PromoTalker":"ป้ายสื่อสิ่งพิมพ์", + "RunningonPOS":"โปรโมชั่นเข้าสู่ระบบของสาขา", + "PromotionUpdateSuccessfully":"อัพเดทโปรโมชั่นเรียบร้อยแล้ว", + "CompetitionPromotion":"โปรโมชั่นคู่แข่ง", + "ContactConversion":"", + "TotalContact":"", + "CustomerConverted":"", + "Sale":"ขาย", + "Survey":"สำรวจ", + "Adhoc":"ไม่ได้วางแผน", + "NoDataAvailable":"ไม่พบข้อมูล", + "UplaodData":"อัพโหลดข้อมูล", + "Doyouwanttouploaddata":"ต้องการอัพโหลดข้อมูลหรือไม่", + "Nodatatoupload":"ไม่มีข้อมูลอัพโหลด", + "VisitorLogin":"ข้อมูลพนักงานเข้าสู่ระบบ", + "Employeecode":"รหัสพนักงาน", + "Visitors":"ผู้เยี่ยมชม", + "Name":"ชื่อผู้ใช้", + "Designation":"พนักงานจัดเรียง", + "Actions":"การกระทำ", + "AddVisitor":"เพิ่มผู้เยี่ยมชม", + "Pleaseenteremployeecode":"กรุณากรอกรหัสพนักงาน", + "GettingEmployeeDetails":"รับรายละเอียดพนักงาน", + "AddingEmployee":"การเพิ่มพนักงาน", + "Visitoraddedsuccessfully":"เพิ่มผู้เข้าชมเรียบร้อยแล้ว", + "Cannotaddvisitor":"เพิ่มผู้เข้าชมไม่ได้", + "Errorwhileaddingvisitor":"เกิดข้อผิดพลาดขณะเพิ่มผู้เข้าชม", + "PleaseclickCheckInImage":"กรุณาคลิก เช็คอิน รูปภาพ", + "PleaseclickCheckOutImage":"กรุณาคลิก เช็คเอาท์ รูปภาพ", + "Cannotdeletevisitornow":"ไม่สามารถลบผู้เยี่ยมชมได้ในขณะนี้", + "Visitoralreadyhadcheckedout":"ผู้เยี่ยมชมได้เช็คเอาท์แล้ว!", + "RemovingEmployee":"การลบพนักงานออกจากรายการ", + "Visitorremovedsuccessfully":"นำผู้เยี่ยมชมออกเรียบร้อยแล้ว", + "CannotRemovevisitor":"ไม่สามารถลบผู้เยี่ยมชม", + "Errorwhileremovingvisitor":"เกิดข้อผิดพลาดขณะลบผู้เยี่ยมชม", + "UploadingVisitorData":"กำลังอัปโหลดข้อมูลผู้เข้าชม", + "Visitorupdatedsuccessfully":"อัปเดตผู้เยี่ยมชมเรียบร้อยแล้ว", + "Cannotupdatevisitor":"ไม่สามารถอัปเดตผู้เยี่ยมชมได้", + "Errorwhileaddingemployee":"เกิดข้อผิดพลาดขณะเพิ่มพนักงาน", + "Visitordatauploaded":"อัปโหลดข้อมูลผู้เข้าชมแล้ว", + "Cannotuploadvisitordata":"ไม่สามารถอัปโหลดข้อมูลผู้เยี่ยมชมได้", + "VisitorCheckOut":"ผู้เข้าชมเช็คเอาท์", + "DoyoureallywanttoremoveVisitor":"คุณต้องการลบผู้เยี่ยมชมจริงหรือไม่?", + "Visitor":"ผู้มาเยือน", + "Alreadyexists":"มีอยู่แล้ว", + "Report":"รายงาน", + "Performance":"ประสิทธิภาพ", + "Kpi":"KPI", + "Target":"เป้าหมาย", + "Achivement":"ความสำเร็จ", + "Go":"ส่ง", + "Offtake":"ยอดขาย", + "FocusPack":"", + "Mandays":"", + "Sos":"", + "1Qad":"", + "Training":"การฝึกอบรม", + "Exit":"ทางออก", + "Settings":"การตั้งค่า", + "ClearDataLogout":"ล้างข้อมูลและออกจากระบบ", + "DoyoureallywanttoclearalldataThiswillremoveallcacheandstorage":"คุณต้องการล้างข้อมูลทั้งหมดหรือไม่? การดำเนินการนี้จะลบแคชและข้อมูลทั้งหมด", + "Warning":"คำเตือน!", + "Allcacheandstoragewillbedeletedfortheapp":"แคชและข้อมูลทั้งหมดจะถูกลบออกสำหรับแอป", + "PrivacyPolicy":"นโยบายความเป็นส่วนตัว", + "ContactUs":"ติดต่อเรา", + "MeetUs":"พบกับเรา", + "Manufacturingdate":"วันผลิต", + "PleaseSelectCategory":"โปรดเลือกประเภท", + "SearchByProductName":"ค้นหาตามชื่อสินค้า", + "MiddayStockhasbeenupdatedOpeningStockDatacannotbechangednow":"Midday-Stock อัพเดทแล้ว! ไม่สามารถเปลี่ยนแปลงข้อมูลการเปิด-สต็อกได้ในขณะนี้", + "ClosingStockhasbeenupdatedMiddayStockDatacannotbechangednow":"ปิด-สต็อกได้รับการปรับปรุง! ไม่สามารถเปลี่ยนแปลงข้อมูล Midday-Stock ได้ในขณะนี้", + "FillOpenningStockfirst":"เติมตอนเปิด-สต๊อกก่อน", + "FillMiddayStockfirst":"เติม Midday-Stock ก่อน", + "Stockupdatedsuccessfully":"อัพเดทสต็อกเรียบร้อยแล้ว", + "Cannotaddstock":"เพิ่มสต๊อกไม่ได้", + "Pleaseclickimagefor":"กรุณาคลิกที่ภาพเพื่อ", + "Pleaseenter":"กรุณาป้อน", + "for":"สำหรับ", + "Pleaseenterwholenumbersonly":"กรุณากรอกตัวเลขเท่านั้น", + "SearchbyDisplayNameorSubCategoryName":"ค้นหาตามชื่อที่แสดงหรือชื่อหมวดย่อย", + "PaidVisibilityupdatedsuccessfully":"พื้นที่พิเศษ อัพเดทเรียบร้อย", + "Cannotaddpaidvisibility":"พื้นที่พิเศษ ไม่สามารถเพิ่ม", + "Pleaseselectifvisiblitypresentornotfor":"โปรดเลือกถ้า ทัศนวิสัย มีหรือไม่ สำหรับ", + "Pleaseselectreasonfor":"โปรดเลือกเหตุผลสำหรับ", + "Pleaseclickallimagesfor":"กรุณาคลิกภาพทั้งหมดสำหรับ", + "SelectReason":"เลือกเหตุผล", + "select":"เลือก", + "Pleaseselectdate":"กรุณาเลือกวันที่!", + "Pleaseenterstock":"กรุณาใส่สต็อก!", + "Pleaseenterlotno":"กรุณาใส่หมายเลขล็อต!", + "ThisdateisalreadyaddedPleaseselectdifferentdate":"เพิ่มวันที่นี้แล้ว! กรุณาเลือกวันที่อื่น", + "AddNearExpiryStock":"เพิ่มสินค้าใกล้หมดอายุ", + "ExpiryDate":"วันหมดอายุ", + "LotNo":"หมายเลขล็อต", + "Date":"วันที่", + "Doyoureallywanttoremovethisstock":"คุณต้องการที่จะลบหุ้นนี้หรือไม่?", + "Doyoureallywanttoremovethisvisibility":"คุณต้องการลบสิ่งนี้จริงๆ หรือไม่ ทัศนวิสัย?", + "Doyoureallywanttoremoveallvisibilitydata":"คุณต้องการที่จะลบทั้งหมด ทัศนวิสัย?", + "AdditionalVisibilityaddedsuccessfully":"พิเศษ ทัศนวิสัย เพิ่มเรียบร้อยแล้ว", + "Cannotaddadditionalvisibility":"ไม่สามารถเพิ่ม พิเศษ ทัศนวิสัย", + "Pleaseselectsubcategory":"กรุณาเลือกหมวดย่อย", + "Pleaseselectbrand":"กรุณาเลือกยี่ห้อ", + "Pleaseselectdisplaytype":"กรุณาเลือกประเภทการแสดงผล", + "Pleaseclickimage":"กรุณาคลิกที่ภาพ", + "Thisvisibilityhasalreadybeenadded":"เพิ่มการมองเห็นนี้แล้ว", + "Visibilityremovedsuccessfully":"นำการมองเห็นออกเรียบร้อยแล้ว", + "CannotremoveVisibilitynotfound":"ถอดไม่ได้! ทัศนวิสัย ไม่พบ", + "ImageTypes":"ประเภทรูปภาพ", + "Imagesaddedsuccessfully":"เพิ่มรูปภาพเรียบร้อยแล้ว", + "Cannotaddimages":"เพิ่มรูปภาพไม่ได้", + "DoyoureallywanttoremovethisImage":"คุณต้องการลบภาพนี้หรือไม่?", + "Promotionupdatedsuccessfully":"อัพเดทโปรโมชั่นเรียบร้อยแล้ว", + "CannotupdatePromotion":"อัพเดทโปรโมชั่นไม่ได้", + "Pleaseselectifpromotionpresentornotfor":"โปรดเลือกว่าโปรโมชันมีหรือไม่สำหรับ", + "Pleaseselectifstockisavailablefor":"โปรดเลือก ถ้าสต็อกสามารถใช้ได้สำหรับ", + "Cannotaddsplitshelftalkerimages":"เพิ่มรูปภาพไม่ได้ สำหรับ ชั้นวาง นักพูด", + "Cannotaddshelftalkerstockdata":"ไม่สามารถเพิ่ม ชั้นวาง นักพูด หุ้น", + "Cannotaddshelftalkerquestionsdata":"เพิ่มข้อมูลคำถามนักพูดในชั้นวางไม่ได้", + "ShelfTalkerdataupdatedsuccessfully":"ชั้นวาง นักพูด อัพเดทข้อมูลเรียบร้อยแล้ว", + "Cannotaddshelftalkerdata":"ไม่สามารถเพิ่ม ชั้นวาง นักพูด", + "Pleaseenterstockfor":"กรุณาใส่สต็อกสำหรับ", + "PleaseselectatleastoneSKUfor":"โปรดเลือก SKU อย่างน้อยหนึ่งรายการสำหรับ", + "In":"ใน", + "Pleasepickadatefortherequiredfield":"โปรดเลือกวันที่สำหรับฟิลด์ที่ต้องการ", + "Pleaseselectratingfortherequiredfield":"โปรดเลือกการให้คะแนนสำหรับฟิลด์ที่ต้องระบุ", + "Pleasefillalltherequiredfield":"กรุณากรอกข้อมูลให้ครบถ้วน", + "SelectProducts":"เลือกผลิตภัณฑ์", + "SelectAll":"เลือกทั้งหมด", + "CaptureShelfTalkerImages":"จับภาพชั้นวาง Talker", + "ShelfTalkerQuestions":"ชั้นวาง คำถามนักพูด", + "SearchItems":"ค้นหารายการ", + "SearchbyPromotion":"ค้นหาตามโปรโมชั่น", + "Cannotaddposmquestionsdata":"ไม่สามารถเพิ่มข้อมูลคำถาม POSM ได้", + "POSMdataupdatedsuccessfully":"อัปเดตข้อมูล POSM เรียบร้อยแล้ว", + "CannotaddPOSMdata":"เพิ่มข้อมูล POSM ไม่ได้", + "Cannotaddpromotionimages":"เพิ่มไม่ได้ โปรโมชั่น ภาพ", + "Cannotaddpromotionstockdata":"เพิ่มไม่ได้ โปรโมชั่น หุ้น ข้อมูล", + "Cannotaddpromotionquestionsdata":"เพิ่มไม่ได้ โปรโมชั่น คำถาม ข้อมูล", + "Promotiondataupdatedsuccessfully":"โปรโมชั่น ข้อมูล อัพเดทเรียบร้อย", + "Cannotaddpromotiondata":"เพิ่มไม่ได้ โปรโมชั่น ข้อมูล", + "CapturePromotionImages":"การจับกุม โปรโมชั่น ภาพ", + "PromotionQuestions":"โปรโมชั่น คำถาม", + "POSMQuestions":"คำถาม POSM", + "EnterRemark":"เข้าสู่ ข้อสังเกต", + "PleaseEnterRemarkFor":"โปรดเข้าสู่ข้อสังเกตสำหรับ" +} + diff --git a/PerformicsSrc/src/constants/constants.js b/PerformicsSrc/src/constants/constants.js new file mode 100644 index 0000000..4120dc1 --- /dev/null +++ b/PerformicsSrc/src/constants/constants.js @@ -0,0 +1,151 @@ +import SQLite from 'react-native-sqlite-2'; +import * as RNFS from 'react-native-fs'; +import bgimage1 from '../assets/performics/circle_cream.svg'; +import bgimage2 from '../assets/performics/circle_green.svg'; +import bgimage3 from '../assets/performics/circle_red.svg'; +import { AppName, DBName as AppDBName } from '../../../AppSpecificContant'; +import DeviceInfo from 'react-native-device-info'; +import { Platform } from 'react-native'; + + +const HierarchyTbls = { "Master_Category": "Master_Category", "Master_SubCategory": "Master_SubCategory", "Master_Brand": "Master_Brand", "Master_SubBrand": "Master_SubBrand", "Master_Product": "Master_Product", "Master_Program": "Master_Program" } +const fixedurl = 'https://api1.parinaam.in/api/generic/GetAppSettingWithDeviceInfo';//'https://api.parinaam.in/api/GetAppDetails'; +const ServerDTurl = 'https://api1.parinaam.in/api/generic/GetServerDateTime_INTL';//GetServerDateTime +const GyanCastURL = 'https://gyancast.parinaam.in/api/Cast/' +const baseurl = '';//'https://th.parinaam.in/Webservice/Performics_ThailandService.svc/'; +const URL_IMAGE = '';//'https://th.parinaam.in/webservice/Imageupload.asmx/'; +// const URL_GET_OTP = "https://cpmmfa.parinaam.in/Webservice/MFMService.svc/"; +// const URL_GETTRAINING = "https://th.parinaam.in/conten/training.html"; +// const testurl='https://Anitemp.parinaam.in/Webservice/Abbott_MnancService.svc/DownloadJson'; +// const testurl_upload='https://Anitemp.parinaam.in/Webservice/Abbott_MnancService.svc/UploadJson'; +// const testurl_image='https://th.parinaam.in/webservice/Imageupload.asmx/'; +// const myKeys={"DownloadKey":[{"KeyId":1,"DownloadKey":"Table_Structure","IsMandatory":true,"DevActive":true,"ProdActive":true,"DownloadSequence":1},{"KeyId":4,"DownloadKey":"Mapping_JourneyPlan","IsMandatory":false,"DevActive":true,"ProdActive":true,"DownloadSequence":3},{"KeyId":5,"DownloadKey":"Adhoc_JourneyPlan","IsMandatory":true,"DevActive":true,"ProdActive":true,"DownloadSequence":4},{"KeyId":6,"DownloadKey":"Product_Master","IsMandatory":true,"DevActive":true,"ProdActive":true,"DownloadSequence":5},{"KeyId":7,"DownloadKey":"Non_Working_Reason","IsMandatory":true,"DevActive":true,"ProdActive":true,"DownloadSequence":2}]}; +const sloganline = '...Any slogan line here...'; +const appname = 'Supervisor App'; + +// const db = SQLite.openDatabase({'name':'Performics.db'}); +// GD change +const Production = false +const proDate = "11/12/2024" +const DevType = Production ? "Prod" : "Dev" +const AppVersion = Platform.OS === 'ios' ? DeviceInfo.getVersion() : '6.9'; +//const DBName=AppDBName+'_'+AppVersion.replace(".","_")+'.db'; +const DBName = AppDBName + '_' + AppVersion.replace(".", "_"); + +console.log('DBName in contants:', DBName); +const db = SQLite.openDatabase(DBName, AppVersion); +const version = `Version ${AppVersion}`; +const copyrightText = '© copyright CPM India'; +const cpm_logo = 'cpm_logo.png'; +const logoImage = require('../assets/image/olay_logo.png'); +const gMap_key = 'AIzaSyCI1EaTZk3eXA_J_UsnBC1STOAFe`d5unJ4A'; +const OQAD_TimeConst = 30; +const LAST_ServerAPI_CALL = 'lastCallTime'; +const OLA_MAP_KEY = '4BsmswcWSrAjOhoUJiFKlhh4rNiksal1IrsRvE36' +const CONFIG = { + API_BASE_URL: "https://gbapi.parinaam.in/api", + CLIENT_ID: "84ee1898d70a24992a30b5c1", + CLIENT_SECRET: "ff46ca4523416076b50ab6691b107244f7b78f005af671613a36a14fb4e1be77", + DEFAULT_USER_ID: "demo_user_123", + DEFAULT_USER_NAME: "Demo User", + MAX_MESSAGE_LENGTH: 300, + CHAT_TITLE: "CPM India Chat", + WELCOME_MESSAGE: + "Welcome to Gyan Buddy. How may I help you?", + SESSION_END_MESSAGE: "Chat session has been ended successfully.", + DEFAULT_DISCLAIMER: "Gyan Buddy can make mistakes. Please verify details with an authorized representative before taking action." +}; + + +// const colors_Arr={"0":{bg:['#d0f5fb','#43b0c3'],color:'#0c8fa5'},"1":{bg:['#fdeacf','#ffbb58'],color:'#f39a19'},"2":{bg:['#ffdede','#f99292'],color:'#ff5f5f'},"3":{bg:['#ddd4ff','#a48ef9'],color:'#4551e7'},"4":{bg:['#d1efd3','#83c188'],color:'#3b9542'},"5":{bg:['#efeed1','#e1de7d'],color:'#bfbb44'},"6":{bg:['#fdeffd','#fdb9ff'],color:'#fc86ff'}}; +// const colors_Arr={"0":{bg:['#faf7ef','#e4d9be'],color:'#0c8fa5','bgImage':bgimage1},"1":{bg:['#e6f9f5','#8cdccc'],color:'#f39a19','bgImage':bgimage2},"2":{bg:['#faebed','#eec8ce'],color:'#ff5f5f','bgImage':bgimage3}}; +const colors_Arr = { "0": { bg: ['#eddeb8', '#e4b43c'], color: '#0c8fa5', 'bgImage': bgimage1 }, "1": { bg: ['#dcf2ee', '#30cfb0'], color: '#f39a19', 'bgImage': bgimage2 }, "2": { bg: ['#eebdc3', '#e88191'], color: '#ff5f5f', 'bgImage': bgimage3 } }; +const common_ImagePath = `${RNFS.DocumentDirectoryPath}/`; +//const common_ImagePath = `${RNFS.ExternalDirectoryPath}/`; +const ImageFolderPath = `${common_ImagePath}PerformicsAllImages/`; +const TrainingContentFolderPath = `${common_ImagePath}TrainingContent`; +const VisitorImageFolderPath = ImageFolderPath + `VisitorFeedbackImages/`; +const VisitorLoginImageFolderPath = ImageFolderPath + `VisitorLoginFeedbackImages/`; +const StoreCheckListImagePath = ImageFolderPath + 'StoreChecklist/'; +const ContractFormImagePath = ImageFolderPath + 'ContractForm/'; +const CoverageImagePath = ImageFolderPath + 'CoverageImages/'; +const AddStoreImagePath = ImageFolderPath + 'AddNewStoreImages/'; +const visiCoolerImgPath = `${common_ImagePath}VISICoolerImages`; +const kycImagePath = ImageFolderPath + 'KYCImages/'; +const dbbackupFolder = `${common_ImagePath}DbBackup`; +const GroomingImagePath = ImageFolderPath + 'GROOMINGIMG/'; + + + +const defUploadFolder = 'BulkImages'; +const KPIFolders = { + 'STOCK': 'StockSingleKPIImages', + 'STOCKWITHCATEGORY': 'StockWithCatImages', + 'OPSTOCK': 'StockImages', + 'BACKSTOCK': '', + 'MDSTOCK': 'StockImages', + 'CLSSTOCK': 'StockImages', + 'SOS': 'ShareOfShelfImages', + 'PAIDVISI': 'VisibilityImages', + 'ADDITIONALVISI': 'VisibilityImages', + 'COMPVISI': 'CompetitionVisibilityImages', + 'PROMOTION': 'PromotionImages', + 'COMPROMO': 'CompetionPromotionImages', + 'CONCOV': '', + 'SALE': '', + 'SURVEY': 'SurveyImages', + 'WINDOW': 'WindowImages', + 'POSM': 'POSMImages', + 'FEEDBACK': 'FeedbackImages', + 'PROMOTION2': 'Promotion2Images', + 'STOREIMG': 'StoreImages', + 'SHELFTALKER': 'ShelfTalkerImages', + 'PROMOTIONONEAPP': 'PromotionImages', + 'PAIDVISIONEAPP': 'PaidVisibilityImages', + 'POSSALEONEAPP': 'POSSaleImages', + 'SOSONEAPP': 'SOSImages', + 'CATEXEONEAPP': 'CategoryExecutionImages', + 'STORESCORE': '', + 'ORDER': 'OrderImages', + 'ORDERSIMPLIFYONEAPP':'OrderImages', + 'ORDERSTATUS': 'OrderImages', + 'TRAININGONEAPP': '', + 'StoreChecklist': 'StoreChecklistImages', + 'SAMPLINGONEAPP': 'SamplingImages', + "PROGRAMONEAPP": 'ProgramImages', + "TGBASEDONEAPP": "TargetBasedImages", + "ContractForm": 'ContractFormImages', + "CoverageImages": 'CoverageImages', + "AddNewStoreImages": "AddNewStoreImages", + "WAREHOUSEDEPLOY": "WareHouseDeployImages", + "WAREHOUSECAMPAIGN": "WareHouseCampaignImages", + 'DBVISICOOLERONEAPP': 'DistributorVisicoolerImages', + 'STOCKWITHPROMO': 'StockWithPromoImages', + 'VISICoolerImages': 'VISICoolerImages', + "KYCImages": "KYCImages", + "KYCONEAPP": "KYCImages", + "DBPOSMONEAPP": "DBPosmImages", + "DBWINDOWONEAPP": "DBWindowImages", + "RETURNSTOCKONEAPP": "ReturnStockImages", + +} + +const FolderForREC = { + 'SURVEY': 'SurveyVoicefiles', + 'VisitorFeedback': 'VisitorFeedbackImages', + 'VisitorLoginFeedback': 'VisitorLoginFeedbackImages', + +} +const NonProgramLabel_def = "Non Prog." +const StoreSearch_def = "Store Search." + +const IRSyncStatus = { + 'NOT_SYNCED': 'NOT_SYNCED', + 'SYNCED': 'SYNCED', + 'SYNCING': 'SYNCING', + 'FAILED': 'FAILED', +} +const API_TIMEOUT = 60000 +const loaderTimeOut = 30 * 1000; // in ms +const loaderTimeOut_longer = 2 * 60 * 1000; // in ms +export { API_TIMEOUT,OLA_MAP_KEY, dbbackupFolder, fixedurl, version, CONFIG, GyanCastURL, cpm_logo, sloganline, Production, appname, db, baseurl, URL_IMAGE, copyrightText, logoImage, AppVersion, gMap_key, colors_Arr, common_ImagePath, ImageFolderPath, OQAD_TimeConst, KPIFolders, defUploadFolder, VisitorImageFolderPath, VisitorLoginImageFolderPath, FolderForREC, StoreCheckListImagePath, IRSyncStatus, DBName, HierarchyTbls, NonProgramLabel_def, StoreSearch_def, ContractFormImagePath, DevType, TrainingContentFolderPath, ServerDTurl, loaderTimeOut, loaderTimeOut_longer, CoverageImagePath, AddStoreImagePath, visiCoolerImgPath, kycImagePath, LAST_ServerAPI_CALL,GroomingImagePath }; \ No newline at end of file diff --git a/PerformicsSrc/src/constants/methodNames.js b/PerformicsSrc/src/constants/methodNames.js new file mode 100644 index 0000000..e4d8b58 --- /dev/null +++ b/PerformicsSrc/src/constants/methodNames.js @@ -0,0 +1,84 @@ +import React, { useState, useEffect } from 'react'; + +export const METHODS = { + LOGIN_METHOD: 1, + DOWNLOADJSON_METHOD: 2, + UPLOADJSON_METHOD: 3, + + STORECOVERAGE_METHOD: 4, + STORECOVERAGE_STATUS_METHOD: 5, + UPLOADIMAGES_METHOD: 6, + + GETCOVERAGE_METHOD: 7, + GETCOVERAGE_CLIENT_METHOD: 8, + GETOTP_METHOD: 9, + UPLOADJSON_DETAIL_METHOD: 10, + COVERAGESTATUS_DETAIL_METHOD: 11, + UPLOAD_STOREGEOTAG_IMAGES_METHOD: 12, + CHECKOUTDETAIL_METHOD: 13, + CHECKOUTDETAIL_CLIENT_METHOD: 14, + JOURNEYPLAN_METHOD: 15, + DELETECOVERAGE_METHOD: 16, + COVERAGENOTALLOW_METHOD: 17, + CHANGEPASSWORD_METHOD: 18, + CREATEJP_METHOD: 19, + CREATESTORE: 20, + DISTRIBUTOR_COVERAGE: 21, + DISTRIBUTOR_CHECKOUT: 22, + OTP_SEND: 23, + OTP_VERIFY: 24, + CREATE_NEW_PASSWORD: 25, + UPLOAD_JSON_DIRECT: 27 +} + + + +export const DOWNLOAD_TYPES = { + +} + +export function getMethodName(type) { + switch (type) { + case METHODS.LOGIN_METHOD: return 'Login'; + case METHODS.DOWNLOADJSON_METHOD: return 'DownloadJson'; + case METHODS.UPLOADJSON_METHOD: return 'UploadJson'; + case METHODS.STORECOVERAGE_METHOD: return 'StoreCoverageSup'; + case METHODS.STORECOVERAGE_STATUS_METHOD: return 'StoreCoverageStatusSup'; + case METHODS.UPLOADIMAGES_METHOD: return 'Uploadimages'; + case METHODS.GETCOVERAGE_METHOD: return 'Coverage'; + case METHODS.GETCOVERAGE_CLIENT_METHOD: return 'CoverageDetail_latest_client'; + case METHODS.GETOTP_METHOD: return 'GetOtp'; + case METHODS.UPLOADJSON_DETAIL_METHOD: return 'UploadJsonDetail'; + case METHODS.COVERAGESTATUS_DETAIL_METHOD: return 'CoverageStatusDetail'; + case METHODS.UPLOAD_STOREGEOTAG_IMAGES_METHOD: return 'Upload_StoreGeoTag_IMAGES'; + case METHODS.CHECKOUTDETAIL_METHOD: return 'CheckoutDetail'; + case METHODS.CHECKOUTDETAIL_CLIENT_METHOD: return 'CheckoutDetail_client'; + case METHODS.JOURNEYPLAN_METHOD: return 'JourneyPlan'; + case METHODS.DELETECOVERAGE_METHOD: return 'DeleteCoverage'; + case METHODS.COVERAGENOTALLOW_METHOD: return 'CoverageNotAllow'; + case METHODS.CHANGEPASSWORD_METHOD: return 'ChangePasswordNew'; + case METHODS.CREATEJP_METHOD: return 'CreateJourneyPlan'; + case METHODS.CREATESTORE: return 'CreateStore'; + case METHODS.DISTRIBUTOR_COVERAGE: return 'DistributorPointCoverage'; + case METHODS.DISTRIBUTOR_CHECKOUT: return 'DistributorPointCheckout'; + case METHODS.OTP_SEND: return 'OTPSendForForgetPassword'; + case METHODS.OTP_VERIFY: return 'OTPVerify'; + case METHODS.CREATE_NEW_PASSWORD: return 'NewPassword'; + case METHODS.UPLOAD_JSON_DIRECT: return 'UploadJsonDirect'; + + default: return ''; + } +} + + +export function getFolderName(filename = '') { + var foldername = ''; + if (filename.includes("_StoreImg-") || filename.includes("_NonworkImg-") || filename.includes("_GroomingImg-") || filename.includes("_CheckoutImg-")) { + foldername = "CoverageImages"; + } + else if (filename.includes("_GeoTag-")) { + foldername = "GeoTagImages"; + } + return foldername; +} + diff --git a/PerformicsSrc/src/constants/s_qtns.json b/PerformicsSrc/src/constants/s_qtns.json new file mode 100644 index 0000000..2e2c23f --- /dev/null +++ b/PerformicsSrc/src/constants/s_qtns.json @@ -0,0 +1,458 @@ +[ + { + "Answer": "Streax Insta", + "AnswerId": 47, + "AnswerSequence": 0, + "Category": "Category 1", + "CategoryId": 1, + "CategorySequence": 1, + "DateRange": "NA", + "DisableQuestion": "", + "EnableQuestion": "", + "ImageAllow": false, + "LengthValidation": false, + "MaxLength": 0, + "MinLength": 0, + "OTP": false, + "QEnable": true, + "Question": "Which other brands of Shampoo Hair Colour are you currently selling", + "QuestionId": 1, + "QuestionImageAllow": false, + "QuestionSequence": 1, + "QuestionType": "List_Multi_Choice", + "SurveyId": 1, + "SurveyName": "Survey 1", + "ShowCat":0, + "SubCategoryId":1, + "SubCategory":"Sub Category 1", + "SubCategorySequence":1 + }, + { + "Answer": "Indica Easy", + "AnswerId": 48, + "AnswerSequence": 0, + "Category": "Category 1", + "CategoryId": 1, + "CategorySequence": 1, + "DateRange": "NA", + "DisableQuestion": "", + "EnableQuestion": "", + "ImageAllow": false, + "LengthValidation": false, + "MaxLength": 0, + "MinLength": 0, + "OTP": false, + "QEnable": true, + "Question": "Which other brands of Shampoo Hair Colour are you currently selling", + "QuestionId": 1, + "QuestionImageAllow": false, + "QuestionSequence": 1, + "QuestionType": "List_Multi_Choice", + "SurveyId": 1, + "SurveyName": "Survey 1", + "ShowCat":0, + "SubCategoryId":1, + "SubCategory":"Sub Category 1", + "SubCategorySequence":1 + }, + { + "Answer": "Godrej Expert Easy", + "AnswerId": 49, + "AnswerSequence": 0, + "Category": "Category 1", + "CategoryId": 1, + "CategorySequence": 1, + "DateRange": "NA", + "DisableQuestion": "", + "EnableQuestion": "", + "ImageAllow": false, + "LengthValidation": false, + "MaxLength": 0, + "MinLength": 0, + "OTP": false, + "QEnable": true, + "Question": "Which other brands of Shampoo Hair Colour are you currently selling", + "QuestionId": 1, + "QuestionImageAllow": false, + "QuestionSequence": 1, + "QuestionType": "List_Multi_Choice", + "SurveyId": 1, + "SurveyName": "Survey 1", + "ShowCat":0, + "SubCategoryId":1, + "SubCategory":"Sub Category 1", + "SubCategorySequence":1 + }, + { + "Answer": "Siso shampoo hair colour", + "AnswerId": 50, + "AnswerSequence": 0, + "Category": "Category 1", + "CategoryId": 1, + "CategorySequence": 1, + "DateRange": "NA", + "DisableQuestion": "", + "EnableQuestion": "", + "ImageAllow": false, + "LengthValidation": false, + "MaxLength": 0, + "MinLength": 0, + "OTP": false, + "QEnable": true, + "Question": "Which other brands of Shampoo Hair Colour are you currently selling", + "QuestionId": 1, + "QuestionImageAllow": false, + "QuestionSequence": 1, + "QuestionType": "List_Multi_Choice", + "SurveyId": 1, + "SurveyName": "Survey 1", + "ShowCat":0, + "SubCategoryId":1, + "SubCategory":"Sub Category 1", + "SubCategorySequence":1 + }, + { + "Answer": "VIP shampoo hair colour", + "AnswerId": 51, + "AnswerSequence": 0, + "Category": "Category 1", + "CategoryId": 1, + "CategorySequence": 1, + "DateRange": "NA", + "DisableQuestion": "", + "EnableQuestion": "", + "ImageAllow": false, + "LengthValidation": false, + "MaxLength": 0, + "MinLength": 0, + "OTP": false, + "QEnable": true, + "Question": "Which other brands of Shampoo Hair Colour are you currently selling", + "QuestionId": 1, + "QuestionImageAllow": false, + "QuestionSequence": 1, + "QuestionType": "List_Multi_Choice", + "SurveyId": 1, + "SurveyName": "Survey 1", + "ShowCat":0, + "SubCategoryId":1, + "SubCategory":"Sub Category 1", + "SubCategorySequence":1 + }, + { + "Answer": "Garnier Shampoo hair colour", + "AnswerId": 52, + "AnswerSequence": 0, + "Category": "Category 1", + "CategoryId": 1, + "CategorySequence": 1, + "DateRange": "NA", + "DisableQuestion": "", + "EnableQuestion": "", + "ImageAllow": false, + "LengthValidation": false, + "MaxLength": 0, + "MinLength": 0, + "OTP": false, + "QEnable": true, + "Question": "Which other brands of Shampoo Hair Colour are you currently selling", + "QuestionId": 1, + "QuestionImageAllow": false, + "QuestionSequence": 1, + "QuestionType": "List_Multi_Choice", + "SurveyId": 1, + "SurveyName": "Survey 1", + "ShowCat":0, + "SubCategoryId":1, + "SubCategory":"Sub Category 1", + "SubCategorySequence":1 + }, + { + "Answer": "Non", + "AnswerId": 53, + "AnswerSequence": 0, + "Category": "Category 1", + "CategoryId": 1, + "CategorySequence": 1, + "DateRange": "NA", + "DisableQuestion": "", + "EnableQuestion": "", + "ImageAllow": false, + "LengthValidation": false, + "MaxLength": 0, + "MinLength": 0, + "OTP": false, + "QEnable": true, + "Question": "Which other brands of Shampoo Hair Colour are you currently selling", + "QuestionId": 1, + "QuestionImageAllow": false, + "QuestionSequence": 1, + "QuestionType": "List_Multi_Choice", + "SurveyId": 1, + "SurveyName": "Survey 1", + "ShowCat":0, + "SubCategoryId":1, + "SubCategory":"Sub Category 1", + "SubCategorySequence":1 + }, + { + "Answer": "Yes", + "AnswerId": 1, + "AnswerSequence": 0, + "Category": "Category 1", + "CategoryId": 1, + "CategorySequence": 1, + "DateRange": "NA", + "DisableQuestion": "", + "EnableQuestion": "", + "ImageAllow": false, + "LengthValidation": false, + "MaxLength": 0, + "MinLength": 0, + "OTP": false, + "QEnable": true, + "Question": "Is Color Riche Matte Range Available", + "QuestionId": 5, + "QuestionImageAllow": false, + "QuestionSequence": 5, + "QuestionType": "List_Single_Choice", + "SurveyId": 1, + "SurveyName": "Survey 1", + "ShowCat":0, + "SubCategoryId":1, + "SubCategory":"Sub Category 1", + "SubCategorySequence":1 + }, + { + "Answer": "No", + "AnswerId": 2, + "AnswerSequence": 0, + "Category": "Category 1", + "CategoryId": 1, + "CategorySequence": 1, + "DateRange": "NA", + "DisableQuestion": "", + "EnableQuestion": "", + "ImageAllow": false, + "LengthValidation": false, + "MaxLength": 0, + "MinLength": 0, + "OTP": false, + "QEnable": true, + "Question": "Is Color Riche Matte Range Available", + "QuestionId": 5, + "QuestionImageAllow": false, + "QuestionSequence": 5, + "QuestionType": "List_Single_Choice", + "SurveyId": 1, + "SurveyName": "Survey 1", + "ShowCat":0, + "SubCategoryId":1, + "SubCategory":"Sub Category 1", + "SubCategorySequence":1 + }, + { + "Category": "Category 1", + "CategoryId": 1, + "CategorySequence": 1, + "DateRange": "NA", + "DisableQuestion": "", + "EnableQuestion": "", + "LengthValidation": false, + "MaxLength": 0, + "MinLength": 0, + "OTP": false, + "QEnable": true, + "Question": "Question Demical Only", + "QuestionId": 12, + "QuestionImageAllow": false, + "QuestionSequence": 12, + "QuestionType": "Decimal", + "SurveyId": 1, + "SurveyName": "Survey 1", + "ShowCat":0, + "SubCategoryId":1, + "SubCategory":"Sub Category 1", + "SubCategorySequence":1 + }, + { + "Category": "Category 2", + "CategoryId": 2, + "CategorySequence": 2, + "DateRange": "NA", + "DisableQuestion": "", + "EnableQuestion": "", + "LengthValidation": false, + "MaxLength": 0, + "MinLength": 0, + "OTP": false, + "QEnable": true, + "Question": "Product MRP", + "QuestionId": 14, + "QuestionImageAllow": true, + "QuestionSequence": 14, + "QuestionType": "Text", + "SurveyId": 1, + "SurveyName": "Survey 1", + "ShowCat":0, + "SubCategoryId":2, + "SubCategory":"Sub Category 2", + "SubCategorySequence":2 + }, + { + "Category": "Category 1", + "CategoryId": 1, + "CategorySequence": 1, + "DateRange": "NA", + "DisableQuestion": "", + "EnableQuestion": "", + "LengthValidation": false, + "MaxLength": 0, + "MinLength": 0, + "OTP": false, + "QEnable": true, + "Question": "Voice of Customer", + "QuestionId": 18, + "QuestionImageAllow": false, + "QuestionSequence": 18, + "QuestionType": "Audio", + "SurveyId": 1, + "SurveyName": "Survey 1", + "ShowCat":0, + "SubCategoryId":1, + "SubCategory":"Sub Category 1", + "SubCategorySequence":1 + }, + { + "Category": "Category 1", + "CategoryId": 1, + "CategorySequence": 1, + "DateRange": "RFD", + "DisableQuestion": "", + "EnableQuestion": "", + "LengthValidation": false, + "MaxLength": 0, + "MinLength": 0, + "OTP": false, + "QEnable": true, + "Question": "Oldest Pro clean toilet cleaner Mfd Date", + "QuestionId": 19, + "QuestionImageAllow": false, + "QuestionSequence": 19, + "QuestionType": "Date", + "SurveyId": 1, + "SurveyName": "Survey 1", + "ShowCat":0, + "SubCategoryId":1, + "SubCategory":"Sub Category 1", + "SubCategorySequence":1 + }, + { + "Category": "Category 1", + "CategoryId": 1, + "CategorySequence": 1, + "DateRange": "NA", + "DisableQuestion": "", + "EnableQuestion": "", + "LengthValidation": true, + "MaxLength": 10, + "MinLength": 2, + "OTP": false, + "QEnable": true, + "Question": "Poster", + "QuestionId": 20, + "QuestionImageAllow": true, + "QuestionSequence": 20, + "QuestionType": "Number", + "SurveyId": 1, + "SurveyName": "Survey 1", + "ShowCat":0, + "SubCategoryId":1, + "SubCategory":"Sub Category 1", + "SubCategorySequence":1 + }, + { + "Answer": "Google Pay", + "AnswerId": 54, + "AnswerSequence": 0, + "Category": "Category 2", + "CategoryId": 2, + "CategorySequence": 2, + "DateRange": "NA", + "DisableQuestion": "", + "EnableQuestion": "", + "ImageAllow": false, + "LengthValidation": false, + "MaxLength": 0, + "MinLength": 0, + "OTP": false, + "QEnable": true, + "Question": "Rating", + "QuestionId": 23, + "QuestionImageAllow": false, + "QuestionSequence": 23, + "QuestionType": "Rating", + "SurveyId": 1, + "SurveyName": "Survey 1", + "ShowCat":0, + "SubCategoryId":2, + "SubCategory":"Sub Category 2", + "SubCategorySequence":2 + }, + { + "Answer": "Phone Pay", + "AnswerId": 55, + "AnswerSequence": 0, + "Category": "Category 2", + "CategoryId": 2, + "CategorySequence": 2, + "DateRange": "NA", + "DisableQuestion": "", + "EnableQuestion": "", + "ImageAllow": false, + "LengthValidation": false, + "MaxLength": 0, + "MinLength": 0, + "OTP": false, + "QEnable": true, + "Question": "Rating", + "QuestionId": 23, + "QuestionImageAllow": false, + "QuestionSequence": 23, + "QuestionType": "Rating", + "SurveyId": 1, + "SurveyName": "Survey 1", + "ShowCat":0, + "SubCategoryId":2, + "SubCategory":"Sub Category 2", + "SubCategorySequence":2 + }, + { + "Answer": "PayTM", + "AnswerId": 56, + "AnswerSequence": 0, + "Category": "Category 2", + "CategoryId": 2, + "CategorySequence": 2, + "DateRange": "NA", + "DisableQuestion": "", + "EnableQuestion": "", + "ImageAllow": false, + "LengthValidation": false, + "MaxLength": 0, + "MinLength": 0, + "OTP": false, + "QEnable": true, + "Question": "Rating", + "QuestionId": 23, + "QuestionImageAllow": false, + "QuestionSequence": 23, + "QuestionType": "Rating", + "SurveyId": 1, + "SurveyName": "Survey 1", + "ShowCat":0, + "SubCategoryId":2, + "SubCategory":"Sub Category 2", + "SubCategorySequence":2 + } +] diff --git a/PerformicsSrc/src/constants/storeList_definition.json b/PerformicsSrc/src/constants/storeList_definition.json new file mode 100644 index 0000000..b0c717a --- /dev/null +++ b/PerformicsSrc/src/constants/storeList_definition.json @@ -0,0 +1,75 @@ +{ + "storeList_def": { + "showInCard": 1, + "showCardDefaultColor": "#ffffff", + "rowData": [ + { + "rowNumber": 1, + "ShowString": [ + { + "labelName": "Store Name", + "fieldName": "StoreName", + "fontName": "Arial", + "fontSize": 12, + "fontWeight": "500", + "fieldNameValueSeparator": ":", + "afterConcatChar": "-" + }, + { + "labelName": "", + "fieldName": "StoreType", + "fontName": "Arial", + "fontSize": 12, + "fontWeight": "400", + "fieldNameValueSeparator": "", + "afterConcatChar": "" + } + + + ] + }, + { + "rowNumber": 2, + "ShowString": [ + { + "labelName": "Address", + "fieldName": "Address", + "fontName": "Arial", + "fontSize": 12, + "fontWeight": "400", + "fieldNameValueSeparator": ":", + "afterConcatChar": "" + } + ] + }, + { + "rowNumber": 3, + "ShowString": [ + { + "labelName": "Store ID", + "fieldName": "StoreId", + "fontName": "Arial", + "fontSize": 12, + "fontWeight": "400", + "fieldNameValueSeparator": ":", + "afterConcatChar": "" + } + ] + }, + { + "rowNumber": 4, + "ShowString": [ + { + "labelName": "Store Code", + "fieldName": "StoreCode", + "fontName": "Arial", + "fontSize": 12, + "fontWeight": "400", + "fieldNameValueSeparator": ":", + "afterConcatChar": "" + } + ] + } + ] + } +} \ No newline at end of file diff --git a/PerformicsSrc/src/constants/tableConstants.js b/PerformicsSrc/src/constants/tableConstants.js new file mode 100644 index 0000000..0b7288a --- /dev/null +++ b/PerformicsSrc/src/constants/tableConstants.js @@ -0,0 +1,792 @@ +import React from "react"; + +export const AppTables = { + GEOTAG: 'DR_GEOTAG', + DB_GEOTAG: 'DB_GEOTAG', + HEADER_BACK_OF_STORE: 'DR_HEADER_BACKROOM', + CHILD_BACK_OF_STORE: 'DR_CHILD_BACKROOM', + SALES: 'DR_SALES', + ORDER: 'DR_ORDER', + INSERT_OPENINGHEADER_DATA: 'STOCKHEADER_DATA', + STOCK_DATA: 'STOCK_DATA', + STOCK2HDR_DATA: 'STOCK2HDR_DATA', + STOCK2_DATA: 'STOCK2_DATA', + STOCK2_MFD_DATA: 'STOCK2_MFD_DATA', + + STOCKPROMO_HDR_TOP: 'STOCKPROMO_HDR_TOP', + STOCKPOMO_HDR_DATA: 'STOCKPOMO_HDR_DATA', + STOCKPROMO_DATA: 'STOCKPROMO_DATA', + + STOCKWITHCAT_HDR_DATA: 'STOCKWITHCAT_HDR_DATA', + STOCKWITHCAT_DATA: 'STOCKWITHCAT_DATA', + STOCKWITHCAT_MFD_DATA: 'STOCKWITHCAT_MFD_DATA', + + SHARE_OF_SHELF_IMAGE: 'SHARE_OF_SHELF_HEADER', + SHARE_OF_SHELF_FACING_DATA: 'SHARE_OF_SHELF_FACING', + INSERT_SAMPLED_DATA: 'DR_TABLE_SAMPLING', + CONTACT_CONVERSION: "DR_CONTACT_CONVERSION", + INSERT_ERROR_TRACKING: "DR_ERROR_TRACKING", + GROOMING_IMAGE_DATA: 'STORE_GROOMING_IMAGE_DATA', + + ADDITIONAL_VISIBILITY: "DR_ADVVISIBILITY", + ADDITIONAL_VISIBILITY_STOCK: "DR_ADVVISIBILITY_STOCK", + + ADD_STORE_INFO: "DR_ADDSTOREINFO", + HOME_LOCATION: "DR_HOMELOCATION", + + ADDVIS_IR_IMAGES: "ADDVIS_IR_IMAGES", + ADDVIS_IRUPLOAD: "ADDVIS_IRUPLOAD", + COMPVIS_IR_IMAGES: "COMPVIS_IR_IMAGES", + COMPVIS_IRUPLOAD: "COMPVIS_IRUPLOAD", + + COMPETITION_VISIBILITY: 'DR_TABLECOMP_VISIBILITY', + COMPETITION_PROMOTION: "DR_COMP_PROMOTION", + COVERAGE_DATA: 'DR_COVERAGE', + STORE_SEARCHJCP: 'StoreSearch_JourneyPlan', + CHECKIN_DATA: 'EMPSTORE_CHECKIN', + DISTRIBUTOR_CHECKIN: 'DISTRIBUTOR_CHECKIN', + PROMOTION_HEADER_DATA: 'DR_TABLE_PROMOTION_HEADER', + PROMOTION_DATA: 'DR_TABLE_PROMOTION', + SIMPLE_PROMOHDR_DATA: 'SIMPLE_PROMOTION_HDR', + SIMPLE_PROMOTION_DATA: 'SIMPLE_PROMOTION', + PAID_VISIBILITY_HEADER_DATA: 'DR_PAIDVISIBILITY_HEADER', + PAID_VISIBILITY_CHILD_DATA: 'DR_PAIDVISIBILITY', + PAID_VIS_CHECKLIST: 'DR_CHECKLST', + PERSONAL_DOCUMENT: 'PERSONAL_DOCUMENT', + VISITOR_LOGIN: 'VISITOR_LOGIN', + AUTOMATED_REIMBURSEMENT: 'DR_AUTOMATED_REIMBURSEMENT', + CASHTILL_SURVEY: 'DR_CASHTILL', + SURVEY: 'DR_SURVEY', + + WINDOW_HDR_DATA: 'WINDOW_HEARDER_DATA', + WINDOW_CHILD_DATA: 'WINDOW_CHILD_DATA', + WINDOW_STOCK_DATA: 'WINDOW_STOCK_DATA', + WINDOW_IMAGES: 'WINDOW_IMAGES', + WINDOW_IR_IMAGES: 'WINDOW_IR_IMAGES', + WINDOW_IRUPLOAD: 'WINDOW_IRUPLOAD', + + POSM_HDR_DATA: 'POSM_HEARDER_DATA', + POSM_CHILD_DATA: 'POSM_CHILD_DATA', + FEEDBACK_DATA: 'FEEDBACK_DATA', + STORE_IMAGES: 'STORE_IMAGES', + + ST_HDR_DATA: 'ST_HEARDER_DATA', + ST_CHILD_DATA: 'ST_CHILD_DATA', + ST_STOCK_DATA: 'ST_STOCK_DATA', + ST_IMAGES: 'ST_IMAGES', + + PROMO_HDR_DATA: 'PROMO_HEARDER_DATA', + PROMO_CHILD_DATA: 'PROMO_CHILD_DATA', + PROMO_STOCK_DATA: 'PROMO_STOCK_DATA', + PROMO_IMAGES: 'PROMO_IMAGES', + PROMO_IR_IMAGES: 'PROMO_IR_IMAGES', + PROMO_IRUPLOAD: 'PROMO_IRUPLOAD', + + PAIDVIS_HDR_DATA: 'PAIDVIS_HEARDER_DATA', + + WAREHOUSE_HDR_DATA: 'WAREHOUSE_HEARDER_DATA', + WAREHOUSE_CHILD_DATA: 'WAREHOUSE_CHILD_DATA', + WAREHOUSE_CAMPAIGN_CHILD_DATA: 'WAREHOUSE_CAMPAIGN_CHILD_DATA', + WAREHOUSE_CAMPAIGN_HDR_DATA: 'WAREHOUSE_CAMPAIGN_HEADER_DATA', + WAREHOUSE_CAMPAIGN_IMAGES: 'WAREHOUSE_CAMPAIGN_IMAGES', + + PAIDVIS_CHILD_DATA: 'PAIDVIS_CHILD_DATA', + PAIDVIS_STOCK_DATA: 'PAIDVIS_STOCK_DATA', + PAIDVIS_IMAGES: 'PAIDVIS_IMAGES', + + WAREHOUSE_IMAGES: 'WAREHOUSE_IMAGES', + WARE_HOUSE_INWARD: 'WARE_HOUSE_INWARD ', + + + + PAIDVIS_IR_IMAGES: 'PAIDVIS_IR_IMAGES', + PAIDVIS_IRUPLOAD: 'PAIDVIS_IRUPLOAD', + + SOS_CHILD_QUES_DATA: 'SOS_CHILD_QUES_DATA', + + // Program list + PROGRAM_HDR_DATA: 'PROGRAM_HEARDER_DATA', + PROGRAM_CHILD_DATA: 'PROGRAM_CHILD_DATA', + PROGRAM_STOCK_DATA: 'PROGRAM_STOCK_DATA', + PROGRAM_IMAGES: 'PROGRAM_IMAGES', + PROGRAM_IR_IMAGES: 'PROGRAM_IR_IMAGES', + PROGRAM_IRUPLOAD: 'PROGRAM_IRUPLOAD', + + SOS_HDR_DATA: 'SOS_HEADER_DATA', + SOS_CHILD_DATA: 'SOS_CHILD_DATA', + SOS_IMAGES: 'SOS_IMAGES', + SOS_IR_IMAGES: 'SOS_IR_IMAGES', + SOS_IRUPLOAD: 'SOS_IRUPLOAD', + + EYE_LEVEL_HDR_DATA: 'EYE_LEVEL_HEADER_DATA', + EYE_LEVEL_CHILD_DATA: 'EYE_LEVEL_CHILD_DATA', + EYE_LEVEL_IMAGES: 'EYE_LEVEL_IMAGES', + + CATEXE_HDR_DATA: 'CATEXE_HDR_DATA', + CATEXE_CHILD_DATA: 'CATEXE_CHILD_DATA', + CATEXE_STOCK_DATA: 'CATEXE_STOCK_DATA', + CATEXE_IMAGES: 'CATEXE_IMAGES', + + STORE_CHECKLIST: 'STORE_CHECKLIST', + BEAT_PLAN: 'BEAT_PLAN', + STORE_PROFILE: 'STORE_PROFILE', + + DBPOSM_HDR_DATA: 'DBPOSM_HDR_DATA', + + DB_WINDOW_HDR_DATA: 'DB_WINDOW_HEARDER_DATA', + ORDERSTATUS: 'ORDER_STATUS', + DB_VISICOOLER: "DB_VISICOOLER", + //arman + QRCODE_SCANNER: 'QRCODE_SCANNER', + QRCODE_SALE: 'QRCODE_SALE', + STORE_PROFILE_KYC: 'STORE_PROFILE_KYC', + KYC_INFO: 'KYC_INFO', + STORE_KYC_INFO: 'STORE_KYC_INFO', + + VISITOR_FEEDBACK: 'VISITOR_FEEDBACK', + VISITOR_LOGIN_FEEDBACK: 'VISITOR_LOGIN_FEEDBACK', + + SAMPLING_STOCK_DATA: 'SAMPLING_STOCK_DATA', + SAMPLING_SALE_DATA: 'SAMPLING_SALE_DATA', + SAMPLING_INVENTORY: 'DR_SAMPLING_INVENTORY', + SAMPLING_CUST_TRACK: 'DR_SAMPLING_CUST_TRACK', + SAMPLING_LIST: 'DR_SAMPLING_LIST', + HEADER_POSSALE_DATA: 'HEADER_POSSALE_DATA', + POSSALE_IMAGES: 'POSSALE_IMAGES', + POSSALE_DATA: 'POSSALE_DATA', + + VISICO_HDR_DATA: 'VISICO_HEARDER_DATA', + VISICO_CHILD_DATA: 'VISICO_CHILD_DATA', + CONTRACT_FORM: 'CONTRACT_FORM', + CONTRACT_FORM_DATA: 'CONTRACT_FORM_DATA', + + MISSED_CALL: 'MISSED_CALL', + BREAKTIME: 'BREAKTIME', + STORE_INFO: ' STORE_INFO', + OFFLINE_ORDER:'OFFLINE_ORDER', + RETURN_STOCK:"RETURN_STOCK", + ORDER_SIMPLIFY:"ORDER_SIMPLIFY" +} + +const Q_OFFLINE_ORDER = {SqlText:`CREATE TABLE IF NOT EXISTS ${AppTables.OFFLINE_ORDER} +(KEY_ID INTEGER PRIMARY KEY AUTOINCREMENT,STORE_ID INTEGER,VISIT_DATE NVARCHAR,CATEGORY NVARCHAR,CATEGORY_ID INTEGER,REASON_ID INTEGER,REASON NVARCHAR,PRODUCT NVARCHAR,PRODUCT_ID INTEGER,MSL INTEGER,IS_PRESENT INTEGER,STOCK INTEGER,SYSTEM_PO TEXT,STORE_PO TEXT,PO_DATE TEXT,CONTACT_NAME TEXT,CONTACT_NO TEXT,ADDED_DATE TEXT,STOCKIST_ID TEXT,STOCKIST_NAME TEXT,IsUnsaved INTEGER DEFAULT 0)`,}; +const Q_GEOTAG_TABLE = { + SqlText: `CREATE TABLE IF NOT EXISTS ${AppTables.GEOTAG} +(KEY_ID INTEGER PRIMARY KEY AUTOINCREMENT,STORE_ID INTEGER,LATITUDE NVARCHAR,LONGITUDE NVARCHAR,GEO_TAG NVARCHAR,STATUS NVARCHAR,FRONT_IMAGE NVARCHAR,ADDED_DATE TEXT)`, +}; +const Q_DB_GEOTAG_TABLE = { + SqlText: `CREATE TABLE IF NOT EXISTS ${AppTables.DB_GEOTAG} +(KEY_ID INTEGER PRIMARY KEY AUTOINCREMENT,STORE_ID INTEGER,LATITUDE NVARCHAR,LONGITUDE NVARCHAR,GEO_TAG NVARCHAR,STATUS NVARCHAR,FRONT_IMAGE NVARCHAR,ADDED_DATE TEXT)`, +}; + +const Q_BEAT_PLAN = { + SqlText: `CREATE TABLE IF NOT EXISTS ${AppTables.BEAT_PLAN} +(KEY_ID INTEGER PRIMARY KEY AUTOINCREMENT,ROUTE_ID INTEGER,ROUTE_NAME NVARCHAR,STATUS NVARCHAR,VISIT_DATE TEXT,ADDED_DATE TEXT)`, +}; + +const Q_HEADER_BACK_OF_STORE = { + SqlText: `CREATE TABLE IF NOT EXISTS ${AppTables.HEADER_BACK_OF_STORE} +(KEY_ID INTEGER PRIMARY KEY AUTOINCREMENT,STORE_ID INTEGER,VISIT_DATE NVARCHAR,MSL INTEGER,CATEGORY NVARCHAR,CATEGORY_ID INTEGER,ADDED_DATE TEXT)`, +}; +const Q_CHILD_BACK_OF_STORE = { + SqlText: `CREATE TABLE IF NOT EXISTS ${AppTables.CHILD_BACK_OF_STORE} +(KEY_ID INTEGER PRIMARY KEY AUTOINCREMENT,COMMON_ID INTEGER,STORE_ID INTEGER,VISIT_DATE NVARCHAR,CATEGORY NVARCHAR,CATEGORY_ID INTEGER,PRODUCT NVARCHAR,PRODUCT_ID INTEGER,MSL INTEGER,ARTICLE_CODE NVARCHAR,STOCK INTEGER,ADDED_DATE TEXT)`, +}; +const Q_SALES = { + SqlText: `CREATE TABLE IF NOT EXISTS ${AppTables.SALES} +(KEY_ID INTEGER PRIMARY KEY AUTOINCREMENT,STORE_ID INTEGER,VISIT_DATE NVARCHAR,CATEGORY NVARCHAR,CATEGORY_ID INTEGER,PRODUCT NVARCHAR,PRODUCT_ID INTEGER,MSL INTEGER,STOCK INTEGER,ADDED_DATE TEXT,ARTICLE_CODE NVARCHAR)`, +}; +// const Q_ORDER = {SqlText:`CREATE TABLE IF NOT EXISTS ${AppTables.ORDER} +// (KEY_ID INTEGER PRIMARY KEY AUTOINCREMENT,STORE_ID INTEGER,VISIT_DATE NVARCHAR,CATEGORY NVARCHAR,CATEGORY_ID INTEGER,REASON_ID INTEGER,REASON NVARCHAR,PRODUCT NVARCHAR,PRODUCT_ID INTEGER,MSL INTEGER,IS_PRESENT INTEGER,STOCK INTEGER,SYSTEM_PO TEXT,STORE_PO TEXT,PO_DATE TEXT,CONTACT_NAME TEXT,CONTACT_NO TEXT,ADDED_DATE TEXT)`,}; + +const Q_ORDER = { + SqlText: `CREATE TABLE IF NOT EXISTS ${AppTables.ORDER} +(KEY_ID INTEGER PRIMARY KEY AUTOINCREMENT,STORE_ID INTEGER,VISIT_DATE NVARCHAR,CATEGORY NVARCHAR,CATEGORY_ID INTEGER,REASON_ID INTEGER,REASON NVARCHAR,PRODUCT NVARCHAR,PRODUCT_ID INTEGER,MSL INTEGER,IS_PRESENT INTEGER,STOCK INTEGER,SYSTEM_PO TEXT,STORE_PO TEXT,PO_DATE TEXT,CONTACT_NAME TEXT,CONTACT_NO TEXT,ADDED_DATE TEXT,STOCKIST_ID TEXT,STOCKIST_NAME TEXT)`, +}; + +const Q_INSERT_OPENINGHEADER_DATA = { + SqlText: `CREATE TABLE IF NOT EXISTS ${AppTables.INSERT_OPENINGHEADER_DATA} +(KEY_ID INTEGER PRIMARY KEY AUTOINCREMENT,STORE_ID INTEGER,VISIT_DATE NVARCHAR,CATEGORY NVARCHAR,CATEGORY_ID INTEGER,MSL INTEGER,IMAGE NVARCHAR,IMAGEPATH NVARCHAR,ADDED_DATE TEXT)`, +}; +const Q_STOCK_DATA = { + SqlText: `CREATE TABLE IF NOT EXISTS ${AppTables.STOCK_DATA} +(KEY_ID INTEGER PRIMARY KEY AUTOINCREMENT,COMMON_ID INTEGER,STORE_ID INTEGER,VISIT_DATE NVARCHAR,CATEGORY_ID INTEGER,CATEGORY NVARCHAR,BRAND_ID INTEGER,BRAND NVARCHAR,PRODUCT_ID INTEGER,PRODUCT NVARCHAR,MSL INTEGER,ARTICLE_CODE NVARCHAR,OPENING_STOCK INTEGER,MIDDAY_STOCK INTEGER,MIDDAY_EXPIRYSTOCK1 INTEGER,MIDDAY_EXPIRYSTOCK2 INTEGER,MIDDAY_EXPIRYSTOCK3 INTEGER,MIDDAY_EXPIRYSTOCK4 INTEGER,CLOSING_STOCK INTEGER,CLOSING_EXPIRYSTOCK1 INTEGER,CLOSING_EXPIRYSTOCK2 INTEGER,CLOSING_EXPIRYSTOCK3 INTEGER,CLOSING_EXPIRYSTOCK4 INTEGER,EXPIRY_ISOPEN NVARCHAR,EXPIRY_STK INTEGER, EXPIRYSTOCK1 INTEGER,EXPIRYSTOCK2 INTEGER,EXPIRYSTOCK3 INTEGER,EXPIRYSTOCK4 INTEGER,ISMDST_PRESENT INTEGER,ADDED_DATE TEXT,IsCompetitor INTEGER)`, +}; + +const Q_STOCK2HDR_DATA = { + SqlText: `CREATE TABLE IF NOT EXISTS ${AppTables.STOCK2HDR_DATA} +(KEY_ID INTEGER PRIMARY KEY AUTOINCREMENT,STORE_ID INTEGER,VISIT_DATE NVARCHAR,SUB_CATEGORY_ID INTEGER,SUB_CATEGORY NVARCHAR,MSL INTEGER,IMAGE NVARCHAR,IMAGEPATH NVARCHAR,IS_UPDATED INTEGER,ADDED_DATE TEXT)`, +}; + +const Q_STOCK2_DATA = {SqlText:`CREATE TABLE IF NOT EXISTS ${AppTables.STOCK2_DATA} +(KEY_ID INTEGER PRIMARY KEY AUTOINCREMENT,COMMON_ID INTEGER,STOCK_UID NVARCHAR,STORE_ID INTEGER,VISIT_DATE NVARCHAR,SUB_CATEGORY_ID INTEGER,SUB_CATEGORY NVARCHAR,BRAND_ID INTEGER,BRAND NVARCHAR,PRODUCT_ID INTEGER,PRODUCT NVARCHAR,MSL INTEGER, ARTICLE_CODE NVARCHAR,STOCK INTEGER,PACKTYPE VARCHAR,MRP INTEGER,SELLING_PRICE INTEGER,REMARK NVARCHAR,BACKROOM_STOCK INTEGER,DAMAGED_STOCK INTEGER,LOST_STOCK INTEGER,EXPIRY_STOCK INTEGER,IS_SKU_STOCK_PRESENT INTEGER,NREXPIRY1_STOCK INTEGER,NREXPIRY2_STOCK INTEGER,NREXPIRY3_STOCK INTEGER,OUT_OF_STOCK INTEGER,LESS_THAN_MBQ INTEGER,PriceYesNo INTEGER,ADDED_DATE TEXT)`,}; + +const Q_STOCK2_MFD_DATA = { + SqlText: `CREATE TABLE IF NOT EXISTS ${AppTables.STOCK2_MFD_DATA} +(KEY_ID INTEGER PRIMARY KEY AUTOINCREMENT,COMMON_ID INTEGER,STOCK_UID NVARCHAR,STORE_ID INTEGER,VISIT_DATE NVARCHAR,SUB_CATEGORY_ID INTEGER,BRAND_ID INTEGER,PRODUCT_ID INTEGER,STOCK INTEGER,MFD NVARCHAR,LOT_NO NVARCHAR,DATE NVARCHAR,ADDED_DATE TEXT)`, +}; + +const Q_STOCKPROMO_HDR_TOP = { + SqlText: `CREATE TABLE IF NOT EXISTS ${AppTables.STOCKPROMO_HDR_TOP} +(KEY_ID INTEGER PRIMARY KEY AUTOINCREMENT,STORE_ID INTEGER,VISIT_DATE NVARCHAR,SUB_CATEGORY_ID INTEGER,SUB_CATEGORY NVARCHAR,MSL INTEGER,STOCK_AVL_STATUS NVARCHAR,PROMO_TYPE NVARCHAR,PROMO_RUNNING NVARCHAR,INTEGER,IS_UPDATED INTEGER,ADDED_DATE TEXT)`, +}; + +const Q_STOCKPOMO_HDR_DATA = { + SqlText: `CREATE TABLE IF NOT EXISTS ${AppTables.STOCKPOMO_HDR_DATA} +(KEY_ID INTEGER PRIMARY KEY AUTOINCREMENT,STORE_ID INTEGER,VISIT_DATE NVARCHAR,SUB_CATEGORY_ID INTEGER,SUB_CATEGORY NVARCHAR,MSL INTEGER,IMAGE NVARCHAR,IMAGE_JSON TEXT,IMAGEPATH NVARCHAR,IS_UPDATED INTEGER,ADDED_DATE TEXT)`, +}; + +const Q_STOCKPROMO_DATA = { + SqlText: `CREATE TABLE IF NOT EXISTS ${AppTables.STOCKPROMO_DATA} +(KEY_ID INTEGER PRIMARY KEY AUTOINCREMENT,COMMON_ID INTEGER,STOCK_UID NVARCHAR,STORE_ID INTEGER,VISIT_DATE NVARCHAR,SUB_CATEGORY_ID INTEGER,SUB_CATEGORY NVARCHAR,BRAND_ID INTEGER,BRAND NVARCHAR,PRODUCT_ID INTEGER,PRODUCT NVARCHAR,MSL INTEGER,STOCK_AVL_STATUS NVARCHAR,PROMO_TYPE NVARCHAR,PROMO_RUNNING NVARCHAR,IMAGE NVARCHAR,IMAGEPATH NVARCHAR,IMAGE_JSON TEXT,STOCK INTEGER,MRP INTEGER,SELLING_PRICE INTEGER,REMARK NVARCHAR,BACKROOM_STOCK INTEGER,DAMAGED_STOCK INTEGER,LOST_STOCK INTEGER,EXPIRY_STOCK INTEGER,IS_SKU_STOCK_PRESENT INTEGER,NREXPIRY1_STOCK INTEGER,NREXPIRY2_STOCK INTEGER,NREXPIRY3_STOCK INTEGER,OUT_OF_STOCK INTEGER,LESS_THAN_MBQ INTEGER,FROM_DATE TEXT,TO_DATE TEXT,ADDED_DATE TEXT)`, +}; + +const Q_STOCKWITHCAT_HDR_DATA = { + SqlText: `CREATE TABLE IF NOT EXISTS ${AppTables.STOCKWITHCAT_HDR_DATA} +(KEY_ID INTEGER PRIMARY KEY AUTOINCREMENT,STORE_ID INTEGER,VISIT_DATE NVARCHAR,CATEGORY NVARCHAR,CATEGORY_ID INTEGER,MSL INTEGER,IMAGE NVARCHAR,IMAGEPATH NVARCHAR,ADDED_DATE TEXT)`, +}; +const Q_STOCKWITHCAT_DATA = { + SqlText: `CREATE TABLE IF NOT EXISTS ${AppTables.STOCKWITHCAT_DATA} +(KEY_ID INTEGER PRIMARY KEY AUTOINCREMENT,COMMON_ID INTEGER,STOCK_UID NVARCHAR,STORE_ID INTEGER,VISIT_DATE NVARCHAR,CATEGORY_ID INTEGER,CATEGORY NVARCHAR,SUB_CATEGORY_ID INTEGER,SUB_CATEGORY NVARCHAR,BRAND_ID INTEGER,BRAND NVARCHAR,PRODUCT_ID INTEGER,PRODUCT NVARCHAR,MSL INTEGER,STOCK INTEGER,MRP INTEGER,SELLING_PRICE INTEGER,REMARK NVARCHAR,BACKROOM_STOCK INTEGER,DAMAGED_STOCK INTEGER,LOST_STOCK INTEGER,EXPIRY_STOCK INTEGER,IS_SKU_STOCK_PRESENT INTEGER,NREXPIRY1_STOCK INTEGER,NREXPIRY2_STOCK INTEGER,NREXPIRY3_STOCK INTEGER,ADDED_DATE TEXT)`, +}; +const Q_STOCKWITHCAT_MFD_DATA = { + SqlText: `CREATE TABLE IF NOT EXISTS ${AppTables.STOCKWITHCAT_MFD_DATA} +(KEY_ID INTEGER PRIMARY KEY AUTOINCREMENT,COMMON_ID INTEGER,STOCK_UID NVARCHAR,STORE_ID INTEGER,VISIT_DATE NVARCHAR,CATEGORY_ID INTEGER,BRAND_ID INTEGER,PRODUCT_ID INTEGER,STOCK INTEGER,MFD NVARCHAR,LOT_NO NVARCHAR,DATE NVARCHAR,ADDED_DATE TEXT)`, +}; + + +const Q_SHARE_OF_SHELF_IMAGE = { + SqlText: `CREATE TABLE IF NOT EXISTS ${AppTables.SHARE_OF_SHELF_IMAGE} +(KEY_ID INTEGER PRIMARY KEY AUTOINCREMENT,STORE_ID INTEGER,VISIT_DATE NVARCHAR,CATEGORY_ID INTEGER,CATEGORY NVARCHAR,IMAGE NVARCHAR,ADDED_DATE TEXT)`, +}; +const Q_SHARE_OF_SHELF_FACING_DATA = { + SqlText: `CREATE TABLE IF NOT EXISTS ${AppTables.SHARE_OF_SHELF_FACING_DATA} +(KEY_ID INTEGER PRIMARY KEY AUTOINCREMENT,COMMON_ID INTEGER,STORE_ID INTEGER,VISIT_DATE NVARCHAR,CATEGORY NVARCHAR,CATEGORY_ID INTEGER,SUB_CATEGORY NVARCHAR,SUB_CATEGORY_ID INTEGER,SUB_CATEGORY_STOCK INTEGER,STOCK INTEGER,IMAGE1 NVARCHAR,ADDED_DATE TEXT)`, +}; +const Q_INSERT_SAMPLED_DATA = { + SqlText: `CREATE TABLE IF NOT EXISTS ${AppTables.INSERT_SAMPLED_DATA} +(KEY_ID INTEGER PRIMARY KEY AUTOINCREMENT,STORE_ID INTEGER,VISIT_DATE NVARCHAR,PRESENT INTEGER,SAMPLE_ID INTEGER,SAMPLE NVARCHAR,MOBILE INTEGER,NAME NVARCHAR,FEEDBACK NVARCHAR,ADDED_DATE TEXT)`, +}; +const Q_CONTACT_CONVERSION = { + SqlText: `CREATE TABLE IF NOT EXISTS ${AppTables.CONTACT_CONVERSION} +(KEY_ID INTEGER PRIMARY KEY AUTOINCREMENT,STORE_ID INTEGER,VISIT_DATE NVARCHAR,SAMPLING_DEFINITION_ID INTEGER,TOTAL_CONTACT INTEGER,CST_CONTACT INTEGER,TOTAL_SAMPLED INTEGER,ADDED_DATE TEXT,SCREEN_TYPE TEXT)`, +}; + +const Q_INSERT_ERROR_TRACKING = { + SqlText: `CREATE TABLE IF NOT EXISTS ${AppTables.INSERT_ERROR_TRACKING} +(KEY_ID INTEGER PRIMARY KEY AUTOINCREMENT,STORE_ID INTEGER,VISIT_DATE NVARCHAR,PRESENT INTEGER,ISSUE_CATEGORY_ID INTEGER,ISSUE_CATEGORY NVARCHAR,ISSUE_TYPE_ID INTEGER,ISSUE_TYPE NVARCHAR,REMARK INTEGER,ADDED_DATE TEXT)`, +}; +const Q_GROOMING_IMAGE_DATA = { + SqlText: `CREATE TABLE IF NOT EXISTS ${AppTables.GROOMING_IMAGE_DATA} +(KEY_ID INTEGER PRIMARY KEY AUTOINCREMENT,STORE_ID INTEGER,VISIT_DATE NVARCHAR,IMAGE NVARCHAR,ADDED_DATE TEXT)`, +}; +const Q_ADDITIONAL_VISIBILITY = { + SqlText: `CREATE TABLE IF NOT EXISTS ${AppTables.ADDITIONAL_VISIBILITY} +(KEY_ID INTEGER PRIMARY KEY AUTOINCREMENT,STORE_ID INTEGER,VISIT_DATE NVARCHAR,PRESENT INTEGER,CATEGORY NVARCHAR,CATEGORY_ID INTEGER,SUB_CATEGORY NVARCHAR,SUB_CATEGORY_ID INTEGER,BRAND NVARCHAR,BRAND_ID INTEGER,DISPLAY NVARCHAR,DISPLAY_ID INTEGER,ASSERT_COUNT INTEGER,REMARK NVARCHAR,IMAGE NVARCHAR,IS_UPDATED INTEGER,FROM_DATE TEXT,TO_DATE TEXT,SHOWFROMDATE TEXT,ADDED_DATE TEXT)`, +}; +const Q_ADDITIONAL_VISIBILITY_STOCK = {SqlText:`CREATE TABLE IF NOT EXISTS ${AppTables.ADDITIONAL_VISIBILITY_STOCK} +(KEY_ID INTEGER PRIMARY KEY AUTOINCREMENT,STORE_ID INTEGER,VISIT_DATE NVARCHAR,CATEGORY_ID INTEGER,SUB_CATEGORY_ID INTEGER,BRAND_ID INTEGER,DISPLAY_ID INTEGER,PRODUCT_ID INTEGER,PRODUCT_NAME VARCHAR,STOCK_REQ INTEGER,STOCK INTEGER,IS_SELECT INTEGER)`,}; + + +const Q_ADD_STORE_INFO = { + SqlText: `CREATE TABLE IF NOT EXISTS ${AppTables.ADD_STORE_INFO} +(KEY_ID INTEGER PRIMARY KEY AUTOINCREMENT ,VISIT_DATE NVARCHAR, DISTRIBUTOR_NAME NVARCHAR, DISTRIBUTOR_ID INTEGER, STORE_NAME NVARCHAR, STORE_ADDRESS NVARCHAR,CITY_NAME NVARCHAR,CITY_ID INTEGER,STORETYPE_NAME NVARCHAR,STORETYPE_ID INTEGER ,IMAGE NVARCHAR,IMAGEPATH NVARCHAR,LAT NVARCHAR,LNG NVARCHAR, ADDED_DATE TEXT, STATUS NVARCHAR)`, +}; + +const Q_HOME_LOCATION = { + SqlText: `CREATE TABLE IF NOT EXISTS ${AppTables.HOME_LOCATION} +(KEY_ID INTEGER PRIMARY KEY AUTOINCREMENT ,VISIT_DATE NVARCHAR,LATITUDE NVARCHAR,LONGITUDE NVARCHAR, ADDED_DATE TEXT, STATUS NVARCHAR)`, +}; + +const Q_ADDVIS_IR_IMAGES = { + SqlText: `CREATE TABLE IF NOT EXISTS ${AppTables.ADDVIS_IR_IMAGES} +(KEY_ID INTEGER PRIMARY KEY AUTOINCREMENT,STORE_ID INTEGER,VISIT_DATE NVARCHAR,IMAGE1 NVARCHAR,TEMP_SESSION_ID NVARCHAR,UN_SESSION_ID NVARCHAR,ADDED_DATE TEXT)`, +}; +const Q_ADDVIS_IRUPLOAD = { + SqlText: `CREATE TABLE IF NOT EXISTS ${AppTables.ADDVIS_IRUPLOAD} +(KEY_ID INTEGER PRIMARY KEY AUTOINCREMENT,STORE_ID INTEGER,VISIT_DATE NVARCHAR,TEMP_SESSION_ID NVARCHAR,UN_SESSION_ID NVARCHAR,UPLOAD_STATUS NVARCHAR,SYNC_STATUS NVARCHAR,SESSION_STORECODE NVARCHAR,SESSION_TASKNAME NVARCHAR,SESSION_CATNAME NVARCHAR,SESSION_PHOTOTYPE NVARCHAR,ADDED_DATE TEXT)`, +}; + +const Q_COMPVIS_IR_IMAGES = { + SqlText: `CREATE TABLE IF NOT EXISTS ${AppTables.COMPVIS_IR_IMAGES} +(KEY_ID INTEGER PRIMARY KEY AUTOINCREMENT,STORE_ID INTEGER,VISIT_DATE NVARCHAR,IMAGE1 NVARCHAR,TEMP_SESSION_ID NVARCHAR,UN_SESSION_ID NVARCHAR,ADDED_DATE TEXT)`, +}; +const Q_COMPVIS_IRUPLOAD = { + SqlText: `CREATE TABLE IF NOT EXISTS ${AppTables.COMPVIS_IRUPLOAD} +(KEY_ID INTEGER PRIMARY KEY AUTOINCREMENT,STORE_ID INTEGER,VISIT_DATE NVARCHAR,TEMP_SESSION_ID NVARCHAR,UN_SESSION_ID NVARCHAR,UPLOAD_STATUS NVARCHAR,SYNC_STATUS NVARCHAR,SESSION_STORECODE NVARCHAR,SESSION_TASKNAME NVARCHAR,SESSION_CATNAME NVARCHAR,SESSION_PHOTOTYPE NVARCHAR,ADDED_DATE TEXT)`, +}; + +const Q_MISSED_CALL = { + SqlText: `CREATE TABLE IF NOT EXISTS ${AppTables.MISSED_CALL} +(KEY_ID INTEGER PRIMARY KEY AUTOINCREMENT,STORE_ID INTEGER,VISIT_DATE NVARCHAR,PRESENT INTEGER,UNIQUE_CODE INTEGER,IS_UPDATED INTEGER,ADDED_DATE TEXT)`, +}; + +const Q_COMPETITION_VISIBILITY = { + SqlText: `CREATE TABLE IF NOT EXISTS ${AppTables.COMPETITION_VISIBILITY} +(KEY_ID INTEGER PRIMARY KEY AUTOINCREMENT,STORE_ID INTEGER,VISIT_DATE NVARCHAR,PRESENT INTEGER,COMPANY NVARCHAR,COMPANY_ID INTEGER,CATEGORY NVARCHAR,CATEGORY_ID INTEGER,SUB_CATEGORY NVARCHAR,SUB_CATEGORY_ID INTEGER,BRAND NVARCHAR,BRAND_ID INTEGER,DISPLAY NVARCHAR,DISPLAY_ID INTEGER,REMARK NVARCHAR,IMAGE NVARCHAR,ADDED_DATE TEXT)`, +}; +const Q_COMPETITION_PROMOTION = { + SqlText: `CREATE TABLE IF NOT EXISTS ${AppTables.COMPETITION_PROMOTION} +(KEY_ID INTEGER PRIMARY KEY AUTOINCREMENT,STORE_ID INTEGER,VISIT_DATE NVARCHAR,PRESENT INTEGER,COMPANY NVARCHAR,COMPANY_ID INTEGER,CATEGORY NVARCHAR,CATEGORY_ID INTEGER,SUB_CATEGORY NVARCHAR,SUB_CATEGORY_ID INTEGER,BRAND NVARCHAR,BRAND_ID INTEGER,PROMO_TYPE NVARCHAR,PROMO_TYPE_ID INTEGER,PRODUCT NVARCHAR,PRODUCT_ID INTEGER,PROMO_DETAILS NVARCHAR,MRP INTEGER,SELLING_PRICE INTEGER,GRAMMAGE NVARCHAR,DISCOUNT_PERCENT NVARCHAR,IMAGE NVARCHAR,IMAGE2 NVARCHAR,IMAGE3 NVARCHAR,ADDED_DATE TEXT)`, +}; + +const Q_COVERAGE_DATA = { + SqlText: `CREATE TABLE IF NOT EXISTS ${AppTables.COVERAGE_DATA} +(KEY_ID INTEGER PRIMARY KEY AUTOINCREMENT,STORE_ID INTEGER,VISIT_DATE NVARCHAR,LATITUDE NVARCHAR,LONGITUDE NVARCHAR,IMAGE NVARCHAR,CHECKOUT_TIME NVARCHAR,CHECKOUT_IMAGE NVARCHAR,REASON_ID INTEGER,REASON NVARCHAR,REMARK NVARCHAR,STORE_FLAG NVARCHAR,MID INTEGER,JCP_TYPE NVARCHAR,ADDED_DATE TEXT)`, +}; +const Q_CHECKIN_DATA = { + SqlText: `CREATE TABLE IF NOT EXISTS ${AppTables.CHECKIN_DATA} +(KEY_ID INTEGER PRIMARY KEY AUTOINCREMENT,STORE_ID INTEGER,VISIT_DATE NVARCHAR,LATITUDE NVARCHAR,LONGITUDE NVARCHAR,CHECKIN_TIME NVARCHAR,CHECKIN_IMAGE NVARCHAR,CHECKOUT_TIME NVARCHAR,CHECKOUT_IMAGE NVARCHAR,REMARK NVARCHAR,JCP_TYPE NVARCHAR,ADDED_DATE TEXT)`, +}; + +const Q_DISTRIBUTOR_CHECKIN = { + SqlText: `CREATE TABLE IF NOT EXISTS ${AppTables.DISTRIBUTOR_CHECKIN} +(KEY_ID INTEGER PRIMARY KEY AUTOINCREMENT,DISTRIBUTOR_ID INTEGER,VISIT_DATE NVARCHAR,LATITUDE NVARCHAR,LONGITUDE NVARCHAR,CHECKIN_TIME NVARCHAR,CHECKIN_IMAGE NVARCHAR,CHECKOUT_TIME NVARCHAR,CHECKOUT_IMAGE NVARCHAR,REASON_ID INTEGER,REASON NVARCHAR,REMARK NVARCHAR,ADDED_DATE TEXT)`, +}; + + +const Q_PROMOTION_HEADER_DATA = { + SqlText: `CREATE TABLE IF NOT EXISTS ${AppTables.PROMOTION_HEADER_DATA} +(KEY_ID INTEGER PRIMARY KEY AUTOINCREMENT,STORE_ID INTEGER,VISIT_DATE NVARCHAR,SUB_CATEGORY NVARCHAR,SUB_CATEGORY_ID INTEGER,ADDED_DATE TEXT)`, +}; +const Q_PROMOTION_DATA = { + SqlText: `CREATE TABLE IF NOT EXISTS ${AppTables.PROMOTION_DATA} +(KEY_ID INTEGER PRIMARY KEY AUTOINCREMENT,COMMON_ID INTEGER,STORE_ID INTEGER,VISIT_DATE NVARCHAR,SUB_CATEGORY NVARCHAR,SUB_CATEGORY_ID INTEGER,PROMOTION NVARCHAR,PROMOTION_ID INTEGER,STOCK_AVL NVARCHAR,PROMOTALK_AVL NVARCHAR,POS_AVL NVARCHAR,IMAGE1 NVARCHAR,ADDED_DATE TEXT)`, +}; + + +const Q_SIMPLE_PROMOHDR_DATA = { + SqlText: `CREATE TABLE IF NOT EXISTS ${AppTables.SIMPLE_PROMOHDR_DATA} +(KEY_ID INTEGER PRIMARY KEY AUTOINCREMENT,STORE_ID INTEGER,VISIT_DATE NVARCHAR,SUB_CATEGORY NVARCHAR,SUB_CATEGORY_ID INTEGER,ADDED_DATE TEXT)`, +}; +const Q_SIMPLE_PROMOTION_DATA = { + SqlText: `CREATE TABLE IF NOT EXISTS ${AppTables.SIMPLE_PROMOTION_DATA} +(KEY_ID INTEGER PRIMARY KEY AUTOINCREMENT,COMMON_ID INTEGER,STORE_ID INTEGER,VISIT_DATE NVARCHAR,SUB_CATEGORY NVARCHAR,SUB_CATEGORY_ID INTEGER,PROMOTION NVARCHAR,PROMOTION_ID INTEGER,IS_PRESENT INTEGER,REASON_ID INTEGER,REASON NVARCHAR,IMAGE1 NVARCHAR,ADDED_DATE TEXT)`, +}; + + +const Q_PAID_VISIBILITY_HEADER_DATA = { + SqlText: `CREATE TABLE IF NOT EXISTS ${AppTables.PAID_VISIBILITY_HEADER_DATA} +(KEY_ID INTEGER PRIMARY KEY AUTOINCREMENT,STORE_ID INTEGER,VISIT_DATE NVARCHAR,SUB_CATEGORY NVARCHAR,SUB_CATEGORY_ID INTEGER,ADDED_DATE TEXT)`, +}; +const Q_PAID_VISIBILITY_CHILD_DATA = { + SqlText: `CREATE TABLE IF NOT EXISTS ${AppTables.PAID_VISIBILITY_CHILD_DATA} +(KEY_ID INTEGER PRIMARY KEY AUTOINCREMENT,COMMON_ID INTEGER,STORE_ID INTEGER,VISIT_DATE NVARCHAR,SUB_CATEGORY NVARCHAR,SUB_CATEGORY_ID INTEGER,VISIBILITY_PRESENT INTEGER,DISPLAY_ID INTEGER,DISPLAY NVARCHAR,IMAGE1 NVARCHAR,IMAGE2 NVARCHAR,REASON NVARCHAR,REASON_ID INTEGER,SHOW_RSN_REMARK INTEGER,REASON_REMARK NVARCHAR,IS_UPDATED INTEGER,ADDED_DATE TEXT)`, +}; +const Q_PAID_VIS_CHECKLIST = { + SqlText: `CREATE TABLE IF NOT EXISTS ${AppTables.PAID_VIS_CHECKLIST} +(KEY_ID INTEGER PRIMARY KEY AUTOINCREMENT,COMMON_ID INTEGER,STORE_ID INTEGER,VISIT_DATE NVARCHAR,SUB_CATEGORY_ID INTEGER,DISPLAY_ID INTEGER,CHECKLIST NVARCHAR,CHECKLIST_ID INTEGER,REASON NVARCHAR,REASON_ID INTEGER,ADDED_DATE TEXT)`, +}; +const Q_PERSONAL_DOCUMENT = { + SqlText: `CREATE TABLE IF NOT EXISTS ${AppTables.PERSONAL_DOCUMENT} +(KEY_ID INTEGER PRIMARY KEY AUTOINCREMENT,VISIT_DATE NVARCHAR,USER_ID INTEGER,DOCUMENT_ID INTEGER,DOCUMENT NVARCHAR,IMAGE1_FLAG INTEGER,IMAGE2_FLAG INTEGER,ANS_LIST NVARCHAR,IMAGE1 NVARCHAR,IMAGE2 NVARCHAR,STATUS NVARCHAR,ANSWER NVARCHAR,ADDED_DATE TEXT)`, +}; +const Q_VISITOR_LOGIN = { + SqlText: `CREATE TABLE IF NOT EXISTS ${AppTables.VISITOR_LOGIN} +(KEY_ID INTEGER PRIMARY KEY AUTOINCREMENT,EMP_ID NVARCHAR,EMP_CODE NVARCHAR,NAME NVARCHAR,DESIGNATION NVARCHAR,UPLOADSTATUS NVARCHAR,VISIT_DATE NVARCHAR,IN_TIME NVARCHAR,OUT_TIME NVARCHAR,IN_TIME_IMAGE NVARCHAR,OUT_TIME_IMAGE NVARCHAR,ADDED_DATE TEXT)`, +}; +const Q_AUTOMATED_REIMBURSEMENT = { + SqlText: `CREATE TABLE IF NOT EXISTS ${AppTables.AUTOMATED_REIMBURSEMENT} +(KEY_ID INTEGER PRIMARY KEY AUTOINCREMENT,VISIT_DATE NVARCHAR,CITY NVARCHAR,CITY_ID INTEGER,STATUS NVARCHAR,PRICE INTEGER,AMOUNT INTEGER,BASE_CITY_ID INTEGER,FIXEDFARE_TWOWAY INTEGER,ROUTE_CODE NVARCHAR,TRAVEL_TYPE NVARCHAR,IMAGE1 NVARCHAR,IMAGE2 NVARCHAR,ADDED_DATE TEXT)`, +}; +const Q_CASHTILL_SURVEY = { + SqlText: `CREATE TABLE IF NOT EXISTS ${AppTables.CASHTILL_SURVEY} +(KEY_ID INTEGER PRIMARY KEY AUTOINCREMENT,STORE_ID INTEGER,VISIT_DATE NVARCHAR,CATEGORY NVARCHAR,CATEGORY_ID INTEGER,QUESTION NVARCHAR,QUESTION_ID INTEGER,QUESTION_TYPE NVARCHAR,QUESTION_IMAGE_ALLOW INTEGER,QUESTION_IMAGE NVARCHAR,IMAGE_ALLOW1 INTEGER,IMAGE_ALLOW2 INTEGER,ANSWER NVARCHAR,ANSWER_ID INTEGER,STOCK INTEGER,IMAGE1 NVARCHAR,IMAGE2 NVARCHAR,ADDED_DATE TEXT)`, +}; +const Q_SURVEY = { + SqlText: `CREATE TABLE IF NOT EXISTS ${AppTables.SURVEY} +(KEY_ID INTEGER PRIMARY KEY AUTOINCREMENT,STORE_ID INTEGER,VISIT_DATE NVARCHAR,SURVEY_ID INTEGER,CATEGORY_ID INTEGER,SUB_CATEGORY_ID INTEGER,QUESTION NVARCHAR,QUESTION_ID INTEGER,QUESTION_TYPE NVARCHAR,ANSWER NVARCHAR,ANSWER_ID INTEGER,IMAGE_ALLOW1 INTEGER,IMAGE1 NVARCHAR,IMAGE_ALLOW2 INTEGER,IMAGE2 NVARCHAR,MULTI_OPTIONS_IDS NVARCHAR,IS_DISABLED INTEGER,MENU_ID INTEGER,ADDED_DATE TEXT,VerifyOTP INTEGER)`, +}; + + +const Q_FEEDBACK = { + SqlText: `CREATE TABLE IF NOT EXISTS ${AppTables.FEEDBACK_DATA} +(KEY_ID INTEGER PRIMARY KEY AUTOINCREMENT,STORE_ID INTEGER,VISIT_DATE NVARCHAR,CATEGORY_ID INTEGER,QUESTION_CODE NVARCHAR,QUESTION_ID INTEGER,QUESTION_TYPE NVARCHAR,ANSWER NVARCHAR,ANSWER_ID INTEGER,IMAGE_ALLOW1 INTEGER,IMAGE1 NVARCHAR,MULTI_OPTIONS_IDS NVARCHAR,IS_DISABLED INTEGER,ADDED_DATE TEXT)`, +}; +const Q_STORE_CHECKLIST = { + SqlText: `CREATE TABLE IF NOT EXISTS ${AppTables.STORE_CHECKLIST} +(KEY_ID INTEGER PRIMARY KEY AUTOINCREMENT,STORE_ID INTEGER,VISIT_DATE NVARCHAR,LAST_MID INTEGER,STORE_CHECKLIST_ONCE NVARCHAR, CATEGORY_ID INTEGER,QUESTION NVARCHAR,QUESTION_ID INTEGER,QUESTION_TYPE NVARCHAR,ANSWER NVARCHAR,ANSWER_ID INTEGER,IMAGE_ALLOW1 INTEGER,IMAGE1 NVARCHAR,IMAGE_ALLOW2 INTEGER,IMAGE2 NVARCHAR,MULTI_OPTIONS_IDS NVARCHAR,IS_DISABLED INTEGER,ADDED_DATE TEXT)`, +}; + +const Q_WINDOW_HDR = { + SqlText: `CREATE TABLE IF NOT EXISTS ${AppTables.WINDOW_HDR_DATA} +(KEY_ID INTEGER PRIMARY KEY AUTOINCREMENT,WINDOW_HEADER_ID INTEGER,STORE_ID INTEGER,VISIT_DATE NVARCHAR,WINDOW_DEFINITION_ID INTEGER,WINDOW_ID INTEGER,WINDOW_NAME NVARCHAR,WINDOW_TABLE NVARCHAR,WINDOW_FIELD NVARCHAR,WINDOW_VALUE INTEGER,CHILD_NAME NVARCHAR,IS_PRESENT INTEGER,WINDOW_NA_IMAGE NVARCHAR,REASON_ID INTEGER,REASON NVARCHAR,MENU_ID INTEGER,ADDED_DATE TEXT)`, +}; +const Q_WINDOW_CHILD = { + SqlText: `CREATE TABLE IF NOT EXISTS ${AppTables.WINDOW_CHILD_DATA} +(KEY_ID INTEGER PRIMARY KEY AUTOINCREMENT,WINDOW_HEADER_ID INTEGER,STORE_ID INTEGER,VISIT_DATE NVARCHAR,WINDOW_DEFINITION_ID INTEGER,WINDOW_ID INTEGER,QUESTION_ID INTEGER,QUESTION_CODE INTEGER,QUESTION_TYPE NVARCHAR,ANSWER NVARCHAR,ANSWER_ID INTEGER,MULTI_OPTIONS_IDS NVARCHAR,IMAGE1 NVARCHAR,IMAGE_ALLOW1 INTEGER,MENU_ID INTEGER,IS_DISABLED INTEGER,ADDED_DATE TEXT)`, +}; +const Q_WINDOW_IMAGES = { + SqlText: `CREATE TABLE IF NOT EXISTS ${AppTables.WINDOW_IMAGES} +(KEY_ID INTEGER PRIMARY KEY AUTOINCREMENT,WINDOW_HEADER_ID INTEGER,STORE_ID INTEGER,VISIT_DATE NVARCHAR,WINDOW_DEFINITION_ID INTEGER,WINDOW_ID INTEGER,IMAGE1 NVARCHAR,IMAGE2 NVARCHAR,MENU_ID INTEGER,ADDED_DATE TEXT)`, +}; +const Q_WINDOW_STOCK = { + SqlText: `CREATE TABLE IF NOT EXISTS ${AppTables.WINDOW_STOCK_DATA} +(KEY_ID INTEGER PRIMARY KEY AUTOINCREMENT,WINDOW_HEADER_ID INTEGER,STORE_ID INTEGER,VISIT_DATE NVARCHAR,WINDOW_DEFINITION_ID INTEGER,WINDOW_ID INTEGER,WINDOW_STOCK_DEFINITION_ID INTEGER,WINDOW_STOCK_TABLE NVARCHAR,WINDOW_STOCK_FIELD NVARCHAR,WINDOW_STOCK_VALUE INTEGER,WINDOW_STOCK_MBQ INTEGER,PRODUCT_NAME NVARCHAR,STOCK INTEGER,IS_WIND_PRESENT INTEGER,MENU_ID INTEGER,ADDED_DATE TEXT)`, +}; +const Q_WINDOW_IR_IMAGES = { + SqlText: `CREATE TABLE IF NOT EXISTS ${AppTables.WINDOW_IR_IMAGES} +(KEY_ID INTEGER PRIMARY KEY AUTOINCREMENT,WINDOW_HEADER_ID INTEGER,STORE_ID INTEGER,VISIT_DATE NVARCHAR,WINDOW_DEFINITION_ID INTEGER,WINDOW_ID INTEGER,IMAGE1 NVARCHAR,IMAGE2 NVARCHAR,TEMP_SESSION_ID NVARCHAR,UN_SESSION_ID NVARCHAR,MENU_ID INTEGER,ADDED_DATE TEXT)`, +}; +const Q_WINDOW_IRUPLOAD = { + SqlText: `CREATE TABLE IF NOT EXISTS ${AppTables.WINDOW_IRUPLOAD} +(KEY_ID INTEGER PRIMARY KEY AUTOINCREMENT,WINDOW_HEADER_ID NVARCHAR,STORE_ID INTEGER,VISIT_DATE NVARCHAR,WINDOW_DEFINITION_ID INTEGER,WINDOW_ID INTEGER,TEMP_SESSION_ID NVARCHAR,UN_SESSION_ID NVARCHAR,UPLOAD_STATUS NVARCHAR,SYNC_STATUS NVARCHAR,MENU_ID INTEGER,SESSION_STORECODE NVARCHAR,SESSION_TASKNAME NVARCHAR,SESSION_CATNAME NVARCHAR,SESSION_PHOTOTYPE NVARCHAR,ADDED_DATE TEXT)`, +}; + + + +const Q_ST_HDR = { + SqlText: `CREATE TABLE IF NOT EXISTS ${AppTables.ST_HDR_DATA} +(KEY_ID INTEGER PRIMARY KEY AUTOINCREMENT,ST_HEADER_ID INTEGER,STORE_ID INTEGER,VISIT_DATE NVARCHAR,ST_DEFINITION_ID INTEGER,SHELFTALKER_ID INTEGER,ST_NAME NVARCHAR,ST_TABLE NVARCHAR,ST_FIELD NVARCHAR,ST_VALUE INTEGER,CHILD_NAME NVARCHAR,IS_PRESENT INTEGER,ST_NA_IMAGE NVARCHAR,REASON_ID INTEGER,REASON NVARCHAR,REMARK NVARCHAR,ADDED_DATE TEXT)`, +}; +const Q_ST_CHILD = { + SqlText: `CREATE TABLE IF NOT EXISTS ${AppTables.ST_CHILD_DATA} +(KEY_ID INTEGER PRIMARY KEY AUTOINCREMENT,ST_HEADER_ID INTEGER,STORE_ID INTEGER,VISIT_DATE NVARCHAR,ST_DEFINITION_ID INTEGER,SHELFTALKER_ID INTEGER,QUESTION_ID INTEGER,QUESTION_CODE INTEGER,QUESTION_TYPE NVARCHAR,ANSWER NVARCHAR,ANSWER_ID INTEGER,MULTI_OPTIONS_IDS NVARCHAR,IMAGE1 NVARCHAR,IMAGE_ALLOW1 INTEGER,ADDED_DATE TEXT)`, +}; +const Q_ST_IMAGES = { + SqlText: `CREATE TABLE IF NOT EXISTS ${AppTables.ST_IMAGES} +(KEY_ID INTEGER PRIMARY KEY AUTOINCREMENT,ST_HEADER_ID INTEGER,STORE_ID INTEGER,VISIT_DATE NVARCHAR,ST_DEFINITION_ID INTEGER,SHELFTALKER_ID INTEGER,IMAGE1 NVARCHAR,IMAGE2 NVARCHAR,ADDED_DATE TEXT)`, +}; +const Q_ST_STOCK = { + SqlText: `CREATE TABLE IF NOT EXISTS ${AppTables.ST_STOCK_DATA} +(KEY_ID INTEGER PRIMARY KEY AUTOINCREMENT,ST_HEADER_ID INTEGER,STORE_ID INTEGER,VISIT_DATE NVARCHAR,ST_DEFINITION_ID INTEGER,SHELFTALKER_ID INTEGER,ST_STOCK_DEFINITION_ID INTEGER,ST_STOCK_TABLE NVARCHAR,ST_STOCK_FIELD NVARCHAR,ST_STOCK_VALUE INTEGER,ST_STOCK_MBQ INTEGER,PRODUCT_NAME NVARCHAR,STOCK INTEGER,IS_PROMO_PRESENT INTEGER,ADDED_DATE TEXT)`, +}; + + +const Q_PROMO_HDR_DATA = { + SqlText: `CREATE TABLE IF NOT EXISTS ${AppTables.PROMO_HDR_DATA} +(KEY_ID INTEGER PRIMARY KEY AUTOINCREMENT,PROMO_HEADER_ID INTEGER,STORE_ID INTEGER,VISIT_DATE NVARCHAR,PROMO_DEFINITION_ID INTEGER,PROMO_ID INTEGER,PROMO_NAME NVARCHAR,PROMO_TABLE NVARCHAR,PROMO_FIELD NVARCHAR,PROMO_VALUE INTEGER,CHILD_NAME NVARCHAR,IS_PRESENT INTEGER,PROMO_NA_IMAGE NVARCHAR,REASON_ID INTEGER,REASON NVARCHAR,REMARK NVARCHAR,SHOW_RSN_REMARK INTEGER,REASON_REMARK NVARCHAR,IS_UPDATED INTEGER,ADDED_DATE TEXT)`, +}; +const Q_PROMO_CHILD_DATA = { + SqlText: `CREATE TABLE IF NOT EXISTS ${AppTables.PROMO_CHILD_DATA} +(KEY_ID INTEGER PRIMARY KEY AUTOINCREMENT,PROMO_HEADER_ID INTEGER,STORE_ID INTEGER,VISIT_DATE NVARCHAR,PROMO_DEFINITION_ID INTEGER,PROMO_ID INTEGER,QUESTION_ID INTEGER,QUESTION_CODE INTEGER,QUESTION_TYPE NVARCHAR,ANSWER NVARCHAR,ANSWER_ID INTEGER,MULTI_OPTIONS_IDS NVARCHAR,IMAGE1 NVARCHAR,IMAGE_ALLOW1 INTEGER,IS_DISABLED INTEGER,ADDED_DATE TEXT)`, +}; +const Q_PROMO_IMAGES = { + SqlText: `CREATE TABLE IF NOT EXISTS ${AppTables.PROMO_IMAGES} +(KEY_ID INTEGER PRIMARY KEY AUTOINCREMENT,PROMO_HEADER_ID INTEGER,STORE_ID INTEGER,VISIT_DATE NVARCHAR,PROMO_DEFINITION_ID INTEGER,PROMO_ID INTEGER,IMAGE1 NVARCHAR,IMAGE2 NVARCHAR,ADDED_DATE TEXT)`, +}; +const Q_PROMO_STOCK_DATA = { + SqlText: `CREATE TABLE IF NOT EXISTS ${AppTables.PROMO_STOCK_DATA} +(KEY_ID INTEGER PRIMARY KEY AUTOINCREMENT,PROMO_HEADER_ID INTEGER,STORE_ID INTEGER,VISIT_DATE NVARCHAR,PROMO_DEFINITION_ID INTEGER,PROMO_ID INTEGER,PROMO_STOCK_DEFINITION_ID INTEGER,PROMO_STOCK_TABLE NVARCHAR,PROMO_STOCK_FIELD NVARCHAR,PROMO_STOCK_VALUE INTEGER,PROMO_STOCK_MBQ INTEGER,PRODUCT_NAME NVARCHAR,STOCK INTEGER,IS_PROMO_PRESENT INTEGER,ADDED_DATE TEXT)`, +}; + +// const Q_PROMO_IR_IMAGES= {SqlText:`CREATE TABLE IF NOT EXISTS ${AppTables.PROMO_IR_IMAGES } +// (KEY_ID INTEGER PRIMARY KEY AUTOINCREMENT,PROMO_HEADER_ID NVARCHAR,STORE_ID INTEGER,VISIT_DATE NVARCHAR,PROMO_DEFINITION_ID INTEGER,PROMO_HDR_VALUE INTEGER,PROMO_CHILD_VALUE INTEGER,IMAGE1 NVARCHAR,TYPE NVARCHAR,PROMO_ID INTEGER,TEMP_SESSION_ID NVARCHAR,UN_SESSION_ID NVARCHAR,MENU_ID INTEGER,ADDED_DATE TEXT)`,}; +// const Q_PROMO_IRUPLOAD= {SqlText:`CREATE TABLE IF NOT EXISTS ${AppTables.PROMO_IRUPLOAD } +// (KEY_ID INTEGER PRIMARY KEY AUTOINCREMENT,PROMO_HEADER_ID NVARCHAR,STORE_ID INTEGER,VISIT_DATE NVARCHAR,PROMO_DEFINITION_ID INTEGER,PROMO_HDR_VALUE INTEGER,PROMO_CHILD_VALUE INTEGER,PROMO_ID INTEGER,TEMP_SESSION_ID NVARCHAR,UN_SESSION_ID NVARCHAR,UPLOAD_STATUS NVARCHAR,SYNC_STATUS NVARCHAR,TYPE NVARCHAR,SESSION_STORECODE NVARCHAR,SESSION_TASKNAME NVARCHAR,SESSION_CATNAME NVARCHAR,SESSION_PHOTOTYPE NVARCHAR,MENU_ID INTEGER,ADDED_DATE TEXT)`,}; + +const Q_PROMO_IR_IMAGES = { + SqlText: `CREATE TABLE IF NOT EXISTS ${AppTables.PROMO_IR_IMAGES} +(KEY_ID INTEGER PRIMARY KEY AUTOINCREMENT,PROMO_HEADER_ID INTEGER,STORE_ID INTEGER,VISIT_DATE NVARCHAR,PROMO_DEFINITION_ID INTEGER,PROMO_ID INTEGER,IMAGE1 NVARCHAR,IMAGE2 NVARCHAR,TEMP_SESSION_ID NVARCHAR,UN_SESSION_ID NVARCHAR,MENU_ID INTEGER,ADDED_DATE TEXT)`, +}; +const Q_PROMO_IRUPLOAD = { + SqlText: `CREATE TABLE IF NOT EXISTS ${AppTables.PROMO_IRUPLOAD} +(KEY_ID INTEGER PRIMARY KEY AUTOINCREMENT,PROMO_HEADER_ID NVARCHAR,STORE_ID INTEGER,VISIT_DATE NVARCHAR,PROMO_DEFINITION_ID INTEGER,PROMO_ID INTEGER,TEMP_SESSION_ID NVARCHAR,UN_SESSION_ID NVARCHAR,UPLOAD_STATUS NVARCHAR,SYNC_STATUS NVARCHAR,MENU_ID INTEGER,SESSION_STORECODE NVARCHAR,SESSION_TASKNAME NVARCHAR,SESSION_CATNAME NVARCHAR,SESSION_PHOTOTYPE NVARCHAR,ADDED_DATE TEXT)`, +}; + + +const Q_PAIDVIS_HDR_DATA = { + SqlText: `CREATE TABLE IF NOT EXISTS ${AppTables.PAIDVIS_HDR_DATA} +(KEY_ID INTEGER PRIMARY KEY AUTOINCREMENT,PVIS_HEADER_ID INTEGER,STORE_ID INTEGER,VISIT_DATE NVARCHAR,PVIS_DEFINITION_ID INTEGER,PVIS_ID INTEGER,PVIS_NAME NVARCHAR,PVIS_TABLE NVARCHAR,PVIS_FIELD NVARCHAR,PVIS_VALUE INTEGER,CHILD_NAME NVARCHAR,IS_PRESENT INTEGER,PVIS_NA_IMAGE NVARCHAR,REASON_ID INTEGER,REASON NVARCHAR,REMARK NVARCHAR,SHOW_RSN_REMARK INTEGER,REASON_REMARK NVARCHAR ,IS_UPDATED INTEGER,IS_STORE_SPECIFIC TEXT,MENU_ID INTEGER,ADDED_DATE TEXT)`, +}; + + +const Q_WAREHOUSE_HDR_DATA = { + SqlText: `CREATE TABLE IF NOT EXISTS ${AppTables.WAREHOUSE_HDR_DATA} +(KEY_ID INTEGER PRIMARY KEY AUTOINCREMENT,WAREHS_HEADER_ID INTEGER,STORE_ID INTEGER,MENU_ID INTEGER,TODAY_DEPLOY INTEGER,CAMPAIGN_ID INTEGER,VISIT_DATE NVARCHAR,ITEM_ID INTEGER,ITEM_NAME NVARCHAR,MAPPING_TYPE NVARCHAR,ITEM_CODE NVARCHAR,ITEM_CATEGORY_ID INTEGER,ITEM_CATEGORY NVARCHAR,PVIS_NA_IMAGE NVARCHAR,ITEM_QTY INTEGER,IS_PRESENT INTEGER,IS_UPDATED INTEGER,KPITYPE_ID INTEGER,KPITYPE NVARCHAR,REASON_ID INTEGER,REASON NVARCHAR,ADDED_DATE TEXT)`, +}; + +const Q_WAREHOUSE_CAMPAIGN_HEADER_DATA = { + SqlText: `CREATE TABLE IF NOT EXISTS ${AppTables.WAREHOUSE_CAMPAIGN_HDR_DATA} +(KEY_ID INTEGER PRIMARY KEY AUTOINCREMENT,WAREHS_HEADER_ID INTEGER,STORE_ID INTEGER,MENU_ID INTEGER,CAMPAIGN_ID INTEGER,VISIT_DATE NVARCHAR,ITEM_ID INTEGER,ITEM_NAME NVARCHAR,ITEM_CODE NVARCHAR,ITEM_CATEGORY_ID INTEGER,ITEM_CATEGORY NVARCHAR,ITEM_QTY INTEGER,IS_PRESENT INTEGER,IS_UPDATED INTEGER,KPITYPE_ID INTEGER,KPITYPE NVARCHAR,ADDED_DATE TEXT)`, +}; + +const Q_PAIDVIS_CHILD_DATA = { + SqlText: `CREATE TABLE IF NOT EXISTS ${AppTables.PAIDVIS_CHILD_DATA} +(KEY_ID INTEGER PRIMARY KEY AUTOINCREMENT,PVIS_HEADER_ID INTEGER,STORE_ID INTEGER,VISIT_DATE NVARCHAR,PVIS_DEFINITION_ID INTEGER,PVIS_ID INTEGER,QUESTION_ID INTEGER,QUESTION_CODE INTEGER,QUESTION_TYPE NVARCHAR,ANSWER NVARCHAR,ANSWER_ID INTEGER,MULTI_OPTIONS_IDS NVARCHAR,IMAGE1 NVARCHAR,IMAGE_ALLOW1 INTEGER,MENU_ID INTEGER,IS_DISABLED INTEGER,ADDED_DATE TEXT)`, +}; + +const Q_WAREHOUSE_CHILD_DATA = { + SqlText: `CREATE TABLE IF NOT EXISTS ${AppTables.WAREHOUSE_CHILD_DATA} + (KEY_ID INTEGER PRIMARY KEY AUTOINCREMENT,WAREHS_HEADER_ID INTEGER,STORE_ID INTEGER,VISIT_DATE NVARCHAR,ITEM_ID INTEGER,QUESTION_ID INTEGER,QUESTION_CODE INTEGER,QUESTION_TYPE NVARCHAR,ANSWER NVARCHAR,ANSWER_ID INTEGER,MULTI_OPTIONS_IDS NVARCHAR,IMAGE1 NVARCHAR,IMAGE_ALLOW1 INTEGER,MENU_ID INTEGER,IS_DISABLED INTEGER,ADDED_DATE TEXT)`, +}; + +const Q_WAREHOUSE_CAMPAIGN_CHILD_DATA = { + SqlText: `CREATE TABLE IF NOT EXISTS ${AppTables.WAREHOUSE_CAMPAIGN_CHILD_DATA} + (KEY_ID INTEGER PRIMARY KEY AUTOINCREMENT,WAREHS_HEADER_ID INTEGER,STORE_ID INTEGER,VISIT_DATE NVARCHAR,ITEM_ID INTEGER,QUESTION_ID INTEGER,QUESTION_CODE INTEGER,QUESTION_TYPE NVARCHAR,ANSWER NVARCHAR,ANSWER_ID INTEGER,MULTI_OPTIONS_IDS NVARCHAR,IMAGE1 NVARCHAR,IMAGE_ALLOW1 INTEGER,MENU_ID INTEGER,IS_DISABLED INTEGER,ADDED_DATE TEXT)`, +}; + +const Q_PAIDVIS_IMAGES = { + SqlText: `CREATE TABLE IF NOT EXISTS ${AppTables.PAIDVIS_IMAGES} +(KEY_ID INTEGER PRIMARY KEY AUTOINCREMENT,PVIS_HEADER_ID INTEGER,STORE_ID INTEGER,ADD_IMAGES INTEGER,VISIT_DATE NVARCHAR,PVIS_DEFINITION_ID INTEGER,PVIS_ID INTEGER,IMAGE1 NVARCHAR,IMAGE2 NVARCHAR,MENU_ID INTEGER,ADDED_DATE TEXT)`, +}; + + +const Q_WARE_HOUSE_INWARD = { + SqlText: `CREATE TABLE IF NOT EXISTS ${AppTables.WARE_HOUSE_INWARD} +(KEY_ID INTEGER PRIMARY KEY AUTOINCREMENT,ITEMID INTEGER,ITEMNAME NVARCHAR,VISIT_DATE NVARCHAR,ITEM_CODE NVARCHAR,REMARK NVARCHAR,IN_WARD_QTY INTEGER,CONFIRM_QTY INTEGER, DAMAGE_QTY INTEGER,REASON NVARCHAR,REASON_ID INTEGER,CHALLAN_TYPE_ID INTEGER,MENU_ID INTEGER,ADDED_DATE TEXT)`, +}; + +const Q_WAREHOUSE_IMAGES = { + SqlText: `CREATE TABLE IF NOT EXISTS ${AppTables.WAREHOUSE_IMAGES} +(KEY_ID INTEGER PRIMARY KEY AUTOINCREMENT,WAREHS_HEADER_ID INTEGER,STORE_ID INTEGER,VISIT_DATE NVARCHAR,ITEM_ID INTEGER,IMAGE1 NVARCHAR,IMAGE2 NVARCHAR,IMAGE_LABEL NVARCHAR,MENU_ID INTEGER,ADDED_DATE TEXT)`, +}; + +const Q_WAREHOUSE_CAMPAIGN_IMAGES = { + SqlText: `CREATE TABLE IF NOT EXISTS ${AppTables.WAREHOUSE_CAMPAIGN_IMAGES} +(KEY_ID INTEGER PRIMARY KEY AUTOINCREMENT,WAREHS_HEADER_ID INTEGER,STORE_ID INTEGER,VISIT_DATE NVARCHAR,ITEM_ID INTEGER,IMAGE1 NVARCHAR,IMAGE2 NVARCHAR,IMAGE_LABEL NVARCHAR,MENU_ID INTEGER,ADDED_DATE TEXT)`, +}; + + +const Q_PAIDVIS_STOCK_DATA = { + SqlText: `CREATE TABLE IF NOT EXISTS ${AppTables.PAIDVIS_STOCK_DATA} +(KEY_ID INTEGER PRIMARY KEY AUTOINCREMENT,PVIS_HEADER_ID INTEGER,STORE_ID INTEGER,VISIT_DATE NVARCHAR,PVIS_DEFINITION_ID INTEGER,PVIS_ID INTEGER,PVIS_STOCK_DEFINITION_ID INTEGER,PVIS_STOCK_TABLE NVARCHAR,PVIS_STOCK_FIELD NVARCHAR,PVIS_STOCK_VALUE INTEGER,PVIS_STOCK_MBQ INTEGER,PRODUCT_NAME NVARCHAR,STOCK INTEGER,IS_PVIS_PRESENT INTEGER,MENU_ID INTEGER,ADDED_DATE TEXT)`, +}; +const Q_PAIDVIS_IR_IMAGES = { + SqlText: `CREATE TABLE IF NOT EXISTS ${AppTables.PAIDVIS_IR_IMAGES} +(KEY_ID INTEGER PRIMARY KEY AUTOINCREMENT,PVIS_HEADER_ID INTEGER,STORE_ID INTEGER,VISIT_DATE NVARCHAR,PVIS_DEFINITION_ID INTEGER,PVIS_ID INTEGER,IMAGE1 NVARCHAR,IMAGE2 NVARCHAR,TEMP_SESSION_ID NVARCHAR,UN_SESSION_ID NVARCHAR,MENU_ID INTEGER,ADDED_DATE TEXT)`, +}; +const Q_PAIDVIS_IRUPLOAD = { + SqlText: `CREATE TABLE IF NOT EXISTS ${AppTables.PAIDVIS_IRUPLOAD} +(KEY_ID INTEGER PRIMARY KEY AUTOINCREMENT,PVIS_HEADER_ID NVARCHAR,STORE_ID INTEGER,VISIT_DATE NVARCHAR,PVIS_DEFINITION_ID INTEGER,PVIS_ID INTEGER,TEMP_SESSION_ID NVARCHAR,UN_SESSION_ID NVARCHAR,UPLOAD_STATUS NVARCHAR,SYNC_STATUS NVARCHAR,MENU_ID INTEGER,SESSION_STORECODE NVARCHAR,SESSION_TASKNAME NVARCHAR,SESSION_CATNAME NVARCHAR,SESSION_PHOTOTYPE NVARCHAR,ADDED_DATE TEXT)`, +}; + + +// Program List +const Q_PROGRAM_HDR_DATA = { + SqlText: `CREATE TABLE IF NOT EXISTS ${AppTables.PROGRAM_HDR_DATA} +(KEY_ID INTEGER PRIMARY KEY AUTOINCREMENT,PROG_HEADER_ID INTEGER,STORE_ID INTEGER,VISIT_DATE NVARCHAR,PROG_DEFINITION_ID INTEGER,PROG_ID INTEGER,PROG_NAME NVARCHAR,PROG_TABLE NVARCHAR,PROG_FIELD NVARCHAR,PROG_VALUE INTEGER,CHILD_NAME NVARCHAR,IS_PRESENT INTEGER,PROG_NA_IMAGE NVARCHAR,REASON_ID INTEGER,REASON NVARCHAR,REMARK NVARCHAR,SHOW_RSN_REMARK INTEGER,REASON_REMARK NVARCHAR ,IS_UPDATED INTEGER,IS_STORE_SPECIFIC TEXT,MENU_ID INTEGER,DISPLAY_AREA NVARCHAR,POS_DA_REASON_ID INTEGER,POS_DA_REASON NVARCHAR,NEG_DA_REASON_ID INTEGER,NEG_DA_REASON NVARCHAR,ADDED_DATE TEXT)`, +}; +const Q_PROGRAM_CHILD_DATA = { + SqlText: `CREATE TABLE IF NOT EXISTS ${AppTables.PROGRAM_CHILD_DATA} +(KEY_ID INTEGER PRIMARY KEY AUTOINCREMENT,PROG_HEADER_ID INTEGER,STORE_ID INTEGER,VISIT_DATE NVARCHAR,PROG_DEFINITION_ID INTEGER,PROG_ID INTEGER,QUESTION_ID INTEGER,QUESTION_CODE INTEGER,QUESTION_TYPE NVARCHAR,ANSWER NVARCHAR,ANSWER_ID INTEGER,MULTI_OPTIONS_IDS NVARCHAR,IMAGE1 NVARCHAR,IMAGE_ALLOW1 INTEGER,MENU_ID INTEGER,IS_DISABLED INTEGER,ADDED_DATE TEXT)`, +}; +const Q_PROGRAM_IMAGES = { + SqlText: `CREATE TABLE IF NOT EXISTS ${AppTables.PROGRAM_IMAGES} +(KEY_ID INTEGER PRIMARY KEY AUTOINCREMENT,PROG_HEADER_ID INTEGER,STORE_ID INTEGER,VISIT_DATE NVARCHAR,PROG_DEFINITION_ID INTEGER,PROG_ID INTEGER,IMAGE1 NVARCHAR,IMAGE2 NVARCHAR,MENU_ID INTEGER,ADDED_DATE TEXT)`, +}; +const Q_PROGRAM_STOCK_DATA = { + SqlText: `CREATE TABLE IF NOT EXISTS ${AppTables.PROGRAM_STOCK_DATA} +(KEY_ID INTEGER PRIMARY KEY AUTOINCREMENT,PROG_HEADER_ID INTEGER,STORE_ID INTEGER,VISIT_DATE NVARCHAR,PROG_DEFINITION_ID INTEGER,PROG_ID INTEGER,PROG_STOCK_DEFINITION_ID INTEGER,PROG_STOCK_TABLE NVARCHAR,PROG_STOCK_FIELD NVARCHAR,PROG_STOCK_VALUE INTEGER,PROG_STOCK_MBQ INTEGER,PRODUCT_NAME NVARCHAR,STOCK INTEGER,IS_PROG_PRESENT INTEGER,MENU_ID INTEGER,ADDED_DATE TEXT)`, +}; + + +const Q_POSM_HDR = { + SqlText: `CREATE TABLE IF NOT EXISTS ${AppTables.POSM_HDR_DATA} +(KEY_ID INTEGER PRIMARY KEY AUTOINCREMENT,POSM_HEADER_ID INTEGER,STORE_ID INTEGER,VISIT_DATE NVARCHAR,POSM_DEFINITION_ID INTEGER,POSM_ID INTEGER,POSM_NAME NVARCHAR,POSM_TYPE_ID INTEGER,POSM_TYPE_NAME NVARCHAR,POSM_TABLE NVARCHAR,POSM_FIELD NVARCHAR,POSM_VALUE INTEGER,CHILD_NAME NVARCHAR,IS_PRESENT INTEGER,POSM_NA_IMAGE NVARCHAR,POSM_IMAGE1 NVARCHAR,POSM_IMAGE2 NVARCHAR,REASON_ID INTEGER,REASON NVARCHAR,SHOW_RSN_REMARK INTEGER,REASON_REMARK NVARCHAR,IS_UPDATED INTEGER,ADDED_DATE TEXT)`, +}; +const Q_POSM_CHILD = { + SqlText: `CREATE TABLE IF NOT EXISTS ${AppTables.POSM_CHILD_DATA} +(KEY_ID INTEGER PRIMARY KEY AUTOINCREMENT,POSM_HEADER_ID INTEGER,STORE_ID INTEGER,VISIT_DATE NVARCHAR,POSM_DEFINITION_ID INTEGER,POSM_ID INTEGER,QUESTION_ID INTEGER,QUESTION_CODE INTEGER,QUESTION_TYPE NVARCHAR,ANSWER NVARCHAR,ANSWER_ID INTEGER,MULTI_OPTIONS_IDS NVARCHAR,IMAGE1 NVARCHAR,IMAGE_ALLOW1 INTEGER,IS_DISABLED INTEGER,ADDED_DATE TEXT)`, +}; + + + +const Q_STORE_IMAGES = { + SqlText: `CREATE TABLE IF NOT EXISTS ${AppTables.STORE_IMAGES} +(KEY_ID INTEGER PRIMARY KEY AUTOINCREMENT,STORE_ID INTEGER,VISIT_DATE NVARCHAR,IMAGE_TYPE_ID INTEGER,IMAGE_TYPE NVARCHAR,IMAGE NVARCHAR,LAT NVARCHAR,LNG NVARCHAR,ADDED_DATE TEXT)`, +}; + + + +const Q_SOS_HDR_DATA = { + SqlText: `CREATE TABLE IF NOT EXISTS ${AppTables.SOS_HDR_DATA} +(KEY_ID INTEGER PRIMARY KEY AUTOINCREMENT,SOS_HEADER_ID NVARCHAR,ADD_IMAGES INTEGER,STORE_ID INTEGER,VISIT_DATE NVARCHAR,SOS_DEFINITION_ID INTEGER,SOS_HDR_TABLE NVARCHAR,SOS_HDR_FIELD NVARCHAR,SOS_HDR_VALUE INTEGER,HEADER_NAME NVARCHAR,SOS_HDR_FACING INTEGER,ADDED_DATE TEXT)`, +}; +const Q_SOS_CHILD_DATA = { + SqlText: `CREATE TABLE IF NOT EXISTS ${AppTables.SOS_CHILD_DATA} +(KEY_ID INTEGER PRIMARY KEY AUTOINCREMENT,SOS_HEADER_ID NVARCHAR,STORE_ID INTEGER,VISIT_DATE NVARCHAR,SOS_DEFINITION_ID INTEGER,SOS_HDR_VALUE INTEGER,SOS_CHILD_TABLE NVARCHAR,SOS_CHILD_FIELD NVARCHAR,SOS_CHILD_VALUE INTEGER,CHILD_NAME NVARCHAR,TOTAL_FACING INTEGER,SELF_FACING INTEGER,ADDED_DATE TEXT)`, +}; + +const Q_SOS_CHILD_QUES_DATA = { + SqlText: `CREATE TABLE IF NOT EXISTS ${AppTables.SOS_CHILD_QUES_DATA} +(KEY_ID INTEGER PRIMARY KEY AUTOINCREMENT,SOS_HEADER_ID INTEGER,STORE_ID INTEGER,VISIT_DATE NVARCHAR,SOS_DEFINITION_ID INTEGER,SOS_CHILD_VALUE INTEGER, SOS_HDR_VALUE INTEGER,QUESTION_ID INTEGER,QUESTION_CODE INTEGER,QUESTION_TYPE NVARCHAR,ANSWER NVARCHAR,ANSWER_ID INTEGER,MULTI_OPTIONS_IDS NVARCHAR,IMAGE1 NVARCHAR,IMAGE_ALLOW1 INTEGER,MENU_ID INTEGER,IS_DISABLED INTEGER,ADDED_DATE TEXT)`, +}; + + +const Q_SOS_IMAGES = { + SqlText: `CREATE TABLE IF NOT EXISTS ${AppTables.SOS_IMAGES} +(KEY_ID INTEGER PRIMARY KEY AUTOINCREMENT,SOS_HEADER_ID NVARCHAR,ADD_IMAGES INTEGER,STORE_ID INTEGER,VISIT_DATE NVARCHAR,SOS_DEFINITION_ID INTEGER,SOS_HDR_VALUE INTEGER,SOS_CHILD_VALUE INTEGER,IMAGE1 NVARCHAR,TYPE NVARCHAR,ADDED_DATE TEXT,img1Required INTEGER)`, +}; +const Q_SOS_IR_IMAGES = { + SqlText: `CREATE TABLE IF NOT EXISTS ${AppTables.SOS_IR_IMAGES} +(KEY_ID INTEGER PRIMARY KEY AUTOINCREMENT,SOS_HEADER_ID NVARCHAR,STORE_ID INTEGER,VISIT_DATE NVARCHAR,SOS_DEFINITION_ID INTEGER,SOS_HDR_VALUE INTEGER,SOS_CHILD_VALUE INTEGER,IMAGE1 NVARCHAR,TYPE NVARCHAR,TEMP_SESSION_ID NVARCHAR,UN_SESSION_ID NVARCHAR,ADDED_DATE TEXT)`, +}; +const Q_SOS_IRUPLOAD = { + SqlText: `CREATE TABLE IF NOT EXISTS ${AppTables.SOS_IRUPLOAD} +(KEY_ID INTEGER PRIMARY KEY AUTOINCREMENT,SOS_HEADER_ID NVARCHAR,STORE_ID INTEGER,VISIT_DATE NVARCHAR,SOS_DEFINITION_ID INTEGER,SOS_HDR_VALUE INTEGER,SOS_CHILD_VALUE INTEGER,TEMP_SESSION_ID NVARCHAR,UN_SESSION_ID NVARCHAR,UPLOAD_STATUS NVARCHAR,SYNC_STATUS NVARCHAR,TYPE NVARCHAR,SESSION_STORECODE NVARCHAR,SESSION_TASKNAME NVARCHAR,SESSION_CATNAME NVARCHAR,SESSION_PHOTOTYPE NVARCHAR,ADDED_DATE TEXT)`, +}; + + + +const Q_EYE_LEVEL_HDR_DATA = { + SqlText: `CREATE TABLE IF NOT EXISTS ${AppTables.EYE_LEVEL_HDR_DATA} +(KEY_ID INTEGER PRIMARY KEY AUTOINCREMENT,SOS_HEADER_ID NVARCHAR,STORE_ID INTEGER,VISIT_DATE NVARCHAR,SOS_DEFINITION_ID INTEGER,SOS_HDR_TABLE NVARCHAR,SOS_HDR_FIELD NVARCHAR,SOS_HDR_VALUE INTEGER,HEADER_NAME NVARCHAR,EYE_LEVEL_HDR_FACING INTEGER,NONEYE_LEVEL_HDR_FACING INTEGER,ADDED_DATE TEXT)`, +}; +const Q_EYE_LEVEL_CHILD_DATA = { + SqlText: `CREATE TABLE IF NOT EXISTS ${AppTables.EYE_LEVEL_CHILD_DATA} +(KEY_ID INTEGER PRIMARY KEY AUTOINCREMENT,SOS_HEADER_ID NVARCHAR,STORE_ID INTEGER,VISIT_DATE NVARCHAR,SOS_DEFINITION_ID INTEGER,SOS_HDR_VALUE INTEGER,SOS_CHILD_TABLE NVARCHAR,SOS_CHILD_FIELD NVARCHAR,SOS_CHILD_VALUE INTEGER,CHILD_NAME NVARCHAR,TOTAL_EYE_FACING INTEGER,TOTAL_NONEYE_FACING INTEGER,SELF_NONEYE_FACING INTEGER,SELF_EYE_FACING INTEGER,ADDED_DATE TEXT)`, +}; +const Q_EYE_LEVEL_IMAGES = { + SqlText: `CREATE TABLE IF NOT EXISTS ${AppTables.EYE_LEVEL_IMAGES} +(KEY_ID INTEGER PRIMARY KEY AUTOINCREMENT,SOS_HEADER_ID NVARCHAR,STORE_ID INTEGER,VISIT_DATE NVARCHAR,SOS_DEFINITION_ID INTEGER,SOS_HDR_VALUE INTEGER,SOS_CHILD_VALUE INTEGER,IMAGE1 NVARCHAR,TYPE NVARCHAR,ADDED_DATE TEXT)`, +}; + +const Q_CATEXE_HDR_DATA = { + SqlText: `CREATE TABLE IF NOT EXISTS ${AppTables.CATEXE_HDR_DATA} +(KEY_ID INTEGER PRIMARY KEY AUTOINCREMENT,CAT_HEADER_ID INTEGER,STORE_ID INTEGER,VISIT_DATE NVARCHAR,CAT_DEFINITION_ID INTEGER,CAT_ID INTEGER,CAT_NAME NVARCHAR,IS_PRESENT INTEGER,CATE_NA_IMAGE NVARCHAR,REASON_ID INTEGER,REASON NVARCHAR,REMARK NVARCHAR,ADDED_DATE TEXT)`, +}; +const Q_CATEXE_CHILD_DATA = { + SqlText: `CREATE TABLE IF NOT EXISTS ${AppTables.CATEXE_CHILD_DATA} +(KEY_ID INTEGER PRIMARY KEY AUTOINCREMENT,CAT_HEADER_ID INTEGER,STORE_ID INTEGER,VISIT_DATE NVARCHAR,CAT_DEFINITION_ID INTEGER,CAT_ID INTEGER,QUESTION_ID INTEGER,QUESTION_CODE INTEGER,QUESTION_TYPE NVARCHAR,ANSWER NVARCHAR,ANSWER_ID INTEGER,MULTI_OPTIONS_IDS NVARCHAR,IMAGE1 NVARCHAR,IMAGE_ALLOW1 INTEGER,IS_DISABLED INTEGER,ADDED_DATE TEXT)`, +}; +const Q_CATEXE_IMAGES = { + SqlText: `CREATE TABLE IF NOT EXISTS ${AppTables.CATEXE_IMAGES} +(KEY_ID INTEGER PRIMARY KEY AUTOINCREMENT,CAT_HEADER_ID INTEGER,STORE_ID INTEGER,VISIT_DATE NVARCHAR,CAT_DEFINITION_ID INTEGER,CAT_ID INTEGER,IMAGE1 NVARCHAR,IMAGE2 NVARCHAR,ADDED_DATE TEXT)`, +}; +const Q_CATEXE_STOCK_DATA = { + SqlText: `CREATE TABLE IF NOT EXISTS ${AppTables.CATEXE_STOCK_DATA} +(KEY_ID INTEGER PRIMARY KEY AUTOINCREMENT,CAT_HEADER_ID INTEGER,STORE_ID INTEGER,VISIT_DATE NVARCHAR,CAT_DEFINITION_ID INTEGER,CAT_ID INTEGER,CAT_STOCK_DEFINITION_ID INTEGER,CAT_STOCK_TABLE NVARCHAR,CAT_STOCK_FIELD NVARCHAR,CAT_STOCK_VALUE INTEGER,CAT_STOCK_MBQ INTEGER,PRODUCT_NAME NVARCHAR,STOCK INTEGER,IS_CAT_PRESENT INTEGER,ADDED_DATE TEXT)`, +}; +const Q_STORE_PROFILE = { + SqlText: `CREATE TABLE IF NOT EXISTS ${AppTables.STORE_PROFILE} +(KEY_ID INTEGER PRIMARY KEY AUTOINCREMENT,STORE_ID INTEGER,STORE_NAME NVARCHAR,ADDRESS NVARCHAR,GSTNO INTEGER,CONTACT_PERSON TEXT,PHONE INTEGER,MOBILE INTEGER,LOCATION NVARCHAR,PINCODE INTEGER, EMAIL NVARCHAR,VISIT_DATE NVARCHAR,ADDED_DATE TEXT )`, +}; + +const Q_DB_WINDOW_HDR = { + SqlText: `CREATE TABLE IF NOT EXISTS ${AppTables.DB_WINDOW_HDR_DATA} +(KEY_ID INTEGER PRIMARY KEY AUTOINCREMENT,WINDOW_HEADER_ID INTEGER,DISTRIBUTOR_ID INTEGER,VISIT_DATE NVARCHAR,WINDOW_DEFINITION_ID INTEGER,WINDOW_ID INTEGER,WINDOW_NAME NVARCHAR,WINDOW_TABLE NVARCHAR,WINDOW_FIELD NVARCHAR,WINDOW_VALUE INTEGER,CHILD_NAME NVARCHAR,IS_PRESENT INTEGER,WINDOW_IMAGE NVARCHAR,STOCK_QTY INTEGER,ADDED_DATE TEXT)`, +}; + +const Q_DB_VISICOOLER = { + SqlText: `CREATE TABLE IF NOT EXISTS ${AppTables.DB_VISICOOLER} +(KEY_ID INTEGER PRIMARY KEY AUTOINCREMENT,DISTRIBUTOR_ID INTEGER,VISIT_DATE NVARCHAR,QRCODE NVARCHAR,ASSETCODE NVARCHAR ,IMAGE NVARCHAR,ADDED_DATE TEXT)`, +}; + +const Q_DBPOSM_HDR = { + SqlText: `CREATE TABLE IF NOT EXISTS ${AppTables.DBPOSM_HDR_DATA} +(KEY_ID INTEGER PRIMARY KEY AUTOINCREMENT,POSM_HEADER_ID INTEGER,DISTRIBUTOR_ID INTEGER,VISIT_DATE NVARCHAR,POSM_DEFINITION_ID INTEGER,POSM_ID INTEGER,POSM_NAME NVARCHAR,POSM_TYPE_ID INTEGER,POSM_TYPE_NAME NVARCHAR,POSM_TABLE NVARCHAR,POSM_FIELD NVARCHAR,POSM_VALUE INTEGER,CHILD_NAME NVARCHAR,IS_PRESENT INTEGER,POSM_IMAGE NVARCHAR,STOCK_QTY INTEGER,ADDED_DATE TEXT)`, +}; + + +// SAMPLING_CUST_TRACK +const Q_SAMPLING_INVENTORY = { + SqlText: `CREATE TABLE IF NOT EXISTS ${AppTables.SAMPLING_INVENTORY} +(KEY_ID INTEGER PRIMARY KEY AUTOINCREMENT,STORE_ID INTEGER,VISIT_DATE NVARCHAR,SAMPLING_DEFINITION_ID INTEGER,CATEGORY_ID INTEGER,QUESTION NVARCHAR,QUESTION_ID INTEGER,QUESTION_TYPE NVARCHAR,ANSWER NVARCHAR,ANSWER_ID INTEGER,IMAGE_ALLOW1 INTEGER,IMAGE1 NVARCHAR,IMAGE_ALLOW2 INTEGER,IMAGE2 NVARCHAR,MULTI_OPTIONS_IDS NVARCHAR,IS_DISABLED INTEGER,MENU_ID INTEGER,ADDED_DATE TEXT)`, +}; +const Q_SAMPLING_CUST_TRACK = { + SqlText: `CREATE TABLE IF NOT EXISTS ${AppTables.SAMPLING_CUST_TRACK} +(KEY_ID INTEGER PRIMARY KEY AUTOINCREMENT,STORE_ID INTEGER,VISIT_DATE NVARCHAR,SAMPLING_DEFINITION_ID INTEGER,CATEGORY_ID INTEGER,QUESTION NVARCHAR,QUESTION_ID INTEGER,QUESTION_TYPE NVARCHAR,ANSWER NVARCHAR,ANSWER_ID INTEGER,IMAGE_ALLOW1 INTEGER,IMAGE1 NVARCHAR,IMAGE_ALLOW2 INTEGER,IMAGE2 NVARCHAR,MULTI_OPTIONS_IDS NVARCHAR,IS_DISABLED INTEGER,MENU_ID INTEGER,CUSTID NVARCHAR,IDX_DLT INTEGER,ADDED_DATE TEXT)`, +}; +const Q_SAMPLING_STOCK_DATA = { + SqlText: `CREATE TABLE IF NOT EXISTS ${AppTables.SAMPLING_STOCK_DATA} +(KEY_ID INTEGER PRIMARY KEY AUTOINCREMENT,STORE_ID INTEGER,VISIT_DATE NVARCHAR, SAMPLING_STOCK_DEFINITION_ID INTEGER, SAMPLING_DEFINITION_ID INTEGER, SAMPLING_STOCK_TABLE NVARCHAR, SAMPLING_STOCK_FIELD NVARCHAR, SAMPLING_STOCK_VALUE INTEGER, SAMPLING_STOCK_MBQ INTEGER, PRODUCT_NAME NVARCHAR, STOCK INTEGER, ADDED_DATE TEXT)`, +}; +const Q_SAMPLING_SALE_DATA = { + SqlText: `CREATE TABLE IF NOT EXISTS ${AppTables.SAMPLING_SALE_DATA} +(KEY_ID INTEGER PRIMARY KEY AUTOINCREMENT,STORE_ID INTEGER,VISIT_DATE NVARCHAR, SAMPLING_STOCK_DEFINITION_ID INTEGER, SAMPLING_DEFINITION_ID INTEGER, SAMPLING_STOCK_TABLE NVARCHAR, SAMPLING_STOCK_FIELD NVARCHAR, SAMPLING_STOCK_VALUE INTEGER, SAMPLING_STOCK_MBQ INTEGER, PRODUCT_NAME NVARCHAR, SALE INTEGER, ADDED_DATE TEXT)`, +}; +const Q_SAMPLING_LIST = { + SqlText: `CREATE TABLE IF NOT EXISTS ${AppTables.SAMPLING_LIST} +(KEY_ID INTEGER PRIMARY KEY AUTOINCREMENT,STORE_ID INTEGER,VISIT_DATE NVARCHAR,SAMPLING_PRESENT NVARCHAR, KIOSKSETUP NVARCHAR,SAMPLING_DEFINITION_ID INTEGER,START_IMAGE1 NVARCHAR,START_IMAGE2 NVARCHAR,END_IMAGE1 NVARCHAR,END_IMAGE2 NVARCHAR,START_IMG_TIME NVARCHAR,END_IMG_TIME NVARCHAR,START_LUNCH NVARCHAR,END_LUNCH NVARCHAR, ISFILLED NVARCHAR,ADDED_DATE TEXT,REASONID INTEGER,REASON NVARCHAR)`, +}; + + +const Q_ORDER_STATUS = {SqlText:`CREATE TABLE IF NOT EXISTS ${AppTables.ORDERSTATUS} +(KEY_ID INTEGER PRIMARY KEY AUTOINCREMENT,STORE_ID INTEGER,VISIT_DATE NVARCHAR,ORDER_ID INTEGER,ORDER_QTY INTEGER,PRODUCTNAME NVARCHAR,IMAGES NVARCHAR,PRODUCT_ID INTEGER,ISPRESENT INTEGER,ADDED_DATE TEXT,INVOICE_TYPE NVARCHAR,MID INTEGER)`,}; + +const Q_VISITOR_FEEDBACK = { + SqlText: `CREATE TABLE IF NOT EXISTS ${AppTables.VISITOR_FEEDBACK} +(KEY_ID INTEGER PRIMARY KEY AUTOINCREMENT,VISIT_DATE NVARCHAR,NAME NVARCHAR,DESIGNATION NVARCHAR,IMAGE NVARCHAR,UPLOADSTATUS VARCHAR,CATEGORY_ID INTEGER,QUESTION NVARCHAR,QUESTION_ID INTEGER,QUESTION_TYPE NVARCHAR,ANSWER NVARCHAR,ANSWER_ID INTEGER,IMAGE_ALLOW1 INTEGER,IMAGE1 NVARCHAR,IMAGE_ALLOW2 INTEGER,IMAGE2 NVARCHAR,MULTI_OPTIONS_IDS NVARCHAR,IS_DISABLED INTEGER,ADDED_DATE TEXT)`, +}; + +const Q_VISITOR_LOGIN_FEEDBACK = { + SqlText: `CREATE TABLE IF NOT EXISTS ${AppTables.VISITOR_LOGIN_FEEDBACK} +(KEY_ID INTEGER PRIMARY KEY AUTOINCREMENT,VISIT_DATE NVARCHAR,EMP_CODE NVARCHAR,NAME NVARCHAR,DESIGNATION NVARCHAR,IMAGE NVARCHAR,UPLOADSTATUS VARCHAR,CATEGORY_ID INTEGER,QUESTION NVARCHAR,QUESTION_ID INTEGER,QUESTION_TYPE NVARCHAR,ANSWER NVARCHAR,ANSWER_ID INTEGER,IMAGE_ALLOW1 INTEGER,IMAGE1 NVARCHAR,IMAGE_ALLOW2 INTEGER,IMAGE2 NVARCHAR,MULTI_OPTIONS_IDS NVARCHAR,IS_DISABLED INTEGER,ADDED_DATE TEXT)`, +}; + +const Q_VISICO_HDR_DATA = { + SqlText: `CREATE TABLE IF NOT EXISTS ${AppTables.VISICO_HDR_DATA} +(KEY_ID INTEGER PRIMARY KEY AUTOINCREMENT,VISICO_HEADER_ID INTEGER,MENU_ID INTEGER,STORE_ID INTEGER,VISIT_DATE NVARCHAR,TARGETID INTEGER,TARGETTYPEID INTEGER,TARGETTYPENAME NVARCHAR,CHILD_NAME NVARCHAR,IS_PRESENT INTEGER,IS_UPDATED INTEGER,ADDED_DATE TEXT)`, +}; +const Q_VISICO_CHILD_DATA = { + SqlText: `CREATE TABLE IF NOT EXISTS ${AppTables.VISICO_CHILD_DATA} +(KEY_ID INTEGER PRIMARY KEY AUTOINCREMENT,VISICO_HEADER_ID INTEGER,STORE_ID INTEGER,MENU_ID INTEGER,VISIT_DATE NVARCHAR,TARGETTYPEID INTEGER,TQQUESTIONID INTEGER,TQQUESTIONID_CODE INTEGER,QUESTION_TYPE NVARCHAR,ANSWER NVARCHAR,ANSWER_ID INTEGER,MULTI_OPTIONS_IDS NVARCHAR,IMAGE1 NVARCHAR,IMAGE_ALLOW1 INTEGER,IMAGE2 NVARCHAR,IMAGE_ALLOW2 INTEGER, TQA_QUESTION_DISABLE INTEGER,ADDED_DATE TEXT)`, +}; +///arman +const Q_QRCODE_SCANNER = { + SqlText: `CREATE TABLE IF NOT EXISTS ${AppTables.QRCODE_SCANNER} +(KEY_ID INTEGER PRIMARY KEY AUTOINCREMENT,QRCODE_ID INTEGER,STORE_ID INTEGER,VISIT_DATE NVARCHAR,UNIQUE_QRCODE NVARCHAR,PRODUCT_NAME NVARCHAR,PRODUCT_ID INTEGER,ADDED_DATE TEXT)`, +}; + +const Q_QRCODE_SALE = { + SqlText: `CREATE TABLE IF NOT EXISTS ${AppTables.QRCODE_SALE} +(KEY_ID INTEGER PRIMARY KEY AUTOINCREMENT,QRCODE_ID INTEGER,STORE_ID INTEGER,VISIT_DATE NVARCHAR,UNIQUE_QRCODE NVARCHAR,PRODUCT_NAME NVARCHAR,PRODUCT_ID INTEGER,ADDED_DATE TEXT)`, +}; + +const Q_KYC_INFO = { + SqlText: `CREATE TABLE IF NOT EXISTS ${AppTables.KYC_INFO} +(KEY_ID INTEGER PRIMARY KEY AUTOINCREMENT,STORE_ID INTEGER,VISIT_DATE NVARCHAR,KYC_DATA TEXT)`, +}; + +const Q_STORE_KYC_INFO = { + SqlText: `CREATE TABLE IF NOT EXISTS ${AppTables.STORE_KYC_INFO} +(KEY_ID INTEGER PRIMARY KEY AUTOINCREMENT,STORE_ID INTEGER,VISIT_DATE NVARCHAR,KYC_DATA TEXT)`, +}; + +const Q_STORE_PROFILE_KYC = { + SqlText: `CREATE TABLE IF NOT EXISTS ${AppTables.STORE_PROFILE_KYC} +(KEY_ID INTEGER PRIMARY KEY AUTOINCREMENT,STORE_ID INTEGER,STORE_NAME NVARCHAR,ADDRESS NVARCHAR,GSTNO INTEGER,IMAGE NVARCHAR,CONTACT_PERSON TEXT,PHONE INTEGER,MOBILE INTEGER,LOCATION NVARCHAR,PINCODE INTEGER, EMAIL NVARCHAR,VISIT_DATE NVARCHAR,ADDED_DATE TEXT )`, +}; + +//WINDOW_ID is ChildId and WINDOW_NAME as ChildName +const Q_POSSALE_HDR_DATA = { + SqlText: `CREATE TABLE IF NOT EXISTS ${AppTables.HEADER_POSSALE_DATA} +(KEY_ID INTEGER PRIMARY KEY AUTOINCREMENT,STORE_ID INTEGER,VISIT_DATE NVARCHAR,MONTH NVARCHAR,YEAR INTEGER,IMAGE1 NVARCHAR,IMAGE2 NVARCHAR,TOTAL_POS_VALUE NVARCHAR,ADDED_DATE TEXT)`, +}; +const Q_POSSALE_IMAGES = { + SqlText: `CREATE TABLE IF NOT EXISTS ${AppTables.POSSALE_IMAGES} +(KEY_ID INTEGER PRIMARY KEY AUTOINCREMENT,STORE_ID INTEGER,VISIT_DATE NVARCHAR,POSDEFINITIONID INTEGER,IMAGE1 NVARCHAR,ADDED_DATE TEXT)`, +}; +const Q_POSSALE_DATA = { + SqlText: `CREATE TABLE IF NOT EXISTS ${AppTables.POSSALE_DATA} +(KEY_ID INTEGER PRIMARY KEY AUTOINCREMENT,STORE_ID INTEGER,VISIT_DATE NVARCHAR,WINDOW_ID INTEGER,WINDOW_NAME NVARCHAR,POSDEFINITIONID INTEGER,POS_VALUE INTEGER,POS_VOLUME INTEGER,ISPRESENT NVARCHAR,REASONID INTEGER,REASON NVARCHAR, ADDED_DATE TEXT)`, +}; + +const Q_CONTRACT_FORM = { + SqlText: `CREATE TABLE IF NOT EXISTS ${AppTables.CONTRACT_FORM} +(KEY_ID INTEGER PRIMARY KEY AUTOINCREMENT,STORE_ID INTEGER,VISIT_DATE NVARCHAR,PROGRAM_DEFINITION_ID INTEGER,PROGRAM_ID INTEGER,IS_CONTRACT_SIGNED INTEGER,REASON_ID INTEGER,REASON INTEGER,ADDED_DATE TEXT)`, +}; +const Q_CONTRACT_FORM_DATA = { + SqlText: `CREATE TABLE IF NOT EXISTS ${AppTables.CONTRACT_FORM_DATA} +(KEY_ID INTEGER PRIMARY KEY AUTOINCREMENT,STORE_ID INTEGER,VISIT_DATE NVARCHAR,PROGRAM_DEFINITION_ID INTEGER,PROGRAM_ID INTEGER,CATEGORY_ID INTEGER,QUESTION NVARCHAR,QUESTION_ID INTEGER,QUESTION_TYPE NVARCHAR,ANSWER NVARCHAR,ANSWER_ID INTEGER,IMAGE_ALLOW1 INTEGER,IMAGE1 NVARCHAR,IMAGE_ALLOW2 INTEGER,IMAGE2 NVARCHAR,MULTI_OPTIONS_IDS NVARCHAR,IS_DISABLED INTEGER,ADDED_DATE TEXT)`, +}; + +const Q_BREAKTIME = { + SqlText: `CREATE TABLE IF NOT EXISTS ${AppTables.BREAKTIME} +(KEY_ID INTEGER PRIMARY KEY AUTOINCREMENT,STORE_ID INTEGER, UNIQUEBREAKID NVARCHAR,VISIT_DATE NVARCHAR,BREAKNAME NVARCHAR,BREAKID INTEGER,STARTTIME NVARCHAR,ENDTIME VARCHAR,MAXNUMBER INTEGER,MINNUMBER INTEGER,ADDED_DATE TEXT)`, +}; + +const Q_STORE_INFO = { + SqlText: `CREATE TABLE IF NOT EXISTS ${AppTables.STORE_INFO} +(KEY_ID INTEGER PRIMARY KEY AUTOINCREMENT,DISTRIBUTOR_ID INTEGER, STORE_NAME NVARCHAR, STORE_ADDRESS NVARCHAR, STORECITY_ID INTEGER ,STORETYPE_ID INTEGER, LATITUDE REAL , LONGITUDE REAL , STORE_FRONT_IMAGE TEXT)`, +}; +const Q_RETURN_STOCK = {SqlText:`CREATE TABLE IF NOT EXISTS ${AppTables.RETURN_STOCK} +(KEY_ID INTEGER PRIMARY KEY AUTOINCREMENT,STORE_ID INTEGER,VISIT_DATE NVARCHAR,PRESENT INTEGER,JSON_DATA NVARCHAR,IS_UPDATED INTEGER,ADDED_DATE TEXT)`,}; + +const Q_ORDER_SIMPLIFY = {SqlText:`CREATE TABLE IF NOT EXISTS ${AppTables.ORDER_SIMPLIFY} +(KEY_ID INTEGER PRIMARY KEY AUTOINCREMENT,STORE_ID INTEGER,VISIT_DATE NVARCHAR,PRESENT INTEGER,REASON_ID INTEGER,REASON NVARCHAR,JSON_DATA NVARCHAR,IS_UPDATED INTEGER,ADDED_DATE TEXT)`,}; + + + +const Table_Structure = [Q_ORDER_SIMPLIFY,Q_RETURN_STOCK,Q_HEADER_BACK_OF_STORE,Q_OFFLINE_ORDER, Q_CHILD_BACK_OF_STORE, Q_SALES, Q_INSERT_OPENINGHEADER_DATA, Q_STOCK_DATA, Q_SHARE_OF_SHELF_IMAGE, Q_SHARE_OF_SHELF_FACING_DATA, Q_GEOTAG_TABLE, + Q_INSERT_SAMPLED_DATA, Q_CONTACT_CONVERSION, Q_INSERT_ERROR_TRACKING, Q_GROOMING_IMAGE_DATA, Q_ADDITIONAL_VISIBILITY,Q_ADDITIONAL_VISIBILITY_STOCK, Q_COMPETITION_VISIBILITY, Q_COMPETITION_PROMOTION, Q_COVERAGE_DATA, Q_CHECKIN_DATA, + Q_PROMOTION_HEADER_DATA, Q_PROMOTION_DATA, Q_PAID_VISIBILITY_HEADER_DATA, Q_PAID_VISIBILITY_CHILD_DATA, Q_PAID_VIS_CHECKLIST, Q_PERSONAL_DOCUMENT, Q_VISITOR_LOGIN, Q_AUTOMATED_REIMBURSEMENT, Q_WARE_HOUSE_INWARD, Q_SOS_CHILD_QUES_DATA, + Q_CASHTILL_SURVEY, Q_SURVEY, Q_WINDOW_HDR, Q_WINDOW_CHILD, Q_WINDOW_IMAGES, Q_WINDOW_STOCK, Q_STOCK2HDR_DATA, Q_STOCK2_DATA, Q_STOCK2_MFD_DATA, Q_STOCKPROMO_HDR_TOP, Q_STOCKPOMO_HDR_DATA, Q_STOCKPROMO_DATA, Q_POSM_HDR, Q_POSM_CHILD, Q_FEEDBACK, Q_SIMPLE_PROMOHDR_DATA, Q_SIMPLE_PROMOTION_DATA, Q_STORE_IMAGES, + Q_ST_HDR, Q_ST_CHILD, Q_ST_IMAGES, Q_ST_STOCK, Q_STOCKWITHCAT_HDR_DATA, Q_STOCKWITHCAT_DATA, Q_STOCKWITHCAT_MFD_DATA, Q_PROMO_HDR_DATA, Q_PROMO_CHILD_DATA, Q_PROMO_IMAGES, Q_PROMO_STOCK_DATA, Q_PROMO_IR_IMAGES, Q_PROMO_IRUPLOAD, Q_PAIDVIS_HDR_DATA, Q_WAREHOUSE_HDR_DATA, Q_WAREHOUSE_CAMPAIGN_HEADER_DATA, Q_PAIDVIS_CHILD_DATA, Q_WAREHOUSE_CHILD_DATA, Q_PAIDVIS_IMAGES, Q_WAREHOUSE_IMAGES, Q_WAREHOUSE_CAMPAIGN_IMAGES, Q_PAIDVIS_STOCK_DATA, Q_SOS_HDR_DATA, Q_SOS_IMAGES, Q_SOS_CHILD_DATA, + Q_CATEXE_HDR_DATA, Q_CATEXE_CHILD_DATA, Q_CATEXE_IMAGES, Q_CATEXE_STOCK_DATA, Q_ORDER, Q_STORE_CHECKLIST, Q_BEAT_PLAN, Q_DISTRIBUTOR_CHECKIN, Q_STORE_PROFILE, Q_DBPOSM_HDR, Q_DB_WINDOW_HDR, Q_DB_VISICOOLER, Q_DB_GEOTAG_TABLE, Q_ORDER_STATUS, Q_VISITOR_FEEDBACK, Q_SAMPLING_INVENTORY, Q_SAMPLING_SALE_DATA, Q_SAMPLING_STOCK_DATA, Q_SAMPLING_LIST, Q_SAMPLING_CUST_TRACK, Q_WAREHOUSE_CAMPAIGN_CHILD_DATA, + Q_POSSALE_HDR_DATA, Q_POSSALE_IMAGES, Q_POSSALE_DATA, Q_SOS_IR_IMAGES, Q_SOS_IRUPLOAD, Q_PAIDVIS_IR_IMAGES, Q_PAIDVIS_IRUPLOAD, Q_ADDVIS_IR_IMAGES, Q_ADDVIS_IRUPLOAD, Q_COMPVIS_IR_IMAGES, Q_COMPVIS_IRUPLOAD, Q_WINDOW_IR_IMAGES, Q_WINDOW_IRUPLOAD, Q_PROGRAM_HDR_DATA, Q_PROGRAM_CHILD_DATA, Q_PROGRAM_IMAGES, Q_PROGRAM_STOCK_DATA, Q_VISICO_HDR_DATA, Q_VISICO_CHILD_DATA, Q_CONTRACT_FORM, Q_CONTRACT_FORM_DATA, + Q_MISSED_CALL, Q_EYE_LEVEL_HDR_DATA, Q_EYE_LEVEL_CHILD_DATA, Q_EYE_LEVEL_IMAGES, Q_BREAKTIME, Q_VISITOR_LOGIN_FEEDBACK, Q_STORE_INFO, Q_ADD_STORE_INFO, Q_HOME_LOCATION, Q_QRCODE_SCANNER, Q_QRCODE_SALE, Q_KYC_INFO, Q_STORE_KYC_INFO, Q_STORE_PROFILE_KYC +]; + +export { Table_Structure } \ No newline at end of file diff --git a/PerformicsSrc/src/constants/uploadData.js b/PerformicsSrc/src/constants/uploadData.js new file mode 100644 index 0000000..ed18054 --- /dev/null +++ b/PerformicsSrc/src/constants/uploadData.js @@ -0,0 +1,7407 @@ + +import moment from 'moment'; +import React from 'react'; +import { UploadData2, UploadData, UploadFormData, UpdateStoreStatus, bytesToSize, UpdateDistributorStatus, getAllFolderImages, getKPIFields } from '../controller/functions'; +import { common_ImagePath, ImageFolderPath, visiCoolerImgPath, db, URL_IMAGE, IRSyncStatus } from './constants'; +import { getMethodName, METHODS } from './methodNames'; +import { AppTables } from './tableConstants'; +import * as RNFS from 'react-native-fs'; +import { Platform } from 'react-native'; +import * as mime from 'mime'; +import IRLogin from '../components/IRLogin'; + +export async function getUploadData(storeData, KpiData, UserId, previousDayUpload = false) { + let d1 = new Date(); + let d2 = moment(d1).format('MM/DD/YYYY'); + let { StoreId, StateId, EmpId, MID, UploadStatus, Status, VisitDate, ChainId, StoreTypeId, StoreClassId, StoreCategoryId } = storeData; + let { ScreenName, MenuId, UploadKeyName } = KpiData + + switch (ScreenName) { + case 'STOCK': { + let CHUNK_SIZE = await getChunk_dataStk(); + if (CHUNK_SIZE != null && CHUNK_SIZE > 0) { + var postData = await getStockDataChunks(storeData, UserId, previousDayUpload, CHUNK_SIZE); + return postData; + } else { + // Stocks2 + var postData = {}; + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + let q2 = ` SELECT * FROM ${AppTables.STOCK2HDR_DATA} WHERE STORE_ID='${StoreId}' ` + (!previousDayUpload ? ` and VISIT_DATE='${d2}'` : '') + ` `; + let allImages = [], allChilds = []; + let allKPIfiles = []; + await txn.executeSql(q2, [], async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + + if (data.IMAGE != null && data.IMAGE != '') { + let imgsData = {}; + + imgsData['MID'] = MID; + imgsData['UserId'] = UserId; + imgsData['SubCategoryId'] = data.SUB_CATEGORY_ID; + imgsData['SubCategoryImg'] = data.IMAGE != null ? data.IMAGE : ''; + + allImages.push(imgsData); + + let imgPath = common_ImagePath + data.IMAGE; + let file = { + uri: imgPath, + type: 'image/jpeg', + name: data.IMAGE, + filetype: 'image', + folderName: 'StockSingleKPIImages', + } + allKPIfiles.push(file); + } + } + async function getMFDStockData(skud) { + let { SUB_CATEGORY_ID, BRAND_ID, PRODUCT_ID } = skud; + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + let q = `select * from ${AppTables.STOCK2_MFD_DATA} where STOCK_UID='${skud.STOCK_UID}'`; + await txn.executeSql(q, [], async function (txn2, txnres) { + if (txnres.rows.length > 0) { + let arr1 = []; + for (var i = 0; i < txnres.rows.length; i++) { + let data = txnres.rows.item(i); + let { STOCK } = data; + let date = data.MFD != null && data.MFD != '' ? moment(data.MFD).format('MM/DD/YYYY') : ''; + let obj1 = {}; + obj1['MID'] = MID, + obj1['SubCategoryId'] = SUB_CATEGORY_ID; + obj1['BrandId'] = BRAND_ID; + obj1['ProductId'] = PRODUCT_ID; + obj1['Mfd'] = date, + obj1['LotNo'] = data.LOT_NO, + obj1['Stock'] = STOCK != '' && STOCK != null && STOCK != "null" && STOCK != "undefined" ? STOCK : 0; + + arr1.push(obj1); + if (i == txnres.rows.length - 1) { + resolve(arr1) + } + } + } + else { + resolve([]) + } + }, function (txnE, txnerr) { console.log(txnerr); resolve([]) },); + }); + }).catch((err) => { + console.log(err); + return []; + }) + } + + let join = ` inner join Mapping_ProductAssortmentStorewise m on p.PRODUCT_ID=m.ProductId and m.StoreId='${StoreId}'`; + let q = `SELECT Distinct p.*,m.MBQ FROM ${AppTables.STOCK2_DATA} p ${join} WHERE p.STORE_ID='${StoreId}' ` + (!previousDayUpload ? ` and p.VISIT_DATE='${d2}' ` : '') + ` `; + await txn.executeSql(q, [], async function (txn2, txnres3) { + for (var i = 0; i < txnres3.rows.length; i++) { + let data2 = txnres3.rows.item(i); + let { ARTICLE_CODE, COMMON_ID, STORE_ID, VISIT_DATE, PriceYesNo, SUB_CATEGORY_ID, SUB_CATEGORY, BRAND_ID, BRAND, PRODUCT_ID, MSL, STOCK, PACKTYPE, BACKROOM_STOCK, DAMAGED_STOCK, LOST_STOCK, EXPIRY_STOCK, IS_SKU_STOCK_PRESENT, NREXPIRY1_STOCK, NREXPIRY2_STOCK, NREXPIRY3_STOCK, OUT_OF_STOCK, LESS_THAN_MBQ, ADDED_DATE, MBQ } = data2; + let mfdStocks = await getMFDStockData(data2); + let obj = {}; + obj['MID'] = MID; + obj['UserId'] = UserId; + obj['Msl'] = (MSL == 'true' || MSL == true) ? 1 : 0; + obj['ArticleCode'] = ARTICLE_CODE || ""; + obj['SubCategoryId'] = SUB_CATEGORY_ID; + obj['ProductId'] = PRODUCT_ID; + obj['Stock'] = STOCK != null && STOCK != "" && STOCK != "null" && STOCK != "undefined" ? STOCK : 0; + obj['PackType'] = PACKTYPE != null && PACKTYPE != "" && PACKTYPE != "null" && PACKTYPE != "undefined" ? PACKTYPE : ''; + obj['BackRoomStock'] = BACKROOM_STOCK != null && BACKROOM_STOCK != "" && BACKROOM_STOCK != "null" && BACKROOM_STOCK != "undefined" ? BACKROOM_STOCK : 0; + obj['DamagedStock'] = DAMAGED_STOCK != null && DAMAGED_STOCK != "" && DAMAGED_STOCK != "null" && DAMAGED_STOCK != "undefined" ? DAMAGED_STOCK : 0; + obj['LostStock'] = LOST_STOCK != null && LOST_STOCK != "" && LOST_STOCK != "null" && LOST_STOCK != "undefined" ? LOST_STOCK : 0; + obj['ExpiryStock'] = EXPIRY_STOCK != null && EXPIRY_STOCK != "" && EXPIRY_STOCK != "null" && EXPIRY_STOCK != "undefined" ? EXPIRY_STOCK : 0; + obj['MFD_Stocks'] = mfdStocks || []; + obj['IsSKUPresent'] = IS_SKU_STOCK_PRESENT; + obj['NrExpiry1_Stock'] = NREXPIRY1_STOCK != null && NREXPIRY1_STOCK != "" && NREXPIRY1_STOCK != "null" && NREXPIRY1_STOCK != "undefined" ? NREXPIRY1_STOCK : 0; + obj['NrExpiry2_Stock'] = NREXPIRY2_STOCK != null && NREXPIRY2_STOCK != "" && NREXPIRY2_STOCK != "null" && NREXPIRY2_STOCK != "undefined" ? NREXPIRY2_STOCK : 0; + obj['NrExpiry3_Stock'] = NREXPIRY3_STOCK != null && NREXPIRY3_STOCK != "" && NREXPIRY3_STOCK != "null" && NREXPIRY3_STOCK != "undefined" ? NREXPIRY3_STOCK : 0; + obj['OutOfStock'] = OUT_OF_STOCK != null && OUT_OF_STOCK != "" && OUT_OF_STOCK != "null" && OUT_OF_STOCK != "undefined" ? OUT_OF_STOCK : 0; + obj['LessThanMBQ'] = LESS_THAN_MBQ != null && LESS_THAN_MBQ != "" && LESS_THAN_MBQ != "null" && LESS_THAN_MBQ != "undefined" ? LESS_THAN_MBQ : 0; + obj['MBQ'] = MBQ; + obj['PriceYesNo'] = PriceYesNo + allChilds.push(obj); + } + + let alljsonData = {}; + alljsonData['StockImgs'] = allImages; + alljsonData['StockChilds'] = allChilds; + postData['MID'] = MID; + postData['Keys'] = 'StockSingleKPI'; + postData['JsonData'] = JSON.stringify(alljsonData); + postData['UserId'] = UserId; + resolve({ 'Files': allKPIfiles, 'PostData': postData }); + console.log('stock2 postData', postData); + + }, function (txnE, txnerr) { console.log(txnerr); resolve({ 'PostData': postData }); },); + + } + else { + resolve({ 'PostData': postData }); + } + }, function (txnE, txnerr) { console.log(txnerr); resolve({ 'PostData': postData }); },); + }); + }).then((val) => { + return val; + }).catch((err) => { + console.log(err); + return postData; + }) + } + } + + case 'STOCKWITHPROMO': + { + var postData = {}; + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + let q2 = ` SELECT * FROM ${AppTables.STOCKPOMO_HDR_DATA} WHERE STORE_ID='${StoreId}' ` + (!previousDayUpload ? ` and VISIT_DATE='${d2}'` : '') + ` `; + let allImages = [], allChilds = []; + let allKPIfiles = []; + await txn.executeSql(q2, [], async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + + if (data.IMAGE_JSON != null && data.IMAGE_JSON != '') { + let imageJson = data?.IMAGE_JSON; + let images = JSON.parse(imageJson); + // let IMAGE = images; + console.log("imgjsoon---", images) + + + let IMAGE = images.map(image => { + delete image.imgRequired; + delete image.ImageName; + delete image.ImagePath; + return image; + }); + + console.log("finalimages---", IMAGE) + + let imgsData = {}; + + imgsData['MID'] = MID; + imgsData['UserId'] = UserId; + imgsData['SubCategoryId'] = data.SUB_CATEGORY_ID; + imgsData['HeaderImg'] = IMAGE != null ? IMAGE : ''; + + allImages.push(imgsData); + let imgPath = common_ImagePath + IMAGE; + let file = { + uri: imgPath, + type: 'image/jpeg', + name: IMAGE, + filetype: 'image', + folderName: 'StockSingleKPIImages', + } + allKPIfiles.push(file); + } + + + + } + + async function getMFDStockData(skud) { + let { SUB_CATEGORY_ID, BRAND_ID, PRODUCT_ID } = skud; + + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + let q = `select * from ${AppTables.STOCK2_MFD_DATA} where STOCK_UID='${skud.STOCK_UID}'`; + await txn.executeSql(q, [], async function (txn2, txnres) { + if (txnres.rows.length > 0) { + let arr1 = []; + for (var i = 0; i < txnres.rows.length; i++) { + let data = txnres.rows.item(i); + let { STOCK } = data; + let date = data.MFD != null && data.MFD != '' ? moment(data.MFD).format('MM/DD/YYYY') : ''; + let obj1 = {}; + obj1['MID'] = MID, + obj1['SubCategoryId'] = SUB_CATEGORY_ID; + obj1['BrandId'] = BRAND_ID; + obj1['ProductId'] = PRODUCT_ID; + obj1['Mfd'] = date, + obj1['LotNo'] = data.LOT_NO, + obj1['Stock'] = STOCK != '' && STOCK != null && STOCK != "null" && STOCK != "undefined" ? STOCK : 0; + + arr1.push(obj1); + if (i == txnres.rows.length - 1) { + resolve(arr1) + } + } + } + else { + resolve([]) + } + }, function (txnE, txnerr) { console.log(txnerr); resolve([]) },); + }); + }).catch((err) => { + console.log(err); + return []; + }) + } + + let join = ` inner join Mapping_ProductAssortmentStorewise m on p.PRODUCT_ID=m.ProductId and m.StoreId='${StoreId}'`; + let q = `SELECT Distinct p.*,m.MBQ FROM ${AppTables.STOCKPROMO_DATA} p ${join} WHERE p.STORE_ID='${StoreId}' ` + (!previousDayUpload ? ` and p.VISIT_DATE='${d2}' ` : '') + ` `; + + await txn.executeSql(q, [], async function (txn2, txnres3) { + for (var i = 0; i < txnres3.rows.length; i++) { + let data2 = txnres3.rows.item(i); + + let { COMMON_ID, STORE_ID, VISIT_DATE, SUB_CATEGORY_ID, SUB_CATEGORY, BRAND_ID, BRAND, PRODUCT_ID, PRODUCT, MSL, STOCK, BACKROOM_STOCK, DAMAGED_STOCK, MRP, SELLING_PRICE, REMARK, LOST_STOCK, EXPIRY_STOCK, IS_SKU_STOCK_PRESENT, NREXPIRY1_STOCK, NREXPIRY2_STOCK, NREXPIRY3_STOCK, OUT_OF_STOCK, LESS_THAN_MBQ, ADDED_DATE, MBQ, STOCK_AVL_STATUS, PROMO_TYPE, PROMO_RUNNING, FROM_DATE, TO_DATE, IMAGE_JSON } = data2; + let mfdStocks = await getMFDStockData(data2); + let childImageJson + try { + childImageJson = JSON.parse(IMAGE_JSON); + } catch (error) { + console.error("JSON Parse error for IMAGE_JSON:", IMAGE_JSON); + continue; // Skip this iteration if JSON parsing fails + } + + + + + let IMAGE_CHILD = childImageJson.map(imagesC => { + delete imagesC.imgRequired; + delete imagesC.ImageName; + delete imagesC.ImagePath; + return imagesC; + }); + + console.log("finalimagechild---", IMAGE_CHILD) + let obj = {}; + obj['MID'] = MID; + obj['UserId'] = UserId; + obj['Msl'] = (MSL == 'true' || MSL == true) ? 1 : 0; + obj['SubCategoryId'] = SUB_CATEGORY_ID; + obj['ProductId'] = PRODUCT_ID; + obj['StockAvlStatus'] = STOCK_AVL_STATUS; + obj['PromoType'] = PROMO_TYPE; + obj['PromoRunning'] = PROMO_RUNNING; + obj['FromDate'] = FROM_DATE; + obj['ToDate'] = TO_DATE; + obj['ChildImg'] = IMAGE_CHILD; + obj['Stock'] = STOCK != null && STOCK != "" && STOCK != "null" && STOCK != "undefined" ? STOCK : 0; + obj['MRP'] = MRP != null && MRP != "" && MRP != "null" && MRP != "undefined" ? MRP : 0; + obj['SellingPrice'] = SELLING_PRICE != null && SELLING_PRICE != "" && SELLING_PRICE != "null" && SELLING_PRICE != "undefined" ? SELLING_PRICE : 0; + obj['Remark'] = REMARK != null && REMARK != "" && REMARK != "null" && REMARK != "undefined" ? REMARK : 0; + + obj['BackRoomStock'] = BACKROOM_STOCK != null && BACKROOM_STOCK != "" && BACKROOM_STOCK != "null" && BACKROOM_STOCK != "undefined" ? BACKROOM_STOCK : 0; + obj['DamagedStock'] = DAMAGED_STOCK != null && DAMAGED_STOCK != "" && DAMAGED_STOCK != "null" && DAMAGED_STOCK != "undefined" ? DAMAGED_STOCK : 0; + obj['LostStock'] = LOST_STOCK != null && LOST_STOCK != "" && LOST_STOCK != "null" && LOST_STOCK != "undefined" ? LOST_STOCK : 0; + obj['ExpiryStock'] = EXPIRY_STOCK != null && EXPIRY_STOCK != "" && EXPIRY_STOCK != "null" && EXPIRY_STOCK != "undefined" ? EXPIRY_STOCK : 0; + obj['MFD_Stocks'] = mfdStocks || []; + obj['IsSKUPresent'] = IS_SKU_STOCK_PRESENT; + obj['OutOfStock'] = OUT_OF_STOCK != null && OUT_OF_STOCK != "" && OUT_OF_STOCK != "null" && OUT_OF_STOCK != "undefined" ? OUT_OF_STOCK : 0; + obj['LessThanMBQ'] = LESS_THAN_MBQ != null && LESS_THAN_MBQ != "" && LESS_THAN_MBQ != "null" && LESS_THAN_MBQ != "undefined" ? LESS_THAN_MBQ : 0; + obj['MBQ'] = MBQ; + allChilds.push(obj); + // new child upload folder + if (IMAGE_CHILD != '' && IMAGE_CHILD != null) { + let imgPath = common_ImagePath + IMAGE_CHILD; + let file = { + uri: imgPath, + type: 'image/jpeg', + name: IMAGE_CHILD, + filetype: 'image', + folderName: 'StockSingleKPIImages', + } + allKPIfiles.push(file); + } + } + + let alljsonData = {}; + alljsonData['StockHeader'] = allImages; + alljsonData['StockChilds'] = allChilds; + postData['MID'] = MID; + postData['Keys'] = 'StockWithPromo'; + postData['JsonData'] = JSON.stringify(alljsonData); + postData['UserId'] = UserId; + resolve({ 'Files': allKPIfiles, 'PostData': postData }); + console.log('stockpromo postData--', postData); + }, function (txnE, txnerr) { console.log(txnerr); resolve({ 'PostData': postData }); },); + } + else { + resolve({ 'PostData': postData }); + } + }, function (txnE, txnerr) { console.log(txnerr); resolve({ 'PostData': postData }); },); + }); + }).then((val) => { + return val; + }).catch((err) => { + console.log(err); + return postData; + }) + } + + case 'STOCKWITHCATEGORY': + { + // StockWithCat + var postData = {}; + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + let q2 = ` SELECT * FROM ${AppTables.STOCKWITHCAT_HDR_DATA} WHERE STORE_ID='${StoreId}' ` + (!previousDayUpload ? ` and VISIT_DATE='${d2}' ` : '') + ` `; + let allImages = [], allChilds = []; + let allKPIfiles = []; + await txn.executeSql(q2, [], async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + let imgsData = {}; + imgsData['MID'] = MID; + imgsData['UserId'] = UserId; + imgsData['CategoryId'] = data.CATEGORY_ID; + imgsData['CategoryImg'] = data.IMAGE; + allImages.push(imgsData); + if (data.IMAGE != '' && data.IMAGE != null) { + let imgPath = common_ImagePath + data.IMAGE; + let file = { + uri: imgPath, + type: 'image/jpeg', + name: data.IMAGE, + filetype: 'image', + folderName: 'StockWithCatImages', + } + allKPIfiles.push(file); + } + + } + + async function getMFDStockData(skud) { + let { CATEGORY_ID, BRAND_ID, PRODUCT_ID } = skud; + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + let q = `select * from ${AppTables.STOCKWITHCAT_MFD_DATA} where STOCK_UID='${skud.STOCK_UID}'`; + await txn.executeSql(q, [], async function (txn2, txnres) { + if (txnres.rows.length > 0) { + let arr1 = []; + for (var i = 0; i < txnres.rows.length; i++) { + let data = txnres.rows.item(i); + let { STOCK } = data; + let obj1 = {}; + obj1['MID'] = MID, + obj1['CategoryId'] = CATEGORY_ID; + obj1['BrandId'] = BRAND_ID; + obj1['ProductId'] = PRODUCT_ID; + obj1['Mfd'] = data.MFD, + obj1['LotNo'] = data.LOT_NO, + obj1['Stock'] = STOCK != '' && STOCK != null && STOCK != "null" && STOCK != "undefined" ? STOCK : 0; + + arr1.push(obj1); + if (i == txnres.rows.length - 1) { + resolve(arr1) + } + } + } + else { + resolve([]) + } + }, function (txnE, txnerr) { console.log(txnerr); resolve([]) },); + }); + }).catch((err) => { + console.log(err); + return []; + }) + } + + let q = `SELECT * FROM ${AppTables.STOCKWITHCAT_DATA} WHERE STORE_ID='${StoreId}' ` + (!previousDayUpload ? ` and VISIT_DATE='${d2}' ` : '') + ` `; + + await txn.executeSql(q, [], async function (txn2, txnres3) { + for (var i = 0; i < txnres3.rows.length; i++) { + let data2 = txnres3.rows.item(i); + let { COMMON_ID, STORE_ID, VISIT_DATE, CATEGORY_ID, CATEGORY, BRAND_ID, BRAND, PRODUCT_ID, PRODUCT, MSL, STOCK, BACKROOM_STOCK, DAMAGED_STOCK, LOST_STOCK, EXPIRY_STOCK, IS_SKU_STOCK_PRESENT, NREXPIRY1_STOCK, NREXPIRY2_STOCK, NREXPIRY3_STOCK, ADDED_DATE } = data2; + let mfdStocks = await getMFDStockData(data2); + + let obj = {}; + obj['MID'] = MID; + obj['UserId'] = UserId; + obj['Msl'] = (MSL == 'true' || MSL == true) ? 1 : 0; + obj['CategoryId'] = CATEGORY_ID; + obj['ProductId'] = PRODUCT_ID; + obj['Stock'] = STOCK != '' && STOCK != null && STOCK != "null" && STOCK != "undefined" ? STOCK : 0; + obj['BackRoomStock'] = BACKROOM_STOCK != null && BACKROOM_STOCK != "" && BACKROOM_STOCK != "null" && BACKROOM_STOCK != "undefined" ? BACKROOM_STOCK : 0; + obj['DamagedStock'] = DAMAGED_STOCK != null && DAMAGED_STOCK != "" && DAMAGED_STOCK != "null" && DAMAGED_STOCK != "undefined" ? DAMAGED_STOCK : 0; + obj['LostStock'] = LOST_STOCK != null && LOST_STOCK != "" && LOST_STOCK != "null" && LOST_STOCK != "undefined" ? LOST_STOCK : 0; + obj['ExpiryStock'] = EXPIRY_STOCK != null && EXPIRY_STOCK != "" && EXPIRY_STOCK != "null" && EXPIRY_STOCK != "undefined" ? EXPIRY_STOCK : 0; + obj['MFD_Stocks'] = mfdStocks || []; + obj['IsSKUPresent'] = IS_SKU_STOCK_PRESENT; + obj['NrExpiry1_Stock'] = NREXPIRY1_STOCK != null && NREXPIRY1_STOCK != "" && NREXPIRY1_STOCK != "null" && NREXPIRY1_STOCK != "undefined" ? NREXPIRY1_STOCK : 0; + obj['NrExpiry2_Stock'] = NREXPIRY2_STOCK != null && NREXPIRY2_STOCK != "" && NREXPIRY2_STOCK != "null" && NREXPIRY2_STOCK != "undefined" ? NREXPIRY2_STOCK : 0; + obj['NrExpiry3_Stock'] = NREXPIRY3_STOCK != null && NREXPIRY3_STOCK != "" && NREXPIRY3_STOCK != "null" && NREXPIRY3_STOCK != "undefined" ? NREXPIRY3_STOCK : 0; + allChilds.push(obj); + } + + + + let alljsonData = {}; + alljsonData['StockImgs'] = allImages; + alljsonData['StockChilds'] = allChilds; + + postData['MID'] = MID; + postData['Keys'] = 'StockWithCat'; + postData['JsonData'] = JSON.stringify(alljsonData); + postData['UserId'] = UserId; + resolve({ 'Files': allKPIfiles, 'PostData': postData }); + console.log('stockwithcat postData', postData); + + }, function (txnE, txnerr) { console.log(txnerr); resolve({ 'PostData': postData }); },); + + } + else { + resolve({ 'PostData': postData }); + } + }, function (txnE, txnerr) { console.log(txnerr); resolve({ 'PostData': postData }); },); + + }); + }).then((val) => { + return val; + }).catch((err) => { + console.log(err); + return postData; + }) + } + case 'OPSTOCK': + { + // Stocks + var postData = {}; + let KPIFields = await getKPIFields({ "ScreenName": "OPSTOCK" }); + let isExpStock1Index = KPIFields.findIndex(i => i.KPIFieldName == 'ExpiryStock1') + let isExpStock1PIObj = isExpStock1Index >= 0 ? KPIFields[isExpStock1Index] : {}; + let isExpStock1Enable = isExpStock1Index >= 0 ? isExpStock1PIObj['KPIFieldEnable'] : false; + let isExpStock2Index = KPIFields.findIndex(i => i.KPIFieldName == 'ExpiryStock2') + let isExpStock2PIObj = isExpStock2Index >= 0 ? KPIFields[isExpStock2Index] : {}; + let isExpStock2Enable = isExpStock2Index >= 0 ? isExpStock2PIObj['KPIFieldEnable'] : false; + let isExpStock3Index = KPIFields.findIndex(i => i.KPIFieldName == 'ExpiryStock3') + let isExpStock3PIObj = isExpStock3Index >= 0 ? KPIFields[isExpStock3Index] : {}; + let isExpStock3Enable = isExpStock3Index >= 0 ? isExpStock3PIObj['KPIFieldEnable'] : false; + let isExpStock4Index = KPIFields.findIndex(i => i.KPIFieldName == 'ExpiryStock4') + let isExpStock4PIObj = isExpStock4Index >= 0 ? KPIFields[isExpStock4Index] : {}; + let isExpStock4Enable = isExpStock4Index >= 0 ? isExpStock4PIObj['KPIFieldEnable'] : false; + let isStockCalculateIndex = KPIFields.findIndex(i => i.KPIFieldName == 'StockCalculate') + let isStockCalculatePIObj = isStockCalculateIndex >= 0 ? KPIFields[isStockCalculateIndex] : {}; + let isStockCalculateEnable = isStockCalculateIndex >= 0 ? isStockCalculatePIObj['KPIFieldEnable'] : false; + let expiryEnable = isStockCalculateEnable || isExpStock1Enable || isExpStock2Enable || isExpStock3Enable || isExpStock4Enable + + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + let q2 = ` SELECT * FROM ${AppTables.INSERT_OPENINGHEADER_DATA} WHERE STORE_ID='${StoreId}' ` + (!previousDayUpload ? ` and VISIT_DATE='${d2}' ` : '') + ` `; + let allImages = [], allChilds = [], allChildsExp = []; + let allKPIfiles = []; + + await txn.executeSql(q2, [], async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + console.log("hdr count:", txnres2.rows.length); + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + let imgsData = {}; + if (data && data.IMAGE != null && data.IMAGE != "null" && data.IMAGE != undefined && data.IMAGE != "undefined" && data.IMAGE != '') { + imgsData['MID'] = MID; + imgsData['UserId'] = UserId; + imgsData['CategoryId'] = data.CATEGORY_ID; + imgsData['CategoryImg'] = data.IMAGE; + + allImages.push(imgsData); + } + + if (data.IMAGE != '' && data.IMAGE != null) { + let imgPath = common_ImagePath + data.IMAGE; + let file = { + uri: imgPath, + type: 'image/jpeg', + name: data.IMAGE, + filetype: 'image', + folderName: 'StockImages', + } + allKPIfiles.push(file); + } + + } + + async function getStocks(qry) { + console.log("qry in OPS:", qry); + let allprds = []; + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + txn.executeSql(qry, [], async function (txn2, txnres4) { + if (txnres4.rows.length > 0) { + for (var i = 0; i < txnres4.rows.length; i++) { + let data2 = txnres4.rows.item(i); + let { ARTICLE_CODE, COMMON_ID, STORE_ID, VISIT_DATE, CATEGORY_ID, CATEGORY, BRAND_ID, BRAND, PRODUCT_ID, PRODUCT, MSL, OPENING_STOCK, MIDDAY_STOCK, CLOSING_STOCK, EXPIRY_ISOPEN, EXPIRY_STK, ADDED_DATE } = data2; + let obj = {}; + obj['MID'] = MID; + obj['UserId'] = UserId; + obj['Msl'] = (MSL == 'true' || MSL == true) ? 1 : 0; + obj['ArticleCode'] = ARTICLE_CODE || ""; + obj['CategoryId'] = CATEGORY_ID; + obj['ProductId'] = PRODUCT_ID; + obj['OPS'] = OPENING_STOCK != null && OPENING_STOCK != "null" && OPENING_STOCK != 'undefined' && OPENING_STOCK != '' ? OPENING_STOCK : 0; + obj['MDS'] = MIDDAY_STOCK != null && MIDDAY_STOCK != "null" && MIDDAY_STOCK != 'undefined' && MIDDAY_STOCK != '' ? MIDDAY_STOCK : 0; + obj['CLS'] = CLOSING_STOCK != null && CLOSING_STOCK != "null" && CLOSING_STOCK != 'undefined' && CLOSING_STOCK != '' ? CLOSING_STOCK : 0; + + obj['ExpirySTKOpen'] = EXPIRY_ISOPEN; + obj['ExpirySTK'] = EXPIRY_STK; + + allprds.push(obj); + if (i == txnres4.rows.length - 1) { + resolve(allprds); + } + } + } + else { + resolve(allprds); + } + }, function (txnE, txnerr) { console.log(txnerr); resolve(allprds); }); + }); + }) + } + + async function getStocksExp(qry) { + console.log("qry in OPS:", qry); + let allprds = []; + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + txn.executeSql(qry, [], async function (txn2, txnres4) { + if (txnres4.rows.length > 0) { + for (var i = 0; i < txnres4.rows.length; i++) { + let data2 = txnres4.rows.item(i); + let { COMMON_ID, STORE_ID, VISIT_DATE, CATEGORY_ID, CATEGORY, BRAND_ID, BRAND, PRODUCT_ID, PRODUCT, MSL, OPENING_STOCK, MIDDAY_STOCK, CLOSING_STOCK, EXPIRY_ISOPEN, EXPIRY_STK, + MIDDAY_EXPIRYSTOCK1, MIDDAY_EXPIRYSTOCK2, MIDDAY_EXPIRYSTOCK3, MIDDAY_EXPIRYSTOCK4, + EXPIRYSTOCK1, EXPIRYSTOCK2, EXPIRYSTOCK3, EXPIRYSTOCK4, + CLOSING_EXPIRYSTOCK1, CLOSING_EXPIRYSTOCK2, CLOSING_EXPIRYSTOCK3, CLOSING_EXPIRYSTOCK4, + ADDED_DATE } = data2; + let obj = {}; + + obj['MID'] = MID; + obj['UserId'] = UserId; + obj['Msl'] = (MSL == 'true' || MSL == true) ? 1 : 0; + obj['CategoryId'] = CATEGORY_ID; + obj['ProductId'] = PRODUCT_ID; + + obj['MDS_ExpiryStock1'] = MIDDAY_EXPIRYSTOCK1 != null && MIDDAY_EXPIRYSTOCK1 != "null" && MIDDAY_EXPIRYSTOCK1 != 'undefined' && MIDDAY_EXPIRYSTOCK1 != '' ? MIDDAY_EXPIRYSTOCK1 : 0; + obj['MDS_ExpiryStock2'] = MIDDAY_EXPIRYSTOCK2 != null && MIDDAY_EXPIRYSTOCK2 != "null" && MIDDAY_EXPIRYSTOCK2 != 'undefined' && MIDDAY_EXPIRYSTOCK2 != '' ? MIDDAY_EXPIRYSTOCK2 : 0; + obj['MDS_ExpiryStock3'] = MIDDAY_EXPIRYSTOCK3 != null && MIDDAY_EXPIRYSTOCK3 != "null" && MIDDAY_EXPIRYSTOCK3 != 'undefined' && MIDDAY_EXPIRYSTOCK3 != '' ? MIDDAY_EXPIRYSTOCK3 : 0; + obj['MDS_ExpiryStock4'] = MIDDAY_EXPIRYSTOCK4 != null && MIDDAY_EXPIRYSTOCK4 != "null" && MIDDAY_EXPIRYSTOCK4 != 'undefined' && MIDDAY_EXPIRYSTOCK4 != '' ? MIDDAY_EXPIRYSTOCK4 : 0; + + obj['OPS_ExpiryStock1'] = EXPIRYSTOCK1 != null && EXPIRYSTOCK1 != "null" && EXPIRYSTOCK1 != 'undefined' && EXPIRYSTOCK1 != '' ? EXPIRYSTOCK1 : 0; + obj['OPS_ExpiryStock2'] = EXPIRYSTOCK2 != null && EXPIRYSTOCK2 != "null" && EXPIRYSTOCK2 != 'undefined' && EXPIRYSTOCK2 != '' ? EXPIRYSTOCK2 : 0; + obj['OPS_ExpiryStock3'] = EXPIRYSTOCK3 != null && EXPIRYSTOCK3 != "null" && EXPIRYSTOCK3 != 'undefined' && EXPIRYSTOCK3 != '' ? EXPIRYSTOCK3 : 0; + obj['OPS_ExpiryStock4'] = EXPIRYSTOCK4 != null && EXPIRYSTOCK4 != "null" && EXPIRYSTOCK4 != 'undefined' && EXPIRYSTOCK4 != '' ? EXPIRYSTOCK4 : 0; + + obj['CLS_ExpiryStock1'] = CLOSING_EXPIRYSTOCK1 != null && CLOSING_EXPIRYSTOCK1 != "null" && CLOSING_EXPIRYSTOCK1 != 'undefined' && CLOSING_EXPIRYSTOCK1 != '' ? CLOSING_EXPIRYSTOCK1 : 0; + obj['CLS_ExpiryStock2'] = CLOSING_EXPIRYSTOCK2 != null && CLOSING_EXPIRYSTOCK2 != "null" && CLOSING_EXPIRYSTOCK2 != 'undefined' && CLOSING_EXPIRYSTOCK2 != '' ? CLOSING_EXPIRYSTOCK2 : 0; + obj['CLS_ExpiryStock3'] = CLOSING_EXPIRYSTOCK3 != null && CLOSING_EXPIRYSTOCK3 != "null" && CLOSING_EXPIRYSTOCK3 != 'undefined' && CLOSING_EXPIRYSTOCK3 != '' ? CLOSING_EXPIRYSTOCK3 : 0; + obj['CLS_ExpiryStock4'] = CLOSING_EXPIRYSTOCK4 != null && CLOSING_EXPIRYSTOCK4 != "null" && CLOSING_EXPIRYSTOCK4 != 'undefined' && CLOSING_EXPIRYSTOCK4 != '' ? CLOSING_EXPIRYSTOCK4 : 0; + + + allprds.push(obj); + if (i == txnres4.rows.length - 1) { + resolve(allprds); + } + } + } + else { + resolve(allprds); + } + }, function (txnE, txnerr) { console.log(txnerr); resolve(allprds); }); + }); + }) + } + + let checkq = ` SELECT * FROM ${AppTables.STOCK_DATA} WHERE STORE_ID='${StoreId}' ` + (!previousDayUpload ? ` and VISIT_DATE='${d2}' ` : '') + ` `; + const MAXObjCount = 250; + + await txn.executeSql(checkq, [], async function (txn2, txnres2) { + //if product count is greater than 250 then upload part by part (in limit of 250) + console.log("prd count:", txnres2.rows.length); + if (txnres2.rows.length > MAXObjCount) { + let partsCount = Math.ceil(txnres2.rows.length / MAXObjCount); + let PrdsByParts = []; + console.log("partsCount:", partsCount); + for (let i = 0; i < partsCount; i++) { + let Offset = (i * MAXObjCount); + let q = `SELECT * FROM ${AppTables.STOCK_DATA} WHERE STORE_ID='${StoreId}' ` + (!previousDayUpload ? ` and VISIT_DATE='${d2}' ` : '') + ` LIMIT ${MAXObjCount} OFFSET ${Offset} `; + let allProducts = await getStocks(q); + let obj1 = { "PartNo": i, "Products": allProducts }; + PrdsByParts.push(obj1); + if (i == partsCount - 1) { + postData['MID'] = MID; + postData['Keys'] = 'Stocks'; + postData['UploadByPart'] = true; + postData['PartsCount'] = partsCount; + postData['PartsData'] = PrdsByParts; + postData['AllImages'] = allImages; + postData['UserId'] = UserId; + resolve({ 'Files': allKPIfiles, 'PostData': postData }); + } + } + + } + else { + allChilds = await getStocks(checkq); + + + + let alljsonData = {}; + alljsonData['StockImgs'] = allImages; + alljsonData['StockChilds'] = allChilds; + if (expiryEnable) { + allChildsExp = await getStocksExp(checkq); + alljsonData['StockExpiry'] = allChildsExp; + } else { + alljsonData['StockExpiry'] = []; + } + postData['MID'] = MID; + postData['Keys'] = 'Stocks'; + postData['JsonData'] = JSON.stringify(alljsonData); + postData['UserId'] = UserId; + resolve({ 'Files': allKPIfiles, 'PostData': postData }); + } + + + }, function (txnE, txnerr) { console.log(txnerr); resolve({ 'PostData': postData }); },); + } + else { + resolve({ 'PostData': postData }); + } + }, function (txnE, txnerr) { console.log(txnerr); resolve({ 'PostData': postData }); },); + + }); + }).then((val) => { + return val; + }).catch((err) => { + console.log(err); + return postData; + }) + } + case 'BACKSTOCK': + { + // BRS + var postData = {}; + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + let q = `SELECT * FROM ${AppTables.CHILD_BACK_OF_STORE} WHERE STORE_ID='${StoreId}' ` + (!previousDayUpload ? ` and VISIT_DATE='${d2}' ` : '') + ` `; + let allChilds = []; + await txn.executeSql(q, [], async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + let { ARTICLE_CODE, COMMON_ID, STORE_ID, VISIT_DATE, CATEGORY, CATEGORY_ID, PRODUCT, PRODUCT_ID, MSL, STOCK, ADDED_DATE } = data; + let obj = {}; + obj['MID'] = MID; + obj['UserId'] = UserId; + obj['Msl'] = (MSL == 'true' || MSL == true) ? 1 : 0; + obj['ArticleCode'] = ARTICLE_CODE || ""; + obj['CategoryId'] = CATEGORY_ID; + obj['ProductId'] = PRODUCT_ID; + obj['BCKStock'] = STOCK != '' && STOCK != null && STOCK != "null" && STOCK != "undefined" ? STOCK : 0; + allChilds.push(obj); + } + postData['MID'] = MID; + postData['Keys'] = 'BCK'; + postData['JsonData'] = JSON.stringify(allChilds); + postData['UserId'] = UserId; + resolve({ 'PostData': postData }); + } + else { + resolve({ 'PostData': postData }); + } + + }, function (txnE, txnerr) { console.log(txnerr); resolve({ 'PostData': postData }); },); + + }); + }).then((val) => { + return val; + }).catch((err) => { + console.log(err); + return postData; + }); + + } + + case 'ONEAPPSTOCKQRSCAN': + { + var postData = {}; + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + let q = `SELECT * FROM ${AppTables.QRCODE_SCANNER} WHERE STORE_ID='${StoreId}' ` + (!previousDayUpload ? ` and VISIT_DATE='${d2}' ` : '') + ` `; + console.log("checkQRquery", q) + let allChilds = []; + await txn.executeSql(q, [], async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + console.log("checkQRquerydata", data) + let { QRCODE_ID, STORE_ID, VISIT_DATE, UNIQUE_QRCODE, ADDED_DATE, PRODUCT_ID } = data; + let obj = {}; + obj['MID'] = MID; + obj['UserId'] = UserId; + obj['UniqueQRcode'] = UNIQUE_QRCODE; + obj['productId'] = PRODUCT_ID; + allChilds.push(obj); + } + postData['MID'] = MID; + postData['Keys'] = 'STOCK_UNIQUEQRCODE'; + postData['JsonData'] = JSON.stringify(allChilds); + postData['UserId'] = UserId; + console.log('UNIQUEQRCODE data', postData) + resolve({ 'PostData': postData }); + } + else { + resolve({ 'PostData': postData }); + } + + }, function (txnE, txnerr) { console.log(txnerr); resolve({ 'PostData': postData }); },); + + }); + }).then((val) => { + return val; + }).catch((err) => { + console.log(err); + return postData; + }); + } + + case 'ONEAPPSALEQRSCAN': + { + var postData = {}; + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + let q = `SELECT * FROM ${AppTables.QRCODE_SALE} WHERE STORE_ID='${StoreId}' ` + (!previousDayUpload ? ` and VISIT_DATE='${d2}' ` : '') + ` `; + console.log("checkQRquery", q) + let allChilds = []; + await txn.executeSql(q, [], async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + console.log("checkQRSaleQueryData", data) + let { QRCODE_ID, STORE_ID, VISIT_DATE, UNIQUE_QRCODE, ADDED_DATE, PRODUCT_ID } = data; + let obj = {}; + obj['MID'] = MID; + obj['UserId'] = UserId; + obj['UniqueQRcode'] = UNIQUE_QRCODE; + obj['productId'] = PRODUCT_ID; + allChilds.push(obj); + } + postData['MID'] = MID; + postData['Keys'] = 'SALE_UNIQUEQRCODE'; + postData['JsonData'] = JSON.stringify(allChilds); + postData['UserId'] = UserId; + console.log('SALE_UNIQUEQRCODE data', postData) + resolve({ 'PostData': postData }); + } + else { + resolve({ 'PostData': postData }); + } + + }, function (txnE, txnerr) { console.log(txnerr); resolve({ 'PostData': postData }); },); + + }); + }).then((val) => { + return val; + }).catch((err) => { + console.log(err); + return postData; + }); + + } + + case 'KYCONEAPP': + { + var postData = {}; + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + let q = `SELECT * FROM ${AppTables.STORE_KYC_INFO} WHERE STORE_ID='${StoreId}' ` + (!previousDayUpload ? ` and VISIT_DATE='${d2}' ` : '') + ` `; + console.log("checkQRquery", q) + let allChilds = []; + await txn.executeSql(q, [], async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + console.log("checkSTORE_KYC_INFO", data) + let { STORE_ID, KYC_DATA } = data; + let obj = {}; + try { + let kycData = JSON.parse(KYC_DATA); + obj = { ...kycData }; + } catch (e) { + console.error('Error parsing KYC_DATA:', e); + obj = {}; // Fallback to empty object if parsing fails + } + + allChilds.push(obj); + } + postData['MID'] = MID; + postData['Keys'] = 'KYCONEAPP'; + postData['JsonData'] = JSON.stringify(allChilds); + postData['UserId'] = UserId; + console.log('KYCONEAPP data', postData) + resolve({ 'PostData': postData }); + } + else { + resolve({ 'PostData': postData }); + } + + }, function (txnE, txnerr) { console.log(txnerr); resolve({ 'PostData': postData }); },); + + }); + }).then((val) => { + return val; + }).catch((err) => { + console.log(err); + return postData; + }); + + } + + case 'SOS': + { + var postData = {}; + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + let q2 = ` SELECT * FROM ${AppTables.SHARE_OF_SHELF_IMAGE} WHERE STORE_ID='${StoreId}' ` + (!previousDayUpload ? ` and VISIT_DATE='${d2}' ` : '') + ` `; + let allImages = [], allChilds = []; + let allKPIfiles = []; + await txn.executeSql(q2, [], async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + let imgsData = {}; + + imgsData['MID'] = MID; + imgsData['UserId'] = UserId; + imgsData['CategoryId'] = data.CATEGORY_ID; + imgsData['CategoryImg'] = data.IMAGE != null && data.IMAGE != 'undefined' ? data.IMAGE : ''; + allImages.push(imgsData); + + if (data.IMAGE != '' && data.IMAGE != null) { + let imgPath = common_ImagePath + data.IMAGE; + let file = { + uri: imgPath, + type: 'image/jpeg', + name: data.IMAGE, + filetype: 'image', + folderName: 'ShareOfShelfImages', + } + allKPIfiles.push(file); + } + + } + + let q = `SELECT * FROM ${AppTables.SHARE_OF_SHELF_FACING_DATA} WHERE STORE_ID='${StoreId}' ` + (!previousDayUpload ? ` and VISIT_DATE='${d2}' ` : '') + ` `; + await txn.executeSql(q, [], async function (txn2, txnres3) { + for (var i = 0; i < txnres3.rows.length; i++) { + let data2 = txnres3.rows.item(i); + let { COMMON_ID, STORE_ID, VISIT_DATE, CATEGORY, CATEGORY_ID, SUB_CATEGORY, SUB_CATEGORY_ID, SUB_CATEGORY_STOCK, STOCK, IMAGE1, ADDED_DATE } = data2; + let obj = {}; + obj['MID'] = MID; + obj['UserId'] = UserId; + obj['CategoryId'] = CATEGORY_ID; + obj['SubCategoryId'] = SUB_CATEGORY_ID; + obj['TotalFacing'] = SUB_CATEGORY_STOCK != '' && SUB_CATEGORY_STOCK != null && SUB_CATEGORY_STOCK != "null" && SUB_CATEGORY_STOCK != "undefined" ? SUB_CATEGORY_STOCK : 0; + obj['SelfFacing'] = STOCK != '' && STOCK != null && STOCK != "null" && STOCK != "undefined" ? STOCK : 0; + obj['Image1'] = IMAGE1 != null ? IMAGE1 : ''; + allChilds.push(obj); + + if (IMAGE1 != '' && IMAGE1 != null) { + let imgPath = common_ImagePath + IMAGE1; + let file = { + uri: imgPath, + type: 'image/jpeg', + name: IMAGE1, + filetype: 'image', + folderName: 'ShareOfShelfImages', + } + allKPIfiles.push(file); + } + + } + + let alljsonData = {}; + alljsonData['SOSImg'] = allImages; + alljsonData['ShareOfSelf'] = allChilds; + + postData['MID'] = MID; + postData['Keys'] = 'SOS'; + postData['JsonData'] = JSON.stringify(alljsonData); + postData['UserId'] = UserId; + resolve({ 'Files': allKPIfiles, 'PostData': postData }); + + }, function (txnE, txnerr) { console.log(txnerr); resolve({ 'PostData': postData }); },); + + } + else { + resolve({ 'PostData': postData }); + } + }, function (txnE, txnerr) { console.log(txnerr); resolve({ 'PostData': postData }); },); + + }); + }).then((val) => { + return val; + }).catch((err) => { + console.log(err); + return postData; + }); + + } + + case 'PAIDVISI': + { + // PaidVis + var postData = {}; + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + let q2 = ` SELECT * FROM ${AppTables.PAID_VISIBILITY_CHILD_DATA} WHERE STORE_ID='${StoreId}' ` + (!previousDayUpload ? ` and VISIT_DATE='${d2}' ` : '') + ` `; + let allChilds = []; + let allKPIfiles = []; + await txn.executeSql(q2, [], async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + let { COMMON_ID, STORE_ID, VISIT_DATE, SUB_CATEGORY, SUB_CATEGORY_ID, VISIBILITY_PRESENT, DISPLAY_ID, DISPLAY, IMAGE1, IMAGE2, REASON, REASON_ID, REASON_REMARK, ADDED_DATE } = data; + let displayCheckList_obj = await getDisplayCheckList(DISPLAY_ID, SUB_CATEGORY_ID, storeData); + let displayCheckList = displayCheckList_obj.Results || []; + let obj = {}; + + obj['MID'] = MID; + obj['User_Id'] = UserId; + obj['SubCategoryId'] = SUB_CATEGORY_ID; + obj['DisplayId'] = DISPLAY_ID; + obj['Present'] = VISIBILITY_PRESENT; + obj['ImgOne'] = IMAGE1; + obj['ImgTwo'] = IMAGE2; + obj['ReasonId'] = REASON_ID; + obj['ReasonRemark'] = REASON_REMARK; + + + let imgPath = common_ImagePath + IMAGE1; + let imgPath2 = common_ImagePath + IMAGE2; + console.log('IMAGE2:', IMAGE2, ' , IMAGE1:', IMAGE1); + + if (IMAGE1 != '' && IMAGE1 != null) { + let file = { + uri: imgPath, + type: 'image/jpeg', + name: IMAGE1, + filetype: 'image', + folderName: 'VisibilityImages', + } + allKPIfiles.push(file); + } + + if (IMAGE2 != '' && IMAGE2 != null) { + let file2 = { + uri: imgPath2, + type: 'image/jpeg', + name: IMAGE2, + filetype: 'image', + folderName: 'VisibilityImages', + } + allKPIfiles.push(file2); + } + + + + if (displayCheckList.length > 0) { + let checkl_data = []; + for (var i = 0; i < displayCheckList.length; i++) { + let data2 = displayCheckList[i]; + let { ChecklistId, ChecklistName, REASON, REASON_ID } = data2; + let chlobj = {}; + chlobj['MID'] = MID; + chlobj['User_Id'] = UserId; + chlobj['SubCategoryId'] = SUB_CATEGORY_ID; + chlobj['DisplayId'] = DISPLAY_ID; + chlobj['ChecklistId'] = ChecklistId; + chlobj['AnswerId'] = REASON_ID; + + checkl_data.push(chlobj); + } + obj['Checklists'] = checkl_data; + } + else { + obj['Checklists'] = ""; + } + allChilds.push(obj); + } + postData['MID'] = MID; + postData['Keys'] = 'PaidVisibility'; + postData['JsonData'] = JSON.stringify(allChilds); + postData['UserId'] = UserId; + // console.log('PaidVis',postData) + resolve({ 'Files': allKPIfiles, 'PostData': postData }); + } + else { + resolve({ 'PostData': postData }); + } + }, function (txnE, txnerr) { console.log(txnerr); resolve({ 'PostData': postData }); },); + + }); + }).then((val) => { + return val; + }).catch((err) => { + console.log(err); + return postData; + }); + + } + + case 'ADDITIONALVISI': + { + var postData = await getDataFor_ADVONEAPP(storeData, KpiData, UserId, previousDayUpload); + console.log("ADDITIONALVISI postData:", postData) + return postData; + } + + case 'ADDITIONALVISI_IR': + { + var postData = await getDataFor_ADVONEAPP(storeData, KpiData, UserId, previousDayUpload); + console.log("ADDITIONALVISI IR postData:", postData) + return postData; + } + + case 'RETURNSTOCKONEAPP': + { + var postData = await getDataFor_RETURN_STOCK(storeData, KpiData, UserId, previousDayUpload); + console.log("RETURNSTOCKONEAPP postData:", postData) + return postData; + } + + case 'ORDERSIMPLIFYONEAPP': + { + var postData = await getDataFor_ORDER_SIMPLIFY(storeData, KpiData, UserId, previousDayUpload); + console.log("ORDERSIMPLIFYONEAPP postData:", postData) + return postData; + } + + + case 'COMPVISI': + { + var postData = await getDataFor_COMPVONEAPP(storeData, KpiData, UserId, previousDayUpload); + console.log("COMPVISI postData:", postData) + return postData; + } + case 'COMPVISI_IR': + { + var postData = await getDataFor_COMPVONEAPP(storeData, KpiData, UserId, previousDayUpload); + console.log("COMPVISI IR postData:", postData) + return postData; + } + + case 'PROMOTION': + { + // Promotion + var postData = {}; + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + let q2 = ` SELECT * FROM ${AppTables.PROMOTION_DATA} WHERE STORE_ID='${StoreId}' ` + (!previousDayUpload ? ` and VISIT_DATE='${d2}' ` : '') + ` `; + let allChilds = [], allKPIfiles = []; + await txn.executeSql(q2, [], async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + let { COMMON_ID, STORE_ID, VISIT_DATE, SUB_CATEGORY, SUB_CATEGORY_ID, PROMOTION, PROMOTION_ID, STOCK_AVL, PROMOTALK_AVL, POS_AVL, IMAGE1, ADDED_DATE } = data; + let obj = {}; + obj['MID'] = MID; + obj['User_Id'] = UserId; + obj['SubCategoryId'] = SUB_CATEGORY_ID; + obj['PromotionId'] = PROMOTION_ID; + obj['StockAvl'] = STOCK_AVL; + obj['PromoTalkerAvl'] = PROMOTALK_AVL; + obj['POSAvl'] = POS_AVL; + if (STOCK_AVL == 1 || PROMOTALK_AVL == 1 || POS_AVL == 1) { + obj['PromoImg'] = IMAGE1; + if (IMAGE1 != '' && IMAGE1 != null) { + let imgPath = common_ImagePath + IMAGE1; + let file = { + uri: imgPath, + type: 'image/jpeg', + name: IMAGE1, + filetype: 'image', + folderName: 'PromotionImages', + } + allKPIfiles.push(file); + } + } + else { + obj['PromoImg'] = ""; + } + + allChilds.push(obj); + } + postData['MID'] = MID; + postData['Keys'] = 'Promotion'; + postData['JsonData'] = JSON.stringify(allChilds); + postData['UserId'] = UserId; + resolve({ 'Files': allKPIfiles, 'PostData': postData }); + } + else { + resolve({ 'PostData': postData }); + } + }, function (txnE, txnerr) { console.log(txnerr); resolve({ 'PostData': postData }); },); + + }); + }).then((val) => { + return val; + }).catch((err) => { + console.log(err); + return postData; + }); + + } + + case 'PROMOTION2': + { + // Promotion2 + var postData = {}; + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + let q2 = ` SELECT Distinct t1.*,m.Camera1Enable,m.Camera2Enable FROM ${AppTables.SIMPLE_PROMOTION_DATA} t1 Inner Join Mapping_Promotion m on m.PromoId=t1.PROMOTION_ID WHERE STORE_ID='${StoreId}' ` + (!previousDayUpload ? ` and VISIT_DATE='${d2}' ` : '') + ` `; + let allChilds = [], allKPIfiles = []; + await txn.executeSql(q2, [], async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + let { COMMON_ID, STORE_ID, VISIT_DATE, SUB_CATEGORY, SUB_CATEGORY_ID, PROMOTION, PROMOTION_ID, IS_PRESENT, REASON_ID, REASON, IMAGE1, ADDED_DATE, Camera1Enable } = data; + let obj = {}; + obj['MID'] = MID; + obj['User_Id'] = UserId; + obj['SubCategoryId'] = SUB_CATEGORY_ID; + obj['PromotionId'] = PROMOTION_ID; + obj['IsPresent'] = IS_PRESENT; + obj['ReasonId'] = REASON_ID; + obj['Image1'] = IMAGE1; + + + let CE1 = (Camera1Enable == 1 || Camera1Enable == 'true') ? true : false; + if (IS_PRESENT == 1 && CE1 == true && IMAGE1 != '') { + + let imgPath = common_ImagePath + IMAGE1; + let file = { + uri: imgPath, + type: 'image/jpeg', + name: IMAGE1, + filetype: 'image', + folderName: 'Promotion2Images', + } + allKPIfiles.push(file); + } + + allChilds.push(obj); + } + postData['MID'] = MID; + postData['Keys'] = 'Promotion2'; + postData['JsonData'] = JSON.stringify(allChilds); + postData['UserId'] = UserId; + + // console.log('promotin2 postData',postData); + resolve({ 'Files': allKPIfiles, 'PostData': postData }); + } + else { + resolve({ 'PostData': postData }); + } + }, function (txnE, txnerr) { console.log(txnerr); resolve({ 'PostData': postData }); },); + + }); + }).then((val) => { + return val; + }).catch((err) => { + console.log(err); + return postData; + }); + + } + + case 'COMPROMO': + { + // CompPromo + var postData = {}; + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + let q2 = ` SELECT * FROM ${AppTables.COMPETITION_PROMOTION} WHERE STORE_ID='${StoreId}' ` + (!previousDayUpload ? ` and VISIT_DATE='${d2}' ` : '') + ` `; + let allChilds = [], allKPIfiles = []; + await txn.executeSql(q2, [], async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + let { STORE_ID, VISIT_DATE, PRESENT, COMPANY, COMPANY_ID, CATEGORY, CATEGORY_ID, SUB_CATEGORY, SUB_CATEGORY_ID, BRAND, BRAND_ID, PROMO_TYPE, PROMO_TYPE_ID, PRODUCT, PRODUCT_ID, PROMO_DETAILS, MRP, SELLING_PRICE, DISCOUNT_PERCENT, GRAMMAGE, IMAGE, IMAGE2, IMAGE3, ADDED_DATE } = data; + let obj = {}; + obj['MID'] = MID; + obj['User_Id'] = UserId; + obj['Present'] = PRESENT; + console.log('CompPromo,PRESENT:', PRESENT); + if (PRESENT == 1) { + obj['CompanyId'] = COMPANY_ID; + obj['CategoryId'] = CATEGORY_ID; + obj['SubCategoryId'] = SUB_CATEGORY_ID; + obj['BrandId'] = BRAND_ID; + obj['ProductId'] = PRODUCT_ID; + obj['PromoTypeId'] = PROMO_TYPE_ID; + obj['Promodetails'] = PROMO_DETAILS; + obj['MRP'] = MRP != '' && MRP != null && MRP != "null" && MRP != "undefined" ? MRP : 0;; + obj['SellingPrice'] = SELLING_PRICE != '' && SELLING_PRICE != null && SELLING_PRICE != "null" && SELLING_PRICE != "undefined" ? SELLING_PRICE : 0;; + obj['DiscountPercent'] = DISCOUNT_PERCENT != '' && DISCOUNT_PERCENT != null && DISCOUNT_PERCENT != "null" && DISCOUNT_PERCENT != "undefined" ? DISCOUNT_PERCENT : 0; + obj['Grammage'] = GRAMMAGE != '' && GRAMMAGE != null && GRAMMAGE != "null" && GRAMMAGE != "undefined" ? GRAMMAGE : 0; + obj['CompPromoImg'] = IMAGE; + obj['CompPromoImg2'] = IMAGE2 != null && IMAGE2 != 'undefined' ? IMAGE2 : ''; + obj['CompPromoImg3'] = IMAGE3 != null && IMAGE3 != 'undefined' ? IMAGE3 : ''; + + + + } + else { + obj['CompanyId'] = 0; + obj['CategoryId'] = 0; + obj['SubCategoryId'] = 0; + obj['BrandId'] = 0; + obj['ProductId'] = 0; + obj['PromoTypeId'] = 0; + obj['Promodetails'] = ""; + obj['MRP'] = 0; + obj['SellingPrice'] = 0; + obj['DiscountPercent'] = 0; + obj['Grammage'] = 0; + obj['CompPromoImg'] = ""; + obj['CompPromoImg2'] = ""; + obj['CompPromoImg3'] = ""; + + } + + + allChilds.push(obj); + } + postData['MID'] = MID; + postData['Keys'] = 'CompPromotion'; + postData['JsonData'] = JSON.stringify(allChilds); + postData['UserId'] = UserId; + resolve({ 'Files': allKPIfiles, 'PostData': postData }); + } + else { + resolve({ 'Files': allKPIfiles, 'PostData': postData }); + } + }, function (txnE, txnerr) { console.log(txnerr); resolve({ 'PostData': postData }); },); + + }); + }).then((val) => { + return val; + }).catch((err) => { + console.log(err); + return postData; + }); + + } + + case 'CONCOV': + { + // Contacts + var postData = {}; + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + let q2 = ` SELECT * FROM ${AppTables.CONTACT_CONVERSION} WHERE STORE_ID='${StoreId}' ` + (!previousDayUpload ? ` and VISIT_DATE='${d2}' ` : '') + ` AND SCREEN_TYPE='Contact' `; + + await txn.executeSql(q2, [], async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + let data = txnres2.rows.item(0); + let { STORE_ID, VISIT_DATE, TOTAL_CONTACT, CST_CONTACT, ADDED_DATE } = data; + let obj = {}; + obj['MID'] = MID; + obj['User_Id'] = UserId; + obj['TotalContact'] = TOTAL_CONTACT != '' && TOTAL_CONTACT != null && TOTAL_CONTACT != "null" && TOTAL_CONTACT != "undefined" ? TOTAL_CONTACT : 0; + obj['CSTConverted'] = CST_CONTACT != '' && CST_CONTACT != null && CST_CONTACT != "null" && CST_CONTACT != "undefined" ? CST_CONTACT : 0; + + + postData['MID'] = MID; + postData['Keys'] = 'ConversionTracking'; + postData['JsonData'] = JSON.stringify(obj); + postData['UserId'] = UserId; + console.log("TotalContact-postData-", TOTAL_CONTACT, postData) + resolve({ 'PostData': postData }); + } + else { + resolve({ 'PostData': postData }); + } + }, function (txnE, txnerr) { console.log(txnerr); resolve({ 'PostData': postData }); },); + + }); + }).then((val) => { + return val; + }).catch((err) => { + console.log(err); + return postData; + }); + + } + + case 'SALE': + { + // Sale + var postData = {}; + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + let q2 = ` SELECT * FROM ${AppTables.SALES} WHERE STORE_ID='${StoreId}' ` + (!previousDayUpload ? ` and VISIT_DATE='${d2}' ` : '') + ` and STOCK is not NULL and STOCK!='' and STOCK>0`; + let allChilds = []; + await txn.executeSql(q2, [], async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + let { ARTICLE_CODE, STORE_ID, VISIT_DATE, CATEGORY, CATEGORY_ID, PRODUCT, PRODUCT_ID, MSL, STOCK, ADDED_DATE } = data; + let obj = {}; + obj['MID'] = MID; + obj['UserId'] = UserId; + obj['Msl'] = (MSL == 'true' || MSL == true) ? 1 : 0; + obj['ArticleCode'] = ARTICLE_CODE || ""; + obj['CategoryId'] = CATEGORY_ID; + obj['ProductId'] = PRODUCT_ID; + obj['Sales'] = STOCK != '' && STOCK != null && STOCK != "null" && STOCK != "undefined" ? STOCK : 0; + + allChilds.push(obj); + } + postData['MID'] = MID; + postData['Keys'] = 'Sales'; + postData['JsonData'] = JSON.stringify(allChilds); + postData['UserId'] = UserId; + // console.log("postdata sale:",postData); + resolve({ 'PostData': postData }); + } + else { + resolve({ 'PostData': postData }); + } + }, function (txnE, txnerr) { console.log(txnerr); resolve({ 'PostData': postData }); },); + + }); + }).then((val) => { + return val; + }).catch((err) => { + console.log(err); + return postData; + }); + + } + + case 'ORDER': + { + // Order + var postData = {}; + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + + let q2 = ` SELECT * FROM ${AppTables.ORDER} WHERE STORE_ID='${StoreId}' ` + (!previousDayUpload ? ` and STOCK >0 and VISIT_DATE='${d2}' ` : '') + ` `; + + let allChilds = [], allData = {}; + await txn.executeSql(q2, [], async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + let { CATEGORY, CATEGORY_ID, PRODUCT, STOCKIST_ID, STOCKIST_NAME, REASON_ID, PRODUCT_ID, STOCK, REASON, IS_PRESENT, SYSTEM_PO, STORE_PO, PO_DATE, CONTACT_NAME, CONTACT_NO } = data; + let obj = {}; + obj['MID'] = MID; + obj['UserId'] = UserId; + obj['CategoryId'] = CATEGORY_ID; + obj['ProductId'] = PRODUCT_ID; + obj['OrderQty'] = STOCK != '' && STOCK != null && STOCK != "null" && STOCK != "undefined" ? STOCK : 0; + + if (IS_PRESENT == 1) { + allChilds.push(obj); + } + + if (i == 0) { + allData['MID'] = MID; + allData['UserId'] = UserId; + allData['IsPresent'] = IS_PRESENT; + allData['Reason'] = REASON; + allData['ReasonId'] = REASON_ID; + allData['SystemPO'] = SYSTEM_PO; + allData['StorePO'] = STORE_PO != null ? STORE_PO : ''; + allData['ContactName'] = CONTACT_NAME != null ? CONTACT_NAME : ''; + allData['ContactNo'] = CONTACT_NO != null ? CONTACT_NO : ''; + allData['StockistId'] = STOCKIST_ID != null ? STOCKIST_ID : ''; + allData['StockistName'] = STOCKIST_NAME != null ? STOCKIST_NAME : ''; + + } + if (i == txnres2.rows.length - 1) { + allData['OrderSKUList'] = allChilds; + } + } + postData['MID'] = MID; + postData['Keys'] = 'Order'; + postData['JsonData'] = JSON.stringify(allData); + postData['UserId'] = UserId; + console.log('Order postData:', postData); + resolve({ 'PostData': postData }); + } + else { + resolve({ 'PostData': postData }); + } + }, function (txnE, txnerr) { console.log(txnerr); resolve({ 'PostData': postData }); },); + + }); + }).then((val) => { + return val; + }).catch((err) => { + console.log(err); + return postData; + }); + + } + + case 'ORDERSTATUS': { + var postData = {}; + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + + + let q2 = `Select * FROM ${AppTables.ORDERSTATUS} Where STORE_ID='${StoreId}' ` + (!previousDayUpload ? ` and VISIT_DATE='${d2}' ` : '') + ` `; + console.log("orderstatusq--", q2) + + let allChilds = [], allChilds2 = [], allKPIfiles = []; + await txn.executeSql(q2, [], async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + let { STORE_ID, VISIT_DATE, IMAGES, ORDER_ID, ORDER_QTY, PRODUCT_ID, ISPRESENT, ADDED_DATE, INVOICE_TYPE } = data; + let obj = {}, objImg = {}; + + obj['MID'] = MID; + obj['UserId'] = UserId; + obj['StoreId'] = STORE_ID; + obj['OrderId'] = ORDER_ID; + obj['ProductId'] = PRODUCT_ID; + obj['IsPresent'] = ISPRESENT; + // obj['OrderQty']=ORDER_QTY!=null && ORDER_QTY!='undefined' && ORDER_QTY!=''?ORDER_QTY:'0'; + obj['OrderQty'] = ISPRESENT == 0 ? '0' : (ORDER_QTY != null && ORDER_QTY != 'undefined' && ORDER_QTY != '' ? ORDER_QTY : '0'); + obj['InVoiceType'] = INVOICE_TYPE; + + + let imagObj = IMAGES && JSON.parse(IMAGES?.replace(/\n/g, '')); + objImg = { + MID: MID, + UserId: UserId, + OrderId: ORDER_ID, + StoreId: STORE_ID, + InVoiceType: INVOICE_TYPE, + Image1: imagObj?.Image1 || "", + Image2: imagObj?.Image2 || "" + }; + allChilds.push(obj); + + if (!allChilds2.some(img => img.OrderId === objImg.OrderId)) { + allChilds2.push(objImg); + } + // allChilds2.push(objImg) + } + + let result = { + OrderImage: allChilds2, + data: allChilds + }; + + postData['MID'] = MID; + postData['Keys'] = 'OrderStatus'; + postData['JsonData'] = JSON.stringify(result); + postData['UserId'] = UserId; + + console.log('Order Status data:', postData); + resolve({ 'Files': allKPIfiles, 'PostData': postData }); + + } + else { + resolve({ 'PostData': postData }); + } + }, function (txnE, txnerr) { console.log(txnerr); resolve({ 'PostData': postData }); },); + + }); + }).then((val) => { + return val; + }).catch((err) => { + console.log(err); + return postData; + }); + } + + case 'SURVEY': + { + // Survey + var postData = {}; + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + + let selectlist = ` DISTINCT T.SurveyId as SurveyId,T.CategoryId as CategoryId,T.Category as Category,T.MaxLength as MaxLength,T.MinLength as MinLength,T.QuestionImageAllow as QuestionImageAllow,T.DateRange as DateRange,T.Question as Question,T.QuestionId as QuestionId,T.QuestionType as QuestionType,T.OTP as OTP,T1.ANSWER As Answer, T1.ANSWER_ID as AnswerId,T1.IMAGE_ALLOW1 as ImageAllow1,ifnull(T1.IMAGE1,'') as Image1,T1.IMAGE_ALLOW2 as ImageAllow2,ifnull(T1.IMAGE2,'') as Image2,T1.MULTI_OPTIONS_IDS as MultiOptionsIds,T1.IS_DISABLED as isDisabled`; + let join = ` INNER JOIN Mapping_Survey M on T.SurveyId=M.SurveyId`; + let join2 = ` INNER JOIN ${AppTables.SURVEY} T1 on T.SurveyId=T1.SURVEY_ID and T.CategoryId=T1.CATEGORY_ID And T.QuestionId=T1.QUESTION_ID`; + let q2 = `Select ${selectlist} FROM Master_SurveyQuestion T ${join} ${join2} WHERE T1.STORE_ID='${StoreId}' ` + (!previousDayUpload ? ` AND T1.VISIT_DATE= '${d2}' ` : '') + ` and T1.MENU_ID='${MenuId}' ORDER BY T.CategorySequence `; + + let allChilds = [], allKPIfiles = []; + await txn.executeSql(q2, [], async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + let { SurveyId, CategoryId, Category, SubCategoryId, SubCategory, MaxLength, MinLength, QuestionImageAllow, DateRange, Question, QuestionId, QuestionType, OTP, Answer, AnswerId, ImageAllow1, Image1, ImageAllow2, Image2, MultiOptionsIds, isDisabled } = data; + let obj = {}; + + let isQtnDisabled = isDisabled == 1 || isDisabled == '1' ? true : false; + if (!isQtnDisabled) { + obj['MID'] = MID; + obj['UserId'] = UserId; + obj['Store_Id'] = StoreId; + obj['MenuId'] = MenuId; + obj['SurveyId'] = SurveyId; + obj['CategoryId'] = CategoryId; + obj['SubCategoryId'] = SubCategoryId; + obj['QuestionId'] = QuestionId; + obj['QuestionType'] = QuestionType; + obj['Answer'] = Answer; + obj['AnswerId'] = AnswerId; + obj['MultiAnswerId'] = MultiOptionsIds != null && MultiOptionsIds != 'undefined' ? MultiOptionsIds : ''; + obj['AnswerImage1'] = Image1; + obj['AnswerImage2'] = Image2; + + if (((QuestionImageAllow == 1 || QuestionImageAllow == 'true') || (ImageAllow1 == 1 | ImageAllow1 == 'true')) && Image1 != '') { + let imgPath = common_ImagePath + Image1; + let file = { + uri: imgPath, + type: 'image/jpeg', + name: Image1, + filetype: 'image', + folderName: 'SurveyImages', + } + allKPIfiles.push(file); + } + + if ((ImageAllow2 == 1 || ImageAllow2 == 'true') && Image2 != '') { + let imgPath = common_ImagePath + Image2; + let file = { + uri: imgPath, + type: 'image/jpeg', + name: Image2, + filetype: 'image', + folderName: 'SurveyImages', + } + allKPIfiles.push(file); + } + + + if (QuestionType == 'Audio' && Answer != '') { + let filePath = common_ImagePath + 'Recordings/' + Answer; + let file = { + uri: filePath, + type: (Platform.OS == 'ios' ? 'audio/m4a' : 'audio/mp3'), + name: Answer, + filetype: 'audio', + folderName: 'SurveyVoicefiles', + } + allKPIfiles.push(file); + } + + allChilds.push(obj); + } + } + let upkName = UploadKeyName != null && UploadKeyName != 'undefined' && UploadKeyName != '' ? UploadKeyName : 'StoreSurveys'; + + postData['MID'] = MID; + postData['Keys'] = upkName; + postData['JsonData'] = JSON.stringify(allChilds); + postData['UserId'] = UserId; + + // console.log('survey data:',postData); + resolve({ 'Files': allKPIfiles, 'PostData': postData }); + } + else { + resolve({ 'PostData': postData }); + } + }, function (txnE, txnerr) { console.log(txnerr); resolve({ 'PostData': postData }); },); + + }); + }).then((val) => { + return val; + }).catch((err) => { + console.log(err); + return postData; + }); + + } + case 'FEEDBACK': + { + // Feedback + var postData = {}; + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + + let selectlist = ` DISTINCT T.FeedbackCategoryId as CategoryId,T.FeedbackCategory as Category,T.FeedbackQuestionId as QuestionId,T.FeedbackQuestionCode as QuestionCode,T.FeedbackQuestionName as Question,T.QuestionType,T.FQShowCamera,T.FQCameraMandatory,T.FQLengthValidationRequired,T.FQMinimumChar,T.FQMaximumChar,T.FQDecimalPoint,T.FQDateRangeMin,T.FQDateRangeMax,T.FQVoiceLengthInMinutes,T.FQDefaultQuestionEnable,T.FeedbackQuestionSequence,T1.ANSWER As Answer, T1.ANSWER_ID as AnswerId,T1.IMAGE_ALLOW1 as ImageAllow1,T1.IMAGE1 as Image1,T1.MULTI_OPTIONS_IDS as multi_op_ids,T1.IS_DISABLED as isDisabled `; + let join = ` INNER JOIN ${AppTables.FEEDBACK_DATA} T1 on T.FeedbackQuestionId=T1.QUESTION_ID and T.FeedbackCategoryId=T1.CATEGORY_ID`; + let q2 = `Select ${selectlist} FROM Master_FeedbackQuestion T ${join} WHERE T1.STORE_ID='${StoreId}' ` + (!previousDayUpload ? ` AND T1.VISIT_DATE= '${d2}' ` : '') + ` ORDER BY T.FeedbackQuestionSequence `; + + let allChilds = [], allKPIfiles = []; + await txn.executeSql(q2, [], async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + let { CategoryId, Category, MaxLength, MinLength, FQShowCamera, DateRange, Question, QuestionId, QuestionCode, QuestionType, Answer, AnswerId, ImageAllow1, Image1 } = data; + let obj = {}; + obj['MID'] = MID; + obj['UserId'] = UserId; + obj['Store_Id'] = StoreId; + obj['CategoryId'] = CategoryId; + obj['QuestionId'] = QuestionId; + obj['Answer'] = Answer; + obj['AnswerId'] = AnswerId; + obj['AnswerImage1'] = Image1; + + if ((FQShowCamera == 1 || FQShowCamera == 'true') || (ImageAllow1 == 1 | ImageAllow1 == 'true')) { + if (Image1 != '' && Image1 != null) { + let imgPath = common_ImagePath + Image1; + let file = { + uri: imgPath, + type: 'image/jpeg', + name: Image1, + filetype: 'image', + folderName: 'FeedbackImages', + } + allKPIfiles.push(file); + } + } + + if (QuestionType == 'Audio' && Answer != '') { + let filePath = common_ImagePath + 'Recordings/' + Answer; + let file = { + uri: filePath, + type: (Platform.OS == 'ios' ? 'audio/m4a' : 'audio/mp3'), + name: Answer, + filetype: 'audio', + folderName: 'FeedbackVoicefiles', + } + allKPIfiles.push(file); + } + + allChilds.push(obj); + } + postData['MID'] = MID; + postData['Keys'] = 'Feedback'; + postData['JsonData'] = JSON.stringify(allChilds); + postData['UserId'] = UserId; + + resolve({ 'Files': allKPIfiles, 'PostData': postData }); + } + else { + resolve({ 'PostData': postData }); + } + }, function (txnE, txnerr) { console.log(txnerr); resolve({ 'PostData': postData }); },); + + }); + }).then((val) => { + return val; + }).catch((err) => { + console.log(err); + return postData; + }); + + } + case 'WINDOW': + { + var postData = await getDataFor_WINDOW(storeData, KpiData, UserId, previousDayUpload); + console.log("WINDOW postData:", postData) + return postData; + } + case 'WINDOW_IR': + { + var postData = await getDataFor_WINDOW(storeData, KpiData, UserId, previousDayUpload); + console.log("WINDOW IR postData:", postData) + return postData; + } + + case 'POSSALEONEAPP': { + { + var postData = {}; + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + let join = ' cross Join Master_PosSaleDefinition ' + let q1 = ` Select * from ${AppTables.HEADER_POSSALE_DATA} h ${join} WHERE STORE_ID='${StoreId}' ` + (!previousDayUpload ? ` and VISIT_DATE='${d2}' ` : '') + ` ` + let allChilds = [], allDataUp = {}, allKPIfiles = []; + await txn.executeSql(q1, [], async function (txn3, txnres3) { + if (txnres3.rows.length > 0) { + let data = txnres3.rows.item(0); + let { MONTH, IMAGE1, IMAGE2, TOTAL_POS_VALUE, HeaderImageRequired, PosDefinitionId, HeaderImageCount } = data; + let dateParts = MONTH.split(" "); + let month = dateParts.length > 0 ? dateParts[0] : ''; + let yr = dateParts.length > 1 ? dateParts[1] : ''; + + allDataUp['MID'] = MID; + allDataUp['UserId'] = UserId; + allDataUp['StoreId'] = StoreId; + allDataUp['Month'] = month; + allDataUp['Year'] = yr; + allDataUp['TotalPOSValue'] = TOTAL_POS_VALUE != '' && TOTAL_POS_VALUE != null && TOTAL_POS_VALUE != "undefined" ? TOTAL_POS_VALUE : 0; + allDataUp['Image1'] = IMAGE1 || ''; + allDataUp['Image2'] = IMAGE2 || ''; + + let join1 = `inner join Master_PosSaleDefinition m on p.POSDEFINITIONID=m.PosDefinitionId ` + let q = ` Select Distinct p.*,m.PosTable, m.PosField from ${AppTables.POSSALE_DATA} p ${join1} WHERE p.STORE_ID='${StoreId}' ` + (!previousDayUpload ? ` and p.VISIT_DATE='${d2}' ` : '') + ` `; + + + + async function getPosSaleImages() { + let q2 = `select * from ${AppTables.POSSALE_IMAGES} where POSDEFINITIONID='${PosDefinitionId}' and STORE_ID='${StoreId}' and IMAGE1!='' and IMAGE1!='undefined' and IMAGE1 is not null `; + + let allWindowSplitImages = []; + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + txn.executeSql(q2, [], async function (txn2, txnres3) { + + if (txnres3.rows.length > 0) { + for (var j = 0; j < txnres3.rows.length; j++) { + let splitItem = txnres3.rows.item(j); + let { IMAGE1, IMAGE2 } = splitItem + let obj1 = { 'Image1': (IMAGE1 != null ? IMAGE1 : '') }; + obj1['PosDefinitionId'] = PosDefinitionId + obj1['MID'] = MID; + obj1['UserId'] = UserId; + obj1['Store_Id'] = StoreId; + + allWindowSplitImages.push(obj1); + + if (j == txnres3.rows.length - 1) { + console.log('all images added') + resolve(allWindowSplitImages); + } + } + } + else { + resolve(allWindowSplitImages); + } + + }, function (txnE, txnerr) { console.log(txnerr); resolve(allWindowSplitImages); },); + + }); + }); + } + + + + + await txn.executeSql(q, [], async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + let { WINDOW_ID, WINDOW_NAME, POSDEFINITIONID, POS_VALUE, POS_VOLUME, ISPRESENT, REASONID, REASON, PosTable, PosField } = data; + let obj = {}; + + obj['MID'] = MID; + obj['UserId'] = UserId; + obj['Store_Id'] = StoreId; + obj['ChildId'] = WINDOW_ID; + obj['ChildName'] = WINDOW_NAME; + obj['PosTable'] = PosTable; + obj['PosField'] = PosField; + obj['POSDefinitionId'] = POSDEFINITIONID; + obj['POSValue'] = POS_VALUE == null || POS_VALUE == '' ? '0' : POS_VALUE; + obj['POSVolume'] = POS_VOLUME == null || POS_VOLUME == '' ? '0' : POS_VOLUME; + obj['IsPresent'] = ISPRESENT; + obj['ReasonId'] = REASONID == null || REASONID == '' ? '0' : REASONID; + obj['Reason'] = REASON; + + + allChilds.push(obj); + + if (i == txnres2.rows.length - 1) { + allDataUp["POSChilds"] = allChilds; + if (HeaderImageRequired && HeaderImageCount > 0) { + let posSaleImages = await getPosSaleImages(); + allDataUp['PosSaleImages'] = posSaleImages + } + else { + allDataUp['PosSaleImages'] = [] + } + } + } + + postData['MID'] = MID; + postData['Keys'] = 'POSSale'; + postData['JsonData'] = JSON.stringify(allDataUp); + postData['UserId'] = UserId; + console.log('postData POSSALE', postData) + resolve({ 'Files': allKPIfiles, 'PostData': postData }); + } + else { + allDataUp["POSChilds"] = []; + if (HeaderImageRequired && HeaderImageCount > 0) { + let posSaleImages = await getPosSaleImages(); + allDataUp['PosSaleImages'] = posSaleImages + } + else { + allDataUp['PosSaleImages'] = [] + } + postData['MID'] = MID; + postData['Keys'] = 'POSSale'; + postData['JsonData'] = JSON.stringify(allDataUp); + postData['UserId'] = UserId; + console.log('postData POSSALE', postData) + resolve({ 'PostData': postData }); + } + }, + function (txnE, txnerr) { console.log(txnerr); resolve({ 'PostData': postData }); },); + + + } + else { + resolve({ 'PostData': postData }); + } + + }, function (txnE, txnerr) { console.log(txnerr); resolve({ 'PostData': postData }); },); + }); + }).then((val) => { + return val; + }).catch((err) => { + console.log(err); + return postData; + }); + } + } + + case 'POSM': + { + var postData = {}; + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + + let selectlist = ` Distinct w.STORE_ID as StoreId,w.POSM_HEADER_ID as posmHeaderId,wd.POSMDefinitionId,wd.PosmId,wd.POSMName,wd.PosmTypeId,wd.POSMTypeName,wd.POSMTable,wd.POSMField,wd.POSMValue,wd.ChildName,wd.POSMRefImage,w.IS_PRESENT as IsPresent,wd.POSMNotExistCamera,w.POSM_NA_IMAGE as POSMNAImage,w.POSM_IMAGE1 as Image1,w.POSM_IMAGE2 as Image2,wd.POSMExistReasonEnable,wd.POSMNotExistReasonEnable,w.REASON_ID as ReasonId,w.REASON as Reason,wd.POSMImage1,wd.POSMImage2,w.REASON_REMARK`; + let join = ` inner join Master_POSMDefinition wd on w.POSM_DEFINITION_ID=wd.POSMDefinitionId `; + let q = ` Select ${selectlist} from ${AppTables.POSM_HDR_DATA} w ${join} where w.STORE_ID='${StoreId}' `; + + let allChilds = [], allKPIfiles = []; + await txn.executeSql(q, [], async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + let { posmHeaderId, POSMDefinitionId, PosmId, POSMName, PosmTypeId, POSMTypeName, POSMTable, POSMField, POSMValue, ChildName, IsPresent, POSMNotExistCamera, POSMNAImage, Image1, Image2, POSMExistReasonEnable, POSMNotExistReasonEnable, ReasonId, Reason, POSMImage1, POSMImage2, REASON_REMARK } = data; + let obj = {}; + + let isNaCamAvl = (POSMNotExistCamera == 'true' || POSMNotExistCamera == 1) ? 1 : 0; + let isReasonEnable = (POSMExistReasonEnable == 'true' || POSMExistReasonEnable == 1) ? 1 : 0; + let isNAReasonEnable = (POSMNotExistReasonEnable == 'true' || POSMNotExistReasonEnable == 1) ? 1 : 0; + let isImage1 = (POSMImage1 == 'true' || POSMImage1 == 1) ? 1 : 0; + let isImage2 = (POSMImage2 == 'true' || POSMImage2 == 1) ? 1 : 0; + + + obj['MID'] = MID; + obj['UserId'] = UserId; + obj['Store_Id'] = StoreId; + obj['POSMDefinitionId'] = POSMDefinitionId; + obj['POSMId'] = PosmId; + obj['POSMTable'] = POSMTable; + obj['POSMField'] = POSMField; + obj['POSMValue'] = POSMValue; + obj['ChildName'] = ChildName; + obj['IsPresent'] = IsPresent; + obj['POSMNotExistImage'] = isNaCamAvl == 1 ? POSMNAImage : ''; + obj['Image1'] = isImage1 == 1 && IsPresent == 1 ? Image1 : ''; + obj['Image2'] = isImage2 == 1 && IsPresent == 1 ? Image2 : ''; + obj['ReasonId'] = IsPresent == 1 ? 0 : ReasonId; + obj['ReasonRemark'] = REASON_REMARK; + + if (isNaCamAvl == 1 && POSMNAImage != '') { + let imgPath = common_ImagePath + POSMNAImage; + let file = { + uri: imgPath, + type: 'image/jpeg', + name: WindowNAImage, + filetype: 'image', + folderName: 'POSMImages', + } + allKPIfiles.push(file); + } + + if (isImage1 == 1 && Image1 != '') { + let imgPath = common_ImagePath + Image1; + let file = { + uri: imgPath, + type: 'image/jpeg', + name: Image1, + filetype: 'image', + folderName: 'POSMImages', + } + allKPIfiles.push(file); + } + + if (isImage2 == 1 && Image2 != '') { + let imgPath = common_ImagePath + Image2; + let file = { + uri: imgPath, + type: 'image/jpeg', + name: Image2, + filetype: 'image', + folderName: 'POSMImages', + } + allKPIfiles.push(file); + } + + if (IsPresent == 1) { + async function getPOSMQA() { + + let selectlist_q = ` DISTINCT q.QUESTION_ID as POSMQuestionId,q.QUESTION_CODE as POSMQuestionCode,wq.POSMQuestionName,wq.QuestionType,wq.PQShowCamera,wq.PQCameraMandatory,wq.PQLengthValidationRequired,wq.PQMinimumChar,wq.PQMaximumChar,wq.PQDecimalPoint,wq.PQDateRangeMin,wq.PQDateRangeMax,wq.PQVoiceLengthInMinutes,wq.PQDefaultQuestionEnable,q.ANSWER as Answer,q.ANSWER_ID as AnswerId,q.MULTI_OPTIONS_IDS as multi_op_ids,q.IMAGE_ALLOW1 as PAShowCamera,q.IMAGE1 as Image1 `; + let join2_q = ` inner join Mapping_POSMQuestion mq on mq.POSMQuestionId=wq.POSMQuestionId `; + let join_q = ` inner join Master_POSMQuestion wq on wq.POSMQuestionId=q.QUESTION_ID `; + let q2 = `select ${selectlist_q} from ${AppTables.POSM_CHILD_DATA} q ${join_q} ${join2_q} where q.STORE_ID='${StoreId}' and q.POSM_DEFINITION_ID='${POSMDefinitionId}' and q.POSM_ID='${PosmId}' order by wq.POSMQuestionSequence `; + + let allQAs = []; + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + txn.executeSql(q2, [], async function (txn2, txnres3) { + + if (txnres3.rows.length > 0) { + for (var j = 0; j < txnres3.rows.length; j++) { + let QAData = txnres3.rows.item(j); + let { POSMQuestionId, AnswerId, Answer, PAShowCamera, Image1 } = QAData + let showImage1 = (PAShowCamera == 'true' || PAShowCamera == 1) ? 1 : 0; + let obj1 = {}; + obj1['MID'] = MID; + obj1['POSMDefinitionId'] = POSMDefinitionId + obj1['POSMId'] = PosmId + obj1['POSMQuestionId'] = POSMQuestionId + obj1['AnswerId'] = AnswerId + obj1['Answer'] = Answer + obj1['Image1'] = (showImage1 == 1 ? Image1 : '') + + allQAs.push(obj1); + + if (showImage1 == 1 && Image1 != null && Image1 != '') { + let imgPath = common_ImagePath + Image1; + let file = { + uri: imgPath, + type: 'image/jpeg', + name: Image1, + filetype: 'image', + folderName: 'POSMImages', + } + allKPIfiles.push(file); + } + if (j == txnres3.rows.length - 1) { + resolve(allQAs); + } + } + } + else { + resolve(allQAs); + } + + }, function (txnE, txnerr) { console.log('test', txnerr); resolve(allQAs); },); + }); + }); + } + obj['QuestionAnswers'] = await getPOSMQA(); + console.log(obj); + + } + else { + obj['QuestionAnswers'] = [] + } + + allChilds.push(obj); + } + postData['MID'] = MID; + postData['Keys'] = 'POSM'; + postData['JsonData'] = JSON.stringify(allChilds); + postData['UserId'] = UserId; + + // console.log('POSM',postData) + resolve({ 'Files': allKPIfiles, 'PostData': postData }); + } + else { + resolve({ 'PostData': postData }); + } + }, function (txnE, txnerr) { console.log(txnerr); resolve({ 'PostData': postData }); },); + + }); + }).then((val) => { + return val; + }).catch((err) => { + console.log(err); + return postData; + }); + } + case 'STOREIMG': + { + // StoreImages + var postData = {}; + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + let q2 = ` SELECT * FROM ${AppTables.STORE_IMAGES} WHERE STORE_ID='${StoreId}' ` + (!previousDayUpload ? ` and VISIT_DATE='${d2}' ` : '') + ` `; + let allChilds = [], allKPIfiles = []; + await txn.executeSql(q2, [], async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + let { STORE_ID, VISIT_DATE, IMAGE_TYPE_ID, IMAGE_TYPE, IMAGE, LAT, LNG, ADDED_DATE } = data; + let obj = {}; + obj['MID'] = MID; + obj['User_Id'] = UserId; + obj['ImageTypeId'] = IMAGE_TYPE_ID; + obj['Image'] = IMAGE; + obj['Latitude'] = LAT || 0; + obj['Longitude'] = LNG || 0; + + if (IMAGE != null && IMAGE != '') { + let imgPath = common_ImagePath + IMAGE; + let file = { + uri: imgPath, + type: 'image/jpeg', + name: IMAGE, + filetype: 'image', + folderName: 'StoreImages', + } + allKPIfiles.push(file); + } + + allChilds.push(obj); + } + postData['MID'] = MID; + postData['Keys'] = 'StoreImages'; + postData['JsonData'] = JSON.stringify(allChilds); + postData['UserId'] = UserId; + + // console.log('StoreImages postData',postData); + resolve({ 'Files': allKPIfiles, 'PostData': postData }); + } + else { + resolve({ 'PostData': postData }); + } + }, function (txnE, txnerr) { console.log(txnerr); resolve({ 'PostData': postData }); },); + + }); + }).then((val) => { + return val; + }).catch((err) => { + console.log(err); + return postData; + }); + + } + case 'SHELFTALKER': + { + + // ShelfTalker + var postData = {}; + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + let txn1 = txn; + let selectlist = ` Distinct w.STORE_ID as StoreId,w.ST_HEADER_ID as stHeaderId,wd.StDefinitionId,wd.ShelfTalkerId,wd.StName,wd.StTable,wd.StField,wd.StValue,wd.ChildName,wd.StRefImage,wd.StElementCheckAssortment,wd.StElementStockRequired,w.IS_PRESENT as IsPresent,wd.StNotExistCamera,w.ST_NA_IMAGE as StNAImage,wd.StExistReasonEnable,wd.StNotExistReasonEnable,w.REASON_ID as ReasonId,w.REASON as Reason,w.REMARK as Remark,wd.NoOfSplit,wd.StImage1,wd.StImage2,wd.StImage1Lable,wd.StImage2Lable,wd.StImage1CameraGrid,wd.StImage2CameraGrid`; + let join = ` inner join Master_ShelfTalkerDefinition wd on w.ST_DEFINITION_ID=wd.StDefinitionId `; + let q = ` Select ${selectlist} from ${AppTables.ST_HDR_DATA} w ${join} where w.STORE_ID='${StoreId}' `; + + let allChilds = [], allKPIfiles = []; + await txn.executeSql(q, [], async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + let { stHeaderId, StDefinitionId, ShelfTalkerId, StName, StTable, StField, StValue, ChildName, StElementStockRequired, StElementCheckAssortment, NoOfSplit, IsPresent, StNotExistCamera, StNAImage, StExistReasonEnable, StNotExistReasonEnable, ReasonId, Reason, StImage1, StImage2, Remark } = data; + let obj = {}; + + let isStockReq = (StElementStockRequired == 'true' || StElementStockRequired == 1) ? 1 : 0; + let isCheckAssrt = (StElementCheckAssortment == 'true' || StElementCheckAssortment == 1) ? 1 : 0; + let isNaCamAvl = (StNotExistCamera == 'true' || StNotExistCamera == 1) ? 1 : 0; + let isReasonEnable = (StExistReasonEnable == 'true' || StExistReasonEnable == 1) ? 1 : 0; + let isNAReasonEnable = (StNotExistReasonEnable == 'true' || StNotExistReasonEnable == 1) ? 1 : 0; + let isImage1 = (StImage1 == 'true' || StImage1 == 1) ? 1 : 0; + let isImage2 = (StImage2 == 'true' || StImage2 == 1) ? 1 : 0; + + + obj['MID'] = MID; + obj['UserId'] = UserId; + obj['Store_Id'] = StoreId; + obj['StDefinitionId'] = StDefinitionId; + obj['ShelfTalkerId'] = ShelfTalkerId; + obj['StTable'] = StTable; + obj['StField'] = StField; + obj['StValue'] = StValue; + obj['ChildName'] = ChildName; + obj['IsPresent'] = IsPresent; + obj['StNotExistImage'] = isNaCamAvl == 1 ? StNAImage : ''; + obj['ReasonId'] = ReasonId; + obj['Reason'] = Reason; + obj['Remark'] = Remark != null ? Remark : ''; + + + + if (isNaCamAvl == 1 && StNAImage != '') { + let imgPath = common_ImagePath + StNAImage; + let file = { + uri: imgPath, + type: 'image/jpeg', + name: StNAImage, + filetype: 'image', + folderName: 'ShelfTalkerImages', + } + allKPIfiles.push(file); + } + + + if (IsPresent == 1 && parseInt(NoOfSplit) > 0) { + console.log('add split windows') + + + async function getWindowSplits() { + let q2 = `select * from ${AppTables.ST_IMAGES} where ST_HEADER_ID='${stHeaderId}' and STORE_ID='${StoreId}' `; + + let allWindowSplitImages = []; + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + + txn.executeSql(q2, [], async function (txn2, txnres3) { + + if (txnres3.rows.length > 0) { + for (var j = 0; j < txnres3.rows.length; j++) { + let splitItem = txnres3.rows.item(j); + let { IMAGE1, IMAGE2 } = splitItem + let obj1 = { 'Image1': (isImage1 == 1 && IMAGE1 != null ? IMAGE1 : ''), 'Image2': (isImage2 == 1 && IMAGE2 != null ? IMAGE2 : '') }; + obj1['StDefinitionId'] = StDefinitionId + obj1['ShelfTalkerId'] = ShelfTalkerId + obj1['MID'] = MID; + + allWindowSplitImages.push(obj1); + if (isImage1 == 1 && IMAGE1 != null && IMAGE1 != '') { + let imgPath = common_ImagePath + IMAGE1; + let file = { + uri: imgPath, + type: 'image/jpeg', + name: IMAGE1, + filetype: 'image', + folderName: 'ShelfTalkerImages', + } + allKPIfiles.push(file); + } + if (isImage2 == 1 && IMAGE2 != null && IMAGE2 != '') { + let imgPath = common_ImagePath + IMAGE2; + let file = { + uri: imgPath, + type: 'image/jpeg', + name: IMAGE2, + filetype: 'image', + folderName: 'ShelfTalkerImages', + } + allKPIfiles.push(file); + } + + if (j == txnres3.rows.length - 1) { + console.log('all images added') + resolve(allWindowSplitImages); + + } + } + } + else { + resolve(allWindowSplitImages); + } + + }, function (txnE, txnerr) { console.log(txnerr); resolve(allWindowSplitImages); },); + + }); + }); + } + + obj['StSplitImages'] = await getWindowSplits(); + } + + if (IsPresent == 1) { + + async function getWindowQA() { + + let selectlist_q1 = `DISTINCT q.QUESTION_ID as StQuestionId,q.QUESTION_CODE as StQuestionCode,wq.StQuestionName,wq.QuestionType,wq.StqShowCamera,wq.StqCameraMandatory,wq.StqLengthValidationRequired,wq.StqMinimumChar,wq.StqMaximumChar,wq.StqDecimalPoint,wq.StqDateRangeMin,wq.StqDateRangeMax,wq.StqVoiceLengthInMinutes,wq.StqDefaultQuestionEnable,q.ANSWER as Answer,q.ANSWER_ID as AnswerId,q.MULTI_OPTIONS_IDS as multi_op_ids,q.IMAGE_ALLOW1 as StaShowCamera,q.IMAGE1 as Image1 `; + let join_q2 = ` inner join Mapping_ShelfTalkerQuestion mq on mq.StQuestionId=wq.StQuestionId `; + let join_q1 = ` inner join Master_ShelfTalkerQuestion wq on wq.StQuestionId=q.QUESTION_ID `; + let q3 = `select ${selectlist_q1} from ${AppTables.ST_CHILD_DATA} q ${join_q1} ${join_q2} where q.STORE_ID='${StoreId}' and q.ST_DEFINITION_ID='${StDefinitionId}' and q.SHELFTALKER_ID='${ShelfTalkerId}' order by wq.StQuestionSequence `; + + let allQAs = []; + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + txn.executeSql(q3, [], async function (txn2, txnres3) { + + if (txnres3.rows.length > 0) { + for (var j = 0; j < txnres3.rows.length; j++) { + let QAData = txnres3.rows.item(j); + let { StQuestionId, AnswerId, Answer, StaShowCamera, Image1 } = QAData + let showImage1 = (StaShowCamera == 'true' || StaShowCamera == 1) ? 1 : 0; + let obj1 = {}; + obj1['MID'] = MID; + obj1['StDefinitionId'] = StDefinitionId + obj1['ShelfTalkerId'] = ShelfTalkerId + obj1['StQuestionId'] = StQuestionId + obj1['AnswerId'] = AnswerId + obj1['Answer'] = Answer + obj1['Image1'] = (showImage1 == 1 ? Image1 : '') + + allQAs.push(obj1); + + if (showImage1 == 1 && Image1 != null && Image1 != '') { + let imgPath = common_ImagePath + Image1; + let file = { + uri: imgPath, + type: 'image/jpeg', + name: Image1, + filetype: 'image', + folderName: 'ShelfTalkerImages', + } + allKPIfiles.push(file); + } + if (j == txnres3.rows.length - 1) { + resolve(allQAs); + } + } + } + else { + resolve(allQAs); + } + + }, function (txnE, txnerr) { console.log('test', txnerr); resolve(allQAs); },); + }); + }); + } + + obj['QuestionAnswers'] = await getWindowQA(); + + if (isStockReq == 1) { + async function getWindowStock() { + return new Promise((resolve, reject) => { + let allStock = []; + let join_s1 = '' + if (isCheckAssrt == 1) { + join_s1 = ` inner join Mapping_ProductAssortmentStorewise a on a.ProductId=s.ST_STOCK_VALUE`; + } + let selectlist_s1 = ` Distinct s.ST_STOCK_DEFINITION_ID as StStockDefinitionId, s.ST_DEFINITION_ID as StDefinitionId,s.ST_STOCK_TABLE as StStockTable,s.ST_STOCK_FIELD as StStockField,s.ST_STOCK_VALUE as StStockValue,s.ST_STOCK_MBQ as StStockMBQ,s.PRODUCT_NAME as ProductName, s.STOCK as Stock,s.IS_PROMO_PRESENT as isPromoPresent`; + let q4 = `select ${selectlist_s1} from ${AppTables.ST_STOCK_DATA} s ${join_s1} where s.ST_DEFINITION_ID='${StDefinitionId}' and s.STORE_ID='${StoreId}' `; + if (isCheckAssrt) { + q4 += ` and a.StoreId='${StoreId}' `; + } + q4 += ` order by s.PRODUCT_NAME `; + + + db.transaction(async function (txn) { + + txn.executeSql(q4, [], async function (txn2, txnres3) { + if (txnres3.rows.length > 0) { + for (var j = 0; j < txnres3.rows.length; j++) { + let SData = txnres3.rows.item(j); + let { StStockDefinitionId, StStockValue, Stock, isPromoPresent } = SData + + let obj1 = {}; + obj1['MID'] = MID; + obj1['StDefinitionId'] = StDefinitionId + obj1['ShelfTalkerId'] = ShelfTalkerId + obj1['StStockDefinitionId'] = StStockDefinitionId + obj1['StStockValue'] = StStockValue + obj1['Stock'] = Stock != '' && Stock != null && Stock != "null" && Stock != "undefined" ? Stock : 0; + obj1['isPromoPresent'] = isPromoPresent + + allStock.push(obj1); + if (j == txnres3.rows.length - 1) { + resolve(allStock); + } + } + } + else { + resolve(allStock); + } + + }, function (txnE, txnerr) { console.log(txnerr); resolve(allStock); },); + + }); + }); + } + obj['StockData'] = await getWindowStock(); + } + else { + obj['StockData'] = []; + } + } + else { + obj['StSplitImages'] = []; + obj['QuestionAnswers'] = [] + obj['StockData'] = []; + + } + + allChilds.push(obj); + } + postData['MID'] = MID; + postData['Keys'] = 'ShelfTalker'; + postData['JsonData'] = JSON.stringify(allChilds); + postData['UserId'] = UserId; + + + + resolve({ 'Files': allKPIfiles, 'PostData': postData }); + } + else { + resolve({ 'PostData': postData }); + } + }, function (txnE, txnerr) { console.log(txnerr); resolve({ 'PostData': postData }); },); + + }); + }).then((val) => { + return val; + }).catch((err) => { + console.log(err); + return postData; + }); + } + case 'PROMOTIONONEAPP': + { + // PromotionOneApp + var postData = {}; + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + let txn1 = txn; + let selectlist = ` Distinct w.STORE_ID as StoreId,w.PROMO_HEADER_ID as PromoHeaderId,wd.PromoDefinitionId,wd.PromoId,wd.PromoName,wd.PromoTable,wd.PromoField,wd.PromoValue,wd.ChildName,wd.PromoRefImage,wd.PromoElementCheckAssortment,wd.PromoElementStockRequired,w.IS_PRESENT as IsPresent,wd.PromoNotExistCamera,w.PROMO_NA_IMAGE as PromoNAImage,wd.PromoExistReasonEnable,wd.PromoNotExistReasonEnable,w.REASON_ID as ReasonId,w.REASON as Reason,w.REMARK as Remark,wd.NoOfSplit,wd.PromoImage1,wd.PromoImage2,wd.PromoImage1Lable,wd.PromoImage2Lable,wd.PromoImage1CameraGrid,wd.PromoImage2CameraGrid,wd.StockQtyRequired,w.REASON_REMARK`; + let join = ` inner join Master_PromotionDefinition wd on w.PROMO_DEFINITION_ID=wd.PromoDefinitionId `; + let q = ` Select ${selectlist} from ${AppTables.PROMO_HDR_DATA} w ${join} where w.STORE_ID='${StoreId}' `; + + let allChilds = [], allKPIfiles = []; + await txn.executeSql(q, [], async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + let { PromoHeaderId, PromoDefinitionId, PromoId, PromoName, PromoTable, PromoField, PromoValue, ChildName, PromoElementStockRequired, PromoElementCheckAssortment, NoOfSplit, IsPresent, PromoNotExistCamera, PromoNAImage, PromoExistReasonEnable, PromoNotExistReasonEnable, ReasonId, Reason, PromoImage1, PromoImage2, Remark, PromoImage1Lable, PromoImage2Lable, REASON_REMARK } = data; + let obj = {}; + + let isStockReq = (PromoElementStockRequired == 'true' || PromoElementStockRequired == 1) ? 1 : 0; + let isCheckAssrt = (PromoElementCheckAssortment == 'true' || PromoElementCheckAssortment == 1) ? 1 : 0; + let isNaCamAvl = (PromoNotExistCamera == 'true' || PromoNotExistCamera == 1) ? 1 : 0; + let isReasonEnable = (PromoExistReasonEnable == 'true' || PromoExistReasonEnable == 1) ? 1 : 0; + let isNAReasonEnable = (PromoNotExistReasonEnable == 'true' || PromoNotExistReasonEnable == 1) ? 1 : 0; + let isImage1 = (PromoImage1 == 'true' || PromoImage1 == 1) ? 1 : 0; + let isImage2 = (PromoImage2 == 'true' || PromoImage2 == 1) ? 1 : 0; + + + obj['MID'] = MID; + obj['UserId'] = UserId; + obj['Store_Id'] = StoreId; + obj['PromoDefinitionId'] = PromoDefinitionId; + obj['PromoId'] = PromoId; + obj['PromoTable'] = PromoTable; + obj['PromoField'] = PromoField; + obj['PromoValue'] = PromoValue; + obj['ChildName'] = ChildName; + obj['IsPresent'] = IsPresent; + obj['PromoNotExistImage'] = isNaCamAvl == 1 ? PromoNAImage : ''; + obj['ReasonId'] = ReasonId; + obj['Reason'] = Reason; + obj['Remark'] = Remark != null ? Remark : ''; + obj['ReasonRemark'] = REASON_REMARK; + + if (isNaCamAvl == 1 && PromoNAImage != '') { + let imgPath = common_ImagePath + PromoNAImage; + let file = { + uri: imgPath, + type: 'image/jpeg', + name: PromoNAImage, + filetype: 'image', + folderName: 'PromotionImages', + } + allKPIfiles.push(file); + } + + + if (IsPresent == 1 && parseInt(NoOfSplit) > 0) { + console.log('add split windows') + + + async function getWindowSplits() { + let q2 = `select * from ${AppTables.PROMO_IMAGES} where PROMO_HEADER_ID='${PromoHeaderId}' and STORE_ID='${StoreId}' `; + + let allWindowSplitImages = []; + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + + txn.executeSql(q2, [], async function (txn2, txnres3) { + + if (txnres3.rows.length > 0) { + for (var j = 0; j < txnres3.rows.length; j++) { + let splitItem = txnres3.rows.item(j); + let { IMAGE1, IMAGE2 } = splitItem + let obj1 = { 'Image1': (isImage1 == 1 && IMAGE1 != null && IMAGE1 != '' && IMAGE1 != 'undefined' ? IMAGE1 : ''), 'Image2': (isImage2 == 1 && IMAGE2 != null && IMAGE2 != '' && IMAGE2 != 'undefined' ? IMAGE2 : '') }; + obj1['PromoDefinitionId'] = PromoDefinitionId + obj1['PromoId'] = PromoId + obj1['MID'] = MID; + // obj1['PromoImage1Lable']=PromoImage1Lable; + // obj1['PromoImage2Lable']=PromoImage2Lable; + + + allWindowSplitImages.push(obj1); + if (isImage1 == 1 && IMAGE1 != null && IMAGE1 != '' && IMAGE1 != 'undefined') { + let imgPath = common_ImagePath + IMAGE1; + let file = { + uri: imgPath, + type: 'image/jpeg', + name: IMAGE1, + filetype: 'image', + folderName: 'PromotionImages', + } + allKPIfiles.push(file); + } + if (isImage2 == 1 && IMAGE2 != null && IMAGE2 != '' && IMAGE2 != 'undefined') { + let imgPath = common_ImagePath + IMAGE2; + let file = { + uri: imgPath, + type: 'image/jpeg', + name: IMAGE2, + filetype: 'image', + folderName: 'PromotionImages', + } + allKPIfiles.push(file); + } + + if (j == txnres3.rows.length - 1) { + console.log('all images added') + resolve(allWindowSplitImages); + + } + } + } + else { + resolve(allWindowSplitImages); + } + + }, function (txnE, txnerr) { console.log(txnerr); resolve(allWindowSplitImages); },); + + }); + }); + } + + obj['PromoSplitImages'] = await getWindowSplits(); + } + + if (IsPresent == 1) { + + async function getWindowQA() { + + let selectlist_q1 = ` DISTINCT q.QUESTION_ID as PromoQuestionId,q.IS_DISABLED,q.QUESTION_CODE as PromoQuestionCode,wq.PromoQuestionName,wq.QuestionType,wq.PromoqShowCamera,wq.PromoqCameraMandatory,wq.PromoqLengthValidationRequired,wq.PromoqMinimumChar,wq.PromoqMaximumChar,wq.PromoqDecimalPoint,wq.PromoqDateRangeMin,wq.PromoqDateRangeMax,wq.PromoqVoiceLengthInMinutes,wq.PromoqDefaultQuestionEnable,q.ANSWER as Answer,q.ANSWER_ID as AnswerId,q.MULTI_OPTIONS_IDS as multi_op_ids,q.IMAGE_ALLOW1 as PromoaShowCamera,q.IMAGE1 as Image1 `; + let join_q2 = ` inner join Mapping_PromotionQuestion mq on mq.PromoQuestionId=wq.PromoQuestionId `; + let join_q1 = ` inner join Master_PromotionQuestion wq on wq.PromoQuestionId=q.QUESTION_ID `; + let q3 = `select ${selectlist_q1} from ${AppTables.PROMO_CHILD_DATA} q ${join_q1} ${join_q2} where q.STORE_ID='${StoreId}' and q.PROMO_DEFINITION_ID='${PromoDefinitionId}' and q.PROMO_ID='${PromoId}' order by wq.PromoQuestionSequence `; + + let allQAs = []; + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + txn.executeSql(q3, [], async function (txn2, txnres3) { + console.log('getWindowQA PROMOoneapp:', txnres3.rows.length); + if (txnres3.rows.length > 0) { + for (var j = 0; j < txnres3.rows.length; j++) { + let QAData = txnres3.rows.item(j); + let { PromoQuestionId, IS_DISABLED, AnswerId, Answer, PromoaShowCamera, Image1 } = QAData + let showImage1 = (PromoaShowCamera == 'true' || PromoaShowCamera == 1) ? 1 : 0; + let obj1 = {}; + obj1['MID'] = MID; + obj1['PromoDefinitionId'] = PromoDefinitionId; + obj1['PromoId'] = PromoId; + obj1['PromoQuestionId'] = PromoQuestionId + obj1['AnswerId'] = AnswerId + obj1['Answer'] = Answer + obj1['Image1'] = (showImage1 == 1 && Image1 != null && Image1 != '' && Image1 != 'undefined' ? Image1 : '') + + console.log("IS_DISABLED-----", IS_DISABLED, IS_DISABLED == "0") + if (IS_DISABLED == "0") { + allQAs.push(obj1); + } + if (showImage1 == 1 && Image1 != null && Image1 != '' && Image1 != 'undefined') { + let imgPath = common_ImagePath + Image1; + let file = { + uri: imgPath, + type: 'image/jpeg', + name: Image1, + filetype: 'image', + folderName: 'PromotionImages', + } + allKPIfiles.push(file); + } + if (j == txnres3.rows.length - 1) { + resolve(allQAs); + } + } + } + else { + resolve(allQAs); + } + + }, function (txnE, txnerr) { console.log('test', txnerr); resolve(allQAs); },); + }); + }); + } + + obj['QuestionAnswers'] = await getWindowQA(); + + if (isStockReq == 1) { + async function getWindowStock() { + return new Promise((resolve, reject) => { + let allStock = []; + let join_s1 = '' + if (isCheckAssrt == 1) { + join_s1 = ` inner join Mapping_ProductAssortmentStorewise a on a.ProductId=s.PROMO_STOCK_VALUE`; + } + let selectlist_s1 = ` Distinct s.PROMO_STOCK_DEFINITION_ID as PromoStockDefinitionId, s.PROMO_DEFINITION_ID as PromoDefinitionId,s.PROMO_STOCK_TABLE as PromoStockTable,s.PROMO_STOCK_FIELD as PromoStockField,s.PROMO_STOCK_VALUE as PromoStockValue,s.PROMO_STOCK_MBQ as PromoStockMBQ,s.PRODUCT_NAME as ProductName, s.STOCK as Stock,s.IS_PROMO_PRESENT as isPromoPresent `; + let q4 = `select ${selectlist_s1} from ${AppTables.PROMO_STOCK_DATA} s ${join_s1} where s.PROMO_DEFINITION_ID='${PromoDefinitionId}' and s.STORE_ID='${StoreId}' `; + if (isCheckAssrt) { + q4 += ` and a.StoreId='${StoreId}' `; + } + q4 += ` order by s.PRODUCT_NAME `; + + + db.transaction(async function (txn) { + + txn.executeSql(q4, [], async function (txn2, txnres3) { + if (txnres3.rows.length > 0) { + for (var j = 0; j < txnres3.rows.length; j++) { + let SData = txnres3.rows.item(j); + let { PromoStockDefinitionId, PromoStockTable, PromoStockField, PromoStockValue, PromoStockMBQ, ProductName, Stock, isPromoPresent } = SData + + let obj1 = {}; + obj1['MID'] = MID; + obj1['PromoDefinitionId'] = PromoDefinitionId; + obj1['PromoId'] = PromoId; + obj1['PromoStockDefinitionId'] = PromoStockDefinitionId + obj1['PromoStockTable'] = PromoStockTable + obj1['PromoStockField'] = PromoStockField + obj1['PromoStockValue'] = PromoStockValue + obj1['PromoStockMBQ'] = PromoStockMBQ + obj1['ProductName'] = ProductName + obj1['Stock'] = Stock != '' && Stock != null && Stock != "null" && Stock != "undefined" ? Stock : 0; + obj1['isPromoPresent'] = isPromoPresent + + allStock.push(obj1); + if (j == txnres3.rows.length - 1) { + resolve(allStock); + } + } + } + else { + resolve(allStock); + } + + }, function (txnE, txnerr) { console.log(txnerr); resolve(allStock); },); + + }); + }); + } + obj['StockData'] = await getWindowStock(); + } + else { + obj['StockData'] = []; + } + } + else { + obj['PromoSplitImages'] = []; + obj['QuestionAnswers'] = [] + obj['StockData'] = []; + + } + + allChilds.push(obj); + } + postData['MID'] = MID; + postData['Keys'] = 'PromotionOneApp'; + postData['JsonData'] = JSON.stringify(allChilds); + postData['UserId'] = UserId; + + + // console.log('PromotionOneApp:',postData); + resolve({ 'Files': allKPIfiles, 'PostData': postData }); + } + else { + resolve({ 'PostData': postData }); + } + }, function (txnE, txnerr) { console.log(txnerr); resolve({ 'PostData': postData }); },); + + }); + }).then((val) => { + return val; + }).catch((err) => { + console.log(err); + return postData; + }); + } + case 'PAIDVISIONEAPP': + { + var postData = await getDataFor_PVONEAPP(storeData, KpiData, UserId, previousDayUpload); + console.log("PAIDVISIONEAPP postData:", postData) + return postData; + } + case 'WAREHOUSEDEPLOY': + { + var postData = await getDataForWareHouseDeploy(storeData, KpiData, UserId, previousDayUpload); + console.log("WAREHOUSEDEPLOY postData:", postData) + return postData; + } + case 'WAREHOUSECAMPAIGN': + { + var postData = await getWAREHOUSECAMPAIGN(storeData, KpiData, UserId, previousDayUpload); + console.log("WAREHOUSEDEPLOYCamp postData:", postData) + return postData; + } + case 'TGBASEDONEAPP': + { + var postData = await getDataFor_VISICOLONEAPP(storeData, KpiData, UserId, previousDayUpload); + console.log("TGBASEDONEAPP postData:", postData) + return postData; + } + + case 'PAIDVISIONEAPP_IR': + { + var postData = await getDataFor_PVONEAPP(storeData, KpiData, UserId, previousDayUpload); + console.log("PAIDVISIONEAPP postData:", postData) + return postData; + } + case 'PROGRAMONEAPP': + { + var postData = await getDataFor_PROG_ONEAPP(storeData, KpiData, UserId, previousDayUpload); + console.log("PAIDVISIONEAPP postData:", postData) + return postData; + } + case 'SOSONEAPP': + { + // SOSOneApp + var postData = await getDataFor_SOSONEAPP(storeData, KpiData, UserId, previousDayUpload); + console.log("SOSOneApp postData:", postData) + return postData; + } + + case 'SOSEYELEVELONEAPP': + { + // SOSOneApp + var postData = await getDataFor_SOSEyeLevelONEAPP(storeData, KpiData, UserId, previousDayUpload); + console.log("SOSOneApp postData:", postData) + return postData; + } + case 'SOSONEAPP_IR': + { + // SOSOneApp + var postData = await getDataFor_SOSONEAPP(storeData, KpiData, UserId, previousDayUpload); + console.log("SOSOneApp IR postData:", postData) + return postData; + } + case 'CATEXEONEAPP': + { + // CatExeOneApp + var postData = {}; + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + let txn1 = txn; + + let selectlist = ` Distinct w.STORE_ID as StoreId,w.CAT_HEADER_ID as CatHeaderId,wd.CategoryDefinitionId,wd.CategoryId,wd.CategoryName,wd.CategoryRefImage,wd.CategoryElementCheckAssortment,wd.CategoryElementStockRequired,w.IS_PRESENT as IsPresent,wd.CategoryNotExistCamera,w.CATE_NA_IMAGE as CatNAImage,wd.CategoryExistReasonEnable,wd.CategoryNotExistReasonEnable,w.REASON_ID as ReasonId,w.REASON as Reason,w.REMARK as Remark,wd.NoOfSplit,wd.CategoryImage1,wd.CategoryImage2,wd.CategoryImage1Lable,wd.CategoryImage2Lable,wd.CategoryImage1CameraGrid,wd.CategoryImage2CameraGrid,wd.StockQtyRequired`; + let join = ` inner join Master_CategoryDefinition wd on w.CAT_DEFINITION_ID=wd.CategoryDefinitionId `; + let q = ` Select ${selectlist} from ${AppTables.CATEXE_HDR_DATA} w ${join} where w.STORE_ID='${StoreId}' `; + + + let allChilds = [], allKPIfiles = []; + await txn.executeSql(q, [], async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + let { CatHeaderId, CategoryDefinitionId, CategoryId, CategoryName, CategoryElementStockRequired, CategoryElementCheckAssortment, NoOfSplit, IsPresent, CategoryNotExistCamera, CatNAImage, CategoryExistReasonEnable, CategoryNotExistReasonEnable, ReasonId, Reason, CategoryImage1, CategoryImage2, Remark } = data; + let obj = {}; + + let isStockReq = (CategoryElementStockRequired == 'true' || CategoryElementStockRequired == 1) ? 1 : 0; + let isCheckAssrt = (CategoryElementCheckAssortment == 'true' || CategoryElementCheckAssortment == 1) ? 1 : 0; + let isNaCamAvl = (CategoryNotExistCamera == 'true' || CategoryNotExistCamera == 1) ? 1 : 0; + let isReasonEnable = (CategoryExistReasonEnable == 'true' || CategoryExistReasonEnable == 1) ? 1 : 0; + let isNAReasonEnable = (CategoryNotExistReasonEnable == 'true' || CategoryNotExistReasonEnable == 1) ? 1 : 0; + let isImage1 = (CategoryImage1 == 'true' || CategoryImage1 == 1) ? 1 : 0; + let isImage2 = (CategoryImage2 == 'true' || CategoryImage2 == 1) ? 1 : 0; + + + obj['MID'] = MID; + obj['UserId'] = UserId; + obj['Store_Id'] = StoreId; + obj['CategoryDefinitionId'] = CategoryDefinitionId; + obj['CategoryId'] = CategoryId; + obj['IsPresent'] = IsPresent; + obj['CategoryNotExistImage'] = isNaCamAvl == 1 ? CatNAImage : ''; + obj['ReasonId'] = ReasonId; + obj['Reason'] = Reason; + obj['Remark'] = Remark != null ? Remark : ''; + + + + + if (isNaCamAvl == 1 && CatNAImage != '') { + let imgPath = common_ImagePath + CatNAImage; + let file = { + uri: imgPath, + type: 'image/jpeg', + name: CatNAImage, + filetype: 'image', + folderName: 'CategoryExecutionImages', + } + allKPIfiles.push(file); + } + + + if (IsPresent == 1 && parseInt(NoOfSplit) > 0) { + console.log('add cat exec') + + + async function getWindowSplits() { + let q2 = `select * from ${AppTables.CATEXE_IMAGES} where CAT_HEADER_ID='${CatHeaderId}' and STORE_ID='${StoreId}' `; + + let allWindowSplitImages = []; + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + + txn.executeSql(q2, [], async function (txn2, txnres3) { + + if (txnres3.rows.length > 0) { + for (var j = 0; j < txnres3.rows.length; j++) { + let splitItem = txnres3.rows.item(j); + let { IMAGE1, IMAGE2 } = splitItem + let obj1 = { 'Image1': (isImage1 == 1 && IMAGE1 != null ? IMAGE1 : ''), 'Image2': (isImage2 == 1 && IMAGE2 != null ? IMAGE2 : '') }; + obj1['CategoryDefinitionId'] = CategoryDefinitionId + obj1['CategoryId'] = CategoryId + obj1['MID'] = MID; + + allWindowSplitImages.push(obj1); + if (isImage1 == 1 && IMAGE1 != null && IMAGE1 != '') { + let imgPath = common_ImagePath + IMAGE1; + let file = { + uri: imgPath, + type: 'image/jpeg', + name: IMAGE1, + filetype: 'image', + folderName: 'CategoryExecutionImages', + } + allKPIfiles.push(file); + } + if (isImage2 == 1 && IMAGE2 != null && IMAGE2 != '') { + let imgPath = common_ImagePath + IMAGE2; + let file = { + uri: imgPath, + type: 'image/jpeg', + name: IMAGE2, + filetype: 'image', + folderName: 'CategoryExecutionImages', + } + allKPIfiles.push(file); + } + + if (j == txnres3.rows.length - 1) { + console.log('all images added') + resolve(allWindowSplitImages); + } + } + } + else { + resolve(allWindowSplitImages); + } + + }, function (txnE, txnerr) { console.log(txnerr); resolve(allWindowSplitImages); },); + + }); + }); + } + + obj['CatExecSplitImages'] = await getWindowSplits(); + } + + if (IsPresent == 1) { + + async function getWindowQA() { + + + let selectlist_q1 = ` DISTINCT q.QUESTION_ID as CategoryQuestionId,q.QUESTION_CODE as CategoryQuestionCode,wq.CategoryQuestionName,wq.QuestionType,wq.CQShowCamera,wq.CQCameraMandatory,wq.CQLengthValidationRequired,wq.CQMinimumChar,wq.CQMaximumChar,wq.CQDecimalPoint,wq.CQDateRangeMin,wq.CQDateRangeMax,wq.CQVoiceLengthInMinutes,wq.CQDefaultQuestionEnable,q.ANSWER as Answer,q.ANSWER_ID as AnswerId,q.MULTI_OPTIONS_IDS as multi_op_ids,q.IMAGE_ALLOW1 as CAShowCamera,q.IMAGE1 as Image1 `; + let join_q2 = ` inner join Mapping_CategoryQuestion mq on mq.CategoryQuestionId=wq.CategoryQuestionId `; + let join_q1 = ` inner join Master_CategoryQuestion wq on wq.CategoryQuestionId=q.QUESTION_ID `; + let q3 = `select ${selectlist_q1} from ${AppTables.CATEXE_CHILD_DATA} q ${join_q1} ${join_q2} where q.STORE_ID='${StoreId}' and q.CAT_DEFINITION_ID='${CategoryDefinitionId}' and q.CAT_ID='${CategoryId}' order by wq.CategoryQuestionSequence `; + let allQAs = []; + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + txn.executeSql(q3, [], async function (txn2, txnres3) { + console.log('getWindowQA Catexec:', txnres3.rows.length); + if (txnres3.rows.length > 0) { + for (var j = 0; j < txnres3.rows.length; j++) { + let QAData = txnres3.rows.item(j); + let { CategoryQuestionId, AnswerId, Answer, CAShowCamera, Image1 } = QAData + let showImage1 = (CAShowCamera == 'true' || CAShowCamera == 1) ? 1 : 0; + let obj1 = {}; + obj1['MID'] = MID; + obj1['CategoryDefinitionId'] = CategoryDefinitionId + obj1['CategoryId'] = CategoryId + obj1['CategoryQuestionId'] = CategoryQuestionId + obj1['AnswerId'] = AnswerId + obj1['Answer'] = Answer + obj1['Image1'] = (showImage1 == 1 ? Image1 : '') + + allQAs.push(obj1); + + if (showImage1 == 1 && Image1 != null && Image1 != '') { + let imgPath = common_ImagePath + Image1; + let file = { + uri: imgPath, + type: 'image/jpeg', + name: Image1, + filetype: 'image', + folderName: 'CategoryExecutionImages', + } + allKPIfiles.push(file); + } + if (j == txnres3.rows.length - 1) { + resolve(allQAs); + } + } + } + else { + resolve(allQAs); + } + + }, function (txnE, txnerr) { console.log('test', txnerr); resolve(allQAs); },); + }); + }); + } + + obj['QuestionAnswers'] = await getWindowQA(); + + if (isStockReq == 1) { + async function getWindowStock() { + return new Promise((resolve, reject) => { + let allStock = []; + + let join_s1 = ''; + if (isCheckAssrt) { + join_s1 = ` inner join Mapping_ProductAssortmentStorewise a on a.ProductId=s.CAT_STOCK_VALUE and a.StoreId='${StoreId}'`; + } + let selectlist_s1 = ` Distinct s.CAT_STOCK_DEFINITION_ID as CategoryStockDefinitionId, s.CAT_DEFINITION_ID as CategoryDefinitionId,s.CAT_STOCK_TABLE as CategoryStockTable,s.CAT_STOCK_FIELD as CategoryStockField,s.CAT_STOCK_VALUE as CategoryStockValue,s.CAT_STOCK_MBQ as CategoryStockMBQ,s.PRODUCT_NAME as ProductName, s.STOCK as Stock,s.IS_CAT_PRESENT as isCatPresent `; + let q4 = `select ${selectlist_s1} from ${AppTables.CATEXE_STOCK_DATA} s ${join_s1} where s.CAT_DEFINITION_ID='${CategoryDefinitionId}' and s.STORE_ID='${StoreId}' `; + q4 += ` order by s.PRODUCT_NAME `; + + + db.transaction(async function (txn) { + + txn.executeSql(q4, [], async function (txn2, txnres3) { + if (txnres3.rows.length > 0) { + for (var j = 0; j < txnres3.rows.length; j++) { + let SData = txnres3.rows.item(j); + let { CategoryStockDefinitionId, CategoryStockTable, CategoryStockField, CategoryStockValue, CategoryStockMBQ, ProductName, Stock, isCatPresent } = SData + + let obj1 = {}; + obj1['MID'] = MID; + obj1['CategoryDefinitionId'] = CategoryDefinitionId + obj1['CategoryId'] = CategoryId + obj1['CategoryStockDefinitionId'] = CategoryStockDefinitionId + obj1['CategoryStockTable'] = CategoryStockTable + obj1['CategoryStockField'] = CategoryStockField + obj1['CategoryStockValue'] = CategoryStockValue + obj1['CategoryStockMBQ'] = CategoryStockMBQ + obj1['ProductName'] = ProductName + obj1['Stock'] = Stock != '' && Stock != null && Stock != "null" && Stock != "undefined" ? Stock : 0; + obj1['isCatPresent'] = isCatPresent; + + allStock.push(obj1); + if (j == txnres3.rows.length - 1) { + resolve(allStock); + } + } + } + else { + resolve(allStock); + } + + }, function (txnE, txnerr) { console.log(txnerr); resolve(allStock); },); + + }); + }); + } + obj['StockData'] = await getWindowStock(); + } + else { + obj['StockData'] = []; + } + + + } + else { + obj['CatExecSplitImages'] = []; + obj['QuestionAnswers'] = []; + obj['StockData'] = []; + } + + allChilds.push(obj); + } + postData['MID'] = MID; + postData['Keys'] = 'CatExecutionOneApp'; + postData['JsonData'] = JSON.stringify(allChilds); + postData['UserId'] = UserId; + + + // console.log('CatExecOneApp:',postData); + resolve({ 'Files': allKPIfiles, 'PostData': postData }); + } + else { + resolve({ 'PostData': postData }); + } + }, function (txnE, txnerr) { console.log(txnerr); resolve({ 'PostData': postData }); },); + + }); + }).then((val) => { + return val; + }).catch((err) => { + console.log(err); + return postData; + }); + } + case 'StoreChecklist': { + var postData = {}; + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + + let selectlist = ` DISTINCT T.MaxLength as MaxLength,T.MinLength as MinLength,T.CategoryId,T.Category,T.LengthValidation as LengthValidation,T.QuestionImageAllow as QuestionImageAllow,T.DateRange as DateRange,T.Question as Question,T.QuestionId as QuestionId,T.QuestionType as QuestionType,T.OTP as OTP,T1.ANSWER As Answer, T1.ANSWER_ID as AnswerId,T1.IMAGE_ALLOW1 as ImageAllow1,T1.IMAGE1 as Image1,T1.IMAGE_ALLOW2 as ImageAllow2,T1.IMAGE2 as Image2,T1.MULTI_OPTIONS_IDS as multi_op_ids,T1.IS_DISABLED as isDisabled,T1.STORE_CHECKLIST_ONCE As StoreChecklistOnce`; + let join = ` INNER JOIN ${AppTables.STORE_CHECKLIST} T1 on T.QuestionId=T1.QUESTION_ID`; + let q2 = `Select ${selectlist} FROM Master_StoreChecklist T ${join} WHERE T1.STORE_ID='${StoreId}' ` + (!previousDayUpload ? ` AND T1.VISIT_DATE= '${d2}' ` : '') + ` ORDER BY T.QuestionSequence `; + + // console.log("checklistdataaa:",q2) + + let allChilds = [], allKPIfiles = []; + await txn.executeSql(q2, [], async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + + //console.log("checklistdataaa2:",txnres2.rows.length) + + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + let { CategoryId, Category, MaxLength, MinLength, QuestionImageAllow, DateRange, Question, QuestionId, QuestionType, OTP, Answer, AnswerId, ImageAllow1, Image1, ImageAllow2, Image2, MultiOptionsIds, isDisabled, StoreChecklistOnce } = data; + let obj = {}; + + let isQtnDisabled = isDisabled == 1 || isDisabled == '1' ? true : false; + if (!isQtnDisabled) { + obj['MID'] = MID; + obj['UserId'] = UserId; + obj['Store_Id'] = StoreId; + obj['CategoryId'] = CategoryId; + obj['QuestionId'] = QuestionId; + obj['QuestionType'] = QuestionType; + obj['Answer'] = Answer; + obj['AnswerId'] = AnswerId != null && AnswerId != "null" && AnswerId != 'undefined' && AnswerId != '' ? AnswerId : 0; + obj['MultiAnswerId'] = MultiOptionsIds != null && MultiOptionsIds != 'undefined' ? MultiOptionsIds : ''; + obj['AnswerImage1'] = Image1; + obj['AnswerImage2'] = Image2; + obj['StoreChecklistOnce'] = StoreChecklistOnce; + + if (((QuestionImageAllow == 1 || QuestionImageAllow == 'true') || (ImageAllow1 == 1 | ImageAllow1 == 'true')) && Image1 != '') { + let imgPath = common_ImagePath + Image1; + let file = { + uri: imgPath, + type: 'image/jpeg', + name: Image1, + filetype: 'image', + folderName: 'StoreChecklistImages', + } + allKPIfiles.push(file); + } + + if ((ImageAllow2 == 1 || ImageAllow2 == 'true') && Image2 != '') { + let imgPath = common_ImagePath + Image2; + let file = { + uri: imgPath, + type: 'image/jpeg', + name: Image2, + filetype: 'image', + folderName: 'StoreChecklistImages', + } + allKPIfiles.push(file); + } + + + if (QuestionType == 'Audio' && Answer != '') { + let filePath = common_ImagePath + 'Recordings/' + Answer; + let file = { + uri: filePath, + type: (Platform.OS == 'ios' ? 'audio/m4a' : 'audio/mp3'), + name: Answer, + filetype: 'audio', + folderName: 'StoreChecklistVoiceFiles', + } + allKPIfiles.push(file); + } + + allChilds.push(obj); + } + } + postData['MID'] = MID; + postData['Keys'] = 'StoreChecklist'; + postData['JsonData'] = JSON.stringify(allChilds); + postData['UserId'] = UserId; + + console.log('Store Checklist data:', postData); + resolve({ 'Files': allKPIfiles, 'PostData': postData }); + } + else { + resolve({ 'PostData': postData }); + } + }, function (txnE, txnerr) { console.log(txnerr); resolve({ 'PostData': postData }); },); + + }); + }).then((val) => { + return val; + }).catch((err) => { + console.log(err); + return postData; + }); + } + case 'StoreProfile': { + var postData = {}; + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + + let q2 = `Select * FROM ${AppTables.STORE_PROFILE} where STORE_ID='${StoreId}' and VISIT_DATE='${d2}' `; + + let allChilds = [], allKPIfiles = []; + await txn.executeSql(q2, [], async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + + let data = txnres2.rows.item(0); + let { STORE_ID, STORE_NAME, ADDRESS, GSTNO, CONTACT_PERSON, PHONE, MOBILE, LOCATION, PINCODE, EMAIL, VISIT_DATE, ADDED_DATE } = data; + let obj = {}; + + obj['MID'] = MID; + obj['UserId'] = UserId; + obj['Store_Id'] = STORE_ID; + obj['StoreName'] = STORE_NAME; + obj['Address'] = ADDRESS; + obj['Location'] = LOCATION; + obj['Pincode'] = PINCODE; + obj['Email'] = EMAIL; + obj['GSTNo'] = GSTNO; + obj['ContactPerson'] = CONTACT_PERSON; + obj['Phone'] = PHONE; + obj['Mobile'] = MOBILE; + + allChilds.push(obj); + + postData['MID'] = MID; + postData['Keys'] = 'StoreProfile'; + postData['JsonData'] = JSON.stringify(allChilds); + postData['UserId'] = UserId; + + // console.log('Store Profile data:',postData); + resolve({ 'Files': allKPIfiles, 'PostData': postData }); + } + else { + resolve({ 'PostData': postData }); + } + }, function (txnE, txnerr) { console.log(txnerr); resolve({ 'PostData': postData }); },); + + }); + }).then((val) => { + return val; + }).catch((err) => { + console.log(err); + return postData; + }); + } + + //arman + case 'StoreProfileKyc': { + var postData = {}; + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + + let q2 = `Select * FROM ${AppTables.STORE_PROFILE_KYC} where STORE_ID='${StoreId}' and VISIT_DATE='${d2}'`; + console.log("checpq-->", q2) + + let allChilds = [], allKPIfiles = []; + await txn.executeSql(q2, [], async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + + let data = txnres2.rows.item(0); + let { STORE_ID, STORE_NAME, ADDRESS, GSTNO, IMAGE, CONTACT_PERSON, PHONE, MOBILE, LOCATION, PINCODE, EMAIL, VISIT_DATE, ADDED_DATE } = data; + let obj = {}; + + obj['MID'] = MID; + obj['UserId'] = UserId; + obj['Store_Id'] = STORE_ID; + obj['StoreName'] = STORE_NAME; + obj['GSTNo'] = GSTNO; + obj['GSTimage'] = IMAGE; + + + allChilds.push(obj); + + postData['MID'] = MID; + postData['Keys'] = 'ShowCompactStoreProfile'; + postData['JsonData'] = JSON.stringify(allChilds); + postData['UserId'] = UserId; + + console.log('Store Profile kyc data:', postData); + resolve({ 'Files': allKPIfiles, 'PostData': postData }); + } + else { + resolve({ 'PostData': postData }); + } + }, function (txnE, txnerr) { console.log(txnerr); resolve({ 'PostData': postData }); },); + + }); + }).then((val) => { + return val; + }).catch((err) => { + console.log(err); + return postData; + }); + } + + case 'SAMPLINGONEAPP': { + var postData = {}; + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + + let join = `INNER Join ${AppTables.SAMPLING_LIST} l on l.SAMPLING_DEFINITION_ID=T.SamplingDefinitionId and l.STORE_ID='${StoreId}' ` + (!previousDayUpload ? ` and l.VISIT_DATE='${d2}' ` : '') + ` `; + let q2 = `SELECT Distinct T.*,l.* FROM Master_SamplingDefinition T INNER JOIN Mapping_StoreSampling M ON T.SamplingDefinitionId=M.SamplingDefinitionId ${join} WHERE M.StoreId='${StoreId}'`; + + let allChilds = [], allKPIfiles = []; + await txn.executeSql(q2, [], async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + let datagetCount = 0; + for (var i = 0; i < txnres2.rows.length; i++) { + let getinventoryDone = false, getStockDone = false, getSaleDone = false, getCCDone = false, getCustTrackDone = false; + let data = txnres2.rows.item(i); + + let { STORE_ID, START_LUNCH, SAMPLING_PRESENT, KIOSKSETUP, END_LUNCH, START_IMAGE1, START_IMAGE2, END_IMAGE1, END_IMAGE2, START_IMG_TIME, END_IMG_TIME, SamplingDefinitionId, VISIT_DATE, ADDED_DATE, REASONID, REASON, CustomerTrackingQuestionCategoryId, InventoryQuestionCategoryId } = data; + let obj = {}; + + obj['MID'] = MID; + obj['UserId'] = UserId; + obj['Store_Id'] = STORE_ID; + obj['SamplingPresent'] = SAMPLING_PRESENT == 1 ? 1 : 0; + obj['SamplingDefinitionId'] = SamplingDefinitionId; + obj['KioskSetup'] = KIOSKSETUP == 1 ? 1 : 0; + obj['StartTimeImage1'] = START_IMAGE1 != '' && START_IMAGE1 != null && START_IMAGE1 != "null" && START_IMAGE1 != "undefined" && START_IMAGE1 != undefined ? START_IMAGE1 : ''; + obj['StartTimeImage2'] = START_IMAGE2 != '' && START_IMAGE2 != null && START_IMAGE2 != 'null' && START_IMAGE2 != "undefined" && START_IMAGE2 != undefined ? START_IMAGE2 : ''; + obj['StartTime'] = START_IMG_TIME; + obj['EndTime'] = END_IMG_TIME; + obj['EndTimeImage1'] = END_IMAGE1 != '' && END_IMAGE1 != undefined && END_IMAGE1 != "undefined" ? END_IMAGE1 : ''; + obj['EndTimeImage2'] = END_IMAGE2 != '' && END_IMAGE2 != undefined && END_IMAGE2 != "undefined" ? END_IMAGE2 : ''; + obj['StartLunchTime'] = START_LUNCH; + obj['EndLunchTime'] = END_LUNCH; + obj['ReasonId'] = REASONID; + obj['Reason'] = REASON; + + async function getInventory() { + let allStock = []; + return new Promise((resolve, reject) => { + + let selectlist = ` DISTINCT T.SQMaximumChar as MaxLength,T.SQMinimumChar as MinLength,T.QuestionCategoryId as CategoryId,T.SQLengthValidationRequired as LengthValidation,T.SAShowCamera as QuestionImageAllow,"" as DateRange,T.SQDefaultQuestionEnable as QEnable,T.SamplingQuestionName as Question,T.SamplingQuestionId as QuestionId,T.QuestionType as QuestionType,"" as OTP,T1.ANSWER As Answer, T1.ANSWER_ID as AnswerId,T1.IMAGE_ALLOW1 as ImageAllow1,T1.IMAGE1 as Image1,T1.IMAGE_ALLOW2 as ImageAllow2,T1.IMAGE2 as Image2,T1.MULTI_OPTIONS_IDS as multi_op_ids,T1.IS_DISABLED as isDisabled `; + let join2 = ` INNER JOIN ${AppTables.SAMPLING_INVENTORY} T1 on T.QuestionCategoryId=T1.CATEGORY_ID And T.SamplingQuestionId=T1.QUESTION_ID`; + let join3 = ` INNER JOIN Mapping_SamplingQuestion T2 on T.SamplingQuestionId=T2.SamplingQuestionId And T2.SamplingDefinitionId='${SamplingDefinitionId}' ` + let q4 = `Select ${selectlist} FROM Master_SamplingQuestion T ${join2} ${join3} WHERE T1.STORE_ID='${StoreId}' ` + (!previousDayUpload ? ` AND T1.VISIT_DATE= '${d2}' ` : '') + ` AND T1.SAMPLING_DEFINITION_ID='${SamplingDefinitionId}' AND T.QuestionCategoryId='${InventoryQuestionCategoryId}' `; + q4 += ` ORDER BY T.SamplingQuestionSequence `; + + db.transaction(async function (txn) { + + txn.executeSql(q4, [], async function (txn2, txnres3) { + if (txnres3.rows.length > 0) { + for (var j = 0; j < txnres3.rows.length; j++) { + let SData = txnres3.rows.item(j); + let { CategoryId, QuestionId, AnswerId, Answer, } = SData; + + let obj1 = {}; + obj1['MID'] = MID; + obj1['UserId'] = UserId; + obj1['QuestionCategoryId'] = CategoryId + obj1['SamplingQuestionId'] = QuestionId + obj1['SamplingDefinitionId'] = SamplingDefinitionId; + obj1['AnswerId'] = AnswerId + obj1['Answer'] = Answer + + allStock.push(obj1); + if (j == txnres3.rows.length - 1) { + resolve(allStock); + } + } + } + else { + resolve(allStock); + } + + }, function (txnE, txnerr) { console.log(txnerr); resolve(allStock); },); + + }); + }).then((val) => { + getinventoryDone = true; + return val; + }); + } + + obj['Inventory'] = await getInventory(); + + async function getCust_Tracking() { + let allStock = []; + return new Promise((resolve, reject) => { + // T.SAShowCamera as QuestionImageAllow + // STORE_ID,VISIT_DATE,SAMPLING_DEFINITION_ID,CATEGORY_ID,QUESTION,QUESTION_ID,QUESTION_TYPE,ANSWER,ANSWER_ID,MULTI_OPTIONS_IDS,IS_DISABLED,CUSTID,ADDED_DATE) + let selectlist = ` DISTINCT T.SQMaximumChar as MaxLength,T1.IMAGE1,T.SQMinimumChar as MinLength,T.QuestionCategoryId as CategoryId,T.SQLengthValidationRequired as LengthValidation,"" as DateRange,T.SQDefaultQuestionEnable as QEnable,T.SamplingQuestionName as Question,T.SamplingQuestionId as QuestionId,T.QuestionType as QuestionType,"" as OTP,T1.ANSWER As Answer, T1.ANSWER_ID as AnswerId,T1.MULTI_OPTIONS_IDS as multi_op_ids,T1.IS_DISABLED as isDisabled,T1.CUSTID `; + let join2 = ` INNER JOIN ${AppTables.SAMPLING_CUST_TRACK} T1 on T.QuestionCategoryId=T1.CATEGORY_ID And T.SamplingQuestionId=T1.QUESTION_ID`; + let join3 = ` INNER JOIN Mapping_SamplingQuestion T2 on T.SamplingQuestionId=T2.SamplingQuestionId And T2.SamplingDefinitionId='${SamplingDefinitionId}' ` + let q4 = `Select ${selectlist} FROM Master_SamplingQuestion T ${join2} ${join3} WHERE T1.STORE_ID='${StoreId}' ` + (!previousDayUpload ? ` AND T1.VISIT_DATE= '${d2}' ` : '') + ` AND T1.SAMPLING_DEFINITION_ID='${SamplingDefinitionId}' AND T.QuestionCategoryId='${CustomerTrackingQuestionCategoryId}' `; + q4 += ` ORDER BY T.SamplingQuestionSequence `; + + console.log("q4 getCust_Tracking--", q4) + + db.transaction(async function (txn) { + + txn.executeSql(q4, [], async function (txn2, txnres3) { + if (txnres3.rows.length > 0) { + for (var j = 0; j < txnres3.rows.length; j++) { + let SData = txnres3.rows.item(j); + console.log("q4 getCust_Tracking--2", txnres3.rows.length) + let { CategoryId, QuestionId, AnswerId, Answer, CUSTID, IMAGE1 } = SData; + + let obj1 = {}; + obj1['MID'] = MID; + obj1['UserId'] = UserId; + obj1['QuestionCategoryId'] = CategoryId + obj1['SamplingQuestionId'] = QuestionId + obj1['SamplingDefinitionId'] = SamplingDefinitionId; + obj1['AnswerId'] = AnswerId + obj1['Answer'] = Answer + obj1['CustId'] = MID + "_" + CUSTID + obj1["IMAGE1"] = IMAGE1 + + // let bIndex=allStock.findIndex(i=>i.CUSTID==CUSTID); + // if(bIndex>=0){ + // let obj=allStock[bIndex] || {}; + // let QD1=obj.QuestionsData || []; + // QD1.push(obj1); + // obj['QuestionsData']= QD1; + // allStock[bIndex]=obj; + // } + // else{ + // let obj={'CUSTID':CUSTID,'QuestionsData':[obj1]}; + // allStock.push(obj); + // } + allStock.push(obj1); + if (j == txnres3.rows.length - 1) { + resolve(allStock); + } + } + } + else { + resolve(allStock); + } + + }, function (txnE, txnerr) { console.log(txnerr); resolve(allStock); },); + + }); + }).then((val) => { + getCustTrackDone = true; + return val; + }); + } + + obj['CustomerTracking'] = await getCust_Tracking(); + + async function getCustomerConversion() { + let allStock = []; + return new Promise((resolve, reject) => { + + let q2 = ` SELECT * FROM ${AppTables.CONTACT_CONVERSION} WHERE STORE_ID='${StoreId}' ` + (!previousDayUpload ? ` and VISIT_DATE='${d2}' ` : '') + ` and SAMPLING_DEFINITION_ID='${SamplingDefinitionId}' and SCREEN_TYPE='SamplingContactConversion' `; + + db.transaction(async function (txn) { + + txn.executeSql(q2, [], async function (txn2, txnres3) { + if (txnres3.rows.length > 0) { + for (var j = 0; j < txnres3.rows.length; j++) { + let SData = txnres3.rows.item(j); + + let { STORE_ID, VISIT_DATE, TOTAL_CONTACT, CST_CONTACT, TOTAL_SAMPLED, ADDED_DATE } = SData; + + let obj = {}; + obj['MID'] = MID; + obj['User_Id'] = UserId; + obj['TotalContact'] = TOTAL_CONTACT != '' && TOTAL_CONTACT != null && TOTAL_CONTACT != "null" && TOTAL_CONTACT != "undefined" ? TOTAL_CONTACT : 0; + obj['CSTConverted'] = CST_CONTACT != '' && CST_CONTACT != null && CST_CONTACT != "null" && CST_CONTACT != "undefined" ? CST_CONTACT : 0; + obj['TotalSampled'] = TOTAL_SAMPLED != '' && TOTAL_SAMPLED != null && TOTAL_SAMPLED != "null" && TOTAL_SAMPLED != "undefined" ? TOTAL_SAMPLED : 0; + obj['SamplingDefinitionId'] = SamplingDefinitionId; + + allStock.push(obj); + if (j == txnres3.rows.length - 1) { + resolve(allStock); + } + } + } + else { + resolve(allStock); + } + + }, function (txnE, txnerr) { console.log(txnerr); resolve(allStock); },); + + }); + }).then((val) => { + getCCDone = true; + return val; + }); + } + + obj['CustomerConversion'] = await getCustomerConversion(); + + async function getSamplingStock() { + let allStock = []; + return new Promise((resolve, reject) => { + + let q2 = `SELECT Distinct c.SAMPLING_STOCK_VALUE as SamplingStockId, c.PRODUCT_NAME as ProductName,'' as MSL, c.SAMPLING_STOCK_DEFINITION_ID as SamplingStockDefinitionId, c.SAMPLING_DEFINITION_ID as SamplingDefinitionId, c.SAMPLING_STOCK_TABLE as SamplingStockTable, c.SAMPLING_STOCK_FIELD as SamplingStockField, c.SAMPLING_STOCK_MBQ as SamplingStockMBQ , STOCK from ${AppTables.SAMPLING_STOCK_DATA} c where c.SAMPLING_DEFINITION_ID='${SamplingDefinitionId}' AND c.STORE_ID='${StoreId}' ` + (!previousDayUpload ? ` AND c.VISIT_DATE='${d2}' ` : '') + ` `; + + db.transaction(async function (txn) { + + txn.executeSql(q2, [], async function (txn2, txnres3) { + if (txnres3.rows.length > 0) { + for (var j = 0; j < txnres3.rows.length; j++) { + let SData = txnres3.rows.item(j); + let { SamplingStockDefinitionId, SamplingDefinitionId, SamplingStockTable, STOCK, SamplingStockField, ProductName } = SData + + let obj1 = {}; + obj1['MID'] = MID; + obj1['UserId'] = UserId; + obj1['SamplingDefinitionId'] = SamplingDefinitionId + obj1['SamplingStockDefinitionId'] = SamplingStockDefinitionId + obj1['SamplingStockTable'] = SamplingStockTable + obj1['SamplingStockField'] = SamplingStockField + obj1['ProductName'] = ProductName + obj1['Stock'] = STOCK != '' && STOCK != null && STOCK != "null" && STOCK != "undefined" ? STOCK : 0; + + allStock.push(obj1); + if (j == txnres3.rows.length - 1) { + resolve(allStock); + } + } + } + else { + resolve(allStock); + } + + }, function (txnE, txnerr) { console.log(txnerr); resolve(allStock); },); + + }); + }).then((val) => { + getStockDone = true; + return val; + }); + } + obj['StockData'] = await getSamplingStock(); + + async function getSamplingSale() { + return new Promise((resolve, reject) => { + let allStock = []; + // let q2=`SELECT c.SAMPLING_STOCK_VALUE as SamplingStockId, c.PRODUCT_NAME as ProductName,'' as MSL, c.SAMPLING_STOCK_DEFINITION_ID as SamplingStockDefinitionId, c.SAMPLING_DEFINITION_ID as SamplingDefinitionId, c.SAMPLING_STOCK_TABLE as SamplingStockTable, c.SAMPLING_STOCK_FIELD as SamplingStockField, c.SAMPLING_STOCK_MBQ as SamplingStockMBQ , STOCK, SALE from ${AppTables.SAMPLING_STOCK_DATA} c where c.SAMPLING_DEFINITION_ID='${SamplingData.SamplingDefinitionId}' AND c.STORE_ID='${StoreId}' AND c.VISIT_DATE='${d2}' } `; + let q2 = `SELECT Distinct c.SAMPLING_STOCK_VALUE as SamplingStockId, c.PRODUCT_NAME as ProductName,'' as MSL, c.SAMPLING_STOCK_DEFINITION_ID as SamplingStockDefinitionId, c.SAMPLING_DEFINITION_ID as SamplingDefinitionId, c.SAMPLING_STOCK_TABLE as SamplingStockTable, c.SAMPLING_STOCK_FIELD as SamplingStockField, c.SAMPLING_STOCK_MBQ as SamplingStockMBQ , SALE from ${AppTables.SAMPLING_SALE_DATA} c where c.SAMPLING_DEFINITION_ID='${SamplingDefinitionId}' AND c.STORE_ID='${StoreId}' ` + (!previousDayUpload ? ` AND c.VISIT_DATE='${d2}' ` : '') + ` And c.SALE is not null and c.SALE!="" and c.SALE>0 `; + + db.transaction(async function (txn) { + + txn.executeSql(q2, [], async function (txn2, txnres3) { + + if (txnres3.rows.length > 0) { + for (var j = 0; j < txnres3.rows.length; j++) { + let SData = txnres3.rows.item(j); + let { SamplingStockDefinitionId, SamplingDefinitionId, SamplingStockTable, SALE, SamplingStockField, ProductName } = SData + + let obj1 = {}; + obj1['MID'] = MID; + obj1['UserId'] = UserId; + obj1['SamplingDefinitionId'] = SamplingDefinitionId + obj1['SamplingStockDefinitionId'] = SamplingStockDefinitionId + obj1['SamplingStockTable'] = SamplingStockTable + obj1['SamplingStockField'] = SamplingStockField + obj1['ProductsName'] = ProductName + obj1['Sale'] = SALE != '' && SALE != null && SALE != "null" && SALE != "undefined" ? SALE : 0; + + + allStock.push(obj1); + if (j == txnres3.rows.length - 1) { + resolve(allStock); + } + } + } + else { + resolve(allStock); + } + + }, function (txnE, txnerr) { console.log(txnerr); resolve(allStock); },); + + }); + }).then((val) => { + + getSaleDone = true; + return val; + }); + } + obj['SaleData'] = await getSamplingSale(); + + + + function addDataIfAllGet() { + //Add data to arr When All data get completed for one sampling definition + if (getinventoryDone && getCustTrackDone && getCCDone && getStockDone && getSaleDone) { + allChilds.push(obj); + datagetCount++; + //check if this is done for all the samplings + DoWhenAllDone(); + } + } + + addDataIfAllGet(); + + function DoWhenAllDone() { + //When All data get completed for all samplinig definitions + if (datagetCount == txnres2.rows.length) { + postData['MID'] = MID; + postData['Keys'] = 'OneAppSampling'; + postData['JsonData'] = JSON.stringify(allChilds); + postData['UserId'] = UserId; + console.log("sampling postdata:", postData) + resolve({ 'Files': allKPIfiles, 'PostData': postData }); + } + } + + } + + + } + else { + resolve({ 'PostData': postData }); + } + }, function (txnE, txnerr) { console.log(txnerr); resolve({ 'PostData': postData }); },); + + }); + }).then((val) => { + return val; + }).catch((err) => { + console.log(err); + return postData; + }); + } + + case 'ONEAPPMISSEDCALL': + { + var postData = {}; + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + let q2 = ` SELECT * FROM ${AppTables.MISSED_CALL} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' `; + let allChilds = [], allKPIfiles = []; + await txn.executeSql(q2, [], async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + let { STORE_ID, PRESENT, VISIT_DATE, UNIQUE_CODE, ADDED_DATE } = data; + let obj = {}; + obj['MID'] = MID; + obj['Store_Id'] = STORE_ID; + obj['User_Id'] = UserId; + obj['Unique_Code'] = UNIQUE_CODE; + obj['Present'] = PRESENT; + allChilds.push(obj); + } + postData['MID'] = MID; + postData['Keys'] = 'OneAppMissedCall'; + postData['JsonData'] = JSON.stringify(allChilds); + postData['UserId'] = UserId; + + console.log('OneAppMissedCall postData', postData); + resolve({ 'Files': allKPIfiles, 'PostData': postData }); + } + else { + resolve({ 'PostData': postData }); + } + }, function (txnE, txnerr) { console.log(txnerr); resolve({ 'PostData': postData }); },); + + }); + }).then((val) => { + return val; + }).catch((err) => { + console.log(err); + return postData; + }); + + } + + case 'BREAKTIME': + { + // StoreImages + var postData = {}; + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + let q2 = ` SELECT * FROM ${AppTables.BREAKTIME} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' `; + let allChilds = [], allKPIfiles = []; + await txn.executeSql(q2, [], async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + // BreakId,Break_Name,Minimum,Maximum + let { STORE_ID, VISIT_DATE, BREAKNAME, BREAKID, STARTTIME, UNIQUEBREAKID, ENDTIME, MAXNUMBER, MINNUMBER, ADDED_DATE } = data; + let obj = {}; + obj['MID'] = MID; + obj['User_Id'] = UserId; + obj['Store_Id'] = STORE_ID; + obj['BreakId'] = BREAKID; + // obj['Break_Name']=BREAKNAME; + obj['StartTime'] = STARTTIME; + obj['EndTime'] = ENDTIME; + + allChilds.push(obj); + } + postData['MID'] = MID; + postData['Keys'] = 'BreakData'; + postData['JsonData'] = JSON.stringify(allChilds); + postData['UserId'] = UserId; + + // console.log('StoreImages postData',postData); + resolve({ 'Files': allKPIfiles, 'PostData': postData }); + } + else { + resolve({ 'PostData': postData }); + } + }, function (txnE, txnerr) { console.log(txnerr); resolve({ 'PostData': postData }); },); + + }); + }).then((val) => { + return val; + }).catch((err) => { + console.log(err); + return postData; + }); + + } + + default: return false; + } + +} + +export async function getStockDataChunks(storeData, UserId, previousDayUpload = false, CHUNK_SIZE) { + try { + // Helper: Execute SQL in promise form + function executeSqlAsync(txn, query, params = []) { + return new Promise((resolve, reject) => { + txn.executeSql( + query, + params, + (tx, res) => resolve(res), + (tx, err) => { + console.error("❌ SQL Error:", err, "Query:", query); + reject(err); + } + ); + }); + } + + let d1 = new Date(); + let d2 = moment(d1).format("MM/DD/YYYY"); + let { StoreId, MID } = storeData; + let allImages = [], allChilds = [], allKPIfiles = []; + // -------- Fetch STOCK2HDR_DATA -------- + const txnres2 = await new Promise((resolve, reject) => { + db.transaction(async (txn) => { + try { + let q2 = `SELECT * FROM ${AppTables.STOCK2HDR_DATA} WHERE STORE_ID='${StoreId}'` + + (!previousDayUpload ? ` AND VISIT_DATE='${d2}'` : ""); + const res = await executeSqlAsync(txn, q2); + resolve(res); + } catch (err) { + reject(err); + } + }); + }); + + for (let i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + if (data.IMAGE) { + allImages.push({ + MID, + UserId, + SubCategoryId: data.SUB_CATEGORY_ID, + SubCategoryImg: data.IMAGE != null && data.IMAGE !== "" ? data.IMAGE : "", + }); + + allKPIfiles.push({ + uri: common_ImagePath + data.IMAGE, + type: "image/jpeg", + name: data.IMAGE != null && data.IMAGE !== "" ? data.IMAGE : "", + filetype: "image", + folderName: "StockSingleKPIImages", + }); + } + } + + // -------- Fetch STOCK2_DATA -------- + const txnres3 = await new Promise((resolve, reject) => { + db.transaction(async (txn) => { + try { + let join = `INNER JOIN Mapping_ProductAssortmentStorewise m + ON p.PRODUCT_ID = m.ProductId AND m.StoreId='${StoreId}'`; + let q3 = `SELECT DISTINCT p.*, m.MBQ + FROM ${AppTables.STOCK2_DATA} p ${join} + WHERE p.STORE_ID='${StoreId}'` + + (!previousDayUpload ? ` AND p.VISIT_DATE='${d2}'` : ""); + const res = await executeSqlAsync(txn, q3); + resolve(res); + } catch (err) { + reject(err); + } + }); + }); + + // Helper to fetch MFD stocks + async function getMFDStockData(STOCK_UID, SubCategoryId, BrandId, ProductId) { + return new Promise((resolve) => { + db.transaction(async (txn) => { + let q = `SELECT * FROM ${AppTables.STOCK2_MFD_DATA} WHERE STOCK_UID='${STOCK_UID}'`; + let resMFD = await executeSqlAsync(txn, q); + let arr = []; + for (let i = 0; i < resMFD.rows.length; i++) { + let data = resMFD.rows.item(i); + arr.push({ + MID, + SubCategoryId, + BrandId, + ProductId, + Mfd: data.MFD ? moment(data.MFD).format("MM/DD/YYYY") : "", + LotNo: data.LOT_NO, + Stock: data.STOCK != null && data.STOCK !== "" ? data.STOCK : 0, + }); + } + resolve(arr); + }); + }); + } + + for (let i = 0; i < txnres3.rows.length; i++) { + let data2 = txnres3.rows.item(i); + let mfdStocks = await getMFDStockData( + data2.STOCK_UID, + data2.SUB_CATEGORY_ID, + data2.BRAND_ID, + data2.PRODUCT_ID + ); + + allChilds.push({ + MID, + UserId, + Msl: data2.MSL == "true" || data2.MSL === true || data2.MSL === 1 ? 1 : 0, + ArticleCode: data2.ARTICLE_CODE || "", + SubCategoryId: data2.SUB_CATEGORY_ID, + ProductId: data2.PRODUCT_ID, + Stock: data2.STOCK != null && data2.STOCK !== "" ? data2.STOCK : 0, + PackType: data2.PACKTYPE != null && data2.PACKTYPE != "" && data2.PACKTYPE != "null" && data2.PACKTYPE != "undefined" ? data2.PACKTYPE : '', + BackRoomStock: data2.BACKROOM_STOCK != null && data2.BACKROOM_STOCK !== "" ? data2.BACKROOM_STOCK : 0, + DamagedStock: data2.DAMAGED_STOCK != null && data2.DAMAGED_STOCK !== "" ? data2.DAMAGED_STOCK : 0, + LostStock: data2.LOST_STOCK != null && data2.LOST_STOCK !== "" ? data2.LOST_STOCK : 0, + ExpiryStock: data2.EXPIRY_STOCK != null && data2.EXPIRY_STOCK !== "" ? data2.EXPIRY_STOCK : 0, + MFD_Stocks: mfdStocks, + IsSKUPresent: data2.IS_SKU_STOCK_PRESENT, + NrExpiry1_Stock: data2.NREXPIRY1_STOCK != null && data2.NREXPIRY1_STOCK !== "" ? data2.NREXPIRY1_STOCK : 0, + NrExpiry2_Stock: data2.NREXPIRY2_STOCK != null && data2.NREXPIRY2_STOCK !== "" ? data2.NREXPIRY2_STOCK : 0, + NrExpiry3_Stock: data2.NREXPIRY3_STOCK != null && data2.NREXPIRY3_STOCK !== "" ? data2.NREXPIRY3_STOCK : 0, + OutOfStock: data2.OUT_OF_STOCK != null && data2.OUT_OF_STOCK !== "" ? data2.OUT_OF_STOCK : 0, + LessThanMBQ: data2.LESS_THAN_MBQ != null && data2.LESS_THAN_MBQ !== "" ? data2.LESS_THAN_MBQ : 0, + MBQ: data2.MBQ, + PriceYesNo: data2.PriceYesNo, + }); + } + + // -------- Chunk the results -------- + function chunkArray(arr, size) { + let results = []; + for (let i = 0; i < arr.length; i += size) { + results.push(arr.slice(i, i + size)); + } + return results; + } + + let local_CHUNK_SIZE = CHUNK_SIZE; + let allChildChunks = chunkArray(allChilds, local_CHUNK_SIZE); + let chunkedPosts = allChildChunks.map((childGroup, index) => ({ + Files: index === 0 ? allKPIfiles : [], + PostData: { + MID, + Keys: "StockSingleKPI", + JsonData: JSON.stringify({ + StockImgs: index === 0 ? allImages : [], + StockChilds: childGroup, + }), + UserId, + }, + })); + + console.log("✅ Chunking complete. Total chunks:", chunkedPosts.length); + return chunkedPosts; + + } catch (err) { + console.error("🔥 Error in getStockDataChunks:", err); + return [{ PostData: {} }]; + } +} + + + + +// helper: promisify executeSql +export function getDataFor_SOSONEAPP(storeData, KpiData, UserId, previousDayUpload = false) { + let d1 = new Date(); + let d2 = moment(d1).format('MM/DD/YYYY'); + let { StoreId, StateId, EmpId, MID, UploadStatus, Status, VisitDate, ChainId, StoreTypeId, StoreClassId, StoreCategoryId } = storeData; + let { ScreenName, MenuId, UploadKeyName } = KpiData + + var postData = {}; + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + let txn1 = txn; + let selectlist = ` DISTINCT p.SOS_HEADER_ID as SOSHeaderId,m.SOSHeaderTable,m.SOSHeaderField,p.SOS_HDR_VALUE as SOSHeaderValue,p.HEADER_NAME as HeaderName,m.SOSHeaderFacing,m.SOSHeaderFacingLable,m.SOSHeaderImage,m.SOSHeaderImageGrid,p.SOS_HDR_FACING as SOSHdrFacing `; + let join = ` INNER JOIN Master_ShareOfShelfDefinition m on (p.SOS_HDR_VALUE=m.SOSHeaderValue and p.SOS_HDR_TABLE = m.SOSHeaderTable and p.SOS_HDR_FIELD=m.SOSHeaderField) `; + let q = ` SELECT ${selectlist} FROM ${AppTables.SOS_HDR_DATA} p ${join} WHERE p.STORE_ID='${StoreId}' ` + (!previousDayUpload ? ` and p.VISIT_DATE='${d2}' ` : '') + ` order by p.HEADER_NAME `; + + console.log("sos_oneappQ", q) + let allData = [], allKPIfiles = []; + await txn.executeSql(q, [], async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + console.log("sos_oneapp_count",txnres2.rows.length) + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + let { SOSHeaderId, SOSHeaderTable, SOSHeaderField, SOSHeaderValue, HeaderName, SOSHeaderFacing, SOSHeaderFacingLable, SOSHeaderImage, SOSHeaderImageGrid, SOSHdrFacing } = data; + let obj = {}; + + obj['MID'] = MID; + obj['UserId'] = UserId; + obj['Store_Id'] = StoreId; + obj['SOSHeaderTable'] = SOSHeaderTable; + obj['SOSHeaderField'] = SOSHeaderField; + obj['SOSHeaderValue'] = SOSHeaderValue; + obj['HeaderName'] = HeaderName; + obj['SOSHdrFacing'] = SOSHdrFacing != null && SOSHdrFacing != '' ? SOSHdrFacing : '0'; + + async function getWindowSplits() { + let q2 = ` SELECT IMAGE1,TYPE as Type,SOS_HDR_VALUE,SOS_CHILD_VALUE FROM ${AppTables.SOS_IMAGES} where SOS_HEADER_ID='${SOSHeaderId}' and STORE_ID='${StoreId}' ` + (!previousDayUpload ? ` and VISIT_DATE='${d2}' ` : '') + ` `; + + let allWindowSplitImages = []; + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + + txn.executeSql(q2, [], async function (txn2, txnres3) { + + if (txnres3.rows.length > 0) { + for (var j = 0; j < txnres3.rows.length; j++) { + let splitItem = txnres3.rows.item(j); + let { IMAGE1, Type, SOS_HDR_VALUE, SOS_CHILD_VALUE } = splitItem + let obj1 = {}; + + obj1['MID'] = MID; + obj1['SOS_HDR_VALUE'] = SOS_HDR_VALUE + obj1['SOS_CHILD_VALUE'] = SOS_CHILD_VALUE + obj1['Type'] = Type + obj1['Image1'] = (IMAGE1 != null && IMAGE1 != '' && IMAGE1 != 'undefined' && IMAGE1 != 'NA' ? IMAGE1 : '') + + allWindowSplitImages.push(obj1); + if (IMAGE1 != null && IMAGE1 != '' && IMAGE1 != 'undefined' && IMAGE1 != 'NA') { + let imgPath = common_ImagePath + IMAGE1; + let file = { + uri: imgPath, + type: 'image/jpeg', + name: IMAGE1, + filetype: 'image', + folderName: 'SOSImages', + } + allKPIfiles.push(file); + } + + if (j == txnres3.rows.length - 1) { + console.log('all images added') + resolve(allWindowSplitImages); + } + } + } + else { + resolve(allWindowSplitImages); + } + + }, function (txnE, txnerr) { console.log(txnerr); resolve(allWindowSplitImages); },); + + }); + }); + } + + obj['SOSImages'] = await getWindowSplits(); + + + async function getChilds() { + return new Promise((resolve, reject) => { + let allStock = []; + + let selectlist_c = ` Distinct m.SOSDefinitionId,m.SOSChildTable,m.SOSChildField,p.SOS_CHILD_VALUE as SOSChildValue,p.CHILD_NAME as ChildName,m.SOSChildTotalFacing,m.SOSChildSelfFacing,m.SOSChildTotalFacingLable,m.SOSChildSelfFacingLable,m.SOSChildImage,m.SOSChildImageCount,m.SOSChildImageGrid,p.TOTAL_FACING as TotalFacing,p.SELF_FACING as SelfFacing`; + let join_s = ` INNER JOIN Master_ShareOfShelfDefinition m on (p.SOS_DEFINITION_ID=m.SOSDefinitionId and m.SOSChildTable=p.SOS_CHILD_TABLE and p.SOS_CHILD_FIELD=m.SOSChildField) `; + let q4 = ` SELECT ${selectlist_c} FROM ${AppTables.SOS_CHILD_DATA} p ${join_s} WHERE p.SOS_HDR_VALUE='${SOSHeaderValue}' and p.STORE_ID='${StoreId}' ` + (!previousDayUpload ? ` and p.VISIT_DATE='${d2}' ` : '') + ` order by p.CHILD_NAME `; + + console.log("sos_oneappQ", q4) + db.transaction(async function (txn) { + + txn.executeSql(q4, [], async function (txn2, txnres3) { + if (txnres3.rows.length > 0) { + for (var j = 0; j < txnres3.rows.length; j++) { + let SData = txnres3.rows.item(j); + let { SOSDefinitionId, SOSChildTable, SOSChildField, SOSChildValue, ChildName, SOSChildTotalFacing, SOSChildSelfFacing, SOSChildTotalFacingLable, SOSChildSelfFacingLable, SOSChildImage, SOSChildImageCount, SOSChildImageGrid, TotalFacing, SelfFacing } = SData; + + let obj1 = {}; + obj1['MID'] = MID; + obj1['SOSDefinitionId'] = SOSDefinitionId + obj1['SOSHeaderValue'] = SOSHeaderValue + obj1['SOSChildTable'] = SOSChildTable + obj1['SOSChildField'] = SOSChildField + obj1['SOSChildValue'] = SOSChildValue + obj1['ChildName'] = ChildName + obj1['TotalFacing'] = TotalFacing != null && TotalFacing != '' && TotalFacing != "null" && TotalFacing != "undefined" ? TotalFacing : '0'; + obj1['SelfFacing'] = SelfFacing != null && SelfFacing != '' && SelfFacing != "null" && SelfFacing != "undefined" ? SelfFacing : '0'; + + allStock.push(obj1); + if (j == txnres3.rows.length - 1) { + resolve(allStock); + } + } + } + else { + resolve(allStock); + } + + }, function (txnE, txnerr) { console.log(txnerr); resolve(allStock); },); + + }); + }); + } + obj['SOSChilds'] = await getChilds(); + + // allData.push(obj); + + // sos question with stock + + async function getChildsWindQS() { + return new Promise((resolve, reject) => { + let allStock = []; + + let selectlist_c = ` Distinct m.SOSDefinitionId,m.SOSChildTable,p.SOS_CHILD_VALUE,m.SOSChildField,m.SOSChildTotalFacing,m.SOSChildSelfFacing,m.SOSChildTotalFacingLable,m.SOSChildSelfFacingLable,m.SOSChildImage,m.SOSChildImageCount,m.SOSChildImageGrid,p.QUESTION_ID as questionId,p.IMAGE1 as Image1,p.QUESTION_CODE as questionCode,p.QUESTION_TYPE as questionType,p.ANSWER as answer,p.ANSWER_ID as answerId`; + let join_s = ` INNER JOIN Master_ShareOfShelfDefinition m on p.SOS_DEFINITION_ID=m.SOSDefinitionId `; + let q4 = ` SELECT ${selectlist_c} FROM ${AppTables.SOS_CHILD_QUES_DATA} p ${join_s} WHERE p.SOS_HDR_VALUE='${SOSHeaderValue}' and p.STORE_ID='${StoreId}' ` + (!previousDayUpload ? ` and p.VISIT_DATE='${d2}' ` : '') + ` order by p.QUESTION_ID `; + + db.transaction(async function (txn) { + + txn.executeSql(q4, [], async function (txn2, txnres3) { + if (txnres3.rows.length > 0) { + for (var j = 0; j < txnres3.rows.length; j++) { + let SData = txnres3.rows.item(j); + let { SOSDefinitionId, SOS_CHILD_VALUE, SOSChildTable, SOSChildField, SOSChildValue, SOSChildTotalFacing, SOSChildSelfFacing, SOSChildTotalFacingLable, SOSChildSelfFacingLable, SOSChildImage, SOSChildImageCount, SOSChildImageGrid, Image1, questionId, questionCode, questionType, answer, answerId } = SData; + + let obj1 = {}; + obj1['MID'] = MID; + obj1['SOSDefinitionId'] = SOSDefinitionId + obj1['SOSHeaderValue'] = SOSHeaderValue + obj1['SOSQuestionId'] = questionId + obj1['Answer'] = answer + obj1['AnswerId'] = answerId + obj1['Image1'] = Image1 != null && Image1 != '' && Image1 != 'undefined' && Image1 != 'NA' ? Image1 : '' + obj1['SOSChildValue'] = SOS_CHILD_VALUE + + + + if (Image1 != null && Image1 != '' && Image1 != 'undefined' && Image1 != 'NA') { + let imgPath = common_ImagePath + Image1; + let file = { + uri: imgPath, + type: 'image/jpeg', + name: Image1, + filetype: 'image', + folderName: 'SOSImages', + } + allKPIfiles.push(file); + } + allStock.push(obj1); + if (j == txnres3.rows.length - 1) { + resolve(allStock); + } + } + } + else { + resolve(allStock); + } + + }, function (txnE, txnerr) { console.log(txnerr); resolve(allStock); },); + + }); + }); + } + obj['QuestionAnswers'] = await getChildsWindQS(); + + allData.push(obj); + + } + postData['MID'] = MID; + postData['Keys'] = 'SOSOneApp'; + postData['JsonData'] = JSON.stringify(allData); + postData['UserId'] = UserId; + + + // console.log('SOSOneApp:',postData); + resolve({ 'Files': allKPIfiles, 'PostData': postData }); + } + else { + resolve({ 'PostData': postData }); + } + }, function (txnE, txnerr) { console.log(txnerr); resolve({ 'PostData': postData }); },); + + }); + }).then((val) => { + return val; + }).catch((err) => { + console.log(err); + return postData; + }); +} + +export function getDataFor_SOSEyeLevelONEAPP(storeData, KpiData, UserId, previousDayUpload = false) { + let d1 = new Date(); + let d2 = moment(d1).format('MM/DD/YYYY'); + let { StoreId, StateId, EmpId, MID, UploadStatus, Status, VisitDate, ChainId, StoreTypeId, StoreClassId, StoreCategoryId } = storeData; + let { ScreenName, MenuId, UploadKeyName } = KpiData + + var postData = {}; + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + let txn1 = txn; + let selectlist = ` DISTINCT p.SOS_HEADER_ID as SOSHeaderId,m.SOSHeaderTable,m.SOSHeaderField,p.SOS_HDR_VALUE as SOSHeaderValue,p.HEADER_NAME as HeaderName,m.SOSHeaderEyeLevelFacing,m.SOSHeaderEyeLevelFacingLable, m.SOSHeaderNonEyeLevelFacing,m.SOSHeaderNonEyeLevelFacingLable,m.SOSHeaderImage,m.SOSHeaderImageCount,m.SOSHeaderImageGrid, p.EYE_LEVEL_HDR_FACING , p.EYE_LEVEL_HDR_FACING as SOSHdrEyeFacing, p.NONEYE_LEVEL_HDR_FACING as SOSHdrNonEyeFacing`; + let join = ` INNER JOIN Master_ShareOfShelfEyeLevelDefinition m on p.SOS_HDR_VALUE=m.SOSHeaderValue `; + let q = ` SELECT ${selectlist} FROM ${AppTables.EYE_LEVEL_HDR_DATA} p ${join} WHERE p.STORE_ID='${StoreId}' ` + (!previousDayUpload ? ` and p.VISIT_DATE='${d2}' ` : '') + ` order by p.HEADER_NAME `; + + let allData = [], allKPIfiles = []; + await txn.executeSql(q, [], async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + let { SOSHeaderId, SOSHeaderTable, SOSHdrEyeFacing, SOSHdrNonEyeFacing, SOSHeaderField, SOSHeaderValue, HeaderName, SOSHeaderFacing, SOSHeaderFacingLable, SOSHeaderImage, SOSHeaderImageCount, SOSHeaderImageGrid, SOSHdrFacing } = data; + let obj = {}; + + obj['MID'] = MID; + obj['UserId'] = UserId; + obj['Store_Id'] = StoreId; + obj['SOSHeaderTable'] = SOSHeaderTable; + obj['SOSHeaderField'] = SOSHeaderField; + obj['SOSHeaderValue'] = SOSHeaderValue; + obj['HeaderName'] = HeaderName; + obj['SOSHdrEyeFacing'] = SOSHdrEyeFacing != null && SOSHdrEyeFacing != '' ? SOSHdrEyeFacing : '0'; + obj['SOSHdrNonEyeFacing'] = SOSHdrNonEyeFacing != null && SOSHdrNonEyeFacing != '' ? SOSHdrNonEyeFacing : '0'; + + async function getWindowSplits() { + let q2 = ` SELECT Distinct IMAGE1,TYPE as Type,SOS_HDR_VALUE,SOS_CHILD_VALUE FROM ${AppTables.EYE_LEVEL_IMAGES} where SOS_HEADER_ID='${SOSHeaderId}' and STORE_ID='${StoreId}' ` + (!previousDayUpload ? ` and VISIT_DATE='${d2}' ` : '') + ` `; + + let allWindowSplitImages = []; + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + + txn.executeSql(q2, [], async function (txn2, txnres3) { + + if (txnres3.rows.length > 0) { + for (var j = 0; j < txnres3.rows.length; j++) { + let splitItem = txnres3.rows.item(j); + let { IMAGE1, Type, SOS_HDR_VALUE, SOS_CHILD_VALUE } = splitItem + let obj1 = {}; + + obj1['MID'] = MID; + obj1['SOS_HDR_VALUE'] = SOS_HDR_VALUE + obj1['SOS_CHILD_VALUE'] = SOS_CHILD_VALUE + obj1['Type'] = Type + obj1['Image1'] = (IMAGE1 != null ? IMAGE1 : '') + + allWindowSplitImages.push(obj1); + if (IMAGE1 != null && IMAGE1 != '') { + let imgPath = common_ImagePath + IMAGE1; + let file = { + uri: imgPath, + type: 'image/jpeg', + name: IMAGE1, + filetype: 'image', + folderName: 'SOSImages', + } + allKPIfiles.push(file); + } + + if (j == txnres3.rows.length - 1) { + console.log('all images added') + resolve(allWindowSplitImages); + } + } + } + else { + resolve(allWindowSplitImages); + } + + }, function (txnE, txnerr) { console.log(txnerr); resolve(allWindowSplitImages); },); + + }); + }); + } + + obj['SOSImages'] = await getWindowSplits(); + + + async function getChilds() { + return new Promise((resolve, reject) => { + let allStock = []; + let selectlist_c = ` Distinct m.SOSDefinitionId,m.SOSChildTable,m.SOSChildField,m.SOSChildValue,m.ChildName,m.SOSChildEyeLevelTotalFacing,m.SOSChildNonEyeLevelTotalFacing,m.SOSChildNonEyeLevelSelfFacing,m.SOSChildEyeLevelSelfFacing,m.SOSHeaderNonEyeLevelFacingLable,m.SOSChildEyeLevelTotalFacingLable,m.SOSChildEyeLevelSelfFacingLable,m.SOSChildNonEyeLevelSelfFacingLable,m.SOSChildImage,m.SOSChildImageCount,m.SOSChildImageGrid,p.TOTAL_EYE_FACING as TotalEyeLevelFacing, p.TOTAL_NONEYE_FACING as TotalNonEyeFacing ,p.SELF_EYE_FACING as SelfEyeFacing ,p.SELF_NONEYE_FACING as SelfNonEyeFacing` + // let selectlist_c=` m.SOSDefinitionId,m.SOSChildTable,m.SOSChildField,m.SOS_CHILD_VALUE as SOSChildValue,m.CHILD_NAME as ChildName,m.SOSChildEyeLevelTotalFacing,m.SOSChildNonEyeLevelTotalFacing,m.SOSChildEyeLevelSelfFacing,m.SOSChildNonEyeLevelSelfFacing,m.SOSChildEyeLevelTotalFacingLable,m.SOSChildNonEyeLevelTotalFacingLable,m.SOSChildEyeLevelSelfFacingLable,m.SOSChildNonEyeLevelSelfFacingLable,m.SOSChildImage,m.SOSChildImageCount,m.SOSChildImageGrid,m.TOTAL_FACING as TotalFacing,m.SELF_FACING as SelfFacing`; + let join_s = ` INNER JOIN Master_ShareOfShelfEyeLevelDefinition m on p.SOS_DEFINITION_ID=m.SOSDefinitionId `; + let q4 = ` SELECT ${selectlist_c} FROM ${AppTables.EYE_LEVEL_CHILD_DATA} p ${join_s} WHERE p.SOS_HDR_VALUE='${SOSHeaderValue}' and p.STORE_ID='${StoreId}' ` + (!previousDayUpload ? ` and p.VISIT_DATE='${d2}' ` : '') + ` order by p.CHILD_NAME `; + + db.transaction(async function (txn) { + + txn.executeSql(q4, [], async function (txn2, txnres3) { + if (txnres3.rows.length > 0) { + for (var j = 0; j < txnres3.rows.length; j++) { + let SData = txnres3.rows.item(j); + let { SOSDefinitionId, SOSChildTable, SelfNonEyeFacing, TotalNonEyeFacing, SOSChildField, SOSChildValue, ChildName, SelfEyeFacing, TotalEyeLevelFacing, SOSChildTotalFacing, SOSChildSelfFacing, SOSChildTotalFacingLable, SOSChildSelfFacingLable, SOSChildImage, SOSChildImageCount, SOSChildImageGrid, TotalFacing, SelfFacing } = SData; + + let obj1 = {}; + obj1['MID'] = MID; + obj1['SOSDefinitionId'] = SOSDefinitionId + obj1['SOSHeaderValue'] = SOSHeaderValue + obj1['SOSChildTable'] = SOSChildTable + obj1['SOSChildField'] = SOSChildField + obj1['SOSChildValue'] = SOSChildValue + obj1['ChildName'] = ChildName + // obj1['TotalFacing']=TotalFacing!=null && TotalFacing!='' && TotalFacing!="null" && TotalFacing!="undefined"?TotalFacing:'0'; + // obj1['SelfFacing']=SelfFacing!=null && SelfFacing!='' && SelfFacing!="null" && SelfFacing!="undefined"?SelfFacing:'0'; + + obj1['TotalNonEyeFacing'] = TotalNonEyeFacing != null && TotalNonEyeFacing != '' && TotalNonEyeFacing != "null" && TotalNonEyeFacing != "undefined" ? TotalNonEyeFacing : '0'; + obj1['SelfNonEyeFacing'] = SelfNonEyeFacing != null && SelfNonEyeFacing != '' && SelfNonEyeFacing != "null" && SelfNonEyeFacing != "undefined" ? SelfNonEyeFacing : '0'; + obj1['TotalEyeLevelFacing'] = TotalEyeLevelFacing != null && TotalEyeLevelFacing != '' && TotalEyeLevelFacing != "null" && TotalEyeLevelFacing != "undefined" ? TotalEyeLevelFacing : '0'; + obj1['SelfEyeFacing'] = SelfEyeFacing != null && SelfEyeFacing != '' && SelfEyeFacing != "null" && SelfEyeFacing != "undefined" ? SelfEyeFacing : '0'; + + allStock.push(obj1); + if (j == txnres3.rows.length - 1) { + resolve(allStock); + } + } + } + else { + resolve(allStock); + } + + }, function (txnE, txnerr) { console.log(txnerr); resolve(allStock); },); + + }); + }); + } + obj['SOSChilds'] = await getChilds(); + + allData.push(obj); + } + postData['MID'] = MID; + postData['Keys'] = 'SosEyeLevelOneApp'; + postData['JsonData'] = JSON.stringify(allData); + postData['UserId'] = UserId; + + + console.log('SosEyeLevelOneApp:', postData); + resolve({ 'Files': allKPIfiles, 'PostData': postData }); + } + else { + resolve({ 'PostData': postData }); + } + }, function (txnE, txnerr) { console.log(txnerr); resolve({ 'PostData': postData }); },); + + }); + }).then((val) => { + return val; + }).catch((err) => { + console.log(err); + return postData; + }); +} + +export function getDataFor_PVONEAPP(storeData, KpiData, UserId, previousDayUpload = false) { + let d1 = new Date(); + let d2 = moment(d1).format('MM/DD/YYYY'); + let { StoreId, StateId, EmpId, MID, UploadStatus, Status, VisitDate, ChainId, StoreTypeId, StoreClassId, StoreCategoryId } = storeData; + let { ScreenName, MenuId, UploadKeyName } = KpiData + + var postData = {}; + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + let txn1 = txn; + + let selectlist = ` Distinct w.STORE_ID as StoreId,w.PVIS_HEADER_ID as PVisHeaderId,wd.VisibilityDefinitionId,wd.VisibilityId,wd.VisibilityName,wd.VisibilityTable,wd.VisibilityField,wd.VisibilityValue,wd.ChildName,wd.VisibilityRefImage,wd.VisibilityElementCheckAssortment,wd.VisibilityElementStockRequired,w.IS_PRESENT as IsPresent,wd.VisibilityNotExistCamera,w.PVIS_NA_IMAGE as PVisNAImage,wd.VisibilityExistReasonEnable,wd.VisibilityNotExistReasonEnable,w.REASON_ID as ReasonId,w.REASON as Reason,w.REMARK as Remark,wd.NoOfSplit,wd.VisibilityImage1,wd.VisibilityImage2,wd.VisibilityImage1Lable,wd.VisibilityImage2Lable,wd.VisibilityImage1CameraGrid,wd.VisibilityImage2CameraGrid,w.IS_STORE_SPECIFIC as isStoreSpecific,w.REASON_REMARK`; + let join = ` inner join Master_VisibilityDefinition wd on w.PVIS_DEFINITION_ID=wd.VisibilityDefinitionId `; + let q = ` Select ${selectlist} from ${AppTables.PAIDVIS_HDR_DATA} w ${join} where w.STORE_ID='${StoreId}' and MENU_ID='${MenuId}' `; + + + let allChilds = [], allKPIfiles = [], isSpecificKPI = false; + await txn.executeSql(q, [], async function (txn2, txnres2) { + console.log('pv count:', MenuId, txnres2.rows.length) + if (txnres2.rows.length > 0) { + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + let { PVisHeaderId, VisibilityDefinitionId, VisibilityId, VisibilityName, VisibilityTable, VisibilityField, VisibilityValue, ChildName, VisibilityElementStockRequired, VisibilityElementCheckAssortment, NoOfSplit, IsPresent, VisibilityNotExistCamera, PVisNAImage, VisibilityExistReasonEnable, VisibilityNotExistReasonEnable, ReasonId, Reason, VisibilityImage1, VisibilityImage2, Remark, VisibilityImage1Lable, VisibilityImage2Lable, isStoreSpecific, REASON_REMARK } = data; + let obj = {}; + + if (i == 0) { + isSpecificKPI = isStoreSpecific; + } + let isStockReq = (VisibilityElementStockRequired == 'true' || VisibilityElementStockRequired == 1) ? 1 : 0; + let isCheckAssrt = (VisibilityElementCheckAssortment == 'true' || VisibilityElementCheckAssortment == 1) ? 1 : 0; + let isNaCamAvl = (VisibilityNotExistCamera == 'true' || VisibilityNotExistCamera == 1) ? 1 : 0; + let isReasonEnable = (VisibilityExistReasonEnable == 'true' || VisibilityExistReasonEnable == 1) ? 1 : 0; + let isNAReasonEnable = (VisibilityNotExistReasonEnable == 'true' || VisibilityNotExistReasonEnable == 1) ? 1 : 0; + let isImage1 = (VisibilityImage1 == 'true' || VisibilityImage1 == 1) ? 1 : 0; + let isImage2 = (VisibilityImage2 == 'true' || VisibilityImage2 == 1) ? 1 : 0; + + + obj['MID'] = MID; + obj['UserId'] = UserId; + obj['Store_Id'] = StoreId; + obj['MenuId'] = MenuId; + obj['VisibilityDefinitionId'] = VisibilityDefinitionId; + obj['VisibilityId'] = VisibilityId; + obj['VisibilityTable'] = VisibilityTable; + obj['VisibilityField'] = VisibilityField; + obj['VisibilityValue'] = VisibilityValue; + obj['ChildName'] = ChildName; + obj['IsPresent'] = IsPresent; + obj['VisibilityNotExistImage'] = isNaCamAvl == 1 ? PVisNAImage : ''; + obj['ReasonId'] = ReasonId; + obj['Reason'] = Reason; + obj['Remark'] = Remark != null ? Remark : ''; + obj['ReasonRemark'] = REASON_REMARK; + + if (isNaCamAvl == 1 && PVisNAImage != '') { + let imgPath = common_ImagePath + PVisNAImage; + let file = { + uri: imgPath, + type: 'image/jpeg', + name: PVisNAImage, + filetype: 'image', + folderName: 'PaidVisibilityImages', + } + allKPIfiles.push(file); + } + + + if (IsPresent == 1 && parseInt(NoOfSplit) > 0) { + console.log('add paid vis ') + + + async function getWindowSplits() { + let q2 = `select * from ${AppTables.PAIDVIS_IMAGES} where PVIS_HEADER_ID='${PVisHeaderId}' and STORE_ID='${StoreId}' `; + + let allWindowSplitImages = []; + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + + txn.executeSql(q2, [], async function (txn2, txnres3) { + + if (txnres3.rows.length > 0) { + for (var j = 0; j < txnres3.rows.length; j++) { + let splitItem = txnres3.rows.item(j); + let { IMAGE1, IMAGE2 } = splitItem + let obj1 = { 'Image1': (isImage1 == 1 && IMAGE1 != null ? IMAGE1 : ''), 'Image2': (isImage2 == 1 && IMAGE2 != null ? IMAGE2 : '') }; + obj1['VisibilityDefinitionId'] = VisibilityDefinitionId + obj1['VisibilityId'] = VisibilityId + obj1['MID'] = MID; + // obj1['VisibilityImage1Lable']=VisibilityImage1Lable; + // obj1['VisibilityImage2Lable']=VisibilityImage2Lable; + + allWindowSplitImages.push(obj1); + if (isImage1 == 1 && IMAGE1 != null && IMAGE1 != '') { + let imgPath = common_ImagePath + IMAGE1; + let file = { + uri: imgPath, + type: 'image/jpeg', + name: IMAGE1, + filetype: 'image', + folderName: 'PaidVisibilityImages', + } + allKPIfiles.push(file); + } + if (isImage2 == 1 && IMAGE2 != null && IMAGE2 != '') { + let imgPath = common_ImagePath + IMAGE2; + let file = { + uri: imgPath, + type: 'image/jpeg', + name: IMAGE2, + filetype: 'image', + folderName: 'PaidVisibilityImages', + } + allKPIfiles.push(file); + } + + if (j == txnres3.rows.length - 1) { + console.log('all images added') + resolve(allWindowSplitImages); + } + } + } + else { + resolve(allWindowSplitImages); + } + + }, function (txnE, txnerr) { console.log(txnerr); resolve(allWindowSplitImages); },); + + }); + }); + } + + obj['PaidVisSplitImages'] = await getWindowSplits(); + } + + if (IsPresent == 1) { + + async function getWindowQA() { + + + let selectlist_q1 = ` DISTINCT q.QUESTION_ID as VisibilityQuestionId,q.QUESTION_CODE as VisibilityQuestionCode,wq.VisibilityQuestionName,wq.QuestionType,wq.VQShowCamera,wq.VQCameraMandatory,wq.VQLengthValidationRequired,wq.VQMinimumChar,wq.VQMaximumChar,wq.VQDecimalPoint,wq.VQDateRangeMin,wq.VQDateRangeMax,wq.VQVoiceLengthInMinutes,wq.VQDefaultQuestionEnable,q.ANSWER as Answer,q.ANSWER_ID as AnswerId,q.MULTI_OPTIONS_IDS as multi_op_ids,q.IMAGE_ALLOW1 as VAShowCamera,q.IMAGE1 as Image1 `; + let join_q2 = ` inner join Mapping_VisibilityQuestion mq on mq.VisibilityQuestionId=wq.VisibilityQuestionId and q.PVIS_DEFINITION_ID=mq.VisibilityDefinitionId`; + let join_q1 = ` inner join Master_VisibilityQuestion wq on wq.VisibilityQuestionId=q.QUESTION_ID `; + let q3 = `select ${selectlist_q1} from ${AppTables.PAIDVIS_CHILD_DATA} q ${join_q1} ${join_q2} where q.STORE_ID='${StoreId}' and q.PVIS_HEADER_ID='${PVisHeaderId}' order by wq.VisibilityQuestionSequence `; + + let allQAs = []; + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + txn.executeSql(q3, [], async function (txn2, txnres3) { + console.log('getWindowQA PaidvisOne App:', txnres3.rows.length); + if (txnres3.rows.length > 0) { + for (var j = 0; j < txnres3.rows.length; j++) { + let QAData = txnres3.rows.item(j); + let { VisibilityQuestionId, AnswerId, Answer, VAShowCamera, Image1 } = QAData + let showImage1 = (VAShowCamera == 'true' || VAShowCamera == 1) ? 1 : 0; + let obj1 = {}; + obj1['MID'] = MID; + obj1['VisibilityDefinitionId'] = VisibilityDefinitionId + obj1['VisibilityId'] = VisibilityId + obj1['VisibilityQuestionId'] = VisibilityQuestionId + obj1['AnswerId'] = AnswerId + obj1['Answer'] = Answer + obj1['Image1'] = (showImage1 == 1 ? Image1 : '') + + allQAs.push(obj1); + + if (showImage1 == 1 && Image1 != null && Image1 != '') { + let imgPath = common_ImagePath + Image1; + let file = { + uri: imgPath, + type: 'image/jpeg', + name: Image1, + filetype: 'image', + folderName: 'PaidVisibilityImages', + } + allKPIfiles.push(file); + } + if (j == txnres3.rows.length - 1) { + resolve(allQAs); + } + } + } + else { + resolve(allQAs); + } + + }, function (txnE, txnerr) { console.log('test', txnerr); resolve(allQAs); },); + }); + }); + } + + obj['QuestionAnswers'] = await getWindowQA(); + + if (isStockReq == 1) { + async function getWindowStock() { + return new Promise((resolve, reject) => { + let allStock = []; + + let join_s1 = ''; + if (isCheckAssrt) { + join_s1 = ` inner join Mapping_ProductAssortmentStorewise a on a.ProductId=s.PVIS_STOCK_VALUE`; + } + let selectlist_s1 = ` Distinct s.PVIS_STOCK_DEFINITION_ID as VisibilityStockDefinitionId, s.PVIS_DEFINITION_ID as VisibilityDefinitionId,s.PVIS_STOCK_TABLE as VisibilityStockTable,s.PVIS_STOCK_FIELD as VisibilityStockField,s.PVIS_STOCK_VALUE as VisibilityStockValue,s.PVIS_STOCK_MBQ as VisibilityStockMBQ,s.PRODUCT_NAME as ProductName, s.STOCK as Stock,s.IS_PVIS_PRESENT as isPVisPresent `; + let q4 = `select ${selectlist_s1} from ${AppTables.PAIDVIS_STOCK_DATA} s ${join_s1} where s.STORE_ID='${StoreId}' and s.PVIS_HEADER_ID='${PVisHeaderId}' `; + if (isCheckAssrt) { + q4 += ` and a.StoreId='${StoreId}' `; + } + q4 += ` order by s.PRODUCT_NAME `; + + + db.transaction(async function (txn) { + + txn.executeSql(q4, [], async function (txn2, txnres3) { + if (txnres3.rows.length > 0) { + for (var j = 0; j < txnres3.rows.length; j++) { + let SData = txnres3.rows.item(j); + let { VisibilityStockDefinitionId, VisibilityStockTable, VisibilityStockField, VisibilityStockValue, VisibilityStockMBQ, ProductName, Stock, isPVisPresent } = SData + + let obj1 = {}; + obj1['MID'] = MID; + obj1['VisibilityDefinitionId'] = VisibilityDefinitionId + obj1['VisibilityId'] = VisibilityId + obj1['VisibilityStockDefinitionId'] = VisibilityStockDefinitionId + obj1['VisibilityStockTable'] = VisibilityStockTable + obj1['VisibilityStockField'] = VisibilityStockField + obj1['VisibilityStockValue'] = VisibilityStockValue + obj1['VisibilityStockMBQ'] = VisibilityStockMBQ + obj1['ProductName'] = ProductName + obj1['Stock'] = Stock != '' && Stock != null && Stock != "null" && Stock != "undefined" ? Stock : 0; + obj1['isPVisPresent'] = isPVisPresent; + obj1['Specific'] = isSpecificKPI; + + allStock.push(obj1); + if (j == txnres3.rows.length - 1) { + resolve(allStock); + } + } + } + else { + resolve(allStock); + } + + }, function (txnE, txnerr) { console.log(txnerr); resolve(allStock); },); + + }); + }); + } + obj['StockData'] = await getWindowStock(); + } + else { + obj['StockData'] = []; + } + } + else { + obj['PaidVisSplitImages'] = []; + obj['QuestionAnswers'] = [] + obj['StockData'] = []; + + } + + allChilds.push(obj); + } + + let upkName = UploadKeyName != null && UploadKeyName != 'undefined' && UploadKeyName != '' ? UploadKeyName : 'PaidVisOneApp'; + postData['MID'] = MID; + postData['Keys'] = upkName; + postData['JsonData'] = JSON.stringify(allChilds); + postData['UserId'] = UserId; + + + console.log('PaidVisOneApp postdata:', upkName, postData); + resolve({ 'Files': allKPIfiles, 'PostData': postData }); + } + else { + resolve({ 'PostData': postData }); + } + }, function (txnE, txnerr) { console.log(txnerr); resolve({ 'PostData': postData }); },); + + }); + }).then((val) => { + return val; + }).catch((err) => { + console.log(err); + return postData; + }); +} +export function getWAREHOUSECAMPAIGN(storeData, KpiData, UserId, previousDayUpload = false) { + + let d1 = new Date(); + let d2 = moment(d1).format('MM/DD/YYYY'); + let { StoreId, StateId, EmpId, MID, UploadStatus, Status, VisitDate, ChainId, StoreTypeId, StoreClassId, StoreCategoryId } = storeData; + let { ScreenName, MenuId, UploadKeyName } = KpiData + + var postData = {}; + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + let txn1 = txn; + + let selectlist = ` Distinct w.STORE_ID as StoreId,w.WAREHS_HEADER_ID as WAREHSHeaderId,w.CAMPAIGN_ID,wd.ItemId,wd.ItemCode,wd.ItemName,wd.ItemCategory,wd.ItemCategoryId,w.IS_PRESENT as IsPresent,w.ITEM_QTY as itemQty,w.KPITYPE as KpiType`; + let join = ` inner join Master_WarehouseItem wd on w.ITEM_ID=wd.ItemId `; + let q = ` Select ${selectlist} from ${AppTables.WAREHOUSE_CAMPAIGN_HDR_DATA} w ${join} where w.STORE_ID='${StoreId}' and MENU_ID='${MenuId}' `; + + + let allChilds = [], allKPIfiles = [], isSpecificKPI = false; + await txn.executeSql(q, [], async function (txn2, txnres2) { + console.log('wh count:', MenuId, txnres2.rows.length) + if (txnres2.rows.length > 0) { + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + // KpiTypId, + let { WAREHSHeaderId, CameraSplitNo, ItemId, ItemCode, ItemName, ItemCategory, ItemCategoryId, itemQty, KpiType, IsPresent, CAMPAIGN_ID } = data; + let obj = {}; + + // let isImage1=(VisibilityImage1=='true' || VisibilityImage1==1)?1:0; + // let isImage2=(VisibilityImage2=='true' || VisibilityImage2==1)?1:0; + + // let {WHRESHeaderId,ItemId,ItemCode,ItemName,ItemCategory,ItemCategoryId,itemQty,KpiTypId,KpiTyp,IsPresent}=data; + obj['MID'] = MID; + obj['UserId'] = UserId; + obj['Store_Id'] = StoreId; + obj['MenuId'] = MenuId; + obj['ItemId'] = ItemId; + obj['CampaignId'] = CAMPAIGN_ID; + // obj['ItemCode']=ItemCode; + // obj['ItemName']=ItemName; + // obj['ItemCategory']=ItemCategory; + obj['ItemCategoryId'] = ItemCategoryId; + obj['itemQty'] = itemQty || 0; + // obj['KpiTypId']=KpiTypId; + obj['DeploymentType'] = KpiType; + obj['IsPresent'] = IsPresent; + + + + if (IsPresent == 1) { + console.log('add warehouse vis ') + + + async function getWindowSplits() { + let q2 = `select * from ${AppTables.WAREHOUSE_CAMPAIGN_IMAGES} where WAREHS_HEADER_ID='${WAREHSHeaderId}' and STORE_ID='${StoreId}' `; + + let allWindowSplitImages = []; + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + + txn.executeSql(q2, [], async function (txn2, txnres3) { + + if (txnres3.rows.length > 0) { + for (var j = 0; j < txnres3.rows.length; j++) { + let splitItem = txnres3.rows.item(j); + let { IMAGE1, IMAGE2, IMAGE_LABEL } = splitItem + let obj1 = {}; + obj1["ImageName"] = (IMAGE1 != null ? IMAGE1 : '') + obj1["ImageType"] = (IMAGE_LABEL != null ? IMAGE_LABEL : '') + // let obj1={'Image1':(IMAGE1!=null?IMAGE1:''),'Image2':(IMAGE2!=null?IMAGE2:'')}; + + // obj1['VisibilityDefinitionId']=VisibilityDefinitionId + obj1['ItemId'] = ItemId + obj1['MID'] = MID; + + allWindowSplitImages.push(obj1); + if (IMAGE1 != null && IMAGE1 != '') { + let imgPath = common_ImagePath + IMAGE1; + let file = { + uri: imgPath, + type: 'image/jpeg', + name: IMAGE1, + filetype: 'image', + folderName: 'WareHouseCampaignImages', + } + allKPIfiles.push(file); + } + if (IMAGE2 != null && IMAGE2 != '') { + let imgPath = common_ImagePath + IMAGE2; + let file = { + uri: imgPath, + type: 'image/jpeg', + name: IMAGE2, + filetype: 'image', + folderName: 'WareHouseCampaignImages', + } + allKPIfiles.push(file); + } + + if (j == txnres3.rows.length - 1) { + console.log('all images added') + resolve(allWindowSplitImages); + } + } + } + else { + resolve(allWindowSplitImages); + } + + }, function (txnE, txnerr) { console.log(txnerr); resolve(allWindowSplitImages); },); + + }); + }); + } + + obj['WareHouseSplitImages'] = await getWindowSplits(); + } + + if (IsPresent == 1) { + + async function getWindowQA() { + + let selectlist_q1 = ` DISTINCT q.QUESTION_ID as ItemQuestionId,q.QUESTION_CODE as ItemQuestionCode,wq.ItemQuestionName,wq.ItemAnswerShowCamera,wq.QuestionType,wq.ItemShowCamera,wq.ItemCameraMandatory,wq.ItemLengthValidationRequired,wq.ItemMinimumChar,wq.ItemMaximumChar,wq.ItemDecimalPoint,wq.ItemDateRangeMin,wq.ItemDateRangeMax,wq.ItemVoiceLengthInMinutes,wq.ItemDefaultQuestionEnable,q.ANSWER as Answer,q.ANSWER_ID as AnswerId,q.MULTI_OPTIONS_IDS as multi_op_ids,q.IMAGE_ALLOW1 as ItemShowCamera,q.IMAGE1 as Image1 `; + let join_q2 = ` inner join Mapping_WarehouseCampaignItemQuestion mq on mq.ItemQuestionId=wq.ItemQuestionId and q.ITEM_ID=mq.ItemId`; + let join_q1 = ` inner join Master_WarehouseItemQuestion wq on wq.ItemQuestionId=q.QUESTION_ID `; + let q3 = `select ${selectlist_q1} from ${AppTables.WAREHOUSE_CAMPAIGN_CHILD_DATA} q ${join_q1} ${join_q2} where q.STORE_ID='${StoreId}' and q.WAREHS_HEADER_ID='${WAREHSHeaderId}' order by wq.ItemQuestionSequence `; + + let allQAs = []; + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + txn.executeSql(q3, [], async function (txn2, txnres3) { + console.log('getWindowQA Warehouse App:', txnres3.rows.length); + if (txnres3.rows.length > 0) { + for (var j = 0; j < txnres3.rows.length; j++) { + let QAData = txnres3.rows.item(j); + let { ItemQuestionId, AnswerId, Answer, ItemAnswerShowCamera, Image1 } = QAData + let showImage1 = (ItemAnswerShowCamera == 'true' || ItemAnswerShowCamera == 1) ? 1 : 0; + let obj1 = {}; + obj1['MID'] = MID; + obj1['ItemId'] = ItemId + obj1['ItemQuestionId'] = ItemQuestionId + obj1['AnswerId'] = AnswerId + obj1['Answer'] = Answer + obj1['Image1'] = (showImage1 == 1 ? Image1 : '') + + allQAs.push(obj1); + + if (showImage1 == 1 && Image1 != null && Image1 != '') { + let imgPath = common_ImagePath + Image1; + let file = { + uri: imgPath, + type: 'image/jpeg', + name: Image1, + filetype: 'image', + folderName: 'WareHouseCampaignImages', + } + allKPIfiles.push(file); + } + if (j == txnres3.rows.length - 1) { + resolve(allQAs); + } + } + } + else { + resolve(allQAs); + } + + }, function (txnE, txnerr) { console.log('test', txnerr); resolve(allQAs); },); + }); + }); + } + + obj['QuestionAnswers'] = await getWindowQA(); + + } + else { + obj['WareHouseSplitImages'] = []; + obj['QuestionAnswers'] = [] + + } + + allChilds.push(obj); + } + + let upkName = UploadKeyName != null && UploadKeyName != 'undefined' && UploadKeyName != '' ? UploadKeyName : 'WareHouseCampaign'; + postData['MID'] = MID; + postData['Keys'] = upkName; + postData['JsonData'] = JSON.stringify(allChilds); + postData['UserId'] = UserId; + + + console.log('WareHouseCampaign postdata:', upkName, postData); + // return + resolve({ 'Files': allKPIfiles, 'PostData': postData }); + } + else { + resolve({ 'PostData': postData }); + } + }, function (txnE, txnerr) { console.log(txnerr); resolve({ 'PostData': postData }); },); + + }); + }).then((val) => { + return val; + }).catch((err) => { + console.log(err); + return postData; + }); + +} +export function getDataForWareHouseDeploy(storeData, KpiData, UserId, previousDayUpload = false) { + let d1 = new Date(); + let d2 = moment(d1).format('MM/DD/YYYY'); + let { StoreId, StateId, EmpId, MID, UploadStatus, Status, VisitDate, ChainId, StoreTypeId, StoreClassId, StoreCategoryId } = storeData; + let { ScreenName, MenuId, UploadKeyName, InnerScreenConfig } = KpiData + + const KPIConfig = {}; + InnerScreenConfig?.split(",")?.forEach((value, index) => { + KPIConfig[value] = false; + }); + + var postData = {}; + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + let txn1 = txn; + + let selectlist = ` Distinct w.STORE_ID as StoreId,w.WAREHS_HEADER_ID as WAREHSHeaderId,w.CAMPAIGN_ID,wd.ItemId,wd.ItemCode,wd.ItemName,wd.ItemCategory,wd.ItemCategoryId,w.IS_PRESENT as IsPresent,w.ITEM_QTY as itemQty,w.KPITYPE as KpiType, w.REASON as Reason,w.REASON_ID as ReasonId,w.MAPPING_TYPE as MappingType`; + let join = ` inner join Master_WarehouseItem wd on w.ITEM_ID=wd.ItemId `; + let q = ` Select ${selectlist} from ${AppTables.WAREHOUSE_HDR_DATA} w ${join} where w.STORE_ID='${StoreId}' and MENU_ID='${MenuId}' `; + + + let allChilds = [], allKPIfiles = [], isSpecificKPI = false; + await txn.executeSql(q, [], async function (txn2, txnres2) { + console.log('wh count:', MenuId, txnres2.rows.length) + if (txnres2.rows.length > 0) { + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + // KpiTypId, + let { WAREHSHeaderId, CameraSplitNo, ItemId, ItemCode, ItemName, ItemCategory, ItemCategoryId, itemQty, KpiType, Reason, IsPresent, CAMPAIGN_ID, MappingType, ReasonId } = data; + let obj = {}; + + // let isImage1=(VisibilityImage1=='true' || VisibilityImage1==1)?1:0; + // let isImage2=(VisibilityImage2=='true' || VisibilityImage2==1)?1:0; + + // let {WHRESHeaderId,ItemId,ItemCode,ItemName,ItemCategory,ItemCategoryId,itemQty,KpiTypId,KpiTyp,IsPresent}=data; + obj['MID'] = MID; + obj['UserId'] = UserId; + obj['Store_Id'] = StoreId; + obj['MenuId'] = MenuId; + obj['ItemId'] = ItemId; + obj['CampaignId'] = CAMPAIGN_ID; + // obj['ItemCode']=ItemCode; + // obj['ItemName']=ItemName; + // obj['ItemCategory']=ItemCategory; + obj['ItemCategoryId'] = ItemCategoryId; + obj['itemQty'] = itemQty; + // obj['KpiTypId']=KpiTypId; + obj['DeploymentType'] = KpiType; + //new added + obj['NonDeploymentReason'] = Reason; + obj['NonDeploymentReasonId'] = ReasonId; + obj['MappingType'] = MappingType || ""; + obj['IsPresent'] = IsPresent; + + + + // if( KPIConfig?.HidePresentYesNo==false ? true : IsPresent==1){ + console.log('add warehouse vis ') + + + async function getWindowSplits() { + let q2 = `select * from ${AppTables.WAREHOUSE_IMAGES} where WAREHS_HEADER_ID='${WAREHSHeaderId}' and STORE_ID='${StoreId}' `; + + let allWindowSplitImages = []; + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + + txn.executeSql(q2, [], async function (txn2, txnres3) { + + if (txnres3.rows.length > 0) { + for (var j = 0; j < txnres3.rows.length; j++) { + let splitItem = txnres3.rows.item(j); + let { IMAGE1, IMAGE2, IMAGE_LABEL } = splitItem + let obj1 = {}; + obj1["ImageName"] = (IMAGE1 != null ? IMAGE1 : '') + obj1["ImageType"] = (IMAGE_LABEL != null ? IMAGE_LABEL : '') + // let obj1={'Image1':(IMAGE1!=null?IMAGE1:''),'Image2':(IMAGE2!=null?IMAGE2:'')}; + + // obj1['VisibilityDefinitionId']=VisibilityDefinitionId + obj1['ItemId'] = ItemId + obj1['MID'] = MID; + + allWindowSplitImages.push(obj1); + if (IMAGE1 != null && IMAGE1 != '') { + let imgPath = common_ImagePath + IMAGE1; + let file = { + uri: imgPath, + type: 'image/jpeg', + name: IMAGE1, + filetype: 'image', + folderName: 'WareHouseDeployImages', + } + allKPIfiles.push(file); + } + if (IMAGE2 != null && IMAGE2 != '') { + let imgPath = common_ImagePath + IMAGE2; + let file = { + uri: imgPath, + type: 'image/jpeg', + name: IMAGE2, + filetype: 'image', + folderName: 'WareHouseDeployImages', + } + allKPIfiles.push(file); + } + + if (j == txnres3.rows.length - 1) { + console.log('all images added') + resolve(allWindowSplitImages); + } + } + } + else { + resolve(allWindowSplitImages); + } + + }, function (txnE, txnerr) { console.log(txnerr); resolve(allWindowSplitImages); },); + + }); + }); + } + + obj['WareHouseSplitImages'] = await getWindowSplits(); + // } + + if (KPIConfig?.HidePresentYesNo == false ? true : IsPresent == 1) { + + async function getWindowQA() { + + let selectlist_q1 = ` DISTINCT q.QUESTION_ID as ItemQuestionId,q.QUESTION_CODE as ItemQuestionCode,wq.ItemQuestionName,wq.ItemAnswerShowCamera,wq.QuestionType,wq.ItemShowCamera,wq.ItemCameraMandatory,wq.ItemLengthValidationRequired,wq.ItemMinimumChar,wq.ItemMaximumChar,wq.ItemDecimalPoint,wq.ItemDateRangeMin,wq.ItemDateRangeMax,wq.ItemVoiceLengthInMinutes,wq.ItemDefaultQuestionEnable,q.ANSWER as Answer,q.ANSWER_ID as AnswerId,q.MULTI_OPTIONS_IDS as multi_op_ids,q.IMAGE_ALLOW1 as ItemShowCamera,q.IMAGE1 as Image1 `; + let join_q2 = ` inner join Mapping_WarehouseItemQuestion mq on mq.ItemQuestionId=wq.ItemQuestionId and q.ITEM_ID=mq.ItemId`; + let join_q1 = ` inner join Master_WarehouseItemQuestion wq on wq.ItemQuestionId=q.QUESTION_ID `; + let q3 = `select ${selectlist_q1} from ${AppTables.WAREHOUSE_CHILD_DATA} q ${join_q1} ${join_q2} where q.STORE_ID='${StoreId}' and q.WAREHS_HEADER_ID='${WAREHSHeaderId}' order by wq.ItemQuestionSequence `; + + console.log("q3-------", q3) + let allQAs = []; + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + txn.executeSql(q3, [], async function (txn2, txnres3) { + console.log('getWindowQA Warehouse App:', txnres3.rows.length); + if (txnres3.rows.length > 0) { + for (var j = 0; j < txnres3.rows.length; j++) { + let QAData = txnres3.rows.item(j); + let { ItemQuestionId, AnswerId, Answer, ItemAnswerShowCamera, Image1 } = QAData + let showImage1 = (ItemAnswerShowCamera == 'true' || ItemAnswerShowCamera == 1) ? 1 : 0; + let obj1 = {}; + obj1['MID'] = MID; + obj1['ItemId'] = ItemId + obj1['ItemQuestionId'] = ItemQuestionId + obj1['AnswerId'] = AnswerId + obj1['Answer'] = Answer + obj1['Image1'] = (showImage1 == 1 ? Image1 : '') + + allQAs.push(obj1); + + if (showImage1 == 1 && Image1 != null && Image1 != '') { + let imgPath = common_ImagePath + Image1; + let file = { + uri: imgPath, + type: 'image/jpeg', + name: Image1, + filetype: 'image', + folderName: 'WareHouseDeployImages', + } + allKPIfiles.push(file); + } + if (j == txnres3.rows.length - 1) { + resolve(allQAs); + } + } + } + else { + resolve(allQAs); + } + + }, function (txnE, txnerr) { console.log('test', txnerr); resolve(allQAs); },); + }); + }); + } + + obj['QuestionAnswers'] = await getWindowQA(); + + } + else { + // obj['WareHouseSplitImages']=[]; + obj['QuestionAnswers'] = [] + + } + + allChilds.push(obj); + } + + let upkName = UploadKeyName != null && UploadKeyName != 'undefined' && UploadKeyName != '' ? UploadKeyName : 'WareHouseDeploy'; + postData['MID'] = MID; + postData['Keys'] = upkName; + postData['JsonData'] = JSON.stringify(allChilds); + postData['UserId'] = UserId; + + + console.log('WareHouse postdata:', upkName, postData); + // return + resolve({ 'Files': allKPIfiles, 'PostData': postData }); + } + else { + resolve({ 'PostData': postData }); + } + }, function (txnE, txnerr) { console.log(txnerr); resolve({ 'PostData': postData }); },); + + }); + }).then((val) => { + return val; + }).catch((err) => { + console.log(err); + return postData; + }); +} + +export function getDataFor_VISICOLONEAPP(storeData, KpiData, UserId, previousDayUpload = false) { + let d1 = new Date(); + let d2 = moment(d1).format('MM/DD/YYYY'); + let { StoreId, StateId, EmpId, MID, UploadStatus, Status, VisitDate, ChainId, StoreTypeId, StoreClassId, StoreCategoryId } = storeData; + let { ScreenName, MenuId, UploadKeyName } = KpiData + + var postData = {}; + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + let txn1 = txn; + + // let selectlist=` w.STORE_ID as StoreId, w.PVIS_HEADER_ID as PVisHeaderId,wd.VisibilityDefinitionId,wd.VisibilityId,wd.VisibilityName,wd.VisibilityTable,wd.VisibilityField,wd.VisibilityValue,wd.ChildName,wd.VisibilityRefImage,wd.VisibilityElementCheckAssortment,wd.VisibilityElementStockRequired,w.IS_PRESENT as IsPresent,wd.VisibilityNotExistCamera,w.PVIS_NA_IMAGE as PVisNAImage,wd.VisibilityExistReasonEnable,wd.VisibilityNotExistReasonEnable,w.REASON_ID as ReasonId,w.REASON as Reason,w.REMARK as Remark,wd.NoOfSplit,wd.VisibilityImage1,wd.VisibilityImage2,wd.VisibilityImage1Lable,wd.VisibilityImage2Lable,wd.VisibilityImage1CameraGrid,wd.VisibilityImage2CameraGrid,w.IS_STORE_SPECIFIC as isStoreSpecific,w.REASON_REMARK`; + // let join=` inner join Master_TargetBasedQuestion wd on w.TQQUESTIONID=wd.TgQuestionId `; + // let q=` Select ${selectlist} from ${AppTables.VISICO_HDR_DATA} w ${join} where w.STORE_ID='${StoreId}' and MENU_ID='${MenuId}' `; + + q = `SELECT * FROM ${AppTables.VISICO_HDR_DATA} w where w.STORE_ID='${StoreId}' and MENU_ID='${MenuId}'` + + let allChilds = [], allKPIfiles = [], isSpecificKPI = false; + await txn.executeSql(q, [], async function (txn2, txnres2) { + console.log('pv count:', MenuId, txnres2.rows.length) + if (txnres2.rows.length > 0) { + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + let { PVisHeaderId, TARGETTYPEID, TARGETID, TARGETTYPENAME, ChildName, IsPresent } = data; + let obj = {}; + + obj['MID'] = MID; + obj['UserId'] = UserId; + obj['Store_Id'] = StoreId; + obj['MenuId'] = MenuId; + obj['TargetTypeId'] = TARGETTYPEID; + obj['TargetId'] = TARGETID; + obj['TargetTypeName'] = TARGETTYPENAME; + obj['ChildName'] = ChildName; + // obj['IsPresent']=IsPresent; + + + async function getWindowQA() { + + + // let selectlist_q1=` DISTINCT q.QUESTION_ID as VisibilityQuestionId,q.QUESTION_CODE as VisibilityQuestionCode,wq.VisibilityQuestionName,wq.QuestionType,wq.VQShowCamera,wq.VQCameraMandatory,wq.VQLengthValidationRequired,wq.VQMinimumChar,wq.VQMaximumChar,wq.VQDecimalPoint,wq.VQDateRangeMin,wq.VQDateRangeMax,wq.VQVoiceLengthInMinutes,wq.VQDefaultQuestionEnable,q.ANSWER as Answer,q.ANSWER_ID as AnswerId,q.MULTI_OPTIONS_IDS as multi_op_ids,q.IMAGE_ALLOW1 as VAShowCamera,q.IMAGE1 as Image1 `; + // let join_q2=` inner join Mapping_VisibilityQuestion mq on mq.VisibilityQuestionId=wq.VisibilityQuestionId `; + // let join_q1=` inner join Master_VisibilityQuestion wq on wq.VisibilityQuestionId=q.QUESTION_ID `; + // let q3=`select ${selectlist_q1} from ${AppTables.VISICO_CHILD_DATA} q ${join_q1} ${join_q2} where q.STORE_ID='${StoreId}' and q.PVIS_HEADER_ID='${PVisHeaderId}' order by wq.VisibilityQuestionSequence `; + + let join_q2 = `inner JOIN (select distinct TgQuestionId from Master_TargetBasedQuestion) wd on ws.TgQuestionId=wd.TgQuestionId `; + let join_q1 = ` inner JOIN Mapping_TargetBasedQuestion ws on w.TARGETTYPEID=ws.TargetTypeId AND w.TQQUESTIONID=ws.TgQuestionId `; + let q3 = `select * from ${AppTables.VISICO_CHILD_DATA} w ${join_q1} ${join_q2} where w.STORE_ID='${StoreId}' and w.MENU_ID='${MenuId}' and w.TARGETTYPEID='${TARGETTYPEID}' `; + + let allQAs = []; + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + txn.executeSql(q3, [], async function (txn2, txnres3) { + console.log('getWindowQA PaidvisOne App:', txnres3.rows.length); + if (txnres3.rows.length > 0) { + for (var j = 0; j < txnres3.rows.length; j++) { + let QAData = txnres3.rows.item(j); + let { TQQUESTIONID, TARGETTYPEID, ANSWER_ID, ANSWER, IMAGE_ALLOW1, IMAGE_ALLOW2, TgaShowCamera1, TgaShowCamera2, IMAGE1, IMAGE2, TQA_QUESTION_DISABLE } = QAData + let showImage1 = (IMAGE_ALLOW1 == 'true' || IMAGE_ALLOW1 == 1) ? 1 : 0; + let showImage2 = (IMAGE_ALLOW2 == 'true' || IMAGE_ALLOW2 == 1) ? 1 : 0; + + let obj1 = {}; + obj1['MID'] = MID; + obj1['TargetTypeId'] = TARGETTYPEID + obj1['TqQuestionId'] = TQQUESTIONID + obj1['AnswerId'] = ANSWER_ID + obj1['Answer'] = ANSWER + obj1['Image1'] = (showImage1 == 1 ? IMAGE1 : '') + obj1['Image2'] = (showImage2 == 1 ? IMAGE2 : '') + if (!(TQA_QUESTION_DISABLE == true || TQA_QUESTION_DISABLE == "true")) { + allQAs.push(obj1); + } + if (j == txnres3.rows.length - 1) { + resolve(allQAs); + } + } + } + else { + resolve(allQAs); + } + + }, function (txnE, txnerr) { console.log('test', txnerr); resolve(allQAs); },); + }); + }); + } + + obj['QuestionAnswers'] = await getWindowQA(); + + + allChilds.push(obj); + } + + let upkName = UploadKeyName != null && UploadKeyName != 'undefined' && UploadKeyName != '' ? UploadKeyName : 'TGBaseOneApp'; + postData['MID'] = MID; + postData['Keys'] = upkName; + postData['JsonData'] = JSON.stringify(allChilds); + postData['UserId'] = UserId; + + + console.log('TGBASEDONEAPP postdata:', upkName, postData); + resolve({ 'Files': allKPIfiles, 'PostData': postData }); + } + else { + resolve({ 'PostData': postData }); + } + }, function (txnE, txnerr) { console.log(txnerr); resolve({ 'PostData': postData }); },); + + }); + }).then((val) => { + return val; + }).catch((err) => { + console.log(err); + return postData; + }); +} + +export function getDataFor_PROG_ONEAPP(storeData, KpiData, UserId, previousDayUpload = false) { + let d1 = new Date(); + let d2 = moment(d1).format('MM/DD/YYYY'); + let { StoreId, StateId, EmpId, MID, UploadStatus, Status, VisitDate, ChainId, StoreTypeId, StoreClassId, StoreCategoryId } = storeData; + let { ScreenName, MenuId, UploadKeyName } = KpiData + + var postData = {}; + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + let txn1 = txn; + + let selectlist = ` Distinct w.STORE_ID as StoreId,w.PROG_HEADER_ID as PROGHeaderId,wd.ProgramDefinitionId,wd.ProgramId,wd.ProgramName,wd.ProgramTable,wd.ProgramField,wd.ProgramValue,wd.ChildName,wd.ProgramRefImage,wd.ProgramElementCheckAssortment,wd.ProgramElementStockRequired,w.IS_PRESENT as IsPresent,wd.ProgramNotExistCamera,w.PROG_NA_IMAGE as PROGNAImage,wd.ProgramExistReasonEnable,wd.ProgramNotExistReasonEnable,w.REASON_ID as ReasonId,w.REASON as Reason,w.REMARK as Remark,wd.NoOfSplit,wd.ProgramImage1,wd.ProgramImage2,wd.ProgramImage1Lable,wd.ProgramImage2Lable,wd.ProgramImage1CameraGrid,wd.ProgramImage2CameraGrid,w.IS_STORE_SPECIFIC as isStoreSpecific,w.REASON_REMARK,w.DISPLAY_AREA,w.POS_DA_REASON_ID,w.POS_DA_REASON,w.NEG_DA_REASON_ID,w.NEG_DA_REASON`; + let join = ` inner join Master_ProgramDefinition wd on w.PROG_DEFINITION_ID=wd.ProgramDefinitionId `; + let q = ` Select ${selectlist} from ${AppTables.PROGRAM_HDR_DATA} w ${join} where w.STORE_ID='${StoreId}' and MENU_ID='${MenuId}' `; + + + let allChilds = [], allKPIfiles = [], isSpecificKPI = false; + await txn.executeSql(q, [], async function (txn2, txnres2) { + console.log('pv count:', MenuId, txnres2.rows.length) + if (txnres2.rows.length > 0) { + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + let { PROGHeaderId, ProgramDefinitionId, ProgramId, ProgramName, ProgramTable, ProgramField, ProgramValue, ChildName, ProgramElementStockRequired, ProgramElementCheckAssortment, NoOfSplit, IsPresent, ProgramNotExistCamera, PROGNAImage, ProgramExistReasonEnable, ProgramNotExistReasonEnable, ReasonId, Reason, ProgramImage1, ProgramImage2, Remark, ProgramImage1Lable, ProgramImage2Lable, isStoreSpecific, REASON_REMARK, DISPLAY_AREA, POS_DA_REASON_ID, POS_DA_REASON, NEG_DA_REASON_ID, NEG_DA_REASON } = data; + let obj = {}; + + if (i == 0) { + isSpecificKPI = isStoreSpecific; + } + let isStockReq = (ProgramElementStockRequired == 'true' || ProgramElementStockRequired == 1) ? 1 : 0; + let isCheckAssrt = (ProgramElementCheckAssortment == 'true' || ProgramElementCheckAssortment == 1) ? 1 : 0; + let isNaCamAvl = (ProgramNotExistCamera == 'true' || ProgramNotExistCamera == 1) ? 1 : 0; + let isReasonEnable = (ProgramExistReasonEnable == 'true' || ProgramExistReasonEnable == 1) ? 1 : 0; + let isNAReasonEnable = (ProgramNotExistReasonEnable == 'true' || ProgramNotExistReasonEnable == 1) ? 1 : 0; + let isImage1 = (ProgramImage1 == 'true' || ProgramImage1 == 1) ? 1 : 0; + let isImage2 = (ProgramImage2 == 'true' || ProgramImage2 == 1) ? 1 : 0; + + + obj['MID'] = MID; + obj['UserId'] = UserId; + obj['Store_Id'] = StoreId; + obj['MenuId'] = MenuId; + obj['ProgramDefinitionId'] = ProgramDefinitionId; + obj['ProgramId'] = ProgramId; + obj['ProgramTable'] = ProgramTable; + obj['ProgramField'] = ProgramField; + obj['ProgramValue'] = ProgramValue; + obj['ChildName'] = ChildName; + obj['IsPresent'] = IsPresent; + obj['ProgramNotExistImage'] = isNaCamAvl == 1 ? PROGNAImage : ''; + obj['ReasonId'] = ReasonId; + obj['Reason'] = Reason; + obj['Remark'] = Remark != null ? Remark : ''; + obj['ReasonRemark'] = REASON_REMARK; + obj['DisplayArea'] = DISPLAY_AREA; + if (POS_DA_REASON != null && POS_DA_REASON != 'undefined' && POS_DA_REASON != '') { + obj['DisAreaReasonId'] = POS_DA_REASON_ID; + obj['DisAreaReason'] = POS_DA_REASON; + } else if (NEG_DA_REASON != null && NEG_DA_REASON != 'undefined' && NEG_DA_REASON != '') { + obj['DisAreaReasonId'] = NEG_DA_REASON_ID; + obj['DisAreaReason'] = NEG_DA_REASON; + } + else { + obj['DisAreaReasonId'] = 0; + obj['DisAreaReason'] = ''; + } + + + if (IsPresent == 1 && parseInt(NoOfSplit) > 0) { + console.log('add paid vis ') + + + async function getWindowSplits() { + let q2 = `select * from ${AppTables.PROGRAM_IMAGES} where PROG_HEADER_ID='${PROGHeaderId}' and STORE_ID='${StoreId}' `; + + let allWindowSplitImages = []; + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + + txn.executeSql(q2, [], async function (txn2, txnres3) { + + if (txnres3.rows.length > 0) { + for (var j = 0; j < txnres3.rows.length; j++) { + let splitItem = txnres3.rows.item(j); + let { IMAGE1, IMAGE2 } = splitItem + let obj1 = { 'Image1': (isImage1 == 1 && IMAGE1 != null ? IMAGE1 : ''), 'Image2': (isImage2 == 1 && IMAGE2 != null ? IMAGE2 : '') }; + obj1['ProgramDefinitionId'] = ProgramDefinitionId + obj1['ProgramId'] = ProgramId + obj1['MID'] = MID; + // obj1['ProgramImage1Lable']=ProgramImage1Lable; + // obj1['ProgramImage2Lable']=ProgramImage2Lable; + + allWindowSplitImages.push(obj1); + + + + if (j == txnres3.rows.length - 1) { + resolve(allWindowSplitImages); + } + } + } + else { + resolve(allWindowSplitImages); + } + + }, function (txnE, txnerr) { console.log(txnerr); resolve(allWindowSplitImages); },); + + }); + }); + } + + obj['ProgramSplitImages'] = await getWindowSplits(); + } + + if (IsPresent == 1) { + + async function getWindowQA() { + + + let selectlist_q1 = ` DISTINCT q.QUESTION_ID as ProgramQuestionId,q.QUESTION_CODE as ProgramQuestionCode,wq.ProgramQuestionName,wq.QuestionType,wq.PQShowCamera,wq.PQCameraMandatory,wq.PQLengthValidationRequired,wq.PQMinimumChar,wq.PQMaximumChar,wq.PQDecimalPoint,wq.PQDateRangeMin,wq.PQDateRangeMax,wq.PQVoiceLengthInMinutes,wq.PQDefaultQuestionEnable,q.ANSWER as Answer,q.ANSWER_ID as AnswerId,q.MULTI_OPTIONS_IDS as multi_op_ids,q.IMAGE_ALLOW1 as VAShowCamera,q.IMAGE1 as Image1 `; + let join_q2 = ` inner join Mapping_ProgramQuestion mq on mq.ProgramQuestionId=wq.ProgramQuestionId `; + let join_q1 = ` inner join Master_ProgramQuestion wq on wq.ProgramQuestionId=q.QUESTION_ID `; + let q3 = `select ${selectlist_q1} from ${AppTables.PROGRAM_CHILD_DATA} q ${join_q1} ${join_q2} where q.STORE_ID='${StoreId}' and q.PROG_HEADER_ID='${PROGHeaderId}' order by wq.ProgramQuestionSequence `; + + let allQAs = []; + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + txn.executeSql(q3, [], async function (txn2, txnres3) { + console.log('getWindowQA PaidvisOne App:', txnres3.rows.length); + if (txnres3.rows.length > 0) { + for (var j = 0; j < txnres3.rows.length; j++) { + let QAData = txnres3.rows.item(j); + let { ProgramQuestionId, AnswerId, Answer, VAShowCamera, Image1, QuestionType } = QAData + let showImage1 = QuestionType == 'Image' ? true : (VAShowCamera == 'true' || VAShowCamera == 1) ? 1 : 0; + let obj1 = {}; + obj1['MID'] = MID; + obj1['ProgramDefinitionId'] = ProgramDefinitionId + obj1['ProgramId'] = ProgramId + obj1['ProgramQuestionId'] = ProgramQuestionId + obj1['AnswerId'] = AnswerId + obj1['Answer'] = QuestionType == 'Image' ? "" : Answer + obj1['Image1'] = (showImage1 == 1 ? Image1 : '') + + allQAs.push(obj1); + + + if (j == txnres3.rows.length - 1) { + resolve(allQAs); + } + } + } + else { + resolve(allQAs); + } + + }, function (txnE, txnerr) { console.log('test', txnerr); resolve(allQAs); },); + }); + }); + } + + obj['QuestionAnswers'] = await getWindowQA(); + + if (isStockReq == 1) { + async function getWindowStock() { + return new Promise((resolve, reject) => { + let allStock = []; + + let join_s1 = ''; + if (isCheckAssrt) { + join_s1 = ` inner join Mapping_ProductAssortmentStorewise a on a.ProductId=s.PROG_STOCK_VALUE`; + } + let selectlist_s1 = ` Distinct s.PROG_STOCK_DEFINITION_ID as ProgramStockDefinitionId, s.PROG_DEFINITION_ID as ProgramDefinitionId,s.PROG_STOCK_TABLE as ProgramStockTable,s.PROG_STOCK_FIELD as ProgramStockField,s.PROG_STOCK_VALUE as ProgramStockValue,s.PROG_STOCK_MBQ as ProgramStockMBQ,s.PRODUCT_NAME as ProductName, s.STOCK as Stock,s.IS_PROG_PRESENT as isPROGPresent `; + let q4 = `select ${selectlist_s1} from ${AppTables.PROGRAM_STOCK_DATA} s ${join_s1} where s.STORE_ID='${StoreId}' and s.PROG_HEADER_ID='${PROGHeaderId}' `; + if (isCheckAssrt) { + q4 += ` and a.StoreId='${StoreId}' `; + } + q4 += ` order by s.PRODUCT_NAME `; + + + db.transaction(async function (txn) { + + txn.executeSql(q4, [], async function (txn2, txnres3) { + if (txnres3.rows.length > 0) { + for (var j = 0; j < txnres3.rows.length; j++) { + let SData = txnres3.rows.item(j); + let { ProgramStockDefinitionId, ProgramStockTable, ProgramStockField, ProgramStockValue, ProgramStockMBQ, ProductName, Stock, isPROGPresent } = SData + + let obj1 = {}; + obj1['MID'] = MID; + obj1['ProgramDefinitionId'] = ProgramDefinitionId + obj1['ProgramId'] = ProgramId + obj1['ProgramStockDefinitionId'] = ProgramStockDefinitionId + obj1['ProgramStockTable'] = ProgramStockTable + obj1['ProgramStockField'] = ProgramStockField + obj1['ProgramStockValue'] = ProgramStockValue + obj1['ProgramStockMBQ'] = ProgramStockMBQ + obj1['ProductName'] = ProductName + obj1['Stock'] = Stock != '' && Stock != null && Stock != "null" && Stock != "undefined" ? Stock : 0; + obj1['isPROGPresent'] = isPROGPresent; + obj1['Specific'] = isSpecificKPI; + + allStock.push(obj1); + if (j == txnres3.rows.length - 1) { + resolve(allStock); + } + } + } + else { + resolve(allStock); + } + + }, function (txnE, txnerr) { console.log(txnerr); resolve(allStock); },); + + }); + }); + } + obj['StockData'] = await getWindowStock(); + } + else { + obj['StockData'] = []; + } + } + else { + obj['ProgramSplitImages'] = []; + obj['QuestionAnswers'] = [] + obj['StockData'] = []; + } + + allChilds.push(obj); + } + + let upkName = UploadKeyName != null && UploadKeyName != 'undefined' && UploadKeyName != '' ? UploadKeyName : 'ProgramOneApp'; + postData['MID'] = MID; + postData['Keys'] = upkName; + postData['JsonData'] = JSON.stringify(allChilds); + postData['UserId'] = UserId; + + + console.log('PROGRAMONEAPP postdata:', upkName, postData); + resolve({ 'Files': allKPIfiles, 'PostData': postData }); + } + else { + resolve({ 'PostData': postData }); + } + }, function (txnE, txnerr) { console.log(txnerr); resolve({ 'PostData': postData }); },); + + }); + }).then((val) => { + return val; + }).catch((err) => { + console.log(err); + return postData; + }); +} + +export function getDataFor_ADVONEAPP(storeData, KpiData, UserId, previousDayUpload = false) { + let d1 = new Date(); + let d2 = moment(d1).format('MM/DD/YYYY'); + let { StoreId, StateId, EmpId, MID, UploadStatus, Status, VisitDate, ChainId, StoreTypeId, StoreClassId, StoreCategoryId } = storeData; + let { ScreenName, MenuId, UploadKeyName } = KpiData + + + var postData = {}; + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + let q2 = ` SELECT * FROM ${AppTables.ADDITIONAL_VISIBILITY} WHERE STORE_ID='${StoreId}' ` + (!previousDayUpload ? ` and VISIT_DATE='${d2}' ` : '') + ` `; + let allChilds = [], allKPIfiles = []; + await txn.executeSql(q2, [], async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + for (let i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + let { STORE_ID, VISIT_DATE, PRESENT, CATEGORY, CATEGORY_ID, SUB_CATEGORY, SUB_CATEGORY_ID, BRAND, BRAND_ID, DISPLAY, DISPLAY_ID, REMARK, IMAGE, ADDED_DATE, FROM_DATE, SHOWFROMDATE, TO_DATE } = data; + + let obj = {}; + obj['MID'] = MID; + obj['User_Id'] = UserId; + obj['Present'] = PRESENT; + + if (PRESENT == 1) { + obj['CategoryId'] = CATEGORY_ID; + obj['SubCategoryId'] = SUB_CATEGORY_ID; + obj['BrandId'] = BRAND_ID; + obj['DisplayId'] = DISPLAY_ID; + obj['Remark'] = REMARK; + obj['addVImg'] = IMAGE != null && IMAGE != 'undefined' && IMAGE != 'null' ? IMAGE : ''; + + if (SHOWFROMDATE == true) { + obj['FromDate'] = FROM_DATE; + obj['ToDate'] = TO_DATE + } + + + if (IMAGE != '' && IMAGE != null) { + let imgPath = common_ImagePath + IMAGE; + let file = { + uri: imgPath, + type: 'image/jpeg', + name: IMAGE, + filetype: 'image', + folderName: 'VisibilityImages', + } + allKPIfiles.push(file); + } + + async function getAdditionalVisibilityStock({ + StoreId, + d2, + CATEGORY_ID, + BRAND_ID, + DISPLAY_ID + }) { + const stkq = `SELECT DISTINCT DISPLAY_ID as DisplayId,CATEGORY_ID as CategoryId,SUB_CATEGORY_ID as SubCategoryId,BRAND_ID as BrandId,PRODUCT_ID as ProductId,PRODUCT_NAME as ProductName,STOCK_REQ as StockRequire,STOCK as Stock,IS_SELECT as isSelect FROM ${AppTables.ADDITIONAL_VISIBILITY_STOCK} WHERE STORE_ID='${StoreId}' AND VISIT_DATE='${d2}' AND CATEGORY_ID='${CATEGORY_ID}' AND BRAND_ID='${BRAND_ID}' AND DISPLAY_ID='${DISPLAY_ID}'`; + console.log("stk_query", stkq); + let stockListArr = []; + return new Promise((resolve, reject) => { + db.transaction(txn => { + txn.executeSql( + stkq, + [], + (txn2, txnres5) => { + const arrstk = []; + console.log("stk_query rows:", txnres5.rows.length); + if (txnres5.rows.length > 0) { + for (let k = 0; k < txnres5.rows.length; k++) { + let splitItem = txnres5.rows.item(k); + let obj2 = {}; + obj2['MID'] = MID; + obj2['User_Id'] = UserId; + obj2['BrandId'] = BRAND_ID; + obj2['DisplayId'] = DISPLAY_ID; + obj2['ProductId'] = splitItem.ProductId; + obj2['Stock'] = splitItem.Stock != null && splitItem.Stock != undefined && splitItem.Stock != '' ? splitItem.Stock : 0; + stockListArr.push(obj2); + + if (k == txnres5.rows.length - 1) { + console.log('all additionalSTK added') + resolve(stockListArr); + } + } + } else { + resolve(stockListArr); + } + }, + (txnE, txnerr) => { + console.error("SQL error:", txnerr); + resolve(stockListArr); + return true; + } + ); + }); + }); + } + //fghjkl;kjhgf + const stockList = await getAdditionalVisibilityStock({ + StoreId, + d2, + CATEGORY_ID, + BRAND_ID, + DISPLAY_ID + }); + + obj['StockList'] = stockList; + } + else { + obj['CategoryId'] = 0; + obj['SubCategoryId'] = 0; + obj['BrandId'] = 0; + obj['DisplayId'] = 0; + obj['Remark'] = ""; + obj['addVImg'] = ""; + obj['StockList'] = []; + } + + allChilds.push(obj); + } + postData['MID'] = MID; + postData['Keys'] = 'AddVisibility'; + postData['JsonData'] = JSON.stringify(allChilds); + postData['UserId'] = UserId; + resolve({ 'Files': allKPIfiles, 'PostData': postData }); + } + else { + resolve({ 'Files': allKPIfiles, 'PostData': postData }); + } + }, function (txnE, txnerr) { console.log(txnerr); resolve({ 'PostData': postData }); },); + + }); + }).then((val) => { + return val; + }).catch((err) => { + console.log(err); + return postData; + }); +} + +export function getDataFor_COMPVONEAPP(storeData, KpiData, UserId, previousDayUpload = false) { + let d1 = new Date(); + let d2 = moment(d1).format('MM/DD/YYYY'); + let { StoreId, StateId, EmpId, MID, UploadStatus, Status, VisitDate, ChainId, StoreTypeId, StoreClassId, StoreCategoryId } = storeData; + let { ScreenName, MenuId, UploadKeyName } = KpiData + var postData = {}; + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + + let q2 = ` SELECT Distinct * FROM ${AppTables.COMPETITION_VISIBILITY} WHERE STORE_ID='${StoreId}' ` + (!previousDayUpload ? ` and VISIT_DATE='${d2}' ` : '') + ` `; + let allChilds = [], allKPIfiles = []; + await txn.executeSql(q2, [], async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + let { STORE_ID, VISIT_DATE, PRESENT, COMPANY, COMPANY_ID, CATEGORY, CATEGORY_ID, SUB_CATEGORY, SUB_CATEGORY_ID, BRAND, BRAND_ID, DISPLAY, DISPLAY_ID, REMARK, IMAGE, ADDED_DATE } = data; + let obj = {}; + obj['MID'] = MID; + obj['User_Id'] = UserId; + obj['Present'] = PRESENT; + if (PRESENT == 1) { + obj['CompanyId'] = COMPANY_ID; + obj['CategoryId'] = CATEGORY_ID; + obj['SubCategoryId'] = SUB_CATEGORY_ID; + obj['BrandId'] = BRAND_ID; + obj['DisplayId'] = DISPLAY_ID; + obj['Remark'] = REMARK; + obj['CompVImg'] = IMAGE != null && IMAGE != 'undefined' && IMAGE != 'null' ? IMAGE : ''; + + if (IMAGE != '') { + let imgPath = common_ImagePath + IMAGE; + let file = { + uri: imgPath, + type: 'image/jpeg', + name: IMAGE, + filetype: 'image', + folderName: 'CompetitionVisibilityImages', + } + allKPIfiles.push(file); + } + } + else { + obj['CompanyId'] = 0; + obj['CategoryId'] = 0; + obj['SubCategoryId'] = 0; + obj['BrandId'] = 0; + obj['DisplayId'] = 0; + obj['Remark'] = ""; + obj['CompVImg'] = ""; + } + + allChilds.push(obj); + } + postData['MID'] = MID; + postData['Keys'] = 'CompVisibility'; + postData['JsonData'] = JSON.stringify(allChilds); + postData['UserId'] = UserId; + resolve({ 'Files': allKPIfiles, 'PostData': postData }); + } + else { + resolve({ 'Files': allKPIfiles, 'PostData': postData }); + } + }, function (txnE, txnerr) { console.log(txnerr); resolve({ 'PostData': postData }); },); + + }); + }).then((val) => { + return val; + }).catch((err) => { + console.log(err); + return postData; + }); + +} + +export function getDataFor_RETURN_STOCK(storeData, KpiData, UserId, previousDayUpload = false) { + let d1 = new Date(); + let d2 = moment().format('MM/DD/YYYY'); + let { StoreId, StateId, EmpId, MID, UploadStatus, Status, VisitDate, ChainId, StoreTypeId, StoreClassId, StoreCategoryId } = storeData; + let { ScreenName, MenuId, UploadKeyName } = KpiData + + + var postData = {}; + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + let q2 = ` SELECT * FROM ${AppTables.RETURN_STOCK} WHERE STORE_ID='${StoreId}' ` + (!previousDayUpload ? ` and VISIT_DATE='${d2}' ` : '') + ` `; + let allChilds = [], allKPIfiles = []; + await txn.executeSql(q2, [], async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + let { STORE_ID, VISIT_DATE, PRESENT, JSON_DATA, IS_UPDATED, ADDED_DATE } = data; + + let obj = {}; + obj['MID'] = MID; + obj['UserId'] = UserId; + obj['Store_Id'] = STORE_ID; + obj['IsPresent'] = PRESENT; + // ✅ Parse JSON_DATA if exists + let parsedData = []; + try { + parsedData = JSON_DATA ? JSON.parse(JSON_DATA) : []; + } catch (e) { + console.log("Error parsing JSON_DATA:", e); + } + obj['ReturnStk_Data'] = + PRESENT == 1 + ? parsedData.map(item => ({ + CategoryId: item?.CategoryId, + SubCategoryId: item?.SubCategoryId, + BrandId: item?.BrandId, + ProductId: item?.ProductId, + Quantity: parseInt(item?.Quantity) || 0, // ensure number + ReturnTypeId: item?.ReturnTypeId, + IsImageTaken: item?.IsImageTaken, + IsRemarkTaken: item?.IsRemarkTaken, + Remark: item.Remark || "", + Image1: item.Image1 || "", + })) + : []; + + allChilds.push(obj); + console.log("returnStock", JSON.stringify(allChilds)) + } + postData.MID = MID; + postData.Keys = 'RetunStock'; + postData.JsonData = JSON.stringify(allChilds); + postData.UserId = UserId; + resolve({ 'Files': allKPIfiles, 'PostData': postData }); + } + else { + resolve({ 'Files': allKPIfiles, 'PostData': postData }); + } + }, function (txnE, txnerr) { console.log(txnerr); resolve({ 'PostData': postData }); },); + + }); + }).then((val) => { + return val; + }).catch((err) => { + console.log(err); + return postData; + }); +} + +export function getDataFor_ORDER_SIMPLIFY(storeData, KpiData, UserId, previousDayUpload = false) { + let d1 = new Date(); + let d2 = moment().format('MM/DD/YYYY'); + let { StoreId, StateId, EmpId, MID, UploadStatus, Status, VisitDate, ChainId, StoreTypeId, StoreClassId, StoreCategoryId } = storeData; + let { ScreenName, MenuId, UploadKeyName } = KpiData + + + var postData = {}; + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + let q2 = ` SELECT * FROM ${AppTables.ORDER_SIMPLIFY} WHERE STORE_ID='${StoreId}' ` + (!previousDayUpload ? ` and VISIT_DATE='${d2}' ` : '') + ` `; + let allChilds = [], allKPIfiles = []; + await txn.executeSql(q2, [], async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + let { STORE_ID, VISIT_DATE, PRESENT, REASON_ID, REASON, JSON_DATA, IS_UPDATED, ADDED_DATE } = data; + + let obj = {}; + obj['MID'] = MID; + obj['UserId'] = UserId; + obj['Store_Id'] = STORE_ID; + obj['IsPresent'] = PRESENT; + obj['NonOrderResonId'] = PRESENT != 1 ? REASON_ID : 0; + // ✅ Parse JSON_DATA if exists + let parsedData = []; + try { + parsedData = JSON_DATA ? JSON.parse(JSON_DATA) : []; + } catch (e) { + console.log("Error parsing JSON_DATA:", e); + } + obj['Orders_Data'] = + PRESENT == 1 + ? parsedData.map(item => ({ + CategoryId: item?.CategoryId, + SubCategoryId: item?.SubCategoryId, + BrandId: item?.BrandId, + ProductId: item?.ProductId, + Quantity: parseInt(item?.Quantity) || 0, // ensure number + PackType: item?.PackType, + ImageAllow: item?.ImageAllow, + RemarkAllow: item?.RemarkAllow, + Remark: item.Remark || "", + Image1: item.Image1 || "", + })) + : []; + + allChilds.push(obj); + console.log("OrderSimplify", JSON.stringify(allChilds)) + } + postData.MID = MID; + postData.Keys = 'OrderSimplify'; + postData.JsonData = JSON.stringify(allChilds); + postData.UserId = UserId; + resolve({ 'Files': allKPIfiles, 'PostData': postData }); + } + else { + resolve({ 'Files': allKPIfiles, 'PostData': postData }); + } + }, function (txnE, txnerr) { console.log(txnerr); resolve({ 'PostData': postData }); },); + + }); + }).then((val) => { + return val; + }).catch((err) => { + console.log(err); + return postData; + }); +} + +export function getDataFor_WINDOW(storeData, KpiData, UserId, previousDayUpload = false) { + let d1 = new Date(); + let d2 = moment(d1).format('MM/DD/YYYY'); + let { StoreId, StateId, EmpId, MID, UploadStatus, Status, VisitDate, ChainId, StoreTypeId, StoreClassId, StoreCategoryId } = storeData; + let { ScreenName, MenuId, UploadKeyName } = KpiData + + var postData = {}; + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + let txn1 = txn; + let selectlist = ` Distinct w.STORE_ID as StoreId,w.WINDOW_HEADER_ID as windowHeaderId,wd.WindowDefinitionId,wd.WindowId,wd.WindowName,wd.WindowTable,wd.WindowField,wd.WindowValue,wd.ChildName,wd.WindowRefImage,wd.WindowElementCheckAssortment,wd.WindowElementStockRequired,w.IS_PRESENT as IsPresent,wd.WindowNotExistCamera,w.WINDOW_NA_IMAGE as WindowNAImage,wd.WindowExistReasonEnable,wd.WindowNotExistReasonEnable,w.REASON_ID as ReasonId,w.REASON as Reason,wd.NoOfSplit,wd.WindowImage1,wd.WindowImage2,wd.WindowImage1Lable,wd.WindowImage2Lable,wd.WindowImage1CameraGrid,wd.WindowImage2CameraGrid`; + let join = ` inner join Master_WindowDefinition wd on w.WINDOW_DEFINITION_ID=wd.WindowDefinitionId and MenuId='${MenuId}' `; + let q = ` Select ${selectlist} from ${AppTables.WINDOW_HDR_DATA} w ${join} where w.STORE_ID='${StoreId}' and w.MENU_ID='${MenuId}' `; + + let allChilds = [], allKPIfiles = []; + await txn.executeSql(q, [], async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + let { windowHeaderId, WindowDefinitionId, WindowId, WindowName, WindowTable, WindowField, WindowValue, ChildName, WindowElementStockRequired, WindowElementCheckAssortment, NoOfSplit, IsPresent, WindowNotExistCamera, WindowNAImage, WindowExistReasonEnable, WindowNotExistReasonEnable, ReasonId, Reason, WindowImage1, WindowImage2 } = data; + let obj = {}; + + let isStockReq = (WindowElementStockRequired == 'true' || WindowElementStockRequired == 1) ? 1 : 0; + let isCheckAssrt = (WindowElementCheckAssortment == 'true' || WindowElementCheckAssortment == 1) ? 1 : 0; + let isNaCamAvl = (WindowNotExistCamera == 'true' || WindowNotExistCamera == 1) ? 1 : 0; + let isReasonEnable = (WindowExistReasonEnable == 'true' || WindowExistReasonEnable == 1) ? 1 : 0; + let isNAReasonEnable = (WindowNotExistReasonEnable == 'true' || WindowNotExistReasonEnable == 1) ? 1 : 0; + let isImage1 = (WindowImage1 == 'true' || WindowImage1 == 1) ? 1 : 0; + let isImage2 = (WindowImage2 == 'true' || WindowImage2 == 1) ? 1 : 0; + + + obj['MID'] = MID; + obj['UserId'] = UserId; + obj['Store_Id'] = StoreId; + obj['MenuId'] = MenuId; + obj['WindowDefinitionId'] = WindowDefinitionId; + obj['WindowId'] = WindowId; + obj['WindowTable'] = WindowTable; + obj['WindowField'] = WindowField; + obj['WindowValue'] = WindowValue; + obj['ChildName'] = ChildName; + obj['IsPresent'] = IsPresent; + obj['WindowNotExistImage'] = isNaCamAvl == 1 ? WindowNAImage : ''; + obj['ReasonId'] = ReasonId; + obj['Reason'] = Reason; + + + + if (isNaCamAvl == 1 && WindowNAImage != '') { + let imgPath = common_ImagePath + WindowNAImage; + let file = { + uri: imgPath, + type: 'image/jpeg', + name: WindowNAImage, + filetype: 'image', + folderName: 'WindowImages', + } + allKPIfiles.push(file); + } + + + if (IsPresent == 1 && parseInt(NoOfSplit) > 0) { + console.log('add split windows') + + + async function getWindowSplits() { + let q2 = `select * from ${AppTables.WINDOW_IMAGES} where WINDOW_HEADER_ID='${windowHeaderId}' and STORE_ID='${StoreId}' and MENU_ID='${MenuId}' `; + + let allWindowSplitImages = []; + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + + txn.executeSql(q2, [], async function (txn2, txnres3) { + + if (txnres3.rows.length > 0) { + for (var j = 0; j < txnres3.rows.length; j++) { + let splitItem = txnres3.rows.item(j); + let { IMAGE1, IMAGE2 } = splitItem + let obj1 = { 'Image1': (isImage1 == 1 && IMAGE1 != null ? IMAGE1 : ''), 'Image2': (isImage2 == 1 && IMAGE2 != null ? IMAGE2 : '') }; + obj1['WindowDefinitionId'] = WindowDefinitionId + obj1['WindowId'] = WindowId + obj1['MID'] = MID; + + allWindowSplitImages.push(obj1); + if (isImage1 == 1 && IMAGE1 != null && IMAGE1 != '') { + let imgPath = common_ImagePath + IMAGE1; + let file = { + uri: imgPath, + type: 'image/jpeg', + name: IMAGE1, + filetype: 'image', + folderName: 'WindowImages', + } + allKPIfiles.push(file); + } + if (isImage2 == 1 && IMAGE2 != null && IMAGE2 != '') { + let imgPath = common_ImagePath + IMAGE2; + let file = { + uri: imgPath, + type: 'image/jpeg', + name: IMAGE2, + filetype: 'image', + folderName: 'WindowImages', + } + allKPIfiles.push(file); + } + + if (j == txnres3.rows.length - 1) { + console.log('all images added') + resolve(allWindowSplitImages); + + } + } + } + else { + resolve(allWindowSplitImages); + } + + }, function (txnE, txnerr) { console.log(txnerr); resolve(allWindowSplitImages); },); + + }); + }); + } + let windowSpliteImgData = await getWindowSplits(); + obj['WindowSplitImages'] = windowSpliteImgData + } + + if (IsPresent == 1) { + + async function getWindowQA() { + + let selectlist_q1 = ` DISTINCT q.QUESTION_ID as WindowQuestionId,q.QUESTION_CODE as WindowQuestionCode,wq.WindowQuestionName,wq.QuestionType,wq.WQShowCamera,wq.WQCameraMandatory,wq.WQLengthValidationRequired,wq.WQMinimumChar,wq.WQMaximumChar,wq.WQDecimalPoint,wq.WQDateRangeMin,wq.WQDateRangeMax,wq.WQVoiceLengthInMinutes,wq.WQDefaultQuestionEnable,q.ANSWER as Answer,q.ANSWER_ID as AnswerId,q.MULTI_OPTIONS_IDS as multi_op_ids,q.IMAGE_ALLOW1 as WAShowCamera,q.IMAGE1 as Image1 `; + let join_q2 = ` inner join Mapping_WindowQuestion mq on mq.WindowQuestionId=wq.WindowQuestionId `; + let join_q1 = ` inner join Master_WindowQuestion wq on wq.WindowQuestionId=q.QUESTION_ID `; + let q3 = `select ${selectlist_q1} from ${AppTables.WINDOW_CHILD_DATA} q ${join_q1} ${join_q2} where q.STORE_ID='${StoreId}' and q.WINDOW_DEFINITION_ID='${WindowDefinitionId}' and q.WINDOW_ID='${WindowId}' and q.MENU_ID='${MenuId}' order by wq.WindowQuestionSequence `; + + console.log("") + let allQAs = []; + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + txn.executeSql(q3, [], async function (txn2, txnres3) { + + if (txnres3.rows.length > 0) { + for (var j = 0; j < txnres3.rows.length; j++) { + let QAData = txnres3.rows.item(j); + let { WindowQuestionId, AnswerId, Answer, WAShowCamera, Image1 } = QAData + let showImage1 = (WAShowCamera == 'true' || WAShowCamera == 1) ? 1 : 0; + let obj1 = {}; + obj1['MID'] = MID; + obj1['WindowDefinitionId'] = WindowDefinitionId + obj1['WindowId'] = WindowId + obj1['WindowQuestionId'] = WindowQuestionId + obj1['AnswerId'] = AnswerId + obj1['Answer'] = Answer + obj1['Image1'] = (showImage1 == 1 ? Image1 : '') + + allQAs.push(obj1); + + if (showImage1 == 1 && Image1 != null && Image1 != '') { + let imgPath = common_ImagePath + Image1; + let file = { + uri: imgPath, + type: 'image/jpeg', + name: Image1, + filetype: 'image', + folderName: 'WindowImages', + } + allKPIfiles.push(file); + } + if (j == txnres3.rows.length - 1) { + resolve(allQAs); + } + } + } + else { + resolve(allQAs); + } + + }, function (txnE, txnerr) { console.log('test', txnerr); resolve(allQAs); },); + }); + }); + } + + obj['QuestionAnswers'] = await getWindowQA(); + + if (isStockReq == 1) { + async function getWindowStock() { + return new Promise((resolve, reject) => { + let allStock = []; + let join_s1 = '' + if (isCheckAssrt == 1) { + join_s1 = ` inner join Mapping_ProductAssortmentStorewise a on a.ProductId=s.WINDOW_STOCK_VALUE`; + } + let selectlist_s1 = ` Distinct s.WINDOW_STOCK_DEFINITION_ID as WindowStockDefinitionId, s.WINDOW_DEFINITION_ID as WindowDefinitionId,s.WINDOW_STOCK_TABLE as WindowStockTable,s.WINDOW_STOCK_FIELD as WindowStockField,s.WINDOW_STOCK_VALUE as WindowStockValue,s.WINDOW_STOCK_MBQ as WindowStockMBQ,s.PRODUCT_NAME as ProductName, s.STOCK as Stock `; + let q4 = `select ${selectlist_s1} from ${AppTables.WINDOW_STOCK_DATA} s ${join_s1} where s.WINDOW_DEFINITION_ID='${WindowDefinitionId}' and s.STORE_ID='${StoreId}' and w.MENU_ID='${MenuId}' `; + if (isCheckAssrt) { + q4 += ` and a.StoreId='${StoreId}' `; + } + q4 += ` order by s.PRODUCT_NAME `; + + + db.transaction(async function (txn) { + + txn.executeSql(q4, [], async function (txn2, txnres3) { + if (txnres3.rows.length > 0) { + for (var j = 0; j < txnres3.rows.length; j++) { + let SData = txnres3.rows.item(j); + let { WindowStockDefinitionId, WindowStockValue, Stock } = SData + + let obj1 = {}; + obj1['MID'] = MID; + obj1['WindowDefinitionId'] = WindowDefinitionId + obj1['WindowId'] = WindowId + obj1['WindowStockDefinitionId'] = WindowStockDefinitionId + obj1['WindowStockValue'] = WindowStockValue + obj1['Stock'] = Stock != '' && Stock != null && Stock != "null" && Stock != "undefined" ? Stock : 0; + + allStock.push(obj1); + if (j == txnres3.rows.length - 1) { + resolve(allStock); + } + } + } + else { + resolve(allStock); + } + + }, function (txnE, txnerr) { console.log(txnerr); resolve(allStock); },); + + }); + }); + } + obj['StockData'] = await getWindowStock(); + } + else { + obj['StockData'] = []; + } + } + else { + obj['WindowSplitImages'] = []; + obj['QuestionAnswers'] = [] + obj['StockData'] = []; + + } + + allChilds.push(obj); + } + + let upkName = UploadKeyName != null && UploadKeyName != 'undefined' && UploadKeyName != '' ? UploadKeyName : 'Windows'; + postData['MID'] = MID; + postData['Keys'] = upkName;//'Windows' + postData['JsonData'] = JSON.stringify(allChilds); + postData['UserId'] = UserId; + + resolve({ 'Files': allKPIfiles, 'PostData': postData }); + } + else { + resolve({ 'PostData': postData }); + } + }, function (txnE, txnerr) { console.log(txnerr); resolve({ 'PostData': postData }); },); + + }); + }).then((val) => { + return val; + }).catch((err) => { + console.log(err); + return postData; + }); +} + + +export async function getDB_UploadData(storeData, KPIname, UserId) { + let d1 = new Date(); + let d2 = moment(d1).format('MM/DD/YYYY'); + let { StoreId, StateId, EmpId, MID, UploadStatus, Status, VisitDate, ChainId, StoreTypeId } = storeData; + + switch (KPIname) { + case 'DBPOSMONEAPP': + { + var postData = {}; + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + + let selectlist = `Distinct w.DISTRIBUTOR_ID as DistributorId,w.POSM_HEADER_ID as posmHeaderId,wd.POSMDefinitionId,wd.PosmId,wd.POSMName,wd.PosmTypeId,wd.POSMTypeName,wd.POSMTable,wd.POSMField,wd.POSMValue,wd.ChildName,w.IS_PRESENT as IsPresent,w.POSM_IMAGE as POSMImage,w.STOCK_QTY as StockQty`; + let join = ` inner join Master_POSMDefinition wd on w.POSM_DEFINITION_ID=wd.POSMDefinitionId `; + let q = ` Select ${selectlist} from ${AppTables.DBPOSM_HDR_DATA} w ${join} where w.DISTRIBUTOR_ID='${StoreId}' `; + + let allChilds = [], allKPIfiles = []; + await txn.executeSql(q, [], async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + let { posmHeaderId, POSMDefinitionId, PosmId, POSMName, PosmTypeId, POSMTypeName, POSMTable, POSMField, POSMValue, ChildName, IsPresent, POSMImage, StockQty } = data; + let obj = {}; + + obj['MID'] = MID; + obj['UserId'] = UserId; + obj['DistributorId'] = StoreId; + obj['POSMDefinitionId'] = POSMDefinitionId; + obj['POSMId'] = PosmId; + obj['POSMTable'] = POSMTable; + obj['POSMField'] = POSMField; + obj['POSMValue'] = POSMValue; + obj['ChildName'] = ChildName; + obj['IsPresent'] = IsPresent; + obj['POSMImage'] = POSMImage != null && POSMImage != 'undefined' ? POSMImage : ''; + obj['StockQty'] = StockQty != null && StockQty != "null" && StockQty != 'undefined' && StockQty != undefined && StockQty != '' ? StockQty : 0; + + if (POSMImage != null && POSMImage != 'undefined' && POSMImage != '') { + let imgPath = common_ImagePath + POSMImage; + let file = { + uri: imgPath, + type: 'image/jpeg', + name: POSMImage, + filetype: 'image', + folderName: 'DBPOSMImages', + } + allKPIfiles.push(file); + } + allChilds.push(obj); + } + postData['MID'] = MID; + postData['Keys'] = 'DBPOSM'; + postData['JsonData'] = JSON.stringify(allChilds); + postData['UserId'] = UserId; + + // console.log('POSM',postData) + resolve({ 'Files': allKPIfiles, 'PostData': postData }); + } + else { + resolve({ 'PostData': postData }); + } + }, function (txnE, txnerr) { console.log(txnerr); resolve({ 'PostData': postData }); },); + + }); + }).then((val) => { + return val; + }).catch((err) => { + console.log(err); + return postData; + }); + } + case 'DBWINDOWONEAPP': + { + var postData = {}; + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + + let selectlist = ` Distinct w.DISTRIBUTOR_ID as DistributorId,w.WINDOW_HEADER_ID as WindowHeaderId,wd.WindowDefinitionId,wd.WindowId,wd.WindowName,wd.WindowTable,wd.WindowField,wd.WindowValue,wd.ChildName,w.IS_PRESENT as IsPresent,w.WINDOW_IMAGE as WindowImage,w.STOCK_QTY as StockQty`; + let join = ` inner join Master_WindowDefinition wd on w.WINDOW_DEFINITION_ID=wd.WindowDefinitionId `; + let q = ` Select ${selectlist} from ${AppTables.DB_WINDOW_HDR_DATA} w ${join} where w.DISTRIBUTOR_ID='${StoreId}' `; + + let allChilds = [], allKPIfiles = []; + await txn.executeSql(q, [], async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + let { windowHeaderId, WindowDefinitionId, WindowId, WindowName, WindowTable, WindowField, WindowValue, ChildName, IsPresent, WindowImage, StockQty } = data; + let obj = {}; + + + obj['MID'] = MID; + obj['UserId'] = UserId; + obj['DistributorId'] = StoreId; + obj['WindowDefinitionId'] = WindowDefinitionId; + obj['WindowId'] = WindowId; + obj['WindowTable'] = WindowTable; + obj['WindowField'] = WindowField; + obj['WindowValue'] = WindowValue; + obj['ChildName'] = ChildName; + obj['IsPresent'] = IsPresent; + obj['WindowImage'] = WindowImage != null && WindowImage != 'undefined' ? WindowImage : ''; + obj['StockQty'] = StockQty != null && StockQty != "null" && StockQty != 'undefined' && StockQty != undefined && StockQty != '' ? StockQty : 0; + + if (WindowImage != null && WindowImage != 'undefined' && WindowImage != '') { + let imgPath = common_ImagePath + WindowImage; + let file = { + uri: imgPath, + type: 'image/jpeg', + name: WindowImage, + filetype: 'image', + folderName: 'DBWindowImages', + } + allKPIfiles.push(file); + } + allChilds.push(obj); + } + postData['MID'] = MID; + postData['Keys'] = 'DBWindow'; + postData['JsonData'] = JSON.stringify(allChilds); + postData['UserId'] = UserId; + + // console.log('DB Window',postData) + resolve({ 'Files': allKPIfiles, 'PostData': postData }); + } + else { + resolve({ 'PostData': postData }); + } + }, function (txnE, txnerr) { console.log(txnerr); resolve({ 'PostData': postData }); },); + + }); + }).then((val) => { + return val; + }).catch((err) => { + console.log(err); + return postData; + }); + } + + case 'DBVISICOOLERONEAPP': + { + var postData = {}; + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + let q2 = ` SELECT * FROM ${AppTables.DB_VISICOOLER} WHERE DISTRIBUTOR_ID='${StoreId}' and VISIT_DATE='${d2}' `; + let allChilds = [], allKPIfiles = []; + await txn.executeSql(q2, [], async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + let { STORE_ID, VISIT_DATE, PRESENT, QRCODE, ASSETCODE, CATEGORY, CATEGORY_ID, SUB_CATEGORY, SUB_CATEGORY_ID, BRAND, BRAND_ID, DISPLAY, DISPLAY_ID, REMARK, IMAGE, ADDED_DATE } = data; + let obj = {}; + obj['MID'] = MID; + obj['User_Id'] = UserId; + obj['QRCode'] = QRCODE; + obj['AssetCode'] = ASSETCODE; + obj['Image'] = IMAGE; + obj['Image'] = IMAGE != null && IMAGE != 'undefined' ? IMAGE : ''; + + // if(IMAGE!='') + if (IMAGE != null && IMAGE != 'undefined' && IMAGE != '') { + + // let imgPath=ImageFolderPath+'DBVISICOOLERONEAPP'+"/"+IMAGE; + let imgPath = common_ImagePath + data.IMAGE; + // console.log("commonimagepath-22--",imgPath,+" "+ImageFolderPath); + + let file = { + uri: imgPath, + type: 'image/jpeg', + name: IMAGE, + filetype: 'image', + folderName: 'DistributorVisicoolerImages', + + } + allKPIfiles.push(file); + } + + + allChilds.push(obj); + } + postData['MID'] = MID; + postData['Keys'] = 'DBVisicooler'; + postData['JsonData'] = JSON.stringify(allChilds); + postData['UserId'] = UserId; + // postData['EmpId']=storeData.MerchandiserId; + console.log('CompVisi PostData---', postData) + resolve({ 'Files': allKPIfiles, 'PostData': postData }); + } + else { + resolve({ 'Files': allKPIfiles, 'PostData': postData }); + } + }, function (txn2, txnerr) { console.log(txnerr); resolve({ 'PostData': postData }); },); + + }); + }).then((val) => { + return val; + }).catch((err) => { + console.log(err); + return postData; + }); + + } + + } +} + +async function getDisplayCheckList(DisplayId, SubCategoryId, storeData1 = {}, previousDayUpload = false) { + let d1 = new Date(); + let d2 = moment(d1).format('MM/DD/YYYY'); + var result = await new Promise((resolve, reject) => { + db.transaction(async function (txn) { + + let { StoreId } = storeData1; + let join = `Inner join Mapping_DisplayChecklist v on p.ChecklistId=v.ChecklistId`; + let join2 = `Left join (Select * From ${AppTables.PAID_VIS_CHECKLIST} Where STORE_ID='${StoreId}' ` + (!previousDayUpload ? ` and VISIT_DATE='${d2}' ` : '') + ` and SUB_CATEGORY_ID='${SubCategoryId}' and DISPLAY_ID='${DisplayId}') as T on p.ChecklistId=T.CHECKLIST_iD `; + let q = `Select Distinct p.ChecklistId as ChecklistId,p.ChecklistName as ChecklistName ,ifnull(T.REASON,'')as REASON,ifnull(T.REASON_ID,0)as REASON_ID from Master_Checklist p ${join} ${join2} Where v.DisplayId ='${DisplayId}'`; + + await txn.executeSql(q, [], async function (txn2, txnres) { + + if (txnres.rows.length > 0) { + let arr = []; + for (var i = 0; i < txnres.rows.length; i++) { + let data = txnres.rows.item(i); + arr.push(data); + } + resolve(arr); + } + else { + resolve([]); + } + }, function (txnE, txnerr) { console.log(txnerr); setProcessing(false); resolve([]) },); + + }); + }).then((val) => { + return { 'Results': val }; + }).catch((err) => { + return { 'Error': err }; + }); + return result; +} + + +export async function UploadDataWithoutWait(storeData, postData, KPIdata, url) { + return await UploadData2(url, postData) + .then((res) => { + if (res.UploadJsonResult != null && res.UploadJsonResult == 'Success') { + // console.log(KPIdata+' uploaded'); + return true; + } + return false; + }).catch((err) => { + console.log(err); + return false; + }); + +} + +export async function UploadImagesWithoutWait(postData, url) { + console.log(url, postData); + return await UploadFormData(url, postData) + .then((res) => { + console.log('test:', res); + if (typeof res == 'object' && res.error != null) { + return false; + } + else if (res.includes('Success')) { + console.log('image uploaded'); + return true; + } + return false; + }) + .catch((err) => { + console.log(err); + return false; + }); +} + +export async function uploadStockDataChunks(stockChunks, url) { + try { + let allSuccess = true; // track overall status + console.log(`📦 Total chunks to upload: ${stockChunks.length}`); + // Upload each chunk as a single request + for (const chunk of stockChunks) { + try { + // Upload the full PostData object + //console.log("chunk.PostData",chunk.PostData) + const result = await uploadSingleSKU(chunk.PostData, url); + // Check server response + if (result.UploadJsonResult && result.UploadJsonResult.toLowerCase() === "success") { + console.log(`✅ Uploaded Chunk}`); + } else { + console.warn(`⚠️ Server failed for Chunk`); + allSuccess = false; + } + } catch (err) { + console.error(`❌ Failed Chunk`, err); + allSuccess = false; + } + } + + return allSuccess + + } catch (err) { + console.error("🔥 Error uploading stock data", err); + return { status: "error", message: err.message }; + } +} + +export async function uploadSingleSKU(singleSkuData, url) { + const response = await fetch(url, { + method: "POST", + headers: { + Accept: "application/json", + "Content-Type": "application/json", + }, + body: JSON.stringify(singleSkuData), + }); + + if (!response.ok) { + throw new Error(`Server error ${response.status}`); + } + + return response.json(); +} + +export async function getChunk_dataStk() { + let AllKPIFields = await getKPIFields({ ScreenName: "STOCK" }); + let isJsonDataBreakIndex = AllKPIFields.findIndex( + i => i.KPIFieldName === "JsonDataBreak" + ); + let isJsonDataBreakPIObj = isJsonDataBreakIndex >= 0 ? AllKPIFields[isJsonDataBreakIndex] : {}; + let isJsonDataBreakEnable = isJsonDataBreakIndex >= 0 ? isJsonDataBreakPIObj["KPIFieldEnable"] : false; + let KPIFieldDisplayValue = isJsonDataBreakIndex >= 0 ? Number(isJsonDataBreakPIObj["KPIFieldDisplayName"]) : 0; + console.log("chunk_size", KPIFieldDisplayValue) + return isJsonDataBreakEnable && KPIFieldDisplayValue > 0 + ? KPIFieldDisplayValue + : 0; +} + + +export async function uploadAllData( + props, + storeData, + allKPIs = [], + UserId, + JCP_TYPE, + allow_DataUpload = true, + UpdateUploadCountLocal = () => { }, + previousDayUpload = false +) { + const url = props.baseurl + getMethodName(METHODS.UPLOADJSON_METHOD); + + let uploadedCount = 0; + let allfiles = await getAllFolderImages(); + console.log("allfiles to upload:", allfiles.length); + + // run uploads in parallel + await Promise.all( + allKPIs.map(async (KpiData) => { + let { ScreenName, MenuId } = KpiData; + let res = await getUploadData(storeData, KpiData, UserId, previousDayUpload); + console.log("res_uploadData:", allow_DataUpload, ScreenName, MenuId, typeof res, res != false); + if (typeof res === "object" && res != false) { + if (allow_DataUpload === true) { + let CHUNK_SIZE = 0 + if (ScreenName === 'STOCK') { + CHUNK_SIZE = await getChunk_dataStk(); + } + let pdata = ScreenName === 'STOCK' && CHUNK_SIZE > 0 ? res : res.PostData; + if (pdata && typeof pdata === "object" && Object.keys(pdata).length > 0) { + // upload by parts if needed + if (ScreenName === 'STOCK' && CHUNK_SIZE > 0) { + console.log("inside_method_check") + let isuploaded = await uploadStockDataChunks(pdata, url); + console.log("stock_final_status", isuploaded); + if (isuploaded) { + uploadedCount++; + } + } + else if (ScreenName === "OPSTOCK" && pdata.UploadByPart) { + let isUploaded = await UploadByPart(pdata, storeData, KpiData, url); + if (isUploaded) uploadedCount++; + } else { + let isUploaded = await UploadDataWithoutWait(storeData, pdata, KpiData, url); + console.log("isUploaded:", ScreenName, MenuId, ":", isUploaded); + if (isUploaded) uploadedCount++; + } + } else { + uploadedCount++; // no data, skip + } + } else { + uploadedCount++; + } + } else { + uploadedCount++; + } + + UpdateUploadCountLocal(uploadedCount); + }) + ); + + // ✅ Only runs once after ALL uploads are done + console.log("allUploaded", uploadedCount, "/", allKPIs.length); + + if (allow_DataUpload) { + let tbname = JCP_TYPE; + await uploadStoreStatus(props, storeData, "D", tbname, previousDayUpload); + } + + console.log("allfiles:", allfiles.length); + return allfiles; +} + + +// export async function uploadAllData(props, storeData, allKPIs = [], UserId, JCP_TYPE, allow_DataUpload = true, UpdateUploadCountLocal = () => { }, previousDayUpload = false) { +// const url = props.baseurl + getMethodName(METHODS.UPLOADJSON_METHOD); + +// let uploadedCount = 0; +// let allfiles = await getAllFolderImages(); +// console.log('allfiles to upload:', allfiles.length); +// return await Promise.all( +// allKPIs.map(async (KpiData, index) => { +// let { ScreenName, MenuId } = KpiData; +// let res = await getUploadData(storeData, KpiData, UserId, previousDayUpload); +// console.log('res:', ScreenName, MenuId, typeof res, res != false); +// if (typeof res == 'object' && res != false) { +// if (allow_DataUpload == true) { +// let pdata = res.PostData; +// if (pdata != null && typeof pdata == 'object' && Object.keys(pdata).length > 0) { +// // post data exist then upload data +// //upload by parts if data is large +// if (ScreenName == 'OPSTOCK' && pdata.UploadByPart != null && pdata.UploadByPart == true) { +// let isUploaded = await UploadByPart(pdata, storeData, KpiData, url); +// if (isUploaded == true) { +// uploadedCount++; +// } +// else { +// console.log('data not uploaded for ScreenName: ', ScreenName); +// } +// } +// else { +// //upload single time for each KPI if by parts not enabled +// let isUploaded = await UploadDataWithoutWait(storeData, res.PostData, KpiData, url); +// console.log('isUploaded:', ScreenName, MenuId, ':', isUploaded); +// if (isUploaded == true) { +// uploadedCount++; +// } +// } +// } +// else { +// // data does noot exists for this KPI - may because it is disabled +// uploadedCount++; +// } +// } +// else { +// uploadedCount++; +// } + +// UpdateUploadCountLocal(uploadedCount); + +// console.log('upload all len: ', ScreenName, MenuId, uploadedCount, allKPIs.length); + +// if (uploadedCount == allKPIs.length) { +// console.log('allUploaded'); + +// if (allow_DataUpload == true) { +// let tbname = JCP_TYPE; +// // all data uploaded, Now update status D +// await uploadStoreStatus(props, storeData, 'D', tbname, previousDayUpload); +// } +// // props.updateStoreStatuslocal?await props.updateStoreStatuslocal('D',storeData):''; +// // await uploadAllImages(props,storeData,allfiles,tbname); +// console.log('allfiles:', allfiles.length) +// return allfiles; +// } +// } +// else { +// uploadedCount++; +// UpdateUploadCountLocal(uploadedCount); +// return []; +// } +// }) +// ).then((val) => { +// return allfiles; +// }); +// } + +export async function UploadByPart(pdata, storeData, KpiData, url) { + let { MID, Keys, UserId, PartsCount, PartsData, AllImages } = pdata; + let isUploaded = true; + let promises = []; + for (let i = 0; i < PartsCount; i++) { + promises.push( + new Promise(async (resolve, reject) => { + let postData = {}; + let alljsonData = {}; + let part_dObj = PartsData[i]; + // "PartNo":i,"Products":allProducts + let part_d = part_dObj.Products != null ? part_dObj.Products : {}; + + if (i == 0) { + alljsonData['StockImgs'] = AllImages; + } + else { + alljsonData['StockImgs'] = AllImages; + } + alljsonData['StockChilds'] = part_d; + + postData['MID'] = MID; + postData['Keys'] = Keys; + postData['JsonData'] = JSON.stringify(alljsonData); + postData['UserId'] = UserId; + + console.log("pdata for partcount:", i, postData); + let isUploadedThis = await UploadDataWithoutWait(storeData, postData, KpiData, url); + if (!isUploadedThis) { + isUploaded = false; + } + resolve(isUploadedThis); + }) + ); + } + + + return new Promise.all(promises).then((res) => { + console.log("Part upload status:", res); + return isUploaded; + }).catch((e) => { + console.log(e); + return false; + }) +} + + +export async function uploadAll_DBData(props, storeData, allKPIs = [], UserId, JCP_TYPE, allow_DataUpload = true, loc, UpdateUploadCountLocal = () => { }) { + const url = props.baseurl + getMethodName(METHODS.UPLOADJSON_METHOD); + + let uploadedCount = 0; + + let allfiles = await getAllFolderImages(); + return await Promise.all( + allKPIs.map(async (item, index) => { + let name = item.ScreenName; + let res = await getDB_UploadData(storeData, name, UserId); + + let KPIfiles = res.Files || []; + console.log('KPIfiles len:', KPIfiles.length) + + // async function mergeFiles(){ + // return new Promise((resolve,reject)=>{ + // if(KPIfiles.length>0){ + // for(var i=0;i { + return allfiles; + }); +} + +export async function uploadDBStatus(props, storeData, Status, tbname, loc) { + let d1 = new Date(); + let d2 = moment(d1).format('MM/DD/YYYY'); + let { MID, StoreId } = storeData; + let pdata = { + "DistributorId": storeData.StoreId, + "VisitDate": d2, + "Latitude": (loc?.lat || ''), + "Longitude": (loc?.lng || ''), + "ReasonId": 0, + // "Remark":"", + // "Appversion":AppVersion, + "UploadStatus": Status, + "UserId": (props.UserId || ''), + "CheckInImage": storeData.CHECKIN_IMAGE != null ? storeData.CHECKIN_IMAGE : '', + "CheckoutImage": "", + }; + + const url2 = props.baseurl + getMethodName(METHODS.DISTRIBUTOR_COVERAGE); + return await UploadData2(url2, pdata) + .then(async (res) => { + console.log('status uploadres:', res); + if (parseInt(res) > 0) { + let datan1 = { StoreId: storeData.StoreId, UploadStatus: Status, tbname: tbname }; + let isUpdated = await UpdateDistributorStatus(props, datan1); + return isUpdated; + } + else { + return false; + } + }) + .catch((err) => { + console.log(err); + return false; + }); +} + +export async function uploadStoreStatus(props, storeData, Status, tbname, previousDayUpload = false) { + + let { MID, StoreId } = storeData; + let pdata = { + "Mid": MID, + "Status": Status, + }; + const url2 = props.baseurl + getMethodName(METHODS.COVERAGESTATUS_DETAIL_METHOD); + return await UploadData2(url2, pdata) + .then(async (res) => { + + console.log('status uploadres:', res); + if (!res.error) { + let datan1 = { StoreId: storeData.StoreId, UploadStatus: Status, tbname: tbname }; + let isUpdated = await UpdateStoreStatus(props, datan1, null, previousDayUpload); + console.log('status uploadres:', isUpdated) + return isUpdated; + } + + }) + .catch((err) => { + console.log(err); + return false; + }); +} + + + +// export async function UpdateIRUploadStatus_G(props,TempSessionId,UnSessionId,StoreId){ +// let IRUploadTables=getIRTables(); + +// return new Promise.all( + +// IRUploadTables.map((item,index)=>{ +// let {TB_Upload,TB_Image}=item; +// db.transaction(async function (txn) { + +// //check if temp session id exists in particular KPI or not +// let sel_q=`Select * from ${TB_Upload} where TEMP_SESSION_ID='${TempSessionId}' and STORE_ID='${StoreId}' `; +// await txn.executeSql(sel_q,[],async function (txn2, txnres) { + +// if(txnres.rows.length>0){ +// //If Temp session id exists in particular KPI the update its status +// console.log('Updated IR Upload Status for tables',TB_Upload,TB_Image,TempSessionId); + +// let q=`Update ${TB_Upload} set UN_SESSION_ID='${UnSessionId}',UPLOAD_STATUS='1',SYNC_STATUS='Synced' where TEMP_SESSION_ID='${TempSessionId}' and STORE_ID='${StoreId}' `;//VISIT_DATE='${d2}' +// await txn.executeSql(q,[],async function (txn2, txnres) { +// console.log('Updated IR Upload Status'); + +// let q2=`Update ${TB_Image} set UN_SESSION_ID='${UnSessionId}' where TEMP_SESSION_ID='${TempSessionId}' and STORE_ID='${StoreId}' `;//VISIT_DATE='${d2}' and +// await txn.executeSql(q2,[],async function (txn2, txnres2) { +// console.log('Updated IR Upload Status'); +// return true; +// },function (txnE,txnerr) { console.log(txnerr);return false; },); + +// },function (txnE,txnerr) { console.log(txnerr);return false; },); +// } +// else{ +// return false; +// } +// },function (txnE,txnerr) { console.log(txnerr);return false; },); +// }); + +// }) + +// ).catch((Err)=>{ +// console.log('Error in UpdateIRUploadStatus:',Err); +// return false; +// }) + + + +// } + +// all Tables having Temp Session Ids for IRsession +export function getIRTables(props) { + console.log("props.IR_Creds", props.IR_Creds); + let IR_Creds = props.IR_Creds != null && props.IR_Creds != "" ? JSON.parse(props.IR_Creds) : []; + let IR_CredsObj = IR_Creds.length > 0 ? IR_Creds[0] : {}; + let PVis_IRCreds = IR_CredsObj.Visibility != null && IR_CredsObj.Visibility.length > 0 ? IR_CredsObj.Visibility[0] : {}; + let Wind_IRCreds = IR_CredsObj.Window != null && IR_CredsObj.Window.length > 0 ? IR_CredsObj.Window[0] : {}; + let SOS_IRCreds = IR_CredsObj.ShareOfShelf != null && IR_CredsObj.ShareOfShelf.length > 0 ? IR_CredsObj.ShareOfShelf[0] : {}; + let AVis_IRCreds = IR_CredsObj.AdditionalVisibility != null && IR_CredsObj.AdditionalVisibility.length > 0 ? IR_CredsObj.AdditionalVisibility[0] : {}; + let CVis_IRCreds = IR_CredsObj.CompVisibility != null && IR_CredsObj.CompVisibility.length > 0 ? IR_CredsObj.CompVisibility[0] : {}; + let PROMO_IRCreds = IR_CredsObj.Promotion != null && IR_CredsObj.Promotion.length > 0 ? IR_CredsObj.Promotion[0] : {}; + + let IRUploadTables = [ + { "TB_Image": AppTables.SOS_IR_IMAGES, "TB_Upload": AppTables.SOS_IRUPLOAD, 'ScreenName': 'SOSONEAPP_IR', 'category_name': SOS_IRCreds.category_name, 'task_name': SOS_IRCreds.task_name, 'photo_type': SOS_IRCreds.photo_type, IsMenuIdPresent: false }, + { "TB_Image": AppTables.PAIDVIS_IR_IMAGES, "TB_Upload": AppTables.PAIDVIS_IRUPLOAD, 'ScreenName': 'PAIDVISIONEAPP_IR', 'category_name': PVis_IRCreds.category_name, 'task_name': PVis_IRCreds.task_name, 'photo_type': PVis_IRCreds.photo_type, IsMenuIdPresent: true }, + { "TB_Image": AppTables.ADDVIS_IR_IMAGES, "TB_Upload": AppTables.ADDVIS_IRUPLOAD, 'ScreenName': 'ADDITIONALVISI_IR', 'category_name': AVis_IRCreds.category_name, 'task_name': AVis_IRCreds.task_name, 'photo_type': AVis_IRCreds.photo_type, IsMenuIdPresent: false }, + { "TB_Image": AppTables.COMPVIS_IR_IMAGES, "TB_Upload": AppTables.COMPVIS_IRUPLOAD, 'ScreenName': 'COMPVISI_IR', 'category_name': CVis_IRCreds.category_name, 'task_name': CVis_IRCreds.task_name, 'photo_type': CVis_IRCreds.photo_type, IsMenuIdPresent: false }, + { "TB_Image": AppTables.WINDOW_IR_IMAGES, "TB_Upload": AppTables.WINDOW_IRUPLOAD, 'ScreenName': 'WINDOW_IR', 'category_name': Wind_IRCreds.category_name, 'task_name': Wind_IRCreds.task_name, 'photo_type': Wind_IRCreds.photo_type, IsMenuIdPresent: true }, + { "TB_Image": AppTables.PROMO_IR_IMAGES, "TB_Upload": AppTables.PROMO_IRUPLOAD, 'ScreenName': 'PROMOTIONONEAPP_IR', 'category_name': PROMO_IRCreds.category_name, 'task_name': PROMO_IRCreds.task_name, 'photo_type': PROMO_IRCreds.photo_type, IsMenuIdPresent: true }, + ]; + return IRUploadTables; +} +export async function getPendingIRImages(props) { + console.log("SyncIRsessions called"); + let d1 = new Date(); + let d2 = moment(d1).format('MM/DD/YYYY'); + + let sessionListWithDetails = []; + let IRUploadTables = getIRTables(props); + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + function getJPQuery(PJPTableName, PJPJoinType = 'inner') { + + let join = `${PJPJoinType} Join ${PJPTableName} JP on IR.STORE_ID=JP.StoreId and IR.VISIT_DATE=JP.VisitDate `; + let unions = ``; + for (let i = 0; i < IRUploadTables.length; i++) { + let item = IRUploadTables[i]; + let { TB_Image, TB_Upload, ScreenName, category_name, task_name, photo_type, IsMenuIdPresent } = item; + let join2 = `left outer Join Menu_Master menu on menu.ScreenName='${ScreenName}' ${IsMenuIdPresent ? ' and menu.MenuId=IR.MENU_ID ' : ''} `; + let Sess_subq = `(select distinct tb2.STORE_ID,tb2.TEMP_SESSION_ID,count(tb2.IMAGE1) as SessImageCount from ${TB_Image} tb2 group by tb2.STORE_ID,tb2.TEMP_SESSION_ID) `; + let join3 = `inner Join ${Sess_subq} Img on Img.TEMP_SESSION_ID=IR.TEMP_SESSION_ID and Img.STORE_ID=IR.STORE_ID `; + unions += unions != '' ? ' UNION ' : ''; + unions += `Select Distinct IR.STORE_ID as StoreId,IR.VISIT_DATE as VisitDate,count(IR.TEMP_SESSION_ID) as SessionCount, + sum(IFNULL(Img.SessImageCount,0)) as ImageCount, + '${TB_Upload}' as TableName1,'${TB_Image}' as TableName2,'${ScreenName}' as ScreenName,JP.StoreCode,JP.StoreName,menu.MenuName,'0' as IRUploadedCount + FROM ${TB_Upload} IR ${join3} ${join} ${join2} + where IR.SYNC_STATUS!='Synced' group by IR.STORE_ID,IR.VISIT_DATE `; + } + let commonQ = unions; + console.log("commonQ:", commonQ); + return commonQ; + } + + let MappingJP = getJPQuery('Mapping_JourneyPlan', 'left outer'); + let AdhocJP = getJPQuery('Adhoc_JourneyPlan'); + let q = `${MappingJP} UNION ${AdhocJP}`; + + if (props.ShowNonMerList == true) { + let NonMerchJP = getJPQuery('NonMerchandising_JourneyPlan'); + q += ` UNION ${NonMerchJP} `; + } + if (props.ShowNonProgram == true) { + let NonProgJP = getJPQuery('NonProgram_JourneyPlan'); + q += ` UNION ${NonProgJP} `; + } + if (props.ShowStoreSearch == true) { + let SearchStoreJP = getJPQuery('StoreSearch_JourneyPlan'); + q += ` UNION ${SearchStoreJP} `; + } + if (props.ShowBeatPlanList == true) { + let RouteJP = getJPQuery('JourneyPlan_RouteWise'); + q += ` UNION ${RouteJP} `; + } + + q += ` order by IR.VISIT_DATE,IR.STORE_ID `; + + // Add joins for other JCP types + let allChilds = []; + console.log("allPendingImagesList q:", q); + await txn.executeSql(q, [], async function (txn2, txnres) { + if (txnres.rows.length > 0) { + for (let i = 0; i < txnres.rows.length; i++) { + let data = txnres.rows.item(i); + sessionListWithDetails.push(data); + + if (i == txnres.rows.length - 1) { + resolve(sessionListWithDetails); + } + } + } + else { + resolve(sessionListWithDetails); + } + }, function (txnE, txnerr) { console.log(txnerr); resolve(sessionListWithDetails); },); + + }); + }).then((val) => { + return val; + }).catch((err) => { + console.log(err); + return sessionListWithDetails; + }); +} + +export async function getPendingIRImagesDetails(props) { + console.log("SyncIRsessions called"); + let d1 = new Date(); + let d2 = moment(d1).format('MM/DD/YYYY'); + + let sessionListWithDetails = []; + let IRUploadTables = getIRTables(props); + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + function getJPQuery(PJPTableName) { + + let join = `Inner Join ${PJPTableName} JP on IR.STORE_ID=JP.StoreId `; + let unions = ``; + for (let i = 0; i < IRUploadTables.length; i++) { + let item = IRUploadTables[i]; + let { TB_Image, TB_Upload, ScreenName, category_name, task_name, photo_type } = item; + let join2 = `left outer Join Menu_Master menu on menu.ScreenName='${ScreenName}' `; + unions += unions != '' ? ' UNION ' : ''; + //,'SOSONEAPP' as ScreenName + // unions+=`Select IR.STORE_ID,IR.TEMP_SESSION_ID,'${TB_Upload}' as TableName1,'${TB_Image}' as TableName2,'${category_name}' as IRCategoryName,'${task_name}' as IRTaskName,'${photo_type}' as IRPhotoType,'${ScreenName}' as ScreenName,JP.StoreCode,JP.StoreName,IR.STORE_ID as StoreId FROM ${TB_Upload} IR ${join} where IR.SYNC_STATUS!='Synced'`; + unions += `Select Distinct JP.StoreId,IR.TEMP_SESSION_ID,IR.SESSION_STORECODE as IRStoreCode,IR.SESSION_TASKNAME as IRTaskName,IR.SESSION_CATNAME as IRCategoryName,IR.SESSION_PHOTOTYPE as IRPhotoType,'${TB_Upload}' as TableName1,'${TB_Image}' as TableName2,'${ScreenName}' as ScreenName,JP.StoreCode,JP.StoreName,menu.MenuName FROM ${TB_Upload} IR ${join} ${join2} where IR.SYNC_STATUS!='Synced'`; + } + // let commonQ=`Select Distinct IR2.STORE_ID,IR2.TEMP_SESSION_ID,'' as TableName1,'' as TableName2,IR2.IRCategoryName,IR2.IRTaskName,IR2.IRPhotoType,'' as ScreenName,IR2.StoreCode,IR2.StoreName,IR2.StoreId from + // (${unions}) IR2`; + let commonQ = unions; + console.log("commonQ:", commonQ); + return commonQ; + } + + let MappingJP = getJPQuery('Mapping_JourneyPlan'); + let AdhocJP = getJPQuery('Adhoc_JourneyPlan'); + let q = `${MappingJP} UNION ${AdhocJP}`; + + if (props.ShowNonMerList == true) { + let NonMerchJP = getJPQuery('NonMerchandising_JourneyPlan'); + q += ` UNION ${NonMerchJP} `; + } + if (props.ShowNonProgram == true) { + let NonProgJP = getJPQuery('NonProgram_JourneyPlan'); + q += ` UNION ${NonProgJP} `; + } + + if (props.ShowStoreSearch == true) { + let SearchStoreJP = getJPQuery('StoreSearch_JourneyPlan'); + q += ` UNION ${SearchStoreJP} `; + } + if (props.ShowBeatPlanList == true) { + let RouteJP = getJPQuery('JourneyPlan_RouteWise'); + q += ` UNION ${RouteJP} `; + } + + // Add joins for other JCP types + let allChilds = []; + + await txn.executeSql(q, [], async function (txn2, txnres) { + if (txnres.rows.length > 0) { + for (let i = 0; i < txnres.rows.length; i++) { + let data = txnres.rows.item(i); + sessionListWithDetails.push(data); + + if (i == txnres.rows.length - 1) { + resolve(sessionListWithDetails); + } + } + } + else { + resolve(sessionListWithDetails); + } + }, function (txnE, txnerr) { console.log(txnerr); resolve(sessionListWithDetails); },); + + }); + }).then((val) => { + return val; + }).catch((err) => { + console.log(err); + return sessionListWithDetails; + }); +} + +export async function SyncIRsessions(props, type = "1", storeWise = false, store_item = {}) { + console.log("SyncIRsessions called"); + let d1 = new Date(); + let d2 = moment(d1).format('MM/DD/YYYY'); + let defData = { isUploadStarted: false, noDataFound: false, success: false, AllDataUploaded: false, sessionList: [], sessionListWithDetails: [] }; + let IRUploadTables = getIRTables(props); + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + function getJPQuery(PJPTableName) { + + let join = `Inner Join ${PJPTableName} JP on IR.STORE_ID=JP.StoreId `; + let unions = ``; + for (let i = 0; i < IRUploadTables.length; i++) { + let item = IRUploadTables[i]; + let { TB_Image, TB_Upload, ScreenName, category_name, task_name, photo_type } = item; + if (!storeWise || (storeWise && store_item != null && ScreenName == store_item.ScreenName)) { + + unions += unions != '' ? ' UNION ' : ''; + //,'SOSONEAPP' as ScreenName + // unions+=`Select IR.STORE_ID,IR.TEMP_SESSION_ID,'${TB_Upload}' as TableName1,'${TB_Image}' as TableName2,'${category_name}' as IRCategoryName,'${task_name}' as IRTaskName,'${photo_type}' as IRPhotoType,'${ScreenName}' as ScreenName,JP.StoreCode,JP.StoreName,IR.STORE_ID as StoreId FROM ${TB_Upload} IR ${join} where IR.SYNC_STATUS!='Synced'`; + unions += `Select Distinct IR.STORE_ID,IR.TEMP_SESSION_ID,IR.SESSION_STORECODE as IRStoreCode,IR.SESSION_TASKNAME as IRTaskName,IR.SESSION_CATNAME as IRCategoryName,IR.SESSION_PHOTOTYPE as IRPhotoType,'${TB_Upload}' as TableName1,'${TB_Image}' as TableName2,'${ScreenName}' as ScreenName,JP.StoreCode,JP.StoreName,IR.STORE_ID as StoreId,IR.VISIT_DATE as VisitDate FROM ${TB_Upload} IR ${join} where IR.SYNC_STATUS!='Synced'`; + if (storeWise) { + let { StoreId } = store_item; + unions += ` and IR.STORE_ID='${StoreId}'`; + } + } + } + // let commonQ=`Select Distinct IR2.STORE_ID,IR2.TEMP_SESSION_ID,'' as TableName1,'' as TableName2,IR2.IRCategoryName,IR2.IRTaskName,IR2.IRPhotoType,'' as ScreenName,IR2.StoreCode,IR2.StoreName,IR2.StoreId from + // (${unions}) IR2`; + let commonQ = unions; + console.log("commonQ:", commonQ); + return commonQ; + } + + let MappingJP = getJPQuery('Mapping_JourneyPlan'); + let AdhocJP = getJPQuery('Adhoc_JourneyPlan'); + let q = `${MappingJP} UNION ${AdhocJP}`; + + if (props.ShowNonMerList == true) { + let NonMerchJP = getJPQuery('NonMerchandising_JourneyPlan'); + q += ` UNION ${NonMerchJP} `; + } + if (props.ShowNonProgram == true) { + let NonProgJP = getJPQuery('NonProgram_JourneyPlan'); + q += ` UNION ${NonProgJP} `; + } + if (props.ShowStoreSearch == true) { + let SearchStoreJP = getJPQuery('StoreSearch_JourneyPlan'); + q += ` UNION ${SearchStoreJP} `; + } + if (props.ShowBeatPlanList == true) { + let RouteJP = getJPQuery('JourneyPlan_RouteWise'); + q += ` UNION ${RouteJP} `; + } + + // Add joins for other JCP types + let allChilds = []; + + await txn.executeSql(q, [], async function (txn2, txnres) { + if (txnres.rows.length > 0) { + const promises = []; + let arr = [], arr1 = []; + + for (let i = 0; i < txnres.rows.length; i++) { + let data = txnres.rows.item(i); + let { STORE_ID, TEMP_SESSION_ID, TableName1, TableName2, StoreCode, VisitDate } = data; + console.log("StoreCode:", StoreCode, ",StoreId:", STORE_ID, TableName1); + let storeData = { "StoreId": STORE_ID, "StoreCode": StoreCode, "VisitDate": VisitDate }; + promises.push(new Promise(async (resolve, reject) => { + let IRStatusSyncData = await UpdateIRSyncStatus(props, i, storeData, TEMP_SESSION_ID, TableName1, TableName2); + let isIRDataUpdated = IRStatusSyncData['isUpdated']; + let IRSyncStatus = IRStatusSyncData['Status']; + if (IRSyncStatus == 'Failed') { + arr.push(TEMP_SESSION_ID); + arr1.push(data); + } + resolve(true); + })); + if (i == txnres.rows.length - 1) { + Promise.all(promises) + .then(async (results) => { + console.log("Sync Status Updated for all stores", results); + //Upload Failed Sessions arr if any + if (arr.length > 0) { + let extraData = { "IsGlobal": type } + let extraData1 = JSON.stringify(extraData); + let isUploadStarted = await IRLogin.UploadIRSessionImages(extraData1, JSON.stringify(arr)); + // let isUploadStarted=true; + if (isUploadStarted) { + console.log("sessionListWithDetails:", arr1) + // notify('All images uploaded!'); + defData['isUploadStarted'] = true; + defData['success'] = true; + defData['sessionListWithDetails'] = arr1; + defData['sessionList'] = arr; + resolve(defData); + } + else { + notify('Cannot start uploading images!'); + resolve(defData); + } + } + else { + defData['isUploadStarted'] = false; + defData['success'] = true; + defData['AllDataUploaded'] = true; + defData['sessionList'] = arr1; + defData['sessionListWithDetails'] = arr1; + resolve(defData); + } + + }) + .catch((e) => { + // Handle errors here + console.log("Cannot update sync Status for all stores", e); + resolve(defData); + }); + } + } + + + } + else { + defData['noDataFound'] = true; + defData['success'] = true; + resolve(defData); + } + }, function (txnE, txnerr) { console.log(txnerr); resolve(defData); },); + + }); + }).then((val) => { + return val; + }).catch((err) => { + console.log(err); + return defData; + }); +} + +export async function SyncIRsessionsInKPI(props, storeData, TableName1, TableName2, menuEnable = false, menuData = {}) { + // TableName1: IR Upload Table for KPI + // TableName2: IR Images Table for KPI + console.log("SyncIRsessionsInKPI", TableName1, TableName2); + let d1 = new Date(); + let d2 = moment(d1).format('MM/DD/YYYY'); + let defData = { isUploadStarted: false, noDataFound: false, success: false, AllDataUploaded: false, sessionList: [], sessionListWithDetails: [] } + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + let q = `Select Distinct STORE_ID,TEMP_SESSION_ID,SESSION_STORECODE,SESSION_TASKNAME,SESSION_CATNAME,SESSION_PHOTOTYPE,'${TableName1}' as TableName1,'${TableName2}' as TableName2,VISIT_DATE as VisitDate FROM ${TableName1} where VISIT_DATE='${d2}' and STORE_ID='${storeData.StoreId}' and SYNC_STATUS!='Synced' `; + q += menuEnable ? ` and MENU_ID='${menuData.MenuId}' ` : ''; + let allChilds = []; + + await txn.executeSql(q, [], async function (txn2, txnres) { + if (txnres.rows.length > 0) { + const promises = []; + let arr = [], arr1 = []; + + for (let i = 0; i < txnres.rows.length; i++) { + let data = txnres.rows.item(i); + let { STORE_ID, TEMP_SESSION_ID, TableName1, TableName2 } = data; + + console.log("push prmoise for TEMP_SESSION_ID:", TEMP_SESSION_ID); + promises.push(new Promise(async (resolve, reject) => { + let IRStatusSyncData = await UpdateIRSyncStatus(props, i, storeData, TEMP_SESSION_ID, TableName1, TableName2, menuEnable, menuData); + console.log("IRStatusSyncData:", IRStatusSyncData); + let isIRDataUpdated = IRStatusSyncData['isUpdated']; + let IRSyncStatus = IRStatusSyncData['Status']; + if (IRSyncStatus == 'Failed') { + arr.push(TEMP_SESSION_ID); + arr1.push(data); + } + resolve(true); + })); + if (i == txnres.rows.length - 1) { + Promise.all(promises) + .then(async (results) => { + console.log("Sync Status Updated for all stores"); + //Upload Failed Sessions arr if any + if (arr.length > 0) { + let extraData = { "IsGlobal": "0" } + let extraData1 = JSON.stringify(extraData); + let isUploadStarted = await IRLogin.UploadIRSessionImages(extraData1, JSON.stringify(arr)); + if (isUploadStarted) { + // notify('All images uploaded!'); + defData['isUploadStarted'] = true; + defData['success'] = true; + defData['sessionListWithDetails'] = arr1; + defData['sessionList'] = arr; + resolve(defData); + } + else { + notify('Cannot start uploading images!'); + resolve(defData); + } + } + else { + defData['isUploadStarted'] = false; + defData['success'] = true; + defData['AllDataUploaded'] = true; + defData['sessionList'] = arr1; + defData['sessionListWithDetails'] = arr1; + resolve(defData); + } + + }) + .catch((e) => { + // Handle errors here + console.log("Cannot update sync Status for all stores", e); + resolve(defData); + }); + } + } + + + } + else { + defData['noDataFound'] = true; + defData['success'] = true; + resolve(defData); + } + }, function (txnE, txnerr) { console.log(txnerr); resolve(defData); },); + + }); + }).then((val) => { + return val; + }).catch((err) => { + console.log(err); + return defData; + }); +} + + +export async function UpdateIRSyncStatus(props, index, storeData = {}, TempSessionId, TableName1, TableName2, menuEnable = false, menuData = {}) { + console.log("UpdateIRSyncStatus", TempSessionId, TableName1, menuEnable); + let d1 = new Date(); + let d2 = moment(d1).format('MM/DD/YYYY'); + let { StoreId, VisitDate } = storeData; + + let IR_Creds = props.IR_Creds != null && props.IR_Creds != "" ? JSON.parse(props.IR_Creds) : []; + let IR_CredsObj = IR_Creds.length > 0 ? IR_Creds[0] : {}; + + + let newStdata = storeData; + if (IR_CredsObj.UseStoreCode != 1) { + newStdata.StoreCode = newStdata.StoreId; + } + let obj = { "StoreData": newStdata }; + let st1 = JSON.stringify(obj); + + let SyncStatus = await IRLogin.CheckIRSessionSync(st1, TempSessionId);//IRSyncStatus.NOT_SYNCED;// + + console.log("SyncStatus for StoreId,TempSessionId (", StoreId, TempSessionId, ") is :" + SyncStatus, typeof SyncStatus) + // only "Synced" or "Failed" or "Syncing" + let StatusToUpdate = "Failed", UploadStatus = 0; + if (SyncStatus == IRSyncStatus.SYNCED) { + StatusToUpdate = "Synced"; + UploadStatus = 1; + } + else if (SyncStatus == IRSyncStatus.SYNCING) { + StatusToUpdate = "Syncing"; + UploadStatus = 0; + } + else if (typeof SyncStatus != "string") { + StatusToUpdate = "Failed"; + UploadStatus = 0; + } + else if (SyncStatus != null && SyncStatus != '' && SyncStatus.includes("No processed image for given session")) { + console.log("update sync status to 1 ") + StatusToUpdate = "Synced"; + UploadStatus = 1; + } + + let defData = { 'isUpdated': false, 'Status': StatusToUpdate }; + + console.log("StatusToUpdate:", StatusToUpdate, UploadStatus); + return new Promise(async (resolve, reject) => { + db.transaction(async function (txn) { + let q = `Update ${TableName1} set SYNC_STATUS='${StatusToUpdate}',UPLOAD_STATUS='${UploadStatus}' where STORE_ID='${StoreId}' and VISIT_DATE='${VisitDate}' and TEMP_SESSION_ID='${TempSessionId}' `; + q += menuEnable ? ` and MENU_ID='${menuData.MenuId}' ` : ''; + console.log("q to update status :", q); + await txn.executeSql(q, [], async function (txn2, txnres) { + console.log("updated status"); + defData['isUpdated'] = true; + resolve(defData); + }, function (txnE, txnerr) { console.log(txnerr); resolve(defData); },); + + }); + + }).catch((err) => { + console.log("err:", err); + return defData; + }); + + +} + + +export async function uploadAllImages(props, storeData, allfiles = [], tbname, loc, UpdateUploadCountLocal = () => { }, previousDayUpload = false) { + let d1 = new Date(); + let d2 = moment(d1).format('MM/DD/YYYY'); + let uploadCount = 0; + const url = (props.imageUploadUrl || URL_IMAGE) + getMethodName(METHODS.UPLOADIMAGES_METHOD); + console.log("needToCheck", storeData); + var isAllUploaded = false; + if (allfiles.length > 0) { + return await Promise.all( + allfiles.map(async (file, i) => { + let index = i; + let actualfilepath = 'file://' + file.uri; + let isExists = await RNFS.exists(actualfilepath).then((res) => { return res; }); + console.log('isExists file', isExists, file.uri); + if (isExists == false) { + uploadCount++; + UpdateUploadCountLocal(uploadCount); + if (index == allfiles.length - 1) { + if (uploadCount == allfiles.length) { + if (tbname == '') { + // do nothing + } + else if (tbname == 'Master_Distributor') { + console.log('upload U 2'); + await uploadDBStatus(props, storeData, 'U', tbname, loc); + } + else { + console.log('upload U 1'); + await uploadStoreStatus(props, storeData, 'U', tbname, previousDayUpload); + } + + isAllUploaded = true; + } + } + return true; + } + let postData = new FormData(); + console.log('minm--', mime) + postData.append('file', { + uri: actualfilepath, + // type: mime?.getType(actualfilepath) || file.type, + type: file.type, + name: file.name, + }); + + postData.append('Foldername', file.folderName); + postData.append('Path', d2); + + let isImageUploaded = await UploadImagesWithoutWait(postData, url); + if (isImageUploaded == true) { + console.log('isExists file uploaded', isExists, uploadCount, index, allfiles.length - 1); + uploadCount++; + UpdateUploadCountLocal(uploadCount); + await RNFS.unlink(actualfilepath); + } else { + console.log('isExists file not u:', isExists, actualfilepath); + } + + // if(index==allfiles.length-1){} + + if (uploadCount == allfiles.length) { + console.log('all images uploaded', allfiles.length, uploadCount); + + // if(tbname==''){ + // // do nothing + // } + // else if(tbname=='Master_Distributor'){ + // console.log('upload U 3'); + // await uploadDBStatus(props,storeData,'U',tbname,loc); + // } + // else{ + // console.log('upload U 4'); + // await uploadStoreStatus(props,storeData,'U',tbname,previousDayUpload); + // } + isAllUploaded = true; + } + + return (isImageUploaded || false); + }) + ).then(async (val) => { + console.log("uploadListStatus-------", val); + let rs = val?.length > 0 ? val : [] + let uploadListStatus = true, stutusVal = false; + rs?.map((item) => item == false && (uploadListStatus = false)) + console.log("uploadListStatus-------1", isAllUploaded && uploadListStatus, uploadListStatus, isAllUploaded); + + if (isAllUploaded && uploadListStatus) { + if (tbname == '') { + // do nothing + } + else if (tbname == 'Master_Distributor') { + console.log('upload U 3'); + stutusVal = await uploadDBStatus(props, storeData, 'U', tbname, loc); + } + else { + console.log('upload U 4'); + stutusVal = await uploadStoreStatus(props, storeData, 'U', tbname, previousDayUpload); + } + } + return stutusVal && isAllUploaded && uploadListStatus; + }) + .catch((err) => { + console.log(err); + return false; + }) + + } else { + let isupdatedU = false; + if (tbname == '') { + // do nothing + } + else if (tbname == 'Master_Distributor') { + console.log('upload U 5'); + isupdatedU = await uploadDBStatus(props, storeData, 'U', tbname, loc); + } + else { + console.log("needToCheck1", storeData); + console.log('upload U 6'); + isupdatedU = await uploadStoreStatus(props, storeData, 'U', tbname, previousDayUpload); + } + console.log('on no files found to upload , isupdated::', isupdatedU); + return true; + } +} + +export async function uploadAll_VisImages(props, allfiles = []) { + let d1 = new Date(); + let d2 = moment(d1).format('MM/DD/YYYY'); + let uploadCount = 0; + const url = (props.imageUploadUrl || URL_IMAGE) + getMethodName(METHODS.UPLOADIMAGES_METHOD); + + var isAllUploaded = false; + if (allfiles.length > 0) { + return await Promise.all( + allfiles.map(async (file, i) => { + let index = i; + let actualfilepath = 'file://' + file.uri; + let isExists = await RNFS.exists(actualfilepath).then((res) => { return res; }); + console.log('isExists file', isExists); + if (isExists == false) { + uploadCount++; + if (index == allfiles.length - 1) { + if (uploadCount == allfiles.length) { + isAllUploaded = true; + } + } + return true; + } + let postData = new FormData(); + postData.append('file', { + uri: actualfilepath, + // type: mime?.getType(actualfilepath) || file.type, + type: file.type, + name: file.name, + }); + + postData.append('Foldername', file.folderName); + postData.append('Path', d2); + + let isImageUploaded = await UploadImagesWithoutWait(postData, url); + if (isImageUploaded == true) { + console.log('isExists file uploaded', isExists); + uploadCount++; + await RNFS.unlink(actualfilepath); + } else { + console.log('isExists file not u:', isExists, actualfilepath); + } + + if (index == allfiles.length - 1) { + console.log('all images uploaded', allfiles.length, uploadCount); + if (uploadCount == allfiles.length) { + + isAllUploaded = true; + } + } + + return (isImageUploaded || false); + }) + ).then((val) => { + console.log(val); + return isAllUploaded; + }) + .catch((err) => { + console.log(err); + return false; + }) + + } + else { + return true; + } +} + + +export async function uploadAllVisitors(props, allVisitors, previousDayUpload = false) { + console.log('uploadAllVisitors'); + return await Promise.all( + allVisitors.map(async (item, index) => { + let qtns = await getVisitorLoginQA(props, item); + item['feedbackData'] = qtns; + let isuploaded = await uploadVisitor(props, item, previousDayUpload); + if (isuploaded == true) { + return true; + } + return false + }) + ).then((val) => { + if (val.indexOf(false) >= 0) return false; + else return true; + }).catch((err) => { + return []; + }); +} + +export async function getVisitorLoginQA(props, item) { + let questionData = []; + const d1 = new Date(); + const d2 = moment(d1).format('MM/DD/YYYY'); + + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + let selectlist = ` DISTINCT T.CategoryId,T.Category,T.Question,T.QuestionId, T2.*`; + let join2 = `Inner Join ${AppTables.VISITOR_LOGIN_FEEDBACK} T2 on T.QuestionId=T2.QUESTION_ID and T.CategoryId=T2.CATEGORY_ID`; + let q3 = ` SELECT ${selectlist} FROM Master_VisitorLoginQuestion T ${join2} where T2.EMP_CODE='${item.EMP_CODE}' and T2.VISIT_DATE='${d2}' `; + + console.log("global get visitor qtns to upload q:", q3) + txn.executeSql(q3, [], async function (txn2, txnres) { + console.log('get qtns to upload count:', txnres.rows.length); + if (txnres.rows.length > 0) { + for (var i = 0; i < txnres.rows.length; i++) { + let data = txnres.rows.item(i); + let { CATEGORY_ID, QUESTION_ID, QUESTION_TYPE, ANSWER, ANSWER_ID, MULTI_OPTIONS_IDS, IMAGE1, IMAGE2 } = data; + let obj1 = {}; + + obj1['CategoryId'] = CATEGORY_ID; + obj1['QuestionId'] = QUESTION_ID; + obj1['QuestionType'] = QUESTION_TYPE; + obj1['Answer'] = ANSWER; + obj1['AnswerId'] = ANSWER_ID; + obj1['MultiAnswerId'] = MULTI_OPTIONS_IDS != null && MULTI_OPTIONS_IDS != 'undefined' ? MULTI_OPTIONS_IDS : ''; + obj1['AnswerImage1'] = IMAGE1; + obj1['AnswerImage2'] = IMAGE2; + obj1['UserId'] = props.UserId; + + questionData.push(obj1) + + if (i == txnres.rows.length - 1) { + resolve(questionData); + } + } + } + else { + resolve(questionData); + } + + }, function (txnE, txnerr) { console.log(txnerr); return questionData; }); + + }); + + }).then((res) => { + return res; + }).catch((err) => { console.log(err); return questionData; }) + + +} + +export async function uploadVisitor(props, item, previousDayUpload = false) { + let d2 = moment().format('MM/DD/YYYY'); + const url = props.baseurl + getMethodName(METHODS.UPLOADJSON_METHOD); + let { IN_TIME_IMAGE, OUT_TIME_IMAGE } = item; + let obj = { + "MID": 0, + "CreatedBy": props.UserId, + "EmpId": item.EMP_ID, + "VisitDate": d2, + "InTimeImage": item.IN_TIME_IMAGE, + "OutTimeImage": item.OUT_TIME_IMAGE, + "InTime": item.IN_TIME, + "OutTime": item.OUT_TIME, + "feedbackData": item.feedbackData, + } + let postData = { + "MID": 0, + "Keys": "Visitor_Login", + "JsonData": JSON.stringify(obj), + "UserId": props.UserId, + }; + let INIMAGE = '', OUTIMAGE = ''; + if (IN_TIME_IMAGE != '' && IN_TIME_IMAGE != null) { + let imgPath = 'file://' + common_ImagePath + IN_TIME_IMAGE; + let file = { + uri: imgPath, + type: 'image/jpeg', + name: IN_TIME_IMAGE, + filetype: 'image', + folderName: 'VisitorLogin', + } + INIMAGE = file; + } + + if (OUT_TIME_IMAGE != '' && OUT_TIME_IMAGE != null) { + let imgPath = 'file://' + common_ImagePath + OUT_TIME_IMAGE; + let file = { + uri: imgPath, + type: 'image/jpeg', + name: OUT_TIME_IMAGE, + filetype: 'image', + folderName: 'VisitorLogin', + } + OUTIMAGE = file; + } + + + return await UploadData2(url, postData) + .then(async (res) => { + console.log('res:', res); + if (res.UploadJsonResult != null && res.UploadJsonResult == 'Success') { + + console.log('props.imageUploadUrl:', props.imageUploadUrl); + const url2 = (props.imageUploadUrl || URL_IMAGE) + getMethodName(METHODS.UPLOADIMAGES_METHOD); + let allImageUploaded = true; + if (INIMAGE != '') { + let isExists = await RNFS.exists(INIMAGE.uri).then((res) => { return res; }); + console.log('isExists file', isExists); + if (isExists == true) { + let fileData = getImagePOSTData(INIMAGE, d2); + let isImageUploaded = await UploadImagesWithoutWait(fileData, url2); + if (isImageUploaded == false) { + allImageUploaded = false; + } + } + } + if (OUTIMAGE != '') { + let isExists = await RNFS.exists(OUTIMAGE.uri).then((res) => { return res; }); + console.log('isExists file', isExists); + if (isExists == true) { + let fileData = getImagePOSTData(OUTIMAGE, d2); + let isImageUploaded = await UploadImagesWithoutWait(fileData, url2); + if (isImageUploaded == false) { + allImageUploaded = false; + } + } + } + if (allImageUploaded == true) { + console.log('all Visitor image uploaded'); + return await updateVLUploadStatus(item, previousDayUpload); + } + else { + return false; + } + + } + }) + .catch((err) => { + console.log(err); return false; + }); + +} + +export function getImagePOSTData(file, d2) { + let actualfilepath = file.uri; + let fileData = new FormData(); + fileData.append('file', { + uri: actualfilepath, + // type: mime?.getType(actualfilepath)|| file.Type, + type: file.type, + name: file.name, + }); + + fileData.append('Foldername', file.folderName); + fileData.append('Path', d2); + return fileData; +} + +async function updateVLUploadStatus(item, previousDayUpload = false) { + let d2 = moment().format('MM/DD/YYYY'); + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + let q = `Update ${AppTables.VISITOR_LOGIN} SET UPLOADSTATUS='U' WHERE EMP_CODE='${item.EMP_CODE}' `; + if (!previousDayUpload) { + q += ` AND VISIT_DATE='${d2}'`; + } + await txn.executeSql(q, [], async function (txn2, txnres) { + console.log('Visitor Status Updated'); + resolve(true); + }, function (txnE, txnerr) { console.log(txnerr); resolve(false); },); + + }); + }).then((val) => { + return val; + }).catch((err) => { + console.log(err); + return false; + }); +} diff --git a/PerformicsSrc/src/controller/functions.js b/PerformicsSrc/src/controller/functions.js new file mode 100644 index 0000000..535f1fc --- /dev/null +++ b/PerformicsSrc/src/controller/functions.js @@ -0,0 +1,2739 @@ +import React from 'react'; +import { dbbackupFolder, fixedurl, baseurl, version, db, OQAD_TimeConst, ImageFolderPath, common_ImagePath, KPIFolders, defUploadFolder, VisitorImageFolderPath, FolderForREC, StoreCheckListImagePath, TrainingContentFolderPath, NonProgramLabel_def, StoreSearch_def, ContractFormImagePath, ServerDTurl, CoverageImagePath, visiCoolerImgPath, VisitorLoginImageFolderPath, AddStoreImagePath, URL_IMAGE, kycImagePath, LAST_ServerAPI_CALL, DevType,OLA_MAP_KEY,API_TIMEOUT, GroomingImagePath} from '../constants/constants'; +// import Marker, { ImageFormat, Position } from 'react-native-image-marker'; +import { manipulateAsync, SaveFormat } from 'react-native-photo-manipulator'; +import moment from 'moment'; +import { notify } from '../components/notify'; +import { AppTables, Table_Structure } from '../constants/tableConstants'; +import ImageResizer from 'react-native-image-resizer'; +import { get_item } from '../components/localStorage'; +import { Q_ALLScreenName, Q_MenuList } from '../constants/ConstantQueries'; +import * as RNFS from 'react-native-fs'; +import { METHODS, getMethodName } from '../constants/methodNames'; +import ImageMarkText from '../components/ImageMarkText'; +import { getTimeZone } from "react-native-localize"; +import NOTIFICATIONAPISERVICES from '../NotificationApiService'; +///jp +import AsyncStorage from '@react-native-async-storage/async-storage'; +import NetInfo from '@react-native-community/netinfo'; +import { Dimensions, Platform, Linking, PermissionsAndroid } from 'react-native'; +import Geolocation from "react-native-geolocation-service"; +import SendIntentAndroid from 'react-native-send-intent'; +import { Alert } from 'react-native'; +import RNExitApp from 'react-native-exit-app'; +import Contacts from 'react-native-contacts'; + +export async function getProjectData(pid) { + let post_data = { "projectCode": pid, "appName": "Merchandiser", "deviceType": Platform.OS == "ios" ? "iOS" : "Android", "appVariant": DevType } + const raw = JSON.stringify({ + "Params": + post_data + + }); + console.log("jsonPay", raw,fixedurl) + return await fetch(fixedurl, { + method: 'post', + headers: { + 'Content-Type': 'application/json', + }, + body: raw, + }).then(response => { + return response.json(); + }).then(res => { + console.log("project_data_res_info", res); + let appdata = res.GetAppSettingWithDeviceInfo || []; + let appdata1 = appdata.length > 0 ? appdata[0] : {}; + appdata1.success = true; + return { + success: true, + rawData: raw, + responseData: appdata1, + }; + }).catch(err => { + console.log('getProjectData error', err); + return { + success: false, + rawData: raw, + }; + }); +} + +// getServerDT function for matching and validating the local date time of users’ device with server date time. +export async function getServerDT() { + const timezone = await getTimeZone(); + console.log('timezone from location => ', timezone) + // const apiUrl = `https://worldtimeapi.org/api/timezone/${timezone}`; + const apiUrl = `https://timeapi.io/api/Time/current/zone?timeZone=${timezone}` + try { + console.log("apiUrl--------", apiUrl) + const response = await fetch(apiUrl); + + if (!response.ok) { + throw new Error('Network response was not ok'); + } + + const res = await response.json(); + // Extract and format date and time + const datetime = res?.dateTime ? new Date(res?.dateTime) : moment(new date()).format('HH:mm:ss'); + const formattedDate = res?.date; + // const formattedDate = `${('0' + (datetime.getMonth() + 1)).slice(-2)}/${('0' + datetime.getDate()).slice(-2)}/${datetime.getFullYear()}`; + // const formattedTime = `${('0' + datetime.getHours()).slice(-2)}:${('0' + datetime.getMinutes()).slice(-2)}:${('0' + datetime.getSeconds()).slice(-2)}`; + const formattedTime = res?.dateTime ? moment(res?.dateTime).format("HH:mm:ss") : datetime + let CheckTime = `${formattedDate} ${formattedTime}` + const finalData = { ServerDate: formattedDate, ServerTime: formattedTime, CheckTime: CheckTime } + console.log('formate date and time => ', finalData) + return finalData; + } catch (err) { + console.log('getServerDT error', err); + return await getFallbackTime(); + } +} + +async function getFallbackTime() { + const tz_offset = new Date().getTimezoneOffset(); + const offset = tz_offset < 0 ? Math.abs(tz_offset) : -Math.abs(tz_offset); + + console.log("offset:", offset); + try { + const response = await fetch(ServerDTurl, { + method: 'post', + headers: { + Accept: 'application/json', + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ "offset": offset }), + }); + + if (!response.ok) { + throw new Error('Network response was not ok'); + } + + const res = await response.json(); + console.log("project datares", res); + const appdata = res.GetServerDateTime_INTL || []; + const appdata1 = appdata.length > 0 ? appdata[0] : {}; + console.log('appdata1 => ', appdata1) + return appdata1; + } catch (err) { + console.log('getFallbackTime error', err); + return { success: false, error: err }; + } +} + +export async function changepassword(url, indata) { + + const data = JSON.stringify({ + "UserName": indata?.un, + "OldPassword": indata?.oldp, + "NewPassword": indata?.newp + }); + + console.log(data, "confirm password data."); + + return await fetch(url, { + method: 'post', + headers: { + 'Accept': 'application/json', + 'Content-Type': 'application/json', + }, + body: data, + }) + .then(response => { + return response.json(); + }) + .then(res => { + let appdata = res || ''; + appdata.success = true; + return appdata; + }) + .catch(err => { + console.log('password change error', err); + return { success: false }; + }); +} + +export async function getmobileverifyotp(url, indata) { + + const data = JSON.stringify({ + "mobileno": indata?.mobileno, + "projectcode": indata?.projectcode + }); + + console.log(data, url, "send otppp mobile surveyyy") + + return await fetch(url, { + method: 'post', + headers: { + 'Accept': 'application/json', + 'Content-Type': 'application/json', + }, + body: data, + }) + .then(response => { + return response.json(); + }) + .then(res => { + let appdata = res?.CheckUserAndSendOTP || {}; + if (appdata) { + return appdata; + } else { + return { ...appdata, Status: true }; // Or any default status you prefer + } + }) + .catch(err => { + console.log('get verify mobile otp error', err); + return { Status: false, error: err, networkErr: networkErr }; + }); +} + +export async function verifymobileotp(url, indata) { + + const data = JSON.stringify({ + "mobileno": indata?.mobileno, + "otp": indata?.otp + }); + + return await fetch(url, { + method: 'post', + headers: { + 'Accept': 'application/json', + 'Content-Type': 'application/json', + }, + body: data, + }) + .then(response => { + return response.json(); + }) + .then(res => { + let appdata = res?.otpauthentication || {}; + if (appdata) { + return appdata; + } else { + return { ...appdata, Status: true }; // Or any default status you prefer + } + }) + .catch(err => { + console.log('verify mobile otp error', err); + return { success: false }; + }); +} + +export async function getforgotpasswordotp(url, indata) { + + const data = JSON.stringify({ + "Username": indata?.un + }); + + console.log(data, url, "send otppp") + + return await fetch(url, { + method: 'post', + headers: { + 'Accept': 'application/json', + 'Content-Type': 'application/json', + }, + body: data, + }) + .then(response => { + return response.json(); + }) + .then(res => { + let appdata = res?.OTPSendForForgetPasswordResult || {}; + if (appdata.Status === true || appdata.Status === false) { + return appdata; + } else { + return { ...appdata, Status: true }; // Or any default status you prefer + } + }) + .catch(err => { + console.log('get otp error', err); + return { Status: false, error: err, networkErr: networkErr }; + }); +} + +export async function verifyotp(url, indata) { + + const data = JSON.stringify({ + "Username": indata?.un, + "OTP": indata?.otp + }); + + return await fetch(url, { + method: 'post', + headers: { + 'Accept': 'application/json', + 'Content-Type': 'application/json', + }, + body: data, + }) + .then(response => { + return response.json(); + }) + .then(res => { + let appdata = res?.OTPVerifyResult || {}; + if (appdata.Status === true || appdata.Status === false) { + return appdata; + } else { + return { ...appdata, Status: true }; // Or any default status you prefer + } + }) + .catch(err => { + console.log('verify otp error', err); + return { success: false }; + }); +} + +export async function createnewpassword(url, indata) { + + const data = JSON.stringify({ + "Username": indata?.un, + "Password": indata?.newp + }); + + return await fetch(url, { + method: 'post', + headers: { + 'Accept': 'application/json', + 'Content-Type': 'application/json', + }, + body: data, + }) + .then(response => { + return response.json(); + }) + .then(res => { + let appdata = res?.NewPasswordResult || {}; + if (appdata.Status === true || appdata.Status === false) { + return appdata; + } else { + return { ...appdata, Status: true }; // Or any default status you prefer + } + }) + .catch(err => { + console.log('create new password error', err); + return { success: false }; + }); +} + + +// export async function getNotificationList() { +// try { +// let projectInfo = await get_item('projectInfo'); +// let projectDetails = projectInfo != null ? JSON.parse(projectInfo) : {}; + +// let loginInfo = await get_item('loginInfo'); +// const loginDetails = JSON.parse(loginInfo); +// const data = { UserName: loginDetails?.UserId, ProjectCode: projectDetails?.ProjectCode }; + +// const resdata = await NOTIFICATIONAPISERVICES.getnotificationlist.post(data); + +// console.log('resDataaa', resdata); + +// if (resdata?.GetNotificationListofUser) { +// // If GetNotificationListofUser exists, process it +// const notificationList = resdata.GetNotificationListofUser; + +// if (notificationList.Data && Array.isArray(notificationList.Data)) { +// // If Data is an array, handle it accordingly +// console.log('Notification List:', notificationList); +// return { ...notificationList, success: true }; +// } else { +// // If Data is not an array or empty, return an empty result +// console.log('Empty or invalid data in Notification List:', notificationList); +// return { ...notificationList, success: false }; +// } +// } else { +// // If GetNotificationListofUser does not exist, handle the error +// console.log('Invalid response format:', resdata); +// return { success: false, error: 'Invalid response format', data: resdata }; +// } +// } catch (err) { +// console.log('notification error', err); +// return { success: false, error: err, networkErr: true }; +// } +// } + +export function AlertForServerDT(currDate, d2) { + Alert.alert( + "", + `Your Device Date and Time is not correct. Please correct and restart App. + + Server Date - ${currDate} + Device Date - ${d2} + `, + [ + { + // text: "Cancel", + // onPress: () => {}, + // style: "cancel" + }, + { + text: "OK", onPress: async () => { + RNExitApp.exitApp(); + // setHasUnsavedChanges(false); + // BgUnsavedChanges(false) + // await clear_item('storeData') + // props.navigation.dispatch(e.data.action); + } + } + ] + ); +} + +export async function login(url, indata) { + const pdata = JSON.stringify({ + UserName: indata.un, + Password: indata.pass, + Intime: indata.Intime, + Latitude: indata.lat, + Longitude: indata.lng, + Appversion: version, + Attmode: '0', + Networkstatus: '0', + Manufacturer: indata.manufacturer, + ModelNumber: indata.model, + OSVersion: indata.os, + IMEINumber1: indata.imeiNo1, + IMEINumber2: indata.imeiNo2, + }); + + console.log(pdata); + + + return await fetch(url, { + method: 'post', + headers: { + 'Accept': 'application/json', + 'Content-Type': 'application/json', + }, + body: pdata, + }) + .then(response => { + return response.json(); + }) + .then(res => { + try { + var resdata = JSON.parse(res); + } + catch (err) { + console.log('login error', err + "----pdat-----"+pdata); + var resdata = res; + } + if (resdata.LOGIN != null) { + resdata = resdata.LOGIN.length > 0 ? resdata.LOGIN[0] : {}; + resdata.success = true; + } else if (Array.isArray(resdata) && resdata.length > 0 && resdata[0].Result != null) { + resdata = { success: false, error: 'Invalid username or password (' + JSON.stringify(resdata) + ')' }; + } else { + resdata = { success: false, error: resdata }; + } + + return resdata; + }) + .catch(err => { + console.log('login error', err + "----pdat-----"+pdata); + let networkErr = true; + return { success: false, error: err, networkErr: networkErr }; + }); +} + +export async function CreateDirKPIimg() { + + console.log('CreateDirKPIimg:'); + let allKPIsList = await getScreenNameList(); + await RNFS.mkdir(ImageFolderPath); + await RNFS.mkdir(VisitorImageFolderPath); + await RNFS.mkdir(VisitorLoginImageFolderPath); + await RNFS.mkdir(VisitorImageFolderPath + 'Recordings/'); + await RNFS.mkdir(StoreCheckListImagePath); + await RNFS.mkdir(TrainingContentFolderPath); + await RNFS.mkdir(ContractFormImagePath); + await RNFS.mkdir(CoverageImagePath); + await RNFS.mkdir(AddStoreImagePath); + await RNFS.mkdir(visiCoolerImgPath); + await RNFS.mkdir(kycImagePath); + await RNFS.mkdir(dbbackupFolder); + await RNFS.mkdir(GroomingImagePath); + await Promise.all( + allKPIsList.map(async (name, index) => { + const url_dir = ImageFolderPath + `${name.ScreenName}/`; + await RNFS.mkdir(url_dir); + await RNFS.mkdir(url_dir + 'Recordings/'); + }) + ).then(() => { + console.log("Directory is created successfully") + return + }); + + +} + +async function getScreenNameList() { + + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + let q = Q_ALLScreenName(); + await txn.executeSql(q, [], async function (txn2, txnres) { + if (txnres.rows.length > 0) { + let arr = []; + for (var i = 0; i < txnres.rows.length; i++) { + let data = txnres.rows.item(i); + arr.push(data); + if (i == (txnres.rows.length - 1)) { + resolve(arr); + } + } + } + else { + resolve([]) + } + }, function (txnerr) { console.log(txnerr); resolve([]); },); + }); + }).then((val) => { + return val; + }).catch((err) => { + console.log('') + return [] + }) +} + +export async function getAllFolderImages() { + + let mainImgFolder = ImageFolderPath + // let galleryImages=await getAllGalleryImages(); + let allKPIfiles = await getAllOldImages(); + const SubFolders = await RNFS.readDir(mainImgFolder); + + + return new Promise.all( + SubFolders.map(async sfolder => { + // console.log("sfolder.name",sfolder.name) + if (sfolder.isDirectory()) { + let KPIName = sfolder.name + + let subFolPath = sfolder.path; + let Up_Foldername = KPIFolders[KPIName] != null && KPIFolders[KPIName] != '' ? KPIFolders[KPIName] : defUploadFolder; + + const ImgFiles = await RNFS.readDir(subFolPath); + return new Promise.all( + ImgFiles.map(async sfile => { + if (sfile.isFile() && (sfile.name.includes('jpg') || sfile.name.includes('jpeg') || sfile.name.includes('png'))) { + + let file = { + uri: sfile.path, + type: 'image/jpeg', + name: sfile.name, + filetype: 'image', + folderName: Up_Foldername, + } + allKPIfiles.push(file); + return file; + } + else if (sfile.isDirectory() && sfile.name == 'Recordings') { + let recordingsPath = sfile.path; + let recordingFiles = await RNFS.readDir(recordingsPath); + let VoiceUp_FolderPath = FolderForREC[KPIName]; + return new Promise.all( + recordingFiles.map(async rfile => { + + if (rfile.isFile() && (rfile.name.includes('m4a') || rfile.name.includes('mp3'))) { + + let file = { + uri: rfile.path, + type: (Platform.OS == 'ios' ? 'audio/m4a' : 'audio/mp3'), + name: rfile.name, + filetype: 'audio', + folderName: VoiceUp_FolderPath, + } + allKPIfiles.push(file); + return file; + } + else { + return ''; + } + + }) + ).then((val2) => { + return val2; + }); + } + else { + return ''; + } + }) + ).then((val1) => { + return val1; + }) + } else { + return ''; + } + }) + ) + .then((val) => { + // console.log('AllImages:',allKPIfiles.length,allKPIfiles); + return allKPIfiles; + }).catch((Err) => { + console.log('Err:', Err); + return []; + }) + +} + +export async function getAllFileForAFolder(path, Up_Foldername, KPIName = '') { + + let subFolPath = path; + const ImgFiles = await RNFS.readDir(subFolPath); + Up_Foldername = Up_Foldername != null && Up_Foldername != '' ? Up_Foldername : defUploadFolder; + + console.log("ImgFiles in ", subFolPath, ' are:', ImgFiles.length); + let allKPIfiles = []; + return new Promise.all( + ImgFiles.map(async sfile => { + if (sfile.isFile() && (sfile.name.includes('jpg') || sfile.name.includes('jpeg') || sfile.name.includes('png'))) { + + let file = { + uri: sfile.path, + type: 'image/jpeg', + name: sfile.name, + filetype: 'image', + folderName: Up_Foldername, + } + allKPIfiles.push(file); + return file; + } + else if (sfile.isDirectory() && sfile.name == 'Recordings') { + let recordingsPath = sfile.path; + let recordingFiles = await RNFS.readDir(recordingsPath); + let VoiceUp_FolderPath = KPIName != null && KPIName != '' ? FolderForREC[KPIName] : defUploadFolder; + return new Promise.all( + recordingFiles.map(async rfile => { + + if (rfile.isFile() && (rfile.name.includes('m4a') || rfile.name.includes('mp3'))) { + + let file = { + uri: rfile.path, + type: (Platform.OS == 'ios' ? 'audio/m4a' : 'audio/mp3'), + name: rfile.name, + filetype: 'audio', + folderName: VoiceUp_FolderPath, + } + allKPIfiles.push(file); + return file; + } + else { + return ''; + } + + }) + ).then((val2) => { + return val2; + }); + } + else { + return ''; + } + }) + ).then((val1) => { + console.log('getAllFileForAFolder', val1); + return allKPIfiles; + }).catch((err) => { + console.log('error in getAllFileForAFolder', err); + return allKPIfiles; + }) + +} + +async function getFolderNameFromFile(filename) { + let fn = '' + if (filename.includes('_CEImg-')) { + fn = KPIFolders['CATEXEONEAPP']; + } + else if (filename.includes('_SurveyImg_')) { + fn = KPIFolders['SURVEY']; + } + else { + fn = defUploadFolder; + } + return fn; +} + +async function getAllOldImages() { + let pathOldFolder = common_ImagePath; + const AllImages = await RNFS.readDir(pathOldFolder); + console.log('getAllOldImages', pathOldFolder, AllImages.length) + let allKPIfiles = []; + return new Promise.all( + AllImages.map(async sfile => { + if (sfile.name.includes('jpg') || sfile.name.includes('jpeg') || sfile.name.includes('png')) { + let Up_Foldername = await getFolderNameFromFile(sfile.name); + Up_Foldername = Up_Foldername != '' && Up_Foldername != null ? Up_Foldername : defUploadFolder; + console.log('Up_Foldername', Up_Foldername); + let file = { + uri: sfile.path, + type: 'image/jpeg', + name: sfile.name, + filetype: 'image', + folderName: Up_Foldername, + } + allKPIfiles.push(file); + return file; + } + else { + return ''; + } + }) + ).then((val) => { + console.log('oldimages:', allKPIfiles.length); + return allKPIfiles; + }).catch((Err) => { + console.log('Err:', Err); + return []; + }) + +} + +async function getAllGalleryImages() { + let pathOldFolder = RNFS.DownloadDirectoryPath; + const AllImages = await RNFS.readDir(pathOldFolder); + console.log('getAllGalleryImages', pathOldFolder, AllImages.length) + let allKPIfiles = []; + return new Promise.all( + AllImages.map(async sfile => { + if (sfile.isFile() && sfile.name.includes('_SurveyImg_')) { + let Up_Foldername = KPIFolders['SURVEY']; + + let file = { + uri: sfile.uri, + type: 'image/jpeg', + name: sfile.name, + filetype: 'image', + folderName: Up_Foldername, + } + allKPIfiles.push(file); + return file; + } + else { + return ''; + } + + }) + ).then((val) => { + console.log('AllGalleryImages:', allKPIfiles.length, allKPIfiles[0]); + return allKPIfiles; + }).catch((Err) => { + console.log('Err:', Err); + return []; + }) + +} + +export async function getDownloadJson(url, indata) { + let postdata = { + Downloadtype: indata.Downloadtype, + Username: indata.username, + Param1: indata.empid, + Param2: Platform.OS === "ios" ? "iOS" : "Android", + }; + console.log('📡 getDownloadJson postdata:', url,postdata); + // --- Timeout setup --- + const controller = new AbortController(); + const timeoutId = setTimeout(() => controller.abort(), API_TIMEOUT); + // --- Original fetch chain with timeout --- + return await fetch(url, { + method: 'POST', + headers: { + Accept: 'application/json', + 'Content-Type': 'application/json', + }, + body: JSON.stringify(postdata), + signal: controller.signal, // attach abort controller + }) + .then(response => { + clearTimeout(timeoutId); + return response.json(); + }) + .then((res) => { + try { + // Sometimes API already returns JSON; sometimes it’s a stringified JSON + let resd = typeof res === 'object' ? res : JSON.parse(res); + return resd; + } catch (e) { + console.log('⚠️ JSON parse error:', e.message); + return { success: false }; + } + }) + .catch(err => { + clearTimeout(timeoutId); + if (err.name === 'AbortError') { + console.log(`⏰ getDownloadJson timed out after ${API_TIMEOUT / 1000}s`); + } else { + console.log('❌ getDownloadJson error:', err.message || err); + } + + return { success: false }; + }); +} + +export async function getDownloadJson1(url, postdata) { + // Setup AbortController for timeout + const controller = new AbortController(); + const timeoutId = setTimeout(() => controller.abort(), API_TIMEOUT); + return await fetch(url, { + method: 'POST', + headers: { + Accept: 'application/json', + 'Content-Type': 'application/json', + }, + body: JSON.stringify(postdata), + signal: controller.signal, // attach timeout controller + }) + .then(response => { + clearTimeout(timeoutId); + return response.json(); + }) + .then((res) => { + // console.log('res', res); + let resd; + try { + if (url.includes('api1.parinaam.in')) { + resd = res; // already JSON + } else { + resd = typeof res === 'object' ? res : JSON.parse(res); + } + } catch (e) { + console.log('⚠️ JSON parse error in getDownloadJson1:', e.message); + resd = { success: false }; + } + + return resd; + }) + .catch(err => { + clearTimeout(timeoutId); + if (err.name === 'AbortError') { + console.log(`⏰ getDownloadJson1 timed out after ${API_TIMEOUT / 1000}s`); + } else { + console.log('❌ getDownloadJson1 error:', err.message || err); + } + // Keep same return type (return error itself or object) + return { success: false, error: err.name === 'AbortError' ? 'Timeout' : err.message }; + }); +} + + + + +export async function UploadData(url, indata) { // default 30 seconds + // Create AbortController for timeout + const controller = new AbortController(); + const timeoutId = setTimeout(() => controller.abort(), API_TIMEOUT); + + return await fetch(url, { + method: 'POST', + headers: { + Accept: 'application/json', + 'Content-Type': 'application/json', + }, + body: JSON.stringify(indata), + signal: controller.signal, // attach signal for timeout + }) + .then(response => { + clearTimeout(timeoutId); + return response.json(); + }) + .then((res) => { + clearTimeout(timeoutId); + try { + // Handle both already-parsed and stringified JSON + let resd = typeof res === 'object' ? res : JSON.parse(res); + return resd; + } catch (e) { + console.log('⚠️ UploadData JSON parse error:', e.message); + return { success: false, error: 'Invalid JSON' }; + } + }) + .catch(err => { + clearTimeout(timeoutId); + + if (err.name === 'AbortError') { + console.log(`⏰ UploadData timed out after ${API_TIMEOUT / 1000}s`); + } else { + console.log('❌ UploadData error:', err.message || err); + } + + return { success: false, error: err.name === 'AbortError' ? 'Timeout' : err.message }; + }); +} + +export async function UploadData2(url, indata) { // default 30 seconds + // Setup AbortController for timeout + const controller = new AbortController(); + const timeoutId = setTimeout(() => controller.abort(), API_TIMEOUT); + + return await fetch(url, { + method: 'POST', + headers: { + Accept: 'application/json', + 'Content-Type': 'application/json', + }, + body: JSON.stringify(indata), + signal: controller.signal, // enable timeout + }) + .then(response => { + clearTimeout(timeoutId); + return response.json(); + }) + .then((res) => { + clearTimeout(timeoutId); + return res; // keep original return structure + }) + .catch(err => { + clearTimeout(timeoutId); + + if (err.name === 'AbortError') { + console.log(`⏰ UploadData2 timed out after ${API_TIMEOUT / 1000}s`); + } else { + console.log('❌ UploadData2 error:', err.message || err); + } + + return { success: false, error: true, errorMsg: err.name === 'AbortError' ? 'Timeout' : err.message }; + }); +} + +export async function UploadFormData(url, formData) { // default 60 seconds + // Create abort controller for timeout + const controller = new AbortController(); + const timeoutId = setTimeout(() => controller.abort(), API_TIMEOUT); + + return await fetch(url, { + method: 'POST', + headers: new Headers({ + 'Content-Type': 'multipart/form-data', + }), + body: formData, + signal: controller.signal, // attach timeout controller + }) + .then(response => { + clearTimeout(timeoutId); + console.log('UploadData response:', response); + return response.text(); // keep same structure + }) + .then((res) => { + clearTimeout(timeoutId); + console.log('UploadData result:', res); + return res; // same as before + }) + .catch(err => { + clearTimeout(timeoutId); + + if (err.name === 'AbortError') { + console.log(`⏰ UploadFormData timed out after ${API_TIMEOUT / 1000}s`); + } else { + console.log('❌ UploadFormData error:', err.message || err); + } + + return { success: false, error: err.name === 'AbortError' ? 'Timeout' : err.message }; + }); +} + +export const fetchDistanceMatrix = async (stores) => { + try { + // 1. Ask for location permission + if (Platform.OS === "android") { + const granted = await PermissionsAndroid.request( + PermissionsAndroid.PERMISSIONS.ACCESS_FINE_LOCATION + ); + + if (granted !== PermissionsAndroid.RESULTS.GRANTED) { + return { + status: "FAILED", + message: "Location permission denied", + data: [], + }; + } + } + + // 2. Function to get location + const getCurrentLocation = () => { + return new Promise((resolve, reject) => { + Geolocation.getCurrentPosition( + (position) => { + resolve({ + latitude: position.coords.latitude, + longitude: position.coords.longitude, + }); + }, + (error) => reject(error), + { + enableHighAccuracy: false, // prevents timeout + timeout: 30000, // 30 seconds + maximumAge: 60000, // use cached location if available + } + ); + }); + }; + + // 3. Try getting location (with retry) + let currentLoc; + + try { + currentLoc = await getCurrentLocation(); + } catch (error) { + console.log("Retrying location fetch..."); + currentLoc = await getCurrentLocation(); + } + + // 4. Prepare destinations + const destinations = stores + .map((s) => `${s.latitude},${s.longitude}`) + .join("|"); + + // 5. Build API URL + const url = `https://api.olamaps.io/routing/v1/distanceMatrix?origins=${currentLoc.latitude},${currentLoc.longitude}&destinations=${destinations}&mode=driving&api_key=${OLA_MAP_KEY}`; + + // 6. Fetch API + const result = await fetchWithRetry( + url, + { + method: "GET", + headers: { "X-Request-Id": "my-app-request-123" }, + }, + 3, + 2000 + ); + + // 7. Process result + const readableArray = + result?.rows?.[0]?.elements + ?.map((el, index) => { + if (el.status !== "OK") return null; + + const formatted = formatRouteData(el.duration, el.distance); + + return { + StoreId: stores[index]?.StoreId || null, + ...formatted, + }; + }) + .filter(Boolean) || []; + + return { + status: "SUCCESS", + message: "Distance matrix fetched", + data: readableArray, + }; + } catch (error) { + console.error("Error fetching distance matrix:", error); + + return { + status: "FAILED", + message: error.message || "Something went wrong", + data: [], + }; + } +}; + +function formatRouteData(durationSec, distanceMeters) { + // Distance in km (1 decimal) + const distanceKm = distanceMeters / 1000; + // Duration in hours and minutes + const hours = Math.floor(durationSec / 3600); + const minutes = Math.floor((durationSec % 3600) / 60); + // Check if very close + if (distanceKm < 0.1 && durationSec < 60) { + return { + DistanceInMeters: distanceMeters, + Distance: "Very close to your store!", + Duration: "" + }; + } + + return { + DistanceInMeters: distanceMeters, + Distance: `${distanceKm.toFixed(1)} Km`, + Duration: hours > 0 ? `${hours} Hour ${minutes} Minutes` : `${minutes} Minutes` + }; +} +// Generic fetch with retry logic +async function fetchWithRetry(url, options, retries = 6, delay = 2000) { + for (let i = 0; i < retries; i++) { + try { + const response = await fetch(url, options); + if (!response.ok) throw new Error(`HTTP error! Status: ${response.status}`); + return await response.json(); // return the parsed JSON + } catch (err) { + console.warn(`Fetch attempt ${i + 1} failed:`, err.message); + if (i < retries - 1) { + // wait before retry + await new Promise(res => setTimeout(res, delay)); + } else { + throw new Error(`Failed after ${retries} attempts: ${err.message}`); + } + } + } +} + +export async function DownloadData(props, { isDataDownloaded = false }) { + if (isDataDownloaded) { + return true; + } + let d1 = new Date(); + let today = moment(d1).format('MM/DD/YYYY'); + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + + for (const i in Table_Structure) { + const table = Table_Structure[i]; + await txn.executeSql(table.SqlText, [], function (txn2, txnres2) { + + }, + function (txnE, txnerr) { console.log(txnerr); }); + } + + + + + // delete all previous data + let index = 0; + for (const key in AppTables) { + + // Dont Delete previous IR images Data and session status + let SOSIRTable = AppTables[key] == AppTables.SOS_IRUPLOAD || AppTables[key] == AppTables.SOS_IR_IMAGES; + let PVISIRTable = AppTables[key] == AppTables.PAIDVIS_IRUPLOAD || AppTables[key] == AppTables.PAIDVIS_IR_IMAGES; + let WINDIRTable = AppTables[key] == AppTables.WINDOW_IRUPLOAD || AppTables[key] == AppTables.WINDOW_IR_IMAGES; + let AVISIRTable = AppTables[key] == AppTables.ADDVIS_IRUPLOAD || AppTables[key] == AppTables.ADDVIS_IR_IMAGES; + let CVISIRTable = AppTables[key] == AppTables.COMPVIS_IRUPLOAD || AppTables[key] == AppTables.COMPVIS_IR_IMAGES; + let PROMOIRTable = AppTables[key] == AppTables.PROMO_IRUPLOAD || AppTables[key] == AppTables.PROMO_IR_IMAGES; + if (SOSIRTable || PVISIRTable || AVISIRTable || CVISIRTable || WINDIRTable || PROMOIRTable) { + console.log('Dont Delete previous IR images Data and session status continue.', AppTables[key]) + if (index == Object.keys(AppTables).length - 1) { + resolve(true); + } + index++; + continue; + } + + txn.executeSql(`Delete from ${AppTables[key]} where ADDED_DATE!='${today}'`, [], function (txnd, txnresd) { + if (index == Object.keys(AppTables).length - 1) { + resolve(true); + } + index++; + }, + function (txnE, txnerr) { + console.log(txnerr); + if (index == Object.keys(AppTables).length - 1) { + resolve(false); + } + index++; + }); + } + + }); + }).catch((err) => { + console.log('err while creating tables', err) + return false; + }) + + +} + +export async function getDataPendingStores(props) { + // returns the stores for which data exists and is not uploaded + + let pendingStores = []; + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + + function getQ(tbname) { + return `select * from ${tbname} where UploadStatus in ('C','P','D','L')`; + } + + let MappingJP = getQ('Mapping_JourneyPlan'); + let AdhocJP = getQ('Adhoc_JourneyPlan'); + + let storesq = MappingJP + ' UNION ' + AdhocJP; + + if (props.ShowNonMerList == true) { + let NonMerchJP = getQ('NonMerchandising_JourneyPlan'); + storesq += ` UNION ${NonMerchJP} `; + } + if (props.ShowNonProgram == true) { + let NonProgJP = getQ('NonProgram_JourneyPlan'); + storesq += ` UNION ${NonProgJP} `; + } + if (props.ShowStoreSearch == true) { + let SearchStoreJP = getQ('StoreSearch_JourneyPlan'); + storesq += ` UNION ${SearchStoreJP} `; + } + if (props.ShowBeatPlanList == true) { + let RouteJP = getQ('JourneyPlan_RouteWise'); + storesq += ` UNION ${RouteJP} `; + } + + + txn.executeSql(storesq, [], function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + pendingStores.push(data) + if (i == txnres2.rows.length - 1) { + resolve(pendingStores); + } + } + } + else { + resolve(pendingStores); + } + }, + function (txnE, txnerr) { console.log(txnerr); resolve(pendingStores); }); + }); + }).then((res) => { + return pendingStores; + }).catch((err) => { + console.log("pendingStores err:", err); + return pendingStores; + }) + +} + +export async function UpdateStoreStatus(props, data, callback = () => { }, previousDayUpload = false) { + let d1 = new Date(); + let today = moment(d1).format('MM/DD/YYYY'); + + return new Promise((resolve, reject) => { + if (data && data.UploadStatus) { + db.transaction((txn) => { + let { StoreId, UploadStatus, tbname, InTime, outtime } = data; + + // Ensure default values if InTime or OutTime is missing + InTime = InTime ? InTime : null; + outtime = outtime ? outtime : null; + + console.log("checkloc--", data, InTime, outtime); + + let query, params; + + if (InTime !== null && outtime !== null) { + query = `UPDATE ${tbname} + SET UploadStatus = ?, InTime = ?, OutTime = ? + WHERE StoreId = ? AND VisitDate = ?`; + params = [UploadStatus, InTime, outtime, StoreId, today]; + } else { + query = `UPDATE ${tbname} + SET UploadStatus = ? + WHERE StoreId = ? `; + if (!previousDayUpload) { + query += ` AND VisitDate = ? `; + } + + console.log("query", query, previousDayUpload); + params = !previousDayUpload ? [UploadStatus, StoreId, today] : [UploadStatus, StoreId]; + } + + txn.executeSql( + query, + params, + (txn2, txnres2) => { + console.log('✅ Store status updated:', UploadStatus); + callback != null ? callback(txnres2) : ''; + resolve(true); + }, + (txnerr) => { + console.error("🚨 SQL Error:", txnerr); + resolve(false); + } + ); + }); + } else { + resolve(false); + } + }).catch((err) => { + console.error("🚨 Promise Error:", err); + return false; + }); + + + // return new Promise((resolve,reject)=>{ + + // if (data!=null && data.UploadStatus!=null && data.UploadStatus!='') { + // db.transaction(async function (txn) { + + // let {StoreId,UploadStatus,tbname} = data; + + // let q=`UPDATE ${tbname} SET UploadStatus='${UploadStatus}' WHERE StoreId='${StoreId}' `; + // if(!previousDayUpload){ + // q+=` and VisitDate='${today}' `; + // } + + + // await txn.executeSql(q,[],async function (txn2, txnres2) { + // console.log('store status updated',UploadStatus,typeof callback); + // callback!=null?callback(txnres2):''; + // resolve(true); + // },function(Etxn,txnerr){console.log(txnerr);resolve(false);}); + + // }); + // } + // else{ + // resolve(false); + // } + // }).then((val)=>{ + // return val; + // }).catch((err)=>{ + // console.log(err); + // return false; + // }); + + +} + +export async function uploadContractData(props, contractData, programdata) { + const url = props.baseurl + getMethodName(METHODS.UPLOADJSON_METHOD); + + let postData = { + "MID": 0, + "Keys": "ContractForm", + "JsonData": JSON.stringify(contractData), + "UserId": props.UserId, + }; + + + console.log("url:", url); + console.log("postData:", postData); + + return await UploadData2(url, postData) + .then(async (res) => { + console.log('res:', res); + if (res.UploadJsonResult != null && res.UploadJsonResult == 'Success') { + let isUpdated = updateCFStatus(programdata) + return isUpdated; + } else { + return false; + } + }) + .catch((err) => { + console.log(err); + return false; + }); +} + +export async function updateCFStatus(data) { + let { ProgramDefinitionId, ProgramId } = data; + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + let q = `Update Mapping_ContractForm SET ContractFormStatus='1' WHERE ProgramId='${ProgramId}' and ProgramDefinitionId='${ProgramDefinitionId}'`; + await txn.executeSql(q, [], async function (txn2, txnres) { + console.log('CF status Updated to 1'); + resolve(true); + }, function (txnE, txnerr) { console.log(txnerr); resolve(false); },); + + }); + }).then((val) => { + return val; + }).catch((err) => { + console.log(err); + return false; + }); +} + + + +export async function UploadAddStoreInfoData(props, addstoreinfoData) { + const url = props.baseurl + getMethodName(METHODS.UPLOADJSON_METHOD); + + let postData = { + "MID": 0, + "Keys": "Add_Store_Info", + "JsonData": JSON.stringify(addstoreinfoData), + "UserId": props.UserId, + }; + + + console.log("url:", url); + console.log("postData:", postData); + + return await UploadData2(url, postData) + .then(async (res) => { + console.log('res:', res); + if (res.UploadJsonResult != null && res.UploadJsonResult == 'Success') { + let isUpdated = updateAddInfoStoreStatus() + return isUpdated; + } else { + return false; + } + }) + .catch((err) => { + console.log(err); + return false; + }); +} + +export async function updateAddInfoStoreStatus() { + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + let q = `Update ${AppTables.ADD_STORE_INFO} SET STATUS='U' `; + + await txn.executeSql(q, [], async function (txn2, txnres) { + console.log('Add Store Info status Updated to 1'); + resolve(true); + }, function (txnE, txnerr) { console.log(txnerr); resolve(false); },); + + }); + }).then((val) => { + return val; + }).catch((err) => { + console.log(err); + return false; + }); +} + + +async function UploadImagesWithoutWait(postData, url) { + console.log(url, postData); + return await UploadFormData(url, postData) + .then((res) => { + console.log('test:', res); + if (typeof res == 'object' && res.error != null) { + return false; + } + else if (res.includes('Success')) { + console.log('image uploaded'); + return true; + } + return false; + }) + .catch((err) => { + console.log(err); + return false; + }); +} + +export async function uploadContractFormFiles(allfiles = [], UpdateUploadCountLocal = () => { }, props) { + let d1 = new Date(); + let d2 = moment(d1).format('MM/DD/YYYY'); + let uploadCount = 0; + const url = (props.imageUploadUrl || URL_IMAGE) + getMethodName(METHODS.UPLOADIMAGES_METHOD); + // const url=( URL_IMAGE)+getMethodName(METHODS.UPLOADIMAGES_METHOD); + + var isAllUploaded = false; + return await Promise.all( + allfiles.map(async (file, i) => { + let index = i; + let actualfilepath = 'file://' + file.uri; + let isExists = await RNFS.exists(actualfilepath).then((res) => { return res; }); + console.log('isExists file', isExists, file.uri); + let isImageUploaded = false; + if (isExists) { + + let postData = new FormData(); + postData.append('file', { + uri: actualfilepath, + type: file.type, + //type: mime.getType(actualfilepath), + name: file.name, + }); + + postData.append('Foldername', file.folderName); + postData.append('Path', d2); + + isImageUploaded = await UploadImagesWithoutWait(postData, url); + if (isImageUploaded == true) { + console.log('isExists file uploaded', isExists, uploadCount, index, allfiles.length - 1); + await RNFS.unlink(actualfilepath); + uploadCount++; + UpdateUploadCountLocal(uploadCount + 1) + if (uploadCount == allfiles.length) { + isAllUploaded = true; + } + + } else { + console.log('file not uploaded:', isExists, actualfilepath); + } + + } + else {//file does not exists + uploadCount++; + UpdateUploadCountLocal(uploadCount + 1) + if (uploadCount == allfiles.length) { + isAllUploaded = true; + } + } + + return isImageUploaded; + }) + ).then((val) => { + console.log(val); + return isAllUploaded; + }) + .catch((err) => { + console.log(err); + return false; + }) +} + + +export async function UpdateDistributorStatus(props, data, callback = () => { }) { + let d1 = new Date(); + let today = moment(d1).format('MM/DD/YYYY'); + + return new Promise((resolve, reject) => { + + if (data != null && data.UploadStatus != null && data.UploadStatus != '') { + db.transaction(async function (txn) { + + let { StoreId, UploadStatus, tbname } = data; + + let q = `UPDATE ${tbname} SET UploadStatus='${UploadStatus}' WHERE DistributorId='${StoreId}' `; + + await txn.executeSql(q, [], async function (txn2, txnres2) { + console.log('distributor status updated', UploadStatus,); + callback(txnres2); + resolve(true); + }, function (Etxn, txnerr) { console.log(txnerr); resolve(false); }); + + }); + } + else { + resolve(false); + } + }).then((val) => { + return val; + }).catch((err) => { + console.log(err); + return false; + }); + + +} + +export async function getKPIS(MenuList, props) { + // let allKpis=MenuList; + // let isMDSIndex=MenuList.findIndex(i=>i.ScreenName=='MDSTOCK'); + // isMDSIndex>=0? allKpis.splice(isMDSIndex,1) : ""; + // let isCLSIndex=MenuList.findIndex(i=>i.ScreenName=='CLSSTOCK'); + // isCLSIndex>=0? allKpis.splice(isCLSIndex,1) : ""; + // console.log("isMDSIndex:",isMDSIndex,isCLSIndex); + + let allKpis = [] + for (let i = 0; i < MenuList.length; i++) { + let obj = MenuList[i]; + let isValid = obj.ScreenName != 'MDSTOCK' && obj.ScreenName != 'CLSSTOCK'; + if (isValid) { + allKpis.push(obj); + } + if (i == MenuList.length - 1) { + if (props.ShowStoreChecklist == true) { + allKpis.push({ "MenuId": 0, "MenuName": "StoreChecklist", "ScreenName": 'StoreChecklist' }); + } + if (props.ShowStoreProfile == true) { + allKpis.push({ "MenuId": 0, "MenuName": "StoreProfile", "ScreenName": 'StoreProfile' }); + } + if (props.ShowReportAfterCheckIn == true) { + allKpis.push({ "MenuId": 0, "MenuName": "StoreReport", "ScreenName": 'StoreReport' }); + } + + if (props.ShowCompactStoreProfile == true) { + allKpis.push({ "MenuId": 0, "MenuName": "StoreProfileKyc", "ScreenName": 'StoreProfileKyc' }); + } + + console.log("allKpis:", allKpis); + return allKpis; + } + } + + + + + // return Promise.all( + // MenuList.map((item,index)=>{ + // let ScreenName=item.ScreenName || ''; + // switch(ScreenName){ + // case 'STOCK':allKpis.push('Stocks2'); return 'Stocks2'; + // case 'STOCKWITHCATEGORY':allKpis.push('StockWithCat'); return 'StockWithCat'; + // case 'OPSTOCK':allKpis.push('Stocks'); return 'Stocks'; + // case 'BACKSTOCK':allKpis.push('BRS'); return 'BRS'; + // case 'MDSTOCK':allKpis.indexOf('Stocks')<0?allKpis.push('Stocks'):''; return 'Stocks'; + // case 'CLSSTOCK':allKpis.indexOf('Stocks')<0?allKpis.push('Stocks'):''; return 'Stocks'; + // case 'SOS':allKpis.push('SOS'); return 'SOS'; + // case 'PAIDVISI':allKpis.push('PaidVis'); return 'PaidVis'; + // case 'ADDITIONALVISI':allKpis.push('AddVis'); return 'AddVis'; + // case 'COMPVISI':allKpis.push('CompVis'); return 'CompVis'; + // case 'PROMOTION':allKpis.push('Promotion'); return 'Promotion'; + // case 'COMPROMO':allKpis.push('CompPromo'); return 'CompPromo'; + // case 'CONCOV':allKpis.push('Contacts'); return 'Contacts'; + // case 'SALE':allKpis.push('Sale'); return 'Sale'; + // case 'ORDER':allKpis.push('Order'); return 'Order'; + // case 'SURVEY':allKpis.push('Survey'); return 'Survey'; + // case 'WINDOW':allKpis.push('Window'); return 'Window'; + // case 'POSM':allKpis.push('POSM'); return 'POSM'; + // case 'PROMOTION2':allKpis.push('Promotion2'); return 'Promotion2'; + // case 'STOREIMG':allKpis.push('StoreImages'); return 'StoreImages'; + // case 'SHELFTALKER':allKpis.push('ShelfTalker'); return 'ShelfTalker'; + // case 'PROMOTIONONEAPP':allKpis.push('PromotionOneApp'); return 'PromotionOneApp'; + // case 'PAIDVISIONEAPP':allKpis.push('PaidVisOneApp'); return 'PaidVisOneApp'; + // case 'SOSONEAPP':allKpis.push('SOSOneApp'); return 'SOSOneApp'; + // case 'CATEXEONEAPP':allKpis.push('CatExeOneApp'); return 'CatExeOneApp'; + // case 'ORDERSTATUS':allKpis.push('ORDERSTATUS'); return 'ORDERSTATUS'; + + + + // default: return ''; + // } + // }) + // ).then((val)=>{ + // if(props.ShowStoreChecklist==true){ + // allKpis.push('StoreChecklist'); + // } + // if(props.ShowStoreProfile==true){ + // allKpis.push('StoreProfile'); + // } + // return allKpis; + // }) +} + + + + + + + +export const marktext1 = async (text = '', imgurl = '', imgWidth, imgHeight) => { + if (!imgurl || !text) return { success: false, imagenotfound: true }; + + try { + // top-left coordinates + const position = { x: 20, y: 20 }; + + const result = await manipulateAsync( + imgurl, + [ + { + drawText: { + text: text, + position: position, + color: '#ff0000', + fontSize: 24, + }, + }, + ], + { format: SaveFormat.JPEG, compress: 1 } // 1 = 100% quality + ); + + // Resize if width/height given + if (imgWidth && imgHeight) { + const resized = await ImageResizer.createResizedImage(result, imgWidth, imgHeight, 'JPEG', 35, 0, null, false, { onlyScaleDown: true }); + return { success: true, uri: Platform.OS === 'android' ? 'file://' + resized.uri : resized.uri }; + } + + return { success: true, uri: Platform.OS === 'android' ? 'file://' + result : result }; + } catch (err) { + console.log('marktext1 err:', err); + return { success: false, error: err }; + } +}; + +export const markAlltexts = async (text1 = '', text2 = '', imgurl = '', imgWidth, imgHeight) => { + if (!imgurl || !text1) return { success: false, imagenotfound: true }; + + try { + const operations = []; + + // Top-left text + operations.push({ + drawText: { text: text1, position: { x: 20, y: 20 }, color: '#ff0000', fontSize: 24 }, + }); + + // Bottom-left text + if (text2) { + operations.push({ + drawText: { text: text2, position: { x: 20, y: imgHeight - 40 }, color: '#ff0000', fontSize: 16 }, + }); + } + + const result = await manipulateAsync(imgurl, operations, { format: SaveFormat.JPEG, compress: 1 }); + + // Resize if needed + if (imgWidth && imgHeight) { + const resized = await ImageResizer.createResizedImage(result, imgWidth, imgHeight, 'JPEG', 35, 0, null, false, { onlyScaleDown: true }); + return { success: true, uri: Platform.OS === 'android' ? 'file://' + resized.uri : resized.uri }; + } + + return { success: true, uri: Platform.OS === 'android' ? 'file://' + result : result }; + } catch (err) { + console.log('markAlltexts err:', err); + return { success: false, error: err }; + } +}; + + + + + +export const marktext2 = async (text = '', imgurl = '', imgWidth, imgHeight) => { + if (!imgurl || !text) return { success: false, imagenotfound: true }; + + try { + const position = { x: 20, y: imgHeight - 40 }; // bottom-left + const result = await manipulateAsync(imgurl, [{ drawText: { text, position, color: '#ff0000', fontSize: 16 } }], { format: SaveFormat.JPEG, compress: 1 }); + + if (imgWidth && imgHeight) { + const resized = await ImageResizer.createResizedImage(result, imgWidth, imgHeight, 'JPEG', 35, 0, null, false, { onlyScaleDown: true }); + return { success: true, uri: Platform.OS === 'android' ? 'file://' + resized.uri : resized.uri }; + } + + return { success: true, uri: Platform.OS === 'android' ? 'file://' + result : result }; + } catch (err) { + console.log('marktext2 err:', err); + return { success: false, error: err }; + } +}; + +export async function Add_metadataToImage(imgdata, TopText, BottomText, imgurl = '') { + return new Promise(async (resolve, reject) => { + console.log("start Add_metadataToImage RN: ", moment().format("MM/DD/YYYY HH:mm:ss")); + if (ImageMarkText != null && imgurl != '') { + let TextInfo = { + "text": TopText, "BottomText": BottomText, + "textStyle": { + "TopTextfontSize": parseInt(imgdata.width * 0.06), "TopText_x": parseInt(imgdata.width * 0.01), "TopText_y": parseInt((imgdata.width * 0.06) + 50), + "BottomTextfontSize": parseInt(imgdata.width * 0.03), "BottomText_x": parseInt(imgdata.width * 0.01), "BottomText_y": parseInt(imgdata.height + (imgdata.width * 0.03) + 10) + } + }; + let ImgInfo = { src: imgurl, height: imgdata.height, width: imgdata.width, ExtendedHeight: imgdata.ExtendedHeight }; + let url = await ImageMarkText.NativeImageMarkText(JSON.stringify(TextInfo), JSON.stringify(ImgInfo)); + + console.log("end Add_metadataToImage RN: ", moment().format("MM/DD/YYYY HH:mm:ss"), url); + if (url != null && typeof url == 'string') { + // let fileparts= url.split("/"); + // let filename=fileparts[fileparts.length-1]; + // let destPath1=RNFS.DownloadDirectoryPath+"/"+filename; + // RNFS.copyFile(url,destPath1); + resolve({ success: true, "url": url }); + } + else { + resolve({ success: false, "error": "Cannot add metdata!" }); + } + } + else { + console.log("end Add_metadataToImage RN: ", moment().format("MM/DD/YYYY HH:mm:ss")); + resolve({ success: false, "error": "Native Module 'ImageMarkText' not found!" }); + } + }).then((res) => { + return res; + }).catch((err) => { + console.log("err:", err); + return { success: false, error: err }; + }) + + +} + +//arman +export async function restore_ImageWithMetaDataGst(data, imgdata) { + let { destFilePath, imgurl, imgWidth, imgHeight, mark_text1, mark_text2 } = data + // do not append metadata for ios + if (Platform.OS == 'ios') { + // let fileparts= destFilePath.split("/"); + // let filename='RES_'+fileparts[fileparts.length-1]; + // let destPath1=RNFS.DownloadDirectoryPath+"/"+filename; + // console.log('copy image from: ',destFilePath,', to:',destPath1); + // RNFS.copyFile(destFilePath,destPath1); + return true; + } + // add metadata + // let res_metadata=await Add_metadataToImage(imgdata,mark_text1,mark_text2); + // if(res_metadata.success && res_metadata.url!=null){ + // let imgWithMetaDataUrl=res_metadata.url; + + + + // cpoy to doownlload folder + + // let fileparts= destFilePath.split("/"); + // let filename='ORG_'+fileparts[fileparts.length-1]; + // let destPath2=RNFS.DownloadDirectoryPath+"/"+filename; + // console.log('copy org image from: ',imgurl,', to:',destPath2); + // RNFS.copyFile(imgurl,destPath2); + + // resize file + let resize_res = await resizeImageGst(imgurl, imgWidth, imgHeight); + if (resize_res.success) { + // add metadata + let resized_url = resize_res.uri != null && resize_res.uri != '' ? resize_res.uri.replace('file://', '') : ''; + let resized_imgD = resize_res.imgData != null ? resize_res.imgData : {}; + console.log("resized_url:", resized_url) + // required larger height of image for landscape image + let ExtraSpace = 1.1; // portrait image default + if (resized_imgD.width > resized_imgD.height) { + // landscape image + ExtraSpace = 1.2 + } + let resized_imgData = { uri: resized_url, width: parseInt(resized_imgD.width), height: parseInt(resized_imgD.height), ExtendedHeight: parseInt(resized_imgD.height * ExtraSpace) }; + + let res_metadata = await Add_metadataToImageGst(resized_imgData, mark_text1, mark_text2, resized_url); + if (res_metadata.success && res_metadata.url != null) { + let imgWithMetaDataUrl = res_metadata.url; + + let reducePixels_res = await reducePixelsGst(imgWithMetaDataUrl, imgWidth, imgHeight); + if (reducePixels_res.success) { + await RNFS.unlink(imgurl); // delete local temp image created while we click an image + await RNFS.unlink(resized_url); // delete local temp image created by first resize image function + await RNFS.unlink(imgWithMetaDataUrl); // delete local temp image created by Add_metadataToImage function + let isExists = await RNFS.exists(destFilePath); //delete dest file if exists + if (isExists) { await RNFS.unlink(destFilePath); } + console.log(reducePixels_res.uri, destFilePath, 'console....') + return await RNFS.moveFile(reducePixels_res.uri, destFilePath).then((res) => { + console.log('file restored to : ', destFilePath); + // copy image in download folder + // let fileparts= destFilePath.split("/"); + // let filename='RES_'+fileparts[fileparts.length-1]; + // let destPath1=RNFS.DownloadDirectoryPath+"/"+filename; + // console.log('copy image from: ',destFilePath,', to:',destPath1); + // RNFS.copyFile(destFilePath,destPath1); + + return true; + }).catch((err) => { + console.log("err:", err); + return false; + }); + } + else { + notify("Error while reducing pixels! " + (resize_res.error ? resize_res.error : '')); + return false; + } + } + else { + notify("Error while adding metadata in image!" + (res_metadata.error ? res_metadata.error : '')); + + return true; + } + } + else { + notify("Error while resizing image! " + (resize_res.error ? resize_res.error : '')); + return false; + } + +} + +export const resizeImageGst = async (imgurl = '', imgWidth, imgHeight) => { + if (imgurl != '') { + const minDimension = 1500; // Minimum width/height to ensure text readability + const targetWidth = Math.max(imgWidth, minDimension); + const targetHeight = Math.max(imgHeight, minDimension); + return await ImageResizer.createResizedImage(imgurl, targetWidth, targetHeight, 'JPEG', 90, 0, null, false, { onlyScaleDown: true }) + .then(response => { + let size = bytesToSize(response.size); + console.log('resizeImage: reduced filesize:', size); + return { success: true, uri: response.uri, imgData: response }; + }) + .catch((err) => { + console.log(err); + return { success: false, error: err }; + }); + } + else { + return { success: false, imagenotfound: true }; + } +} + +export const reducePixelsGst = async (imgurl = '', imgWidth, imgHeight) => { + + if (imgurl != '') { + // perform resize only whether imgWidth>1100 or imgHeight>1100 + if (imgWidth > 2000 || imgHeight > 2000) { + // set max width and max height to 1100 + return await ImageResizer.createResizedImage(imgurl, 2000, 2000, 'JPEG', 80, 0, null, false, { onlyScaleDown: true, mode: 'contain' }) + .then(response => { + let size = bytesToSize(response.size); + console.log('after pixel reduce file size , w, h:', size, response.width, response.height); + return { success: true, uri: response.uri }; + }) + .catch((err) => { + console.log(err); + return { success: false, error: err }; + }); + + } + else { + return { success: true, uri: imgurl }; + } + + } + else { + return { success: false, imagenotfound: true }; + } +} + +export async function Add_metadataToImageGst(imgdata, TopText, BottomText, imgurl = '') { + return new Promise(async (resolve, reject) => { + console.log("start Add_metadataToImage RN: ", moment().format("MM/DD/YYYY HH:mm:ss")); + if (ImageMarkText != null && imgurl != '') { + let TextInfo = { + "text": TopText, "BottomText": BottomText, + "textStyle": { + "TopTextfontSize": parseInt(imgdata.width * 0.06), "TopText_x": parseInt(imgdata.width * 0.01), "TopText_y": parseInt((imgdata.width * 0.06) + 50), + "BottomTextfontSize": parseInt(imgdata.width * 0.03), "BottomText_x": parseInt(imgdata.width * 0.01), "BottomText_y": parseInt(imgdata.height + (imgdata.width * 0.03) + 30) + } + }; + let ImgInfo = { src: imgurl, height: imgdata.height, width: imgdata.width, ExtendedHeight: imgdata.ExtendedHeight }; + let url = await ImageMarkText.NativeImageMarkText(JSON.stringify(TextInfo), JSON.stringify(ImgInfo)); + + console.log("end Add_metadataToImage RN: ", moment().format("MM/DD/YYYY HH:mm:ss"), url); + if (url != null && typeof url == 'string') { + // let fileparts= url.split("/"); + // let filename=fileparts[fileparts.length-1]; + // let destPath1=RNFS.DownloadDirectoryPath+"/"+filename; + // RNFS.copyFile(url,destPath1); + resolve({ success: true, "url": url }); + } + else { + resolve({ success: false, "error": "Cannot add metdata!" }); + } + } + else { + console.log("end Add_metadataToImage RN: ", moment().format("MM/DD/YYYY HH:mm:ss")); + resolve({ success: false, "error": "Native Module 'ImageMarkText' not found!" }); + } + }).then((res) => { + return res; + }).catch((err) => { + console.log("err:", err); + return { success: false, error: err }; + }) + + +} + +export async function restore_ImageWithMetaData(data, imgdata) { + let { destFilePath, imgurl, imgWidth, imgHeight, mark_text1, mark_text2 } = data + // do not append metadata for ios + if (Platform.OS == 'ios') { + // let fileparts= destFilePath.split("/"); + // let filename='RES_'+fileparts[fileparts.length-1]; + // let destPath1=RNFS.DownloadDirectoryPath+"/"+filename; + // console.log('copy image from: ',destFilePath,', to:',destPath1); + // RNFS.copyFile(destFilePath,destPath1); + return true; + } + // add metadata + // let res_metadata=await Add_metadataToImage(imgdata,mark_text1,mark_text2); + // if(res_metadata.success && res_metadata.url!=null){ + // let imgWithMetaDataUrl=res_metadata.url; + + + + // cpoy to doownlload folder + + // let fileparts= destFilePath.split("/"); + // let filename='ORG_'+fileparts[fileparts.length-1]; + // let destPath2=RNFS.DownloadDirectoryPath+"/"+filename; + // console.log('copy org image from: ',imgurl,', to:',destPath2); + // RNFS.copyFile(imgurl,destPath2); + + // resize file + let resize_res = await resizeImage(imgurl, imgWidth, imgHeight); + if (resize_res.success) { + // add metadata + let resized_url = resize_res.uri != null && resize_res.uri != '' ? resize_res.uri.replace('file://', '') : ''; + let resized_imgD = resize_res.imgData != null ? resize_res.imgData : {}; + console.log("resized_url:", resized_url) + // required larger height of image for landscape image + let ExtraSpace = 1.1; // portrait image default + if (resized_imgD.width > resized_imgD.height) { + // landscape image + ExtraSpace = 1.2 + } + let resized_imgData = { uri: resized_url, width: parseInt(resized_imgD.width), height: parseInt(resized_imgD.height), ExtendedHeight: parseInt(resized_imgD.height * ExtraSpace) }; + + let res_metadata = await Add_metadataToImage(resized_imgData, mark_text1, mark_text2, resized_url); + if (res_metadata.success && res_metadata.url != null) { + let imgWithMetaDataUrl = res_metadata.url; + + let reducePixels_res = await reducePixels(imgWithMetaDataUrl, imgWidth, imgHeight); + if (reducePixels_res.success) { + // await RNFS.unlink(imgurl); // delete local temp image created while we click an image + // await RNFS.unlink(resized_url); // delete local temp image created by first resize image function + // await RNFS.unlink(imgWithMetaDataUrl); // delete local temp image created by Add_metadataToImage function + let isExists = await RNFS.exists(destFilePath); //delete dest file if exists + if (isExists) { await RNFS.unlink(destFilePath); } + console.log(reducePixels_res.uri, destFilePath, 'console....') + return await RNFS.moveFile(reducePixels_res.uri, destFilePath).then(async (res) => { + console.log('file restored to : ', destFilePath); + await RNFS.unlink(imgurl); // delete local temp image created while we click an image + await RNFS.unlink(resized_url); // delete local temp image created by first resize image function + await RNFS.unlink(imgWithMetaDataUrl); // delete local temp image created by Add_metadataToImage function + // copy image in download folder + // let fileparts= destFilePath.split("/"); + // let filename='RES_'+fileparts[fileparts.length-1]; + // let destPath1=RNFS.DownloadDirectoryPath+"/"+filename; + // console.log('copy image from: ',destFilePath,', to:',destPath1); + // RNFS.copyFile(destFilePath,destPath1); + + return true; + }).catch((err) => { + console.log("err:", err); + return false; + }); + } + else { + notify("Error while reducing pixels! " + (resize_res.error ? resize_res.error : '')); + return false; + } + } + else { + notify("Error while adding metadata in image!" + (res_metadata.error ? res_metadata.error : '')); + + return true; + } + } + else { + notify("Error while resizing image! " + (resize_res.error ? resize_res.error : '')); + return false; + } + +} + +export const resizeImage = async (imgurl = '', imgWidth, imgHeight) => { + if (imgurl != '') { + return await ImageResizer.createResizedImage(imgurl, imgWidth, imgHeight, 'JPEG', 90, 0, null, false, { onlyScaleDown: true }) + .then(response => { + let size = bytesToSize(response.size); + console.log('resizeImage: reduced filesize:', size); + return { success: true, uri: response.uri, imgData: response }; + }) + .catch((err) => { + console.log(err); + return { success: false, error: err }; + }); + } + else { + return { success: false, imagenotfound: true }; + } +} + +export const reducePixels = async (imgurl = '', imgWidth, imgHeight) => { + + if (imgurl != '') { + // perform resize only whether imgWidth>1100 or imgHeight>1100 + if (imgWidth > 1100 || imgHeight > 1100) { + // set max width and max height to 1100 + return await ImageResizer.createResizedImage(imgurl, 1100, 1100, 'JPEG', 40, 0, null, false, { onlyScaleDown: true, mode: 'contain' }) + .then(response => { + let size = bytesToSize(response.size); + console.log('after pixel reduce file size , w, h:', size, response.width, response.height); + return { success: true, uri: response.uri }; + }) + .catch((err) => { + console.log(err); + return { success: false, error: err }; + }); + + } + else { + return { success: true, uri: imgurl }; + } + + } + else { + return { success: false, imagenotfound: true }; + } +} + +export async function RestoreProjectInProps(props) { + // clear_item('firsttime');clear_item('islogin');clear_item('mpin');clear_item('loginToken'); + if (props.baseurl == '' || props.baseurl == null || props.baseurl == undefined) { + let projectInfo = await get_item('projectInfo'); + let projectCode = await get_item('projectCode'); + let projectDetails = projectInfo != null ? JSON.parse(projectInfo) : {}; + let pdata = getProjectInfo(projectDetails) + //set project info in global redux state + props.set_project(pdata); + } +} + +export function getProjectInfo(projectDetails, projectCode, AppClearData) { + // const myKeys={"DownloadKey":[{"KeyId":1,"DownloadKey":"Table_Structure","IsMandatory":true,"DevActive":true,"ProdActive":true,"DownloadSequence":1},{"KeyId":4,"DownloadKey":"Mapping_JourneyPlan","IsMandatory":false,"DevActive":true,"ProdActive":true,"DownloadSequence":3},{"KeyId":5,"DownloadKey":"Adhoc_JourneyPlan","IsMandatory":true,"DevActive":true,"ProdActive":true,"DownloadSequence":4},{"KeyId":6,"DownloadKey":"Product_Master","IsMandatory":true,"DevActive":true,"ProdActive":true,"DownloadSequence":5},{"KeyId":7,"DownloadKey":"Non_Working_Reason","IsMandatory":true,"DevActive":true,"ProdActive":true,"DownloadSequence":2}]}; + let imgurl = projectDetails.imageUploadURL != null ? projectDetails.imageUploadURL + '/' : ''; + const pdata = { + pid: (projectCode || ''), pname: (projectDetails.projectName || ''), pcode: (projectDetails.ProjectCode || ''), + alldata: projectDetails, baseurl: (projectDetails.baseURL || baseurl), + + companylogo: (projectDetails.login_logo_Url || ''), + splashlogo: (projectDetails.splash_logo_Url || ''), + drawerlogo: (projectDetails.menu_top_logo || ''), + + imageUploadUrl: imgurl, + GeoFenceEnable: (projectDetails.GeoFenceEnable_checkin != null && projectDetails.GeoFenceEnable_checkin == 1), + GeoFenceRadius: (projectDetails.GeoFenceRadius_checkin || 0), + GFEnable_checkout: (projectDetails.GeoFenceEnable_checkout != null && projectDetails.GeoFenceEnable_checkout == 1), + GFRadius_checkout: (projectDetails.GeoFenceRadius_checkout || 0), + + DBCI_GeoFenceEnable: (projectDetails.DBCI_GeoFenceEnable != null && projectDetails.DBCI_GeoFenceEnable == 1), + DBCI_GeoFenceRadius: (projectDetails.DBCI_GeoFenceRadius || 0), + DBCO_GeoFenceEnable: (projectDetails.DBCO_GeoFenceEnable != null && projectDetails.DBCO_GeoFenceEnable == 1), + DBCO_GeoFenceRadius: (projectDetails.DBCO_GeoFenceRadius || 0), + + CheckOut_PhotoReq: projectDetails.PhotoRequired_Checkout != null ? projectDetails.PhotoRequired_Checkout : false, + CameraGallery: projectDetails.CameraGallery != null ? projectDetails.CameraGallery : false, + CheckInCameraGallery: projectDetails.CheckInCameraGallery != null ? projectDetails.CheckInCameraGallery : false, + DownloadKey: projectDetails.DownloadKey != null ? projectDetails.DownloadKey : '', + //DownloadKey:'', + OQAD_TimeOut: projectDetails.OQAD_TimeOut != null ? projectDetails.OQAD_TimeOut : OQAD_TimeConst, + ShowMenuType: projectDetails.ShowMenuType != null ? projectDetails.ShowMenuType : true, + ShowStoreChecklist: projectDetails.ShowStoreChecklist != null ? projectDetails.ShowStoreChecklist : false, + RefImagePopUpTime: projectDetails.RefImagePopUpTime != null ? projectDetails.RefImagePopUpTime : 0, + AdhocActivated: projectDetails.AdhocActivated != null ? projectDetails.AdhocActivated : "", + ShowBeatPlanList: projectDetails.ShowBeatPlanList != null ? projectDetails.ShowBeatPlanList : false, + ShowDBPOSM: projectDetails.ShowDBPOSM != null ? projectDetails.ShowDBPOSM : false, + ShowStoreAdd: projectDetails.ShowStoreAdd != null ? projectDetails.ShowStoreAdd : false, + ShowStoreProfile: projectDetails.ShowStoreProfile != null ? projectDetails.ShowStoreProfile : false, + ShowReportAfterCheckIn: projectDetails.ShowReportAfterCheckIn != null ? projectDetails.ShowReportAfterCheckIn : false, + ///armaan shaikh + ShowCompactStoreProfile: projectDetails.ShowCompactStoreProfile != null ? projectDetails.ShowCompactStoreProfile : false, + ShowSideMenuKYC: projectDetails.ShowSideMenuKYC != null ? projectDetails.ShowSideMenuKYC : false, + + ShowNonMerList: projectDetails.ShowNonMerList != null ? projectDetails.ShowNonMerList : false, + Show_VisitorFeedBack: projectDetails.Show_VisitorFeedBack != null ? projectDetails.Show_VisitorFeedBack : false, + Show_ConsumerSection: projectDetails.Show_ConsumerSection != null ? projectDetails.Show_ConsumerSection : false, + Clear_storage: AppClearData != null ? AppClearData : false, + + ShowNonProgram: projectDetails.ShowNonProgram != null ? projectDetails.ShowNonProgram : false, + FaceRecognition: projectDetails.FaceRecognition != null ? projectDetails.FaceRecognition : false, + Gyancast: projectDetails.Gyancast != null ? projectDetails.Gyancast : false, + Chatbot: projectDetails.Chatbot != null ? projectDetails.Chatbot : false, + StoreMapView: projectDetails.StoreMapView != null ? projectDetails.StoreMapView : false, + StoreRouteView: projectDetails.StoreRouteView != null ? projectDetails.StoreRouteView : false, + NoCheckIn_Photo: projectDetails.NoCheckIn_Photo != null ? projectDetails.NoCheckIn_Photo : false, + + + ShowStoreSearch: projectDetails.ShowStoreSearch != null ? projectDetails.ShowStoreSearch : false, + ShowStoreSearchLabel: projectDetails.ShowStoreSearchLabel != null && projectDetails.ShowStoreSearchLabel != '' ? projectDetails.ShowStoreSearchLabel : StoreSearch_def, + PartialSaveAllow: projectDetails.PartialSaveAllow != null ? projectDetails.PartialSaveAllow : false, + CheckinOpenBackCamera: projectDetails.CheckinOpenBackCamera != null ? projectDetails.CheckinOpenBackCamera : false, + CheckoutOpenBackCamera: projectDetails.CheckoutOpenBackCamera != null ? projectDetails.CheckoutOpenBackCamera : false, + CheckInSwitchingCamera: projectDetails.CheckInSwitchingCamera != null ? projectDetails.CheckInSwitchingCamera : false, + + NonProgramLabel: projectDetails.NonProgramLabel != null && projectDetails.NonProgramLabel != '' ? projectDetails.NonProgramLabel : NonProgramLabel_def, + IR_CameraEnableOnApp: projectDetails.IR_CameraEnableOnApp != null ? projectDetails.IR_CameraEnableOnApp : false, + IR_Creds: projectDetails.IR_Creds != null ? projectDetails.IR_Creds : {}, + Chatbot_Creds: projectDetails.Chatbot_Creds != null ? projectDetails.Chatbot_Creds : {}, + ShowAddNewStore: projectDetails.ShowAddNewStore != null ? projectDetails.ShowAddNewStore : false, + WebViewDashboard: projectDetails.WebViewDashboard !=null ? projectDetails.WebViewDashboard : false, + + + AddNewStoreInJCP: projectDetails.AddNewStoreInJCP != null ? projectDetails.AddNewStoreInJCP : false, + AddNewStoreVerificationReq: projectDetails.AddNewStoreVerificationReq != null ? projectDetails.AddNewStoreVerificationReq : false, + + ShowContractForm: projectDetails.ShowContractForm != null ? projectDetails.ShowContractForm : false, + WarehouseShow: projectDetails.WarehouseShow != null ? projectDetails.WarehouseShow : false, + Show_OldMTDReports: projectDetails.Show_OldMTDReports == 1 || projectDetails.Show_OldMTDReports == "true" ? true : false, + + Allow_Change_Password: projectDetails.Allow_Change_Password != null ? projectDetails.Allow_Change_Password : false, + forget_Password_on_LoginPage: projectDetails.forget_Password_on_LoginPage != null ? projectDetails.forget_Password_on_LoginPage : false, + + }; + + return pdata; +} + +export function get_rowColSettings(colVal, colName, row) { + + let res = { "color": '', "fontsize": "", "bold": 0 }; + let gset_obj = row["Color"] != null && row["Color"] != null != '' ? JSON.parse(row["Color"]) : {}; + if (Object.keys(gset_obj).length > 0 && colVal != null && colVal != '') { + let settings_Obj = gset_obj; + + let color_obj = settings_Obj["colors"] != null && typeof settings_Obj["colors"] == 'object' ? settings_Obj["colors"] : {}; + let column_settings = color_obj[colName] != null && color_obj[colName] != '' ? color_obj[colName] : []; + + if (column_settings.length > 0) { + for (let i = 0; i < column_settings.length; i++) { + let colset_obj = column_settings[i]; + + // if min and max both is present + if (colset_obj["min"] != null && Math.round(colVal) >= colset_obj["min"] && colset_obj["max"] != null && Math.round(colVal) <= colset_obj["max"]) { + + res = { "color": colset_obj.color, "fontsize": colset_obj.fontsize, "bold": colset_obj.bold }; + return res; + } + // if only min is present + else if (colset_obj["min"] != null && Math.round(colVal) >= colset_obj["min"] && (colset_obj["max"] == null || colset_obj["max"] == '')) { + + res = { "color": colset_obj.color, "fontsize": colset_obj.fontsize, "bold": colset_obj.bold }; + return res; + } + // if only max is present + else if (colset_obj["max"] != null && Math.round(colVal) <= colset_obj["max"] && (colset_obj["min"] == null || colset_obj["min"] == '')) { + + res = { "color": colset_obj.color, "fontsize": colset_obj.fontsize, "bold": colset_obj.bold }; + return res; + } + + if (i == column_settings.length - 1) { + console.log("end") + return res; + } + } + } + else { + return res; + } + } + else { + return res + } +} + +export function checkRange(lat1, lon1, lat2, lon2) { + var R = 6371; // km (change this constant to get miles) + var dLat = (lat2 - lat1) * Math.PI / 180; + var dLon = (lon2 - lon1) * Math.PI / 180; + var a = Math.sin(dLat / 2) * Math.sin(dLat / 2) + + Math.cos(lat1 * Math.PI / 180) * Math.cos(lat2 * Math.PI / 180) * + Math.sin(dLon / 2) * Math.sin(dLon / 2); + var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)); + var d = R * c; + return Math.round(d * 1000); +} + + +export function cal_distance(lat1, lon1, lat2, lon2) { + var p = 0.017453292519943295; // Math.PI / 180 + var c = Math.cos; + var a = 0.5 - c((lat2 - lat1) * p) / 2 + + c(lat1 * p) * c(lat2 * p) * + (1 - c((lon2 - lon1) * p)) / 2; + R = 6371;// km + return Math.asin(Math.sqrt(a)) * 2 * R; //12742 miles +} + +export function bytesToSize(bytes) { + var sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB']; + if (bytes == 0) return '0 Byte'; + var i = parseInt(Math.floor(Math.log(bytes) / Math.log(1024))); + return Math.round(bytes / Math.pow(1024, i), 2) + ' ' + sizes[i]; +} + +export async function getKPIFields(menu1, getAll = false) { + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + let q = `select * from Mapping_MenuConfiguration `; + if (!getAll) { + q += `where ScreenName='${menu1.ScreenName}'`; + } + + await txn.executeSql(q, [], async function (txn2, txnres) { + if (txnres.rows.length > 0) { + let arr = []; + for (var i = 0; i < txnres.rows.length; i++) { + let data = txnres.rows.item(i); + let isenable = data.KPIFieldEnable == 'true' || data.KPIFieldEnable == 1 || data.KPIFieldEnable == '1' ? true : false; + data['KPIFieldEnable'] = isenable; + arr.push(data); + if (i == txnres.rows.length - 1) { + resolve(arr) + } + } + } + else { + resolve([]) + } + }, function (txnE, txnerr) { console.log(txnerr); resolve([]) },); + }); + }).then((val) => { + return val; + }).catch((err) => { + console.log(err); + return []; + }); +} + +//for storeCompactKyc +export async function getKPIFieldsForKyc(getAll = false) { + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + let q = `select * from Mapping_MenuConfiguration `; + + txn.executeSql(q, [], async function (txn2, txnres) { + if (txnres.rows.length > 0) { + let arr = []; + for (var i = 0; i < txnres.rows.length; i++) { + let data = txnres.rows.item(i); + let isenable = data.KPIFieldEnable == 'true' || data.KPIFieldEnable == 1 || data.KPIFieldEnable == '1' ? true : false; + data['KPIFieldEnable'] = isenable; + arr.push(data); + if (i == txnres.rows.length - 1) { + resolve(arr); + } + } + } + else { + resolve([]); + } + }, function (txnE, txnerr) { console.log(txnerr); resolve([]); }); + }); + }).then((val) => { + return val; + }).catch((err) => { + console.log(err); + return []; + }); +} + + +export async function getIRPendingSessionCount(props) { + console.log("getIRSessionStatus"); + return new Promise(async (resolve, reject) => { + + db.transaction(async function (txn) { + function getJPQuery(PJPTableName) { + let join = `Inner Join ${PJPTableName} JP on IR.STORE_ID=JP.StoreId `; + let commonQ = ` + Select IR.STORE_ID,IR.TEMP_SESSION_ID FROM ${AppTables.SOS_IRUPLOAD} IR ${join} where IR.SYNC_STATUS!='Synced' + UNION + Select IR.STORE_ID,IR.TEMP_SESSION_ID FROM ${AppTables.PAIDVIS_IRUPLOAD} IR ${join} where IR.SYNC_STATUS!='Synced' + UNION + Select IR.STORE_ID,IR.TEMP_SESSION_ID FROM ${AppTables.WINDOW_IRUPLOAD} IR ${join} where IR.SYNC_STATUS!='Synced' + UNION + Select IR.STORE_ID,IR.TEMP_SESSION_ID FROM ${AppTables.ADDVIS_IRUPLOAD} IR ${join} where IR.SYNC_STATUS!='Synced' + UNION + Select IR.STORE_ID,IR.TEMP_SESSION_ID FROM ${AppTables.COMPVIS_IRUPLOAD} IR ${join} where IR.SYNC_STATUS!='Synced' + `;//IR.VISIT_DATE='${d2}' and + return commonQ; + } + + let MappingJP = getJPQuery('Mapping_JourneyPlan'); + let AdhocJP = getJPQuery('Adhoc_JourneyPlan'); + let q = `${MappingJP} UNION ${AdhocJP}`; + + if (props.ShowNonMerList == true) { + let NonMerchJP = getJPQuery('NonMerchandising_JourneyPlan'); + q += ` UNION ${NonMerchJP} `; + } + if (props.ShowNonProgram == true) { + let NonProgJP = getJPQuery('NonProgram_JourneyPlan'); + q += ` UNION ${NonProgJP} `; + } + if (props.ShowStoreSearch == true) { + let SearchStoreJP = getJPQuery('StoreSearch_JourneyPlan'); + q += ` UNION ${SearchStoreJP} `; + } + if (props.ShowBeatPlanList == true) { + let RouteJP = getJPQuery('JourneyPlan_RouteWise'); + q += ` UNION ${RouteJP} `; + } + + await txn.executeSql(q, [], async function (txn2, txnres) { + let count = txnres.rows.length; + console.log("IR Pending count", count); + resolve(count); + }, function (txnE, txnerr) { console.log(txnerr); resolve(0); },); + + }); + }).catch((Err) => { + console.log('getIRSessionStatus err', Err); + return 0; + }) + +} + + + +export const useOrientation2 = (value) => { + // const dim=window; + let isPortrait = value == "LANDSCAPE-LEFT" || value == "LANDSCAPE-RIGHT"; + return isPortrait ? 'LANDSCAPE' : 'PORTRAIT'; +} + + +export async function checkMDStockScreenExists(storeData1, screen = '') { + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + let q = Q_MenuList(storeData1, screen); + + await txn.executeSql(q, [], async function (txn2, txnres) { + if (txnres.rows.length > 0) { + resolve(true); + } + else { + resolve(false); + } + }, function (txnE, txnerr) { console.log(txnerr); resolve(true); },); + }); + }).catch((err) => { + console.log(err); + return false; + }) +} + +export function goToMenuPage({ props, storeData = {}, screenname = '', MenuItem = {}, BgNav = false, BgNavData = {}, isAdhocScreen, isBeatPlan, isNonMerchan, isNonProg, isStoreSearch, ShowCatWise = false, CatData = {}, ExtraData }) { + props.set_autoback({ 'AutoGoToPrev': false }); + console.log("goToMenuPage", screenname, storeData, BgNav); + props.navigation.navigate(screenname, { storeData: storeData, menu: MenuItem, 'isAdhoc': isAdhocScreen, 'isBeat': isBeatPlan, 'isNonMerchans': isNonMerchan, isNonProgs: isNonProg, isStoreSearch: isStoreSearch, 'redirect': BgNav, 'BgNavData': BgNavData, 'ShowCatWise': ShowCatWise, 'CatData': CatData, ExtraData: ExtraData }) +} + +export const useOrientation = (width, height) => { + // const dim=window; + let isPortrait = height >= width; + return isPortrait ? 'PORTRAIT' : 'LANDSCAPE'; +} + + +export function validateNumber(val, type = '', showMsg = true) { + let isValid = true; + if (type.toLowerCase() == 'numeric' && val != '') { + let regex = new RegExp(/^\d+$/); + let isNUmeric = regex.test(val); + if (!isNUmeric) { + isValid = false; + if (showMsg) notify('Please enter whole numbers only', 'SHORT'); + } + } + else if (type.toLowerCase() == 'decimal' && val != '') { + let regex = new RegExp(/^\d*\.?\d*$/); + let isNUmeric = regex.test(val); + if (!isNUmeric) { + isValid = false; + if (showMsg) notify('Please enter decimal numbers only', 'SHORT'); + } + } + else if (type.toLowerCase() == 'text' && val != '') { + let regex = new RegExp(/^[a-zA-Z0-9@\s_.-]*$/); + let isNUmeric = regex.test(val); + if (!isNUmeric) { + isValid = false; + if (showMsg) notify('Please enter only characters and digits', 'SHORT'); + } + + } else if (type.toLowerCase() == 'qrtext' && val != '') { + let regex = new RegExp(/^[a-zA-Z0-9@\s_.-\/:&$%#]*$/); + let isNUmeric = regex.test(val); + if (!isNUmeric) { + isValid = false; + if (showMsg) notify('Please enter only characters and digits', 'SHORT'); + } + + } else if (type.toLowerCase() == 'textspc' && val != '') { + let regex = new RegExp(/^[a-zA-Z0-9\/-]*$/); + let isNUmeric = regex.test(val); + if (!isNUmeric) { + isValid = false; + if (showMsg) notify('Please enter only characters and digits', 'SHORT'); + } + } else if (type.toLowerCase() == 'alphanumeric' && val != '') { + let regex = new RegExp(/^[a-zA-Z0-9]+$/); + let isNUmeric = regex.test(val); + if (!isNUmeric) { + isValid = false; + if (showMsg) notify('Please enter only characters and digits', 'SHORT'); + } + } + + return isValid; +} + + + +export function validateNumber12(val, type = '', showMsg = true) { + let isValid = true; + + if (type.toLowerCase() === 'numeric' && val !== '') { + // Numeric validation logic + } else if (type.toLowerCase() === 'decimal' && val !== '') { + // Decimal validation logic + } else if (type.toLowerCase() === 'text' && val !== '') { + // RegExp(/^[a-zA-Z0-9@\s_.-]*$/); + let regex = new RegExp(/^[a-zA-Z0-9\-\/ ,]*$/); + let isNumeric = regex.test(val); + if (!isNumeric) { + isValid = false; + if (showMsg) notify('Please enter only specified characters', 'SHORT'); + } + } else if (type.toLowerCase() === 'qrtext' && val !== '') { + let regex = new RegExp(/^[a-zA-Z0-9\-\/]*$/); + let isNumeric = regex.test(val); + if (!isNumeric) { + isValid = false; + if (showMsg) notify('Please enter only specified characters', 'SHORT'); + } + } else if (type.toLowerCase() == 'textspc' && val != '') { + let regex = new RegExp(/^[a-zA-Z0-9\/-]*$/); + let isNUmeric = regex.test(val); + if (!isNUmeric) { + isValid = false; + if (showMsg) notify('Please enter only characters and digits', 'SHORT'); + } + } else if (type.toLowerCase() == 'alphanumeric' && val != '') { + let regex = new RegExp(/^[a-zA-Z0-9]+$/); + let isNUmeric = regex.test(val); + if (!isNUmeric) { + isValid = false; + if (showMsg) notify('Please enter only characters and digits', 'SHORT'); + } + } + + return isValid; +} + + + + +export function ValidateEmail(email) { + let val = false; + if (/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(email)) { + val = true; + } + return val; +} + +export const isDeviceTimeValid = async () => { + let serverDateTimeString = '' + try { + const state = await NetInfo.fetch(); + const lastCallString = await AsyncStorage.getItem(LAST_ServerAPI_CALL); + const lastCallTime = lastCallString ? parseInt(lastCallString, 10) : 0; + const now = Date.now(); + if (now - lastCallTime < 5 * 60 * 1000) { + console.log("Function call blocked to avoid frequent calls"); + return; // Don't call again within 5 minutes + } + await AsyncStorage.setItem(LAST_ServerAPI_CALL, now.toString()); + if (state.isConnected) { + const serverDT = await getServerDT(); + const checkTime = serverDT?.CheckTime; + if (typeof checkTime === 'string' && checkTime.trim() !== '') { + serverDateTimeString = checkTime; + } else { + console.warn('CheckTime is missing or invalid.'); + } + } else { + return false; + } + + if (serverDateTimeString == '' || !serverDateTimeString || typeof serverDateTimeString !== 'string') { + console.warn("Invalid serverDateTimeString input", serverDateTimeString); + await AsyncStorage.setItem(LAST_ServerAPI_CALL, lastCallString); + return false; + } + + // Parse server time + const [datePart, timePart] = serverDateTimeString.split(" "); + const [month, day, year] = datePart.split("/").map(Number); + const [hours, minutes, seconds] = timePart.split(":").map(Number); + const serverDate = new Date(year, month - 1, day, hours, minutes, seconds); + const deviceDate = new Date(); + // Date check + const isSameDate = + serverDate.getDate() === deviceDate.getDate() && + serverDate.getMonth() === deviceDate.getMonth() && + serverDate.getFullYear() === deviceDate.getFullYear(); + // Time diff in minutes + const diffMs = Math.abs(serverDate.getTime() - deviceDate.getTime()); + const diffMinutes = diffMs / (60 * 1000); + // If date different and time difference > 15 mins + console.log("server_datetime_with_localDateTime", isSameDate + "---", diffMinutes + "----" + serverDateTimeString + "\n" + serverDate + "\n" + deviceDate); + if (!isSameDate || diffMinutes > 10) { + await AsyncStorage.setItem(LAST_ServerAPI_CALL, lastCallString); + Alert.alert( + 'Device Date/Time Mismatch', + 'To continue, please ensure your device’s date and time are correct or set to automatic.', + [ + { + text: 'Go to Settings', + onPress: () => { + // Open Date & Time settings + if (Platform.OS === 'android') { + SendIntentAndroid.openSettings('android.settings.DATE_SETTINGS') + } else { + Linking.openURL('App-Prefs:General&path=DATE_AND_TIME'); // iOS specific + } + // Close the app after short delay + setTimeout(() => { + RNExitApp.exitApp(); // Exits the app + }, 1000); + }, + }, + ], + { cancelable: false } + ); + + return false; + } + return true; + } catch (error) { + console.error("Time validation error:", error); + return false; + } +}; + +export async function mergeStoreDistances(realStores, distances) { + // Create a lookup object for fast access + const distanceLookup = distances.reduce((acc, d) => { + acc[d.StoreId] = { + Distance: d.Distance, + Duration: d.Duration, + DistanceInMeters: d.DistanceInMeters + }; + return acc; + }, {}); // 👈 no type assertion in JS + + // Merge distance/duration into all stores (full merge) + const mergedAll = realStores.map(store => { + const match = distanceLookup[store.StoreId]; + return { + ...store, + Distance: match ? match.Distance : "0 meters", + Duration: match ? match.Duration : "0 Minutes", + DistanceInMeters: match ? match.DistanceInMeters : 0 // ✅ safe fallback + }; + }); + + return { mergedAll }; +} + +export async function getKPIFieldsWithSpecific() { + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + let q = `select * from Mapping_MenuConfiguration where KPIFieldName in ('Color_MSL','Color_NONMSL','Color_Competition') `; + + await txn.executeSql(q, [], async function (txn2, txnres) { + if (txnres.rows.length > 0) { + let arr = []; + for (var i = 0; i < txnres.rows.length; i++) { + let data = txnres.rows.item(i); + let isenable = data.KPIFieldEnable == 'true' || data.KPIFieldEnable == 1 || data.KPIFieldEnable == '1' ? true : false; + data['KPIFieldEnable'] = isenable; + arr.push(data); + if (i == txnres.rows.length - 1) { + resolve(arr) + } + } + } + else { + resolve([]) + } + }, function (txnE, txnerr) { console.log(txnerr); resolve([]) },); + }); + }).then((val) => { + return val; + }).catch((err) => { + console.log(err); + return []; + }); +} + + +export function getValidStores(_storeData = []) { + const filtered = _storeData.filter((store) => { + const lat = parseFloat(store.Latitude); + const lng = parseFloat(store.Longitude); + return lat !== 0 && lng !== 0; + }); + + return filtered.length > 0 ? filtered : []; + } + + const requestContactPermission = async () => { + if (Platform.OS === 'android') { + const result = await PermissionsAndroid.requestMultiple([ + PermissionsAndroid.PERMISSIONS.READ_CONTACTS, + PermissionsAndroid.PERMISSIONS.WRITE_CONTACTS, + ]); + + console.log('Contacts permissions:', result); + + return ( + result[PermissionsAndroid.PERMISSIONS.READ_CONTACTS] === PermissionsAndroid.RESULTS.GRANTED && + result[PermissionsAndroid.PERMISSIONS.WRITE_CONTACTS] === PermissionsAndroid.RESULTS.GRANTED + ); + } + return true; +}; + + +export const openWebBrowser = async (url) => { + console.log("webBUrl", url) + const supported = await Linking.canOpenURL(url); + if (supported) { + await Linking.openURL(url); + } else { + console.warn("Can't open this URL:", url); + } +} + +export const createContact = async (rawData) => { + const parsedData = parseRawData(rawData); + console.log('parsedData', parsedData); + if (!parsedData) return; + console.log("rawData", rawData) + const granted = await requestContactPermission(); + console.log("grante_a",granted) + if (!granted) return; + + Contacts.addContact({ + givenName: parsedData?.Name || 'CPM Helpline', + phoneNumbers: [{ label: parsedData?.Label || 'mobile', number: parsedData?.Value }], + }).then(() => { + notify('Contact saved successfully') + Linking.openURL(`tel:${parsedData?.Value}`) + }).catch(err => { + console.log('Error saving contact', err); + }); +}; + +const parseRawData = (data) => { + if (typeof data === 'string') { + try { + return JSON.parse(data); + } catch (e) { + console.log('Invalid JSON:', data); + return null; + } + } + return data; +}; + +export const requestLocationPermission = async () => { + if (Platform.OS === "android") { + const result = await PermissionsAndroid.requestMultiple([ + PermissionsAndroid.PERMISSIONS.ACCESS_FINE_LOCATION, + PermissionsAndroid.PERMISSIONS.ACCESS_COARSE_LOCATION, + ]); + + return ( + result["android.permission.ACCESS_FINE_LOCATION"] === + PermissionsAndroid.RESULTS.GRANTED || + result["android.permission.ACCESS_COARSE_LOCATION"] === + PermissionsAndroid.RESULTS.GRANTED + ); + } + return true; +}; + +export const getLocationWithFallback = async () => { + try { + return await getCurrentLocation(); + } catch { + return new Promise((resolve, reject) => { + const watchId = Geolocation.watchPosition( + pos => { + Geolocation.clearWatch(watchId); + resolve({ + latitude: pos.coords.latitude, + longitude: pos.coords.longitude, + }); + }, + reject, + { enableHighAccuracy: false } + ); + + setTimeout(() => { + Geolocation.clearWatch(watchId); + reject(new Error("Location timeout")); + }, 30000); + }); + } +}; + + + + diff --git a/PerformicsSrc/src/controller/route.js b/PerformicsSrc/src/controller/route.js new file mode 100644 index 0000000..e69de29 diff --git a/PerformicsSrc/src/crashlatics/crashlyticsLogger.js b/PerformicsSrc/src/crashlatics/crashlyticsLogger.js new file mode 100644 index 0000000..aff78ab --- /dev/null +++ b/PerformicsSrc/src/crashlatics/crashlyticsLogger.js @@ -0,0 +1,8 @@ +import * as Crashlytics from '@react-native-firebase/crashlytics'; + +export const logCrash = (error, context = '') => { + if (context) { + Crashlytics.setAttributes({ screen: context }); + } + Crashlytics.recordError(error); +}; \ No newline at end of file diff --git a/PerformicsSrc/src/data/Svcs_JSON-new.txt b/PerformicsSrc/src/data/Svcs_JSON-new.txt new file mode 100644 index 0000000..60014a7 --- /dev/null +++ b/PerformicsSrc/src/data/Svcs_JSON-new.txt @@ -0,0 +1,171 @@ +========================= +App Details Link - First screen + +[Fixed URL] +https://api.parinaam.in/api/GetAppDetails + +inputJSON +--------- +{ +"ProjectCode":28281 +} + +Output JSON +----------- +[ + { + "projectID": 1, + "projectName": "AbbottMNANC", + "description": "AbbottMNANC", + "activationStatus": true, + "ProjectCode": "28281", + "color_Dark": "#ffffff", + "color_Light": "#ffffff", + "text_Color_onDark": "#ffffff", + "text_Color_onLight": "#ffffff", + "text_Color_onWhite": "#ffffff", + "splash_logo_Url": "https://an.parinaam.in/images/abbottlogoold.png", + "login_logo_Url": "https://an.parinaam.in/images/abbottlogoold.png", + "forget_Password_on_LoginPage": true, + "menu_top_logo": "https://an.parinaam.in/images/abbottlogoold.png", + "baseURL": "https://An.parinaam.in/Webservice/Abbott_MnancService.svc/" + } +] +========================== + + + + + + +========================== +Login Service + +https://an.parinaam.in/Webservice/Abbott_MnancService.svc/Login + +Input JSON +------------ +{ + "UserName": "UserName", + "Password": "Password", + "Intime": "14:18:48", + "Latitude": 0, + "Longitude": 0, + "Appversion": "1.0", + "Attmode": "0", + "Networkstatus": "0", + "Manufacturer": "", + "ModelNumber": "", + "OSVersion": "", +} + + + +Output Json will have status and Security Token. Save this security Token for sending with each data download Call. + +========================== + + + + +========================== +Download data Generic + +https://an.parinaam.in/Webservice/Abbott_MnancService.svc/DownloadJson + + + +Notice Board / Landing Page +------------ +https://Anitemp.parinaam.in/Webservice/Abbott_MnancService.svc/DownloadJson +{ + Downloadtype: "Notice_Board_Sup", + UserName: userInfoStore.getUserName(), + Param1: empid, + Param2: "", + SecurityToken: userInfoStore.getSecurityToken(), + }; + + + + + +inputJSON - Supervisor Team List +--------- +{ + Downloadtype: "Sup_TeamList", + UserName: userInfoStore.getUserName(), + Param1: "", + Param2: "", + SecurityToken: userInfoStore.getSecurityToken(), +} + +Output Json Will vary based on 'Downloadtype' +========================= + + +Store List +------------ +https://Anitemp.parinaam.in/Webservice/Abbott_MnancService.svc/DownloadJson +{ + Downloadtype: "Sup_JourneyPlan", + UserName: userInfoStore.getUserName(), + Param1: empid, + Param2: "", + SecurityToken: userInfoStore.getSecurityToken(), + }; + + + +For Store Photos Screen - Category Drop down (Unique list from 'CategoryName' [To Upload 'CategoryID']) +------------ +https://Anitemp.parinaam.in/Webservice/Abbott_MnancService.svc/DownloadJson +{ + Downloadtype: "Master_Brand", + UserName: userInfoStore.getUserName(), + Param1: empid, + Param2: "", + SecurityToken: userInfoStore.getSecurityToken(), + }; + + + + +Abbott_Mnanc +=================================== +1.) https://anitemp.parinaam.in/Webservice/Abbott_MnancService.svc/StoreCoverageSup + +{ + "Mid": "0", + "StoreId": "3", + "EmpId": "3", + "VisitDate": "01\/06\/2022", + "Latitude": "0", + "Longitude": "0", + "ReasonId": "0", + "Remark": "test", + "CheckInImage": "4_testsup_StoreImg-20211217-122541.jpg", + "CheckoutImage": "", + "AppVersion": "1.0", + "UserId": "testmer", + "UploadStatus": "I" , + "SecurityToken" : "ACAAC716-DA37-49D0-8342-4549B5EF0EC220220106202706" +} + +2.) https://anitemp.parinaam.in/Webservice/Abbott_MnancService.svc/StoreCoverageStatusSup + +{ + "Mid": "6", + "Status": "I" +} + +3.) https://anitemp.parinaam.in/Webservice/Abbott_MnancService.svc/StoreCheckOutSup + +{ + "UserId": "testmer", + "EmpId": "3", + "StoreId": "3", + "Latitude": "0.0", + "Longitude": "0.0", + "Checkout_Date": "01/06/2022" +} \ No newline at end of file diff --git a/PerformicsSrc/src/data/Svcs_JSON.txt b/PerformicsSrc/src/data/Svcs_JSON.txt new file mode 100644 index 0000000..a6bb1f4 --- /dev/null +++ b/PerformicsSrc/src/data/Svcs_JSON.txt @@ -0,0 +1,99 @@ +========================= +App Details Link - First screen + +[Fixed URL] +https://api.parinaam.in/api/GetAppDetails + +inputJSON +--------- +{ +"ProjectCode":28281 +} + +Output JSON +----------- +[ + { + "projectID": 1, + "projectName": "AbbottMNANC", + "description": "AbbottMNANC", + "activationStatus": true, + "ProjectCode": "28281", + "color_Dark": "#ffffff", + "color_Light": "#ffffff", + "text_Color_onDark": "#ffffff", + "text_Color_onLight": "#ffffff", + "text_Color_onWhite": "#ffffff", + "splash_logo_Url": "https://an.parinaam.in/images/abbottlogoold.png", + "login_logo_Url": "https://an.parinaam.in/images/abbottlogoold.png", + "forget_Password_on_LoginPage": true, + "menu_top_logo": "https://an.parinaam.in/images/abbottlogoold.png", + "baseURL": "https://An.parinaam.in/Webservice/Abbott_MnancService.svc/" + } +] +========================== + + + + + + +========================== +Login Service + +https://an.parinaam.in/Webservice/Abbott_MnancService.svc/Login + +Input JSON +------------ +{ + "UserName": "UserName", + "Password": "Password", + "Intime": "14:18:48", + "Latitude": 0, + "Longitude": 0, + "Appversion": "1.0", + "Attmode": "0", + "Networkstatus": "0", + "Manufacturer": "", + "ModelNumber": "", + "OSVersion": "", +} + + + +Output Json will have status and Security Token. Save this security Token for sending with each data download Call. + +========================== + + + + +========================== +Download data Generic + +https://an.parinaam.in/Webservice/Abbott_MnancService.svc/DownloadJson + +inputJSON - Supervisor Team List +--------- +{ + Downloadtype: "Sup_TeamList", + UserName: userInfoStore.getUserName(), + Param1: "", + Param2: "", + SecurityToken: userInfoStore.getSecurityToken(), +} + +Output Json Will vary based on 'Downloadtype' +========================= + + +Store List +------------ +https://Anitemp.parinaam.in/Webservice/Abbott_MnancService.svc/DownloadJson +{ + Downloadtype: "Sup_JourneyPlan", + UserName: userInfoStore.getUserName(), + Param1: empid, + Param2: "", + SecurityToken: userInfoStore.getSecurityToken(), + }; diff --git a/PerformicsSrc/src/pushNotification/index.js b/PerformicsSrc/src/pushNotification/index.js new file mode 100644 index 0000000..e3cfef0 --- /dev/null +++ b/PerformicsSrc/src/pushNotification/index.js @@ -0,0 +1,44 @@ +import messaging, { getMessaging, getToken } from '@react-native-firebase/messaging'; +import AsyncStorage from '@react-native-async-storage/async-storage'; +import { getApp } from '@react-native-firebase/app'; + + + +async function requestUserPermission(os) { + const authStatus = await messaging().requestPermission(); + console.log("authStatus",authStatus) + const enabled = + authStatus === messaging.AuthorizationStatus.AUTHORIZED || + authStatus === messaging.AuthorizationStatus.PROVISIONAL; + + if (enabled) { + const token = await getFcmToken(os); + console.log(token, ' token ....firebase'); + return token; + } +} + +const getFcmToken = async os => { + let checkToken = await AsyncStorage.getItem('fcmToken'); + if (!checkToken) { + try { + // const fcmToken = await messaging().getToken(); + const app = getApp(); + const messagingInstance = getMessaging(app); // ✅ Use the modular API + const fcmToken = await getToken(messagingInstance); + if (!!fcmToken) { + await AsyncStorage.setItem( + 'fcmToken', + JSON?.stringify({fcmToken, PlatformOs: os}), + ); + return JSON?.stringify({fcmToken, PlatformOs: os}); + } + } catch (error) { + console.log('error in fcmToken', error); + } + } else { + return checkToken; + } +}; + +export default requestUserPermission; diff --git a/PerformicsSrc/src/reducers/contextProvider.js b/PerformicsSrc/src/reducers/contextProvider.js new file mode 100644 index 0000000..b2d0f08 --- /dev/null +++ b/PerformicsSrc/src/reducers/contextProvider.js @@ -0,0 +1,149 @@ +import React from 'react'; + +export const mapStateToProps = (state) => ({ + projectID: state.projectR.projectID, + projectName: state.projectR.projectName, + projectCode: state.projectR.projectCode, + projectData: state.projectR.projectData, + baseurl: state.projectR.baseurl, + imageUploadUrl: state.projectR.imageUploadUrl, + GeoFenceEnable: state.projectR.GeoFenceEnable, + GeoFenceRadius: state.projectR.GeoFenceRadius, + GFEnable_checkout: state.projectR.GFEnable_checkout, + GFRadius_checkout: state.projectR.GFRadius_checkout, + CheckOut_PhotoReq: state.projectR.CheckOut_PhotoReq, + + DBCI_GeoFenceEnable: state.projectR.DBCI_GeoFenceEnable, + DBCI_GeoFenceRadius: state.projectR.DBCI_GeoFenceRadius, + DBCO_GeoFenceEnable: state.projectR.DBCO_GeoFenceEnable, + DBCO_GeoFenceRadius: state.projectR.DBCO_GeoFenceRadius, + + CameraGallery: state.projectR.CameraGallery, + CheckInCameraGallery: state.projectR.CheckInCameraGallery, + DownloadKey: state.projectR.DownloadKey, + OQAD_TimeOut: state.projectR.OQAD_TimeOut, + ShowMenuType: state.projectR.ShowMenuType, + ShowStoreChecklist: state.projectR.ShowStoreChecklist, + RefImagePopUpTime: state.projectR.RefImagePopUpTime, + AdhocActivated: state.projectR.AdhocActivated, + + ShowBeatPlanList: state.projectR.ShowBeatPlanList, + ShowContractForm: state.projectR.ShowContractForm, + WarehouseShow: state.projectR.WarehouseShow, + Show_OldMTDReports: state.projectR.Show_OldMTDReports, + ShowDBPOSM: state.projectR.ShowDBPOSM, + ShowStoreAdd: state.projectR.ShowStoreAdd, + ShowStoreProfile: state.projectR.ShowStoreProfile, + ShowReportAfterCheckIn: state.projectR.ShowReportAfterCheckIn, + //arman + ShowCompactStoreProfile: state.projectR.ShowCompactStoreProfile, + + ShowNonMerList: state.projectR.ShowNonMerList, + Show_VisitorFeedBack: state.projectR.Show_VisitorFeedBack, + Show_ConsumerSection: state.projectR.Show_ConsumerSection, + // state.projectR.Show_ConsumerSection, + Clear_storage: state.projectR.Clear_storage, + ShowNonProgram: state.projectR.ShowNonProgram, + + StoreChecklistOnce: state.projectR.StoreChecklistOnce, + Gyancast: state.projectR.Gyancast, + WebViewDashboard: state.projectR.WebViewDashboard, + Chatbot: state.projectR.Chatbot, + StoreMapView: state.projectR.StoreMapView, + StoreRouteView: state.projectR.StoreRouteView, + NoCheckIn_Photo: state.projectR.NoCheckIn_Photo, + + FaceRecognition: state.projectR.FaceRecognition, + ShowStoreSearch: state.projectR.ShowStoreSearch, + PartialSaveAllow: state.projectR.PartialSaveAllow, + NonProgramLabel: state.projectR.NonProgramLabel, + ShowStoreSearchLabel: state.projectR.ShowStoreSearchLabel, + ShowStoreSearchLabel: state.projectR.ShowStoreSearchLabel, + CheckinOpenBackCamera: state.projectR.CheckinOpenBackCamera, + CheckoutOpenBackCamera: state.projectR.CheckoutOpenBackCamera, + CheckInSwitchingCamera: state.projectR.CheckInSwitchingCamera, + IR_CameraEnableOnApp: state.projectR.IR_CameraEnableOnApp, + IR_Creds: state.projectR.IR_Creds, + Chatbot_Creds: state.projectR.Chatbot_Creds, + ShowAddNewStore: state.projectR.ShowAddNewStore, + ShowSideMenuKYC: state.projectR.ShowSideMenuKYC, + AddNewStoreInJCP: state.projectR.AddNewStoreInJCP, + AddNewStoreVerificationReq: state.projectR.AddNewStoreVerificationReq, + companylogo: state.projectR.companylogo, + splashlogo: state.projectR.splashlogo, + drawerlogo: state.projectR.drawerlogo, + AppDashboardReports: state.projectR.AppDashboardReports, + GroomingObj: state.projectR.GroomingObj, + pPAYObj: state.projectR.pPAYObj, + + AppDashboardWebViewObj: state.projectR.AppDashboardWebViewObj, + islogin: state.sessionR.islogin, + firsttime: state.sessionR.firsttime, + securityToken: state.sessionR.securityToken, + mpin: state.sessionR.mpin, + sessionData: state.sessionR.sessionData, + UserId: state.sessionR.UserId, + session_name: state.sessionR.session_name, + DarkMode: state.themeR.DarkMode, + PageTheme: state.themeR.PageTheme, + customStyle: state.themeR.customStyle, + globalStyle: state.themeR.globalStyle, + customeButtonStyle: state.themeR.customeButtonStyle, + ModalStyle: state.themeR.ModalStyle, + isDataDownloaded: state.globalR.isDataDownloaded, + startDownload: state.globalR.startDownload, + startUpload: state.globalR.startUpload, + isInternetAvailable: state.globalR.isInternetAvailable, + showConnChange: state.globalR.showConnChange, + AutoGoToPrev: state.globalR.AutoGoToPrev, + StaticText: state.globalR.StaticText, + isTodayLoginExists: state.globalR.isTodayLoginExists, + isTodayDataDownloaded: state.globalR.isTodayDataDownloaded, + AllKPIDisable: state.globalR.AllKPIDisable, + VisitDate: state.sessionR.VisitDate, + Allow_Change_Password: state.projectR.Allow_Change_Password, + forget_Password_on_LoginPage: state.projectR.forget_Password_on_LoginPage, + // notifications + badgeCount: state.notificationR.badgeCount, + notifications: state.notificationR.notifications + // StorePhotosDone:state.globalR.StorePhotosDone, + +} + +); + + +export const mapDispatchToProps = (dispatch) => { + return { + get_project: () => dispatch({ type: 'GETPROJECT' }), + set_project: (pdata) => dispatch({ type: 'SETPROJECT', data: pdata }), + get_session: () => dispatch({ type: 'GETSESSION' }), + set_session: (data) => dispatch({ type: 'SETSESSION', data: data }), + set_DashboardReports: (data) => dispatch({ type: 'SET_DASHBOARD_REPORTS', data: data }), + set_GroomingObj: (data) => dispatch({ type: 'SET_GROOMING_OBJ', data: data }), + set_pPAYObj: (data) => dispatch({ type: 'SET_PPAY_OBJ', data: data }), + + set_AppDashboardWebViewObj: (data) => dispatch({ type: 'SET_AppDashboardWebView_OBJ', data: data }), + + set_user_details: (data) => dispatch({ type: 'SET_USER_DETAILS', data: data }), + set_mpin: (data) => dispatch({ type: 'SET_MPIN', data: data }), + setTheme: (DarkMode) => dispatch({ type: 'SET_THEME', DarkMode: DarkMode }), + setThemeStyles: (pT, cS, gS, mS, cbS) => dispatch({ type: 'SET_THEME_STYLES', PageTheme: pT, customStyle: cS, globalStyle: gS, ModalStyle: mS, customeButtonStyle: cbS }), + setGlobalData: (data) => dispatch({ type: 'SET_GLOBAL_DATA', data: data }), + set_startDownload: (data) => dispatch({ type: 'START_DOWNLOAD', data: data }), + set_startUpload: (data) => dispatch({ type: 'START_UPLOAD', data: data }), + set_networkStatus: (data) => dispatch({ type: 'SET_NETWORK', data: data }), + show_ConnChange: (data) => dispatch({ type: 'SHOW_CONCHANGE', data: data }), + set_autoback: (data) => dispatch({ type: 'AUTO_BACK', data: data }), + setStaticText: (data) => dispatch({ type: 'SET_STATIC_TEXT', data: data }), + setLoginExists: (data) => dispatch({ type: 'SET_LOGIN_EXISTS', data: data }), + setTodayDataExists: (data) => dispatch({ type: 'SET_TODAY_DATA_EXISTS', data: data }), + set_AllKPIDisable: (data) => dispatch({ type: 'ALLKPIDISABLE', data: data }), + set_VisitDate: (data) => dispatch({ type: 'VISITDATE', data: data }), + // for notification + get_badgecount: () => dispatch({ type: 'GET_BADGE_COUNT' }), + set_badgecount: (data) => dispatch({ type: 'SET_BADGE_COUNT', data: data }), + get_notificationlist: () => dispatch({ type: 'GET_NOTIFICATIONS' }), + set_notificationlist: (data) => dispatch({ type: 'SET_NOTIFICATIONS', data: data }), + } +} \ No newline at end of file diff --git a/PerformicsSrc/src/reducers/darkmodeReducer.js b/PerformicsSrc/src/reducers/darkmodeReducer.js new file mode 100644 index 0000000..193a543 --- /dev/null +++ b/PerformicsSrc/src/reducers/darkmodeReducer.js @@ -0,0 +1,15 @@ +import React from "react"; + +const initialState = { + DarkMode: false +}; + +const darkmodeReducer = (state = initialState, action) => { + switch(action.type) { + case 'SET_THEME': + return {...state,DarkMode:action.DarkMode}; + default: + return state; + } +} +export default darkmodeReducer; \ No newline at end of file diff --git a/PerformicsSrc/src/reducers/globalDataReducer.js b/PerformicsSrc/src/reducers/globalDataReducer.js new file mode 100644 index 0000000..02d0744 --- /dev/null +++ b/PerformicsSrc/src/reducers/globalDataReducer.js @@ -0,0 +1,42 @@ +import React from "react"; + +const initialState = { + isDataDownloaded: false, + startDownload:false, + startUpload:false, + isInternetAvailable:true, + showConnChange:false, + AutoGoToPrev:false, + StaticText:{}, + isTodayLoginExists: false, + isTodayDataDownloaded: false, + AllKPIDisable:false, +}; + +const globalDataReducer = (state = initialState, action) => { + switch(action.type) { + case 'SET_GLOBAL_DATA': + return {...state,isDataDownloaded:action.data.isDataDownloaded}; + case 'START_DOWNLOAD': + return {...state,startDownload:action.data.startDownload}; + case 'START_UPLOAD': + return {...state,startUpload:action.data.startUpload}; + case 'SET_NETWORK': + return {...state,isInternetAvailable:action.data?(action.data.isInternetAvailable?action.data.isInternetAvailable:false):false}; + case 'SHOW_CONCHANGE': + return {...state,showConnChange:action.data?(action.data.showConnChange?action.data.showConnChange:false):false}; + case 'AUTO_BACK': + return {...state,AutoGoToPrev:action.data?(action.data.AutoGoToPrev?action.data.AutoGoToPrev:false):false}; + case 'SET_STATIC_TEXT': + return {...state,StaticText:action.data?action.data:{}}; + case 'SET_LOGIN_EXISTS': + return {...state,isTodayLoginExists:action.data?action.data:false}; + case 'SET_TODAY_DATA_EXISTS': + return {...state,isTodayDataDownloaded:action.data?action.data:false}; + case 'ALLKPIDISABLE': + return {...state,AllKPIDisable:action.data?action.data:false}; + default: + return state; + } +} +export default globalDataReducer; \ No newline at end of file diff --git a/PerformicsSrc/src/reducers/notificationReducer.js b/PerformicsSrc/src/reducers/notificationReducer.js new file mode 100644 index 0000000..61db578 --- /dev/null +++ b/PerformicsSrc/src/reducers/notificationReducer.js @@ -0,0 +1,29 @@ + +const initialState = { + loading: false, + badgeCount: 0, + notifications: {}, + error: null, +}; + +const notificationReducer = (state = initialState, action) => { + // console.log('Action dispatched---', action); + switch (action.type) { + case 'SET_LOADING': + return { ...state, loading: action.data.loading }; + case 'SET_BADGE_COUNT': + return { ...state, badgeCount: action.data.badgeCount}; + case 'SET_NOTIFICATIONS': + console.log('Reducer - notifications:', action.data.notifications); + return { ...state, notifications: action.data.notifications}; + case 'GET_NOTIFICATIONS': + return { ...state }; + case 'FETCH_NOTIFICATIONS_FAILURE': + return { ...state, error: action.data.error }; + default: + return state; + } + }; + + +export default notificationReducer; \ No newline at end of file diff --git a/PerformicsSrc/src/reducers/projectReducers.js b/PerformicsSrc/src/reducers/projectReducers.js new file mode 100644 index 0000000..7e80264 --- /dev/null +++ b/PerformicsSrc/src/reducers/projectReducers.js @@ -0,0 +1,149 @@ +import React from "react"; +import { NonProgramLabel_def, StoreSearch_def, OQAD_TimeConst } from "../constants/constants"; + +const initialState = { + projectID: '', + projectName: "", + projectCode: "", + projectData: {}, + baseurl: '', + companylogo: '', + splashlogo: '', + drawerlogo: '', + imageUploadUrl: '', + GeoFenceEnable: false, + GeoFenceRadius: 0, + GFEnable_checkout: false, + GFRadius_checkout: 0, + DBCI_GeoFenceEnable: false, + DBCI_GeoFenceRadius: 0, + DBCO_GeoFenceEnable: false, + DBCO_GeoFenceRadius: 0, + CheckOut_PhotoReq: false, + CameraGallery: false, + CheckInCameraGallery: false, + DownloadKey: '', + OQAD_TimeOut: OQAD_TimeConst, + ShowMenuType: false, + ShowStoreChecklist: false, + ShowBeatPlanList: false, + ShowContractForm: false, + WarehouseShow: false, + ShowDBPOSM: false, + ShowStoreAdd: false, + ShowAddNewStore: false, + ShowSideMenuKYC: false, + ShowStoreProfile: false, + ShowCompactStoreProfile: false, + ShowReportAfterCheckIn: false, + ShowNonMerList: false, + Show_VisitorFeedBack: false, + Show_ConsumerSection: false, + ShowNonProgram: false, + StoreChecklistOnce: false, + FaceRecognition: false, + AddNewStoreInJCP: false, + AddNewStoreVerificationReq: false, + ShowStoreSearch: false, + ShowStoreSearchLabel: StoreSearch_def, + Clear_storage: false, + PartialSaveAllow: false, + NonProgramLabel: NonProgramLabel_def, + CheckinOpenBackCamera: false, + CheckoutOpenBackCamera: false, + CheckInSwitchingCamera: false, + IR_CameraEnableOnApp: false, + RefImagePopUpTime: 0, + AdhocActivated: "", + IR_Creds: {}, + Chatbot_Creds: {}, + AppDashboardReports: {}, + Show_OldMTDReports: true, + Allow_Change_Password: false, + forget_Password_on_LoginPage: false, + Gyancast: false, + WebViewDashboard: false, + Chatbot: false, + StoreMapView: false, + StoreRouteView: false, + NoCheckIn_Photo: false, + GroomingObj : {}, + pPAYObj: {}, + AppDashboardWebViewObj : "", + +}; + +const projectReducer = (state = initialState, action) => { + switch (action.type) { + case 'GETPROJECT': + return { ...state }; + case 'SETPROJECT': + const pdata = action.data || {}; + let newstate = { + projectID: pdata.pid, projectName: pdata.pname, projectCode: pdata.pcode, projectData: pdata.alldata, baseurl: pdata.baseurl, companylogo: (pdata.companylogo || ''), splashlogo: (pdata.splashlogo || ''), drawerlogo: (pdata.drawerlogo || ''), imageUploadUrl: (pdata.imageUploadUrl || ''), + GeoFenceEnable: (pdata.GeoFenceEnable || false), GeoFenceRadius: (pdata.GeoFenceRadius || 0), GFEnable_checkout: (pdata.GFEnable_checkout || false), GFRadius_checkout: (pdata.GFRadius_checkout || 0), CheckOut_PhotoReq: (pdata.CheckOut_PhotoReq != null ? pdata.CheckOut_PhotoReq : false), + CameraGallery: (pdata.CameraGallery != null ? pdata.CameraGallery : false), CheckInCameraGallery: (pdata.CheckInCameraGallery != null ? pdata.CheckInCameraGallery : false), DownloadKey: (pdata.DownloadKey != null ? pdata.DownloadKey : ''), + OQAD_TimeOut: (pdata.OQAD_TimeOut != null ? pdata.OQAD_TimeOut : OQAD_TimeConst), ShowMenuType: (pdata.ShowMenuType != null ? pdata.ShowMenuType : false), ShowStoreChecklist: (pdata.ShowStoreChecklist != null ? pdata.ShowStoreChecklist : false), ShowBeatPlanList: (pdata.ShowBeatPlanList != null ? pdata.ShowBeatPlanList : false), + ShowDBPOSM: (pdata.ShowDBPOSM != null ? pdata.ShowDBPOSM : false), ShowStoreAdd: (pdata.ShowStoreAdd != null ? pdata.ShowStoreAdd : false), ShowAddNewStore: (pdata.ShowAddNewStore != null ? pdata.ShowAddNewStore : false), ShowSideMenuKYC: (pdata.ShowSideMenuKYC != null ? pdata.ShowSideMenuKYC : false), ShowStoreProfile: (pdata.ShowStoreProfile != null ? pdata.ShowStoreProfile : false), + ShowCompactStoreProfile: (pdata.ShowCompactStoreProfile != null ? pdata.ShowCompactStoreProfile : false), + ShowReportAfterCheckIn: (pdata.ShowReportAfterCheckIn != null ? pdata.ShowReportAfterCheckIn : false), + DBCI_GeoFenceEnable: (pdata.DBCI_GeoFenceEnable || false), DBCI_GeoFenceRadius: (pdata.DBCI_GeoFenceRadius || 0), DBCO_GeoFenceEnable: (pdata.DBCO_GeoFenceEnable || false), DBCO_GeoFenceRadius: (pdata.DBCO_GeoFenceRadius || 0), ShowNonMerList: (pdata.ShowNonMerList != null ? pdata.ShowNonMerList : false), + Show_VisitorFeedBack: (pdata.Show_VisitorFeedBack || false), + ShowNonProgram: (pdata.ShowNonProgram != null ? pdata.ShowNonProgram : false), + StoreChecklistOnce: (pdata.StoreChecklistOnce != null ? pdata.StoreChecklistOnce : false), + FaceRecognition: (pdata.FaceRecognition != null ? pdata.FaceRecognition : false), + Gyancast: (pdata.Gyancast != null ? pdata.Gyancast : false), + Chatbot: (pdata.Chatbot != null ? pdata.Chatbot : false), + WebViewDashboard: (pdata.WebViewDashboard !=null ? pdata.WebViewDashboard : false), + StoreMapView: (pdata.StoreMapView != null ? pdata.StoreMapView : false), + StoreRouteView: (pdata.StoreRouteView != null ? pdata.StoreRouteView : false), + //StoreMapView: true, + //StoreRouteView: true, + NoCheckIn_Photo: (pdata.NoCheckIn_Photo != null ? pdata.NoCheckIn_Photo : false), + AddNewStoreInJCP: (pdata.AddNewStoreInJCP != null ? pdata.AddNewStoreInJCP : false), + AddNewStoreVerificationReq: (pdata.AddNewStoreVerificationReq != null ? pdata.AddNewStoreVerificationReq : false), + ShowStoreSearch: (pdata.ShowStoreSearch != null ? pdata.ShowStoreSearch : false), + ShowStoreSearchLabel: (pdata.ShowStoreSearchLabel != null ? pdata.ShowStoreSearchLabel : StoreSearch_def), + Show_ConsumerSection: (pdata.Show_ConsumerSection || false), + Clear_storage: (pdata.Clear_storage || false), + PartialSaveAllow: (pdata.PartialSaveAllow || false), + NonProgramLabel: (pdata.NonProgramLabel != null ? pdata.NonProgramLabel : NonProgramLabel_def), + CheckinOpenBackCamera: (pdata.CheckinOpenBackCamera != null ? pdata.CheckinOpenBackCamera : false), + CheckoutOpenBackCamera: (pdata.CheckoutOpenBackCamera != null ? pdata.CheckoutOpenBackCamera : false), + CheckInSwitchingCamera: (pdata.CheckInSwitchingCamera != null ? pdata.CheckInSwitchingCamera : false), + IR_CameraEnableOnApp: (pdata.IR_CameraEnableOnApp || false), + IR_Creds: (pdata.IR_Creds != null ? pdata.IR_Creds : {}), + Chatbot_Creds: (pdata.Chatbot_Creds != null ? pdata.Chatbot_Creds : {}), + ShowAddNewStore: (pdata.ShowAddNewStore != null ? pdata.ShowAddNewStore : false), + ShowSideMenuKYC: (pdata.ShowSideMenuKYC != null ? pdata.ShowSideMenuKYC : false), + RefImagePopUpTime: (pdata.RefImagePopUpTime != null ? pdata.RefImagePopUpTime : 0), + ShowContractForm: (pdata.ShowContractForm != null ? pdata.ShowContractForm : false), + WarehouseShow: (pdata.WarehouseShow != null ? pdata.WarehouseShow : false), + Show_OldMTDReports: (pdata.Show_OldMTDReports == 1 || pdata.Show_OldMTDReports == "true" ? true : false), + + AdhocActivated: (pdata.AdhocActivated != null ? pdata.AdhocActivated : ""), + Allow_Change_Password: (pdata.Allow_Change_Password != null ? pdata.Allow_Change_Password : false), forget_Password_on_LoginPage: (pdata.forget_Password_on_LoginPage != null ? pdata.forget_Password_on_LoginPage : false) + + }; + // console.log("pdata.Clear_storage Clear_storage",Clear_storage) + + return Object.assign({}, state, newstate); + case 'SET_DASHBOARD_REPORTS': + return { ...state, AppDashboardReports: action.data }; + + case 'SET_GROOMING_OBJ': + console.log("fkgfgmkmgh",action.data) + return { ...state, GroomingObj: action.data }; + + case 'SET_AppDashboardWebView_OBJ': + console.log("SET_AppDashboardWebView_OBJ",action.data) + return { ...state, AppDashboardWebViewObj: action.data }; + + case 'SET_PPAY_OBJ': + console.log("pPAYObj",action.data) + return { ...state, pPAYObj: action.data }; + default: + return state; + } +} +export default projectReducer; \ No newline at end of file diff --git a/PerformicsSrc/src/reducers/sessionReducer.js b/PerformicsSrc/src/reducers/sessionReducer.js new file mode 100644 index 0000000..44d47a4 --- /dev/null +++ b/PerformicsSrc/src/reducers/sessionReducer.js @@ -0,0 +1,30 @@ +import React from "react"; + +const initialState = { + islogin: false, + securityToken:'', + firsttime:true, + mpin:'', + session_name:'', + sessionData:{}, + UserId:'', + VisitDate:null, +}; + +const sessionReducer = (state = initialState, action) => { + switch(action.type) { + case 'GETSESSION': + return {...state}; + case 'SETSESSION': + return {...state,islogin:action.data.islogin,firsttime:action.data.firsttime,securityToken:action.data.securityToken,sessionData:action.data.sessionData,UserId:action.data.UserId}; + case 'SET_USER_DETAILS': + return {...state,session_name:action.data.session_name}; + case 'SET_MPIN': + return {...state,mpin:action.data.mpin}; + case 'VISITDATE': + return {...state,VisitDate:action.data.VisitDate}; + default: + return state; + } +} +export default sessionReducer; \ No newline at end of file diff --git a/PerformicsSrc/src/reducers/themeReducer.js b/PerformicsSrc/src/reducers/themeReducer.js new file mode 100644 index 0000000..eceb757 --- /dev/null +++ b/PerformicsSrc/src/reducers/themeReducer.js @@ -0,0 +1,25 @@ +import React from "react"; +import {StatusBar,StyleSheet,} from 'react-native'; + +const initialState = { + PageTheme: {}, + customStyle: StyleSheet.create({}), + globalStyle: StyleSheet.create({}), + customeButtonStyle:StyleSheet.create({}), + ModalStyle:StyleSheet.create({}), + DarkMode:false, +}; + +const themeReducer = (state = initialState, action) => { + switch(action.type) { + case 'GET_THEME': + return {...state}; + case 'SET_THEME_STYLES': + return {...state,PageTheme:action.PageTheme,customStyle:action.customStyle,globalStyle:action.globalStyle,ModalStyle:action.ModalStyle,customeButtonStyle:action.customeButtonStyle}; + case 'SET_THEME': + return {...state,DarkMode:action.DarkMode}; + default: + return state; + } +} +export default themeReducer; \ No newline at end of file diff --git a/PerformicsSrc/src/screens/AddStore.js b/PerformicsSrc/src/screens/AddStore.js new file mode 100644 index 0000000..8b65e54 --- /dev/null +++ b/PerformicsSrc/src/screens/AddStore.js @@ -0,0 +1,1006 @@ +import React, { useState, useEffect, useRef } from 'react'; +import Container from '../components/container'; +import { useFocusEffect, useRoute } from '@react-navigation/native'; +import { globalStyles, customStyles, GetPageTheme } from "../styles/Global"; +import { Image, TextInput, View, Text, ScrollView, TouchableOpacity, Platform, DeviceEventEmitter, PermissionsAndroid, Keyboard, SectionList, StyleSheet } from 'react-native'; +import { connect } from 'react-redux'; +import { mapStateToProps, mapDispatchToProps } from '../reducers/contextProvider'; +import { notify } from '../components/notify'; +import moment from 'moment'; +import { clear_item, get_item } from '../components/localStorage'; +import CustomHeader from '../components/customHeader'; +import { Entypo, Ionicons, MaterialCommunityIcons } from '../components/icons'; +import { UploadData2, ValidateEmail, checkRange, getAllFileForAFolder, restore_ImageWithMetaData, uploadContractFormFiles, validateNumber, validateNumber12, validateStoreAddStoreInfoText } from '../controller/functions'; +import CustomLoader from '../components/CustomLoader'; +import * as RNFS from 'react-native-fs'; +import { db, CoverageImagePath, AppVersion, AddStoreImagePath, ImageFolderPath, URL_IMAGE } from '../constants/constants'; +import MultiSelect from 'react-native-multiple-select'; +import ModalSelector from 'react-native-modal-selector' + +import CustomModal from '../components/CustomModal'; +import { _checkLocationPermission } from '../components/geolocation'; + +import { METHODS, getMethodName } from '../constants/methodNames'; +import { UploadImagesWithoutWait } from '../constants/uploadData'; +import LinearGradient from 'react-native-linear-gradient'; + +import CameraImg3 from '../assets/performics/camera_tick.svg'; +import CameraImg2 from '../assets/performics/camera_icon.svg'; +import CameraImg from '../assets/performics/camera_front_image.svg' +import GradientButton from '../components/gradientButton'; +import { ConfirmSaveAlert } from '../components/alert'; + + +function AddStore(props) { + const route = useRoute(); + const ST = props.StaticText || {}; + // get all theme styles acc to current theme set + const PageTheme = GetPageTheme(props.DarkMode, route.name); + const customStyle = customStyles(props.DarkMode, route.name); + const globalStyle = globalStyles(props.DarkMode, route.name); + + const [processing, setProcessing] = useState(false); + const [loaderTitle, setLoaderTitle] = useState(); + const [rerenderdata, setrerenderdata] = useState([]); + // New + const [StoreImage, setStoreImage] = useState(''); + const [SelectedImg, setSelectedImg] = useState(''); + const [StoreImgPath, setStoreImgPath] = useState(''); + const [showCamera, setShowCamera] = useState(false); + const [addstoreconfigdata, setAddStoreConfigData] = useState([]) + const [storeData, setStoreData] = useState({}); + const [showModal, setShowModal] = useState(false); + const [showModalAlert, setShowModalAlert] = useState(false); + const [showDeffBeatAlert, setShowDeffBeatAlert] = useState(false); + + const selectimages = useRef({}) + const addstoreconfigCurr = useRef([]) + const [glb_gst, setglb_gst] = useState(''); + const [beatDay, setBeatDay] = useState(''); + + const d1 = new Date(); + const d2 = moment(d1).format('MM/DD/YYYY'); + const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; + const handleUpload = () => { + console.log("alerttt", validate()) + let rse = validate(); // Run validation + if (!rse) return; + console.log("Setting showModal to true"); // Debugging + + const today = getTodayName(); + console.log("today", today) + if (beatDay && beatDay != '' && beatDay !== today) { + setShowDeffBeatAlert(true) + } else { + setShowModalAlert(true); // Show the confirmation modal + } + }; + + function getTodayName() { + const days = [ + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday", + "Sunday", + ]; + + let dayNumber = new Date().getDay(); // Sunday = 0, Monday = 1... + dayNumber = dayNumber === 0 ? 7 : dayNumber; // Sunday -> 7 + return days[dayNumber - 1]; // return weekday name + } + + function onSaveCancel() { + setShowModalAlert(false); + } + useEffect(() => { + getdata(); + const onImageCapturedSubs = DeviceEventEmitter.addListener('onImageCaptured', (imgData) => { getImage(imgData) }); + return function cleanup() { + onImageCapturedSubs.remove(); + }; + }, []) + + + const validate = () => { + let isValid = true; + let rs = addstoreconfigdata + .map(section => section.data) + .flat() + for (let i = 0; i < rs.length; i++) { + const item = rs[i]; + if (item.answer === "" && item.IsMandatory === "true" && item.IsFieldShow == "true" && item.QuestionType != 'Image' && (item.FieldName != 'GSTNo' || item.FieldName != 'AadharNo')) { + isValid = false; + notify(`Please ${item.QuestionType == 'Text' || item.QuestionType == 'Number' ? 'Fill ' : 'Select'} ${item.DisplayName}`) + break; // Exit loop early + } if (item.answer === "" && item.IsMandatory === "true" && item.IsFieldShow == "true" && item.QuestionType == 'Image' && (item.FieldName != 'GSTImage' || item.FieldName != 'AadharFrontImage' || item.FieldName != 'AadharBackImage')) { + isValid = false; + notify(`Please Capture ${item.DisplayName}`) + break; // Exit loop early + }else if (item.answer != null && item.answer != '' && item.IsFieldShow == "true" && (item.QuestionType == 'Text' || item.QuestionType == 'Number') && (item.FieldName == "StoreName" || item.FieldName == "Address"||item.FieldName == "Locality"||item.FieldName == "ContactPerson"||item.FieldName == "BankName"||item.FieldName == "AccountHolderName") && item.answer.length < 3) { + isValid = false; + notify(`Please fill minimum 3 ${item.QuestionType == 'Text' ? 'Character ' : 'Digit'} ${item.DisplayName}`) + break; + } + else if (item.answer != null && item.answer != '' && item.IsFieldShow == "true" && (item.QuestionType == 'Text' || item.QuestionType == 'Number') && item.FieldName == "Pincode" && item.answer.length < 6) { + isValid = false; + notify(`Please fill minimum 6 ${item.QuestionType == 'Text' ? 'Character ' : 'Digit'} ${item.DisplayName}`) + break; + } else if (item.answer != null && item.answer != '' && item.IsFieldShow == "true" && (item.QuestionType == 'Text' || item.QuestionType == 'Number') && item.FieldName == 'Phone' && item.answer.length < 10) { + isValid = false; + notify(`Please fill correct ${item.DisplayName}`) + break; + } + else if (item.answer != null && item.answer != '' && item.IsFieldShow == "true" && (item.QuestionType == 'Text' || item.QuestionType == 'Email') && item.FieldName == 'Email' && !emailRegex.test(item.answer)) { + isValid = false; + notify(`Please fill correct ${item.DisplayName}`) + break; + } + else if (item.answer === "" && item.IsMandatory === "true" && item.IsFieldShow == "true" && item.FieldName == 'TaxType' && (item.FieldName != 'GSTNo')) { + isValid = false; + notify(`Please Select ${item.DisplayName}`) + break; // Exit loop early + } + + else if (item.IsMandatory === "true" && item.IsFieldShow == "true" && (item.FieldName == 'GSTNo' || item.FieldName == 'GSTImage' || item.FieldName == 'AadharNo' || item.FieldName == 'AadharFrontImage' || item.FieldName == 'AadharBackImage') && !validatespecific()) { + isValid = false; + break; // Exit loop early + } else if (item.answer != null && item.answer != "" && item.IsFieldShow == "true" && item.FieldName == 'GSTNo' && item.answer.length < 15) { + notify(`Please fill correct ${item.DisplayName}`) + isValid = false; + break; + } else if (item.answer != null && item.answer != "" && item.IsFieldShow == "true" && item.FieldName == 'AadharNo' && item.answer.length < 12) { + notify(`Please fill correct ${item.DisplayName}`) + isValid = false; + break; + } + + else if (item.answer != null && item.answer != '' && item.IsFieldShow == "true" && (item.QuestionType == 'Text' || item.QuestionType == 'Number') && item.FieldName == 'Pan' && item.answer.length < 10) { + isValid = false; + notify(`Please fill correct ${item.DisplayName}`) + break; + } + else if (item.answer != null && item.answer != '' && item.IsFieldShow == "true" && (item.QuestionType == 'Text' || item.QuestionType == 'Number') && (item.FieldName == 'AccountNo') && item.answer.length < 8) { + isValid = false; + notify(`Please fill correct ${item.DisplayName}`) + break; + } + else if (item.answer != null && item.answer != '' && item.IsFieldShow == "true" && (item.QuestionType == 'Text' || item.QuestionType == 'Number') && (item.FieldName == 'IFSC') && item.answer.length < 11) { + isValid = false; + notify(`Please fill correct ${item.DisplayName}`) + break; + } + } + return isValid; + }; + + + const validatespecific = () => { + let isValid = true; + let rs = addstoreconfigdata + .map(section => section.data) + .flat() + for (let i = 0; i < rs.length; i++) { + const item = rs[i]; + console.log("dattttt", item) + if (glb_gst == 'GST') { + if (item.answer === "" && item.IsMandatory === "true" && item.IsFieldShow == "true" && item.FieldName == 'GSTNo') { + notify(`Please fill ${item.DisplayName}`) + isValid = false; + break; + } else if (item.answer != null && item.answer != "" && item.IsFieldShow == "true" && item.FieldName == 'GSTNo' && item.answer.length < 15) { + notify(`Please fill correct ${item.DisplayName}`) + isValid = false; + break; + } else if (item.answer === "" && item.IsMandatory === "true" && item.IsFieldShow == "true" && item.FieldName == 'GSTImage') { + notify(`Please Capture ${item.DisplayName}`) + isValid = false; + break; + } + } else if (glb_gst == 'Non GST') { + if (item.answer === "" && item.IsMandatory === "true" && item.IsFieldShow == "true" && item.FieldName == 'AadharNo') { + notify(`Please fill ${item.DisplayName}`) + isValid = false; + break; + } else if (item.answer != null && item.answer != "" && item.IsFieldShow == "true" && item.FieldName == 'AadharNo' && item.answer.length < 12) { + notify(`Please fill correct ${item.DisplayName}`) + isValid = false; + break; + } else if (item.answer === "" && item.IsMandatory === "true" && item.IsFieldShow == "true" && (item.FieldName == 'AadharFrontImage' || item.FieldName == 'AadharBackImage')) { + notify(`Please Capture ${item.DisplayName}`) + isValid = false; + break; + } + } + + } + + return isValid; + }; + + async function getdata() { + try { + let token = await get_item('loginToken'); + let loginInfo = await get_item('loginInfo'); + const loginDetails = JSON.parse(loginInfo); + let desg = loginDetails.Designation || ''; + + await db.transaction(async (txn) => { + let q = `SELECT DISTINCT BlockName,DisplayName,DefaultValue,QuestionType,ListJson, + CASE WHEN IsMandatory = 1 THEN 'true' ELSE 'false' END AS IsMandatory, + CASE WHEN IsFieldShow = 1 THEN 'true' ELSE 'false' END AS IsFieldShow, + FieldName, + CASE + WHEN FieldName = 'Pincode' THEN 6 + WHEN FieldName = 'Phone' THEN 10 + WHEN FieldName = 'GSTNo' THEN 15 + WHEN FieldName = 'AadharNo' THEN 12 + WHEN FieldName = 'Pan' THEN 10 + WHEN FieldName = 'IFSC' THEN 11 + WHEN FieldName = 'AccountNo' THEN 20 + ELSE 50 + END AS MaxLength +FROM Mapping_AddStoreConfiguration `; + + await txn.executeSql(q, [], async (txn2, txnres) => { + if (txnres.rows.length > 0) { + let arr = []; + for (var i = 0; i < txnres.rows.length; i++) { + let data = txnres.rows.item(i); + console.log("querrrrrr--data", data) + if (data) { + arr.push({ ...data, answer: '', answerid: '' }); + } + } + + // Ensure valid transformation + const groupedData = arr.reduce((acc, item, index) => { + // if (item?.IsFieldShow === "true") { + let section = acc.find(sec => sec?.title === item?.BlockName); + if (section) { + section.data.push(item); + } else { + acc.push({ title: item?.BlockName, isShow: item?.IsFieldShow, data: [item] }); + } + // } + return acc; + }, []); + + if (Array.isArray(groupedData)) { + setAddStoreConfigData([...groupedData]); + } else { + console.error("Invalid Data Structure:", groupedData); + } + + setrerenderdata(prev => !prev); + } else { + console.warn("No Data Found in Mapping_AddStoreConfiguration Table"); + } + }, (txnE, txnerr) => { console.error("SQL Error:", txnerr); }); + }); + } catch (err) { + console.error("Error in getdata:", err); + } + } + + async function upload_Data() { + setShowModalAlert(false) + // console.log("addstoreconfigdata", addstoreconfigdata); + let d1 = new Date(); + let d2 = moment(d1).format('MM/DD/YYYY'); + let fpath = Platform.OS == 'ios' ? StoreImgPath.replace('file://', '') : StoreImgPath; + console.log(fpath, 'path of imaggege'); + setProcessing(true); + + setLoaderTitle('Uploading Data...'); + + let rs = addstoreconfigdata + .map(section => section.data) + .flat() + .reduce((acc, curr) => { + //console.log("data_verify", curr) + // console.log("data_verify1", acc) + const value = ((curr.answerid == "" || curr.answerid == "0" || curr.QuestionType == "Image") && curr.IsFieldShow == "true") ? curr.answer == "0" ? "" : curr.answer : ((curr.IsFieldShow == "false" && curr?.DefaultValue != "") ? curr?.DefaultValue : (curr.answerid == 0 || curr.answerid == '0') ? "" : curr.answerid); + return { ...acc, [curr.FieldName]: value, "verificationReq": "0", UserId: props.UserId }; + }, {}); + + + let postData = { + "MID": 0, + "Keys": "KEY1", + "JsonData": JSON.stringify([rs]), + "UserId": props.UserId, + }; + + // console.log("addstoreinfo-------------ad", addstoreconfigdata) + + const url = props.baseurl + "UploadJsonDirect"; + + console.log(url, postData, 'url and postDaata...'); + + let rsFile = addstoreconfigdata + .map(section => section.data) + .flat() + .filter(itm => itm.QuestionType == "Image" && itm?.answer != ""); + + await uploadContractFormFiles12(rsFile) + + await UploadData2(url, postData) + .then(async (res) => { + console.log('res: 12', res); + if (res?.UploadJsonDirectResult == "Success") { + notify("Data Save Successfully."); + setProcessing(false); + if (props.AddNewStoreInJCP == "true" || props.AddNewStoreInJCP == true) { + if (props?.AddNewStoreVerificationReq) { + props.navigation.navigate('AddedStoreList') + } else { + props.set_startDownload({ startDownload: true }); + props.navigation.navigate('NoticeBoard') + } + } + } + else { + notify(res?.UploadJsonDirectResult); + setProcessing(false); + } + }) + .catch((err) => { + console.log(err); setProcessing(false); + }); + + } + + async function uploadContractFormFiles12(allfiles = []) { + let d1 = new Date(); + let d2 = moment(d1).format('MM/DD/YYYY'); + let uploadCount = 0; + const url = (props.imageUploadUrl || URL_IMAGE) + getMethodName(METHODS.UPLOADIMAGES_METHOD); + + + var isAllUploaded = false; + return await Promise.all( + allfiles.map(async (file, i) => { + let index = i; + let actualfilepath = 'file://' + `${ImageFolderPath}${file.answer}`; + console.log("actualfilepath---", actualfilepath) + let isExists = await RNFS.exists(actualfilepath).then((res) => { return res; }); + console.log('isExists file', isExists, file.answer, file); + let isImageUploaded = false; + // isExists==false + if (isExists) { + let postData = new FormData(); + postData.append('file', { + uri: actualfilepath, + type: file?.answerid, + name: file.answer, + }); + + postData.append('Foldername', "KYCImages"); + postData.append('Path', d2); + + isImageUploaded = await UploadImagesWithoutWait(postData, url); + if (isImageUploaded == true) { + console.log('isExists file uploaded', isExists, uploadCount, index, allfiles.length - 1); + await RNFS.unlink(actualfilepath); + uploadCount++; + // UpdateUploadCountLocal(uploadCount+1) + if (uploadCount == allfiles.length) { + isAllUploaded = true; + } + + } else { + console.log('file not uploaded:', isExists, actualfilepath); + } + + } + else {//file does not exists + uploadCount++; + // UpdateUploadCountLocal(uploadCount+1) + if (uploadCount == allfiles.length) { + isAllUploaded = true; + } + } + + return isImageUploaded; + }) + ).then((val) => { + console.log(val); + return isAllUploaded; + }) + .catch((err) => { + console.log(err); + return false; + }) + } + + function render_Picker(label_key, value_key, onChange = () => { }, selected_data = {}) { + let data = []; + let qtn = selected_data.qtn || {}; + let index = selected_data.index; + let sectionIndex = selected_data.sectionIndex + + // Ensure ListJson is parsed correctly + let allAnswers = []; + if (typeof qtn.ListJson === "string") { + try { + allAnswers = JSON.parse(qtn.ListJson); + } catch (error) { + console.error("Error parsing ListJson:", error); + } + } else if (Array.isArray(qtn.ListJson)) { + allAnswers = qtn.ListJson; + } + + let isQtnDisabled = qtn.isDisabled ? true : false; + + // Dynamically populate dropdown options + data = allAnswers.map((item, index) => { + return { + key: index, + label: item[label_key], + value: item[value_key], + component: selected_data.value == item[value_key] ? ( + + + {item[label_key]} + + ) : null + }; + }); + + // console.log("data",data) + + return ( + onChange(option, qtn, index, sectionIndex)} + overlayStyle={customStyle.addVisPickerOverlay} + cancelContainerStyle={customStyle.addVisPicker_OptionContainerStyle} + optionStyle={customStyle.addvis_opStyle} + optionTextStyle={customStyle.addvis_opTextStyle} + selectedKey={selected_data.value} + disabled={isQtnDisabled} + > + + {selected_data.value ? selected_data.value : '-' + ST.select + '-'} + + + ); + } + + function onselectionChange(option, qtn, index, sectionIndex) { + console.log(option, qtn, sectionIndex, index, "confirmmmmmm----------11111111111"); + let updatedData = addstoreconfigdata.map((section, secIndex) => { + if (secIndex === sectionIndex) { + // Clone the section and its data to ensure immutability + const updatedSection = { ...section, data: [...section.data] }; + + // Update the specific item in the section's data + const updatedItem = { ...updatedSection.data[index] }; + updatedItem.answerid = option.value || "0"; + updatedItem.answer = option.label; + // Replace the item in the section's data + updatedSection.data[index] = updatedItem; + const updatedItem2 = [...updatedSection.data]; + + if (qtn?.FieldName === 'BeatDay') { + setBeatDay(option?.label) + console.log("lavel---", option?.label) + } + + if (updatedItem?.FieldName === 'TaxType' && updatedItem?.answer === "GST") { + setglb_gst("GST"); + for (let i = 0; i < updatedItem2.length; i++) { + if (["AadharNo", "AadharFrontImage", "AadharBackImage"].includes(updatedItem2[i].FieldName)) { + updatedItem2[i].IsFieldShow = "false"; + updatedItem2[i].answer = ""; + updatedItem2[i].answerid = 0; + } + + if (["GSTNo", "GSTImage"].includes(updatedItem2[i].FieldName)) { + updatedItem2[i].IsFieldShow = "true"; + } + } + } else if (updatedItem?.FieldName === 'TaxType' && updatedItem?.answer === "Non GST") { + setglb_gst("Non GST") + for (let i = 0; i < updatedItem2.length; i++) { + if (["GSTNo", "GSTImage"].includes(updatedItem2[i].FieldName)) { + updatedItem2[i].IsFieldShow = "false"; + updatedItem2[i].answer = ""; + updatedItem2[i].answerid = 0; + } + + if (["AadharNo", "AadharFrontImage", "AadharBackImage"].includes(updatedItem2[i].FieldName)) { + updatedItem2[i].IsFieldShow = "true"; + } + } + } + + updatedSection.data = updatedItem2 + return updatedSection; + } + return section; // Return unchanged sections + }); + + console.log("finalData==========", JSON.stringify(updatedData)); + setAddStoreConfigData([...updatedData]) // Update state in a single call + } + + function setTextValue(value, qtn, sectionIndex, index, type = "") { + + console.log(value, qtn, sectionIndex, index, type = "") + if (value != '') { + let isValid = validateNumber(value, type); + console.log("type:", type, isValid); + if (!isValid) { + return; + } + } + + let updatedData = addstoreconfigdata.map((section, secIndex) => { + if (secIndex === sectionIndex) { + + const updatedSection = { ...section, data: [...section.data] }; + + const updatedItem = { ...updatedSection.data[index] }; + updatedItem.answerid = "0"; + updatedItem.answer = value; + + updatedSection.data[index] = updatedItem; + + return updatedSection; + } + return section; + }); + + setAddStoreConfigData(updatedData); + + } + + async function openCamera(dataindex) { + console.log("dataindex", dataindex) + // setSelectImages(dataindex) + selectimages.current = dataindex + addstoreconfigCurr.current = addstoreconfigdata + // setShowCamera(true); + props.navigation.navigate('CameraScreen', { 'getImage': getImage, 'cameraType': ('back'), 'CheckInCameraGallery': props.CheckInCameraGallery, storeData: storeData, enableCameraFlip: (props.CheckInSwitchingCamera ? true : false) }) + } + + async function getImage(imgdata) { + if (typeof imgdata == 'object' && imgdata.errorCode == 'camera_unavailable') { + notify(ST.Cameraunavailable); + } + + else if (typeof imgdata == 'object' && imgdata.uri != null) { + const img = imgdata; + const storeDataDetail = imgdata.storeData || {} + const imgurl = img.uri, imgWidth = img.width, imgHeight = img.ExtendedHeight; + let isImgFromGallery = img.fromGallery != null ? img.fromGallery : false; + let picture_clickedd = isImgFromGallery == true ? img.datetime : new Date(); + ////change by jeevanp + let picture_clicked_time = moment(picture_clickedd).format('MM-DD-YYYY HH:mm:ss') + let picture_clicked_time_for_pic_name = moment(picture_clickedd).format('MMDDYYYY_HHmmss') + console.log("time", picture_clicked_time); + console.log("time1", picture_clicked_time_for_pic_name); + ////change by jeevanp + let calculate_tym_date_for_filename = picture_clicked_time_for_pic_name; + let calculate_tym_date_over_img = picture_clicked_time; + + let filename = (props.UserId || '') + '_AddStoreImg-' + calculate_tym_date_for_filename + '.jpg'; + console.log(filename, "file_name"); + + const mark_text1 = calculate_tym_date_over_img; + const mark_text2 = 'User Id:' + props.UserId + ' | Image Type: Add Store Info' + ' | Date:' + calculate_tym_date_over_img; + console.log(mark_text1 + "\n" + mark_text2, "mark_text2"); + + setStoreImage(filename); + console.log("selectimages========", selectimages.current) + + let sectionIndex = selectimages.current?.sectionIndex; + let index = selectimages.current?.index; + + let imagePath = `${ImageFolderPath}${filename}`; + console.log("checkin imgurl:", imagePath, imgurl); + RNFS.copyFile(imgurl, imagePath) + .then(async (resn) => { + // render data with clicked image + let uri = 'file://' + imagePath; + setStoreImgPath(uri); + setSelectedImg(uri) + let updatedData = addstoreconfigCurr.current.map((section, secIndex) => { + console.log("secIndex", secIndex, "sectionIndex", sectionIndex) + if (secIndex == sectionIndex) { + // Clone the section and its data to ensure immutability + const updatedSection = { ...section, data: [...section.data] }; + + // Update the specific item in the section's data + const updatedItem = { ...updatedSection.data[index] }; + const getMimeType = (uri) => { + const extension = uri.split('.').pop().toLowerCase(); + + const mimeTypes = { + jpg: 'image/jpeg', + jpeg: 'image/jpeg', + png: 'image/png', + gif: 'image/gif', + webp: 'image/webp', + }; + + return mimeTypes[extension] || 'application/octet-stream'; // Fallback + }; + + const mimeType = getMimeType(img.uri); + console.log(mimeType); + console.log(mimeType, "img===========", img) + updatedItem.answerid = mimeType; + updatedItem.answer = filename; + + // Replace the item in the section's data + updatedSection.data[index] = updatedItem; + + return updatedSection; + } + return section; // Return unchanged sections + }); + + setAddStoreConfigData(updatedData) + console.log("updatedData========", JSON.stringify(updatedData)) + selectimages.current = {} + // add metdata then resize image and restored back to the imagePath + let restore_data = { "destFilePath": imagePath, "imgurl": imgurl, imgWidth, imgHeight, mark_text1, mark_text2 } + let is_restored = await restore_ImageWithMetaData(restore_data, imgdata); + console.log("image restored:", is_restored); + }).catch(err => { + console.log('ERROR: image file write failed!!!', err); + console.log(err.message, err.code); + }); + } + } + + + function _OpenCaptureImage_Modal(img) { + const isImageCap = (img != '' || img != null) ? true : false; + let camera2Label = 'test'; + return ( + + { + + + + + + { openCamera() }}> + + + + } + + ) + } + + function _RenderBeatDayDialog(showModal, beatDay, onClose, onCancel) { + const today = getTodayName(); + return ( + + + + Today is {today}.{"\n"} + You have selected Beat as{" "} + {beatDay}. + + + {/* Buttons Row */} + + {/* Cancel Button */} + + Cancel + + + {/* OK Button */} + + Proceed + + + + + ); + } + + + + function cancelImage() { + // setImage1(''); + setSelectedImg(''); + setShowModal(false); + } + + function _render_captureImage() { + const isImageAvlbl = StoreImage != '' && StoreImage != null && StoreImgPath != '' && StoreImgPath != null; + + return ( + + + { isImageAvlbl ? OpenImgModal(StoreImgPath) : openCamera() }}> + {!isImageAvlbl && } + {isImageAvlbl && } + + {/* {isImageAvlbl && } */} + {ST.ClickSelfieinfrontofStore} + + + + ); + } + + // console.log("addstoreconfigdata", JSON.stringify(addstoreconfigdata)) + + return ( + + {processing && } + + {ConfirmSaveAlert(props, showModalAlert, onSaveCancel, upload_Data, "Do you really want to add store ?")} + {_OpenCaptureImage_Modal()} + {_render_captureImage()} + {/* Call your custom render function here */} + {_RenderBeatDayDialog(showDeffBeatAlert, beatDay, () => { setShowModalAlert(true); setShowDeffBeatAlert(false) }, () => setShowDeffBeatAlert(false))} + + + + + `${item.FieldName}_${index}`} // Ensure unique keys for items + + renderSectionHeader={({ section }) => { + // Find the index of the current section + console.log("section_header...", section) + if ((section?.isShow == "true" || section?.isShow == true)) { + return ( + + + + + + {section?.title ? section?.title : ''} + + + + + + ); + } + + }} + + renderItem={({ item, index, section }) => { + + const sectionIndex = addstoreconfigdata.findIndex(sec => sec.title === section.title); + + // console.log(section,"sectionIndex=======",sectionIndex) + let qtn = item; + + let qtnIndex = index; + let selansid = "", selanswer = "", showImageTag1 = false, showImageTag2 = false; + let id_key = `${qtn.FieldName}_AnswerId`; + let ans_key = `${qtn.FieldName}_Answer`; + let multi_key = `${qtn.FieldName}_MultiOption`; + + let list_mcdata = []; + + // let isNAImageAvl=item.CategoryNotExistCamera=='true' || data.CategoryNotExistCamera==1?1:0; + // let NAImage1=isNAImageAvl==1 && data.CatNAImage!=null?data.CatNAImage:''; + // let NAImage1Path=NAImage1!=''?`file://${ImageFolderPath+menu1.ScreenName}/`+'':''; + + let NAImage1Path = '' + + if (qtn.IsFieldShow == "false") { + return null + } + + return ( + + {qtn.DisplayName} + + {qtn.QuestionType === "Single choice list" && + render_Picker("Name", "Id", onselectionChange, { value: qtn.answer, qtn, sectionIndex, index }) + } + + {qtn.QuestionType === "Multi choice list" && + setMultiSelectValue(selectedItems, qtn, window)} + selectedItems={selansid} + selectText="Pick Items" + searchInputPlaceholderText={`${ST.SearchItems}...`} + tagRemoveIconColor={PageTheme.$primary_color} + tagBorderColor={PageTheme.$primary_color} + tagTextColor={PageTheme.$primary_color} + selectedItemTextColor={PageTheme.$primary_color} + selectedItemIconColor={PageTheme.$primary_color} + itemTextColor={PageTheme.$text_color} + displayKey="Answer" + searchInputStyle={EStyle_Qtn_MultiChoice} + submitButtonColor={PageTheme.$primary_color} + submitButtonText={ST.Submit} + /> + } + + {["Number", "Decimal", "Text", "TextSpc", "Number", "Email"].includes(qtn.QuestionType) && + { + let sanitizedValue = val; + + if (qtn.QuestionType === "Number") { + // Allow only whole numbers (no decimals, no special chars) + sanitizedValue = val.replace(/[^0-9]/g, ""); + } else if (qtn.QuestionType === "Decimal") { + // Allow only valid decimal numbers + sanitizedValue = val.replace(/[^0-9.]/g, ""); // Remove non-numeric & non-dot + if ((sanitizedValue.match(/\./g) || []).length > 1) { + sanitizedValue = sanitizedValue.replace(/\.+$/, ""); // Remove extra dots + } + } else if (qtn.QuestionType === "Text") { + if (qtn?.FieldName === 'GSTNo' || qtn?.FieldName === 'Pan' || qtn?.FieldName === 'IFSC' || qtn?.FieldName === 'AccountNo') { + sanitizedValue = val.replace(/[^a-zA-Z0-9]/g, ""); + } else if (qtn?.FieldName === 'StoreName' || qtn?.FieldName === 'Address' || qtn?.FieldName === 'Locality') { + sanitizedValue = val.replace(/[^a-zA-Z0-9 \-\/(),.&:]/g, ""); + } + else { + // Allow only letters, numbers, and spaces (no special characters) + sanitizedValue = val.replace(/[^a-zA-Z0-9 ]/g, ""); + } + + } + + setTextValue(sanitizedValue, qtn, sectionIndex, index); + }} + /> + } + + + {qtn.QuestionType === "Image" && + + + {(qtn.answer == '' || qtn.answer == null) ? + { openCamera({ sectionIndex, index }, {}, 0, '1', '3') }}> + + : (qtn.answer != '' && qtn.answer != null) ? + { + // OpenImgModal(qtn.answer, window, {}, 0, '1', '3') + }}> + + : null + } + + + + } + + + ); + }} + /> + + + { handleUpload() }} /> + + + + + + + ); +} + +export default connect(mapStateToProps, mapDispatchToProps)(AddStore); + + + +const customStyleBeat = StyleSheet.create({ + BeatDayModal: { + padding: 20, + }, + BeatDayModal_Title: { + fontSize: 20, + fontWeight: "bold", + color: "#333", + textAlign: "center", + marginBottom: 10, + }, + BeatDayModal_Subtitle: { + fontSize: 16, + color: "#666", + textAlign: "center", + marginBottom: 15, + }, + BeatDayModal_Content: { + padding: 10, + }, + BeatDayModal_Message: { + fontSize: 16, + textAlign: "center", + color: "#444", + }, + BeatDayModal_Button: { + backgroundColor: "#2196F3", + paddingVertical: 10, + paddingHorizontal: 25, + borderRadius: 10, + }, + BeatDayModal_Button_proceed: { + backgroundColor: "#2196F3", + paddingVertical: 10, + paddingHorizontal: 25, + marginStart: 30, + borderRadius: 10, + }, + BeatDayModal_ButtonText: { + color: "#fff", + fontWeight: "bold", + fontSize: 16, + }, +}); + + + + + diff --git a/PerformicsSrc/src/screens/AddStoreInfo.js b/PerformicsSrc/src/screens/AddStoreInfo.js new file mode 100644 index 0000000..c8c5c17 --- /dev/null +++ b/PerformicsSrc/src/screens/AddStoreInfo.js @@ -0,0 +1,1153 @@ +import React, { useState, useEffect, useRef } from 'react'; +import Container from '../components/container'; +import { useFocusEffect, useRoute } from '@react-navigation/native'; +import { globalStyles, customStyles, GetPageTheme } from "../styles/Global"; +import { Image, TextInput, View, Text, ScrollView, TouchableOpacity, Platform, DeviceEventEmitter, PermissionsAndroid, Keyboard } from 'react-native'; +import { connect } from 'react-redux'; +import { mapStateToProps, mapDispatchToProps } from '../reducers/contextProvider'; +import { notify } from '../components/notify'; +import moment from 'moment'; +import { clear_item, get_item } from '../components/localStorage'; +import CustomHeader from '../components/customHeader'; +import { Entypo, Ionicons, MaterialCommunityIcons } from '../components/icons'; +import { UploadData2, checkRange, getAllFileForAFolder, restore_ImageWithMetaData, uploadContractFormFiles, validateNumber, validateNumber12, validateStoreAddStoreInfoText } from '../controller/functions'; +import CustomLoader from '../components/CustomLoader'; +import { AppTables } from '../constants/tableConstants'; +import * as RNFS from 'react-native-fs'; +import GradientButton from '../components/gradientButton'; +import MapIcon from '../assets/performics/map_icon.svg'; +import Geolocation from 'react-native-geolocation-service'; +import { db, CoverageImagePath, AppVersion, AddStoreImagePath, URL_IMAGE } from '../constants/constants'; +import CameraImg3 from '../assets/performics/camera_tick.svg'; +import CameraImg from '../assets/performics/camera_front_image.svg' +import CustomModal from '../components/CustomModal'; +import MapView, { AnimatedRegion, Marker, Polyline, PROVIDER_GOOGLE } from 'react-native-maps'; +import reports_icon from '../assets/performics/sidemenu_icons/reports_icon.svg'; + +import { _checkLocationPermission } from '../components/geolocation'; +import { CustomPicker } from '../components/CustomPicker'; +import { ConfirmSaveAlert } from '../components/alert'; +import { METHODS, getMethodName } from '../constants/methodNames'; +import { UploadImagesWithoutWait } from '../constants/uploadData'; + +function AddStoreInfo(props) { + const route = useRoute(); + const ST = props.StaticText || {}; + // get all theme styles acc to current theme set + const PageTheme = GetPageTheme(props.DarkMode, route.name); + const customStyle = customStyles(props.DarkMode, route.name); + const globalStyle = globalStyles(props.DarkMode, route.name); + + const [processing, setProcessing] = useState(false); + const [loaderTitle, setLoaderTitle] = useState(); + const [designation, setDesignation] = useState(''); + // setSelectedDistributorId + const [distributorname, setDistributorName] = useState([]); + const [cityname, setCityName] = useState([]); + const [storetype, setStoreType] = useState([]); + + const [distributornameid, setSelectedDistributorNameId] = useState([]); + const [citynameid, setSelectedCityNameId] = useState([]); + const [storetypeid, setSelectedStoreTypeId] = useState([]); + + + const [addstoreinfo, setAddStoreInfo] = useState([]); + const [hasUnsavedChanges, setHasUnsavedChanges] = useState(false); + const [AddStoreinfoFormData, setAddStoreInfoFormData] = useState({}); + const [isAddVisPresent, setIsAddVisPresent] = useState(0); + + + const hasUnsavedChangesRef = React.useRef(hasUnsavedChanges); + const WindowDataRef = React.useRef(addstoreinfo); + const VisFormDataRef = React.useRef(AddStoreinfoFormData); + const isAddVisPresentRef = React.useRef(isAddVisPresent); + + + const [rerenderdata, setrerenderdata] = useState(0); + const [rerenderdata2, setrerenderdata2] = useState(0); + + const [showCamera, setShowCamera] = useState(false); + const [selectedValue, setSelectedValue] = useState(null); + const [selectedCityValue, setSelectedCityValue] = useState(null); + const [selectedStoretypeValue, setSelectedStoretypeValue] = useState(null); + const [currentLocation, setCurrentLocation] = useState({}); + const [markerCoordinate, setMarkerCoordinate] = useState({ latitude: 0, longitude: 0 }); + const [markerPos, setMarkerPos] = useState({}); + const [markerTitle, setMarkerTitle] = useState(''); + const [markerPlaceText, setMarkerPlaceText] = useState(''); + const [storeData, setStoreData] = useState({}); + const [StoreImgPath, setStoreImgPath] = useState(''); + const [SelectedStoreImg, setSelectedStoreImg] = useState(''); + const [showStoreModal, setShowStoreModal] = useState(false); + const [StoreImage, setStoreImage] = useState(''); + const [SelectedImg, setSelectedImg] = useState(''); + const [showModal, setShowModal] = useState(false); + const [showImgModal, setShowImgModal] = useState(false); + const [showImageSaveOp, setShowImageSaveOp] = useState(true); + const [storeDistanceText, setStoreDistanceText] = useState('0 m'); + const [storeDistance, setStoreDistance] = useState(0); + const [showAlert, setShowAlert] = useState(false); + + + const MyMap = useRef(null); + const MyMarker = useRef(null); + const isCancelled = useRef(false); + + + const d1 = new Date(); + const d2 = moment(d1).format('MM/DD/YYYY'); + + useEffect(() => { + setLoaderTitle(ST.Loading + '...') + const onImageCapturedSubs = DeviceEventEmitter.addListener('onImageCaptured', (imgData) => { getImage(imgData) }); + + Get_Master_DistributorFilter(); + + calLocatDistance(); + + const unsubscribe = props.navigation.addListener('beforeRemove', onBeforeRemove); + + return function cleanup() { + isCancelled.current = true; + Geolocation.clearWatch() + onImageCapturedSubs.remove(); + return unsubscribe; + }; + + }, []); + + useEffect(() => { + const unsubscribe = props.navigation.addListener('beforeRemove', onBeforeRemove); + return unsubscribe; + }, [showCamera]); + + useFocusEffect( + React.useCallback(() => { + Get_Master_DistributorFilter(); + }, []) + ); + + function onBeforeRemove(e) { + if (showCamera == true) { + e.preventDefault(); + setShowCamera(false); + } + else { + return; + } + } + + async function Get_Master_DistributorFilter() { + try { + + let token = await get_item('loginToken'); + let loginInfo = await get_item('loginInfo'); + const loginDetails = JSON.parse(loginInfo); + let desg = loginDetails.Designation || ''; + setDesignation(desg); + + await db.transaction(async function (txn) { + + let q = `SELECT * from Master_DistributorFilter`; + await txn.executeSql(q, [], async function (txn2, txnres) { + if (txnres.rows.length > 0) { + let arr = []; + for (var i = 0; i < txnres.rows.length; i++) { + let data = txnres.rows.item(i); + arr.push(data); + if (i == txnres.rows.length - 1) { + setDistributorName(arr); + setrerenderdata(!rerenderdata); + } + } + } + }, function (txnE, txnerr) { console.log(txnerr); },); + + let q1 = `SELECT * from Master_CityFilter`; + await txn.executeSql(q1, [], async function (txn2, txnres) { + if (txnres.rows.length > 0) { + let arr = []; + for (var i = 0; i < txnres.rows.length; i++) { + let data = txnres.rows.item(i); + arr.push(data); + if (i == txnres.rows.length - 1) { + setCityName(arr); + setrerenderdata(!rerenderdata); + } + } + } + }, function (txnE, txnerr) { console.log(txnerr); },); + + let q2 = `SELECT * from Master_StoreTypeFilter`; + await txn.executeSql(q2, [], async function (txn2, txnres) { + if (txnres.rows.length > 0) { + let arr = []; + for (var i = 0; i < txnres.rows.length; i++) { + let data = txnres.rows.item(i); + arr.push(data); + if (i == txnres.rows.length - 1) { + setStoreType(arr); + setProcessing(false); + setrerenderdata(!rerenderdata); + } + } + } + else { + setProcessing(false); + } + }, function (txnE, txnerr) { console.log(txnerr); setProcessing(false); },); + + let q3 = `SELECT * from ${AppTables.ADD_STORE_INFO} WHERE VISIT_DATE='${d2}'`; + await txn.executeSql(q3, [], async function (txn2, txnres) { + console.log(txnres.rows.length, 'data from the table..') + if (txnres.rows.length > 0) { + let arr = []; + for (var i = 0; i < txnres.rows.length; i++) { + let data = txnres.rows.item(i); + + let { DISTRIBUTOR_NAME, DISTRIBUTOR_ID, STORE_NAME, STORE_ADDRESS, CITY_NAME, CITY_ID, STORETYPE_NAME, STORETYPE_ID, IMAGE, IMAGEPATH, LAT, LNG, STATUS } = data; + let newObj = { DistributorName: DISTRIBUTOR_NAME, DistributorId: DISTRIBUTOR_ID, StoreName: STORE_NAME, StoreAddress: STORE_ADDRESS, CityName: CITY_NAME, CityId: CITY_ID, StoreType: STORETYPE_NAME, StoreTypeId: STORETYPE_ID, ImageName: IMAGE, ImagePath: IMAGEPATH, Longitude: LAT, Latitude: LNG, Status: STATUS } + console.log(data, 'data from the table..') + + arr.push(newObj); + if (i == txnres.rows.length - 1) { + setAddStoreInfo(arr); + setrerenderdata(!rerenderdata); + } + } + } + }, function (txnE, txnerr) { console.log(txnerr); },); + + }); + } catch (err) { + console.log(err); + setProcessing(false); + } + } + + + function BgAddVisFormData(val) { + console.log(val, "valval") + VisFormDataRef.current = val + setAddStoreInfoFormData(val); + } + + function BgIsAddVisPresent(val) { + isAddVisPresentRef.current = val + setIsAddVisPresent(val); + } + + function CleanSelector(option, keyLbl = '', data = {}) { + + if (keyLbl == 'CategoryName') { + Get_Master_DistributorFilter(option.value, 'SubCategories'); + + // clear subcategory and brand + data['SubCategoryId'] = ''; + data['SubCategoryName'] = ''; + data['BrandId'] = ''; + data['BrandName'] = ''; + + + data['DisplayId'] = '' + data['DisplayName'] = '' + data['Remark'] = '' + data['Image1Path'] = '' + + } + else if (keyLbl == 'SubCategoryName') { + Get_Master_DistributorFilter(option.value, 'Brands'); + + // clear brand + data['BrandId'] = ''; + data['BrandName'] = ''; + + data['DisplayId'] = '' + data['DisplayName'] = '' + + data['Image1Path'] = '' + + data['Remark'] = '' + + } else if (keyLbl == 'BrandName') { + + // clear brand + + data['DisplayId'] = '' + data['DisplayName'] = '' + + data['Image1Path'] = '' + + data['Remark'] = '' + + } else if (keyLbl == 'DisplayName') { + + // clear brand + + data['Image1Path'] = '' + + data['Remark'] = '' + + } + + } + + + function onselectionChange(option, keyLbl, keyVal) { + let data = AddStoreinfoFormData; + data[keyVal] = option.value; + data[keyLbl] = option.label; + + CleanSelector(option, keyLbl, data) + + BgAddVisFormData(data) + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + + } + + + function _render_Distributor_Option(props) { + return ( + + + Select Distributor Name : + + {CustomPicker(props, distributorname, 'DistributorName', 'DistributorId', 'DistributorName', 'DistributorId', onselectionChange, { value: AddStoreinfoFormData.DistributorName })} + + + ) + } + + function _render_City_Option() { + return ( + + + Select City Name : + + {CustomPicker(props, cityname, 'CityName', 'CityId', 'CityName', 'CityId', onselectionChange, { value: AddStoreinfoFormData.CityName })} + + + ) + } + + function _render_Storetype_Option() { + return ( + + Select Store Type : + {CustomPicker(props, storetype, 'StoreType', 'StoreTypeId', 'StoreType', 'StoreTypeId', onselectionChange, { value: AddStoreinfoFormData.StoreType })} + + ) + } + + async function setMarkerInfo(coords) { + if (MyMap.current != null) { + MyMap.current.addressForCoordinate(coords) + .then((res) => { + // console.log('res:',res); + let title = res.name; + let placeText = `${res.subLocality}, ${res.locality}, ${res.administrativeArea} ${res.postalCode}`; + setMarkerTitle(title); + setMarkerPlaceText(placeText); + + }) + } + } + + async function getLocationUpdates() { + Geolocation.watchPosition( + async (position) => { + OnLocation(position); + }, + (error) => { + notify(ST.Cannotgetuserposition); + }, + { enableHighAccuracy: true, distanceFilter: 1, interval: 10000, fastestInterval: 5000, maximumAge: 0 } + ) + } + + async function OnLocation(position) { + let latitude = position.coords.latitude; + let longitude = position.coords.longitude; + latitude = parseFloat(parseFloat(latitude).toFixed(8).replace("-e", "")); + longitude = parseFloat(parseFloat(longitude).toFixed(8).replace("-e", "")); + + let loc = { lat: latitude, lng: longitude }; + + setMarkerCoordinate(new AnimatedRegion({ latitude: latitude, longitude: longitude })); + setMarkerInfo({ latitude: latitude, longitude: longitude }); + setAddStoreInfoFormData(prevState => ({ + ...prevState, + Latitude: latitude, + Longitude: longitude + })); + setCurrentLocation(loc); + } + + async function calLocatDistance() { + + const hasPermission = await _checkLocationPermission(); + if (hasPermission == true) { + getLocationUpdates(); + getCurrentPosition(); + + } + else { + notify(ST.Pleaseallowlocationpermission); + } + + } + + async function getCurrentPosition() { + Geolocation.getCurrentPosition( + async (position) => { + OnLocation(position); + console.log(position, 'position....') + + }, + (error) => { + notify(ST.Cannotgetuserposition); + }, + { enableHighAccuracy: true, distanceFilter: 10, interval: 1000, fastestInterval: 2000 } + ); + } + + + function validate() { + if (StoreImage == '' || StoreImage == null) { + notify(ST.Pleaseclickselfieinfrontofstore, 'SHORT'); + return false; + } + return true; + } + + + function BgWindowData(val) { + WindowDataRef.current = val + setAddStoreInfo(val); + } + + function BgUnsavedChanges(val) { + hasUnsavedChangesRef.current = val + setHasUnsavedChanges(val); + } + + + async function validateForm() { + + let isValid = true; + + let { DistributorName, DistributorId, CityName, CityId, StoreType, StoreTypeId, StoreName, StoreAddress, Remark, Image1, Image1Path, FromDate, ToDate, showFromDateFlag } = AddStoreinfoFormData; + + if ((DistributorName == '' || DistributorName == null) || (DistributorId == '' || DistributorId == null)) { + isValid = false; + notify(ST.Pleaseselectdistributorname, 'SHORT'); + } + + else if ((StoreName == '' || StoreName == null)) { + isValid = false; + notify(ST.Pleasefillthestorename, 'SHORT'); + } + else if ((StoreAddress == '' || StoreAddress == null)) { + isValid = false; + notify(ST.Pleasefillthestoreaddress, 'SHORT'); + } + else if ((CityName == '' || CityName == null) || (CityId == '' || CityId == null)) { + isValid = false; + notify(ST.Pleaseselectcityname, 'SHORT'); + } + else if ((StoreType == '' || StoreType == null) || (StoreTypeId == '' || StoreTypeId == null)) { + isValid = false; + notify(ST.Pleaseselectstoretype, 'SHORT'); + } + else if (StoreImage == '' || StoreImage == null) { + isValid = false; + notify(ST.Pleaseclickselfieinfrontofstore, 'SHORT'); + + } + + console.log('isValid:', isValid); + return isValid; + } + + + async function Add_StoreInfo() { + + let isValid = await validateForm(); + console.log('isValid add:', isValid); + if (isValid) { + let arr = addstoreinfo; + let StoreinfoObj = AddStoreinfoFormData; + StoreinfoObj["UserId"] = props.UserId; + + arr.push(StoreinfoObj); + BgWindowData(arr); + BgUnsavedChanges(true); + notify(ST.AddStoreInfoaddedsuccessfully, 'LONG'); + setrerenderdata(!rerenderdata); + BgAddVisFormData({}); + setStoreImage(''); + setStoreImgPath('') + + } + } + + function onFormDataChange(val, key, type = '') { + if (val != '') { + let isValid = validateNumber12(val, type); + if (!isValid) { + return; + } + } + + let data = AddStoreinfoFormData; + data[key] = val; + // setAddVisFormData(data); + // setHasUnsavedChanges(true); + BgAddVisFormData(data); + BgUnsavedChanges(true); + setrerenderdata(!rerenderdata); + } + + async function validateAndAddStoreInfo() { + let isValid = await validateForm(); + console.log('isValid:', isValid); + if (isValid) { + Add_StoreInfo(); + } + } + + async function getImage(imgdata) { + if (typeof imgdata == 'object' && imgdata.errorCode == 'camera_unavailable') { + notify(ST.Cameraunavailable); + } + else if (typeof imgdata == 'object' && imgdata.uri != null) { + const img = imgdata; + const storeDataDetail = imgdata.storeData || {} + const imgurl = img.uri, imgWidth = img.width, imgHeight = img.ExtendedHeight; + let isImgFromGallery = img.fromGallery != null ? img.fromGallery : false; + let picture_clickedd = isImgFromGallery == true ? img.datetime : new Date(); + ////change by jeevanp + let picture_clicked_time = moment(picture_clickedd).format('MM-DD-YYYY HH:mm:ss') + let picture_clicked_time_for_pic_name = moment(picture_clickedd).format('MMDDYYYY_HHmmss') + + console.log("time", picture_clicked_time); + console.log("time1", picture_clicked_time_for_pic_name); + ////change by jeevanp + let calculate_tym_date_for_filename = picture_clicked_time_for_pic_name; + let calculate_tym_date_over_img = picture_clicked_time; + + let filename = (props.UserId || '') + '_AddStoreInfoImg-' + calculate_tym_date_for_filename + '.jpg'; + console.log(filename, "file_name"); + + const mark_text1 = calculate_tym_date_over_img; + const mark_text2 = 'User Id:' + props.UserId + ' | Image Type: Add Store Info' + ' | Date:' + calculate_tym_date_over_img; + console.log(mark_text1 + "\n" + mark_text2, "mark_text2"); + + setStoreImage(filename); + + setAddStoreInfoFormData(prevState => ({ + ...prevState, + ['ImageName']: filename + })); + + let imagePath = `${AddStoreImagePath}${filename}`; + console.log("checkin imgurl:", imagePath, imgurl); + RNFS.copyFile(imgurl, imagePath) + .then(async (resn) => { + // render data with clicked image + let uri = 'file://' + imagePath; + setStoreImgPath(uri); + setSelectedImg(uri) + // Update AddStoreinfoFormData object + setAddStoreInfoFormData(prevState => ({ + ...prevState, + ['ImagePath']: uri // Use filename as key and image data as value + })); + + // BgAddVisFormData(addstoreinfo) + BgUnsavedChanges(true) + setrerenderdata2(!rerenderdata2); + // add metdata then resize image and restored back to the imagePath + let restore_data = { "destFilePath": imagePath, "imgurl": imgurl, imgWidth, imgHeight, mark_text1, mark_text2 } + let is_restored = await restore_ImageWithMetaData(restore_data, imgdata); + console.log("image restored:", is_restored); + }).catch(err => { + console.log('ERROR: image file write failed!!!', err); + console.log(err.message, err.code); + }); + } + } + + + function cancelImage() { + // setImage1(''); + setSelectedImg(''); + setShowModal(false); + } + + function cancelStoreImage() { + + setShowImgModal(false); + } + + async function openCamera() { + // setShowCamera(true); + props.navigation.navigate('CameraScreen', { 'getImage': getImage, 'cameraType': (props.CheckinOpenBackCamera ? 'back' : 'front'), 'CheckInCameraGallery': props.CheckInCameraGallery, storeData: storeData, enableCameraFlip: (props.CheckInSwitchingCamera ? true : false) }) + } + + async function OpenImgModal(imgPath) { + setSelectedImg(imgPath) + setShowModal(true); + if ((imgPath != '' && imgPath != null)) { + setShowImageSaveOp(false); + } + else { + setShowImageSaveOp(true); + } + + } + + function _renderMap() { + const lat = currentLocation.lat ? currentLocation.lat : 28.579660; + const lng = currentLocation.lng ? currentLocation.lng : 77.321110; + + return ( + + + + + + + + {_render_captureImage()} + + ); + + } + + async function getPosition_global(successCallback) { + Geolocation.getCurrentPosition( + async (position) => { + successCallback(position); + }, + (error) => { + notify(ST.Cannotgetuserposition); + }, + { enableHighAccuracy: true, distanceFilter: 0, interval: 1000, fastestInterval: 2000 } + ); + } + + async function submitCheckIn() { + + if (validate()) { + setLoaderTitle(ST.ProcessingCheckIn + '...'); + // setProcessing(true); + + async function posSuccessCallback(position) { + let latitude = position.coords.latitude; + let longitude = position.coords.longitude; + latitude = parseFloat(parseFloat(latitude).toFixed(8).replace("-e", "")); + longitude = parseFloat(parseFloat(longitude).toFixed(8).replace("-e", "")); + + + let loc = { lat: latitude, lng: longitude }; + var distance = checkRange(loc.lat, loc.lng, storeData.Latitude, storeData.Longitude); + console.log('distance in submitCheckIn:', distance); + let dinKM = (distance / 1000); + let distanceinM = (distance == '' || distance == null || isNaN(distance)) ? ' 0 m' : (dinKM > 1 ? dinKM.toFixed(1) + ' Km' : distance + ' m'); + setStoreDistanceText(distanceinM); + setStoreDistance(distance); + (isAdhocScreen == true || isBeatPlan == true || isNonMerchan == true || isNonProg == true) ? await createJCP(loc) : await uploadCheckIn(loc); + } + + await getPosition_global(posSuccessCallback); + } + } + + + function _OpenCaptureImage_Modal(img) { + const isImageCap = (img != '' || img != null) ? true : false; + let camera2Label = 'test'; + return ( + + { + isImageCap && + + + + + { openCamera() }}> + + + + {!showImageSaveOp && + { cancelImage(false) }}> + {ST.Close} + + } + + } + + ) + } + + function _render_captureImage() { + + const isImageAvlbl = StoreImage != '' && StoreImage != null && StoreImgPath != '' && StoreImgPath != null; + + return ( + + + { isImageAvlbl ? OpenImgModal(StoreImgPath) : openCamera() }}> + {!isImageAvlbl && } + {isImageAvlbl && } + + {/* {isImageAvlbl && } */} + {ST.ClickStoreFrontImage} + + + + ); + } + + useEffect(() => { + + }, []) + + async function OpenStoreImgModal(imgPath) { + + setSelectedStoreImg(imgPath); + setShowStoreModal(true); + console.log("imgPath------", imgPath) + if ((imgPath != '' && imgPath != null)) { + setShowImageSaveOp(false); + } + else { + setShowImageSaveOp(true); + } + + } + + function _Open_Image_Modal(img) { + const isImageCap = (img != '' || img != null) ? true : false; + + return ( + + { + isImageCap && + + + + + + + { cancelStoreImage(false) }}> + {ST.Close} + + + + } + + ) + } + + function onSaveCancel() { + setShowAlert(false); + } + + async function onSubmitData() { + const hasUStatus = addstoreinfo?.some(item => item?.Status !== "U"); + + console.log(hasUStatus, 'hasUStatus'); // gives us true if any of Status is not equal to "U" from the array of object. + + if (addstoreinfo.length === 0) { + notify(ST.Pleaseclickaddfirst); + } + else if (!hasUStatus) { + notify(ST.Pleaseclickaddfirst); + } + else { + + Keyboard.dismiss(); + setShowAlert(true); + } + } + + async function saveData(UploadStatus) { + + console.log(UploadStatus, "UploadStatus") + // setHasUnsavedChanges(false); + BgUnsavedChanges(false) + setShowAlert(false); + setLoaderTitle(ST.SavingData + '...'); + setProcessing(true); + try { + + await db.transaction(async function (txn) { + + let q = `DELETE FROM ${AppTables.ADD_STORE_INFO} WHERE VISIT_DATE ='${d2}' `; + + // remove old data + await txn.executeSql(q, [], async function (txn2, txnres) { + console.log('av data deleted'); + }, function (txnE, txnerr) { console.log(txnerr); },); + + var values = ''; + + if (addstoreinfo.length > 0) { + for (var i = 0; i < addstoreinfo.length; i++) { + let catIndex = i; + let item = addstoreinfo[catIndex]; + let statusChage = item.Status == "U" ? "U" : UploadStatus; + let { DistributorName, DistributorId, StoreName, StoreAddress, CityName, CityId, StoreType, StoreTypeId, Latitude, ImageName, ImagePath, Longitude } = item; + values += values != '' ? ' , ' : ''; + values += ` ('${d2}','${DistributorName}','${DistributorId}','${StoreName}','${StoreAddress}','${CityName}','${CityId}','${StoreType}','${StoreTypeId}','${Latitude}','${Longitude}','${ImageName}','${ImagePath}','${d2}','${statusChage}') `; + // VISIT_DATE , DISTRIBUTOR_NAME , DISTRIBUTOR_ID , STORE_NAME , STORE_ADDRESS ,CITY_NAME ,CITY_ID ,STORETYPE_NAME ,STORETYPE_ID ,IMAGE ,LAT ,LNG , ADDED_DATE + } + } + + console.log('values ADD_STORE_INFO:', values); + let add_data = `INSERT INTO ${AppTables.ADD_STORE_INFO} (VISIT_DATE, DISTRIBUTOR_NAME, DISTRIBUTOR_ID , STORE_NAME , STORE_ADDRESS ,CITY_NAME ,CITY_ID ,STORETYPE_NAME ,STORETYPE_ID ,LAT,LNG,IMAGE,IMAGEPATH,ADDED_DATE, STATUS) VALUES ${values} `; + + await txn.executeSql(add_data, [], async function (txn2, txnres) { + console.log('av added'); + notify(ST.AddStoreInfoaddedsuccessfully, 'SHORT'); + // setProcessing(false); + // clear store data in local storage to avoiding re-set data for the store + clear_item('storeData') + }, function (txnE, txnerr) { console.log(txnerr); setProcessing(false); notify(ST.Cannotaddaddstoreinfo) },); + + + }); + } catch (err) { + console.log(err); + } + } + + async function upload_Status() { + let d1 = new Date(); + let d2 = moment(d1).format('MM/DD/YYYY'); + let fpath = Platform.OS == 'ios' ? StoreImgPath.replace('file://', '') : StoreImgPath; + console.log(fpath, 'path of imaggege'); + await saveData("I"); + + // {"CityId": 8, "CityName": "EAST", "DistributorId": 44, "DistributorName": "A.D.M.Distributors", "Image": "file:///data/user/0/com.performics/files/PerformicsAllImages/CoverageImages/undefined_testmer_StoreImg-20240403_095006.jpg", "Latitude": 28.5274669, "Longitude": 77.277973, "StoreAddress": "Hchccj", "StoreName": "Cyuff", "StoreType": "KEELLS SUPER", "StoreTypeId": 14} + + setLoaderTitle('Uploading Data...'); + + let storeInfo = addstoreinfo + let arr = [] + + storeInfo?.map((item, i) => { + let itemObj = item; + if (item.Status != "U") { + delete itemObj.ImagePath; + arr.push(itemObj); + return itemObj + } + }) + + + let postData = { + "MID": 0, + "Keys": "Add_Store_Info", + "JsonData": JSON.stringify(arr), + "UserId": props.UserId, + }; + + console.log("addstoreinfo-------------ad", addstoreinfo) + + const url = props.baseurl + getMethodName(METHODS.UPLOADJSON_METHOD); + - + console.log(url, postData, 'url and postDaata...'); + let allFilesToUpload = await getAllFileForAFolder(AddStoreImagePath, "AddNewStoreImages"); + + console.log('allFilesToUpload--------allFilesToUpload', allFilesToUpload); + await uploadContractFormFiles12(allFilesToUpload) + + await UploadData2(url, postData) + .then(async (res) => { + console.log('res: 12', res); + if (res?.UploadJsonResult == "Success") { + await saveData("U"); + Get_Master_DistributorFilter() + setProcessing(false); + } + else { + setProcessing(false); + } + }) + .catch((err) => { + console.log(err); setProcessing(false); + }); + + } + + async function uploadContractFormFiles12(allfiles = []) { + let d1 = new Date(); + let d2 = moment(d1).format('MM/DD/YYYY'); + let uploadCount = 0; + const url = (props.imageUploadUrl || URL_IMAGE) + getMethodName(METHODS.UPLOADIMAGES_METHOD); + + + var isAllUploaded = false; + return await Promise.all( + allfiles.map(async (file, i) => { + let index = i; + let actualfilepath = 'file://' + file.uri; + let isExists = await RNFS.exists(actualfilepath).then((res) => { return res; }); + console.log('isExists file', isExists, file.uri, file); + let isImageUploaded = false; + // isExists==false + if (isExists) { + let postData = new FormData(); + postData.append('file', { + uri: actualfilepath, + // type: mime.getType(actualfilepath), + type: file.type, + name: file.name, + }); + + postData.append('Foldername', "AddNewStoreImages"); + postData.append('Path', d2); + + isImageUploaded = await UploadImagesWithoutWait(postData, url); + if (isImageUploaded == true) { + console.log('isExists file uploaded', isExists, uploadCount, index, allfiles.length - 1); + await RNFS.unlink(actualfilepath); + uploadCount++; + // UpdateUploadCountLocal(uploadCount+1) + if (uploadCount == allfiles.length) { + isAllUploaded = true; + } + + } else { + console.log('file not uploaded:', isExists, actualfilepath); + } + + } + else {//file does not exists + uploadCount++; + // UpdateUploadCountLocal(uploadCount+1) + if (uploadCount == allfiles.length) { + isAllUploaded = true; + } + } + + return isImageUploaded; + }) + ).then((val) => { + console.log(val); + return isAllUploaded; + }) + .catch((err) => { + console.log(err); + return false; + }) + } + + + + return ( + + {processing && } + + + { /* props.navigation.navigate('StoreInfoList')}> + + + + */} + + {ConfirmSaveAlert(props, showAlert, onSaveCancel, upload_Status)} + {_OpenCaptureImage_Modal()} + {_Open_Image_Modal()} + + + + + {_render_Distributor_Option(props)} + + {ST.StoreName + ':'} + + { onFormDataChange(val, 'StoreName', 'text') }} + /> + + + + + {ST.StoreAddress + ':'} + + { onFormDataChange(val, 'StoreAddress', 'text') }} + + /> + + + {_render_City_Option()} + {_render_Storetype_Option()} + + + {_renderMap()} + + + + { validateAndAddStoreInfo() }} + > + {ST.Add} + + + + + {addstoreinfo.length > 0 && {ST.AddedStores}} + + { + addstoreinfo.length > 0 && + addstoreinfo.map((item, index) => { + return ( + + + + + {ST.DistributorName + ' :'} + {item.DistributorName} + + + {ST.StoreName + ' :'} + {item.StoreName} + + + {ST.StoreAddress + ' :'} + {item.StoreAddress} + + + {ST.CityName + ' :'} + {item.CityName} + + + {ST.StoreType + ' :'} + {item.StoreType} + + { /* + {ST.Latitude+' :'} + {item.Latitude} + + + + {ST.Longitude+' :'} + {item.Longitude} + */} + + + {ST.StoreImage + ' :'} + + { setShowImgModal(true); setSelectedStoreImg(item?.ImagePath) }} > + + + + {item.Status == "I" && + + {"Upload Pending"} + + } + + {item.Status == "U" && + + + {ST.Uploaded} + + } + + + + + + + { + props.navigation.navigate('ShowMap', { storeData: item }); + }}> + + + + + + ); + }) + } + + + + { onSubmitData() }} /> + + + + + + + ); +} + +export default connect(mapStateToProps, mapDispatchToProps)(AddStoreInfo); + + diff --git a/PerformicsSrc/src/screens/AddStoreScreen.js b/PerformicsSrc/src/screens/AddStoreScreen.js new file mode 100644 index 0000000..653af32 --- /dev/null +++ b/PerformicsSrc/src/screens/AddStoreScreen.js @@ -0,0 +1,1136 @@ +import React, { useState, useEffect, memo } from 'react'; +import Container from '../components/container'; +import { useRoute } from '@react-navigation/native'; +import { globalStyles, customStyles, GetPageTheme } from "../styles/Global"; +import { StatusBar, Image, TextInput, View, Text, ScrollView, TouchableOpacity, TouchableHighlight, Platform, PermissionsAndroid, FlatList, Alert } from 'react-native'; +import { ReactReduxContext, connect, useSelector, useDispatch } from 'react-redux'; +import { mapStateToProps, mapDispatchToProps } from '../reducers/contextProvider'; +import { notify } from '../components/notify'; +import moment from 'moment'; +import { getDownloadJson, AddStore, checkRange, UploadData2, UploadData, UpdateStoreStatus, getKPIS, marktext1, marktext2, UploadFormData, getDownloadJson1, validateNumber, ValidateEmail, restore_ImageWithMetaData } from '../controller/functions'; +import { get_item, set_item, clear_item } from '../components/localStorage'; +import { version, sloganline, appname, testurl, db, AppVersion, common_ImagePath, ImageFolderPath, CoverageImagePath } from '../constants/constants'; +import CustomHeader from '../components/customHeader'; +import { AntDesign, Entypo, EvilIcons, Feather, FontAwesome, Fontisto, Ionicons, MaterialCommunityIcons } from '../components/icons'; +import CustomLoader from '../components/CustomLoader'; +import LinearGradient from 'react-native-linear-gradient'; +import MapIcon from '../assets/performics/map_icon.svg'; +import CustomModal from '../components/CustomModal'; +import { _checkLocationPermission } from '../components/geolocation'; +import Geolocation from 'react-native-geolocation-service'; +import { getFolderName, getMethodName, METHODS } from '../constants/methodNames'; +import * as RNFS from 'react-native-fs'; + +import CustomCamera from '../components/Camera'; +import HeaderTabs from '../components/HeaderTabs'; +import GradientButton from '../components/gradientButton'; +import { CustomPicker, CustomPicker2 } from '../components/CustomPicker'; +import { getBeatDownloadTask, getNewStoresDownloadTask, getPostData, insert_TaskDownloadedData, PJP_colList } from '../components/downloadTasks'; +import DownloadDataModal from '../components/downloadDataModal'; + +import CameraImg3 from '../assets/performics/camera_tick.svg'; +import CameraImg5 from '../assets/image/astrickcamera.svg'; + +//notifications +import pushNotification from '../pushNotification'; + +function AddStoreScreen(props) { + const route = useRoute(); + + const ST = props.StaticText || {}; + + // get all theme styles acc to current theme set + const PageTheme = GetPageTheme(props.DarkMode, route.name); + const customStyle = customStyles(props.DarkMode, route.name); + const [loaderTitle, setLoaderTitle] = useState(ST.Creatingstore + "..."); + const [processing, setProcessing] = useState(false); + const [isAdhocScreen, setIsAdhocScreen] = useState(false); + const [rerenderdata, setrerenderdata] = useState(0); + const [GSTFlag, setGSTFlag] = useState(false); + + const [StoreData, setStoreData] = useState({}); + + const [cityList, setCityList] = useState([]); + const [storeTypeList, setStoreTypeList] = useState([]); + const [ChainList, setChainList] = useState([]); + const [StoreCategory, setStoreCategory] = useState([]); + const [StoreClassList, setStoreClassList] = useState([]); + const [DistributorList, setDistributorList] = useState([]); + const [ChannelList, setChannelList] = useState([]); + + const [AllFormData, setAllFormData] = useState({}); + const [showCamera, setShowCamera] = useState(false); + const [showImg, setShowImg] = useState(false); + const [ImgURI, setImgURI] = useState(""); + const [StoreImage, setStoreImage] = useState(''); + const [hasUnsavedChanges, setHasUnsavedChanges] = useState(false); + + const [DownloadTasks, setDownloadTasks] = useState([]); + const [TaskResponse, setTaskResponse] = useState([]); + const [IsDownloadStart, setIsDownloadStart] = useState(false); + const [downloadingText, setDownloadingText] = useState(''); + const [dowloadedCount, setDowloadedCount] = useState(-1); + const [totalCount, setTotalCount] = useState(0); + + const [SelectedImg, setSelectedImg] = useState(''); + const [showModal, setShowModal] = useState(false); + const [reCapImgModalObj, setReCapImgModalObj] = useState({}); + const [showImageSaveOp, setShowImageSaveOp] = useState(true); + + var TaxType = [ + { TaxType: "GST", TaxTypeId: "GST" }, + { TaxType: "Non GST", TaxTypeId: "NON GST" }] + + let d1 = new Date(); + let today = moment(d1).format('MM/DD/YYYY'); + + useEffect(() => { + getData(); + const unsubscribe = props.navigation.addListener('beforeRemove', onBeforeRemove); + + return function cleanup() { + return unsubscribe; + }; + }, []) + + useEffect(() => { + console.log('dowloadedCount change:', dowloadedCount); + if (dowloadedCount <= totalCount && IsDownloadStart == true) { + executeTasks(); + } + else { + setIsDownloadStart(false); + notify(ST.DataDownloaded, 'SHORT'); + } + }, [dowloadedCount]); + + useEffect(() => { + if (IsDownloadStart && TaskResponse != null) { + console.log('increment dowloadedCount changed'); + let count = dowloadedCount + 1; + setDowloadedCount(count); + } + }, [TaskResponse]); + + useEffect(() => { + const unsubscribe = props.navigation.addListener('beforeRemove', onBeforeRemove); + return unsubscribe; + }, [hasUnsavedChanges]); + + + function onBeforeRemove(e) { + if (hasUnsavedChanges == true) { + e.preventDefault(); // Prevent default behavior of leaving the screen + onRemoveScreen(e); + } + else { + return; + } + } + function onRemoveScreen(e) { + Alert.alert( + "", + ST.Doyoureallywanttoexitthescreen, + [ + { + text: ST.Cancel, + onPress: () => { }, + style: "cancel" + }, + { text: ST.Ok, onPress: () => { setHasUnsavedChanges(false); props.navigation.dispatch(e.data.action); } } + ] + ); + } + + + function onStoreDataChange(val, key, type = '') { + if (val != '') { + let isValid = validateNumber(val, type); + if (!isValid) { + return; + } + } + + let allData = StoreData; + allData[key] = val; + setStoreData(allData); + setHasUnsavedChanges(true); + setrerenderdata(!rerenderdata); + } + + + + // download functionality start + async function startDownload() { + console.log('startDownload'); + setIsDownloadStart(true); + setDowloadedCount(0); + } + + async function beforeExecuteTasks() { + console.log('beforeExecuteTasks:'); + let DownloadTasks1 = await getNewStoresDownloadTask(); + console.log('All BeatDownloadTask', DownloadTasks1.length); + setDownloadTasks(DownloadTasks1); + setTotalCount((DownloadTasks1.length - 1)); + startDownload(); + } + + async function executeTasks() { + console.log('executeTasks'); + + // var DownloadTasks=getDownloadDataTask(); + let loginInfo = await get_item('loginInfo'); + const loginDetails = JSON.parse(loginInfo); + var currentIndex = dowloadedCount; + + console.log('currentIndex:', currentIndex); + if (currentIndex >= 0) { + let dk_data = DownloadTasks[currentIndex]; + console.log('dk_data', dk_data); + let key = dk_data.DownloadKey || ''; + setDownloadingText(key); + + var data = await getPostData(DownloadTasks, currentIndex); + + var url = props.baseurl + getMethodName(METHODS.DOWNLOADJSON_METHOD); + console.log(url, data); + await getDownloadJson1(url, data) + .then(async (res) => { + let isAdded = await updateTaskRes(res, currentIndex, 1); + if (isAdded == true) { + if (currentIndex == DownloadTasks.length - 1) { + console.log('last found all downloaded'); + onDownloadComplete(); + } + else { + console.log('all downloaded but last not found '); + } + + } + else { + console.log('Cannot download all Data'); + } + + }) + .catch(err => { + console.log('onPage Team error', err); + }); + } + + } + + async function onDownloadComplete() { + let count = dowloadedCount + 1; + setIsDownloadStart(false); + setDowloadedCount(count); + notify(ST.DataDownloaded, 'SHORT'); + props.navigation.goBack(); + } + + async function onTaskError() { + notify(ST.Cannotdownloaddata); + setIsDownloadStart(false); + } + + async function onNoData(data = [], shouldStop = false, tbname = '') { + + if (tbname != '') { + db.transaction(function (txn) { + // delete all today data + txn.executeSql(`delete from ${tbname} where 1=1`, [], function (txn1, txnres) { + console.log('deleted all data for ' + tbname); + }, function (Etxn, err) { + console.log('err:', err); + }); + }); + } + + if (shouldStop == true) { + let msg = ST.Nodatafoundfor + tbname + ''; + if (tbname == 'JourneyPlan_RouteWise') { + msg = ST.Youhavenojourneyplanfortoday; + } + notify(msg); + setIsDownloadStart(false); + } + else { + setTaskResponse(data); + } + } + + async function updateTaskRes(res, index, count) { + // var DownloadTasks=getDownloadDataTask(); + + const todate = new Date(); + const today = moment(todate).format("MM/DD/YYYY"); + let d2 = today; + let dk_data = DownloadTasks[index]; + let key = dk_data.DownloadKey || ''; + let IsMandatory = dk_data.IsMandatory == 'true' || dk_data.IsMandatory == 1 ? true : false; + + return new Promise(async (resolve, reject) => { + switch (key) { + + case 'Mapping_JourneyPlan': { + let i_res = await insert_TaskDownloadedData(res, 'Mapping_JourneyPlan', PJP_colList, props); + console.log('i_res:', i_res); + let data_arr = i_res['data_arr']; + setTaskResponse(data_arr); + let r = i_res['r']; + console.log('r:', r); + resolve(r); + break; + } + case 'Adhoc_JourneyPlan': { + let i_res = await insert_TaskDownloadedData(res, 'Adhoc_JourneyPlan', PJP_colList, props); + console.log('i_res:', i_res); + let data_arr = i_res['data_arr']; + setTaskResponse(data_arr); + let r = i_res['r']; + console.log('r:', r); + resolve(r); + break; + } + case 'Mapping_ProductAssortmentStorewise': { + let colList = ['StoreId', 'ProductId', 'MSL', 'MBQ']; + let i_res = await insert_TaskDownloadedData(res, 'Mapping_ProductAssortmentStorewise', colList, props); + console.log('i_res:', i_res); + let data_arr = i_res['data_arr']; + setTaskResponse(data_arr); + let r = i_res['r']; + console.log('r:', r); + resolve(r); + break; + } + case 'Mapping_StoreWindow': { + let colList = ['StoreId', 'WindowDefinitionId']; + let i_res = await insert_TaskDownloadedData(res, 'Mapping_StoreWindow', colList, props); + console.log('i_res:', i_res); + let data_arr = i_res['data_arr']; + setTaskResponse(data_arr); + let r = i_res['r']; + console.log('r:', r); + resolve(r); + break; + } + case 'Mapping_WindowQuestion': { + let colList = ['WindowDefinitionId', 'WindowQuestionId']; + let i_res = await insert_TaskDownloadedData(res, 'Mapping_WindowQuestion', colList, props); + console.log('i_res:', i_res); + let data_arr = i_res['data_arr']; + setTaskResponse(data_arr); + let r = i_res['r']; + console.log('r:', r); + resolve(r); + break; + } + + case 'Mapping_StorePOSM': { + let colList = ['StoreId', 'POSMDefinitionId']; + let i_res = await insert_TaskDownloadedData(res, 'Mapping_StorePOSM', colList, props); + console.log('i_res:', i_res); + let data_arr = i_res['data_arr']; + setTaskResponse(data_arr); + let r = i_res['r']; + console.log('r:', r); + resolve(r); + break; + } + + case 'Mapping_POSMQuestion': { + let colList = ['POSMDefinitionId', 'POSMQuestionId']; + let i_res = await insert_TaskDownloadedData(res, 'Mapping_POSMQuestion', colList, props); + console.log('i_res:', i_res); + let data_arr = i_res['data_arr']; + setTaskResponse(data_arr); + let r = i_res['r']; + console.log('r:', r); + resolve(r); + break; + } + + case 'Mapping_StoreShelfTalker': { + let colList = ['StoreId', 'StDefinitionId']; + let i_res = await insert_TaskDownloadedData(res, 'Mapping_StoreShelfTalker', colList, props); + console.log('i_res:', i_res); + let data_arr = i_res['data_arr']; + setTaskResponse(data_arr); + let r = i_res['r']; + console.log('r:', r); + resolve(r); + break; + } + + case 'Mapping_ShelfTalkerQuestion': { + let colList = ['StDefinitionId', 'StQuestionId']; + let i_res = await insert_TaskDownloadedData(res, 'Mapping_ShelfTalkerQuestion', colList, props); + console.log('i_res:', i_res); + let data_arr = i_res['data_arr']; + setTaskResponse(data_arr); + let r = i_res['r']; + console.log('r:', r); + resolve(r); + break; + } + + case 'Mapping_StoreVisibility': { + let colList = ['StoreId', 'VisibilityDefinitionId']; + let i_res = await insert_TaskDownloadedData(res, 'Mapping_StoreVisibility', colList, props); + console.log('i_res:', i_res); + let data_arr = i_res['data_arr']; + setTaskResponse(data_arr); + let r = i_res['r']; + console.log('r:', r); + resolve(r); + break; + } + + case 'Mapping_VisibilityQuestion': { + let colList = ['VisibilityDefinitionId', 'VisibilityQuestionId']; + let i_res = await insert_TaskDownloadedData(res, 'Mapping_VisibilityQuestion', colList, props); + console.log('i_res:', i_res); + let data_arr = i_res['data_arr']; + setTaskResponse(data_arr); + let r = i_res['r']; + console.log('r:', r); + resolve(r); + break; + } + case 'Mapping_StorePromotion': { + let colList = ['StoreId', 'PromoDefinitionId']; + let i_res = await insert_TaskDownloadedData(res, 'Mapping_StorePromotion', colList, props); + console.log('i_res:', i_res); + let data_arr = i_res['data_arr']; + setTaskResponse(data_arr); + let r = i_res['r']; + console.log('r:', r); + resolve(r); + break; + } + case 'Mapping_PromotionQuestion': { + let colList = ['PromoDefinitionId', 'PromoQuestionId']; + let i_res = await insert_TaskDownloadedData(res, 'Mapping_PromotionQuestion', colList, props); + console.log('i_res:', i_res); + let data_arr = i_res['data_arr']; + setTaskResponse(data_arr); + let r = i_res['r']; + console.log('r:', r); + resolve(r); + break; + } + case 'Mapping_StoreShareOfShelf': { + let colList = ['StoreId', 'SOSDefinitionId']; + let i_res = await insert_TaskDownloadedData(res, 'Mapping_StoreShareOfShelf', colList, props); + console.log('i_res:', i_res); + let data_arr = i_res['data_arr']; + setTaskResponse(data_arr); + let r = i_res['r']; + console.log('r:', r); + resolve(r); + break; + } + case 'Mapping_DisplayChecklist': { + let colList = ['DisplayId', 'ChecklistId']; + let i_res = await insert_TaskDownloadedData(res, 'Mapping_DisplayChecklist', colList, props); + console.log('i_res:', i_res); + let data_arr = i_res['data_arr']; + setTaskResponse(data_arr); + let r = i_res['r']; + console.log('r:', r); + resolve(r); + break; + } + case 'Mapping_Survey': { + let colList = ['StoreId', 'SurveyId']; + let i_res = await insert_TaskDownloadedData(res, 'Mapping_Survey', colList, props); + console.log('i_res:', i_res); + let data_arr = i_res['data_arr']; + setTaskResponse(data_arr); + let r = i_res['r']; + console.log('r:', r); + resolve(r); + break; + } + case 'Mapping_StoreCategory': { + let colList = ['StoreId', 'CategoryDefinitionId']; + let i_res = await insert_TaskDownloadedData(res, 'Mapping_StoreCategory', colList, props); + console.log('i_res:', i_res); + let data_arr = i_res['data_arr']; + setTaskResponse(data_arr); + let r = i_res['r']; + console.log('r:', r); + resolve(r); + break; + } + case 'Mapping_CategoryQuestion': { + let colList = ['CategoryDefinitionId', 'CategoryQuestionId']; + let i_res = await insert_TaskDownloadedData(res, 'Mapping_CategoryQuestion', colList, props); + console.log('i_res:', i_res); + let data_arr = i_res['data_arr']; + setTaskResponse(data_arr); + let r = i_res['r']; + console.log('r:', r); + resolve(r); + break; + } + + + + } + }).catch((err) => { + console.log('error in downloading', err); + return false; + }); + + } + + + // download functionality end + + + + + async function getData(storeData1, menu1) { + try { + await db.transaction(async function (txn) { + + let q1 = `Select * From Master_City`; + let q2 = `Select * From Master_StoreType`; + let q3 = `Select * From Master_Chain`; + let q4 = `Select * From Master_StoreCategory`; + let q5 = `Select * From Master_StoreClass`; + let q6 = `Select * From Master_Distributor`; + let q7 = `Select * From Master_Channel`; + + await txn.executeSql(q1, [], async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + let arr = []; + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + arr.push(data); + if (i == txnres2.rows.length - 1) { + setCityList(arr); + + } + } + } + }, function (txnE, txnerr) { console.log(txnerr); },); + await txn.executeSql(q2, [], async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + let arr = []; + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + arr.push(data); + if (i == txnres2.rows.length - 1) { + setStoreTypeList(arr); + console.log("StoreTypeList:", arr) + } + } + } + }, function (txnE, txnerr) { console.log(txnerr); },); + await txn.executeSql(q3, [], async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + let arr = []; + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + arr.push(data); + if (i == txnres2.rows.length - 1) { + setChainList(arr); + console.log("ChainList:", arr) + + } + } + } + }, function (txnE, txnerr) { console.log(txnerr); },); + await txn.executeSql(q4, [], async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + let arr = []; + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + arr.push(data); + if (i == txnres2.rows.length - 1) { + setStoreCategory(arr); + console.log("setStoreCategory:", arr) + + } + } + } + }, function (txnE, txnerr) { console.log(txnerr); },); + await txn.executeSql(q5, [], async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + let arr = []; + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + arr.push(data); + if (i == txnres2.rows.length - 1) { + setStoreClassList(arr); + } + } + } + }, function (txnE, txnerr) { console.log(txnerr); },); + await txn.executeSql(q6, [], async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + let arr = []; + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + arr.push(data); + if (i == txnres2.rows.length - 1) { + setDistributorList(arr); + } + } + } + }, function (txnE, txnerr) { console.log(txnerr); },); + await txn.executeSql(q7, [], async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + let arr = []; + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + arr.push(data); + if (i == txnres2.rows.length - 1) { + setChannelList(arr); + } + } + } + }, function (txnE, txnerr) { console.log(txnerr); },); + }); + } catch (err) { + console.log(err); + } + } + + + + async function validateForm() { + let isValid = true; + let { Name, Address, Location, PinCode, ContactPerson, ContactNumber, mobileNumber, Email, TaxType, GSTNo, GSTImage, CityId, ChannelId, DistributorId, ChainId, StoreTypeId, StoreClassId, StoreCategoryId } = StoreData; + console.log('ChainId:', ChainId); + if (Name == '' || Name == null) { + isValid = false; + notify(ST.PleaseenterStoreName, 'SHORT'); + } + else if (Address == '' || Address == null) { + isValid = false; + notify(ST.PleaseenterAddress + ' ', 'SHORT'); + } + else if (Location == '' || Location == null) { + isValid = false; + notify('Please enter Location ', 'SHORT'); + } + else if (PinCode == '' || PinCode == null) { + isValid = false; + notify('Please enter Pincode ', 'SHORT'); + } + else if (PinCode.length != 6) { + isValid = false; + notify('Please enter valid Pincode', 'SHORT'); + } + // else if((ContactPerson=='' || ContactPerson==null )){ + // isValid=false; + // notify('Please enter Contact Person ','SHORT'); + // } + else if ((ContactNumber != null && ContactNumber != '') && ContactNumber.length != 10) { + isValid = false; + notify('Please enter valid Contact Number', 'SHORT'); + } + else if ((mobileNumber != null && mobileNumber != '') && mobileNumber.length != 10) { + isValid = false; + notify('Please enter valid Mobile Number', 'SHORT'); + } + else if ((Email != '' && Email != null) && !ValidateEmail(Email)) { + isValid = false; + notify('Please enter valid Email', 'SHORT'); + } + else if ((TaxType == '' || TaxType == null)) { + isValid = false; + notify('Please select TaxType', 'SHORT'); + } else if (TaxType == 'GST' && (GSTNo == '' || GSTNo == null)) { + isValid = false; + notify('Please enter GST No', 'SHORT'); + } + else if (TaxType == 'GST' && (GSTImage == '' || GSTImage == null)) { + isValid = false; + notify('Please Take GST Image', 'SHORT'); + } else if (CityId == '' || CityId == null) { + isValid = false; + notify('Please select CityId', 'SHORT'); + } else if (StoreTypeId == '' || StoreTypeId == null) { + isValid = false; + notify('Please select StoreTypeId', 'SHORT'); + } else if (ChainId == '' || ChainId == null) { + isValid = false; + notify('Please select ChainId', 'SHORT'); + } else if (ChannelId == '' || ChannelId == null) { + isValid = false; + notify('Please select ChannelId', 'SHORT'); + } else if (StoreCategoryId == '' || StoreCategoryId == null) { + isValid = false; + notify('Please select StoreCategoryId', 'SHORT'); + } else if (StoreClassId == '' || StoreClassId == null) { + isValid = false; + notify('Please select StoreClassId', 'SHORT'); + } else if (DistributorId == '' || DistributorId == null) { + isValid = false; + notify('Please select DistributorId', 'SHORT'); + } + + console.log('isValid:', isValid); + return isValid; + } + + + const submit = async () => { + let valid = await validateForm(); + + + if (valid) { + const url = props.baseurl + getMethodName(METHODS.CREATESTORE); + let PostData = { + "UserId": props.UserId, + "VisitDate": today, + "StoreName": StoreData.Name || '', + "Address": StoreData.Address || '', + "Location": StoreData.Location || '', + "Pincode": StoreData.PinCode || '', + "ContactPerson": StoreData.ContactPerson || '', + "Mobile": StoreData.mobileNumber || '', + "Phone": StoreData.ContactNumber || '', + "Email": StoreData.Email || '', + "TaxType": StoreData.TaxType || '', + "GSTNo": StoreData.GSTNo || '', + "GSTImage": StoreData.GSTImage || '', + "CityId": StoreData.CityId || '', + "ChannelId": StoreData.ChannelId || '', + "DistributorId": StoreData.DistributorId || '', + "ChainId": StoreData.ChainId || '', + "StoreTypeId": StoreData.StoreTypeId || '', + "StoreClassId": StoreData.StoreClassId || '', + "StoreCategoryId": StoreData.StoreCategoryId || '', + } + setProcessing(true) + let fpath = Platform.OS == 'ios' ? ImgURI.replace('file://', '') : ImgURI; + // var data1 = new FormData(); + // data1.append('file', { + // uri: fpath , + // type: 'image/jpg', + // name: StoreImage, + // }); + + // data1.append('Foldername',"GSTImages"); + // data1.append('Path', today); + + const url1 = (props.imageUploadUrl || URL_IMAGE) + getMethodName(METHODS.UPLOADIMAGES_METHOD); + + console.log('url:', url, PostData); + await UploadData2(url, PostData) + .then(async (res) => { + console.log('res:', res); + if (parseInt(res) > 0) { + setHasUnsavedChanges(false); + // Upload Image + // if(StoreData.TaxType=='GST' && (StoreData.GSTImage!='' && StoreData.GSTImage!=null)){ + // await UploadFormData(url1,data1) + // .then(async(res1)=>{ + // console.log('res1 image upload:',res1); + // let resStatus = res1.includes("Success"); + // if(resStatus){ + // setProcessing(false); + // beforeExecuteTasks(); + // } + // else{ + // setProcessing(false); + // beforeExecuteTasks(); + // notify('Cannot upload GST image!'); + // } + + + // // props.navigation.goBack() + // }) + // .catch((err)=>{ + // console.log(err); + // setProcessing(false); + // beforeExecuteTasks(); + // notify('Cannot upload GST image!'); + // }); + + // } + // else{ + // setProcessing(false); + // beforeExecuteTasks(); + // } + + setProcessing(false); + beforeExecuteTasks(); + } + else { + setProcessing(false); + } + }) + .catch((err) => { + console.log(err); setProcessing(false); + }); + + } + } + + + + function onselectionChange(option, keyLbl, keyVal, otherData) { + let allData = StoreData; + allData[keyLbl] = option.label; + allData[keyVal] = option.value; + + if (keyLbl == "TaxType" && option.label == 'GST') { + setGSTFlag(true) + } else { + setGSTFlag(false) + } + + console.log('allData:', allData); + setStoreData(allData); + setHasUnsavedChanges(true); + setrerenderdata(!rerenderdata); + } + + async function openCamera() { + console.log('openCamera'); + setShowCamera(true); + } + + async function getImage(imgdata) { + if (typeof imgdata == 'object' && imgdata.errorCode == 'camera_unavailable') { + notify(ST.Cameraunavailable); + } + else if (typeof imgdata == 'object' && imgdata.uri != null) { + const img = imgdata; + const imgurl = img.uri, imgWidth = img.width, imgHeight = img.height; + let isImgFromGallery = img.fromGallery != null ? img.fromGallery : false; + let picture_clickedd = isImgFromGallery == true ? img.datetime : new Date(); + ////change by jeevanp + let picture_clicked_time = moment(picture_clickedd).format('MM-DD-YYYY HH:mm:ss') + let picture_clicked_time_for_pic_name = moment(picture_clickedd).format('MMDDYYYY_HHmmss') + console.log("time", picture_clicked_time); + console.log("time1", picture_clicked_time_for_pic_name); + ////change by jeevanp + let calculate_tym_date_for_filename = picture_clicked_time_for_pic_name; + let calculate_tym_date_over_img = picture_clicked_time; + let filename = (props.UserId || '') + '_AddStore-' + calculate_tym_date_for_filename + '.jpg'; + console.log(filename, "file_name"); + + const mark_text1 = calculate_tym_date_over_img; + const mark_text2 = 'Store Name:' + StoreData.Name + ' | User Id:' + props.UserId + ' | Image Type: AddStore' + ' | Date:' + calculate_tym_date_over_img; + console.log(mark_text1 + "\n" + mark_text2, "mark_text2"); + + // renamefile + let imagePath = `${CoverageImagePath}${filename}`; + RNFS.copyFile(imgurl, imagePath) + .then(async (resn) => { + // render data with clicked image + let uri = 'file://' + imagePath; + setImgURI(uri) + setSelectedImg(uri) + setShowImg(true) + setStoreImage(filename) + setStoreData({ ...StoreData, GSTImage: filename }) + setHasUnsavedChanges(true); + setrerenderdata(!rerenderdata); + + // add metdata then resize image and restored back to the imagePath + let restore_data = { "destFilePath": imagePath, "imgurl": imgurl, imgWidth, imgHeight, mark_text1, mark_text2 } + let is_restored = await restore_ImageWithMetaData(restore_data, imgdata); + console.log("image restored:", is_restored); + }) + .catch(err => { + console.log(ST.Errorimagefilewritefailed + '!!!'); + console.log(err.message, err.code); + }); + + } + } + + async function OpenImgModal(imgPath) { + setSelectedImg(imgPath) + setShowModal(true); + if ((imgPath != '' && imgPath != null)) { + setShowImageSaveOp(false); + } + else { + setShowImageSaveOp(true); + } + + } + + function cancelImage() { + // setImage1(''); + setSelectedImg(''); + setReCapImgModalObj({}) + setShowModal(false); + } + + function _OpenCaptureImage_Modal(img) { + + const isImageCap = (img != '' || img != null) ? true : false; + + + return ( + + { + isImageCap && + + + + + { openCamera() }}> + + + + {!showImageSaveOp && + { cancelImage() }}> + {ST.Close} + + } + + } + + ) + } + + return ( + + + {processing && } + + {(IsDownloadStart && dowloadedCount <= totalCount) && } + {_OpenCaptureImage_Modal()} + { setShowCamera(false); getImage(imgData) }} showCamera={showCamera} onHideCamera={() => { setShowCamera(false); }} /> + + + + + + + {rerenderdata == rerenderdata && + + + {"Name"} + + { onStoreDataChange(val, 'Name', 'text') }} + /> + + + + {"Address"} + + { onStoreDataChange(val, 'Address', 'text') }} + /> + + + + {"Location"} + + { onStoreDataChange(val, 'Location', 'text') }} + /> + + + + {"Pin Code"} + + { onStoreDataChange(val, 'PinCode', 'numeric'); }} + /> + + + + {"Tax Type"} + + {CustomPicker(props, TaxType, 'TaxType', 'TaxTypeId', 'TaxType', 'TaxTypeId', onselectionChange, { value: StoreData.TaxType })} + + + {GSTFlag && + <> + + {"GST No"} + + { onStoreDataChange(val, 'GSTNo', 'text'); }} + /> + + + { + + + {!showImg ? + { openCamera() }}> + + : showImg ? + { OpenImgModal(ImgURI) }}> + + : null + } + + } + + } + + {"Contact Person"} + + { onStoreDataChange(val, 'ContactPerson', 'text'); }} + /> + + + + {"Contact Number"} + + { onStoreDataChange(val, 'ContactNumber', 'numeric'); }} + /> + + + + {"Mobile Number"} + + { onStoreDataChange(val, 'mobileNumber', 'numeric'); }} + /> + + + + {"Email"} + + { onStoreDataChange(val, 'Email', 'text'); }} + /> + + + + + {"City"} + + {CustomPicker(props, cityList, 'CityName', 'CityId', 'CityName', 'CityId', onselectionChange, { value: StoreData.CityName })} + + + + {"Store Type"} + + {CustomPicker(props, storeTypeList, 'StoreType', 'StoreTypeId', 'StoreType', 'StoreTypeId', onselectionChange, { value: StoreData.StoreType })} + + + + {"Chain Name"} + + {CustomPicker(props, ChainList, 'ChainName', 'ChainId', 'ChainName', 'ChainId', onselectionChange, { value: StoreData.ChainName })} + + + + {"Channel Name"} + + {CustomPicker(props, ChannelList, 'ChannelName', 'ChannelId', 'ChannelName', 'ChannelId', onselectionChange, { value: StoreData.ChannelName })} + + + + {"Store Category"} + + {CustomPicker(props, StoreCategory, 'StoreCategory', 'StoreCategoryId', 'StoreCategory', 'StoreCategoryId', onselectionChange, { value: StoreData.StoreCategory })} + + + + {"Store Class"} + + {CustomPicker(props, StoreClassList, 'StoreClass', 'StoreClassId', 'StoreClass', 'StoreClassId', onselectionChange, { value: StoreData.StoreClass })} + + + + {"Distributor Name"} + + {CustomPicker(props, DistributorList, 'DistributorName', 'DistributorId', 'DistributorName', 'DistributorId', onselectionChange, { value: StoreData.DistributorName })} + + + + + } + + + + { submit() }} /> + + + + + ); +} + + + +export default connect(mapStateToProps, mapDispatchToProps)(AddStoreScreen); \ No newline at end of file diff --git a/PerformicsSrc/src/screens/AddedStoreList.js b/PerformicsSrc/src/screens/AddedStoreList.js new file mode 100644 index 0000000..8098880 --- /dev/null +++ b/PerformicsSrc/src/screens/AddedStoreList.js @@ -0,0 +1,748 @@ +import React, { useState, useEffect, useRef } from 'react'; +import Container from '../components/container'; +import { useRoute } from '@react-navigation/native'; +import { globalStyles, customStyles, GetPageTheme } from "../styles/Global"; +import { StatusBar, Image, TextInput, View, Text, ScrollView, TouchableOpacity, Platform, PermissionsAndroid, FlatList, Alert, Animated, AppState, Keyboard } from 'react-native'; +import { ReactReduxContext, connect, useSelector, useDispatch } from 'react-redux'; +import { mapStateToProps, mapDispatchToProps } from '../reducers/contextProvider'; +import SQLite from 'react-native-sqlite-2'; +import { notify } from '../components/notify'; +import moment from 'moment'; +import { getDownloadJson, getKPIFields, marktext1, marktext2, resizeImage, restore_ImageWithMetaData, validateNumber } from '../controller/functions'; +import { get_item, set_item, clear_item } from '../components/localStorage'; +import { version, sloganline, appname, testurl, db, colors_Arr, common_ImagePath, ImageFolderPath } from '../constants/constants'; +import CustomHeader from '../components/customHeader'; +import { Card, Menu, Switch } from 'react-native-paper'; +import { AntDesign, Entypo, FontAwesome, Fontisto, MaterialCommunityIcons } from '../components/icons'; +import { stat } from 'react-native-fs'; +import CustomLoader from '../components/CustomLoader'; +import LinearGradient from 'react-native-linear-gradient'; +import { AppTables } from '../constants/tableConstants'; +import { SvgXml } from 'react-native-svg'; +import { launchCamera, launchImageLibrary, CameraOptions } from 'react-native-image-picker'; +import * as RNFS from 'react-native-fs'; +import GradientButton from '../components/gradientButton'; + +import cameraImg from '../assets/performics/camera_front_image.svg' +import addImg from '../assets/performics/add_image.svg'; +import CustomModal from '../components/CustomModal'; +import { Q_getpaidvisibility } from '../constants/ConstantQueries'; +import { Picker } from '@react-native-picker/picker'; +import { ConfirmSaveAlert } from '../components/alert'; +import ModalSelector from 'react-native-modal-selector' +import { CustomPicker } from '../components/CustomPicker'; +import CustomCamera from '../components/Camera'; +import DateTimePicker from '@react-native-community/datetimepicker'; + +import CameraImg3 from '../assets/performics/camera_tick.svg'; +import CameraImg2 from '../assets/performics/camera_icon.svg'; +import CameraImg4 from '../assets/performics/camera_asterisk.svg'; +import CameraImg5 from '../assets/image/astrickcamera.svg'; +import DateTimePickerModal from "react-native-modal-datetime-picker"; +import { getMethodName, METHODS } from '../constants/methodNames'; + +function AddedStoreList(props) { + const route = useRoute(); + const ST = props.StaticText || {}; + // get all theme styles acc to current theme set + const PageTheme = GetPageTheme(props.DarkMode, route.name); + const customStyle = customStyles(props.DarkMode, route.name); + const animatedChoice = useRef(new Animated.Value(0)).current; + + const [processing, setProcessing] = useState(true); + const [loaderTitle, setLoaderTitle] = useState(); + const [isAdhocScreen, setIsAdhocScreen] = useState(false); + const [storeData, setStoreData] = useState({}); + const [StoreCameraAllow, setStoreCameraAllow] = useState(true); + + const [ShowDatePicker1, setShowDatePicker1] = useState(false); + const [ShowDatePicker, setShowDatePicker] = useState(false); + const [currentMenu, setCurrentMenu] = useState({}); + const [brandData, setBrandData] = useState([]); + const [rerenderdata, setrerenderdata] = useState(0); + const [rerenderdata2, setrerenderdata2] = useState(0); + + const [AddVisibility, setAddVisibility] = useState([]); + const [AddVisFormData, setAddVisFormData] = useState({ AssertCount: 1 }); + const [isAddVisPresent, setIsAddVisPresent] = useState(0); + const [showAlert, setShowAlert] = useState(false); + const [Categories, setCategories] = useState([]); + const [SubCategories, setSubCategories] = useState([]); + const [Brands, setBrands] = useState([]); + const [DisplayList, setDisplayList] = useState([]); + const [hasUnsavedChanges, setHasUnsavedChanges] = useState(false); + const [showCamera, setShowCamera] = useState(false); + const [clickImageType, setClickImageType] = useState('1'); + const [toRemoveId, setToRemoveId] = useState(''); + const [toRemoveItem, setToRemoveItem] = useState({}); + const [showRemoveConfirm_M, setshowRemoveConfirm_M] = useState(false); + const [showRAllC_M, setShowRAllC_M] = useState(false); + const [KPIFields, setKPIFields] = useState([]); + const [dateValue, setDateValue] = useState(''); + const [FromDate, setFromDate] = useState(''); + const [FromDate2, setFromDate2] = useState(""); + const [FromDateObj, setFromDateObj] = useState({}); + + const [ToDate, setToDate] = useState(''); + const [ToDate2, setToDate2] = useState(new Date()); + + const [SelectedImg, setSelectedImg] = useState(''); + const [showModal, setShowModal] = useState(false); + const [reCapImgModalObj, setReCapImgModalObj] = useState({}); + const [showImageSaveOp, setShowImageSaveOp] = useState(true); + const [ImgMadCount, setImgMadCount] = useState({ img1: 0, img2: 0 }); + + const hasUnsavedChangesRef = React.useRef(hasUnsavedChanges); + const WindowDataRef = React.useRef(AddVisibility); + const StoreIdRef = React.useRef(null); + const ScreenNameRef = React.useRef(''); + + const [showSwitchCamera, setShowSwitchCamera] = useState(false); + + + const VisFormDataRef = React.useRef(AddVisFormData); + const isAddVisPresentRef = React.useRef(isAddVisPresent); + + // AddVisibility,AddVisFormData,isAddVisPresent,pro + + const d1 = new Date(); + const d2 = moment(d1).format('MM/DD/YYYY'); + + + useEffect(() => { + getData(); + }, []) + + async function getData() { + try { + + + setProcessing(true) + let token = await get_item('loginToken'); + let loginInfo = await get_item('loginInfo'); + const loginDetails = JSON.parse(loginInfo); + + var data1 = { Downloadtype: "AddStore_Data", Param1: "", Param2: Platform.OS=="ios"?"iOS":"Android", username: loginDetails.UserId, empid: "" } + + const url = (props.baseurl || baseurl) + getMethodName(METHODS.DOWNLOADJSON_METHOD); + console.log(url, data1); + + + await getDownloadJson(url, data1) + .then(async (res) => { + setProcessing(false); + console.log('res: Non_Working_Reason', res); + if (res.AddStore_Data != null) { + let QAD_arr = res.AddStore_Data || []; + setAddVisibility(QAD_arr) + + } + else if (typeof (res) == 'object' && res.length > 0 && res[0].Result != null && res[0].Result.includes('No Data')) { + // Non_Working_Reason Not Found + // goToHome(); + } + }) + .catch(err => { + console.log('onPage Team error', err); + }); + setProcessing(false) + + } catch (err) { + setProcessing(false) + console.log(err); + } + } + + + function BgUnsavedChanges(val) { + hasUnsavedChangesRef.current = val + setHasUnsavedChanges(val); + } + + function BgWindowData(val) { + WindowDataRef.current = val + setAddVisibility(val); + } + + function BgAddVisFormData(val) { + VisFormDataRef.current = val + setAddVisFormData(val); + } + + function BgIsAddVisPresent(val) { + isAddVisPresentRef.current = val + setIsAddVisPresent(val); + } + + + function cancelImage() { + // setImage1(''); + setSelectedImg(''); + setReCapImgModalObj({}) + setShowModal(false); + } + + async function getImage(imgdata) { + if (typeof imgdata == 'object' && imgdata.errorCode == 'camera_unavailable') { + notify(ST.Cameraunavailable); + } + else if (typeof imgdata == 'object' && imgdata.uri != null) { + const img = imgdata; + const imgurl = img.uri, imgWidth = img.width, imgHeight = img.ExtendedHeight; + let isImgFromGallery = img.fromGallery != null ? img.fromGallery : false; + let picture_clickedd = isImgFromGallery == true ? img.datetime : new Date(); + let picture_clicked_time = moment(picture_clickedd).format('MM-DD-YYYY HH:mm:ss') + let picture_clicked_time_for_pic_name = moment(picture_clickedd).format('MMDDYYYY_HHmmss') + ////change by jeevanp + console.log("time", picture_clicked_time); + console.log("time1", picture_clicked_time_for_pic_name); + ////change by jeevanp + let calculate_tym_date_for_filename = picture_clicked_time_for_pic_name; + let calculate_tym_date_over_img = picture_clicked_time; + let filename = storeData.StoreId + '_' + (props.UserId || '') + '_AddedStoreImg-' + calculate_tym_date_for_filename + '.jpg'; + ////change by jeevanp + console.log("filename=>", filename) + const mark_text1 = calculate_tym_date_over_img; + const mark_text2 = 'Store Name:' + storeData.StoreName + ' | Store Id:' + storeData.StoreId + ' | User Id:' + storeData.EmpId + ' | Image Type: Add. Visibility' + ' | Date:' + calculate_tym_date_over_img; + + let addvisdata = AddVisFormData; + let image_key = 'Image1'; + let image_path_key = 'Image1Path'; + addvisdata[image_key] = filename; + + let imagePath = `${ImageFolderPath + currentMenu.ScreenName}/${filename}`; + RNFS.copyFile(imgurl, imagePath) + .then(async (resn) => { + // render data with clicked image + let uri = 'file://' + imagePath; + addvisdata[image_path_key] = uri; + setSelectedImg(uri) + BgAddVisFormData(addvisdata) + BgUnsavedChanges(true) + setrerenderdata2(!rerenderdata2); + // add metdata then resize image and restored back to the imagePath + let restore_data = { "destFilePath": imagePath, "imgurl": imgurl, imgWidth, imgHeight, mark_text1, mark_text2 } + let is_restored = await restore_ImageWithMetaData(restore_data, imgdata); + console.log("image restored:", is_restored); + }) + .catch(err => { + console.log(err.message, err.code); + }); + } + } + + function _OpenCaptureImage_Modal(img) { + + const isImageCap = (img != '' || img != null) ? true : false; + // console.log("imag pop is trigger",isImageCap,showModal,img) + let { window, splitItem, splitItemIndex, cameraType } = reCapImgModalObj + let camera2Label = (window && window.PromoImage2Lable) || ''; + return ( + + { + isImageCap && + + + + + { openCamera('1') }}> + + + + {!showImageSaveOp && + { cancelImage() }}> + {ST.Close} + + } + + } + + ) + } + + async function openCamera(type = '1') { + console.log('openCamera'); + setClickImageType(type); + setShowCamera(true); + // props.navigation.navigate('CameraScreen',{'getImage':getImage,'cameraType':'back'}) + } + + async function onSubmitData() { + let isvalid = await validate(); + if (isvalid) { + Keyboard.dismiss(); + setShowAlert(true); + } + } + + + + + async function validate() { + + let isValid = true; + if (isAddVisPresent == 1 && AddVisibility.length <= 0) { + isValid = false; + notify(ST.Pleaseaddfirst, 'SHORT'); + } + + console.log('isValid:', isValid); + return isValid; + } + + async function validateForm() { + let isValid = true; + let { CategoryName, CategoryId, SubCategoryName, SubCategoryId, BrandName, BrandId, DisplayName, DisplayId, AssertCount, Remark, Image1, Image1Path, FromDate, ToDate, showFromDateFlag } = AddVisFormData; + + let isFromDateIndex = KPIFields.findIndex(i => i.KPIFieldName == 'ShowFromDate'); + let isFromDateKPIObj = isFromDateIndex >= 0 ? KPIFields[isFromDateIndex] : {}; + let isFromDateEnable = isFromDateIndex >= 0 ? isFromDateKPIObj['KPIFieldEnable'] : true; + + let isToDateIndex = KPIFields.findIndex(i => i.KPIFieldName == 'ShowToDate'); + let isToDateKPIObj = isToDateIndex >= 0 ? KPIFields[isToDateIndex] : {}; + let isToDateEnable = isToDateIndex >= 0 ? isToDateKPIObj['KPIFieldEnable'] : true; + + let AddVisCameraReqI = KPIFields.findIndex(i => i.KPIFieldName == 'AddVisCameraReq'); + let AddVisCameraReqObj = AddVisCameraReqI >= 0 ? KPIFields[AddVisCameraReqI] : {}; + let AddVisCameraReq = AddVisCameraReqI >= 0 ? AddVisCameraReqObj['KPIFieldEnable'] : true; + + + if ((CategoryName == '' || CategoryName == null) || (CategoryId == '' || CategoryId == null)) { + isValid = false; + notify(ST.PleaseSelectCategory, 'SHORT'); + } + else if ((SubCategoryName == '' || SubCategoryName == null) || (SubCategoryId == '' || SubCategoryId == null)) { + isValid = false; + notify(ST.Pleaseselectsubcategory, 'SHORT'); + } + else if ((BrandName == '' || BrandName == null) || (BrandId == '' || BrandId == null)) { + isValid = false; + notify(ST.Pleaseselectbrand, 'SHORT'); + } + else if ((DisplayName == '' || DisplayName == null) || (DisplayId == '' || DisplayId == null)) { + isValid = false; + notify(ST.Pleaseselectdisplaytype, 'SHORT'); + } else if (AssertCount == 0) { + isValid = false; + notify("Please fill the Asset Count minimum 1", 'SHORT'); + } + // else if((Remark=='' || Remark==null )){ + // isValid=false; + // notify('Please enter remark','SHORT'); + // } + else if (isFromDateEnable == true && !AddVisFormData.hasOwnProperty("FromDate") && (FromDate == '' || FromDate == null)) { + isValid = false; + notify('Please Select The From Date ', 'SHORT'); + } else if (isToDateEnable == true && !AddVisFormData.hasOwnProperty("ToDate") && (ToDate == '' || ToDate == null)) { + isValid = false; + notify('Please Select The To Date ', 'SHORT'); + } + else if (StoreCameraAllow == true && AddVisCameraReq && (Image1 == '' || Image1 == null)) { + isValid = false; + notify(ST.Pleaseclickimage, 'SHORT'); + } + + console.log('isValid:', isValid); + return isValid; + } + + function onFormDataChange(val, key, type = '') { + if (val != '') { + let isValid = validateNumber(val, type); + if (!isValid) { + return; + } + } + + let data = AddVisFormData; + data[key] = val; + // setAddVisFormData(data); + // setHasUnsavedChanges(true); + BgAddVisFormData(data) + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + + function onselectionChange(option, keyLbl, keyVal) { + let data = AddVisFormData; + data[keyVal] = option.value; + data[keyLbl] = option.label; + + CleanSelector(option, keyLbl, data) + + // setAddVisFormData(data); + BgAddVisFormData(data) + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + + } + + function CleanSelector(option, keyLbl = '', data = {}) { + + if (keyLbl == 'CategoryName') { + loadData(option.value, 'SubCategories'); + + // clear subcategory and brand + data['SubCategoryId'] = ''; + data['SubCategoryName'] = ''; + data['BrandId'] = ''; + data['BrandName'] = ''; + + + data['DisplayId'] = '' + data['DisplayName'] = '' + data['Remark'] = '' + data['Image1Path'] = '' + + setToDate(''); + setToDate2(""); + // setToDate2(new Date(null)); + + setFromDate(''); + setFromDate2(''); + // data['FromDate']=''; + } + else if (keyLbl == 'SubCategoryName') { + loadData(option.value, 'Brands'); + + // clear brand + data['BrandId'] = ''; + data['BrandName'] = ''; + + data['DisplayId'] = '' + data['DisplayName'] = '' + + data['Image1Path'] = '' + + data['Remark'] = '' + + setToDate(''); + setToDate2("") + + setFromDate(''); + setFromDate2(''); + } else if (keyLbl == 'BrandName') { + + // clear brand + + data['DisplayId'] = '' + data['DisplayName'] = '' + + data['Image1Path'] = '' + + data['Remark'] = '' + + setToDate(''); + setToDate2("") + + setFromDate(''); + setFromDate2(''); + } else if (keyLbl == 'DisplayName') { + + // clear brand + + data['Image1Path'] = '' + + data['Remark'] = '' + + setToDate(''); + setToDate2("") + + setFromDate(''); + setFromDate2('');; + } + + } + + function CleanSelectorYes() { + let data = AddVisFormData; + + // clear subcategory and brand + data['SubCategoryId'] = ''; + data['SubCategoryName'] = ''; + data['BrandId'] = ''; + data['BrandName'] = ''; + + + data['DisplayId'] = '' + data['DisplayName'] = '' + data['Remark'] = '' + data['Image1Path'] = '' + + setToDate(''); + setToDate2("") + + setFromDate(''); + setFromDate2(''); + BgAddVisFormData(data) + // data['FromDate']=''; + + + } + async function loadData(qId, type) { + try { + await db.transaction(async function (txn) { + let q = ''; + if (type == 'SubCategories') q = `Select Distinct p.SubCategoryId,p.SubCategoryName from Product_Master p where (p.CategoryId='${qId}' or p.CategoryId= ${qId}) and (p.IsCompetitor='0' or p.IsCompetitor=0) order by p.SubCategorySequence`; + else if (type == 'Brands') q = `Select Distinct p.BrandName,p.BrandId from Product_Master p Where (p.SubCategoryId='${qId}' or p.SubCategoryId= ${qId}) and (p.IsCompetitor='0' or p.IsCompetitor=0) order by p.BrandSequence`; + + await txn.executeSql(q, [], async function (txn2, txnres2) { + // console.log('rowcount:,',type,':',txnres2.rows.length); + if (txnres2.rows.length > 0) { + let arr = []; + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + arr.push(data); + if (i == txnres2.rows.length - 1) { + if (type == 'SubCategories') setSubCategories(arr); + else if (type == 'Brands') setBrands(arr); + } + } + } + }, function (txnE, txnerr) { console.log(txnerr); },); + + }); + } catch (err) { + console.log(err); + } + } + + + + function onChoiceSelect(val, key) { + if (val == 0 && AddVisibility.length > 0) { + setShowRAllC_M(true); + return; + } + var val1 = val == 1 ? 1 : 0; + if (animatedChoice != null) { + Animated.timing(animatedChoice, { + toValue: val1, + duration: 400, + useNativeDriver: false, + }).start(); + } + // setIsAddVisPresent(val); + // setHasUnsavedChanges(true); + if (val == 0) { + CleanSelectorYes() + } + BgIsAddVisPresent(val); + BgUnsavedChanges(true) + if (val == 0) { + // setAddVisibility([]); + // setAddVisFormData({}); + BgWindowData([]) + BgAddVisFormData({}) + } + } + + function onConfirmRemoveAll() { + // Remove all data + if (animatedChoice != null) { + Animated.timing(animatedChoice, { + toValue: 0, + duration: 400, + useNativeDriver: false, + }).start(); + } + // setIsAddVisPresent(0); + // setHasUnsavedChanges(true); + // setAddVisibility([]); + // setAddVisFormData({}); + BgIsAddVisPresent(0); + BgUnsavedChanges(true) + BgWindowData([]) + BgAddVisFormData({}) + setShowRAllC_M(false); + } + + function onSaveCancel() { + setShowAlert(false); + } + + + function showRemoveConfirm(item, index) { + // setToRemoveId(index); + // setToRemoveItem(item); + // setshowRemoveConfirm_M(true); + if (item.keyId > 0) { + setToRemoveId(item.keyId); + setToRemoveItem(item); + setshowRemoveConfirm_M(true); + } + else { + setToRemoveId(index); + setToRemoveItem(item); + setshowRemoveConfirm_M(true); + } + } + + + async function Remove_AddVis() { + let { StoreId, ChainId, StateId, StoreTypeId } = storeData; + let { MenuId } = currentMenu; + + db.transaction(async function (txn) { + let index = toRemoveId; + let item = toRemoveItem; + let arr = AddVisibility; + if (item.keyId != null && item.keyId != 'undefined' && index > 0) { + console.log("check-keyId-", index) + let deleteQuery = `DELETE FROM ${AppTables.ADDITIONAL_VISIBILITY} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' AND KEY_ID='${index}' `; + + txn.executeSql(deleteQuery, [], function (txn3, txnres) { + console.log('AdditionalVisibilty data deleted', item.keyId, +"" + index); + let updatedVisibility = AddVisibility.filter(item => item.keyId !== index); + setAddVisibility(updatedVisibility); + setHasUnsavedChanges(true); + notify('AdditionalVisibilty removed successfully', 'LONG'); + setrerenderdata(!rerenderdata); + setToRemoveId(''); + setToRemoveItem({}); + setshowRemoveConfirm_M(false); + + }, function (txnE, txnerr) { + console.log('Error deleting survey data:', txnerr); + }); + + } + else { + let index = toRemoveId + let item = toRemoveItem; + let arr = AddVisibility; + console.log('toRemoveId:', index); + if (index >= 0 && index < arr.length) { + arr.splice(index, 1); + setAddVisibility(arr); + setHasUnsavedChanges(true); + notify('AdditionalVisibilty removed successfully', 'LONG') + setrerenderdata(!rerenderdata); + } + else { + notify('Cannot remove! AdditionalVisibilty not found', 'LONG') + } + setToRemoveId(''); + setToRemoveItem({}); + setshowRemoveConfirm_M(false); + } + + }); + } + + + function _render_addVisFormTop() { + + + return ( + + + { + + + + + { + AddVisibility.length > 0 && + AddVisibility.map((item, index) => { + console.log(item); + return ( + + + + + {'Store ID :'} + {item.StoreId} + + + {'Store Name :'} + {item.StoreName} + + + {'Address :'} + {`${item.Address}, ${item.CityName}- ${item.Pincode}`} + + + {'StoreType :'} + {item.StoreType} + + + + + + + + + + ); + }) + } + + + + } + + ) + } + + const hideDatePicker = () => { + setShowDatePicker(false); + }; + + const handleConfirm = (date) => { + setTextValue(date) + }; + + function setTextValue(value) { + let d2 = moment(value).format('DD/MM/YYYY'); + let dateString = String(d2) + + hideDatePicker(); + if (FromDateObj?.ColumnName == 'FromDate') { + setFromDate(dateString) + setFromDate2(value) + } else if (FromDateObj?.ColumnName == 'ToDate') { + setToDate(dateString) + setToDate2(value) + } + + onFormDataChange(dateString, FromDateObj?.ColumnName) + } + + return ( + + {processing && } + + + + {_OpenCaptureImage_Modal()} + + {ConfirmSaveAlert(props, showRemoveConfirm_M, () => { setshowRemoveConfirm_M(false) }, Remove_AddVis, ST.Doyoureallywanttoremovethisvisibility)} + {ConfirmSaveAlert(props, showRAllC_M, () => { setShowRAllC_M(false) }, onConfirmRemoveAll, ST.Doyoureallywanttoremoveallvisibilitydata)} + { setShowCamera(false); getImage(imgData) }} showCamera={showCamera} onHideCamera={() => { setShowCamera(false); }} /> + + + + { + + {_render_addVisFormTop()} + + } + + + + + + + ); +} + +export default connect(mapStateToProps, mapDispatchToProps)(AddedStoreList); \ No newline at end of file diff --git a/PerformicsSrc/src/screens/AdditionalVisibility.js b/PerformicsSrc/src/screens/AdditionalVisibility.js new file mode 100644 index 0000000..763a81a --- /dev/null +++ b/PerformicsSrc/src/screens/AdditionalVisibility.js @@ -0,0 +1,1705 @@ +import React, { useState, useEffect, useRef, } from 'react'; +import Container from '../components/container'; +import { useRoute } from '@react-navigation/native'; +import { globalStyles, customStyles, GetPageTheme } from "../styles/Global"; +import { StatusBar, Image, TextInput, View, Text, ScrollView, TouchableOpacity, Platform, PermissionsAndroid, FlatList, Alert, Animated, AppState, Keyboard, StyleSheet, Modal } from 'react-native'; +import { ReactReduxContext, connect, useSelector, useDispatch } from 'react-redux'; +import { mapStateToProps, mapDispatchToProps } from '../reducers/contextProvider'; +import SQLite from 'react-native-sqlite-2'; +import { notify } from '../components/notify'; +import moment from 'moment'; +import { getDownloadJson, getKPIFields, marktext1, marktext2, resizeImage, restore_ImageWithMetaData, validateNumber } from '../controller/functions'; +import { get_item, set_item, clear_item } from '../components/localStorage'; +import { version, sloganline, appname, testurl, db, colors_Arr, common_ImagePath, ImageFolderPath } from '../constants/constants'; +import CustomHeader from '../components/customHeader'; +import { Card, Menu, Switch } from 'react-native-paper'; +import { AntDesign, Entypo, FontAwesome, Fontisto, MaterialCommunityIcons } from '../components/icons'; +import CustomLoader from '../components/CustomLoader'; +import LinearGradient from 'react-native-linear-gradient'; +import { AppTables } from '../constants/tableConstants'; +import * as RNFS from 'react-native-fs'; +import GradientButton from '../components/gradientButton'; + +import CustomModal from '../components/CustomModal'; +import { ConfirmSaveAlert } from '../components/alert'; +import { CustomPicker } from '../components/CustomPicker'; +import CustomCamera from '../components/Camera'; +import DateTimePicker from '@react-native-community/datetimepicker'; + +import CameraImg3 from '../assets/performics/camera_tick.svg'; +import CameraImg5 from '../assets/image/astrickcamera.svg'; +import DateTimePickerModal from "react-native-modal-datetime-picker"; +import CheckBox from '@react-native-community/checkbox'; +import { log } from '@react-native-firebase/crashlytics'; + + +function AdditionalVisibility(props) { + const route = useRoute(); + const ST = props.StaticText || {}; + // get all theme styles acc to current theme set + const PageTheme = GetPageTheme(props.DarkMode, route.name); + const customStyle = customStyles(props.DarkMode, route.name); + const animatedChoice = useRef(new Animated.Value(0)).current; + + const [processing, setProcessing] = useState(true); + const [loaderTitle, setLoaderTitle] = useState(); + const [isAdhocScreen, setIsAdhocScreen] = useState(false); + const [storeData, setStoreData] = useState({}); + const [StoreCameraAllow, setStoreCameraAllow] = useState(true); + + const [ShowDatePicker1, setShowDatePicker1] = useState(false); + const [ShowDatePicker, setShowDatePicker] = useState(false); + const [currentMenu, setCurrentMenu] = useState({}); + const [brandData, setBrandData] = useState([]); + const [rerenderdata, setrerenderdata] = useState(0); + const [rerenderdata2, setrerenderdata2] = useState(0); + + const [AddVisibility, setAddVisibility] = useState([]); + const [AddVisFormData, setAddVisFormData] = useState({ AssertCount: 1 }); + const [isAddVisPresent, setIsAddVisPresent] = useState(0); + const [showAlert, setShowAlert] = useState(false); + const [Categories, setCategories] = useState([]); + const [SubCategories, setSubCategories] = useState([]); + const [Brands, setBrands] = useState([]); + const [DisplayList, setDisplayList] = useState([]); + const [StockList, setStockList] = useState([]); + const [hasUnsavedChanges, setHasUnsavedChanges] = useState(false); + const [showCamera, setShowCamera] = useState(false); + const [clickImageType, setClickImageType] = useState('1'); + const [toRemoveId, setToRemoveId] = useState(''); + const [toRemoveItem, setToRemoveItem] = useState({}); + const [showRemoveConfirm_M, setshowRemoveConfirm_M] = useState(false); + const [showRAllC_M, setShowRAllC_M] = useState(false); + const [KPIFields, setKPIFields] = useState([]); + const [dateValue, setDateValue] = useState(''); + const [FromDate, setFromDate] = useState(''); + const [FromDate2, setFromDate2] = useState(""); + const [FromDateObj, setFromDateObj] = useState({}); + const [ToDate, setToDate] = useState(''); + const [ToDate2, setToDate2] = useState(new Date()); + const [SelectedImg, setSelectedImg] = useState(''); + const [showModal, setShowModal] = useState(false); + const [reCapImgModalObj, setReCapImgModalObj] = useState({}); + const [showImageSaveOp, setShowImageSaveOp] = useState(true); + const [ImgMadCount, setImgMadCount] = useState({ img1: 0, img2: 0 }); + const hasUnsavedChangesRef = React.useRef(hasUnsavedChanges); + const WindowDataRef = React.useRef(AddVisibility); + const StoreIdRef = React.useRef(null); + const ScreenNameRef = React.useRef(''); + const [showSwitchCamera, setShowSwitchCamera] = useState(false); + const [productCheck, setProductCheck] = useState(false); + const [selectedItems, setSelectedItems] = useState({}); + const [dialogVisible, setDialogVisible] = useState(false); + const [selectedItem, setSelectedItem] = useState(null); + const VisFormDataRef = React.useRef(AddVisFormData); + const isAddVisPresentRef = React.useRef(isAddVisPresent); + const d1 = new Date(); + const d2 = moment(d1).format('MM/DD/YYYY'); + + useEffect(() => { + setLoaderTitle(ST.Loading + '...') + let params = props.route.params ? props.route.params : {}; + let storeData1 = params.storeData || {}; + let menu1 = params.menu || {}; + let cameraAllow = storeData1.CameraAllow == 'true' || storeData1.CameraAllow == 1 ? true : false; + setStoreCameraAllow(cameraAllow); + let isAdhoc = params.isAdhoc || false; + StoreIdRef.current = storeData1.StoreId + ScreenNameRef.current = menu1.ScreenName + setIsAdhocScreen(isAdhoc); + setStoreData(storeData1); + setCurrentMenu(menu1); + getData(storeData1, menu1); + const AppStateSubscription = AppState.addEventListener('change', (pro) => { _handleAppStateChange(pro) }); + const unsubscribe = props.navigation.addListener('beforeRemove', onBeforeRemove); + return function cleanup() { + AppStateSubscription.remove(); + return unsubscribe; + }; + }, []); + + const _handleAppStateChange = async (nextAppState) => { + if (nextAppState == 'background' && hasUnsavedChangesRef.current == true) { + let newData = { + storeBGData: WindowDataRef.current, + menuName: ScreenNameRef.current, + StoreId1: StoreIdRef.current, + AddFormData: VisFormDataRef.current, + isVisPresent: isAddVisPresentRef.current, + visiteDate: d2 + } + let WindowsStr = JSON.stringify(newData) + await set_item('storeData', WindowsStr); + } + } + + useEffect(() => { + const unsubscribe = props.navigation.addListener('beforeRemove', onBeforeRemove); + return unsubscribe; + }, [hasUnsavedChanges]); + + useEffect(() => { + const unsubscribe = props.navigation.addListener('beforeRemove', onBeforeRemove); + return unsubscribe; + }, [showCamera]); + + function BgUnsavedChanges(val) { + hasUnsavedChangesRef.current = val + setHasUnsavedChanges(val); + } + + function BgWindowData(val) { + WindowDataRef.current = val + setAddVisibility(val); + } + + function BgAddVisFormData(val) { + VisFormDataRef.current = val + setAddVisFormData(val); + } + + function BgIsAddVisPresent(val) { + isAddVisPresentRef.current = val + setIsAddVisPresent(val); + } + + + function onBeforeRemove(e) { + if (showCamera == true) { + e.preventDefault(); + setShowCamera(false); + } + else { + if (hasUnsavedChanges == true) { + e.preventDefault(); // Prevent default behavior of leaving the screen + onRemoveScreen(e); + } + else { + return; + } + } + } + function onRemoveScreen(e) { + Alert.alert( + "", + ST.Doyoureallywanttoexitthescreen, + [ + { + text: ST.Cancel, + onPress: () => { }, + style: "cancel" + }, + { + text: ST.OK, onPress: async () => { + BgUnsavedChanges(false) + await clear_item('storeData') + // setHasUnsavedChanges(false); + props.navigation.dispatch(e.data.action); + } + } + ] + ); + } + + async function getData(storeData1, menu1) { + try { + let { StoreId, ChainId, StateId, StoreTypeId } = storeData1; + + let AllKPIFields = await getKPIFields(menu1); + setKPIFields(AllKPIFields); + + let isProductCheckIndex = AllKPIFields.findIndex(i => i.KPIFieldName == 'ProductCheck'); + let isProductCheckObj = isFromDateIndex >= 0 ? AllKPIFields[isProductCheckIndex] : {}; + let isProductCheckEnable = isFromDateIndex >= 0 ? isProductCheckObj['KPIFieldEnable'] : true; + setProductCheck(isProductCheckEnable) + let isFromDateIndex = AllKPIFields.findIndex(i => i.KPIFieldName == 'ShowFromDate'); + let isFromDateKPIObj = isFromDateIndex >= 0 ? AllKPIFields[isFromDateIndex] : {}; + let isFromDateEnable = isFromDateIndex >= 0 ? isFromDateKPIObj['KPIFieldEnable'] : true; + let isToDateIndex = AllKPIFields.findIndex(i => i.KPIFieldName == 'ShowToDate'); + let isToDateKPIObj = isToDateIndex >= 0 ? AllKPIFields[isToDateIndex] : {}; + let isToDateEnable = isToDateIndex >= 0 ? isToDateKPIObj['KPIFieldEnable'] : true; + // set switch camera flag as defined in mapping menu flag (if exists) + let SwitchingCameraI = AllKPIFields.findIndex(i => i.KPIFieldName == 'SwitchingCamera'); + let SwitchingCameraObj = SwitchingCameraI >= 0 ? AllKPIFields[SwitchingCameraI] : {}; + let SwitchingCamera = SwitchingCameraI >= 0 ? SwitchingCameraObj['KPIFieldEnable'] : false; + setShowSwitchCamera(SwitchingCamera); + + let storeBGData1 = [], bgStoreJson = {}, isBgDataExists = false; + let windData = await get_item('storeData') + console.log("bg storeData:", windData); + if (windData != null && windData != '') { + let StoreJson = JSON.parse(windData) + let { storeBGData, menuName, StoreId1, AddFormData, visiteDate } = StoreJson + if (menuName == menu1.ScreenName && StoreId1 == StoreId && visiteDate == d2) { + isBgDataExists = true; + bgStoreJson = StoreJson + if (storeBGData.length > 0) { + storeBGData1 = storeBGData; + BgWindowData(storeBGData) + } + + if (AddFormData != null && Object.keys(AddFormData).length > 0) { + let { CategoryId, BrandId, DisplayId, SubCategoryId, FromDate, ToDate, StockList } = AddFormData; + // load subcategories if category exists + console.log("AddFormData------",JSON.stringify(AddFormData)) + if (CategoryId != null && CategoryId != '') { + loadData(CategoryId, 'SubCategories'); + } + if (SubCategoryId != null && CategoryId != '') { + loadData(SubCategoryId, 'Brands'); + } + if (FromDate != null && FromDate != '') { + setFromDate(FromDate); + setFromDate2(new Date(FromDate)); + } + if (ToDate != null && ToDate != '') { + setToDate(ToDate); + setToDate2(new Date(ToDate)); + } + + if (BrandId != null && BrandId != '' && DisplayId != null && DisplayId != '' && isProductCheckEnable) { + console.log("called", BrandId, DisplayId); + getStock(BrandId, DisplayId, StockList); + } + BgAddVisFormData(AddFormData) + } + BgUnsavedChanges(true) + } + } + await db.transaction(async function (txn) { + + let q = `Select Distinct p.CategoryId,p.CategoryName from Product_Master p where (p.IsCompetitor='0' or p.IsCompetitor=0) order by p.CategorySequence`; + await txn.executeSql(q, [], async function (txn2, txnres2) { + + if (txnres2.rows.length > 0) { + let arr = []; + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + arr.push(data); + if (i == txnres2.rows.length - 1) { setCategories(arr); } + } + } + }, function (txnE, txnerr) { console.log(txnerr); },); + + + let q2 = `Select Distinct DisplayId,DisplayName from Master_Display where Additional='1' order by DisplayName`; + await txn.executeSql(q2, [], async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + let arr = []; + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + arr.push(data); + if (i == txnres2.rows.length - 1) { setDisplayList(arr); } + } + } + }, function (txnE, txnerr) { console.log(txnerr); },); + + + let q3 = `Select * from ${AppTables.ADDITIONAL_VISIBILITY} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' `; + await txn.executeSql(q3, [], async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + let arr = []; + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + let { PRESENT, CATEGORY, CATEGORY_ID, SUB_CATEGORY, SUB_CATEGORY_ID, BRAND, BRAND_ID, DISPLAY, DISPLAY_ID, ASSERT_COUNT, REMARK, IMAGE, FROM_DATE, TO_DATE, SHOWFROMDATE, KEY_ID } = data; + let datan = { CategoryName: CATEGORY, CategoryId: CATEGORY_ID, SubCategoryName: SUB_CATEGORY, SubCategoryId: SUB_CATEGORY_ID, BrandName: BRAND, BrandId: BRAND_ID, DisplayName: DISPLAY, DisplayId: DISPLAY_ID, AssertCount: ASSERT_COUNT, Remark: REMARK, Image1: IMAGE, FromDate: String(FROM_DATE), ToDate: String(TO_DATE), showFromDateFlag: SHOWFROMDATE, keyId: KEY_ID } + datan.Image1Path = IMAGE != '' ? 'file://' + ImageFolderPath + menu1.ScreenName + "/" + IMAGE : ''; + let isPresent = PRESENT; + if (isPresent == 1) { + try { + + const stockList = await getAdditionalVisibilityStock({ + StoreId, + d2, + CATEGORY_ID, + BRAND_ID, + DISPLAY_ID + }); + console.log("Final stock list:", stockList); + datan['StockList'] = stockList; + arr.push(datan) + // Do something with stockList here + } catch (err) { + console.error("Failed to fetch stock list:", err); + } + } + + if (i == txnres2.rows.length - 1) { + let { menuName, StoreId1, isVisPresent, visiteDate } = bgStoreJson + + if (!isBgDataExists) { + BgWindowData(arr); + } + else { + isPresent = isVisPresent == 1 ? 1 : 0; + } + + + Animated.timing(animatedChoice, { + toValue: isPresent, + duration: 400, + useNativeDriver: false, + }).start(); + + BgIsAddVisPresent(isPresent); + // setAddVisibility(arr); + setProcessing(false); + } + } + } + else { + + if (isBgDataExists) { + let { isVisPresent } = bgStoreJson + let isPresent = isVisPresent == 1 ? 1 : 0; + Animated.timing(animatedChoice, { + toValue: isPresent, + duration: 400, + useNativeDriver: false, + }).start(); + BgIsAddVisPresent(isPresent); + + } + setProcessing(false); + } + }, function (txnE, txnerr) { console.log(txnerr); setProcessing(false); },); + + }); + } catch (err) { + console.log(err); + } + } + + async function getAdditionalVisibilityStock({ + StoreId, + d2, + CATEGORY_ID, + BRAND_ID, + DISPLAY_ID + }) { + const stkq = `SELECT DISTINCT DISPLAY_ID as DisplayId,CATEGORY_ID as CategoryId,SUB_CATEGORY_ID as SubCategoryId,BRAND_ID as BrandId,PRODUCT_ID as ProductId,PRODUCT_NAME as ProductName,STOCK_REQ as StockRequire,STOCK as Stock,IS_SELECT as isSelect FROM ${AppTables.ADDITIONAL_VISIBILITY_STOCK} WHERE STORE_ID='${StoreId}' AND VISIT_DATE='${d2}' AND CATEGORY_ID='${CATEGORY_ID}' AND BRAND_ID='${BRAND_ID}' AND DISPLAY_ID='${DISPLAY_ID}'`; + + console.log("stk_query", stkq); + + return new Promise((resolve, reject) => { + db.transaction(txn => { + txn.executeSql( + stkq, + [], + (txn2, txnres5) => { + const arrstk = []; + console.log("stk_query rows:", txnres5.rows.length); + for (let i = 0; i < txnres5.rows.length; i++) { + arrstk.push(txnres5.rows.item(i)); + } + + resolve(arrstk); + }, + (txnE, txnerr) => { + console.error("SQL error:", txnerr); + reject(txnerr); // reject the promise on error + return true; + } + ); + }); + }); + } + + + async function getStock(brandId, displayId, StockList) { + try { + console.log("Anitaaaaa") + console.log(brandId, displayId, StockList, "get stock data "); + if (StockList != null && StockList != undefined && StockList?.length > 0) { + setStockList(StockList); + } else { + await db.transaction(async function (txn) { + let q4 = `SELECT T.*,P.ProductName from Mapping_AdditionalVisibilityProduct T inner join Product_Master P on P.ProductId = T.ProductId inner join Master_Display D on D.DisplayId = T.DisplayId Where (T.DisplayId = '${displayId}' or T.DisplayId = ${displayId}) and (P.BrandId = '${brandId}' or P.BrandId = ${brandId})`; + console.log("query stock data", q4) + await txn.executeSql(q4, [], async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + let arr = []; + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + console.log("stock_items", data); + + data['isSelect'] = 0 + data['Stock'] = "" + arr.push(data); + if (i === txnres2.rows.length - 1) { + let data1 = AddVisFormData; + data1['StockList'] = arr; + setStockList(arr); + BgAddVisFormData(data1) + } + } + } + }, function (txnE, txnerr) { + console.log(txnerr); + }); + }); + } + } catch (err) { + console.log(err); + } + } + + + async function OpenImgModal(imgPath, window, splitItem, splitItemIndex, cameraType) { + setSelectedImg(imgPath) + setShowModal(true); + if ((imgPath != '' && imgPath != null)) { + setShowImageSaveOp(false); + } + else { + setShowImageSaveOp(true); + } + setReCapImgModalObj({ window, splitItem, splitItemIndex, cameraType }) + console.log("checkrecapmodal-->", reCapImgModalObj, "---" + window) + // _OpenCaptureImage_Modal(imgPath,window,splitItem,splitItemIndex,cameraType) + + } + + function cancelImage() { + // setImage1(''); + setSelectedImg(''); + setReCapImgModalObj({}) + setShowModal(false); + } + + async function getImage(imgdata) { + if (typeof imgdata == 'object' && imgdata.errorCode == 'camera_unavailable') { + notify(ST.Cameraunavailable); + } + else if (typeof imgdata == 'object' && imgdata.uri != null) { + const img = imgdata; + const imgurl = img.uri, imgWidth = img.width, imgHeight = img.ExtendedHeight; + let isImgFromGallery = img.fromGallery != null ? img.fromGallery : false; + let picture_clickedd = isImgFromGallery == true ? img.datetime : new Date(); + ////change by jeevanp + let picture_clicked_time = moment(picture_clickedd).format('MM-DD-YYYY HH:mm:ss') + let picture_clicked_time_for_pic_name = moment(picture_clickedd).format('MMDDYYYY_HHmmss') + console.log("time", picture_clicked_time); + console.log("time1", picture_clicked_time_for_pic_name); + ////change by jeevanp + let calculate_tym_date_for_filename = picture_clicked_time_for_pic_name; + let calculate_tym_date_over_img = picture_clicked_time; + + let filename = storeData.StoreId + '_' + (props.UserId || '') + '_AddVisibilityImg-' + calculate_tym_date_for_filename + '.jpg'; + console.log("filename=>", filename) + const mark_text1 = calculate_tym_date_over_img; + const mark_text2 = 'Store Name:' + storeData.StoreName + ' | Store Id:' + storeData.StoreId + ' | User Id:' + storeData.EmpId + ' | Image Type: Add. Visibility' + ' | Date:' + calculate_tym_date_over_img; + + let addvisdata = AddVisFormData; + let image_key = 'Image1'; + let image_path_key = 'Image1Path'; + addvisdata[image_key] = filename; + + let imagePath = `${ImageFolderPath + currentMenu.ScreenName}/${filename}`; + RNFS.copyFile(imgurl, imagePath) + .then(async (resn) => { + // render data with clicked image + let uri = 'file://' + imagePath; + addvisdata[image_path_key] = uri; + + setSelectedImg(uri) + BgAddVisFormData(addvisdata) + BgUnsavedChanges(true) + setrerenderdata2(!rerenderdata2); + + // add metdata then resize image and restored back to the imagePath + let restore_data = { "destFilePath": imagePath, "imgurl": imgurl, imgWidth, imgHeight, mark_text1, mark_text2 } + let is_restored = await restore_ImageWithMetaData(restore_data, imgdata); + console.log("image restored:", is_restored); + }) + .catch(err => { + console.log('ERROR: image file write failed!!!'); + console.log(err.message, err.code); + }); + } + } + + function _OpenCaptureImage_Modal(img) { + console.log("checkmodal--", showImageSaveOp) + const isImageCap = (img != '' || img != null) ? true : false; + // console.log("imag pop is trigger",isImageCap,showModal,img) + let { window, splitItem, splitItemIndex, cameraType } = reCapImgModalObj + let camera2Label = (window && window.PromoImage2Lable) || ''; + return ( + + { + isImageCap && + + + + + { openCamera('1') }}> + + + + {!showImageSaveOp && + { cancelImage() }}> + {ST.Close} + + } + + } + + ) + } + + async function openCamera(type = '1') { + console.log('openCamera'); + setClickImageType(type); + setShowCamera(true); + } + + async function onSubmitData() { + let isvalid = await validate(); + if (isvalid) { + Keyboard.dismiss(); + setShowAlert(true); + } + } + + async function saveData() { + // setHasUnsavedChanges(false); + BgUnsavedChanges(false) + setShowAlert(false); + setLoaderTitle(ST.SavingData + '...'); + setProcessing(true); + try { + let { StoreId, ChainId, StateId, StoreTypeId } = storeData; + await db.transaction(async function (txn) { + + let q = `DELETE FROM ${AppTables.ADDITIONAL_VISIBILITY} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' `; + // remove old data + await txn.executeSql(q, [], async function (txn2, txnres) { + console.log('av data deleted'); + }, function (txnE, txnerr) { console.log(txnerr); },); + + let q1 = `DELETE FROM ${AppTables.ADDITIONAL_VISIBILITY_STOCK} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' `; + // remove old data + await txn.executeSql(q1, [], async function (txn2, txnres) { + console.log('ADDITIONAL_VISIBILITY_STOCK data deleted'); + }, function (txnE, txnerr) { console.log(txnerr); },); + + var values = '', stkValues = ''; + let isFromDateIndex = KPIFields.findIndex(i => i.KPIFieldName == 'ShowFromDate'); + let isFromDateKPIObj = isFromDateIndex >= 0 ? KPIFields[isFromDateIndex] : {}; + let isFromDateEnable = isFromDateIndex >= 0 ? isFromDateKPIObj['KPIFieldEnable'] : true; + + if (isAddVisPresent == 1 && AddVisibility.length > 0) { + for (let i = 0; i < AddVisibility.length; i++) { + let catIndex = i; + let item = AddVisibility[catIndex]; + let { CategoryName, CategoryId, SubCategoryName, SubCategoryId, BrandName, BrandId, DisplayName, DisplayId, AssertCount, Remark, Image1, Image1Path, FromDate, ToDate } = item; + values += values != '' ? ' , ' : ''; + values += ` ('${StoreId}','${d2}','${isAddVisPresent}','${CategoryName}','${CategoryId}','${SubCategoryName}','${SubCategoryId}','${BrandName}','${BrandId}','${DisplayName}','${DisplayId}','${(AssertCount == 0 ? 1 : AssertCount)}','${(Remark || '')}','${(Image1 || '')}','1','${(FromDate || '')}','${(ToDate || '')}','${isFromDateEnable}','${d2}') `; + + console.log("saveStocks", JSON.stringify(AddVisibility)); + + if (item?.StockList != null && item?.StockList != undefined && item?.StockList.length > 0) { + for (let k = 0; k < item?.StockList.length; k++) { + let stkIndex = k; + let stkitem = item?.StockList[stkIndex]; + let { ProductId, ProductName, Stock, StockRequire, isSelect } = stkitem; + stkValues += stkValues != '' ? ' , ' : ''; + stkValues += ` ('${StoreId}','${d2}','${CategoryId}','${SubCategoryId}','${BrandId}','${DisplayId}','${ProductId}','${ProductName}', '${(StockRequire == true || StockRequire === "true" ? 1 : 0)}','${(Stock == '' ? 0 : Stock)}','${isSelect}') `; + } + } + } + } + else { + values += ` ('${StoreId}','${d2}','${isAddVisPresent}','','','','','','','','','1','','','1','','','false','${d2}') `; + } + + console.log('values additional_visibility:', values); + let add_data = `INSERT INTO ${AppTables.ADDITIONAL_VISIBILITY} (STORE_ID,VISIT_DATE,PRESENT,CATEGORY,CATEGORY_ID,SUB_CATEGORY,SUB_CATEGORY_ID,BRAND,BRAND_ID,DISPLAY,DISPLAY_ID,ASSERT_COUNT,REMARK,IMAGE,IS_UPDATED,FROM_DATE,TO_DATE,SHOWFROMDATE,ADDED_DATE) VALUES ${values} `; + + await txn.executeSql(add_data, [], async function (txn2, txnres) { + console.log('av added'); + console.log('values additional_visibility:', stkValues); + let add_Stk_data = `INSERT INTO ${AppTables.ADDITIONAL_VISIBILITY_STOCK} (STORE_ID,VISIT_DATE,CATEGORY_ID,SUB_CATEGORY_ID,BRAND_ID,DISPLAY_ID,PRODUCT_ID,PRODUCT_NAME,STOCK_REQ,STOCK,IS_SELECT) VALUES ${stkValues} `; + await txn.executeSql(add_Stk_data, [], async function (txn2, txnres) { + console.log('avStk added'); + }, function (txnE, txnerr) { + console.log(txnerr); + },); + notify(ST.AdditionalVisibilityaddedsuccessfully, 'SHORT'); + setProcessing(false); + // clear store data in local storage to avoiding re-set data for the store + clear_item('storeData') + props.navigation.goBack(); + }, function (txnE, txnerr) { + console.log(txnerr); + setProcessing(false); + notify(ST.Cannotaddadditionalvisibility) + },); + }); + } catch (err) { + console.log(err); + } + } + + + + + async function validate() { + let isValid = true; + if (isAddVisPresent == 1 && AddVisibility.length <= 0) { + isValid = false; + notify(ST.Pleaseaddfirst, 'SHORT'); + } + + console.log('isValid----:', isValid + "\n" + JSON.stringify(AddVisibility)); + return isValid; + } + + function validateStock(products) { + // Ensure at least one product is selected + const selectedItems = products.filter(item => item.isSelect === 1); + if (selectedItems.length === 0) { + notify('At least one product must be selected', 'SHORT'); + console.warn("At least one product must be selected."); + return false; + } + + // Check if any selected item requires stock but has no stock value + const invalidItems = selectedItems.filter(item => + (item?.StockRequire === "true" || item?.StockRequire === true || item?.StockRequire === 1) && + (!item?.Stock || item?.Stock?.trim() === "") + ); + + if (invalidItems.length > 0) { + notify('Please Enter Stock', 'SHORT'); + console.warn("Stock value is missing for required items:", invalidItems); + return false; + } + + return true; + } + + + async function validateForm() { + let isValid = true; + let { CategoryName, CategoryId, SubCategoryName, SubCategoryId, BrandName, BrandId, DisplayName, DisplayId, AssertCount, Remark, Image1, Image1Path, FromDate, ToDate, showFromDateFlag, StockList } = AddVisFormData; + + console.log("StockList----", StockList); + + let isFromDateIndex = KPIFields.findIndex(i => i.KPIFieldName == 'ShowFromDate'); + let isFromDateKPIObj = isFromDateIndex >= 0 ? KPIFields[isFromDateIndex] : {}; + let isFromDateEnable = isFromDateIndex >= 0 ? isFromDateKPIObj['KPIFieldEnable'] : true; + + let isToDateIndex = KPIFields.findIndex(i => i.KPIFieldName == 'ShowToDate'); + let isToDateKPIObj = isToDateIndex >= 0 ? KPIFields[isToDateIndex] : {}; + let isToDateEnable = isToDateIndex >= 0 ? isToDateKPIObj['KPIFieldEnable'] : true; + + let AddVisCameraReqI = KPIFields.findIndex(i => i.KPIFieldName == 'AddVisCameraReq'); + let AddVisCameraReqObj = AddVisCameraReqI >= 0 ? KPIFields[AddVisCameraReqI] : {}; + let AddVisCameraReq = AddVisCameraReqI >= 0 ? AddVisCameraReqObj['KPIFieldEnable'] : true; + + + if ((CategoryName == '' || CategoryName == null) || (CategoryId == '' || CategoryId == null)) { + isValid = false; + notify(ST.PleaseSelectCategory, 'SHORT'); + } + else if ((SubCategoryName == '' || SubCategoryName == null) || (SubCategoryId == '' || SubCategoryId == null)) { + isValid = false; + notify(ST.Pleaseselectsubcategory, 'SHORT'); + } + else if ((BrandName == '' || BrandName == null) || (BrandId == '' || BrandId == null)) { + isValid = false; + notify(ST.Pleaseselectbrand, 'SHORT'); + } + else if ((DisplayName == '' || DisplayName == null) || (DisplayId == '' || DisplayId == null)) { + isValid = false; + notify(ST.Pleaseselectdisplaytype, 'SHORT'); + } else if (AssertCount == 0) { + isValid = false; + notify("Please fill the Asset Count minimum 1", 'SHORT'); + } else if (isFromDateEnable == true && !AddVisFormData.hasOwnProperty("FromDate") && (FromDate == '' || FromDate == null)) { + isValid = false; + notify('Please Select The From Date ', 'SHORT'); + } else if (isToDateEnable == true && !AddVisFormData.hasOwnProperty("ToDate") && (ToDate == '' || ToDate == null)) { + isValid = false; + notify('Please Select The To Date ', 'SHORT'); + } + else if (StoreCameraAllow == true && AddVisCameraReq && (Image1 == '' || Image1 == null)) { + isValid = false; + notify(ST.Pleaseclickimage, 'SHORT'); + } else if (StockList != null && StockList != undefined && StockList?.length > 0 && !validateStock(StockList)) { + isValid = false; + } + + console.log('isValid:', isValid); + return isValid; + } + + function onFormDataChange(val, key, type = '') { + if (val != '') { + let isValid = validateNumber(val, type); + if (!isValid) { + return; + } + } + // ✅ Clone the object to create a new reference + let data = { ...AddVisFormData }; + data[key] = val; + console.log("DatePicket_data", data); + + BgAddVisFormData(data) + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + + function StockDataChange(val, key, type = '', item) { + console.log(item, "itemmmstockk===="); + + if (key === 'Stock' && val !== '') { + let isValid = validateNumber(val, type); + if (!isValid) { + return; + } + } + + + // Update the correct item in the Stock array + let updatedStock = AddVisFormData?.StockList?.map(itm => { + if (itm.ProductId == item.ProductId) { + let obj = { + ...itm, + [key === 'Stock' ? 'Stock' : 'isSelect']: val + }; + if (key == 'isSelect') { + obj["Stock"] = "" + } + + return obj + } + return itm; + }); + + console.log("updatedStock ===", updatedStock); + + let updatedData = { + ...AddVisFormData, + StockList: updatedStock + }; + + BgAddVisFormData(updatedData); + BgUnsavedChanges(true); + setrerenderdata(!rerenderdata); + } + + + function onselectionChange(option, keyLbl, keyVal) { + let data = AddVisFormData; + data[keyVal] = option.value; + data[keyLbl] = option.label; + console.log("jeevanp----", data); + + + console.log(option, keyLbl, keyVal, "option, keyLbl, keyVal") + CleanSelector(option, keyLbl, data) + if (data.BrandId && data.DisplayId && productCheck) { + getStock(data.BrandId, data.DisplayId, null); + } + BgAddVisFormData(data) + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + + function CleanSelector(option, keyLbl = '', data = {}) { + if (keyLbl == 'CategoryName') { + loadData(option.value, 'SubCategories'); + // clear subcategory and brand + data['SubCategoryId'] = ''; + data['SubCategoryName'] = ''; + data['BrandId'] = ''; + data['BrandName'] = ''; + + data['DisplayId'] = '' + data['DisplayName'] = '' + data['Remark'] = '' + data['Image1Path'] = '' + + setToDate(''); + setToDate2(""); + // setToDate2(new Date(null)); + + setFromDate(''); + setFromDate2(''); + // data['FromDate']=''; + } + else if (keyLbl == 'SubCategoryName') { + loadData(option.value, 'Brands'); + + // clear brand + data['BrandId'] = ''; + data['BrandName'] = ''; + + data['DisplayId'] = '' + data['DisplayName'] = '' + + data['Image1Path'] = '' + + data['Remark'] = '' + + setToDate(''); + setToDate2("") + + setFromDate(''); + setFromDate2(''); + } else if (keyLbl == 'BrandName') { + + // clear brand + + data['DisplayId'] = '' + data['DisplayName'] = '' + + data['Image1Path'] = '' + + data['Remark'] = '' + + setToDate(''); + setToDate2("") + + setFromDate(''); + setFromDate2(''); + } else if (keyLbl == 'DisplayName') { + + // clear brand + + data['Image1Path'] = '' + + data['Remark'] = '' + + setToDate(''); + setToDate2("") + + setFromDate(''); + setFromDate2('');; + } + + } + + function CleanSelectorYes() { + let data = AddVisFormData; + + // clear subcategory and brand + data['SubCategoryId'] = ''; + data['SubCategoryName'] = ''; + data['BrandId'] = ''; + data['BrandName'] = ''; + + + data['DisplayId'] = '' + data['DisplayName'] = '' + data['Remark'] = '' + data['Image1Path'] = '' + + setToDate(''); + setToDate2("") + + setFromDate(''); + setFromDate2(''); + BgAddVisFormData(data) + // data['FromDate']=''; + + + } + async function loadData(qId, type) { + try { + await db.transaction(async function (txn) { + let q = ''; + if (type == 'SubCategories') q = `Select Distinct p.SubCategoryId,p.SubCategoryName from Product_Master p where (p.CategoryId='${qId}' or p.CategoryId= ${qId}) and (p.IsCompetitor='0' or p.IsCompetitor=0) order by p.SubCategorySequence`; + else if (type == 'Brands') q = `Select Distinct p.BrandName,p.BrandId from Product_Master p Where (p.SubCategoryId='${qId}' or p.SubCategoryId= ${qId}) and (p.IsCompetitor='0' or p.IsCompetitor=0) order by p.BrandSequence`; + + await txn.executeSql(q, [], async function (txn2, txnres2) { + // console.log('rowcount:,',type,':',txnres2.rows.length); + if (txnres2.rows.length > 0) { + let arr = []; + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + arr.push(data); + if (i == txnres2.rows.length - 1) { + if (type == 'SubCategories') setSubCategories(arr); + else if (type == 'Brands') setBrands(arr); + } + } + } + }, function (txnE, txnerr) { console.log(txnerr); },); + + }); + } catch (err) { + console.log(err); + } + } + + + + function onChoiceSelect(val, key) { + if (val == 0 && AddVisibility.length > 0) { + setShowRAllC_M(true); + return; + } + var val1 = val == 1 ? 1 : 0; + if (animatedChoice != null) { + Animated.timing(animatedChoice, { + toValue: val1, + duration: 400, + useNativeDriver: false, + }).start(); + } + // setIsAddVisPresent(val); + // setHasUnsavedChanges(true); + if (val == 0) { + CleanSelectorYes() + } + BgIsAddVisPresent(val); + BgUnsavedChanges(true) + if (val == 0) { + // setAddVisibility([]); + // setAddVisFormData({}); + BgWindowData([]) + BgAddVisFormData({}) + } + } + + function onConfirmRemoveAll() { + // Remove all data + if (animatedChoice != null) { + Animated.timing(animatedChoice, { + toValue: 0, + duration: 400, + useNativeDriver: false, + }).start(); + } + // setIsAddVisPresent(0); + // setHasUnsavedChanges(true); + // setAddVisibility([]); + // setAddVisFormData({}); + BgIsAddVisPresent(0); + BgUnsavedChanges(true) + BgWindowData([]) + BgAddVisFormData({}) + setShowRAllC_M(false); + } + + function onSaveCancel() { + setShowAlert(false); + } + + async function Add_AddVis() { + let isValid = await validateForm(); + console.log('isValid add:', isValid); + if (isValid) { + let arr = AddVisibility; + let { CategoryName, CategoryId, SubCategoryName, SubCategoryId, BrandName, BrandId, DisplayName, DisplayId, Remark, Image1, Image1Path, StockList } = AddVisFormData; + let formData = AddVisFormData; + if (StockList != null && StockList != undefined && StockList.length > 0) { + const filteredList = StockList?.filter( + (stock) => stock.isSelect === 1 + ); + // ✅ Replace StockList in AddVisFormData + formData = { + ...AddVisFormData, + StockList: filteredList, + }; + } + console.log("temp_sdf", JSON.stringify(formData)); + arr.push(formData); + console.log("temp_sdf", JSON.stringify(arr)); + BgWindowData(arr) + setStockList([]); + BgUnsavedChanges(true) + setShowDatePicker(false); + setShowDatePicker1(false) + notify(ST.AdditionalVisibilityaddedsuccessfully, 'LONG'); + setrerenderdata(!rerenderdata); + // clear data + setFromDate(''); + BgAddVisFormData({ AssertCount: '1' }) + setToDate(''); + setToDate2("") + setFromDate2(''); + } + + } + + function showRemoveConfirm(item, index) { + // setToRemoveId(index); + // setToRemoveItem(item); + // setshowRemoveConfirm_M(true); + if (item.keyId > 0) { + setToRemoveId(item.keyId); + setToRemoveItem(item); + setshowRemoveConfirm_M(true); + } + else { + setToRemoveId(index); + setToRemoveItem(item); + setshowRemoveConfirm_M(true); + } + } + + async function Remove_AddVis() { + let { StoreId, ChainId, StateId, StoreTypeId } = storeData; + let { MenuId } = currentMenu; + + db.transaction(async function (txn) { + let index = toRemoveId; + let item = toRemoveItem; + let arr = AddVisibility; + if (item.keyId != null && item.keyId != 'undefined' && index > 0) { + console.log("check-keyId-", index) + let deleteQuery = `DELETE FROM ${AppTables.ADDITIONAL_VISIBILITY} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' AND KEY_ID='${index}' `; + + txn.executeSql(deleteQuery, [], function (txn3, txnres) { + console.log('AdditionalVisibilty data deleted', item.keyId, +"" + index); + let updatedVisibility = AddVisibility.filter(item => item.keyId !== index); + setAddVisibility(updatedVisibility); + setHasUnsavedChanges(true); + notify('AdditionalVisibilty removed successfully', 'LONG'); + setrerenderdata(!rerenderdata); + setToRemoveId(''); + setToRemoveItem({}); + setshowRemoveConfirm_M(false); + + }, function (txnE, txnerr) { + console.log('Error deleting survey data:', txnerr); + }); + + let deleteQueryStk = `DELETE FROM ${AppTables.ADDITIONAL_VISIBILITY_STOCK} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' AND COMMON_ID='${index}' `; + + txn.executeSql(deleteQueryStk, [], function (txn3, txnres) { + console.log('AdditionalVisibiltyStk data deleted', item.keyId, +"" + index); + }, function (txnE, txnerr) { + console.log('Error deleting survey data:', txnerr); + }); + } + else { + let index = toRemoveId + let item = toRemoveItem; + let arr = AddVisibility; + console.log('toRemoveId:', index); + if (index >= 0 && index < arr.length) { + arr.splice(index, 1); + setAddVisibility(arr); + setHasUnsavedChanges(true); + notify('AdditionalVisibilty removed successfully', 'LONG') + setrerenderdata(!rerenderdata); + } + else { + notify('Cannot remove! AdditionalVisibilty not found', 'LONG') + } + setToRemoveId(''); + setToRemoveItem({}); + setshowRemoveConfirm_M(false); + } + + }); + } + + + function RenderDatePicker() { + let { curDate, setTimeStamp, setDate, ColumnName, setShowDate } = FromDateObj + let today = new Date(); + let d1 = curDate != null && curDate != '' ? curDate : new Date(); + // let d1=new Date(); + console.log('d1 date:', d1); + return ( + { + console.log('onchange date', event, selectedDate); + if (((selectedDate != null) && (event?.type != 'dismissed'))) { + console.log('change date', selectedDate); + let d2 = moment(selectedDate).format('DD/MM/YYYY'); + let dateString = String(d2) + setShowDate(false); + setTimeStamp(selectedDate); + setDate(d2); + onFormDataChange(dateString, ColumnName) + + } + setShowDatePicker(false) + }} + + /> + ); + } + + const handleStockChange = (key, value) => { + setSelectedItems((prev) => ({ + ...prev, + [key]: { + ...prev[key], + stock: value, + }, + })); + }; + + const toggleSelect = (item) => { + setSelectedItems((prev) => { + const key = `${item.DisplayId}-${item.ProductId}`; + const isSelected = !!prev[key]; + + if (isSelected) { + const updated = { ...prev }; + delete updated[key]; + return updated; + } else { + return { + ...prev, + [key]: { + ...item, + stock: '', // force input + }, + }; + } + }); + } + + + + const styles = StyleSheet.create({ + itemContainer: { + padding: 10, + borderBottomWidth: 1, + borderColor: '#ddd', + }, + checkbox: { + position: 'absolute', + left: 10, + top: 15, + }, + checkboxText: { + fontSize: 18, + }, + itemText: { + marginLeft: 30, + fontSize: 16, + }, + input: { + // marginTop: 10, + marginLeft: 30, + borderWidth: 1, + borderColor: '#ccc', + // padding: 5, + // width: 150, + + }, + openButton: { + backgroundColor: '#4CAF50', + padding: 10, + borderRadius: 8, + alignSelf: 'center', + }, + openButtonText: { + color: '#fff', + fontSize: 16, + fontWeight: '600', + }, + modalOverlay: { + flex: 1, + backgroundColor: 'rgba(0,0,0,0.4)', + justifyContent: 'center', + alignItems: 'center', + }, + dialogBox: { + backgroundColor: 'white', + width: '85%', + padding: 20, + borderRadius: 12, + maxHeight: '80%', + }, + title: { + fontSize: 20, + fontWeight: 'bold', + marginBottom: 15, + textAlign: 'center', + color: PageTheme.$primary_color + }, + stockRow: { + marginBottom: 10, + }, + productName: { + fontSize: 16, + fontWeight: '500', + }, + stockValue: { + fontSize: 15, + color: '#666', + }, + closeButton: { + backgroundColor: '#2196F3', + padding: 10, + borderRadius: 8, + marginTop: 20, + alignItems: 'center', + }, + closeButtonText: { + color: '#fff', + fontWeight: '600', + }, + + }); + const renderItem = ({ item }) => { + // console.log("itemmmmmm====", item) + // console.log("AddVisFormData?.Stock", AddVisFormData?.StockList) + + let res = AddVisFormData?.StockList?.find((itn) => itn.ProductId == item.ProductId) + + + return ( + + + + { console.log('valchange:', val); let val1 = (val == true) ? 1 : 0; StockDataChange(val1, 'isSelect', '0', item); }} + style={[customStyle.openStkP_checkbox, (Platform.OS == 'ios' ? { height: 20, width: 20, marginTop: 8, marginLeft: 8, } : {})]} + tintColors={{ true: PageTheme.$primary_color, false: PageTheme.$text_color_light }} + /> + + {item.ProductName} + + + {res?.isSelect == 1 && (res?.StockRequire === 'true' || res?.StockRequire === true || res?.StockRequire === '1' || res?.StockRequire === 1) && + + { StockDataChange(val, 'Stock', 'numeric', item) }} + // onSubmitEditing={()=>{focusToNext(cat,brand,skus,'1')}} + /> + + } + + ); + }; + + + function StockListDialog({ item, onClose }) { + return ( + + + + Products + item.ProductId.toString()} + renderItem={({ item }) => ( + + {item.ProductName} + + {(item.StockRequire === 'true' || item.StockRequire === true || item.StockRequire === '1' || item.StockRequire === 1) && item.isSelect === 1 + ? `Stock: ${item.Stock || 'N/A'}` + : ''} + + + )} + /> + + Close + + + + + ); + } + + function _render_addVisFormTop() { + let xpos = 0; + if (animatedChoice != null) { + xpos = animatedChoice.interpolate({ + inputRange: [0, 1], + outputRange: [0, -75], + }); + } + + let isFromDateIndex = KPIFields.findIndex(i => i.KPIFieldName == 'ShowFromDate'); + let isFromDateKPIObj = isFromDateIndex >= 0 ? KPIFields[isFromDateIndex] : {}; + let isFromDateEnable = isFromDateIndex >= 0 ? isFromDateKPIObj['KPIFieldEnable'] : true; + + let isToDateIndex = KPIFields.findIndex(i => i.KPIFieldName == 'ShowToDate'); + let isToDateKPIObj = isToDateIndex >= 0 ? KPIFields[isToDateIndex] : {}; + let isToDateEnable = isToDateIndex >= 0 ? isToDateKPIObj['KPIFieldEnable'] : true; + + let AddVisCameraReqI = KPIFields.findIndex(i => i.KPIFieldName == 'AddVisCameraReq'); + let AddVisCameraReqObj = AddVisCameraReqI >= 0 ? KPIFields[AddVisCameraReqI] : {}; + let AddVisCameraReq = AddVisCameraReqI >= 0 ? AddVisCameraReqObj['KPIFieldEnable'] : true; + + + let isAssetCountIndex = KPIFields.findIndex(i => i.KPIFieldName == 'ShowAssetCount'); + let isAssetCountKPIObj = isAssetCountIndex >= 0 ? KPIFields[isAssetCountIndex] : {}; + let isAssetCountEnable = isAssetCountIndex >= 0 ? isAssetCountKPIObj['KPIFieldEnable'] : true; + let isAssetCountDisplayName = isAssetCountIndex >= 0 ? isAssetCountKPIObj['KPIFieldDisplayName'] : ''; + + + // console.log("StockList==",StockList ) + console.log("AddVisFormData", AddVisFormData) + + + return ( + + + {ST.IsPresent} + + + + { onChoiceSelect(1, 'isPresent') }}> + {ST.Yes} + + { onChoiceSelect(0, 'isPresent') }}> + {ST.No} + + + + + + { + isAddVisPresent == 1 && (rerenderdata == rerenderdata) && + + + + + + {ST.Category} + {CustomPicker(props, Categories, 'CategoryName', 'CategoryId', 'CategoryName', 'CategoryId', onselectionChange, { value: AddVisFormData.CategoryName })} + + + + + + {'Sub Category'} + + {CustomPicker(props, SubCategories, 'SubCategoryName', 'SubCategoryId', 'SubCategoryName', 'SubCategoryId', onselectionChange, { value: AddVisFormData.SubCategoryName })} + + + + + {ST.Brands} + + {CustomPicker(props, Brands, 'BrandName', 'BrandId', 'BrandName', 'BrandId', onselectionChange, { value: AddVisFormData.BrandName })} + + + + + {ST.DisplayType} + {CustomPicker(props, DisplayList, 'DisplayName', 'DisplayId', 'DisplayName', 'DisplayId', onselectionChange, { value: AddVisFormData.DisplayName })} + + + {isFromDateEnable == true && + + + {'From Date'} + + {FromDate} + { + setFromDateObj({ curDate: FromDate2, setTimeStamp: setFromDate2, setDate: setFromDate, ColumnName: 'FromDate', setShowDate: setShowDatePicker1 }) + setShowDatePicker(true); + }}> + + + + + } + {isToDateEnable == true && + + + {'To Date'} + + {ToDate} + { + if ((FromDate2 != "") && isFromDateEnable == true) { + setFromDateObj({ curDate: ToDate2, setTimeStamp: setToDate2, setDate: setToDate, ColumnName: 'ToDate', setShowDate: setShowDatePicker }) + setShowDatePicker(true); + } else { + notify("Please fill From Date first"); + } + }}> + + + + + } + + {isAssetCountEnable && + + + {isAssetCountDisplayName ? isAssetCountDisplayName : ''} + { onFormDataChange(val, 'AssertCount', 'numeric'); }} + /> + + + } + + + + {ST.Remark} + { onFormDataChange(val, 'Remark', 'text'); }} + /> + + + {AddVisCameraReq && + + + {ST.Image} + + + {(AddVisFormData.Image1Path == '' || AddVisFormData.Image1Path == null) ? + { openCamera('1') }}> + + : (AddVisFormData.Image1Path != '' && AddVisFormData.Image1Path != null) ? + { OpenImgModal(AddVisFormData.Image1Path, '1') }}> + + : null + } + + + + + + } + + {StockList.length > 0 && + + + + + `${item.DisplayId}-${item.ProductId}`} + renderItem={renderItem} + /> + + + + } + + + { Add_AddVis() }}> + {ST.Add} + + + + + + {ST.AddedVisibilities} + + { + AddVisibility.length > 0 && + AddVisibility.map((item, index) => { + console.log(item); + return ( + + + + + {ST.Category + ' :'} + {item.CategoryName} + + + {ST.SubCategory + ' :'} + {item.SubCategoryName} + + + {ST.Brands + ' :'} + {item.BrandName} + + + {ST.DisplayType + ' :'} + {item.DisplayName} + + + {'Asset Count :'} + {item.AssertCount} + + + {ST.Remark + ' :'} + {item.Remark} + + {item.FromDate && + + {'From Date :'} + {item.FromDate} + + } + + {item.ToDate && + + {'To Date :'} + {item.ToDate} + + } + + + + {AddVisCameraReq && item.Image1Path && + + + {ST.Image} + {(item.Image1Path != null && item.Image1Path != '') && } + + {item?.StockList != null && item?.StockList != undefined && item?.StockList.length > 0 && ( + { + setDialogVisible(true); + setSelectedItem(item); // Set the current item + // handle your button action + // + console.log('StockList pressed', item); + }} + > + Products + + )} + + {/* ✅ Conditionally Rendered Dialog */} + {dialogVisible && selectedItem && ( + { + setDialogVisible(false) + setSelectedItem(null); + }} /> + )} + + } + + + { showRemoveConfirm(item, index) }}> + + + + + ); + }) + } + + + + } + + ) + } + + const hideDatePicker = () => { + setShowDatePicker(false); + }; + + const handleConfirm = (date) => { + setTextValue(date) + }; + + function setTextValue(value) { + let d2 = moment(value).format('DD/MM/YYYY'); + let dateString = String(d2) + + hideDatePicker(); + if (FromDateObj?.ColumnName == 'FromDate') { + setFromDate(dateString) + setFromDate2(value) + // ✅ Clear ToDate + setToDate(''); + setToDate2(null); + } else if (FromDateObj?.ColumnName == 'ToDate') { + setToDate(dateString) + setToDate2(value) + } + + onFormDataChange(dateString, FromDateObj?.ColumnName) + } + + return ( + + {processing && } + + + + {_OpenCaptureImage_Modal()} + + {ConfirmSaveAlert(props, showAlert, onSaveCancel, saveData)} + {ConfirmSaveAlert(props, showRemoveConfirm_M, () => { setshowRemoveConfirm_M(false) }, Remove_AddVis, ST.Doyoureallywanttoremovethisvisibility)} + {ConfirmSaveAlert(props, showRAllC_M, () => { setShowRAllC_M(false) }, onConfirmRemoveAll, ST.Doyoureallywanttoremoveallvisibilitydata)} + { setShowCamera(false); getImage(imgData) }} showCamera={showCamera} onHideCamera={() => { setShowCamera(false); }} /> + + + + {Object.keys(storeData).length > 0 && + + {_render_addVisFormTop()} + + } + + { onSubmitData() }} /> + + + + + + + ); +} + + +export default connect(mapStateToProps, mapDispatchToProps)(AdditionalVisibility); \ No newline at end of file diff --git a/PerformicsSrc/src/screens/AdditionalVisibilityIR.js b/PerformicsSrc/src/screens/AdditionalVisibilityIR.js new file mode 100644 index 0000000..683016c --- /dev/null +++ b/PerformicsSrc/src/screens/AdditionalVisibilityIR.js @@ -0,0 +1,2021 @@ +import React, { useState, useEffect, useRef } from 'react'; +import Container from '../components/container'; +import { useRoute } from '@react-navigation/native'; +import { globalStyles, customStyles, GetPageTheme } from "../styles/Global"; +import { StatusBar, Image, TextInput, View, Text, ScrollView, TouchableOpacity, Platform, PermissionsAndroid, FlatList, Alert, Animated, AppState, DeviceEventEmitter, Keyboard } from 'react-native'; +import { ReactReduxContext, connect, useSelector, useDispatch } from 'react-redux'; +import { mapStateToProps, mapDispatchToProps } from '../reducers/contextProvider'; +import { notify } from '../components/notify'; +import moment from 'moment'; +import { UploadData2, getDownloadJson, getKPIFields,marktext1, marktext2, resizeImage, restore_ImageWithMetaData, validateNumber } from '../controller/functions'; +import { get_item, set_item, clear_item } from '../components/localStorage'; +import { version, sloganline, appname, testurl, db, colors_Arr, common_ImagePath, ImageFolderPath } from '../constants/constants'; +import CustomHeader from '../components/customHeader'; +import { AntDesign, Entypo, FontAwesome, Fontisto, MaterialCommunityIcons } from '../components/icons'; +import CustomLoader from '../components/CustomLoader'; +import LinearGradient from 'react-native-linear-gradient'; +import { AppTables } from '../constants/tableConstants'; +import * as RNFS from 'react-native-fs'; +import GradientButton from '../components/gradientButton'; + +import CustomModal from '../components/CustomModal'; +import { ConfirmSaveAlert } from '../components/alert'; +import { CustomPicker } from '../components/CustomPicker'; +import CustomCamera from '../components/Camera'; +import DateTimePicker from '@react-native-community/datetimepicker'; + +import CameraImg3 from '../assets/performics/camera_tick.svg'; +import CameraImg5 from '../assets/image/astrickcamera.svg'; +import IRLogin from '../components/IRLogin'; +import { SyncIRsessionsInKPI } from '../constants/uploadData'; +import { METHODS, getMethodName } from '../constants/methodNames'; +import ImageViewer from 'react-native-image-zoom-viewer'; + +function AdditionalVisibilityIR(props) { + const route = useRoute(); + const ST = props.StaticText || {}; + // get all theme styles acc to current theme set + const PageTheme = GetPageTheme(props.DarkMode, route.name); + const customStyle = customStyles(props.DarkMode, route.name); + const animatedChoice = useRef(new Animated.Value(0)).current; + + const [processing, setProcessing] = useState(true); + const [loaderTitle, setLoaderTitle] = useState(); + const [isAdhocScreen, setIsAdhocScreen] = useState(false); + const [storeData, setStoreData] = useState({}); + const [StoreCameraAllow, setStoreCameraAllow] = useState(true); + + const [ShowDatePicker1, setShowDatePicker1] = useState(false); + const [ShowDatePicker, setShowDatePicker] = useState(false); + const [currentMenu, setCurrentMenu] = useState({}); + const [brandData, setBrandData] = useState([]); + const [rerenderdata, setrerenderdata] = useState(0); + const [rerenderdata2, setrerenderdata2] = useState(0); + + const [AddVisibility, setAddVisibility] = useState([]); + const [AddVisFormData, setAddVisFormData] = useState({}); + const [isAddVisPresent, setIsAddVisPresent] = useState(0); + const [showAlert, setShowAlert] = useState(false); + const [Categories, setCategories] = useState([]); + const [SubCategories, setSubCategories] = useState([]); + const [Brands, setBrands] = useState([]); + const [DisplayList, setDisplayList] = useState([]); + const [hasUnsavedChanges, setHasUnsavedChanges] = useState(false); + const [showCamera, setShowCamera] = useState(false); + const showCameraRef = useRef(false); + const [clickImageType, setClickImageType] = useState('1'); + const [toRemoveId, setToRemoveId] = useState(''); + const [toRemoveItem, setToRemoveItem] = useState({}); + const [showRemoveConfirm_M, setshowRemoveConfirm_M] = useState(false); + const [showRAllC_M, setShowRAllC_M] = useState(false); + const [KPIFields, setKPIFields] = useState([]); + const [dateValue, setDateValue] = useState(''); + const [FromDate, setFromDate] = useState(''); + const [FromDate2, setFromDate2] = useState(new Date()); + + const [ToDate, setToDate] = useState(''); + const [ToDate2, setToDate2] = useState(new Date()); + + const [SelectedImg, setSelectedImg] = useState(''); + const [showModal, setShowModal] = useState(false); + const [reCapImgModalObj, setReCapImgModalObj] = useState({}); + const [showImageSaveOp, setShowImageSaveOp] = useState(true); + const [ImgMadCount, setImgMadCount] = useState({ img1: 0, img2: 0 }); + + const [show_zoomImage, setShow_zoomImage] = useState(false); + const [refImageIndex, setrefImageIndex] = useState(0); + const [zoomImageUrl, setZoomImageUrl] = useState([]); + const zoomView = useRef(null); + + const hasUnsavedChangesRef = React.useRef(hasUnsavedChanges); + const WindowDataRef = React.useRef(AddVisibility); + const StoreIdRef = React.useRef(null); + const ScreenNameRef = React.useRef(''); + + const VisFormDataRef = React.useRef(AddVisFormData); + const isAddVisPresentRef = React.useRef(isAddVisPresent); + + // AddVisibility,AddVisFormData,isAddVisPresent,pro + + // IR states or refs + const [isDataExists, setisDataExists] = useState(false); + const [isDataUploaded, setisDataUploaded] = useState("N"); + // const [AddVisIRImages, setAddVisIRImages] = useState([]); + // const [GbTempSessionId, setGbTempSessionId] = useState(""); + const AddVisIRImages = useRef([]); + const GbTempSessionId = useRef(""); + const GbTempSessionObj = useRef({}); + const sessionsToUpload = useRef([]); + const sessionsToUploadDetails = useRef([]); + const sessionsUploadedCount = useRef(0); + const sessionsReceived = useRef(0); + const [showRetakeModal, setshowRetakeModal] = useState(false); + const [retakeMData, setretakeMData] = useState({}); + const [showUploadAlert, setshowUploadAlert] = useState(false); + + const d1 = new Date(); + const d2 = moment(d1).format('MM/DD/YYYY'); + + + useEffect(() => { + + setLoaderTitle(ST.Loading + '...') + let params = props.route.params ? props.route.params : {}; + let storeData1 = params.storeData || {}; + let menu1 = params.menu || {}; + let cameraAllow = storeData1.CameraAllow == 'true' || storeData1.CameraAllow == 1 ? true : false; + setStoreCameraAllow(cameraAllow); + + let isAdhoc = params.isAdhoc || false; + + StoreIdRef.current = storeData1.StoreId + ScreenNameRef.current = menu1.ScreenName + setIsAdhocScreen(isAdhoc); + setStoreData(storeData1); + setCurrentMenu(menu1); + + getData(storeData1, menu1); + + + // console.log("storeData1,menu1",storeData1,menu1); + const AppStateSubscription = AppState.addEventListener('change', (pro) => { _handleAppStateChange(pro) }); + const removeIRListener = DeviceEventEmitter.addListener('onIRImageUpload', (data) => { onIRImageUpload(data, storeData1, menu1) }); + const unsubscribe = props.navigation.addListener('beforeRemove', onBeforeRemove); + + + return function cleanup() { + IRLogin.deRegisterReceiver(); + AppStateSubscription.remove(); + removeIRListener.remove(); + return unsubscribe; + }; + }, []); + + + const _handleAppStateChange = async (nextAppState) => { + if (nextAppState == 'background' && hasUnsavedChangesRef.current == true) { + let newData = { + storeBGData: WindowDataRef.current, + menuName: ScreenNameRef.current, + StoreId1: StoreIdRef.current, + AddFormData: VisFormDataRef.current, + isVisPresent: isAddVisPresentRef.current, + bg_GbTempSessionId: GbTempSessionId.current, + bg_AddVisIRImages: AddVisIRImages.current, + visiteDate: d2 + } + let WindowsStr = await JSON.stringify(newData) + await set_item('storeData', WindowsStr); + } + } + + // useEffect(() => { + // const unsubscribe=props.navigation.addListener('beforeRemove', onBeforeRemove); + // return unsubscribe; + // }, [hasUnsavedChanges]); + + + // useEffect(() => { + // const unsubscribe=props.navigation.addListener('beforeRemove', onBeforeRemove); + // return unsubscribe; + // }, [showCamera]); + + function BgUnsavedChanges(val) { + hasUnsavedChangesRef.current = val + setHasUnsavedChanges(val); + } + + function BgWindowData(val) { + WindowDataRef.current = val + setAddVisibility(val); + } + + function BgAddVisFormData(val) { + VisFormDataRef.current = val + setAddVisFormData(val); + } + + function BgIsAddVisPresent(val) { + isAddVisPresentRef.current = val + setIsAddVisPresent(val); + } + + + function UpdateShowCameraRef(val) { + showCameraRef.current = val + setShowCamera(val); + } + + + function onBeforeRemove(e) { + if (showCameraRef.current == true) { + e.preventDefault(); + UpdateShowCameraRef(false); + } + else { + if (hasUnsavedChangesRef.current == true) { + e.preventDefault(); // Prevent default behavior of leaving the screen + onRemoveScreen(e); + } + else { + return; + } + } + } + + async function onIRImageUpload(data, storeData1, menu1) { + console.log('onIRImageUpload on receive', data); + let { message, sessionId, status } = data; + let snum = sessionsReceived.current + 1; + let su_num = sessionsUploadedCount.current; + console.log('onreceive data', data); + sessionsReceived.current = snum; + let thisIR_SessObjIndex = sessionsToUploadDetails.current.findIndex(i => i.TEMP_SESSION_ID == sessionId); + let thisIR_SessObj = sessionsToUploadDetails.current[thisIR_SessObjIndex]; + if (status != null && status == '200' && sessionId != null && sessionId != '') { + + let UnSessionId = await IRLogin.getDataIRSession(sessionId); + if (UnSessionId != null && UnSessionId != '') { + sessionsUploadedCount.current = ++su_num; + let isUpdated = await UpdateIRUploadStatus(storeData1, menu1, sessionId, UnSessionId); + let isUploaded = await LogImageUpload(storeData1, menu1, sessionId, UnSessionId, message, status, thisIR_SessObj); + console.log("su_num:", su_num); + if (isUploaded) { + console.log('Image Uploaded'); + notify("Images Log uploaded for session:" + sessionId); + } + else { + console.log('cannot Uploaded image'); + notify("cannot upload log for session:" + sessionId); + } + + } + else { + console.log('OnReceived UnSessionId get', UnSessionId); + notify("Cannot upload images for session:" + sessionId + ". Universal Id not found"); + let isUploaded = await LogImageUpload(storeData1, menu1, sessionId, "", message, status, thisIR_SessObj); + if (isUploaded) { + console.log('Image Uploaded'); + notify("Images Log uploaded for session:" + sessionId); + } + else { + console.log('cannot Uploaded image'); + notify("cannot upload log for session:" + sessionId); + } + + } + + } + else { + console.log('Cannot get OnReceived UnSessionId'); + notify((message != null && message != "" ? message + ". " : "") + "Cannot upload images for session:" + sessionId); + let isUploaded = await LogImageUpload(storeData1, menu1, sessionId, "", message, status, thisIR_SessObj); + if (isUploaded) { + console.log('Image Uploaded'); + notify("Images Log uploaded for session:" + sessionId); + } + else { + console.log('cannot Uploaded image'); + notify("cannot upload log for session:" + sessionId); + } + + + } + + console.log("check snum and su_num:", snum, su_num, sessionsToUpload.current.length); + // if last broadcast received either uploaded or not update the processing status to false + if (snum == sessionsToUpload.current.length) { + setProcessing(false); + console.log('Deregister event when last received'); + IRLogin.deRegisterReceiver(); + } + + // All IR Sessions with Images Uploaded : set DataUploaded Status to U (Fully Upload) + if (su_num == sessionsToUpload.current.length) { + setisDataUploaded("U"); + setProcessing(false); + notify("All IR images uploaded!"); + console.log('set all uploaded true to U'); + } + // Some Of IR Sessions with Images Uploaded but some are yet pending : set DataUploaded Status to P (Partial Upload) + else if (su_num > 0 && su_num != sessionsToUpload.current.length) { + // setProcessing(false); + setisDataUploaded("P"); + notify("Some IR Images are still not uploaded!"); + console.log('set all uploaded true to P'); + } + } + + + function onRemoveScreen(e) { + Alert.alert( + "", + ST.Doyoureallywanttoexitthescreen, + [ + { + text: ST.Cancel, + onPress: () => { }, + style: "cancel" + }, + { + text: ST.OK, onPress: async () => { + BgUnsavedChanges(false) + await clear_item('storeData') + // setHasUnsavedChanges(false); + props.navigation.dispatch(e.data.action); + } + } + ] + ); + } + + async function getData(storeData1, menu1) { + try { + let { StoreId, ChainId, StateId, StoreTypeId } = storeData1; + + let AllKPIFields = await getKPIFields(menu1); + + setKPIFields(AllKPIFields); + + + let isFromDateIndex = AllKPIFields.findIndex(i => i.KPIFieldName == 'ShowFromDate'); + let isFromDateKPIObj = isFromDateIndex >= 0 ? AllKPIFields[isFromDateIndex] : {}; + let isFromDateEnable = isFromDateIndex >= 0 ? isFromDateKPIObj['KPIFieldEnable'] : true; + + let isToDateIndex = AllKPIFields.findIndex(i => i.KPIFieldName == 'ShowToDate'); + let isToDateKPIObj = isToDateIndex >= 0 ? AllKPIFields[isToDateIndex] : {}; + let isToDateEnable = isToDateIndex >= 0 ? isToDateKPIObj['KPIFieldEnable'] : true; + + let isKPIIREnableI = AllKPIFields.findIndex(i => i.KPIFieldName == 'KPIIREnable') + let isKPIIREnableObj = isKPIIREnableI >= 0 ? AllKPIFields[isKPIIREnableI] : {}; + let isKPIIREnable = isKPIIREnableI >= 0 ? isKPIIREnableObj['KPIFieldEnable'] : false; + + console.log("isKPIIREnable:", isKPIIREnable) + + await db.transaction(async function (txn) { + + // await txn.executeSql(`UPDATE ${AppTables.ADDVIS_IRUPLOAD} set UPLOAD_STATUS='0' , SYNC_STATUS='' `,[],async function (txn2, txnres) { + // console.log('AddVis IR Status data deleted'); + // },function (txnE,txnerr) { console.log(txnerr); },); + + + let q = `Select Distinct p.CategoryId,p.CategoryName from Product_Master p where p.IsCompetitor='0' order by p.CategorySequence`; + await txn.executeSql(q, [], async function (txn2, txnres2) { + + if (txnres2.rows.length > 0) { + let arr = []; + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + arr.push(data); + if (i == txnres2.rows.length - 1) { setCategories(arr); } + } + } + }, function (txnE, txnerr) { console.log(txnerr); },); + + + let q2 = `Select Distinct DisplayId,DisplayName from Master_Display where Additional='1'`; + await txn.executeSql(q2, [], async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + let arr = []; + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + arr.push(data); + if (i == txnres2.rows.length - 1) { setDisplayList(arr); } + } + } + }, function (txnE, txnerr) { console.log(txnerr); },); + + let storeBGData1 = [], bgStoreJson = {}, isBGDataExists = false; + let windData = await get_item('storeData') + if (windData != null && windData != '') { + let StoreJson = await JSON.parse(windData) + let { storeBGData, menuName, StoreId1, AddFormData, visiteDate, bg_AddVisIRImages, bg_GbTempSessionId, isVisPresent } = StoreJson + // Check if bg data exists for this Store and menu on today date + if (menuName == menu1.ScreenName && StoreId1 == StoreId && visiteDate == d2) { + isBGDataExists = true; + BgUnsavedChanges(true) + + // Check if isVisPresent data exists in bg data + let bgPresent = isVisPresent == 1 ? 1 : 0; + Animated.timing(animatedChoice, { + toValue: bgPresent, + duration: 400, + useNativeDriver: false, + }).start(); + BgIsAddVisPresent(bgPresent); + + + // Check if added visibilities data exists in bg data + if (storeBGData.length > 0) { + storeBGData1 = storeBGData; + bgStoreJson = StoreJson + // setAddVisibility(storeBGData); + // setAddVisFormData(AddFormData) + // BgUnsavedChanges(true) + BgWindowData(storeBGData) + // BgAddVisFormData(AddFormData) + } + // console.log("AddFormData",AddFormData); + // Check if form data exists in bg data + if (AddFormData != null && Object.keys(AddFormData).length > 0) { + // BgUnsavedChanges(true) + let { CategoryId, SubCategoryId, FromDate, ToDate } = AddFormData; + // load subcategories if category exists + if (CategoryId != null && CategoryId != '') { + loadData(CategoryId, 'SubCategories'); + } + if (SubCategoryId != null && CategoryId != '') { + loadData(SubCategoryId, 'Brands'); + } + if (FromDate != null && FromDate != '') { + setFromDate(FromDate); + setFromDate2(new Date(FromDate)); + } + if (ToDate != null && ToDate != '') { + setToDate(ToDate); + setToDate2(new Date(ToDate)); + } + BgAddVisFormData(AddFormData) + } + + // Check if IR Images and session present in bg data + if (bg_GbTempSessionId != null && bg_GbTempSessionId != '' && bg_AddVisIRImages != null && bg_AddVisIRImages.length > 0) { + AddVisIRImages.current = bg_AddVisIRImages; + GbTempSessionId.current = bg_GbTempSessionId; + } + } + } + + let q3 = `Select * from ${AppTables.ADDITIONAL_VISIBILITY} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' `; + await txn.executeSql(q3, [], async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + let arr = []; + let isAddVisPr = false; + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + let { PRESENT, CATEGORY, CATEGORY_ID, SUB_CATEGORY, SUB_CATEGORY_ID, BRAND, BRAND_ID, DISPLAY, DISPLAY_ID, REMARK, IMAGE, FROM_DATE, TO_DATE, SHOWFROMDATE } = data; + let datan = { CategoryName: CATEGORY, CategoryId: CATEGORY_ID, SubCategoryName: SUB_CATEGORY, SubCategoryId: SUB_CATEGORY_ID, BrandName: BRAND, BrandId: BRAND_ID, DisplayName: DISPLAY, DisplayId: DISPLAY_ID, Remark: REMARK, Image1: IMAGE, FromDate: String(FROM_DATE), ToDate: String(TO_DATE), showFromDateFlag: SHOWFROMDATE } + datan.Image1Path = IMAGE != '' ? 'file://' + ImageFolderPath + menu1.ScreenName + "/" + IMAGE : ''; + PRESENT == 1 ? arr.push(datan) : ''; + let isPresent = PRESENT; + if (i == 0) isAddVisPr = PRESENT; + if (i == txnres2.rows.length - 1) { + if (!isBGDataExists) { //set current data in list if bg data does not exists + // setAddVisibility(arr); + BgWindowData(arr); + Animated.timing(animatedChoice, { + toValue: isPresent, + duration: 400, + useNativeDriver: false, + }).start(); + BgIsAddVisPresent(isPresent); + } + + + setisDataExists(true); + if (isKPIIREnable && isAddVisPr) { + let allIRImages = await getIRImages(storeData1, menu1); + // setAddVisIRImages(allIRImages); + AddVisIRImages.current = allIRImages; + let isUpdated = await getUploadIRStatus(storeData1, menu1); + } + setProcessing(false); + setrerenderdata(!rerenderdata); + } + } + } + else { + setProcessing(false); + setrerenderdata(!rerenderdata); + } + }, function (txnE, txnerr) { console.log(txnerr); setProcessing(false); },); + + }); + } catch (err) { + console.log(err); + } + } + + + async function getIRImages(storeData1, menu1) { + let allImages = []; + + return new Promise((resolve, reject) => { + + db.transaction(async function (txn) { + + let q = `select IMAGE1 as Image1 from ${AppTables.ADDVIS_IR_IMAGES} where STORE_ID='${storeData1.StoreId}' and VISIT_DATE='${d2}'`; + + await txn.executeSql(q, [], async function (txn2, txnres2) { + console.log('get IRImages count ', txnres2.rows.length); + if (txnres2.rows.length > 0) { + let arr2 = []; + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + let obj = { 'ImagePath': data.Image1 }; + allImages.push(obj); + + let imgObj = { imgIndex: (i + 1), url: data.Image1, props: {} } + arr2.push(imgObj); + if (i == txnres2.rows.length - 1) { + setZoomImageUrl(arr2); + resolve(allImages) + } + } + } + else { + resolve(allImages) + } + }, function (txnE, txnerr) { console.log(txnerr); resolve(allImages) },); + }); + }).then((val) => { + return val + }).catch((err) => { + console.log(err); + return allImages; + }); + } + + async function getUploadIRStatus(storeData1, menu1) { + let allImages = []; + let { StoreId } = storeData1; + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + + // Check If IR session uploaded or not + let q = ` SELECT Distinct TEMP_SESSION_ID as TempSessionId,UN_SESSION_ID as UploadSessionId,UPLOAD_STATUS as UploadStatus,SYNC_STATUS as SyncStatus,SESSION_STORECODE as Sess_StoreCode,SESSION_TASKNAME as Sess_TaskName,SESSION_CATNAME as Sess_CatName,SESSION_PHOTOTYPE as Sess_PhotoType FROM ${AppTables.ADDVIS_IRUPLOAD} where STORE_ID='${StoreId}' and VISIT_DATE='${d2}' `; + await txn.executeSql(q, [], async function (txn2, txnres) { + if (txnres.rows.length > 0) { + + //No Loop required, As only one TempSessionId will be genrated for KPI + let data = txnres.rows.item(0); + let { Sess_StoreCode, Sess_TaskName, Sess_CatName, Sess_PhotoType } = data; + if (data.UploadStatus == '1' && isDataUploaded != 'P' && isDataUploaded != 'U') { + console.log('getUploadIRStatus success: U'); + // Stop Upload and Editing both when fully uploaded + setisDataUploaded("U"); + } + // setGbTempSessionId(data.TempSessionId); + GbTempSessionId.current = data.TempSessionId; + let obj = { Sess_StoreCode, Sess_TaskName, Sess_CatName, Sess_PhotoType }; + GbTempSessionObj.current = obj; + resolve(true); + } + else { + resolve(true); + } + }, function (txnE, txnerr) { console.log(txnerr); resolve(false); },); + }); + }).catch((err) => { + return false; + }) + } + + + + async function OpenImgModal(imgPath, window, splitItem, splitItemIndex, cameraType) { + setSelectedImg(imgPath) + setShowModal(true); + if ((imgPath != '' && imgPath != null)) { + setShowImageSaveOp(false); + } + else { + setShowImageSaveOp(true); + } + setReCapImgModalObj({ window, splitItem, splitItemIndex, cameraType }) + // _OpenCaptureImage_Modal(imgPath,window,splitItem,splitItemIndex,cameraType) + + } + + function cancelImage() { + // setImage1(''); + setSelectedImg(''); + setReCapImgModalObj({}) + setShowModal(false); + } + + async function getImage(imgdata) { + if (typeof imgdata == 'object' && imgdata.errorCode == 'camera_unavailable') { + notify(ST.Cameraunavailable); + } + else if (typeof imgdata == 'object' && imgdata.uri != null) { + const img = imgdata; + const imgurl = img.uri, imgWidth = img.width, imgHeight = img.ExtendedHeight; + let isImgFromGallery = img.fromGallery != null ? img.fromGallery : false; + let picture_clickedd = isImgFromGallery == true ? img.datetime : new Date(); + ////change by jeevanp + let picture_clicked_time = moment(picture_clickedd).format('MM-DD-YYYY HH:mm:ss') + let picture_clicked_time_for_pic_name = moment(picture_clickedd).format('MMDDYYYY_HHmmss') + console.log("time", picture_clicked_time); + console.log("time1", picture_clicked_time_for_pic_name); + ////change by jeevanp + let calculate_tym_date_for_filename = picture_clicked_time_for_pic_name; + let calculate_tym_date_over_img = picture_clicked_time; + + let filename = storeData.StoreId + '_' + (props.UserId || '') + '_AddVisibilityImg-' + calculate_tym_date_for_filename + '.jpg'; + console.log(filename, "file_name"); + + ////change by jeevanp + const mark_text1 = calculate_tym_date_over_img; + const mark_text2 = 'Store Name:' + storeData.StoreName + ' | Store Id:' + storeData.StoreId + ' | User Id:' + storeData.EmpId + ' | Image Type: Add. Visibility' + ' | Date:' + calculate_tym_date_over_img; + console.log(mark_text1 + "\n" + mark_text2, "mark_text2"); + + let addvisdata = AddVisFormData; + let image_key = 'Image1'; + let image_path_key = 'Image1Path'; + addvisdata[image_key] = filename; + + let imagePath = `${ImageFolderPath + currentMenu.ScreenName}/${filename}`; + RNFS.copyFile(imgurl, imagePath) + .then(async (resn) => { + // render data with clicked image + let uri = 'file://' + imagePath; + addvisdata[image_path_key] = uri; + setSelectedImg(uri) + BgAddVisFormData(addvisdata) + BgUnsavedChanges(true) + setrerenderdata2(!rerenderdata2); + // add metdata then resize image and restored back to the imagePath + let restore_data = { "destFilePath": imagePath, "imgurl": imgurl, imgWidth, imgHeight, mark_text1, mark_text2 } + let is_restored = await restore_ImageWithMetaData(restore_data, imgdata); + console.log("image restored:", is_restored); + }) + .catch(err => { + console.log('ERROR: image file write failed!!!'); + console.log(err.message, err.code); + }); + } + } + + function _OpenCaptureImage_Modal(img) { + + const isImageCap = (img != '' || img != null) ? true : false; + let { window, splitItem, splitItemIndex, cameraType } = reCapImgModalObj + let camera2Label = (window && window.PromoImage2Lable) || ''; + return ( + + { + isImageCap && + + + + + { openCamera('1') }}> + + + + {!showImageSaveOp && + { cancelImage() }}> + {ST.Close} + + } + + } + + ) + } + + + // IR functions start + + function openRetakeOp(IRImgIndex, IRimgPath) { + let data = { 'IRImgIndex': IRImgIndex, 'IRimgPath': IRimgPath }; + setretakeMData(data); + setshowRetakeModal(true); + } + + + function closeRetakeOp() { + setretakeMData({}) + setshowRetakeModal(false); + } + + function setIRZoomImages(IRCamImages) { + let z_images = []; + for (let ci in IRCamImages) { + let img = IRCamImages[ci]; + let img_obj = { imgIndex: (ci + 1), url: img.ImagePath, props: {} } + z_images.push(img_obj); + if (ci == IRCamImages.length - 1) { + setZoomImageUrl(z_images); + } + } + } + + async function StartCameraSession() { + let IR_Creds = props.IR_Creds != null && props.IR_Creds != "" ? JSON.parse(props.IR_Creds) : []; + let IR_CredsObj = IR_Creds.length > 0 ? IR_Creds[0] : {}; + + let newStdata = storeData; + if (IR_CredsObj.UseStoreCode != 1) { + newStdata.StoreCode = newStdata.StoreId; + } + let obj = { "StoreData": newStdata }; + obj["category_name"] = "multi"; + obj["task_name"] = "additional-visibility-displays"; + obj["photo_type"] = "additional-visibility"; + + let st1 = JSON.stringify(obj); + let TempSessionId = await IRLogin.StartIRSession(st1); + console.log('TempSessionId StartCameraSession:', TempSessionId, newStdata.StoreCode); + if (TempSessionId != null) { + setLoaderTitle('Processing Image...'); + setProcessing(true); + let IRCamImages = await IRLogin.getImageURIFromIRSession(TempSessionId); + console.log('Images from session :', IRCamImages); + + //set global IR images and session id if Camera is shown only once in header for KPI Screen + // setGbTempSessionId(TempSessionId); + GbTempSessionId.current = TempSessionId; + let sessObj = {} + sessObj['Sess_StoreCode'] = newStdata.StoreCode; + sessObj['Sess_TaskName'] = obj["task_name"]; + sessObj['Sess_CatName'] = obj["category_name"]; + sessObj['Sess_PhotoType'] = obj["photo_type"]; + GbTempSessionObj.current = sessObj; + AddVisIRImages.current = IRCamImages; + setIRZoomImages(IRCamImages); + + // setHasUnsavedChanges(true); + BgUnsavedChanges(true); + setrerenderdata(!rerenderdata); + + // stop image processing loader after all images get from sessionID + setProcessing(false); + setLoaderTitle('loading...'); + + } + else { + notify('Cannot capture images as getting Session Null.'); + } + + } + + async function ResumeCameraSession() { + // Resume Temp Session Id + let TempSessionId = GbTempSessionId.current; + console.log('TempSessionId :', TempSessionId); + + if (TempSessionId != null) { + setLoaderTitle('Processing Image...'); + setProcessing(true); + let retTempSessionId = await IRLogin.ResumeIRSession(TempSessionId); + console.log('retTempSessionId :', retTempSessionId); + if (retTempSessionId != null) { + // start fetching images after capturing photos + + let IRCamImages = await IRLogin.getImageURIFromIRSession(TempSessionId); + console.log('Images from session :', IRCamImages); + // setAddVisIRImages(IRCamImages); + AddVisIRImages.current = IRCamImages; + setIRZoomImages(IRCamImages); + + BgUnsavedChanges(true); + // setHasUnsavedChanges(true); + setrerenderdata(!rerenderdata); + + // stop image processing loader after all images get from sessionID + setProcessing(false); + setLoaderTitle('loading...'); + } + else { + notify('Cannot capture images as getting Session Null.'); + } + + } + else { + notify('Cannot capture images as getting Session Null.'); + } + + } + + async function DeleteIRPhoto(type = '1', imgData = {}) { + console.log('DeleteIRPhoto called'); + setshowRetakeModal(false); + let deleteImgData = type == '2' ? imgData : retakeMData; + let { IRImgIndex, IRimgPath } = deleteImgData; + IRImgIndex = IRImgIndex != null ? IRImgIndex : ''; + IRimgPath = IRimgPath != null ? IRimgPath : ''; + + + let TempSessionId = GbTempSessionId.current; + + console.log('DeleteIRPhoto sessionID :', TempSessionId); + if (TempSessionId != null || TempSessionId != '') { + setLoaderTitle('Removing Image...'); + setProcessing(true); + let isDeleted = await IRLogin.DeleteIRSessionPhoto(TempSessionId, IRimgPath);//"8099b819-0979-40d2-950e-489566041484";// + console.log('DeleteIRPhoto isDeleted :', isDeleted); + if (isDeleted) { + setLoaderTitle('Processing Image...'); + + let IRCamImages = await IRLogin.getImageURIFromIRSession(TempSessionId); + console.log('Deleted, Images from session :', IRCamImages); + // setAddVisIRImages(IRCamImages); + AddVisIRImages.current = IRCamImages; + setIRZoomImages(IRCamImages); + + BgUnsavedChanges(true); + // setHasUnsavedChanges(true); + setrerenderdata(!rerenderdata); + + // stop image processing loader after all images get from sessionID + setProcessing(false); + setLoaderTitle('loading...'); + return true; + + } + else { + notify('Cannot delete photo!.'); + return false; + } + + } + else { + notify('Cannot delete photo! Found Null Session.'); + return false; + } + + } + + async function RetakeIRPhoto() { + setshowRetakeModal(false); + let { IRImgIndex, IRimgPath } = retakeMData; + + IRImgIndex = IRImgIndex != null ? IRImgIndex : ''; + IRimgPath = IRimgPath != null ? IRimgPath : ''; + + let TempSessionId = GbTempSessionId.current; + + console.log('Retake sessionID :', TempSessionId); + if (TempSessionId != null || TempSessionId != '') { + setLoaderTitle('Processing Image...'); + setProcessing(true); + let isRetakeDone = await IRLogin.RetakeIRSessionPhoto(TempSessionId, IRimgPath); + console.log('Retake isRetakeDone :', isRetakeDone); + if (isRetakeDone) { + setTimeout(async () => { + let IRCamImages = await IRLogin.getImageURIFromIRSession(TempSessionId); + console.log('Retake Images from session :', IRCamImages); + // setAddVisIRImages(IRCamImages); + AddVisIRImages.current = IRCamImages; + setIRZoomImages(IRCamImages); + + BgUnsavedChanges(true); + // setHasUnsavedChanges(true); + setrerenderdata(!rerenderdata); + + // stop image processing loader after all images get from sessionID + setProcessing(false); + setLoaderTitle('loading...'); + }, 1000); + + } + else { + notify('Error occur while retaking photo!.'); + } + + } + else { + notify('Cannot start camera! Found Null Session.'); + } + + } + + // Start Upload for IR images + async function UploadIRSessions() { + setshowUploadAlert(false); + sessionsToUpload.current = []; + sessionsReceived.current = 0; + sessionsUploadedCount.current = 0; + + try { + let { StoreId } = storeData; + setLoaderTitle('Uploading Images...'); + setProcessing(true); + + // Global Upload function + // Sync Status for IR images + // From Infilect SDK 1.3.6 - The Images are uploading on realtime bases i.e. As the images are clicked by user the Images are getting uploaded to infilect server. + // In this case call below func to check the status of images that is already being uploaded by Real Time processing + let sync_result = await SyncIRsessionsInKPI(props, storeData, AppTables.ADDVIS_IRUPLOAD, AppTables.ADDVIS_IR_IMAGES); + let { isUploadStarted, AllDataUploaded, noDataFound, success, sessionList, sessionListWithDetails } = sync_result; + console.log("Sync Resp sync_result:", sync_result); + if (!success) { + notify('Cannot Upload Data! Something went wrong.'); + setProcessing(false); + } + else { + if (noDataFound) { + notify('No session to upload!'); + setisDataUploaded('U'); + setProcessing(false); + } + else { + if (!isUploadStarted && AllDataUploaded) { + notify('All images synced! No session to upload.'); + setisDataUploaded('U'); + setProcessing(false); + } else if (isUploadStarted) { + sessionsToUpload.current = sessionList; + sessionsToUploadDetails.current = sessionListWithDetails; + console.log("UploadStarted"); + } + } + } + } catch (e) { + console.log('Uploading Issue:', e); + setProcessing(false); + } + + + } + + async function UpdateIRUploadStatus(storeData1, menu1, TempSessionId, UnSessionId) { + console.log('UpdateIRUploadStatus'); + return new Promise((resolve, reject) => { + + let { StoreId, ChainId, StateId, StoreTypeId } = storeData1; + db.transaction(async function (txn) { + // update upload status and sync status here : when files are uploaded and we have got the universal session id for that + let q = `Update ${AppTables.ADDVIS_IRUPLOAD} set UN_SESSION_ID='${UnSessionId}',UPLOAD_STATUS='1',SYNC_STATUS='Synced' where STORE_ID='${StoreId}' and VISIT_DATE='${d2}' and TEMP_SESSION_ID='${TempSessionId}' `; + // console.log("update IR Upload q:",q); + await txn.executeSql(q, [], async function (txn2, txnres) { + console.log('Updated IR Upload Status'); + // console.log("update IR Upload q2:",q2); + let q2 = `Update ${AppTables.ADDVIS_IR_IMAGES} set UN_SESSION_ID='${UnSessionId}' where STORE_ID='${StoreId}' and VISIT_DATE='${d2}' and TEMP_SESSION_ID='${TempSessionId}' `; + await txn.executeSql(q2, [], async function (txn2, txnres2) { + console.log('Updated IR Upload Images Status'); + resolve(true); + }, function (txnE, txnerr) { console.log(txnerr); resolve(false); },); + + }, function (txnE, txnerr) { console.log(txnerr); resolve(false); },); + }); + }).catch((Err) => { + console.log('Error in UpdateIRUploadStatus:', Err); + return false; + }) + + + + } + + // {"AddVisiAllow": "Y", "Address": "Blank", "CameraAllow": "true", "ChainId": 151, "ChainName": "RELIANCE RETAIL", "ChannelId": 1, "CheckInTime": "15:33:45", "CheckOutTime": "", "CityId": 133, "CityName": "Hyderabad", "ContactPerson": "NA", "DistributorId": null, "DistributorName": null, "Email": "", "EmpId": 1, "ExpiryStock": "N", "GSTno": "", "GeoFenceRadius": 500, "GeoTag": "Y", "InTime": "00:00:00", "JCP_TYPE": "Mapping_JourneyPlan", "Landmark": "Na", "LastVisitDate": "", "Latitude": "28.5275264", "Location": "NA", "Longitude": "77.2779835", "MID": 217939, "MTDMerchandised": 0, "MenuCount": 8, "MenuCountWithNonAvlbl": 8, "MenuDoneCount": 4, "MenuListLen": 8, "MinTimeTaken": 0, "Mobile": "NA", "OutTime": "00:00:00", "Phone": "NA", "Pincode": "0", "RegionId": 4, "Score": "0", "StateId": 25, "StateName": "Telangana", "StoreCategory": "NA", "StoreCategoryId": "1", "StoreClass": "NA", "StoreClassId": 1, "StoreCode": "ST4312", "StoreId": 4318, "StoreName": "Test Store-5", "StoreType": "Hyper", "StoreTypeId": 3, "TaxType": "NA", "UploadStatus": "I", "VisitDate": "06/02/2023", "allDone": false} , + // {"DataRowCount": 1, "GreyIcon": "Add-Free-Visibility-gray.png", "KPIAVBL": 1, "MenuId": 7, "MenuName": "Addl./free Visibility", "MenuPath": "https://perfetti1.parinaam.in/Download/Icon/", "MenuSequence": 7, "NormalIcon": "Add-Free-Visibility.png", "ScreenName": "ADDITIONALVISI", "StoreId": 4318, "TickIcon": "Add-Free-Visibility-tick.png", "isAvlbl": true, "isKPI_Done": true},'c2ae81f9-cf47-4887-aed6-78fe7cc2ad0c','','Failed','400' + async function LogImageUpload(storeData1, menu1, TempSessionId, UnSessionId, message, status, thisIR_SessObj = {}) { + let { StoreId, StoreName } = storeData1; + const url = props.baseurl + getMethodName(METHODS.UPLOADJSON_METHOD); + const nowTime = moment().format('HH:mm:ss'); + let ImageCount = await getImageCount(storeData1, menu1, TempSessionId); + let { SESSION_STORECODE, SESSION_TASKNAME, SESSION_CATNAME, SESSION_PHOTOTYPE } = thisIR_SessObj; + + + ////Replaced special charecter and white space + let storeTittle = StoreName.replace(`@!%&`, '').replace(' ', '-'); + console.log("storeTittle:", storeTittle, StoreName); + + let obj = {}; + obj['StoreId'] = StoreId; + obj['Username'] = props.UserId; + obj['VisitDate'] = d2; + obj['InTime'] = nowTime; + obj['TempSessionId'] = TempSessionId; + obj['UnSessionId'] = UnSessionId; + obj['Status'] = status; + obj['Message'] = message; + obj['ImageCount'] = ImageCount; + obj['StoreTitle'] = storeTittle; + obj['StoreCode'] = SESSION_STORECODE; + obj['TaskName'] = SESSION_TASKNAME; + obj['CategoryName'] = SESSION_CATNAME; + obj['PhotoType'] = SESSION_PHOTOTYPE; + obj['KPIType'] = currentMenu.MenuName; + obj['ScreenName'] = currentMenu.ScreenName; + obj['UploadType'] = "New"; + + let postData = {}; + postData['MID'] = 0; + postData['Keys'] = 'IR_UPLOAD_LOG_MSG'; + postData['JsonData'] = JSON.stringify(obj); + postData['UserId'] = props.UserId; + + console.log('postData', postData); + + return await UploadData2(url, postData) + .then((res) => { + // console.log("log Uploaded:",res.UploadJsonResult); + if (res.UploadJsonResult != null && res.UploadJsonResult == 'Success') { + return true; + } + return false; + }) + .catch((err) => { + console.log(err); + return false; + }); + } + + + async function getImageCount(storeData1, menu1, TempSessionId) { + let { StoreId, ChainId, StateId, StoreTypeId } = storeData1; + console.log('storeData in getImageCount', storeData1); + return new Promise((resolve, reject) => { + + + db.transaction(async function (txn) { + + let q = `select DISTINCT TEMP_SESSION_ID,count(IMAGE1) as ImageCount from ${AppTables.ADDVIS_IR_IMAGES} where STORE_ID='${StoreId}' and VISIT_DATE='${d2}' and TEMP_SESSION_ID='${TempSessionId}' group by TEMP_SESSION_ID `; + console.log('q', q); + await txn.executeSql(q, [], async function (txn2, txnres) { + console.log('ImageCount rows:', txnres.rows.length); + if (txnres.rows.length > 0) { + let data = txnres.rows.item(0); + console.log('data:', data) + console.log('Image Count for TempSessionId:', data.ImageCount); + resolve(data.ImageCount); + } + else { + resolve(0); + } + + }, function (txnE, txnerr) { console.log(txnerr); resolve(0); },); + }); + }).catch((Err) => { + console.log('Error in getImageCount:', Err); + return 0; + }) + + + + } + + + + // IR functions end + + async function openCamera(type = '1') { + console.log('openCamera'); + setClickImageType(type); + UpdateShowCameraRef(true); + // props.navigation.navigate('CameraScreen',{'getImage':getImage,'cameraType':'back'}) + } + + async function onSubmitData() { + let isvalid = await validate(); + if (isvalid) { + Keyboard.dismiss(); + setShowAlert(true); + } + } + + async function saveData() { + // setHasUnsavedChanges(false); + BgUnsavedChanges(false) + setShowAlert(false); + setLoaderTitle(ST.SavingData + '...'); + setProcessing(true); + + try { + let { StoreId, ChainId, StateId, StoreTypeId } = storeData; + await db.transaction(async function (txn) { + + let q = `DELETE FROM ${AppTables.ADDITIONAL_VISIBILITY} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' `; + let q2 = `DELETE FROM ${AppTables.ADDVIS_IRUPLOAD} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' `; + let q3 = `DELETE FROM ${AppTables.ADDVIS_IR_IMAGES} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' `; + + // remove old data + await txn.executeSql(q, [], async function (txn2, txnres) { + console.log('av data deleted'); + }, function (txnE, txnerr) { console.log(txnerr); },); + + await txn.executeSql(q2, [], async function (txn2, txnres) { + console.log('av IR status data deleted'); + }, function (txnE, txnerr) { console.log(txnerr); },); + + await txn.executeSql(q3, [], async function (txn2, txnres) { + console.log('av IR Images data deleted'); + }, function (txnE, txnerr) { console.log(txnerr); },); + + var values = '', IRStatusV = '', IRImageV = ''; + let isFromDateIndex = KPIFields.findIndex(i => i.KPIFieldName == 'ShowFromDate'); + let isFromDateKPIObj = isFromDateIndex >= 0 ? KPIFields[isFromDateIndex] : {}; + let isFromDateEnable = isFromDateIndex >= 0 ? isFromDateKPIObj['KPIFieldEnable'] : true; + + + let isKPIIREnableI = KPIFields.findIndex(i => i.KPIFieldName == 'KPIIREnable') + let isKPIIREnableObj = isKPIIREnableI >= 0 ? KPIFields[isKPIIREnableI] : {}; + let isKPIIREnable = isKPIIREnableI >= 0 ? isKPIIREnableObj['KPIFieldEnable'] : false; + + + + + if (isAddVisPresent == 1 && AddVisibility.length > 0) { + for (var i = 0; i < AddVisibility.length; i++) { + let catIndex = i; + let item = AddVisibility[catIndex]; + let { CategoryName, CategoryId, SubCategoryName, SubCategoryId, BrandName, BrandId, DisplayName, DisplayId, Remark, Image1, Image1Path, FromDate, ToDate } = item; + values += values != '' ? ' , ' : ''; + values += ` ('${StoreId}','${d2}','${isAddVisPresent}','${CategoryName}','${CategoryId}','${SubCategoryName}','${SubCategoryId}','${BrandName}','${BrandId}','${DisplayName}','${DisplayId}','${(Remark || '')}','${(Image1 || '')}','1','${(FromDate || '')}','${(ToDate || '')}','${isFromDateEnable}','${d2}') `; + } + } + else { + values += ` ('${StoreId}','${d2}','${isAddVisPresent}','','','','','','','','','','','1','','','false','${d2}') `; + if (isKPIIREnable) { + if (AddVisIRImages.current.length > 0) { + removeIRImage() + } + else { + // setGbTempSessionId(''); + GbTempSessionId.current = ''; + } + } + } + + if (isAddVisPresent == 1 && isKPIIREnable && AddVisIRImages.current.length > 0) { + for (const IRImageIndex in AddVisIRImages.current) { + let IRImgObj = AddVisIRImages.current[IRImageIndex]; + let Image1 = IRImgObj['ImagePath'] != null && IRImgObj['ImagePath'] != '' ? IRImgObj['ImagePath'] : ''; + + IRImageV += IRImageV != '' ? ' , ' : ''; + IRImageV += ` ('${StoreId}','${d2}','${Image1}','${GbTempSessionId.current}','','${d2}') `; + } + + let { Sess_StoreCode, Sess_TaskName, Sess_CatName, Sess_PhotoType } = GbTempSessionObj.current; + Sess_StoreCode = Sess_StoreCode || ''; + Sess_TaskName = Sess_TaskName || ''; + Sess_CatName = Sess_CatName || ''; + Sess_PhotoType = Sess_PhotoType || ''; + IRStatusV += IRStatusV != '' ? ' , ' : ''; + IRStatusV += ` ('${StoreId}','${d2}','${GbTempSessionId.current}','','0','','${Sess_StoreCode}','${Sess_TaskName}','${Sess_CatName}','${Sess_PhotoType}','${d2}') `; + + } + + console.log('IRImageV additional_visibility:', IRImageV, IRStatusV); + let add_data = `INSERT INTO ${AppTables.ADDITIONAL_VISIBILITY} (STORE_ID,VISIT_DATE,PRESENT,CATEGORY,CATEGORY_ID,SUB_CATEGORY,SUB_CATEGORY_ID,BRAND,BRAND_ID,DISPLAY,DISPLAY_ID,REMARK,IMAGE,IS_UPDATED,FROM_DATE,TO_DATE,SHOWFROMDATE,ADDED_DATE) VALUES ${values} `; + let add_IRImagesdata = `INSERT INTO ${AppTables.ADDVIS_IR_IMAGES} (STORE_ID,VISIT_DATE,IMAGE1,TEMP_SESSION_ID,UN_SESSION_ID,ADDED_DATE) VALUES ${IRImageV} `; + let add_IRStatusdata = `INSERT INTO ${AppTables.ADDVIS_IRUPLOAD} (STORE_ID,VISIT_DATE,TEMP_SESSION_ID,UN_SESSION_ID,UPLOAD_STATUS,SYNC_STATUS,SESSION_STORECODE,SESSION_TASKNAME,SESSION_CATNAME,SESSION_PHOTOTYPE,ADDED_DATE) VALUES ${IRStatusV} `; + + + await txn.executeSql(add_data, [], async function (txn2, txnres) { + var isIRImageAdded = false, isIRStatusAdded = false; + + if (IRImageV != '') { + console.log('execute IR image data'); + isIRImageAdded = await executeQuery(add_IRImagesdata); + } else { + isIRImageAdded = true + } + + if (IRStatusV != '') { + console.log('execute IR status data'); + isIRStatusAdded = await executeQuery(add_IRStatusdata); + } + else { + isIRStatusAdded = true + } + + console.log('isIRImageAdded:', isIRImageAdded, isIRStatusAdded); + if (!isIRImageAdded) { + setProcessing(false); notify('Cannot add Additional Visibility IR Images data'); + } + else if (!isIRStatusAdded) { + setProcessing(false); notify('Cannot add Additional Visibility IR Status data'); + } + else { + console.log('av added'); + notify(ST.AdditionalVisibilityaddedsuccessfully, 'SHORT'); + setProcessing(false); + setisDataExists(true); + // clear store data in local storage to avoiding re-set data for the store + await clear_item('storeData') + BgUnsavedChanges(false);// when all data saved clear the unsaved changes flag + props.navigation.goBack();// send back + // if(isAddVisPresent){ + // setshowUploadAlert(true); + // } + // else{ + // props.navigation.goBack(); + // } + } + }, function (txnE, txnerr) { console.log(txnerr); setProcessing(false); notify(ST.Cannotaddadditionalvisibility) },); + + + }); + } catch (err) { + console.log(err); + } + } + + + async function executeQuery(q) { + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + await txn.executeSql(q, [], async function (txn2, txnres2) { + resolve(true); + }, function (Etxn, txnerr) { console.log(txnerr); resolve(false) }); + }); + }).then((val) => { + return val; + }).catch((err) => { + console.log(err); + return false; + }) + } + + + + async function validate() { + + let isKPIIREnableI = KPIFields.findIndex(i => i.KPIFieldName == 'KPIIREnable') + let isKPIIREnableObj = isKPIIREnableI >= 0 ? KPIFields[isKPIIREnableI] : {}; + let isKPIIREnable = isKPIIREnableI >= 0 ? isKPIIREnableObj['KPIFieldEnable'] : false; + + let isValid = true; + if (isAddVisPresent == 1 && AddVisibility.length <= 0) { + isValid = false; + notify(ST.Pleaseaddfirst, 'SHORT'); + } + else if (StoreCameraAllow && isKPIIREnable && isAddVisPresent == 1 && (AddVisIRImages.current.length <= 0 || GbTempSessionId.current == '')) { + isValid = false; + notify("Please click images", 'SHORT'); + } + + console.log('isValid:', isValid); + return isValid; + } + + async function validateForm() { + let isValid = true; + let { CategoryName, CategoryId, SubCategoryName, SubCategoryId, BrandName, BrandId, DisplayName, DisplayId, Remark, Image1, Image1Path, FromDate, ToDate, showFromDateFlag } = AddVisFormData; + + let isFromDateIndex = KPIFields.findIndex(i => i.KPIFieldName == 'ShowFromDate'); + let isFromDateKPIObj = isFromDateIndex >= 0 ? KPIFields[isFromDateIndex] : {}; + let isFromDateEnable = isFromDateIndex >= 0 ? isFromDateKPIObj['KPIFieldEnable'] : true; + + let isToDateIndex = KPIFields.findIndex(i => i.KPIFieldName == 'ShowToDate'); + let isToDateKPIObj = isToDateIndex >= 0 ? KPIFields[isToDateIndex] : {}; + let isToDateEnable = isToDateIndex >= 0 ? isToDateKPIObj['KPIFieldEnable'] : true; + + let isKPIIREnableI = KPIFields.findIndex(i => i.KPIFieldName == 'KPIIREnable') + let isKPIIREnableObj = isKPIIREnableI >= 0 ? KPIFields[isKPIIREnableI] : {}; + let isKPIIREnable = isKPIIREnableI >= 0 ? isKPIIREnableObj['KPIFieldEnable'] : false; + + + + if ((CategoryName == '' || CategoryName == null) || (CategoryId == '' || CategoryId == null)) { + isValid = false; + notify(ST.PleaseSelectCategory, 'SHORT'); + } + else if ((SubCategoryName == '' || SubCategoryName == null) || (SubCategoryId == '' || SubCategoryId == null)) { + isValid = false; + notify(ST.Pleaseselectsubcategory, 'SHORT'); + } + else if ((BrandName == '' || BrandName == null) || (BrandId == '' || BrandId == null)) { + isValid = false; + notify(ST.Pleaseselectbrand, 'SHORT'); + } + else if ((DisplayName == '' || DisplayName == null) || (DisplayId == '' || DisplayId == null)) { + isValid = false; + notify(ST.Pleaseselectdisplaytype, 'SHORT'); + } + // else if((Remark=='' || Remark==null )){ + // isValid=false; + // notify('Please enter remark','SHORT'); + // } + else if (isFromDateEnable == true && + !AddVisFormData.hasOwnProperty("FromDate") && + (FromDate == '' || FromDate == null)) { + isValid = false; + notify('Please Select The From Date ', 'SHORT'); + } else if (isToDateEnable == true && + !AddVisFormData.hasOwnProperty("ToDate") && + (ToDate == '' || ToDate == null)) { + isValid = false; + notify('Please Select The To Date ', 'SHORT'); + } + else if (StoreCameraAllow == true && !isKPIIREnable && (Image1 == '' || Image1 == null)) { + isValid = false; + notify(ST.Pleaseclickimage, 'SHORT'); + } + + console.log('isValid:', isValid); + return isValid; + } + + function onFormDataChange(val, key, type = '') { + if (val != '') { + let isValid = validateNumber(val, type); + if (!isValid) { + return; + } + } + + let data = AddVisFormData; + data[key] = val; + // setAddVisFormData(data); + // setHasUnsavedChanges(true); + BgAddVisFormData(data) + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + + function onselectionChange(option, keyLbl, keyVal) { + let data = AddVisFormData; + data[keyVal] = option.value; + data[keyLbl] = option.label; + + CleanSelector(option, keyLbl, data) + + // setAddVisFormData(data); + BgAddVisFormData(data) + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + + } + + function CleanSelector(option, keyLbl = '', data = {}) { + + if (keyLbl == 'CategoryName') { + loadData(option.value, 'SubCategories'); + + // clear subcategory and brand + data['SubCategoryId'] = ''; + data['SubCategoryName'] = ''; + data['BrandId'] = ''; + data['BrandName'] = ''; + + + data['DisplayId'] = '' + data['DisplayName'] = '' + data['Remark'] = '' + data['Image1Path'] = '' + + setToDate(''); + setToDate2(new Date()); + + setFromDate(''); + setFromDate2(new Date()); + // data['FromDate']=''; + } + else if (keyLbl == 'SubCategoryName') { + loadData(option.value, 'Brands'); + + // clear brand + data['BrandId'] = ''; + data['BrandName'] = ''; + + data['DisplayId'] = '' + data['DisplayName'] = '' + + data['Image1Path'] = '' + + data['Remark'] = '' + + setToDate(''); + setToDate2(new Date()); + + setFromDate(''); + setFromDate2(new Date()); + } else if (keyLbl == 'BrandName') { + + // clear brand + + data['DisplayId'] = '' + data['DisplayName'] = '' + + data['Image1Path'] = '' + + data['Remark'] = '' + + setToDate(''); + setToDate2(new Date()); + + setFromDate(''); + setFromDate2(new Date()); + } else if (keyLbl == 'DisplayName') { + + // clear brand + + data['Image1Path'] = '' + + data['Remark'] = '' + + setToDate(''); + setToDate2(new Date()); + + setFromDate(''); + setFromDate2(new Date()); + } + + } + async function loadData(qId, type) { + try { + await db.transaction(async function (txn) { + let q = ''; + if (type == 'SubCategories') q = `Select Distinct p.SubCategoryId,p.SubCategoryName from Product_Master p where p.CategoryId='${qId}' and p.IsCompetitor='0' order by p.SubCategorySequence`; + else if (type == 'Brands') q = `Select Distinct p.BrandName,p.BrandId from Product_Master p Where p.SubCategoryId='${qId}' and p.IsCompetitor='0' order by p.BrandSequence`; + + await txn.executeSql(q, [], async function (txn2, txnres2) { + // console.log('rowcount:,',type,':',txnres2.rows.length); + if (txnres2.rows.length > 0) { + let arr = []; + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + arr.push(data); + if (i == txnres2.rows.length - 1) { + if (type == 'SubCategories') setSubCategories(arr); + else if (type == 'Brands') setBrands(arr); + } + } + } + }, function (txnE, txnerr) { console.log(txnerr); },); + + }); + } catch (err) { + console.log(err); + } + } + + + function openImageRefView(windowIndex = 0) { + setrefImageIndex(windowIndex); + setShow_zoomImage(true); + } + + function onChoiceSelect(val, key) { + let isDataPresent = AddVisibility.length > 0 || AddVisIRImages.current.length > 0; + if (val == 0 && isDataPresent) { + setShowRAllC_M(true); + return; + } + var val1 = val == 1 ? 1 : 0; + if (animatedChoice != null) { + Animated.timing(animatedChoice, { + toValue: val1, + duration: 400, + useNativeDriver: false, + }).start(); + } + // setIsAddVisPresent(val); + // setHasUnsavedChanges(true); + BgIsAddVisPresent(val); + BgUnsavedChanges(true) + if (val == 0) { + // setAddVisibility([]); + // setAddVisFormData({}); + BgWindowData([]) + BgAddVisFormData({}) + } + } + + function onConfirmRemoveAll() { + // Remove all data + if (animatedChoice != null) { + Animated.timing(animatedChoice, { + toValue: 0, + duration: 400, + useNativeDriver: false, + }).start(); + } + // setIsAddVisPresent(0); + // setHasUnsavedChanges(true); + // setAddVisibility([]); + // setAddVisFormData({}); + BgIsAddVisPresent(0); + BgWindowData([]) + BgAddVisFormData({}) + setShowRAllC_M(false); + + let isKPIIREnableI = KPIFields.findIndex(i => i.KPIFieldName == 'KPIIREnable') + let isKPIIREnableObj = isKPIIREnableI >= 0 ? KPIFields[isKPIIREnableI] : {}; + let isKPIIREnable = isKPIIREnableI >= 0 ? isKPIIREnableObj['KPIFieldEnable'] : false; + + // if(isKPIIREnable){ + // if(AddVisIRImages.current.length>0){ + // removeIRImage() + // } + // else{ + // // setGbTempSessionId(''); + // GbTempSessionId.current=''; + // } + // } + + BgUnsavedChanges(true) + + } + + async function removeIRImage() { + // declare length of IRImages in starting as after deleteing IRphoto the length of refrence variable is also updated + let AllIRImages = AddVisIRImages.current; + let AllImageLen = AllIRImages.length; + for (const IRImageIndex in AllIRImages) { + let IRImgObj = AllIRImages[IRImageIndex]; + let Image1 = IRImgObj['ImagePath'] != null && IRImgObj['ImagePath'] != '' ? IRImgObj['ImagePath'] : ''; + + let obj = { "IRImgIndex": IRImageIndex, "IRimgPath": Image1 }; + let isRemoved = await DeleteIRPhoto('2', obj); + console.log("IR Image removed:", IRImageIndex, isRemoved); + if (IRImageIndex == AllImageLen - 1) { + console.log("do empty Session and images if all removed from IR session"); + // setGbTempSessionId(''); + GbTempSessionId.current = ''; + // setAddVisIRImages([]); + AddVisIRImages.current = []; + } + + } + } + + function onSaveCancel() { + setShowAlert(false); + } + + async function Add_AddVis() { + let isValid = await validateForm(); + console.log('isValid add:', isValid); + if (isValid) { + let arr = AddVisibility; + let { CategoryName, CategoryId, SubCategoryName, SubCategoryId, BrandName, BrandId, DisplayName, DisplayId, Remark, Image1, Image1Path } = AddVisFormData; + + // let index=AddVisibility.findIndex(i=>i.CategoryId==CategoryId && i.SubCategoryId==SubCategoryId && i.BrandId==BrandId && i.DisplayId==DisplayId); + // if(index>=0){ + // notify(ST.Thisvisibilityhasalreadybeenadded,'LONG'); + // } + // else{ + arr.push(AddVisFormData); + // setAddVisibility(arr); + // setHasUnsavedChanges(true); + BgWindowData(arr) + BgUnsavedChanges(true) + notify(ST.AdditionalVisibilityaddedsuccessfully, 'LONG'); + setrerenderdata(!rerenderdata); + + // clear data + setFromDate(''); + BgAddVisFormData({}) + setToDate(''); + // setAddVisFormData({}); + // } + } + + } + + function showRemoveConfirm(item, index) { + setToRemoveId(index); + setToRemoveItem(item); + setshowRemoveConfirm_M(true); + } + + function Remove_AddVis() { + let index = toRemoveId + let item = toRemoveItem; + let arr = AddVisibility; + console.log('toRemoveId:', index); + if (index >= 0 && index < arr.length) { + arr.splice(index, 1); + // setAddVisibility(AddVisibility); + // setHasUnsavedChanges(true); + BgWindowData(AddVisibility) + BgUnsavedChanges(true) + notify(ST.Visibilityremovedsuccessfully, 'LONG') + setrerenderdata(!rerenderdata); + } + else { + notify(ST.CannotremoveVisibilitynotfound, 'LONG') + } + setToRemoveId(''); + setToRemoveItem({}); + setshowRemoveConfirm_M(false); + + } + + + function renderDatePicker(curDate, setTimeStamp, setDate, ColumnName, setShowDate) { + // PODate2,setPODate2,setPODate,setShowDatePicker + let today = new Date(); + console.log('renderDatePicker:', curDate, FromDate); + let d1 = curDate != null && curDate != '' ? curDate : new Date(); + // let d1=new Date(); + console.log('d1 date:', d1); + return ( + { + console.log('onchange date', selectedDate); + if (selectedDate != null) { + console.log('change date', selectedDate); + let d2 = moment(selectedDate).format('DD/MM/YYYY'); + let dateString = String(d2) + setShowDate(false); + setTimeStamp(selectedDate); + setDate(d2); + onFormDataChange(dateString, ColumnName) + + } + }} + + /> + ); + } + + + + function _render_RetakePopup() { + return ( + + + { RetakeIRPhoto() }}> + + + Retake + + + { DeleteIRPhoto() }}> + + + Delete + + + { closeRetakeOp() }}> + + + Cancel + + + + + + + + ) + } + + function _render_UploadAlert() { + return ( + + + { setshowUploadAlert(false) }}> + Cancel + + { UploadIRSessions() }}> + Yes + + + + ) + } + + function _renderIRCamera(IRImages, TempSessionId) { + + let isSaveDisabled = (isDataUploaded == 'U' || isDataUploaded == 'P'); + let isResumeDisabled = (TempSessionId == null || TempSessionId == '' || TempSessionId == 'undefined' || isSaveDisabled == true); + + return ( + + + {`Capture ${currentMenu.MenuName} Images`} + + + + {(IRImages != null && IRImages.length > 0) && + IRImages.map((IRImg, IRImgIndex) => { + let IRimgPath = IRImg.ImagePath; + return ( + { openImageRefView(IRImgIndex) }}> + {(IRimgPath != null && IRimgPath != '') && } + {(IRimgPath == null || IRimgPath == '') && } + { openRetakeOp(IRImgIndex, IRimgPath) }}> + + + + ); + }) + + } + + + { StartCameraSession() }}> + + Start Session + + { ResumeCameraSession() }} > + + Resume Session + + + + + ) + } + + + + + + function _render_addVisFormTop() { + let xpos = 0; + if (animatedChoice != null) { + xpos = animatedChoice.interpolate({ + inputRange: [0, 1], + outputRange: [0, -75], + }); + } + + let isFromDateIndex = KPIFields.findIndex(i => i.KPIFieldName == 'ShowFromDate'); + let isFromDateKPIObj = isFromDateIndex >= 0 ? KPIFields[isFromDateIndex] : {}; + let isFromDateEnable = isFromDateIndex >= 0 ? isFromDateKPIObj['KPIFieldEnable'] : true; + + let isToDateIndex = KPIFields.findIndex(i => i.KPIFieldName == 'ShowToDate'); + let isToDateKPIObj = isToDateIndex >= 0 ? KPIFields[isToDateIndex] : {}; + let isToDateEnable = isToDateIndex >= 0 ? isToDateKPIObj['KPIFieldEnable'] : true; + + let isKPIIREnableI = KPIFields.findIndex(i => i.KPIFieldName == 'KPIIREnable') + let isKPIIREnableObj = isKPIIREnableI >= 0 ? KPIFields[isKPIIREnableI] : {}; + let isKPIIREnable = isKPIIREnableI >= 0 ? isKPIIREnableObj['KPIFieldEnable'] : false; + + let isSaveDisabled = (isDataUploaded == 'U' || isDataUploaded == 'P'); + + + + return ( + + + {ST.IsPresent} + + + + { onChoiceSelect(1, 'isPresent') }}> + {ST.Yes} + + { onChoiceSelect(0, 'isPresent') }}> + {ST.No} + + + + + + { + isAddVisPresent == 1 && (rerenderdata == rerenderdata) && + + + {isKPIIREnable && + _renderIRCamera(AddVisIRImages.current, GbTempSessionId.current) + } + + + + {ST.Category} + {CustomPicker(props, Categories, 'CategoryName', 'CategoryId', 'CategoryName', 'CategoryId', onselectionChange, { value: AddVisFormData.CategoryName }, null, null, false, route)} + + + + + + {'Sub Category'} + + {CustomPicker(props, SubCategories, 'SubCategoryName', 'SubCategoryId', 'SubCategoryName', 'SubCategoryId', onselectionChange, { value: AddVisFormData.SubCategoryName }, null, null, false, route)} + + + + + {ST.Brands} + + {CustomPicker(props, Brands, 'BrandName', 'BrandId', 'BrandName', 'BrandId', onselectionChange, { value: AddVisFormData.BrandName }, null, null, false, route)} + + + + + {ST.DisplayType} + {CustomPicker(props, DisplayList, 'DisplayName', 'DisplayId', 'DisplayName', 'DisplayId', onselectionChange, { value: AddVisFormData.DisplayName }, null, null, false, route)} + + + {isFromDateEnable == true && + + + {'From Date'} + + {FromDate} + { setShowDatePicker1(true); }}> + + + + {(ShowDatePicker1 == true) && + renderDatePicker(FromDate2, setFromDate2, setFromDate, 'FromDate', setShowDatePicker1) + } + + } + {isToDateEnable == true && + + + {'To Date'} + + {ToDate} + { setShowDatePicker(true); }}> + + + + {(ShowDatePicker == true) && + renderDatePicker(ToDate2, setToDate2, setToDate, "ToDate", setShowDatePicker) + } + + } + + + + {ST.Remark} + { onFormDataChange(val, 'Remark', 'text'); }} + /> + + + {!isKPIIREnable && + + + {ST.Image} + + + {(AddVisFormData.Image1Path == '' || AddVisFormData.Image1Path == null) ? + { openCamera('1') }}> + + : (AddVisFormData.Image1Path != '' && AddVisFormData.Image1Path != null) ? + { OpenImgModal(AddVisFormData.Image1Path, '1') }}> + + : null + } + + + + + + + } + + { Add_AddVis() }}> + {ST.Add} + + + + + + {ST.AddedVisibilities} + + { + AddVisibility.length > 0 && + AddVisibility.map((item, index) => { + console.log(item); + return ( + + + + + {ST.Category + ' :'} + {item.CategoryName} + + + {ST.SubCategory + ' :'} + {item.SubCategoryName} + + + {ST.Brands + ' :'} + {item.BrandName} + + + {ST.DisplayType + ' :'} + {item.DisplayName} + + + {ST.Remark + ' :'} + {item.Remark} + + + {'From Date :'} + {item.FromDate} + + + {'To Date :'} + {item.ToDate} + + + {!isKPIIREnable && + + {/* */} + {ST.Image} + {(item.Image1Path != null && item.Image1Path != '') && } + {/* */} + } + { showRemoveConfirm(item, index) }}> + + + + + + + ); + }) + } + + + + } + + ) + } + + function _renderBtns() { + + let isUploadDisabled = isDataUploaded == 'U'; + let isSaveDisabled = (isDataUploaded == 'U' || isDataUploaded == 'P'); + + let colors1 = (isUploadDisabled ? [PageTheme.$tertiary_color, PageTheme.$tertiary_color] : [PageTheme.$secondary_color_light, PageTheme.$gradient2, PageTheme.$primary_color]); + let colors2 = (isSaveDisabled ? [PageTheme.$tertiary_color, PageTheme.$tertiary_color] : [PageTheme.$secondary_color_light, PageTheme.$gradient2, PageTheme.$primary_color]); + + return ( + + { onSubmitData() }} /> + + + ) + } + + function _renderHeader(currentIndex) { + return ( + + {`${(currentIndex + 1)}/${zoomImageUrl.length}`} + { setShow_zoomImage(false) }}> + + + + ) + } + + return ( + + {processing && } + + {_OpenCaptureImage_Modal()} + {ConfirmSaveAlert(props, showAlert, onSaveCancel, saveData)} + {ConfirmSaveAlert(props, showRemoveConfirm_M, () => { setshowRemoveConfirm_M(false) }, Remove_AddVis, ST.Doyoureallywanttoremovethisvisibility)} + {ConfirmSaveAlert(props, showRAllC_M, () => { setShowRAllC_M(false) }, onConfirmRemoveAll, ST.Doyoureallywanttoremoveallvisibilitydata)} + {_render_RetakePopup()} + {_render_UploadAlert()} + { UpdateShowCameraRef(false); getImage(imgData) }} showCamera={showCamera} onHideCamera={() => { UpdateShowCameraRef(false); }} /> + + + + {Object.keys(storeData).length > 0 && + + {_render_addVisFormTop()} + + } + {/* + {onSubmitData()}}/> + */} + {_renderBtns()} + + + + {show_zoomImage && + + null} + /> + + } + + ); +} + + + +export default connect(mapStateToProps, mapDispatchToProps)(AdditionalVisibilityIR); \ No newline at end of file diff --git a/PerformicsSrc/src/screens/AdditionalVisibilityIR_Only.js b/PerformicsSrc/src/screens/AdditionalVisibilityIR_Only.js new file mode 100644 index 0000000..c4d51f5 --- /dev/null +++ b/PerformicsSrc/src/screens/AdditionalVisibilityIR_Only.js @@ -0,0 +1,2033 @@ +import React, { useState, useEffect, useRef } from 'react'; +import Container from '../components/container'; +import { useRoute } from '@react-navigation/native'; +import { globalStyles, customStyles, GetPageTheme } from "../styles/Global"; +import { StatusBar, Image, TextInput, View, Text, ScrollView, TouchableOpacity, Platform, PermissionsAndroid, FlatList, Alert, Animated, AppState, DeviceEventEmitter, Keyboard } from 'react-native'; +import { ReactReduxContext, connect, useSelector, useDispatch } from 'react-redux'; +import { mapStateToProps, mapDispatchToProps } from '../reducers/contextProvider'; +import SQLite from 'react-native-sqlite-2'; +import { notify } from '../components/notify'; +import moment from 'moment'; +import { UploadData2, getDownloadJson, getKPIFields, marktext1, marktext2, resizeImage, restore_ImageWithMetaData, validateNumber } from '../controller/functions'; +import { get_item, set_item, clear_item } from '../components/localStorage'; +import { version, sloganline, appname, testurl, db, colors_Arr, common_ImagePath, ImageFolderPath } from '../constants/constants'; +import CustomHeader from '../components/customHeader'; +import { Card, Menu, Switch } from 'react-native-paper'; +import { AntDesign, Entypo, FontAwesome, Fontisto, MaterialCommunityIcons } from '../components/icons'; +import { stat } from 'react-native-fs'; +import CustomLoader from '../components/CustomLoader'; +import LinearGradient from 'react-native-linear-gradient'; +import { AppTables } from '../constants/tableConstants'; +import { SvgXml } from 'react-native-svg'; +import { launchCamera, launchImageLibrary, CameraOptions } from 'react-native-image-picker'; +import * as RNFS from 'react-native-fs'; +import GradientButton from '../components/gradientButton'; + +import cameraImg from '../assets/performics/camera_front_image.svg' +import addImg from '../assets/performics/add_image.svg'; +import CustomModal from '../components/CustomModal'; +import { Q_getpaidvisibility } from '../constants/ConstantQueries'; +import { Picker } from '@react-native-picker/picker'; +import { ConfirmSaveAlert } from '../components/alert'; +import ModalSelector from 'react-native-modal-selector' +import { CustomPicker } from '../components/CustomPicker'; +import CustomCamera from '../components/Camera'; +import DateTimePicker from '@react-native-community/datetimepicker'; + +import CameraImg3 from '../assets/performics/camera_tick.svg'; +import CameraImg2 from '../assets/performics/camera_icon.svg'; +import CameraImg4 from '../assets/performics/camera_asterisk.svg'; +import CameraImg5 from '../assets/image/astrickcamera.svg'; +import IRLogin from '../components/IRLogin'; +import { SyncIRsessionsInKPI } from '../constants/uploadData'; +import { METHODS, getMethodName } from '../constants/methodNames'; +import ImageViewer from 'react-native-image-zoom-viewer'; + +function AdditionalVisibilityIR_Only(props) { + const route = useRoute(); + const ST = props.StaticText || {}; + // get all theme styles acc to current theme set + const PageTheme = GetPageTheme(props.DarkMode, route.name); + const customStyle = customStyles(props.DarkMode, route.name); + const animatedChoice = useRef(new Animated.Value(0)).current; + + const [processing, setProcessing] = useState(true); + const [loaderTitle, setLoaderTitle] = useState(); + const [isAdhocScreen, setIsAdhocScreen] = useState(false); + const [storeData, setStoreData] = useState({}); + const [StoreCameraAllow, setStoreCameraAllow] = useState(true); + + const [ShowDatePicker1, setShowDatePicker1] = useState(false); + const [ShowDatePicker, setShowDatePicker] = useState(false); + const [currentMenu, setCurrentMenu] = useState({}); + const [brandData, setBrandData] = useState([]); + const [rerenderdata, setrerenderdata] = useState(0); + const [rerenderdata2, setrerenderdata2] = useState(0); + + const [AddVisibility, setAddVisibility] = useState([]); + const [AddVisFormData, setAddVisFormData] = useState({}); + const [isAddVisPresent, setIsAddVisPresent] = useState(0); + const [showAlert, setShowAlert] = useState(false); + const [Categories, setCategories] = useState([]); + const [SubCategories, setSubCategories] = useState([]); + const [Brands, setBrands] = useState([]); + const [DisplayList, setDisplayList] = useState([]); + const [hasUnsavedChanges, setHasUnsavedChanges] = useState(false); + const [showCamera, setShowCamera] = useState(false); + const showCameraRef = useRef(false); + const [clickImageType, setClickImageType] = useState('1'); + const [toRemoveId, setToRemoveId] = useState(''); + const [toRemoveItem, setToRemoveItem] = useState({}); + const [showRemoveConfirm_M, setshowRemoveConfirm_M] = useState(false); + const [showRAllC_M, setShowRAllC_M] = useState(false); + const [KPIFields, setKPIFields] = useState([]); + const [dateValue, setDateValue] = useState(''); + const [FromDate, setFromDate] = useState(''); + const [FromDate2, setFromDate2] = useState(new Date()); + + const [ToDate, setToDate] = useState(''); + const [ToDate2, setToDate2] = useState(new Date()); + + const [SelectedImg, setSelectedImg] = useState(''); + const [showModal, setShowModal] = useState(false); + const [reCapImgModalObj, setReCapImgModalObj] = useState({}); + const [showImageSaveOp, setShowImageSaveOp] = useState(true); + const [ImgMadCount, setImgMadCount] = useState({ img1: 0, img2: 0 }); + + const [show_zoomImage, setShow_zoomImage] = useState(false); + const [refImageIndex, setrefImageIndex] = useState(0); + const [zoomImageUrl, setZoomImageUrl] = useState([]); + const zoomView = useRef(null); + + const hasUnsavedChangesRef = React.useRef(hasUnsavedChanges); + const WindowDataRef = React.useRef(AddVisibility); + const StoreIdRef = React.useRef(null); + const ScreenNameRef = React.useRef(''); + + const VisFormDataRef = React.useRef(AddVisFormData); + const isAddVisPresentRef = React.useRef(isAddVisPresent); + + // AddVisibility,AddVisFormData,isAddVisPresent,pro + + // IR states or refs + const [isDataExists, setisDataExists] = useState(false); + const [isDataUploaded, setisDataUploaded] = useState("N"); + // const [AddVisIRImages, setAddVisIRImages] = useState([]); + // const [GbTempSessionId, setGbTempSessionId] = useState(""); + const AddVisIRImages = useRef([]); + const GbTempSessionId = useRef(""); + const GbTempSessionObj = useRef({}); + const sessionsToUpload = useRef([]); + const sessionsToUploadDetails = useRef([]); + const sessionsUploadedCount = useRef(0); + const sessionsReceived = useRef(0); + const [showRetakeModal, setshowRetakeModal] = useState(false); + const [retakeMData, setretakeMData] = useState({}); + const [showUploadAlert, setshowUploadAlert] = useState(false); + + const d1 = new Date(); + const d2 = moment(d1).format('MM/DD/YYYY'); + + + useEffect(() => { + + setLoaderTitle(ST.Loading + '...') + let params = props.route.params ? props.route.params : {}; + let storeData1 = params.storeData || {}; + let menu1 = params.menu || {}; + let cameraAllow = storeData1.CameraAllow == 'true' || storeData1.CameraAllow == 1 ? true : false; + setStoreCameraAllow(cameraAllow); + + let isAdhoc = params.isAdhoc || false; + + StoreIdRef.current = storeData1.StoreId + ScreenNameRef.current = menu1.ScreenName + setIsAdhocScreen(isAdhoc); + setStoreData(storeData1); + setCurrentMenu(menu1); + + getData(storeData1, menu1); + + + // console.log("storeData1,menu1",storeData1,menu1); + const AppStateSubscription = AppState.addEventListener('change', (pro) => { _handleAppStateChange(pro) }); + const removeIRListener = DeviceEventEmitter.addListener('onIRImageUpload', (data) => { onIRImageUpload(data, storeData1, menu1) }); + const unsubscribe = props.navigation.addListener('beforeRemove', onBeforeRemove); + + + return function cleanup() { + IRLogin.deRegisterReceiver(); + AppStateSubscription.remove(); + removeIRListener.remove(); + return unsubscribe; + }; + }, []); + + + const _handleAppStateChange = async (nextAppState) => { + if (nextAppState == 'background' && hasUnsavedChangesRef.current == true) { + let newData = { + storeBGData: WindowDataRef.current, + menuName: ScreenNameRef.current, + StoreId1: StoreIdRef.current, + AddFormData: VisFormDataRef.current, + isVisPresent: isAddVisPresentRef.current, + bg_GbTempSessionId: GbTempSessionId.current, + bg_AddVisIRImages: AddVisIRImages.current, + visiteDate: d2 + } + let WindowsStr = await JSON.stringify(newData) + await set_item('storeData', WindowsStr); + } + } + + // useEffect(() => { + // const unsubscribe=props.navigation.addListener('beforeRemove', onBeforeRemove); + // return unsubscribe; + // }, [hasUnsavedChanges]); + + + // useEffect(() => { + // const unsubscribe=props.navigation.addListener('beforeRemove', onBeforeRemove); + // return unsubscribe; + // }, [showCamera]); + + function BgUnsavedChanges(val) { + hasUnsavedChangesRef.current = val + setHasUnsavedChanges(val); + } + + function BgWindowData(val) { + WindowDataRef.current = val + setAddVisibility(val); + } + + function BgAddVisFormData(val) { + VisFormDataRef.current = val + setAddVisFormData(val); + } + + function BgIsAddVisPresent(val) { + isAddVisPresentRef.current = val + setIsAddVisPresent(val); + } + + + function UpdateShowCameraRef(val) { + showCameraRef.current = val + setShowCamera(val); + } + + + function onBeforeRemove(e) { + if (showCameraRef.current == true) { + e.preventDefault(); + UpdateShowCameraRef(false); + } + else { + if (hasUnsavedChangesRef.current == true) { + e.preventDefault(); // Prevent default behavior of leaving the screen + onRemoveScreen(e); + } + else { + return; + } + } + } + + async function onIRImageUpload(data, storeData1, menu1) { + console.log('onIRImageUpload on receive', data); + let { message, sessionId, status } = data; + let snum = sessionsReceived.current + 1; + let su_num = sessionsUploadedCount.current; + console.log('onreceive data', data); + sessionsReceived.current = snum; + let thisIR_SessObjIndex = sessionsToUploadDetails.current.findIndex(i => i.TEMP_SESSION_ID == sessionId); + let thisIR_SessObj = sessionsToUploadDetails.current[thisIR_SessObjIndex]; + if (status != null && status == '200' && sessionId != null && sessionId != '') { + + let UnSessionId = await IRLogin.getDataIRSession(sessionId); + if (UnSessionId != null && UnSessionId != '') { + sessionsUploadedCount.current = ++su_num; + let isUpdated = await UpdateIRUploadStatus(storeData1, menu1, sessionId, UnSessionId); + let isUploaded = await LogImageUpload(storeData1, menu1, sessionId, UnSessionId, message, status, thisIR_SessObj); + console.log("su_num:", su_num); + if (isUploaded) { + console.log('Image Uploaded'); + notify("Images Log uploaded for session:" + sessionId); + } + else { + console.log('cannot Uploaded image'); + notify("cannot upload log for session:" + sessionId); + } + + } + else { + console.log('OnReceived UnSessionId get', UnSessionId); + notify("Cannot upload images for session:" + sessionId + ". Universal Id not found"); + let isUploaded = await LogImageUpload(storeData1, menu1, sessionId, "", message, status, thisIR_SessObj); + if (isUploaded) { + console.log('Image Uploaded'); + notify("Images Log uploaded for session:" + sessionId); + } + else { + console.log('cannot Uploaded image'); + notify("cannot upload log for session:" + sessionId); + } + + } + + } + else { + console.log('Cannot get OnReceived UnSessionId'); + notify((message != null && message != "" ? message + ". " : "") + "Cannot upload images for session:" + sessionId); + let isUploaded = await LogImageUpload(storeData1, menu1, sessionId, "", message, status, thisIR_SessObj); + if (isUploaded) { + console.log('Image Uploaded'); + notify("Images Log uploaded for session:" + sessionId); + } + else { + console.log('cannot Uploaded image'); + notify("cannot upload log for session:" + sessionId); + } + + + } + + console.log("check snum and su_num:", snum, su_num, sessionsToUpload.current.length); + // if last broadcast received either uploaded or not update the processing status to false + if (snum == sessionsToUpload.current.length) { + setProcessing(false); + console.log('Deregister event when last received'); + IRLogin.deRegisterReceiver(); + } + + // All IR Sessions with Images Uploaded : set DataUploaded Status to U (Fully Upload) + if (su_num == sessionsToUpload.current.length) { + setisDataUploaded("U"); + setProcessing(false); + notify("All IR images uploaded!"); + console.log('set all uploaded true to U'); + } + // Some Of IR Sessions with Images Uploaded but some are yet pending : set DataUploaded Status to P (Partial Upload) + else if (su_num > 0 && su_num != sessionsToUpload.current.length) { + // setProcessing(false); + setisDataUploaded("P"); + notify("Some IR Images are still not uploaded!"); + console.log('set all uploaded true to P'); + } + } + + + function onRemoveScreen(e) { + Alert.alert( + "", + ST.Doyoureallywanttoexitthescreen, + [ + { + text: ST.Cancel, + onPress: () => { }, + style: "cancel" + }, + { + text: ST.OK, onPress: async () => { + BgUnsavedChanges(false) + await clear_item('storeData') + // setHasUnsavedChanges(false); + props.navigation.dispatch(e.data.action); + } + } + ] + ); + } + + async function getData(storeData1, menu1) { + try { + let { StoreId, ChainId, StateId, StoreTypeId } = storeData1; + + let AllKPIFields = await getKPIFields(menu1); + + setKPIFields(AllKPIFields); + + + let isFromDateIndex = AllKPIFields.findIndex(i => i.KPIFieldName == 'ShowFromDate'); + let isFromDateKPIObj = isFromDateIndex >= 0 ? AllKPIFields[isFromDateIndex] : {}; + let isFromDateEnable = isFromDateIndex >= 0 ? isFromDateKPIObj['KPIFieldEnable'] : true; + + let isToDateIndex = AllKPIFields.findIndex(i => i.KPIFieldName == 'ShowToDate'); + let isToDateKPIObj = isToDateIndex >= 0 ? AllKPIFields[isToDateIndex] : {}; + let isToDateEnable = isToDateIndex >= 0 ? isToDateKPIObj['KPIFieldEnable'] : true; + + // let isKPIIREnableI=AllKPIFields.findIndex(i=>i.KPIFieldName=='KPIIREnable') + // let isKPIIREnableObj=isKPIIREnableI>=0?AllKPIFields[isKPIIREnableI]:{}; + // let isKPIIREnable=isKPIIREnableI>=0?isKPIIREnableObj['KPIFieldEnable']:false; + + // console.log("isKPIIREnable:",isKPIIREnable) + + await db.transaction(async function (txn) { + + // await txn.executeSql(`UPDATE ${AppTables.ADDVIS_IRUPLOAD} set UPLOAD_STATUS='0' , SYNC_STATUS='' `,[],async function (txn2, txnres) { + // console.log('AddVis IR Status data deleted'); + // },function (txnE,txnerr) { console.log(txnerr); },); + + + let q = `Select Distinct p.CategoryId,p.CategoryName from Product_Master p where p.IsCompetitor='0' order by p.CategorySequence`; + await txn.executeSql(q, [], async function (txn2, txnres2) { + + if (txnres2.rows.length > 0) { + let arr = []; + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + arr.push(data); + if (i == txnres2.rows.length - 1) { setCategories(arr); } + } + } + }, function (txnE, txnerr) { console.log(txnerr); },); + + + let q2 = `Select Distinct DisplayId,DisplayName from Master_Display where Additional='1'`; + await txn.executeSql(q2, [], async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + let arr = []; + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + arr.push(data); + if (i == txnres2.rows.length - 1) { setDisplayList(arr); } + } + } + }, function (txnE, txnerr) { console.log(txnerr); },); + + let storeBGData1 = [], bgStoreJson = {}, isBGDataExists = false; + let windData = await get_item('storeData') + if (windData != null && windData != '') { + let StoreJson = await JSON.parse(windData) + let { storeBGData, menuName, StoreId1, AddFormData, visiteDate, bg_AddVisIRImages, bg_GbTempSessionId, isVisPresent } = StoreJson + // Check if bg data exists for this Store and menu on today date + if (menuName == menu1.ScreenName && StoreId1 == StoreId && visiteDate == d2) { + isBGDataExists = true; + BgUnsavedChanges(true) + + // Check if isVisPresent data exists in bg data + let bgPresent = isVisPresent == 1 ? 1 : 0; + Animated.timing(animatedChoice, { + toValue: bgPresent, + duration: 400, + useNativeDriver: false, + }).start(); + BgIsAddVisPresent(bgPresent); + + + // Check if added visibilities data exists in bg data + if (storeBGData.length > 0) { + storeBGData1 = storeBGData; + bgStoreJson = StoreJson + // setAddVisibility(storeBGData); + // setAddVisFormData(AddFormData) + // BgUnsavedChanges(true) + BgWindowData(storeBGData) + // BgAddVisFormData(AddFormData) + } + // console.log("AddFormData",AddFormData); + // Check if form data exists in bg data + if (AddFormData != null && Object.keys(AddFormData).length > 0) { + // BgUnsavedChanges(true) + let { CategoryId, SubCategoryId, FromDate, ToDate } = AddFormData; + // load subcategories if category exists + if (CategoryId != null && CategoryId != '') { + loadData(CategoryId, 'SubCategories'); + } + if (SubCategoryId != null && CategoryId != '') { + loadData(SubCategoryId, 'Brands'); + } + if (FromDate != null && FromDate != '') { + setFromDate(FromDate); + setFromDate2(new Date(FromDate)); + } + if (ToDate != null && ToDate != '') { + setToDate(ToDate); + setToDate2(new Date(ToDate)); + } + BgAddVisFormData(AddFormData) + } + + // Check if IR Images and session present in bg data + if (bg_GbTempSessionId != null && bg_GbTempSessionId != '' && bg_AddVisIRImages != null && bg_AddVisIRImages.length > 0) { + AddVisIRImages.current = bg_AddVisIRImages; + GbTempSessionId.current = bg_GbTempSessionId; + } + } + } + + let q3 = `Select * from ${AppTables.ADDITIONAL_VISIBILITY} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' `; + await txn.executeSql(q3, [], async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + let arr = []; + let isAddVisPr = false; + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + let { PRESENT, CATEGORY, CATEGORY_ID, SUB_CATEGORY, SUB_CATEGORY_ID, BRAND, BRAND_ID, DISPLAY, DISPLAY_ID, REMARK, IMAGE, FROM_DATE, TO_DATE, SHOWFROMDATE } = data; + let datan = { CategoryName: CATEGORY, CategoryId: CATEGORY_ID, SubCategoryName: SUB_CATEGORY, SubCategoryId: SUB_CATEGORY_ID, BrandName: BRAND, BrandId: BRAND_ID, DisplayName: DISPLAY, DisplayId: DISPLAY_ID, Remark: REMARK, Image1: IMAGE, FromDate: String(FROM_DATE), ToDate: String(TO_DATE), showFromDateFlag: SHOWFROMDATE } + datan.Image1Path = IMAGE != '' ? 'file://' + ImageFolderPath + menu1.ScreenName + "/" + IMAGE : ''; + PRESENT == 1 ? arr.push(datan) : ''; + let isPresent = PRESENT; + if (i == 0) isAddVisPr = PRESENT; + if (i == txnres2.rows.length - 1) { + if (!isBGDataExists) { //set current data in list if bg data does not exists + // setAddVisibility(arr); + BgWindowData(arr); + Animated.timing(animatedChoice, { + toValue: isPresent, + duration: 400, + useNativeDriver: false, + }).start(); + BgIsAddVisPresent(isPresent); + } + + + setisDataExists(true); + // isKPIIREnable && + if (isAddVisPr) { + let allIRImages = await getIRImages(storeData1, menu1); + // setAddVisIRImages(allIRImages); + AddVisIRImages.current = allIRImages; + let isUpdated = await getUploadIRStatus(storeData1, menu1); + } + setProcessing(false); + setrerenderdata(!rerenderdata); + } + } + } + else { + setProcessing(false); + setrerenderdata(!rerenderdata); + } + }, function (txnE, txnerr) { console.log(txnerr); setProcessing(false); },); + + }); + } catch (err) { + console.log(err); + } + } + + + async function getIRImages(storeData1, menu1) { + let allImages = []; + + return new Promise((resolve, reject) => { + + db.transaction(async function (txn) { + + let q = `select IMAGE1 as Image1 from ${AppTables.ADDVIS_IR_IMAGES} where STORE_ID='${storeData1.StoreId}' and VISIT_DATE='${d2}'`; + + await txn.executeSql(q, [], async function (txn2, txnres2) { + console.log('get IRImages count ', txnres2.rows.length); + if (txnres2.rows.length > 0) { + let arr2 = []; + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + let obj = { 'ImagePath': data.Image1 }; + allImages.push(obj); + + let imgObj = { imgIndex: (i + 1), url: data.Image1, props: {} } + arr2.push(imgObj); + if (i == txnres2.rows.length - 1) { + setZoomImageUrl(arr2); + resolve(allImages) + } + } + } + else { + resolve(allImages) + } + }, function (txnE, txnerr) { console.log(txnerr); resolve(allImages) },); + }); + }).then((val) => { + return val + }).catch((err) => { + console.log(err); + return allImages; + }); + } + + async function getUploadIRStatus(storeData1, menu1) { + let allImages = []; + let { StoreId } = storeData1; + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + + // Check If IR session uploaded or not + let q = ` SELECT Distinct TEMP_SESSION_ID as TempSessionId,UN_SESSION_ID as UploadSessionId,UPLOAD_STATUS as UploadStatus,SYNC_STATUS as SyncStatus,SESSION_STORECODE as Sess_StoreCode,SESSION_TASKNAME as Sess_TaskName,SESSION_CATNAME as Sess_CatName,SESSION_PHOTOTYPE as Sess_PhotoType FROM ${AppTables.ADDVIS_IRUPLOAD} where STORE_ID='${StoreId}' and VISIT_DATE='${d2}' `; + await txn.executeSql(q, [], async function (txn2, txnres) { + if (txnres.rows.length > 0) { + + //No Loop required, As only one TempSessionId will be genrated for KPI + let data = txnres.rows.item(0); + let { Sess_StoreCode, Sess_TaskName, Sess_CatName, Sess_PhotoType } = data; + if (data.UploadStatus == '1' && isDataUploaded != 'P' && isDataUploaded != 'U') { + console.log('getUploadIRStatus success: U'); + // Stop Upload and Editing both when fully uploaded + setisDataUploaded("U"); + } + // setGbTempSessionId(data.TempSessionId); + GbTempSessionId.current = data.TempSessionId; + let obj = { Sess_StoreCode, Sess_TaskName, Sess_CatName, Sess_PhotoType }; + GbTempSessionObj.current = obj; + resolve(true); + } + else { + resolve(true); + } + }, function (txnE, txnerr) { console.log(txnerr); resolve(false); },); + }); + }).catch((err) => { + return false; + }) + } + + + + async function OpenImgModal(imgPath, window, splitItem, splitItemIndex, cameraType) { + setSelectedImg(imgPath) + setShowModal(true); + if ((imgPath != '' && imgPath != null)) { + setShowImageSaveOp(false); + } + else { + setShowImageSaveOp(true); + } + setReCapImgModalObj({ window, splitItem, splitItemIndex, cameraType }) + // _OpenCaptureImage_Modal(imgPath,window,splitItem,splitItemIndex,cameraType) + + } + + function cancelImage() { + // setImage1(''); + setSelectedImg(''); + setReCapImgModalObj({}) + setShowModal(false); + } + + async function getImage(imgdata) { + if (typeof imgdata == 'object' && imgdata.errorCode == 'camera_unavailable') { + notify(ST.Cameraunavailable); + } + else if (typeof imgdata == 'object' && imgdata.uri != null) { + const img = imgdata; + const imgurl = img.uri, imgWidth = img.width, imgHeight = img.ExtendedHeight; + let isImgFromGallery = img.fromGallery != null ? img.fromGallery : false; + let picture_clickedd = isImgFromGallery == true ? img.datetime : new Date(); + //let picture_clicked_time=moment(picture_clickedd).format('DD-MM-YYYY HH:mm:ss') + ////change by jeevanp + let picture_clicked_time = moment(picture_clickedd).format('MM-DD-YYYY HH:mm:ss') + let picture_clicked_time_for_pic_name = moment(picture_clickedd).format('MMDDYYYY_HHmmss') + console.log("time", picture_clicked_time); + console.log("time1", picture_clicked_time_for_pic_name); + ////change by jeevanp + let calculate_tym_date_for_filename = picture_clicked_time_for_pic_name; + let calculate_tym_date_over_img = picture_clicked_time; + + let filename = storeData.StoreId + '_' + (props.UserId || '') + '_AddVisibilityImg-' + calculate_tym_date_for_filename + '.jpg'; + ////change by jeevanp + const mark_text1 = calculate_tym_date_over_img; + const mark_text2 = 'Store Name:' + storeData.StoreName + ' | Store Id:' + storeData.StoreId + ' | User Id:' + storeData.EmpId + ' | Image Type: Add. Visibility' + ' | Date:' + calculate_tym_date_over_img; + + let addvisdata = AddVisFormData; + let image_key = 'Image1'; + let image_path_key = 'Image1Path'; + addvisdata[image_key] = filename; + + let imagePath = `${ImageFolderPath + currentMenu.ScreenName}/${filename}`; + RNFS.copyFile(imgurl, imagePath) + .then(async (resn) => { + // render data with clicked image + let uri = 'file://' + imagePath; + addvisdata[image_path_key] = uri; + + setSelectedImg(uri) + BgAddVisFormData(addvisdata) + BgUnsavedChanges(true) + setrerenderdata2(!rerenderdata2); + // add metdata then resize image and restored back to the imagePath + let restore_data = { "destFilePath": imagePath, "imgurl": imgurl, imgWidth, imgHeight, mark_text1, mark_text2 } + let is_restored = await restore_ImageWithMetaData(restore_data, imgdata); + console.log("image restored:", is_restored); + }) + .catch(err => { + console.log('ERROR: image file write failed!!!'); + console.log(err.message, err.code); + }); + + } + } + + function _OpenCaptureImage_Modal(img) { + + const isImageCap = (img != '' || img != null) ? true : false; + let { window, splitItem, splitItemIndex, cameraType } = reCapImgModalObj + let camera2Label = (window && window.PromoImage2Lable) || ''; + return ( + + { + isImageCap && + + + + + { openCamera('1') }}> + + + + {!showImageSaveOp && + { cancelImage() }}> + {ST.Close} + + } + + } + + ) + } + + + // IR functions start + + function openRetakeOp(IRImgIndex, IRimgPath) { + let data = { 'IRImgIndex': IRImgIndex, 'IRimgPath': IRimgPath }; + setretakeMData(data); + setshowRetakeModal(true); + } + + + function closeRetakeOp() { + setretakeMData({}) + setshowRetakeModal(false); + } + + function setIRZoomImages(IRCamImages) { + let z_images = []; + for (let ci in IRCamImages) { + let img = IRCamImages[ci]; + let img_obj = { imgIndex: (ci + 1), url: img.ImagePath, props: {} } + z_images.push(img_obj); + if (ci == IRCamImages.length - 1) { + setZoomImageUrl(z_images); + } + } + } + + async function StartCameraSession() { + let IR_Creds = props.IR_Creds != null && props.IR_Creds != "" ? JSON.parse(props.IR_Creds) : []; + let IR_CredsObj = IR_Creds.length > 0 ? IR_Creds[0] : {}; + + let newStdata = storeData; + if (IR_CredsObj.UseStoreCode != 1) { + newStdata.StoreCode = newStdata.StoreId; + } + let obj = { "StoreData": newStdata }; + obj["category_name"] = "multi"; + obj["task_name"] = "additional-visibility-displays"; + obj["photo_type"] = "additional-visibility"; + + let st1 = JSON.stringify(obj); + let TempSessionId = await IRLogin.StartIRSession(st1); + console.log('TempSessionId StartCameraSession:', TempSessionId, newStdata.StoreCode); + if (TempSessionId != null) { + setLoaderTitle('Processing Image...'); + setProcessing(true); + let IRCamImages = await IRLogin.getImageURIFromIRSession(TempSessionId); + console.log('Images from session :', IRCamImages); + + //set global IR images and session id if Camera is shown only once in header for KPI Screen + // setGbTempSessionId(TempSessionId); + GbTempSessionId.current = TempSessionId; + let sessObj = {} + sessObj['Sess_StoreCode'] = newStdata.StoreCode; + sessObj['Sess_TaskName'] = obj["task_name"]; + sessObj['Sess_CatName'] = obj["category_name"]; + sessObj['Sess_PhotoType'] = obj["photo_type"]; + GbTempSessionObj.current = sessObj; + AddVisIRImages.current = IRCamImages; + setIRZoomImages(IRCamImages); + + // setHasUnsavedChanges(true); + BgUnsavedChanges(true); + setrerenderdata(!rerenderdata); + + // stop image processing loader after all images get from sessionID + setProcessing(false); + setLoaderTitle('loading...'); + + } + else { + notify('Cannot capture images as getting Session Null.'); + } + + } + + async function ResumeCameraSession() { + // Resume Temp Session Id + let TempSessionId = GbTempSessionId.current; + console.log('TempSessionId :', TempSessionId); + + if (TempSessionId != null) { + setLoaderTitle('Processing Image...'); + setProcessing(true); + let retTempSessionId = await IRLogin.ResumeIRSession(TempSessionId); + console.log('retTempSessionId :', retTempSessionId); + if (retTempSessionId != null) { + // start fetching images after capturing photos + + let IRCamImages = await IRLogin.getImageURIFromIRSession(TempSessionId); + console.log('Images from session :', IRCamImages); + // setAddVisIRImages(IRCamImages); + AddVisIRImages.current = IRCamImages; + setIRZoomImages(IRCamImages); + + BgUnsavedChanges(true); + // setHasUnsavedChanges(true); + setrerenderdata(!rerenderdata); + + // stop image processing loader after all images get from sessionID + setProcessing(false); + setLoaderTitle('loading...'); + } + else { + notify('Cannot capture images as getting Session Null.'); + } + + } + else { + notify('Cannot capture images as getting Session Null.'); + } + + } + + async function DeleteIRPhoto(type = '1', imgData = {}) { + console.log('DeleteIRPhoto called'); + setshowRetakeModal(false); + let deleteImgData = type == '2' ? imgData : retakeMData; + let { IRImgIndex, IRimgPath } = deleteImgData; + IRImgIndex = IRImgIndex != null ? IRImgIndex : ''; + IRimgPath = IRimgPath != null ? IRimgPath : ''; + + + let TempSessionId = GbTempSessionId.current; + + console.log('DeleteIRPhoto sessionID :', TempSessionId); + if (TempSessionId != null || TempSessionId != '') { + setLoaderTitle('Removing Image...'); + setProcessing(true); + let isDeleted = await IRLogin.DeleteIRSessionPhoto(TempSessionId, IRimgPath);//"8099b819-0979-40d2-950e-489566041484";// + console.log('DeleteIRPhoto isDeleted :', isDeleted); + if (isDeleted) { + setLoaderTitle('Processing Image...'); + + let IRCamImages = await IRLogin.getImageURIFromIRSession(TempSessionId); + console.log('Deleted, Images from session :', IRCamImages); + // setAddVisIRImages(IRCamImages); + AddVisIRImages.current = IRCamImages; + setIRZoomImages(IRCamImages); + + BgUnsavedChanges(true); + // setHasUnsavedChanges(true); + setrerenderdata(!rerenderdata); + + // stop image processing loader after all images get from sessionID + setProcessing(false); + setLoaderTitle('loading...'); + return true; + + } + else { + notify('Cannot delete photo!.'); + return false; + } + + } + else { + notify('Cannot delete photo! Found Null Session.'); + return false; + } + + } + + async function RetakeIRPhoto() { + setshowRetakeModal(false); + let { IRImgIndex, IRimgPath } = retakeMData; + + IRImgIndex = IRImgIndex != null ? IRImgIndex : ''; + IRimgPath = IRimgPath != null ? IRimgPath : ''; + + let TempSessionId = GbTempSessionId.current; + + console.log('Retake sessionID :', TempSessionId); + if (TempSessionId != null || TempSessionId != '') { + setLoaderTitle('Processing Image...'); + setProcessing(true); + let isRetakeDone = await IRLogin.RetakeIRSessionPhoto(TempSessionId, IRimgPath); + console.log('Retake isRetakeDone :', isRetakeDone); + if (isRetakeDone) { + setTimeout(async () => { + let IRCamImages = await IRLogin.getImageURIFromIRSession(TempSessionId); + console.log('Retake Images from session :', IRCamImages); + // setAddVisIRImages(IRCamImages); + AddVisIRImages.current = IRCamImages; + setIRZoomImages(IRCamImages); + + BgUnsavedChanges(true); + // setHasUnsavedChanges(true); + setrerenderdata(!rerenderdata); + + // stop image processing loader after all images get from sessionID + setProcessing(false); + setLoaderTitle('loading...'); + }, 1000); + + } + else { + notify('Error occur while retaking photo!.'); + } + + } + else { + notify('Cannot start camera! Found Null Session.'); + } + + } + + // Start Upload for IR images + async function UploadIRSessions() { + setshowUploadAlert(false); + sessionsToUpload.current = []; + sessionsReceived.current = 0; + sessionsUploadedCount.current = 0; + + try { + let { StoreId } = storeData; + setLoaderTitle('Uploading Images...'); + setProcessing(true); + + // Global Upload function + // Sync Status for IR images + // From Infilect SDK 1.3.6 - The Images are uploading on realtime bases i.e. As the images are clicked by user the Images are getting uploaded to infilect server. + // In this case call below func to check the status of images that is already being uploaded by Real Time processing + let sync_result = await SyncIRsessionsInKPI(props, storeData, AppTables.ADDVIS_IRUPLOAD, AppTables.ADDVIS_IR_IMAGES); + let { isUploadStarted, AllDataUploaded, noDataFound, success, sessionList, sessionListWithDetails } = sync_result; + console.log("Sync Resp sync_result:", sync_result); + if (!success) { + notify('Cannot Upload Data! Something went wrong.'); + setProcessing(false); + } + else { + if (noDataFound) { + notify('No session to upload!'); + setisDataUploaded('U'); + setProcessing(false); + } + else { + if (!isUploadStarted && AllDataUploaded) { + notify('All images synced! No session to upload.'); + setisDataUploaded('U'); + setProcessing(false); + } else if (isUploadStarted) { + sessionsToUpload.current = sessionList; + sessionsToUploadDetails.current = sessionListWithDetails; + console.log("UploadStarted"); + } + } + } + } catch (e) { + console.log('Uploading Issue:', e); + setProcessing(false); + } + + + } + + async function UpdateIRUploadStatus(storeData1, menu1, TempSessionId, UnSessionId) { + console.log('UpdateIRUploadStatus'); + return new Promise((resolve, reject) => { + + let { StoreId, ChainId, StateId, StoreTypeId } = storeData1; + db.transaction(async function (txn) { + // update upload status and sync status here : when files are uploaded and we have got the universal session id for that + let q = `Update ${AppTables.ADDVIS_IRUPLOAD} set UN_SESSION_ID='${UnSessionId}',UPLOAD_STATUS='1',SYNC_STATUS='Synced' where STORE_ID='${StoreId}' and VISIT_DATE='${d2}' and TEMP_SESSION_ID='${TempSessionId}' `; + // console.log("update IR Upload q:",q); + await txn.executeSql(q, [], async function (txn2, txnres) { + console.log('Updated IR Upload Status'); + // console.log("update IR Upload q2:",q2); + let q2 = `Update ${AppTables.ADDVIS_IR_IMAGES} set UN_SESSION_ID='${UnSessionId}' where STORE_ID='${StoreId}' and VISIT_DATE='${d2}' and TEMP_SESSION_ID='${TempSessionId}' `; + await txn.executeSql(q2, [], async function (txn2, txnres2) { + console.log('Updated IR Upload Images Status'); + resolve(true); + }, function (txnE, txnerr) { console.log(txnerr); resolve(false); },); + + }, function (txnE, txnerr) { console.log(txnerr); resolve(false); },); + }); + }).catch((Err) => { + console.log('Error in UpdateIRUploadStatus:', Err); + return false; + }) + + + + } + + // {"AddVisiAllow": "Y", "Address": "Blank", "CameraAllow": "true", "ChainId": 151, "ChainName": "RELIANCE RETAIL", "ChannelId": 1, "CheckInTime": "15:33:45", "CheckOutTime": "", "CityId": 133, "CityName": "Hyderabad", "ContactPerson": "NA", "DistributorId": null, "DistributorName": null, "Email": "", "EmpId": 1, "ExpiryStock": "N", "GSTno": "", "GeoFenceRadius": 500, "GeoTag": "Y", "InTime": "00:00:00", "JCP_TYPE": "Mapping_JourneyPlan", "Landmark": "Na", "LastVisitDate": "", "Latitude": "28.5275264", "Location": "NA", "Longitude": "77.2779835", "MID": 217939, "MTDMerchandised": 0, "MenuCount": 8, "MenuCountWithNonAvlbl": 8, "MenuDoneCount": 4, "MenuListLen": 8, "MinTimeTaken": 0, "Mobile": "NA", "OutTime": "00:00:00", "Phone": "NA", "Pincode": "0", "RegionId": 4, "Score": "0", "StateId": 25, "StateName": "Telangana", "StoreCategory": "NA", "StoreCategoryId": "1", "StoreClass": "NA", "StoreClassId": 1, "StoreCode": "ST4312", "StoreId": 4318, "StoreName": "Test Store-5", "StoreType": "Hyper", "StoreTypeId": 3, "TaxType": "NA", "UploadStatus": "I", "VisitDate": "06/02/2023", "allDone": false} , + // {"DataRowCount": 1, "GreyIcon": "Add-Free-Visibility-gray.png", "KPIAVBL": 1, "MenuId": 7, "MenuName": "Addl./free Visibility", "MenuPath": "https://perfetti1.parinaam.in/Download/Icon/", "MenuSequence": 7, "NormalIcon": "Add-Free-Visibility.png", "ScreenName": "ADDITIONALVISI", "StoreId": 4318, "TickIcon": "Add-Free-Visibility-tick.png", "isAvlbl": true, "isKPI_Done": true},'c2ae81f9-cf47-4887-aed6-78fe7cc2ad0c','','Failed','400' + async function LogImageUpload(storeData1, menu1, TempSessionId, UnSessionId, message, status, thisIR_SessObj = {}) { + let { StoreId, StoreName } = storeData1; + const url = props.baseurl + getMethodName(METHODS.UPLOADJSON_METHOD); + const nowTime = moment().format('HH:mm:ss'); + let ImageCount = await getImageCount(storeData1, menu1, TempSessionId); + let { SESSION_STORECODE, SESSION_TASKNAME, SESSION_CATNAME, SESSION_PHOTOTYPE } = thisIR_SessObj; + + + ////Replaced special charecter and white space + let storeTittle = StoreName.replace(`@!%&`, '').replace(' ', '-'); + console.log("storeTittle:", storeTittle, StoreName); + + let obj = {}; + obj['StoreId'] = StoreId; + obj['Username'] = props.UserId; + obj['VisitDate'] = d2; + obj['InTime'] = nowTime; + obj['TempSessionId'] = TempSessionId; + obj['UnSessionId'] = UnSessionId; + obj['Status'] = status; + obj['Message'] = message; + obj['ImageCount'] = ImageCount; + obj['StoreTitle'] = storeTittle; + obj['StoreCode'] = SESSION_STORECODE; + obj['TaskName'] = SESSION_TASKNAME; + obj['CategoryName'] = SESSION_CATNAME; + obj['PhotoType'] = SESSION_PHOTOTYPE; + obj['KPIType'] = currentMenu.MenuName; + obj['ScreenName'] = currentMenu.ScreenName; + obj['UploadType'] = "New"; + + let postData = {}; + postData['MID'] = 0; + postData['Keys'] = 'IR_UPLOAD_LOG_MSG'; + postData['JsonData'] = JSON.stringify(obj); + postData['UserId'] = props.UserId; + + console.log('postData', postData); + + return await UploadData2(url, postData) + .then((res) => { + // console.log("log Uploaded:",res.UploadJsonResult); + if (res.UploadJsonResult != null && res.UploadJsonResult == 'Success') { + return true; + } + return false; + }) + .catch((err) => { + console.log(err); + return false; + }); + } + + + async function getImageCount(storeData1, menu1, TempSessionId) { + let { StoreId, ChainId, StateId, StoreTypeId } = storeData1; + console.log('storeData in getImageCount', storeData1); + return new Promise((resolve, reject) => { + + + db.transaction(async function (txn) { + + let q = `select DISTINCT TEMP_SESSION_ID,count(IMAGE1) as ImageCount from ${AppTables.ADDVIS_IR_IMAGES} where STORE_ID='${StoreId}' and VISIT_DATE='${d2}' and TEMP_SESSION_ID='${TempSessionId}' group by TEMP_SESSION_ID `; + console.log('q', q); + await txn.executeSql(q, [], async function (txn2, txnres) { + console.log('ImageCount rows:', txnres.rows.length); + if (txnres.rows.length > 0) { + let data = txnres.rows.item(0); + console.log('data:', data) + console.log('Image Count for TempSessionId:', data.ImageCount); + resolve(data.ImageCount); + } + else { + resolve(0); + } + + }, function (txnE, txnerr) { console.log(txnerr); resolve(0); },); + }); + }).catch((Err) => { + console.log('Error in getImageCount:', Err); + return 0; + }) + + + + } + + + + // IR functions end + + async function openCamera(type = '1') { + console.log('openCamera'); + setClickImageType(type); + UpdateShowCameraRef(true); + // props.navigation.navigate('CameraScreen',{'getImage':getImage,'cameraType':'back'}) + } + + async function onSubmitData() { + let isvalid = await validate(); + if (isvalid) { + Keyboard.dismiss(); + setShowAlert(true); + } + } + + async function saveData() { + // setHasUnsavedChanges(false); + BgUnsavedChanges(false) + setShowAlert(false); + setLoaderTitle(ST.SavingData + '...'); + setProcessing(true); + + try { + let { StoreId, ChainId, StateId, StoreTypeId } = storeData; + await db.transaction(async function (txn) { + + let q = `DELETE FROM ${AppTables.ADDITIONAL_VISIBILITY} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' `; + let q2 = `DELETE FROM ${AppTables.ADDVIS_IRUPLOAD} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' `; + let q3 = `DELETE FROM ${AppTables.ADDVIS_IR_IMAGES} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' `; + + // remove old data + await txn.executeSql(q, [], async function (txn2, txnres) { + console.log('av data deleted'); + }, function (txnE, txnerr) { console.log(txnerr); },); + + await txn.executeSql(q2, [], async function (txn2, txnres) { + console.log('av IR status data deleted'); + }, function (txnE, txnerr) { console.log(txnerr); },); + + await txn.executeSql(q3, [], async function (txn2, txnres) { + console.log('av IR Images data deleted'); + }, function (txnE, txnerr) { console.log(txnerr); },); + + var values = '', IRStatusV = '', IRImageV = ''; + let isFromDateIndex = KPIFields.findIndex(i => i.KPIFieldName == 'ShowFromDate'); + let isFromDateKPIObj = isFromDateIndex >= 0 ? KPIFields[isFromDateIndex] : {}; + let isFromDateEnable = isFromDateIndex >= 0 ? isFromDateKPIObj['KPIFieldEnable'] : true; + + + // let isKPIIREnableI=KPIFields.findIndex(i=>i.KPIFieldName=='KPIIREnable') + // let isKPIIREnableObj=isKPIIREnableI>=0?KPIFields[isKPIIREnableI]:{}; + // let isKPIIREnable=isKPIIREnableI>=0?isKPIIREnableObj['KPIFieldEnable']:false; + + + + + // if(isAddVisPresent==1 && AddVisibility.length>0){ + // for(var i=0;i0){ + // removeIRImage() + // } + // else{ + // // setGbTempSessionId(''); + // GbTempSessionId.current=''; + // } + // } + // } + + + // isKPIIREnable && + if (isAddVisPresent == 1 && AddVisIRImages.current.length > 0) { + for (const IRImageIndex in AddVisIRImages.current) { + let IRImgObj = AddVisIRImages.current[IRImageIndex]; + let Image1 = IRImgObj['ImagePath'] != null && IRImgObj['ImagePath'] != '' ? IRImgObj['ImagePath'] : ''; + + IRImageV += IRImageV != '' ? ' , ' : ''; + IRImageV += ` ('${StoreId}','${d2}','${Image1}','${GbTempSessionId.current}','','${d2}') `; + } + + let { Sess_StoreCode, Sess_TaskName, Sess_CatName, Sess_PhotoType } = GbTempSessionObj.current; + Sess_StoreCode = Sess_StoreCode || ''; + Sess_TaskName = Sess_TaskName || ''; + Sess_CatName = Sess_CatName || ''; + Sess_PhotoType = Sess_PhotoType || ''; + IRStatusV += IRStatusV != '' ? ' , ' : ''; + IRStatusV += ` ('${StoreId}','${d2}','${GbTempSessionId.current}','','0','','${Sess_StoreCode}','${Sess_TaskName}','${Sess_CatName}','${Sess_PhotoType}','${d2}') `; + + } + + console.log('IRImageV additional_visibility:', IRImageV, IRStatusV); + let add_data = `INSERT INTO ${AppTables.ADDITIONAL_VISIBILITY} (STORE_ID,VISIT_DATE,PRESENT,CATEGORY,CATEGORY_ID,SUB_CATEGORY,SUB_CATEGORY_ID,BRAND,BRAND_ID,DISPLAY,DISPLAY_ID,REMARK,IMAGE,IS_UPDATED,FROM_DATE,TO_DATE,SHOWFROMDATE,ADDED_DATE) VALUES ${values} `; + let add_IRImagesdata = `INSERT INTO ${AppTables.ADDVIS_IR_IMAGES} (STORE_ID,VISIT_DATE,IMAGE1,TEMP_SESSION_ID,UN_SESSION_ID,ADDED_DATE) VALUES ${IRImageV} `; + let add_IRStatusdata = `INSERT INTO ${AppTables.ADDVIS_IRUPLOAD} (STORE_ID,VISIT_DATE,TEMP_SESSION_ID,UN_SESSION_ID,UPLOAD_STATUS,SYNC_STATUS,SESSION_STORECODE,SESSION_TASKNAME,SESSION_CATNAME,SESSION_PHOTOTYPE,ADDED_DATE) VALUES ${IRStatusV} `; + + + await txn.executeSql(add_data, [], async function (txn2, txnres) { + var isIRImageAdded = false, isIRStatusAdded = false; + + if (IRImageV != '') { + console.log('execute IR image data'); + isIRImageAdded = await executeQuery(add_IRImagesdata); + } else { + isIRImageAdded = true + } + + if (IRStatusV != '') { + console.log('execute IR status data'); + isIRStatusAdded = await executeQuery(add_IRStatusdata); + } + else { + isIRStatusAdded = true + } + + console.log('isIRImageAdded:', isIRImageAdded, isIRStatusAdded); + if (!isIRImageAdded) { + setProcessing(false); notify('Cannot add Additional Visibility IR Images data'); + } + else if (!isIRStatusAdded) { + setProcessing(false); notify('Cannot add Additional Visibility IR Status data'); + } + else { + console.log('av added'); + notify(ST.AdditionalVisibilityaddedsuccessfully, 'SHORT'); + setProcessing(false); + setisDataExists(true); + // clear store data in local storage to avoiding re-set data for the store + await clear_item('storeData') + BgUnsavedChanges(false);// when all data saved clear the unsaved changes flag + props.navigation.goBack();// send back + // if(isAddVisPresent){ + // setshowUploadAlert(true); + // } + // else{ + // props.navigation.goBack(); + // } + } + }, function (txnE, txnerr) { console.log(txnerr); setProcessing(false); notify(ST.Cannotaddadditionalvisibility) },); + + + }); + } catch (err) { + console.log(err); + } + } + + + async function executeQuery(q) { + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + await txn.executeSql(q, [], async function (txn2, txnres2) { + resolve(true); + }, function (Etxn, txnerr) { console.log(txnerr); resolve(false) }); + }); + }).then((val) => { + return val; + }).catch((err) => { + console.log(err); + return false; + }) + } + + + + async function validate() { + + // let isKPIIREnableI=KPIFields.findIndex(i=>i.KPIFieldName=='KPIIREnable') + // let isKPIIREnableObj=isKPIIREnableI>=0?KPIFields[isKPIIREnableI]:{}; + // let isKPIIREnable=isKPIIREnableI>=0?isKPIIREnableObj['KPIFieldEnable']:false; + + let isValid = true; + + // isKPIIREnable && + if (StoreCameraAllow && isAddVisPresent == 1 && (AddVisIRImages.current.length <= 0 || GbTempSessionId.current == '')) { + isValid = false; + notify("Please click images", 'SHORT'); + } + + console.log('isValid:', isValid); + return isValid; + } + + async function validateForm() { + let isValid = true; + let { CategoryName, CategoryId, SubCategoryName, SubCategoryId, BrandName, BrandId, DisplayName, DisplayId, Remark, Image1, Image1Path, FromDate, ToDate, showFromDateFlag } = AddVisFormData; + + let isFromDateIndex = KPIFields.findIndex(i => i.KPIFieldName == 'ShowFromDate'); + let isFromDateKPIObj = isFromDateIndex >= 0 ? KPIFields[isFromDateIndex] : {}; + let isFromDateEnable = isFromDateIndex >= 0 ? isFromDateKPIObj['KPIFieldEnable'] : true; + + let isToDateIndex = KPIFields.findIndex(i => i.KPIFieldName == 'ShowToDate'); + let isToDateKPIObj = isToDateIndex >= 0 ? KPIFields[isToDateIndex] : {}; + let isToDateEnable = isToDateIndex >= 0 ? isToDateKPIObj['KPIFieldEnable'] : true; + + // let isKPIIREnableI=KPIFields.findIndex(i=>i.KPIFieldName=='KPIIREnable') + // let isKPIIREnableObj=isKPIIREnableI>=0?KPIFields[isKPIIREnableI]:{}; + // let isKPIIREnable=isKPIIREnableI>=0?isKPIIREnableObj['KPIFieldEnable']:false; + + + + // if((CategoryName=='' || CategoryName==null )|| (CategoryId=='' || CategoryId==null)){ + // isValid=false; + // notify(ST.PleaseSelectCategory,'SHORT'); + // } + // else if((SubCategoryName=='' || SubCategoryName==null )|| (SubCategoryId=='' || SubCategoryId==null)){ + // isValid=false; + // notify(ST.Pleaseselectsubcategory,'SHORT'); + // } + // else if((BrandName=='' || BrandName==null )|| (BrandId=='' || BrandId==null)){ + // isValid=false; + // notify(ST.Pleaseselectbrand,'SHORT'); + // } + // else if((DisplayName=='' || DisplayName==null )|| (DisplayId=='' || DisplayId==null)){ + // isValid=false; + // notify(ST.Pleaseselectdisplaytype,'SHORT'); + // } + // // else if((Remark=='' || Remark==null )){ + // // isValid=false; + // // notify('Please enter remark','SHORT'); + // // } + // else if(isFromDateEnable==true && + // !AddVisFormData.hasOwnProperty("FromDate") && + // (FromDate=='' || FromDate==null )){ + // isValid=false; + // notify('Please Select The From Date ','SHORT'); + // }else if(isToDateEnable==true && + // !AddVisFormData.hasOwnProperty("ToDate") && + // (ToDate=='' || ToDate==null )){ + // isValid=false; + // notify('Please Select The To Date ','SHORT'); + // } + // else if(StoreCameraAllow==true && !isKPIIREnable && (Image1=='' || Image1==null )){ + // isValid=false; + // notify(ST.Pleaseclickimage,'SHORT'); + // } + + // console.log('isValid:',isValid); + return isValid; + } + + function onFormDataChange(val, key, type = '') { + if (val != '') { + let isValid = validateNumber(val, type); + if (!isValid) { + return; + } + } + + let data = AddVisFormData; + data[key] = val; + // setAddVisFormData(data); + // setHasUnsavedChanges(true); + BgAddVisFormData(data) + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + + function onselectionChange(option, keyLbl, keyVal) { + let data = AddVisFormData; + data[keyVal] = option.value; + data[keyLbl] = option.label; + + CleanSelector(option, keyLbl, data) + + // setAddVisFormData(data); + BgAddVisFormData(data) + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + + } + + function CleanSelector(option, keyLbl = '', data = {}) { + + if (keyLbl == 'CategoryName') { + loadData(option.value, 'SubCategories'); + + // clear subcategory and brand + data['SubCategoryId'] = ''; + data['SubCategoryName'] = ''; + data['BrandId'] = ''; + data['BrandName'] = ''; + + + data['DisplayId'] = '' + data['DisplayName'] = '' + data['Remark'] = '' + data['Image1Path'] = '' + + setToDate(''); + setToDate2(new Date()); + + setFromDate(''); + setFromDate2(new Date()); + // data['FromDate']=''; + } + else if (keyLbl == 'SubCategoryName') { + loadData(option.value, 'Brands'); + + // clear brand + data['BrandId'] = ''; + data['BrandName'] = ''; + + data['DisplayId'] = '' + data['DisplayName'] = '' + + data['Image1Path'] = '' + + data['Remark'] = '' + + setToDate(''); + setToDate2(new Date()); + + setFromDate(''); + setFromDate2(new Date()); + } else if (keyLbl == 'BrandName') { + + // clear brand + + data['DisplayId'] = '' + data['DisplayName'] = '' + + data['Image1Path'] = '' + + data['Remark'] = '' + + setToDate(''); + setToDate2(new Date()); + + setFromDate(''); + setFromDate2(new Date()); + } else if (keyLbl == 'DisplayName') { + + // clear brand + + data['Image1Path'] = '' + + data['Remark'] = '' + + setToDate(''); + setToDate2(new Date()); + + setFromDate(''); + setFromDate2(new Date()); + } + + } + async function loadData(qId, type) { + try { + await db.transaction(async function (txn) { + let q = ''; + if (type == 'SubCategories') q = `Select Distinct p.SubCategoryId,p.SubCategoryName from Product_Master p where p.CategoryId='${qId}' and p.IsCompetitor='0' order by p.SubCategorySequence`; + else if (type == 'Brands') q = `Select Distinct p.BrandName,p.BrandId from Product_Master p Where p.SubCategoryId='${qId}' and p.IsCompetitor='0' order by p.BrandSequence`; + + await txn.executeSql(q, [], async function (txn2, txnres2) { + // console.log('rowcount:,',type,':',txnres2.rows.length); + if (txnres2.rows.length > 0) { + let arr = []; + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + arr.push(data); + if (i == txnres2.rows.length - 1) { + if (type == 'SubCategories') setSubCategories(arr); + else if (type == 'Brands') setBrands(arr); + } + } + } + }, function (txnE, txnerr) { console.log(txnerr); },); + + }); + } catch (err) { + console.log(err); + } + } + + + function openImageRefView(windowIndex = 0) { + setrefImageIndex(windowIndex); + setShow_zoomImage(true); + } + + function onChoiceSelect(val, key) { + let isDataPresent = AddVisibility.length > 0 || AddVisIRImages.current.length > 0; + if (val == 0 && isDataPresent) { + setShowRAllC_M(true); + return; + } + var val1 = val == 1 ? 1 : 0; + if (animatedChoice != null) { + Animated.timing(animatedChoice, { + toValue: val1, + duration: 400, + useNativeDriver: false, + }).start(); + } + // setIsAddVisPresent(val); + // setHasUnsavedChanges(true); + BgIsAddVisPresent(val); + BgUnsavedChanges(true) + if (val == 0) { + // setAddVisibility([]); + // setAddVisFormData({}); + BgWindowData([]) + BgAddVisFormData({}) + } + } + + function onConfirmRemoveAll() { + // Remove all data + if (animatedChoice != null) { + Animated.timing(animatedChoice, { + toValue: 0, + duration: 400, + useNativeDriver: false, + }).start(); + } + // setIsAddVisPresent(0); + // setHasUnsavedChanges(true); + // setAddVisibility([]); + // setAddVisFormData({}); + BgIsAddVisPresent(0); + BgWindowData([]) + BgAddVisFormData({}) + setShowRAllC_M(false); + + // let isKPIIREnableI=KPIFields.findIndex(i=>i.KPIFieldName=='KPIIREnable') + // let isKPIIREnableObj=isKPIIREnableI>=0?KPIFields[isKPIIREnableI]:{}; + // let isKPIIREnable=isKPIIREnableI>=0?isKPIIREnableObj['KPIFieldEnable']:false; + + // if(isKPIIREnable){ + // if(AddVisIRImages.current.length>0){ + // removeIRImage() + // } + // else{ + // // setGbTempSessionId(''); + // GbTempSessionId.current=''; + // } + // } + + BgUnsavedChanges(true) + + } + + async function removeIRImage() { + // declare length of IRImages in starting as after deleteing IRphoto the length of refrence variable is also updated + let AllIRImages = AddVisIRImages.current; + let AllImageLen = AllIRImages.length; + for (const IRImageIndex in AllIRImages) { + let IRImgObj = AllIRImages[IRImageIndex]; + let Image1 = IRImgObj['ImagePath'] != null && IRImgObj['ImagePath'] != '' ? IRImgObj['ImagePath'] : ''; + + let obj = { "IRImgIndex": IRImageIndex, "IRimgPath": Image1 }; + let isRemoved = await DeleteIRPhoto('2', obj); + console.log("IR Image removed:", IRImageIndex, isRemoved); + if (IRImageIndex == AllImageLen - 1) { + console.log("do empty Session and images if all removed from IR session"); + // setGbTempSessionId(''); + GbTempSessionId.current = ''; + // setAddVisIRImages([]); + AddVisIRImages.current = []; + } + + } + } + + function onSaveCancel() { + setShowAlert(false); + } + + async function Add_AddVis() { + let isValid = await validateForm(); + console.log('isValid add:', isValid); + if (isValid) { + let arr = AddVisibility; + let { CategoryName, CategoryId, SubCategoryName, SubCategoryId, BrandName, BrandId, DisplayName, DisplayId, Remark, Image1, Image1Path } = AddVisFormData; + + // let index=AddVisibility.findIndex(i=>i.CategoryId==CategoryId && i.SubCategoryId==SubCategoryId && i.BrandId==BrandId && i.DisplayId==DisplayId); + // if(index>=0){ + // notify(ST.Thisvisibilityhasalreadybeenadded,'LONG'); + // } + // else{ + arr.push(AddVisFormData); + // setAddVisibility(arr); + // setHasUnsavedChanges(true); + BgWindowData(arr) + BgUnsavedChanges(true) + notify(ST.AdditionalVisibilityaddedsuccessfully, 'LONG'); + setrerenderdata(!rerenderdata); + + // clear data + setFromDate(''); + BgAddVisFormData({}) + setToDate(''); + // setAddVisFormData({}); + // } + } + + } + + function showRemoveConfirm(item, index) { + setToRemoveId(index); + setToRemoveItem(item); + setshowRemoveConfirm_M(true); + } + + function Remove_AddVis() { + let index = toRemoveId + let item = toRemoveItem; + let arr = AddVisibility; + console.log('toRemoveId:', index); + if (index >= 0 && index < arr.length) { + arr.splice(index, 1); + // setAddVisibility(AddVisibility); + // setHasUnsavedChanges(true); + BgWindowData(AddVisibility) + BgUnsavedChanges(true) + notify(ST.Visibilityremovedsuccessfully, 'LONG') + setrerenderdata(!rerenderdata); + } + else { + notify(ST.CannotremoveVisibilitynotfound, 'LONG') + } + setToRemoveId(''); + setToRemoveItem({}); + setshowRemoveConfirm_M(false); + + } + + + function renderDatePicker(curDate, setTimeStamp, setDate, ColumnName, setShowDate) { + // PODate2,setPODate2,setPODate,setShowDatePicker + let today = new Date(); + console.log('renderDatePicker:', curDate, FromDate); + let d1 = curDate != null && curDate != '' ? curDate : new Date(); + // let d1=new Date(); + console.log('d1 date:', d1); + return ( + { + console.log('onchange date', selectedDate); + if (selectedDate != null) { + console.log('change date', selectedDate); + let d2 = moment(selectedDate).format('DD/MM/YYYY'); + let dateString = String(d2) + setShowDate(false); + setTimeStamp(selectedDate); + setDate(d2); + onFormDataChange(dateString, ColumnName) + + } + }} + + /> + ); + } + + + + function _render_RetakePopup() { + return ( + + + { RetakeIRPhoto() }}> + + + Retake + + + { DeleteIRPhoto() }}> + + + Delete + + + { closeRetakeOp() }}> + + + Cancel + + + + + + + + ) + } + + function _render_UploadAlert() { + return ( + + + { setshowUploadAlert(false) }}> + Cancel + + { UploadIRSessions() }}> + Yes + + + + ) + } + + function _renderIRCamera(IRImages, TempSessionId) { + + let isSaveDisabled = (isDataUploaded == 'U' || isDataUploaded == 'P'); + let isResumeDisabled = (TempSessionId == null || TempSessionId == '' || TempSessionId == 'undefined' || isSaveDisabled == true); + + return ( + + + {`Capture ${currentMenu.MenuName} Images`} + + + + {(IRImages != null && IRImages.length > 0) && + IRImages.map((IRImg, IRImgIndex) => { + let IRimgPath = IRImg.ImagePath; + return ( + { openImageRefView(IRImgIndex) }}> + {(IRimgPath != null && IRimgPath != '') && } + {(IRimgPath == null || IRimgPath == '') && } + { openRetakeOp(IRImgIndex, IRimgPath) }}> + + + + ); + }) + + } + + + { StartCameraSession() }}> + + Start Session + + { ResumeCameraSession() }} > + + Resume Session + + + + + ) + } + + + + + + function _render_addVisFormTop() { + let xpos = 0; + if (animatedChoice != null) { + xpos = animatedChoice.interpolate({ + inputRange: [0, 1], + outputRange: [0, -75], + }); + } + + // let isFromDateIndex=KPIFields.findIndex(i=>i.KPIFieldName=='ShowFromDate'); + // let isFromDateKPIObj=isFromDateIndex>=0?KPIFields[isFromDateIndex]:{}; + // let isFromDateEnable=isFromDateIndex>=0?isFromDateKPIObj['KPIFieldEnable']:true; + + // let isToDateIndex=KPIFields.findIndex(i=>i.KPIFieldName=='ShowToDate'); + // let isToDateKPIObj=isToDateIndex>=0?KPIFields[isToDateIndex]:{}; + // let isToDateEnable=isToDateIndex>=0?isToDateKPIObj['KPIFieldEnable']:true; + + // let isKPIIREnableI=KPIFields.findIndex(i=>i.KPIFieldName=='KPIIREnable') + // let isKPIIREnableObj=isKPIIREnableI>=0?KPIFields[isKPIIREnableI]:{}; + // let isKPIIREnable=isKPIIREnableI>=0?isKPIIREnableObj['KPIFieldEnable']:false; + + let isSaveDisabled = (isDataUploaded == 'U' || isDataUploaded == 'P'); + + + + return ( + + + {ST.IsPresent} + + + + { onChoiceSelect(1, 'isPresent') }}> + {ST.Yes} + + { onChoiceSelect(0, 'isPresent') }}> + {ST.No} + + + + + + { + isAddVisPresent == 1 && (rerenderdata == rerenderdata) && + + + {/* isKPIIREnable && */} + { + _renderIRCamera(AddVisIRImages.current, GbTempSessionId.current) + } + {/* + + + {ST.Category} + {CustomPicker(props,Categories,'CategoryName','CategoryId','CategoryName','CategoryId',onselectionChange,{value:AddVisFormData.CategoryName},null,null,false,route)} + + + + + + {'Sub Category'} + + {CustomPicker(props,SubCategories,'SubCategoryName','SubCategoryId','SubCategoryName','SubCategoryId',onselectionChange,{value:AddVisFormData.SubCategoryName},null,null,false,route)} + + + + + {ST.Brands} + + {CustomPicker(props,Brands,'BrandName','BrandId','BrandName','BrandId',onselectionChange,{value:AddVisFormData.BrandName},null,null,false,route)} + + + + + {ST.DisplayType} + {CustomPicker(props,DisplayList,'DisplayName','DisplayId','DisplayName','DisplayId',onselectionChange,{value:AddVisFormData.DisplayName},null,null,false,route)} + + + {isFromDateEnable==true && + + + {'From Date'} + + {FromDate} + {setShowDatePicker1(true);}}> + + + + {(ShowDatePicker1==true )&& + renderDatePicker(FromDate2,setFromDate2,setFromDate,'FromDate',setShowDatePicker1) + } + + } + {isToDateEnable==true && + + + {'To Date'} + + {ToDate} + {setShowDatePicker(true);}}> + + + + {(ShowDatePicker==true )&& + renderDatePicker(ToDate2,setToDate2,setToDate,"ToDate",setShowDatePicker) + } + + } + + + + {ST.Remark} + {onFormDataChange(val,'Remark','text');}} + /> + + + {!isKPIIREnable && + + + {ST.Image} + + + { (AddVisFormData.Image1Path=='' || AddVisFormData.Image1Path==null) ? + {openCamera('1')}}> + + : (AddVisFormData.Image1Path!='' && AddVisFormData.Image1Path!=null) ? + {OpenImgModal(AddVisFormData.Image1Path,'1')}}> + + : null + } + + + + + + + } + + {Add_AddVis()}}> + {ST.Add} + + + */} + + {/* + {ST.AddedVisibilities} + + { + AddVisibility.length>0 && + AddVisibility.map((item,index)=>{ + console.log(item); + return ( + + + + + {ST.Category+' :'} + {item.CategoryName} + + + {ST.SubCategory+' :'} + {item.SubCategoryName} + + + {ST.Brands+' :'} + {item.BrandName} + + + {ST.DisplayType+' :'} + {item.DisplayName} + + + {ST.Remark+' :'} + {item.Remark} + + + {'From Date :'} + {item.FromDate} + + + {'To Date :'} + {item.ToDate} + + + {!isKPIIREnable && + + {ST.Image} + {(item.Image1Path!=null && item.Image1Path!='') && } + } + {showRemoveConfirm(item,index)}}> + + + + + + + ); + }) + } + + */} + + } + + ) + } + + function _renderBtns() { + + let isUploadDisabled = isDataUploaded == 'U'; + let isSaveDisabled = (isDataUploaded == 'U' || isDataUploaded == 'P'); + + let colors1 = (isUploadDisabled ? [PageTheme.$tertiary_color, PageTheme.$tertiary_color] : [PageTheme.$secondary_color_light, PageTheme.$gradient2, PageTheme.$primary_color]); + let colors2 = (isSaveDisabled ? [PageTheme.$tertiary_color, PageTheme.$tertiary_color] : [PageTheme.$secondary_color_light, PageTheme.$gradient2, PageTheme.$primary_color]); + + return ( + + { onSubmitData() }} /> + + + ) + } + + function _renderHeader(currentIndex) { + return ( + + {`${(currentIndex + 1)}/${zoomImageUrl.length}`} + { setShow_zoomImage(false) }}> + + + + ) + } + + return ( + + {processing && } + + {_OpenCaptureImage_Modal()} + {ConfirmSaveAlert(props, showAlert, onSaveCancel, saveData)} + {ConfirmSaveAlert(props, showRemoveConfirm_M, () => { setshowRemoveConfirm_M(false) }, Remove_AddVis, ST.Doyoureallywanttoremovethisvisibility)} + {ConfirmSaveAlert(props, showRAllC_M, () => { setShowRAllC_M(false) }, onConfirmRemoveAll, ST.Doyoureallywanttoremoveallvisibilitydata)} + {_render_RetakePopup()} + {_render_UploadAlert()} + { UpdateShowCameraRef(false); getImage(imgData) }} showCamera={showCamera} onHideCamera={() => { UpdateShowCameraRef(false); }} /> + + + + {Object.keys(storeData).length > 0 && + + {_render_addVisFormTop()} + + } + {/* + {onSubmitData()}}/> + */} + {_renderBtns()} + + + + {show_zoomImage && + + null} + /> + + } + + ); +} + + + +export default connect(mapStateToProps, mapDispatchToProps)(AdditionalVisibilityIR_Only); \ No newline at end of file diff --git a/PerformicsSrc/src/screens/App.js b/PerformicsSrc/src/screens/App.js new file mode 100644 index 0000000..2a326a0 --- /dev/null +++ b/PerformicsSrc/src/screens/App.js @@ -0,0 +1,79 @@ +import React, { useEffect } from 'react'; +import { Platform, StyleSheet, View } from 'react-native'; +import Navigator from '../utils/navigations/Navigator'; +import { Provider } from 'react-redux'; +import store from '../store/configureStore'; +import requestUserPermission from '../pushNotification'; +import messaging from '@react-native-firebase/messaging'; +import crashlytics from '@react-native-firebase/crashlytics'; +import { gMap_key, Production } from '../constants/constants'; +import Geocoder from 'react-native-geocoding'; +import { VisionCameraProxy } from 'react-native-vision-camera'; +import { SafeAreaProvider } from 'react-native-safe-area-context'; +import { enableScreens } from 'react-native-screens'; +enableScreens(); + +// ✅ Initialize Google Maps API +Geocoder.init(gMap_key); +const App = () => { + if (!__DEV__) { + console.log = () => { }; + } + useEffect(() => { + console.log( + 'Hermes:', + !!global.HermesInternal, + 'FrameProcessors:', + VisionCameraProxy?.setFrameProcessor != null + ); + + if (Platform.OS === 'android') { + console.log('requestUserPermission-----'); + requestUserPermission('android'); + } else if (Platform.OS === 'ios') { + requestUserPermission('ios'); + } + // 🚫 Temporarily disable crashlytics if not imported + if (Production) { + crashlytics().setCrashlyticsCollectionEnabled(true); + } + }, []); + // 🚫 Disable messaging block if not using Firebase + useEffect(() => { + messaging().onMessage(async remoteMessage => { + console.log("📩 App Opened from Background:", remoteMessage); + }); + messaging().onNotificationOpenedApp(remoteMessage => { + console.log("📩 App Opened from Background:", remoteMessage); + }); + messaging().getInitialNotification().then(remoteMessage => { + if (remoteMessage) { + console.log("📩 App Opened from Quit State:", remoteMessage); + } + }); + messaging().setBackgroundMessageHandler(async remoteMessage => { + console.log("📩 Background Notification Received:", remoteMessage); + }); + }, []); + + return ( + + + + + + + + + ); +}; + +export default App; + +const styles = StyleSheet.create({ + rootFix: { + flex: 1, + elevation: 1, // forces Android to keep this as hardware layer + zIndex: 1, + }, +}); diff --git a/PerformicsSrc/src/screens/BackroomStock.js b/PerformicsSrc/src/screens/BackroomStock.js new file mode 100644 index 0000000..5e60688 --- /dev/null +++ b/PerformicsSrc/src/screens/BackroomStock.js @@ -0,0 +1,649 @@ +import React, { useState, useEffect, useRef } from 'react'; +import Container from '../components/container'; +import { useRoute } from '@react-navigation/native'; +import { globalStyles, customStyles, GetPageTheme } from "../styles/Global"; +import { StatusBar, Image, TextInput, View, Text, ScrollView, TouchableOpacity, Platform, PermissionsAndroid, FlatList, Alert, KeyboardAvoidingView, BackHandler, AppState, Keyboard } from 'react-native'; +import { ReactReduxContext, connect, useSelector, useDispatch } from 'react-redux'; +import { mapStateToProps, mapDispatchToProps } from '../reducers/contextProvider'; +import SQLite from 'react-native-sqlite-2'; +import { notify } from '../components/notify'; +import moment from 'moment'; +import { getDownloadJson, getKPIFields, marktext1, marktext2, validateNumber } from '../controller/functions'; +import { get_item, set_item, clear_item } from '../components/localStorage'; +import { version, sloganline, appname, testurl, db, colors_Arr } from '../constants/constants'; +import CustomHeader from '../components/customHeader'; +import { Card, Menu, Switch } from 'react-native-paper'; +import { AntDesign, MaterialCommunityIcons } from '../components/icons'; +import { stat } from 'react-native-fs'; +import CustomLoader from '../components/CustomLoader'; +import LinearGradient from 'react-native-linear-gradient'; +import { AppTables } from '../constants/tableConstants'; +import { SvgXml } from 'react-native-svg'; +import { launchCamera, launchImageLibrary, CameraOptions } from 'react-native-image-picker'; +import * as RNFS from 'react-native-fs'; +import GradientButton from '../components/gradientButton'; + +import cameraImg from '../assets/performics/camera_front_image.svg' +import addImg from '../assets/performics/add_image.svg'; +import CustomModal from '../components/CustomModal'; +import { ExitScreenAlert } from '../components/alert'; + + + +function BackroomStock(props) { + const route = useRoute(); + + // get all theme styles acc to current theme set + const PageTheme = GetPageTheme(props.DarkMode, route.name); + const customStyle = customStyles(props.DarkMode, route.name); + + const [processing, setProcessing] = useState(true); + const [loaderTitle, setLoaderTitle] = useState('loading...'); + const [isAdhocScreen, setIsAdhocScreen] = useState(false); + const [storeData, setStoreData] = useState({}); + const [currentMenu, setCurrentMenu] = useState({}); + const [brandData, setBrandData] = useState([]); + const [rerenderdata, setrerenderdata] = useState(0); + const [rerenderdata2, setrerenderdata2] = useState(0); + + const [SKUStockData, setSKUStockData] = useState([]); + const [showAlert, setShowAlert] = useState(false); + const [hasUnsavedChanges, setHasUnsavedChanges] = useState(false); + const [KPIFields, setKPIFields] = useState([]); + + const inputRefs = useRef({}); + + const hasUnsavedChangesRef = React.useRef(hasUnsavedChanges); + const WindowDataRef = React.useRef(SKUStockData); + const StoreIdRef = React.useRef(null); + const ScreenNameRef = React.useRef(''); + + // error field states + const [errorfield, setErrorField] = useState({}); + const [error, setError] = useState(false); + + const d1 = new Date(); + const d2 = moment(d1).format('MM/DD/YYYY'); + + useEffect(() => { + let params = props.route.params ? props.route.params : {}; + let storeData1 = params.storeData || {}; + let menu1 = params.menu || {}; + + let isAdhoc = params.isAdhoc || false; + setIsAdhocScreen(isAdhoc); + setStoreData(storeData1); + setCurrentMenu(menu1); + + StoreIdRef.current = storeData1.StoreId + ScreenNameRef.current = menu1.ScreenName + getData(storeData1, menu1); + + const AppStateSubscription = AppState.addEventListener('change', (pro) => { _handleAppStateChange(pro) }); + const unsubscribe = props.navigation.addListener('beforeRemove', onBeforeRemove); + + return function cleanup() { + AppStateSubscription.remove(); + return unsubscribe; + }; + + }, []); + + const _handleAppStateChange = async (nextAppState) => { + if (nextAppState == 'background' && hasUnsavedChangesRef.current == true) { + let newData = { + storeBGData: WindowDataRef.current, + menuName: ScreenNameRef.current, + StoreId1: StoreIdRef.current, + visiteDate: d2 + } + let WindowsStr = JSON.stringify(newData) + await set_item('storeData', WindowsStr); + } + } + + useEffect(() => { + const unsubscribe = props.navigation.addListener('beforeRemove', onBeforeRemove); + return unsubscribe; + }, [hasUnsavedChanges]); + + function onBeforeRemove(e) { + if (hasUnsavedChanges == true) { + e.preventDefault(); // Prevent default behavior of leaving the screen + onRemoveScreen(e); + } + else { + return; + } + } + + function BgUnsavedChanges(val) { + hasUnsavedChangesRef.current = val + setHasUnsavedChanges(val); + } + + function BgWindowData(val) { + WindowDataRef.current = val + setSKUStockData(val); + } + + function onRemoveScreen(e) { + Alert.alert( + "", + "Do you really want to exit the screen?", + [ + { + text: "Cancel", + onPress: () => { }, + style: "cancel" + }, + { + text: "OK", onPress: async () => { + // setHasUnsavedChanges(false); + BgUnsavedChanges(false) + await clear_item('storeData') + props.navigation.dispatch(e.data.action); + } + } + ] + ); + } + + async function getData(storeData1, menu1) { + try { + let { StoreId, ChainId, StateId, StoreTypeId, StoreClassId, StoreCategoryId } = storeData1; + + let AllKPIFields = await getKPIFields(menu1); + setKPIFields(AllKPIFields); + let storeBGData1 = [], bgStoreJson = {}, isBgDataExists = false; + let windData = await get_item('storeData') + if (windData != null && windData != '') { + let StoreJson = JSON.parse(windData) + let { storeBGData, menuName, StoreId1, visiteDate } = StoreJson + if (storeBGData.length > 0 && menuName == menu1.ScreenName && StoreId1 == StoreId && visiteDate == d2) { + isBgDataExists = true; + storeBGData1 = storeBGData; + bgStoreJson = StoreJson + // setSKUStockData(storeBGData); + BgUnsavedChanges(true) + BgWindowData(storeBGData); + } + } + + await db.transaction(async function (txn) { + let join = ' INNER join Product_Master p on c.CategoryId=p.CategoryId '; + let join2 = ` INNER join Mapping_ProductAssortmentStorewise mp on p.ProductId=mp.ProductId `; + let q = `SELECT DISTINCT c.CategoryId,c.CategoryName from Master_Category c ${join} ${join2} where mp.StoreId= '${StoreId}' order by p.CategorySequence`; + // mp.MSL is removed due to duplication of category + + console.log("cate_query", q) + await txn.executeSql(q, [], async function (txn2, txnres) { + if (txnres.rows.length > 0) { + let arr = []; + for (var i = 0; i < txnres.rows.length; i++) { + let data = txnres.rows.item(i); + arr.push(data); + if (i == txnres.rows.length - 1) { + // setBrandData(arr); + getSKU(arr, storeData1, bgStoreJson, isBgDataExists, menu1); + } + } + + } + }, function (txnE, txnerr) { console.log(txnerr); },); + + }); + } catch (err) { + console.log(err); + } + } + + async function getSKU(brands = [], storeData1 = {}, bgStoreJson = {}, isBgDataExists = false, menu1 = {}) { + try { + let { StoreId, ChainId, StateId, StoreTypeId, StoreClassId, StoreCategoryId } = storeData1; + await db.transaction(async function (txn) { + var allSKUData = []; + await Promise.all( + brands.map(async (item, index) => { + console.log("cat", item) + let join = ` inner join Mapping_ProductAssortmentStorewise m on p.ProductId=m.ProductId `; + let join2 = ` inner join Master_Category mc on mc.CategoryId=p.CategoryId `; + //let sku_q2 = `select distinct p.ProductName,p.ProductId,p.BrandName,p.BrandId,m.MSL,m.ArticleCode from Product_Master p ${join} ${join2} where m.StoreId='${StoreId}' and p.CategoryId = ${item?.CategoryId} and (CompanyId='1' or CompanyId=1) order by p.ProductSequence`; + let sku_q2 = ` SELECT DISTINCT p.ProductName,p.ProductId,p.BrandName,p.BrandId,m.MSL,m.ArticleCode FROM Product_Master p ${join} ${join2} + WHERE m.StoreId='${StoreId}' ${item?.CategoryId !== undefined ? `AND p.CategoryId = ${item.CategoryId}` : ""} AND (CompanyId='1' OR CompanyId=1) ORDER BY p.ProductSequence`; + + + var sku_q = ''; + let seletlist = ` distinct PRODUCT as ProductName,PRODUCT_ID as ProductId,MSL,ARTICLE_CODE,STOCK`; + if (item.CategoryId == 0) { + sku_q = `SELECT ${seletlist} FROM ${AppTables.CHILD_BACK_OF_STORE} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' `; + } else { + sku_q = `SELECT ${seletlist} FROM ${AppTables.CHILD_BACK_OF_STORE} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' and CATEGORY_ID='${item.CategoryId}'`; + } + + return await txn.executeSql(sku_q, [], async function (txn2, txnres) { + if (txnres.rows.length > 0) { + console.log("cateChilld_query", sku_q) + let arr = []; + for (var i = 0; i < txnres.rows.length; i++) { + let data = txnres.rows.item(i); + inputRefs.current['input1_' + item.CategoryId + '_' + data.ProductId] = ''; + arr.push(data); + + let defData = { 'CategoryId': item.CategoryId, 'ProductId': data.ProductId, 'BackroomStock': data.STOCK, }; + allSKUData.push(defData); + + if (i == txnres.rows.length - 1) { + item['skulist'] = arr; + brands[index] = item; + if (index == brands.length - 1) { + if (!isBgDataExists) { + BgWindowData(allSKUData); + } + + // setSKUStockData(allSKUData); + setBrandData(brands); + // setrerenderdata(!rerenderdata); + setProcessing(false); + } + return item; + } + } + } + else { + return await txn.executeSql(sku_q2, [], async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + console.log("cateChilld_query2", sku_q2) + let arr = []; + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + inputRefs.current['input1_' + item.CategoryId + '_' + data.ProductId] = ''; + arr.push(data); + if (i == (txnres2.rows.length - 1)) { + item['skulist'] = arr; + brands[index] = item; + if (index == brands.length - 1) { + //console.log('setBrands: 1-', brands); + setBrandData(brands); + setProcessing(false); + } + return item; + } + } + } + else { + return item; + } + }, function (txnE, txnerr) { console.log(txnerr); setProcessing(false); return item; },); + } + }, function (txnE, txnerr) { console.log(txnerr); setProcessing(false); return item; },); + return item; + }) + ).then((res) => { + + }); + }); + } catch (err) { + console.log(err); + } + } + + + async function submitBackroomStock() { + let isvalid = await validate(); + if (isvalid) { + Keyboard.dismiss(); + setShowAlert(true); + } + } + + async function saveData() { + // setHasUnsavedChanges(false); + BgUnsavedChanges(false) + setShowAlert(false); + setLoaderTitle('Saving Data...'); + setProcessing(true); + try { + let { StoreId, ChainId, StateId, StoreTypeId } = storeData; + await db.transaction(async function (txn) { + + let q = `DELETE FROM ${AppTables.HEADER_BACK_OF_STORE} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' `; + let q2 = `DELETE FROM ${AppTables.CHILD_BACK_OF_STORE} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' `; + + // remove old data + await txn.executeSql(q, [], async function (txn2, txnres) { + console.log('stock data deleted'); + }, function (txnE, txnerr) { console.log(txnerr); },); + + await txn.executeSql(q2, [], async function (txn2, txnres) { + console.log('stock header data deleted'); + }, function (txnE, txnerr) { console.log(txnerr); },); + + let seq_q = ` select seq from sqlite_sequence where name="${AppTables.HEADER_BACK_OF_STORE}" `; + await txn.executeSql(seq_q, [], async function (txn2, txnres) { + if (txnres.rows.length > 0) { + let data = txnres.rows.item(0); + let seq = data.seq; + insertData(seq); + } + else { + insertData(0); + } + }, function (txnE, txnerr) { console.log(txnerr); insertData(0); },); + + + }); + } catch (err) { + console.log(err); + } + } + + async function insertData(seq = 0) { + try { + console.log(seq); + let { StoreId, ChainId, StateId, StoreTypeId } = storeData; + + await db.transaction(async function (txn) { + var values = '', stock_values = ''; + for (var i = 0; i < brandData.length; i++) { + seq++; + let catIndex = i; + let item = brandData[catIndex]; + values += values != '' ? ' , ' : ''; + values += ` ('${StoreId}','${d2}','${item.MSL}','${item.CategoryName}','${item.CategoryId}','${d2}') `; + let skulist = item['skulist'] || []; + + for (var j = 0; j < skulist.length; j++) { + let skuItem = skulist[j]; + let { BrandId, BrandName, MSL, ArticleCode, ProductId, ProductName } = skulist[j]; + ArticleCode = ArticleCode != null && ArticleCode != undefined && ArticleCode != 'undefined' && ArticleCode != '' ? ArticleCode : '' + + stock_values += stock_values != '' ? ' , ' : ''; + let allSKUData = SKUStockData; + const skud_index = allSKUData.findIndex(ci => ci.CategoryId == item.CategoryId && ci.ProductId == skuItem.ProductId); + const skud = skud_index >= 0 ? (allSKUData[skud_index] || {}) : {}; + + let BRStock = skud['BackroomStock'] != null && skud['BackroomStock'] != 'undefined' ? skud['BackroomStock'] : ''; + stock_values += ` ('${seq}','${StoreId}','${d2}','${item.CategoryName}','${item.CategoryId}','${ProductName}','${ProductId}','${MSL}','${ArticleCode}','${BRStock}','${d2}') `; + } + } + + let add_StockHdr = `INSERT INTO ${AppTables.HEADER_BACK_OF_STORE} (STORE_ID,VISIT_DATE,MSL,CATEGORY,CATEGORY_ID,ADDED_DATE) VALUES ${values} `; + let add_Stock = `INSERT INTO ${AppTables.CHILD_BACK_OF_STORE} (COMMON_ID,STORE_ID,VISIT_DATE,CATEGORY,CATEGORY_ID,PRODUCT,PRODUCT_ID,MSL,ARTICLE_CODE,STOCK,ADDED_DATE) VALUES ${stock_values} `; + await txn.executeSql(add_StockHdr, [], async function (txn2, txnres) { + console.log('stock header added'); + await txn.executeSql(add_Stock, [], async function (txn2, txnres) { + console.log('stock added'); + notify('Stock updated successfully'); + setProcessing(false); + await clear_item('storeData') + props.navigation.goBack(); + }, function (txnE, txnerr) { console.log(txnerr); setProcessing(false); notify('Cannot add stock') },); + }, function (txnE, txnerr) { console.log(txnerr); setProcessing(false); notify('Cannot add stock') },); + }); + } catch (err) { + console.log(err); + } + } + + + async function validate() { + let isValid = true; + + let isBRStockMandIndex = KPIFields.findIndex(i => i.KPIFieldName == 'BackRoomStockMandatory') + let isBRStockMandKPIObj = isBRStockMandIndex >= 0 ? KPIFields[isBRStockMandIndex] : {}; + let isBRStockMandEnable = isBRStockMandIndex >= 0 ? isBRStockMandKPIObj['KPIFieldEnable'] : true; + + if ((isBRStockMandEnable == 1 || isBRStockMandEnable == 'true')) { + await Promise.all( + brandData.map(async (item, index) => { + if (isValid) { + let skulist = item.skulist || []; + let errorobj = { 'EF_brand': item }; + if (skulist.length > 0) { + await Promise.all( + skulist.map(async (skuItem, skuIndex) => { + if (isValid) { + let skuData = SKUStockData.find(ci => ci.CategoryId == item.CategoryId && ci.ProductId == skuItem.ProductId) || {}; + errorobj['EF_product'] = skuItem; + let error_bid = item.CategoryId + let error_pid = skuItem.ProductId + let show_errorH = false, error_HInputKey = ''; + + + if ((isBRStockMandEnable == 1 || isBRStockMandEnable == 'true') && skuData.BackroomStock !== 0 && (skuData.BackroomStock == null || skuData.BackroomStock == '')) { + notify('Please enter backroom stock for ' + skuItem.ProductName, 'SHORT'); + isValid = false; + show_errorH = true, error_HInputKey = 'input1_'; + } else if ((isBRStockMandEnable == 1 || isBRStockMandEnable == 'true') && skuData.BackroomStock !== 0 && skuData.BackroomStock !== '' && !validateNumber(skuData.BackroomStock, 'numeric', false)) { + notify('Please enter whole numbers only for ' + skuItem.ProductName + ' Backroom-Stock', 'SHORT'); + isValid = false; + show_errorH = true, error_HInputKey = 'input1_'; + } else { + + } + + if (show_errorH) { + errorobj['EF_InputKey'] = error_HInputKey; + setErrorField(errorobj) + setError(true) + let refIn1 = inputRefs.current[error_HInputKey + error_bid + '_' + error_pid]; + refIn1.focus(); + } + } + }) + ); + } + } + }) + ); + } + console.log('isValid:', isValid); + return isValid; + } + + // async function focusToNext(cat,index,sku,sku_index,inputType='1'){ + // console.log('focusToNext',index); + // let data=brandData; + // let ccat_index=index; + // let skulist=cat.skulist || []; + // if(sku_index==skulist.length-1){ // if last subcategory element + // //then move to next category + // console.log('move to next cat',ccat_index,data.length) + // if(ccat_index==data.length-1){ + // return; + // } + // else{ + // ccat_index+=1; + // console.log('move to next cat n:',ccat_index) + // let cat1=data[ccat_index]; + // let skulist1=cat1.skulist || []; + // if(skulist1.length>0){ + // let sku1=skulist1[0]; + // let refIn1=inputRefs.current['input1_'+cat1.CategoryId+'_'+sku1.ProductId]; + // console.log('move to next cat refIn1:','input1_'+cat1.CategoryId+'_'+sku1.ProductId) + // refIn1.focus(); + // } + // } + // } + // else{ + // // move to next subcategory + // let sku1=skulist[sku_index+1]; + // let refIn1=inputRefs.current['input1_'+cat.CategoryId+'_'+sku1.ProductId]; + // refIn1.focus(); + // } + + // } + + async function focusToNext(cat, sku, type = '1') { + + let activeKey = ''; + let arr = Object.keys(inputRefs.current); + + activeKey = 'input' + type + '_' + cat.CategoryId + '_' + sku.ProductId; + + let activeIndex = arr.indexOf(activeKey); + if (activeIndex < arr.length - 1) { + let nextKey = arr[++activeIndex] + let nextRef = inputRefs.current[nextKey]; + console.log("nextKey", nextKey, nextRef, inputRefs.current[nextKey]) + nextRef.focus(); + } + else { + return + } + } + + + function onStockValChange(item, skuItem, val, key, type = '') { + setError(false) + setErrorField({}) + console.log("type---", type) + if (val != '') { + let isValid = validateNumber(val, type); + if (!isValid) { + return; + } + } + + let allSKUData = SKUStockData; + let defData = { 'CategoryId': item.CategoryId, 'ProductId': skuItem.ProductId }; + const skud_index = allSKUData.findIndex(i => i.CategoryId == item.CategoryId && i.ProductId == skuItem.ProductId); + const skud = skud_index >= 0 ? (allSKUData[skud_index] || defData) : defData; + skud[key] = val; + + skud_index >= 0 ? allSKUData[skud_index] = skud : allSKUData.push(skud); + // setSKUStockData(allSKUData); + BgWindowData(allSKUData); + BgUnsavedChanges(true) + // setHasUnsavedChanges(true); + setrerenderdata(!rerenderdata); + } + + function _render_Alert() { + return ( + + + { setShowAlert(false) }}> + Cancel + + { saveData() }}> + Yes + + + + ) + } + + return ( + + {processing && } + + {_render_Alert()} + + + {Object.keys(storeData).length > 0 && + + + { + const cat = item; + const catIndex = index; + + // get error field brand id + let EF_brand = errorfield.EF_brand != null ? errorfield.EF_brand : {}; + let error_bid = EF_brand.CategoryId || ''; + return ( + + + + {item.CategoryName} + + + + { + { + const skus = item; + const sku_index = index; + let thisCatSkuData_i = SKUStockData.findIndex(i => i.CategoryId == cat.CategoryId && i.ProductId == skus.ProductId); + let thisCatSkuData = thisCatSkuData_i >= 0 ? (SKUStockData[thisCatSkuData_i] || {}) : {}; + let BackroomStock = thisCatSkuData.BackroomStock != null ? thisCatSkuData.BackroomStock : ''; + + // get error field product id + let EF_product = errorfield.EF_product != null ? errorfield.EF_product : {}; + let error_pid = EF_product.ProductId || ''; + let EF_InputKey = errorfield.EF_InputKey; + let show_errorhere = error_bid == cat.CategoryId && error_pid == skus.ProductId; + + let errorStyle_ST = (error && show_errorhere && EF_InputKey == 'input1_' ? customStyle.stk_inptSTyle_error : {}); + + return ( + + {/* {console.log("skuss-->", skus)} */} + {/* {skus.ProductName} */} + {/* {skus.ArticleCode && skus.ArticleCode.trim() !== "" ? `${skus.ProductName} - ${skus.ArticleCode}` : skus.ProductName} */} + + + {skus.ArticleCode && skus.ArticleCode.trim() !== "" + ? `${skus.ProductName} [${skus.ArticleCode}]` + : skus.ARTICLE_CODE && skus.ARTICLE_CODE.trim() !== "" + ? `${skus.ProductName} [${skus.ARTICLE_CODE}]` + : skus.ProductName} + + + + + + Backroom Stock + { inputRefs.current['input1_' + cat.CategoryId + '_' + skus.ProductId] = reff; }} + style={[customStyle.openStk_prd_inputStyle, customStyle.openStk_prd_flex_inputStyle, errorStyle_ST]} + placeholder="" + autoComplete='off' + placeholderTextColor={PageTheme.$placeholder_color} + value={(BackroomStock + '' || '')} + keyboardType='number-pad' + returnKeyType={(Platform.OS === 'ios') ? 'done' : 'next'} + blurOnSubmit={false} + onSubmitEditing={() => { focusToNext(cat, skus, '1') }} + onChangeText={(val) => { onStockValChange(cat, skus, val, 'BackroomStock', 'numeric') }} + /> + + + + + + ) + }} /> + } + + + ); + }} + /> + + } + + { submitBackroomStock() }} /> + + + + + ); +} + + + +export default connect(mapStateToProps, mapDispatchToProps)(BackroomStock); \ No newline at end of file diff --git a/PerformicsSrc/src/screens/BannerMoreInfo.js b/PerformicsSrc/src/screens/BannerMoreInfo.js new file mode 100644 index 0000000..a2685e1 --- /dev/null +++ b/PerformicsSrc/src/screens/BannerMoreInfo.js @@ -0,0 +1,404 @@ +import React, { useState, useEffect } from 'react'; +import Container from '../components/container'; +import { useRoute } from '@react-navigation/native'; +import { customStyles, GetPageTheme } from '../styles/Global'; +import { + View, + Text, TouchableOpacity, + Platform, + Image, + FlatList, + ScrollView, + Dimensions, +} from 'react-native'; +import { + connect, +} from 'react-redux'; +import { mapStateToProps, mapDispatchToProps } from '../reducers/contextProvider'; +import moment from 'moment'; +import { get_item } from '../components/localStorage'; +import { + db, TrainingContentFolderPath, +} from '../constants/constants'; +import CustomHeader from '../components/customHeader'; +import CustomLoader from '../components/CustomLoader'; +import NoDataComponent from '../components/NoDataComponent'; +import LinearGradient from 'react-native-linear-gradient'; +import { createMaterialTopTabNavigator } from "@react-navigation/material-top-tabs"; +import { createContact, openWebBrowser, UploadData2 } from '../controller/functions'; +import BadgeModal from '../components/BadgeModal'; +import { getMethodName } from '../constants/methodNames'; +import { AntDesign, Entypo } from '../components/icons'; +import * as RNFS from "react-native-fs"; +import FileViewer from "react-native-file-viewer"; +import ImageViewer from 'react-native-image-zoom-viewer'; +import { notify } from '../components/notify'; + +const Tab = createMaterialTopTabNavigator(); +const screenWidth = Dimensions.get("window").width; + +function ReportsMenu(props) { + const route = useRoute(); + const ST = props.StaticText || {}; + // get all theme styles acc to current theme set + const PageTheme = GetPageTheme(props.DarkMode, route.name); + const customStyle = customStyles(props.DarkMode, route.name); + const [processing, setProcessing] = useState(false); + const [paramsState, setParamsState] = useState({}); + ///Badge + const [showBadge, setShowBadge] = useState(false); + const [finalImage, setFinalImage] = useState(null); + ///trainingsss + const [TrainingData, setTrainingData] = useState([]); + const [webviewurlT, setWebviewurlT] = useState(''); + const [show_zoomImage, setShow_zoomImage] = useState(false); + + + + const d1 = new Date(); + const d2 = moment(d1).format('MM/DD/YYYY'); + const tabData = [ + { id: 1, title: "Banners" }, + { id: 2, title: "Training docs" }, + ]; + + useEffect(() => { + const params = route.params ?? props.route?.params ?? {}; + setParamsState(params?.bannerdetail || []); + getData() + }, []); + + async function getData() { + try { + let List = []; + await db.transaction(async function (txn) { + let q = `Select * from Master_DetailerContent`; + await txn.executeSql(q, [], async function (txn2, txnres2) { + console.log('txnres2.rows.length:', txnres2.rows.length) + if (txnres2.rows.length > 0) { + for (let i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + List.push(data) + } + console.log("traininnn", List) + setTrainingData(List) + } + }, function (txnE, txnerr) { console.log(txnerr); },); + }); + } catch (err) { + console.log(err); + } + } + + const DownloadContent = async (item) => { + let filename = item.FName + let path = (item && item.MediaType && item.MediaType.toLowerCase() == "pdf") ? "/pdf/" : (item && item.MediaType && item.MediaType.toLowerCase() == "image") ? "/images/" : (item && item.MediaType && item.MediaType.toLowerCase() == "html") ? "html" : "/video/" + if (path == 'html') { + let contentURL = item.FilePath ? item.FilePath + item.FName : ''; + props.navigation.navigate('WebViewScreen', { 'url': contentURL, storeData: storeData }) + } else { + const fileDir = TrainingContentFolderPath + path; + const filePath = TrainingContentFolderPath + path + filename; + let contentURL = item.FilePath ? item.FilePath + item.FName : ''; + let contentFileExist = await RNFS.exists(filePath) + if (contentFileExist) { + setWebviewurlT(filePath) + if (path == "/pdf/") { + FileViewer.open(filePath) + } else if (path == "/video/") { + props.navigation.navigate('VideoScreen', { filePath: filePath }) + } else { + setShow_zoomImage(true) + } + } else { + setProcessing(true) + let fileExist = await RNFS.exists(fileDir) + if (fileExist) { + console.log("file is exists", fileDir) + } else { + await RNFS.mkdir(fileDir).then(() => console.log("Dir is created- ", fileDir)) + } + RNFS.writeFile(filePath, '').then(async (create_res) => { + console.log('filecreated') + const download = await RNFS.downloadFile({ + fromUrl: contentURL, + toFile: filePath, + progress: (res) => { + let bytes = res.bytesWritten; + let dataDownloadedinMB = (bytes / (1024 * 1024)).toFixed(2); + }, + begin: (res) => { + console.log('on download begin'); + }, + }); + download.promise.then(async (result) => { + setProcessing(false); + setWebviewurlT(filePath) + if (result.statusCode == 404) { + notify('Sorry! Cannot download file as file does not exists on server!'); + await RNFS.unlink(filePath); + } else { + notify('File is downloaded!'); + if (path == "/pdf/") { + FileViewer.open(filePath) + } else if (path == "/video/") { + props.navigation.navigate('VideoScreen', { filePath: filePath }) + } else { + setShow_zoomImage(true) + } + } + }); + }).catch((err) => { + console.log('Error while creating:', err); + setProcessing(false); + RNFS.unlink(filePath); + notify('Sorry! Cannot download file'); + }) + } + } + } + + function _renderHeader() { + return ( + + { console.log('tsth'); setShow_zoomImage(false) }}> + + + + ) + } + + function DynamicScreen({ route }) { + const handleBannerNavigation = (item, props) => { + const beforeQuestionMark = + item?.NoticeLink_FullPage?.split("?")[0] ?? ""; + console.log("banner_item", beforeQuestionMark); + if (item?.FullPageTarget === "deeplink") { + if (beforeQuestionMark === "reports") { + props.navigation.navigate('ReportsMenu'); + } else if ( + (beforeQuestionMark === "gyancast" || beforeQuestionMark === "gyancasts") && + (props.Gyancast === 1 || props.Gyancast) + ) { + props.navigation.navigate('Gyancasts', { Popup: true }); + } else if (beforeQuestionMark === "gyanbuddy" && props.Chatbot) { + const hours = new Date().getHours(); + const isWithinTime = hours >= 8 && hours < 20; + if (isWithinTime) { + props.navigation.navigate('ChatScreen'); + } else { + notify("⏰ Gyan Buddy is available between 8:00 AM and 8:00 PM only."); + } + } else if (beforeQuestionMark === "training") { + props.navigation.navigate('TrainingMenu'); + } + } else if (item?.FullPageTarget === "html-webbrowser") { + openWebBrowser(item?.NoticeLink_FullPage); + } else if (item?.FullPageTarget === "frame") { + NB_RetailDay(); + } else if (item?.FullPageTarget === "contact") { + createContact(beforeQuestionMark); + } else { + props.navigation.navigate('Bannerdetail', { imagedesc: item }); + } + }; + + const renderBanner = ({ item }) => ( + handleBannerNavigation(item, props)} + activeOpacity={0.9} + style={{ + marginHorizontal: 5, + marginVertical: 5, + borderRadius: 14, + overflow: "hidden", + backgroundColor: "#fff", + elevation: 3, + }} + > + + + ); + + if (route.name === "Banners") { + return ( + + item.NoticeBoardId.toString()} + renderItem={renderBanner} + contentContainerStyle={{ paddingVertical: 10 }} + showsVerticalScrollIndicator={false} + /> + + + ); + } + + return ( + + {TrainingData && TrainingData.map((item, i) => ( + DownloadContent(item)} + key={i}> + + {item.Topic} + + + + Description + {item.Description} + + + + + Content Type + + { + item.MediaType != null && item.MediaType.toLowerCase() == "pdf" ? : item.MediaType != null && item.MediaType.toLowerCase() == "Image" ? + console.log("click")} /> : item.MediaType != null && item.MediaType.toLowerCase() == "html" ? + : + + } + {item.MediaType} + + + + + + + ))} + + ); + } + + const handleSaveBadge = async (uri) => { + setFinalImage(uri); + setProcessing(true); + let loginInfo = await get_item('loginInfo'); + const loginDetails = JSON.parse(loginInfo); + const today = moment(new Date()).format('MM/DD/YYYY'); + let user_answers = []; + let ans_obj = { "Visit_Date": today, "UserId": loginDetails.UserId, "Project_code": projectCode }; + user_answers.push(ans_obj); + let post_data = { + "MID": "0", + "Keys": "RetailDay_Data", + "JsonData": JSON.stringify(user_answers), + "UserId": loginDetails.UserId + } + const url = props.baseurl + getMethodName(METHODS.UPLOADJSON_METHOD); + console.log('RetailDay upload ', url, post_data); + await UploadData2(url, post_data) + .then(async (res) => { + setProcessing(false); + console.log(res); + if (res.success == false) { + return + } + }) + .catch(err => { + console.log('onPage Team error', err); + }); + }; + + function NB_RetailDay() { + setShowBadge(true) + } + return ( + <> + + {processing && } + + + + {!props.isDataDownloaded && } + {props.isDataDownloaded == true && ( + + {tabData.map((item) => ( + ( + + {item.title} + + ) + }} + component={DynamicScreen} + initialParams={{ tabId: item.id }} + listeners={{ + tabPress: () => { + console.log("Tab clicked:", item.title); + }, + }} + /> + ))} + + + + )} + + + + {show_zoomImage && + + null} + /> + + } + + + { + setTimeout(() => { + setShowBadge(false); + }, 100); // 10 seconds + }} + onSave={handleSaveBadge} + /> + + ); +} + +export default connect(mapStateToProps, mapDispatchToProps)(ReportsMenu); diff --git a/PerformicsSrc/src/screens/Bannerdetail.js b/PerformicsSrc/src/screens/Bannerdetail.js new file mode 100644 index 0000000..2077317 --- /dev/null +++ b/PerformicsSrc/src/screens/Bannerdetail.js @@ -0,0 +1,196 @@ +import { View, ScrollView, Alert, } from 'react-native' +import React, { useState, useEffect, useRef } from 'react' +import Container from '../components/container'; +import { useRoute } from '@react-navigation/native'; +import { customStyles, GetPageTheme } from "../styles/Global"; +import LinearGradient from 'react-native-linear-gradient'; +import { WebView } from 'react-native-webview' +import { mapStateToProps, mapDispatchToProps } from '../reducers/contextProvider'; +import { connect } from 'react-redux' +import CustomHeader from '../components/customHeader'; +import Share from 'react-native-share'; +import RNFS from 'react-native-fs'; + +function Bannerdetail(props) { + const route = useRoute(); + const [currentItem, setcurrentItem] = useState({}); + const PageTheme = GetPageTheme(props.DarkMode, route.name); + const customStyle = customStyles(props.DarkMode, route.name); + let showwebview = false; + const webViewRef = useRef(null); + + useEffect(() => { + let params = props.route.params != null ? props.route.params : {}; + console.log("params", params); + let currentitem1 = params.imagedesc != null ? params.imagedesc : {}; + console.log('onrender bannaer ', currentitem1); + let ext = currentitem1.NoticeLink_FullPage.split('.').pop(); + console.log('ext', ext) + if (ext == 'html') { + showwebview = true; + } else { + showwebview = false; + } + setcurrentItem(currentitem1) + }, []); + + const injectedJS = ` + // Create global share function + window.nativeShare = function(options) { + window.ReactNativeWebView.postMessage(JSON.stringify({ + type: 'SHARE', + data: options + })); + }; + + // Helper function to convert image to base64 + window.imageToBase64 = function(img) { + const canvas = document.createElement('canvas'); + canvas.width = img.naturalWidth || img.width; + canvas.height = img.naturalHeight || img.height; + const ctx = canvas.getContext('2d'); + ctx.drawImage(img, 0, 0); + return canvas.toDataURL('image/png'); + }; + + true; // Required for iOS + `; + + const handleWebViewMessage = async (event) => { + try { + const message = JSON.parse(event.nativeEvent.data); + console.log("event----------", event) + if (message.type === 'SHARE') { + await handleShare(message.data); + } + } catch (error) { + console.error('Error handling message:', error); + } + }; + + const handleShare = async (shareData) => { + try { + const { type, title, message, url, image, images } = shareData; + let shareOptions = { + title: title || 'Share', + message: message || '', + }; + // Handle different share types + switch (type) { + case 'text': + // Share text and/or URL + if (url) { + shareOptions.url = url; + } + await Share.open(shareOptions); + break; + + case 'image': + // Share single image + if (image) { + const base64Data = image.split(',')[1]; // Remove data:image/png;base64, prefix + const filePath = `${RNFS.CachesDirectoryPath}/share_image_${Date.now()}.png`; + await RNFS.writeFile(filePath, base64Data, 'base64'); + shareOptions.url = `file://${filePath}`; + shareOptions.type = 'image/png'; + await Share.open(shareOptions); + // Cleanup after sharing + setTimeout(() => { + RNFS.unlink(filePath).catch(() => { }); + }, 1000); + } + break; + + case 'multiple_images': + // Share multiple images + if (images && images.length > 0) { + const filePaths = await Promise.all( + images.map(async (imageData, index) => { + const base64Data = imageData.split(',')[1]; + const filePath = `${RNFS.CachesDirectoryPath}/share_image_${Date.now()}_${index}.png`; + await RNFS.writeFile(filePath, base64Data, 'base64'); + return `file://${filePath}`; + }) + ); + + shareOptions.urls = filePaths; + shareOptions.type = 'image/png'; + await Share.open(shareOptions); + // Cleanup + setTimeout(() => { + filePaths.forEach(path => { + const cleanPath = path.replace('file://', ''); + RNFS.unlink(cleanPath).catch(() => { }); + }); + }, 1000); + } + break; + + case 'image_with_text': + // Share image with text/URL + if (image) { + const base64Data = image.split(',')[1]; + const filePath = `${RNFS.CachesDirectoryPath}/share_image_${Date.now()}.png`; + await RNFS.writeFile(filePath, base64Data, 'base64'); + shareOptions.url = `file://${filePath}`; + shareOptions.type = 'image/png'; + // Add URL as message if provided + if (url) { + shareOptions.message = `${message || ''}\n${url}.trim()`; + } + + await Share.open(shareOptions); + setTimeout(() => { + RNFS.unlink(filePath).catch(() => { }); + }, 1000); + } + break; + + default: + // Default text share + await Share.open(shareOptions); + } + + } catch (error) { + console.log('Share cancelled or error:', error); + } + }; + + return ( + + + + + + { + !showwebview && + { + console.error('WebView error:', syntheticEvent.nativeEvent); + }} + onLoadStart={() => console.log('WebView loading...')} + onLoadEnd={() => console.log('WebView loaded successfully')} + onLoadProgress={({ nativeEvent }) => { + console.log('Load progress:', nativeEvent.progress); + }} + + /> + } + + + + + + ) +} +export default connect(mapStateToProps, mapDispatchToProps)(Bannerdetail) \ No newline at end of file diff --git a/PerformicsSrc/src/screens/BeatPlan.js b/PerformicsSrc/src/screens/BeatPlan.js new file mode 100644 index 0000000..795a2fb --- /dev/null +++ b/PerformicsSrc/src/screens/BeatPlan.js @@ -0,0 +1,632 @@ +import React, {useState, useEffect, useRef} from 'react'; +import Container from '../components/container'; +import {useRoute} from '@react-navigation/native'; +import {globalStyles, customStyles, GetPageTheme} from '../styles/Global'; +import { StatusBar,Image,TextInput,View,Text,ScrollView,TouchableOpacity,Platform,PermissionsAndroid,FlatList,} from 'react-native'; +import {ReactReduxContext,connect,useSelector,useDispatch,} from 'react-redux'; +import {mapStateToProps, mapDispatchToProps} from '../reducers/contextProvider'; +import SQLite from 'react-native-sqlite-2'; +import {notify} from '../components/notify'; +import moment from 'moment'; +import {getDownloadJson,DownloadData, getDownloadJson1} from '../controller/functions'; +import {get_item, set_item, clear_item} from '../components/localStorage'; +import {version,sloganline,appname,testurl,db,} from '../constants/constants'; +import CustomHeader from '../components/customHeader'; +import CustomLoader from '../components/CustomLoader'; +import LinearGradient from 'react-native-linear-gradient'; +import { FontAwesome, Fontisto, Ionicons, MaterialCommunityIcons } from '../components/icons'; +import NoDataComponent from '../components/NoDataComponent'; +import WebView from 'react-native-webview'; +import { AntDesign, Entypo } from "../components/icons"; +import { ConfirmSaveAlert } from '../components/alert'; +import { AppTables } from '../constants/tableConstants'; +import { getMethodName, METHODS } from '../constants/methodNames'; +import { getBeatDownloadTask, getPostData, insert_TaskDownloadedData } from '../components/downloadTasks'; +import DownloadDataModal from '../components/downloadDataModal'; + + +function BeatPlan(props) { + const route = useRoute(); + const ST=props.StaticText || {}; + // get all theme styles acc to current theme set + const PageTheme = GetPageTheme(props.DarkMode, route.name); + const customStyle = customStyles(props.DarkMode, route.name); + const globalStyle = globalStyles(props.DarkMode, route.name); + + + const [processing, setProcessing] = useState(false); + const [loaderTitle, setLoaderTitle] = useState(); + const [BeatList, setBeatList] = useState([]); + const [showAlert, setShowAlert] = useState(false); + const [selectedBeat, setSelectedBeat] = useState({}); + const [isDisabled, setIsDisabled] = useState(false); + const [IsDownloadStart, setIsDownloadStart] = useState(false); + const [downloadingText, setDownloadingText] = useState(''); + const [dowloadedCount, setDowloadedCount] = useState(-1); + const [totalCount, setTotalCount] = useState(0); + const [AllTableQueries, setAllTableQueries] = useState([]); + const [DownloadTasks, setDownloadTasks] = useState([]); + const [TaskResponse, setTaskResponse] = useState([]); + // const [IsPJPMandatory, setIsPJPMandatory] = useState(true); + + + + const d2=moment().format("MM/DD/YYYY"); + + useEffect(() => { + setLoaderTitle(ST.Loading+'...') + getData(); + + props.navigation.addListener('focus', () => {getData();}); + + return function cleanup() { + props.navigation.removeListener('focus', () => {getData();}); + }; + + }, []); + + useEffect(() => { + console.log('dowloadedCount change:',dowloadedCount); + if(dowloadedCount<=totalCount && IsDownloadStart==true){ + executeTasks(); + } + else{ + setIsDownloadStart(false); + notify(ST.DataDownloaded,'SHORT'); + } + }, [dowloadedCount]); + + useEffect(() => { + if(IsDownloadStart && TaskResponse!=null){ + console.log('increment dowloadedCount changed'); + let count=dowloadedCount+1; + setDowloadedCount(count); + } + }, [TaskResponse]); + + // async function checkData(){ + // let projectInfo=await get_item('projectInfo'); + // let projectDetails=JSON.parse(projectInfo); + // let isPJPMand=projectDetails.PJPMandatory!=null?projectDetails.PJPMandatory:true; + // setIsPJPMandatory(isPJPMand); + // } + + async function getData(){ + try { + let List=[]; + await db.transaction(async function (txn) { + let q=`Select m.*,b.ROUTE_ID as InsertedRouteId from Master_Route m left outer join ${AppTables.BEAT_PLAN} b on m.RouteId=b.ROUTE_ID and VISIT_DATE='${d2}' `; + await txn.executeSql(q,[],async function (txn2, txnres2) { + if(txnres2.rows.length>0){ + let isfound=false; + for(let i=0;i { + console.log('res from upload selected Beat',res); + if(res!=null && res.InsertUserDailyRoute!=null && res.InsertUserDailyRoute[0].success!=false){ + let isUpdated=await updateSelectedBeat(); + if(isUpdated==true){ + setProcessing(false); + beforeExecuteTasks(); + } + } + else{ + setProcessing(false); + notify('Cannot Update Beat!'); + } + }) + .catch(err => { + console.log('onPage Team error', err); + }); + + + + } + catch(err){ + console.log('err:',err); + } + + } + + async function gotoStore(){ + props.navigation.navigate('StoreList',{'isAdhoc': false,'isBeat':true}); + } + + async function updateSelectedBeat(){ + + let {RouteId,RouteName}=selectedBeat; + return await new Promise((resolve,reject)=>{ + db.transaction(async function (txn) { + let q=`Select * from ${AppTables.BEAT_PLAN} where ROUTE_ID='${RouteId}' and VISIT_DATE='${d2}' `; + await txn.executeSql(q,[],async function (txn2, txnres2) { + if(txnres2.rows.length>0){ + let isUpdated=await updateBeatStatus(); + resolve(true); + }else{ + // insert selected Beat + let values=`('${RouteId}','${RouteName}','1','${d2}','${d2}')`; + let in_q=`INSERT INTO ${AppTables.BEAT_PLAN} (ROUTE_ID,ROUTE_NAME,STATUS,VISIT_DATE,ADDED_DATE) values ${values} ` + await txn.executeSql(in_q,[],async function (txn3, txnres3) { + console.log('inserted selected route'); + let isUpdated=await updateBeatStatus(); + resolve(true); + },function (txnE,txnerr) { console.log(txnerr);resolve(false); },); + } + },function (txnE,txnerr) { console.log(txnerr);resolve(false); },); + }); + }).then((val)=>{ + return val; + }).catch((err)=>{ + return false; + }) + } + + async function updateBeatStatus(){ + + let {RouteId,RouteName}=selectedBeat; + return await new Promise((resolve,reject)=>{ + db.transaction(async function (txn) { + let q=`update Master_Route set TodayRoute='Y' where RouteId='${RouteId}' `; + await txn.executeSql(q,[],async function (txn2, txnres2) { + resolve(true); + },function (txnE,txnerr) { console.log(txnerr);resolve(false); },); + }); + }).then((val)=>{ + return val; + }).catch((err)=>{ + return false; + }) + } + + + // download functionality start + async function startDownload() { + console.log('startDownload'); + setIsDownloadStart(true); + setDowloadedCount(0); + } + + + async function beforeExecuteTasks(){ + console.log('beforeExecuteTasks:'); + let DownloadTasks1=await getBeatDownloadTask(); + console.log('All BeatDownloadTask',DownloadTasks1.length); + setDownloadTasks(DownloadTasks1); + setTotalCount((DownloadTasks1.length-1)); + startDownload(); + } + + async function executeTasks(){ + console.log('executeTasks'); + let {RouteId,RouteName}=selectedBeat; + // var DownloadTasks=getDownloadDataTask(); + let loginInfo = await get_item('loginInfo'); + const loginDetails = JSON.parse(loginInfo); + var currentIndex=dowloadedCount; + + console.log('currentIndex:',currentIndex); + if(currentIndex>=0){ + let dk_data=DownloadTasks[currentIndex]; + console.log('dk_data',dk_data); + let key=dk_data.DownloadKey || ''; + setDownloadingText(key); + + var data =key=='JourneyPlan_RouteWise'? + { + Downloadtype:key, + Username: loginDetails.UserId, + Param1: RouteId, + Param2: Platform.OS=="ios"?"iOS":"Android", + }: await getPostData(DownloadTasks,currentIndex); + + var url=props.baseurl+getMethodName(METHODS.DOWNLOADJSON_METHOD); + console.log(url,data); + await getDownloadJson1(url, data) + .then(async(res) => { + let isAdded=await updateTaskRes(res,currentIndex,1); + if(isAdded==true){ + if(currentIndex==DownloadTasks.length-1){ + console.log('last found all downloaded'); + onDownloadComplete(); + } + else{ + console.log('all downloaded but last not found '); + } + + } + else{ + console.log('Cannot download all Data'); + } + + }) + .catch(err => { + console.log('onPage Team error', err); + }); + } + + } + + async function onDownloadComplete(){ + let count=dowloadedCount+1; + setIsDownloadStart(false); + setDowloadedCount(count); + notify(ST.DataDownloaded,'SHORT'); + props.navigation.navigate('StoreList',{'isAdhoc': false,'isBeat':true,'BeatData':selectedBeat}); + } + + async function onTaskError(){ + notify(ST.Cannotdownloaddata); + setIsDownloadStart(false); + } + + async function onNoData(data=[],shouldStop=false,tbname=''){ + + if(tbname!=''){ + db.transaction(function(txn) { + // delete all today data + txn.executeSql(`delete from ${tbname} where 1=1`,[],function(txn1,txnres){ + console.log('deleted all data for '+tbname); + },function(Etxn,err){ + console.log('err:',err); + }); + }); + } + + if(shouldStop==true){ + let msg=ST.Nodatafoundfor+tbname+''; + if(tbname=='JourneyPlan_RouteWise'){ + msg=ST.Youhavenojourneyplanfortoday; + } + notify(msg); + setIsDownloadStart(false); + } + else{ + setTaskResponse(data); + } + } + + async function updateTaskRes(res,index,count){ + // var DownloadTasks=getDownloadDataTask(); + + const todate=new Date(); + const today=moment(todate).format("MM/DD/YYYY"); + let d2 =today; + let dk_data=DownloadTasks[index]; + let key=dk_data.DownloadKey || ''; + let IsMandatory=dk_data.IsMandatory=='true' || dk_data.IsMandatory==1?true:false; + + return new Promise(async (resolve,reject)=>{ + switch(key){ + + case 'JourneyPlan_RouteWise': { + if (res.JourneyPlan_RouteWise) { + let data_arr = res.JourneyPlan_RouteWise || []; + + var values=[]; + data_arr.map((data_obj)=>{ + let {MID,ChannelId,StoreId,StoreCode,EmpId,VisitDate,ChainId,ChainName, StoreName, Address, Location, Landmark, CityId, CityName, StateId, StateName, RegionId, StoreTypeId, StoreType, Pincode, Latitude, Longitude, Phone, Mobile, ContactPerson, Email, UploadStatus, GeoTag, GeoFenceRadius, ExpiryStock,InTime,OutTime,CameraAllow,AddVisiAllow,LastVisitDate,Score,MinTimeTaken,StoreCategoryId,StoreCategory,StoreClassId,StoreClass,TaxType,GSTno,GSTImage}=data_obj; + values.push(` ('${MID}', '${ChannelId}','${StoreId}','${StoreCode}','${EmpId}', '${VisitDate}','${ChainId}','${ChainName}','${StoreName}', '${Address}','${Location}','${Landmark}','${CityId}', '${CityName}','${StateId}','${StateName}','${RegionId}', '${StoreTypeId}', '${StoreType}', '${Pincode}', '${Latitude}', '${Longitude}', '${Phone}', '${Mobile}', '${ContactPerson}', '${Email}', '${UploadStatus}', '${GeoTag}', '${GeoFenceRadius}', '${ExpiryStock}','${InTime}','${OutTime}','${CameraAllow}','${AddVisiAllow}','${LastVisitDate}','${Score}','${MinTimeTaken}','${StoreCategoryId}','${StoreCategory}','${StoreClassId}','${StoreClass}','${TaxType}','${GSTno}','${GSTImage}')`); + }); + + var all_vals=values.join(','); + + var sql_stmnt=`INSERT INTO JourneyPlan_RouteWise(MID, ChannelId, StoreId, StoreCode, EmpId, VisitDate, ChainId, ChainName, StoreName, Address, Location, Landmark, CityId, CityName, StateId, StateName, RegionId, StoreTypeId, StoreType, Pincode, Latitude, Longitude, Phone, Mobile, ContactPerson, Email, UploadStatus, GeoTag, GeoFenceRadius, ExpiryStock,InTime,OutTime,CameraAllow, AddVisiAllow,LastVisitDate,Score,MinTimeTaken,StoreCategoryId,StoreCategory,StoreClassId,StoreClass,TaxType,GSTno,GSTImage) + values ${all_vals}`; + + db.transaction(function(txn) { + // delete all today data + txn.executeSql(`delete from JourneyPlan_RouteWise where 1=1`,[],function(txn1,txnres){ + // insert or refresh all today data + txn.executeSql(sql_stmnt,[],function(txn1,txnres){ + console.log('JourneyPlan_RouteWise added'); + setTaskResponse(data_arr); + resolve(true); + },function(Etxn,err){ + console.log('err:',err); + resolve(true); + }); + },function(Etxn,err){ + console.log('err:',err); + resolve(true); + }); + }); + + } + else if(res!=null && typeof(res)=='object' && res[0]!=null && (res.success==false || (res[0]!=null && res[0].Result!=null))){ + console.log('No data found'); + await onNoData(['No data for JourneyPlan_RouteWise'],true,'JourneyPlan_RouteWise'); + resolve(true); + } + else{ + true?await onTaskError(): await onNoData(['No data for JourneyPlan_RouteWise']); + resolve(true); + } + break; + } + case 'Mapping_ProductAssortmentStorewise':{ + let colList=['StoreId', 'ProductId', 'MSL','MBQ']; + let i_res=await insert_TaskDownloadedData(res,'Mapping_ProductAssortmentStorewise',colList,props); + console.log('i_res:',i_res); + let data_arr=i_res['data_arr']; + setTaskResponse(data_arr); + let r=i_res['r']; + console.log('r:',r); + resolve(r); + break; + } + case 'Mapping_StoreWindow':{ + let colList=['StoreId', 'WindowDefinitionId']; + let i_res=await insert_TaskDownloadedData(res,'Mapping_StoreWindow',colList,props); + console.log('i_res:',i_res); + let data_arr=i_res['data_arr']; + setTaskResponse(data_arr); + let r=i_res['r']; + console.log('r:',r); + resolve(r); + break; + } + case 'Mapping_WindowQuestion':{ + let colList=['WindowDefinitionId', 'WindowQuestionId']; + let i_res=await insert_TaskDownloadedData(res,'Mapping_WindowQuestion',colList,props); + console.log('i_res:',i_res); + let data_arr=i_res['data_arr']; + setTaskResponse(data_arr); + let r=i_res['r']; + console.log('r:',r); + resolve(r); + break; + } + + case 'Mapping_StorePOSM':{ + let colList=['StoreId', 'POSMDefinitionId']; + let i_res=await insert_TaskDownloadedData(res,'Mapping_StorePOSM',colList,props); + console.log('i_res:',i_res); + let data_arr=i_res['data_arr']; + setTaskResponse(data_arr); + let r=i_res['r']; + console.log('r:',r); + resolve(r); + break; + } + + case 'Mapping_POSMQuestion':{ + let colList=['POSMDefinitionId', 'POSMQuestionId']; + let i_res=await insert_TaskDownloadedData(res,'Mapping_POSMQuestion',colList,props); + console.log('i_res:',i_res); + let data_arr=i_res['data_arr']; + setTaskResponse(data_arr); + let r=i_res['r']; + console.log('r:',r); + resolve(r); + break; + } + + case 'Mapping_StoreShelfTalker':{ + let colList=['StoreId', 'StDefinitionId']; + let i_res=await insert_TaskDownloadedData(res,'Mapping_StoreShelfTalker',colList,props); + console.log('i_res:',i_res); + let data_arr=i_res['data_arr']; + setTaskResponse(data_arr); + let r=i_res['r']; + console.log('r:',r); + resolve(r); + break; + } + + case 'Mapping_ShelfTalkerQuestion':{ + let colList=['StDefinitionId', 'StQuestionId']; + let i_res=await insert_TaskDownloadedData(res,'Mapping_ShelfTalkerQuestion',colList,props); + console.log('i_res:',i_res); + let data_arr=i_res['data_arr']; + setTaskResponse(data_arr); + let r=i_res['r']; + console.log('r:',r); + resolve(r); + break; + } + + case 'Mapping_StoreVisibility':{ + let colList=['StoreId', 'VisibilityDefinitionId']; + let i_res=await insert_TaskDownloadedData(res,'Mapping_StoreVisibility',colList,props); + console.log('i_res:',i_res); + let data_arr=i_res['data_arr']; + setTaskResponse(data_arr); + let r=i_res['r']; + console.log('r:',r); + resolve(r); + break; + } + + case 'Mapping_VisibilityQuestion':{ + let colList=['VisibilityDefinitionId', 'VisibilityQuestionId']; + let i_res=await insert_TaskDownloadedData(res,'Mapping_VisibilityQuestion',colList,props); + console.log('i_res:',i_res); + let data_arr=i_res['data_arr']; + setTaskResponse(data_arr); + let r=i_res['r']; + console.log('r:',r); + resolve(r); + break; + } + case 'Mapping_StorePromotion':{ + let colList=['StoreId', 'PromoDefinitionId']; + let i_res=await insert_TaskDownloadedData(res,'Mapping_StorePromotion',colList,props); + console.log('i_res:',i_res); + let data_arr=i_res['data_arr']; + setTaskResponse(data_arr); + let r=i_res['r']; + console.log('r:',r); + resolve(r); + break; + } + case 'Mapping_PromotionQuestion':{ + let colList=['PromoDefinitionId', 'PromoQuestionId']; + let i_res=await insert_TaskDownloadedData(res,'Mapping_PromotionQuestion',colList,props); + console.log('i_res:',i_res); + let data_arr=i_res['data_arr']; + setTaskResponse(data_arr); + let r=i_res['r']; + console.log('r:',r); + resolve(r); + break; + } + case 'Mapping_StoreShareOfShelf':{ + let colList=['StoreId', 'SOSDefinitionId']; + let i_res=await insert_TaskDownloadedData(res,'Mapping_StoreShareOfShelf',colList,props); + console.log('i_res:',i_res); + let data_arr=i_res['data_arr']; + setTaskResponse(data_arr); + let r=i_res['r']; + console.log('r:',r); + resolve(r); + break; + } + case 'Mapping_DisplayChecklist':{ + let colList=['DisplayId', 'ChecklistId']; + let i_res=await insert_TaskDownloadedData(res,'Mapping_DisplayChecklist',colList,props); + console.log('i_res:',i_res); + let data_arr=i_res['data_arr']; + setTaskResponse(data_arr); + let r=i_res['r']; + console.log('r:',r); + resolve(r); + break; + } + case 'Mapping_Survey':{ + let colList=['StoreId', 'SurveyId']; + let i_res=await insert_TaskDownloadedData(res,'Mapping_Survey',colList,props); + console.log('i_res:',i_res); + let data_arr=i_res['data_arr']; + setTaskResponse(data_arr); + let r=i_res['r']; + console.log('r:',r); + resolve(r); + break; + } + case 'Mapping_StoreCategory':{ + let colList=['StoreId', 'CategoryDefinitionId']; + let i_res=await insert_TaskDownloadedData(res,'Mapping_StoreCategory',colList,props); + console.log('i_res:',i_res); + let data_arr=i_res['data_arr']; + setTaskResponse(data_arr); + let r=i_res['r']; + console.log('r:',r); + resolve(r); + break; + } + case 'Mapping_CategoryQuestion':{ + let colList=['CategoryDefinitionId', 'CategoryQuestionId']; + let i_res=await insert_TaskDownloadedData(res,'Mapping_CategoryQuestion',colList,props); + console.log('i_res:',i_res); + let data_arr=i_res['data_arr']; + setTaskResponse(data_arr); + let r=i_res['r']; + console.log('r:',r); + resolve(r); + break; + } + + + + } + }).catch((err)=>{ + console.log('error in downloading',err); + return false; + }); + + } + + + // download functionality end + + + function onRoutePress(item){ + setSelectedBeat(item); + setShowAlert(true); + } + + function onCancel(){ + setSelectedBeat({}); + setShowAlert(false); + } + + + return ( + + {processing && } + + {(IsDownloadStart && dowloadedCount<=totalCount) && } + {ConfirmSaveAlert(props,showAlert,onCancel,selectBeatplan,'Select this Beat Plan!')} + + + { !props.isDataDownloaded && } + + Beats + + + {BeatList.length>0 && + BeatList.map((item,i)=>{ + let isSelected=selectedBeat.RouteId==item.RouteId; + return ( + { + // (isSelected)?gotoStore(): + onRoutePress(item); + }} key={i}> + + {item.RouteName} + + + ) + }) + } + + + + + ); +} + +export default connect(mapStateToProps, mapDispatchToProps)(BeatPlan); diff --git a/PerformicsSrc/src/screens/BreakTime.js b/PerformicsSrc/src/screens/BreakTime.js new file mode 100644 index 0000000..77465ce --- /dev/null +++ b/PerformicsSrc/src/screens/BreakTime.js @@ -0,0 +1,946 @@ +import React, { useState, useEffect, useRef } from 'react'; +import Container from '../components/container'; +import { useRoute } from '@react-navigation/native'; +import { globalStyles, customStyles, GetPageTheme } from "../styles/Global"; +import { StatusBar, Image, TextInput, View, Text, ScrollView, TouchableOpacity, Platform, PermissionsAndroid, FlatList, Alert, Animated, AppState, Keyboard } from 'react-native'; +import { ReactReduxContext, connect, useSelector, useDispatch } from 'react-redux'; +import { mapStateToProps, mapDispatchToProps } from '../reducers/contextProvider'; +import SQLite from 'react-native-sqlite-2'; +import { notify } from '../components/notify'; +import moment from 'moment'; +import { getDownloadJson, getKPIFields, marktext1, marktext2, resizeImage, restore_ImageWithMetaData, validateNumber } from '../controller/functions'; +import { get_item, set_item, clear_item } from '../components/localStorage'; +import { version, sloganline, appname, testurl, db, colors_Arr, common_ImagePath, ImageFolderPath } from '../constants/constants'; +import CustomHeader from '../components/customHeader'; +import { Card, Menu, Switch } from 'react-native-paper'; +import { AntDesign, Entypo, Feather, FontAwesome, Fontisto, MaterialCommunityIcons } from '../components/icons'; +import { stat } from 'react-native-fs'; +import CustomLoader from '../components/CustomLoader'; +import LinearGradient from 'react-native-linear-gradient'; +import { AppTables } from '../constants/tableConstants'; +import { SvgXml } from 'react-native-svg'; +import { launchCamera, launchImageLibrary, CameraOptions } from 'react-native-image-picker'; +import * as RNFS from 'react-native-fs'; +import GradientButton from '../components/gradientButton'; + +import cameraImg from '../assets/performics/camera_front_image.svg' +import addImg from '../assets/performics/add_image.svg'; +import CustomModal from '../components/CustomModal'; +import { Q_getpaidvisibility } from '../constants/ConstantQueries'; +import { Picker } from '@react-native-picker/picker'; +import { ConfirmSaveAlert } from '../components/alert'; +import ModalSelector from 'react-native-modal-selector' +import { CustomPicker } from '../components/CustomPicker'; +import CustomCamera from '../components/Camera'; +import DateTimePicker from '@react-native-community/datetimepicker'; + +import CameraImg3 from '../assets/performics/camera_tick.svg'; +import CameraImg2 from '../assets/performics/camera_icon.svg'; +import CameraImg4 from '../assets/performics/camera_asterisk.svg'; +import CameraImg5 from '../assets/image/astrickcamera.svg'; + +// Feather + +function BreakTime(props) { + const route = useRoute(); + const ST = props.StaticText || {}; + // get all theme styles acc to current theme set + const PageTheme = GetPageTheme(props.DarkMode, route.name); + const customStyle = customStyles(props.DarkMode, route.name); + const animatedChoice = useRef(new Animated.Value(0)).current; + + const [processing, setProcessing] = useState(true); + const [loaderTitle, setLoaderTitle] = useState(); + const [isAdhocScreen, setIsAdhocScreen] = useState(false); + const [storeData, setStoreData] = useState({}); + const [StoreCameraAllow, setStoreCameraAllow] = useState(true); + + const [ShowDatePicker1, setShowDatePicker1] = useState(false); + const [ShowDatePicker, setShowDatePicker] = useState(false); + const [currentMenu, setCurrentMenu] = useState({}); + const [brandData, setBrandData] = useState([]); + const [rerenderdata, setrerenderdata] = useState(0); + const [rerenderdata2, setrerenderdata2] = useState(0); + // const [rerenderdata2, setrerenderdata2]= useState(false); + + const [AddVisibility, setAddVisibility] = useState([]); + const [AddVisFormData, setAddVisFormData] = useState({}); + const [isAddVisPresent, setIsAddVisPresent] = useState(0); + const [showAlert, setShowAlert] = useState(false); + const [Categories, setCategories] = useState([]); + const [BreakTypes, setBreakTypes] = useState([]); + const [SubCategories, setSubCategories] = useState([]); + const [Brands, setBrands] = useState([]); + const [DisplayList, setDisplayList] = useState([]); + const [hasUnsavedChanges, setHasUnsavedChanges] = useState(false); + const [showCamera, setShowCamera] = useState(false); + const [clickImageType, setClickImageType] = useState('1'); + const [toRemoveId, setToRemoveId] = useState(''); + const [toRemoveItem, setToRemoveItem] = useState({}); + const [showRemoveConfirm_M, setshowRemoveConfirm_M] = useState(false); + const [showRAllC_M, setShowRAllC_M] = useState(false); + const [KPIFields, setKPIFields] = useState([]); + const [dateValue, setDateValue] = useState(''); + const [FromDate, setFromDate] = useState(''); + const [FromDate2, setFromDate2] = useState(new Date()); + + const [ToDate, setToDate] = useState(''); + const [ToDate2, setToDate2] = useState(new Date()); + + const [SelectedImg, setSelectedImg] = useState(''); + const [showModal, setShowModal] = useState(false); + const [reCapImgModalObj, setReCapImgModalObj] = useState({}); + const [showImageSaveOp, setShowImageSaveOp] = useState(true); + const [ImgMadCount, setImgMadCount] = useState({ img1: 0, img2: 0 }); + const [reportData, setReportData] = useState([]); + const [IsDisable, setIsDisable] = useState(false); + + const hasUnsavedChangesRef = React.useRef(hasUnsavedChanges); + const WindowDataRef = React.useRef(AddVisibility); + const StoreIdRef = React.useRef(null); + const ScreenNameRef = React.useRef(''); + const VisFormDataRef = React.useRef(AddVisFormData); + const isAddVisPresentRef = React.useRef(isAddVisPresent); + const d1 = new Date(); + const d2 = moment(d1).format('MM/DD/YYYY'); + + + useEffect(() => { + setLoaderTitle(ST.Loading + '...') + let params = props.route.params ? props.route.params : {}; + let storeData1 = params.storeData || {}; + let menu1 = params.menu || {}; + let cameraAllow = storeData1.CameraAllow == 'true' || storeData1.CameraAllow == 1 ? true : false; + setStoreCameraAllow(cameraAllow); + + let isAdhoc = params.isAdhoc || false; + + StoreIdRef.current = storeData1.StoreId + ScreenNameRef.current = menu1.ScreenName + setIsAdhocScreen(isAdhoc); + setStoreData(storeData1); + setCurrentMenu(menu1); + + console.log("storeData1---test--", storeData1) + getData(storeData1, menu1); + + const AppStateSubscription = AppState.addEventListener('change', (pro) => { _handleAppStateChange(pro) }); + props.navigation.addListener('beforeRemove', onBeforeRemove); + + return function cleanup() { + AppStateSubscription.remove(); + props.navigation.removeListener('beforeRemove', onBeforeRemove); + }; + }, []); + + const _handleAppStateChange = async (nextAppState) => { + console.log('getDAta-----bg-unsaved1') + if (nextAppState == 'background' && hasUnsavedChangesRef.current == true) { + console.log('getDAta-----bg-unsaved1', hasUnsavedChangesRef) + let newData = { + storeBGData: WindowDataRef.current, + menuName: ScreenNameRef.current, + StoreId1: StoreIdRef.current, + AddFormData: VisFormDataRef.current, + isVisPresent: isAddVisPresentRef.current, + visiteDate: d2 + } + let WindowsStr = await JSON.stringify(newData) + console.log('getDAta-----bg-unsaved2', WindowsStr) + // await set_item('storeData',WindowsStr); + } + } + + useEffect(() => { + props.navigation.removeListener('beforeRemove', onBeforeRemove); + props.navigation.addListener('beforeRemove', onBeforeRemove); + }, [hasUnsavedChanges]); + + + useEffect(() => { + props.navigation.removeListener('beforeRemove', onBeforeRemove); + props.navigation.addListener('beforeRemove', onBeforeRemove); + }, [showCamera]); + + function BgUnsavedChanges(val) { + hasUnsavedChangesRef.current = val + setHasUnsavedChanges(val); + } + + function BgWindowData(val) { + WindowDataRef.current = val + setAddVisibility(val); + } + + function BgAddVisFormData(val) { + VisFormDataRef.current = val + setAddVisFormData(val); + } + + function BgIsAddVisPresent(val) { + isAddVisPresentRef.current = val + setIsAddVisPresent(val); + } + + + function onBeforeRemove(e) { + if (showCamera == true) { + e.preventDefault(); + setShowCamera(false); + } + else { + if (hasUnsavedChanges == true) { + e.preventDefault(); // Prevent default behavior of leaving the screen + onRemoveScreen(e); + } + else { + return; + } + } + } + function onRemoveScreen(e) { + Alert.alert( + "", + ST.Doyoureallywanttoexitthescreen, + [ + { + text: ST.Cancel, + onPress: () => { }, + style: "cancel" + }, + { + text: ST.OK, onPress: async () => { + BgUnsavedChanges(false) + await clear_item('storeData') + setHasUnsavedChanges(false); + props.navigation.dispatch(e.data.action); + } + } + ] + ); + } + + async function getData(storeData1, menu1) { + try { + let { StoreId, ChainId, StateId, StoreTypeId } = storeData1; + + let AllKPIFields = await getKPIFields(menu1); + setKPIFields(AllKPIFields); + + + let isFromDateIndex = AllKPIFields.findIndex(i => i.KPIFieldName == 'ShowFromDate'); + let isFromDateKPIObj = isFromDateIndex >= 0 ? AllKPIFields[isFromDateIndex] : {}; + let isFromDateEnable = isFromDateIndex >= 0 ? isFromDateKPIObj['KPIFieldEnable'] : true; + + + let TestData = [{ + BreakName: "Tea", + BreakID: 2, + MaxNumber: 2, + MinNumber: 1, + }, { + BreakName: "Walk", + BreakID: 3, + MaxNumber: 2, + MinNumber: 1, + }] + // setBreakTypes(TestData) + + await db.transaction(async function (txn) { + + // Master_Break(BreakId,Break_Name,Minimum,Maximum) + let q = `Select * from Master_Break `; + await txn.executeSql(q, [], async function (txn2, txnres2) { + + if (txnres2.rows.length > 0) { + let arr = []; + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + let { BreakId, Break_Name, Minimum, Maximum } = data + let newobj = { + BreakName: Break_Name, + BreakID: BreakId, + MaxNumber: Maximum, + MinNumber: Minimum, + } + arr.push(newobj); + if (i == txnres2.rows.length - 1) { setBreakTypes(arr); console.log("newobj-------", arr) } + } + } + }, function (txnE, txnerr) { console.log(txnerr); },); + + let q3 = `Select * from ${AppTables.BREAKTIME} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' `; + await txn.executeSql(q3, [], async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + let arr = [], storeBGData1 = [], bgStoreJson = {}; + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + // STORE_ID ,VISIT_DATE ,BREAKNAME ,BREAKID ,STARTTIME ,ENDTIME ,MAXNUMBER ,MINNUMBER ,ADDED_DATE + // let {BreakName,BreakID,uniqueBreakId,StartTime,EndTime}=data; + let { STORE_ID, VISIT_DATE, BREAKNAME, BREAKID, STARTTIME, UNIQUEBREAKID, ENDTIME, MAXNUMBER, MINNUMBER, ADDED_DATE } = data + let newObj = { BreakName: BREAKNAME, BreakID: BREAKID, uniqueBreakId: UNIQUEBREAKID, StartTime: STARTTIME, EndTime: ENDTIME } + + console.log("ENDTIME--fsd--------", ENDTIME) + if (ENDTIME == "" || ENDTIME == null || ENDTIME == undefined) { + let formData = AddVisFormData + formData["BreakName"] = BREAKNAME + formData["StartTime"] = STARTTIME + formData["uniqueBreakId"] = UNIQUEBREAKID + + BgAddVisFormData(formData) + props.set_AllKPIDisable(true) + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + + arr.push(newObj); + console.log("BREAKTIME-------", arr) + if (i == txnres2.rows.length - 1) { setReportData(arr); setProcessing(false); } + + } + } + setProcessing(false) + }, function (txnE, txnerr) { console.log(txnerr); setProcessing(false); },); + + }); + } catch (err) { + console.log(err); + } + } + + + function cancelImage() { + // setImage1(''); + setSelectedImg(''); + setReCapImgModalObj({}) + setShowModal(false); + } + + async function getImage(imgdata) { + if (typeof imgdata == 'object' && imgdata.errorCode == 'camera_unavailable') { + notify(ST.Cameraunavailable); + } + else if (typeof imgdata == 'object' && imgdata.uri != null) { + const img = imgdata; + const imgurl = img.uri, imgWidth = img.width, imgHeight = img.ExtendedHeight; + let isImgFromGallery = img.fromGallery != null ? img.fromGallery : false; + let picture_clickedd = isImgFromGallery == true ? img.datetime : new Date(); + ////change by jeevanp + let picture_clicked_time = moment(picture_clickedd).format('MM-DD-YYYY HH:mm:ss') + let picture_clicked_time_for_pic_name = moment(picture_clickedd).format('MMDDYYYY_HHmmss') + + console.log("time", picture_clicked_time); + console.log("time1", picture_clicked_time_for_pic_name); + ////change by jeevanp + let calculate_tym_date_for_filename = picture_clicked_time_for_pic_name; + let calculate_tym_date_over_img = picture_clicked_time; + + let filename = storeData.StoreId + '_' + (props.UserId || '') + '_BreakTimeImg-' + calculate_tym_date_for_filename + '.jpg'; + console.log(filename, "file_name"); + + const mark_text1 = calculate_tym_date_over_img; + const mark_text2 = 'Store Name:' + storeData.StoreName + ' | Store Id:' + storeData.StoreId + ' | User Id:' + storeData.EmpId + ' | Image Type: Break Time ' + ' | Date:' + calculate_tym_date_over_img; + console.log(mark_text1 + "\n" + mark_text2, "mark_text2"); + + + let addvisdata = AddVisFormData; + let image_key = 'Image1'; + let image_path_key = 'Image1Path'; + addvisdata[image_key] = filename; + + + let imagePath = `${ImageFolderPath + currentMenu.ScreenName}/${filename}`; + RNFS.copyFile(imgurl, imagePath) + .then(async (resn) => { + // render data with clicked image + let uri = 'file://' + imagePath; + addvisdata[image_path_key] = uri; + + setSelectedImg(uri) + BgAddVisFormData(addvisdata) + BgUnsavedChanges(true) + setrerenderdata2(!rerenderdata2); + // add metdata then resize image and restored back to the imagePath + let restore_data = { "destFilePath": imagePath, "imgurl": imgurl, imgWidth, imgHeight, mark_text1, mark_text2 } + let is_restored = await restore_ImageWithMetaData(restore_data, imgdata); + console.log("image restored:", is_restored); + }) + .catch(err => { + console.log('ERROR: image file write failed!!!'); + console.log(err.message, err.code); + }); + + } + } + + + async function openCamera(type = '1') { + console.log('openCamera'); + setClickImageType(type); + setShowCamera(true); + } + + async function onSubmitData() { + let isvalid = await validate(); + if (isvalid) { + Keyboard.dismiss(); + setShowAlert(true); + } + } + + async function saveData(formData, type = "StartTime") { + // setHasUnsavedChanges(false); + BgUnsavedChanges(false) + setShowAlert(false); + // setProcessing(true); + try { + console.log("formData----------", formData) + let { StoreId } = storeData; + await db.transaction(async function (txn) { + // STORE_ID ,VISIT_DATE ,BREAKNAME ,BREAKID ,STARTTIME ,ENDTIME ,MAXNUMBER ,MINNUMBER ,ADDED_DATE + let { BreakName, BreakID, uniqueBreakId, StartTime, EndTime } = formData; + var values = '', add_data = ''; + + // MAXNUMBER ,MINNUMBER + let isFromDateIndex = BreakTypes.findIndex(i => i.BreakID == BreakID); + let isFromDateKPIObj = isFromDateIndex >= 0 ? BreakTypes[isFromDateIndex] : {}; + let MaxCount = isFromDateIndex >= 0 ? isFromDateKPIObj['MinNumber'] : 0; + let MinCount = isFromDateIndex >= 0 ? isFromDateKPIObj['MaxNumber'] : 0; + console.log("isFromDateKPIObj----------------", isFromDateKPIObj) + + if (type == 'StartTime') { + values = ` ('${StoreId}','${uniqueBreakId}','${d2}','${BreakName}','${BreakID}','${StartTime}','${d2}','${MaxCount}','${MinCount}') `; + add_data = `INSERT INTO ${AppTables.BREAKTIME} (STORE_ID ,UNIQUEBREAKID,VISIT_DATE ,BREAKNAME ,BREAKID ,STARTTIME ,ADDED_DATE,MAXNUMBER ,MINNUMBER ) VALUES ${values} `; + } else if (type == 'EndTime') { + add_data = `UPDATE ${AppTables.BREAKTIME} SET ENDTIME='${EndTime}' WHERE STORE_ID='${StoreId}' and UNIQUEBREAKID='${uniqueBreakId}' and VISIT_DATE='${d2}'` + } + + console.log("add_data-----------sda", add_data) + await txn.executeSql(add_data, [], async function (txn2, txnres) { + console.log('av added'); + notify("added successfully", 'SHORT'); + // clear store data in local storage to avoiding re-set data for the store + clear_item('storeData') + + }, function (txnE, txnerr) { console.log(txnerr); setProcessing(false); notify("Cannot add Time") },); + + }); + } catch (err) { + console.log(err); + } + } + + + async function DisableCon(label) { + + let isValid = true; + // for(var i=0;i i.BreakName == label); + let isFromDateKPIObj = isFromDateIndex >= 0 ? BreakTypes[isFromDateIndex] : {}; + let MaxCount = isFromDateIndex >= 0 ? isFromDateKPIObj['MaxNumber'] : 0; + let item = label + + let count = 0 + for (var i = 0; i < reportData.length; i++) { + let recordItem = reportData[i] + if (label == recordItem.BreakName) { + count++ + } + } + console.log("MaxCount<=count--------", MaxCount, "<=", count, MaxCount < count) + if (MaxCount <= count) { + isValid = false; + notify(ST.Pleaseaddfirst, 'SHORT'); + } + // } + console.log('isValid:', isValid); + setIsDisable(isValid) + setrerenderdata(!rerenderdata); + return isValid; + } + + + async function validate() { + + let isValid = true; + + if (isAddVisPresent == 1 && AddVisibility.length <= 0) { + isValid = false; + notify(ST.Pleaseaddfirst, 'SHORT'); + } + + + console.log('isValid:', isValid); + return isValid; + } + + async function validateForm() { + let isValid = true; + let { CategoryName, CategoryId, SubCategoryName, SubCategoryId, BrandName, BrandId, DisplayName, DisplayId, Remark, Image1, Image1Path, FromDate, ToDate, showFromDateFlag } = AddVisFormData; + + let isFromDateIndex = KPIFields.findIndex(i => i.KPIFieldName == 'ShowFromDate'); + let isFromDateKPIObj = isFromDateIndex >= 0 ? KPIFields[isFromDateIndex] : {}; + let isFromDateEnable = isFromDateIndex >= 0 ? isFromDateKPIObj['KPIFieldEnable'] : true; + + let isToDateIndex = KPIFields.findIndex(i => i.KPIFieldName == 'ShowToDate'); + let isToDateKPIObj = isToDateIndex >= 0 ? KPIFields[isToDateIndex] : {}; + let isToDateEnable = isToDateIndex >= 0 ? isToDateKPIObj['KPIFieldEnable'] : true; + + + if ((CategoryName == '' || CategoryName == null) || (CategoryId == '' || CategoryId == null)) { + isValid = false; + notify(ST.PleaseSelectCategory, 'SHORT'); + } + else if ((SubCategoryName == '' || SubCategoryName == null) || (SubCategoryId == '' || SubCategoryId == null)) { + isValid = false; + notify(ST.Pleaseselectsubcategory, 'SHORT'); + } + else if ((BrandName == '' || BrandName == null) || (BrandId == '' || BrandId == null)) { + isValid = false; + notify(ST.Pleaseselectbrand, 'SHORT'); + } + else if ((DisplayName == '' || DisplayName == null) || (DisplayId == '' || DisplayId == null)) { + isValid = false; + notify(ST.Pleaseselectdisplaytype, 'SHORT'); + } + // else if((Remark=='' || Remark==null )){ + // isValid=false; + // notify('Please enter remark','SHORT'); + // } + else if (isFromDateEnable == true && + !AddVisFormData.hasOwnProperty("FromDate") && + (FromDate == '' || FromDate == null)) { + isValid = false; + notify('Please Select The From Date ', 'SHORT'); + } else if (isToDateEnable == true && + !AddVisFormData.hasOwnProperty("ToDate") && + (ToDate == '' || ToDate == null)) { + isValid = false; + notify('Please Select The To Date ', 'SHORT'); + } + else if (StoreCameraAllow == true && (Image1 == '' || Image1 == null)) { + isValid = false; + notify(ST.Pleaseclickimage, 'SHORT'); + } + + console.log('isValid:', isValid); + return isValid; + } + + function onConfirmRemoveAll() { + // Remove all data + if (animatedChoice != null) { + Animated.timing(animatedChoice, { + toValue: 0, + duration: 400, + useNativeDriver: false, + }).start(); + } + // setIsAddVisPresent(0); + // setHasUnsavedChanges(true); + // setAddVisibility([]); + // setAddVisFormData({}); + BgIsAddVisPresent(0); + BgUnsavedChanges(true) + BgWindowData([]) + BgAddVisFormData({}) + setShowRAllC_M(false); + } + + function onSaveCancel() { + setShowAlert(false); + } + + function onselectionChange(option, keyLbl, keyVal, otherData) { + let data = AddVisFormData; + data[keyVal] = option.value; + data[keyLbl] = option.label; + console.log("option,keyLbl,keyVal--", option, keyLbl, keyVal, otherData) + DisableCon(option.label) + // CleanSelector(option,keyLbl, data) + + // setAddVisFormData(data); + BgAddVisFormData(data) + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + + } + + async function StartBreakAdd() { + + let arr = reportData; + let formData = AddVisFormData + let uniqueBreakId = "_Break" + moment(new Date()).format('DDMMYYYYHHmmss') + let picture_clicked_STamp = moment(new Date()).format('HH:mm:ss'); + formData["StartTime"] = picture_clicked_STamp + formData["uniqueBreakId"] = uniqueBreakId + + // setShowRAllC_M(true); + arr.push(formData); + + set_item('AllKPIDisable', "true"); + setReportData(arr) + BgAddVisFormData(formData) + saveData(formData, "StartTime") + BgWindowData(arr) + props.set_AllKPIDisable(true) + BgUnsavedChanges(true) + notify("Start Time added successfully", 'LONG'); + setrerenderdata(!rerenderdata); + + } + + async function EndBreakAdd() { + + let arr = reportData; + let formData = AddVisFormData + + + // let isBreakIndex=arr.findIndex(i=>i.BreakID==formData.BreakID) + let isBreakIndex = arr.length - 1 + let isBreakIndexObj = isBreakIndex >= 0 ? arr[isBreakIndex] : {}; + + let picture_clicked_STamp = moment(new Date()).format('HH:mm:ss'); + isBreakIndexObj["EndTime"] = picture_clicked_STamp; + formData[isBreakIndex] = isBreakIndexObj; + arr[isBreakIndex] = isBreakIndexObj + + clear_item('AllKPIDisable'); + props.set_AllKPIDisable(false) + setReportData(arr) + saveData(isBreakIndexObj, "EndTime") + BgWindowData(arr) + BgAddVisFormData({}) + BgUnsavedChanges(true) + + notify("End Time added successfully", 'LONG'); + setrerenderdata(!rerenderdata); + + } + + async function Add_AddVis() { + let isValid = await validateForm(); + console.log('isValid add:', isValid); + if (isValid) { + let arr = AddVisibility; + let { CategoryName, CategoryId, SubCategoryName, SubCategoryId, BrandName, BrandId, DisplayName, DisplayId, Remark, Image1, Image1Path } = AddVisFormData; + + // let index=AddVisibility.findIndex(i=>i.CategoryId==CategoryId && i.SubCategoryId==SubCategoryId && i.BrandId==BrandId && i.DisplayId==DisplayId); + // if(index>=0){ + // notify(ST.Thisvisibilityhasalreadybeenadded,'LONG'); + // } + // else{ + arr.push(AddVisFormData); + // setAddVisibility(arr); + // setHasUnsavedChanges(true); + BgWindowData(arr) + BgUnsavedChanges(true) + notify(ST.AdditionalVisibilityaddedsuccessfully, 'LONG'); + setrerenderdata(!rerenderdata); + + // clear data + setFromDate(''); + BgAddVisFormData({}) + setToDate(''); + // setAddVisFormData({}); + // } + } + + } + + function showRemoveConfirm(item, index) { + setToRemoveId(index); + setToRemoveItem(item); + setshowRemoveConfirm_M(true); + } + + function Remove_AddVis() { + let index = toRemoveId + let item = toRemoveItem; + let arr = AddVisibility; + console.log('toRemoveId:', index); + if (index >= 0 && index < arr.length) { + arr.splice(index, 1); + // setAddVisibility(AddVisibility); + // setHasUnsavedChanges(true); + BgWindowData(AddVisibility) + BgUnsavedChanges(true) + notify(ST.Visibilityremovedsuccessfully, 'LONG') + setrerenderdata(!rerenderdata); + } + else { + notify(ST.CannotremoveVisibilitynotfound, 'LONG') + } + setToRemoveId(''); + setToRemoveItem({}); + setshowRemoveConfirm_M(false); + + } + + function _OpenCaptureImage_Modal(img) { + + const isImageCap = (img != '' || img != null) ? true : false; + // console.log("imag pop is trigger",isImageCap,showModal,img) + let { window, splitItem, splitItemIndex, cameraType } = reCapImgModalObj + let camera2Label = (window && window.PromoImage2Lable) || ''; + return ( + + { + + + + {"Break Type"} + + + {'Min Count'} + + + {'Max Count'} + + + + + { + BreakTypes.length > 0 && + BreakTypes.map((item, index) => { + + let colorCode = item ? (item.Score == 5 ? "#FFBF00" : item.Score == 0 ? "#ff0000" : item.Score == 10 ? "#32CD32" : "") : "" + return ( + + + {item.BreakName} + + + {item.MinNumber} + + + {item.MaxNumber} + + + ) + }) + } + + + + { setShowModal(false) }}> + {ST.Close} + + + + } + + ) + } + + + + function _render_addVisFormTop() { + let xpos = 0; + if (animatedChoice != null) { + xpos = animatedChoice.interpolate({ + inputRange: [0, 1], + outputRange: [0, -75], + }); + } + + let isFromDateIndex = KPIFields.findIndex(i => i.KPIFieldName == 'ShowFromDate'); + let isFromDateKPIObj = isFromDateIndex >= 0 ? KPIFields[isFromDateIndex] : {}; + let isFromDateEnable = isFromDateIndex >= 0 ? isFromDateKPIObj['KPIFieldEnable'] : true; + + let isToDateIndex = KPIFields.findIndex(i => i.KPIFieldName == 'ShowToDate'); + let isToDateKPIObj = isToDateIndex >= 0 ? KPIFields[isToDateIndex] : {}; + let isToDateEnable = isToDateIndex >= 0 ? isToDateKPIObj['KPIFieldEnable'] : true; + + // && (AddVisFormData.EndTime==undefined || AddVisFormData.EndTime=='') + + let startDis = (AddVisFormData.BreakName != undefined && AddVisFormData.BreakName != '') + let startDis1 = IsDisable == true ? (startDis ? ((AddVisFormData.StartTime != undefined && AddVisFormData.StartTime != '') ? false : true) : false) : false + + console.log("AddVisFormData.StartTime=", AddVisFormData.StartTime != undefined && AddVisFormData.StartTime, AddVisFormData.StartTime) + // storeData + return ( + + + + + + + {"Login Time - " + storeData.CheckInTime} + + + + { setShowModal(true) }}> + + + + + + + + + + + + {CustomPicker(props, BreakTypes, 'BreakName', 'BreakID', 'BreakName', 'BreakID', onselectionChange, { value: AddVisFormData.BreakName, })} + + + + + + { + AddVisFormData && + AddVisFormData.StartTime != "" && AddVisFormData.StartTime != undefined && {"Start Time-" + AddVisFormData.StartTime} + } + + { startDis1 ? StartBreakAdd() : null }}> + {"START"} + + + + + { + AddVisFormData && + AddVisFormData.StartTime != "" && AddVisFormData.StartTime != undefined && {""} + } + { AddVisFormData.StartTime != undefined && AddVisFormData.StartTime != '' ? EndBreakAdd() : null }}> + {"END"} + + + + + + + + { + + + + {"Break Type"} + + + {'Start Time'} + + + {'End Time'} + + + {'Duration'} + + + + + + { + reportData.length > 0 && + reportData.map((item, index) => { + + let colorCode = item ? (item.Score == 5 ? "#FFBF00" : item.Score == 0 ? "#ff0000" : item.Score == 10 ? "#32CD32" : "") : "" + + var startTime = item.StartTime != null && item.StartTime1 != "" ? moment(item.StartTime, 'HH:mm:ss') : ""; + var endTime = item.EndTime != null && item.EndTime1 != "" ? moment(item.EndTime, 'HH:mm:ss') : ""; + + var duration = startTime != '' && endTime != "" ? moment.utc(moment(endTime, "HH:mm:ss").diff(moment(startTime, "HH:mm:ss"))).format("HH:mm:ss") : "" + console.log("duration-------", duration) + return ( + + + {item.BreakName} + + + {item.StartTime} + + + {item.EndTime} + + + {duration} + + + ) + }) + } + + + + + + + } + { + (rerenderdata == rerenderdata) && + + + + + + {ST.Category} + {CustomPicker(props, Categories, 'CategoryName', 'CategoryId', 'CategoryName', 'CategoryId', onselectionChange, { value: AddVisFormData.CategoryName })} + + + + + + {'Sub Category'} + + {CustomPicker(props, SubCategories, 'SubCategoryName', 'SubCategoryId', 'SubCategoryName', 'SubCategoryId', onselectionChange, { value: AddVisFormData.SubCategoryName })} + + + + + { Add_AddVis() }}> + {ST.Add} + + + + + + + } + + ) + } + + return ( + + {processing && } + + {_OpenCaptureImage_Modal()} + {ConfirmSaveAlert(props, showAlert, onSaveCancel, saveData)} + {ConfirmSaveAlert(props, showRemoveConfirm_M, () => { setshowRemoveConfirm_M(false) }, Remove_AddVis, ST.Doyoureallywanttoremovethisvisibility)} + {ConfirmSaveAlert(props, showRAllC_M, () => { setShowRAllC_M(false) }, onConfirmRemoveAll, ST.Doyoureallywanttoremoveallvisibilitydata)} + { setShowCamera(false); getImage(imgData) }} showCamera={showCamera} onHideCamera={() => { setShowCamera(false); }} /> + + + + {Object.keys(storeData).length > 0 && + + {_render_addVisFormTop()} + + } + {/* + {onSubmitData()}}/> + */} + + + + + + ); +} + + + +export default connect(mapStateToProps, mapDispatchToProps)(BreakTime); \ No newline at end of file diff --git a/PerformicsSrc/src/screens/CameraScreen.js b/PerformicsSrc/src/screens/CameraScreen.js new file mode 100644 index 0000000..2019765 --- /dev/null +++ b/PerformicsSrc/src/screens/CameraScreen.js @@ -0,0 +1,58 @@ +import React,{useState,useEffect,useRef} from 'react'; +import Container from '../components/container'; +import { useRoute } from '@react-navigation/native'; +import { globalStyles,customStyles,GetPageTheme } from "../styles/Global"; +import {StatusBar,Image,TextInput,View,Text,ScrollView,TouchableOpacity,Platform,PermissionsAndroid,FlatList, Alert, Animated, DeviceEventEmitter} from 'react-native'; +import { ReactReduxContext,connect,useSelector, useDispatch } from 'react-redux'; +import { mapStateToProps,mapDispatchToProps } from '../reducers/contextProvider'; +import {notify} from '../components/notify'; +import moment from 'moment'; +import CustomCamera from '../components/Camera'; + +function CameraScreen(props) { + const route = useRoute(); + + // get all theme styles acc to current theme set + const PageTheme=GetPageTheme(props.DarkMode,route.name); + const customStyle=customStyles(props.DarkMode,route.name); + + const [processing, setProcessing] = useState(false); + const [loaderTitle, setLoaderTitle] = useState('loading...'); + const [params, setParams] = useState({'cameraType':'back'}); + const [showCamera, setShowCamera] = useState(true); + const [hasUnsavedChanges,setHasUnsavedChanges] = useState(false); + + const d1=new Date(); + const d2=moment(d1).format('MM/DD/YYYY'); + + + useEffect(() => { + let params1=props.route.params? props.route.params:{}; + setParams(params1); + }, []); + + function closeCamera(){ + console.log('closeCamera in camera screen'); + props.navigation.goBack(); + } + + async function onImageCaptured(imgData){ + console.log('onImageCaptured in camera screen',imgData.uri); + imgData['storeData']=params.storeData + // emit onImageCaptured in the screen from where this screen is opened + DeviceEventEmitter.emit("onImageCaptured",imgData); + props.navigation.goBack(); + } + + return ( + + {/* {processing && } */} + {/* {onImageCaptured(imgData)}} showCamera={showCamera} onHideCamera={()=>{closeCamera()}}/> */} + {closeCamera()}}/> + + ); +} + + + +export default connect(mapStateToProps, mapDispatchToProps)(CameraScreen); \ No newline at end of file diff --git a/PerformicsSrc/src/screens/CategoryExec.js b/PerformicsSrc/src/screens/CategoryExec.js new file mode 100644 index 0000000..9c38cd2 --- /dev/null +++ b/PerformicsSrc/src/screens/CategoryExec.js @@ -0,0 +1,2893 @@ +import React, { useState, useEffect, useRef } from 'react'; +import Container from '../components/container'; +import { CurrentRenderContext, useRoute } from '@react-navigation/native'; +import { globalStyles, customStyles, GetPageTheme } from "../styles/Global"; +import { StatusBar, Image, TextInput, View, Text, ScrollView, TouchableOpacity, Platform, PermissionsAndroid, FlatList, Alert, Animated, AppState, Keyboard } from 'react-native'; +import { ReactReduxContext, connect, useSelector, useDispatch } from 'react-redux'; +import { mapStateToProps, mapDispatchToProps } from '../reducers/contextProvider'; +import { notify } from '../components/notify'; +import moment from 'moment'; +import { getDownloadJson, getKPIFields, marktext1, marktext2, resizeImage, restore_ImageWithMetaData, validateNumber } from '../controller/functions'; +import { get_item, set_item, clear_item } from '../components/localStorage'; +import { version, sloganline, appname, testurl, db, colors_Arr, common_ImagePath, ImageFolderPath } from '../constants/constants'; +import CustomHeader from '../components/customHeader'; +import { AntDesign, Entypo, FontAwesome, Fontisto, MaterialCommunityIcons } from '../components/icons'; + +import CustomLoader from '../components/CustomLoader'; +import LinearGradient from 'react-native-linear-gradient'; +import { AppTables } from '../constants/tableConstants'; +import * as RNFS from 'react-native-fs'; +import GradientButton from '../components/gradientButton'; +import addImg from '../assets/performics/add_image.svg'; +import CustomModal from '../components/CustomModal'; +import { Q_getpaidvisibility } from '../constants/ConstantQueries'; +import { Picker } from '@react-native-picker/picker'; +import { ConfirmSaveAlert } from '../components/alert'; +import ModalSelector from 'react-native-modal-selector' +import { CustomPicker, CustomPicker2 } from '../components/CustomPicker'; +import CustomCamera from '../components/Camera'; +import ImageViewer from 'react-native-image-zoom-viewer'; +import DateTimePicker from '@react-native-community/datetimepicker'; +import CheckBox from '@react-native-community/checkbox'; + +import MultiSelect from 'react-native-multiple-select'; + +import CameraImg3 from '../assets/performics/camera_tick.svg'; +import CameraImg2 from '../assets/performics/camera_icon.svg'; +import CameraImg5 from '../assets/image/astrickcamera.svg'; +import { PageTheme } from '../styles/Themes'; + +function CategoryExec(props) { + const route = useRoute(); + const ST = props.StaticText || {}; + + // get all theme styles acc to current theme set + const PageTheme = GetPageTheme(props.DarkMode, route.name); + const customStyle = customStyles(props.DarkMode, route.name); + const animatedChoice = useRef(new Animated.Value(0)).current; + + const [processing, setProcessing] = useState(true); + const [loaderTitle, setLoaderTitle] = useState(); + const [isAdhocScreen, setIsAdhocScreen] = useState(false); + const [storeData, setStoreData] = useState({}); + const [StoreCameraAllow, setStoreCameraAllow] = useState(true); + const [currentMenu, setCurrentMenu] = useState({}); + const [rerenderdata, setrerenderdata] = useState(0); + const [rerenderdata2, setrerenderdata2] = useState(0); + const [rerenderdata3, setrerenderdata3] = useState(0); + const [rerenderdata4, setrerenderdata4] = useState(0); + + const [hasUnsavedChanges, setHasUnsavedChanges] = useState(false); + + const [WindowData, setWindowData] = useState([]); + const [reasons_list, setReasons_list] = useState([]); + const [Windows, setWindows] = useState([]); + const [show_zoomImage, setShow_zoomImage] = useState(false); + const [refImageIndex, setrefImageIndex] = useState(0); + const [showAlert, setShowAlert] = useState(false); + const [zoomImageUrl, setZoomImageUrl] = useState([]); + const [showCamera, setShowCamera] = useState(false); + const [getImageProps, setGetImageProps] = useState({}); + const zoomView = useRef(null); + const [showRating, setShowRating] = useState(false); + const [RatingQtn, setRatingQtn] = useState({}); + const [RatingWindow, setRatingWindow] = useState({}); + const [RatingOrder, setRatingOrder] = useState([]); + + const [Products, setProducts] = useState([]); + const [DisplayList, setDisplayList] = useState([]); + const [toRemoveId, setToRemoveId] = useState(''); + const [toRemoveItem, setToRemoveItem] = useState({}); + const [showRemoveConfirm_M, setshowRemoveConfirm_M] = useState(false); + const [showRAllC_M, setShowRAllC_M] = useState(false); + const [searchedItem, setSearchedItem] = useState(''); + const [globalWindows, setGlobalWindows] = useState([]); + const [KPIFields, setKPIFields] = useState([]); + const [showSwitchCamera, setShowSwitchCamera] = useState(false); + const [GridValue, setGridValue] = useState(false); + + const [DataCleanModal, setDataCleanModal] = useState(false); + const [DataCleanAnim, setDataCleanAnim] = useState(""); + const [DataCleanItem, setDataCleanItem] = useState({}); + const [isPresentClean, setIsPresentClean] = useState(0); + + const [InputChange, setInputChange] = useState([]); + + const [SelectedImg, setSelectedImg] = useState(''); + const [showModal, setShowModal] = useState(false); + const [reCapImgModalObj, setReCapImgModalObj] = useState({}); + const [showImageSaveOp, setShowImageSaveOp] = useState(true); + + const [ItemsInView, setItemsInView] = useState([]); + + const hasUnsavedChangesRef = React.useRef(hasUnsavedChanges); + const WindowDataRef = React.useRef(WindowData); + const StoreIdRef = React.useRef(null); + const ScreenNameRef = React.useRef(''); + const QARef = useRef(Windows); + + + const onViewableItemsChanged = ({ viewableItems, }) => { + // Do stuff + console.log("onViewableItemsChanged called:") + setItemsInView(viewableItems); + }; + + const FlatLConfCallbackPairs = useRef([{ viewabilityConfig: { itemVisiblePercentThreshold: 50 }, onViewableItemsChanged }]); + + // error field states + const [errorfield, setErrorField] = useState({}); + const [error, setError] = useState(false); + + + + const inputRefs = useRef({}); + + const d1 = new Date(); + const d2 = moment(d1).format('MM/DD/YYYY'); + + + useEffect(() => { + + setLoaderTitle(ST.Loading + '...') + let params = props.route.params ? props.route.params : {}; + let storeData1 = params.storeData || {}; + let menu1 = params.menu || {}; + let cameraAllow = storeData1.CameraAllow == 'true' || storeData1.CameraAllow == 1 ? true : false; + setStoreCameraAllow(cameraAllow); + + let isAdhoc = params.isAdhoc || false; + setIsAdhocScreen(isAdhoc); + setStoreData(storeData1); + setCurrentMenu(menu1); + + StoreIdRef.current = storeData1.StoreId + ScreenNameRef.current = menu1.ScreenName + getData(storeData1, menu1); + + const AppStateSubscription = AppState.addEventListener('change', (pro) => { _handleAppStateChange(pro) }); + const unsubscribe = props.navigation.addListener('beforeRemove', onBeforeRemove); + + return function cleanup() { + AppStateSubscription.remove(); + // AppState.removeEventListener('change', (pro)=>{ _handleAppStateChange(WindowData,pro)}); + return unsubscribe; + }; + }, []); + + const _handleAppStateChange = async (nextAppState) => { + if (nextAppState == 'background' && hasUnsavedChangesRef.current == true) { + + let newData = { + storeBGData: WindowDataRef.current, + menuName: ScreenNameRef.current, + StoreId1: StoreIdRef.current, + QARef: QARef.current, + visiteDate: d2 + } + let WindowsStr = JSON.stringify(newData) + await set_item('storeData', WindowsStr); + } + } + + useEffect(() => { + const unsubscribe = props.navigation.addListener('beforeRemove', onBeforeRemove); + return unsubscribe; + // AppState.removeEventListener('change',(pro)=>{ _handleAppStateChange(WindowData,pro)}); + // AppState.addEventListener('change',(pro)=>{ _handleAppStateChange(WindowData,pro)}); + }, [hasUnsavedChanges]); + + // useEffect(() => { + // AppState.removeEventListener('change',(pro)=>{ _handleAppStateChange(WindowData,pro)}); + // AppState.addEventListener('change',(pro)=>{ _handleAppStateChange(WindowData,pro)}); + // }, [WindowData]); + + useEffect(() => { + const unsubscribe = props.navigation.addListener('beforeRemove', onBeforeRemove); + return unsubscribe; + }, [showCamera]); + + useEffect(() => { + const unsubscribe = props.navigation.addListener('beforeRemove', onBeforeRemove); + return unsubscribe; + }, [show_zoomImage]); + + function onBeforeRemove(e) { + if (showCamera == true) { + e.preventDefault(); + setShowCamera(false); + } + else if (show_zoomImage == true) { + e.preventDefault(); + setShow_zoomImage(false); + } + else { + if (hasUnsavedChanges == true) { + e.preventDefault(); // Prevent default behavior of leaving the screen + onRemoveScreen(e); + } + else { + return; + } + } + } + + function BgUnsavedChanges(val) { + hasUnsavedChangesRef.current = val + setHasUnsavedChanges(val); + } + + function BgWindowData(val) { + WindowDataRef.current = val + setWindowData(val); + } + + function onRemoveScreen(e) { + Alert.alert( + "", + ST.Doyoureallywanttoexitthescreen, + [ + { + text: ST.Cancel, + onPress: () => { }, + style: "cancel" + }, + { + text: ST.OK, onPress: async () => { + // setHasUnsavedChanges(false); + BgUnsavedChanges(false) + await clear_item('storeData') + props.navigation.dispatch(e.data.action); + } + } + ] + ); + } + + + async function getData(storeData1, menu1) { + try { + let { StoreId, ChainId, StateId, StoreTypeId } = storeData1; + + let AllKPIFields = await getKPIFields(menu1); + setKPIFields(AllKPIFields); + + // set switch camera flag as defined in mapping menu flag (if exists) + let SwitchingCameraI = AllKPIFields.findIndex(i => i.KPIFieldName == 'SwitchingCamera'); + let SwitchingCameraObj = SwitchingCameraI >= 0 ? AllKPIFields[SwitchingCameraI] : {}; + let SwitchingCamera = SwitchingCameraI >= 0 ? SwitchingCameraObj['KPIFieldEnable'] : false; + setShowSwitchCamera(SwitchingCamera); + + let inputChangeFlag = [], storeBGData1 = [], bgStoreJson = {}, isBgDataExists = false; + let windData = await get_item('storeData') + if (windData != null && windData != '') { + let StoreJson = JSON.parse(windData) + let { storeBGData, menuName, StoreId1, visiteDate } = StoreJson + if (storeBGData.length > 0 && menuName == menu1.ScreenName && StoreId1 == StoreId && visiteDate == d2) { + isBgDataExists = true; + storeBGData1 = storeBGData; + bgStoreJson = StoreJson + // setWindowData(storeBGData); + BgUnsavedChanges(true) + BgWindowData(storeBGData) + } + } + await db.transaction(async function (txn) { + + + let q3 = `Select distinct CategoryReasonId as ReasonId,CategoryReason as Reason From Master_CategoryReason`; + await txn.executeSql(q3, [], async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + let arr = []; + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + arr.push(data); + if (i == txnres2.rows.length - 1) { + setReasons_list(arr); + } + } + } + }, function (txnE, txnerr) { console.log(txnerr); },); + + // check if data exists + let selectlist = ` distinct w.STORE_ID as StoreId,w.CAT_HEADER_ID as CatHeaderId,wd.CategoryDefinitionId,wd.CategoryId,wd.CategoryName,wd.CategoryRefImage,wd.CategoryRefImagePopUp,wd.CategoryElementCheckAssortment,wd.CategoryElementStockRequired,w.IS_PRESENT as IsPresent,wd.CategoryNotExistCamera,w.CATE_NA_IMAGE as CatNAImage,wd.CategoryExistReasonEnable,wd.CategoryNotExistReasonEnable,w.REASON_ID as ReasonId,w.REASON as Reason,w.REMARK as Remark,wd.NoOfSplit,wd.CategoryImage1,wd.CategoryImage2,wd.CategoryImage1Lable,wd.CategoryImage2Lable,wd.CategoryImage1CameraGrid,wd.CategoryImage2CameraGrid,wd.StockQtyRequired`; + let join = ` inner join Master_CategoryDefinition wd on w.CAT_DEFINITION_ID=wd.CategoryDefinitionId `; + let q = ` Select ${selectlist} from ${AppTables.CATEXE_HDR_DATA} w ${join} where w.STORE_ID='${StoreId}' order by wd.CatDefSequence `; + + // else pick data from masters + let selectlist2 = ` distinct s.StoreId,w.CategoryDefinitionId,w.CategoryId,w.CategoryName,w.CategoryRefImage,w.CategoryRefImagePopUp,w.CategoryElementCheckAssortment,w.CategoryElementStockRequired,'' as IsPresent,w.CategoryNotExistCamera,'' as CatNAImage,w.CategoryExistReasonEnable,w.CategoryNotExistReasonEnable,'' as ReasonId,'' as Reason,w.NoOfSplit,w.CategoryImage1,w.CategoryImage2,w.CategoryImage1Lable,w.CategoryImage2Lable,w.CategoryImage1CameraGrid,w.CategoryImage2CameraGrid,w.StockQtyRequired`; + let join2 = ` inner join Mapping_StoreCategory s on w.CategoryDefinitionId=s.CategoryDefinitionId `; + let q2 = ` Select ${selectlist2} from Master_CategoryDefinition w ${join2} where s.StoreId='${StoreId}' order by w.CatDefSequence `; + + // console.log('Promotion ',q); + await txn.executeSql(q, [], async function (txn2, txnres2) { + console.log('catexec items', txnres2.rows.length); + if (txnres2.rows.length > 0) { + let arr = []; let images = []; + let allWindowsData = [] + + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + + let isPresent = data.IsPresent == '1' || data.IsPresent == 1 ? 1 : 0; + if (isBgDataExists) { + // let storeBgIndex=storeBGData1.findIndex(i=>i.VisibilityId==data.VisibilityId && i.VisibilityDefinitionId==data.VisibilityDefinitionId) + // let storeBgObj=storeBgIndex>=0?storeBGData1[storeBgIndex]:{}; + // isPresent=storeBgObj.isPresent + + let storeBgIndex = storeBGData1.findIndex(i => i.CategoryId == data?.CategoryId && i.CategoryDefinitionId == data?.CategoryDefinitionId); + let storeBgObj = storeBgIndex >= 0 ? storeBGData1[storeBgIndex] : null; + isPresent = storeBgObj.isPresent == 1 ? 1 : 0; + } + let isPresentValue = ((isPresent == 1) || (isPresent == true)) ? true : false + let animatedChoice = new Animated.Value(isPresent); + let animatedHeight = new Animated.Value(450); + data.animatedHeight = animatedHeight + data.animatedChoice = animatedChoice; + + data.NoOfSplit = parseInt(data.NoOfSplit); + + let NoOfSplit = data.NoOfSplit; + + let isStockReq = data.CategoryElementStockRequired == 'true' || data.CategoryElementStockRequired == 1 ? 1 : 0; + + let imgObj = { imgIndex: (i + 1), url: data.CategoryRefImage, props: {} } + images.push(imgObj); + let WindowSplits = await getWindowSplits(NoOfSplit, data, storeData1, menu1); + let WQr = await getWindowQuestions(data, storeData1, isPresentValue, menu1, isBgDataExists); + let WindowQuestions = WQr['WindowQuestions'] || []; + let WindowQA = WQr['WindowQA'] || {}; + let WSd = isStockReq == true ? await getWindowStockData(data, storeData1, isPresent) : { 'WStocks': [], 'WStocksData': [] }; + + let WStocks = WSd['WStocks'] || []; + let WStocksData = WSd['WStocksData'] || []; + let isAllChecked = WSd['isAllChecked'] != null ? WSd['isAllChecked'] : 0; + + let isNAImageAvl = data.CategoryNotExistCamera == 'true' || data.CategoryNotExistCamera == 1 ? 1 : 0; + let NAImage1 = isNAImageAvl == 1 && data.CatNAImage != null ? data.CatNAImage : ''; + let NAImage1Path = NAImage1 != '' ? `file://${ImageFolderPath + menu1.ScreenName}/` + NAImage1 : ''; + + + let windowDataObj = { 'CategoryId': data.CategoryId, 'CategoryDefinitionId': data.CategoryDefinitionId, 'WindowSplits': WindowSplits, 'WindowQA': WindowQA, 'WStocksData': WStocksData, 'NAImage1': NAImage1, 'NAImage1Path': NAImage1Path, 'ReasonId': data.ReasonId, 'Reason': data.Reason, 'isPresent': isPresent, 'isAllSKUChecked': isAllChecked, 'remark': (data.Remark != null ? data.Remark : '') }; + data['WindowQuestions'] = WindowQuestions; + data['WindowStocks'] = WStocks; + + let changesFlag = { CategoryId: data.CategoryId, CategoryDefinitionId: data.CategoryDefinitionId, Flag: true } + inputChangeFlag.push(changesFlag) + + arr.push(data); + + allWindowsData.push(windowDataObj); + if (i == txnres2.rows.length - 1) { + + if (!isBgDataExists) { + BgWindowData(allWindowsData) + } + setInputChange(inputChangeFlag) + // setWindowData(allWindowsData); + setWindows(arr); + setGlobalWindows(arr); + + setZoomImageUrl(images); + setProcessing(false); + } + } + } + else { + + await txn.executeSql(q2, [], async function (txn2, txnres2) { + console.log('catexec items load', txnres2.rows.length); + if (txnres2.rows.length > 0) { + let arr = [], images = [], allWindowsData = []; + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + + let isPresent = 0; + // if(isBgDataExists){ + // let storeBgIndex=storeBGData1.findIndex(i=>i.VisibilityId==data?.VisibilityId && i.VisibilityDefinitionId==data.VisibilityDefinitionId) + // // let storeBgIndex=storeBGData1.findIndex(i=>i.CategoryId==data?.CategoryId && i.CategoryDefinitionId==data.CategoryDefinitionId) + // let storeBgObj=storeBgIndex>=0?storeBGData1[storeBgIndex]:{}; + // isPresent=storeBgObj?.isPresent ; + // } + if (isBgDataExists) { + let storeBgIndex = storeBGData1.findIndex( + i => i.CategoryId == data?.CategoryId && i.CategoryDefinitionId == data?.CategoryDefinitionId + ); + + let storeBgObj = storeBgIndex >= 0 ? storeBGData1[storeBgIndex] : null; + isPresent = storeBgObj.isPresent == 1 ? 1 : 0; + } + + let animatedChoice = new Animated.Value(isPresent); + let animatedHeight = new Animated.Value(450); + data.animatedHeight = animatedHeight + data.animatedChoice = animatedChoice; + + data.NoOfSplit = parseInt(data.NoOfSplit); + let isStockReq = data.CategoryElementStockRequired == 'true' || data.CategoryElementStockRequired == 1 ? 1 : 0; + + let imgObj = { imgIndex: (i + 1), url: data.CategoryRefImage, props: {} } + images.push(imgObj); + + let WindowSplits = []; + for (var s = 0; s < data.NoOfSplit; s++) { + let obj = { 'Image1Name': '', 'Image1': '', 'Image2Name': '', 'Image2': '', img1Required: true, img2Required: true }; + WindowSplits.push(obj); + } + let WQr = await getWindowQuestions(data, storeData1, false, menu1, isBgDataExists); + let WindowQuestions = WQr['WindowQuestions'] || []; + let WindowQA = WQr['WindowQA'] || {}; + let WSd = isStockReq == true ? await getWindowStockData(data, storeData1, false) : { 'WStocks': [], 'WStocksData': [] }; + + let WStocks = WSd['WStocks'] || []; + let WStocksData = WSd['WStocksData'] || []; + let isAllChecked = WSd['isAllChecked'] != null ? WSd['isAllChecked'] : 0; + + let windowDataObj = { 'CategoryId': data.CategoryId, 'CategoryDefinitionId': data.CategoryDefinitionId, 'WindowSplits': WindowSplits, 'WindowQA': WindowQA, 'WStocksData': WStocksData, 'isAllSKUChecked': isAllChecked }; + data['WindowQuestions'] = WindowQuestions; + data['WindowStocks'] = WStocks; + + let changesFlag = { CategoryId: data.CategoryId, CategoryDefinitionId: data.CategoryDefinitionId, Flag: false } + inputChangeFlag.push(changesFlag) + + arr.push(data); + allWindowsData.push(windowDataObj); + if (i == txnres2.rows.length - 1) { + if (!isBgDataExists) { + BgWindowData(allWindowsData) + QARef.current = arr + } + + setInputChange(inputChangeFlag) + // setWindowData(allWindowsData); + setWindows(arr); + setGlobalWindows(arr); + setZoomImageUrl(images); + setProcessing(false); + } + } + } + else { + setProcessing(false); + } + }, function (txnE, txnerr) { console.log(txnerr); setProcessing(false); },); + } + }, function (txnE, txnerr) { console.log(txnerr); setProcessing(false); },); + + }); + } catch (err) { + console.log(err); + } + } + + async function getWindowSplits(NoOfSplit, window, storeData1, menu1) { + let WindowSplits_def = []; + for (var s = 0; s < NoOfSplit; s++) { + let obj = { 'Image1Name': '', 'Image1': '', 'Image2Name': '', 'Image2': '' }; + WindowSplits_def.push(obj); + } + return new Promise((resolve, reject) => { + + db.transaction(async function (txn) { + + let q = `select * from ${AppTables.CATEXE_IMAGES} where CAT_HEADER_ID='${window.CatHeaderId}' and STORE_ID='${storeData1.StoreId}' `; + + await txn.executeSql(q, [], async function (txn2, txnres2) { + console.log('cat exec images:', window.CatHeaderId, txnres2.rows.length); + if (txnres2.rows.length > 0) { + let arr = []; + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + console.log(data.CAT_HEADER_ID) + let isImage1 = window.CategoryImage1 == 'true' || window.CategoryImage1 == 1 ? 1 : 0; + let isImage2 = window.CategoryImage2 == 'true' || window.CategoryImage2 == 1 ? 1 : 0; + + let Image1 = isImage1 == 1 && data.IMAGE1 != null && data.IMAGE1 != '' ? `file://${ImageFolderPath + menu1.ScreenName}/` + data.IMAGE1 : ''; + let Image2 = isImage2 == 1 && data.IMAGE2 != null && data.IMAGE2 != '' ? `file://${ImageFolderPath + menu1.ScreenName}/` + data.IMAGE2 : ''; + + console.log('cat exec images:', Image1, Image2); + let obj = { 'Image1Name': data.IMAGE1, 'Image1': Image1, 'Image2Name': data.IMAGE2, 'Image2': Image2 }; + arr.push(obj); + + if (i == txnres2.rows.length - 1) { + resolve(arr) + } + } + } + else { + resolve(WindowSplits_def) + } + }, function (txnE, txnerr) { console.log(txnerr); resolve(WindowSplits_def) },); + }); + }).then((val) => { + return val + }).catch((err) => { + console.log(err); + return WindowSplits_def; + }); + } + + async function getWindowQuestions(window, storeData1, isInserted = false, menu1, isBgDataExists = false) { + let obj = { 'WindowQA': {}, 'WindowQuestions': [] } + return new Promise((resolve, reject) => { + + db.transaction(async function (txn) { + var q = '', selectlist = '', join = '', join2 = ''; + console.log("CategoryName-----", window?.CategoryName) + if ((isInserted == true) && (!isBgDataExists)) { + selectlist = ` DISTINCT q.QUESTION_ID as CategoryQuestionId,q.QUESTION_CODE as CategoryQuestionCode,wq.CategoryQuestionName,wq.QuestionType,wq.CQShowCamera,wq.CQCameraMandatory,wq.CQLengthValidationRequired,wq.CQMinimumChar,wq.CQMaximumChar,wq.CQDecimalPoint,wq.CQDateRangeMin,wq.CQDateRangeMax,wq.CQVoiceLengthInMinutes,wq.CQDefaultQuestionEnable,q.IS_DISABLED,q.ANSWER as Answer,q.ANSWER_ID as AnswerId,q.MULTI_OPTIONS_IDS as multi_op_ids,q.IMAGE_ALLOW1 as CAShowCamera,q.IMAGE1 as Image1 `; + join2 = ` inner join Mapping_CategoryQuestion mq on mq.CategoryQuestionId=wq.CategoryQuestionId `; + join = ` inner join Master_CategoryQuestion wq on wq.CategoryQuestionId=q.QUESTION_ID `; + q = `select ${selectlist} from ${AppTables.CATEXE_CHILD_DATA} q ${join} ${join2} where q.STORE_ID='${storeData1.StoreId}' and q.CAT_DEFINITION_ID='${window.CategoryDefinitionId}' and q.CAT_ID='${window.CategoryId}' order by wq.CategoryQuestionSequence `; + } + else { + selectlist = ` DISTINCT wq.CategoryQuestionId,wq.CategoryQuestionCode,wq.CategoryQuestionName,wq.QuestionType,wq.CQShowCamera,wq.CQCameraMandatory,wq.CQLengthValidationRequired,wq.CQMinimumChar,wq.CQMaximumChar,wq.CQDecimalPoint,wq.CQDateRangeMin,wq.CQDateRangeMax,wq.CQVoiceLengthInMinutes,wq.CQDefaultQuestionEnable `; + join = ` inner join Mapping_CategoryQuestion mq on mq.CategoryQuestionId=wq.CategoryQuestionId `; + q = `select ${selectlist} from Master_CategoryQuestion wq ${join} where mq.CategoryDefinitionId='${window.CategoryDefinitionId}' order by wq.CategoryQuestionSequence `; + } + + await txn.executeSql(q, [], async function (txn2, txnres2) { + // console.log("qtn count:",txnres2.rows.length,q) + if (txnres2.rows.length > 0) { + let arr = []; + let wqa_obj = {}; + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + let answers = []; + data.CQDefaultQuestionEnable = data.CQDefaultQuestionEnable == 1 || data.CQDefaultQuestionEnable == 'true' ? true : false; + if (isInserted) { + data['isDisabled'] = data.IS_DISABLED == true || data.IS_DISABLED == "true" ? true : false; + } + else { + data['isDisabled'] = !data.CQDefaultQuestionEnable; + } + + if (data.QuestionType == 'Multi choice list' || data.QuestionType == 'Single choice list' || data.QuestionType == 'Rating') { + answers = await getWindowAnswers(data); + if (data.QuestionType == 'Rating') { + data.showRating = false; + } + } + else if (data.QuestionType == 'Date') { + data.showDatePicker = false; + } + data['Answers'] = answers; + + let id_key = data.CategoryQuestionId + '_AnswerId'; + let ans_key = data.CategoryQuestionId + '_Answer'; + let multi_key = data.CategoryQuestionId + '_MultiOption'; + let date_key = data.CategoryQuestionId + '_Date'; + let img_key = data.CategoryQuestionId + '_ImagePath1'; + let imgname_key = data.CategoryQuestionId + '_ImageName1'; + let rating_key = data.CategoryQuestionId + '_Rating'; + + + let showImageTag = (data.CQShowCamera == 'true' || data.CQShowCamera == 1); + + data.AnswerId != null ? wqa_obj[id_key] = data.AnswerId : ''; + data.Answer != null ? wqa_obj[ans_key] = data.Answer : ''; + + + let selansid = data.AnswerId != null ? data.AnswerId : ''; + if (data.QuestionType == 'Multi choice list' && selansid != '' && data.multi_op_ids != null) { + selansid = data.multi_op_ids ? data.multi_op_ids.split(',') : []; + wqa_obj[multi_key] = data.multi_op_ids; + } + + if ((data.QuestionType == 'Single choice list' || data.QuestionType == 'Multi choice list') && selansid != '' && selansid != null) { + if (data.Answers && data.Answers.length > 0) { + for (var k = 0; k < data.Answers.length; k++) { + let ansss = data.Answers[k]; + let isandImgAl = (ansss.CAShowCamera == 1 || ansss.CAShowCamera == 'true'); + if (data.QuestionType == 'Single choice list' && (isandImgAl && ansss.AnswerId == selansid)) { + showImageTag = true; + } + else if (data.QuestionType == 'Multi choice list' && (isandImgAl && selansid.indexOf(ansss.AnswerId) >= 0)) { + showImageTag = true; + } + } + } + } + + if (showImageTag && data.Answer != null) { + let imgPath = (Platform.OS == 'ios' ? 'file://' : '') + `${ImageFolderPath + menu1.ScreenName}/` + data.Image1; + wqa_obj[imgname_key] = data.Image1; + wqa_obj[img_key] = imgPath; + } + + + + if (data.QuestionType == 'Date' && data.Answer != null) { + let dayonly = moment().format('DD'); + let actual_date = data.Answer ? data.Answer.split('/') : []; + let month = actual_date[0], year = actual_date[1]; + let fulldate = month + '/' + dayonly + '/' + year; + wqa_obj[date_key] = fulldate; + + } + + arr.push(data); + if (i == txnres2.rows.length - 1) { + obj['WindowQuestions'] = arr; + obj['WindowQA'] = wqa_obj; + resolve(obj) + } + } + } + else { + resolve(obj) + } + }, function (txnE, txnerr) { console.log(txnerr); resolve(obj) },); + }); + }).then((val) => { + return val + }).catch((err) => { + console.log(err); + return obj; + }); + } + + + async function getWindowAnswers(qtn) { + + return new Promise((resolve, reject) => { + + db.transaction(async function (txn) { + var q = '', selectlist = ''; + selectlist = ` DISTINCT CategoryAnswerId as AnswerId,CategoryAnswerName as Answer,CAShowCamera,CACameraMandatory,CAQuestionEnable,CAQuestionDisable `; + q = `select ${selectlist} from Master_CategoryQuestion where CategoryQuestionId='${qtn.CategoryQuestionId}' order by CASequence `; + + await txn.executeSql(q, [], async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + let arr = []; + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + arr.push(data); + if (i == txnres2.rows.length - 1) { + resolve(arr) + } + } + } + else { + resolve([]) + } + }, function (txnE, txnerr) { console.log(txnerr); resolve([]) },); + }); + }).then((val) => { + return val + }).catch((err) => { + console.log(err); + return []; + }); + } + + async function getWindowStockData(window, storeData1, isInserted = false) { + let obj = { 'WStocks': [], 'WStocksData': [], 'isAllChecked': 0 } + let { StateId, ChainId, StoreTypeId, StoreClassId, StoreCategoryId } = storeData1; + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + let checkassrt = window.CategoryElementCheckAssortment == 'true' || window.CategoryElementCheckAssortment == 1 ? true : false; + let join = '', join2 = ''; + if (checkassrt) { + join = ` inner join Mapping_ProductAssortmentStorewise a on a.ProductId=s.CAT_STOCK_VALUE and a.StoreId='${storeData1.StoreId}' `; + } + let selectlist1 = ` s.CAT_STOCK_DEFINITION_ID as CategoryStockDefinitionId, s.CAT_DEFINITION_ID as CategoryDefinitionId,s.CAT_STOCK_TABLE as CategoryStockTable,s.CAT_STOCK_FIELD as CategoryStockField,s.CAT_STOCK_VALUE as CategoryStockValue,s.CAT_STOCK_MBQ as CategoryStockMBQ,s.PRODUCT_NAME as ProductName, s.STOCK as Stock,s.IS_CAT_PRESENT as isCatPresent `; + let q = `select ${selectlist1} from ${AppTables.CATEXE_STOCK_DATA} s ${join} where s.CAT_DEFINITION_ID='${window.CategoryDefinitionId}' and s.STORE_ID='${storeData1.StoreId}' `; + if (checkassrt) { + q += ` and a.StoreId='${storeData1.StoreId}' `; + } + q += ` order by s.PRODUCT_NAME `; + + if (checkassrt) { + join2 = ` inner join Mapping_ProductAssortmentStorewise a on a.ProductId=s.CategoryStockValue and a.StoreId='${storeData1.StoreId}'`; + } + let selectlist2 = ` s.CategoryStockDefinitionId, s.CategoryDefinitionId,s.CategoryStockTable,s.CategoryStockField,s.CategoryStockValue,s.CategoryStockMBQ,s.ProductName `; + let q2 = `select ${selectlist2} from Master_CategoryStockDefinition s ${join2} where s.CategoryDefinitionId='${window.CategoryDefinitionId}' `; + + if (checkassrt) { + q2 += ` and a.StoreId='${storeData1.StoreId}' `; + } + q2 += ` order by s.ProductName `; + + + console.log(q); + await txn.executeSql(q, [], async function (txn2, txnres2) { + console.log('All stocks:', txnres2.rows.length) + if (txnres2.rows.length > 0) { + let arr = [], WStocksData = []; + let isAllChecked = 1; + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + if (isInserted == true && data.Stock != null) { + inputRefs.current['input1_' + data.CategoryDefinitionId + "_" + data.CategoryStockDefinitionId] = ''; + let stockData_obj = { 'ProductId': data.CategoryStockValue, 'Stock': data.Stock, 'isCatPresent': (data.isCatPresent != null ? data.isCatPresent : 0) } + WStocksData.push(stockData_obj); + + } + if (data.isCatPresent == null || data.isCatPresent == 0 || data.isCatPresent == '0' || data.isCatPresent == '') { + + isAllChecked = 0; + } + arr.push(data); + if (i == txnres2.rows.length - 1) { + obj['WStocks'] = arr; + obj['WStocksData'] = WStocksData; + obj['isAllChecked'] = isAllChecked; + resolve(obj) + } + } + } + else { + await txn.executeSql(q2, [], async function (txn2, txnres3) { + console.log('All stocks load:', txnres3.rows.length) + if (txnres3.rows.length > 0) { + let arr = [], WStocksData = []; + let isAllChecked = 1; + for (var i = 0; i < txnres3.rows.length; i++) { + let data = txnres3.rows.item(i); + if (isInserted == true && data.Stock != null) { + inputRefs.current['input1_' + data.CategoryDefinitionId + "_" + data.CategoryStockDefinitionId] = ''; + let stockData_obj = { 'ProductId': data.CategoryStockValue, 'Stock': data.Stock, 'isCatPresent': (data.isCatPresent != null ? data.isCatPresent : 0) } + WStocksData.push(stockData_obj); + } + if (data.isCatPresent == null || data.isCatPresent == 0 || data.isCatPresent == '0' || data.isCatPresent == '') { + isAllChecked = 0; + } + arr.push(data); + if (i == txnres3.rows.length - 1) { + obj['WStocks'] = arr; + obj['WStocksData'] = WStocksData; + obj['isAllChecked'] = isAllChecked; + resolve(obj) + } + } + } + else { + resolve(obj); + } + }, function (txnE, txnerr) { console.log(txnerr); resolve(obj) },); + } + }, function (txnE, txnerr) { console.log(txnerr); resolve(obj) },); + }); + }).then((val) => { + return val + }).catch((err) => { + console.log(err); + return obj; + }); + } + + async function focusToNext(WindowStocks, windowIndex, stockProd, index) { + console.log('focusToNext is call'); + + if (index == WindowStocks.length - 1) { + return; + } + + try { + // console.log('next 1 call','input1_'+WindowStocks[index+1].CategoryDefinitionId+'_'+WindowStocks[index+1].CategoryStockDefinitionId) + let refIn2 = inputRefs.current['input1_' + WindowStocks[index + 1].CategoryDefinitionId + '_' + WindowStocks[index + 1].CategoryStockDefinitionId]; + if (refIn2 != null) { + refIn2.focus(); + } + } + catch (err) { + console.log(err); + } + + } + + async function getImage(imgdata) { + let type = getImageProps.type || ''; + let window = getImageProps.window || {}; + let splitItem = getImageProps.splitItem || {}; + let splitItemIndex = getImageProps.splitItemIndex || 0; + let qtn = getImageProps.qtn || {}; + let cameraType = getImageProps.cameraType != null ? getImageProps.cameraType : '1'; + + if (typeof imgdata == 'object' && imgdata.errorCode == 'camera_unavailable') { + notify(ST.Cameraunavailable); + } + else if (typeof imgdata == 'object' && imgdata.uri != null) { + const img = imgdata; + console.log("imageee:", img) + const imgurl = img.uri, imgWidth = img.width, imgHeight = img.ExtendedHeight; + let isImgFromGallery = img.fromGallery != null ? img.fromGallery : false; + let picture_clickedd = isImgFromGallery == true ? img.datetime : new Date(); + ////change by jeevanp + let picture_clicked_time = moment(picture_clickedd).format('MM-DD-YYYY HH:mm:ss') + let picture_clicked_time_for_pic_name = moment(picture_clickedd).format('MMDDYYYY_HHmmss') + + console.log("time", picture_clicked_time); + console.log("time1", picture_clicked_time_for_pic_name); + ////change by jeevanp + let calculate_tym_date_for_filename = picture_clicked_time_for_pic_name; + let calculate_tym_date_over_img = picture_clicked_time; + let filename = storeData.StoreId + '_' + window.CategoryDefinitionId + '_' + window.CategoryId + '_' + (props.UserId || '') + '_CEImg-' + calculate_tym_date_for_filename + '.jpg'; + console.log(filename, "file_name"); + console.log("imageeeee:", filename) + let allData = WindowData; + let defData = { 'CategoryId': window.CategoryId, 'CategoryDefinitionId': window.CategoryDefinitionId }; + const wind_index = allData.findIndex(i => i.CategoryId == window.CategoryId && i.CategoryDefinitionId == window.CategoryDefinitionId); + let wind = wind_index >= 0 ? allData[wind_index] : defData; + + let camera1Label = window.CategoryImage1Lable || ''; + let camera2Label = window.CategoryImage2Lable || ''; + let extraLabel = ''; + + if (cameraType == '2') { + var QD = wind.WindowQA || {}; + var image_key = qtn.CategoryQuestionId + '_ImageName1'; + var image_key_path = qtn.CategoryQuestionId + '_ImagePath1'; + QD[image_key] = filename; + extraLabel = 'Qtn Id: ' + qtn.CategoryQuestionId; + } + else if (cameraType == '3') { + var image_key = 'NAImage1'; + var image_key_path = 'NAImage1Path'; + wind[image_key] = filename; + extraLabel = 'Not Exist'; + } + else { + var WindowSplits = wind.WindowSplits || []; + var image_key = type == '1' ? 'Image1Name' : 'Image2Name'; + var image_key_path = type == '1' ? 'Image1' : 'Image2'; + splitItem[image_key] = filename; + extraLabel = type == '1' ? camera1Label : camera2Label; + } + + const mark_text1 = calculate_tym_date_over_img; + const mark_text2 = 'Store Name:' + storeData.StoreName + ' | Store Id:' + storeData.StoreId + ' | User Id:' + storeData.EmpId + ' | CatName:' + window.CategoryName + "(" + window.CategoryDefinitionId + ")" + (extraLabel != '' ? ' (' + extraLabel + ')' : '') + ' | Image Type: ' + currentMenu.MenuName + ' | Date:' + calculate_tym_date_over_img; + console.log(mark_text1 + "\n" + mark_text2, "mark_text2"); + + + let imagePath = `${ImageFolderPath + currentMenu.ScreenName}/${filename}`; + RNFS.copyFile(imgurl, imagePath) + .then(async (resn) => { + // render data with clicked image + let uri = 'file://' + imagePath; + if (cameraType == '2') { + QD[image_key_path] = uri; + wind.WindowQA = QD; + wind_index >= 0 ? allData[wind_index] = wind : allData.push(wind); + BgWindowData(allData) + BgUnsavedChanges(true) + setrerenderdata3(!rerenderdata3); + } + else if (cameraType == '3') { + wind[image_key_path] = uri; + wind_index >= 0 ? allData[wind_index] = wind : allData.push(wind); + BgWindowData(allData) + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + else { + console.log('split image updated'); + splitItem[image_key_path] = uri; + splitItemIndex >= 0 ? WindowSplits[splitItemIndex] = splitItem : WindowSplits.push(splitItem); + wind.WindowSplits = WindowSplits; + wind_index >= 0 ? allData[wind_index] = wind : allData.push(wind); + BgWindowData(allData) + BgUnsavedChanges(true) + setrerenderdata2(!rerenderdata2); + } + + let objIndex = InputChange.findIndex((obj => obj.CategoryId == window.CategoryId && obj.CategoryDefinitionId == window.CategoryDefinitionId)); + let winArr = [...InputChange] + winArr[objIndex].Flag = true + setSelectedImg(uri) + setInputChange(winArr) + // add metdata then resize image and restored back to the imagePath + let restore_data = { "destFilePath": imagePath, "imgurl": imgurl, imgWidth, imgHeight, mark_text1, mark_text2 } + let is_restored = await restore_ImageWithMetaData(restore_data, imgdata); + console.log("image restored:", is_restored); + }) + .catch(err => { + console.log('ERROR: image file write failed!!!'); + console.log(err.message, err.code); + }); + } + } + + async function OpenImgModal(imgPath, window, splitItem, splitItemIndex, cameraType) { + setSelectedImg(imgPath) + setShowModal(true); + if ((imgPath != '' && imgPath != null)) { + setShowImageSaveOp(false); + } + else { + setShowImageSaveOp(true); + } + setReCapImgModalObj({ window, splitItem, splitItemIndex, cameraType }) + } + + function cancelImage() { + // setImage1(''); + setSelectedImg(''); + setReCapImgModalObj({}) + setShowModal(false); + } + + async function openCamera(window, splitItem, splitItemIndex, type = '1', cameraType = '1', qtn = {}) { + setErrorField({}); + setError(false); + let GridAllow = cameraType == '1' ? (type === '1' ? (window.CategoryImage1CameraGrid === 'true' || window.CategoryImage1CameraGrid == true) : (window.CategoryImage2CameraGrid === 'true' || window.CategoryImage2CameraGrid == true)) : false + console.log("cat exexc GridAllow:", GridAllow); + setGridValue(GridAllow); + setGetImageProps({ 'window': window, 'splitItem': splitItem, 'splitItemIndex': splitItemIndex, 'type': type, 'cameraType': cameraType, 'qtn': qtn }); + setShowCamera(true); + // props.navigation.navigate('CameraScreen',{'getImage':getImage,'cameraType':'back'}) + } + + async function onSubmitData() { + let isvalid = await validate(); + if (isvalid) { + Keyboard.dismiss(); + setShowAlert(true); + } + } + + async function saveData() { + // setHasUnsavedChanges(false); + BgUnsavedChanges(false) + setShowAlert(false); + setLoaderTitle(ST.SavingData + '...'); + setProcessing(true); + let d1n = new Date(); + let d3 = moment(d1n).format('MM/DD/YYYY'); + try { + let { StoreId, ChainId, StateId, StoreTypeId } = storeData; + await db.transaction(async function (txn) { + + // remove old data + await txn.executeSql(`DELETE FROM ${AppTables.CATEXE_HDR_DATA} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' `, [], async function (txn2, txnres) { + console.log('window hdr data deleted'); + }, function (txnE, txnerr) { console.log(txnerr); },); + await txn.executeSql(`DELETE FROM ${AppTables.CATEXE_CHILD_DATA} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' `, [], async function (txn2, txnres) { + console.log('window child data deleted'); + }, function (txnE, txnerr) { console.log(txnerr); },); + await txn.executeSql(`DELETE FROM ${AppTables.CATEXE_IMAGES} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' `, [], async function (txn2, txnres) { + console.log('window images data deleted'); + }, function (txnE, txnerr) { console.log(txnerr); },); + await txn.executeSql(`DELETE FROM ${AppTables.CATEXE_STOCK_DATA} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' `, [], async function (txn2, txnres) { + console.log('window stock data deleted'); + }, function (txnE, txnerr) { console.log(txnerr); },); + + + + // add data + var values = '', childV = '', imageV = '', stockV = ''; + + for (const wi in globalWindows) { + const window = globalWindows[wi]; + let isImage1 = window.CategoryImage1 == 'true' || window.CategoryImage1 == 1 ? 1 : 0; + let isImage2 = window.CategoryImage2 == 'true' || window.CategoryImage2 == 1 ? 1 : 0; + let isNAImageAvl = window.CategoryNotExistCamera == 'true' || window.CategoryNotExistCamera == 1 ? 1 : 0; + let isNAReasonEnable = window.CategoryNotExistReasonEnable == 'true' || window.CategoryNotExistReasonEnable == 1 ? 1 : 0; + let isReasonEnable = window.CategoryExistReasonEnable == 'true' || window.CategoryExistReasonEnable == 1 ? 1 : 0; + let isStockReq = window.CategoryElementStockRequired == 'true' || window.CategoryElementStockRequired == 1 ? 1 : 0; + let WindowQuestions = window.WindowQuestions || []; + let WindowStocks = window.WindowStocks || []; + + + const wind = WindowData.find(i => i.CategoryId == window.CategoryId && i.CategoryDefinitionId == window.CategoryDefinitionId); + let isPresent = wind.isPresent != null && wind.isPresent != '' ? wind.isPresent : '0'; + let ReasonId = wind.ReasonId != null ? wind.ReasonId : 0; + let Reason = wind.Reason != null ? wind.Reason : ''; + let NAImage1 = wind.NAImage1 != null ? wind.NAImage1 : ''; + let NAImage1Path = wind.NAImage1Path != null ? wind.NAImage1Path : ''; + let remark = wind.remark != null ? wind.remark : ''; + let WindowSplits = wind.WindowSplits || []; + let QD = wind.WindowQA || {}; + let WStocksData = wind.WStocksData || []; + + let CAT_HEADER_ID = 'WIND' + wi + (Math.floor(Math.random() * 1000) + 1); + let { CategoryDefinitionId, CategoryId, CategoryName } = window; + + + values += values != '' ? ' , ' : ''; + values += ` ('${CAT_HEADER_ID}','${StoreId}','${d3}','${CategoryDefinitionId}','${CategoryId}','${CategoryName}','${isPresent}','${NAImage1}','${ReasonId}','${Reason}','${(remark || '')}','${d3}') `; + + if (isPresent == 1) { + for (const qtnIndex in WindowQuestions) { + const qtn = WindowQuestions[qtnIndex]; + + let selansid = '', selanswer = '', selimg = '', showImageTag = false; + let id_key = qtn.CategoryQuestionId + '_AnswerId'; + let ans_key = qtn.CategoryQuestionId + '_Answer'; + let multi_key = qtn.CategoryQuestionId + '_MultiOption'; + let date_key = qtn.CategoryQuestionId + '_Date'; + let img_key = qtn.CategoryQuestionId + '_ImagePath1'; + let imgname_key = qtn.CategoryQuestionId + '_ImageName1'; + let rating_key = qtn.CategoryQuestionId + '_Rating'; + let list_mcdata = []; + let isDisabled = qtn.isDisabled; + + let { CategoryQuestionId, CategoryQuestionCode, QuestionType, CQShowCamera } = qtn + let answer = QD[ans_key] || 0; + let answerId = QD[id_key] == 0 ? 0 : (QD[id_key] || ''); + let multi_options_ids = QD[multi_key] || ''; + + if (qtn.QuestionType == 'Number' || qtn.QuestionType == 'Text' || qtn.QuestionType == 'Decimal' || qtn.QuestionType == 'Date') { + showImageTag = (qtn.CQShowCamera == 1 || qtn.CQShowCamera == 'true'); + } + else if ((qtn.QuestionType == 'Single choice list' || qtn.QuestionType == 'Multi choice list')) { + if (qtn.Answers && qtn.Answers.length > 0) { + for (var i = 0; i < qtn.Answers.length; i++) { + let ansss = qtn.Answers[i]; + let isandImgAl = (ansss.CAShowCamera == 'true' || ansss.CAShowCamera == 1); + if (qtn.QuestionType == 'Single choice list' && (isandImgAl && ansss.AnswerId == answerId)) { + showImageTag = true; + } + else if (qtn.QuestionType == 'Multi choice list' && (isandImgAl && answerId.indexOf(ansss.AnswerId) >= 0)) { + showImageTag = true; + } + + } + } + } + + let Image1 = showImageTag == 1 ? QD[imgname_key] : ''; + + + childV += childV != '' ? ' , ' : ''; + childV += ` ('${CAT_HEADER_ID}','${StoreId}','${d3}','${CategoryDefinitionId}','${CategoryId}','${CategoryQuestionId}','${CategoryQuestionCode}','${QuestionType}','${answer}','${answerId}','${multi_options_ids}','${Image1}','${showImageTag}','${d3}','${isDisabled}') `; + } + for (const splitItemIndex in WindowSplits) { + const splitItem = WindowSplits[splitItemIndex]; + let Image1Name = splitItem['Image1Name'] != null && splitItem['Image1Name'] != '' ? splitItem['Image1Name'] : ''; + let Image2Name = splitItem['Image2Name'] != null && splitItem['Image2Name'] != '' ? splitItem['Image2Name'] : ''; + Image1Name = isImage1 == 1 ? Image1Name : ''; + Image2Name = isImage2 == 1 ? Image2Name : ''; + + imageV += imageV != '' ? ' , ' : ''; + imageV += ` ('${CAT_HEADER_ID}','${StoreId}','${d3}','${CategoryDefinitionId}','${CategoryId}','${Image1Name}','${Image2Name}','${d3}') `; + + } + for (const stockProdIndex in WindowStocks) { + const stockProd = WindowStocks[stockProdIndex]; + let sd = WStocksData.find(i => i.ProductId == stockProd.CategoryStockValue) || {}; + let stock = sd.Stock != null ? sd.Stock : (sd.Stock == 0 ? sd.Stock : ''); + let isCatPresent = sd.isCatPresent != null ? sd.isCatPresent : 0; + let { CategoryStockDefinitionId, CategoryDefinitionId, CategoryStockTable, CategoryStockField, CategoryStockValue, CategoryStockMBQ, ProductName } = stockProd + stockV += stockV != '' ? ' , ' : ''; + stockV += ` ('${CAT_HEADER_ID}','${StoreId}','${d3}','${CategoryDefinitionId}','${CategoryId}','${CategoryStockDefinitionId}','${CategoryStockTable}','${CategoryStockField}','${CategoryStockValue}','${CategoryStockMBQ}','${ProductName}','${stock}','${isCatPresent}','${d3}') `; + } + + } + } + + console.log('values:', values); + + + let add_hdr_data = `INSERT INTO ${AppTables.CATEXE_HDR_DATA} (CAT_HEADER_ID,STORE_ID,VISIT_DATE,CAT_DEFINITION_ID,CAT_ID,CAT_NAME,IS_PRESENT,CATE_NA_IMAGE,REASON_ID,REASON,REMARK,ADDED_DATE) VALUES ${values} `; + let add_child_data = `INSERT INTO ${AppTables.CATEXE_CHILD_DATA} (CAT_HEADER_ID,STORE_ID,VISIT_DATE,CAT_DEFINITION_ID,CAT_ID,QUESTION_ID,QUESTION_CODE,QUESTION_TYPE,ANSWER,ANSWER_ID,MULTI_OPTIONS_IDS,IMAGE1,IMAGE_ALLOW1,ADDED_DATE,IS_DISABLED) VALUES ${childV} `; + let add_images_data = `INSERT INTO ${AppTables.CATEXE_IMAGES} (CAT_HEADER_ID,STORE_ID,VISIT_DATE,CAT_DEFINITION_ID,CAT_ID,IMAGE1,IMAGE2,ADDED_DATE) VALUES ${imageV} `; + let add_stock_data = `INSERT INTO ${AppTables.CATEXE_STOCK_DATA} (CAT_HEADER_ID,STORE_ID,VISIT_DATE,CAT_DEFINITION_ID,CAT_ID,CAT_STOCK_DEFINITION_ID,CAT_STOCK_TABLE,CAT_STOCK_FIELD,CAT_STOCK_VALUE ,CAT_STOCK_MBQ,PRODUCT_NAME,STOCK,IS_CAT_PRESENT,ADDED_DATE) VALUES ${stockV} `; + + + + + await txn.executeSql(add_hdr_data, [], async function (txn2, txnres) { + console.log('st header data added'); + var isSplitImageAdded = true, isStockAdded = true, isChildAdded = true; + if (imageV != '') { + isSplitImageAdded = await executeQuery(add_images_data); + } + if (stockV != '') { + isStockAdded = await executeQuery(add_stock_data); + } + if (childV != '') { + isChildAdded = await executeQuery(add_child_data); + } + + if (!isSplitImageAdded) { + setProcessing(false); notify('Cannot add category execution images'); + } + else if (!isStockAdded) { + setProcessing(false); notify('Cannot add category execution stock data'); + } + else if (!isChildAdded) { + setProcessing(false); notify('Cannot add category execution questions data'); + } + else { + // clear store data in local storage to avoiding re-set data for the store + clear_item('storeData') + setProcessing(false); notify('Category Execution updated successfully'); + props.navigation.goBack(); + } + + }, function (txnE, txnerr) { console.log(txnerr); setProcessing(false); notify('Cannot add category execution data'); },); + }); + } catch (err) { + console.log(err); + } + } + + async function executeQuery(q) { + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + await txn.executeSql(q, [], async function (txn2, txnres2) { + resolve(true); + }, function (Etxn, txnerr) { console.log(txnerr); resolve(false) }); + }); + }).then((val) => { + return val; + }).catch((err) => { + console.log(err); + return false; + }) + } + + // async function validate(){ + // let isValid=true; + + + // let isListedSKUIndex=KPIFields.findIndex(i=>i.KPIFieldName=='ListedSKUCheckbox'); + // let isListedSKUKPIObj=isListedSKUIndex>=0?KPIFields[isListedSKUIndex]:{}; + // let isListedSKUEnable=isListedSKUIndex>=0?isListedSKUKPIObj['KPIFieldEnable']:true; + + // function showError(obj,isErr){ + // setErrorField(obj); + // setError(isErr); + // } + + // return new Promise((resolve,reject)=>{ + + // for (const wi in globalWindows){ + // const window=globalWindows[wi]; + // let isImage1=window.CategoryImage1=='true' || window.CategoryImage1==1?1:0; + // let isImage2=window.CategoryImage2=='true' || window.CategoryImage2==1?1:0; + // let isNAImageAvl=window.CategoryNotExistCamera=='true' || window.CategoryNotExistCamera==1?1:0; + // let isNAReasonEnable=window.CategoryNotExistReasonEnable=='true' || window.CategoryNotExistReasonEnable==1? 1:0; + // let isReasonEnable=window.CategoryExistReasonEnable=='true' || window.CategoryExistReasonEnable==1? 1:0; + // let isStockReq=window.CategoryElementStockRequired=='true' || window.CategoryElementStockRequired==1?1:0; + // let StockQtyRequired=window.StockQtyRequired=='true' || window.StockQtyRequired==1?1:0; + // let WindowQuestions=window.WindowQuestions || []; + // let WindowStocks=window.WindowStocks || []; + + + // const wind=WindowData.find(i=>i.CategoryId==window.CategoryId && i.CategoryDefinitionId==window.CategoryDefinitionId); + // let isPresent=wind.isPresent!=null && wind.isPresent!=''?wind.isPresent:'0'; + // let ReasonId=wind.ReasonId!=null?wind.ReasonId:''; + // let Reason=wind.Reason!=null?wind.Reason:''; + // let NAImage1=wind.NAImage1!=null?wind.NAImage1:''; + // let NAImage1Path=wind.NAImage1Path!=null?wind.NAImage1Path:''; + // let remark=wind.remark!=null?wind.remark:''; + // let WindowSplits=wind.WindowSplits || []; + // let QD=wind.WindowQA || {}; + // let WStocksData=wind.WStocksData || []; + + // let errorobj = {'EF_Window':window}; + + // if(isPresent=='1'){ + // if(isReasonEnable==true && ReasonId=='' ){ + // errorobj['EF_NExistReason']="NExistReason"; + // showError(errorobj,true); + // notify(`${ST.Pleaseselectreasonfor} ${window.CategoryName} `,'LONG'); + // resolve(false);return; + // } + // // else if(remark==''){ + // // notify(`Please enter remark for ${window.CategoryName} `,'LONG'); + // // resolve(false);return; + // // } + // else{ + // if(StoreCameraAllow && window.NoOfSplit>0 && WindowSplits.length>0 && (isImage1==1 || isImage2==1)) + // { + // for(const splitItemIndex in WindowSplits){ + // const splitItem=WindowSplits[splitItemIndex]; + // let Image1Name=splitItem['Image1Name']!=null && splitItem['Image1Name']!=''?splitItem['Image1Name']:''; + // let Image2Name=splitItem['Image2Name']!=null && splitItem['Image2Name']!=''?splitItem['Image2Name']:''; + // console.log('Image2Name',Image2Name,isImage2); + // if(isImage1==1 && Image1Name==''){ + // errorobj['EF_splitImage1']="splitImage1"; + // errorobj['EF_splitItemIndex']=splitItemIndex; + // showError(errorobj,true); + // notify(`${ST.Pleaseclickallimagesfor} ${window.CategoryName}`,'LONG'); + // resolve(false);return; + // } + // else if(isImage2==1 && Image2Name==''){ + // errorobj['EF_splitImage2']="splitImage2"; + // errorobj['EF_splitItemIndex']=splitItemIndex; + // showError(errorobj,true); + // notify(`${ST.Pleaseclickallimagesfor} ${window.CategoryName}`,'LONG'); + // resolve(false);return; + // } + // } + // } + + // if(isStockReq==1){ + // let isProductSelected=false; + // for(const stockProdIndex in WindowStocks){ + // const stockProd=WindowStocks[stockProdIndex]; + + // let sd=WStocksData.find(i=> i.ProductId==stockProd.CategoryStockValue) || {}; + // let stock=sd.Stock!=null?sd.Stock:(sd.Stock==0?sd.Stock:''); + // let isCatPresent=sd.isCatPresent!=null?sd.isCatPresent:0; + + // if(isCatPresent==1){ + // isProductSelected=true; + // } + + // if((isListedSKUEnable==true && isCatPresent==1 && StockQtyRequired==1 && stock=='') || (isListedSKUEnable!=true && (stock==null || stock==''))){ + // errorobj['EF_stock']="input1_"; + // errorobj['EF_stockProd']=stockProd; + // let refIn1=inputRefs.current['input1_'+window.CategoryDefinitionId+'_'+stockProd.CategoryStockDefinitionId]; + // if(refIn1!=null){ + // refIn1.focus(); + // } + // showError(errorobj,true); + // notify(`${ST.Pleaseenterstockfor} ${window.CategoryName} ( ${stockProd.ProductName} ) `,'LONG'); + // resolve(false);return; + // } + + // if(isListedSKUEnable==true && stockProdIndex==WindowStocks.length-1){ + // if(!isProductSelected){ + // errorobj['EF_isProductSelected']="isProductSelected"; + // showError(errorobj,true); + // notify(`${ST.PleaseselectatleastoneSKUfor} ${window.CategoryName} `,'LONG'); + // resolve(false);return; + // } + // } + // } + // } + + // if(WindowQuestions.length>0){ + // for(const qtnIndex in WindowQuestions){ + // const qtn=WindowQuestions[qtnIndex]; + + // let selansid='',selanswer='',selimg='',showImageTag=false; + // let id_key=qtn.CategoryQuestionId+'_AnswerId'; + // let ans_key=qtn.CategoryQuestionId+'_Answer'; + // let multi_key=qtn.CategoryQuestionId+'_MultiOption'; + // let date_key=qtn.CategoryQuestionId+'_Date'; + // let img_key=qtn.CategoryQuestionId+'_ImagePath1'; + // let imgname_key=qtn.CategoryQuestionId+'_ImageName1'; + // let rating_key=qtn.CategoryQuestionId+'_Rating'; + // let list_mcdata=[]; + // errorobj['EF_qtn']=qtn; + + // let isImgAllowed=(qtn.CQShowCamera=='true' || qtn.CQShowCamera==1); + // let checkForAnsKey=(qtn.QuestionType=='Decimal' || qtn.QuestionType=='Number' || qtn.QuestionType=='Text' || qtn.QuestionType=='Date' || qtn.QuestionType=='Rating') ; + // if(qtn.QuestionType=='Single choice list') + // { + // selansid=QD[id_key]; + // } + // else if(qtn.QuestionType=='Multi choice list') + // { + // selansid=QD[multi_key]!=null && QD[multi_key]!=''?QD[multi_key].split(','):[]; + // } + + // let isDisabled=qtn.isDisabled; + // if(!isDisabled){ + // if(qtn.QuestionType=='Multi choice list' && selansid.length<=0){ + // errorobj['EF_Qtn_MultiChoice']='Qtn_MultiChoice'; + // showError(errorobj,true); + // notify(`${Pleaseselectoptionsfortherequiredfield} ${ST.In} ${window.CategoryName}`,'SHORT'); + // resolve(false);return; + // } + // else if( checkForAnsKey && (Object.keys(QD).indexOf(ans_key)<0 || (Object.keys(QD).indexOf(ans_key)>=0 && QD[ans_key]===''))){ + // errorobj['EF_Qtn_Date']='Qtn_Date'; + // showError(errorobj,true); + // let msg=( qtn.QuestionType=='Date'?`${ST.Pleasepickadatefortherequiredfield} ${ST.In} ${window.CategoryName}`:(qtn.QuestionType=='Rating'?`${Pleaseselectratingfortherequiredfield} ${ST.In} ${window.CategoryName}`:`${ST.Pleasefillalltherequiredfield} ${ST.In} ${window.CategoryName}`)); + // notify(msg,'SHORT'); + // resolve(false);return; + // } + // else if(Object.keys(QD).indexOf(id_key)<0 || (Object.keys(QD).indexOf(id_key)>=0 && QD[id_key]==='' )){ + // errorobj['EF_Qtn_Input']='Qtn_Input'; + // showError(errorobj,true); + // notify(`${ST.Pleasefillalltherequiredfield} ${ST.In} ${window.CategoryName}`,'SHORT'); + + // resolve(false);return; + // } + // else if(isImgAllowed && (Object.keys(QD).indexOf(img_key)<0 || (Object.keys(QD).indexOf(img_key)>=0 && QD[img_key]===''))){ + // errorobj['EF_Qtn_Image']='Qtn_Image'; + // showError(errorobj,true); + // notify(`${ST.Pleaseaddimages} ${ST.In} ${window.CategoryName}`,'SHORT'); + // resolve(false);return; + // }else{ + // console.log('no condition found'); + // } + + // if((qtn.QuestionType=='Single choice list' || qtn.QuestionType=='Multi choice list' )){ + // if (qtn.Answers && qtn.Answers.length>0){ + // for(var j=0;j=0)){ + // showImageTag=true; + // } + // } + // } + // } + + // } + + // if(showImageTag && (Object.keys(QD).indexOf(img_key)<0 || (Object.keys(QD).indexOf(img_key)>=0 && QD[img_key]===''))){ + // errorobj['EF_Qtn_Image']='Qtn_Image'; + // showError(errorobj,true); + // notify(`${ST.Pleaseaddimages} ${ST.In} ${window.CategoryName}`,'SHORT'); + // resolve(false);return; + // } + // } + // } + + // } + // } + // else{ + // if(isNAReasonEnable==true && ReasonId=='' ){ + // errorobj['EF_NExistReason']="NExistReason"; + // showError(errorobj,true); + // notify(`${ST.Pleaseselectreasonfor} ${window.CategoryName} `,'LONG'); + // resolve(false);return; + // } + // else if(StoreCameraAllow && isNAImageAvl==true && NAImage1=='' ){ + // errorobj['EF_NExistImage']="NExistImage"; + // showError(errorobj,true); + // notify(`${ST.Pleaseclickimagefor} ${window.CategoryName}`,'LONG'); + // resolve(false);return; + // } + // } + + // if(wi==(Windows.length-1)){ + // resolve(true);return; + // } + + // } + + // }).then((val)=>{return val}) + // .catch((err)=>{console.log(err); return false}); + + // } + + + async function validate() { + let isValid = true; + + let isListedSKUIndex = KPIFields.findIndex(i => i.KPIFieldName == 'ListedSKUCheckbox'); + let isListedSKUKPIObj = isListedSKUIndex >= 0 ? KPIFields[isListedSKUIndex] : {}; + let isListedSKUEnable = isListedSKUIndex >= 0 ? isListedSKUKPIObj['KPIFieldEnable'] : true; + + function showError(obj, isErr) { + setErrorField(obj); + setError(isErr); + } + + return new Promise((resolve, reject) => { + for (const [wi, window] of globalWindows.entries()) { + let isImage1 = window.CategoryImage1 == 'true' || window.CategoryImage1 == 1 ? 1 : 0; + let isImage2 = window.CategoryImage2 == 'true' || window.CategoryImage2 == 1 ? 1 : 0; + let isNAImageAvl = window.CategoryNotExistCamera == 'true' || window.CategoryNotExistCamera == 1 ? 1 : 0; + let isNAReasonEnable = window.CategoryNotExistReasonEnable == 'true' || window.CategoryNotExistReasonEnable == 1 ? 1 : 0; + let isReasonEnable = window.CategoryExistReasonEnable == 'true' || window.CategoryExistReasonEnable == 1 ? 1 : 0; + let isStockReq = window.CategoryElementStockRequired == 'true' || window.CategoryElementStockRequired == 1 ? 1 : 0; + let StockQtyRequired = window.StockQtyRequired == 'true' || window.StockQtyRequired == 1 ? 1 : 0; + let WindowQuestions = window.WindowQuestions || []; + let WindowStocks = window.WindowStocks || []; + + const wind = WindowData.find(i => i.CategoryId == window.CategoryId && i.CategoryDefinitionId == window.CategoryDefinitionId); + let isPresent = wind.isPresent != null && wind.isPresent != '' ? wind.isPresent : '0'; + let ReasonId = wind.ReasonId != null ? wind.ReasonId : ''; + let Reason = wind.Reason != null ? wind.Reason : ''; + let NAImage1 = wind.NAImage1 != null ? wind.NAImage1 : ''; + let NAImage1Path = wind.NAImage1Path != null ? wind.NAImage1Path : ''; + let remark = wind.remark != null ? wind.remark : ''; + let WindowSplits = wind.WindowSplits || []; + let QD = wind.WindowQA || {}; + let WStocksData = wind.WStocksData || []; + + let errorobj = { 'EF_Window': window }; + + if (isPresent == '1') { + if (isReasonEnable == true && ReasonId == '') { + errorobj['EF_NExistReason'] = "NExistReason"; + showError(errorobj, true); + notify(`${ST.Pleaseselectreasonfor} ${window.CategoryName} `, 'LONG'); + resolve(false); + return; + } else { + if (StoreCameraAllow && window.NoOfSplit > 0 && WindowSplits.length > 0 && (isImage1 == 1 || isImage2 == 1)) { + for (const splitItemIndex in WindowSplits) { + const splitItem = WindowSplits[splitItemIndex]; + let Image1Name = splitItem['Image1Name'] != null && splitItem['Image1Name'] != '' ? splitItem['Image1Name'] : ''; + let Image2Name = splitItem['Image2Name'] != null && splitItem['Image2Name'] != '' ? splitItem['Image2Name'] : ''; + if (isImage1 == 1 && Image1Name == '') { + errorobj['EF_splitImage1'] = "splitImage1"; + errorobj['EF_splitItemIndex'] = splitItemIndex; + showError(errorobj, true); + notify(`${ST.Pleaseclickallimagesfor} ${window.CategoryName}`, 'LONG'); + resolve(false); + return; + } else if (isImage2 == 1 && Image2Name == '') { + errorobj['EF_splitImage2'] = "splitImage2"; + errorobj['EF_splitItemIndex'] = splitItemIndex; + showError(errorobj, true); + notify(`${ST.Pleaseclickallimagesfor} ${window.CategoryName}`, 'LONG'); + resolve(false); + return; + } + } + } + + if (isStockReq == 1) { + let isProductSelected = false; + for (const stockProdIndex in WindowStocks) { + const stockProd = WindowStocks[stockProdIndex]; + + let sd = WStocksData.find(i => i.ProductId == stockProd.CategoryStockValue) || {}; + let stock = sd.Stock != null ? sd.Stock : (sd.Stock == 0 ? sd.Stock : ''); + let isCatPresent = sd.isCatPresent != null ? sd.isCatPresent : 0; + + if (isCatPresent == 1) { + isProductSelected = true; + } + + if ((isListedSKUEnable == true && isCatPresent == 1 && StockQtyRequired == 1 && stock == '') || (isListedSKUEnable != true && (stock == null || stock == ''))) { + errorobj['EF_stock'] = "input1_"; + errorobj['EF_stockProd'] = stockProd; + let refIn1 = inputRefs.current['input1_' + window.CategoryDefinitionId + '_' + stockProd.CategoryStockDefinitionId]; + if (refIn1 != null) { + refIn1.focus(); + } + showError(errorobj, true); + notify(`${ST.Pleaseenterstockfor} ${window.CategoryName} ( ${stockProd.ProductName} ) `, 'LONG'); + resolve(false); + return; + } + + if (isListedSKUEnable == true && stockProdIndex == WindowStocks.length - 1) { + if (!isProductSelected) { + errorobj['EF_isProductSelected'] = "isProductSelected"; + showError(errorobj, true); + notify(`${ST.PleaseselectatleastoneSKUfor} ${window.CategoryName} `, 'LONG'); + resolve(false); + return; + } + } + } + } + + if (WindowQuestions.length > 0) { + for (const qtnIndex in WindowQuestions) { + const qtn = WindowQuestions[qtnIndex]; + + // console.log(qtn?.Answers, "question Answers-------------"); + + let selansid = '', selanswer = '', selimg = '', showImageTag = false; + let id_key = qtn.CategoryQuestionId + '_AnswerId'; + let ans_key = qtn.CategoryQuestionId + '_Answer'; + let multi_key = qtn.CategoryQuestionId + '_MultiOption'; + let date_key = qtn.CategoryQuestionId + '_Date'; + let img_key = qtn.CategoryQuestionId + '_ImagePath1'; + let imgname_key = qtn.CategoryQuestionId + '_ImageName1'; + let rating_key = qtn.CategoryQuestionId + '_Rating'; + let list_mcdata = []; + errorobj['EF_qtn'] = qtn; + + // let isImgAllowed = (qtn.CQShowCamera == 'true' || qtn.CQShowCamera == 1); // need to change acc to the ans allow camera + + + let isImgAllowed = false; + + console.log(isImgAllowed, "Beforeeee--------"); + + if (qtn.QuestionType == 'Single choice list') { + selansid = QD[id_key]; + + for (let i = 0; i < qtn.Answers.length; i++) { + if (qtn.Answers[i].AnswerId == selansid) { + isImgAllowed = (qtn.Answers[i].CACameraMandatory == 'true' || qtn.Answers[i].CACameraMandatory == 1); + break; + } + } + + } else if (qtn.QuestionType == 'Multi choice list') { + selansid = QD[multi_key] != null && QD[multi_key] != '' ? QD[multi_key].split(',') : []; + + for (let i = 0; i < qtn.Answers.length; i++) { + if (selansid.indexOf(qtn.Answers[i].AnswerId.toString()) >= 0 && (qtn.Answers[i].CACameraMandatory == 'true' || qtn.Answers[i].CACameraMandatory == 1)) { + isImgAllowed = true; + break; + } + } + } + + console.log(isImgAllowed, "Afterrrrr--------"); + + let checkForAnsKey = (qtn.QuestionType == 'Decimal' || qtn.QuestionType == 'Number' || qtn.QuestionType == 'Text' || qtn.QuestionType == 'Date' || qtn.QuestionType == 'Rating'); + if (qtn.QuestionType == 'Single choice list') { + selansid = QD[id_key]; + } else if (qtn.QuestionType == 'Multi choice list') { + selansid = QD[multi_key] != null && QD[multi_key] != '' ? QD[multi_key].split(',') : []; + } + + let isDisabled = qtn.isDisabled; + if (!isDisabled) { + if (qtn.QuestionType == 'Multi choice list' && selansid.length <= 0) { + errorobj['EF_Qtn_MultiChoice'] = 'Qtn_MultiChoice'; + showError(errorobj, true); + notify(`${ST.Pleaseselectoptionsfortherequiredfield} ${ST.In} ${window.CategoryName}`, 'SHORT'); + resolve(false); + return; + } else if (checkForAnsKey && (Object.keys(QD).indexOf(ans_key) < 0 || (Object.keys(QD).indexOf(ans_key) >= 0 && QD[ans_key] === ''))) { + errorobj['EF_Qtn_Date'] = 'Qtn_Date'; + showError(errorobj, true); + let msg = (qtn.QuestionType == 'Date' ? `${ST.Pleasepickadatefortherequiredfield} ${ST.In} ${window.CategoryName}` : (qtn.QuestionType == 'Rating' ? `${ST.Pleaseselectratingfortherequiredfield} ${ST.In} ${window.CategoryName}` : `${ST.Pleasefillalltherequiredfield} ${ST.In} ${window.CategoryName}`)); + notify(msg, 'SHORT'); + resolve(false); + return; + } else if (Object.keys(QD).indexOf(id_key) < 0 || (Object.keys(QD).indexOf(id_key) >= 0 && QD[id_key] === '')) { + errorobj['EF_Qtn_Input'] = 'Qtn_Input'; + showError(errorobj, true); + notify(`${ST.Pleasefillalltherequiredfield} ${ST.In} ${window.CategoryName}`, 'SHORT'); + resolve(false); + return; + } else if (isImgAllowed && (Object.keys(QD).indexOf(img_key) < 0 || (Object.keys(QD).indexOf(img_key) >= 0 && QD[img_key] === ''))) { + errorobj['EF_Qtn_Image'] = 'Qtn_Image'; + showError(errorobj, true); + notify(`${ST.Pleaseaddimages} ${ST.In} ${window.CategoryName}`, 'SHORT'); + resolve(false); + return; + } else { + console.log('no condition found'); + } + + if ((qtn.QuestionType == 'Single choice list' || qtn.QuestionType == 'Multi choice list')) { + if (qtn.Answers && qtn.Answers.length > 0) { + for (var j = 0; j < qtn.Answers.length; j++) { + let ansss = qtn.Answers[j]; + let isandImgAl = (ansss.CAShowCamera == 'true' || ansss.CAShowCamera == 1); + if (qtn.QuestionType == 'Single choice list' && (isandImgAl && ansss.AnswerId == selansid)) { + showImageTag = true; + } else if (qtn.QuestionType == 'Multi choice list' && (isandImgAl && selansid.indexOf(ansss.AnswerId) >= 0)) { + showImageTag = true; + } + } + } + } + } + + if (showImageTag && (Object.keys(QD).indexOf(img_key) < 0 || (Object.keys(QD).indexOf(img_key) >= 0 && QD[img_key] === ''))) { + errorobj['EF_Qtn_Image'] = 'Qtn_Image'; + showError(errorobj, true); + notify(`${ST.Pleaseaddimages} ${ST.In} ${window.CategoryName}`, 'SHORT'); + resolve(false); + return; + } + } + } + } + } else { + if (isNAReasonEnable == true && ReasonId == '') { + errorobj['EF_NExistReason'] = "NExistReason"; + showError(errorobj, true); + notify(`${ST.Pleaseselectreasonfor} ${window.CategoryName} `, 'LONG'); + resolve(false); + return; + } else if (StoreCameraAllow && isNAImageAvl == true && NAImage1 == '') { + errorobj['EF_NExistImage'] = "NExistImage"; + showError(errorobj, true); + notify(`${ST.Pleaseclickimagefor} ${window.CategoryName}`, 'LONG'); + resolve(false); + return; + } + } + + if (wi == (globalWindows.length - 1)) { + resolve(true); + return; + } + } + }).then((val) => { return val }) + .catch((err) => { console.log(err); return false }); + } + + + function onselectionChange(option, keyLbl, keyVal, otherData) { + setErrorField({}); + setError(false); + let item = otherData.window; + let allData = WindowData; + let defData = { 'CategoryId': item.CategoryId, 'CategoryDefinitionId': item.CategoryDefinitionId }; + const win_index = allData.findIndex(i => i.CategoryId == item.CategoryId && i.CategoryDefinitionId == item.CategoryDefinitionId); + let wind = win_index >= 0 ? (allData[win_index] || defData) : defData; + wind[keyVal] = option.value; + wind[keyLbl] = option.label; + + win_index >= 0 ? allData[win_index] = wind : allData.push(wind); + console.log('allData:', allData); + + let objIndex = InputChange.findIndex(i => i.CategoryId == item.CategoryId && i.CategoryDefinitionId == item.CategoryDefinitionId); + let winArr = [...InputChange] + winArr[objIndex].Flag = true + + setInputChange(winArr) + // setWindowData(allData); + BgWindowData(allData) + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + + function onselectionChange2(option, qtn, window) { + setErrorField({}); + setError(false); + let allData = WindowData; + let defData = { 'CategoryId': window.CategoryId, 'CategoryDefinitionId': window.CategoryDefinitionId }; + const wind_index = allData.findIndex(i => i.CategoryId == window.CategoryId && i.CategoryDefinitionId == window.CategoryDefinitionId); + let wind = wind_index >= 0 ? allData[wind_index] : defData; + let data = wind.WindowQA || {}; + let id_key = qtn.CategoryQuestionId + '_AnswerId'; + let ans_key = qtn.CategoryQuestionId + '_Answer'; + data[id_key] = option.value; + data[ans_key] = option.label; + + + wind['WindowQA'] = data; + wind_index >= 0 ? allData[wind_index] = wind : allData.push(wind); + + let objIndex = InputChange.findIndex(i => i.CategoryId == window.CategoryId && i.CategoryDefinitionId == window.CategoryDefinitionId); + let winArr = [...InputChange] + winArr[objIndex].Flag = true + setInputChange(winArr) + // setWindowData(allData); + BgWindowData(allData) + + let aq_ans = qtn.Answers != null ? qtn.Answers : []; + let ans_obj = aq_ans.find(i => i.AnswerId == option.value) || {}; + let EQtns = ans_obj.CAQuestionEnable != null && ans_obj.CAQuestionEnable != '' ? ans_obj.CAQuestionEnable.replace(' ', '').split(',') : []; + let DQtns = ans_obj.CAQuestionDisable != null && ans_obj.CAQuestionDisable != '' ? ans_obj.CAQuestionDisable.replace(' ', '').split(',') : []; + + let sqtns = window.WindowQuestions || [] + + if (EQtns.length > 0) { + enableQtns(sqtns, EQtns, DQtns, data, wind, wind_index, allData, window) + } + else if (DQtns.length > 0) { + disableQtns(sqtns, DQtns, data, wind, wind_index, allData, window) + } + else { + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + + } + + async function disableQtns(sqtns, DQtns, data, wind = {}, wind_index = -1, allData = [], window = {}) { + + if (DQtns.length > 0) { + new Promise.all( + DQtns.map((qid, q_index) => { + let s_qtnindex = sqtns.findIndex(i => i.CategoryQuestionId == qid) || {}; + let s_qtn = sqtns[s_qtnindex]; + if (s_qtn != null) { + s_qtn['isDisabled'] = true + sqtns[s_qtnindex] = s_qtn; + let id_key = s_qtn.CategoryQuestionId + '_AnswerId'; + let ans_key = s_qtn.CategoryQuestionId + '_Answer'; + data[id_key] = 0; + data[ans_key] = ''; + + wind['WindowQA'] = data; + wind_index >= 0 ? allData[wind_index] = wind : allData.push(wind); + + return false + } else { + return false + } + }) + ).then(async (val) => { + + let allwindows = Windows; + let windowIndex = allwindows.findIndex(i => i.CategoryDefinitionId == window.CategoryDefinitionId && i.CategoryId == window.CategoryId) + if (windowIndex > 0) { + window['WindowQuestions'] = sqtns; + allwindows[windowIndex] = window; + // setWindowData(allData); + BgWindowData(allData) + setWindows(allwindows); + setGlobalWindows(allwindows); + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + + }) + } + } + + async function enableQtns(sqtns, EQtns, DQtns, data, wind = {}, wind_index = -1, allData = [], window = {}) { + new Promise.all( + EQtns.map((qid, q_index) => { + let s_qtnindex = sqtns.findIndex(i => i.CategoryQuestionId == qid) || {}; + let s_qtn = sqtns[s_qtnindex]; + + if (s_qtn != null) { + s_qtn['isDisabled'] = false + sqtns[s_qtnindex] = s_qtn; + return false + } + else { + return false + } + }) + ).then(async (val) => { + if (DQtns.length > 0) { + disableQtns(sqtns, DQtns, data, wind, wind_index, allData, window) + } + else { + let allwindows = Windows; + let windowIndex = allwindows.findIndex(i => i.CategoryDefinitionId == window.CategoryDefinitionId && i.CategoryId == window.CategoryId) + if (windowIndex > 0) { + window['WindowQuestions'] = sqtns; + allwindows[windowIndex] = window; + setWindows(allwindows); + setGlobalWindows(allwindows); + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + } + }) + } + + async function setMultiSelectValue(selectedItems = [], qtn = {}, window = {}) { + setErrorField({}); + setError(false); + console.log('setMultiSelectValue', selectedItems); + let id_key = qtn.CategoryQuestionId + '_AnswerId'; + let ans_key = qtn.CategoryQuestionId + '_Answer'; + let multi_key = qtn.CategoryQuestionId + '_MultiOption'; + + let allData = WindowData; + let defData = { 'CategoryId': window.CategoryId, 'CategoryDefinitionId': window.CategoryDefinitionId }; + const wind_index = allData.findIndex(i => i.CategoryId == window.CategoryId && i.CategoryDefinitionId == window.CategoryDefinitionId); + let wind = wind_index >= 0 ? allData[wind_index] : defData; + let obj = wind.WindowQA || {}; + obj[id_key] = 0; + obj[multi_key] = selectedItems.join(','); + let anss = []; + selectedItems.map((itemValue) => { + let ans = qtn.Answers.find(c1 => c1.AnswerId == itemValue); + if (ans.Answer) { anss.push(ans.Answer) } + }); + obj[ans_key] = anss.join(','); + console.log('obj:', obj); + + wind['WindowQA'] = obj; + wind_index >= 0 ? allData[wind_index] = wind : allData.push(wind); + + let objIndex = InputChange.findIndex(i => i.CategoryId == window.CategoryId && i.CategoryDefinitionId == window.CategoryDefinitionId); + let winArr = [...InputChange] + winArr[objIndex].Flag = true + setInputChange(winArr) + // setWindowData(allData); + BgWindowData(allData) + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + + function setTextValue(value, qtn, window, type = "") { + if (value != '') { + let isValid = validateNumber(value, type); + if (!isValid) { + return; + } + } + setErrorField({}); + setError(false); + let id_key = qtn.CategoryQuestionId + '_AnswerId'; + let ans_key = qtn.CategoryQuestionId + '_Answer'; + + let allData = WindowData; + let defData = { 'CategoryId': window.CategoryId, 'CategoryDefinitionId': window.CategoryDefinitionId }; + const wind_index = allData.findIndex(i => i.CategoryId == window.CategoryId && i.CategoryDefinitionId == window.CategoryDefinitionId); + let wind = wind_index >= 0 ? allData[wind_index] : defData; + let obj = wind.WindowQA || {}; + + if (qtn.QuestionType == 'Date') { + let date_key = qtn.CategoryQuestionId + '_Date'; + let d = value != null ? new Date(value) : new Date(); + let mfdate = moment(d).format('MM/YYYY'); + showQtnDatePicker(qtn, window, false); + obj[id_key] = 0; + obj[ans_key] = mfdate; + obj[date_key] = moment(d).format('MM/DD/YYYY'); + } + else { + obj[id_key] = 0; + obj[ans_key] = value; + } + + console.log(value, obj); + wind['WindowQA'] = obj; + wind_index >= 0 ? allData[wind_index] = wind : allData.push(wind); + + let objIndex = InputChange.findIndex(i => i.CategoryId == window.CategoryId && i.CategoryDefinitionId == window.CategoryDefinitionId); + let winArr = [...InputChange] + winArr[objIndex].Flag = true + setInputChange(winArr) + // setWindowData(allData); + BgWindowData(allData) + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + + function showQtnDatePicker(qtn, window, show = false) { + let allQtns = window.WindowQuestions || []; + let newqtnIndex = allQtns.findIndex(q => q.CategoryQuestionId == qtn.CategoryQuestionId); + + if (newqtnIndex >= 0) { + let newqtn = allQtns[newqtnIndex]; + newqtn.showDatePicker = show; + allQtns[newqtnIndex] = newqtn; + window['WindowQuestions'] = allQtns; + let allWindows = Windows; + const winIndex = allWindows.findIndex(i => i.CategoryId == window.CategoryId && i.CategoryDefinitionId == window.CategoryDefinitionId) || {}; + allWindows[winIndex] = window; + setWindows(allWindows); + setGlobalWindows(allwindows); + if (show == true) setrerenderdata(!rerenderdata); + } + } + + function setRatingValue(data) { + setRatingOrder(data); + } + + function onRatingCancel() { + setShowRating(false); + } + + function onRatingSave() { + setShowRating(false); + let qtn = RatingQtn; + let window = RatingWindow; + let id_key = qtn.CategoryQuestionId + '_AnswerId'; + let ans_key = qtn.CategoryQuestionId + '_Answer'; + let rating_key = qtn.CategoryQuestionId + '_Rating'; + let ids = [], anss = []; + RatingOrder.map((item, index) => { + ids.push(item.AnswerId); + anss.push(item.Answer); + }) + + let allData = WindowData; + let defData = { 'CategoryId': window.CategoryId, 'CategoryDefinitionId': window.CategoryDefinitionId }; + const wind_index = allData.findIndex(i => i.CategoryId == window.CategoryId && i.CategoryDefinitionId == window.CategoryDefinitionId); + let wind = wind_index >= 0 ? allData[wind_index] : defData; + let obj = wind.WindowQA || {}; + + obj[rating_key] = ids.join(','); + obj[id_key] = 0; + obj[ans_key] = anss.join(','); + + wind['WindowQA'] = obj; + wind_index >= 0 ? allData[wind_index] = wind : allData.push(wind); + + + let objIndex = InputChange.findIndex(i => i.CategoryId == window.CategoryId && i.CategoryDefinitionId == window.CategoryDefinitionId); + let winArr = [...InputChange] + winArr[objIndex].Flag = true + + setInputChange(winArr) + // setWindowData(allData); + BgWindowData(allData) + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + + + function onChoiceSelect(item, val, key, animatedChoice) { + let win_index = InputChange.find(i => i.CategoryId == item.CategoryId && i.CategoryDefinitionId == item.CategoryDefinitionId) + let changeValue = win_index.Flag; + if (changeValue) { + setIsPresentClean(val) + setDataCleanAnim(animatedChoice) + setDataCleanItem(item) + setDataCleanModal(true) + return + } + + var val1 = 0; + val == 1 ? val1 = 1 : ''; + + if (animatedChoice != null) { + Animated.timing(animatedChoice, { + toValue: val1, + duration: 400, + useNativeDriver: false, + }).start(); + } + + onWindowDataChange(item, val, key) + } + + function onWindowDataChange(item, val, key) { + + let allData = WindowData; + let defData = { 'CategoryId': item.CategoryId, 'CategoryDefinitionId': item.CategoryDefinitionId }; + const win_index = allData.findIndex(i => i.CategoryId == item.CategoryId && i.CategoryDefinitionId == item.CategoryDefinitionId); + let wind = win_index >= 0 ? (allData[win_index] || defData) : defData; + wind[key] = val; + + if (key == 'ReasonId') { + let rsn = reasons_list.find(r => r.ReasonId == val) || {}; + wind['Reason'] = rsn.Reason || ''; + } + + win_index >= 0 ? allData[win_index] = wind : allData.push(wind); + + if (key != "isPresent") { + let objIndex = InputChange.findIndex((obj => obj.PosmId == item.PosmId && obj.POSMDefinitionId == item.POSMDefinitionId)); + let winArr = [...InputChange] + winArr[objIndex].Flag = true + setInputChange(winArr) + } + + // setWindowData(allData); + BgWindowData(allData) + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + + function onWindowDataClean() { + + if (DataCleanAnim != null) { + let anim = isPresentClean == 1 ? 1 : ''; + Animated.timing(DataCleanAnim, { + toValue: anim, + duration: 400, + useNativeDriver: false, + }).start(); + } + let allData = WindowData; + let WindowSplits = []; + for (var s = 0; s < DataCleanItem.NoOfSplit; s++) { + let obj = { 'Image1Name': '', 'Image1': '', 'Image2Name': '', 'Image2': '' }; + WindowSplits.push(obj); + } + let defData = { 'CategoryId': DataCleanItem.CategoryId, 'CategoryDefinitionId': DataCleanItem.CategoryDefinitionId, 'WindowSplits': WindowSplits, 'WindowQA': {}, 'WStocksData': [], 'isAllSKUChecked': 0, isPresent: isPresentClean }; + const win_index = allData.findIndex(i => i.CategoryId == DataCleanItem.CategoryId && i.CategoryDefinitionId == DataCleanItem.CategoryDefinitionId); + + allData[win_index] = defData + // win_index>=0?allData[win_index]=wind:allData.push(wind); + + let objIndex = InputChange.findIndex((obj => obj.PosmId == DataCleanItem.PosmId && obj.POSMDefinitionId == DataCleanItem.POSMDefinitionId)); + let winArr = [...InputChange] + winArr[objIndex].Flag = false + setInputChange(winArr) + // setWindowData(allData); + BgWindowData(allData) + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setDataCleanModal(false) + setrerenderdata(!rerenderdata); + } + + + async function setWindowStockVal(val, window, stockProd, key, type = '') { + setErrorField({}); + setError(false); + if (type == 'numeric' && val != '') { + const regex = new RegExp(/^\d+$/); + let isNUmeric = regex.test(val); + if (!isNUmeric) { + notify(ST.Pleaseenterwholenumbersonly, 'SHORT'); + return; + } + } + + let allData = WindowData; + let defData = { 'CategoryId': window.CategoryId, 'CategoryDefinitionId': window.CategoryDefinitionId }; + const win_index = allData.findIndex(i => i.CategoryId == window.CategoryId && i.CategoryDefinitionId == window.CategoryDefinitionId); + let wind = win_index >= 0 ? (allData[win_index] || defData) : defData; + let WStocksData = wind['WStocksData'] || []; + let sdIndex = WStocksData.findIndex(i => i.ProductId == stockProd.CategoryStockValue); + let sd = sdIndex >= 0 ? WStocksData[sdIndex] : { 'ProductId': stockProd.CategoryStockValue, 'Stock': '' }; + sd[key] = val; + sdIndex >= 0 ? WStocksData[sdIndex] = sd : WStocksData.push(sd); + wind['WStocksData'] = WStocksData; + win_index >= 0 ? allData[win_index] = wind : allData.push(wind); + if (key == 'isCatPresent') { + let isAllChecked = await verifyAllChecked(val, window, stockProd, key); + wind['isAllSKUChecked'] = isAllChecked; + } + + // setWindowData(allData); + BgWindowData(allData) + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata4(!rerenderdata4); + } + + async function onCatTextChange(window, key, val) { + setErrorField({}); + setError(false); + let item = window; + let allData = WindowData; + let defData = { 'CategoryId': item.CategoryId, 'CategoryDefinitionId': item.CategoryDefinitionId }; + const win_index = allData.findIndex(i => i.CategoryId == item.CategoryId && i.CategoryDefinitionId == item.CategoryDefinitionId); + let wind = win_index >= 0 ? (allData[win_index] || defData) : defData; + wind[key] = val; + + win_index >= 0 ? allData[win_index] = wind : allData.push(wind); + // setWindowData(allData); + BgWindowData(allData) + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + + + async function verifyAllChecked(val, window, stockProd, key) { + return await new Promise((resolve, reject) => { + let WindowStocks = window.WindowStocks || []; + let allData = WindowData; + const win_index = allData.findIndex(i => i.CategoryId == window.CategoryId && i.CategoryDefinitionId == window.CategoryDefinitionId); + let wind = win_index >= 0 ? (allData[win_index] || defData) : defData; + let WStocksData = wind['WStocksData'] || []; + if (WindowStocks.length > 0) { + let isAllChecked = 1; + for (var i = 0; i < WindowStocks.length; i++) { + let stockProd = WindowStocks[i]; + + let sdIndex1 = WStocksData.findIndex(a => a.ProductId == stockProd.CategoryStockValue); + let sd1 = sdIndex1 >= 0 ? WStocksData[sdIndex1] : {}; + let isCatPresent = sd1.isCatPresent; + if (isCatPresent == null || isCatPresent == '' || isCatPresent == 0 || isCatPresent == '0') { + isAllChecked = 0 + } + + if (i == WindowStocks.length - 1) { + resolve(isAllChecked); + } + } + } + else { + resolve(0); + } + + }).catch((err) => { + console.log(err); + return 0; + }); + } + + function checkAllSKUs(val, window) { + + let WindowStocks = window.WindowStocks || []; + let allData = WindowData; + let defData = { 'CategoryId': window.CategoryId, 'CategoryDefinitionId': window.CategoryDefinitionId }; + const win_index = allData.findIndex(i => i.CategoryId == window.CategoryId && i.CategoryDefinitionId == window.CategoryDefinitionId); + let wind = win_index >= 0 ? (allData[win_index] || defData) : defData; + let WStocksData = wind['WStocksData'] || []; + console.log('WStocksData before:', WStocksData) + for (var i = 0; i < WindowStocks.length; i++) { + let stockProd = WindowStocks[i]; + + let sdIndex = WStocksData.findIndex(a => a.ProductId == stockProd.CategoryStockValue); + let sd = sdIndex >= 0 ? WStocksData[sdIndex] : { 'ProductId': stockProd.CategoryStockValue, 'Stock': '' }; + let isCatPresent = (val == 1 || val == '1') ? 1 : 0; + sd['isCatPresent'] = isCatPresent; + + sdIndex >= 0 ? (WStocksData[sdIndex] = sd) : (WStocksData.push(sd)); + } + + wind['WStocksData'] = WStocksData; + wind['isAllSKUChecked'] = val == 1 ? 1 : 0; + console.log('wind updated'); + win_index >= 0 ? allData[win_index] = wind : allData.push(wind); + + // setWindowData(allData); + BgWindowData(allData) + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + + function onSaveCancel() { + setShowAlert(false); + } + + + + function openImageRefView(windowIndex = 0) { + setrefImageIndex(windowIndex); + setShow_zoomImage(true); + } + + function FilterStores(searchedQry) { + searchedQry = searchedQry.toLowerCase(); + console.log('searchedQry', searchedQry); + let arr = []; + let newWindows = []; + if (searchedQry != null && searchedQry != '') { + + for (let i = 0; i < globalWindows.length; i++) { + let item = globalWindows[i]; + let { CategoryName } = item; + if (CategoryName.toLowerCase().includes(searchedQry)) { + newWindows.push(item); + } + + if (i == globalWindows.length - 1) { + arr = newWindows; + } + } + } + else { + arr = globalWindows; + } + + setWindows(arr); + setrerenderdata(!rerenderdata) + setrerenderdata2(!rerenderdata2) + } + + function renderRatingView() { + let qtn = RatingQtn; + let Answers = qtn.Answers; + let id_key = qtn.CategoryQuestionId + '_AnswerId'; + let ans_key = qtn.CategoryQuestionId + '_Answer'; + let rating_key = qtn.CategoryQuestionId + '_Rating'; + + let newarr = RatingOrder; + if (RatingOrder.length <= 0) { + newarr = Answers; + } + + return ( + + + {ST.DragItemsInOrder} + {ST.Pressandholdtodrag} + { setRatingValue(data) }} + keyExtractor={(item) => item.AnswerId} + renderItem={renderItem} + /> + + { onRatingCancel() }}> + {ST.Cancel} + + { onRatingSave() }}> + {ST.Save} + + + + + ) + } + + function render_Picker(label_key, value_key, onChange = () => { }, selected_data = {}) { + var data = []; + let qtn = selected_data.qtn || {}; + let window = selected_data.window || {}; + let EStyle_Qtn_Input = selected_data.EStyle_Qtn_Input || {}; + let isQtnDisabled = qtn.isDisabled != null || qtn.isDisabled != '' ? false : true; + let allAnswers = qtn.Answers || []; + + allAnswers.map((item, index) => { + let obj = { key: index, label: item[label_key], value: item[value_key] }; + if (selected_data.value == item[label_key]) + obj['component'] = {item[label_key]}; + data.push(obj); + }); + + return ( + { onChange(option, qtn, window) }} + overlayStyle={customStyle.addVisPickerOverlay} + cancelContainerStyle={customStyle.addVisPicker_OptionContainerStyle} + optionStyle={customStyle.addvis_opStyle} + optionTextStyle={customStyle.addvis_opTextStyle} + optionContainerStyle={customStyle.addVisPicker_OptionContainerStyle} + selectedKey={'1'} + disabled={isQtnDisabled} + > + {(selected_data.value != null && selected_data.value != '' ? selected_data.value : '-' + ST.select + '-')} + + ) + } + + function renderDatePicker(qtn, window) { + let qtnn = qtn; + let DateRange = qtn.DateRange; + let maxDate = moment().add(10, 'years').format('MM/DD/YYYY'); + let minDate = moment().subtract(10, 'years').format('MM/DD/YYYY'); + if (DateRange == 'RFD') { + maxDate = moment().format('MM/DD/YYYY'); + } + else if (DateRange == 'RPD') { + minDate = moment().format('MM/DD/YYYY'); + } + + return ( + { setTextValue(selectedDate, qtnn, window) }} + maximumDate={new Date(maxDate)} + minimumDate={new Date(minDate)} + /> + ); + } + + + function _OpenCaptureImage_Modal(img) { + + const isImageCap = (img != '' || img != null) ? true : false; + let { window, splitItem, splitItemIndex, cameraType } = reCapImgModalObj + let camera2Label = (window && window.PromoImage2Lable) || ''; + return ( + + { + isImageCap && + + + + + + { openCamera(window, splitItem, splitItemIndex, cameraType) }}> + + + + {!showImageSaveOp && + { cancelImage(false) }}> + + {ST.Close} + + } + + } + + ) + } + + + function _renderWindow() { + let RemarkEnableIndex = KPIFields.findIndex(i => i.KPIFieldName == 'RemarkEnable') + let RemarkEnableKPIObj = RemarkEnableIndex >= 0 ? KPIFields[RemarkEnableIndex] : {}; + let RemarkEnable = RemarkEnableIndex >= 0 ? RemarkEnableKPIObj['KPIFieldEnable'] : false; + + let isListedSKUIndex = KPIFields.findIndex(i => i.KPIFieldName == 'ListedSKUCheckbox'); + let isListedSKUKPIObj = isListedSKUIndex >= 0 ? KPIFields[isListedSKUIndex] : {}; + let isListedSKUEnable = isListedSKUIndex >= 0 ? isListedSKUKPIObj['KPIFieldEnable'] : true; + + return ( + `window_${index.toString()}`} + renderItem={({ item, index }) => { + const window = item; + let windowIndex = index; + + let isImage1 = window.CategoryImage1 == 'true' || window.CategoryImage1 == 1 ? 1 : 0; + let isImage2 = window.CategoryImage2 == 'true' || window.CategoryImage2 == 1 ? 1 : 0; + let isNAImageAvl = window.CategoryNotExistCamera == 'true' || window.CategoryNotExistCamera == 1 ? 1 : 0; + let isNAReasonEnable = window.CategoryNotExistReasonEnable == 'true' || window.CategoryNotExistReasonEnable == 1 ? 1 : 0; + let isReasonEnable = window.CategoryExistReasonEnable == 'true' || window.CategoryExistReasonEnable == 1 ? 1 : 0; + let isStockReq = window.CategoryElementStockRequired == 'true' || window.CategoryElementStockRequired == 1 ? 1 : 0; + let StockQtyRequired = window.StockQtyRequired == 'true' || window.StockQtyRequired == 1 ? 1 : 0; + let PromoTitleEnable = window.PromoDefinitionTitleEnable == 'true' || window.PromoDefinitionTitleEnable == 1 ? 1 : 0; + let CategoryRefImagePopUp = window.CategoryRefImagePopUp == 'true' || window.CategoryRefImagePopUp == true ? true : false; + + let PromoTitle = window.PromoDefinitionTitle != null && window.PromoDefinitionTitle != 'undefined' ? window.PromoDefinitionTitle : ""; + + let isVisible = Boolean(ItemsInView.find(({ item: i, isViewable }) => i.CategoryId == window.CategoryId && i.CategoryDefinitionId == window.CategoryDefinitionId && isViewable)) + // console.log("RenderItemList ItemsInView2:",index,isVisible) + + // let isStock_CheckAssrt=window.CategoryElementCheckAssortment=='true' || window.CategoryElementCheckAssortment==1?1:0; + let RefImage = window.CategoryRefImage; + let camera1Label = window.CategoryImage1Lable || ''; + let camera2Label = window.CategoryImage2Lable || ''; + let WindowQuestions = window.WindowQuestions || []; + let WindowStocks = window.WindowStocks || []; + + + const wind = WindowData.find(i => i.CategoryId == window.CategoryId && i.CategoryDefinitionId == window.CategoryDefinitionId); + let isPresent = wind.isPresent != null && wind.isPresent != '' ? wind.isPresent : '0'; + let ReasonId = wind.ReasonId != null ? wind.ReasonId : ''; + let Reason = wind.Reason != null ? wind.Reason : ''; + let NAImage1 = wind.NAImage1 != null ? wind.NAImage1 : ''; + let NAImage1Path = wind.NAImage1Path != null ? wind.NAImage1Path : ''; + let remark = wind.remark != null ? wind.remark : ''; + let WindowSplits = wind.WindowSplits || []; + let QuestionsData = wind.WindowQA || {}; + let WStocksData = wind.WStocksData || []; + let isAllSKUChecked = wind.isAllSKUChecked == 1 || wind.isAllSKUChecked == "1"; + + // console.log('camera2Label:',window.CategoryId,window.CategoryDefinitionId,camera2Label); + + + var xpos = isPresent == '1' || isPresent == 1 ? -75 : 0; + if (window.animatedChoice != null) { + xpos = window.animatedChoice.interpolate({ + inputRange: [0, 1], + outputRange: [0, -75], + }); + } + + if (isVisible && window.animatedHeight != null) { + setTimeout(() => { + Animated.timing(window.animatedHeight, { + toValue: 0, + duration: 800, + useNativeDriver: false, + }).start(); + // animHight=window.animatedHeight.interpolate({ + // inputRange:[100,0], + // outputRange:["100%","0%"], + // }); + }, (props.RefImagePopUpTime || 0) * 1000) + } + + let EF_Window = errorfield.EF_Window != null ? errorfield.EF_Window : {}; + let show_errorhere = error == true && EF_Window.CategoryId == window.CategoryId && EF_Window.CategoryDefinitionId == window.CategoryDefinitionId; + // if not Present fields + + // this will show error field in red (if window is present and exist reason is enabled and not filled ) or (if window is not present and Not exist reason is enabled and not filled ) + let EF_NExistReason = errorfield.EF_NExistReason || ''; + let EStyle_NExistReason = show_errorhere && EF_NExistReason == 'NExistReason' ? customStyle.stk_inptSTyle_error : {}; + + let EF_NExistImage = errorfield.EF_NExistImage || ''; + let EStyle_NExistImage = show_errorhere && EF_NExistImage == 'NExistImage' ? customStyle.error_CatImage2 : {}; + + + return ( + + + + {window.CategoryName} + {(PromoTitleEnable == 1 && PromoTitle != null && PromoTitle != '') && {PromoTitle}} + { openImageRefView(windowIndex) }}> + + + + + {CategoryRefImagePopUp && + + + } + + + + {ST.IsPresent} + + + + { onChoiceSelect(window, 1, 'isPresent', window.animatedChoice) }}> + {ST.Yes} + + { onChoiceSelect(window, 0, 'isPresent', window.animatedChoice) }}> + {ST.No} + + + + + {((isPresent != '1' && isNAReasonEnable == true) || (isPresent == '1' && isReasonEnable == true)) && + + {ST.SelectReason} + {} + + } + + + {(isPresent != '1' && isNAImageAvl == true) && + + + + {ST.CaptureImage} + + + + + + {(NAImage1Path == '' || NAImage1Path == null) ? + { openCamera(window, {}, 0, '1', '3') }}> + + : (NAImage1Path != '' && NAImage1Path != null) ? + { OpenImgModal(NAImage1Path, window, {}, 0, '1', '3') }}> + + : null + } + + + + + + } + + {console.log("isPresent-----", isPresent, window.CategoryName, WindowQuestions.length)} + + {(isPresent == '1') && + + + {(isStockReq == true && WindowStocks.length > 0) && + + + {(isListedSKUEnable == true ? ST.SelectProducts : 'Enter Stocks')} + + {isListedSKUEnable == true && + + { checkAllSKUs((isAllSKUChecked == 1 ? 0 : 1), window) }}> + { let val1 = (val == true) ? 1 : 0; checkAllSKUs(val1, window) }} + style={[customStyle.WStkHdr_checkbox, (Platform.OS == 'ios' ? { height: 20, width: 20, marginLeft: 5 } : {})]} + tintColors={{ true: PageTheme.$primary_color, false: PageTheme.$text_color_light }} + /> + {ST.SelectAll} + + } + `wstock_${index.toString()}`} + renderItem={({ item, index }) => { + let stockProd = item; + let stockProdIndex = index; + let sd = WStocksData.find(i => i.ProductId == stockProd.CategoryStockValue) || {}; + let stock = sd.Stock != null ? sd.Stock : ''; + let isCatPresent = sd.isCatPresent != null ? sd.isCatPresent : 0; + + // highlight prd errors + let EF_stockProd = errorfield.EF_stockProd != null ? errorfield.EF_stockProd : {}; + let showPrdErrHere = EF_stockProd.CategoryStockDefinitionId == stockProd.CategoryStockDefinitionId; + + let EF_stock = errorfield.EF_stock || ''; + let EStyle_StockInput = show_errorhere && showPrdErrHere && EF_stock == 'input1_' ? customStyle.stk_inptSTyle_error : {}; + + + return ( + + {isListedSKUEnable != true && {stockProd.ProductName}} + {isListedSKUEnable == true && + + + { let val1 = (val == true) ? 1 : 0; setWindowStockVal(val1, window, stockProd, 'isCatPresent') }} + style={[customStyle.WStkHdr_checkbox, (Platform.OS == 'ios' ? { height: 20, width: 20, marginTop: 5, marginLeft: 5, } : {})]} + tintColors={{ true: PageTheme.$primary_color, false: PageTheme.$text_color_light }} + /> + + {stockProd.ProductName} + } + {((isListedSKUEnable == true && StockQtyRequired == 1 && isCatPresent == 1) || isListedSKUEnable != true) && + + + + Stock + + + + { inputRefs.current['input1_' + stockProd.CategoryDefinitionId + '_' + stockProd.CategoryStockDefinitionId] = reff; }} + placeholder="" + autoComplete='off' + placeholderTextColor={PageTheme.$placeholder_color} + keyboardType={'number-pad'} + returnKeyType={(Platform.OS === 'ios') ? 'done' : 'next'} + blurOnSubmit={false} + value={stock + ''} + onSubmitEditing={() => { focusToNext(WindowStocks, windowIndex, stockProd, index) }} + onChangeText={(val) => { setWindowStockVal(val, window, stockProd, 'Stock', 'numeric') }} + /> + + + + } + + ); + }} + /> + + } + {(window.NoOfSplit > 0 && WindowSplits.length > 0 && (isImage1 == 1 || isImage2 == 1)) && + + + {'Category Execution Images'} + + `spliItem_${index.toString()}`} + renderItem={({ item, index }) => { + let splitItem = item; + let splitItemIndex = index; + let Image1Name = splitItem['Image1Name'] != null && splitItem['Image1Name'] != '' ? splitItem['Image1Name'] : ''; + let Image2Name = splitItem['Image2Name'] != null && splitItem['Image2Name'] != '' ? splitItem['Image2Name'] : ''; + let Image1 = splitItem['Image1'] != null && splitItem['Image1'] != '' ? splitItem['Image1'] : ''; + let Image2 = splitItem['Image2'] != null && splitItem['Image2'] != '' ? splitItem['Image2'] : ''; + // let isImg1mad=splitItem['img1Required'] || false; + // let isImg2mad=splitItem['img2Required'] || false; + + + let isImg1mad = splitItem['img1Required'] || true; + let isImg2mad = splitItem['img2Required'] || true; + + + + // highlight split image box + let EF_splitItemIndex = errorfield.EF_splitItemIndex || ''; + let showSplitItemErrHere = EF_splitItemIndex == splitItemIndex; + + let EF_splitImage1 = errorfield.EF_splitImage1 || ''; + let EStyle_splitImage1 = show_errorhere && showSplitItemErrHere && EF_splitImage1 == 'splitImage1' ? customStyle.error_CatImage2 : {}; + + let EF_splitImage2 = errorfield.EF_splitImage2 || ''; + let EStyle_splitImage2 = show_errorhere && showSplitItemErrHere && EF_splitImage2 == 'splitImage2' ? customStyle.error_CatImage2 : {}; + + + return ( + + {isImage1 == 1 && + + + {console.log("imagemadate---", isImg1mad)} + + {((Image1 == '' || Image1 == null) && isImg1mad) ? + { openCamera(window, splitItem, splitItemIndex, '1') }}> + + + : (Image1 == '' || Image1 == null) ? + { openCamera(window, splitItem, splitItemIndex, '1') }}> + + : (Image1 != '' || Image1 != null) ? + + { OpenImgModal(Image1, window, splitItem, splitItemIndex, '1') }}> + + : null + } + {camera1Label} + + } + {isImage2 == 1 && + + + {((Image2 == '' || Image2 == null) && isImg2mad) ? + { openCamera(window, splitItem, splitItemIndex, '2') }}> + + : (Image2 == '' || Image2 == null) ? + { openCamera(window, splitItem, splitItemIndex, '2') }}> + + : (Image2 != '' || Image2 != null) ? + { OpenImgModal(Image2, window, splitItem, splitItemIndex, '2') }}> + + : null + } + {camera2Label} + + } + + ); + }} + /> + + } + + {(WindowQuestions.length > 0) && + + + {'Category Execution Questions'} + + {WindowQuestions.map((item, index) => { + let qtn = item; + let qtnIndex = index; + let selansid = '', selanswer = '', selimg = '', showImageTag = false; + let id_key = qtn.CategoryQuestionId + '_AnswerId'; + let ans_key = qtn.CategoryQuestionId + '_Answer'; + let multi_key = qtn.CategoryQuestionId + '_MultiOption'; + let date_key = qtn.CategoryQuestionId + '_Date'; + let img_key = qtn.CategoryQuestionId + '_ImagePath1'; + let imgname_key = qtn.CategoryQuestionId + '_ImageName1'; + let rating_key = qtn.CategoryQuestionId + '_Rating'; + + let list_mcdata = []; + let CQDefaultQuestionEnable = qtn.CQDefaultQuestionEnable == 'true' || qtn.CQDefaultQuestionEnable == 1 || qtn.CQDefaultQuestionEnable == '1' ? true : false; + let isDisabled = qtn.isDisabled; + if (qtn.QuestionType == 'Single choice list') { + selansid = QuestionsData[id_key] != null ? QuestionsData[id_key] : ''; + selanswer = QuestionsData[ans_key] != null ? QuestionsData[ans_key] : ''; + } + else if (qtn.QuestionType == 'Multi choice list') { + if (qtn.Answers != null) { + for (var i = 0; i < qtn.Answers.length; i++) { + let obj = { 'AnswerId': parseInt(qtn.Answers[i].AnswerId), 'Answer': qtn.Answers[i].Answer }; + list_mcdata.push(obj); + } + } + selansid = QuestionsData[multi_key] != null && QuestionsData[multi_key] != '' ? QuestionsData[multi_key].split(',') : []; + // if(selansid!=null && selansid.length>0){ + // let arr=[]; + // for(var i=0;i 0) { + for (var i = 0; i < qtn.Answers.length; i++) { + let ansss = qtn.Answers[i]; + let isandImgAl = (ansss.CAShowCamera == 'true' || ansss.CAShowCamera == 1); + + if (qtn.QuestionType == 'Single choice list' && (isandImgAl && ansss.AnswerId == selansid)) { + showImageTag = true; + } + else if (qtn.QuestionType == 'Multi choice list' && (isandImgAl && selansid.indexOf(ansss.AnswerId) >= 0)) { + showImageTag = true; + } + + } + } + } + + if (showImageTag) { + selimg = QuestionsData[img_key] != null && QuestionsData[img_key] != '' ? 'file://' + QuestionsData[img_key] : ''; + } + + let EF_qtn = errorfield.EF_qtn != null ? errorfield.EF_qtn : {}; + let showQtnErrHere = EF_qtn.CategoryQuestionId == qtn.CategoryQuestionId; + //Qtn_MultiChoice + let EF_Qtn_MultiChoice = errorfield.EF_Qtn_MultiChoice || ''; + let EStyle_Qtn_MultiChoice = show_errorhere && showQtnErrHere && EF_Qtn_MultiChoice == 'Qtn_MultiChoice' ? customStyle.stk_MultiSSTyle_error : customStyle.wind_MultiSearchInputStyle; + + + let EF_Qtn_Date = errorfield.EF_Qtn_Date || ''; + let EStyle_Qtn_Date = show_errorhere && showQtnErrHere && EF_Qtn_Date == 'Qtn_Date' ? customStyle.stk_inptSTyle_error : {}; + + let EF_Qtn_Input = errorfield.EF_Qtn_Input || ''; + let EStyle_Qtn_Input = show_errorhere && showQtnErrHere && EF_Qtn_Input == 'Qtn_Input' ? customStyle.stk_inptSTyle_error : {}; + + let EF_Qtn_Image = errorfield.EF_Qtn_Image || ''; + let EStyle_Qtn_Image = show_errorhere && showQtnErrHere && EF_Qtn_Image == 'Qtn_Image' ? customStyle.stk_inptSTyle_error : {}; + + if (!isDisabled) { + return ( + + {qtn.CategoryQuestionName} + {qtn.QuestionType == 'Single choice list' && qtn.Answers && + render_Picker('Answer', 'AnswerId', onselectionChange2, { value: selanswer, qtn: qtn, window: window, EStyle_Qtn_Input }) + } + {qtn.QuestionType == 'Multi choice list' && qtn.Answers && + { setMultiSelectValue(selectedItems, qtn, window) }} //setMultiSelectValue(selectedItems,qtn) + selectedItems={selansid} + selectText="Pick Items" + searchInputPlaceholderText={ST.SearchItems + "..."} + // onChangeInput={ (text)=> console.log(text)} + tagRemoveIconColor={PageTheme.$primary_color} + tagBorderColor={PageTheme.$primary_color} + tagTextColor={PageTheme.$primary_color} + selectedItemTextColor={PageTheme.$primary_color} + selectedItemIconColor={PageTheme.$primary_color} + itemTextColor={PageTheme.$text_color} + displayKey="Answer" + searchInputStyle={EStyle_Qtn_MultiChoice} + submitButtonColor={PageTheme.$primary_color} + submitButtonText={ST.Submit} + /> + } + {(qtn.QuestionType == 'Number' || qtn.QuestionType == 'Decimal' || qtn.QuestionType == 'Text') && + { setTextValue(val, qtn, window, (qtn.QuestionType == 'Decimal' ? 'decimal' : (qtn.QuestionType == 'Text' ? 'text' : 'numeric'))) }} + /> + } + { + (qtn.QuestionType == 'Date') && + + {selansid != '' ? selansid : 'MM/YYYY'} + { setDateValue(selanswer); showQtnDatePicker(qtn, window, true) }}> + + + + } + {((qtn.showDatePicker == true || qtn.showDatePicker == 'true') && (qtn.QuestionType == 'Date')) && + renderDatePicker(qtn, window) + } + { + (qtn.QuestionType == 'Rating') && + + {selanswer} + { setRatingQtn(qtn); setRatingWindow(window); setShowRating(true); }}> + + + + } + + { + // (qtn.QuestionType=='Audio') && + // + // {selanswer} + // {show_recorder(qtn);}}> + // + // + // + } + + { + showImageTag && + + + { openCamera(window, {}, 0, '1', '2', qtn) }}> + + + + } + + + + ) + } + else { + return null + } + })} + + } + {RemarkEnable == true && + + {ST.Remark} + { onCatTextChange(window, 'remark', val) }} + /> + + } + + + } + + + + + + + ); + }} + /> + ) + } + + function _renderHeader(currentIndex) { + return ( + + {`${(currentIndex + 1)}/${zoomImageUrl.length}`} + { setShow_zoomImage(false) }}> + + + + ) + } + + const onCancelClean = () => { + setDataCleanModal(false) + } + const onclear = () => { + onWindowDataClean(DataCleanItem) + } + + return ( + + {processing && } + + {_OpenCaptureImage_Modal()} + {ConfirmSaveAlert(props, showAlert, onSaveCancel, saveData)} + {ConfirmSaveAlert(props, DataCleanModal, onCancelClean, onclear, 'Your data will be clean',)} + { setShowCamera(false); getImage(imgData) }} showCamera={showCamera} onHideCamera={() => { setShowCamera(false); }} /> + + + + + { setSearchedItem(val); FilterStores(val) }} + /> + { FilterStores(searchedItem) }}> + + + + {Object.keys(storeData).length > 0 && + + {_renderWindow()} + + } + + { onSubmitData() }} /> + + + + + {showRating == true && + renderRatingView() + } + {show_zoomImage && + + null} + /> + + } + + ); +} + + +export default connect(mapStateToProps, mapDispatchToProps)(CategoryExec); \ No newline at end of file diff --git a/PerformicsSrc/src/screens/ChangePassword.js b/PerformicsSrc/src/screens/ChangePassword.js new file mode 100644 index 0000000..cf6f893 --- /dev/null +++ b/PerformicsSrc/src/screens/ChangePassword.js @@ -0,0 +1,349 @@ +import React, { useState, useEffect } from 'react'; +import { useRoute } from '@react-navigation/native'; +import { Platform, View, TextInput, Text, StyleSheet, TouchableOpacity, ScrollView } from 'react-native'; +import { connect } from 'react-redux'; +import GradientButton from '../components/gradientButton'; +import LinearGradient from 'react-native-linear-gradient'; +import CustomHeader from '../components/customHeader'; +import { mapStateToProps, mapDispatchToProps } from '../reducers/contextProvider'; +import { customeButtons, customStyles, GetPageTheme } from "../styles/Global"; +import Container from '../components/container'; +import { MaterialCommunityIcons, AntDesign } from '../components/icons'; +import { notify } from '../components/notify'; +import { get_item } from '../components/localStorage'; +import { METHODS, getMethodName } from '../constants/methodNames'; +import { changepassword } from '../controller/functions'; +import CustomLoader from '../components/CustomLoader'; + +function ChangePassword(props) { + const route = useRoute(); + const PageTheme = GetPageTheme(props.DarkTheme, route.name); + const customeButton = customeButtons(props.DarkMode, route.name); + const customStyle = customStyles(props.DarkMode, route.name); + + const [state, setState] = useState({ + oldpassword: '', + newpassword: '', + confirmpassword: '', + lengthCheck: false, + uppercaseCheck: false, + lowercaseCheck: false, + numberCheck: false, + specialCharCheck: false, + invalidCharCheck: false + }); + + const [showOldPassword, setShowOldPassword] = useState(false); + const [showNewPassword, setShowNewPassword] = useState(false); + const [showConfirmPassword, setShowConfirmPassword] = useState(false); + + const validatePassword = (password) => { + const lengthCheck = /^.{8,20}$/; + const uppercaseCheck = /[A-Z]/; + const lowercaseCheck = /[a-z]/; + const numberCheck = /[0-9]/; + const specialCharCheck = /[!@#$%\-_]/; + const invalidCharCheck = /[^a-zA-Z0-9!@#$%\-_]/; + + const isLengthValid = lengthCheck.test(password); + const isUppercaseValid = uppercaseCheck.test(password); + const isLowercaseValid = lowercaseCheck.test(password); + const isNumberValid = numberCheck.test(password); + const isSpecialCharValid = specialCharCheck.test(password); + const isInvalidCharPresent = invalidCharCheck.test(password); + + setState((prevState) => ({ + ...prevState, + lengthCheck: isLengthValid, + uppercaseCheck: isUppercaseValid, + lowercaseCheck: isLowercaseValid, + numberCheck: isNumberValid, + specialCharCheck: isSpecialCharValid, + invalidCharCheck: isInvalidCharPresent, + })); + + return isLengthValid && isUppercaseValid && isLowercaseValid && isNumberValid && isSpecialCharValid && !isInvalidCharPresent; + }; + + const validate = () => { + const { oldpassword, newpassword, confirmpassword } = state; + + if (!oldpassword.trim()) return false; + if (!newpassword.trim()) return false; + if (!validatePassword(newpassword)) return false; + if (!confirmpassword.trim()) return false; + if (newpassword !== confirmpassword) return false; + + return true; + }; + + const [submitButtonColor, setSubmitButtonColor] = useState(['#B2BEB5', '#A9A9A9', '#808080']); + const [processing, setProcessing] = useState(false); + + const handleSubmit = () => { + const { oldpassword, newpassword, confirmpassword } = state; + + if (!oldpassword.trim()) { + notify('Please enter old password', 'SHORT'); + return; + } + + if (!newpassword.trim()) { + notify('Please enter new password', 'SHORT'); + return; + } + + if (!validatePassword(newpassword)) { + notify('New password must be 8-20 characters long and include uppercase, lowercase, numbers, and special characters (!, @, #, $, %, -, _) and no other special characters', 'SHORT'); + return; + } + + if (!confirmpassword.trim()) { + notify('Please enter confirm password', 'SHORT'); + return; + } + + if (newpassword !== confirmpassword) { + notify('New password and confirm password do not match', 'SHORT'); + return; + } + + setSubmitButtonColor([PageTheme.$secondary_color_light, PageTheme.$gradient2, PageTheme.$primary_color]); + + ConfirmPassword(); + // Proceed with the password change logic + }; + + useEffect(() => { + validatePassword(state.newpassword); + }, [state.newpassword]); + + useEffect(() => { + if (validate()) { + setSubmitButtonColor([PageTheme.$secondary_color_light, PageTheme.$gradient2, PageTheme.$primary_color]); + } else { + setSubmitButtonColor(['#B2BEB5', '#A9A9A9', '#808080']); + } + }, [state.confirmpassword, state.newpassword]); + + const getValidationStatus = (check, input) => { + if (!input.trim()) { + return { color: '#000', icon: 'exclamationcircle', iconColor: '#000' }; + } + return check + ? { color: 'green', icon: 'checkcircle', iconColor: 'green' } + : { color: 'red', icon: 'closecircle', iconColor: '#ff0000' }; + }; + + const ValidationMessage = ({ check, message }) => { + const status = getValidationStatus(check, state.newpassword); + return ( + + + {message} + + ); + }; + + const ConfirmPassword = async () => { + const { oldpassword, newpassword, confirmpassword } = state; + setProcessing(true); + + let projectInfo = await get_item('projectInfo'); + let projectDetails = projectInfo != null ? JSON.parse(projectInfo) : {}; + let loginInfo = await get_item('loginInfo'); + const loginDetails = JSON.parse(loginInfo); + let baseurl = projectDetails.baseURL || ''; + + const method_name = getMethodName(METHODS.CHANGEPASSWORD_METHOD); + const url = baseurl + method_name; + const data = { un: loginDetails?.UserId, oldp: oldpassword, newp: newpassword, confirmp: confirmpassword }; + console.log(url, data) + await changepassword(url, data) + .then(async (res) => { + setProcessing(false); + if (res != "Success") { + notify(res, 'SHORT') + } + else if (res == "Success") { + notify('Password change successfully.', 'SHORT'); + props.navigation.reset({ index: 0, routes: [{ name: 'Login' }] }); + } + else if (res.networkErr && res.error) { + notify('Please connect to internet-' + res.error, 'SHORT'); + } + else if (!res.false && res.error) { + notify(res.error, 'SHORT'); + } + + }) + .catch((err) => { + setProcessing(false); + console.log('onPage change password error1', err); + }); + + } + + const handlePasswordChange = (val) => { + const invalidCharCheck = /[^a-zA-Z0-9!@#$%\-_]/; + + if (invalidCharCheck.test(val)) { + notify('Invalid character entered', 'SHORT'); + } else { + setState({ ...state, newpassword: val }); + } + }; + + return ( + + + {processing && } + + + + + + setState({ ...state, oldpassword: val })} + /> + + setShowOldPassword(!showOldPassword)} + > + + + + + handlePasswordChange(val)} + /> + + setShowNewPassword(!showNewPassword)} + > + + + + + setState({ ...state, confirmpassword: val })} + /> + + setShowConfirmPassword(!showConfirmPassword)} + > + + + + + + + + + + + + {state.invalidCharCheck && } + + + + + + Submit + + + + + + + + ); +} + +export default connect(mapStateToProps, mapDispatchToProps)(ChangePassword); + +const styles = StyleSheet.create({ + pageContent: { + backgroundColor: '#fff', + paddingTop: 0, + }, + validationMessage: { + paddingHorizontal: 40, + paddingTop: 10, + flexDirection: 'row', + }, + footerView: { + marginTop: 20, + alignItems: 'center', + }, + eyeIcon: { + position: 'absolute', + right: 0, + width: 50, + height: 50, + alignItems: 'center', + justifyContent: 'center' + }, +}); diff --git a/PerformicsSrc/src/screens/CheckInDistributor.js b/PerformicsSrc/src/screens/CheckInDistributor.js new file mode 100644 index 0000000..4cdad0d --- /dev/null +++ b/PerformicsSrc/src/screens/CheckInDistributor.js @@ -0,0 +1,562 @@ +import React,{useState,useEffect} from 'react'; +import Container from '../components/container'; +import { useRoute } from '@react-navigation/native'; +import { globalStyles,customStyles,GetPageTheme, WP } from "../styles/Global"; +import {Image,View,Text,ScrollView,TouchableOpacity,Platform,FlatList, DeviceEventEmitter} from 'react-native'; +import { connect} from 'react-redux'; +import { mapStateToProps,mapDispatchToProps } from '../reducers/contextProvider'; +import {notify} from '../components/notify'; +import moment from 'moment'; +import {checkRange, marktext1,marktext2, resizeImage, restore_ImageWithMetaData, UpdateDistributorStatus, UpdateStoreStatus, UploadData, UploadData2, UploadFormData} from '../controller/functions'; +import {get_item,set_item,clear_item} from '../components/localStorage'; +import {AppVersion, common_ImagePath,ImageFolderPath, db,gMap_key, URL_IMAGE, CoverageImagePath} from '../constants/constants'; +import CustomHeader from '../components/customHeader'; +import CustomLoader from '../components/CustomLoader'; +import LinearGradient from 'react-native-linear-gradient'; +import MapView,{ Marker,AnimatedRegion ,Polyline,PROVIDER_GOOGLE} from 'react-native-maps'; +import { _checkLocationPermission } from '../components/geolocation'; +import Geolocation from 'react-native-geolocation-service'; +import { useRef } from 'react'; +import GradientButton from '../components/gradientButton'; +import * as RNFS from 'react-native-fs'; + +import CameraImg from '../assets/performics/camera_front_image.svg' +import { AppTables } from '../constants/tableConstants'; +import { getFolderName, getMethodName, METHODS } from '../constants/methodNames'; +import { getAvailblQuery, getIfAvlbl, Q_DBMenuList, Q_MenuList } from '../constants/ConstantQueries'; + + +function DistributorCheckin(props) { + const route = useRoute(); + const ST=props.StaticText || {}; + // get all theme styles acc to current theme set + const PageTheme=GetPageTheme(props.DarkMode,route.name); + const customStyle=customStyles(props.DarkMode,route.name); + const [processing, setProcessing] = useState(false); + + const [storeData, setStoreData] = useState({}); + const [StoreImage, setStoreImage] = useState(''); + const [StoreImgPath, setStoreImgPath] = useState(''); + + const [currentLocation, setCurrentLocation] = useState({}); + const [markerCoordinate, setMarkerCoordinate] = useState(); + const [markerPos, setMarkerPos] = useState({}); + const [markerTitle, setMarkerTitle] = useState(''); + const [markerPlaceText, setMarkerPlaceText] = useState(''); + const [loaderTitle, setLoaderTitle] = useState(); + const [isAdhocScreen, setIsAdhocScreen] = useState(false); + const [storeDistanceText, setStoreDistanceText] = useState('0 m'); + const [storeDistance, setStoreDistance] = useState(0); + const [showCamera, setShowCamera] = useState(false); + const [getImageProps,setGetImageProps]= useState({}); + + const MyMap=useRef(null); + const MyMarker=useRef(null); + const isCancelled = useRef(false); + const d1=new Date(); + const d2=moment(d1).format('MM/DD/YYYY'); + + useEffect(() => { + setLoaderTitle(ST.Loading+'...') + let params=props.route.params? props.route.params:{}; + let storeData1=params.storeData || {}; + setStoreData(storeData1); + calLocatDistance(storeData1); + + const onImageCapturedSubs=DeviceEventEmitter.addListener('onImageCaptured',(imgData)=>{ getImage(imgData,storeData1)}); + const unsubscribe=props.navigation.addListener('beforeRemove', onBeforeRemove); + + + return function cleanup() { + isCancelled.current = true; + Geolocation.clearWatch() + onImageCapturedSubs.remove(); + return unsubscribe; + }; + + }, []); + + useEffect(() => { + console.log('show camera changes:',showCamera); + const unsubscribe=props.navigation.addListener('beforeRemove', onBeforeRemove); + return unsubscribe; + }, [showCamera]); + + function onBeforeRemove(e){ + console.log('onBeforeRemove:',showCamera); + if(showCamera==true){ + e.preventDefault(); + setShowCamera(false); + } + else{ + return; + } + } + + async function calLocatDistance(storeData1){ + if(storeData1.Latitude !='' && storeData1.Latitude!=null){ + const hasPermission=await _checkLocationPermission(); + if(hasPermission==true) + { + getCurrentPosition(storeData1); + getLocationUpdates(storeData1); + } + else{ + notify(ST.Pleaseallowlocationpermission); + } + } + else{ + notify(ST.Storelocationnotavailable); + } + } + + async function getCurrentPosition(storeData1){ + Geolocation.getCurrentPosition( + async (position) => { + OnLocation(position,storeData1); + }, + (error) => { + notify(ST.Cannotgetuserposition); + }, + { enableHighAccuracy: true, distanceFilter: 10, interval: 1000, fastestInterval: 2000 } + ); + } + + async function getLocationUpdates(storeData1){ + Geolocation.watchPosition( + async (position) => { + OnLocation(position,storeData1); + }, + (error) => { + notify(ST.Cannotgetuserposition); + }, + { enableHighAccuracy: true, distanceFilter: 20, interval: 1000, fastestInterval: 2000, } + ) + } + + async function OnLocation(position,storeData1){ + let loc={lat:position.coords.latitude,lng:position.coords.longitude}; + let storeLat=parseFloat(storeData1.Latitude),storeLng=parseFloat(storeData1.Longitude); + setMarkerPos({ lat:storeLat, lng: storeLng }); + setMarkerCoordinate(new AnimatedRegion({ latitude:storeLat, longitude: storeLng })); + setMarkerInfo({ latitude:storeLat, longitude: storeLng }); + setCurrentLocation(loc); + + + var distance = checkRange(loc.lat,loc.lng,storeData1.Latitude,storeData1.Longitude); + // console.log('distance:',distance); + let dinKM=(distance / 1000); + let distanceinM=(distance=='' || distance==null || isNaN(distance))?' 0 m':( dinKM > 1 ? dinKM.toFixed(1) + ' Km' : distance + ' m'); + setStoreDistanceText(distanceinM); + setStoreDistance(distance); + } + + async function getPosition_global(successCallback){ + Geolocation.getCurrentPosition( + async (position) => { + successCallback(position); + }, + (error) => { + notify(ST.Cannotgetuserposition); + }, + { enableHighAccuracy: true, distanceFilter: 0, interval: 1000, fastestInterval: 2000 } + ); + } + + async function submitCheckIn(){ + if(validate()){ + setLoaderTitle(ST.ProcessingCheckIn+'...'); + setProcessing(true); + + async function posSuccessCallback(position){ + let loc={lat:position.coords.latitude,lng:position.coords.longitude}; + uploadCheckIn(loc); + } + await getPosition_global(posSuccessCallback); + } + } + + + async function onStoreStatusUpdate(txnres2){ + setProcessing(false); + notify(ST.CheckInDataUploadedsuccessfully,'SHORT'); + let MenuLen=await getMenuListLen(); + if(MenuLen>0){ + props.navigation.replace('DB_StoreDailyMenu',{storeData:storeData}); + } + else{ + props.navigation.goBack(); + } + } + + async function getMenuListLen(){ + let {StoreId,ChannelId,RegionId,StoreTypeId}=storeData; + return new Promise((resolve,reject)=>{ + db.transaction(async function (txn) { + let q=Q_DBMenuList(storeData); + await txn.executeSql(q,[],async function (txn2, txnres) { + resolve(txnres.rows.length); + },function (txnE,txnerr) { console.log(txnerr); resolve(0); },); + }); + }).then((val)=>{ + return val; + }).catch((err)=>{ + console.log('') + return 0 + }) + } + + async function uploadCheckIn(loc){ + let d1=new Date(); + let d2=moment(d1).format('MM/DD/YYYY'); + let fpath=Platform.OS=='ios'?StoreImgPath.replace('file://',''):StoreImgPath; + console.log(fpath); + // var data1 = new FormData(); + // data1.append('file', { + // uri: fpath , + // type: 'image/jpg', + // name: StoreImage, + // }); + + + // data1.append('Foldername','DBCoverageImages'); + // data1.append('Path', d2); + let data={ + "DistributorId":storeData.StoreId, + "VisitDate":d2, + "Latitude":(loc.lat || ''), + "Longitude":(loc.lng || ''), + "ReasonId":0, + // "Remark":"", + // "Appversion":AppVersion, + "UploadStatus":"I", + "UserId":(props.UserId || ''), + "CheckInImage":StoreImage, + "CheckoutImage":"", + } + + const url=props.baseurl+getMethodName(METHODS.DISTRIBUTOR_COVERAGE); + const url1=(props.imageUploadUrl || URL_IMAGE)+getMethodName(METHODS.UPLOADIMAGES_METHOD); + console.log(url,data); + + await UploadData2(url,data) + .then(async(res)=>{ + console.log('res of dbcheckin:',res); + if(parseInt(res)>0){ + InsertCoverageData(res,loc); + // Upload Image + // await UploadFormData(url1,data1) + // .then(async(res1)=>{ + // console.log('res1 image upload:',res1); + // }) + // .catch((err)=>{ + // console.log(err); + // }); + + } + else{ + setProcessing(false); + } + }) + .catch((err)=>{ + console.log(err);setProcessing(false); + }); + } + + async function InsertCoverageData(MID=0,loc){ + console.log('InsertCoverageData'); + try{ + let d1=new Date(); + let d2=moment(d1).format('MM/DD/YYYY'); + let now=moment(d1).format('MM/DD/YYYY HH:mm:ss'); + await db.transaction(async function (txn) { + + let {StoreId}=storeData; + let {lat,lng}=loc; + let JcpType='Master_Distributor'; + + + let q2=`delete from ${AppTables.DISTRIBUTOR_CHECKIN} where DISTRIBUTOR_ID='${StoreId}' and VISIT_DATE='${d2}' `; + let values2=` ('${StoreId}','${d2}','${lat}','${lng}','${now}','${StoreImage}','','','','${d2}')`; + let insert_q2=` INSERT INTO ${AppTables.DISTRIBUTOR_CHECKIN}(DISTRIBUTOR_ID,VISIT_DATE,LATITUDE,LONGITUDE,CHECKIN_TIME,CHECKIN_IMAGE,CHECKOUT_TIME,CHECKOUT_IMAGE,REMARK,ADDED_DATE) values ${values2}`; + + await txn.executeSql(q2,[],async function (txn2, txnres2) { + console.log('removed'); + await txn.executeSql(insert_q2,[],async function (txn2, txnres3) { + console.log('checkin data added'); + + let q=`UPDATE ${JcpType} SET UploadStatus='I',DMID='${MID}' WHERE DistributorId='${StoreId}' `; + await txn.executeSql(q,[],async function (txn2, txnres2) { + console.log('distributor status and MID updated'); + onStoreStatusUpdate(); + + },function(Etxn,txnerr){console.log(txnerr);}); + + },function(Etxn,txnerr){console.log(txnerr);}); + },function(Etxn,txnerr){console.log(txnerr);}); + + }); + } + catch(e){ + console.log('error:',e); + setProcessing(false); + notify(ST.CouldnotaddCheckIndata,'SHORT'); + } + } + + + function validate(){ + if(StoreImage=='' || StoreImage==null){ + notify('Please click selfie in front of Distributor','SHORT'); + return false; + } + return true; + } + + async function getImage(imgdata,storeData1){ + let storeData2=imgdata.storeData ||(Object.keys(storeData).length>0?storeData:storeData1) + if(typeof imgdata =='object' && imgdata.errorCode=='camera_unavailable'){ + notify(ST.Cameraunavailable); + } + else if(typeof imgdata =='object' && imgdata.uri!=null){ + const img=imgdata; + const imgurl=img.uri, imgWidth=img.width, imgHeight=img.ExtendedHeight; + let isImgFromGallery=img.fromGallery!=null?img.fromGallery:false; + let picture_clickedd=isImgFromGallery==true?img.datetime:new Date(); + ////change by jeevanp + let picture_clicked_time=moment(picture_clickedd).format('MM-DD-YYYY HH:mm:ss') + let picture_clicked_time_for_pic_name=moment(picture_clickedd).format('MMDDYYYY_HHmmss') + console.log("time", picture_clicked_time); + console.log("time1", picture_clicked_time_for_pic_name); + + let calculate_tym_date_for_filename = picture_clicked_time_for_pic_name; + let calculate_tym_date_over_img = picture_clicked_time; + + let filename=storeData2.StoreId+'_'+(props.UserId || '')+'_DBStoreImg-'+calculate_tym_date_for_filename+'.jpg'; + console.log(filename,"file_name"); + setStoreImage(filename); + + const mark_text1=calculate_tym_date_over_img; + const mark_text2='Distributor Name:'+storeData2.StoreName+' | Distributor Id:'+storeData2.StoreId+' | User Id:'+storeData2.EmpId+' | Image Type: DB Check In'+' | Date:'+calculate_tym_date_over_img; + + console.log(mark_text1+"\n"+mark_text2,"mark_text2"); + + let imagePath=`${CoverageImagePath}${filename}`; + RNFS.copyFile(imgurl,imagePath) + .then(async(resn) => { + // render data with clicked image + let uri='file://'+imagePath; + setStoreImgPath(uri); + // add metdata then resize image and restored back to the imagePath + let restore_data={"destFilePath":imagePath,"imgurl":imgurl,imgWidth,imgHeight,mark_text1,mark_text2} + let is_restored=await restore_ImageWithMetaData(restore_data,imgdata); + console.log("image restored:",is_restored); + }) + .catch(err => { + console.log('ERROR: image file write failed!!!'); + console.log(err.message, err.code); + }); + + } + } + + async function openCamera(){ + props.navigation.navigate('CameraScreen',{'getImage':getImage,'cameraType':'front','CheckInCameraGallery':props.CheckInCameraGallery,storeData:storeData}) + } + + function moveMarkerToPos(e){ + let coords=e.nativeEvent.coordinate; + animateCamera(coords); + animateMarkerToRegion(coords); + setMarkerInfo(coords); + let loc={lat:coords.latitude,lng:coords.longitude}; + setMarkerPos(loc); + } + + function animateMarkerToRegion(coords) { + const newCoordinate = coords; + if (Platform.OS === 'android') { + if (MyMarker) { + MyMarker.current.animateMarkerToCoordinate(newCoordinate, 1000); + } + } else { + // `useNativeDriver` defaults to false if not passed explicitly + markerCoordinate.timing({ ...newCoordinate, useNativeDriver: false,duration:1000 }).start(); + } + setTimeout(()=>{setMarkerCoordinate(coords);},1000); + + } + + async function setMarkerInfo(coords){ + if(MyMap.current!=null){ + MyMap.current.addressForCoordinate(coords) + .then((res)=>{ + console.log('res:',res); + let title=res.name; + let placeText=`${res.subLocality}, ${res.locality}, ${res.administrativeArea} ${res.postalCode}`; + setMarkerTitle(title); + setMarkerPlaceText(placeText); + + }) + } + } + + async function animateCamera(coords) { + if(MyMap.current!=null){ + const camera = await MyMap.current.getCamera(); + camera.heading = 7; + camera.pitch = 7; + camera.altitude = 100; + camera.zoom = 19; + camera.center.latitude = coords.latitude; + camera.center.longitude = coords.longitude; + MyMap.current.animateCamera(camera, { duration: 2000 }); + } + } + + + function _renderMap(){ + const lat =currentLocation.lat?currentLocation.lat:28.579660; + const lng=currentLocation.lng?currentLocation.lng:77.321110; + + // const latt=storeData.Latitude?parseFloat(storeData.Latitude):lat; + // const long=storeData.Longitude?parseFloat(storeData.Longitude):lng; + + if(currentLocation.lat!=null) + { + return ( + + + + + + + + {_render_captureImage()} + + ); + } + else{ + return() + } + } + + function _render_captureImage(){ + const isImageAvlbl=StoreImage!='' && StoreImage!=null && StoreImgPath!='' && StoreImgPath!=null; + + return ( + + + {openCamera()}}> + {!isImageAvlbl && } + {isImageAvlbl && } + + {'Click selfie in front of Distributor'} + + + + ); + } + + return ( + + {processing && } + + {/* {setShowCamera(false);getImage(imgData)}} showCamera={showCamera} onHideCamera={()=>{setShowCamera(false);}}/> */} + + + + { Object.keys(storeData).length>0 && + + + + + + + + + {storeData.StoreName} + + + + + + {ST.StoreId+':'} + {storeData.StoreId} + + + {ST.StoreCode+':'} + {storeData.StoreCode} + + + + + {ST.Address+':'} + {storeData.Address} + + + + + + + { + // isCancelled.current==false && + _renderMap() + } + + + + { + storeDistance>500 && + + {`${ST.Youare} ${storeDistanceText} ${ST.Awayfromthestore}`} + + } + {submitCheckIn()}}/> + + + + } + + + + + ); + } + + + +export default connect(mapStateToProps, mapDispatchToProps)(DistributorCheckin); \ No newline at end of file diff --git a/PerformicsSrc/src/screens/CheckInStore.js b/PerformicsSrc/src/screens/CheckInStore.js new file mode 100644 index 0000000..942ad42 --- /dev/null +++ b/PerformicsSrc/src/screens/CheckInStore.js @@ -0,0 +1,962 @@ +import React, { useState, useEffect } from 'react'; +import Container from '../components/container'; +import { useRoute } from '@react-navigation/native'; +import { globalStyles, customStyles, GetPageTheme, WP } from "../styles/Global"; +import { Image, View, Text, ScrollView, TouchableOpacity, Platform, FlatList, DeviceEventEmitter } from 'react-native'; +import { connect } from 'react-redux'; +import { mapStateToProps, mapDispatchToProps } from '../reducers/contextProvider'; +import { notify } from '../components/notify'; +import moment from 'moment'; +import { checkRange, getDownloadJson1, marktext1, marktext2, resizeImage, restore_ImageWithMetaData, UpdateStoreStatus, UploadData, UploadData2, UploadFormData, getKPIFieldsForKyc } from '../controller/functions'; +import { get_item, set_item, clear_item } from '../components/localStorage'; +import { AppVersion, common_ImagePath, ImageFolderPath, db, gMap_key, URL_IMAGE, CoverageImagePath, DevType } from '../constants/constants'; +import CustomHeader from '../components/customHeader'; +import { AntDesign, Entypo, MaterialCommunityIcons } from '../components/icons'; +import CustomLoader from '../components/CustomLoader'; +import LinearGradient from 'react-native-linear-gradient'; +import { SvgXml } from 'react-native-svg'; +import MapView, { Marker, AnimatedRegion, Polyline, PROVIDER_GOOGLE } from 'react-native-maps'; +import { _checkLocationPermission } from '../components/geolocation'; +import Geolocation from 'react-native-geolocation-service'; +import { useRef } from 'react'; +import GradientButton from '../components/gradientButton'; +import * as RNFS from 'react-native-fs'; + +import CameraImg from '../assets/performics/camera_front_image.svg' +import { AppTables } from '../constants/tableConstants'; +import { getFolderName, getMethodName, METHODS } from '../constants/methodNames'; +import { getAvailblQuery, getIfAvlbl, Q_MenuList } from '../constants/ConstantQueries'; +import { executeTasks, getPostData, getReDownloadTasks1, startRedownload } from '../components/downloadTasks'; +import DownloadDataModal from '../components/downloadDataModal'; +import CustomModal from '../components/CustomModal'; +import CameraImg3 from '../assets/performics/camera_tick.svg'; +import { NativeModules } from 'react-native'; +const { CameraaiModule } = NativeModules; + + +function StoreCheckin(props) { + const route = useRoute(); + const ST = props.StaticText || {}; + // get all theme styles acc to current theme set + const PageTheme = GetPageTheme(props.DarkMode, route.name); + const customStyle = customStyles(props.DarkMode, route.name); + const [processing, setProcessing] = useState(false); + + const [storeData, setStoreData] = useState({}); + const [StoreImage, setStoreImage] = useState(''); + const [StoreImgPath, setStoreImgPath] = useState(''); + + const [currentLocation, setCurrentLocation] = useState({}); + const [markerCoordinate, setMarkerCoordinate] = useState(); + const [markerPos, setMarkerPos] = useState({}); + const [markerTitle, setMarkerTitle] = useState(''); + const [markerPlaceText, setMarkerPlaceText] = useState(''); + const [loaderTitle, setLoaderTitle] = useState(); + const [isAdhocScreen, setIsAdhocScreen] = useState(false); + const [isBeatPlan, setIsBeatPlan] = useState(false); + const [storeDistanceText, setStoreDistanceText] = useState('0 m'); + const [storeDistance, setStoreDistance] = useState(0); + const [showCamera, setShowCamera] = useState(false); + const [getImageProps, setGetImageProps] = useState({}); + const [isNonMerchan, setIsNonMerchan] = useState(false); + + const [isNonProg, setIsNonProg] = useState(false); + const [isStoreSearch, setIsStoreSearch] = useState(false); + const [isDataDownloaded, setisDataDownloaded] = useState(false); + const [startDownload, setStartDownload] = useState(false); + const [TaskResponse, setTaskResponse] = useState([]); + const [downloadingText, setDownloadingText] = useState(''); + const [dowloadedCount, setDowloadedCount] = useState(-1); + const [totalCount, setTotalCount] = useState(-1); + const [DownloadTasks, setDownloadTasks] = useState([]); + + const [DErrorMsg, setDErrorMsg] = useState({}); + const [showDErrAlert, setshowDErrAlert] = useState(false); + + const [SelectedImg, setSelectedImg] = useState(''); + const [showModal, setShowModal] = useState(false); + const [showImageSaveOp, setShowImageSaveOp] = useState(true); + + const MyMap = useRef(null); + const MyMarker = useRef(null); + const isCancelled = useRef(false); + const d1 = new Date(); + const d2 = moment(d1).format('MM/DD/YYYY'); + + + useEffect(() => { + setLoaderTitle(ST.Loading + '...') + let params = props.route.params ? props.route.params : {}; + let storeData1 = params.storeData || {}; + let isAdhoc = params.isAdhoc || false; + let isBeat = params.isBeat != null ? params.isBeat : false; + let isNonMerchan1 = params.isNonMerchans != null ? params.isNonMerchans : false; + let isNonProgam = params.isNonProgs != null ? params.isNonProgs : false; + let isStoreSearch = params.isStoreSearch != null ? params.isStoreSearch : false; + setIsAdhocScreen(isAdhoc); + setIsBeatPlan(isBeat); + setIsNonMerchan(isNonMerchan1); + setIsNonProg(isNonProgam) + setIsStoreSearch(isStoreSearch) + setStoreData(storeData1); + calLocatDistance(storeData1); + getData(); + + const onImageCapturedSubs = DeviceEventEmitter.addListener('onImageCaptured', (imgData) => { getImage(imgData) }); + + return function cleanup() { + isCancelled.current = true; + Geolocation.clearWatch() + onImageCapturedSubs.remove(); + + }; + + }, []); + + useEffect(() => { + console.log('show camera changes:', showCamera); + console.log('NoCheckIn_Photo:', props.NoCheckIn_Photo); + + const unsubscribe = props.navigation.addListener('beforeRemove', onBeforeRemove); + return unsubscribe; + }, [showCamera]); + + + + useEffect(() => { + console.log('on totalCount change:', totalCount, startDownload); + if (startDownload == true && totalCount > -1) { + setDowloadedCount(0); + } + }, [totalCount]); + + useEffect(() => { + if (startDownload && TaskResponse != null) { + console.log('increment dowloadedCount changed'); + let count = dowloadedCount + 1; + setDowloadedCount(count); + } + }, [TaskResponse]); + + + useEffect(() => { + console.log('dowloadedCount onchange:', dowloadedCount); + if (dowloadedCount <= totalCount) { + executeTasks(props, storeData, DownloadTasks, dowloadedCount, + totalCount, setDowloadedCount, setDownloadingText, + onDownloadComplete, setTaskResponse, showErrorModal); + } + else { + setStartDownload(false); + } + }, [dowloadedCount]); + + function onBeforeRemove(e) { + console.log('onBeforeRemove:', showCamera); + if (showCamera == true) { + e.preventDefault(); + setShowCamera(false); + } + else { + return; + } + } + + async function getData() { + console.log('getData checkin'); + let Tasks = await getReDownloadTasks1(props); + console.log('Tasks redownload len:', Tasks.length) + setDownloadTasks(Tasks); + } + + function cancelImage() { + // setImage1(''); + setSelectedImg(''); + setShowModal(false); + } + + async function calLocatDistance(storeData1) { + if (storeData1.Latitude != '' && storeData1.Latitude != null) { + const hasPermission = await _checkLocationPermission(); + if (hasPermission == true) { + getCurrentPosition(storeData1); + getLocationUpdates(storeData1); + } + else { + notify(ST.Pleaseallowlocationpermission); + } + } + else { + notify(ST.Storelocationnotavailable); + } + } + + async function getCurrentPosition(storeData1) { + Geolocation.getCurrentPosition( + async (position) => { + OnLocation(position, storeData1); + }, + (error) => { + notify(ST.Cannotgetuserposition); + }, + { enableHighAccuracy: true, distanceFilter: 10, interval: 1000, fastestInterval: 2000 } + ); + } + + async function getLocationUpdates(storeData1) { + Geolocation.watchPosition( + async (position) => { + OnLocation(position, storeData1); + }, + (error) => { + notify(ST.Cannotgetuserposition); + }, + { enableHighAccuracy: true, distanceFilter: 1, interval: 10000, fastestInterval: 5000, maximumAge: 0 } + ) + } + + async function OnLocation(position, storeData1) { + let latitude = position.coords.latitude; + let longitude = position.coords.longitude; + latitude = parseFloat(parseFloat(latitude).toFixed(8).replace("-e", "")); + longitude = parseFloat(parseFloat(longitude).toFixed(8).replace("-e", "")); + + let loc = { lat: latitude, lng: longitude }; + let storeLat = parseFloat(storeData1.Latitude), storeLng = parseFloat(storeData1.Longitude); + setMarkerPos({ lat: storeLat, lng: storeLng }); + setMarkerCoordinate(new AnimatedRegion({ latitude: storeLat, longitude: storeLng })); + setMarkerInfo({ latitude: storeLat, longitude: storeLng }); + setCurrentLocation(loc); + + + var distance = checkRange(loc.lat, loc.lng, storeData1.Latitude, storeData1.Longitude); + // console.log('distance:',distance); + let dinKM = (distance / 1000); + let distanceinM = (distance == '' || distance == null || isNaN(distance)) ? ' 0 m' : (dinKM > 1 ? dinKM.toFixed(1) + ' Km' : distance + ' m'); + setStoreDistanceText(distanceinM); + setStoreDistance(distance); + } + + async function getPosition_global(successCallback) { + Geolocation.getCurrentPosition( + async (position) => { + successCallback(position); + }, + (error) => { + notify(ST.Cannotgetuserposition); + }, + { enableHighAccuracy: true, distanceFilter: 0, interval: 1000, fastestInterval: 2000 } + ); + } + + async function submitCheckIn() { + + if (validate()) { + setLoaderTitle(ST.ProcessingCheckIn + '...'); + setProcessing(true); + + async function posSuccessCallback(position) { + let latitude = position.coords.latitude; + let longitude = position.coords.longitude; + latitude = parseFloat(parseFloat(latitude).toFixed(8).replace("-e", "")); + longitude = parseFloat(parseFloat(longitude).toFixed(8).replace("-e", "")); + + + let loc = { lat: latitude, lng: longitude }; + var distance = checkRange(loc.lat, loc.lng, storeData.Latitude, storeData.Longitude); + console.log('distance in submitCheckIn:', distance); + let dinKM = (distance / 1000); + let distanceinM = (distance == '' || distance == null || isNaN(distance)) ? ' 0 m' : (dinKM > 1 ? dinKM.toFixed(1) + ' Km' : distance + ' m'); + setStoreDistanceText(distanceinM); + setStoreDistance(distance); + (isAdhocScreen == true || isBeatPlan == true || isNonMerchan == true || isNonProg == true || isStoreSearch == true) ? await createJCP(loc) : await uploadCheckIn(loc); + } + await getPosition_global(posSuccessCallback); + } + } + + async function createJCP(loc) { + console.log('createJCP'); + let d1 = new Date(); + let d2 = moment(d1).format('MM/DD/YYYY'); + // let data={"UserId":(props.UserId || ''),"JcpType":(isBeatPlan==true?2:(isNonMerchan==true?3:(isNonProg==true?5:1))),"StoreId":storeData.StoreId,"VisitDate":d2} + let data = { "UserId": props.UserId || '', "JcpType": isStoreSearch == true ? 6 : (isBeatPlan == true ? 2 : (isNonMerchan == true ? 3 : (isNonProg == true ? 5 : 1))), "StoreId": storeData.StoreId, "VisitDate": d2 }; + const url = props.baseurl + getMethodName(METHODS.CREATEJP_METHOD); + console.log(url, data); + await UploadData2(url, data) + .then(async (res) => { + console.log(res); + if (res != null && res != '' && res != '0' && parseInt(res) > 0) { + updateMID(res, loc);// update mid in db + } + else { + setProcessing(false); notify(ST.OopsSomethingwentwrongcannotcreateJCP, 'SHORT'); + } + + }) + .catch((err) => { + setProcessing(false); console.log(err); + }); + + } + async function updateMID(MID = 0, loc) { + try { + let JcpType = isBeatPlan == true ? 'JourneyPlan_RouteWise' : (isNonMerchan == true ? 'NonMerchandising_JourneyPlan' : (isNonProg == true ? 'NonProgram_JourneyPlan' : (isStoreSearch == true ? 'StoreSearch_JourneyPlan' : 'Adhoc_JourneyPlan'))); + + await db.transaction(async function (txn) { + let q = `UPDATE ${JcpType} SET MID='${MID}' WHERE StoreId='${storeData.StoreId}' `; + await txn.executeSql(q, [], async function (txn2, txnres2) { + console.log('mid updated', storeData.StoreId, MID); + let new_st = storeData; + new_st['MID'] = MID; + setStoreData(new_st); + uploadCheckIn(loc); + + }, function (Etxn, txnerr) { setProcessing(false); console.log(txnerr); }); + }); + } + catch (e) { + setProcessing(false); + notify(ST.CouldnotcreateJCP, 'SHORT'); + } + } + async function uploadCheckIn(loc) { + let d1 = new Date(); + let d2 = moment(d1).format('MM/DD/YYYY'); + let fpath = Platform.OS == 'ios' ? StoreImgPath.replace('file://', '') : StoreImgPath; + console.log("fpath", fpath); + var data1 = new FormData(); + data1.append('file', { + uri: fpath , + type: 'image/jpg', + name: StoreImage, + }); + + let foldername=getFolderName(StoreImage); + console.log('foldername:',foldername); + data1.append('Foldername',foldername); + data1.append('Path', d2); + let data = { + "Mid": storeData.MID, + "StoreId": storeData.StoreId, + "VisitDate": d2, + "Latitude": (loc.lat || ''), + "Longitude": (loc.lng || ''), + "ReasonId": 0, + "Remark": "", + "Appversion": DevType == "Prod" ? AppVersion : AppVersion + " Dev", + // "Appversion":AppVersion+"V1", + "UploadStatus": "I", + "UserName": (props.UserId || ''), + "ImageName": StoreImage, + "CheckoutImage": "", + } + + const url = props.baseurl + getMethodName(METHODS.GETCOVERAGE_METHOD); + const url1 = (props.imageUploadUrl || URL_IMAGE) + getMethodName(METHODS.UPLOADIMAGES_METHOD); + console.log(url, data); + + await UploadData2(url, data) + .then(async (res) => { + console.log('res:', res); + if (parseInt(res) > 0) { + InsertCoverageData(); + // Upload Image + await UploadFormData(url1,data1) + .then(async(res1)=>{ + console.log('res1 image upload:',res1); + }) + .catch((err)=>{ + console.log(err); + }); + } + else { + setProcessing(false); + } + }) + .catch((err) => { + console.log(err); setProcessing(false); + }); + } + function exit() { + setTimeout(() => { + notify(ST.CheckinSuccessful, 'LONG'); + setProcessing(false); + setTimeout(() => { props.navigation.goBack(); }, 100); + }, 1000) + } + + async function onStoreStatusUpdate(txnres2) { + console.log('storecheclistupdate', props.StoreChecklistOnce) + let AllKPIFields = await getKPIFieldsForKyc(); + console.log("AllKPIFields", AllKPIFields); + + let token = await get_item('loginToken'); + let loginInfo = await get_item('loginInfo'); + const loginDetails = JSON.parse(loginInfo); + + let designation = loginDetails.Designation || ''; + + // Compute isCompactStoreData + let ShowCompactStoreProfileRestrict = AllKPIFields?.findIndex((i) => i.KPIFieldName == "CompactStoreProfileRestrict"); + let ShowCompactStoreProfileRestrictObj = ShowCompactStoreProfileRestrict >= 0 ? AllKPIFields[ShowCompactStoreProfileRestrict] : {}; + let ShowCompactStoreSplitArr = ShowCompactStoreProfileRestrictObj?.KPIFieldDisplayName?.split(",") || []; + const isCompactStoreData = ShowCompactStoreSplitArr; + console.log('iscompetitorValues-----',storeData.Deviation); + setProcessing(false); + if (props.ShowCompactStoreProfile == true) { + if (!isCompactStoreData.includes(designation)) { + props.navigation.replace('StoreProfileKyc', { storeData: storeData, 'isAdhoc': isAdhocScreen, 'isBeat': isBeatPlan, 'isNonMerchans': isNonMerchan, isNonProgs: isNonProg, isStoreSearch: isStoreSearch, '_fromStoreWise': true }); + }else { + props.navigation.replace('StoreDailyMenu', { storeData: storeData, 'isAdhoc': isAdhocScreen, 'isBeat': isBeatPlan, 'isNonMerchans': isNonMerchan, isNonProgs: isNonProg, isStoreSearch: isStoreSearch, '_fromStoreWise': true }); + } + } else if (props.ShowStoreProfile == true && storeData.Deviation != 6) { + props.navigation.replace('StoreProfile', { storeData: storeData, 'isAdhoc': isAdhocScreen, 'isBeat': isBeatPlan, 'isNonMerchans': isNonMerchan, isNonProgs: isNonProg, isStoreSearch: isStoreSearch, '_fromStoreWise': true }); + } else if (props.ShowStoreChecklist == true || props.StoreChecklistOnce == true) { + props.navigation.replace('StoreChecklist', { storeData: storeData, 'isAdhoc': isAdhocScreen, 'isBeat': isBeatPlan, 'isNonMerchans': isNonMerchan, isNonProgs: isNonProg, isStoreSearch: isStoreSearch, '_fromStoreWise': true }); + } else if (props.ShowReportAfterCheckIn == true) { + props.navigation.replace('ReportsMenu', { + storeData: storeData, 'isAdhoc': isAdhocScreen, 'isBeat': isBeatPlan, + 'isNonMerchans': isNonMerchan, isNonProgs: isNonProg, isStoreSearch: isStoreSearch, '_fromStoreWise': true + }); + } else { + let allMenuList = await getMenuList(); + if (allMenuList.length > 0) { + props.navigation.replace('StoreDailyMenu', { storeData: storeData, 'isAdhoc': isAdhocScreen, 'isBeat': isBeatPlan, 'isNonMerchans': isNonMerchan, isNonProgs: isNonProg, isStoreSearch: isStoreSearch, '_fromStoreWise': true }); + } + else { + props.navigation.goBack(); + } + } + } + + // **************************** download functionality start *********************************** + + + async function startRedownload1() { + notify(ST.CheckInDataUploadedsuccessfully, 'SHORT'); + if (DownloadTasks.length > 0 && (isAdhocScreen == true || isBeatPlan == true || isNonMerchan == true || isNonProg == true || isStoreSearch == true)) { + setStartDownload(true); + startRedownload(props, DownloadTasks, dowloadedCount, totalCount, setDowloadedCount, setTotalCount); + } + else { + onStoreStatusUpdate(); + } + } + + + + async function onDownloadComplete() { + setisDataDownloaded(true); + let count = dowloadedCount + 1; + setStartDownload(false); + setDowloadedCount(count); + notify(ST.DataDownloaded, 'SHORT'); + onStoreStatusUpdate(); + } + + // hide redownload modal and show error modal + async function showErrorModal(obj = {}) { + setDErrorMsg(obj); + setProcessing(false); + setStartDownload(false); // hide download modal + setshowDErrAlert(true); // show alert modal + } + + + async function checkAvailability(storeData1, data) { + + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + let q2 = getAvailblQuery(data.ScreenName, storeData1); + if (q2 != '' && q2 != null) { + + await txn.executeSql(q2, [], async function (txn2, txnres2) { + let isAvlbl = getIfAvlbl(data.ScreenName, txnres2, storeData1); + resolve(isAvlbl); + }, function (txnE, txnerr) { console.log(txnerr); resolve(false); },); + } + else { + let isAvlbl = getIfAvlbl(data.ScreenName, {}, storeData1); + resolve(isAvlbl); + } + }); + }).then((val) => { + return val; + }).catch((err) => { + console.log(err); + return false; + }); + } + + async function getMenuList() { + let { StoreId, ChannelId, RegionId, StoreTypeId } = storeData; + return new Promise((resolve, reject) => { + + db.transaction(async function (txn) { + let q = Q_MenuList(storeData); + await txn.executeSql(q, [], async function (txn2, txnres) { + if (txnres.rows.length > 0) { + let arr = [];//txnres.rows.raw(); + console.log('menulist on checkn:', arr); + // resolve(arr); + for (var i = 0; i < txnres.rows.length; i++) { + let data = txnres.rows.item(i); + arr.push(data); + if (i == (txnres.rows.length - 1)) { + resolve(arr); + } + } + } + else { + resolve([]) + } + }, function (txnE, txnerr) { console.log(txnerr); resolve([]); },); + }); + }).then((val) => { + return val; + }).catch((err) => { + console.log('') + return [] + }) + } + + async function InsertCoverageData() { + try { + let d1 = new Date(); + let d2 = moment(d1).format('MM/DD/YYYY'); + let now = moment(d1).format('MM/DD/YYYY HH:mm:ss'); + let intime = moment(d1).format('HH:mm:ss'); + let serverDateTime1 = now + + await db.transaction(async function (txn) { + + let { StoreId, MID, ChannelId, StoreCode, EmpId, VisitDate, ChainId, ChainName, StoreName, Address, Location, Landmark, CityId, CityName, StateId, StateName, RegionId, StoreTypeId, StoreType, Pincode, Latitude, Longitude, Phone, Mobile, ContactPerson, Email, UploadStatus, GeoTag, GeoFenceRadius, ExpiryStock, InTime, OutTime, CameraAllow, AddVisiAllow, LastVisitDate, Score, MinTimeTaken, StoreCategoryId, StoreCategory, StoreClassId, StoreClass, TaxType, GSTno, GSTImage, MTDMerchandised, DistributorId } = storeData; + let { lat, lng } = currentLocation; + let q = `delete from ${AppTables.COVERAGE_DATA} where STORE_ID='${StoreId}' and VISIT_DATE='${d2}' `; + console.log("storeId.....", q); + let storeSearchDlt = `delete from ${AppTables.STORE_SEARCHJCP} where StoreId='${StoreId}' and VisitDate='${d2}' `; + // let JcpType=isBeatPlan==true?'JourneyPlan_RouteWise':(isAdhocScreen==true?'Adhoc_JourneyPlan':(isNonMerchan==true?'NonMerchandising_JourneyPlan':(isNonProg==true? 'NonProgram_JourneyPlan':'Mapping_JourneyPlan'))); + let JcpType = isStoreSearch == true ? 'StoreSearch_JourneyPlan' : + (isBeatPlan == true ? 'JourneyPlan_RouteWise' : + (isAdhocScreen == true ? 'Adhoc_JourneyPlan' : + (isNonMerchan == true ? 'NonMerchandising_JourneyPlan' : + (isNonProg == true ? 'NonProgram_JourneyPlan' : 'Mapping_JourneyPlan')))); + + + let values = ` ('${StoreId}','${d2}','${lat}','${lng}','${StoreImage}','${serverDateTime1}','${StoreImgPath}','0','','','','${MID}','${JcpType}','${d2}')`; + + // let storeSearchValues = ` ('${MID}','${ChannelId}','${StoreId}','${StoreCode}','${EmpId}','${VisitDate}','${ChainId}','${ChainName}','${StoreName}','${Address}','${Location}','${Landmark}','${CityId}','${CityName}','${StateId}','${StateName}','${RegionId}','${StoreTypeId}','${StoreType}','${StoreCategoryId}','${StoreCategory}','${StoreClassId}','${StoreClass}','${Pincode}','${Latitude}','${Longitude}','${Phone}','${Mobile}','${ContactPerson}','${Email}','${TaxType}','${GSTno}','${GSTImage}',"I",'${GeoTag}','${GeoFenceRadius}','${ExpiryStock}','${InTime}','${OutTime}','${CameraAllow}','${AddVisiAllow}','${LastVisitDate}','${Score},'${MinTimeTaken},,'${MTDMerchandised},,'${DistributorId})`; + let storeSearchValues = `('${MID}', '${ChannelId}', '${StoreId}', '${StoreCode}', '${EmpId}', '${VisitDate}', '${ChainId}', '${ChainName}', '${StoreName}', '${Address}', '${Location}', '${Landmark}', '${CityId}', '${CityName}', '${StateId}', '${StateName}', '${RegionId}', '${StoreTypeId}', '${StoreType}', '${StoreCategoryId}', '${StoreCategory}', '${StoreClassId}', '${StoreClass}', '${Pincode}', '${Latitude}', '${Longitude}', '${Phone}', '${Mobile}', '${ContactPerson}', '${Email}', '${TaxType}', '${GSTno}', '${GSTImage}', 'I', '${GeoTag}', '${GeoFenceRadius}', '${ExpiryStock}', '${InTime}', '${OutTime}', '${CameraAllow}', '${AddVisiAllow}', '${LastVisitDate}', '${Score}', '${MinTimeTaken}', '${MTDMerchandised}', '${DistributorId}')`; + + // let values=` ('${StoreId}','${d2}','${lat}','${lng}','${StoreImage}','${now}','${StoreImgPath}','0','','','','${MID}','${JcpType}','${d2}')`; + let insert_q = ` insert into ${AppTables.COVERAGE_DATA}(STORE_ID,VISIT_DATE ,LATITUDE,LONGITUDE,IMAGE,CHECKOUT_TIME,CHECKOUT_IMAGE,REASON_ID,REASON,REMARK,STORE_FLAG,MID,JCP_TYPE,ADDED_DATE) values ${values}`; + let insert_sjp = ` insert into ${AppTables.STORE_SEARCHJCP}(MID, ChannelId, StoreId, StoreCode, EmpId, VisitDate, ChainId, ChainName, StoreName, Address, Location, Landmark, CityId, CityName, StateId, StateName, RegionId, StoreTypeId, StoreType, StoreCategoryId, StoreCategory,StoreClassId,StoreClass,Pincode,Latitude,Longitude, Phone, Mobile, ContactPerson, Email,TaxType,GSTno,GSTImage,UploadStatus,GeoTag, GeoFenceRadius, ExpiryStock,InTime,OutTime,CameraAllow, AddVisiAllow,LastVisitDate,Score,MinTimeTaken,MTDMerchandised,DistributorId) values ${storeSearchValues}`; + console.log("storeId.....", insert_q); + await txn.executeSql(q, [], async function (txn2, txnres2) { + console.log('store coverage deleted'); + // await txn.executeSql(storeSearchDlt,[],async function (txn2, txnres2) { + console.log('store search data deleted'); + if (isStoreSearch == true) { + await txn.executeSql(storeSearchDlt, [], async function (txn2, txnres2) { + console.log('Store search data deleted'); + await txn.executeSql(insert_sjp, [], async function (txn2, txnres3) { + console.log('Insert StoreSearchJCP done'); + }, function (Etxn, txnerr) { console.log(txnerr); }); + }, function (Etxn, txnerr) { console.log(txnerr); }); + } + await txn.executeSql(insert_q, [], async function (txn2, txnres3) { + console.log('InsertCoverageData done'); + }, function (Etxn, txnerr) { console.log(txnerr); }) + }, function (Etxn, txnerr) { console.log(txnerr); }); + + let q2 = `delete from ${AppTables.CHECKIN_DATA} where STORE_ID='${StoreId}' and VISIT_DATE='${d2}' `; + let values2 = ` ('${StoreId}','${d2}','${lat}','${lng}','${serverDateTime1}','${StoreImgPath}','','','','${JcpType}','${d2}')`; + let insert_q2 = ` INSERT INTO ${AppTables.CHECKIN_DATA}(STORE_ID,VISIT_DATE,LATITUDE,LONGITUDE,CHECKIN_TIME,CHECKIN_IMAGE,CHECKOUT_TIME,CHECKOUT_IMAGE,REMARK,JCP_TYPE,ADDED_DATE) values ${values2}`; + let udata = { StoreId: StoreId, MID: MID, UploadStatus: 'I', tbname: JcpType }; + console.log("values2", values2); + await txn.executeSql(q2, [], async function (txn2, txnres2) { + console.log('removed'); + await txn.executeSql(insert_q2, [], async function (txn2, txnres3) { + console.log('checkin data added'); + // Adding extra fields dynamically + udata.InTime = intime; + udata.outtime = "00:00:00"; + console.log("values2", udata); + UpdateStoreStatus(props, udata, startRedownload1)// update uploadstatus + }, function (Etxn, txnerr) { console.log(txnerr); }); + + }, function (Etxn, txnerr) { console.log(txnerr); }); + + }); + } + catch (e) { + setProcessing(false); + notify(ST.CouldnotaddCheckIndata, 'SHORT'); + } + } + + function validate() { + if ((!props.NoCheckIn_Photo && StoreImage == '') || (!props.NoCheckIn_Photo && StoreImage == null)) { + notify(ST.Pleaseclickselfieinfrontofstore, 'SHORT'); + return false; + } + + return true; + } + + + const getImageSize = (imgurl) => { + return new Promise((resolve, reject) => { + Image.getSize( + 'file://' + imgurl, + (width, height) => { + resolve({ width, height }); + }, + (error) => { + console.error('Failed to get image dimensions:', error, 'file://' + imgurl); + reject(error); + } + ); + }); + }; + + async function getImage(imgdata) { + console.log('inside store check-in') + if (typeof imgdata == 'object' && imgdata.errorCode == 'camera_unavailable') { + notify(ST.Cameraunavailable); + } + else if (typeof imgdata == 'object' && imgdata.uri != null) { + const img = imgdata; + const storeDataDetail = imgdata.storeData || {} + const imgurl = img.uri, imgWidth = img.width, imgHeight = img.ExtendedHeight; + let isImgFromGallery = img.fromGallery != null ? img.fromGallery : false; + let picture_clickedd = isImgFromGallery == true ? img.datetime : new Date(); + ///nishant + const { width, height } = await getImageSize(imgurl); + // let picture_clicked_time=moment(picture_clickedd).format('DD-MM-YYYY HH:mm:ss') + let picture_clicked_time = moment(picture_clickedd).format('MM-DD-YYYY HH:mm:ss') + let picture_clicked_time_for_pic_name = moment(picture_clickedd).format('MMDDYYYY_HHmmss') + + console.log("time", picture_clicked_time); + console.log("time1", picture_clicked_time_for_pic_name); + let calculate_tym_date_for_filename = picture_clicked_time_for_pic_name; + let calculate_tym_date_over_img = picture_clicked_time; + let filename = storeDataDetail.StoreId + '_' + (props.UserId || '') + '_StoreImg-' + calculate_tym_date_for_filename + '.jpg'; + console.log(filename, "file_name"); + setStoreImage(filename); + const mark_text1 = calculate_tym_date_over_img; + const mark_text2 = 'Store Name:' + storeDataDetail.StoreName + ' | Store Id:' + storeDataDetail.StoreId + ' | User Id:' + storeDataDetail.EmpId + ' | Image Type: Check In' + ' | Date:' + calculate_tym_date_over_img; + + let imagePath = `${CoverageImagePath}${filename}`; + console.log("checkin imgurl:", imgurl); + RNFS.copyFile(imgurl, imagePath) + .then(async (resn) => { + // render data with clicked image + let uri = 'file://' + imagePath; + setStoreImgPath(uri); + setSelectedImg(uri) + // add metdata then resize image and restored back to the imagePath + let restore_data = { "destFilePath": imagePath, "imgurl": imgurl, imgWidth: width || imgWidth, imgHeight: height || imgHeight, mark_text1, mark_text2 } + let is_restored = await restore_ImageWithMetaData(restore_data, imgdata); + console.log("image restored:", is_restored); + }).catch(err => { + console.log('ERROR: image file write failed!!!', err); + console.log(err.message, err.code); + }); + } + } + + async function openCamera() { + // console.log("platform------",Platform.OS); + if (props.FaceRecognition && Platform.OS == 'android') { + let imagePath = `${common_ImagePath}Test.jpg`; + // console.log("imagePath------",imagePath); + let res = await CameraaiModule?.initializeSDK({ "filePath": imagePath }) + // console.log("imagePath------2",res); + await getImage({ uri: res, storeData: storeData }) + + } else { + props.navigation.navigate('CameraScreen', { 'getImage': getImage, 'cameraType': (props.CheckinOpenBackCamera ? 'back' : 'front'), 'CheckInCameraGallery': props.CheckInCameraGallery, storeData: storeData, enableCameraFlip: (props.CheckInSwitchingCamera ? true : false) }) + } + } + + + function moveMarkerToPos(e) { + let coords = e.nativeEvent.coordinate; + animateCamera(coords); + animateMarkerToRegion(coords); + setMarkerInfo(coords); + let loc = { lat: coords.latitude, lng: coords.longitude }; + setMarkerPos(loc); + } + + function animateMarkerToRegion(coords) { + const newCoordinate = coords; + if (Platform.OS === 'android') { + if (MyMarker) { + MyMarker.current.animateMarkerToCoordinate(newCoordinate, 1000); + } + } else { + // `useNativeDriver` defaults to false if not passed explicitly + markerCoordinate.timing({ ...newCoordinate, useNativeDriver: false, duration: 1000 }).start(); + } + setTimeout(() => { setMarkerCoordinate(coords); }, 1000); + + } + + async function setMarkerInfo(coords) { + if (MyMap.current != null) { + MyMap.current.addressForCoordinate(coords) + .then((res) => { + // console.log('res:',res); + let title = res.name; + let placeText = `${res.subLocality}, ${res.locality}, ${res.administrativeArea} ${res.postalCode}`; + setMarkerTitle(title); + setMarkerPlaceText(placeText); + + }) + } + } + + async function animateCamera(coords) { + if (MyMap.current != null) { + const camera = await MyMap.current.getCamera(); + camera.heading = 7; + camera.pitch = 7; + camera.altitude = 100; + camera.zoom = 19; + camera.center.latitude = coords.latitude; + camera.center.longitude = coords.longitude; + MyMap.current.animateCamera(camera, { duration: 2000 }); + } + } + + + function _renderMap() { + const lat = currentLocation.lat ? currentLocation.lat : 28.579660; + const lng = currentLocation.lng ? currentLocation.lng : 77.321110; + if (currentLocation.lat != null) { + return ( + + + + + + + + {_render_captureImage()} + + ); + } + else { + return () + } + } + + + async function OpenImgModal(imgPath) { + setSelectedImg(imgPath) + setShowModal(true); + if ((imgPath != '' && imgPath != null)) { + setShowImageSaveOp(false); + } + else { + setShowImageSaveOp(true); + } + + + } + + function _OpenCaptureImage_Modal(img) { + const isImageCap = (img != '' || img != null) ? true : false; + let camera2Label = 'test'; + return ( + + { + isImageCap && + + + + + + { openCamera() }}> + + + + {!showImageSaveOp && + { cancelImage(false) }}> + {ST.Close} + + } + + } + + ) + } + + function _render_captureImage() { + const isImageAvlbl = StoreImage != '' && StoreImage != null && StoreImgPath != '' && StoreImgPath != null; + + return ( + <> + {!props?.NoCheckIn_Photo && ( + + + { + isImageAvlbl ? OpenImgModal(StoreImgPath) : openCamera(); + }} + > + {!isImageAvlbl && } + {isImageAvlbl && ( + + )} + + + + {ST.ClickSelfieinfrontofStore} + + + + )} + + ); + + } + + function DownloadErrorAlert() { + + let { ErrorMsg, ErrorSubMsg, ErrorDetail } = DErrorMsg; + + return ( + + {ErrorDetail != null && ErrorDetail != '' && {ErrorDetail}} + + { setshowDErrAlert(false); props.navigation.goBack(); }}> + {'Ok'} + + + + ) + } + + return ( + + {!startDownload && processing && } + {(startDownload && dowloadedCount <= totalCount) && } + + + {_OpenCaptureImage_Modal()} + {/* {setShowCamera(false);getImage(imgData)}} showCamera={showCamera} onHideCamera={()=>{setShowCamera(false);}}/> */} + + + + {Object.keys(storeData).length > 0 && + + + + + + + + {storeData.StoreName} + + + + + + {ST.StoreId + ':'} + {storeData.StoreId} + + + {ST.StoreCode + ':'} + {storeData.StoreCode} + + + + + {ST.Address + ':'} + {storeData.Address} + + + + + + + { + // isCancelled.current==false && + _renderMap() + } + + + + { + storeDistance > props.GeoFenceRadius && props.GeoFenceEnable == true && + + {`${ST.Youare} ${storeDistanceText} ${ST.Awayfromthestore}`} + + } + + props.GeoFenceRadius ? true : false) : false} + colors={props.GeoFenceEnable == true ? (storeDistance > props.GeoFenceRadius ? [PageTheme.$text_color_light, PageTheme.$text_color_light] : null) : null} + onPress={() => { + props.GeoFenceEnable == true ? (storeDistance > props.GeoFenceRadius ? true : submitCheckIn()) : submitCheckIn() + }} /> + + + + } + + + + + ); +} + + + +export default connect(mapStateToProps, mapDispatchToProps)(StoreCheckin); \ No newline at end of file diff --git a/PerformicsSrc/src/screens/ClosingStock.js b/PerformicsSrc/src/screens/ClosingStock.js new file mode 100644 index 0000000..7e9f7de --- /dev/null +++ b/PerformicsSrc/src/screens/ClosingStock.js @@ -0,0 +1,1026 @@ +import React, { useState, useEffect, useRef } from 'react'; +import Container from '../components/container'; +import { useRoute } from '@react-navigation/native'; +import { globalStyles, customStyles, GetPageTheme } from "../styles/Global"; +import { StatusBar, Image, TextInput, View, Text, ScrollView, TouchableOpacity, Platform, PermissionsAndroid, FlatList, KeyboardAvoidingView, Alert, AppState, Keyboard } from 'react-native'; +import { ReactReduxContext, connect, useSelector, useDispatch } from 'react-redux'; +import { mapStateToProps, mapDispatchToProps } from '../reducers/contextProvider'; +import SQLite from 'react-native-sqlite-2'; +import { notify } from '../components/notify'; +import moment from 'moment'; +import { checkMDStockScreenExists, getDownloadJson, getKPIFields, getKPIFieldsWithSpecific, marktext1, marktext2, validateNumber } from '../controller/functions'; +import { get_item, set_item, clear_item } from '../components/localStorage'; +import { version, sloganline, appname, testurl, db, colors_Arr } from '../constants/constants'; +import CustomHeader from '../components/customHeader'; +import { Card, Menu, Switch } from 'react-native-paper'; +import { AntDesign, MaterialCommunityIcons } from '../components/icons'; +import { stat } from 'react-native-fs'; +import CustomLoader from '../components/CustomLoader'; +import LinearGradient from 'react-native-linear-gradient'; +import { AppTables } from '../constants/tableConstants'; +import { SvgXml } from 'react-native-svg'; +import { launchCamera, launchImageLibrary, CameraOptions } from 'react-native-image-picker'; +import * as RNFS from 'react-native-fs'; +import GradientButton from '../components/gradientButton'; + +import cameraImg from '../assets/performics/camera_front_image.svg' +import addImg from '../assets/performics/add_image.svg'; +import CustomModal from '../components/CustomModal'; + +function ClosingStock(props) { + const route = useRoute(); + + // get all theme styles acc to current theme set + const PageTheme = GetPageTheme(props.DarkMode, route.name); + const customStyle = customStyles(props.DarkMode, route.name); + + const [processing, setProcessing] = useState(true); + const [loaderTitle, setLoaderTitle] = useState('loading...'); + const [isAdhocScreen, setIsAdhocScreen] = useState(false); + const [storeData, setStoreData] = useState({}); + const [currentMenu, setCurrentMenu] = useState({}); + const [brandData, setBrandData] = useState([]); + const [rerenderdata, setrerenderdata] = useState(0); + const [rerenderdata2, setrerenderdata2] = useState(0); + const [KPIFields, setKPIFields] = useState([]); + const [KPIFieldsWithoutFilter, setKPIFieldsWithoutFilter] = useState([]); + + + const [SKUStockData, setSKUStockData] = useState([]); + const [IsMidDayStockScreen, setIsMidDayStockScreen] = useState(false); + const [showAlert, setShowAlert] = useState(false); + const [hasUnsavedChanges, setHasUnsavedChanges] = useState(false); + + const inputRefs = useRef({}); + const hasUnsavedChangesRef = React.useRef(hasUnsavedChanges); + const WindowDataRef = React.useRef(SKUStockData); + const StoreIdRef = React.useRef(null); + const ScreenNameRef = React.useRef(''); + + // error field states + const [errorfield, setErrorField] = useState({}); + const [error, setError] = useState(false); + + const d1 = new Date(); + const d2 = moment(d1).format('MM/DD/YYYY'); + + useEffect(() => { + let params = props.route.params ? props.route.params : {}; + let storeData1 = params.storeData || {}; + let menu1 = params.menu || {}; + + let isAdhoc = params.isAdhoc || false; + setIsAdhocScreen(isAdhoc); + setStoreData(storeData1); + setCurrentMenu(menu1); + + StoreIdRef.current = storeData1.StoreId + ScreenNameRef.current = menu1.ScreenName + getData(storeData1, menu1); + + const AppStateSubscription = AppState.addEventListener('change', (pro) => { _handleAppStateChange(pro) }); + const unsubscribe = props.navigation.addListener('beforeRemove', onBeforeRemove); + + return function cleanup() { + AppStateSubscription.remove(); + // AppState.removeEventListener('change', (pro)=>{ _handleAppStateChange(SKUStockData,pro)}); + return unsubscribe; + }; + }, []); + + const _handleAppStateChange = async (nextAppState) => { + console.log("app bg state change:", nextAppState, ScreenNameRef.current, hasUnsavedChangesRef.current) + if (nextAppState == 'background' && hasUnsavedChangesRef.current == true) { + let newData = { + storeBGData: WindowDataRef.current, + menuName: ScreenNameRef.current, + StoreId1: StoreIdRef.current, + visiteDate: d2 + } + let WindowsStr = JSON.stringify(newData) + await set_item('storeData', WindowsStr); + } + } + + useEffect(() => { + const unsubscribe = props.navigation.addListener('beforeRemove', onBeforeRemove); + return unsubscribe; + // AppState.removeEventListener('change',(pro)=>{ _handleAppStateChange(SKUStockData,pro)}); + // AppState.addEventListener('change',(pro)=>{ _handleAppStateChange(SKUStockData,pro)}); + }, [hasUnsavedChanges]); + + // useEffect(() => { + // AppState.removeEventListener('change',(pro)=>{ _handleAppStateChange(SKUStockData,pro)}); + // AppState.addEventListener('change',(pro)=>{ _handleAppStateChange(SKUStockData,pro)}); + // }, [SKUStockData]); + + function onBeforeRemove(e) { + if (hasUnsavedChanges == true) { + e.preventDefault(); // Prevent default behavior of leaving the screen + onRemoveScreen(e); + } + else { + return; + } + } + + function BgUnsavedChanges(val) { + hasUnsavedChangesRef.current = val + setHasUnsavedChanges(val); + } + + function BgWindowData(val) { + WindowDataRef.current = val + setSKUStockData(val); + } + + function onRemoveScreen(e) { + Alert.alert( + "", + "Do you really want to exit the screen?", + [ + { + text: "Cancel", + onPress: () => { }, + style: "cancel" + }, + { + text: "OK", onPress: async () => { + // setHasUnsavedChanges(false); + BgUnsavedChanges(false) + await clear_item('storeData') + props.navigation.dispatch(e.data.action); + } + } + ] + ); + } + + async function getData(storeData1, menu1) { + try { + let { StoreId, ChainId, StateId, StoreTypeId, StoreClassId, StoreCategoryId } = storeData1; + let allCats = []; + let AllKPIFields = await getKPIFields(menu1); + setKPIFields(AllKPIFields); + let AllKPIFieldsWithoutFilter = await getKPIFieldsWithSpecific(); + setKPIFieldsWithoutFilter(AllKPIFieldsWithoutFilter) + + let isMDSTOCKExists = await checkMDStockScreenExists(storeData1, 'MDSTOCK') + setIsMidDayStockScreen(isMDSTOCKExists); + + let storeBGData1 = [], bgStoreJson = {}; + let windData = await get_item('storeData') + // console.log("local storeData in getdata:",windData); + if (windData != null && windData != '') { + let StoreJson = JSON.parse(windData) + let { storeBGData, menuName, StoreId1, visiteDate } = StoreJson + if (storeBGData.length > 0 && menuName == menu1.ScreenName && StoreId1 == StoreId && visiteDate == d2) { + storeBGData1 = storeBGData; + bgStoreJson = StoreJson + // setSKUStockData(storeBGData); + BgUnsavedChanges(true) + BgWindowData(storeBGData); + } + } + + db.transaction(async function (txn) { + + let seletlist = `PRODUCT as ProductName,PRODUCT_ID as ProductId,BRAND as BrandName,BRAND_ID as BrandId,MSL,OPENING_STOCK,MIDDAY_STOCK,CLOSING_STOCK,EXPIRY_ISOPEN,EXPIRY_STK,(OPENING_STOCK + MIDDAY_STOCK) as totalstock`; + let skuCheck_q = `SELECT ${seletlist} FROM ${AppTables.STOCK_DATA} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' and totalstock>0 `; + + + let q = `select DISTINCT tbl1.CategoryId,tbl1.CategoryName from + ( SELECT DISTINCT p.ProductId,p.ProductName ,p.CategoryId,p.CategoryName,p.CategorySequence,(st.OPENING_STOCK+st.MIDDAY_STOCK) as totalStock from Product_Master p + INNER join Mapping_ProductAssortmentStorewise mp on p.ProductId=mp.ProductId + INNER JOIN STOCK_DATA st on p.ProductId=st.PRODUCT_ID and STORE_ID='${StoreId}' and VISIT_DATE='${d2}' + where mp.StoreId='${StoreId}' and totalStock>0 order by p.CategorySequence ) tbl1 order by tbl1.CategorySequence`; + + let q2 = `select DISTINCT tbl1.CategoryId,tbl1.CategoryName from + ( SELECT DISTINCT p.ProductId,p.ProductName ,p.CategoryId,p.CategoryName,p.CategorySequence,(st.OPENING_STOCK+st.MIDDAY_STOCK) as totalStock from Product_Master p + INNER join Mapping_ProductAssortmentStorewise mp on p.ProductId=mp.ProductId + INNER JOIN STOCK_DATA st on p.ProductId=st.PRODUCT_ID and STORE_ID='${StoreId}' and VISIT_DATE='${d2}' + where mp.StoreId='${StoreId}' order by p.CategorySequence ) tbl1 order by tbl1.CategorySequence`; + + // console.log('closing stock q:',q); + // console.log('closing stock skuCheck_q:',skuCheck_q); + txn.executeSql(skuCheck_q, [], async function (txn2, txnres) { + console.log("prod len with sum >0", txnres.rows.length); + if (txnres.rows.length > 0) { + await txn.executeSql(q, [], async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + let arr = []; + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + arr.push(data); + if (i == txnres2.rows.length - 1) { + // setBrandData(arr); + getSKU(arr, storeData1, bgStoreJson, menu1, true); + } + } + + } + }, function (txnE, txnerr) { console.log(txnerr); }); + } + else { + // console.log('closing stock q2:',q2); + await txn.executeSql(q2, [], async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + let arr = []; + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + arr.push(data); + if (i == txnres2.rows.length - 1) { + // setBrandData(arr); + getSKU(arr, storeData1, bgStoreJson, menu1, false); + } + } + } + }, function (txnE, txnerr) { console.log(txnerr); }); + } + }, function (txnE, txnerr) { console.log(txnerr); }); + // setProcessing(false); + }); + } catch (err) { + console.log(err); + } + } + + async function getSKU(brands = [], storeData1 = {}, bgStoreJson = {}, menu1 = {}, totalstockValidate = false) { + + try { + let { StoreId, ChainId, StateId, StoreTypeId, ExpiryStock, StoreClassId, StoreCategoryId } = storeData1; + + let isExpStock1Index = KPIFields.findIndex(i => i.KPIFieldName == 'ExpiryStock1') + let isExpStock1PIObj = isExpStock1Index >= 0 ? KPIFields[isExpStock1Index] : {}; + let isExpStock1Enable = isExpStock1Index >= 0 ? isExpStock1PIObj['KPIFieldEnable'] : false; + + let isExpStock2Index = KPIFields.findIndex(i => i.KPIFieldName == 'ExpiryStock2') + let isExpStock2PIObj = isExpStock2Index >= 0 ? KPIFields[isExpStock2Index] : {}; + let isExpStock2Enable = isExpStock2Index >= 0 ? isExpStock2PIObj['KPIFieldEnable'] : false; + + let isExpStock3Index = KPIFields.findIndex(i => i.KPIFieldName == 'ExpiryStock3') + let isExpStock3PIObj = isExpStock3Index >= 0 ? KPIFields[isExpStock3Index] : {}; + let isExpStock3Enable = isExpStock3Index >= 0 ? isExpStock3PIObj['KPIFieldEnable'] : false; + + let isExpStock4Index = KPIFields.findIndex(i => i.KPIFieldName == 'ExpiryStock4') + let isExpStock4PIObj = isExpStock4Index >= 0 ? KPIFields[isExpStock4Index] : {}; + let isExpStock4Enable = isExpStock4Index >= 0 ? isExpStock4PIObj['KPIFieldEnable'] : false; + + let isStockCalculateIndex = KPIFields.findIndex(i => i.KPIFieldName == 'StockCalculate') + let isStockCalculatePIObj = isStockCalculateIndex >= 0 ? KPIFields[isStockCalculateIndex] : {}; + let isStockCalculateEnable = isStockCalculateIndex >= 0 ? isStockCalculatePIObj['KPIFieldEnable'] : false; + + + await db.transaction(async function (txn) { + var allSKUData = []; + await Promise.all( + brands.map(async (item, index) => { + + // if there is no OPS and MDS available then show all mapped product in closing stock with filled value as 0 + + let seletlist = `CLOSING_EXPIRYSTOCK1,ARTICLE_CODE,CLOSING_EXPIRYSTOCK2,CLOSING_EXPIRYSTOCK3,CLOSING_EXPIRYSTOCK4, MIDDAY_EXPIRYSTOCK1,MIDDAY_EXPIRYSTOCK2,MIDDAY_EXPIRYSTOCK3,MIDDAY_EXPIRYSTOCK4, EXPIRYSTOCK1,EXPIRYSTOCK2,EXPIRYSTOCK3,EXPIRYSTOCK4, PRODUCT as ProductName,PRODUCT_ID as ProductId,BRAND as BrandName,BRAND_ID as BrandId,MSL,OPENING_STOCK,MIDDAY_STOCK,CLOSING_STOCK,EXPIRY_ISOPEN,EXPIRY_STK,(OPENING_STOCK + MIDDAY_STOCK) as totalstock,IsCompetitor`; + let sku_q = `SELECT ${seletlist} FROM ${AppTables.STOCK_DATA} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' and CATEGORY_ID='${item.CategoryId}' ${(totalstockValidate ? `and totalstock>0` : '')} ORDER BY MSL desc, IsCompetitor ASC, PRODUCT ASC`; + let { storeBGData, menuName, StoreId1, visiteDate } = bgStoreJson; + + + return await txn.executeSql(sku_q, [], async function (txn2, txnres) { + if (txnres.rows.length > 0) { + console.log('product found :', txnres.rows.length); + let arr = []; + for (var i = 0; i < txnres.rows.length; i++) { + let data = txnres.rows.item(i); + if (!isStockCalculateEnable) { + inputRefs.current['input1_' + item.CategoryId + '_' + data.ProductId] = ''; + } + + // if((isExpStockEnable && !isStockCalculateEnable)){ + // inputRefs.current['input2_'+item.CategoryId+'_'+data.ProductId]=''; + // } + if (isExpStock1Enable) { + inputRefs.current['input2_' + item.CategoryId + '_' + data.ProductId] = ''; + } + + if (isExpStock2Enable) { + inputRefs.current['input3_' + item.CategoryId + '_' + data.ProductId] = ''; + } + + if (isExpStock3Enable) { + inputRefs.current['input4_' + item.CategoryId + '_' + data.ProductId] = ''; + } + if (isExpStock4Enable) { + inputRefs.current['input5_' + item.CategoryId + '_' + data.ProductId] = ''; + } + arr.push(data); + + let defData = { 'CategoryId': item.CategoryId, 'ProductId': data.ProductId, 'ClosingStock': (totalstockValidate ? data.CLOSING_STOCK : '0'), 'CLOSING_ExpiryStock1': data.CLOSING_EXPIRYSTOCK1, 'CLOSING_ExpiryStock2': data.CLOSING_EXPIRYSTOCK2, 'CLOSING_ExpiryStock3': data.CLOSING_EXPIRYSTOCK3, 'CLOSING_ExpiryStock4': data.CLOSING_EXPIRYSTOCK4 }; + // let defData={'CategoryId':item.CategoryId,'ProductId':data.ProductId,'ClosingStock':(totalstockValidate?data.CLOSING_STOCK:'0'),'CLOSING_ExpiryStock1':1,'CLOSING_ExpiryStock2':0,'CLOSING_ExpiryStock3':0,'CLOSING_ExpiryStock4':0}; + allSKUData.push(defData); + if (i == txnres.rows.length - 1) { + item['skulist'] = arr; + brands[index] = item; + if (index == brands.length - 1) { + if (storeBGData != null && storeBGData != '' && menuName == menu1.ScreenName && StoreId1 == StoreId && visiteDate == d2) { + if (storeBGData.length <= 0) { + // setSKUStockData(allSKUData); + BgWindowData(allSKUData); + } + } else { + BgWindowData(allSKUData); + // setSKUStockData(allSKUData); + } + // setSKUStockData(allSKUData); + setBrandData(brands); + setProcessing(false); + } + return item; + } + } + } + else { + console.log('product not found return '); + item['skulist'] = []; + brands[index] = item; + setBrandData(brands); + setProcessing(false); + return item; + } + }, function (txnE, txnerr) { console.log(txnerr); setProcessing(false); return item; },); + return item; + }) + ); + }); + } catch (err) { + console.log(err); + } + } + + + async function submitOpeningStock() { + let isvalid = await validate(); + if (isvalid) { + Keyboard.dismiss(); + setShowAlert(true); + } + } + + async function saveData() { + + setShowAlert(false); + setLoaderTitle('Saving Data...'); + setProcessing(true); + let isExpStock1Index = KPIFields.findIndex(i => i.KPIFieldName == 'ExpiryStock1') + let isExpStock1PIObj = isExpStock1Index >= 0 ? KPIFields[isExpStock1Index] : {}; + let isExpStock1Enable = isExpStock1Index >= 0 ? isExpStock1PIObj['KPIFieldEnable'] : false; + + let isExpStock2Index = KPIFields.findIndex(i => i.KPIFieldName == 'ExpiryStock2') + let isExpStock2PIObj = isExpStock2Index >= 0 ? KPIFields[isExpStock2Index] : {}; + let isExpStock2Enable = isExpStock2Index >= 0 ? isExpStock2PIObj['KPIFieldEnable'] : false; + + let isExpStock3Index = KPIFields.findIndex(i => i.KPIFieldName == 'ExpiryStock3') + let isExpStock3PIObj = isExpStock3Index >= 0 ? KPIFields[isExpStock3Index] : {}; + let isExpStock3Enable = isExpStock3Index >= 0 ? isExpStock3PIObj['KPIFieldEnable'] : false; + + let isExpStock4Index = KPIFields.findIndex(i => i.KPIFieldName == 'ExpiryStock4') + let isExpStock4PIObj = isExpStock4Index >= 0 ? KPIFields[isExpStock4Index] : {}; + let isExpStock4Enable = isExpStock4Index >= 0 ? isExpStock4PIObj['KPIFieldEnable'] : false; + + let isStockCalculateIndex = KPIFields.findIndex(i => i.KPIFieldName == 'StockCalculate') + let isStockCalculatePIObj = isStockCalculateIndex >= 0 ? KPIFields[isStockCalculateIndex] : {}; + let isStockCalculateEnable = isStockCalculateIndex >= 0 ? isStockCalculatePIObj['KPIFieldEnable'] : false; + + try { + let { StoreId, ChainId, StateId, StoreTypeId } = storeData; + await db.transaction(async function (txn) { + + let q = `SELECT DISTINCT KEY_ID,CATEGORY_ID FROM ${AppTables.INSERT_OPENINGHEADER_DATA} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}'` + await txn.executeSql(q, [], async function (txn2, txnres) { + + if (txnres.rows.length > 0) { + for (var i = 0; i < txnres.rows.length; i++) { + let catdata = txnres.rows.item(i); + let c_index = i; + let q2 = `SELECT * FROM ${AppTables.STOCK_DATA} WHERE CATEGORY_ID='${catdata.CATEGORY_ID}' and STORE_ID='${StoreId}' and VISIT_DATE='${d2}'` + + await txn.executeSql(q2, [], async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + for (var j = 0; j < txnres2.rows.length; j++) { + let skuData = txnres2.rows.item(j); + let p_index = j; + let new_q = ''; + let thisCatSkuData_i = SKUStockData.findIndex(ci => ci.CategoryId == catdata.CATEGORY_ID && ci.ProductId == skuData.PRODUCT_ID); + let thisCatSkuData = thisCatSkuData_i >= 0 ? (SKUStockData[thisCatSkuData_i] || {}) : {}; + let closing_Stock = thisCatSkuData.ClosingStock != null ? thisCatSkuData.ClosingStock : ''; + let expStock1 = isExpStock1Enable == true ? (thisCatSkuData['CLOSING_ExpiryStock1'] != null ? thisCatSkuData['CLOSING_ExpiryStock1'] : '0') : '0'; + let expStock2 = isExpStock2Enable == true ? (thisCatSkuData['CLOSING_ExpiryStock2'] != null ? thisCatSkuData['CLOSING_ExpiryStock2'] : '0') : '0'; + let expStock3 = isExpStock3Enable == true ? (thisCatSkuData['CLOSING_ExpiryStock3'] != null ? thisCatSkuData['CLOSING_ExpiryStock3'] : '0') : '0'; + let expStock4 = isExpStock4Enable == true ? (thisCatSkuData['CLOSING_ExpiryStock4'] != null ? thisCatSkuData['CLOSING_ExpiryStock4'] : '0') : '0'; + + if (isStockCalculateEnable) { + let StockData = parseInt(expStock1) + parseInt(expStock2) + parseInt(expStock3) + parseInt(expStock4) + new_q = `UPDATE ${AppTables.STOCK_DATA} SET CLOSING_STOCK='${(StockData || '0')}', CLOSING_EXPIRYSTOCK1=='${expStock1}',CLOSING_EXPIRYSTOCK2=='${expStock2}',CLOSING_EXPIRYSTOCK3=='${expStock3}',CLOSING_EXPIRYSTOCK4=='${expStock4}' WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' and CATEGORY_ID='${catdata.CATEGORY_ID}' and PRODUCT_ID='${skuData.PRODUCT_ID}' `; + } else { + new_q = `UPDATE ${AppTables.STOCK_DATA} SET CLOSING_STOCK='${closing_Stock}' WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' and CATEGORY_ID='${catdata.CATEGORY_ID}' and PRODUCT_ID='${skuData.PRODUCT_ID}' `; + } + + await txn.executeSql(new_q, [], async function (txn2, txnres3) { + console.log('updated closing stock', closing_Stock); + if (c_index == txnres.rows.length - 1 && p_index == txnres2.rows.length - 1) { + afterUpdate(); + } + }, function (txnE, txnerr) { console.log(txnerr); notify('Oops! Error occur while updating Midday-Stock') },); + } + } else { + if (c_index == txnres.rows.length - 1) { + setProcessing(false); + } + } + + }, function (txnE, txnerr) { console.log(txnerr); },); + } + } + else { + setProcessing(false); + } + }, function (txnE, txnerr) { console.log(txnerr); },); + + }); + } catch (err) { + console.log(err); + } + } + + async function focusToNext(cat, sku, type = '1') { + + let activeKey = ''; + let arr = Object.keys(inputRefs.current); + + activeKey = 'input' + type + '_' + cat.CategoryId + '_' + sku.ProductId; + + let activeIndex = arr.indexOf(activeKey); + if (activeIndex < arr.length - 1) { + let nextKey = arr[++activeIndex] + let nextRef = inputRefs.current[nextKey]; + console.log("nextKey", nextKey, nextRef, inputRefs.current[nextKey]) + nextRef.focus(); + } + else { + return + } + } + + async function afterUpdate() { + BgUnsavedChanges(false) + setProcessing(false); + // clear store data in local storage to avoiding re-set data for the store + clear_item('storeData') + notify('Midday-Stock updated successfully'); + props.navigation.goBack(); + } + + + async function validate() { + let isValid = true; + var i = 0, j = 0, error_Type = ""; + + let isExpStock1Index = KPIFields.findIndex(i => i.KPIFieldName == 'ExpiryStock1') + let isExpStock1PIObj = isExpStock1Index >= 0 ? KPIFields[isExpStock1Index] : {}; + let isExpStock1Enable = isExpStock1Index >= 0 ? isExpStock1PIObj['KPIFieldEnable'] : false; + let isExpStock1DisplayName = isExpStock1Index >= 0 ? isExpStock1PIObj['KPIFieldDisplayName'] : "ExpStock 1"; + + let isExpStock2Index = KPIFields.findIndex(i => i.KPIFieldName == 'ExpiryStock2') + let isExpStock2PIObj = isExpStock2Index >= 0 ? KPIFields[isExpStock2Index] : {}; + let isExpStock2Enable = isExpStock2Index >= 0 ? isExpStock2PIObj['KPIFieldEnable'] : false; + let isExpStock2DisplayName = isExpStock2Index >= 0 ? isExpStock2PIObj['KPIFieldDisplayName'] : "ExpStock 2"; + + let isExpStock3Index = KPIFields.findIndex(i => i.KPIFieldName == 'ExpiryStock3') + let isExpStock3PIObj = isExpStock3Index >= 0 ? KPIFields[isExpStock3Index] : {}; + let isExpStock3Enable = isExpStock3Index >= 0 ? isExpStock3PIObj['KPIFieldEnable'] : false; + let isExpStock3DisplayName = isExpStock3Index >= 0 ? isExpStock3PIObj['KPIFieldDisplayName'] : "ExpStock 3"; + + let isExpStock4Index = KPIFields.findIndex(i => i.KPIFieldName == 'ExpiryStock4') + let isExpStock4PIObj = isExpStock4Index >= 0 ? KPIFields[isExpStock4Index] : {}; + let isExpStock4Enable = isExpStock4Index >= 0 ? isExpStock4PIObj['KPIFieldEnable'] : false; + let isExpStock4DisplayName = isExpStock4Index >= 0 ? isExpStock4PIObj['KPIFieldDisplayName'] : "ExpStock 4"; + + let isStockCalculateIndex = KPIFields.findIndex(i => i.KPIFieldName == 'StockCalculate') + let isStockCalculatePIObj = isStockCalculateIndex >= 0 ? KPIFields[isStockCalculateIndex] : {}; + let isStockCalculateEnable = isStockCalculateIndex >= 0 ? isStockCalculatePIObj['KPIFieldEnable'] : false; + + + await Promise.all( + brandData.map(async (item, index) => { + if (isValid) { + let catId = item.CategoryId; + let errorobj = { 'EF_brand': item }; + let skulist = item.skulist || []; + console.log('skulist', skulist) + if (skulist.length > 0) { + await Promise.all( + skulist.map(async (skuItem, skuIndex) => { + if (isValid) { + let skuData = SKUStockData.find(ci => ci.CategoryId == item.CategoryId && ci.ProductId == skuItem.ProductId) || {}; + let OS = skuItem.OPENING_STOCK || 0; + let MDS = skuItem.MIDDAY_STOCK || 0; + let maxClosingStock = IsMidDayStockScreen == true ? parseInt(OS) + parseInt(MDS) : parseInt(OS); + // ExpiryStock1 + + errorobj['EF_product'] = skuItem; + let error_bid = item.CategoryId + let error_pid = skuItem.ProductId + let show_errorH = false, error_HInputKey = '', error_HInputKeyEx1 = '', error_HInputKeyEx2 = '', error_HInputKeyEx3 = '', error_HInputKeyEx4 = ''; + + + let OS_Exp1 = skuItem.EXPIRYSTOCK1 || 0; + let OS_Exp2 = skuItem.EXPIRYSTOCK2 || 0; + let OS_Exp3 = skuItem.EXPIRYSTOCK3 || 0; + let OS_Exp4 = skuItem.EXPIRYSTOCK4 || 0; + + let MDS_Exp1 = skuItem.MIDDAY_EXPIRYSTOCK1 || 0; + let MDS_Exp2 = skuItem.MIDDAY_EXPIRYSTOCK2 || 0; + let MDS_Exp3 = skuItem.MIDDAY_EXPIRYSTOCK3 || 0; + let MDS_Exp4 = skuItem.MIDDAY_EXPIRYSTOCK4 || 0; + + let maxClosingStockExp1 = IsMidDayStockScreen == true ? parseInt(OS_Exp1) + parseInt(MDS_Exp1) : parseInt(OS_Exp1); + let maxClosingStockExp2 = IsMidDayStockScreen == true ? parseInt(OS_Exp2) + parseInt(MDS_Exp2) : parseInt(OS_Exp2); + let maxClosingStockExp3 = IsMidDayStockScreen == true ? parseInt(OS_Exp3) + parseInt(MDS_Exp3) : parseInt(OS_Exp3); + let maxClosingStockExp4 = IsMidDayStockScreen == true ? parseInt(OS_Exp4) + parseInt(MDS_Exp4) : parseInt(OS_Exp4); + + let ex_stock1 = skuData.CLOSING_ExpiryStock1 != null ? skuData.CLOSING_ExpiryStock1 : 0; + let ex_stock2 = skuData.CLOSING_ExpiryStock2 != null ? skuData.CLOSING_ExpiryStock2 : 0; + let ex_stock3 = skuData.CLOSING_ExpiryStock3 != null ? skuData.CLOSING_ExpiryStock3 : 0; + let ex_stock4 = skuData.CLOSING_ExpiryStock4 != null ? skuData.CLOSING_ExpiryStock4 : 0; + // console.log('closing_Stock',closing_Stock) + + + let calVal = parseInt(ex_stock1 || 0) + parseInt(ex_stock2 || 0) + parseInt(ex_stock3 || 0) + parseInt(ex_stock4 || 0) + + if (isStockCalculateEnable == false && skuData.ClosingStock !== 0 && (skuData.ClosingStock == null || skuData.ClosingStock == '')) { + notify('Please enter Closing-Stock for ' + skuItem.ProductName, 'SHORT'); + isValid = false; + show_errorH = true, error_HInputKey = 'input1_', error_Type = 'input1_'; + } else if ((isExpStock1Enable == true) && skuData.CLOSING_ExpiryStock1 !== 0 && (skuData.CLOSING_ExpiryStock1 == null || skuData.CLOSING_ExpiryStock1 == '')) { + notify('Please enter ' + isExpStock1DisplayName + ' for ' + skuItem.ProductName, 'SHORT'); + isValid = false; + show_errorH = true, error_HInputKeyEx1 = 'input2_', error_Type = 'input2_'; + } else if ((isExpStock2Enable == true) && skuData.CLOSING_ExpiryStock2 !== 0 && (skuData.CLOSING_ExpiryStock2 == null || skuData.CLOSING_ExpiryStock2 == '')) { + notify('Please enter ' + isExpStock2DisplayName + ' for ' + skuItem.ProductName, 'SHORT'); + isValid = false; + show_errorH = true, error_HInputKeyEx2 = 'input3_', error_Type = 'input3_'; + } else if ((isExpStock3Enable == true) && skuData.CLOSING_ExpiryStock3 !== 0 && (skuData.CLOSING_ExpiryStock3 == null || skuData.CLOSING_ExpiryStock3 == '')) { + notify('Please enter ' + isExpStock3DisplayName + ' for ' + skuItem.ProductName, 'SHORT'); + isValid = false; + show_errorH = true, error_HInputKeyEx3 = 'input4_', error_Type = 'input4_'; + } else if ((isExpStock4Enable == true) && skuData.CLOSING_ExpiryStock4 !== 0 && (skuData.CLOSING_ExpiryStock4 == null || skuData.CLOSING_ExpiryStock4 == '')) { + notify('Please enter ' + isExpStock4DisplayName + ' for ' + skuItem.ProductName, 'SHORT'); + isValid = false; + show_errorH = true, error_HInputKeyEx4 = 'input5_', error_Type = 'input5_'; + } else if (isStockCalculateEnable == false && parseInt(skuData.ClosingStock) > maxClosingStock) { + IsMidDayStockScreen == true ? notify('Closing-Stock Should not be greater than the sum of Opening-Stock and Midday-Stock for ' + skuItem.ProductName) : notify('Closing-Stock Should not be greater than the Opening-Stock for ' + skuItem.ProductName); + isValid = false; + show_errorH = true, error_HInputKey = 'input1_', error_Type = 'input1_'; + } else if (parseInt(ex_stock1) > maxClosingStockExp1) { + IsMidDayStockScreen == true ? notify(isExpStock1DisplayName + ' Should not be greater than the sum of Opening-Stock and Midday-Stock for ' + skuItem.ProductName) : notify('Closing-Stock Should not be greater than the Opening-Stock for ' + skuItem.ProductName); + isValid = false; + show_errorH = true, error_HInputKeyEx1 = 'input2_', error_Type = 'input2_'; + } else if (parseInt(ex_stock2) > maxClosingStockExp2) { + IsMidDayStockScreen == true ? notify(isExpStock2DisplayName + ' Should not be greater than the sum of Opening-Stock and Midday-Stock for ' + skuItem.ProductName) : notify('Closing-Stock Should not be greater than the Opening-Stock for ' + skuItem.ProductName); + isValid = false; + show_errorH = true, error_HInputKeyEx2 = 'input3_', error_Type = 'input3_'; + } else if (parseInt(ex_stock3) > maxClosingStockExp3) { + IsMidDayStockScreen == true ? notify(isExpStock3DisplayName + ' Should not be greater than the sum of Opening-Stock and Midday-Stock for ' + skuItem.ProductName) : notify('Closing-Stock Should not be greater than the Opening-Stock for ' + skuItem.ProductName); + isValid = false; + show_errorH = true, error_HInputKeyEx3 = 'input4_', error_Type = 'input4_'; + } else if (parseInt(ex_stock4) > maxClosingStockExp4) { + IsMidDayStockScreen == true ? notify(isExpStock4DisplayName + ' Should not be greater than the sum of Opening-Stock and Midday-Stock for ' + skuItem.ProductName) : notify('Closing-Stock Should not be greater than the Opening-Stock for ' + skuItem.ProductName); + isValid = false; + show_errorH = true, error_HInputKeyEx4 = 'input5_', error_Type = 'input5_'; + } + + + + + if (show_errorH) { + errorobj['EF_InputKey'] = error_HInputKey; + errorobj['error_HInputKeyEx1'] = error_HInputKeyEx1; + errorobj['error_HInputKeyEx2'] = error_HInputKeyEx2; + errorobj['error_HInputKeyEx3'] = error_HInputKeyEx3; + errorobj['error_HInputKeyEx4'] = error_HInputKeyEx4; + + setErrorField(errorobj) + setError(true) + let refIn1 = inputRefs.current[error_Type + error_bid + '_' + error_pid]; + refIn1.focus(); + } + } + }) + ); + } + } + }) + ); + + console.log('isValid:', isValid); + return isValid; + } + + async function onChangeValidate(cat, CategoryIndex, skus, ProductIndex) { + let isValid = true; + let d = { 'CategoryId': cat.CategoryId, 'CategoryIndex': CategoryIndex, 'ProductId': skus.ProductId, 'ProductIndex': ProductIndex }; + + + console.log('vdData', d); + + + let skulist = skus || []; + console.log('skulist', skulist) + + let skuData = SKUStockData.find(ci => ci.CategoryId == cat.CategoryId && ci.ProductId == skus.ProductId) || {}; + console.log('skuData', skuData) + let OS = skulist.OPENING_STOCK || 0; + console.log('OS', OS) + let MDS = skulist.MIDDAY_STOCK || 0; + console.log('MDS', MDS) + let maxClosingStock = IsMidDayStockScreen == true ? parseInt(OS) + parseInt(MDS) : parseInt(OS); + console.log('maxClosingStock', maxClosingStock) + if (skuData.ClosingStock != null && skuData.ClosingStock != '') { + if (skuData.ClosingStock !== 0 && skuData.ClosingStock !== '' && !validateNumber(skuData.ClosingStock, 'numeric', false)) { + notify('Please enter whole numbers only for ' + skulist.ProductName + ' Closing-Stock', 'SHORT'); + isValid = false; + } else if (parseInt(skuData.ClosingStock) > maxClosingStock) { + IsMidDayStockScreen == true ? notify('Closing-Stock Should not be greater than the sum of Opening-Stock and Midday-Stock for ' + skulist.ProductName) : notify('Closing-Stock Should not be greater than the Opening-Stock for ' + skulist.ProductName); + isValid = false; + } else { + + } + } + else { + + } + + console.log('isValid:', isValid); + return isValid; + } + + + function onStockValChange(item, skuItem, val, key, type = '') { + setError(false) + setErrorField({}) + if (val != '') { + let isValid = validateNumber(val, type); + if (!isValid) { + return; + } + } + + let allSKUData = SKUStockData; + let defData = { 'CategoryId': item.CategoryId, 'ProductId': skuItem.ProductId }; + const skud_index = allSKUData.findIndex(i => i.CategoryId == item.CategoryId && i.ProductId == skuItem.ProductId); + const skud = skud_index >= 0 ? (allSKUData[skud_index] || defData) : defData; + skud[key] = val; + + skud_index >= 0 ? allSKUData[skud_index] = skud : allSKUData.push(skud); + // setSKUStockData(allSKUData); + BgWindowData(allSKUData); + // setHasUnsavedChanges(true); + BgUnsavedChanges(true); + setrerenderdata(!rerenderdata); + } + + function _render_Alert() { + return ( + + + { setShowAlert(false) }}> + Cancel + + { saveData() }}> + Yes + + + + ) + } + + return ( + + {processing && } + + {_render_Alert()} + + + {Object.keys(storeData).length > 0 && + + + { + const cat = item; + const cat_index = index; + + // get error field brand id + let EF_brand = errorfield.EF_brand != null ? errorfield.EF_brand : {}; + let error_bid = EF_brand.CategoryId || ''; + + let isExpStock1Index = KPIFields.findIndex(i => i.KPIFieldName == 'ExpiryStock1') + let isExpStock1PIObj = isExpStock1Index >= 0 ? KPIFields[isExpStock1Index] : {}; + let isExpStock1Enable = isExpStock1Index >= 0 ? isExpStock1PIObj['KPIFieldEnable'] : false; + let isExpStock1DisplayName = isExpStock1Index >= 0 ? isExpStock1PIObj['KPIFieldDisplayName'] : "ExpStock 1"; + + let isExpStock2Index = KPIFields.findIndex(i => i.KPIFieldName == 'ExpiryStock2') + let isExpStock2PIObj = isExpStock2Index >= 0 ? KPIFields[isExpStock2Index] : {}; + let isExpStock2Enable = isExpStock2Index >= 0 ? isExpStock2PIObj['KPIFieldEnable'] : false; + let isExpStock2DisplayName = isExpStock2Index >= 0 ? isExpStock2PIObj['KPIFieldDisplayName'] : "ExpStock 2"; + + let isExpStock3Index = KPIFields.findIndex(i => i.KPIFieldName == 'ExpiryStock3') + let isExpStock3PIObj = isExpStock3Index >= 0 ? KPIFields[isExpStock3Index] : {}; + let isExpStock3Enable = isExpStock3Index >= 0 ? isExpStock3PIObj['KPIFieldEnable'] : false; + let isExpStock3DisplayName = isExpStock3Index >= 0 ? isExpStock3PIObj['KPIFieldDisplayName'] : "ExpStock 3"; + + let isExpStock4Index = KPIFields.findIndex(i => i.KPIFieldName == 'ExpiryStock4') + let isExpStock4PIObj = isExpStock4Index >= 0 ? KPIFields[isExpStock4Index] : {}; + let isExpStock4Enable = isExpStock4Index >= 0 ? isExpStock4PIObj['KPIFieldEnable'] : false; + let isExpStock4DisplayName = isExpStock4Index >= 0 ? isExpStock4PIObj['KPIFieldDisplayName'] : "ExpStock 4"; + + let isStockCalculateIndex = KPIFields.findIndex(i => i.KPIFieldName == 'StockCalculate') + let isStockCalculatePIObj = isStockCalculateIndex >= 0 ? KPIFields[isStockCalculateIndex] : {}; + let isStockCalculateEnable = isStockCalculateIndex >= 0 ? isStockCalculatePIObj['KPIFieldEnable'] : false; + + let isColor_MSLIndex = KPIFieldsWithoutFilter.findIndex(i => i.KPIFieldName == 'Color_MSL') + let isColor_MSLObj = isColor_MSLIndex >= 0 ? KPIFieldsWithoutFilter[isColor_MSLIndex] : {}; + let isColor_MSLEnable = isColor_MSLIndex >= 0 ? isColor_MSLObj['KPIFieldEnable'] : false; + let Color_MSL = isColor_MSLEnable && isColor_MSLIndex >= 0 ? isColor_MSLObj['KPIFieldDisplayName'] : "" + + let isColor_NONMSLIndex = KPIFieldsWithoutFilter.findIndex(i => i.KPIFieldName == 'Color_NONMSL') + let isColor_NONMSLObj = isColor_NONMSLIndex >= 0 ? KPIFieldsWithoutFilter[isColor_NONMSLIndex] : {}; + let isColor_NONMSLEnable = isColor_NONMSLIndex >= 0 ? isColor_NONMSLObj['KPIFieldEnable'] : false; + let Color_NONMSL = isColor_NONMSLEnable && isColor_NONMSLIndex >= 0 ? isColor_NONMSLObj['KPIFieldDisplayName'] : "" + + let isColor_CompetitionIndex = KPIFieldsWithoutFilter.findIndex(i => i.KPIFieldName == 'Color_Competition') + let isColor_CompetitionObj = isColor_CompetitionIndex >= 0 ? KPIFieldsWithoutFilter[isColor_CompetitionIndex] : {}; + let isColor_CompetitionEnable = isColor_CompetitionIndex >= 0 ? isColor_CompetitionObj['KPIFieldEnable'] : false; + let Color_Competition = isColor_CompetitionEnable && isColor_CompetitionIndex >= 0 ? isColor_CompetitionObj['KPIFieldDisplayName'] : "" + console.log("Color_MSL----", Color_MSL, Color_NONMSL, Color_Competition) + + const getBackgroundStyle = (skus) => { + if (skus?.MSL && skus?.MSL === 1 && skus?.IsCompetitor === 0 && Color_MSL !== "") { + return { backgroundColor: Color_MSL }; + } + if (skus?.MSL === 0 && skus?.IsCompetitor === 0 && Color_NONMSL !== "") { + return { backgroundColor: Color_NONMSL }; + } + if (skus?.IsCompetitor === 1 && Color_Competition !== "") { + return { backgroundColor: Color_Competition }; + } + + return null; + }; + + return ( + + + + {item.CategoryName} + + + + + { { + const skus = item; + const BrandId = item.BrandId; + const ProductId = item.ProductId; + const sku_index = index; + let calVal = 0; + + let thisCatSkuData_i = SKUStockData.findIndex(i => i.CategoryId == cat.CategoryId && i.ProductId == skus.ProductId); + // console.log('thisCatSkuData_i',thisCatSkuData_i) + + let thisCatSkuData = thisCatSkuData_i >= 0 ? (SKUStockData[thisCatSkuData_i] || {}) : {}; + // console.log('thisCatSkuData',thisCatSkuData) + let categoryId = thisCatSkuData.CategoryId + let closing_Stock = thisCatSkuData.ClosingStock != null ? thisCatSkuData.ClosingStock : ''; + + let ex_stock1 = thisCatSkuData.CLOSING_ExpiryStock1 != null ? thisCatSkuData.CLOSING_ExpiryStock1 : ''; + let ex_stock2 = thisCatSkuData.CLOSING_ExpiryStock2 != null ? thisCatSkuData.CLOSING_ExpiryStock2 : ''; + let ex_stock3 = thisCatSkuData.CLOSING_ExpiryStock3 != null ? thisCatSkuData.CLOSING_ExpiryStock3 : ''; + let ex_stock4 = thisCatSkuData.CLOSING_ExpiryStock4 != null ? thisCatSkuData.CLOSING_ExpiryStock4 : ''; + // console.log('closing_Stock',closing_Stock) + + if (isStockCalculateEnable) { + calVal = parseInt(ex_stock1 || 0) + parseInt(ex_stock2 || 0) + parseInt(ex_stock3 || 0) + parseInt(ex_stock4 || 0) + } + + // get error field product id + let EF_product = errorfield.EF_product != null ? errorfield.EF_product : {}; + let error_pid = EF_product.ProductId || ''; + let EF_InputKey = errorfield.EF_InputKey; + let show_errorhere = error_bid == cat.CategoryId && error_pid == skus.ProductId; + + let errorStyle_ST = (error && show_errorhere && EF_InputKey == 'input1_' ? customStyle.stk_inptSTyle_error : {}); + + let error_HInputKeyEx1 = (error && show_errorhere && errorfield.error_HInputKeyEx1 == 'input2_' ? customStyle.stk_inptSTyle_error : {}); + let error_HInputKeyEx2 = (error && show_errorhere && errorfield.error_HInputKeyEx2 == 'input3_' ? customStyle.stk_inptSTyle_error : {}); + let error_HInputKeyEx3 = (error && show_errorhere && errorfield.error_HInputKeyEx3 == 'input4_' ? customStyle.stk_inptSTyle_error : {}); + let error_HInputKeyEx4 = (error && show_errorhere && errorfield.error_HInputKeyEx4 == 'input5_' ? customStyle.stk_inptSTyle_error : {}); + + + return ( + + {/* {skus.ProductName} */} + + {skus.ArticleCode && skus.ArticleCode.trim() !== "" + ? `${skus.ProductName} [${skus.ArticleCode}]` + : skus.ARTICLE_CODE && skus.ARTICLE_CODE.trim() !== "" + ? `${skus.ProductName} [${skus.ARTICLE_CODE}]` + : skus.ProductName} + + + {IsMidDayStockScreen == true && + + {`Opening Stock + Midday Stock : (${skus.OPENING_STOCK} + ${skus.MIDDAY_STOCK}) :`} + {(parseInt(skus.MIDDAY_STOCK || 0) + parseInt(skus.OPENING_STOCK || 0))} + + } + {IsMidDayStockScreen == false && + + {`Opening Stock : ${skus.OPENING_STOCK}`} + + } + + {isStockCalculateEnable == true && + + + Closing Stock + + {"OpS+MdS"} + + + } + {isStockCalculateEnable != true && + + + + Closing Stock + { inputRefs.current['input1_' + cat.CategoryId + '_' + skus.ProductId] = reff; }} + style={[customStyle.openStk_prd_inputStyle, customStyle.openStk_prd_flex_inputStyle, customStyle.openStk_prd_inputShort2, errorStyle_ST]} + placeholder="" + // onFocus={() =>validate() } + onBlur={(e) => { + onChangeValidate(cat, cat_index, skus, sku_index) + }} + // onSubmitEditing={validatedata(item,index)} + placeholderTextColor={PageTheme.$placeholder_color} + returnKeyType={(Platform.OS === 'ios') ? 'done' : 'next'} + blurOnSubmit={false} + value={(closing_Stock + '' || '')} + autoComplete='off' + maxLength={6} + keyboardType='number-pad' + onSubmitEditing={() => { focusToNext(cat, skus, '1') }} + onChangeText={(val) => { onStockValChange(cat, skus, val, 'ClosingStock', 'numeric') }} + /> + + + + } + {isExpStock1Enable == true && + + + {isExpStock1DisplayName} + { inputRefs.current['input2_' + cat.CategoryId + '_' + skus.ProductId] = reff; }} + style={[customStyle.openStk_prd_inputStyle, customStyle.openStk_prd_flex_inputStyle, customStyle.openStk_prd_inputShort2, error_HInputKeyEx1]} + placeholder="" + autoComplete='off' + placeholderTextColor={PageTheme.$placeholder_color} + value={(ex_stock1 + '' || '')} + returnKeyType={(Platform.OS === 'ios') ? 'done' : 'next'} + maxLength={6} + keyboardType='number-pad' + blurOnSubmit={false} + onChangeText={(val) => { onStockValChange(cat, skus, val, 'CLOSING_ExpiryStock1', 'numeric') }} + onSubmitEditing={() => { focusToNext(cat, skus, '2') }} + /> + {(parseInt(skus.MIDDAY_EXPIRYSTOCK1 || 0) + parseInt(skus.EXPIRYSTOCK1 || 0))} + + + } + {isExpStock2Enable == true && + + + {isExpStock2DisplayName} + { inputRefs.current['input3_' + cat.CategoryId + '_' + skus.ProductId] = reff; }} + style={[customStyle.openStk_prd_inputStyle, customStyle.openStk_prd_flex_inputStyle, customStyle.openStk_prd_inputShort2, error_HInputKeyEx2]} + placeholder="" + autoComplete='off' + placeholderTextColor={PageTheme.$placeholder_color} + value={(ex_stock2 + '' || '')} + returnKeyType={(Platform.OS === 'ios') ? 'done' : 'next'} + maxLength={6} + keyboardType='number-pad' + blurOnSubmit={false} + onChangeText={(val) => { onStockValChange(cat, skus, val, 'CLOSING_ExpiryStock2', 'numeric') }} + onSubmitEditing={() => { focusToNext(cat, skus, '3') }} + /> + {(parseInt(skus.MIDDAY_EXPIRYSTOCK2 || 0) + parseInt(skus.EXPIRYSTOCK2 || 0))} + + + } + {isExpStock3Enable == true && + + + {isExpStock3DisplayName} + { inputRefs.current['input4_' + cat.CategoryId + '_' + skus.ProductId] = reff; }} + style={[customStyle.openStk_prd_inputStyle, customStyle.openStk_prd_flex_inputStyle, customStyle.openStk_prd_inputShort2, error_HInputKeyEx3]} + placeholder="" + autoComplete='off' + placeholderTextColor={PageTheme.$placeholder_color} + value={(ex_stock3 + '' || '')} + returnKeyType={(Platform.OS === 'ios') ? 'done' : 'next'} + maxLength={6} + keyboardType='number-pad' + blurOnSubmit={false} + onChangeText={(val) => { onStockValChange(cat, skus, val, 'CLOSING_ExpiryStock3', 'numeric') }} + onSubmitEditing={() => { focusToNext(cat, skus, '4') }} + /> + {(parseInt(skus.MIDDAY_EXPIRYSTOCK3 || 0) + parseInt(skus.EXPIRYSTOCK3 || 0))} + + + } + {isExpStock4Enable == true && + + + {isExpStock4DisplayName} + { inputRefs.current['input5_' + cat.CategoryId + '_' + skus.ProductId] = reff; }} + style={[customStyle.openStk_prd_inputStyle, customStyle.openStk_prd_flex_inputStyle, customStyle.openStk_prd_inputShort2, error_HInputKeyEx4]} + placeholder="" + autoComplete='off' + placeholderTextColor={PageTheme.$placeholder_color} + value={(ex_stock4 + '' || '')} + returnKeyType={(Platform.OS === 'ios') ? 'done' : 'next'} + maxLength={6} + keyboardType='number-pad' + blurOnSubmit={false} + onChangeText={(val) => { onStockValChange(cat, skus, val, 'CLOSING_ExpiryStock4', 'numeric') }} + onSubmitEditing={() => { focusToNext(cat, skus, '5') }} + /> + {(parseInt(skus.MIDDAY_EXPIRYSTOCK4 || 0) + parseInt(skus.EXPIRYSTOCK4 || 0))} + + + } + + + ) + }} /> + } + + + ); + }} + /> + + } + + { submitOpeningStock() }} /> + + + + + ); +} + + + +export default connect(mapStateToProps, mapDispatchToProps)(ClosingStock); \ No newline at end of file diff --git a/PerformicsSrc/src/screens/CompetitionPromotion.js b/PerformicsSrc/src/screens/CompetitionPromotion.js new file mode 100644 index 0000000..9aba632 --- /dev/null +++ b/PerformicsSrc/src/screens/CompetitionPromotion.js @@ -0,0 +1,1294 @@ +import React,{useState,useEffect,useRef} from 'react'; +import Container from '../components/container'; +import { useRoute } from '@react-navigation/native'; +import { globalStyles,customStyles,GetPageTheme } from "../styles/Global"; +import {StatusBar,Image,TextInput,View,Text,ScrollView,TouchableOpacity,Platform,PermissionsAndroid,FlatList, Alert, Animated, AppState, Keyboard} from 'react-native'; +import { ReactReduxContext,connect,useSelector, useDispatch } from 'react-redux'; +import { mapStateToProps,mapDispatchToProps } from '../reducers/contextProvider'; +import SQLite from 'react-native-sqlite-2'; +import {notify} from '../components/notify'; +import moment from 'moment'; +import {getDownloadJson,getKPIFields,marktext1,marktext2,resizeImage,restore_ImageWithMetaData,validateNumber} from '../controller/functions'; +import {get_item,set_item,clear_item} from '../components/localStorage'; +import {version,sloganline,appname,testurl,db, colors_Arr, common_ImagePath, ImageFolderPath} from '../constants/constants'; +import CustomHeader from '../components/customHeader'; +import {AntDesign, Entypo, FontAwesome, MaterialCommunityIcons} from '../components/icons'; +import CustomLoader from '../components/CustomLoader'; +import LinearGradient from 'react-native-linear-gradient'; +import { AppTables } from '../constants/tableConstants'; +import * as RNFS from 'react-native-fs'; +import GradientButton from '../components/gradientButton'; + +import CustomModal from '../components/CustomModal'; +import { ConfirmSaveAlert } from '../components/alert'; +import { CustomPicker } from '../components/CustomPicker'; +import CustomCamera from '../components/Camera'; +import CameraImg3 from '../assets/performics/camera_tick.svg'; +import CameraImg5 from '../assets/image/astrickcamera.svg'; + +function CompetitionPromotion(props) { + const route = useRoute(); + const ST=props.StaticText || {}; + + // get all theme styles acc to current theme set + const PageTheme=GetPageTheme(props.DarkMode,route.name); + const customStyle=customStyles(props.DarkMode,route.name); + const animatedChoice=useRef(new Animated.Value(0)).current; + + const [processing, setProcessing] = useState(true); + const [loaderTitle, setLoaderTitle] = useState('loading...'); + const [isAdhocScreen, setIsAdhocScreen] = useState(false); + const [storeData, setStoreData] = useState({}); + const [currentMenu, setCurrentMenu] = useState({}); + const [brandData, setBrandData] = useState([]); + const [rerenderdata, setrerenderdata]= useState(0); + const [rerenderdata2, setrerenderdata2]= useState(0); + const [hasUnsavedChanges,setHasUnsavedChanges] = useState(false); + + const [AddVisibility, setAddVisibility] = useState([]); + const [AddVisFormData, setAddVisFormData] = useState({}); + const [isAddVisPresent, setIsAddVisPresent] = useState(0); + const [showAlert, setShowAlert] = useState(false); + const [Companies, setCompanies] = useState([]); + const [Categories, setCategories] = useState([]); + const [SubCategories, setSubCategories] = useState([]); + const [Brands, setBrands] = useState([]); + const [Products, setProducts] = useState([]); + const [DisplayList, setDisplayList] = useState([]); + const [showCamera, setShowCamera] = useState(false); + const [getImageProps,setGetImageProps]= useState({}); + const [StoreCameraAllow, setStoreCameraAllow] = useState(true); + const [toRemoveId,setToRemoveId]= useState(''); + const [toRemoveItem,setToRemoveItem]= useState({}); + const [showRemoveConfirm_M,setshowRemoveConfirm_M]= useState(false); + const [showRAllC_M,setShowRAllC_M]= useState(false); + + + const [SelectedImg, setSelectedImg] = useState(''); + const [showModal, setShowModal] = useState(false); + const [reCapImgModalObj, setReCapImgModalObj] = useState({}); + const [showImageSaveOp, setShowImageSaveOp] = useState(true); + const [KPIFields, setKPIFields] = useState([]); + const [showSwitchCamera,setShowSwitchCamera]= useState(false); + + const hasUnsavedChangesRef = React.useRef(hasUnsavedChanges); + const WindowDataRef=React.useRef(AddVisibility); + const StoreIdRef=React.useRef(null); + const ScreenNameRef=React.useRef(''); + + + const VisFormDataRef=React.useRef(AddVisFormData); + const isAddVisPresentRef=React.useRef(isAddVisPresent); + + const d1=new Date(); + const d2=moment(d1).format('MM/DD/YYYY'); + + + useEffect(() => { + let params=props.route.params? props.route.params:{}; + let storeData1=params.storeData || {}; + let menu1=params.menu || {}; + let cameraAllow=storeData1.CameraAllow=='true' || storeData1.CameraAllow==1?true:false; + setStoreCameraAllow(cameraAllow); + + let isAdhoc=params.isAdhoc || false; + setIsAdhocScreen(isAdhoc); + setStoreData(storeData1); + setCurrentMenu(menu1); + + StoreIdRef.current=storeData1.StoreId + ScreenNameRef.current=menu1.ScreenName + getData(storeData1,menu1); + + const AppStateSubscription = AppState.addEventListener('change', (pro)=>{ _handleAppStateChange(pro)}); + const unsubscribe=props.navigation.addListener('beforeRemove', onBeforeRemove); + + return function cleanup() { + AppStateSubscription.remove(); + return unsubscribe; + }; + }, []); + + const _handleAppStateChange = async (nextAppState) => { + if(nextAppState =='background' && hasUnsavedChangesRef.current==true){ + let newData = { + storeBGData:WindowDataRef.current, + menuName:ScreenNameRef.current, + StoreId1:StoreIdRef.current, + AddFormData:VisFormDataRef.current, + isVisPresent:isAddVisPresentRef.current, + visiteDate:d2 + } + let WindowsStr= JSON.stringify(newData) + await set_item('storeData',WindowsStr); + } + } + + useEffect(() => { + const unsubscribe=props.navigation.addListener('beforeRemove', onBeforeRemove); + return unsubscribe; + // AppState.removeEventListener('change',(pro)=>{ _handleAppStateChange(AddVisibility,AddVisFormData,isAddVisPresent,pro)}); + // AppState.addEventListener('change',(pro)=>{ _handleAppStateChange(AddVisibility,AddVisFormData,isAddVisPresent,pro)}); + }, [hasUnsavedChanges]); + + + useEffect(() => { + const unsubscribe=props.navigation.addListener('beforeRemove', onBeforeRemove); + return unsubscribe; + }, [showCamera]); + + function onBeforeRemove(e){ + if(showCamera==true){ + e.preventDefault(); + setShowCamera(false); + } + else{ + if (hasUnsavedChanges==true) { + e.preventDefault(); // Prevent default behavior of leaving the screen + onRemoveScreen(e); + } + else{ + return; + } + } + } + + function BgUnsavedChanges(val){ + hasUnsavedChangesRef.current=val + setHasUnsavedChanges(val); + } + + function BgWindowData(val){ + WindowDataRef.current=val + setAddVisibility(val); + } + + function BgAddVisFormData(val){ + VisFormDataRef.current=val + setAddVisFormData(val); + } + + function BgIsAddVisPresent(val){ + isAddVisPresentRef.current=val + setIsAddVisPresent(val); + } + + function onRemoveScreen(e){ + Alert.alert( + "", + "Do you really want to exit the screen?", + [ + { + text: "Cancel", + onPress: () => {}, + style: "cancel" + }, + { text: "OK", onPress: async () => { + // setHasUnsavedChanges(false); + BgUnsavedChanges(false) + await clear_item('storeData') + props.navigation.dispatch(e.data.action);} } + ] + ); + } + + + async function getData(storeData1,menu1){ + try { + let {StoreId,ChainId,StateId,StoreTypeId}=storeData1; + + let AllKPIFields=await getKPIFields(menu1); + setKPIFields(AllKPIFields); + + // set switch camera flag as defined in mapping menu flag (if exists) + let SwitchingCameraI=AllKPIFields.findIndex(i=>i.KPIFieldName=='SwitchingCamera'); + let SwitchingCameraObj=SwitchingCameraI>=0?AllKPIFields[SwitchingCameraI]:{}; + let SwitchingCamera=SwitchingCameraI>=0?SwitchingCameraObj['KPIFieldEnable']:false; + setShowSwitchCamera(SwitchingCamera); + + + let storeBGData1=[],bgStoreJson={},isBgDataExists=false; + let windData = await get_item('storeData') + if(windData!=null && windData!=''){ + let StoreJson = JSON.parse(windData) + let { storeBGData,menuName,StoreId1,AddFormData,visiteDate,isVisPresent }= StoreJson + if(menuName == menu1.ScreenName && StoreId1== StoreId && visiteDate==d2){ + isBgDataExists=true; + + // Check if isVisPresent data exists in bg data + let bgPresent=isVisPresent==1?1:0; + Animated.timing(animatedChoice, { + toValue: bgPresent, + duration:400, + useNativeDriver:false, + }).start(); + BgIsAddVisPresent(bgPresent); + + // Check if added visibilities data exists in bg data + if(storeBGData.length>0){ + storeBGData1=storeBGData; + bgStoreJson=StoreJson + BgWindowData(storeBGData) + BgAddVisFormData(AddFormData) + } + + // Check if form data exists in bg data + if(AddFormData!=null && Object.keys(AddFormData).length>0){ + let {CategoryId,SubCategoryId,CompanyId,BrandId}=AddFormData; + // load categories if company exists + if(CompanyId!=null && CompanyId!=''){ + loadData(CompanyId,'Categories'); + } + // load subcategories if category exists + if(CategoryId!=null && CategoryId!=''){ + loadData(CategoryId,'SubCategories','','',CompanyId); + } + // load brands if subcategory exists + if(SubCategoryId!=null && CategoryId!=''){ + loadData(SubCategoryId,'Brands',CategoryId,'',CompanyId); + } + // load products if brand exists + if(BrandId!=null && BrandId!=''){ + loadData(BrandId,'Products',CategoryId,SubCategoryId,CompanyId); + } + + BgAddVisFormData(AddFormData) + } + BgUnsavedChanges(true) + } + } + + await db.transaction(async function (txn) { + + let q4=`Select distinct CompanyId,Company from Master_Competitor order by Company`; + await txn.executeSql(q4,[],async function (txn2, txnres2) { + if(txnres2.rows.length>0){ + let arr=[]; + for(var i=0;i0){ + let arr=[]; + for(var i=0;i0){ + let arr=[]; + for(var i=0;i { + // render data with clicked image + let uri='file://'+imagePath; + addvisdata[image_path_key]=uri; + + BgAddVisFormData(addvisdata) + BgUnsavedChanges(true) + setrerenderdata2(!rerenderdata2); + + // add metdata then resize image and restored back to the imagePath + let restore_data={"destFilePath":imagePath,"imgurl":imgurl,imgWidth,imgHeight,mark_text1,mark_text2} + let is_restored=await restore_ImageWithMetaData(restore_data,imgdata); + console.log("image restored:",is_restored); + }) + .catch(err => { + console.log('ERROR: image file write failed!!!'); + console.log(err.message, err.code); + }); + } + + } + + async function openCamera(type='1'){ + setGetImageProps({'type':type}); + setShowCamera(true); + } + + async function onSubmitData(){ + let isvalid=await validate(); + if(isvalid){ + Keyboard.dismiss(); + setShowAlert(true); + } + } + + async function saveData(){ + BgUnsavedChanges(false) + setShowAlert(false); + setLoaderTitle('Saving Data...'); + setProcessing(true); + try { + let {StoreId,ChainId,StateId,StoreTypeId}=storeData; + await db.transaction(async function (txn) { + + let q=`DELETE FROM ${AppTables.COMPETITION_PROMOTION} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' `; + + // remove old data + await txn.executeSql(q,[],async function (txn2, txnres) { + console.log('cp data deleted'); + },function (txnE,txnerr) { console.log(txnerr); },); + + var values=''; + if(isAddVisPresent==1 && AddVisibility.length>0){ + for(var i=0;ii.KPIFieldName=='CompPromoSellingPrice'); + let CompPromoSellingPriceObj=CompPromoSellingPriceI>=0?KPIFields[CompPromoSellingPriceI]:{}; + let CompPromoSellingPrice=CompPromoSellingPriceI>=0?CompPromoSellingPriceObj['KPIFieldEnable']:true; + let CompPromoSellingPriceLabel=CompPromoSellingPriceI>=0?CompPromoSellingPriceObj['KPIFieldDisplayName']:"Selling Price"; + + let CompPromoGrammageI=KPIFields.findIndex(i=>i.KPIFieldName=='CompPromoGrammage'); + let CompPromoGrammageObj=CompPromoGrammageI>=0?KPIFields[CompPromoGrammageI]:{}; + let CompPromoGrammage=CompPromoGrammageI>=0?CompPromoGrammageObj['KPIFieldEnable']:false; + let CompPromoGrammageLabel=CompPromoGrammageI>=0?CompPromoGrammageObj['KPIFieldDisplayName']:"Grammage"; + + let CompPromoDPerI=KPIFields.findIndex(i=>i.KPIFieldName=='CompPromoDiscountPercent'); + let CompPromoDPerObj=CompPromoDPerI>=0?KPIFields[CompPromoDPerI]:{}; + let CompPromoDPer=CompPromoDPerI>=0?CompPromoDPerObj['KPIFieldEnable']:false; + let CompPromoDPerLabel=CompPromoDPerI>=0?CompPromoDPerObj['KPIFieldDisplayName']:"Discount %"; + + let CompPromoShowImage1I=KPIFields.findIndex(i=>i.KPIFieldName=='ShowImage1'); + let CompPromoShowImage1Obj=CompPromoShowImage1I>=0?KPIFields[CompPromoShowImage1I]:{}; + let CompPromoShowImage1=CompPromoShowImage1I>=0?CompPromoShowImage1Obj['KPIFieldEnable']:true; + let CompPromoShowImage1Label=CompPromoShowImage1I>=0?CompPromoShowImage1Obj['KPIFieldDisplayName']:"Image"; + + let CompPromoShowImage2I=KPIFields.findIndex(i=>i.KPIFieldName=='ShowImage2'); + let CompPromoShowImage2Obj=CompPromoShowImage2I>=0?KPIFields[CompPromoShowImage2I]:{}; + let CompPromoShowImage2=CompPromoShowImage2I>=0?CompPromoShowImage2Obj['KPIFieldEnable']:false; + let CompPromoShowImage2Label=CompPromoShowImage2I>=0?CompPromoShowImage2Obj['KPIFieldDisplayName']:"Image"; + + let CompPromoGramImageI=KPIFields.findIndex(i=>i.KPIFieldName=='ShowImage3'); + let CompPromoGramImageObj=CompPromoGramImageI>=0?KPIFields[CompPromoGramImageI]:{}; + let CompPromoGramImage=CompPromoGramImageI>=0?CompPromoGramImageObj['KPIFieldEnable']:false; + let CompPromoGramImageLabel=CompPromoGramImageI>=0?CompPromoGramImageObj['KPIFieldDisplayName']:"Grammage Image"; + + + if((Company=='' || Company==null )|| (CompanyId=='' || CompanyId==null)){ + isValid=false; + notify('Please select company','SHORT'); + } + else if((CategoryName=='' || CategoryName==null )|| (CategoryId=='' || CategoryId==null)){ + isValid=false; + notify('Please select category','SHORT'); + } + else if((SubCategoryName=='' || SubCategoryName==null )|| (SubCategoryId=='' || SubCategoryId==null)){ + isValid=false; + notify('Please select sub category','SHORT'); + } + else if((BrandName=='' || BrandName==null )|| (BrandId=='' || BrandId==null)){ + isValid=false; + notify('Please select brand','SHORT'); + } + else if((ProductId=='' || ProductId==null )|| (ProductId=='' || ProductId==null)){ + isValid=false; + notify('Please select product','SHORT'); + } + else if(CompPromoGrammage && (Grammage=='' || Grammage==null || (Grammage!=null && parseInt(Grammage)<=0))){ + isValid=false; + notify('Please enter '+CompPromoGrammageLabel,'SHORT'); + } + else if((PromoTypeId=='' || PromoTypeId==null ) || (PromoType=='' || PromoType==null)){ + isValid=false; + notify('Please select promotion type','SHORT'); + } + else if(CompPromoDPer && DiscountPercent!==0 && (DiscountPercent=='' || DiscountPercent==null)){ + isValid=false; + notify('Please enter '+CompPromoDPerLabel,'SHORT'); + } + else if((MRP=='' || MRP==null || (SPrice!=null && parseInt(SPrice<=0)) )){ + isValid=false; + notify('Please enter MRP','SHORT'); + } + else if(CompPromoSellingPrice && (SPrice=='' || SPrice==null || (SPrice!=null && parseInt(SPrice)<=0))){ + isValid=false; + notify('Please enter '+CompPromoSellingPriceLabel,'SHORT'); + } + else if(CompPromoSellingPrice && parseInt(SPrice)>parseInt(MRP)){ + isValid=false; + notify('Selling price should not be greater than MRP','SHORT'); + } + else if((Remark=='' || Remark==null )){ + isValid=false; + notify('Please enter remark','SHORT'); + } + else if(StoreCameraAllow && CompPromoShowImage1 && (Image1=='' || Image1==null )){ + isValid=false; + notify('Please click '+CompPromoShowImage1Label,'SHORT'); + } + else if(StoreCameraAllow && CompPromoShowImage2 && (Image2=='' || Image2==null )){ + isValid=false; + notify('Please click '+CompPromoShowImage2Label,'SHORT'); + } + else if(StoreCameraAllow && CompPromoGramImage && (Image3=='' || Image3==null )){ + isValid=false; + notify('Please click '+CompPromoGramImageLabel,'SHORT'); + } + + console.log('isValid:',isValid); + return isValid; + } + + function onFormDataChange(val,key,type=''){ + if(val!=''){ + let isValid=validateNumber(val,type); + if(!isValid){ + return; + } + } + + let data=AddVisFormData; + data[key]=val; + // setAddVisFormData(data); + // setHasUnsavedChanges(true); + BgAddVisFormData(data) + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + + function onselectionChange(option,keyLbl,keyVal){ + + let data=AddVisFormData; + data[keyVal]=option.value; + data[keyLbl]=option.label; + // setAddVisFormData(data); + // setHasUnsavedChanges(true); + + if(keyLbl=='Company'){ + loadData(option.value,'Categories'); + + let newObj={}; + newObj[keyVal]=option.value; + newObj[keyLbl]=option.label; + data=newObj; + } + else if(keyLbl=='CategoryName'){ + loadData(option.value,'SubCategories','','',AddVisFormData.CompanyId); + + + let newObj={"CompanyId":AddVisFormData.CompanyId,"Company":AddVisFormData.Company}; + newObj[keyVal]=option.value; + newObj[keyLbl]=option.label; + data=newObj; + } + else if(keyLbl=='SubCategoryName'){ + loadData(option.value,'Brands',AddVisFormData.CategoryId,'',AddVisFormData.CompanyId); + + + let newObj={"CompanyId":AddVisFormData.CompanyId,"Company":AddVisFormData.Company,"CategoryId":AddVisFormData.CategoryId,"CategoryName":AddVisFormData.CategoryName}; + newObj[keyVal]=option.value; + newObj[keyLbl]=option.label; + data=newObj; + + } + else if(keyLbl=='BrandName'){ + loadData(option.value,'Products',AddVisFormData.CategoryId,AddVisFormData.SubCategoryId,AddVisFormData.CompanyId); + + + let newObj={"CompanyId":AddVisFormData.CompanyId,"Company":AddVisFormData.Company,"CategoryId":AddVisFormData.CategoryId,"CategoryName":AddVisFormData.CategoryName,"SubCategoryId":AddVisFormData.SubCategoryId,"SubCategoryName":AddVisFormData.SubCategoryName}; + newObj[keyVal]=option.value; + newObj[keyLbl]=option.label; + data=newObj; + + } + else if(keyLbl=='ProductName'){ + let newObj={"CompanyId":AddVisFormData.CompanyId,"Company":AddVisFormData.Company,"CategoryId":AddVisFormData.CategoryId,"CategoryName":AddVisFormData.CategoryName,"SubCategoryId":AddVisFormData.SubCategoryId,"SubCategoryName":AddVisFormData.SubCategoryName,"BrandId":AddVisFormData.BrandId,"BrandName":AddVisFormData.BrandName}; + newObj[keyVal]=option.value; + newObj[keyLbl]=option.label; + data=newObj; + } + else if(keyLbl=='PromoType'){ + let newObj={"CompanyId":AddVisFormData.CompanyId,"Company":AddVisFormData.Company,"CategoryId":AddVisFormData.CategoryId,"CategoryName":AddVisFormData.CategoryName,"SubCategoryId":AddVisFormData.SubCategoryId,"SubCategoryName":AddVisFormData.SubCategoryName,"BrandId":AddVisFormData.BrandId,"BrandName":AddVisFormData.BrandName,"ProductId":AddVisFormData.ProductId,"ProductName":AddVisFormData.ProductName,"Grammage":(AddVisFormData.Grammage!=null?AddVisFormData.Grammage:'')}; + newObj[keyVal]=option.value; + newObj[keyLbl]=option.label; + data=newObj; + } + BgAddVisFormData(data) + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + + + } + + async function loadData(qId,type,CatId,SubCatId,CompanyId){ + try { + await db.transaction(async function (txn) { + let q=''; + if(type=='Categories') q=`select distinct CategoryId,CategoryName from Master_Competitor where (CompanyId ='${qId}' or CompanyId = ${qId}) order by CategoryName`; + else if(type=='SubCategories') q=`Select Distinct p.SubCategoryId,p.SubCategoryName from Product_Master p where (p.CategoryId='${qId}' or p.CategoryId=${qId}) and (CompanyId ='${CompanyId}' or CompanyId = ${CompanyId}) order by p.SubCategorySequence`; + else if(type=='Brands') q=`Select Distinct p.BrandName,p.BrandId from Product_Master p Where (p.SubCategoryId='${qId}' or p.SubCategoryId=${qId}) and (CategoryId='${CatId}' or CategoryId= ${CatId}) and (CompanyId ='${CompanyId}' or CompanyId = ${CompanyId}) order by p.BrandSequence`; + else if(type=='Products') q=`select distinct ProductId,ProductName from Product_Master where (CompanyId ='${CompanyId}' or CompanyId = ${CompanyId}) and (CategoryId='${CatId}' or CategoryId= ${CatId}) and (SubCategoryId='${SubCatId}' or SubCategoryId= ${SubCatId}) and (BrandId='${qId}' or BrandId=${qId}) order by ProductSequence`; + + + await txn.executeSql(q,[],async function (txn2, txnres2) { + + if(txnres2.rows.length>0){ + let arr=[]; + for(var i=0;i0){ + setShowRAllC_M(true); + return ; + } + var val1=val==1?1:0; + if(animatedChoice!=null){ + Animated.timing(animatedChoice, { + toValue: val1, + duration:400, + useNativeDriver:false, + }).start(); + } + // setIsAddVisPresent(val); + // setHasUnsavedChanges(true); + BgIsAddVisPresent(val); + BgUnsavedChanges(true) + if(val==0){ + setAddVisibility([]); + setAddVisFormData({}); + } + } + + function onConfirmRemoveAll(){ + // Remove all data + if(animatedChoice!=null){ + Animated.timing(animatedChoice, { + toValue: 0, + duration:400, + useNativeDriver:false, + }).start(); + } + // setIsAddVisPresent(0); + // setHasUnsavedChanges(true); + BgIsAddVisPresent(0); + BgUnsavedChanges(true) + // setAddVisibility([]); + // setAddVisFormData({}); + BgWindowData([]) + BgAddVisFormData({}) + setShowRAllC_M(false); + } + + + function onSaveCancel(){ + setShowAlert(false); + } + + async function Add_AddVis(){ + let isValid=await validateForm(); + console.log('isValid add:',isValid); + if(isValid){ + let arr=AddVisibility; + let {Company,CompanyId,CategoryName,CategoryId,SubCategoryName,SubCategoryId,BrandName,BrandId,PromoType,PromoTypeId,ProductName,ProductId,Remark,DisplayId}=AddVisFormData; + console.log(AddVisFormData); + // let index=AddVisibility.findIndex(i=> i.CompanyId==CompanyId && i.CategoryId==CategoryId && i.SubCategoryId==SubCategoryId && i.BrandId==BrandId && i.DisplayId==DisplayId && i.PromoTypeId==PromoTypeId && i.ProductId==ProductId); + // if(index>=0){ + // notify('This promotion has already been added','LONG'); + // } + // else{ + arr.push(AddVisFormData); + // setAddVisibility(arr); + // setHasUnsavedChanges(true); + BgWindowData(arr) + BgUnsavedChanges(true) + notify('Promotion added successfully','LONG'); + setrerenderdata(!rerenderdata); + + // clear data + // setAddVisFormData({}); + BgAddVisFormData({}) + // } + } + + } + + function showRemoveConfirm(item,index){ + // setToRemoveId(index); + // setToRemoveItem(item); + // setshowRemoveConfirm_M(true); + if(item.keyId>0){ + setToRemoveId(item.keyId); + setToRemoveItem(item); + setshowRemoveConfirm_M(true); + } + else{ + setToRemoveId(index); + setToRemoveItem(item); + setshowRemoveConfirm_M(true); + } + } + + // function Remove_AddVis(){ + // let index=toRemoveId + // let item=toRemoveItem; + // let arr=AddVisibility; + // console.log('toRemoveId:',index); + // if(index>=0 && index0) { + console.log("check-keyId-",index) + let deleteQuery=`DELETE FROM ${AppTables.COMPETITION_PROMOTION} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' AND KEY_ID='${index}' `; + + txn.executeSql(deleteQuery, [], function (txn3, txnres) { + console.log('Promotion data deleted', item.keyId,+""+index); + let updatedVisibility = AddVisibility.filter(item => item.keyId !== index); + setAddVisibility(updatedVisibility); + setHasUnsavedChanges(true); + notify('Promotion removed successfully', 'LONG'); + setrerenderdata(!rerenderdata); + setToRemoveId(''); + setToRemoveItem({}); + setshowRemoveConfirm_M(false); + + }, function (txnE, txnerr) { + console.log('Error deleting survey data:', txnerr); + }); + + } + else { + let index=toRemoveId + let item=toRemoveItem; + let arr=AddVisibility; + console.log('toRemoveId:',index); + if(index>=0 && index + { + isImageCap && + + + + + {openCamera('1')}}> + + + + {!showImageSaveOp && + {cancelImage()}}> + {ST.Close} + + } + + } + + ) + } + + + async function OpenImgModal(imgPath,window,splitItem,splitItemIndex,cameraType){ + setSelectedImg(imgPath) + setShowModal(true); + if((imgPath!='' && imgPath!=null)){ + setShowImageSaveOp(false); + } + else{ + setShowImageSaveOp(true); + } + setReCapImgModalObj({window,splitItem,splitItemIndex,cameraType}) + // _OpenCaptureImage_Modal(imgPath,window,splitItem,splitItemIndex,cameraType) + + } + + function cancelImage(){ + // setImage1(''); + setSelectedImg(''); + setReCapImgModalObj({}) + setShowModal(false); + } + + + + function _render_addVisFormTop(){ + + let CompPromoSellingPriceI=KPIFields.findIndex(i=>i.KPIFieldName=='CompPromoSellingPrice'); + let CompPromoSellingPriceObj=CompPromoSellingPriceI>=0?KPIFields[CompPromoSellingPriceI]:{}; + let CompPromoSellingPrice=CompPromoSellingPriceI>=0?CompPromoSellingPriceObj['KPIFieldEnable']:true; + let CompPromoSellingPriceLabel=CompPromoSellingPriceI>=0?CompPromoSellingPriceObj['KPIFieldDisplayName']:"Selling Price"; + + let CompPromoGrammageI=KPIFields.findIndex(i=>i.KPIFieldName=='CompPromoGrammage'); + let CompPromoGrammageObj=CompPromoGrammageI>=0?KPIFields[CompPromoGrammageI]:{}; + let CompPromoGrammage=CompPromoGrammageI>=0?CompPromoGrammageObj['KPIFieldEnable']:false; + let CompPromoGrammageLabel=CompPromoGrammageI>=0?CompPromoGrammageObj['KPIFieldDisplayName']:"Grammage"; + + let CompPromoDPerI=KPIFields.findIndex(i=>i.KPIFieldName=='CompPromoDiscountPercent'); + let CompPromoDPerObj=CompPromoDPerI>=0?KPIFields[CompPromoDPerI]:{}; + let CompPromoDPer=CompPromoDPerI>=0?CompPromoDPerObj['KPIFieldEnable']:false; + let CompPromoDPerLabel=CompPromoDPerI>=0?CompPromoDPerObj['KPIFieldDisplayName']:"Discount %"; + + let CompPromoShowImage1I=KPIFields.findIndex(i=>i.KPIFieldName=='ShowImage1'); + let CompPromoShowImage1Obj=CompPromoShowImage1I>=0?KPIFields[CompPromoShowImage1I]:{}; + let CompPromoShowImage1=CompPromoShowImage1I>=0?CompPromoShowImage1Obj['KPIFieldEnable']:true; + let CompPromoShowImage1Label=CompPromoShowImage1I>=0?CompPromoShowImage1Obj['KPIFieldDisplayName']:"Image"; + + let CompPromoShowImage2I=KPIFields.findIndex(i=>i.KPIFieldName=='ShowImage2'); + let CompPromoShowImage2Obj=CompPromoShowImage2I>=0?KPIFields[CompPromoShowImage2I]:{}; + let CompPromoShowImage2=CompPromoShowImage2I>=0?CompPromoShowImage2Obj['KPIFieldEnable']:false; + let CompPromoShowImage2Label=CompPromoShowImage2I>=0?CompPromoShowImage2Obj['KPIFieldDisplayName']:"Image"; + + let CompPromoGramImageI=KPIFields.findIndex(i=>i.KPIFieldName=='ShowImage3'); + let CompPromoGramImageObj=CompPromoGramImageI>=0?KPIFields[CompPromoGramImageI]:{}; + let CompPromoGramImage=CompPromoGramImageI>=0?CompPromoGramImageObj['KPIFieldEnable']:false; + let CompPromoGramImageLabel=CompPromoGramImageI>=0?CompPromoGramImageObj['KPIFieldDisplayName']:"Image"; + + + let xpos=0; + if(animatedChoice!=null ){ + xpos=animatedChoice.interpolate({ + inputRange:[0,1], + outputRange:[0,-75], + }); + } + + + return ( + + + {'Is Present'} + + + + {onChoiceSelect(1,'isPresent')}}> + Yes + + {onChoiceSelect(0,'isPresent')}}> + No + + + + + + { + isAddVisPresent==1 && (rerenderdata== rerenderdata) && + + + + + + + Company + {CustomPicker(props,Companies,'Company','CompanyId','Company','CompanyId',onselectionChange,{value:AddVisFormData.Company})} + + + + + Category + {CustomPicker(props,Categories,'CategoryName','CategoryId','CategoryName','CategoryId',onselectionChange,{value:AddVisFormData.CategoryName})} + + + + + + + + Sub Category + + {CustomPicker(props,SubCategories,'SubCategoryName','SubCategoryId','SubCategoryName','SubCategoryId',onselectionChange,{value:AddVisFormData.SubCategoryName})} + + + + + Brands + + {CustomPicker(props,Brands,'BrandName','BrandId','BrandName','BrandId',onselectionChange,{value:AddVisFormData.BrandName})} + + + + + + + Product + {CustomPicker(props,Products,'ProductName','ProductId','ProductName','ProductId',onselectionChange,{value:AddVisFormData.ProductName})} + + + {CompPromoGrammage && + + + {CompPromoGrammageLabel} + {onFormDataChange(val,'Grammage','decimal');}} + /> + + } + + + Promotion Type + {CustomPicker(props,DisplayList,'PromoType','PromoTypeId','PromoType','PromoTypeId',onselectionChange,{value:AddVisFormData.PromoType})} + + + {CompPromoDPer && + + + {CompPromoDPerLabel} + {onFormDataChange(val,'DiscountPercent','decimal');}} + /> + + } + + + + + MRP + {onFormDataChange(val,'MRP','numeric');}} + /> + + + {CompPromoSellingPrice && + + + {CompPromoSellingPriceLabel} + {onFormDataChange(val,'SPrice','numeric');}} + /> + + } + + + + + Promotion Details + {onFormDataChange(val,'Remark','text');}} + /> + + + + + Image + + {CompPromoShowImage1 && + + { (AddVisFormData.Image1Path=='' || AddVisFormData.Image1Path==null) ? + {openCamera('1')}}> + + : (AddVisFormData.Image1Path!='' && AddVisFormData.Image1Path!=null) ? + {OpenImgModal(AddVisFormData.Image1Path,'1')}}> + + : null + } + {CompPromoShowImage1Label} + } + {CompPromoShowImage2 && + + { (AddVisFormData.Image2Path=='' || AddVisFormData.Image2Path==null) ? + {openCamera('2')}}> + + : (AddVisFormData.Image2Path!='' && AddVisFormData.Image2Path!=null) ? + {OpenImgModal(AddVisFormData.Image2Path,'2')}}> + + : null + } + {CompPromoShowImage2Label} + } + {CompPromoGramImage && + + { (AddVisFormData.Image3Path=='' || AddVisFormData.Image3Path==null) ? + {openCamera('3')}}> + + : (AddVisFormData.Image3Path!='' && AddVisFormData.Image3Path!=null) ? + {OpenImgModal(AddVisFormData.Image3Path,'3')}}> + + : null + } + {CompPromoGramImageLabel} + } + + + + + + + + {Add_AddVis()}}> + Add + + + + + Added Promotions + + { + AddVisibility.length>0 && + AddVisibility.map((item,index)=>{ + console.log(item); + return ( + + + + + Company : + {item.Company} + + + Category : + {item.CategoryName} + + + Sub Category : + {item.SubCategoryName} + + + Brand : + {item.BrandName} + + + Product : + {item.ProductName} + + { CompPromoGrammage && + + {CompPromoGrammageLabel+" :"} + {item.Grammage} + } + + Promo Type : + {item.PromoType} + + {CompPromoDPer && + + {CompPromoDPerLabel+" :"} + {item.DiscountPercent} + } + + MRP : + {item.MRP} + + { CompPromoSellingPrice && + + {CompPromoSellingPriceLabel+" :"} + {item.SPrice} + + } + + + Remark : + {item.Remark} + + + + + + {CompPromoShowImage1 && + <> + {/* */} + {CompPromoShowImage1Label} + {(item.Image1Path!=null && item.Image1Path!='') && } + {/* */} + + } + {CompPromoShowImage2 && + <> + {CompPromoShowImage2Label} + {(item.Image2Path!=null && item.Image2Path!='') && } + + } + {CompPromoGramImage && + <> + {CompPromoGramImageLabel} + {(item.Image3Path!=null && item.Image3Path!='') && } + + } + + + + {showRemoveConfirm(item,index)}}> + + + + {/* + + Promotion Type : + {item.PromoType} + + + Product : + {item.ProductName} + + + MRP : + {item.MRP} + + + Selling Price : + {item.SPrice} + + */} + + + ); + }) + } + + + + } + + ) + } + + return ( + + {processing && } + + + + {_OpenCaptureImage_Modal()} + {ConfirmSaveAlert(props,showAlert,onSaveCancel,saveData)} + {ConfirmSaveAlert(props,showRemoveConfirm_M,()=>{setshowRemoveConfirm_M(false)},Remove_AddVis,'Do you really want to remove this promotion?')} + {ConfirmSaveAlert(props,showRAllC_M,()=>{setShowRAllC_M(false)},onConfirmRemoveAll,'Do you really want to remove all promotion data?')} + {setShowCamera(false);getImage(imgData)}} showCamera={showCamera} onHideCamera={()=>{setShowCamera(false);}}/> + + + + { Object.keys(storeData).length>0 && + + {_render_addVisFormTop()} + + } + + {onSubmitData()}}/> + + + + + + + ); +} + + + +export default connect(mapStateToProps, mapDispatchToProps)(CompetitionPromotion); \ No newline at end of file diff --git a/PerformicsSrc/src/screens/CompetitionVisibility.js b/PerformicsSrc/src/screens/CompetitionVisibility.js new file mode 100644 index 0000000..38e7068 --- /dev/null +++ b/PerformicsSrc/src/screens/CompetitionVisibility.js @@ -0,0 +1,1083 @@ +import React, { useState, useEffect, useRef } from 'react'; +import Container from '../components/container'; +import { useRoute } from '@react-navigation/native'; +import { globalStyles, customStyles, GetPageTheme } from "../styles/Global"; +import { StatusBar, Image, TextInput, View, Text, ScrollView, TouchableOpacity, Platform, PermissionsAndroid, FlatList, Alert, Animated, AppState, Keyboard } from 'react-native'; +import { ReactReduxContext, connect, useSelector, useDispatch } from 'react-redux'; +import { mapStateToProps, mapDispatchToProps } from '../reducers/contextProvider'; +import { notify } from '../components/notify'; +import moment from 'moment'; +import { getDownloadJson, getKPIFields, marktext1, marktext2, resizeImage, restore_ImageWithMetaData, validateNumber } from '../controller/functions'; +import { get_item, set_item, clear_item } from '../components/localStorage'; +import { version, sloganline, appname, testurl, db, colors_Arr, common_ImagePath, ImageFolderPath } from '../constants/constants'; +import CustomHeader from '../components/customHeader'; +import { AntDesign, Entypo, FontAwesome, MaterialCommunityIcons } from '../components/icons'; +import CustomLoader from '../components/CustomLoader'; +import LinearGradient from 'react-native-linear-gradient'; +import { AppTables } from '../constants/tableConstants'; +import { SvgXml } from 'react-native-svg'; +import { launchCamera, launchImageLibrary, CameraOptions } from 'react-native-image-picker'; +import * as RNFS from 'react-native-fs'; +import GradientButton from '../components/gradientButton'; + +import CustomModal from '../components/CustomModal'; +import { ConfirmSaveAlert } from '../components/alert'; +import { CustomPicker } from '../components/CustomPicker'; +import CustomCamera from '../components/Camera'; + +import CameraImg3 from '../assets/performics/camera_tick.svg'; +import CameraImg5 from '../assets/image/astrickcamera.svg'; + +function CompetitionVisibility(props) { + const route = useRoute(); + const ST = props.StaticText || {}; + + // get all theme styles acc to current theme set + const PageTheme = GetPageTheme(props.DarkMode, route.name); + const customStyle = customStyles(props.DarkMode, route.name); + const animatedChoice = useRef(new Animated.Value(0)).current; + + const [processing, setProcessing] = useState(true); + const [loaderTitle, setLoaderTitle] = useState('loading...'); + const [isAdhocScreen, setIsAdhocScreen] = useState(false); + const [storeData, setStoreData] = useState({}); + const [currentMenu, setCurrentMenu] = useState({}); + const [brandData, setBrandData] = useState([]); + const [rerenderdata, setrerenderdata] = useState(0); + const [rerenderdata2, setrerenderdata2] = useState(0); + const [KPIFields, setKPIFields] = useState([]); + const [showSwitchCamera, setShowSwitchCamera] = useState(false); + + const [AddVisibility, setAddVisibility] = useState([]); + const [AddVisFormData, setAddVisFormData] = useState({}); + const [isAddVisPresent, setIsAddVisPresent] = useState(0); + const [showAlert, setShowAlert] = useState(false); + const [Companies, setCompanies] = useState([]); + const [Categories, setCategories] = useState([]); + const [SubCategories, setSubCategories] = useState([]); + const [Brands, setBrands] = useState([]); + const [DisplayList, setDisplayList] = useState([]); + const [hasUnsavedChanges, setHasUnsavedChanges] = useState(false); + const [showCamera, setShowCamera] = useState(false); + const showCameraRef = React.useRef(false); + const [getImageProps, setGetImageProps] = useState({}); + const [toRemoveId, setToRemoveId] = useState(''); + const [toRemoveItem, setToRemoveItem] = useState({}); + const [showRemoveConfirm_M, setshowRemoveConfirm_M] = useState(false); + const [showRAllC_M, setShowRAllC_M] = useState(false); + const [StoreCameraAllow, setStoreCameraAllow] = useState(true); + + const [SelectedImg, setSelectedImg] = useState(''); + const [showModal, setShowModal] = useState(false); + const [reCapImgModalObj, setReCapImgModalObj] = useState({}); + const [showImageSaveOp, setShowImageSaveOp] = useState(true); + const [ImgMadCount, setImgMadCount] = useState({ img1: 0, img2: 0 }); + + const hasUnsavedChangesRef = React.useRef(hasUnsavedChanges); + const WindowDataRef = React.useRef(AddVisibility); + const StoreIdRef = React.useRef(null); + const ScreenNameRef = React.useRef(''); + + const VisFormDataRef = React.useRef(AddVisFormData); + const isAddVisPresentRef = React.useRef(isAddVisPresent) + + const d1 = new Date(); + const d2 = moment(d1).format('MM/DD/YYYY'); + + + useEffect(() => { + let params = props.route.params ? props.route.params : {}; + let storeData1 = params.storeData || {}; + let menu1 = params.menu || {}; + let cameraAllow = storeData1.CameraAllow == 'true' || storeData1.CameraAllow == 1 ? true : false; + setStoreCameraAllow(cameraAllow); + + let isAdhoc = params.isAdhoc || false; + setIsAdhocScreen(isAdhoc); + setStoreData(storeData1); + setCurrentMenu(menu1); + + StoreIdRef.current = storeData1.StoreId + ScreenNameRef.current = menu1.ScreenName + getData(storeData1, menu1); + + const AppStateSubscription = AppState.addEventListener('change', (pro) => { _handleAppStateChange(pro) }); + const unsubscribe = props.navigation.addListener('beforeRemove', onBeforeRemove); + + return function cleanup() { + AppStateSubscription.remove(); + return unsubscribe; + }; + }, []); + + // useEffect(() => { + // const unsubscribe=props.navigation.addListener('beforeRemove', onBeforeRemove); + // return unsubscribe; + // }, [hasUnsavedChanges]); + + // useEffect(() => { + // const unsubscribe=props.navigation.addListener('beforeRemove', onBeforeRemove); + // return unsubscribe; + // }, [showCamera]); + + const _handleAppStateChange = async (nextAppState) => { + if (nextAppState == 'background' && hasUnsavedChangesRef.current == true) { + let newData = { + storeBGData: WindowDataRef.current, + menuName: ScreenNameRef.current, + StoreId1: StoreIdRef.current, + AddFormData: VisFormDataRef.current, + isVisPresent: isAddVisPresentRef.current, + visiteDate: d2 + } + let WindowsStr = JSON.stringify(newData) + await set_item('storeData', WindowsStr); + } + } + + function onBeforeRemove(e) { + if (showCameraRef.current == true) { + e.preventDefault(); + BgShowCamera(false); + } + else { + if (hasUnsavedChangesRef.current == true) { + e.preventDefault(); // Prevent default behavior of leaving the screen + onRemoveScreen(e); + } + else { + return; + } + } + } + + function onRemoveScreen(e) { + Alert.alert( + "", + "Do you really want to exit the screen?", + [ + { + text: "Cancel", + onPress: () => { }, + style: "cancel" + }, + { + text: ST.OK, onPress: async () => { + BgUnsavedChanges(false) + await clear_item('storeData') + // setHasUnsavedChanges(false); + props.navigation.dispatch(e.data.action); + } + } + ] + ); + } + + function BgUnsavedChanges(val) { + hasUnsavedChangesRef.current = val + setHasUnsavedChanges(val); + } + + function BgShowCamera(val) { + showCameraRef.current = val + setShowCamera(val); + } + + function BgWindowData(val) { + WindowDataRef.current = val + setAddVisibility(val); + } + + function BgAddVisFormData(val) { + VisFormDataRef.current = val + setAddVisFormData(val); + } + + function BgIsAddVisPresent(val) { + isAddVisPresentRef.current = val + setIsAddVisPresent(val); + } + + async function OpenImgModal(imgPath, window, splitItem, splitItemIndex, cameraType) { + setSelectedImg(imgPath) + setShowModal(true); + if ((imgPath != '' && imgPath != null)) { + setShowImageSaveOp(false); + } + else { + setShowImageSaveOp(true); + } + setReCapImgModalObj({ window, splitItem, splitItemIndex, cameraType }) + // _OpenCaptureImage_Modal(imgPath,window,splitItem,splitItemIndex,cameraType) + + } + + function cancelImage() { + // setImage1(''); + setSelectedImg(''); + setReCapImgModalObj({}) + setShowModal(false); + } + + + async function getData(storeData1, menu1) { + try { + let { StoreId, ChainId, StateId, StoreTypeId } = storeData1; + + let AllKPIFields = await getKPIFields(menu1); + setKPIFields(AllKPIFields); + // set switch camera flag as defined in mapping menu flag (if exists) + let SwitchingCameraI = AllKPIFields.findIndex(i => i.KPIFieldName == 'SwitchingCamera'); + let SwitchingCameraObj = SwitchingCameraI >= 0 ? AllKPIFields[SwitchingCameraI] : {}; + let SwitchingCamera = SwitchingCameraI >= 0 ? SwitchingCameraObj['KPIFieldEnable'] : false; + setShowSwitchCamera(SwitchingCamera); + + let storeBGData1 = [], bgStoreJson = {}, isBgDataExists = false; + let windData = await get_item('storeData') + if (windData != null && windData != '') { + let StoreJson = JSON.parse(windData) + let { storeBGData, menuName, StoreId1, AddFormData, visiteDate, isVisPresent } = StoreJson + if (menuName == menu1.ScreenName && StoreId1 == StoreId && visiteDate == d2) { + isBgDataExists = true + + // Check if isVisPresent data exists in bg data + let bgPresent = isVisPresent == 1 ? 1 : 0; + Animated.timing(animatedChoice, { + toValue: bgPresent, + duration: 400, + useNativeDriver: false, + }).start(); + BgIsAddVisPresent(bgPresent); + + + // Check if added visibilities data exists in bg data + if (storeBGData.length > 0) { + storeBGData1 = storeBGData; + bgStoreJson = bgStoreJson + BgWindowData(storeBGData) + } + + // Check if form data exists in bg data + if (AddFormData != null && Object.keys(AddFormData).length > 0) { + // BgUnsavedChanges(true) + let { CategoryId, SubCategoryId, CompanyId } = AddFormData; + // load categories if company exists + if (CategoryId != null && CategoryId != '') { + loadData(CompanyId, 'Categories'); + } + // load subcategories if category exists + if (CategoryId != null && CategoryId != '') { + loadData(CategoryId, 'SubCategories', CompanyId); + } + // load brands if subcategory exists + if (SubCategoryId != null && CategoryId != '') { + loadData(SubCategoryId, 'Brands', CompanyId); + } + BgAddVisFormData(AddFormData) + } + + BgUnsavedChanges(true) + } + } + + await db.transaction(async function (txn) { + + let q4 = `Select distinct CompanyId,Company from Master_Competitor order by Company`; + await txn.executeSql(q4, [], async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + let arr = []; + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + arr.push(data); + if (i == txnres2.rows.length - 1) { setCompanies(arr); } + } + } + }, function (txnE, txnerr) { console.log(txnerr); },); + + let q2 = `Select Distinct DisplayId,DisplayName from Master_Display where (Competitor='1' or Competitor=1) order by DisplayName`; + await txn.executeSql(q2, [], async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + let arr = []; + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + arr.push(data); + if (i == txnres2.rows.length - 1) { setDisplayList(arr); } + } + } + }, function (txnE, txnerr) { console.log(txnerr); },); + + + let q3 = `Select * from ${AppTables.COMPETITION_VISIBILITY} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' `; + await txn.executeSql(q3, [], async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + let arr = []; + + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + let { PRESENT, COMPANY, COMPANY_ID, CATEGORY, CATEGORY_ID, SUB_CATEGORY, SUB_CATEGORY_ID, BRAND, BRAND_ID, DISPLAY, DISPLAY_ID, REMARK, IMAGE, KEY_ID } = data; + let datan = { Company: COMPANY, CompanyId: COMPANY_ID, CategoryName: CATEGORY, CategoryId: CATEGORY_ID, SubCategoryName: SUB_CATEGORY, SubCategoryId: SUB_CATEGORY_ID, BrandName: BRAND, BrandId: BRAND_ID, DisplayName: DISPLAY, DisplayId: DISPLAY_ID, Remark: REMARK, Image1: IMAGE, keyId: KEY_ID } + datan.Image1Path = "file://" + ImageFolderPath + menu1.ScreenName + "/" + IMAGE; + PRESENT == 1 ? arr.push(datan) : ''; + let isPresent = PRESENT; + if (i == txnres2.rows.length - 1) { + + if (!isBgDataExists) { + BgWindowData(arr); + Animated.timing(animatedChoice, { + toValue: isPresent, + duration: 400, + useNativeDriver: false, + }).start(); + BgIsAddVisPresent(isPresent); + } + setProcessing(false); + } + } + } else { + setProcessing(false); + } + }, function (txnE, txnerr) { console.log(txnerr); setProcessing(false); },); + + + + }); + } catch (err) { + console.log(err); + } + } + + + + async function getImage(imgdata) { + let type = getImageProps.type || ''; + if (typeof imgdata == 'object' && imgdata.errorCode == 'camera_unavailable') { + notify('Camera unavailable'); + } + else if (typeof imgdata == 'object' && imgdata.uri != null) { + const img = imgdata; + const imgurl = img.uri, imgWidth = img.width, imgHeight = img.ExtendedHeight; + let isImgFromGallery = img.fromGallery != null ? img.fromGallery : false; + let picture_clickedd = isImgFromGallery == true ? img.datetime : new Date(); + let picture_clicked_time = moment(picture_clickedd).format('MM-DD-YYYY HH:mm:ss') + let picture_clicked_time_for_pic_name = moment(picture_clickedd).format('MMDDYYYY_HHmmss') + + console.log("time", picture_clicked_time); + console.log("time1", picture_clicked_time_for_pic_name); + let calculate_tym_date_for_filename = picture_clicked_time_for_pic_name; + let calculate_tym_date_over_img = picture_clicked_time; + let filename = storeData.StoreId + '_' + (props.UserId || '') + '_CompVisibilityImg-' + calculate_tym_date_for_filename + '.jpg'; + const mark_text1 = calculate_tym_date_over_img; + const mark_text2 = 'Store Name:' + storeData.StoreName + ' | Store Id:' + storeData.StoreId + ' | User Id:' + storeData.EmpId + ' | Image Type: Comp. Visibility' + ' | Date:' + calculate_tym_date_over_img; + + let addvisdata = AddVisFormData; + let image_key = 'Image1'; + let image_path_key = 'Image1Path'; + addvisdata[image_key] = filename; + + // Add MetaData + let imagePath = `${ImageFolderPath + currentMenu.ScreenName}/${filename}`; + RNFS.copyFile(imgurl, imagePath) + .then(async (resn) => { + // render data with clicked image + let uri = 'file://' + imagePath; + console.log('image marker', uri); + addvisdata[image_path_key] = uri; + + setSelectedImg(uri) + BgAddVisFormData(addvisdata) + BgUnsavedChanges(true) + setrerenderdata2(!rerenderdata2); + // add metdata then resize image and restored back to the imagePath + let restore_data = { "destFilePath": imagePath, "imgurl": imgurl, imgWidth, imgHeight, mark_text1, mark_text2 } + let is_restored = await restore_ImageWithMetaData(restore_data, imgdata); + console.log("image restored:", is_restored); + }) + .catch(err => { + console.log('ERROR: image file write failed!!!'); + console.log(err.message, err.code); + }); + } + + } + + function _OpenCaptureImage_Modal(img) { + const isImageCap = (img != '' || img != null) ? true : false; + let { window, splitItem, splitItemIndex, cameraType } = reCapImgModalObj + let camera2Label = (window && window.PromoImage2Lable) || ''; + return ( + + { + isImageCap && + + + + + { openCamera('1') }}> + + + + {!showImageSaveOp && + { cancelImage() }}> + {ST.Close} + + } + + } + + ) + } + + + async function openCamera(type = '1') { + setGetImageProps({ 'type': type }); + BgShowCamera(true); + // props.navigation.navigate('CameraScreen',{'getImage':getImage,'cameraType':'back'}) + } + + async function onSubmitData() { + let isvalid = await validate(); + if (isvalid) { + Keyboard.dismiss(); + setShowAlert(true); + } + } + + async function saveData() { + // setHasUnsavedChanges(false); + BgUnsavedChanges(false) + setShowAlert(false); + setLoaderTitle('Saving Data...'); + setProcessing(true); + try { + let { StoreId, ChainId, StateId, StoreTypeId } = storeData; + await db.transaction(async function (txn) { + + let q = `DELETE FROM ${AppTables.COMPETITION_VISIBILITY} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' `; + + // remove old data + await txn.executeSql(q, [], async function (txn2, txnres) { + console.log('cv data deleted'); + }, function (txnE, txnerr) { console.log(txnerr); },); + + var values = ''; + if (isAddVisPresent == 1 && AddVisibility.length > 0) { + for (var i = 0; i < AddVisibility.length; i++) { + let catIndex = i; + let item = AddVisibility[catIndex]; + let { Company, CompanyId, CategoryName, CategoryId, SubCategoryName, SubCategoryId, BrandName, BrandId, DisplayName, DisplayId, Remark, Image1, Image1Path } = item; + values += values != '' ? ' , ' : ''; + values += ` ('${StoreId}','${d2}','${isAddVisPresent}','${Company}','${CompanyId}','${CategoryName}','${CategoryId}','${SubCategoryName}','${SubCategoryId}','${BrandName}','${BrandId}','${DisplayName}','${DisplayId}','${Remark}','${Image1}','${d2}') `; + + } + } + else { + values += ` ('${StoreId}','${d2}','${isAddVisPresent}','','','','','','','','','','','','','${d2}') `; + } + + console.log('values:', values); + let add_data = `INSERT INTO ${AppTables.COMPETITION_VISIBILITY} (STORE_ID,VISIT_DATE,PRESENT,COMPANY,COMPANY_ID,CATEGORY,CATEGORY_ID,SUB_CATEGORY,SUB_CATEGORY_ID,BRAND,BRAND_ID,DISPLAY,DISPLAY_ID,REMARK,IMAGE,ADDED_DATE) VALUES ${values} `; + + await txn.executeSql(add_data, [], async function (txn2, txnres) { + console.log('av added'); + notify('Competition Visibility added successfully', 'SHORT'); + setProcessing(false); + // clear store data in local storage to avoiding re-set data for the store + clear_item('storeData') + props.navigation.goBack(); + }, function (txnE, txnerr) { console.log(txnerr); setProcessing(false); notify('Cannot add competition visibility') },); + + + }); + } catch (err) { + console.log(err); + } + } + + + + + async function validate() { + + let isValid = true; + if (isAddVisPresent == 1 && AddVisibility.length <= 0) { + isValid = false; + notify('Please add first', 'SHORT'); + } + + console.log('isValid:', isValid); + return isValid; + } + + async function validateForm() { + let isValid = true; + let { Company, CompanyId, CategoryName, CategoryId, SubCategoryName, SubCategoryId, BrandName, BrandId, DisplayName, DisplayId, Remark, Image1, Image1Path } = AddVisFormData; + + let AddVisCameraReqI = KPIFields.findIndex(i => i.KPIFieldName == 'CompVisCameraReq'); + let AddVisCameraReqObj = AddVisCameraReqI >= 0 ? KPIFields[AddVisCameraReqI] : {}; + let CompVisCameraReq = AddVisCameraReqI >= 0 ? AddVisCameraReqObj['KPIFieldEnable'] : true; + + + + if ((Company == '' || Company == null) || (CompanyId == '' || CompanyId == null)) { + isValid = false; + notify('Please select company', 'SHORT'); + } + else if ((CategoryName == '' || CategoryName == null) || (CategoryId == '' || CategoryId == null)) { + isValid = false; + notify('Please select category', 'SHORT'); + } + else if ((SubCategoryName == '' || SubCategoryName == null) || (SubCategoryId == '' || SubCategoryId == null)) { + isValid = false; + notify('Please select sub category', 'SHORT'); + } + else if ((BrandName == '' || BrandName == null) || (BrandId == '' || BrandId == null)) { + isValid = false; + notify('Please select brand', 'SHORT'); + } + else if ((DisplayName == '' || DisplayName == null) || (DisplayId == '' || DisplayId == null)) { + isValid = false; + notify('Please select display type', 'SHORT'); + } + // else if((Remark=='' || Remark==null )){ + // isValid=false; + // notify('Please enter remark','SHORT'); + // } + else if (StoreCameraAllow && CompVisCameraReq && (Image1 == '' || Image1 == null)) { + isValid = false; + notify('Please click image', 'SHORT'); + } + + + console.log('isValid:', isValid); + return isValid; + } + + function onFormDataChange(val, key, type = '') { + if (val != '') { + let isValid = validateNumber(val, type); + if (!isValid) { + return; + } + } + + let data = AddVisFormData; + data[key] = val; + // setAddVisFormData(data); + // setHasUnsavedChanges(true); + BgAddVisFormData(data) + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + + function onselectionChange(option, keyLbl, keyVal, otherData) { + let CompanyId = otherData.CompanyId != null ? otherData.CompanyId : ''; + let data = AddVisFormData; + data[keyVal] = option.value; + data[keyLbl] = option.label; + // setAddVisFormData(data); + // setHasUnsavedChanges(true); + BgAddVisFormData(data) + BgUnsavedChanges(true) + CleanSelector(option, keyLbl, data, CompanyId) + setrerenderdata(!rerenderdata); + + + } + + function CleanSelector(option, keyLbl = '', data = {}, CompanyId) { + + if (keyLbl == 'Company') { + loadData(option.value, 'Categories'); + + data['CategoryId'] = ''; + data['CategoryName'] = ''; + data['SubCategoryId'] = ''; + data['SubCategoryName'] = ''; + data['BrandId'] = ''; + data['BrandName'] = ''; + + data['DisplayId'] = '' + data['DisplayName'] = '' + + data['Image1Path'] = '' + + data['Remark'] = '' + } + else if (keyLbl == 'CategoryName') { + console.log('CompanyId:', CompanyId); + loadData(option.value, 'SubCategories', CompanyId); + + data['SubCategoryId'] = ''; + data['SubCategoryName'] = ''; + data['BrandId'] = ''; + data['BrandName'] = ''; + + data['DisplayId'] = '' + data['DisplayName'] = '' + + data['Image1Path'] = '' + + data['Remark'] = '' + } + else if (keyLbl == 'SubCategoryName') { + console.log('CompanyId:', CompanyId,option.value,CompanyId); + loadData(option.value, 'Brands', CompanyId); + + data['BrandId'] = ''; + data['BrandName'] = ''; + + data['DisplayId'] = '' + data['DisplayName'] = '' + + data['Image1Path'] = '' + + data['Remark'] = '' + } else if (keyLbl == 'BrandName') { + + // clear brand + + data['DisplayId'] = '' + data['DisplayName'] = '' + + data['Image1Path'] = '' + + data['Remark'] = '' + + } else if (keyLbl == 'DisplayName') { + + // clear brand + + data['Image1Path'] = '' + + data['Remark'] = '' + + } + setrerenderdata(!rerenderdata); + } + + async function loadData(qId, type, CompanyId) { + try { + console.log("load_data",qId,CompanyId) + await db.transaction(async function (txn) { + let q = ''; + if (type == 'Categories') q = `select distinct CategoryId,CategoryName from Master_Competitor where (CompanyId ='${qId}' or CompanyId = ${qId}) order by CategoryName`; + else if (type == 'SubCategories') q = `Select Distinct p.SubCategoryId,p.SubCategoryName from Product_Master p where (p.CategoryId='${qId}' or p.CategoryId=${qId}) and (CompanyId ='${CompanyId}' or CompanyId = ${CompanyId}) order by p.SubCategorySequence`; + else if (type == 'Brands') q = `Select Distinct p.BrandName,p.BrandId from Product_Master p Where (p.SubCategoryId='${qId}' or p.SubCategoryId=${qId}) and (CompanyId ='${CompanyId}' or CompanyId = ${CompanyId}) order by p.BrandSequence`; + + console.log("qury---",type,q); + await txn.executeSql(q, [], async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + let arr = []; + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + arr.push(data); + if (i == txnres2.rows.length - 1) { + if (type == 'Categories') setCategories(arr); + else if (type == 'SubCategories') setSubCategories(arr); + else if (type == 'Brands') setBrands(arr); + } + } + } + }, function (txnE, txnerr) { console.log(txnerr); },); + + }); + } catch (err) { + console.log(err); + } + } + + + + function onChoiceSelect(val, key) { + if (val == 0 && AddVisibility.length > 0) { + setShowRAllC_M(true); + return; + } + var val1 = val == 1 ? 1 : 0; + if (animatedChoice != null) { + Animated.timing(animatedChoice, { + toValue: val1, + duration: 400, + useNativeDriver: false, + }).start(); + } + // setIsAddVisPresent(val); + // setHasUnsavedChanges(true); + BgIsAddVisPresent(val); + BgUnsavedChanges(true) + if (val == 0) { + // setAddVisibility([]); + // setAddVisFormData({}); + BgWindowData([]) + BgAddVisFormData({}) + } + } + + function onConfirmRemoveAll() { + // Remove all data + if (animatedChoice != null) { + Animated.timing(animatedChoice, { + toValue: 0, + duration: 400, + useNativeDriver: false, + }).start(); + } + // setIsAddVisPresent(0); + // setHasUnsavedChanges(true); + // setAddVisibility([]); + // setAddVisFormData({}); + BgIsAddVisPresent(0); + BgUnsavedChanges(true) + BgWindowData([]) + BgAddVisFormData({}) + setShowRAllC_M(false); + } + + function onSaveCancel() { + setShowAlert(false); + } + + async function Add_AddVis() { + let isValid = await validateForm(); + console.log('isValid add:', isValid); + if (isValid) { + let arr = AddVisibility; + let { Company, CompanyId, CategoryName, CategoryId, SubCategoryName, SubCategoryId, BrandName, BrandId, DisplayName, DisplayId, Remark, Image1, Image1Path } = AddVisFormData; + console.log(AddVisFormData); + // let index=AddVisibility.findIndex(i=> i.CompanyId==CompanyId && i.CategoryId==CategoryId && i.SubCategoryId==SubCategoryId && i.BrandId==BrandId && i.DisplayId==DisplayId); + // if(index>=0){ + // notify('This visibility has already been added','LONG'); + // } + // else{ + arr.push(AddVisFormData); + // setAddVisibility(arr); + // setHasUnsavedChanges(true); + BgWindowData(arr) + BgUnsavedChanges(true) + notify('Visibility added successfully', 'LONG'); + setrerenderdata(!rerenderdata); + + // clear data + // setAddVisFormData({}); + // setFromDate(''); + BgAddVisFormData({}) + // } + } + + } + + function showRemoveConfirm(item, index) { + // setToRemoveId(index); + // setToRemoveItem(item); + // setshowRemoveConfirm_M(true); + if (item.keyId > 0) { + setToRemoveId(item.keyId); + setToRemoveItem(item); + setshowRemoveConfirm_M(true); + } + else { + setToRemoveId(index); + setToRemoveItem(item); + setshowRemoveConfirm_M(true); + } + } + + // function showRemoveConfirm(item,index){ + // setToRemoveId(index); + // setToRemoveItem(item); + // setshowRemoveConfirm_M(true); + // } + + // function Remove_AddVis(){ + // let index=toRemoveId + // let item=toRemoveItem; + // let arr=AddVisibility; + // console.log('toRemoveId:',index); + // if(index>=0 && index 0) { + console.log("check-keyId-", index) + let deleteQuery = `DELETE FROM ${AppTables.COMPETITION_VISIBILITY} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' AND KEY_ID='${index}' `; + + txn.executeSql(deleteQuery, [], function (txn3, txnres) { + console.log('Visibility data deleted', item.keyId, +"" + index); + let updatedVisibility = AddVisibility.filter(item => item.keyId !== index); + setAddVisibility(updatedVisibility); + setHasUnsavedChanges(true); + notify('Visibility removed successfully', 'LONG'); + setrerenderdata(!rerenderdata); + setToRemoveId(''); + setToRemoveItem({}); + setshowRemoveConfirm_M(false); + + }, function (txnE, txnerr) { + console.log('Error deleting survey data:', txnerr); + }); + + } + else { + let index = toRemoveId + let item = toRemoveItem; + let arr = AddVisibility; + console.log('toRemoveId:', index); + if (index >= 0 && index < arr.length) { + arr.splice(index, 1); + setAddVisibility(arr); + setHasUnsavedChanges(true); + notify('Visibility removed successfully', 'LONG') + setrerenderdata(!rerenderdata); + } + else { + notify('Cannot remove! Visibility not found', 'LONG') + } + setToRemoveId(''); + setToRemoveItem({}); + setshowRemoveConfirm_M(false); + } + + }); + } + + + + + function _render_addVisFormTop() { + let xpos = 0; + if (animatedChoice != null) { + xpos = animatedChoice.interpolate({ + inputRange: [0, 1], + outputRange: [0, -75], + }); + } + + let AddVisCameraReqI = KPIFields.findIndex(i => i.KPIFieldName == 'CompVisCameraReq'); + let AddVisCameraReqObj = AddVisCameraReqI >= 0 ? KPIFields[AddVisCameraReqI] : {}; + let CompVisCameraReq = AddVisCameraReqI >= 0 ? AddVisCameraReqObj['KPIFieldEnable'] : true; + + + + + return ( + + + {'Is Present'} + + + + { onChoiceSelect(1, 'isPresent') }}> + Yes + + { onChoiceSelect(0, 'isPresent') }}> + No + + + + + + { + isAddVisPresent == 1 && (rerenderdata == rerenderdata) && + + + + + + Company + {CustomPicker(props, Companies, 'Company', 'CompanyId', 'Company', 'CompanyId', onselectionChange, { value: AddVisFormData.Company, otherData: {} })} + + + + + Category + {CustomPicker(props, Categories, 'CategoryName', 'CategoryId', 'CategoryName', 'CategoryId', onselectionChange, { value: AddVisFormData.CategoryName, otherData: { 'CompanyId': AddVisFormData.CompanyId != null ? AddVisFormData.CompanyId : '' } })} + + + + + + Sub Category + + {CustomPicker(props, SubCategories, 'SubCategoryName', 'SubCategoryId', 'SubCategoryName', 'SubCategoryId', onselectionChange, { value: AddVisFormData.SubCategoryName, otherData: { 'CompanyId': AddVisFormData.CompanyId != null ? AddVisFormData.CompanyId : '' } })} + + + + + Brands + + {CustomPicker(props, Brands, 'BrandName', 'BrandId', 'BrandName', 'BrandId', onselectionChange, { value: AddVisFormData.BrandName })} + + + + + Display Type + {CustomPicker(props, DisplayList, 'DisplayName', 'DisplayId', 'DisplayName', 'DisplayId', onselectionChange, { value: AddVisFormData.DisplayName })} + + + + + Remark + { onFormDataChange(val, 'Remark', 'text'); }} + /> + + + {CompVisCameraReq && + + + Image + + + + {(AddVisFormData.Image1Path == '' || AddVisFormData.Image1Path == null) ? + { openCamera('1') }}> + + : (AddVisFormData.Image1Path != '' && AddVisFormData.Image1Path != null) ? + { OpenImgModal(AddVisFormData.Image1Path, '1') }}> + + : null + } + + + + + } + + { Add_AddVis() }}> + Add + + + + + + Added Visibilities + + { + AddVisibility.length > 0 && + AddVisibility.map((item, index) => { + console.log(item); + return ( + + + + + Company : + {item.Company} + + + Category : + {item.CategoryName} + + + Sub Category : + {item.SubCategoryName} + + + Brand : + {item.BrandName} + + + Display Type : + {item.DisplayName} + + + Remark : + {item.Remark} + + + {CompVisCameraReq && + + {/* */} + Image + {(item.Image1Path != null && item.Image1Path != '') && } + {/* */} + } + { showRemoveConfirm(item, index) }}> + + + + + + + ); + }) + } + + + + } + + ) + } + + return ( + + {processing && } + + + + {_OpenCaptureImage_Modal()} + {ConfirmSaveAlert(props, showAlert, onSaveCancel, saveData)} + {ConfirmSaveAlert(props, showRemoveConfirm_M, () => { setshowRemoveConfirm_M(false) }, Remove_AddVis, 'Do you really want to remove this visibility?')} + {ConfirmSaveAlert(props, showRAllC_M, () => { setShowRAllC_M(false) }, onConfirmRemoveAll, 'Do you really want to remove all visibility data?')} + { BgShowCamera(false); getImage(imgData) }} showCamera={showCamera} onHideCamera={() => { BgShowCamera(false); }} /> + + + + {Object.keys(storeData).length > 0 && + + {_render_addVisFormTop()} + + } + + { onSubmitData() }} /> + + + + + + + ); +} + + + +export default connect(mapStateToProps, mapDispatchToProps)(CompetitionVisibility); \ No newline at end of file diff --git a/PerformicsSrc/src/screens/CompetitionVisibilityIR.js b/PerformicsSrc/src/screens/CompetitionVisibilityIR.js new file mode 100644 index 0000000..3ca7cab --- /dev/null +++ b/PerformicsSrc/src/screens/CompetitionVisibilityIR.js @@ -0,0 +1,1888 @@ +import React,{useState,useEffect,useRef} from 'react'; +import Container from '../components/container'; +import { useRoute } from '@react-navigation/native'; +import { globalStyles,customStyles,GetPageTheme } from "../styles/Global"; +import {StatusBar,Image,TextInput,View,Text,ScrollView,TouchableOpacity,Platform,PermissionsAndroid,FlatList, Alert, Animated, AppState, DeviceEventEmitter, Keyboard} from 'react-native'; +import { ReactReduxContext,connect,useSelector, useDispatch } from 'react-redux'; +import { mapStateToProps,mapDispatchToProps } from '../reducers/contextProvider'; +import {notify} from '../components/notify'; +import moment from 'moment'; +import {UploadData2, getDownloadJson,getKPIFields,marktext1,marktext2, resizeImage, restore_ImageWithMetaData, validateNumber} from '../controller/functions'; +import {get_item,set_item,clear_item} from '../components/localStorage'; +import {version,sloganline,appname,testurl,db, colors_Arr, common_ImagePath, ImageFolderPath} from '../constants/constants'; +import CustomHeader from '../components/customHeader'; +import {AntDesign, Entypo, FontAwesome, MaterialCommunityIcons} from '../components/icons'; +import CustomLoader from '../components/CustomLoader'; +import LinearGradient from 'react-native-linear-gradient'; +import { AppTables } from '../constants/tableConstants'; +import * as RNFS from 'react-native-fs'; +import GradientButton from '../components/gradientButton'; +import CustomModal from '../components/CustomModal'; +import { ConfirmSaveAlert } from '../components/alert'; +import { CustomPicker } from '../components/CustomPicker'; +import CustomCamera from '../components/Camera'; + +import CameraImg3 from '../assets/performics/camera_tick.svg'; +import CameraImg5 from '../assets/image/astrickcamera.svg'; +import IRLogin from '../components/IRLogin'; +import { SyncIRsessionsInKPI } from '../constants/uploadData'; +import { METHODS, getMethodName } from '../constants/methodNames'; +import ImageViewer from 'react-native-image-zoom-viewer'; + +function CompetitionVisibilityIR(props) { + const route = useRoute(); + const ST=props.StaticText || {}; + + // get all theme styles acc to current theme set + const PageTheme=GetPageTheme(props.DarkMode,route.name); + const customStyle=customStyles(props.DarkMode,route.name); + const animatedChoice=useRef(new Animated.Value(0)).current; + + const [processing, setProcessing] = useState(true); + const [loaderTitle, setLoaderTitle] = useState('loading...'); + const [isAdhocScreen, setIsAdhocScreen] = useState(false); + const [storeData, setStoreData] = useState({}); + const [currentMenu, setCurrentMenu] = useState({}); + const [brandData, setBrandData] = useState([]); + const [rerenderdata, setrerenderdata]= useState(0); + const [rerenderdata2, setrerenderdata2]= useState(0); + const [KPIFields, setKPIFields] = useState([]); + + const [AddVisibility, setAddVisibility] = useState([]); + const [AddVisFormData, setAddVisFormData] = useState({}); + const [isAddVisPresent, setIsAddVisPresent] = useState(0); + const [showAlert, setShowAlert] = useState(false); + const [Companies, setCompanies] = useState([]); + const [Categories, setCategories] = useState([]); + const [SubCategories, setSubCategories] = useState([]); + const [Brands, setBrands] = useState([]); + const [DisplayList, setDisplayList] = useState([]); + const [hasUnsavedChanges,setHasUnsavedChanges] = useState(false); + const [showCamera, setShowCamera] = useState(false); + const showCameraRef = useRef(false); + const [getImageProps,setGetImageProps]= useState({}); + const [toRemoveId,setToRemoveId]= useState(''); + const [toRemoveItem,setToRemoveItem]= useState({}); + const [showRemoveConfirm_M,setshowRemoveConfirm_M]= useState(false); + const [showRAllC_M,setShowRAllC_M]= useState(false); + + const [SelectedImg, setSelectedImg] = useState(''); + const [showModal, setShowModal] = useState(false); + const [reCapImgModalObj, setReCapImgModalObj] = useState({}); + const [showImageSaveOp, setShowImageSaveOp] = useState(true); + const [ImgMadCount, setImgMadCount] = useState({img1:0,img2:0}); + + const hasUnsavedChangesRef = React.useRef(hasUnsavedChanges); + const WindowDataRef=React.useRef(AddVisibility); + const StoreIdRef=React.useRef(null); + const ScreenNameRef=React.useRef(''); + const [StoreCameraAllow, setStoreCameraAllow] = useState(true); + + + const VisFormDataRef=React.useRef(AddVisFormData); + const isAddVisPresentRef=React.useRef(isAddVisPresent) + + // IR states or refs + const [isDataExists, setisDataExists] = useState(false); + const [isDataUploaded, setisDataUploaded] = useState("N"); + // const [AddVisIRImages, setAddVisIRImages] = useState([]); + // const [GbTempSessionId, setGbTempSessionId] = useState(""); + const AddVisIRImages= useRef([]); + const GbTempSessionId= useRef(""); + const GbTempSessionObj=useRef({}); + const sessionsToUpload = useRef([]); + const sessionsToUploadDetails = useRef([]); + const sessionsUploadedCount = useRef(0); + const sessionsReceived = useRef(0); + const [showRetakeModal, setshowRetakeModal] = useState(false); + const [retakeMData, setretakeMData] = useState({}); + const [showUploadAlert, setshowUploadAlert] = useState(false); + + const [show_zoomImage, setShow_zoomImage] = useState(false); + const [refImageIndex, setrefImageIndex] = useState(0); + const [zoomImageUrl, setZoomImageUrl] = useState([]); + const zoomView=useRef(null); + + + const d1=new Date(); + const d2=moment(d1).format('MM/DD/YYYY'); + + + useEffect(() => { + let params=props.route.params? props.route.params:{}; + let storeData1=params.storeData || {}; + let menu1=params.menu || {}; + let cameraAllow=storeData1.CameraAllow=='true' || storeData1.CameraAllow==1?true:false; + setStoreCameraAllow(cameraAllow); + + let isAdhoc=params.isAdhoc || false; + setIsAdhocScreen(isAdhoc); + setStoreData(storeData1); + setCurrentMenu(menu1); + + StoreIdRef.current=storeData1.StoreId + ScreenNameRef.current=menu1.ScreenName + getData(storeData1,menu1); + + const AppStateSubscription = AppState.addEventListener('change', (pro)=>{ _handleAppStateChange(pro)}); + const removeIRListener=DeviceEventEmitter.addListener('onIRImageUpload',(data)=>{ onIRImageUpload(data,storeData1,menu1)}); + const unsubscribe=props.navigation.addListener('beforeRemove', onBeforeRemove); + + return function cleanup() { + IRLogin.deRegisterReceiver(); + AppStateSubscription.remove(); + removeIRListener.remove(); + return unsubscribe; + }; + }, []); + + // useEffect(() => { + // const unsubscribe=props.navigation.addListener('beforeRemove', onBeforeRemove); + // return unsubscribe; + // }, [hasUnsavedChanges]); + + // useEffect(() => { + // const unsubscribe=props.navigation.addListener('beforeRemove', onBeforeRemove); + // return unsubscribe; + // }, [showCamera]); + + const _handleAppStateChange = async (nextAppState) => { + if(nextAppState =='background' && hasUnsavedChangesRef.current==true){ + let newData = { + storeBGData:WindowDataRef.current, + menuName:ScreenNameRef.current, + StoreId1:StoreIdRef.current, + AddFormData:VisFormDataRef.current, + isVisPresent:isAddVisPresentRef.current, + bg_GbTempSessionId:GbTempSessionId.current, + bg_AddVisIRImages:AddVisIRImages.current, + visiteDate:d2 + } + let WindowsStr= await JSON.stringify(newData) + await set_item('storeData',WindowsStr); + } + } + + function onBeforeRemove(e){ + console.log('onBeforeRemove called'); + if(showCameraRef.current==true){ + e.preventDefault(); + UpdateShowCameraRef(false); + } + else{ + if (hasUnsavedChangesRef.current==true) { + e.preventDefault(); // Prevent default behavior of leaving the screen + onRemoveScreen(e); + } + else{ + return; + } + } + } + + async function onIRImageUpload(data,storeData1,menu1){ + console.log('onIRImageUpload on receive',data); + let {message,sessionId,status}=data; + let snum=sessionsReceived.current+1; + let su_num=sessionsUploadedCount.current; + console.log('onreceive data',data); + sessionsReceived.current=snum; + let thisIR_SessObjIndex=sessionsToUploadDetails.current.findIndex(i=>i.TEMP_SESSION_ID==sessionId); + let thisIR_SessObj=sessionsToUploadDetails.current[thisIR_SessObjIndex]; + if(status!=null && status=='200' && sessionId!=null && sessionId!=''){ + + let UnSessionId=await IRLogin.getDataIRSession(sessionId); + if(UnSessionId!=null && UnSessionId!=''){ + sessionsUploadedCount.current=++su_num; + let isUpdated=await UpdateIRUploadStatus(storeData1,menu1,sessionId,UnSessionId); + let isUploaded=await LogImageUpload(storeData1,menu1,sessionId,UnSessionId,message,status,thisIR_SessObj); + console.log("su_num:",su_num); + if(isUploaded){ + console.log('Image Uploaded'); + notify("Images Log uploaded for session:"+sessionId); + } + else{ + console.log('cannot Uploaded image'); + notify("cannot upload log for session:"+sessionId); + } + + } + else{ + console.log('OnReceived UnSessionId get',UnSessionId); + notify("Cannot upload images for session:"+sessionId+". Universal Id not found"); + let isUploaded=await LogImageUpload(storeData1,menu1,sessionId,"",message,status,thisIR_SessObj); + if(isUploaded){ + console.log('Image Uploaded'); + notify("Images Log uploaded for session:"+sessionId); + } + else{ + console.log('cannot Uploaded image'); + notify("cannot upload log for session:"+sessionId); + } + + } + + } + else{ + console.log('Cannot get OnReceived UnSessionId'); + notify((message!=null && message!=""?message+". ":"")+"Cannot upload images for session:"+sessionId); + let isUploaded=await LogImageUpload(storeData1,menu1,sessionId,"",message,status,thisIR_SessObj); + if(isUploaded){ + console.log('Image Uploaded'); + notify("Images Log uploaded for session:"+sessionId); + } + else{ + console.log('cannot Uploaded image'); + notify("cannot upload log for session:"+sessionId); + } + + + } + + console.log("check snum and su_num:",snum,su_num,sessionsToUpload.current.length); + // if last broadcast received either uploaded or not update the processing status to false + if(snum==sessionsToUpload.current.length){ + setProcessing(false); + console.log('Deregister event when last received'); + IRLogin.deRegisterReceiver(); + } + + // All IR Sessions with Images Uploaded : set DataUploaded Status to U (Fully Upload) + if(su_num==sessionsToUpload.current.length){ + setisDataUploaded("U"); + setProcessing(false); + notify("All IR images uploaded!"); + console.log('set all uploaded true to U'); + } + // Some Of IR Sessions with Images Uploaded but some are yet pending : set DataUploaded Status to P (Partial Upload) + else if(su_num>0 && su_num!=sessionsToUpload.current.length){ + // setProcessing(false); + setisDataUploaded("P"); + notify("Some IR Images are still not uploaded!"); + console.log('set all uploaded true to P'); + } + } + + + function onRemoveScreen(e){ + Alert.alert( + "", + "Do you really want to exit the screen?", + [ + { + text: "Cancel", + onPress: () => {}, + style: "cancel" + }, + { text: ST.OK, onPress: async () => { + BgUnsavedChanges(false) + await clear_item('storeData') + // setHasUnsavedChanges(false); + props.navigation.dispatch(e.data.action);} } + ] + ); + } + + function BgUnsavedChanges(val){ + hasUnsavedChangesRef.current=val + setHasUnsavedChanges(val); + } + + function BgWindowData(val){ + WindowDataRef.current=val + setAddVisibility(val); + } + + function UpdateShowCameraRef(val){ + showCameraRef.current=val + setShowCamera(val); + } + + function BgAddVisFormData(val){ + VisFormDataRef.current=val + setAddVisFormData(val); + } + + function BgIsAddVisPresent(val){ + isAddVisPresentRef.current=val + setIsAddVisPresent(val); + } + + async function OpenImgModal(imgPath,window,splitItem,splitItemIndex,cameraType){ + setSelectedImg(imgPath) + setShowModal(true); + if((imgPath!='' && imgPath!=null)){ + setShowImageSaveOp(false); + } + else{ + setShowImageSaveOp(true); + } + setReCapImgModalObj({window,splitItem,splitItemIndex,cameraType}) + // _OpenCaptureImage_Modal(imgPath,window,splitItem,splitItemIndex,cameraType) + + } + + function cancelImage(){ + // setImage1(''); + setSelectedImg(''); + setReCapImgModalObj({}) + setShowModal(false); + } + + + async function getData(storeData1,menu1){ + try { + let {StoreId,ChainId,StateId,StoreTypeId}=storeData1; + + let AllKPIFields=await getKPIFields(menu1); + setKPIFields(AllKPIFields); + + let isKPIIREnableI=AllKPIFields.findIndex(i=>i.KPIFieldName=='KPIIREnable') + let isKPIIREnableObj=isKPIIREnableI>=0?AllKPIFields[isKPIIREnableI]:{}; + let isKPIIREnable=isKPIIREnableI>=0?isKPIIREnableObj['KPIFieldEnable']:false; + + + + await db.transaction(async function (txn) { + + let q4=`Select distinct CompanyId,Company from Master_Competitor`; + await txn.executeSql(q4,[],async function (txn2, txnres2) { + if(txnres2.rows.length>0){ + let arr=[]; + for(var i=0;i0){ + let arr=[]; + for(var i=0;i0){ + storeBGData1=storeBGData; + bgStoreJson=StoreJson + // setAddVisibility(storeBGData); + // setAddVisFormData(AddFormData) + // BgUnsavedChanges(true) + BgWindowData(storeBGData) + // BgAddVisFormData(AddFormData) + } + + + // Check if form data exists in bg data + if(AddFormData!=null && Object.keys(AddFormData).length>0){ + // BgUnsavedChanges(true) + let {CategoryId,SubCategoryId,CompanyId}=AddFormData; + // load categories if company exists + if(CategoryId!=null && CategoryId!=''){ + loadData(CompanyId,'Categories'); + } + // load subcategories if category exists + if(CategoryId!=null && CategoryId!=''){ + loadData(CategoryId,'SubCategories',CompanyId); + } + // load brands if subcategory exists + if(SubCategoryId!=null && CategoryId!=''){ + loadData(SubCategoryId,'Brands',CompanyId); + } + BgAddVisFormData(AddFormData) + } + + // Check if IR Images and session present in bg data + if(bg_GbTempSessionId!=null && bg_GbTempSessionId!='' && bg_AddVisIRImages!=null && bg_AddVisIRImages.length>0){ + AddVisIRImages.current=bg_AddVisIRImages; + GbTempSessionId.current=bg_GbTempSessionId; + } + } + + } + let q3=`Select * from ${AppTables.COMPETITION_VISIBILITY} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' `; + await txn.executeSql(q3,[],async function (txn2, txnres2) { + if(txnres2.rows.length>0){ + let arr=[]; + let isAddVisPr=false; + for(var i=0;i{ + + db.transaction(async function (txn) { + + let q=`select IMAGE1 as Image1 from ${AppTables.COMPVIS_IR_IMAGES} where STORE_ID='${storeData1.StoreId}' and VISIT_DATE='${d2}'`; + + await txn.executeSql(q,[],async function (txn2, txnres2) { + console.log('get IRImages count ',txnres2.rows.length); + if(txnres2.rows.length>0){ + let arr2=[]; + for(var i=0;i{ + return val + }).catch((err)=>{ + console.log(err); + return allImages; + }); + } + + async function getUploadIRStatus(storeData1,menu1){ + let allImages=[]; + let {StoreId} =storeData1; + return new Promise((resolve,reject)=>{ + db.transaction(async function (txn) { + + // Check If IR session uploaded or not + let q=` SELECT Distinct TEMP_SESSION_ID as TempSessionId,UN_SESSION_ID as UploadSessionId,UPLOAD_STATUS as UploadStatus,SYNC_STATUS as SyncStatus,SESSION_STORECODE as Sess_StoreCode,SESSION_TASKNAME as Sess_TaskName,SESSION_CATNAME as Sess_CatName,SESSION_PHOTOTYPE as Sess_PhotoType FROM ${AppTables.COMPVIS_IRUPLOAD} where STORE_ID='${StoreId}' and VISIT_DATE='${d2}' `; + await txn.executeSql(q,[],async function (txn2, txnres) { + if(txnres.rows.length>0){ + + //No Loop required, As only one TempSessionId will be genrated for KPI + let data =txnres.rows.item(0); + let {Sess_StoreCode,Sess_TaskName,Sess_CatName,Sess_PhotoType}=data; + if(data.UploadStatus=='1' && isDataUploaded!='P' && isDataUploaded!='U'){ + console.log('getUploadIRStatus success: U'); + // Stop Upload and Editing both when fully uploaded + setisDataUploaded("U"); + } + // setGbTempSessionId(data.TempSessionId); + GbTempSessionId.current=data.TempSessionId; + let obj={Sess_StoreCode,Sess_TaskName,Sess_CatName,Sess_PhotoType}; + GbTempSessionObj.current=obj; + resolve(true); + } + else{ + resolve(true); + } + },function (txnE,txnerr) { console.log(txnerr); resolve(false); },); + }); + }).catch((err)=>{ + return false; + }) + } + + + async function getImage(imgdata){ + let type=getImageProps.type || ''; + if(typeof imgdata =='object' && imgdata.errorCode=='camera_unavailable'){ + notify('Camera unavailable'); + } + else if(typeof imgdata =='object' && imgdata.uri!=null){ + const img=imgdata; + const imgurl=img.uri, imgWidth=img.width, imgHeight=img.ExtendedHeight; + let isImgFromGallery=img.fromGallery!=null?img.fromGallery:false; + let picture_clickedd=isImgFromGallery==true?img.datetime:new Date(); + let picture_clicked_time=moment(picture_clickedd).format('MM-DD-YYYY HH:mm:ss') + let picture_clicked_time_for_pic_name=moment(picture_clickedd).format('MMDDYYYY_HHmmss') + + console.log("time", picture_clicked_time); + console.log("time1", picture_clicked_time_for_pic_name); + let calculate_tym_date_for_filename = picture_clicked_time_for_pic_name; + let calculate_tym_date_over_img = picture_clicked_time; + + let filename=storeData.StoreId+'_'+(props.UserId || '')+'_CompVisibilityImg-'+calculate_tym_date_for_filename+'.jpg'; + + + const mark_text1=calculate_tym_date_over_img; + const mark_text2='Store Name:'+storeData.StoreName+' | Store Id:'+storeData.StoreId+' | User Id:'+storeData.EmpId+' | Image Type: Comp. Visibility'+' | Date:'+calculate_tym_date_over_img; + + + let addvisdata=AddVisFormData; + let image_key='Image1'; + let image_path_key='Image1Path'; + addvisdata[image_key]=filename; + + let imagePath=`${ImageFolderPath+currentMenu.ScreenName}/${filename}`; + RNFS.copyFile(imgurl, imagePath) + .then(async(resn) => { + // render data with clicked image + let uri='file://'+imagePath; + console.log('image marker',uri); + addvisdata[image_path_key]=uri; + + setSelectedImg(uri) + BgAddVisFormData(addvisdata) + BgUnsavedChanges(true) + setrerenderdata2(!rerenderdata2); + // add metdata then resize image and restored back to the imagePath + let restore_data={"destFilePath":imagePath,"imgurl":imgurl,imgWidth,imgHeight,mark_text1,mark_text2} + let is_restored=await restore_ImageWithMetaData(restore_data,imgdata); + console.log("image restored:",is_restored); + }) + .catch(err => { + console.log('ERROR: image file write failed!!!'); + console.log(err.message, err.code); + }); + + } + + } + + function _OpenCaptureImage_Modal(img){ + const isImageCap=(img!='' || img!=null)?true:false; + let {window,splitItem,splitItemIndex,cameraType}=reCapImgModalObj + let camera2Label=(window && window.PromoImage2Lable) || ''; + return ( + + { + isImageCap && + + + + + {openCamera('1')}}> + + + + {!showImageSaveOp && + {cancelImage()}}> + {ST.Close} + + } + + } + + ) + } + + + // IR functions start + + function openRetakeOp(IRImgIndex,IRimgPath){ + let data={'IRImgIndex':IRImgIndex,'IRimgPath':IRimgPath}; + setretakeMData(data); + setshowRetakeModal(true); + } + + + function closeRetakeOp(){ + setretakeMData({}) + setshowRetakeModal(false); + } + + function setIRZoomImages(IRCamImages){ + let z_images=[]; + for(let ci in IRCamImages){ + let img=IRCamImages[ci]; + let img_obj={imgIndex:(ci+1),url: img.ImagePath, props: {}} + z_images.push(img_obj); + if(ci==IRCamImages.length-1){ + setZoomImageUrl(z_images); + } + } + } + + async function StartCameraSession(){ + let IR_Creds=props.IR_Creds!=null && props.IR_Creds!=""?JSON.parse(props.IR_Creds):[]; + let IR_CredsObj=IR_Creds.length>0?IR_Creds[0]:{}; + + let newStdata=storeData; + if(IR_CredsObj.UseStoreCode!=1){ + newStdata.StoreCode=newStdata.StoreId; + } + let obj={"StoreData":newStdata}; + obj["category_name"]="multi"; + obj["task_name"]="multi-display"; + obj["photo_type"]="display"; + + + let st1=JSON.stringify(obj); + let TempSessionId= await IRLogin.StartIRSession(st1); + console.log('TempSessionId StartCameraSession:',TempSessionId,newStdata.StoreCode); + if(TempSessionId!=null){ + setLoaderTitle('Processing Image...'); + setProcessing(true); + let IRCamImages=await IRLogin.getImageURIFromIRSession(TempSessionId); + console.log('Images from session :',IRCamImages); + + //set global IR images and session id if Camera is shown only once in header for KPI Screen + // setGbTempSessionId(TempSessionId); + GbTempSessionId.current=TempSessionId; + let sessObj={} + sessObj['Sess_StoreCode'] =newStdata.StoreCode; + sessObj['Sess_TaskName'] =obj["task_name"]; + sessObj['Sess_CatName'] =obj["category_name"]; + sessObj['Sess_PhotoType'] =obj["photo_type"]; + GbTempSessionObj.current=sessObj; + AddVisIRImages.current=IRCamImages; + setIRZoomImages(IRCamImages); + + // setHasUnsavedChanges(true); + BgUnsavedChanges(true); + setrerenderdata(!rerenderdata); + + // stop image processing loader after all images get from sessionID + setProcessing(false); + setLoaderTitle('loading...'); + + } + else{ + notify('Cannot capture images as getting Session Null.'); + } + + } + + + async function ResumeCameraSession(){ + // Resume Temp Session Id + let TempSessionId=GbTempSessionId.current; + console.log('TempSessionId :',TempSessionId); + + if(TempSessionId!=null){ + setLoaderTitle('Processing Image...'); + setProcessing(true); + let retTempSessionId=await IRLogin.ResumeIRSession(TempSessionId); + console.log('retTempSessionId :',retTempSessionId); + if(retTempSessionId!=null){ + // start fetching images after capturing photos + + let IRCamImages=await IRLogin.getImageURIFromIRSession(TempSessionId); + console.log('Images from session :',IRCamImages); + // setAddVisIRImages(IRCamImages); + AddVisIRImages.current=IRCamImages; + setIRZoomImages(IRCamImages); + + + BgUnsavedChanges(true); + // setHasUnsavedChanges(true); + setrerenderdata(!rerenderdata); + + // stop image processing loader after all images get from sessionID + setProcessing(false); + setLoaderTitle('loading...'); + } + else{ + notify('Cannot capture images as getting Session Null.'); + } + + } + else{ + notify('Cannot capture images as getting Session Null.'); + } + + } + + async function DeleteIRPhoto(type='1',imgData={}){ + console.log('DeleteIRPhoto called'); + setshowRetakeModal(false); + let deleteImgData=type=='2'?imgData:retakeMData; + let {IRImgIndex,IRimgPath}= deleteImgData; + IRImgIndex=IRImgIndex!=null?IRImgIndex:''; + IRimgPath=IRimgPath!=null?IRimgPath:''; + + + let TempSessionId=GbTempSessionId.current; + + + console.log('DeleteIRPhoto sessionID :',TempSessionId); + if(TempSessionId!=null || TempSessionId!=''){ + setLoaderTitle('Removing Image...'); + setProcessing(true); + let isDeleted= await IRLogin.DeleteIRSessionPhoto(TempSessionId,IRimgPath);//"8099b819-0979-40d2-950e-489566041484";// + console.log('DeleteIRPhoto isDeleted :',isDeleted); + if(isDeleted){ + setLoaderTitle('Processing Image...'); + + let IRCamImages=await IRLogin.getImageURIFromIRSession(TempSessionId); + console.log('Deleted, Images from session :',IRCamImages); + // setAddVisIRImages(IRCamImages); + AddVisIRImages.current=IRCamImages; + setIRZoomImages(IRCamImages); + + BgUnsavedChanges(true); + // setHasUnsavedChanges(true); + setrerenderdata(!rerenderdata); + + // stop image processing loader after all images get from sessionID + setProcessing(false); + setLoaderTitle('loading...'); + + } + else{ + notify('Cannot delete photo!.'); + } + + } + else{ + notify('Cannot delete photo! Found Null Session.'); + } + + } + + async function RetakeIRPhoto(){ + setshowRetakeModal(false); + let {IRImgIndex,IRimgPath}= retakeMData; + + IRImgIndex=IRImgIndex!=null?IRImgIndex:''; + IRimgPath=IRimgPath!=null?IRimgPath:''; + + let TempSessionId=GbTempSessionId.current; + + console.log('Retake sessionID :',TempSessionId); + if(TempSessionId!=null || TempSessionId!=''){ + setLoaderTitle('Processing Image...'); + setProcessing(true); + let isRetakeDone= await IRLogin.RetakeIRSessionPhoto(TempSessionId,IRimgPath); + console.log('Retake isRetakeDone :',isRetakeDone); + if(isRetakeDone){ + setTimeout(async ()=>{ + let IRCamImages=await IRLogin.getImageURIFromIRSession(TempSessionId); + console.log('Retake Images from session :',IRCamImages); + // setAddVisIRImages(IRCamImages); + AddVisIRImages.current=IRCamImages; + setIRZoomImages(IRCamImages); + + BgUnsavedChanges(true); + // setHasUnsavedChanges(true); + setrerenderdata(!rerenderdata); + + // stop image processing loader after all images get from sessionID + setProcessing(false); + setLoaderTitle('loading...'); + },1000); + + } + else{ + notify('Error occur while retaking photo!.'); + } + + } + else{ + notify('Cannot start camera! Found Null Session.'); + } + + } + + // Start Upload for IR images + async function UploadIRSessions(){ + setshowUploadAlert(false); + sessionsToUpload.current=[]; + sessionsReceived.current=0; + sessionsUploadedCount.current=0; + + try{ + let {StoreId}=storeData; + setLoaderTitle('Uploading Images...'); + setProcessing(true); + + // Global Upload function + // Sync Status for IR images + // From Infilect SDK 1.3.6 - The Images are uploading on realtime bases i.e. As the images are clicked by user the Images are getting uploaded to infilect server. + // In this case call below func to check the status of images that is already being uploaded by Real Time processing + let sync_result=await SyncIRsessionsInKPI(props,storeData,AppTables.COMPVIS_IRUPLOAD,AppTables.COMPVIS_IR_IMAGES); + let {isUploadStarted,AllDataUploaded,noDataFound,success,sessionList,sessionListWithDetails}=sync_result; + console.log("Sync Resp sync_result:",sync_result); + if(!success){ + notify('Cannot Upload Data! Something went wrong.'); + setProcessing(false); + } + else{ + if(noDataFound){ + notify('No session to upload!'); + setisDataUploaded('U'); + setProcessing(false); + } + else{ + if(!isUploadStarted && AllDataUploaded){ + notify('All images synced! No session to upload.'); + setisDataUploaded('U'); + setProcessing(false); + }else if(isUploadStarted){ + sessionsToUpload.current=sessionList; + sessionsToUploadDetails.current=sessionListWithDetails; + console.log("UploadStarted"); + } + } + } + }catch(e){ + console.log('Uploading Issue:',e); + setProcessing(false); + } + + + } + + async function UpdateIRUploadStatus(storeData1,menu1,TempSessionId,UnSessionId){ + console.log('UpdateIRUploadStatus'); + return new Promise((resolve,reject)=>{ + + let {StoreId,ChainId,StateId,StoreTypeId}=storeData1; + db.transaction(async function (txn) { + // update upload status and sync status here : when files are uploaded and we have got the universal session id for that + let q=`Update ${AppTables.COMPVIS_IRUPLOAD} set UN_SESSION_ID='${UnSessionId}',UPLOAD_STATUS='1',SYNC_STATUS='Synced' where STORE_ID='${StoreId}' and VISIT_DATE='${d2}' and TEMP_SESSION_ID='${TempSessionId}' `; + // console.log("update IR Upload q:",q); + await txn.executeSql(q,[],async function (txn2, txnres) { + console.log('Updated IR Upload Status'); + // console.log("update IR Upload q2:",q2); + let q2=`Update ${AppTables.COMPVIS_IR_IMAGES} set UN_SESSION_ID='${UnSessionId}' where STORE_ID='${StoreId}' and VISIT_DATE='${d2}' and TEMP_SESSION_ID='${TempSessionId}' `; + await txn.executeSql(q2,[],async function (txn2, txnres2) { + console.log('Updated IR Upload Images Status'); + resolve(true); + },function (txnE,txnerr) { console.log(txnerr);resolve(false); },); + + },function (txnE,txnerr) { console.log(txnerr);resolve(false); },); + }); + }).catch((Err)=>{ + console.log('Error in UpdateIRUploadStatus:',Err); + return false; + }) + + + + } + + async function LogImageUpload(storeData1,menu1,TempSessionId,UnSessionId,message,status,thisIR_SessObj={}){ + let {StoreId,StoreName}=storeData1; + const url=props.baseurl+getMethodName(METHODS.UPLOADJSON_METHOD); + const nowTime=moment().format('HH:mm:ss'); + let ImageCount=await getImageCount(storeData1,menu1,TempSessionId); + let {SESSION_STORECODE,SESSION_TASKNAME,SESSION_CATNAME,SESSION_PHOTOTYPE}=thisIR_SessObj; + + + ////Replaced special charecter and white space + let storeTittle = StoreName.replace(`@!%&`, '').replace(' ', '-'); + console.log("storeTittle:",storeTittle,StoreName); + + let obj={}; + obj['StoreId']=StoreId; + obj['Username']=props.UserId; + obj['VisitDate']=d2; + obj['InTime']=nowTime; + obj['TempSessionId']=TempSessionId; + obj['UnSessionId']=UnSessionId; + obj['Status']=status; + obj['Message']=message; + obj['ImageCount']=ImageCount; + obj['StoreTitle']=storeTittle; + obj['StoreCode']=SESSION_STORECODE; + obj['TaskName']=SESSION_TASKNAME; + obj['CategoryName']=SESSION_CATNAME; + obj['PhotoType']=SESSION_PHOTOTYPE; + obj['KPIType']=currentMenu.MenuName; + obj['ScreenName']=currentMenu.ScreenName; + obj['UploadType']="New"; + + let postData={}; + postData['MID']=0; + postData['Keys']='IR_UPLOAD_LOG_MSG'; + postData['JsonData']=JSON.stringify(obj); + postData['UserId']=props.UserId; + + console.log('postData',postData); + + return await UploadData2(url,postData) + .then((res)=>{ + // console.log("log Uploaded:",res.UploadJsonResult); + if(res.UploadJsonResult!=null && res.UploadJsonResult=='Success'){ + return true; + } + return false; + }) + .catch((err)=>{ + console.log(err); + return false; + }); + } + + + async function getImageCount(storeData1,menu1,TempSessionId){ + let {StoreId,ChainId,StateId,StoreTypeId}=storeData1; + console.log('storeData in getImageCount',storeData1); + return new Promise((resolve,reject)=>{ + + + db.transaction(async function (txn) { + + let q=`select DISTINCT TEMP_SESSION_ID,count(IMAGE1) as ImageCount from ${AppTables.COMPVIS_IR_IMAGES} where STORE_ID='${StoreId}' and VISIT_DATE='${d2}' and TEMP_SESSION_ID='${TempSessionId}' group by TEMP_SESSION_ID `; + console.log('q',q); + await txn.executeSql(q,[],async function (txn2, txnres) { + console.log('ImageCount rows:',txnres.rows.length); + if(txnres.rows.length>0){ + let data =txnres.rows.item(0); + console.log('data:',data) + console.log('Image Count for TempSessionId:',data.ImageCount); + resolve(data.ImageCount); + } + else{ + resolve(0); + } + + },function (txnE,txnerr) { console.log(txnerr);resolve(0); },); + }); + }).catch((Err)=>{ + console.log('Error in getImageCount:',Err); + return 0; + }) + + + + } + + + + // IR functions end + async function openCamera(type='1'){ + setGetImageProps({'type':type}); + UpdateShowCameraRef(true); + // props.navigation.navigate('CameraScreen',{'getImage':getImage,'cameraType':'back'}) + } + + + + async function onSubmitData(){ + let isvalid=await validate(); + if(isvalid){ + Keyboard.dismiss(); + setShowAlert(true); + } + } + + async function saveData(){ + // setHasUnsavedChanges(false); + BgUnsavedChanges(false) + setShowAlert(false); + setLoaderTitle('Saving Data...'); + setProcessing(true); + try { + let {StoreId,ChainId,StateId,StoreTypeId}=storeData; + await db.transaction(async function (txn) { + + let q=`DELETE FROM ${AppTables.COMPETITION_VISIBILITY} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' `; + let q2=`DELETE FROM ${AppTables.COMPVIS_IRUPLOAD} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' `; + let q3=`DELETE FROM ${AppTables.COMPVIS_IR_IMAGES} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' `; + + // remove old data + await txn.executeSql(q,[],async function (txn2, txnres) { + console.log('cv data deleted'); + },function (txnE,txnerr) { console.log(txnerr); },); + await txn.executeSql(q2,[],async function (txn2, txnres) { + console.log('av IR status data deleted'); + },function (txnE,txnerr) { console.log(txnerr); },); + + await txn.executeSql(q3,[],async function (txn2, txnres) { + console.log('av IR Images data deleted'); + },function (txnE,txnerr) { console.log(txnerr); },); + + + let isKPIIREnableI=KPIFields.findIndex(i=>i.KPIFieldName=='KPIIREnable') + let isKPIIREnableObj=isKPIIREnableI>=0?KPIFields[isKPIIREnableI]:{}; + let isKPIIREnable=isKPIIREnableI>=0?isKPIIREnableObj['KPIFieldEnable']:false; + + + + var values='',IRImageV='',IRStatusV=''; + if(isAddVisPresent==1 && AddVisibility.length>0){ + for(var i=0;i0){ + removeIRImage() + } + else{ + // setGbTempSessionId(''); + GbTempSessionId.current=''; + } + } + } + + if(isAddVisPresent==1 && isKPIIREnable && AddVisIRImages.current.length>0){ + for(const IRImageIndex in AddVisIRImages.current){ + let IRImgObj=AddVisIRImages.current[IRImageIndex]; + let Image1=IRImgObj['ImagePath']!=null && IRImgObj['ImagePath']!=''?IRImgObj['ImagePath']:''; + + IRImageV+=IRImageV!=''?' , ':''; + IRImageV+=` ('${StoreId}','${d2}','${Image1}','${GbTempSessionId.current}','','${d2}') `; + } + + let {Sess_StoreCode,Sess_TaskName,Sess_CatName,Sess_PhotoType}=GbTempSessionObj.current; + Sess_StoreCode=Sess_StoreCode || ''; + Sess_TaskName=Sess_TaskName || ''; + Sess_CatName=Sess_CatName || ''; + Sess_PhotoType=Sess_PhotoType || ''; + IRStatusV+=IRStatusV!=''?' , ':''; + IRStatusV+=` ('${StoreId}','${d2}','${GbTempSessionId.current}','','0','','${Sess_StoreCode}','${Sess_TaskName}','${Sess_CatName}','${Sess_PhotoType}','${d2}') `; + + } + + console.log('IRImageV:',IRImageV,IRStatusV); + let add_data=`INSERT INTO ${AppTables.COMPETITION_VISIBILITY} (STORE_ID,VISIT_DATE,PRESENT,COMPANY,COMPANY_ID,CATEGORY,CATEGORY_ID,SUB_CATEGORY,SUB_CATEGORY_ID,BRAND,BRAND_ID,DISPLAY,DISPLAY_ID,REMARK,IMAGE,ADDED_DATE) VALUES ${values} `; + let add_IRImagesdata=`INSERT INTO ${AppTables.COMPVIS_IR_IMAGES} (STORE_ID,VISIT_DATE,IMAGE1,TEMP_SESSION_ID,UN_SESSION_ID,ADDED_DATE) VALUES ${IRImageV} `; + let add_IRStatusdata=`INSERT INTO ${AppTables.COMPVIS_IRUPLOAD} (STORE_ID,VISIT_DATE,TEMP_SESSION_ID,UN_SESSION_ID,UPLOAD_STATUS,SYNC_STATUS,SESSION_STORECODE,SESSION_TASKNAME,SESSION_CATNAME,SESSION_PHOTOTYPE,ADDED_DATE) VALUES ${IRStatusV} `; + + await txn.executeSql(add_data,[],async function (txn2, txnres) { + var isIRImageAdded=false,isIRStatusAdded=false; + + if(IRImageV!=''){ + console.log('execute IR image data'); + isIRImageAdded=await executeQuery(add_IRImagesdata); + }else{ + isIRImageAdded=true + } + + if(IRStatusV!=''){ + console.log('execute IR status data'); + isIRStatusAdded=await executeQuery(add_IRStatusdata); + } + else{ + isIRStatusAdded=true + } + console.log('isIRImageAdded:',isIRImageAdded,isIRStatusAdded); + if(!isIRImageAdded){ + setProcessing(false);notify('Cannot add Competition Visibility IR Images data'); + } + else if(!isIRStatusAdded){ + setProcessing(false);notify('Cannot add Competition Visibility IR Status data'); + } + else{ + console.log('av added'); + notify('Competition Visibility added successfully','SHORT'); + setProcessing(false); + setisDataExists(true); + // clear store data in local storage to avoiding re-set data for the store + await clear_item('storeData') + BgUnsavedChanges(false); + props.navigation.goBack(); + // if(isAddVisPresent){ + // setshowUploadAlert(true); + // } + // else{ + // props.navigation.goBack(); + // } + + } + },function (txnE,txnerr) { console.log(txnerr);setProcessing(false);notify('Cannot add competition visibility') },); + + + }); + } catch (err) { + console.log(err); + } + } + + async function executeQuery(q){ + return new Promise((resolve,reject)=>{ + db.transaction(async function (txn) { + await txn.executeSql(q,[],async function (txn2, txnres2) { + resolve(true); + },function(Etxn,txnerr){console.log(txnerr);resolve(false) }); + }); + }).then((val)=>{ + return val; + }).catch((err)=>{ + console.log(err); + return false; + }) + } + + + + async function validate(){ + let isKPIIREnableI=KPIFields.findIndex(i=>i.KPIFieldName=='KPIIREnable') + let isKPIIREnableObj=isKPIIREnableI>=0?KPIFields[isKPIIREnableI]:{}; + let isKPIIREnable=isKPIIREnableI>=0?isKPIIREnableObj['KPIFieldEnable']:false; + + let isValid=true; + if(isAddVisPresent==1 && AddVisibility.length<=0){ + isValid=false; + notify('Please add first','SHORT'); + }else if(StoreCameraAllow && isKPIIREnable && isAddVisPresent==1 && (AddVisIRImages.current.length<=0 || GbTempSessionId.current=='')){ + isValid=false; + notify("Please click images",'SHORT'); + } + + console.log('isValid:',isValid); + return isValid; + } + + async function validateForm(){ + let isValid=true; + let {Company,CompanyId,CategoryName,CategoryId,SubCategoryName,SubCategoryId,BrandName,BrandId,DisplayName,DisplayId,Remark,Image1,Image1Path}=AddVisFormData; + + let isKPIIREnableI=KPIFields.findIndex(i=>i.KPIFieldName=='KPIIREnable') + let isKPIIREnableObj=isKPIIREnableI>=0?KPIFields[isKPIIREnableI]:{}; + let isKPIIREnable=isKPIIREnableI>=0?isKPIIREnableObj['KPIFieldEnable']:false; + + + + if((Company=='' || Company==null )|| (CompanyId=='' || CompanyId==null)){ + isValid=false; + notify('Please select company','SHORT'); + } + else if((CategoryName=='' || CategoryName==null )|| (CategoryId=='' || CategoryId==null)){ + isValid=false; + notify('Please select category','SHORT'); + } + else if((SubCategoryName=='' || SubCategoryName==null )|| (SubCategoryId=='' || SubCategoryId==null)){ + isValid=false; + notify('Please select sub category','SHORT'); + } + else if((BrandName=='' || BrandName==null )|| (BrandId=='' || BrandId==null)){ + isValid=false; + notify('Please select brand','SHORT'); + } + else if((DisplayName=='' || DisplayName==null )|| (DisplayId=='' || DisplayId==null)){ + isValid=false; + notify('Please select display type','SHORT'); + } + // else if((Remark=='' || Remark==null )){ + // isValid=false; + // notify('Please enter remark','SHORT'); + // } + else if(StoreCameraAllow==true && !isKPIIREnable && (Image1=='' || Image1==null )){ + isValid=false; + notify('Please click image','SHORT'); + } + + + console.log('isValid:',isValid); + return isValid; + } + + function onFormDataChange(val,key,type=''){ + if(val!=''){ + let isValid=validateNumber(val,type); + if(!isValid){ + return; + } + } + + let data=AddVisFormData; + data[key]=val; + // setAddVisFormData(data); + // setHasUnsavedChanges(true); + BgAddVisFormData(data) + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + + function onselectionChange(option,keyLbl,keyVal,otherData){ + let CompanyId=otherData.CompanyId!=null?otherData.CompanyId:''; + let data=AddVisFormData; + data[keyVal]=option.value; + data[keyLbl]=option.label; + // setAddVisFormData(data); + // setHasUnsavedChanges(true); + BgAddVisFormData(data) + BgUnsavedChanges(true) + CleanSelector(option,keyLbl,data,CompanyId) + setrerenderdata(!rerenderdata); + } + + function CleanSelector(option,keyLbl='',data={},CompanyId){ + + if(keyLbl=='Company'){ + loadData(option.value,'Categories'); + + data['CategoryId']=''; + data['CategoryName']=''; + data['SubCategoryId']=''; + data['SubCategoryName']=''; + data['BrandId']=''; + data['BrandName']=''; + + data['DisplayId']='' + data['DisplayName']='' + + data['Image1Path']='' + + data['Remark']='' + } + else if(keyLbl=='CategoryName'){ + console.log('CompanyId:',CompanyId); + loadData(option.value,'SubCategories',CompanyId); + + data['SubCategoryId']=''; + data['SubCategoryName']=''; + data['BrandId']=''; + data['BrandName']=''; + + data['DisplayId']='' + data['DisplayName']='' + + data['Image1Path']='' + + data['Remark']='' + } + else if(keyLbl=='SubCategoryName'){ + console.log('CompanyId:',CompanyId); + loadData(option.value,'Brands',CompanyId); + + data['BrandId']=''; + data['BrandName']=''; + + data['DisplayId']='' + data['DisplayName']='' + + data['Image1Path']='' + + data['Remark']='' + }else if(keyLbl=='BrandName'){ + + // clear brand + + data['DisplayId']='' + data['DisplayName']='' + + data['Image1Path']='' + + data['Remark']='' + + }else if(keyLbl=='DisplayName'){ + + // clear brand + + data['Image1Path']='' + + data['Remark']='' + + } + setrerenderdata(!rerenderdata); + } + + async function loadData(qId,type,CompanyId){ + try { + await db.transaction(async function (txn) { + let q=''; + if(type=='Categories') q=`select distinct CategoryId,CategoryName from Master_Competitor where CompanyId ='${qId}'`; + else if(type=='SubCategories') q=`Select Distinct p.SubCategoryId,p.SubCategoryName from Product_Master p where p.CategoryId='${qId}' and CompanyId ='${CompanyId}' order by p.SubCategorySequence`; + else if(type=='Brands') q=`Select Distinct p.BrandName,p.BrandId from Product_Master p Where p.SubCategoryId='${qId}' and CompanyId ='${CompanyId}' order by p.BrandSequence`; + + await txn.executeSql(q,[],async function (txn2, txnres2) { + if(txnres2.rows.length>0){ + let arr=[]; + for(var i=0;i0 || AddVisIRImages.current.length>0; + if(val==0 && isDataPresent){ + setShowRAllC_M(true); + return ; + } + var val1=val==1?1:0; + if(animatedChoice!=null){ + Animated.timing(animatedChoice, { + toValue: val1, + duration:400, + useNativeDriver:false, + }).start(); + } + // setIsAddVisPresent(val); + // setHasUnsavedChanges(true); + BgIsAddVisPresent(val); + BgUnsavedChanges(true) + if(val==0){ + // setAddVisibility([]); + // setAddVisFormData({}); + BgWindowData([]) + BgAddVisFormData({}) + } + } + + function onConfirmRemoveAll(){ + // Remove all data + if(animatedChoice!=null){ + Animated.timing(animatedChoice, { + toValue: 0, + duration:400, + useNativeDriver:false, + }).start(); + } + // setIsAddVisPresent(0); + // setHasUnsavedChanges(true); + // setAddVisibility([]); + // setAddVisFormData({}); + BgIsAddVisPresent(0); + BgWindowData([]) + BgAddVisFormData({}) + setShowRAllC_M(false); + + let isKPIIREnableI=KPIFields.findIndex(i=>i.KPIFieldName=='KPIIREnable') + let isKPIIREnableObj=isKPIIREnableI>=0?KPIFields[isKPIIREnableI]:{}; + let isKPIIREnable=isKPIIREnableI>=0?isKPIIREnableObj['KPIFieldEnable']:false; + + // if(isKPIIREnable){ + // if(AddVisIRImages.current.length>0){ + // removeIRImage() + // } + // else{ + // // setGbTempSessionId(''); + // GbTempSessionId.current=''; + // } + // } + + BgUnsavedChanges(true) + + } + + async function removeIRImage (){ + for(const IRImageIndex in AddVisIRImages.current){ + let IRImgObj=AddVisIRImages.current[IRImageIndex]; + let Image1=IRImgObj['ImagePath']!=null && IRImgObj['ImagePath']!=''?IRImgObj['ImagePath']:''; + + let obj={"IRImgIndex":IRImageIndex,"IRimgPath":Image1}; + let isRemoved=await DeleteIRPhoto('2',obj); + console.log("IR Image removed:",IRImageIndex,isRemoved); + if(IRImageIndex==AddVisIRImages.current.length-1){ + console.log("do empty Session and images if all removed from IR session"); + // setGbTempSessionId(''); + GbTempSessionId.current=''; + // setAddVisIRImages([]); + AddVisIRImages.current=[]; + } + + } + } + + function onSaveCancel(){ + setShowAlert(false); + } + + async function Add_AddVis(){ + let isValid=await validateForm(); + console.log('isValid add:',isValid); + if(isValid){ + let arr=AddVisibility; + let {Company,CompanyId,CategoryName,CategoryId,SubCategoryName,SubCategoryId,BrandName,BrandId,DisplayName,DisplayId,Remark,Image1,Image1Path}=AddVisFormData; + console.log(AddVisFormData); + // let index=AddVisibility.findIndex(i=> i.CompanyId==CompanyId && i.CategoryId==CategoryId && i.SubCategoryId==SubCategoryId && i.BrandId==BrandId && i.DisplayId==DisplayId); + // if(index>=0){ + // notify('This visibility has already been added','LONG'); + // } + // else{ + arr.push(AddVisFormData); + // setAddVisibility(arr); + // setHasUnsavedChanges(true); + BgWindowData(arr) + BgUnsavedChanges(true) + notify('Visibility added successfully','LONG'); + setrerenderdata(!rerenderdata); + + // clear data + // setAddVisFormData({}); + // setFromDate(''); + BgAddVisFormData({}) + // } + } + + } + + function showRemoveConfirm(item,index){ + setToRemoveId(index); + setToRemoveItem(item); + setshowRemoveConfirm_M(true); + } + + function Remove_AddVis(){ + let index=toRemoveId + let item=toRemoveItem; + let arr=AddVisibility; + console.log('toRemoveId:',index); + if(index>=0 && index + + {RetakeIRPhoto()}}> + + + Retake + + + {DeleteIRPhoto()}}> + + + Delete + + + {closeRetakeOp()}}> + + + Cancel + + + + + + + + ) + } + + function _render_UploadAlert(){ + return ( + + + {setshowUploadAlert(false)}}> + Cancel + + {UploadIRSessions()}}> + Yes + + + + ) + } + + function _renderIRCamera(IRImages,TempSessionId){ + + let isSaveDisabled=(isDataUploaded=='U' || isDataUploaded=='P'); + let isResumeDisabled=(TempSessionId==null || TempSessionId=='' || TempSessionId=='undefined' || isSaveDisabled==true); + + return ( + + + {`Capture ${currentMenu.MenuName} Images`} + + + + { (IRImages!=null && IRImages.length>0) && + IRImages.map((IRImg,IRImgIndex)=>{ + let IRimgPath=IRImg.ImagePath; + return( + {openImageRefView(IRImgIndex)}}> + {(IRimgPath!=null && IRimgPath!='') && } + {(IRimgPath==null || IRimgPath=='') && } + {openRetakeOp(IRImgIndex,IRimgPath)}}> + + + + ); + }) + + } + + + {StartCameraSession()}}> + + Start Session + + {ResumeCameraSession()}} > + + Resume Session + + + + + ) + } + + + + + + function _render_addVisFormTop(){ + let xpos=0; + if(animatedChoice!=null ){ + xpos=animatedChoice.interpolate({ + inputRange:[0,1], + outputRange:[0,-75], + }); + } + + let isKPIIREnableI=KPIFields.findIndex(i=>i.KPIFieldName=='KPIIREnable') + let isKPIIREnableObj=isKPIIREnableI>=0?KPIFields[isKPIIREnableI]:{}; + let isKPIIREnable=isKPIIREnableI>=0?isKPIIREnableObj['KPIFieldEnable']:false; + + let isSaveDisabled=(isDataUploaded=='U' || isDataUploaded=='P'); + + return ( + + + {'Is Present'} + + + + {onChoiceSelect(1,'isPresent')}}> + Yes + + {onChoiceSelect(0,'isPresent')}}> + No + + + + + + + { + isAddVisPresent==1 && (rerenderdata== rerenderdata) && + + + {isKPIIREnable && + _renderIRCamera(AddVisIRImages.current,GbTempSessionId.current) + } + + + + Company + {CustomPicker(props,Companies,'Company','CompanyId','Company','CompanyId',onselectionChange,{value:AddVisFormData.Company,otherData:{}},null,null,false,route)} + + + + + Category + {CustomPicker(props,Categories,'CategoryName','CategoryId','CategoryName','CategoryId',onselectionChange,{value:AddVisFormData.CategoryName,otherData:{'CompanyId':AddVisFormData.CompanyId!=null?AddVisFormData.CompanyId:''}},null,null,false,route)} + + + + + + Sub Category + + {CustomPicker(props,SubCategories,'SubCategoryName','SubCategoryId','SubCategoryName','SubCategoryId',onselectionChange,{value:AddVisFormData.SubCategoryName,otherData:{'CompanyId':AddVisFormData.CompanyId!=null?AddVisFormData.CompanyId:''}},null,null,false,route)} + + + + + Brands + + {CustomPicker(props,Brands,'BrandName','BrandId','BrandName','BrandId',onselectionChange,{value:AddVisFormData.BrandName},null,null,false,route)} + + + + + Display Type + {CustomPicker(props,DisplayList,'DisplayName','DisplayId','DisplayName','DisplayId',onselectionChange,{value:AddVisFormData.DisplayName},null,null,false,route)} + + + + + Remark + {onFormDataChange(val,'Remark','text');}} + /> + + + {!isKPIIREnable && + + + Image + + + { (AddVisFormData.Image1Path=='' || AddVisFormData.Image1Path==null) ? + {openCamera('1')}}> + + : (AddVisFormData.Image1Path!='' && AddVisFormData.Image1Path!=null) ? + {OpenImgModal(AddVisFormData.Image1Path,'1')}}> + + : null + } + + + + + } + + {Add_AddVis()}}> + Add + + + + + + Added Visibilities + + { + AddVisibility.length>0 && + AddVisibility.map((item,index)=>{ + console.log(item); + return ( + + + + + Company : + {item.Company} + + + Category : + {item.CategoryName} + + + Sub Category : + {item.SubCategoryName} + + + Brand : + {item.BrandName} + + + Display Type : + {item.DisplayName} + + + Remark : + {item.Remark} + + + {!isKPIIREnable && + + {/* */} + Image + {(item.Image1Path!=null && item.Image1Path!='') && } + {/* */} + } + {showRemoveConfirm(item,index)}}> + + + + + + + ); + }) + } + + + + } + + ) + } + + function _renderBtns(){ + + let isUploadDisabled=isDataUploaded=='U'; + let isSaveDisabled=(isDataUploaded=='U' || isDataUploaded=='P'); + + let colors1=(isUploadDisabled?[PageTheme.$tertiary_color,PageTheme.$tertiary_color]:[PageTheme.$secondary_color_light,PageTheme.$gradient2, PageTheme.$primary_color]); + let colors2=(isSaveDisabled?[PageTheme.$tertiary_color,PageTheme.$tertiary_color]:[PageTheme.$secondary_color_light,PageTheme.$gradient2, PageTheme.$primary_color]); + + return ( + + {onSubmitData()}} /> + + + ) + } + + function _renderHeader(currentIndex){ + return( + + {`${(currentIndex+1)}/${zoomImageUrl.length}`} + {setShow_zoomImage(false) }}> + + + + ) + } + + return ( + + {processing && } + + {_OpenCaptureImage_Modal()} + {ConfirmSaveAlert(props,showAlert,onSaveCancel,saveData)} + {ConfirmSaveAlert(props,showRemoveConfirm_M,()=>{setshowRemoveConfirm_M(false)},Remove_AddVis,'Do you really want to remove this visibility?')} + {ConfirmSaveAlert(props,showRAllC_M,()=>{setShowRAllC_M(false)},onConfirmRemoveAll,'Do you really want to remove all visibility data?')} + {_render_RetakePopup()} + {_render_UploadAlert()} + {UpdateShowCameraRef(false);getImage(imgData)}} showCamera={showCamera} onHideCamera={()=>{UpdateShowCameraRef(false);}}/> + + + + { Object.keys(storeData).length>0 && + + {_render_addVisFormTop()} + + } + + {_renderBtns()} + + + + {show_zoomImage && + + null} + /> + + } + + ); +} + + + +export default connect(mapStateToProps, mapDispatchToProps)(CompetitionVisibilityIR); \ No newline at end of file diff --git a/PerformicsSrc/src/screens/ContactConversion.js b/PerformicsSrc/src/screens/ContactConversion.js new file mode 100644 index 0000000..9d3d851 --- /dev/null +++ b/PerformicsSrc/src/screens/ContactConversion.js @@ -0,0 +1,493 @@ +import React,{useState,useEffect,useRef} from 'react'; +import Container from '../components/container'; +import { useRoute } from '@react-navigation/native'; +import { globalStyles,customStyles,GetPageTheme } from "../styles/Global"; +import {StatusBar,Image,TextInput,View,Text,ScrollView,TouchableOpacity,Platform,PermissionsAndroid,FlatList, Alert, Animated, AppState} from 'react-native'; +import { ReactReduxContext,connect,useSelector, useDispatch } from 'react-redux'; +import { mapStateToProps,mapDispatchToProps } from '../reducers/contextProvider'; +import SQLite from 'react-native-sqlite-2'; +import {notify} from '../components/notify'; +import moment from 'moment'; +import {getDownloadJson,getKPIFields,marktext1,marktext2,validateNumber} from '../controller/functions'; +import {get_item,set_item,clear_item} from '../components/localStorage'; +import {version,sloganline,appname,testurl,db, colors_Arr, common_ImagePath} from '../constants/constants'; +import CustomHeader from '../components/customHeader'; +import {Card, Menu, Switch} from 'react-native-paper'; +import {AntDesign, Entypo, FontAwesome, MaterialCommunityIcons} from '../components/icons'; +import { stat } from 'react-native-fs'; +import CustomLoader from '../components/CustomLoader'; +import LinearGradient from 'react-native-linear-gradient'; +import { AppTables } from '../constants/tableConstants'; +import { SvgXml } from 'react-native-svg'; +import {launchCamera, launchImageLibrary,CameraOptions} from 'react-native-image-picker'; +import * as RNFS from 'react-native-fs'; +import GradientButton from '../components/gradientButton'; + +import cameraImg from '../assets/performics/camera_front_image.svg' +import addImg from '../assets/performics/add_image.svg'; +import CustomModal from '../components/CustomModal'; +import { Q_getpaidvisibility } from '../constants/ConstantQueries'; +import { Picker } from '@react-native-picker/picker'; +import { ConfirmSaveAlert } from '../components/alert'; +import ModalSelector from 'react-native-modal-selector' + +function ContactConversion(props) { + const route = useRoute(); + const ST=props.StaticText || {}; + // get all theme styles acc to current theme set + const PageTheme=GetPageTheme(props.DarkMode,route.name); + const customStyle=customStyles(props.DarkMode,route.name); + const animatedChoice=useRef(new Animated.Value(0)).current; + + const [processing, setProcessing] = useState(true); + const [loaderTitle, setLoaderTitle] = useState('loading...'); + const [isAdhocScreen, setIsAdhocScreen] = useState(false); + const [storeData, setStoreData] = useState({}); + const [currentMenu, setCurrentMenu] = useState({}); + const [TotalContact, setTotalContact] = useState(''); + const [CustomerConv, setCustomerConv] = useState(''); + const [TotalSampled, setTotalSampled] = useState(''); + + const [TotalMaxValEnable, setTotalMaxValEnable] = useState(false); + const [TotalMaxVal, setTotalMaxVal] = useState(null); + + const [showAlert, setShowAlert] = useState(false); + const [SamplingFlag, setSamplingFlag] = useState(false); + const [showTotalSampled, setShowTotalSampled] = useState(false); + const [hasUnsavedChanges,setHasUnsavedChanges] = useState(false); + const [SamplingData, setSamplingData] = useState({}); + + const hasUnsavedChangesRef = React.useRef(hasUnsavedChanges); + const TotalContactRef=React.useRef(TotalContact); + const CustomerConvRef=React.useRef(CustomerConv); + const TotalSampledRef=React.useRef(TotalSampled); + const StoreIdRef=React.useRef(null); + const ScreenNameRef=React.useRef(''); + + const inputRefs = useRef({}); + const d1=new Date(); + const d2=moment(d1).format('MM/DD/YYYY'); + + + useEffect(() => { + let params=props.route.params? props.route.params:{}; + let storeData1=params.storeData || {}; + let menu1=params.menu || {}; + let SamplingData1=params.SamplingData || {}; + let showTotalSampled1=params.showTotalSampled!=null?params.showTotalSampled:false; + + let isAdhoc=params.isAdhoc || false; + let SamplingFlag1=params.SamplingFlag || false; + + setShowTotalSampled(showTotalSampled1); + setSamplingFlag(SamplingFlag1) + setSamplingData(SamplingData1); + setIsAdhocScreen(isAdhoc); + setStoreData(storeData1); + setCurrentMenu(menu1); + + StoreIdRef.current=storeData1.StoreId + ScreenNameRef.current={BgscreenName:menu1.ScreenName,BgMenuId:menu1.MenuId } + getData(storeData1,SamplingData1,menu1,SamplingFlag1,showTotalSampled1); + + const AppStateSubscription = AppState.addEventListener('change', (pro)=>{ _handleAppStateChange(pro)}); + const unsubscribe=props.navigation.addListener('beforeRemove', onBeforeRemove); + + return function cleanup() { + AppStateSubscription.remove(); + return unsubscribe; + }; + }, []); + const _handleAppStateChange = async (nextAppState) => { + if(nextAppState =='background' && hasUnsavedChangesRef.current==true){ + let newData = { + storeBGData:TotalContactRef.current, + menuName:ScreenNameRef.current && ScreenNameRef.current.BgscreenName, + StoreId1:StoreIdRef.current, + BgCustomerConv1:CustomerConvRef.current, + BgMenuID: ScreenNameRef.current && ScreenNameRef.current.BgMenuId, + BgTotalSampled1:TotalSampledRef.current, + ScreenName:"ContactConversion", + visiteDate:d2 + } + let WindowsStr= JSON.stringify(newData) + await set_item('storeData',WindowsStr); + } + } + + useEffect(() => { + const unsubscribe=props.navigation.addListener('beforeRemove', onBeforeRemove); + return unsubscribe; + }, [hasUnsavedChanges]); + + function onBeforeRemove(e){ + if (hasUnsavedChanges==true) { + e.preventDefault(); // Prevent default behavior of leaving the screen + onRemoveScreen(e); + } + else{ + return; + } + } + + function BgUnsavedChanges(val){ + hasUnsavedChangesRef.current=val + setHasUnsavedChanges(val); + } + + function BgTotalContact(val){ + TotalContactRef.current=val + setTotalContact(val); + } + + function BgCustomerConv(val){ + CustomerConvRef.current=val + setCustomerConv(val); + } + + function BgTotalSampled(val){ + TotalSampledRef.current=val + setTotalSampled(val); + } + + function onRemoveScreen(e){ + Alert.alert( + "", + "Do you really want to exit the screen?", + [ + { + text: "Cancel", + onPress: () => {}, + style: "cancel" + }, + { text: ST.OK, onPress: async () => { + BgUnsavedChanges(false) + await clear_item('storeData') + // setHasUnsavedChanges(false); + props.navigation.dispatch(e.data.action);} } + ] + ); + } + + + async function getData(storeData1,SamplingData1,menu1,SamplingTypeFlag,showTotalSampled1){ + try { + let {StoreId,ChainId,StateId,StoreTypeId}=storeData1; + let {SamplingDefinitionId}=SamplingData1; + let {ScreenName}= menu1 + + let windData = await get_item('storeData') + let isBgDataExists=false; + if(windData!=null && windData!=''){ + let StoreJson = JSON.parse(windData) + let { storeBGData,menuName,StoreId1,BgCustomerConv1,BgMenuID,BgTotalSampled1,visiteDate,ScreenName }= StoreJson + if( menuName == menu1.ScreenName && menu1.MenuId==BgMenuID && StoreId1== StoreId && visiteDate==d2 && ScreenName=="ContactConversion"){ + isBgDataExists=true; + BgUnsavedChanges(true) + if(storeBGData!=null && storeBGData!=''){ + BgTotalContact(storeBGData); + } + + if(BgCustomerConv1!=null && BgCustomerConv1!=''){ + BgCustomerConv(BgCustomerConv1) + } + + if(BgTotalSampled1!=null && BgTotalSampled1!=''){ + BgTotalSampled(BgTotalSampled1) + } + } + } + + let AllKPIFields=await getKPIFields(menu1); + + // set switch camera flag as defined in mapping menu flag (if exists) + let MaxContactI=AllKPIFields.findIndex(i=>i.KPIFieldName=='MaxContact' && i.ScreenName==ScreenName); + let MaxContactObj=MaxContactI>=0?AllKPIFields[MaxContactI]:{}; + let MaxContactEnable=MaxContactI>=0?MaxContactObj['KPIFieldEnable']:false; + let MaxContactVal=MaxContactI>=0?MaxContactObj['KPIFieldDisplayName']:null; + + setTotalMaxValEnable(MaxContactEnable); + setTotalMaxVal(MaxContactVal); + + await db.transaction(async function (txn) { + + let ScreenType = SamplingTypeFlag==true ?"SamplingContactConversion":"Contact" + + let q3=`Select * from ${AppTables.CONTACT_CONVERSION} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' AND SCREEN_TYPE='${ScreenType}' ${ScreenType=='SamplingContactConversion'?` AND SAMPLING_DEFINITION_ID='${SamplingDefinitionId}' `:''} `; + await txn.executeSql(q3,[],async function (txn2, txnres2) { + + if(txnres2.rows.length>0){ + let arr=[]; + let data =txnres2.rows.item(0); + let {TOTAL_CONTACT,CST_CONTACT,TOTAL_SAMPLED}=data; + + if(!isBgDataExists){ + BgCustomerConv(CST_CONTACT) + BgTotalContact(TOTAL_CONTACT) + BgTotalSampled(TOTAL_SAMPLED) + } + + inputRefs.current['input1']=''; + inputRefs.current['input2']=''; + if(showTotalSampled1){ + inputRefs.current['input3']=''; + } + + }else{ + + } + },function (txnE,txnerr) { console.log(txnerr); },); + + setProcessing(false); + + }); + } catch (err) { + console.log(err); + } + } + + + + async function onSubmitData(){ + let isvalid=validate(); + if(isvalid){ + setShowAlert(true); + } + } + + async function saveData(){ + // setHasUnsavedChanges(false); + BgUnsavedChanges(false) + setShowAlert(false); + setLoaderTitle('Saving Data...'); + setProcessing(true); + try { + let {StoreId,ChainId,StateId,StoreTypeId}=storeData; + let {SamplingDefinitionId}=SamplingData; + let ScreenType = SamplingFlag==true ?"SamplingContactConversion":"Contact" + await db.transaction(async function (txn) { + + let q=`DELETE FROM ${AppTables.CONTACT_CONVERSION} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' and SCREEN_TYPE='${ScreenType}' ${ScreenType=='SamplingContactConversion'?` AND SAMPLING_DEFINITION_ID='${SamplingDefinitionId}' `:''}`; + + // remove old data + await txn.executeSql(q,[],async function (txn2, txnres) { + console.log('cc data deleted'); + },function (txnE,txnerr) { console.log(txnerr); },); + + var totalValue = TotalContact; + + if((totalValue=='' || totalValue==null ||totalValue=="[object Object]")){ + totalValue=0; + } + + var values=''; + values+=` ('${StoreId}','${d2}','${totalValue}','${CustomerConv}','${TotalSampled || '0'}','${d2}','${SamplingDefinitionId || ''}','${ScreenType}') `; + + let add_data=`INSERT INTO ${AppTables.CONTACT_CONVERSION} (STORE_ID,VISIT_DATE,TOTAL_CONTACT,CST_CONTACT,TOTAL_SAMPLED,ADDED_DATE,SAMPLING_DEFINITION_ID,SCREEN_TYPE) VALUES ${values} `; + + await txn.executeSql(add_data,[],async function (txn2, txnres) { + console.log('cc added',values); + notify('Contact conversion added successfully','SHORT'); + setProcessing(false); + // clear store data in local storage to avoiding re-set data for the store + await clear_item('storeData') + props.navigation.goBack(); + },function (txnE,txnerr) { console.log(txnerr);setProcessing(false);notify('Cannot add contact conversion') },); + + + }); + } catch (err) { + console.log(err); + } + } + + function validate(){ + let isValid=true; + if(TotalContact!==0 && (TotalContact=='' || TotalContact==null||TotalContact=="[object Object]")){ + isValid=false; + notify('Please enter total contacts for today','SHORT'); + }else if(TotalMaxValEnable && parseInt(TotalContact)>parseInt(TotalMaxVal)){ + isValid=false; + notify(`Total contacts cannot be greater than ${TotalMaxVal}`,'SHORT'); + } + else if(CustomerConv!==0 && ( CustomerConv=='' || CustomerConv==null)){ + isValid=false; + notify('Please enter customer converted for today','SHORT'); + } + else if((CustomerConv!='' && CustomerConv!=null && TotalContact!='' && TotalContact!=null) && (parseInt(CustomerConv)>parseInt(TotalContact))){ + isValid=false; + notify('Customer Converted cannot be greater than Total Contacts','SHORT'); + } + else if(showTotalSampled && TotalSampled!==0 && ( TotalSampled=='' || TotalSampled==null)){ + isValid=false; + notify('Please enter total sampled for today','SHORT'); + } + else if(showTotalSampled && (TotalSampled!='' && TotalSampled!=null && TotalContact!='' && TotalContact!=null) && (parseInt(TotalSampled)>parseInt(TotalContact))){ + isValid=false; + notify('Total Sampled cannot be greater than Total Contacts','SHORT'); + } + + console.log('isValid:',isValid); + return isValid; + } + + + function onSaveCancel(){ + setShowAlert(false); + } + + async function onTotalContactChange(val,type=''){ + if(val!=''){ + let isValid=validateNumber(val,type); + if(!isValid){ + return; + } + } + + // setTotalContact(val); + BgTotalContact(val) + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + } + // if(!isNaN(val)){ + + + + async function focusToNext(type='1'){ + + let activeKey=''; + let arr=Object.keys(inputRefs.current); + + activeKey='input'+type; + + let activeIndex=arr.indexOf(activeKey); + if(activeIndex + {processing && } + + {ConfirmSaveAlert(props,showAlert,onSaveCancel,saveData)} + + + { Object.keys(storeData).length>0 && + + + + + + Total Contacts + {inputRefs.current['input1']=reff;}} + style={customStyle.ccCard_input} + value={(TotalContact+'')} + keyboardType={'number-pad'} + autoComplete='off' + returnKeyType={(Platform.OS==='ios')?'done':'next'} + blurOnSubmit={false} + onSubmitEditing={()=>{focusToNext('1')}} + onEndEditing={(e)=>{console.log('on focus out'); if(CustomerConv!='' && CustomerConv!=null ) validate();}} + onChangeText={(val)=>{onTotalContactChange(val,'numeric');}} + /> + + + {(props.route.params.showTotalSampled || showTotalSampled) && + + + Total Sampled + {inputRefs.current['input2']=reff;}} + style={customStyle.ccCard_input} + value={(TotalSampled+'')} + keyboardType={'number-pad'} + autoComplete='off' + returnKeyType={(Platform.OS==='ios')?'done':'next'} + blurOnSubmit={false} + onSubmitEditing={()=>{focusToNext('2')}} + onEndEditing={(e)=>{if(TotalContact!='' && TotalContact!=null ) validate();}} + onChangeText={(val)=>{ onTotalSampledChange(val,'numeric');}} + /> + + + } + + + Customer Converted + {inputRefs.current['input'+((props.route.params.showTotalSampled || showTotalSampled)?'3':'2')]=reff;}} + style={customStyle.ccCard_input} + value={(CustomerConv+'')} + keyboardType={'number-pad'} + autoComplete='off' + returnKeyType={(Platform.OS==='ios')?'done':'next'} + blurOnSubmit={false} + onSubmitEditing={()=>{focusToNext(((props.route.params.showTotalSampled || showTotalSampled)?'3':'2'))}} + onEndEditing={(e)=>{if(TotalContact!='' && TotalContact!=null ) validate();}} + onChangeText={(val)=>{ onCustomerConvChange(val,'numeric');}} + /> + + + + + + } + + {onSubmitData()}}/> + + + + + + + ); +} + + + +export default connect(mapStateToProps, mapDispatchToProps)(ContactConversion); \ No newline at end of file diff --git a/PerformicsSrc/src/screens/ContactUs.js b/PerformicsSrc/src/screens/ContactUs.js new file mode 100644 index 0000000..a727b76 --- /dev/null +++ b/PerformicsSrc/src/screens/ContactUs.js @@ -0,0 +1,112 @@ +import React, { useState, useEffect } from 'react'; +import Container from '../components/container'; +import { useRoute } from '@react-navigation/native'; +import { globalStyles, customStyles, GetPageTheme } from '../styles/Global'; +import { StatusBar, Image, TextInput, View, Text, ScrollView, TouchableOpacity, Platform, PermissionsAndroid, FlatList, Pressable, Linking, StyleSheet } from 'react-native'; +import { ReactReduxContext, connect, useSelector, useDispatch, } from 'react-redux'; +import { mapStateToProps, mapDispatchToProps } from '../reducers/contextProvider'; +import SQLite from 'react-native-sqlite-2'; +import { notify } from '../components/notify'; +import moment from 'moment'; +import { getDownloadJson, DownloadData } from '../controller/functions'; +import { get_item, set_item, clear_item } from '../components/localStorage'; +import { version, sloganline, appname, testurl, db, } from '../constants/constants'; +import CustomHeader from '../components/customHeader'; +import CustomLoader from '../components/CustomLoader'; +import LinearGradient from 'react-native-linear-gradient'; +import { Entypo, FontAwesome, Fontisto, Foundation, Ionicons, MaterialCommunityIcons } from '../components/icons'; +import NoDataComponent from '../components/NoDataComponent'; +import WebView from 'react-native-webview'; + +function ContactUs(props) { + const route = useRoute(); + + const ST = props.StaticText || {}; + // get all theme styles acc to current theme set + const PageTheme = GetPageTheme(props.DarkMode, route.name); + const customStyle = customStyles(props.DarkMode, route.name); + const globalStyle = globalStyles(props.DarkMode, route.name); + + + + + useEffect(() => { + + }, []); + + + const openEmail = () => { + const subject = encodeURIComponent('Support Request'); + const body = encodeURIComponent('Hello Team,'); + const url = `mailto:cpmindiait@cpmindia.com?subject=${subject}&body=${body}`; + Linking.openURL(url); + }; + + return ( + + + + + + + { + + + {ST.MeetUs} + + + Linking.openURL('tel:01149694969')} + style={({ pressed }) => [ + styles.container, + pressed && styles.pressed, + ]} + > + + 011 4969 4969 + + + + + [ + styles.container, + pressed && styles.pressed, + ]} + > + + cpmindiait@cpmindia.com + + + + + + B-227, Upper Ground Floor, Okhla Industrial Area, Phase 1, New Delhi - 110020 + + + } + + + + + ); +} + +export default connect(mapStateToProps, mapDispatchToProps)(ContactUs); + +const styles = StyleSheet.create({ + container: { + flexDirection: 'row', + alignItems: 'center', + }, + phoneText: { + marginLeft: 8, + color: '#007AFF', // clickable blue + textDecorationLine: 'underline', + }, + pressed: { + opacity: 0.6, + }, +}); + diff --git a/PerformicsSrc/src/screens/ContractForm.js b/PerformicsSrc/src/screens/ContractForm.js new file mode 100644 index 0000000..668aeb4 --- /dev/null +++ b/PerformicsSrc/src/screens/ContractForm.js @@ -0,0 +1,2125 @@ +import React, { useState, useEffect, useRef } from 'react'; +import Container from '../components/container'; +import { useRoute } from '@react-navigation/native'; +import { customStyles, GetPageTheme, STATUSBAR_HEIGHT } from "../styles/Global"; +import { Image, TextInput, View, Text, ScrollView, TouchableOpacity, Platform, FlatList, Alert, Dimensions, Animated, Easing, AppState, Keyboard } from 'react-native'; +import { connect } from 'react-redux'; +import { mapStateToProps, mapDispatchToProps } from '../reducers/contextProvider'; +import { notify } from '../components/notify'; +import moment from 'moment'; +import { UploadData2, getAllFileForAFolder, getAllFolderImages, marktext1, marktext2, resizeImage, restore_ImageWithMetaData, validateNumber } from '../controller/functions'; +import { db, common_ImagePath, ImageFolderPath, ContractFormImagePath } from '../constants/constants'; +import CustomHeader from '../components/customHeader'; +import { AntDesign, Entypo, FontAwesome, FontAwesome5, Fontisto, MaterialCommunityIcons } from '../components/icons'; +import CustomLoader from '../components/CustomLoader'; +import LinearGradient from 'react-native-linear-gradient'; +import { AppTables } from '../constants/tableConstants'; +import * as RNFS from 'react-native-fs'; +import GradientButton from '../components/gradientButton'; +import { ConfirmSaveAlert } from '../components/alert'; +import ModalSelector from 'react-native-modal-selector'; +import MultiSelect from 'react-native-multiple-select'; +import { PageTheme } from '../styles/Themes'; +import DateTimePicker from '@react-native-community/datetimepicker'; +import DraggableFlatList, { ScaleDecorator } from 'react-native-draggable-flatlist' +import AudioRecorderPlayer, { AudioEncoderAndroidType, AudioSourceAndroidType, AVEncoderAudioQualityIOSType, AVEncodingOption, AVModeIOSOption } from 'react-native-audio-recorder-player'; +import CustomCamera from '../components/Camera'; +import { clear_item, get_item, set_item } from '../components/localStorage'; +import { CustomPicker2 } from '../components/CustomPicker'; +import { METHODS, getMethodName } from '../constants/methodNames'; +import { URL_IMAGE } from '../constants/constants'; +import { UploadImagesWithoutWait } from '../constants/uploadData'; +import DateTimePickerModal from "react-native-modal-datetime-picker"; + + +const { height, width } = Dimensions.get('window'); +const topbarht = STATUSBAR_HEIGHT + 50; +const actualWindowHt = parseInt((height - topbarht) + 10); + + +function ContractForm(props) { + const route = useRoute(); + const ST = props.StaticText || {}; + const audioRecorderPlayer = new AudioRecorderPlayer(); + const AudioSet = { + AudioEncoderAndroid: AudioEncoderAndroidType.AAC, + AudioSourceAndroid: AudioSourceAndroidType.MIC, + AVModeIOS: AVModeIOSOption.measurement, + AVEncoderAudioQualityKeyIOS: AVEncoderAudioQualityIOSType.high, + AVNumberOfChannelsKeyIOS: 2, + AVFormatIDKeyIOS: AVEncodingOption.aac, + }; + // get all theme styles acc to current theme set + const PageTheme = GetPageTheme(props.DarkMode, route.name); + const customStyle = customStyles(props.DarkMode, route.name); + + const [processing, setProcessing] = useState(true); + const [loaderTitle, setLoaderTitle] = useState(); + const [showRating, setShowRating] = useState(false); + const [RatingQtn, setRatingQtn] = useState({}); + const [RatingOrder, setRatingOrder] = useState([]); + const [showRecorder, setShowRecorder] = useState(false); + const [VRS, setVRS] = useState({}); + const [RecorderTimer, setRecorderTimer] = useState({}); + const [playerTimer, setPlayerTimer] = useState({}); + const [rerenderView, setRerenderView] = useState(0); + const [hasUnsavedChanges, setHasUnsavedChanges] = useState(false); + const [VoiceRecorderStatus, setVoiceRecorderStatus] = useState(ST.Pressmictostartrecordingvoice); + const [RecFilePath, setRecFilePath] = useState({}); + const [dateValue, setDateValue] = useState(''); + const [storeData, setStoreData] = useState({}); + const [ShowCat, setShowCat] = useState(false); + const [ActiveProgram, setActiveProgram] = useState({}); + const [ActiveCategory, setActiveCategory] = useState({}); + const [rerenderdata, setrerenderdata] = useState(0); + const [SurveySubCats, setSurveySubCats] = useState([]); + const [SurveyQuestions, setSurveyQuestions] = useState([]); + const [QuestionsData, setQuestionsData] = useState({}); + const [showAlert, setShowAlert] = useState(false); + const [showCamera, setShowCamera] = useState(false); + const showCameraRef = useRef(null); + const [getImageProps, setGetImageProps] = useState({}); + const [reasons_list, setReasons_list] = useState([]); + const [IsContractSigned, setIsContractSigned] = useState(0); + const [NoContrRsn, setNoContrRsn] = useState({}); + const animatedChoice = useRef(new Animated.Value(0)).current; + + const inputRefs = useRef({}); + + const animatedRipple = useRef(new Animated.Value(0)).current; + const animatedRipple2 = useRef(new Animated.Value(0.5)).current; + + const hasUnsavedChangesRef = React.useRef(hasUnsavedChanges); + const WindowDataRef = React.useRef(QuestionsData); + + const [selectedDate, setSelectedDate] = useState(moment().startOf('month')); + const [DateValueObj, setDateValueObj] = useState({}); + + + + // error field states + const [errorfield, setErrorField] = useState({}); + const [error, setError] = useState(false); + + const d1 = new Date(); + const d2 = moment(d1).format('MM/DD/YYYY'); + + useEffect(() => { + setLoaderTitle(ST.Loading + '...') + let params = props.route.params ? props.route.params : {}; + let storeData1 = params.storeData || {}; + let programdata = params.program || {}; + + + setStoreData(storeData1); + setActiveProgram(programdata) + + getData(storeData1, programdata); + + const unsubscribe = props.navigation.addListener('beforeRemove', onBeforeRemove); + return (() => { + audioRecorderPlayer.removePlayBackListener(); + audioRecorderPlayer.removeRecordBackListener(); + return unsubscribe; + }); + }, []); + + const [isDatePickerVisible, setDatePickerVisibility] = useState(false); + + const showDatePicker = () => { + setDatePickerVisibility(true); + }; + + const hideDatePicker = () => { + setDatePickerVisibility(false); + }; + + const handleConfirm = (date) => { + console.warn("A date has been picked: ", date); + setTextValue(date, DateValueObj?.qtn) + hideDatePicker(); + }; + + + + // useEffect(() => { + // const unsubscribe=props.navigation.addListener('beforeRemove', onBeforeRemove); + // return unsubscribe; + // }, [showCamera]); + + function onBeforeRemove(e) { + if (showCameraRef.current == true) { + e.preventDefault(); + BgShowCamera(false); + } + else { + if (hasUnsavedChangesRef.current == true) { + e.preventDefault(); // Prevent default behavior of leaving the screen + onRemoveScreen(e); + } + else { + return; + } + } + } + + function BgUnsavedChanges(val) { + hasUnsavedChangesRef.current = val + setHasUnsavedChanges(val); + } + + function BgWindowData(val) { + WindowDataRef.current = val + setQuestionsData(val); + } + + function BgShowCamera(val) { + showCameraRef.current = val + setShowCamera(val); + } + + + + + function onRemoveScreen(e) { + Alert.alert( + "", + ST.Doyoureallywanttoexitthescreen, + [ + { + text: ST.Cancel, + onPress: () => { }, + style: "cancel" + }, + { + text: ST.OK, onPress: async () => { + // setHasUnsavedChanges(false); + BgUnsavedChanges(false) + await clear_item('storeData') + props.navigation.dispatch(e.data.action); + } + } + ] + ); + } + + async function getData(storeData1, program = {}) { + try { + let { StoreId } = storeData1; + let { ProgramId, ProgramDefinitionId } = program; + + await db.transaction(async function (txn) { + + + let q = `select * from Master_NonContractFromReason `; + await txn.executeSql(q, [], async function (txn2, txnres) { + if (txnres.rows.length > 0) { + let arr = []; + for (var i = 0; i < txnres.rows.length; i++) { + let data = txnres.rows.item(i); + arr.push(data); + if (i == txnres.rows.length - 1) { + setReasons_list(arr); + } + } + } + }, function (txnE, txnerr) { console.log(txnerr); },); + + + // get contract data + let q3 = `select * from ${AppTables.CONTRACT_FORM} where PROGRAM_ID=${ProgramId} and PROGRAM_DEFINITION_ID='${ProgramDefinitionId}' and STORE_ID='${StoreId}' `; + + await txn.executeSql(q3, [], async function (txn2, txnres) { + if (txnres.rows.length > 0) { + let data = txnres.rows.item(0); + let { IS_CONTRACT_SIGNED, REASON_ID, REASON } = data; + setIsContractSigned(IS_CONTRACT_SIGNED); + let obj = { "ReasonId": REASON_ID, "Reason": REASON } + setNoContrRsn(obj); + if (IS_CONTRACT_SIGNED != null && animatedChoice != null) { + Animated.timing(animatedChoice, { + toValue: IS_CONTRACT_SIGNED, + duration: 400, + useNativeDriver: false, + }).start(); + } + } + }, function (txnE, txnerr) { console.log(txnerr); },); + + + + // get qtns data + let q2 = `SELECT DISTINCT T.CategoryId,T.Category,T.CategorySequence FROM Master_ContractFormQuestion T `; + + await txn.executeSql(q2, [], async function (txn2, txnres) { + console.log('contract form cat count:', txnres.rows.length); + if (txnres.rows.length > 0) { + let arr = [], allQtns = []; + + for (var i = 0; i < txnres.rows.length; i++) { + let data = txnres.rows.item(i); + let all_scat_qtns = await getSurveyQtns(data, storeData1, program) + console.log('all_scat_qtns:', all_scat_qtns.length) + data['Questions'] = all_scat_qtns; + allQtns = allQtns.concat(all_scat_qtns); + arr.push(data); + if (i == txnres.rows.length - 1) { + setSurveySubCats(arr); + setSurveyQuestions(allQtns); + setProcessing(false); + } + } + } + + }, function (txnE, txnerr) { console.log(txnerr); },); + + }); + } catch (err) { + console.log(err); + } + } + + + async function getSurveyQtns(item, storeData1, program) { + return new Promise((resolve, reject) => { + try { + let { StoreId } = storeData1; + let { ProgramId, ProgramDefinitionId } = program; + let { CategoryId } = item; + + db.transaction(async function (txn) { + + // get inserted audit + let selectlist = ` DISTINCT T.CategoryId,T.Category,T.Question as Question,T.QuestionId as QuestionId,T.QuestionType as QuestionType,T.ShowContractNotSigned,T.QEnable,T.LengthValidation as LengthValidation,T.QuestionImageAllow,T.DateRange as DateRange,T.MaxLength as MaxLength,T.MinLength as MinLength,T.OTP as OTP,T1.ANSWER As Answer, T1.ANSWER_ID as AnswerId,T1.IMAGE_ALLOW1 as ImageAllow1,T1.IMAGE1 as Image1,T1.IMAGE_ALLOW2 as ImageAllow2,T1.IMAGE2 as Image2,T1.MULTI_OPTIONS_IDS as multi_op_ids,T1.IS_DISABLED as isDisabled `; + let join = ` INNER JOIN ${AppTables.CONTRACT_FORM_DATA} T1 on T.CategoryId=T1.CATEGORY_ID and T.QuestionId=T1.QUESTION_ID`; + let q2 = `Select ${selectlist} FROM Master_ContractFormQuestion T ${join} WHERE T1.STORE_ID='${StoreId}' AND T1.VISIT_DATE= '${d2}' AND T1.PROGRAM_ID=${ProgramId} AND PROGRAM_DEFINITION_ID='${ProgramDefinitionId}' AND T1.CATEGORY_ID='${CategoryId}' `; + q2 += ` ORDER BY T.CategorySequence,T.QuestionSequence `; + + // q2=`select * from ${AppTables.CONTRACT_FORM_DATA} `; + console.log("added qtns q:", q2); + await txn.executeSql(q2, [], async function (txn2, txnres) { + console.log('program qtns added:', txnres.rows.length); + if (txnres.rows.length > 0) { + let arr = []; + var QD = QuestionsData; + for (var i = 0; i < txnres.rows.length; i++) { + let data = txnres.rows.item(i); + if (i == 0) { + console.log("added qtns data:", data); + } + + data.QEnable = data.QEnable == 1 || data.QEnable == 'true' ? true : false; + + let answers = []; + let qtn = data; + qtn.isDisabled = qtn.isDisabled == 1 || qtn.isDisabled == '1' ? true : false + + if (qtn.QuestionType == 'Decimal' || qtn.QuestionType == 'Number' || qtn.QuestionType == 'Text') { + inputRefs.current['input1_' + qtn.QuestionId] = ''; + } + + if (data.QuestionType == 'Multi choice list' || data.QuestionType == 'Single choice list' || data.QuestionType == 'Rating') { + let allanswers = await getAnswers(data, storeData1, program, true); + + answers = allanswers.Answers || []; + if (data.QuestionType == 'Rating') { + data.showRating = false; + } + } + else if (data.QuestionType == 'Date') { + data.showDatePicker = false; + } + data.Answers = answers; + + let id_key = qtn.QuestionId + '_AnswerId'; + let ans_key = qtn.QuestionId + '_Answer'; + let multi_key = qtn.QuestionId + '_MultiOption'; + let date_key = qtn.QuestionId + '_Date'; + let img_key = qtn.QuestionId + '_ImagePath1'; + let imgname_key = qtn.QuestionId + '_ImageName1'; + let img_key2 = qtn.QuestionId + '_ImagePath2'; + let imgname_key2 = qtn.QuestionId + '_ImageName2'; + let rating_key = qtn.QuestionId + '_Rating'; + let voiceClip_key = qtn.QuestionId + '_VoiceClip'; + + let showImageTag = (data.QuestionImageAllow == true || data.QuestionImageAllow == 'true' || data.QuestionImageAllow == 1); + let showImageTag2 = false; + + QD[id_key] = data.AnswerId; + QD[ans_key] = data.Answer; + + + let selansid = data.AnswerId; + if (qtn.QuestionType == 'Multi choice list') { + selansid = data.multi_op_ids ? data.multi_op_ids.split(',') : []; + QD[multi_key] = data.multi_op_ids; + } + + if ((qtn.QuestionType == 'Single choice list' || qtn.QuestionType == 'Multi choice list')) { + if (qtn.Answers && qtn.Answers.length > 0) { + for (var k = 0; k < qtn.Answers.length; k++) { + let ansss = qtn.Answers[k]; + let isandImgAl = (ansss.ImageAllow1 == true || ansss.ImageAllow1 == 'true' || ansss.ImageAllow1 == 1); + let isandImgAl2 = (ansss.ImageAllow2 == true || ansss.ImageAllow2 == 'true' || ansss.ImageAllow2 == 1); + if (qtn.QuestionType == 'Single choice list' && (isandImgAl && ansss.AnswerId == selansid)) { + showImageTag = true; + } + else if (qtn.QuestionType == 'Multi choice list' && (isandImgAl && selansid.indexOf(ansss.AnswerId) >= 0)) { + showImageTag = true; + } + + if (qtn.QuestionType == 'Single choice list' && (isandImgAl2 && ansss.AnswerId == selansid)) { + showImageTag2 = true; + } + else if (qtn.QuestionType == 'Multi choice list' && (isandImgAl2 && selansid.indexOf(ansss.AnswerId) >= 0)) { + showImageTag2 = true; + } + + } + } + } + + if (showImageTag) { + let imgPath = data.Image1 != '' ? ((Platform.OS == 'ios' ? 'file://' : '') + `${ContractFormImagePath}` + data.Image1) : ''; + QD[imgname_key] = data.Image1; + QD[img_key] = imgPath; + } + + if (showImageTag2) { + let imgPath = data.Image2 != '' ? ((Platform.OS == 'ios' ? 'file://' : '') + `${ContractFormImagePath}/` + data.Image2) : ''; + QD[imgname_key2] = data.Image2; + QD[img_key2] = imgPath; + } + + if (qtn.QuestionType == 'Audio') { + let voicefile_path = (Platform.OS == 'ios' ? 'file://' : '') + `${ContractFormImagePath}/` + 'Recordings/' + data.Answer; + QD[voiceClip_key] = { 'path': voicefile_path, 'filename': data.Answer }; + } + + if (qtn.QuestionType == 'Date') { + let dayonly = moment().format('DD'); + let actual_date = data.Answer ? data.Answer.split('/') : []; + let month = actual_date[0], year = actual_date[1]; + let fulldate = month + '/' + dayonly + '/' + year; + QD[date_key] = fulldate; + + } + arr.push(data); + if (i == txnres.rows.length - 1) { + resolve(arr); + } + } + } + else { + let selectlist = ` DISTINCT T.CategoryId,T.Category,T.Question as Question,T.QuestionId as QuestionId,T.QuestionType as QuestionType,T.ShowContractNotSigned,T.QEnable,T.LengthValidation as LengthValidation,T.QuestionImageAllow,T.DateRange as DateRange,T.MaxLength as MaxLength,T.MinLength as MinLength,T.OTP as OTP`; + let q = `Select ${selectlist} FROM Master_ContractFormQuestion T WHERE T.CategoryId='${CategoryId}' `; + q += ` ORDER BY T.CategorySequence,T.QuestionSequence `; + + + await txn.executeSql(q, [], async function (txn2, txnres2) { + console.log('program qtns loaded:', txnres2.rows.length) + let arr = []; + if (txnres2.rows.length > 0) { + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + data.QEnable = data.QEnable == 1 || data.QEnable == 'true' ? true : false; + data['isDisabled'] = !data.QEnable; + let answers = []; + if (data.QuestionType == 'Multi choice list' || data.QuestionType == 'Single choice list' || data.QuestionType == 'Rating') { + let allanswers = await getAnswers(data, storeData1, program, false); + answers = allanswers.Answers || []; + if (data.QuestionType == 'Rating') { + data.showRating = false; + } + } + else if (data.QuestionType == 'Date') { + data.showDatePicker = false; + } + + data.Answers = answers; + arr.push(data); + + if (i == txnres2.rows.length - 1) { + resolve(arr); + } + } + } + else { + resolve([]); + } + + }, function (txnE, txnerr) { console.log(txnerr); resolve([]); },); + } + + }, function (txnE, txnerr) { console.log(txnerr); resolve([]); },); + + }); + } catch (err) { + console.log(err); + } + }) + } + + async function getAnswers(qtn, storeData1, program, isInserted) { + let { StoreId } = storeData1; + let { ProgramId } = program; + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + // get inserted audit + let selectlist = ` DISTINCT T.Answer,T.AnswerId,T.ImageAllow1,T.ImageAllow2,T.EnableQuestion,T.DisableQuestion`; + let q2 = `Select ${selectlist} FROM Master_ContractFormQuestion T WHERE T.QuestionId='${qtn.QuestionId}' ORDER BY T.AnswerSequence `; + + await txn.executeSql(q2, [], async function (txn2, txnres) { + if (txnres.rows.length > 0) { + let arr = []; + for (var i = 0; i < txnres.rows.length; i++) { + let data = txnres.rows.item(i); + arr.push(data); + if (i == txnres.rows.length - 1) { + resolve(arr); + } + } + } + else { + resolve([]); + } + }, function (txnE, txnerr) { console.log(txnerr); resolve([]); },); + + }); + }).then((val) => { + return { 'Answers': val, 'Success': true }; + }).catch((err) => { + console.log(err); + return { 'Success': false, 'Error': err } + }); + } + + async function getImage(imgdata) { + setErrorField({}); + setError(false); + let qtn = getImageProps.qtn || ''; + let type = getImageProps.type || '1'; + if (typeof imgdata == 'object' && imgdata.errorCode == 'camera_unavailable') { + notify(ST.Cameraunavailable); + } + else if (typeof imgdata == 'object' && imgdata.uri != null) { + const img = imgdata; + const imgurl = img.uri, imgWidth = img.width, imgHeight = img.ExtendedHeight; + let isImgFromGallery = img.fromGallery != null ? img.fromGallery : false; + let picture_clickedd = isImgFromGallery == true ? img.datetime : new Date(); + + let picture_clicked_time = moment(picture_clickedd).format('MM-DD-YYYY HH:mm:ss') + let picture_clicked_time_for_pic_name = moment(picture_clickedd).format('MMDDYYYY_HHmmss') + + console.log("time", picture_clicked_time); + console.log("time1", picture_clicked_time_for_pic_name); + let calculate_tym_date_for_filename = picture_clicked_time_for_pic_name; + let calculate_tym_date_over_img = picture_clicked_time; + + let filename = storeData.StoreId + '_' + ActiveProgram.ProgramId + '_' + qtn.QuestionId + '_SurveyImg_' + calculate_tym_date_for_filename + '.jpg'; + const mark_text1 = calculate_tym_date_over_img; + const mark_text2 = 'Store Name:' + storeData.StoreName + ' | Store Id:' + storeData.StoreId + ' | Survey Id:' + ActiveProgram.ProgramId + ' | Question Id :' + qtn.QuestionId + ' | Image Type: Contract Form' + ' | Date:' + calculate_tym_date_over_img; + let qd = QuestionsData; + let img_key = type == '1' ? qtn.QuestionId + '_ImagePath1' : qtn.QuestionId + '_ImagePath2'; + let imgname_key = type == '1' ? qtn.QuestionId + '_ImageName1' : qtn.QuestionId + '_ImageName2'; + let id_key = qtn.QuestionId + '_AnswerId'; + let ans_key = qtn.QuestionId + '_Answer'; + qd[imgname_key] = filename; + if (qtn.QuestionType == 'Image') { + qd[id_key] = "0"; + qd[ans_key] = filename; + } + + let imagePath = `${ContractFormImagePath}${filename}`; + RNFS.copyFile(imgurl, imagePath) + .then(async (resn) => { + // render data with clicked image + let uri = 'file://' + imagePath; + console.log('image marker', uri); + qd[img_key] = uri; + BgWindowData(qd) + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + // add metdata then resize image and restored back to the imagePath + let restore_data = { "destFilePath": imagePath, "imgurl": imgurl, imgWidth, imgHeight, mark_text1, mark_text2 } + let is_restored = await restore_ImageWithMetaData(restore_data, imgdata); + console.log("image restored:", is_restored); + }) + .catch(err => { + console.log('ERROR: image file write failed!!!'); + console.log(err.message, err.code); + }); + + } + } + + async function openCamera(qtn, type) { + setGetImageProps({ 'qtn': qtn, 'type': type }); + BgShowCamera(true); + } + + async function disableQtns(sqtns, DQtns, data, isreturn = false) { + console.log('disableQtns'); + if (DQtns.length > 0) { + new Promise.all( + DQtns.map((qid, q_index) => { + let s_qtnindex = sqtns.findIndex(i => i.QuestionId == qid) || {}; + console.log('sqtns qid', qid, s_qtnindex) + let s_qtn = s_qtnindex >= 0 ? sqtns[s_qtnindex] : {}; + if (s_qtnindex >= 0) { + console.log('sqtns not found', s_qtnindex) + s_qtn['isDisabled'] = true + sqtns[s_qtnindex] = s_qtn; + let id_key = s_qtn.QuestionId + '_AnswerId'; + let ans_key = s_qtn.QuestionId + '_Answer'; + data[id_key] = 0; + data[ans_key] = ''; + } + return false + }) + ).then(async (val) => { + setSurveyQuestions(sqtns); + // setQuestionsData(data); + BgWindowData(data) + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + }) + } + } + + async function enableQtns(sqtns, EQtns, DQtns, data) { + console.log('enableQtns'); + new Promise.all( + EQtns.map((qid, q_index) => { + let s_qtnindex = sqtns.findIndex(i => i.QuestionId == qid) || {}; + let s_qtn = s_qtnindex >= 0 ? sqtns[s_qtnindex] : {}; + if (s_qtnindex >= 0) { + s_qtn['isDisabled'] = false + sqtns[s_qtnindex] = s_qtn; + } + return false + }) + ).then(async (val) => { + if (DQtns.length > 0) { + disableQtns(sqtns, DQtns, data) + } + else { + setSurveyQuestions(sqtns); + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + }) + } + + function onselectionChange(option, qtn) { + setErrorField({}); + setError(false); + + let data = QuestionsData; + let id_key = qtn.QuestionId + '_AnswerId'; + let ans_key = qtn.QuestionId + '_Answer'; + data[id_key] = option.value; + data[ans_key] = option.label; + + // setQuestionsData(data); + BgWindowData(data) + + let aq_ans = qtn.Answers != null ? qtn.Answers : []; + let ans_obj = aq_ans.find(i => i.AnswerId == option.value) || {}; + let EQtns = ans_obj.EnableQuestion != null && ans_obj.EnableQuestion != '' ? ans_obj.EnableQuestion.replace(' ', '').split(',') : []; + let DQtns = ans_obj.DisableQuestion != null && ans_obj.DisableQuestion != '' ? ans_obj.DisableQuestion.replace(' ', '').split(',') : []; + + console.log('EQtns:', EQtns, DQtns); + let sqtns = SurveyQuestions + if (EQtns.length > 0) { + enableQtns(sqtns, EQtns, DQtns, data) + } + else if (DQtns.length > 0) { + disableQtns(sqtns, DQtns, data) + } + else { + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + + + + } + + function setTextValue(value, qtn, type = '') { + setErrorField({}); + setError(false); + if (value != '') { + let isValid = validateNumber(value, type); + if (!isValid) { + return; + } + } + + + let id_key = qtn.QuestionId + '_AnswerId'; + let ans_key = qtn.QuestionId + '_Answer'; + + let obj = QuestionsData; + if (qtn.QuestionType == 'Date') { + let date_key = qtn.QuestionId + '_Date'; + let d = value != null ? new Date(value) : new Date(); + let mfdate = moment(d).format('MM/YYYY'); + showQtnDatePicker(qtn, false); + obj[id_key] = 0; + obj[ans_key] = mfdate; + obj[date_key] = moment(d).format('MM/DD/YYYY'); + } + else { + obj[id_key] = 0; + obj[ans_key] = value; + } + console.log(value, obj); + // setQuestionsData(obj); + BgWindowData(obj) + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + + function setRatingValue(data) { + setRatingOrder(data); + } + + + async function setMultiSelectValue(selectedItems = [], qtn) { + console.log('setMultiSelectValue', selectedItems); + let id_key = qtn.QuestionId + '_AnswerId'; + let ans_key = qtn.QuestionId + '_Answer'; + let multi_key = qtn.QuestionId + '_MultiOption'; + let obj = QuestionsData; + obj[id_key] = 0; + obj[multi_key] = selectedItems.join(','); + let anss = []; + selectedItems.map((itemValue) => { + let ans = qtn.Answers.find(c1 => c1.AnswerId == itemValue); + if (ans.Answer) { anss.push(ans.Answer) } + }); + obj[ans_key] = anss.join(','); + console.log('obj:', obj); + // setQuestionsData(obj); + BgWindowData(obj) + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + + + function showQtnDatePicker(qtn, show = false) { + let newqtnIndex = SurveyQuestions.findIndex(q => q.QuestionId == qtn.QuestionId); + console.log('showQtnDatePicker:', newqtnIndex); + if (newqtnIndex >= 0) { + let sq = SurveyQuestions; + let newqtn = sq[newqtnIndex]; + newqtn.showDatePicker = show; + sq[newqtnIndex] = newqtn; + setSurveyQuestions(sq); + setDatePickerVisibility(true) + if (show == true) setrerenderdata(!rerenderdata); + } + } + + function onRatingCancel() { + setShowRating(false); + + } + + function onRatingSave() { + setShowRating(false); + + let qtn = RatingQtn; + let id_key = qtn.QuestionId + '_AnswerId'; + let ans_key = qtn.QuestionId + '_Answer'; + let rating_key = qtn.QuestionId + '_Rating'; + let ids = [], anss = []; + RatingOrder.map((item, index) => { + ids.push(item.AnswerId); + anss.push(item.Answer); + }) + let obj = QuestionsData; + obj[rating_key] = ids.join(','); + obj[id_key] = 0; + obj[ans_key] = anss.join(','); + + console.log(obj); + // setQuestionsData(obj); + BgWindowData(obj) + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + + function onRecordCancel() { + setShowRecorder(false); + } + + async function focusToNext(qtn, type = '1') { + + let activeKey = ''; + let arr = Object.keys(inputRefs.current); + + activeKey = 'input' + type + '_' + qtn.QuestionId; + + let activeIndex = arr.indexOf(activeKey); + if (activeIndex < arr.length - 1) { + let nextKey = arr[++activeIndex] + let nextRef = inputRefs.current[nextKey]; + console.log("nextKey", nextKey, nextRef, inputRefs.current[nextKey]) + nextRef.focus(); + } + else { + return + } + } + + function onRecordSave() { + + let isRecorderPlaying = VRS.RecorderPlayStatus != null && VRS.RecorderPlayStatus == true; + let isPlayerPlaying = VRS.PlayerPlayStatus != null && VRS.PlayerPlayStatus == true; + + if (isRecorderPlaying) { + notify(ST.Pleasestoprecordingfirst); + return; + } + else if (isPlayerPlaying) { + stopPlayer(VRS); + // notify('Please stop playing audio first'); + // return; + } + + setShowRecorder(false); + let qtn = RatingQtn; + let id_key = qtn.QuestionId + '_AnswerId'; + let ans_key = qtn.QuestionId + '_Answer'; + let voiceClip_key = qtn.QuestionId + '_VoiceClip'; + + let obj = QuestionsData; + obj[ans_key] = RecFilePath.filename || ''; + obj[id_key] = 0; + obj[voiceClip_key] = RecFilePath; + + // setQuestionsData(obj); + BgWindowData(obj) + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + + const RippleAnimation = (value, minValue, maxValue, delay) => + Animated.loop( + Animated.sequence([ + Animated.timing(value, { + toValue: maxValue, + duration: 1000, + delay: delay, + useNativeDriver: (Platform.OS == 'ios' ? false : true), + }), + Animated.timing(value, { + toValue: minValue, + duration: 1000, + delay: delay, + useNativeDriver: (Platform.OS == 'ios' ? false : true), + }), + ]), + + ).start(); + + const startRecorder = React.useCallback(async (storeData1, qtn, ActiveProgram1, vrStatus) => { + try { + console.log('startRecorder') + if (audioRecorderPlayer != null) { + + if (vrStatus['RecorderPlayStatus'] == true) { + notify(ST.AlreadyRecording + '...') + return; + } + else if (vrStatus['PlayerPlayStatus'] == true) { + notify(ST.Pleasestopplayerfirst) + return; + } + + stopPlayer(vrStatus); + + let picture_clickedd = new Date(); + let picture_clicked_date = moment(picture_clickedd).format('YYYYMMDD'); + let picture_clicked_time = moment(picture_clickedd).format('HHmmss'); + let commname = storeData1.StoreId + '_' + ActiveProgram1.ProgramId + '_' + qtn.QuestionId + '_SurveyRecording_' + picture_clicked_date + '_' + picture_clicked_time; + let filename = Platform.OS == 'ios' ? commname + '.m4a' : commname + '.mp3'; + + const url = Platform.OS == 'ios' ? `file://${ContractFormImagePath}/` + 'Recordings/' + filename : `${ContractFormImagePath}/` + 'Recordings/' + filename; + const url_dir = `${ContractFormImagePath}/` + 'Recordings/'; + console.log('write file url:', url); + RNFS.mkdir(url_dir).then((res) => { + + RNFS.writeFile(url, '') + .then(async (success) => { + // if(success!=null){ + const path = Platform.select({ + ios: url, + android: url, + }); + + const result = await audioRecorderPlayer.startRecorder(path, AudioSet); + + if (result != null && result != '') { + console.log('start recording now'); + vrStatus['RecorderPlayStatus'] = true; + setVRS(vrStatus); + setRecFilePath({ 'path': url, 'filename': filename }); + // animate + RippleAnimation(animatedRipple, 0, 1, 0); + RippleAnimation(animatedRipple2, 0, 1, 100); + + audioRecorderPlayer.addRecordBackListener((e) => { + let recordsec = e.currentPosition; + let data = { 'recordSecs': recordsec, 'recordTime': audioRecorderPlayer.mmssss(Math.floor(recordsec)) }; + if (vrStatus['RecorderPlayStatus'] == true) { + setRecorderTimer(data); + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setVoiceRecorderStatus(ST.RecordingPressmictostoprecording); + } + + console.log('recordsec:', recordsec); + if (recordsec >= 60 * 1000) { + stopRecorder(vrStatus); + notify(ST.Maximumrecordtimelimitreached, 'LONG'); + } + return; + }); + } + console.log('start recorder:', result); + // } + // else{ + // notify('Something Went Wrong! Cannot open file for recording!'); + // } + + }) + .catch((err) => { + console.log('eerriur1', err.message); + notify(ST.Somethingwentwrong + ' ' + ST.Cannotopenfileforrecording); + }); + }) + .catch((err) => { + console.log('eerriur2', err.message); + notify(ST.Somethingwentwrong + ' ' + ST.Cannotopenfileforrecording); + }); + + } + } + catch (e) { + console.log('error:', e); + } + + }, []); + const stopRecorder = React.useCallback(async (vrStatus) => { + try { + console.log('stopRecorder'); + if (audioRecorderPlayer != null) { + + animatedRipple.setValue(0); + animatedRipple2.setValue(0.5); + const uri = await audioRecorderPlayer.stopRecorder(); + audioRecorderPlayer.removeRecordBackListener(); + + vrStatus['RecorderPlayStatus'] = false; + vrStatus['PlayerPlayStatus'] = false; + setPlayerTimer({}); + setVRS({ ...VRS, vrStatus }); + setVoiceRecorderStatus(ST.Pressmictostartrecordingvoice); + } + } + catch (e) { + console.log('error:', e); + } + + }, []); + + const startPlayer = React.useCallback(async (url, vrStatus1, type = '0') => { + try { + let vrStatus = VRS; + let qtn = RatingQtn; + if (audioRecorderPlayer != null) { + console.log('startPlayer1', url); + if (vrStatus['PlayerPlayStatus'] == true) { + notify(ST.AlreadyPlaying + '...') + return; + } + else if (vrStatus['RecorderPlayStatus'] == true) { + notify(ST.Pleasestoprecordingfirst) + return; + } + else if (url == '' || url == null) { + notify(ST.Filenotfound) + return; + } + + const result = await audioRecorderPlayer.startPlayer(url); + if (result != null) { + vrStatus['PlayerPlayStatus'] = true; + setVRS(vrStatus); + + audioRecorderPlayer.addPlayBackListener((e) => { + let playDuration = audioRecorderPlayer.mmssss(Math.floor(e.duration)); + let vrs = VRS; + let data = { 'playerSecs': e.currentPosition, 'totalDuration': e.duration, 'playDuration': playDuration, 'playTime': audioRecorderPlayer.mmssss(Math.floor(e.currentPosition),) }; + let data2 = { 'playerSecs': '0000', 'totalDuration': e.duration, 'playDuration': playDuration, 'playTime': "00:00:00" }; + if (vrs['PlayerPlayStatus'] == true) { + setPlayerTimer(e.currentPosition < 0 ? data2 : data); + } + if (e.currentPosition < 0) { + return; + } + let wp = e.duration != null ? Math.floor((e.currentPosition / e.duration) * 100) : 0; + console.log('wp:', wp); + if (wp >= 100 || isNaN(wp)) { + stopPlayer(vrs); + } + else if (type == '1' && wp < 1) { + pausePlayer(); + } + setProcessing(false); + return; + }); + } + else { + setProcessing(false); + } + } + } + catch (e) { + console.log('error:', e); + setProcessing(false); + } + + }, []); + + const resumePlayer = React.useCallback(async (url) => { + console.log('resume player') + let vrStatus = VRS; + const res = await audioRecorderPlayer.resumePlayer(); + console.log('res:', res); + if (res == 'No audio playing') { + startPlayer(url, vrStatus); + } + vrStatus['PlayerPlayStatus'] = true; + setVRS({ ...VRS, vrStatus }); + }, []); + + + const pausePlayer = React.useCallback(() => { + console.log('pause player') + let vrStatus = VRS; + audioRecorderPlayer.pausePlayer(); + vrStatus['PlayerPlayStatus'] = false; + setVRS({ ...VRS, vrStatus }); + }, []); + + const stopPlayer = React.useCallback(async (vrStatus) => { + try { + console.log('stop player now'); + + if (audioRecorderPlayer != null) { + const uri = await audioRecorderPlayer.stopPlayer(); + audioRecorderPlayer.removePlayBackListener(); + vrStatus['PlayerPlayStatus'] = false; + setVRS({ ...VRS, vrStatus }); + } + } + catch (e) { + console.log('error:', e); + } + + }, []); + + async function show_recorder(qtn) { + let voiceClip_key = qtn.QuestionId + '_VoiceClip'; + let url = QuestionsData[voiceClip_key] ? QuestionsData[voiceClip_key].path : ''; + setRatingQtn(qtn); + if ((RecorderTimer == null || Object.keys(RecorderTimer).length <= 0) && (playerTimer == null || Object.keys(playerTimer).length <= 0) && url != null && url != '') { + setLoaderTitle(ST.Loading + '...'); + setProcessing(true); + await startPlayer(url, VRS, '1'); + } + setRecFilePath((QuestionsData[voiceClip_key] || {})); + setShowRecorder(true); + } + + async function onSubmitData() { + let isvalid = await validate(); + if (isvalid) { + Keyboard.dismiss(); + setShowAlert(true); + } + } + + function onSaveCancel() { + setShowAlert(false); + } + + async function saveData() { + // setHasUnsavedChanges(false); + BgUnsavedChanges(false) + setShowAlert(false); + setLoaderTitle(ST.SavingData + '...'); + setProcessing(true); + try { + let { StoreId, ChainId, StateId, StoreTypeId } = storeData; + + let isRemoved = await removeOldData(); + + await db.transaction(async function (txn) { + + + var values = ''; + let qtnsToUpload = []; + let { ProgramId, ProgramDefinitionId } = ActiveProgram; + for (var i = 0; i < SurveyQuestions.length; i++) { + + + let qtn = SurveyQuestions[i]; + + let id_key = qtn.QuestionId + '_AnswerId'; + let ans_key = qtn.QuestionId + '_Answer'; + let multi_key = qtn.QuestionId + '_MultiOption'; + let date_key = qtn.QuestionId + '_Date'; + let img_key1 = qtn.QuestionId + '_ImagePath1'; + let imgname_key1 = qtn.QuestionId + '_ImageName1'; + let img_key2 = qtn.QuestionId + '_ImagePath2'; + let imgname_key2 = qtn.QuestionId + '_ImageName2'; + let rating_key = qtn.QuestionId + '_Rating'; + let voiceClip_key = qtn.QuestionId + '_VoiceClip'; + + let { CategoryId, Category, ShowContractNotSigned, DateRange, LengthValidation, MaxLength, MinLength, OTP, Question, QuestionId, QuestionImageAllow, QuestionType } = qtn; + + let selansid = QuestionsData[id_key] || 0; + let selans = QuestionsData[ans_key] || ''; + let imgName1 = QuestionsData[imgname_key1] || ''; + let imgName2 = QuestionsData[imgname_key2] || ''; + let multiops = QuestionsData[multi_key] || ''; + let isQtnDisabled = qtn.isDisabled != null && qtn.isDisabled != '' ? qtn.isDisabled ? 1 : 0 : 0; + let allanss = qtn.Answers || {}; + let ans_obj = allanss.find(i => i.AnswerId == selansid) + let imgallow1 = ans_obj != null && ans_obj['ImageAllow1'] != null ? ans_obj.ImageAllow1 : false; + let imgallow2 = ans_obj != null && ans_obj['ImageAllow2'] != null ? ans_obj.ImageAllow2 : false; + let f_imgalloq1 = (QuestionImageAllow == 'true' || QuestionImageAllow == 1) || (imgallow1 == 'true' || imgallow1 == 1) + + + let showQtn = (IsContractSigned || (IsContractSigned != '1' && ShowContractNotSigned == '1')) + if (showQtn) { + values += values != '' ? ' , ' : ''; + values += ` ('${StoreId}','${d2}','${ProgramDefinitionId}','${ProgramId}','${CategoryId}','${Question}','${QuestionId}','${QuestionType}','${selans}','${selansid}','${f_imgalloq1}','${(imgName1 || '')}','${imgallow2}','${(imgName2 || '')}','${multiops}','${isQtnDisabled}','${d2}') `; + + + let ReasonId = IsContractSigned == 1 ? (NoContrRsn.ReasonId != null ? NoContrRsn.ReasonId : '0') : '0'; + let Reason = IsContractSigned == 1 ? (NoContrRsn.Reason != null ? NoContrRsn.Reason : '') : ''; + + let dataToUpload = {} + dataToUpload['UserId'] = props.UserId; + dataToUpload['Store_Id'] = StoreId; + dataToUpload['ProgramDefinitionId'] = ProgramDefinitionId; + dataToUpload['ProgramId'] = ProgramId; + dataToUpload['CategoryId'] = CategoryId; + dataToUpload['QuestionId'] = QuestionId; + dataToUpload['QuestionType'] = QuestionType; + dataToUpload['Answer'] = selans; + dataToUpload['AnswerId'] = selansid; + dataToUpload['MultiAnswerId'] = multiops != null && multiops != 'undefined' ? multiops : ''; + dataToUpload['AnswerImage1'] = (imgName1 || ''); + dataToUpload['AnswerImage2'] = (imgName2 || ''); + dataToUpload['VisitDate'] = d2; + + qtnsToUpload.push(dataToUpload); + } + } + + + // let ReasonId=IsContractSigned==1?(NoContrRsn.ReasonId!=null?NoContrRsn.ReasonId:''):''; + // let Reason=IsContractSigned==1?(NoContrRsn.Reason!=null?NoContrRsn.Reason:''):''; + + let ReasonId = IsContractSigned != 1 ? (NoContrRsn.ReasonId != null ? NoContrRsn.ReasonId : '') : ''; + let Reason = IsContractSigned != 1 ? (NoContrRsn.Reason != null ? NoContrRsn.Reason : '') : ''; + + let UploadData = {} + UploadData['UserId'] = props.UserId; + UploadData['Store_Id'] = StoreId; + UploadData['ProgramDefinitionId'] = ProgramDefinitionId; + UploadData['ProgramId'] = ProgramId; + UploadData['IsContractSigned'] = IsContractSigned; + UploadData['ReasonId'] = ReasonId != '' ? ReasonId : '0'; + UploadData['Reason'] = Reason; + UploadData['ContractQtns'] = qtnsToUpload; + UploadData['VisitDate'] = d2; + + + let hdrValues = `('${StoreId}','${d2}','${ProgramDefinitionId}','${ProgramId}','${IsContractSigned}','${ReasonId}','${Reason}','${d2}') `; + + let add_hdr_data = `INSERT INTO ${AppTables.CONTRACT_FORM} (STORE_ID,VISIT_DATE,PROGRAM_DEFINITION_ID,PROGRAM_ID,IS_CONTRACT_SIGNED,REASON_ID,REASON,ADDED_DATE) VALUES ${hdrValues} `; + let add_data = `INSERT INTO ${AppTables.CONTRACT_FORM_DATA} (STORE_ID,VISIT_DATE,PROGRAM_DEFINITION_ID,PROGRAM_ID,CATEGORY_ID,QUESTION,QUESTION_ID,QUESTION_TYPE,ANSWER,ANSWER_ID,IMAGE_ALLOW1,IMAGE1,IMAGE_ALLOW2,IMAGE2,MULTI_OPTIONS_IDS,IS_DISABLED,ADDED_DATE) VALUES ${values} `; + + // console.log("hdrValues:",hdrValues); + // console.log("values:",values); + await txn.executeSql(add_hdr_data, [], async function (txn2, txnres) { + await txn.executeSql(add_data, [], async function (txn2, txnres) { + console.log('surveys added'); + BgUnsavedChanges(false); + notify('Contract form successfully updated!', 'SHORT'); + setLoaderTitle("Uploading Data...") + UploadContractForm(UploadData); + }, function (txnE, txnerr) { console.log(txnerr); setProcessing(false); notify('Cannot update contract form!') },); + }, function (txnE, txnerr) { console.log(txnerr); setProcessing(false); notify("Cannot update contract form!") },); + + + }); + } catch (err) { + console.log(err); + } + } + + async function removeOldData() { + let { StoreId, ChainId, StateId, StoreTypeId } = storeData; + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + // remove old data + let q = `DELETE FROM ${AppTables.CONTRACT_FORM} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' and PROGRAM_ID='${ActiveProgram.ProgramId}' `; + await txn.executeSql(q, [], async function (txn2, txnres) { + console.log('contract from hdr data deleted'); + let q2 = `DELETE FROM ${AppTables.CONTRACT_FORM_DATA} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' and PROGRAM_ID='${ActiveProgram.ProgramId}' `; + await txn.executeSql(q2, [], async function (txn2, txnres) { + console.log('contract form data deleted'); + resolve(true); + }, function (txnE, txnerr) { console.log(txnerr); resolve(false); },); + }, function (txnE, txnerr) { console.log(txnerr); resolve(false); },); + + }); + }).catch((err) => { + console.log(err); + return false; + }) + + } + + async function UploadContractForm(UploadData) { + const url = props.baseurl + getMethodName(METHODS.UPLOADJSON_METHOD); + + let postData = { + "MID": 0, + "Keys": "ContractForm", + "JsonData": JSON.stringify(UploadData), + "UserId": props.UserId, + }; + + let allFilesToUpload = getAllFileForAFolder(ContractFormImagePath, "ContractFormImages"); + console.log("url:", url); + console.log("postData:", postData); + + await UploadData2(url, postData) + .then(async (res) => { + console.log('res:', res); + if (res.UploadJsonResult != null && res.UploadJsonResult == 'Success') { + const url2 = (props.imageUploadUrl || URL_IMAGE) + getMethodName(METHODS.UPLOADIMAGES_METHOD); + let allImageUploaded = true; + if (allFilesToUpload.length > 0) { + allImageUploaded = await uploadContractFormFiles(allFilesToUpload); + } + if (allImageUploaded == true) { + console.log('all Visitor image uploaded'); + let isupdated = await updateCFStatus(); + if (isupdated == true) { + setProcessing(false); + notify("Contract form uploaded!"); + props.navigation.goBack(); + } + else { + setProcessing(false); + notify("Cannot update contract form status"); + } + } + else { + setProcessing(false); + notify("Cannot upload contract form images and files!"); + } + + } else { + setProcessing(false); + notify(ST.Cannotuploadvisitordata); + } + }) + .catch((err) => { + console.log(err); + setProcessing(false); + notify(ST.Cannotuploadvisitordata); + }); + + } + + async function uploadContractFormFiles(allfiles = []) { + let d1 = new Date(); + let d2 = moment(d1).format('MM/DD/YYYY'); + let uploadCount = 0; + const url = (props.imageUploadUrl || URL_IMAGE) + getMethodName(METHODS.UPLOADIMAGES_METHOD); + + var isAllUploaded = false; + return await Promise.all( + allfiles.map(async (file, i) => { + let index = i; + let actualfilepath = 'file://' + file.uri; + let isExists = await RNFS.exists(actualfilepath).then((res) => { return res; }); + console.log('isExists file', isExists, file.uri); + let isImageUploaded = false; + if (isExists == false) { + + let postData = new FormData(); + postData.append('file', { + uri: actualfilepath, + // type: mime?.getType(actualfilepath) || file.type, + type: file.type, + name: file.name, + }); + + postData.append('Foldername', file.folderName); + postData.append('Path', d2); + + isImageUploaded = await UploadImagesWithoutWait(postData, url); + if (isImageUploaded == true) { + console.log('isExists file uploaded', isExists, uploadCount, index, allfiles.length - 1); + await RNFS.unlink(actualfilepath); + uploadCount++; + // UpdateUploadCountLocal(uploadCount); + if (uploadCount == allfiles.length) { + isAllUploaded = true; + } + + } else { + console.log('file not uploaded:', isExists, actualfilepath); + } + + } + else {//file does not exists + uploadCount++; + if (uploadCount == allfiles.length) { + isAllUploaded = true; + } + } + + return isImageUploaded; + }) + ).then((val) => { + console.log(val); + return isAllUploaded; + }) + .catch((err) => { + console.log(err); + return false; + }) + } + + async function updateCFStatus() { + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + + let q = `Update Mapping_ContractForm SET ContractFormStatus='1' WHERE ProgramId='${ActiveProgram.ProgramId}' and ProgramDefinitionId='${ActiveProgram.ProgramDefinitionId}' and StoreId='${storeData.StoreId}'`; + await txn.executeSql(q, [], async function (txn2, txnres) { + console.log('CF status Updated to 1'); + resolve(true); + }, function (txnE, txnerr) { console.log(txnerr); resolve(false); },); + + }); + }).then((val) => { + return val; + }).catch((err) => { + console.log(err); + return false; + }); + } + + + async function validate() { + + var isvalid = true; + const QD = QuestionsData; + console.log(SurveyQuestions.length); + + function showError(obj, isErr) { + setErrorField(obj); + setError(isErr); + } + + let errorobj = {}; + if (IsContractSigned != '1' && (NoContrRsn.ReasonId == null || NoContrRsn.ReasonId == "")) { + errorobj['EF_NExistReason'] = "NExistReason"; + showError(errorobj, true); + isvalid = false; + notify("Please select reason for not signing the contract", 'SHORT'); + } + else { + for (var i = 0; i < SurveyQuestions.length; i++) { + let qtn = SurveyQuestions[i]; + let selansid = '', selanswer = '', selimg = '', showImageTag = false, showImageTag2 = false; + let id_key = qtn.QuestionId + '_AnswerId'; + let ans_key = qtn.QuestionId + '_Answer'; + let multi_key = qtn.QuestionId + '_MultiOption'; + let date_key = qtn.QuestionId + '_Date'; + let img_key = qtn.QuestionId + '_ImagePath1'; + let imgname_key = qtn.QuestionId + '_ImageName1'; + let img_key2 = qtn.QuestionId + '_ImagePath2'; + let imgname_key2 = qtn.QuestionId + '_ImageName2'; + let rating_key = qtn.QuestionId + '_Rating'; + let voiceClip_key = qtn.QuestionId + '_VoiceClip'; + let list_mcdata = []; + + let isDisabled = qtn.isDisabled != null ? qtn.isDisabled : false + let showqtn = ((IsContractSigned) || (IsContractSigned != '1' && qtn.ShowContractNotSigned == '1')) ? true : false; + + let isLengthValidationReq = false; + let LengthValidation = qtn.LengthValidation == 'true' || qtn.LengthValidation == 1 ? true : false; + let minL = qtn.MinLength != null && qtn.MinLength != '' ? qtn.MinLength : 0; + let maxL = qtn.MaxLength != null && qtn.MaxLength != '' ? qtn.MaxLength : 10; + let ansVal = QD[ans_key]; + + // LengthValidation is required for number type input only + if (qtn.QuestionType == 'Number') { + isLengthValidationReq = LengthValidation; + } + errorobj['EF_qtn'] = qtn; + + console.log("isDisabled in validate:", isDisabled, showqtn, qtn.QuestionType, qtn.QuestionId, qtn.ShowContractNotSigned) + if (isDisabled == false && showqtn == true) { + let isImgAllowed = (qtn.QuestionImageAllow == true || qtn.QuestionImageAllow == 'true' || qtn.QuestionImageAllow == 1); + let checkForAnsKey = (qtn.QuestionType == 'Decimal' || qtn.QuestionType == 'Number' || qtn.QuestionType == 'Text' || qtn.QuestionType == 'Date' || qtn.QuestionType == 'Rating'); + if (qtn.QuestionType == 'Single choice list') { + selansid = QD[id_key]; + } + else if (qtn.QuestionType == 'Multi choice list') { + selansid = QD[multi_key] != null && QD[multi_key] != '' ? QD[multi_key].split(',') : []; + } + + + if (qtn.QuestionType == 'Multi choice list' && selansid.length <= 0) { + errorobj['EF_Qtn_MultiChoice'] = 'Qtn_MultiChoice'; + showError(errorobj, true); + isvalid = false; + notify(ST.Pleaseselectoptionsfortherequiredfield, 'SHORT'); + break; + } + else if (checkForAnsKey && (Object.keys(QD).indexOf(ans_key) < 0 || (Object.keys(QD).indexOf(ans_key) >= 0 && QD[ans_key] === ''))) { + errorobj['EF_Qtn_Input'] = 'Qtn_Input'; + showError(errorobj, true); + isvalid = false; + let msg = (qtn.QuestionType == 'Date' ? ST.Pleasepickadate : (qtn.QuestionType == 'Rating' ? ST.Pleaseselectrating : ST.Pleasefillalldetails)); + notify(msg, 'SHORT'); + break; + } + else if (qtn.QuestionType == 'Audio' && (Object.keys(QD).indexOf(voiceClip_key) < 0 || (Object.keys(QD).indexOf(voiceClip_key) >= 0 && (QD[voiceClip_key] == null || QD[voiceClip_key].filename == null || QD[voiceClip_key].filename == '')))) { + errorobj['EF_Qtn_Input'] = 'Qtn_Input'; + showError(errorobj, true); + isvalid = false; + notify(ST.Pleaserecordaudioclipfortherequiredfield, 'SHORT'); + break; + } + else if (qtn.QuestionType == 'Image' && (Object.keys(QD).indexOf(img_key) < 0 || (Object.keys(QD).indexOf(img_key) >= 0 && QD[img_key] === ''))) { + errorobj['EF_Qtn_Image'] = 'Qtn_Image'; + showError(errorobj, true); + isvalid = false; + notify(ST.Pleaseaddimages, 'SHORT'); + break; + } + else if (Object.keys(QD).indexOf(id_key) < 0 || (Object.keys(QD).indexOf(id_key) >= 0 && (QD[id_key] === ''))) { + errorobj['EF_Qtn_Input'] = 'Qtn_Input'; + showError(errorobj, true); + isvalid = false; + notify(ST.Pleasefillalldetails, 'SHORT'); + console.log(QD[id_key], QD, id_key) + break; + } + else if (isImgAllowed && (Object.keys(QD).indexOf(img_key) < 0 || (Object.keys(QD).indexOf(img_key) >= 0 && QD[img_key] === ''))) { + errorobj['EF_Qtn_Image'] = 'Qtn_Image'; + showError(errorobj, true); + isvalid = false; + notify(ST.Pleaseaddimages, 'SHORT'); + break; + } else if (isLengthValidationReq && ansVal.length < minL) { + errorobj['EF_Qtn_Input'] = 'Qtn_Input'; + showError(errorobj, true); + isvalid = false; + notify("Minimum digits allowed is " + minL, 'SHORT'); + break; + } else if (isLengthValidationReq && ansVal.length > maxL) { + errorobj['EF_Qtn_Input'] = 'Qtn_Input'; + showError(errorobj, true); + isvalid = false; + notify("Maximum digits allowed is " + maxL, 'SHORT'); + break; + } else { + console.log('no condition found'); + } + + if ((qtn.QuestionType == 'Single choice list' || qtn.QuestionType == 'Multi choice list')) { + if (qtn.Answers && qtn.Answers.length > 0) { + for (var j = 0; j < qtn.Answers.length; j++) { + let ansss = qtn.Answers[j]; + let isandImgAl = (ansss.ImageAllow1 == true || ansss.ImageAllow1 == 'true' || ansss.ImageAllow1 == 1); + if (qtn.QuestionType == 'Single choice list' && (isandImgAl && ansss.AnswerId == selansid)) { + showImageTag = true; + } + else if (qtn.QuestionType == 'Multi choice list' && (isandImgAl && selansid.indexOf(ansss.AnswerId) >= 0)) { + showImageTag = true; + } + + let isandImgAl2 = (ansss.ImageAllow2 == true || ansss.ImageAllow2 == 'true' || ansss.ImageAllow2 == 1); + if (qtn.QuestionType == 'Single choice list' && (isandImgAl2 && ansss.AnswerId == selansid)) { + showImageTag2 = true; + } + else if (qtn.QuestionType == 'Multi choice list' && (isandImgAl2 && selansid.indexOf(ansss.AnswerId) >= 0)) { + showImageTag2 = true; + } + } + } + } + + console.log("showImageTag in validate:", QD[img_key], img_key) + if (showImageTag && (Object.keys(QD).indexOf(img_key) < 0 || (Object.keys(QD).indexOf(img_key) >= 0 && QD[img_key] === ''))) { + errorobj['EF_Qtn_Image'] = 'Qtn_Image'; + showError(errorobj, true); + isvalid = false; + notify(ST.Pleaseaddimages, 'SHORT'); + break; + } + + if (showImageTag2 && (Object.keys(QD).indexOf(img_key2) < 0 || (Object.keys(QD).indexOf(img_key2) >= 0 && QD[img_key2] === ''))) { + errorobj['EF_Qtn_Image2'] = 'Qtn_Image2'; + showError(errorobj, true); + isvalid = false; + notify(ST.Pleaseaddimages, 'SHORT'); + break; + } + + } + } + } + + return isvalid; + } + + function onselectionChange3(option, keyLbl, keyVal) { + setErrorField({}); + setError(false); + let allData = NoContrRsn; + allData[keyVal] = option.value; + allData[keyLbl] = option.label; + setNoContrRsn(allData); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + + function onChoiceSelect(val) { + // let isDataPresent=AddVisibility.length>0 || AddVisIRImages.current.length>0; + // if(val==0 && isDataPresent){ + // setShowRAllC_M(true); + // return ; + // } + var val1 = val == 1 ? 1 : 0; + if (animatedChoice != null) { + Animated.timing(animatedChoice, { + toValue: val1, + duration: 400, + useNativeDriver: false, + }).start(); + } + + setIsContractSigned(val); + BgUnsavedChanges(true); + if (val == 0) { + + } + } + + + function render_Picker(label_key, value_key, onChange = () => { }, selected_data = {}) { + var data = []; + let qtn = selected_data.qtn || {}; + let EStyle_Qtn_Input = selected_data.EStyle_Qtn_Input || {}; + let isQtnDisabled = qtn.isDisabled != null && qtn.isDisabled != '' ? qtn.isDisabled : false; + let allAnswers = qtn.Answers || []; + + allAnswers.map((item, index) => { + let obj = { key: index, label: item[label_key], value: item[value_key] }; + if (selected_data.value == item[label_key]) + obj['component'] = {item[label_key]}; + data.push(obj); + }); + + return ( + { onChange(option, qtn) }} + overlayStyle={customStyle.addVisPickerOverlay} + cancelContainerStyle={customStyle.addVisPicker_OptionContainerStyle} + optionStyle={customStyle.addvis_opStyle} + optionTextStyle={customStyle.addvis_opTextStyle} + optionContainerStyle={customStyle.addVisPicker_OptionContainerStyle} + selectedKey={'1'} + disabled={isQtnDisabled} + cancelText={ST.Cancel} + > + {(selected_data.value != null && selected_data.value != '' ? selected_data.value : '-select-')} + + ) + } + + const setDatePickerValue = (qtn, selanswer) => { + let qtnn = qtn; + let DateRange = qtn.DateRange; + let maxDate = moment().add(10, 'years').format('MM/DD/YYYY'); + let minDate = moment().subtract(10, 'years').format('MM/DD/YYYY'); + if (DateRange == 'RFD') { + maxDate = moment().format('MM/DD/YYYY'); + } + else if (DateRange == 'RPD') { + minDate = moment().format('MM/DD/YYYY'); + } + + setDateValueObj({ minDate, maxDate, selanswer, qtn }) + } + + + function renderDatePicker(qtn) { + let qtnn = qtn; + let DateRange = qtn.DateRange; + let maxDate = moment().add(10, 'years').format('MM/DD/YYYY'); + let minDate = moment().subtract(10, 'years').format('MM/DD/YYYY'); + if (DateRange == 'RFD') { + maxDate = moment().format('MM/DD/YYYY'); + } + else if (DateRange == 'RPD') { + minDate = moment().format('MM/DD/YYYY'); + } + + // return ( + // {setTextValue(selectedDate,qtnn)}} + // maximumDate={new Date(maxDate)} + // minimumDate={new Date(minDate)} + // /> + // ); + } + + function renderItem({ item, drag, isActive }) { + return ( + + + {item.Answer} + + + ); + }; + + function renderRatingView() { + let qtn = RatingQtn; + let Answers = qtn.Answers; + let id_key = qtn.QuestionId + '_AnswerId'; + let ans_key = qtn.QuestionId + '_Answer'; + let rating_key = qtn.QuestionId + '_Rating'; + + let newarr = RatingOrder; + if (RatingOrder.length <= 0) { + newarr = Answers; + } + + return ( + + + {ST.DragItemsInOrder} + {ST.Pressandholdtodrag} + { setRatingValue(data) }} + keyExtractor={(item) => item.AnswerId} + renderItem={renderItem} + /> + + { onRatingCancel() }}> + {ST.Cancel} + + { onRatingSave() }}> + {ST.Save} + + + + + ) + } + + function renderRecorderView() { + + let qtn = RatingQtn; + let isRecorderPlaying = VRS.RecorderPlayStatus != null && VRS.RecorderPlayStatus == true; + let isPlayerPlaying = VRS.PlayerPlayStatus != null && VRS.PlayerPlayStatus == true; + const scale = animatedRipple.interpolate({ + inputRange: [0, 1], + outputRange: [1, 1.3], + }); + + const borderColor = animatedRipple.interpolate({ + inputRange: [0, 1], + outputRange: ['#f5acb4c2', '#fce6e9e3'], + }); + + const scale2 = animatedRipple2.interpolate({ + inputRange: [0, 1], + outputRange: [1, 1.5], + }); + + const borderColor2 = animatedRipple2.interpolate({ + inputRange: [0, 1], + outputRange: ['#f5acb4c2', '#fce6e9e3'], + }); + + let totalDuration = RecorderTimer.recordSecs != null ? RecorderTimer.recordSecs : playerTimer.totalDuration; + let wp = totalDuration != null ? Math.floor((playerTimer.playerSecs / totalDuration) * 100) : 0; + let width1 = wp <= 100 ? (wp > 0 ? wp + '%' : '0%') : '100%'; + if (isNaN(wp)) width1 = '0%'; + + return ( + + {rerenderView == rerenderView && + + {ST.RecordVoiceClip} + {ST.Youcanrecordmaxfor60secs} + {VoiceRecorderStatus} + + + + + + { startRecorder(storeData, qtn, ActiveProgram, VRS); }}> + + + {isRecorderPlaying && + { stopRecorder(VRS); }}> + + + } + + + + {RecorderTimer.recordTime} + { + (!isRecorderPlaying && RecFilePath.filename != null && RecFilePath.filename != '') && + + + + + + + {`${(playerTimer.playTime || '00:00:00')} / ${playerTimer.playDuration || RecorderTimer.recordTime}`} + + + + { let url = (Platform.OS == 'ios' ? 'file://' : '') + `${ContractFormImagePath}/` + 'Recordings/' + RecFilePath.filename; (wp < 100 && wp > 0) ? resumePlayer(url) : startPlayer(url, VRS); }}> + + + {isPlayerPlaying && { wp < 100 ? pausePlayer() : stopPlayer(VRS); }}> + + } + + + } + + + + { onRecordCancel() }}> + {ST.Cancel} + + { onRecordSave() }}> + {ST.Save} + + + } + + ) + } + + function _renderSurveyQtns(subcat) { + const SurveyQuestions = subcat.Questions; + return ( + + { + SurveyQuestions.length > 0 && + SurveyQuestions.map((item, index) => { + + let qtn = item; + let selansid = '', selanswer = '', selimg = '', selimg2 = '', showImageTag = false, showImageTag2 = false; + let id_key = qtn.QuestionId + '_AnswerId'; + let ans_key = qtn.QuestionId + '_Answer'; + let multi_key = qtn.QuestionId + '_MultiOption'; + let date_key = qtn.QuestionId + '_Date'; + let img_key = qtn.QuestionId + '_ImagePath1'; + let imgname_key = qtn.QuestionId + '_ImageName1'; + let img_key2 = qtn.QuestionId + '_ImagePath2'; + let imgname_key2 = qtn.QuestionId + '_ImageName2'; + let rating_key = qtn.QuestionId + '_Rating'; + let voiceClip_key = qtn.QuestionId + '_VoiceClip'; + let list_mcdata = []; + + if (qtn.QuestionType == 'Single choice list') { + selansid = QuestionsData[id_key] != null ? QuestionsData[id_key] : ''; + selanswer = QuestionsData[ans_key] != null ? QuestionsData[ans_key] : ''; + } + else if (qtn.QuestionType == 'Multi choice list') { + + if (qtn.Answers != null) { + console.log('qtn.Answers:', qtn.Answers.length); + for (var i = 0; i < qtn.Answers.length; i++) { + let obj = { 'AnswerId': parseInt(qtn.Answers[i].AnswerId), 'Answer': qtn.Answers[i].Answer }; + list_mcdata.push(obj); + } + } + selansid = QuestionsData[multi_key] != null && QuestionsData[multi_key] != '' ? QuestionsData[multi_key].split(',') : []; + if (selansid != null && selansid.length > 0) { + let arr = []; + for (var i = 0; i < selansid.length; i++) { + arr.push(parseInt(selansid[i])); + } + selansid = arr; + } + } + else if (qtn.QuestionType == 'Number' || qtn.QuestionType == 'Text' || qtn.QuestionType == 'Decimal' || qtn.QuestionType == 'Date') { + selansid = QuestionsData[ans_key]; + selanswer = (qtn.QuestionType == 'Date') ? (QuestionsData[date_key] || moment().format('MM/DD/YYYY')) : ''; + showImageTag = (qtn.QuestionImageAllow == true || qtn.QuestionImageAllow == 'true' || qtn.QuestionImageAllow == 1); + showImageTag2 = false; + } + else if (qtn.QuestionType == 'Rating') { + selanswer = QuestionsData[ans_key] ? QuestionsData[ans_key] : ''; + } + else if (qtn.QuestionType == 'Audio') { + selansid = QuestionsData[ans_key] ? QuestionsData[ans_key] : ''; + selanswer = QuestionsData[voiceClip_key] ? (QuestionsData[voiceClip_key].filename || '') : ''; + } + else if (qtn.QuestionType == 'Image') { + showImageTag = true; + } + + + if ((qtn.QuestionType == 'Single choice list' || qtn.QuestionType == 'Multi choice list')) { + if (qtn.Answers && qtn.Answers.length > 0) { + for (var i = 0; i < qtn.Answers.length; i++) { + let ansss = qtn.Answers[i]; + + let isandImgAl = (ansss.ImageAllow1 == true || ansss.ImageAllow1 == 'true' || ansss.ImageAllow1 == 1); + let isandImgAl2 = (ansss.ImageAllow2 == true || ansss.ImageAllow2 == 'true' || ansss.ImageAllow2 == 1); + + if (qtn.QuestionType == 'Single choice list' && (isandImgAl && ansss.AnswerId == selansid)) { + showImageTag = true; + } + else if (qtn.QuestionType == 'Multi choice list' && (isandImgAl && selansid.indexOf(ansss.AnswerId) >= 0)) { + showImageTag = true; + } + + if (qtn.QuestionType == 'Single choice list' && (isandImgAl2 && ansss.AnswerId == selansid)) { + showImageTag2 = true; + } + else if (qtn.QuestionType == 'Multi choice list' && (isandImgAl2 && selansid.indexOf(ansss.AnswerId) >= 0)) { + showImageTag2 = true; + } + } + } + } + + if (showImageTag) { + selimg = QuestionsData[img_key] != null && QuestionsData[img_key] != '' ? 'file://' + QuestionsData[img_key] : ''; + } + + if (showImageTag2) { + selimg2 = QuestionsData[img_key2] != null && QuestionsData[img_key2] != '' ? 'file://' + QuestionsData[img_key2] : ''; + } + + let showQtn = ((IsContractSigned == 1) || (IsContractSigned != '1' && qtn.ShowContractNotSigned == '1')) + let isDisabled = qtn.isDisabled != null ? qtn.isDisabled : false + + + let EF_qtn = errorfield.EF_qtn != null ? errorfield.EF_qtn : {}; + let showQtnErrHere = EF_qtn.QuestionId == qtn.QuestionId; + + let EF_Qtn_MultiChoice = errorfield.EF_Qtn_MultiChoice || ''; + let EStyle_Qtn_MultiChoice = showQtnErrHere && EF_Qtn_MultiChoice == 'Qtn_MultiChoice' ? customStyle.stk_MultiSSTyle_error : customStyle.wind_MultiSearchInputStyle; + + + let EF_Qtn_Input = errorfield.EF_Qtn_Input || ''; + let EStyle_Qtn_Input = showQtnErrHere && EF_Qtn_Input == 'Qtn_Input' ? customStyle.stk_inptSTyle_error : {}; + + let EF_Qtn_Image = errorfield.EF_Qtn_Image || ''; + let EStyle_Qtn_Image = showQtnErrHere && EF_Qtn_Image == 'Qtn_Image' ? customStyle.stk_inptSTyle_error : {}; + + let EF_Qtn_Image2 = errorfield.EF_Qtn_Image2 || ''; + let EStyle_Qtn_Image2 = showQtnErrHere && EF_Qtn_Image2 == 'Qtn_Image2' ? customStyle.stk_inptSTyle_error : {}; + + + + if (isDisabled == true || showQtn == false) { + return ( + + ) + } + else { + return ( + + {qtn.Question} + {qtn.QuestionType == 'Single choice list' && qtn.Answers && + render_Picker('Answer', 'AnswerId', onselectionChange, { value: selanswer, qtn: qtn, EStyle_Qtn_Input }) + } + {qtn.QuestionType == 'Multi choice list' && qtn.Answers && + { console.log('onSelectedItemsChange'); setMultiSelectValue(selectedItems, qtn) }} + selectedItems={selansid} + selectText="Pick Items" + searchInputPlaceholderText="Search Items..." + // onChangeInput={ (text)=> console.log(text)} + tagRemoveIconColor={PageTheme.$primary_color} + tagBorderColor={PageTheme.$primary_color} + tagTextColor={PageTheme.$primary_color} + selectedItemTextColor={PageTheme.$primary_color} + selectedItemIconColor={PageTheme.$primary_color} + tagContainerStyle={{ height: 30, width: '100%', paddingVertical: 5 }} + styleTextTag={{ fontSize: 14 }} + itemTextColor={PageTheme.$text_color} + displayKey="Answer" + searchInputStyle={EStyle_Qtn_MultiChoice} + submitButtonColor={PageTheme.$primary_color} + submitButtonText="Submit" + /> + } + {(qtn.QuestionType == 'Number' || qtn.QuestionType == 'Decimal' || qtn.QuestionType == 'Text') && + { inputRefs.current['input1_' + qtn.QuestionId] = reff; }} + style={[customStyle.surveyQtn_InputStyle, EStyle_Qtn_Input]} + placeholder="" + autoComplete='off' + placeholderTextColor={PageTheme.$placeholder_color} + // keyboardType={'ascii-capable'} + returnKeyType={(Platform.OS === 'ios') ? 'done' : 'next'} + blurOnSubmit={false} + keyboardType={(qtn.QuestionType == 'Decimal' ? 'decimal-pad' : (qtn.QuestionType == 'Text' ? 'default' : 'number-pad'))} + value={selansid} + onSubmitEditing={() => { focusToNext(qtn, '1') }} + onChangeText={(val) => { setTextValue(val, qtn, (qtn.QuestionType == 'Decimal' ? 'decimal' : (qtn.QuestionType == 'Text' ? 'text' : 'numeric'))) }} + /> + } + { + (qtn.QuestionType == 'Date') && + + {selansid != '' ? selansid : 'MM/YYYY'} + { setDateValue(selanswer); showQtnDatePicker(qtn, true); setDatePickerValue(qtn, selanswer) }}> + + + + } + {((qtn.showDatePicker == true || qtn.showDatePicker == 'true') && (qtn.QuestionType == 'Date')) && + renderDatePicker(qtn) + } + { + (qtn.QuestionType == 'Rating') && + + {selanswer} + { setRatingQtn(qtn); setShowRating(true); }}> + + + + } + + { + (qtn.QuestionType == 'Audio') && + + {selanswer} + { show_recorder(qtn); }}> + + + + } + + { + showImageTag && + + + { openCamera(qtn, '1') }}> + + + + } + + { + showImageTag2 && + + + { openCamera(qtn, '2') }}> + + + + } + + ) + } + + }) + } + + + ); + } + + + + function _renderSurveyView() { + var xpos = IsContractSigned == '1' || IsContractSigned == 1 ? -75 : 0; + if (animatedChoice != null) { + xpos = animatedChoice.interpolate({ + inputRange: [0, 1], + outputRange: [0, -75], + }); + } + + // this will show error field in red (if window is present and exist reason is enabled and not filled ) or (if window is not present and Not exist reason is enabled and not filled ) + let EF_NExistReason = errorfield.EF_NExistReason || ''; + let EStyle_NExistReason = EF_NExistReason == 'NExistReason' ? customStyle.stk_inptSTyle_error : {}; + + + return ( + + + + {"Contract Signed?"} + + + + { onChoiceSelect(1) }}> + {ST.Yes} + + { onChoiceSelect(0) }}> + {ST.No} + + + + + {IsContractSigned != '1' && rerenderdata == rerenderdata && + + {ST.SelectReason} + + {} + + + } + { { + let subcat = item, s_index = index; + + return ( + + + {subcat.Category} + + {_renderSurveyQtns(subcat)} + + ) + }} + /> + } + + + + ); + } + + + + return ( + + {processing && } + + {ConfirmSaveAlert(props, showAlert, onSaveCancel, saveData)} + + { BgShowCamera(false); getImage(imgData) }} showCamera={showCamera} onHideCamera={() => { BgShowCamera(false); }} /> + + + + {/* + + {`Program : ${ActiveProgram.ProgramName} `} + + */} + + {`Program : ${ActiveProgram.ProgramName} `} + + {Object.keys(ActiveProgram).length > 0 && rerenderdata == rerenderdata && + _renderSurveyView() + } + + { onSubmitData() }} /> + + + + {showRating == true && + renderRatingView() + } + {showRecorder == true && + renderRecorderView() + } + + ); +} + + +export default connect(mapStateToProps, mapDispatchToProps)(ContractForm); \ No newline at end of file diff --git a/PerformicsSrc/src/screens/ContractFormStores.js b/PerformicsSrc/src/screens/ContractFormStores.js new file mode 100644 index 0000000..ca49253 --- /dev/null +++ b/PerformicsSrc/src/screens/ContractFormStores.js @@ -0,0 +1,292 @@ +import React,{useState,useEffect, memo, useRef} from 'react'; +import Container from '../components/container'; +import { useRoute } from '@react-navigation/native'; +import { globalStyles,customStyles,GetPageTheme } from "../styles/Global"; +import {StatusBar,Image,TextInput,View,Text,ScrollView,TouchableOpacity,TouchableHighlight,Platform,PermissionsAndroid,FlatList, DeviceEventEmitter} from 'react-native'; +import { ReactReduxContext,connect,useSelector, useDispatch } from 'react-redux'; +import { mapStateToProps,mapDispatchToProps } from '../reducers/contextProvider'; +import {notify} from '../components/notify'; +import moment from 'moment'; +import {db,} from '../constants/constants'; +import CustomHeader from '../components/customHeader'; +import {AntDesign, } from '../components/icons'; +import CustomLoader from '../components/CustomLoader'; +import LinearGradient from 'react-native-linear-gradient'; +import NoDataComponent from '../components/NoDataComponent'; +import { _checkLocationPermission } from '../components/geolocation'; +import { Q_getContractFormStoresList, } from '../constants/ConstantQueries'; +import DownloadDataModal from '../components/downloadDataModal'; + +const StoreItem=memo((props)=>{ + const route = useRoute(); + const PageTheme=GetPageTheme(props.DarkMode,route.name); + const customStyle=customStyles(props.DarkMode,route.name); + const item=props.item; + + const ST=props.StaticText || {}; + + async function go_to_programs(data){ + props.navigation.navigate("ContractPrograms",{storeData:data}); + } + + return( + {go_to_programs(item)}}> + + + + {item.StoreName} + + + + + + {ST.StoreId+':'} + {item.StoreId} + + + {ST.StoreType+':'} + {item.StoreType} + + + + + {'Store Category:'} + {item.StoreCategory} + + + + + {ST.StoreCode+':'} + {item.StoreCode} + + + {item.DistributorName!=null && item.DistributorId!=null && item.DistributorName!='' && item.DistributorId!='' && + + + {'Distributor:'} + {item.DistributorName} + + + } + + + {ST.Address+':'} + {item.Address} + + + {((item.LastVisitDate!=null && item.LastVisitDate!='' && item.LastVisitDate!='undefined') || (item.Score!=null && item.Score!='' && item.Score!='undefined')) && + + {(item.LastVisitDate!=null && item.LastVisitDate!='' && item.LastVisitDate!='undefined') && + + {'Last Visit Date:'} + {item.LastVisitDate} + } + {(item.Score!=null && item.Score!='' && item.Score!='undefined') && + + {'Last Visit Score:'} + {item.Score} + } + + } + {(item.MTDMerchandised!=null && item.MTDMerchandised!='' && item.MTDMerchandised!='undefined') && + + + {'MTD Merchandised Count:'} + {item.MTDMerchandised} + + + } + + + + ); +}); + +function ContractFormStores(props) { + const route = useRoute(); + + const ST=props.StaticText || {}; + + // get all theme styles acc to current theme set + const PageTheme=GetPageTheme(props.DarkMode,route.name); + const customStyle=customStyles(props.DarkMode,route.name); + const [loaderTitle, setLoaderTitle] = useState(); + const [processing, setProcessing] = useState((props.isDataDownloaded?true:false)); + const [isAdhocScreen, setIsAdhocScreen] = useState(false); + const [isBeatPlan, setIsBeatPlan] = useState(false); + const [isNonMerchan, setIsNonMerchan] = useState(false); + + const [isNonProg, setIsNonProg] = useState(false); + + const [nodataFound, setNodataFound] = useState(false); + const [showStoreVisitModal, setShowStoreVisitModal] = useState(false); + const [showGeoTagModal, setShowGeoTagModal] = useState(false); + const [showDistanceModal, setShowDistanceModal] = useState(false); + const [currentStore, setCurrentStore] = useState({}); + const [storeDistance, setStoreDistance] = useState('0 M'); + const [storeDistanceinM, setStoreDistanceinM] = useState(0); + const [showAlert, setShowAlert] = useState(false); + const [checkOutStore,setCheckOutStore]=useState({}); + const [rerenderdata, setrerenderdata]= useState(false); + let [state, setState] = useState({storeList:[]}); + const [globalStorelist, setGlobalStorelist] = useState([]); + const [cancelCheckOutStore,setCancelCheckOutStore]=useState({}); + const [showCancelCIModal, setShowCancelCIModal]= useState(false); + const [searchedItem, setSearchedItem]= useState(''); + + + const [CheckOutImage, setCheckOutImage] = useState(''); + const [CheckOutImagePath, setCheckOutImagePath] = useState(''); + const [CheckOutImageModal, setCheckOutImageModal] = useState(false); + const [CheckOutLoc, setCheckOutLoc] = useState({}); + const [showImageSaveOp, setShowImageSaveOp] = useState(true); + const [showCamera, setShowCamera] = useState(false); + const [GeoFenceEnable_Checkout, setGeoFenceEnable_Checkout] = useState(false); + const [GeoFenceRadius_Checkout, setGeoFenceRadius_Checkout] = useState(''); + + const [uploadedCount, setUploadedCount] = useState(0); + const [TotalUpCount, setTotalUpCount] = useState(0); + const [startUploading, setStartUploading] = useState(false); + const [UploadingSubText, setUploadingSubText] = useState(""); + const [UploadingText, setUploadingText] = useState("Uploading Data..."); + const [showProgresssBar, setshowProgresssBar] = useState(false); + + + const d1=new Date(); + const d2=moment(d1).format('MM/DD/YYYY'); + + + useEffect(() => { + setLoaderTitle(ST.Loading+'...'); + + console.log('props.isDataDownloaded in storelist:',props.isDataDownloaded); + getData(); + + const unsubscribeFocus=props.navigation.addListener('focus', () => { + getData(); + }); + + return function cleanup() { + return unsubscribeFocus; + }; + }, []); + + + + + async function getData(){ + let q=await Q_getContractFormStoresList(props); + console.log('contractFormsStoresq:',q); + + await db.transaction(async function (txn) { + await txn.executeSql(q,[],async function (txn2, txnres2) { + console.log("contract stores :",txnres2.rows.length); + if(txnres2.rows.length>0){ + // show from local + var storeArr=[]; + for(var i=0;i{ + let {StoreName,StoreId,StoreCode}=item; + StoreId=StoreId+''; + if(StoreName.toLowerCase().includes(searchedQry) || StoreCode.toLowerCase().includes(searchedQry) || StoreId.includes(searchedQry)){ + arr.push(item); + } + }); + } + else{ + arr=globalStorelist; + } + setState({storeList:arr}); + setrerenderdata(!rerenderdata) + } + + + + + return ( + + {processing && } + {(startUploading) && } + + + + + { !props.isDataDownloaded && } + + + + + {setSearchedItem(val); FilterStores(val)}} + /> + {FilterStores(searchedItem)}}> + + + + + { nodataFound && + + {ST.NoDataAvailable} + + } + { (props.isDataDownloaded==true && !nodataFound) && + + { + return( + + ); + }} + /> + + } + + + + + + + + ); + } + + + +export default connect(mapStateToProps, mapDispatchToProps)(ContractFormStores); \ No newline at end of file diff --git a/PerformicsSrc/src/screens/ContractPrograms.js b/PerformicsSrc/src/screens/ContractPrograms.js new file mode 100644 index 0000000..586e790 --- /dev/null +++ b/PerformicsSrc/src/screens/ContractPrograms.js @@ -0,0 +1,244 @@ +import React,{useState,useEffect} from 'react'; +import Container from '../components/container'; +import { useRoute } from '@react-navigation/native'; +import { globalStyles,customStyles,GetPageTheme } from "../styles/Global"; +import {StatusBar,Image,TextInput,View,Text,ScrollView,TouchableOpacity,Platform,PermissionsAndroid,FlatList, Alert} from 'react-native'; +import { ReactReduxContext,connect,useSelector, useDispatch } from 'react-redux'; +import { mapStateToProps,mapDispatchToProps } from '../reducers/contextProvider'; +import SQLite from 'react-native-sqlite-2'; +import {notify} from '../components/notify'; +import moment from 'moment'; +import {db, colors_Arr, HierarchyTbls} from '../constants/constants'; +import CustomHeader from '../components/customHeader'; +import {AntDesign, FontAwesome} from '../components/icons'; +import CustomLoader from '../components/CustomLoader'; +import LinearGradient from 'react-native-linear-gradient'; +import { Q_getContractFormPrograms} from '../constants/ConstantQueries'; + +function ContractPrograms(props) { + const route = useRoute(); + const ST=props.StaticText || {}; + // get all theme styles acc to current theme set + const PageTheme=GetPageTheme(props.DarkMode,route.name); + const customStyle=customStyles(props.DarkMode,route.name); + + + const [processing, setProcessing] = useState(true); + const [loaderTitle, setLoaderTitle] = useState(); + const [storeData, setStoreData] = useState({}); + const [dailyMenu, setDailyMenu] = useState([]); + const [refreshMenuRender, setRefreshMenuRender] = useState(0); + const [isLoaded, setIsLoaded] = useState(false); + const [showAlert, setShowAlert] = useState(false); + + + useEffect(() => { + setLoaderTitle(ST.Loading+'...') + let params=props.route.params? props.route.params:{}; + let storeData1=params.storeData || {}; + + setStoreData(storeData1); + + getData(storeData1); + const willFocusSubscription = props.navigation.addListener('focus', () => { + getData(storeData1); + }); + + return willFocusSubscription; + }, []); + + + async function getData(storeData1){ + setProcessing(true); + + try { + let d1=new Date(); + let d2=moment(d1).format('MM/DD/YYYY'); + let {StoreId}=storeData1; + + let q=await Q_getContractFormPrograms(storeData1); + + await db.transaction(async function (txn) { + await txn.executeSql(q,[],async function (txn2, txnres) { + console.log('contract programs count:',txnres.rows.length); + if(txnres.rows.length>0){ + let arr=[]; + for(var i=0;i + // {RowContent[0]} + // + // ) + // } + + + // function _renderRightMenuItem(item,index,RowContent){ + // return( + // + // {RowContent[0]} + // {_renderMenuItem(item,index)} + // + // ) + + // } + + function _renderMenuItem(item,index){ + // let newi=index>2?((index%3)):index; + // let firstitem=(index%2==0)?true:false; + // let arr=colors_Arr[newi]?colors_Arr[newi].bg:colors_Arr["0"].bg; + // let unavlbl_bg=['#bfbfbf','#bfbfbf']; + // let arr_new=item.isAvlbl==false?unavlbl_bg:arr; + // let iconColor=colors_Arr[newi]?colors_Arr[newi].color:colors_Arr["0"].color; + // const imgPath='';//item.MenuPath+(item.isAvlbl==false?item.GreyIcon:item.NormalIcon); + + // let m_bgimage=colors_Arr[newi]?colors_Arr[newi].bgImage:colors_Arr["0"].bgImage; + // m_bgimage=item.isAvlbl==false?grey_bg_image:m_bgimage; + + + // return( + // {goto_ContractForm(item)}}> + // + // + // + // + // + // + // + // {(imgPath!=null && imgPath!='') && } + // + + // {item.ProgramName} + // {item.isKPI_Done==true && + // + // } + // + // + // ) + return ( + + + {goto_ContractForm(item)}}> + + {item.ProgramName} + + {(item.isDone!=null && item.isDone==true) && } + {((item.isDone==null || item.isDone==false) && item.IsDataExists!=null && item.IsDataExists=='1') && } + + + + + ) + } + + + function _renderDailyMenu(){ + var RowContent=[]; + return( + <> + {refreshMenuRender==refreshMenuRender && dailyMenu.length>0 && + dailyMenu.map((item,index)=>{ + // let firstitem=(index%2==0)?true:false; + + // if(firstitem){ + // var content=_renderMenuItem(item,index); + // RowContent=[content]; + // if(index==dailyMenu.length-1){ + // return _renderLeftMenuItem(index,RowContent); + // } + // } + // else{ + // return _renderRightMenuItem(item,index,RowContent); + // } + return _renderMenuItem(item,index); + + }) + } + + + ); + } + + return ( + + {processing && } + + + + + { Object.keys(storeData).length>0 && + + + + + + + {storeData.StoreName} + + {storeData.StoreType} + + + + + + + {ST.StoreId+':'} + {storeData.StoreId} + + + {ST.StoreCode+':'} + {storeData.StoreCode} + + + + + + + {_renderDailyMenu()} + + } + + + + ); + } + + + +export default connect(mapStateToProps, mapDispatchToProps)(ContractPrograms); \ No newline at end of file diff --git a/PerformicsSrc/src/screens/DBNonWorkingReasons.js b/PerformicsSrc/src/screens/DBNonWorkingReasons.js new file mode 100644 index 0000000..04a1265 --- /dev/null +++ b/PerformicsSrc/src/screens/DBNonWorkingReasons.js @@ -0,0 +1,665 @@ +import React, { useState, useEffect } from 'react'; +import Container from '../components/container'; +import { useRoute } from '@react-navigation/native'; +import { customStyles, GetPageTheme } from "../styles/Global"; +import { Image, View, Text, ScrollView, TouchableOpacity, FlatList } from 'react-native'; +import { connect } from 'react-redux'; +import { mapStateToProps, mapDispatchToProps } from '../reducers/contextProvider'; +import { notify } from '../components/notify'; +import moment from 'moment'; +import { marktext1, marktext2, resizeImage, restore_ImageWithMetaData, UpdateDistributorStatus, UpdateStoreStatus, UploadData, UploadData2, UploadFormData } from '../controller/functions'; +import { get_item, set_item, clear_item } from '../components/localStorage'; +import { AppVersion, db, URL_IMAGE, version } from '../constants/constants'; +import CustomHeader from '../components/customHeader'; +import { AntDesign, Entypo, MaterialCommunityIcons, } from '../components/icons'; +import CustomLoader from '../components/CustomLoader'; +import LinearGradient from 'react-native-linear-gradient'; +import NoDataComponent from '../components/NoDataComponent'; +import CustomModal from '../components/CustomModal'; +import GradientButton from '../components/gradientButton'; +import * as RNFS from 'react-native-fs'; +import Geolocation from 'react-native-geolocation-service'; +import { _checkLocationPermission } from '../components/geolocation'; +import CustomCamera from '../components/Camera'; + +import CameraImg2 from '../assets/performics/camera_icon.svg'; +import CameraImg3 from '../assets/performics/camera_tick.svg'; +import { getFolderName, getMethodName, METHODS } from '../constants/methodNames'; +import { AppTables } from '../constants/tableConstants'; +import { uploadDBStatus, uploadStoreStatus } from '../constants/uploadData'; + + +function DBNonWorkingReasons(props) { + const route = useRoute(); + const ST = props.StaticText || {}; + // get all theme styles acc to current theme set + const PageTheme = GetPageTheme(props.DarkMode, route.name); + const customStyle = customStyles(props.DarkMode, route.name); + const [processing, setProcessing] = useState((props.isDataDownloaded ? true : false)); + + const [storeData, setStoreData] = useState({}); + const [nonWorkingRsns, setNonWorkingRsns] = useState([]); + const [selectedReason, setSelectedReason] = useState({}); + const [reason, setReason] = useState(''); + const [reasonId, setReasonId] = useState(''); + const [Image1, setImage1] = useState(''); + const [Image1Path, setImage1Path] = useState(''); + const [showModal, setShowModal] = useState(false); + const [showImageSaveOp, setShowImageSaveOp] = useState(true); + const [rerenderdata, setrerenderdata] = useState(0); + const [location, setLocation] = useState({}); + const [loaderTitle, setLoaderTitle] = useState(); + const [isAdhocScreen, setIsAdhocScreen] = useState(false); + const [isBeatPlan, setIsBeatPlan] = useState(false); + const [isAnyStoreUploaded, setIsAnyStoreUploaded] = useState(false); + + const [showCamera, setShowCamera] = useState(false); + const [getImageProps, setGetImageProps] = useState({}); + + useEffect(() => { + setLoaderTitle(ST.Loading + '...') + getNonWorkingRsns(); + getData(); + + const unsubscribe = props.navigation.addListener('beforeRemove', onBeforeRemove); + + return function cleanup() { + return unsubscribe; + }; + }, []); + + useEffect(() => { + const unsubscribe = props.navigation.addListener('beforeRemove', onBeforeRemove); + return unsubscribe; + }, [showCamera]); + + function onBeforeRemove(e) { + if (showCamera == true) { + e.preventDefault(); + setShowCamera(false); + } + else { + return; + } + } + + + + async function getNonWorkingRsns() { + let d1 = new Date(); + let d2 = moment(d1).format('MM/DD/YYYY'); + + // set store type: adhoc or planned + let params = props.route.params ? props.route.params : {}; + + + + let token = await get_item('loginToken'); + let loginInfo = await get_item('loginInfo'); + const loginDetails = JSON.parse(loginInfo); + let storeData1 = params.storeData || {}; + setStoreData(storeData1); + + // let q=`SELECT * FROM Non_Working_ReasonDistributor WHERE EntryAllow=1`; + let q = `SELECT * FROM Non_Working_ReasonDistributor`; + + await db.transaction(async function (txn) { + + await txn.executeSql(q, [], async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + // show from local + var storeArr = []; + for (var i = 0; i < txnres2.rows.length; i++) { + let sdata = txnres2.rows.item(i); + storeArr.push(sdata); + if (i == (txnres2.rows.length - 1)) { + console.log(storeArr); + setNonWorkingRsns(storeArr); + setProcessing(false); + } + } + } + else { + setProcessing(false); + notify(ST.Nodatafound); + } + }, function (Etxn, txnerr) { console.log(txnerr); }); + }); + } + + async function getData() { + let isAny = await checkIfAlreadyUploaded(); + setIsAnyStoreUploaded(isAny); + } + + async function checkIfAlreadyUploaded() { + let d1 = new Date(); + let d2 = moment(d1).format('MM/DD/YYYY'); + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + + let q = `Select t1.* from Master_Distributor t1 where t1.UploadStatus!='N' and t1.UploadStatus!='' ` + + await txn.executeSql(q, [], async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + // show from local + resolve(true); + } + else { + resolve(false); + } + }, function (Etxn, txnerr) { console.log(txnerr); resolve(false); }); + + }); + + }).then((val) => { + return val; + }).catch((err) => { + return false; + }); + } + + async function _getCurrentLocation() { + + const hasPermission = await _checkLocationPermission(); + if (hasPermission == true) { + setProcessing(true); + Geolocation.getCurrentPosition( + async (position) => { + let loc = { lat: position.coords.latitude, lng: position.coords.longitude }; + setLocation(loc); + // let UploadStatus = selectedReason.EntryAllow == 'true' || selectedReason.EntryAllow == true ? 'L' : 'U'; + + let ImageAllow = (selectedReason.ImageAllow == 'true' || selectedReason.ImageAllow == true || selectedReason.ImageAllow == 1); + let UploadStatus = ImageAllow ? 'L' : 'U'; + if (ImageAllow) { + // if (selectedReason.ImageAllow == 'true' || selectedReason.ImageAllow == true) { + await uploadNonWRsnWithImage(loc, UploadStatus); + } + else { + await uploadNonWRsn(loc, UploadStatus); + } + }, + (error) => { + notify(ST.Cannotgetuserposition); + setProcessing(false); + }, + { enableHighAccuracy: true, distanceFilter: 0, interval: 1000, fastestInterval: 2000 } + ); + } + else { + notify(ST.Pleaseallowlocationpermission); + } + } + + async function uploadNonWRsn(loc, UploadStatus = 'L') { + console.log('uploadNonWRsn'); + let d1 = new Date(); + let d2 = moment(d1).format('MM/DD/YYYY'); + let data = { + "DistributorId": storeData.StoreId, + "VisitDate": d2, + "Latitude": (loc.lat || ''), + "Longitude": (loc.lng || ''), + "ReasonId": reasonId, + // "Remark":"", + // "Appversion":AppVersion, + "UploadStatus": UploadStatus, + "UserId": (props.UserId || ''), + "CheckInImage": Image1, + "CheckoutImage": "", + } + + const url = props.baseurl + getMethodName(METHODS.DISTRIBUTOR_COVERAGE); + console.log(url, data); + await UploadData(url, data) + .then(async (res) => { + console.log('uploadNonWRsn res:', res); + if (res > 0) { + let isUpdated = await InsertCoverageData(loc, true, UploadStatus); + if (isUpdated == true) { + let isupdated = await update_Store_UploadStatus(UploadStatus == 'L'); + if (isupdated == true) { + notify(ST.AllDataUploaded + '!', 'SHORT'); + setProcessing(false); + goBack(); + } + else { + notify('Cannot update distributor status!', 'SHORT'); + setProcessing(false); + } + } + else { + setProcessing(false); + notify(ST.Cannotuploaddata); + } + } + else { + setProcessing(false); + notify(ST.Cannotuploaddata, 'SHORT'); + } + }) + .catch((err) => { + console.log(err); + }); + } + + async function uploadNonWRsnWithImage(loc, UploadStatus = 'L') { + console.log('uploadNonWRsnWithImage'); + let d1 = new Date(); + let d2 = moment(d1).format('MM/DD/YYYY'); + + var data1 = new FormData(); + if (Image1Path != '' && Image1Path != null) { + + data1.append('file', { + uri: Image1Path, + type: 'image/jpg', + name: Image1, + }); + + data1.append('Foldername', 'DBCoverageImages'); + data1.append('Path', d2); + } + + let data = { + "DistributorId": storeData.StoreId, + "VisitDate": d2, + "Latitude": (loc.lat || ''), + "Longitude": (loc.lng || ''), + "ReasonId": reasonId, + // "Remark":"", + // "Appversion":AppVersion, + "UploadStatus": UploadStatus, + "UserId": (props.UserId || ''), + "CheckInImage": Image1, + "CheckoutImage": "", + } + + const url = props.baseurl + getMethodName(METHODS.DISTRIBUTOR_COVERAGE); + const url1 = (props.imageUploadUrl || URL_IMAGE) + getMethodName(METHODS.UPLOADIMAGES_METHOD); + console.log(url, data); + + await UploadData2(url, data) + .then(async (res) => { + console.log('res:', res); + if (parseInt(res) > 0) { + let isUpdated = await InsertCoverageData(loc, true, UploadStatus); + if (isUpdated == true) { + // Upload Image + if ((selectedReason.ImageAllow == 'true' || selectedReason.ImageAllow == true) && Image1Path != '' && Image1Path != null) { + await UploadFormData(url1, data1) + .then(async (res1) => { + console.log('res1:', res1); + let tbname = isBeatPlan == true ? 'JourneyPlan_RouteWise' : (isAdhocScreen == true ? 'Adhoc_JourneyPlan' : 'Mapping_JourneyPlan'); + // let isuploaded = await uploadStoreStatus(props, storeData, 'U', tbname); + let isuploaded = await uploadDBStatus(props, storeData, 'U', tbname, loc) + if (isuploaded == true) { + notify(ST.DataUploaded + '!'); + setProcessing(false); + goBack(); + } + else { + notify(ST.Cannotuploaddata); + setProcessing(false); + } + + }) + .catch((err) => { + console.log(err); + }); + } + else { + let tbname = isBeatPlan == true ? 'JourneyPlan_RouteWise' : (isAdhocScreen == true ? 'Adhoc_JourneyPlan' : 'Mapping_JourneyPlan'); + let isuploaded = await uploadStoreStatus(props, storeData, 'U', tbname); + if (isuploaded == true) { + notify(ST.DataUploaded + '!'); + setProcessing(false); + goBack(); + } + else { + notify(ST.Cannotuploaddata); + setProcessing(false); + } + + } + } + else { + setProcessing(false); + notify(ST.Cannotuploaddata); + } + } + else { + setProcessing(false); + notify(ST.Cannotuploaddata); + } + }) + .catch((err) => { + console.log(err); setProcessing(false); notify(ST.Cannotuploaddata); + }); + } + + async function InsertCoverageData(loc, entryAllowed = true, UploadStatus) { + let d1 = new Date(); + let d2 = moment(d1).format('MM/DD/YYYY'); + let now = moment(d1).format('MM/DD/YYYY HH:mm:ss'); + + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + + let { StoreId, MID } = storeData; + // let { lat, lng } = location; + let { lat, lng } = loc; + let q = `delete from ${AppTables.DISTRIBUTOR_CHECKIN} where DISTRIBUTOR_ID='${StoreId}' and VISIT_DATE='${d2}' `; + let JcpType = 'Master_Distributor'; + + let values = ` ('${StoreId}','${d2}','${lat}','${lng}','${now}','${Image1Path}','${now}','${Image1Path}','','${d2}')`; + let insert_q = ` insert into ${AppTables.DISTRIBUTOR_CHECKIN}(DISTRIBUTOR_ID,VISIT_DATE,LATITUDE,LONGITUDE,CHECKIN_TIME,CHECKIN_IMAGE,CHECKOUT_TIME,CHECKOUT_IMAGE,REMARK,ADDED_DATE) values ${values}`; + + + await txn.executeSql(q, [], async function (txn2, txnres2) { + console.log('store coverage deleted'); + await txn.executeSql(insert_q, [], async function (txn2, txnres3) { + console.log('InsertCoverageData done'); + + // let isupdated = await update_Store_UploadStatus(UploadStatus == 'L'); + let isupdated = await update_Store_UploadStatus(entryAllowed); + resolve(isupdated); + + }, function (Etxn, txnerr) { console.log(txnerr); resolve(false); }); + }, function (Etxn, txnerr) { console.log(txnerr); resolve(false); }); + + + }); + }).then((val) => { + console.log('on InsertCoverageData complete:', val); + return val; + }).catch((err) => { + console.log(err); + return false; + }); + + + + + } + + const goBack = () => { + props.navigation.goBack(); + } + + + async function update_Store_UploadStatus(entryAllowed = true) { + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + // if (!entryAllowed) { + let EntryAllow = (selectedReason.EntryAllow == 'true' || selectedReason.EntryAllow == true || selectedReason.EntryAllow == 1); + if (!EntryAllow) { + let q = `UPDATE Master_Distributor SET UploadStatus='U' `; + await txn.executeSql(q, [], async function (txn2, txnres1) { + console.log('store status updated') + resolve(true); + }, function (Etxn, txnerr) { console.log(txnerr); resolve(false); }); + } + else { + let datan = { StoreId: storeData.StoreId, UploadStatus: 'U', tbname: 'Master_Distributor' }; + // let datan = { StoreId: storeData.StoreId, UploadStatus: 'L', tbname: 'Master_Distributor' }; + const isUpdated = await UpdateDistributorStatus(props, datan); + resolve(isUpdated); + } + }); + }).then((val) => { + return val; + }).catch((err) => { + console.log(err); + return false; + }) + } + + async function submitNonWorkingRsns() { + if (validate()) { + setLoaderTitle(ST.UploadingData + '...'); + _getCurrentLocation(); + } + } + + function validate() { + if (reasonId == '' || reasonId == null || reason == '' || reason == null) { + notify(ST.Pleaseselectreasonfornotworking, 'SHORT'); + return false; + } + if (selectedReason.ImageAllow == 'true' && (Image1Path == '' || Image1Path == null)) { + notify('Plesae click selfie in front of warehouse', 'SHORT'); + return false; + } + return true; + } + + async function selectReason(item) { + if (isAnyStoreUploaded == true && (item.EntryAllow == 'false' || item.EntryAllow == false)) { + notify('You cannot select this reason, you have already uploaded data for a distributor!'); + return; + } + + setSelectedReason(item); + setReason(item.Reason); + setReasonId(item.ReasonId); + setrerenderdata(!rerenderdata); + + if (item.ImageAllow == 'true') { + if ((Image1Path != '' && Image1Path != null)) { + setShowImageSaveOp(false); + } + else { + setShowImageSaveOp(true); + } + openImageModal(); + } + } + + function openImageModal() { + setShowModal(true); + } + + function closeImageModal() { + setShowModal(false); + } + + function cancelImage() { + setImage1(''); + setImage1Path(''); + closeImageModal(); + } + + async function getImage(imgdata) { + if (typeof imgdata == 'object' && imgdata.errorCode == 'camera_unavailable') { + notify(ST.Cameraunavailable); + } + else if (typeof imgdata == 'object' && imgdata.uri != null) { + const img = imgdata; + const imgurl = img.uri, imgWidth = img.width, imgHeight = img.ExtendedHeight; + let isImgFromGallery = img.fromGallery != null ? img.fromGallery : false; + let picture_clickedd = isImgFromGallery == true ? img.datetime : new Date(); + let picture_clicked_time = moment(picture_clickedd).format('MM-DD-YYYY HH:mm:ss') + let picture_clicked_time_for_pic_name = moment(picture_clickedd).format('MMDDYYYY_HHmmss') + + console.log("time", picture_clicked_time); + console.log("time1", picture_clicked_time_for_pic_name); + let calculate_tym_date_for_filename = picture_clicked_time_for_pic_name; + let calculate_tym_date_over_img = picture_clicked_time; + let filename = storeData.StoreId + '_NonworkImg-' + calculate_tym_date_for_filename + '.jpg'; + + const mark_text1 = calculate_tym_date_over_img; + const mark_text2 = 'Store Name:' + storeData.StoreName + ' | Store Id:' + storeData.StoreId + ' | User Id:' + storeData.EmpId + ' | Image Type: DB Not Working' + ' | Date:' + calculate_tym_date_over_img; + + setImage1(filename); + + let imagePath = `${RNFS.DocumentDirectoryPath}/${filename}`; + //let imagePath = `${RNFS.ExternalDirectoryPath}/${filename}`; + RNFS.copyFile(imgurl, imagePath) + .then(async (resn) => { + // render data with clicked image + let uri = 'file://' + imagePath; + setImage1Path(uri); + // add metdata then resize image and restored back to the imagePath + let restore_data = { "destFilePath": imagePath, "imgurl": imgurl, imgWidth, imgHeight, mark_text1, mark_text2 } + let is_restored = await restore_ImageWithMetaData(restore_data, imgdata); + console.log("image restored:", is_restored); + }) + .catch(err => { + console.log(ST.Errorimagefilewritefailed + '!!!'); + console.log(err.message, err.code); + }); + } + } + + async function openCamera() { + setShowCamera(true); + // props.navigation.navigate('CameraScreen',{'getImage':getImage,'cameraType':'front'}) + } + + function _OpenCaptureImage_Modal() { + const isImageCap = (Image1Path == '' || Image1Path == null) ? false : true; + return ( + + { + !isImageCap && + + { openCamera() }}> + + + { closeImageModal() }}> + {ST.Cancel} + + + } + { + isImageCap && + + + + + { openCamera() }}> + + + {showImageSaveOp && + + { cancelImage() }}> + {ST.Cancel} + + { closeImageModal() }}> + {ST.Save} + + } + {!showImageSaveOp && + { closeImageModal() }}> + {ST.Close} + + } + + + + } + + ) + } + + + return ( + + {processing && } + + {_OpenCaptureImage_Modal()} + { setShowCamera(false); getImage(imgData) }} showCamera={showCamera} onHideCamera={() => { setShowCamera(false); }} /> + + + + {!props.isDataDownloaded && } + {props.isDataDownloaded && Object.keys(storeData).length > 0 && + + + + + + + + {storeData.StoreName} + + + + + + {'Distributor Id:'} + {storeData.StoreId} + + + {'Distributor Code:'} + {storeData.StoreCode} + + + + + {'Address:'} + {storeData.Address} + + + + + + + + + + + {'Reason for not working in warehouse'} + { + + const nWselStyle = reasonId == item.ReasonId ? customStyle.nWselStyle : {}; + const nWselStyleText = reasonId == item.ReasonId ? customStyle.nWselStyleText : {}; + const CapImageShow = (Image1Path != '' && Image1Path != null) && reasonId == item.ReasonId ? true : false; + let isDisabled = (isAnyStoreUploaded == true && (item.EntryAllow == 'false' || item.EntryAllow == false)); + return ( + { selectReason(item) }}> + {item.Reason} + {item.ImageAllow == 'true' && + { selectReason(item) }}> + {!CapImageShow && } + {CapImageShow && } + + } + + ); + }} + /> + + + + + { submitNonWorkingRsns(); }} /> + + + + + } + + + + + ); +} + + + +export default connect(mapStateToProps, mapDispatchToProps)(DBNonWorkingReasons); \ No newline at end of file diff --git a/PerformicsSrc/src/screens/DBVisiCooler.js b/PerformicsSrc/src/screens/DBVisiCooler.js new file mode 100644 index 0000000..acf807b --- /dev/null +++ b/PerformicsSrc/src/screens/DBVisiCooler.js @@ -0,0 +1,786 @@ +import React, { useState, useEffect, useRef } from 'react'; +import Container from '../components/container'; +import { useRoute } from '@react-navigation/native'; +import { globalStyles, customStyles, GetPageTheme } from "../styles/Global"; +import { StatusBar, Image, TextInput, View, Text, ScrollView, TouchableOpacity, Platform, PermissionsAndroid, FlatList, Alert, Animated } from 'react-native'; +import { ReactReduxContext, connect, useSelector, useDispatch } from 'react-redux'; +import { mapStateToProps, mapDispatchToProps } from '../reducers/contextProvider'; +import { notify } from '../components/notify'; +import moment from 'moment'; +import { getDownloadJson, marktext1, marktext2, validateNumber } from '../controller/functions'; +import { get_item, set_item, clear_item } from '../components/localStorage'; +import { version, sloganline, appname, testurl, db, colors_Arr, visiCoolerImgPath, ImageFolderPath } from '../constants/constants'; +import CustomHeader from '../components/customHeader'; +import { AntDesign, Entypo, FontAwesome, Ionicons, MaterialCommunityIcons } from '../components/icons'; +import CustomLoader from '../components/CustomLoader'; +import LinearGradient from 'react-native-linear-gradient'; +import { AppTables } from '../constants/tableConstants'; +import * as RNFS from 'react-native-fs'; +import GradientButton from '../components/gradientButton'; + +import CameraImg from '../assets/performics/camera_front_image.svg' +import { ConfirmSaveAlert } from '../components/alert'; +import CustomCamera from '../components/Camera'; + +function DBVisiCooler(props) { + const route = useRoute(); + const ST = props.StaticText || {}; + // get all theme styles acc to current theme set + const PageTheme = GetPageTheme(props.DarkMode, route.name); + const customStyle = customStyles(props.DarkMode, route.name); + const animatedChoice = useRef(new Animated.Value(0)).current; + + const [processing, setProcessing] = useState(true); + const [loaderTitle, setLoaderTitle] = useState(); + const [isAdhocScreen, setIsAdhocScreen] = useState(false); + const [storeData, setStoreData] = useState({}); + const [StoreCameraAllow, setStoreCameraAllow] = useState(true); + + const [currentMenu, setCurrentMenu] = useState({}); + const [brandData, setBrandData] = useState([]); + const [rerenderdata, setrerenderdata] = useState(0); + const [rerenderdata2, setrerenderdata2] = useState(0); + + const [AddVisibility, setAddVisibility] = useState([]); + const [PreviousVisicooler, setPreviousVisicooler] = useState([]); + const [AddVisFormData, setAddVisFormData] = useState({}); + const [isAddVisPresent, setIsAddVisPresent] = useState(0); + const [showAlert, setShowAlert] = useState(false); + const [Categories, setCategories] = useState([]); + const [SubCategories, setSubCategories] = useState([]); + const [Brands, setBrands] = useState([]); + const [DisplayList, setDisplayList] = useState([]); + const [hasUnsavedChanges, setHasUnsavedChanges] = useState(false); + const [showCamera, setShowCamera] = useState(false); + const [clickImageType, setClickImageType] = useState('1'); + const [toRemoveId, setToRemoveId] = useState(''); + const [toRemoveItem, setToRemoveItem] = useState({}); + const [showRemoveConfirm_M, setshowRemoveConfirm_M] = useState(false); + const [showRAllC_M, setShowRAllC_M] = useState(false); + + const [QREnable, setQREnable] = useState(false); + const [QRqtnData, setQRqtnData] = useState({}); + const [showQRCamera, setShowQRCamera] = useState(false); + + const d1 = new Date(); + const d2 = moment(d1).format('MM/DD/YYYY'); + + + useEffect(() => { + setLoaderTitle(ST.Loading + '...') + let params = props.route.params ? props.route.params : {}; + let storeData1 = params.storeData || {}; + let menu1 = params.menu || {}; + let cameraAllow = storeData1.CameraAllow == 'true' || storeData1.CameraAllow == 1 ? true : false; + setStoreCameraAllow(cameraAllow); + + let isAdhoc = params.isAdhoc || false; + setIsAdhocScreen(isAdhoc); + setStoreData(storeData1); + setCurrentMenu(menu1); + + getData(storeData1); + + props.navigation.addListener('beforeRemove', onBeforeRemove); + + return function cleanup() { + props.navigation.removeListener('beforeRemove', onBeforeRemove); + }; + }, []); + + useEffect(() => { + props.navigation.removeListener('beforeRemove', onBeforeRemove); + props.navigation.addListener('beforeRemove', onBeforeRemove); + }, [hasUnsavedChanges]); + + useEffect(() => { + props.navigation.removeListener('beforeRemove', onBeforeRemove); + props.navigation.addListener('beforeRemove', onBeforeRemove); + }, [showCamera]); + + function onBeforeRemove(e) { + if (showCamera == true) { + e.preventDefault(); + setShowCamera(false); + } + else { + if (hasUnsavedChanges == true) { + e.preventDefault(); // Prevent default behavior of leaving the screen + onRemoveScreen(e); + } + else { + return; + } + } + } + function onRemoveScreen(e) { + Alert.alert( + "", + ST.Doyoureallywanttoexitthescreen, + [ + { + text: ST.Cancel, + onPress: () => { }, + style: "cancel" + }, + { text: ST.OK, onPress: () => { setHasUnsavedChanges(false); props.navigation.dispatch(e.data.action); } } + ] + ); + } + + async function getData(storeData1) { + try { + let { StoreId, ChainId, StateId, StoreTypeId } = storeData1; + + await db.transaction(async function (txn) { + + + let q3 = `Select * from ${AppTables.DB_VISICOOLER} WHERE DISTRIBUTOR_ID='${StoreId}' and VISIT_DATE='${d2}' `; + await txn.executeSql(q3, [], async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + let arr = []; + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + let { QRCODE, ASSETCODE, IMAGE, KEY_ID } = data; + let datan = { QRCode: QRCODE, AssetCode: ASSETCODE, Image1: IMAGE, keyId: KEY_ID } + // datan.Image1Path=IMAGE!=''?"file://"+visiCoolerImgPath+"/"+IMAGE:''; + // let imagePath=`${ImageFolderPath+currentMenu.ScreenName}/${filename}`; + console.log("Image-777-", IMAGE); + console.log("Image-77788-", ImageFolderPath); + console.log("-currntmenuuu-", currentMenu.ScreenName); + datan.Image1Path = IMAGE != '' ? "file://" + ImageFolderPath + 'DBVISICOOLERONEAPP' + "/" + IMAGE : ''; + // let imagePath=Image1!=null && Image1!=''?'file://'+ImageFolderPath+menu1.ScreenName+"/"+Image1:''; + console.log("Image-77799988-", datan); + + arr.push(datan) + if (i == txnres2.rows.length - 1) { + setAddVisibility(arr); + setProcessing(false); + } + } + } + else { + setProcessing(false); + } + }, function (txn2, txnerr) { console.log(txnerr); setProcessing(false); },); + + let q4 = `Select * from Distributor_PreviousVisicooler WHERE DistributorId='${StoreId}' `; + await txn.executeSql(q4, [], async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + let arr = []; + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + let { VC_QRCode, VC_AssetCode } = data; + let datan = { QRCode: VC_QRCode, AssetCode: VC_AssetCode, Image1: "" } + datan.Image1Path = ''; + arr.push(datan) + if (i == txnres2.rows.length - 1) { + setPreviousVisicooler(arr); + } + } + } + + }, function (txn2, txnerr) { console.log(txnerr); },); + + + }); + } catch (err) { + console.log(err); + } + } + + + + async function getImage(imgdata) { + let type = clickImageType; + if (typeof imgdata == 'object' && imgdata.errorCode == 'camera_unavailable') { + notify(ST.Cameraunavailable); + } + else if (typeof imgdata == 'object' && imgdata.uri != null) { + const img = imgdata; + const imgurl = img.uri, imgWidth = img.width, imgHeight = img.height; + let picture_clicked_timee = new Date(); + let picture_clicked_time = moment(picture_clicked_timee).format('MM-DD-YYYY HH:mm:ss') + let picture_clicked_time_for_pic_name = moment(picture_clicked_timee).format('MMDDYYYY_HHmmss') + + console.log("time", picture_clicked_time); + console.log("time1", picture_clicked_time_for_pic_name); + let calculate_tym_date_for_filename = picture_clicked_time_for_pic_name; + let calculate_tym_date_over_img = picture_clicked_time; + const mark_text1 = calculate_tym_date_over_img; + const mark_text2 = 'Store Name:' + storeData.StoreName + ' | Store Id:' + storeData.StoreId + ' | User Id:' + storeData.EmpId + ' | Image Type: Add. Visibility' + ' | Date:' + calculate_tym_date_over_img; + + await marktext1(mark_text1, imgurl) + .then((res) => { + if (res.success) { + let uri = res.uri; + marktext2(mark_text2, uri, imgWidth, imgHeight) + .then((res) => { + if (res.success) { + let filename = storeData.StoreId + '_' + (props.UserId || '') + '_DbVisicoolerImg-' + calculate_tym_date_for_filename + '.jpg'; + let addvisdata = AddVisFormData; + let image_key = 'Image1'; + let image_path_key = 'Image1Path'; + addvisdata[image_key] = filename; + // renamefile + let imagePath = `${ImageFolderPath + currentMenu.ScreenName}/${filename}`; + console.log("imgpath---", imagePath, ImageFolderPath, currentMenu.ScreenName); + RNFS.copyFile(res.uri, imagePath) + .then(resn => { + let uri = 'file://' + imagePath; + console.log('image marker', uri); + addvisdata[image_path_key] = uri; + setAddVisFormData(addvisdata); + setHasUnsavedChanges(true); + setrerenderdata2(!rerenderdata2); + }) + .catch(err => { + console.log('ERROR: image file write failed!!!'); + console.log(err.message, err.code); + }); + + } + else { + if (res.imagenotfound) { + notify(ST.Pleasecaptureaimage); + } + else { + notify(res.error); + } + } + }); + } + else { + if (res.imagenotfound) { + notify(ST.Pleasecaptureaimage); + } + else { + notify(res.error); + } + } + }); + } + } + + async function openCamera(type = '1') { + console.log('openCamera'); + setClickImageType(type); + setShowCamera(true); + // props.navigation.navigate('CameraScreen',{'getImage':getImage,'cameraType':'back'}) + } + + async function onSubmitData() { + let isvalid = await validate(); + if (isvalid) { + setShowAlert(true); + } + } + + async function saveData() { + setHasUnsavedChanges(false); + setShowAlert(false); + setLoaderTitle(ST.SavingData + '...'); + setProcessing(true); + try { + let { StoreId, ChainId, StateId, StoreTypeId } = storeData; + await db.transaction(async function (txn) { + + let q = `DELETE FROM ${AppTables.DB_VISICOOLER} WHERE DISTRIBUTOR_ID='${StoreId}' and VISIT_DATE='${d2}' `; + + // remove old data + await txn.executeSql(q, [], async function (txn2, txnres) { + console.log('av data deleted'); + }, function (txn2, txnerr) { console.log(txnerr); },); + + var values = ''; + for (var i = 0; i < AddVisibility.length; i++) { + let catIndex = i; + let item = AddVisibility[catIndex]; + let { QRCode, AssetCode, Image1, Image1Path } = item; + values += values != '' ? ' , ' : ''; + values += ` ('${StoreId}','${d2}','${QRCode}','${AssetCode}','${(Image1 || '')}','${d2}') `; + + } + + console.log('values:', values); + let add_data = `INSERT INTO ${AppTables.DB_VISICOOLER} (DISTRIBUTOR_ID,VISIT_DATE,QRCODE,ASSETCODE,IMAGE,ADDED_DATE) VALUES ${values} `; + + await txn.executeSql(add_data, [], async function (txn2, txnres) { + console.log('av added'); + notify(ST.AdditionalVisibilityaddedsuccessfully, 'SHORT'); + setProcessing(false); + props.navigation.goBack(); + }, function (txn2, txnerr) { console.log(txnerr); setProcessing(false); notify(ST.Cannotaddadditionalvisibility) },); + + + }); + } catch (err) { + console.log(err); + } + } + + + + + async function validate() { + + let isValid = true; + if (AddVisibility.length <= 0) { + isValid = false; + notify(ST.Pleaseaddfirst, 'SHORT'); + } + + console.log('isValid:', isValid); + return isValid; + } + + async function validateForm() { + let isValid = true; + let { AssetCode, QRCode, Image1, Image1Path } = AddVisFormData; + if ((QRCode == '' || QRCode == null)) { + isValid = false; + notify("Please Scanner code", 'SHORT'); + } else if ((AssetCode == '' || AssetCode == null)) { + isValid = false; + notify("Please Enter Asset Code", 'SHORT'); + } + + else if ((Image1 == '' || Image1 == null)) { + // else if(StoreCameraAllow==true && (Image1=='' || Image1==null )){ + isValid = false; + notify(ST.Pleaseclickimage, 'SHORT'); + } + + + console.log('isValid:', isValid); + return isValid; + } + + function onFormDataChange(val, key, type = "text") { + + if (val != '') { + let isValid = validateNumber(val, type); + console.log("type:", type, isValid); + if (!isValid) { + return; + } + } + let data = AddVisFormData; + data[key] = val; + setAddVisFormData(data); + setHasUnsavedChanges(true); + setrerenderdata(!rerenderdata); + } + + function onselectionChange(option, keyLbl, keyVal) { + let data = AddVisFormData; + data[keyVal] = option.value; + data[keyLbl] = option.label; + + if (keyLbl == 'CategoryName') { + loadData(option.value, 'SubCategories'); + + // clear subcategory and brand + data['SubCategoryId'] = ''; + data['SubCategoryName'] = ''; + data['BrandId'] = ''; + data['BrandName'] = ''; + } + else if (keyLbl == 'SubCategoryName') { + loadData(option.value, 'Brands'); + + // clear brand + data['BrandId'] = ''; + data['BrandName'] = ''; + } + + setAddVisFormData(data); + setHasUnsavedChanges(true); + setrerenderdata(!rerenderdata); + + + } + + async function loadData(qId, type) { + try { + await db.transaction(async function (txn) { + let q = ''; + if (type == 'SubCategories') q = `Select Distinct p.SubCategoryId,p.SubCategoryName from Product_Master p where (p.CategoryId='${qId}' or p.CategoryId=${qId}) and (p.IsCompetitor='0' or p.IsCompetitor=0) order by p.SubCategorySequence`; + else if (type == 'Brands') q = `Select Distinct p.BrandName,p.BrandId from Product_Master p Where (p.SubCategoryId='${qId}' or p.SubCategoryId= ${qId}) and (p.IsCompetitor='0' or p.IsCompetitor=0) order by p.BrandSequence`; + + await txn.executeSql(q, [], async function (txn2, txnres2) { + // console.log('rowcount:,',type,':',txnres2.rows.length); + if (txnres2.rows.length > 0) { + let arr = []; + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + arr.push(data); + if (i == txnres2.rows.length - 1) { + if (type == 'SubCategories') setSubCategories(arr); + else if (type == 'Brands') setBrands(arr); + } + } + } + }, function (txn2, txnerr) { console.log(txnerr); },); + + }); + } catch (err) { + console.log(err); + } + } + + + + function onChoiceSelect(val, key) { + if (val == 0 && AddVisibility.length > 0) { + setShowRAllC_M(true); + return; + } + var val1 = val == 1 ? 1 : 0; + if (animatedChoice != null) { + Animated.timing(animatedChoice, { + toValue: val1, + duration: 400, + useNativeDriver: false, + }).start(); + } + setIsAddVisPresent(val); + setHasUnsavedChanges(true); + if (val == 0) { + setAddVisibility([]); + setAddVisFormData({}); + } + } + + function onConfirmRemoveAll() { + // Remove all data + if (animatedChoice != null) { + Animated.timing(animatedChoice, { + toValue: 0, + duration: 400, + useNativeDriver: false, + }).start(); + } + setIsAddVisPresent(0); + setHasUnsavedChanges(true); + setAddVisibility([]); + setAddVisFormData({}); + setShowRAllC_M(false); + } + + function onSaveCancel() { + setShowAlert(false); + } + + async function onQRScanned(imgdata) { + // let qtn=QRqtnData.qtn || {}; + // let window=QRqtnData.window || {}; + let QR_withValidChars = imgdata != null && imgdata != '' ? imgdata.replace(/["']/g, '') : ''; + let value = QR_withValidChars;//imgdata && imgdata[0] && imgdata[0].displayValue ? imgdata[0].displayValue :"" + // setTextValue(value,qtn,window) + console.log("value------", value) + onFormDataChange(value, 'QRCode', 'qrtext') + } + + async function Add_AddVis() { + let isValid = await validateForm(); + console.log('isValid add:', isValid); + if (isValid) { + let arr = AddVisibility; + + arr.push(AddVisFormData); + setAddVisibility(arr); + setHasUnsavedChanges(true); + notify(ST.AdditionalVisibilityaddedsuccessfully, 'LONG'); + setrerenderdata(!rerenderdata); + + // clear data + setAddVisFormData({}); + } + + } + + function showRemoveConfirm(item, index) { + console.log("checking-------", item) + + if (item.keyId > 0) { + console.log("checking--id-----", item.keyId) + setToRemoveId(item.keyId); + setToRemoveItem(item); + setshowRemoveConfirm_M(true); + } + else { + setToRemoveId(index); + setToRemoveItem(item); + setshowRemoveConfirm_M(true); + } + + } + + // function Remove_AddVis(){ + // let index=toRemoveId + // let item=toRemoveItem; + // let arr=AddVisibility; + // console.log('toRemoveId:',index); + // if(index>=0 && index 0) { + console.log("check-keyId-", index) + + let deleteQuery = `DELETE FROM ${AppTables.DB_VISICOOLER} WHERE DISTRIBUTOR_ID='${StoreId}' and VISIT_DATE='${d2}' AND KEY_ID='${index}' `; + + txn.executeSql(deleteQuery, [], function (txn3, txnres) { + console.log('Visicooler data deleted', item.keyId, +"" + index); + let updatedVisibility = AddVisibility.filter(item => item.keyId !== index); + setAddVisibility(updatedVisibility); + setHasUnsavedChanges(true); + notify('Visicooler removed successfully', 'LONG'); + setrerenderdata(!rerenderdata); + setToRemoveId(''); + setToRemoveItem({}); + setshowRemoveConfirm_M(false); + + }, function (txnE, txnerr) { + console.log('Error deleting survey data:', txnerr); + }); + + } + else { + let index = toRemoveId + let item = toRemoveItem; + let arr = AddVisibility; + console.log('toRemoveId:', index); + if (index >= 0 && index < arr.length) { + arr.splice(index, 1); + setAddVisibility(arr); + setHasUnsavedChanges(true); + notify('Visicooler removed successfully', 'LONG') + setrerenderdata(!rerenderdata); + } + else { + notify('Cannot remove! Visicooler not found', 'LONG') + } + setToRemoveId(''); + setToRemoveItem({}); + setshowRemoveConfirm_M(false); + } + + }); + } + + + function _render_addVisFormTop() { + let xpos = 0; + if (animatedChoice != null) { + xpos = animatedChoice.interpolate({ + inputRange: [0, 1], + outputRange: [0, -75], + }); + } + return ( + + + { + (rerenderdata == rerenderdata) && + + + + + + {"QR Code"} + + { onFormDataChange(val, 'QRCode', "qrtext"); }} + autoComplete='off' + /> + { setQREnable(true); setQRqtnData({}); setShowQRCamera(true); }}> + + + + + + + + + + {"Asset Code"} + { onFormDataChange(val, 'AssetCode'); }} + autoComplete='off' + /> + + + + + {ST.Image} + + + {(AddVisFormData.Image1Path == '' || AddVisFormData.Image1Path == null) && + { openCamera('1') }}> + + + } + {(AddVisFormData.Image1Path != '' && AddVisFormData.Image1Path != null) && + + + { openCamera('1') }}> + + + + } + + + + + + + { Add_AddVis() }}> + {ST.Add} + + + + + + + {"Added Visicooler List"} + + { + AddVisibility.length > 0 && + AddVisibility.map((item, index) => { + console.log(item); + return ( + + + + + {'QR Code :'} + {item.QRCode} + + + + {'Asset Code :'} + {item.AssetCode} + + + + + {ST.Image} + {console.log("Image1Path--------", item.Image1Path)} + {(item.Image1Path != null && item.Image1Path != '') && } + + { showRemoveConfirm(item, index) }}> + + + + + + + ); + }) + } + + + + + {PreviousVisicooler.length > 0 && {"Previous Visicooler List"}} + + { + PreviousVisicooler.length > 0 && + PreviousVisicooler.map((item, index) => { + console.log(item); + return ( + + + + + {'QR Code :'} + {item.QRCode} + + + + {'Asset Code :'} + {item.AssetCode} + + + + { + (item.Image1Path != null && item.Image1Path != '') && + + {ST.Image} + {(item.Image1Path != null && item.Image1Path != '') && } + + } + + + + + ); + }) + } + + + + } + + ) + } + + return ( + + {processing && } + + {ConfirmSaveAlert(props, showAlert, onSaveCancel, saveData)} + {ConfirmSaveAlert(props, showRemoveConfirm_M, () => { setshowRemoveConfirm_M(false) }, Remove_AddVis, ST.Doyoureallywanttoremovethisvisibility)} + {ConfirmSaveAlert(props, showRAllC_M, () => { setShowRAllC_M(false) }, onConfirmRemoveAll, ST.Doyoureallywanttoremoveallvisibilitydata)} + { setShowQRCamera(false); onQRScanned(imgData) }} showCamera={showQRCamera} onHideCamera={() => { setShowQRCamera(false); }} /> + + { setShowCamera(false); getImage(imgData) }} showCamera={showCamera} onHideCamera={() => { setShowCamera(false); }} /> + + + + {Object.keys(storeData).length > 0 && + + {_render_addVisFormTop()} + + } + + { onSubmitData() }} /> + + + + + + + ); +} + + + +export default connect(mapStateToProps, mapDispatchToProps)(DBVisiCooler); \ No newline at end of file diff --git a/PerformicsSrc/src/screens/DB_POSM.js b/PerformicsSrc/src/screens/DB_POSM.js new file mode 100644 index 0000000..448e4d9 --- /dev/null +++ b/PerformicsSrc/src/screens/DB_POSM.js @@ -0,0 +1,698 @@ +import React,{useState,useEffect,useRef} from 'react'; +import Container from '../components/container'; +import { useRoute } from '@react-navigation/native'; +import { globalStyles,customStyles,GetPageTheme } from "../styles/Global"; +import {StatusBar,Image,TextInput,View,Text,ScrollView,TouchableOpacity,Platform,PermissionsAndroid,FlatList, Alert, Animated, Keyboard} from 'react-native'; +import { ReactReduxContext,connect,useSelector, useDispatch } from 'react-redux'; +import { mapStateToProps,mapDispatchToProps } from '../reducers/contextProvider'; +import {notify} from '../components/notify'; +import moment from 'moment'; +import {getDownloadJson,getKPIFields,marktext1,marktext2, resizeImage, restore_ImageWithMetaData, validateNumber} from '../controller/functions'; +import {get_item,set_item,clear_item} from '../components/localStorage'; +import {version,sloganline,appname,testurl,db, colors_Arr, common_ImagePath, ImageFolderPath} from '../constants/constants'; +import CustomHeader from '../components/customHeader'; +import {Card, Menu, Switch} from 'react-native-paper'; +import {AntDesign, Entypo, FontAwesome, Fontisto, MaterialCommunityIcons} from '../components/icons'; +import { stat } from 'react-native-fs'; +import CustomLoader from '../components/CustomLoader'; +import LinearGradient from 'react-native-linear-gradient'; +import { AppTables } from '../constants/tableConstants'; +import * as RNFS from 'react-native-fs'; +import GradientButton from '../components/gradientButton'; +import { ConfirmSaveAlert } from '../components/alert'; +import CustomCamera from '../components/Camera'; +import ImageViewer from 'react-native-image-zoom-viewer'; +import CameraImg from '../assets/performics/camera_front_image.svg' + + +function DB_POSM(props) { + const route = useRoute(); + const ST=props.StaticText || {}; + // get all theme styles acc to current theme set + const PageTheme=GetPageTheme(props.DarkMode,route.name); + const customStyle=customStyles(props.DarkMode,route.name); + const animatedChoice=useRef(new Animated.Value(0)).current; + + const [processing, setProcessing] = useState(true); + const [loaderTitle, setLoaderTitle] = useState(); + const [isAdhocScreen, setIsAdhocScreen] = useState(false); + const [storeData, setStoreData] = useState({}); + const [currentMenu, setCurrentMenu] = useState({}); + const [rerenderdata, setrerenderdata]= useState(0); + const [rerenderdata2, setrerenderdata2]= useState(0); + const [rerenderdata3, setrerenderdata3]= useState(0); + const [rerenderdata4, setrerenderdata4]= useState(0); + + const [hasUnsavedChanges,setHasUnsavedChanges] = useState(false); + + const [dateValue, setDateValue] = useState(''); + const [WindowData, setWindowData] = useState([]); + const [reasons_list, setReasons_list] = useState([]); + const [Windows, setWindows] = useState([]); + const [globalWindows, setGlobalWindows] = useState([]); + const [show_zoomImage, setShow_zoomImage] = useState(false); + const [refImageIndex, setrefImageIndex] = useState(0); + const [showAlert, setShowAlert] = useState(false); + const [zoomImageUrl, setZoomImageUrl] = useState([]); + const [showCamera, setShowCamera] = useState(false); + const [getImageProps,setGetImageProps]= useState({}); + const zoomView=useRef(null); + const [showRating, setShowRating] = useState(false); + const [RatingQtn, setRatingQtn] = useState({}); + const [RatingWindow, setRatingWindow] = useState({}); + const [RatingOrder, setRatingOrder] = useState([]); + const [searchedItem, setSearchedItem]= useState(''); + const [KPIFields, setKPIFields] = useState([]); + const [showSwitchCamera,setShowSwitchCamera]= useState(false); + + + const d1=new Date(); + const d2=moment(d1).format('MM/DD/YYYY'); + + + useEffect(() => { + setLoaderTitle(ST.Loading+'...') + let params=props.route.params? props.route.params:{}; + let storeData1=params.storeData || {}; + let menu1=params.menu || {}; + + setStoreData(storeData1); + setCurrentMenu(menu1); + + getData(storeData1,menu1); + + const unsubscribe=props.navigation.addListener('beforeRemove', onBeforeRemove); + + return function cleanup() { + return unsubscribe; + }; + }, []); + + useEffect(() => { + const unsubscribe=props.navigation.addListener('beforeRemove', onBeforeRemove); + return unsubscribe; + }, [hasUnsavedChanges]); + + useEffect(() => { + const unsubscribe=props.navigation.addListener('beforeRemove', onBeforeRemove); + return unsubscribe; + }, [showCamera]); + + function onBeforeRemove(e){ + if(showCamera==true){ + e.preventDefault(); + setShowCamera(false); + } + else{ + if (hasUnsavedChanges==true) { + e.preventDefault(); // Prevent default behavior of leaving the screen + onRemoveScreen(e); + } + else{ + return; + } + } + } + + function onRemoveScreen(e){ + Alert.alert( + "", + ST.Doyoureallywanttoexitthescreen, + [ + { + text: ST.Cancel, + onPress: () => {}, + style: "cancel" + }, + { text: ST.OK, onPress: () => {setHasUnsavedChanges(false);props.navigation.dispatch(e.data.action);} } + ] + ); + } + + + async function getData(storeData1,menu1){ + try { + let {StoreId,ChainId,StateId,StoreTypeId}=storeData1; + + let AllKPIFields=await getKPIFields(menu1); + setKPIFields(AllKPIFields); + // set switch camera flag as defined in mapping menu flag (if exists) + let SwitchingCameraI=AllKPIFields.findIndex(i=>i.KPIFieldName=='SwitchingCamera'); + let SwitchingCameraObj=SwitchingCameraI>=0?AllKPIFields[SwitchingCameraI]:{}; + let SwitchingCamera=SwitchingCameraI>=0?SwitchingCameraObj['KPIFieldEnable']:false; + setShowSwitchCamera(SwitchingCamera); + await db.transaction(async function (txn) { + // check if data exists + let selectlist=` w.DISTRIBUTOR_ID as DistributorId,w.POSM_HEADER_ID as posmHeaderId,wd.POSMDefinitionId,wd.PosmId,wd.POSMName,wd.PosmTypeId,wd.POSMTypeName,wd.POSMDefinitionTitle,wd.POSMDefinitionTitleEnable,wd.POSMTable,wd.POSMField,wd.POSMValue,wd.ChildName,wd.POSMRefImage,w.IS_PRESENT as IsPresent,w.POSM_IMAGE as POSMImage,w.STOCK_QTY as StockQty`; + let join=` inner join Master_POSMDefinition wd on w.POSM_DEFINITION_ID=wd.POSMDefinitionId `; + let q=` Select ${selectlist} from ${AppTables.DBPOSM_HDR_DATA} w ${join} where w.DISTRIBUTOR_ID='${StoreId}' `; + + // else pick data from masters + let selectlist2=` db.DistributorId,w.POSMDefinitionId,w.PosmId,w.POSMName,w.PosmTypeId,w.POSMTypeName,w.POSMDefinitionTitle,w.POSMDefinitionTitleEnable,w.POSMTable,w.POSMField,w.POSMValue,w.ChildName,w.POSMRefImage,'' as IsPresent,'' as POSMImage,'' as StockQty`; + let q2=`Select * from (select Distinct ${selectlist2} from Master_Distributor db + INNER JOIN Mapping_JourneyPlan jcp on db.DistributorId=jcp.DistributorId + INNER JOIN Mapping_StorePOSM MW on MW.StoreId=jcp.StoreId + INNER JOIN Master_POSMDefinition w on w.POSMDefinitionId=MW.POSMDefinitionId + + UNION + + select Distinct ${selectlist2} from Master_Distributor db + INNER JOIN Adhoc_JourneyPlan jcp on db.DistributorId=jcp.DistributorId + INNER JOIN Mapping_StorePOSM MW on MW.StoreId=jcp.StoreId + INNER JOIN Master_POSMDefinition w on w.POSMDefinitionId=MW.POSMDefinitionId + + `+(props.ShowNonMerList==true?` + UNION + + select Distinct ${selectlist2} from Master_Distributor db + INNER JOIN NonMerchandising_JourneyPlan jcp on db.DistributorId=jcp.DistributorId + INNER JOIN Mapping_StorePOSM MW on MW.StoreId=jcp.StoreId + INNER JOIN Master_POSMDefinition w on w.POSMDefinitionId=MW.POSMDefinitionId + + + `:'') + +(props.ShowNonProgram==true?` + UNION + + select Distinct ${selectlist2} from Master_Distributor db + INNER JOIN NonProgram_JourneyPlan jcp on db.DistributorId=jcp.DistributorId + INNER JOIN Mapping_StorePOSM MW on MW.StoreId=jcp.StoreId + INNER JOIN Master_POSMDefinition w on w.POSMDefinitionId=MW.POSMDefinitionId + + `:'') + +(props.ShowStoreSearch==true?` + UNION + + select Distinct ${selectlist2} from Master_Distributor db + INNER JOIN StoreSearch_JourneyPlan jcp on db.DistributorId=jcp.DistributorId + INNER JOIN Mapping_StorePOSM MW on MW.StoreId=jcp.StoreId + INNER JOIN Master_POSMDefinition w on w.POSMDefinitionId=MW.POSMDefinitionId + + + `:'') + +(props.ShowBeatPlanList==true?` + UNION + + select Distinct ${selectlist2} from Master_Distributor db + INNER JOIN JourneyPlan_RouteWise jcp on db.DistributorId=jcp.DistributorId + INNER JOIN Mapping_StorePOSM MW on MW.StoreId=jcp.StoreId + INNER JOIN Master_POSMDefinition w on w.POSMDefinitionId=MW.POSMDefinitionId + + + `:'') + +` order by db.DistributorId,w.POSMDefinitionId)as db Where db.DistributorId=${StoreId} ` + ; + + + + + console.log("dbposm q:",q) + await txn.executeSql(q,[],async function (txn2, txnres2) { + console.log("added rows",txnres2.rows.length) + if(txnres2.rows.length>0){ + let arr=[];let images=[],allWindowsData=[]; + for(var i=0;i0){ + let arr=[],images=[],allWindowsData=[]; + for(var i=0;ii.PosmId==window.PosmId && i.POSMDefinitionId==window.POSMDefinitionId) ; + let wind=wind_index>=0?allData[wind_index]:defData; + + let image_key='Image1'; + let image_key_path='Image1Path'; + wind[image_key]=filename; + + let imagePath=`${ImageFolderPath+currentMenu.ScreenName}/${filename}`; + RNFS.copyFile(imgurl, imagePath) + .then(async(resn) => { + // render data with clicked image + let uri='file://'+imagePath; + console.log('image marker',uri); + + wind[image_key_path]=uri; + wind_index>=0?allData[wind_index]=wind:allData.push(wind); + setWindowData(allData); + setHasUnsavedChanges(true); + setrerenderdata(!rerenderdata); + + // add metdata then resize image and restored back to the imagePath + let restore_data={"destFilePath":imagePath,"imgurl":imgurl,imgWidth,imgHeight,mark_text1,mark_text2} + let is_restored=await restore_ImageWithMetaData(restore_data,imgdata); + console.log("image restored:",is_restored); + }) + .catch(err => { + console.log('ERROR: image file write failed!!!'); + console.log(err.message, err.code); + }); + } + } + + async function openCamera(window){ + setGetImageProps({'window':window}); + setShowCamera(true); + } + + async function onSubmitData(){ + let isvalid=await validate(); + if(isvalid){ + Keyboard.dismiss(); + setShowAlert(true); + } + } + + async function saveData(){ + setHasUnsavedChanges(false); + setShowAlert(false); + setLoaderTitle(ST.SavingData+'...'); + setProcessing(true); + let d1n=new Date(); + let d3=moment(d1n).format('MM/DD/YYYY'); + try { + let {StoreId,ChainId,StateId,StoreTypeId}=storeData; + await db.transaction(async function (txn) { + // remove old data + await txn.executeSql(`DELETE FROM ${AppTables.DBPOSM_HDR_DATA} WHERE DISTRIBUTOR_ID='${StoreId}' and VISIT_DATE='${d2}' `,[],async function (txn2, txnres) { + console.log('window hdr data deleted'); + },function (txnE,txnerr) { console.log(txnerr); },); + // add data + var values='',childV=''; + for (const wi in Windows){ + const window=Windows[wi]; + + const wind=WindowData.find(i=>i.PosmId==window.PosmId && i.POSMDefinitionId==window.POSMDefinitionId); + let isPresent=wind.isPresent!=null && wind.isPresent!=''?wind.isPresent:'0'; + let Image1=wind.Image1!=null?wind.Image1:''; + let Image1Path=wind.Image1Path!=null?wind.Image1Path:''; + + + let POSM_HEADER_ID='POSM'+wi+(Math.floor(Math.random()*1000)+1); + let {POSMDefinitionId,PosmId,POSMName,PosmTypeId,POSMTypeName,POSMTable,POSMField,POSMValue,ChildName}=window; + let StockQty=wind.StockQty!=null?wind.StockQty:''; + + values+=values!=''?' , ':''; + values+=` ('${POSM_HEADER_ID}','${StoreId}','${d3}','${POSMDefinitionId}','${PosmId}','${POSMName}','${PosmTypeId}','${POSMTypeName}','${POSMTable}','${POSMField}','${POSMValue}','${ChildName}','${isPresent}','${Image1}','${StockQty}','${d3}') `; + } + + let add_hdr_data=`INSERT INTO ${AppTables.DBPOSM_HDR_DATA}(POSM_HEADER_ID,DISTRIBUTOR_ID,VISIT_DATE,POSM_DEFINITION_ID,POSM_ID,POSM_NAME,POSM_TYPE_ID,POSM_TYPE_NAME,POSM_TABLE,POSM_FIELD,POSM_VALUE,CHILD_NAME,IS_PRESENT,POSM_IMAGE,STOCK_QTY,ADDED_DATE) VALUES ${values} `; + await txn.executeSql(add_hdr_data,[],async function (txn2, txnres) { + console.log('posm header data added'); + setProcessing(false);notify(ST.POSMdataupdatedsuccessfully); + props.navigation.goBack(); + },function (txnE,txnerr) { console.log(txnerr);setProcessing(false);notify(ST.CannotaddPOSMdata); },); + }); + } catch (err) { + console.log(err); + } + } + + async function validate(){ + let isValid=true; + return new Promise((resolve,reject)=>{ + for (const wi in Windows){ + const window=Windows[wi]; + const wind=WindowData.find(i=>i.PosmId==window.PosmId && i.POSMDefinitionId==window.POSMDefinitionId); + let isPresent=wind.isPresent!=null && wind.isPresent!=''?wind.isPresent:'0'; + let Image1=wind.Image1!=null?wind.Image1:''; + let Image1Path=wind.Image1Path!=null?wind.Image1Path:''; + let StockQty=wind.StockQty!=null?wind.StockQty:''; + + if(isPresent=='1'){ + if(StockQty==''){ + notify(`Please enter stock for ${window.POSMName}`,'LONG'); + resolve(false);return; + } + else if(Image1==''){ + notify(`${ST.Pleaseclickallimagesfor} ${window.POSMName}`,'LONG'); + resolve(false);return; + } + } + else{ + + } + + if(wi==(Windows.length-1)){ + resolve(true);return; + } + + } + + }).then((val)=>{return val}) + .catch((err)=>{console.log(err); return false}); + + } + + + + function onChoiceSelect(item,val,key,animatedChoice){ + var val1=0; + val==1?val1=1:''; + if(animatedChoice!=null){ + Animated.timing(animatedChoice, { + toValue: val1, + duration:400, + useNativeDriver:false, + }).start(); + } + onWindowDataChange(item,val,key) + } + + function onWindowDataChange(item,val,key,type=''){ + if(val!=''){ + let isValid=validateNumber(val,type); + if(!isValid){ + return; + } + } + let allData=WindowData; + let defData={'PosmId':item.PosmId,'POSMDefinitionId':item.POSMDefinitionId}; + const win_index=allData.findIndex(i=>i.PosmId==item.PosmId && i.POSMDefinitionId==item.POSMDefinitionId); + let wind=win_index>=0?(allData[win_index] || defData) : defData; + wind[key]=val; + + if(key=='ReasonId'){ + let rsn=reasons_list.find(r=>r.ReasonId==val) || {}; + wind['Reason']=rsn.Reason || ''; + } + + win_index>=0?allData[win_index]=wind:allData.push(wind); + + setWindowData(allData); + setHasUnsavedChanges(true); + setrerenderdata(!rerenderdata); + } + + + + function onSaveCancel(){ + setShowAlert(false); + } + + + + function openImageRefView(windowIndex=0){ + setrefImageIndex(windowIndex); + setShow_zoomImage(true); + } + + + function _renderWindow(){ + return ( + `posm_${index.toString()}`} + renderItem={({item,index})=>{ + const window=item; + + let RefImage=window.POSMRefImage; + + const wind=WindowData.find(i=>i.PosmId==window.PosmId && i.POSMDefinitionId==window.POSMDefinitionId); + let isPresent=wind.isPresent!=null && wind.isPresent!=''?wind.isPresent:'0'; + + let StockQty=wind.StockQty!=null?wind.StockQty+'':''; + let Image1=wind.Image1!=null?wind.Image1:''; + let Image1Path=wind.Image1Path!=null?wind.Image1Path:''; + + + var xpos=isPresent=='1'?-75:0; + if(window.animatedChoice!=null ){ + xpos=window.animatedChoice.interpolate({ + inputRange:[0,1], + outputRange:[0,-75], + }); + } + + + return( + + + + {window.POSMName} + {openImageRefView(index)}}> + + + + + + + + + {ST.IsPresent} + + + + {onChoiceSelect(window,1,'isPresent',window.animatedChoice)}}> + {ST.Yes} + + {onChoiceSelect(window,0,'isPresent',window.animatedChoice)}}> + {ST.No} + + + + + + + {(isPresent=='1') && + + + {'Stock'} + {onWindowDataChange(window,val,'StockQty','numeric')}} + /> + + + + {ST.CaptureImage} + + + + { (Image1Path=='' || Image1Path==null) && + {openCamera(window)}}> + + + } + { (Image1Path!='' && Image1Path!=null) && + + + {openCamera(window)}}> + + + + } + + + + + } + + + + + ); + }} + /> + ) + } + + function _renderHeader(currentIndex){ + return( + + {`${(currentIndex+1)}/${zoomImageUrl.length}`} + {setShow_zoomImage(false) }}> + + + + ) + } + + function FilterStores(searchedQry){ + searchedQry=searchedQry.toLowerCase(); + console.log('searchedQry',searchedQry); + let arr=[]; + var arr2={}; + if(searchedQry!=null && searchedQry!=''){ + for(let i=0;ii.KPIFieldName=='SearchEnable') + let isSearchEnableKPIObj=isSearchEnableIndex>=0?KPIFields[isSearchEnableIndex]:{}; + let isSearchEnable=isSearchEnableIndex>=0?isSearchEnableKPIObj['KPIFieldEnable']:false; + if(isSearchEnable==true){ + return ( + + {setSearchedItem(val); FilterStores(val)}} + /> + {FilterStores(searchedItem)}}> + + + + ) + } + else{ + return( + + ) + } + } + + return ( + + {processing && } + + {ConfirmSaveAlert(props,showAlert,onSaveCancel,saveData)} + {setShowCamera(false);getImage(imgData)}} showCamera={showCamera} onHideCamera={()=>{setShowCamera(false);}}/> + + + + {getSearchBar()} + { Object.keys(storeData).length>0 && + + {_renderWindow()} + + } + + {onSubmitData()}}/> + + + + + + {show_zoomImage && + + null} + /> + + } + + ); +} + + + +export default connect(mapStateToProps, mapDispatchToProps)(DB_POSM); \ No newline at end of file diff --git a/PerformicsSrc/src/screens/DB_StoreDailyMenu.js b/PerformicsSrc/src/screens/DB_StoreDailyMenu.js new file mode 100644 index 0000000..612dd34 --- /dev/null +++ b/PerformicsSrc/src/screens/DB_StoreDailyMenu.js @@ -0,0 +1,356 @@ +import React,{useState,useEffect} from 'react'; +import Container from '../components/container'; +import { useRoute } from '@react-navigation/native'; +import { globalStyles,customStyles,GetPageTheme } from "../styles/Global"; +import {StatusBar,Image,TextInput,View,Text,ScrollView,TouchableOpacity,Platform,PermissionsAndroid,FlatList} from 'react-native'; +import { ReactReduxContext,connect,useSelector, useDispatch } from 'react-redux'; +import { mapStateToProps,mapDispatchToProps } from '../reducers/contextProvider'; +import SQLite from 'react-native-sqlite-2'; +import {notify} from '../components/notify'; +import moment from 'moment'; +import {getDownloadJson} from '../controller/functions'; +import {get_item,set_item,clear_item} from '../components/localStorage'; +import {version,sloganline,appname,testurl,db, colors_Arr} from '../constants/constants'; +import CustomHeader from '../components/customHeader'; +import {Card, Menu, Switch} from 'react-native-paper'; +import {AntDesign} from '../components/icons'; +import { stat } from 'react-native-fs'; +import CustomLoader from '../components/CustomLoader'; +import LinearGradient from 'react-native-linear-gradient'; +import { AppTables } from '../constants/tableConstants'; +import {checkFilledSurveys, getAvailblQuery, getIfAvlbl, getIfKPIDone, getQuery, Q_GetAvailabityDefaultData, Q_getCategoryforAdditional, Q_getdefaltShareofSelf, Q_getMyDBMenuList, Q_getMyStoresMenuList, Q_getpaidvisibility, Q_getpromotionmappingList, Q_getSamplingData, Q_getSurveys, Q_MenuList} from '../constants/ConstantQueries'; + +import grey_bg_image from '../assets/performics/circle_grey.svg'; +import { SvgXml } from 'react-native-svg'; + +function DB_StoreDailyMenu(props) { + const route = useRoute(); + const ST=props.StaticText || {}; + // get all theme styles acc to current theme set + const PageTheme=GetPageTheme(props.DarkMode,route.name); + const customStyle=customStyles(props.DarkMode,route.name); + + const [StoreIntro, setStoreIntro] = useState(false); + const [StorePhotosDone, setStorePhotosDone] = useState(false); + const [StoreSKUPhotosDone, setStoreSKUPhotosDone] = useState(false); + const [StoreSKUActPhotosDone, setStoreSKUActPhotosDone] = useState(false); + const [processing, setProcessing] = useState(true); + const [loaderTitle, setLoaderTitle] = useState(); + const [isAdhocScreen, setIsAdhocScreen] = useState(false); + const [isBeatPlan, setIsBeatPlan] = useState(false); + const [storeData, setStoreData] = useState({}); + const [dailyMenu, setDailyMenu] = useState([]); + const [refreshMenuStatus, setRefreshMenuStatus] = useState(false); + const [checkAvailable, setcheckAvailable] = useState(false); + const [refreshMenuRender, setRefreshMenuRender] = useState(0); + const [isLoaded, setIsLoaded] = useState(false); + + + useEffect(() => { + setLoaderTitle(ST.Loading+'...') + let params=props.route.params? props.route.params:{}; + let storeData1=params.storeData || {}; + setStoreData(storeData1); + + getDailyMenu(storeData1,false); + const willFocusSubscription = props.navigation.addListener('focus', () => { + console.log('DB_StoreDailyMenu onfocus'); + getDailyMenu(storeData1,false); + }); + + return willFocusSubscription; + }, []); + + useEffect(() => { + console.log('AutoGoToPrev dailmenu onchange',props.AutoGoToPrev); + if(props.AutoGoToPrev==true){ + getDailyMenu(storeData,true); + } + }, [props.AutoGoToPrev]); + + + async function getDailyMenu(storeData1,isAutoBack=false){ + setProcessing(true); + console.log('getDailyMenu'); + try { + let d1=new Date(); + let d2=moment(d1).format('MM/DD/YYYY'); + let {StoreId,ChannelId,RegionId,StoreTypeId}=storeData1; + let q=await Q_getMyDBMenuList(storeData1,props); + console.log('My menu q:',q); + await db.transaction(async function (txn) { + await txn.executeSql(q,[],async function (txn2, txnres) { + if(txnres.rows.length>0){ + let arr=[]; + let allDone=true; + for(var i=0;i0; + let isDone=parseInt(KPIAVBL)>0 && parseInt(DataRowCount)>0; + data['isAvlbl']=isAvlbl; + data['isKPI_Done']=isDone; + arr.push(data); + + if(isAvlbl && !isDone){ + allDone=false; + } + + if(i==(txnres.rows.length-1)){ + setDailyMenu(arr); + setIsLoaded(true); + setProcessing(false); + console.log('isAllKPIDone dailymenu :',allDone,props.AutoGoToPrev,isAutoBack) + if(allDone==true && props.AutoGoToPrev==true && isAutoBack==true){ + // props.set_autoback({'AutoGoToPrev':true}); + setTimeout(() => { + props.navigation.goBack(); + },3000); + } + } + } + } + else{ + setProcessing(false); + } + },function (txnE,txnerr) { console.log(txnerr); setProcessing(false);},); + + }); + } catch (err) { + console.log(err); + } + } + + async function checkAvailability(storeData1,data){ + return new Promise((resolve,reject)=>{ + db.transaction(async function (txn) { + let q2=getAvailblQuery(data.ScreenName,storeData1); + if(data.ScreenName=='ADDITIONALVISI'){ + console.log('POSM query:',q2); + } + if(q2!='' && q2!=null){ + await txn.executeSql(q2,[],async function (txn2, txnres2) { + if(data.ScreenName=='ADDITIONALVISI'){ + console.log('POSM count:',txnres2.rows.length); + for(var n=0;n{ + return val; + }).catch((err)=>{ + console.log(err); + return false; + }); + } + + async function updateStatus(storeData1,data,isAvlbl){ + return new Promise((resolve,reject)=>{ + db.transaction(async function (txn) { + let q2=getQuery(data.ScreenName,storeData1); + if(q2!='' && q2!=null && isAvlbl==true){ + await txn.executeSql(q2,[],async function (txn2, txnres2) { + let isDone=await getIfKPIDone(data.ScreenName,txnres2,storeData1); + resolve(isDone); + },function (txnE,txnerr) { console.log(txnerr); resolve(false);},); + } + else{ + resolve(false); + } + }); + }).then((val)=>{ + return val; + }).catch((err)=>{ + console.log(err); + return false; + }); + + } + + + + async function checkForData(ScreenName,callback=()=>{},extraData={}){ + try { + await db.transaction(async function (txn) { + let q2=getQuery2(ScreenName,extraData); + if(q2!='' && q2!=null){ + await txn.executeSql(q2,[],async function (txn2, txnres2) { + callback(txnres2); + },function (txnE,txnerr) { console.log(txnerr); },); + } + }); + } catch (err) { + console.log(err); + } + } + + async function gotoKPITaskScreen(item){ + switch(item.ScreenName){ + case 'DBWINDOWONEAPP':{ + gotoPage('DB_Window',item); + } + return; + case 'DBPOSMONEAPP':{ + gotoPage('DB_POSM',item); + } + return; + case 'DBVISICOOLERONEAPP':{ + gotoPage('DBVisiCooler',item); + } + return; + + default:return; + } + } + + function gotoPage(screenname='',item){ + props.set_autoback({'AutoGoToPrev':false}); + console.log("db_screen_name",item) + props.navigation.navigate(screenname,{storeData:storeData,menu:item}) + } + + + function _renderLeftMenuItem(index,RowContent){ + return( + + {RowContent[0]} + + ) + } + + + function _renderRightMenuItem(item,index,RowContent){ + return( + + {RowContent[0]} + {_renderMenuItem(item,index)} + + ) + + } + + function _renderMenuItem(item,index){ + let newi=index>2?((index%3)):index; + let firstitem=(index%2==0)?true:false; + let arr=colors_Arr[newi]?colors_Arr[newi].bg:colors_Arr["0"].bg; + let unavlbl_bg=['#bfbfbf','#bfbfbf']; + let arr_new=item.isAvlbl==false?unavlbl_bg:arr; + let iconColor=colors_Arr[newi]?colors_Arr[newi].color:colors_Arr["0"].color; + const imgPath=item.MenuPath+(item.isAvlbl==false?item.GreyIcon:item.NormalIcon); + + // let m_bgimage=colors_Arr[newi]?colors_Arr[newi].bgImage:colors_Arr["0"].bgImage; + // m_bgimage=item.isAvlbl==false?grey_bg_image:m_bgimage; + + let BgImage=colors_Arr[newi]?colors_Arr[newi].bgImage:colors_Arr["0"].bgImage; + BgImage=item.isAvlbl==false?grey_bg_image:BgImage; + + + + return( + {if(item.isAvlbl!=false){gotoKPITaskScreen(item)}}}> + + + + + + + + {(imgPath!=null && imgPath!='') && } + + + {item.MenuName} + {item.isKPI_Done==true && + + } + + + ) + } + + + function _renderDailyMenu(){ + var RowContent=[]; + return( + + + {refreshMenuRender==refreshMenuRender && dailyMenu.length>0 && + dailyMenu.map((item,index)=>{ + let firstitem=(index%2==0)?true:false; + + if(firstitem){ + var content=_renderMenuItem(item,index); + RowContent=[content]; + if(index==dailyMenu.length-1){ + return _renderLeftMenuItem(index,RowContent); + } + } + else{ + return _renderRightMenuItem(item,index,RowContent); + } + + }) + } + + + + ); + } + + return ( + + {processing && } + + + + { Object.keys(storeData).length>0 && + + + + + + + + {storeData.StoreName} + + {storeData.StoreType} + + + + + + + {'Distributor Id:'} + {storeData.StoreId} + + + {'Distributor Code:'} + {storeData.StoreCode} + + + + + + + {isLoaded==true && _renderDailyMenu()} + + } + + + + ); +} + + + +export default connect(mapStateToProps, mapDispatchToProps)(DB_StoreDailyMenu); \ No newline at end of file diff --git a/PerformicsSrc/src/screens/DB_Window.js b/PerformicsSrc/src/screens/DB_Window.js new file mode 100644 index 0000000..738ae04 --- /dev/null +++ b/PerformicsSrc/src/screens/DB_Window.js @@ -0,0 +1,699 @@ +import React, { useState, useEffect, useRef } from 'react'; +import Container from '../components/container'; +import { useRoute } from '@react-navigation/native'; +import { globalStyles, customStyles, GetPageTheme } from "../styles/Global"; +import { StatusBar, Image, TextInput, View, Text, ScrollView, TouchableOpacity, Platform, PermissionsAndroid, FlatList, Alert, Animated, Keyboard } from 'react-native'; +import { ReactReduxContext, connect, useSelector, useDispatch } from 'react-redux'; +import { mapStateToProps, mapDispatchToProps } from '../reducers/contextProvider'; +import { notify } from '../components/notify'; +import moment from 'moment'; +import { getDownloadJson, getKPIFields, marktext1, marktext2, resizeImage, restore_ImageWithMetaData, validateNumber } from '../controller/functions'; +import { get_item, set_item, clear_item } from '../components/localStorage'; +import { version, sloganline, appname, testurl, db, colors_Arr, common_ImagePath, ImageFolderPath } from '../constants/constants'; +import CustomHeader from '../components/customHeader'; +import { Card, Menu, Switch } from 'react-native-paper'; +import { AntDesign, Entypo, FontAwesome, Fontisto, MaterialCommunityIcons } from '../components/icons'; +import CustomLoader from '../components/CustomLoader'; +import LinearGradient from 'react-native-linear-gradient'; +import { AppTables } from '../constants/tableConstants'; +import * as RNFS from 'react-native-fs'; +import GradientButton from '../components/gradientButton'; +import { ConfirmSaveAlert } from '../components/alert'; +import CustomCamera from '../components/Camera'; +import ImageViewer from 'react-native-image-zoom-viewer'; +import CameraImg from '../assets/performics/camera_front_image.svg' + +function DB_Window(props) { + const route = useRoute(); + const ST = props.StaticText || {}; + // get all theme styles acc to current theme set + const PageTheme = GetPageTheme(props.DarkMode, route.name); + const customStyle = customStyles(props.DarkMode, route.name); + const animatedChoice = useRef(new Animated.Value(0)).current; + + const [processing, setProcessing] = useState(true); + const [loaderTitle, setLoaderTitle] = useState(); + const [isAdhocScreen, setIsAdhocScreen] = useState(false); + const [storeData, setStoreData] = useState({}); + const [currentMenu, setCurrentMenu] = useState({}); + const [rerenderdata, setrerenderdata] = useState(0); + const [rerenderdata2, setrerenderdata2] = useState(0); + const [rerenderdata3, setrerenderdata3] = useState(0); + const [rerenderdata4, setrerenderdata4] = useState(0); + + const [hasUnsavedChanges, setHasUnsavedChanges] = useState(false); + + const [dateValue, setDateValue] = useState(''); + const [WindowData, setWindowData] = useState([]); + const [reasons_list, setReasons_list] = useState([]); + const [Windows, setWindows] = useState([]); + const [globalWindows, setGlobalWindows] = useState([]); + const [show_zoomImage, setShow_zoomImage] = useState(false); + const [refImageIndex, setrefImageIndex] = useState(0); + const [showAlert, setShowAlert] = useState(false); + const [zoomImageUrl, setZoomImageUrl] = useState([]); + const [showCamera, setShowCamera] = useState(false); + const [getImageProps, setGetImageProps] = useState({}); + const zoomView = useRef(null); + const [showRating, setShowRating] = useState(false); + const [RatingQtn, setRatingQtn] = useState({}); + const [RatingWindow, setRatingWindow] = useState({}); + const [RatingOrder, setRatingOrder] = useState([]); + const [searchedItem, setSearchedItem] = useState(''); + const [KPIFields, setKPIFields] = useState([]); + const [showSwitchCamera, setShowSwitchCamera] = useState(false); + + const d1 = new Date(); + const d2 = moment(d1).format('MM/DD/YYYY'); + + + useEffect(() => { + setLoaderTitle(ST.Loading + '...') + let params = props.route.params ? props.route.params : {}; + let storeData1 = params.storeData || {}; + let menu1 = params.menu || {}; + + setStoreData(storeData1); + setCurrentMenu(menu1); + + getData(storeData1, menu1); + + const unsubscribe = props.navigation.addListener('beforeRemove', onBeforeRemove); + + return function cleanup() { + return unsubscribe; + }; + }, []); + + useEffect(() => { + const unsubscribe = props.navigation.addListener('beforeRemove', onBeforeRemove); + return unsubscribe; + }, [hasUnsavedChanges]); + + useEffect(() => { + const unsubscribe = props.navigation.addListener('beforeRemove', onBeforeRemove); + return unsubscribe; + }, [showCamera]); + + function onBeforeRemove(e) { + if (showCamera == true) { + e.preventDefault(); + setShowCamera(false); + } + else { + if (hasUnsavedChanges == true) { + e.preventDefault(); // Prevent default behavior of leaving the screen + onRemoveScreen(e); + } + else { + return; + } + } + } + + function onRemoveScreen(e) { + Alert.alert( + "", + ST.Doyoureallywanttoexitthescreen, + [ + { + text: ST.Cancel, + onPress: () => { }, + style: "cancel" + }, + { text: ST.OK, onPress: () => { setHasUnsavedChanges(false); props.navigation.dispatch(e.data.action); } } + ] + ); + } + + + async function getData(storeData1, menu1) { + try { + let { StoreId, ChainId, StateId, StoreTypeId } = storeData1; + + let AllKPIFields = await getKPIFields(menu1); + setKPIFields(AllKPIFields); + + // set switch camera flag as defined in mapping menu flag (if exists) + let SwitchingCameraI = AllKPIFields.findIndex(i => i.KPIFieldName == 'SwitchingCamera'); + let SwitchingCameraObj = SwitchingCameraI >= 0 ? AllKPIFields[SwitchingCameraI] : {}; + let SwitchingCamera = SwitchingCameraI >= 0 ? SwitchingCameraObj['KPIFieldEnable'] : false; + setShowSwitchCamera(SwitchingCamera); + + + await db.transaction(async function (txn) { + + // check if data exists + let selectlist = ` w.DISTRIBUTOR_ID as DistributorId,w.WINDOW_HEADER_ID as WindowHeaderId,wd.WindowDefinitionId,wd.WindowId,wd.WindowName,wd.WindowTable,wd.WindowField,wd.WindowValue,wd.ChildName,wd.WindowRefImage,w.IS_PRESENT as IsPresent,w.WINDOW_IMAGE as WindowImage,w.STOCK_QTY as StockQty`; + let join = ` inner join Master_WindowDefinition wd on w.WINDOW_DEFINITION_ID=wd.WindowDefinitionId `; + let q = ` Select ${selectlist} from ${AppTables.DB_WINDOW_HDR_DATA} w ${join} where w.DISTRIBUTOR_ID='${StoreId}' `; + + // else pick data from masters + let selectlist2 = ` db.DistributorId,w.WindowDefinitionId,w.WindowId,w.WindowName,w.WindowTable,w.WindowField,w.WindowValue,w.ChildName,w.WindowRefImage,'' as IsPresent,'' as WindowImage,'' as StockQty`; + let q2 = `Select * from (select Distinct ${selectlist2} from Master_Distributor db + INNER JOIN Mapping_JourneyPlan jcp on db.DistributorId=jcp.DistributorId + INNER JOIN Mapping_StoreWindow MW on MW.StoreId=jcp.StoreId + INNER JOIN Master_WindowDefinition w on w.WindowDefinitionId=MW.WindowDefinitionId + + UNION + + select Distinct ${selectlist2} from Master_Distributor db + INNER JOIN Adhoc_JourneyPlan jcp on db.DistributorId=jcp.DistributorId + INNER JOIN Mapping_StoreWindow MW on MW.StoreId=jcp.StoreId + INNER JOIN Master_WindowDefinition w on w.WindowDefinitionId=MW.WindowDefinitionId + + `+ (props.ShowNonMerList == true ? ` + UNION + + select Distinct ${selectlist2} from Master_Distributor db + INNER JOIN NonMerchandising_JourneyPlan jcp on db.DistributorId=jcp.DistributorId + INNER JOIN Mapping_StoreWindow MW on MW.StoreId=jcp.StoreId + INNER JOIN Master_WindowDefinition w on w.WindowDefinitionId=MW.WindowDefinitionId + `: '') + + (props.ShowNonProgram == true ? ` + UNION + + select Distinct ${selectlist2} from Master_Distributor db + INNER JOIN NonProgram_JourneyPlan jcp on db.DistributorId=jcp.DistributorId + INNER JOIN Mapping_StoreWindow MW on MW.StoreId=jcp.StoreId + INNER JOIN Master_WindowDefinition w on w.WindowDefinitionId=MW.WindowDefinitionId + + `: '') + + (props.ShowStoreSearch == true ? ` + UNION + + select Distinct ${selectlist2} from Master_Distributor db + INNER JOIN StoreSearch_JourneyPlan jcp on db.DistributorId=jcp.DistributorId + INNER JOIN Mapping_StoreWindow MW on MW.StoreId=jcp.StoreId + INNER JOIN Master_WindowDefinition w on w.WindowDefinitionId=MW.WindowDefinitionId + + `: '') + + (props.ShowBeatPlanList == true ? ` + UNION + + select Distinct ${selectlist2} from Master_Distributor db + INNER JOIN JourneyPlan_RouteWise jcp on db.DistributorId=jcp.DistributorId + INNER JOIN Mapping_StoreWindow MW on MW.StoreId=jcp.StoreId + INNER JOIN Master_WindowDefinition w on w.WindowDefinitionId=MW.WindowDefinitionId + `: '') + + ` order by db.DistributorId,w.WindowDefinitionId) as db Where db.DistributorId='${StoreId}'`; + + + console.log("db_window_query", q) + await txn.executeSql(q, [], async function (txn2, txnres2) { + console.log("db_window_query_length", txnres2.rows.length) + if (txnres2.rows.length > 0) { + let arr = []; let images = [], allWindowsData = []; + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + + let animatedChoice = new Animated.Value((data.IsPresent == '1' || data.IsPresent == 1 ? 1 : 0)); + data.animatedChoice = animatedChoice; + + + let isPresent = data.IsPresent == '1' || data.IsPresent == 1 ? 1 : 0; + let imgObj = { imgIndex: (i + 1), url: data.WindowRefImage, props: {} } + images.push(imgObj); + + let Image1 = data.WindowImage != null ? data.WindowImage : ''; + let Image1Path = Image1 != '' ? 'file://' + ImageFolderPath + menu1.ScreenName + "/" + Image1 : ''; + + let windowDataObj = { 'WindowId': data.WindowId, 'WindowDefinitionId': data.WindowDefinitionId, 'Image1': Image1, 'Image1Path': Image1Path, 'isPresent': isPresent, 'StockQty': (data.StockQty || '') }; + + arr.push(data); + + allWindowsData.push(windowDataObj); + if (i == txnres2.rows.length - 1) { + console.log("datawindow",arr) + setWindowData(allWindowsData); + setWindows(arr); + setGlobalWindows(arr); + setZoomImageUrl(images); + setProcessing(false); + } + } + } + else { + console.log("db_window_query2", q2) + await txn.executeSql(q2, [], async function (txn2, txnres2) { + console.log("db_window_query_length2", txnres2.rows.length) + if (txnres2.rows.length > 0) { + let arr = [], images = [], allWindowsData = []; + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + let animatedChoice = new Animated.Value(0); + data.animatedChoice = animatedChoice; + + let imgObj = { imgIndex: (i + 1), url: data.WindowRefImage, props: {} } + images.push(imgObj); + + let windowDataObj = { 'WindowId': data.WindowId, 'WindowDefinitionId': data.WindowDefinitionId }; + + arr.push(data); + allWindowsData.push(windowDataObj); + if (i == txnres2.rows.length - 1) { + setWindowData(allWindowsData); + setWindows(arr); + setGlobalWindows(arr); + setZoomImageUrl(images); + setProcessing(false); + } + } + } + else { + setProcessing(false); + } + }, function (txnE, txnerr) { console.log(txnerr); setProcessing(false); },); + } + }, function (txnE, txnerr) { console.log(txnerr); setProcessing(false); },); + + }); + } catch (err) { + console.log(err); + } + } + + + + + async function getImage(imgdata) { + let window = getImageProps.window || {}; + if (typeof imgdata == 'object' && imgdata.errorCode == 'camera_unavailable') { + notify(ST.Cameraunavailable); + } + else if (typeof imgdata == 'object' && imgdata.uri != null) { + const img = imgdata; + const imgurl = img.uri, imgWidth = img.width, imgHeight = img.ExtendedHeight; + let isImgFromGallery = img.fromGallery != null ? img.fromGallery : false; + let picture_clickedd = isImgFromGallery == true ? img.datetime : new Date(); + + let picture_clicked_time = moment(picture_clickedd).format('MM-DD-YYYY HH:mm:ss') + let picture_clicked_time_for_pic_name = moment(picture_clickedd).format('MMDDYYYY_HHmmss') + + console.log("time", picture_clicked_time); + console.log("time1", picture_clicked_time_for_pic_name); + let calculate_tym_date_for_filename = picture_clicked_time_for_pic_name; + let calculate_tym_date_over_img = picture_clicked_time; + + let filename = storeData.StoreId + '_' + window.WindowDefinitionId + '_' + window.WindowId + '_' + (props.UserId || '') + '_DBWindowImg-' + calculate_tym_date_for_filename + '.jpg'; + + + const mark_text1 = calculate_tym_date_over_img; + const mark_text2 = 'Distributor Name:' + storeData.StoreName + ' | Distributor Id:' + storeData.StoreId + ' | User Id:' + storeData.EmpId + ' | Image Type: ' + currentMenu.MenuName + ' | Date:' + calculate_tym_date_over_img; + + + let allData = WindowData; + let defData = { 'WindowId': window.WindowId, 'WindowDefinitionId': window.WindowDefinitionId }; + const wind_index = allData.findIndex(i => i.WindowId == window.WindowId && i.WindowDefinitionId == window.WindowDefinitionId); + let wind = wind_index >= 0 ? allData[wind_index] : defData; + + let image_key = 'Image1'; + let image_key_path = 'Image1Path'; + wind[image_key] = filename; + + let imagePath = `${ImageFolderPath + currentMenu.ScreenName}/${filename}`; + RNFS.copyFile(imgurl, imagePath) + .then(async (resn) => { + // render data with clicked image + let uri = 'file://' + imagePath; + console.log('image marker', uri); + + wind[image_key_path] = uri; + wind_index >= 0 ? allData[wind_index] = wind : allData.push(wind); + setWindowData(allData); + setHasUnsavedChanges(true); + setrerenderdata(!rerenderdata); + + // add metdata then resize image and restored back to the imagePath + let restore_data = { "destFilePath": imagePath, "imgurl": imgurl, imgWidth, imgHeight, mark_text1, mark_text2 } + let is_restored = await restore_ImageWithMetaData(restore_data, imgdata); + console.log("image restored:", is_restored); + }) + .catch(err => { + console.log('ERROR: image file write failed!!!'); + console.log(err.message, err.code); + }); + } + } + + async function openCamera(window) { + setGetImageProps({ 'window': window }); + setShowCamera(true); + } + + + async function onSubmitData() { + let isvalid = await validate(); + if (isvalid) { + Keyboard.dismiss(); + setShowAlert(true); + } + } + + async function saveData() { + setHasUnsavedChanges(false); + setShowAlert(false); + setLoaderTitle(ST.SavingData + '...'); + setProcessing(true); + let d1n = new Date(); + let d3 = moment(d1n).format('MM/DD/YYYY'); + try { + let { StoreId, ChainId, StateId, StoreTypeId } = storeData; + await db.transaction(async function (txn) { + + // remove old data + await txn.executeSql(`DELETE FROM ${AppTables.DB_WINDOW_HDR_DATA} WHERE DISTRIBUTOR_ID='${StoreId}' and VISIT_DATE='${d2}' `, [], async function (txn2, txnres) { + console.log('window hdr data deleted'); + }, function (txnE, txnerr) { console.log(txnerr); },); + + // add data + var values = '', childV = ''; + for (const wi in Windows) { + const window = Windows[wi]; + + const wind = WindowData.find(i => i.WindowId == window.WindowId && i.WindowDefinitionId == window.WindowDefinitionId); + let isPresent = wind.isPresent != null && wind.isPresent != '' ? wind.isPresent : '0'; + let Image1 = isPresent==1 ? wind.Image1 != null ? wind.Image1 : '' : ''; + let Image1Path = wind.Image1Path != null ? wind.Image1Path : ''; + + + let WINDOW_HEADER_ID = 'WIN' + wi + (Math.floor(Math.random() * 1000) + 1); + let { WindowDefinitionId, WindowId, WindowName, WindowTable, WindowField, WindowValue, ChildName } = window; + let StockQty = isPresent==1 ? wind.StockQty != null ? wind.StockQty : '' : ''; + + //console.log("isPresent",isPresent) + + values += values != '' ? ' , ' : ''; + values += ` ('${WINDOW_HEADER_ID}','${StoreId}','${d3}','${WindowDefinitionId}','${WindowId}','${WindowName}','${WindowTable}','${WindowField}','${WindowValue}','${ChildName}','${isPresent}','${Image1}','${StockQty}','${d3}') `; + } + + let add_hdr_data = `INSERT INTO ${AppTables.DB_WINDOW_HDR_DATA}(WINDOW_HEADER_ID,DISTRIBUTOR_ID,VISIT_DATE,WINDOW_DEFINITION_ID,WINDOW_ID,WINDOW_NAME,WINDOW_TABLE,WINDOW_FIELD,WINDOW_VALUE,CHILD_NAME,IS_PRESENT,WINDOW_IMAGE,STOCK_QTY,ADDED_DATE) VALUES ${values} `; + + await txn.executeSql(add_hdr_data, [], async function (txn2, txnres) { + console.log('window header data added'); + setProcessing(false); notify('Window updated successfully!'); + props.navigation.goBack(); + }, function (txnE, txnerr) { console.log(txnerr); setProcessing(false); notify('Cannot add window data'); },); + }); + } catch (err) { + console.log(err); + } + } + + async function validate() { + let isValid = true; + return new Promise((resolve, reject) => { + for (const wi in Windows) { + const window = Windows[wi]; + const wind = WindowData.find(i => i.WindowId == window.WindowId && i.WindowDefinitionId == window.WindowDefinitionId); + let isPresent = wind.isPresent != null && wind.isPresent != '' ? wind.isPresent : '0'; + let Image1 = wind.Image1 != null ? wind.Image1 : ''; + let Image1Path = wind.Image1Path != null ? wind.Image1Path : ''; + let StockQty = wind.StockQty != null ? wind.StockQty : ''; + + if (isPresent == '1') { + if (StockQty == '') { + notify(`Please enter stock for ${window.WindowName}`, 'LONG'); + resolve(false); return; + } + else if (Image1 == '') { + notify(`${ST.Pleaseclickallimagesfor} ${window.WindowName}`, 'LONG'); + resolve(false); return; + } + } + else { + + } + + if (wi == (Windows.length - 1)) { + resolve(true); return; + } + + } + + }).then((val) => { return val }) + .catch((err) => { console.log(err); return false }); + + } + + + + function onChoiceSelect(item, val, key, animatedChoice) { + var val1 = 0; + val == 1 ? val1 = 1 : ''; + if (animatedChoice != null) { + Animated.timing(animatedChoice, { + toValue: val1, + duration: 400, + useNativeDriver: false, + }).start(); + } + onWindowDataChange(item, val, key) + } + + function onWindowDataChange(item, val, key, type = '') { + console.log("data---WindowonChange",key,val +"-------------" + JSON.stringify(item)) + if (val != '') { + let isValid = validateNumber(val, type); + if (!isValid) { + return; + } + } + let allData = WindowData; + let defData = { 'WindowId': item.WindowId, 'WindowDefinitionId': item.WindowDefinitionId }; + const win_index = allData.findIndex(i => i.WindowId == item.WindowId && i.WindowDefinitionId == item.WindowDefinitionId); + let wind = win_index >= 0 ? (allData[win_index] || defData) : defData; + wind[key] = val; + + if (key == 'ReasonId') { + let rsn = reasons_list.find(r => r.ReasonId == val) || {}; + wind['Reason'] = rsn.Reason || ''; + } + + win_index >= 0 ? allData[win_index] = wind : allData.push(wind); + + setWindowData(allData); + setHasUnsavedChanges(true); + setrerenderdata(!rerenderdata); + } + + + + function onSaveCancel() { + setShowAlert(false); + } + + + + function openImageRefView(windowIndex = 0) { + setrefImageIndex(windowIndex); + setShow_zoomImage(true); + } + + + function _renderWindow() { + return ( + `window_${index.toString()}`} + renderItem={({ item, index }) => { + const window = item; + + let RefImage = window.WindowRefImage; + + const wind = WindowData.find(i => i.WindowId == window.WindowId && i.WindowDefinitionId == window.WindowDefinitionId); + let isPresent = wind.isPresent != null && wind.isPresent != '' ? wind.isPresent : '0'; + + let StockQty = wind.StockQty != null ? wind.StockQty + '' : ''; + let Image1 = wind.Image1 != null ? wind.Image1 : ''; + let Image1Path = wind.Image1Path != null ? wind.Image1Path : ''; + + + var xpos = isPresent == '1' ? -75 : 0; + if (window.animatedChoice != null) { + xpos = window.animatedChoice.interpolate({ + inputRange: [0, 1], + outputRange: [0, -75], + }); + } + + + return ( + + + + {window.WindowName} + { openImageRefView(index) }}> + + + + + + + + + {ST.IsPresent} + + + + { onChoiceSelect(window, 1, 'isPresent', window.animatedChoice) }}> + {ST.Yes} + + { onChoiceSelect(window, 0, 'isPresent', window.animatedChoice) }}> + {ST.No} + + + + + + + {(isPresent == '1') && + + + {'Stock'} + { onWindowDataChange(window, val, 'StockQty', 'numeric') }} + /> + + + + {ST.CaptureImage} + + + + {(Image1Path == '' || Image1Path == null) && + { openCamera(window) }}> + + + } + {(Image1Path != '' && Image1Path != null) && + + + { openCamera(window) }}> + + + + } + + + + + } + + + + + ); + }} + /> + ) + } + + function _renderHeader(currentIndex) { + return ( + + {`${(currentIndex + 1)}/${zoomImageUrl.length}`} + { setShow_zoomImage(false) }}> + + + + ) + } + + function FilterStores(searchedQry) { + searchedQry = searchedQry.toLowerCase(); + console.log('searchedQry', searchedQry); + let arr = []; + var arr2 = {}; + if (searchedQry != null && searchedQry != '') { + for (let i = 0; i < globalWindows.length; i++) { + let item = globalWindows[i]; + arr2 = Object.assign({ 'test': '1' }, item); + if (item.WindowName.toLowerCase().includes(searchedQry)) { + arr.push(arr2); + } + } + } + else { + arr = globalWindows; + } + + setWindows(arr); + setrerenderdata(!rerenderdata) + setrerenderdata2(!rerenderdata2) + } + + function getSearchBar() { + let isSearchEnableIndex = KPIFields.findIndex(i => i.KPIFieldName == 'SearchEnable') + let isSearchEnableKPIObj = isSearchEnableIndex >= 0 ? KPIFields[isSearchEnableIndex] : {}; + let isSearchEnable = isSearchEnableIndex >= 0 ? isSearchEnableKPIObj['KPIFieldEnable'] : false; + if (isSearchEnable == true) { + return ( + + { setSearchedItem(val); FilterStores(val) }} + /> + { FilterStores(searchedItem) }}> + + + + ) + } + else { + return ( + + ) + } + } + + return ( + + {processing && } + + {ConfirmSaveAlert(props, showAlert, onSaveCancel, saveData)} + { setShowCamera(false); getImage(imgData) }} showCamera={showCamera} onHideCamera={() => { setShowCamera(false); }} /> + + + + {getSearchBar()} + {Object.keys(storeData).length > 0 && + + {_renderWindow()} + + } + + { onSubmitData() }} /> + + + + + + {show_zoomImage && + + null} + /> + + } + + ); +} + + + +export default connect(mapStateToProps, mapDispatchToProps)(DB_Window); \ No newline at end of file diff --git a/PerformicsSrc/src/screens/DashboardReportDetail.js b/PerformicsSrc/src/screens/DashboardReportDetail.js new file mode 100644 index 0000000..a56a069 --- /dev/null +++ b/PerformicsSrc/src/screens/DashboardReportDetail.js @@ -0,0 +1,220 @@ + +import React,{useState,useEffect} from 'react'; +import Container from '../components/container'; +import { useRoute } from '@react-navigation/native'; +import { globalStyles,customStyles,GetPageTheme } from "../styles/Global"; +import {StatusBar,Image,TextInput,View,Text,ScrollView,TouchableOpacity,Platform,PermissionsAndroid,FlatList} from 'react-native'; +import { ReactReduxContext,connect,useSelector, useDispatch } from 'react-redux'; +import { mapStateToProps,mapDispatchToProps } from '../reducers/contextProvider'; +import SQLite from 'react-native-sqlite-2'; +import {notify} from '../components/notify'; +import moment from 'moment'; +import {getDownloadJson,DownloadData, getDownloadJson1, get_rowColSettings} from '../controller/functions'; +import {get_item,set_item,clear_item} from '../components/localStorage'; +import {version,sloganline,appname,testurl, db} from '../constants/constants'; +import CustomHeader from '../components/customHeader'; +import {Card} from 'react-native-paper'; +import {AntDesign, MaterialCommunityIcons} from '../components/icons'; +import { WebView } from 'react-native-webview'; +import CustomLoader from '../components/CustomLoader'; +import NoDataComponent from '../components/NoDataComponent'; +import LinearGradient from 'react-native-linear-gradient'; +import { getFolderName, getMethodName, METHODS } from '../constants/methodNames'; + +function DashboardReportDetail(props) { + const route = useRoute(); + const ST=props.StaticText || {}; + // get all theme styles acc to current theme set + const PageTheme=GetPageTheme(props.DarkMode,route.name); + const customStyle=customStyles(props.DarkMode,route.name); + + + const [processing, setProcessing] = useState(true); + const [isDataFound, setisDataFound] = useState(false); + const [AllReports, setAllReports] = useState([]); + const [aggrData, setAggrData] = useState({}); + const [cols, setcols] = useState([]); + const [colWidth, setColWidth] = useState('100%'); + const [currentReportMenu, setCurrentReportMenu] = useState({}); + const [KPIId, setKPIId] = useState(""); + + const [designation, setDesignation] = useState(''); + const d1=new Date(); + const d2=moment(d1).format('MM/DD/YYYY'); + + useEffect(() => { + let params=props.route.params? props.route.params:{}; + let ReportMenu=params.ReportData || {}; + let AdKPIId=params.AdKPIId || ""; + + setCurrentReportMenu(ReportMenu); + setKPIId(AdKPIId); + getData(ReportMenu); + }, []); + + + async function getData(ReportMenu){ + try { + let {DashboardId,DashboardName,ParentId}=ReportMenu + db.transaction(async function (txn) { + // get data for report + let q=`Select * from Master_MenuAppDashboard where ParentId='${DashboardId}' `; + console.log("Detailed reports q:",q); + txn.executeSql(q,[],async function (txn2, txnres2) { + console.log("Detailed reports count:",txnres2.rows.length); + if(txnres2.rows.length>0){ + let arr=[]; + for(var i=0;i0?report_data.filter(i=>i.AdKPIId==KPIId):[]; + let report_colWidth=reportContentObj['report_colWidth']!=null?reportContentObj['report_colWidth']:'50%'; + let report_cols=reportContentObj['report_cols']!=null?reportContentObj['report_cols']:[]; + // console.log("report_cols:",report_cols); + + return ( + + + {/* render columns */} + + {/* render header */} + + {report_cols.map((column,index)=>{ + return( + + {column.colname} + + ) + })} + + {/* render content */} + + {filtered_data.map((row,row_index)=>{ + + return( + + {report_cols.map((column,index)=>{ + let colValue=row[column.actual_colname]!=null?row[column.actual_colname]:''; + + let color_obj=get_rowColSettings(colValue,column.actual_colname,row); + + let cust_style={},bg_style={}; + if(color_obj.color!=null && color_obj.color!=''){ + bg_style["backgroundColor"]=color_obj.color; + cust_style["color"]='#fff' + } + if(color_obj.fontsize!=null && color_obj.fontsize!=''){ + cust_style["fontSize"]=color_obj.fontsize + } + if(color_obj.bold==1){ + cust_style["fontWeight"]="600" + } + return( + + {colValue} + + ) + })} + + ) + })} + + + + + + ) + } + + function _renderDashboardReports(){ + + return ( + + {AllReports.map((item,index)=>{ + console.log("report in detail page:",item); + return ( + + + {item.DashboardName} + + + {item.DashboardType=='Tabular' && + _renderTabularReport(item) + } + + + ) + })} + + ) + } + + + + return ( + + {processing && } + + + + + {currentReportMenu.DashboardName+' Detail'} + + {!props.isDataDownloaded && } + { props.isDataDownloaded==true && + + { isDataFound==false && + + {ST.NoDataAvailable} + + } + + {isDataFound==true && + + {_renderDashboardReports()} + + } + + + } + + + + + ); + } + + + +export default connect(mapStateToProps, mapDispatchToProps)(DashboardReportDetail); \ No newline at end of file diff --git a/PerformicsSrc/src/screens/DistributorList.js b/PerformicsSrc/src/screens/DistributorList.js new file mode 100644 index 0000000..2caa9bb --- /dev/null +++ b/PerformicsSrc/src/screens/DistributorList.js @@ -0,0 +1,1417 @@ +import React, { useState, useEffect, memo } from 'react'; +import Container from '../components/container'; +import { useRoute } from '@react-navigation/native'; +import { globalStyles, customStyles, GetPageTheme } from "../styles/Global"; +import { StatusBar, Image, TextInput, View, Text, ScrollView, TouchableOpacity, TouchableHighlight, Platform, PermissionsAndroid, FlatList } from 'react-native'; +import { ReactReduxContext, connect, useSelector, useDispatch } from 'react-redux'; +import { mapStateToProps, mapDispatchToProps } from '../reducers/contextProvider'; +import { notify } from '../components/notify'; +import moment from 'moment'; +import { getDownloadJson, AddStore, checkRange, UploadData2, UploadData, UpdateDistributorStatus, getKPIS, marktext1, marktext2, UploadFormData, resizeImage, restore_ImageWithMetaData } from '../controller/functions'; +import { get_item, set_item, clear_item } from '../components/localStorage'; +import { version, sloganline, appname, testurl, db, AppVersion, CoverageImagePath } from '../constants/constants'; +import CustomHeader from '../components/customHeader'; +import { AntDesign, Entypo, EvilIcons, Feather, FontAwesome, Fontisto, Ionicons, MaterialCommunityIcons } from '../components/icons'; +import CustomLoader from '../components/CustomLoader'; +import LinearGradient from 'react-native-linear-gradient'; +import NoDataComponent from '../components/NoDataComponent'; +import MapIcon from '../assets/performics/map_icon.svg'; +import CustomModal from '../components/CustomModal'; +import { AppTables } from '../constants/tableConstants'; +import { _checkLocationPermission } from '../components/geolocation'; +import Geolocation from 'react-native-geolocation-service'; +import { getAvailblQuery, getIfAvlbl, getIfKPIDone, getQuery, Q_getMyDistributorList, Q_getMyStoresList, Q_DBMenuList } from '../constants/ConstantQueries'; +import { ConfirmSaveAlert } from '../components/alert'; +import { getFolderName, getMethodName, METHODS } from '../constants/methodNames'; +import { uploadAll_DBData, uploadAllImages, uploadDBStatus } from '../constants/uploadData'; +import * as RNFS from 'react-native-fs'; + +import CameraImg2 from '../assets/performics/camera_icon.svg'; +import CustomCamera from '../components/Camera'; +import HeaderTabs from '../components/HeaderTabs'; +import DownloadDataModal from '../components/downloadDataModal'; + + + +const DistributorItem = memo((props) => { + const route = useRoute(); + const PageTheme = GetPageTheme(props.DarkMode, route.name); + const customStyle = customStyles(props.DarkMode, route.name); + const item = props.item; + + const ST = props.StaticText || {}; + + async function get_to_store_details(data) { + // data.UploadStatus = "N" + + if (data.UploadStatus == 'U') { + notify('All data already uploaded for the distributor'); + } + else if (data.UploadStatus == 'L') { + notify('Already marked not working reasons for the distributor'); + } + else if (data.UploadStatus == 'I') { + let MenuListLen = data.MenuListLen; + console.log('menuList length:', MenuListLen); + if (MenuListLen > 0) { + props.set_autoback({ 'AutoGoToPrev': false }); + props.navigation.navigate('DB_StoreDailyMenu', { storeData: data }); + } else { + notify("No menu map for this distributor!"); + } + + } + else if (data.UploadStatus == 'C') { + notify(ST.Alreadycheckedout); + } + else if (data.UploadStatus == 'D') { + notify(ST.Dataalreadyuploaded); + } + else if (data.UploadStatus == 'P') { + notify(ST.Datapartiallyuploaded); + } + else if (data.UploadStatus == 'N' || data.UploadStatus == '') { + let isChcekedIn = await checkIfAlreadyCheckdIn(); + console.log('isChcekedIn', isChcekedIn); + if (isChcekedIn == true) { + console.log("logs---------------------2") + notify('You have already checked in into other distributor', 'LONG'); + } + else { + props.setShowStoreVisitModal(true); + console.log("test js-------", true) + props.setCurrentStore(data); + } + } + + } + + async function AskForCancelCheckin(data) { + props.setCancelCheckOutStore(data); + props.setShowCancelCIModal(true); + } + + + + async function checkIfAlreadyCheckdIn() { + let d1 = new Date(); + let d2 = moment(d1).format('MM/DD/YYYY'); + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + + let join = `INNER JOIN ${AppTables.DISTRIBUTOR_CHECKIN} t2 on t2.DISTRIBUTOR_ID=t1.DistributorId `; + let q = `Select t1.* from Master_Distributor t1 ${join} where t2.VISIT_DATE='${d2}' and t1.UploadStatus='I'` + + await txn.executeSql(q, [], async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + // show from local + resolve(true); + } + else { + resolve(false); + } + }, function (Etxn, txnerr) { console.log(txnerr); resolve(false); }); + + }); + + }).then((val) => { + return val; + }).catch((err) => { + return false; + }); + } + + return ( + { get_to_store_details(item) }}> + + + + {item.StoreName} + + + + + + {'Distributor Id:'} + {item.StoreId} + + + + + {'Distributor Code:'} + {item.StoreCode} + + + + { + (item.CheckInTime != null && item.CheckInTime != '' && item?.CheckInTime != '00:00:00') && + + + + {ST.CheckIn + ':'} + + {item.CheckInTime} + + {(item.CheckOutTime != null && item.CheckOutTime != '' && item?.CheckOutTime != '00:00:00') && + + {ST.CheckOut + ':'} + {item.CheckOutTime} + + } + + } + {(item.UploadStatus != null && item.UploadStatus != '' && item.UploadStatus != 'N') && + + + + {item.UploadStatus != null && item.UploadStatus == 'L' && + + + {ST.NotWorking} + } + {item.UploadStatus != null && item.UploadStatus == 'I' && + + + {ST.CheckedIn} + } + {item.UploadStatus != null && item.UploadStatus == 'C' && + + + {ST.CheckedOut} + } + {item.UploadStatus != null && item.UploadStatus == 'P' && + + + {ST.PartiallyUploaded} + } + {item.UploadStatus != null && item.UploadStatus == 'D' && + + + {ST.DataUploaded} + } + {item.UploadStatus != null && item.UploadStatus == 'U' && + + + {ST.Uploaded} + } + + + {item.allDone == true && (item.UploadStatus == 'I') && + { props.onCheckOut ? props.onCheckOut(item) : ''; }}> + {ST.CheckOut} + + } + + } + + {item.GeoTag == 'Y' && + { props.navigation.navigate('ShowMap', { storeData: item }) }} > + + + } + {item.GeoTag == 'N' && + { }} > + + + } + + + ); +}); + +function DistributorList(props) { + const route = useRoute(); + + const ST = props.StaticText || {}; + + // get all theme styles acc to current theme set + const PageTheme = GetPageTheme(props.DarkMode, route.name); + const customStyle = customStyles(props.DarkMode, route.name); + const [loaderTitle, setLoaderTitle] = useState(); + const [processing, setProcessing] = useState((props.isDataDownloaded ? true : false)); + const [isAdhocScreen, setIsAdhocScreen] = useState(false); + const [nodataFound, setNodataFound] = useState(false); + const [showStoreVisitModal, setShowStoreVisitModal] = useState(false); + const [showGeoTagModal, setShowGeoTagModal] = useState(false); + const [showDistanceModal, setShowDistanceModal] = useState(false); + const [currentStore, setCurrentStore] = useState({}); + const [storeDistance, setStoreDistance] = useState('0 M'); + const [storeDistanceinM, setStoreDistanceinM] = useState(0); + const [showAlert, setShowAlert] = useState(false); + const [checkOutStore, setCheckOutStore] = useState({}); + const [rerenderdata, setrerenderdata] = useState(false); + let [state, setState] = useState({ storeList: [] }); + const [globalStorelist, setGlobalStorelist] = useState([]); + const [cancelCheckOutStore, setCancelCheckOutStore] = useState({}); + const [showCancelCIModal, setShowCancelCIModal] = useState(false); + const [searchedItem, setSearchedItem] = useState(''); + + + const [CheckOutImage, setCheckOutImage] = useState(''); + const [CheckOutImagePath, setCheckOutImagePath] = useState(''); + const [CheckOutImageModal, setCheckOutImageModal] = useState(false); + const [CheckOutLoc, setCheckOutLoc] = useState({}); + const [showImageSaveOp, setShowImageSaveOp] = useState(true); + const [showCamera, setShowCamera] = useState(false); + const [DBCO_GeoFenceEnable, setDBCO_GeoFenceEnable] = useState(false); + const [DBCO_GeoFenceRadius, setDBCO_GeoFenceRadius] = useState(''); + + + const [uploadedCount, setUploadedCount] = useState(0); + const [TotalUpCount, setTotalUpCount] = useState(0); + const [startUploading, setStartUploading] = useState(false); + const [UploadingSubText, setUploadingSubText] = useState(""); + const [UploadingText, setUploadingText] = useState("Uploading Data..."); + const [showProgresssBar, setshowProgresssBar] = useState(false); + + + + useEffect(() => { + setLoaderTitle(ST.Loading + '...'); + + console.log('props.isDataDownloaded in storelist:', props.isDataDownloaded); + + let CO_GeoFenceEnable = props.DBCO_GeoFenceEnable != null ? props.DBCO_GeoFenceEnable : false; + let CO_GeoFenceRadius = props.DBCO_GeoFenceRadius != null ? props.DBCO_GeoFenceRadius : ''; + setDBCO_GeoFenceEnable(CO_GeoFenceEnable); + setDBCO_GeoFenceRadius(CO_GeoFenceRadius); + + getData(); + + const unsubscribe = props.navigation.addListener('beforeRemove', onBeforeRemove); + + const unsubscribeFocus = props.navigation.addListener('focus', () => { + checkLocalData(); + }); + + return function cleanup() { + unsubscribeFocus(); + return unsubscribe; + }; + }, []); + + useEffect(() => { + const unsubscribe = props.navigation.addListener('beforeRemove', onBeforeRemove); + return unsubscribe; + }, [showCamera]); + + function onBeforeRemove(e) { + if (showCamera == true) { + e.preventDefault(); + setShowCamera(false); + } + else { + return; + } + } + + + + async function calLocatDistance() { + if (currentStore.Latitude != '' && currentStore.Latitude != null) { + const hasPermission = await _checkLocationPermission(); + if (hasPermission == true) { + Geolocation.getCurrentPosition( + async (position) => { + let loc = { lat: position.coords.latitude, lng: position.coords.longitude }; + + var distance = checkRange(loc.lat, loc.lng, currentStore.Latitude, currentStore.Longitude); + console.log('distance:', distance); + let dinKM = (distance / 1000); + let distanceinM = (distance == '' || distance == null || isNaN(distance)) ? ' 0 m' : (dinKM > 1 ? dinKM.toFixed(1) + ' Km' : distance + ' m'); + setStoreDistance(distanceinM); + setStoreDistanceinM(distance); + + if (props.DBCI_GeoFenceEnable == true && distance > props.DBCI_GeoFenceRadius) { + setShowDistanceModal(true); + } + else { + props.navigation.navigate('DistributorCheckIn', { storeData: currentStore }); + } + }, + (error) => { + notify(ST.Cannotgetuserposition); + }, + { enableHighAccuracy: true, distanceFilter: 0, interval: 1000, fastestInterval: 2000 } + ); + } + else { + notify(ST.Pleaseallowlocationpermission); + } + } + else { + notify(ST.Storelocationnotavailable); + } + + } + + + async function getData() { + let d1 = new Date(); + let d2 = moment(d1).format('MM/DD/YYYY'); + + let token = await get_item('loginToken'); + let loginInfo = await get_item('loginInfo'); + const loginDetails = JSON.parse(loginInfo); + // let params=props.route.params? props.route.params:{}; + + let myDistributorsListQ = await Q_getMyDistributorList(props); + console.log('myDistributorsListQ:', myDistributorsListQ); + + let checkInData = await checkIfCheckInAvlbl(); + console.log('checkInData', checkInData); + if (checkInData != null && checkInData.DistributorId != null && checkInData.IsCheckInAvlbl == 0) { + await restoreCheckIn(checkInData); + } + + checkLocalData(); + } + + + + async function checkLocalData() { + let d1 = new Date(); + let d2 = moment(d1).format('MM/DD/YYYY'); + + let token = await get_item('loginToken'); + let loginInfo = await get_item('loginInfo'); + const loginDetails = JSON.parse(loginInfo); + // let params=props.route.params? props.route.params:{}; + + let myDistributorsListQ = await Q_getMyDistributorList(props); + console.log('myDistributorsListQ:', myDistributorsListQ); + + + await db.transaction(async function (txn) { + await txn.executeSql(myDistributorsListQ, [], async function (txn2, txnres2) { + console.log('distr:', txnres2.rows.length); + if (txnres2.rows.length > 0) { + // show from local + var storeArr = []; + for (var i = 0; i < txnres2.rows.length; i++) { + let sdata = txnres2.rows.item(i); + let { InTime, OutTime, UploadStatus, StoreId, MID, MenuCount, MenuDoneCount, StoreName } = sdata; + + if (InTime != null && InTime != "" && InTime != "00:00:00") { + sdata.CheckInTime = InTime; + } else { + let time = sdata.CheckInTime != null && sdata.CheckInTime != '' ? moment(sdata.CheckInTime, "MM/DD/YYYY HH:mm:ss").format('HH:mm:ss') : ''; + let time2 = sdata.CheckOutTime != null && sdata.CheckOutTime != '' ? moment(sdata.CheckOutTime, "MM/DD/YYYY HH:mm:ss").format('HH:mm:ss') : ''; //new Date(sdata.CheckOutTime) + let In_Time = (time == '' && UploadStatus != '' && UploadStatus != 'N') ? InTime : time; + sdata.CheckInTime = In_Time; + } + + if (OutTime != null && OutTime != "" && OutTime != "00:00:00") { + sdata.CheckOutTime = OutTime; + } else { + let time2 = sdata.CheckOutTime != null && sdata.CheckOutTime != '' ? moment(sdata.CheckOutTime, "MM/DD/YYYY HH:mm:ss").format('HH:mm:ss') : ''; //new Date(sdata.CheckOutTime) + let Out_Time = (time2 == '' && UploadStatus != '' && UploadStatus != 'N' && UploadStatus != 'I') ? OutTime : time2; + sdata.CheckOutTime = Out_Time; + } + + // let time = sdata.CheckInTime != null && sdata.CheckInTime != '' ? moment(new Date(sdata.CheckInTime)).format('HH:mm:ss') : ''; + // let time2 = sdata.CheckOutTime != null && sdata.CheckOutTime != '' ? moment(new Date(sdata.CheckOutTime)).format('HH:mm:ss') : ''; + // let In_Time = (time == '' && UploadStatus != '' && UploadStatus != 'N') ? InTime : time; + // let Out_Time = (time2 == '' && UploadStatus != '' && UploadStatus != 'N' && UploadStatus != 'I') ? OutTime : time2; + // sdata.CheckInTime = In_Time; + // sdata.CheckOutTime = Out_Time; + + let allDone = MenuCount != null && MenuDoneCount != null && MenuCount == MenuDoneCount; + sdata.allDone = allDone; + sdata.MenuListLen = MenuCount; + console.log('MenuCount:', MenuCount); + storeArr.push(sdata); + + if (i == (txnres2.rows.length - 1)) { + setState({ storeList: storeArr }); + setGlobalStorelist(storeArr); + setProcessing(false); + } + } + } + else { + setProcessing(false); notify(ST.Nodatafound); setNodataFound(true); + } + }, function (Etxn, txnerr) { console.log(txnerr); setProcessing(false); notify(ST.Nodatafound); setNodataFound(true); }); + }); + + } + + async function checkIfCheckInAvlbl() { + console.log('checkIfCheckInAvlbl'); + let d1 = new Date(); + let d2 = moment(d1).format('MM/DD/YYYY'); + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + + let join = `LEFT OUTER JOIN ${AppTables.DISTRIBUTOR_CHECKIN} t2 on t2.DISTRIBUTOR_ID=t1.DistributorId and t2.VISIT_DATE='${d2}' `; + let q = `Select t1.*,(CASE WHEN t2.DISTRIBUTOR_ID is null THEN 0 ELSE 1 END ) as IsCheckInAvlbl from Master_Distributor t1 ${join} where t1.UploadStatus='I'` + + await txn.executeSql(q, [], async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + // show from local + let data = txnres2.rows.item(0); + let { DistributorId } = data; + console.log('data:', data); + resolve(data); + } + else { + resolve({}); + } + }, function (Etxn, txnerr) { console.log(txnerr); resolve({}); }); + + }); + + }).then((val) => { + return val; + }).catch((err) => { + return {}; + }); + } + + async function restoreCheckIn(item) { + console.log('restoreCheckIn'); + let d1 = new Date(); + let d2 = moment(d1).format('MM/DD/YYYY'); + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + + let { DistributorId, DMID, Latitude, Longitude, UploadStatus, InTime, OutTime } = item; + let JcpType = 'Master_Distributor'; + + let In_Time = (InTime != '' && InTime != null && InTime != '00:00:00' && InTime != '00:00') ? moment(d2 + ' ' + InTime).format('MM/DD/YYYY HH:mm:ss') : ''; + let Out_Time = (OutTime != '' && OutTime != null && OutTime != '00:00:00' && OutTime != '00:00') ? moment(d2 + ' ' + OutTime).format('MM/DD/YYYY HH:mm:ss') : ''; + let CHECKOUT_TIME = (Out_Time != '' && Out_Time != null) ? Out_Time : In_Time; + + + // add storeCheckin data + let q2 = `delete from ${AppTables.DISTRIBUTOR_CHECKIN} where DISTRIBUTOR_ID='${DistributorId}' and VISIT_DATE='${d2}' `; + let values2 = ` ('${DistributorId}','${d2}','${Latitude}','${Longitude}','${In_Time}','','${Out_Time}','','','${d2}')`; + let insert_q2 = ` INSERT INTO ${AppTables.DISTRIBUTOR_CHECKIN}(DISTRIBUTOR_ID,VISIT_DATE,LATITUDE,LONGITUDE,CHECKIN_TIME,CHECKIN_IMAGE,CHECKOUT_TIME,CHECKOUT_IMAGE,REMARK,ADDED_DATE) values ${values2}`; + + await txn.executeSql(q2, [], async function (txn2, txnres4) { + console.log('removed'); + await txn.executeSql(insert_q2, [], async function (txn2, txnres5) { + console.log('checkin data added'); + resolve(true); + }, function (Etxn, txnerr) { console.log(txnerr); resolve(false); }); + }, function (Etxn, txnerr) { console.log(txnerr); resolve(false); }); + + }); + + }).then((val) => { + return val; + }).catch((err) => { + return false; + }); + } + + + async function getMenuList(storeData1) { + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + let q = Q_DBMenuList(storeData1); + await txn.executeSql(q, [], async function (txn2, txnres) { + if (txnres.rows.length > 0) { + let arr = [];//txnres.rows.raw(); + // resolve(arr); + for (var i = 0; i < txnres.rows.length; i++) { + let data = txnres.rows.item(i); + arr.push(data); + if (i == (txnres.rows.length - 1)) { + resolve(arr); + } + } + } + else { + resolve([]) + } + }, function (txnE, txnerr) { console.log(txnerr); resolve([]); },); + }); + }).then((val) => { + return val; + }).catch((err) => { + console.log('') + return [] + }) + } + + + + + async function checkAvailability(storeData1, data) { + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + let q2 = getAvailblQuery(data.ScreenName, storeData1); + if (q2 != '' && q2 != null) { + await txn.executeSql(q2, [], async function (txn2, txnres2) { + let isAvlbl = getIfAvlbl(data.ScreenName, txnres2, storeData1); + resolve(isAvlbl); + }, function (txnE, txnerr) { console.log(txnerr); resolve(false); },); + } + else { + let isAvlbl = getIfAvlbl(data.ScreenName, {}, storeData1); + resolve(isAvlbl); + } + }); + }).then((val) => { + return val; + }).catch((err) => { + console.log(err); + return false; + }); + } + + + async function updateStatus(storeData1, data, isAvlbl) { + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + let q2 = getQuery(data.ScreenName, storeData1); + if (q2 != '' && q2 != null && isAvlbl == true) { + await txn.executeSql(q2, [], async function (txn2, txnres2) { + let isDone = await getIfKPIDone(data.ScreenName, txnres2, storeData1); + resolve(isDone); + + }, function (txnE, txnerr) { console.log(txnerr); resolve(false); },); + } + else { + resolve(false); + } + }); + }).then((val) => { + return val; + }).catch((err) => { + console.log(err); + return false; + }); + + } + + async function onCheckOut(storeData1) { + // let isAlldone=await getDailyMenu(storeData1); + if (storeData1.allDone == true) { + setCheckOutStore(storeData1); + setShowAlert(true); + } + else { + notify(ST.PleasefillallKPI, false); + } + } + + function onSaveCancel() { + setShowAlert(false); + } + + + + + async function getLocOnCheckout() { + setShowAlert(false); + setLoaderTitle(ST.Gettinglocation + '...'); + setProcessing(true); + + Geolocation.getCurrentPosition( + async (position) => { + let { latitude, longitude } = position.coords; + let loc = { lat: latitude, lng: longitude }; + var distance = checkRange(loc.lat, loc.lng, checkOutStore.Latitude, checkOutStore.Longitude); + console.log('COut distance:', distance); + setProcessing(false); + if (DBCO_GeoFenceEnable == true) { + if (DBCO_GeoFenceRadius != '' && distance > DBCO_GeoFenceRadius) { + notify('You cannot checkout! You are not within the allowed distance from the distributor ' + DBCO_GeoFenceRadius + ' m') + } else { + checkOutAfterLoc(loc); + } + }else { + checkOutAfterLoc(loc); + } + }, + (error) => { + notify(ST.Cannotgetuserposition); + setProcessing(false); + }, + { enableHighAccuracy: true, distanceFilter: 0, interval: 1000, fastestInterval: 2000 } + ); + } + + async function checkOutAfterLoc(loc) { + let CheckOut_PhotoReq = props.CheckOut_PhotoReq != null ? props.CheckOut_PhotoReq : false; + if (CheckOut_PhotoReq) { + setCheckOutLoc(loc); + setShowAlert(false); + setCheckOutImageModal(true); + } + else { + UpdateCheckOutStatus(loc); + } + } + + async function UpdateCheckOutStatus(loc) { + setTotalUpCount(0); + setshowProgresssBar(false); + setUploadingText(ST.UpdatingCheckoutStatus + '...'); + setStartUploading(true); + let { StoreId, MID } = checkOutStore; + let CheckOut_PhotoReq = props.CheckOut_PhotoReq != null ? props.CheckOut_PhotoReq : false; + let d = new Date(); + let d2 = moment(d).format('MM/DD/YYYY'); + let loginInfo = await get_item('loginInfo'); + const loginDetails = JSON.parse(loginInfo); + + let data1 = { + "UserId": loginDetails.UserId, + "DistributorId": StoreId, + "VisitDate": d2, + "CheckOutImage": CheckOut_PhotoReq == true ? CheckOutImage : '', + } + + var data2 = new FormData(); + data2.append('file', { + uri: CheckOutImagePath, + type: 'image/jpg', + name: CheckOutImage, + }); + + data2.append('Foldername', 'DBCoverageImages'); + data2.append('Path', d2); + const url = props.baseurl + getMethodName(METHODS.DISTRIBUTOR_CHECKOUT); + const url1 = (props.imageUploadUrl || URL_IMAGE) + getMethodName(METHODS.UPLOADIMAGES_METHOD); + console.log(url, data1); + await UploadData2(url, data1) + .then(async (res) => { + console.log('DB CheckOutSup1:', res, ' --- Data1 :',data1 + "---Error--",res.error); + if (!res.error) { + if (res == 1) { + //Check out completed + if (CheckOut_PhotoReq) { + //Upload Image + await UploadFormData(url1, data2) + .then(async (res1) => { + console.log('checkout image upload:', res1); + }) + .catch((err) => { + console.log(err); + }); + } + let data = { checkout_image: '' }; + const isCheckOutUpdated = await UpdateStoreCheckOut(data); + if (isCheckOutUpdated == true) { + let datan = { StoreId: StoreId, UploadStatus: 'C', tbname: 'Master_Distributor' }; + const isUpdated = await UpdateDistributorStatus(props, datan); + if (isUpdated == true) { + let outtime = moment(d).format('HH:mm:ss');; + await UpdateDistributorStatuslocal('C', checkOutStore, false, true, outtime); + UploadOnCheckOut(loc); + }else { + setStartUploading(false); + notify(ST.Erroroccurwhilecheckout, 'LONG'); + } + } else { + setStartUploading(false); + notify(ST.Erroroccurwhilecheckout, 'LONG'); + } + } + else { + setStartUploading(false); + notify(ST.Somethingwentwrong, 'SHORT'); + } + } + else { + setStartUploading(false); + notify(ST.Somethingwentwrong, 'SHORT'); + } + }) + .catch((err) => { + console.log('onPage Team error', err); + notify(ST.Somethingwentwrong, 'SHORT'); + setStartUploading(false); + }); + } + async function UpdateDistributorStatuslocal(status, storeData1, updateCheckin = false, uCOut = false, cout_time = '') { + let storeArr = state.storeList; + let sdata_index = storeArr.findIndex(i => i.StoreId == storeData1.StoreId); + if (sdata_index >= 0) { + let sdata = storeArr[sdata_index]; + sdata['UploadStatus'] = status; + if (updateCheckin == true) { + sdata['CheckInTime'] = ''; + } + if (uCOut == true) { + sdata['CheckOutTime'] = cout_time; + } + storeArr[sdata_index] = sdata; + setState({ ...state, storeArr }); + setGlobalStorelist(storeArr); + setrerenderdata(!rerenderdata); + } + } + + async function UpdateUploadCountLocal(upCount) { + // keep 1 less to actual count as DownloadDataModal shows it as provided_value+1 + setUploadedCount(upCount - 1); + } + + async function UpdateStoreCheckOut(data) { + let CheckOut_PhotoReq = props.CheckOut_PhotoReq != null ? props.CheckOut_PhotoReq : false; + let d1 = new Date(); + let d2 = moment(d1).format('MM/DD/YYYY'); + let now = moment(d1).format('MM/DD/YYYY HH:mm:ss'); + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + let q = `UPDATE ${AppTables.DISTRIBUTOR_CHECKIN} SET CHECKOUT_TIME='${now}', CHECKOUT_IMAGE='${CheckOut_PhotoReq ? CheckOutImage : ''}' WHERE DISTRIBUTOR_ID='${checkOutStore.StoreId}' and VISIT_DATE='${d2}' `; + await txn.executeSql(q, [], async function (txn2, txnres2) { + console.log('store checkout updated'); + resolve(true); + }, function (Etxn, txnerr) { console.log(txnerr); resolve(false); }); + + }); + }).then((val) => { + return val; + }).catch((err) => { + console.log(err); + return false; + }); + + + } + + + async function UploadOnCheckOut(loc) { + try { + console.log('UploadOnCheckOut'); + let d1 = new Date(); + let d2 = moment(d1).format('MM/DD/YYYY'); + let token = await get_item('loginToken'); + let loginInfo = await get_item('loginInfo'); + const loginDetails = JSON.parse(loginInfo); + let AllStores = await getPJPStoresData('Master_Distributor', [], d2); + await db.transaction(async function (txn) { + console.log('stores to upload:', AllStores.length); + if (AllStores.length > 0) { + for (var i = 0; i < AllStores.length; i++) { + let data = AllStores[i]; + const index = i; + let { StoreId, StoreName, EmpId, MID, UploadStatus, Status, VisitDate, REASON_ID, IMAGE, JCP_TYPE } = data; + let MenuList = await getMenuList(data); + let allKPIs = MenuList; + let totalUpC = MenuList.length - 1; // keep 1 less to actual count as DownloadDataModal shows it as provided_value+1 + setTotalUpCount(totalUpC); + setshowProgresssBar(false); + setUploadingSubText("Uploading Data for Distributor:" + StoreId); + if (UploadStatus == 'C') { + let isUploaded_P_Status = await uploadDBStatus(props, data, 'P', JCP_TYPE, loc); + console.log('isUploaded_P_Status:', isUploaded_P_Status); + if (isUploaded_P_Status) { + await UpdateDistributorStatuslocal('P', data); + setTotalUpCount(totalUpC); + setshowProgresssBar(true); + setUploadingText(ST.UploadingData + '...'); + await uploadAfter_P_status(index, AllStores, data, MenuList, allKPIs, JCP_TYPE, loc); + } + else { + // Stop processing if all distributors uploaded + if (index == AllStores.length - 1) { + // setProcessing(false); + setStartUploading(false); + notify(ST.Erroroccurwhileuploadingdata, 'LONG'); + } + } + } + else if (UploadStatus == 'D') { + setTotalUpCount(totalUpC); + setshowProgresssBar(true); + setUploadingText(ST.UploadingData + '...'); + // this never be called if there is no KPI + let allFilesToUpload = await uploadAll_DBData(props, data, allKPIs, props.UserId, JCP_TYPE, false, loc, UpdateUploadCountLocal); + if (allFilesToUpload.length > 0) { + await UploadDataWithImages(index, AllStores, data, MenuList, allKPIs, JCP_TYPE, allFilesToUpload, loc); + } + else { + notify(ST.Alldatauploadedfor + ' ' + StoreName, 'SHORT'); + if (index == AllStores.length - 1) { + // setProcessing(false); + setStartUploading(false); + } + } + } + else if (UploadStatus == 'P') { + setTotalUpCount(totalUpC); + setshowProgresssBar(true); + setUploadingText(ST.UploadingData + '...'); + await uploadAfter_P_status(index, AllStores, data, MenuList, allKPIs, JCP_TYPE, loc); + } + else if (UploadStatus == 'L') { + setshowProgresssBar(false); + setUploadingText(ST.UploadingData + '...'); + let isAllUploaded_S = await uploadDBStatus(props, data, 'U', JCP_TYPE, loc); + if (isAllUploaded_S == true) { + await UpdateDistributorStatuslocal('U', data); + notify(ST.Alldatauploadedfor + ' ' + StoreName, 'SHORT'); + if (index == AllStores.length - 1) { + // setProcessing(false); + setStartUploading(false); + } + } + else { + if (index == AllStores.length - 1) { + // setProcessing(false); + setStartUploading(false); + notify(ST.Erroroccurwhileuploadingdata, 'LONG'); + } + } + } + else { + console.log("No UploadStatus case found while uploading Distributor"); + } + } + } + }); + + } catch (err) { + console.log(err); + } + } + + async function uploadAfter_P_status(index, AllStores, data, MenuList, allKPIs, JCP_TYPE, loc) { + let { StoreName } = data; + if (MenuList.length > 0) { + // Upload data with Images + let allFilesToUpload = await uploadAll_DBData(props, data, allKPIs, props.UserId, JCP_TYPE, true, loc, UpdateUploadCountLocal); + console.log('allFilesToUpload:', allFilesToUpload.length); + await UpdateDistributorStatuslocal('D', data); + UploadDataWithImages(index, AllStores, data, MenuList, allKPIs, JCP_TYPE, allFilesToUpload, loc); + } + else { + // Upload status u if no data exists + let isAllUploaded_S = await uploadDBStatus(props, data, 'U', JCP_TYPE, loc); + if (isAllUploaded_S == true) { + await UpdateDistributorStatuslocal('U', data); + notify(ST.Alldatauploadedfor + ' ' + StoreName, 'SHORT'); + if (index == AllStores.length - 1) { + // setProcessing(false); + setStartUploading(false); + } + } + else { + if (index == AllStores.length - 1) { + // setProcessing(false); + setStartUploading(false); + notify(ST.Erroroccurwhileuploadingdata, 'LONG'); + } + } + } + } + + async function UploadDataWithImages(index, AllStores, data, MenuList, allKPIs, JCP_TYPE, allFilesToUpload, loc) { + let { StoreName } = data; + if (allFilesToUpload.length > 0) { + setUploadedCount(0); + setTotalUpCount(allFilesToUpload.length - 1); + setshowProgresssBar(true); + setUploadingText(ST.UploadingImages + '...'); + let isAllUploaded = await uploadAllImages(props, data, allFilesToUpload, JCP_TYPE, loc, UpdateUploadCountLocal); + if (isAllUploaded == true) { + await UpdateDistributorStatuslocal('U', data); + notify(ST.Alldataandimagesuploadedfor + ' ' + StoreName, 'SHORT'); + if (index == AllStores.length - 1) { + // setProcessing(false); + setStartUploading(false); + } + } else { + notify(ST.Cannotuploadimagesfor + ' ' + StoreName, 'SHORT'); + if (index == AllStores.length - 1) { + // setProcessing(false); + setStartUploading(false); + } + } + } + else { + let isupdatedU = await uploadDBStatus(props, data, 'U', JCP_TYPE, loc); + console.log('on no files found to upload , isupdated::', isupdatedU); + if (isupdatedU) { + await UpdateDistributorStatuslocal('U', data); + notify(ST.Alldatauploadedfor + ' ' + StoreName, 'SHORT'); + } + if (index == AllStores.length - 1) { + // setProcessing(false); + setStartUploading(false); + } + } + } + + + + async function getPJPStoresData(tbname, Stores = [], d2) { + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + let join = `INNER JOIN ${AppTables.DISTRIBUTOR_CHECKIN} t2 on t2.DISTRIBUTOR_ID=t1.DistributorId `; + await txn.executeSql(`Select t1.DMID as MID,t1.EmpId,t1.DistributorId as StoreId,t1.DistributorName as StoreName,t1.DistributorCode as StoreCode,t1.Latitude,t1.Longitude,t1.InTime,t1.OutTime,t1.UploadStatus,t1.GeoTag,'Master_Distributor' as JCP_TYPE,t2.CHECKIN_IMAGE from ${tbname} t1 ${join} where t2.VISIT_DATE='${d2}' and t1.UploadStatus in ('C','P','D','L')`, [], async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + Stores.push(data); + } + resolve(Stores); + } + else { + resolve(Stores); + } + }, function (txnE, txnerr) { console.log(txnerr); resolve(Stores) },); + + }); + }).then((val) => { + return val; + }) + .catch((err) => { + console.log(err); + return Stores; + }) + } + + + + + async function storeVisited() { + console.log('isgeotag:', currentStore.GeoTag); + setShowStoreVisitModal(false); + if (currentStore.GeoTag == 'N') { + setShowGeoTagModal(true); + }else if (currentStore.UploadStatus == 'N' || currentStore.UploadStatus == '') { + calLocatDistance(); + } + } + + async function storeNotVisited() { + setShowStoreVisitModal(false); + props.navigation.navigate('DBNonWorkingReasons', { storeData: currentStore }); + } + + async function onVisitCancel() { + setLoaderTitle(ST.DeletingCheckInData + '...') + setShowCancelCIModal(false); + setProcessing(true); + let { MID, StoreId } = cancelCheckOutStore; + let postdata = { 'Mid': MID, "UserName": props.UserId, } + const url = props.baseurl + getMethodName(METHODS.DELETECOVERAGE_METHOD); + console.log(url, postdata); + await UploadData2(url, postdata) + .then(async (res) => { + console.log('delete coverage res:', res); + if (res == '1') { + let isdeleted = await deleteStore(cancelCheckOutStore); + if (isdeleted == true) { + let data = { "StoreId": StoreId, UploadStatus: "N", tbname: 'Master_Distributor' }; + let isUpdated = await UpdateDistributorStatus(props, data); + if (isUpdated == true) { + await UpdateDistributorStatuslocal('N', cancelCheckOutStore, true); + setProcessing(false); + notify(ST.CheckInRemoved); + } + else { + setProcessing(false); + notify(ST.CheckInremovedsuccessfullybutcannotupdatestatus); + } + } + else { + setProcessing(false); + notify(ST.CheckInremovedsuccessfullybutcannotupdatestatus); + } + } + else { + setProcessing(false); + notify(ST.CannotRemoveCheckIn); + } + + }).catch(err => { + console.log('onPage Team error', err); + setProcessing(false); + notify(ST.CannotRemoveCheckIn); + }); + + } + + async function deleteStore(storeData1) { + let { StoreId } = storeData1; + let allQueries = [ + `Delete from ${AppTables.COVERAGE_DATA} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.GEOTAG} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.HEADER_BACK_OF_STORE} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.CHILD_BACK_OF_STORE} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.SALES} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.INSERT_OPENINGHEADER_DATA} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.STOCK_DATA} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.SHARE_OF_SHELF_IMAGE} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.SHARE_OF_SHELF_FACING_DATA} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.INSERT_SAMPLED_DATA} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.CONTACT_CONVERSION} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.INSERT_ERROR_TRACKING} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.GROOMING_IMAGE_DATA} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.ADDITIONAL_VISIBILITY} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.ADDITIONAL_VISIBILITY_STOCK} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.COMPETITION_VISIBILITY} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.COMPETITION_PROMOTION} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.CHECKIN_DATA} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.PROMOTION_HEADER_DATA} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.PROMOTION_DATA} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.PAID_VISIBILITY_HEADER_DATA} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.PAID_VISIBILITY_CHILD_DATA} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.PAID_VIS_CHECKLIST} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.SURVEY} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.DB_VISICOOLER} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.RETURN_STOCK} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.ORDER_SIMPLIFY} where STORE_ID='${StoreId}' `, + `DELETE FROM ${AppTables.DB_WINDOW_HDR_DATA} WHERE DISTRIBUTOR_ID='${StoreId}'`, + `DELETE FROM ${AppTables.DBPOSM_HDR_DATA} WHERE DISTRIBUTOR_ID='${StoreId}'` + ] + return await Promise.all( + allQueries.map(async (q, index) => { + let isDeleted = await executeQuery(q); + return isDeleted == true; + }) + ).then((val) => { + return true; + }).catch((err) => { + console.log(err); + return false; + }) + } + + async function executeQuery(q, type = '1') { + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + await txn.executeSql(q, [], async function (txn2, txnres2) { + if (type == '1') { + resolve(true); + } + else { + if (txnres2.rows.length > 0) { + let arr = [];//txnres2.rows.raw(); + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + arr.push(data); + if (i == (txnres2.rows.length - 1)) { + resolve(arr); + } + } + } + else { + resolve([]); + } + } + }, function (Etxn, txnerr) { console.log(txnerr); type == '1' ? resolve(false) : resolve([]); }); + }); + }).then((val) => { + return val; + }).catch((err) => { + console.log(err); + let d = type == '1' ? false : []; + return d; + }) + } + + function FilterStores(searchedQry) { + searchedQry = searchedQry.toLowerCase(); + console.log('searchedQry', searchedQry); + let { storeList } = state; + let arr = [] + if (searchedQry != null && searchedQry != '') { + globalStorelist.map((item, index) => { + let { StoreName, StoreId, StoreCode } = item; + StoreId = StoreId + ''; + if (StoreName.toLowerCase().includes(searchedQry) || StoreCode.toLowerCase().includes(searchedQry) || StoreId.includes(searchedQry)) { + arr.push(item); + } + }); + } + else { + arr = globalStorelist; + } + setState({ storeList: arr }); + setrerenderdata(!rerenderdata) + } + + function _render_StoreVisitModal() { + return ( + + + { storeVisited() }}> + {ST.Yes} + + { storeNotVisited() }}> + {ST.No} + + + + ) + } + + function _render_GeoTagModal() { + return ( + + + { setShowGeoTagModal(false) }}> + {ST.Cancel} + + { setShowGeoTagModal(false); props.navigation.navigate('GeoTag', { storeData: currentStore, 'isDistributor': true }); }}> + {ST.OK} + + + + ) + + } + + function _render_CancelCheckinModal() { + let storename = cancelCheckOutStore.StoreName || ''; + return ( + + + + {ST.Yourallcheckindatawillbelost} + + + + + { setShowCancelCIModal(false); }}> + {ST.Cancel} + + { onVisitCancel() }}> + {ST.OK} + + + + ) + } + + async function onDistanceM_OK() { + + if (props.DBCI_GeoFenceEnable) { + if (storeDistanceinM > props.DBCI_GeoFenceRadius) { + setShowDistanceModal(false); + notify(ST.Youcannotcheckin + ' ' + ST.Youarenotwithinthealloweddistancefromthestore + ' ' + props.DBCI_GeoFenceRadius + ' m', 'LONG') + } + else { + setShowDistanceModal(false); props.navigation.navigate('DistributorCheckIn', { storeData: currentStore }); + } + } + else { + setShowDistanceModal(false); props.navigation.navigate('DistributorCheckIn', { storeData: currentStore }); + } + } + + + function closeImageModal() { + setCheckOutImageModal(false); + } + + function cancelImage() { + setCheckOutImage(''); + setCheckOutImagePath(''); + closeImageModal(); + } + + async function openCamera() { + setShowCamera(true); + } + + async function getImage(imgdata) { + let storeData = checkOutStore + if (typeof imgdata == 'object' && imgdata.errorCode == 'camera_unavailable') { + notify(ST.Cameraunavailable); + } + else if (typeof imgdata == 'object' && imgdata.uri != null) { + const img = imgdata; + const imgurl = img.uri, imgWidth = img.width, imgHeight = img.ExtendedHeight; + let isImgFromGallery = img.fromGallery != null ? img.fromGallery : false; + let picture_clickedd = isImgFromGallery == true ? img.datetime : new Date(); + + let picture_clicked_time = moment(picture_clickedd).format('MM-DD-YYYY HH:mm:ss') + let picture_clicked_time_for_pic_name = moment(picture_clickedd).format('MMDDYYYY_HHmmss') + console.log("time", picture_clicked_time); + console.log("time1", picture_clicked_time_for_pic_name); + let calculate_tym_date_for_filename = picture_clicked_time_for_pic_name; + let calculate_tym_date_over_img = picture_clicked_time; + let filename = storeData.StoreId + '_DBCheckoutImg-' + calculate_tym_date_for_filename + '.jpg'; + + const mark_text1 = calculate_tym_date_over_img; + const mark_text2 = 'Distributor Name:' + storeData.StoreName + ' | Distributor Id:' + storeData.StoreId + ' | User Id:' + storeData.EmpId + ' | Image Type: DB Check Out' + ' | Date:' + calculate_tym_date_over_img; + setCheckOutImage(filename); + + let imagePath = `${CoverageImagePath}${filename}`; + RNFS.copyFile(imgurl, imagePath) + .then(async (resn) => { + // render data with clicked image + let uri = 'file://' + imagePath; + setCheckOutImagePath(uri); + // add metdata then resize image and restored back to the imagePath + let restore_data = { "destFilePath": imagePath, "imgurl": imgurl, imgWidth, imgHeight, mark_text1, mark_text2 } + let is_restored = await restore_ImageWithMetaData(restore_data, imgdata); + console.log("image restored:", is_restored); + }) + .catch(err => { + console.log(ST.Errorimagefilewritefailed + '!!!'); + console.log(err.message, err.code); + }); + } + } + + + function _OpenCaptureImage_Modal() { + const isImageCap = (CheckOutImagePath == '' || CheckOutImagePath == null) ? false : true; + return ( + + { + !isImageCap && + + { openCamera() }}> + + + { closeImageModal() }}> + {ST.Cancel} + + + } + { + isImageCap && + + + + + { openCamera() }}> + + + {showImageSaveOp && + + { cancelImage() }}> + {ST.Cancel} + + { closeImageModal(); UpdateCheckOutStatus(CheckOutLoc); }}> + {ST.Save} + + } + {!showImageSaveOp && + { closeImageModal() }}> + {ST.Close} + + } + + + + } + + ) + } + + function _render_DistanceModal() { + return ( + + + {ST.Youneedtobeinthestore} + {ST.toCheckInCheckOut} + {`${ST.Alloweddistancefromstore}: ${(props.DBCI_GeoFenceEnable == true ? props.DBCI_GeoFenceRadius : '500')} m`} + {`${ST.Yourdistancefromstore}: ${storeDistance}`} + { onDistanceM_OK() }}> + Ok + + + + ) + + } + + + return ( + + {processing && } + {(startUploading) && } + + {_render_StoreVisitModal()} + {_render_GeoTagModal()} + {_render_DistanceModal()} + {_render_CancelCheckinModal()} + {_OpenCaptureImage_Modal()} + {ConfirmSaveAlert(props, showAlert, onSaveCancel, getLocOnCheckout, ST.Doyoureallywanttocheckout)} + { setShowCamera(false); getImage(imgData) }} showCamera={showCamera} onHideCamera={() => { setShowCamera(false); }} /> + + + {!props.isDataDownloaded && } + + + + { setSearchedItem(val); FilterStores(val) }} + /> + { FilterStores(searchedItem) }}> + + + + + {nodataFound && + + {ST.NoDataAvailable} + + } + {(props.isDataDownloaded == true && !nodataFound) && + + { + return ( + + ); + }} + /> + + } + + + + + ); +} + + + +export default connect(mapStateToProps, mapDispatchToProps)(DistributorList); \ No newline at end of file diff --git a/PerformicsSrc/src/screens/DownloadDataScreen.js b/PerformicsSrc/src/screens/DownloadDataScreen.js new file mode 100644 index 0000000..51bb5e1 --- /dev/null +++ b/PerformicsSrc/src/screens/DownloadDataScreen.js @@ -0,0 +1,258 @@ +import React,{useState,useEffect} from 'react'; +import Container from '../components/container'; +import { useRoute } from '@react-navigation/native'; +import { globalStyles,customStyles,GetPageTheme } from "../styles/Global"; +import {StatusBar,Image,TextInput,View,Text,ScrollView,TouchableOpacity,Platform,PermissionsAndroid,FlatList} from 'react-native'; +import { ReactReduxContext,connect,useSelector, useDispatch } from 'react-redux'; +import { mapStateToProps,mapDispatchToProps } from '../reducers/contextProvider'; +import SQLite from 'react-native-sqlite-2'; +import {notify} from '../components/notify'; +import moment from 'moment'; +import {getDownloadJson,DownloadData} from '../controller/functions'; +import {get_item,set_item,clear_item} from '../components/localStorage'; +import {version,sloganline,appname,testurl} from '../constants/constants'; +import CustomHeader from '../components/customHeader'; +import {Card} from 'react-native-paper'; +import {AntDesign} from '../components/icons'; +import CustomLoader from '../components/CustomLoader'; + +function DownloadDataScreen(props) { + const route = useRoute(); + + // get all theme styles acc to current theme set + const PageTheme=GetPageTheme(props.DarkMode,route.name); + const customStyle=customStyles(props.DarkMode,route.name); + + const [state, setState] = useState({isDataDownloaded: false}); + const [teamList, setTeamList] = useState([]); + const [masterBrand, setMasterBrand] = useState([]); + const [skuSize, setSkuSize] = useState([]); + const [compType, setCompType] = useState([]); + const [skuPacking, setSkuPacking] = useState([]); + const [flavours, setFlavours] = useState([]); + const [AuditQtns, setAuditQtns] = useState([]); + const [imageTypes, setImageTypes] = useState([]); + const [processing, setProcessing] = useState(false); + const [dowloadedCount, setDowloadedCount] = useState(-1); + const totalCount=8; + + + + useEffect(() => { + console.log('processing:',processing); + if(processing){ + console.log('increment dowloadedCount changed'); + let count=dowloadedCount+1; + setDowloadedCount(count); + } + }, [teamList,skuSize,compType,skuPacking,flavours,AuditQtns,imageTypes]); + + + + useEffect(() => { + console.log('dowloadedCount changed',dowloadedCount); + if(dowloadedCount<=totalCount){ + dowloadAllData(); + } + else{ + setProcessing(false); + } + }, [dowloadedCount]); + + + + async function startDownload() { + setProcessing(true); + setDowloadedCount(0); + } + + + async function dowloadAllData() { + console.log('dowloadAllData',dowloadedCount); + let token = await get_item('loginToken'); + let loginInfo = await get_item('loginInfo'); + const loginDetails = JSON.parse(loginInfo); + let teamArr=[],Master_Brand=[],Brand_Category=[],Master_SkuSize=[],Master_SkuPacking=[],Master_CompType=[],Qtns=[],imgTypes=[],Master_ProductFlavour=[]; + + if(dowloadedCount==0){ + // download teamlist + var data = {Downloadtype: 'Sup_TeamList',username: loginDetails.UserId,empid: '',token: token,}; + await getDownloadJson(testurl, data) + .then(async(res) => { + if (res.Sup_TeamList) { + teamArr = res.Sup_TeamList || []; + setTeamList(teamArr); + } + }) + .catch(err => { + console.log('onPage Team error', err); + }); + + return; + } + + if(dowloadedCount==1){ + // download Brand_master + data = {Downloadtype: 'Master_Brand',username: loginDetails.UserId,empid: '',token: token,}; + await getDownloadJson(testurl, data) + .then(async(res) => { + if (res.Master_Brand) { + Master_Brand = res.Master_Brand || []; + setMasterBrand(Master_Brand); + } + else if(res.success==false && res.error){ + notify('Something went wrong while downloading data!'); + } + }) + .catch(err => { + console.log('onPage Team error', err); + }); + + return; + + } + + + if(dowloadedCount==2){ + + // download SKU Sizes + data = {Downloadtype: 'Master_SkuSize',username: loginDetails.UserId,empid: '',token: token,}; + await getDownloadJson(testurl, data) + .then(async(res) => { + if (res.Master_SkuSize) { + Master_SkuSize = res.Master_SkuSize || []; + setSkuSize(Master_SkuSize); + } + }) + .catch(err => { + console.log('onPage Team error', err); + }); + + return; + + } + + + if(dowloadedCount==3){ + // download SKU Packaging + data = {Downloadtype: 'Master_ProductPack',username: loginDetails.UserId,empid: '',token: token,}; + await getDownloadJson(testurl, data) + .then(async(res) => { + if (res.Master_ProductPack) { + Master_SkuPacking = res.Master_ProductPack || []; + setSkuPacking(Master_SkuPacking); + } + }) + .catch(err => { + console.log('onPage Team error', err); + }); + + return; + + } + + + if(dowloadedCount==4){ + // download comp type + data = {Downloadtype: 'Master_ActivationType',username: loginDetails.UserId,empid: '',token: token,}; + await getDownloadJson(testurl, data) + .then(async(res) => { + if (res.Master_ActivationType) { + Master_CompType = res.Master_ActivationType || []; + setCompType(Master_CompType); + } + }) + .catch(err => { + console.log('onPage Team error', err); + }); + + return; + + } + + if(dowloadedCount==5){ + // download product Flavour + data = {Downloadtype: 'Master_ProductFlavour',username: loginDetails.UserId,empid: '',token: token,}; + await getDownloadJson(testurl, data) + .then(async(res) => { + if (res.Master_ProductFlavour) { + Master_ProductFlavour = res.Master_ProductFlavour || []; + setFlavours(Master_ProductFlavour); + } + }) + .catch(err => { + console.log('onPage Team error', err); + }); + + return; + + } + + if(dowloadedCount==6){ + // download product Flavour + data = {Downloadtype: 'Sup_AuditQuestion',username: loginDetails.UserId,empid: '',token: token,}; + await getDownloadJson(testurl, data) + .then(async(res) => { + if (res.Sup_AuditQuestion) { + Qtns = res.Sup_AuditQuestion || []; + setAuditQtns(Qtns); + } + }) + .catch(err => { + console.log('onPage Team error', err); + }); + return; + } + + if(dowloadedCount==7){ + // download Sup_ImageType + data = {Downloadtype: 'Sup_ImageType',username: loginDetails.UserId,empid: '',token: token,}; + await getDownloadJson(testurl, data) + .then(async(res) => { + if (res.Sup_ImageType) { + imgTypes = res.Sup_ImageType || []; + setImageTypes(imgTypes); + } + }) + .catch(err => { + console.log('onPage Team error', err); + }); + + return; + + } + + + if(dowloadedCount==8){ + // create tables for if not created + let ddata={isDataDownloaded:false,teamList:teamList,Master_ActivationType:compType,Master_Brand:masterBrand,Master_ProductPack:skuPacking,Master_SkuSize:skuSize,Master_ProductFlavour:flavours,Sup_AuditQuestion:AuditQtns,Sup_ImageType:imageTypes}; + await DownloadData(props,ddata).then(()=>{ + setState({...state,isDataDownloaded:true}); + setProcessing(false); + notify('Data Downloaded','SHORT'); + props.navigation.goBack(); + }); + } + + } + + + return ( + + {processing && } + + + {startDownload()}}> + Download Data + + + + ); + } + + + +export default connect(mapStateToProps, mapDispatchToProps)(DownloadDataScreen); \ No newline at end of file diff --git a/PerformicsSrc/src/screens/DynamicStoreList.js b/PerformicsSrc/src/screens/DynamicStoreList.js new file mode 100644 index 0000000..2f1c9bd --- /dev/null +++ b/PerformicsSrc/src/screens/DynamicStoreList.js @@ -0,0 +1,1348 @@ +import React,{useState,useEffect, memo} from 'react'; +import Container from '../components/container'; +import { useRoute } from '@react-navigation/native'; +import { globalStyles,customStyles,GetPageTheme } from "../styles/Global"; +import {StatusBar,Image,TextInput,View,Text,ScrollView,TouchableOpacity,TouchableHighlight,Platform,PermissionsAndroid,FlatList} from 'react-native'; +import { ReactReduxContext,connect,useSelector, useDispatch } from 'react-redux'; +import { mapStateToProps,mapDispatchToProps } from '../reducers/contextProvider'; +import SQLite from 'react-native-sqlite-2'; +import {notify} from '../components/notify'; +import moment from 'moment'; +import {getDownloadJson,AddStore, checkRange, UploadData2, UploadData, UpdateStoreStatus} from '../controller/functions'; +import {get_item,set_item,clear_item} from '../components/localStorage'; +import {version,sloganline,appname,testurl,db, AppVersion} from '../constants/constants'; +import CustomHeader from '../components/customHeader'; +import {Card} from 'react-native-paper'; +import {AntDesign, Entypo, Feather, FontAwesome, Fontisto, Ionicons, MaterialCommunityIcons} from '../components/icons'; +import CustomLoader from '../components/CustomLoader'; +import LinearGradient from 'react-native-linear-gradient'; +import NoDataComponent from '../components/NoDataComponent'; +import {SvgXml} from 'react-native-svg'; +import MapIcon from '../assets/performics/map_icon.svg'; +import CustomModal from '../components/CustomModal'; +import { AppTables } from '../constants/tableConstants'; +import { _checkLocationPermission } from '../components/geolocation'; +import Geolocation from 'react-native-geolocation-service'; +import { getAvailblQuery, getIfAvlbl, getIfKPIDone, getQuery, Q_MenuList } from '../constants/ConstantQueries'; +import { ConfirmSaveAlert } from '../components/alert'; +import { getMethodName, METHODS } from '../constants/methodNames'; +import { uploadAllData, uploadAllImages, uploadStoreStatus } from '../constants/uploadData'; +import { PrimaryTheme } from '../styles/Themes'; +// import JSON from '../constants/storeList_definition.json'; +import * as RNFS from 'react-native-fs'; + +const StoreItem=memo((props)=>{ + const route = useRoute(); + const PageTheme=GetPageTheme(props.DarkMode,route.name); + const customStyle=customStyles(props.DarkMode,route.name); + const item=props.item; + const item_index=props.index; + const JSONView=props.JSONView; + const storeList_def=JSONView.storeList_def || {}; + // (storeList_def!=null && typeof storeList_def=='object' && Object.keys(storeList_def).length>0) + let showInCard=storeList_def.showInCard; + showInCard=showInCard==0 || (showInCard!=null && showInCard!='')?showInCard:1; + let showCardDefaultColor=storeList_def.showCardDefaultColor || PageTheme.$bg_color ; + let rowData=storeList_def.rowData || [] ; + + async function get_to_store_details(data){ + + if(data.UploadStatus=='U'){ + notify('All Data already uploaded for this store!'); + } + else if(data.UploadStatus=='L'){ + notify('Already marked as not working status for this store!'); + } + else if(data.UploadStatus=='I'){ + let isChcekedIn=await checkIfCheckInAvlbl(); + let menuList=data.MenuList; + console.log('menuList length:',menuList.length); + if(isChcekedIn==true){ + menuList.length>0?props.navigation.navigate('StoreDailyMenu',{storeData:data,'isAdhoc':props.isAdhocScreen}):''; + } + else{ + let isrestored=await restoreCheckIn(data); + props.setProcessing(false); + console.log('isrestored:',isrestored); + if(isrestored==true){ + menuList.length>0?props.navigation.navigate('StoreDailyMenu',{storeData:data,'isAdhoc':props.isAdhocScreen}):''; + } + else{ + notify('Check-In data not available!'); + } + + } + + } + else if(data.UploadStatus=='C'){ + notify('Already checked out!'); + } + else if(data.UploadStatus=='D'){ + notify('Data already uploaded!'); + } + else if(data.UploadStatus=='P'){ + notify('Data partially uploaded!'); + } + else if(data.UploadStatus=='N' || data.UploadStatus==''){ + let isChcekedIn=await checkIfAlreadyCheckdIn(); + console.log('isChcekedIn',isChcekedIn); + if(isChcekedIn==true){ + notify('You are already checked in to the other store!','LONG'); + } + else{ + props.setShowStoreVisitModal(true); + props.setCurrentStore(data); + } + } + + } + + + + async function checkIfCheckInAvlbl(){ + let d1=new Date(); + let d2=moment(d1).format('MM/DD/YYYY'); + return new Promise((resolve,reject)=>{ + db.transaction(async function (txn) { + + let join=`INNER JOIN ${AppTables.COVERAGE_DATA} t2 on t2.STORE_ID=t1.StoreId and t2.JCP_TYPE='Mapping_JourneyPlan' `; + let q=`Select t1.* from Mapping_JourneyPlan t1 ${join} where t1.VisitDate='${d2}' and t1.UploadStatus='I'` + + let join2=`INNER JOIN ${AppTables.COVERAGE_DATA} t2 on t2.STORE_ID=t1.StoreId and t2.JCP_TYPE='Adhoc_JourneyPlan' `; + let q2=`Select t1.* from Adhoc_JourneyPlan t1 ${join2} where t1.VisitDate='${d2}' and t1.UploadStatus='I'` + + await txn.executeSql(q,[],async function (txn2, txnres2) { + if(txnres2.rows.length>0){ + // show from local + resolve(true); + } + else{ + await txn.executeSql(q2,[],async function (txn2, txnres3) { + if(txnres3.rows.length>0){ + // show from local + resolve(true); + } + else{ + resolve(false); + } + },function(Etxn,txnerr){console.log(txnerr);resolve(false); }); + } + },function(Etxn,txnerr){console.log(txnerr);resolve(false); }); + + }); + + }).then((val)=>{ + return val; + }).catch((err)=>{ + return false; + }); + } + + + async function AskForCancelCheckin(data){ + props.setCancelCheckOutStore(data); + props.setShowCancelCIModal(true); + } + + + async function restoreCheckIn(item){ + props.setLoaderTitle('You have cleared the App-Data! Restoring Checkin Info...'); + props.setProcessing(true); + let d1=new Date(); + let d2=moment(d1).format('MM/DD/YYYY'); + return new Promise((resolve,reject)=>{ + db.transaction(async function (txn) { + + let {StoreId,VisitDate,MID,Latitude, Longitude,UploadStatus,InTime,OutTime}=item; + let JcpType=props.isAdhocScreen==true?'Adhoc_JourneyPlan':'Mapping_JourneyPlan'; + + let In_Time=(InTime!='' && InTime!=null && InTime!='00:00:00' && InTime!='00:00')?moment(d2+' '+InTime).format('MM/DD/YYYY HH:mm:ss'):''; + let Out_Time=(OutTime!='' && OutTime!=null && OutTime!='00:00:00' && OutTime!='00:00')?moment(d2+' '+OutTime).format('MM/DD/YYYY HH:mm:ss'):''; + let CHECKOUT_TIME=(Out_Time!='' && Out_Time!=null)?Out_Time:In_Time; + + + // add store Coverage data + let q=`delete from ${AppTables.COVERAGE_DATA} where STORE_ID='${StoreId}' and VISIT_DATE='${VisitDate}' `; + let values=` ('${StoreId}','${VisitDate}','${Latitude}','${Longitude}','','${CHECKOUT_TIME}','','0','','','','${MID}','${JcpType}','${d2}')`; + let insert_q=` insert into ${AppTables.COVERAGE_DATA}(STORE_ID,VISIT_DATE ,LATITUDE,LONGITUDE,IMAGE,CHECKOUT_TIME,CHECKOUT_IMAGE,REASON_ID,REASON,REMARK,STORE_FLAG,MID,JCP_TYPE,ADDED_DATE) values ${values}`; + await txn.executeSql(q,[],async function (txn2, txnres2) { + console.log('store coverage deleted'); + await txn.executeSql(insert_q,[],async function (txn2, txnres3) { + console.log('InsertCoverageData done'); + + + // add storeCheckin data + let q2=`delete from ${AppTables.CHECKIN_DATA} where STORE_ID='${StoreId}' and VISIT_DATE='${VisitDate}' `; + let values2=` ('${StoreId}','${VisitDate}','${Latitude}','${Longitude}','${In_Time}','','${Out_Time}','','','${JcpType}','${d2}')`; + let insert_q2=` INSERT INTO ${AppTables.CHECKIN_DATA}(STORE_ID,VISIT_DATE,LATITUDE,LONGITUDE,CHECKIN_TIME,CHECKIN_IMAGE,CHECKOUT_TIME,CHECKOUT_IMAGE,REMARK,JCP_TYPE,ADDED_DATE) values ${values2}`; + await txn.executeSql(q2,[],async function (txn2, txnres4) { + console.log('removed'); + await txn.executeSql(insert_q2,[],async function (txn2, txnres5) { + console.log('checkin data added'); + resolve(true); + },function(Etxn,txnerr){console.log(txnerr);resolve(false);}); + },function(Etxn,txnerr){console.log(txnerr);resolve(false);}); + + + },function(Etxn,txnerr){console.log(txnerr);resolve(false);}); + },function(Etxn,txnerr){console.log(txnerr);resolve(false);}); + + }); + + }).then((val)=>{ + return val; + }).catch((err)=>{ + return false; + }); + } + + async function checkIfAlreadyCheckdIn(){ + let d1=new Date(); + let d2=moment(d1).format('MM/DD/YYYY'); + return new Promise((resolve,reject)=>{ + db.transaction(async function (txn) { + + let join=`INNER JOIN ${AppTables.COVERAGE_DATA} t2 on t2.STORE_ID=t1.StoreId and t2.JCP_TYPE='Mapping_JourneyPlan' `; + let q=`Select t1.* from Mapping_JourneyPlan t1 where t1.VisitDate='${d2}' and t1.UploadStatus='I'` + + let join2=`INNER JOIN ${AppTables.COVERAGE_DATA} t2 on t2.STORE_ID=t1.StoreId and t2.JCP_TYPE='Adhoc_JourneyPlan' `; + let q2=`Select t1.* from Adhoc_JourneyPlan t1 where t1.VisitDate='${d2}' and t1.UploadStatus='I'` + + await txn.executeSql(q,[],async function (txn2, txnres2) { + if(txnres2.rows.length>0){ + // show from local + resolve(true); + } + else{ + await txn.executeSql(q2,[],async function (txn2, txnres3) { + if(txnres3.rows.length>0){ + // show from local + resolve(true); + } + else{ + resolve(false); + } + },function(Etxn,txnerr){console.log(txnerr);resolve(false); }); + } + },function(Etxn,txnerr){console.log(txnerr);resolve(false); }); + + }); + + }).then((val)=>{ + return val; + }).catch((err)=>{ + return false; + }); + } + + + + function renderRow(rd,rd_index){ + let cols=rd.ShowString || []; + return ( + + { + cols.length>0 && + cols.map((col,col_index)=>{ + let sep=(col.fieldNameValueSeparator!=null && col.fieldNameValueSeparator!='')?' '+col.fieldNameValueSeparator:''; + let col_sep=col.afterConcatChar!=null && col.afterConcatChar!='' ? col.afterConcatChar:''; + let col_style={fontSize:(col.fontSize || 12),fontWeight:(col.fontWeight!=null && col.fontWeight!=''?col.fontWeight : '400')} //fontFamily:(col.fontName || 'sans-serif') + + return( + + {col.labelName+sep} + {item[col.fieldName]} + {col_sep} + + ) + }) + } + + ) + } + + return( + + {get_to_store_details(item)}}> + + {rowData.length>0 && + rowData.map((rd,rd_index)=>{ + return renderRow(rd,rd_index); + }) + } + + + + ); + + return( + + + + {item.StoreName} + + + + + + Store Id: + {item.StoreId} + + + Store Type: + {item.StoreType} + + + + + Store Code: + {item.StoreCode} + + + + + + Address: + {item.Address} + + + {(item.CheckInTime!=null && item.CheckInTime!='') && + + + + Check In: + {item.CheckInTime} + + {(item.CheckOutTime!=null && item.CheckOutTime!='') && + + Check Out: + {item.CheckOutTime} + + } + + } + { (item.UploadStatus!=null && item.UploadStatus!='' && item.UploadStatus!='N') && + + + + {item.UploadStatus!=null && (item.UploadStatus=='I' || item.UploadStatus=='L') && + {AskForCancelCheckin(item)}}> + {item.UploadStatus=='L' ? :} + {item.UploadStatus=='L' ? Not Working:Checked In} + + + + + } + {/* {item.UploadStatus!=null && item.UploadStatus=='I' && + + + Checked In + } */} + {item.UploadStatus!=null && item.UploadStatus=='C' && + + + Checked Out + } + {item.UploadStatus!=null && item.UploadStatus=='P' && + + + Partially Uploaded + } + {item.UploadStatus!=null && item.UploadStatus=='D' && + + + Data Uploaded + } + {item.UploadStatus!=null && item.UploadStatus=='U' && + + + Uploaded + } + {/* {item.UploadStatus!=null && item.UploadStatus=='L' && + + + Not Working + } */} + { item.allDone==true && (item.UploadStatus=='I') && + {props.onCheckOut?props.onCheckOut(item):'';}}> + Check Out + + } + + } + + { item.GeoTag=='Y' && + {props.navigation.navigate('ShowMap',{storeData:item})}} > + + + } + { item.GeoTag=='N' && + {}} > + + + } + + ) + + +}); + +function DynamicStoreList(props) { + const route = useRoute(); + + // get all theme styles acc to current theme set + const PageTheme=GetPageTheme(props.DarkMode,route.name); + const customStyle=customStyles(props.DarkMode,route.name); + const [loaderTitle, setLoaderTitle] = useState('loading...'); + const [processing, setProcessing] = useState((props.isDataDownloaded?true:false)); + const [isAdhocScreen, setIsAdhocScreen] = useState(false); + const [nodataFound, setNodataFound] = useState(false); + const [showStoreVisitModal, setShowStoreVisitModal] = useState(false); + const [showGeoTagModal, setShowGeoTagModal] = useState(false); + const [showDistanceModal, setShowDistanceModal] = useState(false); + const [currentStore, setCurrentStore] = useState({}); + const [storeDistance, setStoreDistance] = useState('0 M'); + const [showAlert, setShowAlert] = useState(false); + const [checkOutStore,setCheckOutStore]=useState({}); + const [rerenderdata, setrerenderdata]= useState(false); + let [state, setState] = useState({storeList:[]}); + const [cancelCheckOutStore,setCancelCheckOutStore]=useState({}); + const [showCancelCIModal, setShowCancelCIModal]= useState(false); + const [JSONView, setJSONView]= useState({}); + + useEffect(() => { + + getData(); + const willFocusSubscription = props.navigation.addListener('focus', () => { + checkLocalData(); + }); + + return willFocusSubscription + }, []); + + + async function getData(){ + // let json_ex1=JSON; + // setJSONView(json_ex1); + // return; + + let json_ex=require('../constants/storeList_definition.json'); + // let path =`file://${RNFS.ExternalStorageDirectoryPath}/Documents/test.json`; + // console.log('path:',path); + // let json_ex=await RNFS.readFile(path).then((val)=>{ + // return val; + // }) + setJSONView(json_ex); + checkLocalData(); + } + + + async function calLocatDistance(){ + if(currentStore.Latitude !='' && currentStore.Latitude!=null){ + const hasPermission=await _checkLocationPermission(); + if(hasPermission==true) + { + Geolocation.getCurrentPosition( + async (position) => { + let loc={lat:position.coords.latitude,lng:position.coords.longitude}; + + var distance = checkRange(loc.lat,loc.lng,currentStore.Latitude,currentStore.Longitude); + console.log('distance:',distance); + let dinKM=(distance / 1000); + let distanceinM=(distance=='' || distance==null || isNaN(distance))?' 0 m':( dinKM > 1 ? dinKM.toFixed(1) + ' Km' : distance + ' m'); + setStoreDistance(distanceinM); + if(distance>500){ + setShowDistanceModal(true); + } + else{ + props.navigation.navigate('StoreCheckin',{storeData:currentStore,'isAdhoc':isAdhocScreen}); + } + }, + (error) => { + notify('Cannot get user position'); + }, + { enableHighAccuracy: true, distanceFilter: 0, interval: 1000, fastestInterval: 2000 } + ); + } + else{ + notify('Please allow location permission'); + } + } + else{ + notify('Store location not available'); + } + + } + + + + async function checkLocalData(){ + let d1=new Date(); + let d2=moment(d1).format('MM/DD/YYYY'); + + let token=await get_item('loginToken'); + let loginInfo=await get_item('loginInfo'); + const loginDetails=JSON.parse(loginInfo); + let params=props.route.params? props.route.params:{}; + let isAdhoc=params.isAdhoc || false; + setIsAdhocScreen(isAdhoc); + + var q='',tb1='Mapping_JourneyPlan',tb2=AppTables.CHECKIN_DATA,tb3='Adhoc_JourneyPlan'; + + var join_tbl=isAdhoc==true?tb3:tb1; + var join =` left join ${tb2} on ${tb2}.STORE_ID=${join_tbl}.StoreId and ${tb2}.JCP_TYPE='${join_tbl}' and ${tb2}.VISIT_DATE='${d2}' and ${join_tbl}.UploadStatus in ('I','C','D','U','L') `; + var orderby=` group by ${join_tbl}.StoreId,${join_tbl}.VisitDate order by ${join_tbl}.StoreName,${tb2}.KEY_ID desc`; + + if(isAdhoc==true){ + q=`Select ${tb3}.*,${tb2}.CHECKIN_TIME as CheckInTime ,${tb2}.CHECKOUT_TIME as CheckOutTime from ${tb3} ${join} where ${tb3}.VisitDate='${d2}' ${orderby} `; + } + else{ + q=`Select ${tb1}.*,${tb2}.CHECKIN_TIME as CheckInTime ,${tb2}.CHECKOUT_TIME as CheckOutTime from ${tb1} ${join} where ${tb1}.VisitDate='${d2}' ${orderby} `; + } + + await db.transaction(async function (txn) { + await txn.executeSql(q,[],async function (txn2, txnres2) { + if(txnres2.rows.length>0){ + // show from local + var storeArr=[]; + for(var i=0;i0?await getDailyMenu(sdata):true; + sdata.allDone=allDone; + sdata.MenuList=MenuList || []; + storeArr.push(sdata); + + if(i==(txnres2.rows.length-1)){ + // console.log(storeArr); + setState({storeList:storeArr}); + setProcessing(false); + } + } + } + else{ + setProcessing(false); notify('No data found');setNodataFound(true); + } + },function(Etxn,txnerr){console.log(txnerr);}); + }); + } + + async function getDailyMenu(storeData1){ + let d1=new Date(); + let d2=moment(d1).format('MM/DD/YYYY'); + let {StoreId,ChannelId,RegionId}=storeData1; + return new Promise((resolve,reject)=>{ + db.transaction(async function (txn) { + + let q=Q_MenuList(storeData1); + await txn.executeSql(q,[],async function (txn2, txnres) { + + if(txnres.rows.length>0){ + let allDone=true; + for(var i=0;i{ + return val; + }).catch((err)=>{ + console.log(err); + return false; + }); + + } + + async function getMenuList(storeData1){ + let {StoreId,ChannelId,RegionId}=storeData1; + return new Promise((resolve,reject)=>{ + + db.transaction(async function (txn) { + let q=Q_MenuList(storeData1); + await txn.executeSql(q,[],async function (txn2, txnres) { + if(txnres.rows.length>0){ + let arr=[]; + for(var i=0;i{ + return val; + }).catch((err)=>{ + console.log('') + return [] + }) + } + + async function getKPIS(MenuList){ + let allKpis=[]; + + return Promise.all( + MenuList.map((item,index)=>{ + let MenuId=item.MenuId || ''; + MenuId=MenuId+''; + switch(MenuId){ + case '1':allKpis.push('Stocks'); return 'Stocks'; + case '2':allKpis.push('BRS'); return 'BRS'; + case '3':allKpis.indexOf('Stocks')<0?allKpis.push('Stocks'):''; return 'Stocks'; + case '4':allKpis.indexOf('Stocks')<0?allKpis.push('Stocks'):''; return 'Stocks'; + case '5':allKpis.push('SOS'); return 'SOS'; + case '6':allKpis.push('PaidVis'); return 'PaidVis'; + case '7':allKpis.push('AddVis'); return 'AddVis'; + case '8':allKpis.push('CompVis'); return 'CompVis'; + case '9':allKpis.push('Promotion'); return 'Promotion'; + case '14':allKpis.push('CompPromo'); return 'CompPromo'; + case '15':allKpis.push('Contacts'); return 'Contacts'; + case '16':allKpis.push('Sale'); return 'Sale'; + case '17':allKpis.push('Survey'); return 'Survey'; + default: return ''; + } + }) + ).then((val)=>{ + console.log('allKPIs:',val,allKpis); + return allKpis; + }) + } + + + async function checkAvailability(storeData1,data){ + + return new Promise((resolve,reject)=>{ + db.transaction(async function (txn) { + let q2=getAvailblQuery(data.MenuId,storeData1); + if(q2!='' && q2!=null){ + await txn.executeSql(q2,[],async function (txn2, txnres2) { + let isAvlbl=getIfAvlbl(data.MenuId,txnres2,storeData1); + resolve(isAvlbl); + },function (txnE,txnerr) { console.log(txnerr); resolve(false);},); + } + else{ + let isAvlbl=getIfAvlbl(data.MenuId,{},storeData1); + resolve(isAvlbl); + } + }); + }).then((val)=>{ + return val; + }).catch((err)=>{ + console.log(err); + return false; + }); + } + + + async function updateStatus(storeData1,data,isAvlbl){ + return new Promise((resolve,reject)=>{ + db.transaction(async function (txn) { + let q2=getQuery(data.MenuId,storeData1); + if(q2!='' && q2!=null && isAvlbl==true){ + await txn.executeSql(q2,[],async function (txn2, txnres2) { + let isDone=await getIfKPIDone(data.MenuId,txnres2,storeData1); + resolve(isDone); + + },function (txnE,txnerr) { console.log(txnerr); resolve(false);},); + } + else{ + resolve(false); + } + }); + }).then((val)=>{ + return val; + }).catch((err)=>{ + console.log(err); + return false; + }); + + } + + async function onCheckOut(storeData1){ + // let isAlldone=await getDailyMenu(storeData1); + // if(isAlldone==true){ + setCheckOutStore(storeData1); + setShowAlert(true); + // } + // else{ + // notify('Please fill all KPI ',false); + // } + } + + function onSaveCancel(){ + setShowAlert(false); + } + + async function getLocOnCheckout(){ + setShowAlert(false); + setLoaderTitle('Updating Checkout Status...'); + setProcessing(true); + Geolocation.getCurrentPosition( + async (position) => { + let {latitude,longitude} = position.coords; + let loc={lat:latitude,lng:longitude}; + UpdateCheckOutStatus(loc) + }, + (error) => { + notify('Cannot get user position'); + setProcessing(false); + }, + { enableHighAccuracy: true, distanceFilter: 0, interval: 1000, fastestInterval: 2000 } + ); + } + + async function UpdateCheckOutStatus(loc){ + let {StoreId,MID}=checkOutStore; + let d=new Date(); + let d2=moment(d).format('MM/DD/YYYY'); + let d3=moment(d).format('MM/DD/YYYY HH:mm:ss'); + + let loginInfo=await get_item('loginInfo'); + const loginDetails=JSON.parse(loginInfo); + + let data1={ + "UserId": loginDetails.UserId, + "StoreId": StoreId, + "Latitude": loc.lat, + "Longitude": loc.lng, + "Checkout_Date": d2, + } + + const url=props.baseurl+getMethodName(METHODS.CHECKOUTDETAIL_METHOD); + + console.log(url,data1); + await UploadData2(url,data1) + .then(async(res)=>{ + console.log('StoreCheckOutSup1:',res,'MID:',MID); + if(!res.error){ + if(res==1){ + //Check out completed + + let data={checkout_image:''} ; + const isCheckOutUpdated=await UpdateStoreCheckOut(data); + + if(isCheckOutUpdated==true){ + let datan={StoreId:StoreId,UploadStatus:'C',tbname:(isAdhocScreen==true?'Adhoc_JourneyPlan':'Mapping_JourneyPlan')} ; + const isUpdated=await UpdateStoreStatus(props,datan); + if(isUpdated==true){ + let outtime=moment(d).format('HH:mm:ss'); ; + await updateStoreStatuslocal('C',checkOutStore,false,true,outtime); + setLoaderTitle('Uploading Data...'); + UploadOnCheckOut(loc); + } + else{ + setProcessing(false);notify('Error occur while checkout','LONG'); + } + } + else{ + notify('Error occur while checkout','LONG'); + } + + } + else{ + notify('Something went wrong!','SHORT');setProcessing(false); + } + } + else{ + notify('Something went wrong!','SHORT');setProcessing(false); + } + }) + .catch((err)=>{ + console.log('onPage Team error',err); + notify('Something went wrong!','SHORT');setProcessing(false); + }); + + + } + + async function updateStoreStatuslocal(status,storeData1,updateCheckin=false,uCOut=false,cout_time=''){ + + let storeArr=state.storeList; + let sdata_index=storeArr.findIndex(i=>i.StoreId==storeData1.StoreId); + if(sdata_index>=0){ + let sdata=storeArr[sdata_index]; + sdata['UploadStatus']=status; + if(updateCheckin==true){ + sdata['CheckInTime']=''; + } + if(uCOut==true){ + sdata['CheckOutTime']=cout_time; + } + storeArr[sdata_index]=sdata; + setState({...state,storeArr}); + setrerenderdata(!rerenderdata); + } + } + + async function UpdateStoreCheckOut(data) { + let d1=new Date(); + let d2=moment(d1).format('MM/DD/YYYY'); + let now=moment(d1).format('MM/DD/YYYY HH:mm:ss'); + return new Promise((resolve,reject)=>{ + db.transaction(async function (txn) { + let q2=`UPDATE ${AppTables.COVERAGE_DATA} SET CHECKOUT_TIME='${now}', CHECKOUT_IMAGE='' WHERE STORE_ID='${checkOutStore.StoreId}' and VISIT_DATE='${d2}' `; + + await txn.executeSql(q2,[],async function (txn2, txnres2) { + console.log('store coverage updated'); + },function(Etxn,txnerr){console.log(txnerr);resolve(false);}); + + let q=`UPDATE ${AppTables.CHECKIN_DATA} SET CHECKOUT_TIME='${now}', CHECKOUT_IMAGE='' WHERE STORE_ID='${checkOutStore.StoreId}' and VISIT_DATE='${d2}' `; + await txn.executeSql(q,[],async function (txn2, txnres2) { + console.log('store checkout updated'); + resolve(true); + },function(Etxn,txnerr){console.log(txnerr);resolve(false);}); + + }); + }).then((val)=>{ + return val; + }).catch((err)=>{ + console.log(err); + return false; + }); + + + } + + + async function UploadOnCheckOut(loc){ + try { + console.log('UploadOnCheckOut'); + let d1=new Date(); + let d2=moment(d1).format('MM/DD/YYYY'); + let token = await get_item('loginToken'); + let loginInfo = await get_item('loginInfo'); + const loginDetails = JSON.parse(loginInfo); + + let PJPStores=await getPJPStoresData('Mapping_JourneyPlan',[],d2); + let AllStores=await getPJPStoresData('Adhoc_JourneyPlan',PJPStores,d2); + + + + await db.transaction(async function (txn) { + console.log('stores to upload:',AllStores.length); + if(AllStores.length>0){ + for (var i=0;i{ + console.log('status uploadres:',res,'MID:',MID); + + if(!res.error){ + let tbname=JCP_TYPE; + let datan={StoreId:StoreId,UploadStatus:'P',tbname:tbname} ; + const isUpdated=await UpdateStoreStatus(props,datan); + if(isUpdated==true){ + + await updateStoreStatuslocal('P',data); + await uploadAfter_P_status(index,AllStores,data,MenuList,allKPIs,JCP_TYPE); + + } + else{ + if(index==AllStores.length-1){ + setProcessing(false);notify('Error occur while uploading data','LONG'); + } + } + } + else{ + if(index==AllStores.length-1){ + setProcessing(false);notify('Error occur while uploading data','LONG'); + } + } + + }) + .catch((err)=>{ + console.log(err); + if(index==AllStores.length-1){ + setProcessing(false);notify('Error occur while uploading data','LONG'); + } + }); + } + else if (UploadStatus=='D'){ + // this never be called if there is no KPI + let allFilesToUpload=await uploadAllData(props,data,allKPIs,props.UserId,JCP_TYPE,false); + if(allFilesToUpload.length>0){ + await UploadDataWithImages(index,AllStores,data,MenuList,allKPIs,JCP_TYPE,allFilesToUpload); + } + else{ + notify('All data uploaded for '+StoreName,'SHORT'); + if(index==AllStores.length-1){ + setProcessing(false); + } + } + } + else if(UploadStatus=='P'){ + await uploadAfter_P_status(index,AllStores,data,MenuList,allKPIs,JCP_TYPE); + } + else if(UploadStatus=='L'){ + let isAllUploaded_S=await uploadStoreStatus(props,data,'U',JCP_TYPE); + if(isAllUploaded_S==true){ + await updateStoreStatuslocal('U',data); + notify('All data uploaded for '+StoreName,'SHORT'); + if(index==AllStores.length-1){ + setProcessing(false); + } + } + else{ + if(index==AllStores.length-1){ + setProcessing(false);notify('Error occur while uploading data','LONG'); + } + } + } + } + + } + }); + + + + } catch (err) { + console.log(err); + } + } + + async function uploadAfter_P_status(index,AllStores,data,MenuList,allKPIs,JCP_TYPE){ + let {StoreName}=data; + if(MenuList.length>0){ + // Upload data with Images + let allFilesToUpload=await uploadAllData(props,data,allKPIs,props.UserId,JCP_TYPE); + await updateStoreStatuslocal('D',data); + UploadDataWithImages(index,AllStores,data,MenuList,allKPIs,JCP_TYPE,allFilesToUpload); + } + else{ + // Upload statua u if no data exists + let isAllUploaded_S=await uploadStoreStatus(props,data,'U',JCP_TYPE); + if(isAllUploaded_S==true){ + await updateStoreStatuslocal('U',data); + notify('All data uploaded for '+StoreName,'SHORT'); + if(index==AllStores.length-1){ + setProcessing(false); + } + } + else{ + if(index==AllStores.length-1){ + setProcessing(false);notify('Error occur while uploading data','LONG'); + } + } + } + } + + async function UploadDataWithImages(index,AllStores,data,MenuList,allKPIs,JCP_TYPE,allFilesToUpload){ + let {StoreName}=data; + if(allFilesToUpload.length>0){ + setLoaderTitle('Uploading Images...'); + console.log('set loader title'); + let isAllUploaded=await uploadAllImages(props,data,allFilesToUpload,JCP_TYPE); + + if(isAllUploaded==true){ + await updateStoreStatuslocal('U',data); + notify('All data and images uploaded for '+StoreName,'SHORT'); + if(index==AllStores.length-1){ + setProcessing(false); + } + }else{ + notify('Cannot upload images for '+StoreName,'SHORT'); + if(index==AllStores.length-1){ + setProcessing(false); + } + } + } + else{ + notify('All data uploaded for '+StoreName,'SHORT'); + if(index==AllStores.length-1){ + setProcessing(false); + } + } + } + + + + async function getPJPStoresData(tbname,Stores=[],d2){ + return new Promise((resolve,reject)=>{ + db.transaction(async function (txn) { + + let join=`INNER JOIN ${AppTables.COVERAGE_DATA} t2 on t2.STORE_ID=t1.StoreId and t2.JCP_TYPE='${tbname}' `; + await txn.executeSql(`Select t1.*,t2.REASON_ID,t2.IMAGE,t2.JCP_TYPE from ${tbname} t1 ${join} where t1.VisitDate='${d2}' and t1.UploadStatus in ('C','P','D','L')`,[],async function (txn2, txnres2) { + if(txnres2.rows.length>0){ + + for(var i=0;i{ + return val; + }) + .catch((err)=>{ + console.log(err); + return Stores; + }) + } + + + + + async function storeVisited(){ + console.log('isgeotag:',currentStore.GeoTag); + setShowStoreVisitModal(false); + if(currentStore.GeoTag=='N'){ + setShowGeoTagModal(true); + } + else if(currentStore.UploadStatus=='N' || currentStore.UploadStatus==''){ + calLocatDistance(); + } + else{ + + } + } + + async function storeNotVisited(){ + setShowStoreVisitModal(false); + props.navigation.navigate('StoreNonWorkingReasons',{storeData:currentStore,'isAdhoc':isAdhocScreen}); + } + + async function onVisitCancel(){ + setLoaderTitle('Deleting Check-In Data...') + setShowCancelCIModal(false); + setProcessing(true); + let {MID,StoreId}=cancelCheckOutStore; + let postdata={'Mid':MID,"UserName":props.UserId,} + + const url=props.baseurl+getMethodName(METHODS.DELETECOVERAGE_METHOD); + console.log(url,postdata); + await UploadData2(url,postdata) + .then(async(res)=>{ + console.log('delete coverage res:',res); + if(res=='1'){ + let isdeleted=await deleteStore(cancelCheckOutStore); + if(isdeleted==true){ + let data={"StoreId":StoreId,UploadStatus:"N",tbname:(isAdhocScreen==true?'Adhoc_JourneyPlan':'Mapping_JourneyPlan')}; + let isUpdated=await UpdateStoreStatus(props,data); + if(isUpdated==true){ + await updateStoreStatuslocal('N',cancelCheckOutStore,true); + setProcessing(false); + notify('Check-In Removed'); + } + else{ + setProcessing(false); + notify('Check-In removed successfully, but cannot update status!'); + } + } + else{ + setProcessing(false); + notify('Check-In removed successfully, but cannot update status!'); + } + } + else{ + setProcessing(false); + notify('Cannot Remove Check-In!'); + } + + }).catch(err => { + console.log('onPage Team error', err); + setProcessing(false); + notify('Cannot Remove Check-In!'); + }); + + } + + async function deleteStore(storeData1){ + let {StoreId}=storeData1; + let allQueries=[ + `Delete from ${AppTables.COVERAGE_DATA} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.GEOTAG} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.HEADER_BACK_OF_STORE} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.CHILD_BACK_OF_STORE} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.SALES} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.INSERT_OPENINGHEADER_DATA} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.STOCK_DATA} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.SHARE_OF_SHELF_IMAGE} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.SHARE_OF_SHELF_FACING_DATA} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.INSERT_SAMPLED_DATA} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.CONTACT_CONVERSION} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.INSERT_ERROR_TRACKING} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.GROOMING_IMAGE_DATA} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.ADDITIONAL_VISIBILITY} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.ADDITIONAL_VISIBILITY_STOCK} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.COMPETITION_VISIBILITY} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.COMPETITION_PROMOTION} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.CHECKIN_DATA} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.PROMOTION_HEADER_DATA} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.PROMOTION_DATA} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.PAID_VISIBILITY_HEADER_DATA} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.PAID_VISIBILITY_CHILD_DATA} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.PAID_VIS_CHECKLIST} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.SURVEY} where STORE_ID='${StoreId}' `, + ] + + return await Promise.all( + allQueries.map(async (q,index) => { + let isDeleted= await executeQuery(q); + return isDeleted==true; + }) + ) + .then((val)=>{ + // if(val.indexOf(false)<0){} + return true; + }).catch((err)=>{ + console.log(err); + return false; + }) + } + + async function executeQuery(q,type='1'){ + return new Promise((resolve,reject)=>{ + db.transaction(async function (txn) { + await txn.executeSql(q,[],async function (txn2, txnres2) { + if(type=='1'){ + resolve(true); + } + else{ + let arr=[]; + if(txnres2.rows.length>0){ + for(var i=0;i{ + return val; + }).catch((err)=>{ + console.log(err); + let d=type=='1'?false:[]; + return d; + }) + } + + function _render_StoreVisitModal(){ + return ( + + + {storeVisited()}}> + Yes + + {storeNotVisited()}}> + No + + + + ) + } + + function _render_GeoTagModal(){ + return ( + + + {setShowGeoTagModal(false)}}> + Cancel + + {setShowGeoTagModal(false);props.navigation.navigate('GeoTag',{storeData:currentStore,'isAdhoc':isAdhocScreen});}}> + Ok + + + + ) + + } + + function _render_CancelCheckinModal(){ + let storename=cancelCheckOutStore.StoreName || ''; + return ( + + + + Your all check-in data will be lost! + + + + + {setShowCancelCIModal(false);}}> + Cancel + + {onVisitCancel()}}> + Ok + + + + ) + } + + function _render_DistanceModal(){ + return ( + + + You need to be in the store + to CheckIn/CheckOut + {`Allowed distance from store: 500 m`} + {`Your distance from store: ${storeDistance}`} + {setShowDistanceModal(false);props.navigation.navigate('StoreCheckin',{storeData:currentStore,'isAdhoc':isAdhocScreen});}}> + Ok + + + + ) + + } + + function _renderList(){ + const storeList_def=JSONView.storeList_def || {}; + let showInCard=storeList_def.showInCard; + showInCard=showInCard==0 || (showInCard!=null && showInCard!='')?showInCard:1; + + return ( + + + { + state.storeList.map((item,index)=>{ + return( + + ); + }) + } + + + + ) + } + + + return ( + + {processing && } + + {_render_StoreVisitModal()} + {_render_GeoTagModal()} + {_render_DistanceModal()} + {_render_CancelCheckinModal()} + {ConfirmSaveAlert(props,showAlert,onSaveCancel,getLocOnCheckout,'Do you really want to checkout?')} + + + { !props.isDataDownloaded && } + + + + + {props.navigation.pop();props.navigation.push('DynamicStoreList')}}> + Planned + + {props.navigation.pop();props.navigation.push('DynamicStoreList',{'isAdhoc': true})}}> + Adhoc + + + + { nodataFound && + + No Data Available + + } + { (props.isDataDownloaded==true && !nodataFound) && rerenderdata==rerenderdata && + _renderList() + } + + + + + + + + ); + } + + + +export default connect(mapStateToProps, mapDispatchToProps)(DynamicStoreList); \ No newline at end of file diff --git a/PerformicsSrc/src/screens/DynamicStoreScore.js b/PerformicsSrc/src/screens/DynamicStoreScore.js new file mode 100644 index 0000000..8b7c28d --- /dev/null +++ b/PerformicsSrc/src/screens/DynamicStoreScore.js @@ -0,0 +1,268 @@ +import React,{useState,useEffect} from 'react'; +import Container from '../components/container'; +import { useRoute } from '@react-navigation/native'; +import { globalStyles,customStyles,GetPageTheme } from "../styles/Global"; +import {StatusBar,Image,TextInput,View,Text,ScrollView,TouchableOpacity,Platform,PermissionsAndroid,FlatList} from 'react-native'; +import { ReactReduxContext,connect,useSelector, useDispatch } from 'react-redux'; +import { mapStateToProps,mapDispatchToProps } from '../reducers/contextProvider'; +import SQLite from 'react-native-sqlite-2'; +import {notify} from '../components/notify'; +import moment from 'moment'; +import {getDownloadJson,DownloadData, getDownloadJson1} from '../controller/functions'; +import {get_item,set_item,clear_item} from '../components/localStorage'; +import {version,sloganline,appname,testurl, db} from '../constants/constants'; +import CustomHeader from '../components/customHeader'; +import {Card} from 'react-native-paper'; +import {AntDesign} from '../components/icons'; +import { WebView } from 'react-native-webview'; +import CustomLoader from '../components/CustomLoader'; +import NoDataComponent from '../components/NoDataComponent'; +import LinearGradient from 'react-native-linear-gradient'; +import { METHODS, getMethodName } from '../constants/methodNames'; + +function DynamicStoreScore(props) { + const route = useRoute(); + const ST=props.StaticText || {}; + // get all theme styles acc to current theme set + const PageTheme=GetPageTheme(props.DarkMode,route.name); + const customStyle=customStyles(props.DarkMode,route.name); + + + const [processing, setProcessing] = useState(true); + const [loaderTitle, setLoaderTitle] = useState(); + const [isAdhocScreen, setIsAdhocScreen] = useState(false); + const [storeData, setStoreData] = useState({}); + const [StoreCameraAllow, setStoreCameraAllow] = useState(true); + const [CalculatedPercent, setCalculatedPercent] = useState(0); + const [TotalScore, setTotalScore] = useState(0); + const [currentMenu, setCurrentMenu] = useState({}); + const [cols, setcols] = useState([]); + + const [reportData, setReportData] = useState([]); + const [designation, setDesignation] = useState(''); + const [colWidth, setColWidth] = useState('100%'); + + const d1=new Date(); + const d2=moment(d1).format('MM/DD/YYYY'); + + + useEffect(() => { + console.log('CategoryExec:'); + setLoaderTitle(ST.Loading+'...') + let params=props.route.params? props.route.params:{}; + let storeData1=params.storeData || {}; + let menu1=params.menu || {}; + let cameraAllow=storeData1.CameraAllow=='true' || storeData1.CameraAllow==1?true:false; + setStoreCameraAllow(cameraAllow); + + let isAdhoc=params.isAdhoc || false; + setIsAdhocScreen(isAdhoc); + setStoreData(storeData1); + setCurrentMenu(menu1); + + getData(storeData1,menu1); + + }, []); + + + // async function getData(storeData1,menu1){ + // try { + // console.log('reportData:1'); + // let loginInfo=await get_item('loginInfo'); + // const loginDetails=JSON.parse(loginInfo); + // let desg=loginDetails.Designation || ''; + // setDesignation(desg); + // await db.transaction(async function (txn) { + // let q=`SELECT * from Report_ComplianceScore where StoreId='${storeData1.StoreId}'`;//54975 + // await txn.executeSql(q,[],async function (txn2, txnres) { + // if(txnres.rows.length>0){ + // let arr=[],totalScore=0,maxScorePerRow=10; + // for(var i=0;i0){ + let data=allReportData[0]; + console.log('data dynamicdata-----',data); + let ShowField=JSON.parse(data.ShowField) + let ColorField=JSON.parse(data.ColorField) + let arrCol=[] + if(ShowField.length>0){ + + for(var i=0;ii.FieldName==data1.FieldName); + if(colorobj!==undefined && colorobj!=""){ + obj["Color"]=colorobj.Color + } + console.log("ITesm,--",obj) + arrCol.push(obj); + } + + if(i==ShowField.length-1){ + let colLen=arrCol.length; + let width=97/colLen; + setColWidth(width+'%'); + setcols(arrCol); + console.log('reportData:',arrCol); + // setReportData(arr); + + } + } + } + + let filterData=allReportData.filter((item)=>item.StoreId==storeData1.StoreId); + setReportData(filterData); + setProcessing(false); + } + + } catch (err) { + setProcessing(false); + console.log(err); + } + } + + async function DownloadReport(){ + let downloadKey="Report_StoreDynamicScore"; + let loginInfo = await get_item('loginInfo'); + const loginDetails = JSON.parse(loginInfo); + const url=props.baseurl+getMethodName(METHODS.DOWNLOADJSON_METHOD); + let data={ + Downloadtype:downloadKey, + Username: loginDetails.UserId, + Param1: '', + Param2: Platform.OS=="ios"?"iOS":"Android", + }; + + console.log(url,data); + return await getDownloadJson1(url,data) + .then(async(res)=>{ + if (res[downloadKey]) { + let data_arr = res[downloadKey] || []; + return data_arr; + } + else{ + return []; + } + }) + .catch((err)=>{ + console.log('onPage Team error',err); + return []; + }); + } + + return ( + + {processing && } + + + + {/* + + {'Previous Audit Score'} + + */} + { !props.isDataDownloaded && } + { true && + + + { + cols.length>0 && + cols.map((item,index)=>( + + {item.FieldName} + + + )) + } + + + + + { + reportData.length>0 && + reportData.map((item,index)=>{ + return( + + {cols.map((col,colindex)=>{ + let colorCode=item && col? ( col.Color=="Y"?item.Color :"") :"" + return ( + + {item[col.FieldName]} + + ) + })} + + ) + }) + } + + + + + {/* + + + {'Calculated :'} + 75? "#32CD32":"red"}]}>{CalculatedPercent+'%'} + + + {'Total Score :'} + {TotalScore} + + + */} + + } + + + + + ); +} + + + +export default connect(mapStateToProps, mapDispatchToProps)(DynamicStoreScore); \ No newline at end of file diff --git a/PerformicsSrc/src/screens/DynamicSurveyCat.js b/PerformicsSrc/src/screens/DynamicSurveyCat.js new file mode 100644 index 0000000..2e78d87 --- /dev/null +++ b/PerformicsSrc/src/screens/DynamicSurveyCat.js @@ -0,0 +1,115 @@ +import React,{useState,useEffect, useRef} from 'react'; +import Container from '../components/container'; +import { useRoute } from '@react-navigation/native'; +import { customStyles,GetPageTheme, STATUSBAR_HEIGHT } from "../styles/Global"; +import {Image,TextInput,View,Text,ScrollView,TouchableOpacity,Platform,FlatList, Alert,Animated} from 'react-native'; +import { connect } from 'react-redux'; +import { mapStateToProps,mapDispatchToProps } from '../reducers/contextProvider'; +import {notify} from '../components/notify'; +import moment from 'moment'; +import {get_item,set_item,clear_item} from '../components/localStorage'; +import {db,} from '../constants/constants'; +import CustomHeader from '../components/customHeader'; +import CustomLoader from '../components/CustomLoader'; +import LinearGradient from 'react-native-linear-gradient'; + + +function DynamicSurveyCat(props) { + const route = useRoute(); + + // get all theme styles acc to current theme set + const PageTheme=GetPageTheme(props.DarkMode,route.name); + const customStyle=customStyles(props.DarkMode,route.name); + + const [processing, setProcessing] = useState(true); + const [loaderTitle, setLoaderTitle] = useState('loading...'); + const [isAdhocScreen, setIsAdhocScreen] = useState(false); + const [storeData, setStoreData] = useState({}); + const [currentMenu, setCurrentMenu] = useState({}); + const [surveys, setSurveys] = useState([]); + const [ActiveSurvey, setActiveSurvey]= useState({}); + + + const d1=new Date(); + const d2=moment(d1).format('MM/DD/YYYY'); + + useEffect(() => { + let params=props.route.params? props.route.params:{}; + let storeData1=params.storeData || {}; + let surveydata=params.surveyData || {}; + let menu1=params.menu || {}; + let isAdhoc=params.isAdhocScreen || false; + setIsAdhocScreen(isAdhoc); + setStoreData(storeData1); + setActiveSurvey(surveydata) + setCurrentMenu(menu1); + getData(surveydata,storeData1); + }, []); + + async function getData(surveydata,storeData1){ + try { + let {StoreId,ChainId,StateId,StoreTypeId}=storeData1; + let surveyQtns=require('../constants/s_qtns.json'); + // setSurveyJson(surveyQtns); + let arr=[] + for(const i in surveyQtns){ + let item=surveyQtns[i] + let {SurveyName,SurveyId,ShowCat,CategoryId,Category,CategorySequence}=item; + let obj={SurveyName,SurveyId,ShowCat,Category,CategoryId} + + if(item.SurveyId==surveydata.SurveyId && arr.findIndex(a=>a.CategoryId==item.CategoryId)<0) + { + arr.push(obj); + } + } + setSurveys(arr);setProcessing(false); + + } catch (err) { + console.log(err); + } + } + + function openSurveyView(item){ + props.navigation.navigate('SurveyView',{'surveyData':ActiveSurvey,'catData':item,'storeData':storeData,'menu':currentMenu,'isAdhocScreen':isAdhocScreen}); + } + + + return ( + + {processing && } + + + + + + {(ActiveSurvey.SurveyName!=null?(ActiveSurvey.SurveyName.length>26?ActiveSurvey.SurveyName.substring(0,26)+'...':ActiveSurvey.SurveyName) : '')} + + + { Object.keys(storeData).length>0 && + { + return( + {openSurveyView(item)}}> + + + {item.Category.substring(0,1)} + + {item.Category} + + + ); + }} + /> + } + + + + ); +} + + + +export default connect(mapStateToProps, mapDispatchToProps)(DynamicSurveyCat); \ No newline at end of file diff --git a/PerformicsSrc/src/screens/DynamicSurveys.js b/PerformicsSrc/src/screens/DynamicSurveys.js new file mode 100644 index 0000000..830d8d9 --- /dev/null +++ b/PerformicsSrc/src/screens/DynamicSurveys.js @@ -0,0 +1,112 @@ +import React,{useState,useEffect, useRef} from 'react'; +import Container from '../components/container'; +import { useRoute } from '@react-navigation/native'; +import { customStyles,GetPageTheme, STATUSBAR_HEIGHT } from "../styles/Global"; +import {Image,TextInput,View,Text,ScrollView,TouchableOpacity,Platform,FlatList, Alert,Animated} from 'react-native'; +import { connect } from 'react-redux'; +import { mapStateToProps,mapDispatchToProps } from '../reducers/contextProvider'; +import {notify} from '../components/notify'; +import moment from 'moment'; +import {get_item,set_item,clear_item} from '../components/localStorage'; +import {db,} from '../constants/constants'; +import CustomHeader from '../components/customHeader'; +import CustomLoader from '../components/CustomLoader'; +import LinearGradient from 'react-native-linear-gradient'; + + +function DynamicSurveys(props) { + const route = useRoute(); + + // get all theme styles acc to current theme set + const PageTheme=GetPageTheme(props.DarkMode,route.name); + const customStyle=customStyles(props.DarkMode,route.name); + + const [processing, setProcessing] = useState(true); + const [loaderTitle, setLoaderTitle] = useState('loading...'); + const [isAdhocScreen, setIsAdhocScreen] = useState(false); + const [storeData, setStoreData] = useState({}); + const [currentMenu, setCurrentMenu] = useState({}); + const [surveys, setSurveys] = useState([]); + + + const d1=new Date(); + const d2=moment(d1).format('MM/DD/YYYY'); + + useEffect(() => { + let storeData1={"Address": "test", "ChainId": 1, "ChainName": "GT", "ChannelId": 1, "CheckInTime": "", "CheckOutTime": "", "CityId": 3, "CityName": "Thailand", "ContactPerson": "bhhvhhhhhhh be", "Email": "njj", "EmpId": 4, "ExpiryStock": "N", "GeoFenceRadius": 500, "GeoTag": "Y", "InTime": "00:00:00", "Landmark": "-j", "Latitude": "28.5376374", "Location": "Lower Parel", "Longitude": "77.297907", "MID": 852, "Mobile": "9969999999", "OutTime": "00:00:00", "Phone": "6699996669", "Pincode": "400001", "RegionId": 1, "StateId": 1, "StateName": "Chiang Mai", "StoreCode": "W-S-LS-ST00008", "StoreId": 1, "StoreName": "teststore1", "StoreType": "D150", "StoreTypeId": 1, "UploadStatus": "N", "VisitDate": "05/09/2022"}; + let menu1={"MenuName":"Survey","MenuId":"1"}; + let isAdhoc=false; + setIsAdhocScreen(isAdhoc); + setStoreData(storeData1); + setCurrentMenu(menu1); + getData(storeData1); + }, []); + + async function getData(storeData1){ + try { + let {StoreId,ChainId,StateId,StoreTypeId}=storeData1; + let surveyQtns=require('../constants/s_qtns.json'); + // setSurveyJson(surveyQtns); + let arr=[] + for(const i in surveyQtns){ + let item=surveyQtns[i] + let obj={SurveyName:item.SurveyName,SurveyId:item.SurveyId,ShowCat:item.ShowCat} + if(arr.findIndex(a=>a.SurveyId==item.SurveyId)<0) + { + arr.push(obj); + } + } + setSurveys(arr);setProcessing(false); + + } catch (err) { + console.log(err); + } + } + + function openSurveyView(item){ + let {ShowCat}=item + console.log(item); + if(ShowCat==1){ + props.navigation.navigate('DynamicSurveyCat',{'surveyData':item,'storeData':storeData,'menu':currentMenu,'isAdhocScreen':isAdhocScreen}); + } + else{ + props.navigation.navigate('SurveyView',{'surveyData':item,'storeData':storeData,'menu':currentMenu,'isAdhocScreen':isAdhocScreen}); + } + } + + + return ( + + {processing && } + + + + + { Object.keys(storeData).length>0 && + { + return( + {openSurveyView(item)}}> + + + {item.SurveyName.substring(0,1)} + + {item.SurveyName} + + + ); + }} + /> + } + + + + ); +} + + + +export default connect(mapStateToProps, mapDispatchToProps)(DynamicSurveys); \ No newline at end of file diff --git a/PerformicsSrc/src/screens/Feedback.js b/PerformicsSrc/src/screens/Feedback.js new file mode 100644 index 0000000..86914ef --- /dev/null +++ b/PerformicsSrc/src/screens/Feedback.js @@ -0,0 +1,1549 @@ +import React,{useState,useEffect, useRef} from 'react'; +import Container from '../components/container'; +import { useRoute } from '@react-navigation/native'; +import { customStyles,GetPageTheme, STATUSBAR_HEIGHT } from "../styles/Global"; +import {Image,TextInput,View,Text,ScrollView,TouchableOpacity,Platform,FlatList, Alert, Dimensions,Animated, Easing} from 'react-native'; +import { connect } from 'react-redux'; +import { mapStateToProps,mapDispatchToProps } from '../reducers/contextProvider'; +import {notify} from '../components/notify'; +import moment from 'moment'; +import {marktext1,marktext2} from '../controller/functions'; +import {db, common_ImagePath, ImageFolderPath} from '../constants/constants'; +import CustomHeader from '../components/customHeader'; +import {AntDesign, Entypo, FontAwesome, FontAwesome5, Fontisto, MaterialCommunityIcons} from '../components/icons'; +import CustomLoader from '../components/CustomLoader'; +import LinearGradient from 'react-native-linear-gradient'; +import { AppTables } from '../constants/tableConstants'; +import * as RNFS from 'react-native-fs'; +import GradientButton from '../components/gradientButton'; +import { ConfirmSaveAlert } from '../components/alert'; +import ModalSelector from 'react-native-modal-selector'; +import MultiSelect from 'react-native-multiple-select'; +import { PageTheme } from '../styles/Themes'; +import DateTimePicker from '@react-native-community/datetimepicker'; +import DraggableFlatList,{ScaleDecorator} from 'react-native-draggable-flatlist' +import AudioRecorderPlayer, { AudioEncoderAndroidType, AudioSourceAndroidType, AVEncoderAudioQualityIOSType, AVEncodingOption, AVModeIOSOption } from 'react-native-audio-recorder-player'; +import CustomCamera from '../components/Camera'; + +const {height, width} = Dimensions.get('window'); +const topbarht=STATUSBAR_HEIGHT+50; +const actualWindowHt=parseInt((height-topbarht)+10); + +function Feedback(props) { + const route = useRoute(); + const audioRecorderPlayer = new AudioRecorderPlayer(); + const AudioSet = { + AudioEncoderAndroid: AudioEncoderAndroidType.AAC, + AudioSourceAndroid: AudioSourceAndroidType.MIC, + AVModeIOS: AVModeIOSOption.measurement, + AVEncoderAudioQualityKeyIOS: AVEncoderAudioQualityIOSType.high, + AVNumberOfChannelsKeyIOS: 2, + AVFormatIDKeyIOS: AVEncodingOption.aac, + }; + // get all theme styles acc to current theme set + const PageTheme=GetPageTheme(props.DarkMode,route.name); + const customStyle=customStyles(props.DarkMode,route.name); + + const [processing, setProcessing] = useState(true); + const [loaderTitle, setLoaderTitle] = useState('loading...'); + const [isAdhocScreen, setIsAdhocScreen] = useState(false); + const [showRating, setShowRating] = useState(false); + const [RatingQtn, setRatingQtn] = useState({}); + const [RatingOrder, setRatingOrder] = useState([]); + const [showRecorder, setShowRecorder] = useState(false); + const [VRS, setVRS] = useState({}); + const [RecorderTimer, setRecorderTimer] = useState({}); + const [playerTimer, setPlayerTimer] = useState({}); + const [rerenderView, setRerenderView] = useState(0); + const [hasUnsavedChanges,setHasUnsavedChanges] = useState(false); + const [VoiceRecorderStatus, setVoiceRecorderStatus] = useState('Press mic to start recording voice'); + const [RecFilePath, setRecFilePath] = useState({}); + const [dateValue, setDateValue] = useState(''); + const [openDatePicker, setOpenDatePicker]= useState(0); + const [storeData, setStoreData] = useState({}); + const [currentMenu, setCurrentMenu] = useState({}); + const [rerenderdata, setrerenderdata]= useState(0); + const [SurveySubCats, setSurveySubCats]= useState([]); + const [SurveyQuestions, setSurveyQuestions]= useState([]); + const [QuestionsData,setQuestionsData]=useState({}); + const [showAlert, setShowAlert] = useState(false); + const [showCamera, setShowCamera] = useState(false); + const [getImageProps,setGetImageProps]= useState({}); + const [StoreCameraAllow, setStoreCameraAllow] = useState(true); + + const animatedRipple=useRef(new Animated.Value(0)).current; + const animatedRipple2=useRef(new Animated.Value(0.5)).current; + + const d1=new Date(); + const d2=moment(d1).format('MM/DD/YYYY'); + + useEffect(() => { + let params=props.route.params? props.route.params:{}; + let storeData1=params.storeData || {}; + + let cameraAllow=storeData1.CameraAllow=='true' || storeData1.CameraAllow==1?true:false; + setStoreCameraAllow(cameraAllow); + + let menu1=params.menu || {}; + let isAdhoc=params.isAdhocScreen || false; + setStoreData(storeData1); + setCurrentMenu(menu1); + setIsAdhocScreen(isAdhoc); + + + getSurveyData(storeData1,menu1); + const unsubscribe=props.navigation.addListener('beforeRemove', onBeforeRemove); + + return (()=>{ + audioRecorderPlayer.removePlayBackListener(); + audioRecorderPlayer.removeRecordBackListener(); + return unsubscribe; + }); + }, []); + + useEffect(() => { + const unsubscribe=props.navigation.addListener('beforeRemove', onBeforeRemove); + return unsubscribe; + }, [hasUnsavedChanges]); + + useEffect(() => { + const unsubscribe=props.navigation.addListener('beforeRemove', onBeforeRemove); + return unsubscribe; + }, [showCamera]); + + function onBeforeRemove(e){ + if(showCamera==true){ + e.preventDefault(); + setShowCamera(false); + } + else{ + if (hasUnsavedChanges==true) { + e.preventDefault(); // Prevent default behavior of leaving the screen + onRemoveScreen(e); + } + else{ + return; + } + } + } + + function onRemoveScreen(e){ + Alert.alert( + "", + "Do you really want to exit the screen?", + [ + { + text: "Cancel", + onPress: () => {}, + style: "cancel" + }, + { text: "OK", onPress: () => {setHasUnsavedChanges(false);props.navigation.dispatch(e.data.action);} } + ] + ); + } + + async function getSurveyData(storeData1,menu1){ + try { ; + + await db.transaction(async function (txn) { + + let q2=`SELECT DISTINCT FeedbackCategory as Category,FeedbackCategoryId as CategoryId FROM Master_FeedbackQuestion order by FeedbackQuestionSequence `; + await txn.executeSql(q2,[],async function (txn2, txnres) { + console.log('feedback cats:',txnres.rows.length); + if(txnres.rows.length>0){ + let arr=[],allQtns=[]; + for(var i=0;i{ + try { + let {StoreId}=storeData1; + + db.transaction(async function (txn) { + + // get inserted audit + let selectlist=` DISTINCT T.FeedbackCategoryId as CategoryId,T.FeedbackCategory as Category,T.FeedbackQuestionId as QuestionId,T.FeedbackQuestionCode as QuestionCode,T.FeedbackQuestionName as Question,T.QuestionType,T.FQShowCamera,T.FQCameraMandatory,T.FQLengthValidationRequired,T.FQMinimumChar,T.FQMaximumChar,T.FQDecimalPoint,T.FQDateRangeMin,T.FQDateRangeMax,T.FQVoiceLengthInMinutes,T.FQDefaultQuestionEnable,T.FeedbackQuestionSequence,T1.ANSWER As Answer, T1.ANSWER_ID as AnswerId,T1.IMAGE_ALLOW1 as ImageAllow1,T1.IMAGE1 as Image1,T1.MULTI_OPTIONS_IDS as multi_op_ids,T1.IS_DISABLED as isDisabled `; + let join=` INNER JOIN ${AppTables.FEEDBACK_DATA} T1 on T.FeedbackQuestionId=T1.QUESTION_ID and T.FeedbackCategoryId=T1.CATEGORY_ID`; + let q2=`Select ${selectlist} FROM Master_FeedbackQuestion T ${join} WHERE T1.STORE_ID='${StoreId}' AND T1.VISIT_DATE= '${d2}' and T.FeedbackCategoryId='${cat.CategoryId}' ORDER BY T.FeedbackQuestionSequence `; + + + await txn.executeSql(q2,[],async function (txn2, txnres) { + console.log('fb data len',txnres.rows.length); + if(txnres.rows.length>0){ + let arr=[]; + var QD=QuestionsData; + for(var i=0;i0){ + for(var k=0;k=0)){ + showImageTag=true; + } + + if(qtn.QuestionType=='Single choice list' && (isandImgAl2 && ansss.AnswerId==selansid)){ + showImageTag2=true; + } + else if(qtn.QuestionType=='Multi choice list' && (isandImgAl2 && selansid.indexOf(ansss.AnswerId)>=0)){ + showImageTag2=true; + } + + } + } + } + + if(showImageTag){ + let imgPath=(Platform.OS=='ios'?'file://':'')+`${ImageFolderPath+menu1.ScreenName}/`+data.Image1; + QD[imgname_key]=data.Image1; + QD[img_key]=imgPath; + } + + if(showImageTag2){ + let imgPath=(Platform.OS=='ios'?'file://':'')+`${ImageFolderPath+menu1.ScreenName}/`+data.Image2; + QD[imgname_key2]=data.Image2; + QD[img_key2]=imgPath; + } + + + + if(qtn.QuestionType=='Audio'){ + let voicefile_path=(Platform.OS=='ios'?'file://':'')+`${ImageFolderPath+menu1.ScreenName}/`+'Recordings/'+data.Answer; + QD[voiceClip_key]={'path':voicefile_path,'filename':data.Answer}; + } + + if(qtn.QuestionType=='Date'){ + let dayonly=moment().format('DD'); + let actual_date=data.Answer?data.Answer.split('/'):[]; + let month=actual_date[0],year=actual_date[1]; + let fulldate=month+'/'+dayonly+'/'+year; + QD[date_key]=fulldate; + + } + arr.push(data); + if(i==txnres.rows.length-1){ + setQuestionsData(QD); + resolve(arr); + } + } + } + else{ + let sl=` DISTINCT T.FeedbackCategoryId as CategoryId,T.FeedbackCategory as Category,T.FeedbackQuestionId as QuestionId,T.FeedbackQuestionCode as QuestionCode,T.FeedbackQuestionName as Question,T.QuestionType,T.FQShowCamera,T.FQCameraMandatory,T.FQLengthValidationRequired,T.FQMinimumChar,T.FQMaximumChar,T.FQDecimalPoint,T.FQDateRangeMin,T.FQDateRangeMax,T.FQVoiceLengthInMinutes,T.FQDefaultQuestionEnable,T.FeedbackQuestionSequence`; + let q=` SELECT ${sl} FROM Master_FeedbackQuestion T WHERE T.FeedbackCategoryId='${cat.CategoryId}' order by T.FeedbackQuestionSequence `; + await txn.executeSql(q,[],async function (txn2, txnres2) { + console.log('fb qtns:',txnres2.rows.length) + let arr=[]; + if(txnres2.rows.length>0){ + for(var i=0;i{ + db.transaction(async function (txn) { + // get inserted audit + let selectlist=` DISTINCT T.FeedbackAnswerId as AnswerId,T.FeedbackAnswerCode as AnswerCode,T.FeedbackAnswerName as Answer,T.FAShowCamera as ImageAllow1,T.FAQuestionEnable as EnableQuestion,T.FAQuestionDisable as DisableQuestion`; + let q2=`Select ${selectlist} FROM Master_FeedbackQuestion T WHERE T.FeedbackQuestionId='${qtn.QuestionId}' ORDER BY T.FASequence `; + + await txn.executeSql(q2,[],async function (txn2, txnres) { + if(txnres.rows.length>0){ + let arr=[]; + for(var i=0;i{ + return {'Answers':val,'Success':true}; + }).catch((err)=>{ + console.log(err); + return {'Success':false,'Error':err} + }); + } + + async function getImage(imgdata){ + let qtn=getImageProps.qtn || ''; + let type=getImageProps.type || '1'; + if(typeof imgdata =='object' && imgdata.errorCode=='camera_unavailable'){ + notify('Camera unavailable'); + } + else if(typeof imgdata =='object' && imgdata.uri!=null){ + const img=imgdata; + const imgurl=img.uri, imgWidth=img.width, imgHeight=img.height; + let isImgFromGallery=img.fromGallery!=null?img.fromGallery:false; + let picture_clickedd=isImgFromGallery==true?img.datetime:new Date(); + + let picture_clicked_time=moment(picture_clickedd).format('MM-DD-YYYY HH:mm:ss') + let picture_clicked_time_for_pic_name=moment(picture_clickedd).format('MMDDYYYY_HHmmss') + + console.log("time", picture_clicked_time); + console.log("time1", picture_clicked_time_for_pic_name); + let calculate_tym_date_for_filename = picture_clicked_time_for_pic_name; + let calculate_tym_date_over_img = picture_clicked_time; + + const mark_text1=calculate_tym_date_over_img; + const mark_text2='Store Name:'+storeData.StoreName+' | Store Id:'+storeData.StoreId+' | Question Id :'+qtn.QuestionId+' | Image Type: Feedback'+' | Date:'+calculate_tym_date_over_img; + + await marktext1(mark_text1,imgurl) + .then((res)=>{ + if(res.success){ + let uri=res.uri; + marktext2(mark_text2,uri,imgWidth,imgHeight) + .then((res)=>{ + if(res.success){ + let filename=storeData.StoreId+'_'+qtn.QuestionId+'_FeedbackImg_'+calculate_tym_date_for_filename+'.jpg'; + let qd=QuestionsData; + let img_key=type=='1'?qtn.QuestionId+'_ImagePath1':qtn.QuestionId+'_ImagePath2'; + let imgname_key=type=='1'?qtn.QuestionId+'_ImageName1':qtn.QuestionId+'_ImageName2'; + qd[imgname_key]=filename; + + // renamefile + let imagePath=`${ImageFolderPath+currentMenu.ScreenName}/${filename}`;; + RNFS.copyFile(res.uri, imagePath) + .then(resn => { + let uri='file://'+imagePath; + console.log('image marker',uri); + qd[img_key]=uri; + + setQuestionsData(qd); + setHasUnsavedChanges(true); + setrerenderdata(!rerenderdata); + }) + .catch(err => { + console.log('ERROR: image file write failed!!!'); + console.log(err.message, err.code); + }); + + } + else{ + if(res.imagenotfound){ + notify('Please capture a image'); + } + else{ + notify(res.error); + } + } + }); + } + else{ + if(res.imagenotfound){ + notify('Please capture a image'); + } + else{ + notify(res.error); + } + } + }); + } + } + + async function openCamera(qtn,type){ + setGetImageProps({'qtn':qtn,'type':type}); + setShowCamera(true); + // props.navigation.navigate('CameraScreen',{'getImage':getImage,'cameraType':'back'}) + } + + async function disableQtns(sqtns,DQtns,data,isreturn=false){ + if(DQtns.length>0){ + new Promise.all( + DQtns.map((qid,q_index)=>{ + let s_qtnindex=sqtns.findIndex(i=>i.QuestionId==qid) || {}; + let s_qtn=sqtns[s_qtnindex]; + if(s_qtn!=null){ + s_qtn['isDisabled']=true + sqtns[s_qtnindex]=s_qtn; + let id_key=s_qtn.QuestionId+'_AnswerId'; + let ans_key=s_qtn.QuestionId+'_Answer'; + data[id_key]=0; + data[ans_key]=''; + return false + }else{ + return false + } + }) + ).then(async (val)=>{ + setSurveyQuestions(sqtns); + setQuestionsData(data); + setHasUnsavedChanges(true); + setrerenderdata(!rerenderdata); + }) + } + } + + async function enableQtns(sqtns,EQtns,DQtns,data){ + new Promise.all( + EQtns.map((qid,q_index)=>{ + let s_qtnindex=sqtns.findIndex(i=>i.QuestionId==qid) || {}; + let s_qtn=sqtns[s_qtnindex]; + if(s_qtn!=null){ + s_qtn['isDisabled']=false + sqtns[s_qtnindex]=s_qtn; + return false + }else{ + return false + } + }) + ).then(async (val)=>{ + if(DQtns.length>0){ + disableQtns(sqtns,DQtns,data) + } + else{ + setSurveyQuestions(sqtns); + setHasUnsavedChanges(true); + setrerenderdata(!rerenderdata); + } + }) + } + + function onselectionChange(option,qtn){ + let data=QuestionsData; + let id_key=qtn.QuestionId+'_AnswerId'; + let ans_key=qtn.QuestionId+'_Answer'; + data[id_key]=option.value; + data[ans_key]=option.label; + + setQuestionsData(data); + + let aq_ans=qtn.Answers!=null?qtn.Answers:[]; + let ans_obj=aq_ans.find(i=>i.AnswerId==option.value) || {}; + let EQtns=ans_obj.EnableQuestion!=null && ans_obj.EnableQuestion!=''?ans_obj.EnableQuestion.replace(' ','').split(','):[]; + let DQtns=ans_obj.DisableQuestion!=null && ans_obj.DisableQuestion!=''?ans_obj.DisableQuestion.replace(' ','').split(','):[]; + + let sqtns=SurveyQuestions + if(EQtns.length>0){ + enableQtns(sqtns,EQtns,DQtns,data) + } + else if(DQtns.length>0){ + disableQtns(sqtns,DQtns,data) + } + else{ + setHasUnsavedChanges(true); + setrerenderdata(!rerenderdata); + } + + + + } + + function setTextValue(value,qtn) { + let id_key=qtn.QuestionId+'_AnswerId'; + let ans_key=qtn.QuestionId+'_Answer'; + + let obj=QuestionsData; + if(qtn.QuestionType=='Date' ){ + let date_key=qtn.QuestionId+'_Date'; + let d=value!=null?new Date(value):new Date(); + let mfdate=moment(d).format('MM/YYYY'); + showQtnDatePicker(qtn,false); + obj[id_key]=0; + obj[ans_key]=mfdate; + obj[date_key]=moment(d).format('MM/DD/YYYY'); + } + else{ + obj[id_key]=0; + obj[ans_key]=value; + } + console.log(value,obj); + setQuestionsData(obj); + setHasUnsavedChanges(true); + setrerenderdata(!rerenderdata); + } + + function setRatingValue(data){ + // let ids=[]; + // data.map((item,index)=>{ + // ids.push(item.AnswerId); + // }) + setRatingOrder(data); + } + + + async function setMultiSelectValue(selectedItems=[],qtn) { + console.log('setMultiSelectValue',selectedItems); + let id_key=qtn.QuestionId+'_AnswerId'; + let ans_key=qtn.QuestionId+'_Answer'; + let multi_key=qtn.QuestionId+'_MultiOption'; + let obj=QuestionsData; + obj[id_key]=0; + obj[multi_key]=selectedItems.join(','); + let anss=[]; + selectedItems.map((itemValue)=>{ + let ans = qtn.Answers.find(c1 => c1.AnswerId == itemValue); + if(ans.Answer){anss.push(ans.Answer)} + }); + obj[ans_key]=anss.join(','); + console.log('obj:',obj); + setQuestionsData(obj); + setHasUnsavedChanges(true); + setrerenderdata(!rerenderdata); + } + + + function showQtnDatePicker(qtn,show=false){ + let newqtnIndex=SurveyQuestions.findIndex(q=>q.QuestionId==qtn.QuestionId); + console.log('showQtnDatePicker:',newqtnIndex); + if(newqtnIndex>=0){ + let sq=SurveyQuestions; + let newqtn=sq[newqtnIndex]; + newqtn.showDatePicker=show; + sq[newqtnIndex]=newqtn; + setSurveyQuestions(sq); + if(show==true) setrerenderdata(!rerenderdata); + } + } + + + function setShowQtnKey(qtn,key,show=false){ + if(key!=null && key!=''){ + let newqtnIndex=SurveyQuestions.findIndex(q=>q.QuestionId==qtn.QuestionId); + console.log('setShowQtnKey:',newqtnIndex); + if(newqtnIndex>=0){ + let sq=SurveyQuestions; + let newqtn=sq[newqtnIndex]; + newqtn[key]=show; + sq[newqtnIndex]=newqtn; + setSurveyQuestions(sq); + if(show==true) setrerenderdata(!rerenderdata); + } + } + } + + function onRatingCancel(){ + setShowRating(false); + + } + + function onRatingSave(){ + setShowRating(false); + + let qtn=RatingQtn; + let id_key=qtn.QuestionId+'_AnswerId'; + let ans_key=qtn.QuestionId+'_Answer'; + let rating_key=qtn.QuestionId+'_Rating'; + let ids=[],anss=[]; + RatingOrder.map((item,index)=>{ + ids.push(item.AnswerId); + anss.push(item.Answer); + }) + let obj=QuestionsData; + obj[rating_key]=ids.join(','); + obj[id_key]=0; + obj[ans_key]=anss.join(','); + + console.log(obj); + setQuestionsData(obj); + setHasUnsavedChanges(true); + setrerenderdata(!rerenderdata); + } + + function onRecordCancel(){ + setShowRecorder(false); + } + + function onRecordSave(){ + + let isRecorderPlaying=VRS.RecorderPlayStatus!=null && VRS.RecorderPlayStatus==true; + let isPlayerPlaying=VRS.PlayerPlayStatus!=null && VRS.PlayerPlayStatus==true; + + if(isRecorderPlaying){ + notify('Please stop recording first'); + return; + } + else if(isPlayerPlaying){ + stopPlayer(VRS); + // notify('Please stop playing audio first'); + // return; + } + + setShowRecorder(false); + let qtn=RatingQtn; + let id_key=qtn.QuestionId+'_AnswerId'; + let ans_key=qtn.QuestionId+'_Answer'; + let voiceClip_key=qtn.QuestionId+'_VoiceClip'; + + let obj=QuestionsData; + obj[ans_key]=RecFilePath.filename || ''; + obj[id_key]=0; + obj[voiceClip_key]=RecFilePath; + + setQuestionsData(obj); + setHasUnsavedChanges(true); + setrerenderdata(!rerenderdata); + } + + const RippleAnimation = (value,minValue,maxValue,delay) => + Animated.loop( + Animated.sequence([ + Animated.timing(value, { + toValue: maxValue, + duration: 1000, + delay:delay, + useNativeDriver:(Platform.OS=='ios'?false:true), + }), + Animated.timing(value, { + toValue: minValue, + duration: 1000, + delay:delay, + useNativeDriver:(Platform.OS=='ios'?false:true), + }), + ]), + + ).start(); + + const startRecorder = React.useCallback(async (storeData1,qtn,vrStatus) => { + try{ + console.log('startRecorder') + if(audioRecorderPlayer!=null){ + + if(vrStatus['RecorderPlayStatus']==true){ + notify('Already Recording...') + return; + } + else if(vrStatus['PlayerPlayStatus']==true){ + notify('Please stop player first!') + return; + } + + stopPlayer(vrStatus); + + let picture_clickedd=new Date(); + let picture_clicked_date=moment(picture_clickedd).format('YYYYMMDD'); + let picture_clicked_time=moment(picture_clickedd).format('HHmmss'); + let commname=storeData1.StoreId+'_'+qtn.QuestionId+'_FeedbackRecording_'+picture_clicked_date+'_'+picture_clicked_time; + let filename=Platform.OS=='ios'?commname+'.m4a':commname+'.mp3'; + + const url=Platform.OS=='ios'?'file://'+`${ImageFolderPath+currentMenu.ScreenName}/`+'Recordings/'+filename:`${ImageFolderPath+currentMenu.ScreenName}/`+'Recordings/'+filename; + const url_dir=`${ImageFolderPath+currentMenu.ScreenName}/`+'Recordings/'; + console.log('write file url:',url); + RNFS.mkdir(url_dir).then((res)=>{ + + RNFS.writeFile(url, '') + .then(async (success) => { + // if(success!=null){ + const path = Platform.select({ + ios: url, + android: url, + }); + + const result = await audioRecorderPlayer.startRecorder(path,AudioSet); + + if(result!=null && result!=''){ + console.log('start recording now'); + vrStatus['RecorderPlayStatus']=true; + setVRS(vrStatus); + setRecFilePath({'path':url,'filename':filename}); + // animate + RippleAnimation(animatedRipple,0,1,0); + RippleAnimation(animatedRipple2,0,1,100); + + audioRecorderPlayer.addRecordBackListener((e) => { + let recordsec=e.currentPosition; + let data={'recordSecs':recordsec,'recordTime':audioRecorderPlayer.mmssss(Math.floor(recordsec))}; + if(vrStatus['RecorderPlayStatus']==true) + { + setRecorderTimer(data); + setHasUnsavedChanges(true); + setVoiceRecorderStatus('Recording... ! Press mic to stop recording'); + } + + console.log('recordsec:',recordsec); + if(recordsec>=60*1000){ + stopRecorder(vrStatus); + notify('Maximum record time limit reached.','LONG'); + } + return; + }); + } + console.log('start recorder:',result); + // } + // else{ + // notify('Something Went Wrong! Cannot open file for recording!'); + // } + + }) + .catch((err) => { + console.log('eerriur1',err.message); + notify('Something Went Wrong! Cannot open file for recording!'); + }); + }) + .catch((err) => { + console.log('eerriur2',err.message); + notify('Something Went Wrong! Cannot open file for recording!'); + }); + + } + } + catch(e){ + console.log('error:',e); + } + + },[]); + + + + + + + const stopRecorder = React.useCallback(async (vrStatus) => { + try{ + console.log('stopRecorder'); + if(audioRecorderPlayer!=null){ + + animatedRipple.setValue(0); + animatedRipple2.setValue(0.5); + const uri = await audioRecorderPlayer.stopRecorder(); + audioRecorderPlayer.removeRecordBackListener(); + + vrStatus['RecorderPlayStatus']=false; + vrStatus['PlayerPlayStatus']=false; + setPlayerTimer({}); + setVRS({...VRS,vrStatus}); + setVoiceRecorderStatus('Press mic to start recording voice'); + } + } + catch(e){ + console.log('error:',e); + } + + },[]); + + const startPlayer = React.useCallback(async (url,vrStatus1,type='0') => { + try{ + let vrStatus=VRS; + let qtn=RatingQtn; + if(audioRecorderPlayer!=null){ + console.log('startPlayer1',url); + if(vrStatus['PlayerPlayStatus']==true){ + notify('Already Playing...') + return; + } + else if(vrStatus['RecorderPlayStatus']==true){ + notify('Please stop recording first!') + return; + } + else if(url=='' || url==null){ + notify('File not found!') + return; + } + + const result = await audioRecorderPlayer.startPlayer(url); + if(result!=null){ + vrStatus['PlayerPlayStatus']=true; + setVRS(vrStatus); + + audioRecorderPlayer.addPlayBackListener((e) => { + let playDuration=audioRecorderPlayer.mmssss(Math.floor(e.duration)); + let vrs=VRS; + let data={'playerSecs':e.currentPosition,'totalDuration':e.duration,'playDuration':playDuration,'playTime':audioRecorderPlayer.mmssss(Math.floor(e.currentPosition),)}; + let data2={'playerSecs':'0000','totalDuration':e.duration,'playDuration':playDuration,'playTime':"00:00:00"}; + if(vrs['PlayerPlayStatus']==true) + { + setPlayerTimer(e.currentPosition<0?data2:data); + } + if(e.currentPosition<0){ + return ; + } + let wp=e.duration!=null?Math.floor((e.currentPosition/e.duration)* 100):0; + console.log('wp:',wp); + if(wp>=100 || isNaN(wp)){ + stopPlayer(vrs); + } + else if(type=='1' && wp<1){ + pausePlayer(); + } + setProcessing(false); + return; + }); + } + else{ + setProcessing(false); + } + } + } + catch(e){ + console.log('error:',e); + setProcessing(false); + } + + },[]); + + const resumePlayer = React.useCallback(async (url)=>{ + console.log('resume player') + let vrStatus=VRS; + const res=await audioRecorderPlayer.resumePlayer(); + console.log('res:',res); + if(res=='No audio playing'){ + startPlayer(url,vrStatus); + } + vrStatus['PlayerPlayStatus']=true; + setVRS({...VRS,vrStatus}); + },[]); + + + const pausePlayer = React.useCallback(()=>{ + console.log('pause player') + let vrStatus=VRS; + audioRecorderPlayer.pausePlayer(); + vrStatus['PlayerPlayStatus']=false; + setVRS({...VRS,vrStatus}); + },[]); + + const stopPlayer = React.useCallback(async (vrStatus) => { + try{ + console.log('stop player now'); + + if(audioRecorderPlayer!=null){ + const uri = await audioRecorderPlayer.stopPlayer(); + audioRecorderPlayer.removePlayBackListener(); + vrStatus['PlayerPlayStatus']=false; + setVRS({...VRS,vrStatus}); + } + } + catch(e){ + console.log('error:',e); + } + + },[]); + + async function show_recorder(qtn){ + let voiceClip_key=qtn.QuestionId+'_VoiceClip'; + let url=QuestionsData[voiceClip_key]?QuestionsData[voiceClip_key].path :''; + setRatingQtn(qtn); + if((RecorderTimer==null || Object.keys(RecorderTimer).length<=0) && (playerTimer==null || Object.keys(playerTimer).length<=0) && url!=null && url!=''){ + setLoaderTitle('Loading...'); + setProcessing(true); + await startPlayer(url,VRS,'1'); + } + setRecFilePath((QuestionsData[voiceClip_key] || {})); + setShowRecorder(true); + } + + async function onSubmitData(){ + let isvalid=await validate(); + if(isvalid){ + setShowAlert(true); + } + } + + function onSaveCancel(){ + setShowAlert(false); + } + + async function saveData(){ + setHasUnsavedChanges(false); + setShowAlert(false); + setLoaderTitle('Saving Data...'); + setProcessing(true); + try { + let {StoreId,ChainId,StateId,StoreTypeId}=storeData; + await db.transaction(async function (txn) { + + // remove old data + let q=`DELETE FROM ${AppTables.FEEDBACK_DATA} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' `; + await txn.executeSql(q,[],async function (txn2, txnres) { + console.log('fb data deleted'); + },function (txnE,txnerr) { console.log(txnerr); },); + + + var values=''; + for(var i=0;ii.AnswerId==selansid) + let showImageTag=false; + + let imgallow1=ans_obj!=null && ans_obj['ImageAllow1']!=null?ans_obj.ImageAllow1:false; + let f_imgalloq1=(FQShowCamera=='true' || FQShowCamera==1) || (imgallow1=='true' || imgallow1==1) + + values+=` ('${StoreId}','${d2}','${CategoryId}','${QuestionCode}','${QuestionId}','${QuestionType}','${selans}','${selansid}','${f_imgalloq1}','${imgName1}','${multiops}','${isQtnDisabled}','${d2}') `; + } + + + let add_data=`INSERT INTO ${AppTables.FEEDBACK_DATA} (STORE_ID,VISIT_DATE,CATEGORY_ID,QUESTION_CODE,QUESTION_ID,QUESTION_TYPE,ANSWER,ANSWER_ID,IMAGE_ALLOW1,IMAGE1,MULTI_OPTIONS_IDS,IS_DISABLED,ADDED_DATE) VALUES ${values} `; + + await txn.executeSql(add_data,[],async function (txn2, txnres) { + console.log('surveys added'); + // props.set_autoback({'AutoGoToPrev':true}); + notify('Survey updated successfully','SHORT'); + setProcessing(false); + props.navigation.goBack(); + + },function (txnE,txnerr) { console.log(txnerr);setProcessing(false);notify('Cannot update survey') },); + + + }); + } catch (err) { + console.log(err); + } + } + + async function validate(){ + var isvalid=true; + const QD=QuestionsData; + console.log(SurveyQuestions.length); + for(var i=0;i0){ + for(var j=0;j i==ansss.AnswerId)>=0)){ + showImageTag=true; + } + } + } + } + + console.log('showImageTag',showImageTag,QD[img_key]); + + if(qtn.QuestionType=='Multi choice list' && selansid.length<=0){ + isvalid=false; + notify('Please select options for the required field','SHORT'); + break; + } + else if( checkForAnsKey && (Object.keys(QD).indexOf(ans_key)<0 || (Object.keys(QD).indexOf(ans_key)>=0 && QD[ans_key]===''))){ + console.log('test1'); + isvalid=false; + let msg=( qtn.QuestionType=='Date'?'Please pick a date':(qtn.QuestionType=='Rating'?'Please select rating':'Please fill all details')); + notify(msg,'SHORT'); + break; + } + else if( qtn.QuestionType=='Audio' && (Object.keys(QD).indexOf(voiceClip_key)<0 || (Object.keys(QD).indexOf(voiceClip_key)>=0 && (QD[voiceClip_key]==null || QD[voiceClip_key].filename==null || QD[voiceClip_key].filename=='')))){ + isvalid=false; + notify('Please record audio clip for the required field','SHORT'); + break; + } + else if(Object.keys(QD).indexOf(id_key)<0 || (Object.keys(QD).indexOf(id_key)>=0 && (QD[id_key]==='' || (QD[id_key]===0 && qtn.isDisabled===true) ))){ + + isvalid=false; + notify('Please fill all details','SHORT'); + break; + } + else if( StoreCameraAllow && showImageTag && (Object.keys(QD).indexOf(img_key)<0 || (Object.keys(QD).indexOf(img_key)>=0 && QD[img_key]===''))){ + isvalid=false; + notify('Please add images','SHORT'); + break; + }else{ + console.log('no condition found'); + } + + } + + return isvalid; + } + + function render_Picker(label_key,value_key,onChange=()=>{},selected_data={}){ + var data=[]; + let qtn=selected_data.qtn || {}; + let isQtnDisabled=qtn.isDisabled!=null && qtn.isDisabled!=''?qtn.isDisabled:false; + let allAnswers=qtn.Answers || []; + + allAnswers.map((item,index)=>{ + let obj={ key: index, label: item[label_key],value:item[value_key] }; + if(selected_data.value==item[label_key]) + obj['component']= {item[label_key]}; + data.push(obj); + }); + + return ( + {onChange(option,qtn) }} + overlayStyle={customStyle.addVisPickerOverlay} + cancelContainerStyle={customStyle.addVisPicker_OptionContainerStyle} + optionStyle={customStyle.addvis_opStyle} + optionTextStyle={customStyle.addvis_opTextStyle} + optionContainerStyle={customStyle.addVisPicker_OptionContainerStyle} + selectedKey={'1'} + disabled={isQtnDisabled} + > + {(selected_data.value!=null && selected_data.value!=''?selected_data.value: '-select-')} + + ) + } + + function renderDatePicker(qtn){ + let qtnn=qtn; + let DateRange=qtn.DateRange; + let maxDate=moment().add(10,'years').format('MM/DD/YYYY'); + let minDate=moment().subtract(10,'years').format('MM/DD/YYYY'); + if(DateRange=='RFD'){ + maxDate=moment().format('MM/DD/YYYY'); + } + else if(DateRange=='RPD'){ + minDate=moment().format('MM/DD/YYYY'); + } + + return ( + {setTextValue(selectedDate,qtnn)}} + maximumDate={new Date(maxDate)} + minimumDate={new Date(minDate)} + /> + ); + } + + function renderItem({ item, drag, isActive }){ + return ( + + + {item.Answer} + + + ); + }; + + function renderRatingView(){ + let qtn=RatingQtn; + let Answers=qtn.Answers; + let id_key=qtn.QuestionId+'_AnswerId'; + let ans_key=qtn.QuestionId+'_Answer'; + let rating_key=qtn.QuestionId+'_Rating'; + // let ratings=QuestionsData[rating_key]!=null?QuestionsData[rating_key].split(','):[]; + + let newarr=RatingOrder; + if(RatingOrder.length<=0){ + newarr=Answers; + } + + return ( + + + Drag Items In Order + Press and hold to drag + {setRatingValue(data)}} + keyExtractor={(item) => item.AnswerId} + renderItem={renderItem} + /> + + {onRatingCancel()}}> + Cancel + + {onRatingSave()}}> + Save + + + + + ) + } + + function renderRecorderView(){ + + let qtn=RatingQtn; + let isRecorderPlaying=VRS.RecorderPlayStatus!=null && VRS.RecorderPlayStatus==true; + let isPlayerPlaying=VRS.PlayerPlayStatus!=null && VRS.PlayerPlayStatus==true; + const scale=animatedRipple.interpolate({ + inputRange:[0,1], + outputRange:[1,1.3], + }); + + const borderColor=animatedRipple.interpolate({ + inputRange:[0,1], + outputRange:['#f5acb4c2','#fce6e9e3'], + }); + + const scale2=animatedRipple2.interpolate({ + inputRange:[0,1], + outputRange:[1,1.5], + }); + + const borderColor2=animatedRipple2.interpolate({ + inputRange:[0,1], + outputRange:['#f5acb4c2','#fce6e9e3'], + }); + + let totalDuration=RecorderTimer.recordSecs!=null?RecorderTimer.recordSecs:playerTimer.totalDuration; + let wp=totalDuration!=null?Math.floor((playerTimer.playerSecs/totalDuration)* 100):0; + let width1=wp<=100?(wp>0?wp+'%':'0%'):'100%'; + if(isNaN(wp)) width1='0%'; + + return ( + + {rerenderView==rerenderView && + + Record Voice Clip + You can record max for 60 secs + {VoiceRecorderStatus} + + + + + + {startRecorder(storeData,qtn,VRS); }}> + + + {isRecorderPlaying && + {stopRecorder(VRS); }}> + + + } + + + + {RecorderTimer.recordTime} + { + (!isRecorderPlaying && RecFilePath.filename!=null && RecFilePath.filename!='') && + + + + + + + {`${(playerTimer.playTime || '00:00:00')} / ${playerTimer.playDuration || RecorderTimer.recordTime}`} + + + + {let url=(Platform.OS=='ios'?'file://':'')+`${ImageFolderPath+currentMenu.ScreenName}/`+'Recordings/'+RecFilePath.filename; (wp<100 && wp>0)? resumePlayer(url):startPlayer(url,VRS); }}> + + + {isPlayerPlaying && { wp<100?pausePlayer():stopPlayer(VRS); }}> + + } + + + } + + + + {onRecordCancel()}}> + Cancel + + {onRecordSave()}}> + Save + + + } + + ) + } + + function _renderSurveyQtns(cat){ + const SurveyQuestions=cat.Questions; + return ( + + { + SurveyQuestions.length>0 && + SurveyQuestions.map((item,index)=>{ + + let qtn=item; + let selansid='',selanswer='',selimg='',showImageTag=false; + let id_key=qtn.QuestionId+'_AnswerId'; + let ans_key=qtn.QuestionId+'_Answer'; + let multi_key=qtn.QuestionId+'_MultiOption'; + let date_key=qtn.QuestionId+'_Date'; + let img_key=qtn.QuestionId+'_ImagePath1'; + let imgname_key=qtn.QuestionId+'_ImageName1'; + let img_key2=qtn.QuestionId+'_ImagePath2'; + let imgname_key2=qtn.QuestionId+'_ImageName2'; + let rating_key=qtn.QuestionId+'_Rating'; + let voiceClip_key=qtn.QuestionId+'_VoiceClip'; + let list_mcdata=[]; + + if(qtn.QuestionType=='Single choice list') + { + selansid=QuestionsData[id_key]!=null ?QuestionsData[id_key] :''; + selanswer=QuestionsData[ans_key]!=null ?QuestionsData[ans_key] :''; + } + else if(qtn.QuestionType=='Multi choice list') + { + + if(qtn.Answers!=null){ + console.log('qtn.Answers:',qtn.Answers.length); + for(var i=0;i0){ + let arr=[]; + for(var i=0;i0){ + for(var i=0;i=0)){ + showImageTag=true; + } + } + } + } + + if(showImageTag){ + selimg=QuestionsData[img_key]!=null && QuestionsData[img_key]!=''?'file://'+QuestionsData[img_key]:''; + } + + return( + + {qtn.Question} + {qtn.QuestionType=='Single choice list' && qtn.Answers && + render_Picker('Answer','AnswerId',onselectionChange,{value:selanswer,qtn:qtn}) + } + {qtn.QuestionType=='Multi choice list' && qtn.Answers && + {console.log('onSelectedItemsChange');setMultiSelectValue(selectedItems,qtn) }} + selectedItems={selansid} + selectText="Pick Items" + searchInputPlaceholderText="Search Items..." + // onChangeInput={ (text)=> console.log(text)} + tagRemoveIconColor={PageTheme.$primary_color} + tagBorderColor={PageTheme.$primary_color} + tagTextColor={PageTheme.$primary_color} + selectedItemTextColor={PageTheme.$primary_color} + selectedItemIconColor={PageTheme.$primary_color} + itemTextColor={PageTheme.$text_color} + displayKey="Answer" + searchInputStyle={{ color: '#CCC' }} + submitButtonColor={PageTheme.$primary_color} + submitButtonText="Submit" + /> + } + { (qtn.QuestionType=='Number' || qtn.QuestionType=='Decimal' || qtn.QuestionType=='Text') && + {setTextValue(val,qtn)}} + /> + } + { + (qtn.QuestionType=='Date') && + + {selansid!=''?selansid:'MM/YYYY'} + {setDateValue(selanswer);showQtnDatePicker(qtn,true)}}> + + + + } + { ((qtn.showDatePicker==true || qtn.showDatePicker=='true') && (qtn.QuestionType=='Date') ) && + renderDatePicker(qtn) + } + { + (qtn.QuestionType=='Rating') && + + {selanswer} + {setRatingQtn(qtn);setShowRating(true);}}> + + + + } + + { + (qtn.QuestionType=='Audio') && + + {selanswer} + {show_recorder(qtn);}}> + + + + } + + { + showImageTag && + + + {openCamera(qtn,'1')}}> + + + + } + + + ) + }) + } + + + ); + } + + + function _renderSurveyView(){ + return ( + + { + let cat=item,s_index=index; + + return ( + + + {cat.Category} + + { _renderSurveyQtns(cat)} + + ) + }} + > + + + + ); + } + + + + return ( + + {processing && } + + {ConfirmSaveAlert(props,showAlert,onSaveCancel,saveData)} + {setShowCamera(false);getImage(imgData)}} showCamera={showCamera} onHideCamera={()=>{setShowCamera(false);}}/> + + + + { + _renderSurveyView() + } + + {onSubmitData()}}/> + + + + { showRating==true && + renderRatingView() + } + { showRecorder==true && + renderRecorderView() + } + + ); + } + + +export default connect(mapStateToProps, mapDispatchToProps)(Feedback); \ No newline at end of file diff --git a/PerformicsSrc/src/screens/ForgotpasswordScreen/Createpassword.js b/PerformicsSrc/src/screens/ForgotpasswordScreen/Createpassword.js new file mode 100644 index 0000000..7048c62 --- /dev/null +++ b/PerformicsSrc/src/screens/ForgotpasswordScreen/Createpassword.js @@ -0,0 +1,332 @@ +import React, { useState, useEffect } from 'react'; +import { useRoute } from '@react-navigation/native'; +import { Platform, View, TextInput, Text, StyleSheet, TouchableOpacity, ScrollView, Image } from 'react-native'; +import { connect } from 'react-redux'; +import LinearGradient from 'react-native-linear-gradient'; +import { mapStateToProps, mapDispatchToProps } from '../../reducers/contextProvider'; +import { customeButtons, customStyles, GetPageTheme } from "../../styles/Global"; +import Container from '../../components/container'; +import { MaterialCommunityIcons, AntDesign } from '../../components/icons'; +import CustomHeader from '../../components/customHeader'; +import { notify } from '../../components/notify'; +import { get_item } from '../../components/localStorage'; +import { METHODS, getMethodName } from '../../constants/methodNames'; +import { changepassword, createnewpassword } from '../../controller/functions'; +import CustomLoader from '../../components/CustomLoader'; + +function CreatePassword(props) { + const route = useRoute(); + const PageTheme = GetPageTheme(props.DarkTheme, route.name); + const customeButton = customeButtons(props.DarkMode, route.name); + const customStyle = customStyles(props.DarkMode, route.name); + const username = route?.params?.username; + + const [state, setState] = useState({ + newpassword: '', + confirmpassword: '', + lengthCheck: false, + uppercaseCheck: false, + lowercaseCheck: false, + numberCheck: false, + specialCharCheck: false, + invalidCharCheck: false + }); + + const [showNewPassword, setShowNewPassword] = useState(false); + const [showConfirmPassword, setShowConfirmPassword] = useState(false); + + const validatePassword = (password) => { + const lengthCheck = /^.{8,20}$/; + const uppercaseCheck = /[A-Z]/; + const lowercaseCheck = /[a-z]/; + const numberCheck = /[0-9]/; + const specialCharCheck = /[!@#$%\-_]/; + const invalidCharCheck = /[^a-zA-Z0-9!@#$%\-_]/; + + const isLengthValid = lengthCheck.test(password); + const isUppercaseValid = uppercaseCheck.test(password); + const isLowercaseValid = lowercaseCheck.test(password); + const isNumberValid = numberCheck.test(password); + const isSpecialCharValid = specialCharCheck.test(password); + const isInvalidCharPresent = invalidCharCheck.test(password); + + setState((prevState) => ({ + ...prevState, + lengthCheck: isLengthValid, + uppercaseCheck: isUppercaseValid, + lowercaseCheck: isLowercaseValid, + numberCheck: isNumberValid, + specialCharCheck: isSpecialCharValid, + invalidCharCheck: isInvalidCharPresent, + })); + + return isLengthValid && isUppercaseValid && isLowercaseValid && isNumberValid && isSpecialCharValid && !isInvalidCharPresent; + }; + + const validate = () => { + const { newpassword, confirmpassword } = state; + + if (!newpassword.trim()) return false; + if (!validatePassword(newpassword)) return false; + if (!confirmpassword.trim()) return false; + if (newpassword !== confirmpassword) return false; + + return true; + }; + + const [submitButtonColor, setSubmitButtonColor] = useState(['#B2BEB5', '#A9A9A9', '#808080']); + const [processing, setProcessing] = useState(false); + + const handleSubmit = () => { + const { newpassword, confirmpassword } = state; + + if (!newpassword.trim()) { + notify('Please enter new password', 'SHORT'); + return; + } + + if (!validatePassword(newpassword)) { + notify('New password must be 8-20 characters long and include uppercase, lowercase, numbers, and special characters (!, @, #, $, %, -, _) and no other special characters', 'SHORT'); + return; + } + + if (!confirmpassword.trim()) { + notify('Please enter confirm password', 'SHORT'); + return; + } + + if (newpassword !== confirmpassword) { + notify('New password and confirm password do not match', 'SHORT'); + return; + } + + setSubmitButtonColor([PageTheme.$secondary_color_light, PageTheme.$gradient2, PageTheme.$primary_color]); + + CreatePassword(); + }; + + useEffect(() => { + validatePassword(state.newpassword); + }, [state.newpassword]); + + useEffect(() => { + if (validate()) { + setSubmitButtonColor([PageTheme.$secondary_color_light, PageTheme.$gradient2, PageTheme.$primary_color]); + } else { + setSubmitButtonColor(['#B2BEB5', '#A9A9A9', '#808080']); + } + }, [state.confirmpassword, state.newpassword]); + + const getValidationStatus = (check, input) => { + if (!input.trim()) { + return { color: '#000', icon: 'exclamationcircle', iconColor: '#000' }; + } + return check + ? { color: 'green', icon: 'checkcircle', iconColor: 'green' } + : { color: 'red', icon: 'closecircle', iconColor: '#ff0000' }; + }; + + const ValidationMessage = ({ check, message }) => { + const status = getValidationStatus(check, state.newpassword); + return ( + + + {message} + + ); + }; + + const CreatePassword = async () => { + const { newpassword, confirmpassword } = state; + setProcessing(true); + + let projectInfo = await get_item('projectInfo'); + let projectDetails = projectInfo != null ? JSON.parse(projectInfo) : {}; + let baseurl = projectDetails.baseURL || ''; + + const method_name = getMethodName(METHODS.CREATE_NEW_PASSWORD); + const url = baseurl + method_name; + const data = { un: username, newp: newpassword, confirmp: confirmpassword }; + console.log(url, data) + await createnewpassword(url, data) + .then(async (res) => { + setProcessing(false); + console.log(res, "response...craete pas") + if (res?.Status == true) { + notify(res?.Text,'SHORT') + props.navigation.reset({ index: 0, routes: [{ name: 'Login' }] }); + setState({newpassword:'',confirmpassword: ''}); + } else if (res?.Status == false) { + notify(res?.Text,'SHORT') + } + else if (res.networkErr && res.error) { + notify('Please connect to internet-' + res.error, 'SHORT'); + } + else if (!res.false && res.error) { + notify(res.error, 'SHORT'); + } + }) + .catch((err) => { + setProcessing(false); + console.log('onPage change password error1', err); + }); + } + + const handlePasswordChange = (val) => { + const validCharacters = val.replace(/[^a-zA-Z0-9!@#$%\-_]/g, ''); // Remove invalid characters + setState({ ...state, newpassword: validCharacters }); + }; + + const handleConfirmPasswordChange = (val) => { + const validCharacters = val.replace(/[^a-zA-Z0-9!@#$%\-_]/g, ''); // Remove invalid characters + setState({ ...state, confirmpassword: validCharacters }); + }; + + const handleShowPassword = (field) => { + if (field === 'newpassword') { + setShowNewPassword(!showNewPassword); + setShowConfirmPassword(false); // Close the confirm password eye icon + } else if (field === 'confirmpassword') { + setShowConfirmPassword(!showConfirmPassword); + setShowNewPassword(false); // Close the new password eye icon + } + }; + + return ( + + {processing && } + + + + + + Create new password + + + handlePasswordChange(val)} + /> + + handleShowPassword('newpassword')} + > + + + + + handleConfirmPasswordChange(val)} + /> + + handleShowPassword('confirmpassword')} + > + + + + + + + + + + + + {state.invalidCharCheck && } + + + + + + Submit + + + + + props.navigation.goBack()}> + Back + + + + + + ); +} + +export default connect(mapStateToProps, mapDispatchToProps)(CreatePassword); + +const styles = StyleSheet.create({ + pageContent: { + backgroundColor: '#fff', + paddingTop: 0, + }, + validationMessage: { + paddingHorizontal: 40, + paddingTop: 10, + flexDirection: 'row', + }, + footerView: { + marginTop: 20, + alignItems: 'center', + }, + eyeIcon: { + position: 'absolute', + right: 0, + width: 50, + height: 50, + alignItems: 'center', + justifyContent: 'center' + }, + performicsLogo : { + width:"60%", + resizeMode:'contain', + marginTop:10, marginBottom:-15 + }, + cyourpass: { + color:'#000000',fontSize:22,paddingHorizontal: 35,fontWeight: '400',marginBottom:20 + }, + backtext:{ + color:'#2196F3',fontSize:17, marginTop:20, textAlign:'center' + }, +}); diff --git a/PerformicsSrc/src/screens/ForgotpasswordScreen/Forgotpassword.js b/PerformicsSrc/src/screens/ForgotpasswordScreen/Forgotpassword.js new file mode 100644 index 0000000..ed9028e --- /dev/null +++ b/PerformicsSrc/src/screens/ForgotpasswordScreen/Forgotpassword.js @@ -0,0 +1,134 @@ +import React, { useState, useEffect } from 'react'; +import { useRoute } from '@react-navigation/native'; +import { Platform, View, TextInput, Text, StyleSheet, TouchableOpacity, ScrollView, Image } from 'react-native'; +import { connect } from 'react-redux'; +import { mapStateToProps, mapDispatchToProps } from '../../reducers/contextProvider'; +import { customeButtons, customStyles, GetPageTheme } from "../../styles/Global"; +import Container from '../../components/container'; +import { MaterialCommunityIcons } from '../../components/icons'; +import GradientButton from '../../components/gradientButton'; +import { notify } from '../../components/notify'; +import { METHODS, getMethodName } from '../../constants/methodNames'; +import { getforgotpasswordotp } from '../../controller/functions'; +import CustomLoader from '../../components/CustomLoader'; +import { get_item } from '../../components/localStorage'; + + +function ForgotPassword(props) { + const route = useRoute(); + const PageTheme = GetPageTheme(props.DarkTheme, route.name); + const customeButton = customeButtons(props.DarkMode, route.name); + const customStyle = customStyles(props.DarkMode, route.name); + + + const [state, setState] = useState({username:''}); + const [processing, setProcessing] = useState(false); + + const handlegetOTP = () => { + const { username } = state; + if (!username.trim()) { + notify('Please enter username', 'SHORT'); + return; + } + Send_OTP(); + } + + const Send_OTP = async () => { + const { username } = state; + setProcessing(true); + + let projectInfo = await get_item('projectInfo'); + let projectDetails = projectInfo != null ? JSON.parse(projectInfo) : {}; + let baseurl = projectDetails.baseURL || ''; + + const method_name = getMethodName(METHODS.OTP_SEND); + const url = baseurl + method_name; + const data = { un: username }; + console.log(url, data) + await getforgotpasswordotp(url, data) + .then(async (res) => { + setProcessing(false); + console.log(res, "response...") + if (res?.Status == false) { + notify(res?.Text,'SHORT') // invalid username + } else if (res?.Status == true) { + notify("OTP send successfully.",'SHORT') + props?.navigation?.navigate('VerifyOTP', {username : username}); + setState({username:''}) + } else if (res.networkErr && res.error) { + notify('Please connect to internet-' + res.error, 'SHORT'); + } else if (!res.false && res.error) { + notify(res.error, 'SHORT'); + } + + }) + .catch((err) => { + setProcessing(false); + console.log('onPage otp send error1', err); + }); + + } + + return ( + + {processing && } + + + + Forgot your password + Please enter your username. We'll send an OTP to the phone number associated with your account. + + + + setState({...state,username:val})} + onSubmitEditing={() => handlegetOTP()} + /> + + + + + {handlegetOTP()}}/> + + + props.navigation.reset({ index: 0, routes: [{ name: 'Login' }] })}> + Back to Login + + + ); +} + +export default connect(mapStateToProps, mapDispatchToProps)(ForgotPassword); + +const styles = StyleSheet.create({ + performicsLogo : { + width:"60%", + height:"15%", + resizeMode:'contain', + marginTop:40 + }, + backtologin:{ + color:'#2196F3',fontSize:17, marginTop:20 + }, + fyourpass: { + color:'#000000', fontSize: 22, + fontWeight: '400', + paddingHorizontal: 30, + + }, + infoTextContainer: { + alignItems: 'flex-start', + alignSelf: 'flex-start', + alignContent: 'flex-start' +}, +infoText: { + paddingHorizontal: 30, + marginTop: 20, + fontSize: 16 +} +}); diff --git a/PerformicsSrc/src/screens/ForgotpasswordScreen/VerifyOTP.js b/PerformicsSrc/src/screens/ForgotpasswordScreen/VerifyOTP.js new file mode 100644 index 0000000..f0949f5 --- /dev/null +++ b/PerformicsSrc/src/screens/ForgotpasswordScreen/VerifyOTP.js @@ -0,0 +1,264 @@ +import React, { useState, useEffect, useRef, useCallback } from 'react'; +import { useRoute } from '@react-navigation/native'; +import { Platform, View, Text, StyleSheet, TouchableOpacity, Image } from 'react-native'; +import { connect } from 'react-redux'; +import { mapStateToProps, mapDispatchToProps } from '../../reducers/contextProvider'; +import { customeButtons, customStyles, GetPageTheme } from "../../styles/Global"; +import Container from '../../components/container'; +import GradientButton from '../../components/gradientButton'; +import { notify } from '../../components/notify'; +import OtpInputs from 'react-native-otp-inputs'; +import LinearGradient from 'react-native-linear-gradient'; +import { METHODS, getMethodName } from '../../constants/methodNames'; +import { get_item } from '../../components/localStorage'; +import CustomLoader from '../../components/CustomLoader'; +import { getforgotpasswordotp, verifyotp } from '../../controller/functions'; + +function VerifyOTP(props) { + const route = useRoute(); + const PageTheme = GetPageTheme(props.DarkTheme, route.name); + const customeButton = customeButtons(props.DarkMode, route.name); + const customStyle = customStyles(props.DarkMode, route.name); + + const [otp, setOtp] = useState(''); + const [timer, setTimer] = useState(90); + const [isTimerRunning, setIsTimerRunning] = useState(true); + const [resendCount, setResendCount] = useState(0); + const [processing, setProcessing] = useState(false); + const [resendProcessing, setResendProcessing] = useState(false); + + const [isPINUpdate, setIsPINUpdate] = useState(false); + + const otpRef = useRef(); + const MAX_RESEND_COUNT = 1; + + const username = route?.params?.username; + + useEffect(() => { + let interval = null; + if (isTimerRunning) { + interval = setInterval(() => { + setTimer((prevTimer) => (prevTimer > 0 ? prevTimer - 1 : 0)); + }, 1000); + } else if (!isTimerRunning && timer !== 0) { + clearInterval(interval); + } + return () => clearInterval(interval); + }, [isTimerRunning, timer]); + + const handleVerify = () => { + if (otp.length !== 6) { + notify('Please enter 6-digit OTP', 'SHORT'); + return; + } + Verify_OTP(); + }; + + const handleResend = () => { + if (resendCount < MAX_RESEND_COUNT) { + setTimer(90); + setIsTimerRunning(true); + setResendCount(resendCount + 1); + resetOTP(); + Resend_OTP(); + } + }; + + const Verify_OTP = async () => { + setProcessing(true); + let projectInfo = await get_item('projectInfo'); + let projectDetails = projectInfo != null ? JSON.parse(projectInfo) : {}; + let baseurl = projectDetails.baseURL || ''; + + const method_name = getMethodName(METHODS.OTP_VERIFY); + const url = baseurl + method_name; + const data = { un: username , otp : otp}; + console.log(url, data) + await verifyotp(url, data) + .then(async (res) => { + setProcessing(false); + if (res?.Status == true) { + notify('OTP verify successfully.','SHORT') ; + resetOTP(); + props?.navigation?.navigate('CreatePassword', {username : username}); + } else if (res?.Status == false) { + notify(res?.Text,'SHORT') + } else if (res.networkErr && res.error) { + notify('Please connect to internet-' + res.error, 'SHORT'); + } else if (!res.false && res.error) { + notify(res.error, 'SHORT'); + } + + }) + .catch((err) => { + setProcessing(false); + console.log('onPage otp send error1', err); + }); + + } + + + const Resend_OTP = async () => { + setResendProcessing(true); + + let projectInfo = await get_item('projectInfo'); + let projectDetails = projectInfo != null ? JSON.parse(projectInfo) : {}; + let baseurl = projectDetails.baseURL || ''; + + const method_name = getMethodName(METHODS.OTP_SEND); + const url = baseurl + method_name; + const data = { un: username }; + console.log(url, data) + await getforgotpasswordotp(url, data) + .then(async (res) => { + setResendProcessing(false); + if (res?.Status == false) { + notify(res?.Text,'SHORT') // invalid username + } else if (res?.Status == true) { + notify("OTP send successfully.",'SHORT') + } else if (res.networkErr && res.error) { + notify('Please connect to internet-' + res.error, 'SHORT'); + } else if (!res.false && res.error) { + notify(res.error, 'SHORT'); + } + + }) + .catch((err) => { + setResendProcessing(false); + console.log('onPage otp send error1', err); + }); + + } + + const resetOTP = useCallback(() => { + otpRef.current.reset(); + }, []) + + async function autosubmit(){ + if(otp.trim().length == 6){ + Verify_OTP(); + } + } + + useEffect(() => { + autosubmit(); + }, [isPINUpdate]); + + return ( + + {processing && } + {resendProcessing && } + + + + OTP Verification + One Time password (OTP) has been sent to your registered mobile number. + + + + { setOtp(code); setIsPINUpdate(!isPINUpdate); }} + numberOfInputs={6} + secureTextEntry={true} + defaultValue='' + keyboardType={"numeric"} + // autofillFromClipboard={false} + inputStyles={customStyle.verify_otp_inputStyle} + style={customStyle.otp_field} + /> + + + 0 || resendCount >= MAX_RESEND_COUNT} > + Didn't receive the OTP? + 0 || resendCount >= MAX_RESEND_COUNT ? 'gray' : '#2196F3' }]}>Resend + + + {resendCount >= MAX_RESEND_COUNT && timer === 0 && ( + Please try after some time. + )} + + {timer > 0 ? `Resend OTP in ${timer}s` : resendCount < MAX_RESEND_COUNT ? 'You can resend the OTP now' : ''} + + {resendCount >= MAX_RESEND_COUNT && timer === 0 ? + + + + Verify + + + + : + + + + } + + props.navigation.goBack()}> + Back + + + ); +} + +export default connect(mapStateToProps, mapDispatchToProps)(VerifyOTP); + +const styles = StyleSheet.create({ + performicsLogo: { + width: "60%", + height: "15%", + resizeMode: 'contain', + marginTop: 40 + }, + backtologin: { + fontSize: 17, + textDecorationLine: 'underline' + }, + resendtop: { + fontSize: 15, + marginRight: 5 + }, + fyourpass: { + color:'#000000', fontSize: 22, + fontWeight: '400', + paddingHorizontal: 30, + }, + resendContainer: { + width: '90%', + height: '7%', + justifyContent: 'center', + alignItems: 'center', + flexDirection: 'row', + borderRadius: 5, + }, + infoTextContainer: { + alignItems: 'flex-start', + alignSelf: 'flex-start', + alignContent: 'flex-start' + }, + infoText: { + paddingHorizontal: 30, + marginTop: 20, + fontSize: 16 + }, + tryLaterText: { + textAlign: 'center', + marginTop: 10, + color: 'red', + fontSize: 16 + }, + timerText: { + textAlign: 'center' + }, + backtext: { + color: '#2196F3', + fontSize: 17, + marginTop: 10, + textAlign: 'center' + }, +}); diff --git a/PerformicsSrc/src/screens/GeoTag.js b/PerformicsSrc/src/screens/GeoTag.js new file mode 100644 index 0000000..bb3fb86 --- /dev/null +++ b/PerformicsSrc/src/screens/GeoTag.js @@ -0,0 +1,554 @@ +import React, { useState, useEffect } from 'react'; +import Container from '../components/container'; +import { useRoute } from '@react-navigation/native'; +import { customStyles, GetPageTheme } from "../styles/Global"; +import { Image, View, Text, ScrollView, TouchableOpacity, Platform } from 'react-native'; +import { connect } from 'react-redux'; +import { mapStateToProps, mapDispatchToProps } from '../reducers/contextProvider'; +import { notify } from '../components/notify'; +import moment from 'moment'; +import { restore_ImageWithMetaData, UploadData2, UploadFormData } from '../controller/functions'; +import { CoverageImagePath, db, URL_IMAGE } from '../constants/constants'; +import CustomHeader from '../components/customHeader'; +import { Entypo } from '../components/icons'; +import CustomLoader from '../components/CustomLoader'; +import LinearGradient from 'react-native-linear-gradient'; +import MapView, { Marker, AnimatedRegion, PROVIDER_GOOGLE } from 'react-native-maps'; +import { _checkLocationPermission } from '../components/geolocation'; +import Geolocation from 'react-native-geolocation-service'; +import { useRef } from 'react'; +import GradientButton from '../components/gradientButton'; +import * as RNFS from 'react-native-fs'; +import { AppTables } from '../constants/tableConstants'; +import { getMethodName, METHODS } from '../constants/methodNames'; +import CustomCamera from '../components/Camera'; + +function GeoTag(props) { + const route = useRoute(); + const ST = props.StaticText || {}; + // get all theme styles acc to current theme set + const PageTheme = GetPageTheme(props.DarkMode, route.name); + const customStyle = customStyles(props.DarkMode, route.name); + const [processing, setProcessing] = useState(false); + const [storeData, setStoreData] = useState({}); + const [StoreImage, setStoreImage] = useState(''); + const [StoreImgPath, setStoreImgPath] = useState(''); + const [currentLocation, setCurrentLocation] = useState({}); + const [markerCoordinate, setMarkerCoordinate] = useState(); + const [markerPos, setMarkerPos] = useState({}); + const [markerTitle, setMarkerTitle] = useState(''); + const [markerPlaceText, setMarkerPlaceText] = useState(''); + const [loaderTitle, setLoaderTitle] = useState(); + const [isAdhocScreen, setIsAdhocScreen] = useState(false); + const [isBeatPlan, setIsBeatPlan] = useState(false); + const [isDistributor, setIsDistributor] = useState(false); + const [showCamera, setShowCamera] = useState(false); + const [isNonMerchan, setIsNonMerchan] = useState(false); + const [isNonProg, setIsNonProg] = useState(false); + const [isStoreSearch, SetIsStoreSearch] = useState(false); + + const MyMap = useRef(null); + const MyMarker = useRef(null); + const isCancelled = useRef(false); + const d1 = new Date(); + const d2 = moment(d1).format('MM/DD/YYYY'); + + useEffect(() => { + setLoaderTitle(ST.Loading + '...') + _getCurrentLocation(); + let params = props.route.params ? props.route.params : {}; + let storeData1 = params.storeData || {}; + let isAdhoc = params.isAdhoc || false; + let isBeat = params.isBeat != null ? params.isBeat : false; + let isDistributor1 = params.isDistributor != null ? params.isDistributor : false; + let isNonMerchan = params.isNonMerchans != null ? params.isNonMerchans : false; + let isNonProgam = params.isNonProgs != null ? params.isNonProgs : false; + let isStoreSearch = params.isStoreSearch != null ? params.isStoreSearch : false; + setIsAdhocScreen(isAdhoc); + setIsBeatPlan(isBeat); + setIsNonMerchan(isNonMerchan) + setIsNonProg(isNonProgam) + SetIsStoreSearch(isStoreSearch) + setIsDistributor(isDistributor1); + setStoreData(storeData1); + + const unsubscribe = props.navigation.addListener('beforeRemove', onBeforeRemove); + + return function cleanup() { + isCancelled.current = true; + return unsubscribe; + }; + }, []); + + useEffect(() => { + const unsubscribe = props.navigation.addListener('beforeRemove', onBeforeRemove); + return unsubscribe; + }, [showCamera]); + + function onBeforeRemove(e) { + if (showCamera == true) { + e.preventDefault(); + setShowCamera(false); + } + else { + return; + } + } + + async function _getCurrentLocation() { + const hasPermission = await _checkLocationPermission(); + if (hasPermission == true) { + Geolocation.getCurrentPosition( + async (position) => { + let latitude = position.coords.latitude; + let longitude = position.coords.longitude; + latitude = parseFloat(parseFloat(latitude).toFixed(8).replace("-e", "")); + longitude = parseFloat(parseFloat(longitude).toFixed(8).replace("-e", "")); + + let loc = { lat: latitude, lng: longitude }; + setMarkerPos(loc); + setMarkerCoordinate(new AnimatedRegion({ latitude: loc.lat, longitude: loc.lng })); + setMarkerTitle('Current Location'); + setMarkerPlaceText(`${loc.lat}, ${loc.lng}`) + setCurrentLocation(loc); + }, + (error) => { + notify(ST.Cannotgetuserposition); + }, + { enableHighAccuracy: true, distanceFilter: 0, interval: 1000, fastestInterval: 2000 } + ); + } + else { + notify(ST.Pleaseallowlocationpermission); + } + } + + async function _getLocationOnUpload() { + const hasPermission = await _checkLocationPermission(); + if (hasPermission == true) { + Geolocation.getCurrentPosition( + async (position) => { + let latitude = position.coords.latitude; + let longitude = position.coords.longitude; + latitude = parseFloat(parseFloat(latitude).toFixed(8).replace("-e", "")); + longitude = parseFloat(parseFloat(longitude).toFixed(8).replace("-e", "")); + + let loc = { lat: latitude, lng: longitude }; + setMarkerPos(loc); + setMarkerCoordinate(new AnimatedRegion({ latitude: loc.lat, longitude: loc.lng })); + setMarkerTitle('Current Location'); + setMarkerPlaceText(`${loc.lat}, ${loc.lng}`) + setCurrentLocation(loc); + await InsertGeoTag(loc); + }, + (error) => { + notify(ST.Cannotgetuserposition); + }, + { enableHighAccuracy: true, distanceFilter: 0, interval: 1000, fastestInterval: 2000 } + ); + } + else { + notify(ST.Pleaseallowlocationpermission); + } + } + + async function submitGeoTag() { + if (validate()) { + setLoaderTitle(ST.UploadingData + '...'); + setProcessing(true); + _getLocationOnUpload(); + + } + } + + + async function InsertGeoTag(loc = {}) { + try { + + await db.transaction(async function (txn) { + let { StoreId } = storeData; + let { lat, lng } = loc; + console.log('geotag lat:', lat, 'lng:', lng); + let status = 'N'; + let tb1 = isDistributor ? AppTables.DB_GEOTAG : AppTables.GEOTAG; + let values = ` ('${StoreId}','${lat}','${lng}','${status}','${status}','${StoreImgPath}','${d2}') `; + let q = `INSERT INTO ${tb1}(STORE_ID,LATITUDE,LONGITUDE,GEO_TAG,STATUS,FRONT_IMAGE,ADDED_DATE) VALUES ${values} `; + + await txn.executeSql(`Delete from ${tb1} where STORE_ID='${StoreId}' and ADDED_DATE='${d2}'`, [], async function (txn2, txnres2) { + console.log('old geotag removed'); + await txn.executeSql(q, [], async function (txn2, txnres3) { + console.log('geotag added'); + uploadGeoTagData(loc); + }, function (Etxn, txnerr) { console.log(txnerr); }); + + }, function (Etxn, txnerr) { console.log(txnerr); }); + + }); + + } + catch (e) { + console.log(e); setProcessing(false); + } + } + + async function uploadGeoTagData(loc = {}) { + let { lat, lng } = loc; + let geotag_obj = {}; + + if (isDistributor) { + geotag_obj["DISTRIBUTOR_ID"] = storeData.StoreId; + } else { + geotag_obj["STORE_ID"] = storeData.StoreId; + } + geotag_obj["VISIT_DATE"] = d2, + geotag_obj["LATITUDE"] = lat, + geotag_obj["LONGITUDE"] = lng, + geotag_obj["FRONT_IMAGE"] = StoreImage; + + let allGeoTags = [geotag_obj]; + let data = { + "MID": "0", + "JsonData": JSON.stringify(allGeoTags), + "UserId": (props.UserId || ''), + }; + + if (isDistributor) { + data["Keys"] = "DB_GeoTag"; + } else { + data["Keys"] = "GeoTag"; + } + + const url = props.baseurl + getMethodName(METHODS.UPLOADJSON_METHOD); + const url1 = (props.imageUploadUrl || URL_IMAGE) + getMethodName(METHODS.UPLOADIMAGES_METHOD); + console.log(url, data); + + await UploadData2(url, data) + .then(async (res) => { + console.log(res); + + if (res.UploadJsonResult && res.UploadJsonResult.includes('Success')) { + await UpdateGeoTagStatus(loc); + // Upload Image + // await UploadFormData(url1,data1) + // .then(async(res1)=>{ + // console.log('res1:',res1); + // if(res1.includes('Success')){ + // console.log('image uploaded'); + // RNFS.unlink(StoreImgPath); + // } + // }) + // .catch((err)=>{ + // console.log(err); + // }); + } + else { + setProcessing(false); + notify(ST.Cannotuploadgeotag) + } + }) + .catch((err) => { + console.log(err); setProcessing(false); + }); + + } + + function exit(storeData1 = {}) { + notify(ST.GeoTagDataUploadedSuccessfully, 'LONG'); + setProcessing(false); + if (isDistributor) { + props.navigation.replace('DistributorCheckIn', { storeData: storeData1, 'isAdhoc': isAdhocScreen, 'isBeat': isBeatPlan, 'isDistributor': isDistributor }) + } + else { + props.navigation.replace('StoreCheckin', { storeData: storeData1, 'isAdhoc': isAdhocScreen, 'isBeat': isBeatPlan, 'isDistributor': isDistributor, 'isNonMerchans': isNonMerchan, isNonProgs: isNonProg, isStoreSearch: isStoreSearch }) + } + } + + async function UpdateGeoTagStatus(loc = {}) { + try { + await db.transaction(async function (txn) { + let { StoreId } = storeData; + let { lat, lng } = loc; + let status = 'Y'; + let tb1 = isDistributor ? AppTables.DB_GEOTAG : AppTables.GEOTAG; + let JcpType = isDistributor == true ? "Master_Distributor" : (isBeatPlan == true ? 'JourneyPlan_RouteWise' : (isAdhocScreen == true ? 'Adhoc_JourneyPlan' : (isNonMerchan == true ? 'NonMerchandising_JourneyPlan' : isNonProg == true ? 'NonProgram_JourneyPlan' : isStoreSearch == true ? 'StoreSearch_JourneyPlan' : 'Mapping_JourneyPlan'))); + let q = `Update ${tb1} set GEO_TAG='${status}',STATUS='${status}' where STORE_ID='${StoreId}' and ADDED_DATE='${d2}'`; + await txn.executeSql(q, [], async function (txn2, txnres2) { + console.log('geotag update'); + + let q2 = `Update ${JcpType} set GeoTag='${status}',Latitude='${lat}',Longitude='${lng}' where ${isDistributor ? 'DistributorId' : 'StoreId'}='${StoreId}'`; + await txn.executeSql(q2, [], async function (txn2, txnres2) { + console.log('geotag updated in store'); + // update geotag locally + let stored_new = storeData; + stored_new['GeoTag'] = 'Y'; + stored_new['Latitude'] = lat; + stored_new['Longitude'] = lng; + setStoreData(stored_new); + exit(stored_new); + }, function (Etxn, txnerr) { console.log(txnerr); notify(ST.Geotaguploadedbutcannotupdategeotagstatus, 'LONG'); setProcessing(false); }); + + }, function (Etxn, txnerr) { console.log(txnerr); notify(ST.Geotaguploadedbutcannotupdategeotagstatus, 'LONG'); setProcessing(false); }); + }); + } + catch (e) { + console.log(e); + notify(ST.Geotaguploadedbutcannotupdategeotagstatus, 'LONG'); setProcessing(false); + } + } + + function validate() { + if (StoreImage == '' || StoreImage == null) { + notify((isDistributor ? 'Please click distributor front image' : ST.Pleaseclickstorefrontimage), 'SHORT'); + return false; + } + return true; + } + + async function getImage(imgdata) { + if (typeof imgdata == 'object' && imgdata.errorCode == 'camera_unavailable') { + notify(ST.Cameraunavailable); + } + else if (typeof imgdata == 'object' && imgdata.uri != null) { + const img = imgdata; + const imgurl = img.uri, imgWidth = img.width, imgHeight = img.ExtendedHeight; + let isImgFromGallery = img.fromGallery != null ? img.fromGallery : false; + let picture_clickedd = isImgFromGallery == true ? img.datetime : new Date(); + let picture_clicked_time = moment(picture_clickedd).format('MM-DD-YYYY HH:mm:ss') + let picture_clicked_time_for_pic_name = moment(picture_clickedd).format('MMDDYYYY_HHmmss') + console.log("time", picture_clicked_time); + console.log("time1", picture_clicked_time_for_pic_name); + let calculate_tym_date_for_filename = picture_clicked_time_for_pic_name; + let calculate_tym_date_over_img = picture_clicked_time; + + const mark_text1 = calculate_tym_date_over_img; + let mark_text2 = ''; + if (isDistributor) { + mark_text2 = 'Distributor Name:' + storeData.StoreName + ' | Distributor Id:' + storeData.StoreId + ' | User Id:' + storeData.EmpId + ' | Image Type: DB Geo Tag' + ' | Date:' + calculate_tym_date_over_img; + } + else { + mark_text2 = 'Store Name:' + storeData.StoreName + ' | Store Id:' + storeData.StoreId + ' | User Id:' + storeData.EmpId + ' | Image Type: Geo Tag' + ' | Date:' + calculate_tym_date_over_img; + } + + let filename = ''; + if (isDistributor) { + filename = storeData.StoreId + '_' + storeData.EmpId + '_DBGeoTag-' + calculate_tym_date_for_filename + '.jpg'; + } + else { + filename = storeData.StoreId + '_' + storeData.EmpId + '_GeoTag-' + calculate_tym_date_for_filename + '.jpg'; + } + + setStoreImage(filename); + let imagePath = `${CoverageImagePath}${filename}`; + await RNFS.copyFile(imgurl, imagePath) + .then(async (resn) => { + // render data with clicked image + let uri = 'file://' + imagePath; + console.log('image marker', uri); + setStoreImgPath(uri); + // add metdata then resize image and restored back to the imagePath + let restore_data = { "destFilePath": imagePath, "imgurl": imgurl, imgWidth, imgHeight, mark_text1, mark_text2 } + let is_restored = await restore_ImageWithMetaData(restore_data, imgdata); + console.log("image restored:", is_restored); + }) + .catch(err => { + console.log(ST.Errorimagefilewritefailed + '!!!'); + console.log(err.message, err.code); + }); + } + } + + function getImageBottomText() { + if (isDistributor) { + return 'Distributor Name:' + storeData.StoreName + ' | Distributor Id:' + storeData.StoreId + ' | User Id:' + storeData.EmpId + ' | Image Type: DB Geo Tag'; + } + else { + return 'Store Name:' + storeData.StoreName + ' | Store Id:' + storeData.StoreId + ' | User Id:' + storeData.EmpId + ' | Image Type: Geo Tag'; + } + } + + async function openCamera() { + setShowCamera(true); + } + + + function moveMarkerToPos(e) { + let coords = e.nativeEvent.coordinate; + console.log('moveMarkerToPos', coords) + animateCamera(coords); + animateMarkerToRegion(coords); + setMarkerInfo(coords); + let loc = { lat: coords.latitude, lng: coords.longitude }; + setMarkerPos(loc); + } + + function animateMarkerToRegion(coords) { + const newCoordinate = coords; + const new_animated_coords = new AnimatedRegion({ latitude: coords.latitude, longitude: coords.longitude }); + if (Platform.OS === 'android') { + if (MyMarker) { + MyMarker.current.animateMarkerToCoordinate(newCoordinate, 1000); + } + } else { + // `useNativeDriver` defaults to false if not passed explicitly + markerCoordinate.timing({ ...newCoordinate, useNativeDriver: false, duration: 1000 }).start(); + } + setTimeout(() => { setMarkerCoordinate(new_animated_coords); }, 1000); + + } + + async function setMarkerInfo(coords) { + if (MyMap.current != null) { + MyMap.current.addressForCoordinate(coords) + .then((res) => { + console.log('res:', res); + let title = res.name; + let placeText = `${res.subLocality}, ${res.locality}, ${res.administrativeArea} ${res.postalCode}`; + setMarkerTitle(title); + setMarkerPlaceText(placeText); + + }) + } + } + + async function animateCamera(coords) { + if (MyMap.current != null) { + const camera = await MyMap.current.getCamera(); + // camera.heading = 90; + // camera.pitch = 45; + // camera.altitude = 1000; + // camera.zoom = 1000; + camera.center.latitude = coords.latitude; + camera.center.longitude = coords.longitude; + MyMap.current.animateCamera(camera, { duration: 2000 }); + } + } + + + function _renderMap() { + const lat = currentLocation.lat ? currentLocation.lat : 28.579660; + const lng = currentLocation.lng ? currentLocation.lng : 77.321110; + + if (currentLocation.lat != null) { + return ( + + + {console.log('on press')}} + // onRegionChangeComplete={(region,details)=>{console.log('on region change',region)}} + // onPress={moveMarkerToPos} + + > + {console.log('on drag end:',e.nativeEvent.coordinate)}} + coordinate={markerCoordinate} + pinColor={'#ff78b6'} + title={markerTitle} + description={markerPlaceText} + /> + + + {_render_captureImage()} + + ); + } + else { + return () + } + } + + function _render_captureImage() { + const isImageAvlbl = StoreImage != '' && StoreImage != null && StoreImgPath != '' && StoreImgPath != null; + + return ( + + + + {isImageAvlbl && } + {!isImageAvlbl && } + + { openCamera() }}> + {} + + {(isDistributor ? 'Click distributor front image' : ST.ClickStoreFrontImage)} + + + + ); + } + + return ( + + {processing && } + + { setShowCamera(false); getImage(imgData) }} showCamera={showCamera} onHideCamera={() => { setShowCamera(false); }} /> + + + + {Object.keys(storeData).length > 0 && + + + + + + + + {storeData.StoreName} + + + + + + {ST.StoreId + ':'} + {storeData.StoreId} + + + {ST.StoreCode + ':'} + {storeData.StoreCode} + + + + + {ST.Address + ':'} + {storeData.Address} + + + + + + + { + _renderMap() + } + + { submitGeoTag() }} /> + + + } + + + + + ); +} + + + +export default connect(mapStateToProps, mapDispatchToProps)(GeoTag); \ No newline at end of file diff --git a/PerformicsSrc/src/screens/GetDb.js b/PerformicsSrc/src/screens/GetDb.js new file mode 100644 index 0000000..dcb732a --- /dev/null +++ b/PerformicsSrc/src/screens/GetDb.js @@ -0,0 +1,164 @@ +import React, { useState, useEffect } from 'react'; +import Container from '../components/container'; +import { useRoute } from '@react-navigation/native'; +import { globalStyles, customStyles, GetPageTheme } from "../styles/Global"; +import { StatusBar, Image, TextInput, View, Text, ScrollView, TouchableOpacity, Platform, PermissionsAndroid, FlatList, Alert } from 'react-native'; +import { ReactReduxContext, connect, useSelector, useDispatch } from 'react-redux'; +import { mapStateToProps, mapDispatchToProps } from '../reducers/contextProvider'; +import { notify } from '../components/notify'; +import moment from 'moment'; +import { version, sloganline, appname, testurl, db, DBName, dbbackupFolder, URL_IMAGE } from '../constants/constants'; +import CustomHeader from '../components/customHeader'; +import CustomLoader from '../components/CustomLoader'; +import LinearGradient from 'react-native-linear-gradient'; +import * as RNFS from 'react-native-fs'; +import NetInfo from '@react-native-community/netinfo'; +import Icon from 'react-native-vector-icons/MaterialCommunityIcons'; +import { getMethodName, METHODS } from '../constants/methodNames'; + +function GetDb(props) { + const route = useRoute(); + const ST = props.StaticText || {}; + // get all theme styles acc to current theme set + const PageTheme = GetPageTheme(props.DarkMode, route.name); + const customStyle = customStyles(props.DarkMode, route.name); + const [processing, setProcessing] = useState(false); + async function showdbfile() { + const dbbackupFolder = RNFS.DocumentDirectoryPath + '/DbBackup'; + //const dbbackupFolder = RNFS.ExternalDirectoryPath + '/DbBackup'; // Adjust if you're using another path + const targetPath = dbbackupFolder + '/' + props.projectCode + "_" + props.UserId + "_" + moment(new Date()).format('MMDDYYYY_HHmmss') + "_" + DBName; + //const backupPath = RNFS.ExternalDirectoryPath + '/' + DBName; + const backupPath = RNFS.DocumentDirectoryPath + '/' + DBName; + try { + setProcessing(true); // ⏳ show loader + // Check if backup folder exists + const folderExists = await RNFS.exists(dbbackupFolder); + console.log("DbBackup folder exists:", folderExists); + if (!folderExists) { + console.warn("Backup folder does not exist."); + return; + } + // List files in backup folder + const files = await RNFS.readDir(dbbackupFolder); + console.log("Files in backup folder:" + targetPath); + files.forEach(file => console.log(" -", file.name)); + // Check if DB file exists + const fileExists = await RNFS.exists(backupPath); + console.log("DB file exists:", fileExists); + if (!fileExists) { + console.warn("Database file not found at path:", backupPath); + return; + } + // Copy file + await RNFS.copyFile(backupPath, targetPath); + console.log("files_db", files) + // Refresh file list after copy + files = await RNFS.readDir(dbbackupFolder); + console.log("📂 Files in backup folder:", files.map(f => f.name)); + + for (const file of files) { + if (file.isFile()) { + console.log("Uploading:", file.path); + let d1 = new Date(); + let d2 = moment(d1).format('MM/DD/YYYY'); + const formData = new FormData(); + formData.append("file", { + uri: Platform.OS === "ios" ? file.path : "file://" + file.path, + type: "application/octet-stream", + name: file.name, + }); + formData.append("Foldername", "dbBackup"); + formData.append("Path", d2); + + const requestOptions = { + method: "POST", + body: formData, + redirect: "follow" + }; + + const url = (props.imageUploadUrl || URL_IMAGE) + getMethodName(METHODS.UPLOADIMAGES_METHOD); + + try { + const response = await fetch(url, requestOptions); + // read as text, because it's XML + const resultText = await response.text(); + if (resultText.includes("Success")) { + // Delete the file after successful upload + await RNFS.unlink(file.path); + console.log("🗑️ Deleted local backup:", file.name); + } else { + console.log("⚠️ Upload failed, keeping file:", file.name); + } + console.log("Raw upload response:", resultText); + if (!response.ok) { + throw new Error("Upload failed: " + resultText); + } + } catch (err) { + console.error("❌ Upload error:", err.message || err); + } + } + } + + notify("Backup exported successfully") + } catch (err) { + console.error("❌ Error handling DB file:", err.message || err); + } finally { + setProcessing(false); // ✅ hide loader after upload + } + } + + + + + + + + return ( + + {processing && } + + + + {/* {borderTopLeftRadius:0,borderTopRightRadius:0,} */} + + { + Alert.alert( + 'Confirm Backup', + 'Are you sure you want to take and upload backup?', + [ + { text: 'Cancel', style: 'cancel' }, + { + text: 'Yes', + onPress: () => { + NetInfo.fetch().then(state => { + if (state.isConnected) { + showdbfile(); + } else { + Alert.alert('No Internet', 'Please check your internet connection and try again.'); + } + }); + }, + }, + ], + { cancelable: true } + ); + }} + > + + + DB Backup + + + + + + + ); +} + + + +export default connect(mapStateToProps, mapDispatchToProps)(GetDb); \ No newline at end of file diff --git a/PerformicsSrc/src/screens/GroomingPictures.js b/PerformicsSrc/src/screens/GroomingPictures.js new file mode 100644 index 0000000..cf4a7e7 --- /dev/null +++ b/PerformicsSrc/src/screens/GroomingPictures.js @@ -0,0 +1,898 @@ +import React, { useState, useCallback, useEffect } from 'react'; +import Container from '../components/container'; +import { useRoute, useFocusEffect } from '@react-navigation/native'; +import { customStyles, GetPageTheme } from '../styles/Global'; +import { View, Text, TouchableOpacity, Platform, FlatList, StyleSheet, Image, ScrollView, BackHandler, Alert } from 'react-native'; +import { db, ImageFolderPath, URL_IMAGE } from '../constants/constants'; +import * as RNFS from 'react-native-fs'; +import { connect } from 'react-redux'; +import { mapStateToProps, mapDispatchToProps } from '../reducers/contextProvider'; +import CustomCamera from '../components/Camera'; +import { METHODS, getMethodName } from '../constants/methodNames'; +import moment from 'moment'; +import CustomHeader from '../components/customHeader'; +import CustomLoader from '../components/CustomLoader'; +import LinearGradient from 'react-native-linear-gradient'; +import { useNavigation } from '@react-navigation/native'; +import Icon from "react-native-vector-icons/Ionicons"; +import CustomModal from '../components/CustomModal'; +import { getDownloadJson1, restore_ImageWithMetaData, UploadData2 } from '../controller/functions'; +import { MaterialCommunityIcons } from '../components/icons'; +import { ConfirmSaveAlert } from '../components/alert'; +import GradientButton from '../components/gradientButton'; +import { UploadImagesWithoutWait } from '../constants/uploadData'; +import { notify } from '../components/notify'; +import Svg, { Path, SvgXml } from "react-native-svg"; +import ApprovedIcon from '../assets/image/aprooved_icon.svg'; +import PendingIcon from '../assets/image/pending_icon.svg'; +import RejectIcon from '../assets/image/reject_icon.svg'; + + +function GroomingPictures(props) { + const route = useRoute(); + const ST = props.StaticText || {}; + // get all theme styles acc to current theme set + const PageTheme = GetPageTheme(props.DarkMode, route.name); + const customStyle = customStyles(props.DarkMode, route.name); + const [processing, setProcessing] = useState(true); + const [images, setImages] = useState([]); + //camera + const [showCamera, setShowCamera] = useState(false); + const [clickImageType, setClickImageType] = useState('0'); + const [showImageSaveOp, setShowImageSaveOp] = useState(true); + const [reCapImgModalObj, setReCapImgModalObj] = useState({}); + const [loaderTitle, setLoaderTitle] = useState(); + const hasUnsavedChangesRef = React.useRef(hasUnsavedChanges); + const [hasUnsavedChanges, setHasUnsavedChanges] = useState(false); + const [rerenderdata2, setrerenderdata2] = useState(0); + const [showModalAlert, setShowModalAlert] = useState(false); + const [_hasImages, SethasImages] = useState(false); + + const [showModal, setShowModal] = useState(false); + const [SelectedImg, setSelectedImg] = useState(''); + const navigation = useNavigation(); + const d1 = new Date(); + const d2 = moment(d1).format('MM/DD/YYYY'); + const [activeSessions, setActiveSessions] = useState([]); + ///store related state + const [isAdhocScreen, setIsAdhocScreen] = useState(false); + const [isBeatPlan, setIsBeatPlan] = useState(false); + const [isNonMerchan, setIsNonMerchan] = useState(false); + const [isNonProg, setIsNonProg] = useState(false); + const [isStoreSearch, setIsStoreSearch] = useState(false); + const [storeData, setStoreData] = useState({}); + + useFocusEffect(useCallback( + () => { + getData(); + }, [])); + + useEffect(() => { + let params = props.route.params ? props.route.params : {}; + let storeData1 = params.storeData || {}; + console.log("storeData1", storeData1) + let isAdhoc = params.isAdhoc || false; + let isBeat = params.isBeat != null ? params.isBeat : false; + let isNonMerchan1 = params.isNonMerchans != null ? params.isNonMerchans : false; + let isNonProgam = params.isNonProgs != null ? params.isNonProgs : false; + let isStoreSearch = params.isStoreSearch != null ? params.isStoreSearch : false; + setIsAdhocScreen(isAdhoc); + setIsBeatPlan(isBeat); + setIsNonMerchan(isNonMerchan1); + setIsNonProg(isNonProgam) + setIsStoreSearch(isStoreSearch) + setStoreData(storeData1); + }) + + useEffect(() => { + const unsubscribe = props.navigation.addListener('beforeRemove', onBeforeRemove); + return unsubscribe; + }, [hasUnsavedChanges]); + + useEffect(() => { + const unsubscribe = props.navigation.addListener('beforeRemove', onBeforeRemove); + return unsubscribe; + }, [showCamera]); + + function onBeforeRemove(e) { + console.log("logsss", showCamera, hasUnsavedChanges) + if (showCamera == true) { + e.preventDefault(); + setShowCamera(false); + } + else { + if (hasUnsavedChanges == true) { + e.preventDefault(); // Prevent default behavior of leaving the screen + onRemoveScreen(e); + } + else { + return; + } + } + } + + function onRemoveScreen(e) { + BgUnsavedChanges(false) + props.navigation.dispatch(e.data.action); + } + + async function getData() { + try { + setProcessing(true); + let imagePath = `${ImageFolderPath + 'GROOMINGIMG'}`; + const files = await RNFS.readDir(imagePath); + const uris = files.filter(file => file.isFile()).map(file => `file://${file.path}`); + console.log("imagePath", uris) + if (uris && uris.length > 0) { + const result = uris?.map(filePath => { + const filename = filePath.split('/').pop(); + return { + filePath, + filename + }; + }); + + await uploadContractFormFiles12(result); + } + await DownloadGroomingData(); + db.transaction((txn) => { + const menuQuery = `SELECT * FROM Master_GroomingImages `; + // First: Fetch Menu + txn.executeSql(menuQuery, [], (txn2, txnres) => { + const len = txnres.rows.length; + const groomingArr = []; + for (let i = 0; i < len; i++) { + let data = txnres.rows.item(i); + console.log("data--------", data) + if (data.GroomingImages) { + data['GroomingImages'] = JSON.parse(data?.GroomingImages || []) + } + groomingArr.push(data); + } + const now = new Date(); + const currentTime = now.toTimeString().slice(0, 8); + const isTimeBetween = (current, start, end) => + current >= start && current <= end; + const filtered = groomingArr.filter(item => { + const hasImages = item?.GroomingImages && item?.GroomingImages?.length > 0; + const inTime = isTimeBetween(currentTime, item.StartTime, item.EndTime); + return inTime || hasImages; // ✅ include if time matches OR images exist + }); + + const noImages = filtered?.some(item => + !Array.isArray(item?.GroomingImages) || item.GroomingImages.length === 0 + ); + + if (!noImages) SethasImages(true) + setActiveSessions(filtered); + setProcessing(false) + }, (txn2, err2) => { + console.error("Menu fetch error:", err2); + setActiveSessions([]); + setProcessing(false); + }); + }); + } catch (err) { + console.error("getData error:", err); + setProcessing(false); + } + } + + function onSaveCancel() { + setShowModalAlert(false); + } + async function OpenImgModal(image, index) { + setSelectedImg(image?.filePath) + setShowModal(true); + if ((image != '' && image != null)) { + setShowImageSaveOp(false); + } else { + setShowImageSaveOp(true); + } + setReCapImgModalObj({ image, index }) + } + function cancelImage() { + setSelectedImg(''); + setReCapImgModalObj({}) + setShowModal(false); + } + + function BgUnsavedChanges(val) { + hasUnsavedChangesRef.current = val + setHasUnsavedChanges(val); + } + + async function getImage(imgdata) { + if (typeof imgdata == 'object' && imgdata.errorCode == 'camera_unavailable') { + notify(ST.Cameraunavailable); + } + else if (typeof imgdata == 'object' && imgdata.uri != null) { + const img = imgdata; + const imgurl = img.uri, imgWidth = img.width, imgHeight = img.ExtendedHeight; + let isImgFromGallery = img.fromGallery != null ? img.fromGallery : false; + let picture_clickedd = isImgFromGallery == true ? img.datetime : new Date(); + ////change by jeevanp + let picture_clicked_time = moment(picture_clickedd).format('MM-DD-YYYY HH:mm:ss') + let picture_clicked_time_for_pic_name = moment(picture_clickedd).format('MMDDYYYY_HHmmss') + let calculate_tym_date_for_filename = picture_clicked_time_for_pic_name; + let calculate_tym_date_over_img = picture_clicked_time; + let filename = (props.UserId || '') + '_GroomingImg-' + calculate_tym_date_for_filename + '.jpg'; + + const mark_text1 = calculate_tym_date_over_img; + const mark_text2 = 'User Id:' + props.UserId + ' | Image Type: ' + props.GroomingObj?.GroomingTitle + ' | Date:' + calculate_tym_date_over_img; + let imagePath = `${ImageFolderPath + 'GROOMINGIMG'}/${filename}`; + RNFS.copyFile(imgurl, imagePath) + .then(async (resn) => { + console.log("filename=>", imagePath,) + // render data with clicked image + let uri = 'file://' + imagePath; + // Create a new image object + const newImage = { + GroomingId: clickImageType, + filename: filename, + filePath: uri, + UserId: props.UserId, + VisitDate: props.VisitDate + }; + + const retakeModel = reCapImgModalObj; // coming like { image: ..., index: ... } + if (retakeModel && retakeModel.image) { + const { GroomingId: retakeId } = retakeModel.image; + setImages(prevImages => { + let updated = [...prevImages]; + if (retakeModel?.index !== undefined && updated[retakeModel?.index]) { + // ✅ Update single index if provided + updated[retakeModel?.index] = { + ...updated[retakeModel?.index], + filePath: uri, + filename: filename, + }; + } else { + // ✅ Update all items with matching GroomingId + updated = prevImages.map((img, idx) => { + // update only if both GroomingId and index match + if (img.GroomingId === retakeId && idx === retakeModel?.index) { + return { + ...img, + filePath: uri, + filename: filename, + }; + } + return img; // leave others unchanged + }); + } + + return updated; + }); + + setReCapImgModalObj({}); + } + else { + // NORMAL MODE ✅ APPEND new image + setImages(prevImages => { + const updated = [...prevImages, newImage]; + return updated; + }); + } + setSelectedImg(uri) + BgUnsavedChanges(true) + setrerenderdata2(prev => !prev); + // add metdata then resize image and restored back to the imagePath + let restore_data = { "destFilePath": imagePath, "imgurl": imgurl, imgWidth, imgHeight, mark_text1, mark_text2 } + let is_restored = await restore_ImageWithMetaData(restore_data, imgdata); + }) + .catch(err => { + console.log('ERROR: image file write failed!!!'); + console.log(err.message, err.code); + }); + } + } + + function _OpenCaptureImage_Modal(img) { + const isImageCap = (img != '' || img != null) ? true : false; + return ( + + { + isImageCap && + + + + + { openCamera('1') }}> + + + + {!showImageSaveOp && + { cancelImage() }}> + {ST.Close} + + } + + } + + ) + } + + async function openCamera(id) { + console.log('openCamera', id); + setHasUnsavedChanges(false) + setClickImageType(id); + setShowCamera(true); + setShowModal(false) + } + + async function upload_Data() { + setShowModalAlert(false); + let d1 = new Date(); + let d2 = moment(d1).format('MM/DD/YYYY'); + setProcessing(true); + setLoaderTitle('Uploading Data...'); + const groupedData = images.reduce((acc, img) => { + // Check if GroomingId already exists + let existing = acc.find(item => item.GroomingId === img.GroomingId); + const imgData = { + filename: img.filename, + }; + if (existing) { + // ✅ Add image to existing GroomingId + existing.images.push(imgData); + } else { + // ✅ Create new entry + acc.push({ + GroomingId: img.GroomingId, + VisitDate: img.VisitDate, + UserId: img.UserId, + images: [imgData], + }); + } + return acc; + }, []); + + //console.log("Grouped JSON:", JSON.stringify(groupedData)); + let postData = { + MID: 0, + Keys: "GroomingPictures", + JsonData: JSON.stringify(groupedData), + UserId: props.UserId, + }; + const url = props.baseurl + 'UploadJsonDirect'; + console.log(JSON.stringify(postData), 'url and postDaata...'); + console.log('upload_data----', images); + await uploadContractFormFiles12(images); + await UploadData2(url, postData) + .then(async res => { + console.log('res: 12', res, url); + if (res?.UploadJsonDirectResult == 'Success') { + const result = await DownloadGroomingData(); + notify('Data Upload Successfully.'); + // Insert into SQLite + setProcessing(false); + // Navigate back after upload + const isEmpty = !storeData || Object.keys(storeData).length === 0; + navigation.goBack(); + } else { + notify(res?.UploadJsonDirectResult); + setProcessing(false); + } + }) + .catch(err => { + console.log(err); + setProcessing(false); + }); + } + + + async function DownloadGroomingData() { + try { + const postdata = { + Downloadtype: "Master_GroomingImages", + Username: props.UserId, + Param1: "", + Param2: Platform.OS === "ios" ? "iOS" : "Android", + }; + const url = props.baseurl + getMethodName(METHODS.DOWNLOADJSON_METHOD); + console.log("Download URL:", url, postdata); + const res = await getDownloadJson1(url, postdata); + if (!res || typeof res !== "object") { + notify("Downloading issues: Invalid response"); + return false; + } + const data_arr = res["Master_GroomingImages"] || []; + if (!data_arr.length) { + console.warn("⚠️ No Master_GroomingImages found"); + return false; + } + const insertResult = await insertJsonDataToTable(db, "Master_GroomingImages", data_arr); + console.log("DB insert result:", insertResult); + return insertResult; + } catch (err) { + console.error("DownloadGroomingData error:", err); + return false; // or throw err if you want the caller to catch + } + } + + async function insertJsonDataToTable(db, tableName, jsonData) { + console.log("jsonData----------", jsonData); + if (!Array.isArray(jsonData) || jsonData.length === 0) return true; + const columns = Array.from(new Set(jsonData.flatMap(row => Object.keys(row)))); + const normalizedData = jsonData.map(row => + columns.reduce((acc, col) => { + acc[col] = row[col] ?? null; + return acc; + }, {}) + ); + + const valuesArray = normalizedData.map(row => + "(" + columns.map(col => { + let val = row[col]; + if (val === null || val === undefined) return "NULL"; + if (typeof val === "number") return val; + if (typeof val === "boolean") return val ? 1 : 0; + // If val is an object or array, stringify it + if (typeof val === "object") val = JSON.stringify(val); + // Escape single quotes in strings + return `'${val.toString().replace(/'/g, "''")}'`; + }).join(",") + ")" + ); + const sql = `INSERT INTO ${tableName} (${columns.join(",")}) VALUES ${valuesArray.join(",")};`; + return new Promise((resolve, reject) => { + db.transaction(txn => { + txn.executeSql(`DELETE FROM ${tableName}`, [], () => { + txn.executeSql(sql, [], () => { + console.log(`✅ Inserted data into table: ${tableName}`); + resolve(true); + }, (tx, error) => { + console.error(`❌ Insert failed in table: ${tableName}`, error); + reject(error); + }); + }, (tx, error) => { + console.error(`❌ Delete failed in table: ${tableName}`, error); + reject(error); + }); + }); + }); + } + + async function uploadContractFormFiles12(allfiles = []) { + let d1 = new Date(); + let d2 = moment(d1).format('MM/DD/YYYY'); + let uploadCount = 0; + const url = (props.imageUploadUrl || URL_IMAGE) + getMethodName(METHODS.UPLOADIMAGES_METHOD); + var isAllUploaded = false; + return await Promise.all( + allfiles.map(async (file, i) => { + let index = i; + let actualfilepath = file.filePath; + console.log('actualfilepath---', actualfilepath, file); + let isExists = await RNFS.exists(actualfilepath).then(res => { + return res; + }); + console.log('isExists file', isExists, file); + let isImageUploaded = false; + if (isExists) { + let postData = new FormData(); + postData.append('file', { + uri: actualfilepath, + type: 'image/jpeg', + name: file.filename, + }); + postData.append('Foldername', 'GroomingImages'); + postData.append('Path', d2); + console.log("postData", postData) + isImageUploaded = await UploadImagesWithoutWait(postData, url); + if (isImageUploaded == true) { + console.log( + 'isExists file uploaded', + isExists, + uploadCount, + index, + allfiles.length - 1, + ); + await RNFS.unlink(actualfilepath); + uploadCount++; + if (uploadCount == allfiles.length) { + isAllUploaded = true; + } + } else { + console.log('file not uploaded:', isExists, actualfilepath); + } + } else { + //file does not exists + uploadCount++; + if (uploadCount == allfiles.length) { + isAllUploaded = true; + } + } + + return isImageUploaded; + }), + ).then(val => { + console.log(val); + return isAllUploaded; + }) + .catch(err => { + console.log(err); + return false; + }); + } + + const handleUpload = () => { + let rse = validate(); // Run validation + if (!rse) return; + console.log('Setting showModal to true'); // Debugging + setShowModalAlert(true); // Show the confirmation modal + }; + + const validate = () => { + let isValid = true; + for (let i = 0; i < activeSessions?.length; i++) { + const item = activeSessions[i]; + const currentImages = item?.GroomingImages ? item?.GroomingImages?.length : 0; + if (currentImages == 0 && images?.length == 0 && item?.MinImage !== 0) { + notify(item?.Message) + isValid = false; + break; + } if (currentImages == 0 && images?.length > 0 && images?.length < item?.MinImage) { + notify(item?.Message + " atleast " + item?.MinImage) + isValid = false; + break; + } + } + + return isValid; + }; + + const renderSession = ({ item }) => { + const now = new Date(); + const currentTime = now.toTimeString().slice(0, 8); + const isTimeBetween = (current, start, end) => current >= start && current <= end; + const currentImages = item?.GroomingImages ? item?.GroomingImages?.length : 0; + const isActive = isTimeBetween(currentTime, item.StartTime, item.EndTime) && currentImages == 0; + // Calculate current uploaded images + const remainingImages = item.MaxImage - currentImages; + const currentImageCount = images.filter( + img => img.GroomingId === item.GroomingId + ).length; + + return ( + + {/* 🔹 Static SVG icon in top-right corner */} + {!isActive && ( + + {item?.AuditStatus === 'Aprooved' ? ( ) : item?.AuditStatus === 'Reject' ? ( ) : ( )} + + )} + + + + {item.GroomingName}{" "} + {isActive && ● Active} + + + + {item.Message} + + 🕒 {item.StartTime} - {item.EndTime} + + {/* Show progress for Min/Max Images */} + {isActive && ( + + + {`Images: ${images.filter(img => img.GroomingId === item.GroomingId).length + }/${item.MaxImage}`} + + + + )} + + {isActive && ( + + = item.MaxImage && styles.disabledButton, // change color + ]} + onPress={() => currentImageCount < item.MaxImage && openCamera(item?.GroomingId)} + disabled={currentImageCount >= item.MaxImage} // disables touch + > + = item.MaxImage ? '#888' : '#fff'} // optional icon color change + /> + + + {images?.length > 0 && ( + + {images + ?.filter(img => img.GroomingId === item.GroomingId) + .map((img, index) => ( + + OpenImgModal(img, index)}> + + + + {/* Delete Icon */} + { + Alert.alert( + "Delete Image", + "Are you sure you want to delete this image?", + [ + { text: "Cancel", style: "cancel" }, + { + text: "Delete", + style: "destructive", + onPress: () => { + // Remove the image from images array + const newImages = images.filter( + (i) => i.filePath !== img.filePath + ); + setImages(newImages); // assuming images is in state + } + } + ] + ); + }} + > + + + + ))} + + )} + + )} + {/* Show existing images */} + {item?.GroomingImages && item?.GroomingImages?.length > 0 && ( + <> + + {`Images: ${item?.GroomingImages?.length + }/${item.MaxImage}`} + + + + {item?.GroomingImages.map((img, index) => ( + + {console.log("item-------", img)} + + + {`${moment(img?.CaptureDate, "DD/MM/YYYY").format("DD MMM, YYYY")}-${img?.CaptureTime}`} + + + + + ))} + + + + )} + + ); + }; + + + return ( + + {processing && } + + {ConfirmSaveAlert( + props, + showModalAlert, + onSaveCancel, + upload_Data, + 'Do you really want to save data ?', + )} + + { setShowCamera(false); getImage(imgData) }} showCamera={showCamera} onHideCamera={() => { setShowCamera(false); }} /> + {_OpenCaptureImage_Modal()} + + + + {activeSessions.length > 0 ? ( + item.GroomingId.toString()} + renderItem={renderSession} + contentContainerStyle={styles.list} + style={{ marginLeft: 7, marginRight: 7, marginTop: 7, marginBottom: 40 }} + /> + ) : !processing && ( + {`No active ${props.GroomingObj?.GroomingTitle || 'grooming session'} right now.`} + )} + + + + {!_hasImages && activeSessions.length > 0 && ( + + { handleUpload() }} /> + + )} + + + ); +} + +export default connect(mapStateToProps, mapDispatchToProps)(GroomingPictures); + +const styles = StyleSheet.create({ + container: { + flex: 1, + backgroundColor: "#F9FAFB", + padding: 16, + }, + list: { + paddingBottom: 30, + }, + card: { + backgroundColor: "white", + borderRadius: 16, + padding: 16, + marginBottom: 12, + shadowColor: "#000", + borderColor: "#d3d3d3", + borderWidth: 1, + shadowOpacity: 0.1, + shadowRadius: 6, + shadowOffset: { width: 0, height: 3 }, + elevation: 3, + }, + title: { + fontSize: 18, + fontWeight: "700", + color: "#333", + }, + message: { + marginTop: 4, + fontSize: 14, + color: "#666", + }, + time: { + marginTop: 8, + fontSize: 13, + color: "#888", + }, + image: { + width: 100, + height: 100, + borderRadius: 10, + marginTop: 10, + marginRight: 8, + }, + noData: { + textAlign: "center", + alignContent: "center", + alignItems: "center", + color: "#999", + marginTop: 250, + fontWeight: "500", + fontSize: 20, + }, activeCard: { + borderColor: "#4CAF50", + borderWidth: 1.5, + backgroundColor: "#F0FFF9", + }, + + activeTag: { + color: "#4CAF50", + fontSize: 12, + }, + + imageProgressContainer: { + marginTop: 8, + }, + + imageProgressText: { + fontSize: 13, + color: "#555", + marginBottom: 4, + }, + + iconRow: { + flexDirection: "row", + alignItems: "center", + }, + + imageSlot: { + width: 20, + height: 20, + borderRadius: 4, + marginRight: 6, + }, + slotsContainer: { + marginBottom: 10, + marginTop: 6, + marginStart: 6 + }, + slotsText: { + fontSize: 16, + marginBottom: 5, + marginLeft: 5, + marginTop: 2, + fontWeight: "500", + }, + iconRow: { + flexDirection: "row", + }, + slot: { + width: 50, + height: 50, + marginRight: 10, + borderRadius: 8, + justifyContent: "center", + alignItems: "center", + }, + addButton: { + backgroundColor: '#007AFF', + width: 50, + height: 50, + borderRadius: 30, + justifyContent: 'center', + alignItems: 'center', + shadowColor: '#000', + shadowOffset: { width: 0, height: 3 }, + shadowOpacity: 0.3, + shadowRadius: 2, + elevation: 1, + + }, + disabledButton: { + backgroundColor: '#ccc', // grey when disabled + }, + previewImage: { + width: 84, + height: 84, + borderRadius: 8, + marginRight: 10, + }, + titleContainer: { + flexDirection: 'row', // icon + text in a row + alignItems: 'flex-start', // vertically center them + justifyContent: 'flex-start', // center horizontally + }, + icon: { + marginRight: 6, + height: 25, + width: 25, + }, + topRightIcon: { + position: 'absolute', + top: 15, + right: 8, + zIndex: 10, + }, + +}); diff --git a/PerformicsSrc/src/screens/HomeLocation.js b/PerformicsSrc/src/screens/HomeLocation.js new file mode 100644 index 0000000..8725124 --- /dev/null +++ b/PerformicsSrc/src/screens/HomeLocation.js @@ -0,0 +1,965 @@ +import React, { useState, useEffect } from 'react'; +import Container from '../components/container'; +import { useRoute } from '@react-navigation/native'; +import { globalStyles, customStyles, GetPageTheme, WP } from "../styles/Global"; +import { Image, View, Text, ScrollView, TouchableOpacity, Platform, FlatList, DeviceEventEmitter, Keyboard } from 'react-native'; +import { connect } from 'react-redux'; +import { mapStateToProps, mapDispatchToProps } from '../reducers/contextProvider'; +import { notify } from '../components/notify'; +import moment from 'moment'; +import { checkRange, restore_ImageWithMetaData, UpdateStoreStatus, UploadData, UploadData2, UploadFormData } from '../controller/functions'; +import { AppVersion, common_ImagePath, ImageFolderPath, db, gMap_key, URL_IMAGE, CoverageImagePath } from '../constants/constants'; +import CustomHeader from '../components/customHeader'; +import { AntDesign, Entypo, MaterialCommunityIcons } from '../components/icons'; +import CustomLoader from '../components/CustomLoader'; +import LinearGradient from 'react-native-linear-gradient'; +import MapView, { Marker, AnimatedRegion, Polyline, PROVIDER_GOOGLE } from 'react-native-maps'; +import { _checkLocationPermission } from '../components/geolocation'; +import Geolocation from 'react-native-geolocation-service'; +import { useRef } from 'react'; +import GradientButton from '../components/gradientButton'; +import * as RNFS from 'react-native-fs'; + +import CameraImg from '../assets/performics/camera_front_image.svg' +import { AppTables } from '../constants/tableConstants'; +import { getFolderName, getMethodName, METHODS } from '../constants/methodNames'; +import { getAvailblQuery, getIfAvlbl, Q_MenuList } from '../constants/ConstantQueries'; +import { executeTasks, getPostData, getReDownloadTasks1, startRedownload } from '../components/downloadTasks'; +import DownloadDataModal from '../components/downloadDataModal'; +import CustomModal from '../components/CustomModal'; +import CameraImg3 from '../assets/performics/camera_tick.svg'; +import { ConfirmSaveAlert } from '../components/alert'; +import { get_item } from '../components/localStorage'; + + +function StoreCheckin(props) { + const route = useRoute(); + const ST = props.StaticText || {}; + // get all theme styles acc to current theme set + const PageTheme = GetPageTheme(props.DarkMode, route.name); + const customStyle = customStyles(props.DarkMode, route.name); + const [processing, setProcessing] = useState(false); + + const [storeData, setStoreData] = useState({}); + const [StoreImage, setStoreImage] = useState(''); + const [StoreImgPath, setStoreImgPath] = useState(''); + + const [currentLocation, setCurrentLocation] = useState({}); + const [markerCoordinate, setMarkerCoordinate] = useState({ latitude: 0, longitude: 0 }); + + const [markerPos, setMarkerPos] = useState({}); + const [markerTitle, setMarkerTitle] = useState(''); + const [markerPlaceText, setMarkerPlaceText] = useState(''); + const [loaderTitle, setLoaderTitle] = useState(); + const [isAdhocScreen, setIsAdhocScreen] = useState(false); + const [isBeatPlan, setIsBeatPlan] = useState(false); + const [storeDistanceText, setStoreDistanceText] = useState('0 m'); + const [storeDistance, setStoreDistance] = useState(0); + const [showCamera, setShowCamera] = useState(false); + const [getImageProps, setGetImageProps] = useState({}); + const [isNonMerchan, setIsNonMerchan] = useState(false); + + const [isNonProg, setIsNonProg] = useState(false); + const [isStoreSearch, SetIsStoreSearch] = useState(false); + const [isDataDownloaded, setisDataDownloaded] = useState(false); + const [startDownload, setStartDownload] = useState(false); + const [TaskResponse, setTaskResponse] = useState([]); + const [downloadingText, setDownloadingText] = useState(''); + const [dowloadedCount, setDowloadedCount] = useState(-1); + const [totalCount, setTotalCount] = useState(-1); + const [DownloadTasks, setDownloadTasks] = useState([]); + + const [DErrorMsg, setDErrorMsg] = useState({}); + const [showDErrAlert, setshowDErrAlert] = useState(false); + + const [SelectedImg, setSelectedImg] = useState(''); + const [showModal, setShowModal] = useState(false); + const [showImageSaveOp, setShowImageSaveOp] = useState(true); + + const [showAlert, setShowAlert] = useState(false); + + + const MyMap = useRef(null); + const MyMarker = useRef(null); + const isCancelled = useRef(false); + const d1 = new Date(); + const d2 = moment(d1).format('MM/DD/YYYY'); + + useEffect(() => { + setLoaderTitle(ST.Loading + '...') + let params = props.route.params ? props.route.params : {}; + let storeData1 = params.storeData || {}; + let isAdhoc = params.isAdhoc || false; + let isBeat = params.isBeat != null ? params.isBeat : false; + let isNonMerchan1 = params.isNonMerchans != null ? params.isNonMerchans : false; + let isNonProgam = params.isNonProgs != null ? params.isNonProgs : false; + let isStoreSearch = params.isStoreSearch != null ? params.isStoreSearch : false; + setIsAdhocScreen(isAdhoc); + setIsBeatPlan(isBeat); + setIsNonMerchan(isNonMerchan1); + setIsNonProg(isNonProgam) + SetIsStoreSearch(isStoreSearch) + setStoreData(storeData1); + calLocatDistance(storeData1); + getLocationUpdates(); + getCurrentPosition(); + getData(); + + const onImageCapturedSubs = DeviceEventEmitter.addListener('onImageCaptured', (imgData) => { getImage(imgData) }); + + return function cleanup() { + isCancelled.current = true; + Geolocation.clearWatch() + onImageCapturedSubs.remove(); + + }; + + }, []); + + useEffect(() => { + const unsubscribe = props.navigation.addListener('beforeRemove', onBeforeRemove); + return unsubscribe; + }, [showCamera]); + + + + useEffect(() => { + console.log('on totalCount change:', totalCount, startDownload); + if (startDownload == true && totalCount > -1) { + setDowloadedCount(0); + } + }, [totalCount]); + + useEffect(() => { + if (startDownload && TaskResponse != null) { + console.log('increment dowloadedCount changed'); + let count = dowloadedCount + 1; + setDowloadedCount(count); + } + }, [TaskResponse]); + + + useEffect(() => { + console.log('dowloadedCount onchange:', dowloadedCount); + if (dowloadedCount <= totalCount) { + executeTasks(props, storeData, DownloadTasks, dowloadedCount, totalCount, setDowloadedCount, setDownloadingText, onDownloadComplete, setTaskResponse, showErrorModal); + } + else { + setStartDownload(false); + } + }, [dowloadedCount]); + + function onBeforeRemove(e) { + console.log('onBeforeRemove:', showCamera); + if (showCamera == true) { + e.preventDefault(); + setShowCamera(false); + } + else { + return; + } + } + + async function getData() { + console.log('getData checkin'); + let Tasks = await getReDownloadTasks1(props); + console.log('Tasks redownload len:', Tasks.length) + setDownloadTasks(Tasks); + } + + function cancelImage() { + // setImage1(''); + setSelectedImg(''); + setShowModal(false); + } + + async function calLocatDistance() { + + const hasPermission = await _checkLocationPermission(); + if (hasPermission == true) { + getLocationUpdates(); + getCurrentPosition(); + + } + else { + notify(ST.Pleaseallowlocationpermission); + } + + } + + + async function getCurrentPosition() { + Geolocation.getCurrentPosition( + async (position) => { + OnLocation(position); + console.log(position, 'position....'); + const { coords } = position; + setMarkerCoordinate({ latitude: coords.latitude, longitude: coords.longitude }); + + }, + (error) => { + notify(ST.Cannotgetuserposition); + }, + { enableHighAccuracy: true, distanceFilter: 10, interval: 1000, fastestInterval: 2000 } + ); + } + + async function getLocationUpdates(storeData1) { + Geolocation.watchPosition( + async (position) => { + OnLocation(position, storeData1); + }, + (error) => { + notify(ST.Cannotgetuserposition); + }, + { enableHighAccuracy: true, distanceFilter: 1, interval: 10000, fastestInterval: 5000, maximumAge: 0 } + ) + } + + async function OnLocation(position) { + let { lat, lng } = currentLocation; + let { Latitude, Longitude } = locationdata + let { LATITUDE, LONGITUDE, Status } = locationdata2 + let latitude = (parseFloat(Latitude) || parseFloat(LATITUDE)) || position?.coords?.latitude; + let longitude = (parseFloat(Longitude) || parseFloat(LONGITUDE)) || position?.coords?.longitude; + + latitude = parseFloat(parseFloat(latitude).toFixed(8).replace("-e", "")); + longitude = parseFloat(parseFloat(longitude).toFixed(8).replace("-e", "")); + + let loc = { lat: latitude, lng: longitude }; + + setMarkerCoordinate(new AnimatedRegion({ latitude: latitude, longitude: longitude })); + setMarkerInfo({ latitude: latitude, longitude: longitude }); + setCurrentLocation(loc); + + + // var distance = checkRange(loc.lat,loc.lng,storeData1.Latitude,storeData1.Longitude); + // console.log('distance:',distance); + // let dinKM=(distance / 1000); + // let distanceinM=(distance=='' || distance==null || isNaN(distance))?' 0 m':( dinKM > 1 ? dinKM.toFixed(1) + ' Km' : distance + ' m'); + // setStoreDistanceText(distanceinM); + // setStoreDistance(distance); + } + + async function getPosition_global(successCallback) { + Geolocation.getCurrentPosition( + async (position) => { + successCallback(position); + }, + (error) => { + notify(ST.Cannotgetuserposition); + }, + { enableHighAccuracy: true, distanceFilter: 0, interval: 1000, fastestInterval: 2000 } + ); + } + + async function submitCheckIn() { + + if (validate()) { + // setLoaderTitle(ST.ProcessingCheckIn+'...'); + setProcessing(true); + + async function posSuccessCallback(position) { + let latitude = position.coords.latitude; + let longitude = position.coords.longitude; + latitude = parseFloat(parseFloat(latitude).toFixed(8).replace("-e", "")); + longitude = parseFloat(parseFloat(longitude).toFixed(8).replace("-e", "")); + + + let loc = { lat: latitude, lng: longitude }; + // await uploadCheckIn(loc) + InsertHomeLocationData(loc) + + // var distance = checkRange(loc.lat,loc.lng,storeData.Latitude,storeData.Longitude); + // console.log('distance in submitCheckIn:',distance); + // let dinKM=(distance / 1000); + // let distanceinM=(distance=='' || distance==null || isNaN(distance))?' 0 m':( dinKM > 1 ? dinKM.toFixed(1) + ' Km' : distance + ' m'); + // setStoreDistanceText(distanceinM); + // setStoreDistance(distance); + // (isAdhocScreen==true || isBeatPlan==true || isNonMerchan==true || isNonProg==true)? await createJCP(loc): await uploadCheckIn(loc); + // } + } + await getPosition_global(posSuccessCallback); + } + } + + async function createJCP(loc) { + console.log('createJCP'); + let d1 = new Date(); + let d2 = moment(d1).format('MM/DD/YYYY'); + let data = { "UserId": (props.UserId || ''), "JcpType": (isBeatPlan == true ? 2 : (isNonMerchan == true ? 3 : (isNonProg == true ? 5 : 1))), "StoreId": storeData.StoreId, "VisitDate": d2 } + const url = props.baseurl + getMethodName(METHODS.CREATEJP_METHOD); + console.log(url, data); + await UploadData2(url, data) + .then(async (res) => { + console.log(res); + if (res != null && res != '' && res != '0' && parseInt(res) > 0) { + updateMID(res, loc);// update mid in db + } + else { + setProcessing(false); notify(ST.OopsSomethingwentwrongcannotcreateJCP, 'SHORT'); + } + + }) + .catch((err) => { + setProcessing(false); console.log(err); + }); + + } + async function updateMID(MID = 0, loc) { + try { + let JcpType = isBeatPlan == true ? 'JourneyPlan_RouteWise' : (isNonMerchan == true ? 'NonMerchandising_JourneyPlan' : isNonProg == true ? 'NonProgram_JourneyPlan' : 'Adhoc_JourneyPlan'); + + await db.transaction(async function (txn) { + let q = `UPDATE ${JcpType} SET MID='${MID}' WHERE StoreId='${storeData.StoreId}' `; + await txn.executeSql(q, [], async function (txn2, txnres2) { + console.log('mid updated', storeData.StoreId, MID); + let new_st = storeData; + new_st['MID'] = MID; + setStoreData(new_st); + uploadCheckIn(loc); + + }, function (Etxn, txnerr) { setProcessing(false); console.log(txnerr); }); + }); + } + catch (e) { + setProcessing(false); + notify(ST.CouldnotcreateJCP, 'SHORT'); + } + } + + + + + async function onStoreStatusUpdate(txnres2) { + setProcessing(false); + if (props.ShowStoreChecklist == true) { + props.navigation.replace('StoreChecklist', { storeData: storeData, 'isAdhoc': isAdhocScreen, 'isBeat': isBeatPlan, 'isNonMerchans': isNonMerchan, isNonProgs: isNonProg }); + } + else if (props.ShowCompactStoreProfile == true) { + props.navigation.replace('StoreProfileKyc', { storeData: storeData, 'isAdhoc': isAdhocScreen, 'isBeat': isBeatPlan, 'isNonMerchans': isNonMerchan, isNonProgs: isNonProg }); + } + else if (props.ShowStoreProfile == true) { + props.navigation.replace('StoreProfile', { storeData: storeData, 'isAdhoc': isAdhocScreen, 'isBeat': isBeatPlan, 'isNonMerchans': isNonMerchan, isNonProgs: isNonProg }); + } else if (props.ShowReportAfterCheckIn == true) { + props.navigation.replace('StoreReport', { storeData: storeData, 'isAdhoc': isAdhocScreen, 'isBeat': isBeatPlan, 'isNonMerchans': isNonMerchan, isNonProgs: isNonProg }); + } + else { + let allMenuList = await getMenuList(); + if (allMenuList.length > 0) { + props.navigation.replace('StoreDailyMenu', { storeData: storeData, 'isAdhoc': isAdhocScreen, 'isBeat': isBeatPlan, 'isNonMerchans': isNonMerchan, isNonProgs: isNonProg }); + } + else { + props.navigation.goBack(); + } + } + + } + + // **************************** download functionality start *********************************** + + + async function startRedownload1() { + notify(ST.CheckInDataUploadedsuccessfully, 'SHORT'); + if (DownloadTasks.length > 0 && (isAdhocScreen == true || isBeatPlan == true || isNonMerchan == true || isNonProg == true)) { + setStartDownload(true); + startRedownload(props, DownloadTasks, dowloadedCount, totalCount, setDowloadedCount, setTotalCount); + } + else { + onStoreStatusUpdate(); + } + } + + + + async function onDownloadComplete() { + setisDataDownloaded(true); + let count = dowloadedCount + 1; + setStartDownload(false); + setDowloadedCount(count); + notify(ST.DataDownloaded, 'SHORT'); + onStoreStatusUpdate(); + } + + // hide redownload modal and show error modal + async function showErrorModal(obj = {}) { + setDErrorMsg(obj); + setProcessing(false); + setStartDownload(false); // hide download modal + setshowDErrAlert(true); // show alert modal + } + + + async function checkAvailability(storeData1, data) { + + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + let q2 = getAvailblQuery(data.ScreenName, storeData1); + if (q2 != '' && q2 != null) { + + await txn.executeSql(q2, [], async function (txn2, txnres2) { + let isAvlbl = getIfAvlbl(data.ScreenName, txnres2, storeData1); + resolve(isAvlbl); + }, function (txnE, txnerr) { console.log(txnerr); resolve(false); },); + } + else { + let isAvlbl = getIfAvlbl(data.ScreenName, {}, storeData1); + resolve(isAvlbl); + } + }); + }).then((val) => { + return val; + }).catch((err) => { + console.log(err); + return false; + }); + } + + async function getMenuList() { + let { StoreId, ChannelId, RegionId, StoreTypeId } = storeData; + return new Promise((resolve, reject) => { + + db.transaction(async function (txn) { + let q = Q_MenuList(storeData); + await txn.executeSql(q, [], async function (txn2, txnres) { + if (txnres.rows.length > 0) { + let arr = [];//txnres.rows.raw(); + console.log('menulist on checkn:', arr); + // resolve(arr); + for (var i = 0; i < txnres.rows.length; i++) { + let data = txnres.rows.item(i); + arr.push(data); + if (i == (txnres.rows.length - 1)) { + resolve(arr); + } + } + } + else { + resolve([]) + } + }, function (txnE, txnerr) { console.log(txnerr); resolve([]); },); + }); + }).then((val) => { + return val; + }).catch((err) => { + console.log('') + return [] + }) + } + + + + function validate() { + let { lat, lng } = currentLocation; + if (lat == '' || lat == null) { + notify("Location not found", 'SHORT'); + return false; + } else if (lng == '' || lng == null) { + notify("Location not found", 'SHORT'); + return false; + } + return true; + } + + async function getImage(imgdata) { + if (typeof imgdata == 'object' && imgdata.errorCode == 'camera_unavailable') { + notify(ST.Cameraunavailable); + } + else if (typeof imgdata == 'object' && imgdata.uri != null) { + const img = imgdata; + const storeDataDetail = imgdata.storeData || {} + const imgurl = img.uri, imgWidth = img.width, imgHeight = img.ExtendedHeight; + let isImgFromGallery = img.fromGallery != null ? img.fromGallery : false; + let picture_clickedd = isImgFromGallery == true ? img.datetime : new Date(); + let picture_clicked_time = moment(picture_clickedd).format('MM-DD-YYYY HH:mm:ss') + let picture_clicked_time_for_pic_name = moment(picture_clickedd).format('MMDDYYYY_HHmmss') + console.log("time", picture_clicked_time); + console.log("time1", picture_clicked_time_for_pic_name); + + + let calculate_tym_date_for_filename = picture_clicked_time_for_pic_name; + let calculate_tym_date_over_img = picture_clicked_time; + + let filename = (props.UserId || '') + '_StoreImg-' + calculate_tym_date_for_filename + '.jpg'; + + const mark_text1 = calculate_tym_date_over_img; + const mark_text2 = ' User Id:' + storeDataDetail.EmpId + ' | Image Type: Check In' + ' | Date:' + calculate_tym_date_over_img; + + setStoreImage(filename); + let imagePath = `${CoverageImagePath}${filename}`; + console.log("checkin imgurl:", imgurl); + RNFS.copyFile(imgurl, imagePath) + .then(async (resn) => { + // render data with clicked image + let uri = 'file://' + imagePath; + setStoreImgPath(uri); + setSelectedImg(uri) + // add metdata then resize image and restored back to the imagePath + let restore_data = { "destFilePath": imagePath, "imgurl": imgurl, imgWidth, imgHeight, mark_text1, mark_text2 } + let is_restored = await restore_ImageWithMetaData(restore_data, imgdata); + console.log("image restored:", is_restored); + }).catch(err => { + console.log('ERROR: image file write failed!!!', err); + console.log(err.message, err.code); + }); + } + // setProcessing(false); + } + + async function openCamera() { + // setShowCamera(true); + props.navigation.navigate('CameraScreen', { 'getImage': getImage, 'cameraType': (props.CheckinOpenBackCamera ? 'back' : 'front'), 'CheckInCameraGallery': props.CheckInCameraGallery, storeData: storeData, enableCameraFlip: (props.CheckInSwitchingCamera ? true : false) }) + } + + + function animateMarkerToRegion(coords) { + const newCoordinate = coords; + if (Platform.OS === 'android') { + if (MyMarker) { + MyMarker.current.animateMarkerToCoordinate(newCoordinate, 1000); + } + } else { + // `useNativeDriver` defaults to false if not passed explicitly + markerCoordinate.timing({ ...newCoordinate, useNativeDriver: false, duration: 1000 }).start(); + } + setTimeout(() => { setMarkerCoordinate(coords); }, 1000); + + } + + async function setMarkerInfo(coords) { + if (MyMap.current != null) { + MyMap.current.addressForCoordinate(coords) + .then((res) => { + // console.log('res:',res); + let title = res.name; + let placeText = `${res.subLocality}, ${res.locality}, ${res.administrativeArea} ${res.postalCode}`; + setMarkerTitle(title); + setMarkerPlaceText(placeText); + + }) + } + } + + + + function _renderMap() { + const lat = currentLocation.lat ? currentLocation.lat : 28.579660; + const lng = currentLocation.lng ? currentLocation.lng : 77.321110; + + // const latt=storeData.Latitude?parseFloat(storeData.Latitude):lat; + // const long=storeData.Longitude?parseFloat(storeData.Longitude):lng; + + if (lat != null) { + return ( + + + + + + + + + + ); + } + else { + return ( + map not visible + ) + } + } + + + async function OpenImgModal(imgPath) { + setSelectedImg(imgPath) + setShowModal(true); + if ((imgPath != '' && imgPath != null)) { + setShowImageSaveOp(false); + } + else { + setShowImageSaveOp(true); + } + + + } + + function _OpenCaptureImage_Modal(img) { + const isImageCap = (img != '' || img != null) ? true : false; + let camera2Label = 'test'; + return ( + + { + isImageCap && + + + + + + { openCamera() }}> + + + + {!showImageSaveOp && + { cancelImage(false) }}> + {ST.Close} + + } + + } + + ) + } + + function _render_captureImage() { + const isImageAvlbl = StoreImage != '' && StoreImage != null && StoreImgPath != '' && StoreImgPath != null; + + return ( + + + { isImageAvlbl ? OpenImgModal(StoreImgPath) : openCamera() }}> + {!isImageAvlbl && } + {isImageAvlbl && } + + {/* {isImageAvlbl && } */} + {'Click Selfie'} + + + + ); + } + + function DownloadErrorAlert() { + + let { ErrorMsg, ErrorSubMsg, ErrorDetail } = DErrorMsg; + + return ( + + {ErrorDetail != null && ErrorDetail != '' && {ErrorDetail}} + + { setshowDErrAlert(false); props.navigation.goBack(); }}> + {'Ok'} + + + + ) + } + + const [locationdata, setLocationData] = useState({}) + const [locationdata2, setLocationData2] = useState({}) + + + + useEffect(() => { + Get_Location_Data(); + }, []) + + + // get data from Master_HomeLocation + + async function Get_Location_Data() { + try { + + let token = await get_item('loginToken'); + let loginInfo = await get_item('loginInfo'); + const loginDetails = JSON.parse(loginInfo); + let desg = loginDetails.Designation || ''; + + + await db.transaction(async function (txn) { + + let q = `SELECT * from Master_UserHomeLocation`; + await txn.executeSql(q, [], async function (txn2, txnres) { + if (txnres.rows.length > 0) { + let data = txnres.rows.item(0); + setLocationData(data); + // let arr=[]; + // for(var i=0;i 0) { + let data = txnres.rows.item(0); + let { LATITUDE, LONGITUDE, STATUS } = data; + let newObj = { LATITUDE: LATITUDE, LONGITUDE: LONGITUDE, Status: STATUS } + setLocationData2(newObj); + + // let arr=[]; + // for(var i=0;i { + console.log('res:', res); + if (res?.UploadJsonResult == "Success") { + await saveData(0, loc); + + // Get_Location_Data() + setProcessing(false); + notify('Home Location data upload successfully.') + props.navigation.goBack(); + } + else { + setProcessing(false); + } + }) + .catch((err) => { + console.log(err); setProcessing(false); + }); + } + + + async function onSubmitData() { + Keyboard.dismiss(); + setShowAlert(true); + } + + + function onSaveCancel() { + setShowAlert(false); + } + + + let { Latitude, Longitude } = locationdata + let { LATITUDE, LONGITUDE, Status } = locationdata2 + let latitude = (Number(Latitude) || Number(LATITUDE)) + + return ( + + {!startDownload && processing && } + {(startDownload && dowloadedCount <= totalCount) && } + + + + {ConfirmSaveAlert(props, showAlert, onSaveCancel, upload_StatusD)} + + {_OpenCaptureImage_Modal()} + {/* {setShowCamera(false);getImage(imgData)}} showCamera={showCamera} onHideCamera={()=>{setShowCamera(false);}}/> */} + + + + { + + + + { + // isCancelled.current==false && + _renderMap() + } + + + {/* locationdata?.LocationTaken == 1 && */} + + + { + (Boolean(latitude) || Status == "0") ? + + {`You have already marked location `} + : + (Status == "I" && + + {`Your location is not Uploaded on sever`} + + ) + } + + {locationdata?.LocationTaken == 1 && Status != "0" && + + // submitCheckIn() + onSubmitData() + } /> + } + + + + + } + + + + + ); +} + + + +export default connect(mapStateToProps, mapDispatchToProps)(StoreCheckin); \ No newline at end of file diff --git a/PerformicsSrc/src/screens/IRPendingDetails.js b/PerformicsSrc/src/screens/IRPendingDetails.js new file mode 100644 index 0000000..53d1c1f --- /dev/null +++ b/PerformicsSrc/src/screens/IRPendingDetails.js @@ -0,0 +1,574 @@ +import React,{useState,useEffect, useRef} from 'react'; +import Container from '../components/container'; +import { useRoute } from '@react-navigation/native'; +import { globalStyles,customStyles,GetPageTheme } from "../styles/Global"; +import {StatusBar,Image,TextInput,View,Text,ScrollView,TouchableOpacity,Platform,PermissionsAndroid,FlatList, DeviceEventEmitter} from 'react-native'; +import { ReactReduxContext,connect,useSelector, useDispatch } from 'react-redux'; +import { mapStateToProps,mapDispatchToProps } from '../reducers/contextProvider'; +import SQLite from 'react-native-sqlite-2'; +import {notify} from '../components/notify'; +import moment from 'moment'; +import {getDownloadJson,DownloadData, getIRPendingSessionCount, UploadData2} from '../controller/functions'; +import {get_item,set_item,clear_item} from '../components/localStorage'; +import {version,sloganline,appname,testurl, db} from '../constants/constants'; +import CustomHeader from '../components/customHeader'; +import {Card} from 'react-native-paper'; +import {AntDesign, Ionicons} from '../components/icons'; +import { WebView } from 'react-native-webview'; +import CustomLoader from '../components/CustomLoader'; +import NoDataComponent from '../components/NoDataComponent'; +import LinearGradient from 'react-native-linear-gradient'; +import { getPendingIRImagesDetails,getPendingIRImages, SyncIRsessions } from '../constants/uploadData'; +import IRLogin from '../components/IRLogin'; +import { AppName, PerformicsIRAppName } from '../../../AppSpecificContant'; +import DownloadDataModal from '../components/downloadDataModal'; +import { METHODS, getMethodName } from '../constants/methodNames'; +import { AppTables } from '../constants/tableConstants'; + +function IRPendingDetails(props) { + const route = useRoute(); + const ST=props.StaticText || {}; + // get all theme styles acc to current theme set + const PageTheme=GetPageTheme(props.DarkMode,route.name); + const customStyle=customStyles(props.DarkMode,route.name); + + const [webviewurl, setWebviewurl] = useState(false); + const [processing, setProcessing] = useState(true); + const [isDataFound, setisDataFound] = useState(false); + const [reportData, setReportData] = useState([]); + const [designation, setDesignation] = useState(''); + const [rerender, setrerender] = useState(0); + + // IR Upload states + const [uploadedCount, setUploadedCount] = useState(0); + const [TotalUpCount, setTotalUpCount] = useState(0); + const [startUploading, setStartUploading] = useState(false); + const [UploadingSubText, setUploadingSubText] = useState(""); + const [UploadingText, setUploadingText] = useState("Uploading Data..."); + const [showProgresssBar, setshowProgresssBar] = useState(false); + const [subTextStyle, setSubTextStyle] = useState(''); + const [showOkButtonOnUpload, setShowOkButtonOnUpload] = useState(false); + + const sessionsToUpload=useRef([]); + const sessionsUploadedCount=useRef(0); + const sessionsReceived=useRef(0); + + const d1=new Date(); + const d2=moment(d1).format('MM/DD/YYYY'); + + useEffect(() => { + getData(); + + const removeIRListener=DeviceEventEmitter.addListener('onPendingSingle_IRImageUpload',(data)=>{ onIRImageUpload(data)}); + + return function cleanup() { + if(props.IR_CameraEnableOnApp==true){ + IRLogin.deRegisterReceiver(); + } + removeIRListener.remove(); + }; + }, []); + + + async function getData(){ + try { + + let allPendingImagesList=await getPendingIRImages(props); + setReportData(allPendingImagesList); + setProcessing(false); + setisDataFound(true); + console.log("allPendingImagesList",allPendingImagesList); + + // db.transaction(async function (txn) { + // await txn.executeSql(`update ${AppTables.SOS_IRUPLOAD} set SYNC_STATUS='Failed' `,[],async function (txn2, txnres) { + // console.log("updated SYNC_STATUS"); + // },function (txnE,txnerr) { console.log(txnerr);resolve(sessionListWithDetails);},); + // await txn.executeSql(`update ${AppTables.WINDOW_IRUPLOAD} set SYNC_STATUS='Failed' `,[],async function (txn2, txnres) { + // console.log("updated SYNC_STATUS PV"); + // },function (txnE,txnerr) { console.log(txnerr);resolve(sessionListWithDetails);},); + // }); + + } catch (err) { + setProcessing(false); + console.log(err); + } + } + + function gotoReport(item){ + props.navigation.navigate('ReportDetail',{'ReportData':item}) + } + + + async function UpdateUploadCountLocal(upCount){ + // keep 1 less to actual count as DownloadDataModal shows it as provided_value+1 + setUploadedCount(upCount-1); + } + + // Start uploading IR sessions for particular store + async function uploadIRSession(item){ + let {StoreId,VisitDate,SessionCount,ImageCount,TableName1,TableName2,ScreenName,StoreCode,StoreName,MenuName }=item + setStartUploading(true); + + // function to stop uploading and hide upload modal + function stopUploading(){ + setStartUploading(false); + } + + + // start IR Upload + UpdateUploadCountLocal(0); // set uploaded count in progress bar to zero as IR session upload is just started + setTotalUpCount(0);// set Total uploaded count to 0 + setshowProgresssBar(false); + setUploadingSubText(''); + setUploadingText('Syncing IR Sessions Status...'); + sessionsToUpload.current=[]; + sessionsReceived.current=0; + sessionsUploadedCount.current=0; + let sync_result=await SyncIRsessions(props,"3",true,item); + let {isUploadStarted,noDataFound,AllDataUploaded,success,sessionList,sessionListWithDetails}=sync_result; + + if(!success){ + notify('Cannot Upload Data! Something went wrong.'); + stopUploading(); + } + else{ + if(noDataFound){ + notify('No session to upload!'); + stopUploading(); + } + else{ + if(!isUploadStarted && AllDataUploaded){ + notify('All images synced! No session to upload.'); + stopUploading(); + }else if(isUploadStarted){ + + sessionsToUpload.current=sessionListWithDetails; + console.log("UploadStarted",sessionsToUpload.current.length); + UpdateUploadCountLocal(0); // set uploaded count in progress bar to zero as IR session upload is just started + setTotalUpCount(sessionsToUpload.current.length-1); // set Total Upload Count to IR Session Counts + setshowProgresssBar(true); + setUploadingSubText('Uploading IR Sessions'); + setUploadingText('Uploading IR Sessions Data...'); + //set a timeout for session uploading: if no response get from receiver for particular session + for(let i=0;i{ + + let timerSessI=sessionsToUpload.current.findIndex(i=>i.TEMP_SESSION_ID==TEMP_SESSION_ID); + let timerSessObj=timerSessI>=0?sessionsToUpload.current[timerSessI]:{}; + + if(timerSessObj.IRStatusReceived!=null && timerSessObj.IRStatusReceived===true){ + console.log("Session is already uploaded") + } + else{ // upload local timout message and move loading to next step after 60 sec if no response received from server + let udata={"message": "Session Upload Timeout", "sessionId": TEMP_SESSION_ID, "status": "local"} + // let udata={"message": "Session Uploaded Test", "sessionId": TEMP_SESSION_ID, "status": "200"} + await onIRImageUpload(udata); + } + },60*1000); + } + } + } + } + } + + async function onIRImageUpload(data){ + console.log('onPendingSingle_IRImageUpload on receive in STorelist',data); + let {message,sessionId,status}=data; + let snum=sessionsReceived.current+1; + let su_num=sessionsUploadedCount.current; + sessionsReceived.current=snum; + + + + let sessionIndex=sessionsToUpload.current.findIndex(i=>i.TEMP_SESSION_ID==sessionId); + let sessionObj=sessionIndex>=0?sessionsToUpload.current[sessionIndex]:{}; + console.log('onPendingSingle_IRImageUpload on receive in sessionObj',sessionId,sessionObj); + let TableName1=sessionObj['TableName1'] || ''; + let TableName2=sessionObj['TableName2'] || ''; + let StoreId=sessionObj['StoreId'] || ''; + let StoreName=sessionObj['StoreName'] || ''; + + let IRCategoryName=sessionObj["IRCategoryName"] || ''; + let IRTaskName=sessionObj["IRTaskName"] || ''; + let IRPhotoType=sessionObj["IRPhotoType"] || ''; + let IRStoreCode=sessionObj["IRStoreCode"] || ''; + let ScreenName=sessionObj["ScreenName"] || ''; + let VisitDate=sessionObj["VisitDate"] || ''; + let IRDetails={IRCategoryName,IRTaskName,IRPhotoType,IRStoreCode,ScreenName} + + // if any status for the given session is recieved then we don't need to run timer and send local timout for that session + // so update its IRStatusReceived to true + sessionObj.IRStatusReceived=true; + sessionsToUpload.current[sessionIndex]=sessionObj; + + // check if session is uploaded then upload its logs + if(status!=null && status=='200' && sessionId!=null && sessionId!=''){ + sessionsUploadedCount.current=++su_num; + console.log("total uploaded count su_num:",su_num); + // update session uploaded count + UpdateUploadCountLocal(su_num); + + let UnSessionId=await IRLogin.getDataIRSession(sessionId); + if(UnSessionId!=null && UnSessionId!=''){ + + + let isUpdated=await UpdateIRUploadStatus(sessionId,UnSessionId,TableName1,TableName2,StoreId,IRDetails); + let isUploaded=await LogImageUpload(sessionId,UnSessionId,message,status,StoreId,StoreName,TableName1,TableName2,IRDetails); + if(isUploaded){ + console.log('Image Uploaded'); + notify("Images Log uploaded for session:"+sessionId); + } + else{ + console.log('cannot Uploaded image'); + notify("cannot upload log for session:"+sessionId); + } + } + else{ + notify("Cannot upload images for session:"+sessionId+". Universal Id not found"); + let isUploaded=await LogImageUpload(sessionId,"",message,status,StoreId,StoreName,TableName1,TableName2,IRDetails); + if(isUploaded){ + console.log('Image Uploaded'); + notify("Images Log uploaded for session:"+sessionId); + } + else{ + console.log('cannot Uploaded image'); + notify("cannot upload log for session:"+sessionId); + } + } + + } + else{ + notify((message!=null && message!=""?message+". ":"")+"Cannot upload images for session:"+sessionId); + let isUploaded=await LogImageUpload(sessionId,"",message,status,StoreId,StoreName,TableName1,TableName2,IRDetails); + if(isUploaded){ + console.log('Image Uploaded'); + notify("Images Log uploaded for session:"+sessionId); + } + else{ + console.log('cannot Uploaded image'); + notify("cannot upload log for session:"+sessionId); + } + + } + + console.log("check snum and su_num:",snum,su_num,sessionsToUpload.current.length); + + let popupMsg=""; + let subTstyle={}; + let isUploaded=false; + // All IR Sessions with Images Uploaded : set DataUploaded Status to U (Fully Upload) + if(su_num==sessionsToUpload.current.length){ + // setProcessing(false); + // setStartUploading(false); + popupMsg="All IR images uploaded!"; + subTstyle={color:'green'}; + + notify("All IR images uploaded!"); + console.log('set all uploaded true to U'); + isUploaded=true; + } + // Some Of IR Sessions with Images Uploaded but some are yet pending : set DataUploaded Status to P (Partial Upload) + else if(su_num>0 && su_num!=sessionsToUpload.current.length){ + // setProcessing(false); + popupMsg=`${su_num} out of ${sessionsToUpload.current.length} IR Sessions uploaded! Please Retry`; + subTstyle={color:'red'}; + notify("Uploading IR Sessions!"); + console.log('set all uploaded true to P'); + } + else if(su_num==0){ + subTstyle={color:'red'}; + popupMsg=`${su_num} out of ${sessionsToUpload.current.length} IR Sessions uploaded! Please Retry`; + } + + console.log("IR Session received ",snum) + + + + // if last broadcast received either uploaded or not, update the processing status to false + if(snum==sessionsToUpload.current.length){ + setProcessing(false); + // ---------- stop upload on Ok click (OnOKClick) of popup message ------------ + // show ok button popup on upload success + setshowProgresssBar(false); + setUploadingSubText(popupMsg); + setSubTextStyle(subTstyle); + setShowOkButtonOnUpload(true); + + // update IR session upload status to local list of Pending IR + + let alldata=reportData; + let store_objI=alldata.findIndex((i)=>{return (i.StoreId==StoreId && i.ScreenName==ScreenName && i.VisitDate==VisitDate)}); + console.log("store_objI",store_objI,StoreId,ScreenName); + + if(store_objI>=0){ + let store_obj=alldata[store_objI]; + console.log("store_obj data",store_obj); + + store_obj["IRUploadedCount"]=su_num; + store_obj["isUploaded"]=isUploaded; + alldata[store_objI]=store_obj; + setReportData(alldata); + setrerender(!rerender); + } + console.log('Deregister event when last received'); + IRLogin.deRegisterReceiver(); + } + } + + async function OnOKClick(){ + // stop uploading and hide upload modal + setStartUploading(false); // hide upload modal + setUploadingSubText(''); // then clear upload modal subtext + setTotalUpCount(0); // clear tortal upload count + UpdateUploadCountLocal(0); // clear uploaded count + setShowOkButtonOnUpload(false); // hide ok button + setSubTextStyle(''); // remove style of subtext in uploading modal + + } + + + async function UpdateIRUploadStatus(TempSessionId,UnSessionId,TableName1,TableName2,StoreId,IRDetails){ + console.log("UpdateIRUploadStatus"); + // TableName1: IR Upload Table for KPI + // TableName2: IR Images Table for KPI + return new Promise((resolve,reject)=>{ + if(TableName1!=null && TableName2!=null && TableName1!='' && TableName2!='') + { + db.transaction(async function (txn) { + + let q=`Update ${TableName1} set UN_SESSION_ID='${UnSessionId}',UPLOAD_STATUS='1',SYNC_STATUS='Synced' where TEMP_SESSION_ID='${TempSessionId}' and STORE_ID='${StoreId}' `;//VISIT_DATE='${d2}' + await txn.executeSql(q,[],async function (txn2, txnres) { + console.log('Updated IR Upload Status',q); + let q2=`Update ${TableName2} set UN_SESSION_ID='${UnSessionId}' where TEMP_SESSION_ID='${TempSessionId}' and STORE_ID='${StoreId}' `;//VISIT_DATE='${d2}' and + await txn.executeSql(q2,[],async function (txn2, txnres2) { + console.log('Updated IR Image Status',q2); + resolve(true); + },function (txnE,txnerr) { console.log(txnerr);resolve(false); },); + + },function (txnE,txnerr) { console.log(txnerr);resolve(false); },); + }); + } + else{ + resolve(false); + } + }).catch((Err)=>{ + console.log('Error in UpdateIRUploadStatus:',Err); + return false; + }) + + + + } + + async function LogImageUpload(TempSessionId,UnSessionId,message,status,StoreId,StoreName,TableName1,TableName2,IRDetails={}){ + let {IRCategoryName,IRTaskName,IRPhotoType,IRStoreCode,ScreenName}=IRDetails + const url=props.baseurl+getMethodName(METHODS.UPLOADJSON_METHOD); + const nowTime=moment().format('HH:mm:ss'); + let ImageCount=await getImageCount(TempSessionId,TableName2); + + ////Replaced special charecter and white space + let storeTittle = StoreName.replace(`@!%&`, '').replace(' ', '-'); + console.log("storeTittle:",storeTittle,StoreName); + let d1=new Date(); + let d2=moment(d1).format('MM/DD/YYYY'); + + let obj={}; + obj['StoreId']=StoreId; + obj['Username']=props.UserId; + obj['VisitDate']=d2; + obj['InTime']=nowTime; + obj['TempSessionId']=TempSessionId; + obj['UnSessionId']=UnSessionId; + obj['Status']=status; + obj['Message']=message; + obj['ImageCount']=ImageCount; + obj['StoreTitle']=storeTittle; + obj['StoreCode']=IRStoreCode; + obj['TaskName']=IRTaskName; + obj['CategoryName']=IRCategoryName; + obj['PhotoType']=IRPhotoType; + obj['KPIType']=""; + obj['ScreenName']=ScreenName; + obj['UploadType']="New"; + + + let postData={}; + postData['MID']=0; + postData['Keys']='IR_UPLOAD_LOG_MSG'; + postData['JsonData']=JSON.stringify(obj); + postData['UserId']=props.UserId; + + console.log('postData',postData); + + return await UploadData2(url,postData) + .then((res)=>{ + if(res.UploadJsonResult!=null && res.UploadJsonResult=='Success'){ + return true; + } + return false; + }) + .catch((err)=>{ + console.log(err); + return false; + }); + } + + async function getImageCount(TempSessionId,TableName2){ + console.log('getImageCount'); + return new Promise((resolve,reject)=>{ + + if(TableName2!=null && TableName2!=''){ + db.transaction(async function (txn) { + + let q=`select DISTINCT TEMP_SESSION_ID,count(IMAGE1) as ImageCount from ${TableName2} where TEMP_SESSION_ID='${TempSessionId}' group by TEMP_SESSION_ID `;//VISIT_DATE='${d2}' and + + await txn.executeSql(q,[],async function (txn2, txnres) { + console.log('ImageCount rows:',txnres.rows.length); + if(txnres.rows.length>0){ + let data =txnres.rows.item(0); + console.log('data:',data) + console.log('Image Count for TempSessionId:',data.ImageCount); + resolve(data.ImageCount); + } + else{ + resolve(0); + } + + },function (txnE,txnerr) { console.log(txnerr);resolve(0); },); + }); + } + else{ + resolve(false); + } + }).catch((Err)=>{ + console.log('Error in getImageCount:',Err); + return 0; + }) + + + + } + + return ( + + {processing && } + {(startUploading) && } + + + + + + + {"IR Pending Images Details"} + + + + { !props.isDataDownloaded && } + { props.isDataDownloaded==true && + + + { isDataFound==false && + + {ST.NoDataAvailable} + + } + + { + isDataFound==true && + + + { + reportData.length>0 && rerender==rerender && + reportData.map((item,index)=>{ + let IRUploadedCount=item.IRUploadedCount!=null && item.IRUploadedCount!=''? parseInt(item.IRUploadedCount):0; + let isUploaded=item.isUploaded!=null && item.isUploaded!=''? item.isUploaded:false; + return( + + + + + {item.StoreId} + + + + {item.StoreName!=null && + + + {item.StoreName} + + + } + + + {'KPI Name:'} + {item.MenuName} + + + + + {'Visit Date:'} + {item.VisitDate} + + + + + {'Pending Images Count:'} + {item.ImageCount} + + + + + {'Pending Sessions Count:'} + {item.SessionCount} + + + {isUploaded==false && IRUploadedCount!=null && IRUploadedCount>0 && + + + {`${IRUploadedCount} out of ${item.SessionCount} IR Sessions Uploaded. !!`} + + + } + {isUploaded==true && + + + {`All Uploaded`} + + } + + + {isUploaded==false && + + + {uploadIRSession(item)}}> + {"Upload IR Session"} + + + + } + + + ) + }) + } + + + } + + + } + + + + + ); + } + + + +export default connect(mapStateToProps, mapDispatchToProps)(IRPendingDetails); \ No newline at end of file diff --git a/PerformicsSrc/src/screens/KPICategories.js b/PerformicsSrc/src/screens/KPICategories.js new file mode 100644 index 0000000..857cc1d --- /dev/null +++ b/PerformicsSrc/src/screens/KPICategories.js @@ -0,0 +1,802 @@ +import React, { useState, useEffect } from 'react'; +import Container from '../components/container'; +import { useRoute } from '@react-navigation/native'; +import { globalStyles, customStyles, GetPageTheme } from "../styles/Global"; +import { StatusBar, Image, TextInput, View, Text, ScrollView, TouchableOpacity, Platform, PermissionsAndroid, FlatList, Alert, KeyboardAvoidingView, BackHandler, Keyboard } from 'react-native'; +import { ReactReduxContext, connect, useSelector, useDispatch } from 'react-redux'; +import { mapStateToProps, mapDispatchToProps } from '../reducers/contextProvider'; +import { notify } from '../components/notify'; +import moment from 'moment'; +import { get_item, set_item, clear_item } from '../components/localStorage'; +import { version, sloganline, appname, testurl, db, colors_Arr, common_ImagePath, HierarchyTbls } from '../constants/constants'; +import CustomHeader from '../components/customHeader'; +import { AntDesign } from '../components/icons'; +import CustomLoader from '../components/CustomLoader'; +import LinearGradient from 'react-native-linear-gradient'; +import { AppTables } from '../constants/tableConstants'; +import { getKPIFields, goToMenuPage } from '../controller/functions'; +import { getProgramChecklistAvailableQ } from '../constants/ConstantQueries'; +import GreyBgImage from '../assets/performics/circle_grey.svg'; + + +function KPICategories(props) { + const route = useRoute(); + const ST = props.StaticText || {}; + + // get all theme styles acc to current theme set + const PageTheme = GetPageTheme(props.DarkMode, route.name); + const customStyle = customStyles(props.DarkMode, route.name); + + const [processing, setProcessing] = useState(true); + const [loaderTitle, setLoaderTitle] = useState('loading...'); + const [isAdhocScreen, setIsAdhocScreen] = useState(false); + const [isNonMerchan, setIsNonMerchan] = useState(false); + const [isNonProg, setIsNonProg] = useState(false); + const [isStoreSearch, SetIsStoreSearch] = useState(false); + const [isBeatPlan, setIsBeatPlan] = useState(false); + const [storeData, setStoreData] = useState({}); + const [currentMenu, setCurrentMenu] = useState({}); + const [ScreenName, setScreenName] = useState(""); + const [BgNav, setBgNav] = useState(false); + const [BgNavData, setBgNavData] = useState({}); + const [KPIFields, setKPIFields] = useState([]); + const [productCats, setProductCats] = useState([]); + const [rerenderdata, setrerenderdata] = useState(0); + const [loadedCatCount, setloadedCatCount] = useState(0); + const [doneCatCount, setdoneCatCount] = useState(0); + + const [showAlert, setShowAlert] = useState(false); + + const [hasUnsavedChanges, setHasUnsavedChanges] = useState(false); + const [showCamera, setShowCamera] = useState(false); + const [getImageProps, setGetImageProps] = useState({}); + const [Hdrname, setHdrname] = useState(""); + const [ColId, setColId] = useState(""); + const [ColName, setColName] = useState(""); + const [CardViewEnable, setCardViewEnable] = useState(false); + const [CardViewConfig, setCardViewConfig] = useState({}); + + const d1 = new Date(); + const d2 = moment(d1).format('MM/DD/YYYY'); + + useEffect(() => { + let params = props.route.params ? props.route.params : {}; + let storeData1 = params.storeData || {}; + let menu1 = params.menu || {}; + let isAdhoc = params.isAdhoc || false; + let isBeat = params.isBeat != null ? params.isBeat : false; + let isNonMerchan1 = params.isNonMerchans != null ? params.isNonMerchans : false; + let isNonProgam = params.isNonProgs != null ? params.isNonProgs : false; + let isStoreSearch = params.isStoreSearch != null ? params.isStoreSearch : false; + let screenname1 = params.screenname != null ? params.screenname : ""; + let BgNav1 = params.redirect != null ? params.redirect : false; + let BgNavData1 = params.BgNavData != null ? params.BgNavData : {}; + + setIsAdhocScreen(isAdhoc); + setIsBeatPlan(isBeat); + setIsNonMerchan(isNonMerchan1) + setIsNonProg(isNonProgam) + SetIsStoreSearch(isStoreSearch) + setStoreData(storeData1); + setCurrentMenu(menu1); + setScreenName(screenname1); + setBgNav(BgNav1); + setBgNavData(BgNavData1); + getData(storeData1, menu1, screenname1, BgNav1, BgNavData1, isAdhoc, isBeat, isNonMerchan1, isNonProgam, isStoreSearch); + const unsubscribe = props.navigation.addListener('beforeRemove', onBeforeRemove); + const willFocusSubscription = props.navigation.addListener('focus', () => { + getData(storeData1, menu1, screenname1, BgNav1, BgNavData1, isAdhoc, isBeat, isNonMerchan1, isNonProgam, isStoreSearch); + }); + + return function cleanup() { + return unsubscribe; + return willFocusSubscription + }; + + }, []); + + useEffect(() => { + const unsubscribe = props.navigation.addListener('beforeRemove', onBeforeRemove); + return unsubscribe; + }, [hasUnsavedChanges]); + + useEffect(() => { + const unsubscribe = props.navigation.addListener('beforeRemove', onBeforeRemove); + return unsubscribe; + }, [showCamera]); + + function onBeforeRemove(e) { + if (showCamera == true) { + e.preventDefault(); + setShowCamera(false); + } + else { + if (hasUnsavedChanges == true) { + e.preventDefault(); // Prevent default behavior of leaving the screen + onRemoveScreen(e); + } + else { + return; + } + } + } + + function onRemoveScreen(e) { + Alert.alert( + "", + "Do you really want to exit the screen?", + [ + { + text: "Cancel", + onPress: () => { }, + style: "cancel" + }, + { text: "OK", onPress: () => { setHasUnsavedChanges(false); props.navigation.dispatch(e.data.action); } } + ] + ); + } + + + + async function getData(storeData1, menu1, screenname1, BgNav1, BgNavData1, isAdhoc, isBeat, isNonMerchan1, isNonProgam, isStoreSearch) { + setLoaderTitle("Loading...") + // setProcessing(true); + try { + let { StoreId, ChainId, StateId, StoreTypeId, StoreClassId, StoreCategoryId } = storeData1; + let { PSAllow, PSTableName, MenuId } = menu1; + PSTableName = PSTableName != null ? PSTableName : ''; + PSAllow = PSAllow != null ? PSAllow : false; + // check if Bg save Data exists the pass it to the page + let windData = await get_item('storeData'); + console.log("windData in KPI Categories:", PSAllow, windData); + let isBgDataExists = false; + let BGCatData1 = {}; + if (windData != null && windData != '') { + let StoreJson = JSON.parse(windData) + let { storeBGData, menuName, StoreId1, visiteDate, BGPSAllow, PSGroupData } = StoreJson + if (storeBGData.length > 0 && menuName == menu1.ScreenName && StoreId1 == StoreId && visiteDate == d2 && BGPSAllow && PSGroupData != null && PSGroupData != '') { + // check if bg data exists for particular category + isBgDataExists = true; + BGCatData1 = PSGroupData; + } + } + + let AllKPIFields = await getKPIFields(menu1); + setKPIFields(AllKPIFields); + let HdrName1 = (PSTableName.toLowerCase() == HierarchyTbls.Master_SubCategory.toLowerCase() ? 'Sub Categories' : (PSTableName.toLowerCase() == HierarchyTbls.Master_Brand.toLowerCase() ? 'Brands' : 'Categories')); + setHdrname(HdrName1); + // Forward to menu screen if Partial Save is not allowed + if (!PSAllow || PSTableName == '') { + let obj = { props, 'storeData': storeData1, 'screenname': screenname1, 'MenuItem': menu1, 'BgNav': BgNav1, 'BgNavData': BgNavData1, 'isAdhocScreen': isAdhoc, 'isBeatPlan': isBeat, 'isNonMerchan': isNonMerchan1, 'isNonProg': isNonProgam, 'isStoreSearch': isStoreSearch } + goToMenuPage(obj); + } + + let orderBy = '', idCol = '', nameCol = ''; + if (PSTableName.toLowerCase() == HierarchyTbls.Master_SubCategory.toLowerCase()) { + idCol = 'SubCategoryId', nameCol = 'SubCategoryName'; + orderBy = ' p.SubCategorySequence '; + } + else if (PSTableName.toLowerCase() == HierarchyTbls.Master_Brand.toLowerCase()) { + idCol = 'BrandId', nameCol = 'BrandName'; + orderBy = ' p.BrandSequence '; + } + else if (PSTableName.toLowerCase() == HierarchyTbls.Master_Product.toLowerCase()) { + idCol = 'ProductId', nameCol = 'ProductName'; + orderBy = ' p.ProductSequence '; + } else if (PSTableName.toLowerCase() == HierarchyTbls.Master_Program.toLowerCase()) { + idCol = 'ProgramId', nameCol = 'ProgramName'; + orderBy = ' p.ProgramName '; + } + else { + idCol = 'CategoryId', nameCol = 'CategoryName'; + orderBy = ' p.CategorySequence '; + } + + let q = await getFilterQuery(storeData1, menu1, idCol, nameCol, orderBy, AllKPIFields); + console.log("kpiCatQ",q) + await db.transaction(async function (txn) { + let q6 = `SELECT * from Menu_Master Where MenuId='${MenuId}'` + await txn.executeSql(q6, [], async function (txn2, txnres2) { + console.log('filters len:', txnres2.rows.length) + let carView = true + if (txnres2.rows.length > 0) { + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + carView = data?.InnerScreenView == "Tile" + if (i == txnres2.rows.length - 1) { + setCardViewConfig(data) + setCardViewEnable(carView) + + } + } + + } else { + setProcessing(false); + } + }, function (txnE, txnerr) { console.log(txnerr); setProcessing(false); },); + await txn.executeSql(q, [], async function (txn2, txnres2) { + console.log('filters len:', txnres2.rows.length) + if (txnres2.rows.length > 0) { + let arr = []; + let doneCount = 0; + let isbgCatExists = false; + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + let isDone = await isCatDone(storeData1, menu1, data, idCol, nameCol, AllKPIFields); + data['isDone'] = isDone; + if (isDone) { + doneCount++; + } + + if (isBgDataExists) { // check only if bgdata exists + console.log("BGCatData1[idCol]:", BGCatData1[idCol], data[idCol]) + if (data[idCol] == BGCatData1[idCol]) { // check if bg cat really exists + isbgCatExists = true; + } + } + + arr.push(data); + if (i == txnres2.rows.length - 1) { + setColId(idCol); + setColName(nameCol); + setProductCats(arr); + // redirect to the page if bg Data exists for particular category + // check if the bgGroupdata ie. categoryID/subCategoryID/BrandID does really exists or not + // if yes the redirect + // else not + console.log("isBgDataExists:", isBgDataExists, isbgCatExists) + if (isBgDataExists && isbgCatExists) { + let obj = { props, 'storeData': storeData1, 'screenname': screenname1, 'MenuItem': menu1, 'ShowCatWise': true, 'CatData': BGCatData1, 'BgNav': BgNav1, 'BgNavData': BgNavData1, 'isAdhocScreen': isAdhoc, 'isBeatPlan': isBeat, 'isNonMerchan': isNonMerchan1, 'isNonProg': isNonProgam, 'isStoreSearch': isStoreSearch } + goToMenuPage(obj); + } + + //set cat done/loadded count + setloadedCatCount(txnres2.rows.length); + setdoneCatCount(doneCount); + + setProcessing(false); + } + } + + } else { + setProcessing(false); + } + }, function (txnE, txnerr) { console.log(txnerr); setProcessing(false); },); + + + }); + } catch (err) { + console.log(err); + } + } + + async function getFilterQuery(storeData1, menu1, idCol, nameCol, orderBy, AllKPIFields = []) { + let { StoreId, ChainId, StateId, StoreTypeId, StoreCategoryId, StoreClassId } = storeData1; + let { ScreenName, MenuId } = menu1; + + let isSpecificMapIndex = AllKPIFields.findIndex(i => i.KPIFieldName == 'SpecificMapping') + let isSpecificMapKPIObj = isSpecificMapIndex >= 0 ? AllKPIFields[isSpecificMapIndex] : {}; + let isSpecificMappingEnable = isSpecificMapIndex >= 0 ? isSpecificMapKPIObj['KPIFieldEnable'] : false; + + let sosCheckAssortmentI = AllKPIFields.findIndex(i => i.KPIFieldName == 'SOSCheckAssortment') + let sosCheckAssortmentObj = sosCheckAssortmentI >= 0 ? AllKPIFields[sosCheckAssortmentI] : {}; + let sosCheckAssortment = sosCheckAssortmentI >= 0 ? sosCheckAssortmentObj['KPIFieldEnable'] : false; + + let COMPStockAllow_Index = AllKPIFields.findIndex(i => i.KPIFieldName == 'COMPStockAllow' && i.ScreenName == ScreenName); + let COMPStockAllow_Obj = COMPStockAllow_Index >= 0 ? AllKPIFields[COMPStockAllow_Index] : {}; + let isCOMPStockAllow = COMPStockAllow_Index >= 0 ? COMPStockAllow_Obj['KPIFieldEnable'] : false; + + let ShowCompetionSku = AllKPIFields?.findIndex((i) => i.KPIFieldName == "ShowCompetionSku"); + let ShowCompetionObj = ShowCompetionSku >= 0 ? AllKPIFields[ShowCompetionSku] : {}; + let ShowCompetionSkuNo = ShowCompetionObj?.KPIFieldDisplayName || 0 + let ShowCompetionSkuNoSplitArr = ShowCompetionObj?.KPIFieldDisplayName?.split(",") || [] + const isCompetitorValues = ShowCompetionSkuNoSplitArr; + console.log('iscompetitorValuesKPICat', isCompetitorValues) + + // Check if isCompetitorValues is empty, null, or undefined + let isCompetitorClause = !isCompetitorValues || isCompetitorValues.length === 0 ? "p.IsCompetitor = 0" : `p.IsCompetitor IN (${isCompetitorValues.join(",")})`; + console.log("checkiscpmpKPICat--", isCompetitorClause, ScreenName) + + + let d1 = new Date(); + let d2 = moment(d1).format('MM/DD/YYYY'); + + let q = ``, join = '', join2 = '', join3 = '', WindData = {}, joinKey = ''; + switch (ScreenName) { + case 'STOCK': + join = ` INNER join Mapping_ProductAssortmentStorewise mp on p.ProductId=mp.ProductId `; + q = `SELECT DISTINCT p.${idCol},p.${nameCol} ,p.CategoryId as CatId from Product_Master p ${join} where mp.StoreId='${StoreId}' ${(isCOMPStockAllow == true ? '' : ` and ${isCompetitorClause}`)}`; + q += ` order by ${orderBy}`; + return q; + case 'PROMOTIONONEAPP': + WindData = await getWindowFilterFields(storeData1, 'Master_PromotionDefinition', 'Mapping_StorePromotion', 'PromoDefinitionId', 'PromoDefinitionId', 'PromoTable'); + WindData = WindData != null ? WindData : {}; + joinKey = WindData['filterIdsCol'] != null ? WindData['filterIdsCol'] : ''; + console.log('joinKey:', joinKey); + join = ` INNER join Master_PromotionDefinition d on p.${joinKey}=d.PromoValue `; + join2 = ` INNER join Mapping_StorePromotion md on d.PromoDefinitionId=md.PromoDefinitionId `; + q = `select DISTINCT p.${idCol},p.${nameCol} from Product_Master p ${join} ${join2} where md.StoreId='${StoreId}' `; + q += ` order by ${orderBy}`; + console.log("PROMOTIONONEAPP:", q); + return q; + case 'SOSONEAPP': + WindData = await getWindowFilterFields(storeData1, 'Master_ShareOfShelfDefinition', 'Mapping_StoreShareOfShelf', 'SOSDefinitionId', 'SOSDefinitionId', 'SOSHeaderTable'); + WindData = WindData != null ? WindData : {}; + joinKey = WindData['filterIdsCol'] != null ? WindData['filterIdsCol'] : ''; + join = ` INNER join Master_ShareOfShelfDefinition d on p.${joinKey}=d.SOSHeaderValue `; + join2 = ` INNER join Mapping_StoreShareOfShelf md on d.SOSDefinitionId=md.SOSDefinitionId `; + if (sosCheckAssortment) { + join3 = ` INNER JOIN (select * from Mapping_ProductAssortmentStorewise mp + where mp.StoreId='${StoreId}') mp1 + on p.ProductId=mp1.ProductId `; + } + q = `select DISTINCT p.${idCol},p.${nameCol} from Product_Master p ${join} ${join2} ${join3} where md.StoreId='${StoreId}' `; + q += ` order by ${orderBy}`; + console.log("SOSONEAPP:", sosCheckAssortment, q); + return q; + + case 'PAIDVISIONEAPP': + let tbname2 = isSpecificMappingEnable ? 'Mapping_StoreVisibilitySpecific' : 'Mapping_StoreVisibility'; + WindData = await getWindowFilterFields(storeData1, 'Master_VisibilityDefinition', tbname2, 'VisibilityDefinitionId', 'VisibilityDefinitionId', 'VisibilityTable', true, menu1); + WindData = WindData != null ? WindData : {}; + joinKey = WindData['filterIdsCol'] != null ? WindData['filterIdsCol'] : ''; + join = ` INNER join Master_VisibilityDefinition d on p.${joinKey}=d.VisibilityValue and d.MenuId='${MenuId}' `; + join2 = ` INNER join ${tbname2} md on d.VisibilityDefinitionId=md.VisibilityDefinitionId `; + q = `select DISTINCT p.${idCol},p.${nameCol} from Product_Master p ${join} ${join2} where md.StoreId='${StoreId}' `; + q += ` order by ${orderBy}`; + console.log("PAIDVISIONEAPP:", q); + return q; + + case 'PROGRAMONEAPP': + join = ` INNER join Master_ProgramDefinition d on p.ProgramId=d.ProgramId and d.MenuId='${MenuId}' `; + join2 = ` INNER join Mapping_StoreProgram md on d.ProgramDefinitionId=md.ProgramDefinitionId `; + q = `select DISTINCT p.${idCol},p.${nameCol} from Master_Program p ${join} ${join2} where md.StoreId='${StoreId}' `; + q += ` order by ${orderBy}`; + console.log("PROGRAMONEAPP:", q); + return q; + + default: return ''; + } + } + + async function getCatDoneQuery(storeData1, menu1, cat, idCol, nameCol, AllKPIFields = []) { + let { StoreId, ChainId, StateId, StoreTypeId, StoreCategoryId, StoreClassId } = storeData1; + let { ScreenName, MenuId } = menu1; + + let IdVal = cat[idCol]; + let nameVal = cat[nameCol]; + + let PJP_Table = isBeatPlan == true ? 'JourneyPlan_RouteWise' : (isAdhocScreen == true ? 'Adhoc_JourneyPlan' : isNonMerchan == true ? 'NonMerchandising_JourneyPlan' : isNonProg == true ? 'NonProgram_JourneyPlan' : isStoreSearch == true ? 'StoreSearch_JourneyPlan' : 'Mapping_JourneyPlan'); + let d1 = new Date(); + let d2 = moment(d1).format('MM/DD/YYYY'); + + let isSpecificMapIndex = AllKPIFields.findIndex(i => i.KPIFieldName == 'SpecificMapping') + let isSpecificMapKPIObj = isSpecificMapIndex >= 0 ? AllKPIFields[isSpecificMapIndex] : {}; + let isSpecificMappingEnable = isSpecificMapIndex >= 0 ? isSpecificMapKPIObj['KPIFieldEnable'] : false; + + + let COMPStockAllow_Index = AllKPIFields.findIndex(i => i.KPIFieldName == 'COMPStockAllow' && i.ScreenName == ScreenName); + let COMPStockAllow_Obj = COMPStockAllow_Index >= 0 ? AllKPIFields[COMPStockAllow_Index] : {}; + let isCOMPStockAllow = COMPStockAllow_Index >= 0 ? COMPStockAllow_Obj['KPIFieldEnable'] : false; + + let ShowCompetionSku = AllKPIFields?.findIndex((i) => i.KPIFieldName == "ShowCompetionSku"); + let ShowCompetionObj = ShowCompetionSku >= 0 ? AllKPIFields[ShowCompetionSku] : {}; + let ShowCompetionSkuNo = ShowCompetionObj?.KPIFieldDisplayName || 0 + let ShowCompetionSkuNoSplitArr = ShowCompetionObj?.KPIFieldDisplayName?.split(",") || [] + const isCompetitorValues = ShowCompetionSkuNoSplitArr; + console.log('iscompetitorValuesKPICat1', isCompetitorValues) + + // Check if isCompetitorValues is empty, null, or undefined + let isCompetitorClause = !isCompetitorValues || isCompetitorValues.length === 0 ? "p.IsCompetitor = 0" : `p.IsCompetitor IN (${isCompetitorValues.join(",")})`; + console.log("checkiscpmpKPICat1--", isCompetitorClause, ScreenName) + + + let q = ``, FilterIds = [], FilterIdsJoin = ''; + switch (ScreenName) { + case 'STOCK': + q = `SELECT DISTINCT p.${idCol} from Product_Master p + INNER join Mapping_ProductAssortmentStorewise mp on p.ProductId=mp.ProductId + INNER JOIN ${AppTables.STOCK2_DATA} w on w.PRODUCT_ID = p.ProductId + where mp.StoreId='${StoreId}' + ${(isCOMPStockAllow == true ? '' : ` and ${isCompetitorClause} `)} and (p.${idCol} ='${IdVal}' or p.${idCol} = ${IdVal}) and w.VISIT_DATE='${d2}' + and w.STORE_ID='${StoreId}' Group by p.${idCol}`; + console.log("STOCK-------!!!!", q) + return q; + case 'PROMOTIONONEAPP': + FilterIds = await getWindowFilterIds(idCol, IdVal, storeData1, 'Master_PromotionDefinition', 'Mapping_StorePromotion', 'PromoDefinitionId', 'PromoDefinitionId', 'PromoTable') + FilterIds = FilterIds != null ? FilterIds : []; + FilterIdsJoin = FilterIds.length > 0 ? FilterIds.join(',') : ''; + q = ` SELECT * FROM ${AppTables.PROMO_HDR_DATA} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' and PROMO_VALUE in (${FilterIdsJoin}) `; + return q; + case 'SOSONEAPP': + FilterIds = await getWindowFilterIds(idCol, IdVal, storeData1, 'Master_ShareOfShelfDefinition', 'Mapping_StoreShareOfShelf', 'SOSDefinitionId', 'SOSDefinitionId', 'SOSHeaderTable') + FilterIds = FilterIds != null ? FilterIds : []; + FilterIdsJoin = FilterIds.length > 0 ? FilterIds.join(',') : ''; + q = ` SELECT * FROM ${AppTables.SOS_HDR_DATA} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' and SOS_HDR_VALUE in (${FilterIdsJoin}) `; + return q; + case 'PAIDVISIONEAPP': + let tbname2 = isSpecificMappingEnable ? 'Mapping_StoreVisibilitySpecific' : 'Mapping_StoreVisibility'; + + FilterIds = await getWindowFilterIds(idCol, IdVal, storeData1, 'Master_VisibilityDefinition', tbname2, 'VisibilityDefinitionId', 'VisibilityDefinitionId', 'VisibilityTable', true, menu1) + FilterIds = FilterIds != null ? FilterIds : []; + FilterIdsJoin = FilterIds.length > 0 ? FilterIds.join(',') : ''; + q = ` SELECT * FROM ${AppTables.PAIDVIS_HDR_DATA} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' and PVIS_VALUE in (${FilterIdsJoin}) `; + return q; + case 'PROGRAMONEAPP': + q = ` SELECT * FROM ${AppTables.PROGRAM_HDR_DATA} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' and PROG_ID='${IdVal}' and MENU_ID='${MenuId}'`; + return q; + + + default: return ''; + } + } + + + async function getWindowFilterIds(idCol, IdVal, storeData1, TableName1, TableName2, JoinCol1, JoinCol2, compareKey, AddMenuCase = false, menu1 = {}) { + + try { + let AllIds = []; + let { StoreId } = storeData1 + let { ScreenName, MenuId } = menu1; + + console.log("getWindowFilterIds AddMenuCase:", AddMenuCase); + return new Promise((resolve, reject) => { + + db.transaction(async function (txn) { + let join = ` inner join ${TableName2} s on w.${JoinCol1}=s.${JoinCol2} `; + let q = `Select w.* from ${TableName1} w ${join} where s.StoreId='${StoreId}' `; + if (AddMenuCase) { + q += ` and w.MenuId='${MenuId}' `; + } + await txn.executeSql(q, [], async function (txn2, txnres) { + if (txnres.rows.length > 0) { + let Wind_data = txnres.rows.item(0); + let compareVal = Wind_data[compareKey] != null ? Wind_data[compareKey] : ''; + + let filterIdsCol = '', filterNamesCol = ''; + if (compareVal.toLowerCase() == HierarchyTbls.Master_Category.toLowerCase()) { + filterIdsCol = 'CategoryId', filterNamesCol = 'CategoryName'; + } + else if (compareVal.toLowerCase() == HierarchyTbls.Master_Brand.toLowerCase()) { + filterIdsCol = 'BrandId', filterNamesCol = 'BrandName'; + } + else if (compareVal.toLowerCase() == HierarchyTbls.Master_Product.toLowerCase()) { + filterIdsCol = 'ProductId', filterNamesCol = 'ProductName'; + } + else { + filterIdsCol = 'SubCategoryId', filterNamesCol = 'SubCategoryName'; + } + + let FIdsQ = `Select distinct p.${filterIdsCol},p.${filterNamesCol} from Product_Master p where (p.${idCol}='${IdVal}' or p.${idCol}= ${IdVal}) `; + // console.log("FIdsQ:",FIdsQ); + await txn.executeSql(FIdsQ, [], async function (txn2, txnres2) { + if (txnres.rows.length > 0) { + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + let id_value = data[filterIdsCol]; + AllIds.push(id_value); + if (i == txnres2.rows.length - 1) { + resolve(AllIds) + } + } + } + else { + resolve([]); + } + }, function (txnE, txnerr) { console.log(txnerr); resolve(AllIds) }); + + + } + else { + resolve(AllIds) + } + }, function (txnE, txnerr) { console.log(txnerr); resolve(AllIds) },); + }); + }).then((val) => { + return val + }).catch((err) => { + console.log(err); + return AllIds; + }); + } + catch (err) { + console.log("err", err); + } + } + + async function getWindowFilterFields(storeData1, TableName1, TableName2, JoinCol1, JoinCol2, compareKey, AddMenuCase = false, menu1 = {}) { + + try { + let AllIds = {}; + let { StoreId } = storeData1 + let { MenuId } = menu1; + return new Promise((resolve, reject) => { + + db.transaction(async function (txn) { + let join = ` inner join ${TableName2} s on w.${JoinCol1}=s.${JoinCol2} `; + let q = `Select w.* from ${TableName1} w ${join} where s.StoreId='${StoreId}' `; + if (AddMenuCase) { + q += ` and w.MenuId='${MenuId}' `; + } + console.log("getWindowFilterFields q:", q); + + await txn.executeSql(q, [], async function (txn2, txnres) { + if (txnres.rows.length > 0) { + let Wind_data = txnres.rows.item(0); + let compareVal = Wind_data[compareKey] != null ? Wind_data[compareKey] : ''; + console.log("compareVal1:", compareVal, Wind_data); + let filterIdsCol = ''; + if (compareVal.toLowerCase() == HierarchyTbls.Master_Category.toLowerCase()) { + filterIdsCol = 'CategoryId'; + } + else if (compareVal.toLowerCase() == HierarchyTbls.Master_Brand.toLowerCase()) { + filterIdsCol = 'BrandId'; + } + else if (compareVal.toLowerCase() == HierarchyTbls.Master_Product.toLowerCase()) { + filterIdsCol = 'ProductId'; + } + else { + filterIdsCol = 'SubCategoryId'; + } + Wind_data['filterIdsCol'] = filterIdsCol; + + resolve(Wind_data) + } + else { + resolve(AllIds) + } + }, function (txnE, txnerr) { console.log(txnerr); resolve(AllIds) },); + }); + }).then((val) => { + return val + }).catch((err) => { + console.log(err); + return AllIds; + }); + } + catch (err) { + console.log("err", err); + } + } + + + async function isCatDone(storeData1, menu1, cat, idCol, nameCol, AllKPIFields = []) { + // let {StoreId,ChainId,StateId,StoreTypeId}=storeData1; + // let {MenuId, MenuName,ScreenName}=menu1; + let q = await getCatDoneQuery(storeData1, menu1, cat, idCol, nameCol, AllKPIFields); + + return await new Promise((resolve, reject) => { + db.transaction(async function (txn) { + await txn.executeSql(q, [], async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + resolve(true); + } else { + resolve(false); + } + }, function (txnE, txnerr) { console.log(txnerr); resolve(false); },); + + }); + }).catch((err) => { + console.log(err); + return false; + }) + } + + async function gotoCatProducts(cat = {}) { + let isChecklistDataExists = false; + if (currentMenu.ScreenName == 'PROGRAMONEAPP') { + setLoaderTitle("Loading Checklist...") + setProcessing(true); + isChecklistDataExists = await getChecklistData(cat); + console.log("isChecklistDataExists", isChecklistDataExists) + setProcessing(false); + } + + // goto checklist page if it is a program + if (isChecklistDataExists) { + let obj = { props, 'screenname': "ProgramChecklist", 'storeData': storeData, 'MenuItem': currentMenu, 'ShowCatWise': true, 'CatData': cat, 'BgNav': BgNav, 'BgNavData': BgNavData, 'isAdhocScreen': isAdhocScreen, 'isBeatPlan': isBeatPlan, 'isNonMerchan': isNonMerchan, 'isNonProg': isNonProg } + goToMenuPage(obj); + return; + } + + + let obj = { props, 'screenname': ScreenName, 'storeData': storeData, 'MenuItem': currentMenu, 'ShowCatWise': true, 'CatData': cat, 'BgNav': BgNav, 'BgNavData': BgNavData, 'isAdhocScreen': isAdhocScreen, 'isBeatPlan': isBeatPlan, 'isNonMerchan': isNonMerchan, 'isNonProg': isNonProg } + goToMenuPage(obj); + } + + function getChecklistData(cat) { + console.log("getChecklistData"); + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + let q = getProgramChecklistAvailableQ(storeData, currentMenu, cat) + console.log("getChecklistData q:", q); + await txn.executeSql(q, [], async function (txn2, txnres2) { + console.log("getChecklistData length:", txnres2.rows.length); + if (txnres2.rows.length > 0) { + resolve(true); + } else { + resolve(false); + } + }, function (txnE, txnerr) { console.log(txnerr); notify("Error loading checklist data!"); resolve(false); },); + }); + }) + .then((res) => { + return res; + }) + .catch((err) => { + console.log("Error loading checklist", err); + notify("Error loading checklist data!") + return false; + }); + } + function _renderLeftMenuItem(index, RowContent) { + return ( + + {RowContent[0]} + + ) + } + + function _renderMenuItem(item, index) { + let newi + if (index == 1) { + newi = "2"; + } else { + newi = index > 2 ? ((index % 3)) : index; + } + + // let newi=index>2?((index%3)):index; + let firstitem = (index % 2 == 0) ? true : false; + let arr = colors_Arr[newi] ? colors_Arr[newi].bg : colors_Arr["0"].bg; + let unavlbl_bg = ['#bfbfbf', '#bfbfbf']; + let arr_new = item?.isAvlbl == false ? unavlbl_bg : arr; + // let iconColor=colors_Arr[newi]?colors_Arr[newi].color:colors_Arr["0"].color; + const imgPath = CardViewConfig?.MenuPath + (CardViewConfig?.isAvlbl == false ? CardViewConfig?.GreyIcon : CardViewConfig?.NormalIcon); + + let MbgImage = colors_Arr[newi] ? colors_Arr[newi]?.bgImage : colors_Arr["0"]?.bgImage; + MbgImage = item?.isAvlbl == false ? GreyBgImage : MbgImage; + //console.log("CardViewConfig-----",CardViewConfig,CardViewConfig["GreyIcon"],grey_bg_image) + + let hasSomeData = item?.hasSomeData + return ( + { gotoCatProducts(item) }}> + + + + + + + + {(imgPath != null && imgPath != '') && } + + + {item[ColName]} + {item.isDone == true && + + } + {/* {item.hasSomeData==true && !item.isKPI_Done && + + } + {props.PartialSaveAllow==true && item.PSAllow!=null && item.PSAllow==true && + {`(${item.DataDoneCount}/${item.DataRowAvlblCount})`} + } */} + + + + ) + } + + + function _renderRightMenuItem(item, index, RowContent) { + return ( + + {RowContent[0]} + {_renderMenuItem(item, index)} + + ) + + } + + + function _renderFilterCategories() { + var RowContent = []; + return ( + + { + const cat = item; + let isDone = item.isDone; + + if (CardViewEnable) { + let firstitem = (index % 2 == 0) ? true : false; + + if (firstitem) { + var content = _renderMenuItem(item, index); + RowContent = [content]; + if (index == productCats.length - 1) { + return _renderLeftMenuItem(index, RowContent); + } + } + else { + return _renderRightMenuItem(item, index, RowContent); + } + + } else { + + return ( + + + { gotoCatProducts(cat) }}> + + {item[ColName]} + + {(item.isDone != null && item.isDone == true) && } + + + + ); + } + }} + /> + + ) + } + + + + + + return ( + + {processing && } + + + + + + + + + + + {storeData.StoreName} + + {storeData.StoreType} + + + + + + + {ST.StoreId + ':'} + {storeData.StoreId} + + + {ST.StoreCode + ':'} + {storeData.StoreCode} + + + + + + + + + {currentMenu.MenuName} + {`(${doneCatCount}/${loadedCatCount})`} + + {Object.keys(storeData).length > 0 && + _renderFilterCategories() + } + + + + + ); +} + +export default connect(mapStateToProps, mapDispatchToProps)(KPICategories); \ No newline at end of file diff --git a/PerformicsSrc/src/screens/KycForm.js b/PerformicsSrc/src/screens/KycForm.js new file mode 100644 index 0000000..62ba11e --- /dev/null +++ b/PerformicsSrc/src/screens/KycForm.js @@ -0,0 +1,1776 @@ +import React, {useState, useEffect, useRef} from 'react'; +import Container from '../components/container'; +import {useFocusEffect, useRoute} from '@react-navigation/native'; +import {globalStyles, customStyles, GetPageTheme} from '../styles/Global'; +import { + Image, + TextInput, + View, + Text, + ScrollView, + TouchableOpacity, + Platform, + DeviceEventEmitter, + PermissionsAndroid, + Keyboard, + SectionList, + StyleSheet, +} from 'react-native'; +import {connect} from 'react-redux'; +import {mapStateToProps, mapDispatchToProps} from '../reducers/contextProvider'; +import {notify} from '../components/notify'; +import moment from 'moment'; +import {clear_item, get_item} from '../components/localStorage'; +import CustomHeader from '../components/customHeader'; +import {Entypo, Ionicons, MaterialCommunityIcons} from '../components/icons'; +import { + UploadData2, + ValidateEmail, + checkRange, + getAllFileForAFolder, + getServerDT, + getmobileverifyotp, + restore_ImageWithMetaData, + uploadContractFormFiles, + validateNumber, + validateNumber12, + validateStoreAddStoreInfoText, + verifymobileotp, +} from '../controller/functions'; +import CustomLoader from '../components/CustomLoader'; +import * as RNFS from 'react-native-fs'; +import { + db, + CoverageImagePath, + AppVersion, + AddStoreImagePath, + ImageFolderPath, + URL_IMAGE, +} from '../constants/constants'; +import MultiSelect from 'react-native-multiple-select'; +import ModalSelector from 'react-native-modal-selector'; + +import CustomModal from '../components/CustomModal'; +import {_checkLocationPermission} from '../components/geolocation'; + +import {METHODS, getMethodName} from '../constants/methodNames'; +import {UploadImagesWithoutWait} from '../constants/uploadData'; +import LinearGradient from 'react-native-linear-gradient'; + +import CameraImg3 from '../assets/performics/camera_tick.svg'; +import CameraImg2 from '../assets/performics/camera_icon.svg'; +import CameraImg from '../assets/performics/camera_front_image.svg'; +import GradientButton from '../components/gradientButton'; +import {ConfirmSaveAlert} from '../components/alert'; +import OtpInputs from 'react-native-otp-inputs'; + +function KycForm(props) { + const route = useRoute(); + const ST = props.StaticText || {}; + // get all theme styles acc to current theme set + const PageTheme = GetPageTheme(props.DarkMode, route.name); + const customStyle = customStyles(props.DarkMode, route.name); + const globalStyle = globalStyles(props.DarkMode, route.name); + + const [processing, setProcessing] = useState(false); + const [loaderTitle, setLoaderTitle] = useState(); + const [rerenderdata, setrerenderdata] = useState([]); + // New + const [StoreImage, setStoreImage] = useState(''); + const [SelectedImg, setSelectedImg] = useState(''); + const [StoreImgPath, setStoreImgPath] = useState(''); + const [showCamera, setShowCamera] = useState(false); + const [addstoreconfigdata, setAddStoreConfigData] = useState([]); + const [storeData, setStoreData] = useState({}); + const [approvedStoreData, setApprovedStoreData] = useState(null); + const [showModal, setShowModal] = useState(false); + const [showModalAlert, setShowModalAlert] = useState(false); + const selectimages = useRef({}); + const addstoreconfigCurr = useRef([]); + const [glb_gst, setglb_gst] = useState(''); + const [otp, setOtp] = useState(''); + + const [phone, setPhone] = useState(''); + const otpRef = useRef(); + + const [showotpfeild, setShowOTPFeild] = useState(false); + const [SendOTP, setSendOTP] = useState(false); + const [verifiedOTP, setVerifiedOTP] = useState(false); + + let params = props.route.params ? props.route.params : {}; + let storeData1 = params.storeData || {}; + let menu1 = params.menu || {}; + console.log('storeData1:', storeData1.StoreId, menu1); + + const {storeId} = route.params; + + console.log('checkstid:', storeId); + + useEffect(() => { + if (otp.length == 6 && String(phone || '').length == 10) { + Verify_OTP(phone); + } + }, [otp]); + + const d1 = new Date(); + const d2 = moment(d1).format('MM/DD/YYYY'); + const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; + const handleUpload = () => { + console.log('alerttt', validate()); + let rse = validate(); // Run validation + if (!rse) return; + console.log('Setting showModal to true'); // Debugging + setShowModalAlert(true); // Show the confirmation modal + }; + + function onSaveCancel() { + setShowModalAlert(false); + } + useEffect(() => { + getdata(); + const onImageCapturedSubs = DeviceEventEmitter.addListener( + 'onImageCaptured', + imgData => { + getImage(imgData); + }, + ); + return function cleanup() { + onImageCapturedSubs.remove(); + }; + }, []); + + useEffect(() => { + fetchApprovedData(storeId); + }, []); + + const validate = () => { + let isValid = true; + let rs = addstoreconfigdata.map(section => section.data).flat(); + for (let i = 0; i < rs.length; i++) { + const item = rs[i]; + + if ( + item.IsMandatory === 'true' && + item.IsFieldShow === 'true' && + item.FieldName === 'Mobile' && + item.DisableQuestion == 0 + ) { + if (item.answer === '') { + isValid = false; + notify('Please enter Phone Number'); + break; + } else if (item.answer.length < 10) { + isValid = false; + notify('Please enter a valid Phone Number'); + break; + } else if (!verifiedOTP) { + isValid = false; + notify('Please verify mobile number'); + break; + } + } else if ( + item.answer === '' && + item.IsMandatory === 'true' && + item.IsFieldShow == 'true' && + item.QuestionType != 'Image' && + (item.FieldName != 'GSTNo' || item.FieldName != 'AadharNo') && + item.DisableQuestion == 0 + ) { + isValid = false; + notify( + `Please ${ + item.QuestionType == 'Text' || item.QuestionType == 'Number' + ? 'Fill ' + : 'Select' + } ${item.DisplayName}`, + ); + break; // Exit loop early + } + if ( + item.answer === '' && + item.IsMandatory === 'true' && + item.IsFieldShow == 'true' && + item.QuestionType == 'Image' && + (item.FieldName != 'GSTImage' || + item.FieldName != 'AadharFrontImage' || + item.FieldName != 'AadharBackImage') && + item.DisableQuestion == 0 + ) { + isValid = false; + notify(`Please Capture ${item.DisplayName}`); + break; // Exit loop early + } + + // else if ( + // item.answer != null && + // item.answer != '' && + // item.IsFieldShow == 'true' && + // (item.QuestionType == 'Text' || item.QuestionType == 'Number') && + // item.FieldName != 'AccountNo' && + // item.FieldName != 'Pan' && item.FieldName != 'GSTNo' && item.FieldName != 'Phone' + // && item.FieldName != 'AadharNo' && + // item.answer.length < 6 && + // item.DisableQuestion == 0 + // ) { + // isValid = false; + // notify( + // `Please fill minimum 6 ${ + // item.QuestionType == 'Text' ? 'Character ' : 'Digit' + // } ${item.DisplayName}`, + // ); + // break; + // } + + else if ( + item.answer != null && + item.answer != '' && + item.IsFieldShow == 'true' && + (item.QuestionType == 'Text' || item.QuestionType == 'Number') && + item.FieldName != 'AccountNo' && + item.FieldName != 'Pan' && + item.FieldName != 'GSTNo' && + item.FieldName != 'Phone' && + item.FieldName != 'AadharNo' && + item.FieldName != 'IFSC' && + + item.DisableQuestion == 0 && + ( + (item.FieldName == 'BankName' && item.answer.length < 3) || + (item.FieldName != 'BankName' && item.answer.length < 6) + ) + ) { + isValid = false; + notify( + `Please fill minimum ${ + item.FieldName == 'BankName' ? '3' : '6' + } ${item.QuestionType == 'Text' ? 'Character ' : 'Digit'} ${item.DisplayName}`, + ); + break; + } + + + + else if ( + item.answer != null && + item.answer != '' && + item.IsFieldShow == 'true' && + (item.QuestionType == 'Text' || item.QuestionType == 'Number') && + item.FieldName == 'Phone' && + item.answer.length < 10 && + item.DisableQuestion == 0 + ) { + isValid = false; + notify(`Please fill correct ${item.DisplayName}`); + break; + } else if ( + item.answer != null && + item.answer != '' && + item.IsFieldShow == 'true' && + (item.QuestionType == 'Text' || item.QuestionType == 'Email') && + item.FieldName == 'Email' && + !emailRegex.test(item.answer) && + item.DisableQuestion == 0 + ) { + isValid = false; + notify(`Please fill correct ${item.DisplayName}`); + break; + } else if ( + item.answer === '' && + item.IsMandatory === 'true' && + item.IsFieldShow == 'true' && + item.FieldName == 'TaxType' && + item.FieldName != 'GSTNo' && + item.DisableQuestion == 0 + ) { + isValid = false; + notify(`Please Select ${item.DisplayName}`); + + break; // Exit loop early + } else if ( + item.IsMandatory === 'true' && + item.IsFieldShow == 'true' && + (item.FieldName == 'GSTNo' || + item.FieldName == 'GSTImage' || + item.FieldName == 'AadharNo' || + item.FieldName == 'AadharFrontImage' || + item.FieldName == 'AadharBackImage') && + !validatespecific() && + item.DisableQuestion == 0 + ) { + isValid = false; + break; // Exit loop early + } else if ( + item.answer != null && + item.answer != '' && + item.IsFieldShow == 'true' && + (item.QuestionType == 'Text' || item.QuestionType == 'Number') && + item.FieldName == 'Pan' && + item.answer.length < 10 && + item.DisableQuestion == 0 + ) { + isValid = false; + notify(`Please fill correct ${item.DisplayName}`); + break; + } + else if ( + item.answer != null && + item.answer != '' && + item.IsFieldShow == 'true' && + (item.QuestionType == 'Text' || item.QuestionType == 'Number') && + (item.FieldName == 'AccountNo') && + item.answer.length < 8 && + item.DisableQuestion == 0 + ) { + isValid = false; + notify(`Please fill correct ${item.DisplayName}`); + + break; + } + else if ( + + item.answer != null && + item.answer != '' && + item.IsFieldShow == 'true' && + (item.QuestionType == 'Text' || item.QuestionType == 'Number') && + (item.FieldName == 'IFSC') && + item.answer.length < 11 && + item.DisableQuestion == 0 + ) { + isValid = false; + notify(`Please fill correct ${item.DisplayName}`); + + break; + } + } + + return isValid; + }; + + const validatespecific = () => { + let isValid = true; + let rs = addstoreconfigdata.map(section => section.data).flat(); + for (let i = 0; i < rs.length; i++) { + const item = rs[i]; + console.log('dattttt', item); + if (glb_gst == 'GST') { + if ( + item.answer === '' && + item.IsMandatory === 'true' && + item.IsFieldShow == 'true' && + item.FieldName == 'GSTNo' && + item.DisableQuestion == 0 + ) { + notify(`Please fill ${item.DisplayName}`); + isValid = false; + break; + } else if ( + item.answer != null && + item.answer != '' && + item.IsFieldShow == 'true' && + item.FieldName == 'GSTNo' && + item.answer.length < 15 && + item.DisableQuestion == 0 + ) { + notify(`Please fill correct ${item.DisplayName}`); + isValid = false; + break; + } else if ( + item.answer === '' && + item.IsMandatory === 'true' && + item.IsFieldShow == 'true' && + item.FieldName == 'GSTImage' && + item.DisableQuestion == 0 + ) { + notify(`Please Capture ${item.DisplayName}`); + isValid = false; + break; + } + } else if (glb_gst == 'Non GST') { + if ( + item.answer === '' && + item.IsMandatory === 'true' && + item.IsFieldShow == 'true' && + item.FieldName == 'AadharNo' && + item.DisableQuestion == 0 + ) { + notify(`Please fill ${item.DisplayName}`); + isValid = false; + break; + } else if ( + item.answer != null && + item.answer != '' && + item.IsFieldShow == 'true' && + item.FieldName == 'AadharNo' && + item.answer.length < 12 && + item.DisableQuestion == 0 + ) { + notify(`Please fill correct ${item.DisplayName}`); + isValid = false; + break; + } else if ( + item.answer === '' && + item.IsMandatory === 'true' && + item.IsFieldShow == 'true' && + (item.FieldName == 'AadharFrontImage' || + item.FieldName == 'AadharBackImage') && + item.DisableQuestion == 0 + ) { + notify(`Please Capture ${item.DisplayName}`); + isValid = false; + break; + } + } + } + + return isValid; + }; + + async function getdata() { + try { + let token = await get_item('loginToken'); + let loginInfo = await get_item('loginInfo'); + const loginDetails = JSON.parse(loginInfo); + let desg = loginDetails.Designation || ''; + + await db.transaction(async txn => { + let q = `SELECT DISTINCT T.BlockName,T.DisplayName,T.DefaultValue, + CASE WHEN T.IsMandatory = 1 THEN 'true' ELSE 'false' END AS IsMandatory, + CASE WHEN T.IsFieldShow = 1 THEN 'true' ELSE 'false' END AS IsFieldShow, + T.QuestionType,T.ListJson, + T.FieldName, + CASE + WHEN FieldName = 'Pincode' THEN 6 + WHEN FieldName = 'Phone' THEN 10 + WHEN FieldName = 'GSTNo' THEN 15 + WHEN FieldName = 'AadharNo' THEN 12 + WHEN FieldName = 'Pan' THEN 10 + WHEN FieldName = 'IFSC' THEN 11 + WHEN FieldName = 'AccountNo' THEN 18 + ELSE 50 + END AS MaxLength , + + CASE + WHEN k.value IS NOT NULL AND k.value != '' THEN 1 + ELSE 0 +END AS DisableQuestion + , + ifnull(k.value,'')as OldValue +FROM Mapping_KYCConfiguration T left join ( +SELECT 'TaxType' AS column_name, TaxType AS value +FROM KYC_StoreListRejected +WHERE StoreId = ${storeId} +UNION ALL +SELECT 'AadharNo', AadharNo +FROM KYC_StoreListRejected +WHERE StoreId = ${storeId} +UNION ALL +SELECT 'GSTNo', GSTNo +FROM KYC_StoreListRejected +WHERE StoreId = ${storeId} +UNION ALL +SELECT 'GSTImage', GSTImage +FROM KYC_StoreListRejected +WHERE StoreId = ${storeId} +UNION ALL +SELECT 'AadharFrontImage', AadharFrontImage +FROM KYC_StoreListRejected +WHERE StoreId = ${storeId} +UNION ALL +SELECT 'AadharBackImage', AadharBackImage +FROM KYC_StoreListRejected +WHERE StoreId = ${storeId} +UNION ALL +SELECT 'Pan', Pan +FROM KYC_StoreListRejected +WHERE StoreId = ${storeId} +UNION ALL +SELECT 'PanImage', PanImage +FROM KYC_StoreListRejected +WHERE StoreId = ${storeId} +UNION ALL +SELECT 'BankName', BankName +FROM KYC_StoreListRejected +WHERE StoreId = ${storeId} +UNION ALL +SELECT 'IFSC', IFSC +FROM KYC_StoreListRejected +WHERE StoreId = ${storeId} +UNION ALL +SELECT 'AccountNo', AccountNo +FROM KYC_StoreListRejected +WHERE StoreId = ${storeId} +UNION ALL +SELECT 'AccountHolderName', AccountHolderName +FROM KYC_StoreListRejected +WHERE StoreId = ${storeId} +UNION ALL +SELECT 'CancleChqPhoto', CancleChqPhoto +FROM KYC_StoreListRejected +WHERE StoreId = ${storeId} +UNION ALL +SELECT 'AadharFrontImage', AadharFrontImage +FROM KYC_StoreListRejected +WHERE StoreId = ${storeId} +UNION ALL +SELECT 'StoreFrontImage', StoreFrontImage +FROM KYC_StoreListRejected +WHERE StoreId = ${storeId} +UNION ALL +SELECT 'AccountType', AccountType +FROM KYC_StoreListRejected +WHERE StoreId = ${storeId} +UNION ALL +SELECT 'Mobile', Mobile +FROM KYC_StoreListRejected +WHERE StoreId = ${storeId} + +)as k on T.FieldName=k.column_name`; + console.log('querrrrrr', q); + await txn.executeSql( + q, + null, + async (txn2, txnres) => { + if (txnres.rows.length > 0) { + let arr = []; + for (var i = 0; i < txnres.rows.length; i++) { + let data = txnres.rows.item(i); + console.log('querrrrrr--data', data.OldValue); + if (data) { + arr.push({...data, answer: data.OldValue, answerid: ''}); + } + } + + // Ensure valid transformation + const groupedData = arr.reduce((acc, item, index) => { + // if (item?.IsFieldShow === "true") { + let section = acc.find(sec => sec?.title === item?.BlockName); + if (section) { + section.data.push(item); + } else { + acc.push({ + title: item?.BlockName, + isShow: item?.IsFieldShow, + data: [item], + }); + } + // } + return acc; + }, []); + + if (Array.isArray(groupedData)) { + setAddStoreConfigData([...groupedData]); + } else { + console.error('Invalid Data Structure:', groupedData); + } + + setrerenderdata(prev => !prev); + } else { + console.warn('No Data Found in apping_KYCConfiguration Table'); + } + }, + (txnE, txnerr) => { + console.error('SQL Error:', txnerr); + }, + ); + }); + } catch (err) { + console.error('Error in getdata:', err); + } + } + + // Function to fetch matching records + const fetchApprovedData = storeId => { + db.transaction(tx => { + tx.executeSql( + 'SELECT * FROM KYC_StoreListRejected WHERE storeId = ?', + [storeId], + (tx, results) => { + if (results.rows.length > 0) { + const row = results.rows.item(0); // You can use results.rows.raw() for all rows + setApprovedStoreData(row); // Save to state + console.log('Store Data:', row); + } else { + console.log('No data found for this storeId'); + } + }, + error => { + s; + console.log('Query error: ', error); + }, + ); + }); + }; + + async function upload_Data() { + setShowModalAlert(false); + console.log('KYCConfigurationdata', addstoreconfigdata); + let d1 = new Date(); + let d2 = moment(d1).format('MM/DD/YYYY'); + let fpath = + Platform.OS == 'ios' ? StoreImgPath.replace('file://', '') : StoreImgPath; + console.log(fpath, 'path of imaggege'); + setProcessing(true); + + setLoaderTitle('Uploading Data...'); + + let rs = addstoreconfigdata + .map(section => section.data) + .flat() + .reduce((acc, curr) => { + console.log('data_verify', curr); + console.log('data_verify1', acc); + const value = + (curr.answerid == '' || + curr.answerid == '0' || + curr.QuestionType == 'Image') && + curr.IsFieldShow == 'true' + ? curr.answer == '0' + ? '' + : curr.answer + : curr.IsFieldShow == 'false' && curr?.DefaultValue != '' + ? curr?.DefaultValue + : curr.answerid == 0 || curr.answerid == '0' + ? '' + : curr.answerid; + return { + ...acc, + [curr.FieldName]: value, + verificationReq: '0', + UserId: props.UserId, + }; + }, {}); + + rs.StoreId = storeId; + + console.log('respinse--->', rs); + + let postData = { + MID: 0, + Keys: 'StoreKYC', + JsonData: JSON.stringify([rs]), + UserId: props.UserId, + }; + + console.log('addstoreinfo-------------ad', addstoreconfigdata); + + const url = props.baseurl + 'UploadJsonDirect'; + + console.log(url, postData, 'url and postDaata...'); + + let rsFile = addstoreconfigdata + .map(section => section.data) + .flat() + .filter(itm => itm.QuestionType == 'Image' && itm?.answer != ''); + + await uploadContractFormFiles12(rsFile); + + await UploadData2(url, postData) + .then(async res => { + console.log('res: 12', res, url); + if (res?.UploadJsonDirectResult == 'Success') { + notify('Data Save Successfully.'); + // Insert into SQLite + const insertQuery = `INSERT INTO KYC_INFO (STORE_ID,VISIT_DATE,KYC_DATA) VALUES (?,?,?)`; + const storeInfoStr = JSON.stringify(rs); + + db.transaction(txn => { + txn.executeSql( + insertQuery, + [storeId, d2, storeInfoStr], + (tx, res) => { + console.log('✅ Data inserted into KYC_INFO:', res); + }, + (tx, error) => { + console.log('❌ Error inserting into KYC_INFO:', error); + }, + ); + }); + + setProcessing(false); + props.navigation.navigate('KycStoreList'); + } else { + notify(res?.UploadJsonDirectResult); + setProcessing(false); + } + }) + .catch(err => { + console.log(err); + setProcessing(false); + }); + } + + async function uploadContractFormFiles12(allfiles = []) { + let d1 = new Date(); + let d2 = moment(d1).format('MM/DD/YYYY'); + let uploadCount = 0; + const url = + (props.imageUploadUrl || URL_IMAGE) + + getMethodName(METHODS.UPLOADIMAGES_METHOD); + + var isAllUploaded = false; + return await Promise.all( + allfiles.map(async (file, i) => { + let index = i; + let actualfilepath = 'file://' + `${ImageFolderPath}${file.answer}`; + console.log('actualfilepath---', actualfilepath); + let isExists = await RNFS.exists(actualfilepath).then(res => { + return res; + }); + console.log('isExists file', isExists, file.answer, file); + let isImageUploaded = false; + // isExists==false + if (isExists) { + let postData = new FormData(); + postData.append('file', { + uri: actualfilepath, + type: file?.answerid, + name: file.answer, + }); + + postData.append('Foldername', 'KYCImages'); + postData.append('Path', d2); + + isImageUploaded = await UploadImagesWithoutWait(postData, url); + if (isImageUploaded == true) { + console.log( + 'isExists file uploaded', + isExists, + uploadCount, + index, + allfiles.length - 1, + ); + await RNFS.unlink(actualfilepath); + uploadCount++; + // UpdateUploadCountLocal(uploadCount+1) + if (uploadCount == allfiles.length) { + isAllUploaded = true; + } + } else { + console.log('file not uploaded:', isExists, actualfilepath); + } + } else { + //file does not exists + uploadCount++; + // UpdateUploadCountLocal(uploadCount+1) + if (uploadCount == allfiles.length) { + isAllUploaded = true; + } + } + + return isImageUploaded; + }), + ) + .then(val => { + console.log(val); + return isAllUploaded; + }) + .catch(err => { + console.log(err); + return false; + }); + } + + function render_Picker(label_key,value_key, onChange = () => {},selected_data = {},isDisabled,) { + console.log("checkdataa-->",label_key,value_key) + let data = []; + let qtn = selected_data.qtn || {}; + let index = selected_data.index; + let sectionIndex = selected_data.sectionIndex; + + let allAnswers = []; + + if (typeof qtn.ListJson === 'string') { + try { + allAnswers = JSON.parse(qtn.ListJson); + } catch (error) { + console.error('Error parsing ListJson:', error); + } + } else if (Array.isArray(qtn.ListJson)) { + allAnswers = qtn.ListJson; + } + + data = allAnswers.map((item, index) => ({ + key: index, + label: item[label_key], + value: item[value_key], + component: + selected_data.value == item[value_key] ? ( + + + {item[label_key]} + + + ) : null, + })); + + return ( + { + if (!isDisabled) { + onChange(option, qtn, index, sectionIndex); + } + }} + overlayStyle={customStyle.addVisPickerOverlay} + cancelContainerStyle={customStyle.addVisPicker_OptionContainerStyle} + optionStyle={customStyle.addvis_opStyle} + optionTextStyle={customStyle.addvis_opTextStyle} + selectedKey={selected_data.value} + disabled={isDisabled} // ✅ This disables the picker correctly + > + + {selected_data.value ? selected_data.value : '-' + ST.select + '-'} + + + ); + } + + function onselectionChange(option, qtn, index, sectionIndex) { + console.log( + option, + qtn, + sectionIndex, + index, + 'confirmmmmmm----------11111111111', + ); + let updatedData = addstoreconfigdata.map((section, secIndex) => { + if (secIndex === sectionIndex) { + // Clone the section and its data to ensure immutability + const updatedSection = {...section, data: [...section.data]}; + + // Update the specific item in the section's data + const updatedItem = {...updatedSection.data[index]}; + updatedItem.answerid = option.value || '0'; + updatedItem.answer = option.label; + // Replace the item in the section's data + updatedSection.data[index] = updatedItem; + const updatedItem2 = [...updatedSection.data]; + + if ( + updatedItem?.FieldName === 'TaxType' && + updatedItem?.answer === 'GST' + ) { + console.log('checkGST--', updatedItem?.answer); + setglb_gst('GST'); + for (let i = 0; i < updatedItem2.length; i++) { + if ( + ['AadharNo', 'AadharFrontImage', 'AadharBackImage'].includes( + updatedItem2[i].FieldName, + ) + ) { + updatedItem2[i].IsFieldShow = 'false'; + updatedItem2[i].answer = ''; + updatedItem2[i].answerid = 0; + } + + if (['GSTNo', 'GSTImage'].includes(updatedItem2[i].FieldName)) { + updatedItem2[i].IsFieldShow = 'true'; + } + } + } else if ( + updatedItem?.FieldName === 'TaxType' && + updatedItem?.answer === 'Non GST' + ) { + setglb_gst('Non GST'); + for (let i = 0; i < updatedItem2.length; i++) { + if (['GSTNo', 'GSTImage'].includes(updatedItem2[i].FieldName)) { + updatedItem2[i].IsFieldShow = 'false'; + updatedItem2[i].answer = ''; + updatedItem2[i].answerid = 0; + } + + if ( + ['AadharNo', 'AadharFrontImage', 'AadharBackImage'].includes( + updatedItem2[i].FieldName, + ) + ) { + updatedItem2[i].IsFieldShow = 'true'; + } + } + } + + updatedSection.data = updatedItem2; + return updatedSection; + } + return section; // Return unchanged sections + }); + + console.log('finalData==========', JSON.stringify(updatedData)); + setAddStoreConfigData([...updatedData]); // Update state in a single call + } + + function setTextValue(value, qtn, sectionIndex, index, type = '') { + console.log('otp_test-', value, qtn, sectionIndex, index, (type = '')); + if (value != '') { + let isValid = validateNumber(value, type); + console.log('type:', type, isValid); + if (!isValid) { + return; + } + } + + let updatedData = addstoreconfigdata.map((section, secIndex) => { + if (secIndex === sectionIndex) { + const updatedSection = {...section, data: [...section.data]}; + + const updatedItem = {...updatedSection.data[index]}; + updatedItem.answerid = '0'; + updatedItem.answer = value; + + updatedSection.data[index] = updatedItem; + + return updatedSection; + } + return section; + }); + + console.log('updatedData----', JSON.stringify(updatedData)); + + setAddStoreConfigData(updatedData); + } + + async function openCamera(dataindex) { + console.log('dataindex', dataindex); + // setSelectImages(dataindex) + selectimages.current = dataindex; + addstoreconfigCurr.current = addstoreconfigdata; + // setShowCamera(true); + props.navigation.navigate('CameraScreen', { + getImage: getImage, + cameraType: 'back', + CheckInCameraGallery: props.CheckInCameraGallery, + storeData: storeData, + enableCameraFlip: props.CheckInSwitchingCamera ? true : false, + }); + } + + async function getImage(imgdata) { + if ( + typeof imgdata == 'object' && + imgdata.errorCode == 'camera_unavailable' + ) { + notify(ST.Cameraunavailable); + } else if (typeof imgdata == 'object' && imgdata.uri != null) { + const img = imgdata; + const storeDataDetail = imgdata.storeData || {}; + const imgurl = img.uri, + imgWidth = img.width, + imgHeight = img.ExtendedHeight; + let isImgFromGallery = img.fromGallery != null ? img.fromGallery : false; + let picture_clickedd = + isImgFromGallery == true ? img.datetime : new Date(); + + ////change by jeevanp + let picture_clicked_time = moment(picture_clickedd).format( + 'MM-DD-YYYY HH:mm:ss', + ); + let picture_clicked_time_for_pic_name = + moment(picture_clickedd).format('MMDDYYYY_HHmmss'); + + console.log("time", picture_clicked_time); + console.log("time1", picture_clicked_time_for_pic_name); + let calculate_tym_date_for_filename = picture_clicked_time_for_pic_name; + let calculate_tym_date_over_img = picture_clicked_time; + + let filename = + storeId + + '_' + + (props.UserId || '') + + '_KycImage-' + + calculate_tym_date_for_filename + + '.jpg'; + console.log(filename, 'file_name'); + + const mark_text1 = calculate_tym_date_over_img; + const mark_text2 = + 'User Id:' + + props.UserId + + ' | Image Type: Kyc Image Info' + + ' | Date:' + + calculate_tym_date_over_img; + console.log(mark_text1 + '\n' + mark_text2, 'mark_text2'); + + setStoreImage(filename); + console.log('selectimages========', selectimages.current); + + let sectionIndex = selectimages.current?.sectionIndex; + let index = selectimages.current?.index; + + let imagePath = `${ImageFolderPath}${filename}`; + console.log('checkin imgurl:', imagePath, imgurl); + RNFS.copyFile(imgurl, imagePath) + .then(async resn => { + // render data with clicked image + let uri = 'file://' + imagePath; + setStoreImgPath(uri); + setSelectedImg(uri); + + let updatedData = addstoreconfigCurr.current.map( + (section, secIndex) => { + console.log('secIndex', secIndex, 'sectionIndex', sectionIndex); + if (secIndex == sectionIndex) { + // Clone the section and its data to ensure immutability + const updatedSection = { ...section, data: [...section.data] }; + + // Update the specific item in the section's data + const updatedItem = { ...updatedSection.data[index] }; + const getMimeType = uri => { + const extension = uri.split('.').pop().toLowerCase(); + + const mimeTypes = { + jpg: 'image/jpeg', + jpeg: 'image/jpeg', + png: 'image/png', + gif: 'image/gif', + webp: 'image/webp', + }; + + return mimeTypes[extension] || 'application/octet-stream'; // Fallback + }; + + const mimeType = getMimeType(img.uri); + console.log(mimeType); + console.log(mimeType, 'img===========', img); + updatedItem.answerid = mimeType; + updatedItem.answer = filename; + + // Replace the item in the section's data + updatedSection.data[index] = updatedItem; + + return updatedSection; + } + return section; // Return unchanged sections + }, + ); + + setAddStoreConfigData(updatedData); + console.log('updatedData========', JSON.stringify(updatedData)); + selectimages.current = {}; + // add metdata then resize image and restored back to the imagePath + let restore_data = { + destFilePath: imagePath, + imgurl: imgurl, + imgWidth, + imgHeight, + mark_text1, + mark_text2, + }; + let is_restored = await restore_ImageWithMetaData( + restore_data, + imgdata, + ); + console.log('image restored:', is_restored); + }) + .catch(err => { + console.log('ERROR: image file write failed!!!', err); + console.log(err.message, err.code); + }); + } + } + + function _OpenCaptureImage_Modal(img) { + const isImageCap = img != '' || img != null ? true : false; + let camera2Label = 'test'; + return ( + + { + + + + + { + openCamera(); + }}> + + + + } + + ); + } + + function cancelImage() { + setSelectedImg(''); + setShowModal(false); + } + + function _render_captureImage() { + const isImageAvlbl = + StoreImage != '' && + StoreImage != null && + StoreImgPath != '' && + StoreImgPath != null; + + return ( + + + { + isImageAvlbl ? OpenImgModal(StoreImgPath) : openCamera(); + }}> + {!isImageAvlbl && } + {isImageAvlbl && ( + + )} + + + {ST.ClickSelfieinfrontofStore} + + + + ); + } + + const Send_OTP = async value => { + console.log('OTP called-------Send', value); + + const phoneNumber = `${'91'}${value}`; + + let projectCode = await get_item('projectCode'); + const projectcode = JSON.parse(projectCode); + + console.log('projectDetails----', projectCode); + + const url = 'https://api1.parinaam.in/api/generic/CheckUserAndSendOTP'; + const data = {mobileno: phoneNumber, projectcode: projectcode}; + + console.log(url, data); + + await getmobileverifyotp(url, data) + .then(async res => { + console.log(res, 'response...'); + + if (!res[0]?.OTP) { + notify(res[0]?.Messages, 'SHORT'); // Invalid phone + } else if (res[0]?.OTP) { + notify(res[0]?.Messages, 'SHORT'); + setSendOTP(true); + setShowOTPFeild(true); + // return true; + } else if (res.networkErr && res.error) { + notify('Please connect to internet - ' + res.error, 'SHORT'); + } else if (!res.false && res.error) { + notify(res.error, 'SHORT'); + } + }) + .catch(err => { + console.log('onPage OTP send error1', err); + }); + }; + + const handleVerify = async (selansid, minlen) => { + console.log(minlen, 'selansid----------', selansid); + if (!showotpfeild) { + notify('Please click on Send OTP Button', 'SHORT'); + return false; + } else if (otp.length !== 6) { + notify('Please enter 6-digit OTP', 'SHORT'); + return false; + } else if (selansid.length == minlen) { + return await Verify_OTP(selansid); + } + }; + + const Verify_OTP = async value => { + console.log('OTP called-------verify otpppppp', value.length); + + const phoneNumber = `${'91'}${value}`; + + const url = 'https://api1.parinaam.in/api/generic/otpauthentication'; + const data = { + otp: otp, + mobileno: phoneNumber, + }; + + console.log(url, data); + + return await verifymobileotp(url, data) + .then(async res => { + console.log(res, 'response..vwrify.'); + + if (res[0]?.Message == 'OTP is matched') { + notify(res[0]?.Message, 'SHORT'); + setVerifiedOTP(true); + return true; + // setShowAlert(true); // show save alert . popup + } else if (res[0]?.Message != 'OTP is matched') { + + notify(res[0]?.Message, 'SHORT'); + } else if (res.networkErr && res.error) { + notify('Please connect to internet - ' + res.error, 'SHORT'); + } else if (!res.false && res.error) { + notify(res.error, 'SHORT'); + } + return false; + }) + .catch(err => { + console.log('onPage OTP send error1', err); + return false; + }); + }; + + // console.log("addstoreconfigdata", JSON.stringify(addstoreconfigdata)) + + return ( + + {processing && } + + {ConfirmSaveAlert( + props, + showModalAlert, + onSaveCancel, + upload_Data, + 'Do you really want to add store ?', + )} + {_OpenCaptureImage_Modal()} + {_render_captureImage()} + + + {approvedStoreData != null && ( + + {approvedStoreData?.AadharAudit != null && ( + <> + + Gst Audit: + + {approvedStoreData.GSTAudit} + + + + Aadhar Audit: + + {approvedStoreData.AadharAudit} + + + + + Pan Audit: + + {approvedStoreData.PanAudit} + + + + + Bank Proof Audit: + + + {approvedStoreData.BankProofAudit} + + + + )} + + )} + + + `${item.FieldName}_${index}`} // Ensure unique keys for items + renderSectionHeader={({section}) => { + // Find the index of the current section + // console.log("section_header...",section) + if (section?.isShow == 'true' || section?.isShow == true) { + return ( + + + + + + {section?.title ? section?.title : ''} + + + + + + ); + } + }} + renderItem={({item, index, section}) => { + const sectionIndex = addstoreconfigdata.findIndex( + sec => sec.title === section.title, + ); + + // console.log(section,"sectionIndex=======",sectionIndex) + let qtn = item; + + let qtnIndex = index; + let selansid = '', + selanswer = '', + showImageTag1 = false, + showImageTag2 = false; + let id_key = `${qtn.FieldName}_AnswerId`; + let ans_key = `${qtn.FieldName}_Answer`; + let multi_key = `${qtn.FieldName}_MultiOption`; + + let list_mcdata = []; + + let NAImage1Path = ''; + + let OTPVerify = + qtn.OTP == 'true' || qtn.OTP == 1 ? true : false; + let minlen = 10; + let maxlen = 10; + + if (qtn.IsFieldShow == 'false') { + return null; + } + + // Trigger onselectionChange if answer is already coming from backend + if ( + qtn?.QuestionType === 'Single choice list' && + qtn?.answer != '' && + qtn?.answer && + !qtn.__triggered // use a custom flag + ) { + qtn.__triggered = true; // prevent infinite loops + + setTimeout(() => { + const selectedOption = { + value: qtn.answer, + label: qtn.answer, + }; + onselectionChange(selectedOption, qtn, index, sectionIndex); + }, 0); + } + + return ( + + + {qtn.DisplayName} + + + {/* {qtn.QuestionType === "Single choice list" && + render_Picker("Name", "Id", onselectionChange, { value: qtn.answer, qtn, sectionIndex,index }) + } */} + + {qtn.QuestionType === 'Single choice list' && ( + + {render_Picker( + 'Name', + 'Id', + onselectionChange, + {value: qtn.answer, qtn, sectionIndex, index}, + qtn.DisableQuestion === 1, + )} + + )} + + {qtn.QuestionType === 'Multi choice list' && ( + + setMultiSelectValue(selectedItems, qtn, window) + } + selectedItems={selansid} + selectText="Pick Items" + searchInputPlaceholderText={`${ST.SearchItems}...`} + tagRemoveIconColor={PageTheme.$primary_color} + tagBorderColor={PageTheme.$primary_color} + tagTextColor={PageTheme.$primary_color} + selectedItemTextColor={PageTheme.$primary_color} + selectedItemIconColor={PageTheme.$primary_color} + itemTextColor={PageTheme.$text_color} + displayKey="Answer" + searchInputStyle={EStyle_Qtn_MultiChoice} + submitButtonColor={PageTheme.$primary_color} + submitButtonText={ST.Submit} + /> + )} + + {/* ******************************stasrt******************************** */} + + + {qtn.QuestionType === 'OTP' && ( + + <> + + { + let sanitizedValue = val; + if (qtn.QuestionType === 'OTP') { + sanitizedValue = val.replace(/[^0-9]/g, ''); + } else if (qtn.QuestionType === 'Decimal') { + sanitizedValue = val.replace(/[^0-9.]/g, ''); + if ((sanitizedValue.match(/\./g) || []).length > 1) { + sanitizedValue = sanitizedValue.replace(/\.+$/, ''); + } + } else if (qtn.QuestionType === 'Text') { + sanitizedValue = val.replace(/[^a-zA-Z0-9 ]/g, ''); + } + setTextValue(sanitizedValue, qtn, sectionIndex, index); + }} + /> + + {/* ✅ Only show the button if length matches AND DisableQuestion !== 1 */} + {String(qtn.answer || '')?.length == minlen && qtn.DisableQuestion !== 1 && ( + { + if (!verifiedOTP && qtn.answer != '') { + Send_OTP(qtn.answer); + } + }} + > + {verifiedOTP ? ( + + {'Verified ✅'} + + ) : ( + + {'Send OTP'} + + )} + + )} + + + {verifiedOTP == false && showotpfeild && ( + + { + setOtp(code); + setPhone(qtn.answer); + }} + numberOfInputs={6} + secureTextEntry={true} + defaultValue="" + keyboardType={'numeric'} + inputStyles={customStyle.verify_otp_inputStyle} + style={customStyle.otp_field} + /> + + )} + + +)} + + + {/* ******************************end *********************************** */} + + {['Number', 'Decimal', 'Text', 'TextSpc', 'Email'].includes( + qtn.QuestionType, + ) && ( + + { + let sanitizedValue = val; + if (qtn.QuestionType === 'Number') { + sanitizedValue = val.replace(/[^0-9]/g, ''); + } else if (qtn.QuestionType === 'Decimal') { + sanitizedValue = val.replace(/[^0-9.]/g, ''); + if ( + (sanitizedValue.match(/\./g) || []).length > 1 + ) { + sanitizedValue = sanitizedValue.replace( + /\.+$/, + '', + ); + } + } else if (qtn.QuestionType === 'Text') { + sanitizedValue = val.replace( + /[^a-zA-Z0-9 ]/g, + '', + ); + } + setTextValue( + sanitizedValue, + qtn, + sectionIndex, + index, + ); + }} + editable={qtn.DisableQuestion !== 1} // Disable editing + /> + + )} + + {qtn.QuestionType === 'Image' && ( + + + {qtn.answer == '' || qtn.answer == null ? ( + { + openCamera( + {sectionIndex, index}, + {}, + 0, + '1', + '3', + ); + }} + disabled={qtn.DisableQuestion === 1} // Disable if disabled + > + + + ) : qtn.answer != '' && qtn.answer != null ? ( + { + // OpenImgModal(qtn.answer, window, {}, 0, '1', '3') + }} + style={[ + qtn.DisableQuestion === 1 && {opacity: 0.5}, + ]} + disabled={qtn.DisableQuestion === 1}> + + + ) : null} + + + )} + + ); + }} + /> + + + { + handleUpload(); + }} + /> + + + + + + ); +} + +const styles = StyleSheet.create({ + container: { + backgroundColor: '#f8f9fa', + padding: 4, + borderRadius: 10, + margin: 10, + borderWidth: 1, + borderColor: '#ddd', + }, + header: { + fontSize: 14, + fontWeight: 'bold', + marginBottom: 10, + color: '#333', + }, + row: { + flexDirection: 'row', + justifyContent: 'space-between', + paddingVertical: 8, + borderBottomWidth: 1, + borderBottomColor: '#eee', + }, + label: { + fontSize: 14, + color: '#555', + flex: 1, // Ensure label takes up available space + }, + status: { + fontSize: 14, + // fontWeight: '200', + flex: 1, // Ensure status takes up available space + textAlign: 'right', // Align status to the right + }, +}); +export default connect(mapStateToProps, mapDispatchToProps)(KycForm); diff --git a/PerformicsSrc/src/screens/KycStoreList.js b/PerformicsSrc/src/screens/KycStoreList.js new file mode 100644 index 0000000..866a304 --- /dev/null +++ b/PerformicsSrc/src/screens/KycStoreList.js @@ -0,0 +1,296 @@ +import React,{useState,useEffect, memo,useCallback} from 'react'; +import Container from '../components/container'; +import { useRoute,useFocusEffect } from '@react-navigation/native'; +import { globalStyles,customStyles,GetPageTheme } from "../styles/Global"; +import {StatusBar,Image,TextInput,View,Text,ScrollView,TouchableOpacity,TouchableHighlight,Platform,PermissionsAndroid,FlatList} from 'react-native'; +import { ReactReduxContext,connect,useSelector, useDispatch } from 'react-redux'; +import { mapStateToProps,mapDispatchToProps } from '../reducers/contextProvider'; +import SQLite from 'react-native-sqlite-2'; +import {notify} from '../components/notify'; +import moment from 'moment'; +import {getDownloadJson,AddStore, checkRange, UploadData2, UploadData, UpdateStoreStatus, getKPIS, marktext1, marktext2, UploadFormData, validateNumber, ValidateEmail} from '../controller/functions'; +import {get_item,set_item,clear_item} from '../components/localStorage'; +import {version,sloganline,appname,testurl,db, AppVersion, common_ImagePath, baseurl} from '../constants/constants'; +import CustomHeader from '../components/customHeader'; +import {AntDesign, Entypo, EvilIcons, Feather, FontAwesome, Fontisto, Ionicons, MaterialCommunityIcons,FontAwesome5} from '../components/icons'; +import CustomLoader from '../components/CustomLoader'; +import LinearGradient from 'react-native-linear-gradient'; +import { _checkLocationPermission } from '../components/geolocation'; + + +import CustomCamera from '../components/Camera'; +import CustomModal from '../components/CustomModal'; + + + +function KycStoreList(props) { + const route = useRoute(); + const ST=props.StaticText || {}; + // get all theme styles acc to current theme set + const PageTheme=GetPageTheme(props.DarkMode,route.name); + const customStyle=customStyles(props.DarkMode,route.name); + + const [loaderTitle, setLoaderTitle] = useState("Loading..."); + const [processing, setProcessing] = useState(false); + const [rerenderdata, setrerenderdata]= useState(0); + const [isAdhocScreen, setIsAdhocScreen] = useState(false); + const [isBeatPlan, setIsBeatPlan] = useState(false); + const [storeData, setStoreData] = useState({}); + + const [PrevStoreList, setPrevStoreList] = useState([]); + const [StoreReason, setStoreReason] = useState([]); + const [storeList, setStoreList] = useState([]); + const [searchedItem, setSearchedItem]= useState(''); + const [globalStorelist, setGlobalStorelist] = useState([]); + + + const [AllFormData, setAllFormData] = useState({}); + const [showCamera, setShowCamera] = useState(false); + + const [hasUnsavedChanges,setHasUnsavedChanges] = useState(false); + + const [IsEnableSubmit,setIsEnableSubmit] = useState(false); + + const [isNonMerchan, setIsNonMerchan] = useState(false); + const [isNonProg, setIsNonProg] = useState(false); + const [filtervalue, setFilterValue] = useState({}); + const [showAlert, setShowAlert] = useState(false); + const [EntryAllow, setEntryAllow] = useState(false); + + const [isDisable, setDisable] = useState(false); + + + + let d1=new Date(); + let today=moment(d1).format('MM/DD/YYYY'); + + + useFocusEffect( + useCallback(() => { + setLoaderTitle(ST.Loading+'...') + let params=props.route.params? props.route.params:{}; + let storeData1=params.storeData || {}; + getData(); // this will reload the store list every time screen is focused + let st2=Object.assign({'test':'1'} , storeData1); + setAllFormData(st2); //Assigning current Store Data to FormData to be filled or changed + }, []) + ); + + + async function getData(storeData1) { + console.log("Function called with date:", today); + + try { + setLoaderTitle(ST.Loading + '...'); + setProcessing(true); + + db.transaction((txn) => { + console.log("Transaction started ✅"); + + let loadQuery = `SELECT distinct K.*,ifnull(T.STORE_ID,0)as Status from KYC_StoreList K left join (SELECT * from KYC_INFO Where VISIT_DATE = ?)as T on K.StoreId = T.STORE_ID Where K.VisitDate =? ` + // let loadQuery = `SELECT * FROM KYC_StoreList WHERE VisitDate = ?`; + console.log("Executing query:", loadQuery); + + txn.executeSql( + loadQuery, + [today,today], + (txn2, txnres) => { + console.log('Query success, rows:', txnres.rows.length); + let stores = []; + + for (let i = 0; i < txnres.rows.length; i++) { + stores.push(txnres.rows.item(i)); + } + + console.log("Loaded stores:", stores); + + setStoreList(stores); + setGlobalStorelist(stores); + setProcessing(false); + console.log("Loaded products:", storeList); + + }, + (txnE, txnerr) => { + console.log('SQL Error:', txnerr); + setProcessing(false); + } + ); + }); + + } catch (err) { + console.log('Catch block error:', err); + setProcessing(false); + } + } + + + + function _render_Alert(){ + return ( + + + + ) + } + async function validate(){ + let isValid=true; + + await Promise.all( + PrevStoreList.map(async (item,index) => { + if(isValid==true){ + if(!Boolean(item.Reason) && item.ReasonId== null || item.ReasonId==''){ + notify('Please select reason for store Id '+item.StoreId,'SHORT'); + isValid=false; + } + } + }) + ); + + console.log('isValid:',isValid); + return isValid; + } + + + + function FilterStores(searchedQry){ + searchedQry=searchedQry.toLowerCase(); + console.log('searchedQry',searchedQry); + // let {storeList}=state; + let arr=[] + if(searchedQry!=null && searchedQry!=''){ + globalStorelist.map((item,index)=>{ + let {StoreName,StoreId,StoreCode}=item; + StoreId=StoreId+''; + if(StoreName.toLowerCase().includes(searchedQry) || StoreCode.toLowerCase().includes(searchedQry) || StoreId.includes(searchedQry)){ + arr.push(item); + } + }); + } + else{ + arr=globalStorelist; + } + setStoreList(arr); + setrerenderdata(!rerenderdata) + } + + + + return ( + + {processing && } + + {_render_Alert()} + {setShowCamera(false);getImage(imgData)}} showCamera={showCamera} onHideCamera={()=>{setShowCamera(false);}}/> + + + + + {setSearchedItem(val); FilterStores(val)}} + /> + {FilterStores(searchedItem)}}> + + + + + + {console.log("storelist--->",storeList)} + {rerenderdata==rerenderdata && storeList?.map((item,index)=>{ + return( + + { + if (item.Status != 0) { + notify("You have already uploaded data for this store."); + } else { + props.navigation.navigate('KycForm', { storeId: item.StoreId }); + } + }}> + + + + + {ST.StoreId+':'} + {item.StoreId} + + + {ST.StoreType+':'} + {item.StoreType} + + + + + {ST.StoreCode+':'} + {item.StoreCode == "undefined"?"":item.StoreCode} + + + + + {'Store Name:'} + {item.StoreName} + + + + + {'City Name:'} + {item.CityName} + + + + + {'Address:'} + {item.Address} + + + + + + + { item.Status != 0 && + + {/* */} + Uploaded + + + } + + + + + ) + }) + } + + + {/* + + + {submit()}}/> + + + */} + + + + ); + } + + + +export default connect(mapStateToProps, mapDispatchToProps)(KycStoreList); \ No newline at end of file diff --git a/PerformicsSrc/src/screens/Login.js b/PerformicsSrc/src/screens/Login.js new file mode 100644 index 0000000..0c2ff9a --- /dev/null +++ b/PerformicsSrc/src/screens/Login.js @@ -0,0 +1,403 @@ +import React, { useState, useEffect, useRef } from 'react'; +import Container from '../components/container'; +import { useRoute } from '@react-navigation/native'; +import CustomButton from '../components/customButton'; +import { globalStyles, customStyles, GetPageTheme } from "../styles/Global"; +import { StatusBar, Image, KeyboardAvoidingView, TextInput, View, Text, ScrollView, TouchableOpacity, Platform, PermissionsAndroid, Animated, Keyboard, Alert } from 'react-native'; +import { ReactReduxContext, connect, useSelector, useDispatch } from 'react-redux'; +import { mapStateToProps, mapDispatchToProps } from '../reducers/contextProvider'; +import { notify } from '../components/notify'; +import moment from 'moment'; +import { login, RestoreProjectInProps, UploadData2 } from '../controller/functions'; +import { get_item, set_item, clear_item } from '../components/localStorage'; +import { version, copyrightText, logoImage } from '../constants/constants'; +import { METHODS, getMethodName } from '../constants/methodNames'; +import { MaterialCommunityIcons } from '../components/icons'; +import Geolocation from 'react-native-geolocation-service'; +import { requestMultiplePerms, _checkLocationPermission } from '../components/geolocation'; +import DeviceInfo from 'react-native-device-info'; +import SplashScreen from 'react-native-bootsplash'; +import CustomLoader from '../components/CustomLoader'; +import GradientButton from '../components/gradientButton'; +import Graphic1 from '../assets/performics/login.svg'; +import Text_eng from '../constants/Text_eng.json'; +import Text_thai from '../constants/Text_thai.json'; +import RNExitApp from 'react-native-exit-app'; +import { widthPercentageToDP } from 'react-native-responsive-screen'; + +function Login(props) { + const route = useRoute(); + // get all theme styles acc to current theme set + const PageTheme = GetPageTheme(props.DarkMode, route.name); + const customStyle = customStyles(props.DarkMode, route.name); + const globalStyle = globalStyles(props.DarkMode, route.name); + const [state, setState] = useState({ username: '', password: '', showPass: false, location: { lat: '', lng: '' } }); + const [processing, setProcessing] = useState(false); + const animatedEffects = useRef(new Animated.Value(0)).current; + const [deviceToken, setDeviceToken] = useState({ + android_token: '', + ios_token: '', + }); + + useEffect(() => { + SplashScreen.hide(); + requestMultiplePerms(); // check for permissions + RestoreProjectInProps(props); + const keyboardDidShowListener = Keyboard.addListener( + 'keyboardDidShow', + () => { + Animated.timing(animatedEffects, { + toValue: 1, + duration: 400, + useNativeDriver: (Platform.OS == 'ios' ? false : true), + }).start(); + } + ); + const keyboardDidHideListener = Keyboard.addListener( + 'keyboardDidHide', + () => { + Animated.timing(animatedEffects, { + toValue: 0, + duration: 400, + useNativeDriver: (Platform.OS == 'ios' ? false : true), + }).start(); + } + ); + return () => { + keyboardDidHideListener.remove(); + keyboardDidShowListener.remove(); + }; + }, []); + + function onRemoveScreen(e) { + Alert.alert( + "", + "Your Device Date and Time is not correct. Please correct and restart App.", + [ + { + // text: "Cancel", + // onPress: () => {}, + // style: "cancel" + }, + { + text: "OK", onPress: async () => { + RNExitApp.exitApp(); + } + } + ] + ); + } + + + + //Login failed info + const uploadFailedLoginInfo = async (data) => { + try { + const urlwith_m = props.baseurl + getMethodName(METHODS.UPLOADJSON_METHOD); + let user_info = []; + // Add extra columns here + data.version = version; + data.projectcode = props.projectCode; + user_info.push(data); + console.log("user_info", user_info); + let post_data = { + MID: "0", + Keys: "Failed_Login_Info", + JsonData: JSON.stringify(user_info), + UserId: data.un + }; + console.log("post_data", post_data); + const res = await UploadData2(urlwith_m, post_data); + console.log('res: 12', res); + if (res?.UploadJsonDirectResult === "Success") { + notify("Error login info uploaded Successfully."); + } else { + notify(res?.UploadJsonDirectResult); + } + setProcessing(false); + } catch (err) { + console.log(err); + setProcessing(false); + } + }; + + + async function _getCurrentLocation() { + console.log('_getCurrentLocation:'); + const hasPermission = await _checkLocationPermission(); + console.log('hasPermission:', hasPermission); + if (!hasPermission) { + notify('Please allow location permission to login'); + return; + } + Geolocation.getCurrentPosition( + async (position) => { + console.log('Got location:', position.coords); + const loc = { + lat: position.coords.latitude.toString(), + lng: position.coords.longitude.toString(), + }; + setState({ ...state, location: loc }); + await userlogin(loc); + }, + (error) => { + console.log('Location error:', error); + notify('Cannot get user position'); + // fallback if GPS fails + userlogin({ lat: '0', lng: '0' }); + }, + { enableHighAccuracy: false, distanceFilter: 0, interval: 1000, fastestInterval: 2000, timeout: 10000, maximumAge: 10000 , forceRequestLocation: true} + ); + } + + + + const userlogin = async (loc) => { + const { username, password } = state; + let params = props.route.params ? props.route.params : {}; + let forgotMpin = params.forgotMpin || ''; + let loginInfo = await get_item('loginInfo'); + let loginDetails = {} + if (loginInfo != null && loginInfo != "") { + loginDetails = JSON.parse(loginInfo); + // loginDetails.UserId + } + if (validate(forgotMpin, loginDetails)) { + setProcessing(true); + // clear_item('islogin'); clear_item('loginToken'); + // clear_item('loginOfDays'); + // clear_item('login_credentials'); + // clear_item('loginInfo'); + Promise.all([ + clear_item('islogin'), + clear_item('loginToken'), + clear_item('loginOfDays'), + clear_item('login_credentials'), + clear_item('loginInfo') + ]); + let [manufacturer, os, imeiNo1] = await Promise.all([ + DeviceInfo.getManufacturer(), + DeviceInfo.getSystemVersion(), + DeviceInfo.getAndroidId() + ]); + const todate = new Date(); + const today = moment(todate).format("HH:mm:ss"); + // let manufacturer = await DeviceInfo.getManufacturer(); + let model = await DeviceInfo.getDeviceName(); + // let os = DeviceInfo.getSystemVersion(); + // let imeiNo1 = await DeviceInfo.getAndroidId(); + let projectInfo = await get_item('projectInfo'); + let projectDetails = projectInfo != null ? JSON.parse(projectInfo) : {}; + let baseurl = projectDetails.baseURL || ''; + const data = { un: username, pass: password, Intime: today, lat: loc.lat, lng: loc.lng, manufacturer: manufacturer, model: model, os: os, imeiNo1: imeiNo1, imeiNo2: imeiNo1 }; + const method_name = getMethodName(METHODS.LOGIN_METHOD); + const url = baseurl + method_name; + console.log(url, data) + await login(url, data) + .then(async (res) => { + setProcessing(false); + if (res.networkErr && res.error) { + notify('Please connect to internet-' + res.error, 'SHORT'); + } else if (!res.false && res.error) { + notify(res.error, 'SHORT'); + await uploadFailedLoginInfo(data); + } else if (res.UserId) { + notify('Login Success', 'SHORT'); + //set login info in global reducer + const pdata = { islogin: true, UserId: res.UserId, SecurityToken: '', sessionData: res }; + props.set_session(pdata); + props.set_VisitDate({ VisitDate: res.VisitDate }) + let country = res.CountryId != null ? res.CountryId + '' : ''; + //set login info in encryted local storage + set_item('islogin', 'done'); + let credentials = { 'un': username, 'pass': password }; + // set_item('login_credentials', JSON.stringify(credentials)); + // set_item('UserCountry', country); + // set_item('loginToken', res.UserId); + // set_item('loginInfo', JSON.stringify(res)); + Promise.all([ + set_item('login_credentials', JSON.stringify(credentials)), + set_item('UserCountry', country), + set_item('loginToken', res.UserId), + set_item('loginInfo', JSON.stringify(res)), + ]); + let lngJson = country == '2' ? Text_thai : Text_eng; + props.setStaticText(lngJson) + // open login screen + let routename = 'Mpin'; + let mpin = await get_item('mpin'); + if (mpin != '' && mpin != null && mpin != undefined) { + routename = 'NoticeBoard'; + } + props.navigation.reset({ index: 0, routes: [{ name: routename }], }); + } + else { + notify('Cannot login! Something went wrong', 'SHORT'); + ///upload login creds if login not successed + await uploadFailedLoginInfo(data); + } + }).catch((err) => { + setProcessing(false); + console.log('onPage Login error1', err); + }); + } + } + + const validate = (forgotMpin = "", loginDetails = {}) => { + const { username, password } = state; + + if (username.trim().length == 0) { + notify('Please enter username', 'SHORT'); + return false; + } + + if (password.trim().length == 0) { + notify('Please enter password', 'SHORT'); + return false; + } + + if (forgotMpin == '1' && loginDetails != null && loginDetails.UserId != '' && loginDetails.UserId != null && username.toLowerCase().trim() != loginDetails.UserId.toLowerCase().trim()) { + notify('Please enter same username', 'SHORT'); + return false; + } + + return true; + } + + const showPassword = () => { + const { showPass } = state; + setState({ ...state, showPass: !showPass }); + } + + function _renderAnimPart() { + let cl_scale = 1, cl_ty = 0, pl_scale = 1, illus_scale = 1, illus_ty = 0, formty = 0; + if (animatedEffects != null) { + pl_scale = animatedEffects.interpolate({ + inputRange: [0, 1], + outputRange: [1, 0.7], + }); + cl_scale = animatedEffects.interpolate({ + inputRange: [0, 1], + outputRange: [1, 0.6], + }); + cl_ty = animatedEffects.interpolate({ + inputRange: [0, 1], + outputRange: [0, -40], + }); + illus_scale = animatedEffects.interpolate({ + inputRange: [0, 1], + outputRange: [1, 0.5], + }); + illus_ty = animatedEffects.interpolate({ + inputRange: [0, 1], + outputRange: [0, -160], + }); + formty = animatedEffects.interpolate({ + inputRange: [0, 1], + outputRange: [0, -130], + }); + } + return ( + + + + + {props.companylogo != null && props.companylogo != '' && } + + + + + + Hey There + Login to your account + + + setState({ ...state, username: val })} + /> + + + + setState({ ...state, password: val })} + onSubmitEditing={(val) => { _getCurrentLocation(); }} + /> + + + {state.showPass && } + {!state.showPass && } + + + + {props?.forget_Password_on_LoginPage == true && + + props.navigation.reset({ index: 0, routes: [{ name: 'ForgotPassword' }] })}> + Forgot Password? + + + } + + + ) + } + + return ( + + {processing && } + + + {_renderAnimPart()} + + + { _getCurrentLocation(); }} /> + + {version} + {copyrightText} + + + + + ); +} + +export default connect(mapStateToProps, mapDispatchToProps)(Login) \ No newline at end of file diff --git a/PerformicsSrc/src/screens/MiddayStock.js b/PerformicsSrc/src/screens/MiddayStock.js new file mode 100644 index 0000000..cc39968 --- /dev/null +++ b/PerformicsSrc/src/screens/MiddayStock.js @@ -0,0 +1,1581 @@ +import React, { useState, useEffect, useRef } from 'react'; +import Container from '../components/container'; +import { useRoute } from '@react-navigation/native'; +import { customStyles, GetPageTheme } from "../styles/Global"; +import { TextInput, View, Text, TouchableOpacity, FlatList, Alert, KeyboardAvoidingView, Animated, AppState, Platform, Keyboard } from 'react-native'; +import { connect, } from 'react-redux'; +import { mapStateToProps, mapDispatchToProps } from '../reducers/contextProvider'; +import { notify } from '../components/notify'; +import moment from 'moment'; +import { checkMDStockScreenExists, getKPIFields, getKPIFieldsWithSpecific, validateNumber } from '../controller/functions'; +import { get_item, set_item, clear_item } from '../components/localStorage'; +import { db, } from '../constants/constants'; +import CustomHeader from '../components/customHeader'; +import { AntDesign, Entypo } from '../components/icons'; +import CustomLoader from '../components/CustomLoader'; +import LinearGradient from 'react-native-linear-gradient'; +import { AppTables } from '../constants/tableConstants'; +import GradientButton from '../components/gradientButton'; +import CustomModal from '../components/CustomModal'; +import { CustomPicker } from '../components/CustomPicker'; +import { ConfirmSaveAlert } from '../components/alert'; + +function MiddayStock(props) { + const route = useRoute(); + const ST = props.StaticText || {}; + // get all theme styles acc to current theme set + const PageTheme = GetPageTheme(props.DarkMode, route.name); + const customStyle = customStyles(props.DarkMode, route.name); + const [processing, setProcessing] = useState(true); + const [loaderTitle, setLoaderTitle] = useState(ST.Loadingwithdots); + const [isAdhocScreen, setIsAdhocScreen] = useState(false); + const [storeData, setStoreData] = useState({}); + const [currentMenu, setCurrentMenu] = useState({}); + const [brandData, setBrandData] = useState([]); + const [rerenderdata, setrerenderdata] = useState(0); + const [rerenderdata2, setrerenderdata2] = useState(0); + const [SKUStockData, setSKUStockData] = useState([]); + const [showAlert, setShowAlert] = useState(false); + const [hasUnsavedChanges, setHasUnsavedChanges] = useState(false); + const [KPIFields, setKPIFields] = useState([]); + const [KPIFieldsWithoutFilter, setKPIFieldsWithoutFilter] = useState([]); + const [isMiddayStockReceived, setIsMiddayStockReceived] = useState(0); + const animatedChoice = useRef(new Animated.Value(0)).current; + const hasUnsavedChangesRef = React.useRef(hasUnsavedChanges); + const WindowDataRef = React.useRef(SKUStockData); + const StoreIdRef = React.useRef(null); + const ScreenNameRef = React.useRef(''); + const isMiddayStockRef = React.useRef(isMiddayStockReceived); + //filter states + const [globalBrandData, setGlobalBrandData] = useState([]); + const [filtervalue, setFilterValue] = useState({}); + const [catfilter, setcatFilter] = useState([]); + const [subcatfilter, setsubcatFilter] = useState([]); + const [brandfilter, setbrandFilter] = useState([]); + const [searchedItem, setSearchedItem] = useState(''); + const defCat = { "CategoryId": "", "CategoryName": "-Select-" }; + const defSubCat = { 'SubCategoryId': "", 'SubCategoryName': "-Select-" }; + const defBrand = { 'BrandId': "", 'BrandName': "-Select-" }; + // error field states + const [errorfield, setErrorField] = useState({}); + const [error, setError] = useState(false); + const [searchedmiddyItem, setSearchedMiddyItem] = useState(''); + const [filterData, setFilterData] = useState([]); + const [showRAllC_M, setShowRAllC_M] = useState(false); + const handleSearch = text => { + setSearchedMiddyItem(text); + const filteredList = brandData[0].skulist?.filter(item => { + console.log(item?.ProductName, 'item....JJJj....'); + return ( + item?.ProductName?.toLowerCase()?.includes(text?.toLowerCase()) + // || item?.ChildName?.toLowerCase()?.includes(text?.toLowerCase()) + ); + }); + setFilterData(filteredList); + }; + const inputRefs = useRef({}); + const d1 = new Date(); + const d2 = moment(d1).format('MM/DD/YYYY'); + // ✅ single object state for all colors + const [MSLDataInfo, setMSLDataInfo] = useState({ + Color_MSL: "", + isMSLProduct: false, + Color_NONMSL: "", + isNonMSLProduct: false, + Color_Competition: "", + isCompProduct: false + }); + + useEffect(() => { + let params = props.route.params ? props.route.params : {}; + let storeData1 = params.storeData || {}; + let menu1 = params.menu || {}; + + let isAdhoc = params.isAdhoc || false; + setIsAdhocScreen(isAdhoc); + setStoreData(storeData1); + setCurrentMenu(menu1); + + StoreIdRef.current = storeData1.StoreId + ScreenNameRef.current = menu1.ScreenName + getData(storeData1, menu1); + + const AppStateSubscription = AppState.addEventListener('change', (pro) => { _handleAppStateChange(pro) }); + const unsubscribe = props.navigation.addListener('beforeRemove', onBeforeRemove); + + return function cleanup() { + AppStateSubscription.remove(); + // AppState.removeEventListener('change', (pro)=>{ _handleAppStateChange(SKUStockData,pro)}); + return unsubscribe; + }; + }, []); + + const _handleAppStateChange = async (nextAppState) => { + if (nextAppState == 'background' && hasUnsavedChangesRef.current == true) { + let newData = { + storeBGData: WindowDataRef.current, + menuName: ScreenNameRef.current, + StoreId1: StoreIdRef.current, + isMiddayStockReceived1: isMiddayStockRef.current, + visiteDate: d2 + } + let WindowsStr = JSON.stringify(newData) + await set_item('storeData', WindowsStr); + } + } + + + useEffect(() => { + const unsubscribe = props.navigation.addListener('beforeRemove', onBeforeRemove); + return unsubscribe; + }, [hasUnsavedChanges]); + + function onBeforeRemove(e) { + if (hasUnsavedChanges == true) { + e.preventDefault(); // Prevent default behavior of leaving the screen + onRemoveScreen(e); + } + else { + return; + } + } + + function BgUnsavedChanges(val) { + hasUnsavedChangesRef.current = val + setHasUnsavedChanges(val); + } + + function BgWindowData(val) { + WindowDataRef.current = val + setSKUStockData(val); + } + + function BgisMiddayRec(val) { + isMiddayStockRef.current = val + setIsMiddayStockReceived(val); + } + + function onRemoveScreen(e) { + Alert.alert( + "", + ST.Doyoureallywanttoexitthescreen, + [ + { + text: ST.Cancel, + onPress: () => { }, + style: "cancel" + }, + { + text: ST.Ok, onPress: async () => { + // setHasUnsavedChanges(false); + BgUnsavedChanges(false) + await clear_item('storeData') + props.navigation.dispatch(e.data.action); + } + } + ] + ); + } + + async function getData(storeData1, menu1) { + try { + let { StoreId } = storeData1; + let allCats = []; + let AllKPIFields = await getKPIFields(menu1); + setKPIFields(AllKPIFields); + let AllKPIFieldsWithoutFilter = await getKPIFieldsWithSpecific(); + setKPIFieldsWithoutFilter(AllKPIFieldsWithoutFilter) + ///get MSL Info + const result = await fetchDataFromDB(storeData1, AllKPIFieldsWithoutFilter, AllKPIFields); + setMSLDataInfo(result) + await db.transaction(async function (txn) { + let join = ' INNER join Product_Master p on c.CategoryId=p.CategoryId '; + let join2 = ` INNER join Mapping_ProductAssortmentStorewise mp on p.ProductId=mp.ProductId `; + let q = `SELECT DISTINCT c.CategoryId,c.CategoryName,'' as MSL from Master_Category c ${join} ${join2} where mp.StoreId='${StoreId}' order by p.CategorySequence`; + await txn.executeSql(q, [], async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + let arr = [], arr2 = [defCat]; + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + let catobj = { "CategoryId": data.CategoryId, "CategoryName": data.CategoryName } + arr.push(data); + arr2.push(catobj); + if (i == txnres2.rows.length - 1) { + setcatFilter(arr2); + setrerenderdata(!rerenderdata); + getSKU(arr, storeData1, menu1); + } + } + + } + }, function (txnE, txnerr) { console.log(txnerr); },); + }); + } catch (err) { + console.log(err); + } + } + + async function getSKU(brands = [], storeData1 = {}, menu1 = {}) { + try { + let { StoreId, } = storeData1; + let isExpStock1Index = KPIFields.findIndex(i => i.KPIFieldName == 'ExpiryStock1') + let isExpStock1PIObj = isExpStock1Index >= 0 ? KPIFields[isExpStock1Index] : {}; + let isExpStock1Enable = isExpStock1Index >= 0 ? isExpStock1PIObj['KPIFieldEnable'] : false; + let isExpStock2Index = KPIFields.findIndex(i => i.KPIFieldName == 'ExpiryStock2') + let isExpStock2PIObj = isExpStock2Index >= 0 ? KPIFields[isExpStock2Index] : {}; + let isExpStock2Enable = isExpStock2Index >= 0 ? isExpStock2PIObj['KPIFieldEnable'] : false; + let isExpStock3Index = KPIFields.findIndex(i => i.KPIFieldName == 'ExpiryStock3') + let isExpStock3PIObj = isExpStock3Index >= 0 ? KPIFields[isExpStock3Index] : {}; + let isExpStock3Enable = isExpStock3Index >= 0 ? isExpStock3PIObj['KPIFieldEnable'] : false; + + let isExpStock4Index = KPIFields.findIndex(i => i.KPIFieldName == 'ExpiryStock4') + let isExpStock4PIObj = isExpStock4Index >= 0 ? KPIFields[isExpStock4Index] : {}; + let isExpStock4Enable = isExpStock4Index >= 0 ? isExpStock4PIObj['KPIFieldEnable'] : false; + + let isStockCalculateIndex = KPIFields.findIndex(i => i.KPIFieldName == 'StockCalculate') + let isStockCalculatePIObj = isStockCalculateIndex >= 0 ? KPIFields[isStockCalculateIndex] : {}; + let isStockCalculateEnable = isStockCalculateIndex >= 0 ? isStockCalculatePIObj['KPIFieldEnable'] : false; + let arr2 = [defSubCat]; + let arr3 = [defBrand]; + var allSKUData = [], storeBGData1 = [], isMiddayStockReceived2 = 0, bgStoreJson = {}, isBgDataExists = false; + let windData = await get_item('storeData') + if (windData != null && windData != '') { + let StoreJson = JSON.parse(windData) + let { storeBGData, menuName, StoreId1, isMiddayStockReceived1, visiteDate } = StoreJson + if (storeBGData.length > 0 && menuName == menu1.ScreenName && StoreId1 == StoreId && visiteDate == d2) { + isBgDataExists = true; + isMiddayStockReceived2 = isMiddayStockReceived1 + storeBGData1 = storeBGData; + bgStoreJson = StoreJson + BgUnsavedChanges(true) + BgWindowData(storeBGData); + } + } + + await db.transaction(async function (txn) { + await Promise.all( + brands.map(async (item, index) => { + let leftjoin = ` Left Outer join (select * from ${AppTables.SALES} where CATEGORY_ID='${item.CategoryId}' and STORE_ID='${StoreId}' and VISIT_DATE='${d2}' group by PRODUCT_ID ) sl on sl.PRODUCT_ID=p.ProductId`; + let join = ` inner join Mapping_ProductAssortmentStorewise m on p.ProductId=m.ProductId `; + let join2 = ` inner join Master_Category mc on mc.CategoryId=p.CategoryId `; + let sku_q2 = `select distinct ifnull(sl.STOCK,'') as SALE_stock,p.ProductName,p.ProductId,p.SubCategoryName, p.SubCategoryId,p.BrandName,p.BrandId,m.MSL,m.ArticleCode,p.IsCompetitor from Product_Master p ${join} ${join2} ${leftjoin} where m.StoreId='${StoreId}' and (p.CategoryId='${item.CategoryId}' or p.CategoryId= ${item.CategoryId}) and (CompanyId='1' or CompanyId=1) ORDER BY m.MSL desc, p.IsCompetitor ASC, p.ProductName ASC`; + + let seletlist = `distinct ifnull(sl.STOCK,'') as SALE_stock,s.MIDDAY_EXPIRYSTOCK1,s.MIDDAY_EXPIRYSTOCK2,s.MIDDAY_EXPIRYSTOCK3,s.MIDDAY_EXPIRYSTOCK4,s.PRODUCT as ProductName,s.PRODUCT_ID as ProductId,s.MSL,s.ARTICLE_CODE,s.MIDDAY_STOCK,s.OPENING_STOCK,s.EXPIRYSTOCK1,s.EXPIRYSTOCK2,s.EXPIRYSTOCK3,s.EXPIRYSTOCK4 ,s.CLOSING_STOCK,s.EXPIRY_ISOPEN,s.EXPIRY_STK,s.ISMDST_PRESENT,p.SubCategoryName, p.SubCategoryId,p.BrandName,p.BrandId,p.IsCompetitor `; + let join4 = `inner join Product_Master p on s.PRODUCT_ID=p.ProductId`; + let sku_q = `SELECT ${seletlist} FROM ${AppTables.STOCK_DATA} s ${join4} ${leftjoin} WHERE s.STORE_ID='${StoreId}' and s.VISIT_DATE='${d2}' and s.CATEGORY_ID='${item.CategoryId}' ORDER BY s.MSL desc, p.IsCompetitor ASC, p.ProductName ASC `; + + return await txn.executeSql(sku_q, [], async function (txn2, txnres) { + if (txnres.rows.length > 0) { + let arr = []; + let IsMidDayPresent = 0; + for (var i = 0; i < txnres.rows.length; i++) { + let data = txnres.rows.item(i); + if (!isStockCalculateEnable) { + inputRefs.current['input1_' + item.CategoryId + '_' + data.ProductId] = ''; + } + if (isExpStock1Enable) { + inputRefs.current['input2_' + item.CategoryId + '_' + data.ProductId] = ''; + } + + if (isExpStock2Enable) { + inputRefs.current['input3_' + item.CategoryId + '_' + data.ProductId] = ''; + } + + if (isExpStock3Enable) { + inputRefs.current['input4_' + item.CategoryId + '_' + data.ProductId] = ''; + } + if (isExpStock4Enable) { + inputRefs.current['input5_' + item.CategoryId + '_' + data.ProductId] = ''; + } + + arr.push(data); + + let subcatIndex = arr2.findIndex(i => i.SubCategoryId == data.SubCategoryId) + let subcatobj = { 'SubCategoryId': data.SubCategoryId, 'SubCategoryName': data.SubCategoryName } + if (subcatIndex < 0) { + arr2.push(subcatobj); + + } + + let subbrandIndex = arr3.findIndex(i => i.BrandId == data.BrandId) + let subbrandobj = { 'BrandId': data.BrandId, 'BrandName': data.BrandName } + if (subbrandIndex < 0) { + arr3.push(subbrandobj); + + } + + let { menuName, StoreId1, visiteDate } = bgStoreJson + if (isBgDataExists) { + IsMidDayPresent = (isMiddayStockReceived2 == 1 || isMiddayStockReceived2 == '1') ? 1 : 0; + } else { + if (i == 0 && isMiddayStockReceived == 0) { + console.log("data.ISMDST_PRESENT:", data.ISMDST_PRESENT); + IsMidDayPresent = data.ISMDST_PRESENT == '1' ? 1 : 0; + } + } + let defData = { 'CategoryId': item.CategoryId, 'ProductId': data.ProductId, 'MiddayStock': data.MIDDAY_STOCK, 'MIDDAY_ExpiryStock1': data.MIDDAY_EXPIRYSTOCK1, 'MIDDAY_ExpiryStock2': data.MIDDAY_EXPIRYSTOCK2, 'MIDDAY_ExpiryStock3': data.MIDDAY_EXPIRYSTOCK3, 'MIDDAY_ExpiryStock4': data.MIDDAY_EXPIRYSTOCK4, 'SALE_stock': data.SALE_stock }; + allSKUData.push(defData); + if (i == txnres.rows.length - 1) { + item['skulist'] = arr; + brands[index] = item; + if (index == brands.length - 1) { + + console.log('IsMidDayPresent:', IsMidDayPresent); + Animated.timing(animatedChoice, { + toValue: IsMidDayPresent, + duration: 400, + useNativeDriver: false, + }).start(); + BgisMiddayRec(IsMidDayPresent) + + if (!isBgDataExists) { + BgWindowData(allSKUData) + } + + setBrandData(brands); + setGlobalBrandData(brands); + setsubcatFilter(arr2); + setbrandFilter(arr3); + setProcessing(false); + } + return item; + } + } + } + else { + return await txn.executeSql(sku_q2, [], async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + let arr = []; + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + if (!isStockCalculateEnable) { + inputRefs.current['input1_' + item.CategoryId + '_' + data.ProductId] = ''; + } + if (isExpStock1Enable) { + inputRefs.current['input2_' + item.CategoryId + '_' + data.ProductId] = ''; + } + if (isExpStock2Enable) { + inputRefs.current['input3_' + item.CategoryId + '_' + data.ProductId] = ''; + } + if (isExpStock3Enable) { + inputRefs.current['input4_' + item.CategoryId + '_' + data.ProductId] = ''; + } + if (isExpStock4Enable) { + inputRefs.current['input5_' + item.CategoryId + '_' + data.ProductId] = ''; + } + arr.push(data); + let subcatIndex = arr2.findIndex(i => i.SubCategoryId == data.SubCategoryId) + let subcatobj = { 'SubCategoryId': data.SubCategoryId, 'SubCategoryName': data.SubCategoryName } + if (subcatIndex < 0) { + arr2.push(subcatobj); + } + let subbrandIndex = arr3.findIndex(i => i.BrandId == data.BrandId) + let subbrandobj = { 'BrandId': data.BrandId, 'BrandName': data.BrandName } + if (subbrandIndex < 0) { + arr3.push(subbrandobj); + + } + if (i == (txnres2.rows.length - 1)) { + item['skulist'] = arr; + brands[index] = item; + if (index == brands.length - 1) { + if (!isBgDataExists) { + BgWindowData(allSKUData) + } else { + let IsMidDayPresent = (isMiddayStockReceived2 == 1 || isMiddayStockReceived2 == '1') ? 1 : 0; + Animated.timing(animatedChoice, { + toValue: IsMidDayPresent, + duration: 400, + useNativeDriver: false, + }).start(); + BgisMiddayRec(IsMidDayPresent) + } + setBrandData(brands); + setGlobalBrandData(brands); + setsubcatFilter(arr2); + setbrandFilter(arr3); + setProcessing(false); + } + return item; + } + } + } + else { + return item; + } + }, function (txnE, txnerr) { console.log(txnerr); setProcessing(false); return item; },); + } + }, function (txnE, txnerr) { console.log(txnerr); setProcessing(false); return item; },); + return item; + }) + ); + }); + } catch (err) { + console.log(err); + } + } + + async function focusToNext(cat, sku, type = '1') { + let activeKey = ''; + let arr = Object.keys(inputRefs.current); + activeKey = 'input' + type + '_' + cat.CategoryId + '_' + sku.ProductId; + let activeIndex = arr.indexOf(activeKey); + if (activeIndex < arr.length - 1) { + let nextKey = arr[++activeIndex] + let nextRef = inputRefs.current[nextKey]; + console.log("nextKey", nextKey, nextRef, inputRefs.current[nextKey]) + nextRef.focus(); + } + else { + return + } + } + + async function submitOpeningStock() { + let isvalid = await validate(); + if (isvalid) { + Keyboard.dismiss(); + setShowAlert(true); + } + } + + async function saveData() { + BgUnsavedChanges(false) + setShowAlert(false); + setLoaderTitle(ST.SavingData + '...'); + setProcessing(true); + let isExpStock1Index = KPIFields.findIndex(i => i.KPIFieldName == 'ExpiryStock1') + let isExpStock1PIObj = isExpStock1Index >= 0 ? KPIFields[isExpStock1Index] : {}; + let isExpStock1Enable = isExpStock1Index >= 0 ? isExpStock1PIObj['KPIFieldEnable'] : false; + let isExpStock2Index = KPIFields.findIndex(i => i.KPIFieldName == 'ExpiryStock2') + let isExpStock2PIObj = isExpStock2Index >= 0 ? KPIFields[isExpStock2Index] : {}; + let isExpStock2Enable = isExpStock2Index >= 0 ? isExpStock2PIObj['KPIFieldEnable'] : false; + let isExpStock3Index = KPIFields.findIndex(i => i.KPIFieldName == 'ExpiryStock3') + let isExpStock3PIObj = isExpStock3Index >= 0 ? KPIFields[isExpStock3Index] : {}; + let isExpStock3Enable = isExpStock3Index >= 0 ? isExpStock3PIObj['KPIFieldEnable'] : false; + let isExpStock4Index = KPIFields.findIndex(i => i.KPIFieldName == 'ExpiryStock4') + let isExpStock4PIObj = isExpStock4Index >= 0 ? KPIFields[isExpStock4Index] : {}; + let isExpStock4Enable = isExpStock4Index >= 0 ? isExpStock4PIObj['KPIFieldEnable'] : false; + let isStockCalculateIndex = KPIFields.findIndex(i => i.KPIFieldName == 'StockCalculate') + let isStockCalculatePIObj = isStockCalculateIndex >= 0 ? KPIFields[isStockCalculateIndex] : {}; + let isStockCalculateEnable = isStockCalculateIndex >= 0 ? isStockCalculatePIObj['KPIFieldEnable'] : false; + + try { + let { StoreId, } = storeData; + await db.transaction(async function (txn) { + console.log("isMiddayStockReceived:", isMiddayStockReceived); + if (isMiddayStockReceived == 0) { + let q = `UPDATE ${AppTables.STOCK_DATA} SET MIDDAY_STOCK='0',ISMDST_PRESENT='${isMiddayStockReceived}' WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}'` + await txn.executeSql(q, [], async function (txn2, txnres) { + afterUpdate(); + }, function (txnE, txnerr) { console.log(txnerr); notify(ST.OopsErroroccurwhileupdatingMiddayStock); },); + } + else { + + let q = `SELECT DISTINCT KEY_ID,CATEGORY_ID FROM ${AppTables.INSERT_OPENINGHEADER_DATA} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}'` + await txn.executeSql(q, [], async function (txn2, txnres) { + if (txnres.rows.length > 0) { + for (var i = 0; i < txnres.rows.length; i++) { + let catdata = txnres.rows.item(i); + let c_index = i; + let q2 = `SELECT * FROM ${AppTables.STOCK_DATA} WHERE CATEGORY_ID='${catdata.CATEGORY_ID}' and STORE_ID='${StoreId}' and VISIT_DATE='${d2}'` + + await txn.executeSql(q2, [], async function (txn2, txnres2) { + // console.log("Products count:",catdata.CATEGORY_ID,txnres2.rows.length); + if (txnres2.rows.length > 0) { + for (var j = 0; j < txnres2.rows.length; j++) { + let skuData = txnres2.rows.item(j); + let p_index = j, new_q = ""; + let thisCatSkuData_i = SKUStockData.findIndex(ci => ci.CategoryId == catdata.CATEGORY_ID && ci.ProductId == skuData.PRODUCT_ID); + let thisCatSkuData = thisCatSkuData_i >= 0 ? (SKUStockData[thisCatSkuData_i] || {}) : {}; + let md_Stock = thisCatSkuData.MiddayStock != null && thisCatSkuData.MiddayStock != '' ? thisCatSkuData.MiddayStock : '0'; + + let expStock1 = isExpStock1Enable == true ? (thisCatSkuData['MIDDAY_ExpiryStock1'] != null ? thisCatSkuData['MIDDAY_ExpiryStock1'] : '0') : '0'; + let expStock2 = isExpStock2Enable == true ? (thisCatSkuData['MIDDAY_ExpiryStock2'] != null ? thisCatSkuData['MIDDAY_ExpiryStock2'] : '0') : '0'; + let expStock3 = isExpStock3Enable == true ? (thisCatSkuData['MIDDAY_ExpiryStock3'] != null ? thisCatSkuData['MIDDAY_ExpiryStock3'] : '0') : '0'; + let expStock4 = isExpStock4Enable == true ? (thisCatSkuData['MIDDAY_ExpiryStock4'] != null ? thisCatSkuData['MIDDAY_ExpiryStock4'] : '0') : '0'; + + console.log("Products Stock:", catdata.CATEGORY_ID, skuData.PRODUCT_ID, md_Stock); + + if (isStockCalculateEnable) { + let StockData = parseInt(expStock1) + parseInt(expStock2) + parseInt(expStock3) + parseInt(expStock4) + new_q = `UPDATE ${AppTables.STOCK_DATA} SET MIDDAY_STOCK='${(StockData || '0')}',ISMDST_PRESENT='${isMiddayStockReceived}', MIDDAY_EXPIRYSTOCK1=='${expStock1}',MIDDAY_EXPIRYSTOCK2=='${expStock2}',MIDDAY_EXPIRYSTOCK3=='${expStock3}',MIDDAY_EXPIRYSTOCK4=='${expStock4}' WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' and CATEGORY_ID='${catdata.CATEGORY_ID}' and PRODUCT_ID='${skuData.PRODUCT_ID}' `; + } else { + new_q = `UPDATE ${AppTables.STOCK_DATA} SET MIDDAY_STOCK='${(md_Stock || '0')}',ISMDST_PRESENT='${isMiddayStockReceived}' WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' and CATEGORY_ID='${catdata.CATEGORY_ID}' and PRODUCT_ID='${skuData.PRODUCT_ID}' `; + } + + await txn.executeSql(new_q, [], async function (txn2, txnres3) { + + if (c_index == txnres.rows.length - 1 && p_index == txnres2.rows.length - 1) { + afterUpdate(); + } + }, function (txnE, txnerr) { console.log(txnerr); notify(ST.OopsErroroccurwhileupdatingMiddayStock) },); + } + } else { + if (c_index == txnres.rows.length - 1) { + setProcessing(false); + } + } + }, function (txnE, txnerr) { console.log(txnerr); },); + } + } + else { + setProcessing(false); + } + }, function (txnE, txnerr) { console.log(txnerr); },); + } + }); + } catch (err) { + console.log(err); + } + } + + async function afterUpdate() { + setProcessing(false); + notify(ST.MiddayStockupdatedsuccessfully); + props.navigation.goBack(); + } + + + async function validate() { + let isValid = true, isAnyFilled = false; + var i = 0, j = 0, error_Type = ""; + let isMdStockMandIndex = KPIFields.findIndex(i => i.KPIFieldName == 'MidDayStockMandatory') + let isMdStockMandKPIObj = isMdStockMandIndex >= 0 ? KPIFields[isMdStockMandIndex] : {}; + let isMdStockMandEnable = isMdStockMandIndex >= 0 ? isMdStockMandKPIObj['KPIFieldEnable'] : true; + + let isExpStock1Index = KPIFields.findIndex(i => i.KPIFieldName == 'ExpiryStock1') + let isExpStock1PIObj = isExpStock1Index >= 0 ? KPIFields[isExpStock1Index] : {}; + let isExpStock1Enable = isExpStock1Index >= 0 ? isExpStock1PIObj['KPIFieldEnable'] : false; + let isExpStock1DisplayName = isExpStock1Index >= 0 ? isExpStock1PIObj['KPIFieldDisplayName'] : "ExpStock 1"; + + let isExpStock2Index = KPIFields.findIndex(i => i.KPIFieldName == 'ExpiryStock2') + let isExpStock2PIObj = isExpStock2Index >= 0 ? KPIFields[isExpStock2Index] : {}; + let isExpStock2Enable = isExpStock2Index >= 0 ? isExpStock2PIObj['KPIFieldEnable'] : false; + let isExpStock2DisplayName = isExpStock2Index >= 0 ? isExpStock2PIObj['KPIFieldDisplayName'] : "ExpStock 2"; + + let isExpStock3Index = KPIFields.findIndex(i => i.KPIFieldName == 'ExpiryStock3') + let isExpStock3PIObj = isExpStock3Index >= 0 ? KPIFields[isExpStock3Index] : {}; + let isExpStock3Enable = isExpStock3Index >= 0 ? isExpStock3PIObj['KPIFieldEnable'] : false; + let isExpStock3DisplayName = isExpStock3Index >= 0 ? isExpStock3PIObj['KPIFieldDisplayName'] : "ExpStock 3"; + + let isExpStock4Index = KPIFields.findIndex(i => i.KPIFieldName == 'ExpiryStock4') + let isExpStock4PIObj = isExpStock4Index >= 0 ? KPIFields[isExpStock4Index] : {}; + let isExpStock4Enable = isExpStock4Index >= 0 ? isExpStock4PIObj['KPIFieldEnable'] : false; + let isExpStock4DisplayName = isExpStock4Index >= 0 ? isExpStock4PIObj['KPIFieldDisplayName'] : "ExpStock 4"; + + let isStockCalculateIndex = KPIFields.findIndex(i => i.KPIFieldName == 'StockCalculate') + let isStockCalculatePIObj = isStockCalculateIndex >= 0 ? KPIFields[isStockCalculateIndex] : {}; + let isStockCalculateEnable = isStockCalculateIndex >= 0 ? isStockCalculatePIObj['KPIFieldEnable'] : false; + + + if (isMiddayStockReceived == 1) { + await Promise.all( + globalBrandData.map(async (item, index) => { + if (isValid) { + let catId = item.CategoryId; + let errorobj = { 'EF_brand': item }; + let skulist = item.skulist || []; + if (skulist.length > 0) { + await Promise.all( + skulist.map(async (skuItem, skuIndex) => { + if (isValid) { + let skuData = SKUStockData.find(ci => ci.CategoryId == item.CategoryId && ci.ProductId == skuItem.ProductId) || {}; + errorobj['EF_product'] = skuItem; + let error_bid = item.CategoryId + let error_pid = skuItem.ProductId + console.log("OPS-----", skuItem.OPENING_STOCK) + let show_errorH = false, error_HInputKey = '', error_HInputKeyEx1 = '', error_HInputKeyEx2 = '', error_HInputKeyEx3 = '', error_HInputKeyEx4 = ''; + if ((isMdStockMandEnable == 1 || isMdStockMandEnable == 'true') && isStockCalculateEnable == false && skuData.MiddayStock !== 0 && (skuData.MiddayStock == null || skuData.MiddayStock == '')) { + notify(ST.PleaseenterMiddayStockfor + skuItem.ProductName, 'SHORT'); + isValid = false; + show_errorH = true, error_HInputKey = 'input1_', error_Type = 'input1_'; + } + else if ((isMdStockMandEnable == 1 || isMdStockMandEnable == 'true') && isStockCalculateEnable == false && skuData.MiddayStock != '' && parseInt(skuData?.SALE_stock) > (parseInt(skuData.MiddayStock) + parseInt(skuItem.OPENING_STOCK))) { + notify('MidDay + Opening STOCK value must NOT BE LESS than entered SALE ' + ST.for + ' ' + skuItem.ProductName, 'LONG'); + isValid = false; + show_errorH = true, error_HInputKey = 'input1_'; + } + else if ((isMdStockMandEnable == 1 || isMdStockMandEnable == 'true') && (isExpStock1Enable == true) && skuData.MIDDAY_ExpiryStock1 !== 0 && (skuData.MIDDAY_ExpiryStock1 == null || skuData.MIDDAY_ExpiryStock1 == '')) { + notify(ST.Pleaseenter + isExpStock1DisplayName + ' for ' + skuItem.ProductName, 'SHORT'); + isValid = false; + show_errorH = true, error_HInputKeyEx1 = 'input2_', error_Type = 'input2_'; + } else if ((isMdStockMandEnable == 1 || isMdStockMandEnable == 'true') && (isExpStock2Enable == true) && skuData.MIDDAY_ExpiryStock2 !== 0 && (skuData.MIDDAY_ExpiryStock2 == null || skuData.MIDDAY_ExpiryStock2 == '')) { + notify(ST.Pleaseenter + isExpStock2DisplayName + ' for ' + skuItem.ProductName, 'SHORT'); + isValid = false; + show_errorH = true, error_HInputKeyEx2 = 'input3_', error_Type = 'input3_'; + } else if ((isMdStockMandEnable == 1 || isMdStockMandEnable == 'true') && (isExpStock3Enable == true) && skuData.MIDDAY_ExpiryStock3 !== 0 && (skuData.MIDDAY_ExpiryStock3 == null || skuData.MIDDAY_ExpiryStock3 == '')) { + notify(ST.Pleaseenter + isExpStock3DisplayName + ' for ' + skuItem.ProductName, 'SHORT'); + isValid = false; + show_errorH = true, error_HInputKeyEx3 = 'input4_', error_Type = 'input4_'; + } else if ((isMdStockMandEnable == 1 || isMdStockMandEnable == 'true') && (isExpStock4Enable == true) && skuData.MIDDAY_ExpiryStock4 !== 0 && (skuData.MIDDAY_ExpiryStock4 == null || skuData.MIDDAY_ExpiryStock4 == '')) { + notify(ST.Pleaseenter + isExpStock4DisplayName + ' for ' + skuItem.ProductName, 'SHORT'); + isValid = false; + show_errorH = true, error_HInputKeyEx4 = 'input5_', error_Type = 'input5_'; + } + + if (skuData.MiddayStock === 0 || (skuData.MiddayStock != null && skuData.MiddayStock != '')) { + isAnyFilled = true; + } else if (skuData.MIDDAY_ExpiryStock1 === 0 || (skuData.MIDDAY_ExpiryStock1 != null && skuData.MIDDAY_ExpiryStock1 != '')) { + isAnyFilled = true; + } else if (skuData.MIDDAY_ExpiryStock2 === 0 || (skuData.MIDDAY_ExpiryStock2 != null && skuData.MIDDAY_ExpiryStock2 != '')) { + isAnyFilled = true; + } else if (skuData.MIDDAY_ExpiryStock3 === 0 || (skuData.MIDDAY_ExpiryStock3 != null && skuData.MIDDAY_ExpiryStock3 != '')) { + isAnyFilled = true; + } else if (skuData.MIDDAY_ExpiryStock4 === 0 || (skuData.MIDDAY_ExpiryStock4 != null && skuData.MIDDAY_ExpiryStock4 != '')) { + isAnyFilled = true; + } + + if (index == globalBrandData.length - 1 && skuIndex == skulist.length - 1 && !isAnyFilled) { + notify(ST.PleaseenterMiddayStockforatleastoneProductIfnotpresentthenEnter0, 'SHORT'); + isValid = false; + } + + if (show_errorH) { + errorobj['EF_InputKey'] = error_HInputKey; + errorobj['error_HInputKeyEx1'] = error_HInputKeyEx1; + errorobj['error_HInputKeyEx2'] = error_HInputKeyEx2; + errorobj['error_HInputKeyEx3'] = error_HInputKeyEx3; + errorobj['error_HInputKeyEx4'] = error_HInputKeyEx4; + + setErrorField(errorobj) + setError(true) + let refIn1 = inputRefs.current[error_Type + error_bid + '_' + error_pid]; + refIn1.focus(); + } + } + }) + ); + } + } + }) + ); + } + + console.log('isValid:', isValid); + return isValid; + } + + function onStockValChange(item, skuItem, val, key, type = '') { + setError(false) + setErrorField({}) + if (val != '') { + let isValid = validateNumber(val, type); + if (!isValid) { + return; + } + } + + let allSKUData = SKUStockData; + let defData = { 'CategoryId': item.CategoryId, 'ProductId': skuItem.ProductId }; + const skud_index = allSKUData.findIndex(i => i.CategoryId == item.CategoryId && i.ProductId == skuItem.ProductId); + const skud = skud_index >= 0 ? (allSKUData[skud_index] || defData) : defData; + skud[key] = val; + + skud_index >= 0 ? allSKUData[skud_index] = skud : allSKUData.push(skud); + // setSKUStockData(allSKUData); + BgWindowData(allSKUData) + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + + // function onChoiceSelect(val) { + // setShowRAllC_M(true); + // return; + // var val1 = val == 1 ? 1 : 0; + // if (animatedChoice != null) { + // Animated.timing(animatedChoice, { + // toValue: val1, + // duration: 400, + // useNativeDriver: false, + // }).start(); + // } + // // setIsMiddayStockReceived(val); + // BgisMiddayRec(val) + // // setHasUnsavedChanges(true); + // BgUnsavedChanges(true) + // } + + function onChoiceSelect(val, key) { + if (val == 0 && BgisMiddayRec.length > 0) { + setShowRAllC_M(true); + return; + } + var val1 = val == 1 ? 1 : 0; + if (animatedChoice != null) { + Animated.timing(animatedChoice, { + toValue: val1, + duration: 400, + useNativeDriver: false, + }).start(); + } + BgisMiddayRec(val) + BgUnsavedChanges(true) + if (val == 0) { + BgisMiddayRec([]) + } + } + + function onConfirmRemoveAll() { + // Remove all data + if (animatedChoice != null) { + Animated.timing(animatedChoice, { + toValue: 0, + duration: 400, + useNativeDriver: false, + }).start(); + } + BgUnsavedChanges(true) + BgWindowData([]) + BgisMiddayRec([]) + setShowRAllC_M(false); + } + function FilterStores(searchedQry) { + searchedQry = searchedQry.toLowerCase(); + console.log('searchedQry', searchedQry); + let arr = []; + var arr2 = {}; + var newBrand = {}; + if (searchedQry != null && searchedQry != '') { + // globalBrandData.map((item,index)=>{ + for (let i = 0; i < globalBrandData.length; i++) { + let item = globalBrandData[i]; + let skulist = item.skulist || []; + arr2 = Object.assign({ 'test': '1' }, item); + let newSkulist = []; + + for (let j = 0; j < skulist.length; j++) { + let brand = skulist[j]; + + let { ProductName } = brand; + if (ProductName.toLowerCase().includes(searchedQry)) { + newSkulist.push(brand); + } + } + + if (newSkulist.length > 0) { + let obj = { ...item, skulist: [...newSkulist] } + console.log("obj---", obj) + arr.push(obj); + } + + } + } + else { + arr = globalBrandData; + } + + console.log('globalBrandData:', globalBrandData) + setBrandData(arr); + setrerenderdata(!rerenderdata) + setrerenderdata2(!rerenderdata2) + } + + + // function FilterStores(searchedQry,filtervalue1){ + // searchedQry=searchedQry.toLowerCase(); + // console.log('searchedQry',searchedQry); + // let arr=[]; + // let newBrandList=[]; + // let filterCatId=filtervalue1.CategoryId; + // let filterSubCatId=filtervalue1.SubCategoryId; + // let filterBrandId=filtervalue1.BrandId; + + // console.log('filterCatId',filterCatId) + // console.log('filterSubCatId',filterSubCatId) + // console.log('filterBrandId',filterBrandId) + + // if((searchedQry!=null && searchedQry!='') || (filterCatId!=null && filterCatId!='') || (filterSubCatId!=null && filterSubCatId!='') || (filterBrandId!=null && filterBrandId!='') ){ + // console.log('searchquerytrue') + // for(let i=0;i0){ + // newBrandList.push(newBrand); + // // console.log('push',newBrandList.push(newBrand)) + // // console.log('newBrandList',newBrandList) + // // console.log('newBrand',newBrand) + + + // } + // } + // } + + + // } + // } + // else{ + // newBrandList=globalBrandData; + // } + + // setBrandData(newBrandList); + // setrerenderdata(!rerenderdata) + // setrerenderdata2(!rerenderdata2) + // } + + async function onselectionChange(option, keyLbl, keyVal, otherData) { + // console.log('trueeeeeeeeeeee') + setProcessing(true); + // let CategoryName=otherData.CategoryName!=null?otherData.CategoryName:''; + let data = filtervalue || {}; + // console.log('setFilterValue',data) + data[keyVal] = option.value; + data[keyLbl] = option.label; + await FilterHierarchy(keyVal, option.value); + if (keyVal == "CategoryId") { + data["SubCategoryId"] = defSubCat.SubCategoryId; + data["SubCategoryName"] = defSubCat.SubCategoryName; + data["BrandId"] = defBrand.BrandId; + data["BrandName"] = defBrand.BrandName; + } + else if (keyVal == "SubCategoryId") { + data["BrandId"] = defBrand.BrandId; + data["BrandName"] = defBrand.BrandName; + } + setFilterValue(data); + FilterStores(searchedItem, data) + console.log('filtersrores', searchedItem, data) + + setrerenderdata(!rerenderdata); + setrerenderdata2(!rerenderdata2) + setProcessing(false); + } + + + async function FilterHierarchy(keyVal, val) { + + let join = ` inner join Mapping_ProductAssortmentStorewise m on p.ProductId=m.ProductId `;// assortment join + + let { StoreId, ChainId, StateId, StoreCategoryId, StoreClassId, StoreTypeId } = storeData + if (keyVal == "CategoryId") { + // Filter Brand based on category + let brandq = `Select Distinct p.BrandId,p.BrandName from Product_Master p ${join} where m.StoreId='${StoreId}' and (p.CategoryId='${val}' or p.CategoryId= ${val}) and (CompanyId='1' or CompanyId=1) order by p.BrandSequence `; + let brands = await executeQuery(brandq, [defBrand]); + setbrandFilter(brands); + // Filter Sub cats based on category + let subcatq = `Select Distinct p.SubCategoryId,p.SubCategoryName from Product_Master p ${join} where m.StoreId='${StoreId}' and (p.CategoryId='${val}' or p.CategoryId= ${val}) and (CompanyId='1' or CompanyId=1) order by p.BrandSequence `; + let subCats = await executeQuery(subcatq, [defSubCat]); + setsubcatFilter(subCats); + } + else if (keyVal == "SubCategoryId") { + // Filter Brands based on Sub-category + let brandq = `Select Distinct p.BrandId,p.BrandName from Product_Master p ${join} where m.StoreId='${StoreId}' and (p.SubCategoryId='${val}' or p.SubCategoryId= ${val}) and (CompanyId='1' or CompanyId=1) order by p.BrandSequence `; + let brands = await executeQuery(brandq, [defBrand]); + setbrandFilter(brands); + } + } + + async function executeQuery(query, defData) { + return await new Promise((resolve, reject) => { + db.transaction(async function (txn) { + await txn.executeSql(query, [], async function (txn2, txnres) { + if (txnres.rows.length > 0) { + let arr = defData; + for (var i = 0; i < txnres.rows.length; i++) { + let data = txnres.rows.item(i); + arr.push(data); + + if (i == txnres.rows.length - 1) { + resolve(arr); + } + } + } + else { + resolve(defData); + } + + }, function (txnE, txnerr) { console.log(txnerr); resolve(defData); },); + // setProcessing(false); + }); + }).catch((err) => { + console.log(err); + return defData; + }) + } + + function clearFilter(obj, key1, key2) { + let fdata = filtervalue; + fdata[key1] = obj[key1]; + fdata[key2] = obj[key2]; + if (key1 == "CategoryId") { + fdata["SubCategoryId"] = defSubCat.SubCategoryId; + fdata["SubCategoryName"] = defSubCat.SubCategoryName; + fdata["BrandId"] = defBrand.BrandId; + fdata["BrandName"] = defBrand.BrandName; + } + else if (key1 == "SubCategoryId") { + fdata["BrandId"] = defBrand.BrandId; + fdata["BrandName"] = defBrand.BrandName; + } + setFilterValue(fdata); + FilterStores(searchedItem, fdata); + } + + function _renderSalesFilter() { + let salesCatFilterI = KPIFields.findIndex(i => i.KPIFieldName == 'MDCatFilter') + let salesCatFilterObj = salesCatFilterI >= 0 ? KPIFields[salesCatFilterI] : {}; + let salesCatFilter = salesCatFilterI >= 0 ? salesCatFilterObj['KPIFieldEnable'] : false; + + let salesSubCatFilterI = KPIFields.findIndex(i => i.KPIFieldName == 'MDSubCatFilter') + let salesSubCatFilterObj = salesSubCatFilterI >= 0 ? KPIFields[salesSubCatFilterI] : {}; + let salesSubCatFilter = salesSubCatFilterI >= 0 ? salesSubCatFilterObj['KPIFieldEnable'] : false; + + let salesBrandFilterI = KPIFields.findIndex(i => i.KPIFieldName == 'MDBrandFilter') + let salesBrandFilterObj = salesBrandFilterI >= 0 ? KPIFields[salesBrandFilterI] : {}; + let salesBrandFilter = salesSubCatFilterI >= 0 ? salesBrandFilterObj['KPIFieldEnable'] : false; + + if (rerenderdata == rerenderdata && (salesCatFilter || salesSubCatFilter || salesBrandFilter)) { + return ( + + {/* + {setSearchedItem(val); FilterStores(val,filtervalue)}} + /> + + {FilterStores(searchedItem,filtervalue)}}> + + + */} + {salesCatFilter && + + {ST.Category} + + {CustomPicker(props, catfilter, 'CategoryName', 'CategoryId', 'CategoryName', 'CategoryId', onselectionChange, { value: filtervalue.CategoryId, otherData: {} }, customStyle.Sale_filterSelStyle, customStyle.Sale_filterSelInputStyle, true)} + { clearFilter(catfilter[0], 'CategoryId', 'CategoryName') }}> + + + + } + + {salesSubCatFilter && + + {ST.SubCategorytrim} + + {CustomPicker(props, subcatfilter, 'SubCategoryName', 'SubCategoryId', 'SubCategoryName', 'SubCategoryId', onselectionChange, { value: filtervalue.SubCategoryId, otherData: {} }, customStyle.Sale_filterSelStyle, customStyle.Sale_filterSelInputStyle, true)} + { clearFilter(subcatfilter[0], 'SubCategoryId', 'SubCategoryName') }}> + + + + } + + {salesBrandFilter && + + {ST.Brand} + + {CustomPicker(props, brandfilter, 'BrandName', 'BrandId', 'BrandName', 'BrandId', onselectionChange, { value: filtervalue.BrandId, otherData: {} }, customStyle.Sale_filterSelStyle, customStyle.Sale_filterSelInputStyle, true)} + { clearFilter(brandfilter[0], 'BrandId', 'BrandName') }}> + + + + } + + ) + } + else { + return null; + } + } + + + function _render_Alert() { + return ( + + + { setShowAlert(false) }}> + {ST.Cancel} + + { saveData() }}> + {ST.Yes} + + + + ) + } + + + // ✅ async function OUTSIDE return(), INSIDE component + const fetchDataFromDB = async (storeData, AllKPIFieldsWithoutFilter, AllKPIFields) => { + let isColor_MSLIndex = AllKPIFieldsWithoutFilter.findIndex(i => i.KPIFieldName == 'Color_MSL') + let isColor_MSLObj = isColor_MSLIndex >= 0 ? AllKPIFieldsWithoutFilter[isColor_MSLIndex] : {}; + let isColor_MSLEnable = isColor_MSLIndex >= 0 ? isColor_MSLObj['KPIFieldEnable'] : false; + let Color_MSL = isColor_MSLEnable && isColor_MSLIndex >= 0 ? isColor_MSLObj['KPIFieldDisplayName'] : "" + + let isColor_NONMSLIndex = AllKPIFieldsWithoutFilter.findIndex(i => i.KPIFieldName == 'Color_NONMSL') + let isColor_NONMSLObj = isColor_NONMSLIndex >= 0 ? AllKPIFieldsWithoutFilter[isColor_NONMSLIndex] : {}; + let isColor_NONMSLEnable = isColor_NONMSLIndex >= 0 ? isColor_NONMSLObj['KPIFieldEnable'] : false; + let Color_NONMSL = isColor_NONMSLEnable && isColor_NONMSLIndex >= 0 ? isColor_NONMSLObj['KPIFieldDisplayName'] : "" + + let isColor_CompetitionIndex = AllKPIFieldsWithoutFilter.findIndex(i => i.KPIFieldName == 'Color_Competition') + let isColor_CompetitionObj = isColor_CompetitionIndex >= 0 ? AllKPIFieldsWithoutFilter[isColor_CompetitionIndex] : {}; + let isColor_CompetitionEnable = isColor_CompetitionIndex >= 0 ? isColor_CompetitionObj['KPIFieldEnable'] : false; + let Color_Competition = isColor_CompetitionEnable && isColor_CompetitionIndex >= 0 ? isColor_CompetitionObj['KPIFieldDisplayName'] : "" + console.log("Color_MSL----", Color_MSL, Color_NONMSL, Color_Competition) + + let COMPStockAllow_Index = AllKPIFields.findIndex(i => i.KPIFieldName == 'COMPStockAllow'); + let COMPStockAllow_Obj = COMPStockAllow_Index >= 0 ? AllKPIFields[COMPStockAllow_Index] : {}; + let isCOMPStockAllow = COMPStockAllow_Index >= 0 ? COMPStockAllow_Obj['KPIFieldEnable'] : false; + let ShowCompetionSku = AllKPIFields?.findIndex((i) => i.KPIFieldName == "ShowCompetionSku"); + let ShowCompetionObj = ShowCompetionSku >= 0 ? AllKPIFields[ShowCompetionSku] : {}; + let ShowCompetionSkuNoSplitArr = ShowCompetionObj?.KPIFieldDisplayName?.split(",") || [] + const isCompetitorValues = ShowCompetionSkuNoSplitArr; + let isCompetitorClause = !isCompetitorValues || isCompetitorValues.length === 0 ? "p.IsCompetitor = 0" : `p.IsCompetitor IN (${isCompetitorValues.join(",")})`; + + try { + const menuQuery = `SELECT DISTINCT p.IsCompetitor, m.MSL FROM Product_Master p INNER JOIN Mapping_ProductAssortmentStorewise m ON p.ProductId = m.ProductId INNER JOIN Master_Category mc ON mc.CategoryId = p.CategoryId + WHERE m.StoreId = '${storeData?.StoreId}' ${isCOMPStockAllow ? '' : `AND ${isCompetitorClause}`}`; + + const result = await new Promise((resolve, reject) => { + db.transaction(txn => { + txn.executeSql( + menuQuery, [], + (txn2, txnres) => { + const len = txnres.rows.length; + let isMSLProduct = false, isNonMSLProduct = false, isCompProduct = false; + for (let i = 0; i < len; i++) { + let msls = txnres.rows.item(i); + console.log("msls------------", msls) + if (msls?.MSL === 1 && Color_MSL !== "") { + isMSLProduct = true; + } + if (msls?.MSL === 0 && Color_NONMSL !== "") { + isNonMSLProduct = true; + } + if (msls?.IsCompetitor === 1 && Color_Competition !== "") { + isCompProduct = true; + } + } + resolve({ + Color_MSL, + isMSLProduct, + Color_NONMSL, + isNonMSLProduct, + Color_Competition, + isCompProduct + }); + }, (txn, err) => { + console.error('DB error:', err); + reject(err); + return true; + } + ); + }); + }); + + return result; + + } catch (e) { + console.log("Error", e); + return { + Color_MSL, + isMSLProduct: false, + Color_NONMSL, + isNonMSLProduct: false, + Color_Competition, + isCompProduct: false + }; + } + }; + + function ThreeColorIndicator() { + return ( + + {MSLDataInfo?.isMSLProduct && ( + + + MSL + + )} + + {MSLDataInfo?.isNonMSLProduct && ( + + + Non-MSL + + )} + + {MSLDataInfo?.isCompProduct && ( + + + Comp + + )} + + + ); + }; + + function _renderStock() { + let xpos = 0; + if (animatedChoice != null) { + xpos = animatedChoice.interpolate({ + inputRange: [0, 1], + outputRange: [0, -75], + }); + } + + + let isExpStock1Index = KPIFields.findIndex(i => i.KPIFieldName == 'ExpiryStock1') + let isExpStock1PIObj = isExpStock1Index >= 0 ? KPIFields[isExpStock1Index] : {}; + let isExpStock1Enable = isExpStock1Index >= 0 ? isExpStock1PIObj['KPIFieldEnable'] : false; + let isExpStock1DisplayName = isExpStock1Index >= 0 ? isExpStock1PIObj['KPIFieldDisplayName'] : "ExpStock 1"; + + let isExpStock2Index = KPIFields.findIndex(i => i.KPIFieldName == 'ExpiryStock2') + let isExpStock2PIObj = isExpStock2Index >= 0 ? KPIFields[isExpStock2Index] : {}; + let isExpStock2Enable = isExpStock2Index >= 0 ? isExpStock2PIObj['KPIFieldEnable'] : false; + let isExpStock2DisplayName = isExpStock2Index >= 0 ? isExpStock2PIObj['KPIFieldDisplayName'] : "ExpStock 2"; + + let isExpStock3Index = KPIFields.findIndex(i => i.KPIFieldName == 'ExpiryStock3') + let isExpStock3PIObj = isExpStock3Index >= 0 ? KPIFields[isExpStock3Index] : {}; + let isExpStock3Enable = isExpStock3Index >= 0 ? isExpStock3PIObj['KPIFieldEnable'] : false; + let isExpStock3DisplayName = isExpStock3Index >= 0 ? isExpStock3PIObj['KPIFieldDisplayName'] : "ExpStock 3"; + + let isExpStock4Index = KPIFields.findIndex(i => i.KPIFieldName == 'ExpiryStock4') + let isExpStock4PIObj = isExpStock4Index >= 0 ? KPIFields[isExpStock4Index] : {}; + let isExpStock4Enable = isExpStock4Index >= 0 ? isExpStock4PIObj['KPIFieldEnable'] : false; + let isExpStock4DisplayName = isExpStock4Index >= 0 ? isExpStock4PIObj['KPIFieldDisplayName'] : "ExpStock 4"; + + let isStockCalculateIndex = KPIFields.findIndex(i => i.KPIFieldName == 'StockCalculate') + let isStockCalculatePIObj = isStockCalculateIndex >= 0 ? KPIFields[isStockCalculateIndex] : {}; + let isStockCalculateEnable = isStockCalculateIndex >= 0 ? isStockCalculatePIObj['KPIFieldEnable'] : false; + + let isColor_MSLIndex = KPIFieldsWithoutFilter.findIndex(i => i.KPIFieldName == 'Color_MSL') + let isColor_MSLObj = isColor_MSLIndex >= 0 ? KPIFieldsWithoutFilter[isColor_MSLIndex] : {}; + let isColor_MSLEnable = isColor_MSLIndex >= 0 ? isColor_MSLObj['KPIFieldEnable'] : false; + let Color_MSL = isColor_MSLEnable && isColor_MSLIndex >= 0 ? isColor_MSLObj['KPIFieldDisplayName'] : "" + + let isColor_NONMSLIndex = KPIFieldsWithoutFilter.findIndex(i => i.KPIFieldName == 'Color_NONMSL') + let isColor_NONMSLObj = isColor_NONMSLIndex >= 0 ? KPIFieldsWithoutFilter[isColor_NONMSLIndex] : {}; + let isColor_NONMSLEnable = isColor_NONMSLIndex >= 0 ? isColor_NONMSLObj['KPIFieldEnable'] : false; + let Color_NONMSL = isColor_NONMSLEnable && isColor_NONMSLIndex >= 0 ? isColor_NONMSLObj['KPIFieldDisplayName'] : "" + + let isColor_CompetitionIndex = KPIFieldsWithoutFilter.findIndex(i => i.KPIFieldName == 'Color_Competition') + let isColor_CompetitionObj = isColor_CompetitionIndex >= 0 ? KPIFieldsWithoutFilter[isColor_CompetitionIndex] : {}; + let isColor_CompetitionEnable = isColor_CompetitionIndex >= 0 ? isColor_CompetitionObj['KPIFieldEnable'] : false; + let Color_Competition = isColor_CompetitionEnable && isColor_CompetitionIndex >= 0 ? isColor_CompetitionObj['KPIFieldDisplayName'] : "" + console.log("Color_MSL----", Color_MSL, Color_NONMSL, Color_Competition) + + const getBackgroundStyle = (skus) => { + console.log("skucvbn", skus) + if (skus?.MSL && skus?.MSL === 1 && skus?.IsCompetitor === 0 && Color_MSL !== "") { + return { backgroundColor: Color_MSL }; + } + if (skus?.MSL === 0 && skus?.IsCompetitor === 0 && Color_NONMSL !== "") { + return { backgroundColor: Color_NONMSL }; + } + if (skus?.IsCompetitor === 1 && Color_Competition !== "") { + return { backgroundColor: Color_Competition }; + } + + return null; + }; + + return ( + + + + {ST.StockReceived} + + + + { onChoiceSelect(1) }}> + {ST.Yes} + + { onChoiceSelect(0) }}> + {ST.No} + + + + + {isMiddayStockReceived == '1' && + + { setSearchedItem(val); FilterStores(val) }} + /> + { FilterStores(searchedItem) }}> + + + + } + {/* "calling msl , non-msl and competitor products color indicator" */} + {isMiddayStockReceived == '1' && !processing && ((MSLDataInfo?.isMSLProduct && MSLDataInfo?.Color_MSL !== "") + || (MSLDataInfo?.isNonMSLProduct && MSLDataInfo?.Color_NONMSL !== "") + || (MSLDataInfo?.isCompProduct && MSLDataInfo?.Color_Competition !== "")) && ThreeColorIndicator()} + + {isMiddayStockReceived == '1' && + { + const cat = item; + const catIndex = index; + + // get error field brand id + let EF_brand = errorfield.EF_brand != null ? errorfield.EF_brand : {}; + let error_bid = EF_brand.CategoryId || ''; + + return ( + + + {/* + handleSearch(text)} + /> + + {FilterStores(searchedItem,filtervalue)}}> + + + */} + + {/* {filterData.length != 0 ? */} + + + {item.CategoryName} + + + + {/* :''} */} + + { { + const skus = item; + const sku_index = index; + let calVal = 0; + let thisCatSkuData_i = SKUStockData.findIndex(i => i.CategoryId == cat.CategoryId && i.ProductId == skus.ProductId); + let thisCatSkuData = thisCatSkuData_i >= 0 ? (SKUStockData[thisCatSkuData_i] || {}) : {}; + let md_Stock = thisCatSkuData.MiddayStock != null ? thisCatSkuData.MiddayStock : ''; + + let ex_stock1 = thisCatSkuData.MIDDAY_ExpiryStock1 != null ? thisCatSkuData.MIDDAY_ExpiryStock1 : ''; + let ex_stock2 = thisCatSkuData.MIDDAY_ExpiryStock2 != null ? thisCatSkuData.MIDDAY_ExpiryStock2 : ''; + let ex_stock3 = thisCatSkuData.MIDDAY_ExpiryStock3 != null ? thisCatSkuData.MIDDAY_ExpiryStock3 : ''; + let ex_stock4 = thisCatSkuData.MIDDAY_ExpiryStock4 != null ? thisCatSkuData.MIDDAY_ExpiryStock4 : ''; + + if (isStockCalculateEnable) { + calVal = parseInt(ex_stock1 || 0) + parseInt(ex_stock2 || 0) + parseInt(ex_stock3 || 0) + parseInt(ex_stock4 || 0) + } + // get error field product id + let EF_product = errorfield.EF_product != null ? errorfield.EF_product : {}; + let error_pid = EF_product.ProductId || ''; + let EF_InputKey = errorfield.EF_InputKey; + let show_errorhere = error_bid == cat.CategoryId && error_pid == skus.ProductId; + + let errorStyle_ST = (error && show_errorhere && EF_InputKey == 'input1_' ? customStyle.stk_inptSTyle_error : {}); + + let error_HInputKeyEx1 = (error && show_errorhere && errorfield.error_HInputKeyEx1 == 'input2_' ? customStyle.stk_inptSTyle_error : {}); + let error_HInputKeyEx2 = (error && show_errorhere && errorfield.error_HInputKeyEx2 == 'input3_' ? customStyle.stk_inptSTyle_error : {}); + let error_HInputKeyEx3 = (error && show_errorhere && errorfield.error_HInputKeyEx3 == 'input4_' ? customStyle.stk_inptSTyle_error : {}); + let error_HInputKeyEx4 = (error && show_errorhere && errorfield.error_HInputKeyEx4 == 'input5_' ? customStyle.stk_inptSTyle_error : {}); + + return ( + + {/* {skus.ProductName} */} + + {skus.ArticleCode && skus.ArticleCode.trim() !== "" + ? `${skus.ProductName} [${skus.ArticleCode}]` + : skus.ARTICLE_CODE && skus.ARTICLE_CODE.trim() !== "" + ? `${skus.ProductName} [${skus.ARTICLE_CODE}]` + : skus.ProductName} + + + + {ST.OpeningStock} : + {skus.OPENING_STOCK} + + + {isStockCalculateEnable == true && + + + {ST.MiddayStock} + + {ST.OpS} + + + } + {isStockCalculateEnable != true && + + + + {ST.MiddayStock} + { inputRefs.current['input1_' + cat.CategoryId + '_' + skus.ProductId] = reff; }} + style={[customStyle.openStk_prd_inputStyle, customStyle.openStk_prd_flex_inputStyle, customStyle.openStk_prd_inputShort2, errorStyle_ST]} + placeholder="" + placeholderTextColor={PageTheme.$placeholder_color} + value={(md_Stock != null ? md_Stock + '' : '')} + maxLength={6} + keyboardType='number-pad' + returnKeyType={(Platform.OS === 'ios') ? 'done' : 'next'} + blurOnSubmit={false} + autoComplete='off' + onSubmitEditing={() => { focusToNext(cat, skus, '1') }} + onChangeText={(val) => { onStockValChange(cat, skus, val, 'MiddayStock', 'numeric') }} + /> + + + + } + + {isExpStock1Enable == true && + + + {isExpStock1DisplayName} + { inputRefs.current['input2_' + cat.CategoryId + '_' + skus.ProductId] = reff; }} + style={[customStyle.openStk_prd_inputStyle, customStyle.openStk_prd_flex_inputStyle, customStyle.openStk_prd_inputShort2, error_HInputKeyEx1]} + placeholder="" + autoComplete='off' + placeholderTextColor={PageTheme.$placeholder_color} + value={(ex_stock1 + '' || '')} + returnKeyType={(Platform.OS === 'ios') ? 'done' : 'next'} + maxLength={6} + keyboardType='number-pad' + blurOnSubmit={false} + onChangeText={(val) => { onStockValChange(cat, skus, val, 'MIDDAY_ExpiryStock1', 'numeric') }} + onSubmitEditing={() => { focusToNext(cat, skus, '2') }} + /> + {skus.EXPIRYSTOCK1} + + + } + {isExpStock2Enable == true && + + + {isExpStock2DisplayName} + { inputRefs.current['input3_' + cat.CategoryId + '_' + skus.ProductId] = reff; }} + style={[customStyle.openStk_prd_inputStyle, customStyle.openStk_prd_flex_inputStyle, customStyle.openStk_prd_inputShort2, error_HInputKeyEx2]} + placeholder="" + autoComplete='off' + placeholderTextColor={PageTheme.$placeholder_color} + value={(ex_stock2 + '' || '')} + returnKeyType={(Platform.OS === 'ios') ? 'done' : 'next'} + maxLength={6} + keyboardType='number-pad' + blurOnSubmit={false} + onChangeText={(val) => { onStockValChange(cat, skus, val, 'MIDDAY_ExpiryStock2', 'numeric') }} + onSubmitEditing={() => { focusToNext(cat, skus, '3') }} + /> + {skus.EXPIRYSTOCK2} + + + } + {isExpStock3Enable == true && + + + {isExpStock3DisplayName} + { inputRefs.current['input4_' + cat.CategoryId + '_' + skus.ProductId] = reff; }} + style={[customStyle.openStk_prd_inputStyle, customStyle.openStk_prd_flex_inputStyle, customStyle.openStk_prd_inputShort2, error_HInputKeyEx3]} + placeholder="" + autoComplete='off' + placeholderTextColor={PageTheme.$placeholder_color} + value={(ex_stock3 + '' || '')} + returnKeyType={(Platform.OS === 'ios') ? 'done' : 'next'} + maxLength={6} + keyboardType='number-pad' + blurOnSubmit={false} + onChangeText={(val) => { onStockValChange(cat, skus, val, 'MIDDAY_ExpiryStock3', 'numeric') }} + onSubmitEditing={() => { focusToNext(cat, skus, '4') }} + /> + {skus.EXPIRYSTOCK3} + + + } + {isExpStock4Enable == true && + + + {isExpStock4DisplayName} + { inputRefs.current['input5_' + cat.CategoryId + '_' + skus.ProductId] = reff; }} + style={[customStyle.openStk_prd_inputStyle, customStyle.openStk_prd_flex_inputStyle, customStyle.openStk_prd_inputShort2, error_HInputKeyEx4]} + placeholder="" + autoComplete='off' + placeholderTextColor={PageTheme.$placeholder_color} + value={(ex_stock4 + '' || '')} + returnKeyType={(Platform.OS === 'ios') ? 'done' : 'next'} + maxLength={6} + keyboardType='number-pad' + blurOnSubmit={false} + onChangeText={(val) => { onStockValChange(cat, skus, val, 'MIDDAY_ExpiryStock4', 'numeric') }} + onSubmitEditing={() => { focusToNext(cat, skus, '5') }} + /> + {skus.EXPIRYSTOCK4} + + + } + + + ) + }} /> + } + + + ); + }} + /> + } + + ) + } + + return ( + + {processing && } + + {_render_Alert()} + {ConfirmSaveAlert(props, showRAllC_M, () => { setShowRAllC_M(false) }, onConfirmRemoveAll, 'Do you really want to remove all visibility data?')} + + + + {Object.keys(storeData).length > 0 && + _renderStock() + } + + { submitOpeningStock() }} /> + + + + + ); +} + + +export default connect(mapStateToProps, mapDispatchToProps)(MiddayStock); \ No newline at end of file diff --git a/PerformicsSrc/src/screens/MiscMenuList.js b/PerformicsSrc/src/screens/MiscMenuList.js new file mode 100644 index 0000000..a859637 --- /dev/null +++ b/PerformicsSrc/src/screens/MiscMenuList.js @@ -0,0 +1,172 @@ +import React, { useState, useCallback } from 'react'; +import Container from '../components/container'; +import { useRoute, useFocusEffect } from '@react-navigation/native'; +import { customStyles, GetPageTheme } from '../styles/Global'; +import { View, Text, TouchableOpacity, Platform, FlatList, Linking } from 'react-native'; +import { connect } from 'react-redux'; +import { mapStateToProps, mapDispatchToProps } from '../reducers/contextProvider'; +import moment from 'moment'; +import { db } from '../constants/constants'; +import CustomHeader from '../components/customHeader'; +import CustomLoader from '../components/CustomLoader'; +import LinearGradient from 'react-native-linear-gradient'; +import { useNavigation } from '@react-navigation/native'; +import { getKPIFields } from '../controller/functions'; + +function TrainingMenu(props) { + const route = useRoute(); + const ST = props.StaticText || {}; + // get all theme styles acc to current theme set + const PageTheme = GetPageTheme(props.DarkMode, route.name); + const customStyle = customStyles(props.DarkMode, route.name); + const [processing, setProcessing] = useState(true); + const [isDataFound, setisDataFound] = useState(false); + const [miscMenuList, setMiscMenuData] = useState(''); + const [uploadedStoreText, setUploadedStoreText] = useState(''); + const navigation = useNavigation(); + const d1 = new Date(); + const d2 = moment(d1).format('MM/DD/YYYY'); + + useFocusEffect(useCallback( + () => { + getData(); + }, [])); + + + async function getData() { + try { + setProcessing(true); + db.transaction((txn) => { + const menuQuery = `SELECT DISTINCT MenuId, MenuName, ScreenName FROM Mapping_SideMenuMiscellaneous ORDER BY DisplayOrder`; + const storeIdQuery = `SELECT DISTINCT STORE_ID FROM OFFLINE_ORDER ORDER BY STORE_ID`; + // First: Fetch Menu + txn.executeSql(menuQuery, [], (txn2, txnres) => { + const len = txnres.rows.length; + const menuArr = []; + for (let i = 0; i < len; i++) { + menuArr.push(txnres.rows.item(i)); + } + setMiscMenuData(menuArr); // show menus + + // Second: Fetch uploaded StoreIds + txn.executeSql(storeIdQuery, [], (txn3, storeRes) => { + const slen = storeRes.rows.length; + const storeIdArr = []; + for (let i = 0; i < slen; i++) { + storeIdArr.push(storeRes.rows.item(i).STORE_ID); + } + + console.log("storeIdArr.length", storeIdArr.length) + const uploadedText = storeIdArr.length > 0 + ? `Uploaded data of StoreId(s): ${storeIdArr.join(', ')}` + : ''; + + console.log("uploaded text:", uploadedText) + setUploadedStoreText(uploadedText); // <-- use this in your UI + setProcessing(false); + }, (txn3, err3) => { + console.error("Store ID query error:", err3); + setUploadedStoreText(''); + setProcessing(false); + }); + + }, (txn2, err2) => { + console.error("Menu fetch error:", err2); + setMiscMenuData([]); + setProcessing(false); + }); + }); + + } catch (err) { + console.error("getData error:", err); + setProcessing(false); + } + } + + + const openWebLink = async (item) => { + // Check if the device can open the URL + //console.log("items", item) + let AllKPIFields = await getKPIFields(item); + // console.log("items", AllKPIFields) + let isColor_MSLIndex = AllKPIFields.findIndex(i => i.KPIFieldName == 'Ppay_ExternalLink') + let isColor_MSLObj = isColor_MSLIndex >= 0 ? AllKPIFields[isColor_MSLIndex] : {}; + let isColor_MSLEnable = isColor_MSLIndex >= 0 ? isColor_MSLObj['KPIFieldEnable'] : false; + let Ppay_ExternalLink = isColor_MSLEnable && isColor_MSLIndex >= 0 ? isColor_MSLObj['KPIFieldDisplayName'] : "" + if (Ppay_ExternalLink !== "") { + let modifyPpay_link = Ppay_ExternalLink + "?ProjectCode=" + props.projectCode + "&UserId=" + props.UserId + console.log("ppay_link", modifyPpay_link) + const supported = await Linking.canOpenURL(modifyPpay_link); + if (supported) { + await Linking.openURL(modifyPpay_link); + } else { + console.log("Don't know how to open URI: " + modifyPpay_link); + } + } + }; + const handlePress = (item) => { + console.log("Pressed item:", item); + if (item.ScreenName === "ORDER") { + navigation.navigate("OfflineOrder", { item }); + } else if (item.ScreenName === "TRAINHOLIDAYONEAPP") { + navigation.navigate('TrainingMenu', { 'Contentid': 1, item }) + } else if (item.ScreenName === "GROOMINGIMG") { + navigation.navigate('GroomingPictures', { 'storeData': {} }) + } else if (item?.ScreenName === "PPAY") { + openWebLink(item) + } + + + else { + console.log("Unknown ScreenName:", item.ScreenName); + } + }; + + + return ( + + {processing && } + + + + + item.MenuId.toString()} + renderItem={({ item }) => ( + handlePress(item)} + style={{ + backgroundColor: PageTheme.$primary_color, + padding: 16, + marginBottom: 10, + borderRadius: 8 + }} + > + + {item.MenuName} + + + )} + ListEmptyComponent={() => + ( + No menu items found. + + ) + + } + /> + + + + + + + ); +} + +export default connect(mapStateToProps, mapDispatchToProps)(TrainingMenu); diff --git a/PerformicsSrc/src/screens/MissedCallList.js b/PerformicsSrc/src/screens/MissedCallList.js new file mode 100644 index 0000000..86d6853 --- /dev/null +++ b/PerformicsSrc/src/screens/MissedCallList.js @@ -0,0 +1,165 @@ +import React,{useState,useEffect, useRef} from 'react'; +import Container from '../components/container'; +import { useRoute } from '@react-navigation/native'; +import { customStyles,GetPageTheme, STATUSBAR_HEIGHT } from "../styles/Global"; +import {Image,TextInput,View,Text,ScrollView,TouchableOpacity,Platform,FlatList, Alert,Animated} from 'react-native'; +import { connect } from 'react-redux'; +import { mapStateToProps,mapDispatchToProps } from '../reducers/contextProvider'; +import {notify} from '../components/notify'; +import moment from 'moment'; +import {get_item,set_item,clear_item} from '../components/localStorage'; +import {db,} from '../constants/constants'; +import CustomHeader from '../components/customHeader'; +import CustomLoader from '../components/CustomLoader'; +import LinearGradient from 'react-native-linear-gradient'; +import { checkIf_surveyDone } from '../constants/ConstantQueries'; +import { AntDesign } from '../components/icons'; +import { AppTables } from '../constants/tableConstants'; + + +function MissedCallList(props) { + const route = useRoute(); + const ST=props.StaticText || {}; + // get all theme styles acc to current theme set + const PageTheme=GetPageTheme(props.DarkMode,route.name); + const customStyle=customStyles(props.DarkMode,route.name); + + const [processing, setProcessing] = useState(true); + const [loaderTitle, setLoaderTitle] = useState(); + const [isAdhocScreen, setIsAdhocScreen] = useState(false); + const [isBeatPlan, setIsBeatPlan] = useState(false); + const [storeData, setStoreData] = useState({}); + const [currentMenu, setCurrentMenu] = useState({}); + const [surveys, setSurveys] = useState([]); + const [Isdone, setIsdone] = useState(false); + + const d1=new Date(); + const d2=moment(d1).format('MM/DD/YYYY'); + + useEffect(() => { + setLoaderTitle(ST.Loading+'...') + let params=props.route.params? props.route.params:{}; + let storeData1=params.storeData || {}; + let menu1=params.menu || {}; + let isAdhoc=params.isAdhocScreen || false; + let isBeat=params.isBeat!=null? params.isBeat : false; + let bgRedirFlag=params.redirect || false; + let BgNavData=params.BgNavData || {}; + + setIsAdhocScreen(isAdhoc); + setIsBeatPlan(isBeat); + setStoreData(storeData1); + setCurrentMenu(menu1); + getData(storeData1,menu1); + if(bgRedirFlag==true && Object.keys(BgNavData).length>0){ + BgNavToSurveyView(BgNavData) + + } + const willFocusSubscription = props.navigation.addListener('focus', () => { + console.log('onfocus'); + getData(storeData1,menu1); + }); + + return willFocusSubscription; + }, []); + + + useEffect(() => { + console.log('on AutoGoToPrev change (in list view)',props.AutoGoToPrev); + if(props.AutoGoToPrev==true){ + let params=props.route.params? props.route.params:{}; + let storeData1=params.storeData || {}; + console.log("survey list currentMenu:",currentMenu) + getData(storeData1,currentMenu,true); + } + }, [props.AutoGoToPrev]); + + function BgNavToSurveyView(BgNavData){ + let { + surveyData, + storeData, + menu, + isAdhocScreen, + isBeat, + ShowCat}=BgNavData + if(ShowCat==1 || ShowCat=='true' || ShowCat==true){ + console.log('go to SurveyCat'); + props.navigation.navigate('SurveyCat',{'surveyData':surveyData,'storeData':storeData,'menu':menu,'isAdhocScreen':isAdhocScreen,'isBeat':isBeat,'ShowCat':ShowCat}); + } + else{ + props.navigation.navigate('SurveyView',{'surveyData':surveyData,'storeData':storeData,'menu':menu,'isAdhocScreen':isAdhocScreen,'isBeat':isBeat,'ShowCat':ShowCat}); + } + } + + + async function getData(storeData1,menu1={},isAutoBack=false){ + try { + let {StoreId,ChainId,StateId,StoreTypeId}=storeData1; + + await db.transaction(async function (txn) { + // let q2=`SELECT DISTINCT T.SurveyName as SurveyName,T.SurveyId as SurveyId,T.ShowCat FROM Master_SurveyQuestion T INNER JOIN Mapping_Survey M ON T.SurveyId=M.SurveyId WHERE M.StoreId='${StoreId}' and T.MenuId='${menu1.MenuId}'`; + let q2=`SELECT * FROM ${AppTables.MISSED_CALL} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}'`; + + await txn.executeSql(q2,[],async function (txn2, txnres2) { + if(txnres2.rows.length>0){ + setIsdone(true) + }else{ + setIsdone(false) + } + setProcessing(false); + },function (txnE,txnerr) { setProcessing(false); console.log(txnerr); },); + + }); + } catch (err) { + setProcessing(false); + console.log(err); + } + } + + + function openSurveyView(){ + + props.set_autoback({'AutoGoToPrev':false}); + props.navigation.navigate('MissedCallView',{'storeData':storeData,'menu':currentMenu,'isAdhocScreen':isAdhocScreen,'isBeat':isBeatPlan}); + } + + + return ( + + {processing && } + + + + + {/* { Object.keys(storeData).length>0 && + { + return( */} + + {openSurveyView()}}> + + + {"S"} + + {"SALE"} + {Isdone && } + + + + + {/* ); + }} + /> + } */} + + + + ); +} + + + +export default connect(mapStateToProps, mapDispatchToProps)(MissedCallList) \ No newline at end of file diff --git a/PerformicsSrc/src/screens/MissedCallView.js b/PerformicsSrc/src/screens/MissedCallView.js new file mode 100644 index 0000000..0195413 --- /dev/null +++ b/PerformicsSrc/src/screens/MissedCallView.js @@ -0,0 +1,999 @@ +import React,{useState,useEffect,useRef} from 'react'; +import Container from '../components/container'; +import { useRoute } from '@react-navigation/native'; +import { globalStyles,customStyles,GetPageTheme } from "../styles/Global"; +import {StatusBar,Image,TextInput,View,Text,ScrollView,TouchableOpacity,Platform,PermissionsAndroid,FlatList, Alert, Animated, AppState, Keyboard} from 'react-native'; +import { ReactReduxContext,connect,useSelector, useDispatch } from 'react-redux'; +import { mapStateToProps,mapDispatchToProps } from '../reducers/contextProvider'; +import SQLite from 'react-native-sqlite-2'; +import {notify} from '../components/notify'; +import moment from 'moment'; +import {getDownloadJson,getKPIFields,marktext1,marktext2, resizeImage, restore_ImageWithMetaData, validateNumber} from '../controller/functions'; +import {get_item,set_item,clear_item} from '../components/localStorage'; +import {version,sloganline,appname,testurl,db, colors_Arr, common_ImagePath,ImageFolderPath} from '../constants/constants'; +import CustomHeader from '../components/customHeader'; +import {Card, Menu, Switch} from 'react-native-paper'; +import {AntDesign, Entypo, FontAwesome,Fontisto, MaterialCommunityIcons} from '../components/icons'; +import { stat } from 'react-native-fs'; +import CustomLoader from '../components/CustomLoader'; +import LinearGradient from 'react-native-linear-gradient'; +import { AppTables } from '../constants/tableConstants'; +import { SvgXml } from 'react-native-svg'; +import {launchCamera, launchImageLibrary,CameraOptions} from 'react-native-image-picker'; +import * as RNFS from 'react-native-fs'; +import GradientButton from '../components/gradientButton'; + +import cameraImg from '../assets/performics/camera_front_image.svg' +import addImg from '../assets/performics/add_image.svg'; +import CustomModal from '../components/CustomModal'; +import { Q_getpaidvisibility } from '../constants/ConstantQueries'; +import { Picker } from '@react-native-picker/picker'; +import { ConfirmSaveAlert } from '../components/alert'; +import ModalSelector from 'react-native-modal-selector' +import { CustomPicker } from '../components/CustomPicker'; +import CustomCamera from '../components/Camera'; +import DateTimePicker from '@react-native-community/datetimepicker'; + +import CameraImg3 from '../assets/performics/camera_tick.svg'; +import CameraImg2 from '../assets/performics/camera_icon.svg'; +import CameraImg4 from '../assets/performics/camera_asterisk.svg'; +import CameraImg5 from '../assets/image/astrickcamera.svg'; + +function MissedCallView(props) { + const route = useRoute(); + const ST=props.StaticText || {}; + // get all theme styles acc to current theme set + const PageTheme=GetPageTheme(props.DarkMode,route.name); + const customStyle=customStyles(props.DarkMode,route.name); + const animatedChoice=useRef(new Animated.Value(0)).current; + + const [processing, setProcessing] = useState(true); + const [loaderTitle, setLoaderTitle] = useState(); + const [isAdhocScreen, setIsAdhocScreen] = useState(false); + const [storeData, setStoreData] = useState({}); + const [StoreCameraAllow, setStoreCameraAllow] = useState(true); + + const [ShowDatePicker1, setShowDatePicker1] = useState(false); + const [ShowDatePicker, setShowDatePicker] = useState(false); + const [currentMenu, setCurrentMenu] = useState({}); + const [brandData, setBrandData] = useState([]); + const [rerenderdata, setrerenderdata]= useState(0); + const [rerenderdata2, setrerenderdata2]= useState(0); + + const [AddVisibility, setAddVisibility] = useState([]); + const [AddVisFormData, setAddVisFormData] = useState({}); + const [isAddVisPresent, setIsAddVisPresent] = useState(0); + const [showAlert, setShowAlert] = useState(false); + const [Categories, setCategories] = useState([]); + const [SubCategories, setSubCategories] = useState([]); + const [Brands, setBrands] = useState([]); + const [DisplayList, setDisplayList] = useState([]); + const [hasUnsavedChanges,setHasUnsavedChanges] = useState(false); + const [showCamera, setShowCamera] = useState(false); + const [clickImageType,setClickImageType]= useState('1'); + const [toRemoveId,setToRemoveId]= useState(''); + const [toRemoveItem,setToRemoveItem]= useState({}); + const [showRemoveConfirm_M,setshowRemoveConfirm_M]= useState(false); + const [showRAllC_M,setShowRAllC_M]= useState(false); + const [KPIFields, setKPIFields] = useState([]); + const [dateValue, setDateValue] = useState(''); + const [FromDate, setFromDate] = useState(''); + const [FromDate2, setFromDate2] = useState(new Date()); + + const [ToDate, setToDate] = useState(''); + const [ToDate2, setToDate2] = useState(new Date()); + + const [SelectedImg, setSelectedImg] = useState(''); + const [showModal, setShowModal] = useState(false); + const [reCapImgModalObj, setReCapImgModalObj] = useState({}); + const [showImageSaveOp, setShowImageSaveOp] = useState(true); + const [ImgMadCount, setImgMadCount] = useState({img1:0,img2:0}); + + const hasUnsavedChangesRef = React.useRef(hasUnsavedChanges); + const WindowDataRef=React.useRef(AddVisibility); + const StoreIdRef=React.useRef(null); + const ScreenNameRef=React.useRef(''); + + const [showSwitchCamera,setShowSwitchCamera]= useState(false); + const [OTPValidation,setOTPValidation]= useState(false); + + + const VisFormDataRef=React.useRef(AddVisFormData); + const isAddVisPresentRef=React.useRef(isAddVisPresent); + + // AddVisibility,AddVisFormData,isAddVisPresent,pro + + const d1=new Date(); + const d2=moment(d1).format('MM/DD/YYYY'); + + + useEffect(() => { + setLoaderTitle(ST.Loading+'...') + let params=props.route.params? props.route.params:{}; + let storeData1=params.storeData || {}; + let menu1=params.menu || {}; + let cameraAllow=storeData1.CameraAllow=='true' || storeData1.CameraAllow==1?true:false; + setStoreCameraAllow(cameraAllow); + + let isAdhoc=params.isAdhoc || false; + + StoreIdRef.current=storeData1.StoreId + ScreenNameRef.current=menu1.ScreenName + setIsAdhocScreen(isAdhoc); + setStoreData(storeData1); + setCurrentMenu(menu1); + + getData(storeData1,menu1); + + const AppStateSubscription = AppState.addEventListener('change', (pro)=>{ _handleAppStateChange(pro)}); + const unsubscribe=props.navigation.addListener('beforeRemove', onBeforeRemove); + + return function cleanup() { + AppStateSubscription.remove(); + // AppState.removeEventListener('change', (pro)=>{ _handleAppStateChange(AddVisibility,AddVisFormData,isAddVisPresent,pro)}); + return unsubscribe; + }; + }, []); + + + + const _handleAppStateChange = async (nextAppState) => { + if(nextAppState =='background' && hasUnsavedChangesRef.current==true){ + let newData = { + storeBGData:WindowDataRef.current, + menuName:ScreenNameRef.current, + StoreId1:StoreIdRef.current, + AddFormData:VisFormDataRef.current, + isVisPresent:isAddVisPresentRef.current, + visiteDate:d2 + } + let WindowsStr= JSON.stringify(newData) + await set_item('storeData',WindowsStr); + } + } + + useEffect(() => { + // props.navigation.removeListener('beforeRemove', onBeforeRemove); + // props.navigation.addListener('beforeRemove', onBeforeRemove); + const unsubscribe=props.navigation.addListener('beforeRemove', onBeforeRemove); + return unsubscribe; + }, [hasUnsavedChanges]); + + + useEffect(() => { + const unsubscribe=props.navigation.addListener('beforeRemove', onBeforeRemove); + return unsubscribe; + }, [showCamera]); + + function BgUnsavedChanges(val){ + hasUnsavedChangesRef.current=val + setHasUnsavedChanges(val); + } + + function BgWindowData(val){ + WindowDataRef.current=val + setAddVisibility(val); + } + + function BgAddVisFormData(val){ + VisFormDataRef.current=val + setAddVisFormData(val); + } + + function BgIsAddVisPresent(val){ + isAddVisPresentRef.current=val + setIsAddVisPresent(val); + } + + + function onBeforeRemove(e){ + if(showCamera==true){ + e.preventDefault(); + setShowCamera(false); + } + else{ + if (hasUnsavedChanges==true) { + e.preventDefault(); // Prevent default behavior of leaving the screen + onRemoveScreen(e); + } + else{ + return; + } + } + } + function onRemoveScreen(e){ + Alert.alert( + "", + ST.Doyoureallywanttoexitthescreen, + [ + { + text: ST.Cancel, + onPress: () => {}, + style: "cancel" + }, + { text: ST.OK, onPress: async () => { + BgUnsavedChanges(false) + await clear_item('storeData') + // setHasUnsavedChanges(false); + props.navigation.dispatch(e.data.action);} } + ] + ); + } + + async function getData(storeData1,menu1){ + try { + let {StoreId,ChainId,StateId,StoreTypeId}=storeData1; + + let AllKPIFields=await getKPIFields(menu1); + setKPIFields(AllKPIFields); + + let isOTPValiIndex=AllKPIFields.findIndex(i=>i.ScreenName=='ONEAPPMISSEDCALL' && i.KPIFieldName=='OTPOnlyNumber'); + let isOTPValiKPIObj=isOTPValiIndex>=0?AllKPIFields[isOTPValiIndex]:{}; + let isOTPVali=isOTPValiIndex>=0?isOTPValiKPIObj['KPIFieldEnable']:false; + let isOTPValiFlag=isOTPVali=="true"|| isOTPVali==true + + // let otpCondRes=isOTPVali=="OTPOnlyNumber" + setOTPValidation(isOTPValiFlag) + + let isFromDateIndex=AllKPIFields.findIndex(i=>i.KPIFieldName=='ShowFromDate'); + let isFromDateKPIObj=isFromDateIndex>=0?AllKPIFields[isFromDateIndex]:{}; + let isFromDateEnable=isFromDateIndex>=0?isFromDateKPIObj['KPIFieldEnable']:true; + + let isToDateIndex=AllKPIFields.findIndex(i=>i.KPIFieldName=='ShowToDate'); + let isToDateKPIObj=isToDateIndex>=0?AllKPIFields[isToDateIndex]:{}; + let isToDateEnable=isToDateIndex>=0?isToDateKPIObj['KPIFieldEnable']:true; + + // set switch camera flag as defined in mapping menu flag (if exists) + let SwitchingCameraI=AllKPIFields.findIndex(i=>i.KPIFieldName=='SwitchingCamera'); + let SwitchingCameraObj=SwitchingCameraI>=0?AllKPIFields[SwitchingCameraI]:{}; + let SwitchingCamera=SwitchingCameraI>=0?SwitchingCameraObj['KPIFieldEnable']:false; + setShowSwitchCamera(SwitchingCamera); + + + // if(isFromDateEnable==true && (FromDate=='' || FromDate==null) ) + // { + // let d1=moment().format('DD/MM/YYYY'); + // setFromDate(d1); + // } + + let storeBGData1=[],bgStoreJson={},isBgDataExists=false; + let windData =await get_item('storeData') + console.log("bg storeData:",windData); + if(windData!=null && windData!=''){ + let StoreJson = JSON.parse(windData) + let { storeBGData,menuName,StoreId1,AddFormData,visiteDate }= StoreJson + if(menuName == menu1.ScreenName && StoreId1== StoreId && visiteDate==d2){ + isBgDataExists=true; + bgStoreJson=StoreJson + if(storeBGData.length>0){ + storeBGData1=storeBGData; + BgWindowData(storeBGData) + } + + if(AddFormData!=null && Object.keys(AddFormData).length>0){ + let {CategoryId,SubCategoryId,FromDate,ToDate}=AddFormData; + // load subcategories if category exists + if(CategoryId!=null && CategoryId!=''){ + loadData(CategoryId,'SubCategories'); + } + if(SubCategoryId!=null && CategoryId!=''){ + loadData(SubCategoryId,'Brands'); + } + if(FromDate!=null && FromDate!=''){ + setFromDate(FromDate); + setFromDate2(new Date(FromDate)); + } + if(ToDate!=null && ToDate!=''){ + setToDate(ToDate); + setToDate2(new Date(ToDate)); + } + BgAddVisFormData(AddFormData) + } + BgUnsavedChanges(true) + } + } + await db.transaction(async function (txn) { + + let q=`Select Distinct p.CategoryId,p.CategoryName from Product_Master p where (p.IsCompetitor='0' or p.IsCompetitor=0) order by p.CategorySequence`; + await txn.executeSql(q,[],async function (txn2, txnres2) { + + if(txnres2.rows.length>0){ + let arr=[]; + for(var i=0;i0){ + let arr=[]; + for(var i=0;i0){ + let arr=[]; + + for(var i=0;i { + // render data with clicked image + let uri='file://'+imagePath; + addvisdata[image_path_key]=uri; + + setSelectedImg(uri) + BgAddVisFormData(addvisdata) + BgUnsavedChanges(true) + setrerenderdata2(!rerenderdata2); + + // add metdata then resize image and restored back to the imagePath + let restore_data={"destFilePath":imagePath,"imgurl":imgurl,imgWidth,imgHeight,mark_text1,mark_text2} + let is_restored=await restore_ImageWithMetaData(restore_data,imgdata); + console.log("image restored:",is_restored); + }) + .catch(err => { + console.log('ERROR: image file write failed!!!'); + console.log(err.message, err.code); + }); + } + } + + function _OpenCaptureImage_Modal(img){ + + const isImageCap=(img!='' || img!=null)?true:false; + // console.log("imag pop is trigger",isImageCap,showModal,img) + let {window,splitItem,splitItemIndex,cameraType}=reCapImgModalObj + let camera2Label=(window && window.PromoImage2Lable) || ''; + return ( + + { + isImageCap && + + + + + {openCamera('1')}}> + + + + {!showImageSaveOp && + {cancelImage()}}> + {ST.Close} + + } + + } + + ) + } + + async function openCamera(type='1'){ + console.log('openCamera'); + setClickImageType(type); + setShowCamera(true); + // props.navigation.navigate('CameraScreen',{'getImage':getImage,'cameraType':'back'}) + } + + async function onSubmitData(){ + let isvalid=await validate(); + if(isvalid){ + Keyboard.dismiss(); + setShowAlert(true); + } + } + + async function saveData(){ + // setHasUnsavedChanges(false); + BgUnsavedChanges(false) + setShowAlert(false); + setLoaderTitle(ST.SavingData+'...'); + setProcessing(true); + try { + let {StoreId,ChainId,StateId,StoreTypeId}=storeData; + await db.transaction(async function (txn) { + let q=`DELETE FROM ${AppTables.MISSED_CALL} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' `; + + // remove old data + await txn.executeSql(q,[],async function (txn2, txnres) { + console.log('av data deleted'); + },function (txnE,txnerr) { console.log(txnerr); },); + + var values=''; + + if(isAddVisPresent==1 && AddVisibility.length>0){ + for(var i=0;iitem.UniqueCode==UniqueCode ) + + let isOTPLengthIndex=KPIFields.findIndex(i=>i.ScreenName=='ONEAPPMISSEDCALL' && i.KPIFieldName=='OTPLength'); + let isOTPLengthKPIObj=isOTPLengthIndex>=0?KPIFields[isOTPLengthIndex]:{}; + let isOTPLength=isOTPLengthIndex>=0?isOTPLengthKPIObj['KPIFieldDisplayName']:6; + + if((UniqueCode=='' || UniqueCode==null )){ + isValid=false; + notify("Please enter Unique Code",'SHORT'); + }else if(isExist){ + isValid=false; + notify("Number is already exist",'SHORT'); + }else if((UniqueCode.lengthisOTPLength)){ + isValid=false; + notify(`Please enter Unique Code in ${isOTPLength} Digit`,'SHORT'); + } + + console.log('isValid:',isValid); + return isValid; + } + + function onFormDataChange(val,key,type=''){ + if(val!=''){ + let isValid=validateNumber(val,type); + if(!isValid){ + return; + } + } + + let data=AddVisFormData; + data[key]=val; + // setAddVisFormData(data); + // setHasUnsavedChanges(true); + BgAddVisFormData(data) + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + + function onselectionChange(option,keyLbl,keyVal){ + let data=AddVisFormData; + data[keyVal]=option.value; + data[keyLbl]=option.label; + + CleanSelector(option,keyLbl, data) + + // setAddVisFormData(data); + BgAddVisFormData(data) + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + + } + + function CleanSelector(option,keyLbl='',data={}){ + + if(keyLbl=='CategoryName'){ + loadData(option.value,'SubCategories'); + + // clear subcategory and brand + data['SubCategoryId']=''; + data['SubCategoryName']=''; + data['BrandId']=''; + data['BrandName']=''; + + + data['DisplayId']='' + data['DisplayName']='' + data['Remark']='' + data['Image1Path']='' + + setToDate(''); + setToDate2(new Date()); + + setFromDate(''); + setFromDate2(new Date()); + // data['FromDate']=''; + } + else if(keyLbl=='SubCategoryName'){ + loadData(option.value,'Brands'); + + // clear brand + data['BrandId']=''; + data['BrandName']=''; + + data['DisplayId']='' + data['DisplayName']='' + + data['Image1Path']='' + + data['Remark']='' + + setToDate(''); + setToDate2(new Date()); + + setFromDate(''); + setFromDate2(new Date()); + }else if(keyLbl=='BrandName'){ + + // clear brand + + data['DisplayId']='' + data['DisplayName']='' + + data['Image1Path']='' + + data['Remark']='' + + setToDate(''); + setToDate2(new Date()); + + setFromDate(''); + setFromDate2(new Date()); + }else if(keyLbl=='DisplayName'){ + + // clear brand + + data['Image1Path']='' + + data['Remark']='' + + setToDate(''); + setToDate2(new Date()); + + setFromDate(''); + setFromDate2(new Date()); + } + + } + async function loadData(qId,type){ + try { + await db.transaction(async function (txn) { + let q=''; + if(type=='SubCategories') q=`Select Distinct p.SubCategoryId,p.SubCategoryName from Product_Master p where (p.CategoryId='${qId}' or p.CategoryId=${qId}) and (p.IsCompetitor='0' or p.IsCompetitor=0) order by p.SubCategorySequence`; + else if(type=='Brands') q=`Select Distinct p.BrandName,p.BrandId from Product_Master p Where (p.SubCategoryId='${qId}' or p.SubCategoryId= ${qId}) and (p.IsCompetitor='0' or p.IsCompetitor=0) order by p.BrandSequence`; + + await txn.executeSql(q,[],async function (txn2, txnres2) { + // console.log('rowcount:,',type,':',txnres2.rows.length); + if(txnres2.rows.length>0){ + let arr=[]; + for(var i=0;i0){ + setShowRAllC_M(true); + return ; + } + var val1=val==1?1:0; + if(animatedChoice!=null){ + Animated.timing(animatedChoice, { + toValue: val1, + duration:400, + useNativeDriver:false, + }).start(); + } + // setIsAddVisPresent(val); + // setHasUnsavedChanges(true); + BgIsAddVisPresent(val); + BgUnsavedChanges(true) + if(val==0){ + // setAddVisibility([]); + // setAddVisFormData({}); + BgWindowData([]) + BgAddVisFormData({}) + } + } + + function onConfirmRemoveAll(){ + // Remove all data + if(animatedChoice!=null){ + Animated.timing(animatedChoice, { + toValue: 0, + duration:400, + useNativeDriver:false, + }).start(); + } + // setIsAddVisPresent(0); + // setHasUnsavedChanges(true); + // setAddVisibility([]); + // setAddVisFormData({}); + BgIsAddVisPresent(0); + BgUnsavedChanges(true) + BgWindowData([]) + BgAddVisFormData({}) + setShowRAllC_M(false); + } + + function onSaveCancel(){ + setShowAlert(false); + } + + async function Add_AddVis(){ + let isValid=await validateForm(); + console.log('isValid add:',isValid); + if(isValid){ + let arr=AddVisibility; + // let {CategoryName,CategoryId,SubCategoryName,SubCategoryId,BrandName,BrandId,DisplayName,DisplayId,Remark,Image1,Image1Path}=AddVisFormData; + + // let index=AddVisibility.findIndex(i=>i.CategoryId==CategoryId && i.SubCategoryId==SubCategoryId && i.BrandId==BrandId && i.DisplayId==DisplayId); + // if(index>=0){ + // notify(ST.Thisvisibilityhasalreadybeenadded,'LONG'); + // } + // else{ + arr.push(AddVisFormData); + // setAddVisibility(arr); + // setHasUnsavedChanges(true); + BgWindowData(arr) + BgUnsavedChanges(true) + notify(ST.AdditionalVisibilityaddedsuccessfully,'LONG'); + setrerenderdata(!rerenderdata); + + // clear data + setFromDate(''); + BgAddVisFormData({}) + setToDate(''); + // setAddVisFormData({}); + // } + } + + } + + function showRemoveConfirm(item,index){ + setToRemoveId(index); + setToRemoveItem(item); + setshowRemoveConfirm_M(true); + } + + function Remove_AddVis(){ + let index=toRemoveId + let item=toRemoveItem; + let arr=AddVisibility; + console.log('toRemoveId:',index); + if(index>=0 && index{ + console.log('onchange date',selectedDate); + if(selectedDate!=null){ + console.log('change date',selectedDate); + let d2=moment(selectedDate).format('DD/MM/YYYY'); + let dateString=String(d2) + setShowDate(false); + setTimeStamp(selectedDate); + setDate(d2); + onFormDataChange(dateString,ColumnName) + + } + }} + + /> + ); + } + + + function _render_addVisFormTop(){ + let xpos=0; + if(animatedChoice!=null ){ + xpos=animatedChoice.interpolate({ + inputRange:[0,1], + outputRange:[0,-75], + }); + } + + + return ( + + + {"Add unique code?"} + + + + {onChoiceSelect(1,'isPresent')}}> + {ST.Yes} + + {onChoiceSelect(0,'isPresent')}}> + {ST.No} + + + + + + { + isAddVisPresent==1 && (rerenderdata== rerenderdata) && + + + + + + + {"Unique Code"} + {onFormDataChange(val,'UniqueCode',OTPValidation?'numeric':"alphanumeric");}} + /> + + + + + {Add_AddVis()}}> + {ST.Add} + + + + + + {'Added Codes'} + + { + AddVisibility.length>0 && + AddVisibility.map((item,index)=>{ + console.log(item); + return ( + + + + + {'Unique Code :'} + {item.UniqueCode} + + {showRemoveConfirm(item,index)}}> + + + + + + + ); + }) + } + + + + } + + ) + } + + return ( + + {processing && } + + {_OpenCaptureImage_Modal()} + {ConfirmSaveAlert(props,showAlert,onSaveCancel,saveData)} + {ConfirmSaveAlert(props,showRemoveConfirm_M,()=>{setshowRemoveConfirm_M(false)},Remove_AddVis,'Do you really want to remove this missed call Code')} + {ConfirmSaveAlert(props,showRAllC_M,()=>{setShowRAllC_M(false)},onConfirmRemoveAll,'Do you really want to remove this missed call Code data')} + {setShowCamera(false);getImage(imgData)}} showCamera={showCamera} onHideCamera={()=>{setShowCamera(false);}}/> + + + + { Object.keys(storeData).length>0 && + + {_render_addVisFormTop()} + + } + + {onSubmitData()}}/> + + + + + + + ); +} + + + +export default connect(mapStateToProps, mapDispatchToProps)(MissedCallView); \ No newline at end of file diff --git a/PerformicsSrc/src/screens/Mpin.js b/PerformicsSrc/src/screens/Mpin.js new file mode 100644 index 0000000..cd36832 --- /dev/null +++ b/PerformicsSrc/src/screens/Mpin.js @@ -0,0 +1,708 @@ +import React, { useState, useEffect, useRef } from 'react'; +import Container from '../components/container'; +import { useRoute } from '@react-navigation/native'; +import CustomButton from '../components/customButton'; +import { globalStyles, customStyles, GetPageTheme } from "../styles/Global"; +import { StatusBar, Image, TextInput, View, Text, ScrollView, TouchableOpacity, Platform, PermissionsAndroid, KeyboardAvoidingView, Keyboard, Animated, Alert } from 'react-native'; +import { ReactReduxContext, connect, useSelector, useDispatch } from 'react-redux'; +import { mapStateToProps, mapDispatchToProps } from '../reducers/contextProvider'; +import { notify } from '../components/notify'; +import { get_item, set_item, clear_item } from '../components/localStorage'; +import { requestMultiplePerms, _checkLocationPermission } from '../components/geolocation'; +import OtpInputs from 'react-native-otp-inputs'; +import SplashScreen from 'react-native-splash-screen'; +import { SvgUri, SvgXml } from 'react-native-svg'; +import { version, copyrightText, baseurl, logoImage, db, AppVersion, DevType } from '../constants/constants'; +import { METHODS, getMethodName } from '../constants/methodNames'; +import GradientButton from '../components/gradientButton'; +import { Ionicons } from '../components/icons'; +import * as RNFS from "react-native-fs"; +import RNApkInstaller from "@dominicvonk/react-native-apk-installer"; +import CustomModal from '../components/CustomModal'; +import Graphic1 from '../assets/performics/mpin.svg'; +import { AlertForServerDT, enableGPS, getDownloadJson, getDownloadJson1, getProjectData, getProjectInfo, getServerDT, login, RestoreProjectInProps } from '../controller/functions'; +import CustomLoader from '../components/CustomLoader'; +import Geolocation from 'react-native-geolocation-service'; +import moment from 'moment'; +import DeviceInfo from 'react-native-device-info'; +import Text_eng from '../constants/Text_eng.json'; +import Text_thai from '../constants/Text_thai.json'; +import DownloadAPKModal from '../components/downloadApkModal'; +import ReactNativeBlobUtil from 'react-native-blob-util'; +import IRLogin from '../components/IRLogin'; +import crashlytics from '@react-native-firebase/crashlytics'; + + +function Mpin(props) { + const route = useRoute(); + // get all theme styles acc to current theme set + const todayDate = moment(new Date()).format('DD/MM/YYYY'); + const [ST, setST] = useState((props.StaticText || {})); + const PageTheme = GetPageTheme(props.DarkMode, route.name); + const customStyle = customStyles(props.DarkMode, route.name); + const [state, setState] = useState({ mpin: '', cmpin: '' }); + const [fieldsChange, setFieldsChange] = useState(false); + const animatedEffects = useRef(new Animated.Value(0)).current; + const [downloading, setDownloading] = useState(false); + const [processing, setProcessing] = useState(false); + const [loading, setLoading] = useState(true); + const [dowloadedCount, setDowloadedCount] = useState(0); + const [totalCount, setTotalCount] = useState(0); + const [isMPINUpdate, setIsMPINUpdate] = useState(false); + const [loaderTitle, setLoaderTitle] = useState('Fetching server date time...'); + const [downloadingText, setDownloadingText] = useState(''); + const [verToUpdate, setVerToUpdate] = useState(''); + const [loginRes, setLoginRes] = useState({}); + const [showVerUpdateModal, setShowVerUpdateModal] = useState(false); + + useEffect(() => { + SplashScreen.hide(); + getsetLanguage(); + requestMultiplePerms(); + RestoreProjectInProps(props); + console.log('IRLogin', IRLogin); + const keyboardDidShowListener = Keyboard.addListener( + 'keyboardDidShow', + () => { + Animated.timing(animatedEffects, { + toValue: 1, + duration: 400, + useNativeDriver: (Platform.OS == 'ios' ? false : true), + }).start(); + } + ); + const keyboardDidHideListener = Keyboard.addListener( + 'keyboardDidHide', + () => { + Animated.timing(animatedEffects, { + toValue: 0, + duration: 400, + useNativeDriver: (Platform.OS == 'ios' ? false : true), + }).start(); + } + ); + return () => { + keyboardDidHideListener.remove(); + keyboardDidShowListener.remove(); + }; + }, []); + + useEffect(() => { + autosubmit(); + }, [isMPINUpdate]); + + useEffect(() => { + console.log('props.StaticText changed'); + setST(props.StaticText); + }, [props.StaticText]); + + async function getsetLanguage() { + let country = await get_item('UserCountry'); + let lngJson = country == '2' ? Text_thai : Text_eng; + props.setStaticText(lngJson); + setTimeout(() => { + setLoading(false); setProcessing(false); + console.log('props.StaticText timeout'); + }, 3000); + } + + async function checkIfData_Downloaded() { + try { + const isDataStorageCleared = await get_item('DataStorageCleared'); + console.log('iisDataStorageCleared on login:', isDataStorageCleared); + let dateWiseDataDownload = await get_item('dateWiseDataDownload'); + let dateWiseDataDownload1 = dateWiseDataDownload != null ? JSON.parse(dateWiseDataDownload) : {}; + if (isDataStorageCleared != '1') { + if (dateWiseDataDownload1[todayDate] != null) { + let d = dateWiseDataDownload1[todayDate]; + props.setTodayDataExists(d); + props.setGlobalData({ isDataDownloaded: d }); + } + else { + let lods = {}; + lods[todayDate] = false; + set_item('dateWiseDataDownload', JSON.stringify(lods)); + props.setTodayDataExists(false); + } + } + } + catch (err) { + console.log(err); + } + } + const mpinlogin = async () => { + const { mpin, cmpin } = state; + if (validate()) { + //set m-pin info in global reducer + props.set_mpin({ mpin: mpin }); + //set m-pin info in encryted local storage + set_item('mpin', mpin); + //clear stack and mpin open login screen + refreshToken(); + } + } + + function autologin() { + const { mpin, cmpin } = state; + if (mpin.trim().length == 4 && cmpin.trim().length == 4) { + mpinlogin(); + } + } + + const validate = () => { + const { mpin, cmpin } = state; + console.log('state', state) + if (mpin.trim().length == 0) { + notify(ST.PleaseenterMPin, 'SHORT'); + return false; + } + else if (mpin.trim().length > 0 && mpin.trim().length < 4) { + notify(ST.Pleaseenter4digitMPin, 'SHORT'); + return false; + } + if (cmpin.trim().length == 0) { + notify(ST.PleaseconfirmyourMPin, 'SHORT'); + return false; + } + + if (cmpin != mpin) { + notify(ST.ConfirmMPindoesnotmatch, 'SHORT'); + return false; + } + + return true; + } + + + + async function refreshToken() { + let login_credentials = await get_item('login_credentials'); + let credentials = login_credentials != null ? JSON.parse(login_credentials) : {}; + if (credentials.un != null && credentials.pass != null) { + _getCurrentLocation(credentials.un, credentials.pass); + } + else { + notify(ST.Sessionnotfoundpleaseloginagain, 'SHORT'); + // clear stack and open login + props.navigation.reset({ index: 0, routes: [{ name: 'Login' }], }); + } + } + + async function autosubmit() { + const { mpin, cmpin } = state; + if (mpin.trim().length == 4 && cmpin.trim().length == 4) { + mpinlogin(); + } + } + + async function _getCurrentLocation(un, pass) { + console.log("checkpass:", pass, un) + setLoaderTitle(props.StaticText.Loading + '...') + const hasPermission = await _checkLocationPermission(); + if (hasPermission) { + const gpsEnabled = await DeviceInfo.isLocationEnabled(); + if (!gpsEnabled) { + notify("Please enable GPS to continue"); + return; + } + setProcessing(true); + Geolocation.getCurrentPosition( + async (position) => { + console.log("location", position) + let loc = { lat: position.coords.latitude, lng: position.coords.longitude }; + setState({ ...state, location: loc }); + await userlogin(loc, un, pass); + }, + (error) => { + notify(ST.Cannotgetuserposition); + let loc = { lat: '0', lng: '0' }; + userlogin(loc, un, pass); + setProcessing(false); + }, + { enableHighAccuracy: false, distanceFilter: 0, interval: 1000, fastestInterval: 2000, timeout: 10000, maximumAge: 10000 } + ); + } + else { + notify(ST.Pleaseallowlocationpermissiontologin); + } + } + async function update_project() { + // refresh project settings + let defData = { isUpdated: false, ProjectDetails: {}, projectid: "" } + let projectid = await get_item('projectCode'); + return await new Promise((resolve, reject) => { + if (projectid != '' && projectid != null) { + getProjectData(projectid) + .then((res) => { + if (res.success && res.responseData.projectName != null) { + //set project info in global reducer + const pdata = getProjectInfo(res.responseData, projectid); + props.set_project(pdata); + //set project info in encryted local storage + Promise.all([ + set_item('projectCode', projectid), + set_item('projectInfo', JSON.stringify(res.responseData)), + ]); + // set_item('projectCode', projectid); + // set_item('projectInfo', JSON.stringify(res.responseData)); + defData['projectid'] = projectid; + defData['isUpdated'] = true; + defData['ProjectDetails'] = res.responseData; + resolve(defData); + } + else { + resolve(defData); + } + }) + .catch((err) => { + console.log('err', err); + resolve(defData); + }); + } + else { + resolve(defData); + } + }) + .catch((err) => { + return defData; + }); + + } + + async function checkIfData_Downloaded() { + try { + const isDataStorageCleared = await get_item('DataStorageCleared'); + console.log('iisDataStorageCleared on login:', isDataStorageCleared); + let dateWiseDataDownload = await get_item('dateWiseDataDownload'); + let dateWiseDataDownload1 = dateWiseDataDownload != null ? JSON.parse(dateWiseDataDownload) : {}; + if (isDataStorageCleared != '1') { + if (dateWiseDataDownload1[todayDate] != null) { + let d = dateWiseDataDownload1[todayDate]; + props.setTodayDataExists(d); + props.setGlobalData({ isDataDownloaded: d }); + } + else { + let lods = {}; + lods[todayDate] = false; + set_item('dateWiseDataDownload', JSON.stringify(lods)); + props.setTodayDataExists(false); + } + } + } + catch (err) { + console.log(err); + } + } + + const userlogin = async (loc, username, password) => { + setLoaderTitle(props.StaticText.Loading + '...') + let proj_data = await update_project(); + let { isUpdated, ProjectDetails, projectid } = proj_data + let [ + projectInfo, + loginDetails, + loginInfo + ] = await Promise.all([ + get_item('projectInfo'), + get_item('loginOfDays'), + get_item('loginInfo') + ]); + // let projectInfo = await get_item('projectInfo'); + let projectDetails = projectInfo != null ? JSON.parse(projectInfo) : {}; + // let loginDetails = await get_item('loginOfDays'); + let loginOfDays = loginDetails != null ? JSON.parse(loginDetails) : {}; + let IR_Creds = projectDetails.IR_Creds != null && projectDetails.IR_Creds != "" ? JSON.parse(projectDetails.IR_Creds) : []; + console.log("`project IR Creds:", IR_Creds); + let Chatbot_Creds = projectDetails.Chatbot_Creds != null && projectDetails.Chatbot_Creds != "" ? JSON.parse(projectDetails.Chatbot_Creds) : []; + console.log("`Chatbot_Creds :", Chatbot_Creds); + // let loginInfo = await get_item('loginInfo'); + loginInfo = loginInfo != null && loginInfo != '' ? JSON.parse(loginInfo) : {}; + const todate = new Date(); + const today = moment(todate).format("HH:mm:ss"); + console.log("uptimised", "Mpin") + let [manufacturer, os, imeiNo1] = await Promise.all([ + DeviceInfo.getManufacturer(), + DeviceInfo.getSystemVersion(), + DeviceInfo.getAndroidId() + ]); + console.log("uptimised", "Mpin") + // let manufacturer = await DeviceInfo.getManufacturer(); + const model = `${DeviceInfo.getBrand()} ${DeviceInfo.getModel()}`; + console.log("Device Info ModelMpin:", model); + // let os = DeviceInfo.getSystemVersion(); + // let imeiNo1 = await DeviceInfo.getAndroidId(); + const data = { un: username, pass: password, Intime: today, lat: loc.lat, lng: loc.lng, manufacturer: manufacturer, model: model, os: os, imeiNo1: imeiNo1, imeiNo2: imeiNo1 }; + console.log('login data:', data); + const method_name = getMethodName(METHODS.LOGIN_METHOD); + const url = (props.baseurl || baseurl) + method_name; + console.log('url:', url); + await login(url, data) + .then(async (res) => { + if (res.networkErr && res.error) { + notify(ST.Pleaseconnecttointernet + '-' + res.error, 'SHORT'); + } + else if (!res.false && res.error) { + notify(res.error, 'SHORT'); + } + else { + let currentAppVersion = res.AppVersion != null ? res.AppVersion.toString() : ''; + if (currentAppVersion != null && currentAppVersion != '' && AppVersion != null && AppVersion != '' && currentAppVersion.replace(" ", '') != AppVersion.replace(" ", '') && Platform.OS == 'android' && DevType == "Prod") { + console.log('update version'); + setVerToUpdate(currentAppVersion); + setLoginRes(res); + setProcessing(false); + setShowVerUpdateModal(true); + return; + } + notify(ST.LoginSuccess, 'SHORT'); + //set login info in global reducer + crashlytics().setUserId(res.UserId); + const pdata = { islogin: true, UserId: res.UserId, SecurityToken: '', sessionData: res }; + props.set_session(pdata); + props.set_VisitDate({ VisitDate: res.VisitDate }) + const proj_udata = getProjectInfo(ProjectDetails, projectid, res.AppClearData); + props.set_project(proj_udata); + let country = res.CountryId != null ? res.CountryId + '' : ''; + //set login info in encryted local storage + // set_item('islogin', 'done'); + // set_item('UserCountry', country); + // set_item('loginToken', res.UserId); + // set_item('loginInfo', JSON.stringify(res)); + Promise.all([ + set_item('islogin', 'done'), + set_item('loginToken', res.UserId), + set_item('loginInfo', JSON.stringify(res)), + set_item('UserCountry', country) + ]); + props.set_user_details({ session_name: res.UserId }); + let lngJson = country == '2' ? Text_thai : Text_eng; + props.setStaticText(lngJson) + await checkIfData_Downloaded(); + let d1 = new Date(); + let d2 = moment(d1).format('MM/DD/YYYY'); + let loginInfo = await get_item('loginInfo'); + const loginDetails = JSON.parse(loginInfo); + const tablesToDownload = [ + 'PreviousDay_PendingJourneyPlan', + 'Mapping_SideMenuMiscellaneous', + 'Mapping_MenuConfiguration', + 'Master_AppDashboardWebView' + ]; + + let rs = await getData2(tablesToDownload, loginDetails); + setProcessing(false); + const final = Object.assign({}, ...rs); + const misc = final?.Mapping_SideMenuMiscellaneous || []; + const menuConfig = final?.Mapping_MenuConfiguration || []; + const QAD_arr = final?.PreviousDay_PendingJourneyPlan || []; + const app_dashbWebview_arr = final?.Master_AppDashboardWebView || [] + if (app_dashbWebview_arr?.length > 0) { + //console.log("loginU", app_dashbWebview_arr[0]?.AppDashboardWebUrl) + props.set_AppDashboardWebViewObj(app_dashbWebview_arr[0]?.AppDashboardWebUrl) + } else { + props.set_AppDashboardWebViewObj("") + } + //console.log("dfghj", misc) + const grooming = misc?.find(item => item.ScreenName === "GROOMINGIMG"); + //console.log("grooming------", grooming + "----------------------", misc) + let groomingObj = {} + if (grooming && grooming != undefined && misc) { + const groomingData = menuConfig.filter(item => item.ScreenName === "GROOMINGIMG"); + groomingObj = groomingData.reduce((acc, item) => { + acc[item.KPIFieldName] = item.KPIFieldDisplayName; + return acc; + }, {}); + + groomingObj.MenuName = grooming.MenuName + } + + props.set_GroomingObj(groomingObj); + // <<<<******for P-PAY + const pPAY = misc?.find(item => item.ScreenName === "PPAY"); + let pPAYObj = {} + if (pPAY && pPAY != undefined && misc) { + const pPAYData = menuConfig.filter(item => item.ScreenName === "PPAY"); + pPAYObj = pPAYData.reduce((acc, item) => { + acc[item.KPIFieldName] = item.KPIFieldDisplayName; + return acc; + }, {}); + pPAYObj.MenuName = pPAY.MenuName + } + //console.log("P-PAY", pPAYObj) + props.set_pPAYObj(pPAYObj); + // <<<<******for P-PAY*****************>>>>>>> + let prevStoreStatus = QAD_arr + let prevStoreObjStr = await get_item('prevStoreStatus'); + let prevStoreObj = prevStoreObjStr && JSON.parse(prevStoreObjStr) + let prevCond = !Boolean(prevStoreObj?.Status == true && prevStoreObj?.visiteDate == d2) + if (prevStoreStatus.length > 0 && prevCond) { + props.navigation.reset({ index: 0, routes: [{ name: 'PrevStoreReason', params: { UserData: res, 'TodayLogin': true } }], }); + } else if (loginOfDays[todayDate] != null) { + props.setLoginExists(true); + props.navigation.reset({ index: 0, routes: [{ name: 'NoticeBoard', params: { UserData: res, 'TodayLogin': true } }], }); + } + else { + props.setLoginExists(false); + props.navigation.reset({ index: 0, routes: [{ name: 'One_QAD', params: { UserData: res, 'TodayLogin': false } }], }); + } + } + }) + .catch((err) => { + setProcessing(false); + console.log('onPage Login error1', err); + }); + } + + async function getData2(downloadTypes = [], loginDetails = {}) { + try { + const url = (props.baseurl || baseurl) + getMethodName(METHODS.DOWNLOADJSON_METHOD); + const calls = downloadTypes.map(type => { + const body = { Downloadtype: type, username: loginDetails.UserId, empid: "" }; + return getDownloadJson(url, body); + }); + const results = await Promise.all(calls); + return results; + } catch (err) { + console.log(err); + } + } + + async function UpdateAppVersion() { + setShowVerUpdateModal(false); + let res = loginRes; + let AppPath = res.AppPath ? res.AppPath : ''; + if (Platform.OS == 'ios') { + props.navigation.reset({ index: 0, routes: [{ name: 'NoticeBoard', params: { UserData: res } }], }); + } + else { + if (AppPath != '' && AppPath != null) { + // Do you have permission to install from unknown sources? + let hasAPKInstallPerm = RNApkInstaller.haveUnknownAppSourcesPermission(); + if (!hasAPKInstallPerm) { + // Turn on Unknown Sources permission settings + RNApkInstaller.showUnknownAppSourcesPermission(); + } + // android update app + setDownloading(true); + let file_parts = AppPath.split('/'); + let filename = file_parts[file_parts.length - 1]; + const filePath = RNFS.DownloadDirectoryPath + "/" + filename; + console.log('filePath for downloading:', filename, filePath); + let size = 0; + let isExists = await RNFS.exists(filePath).then((res) => { return res; }); + if (isExists) { + let tempPath = RNFS.DocumentDirectoryPath + "/" + filename; + await RNFS.moveFile(filePath, tempPath).then((res) => { console.log('file moved'); }); + console.log('tempPath:', tempPath); + await RNFS.unlink(tempPath); + } + + setTotalCount(size); + // setDownloadingText('0%') + setDownloadingText('0 %') + ReactNativeBlobUtil.config({ + // response data will be saved to this path if it has access right. + addAndroidDownloads: { + path: filePath, + useDownloadManager: true, + title: filename, + description: 'An APK that will be installed', + mime: 'application/vnd.android.package-archive', + notification: true, + mediaScannable: true, + } + }) + .fetch('GET', AppPath, { + //some headers .. + }) + .progress((received, total) => { + let status_inpercent = ((received / total) * 100); + try { + status_inpercent = status_inpercent != NaN && status_inpercent != null ? parseInt(status_inpercent) : status_inpercent; + } + catch (err) { + console.log('status_inpercent error:', err); + } + setDownloadingText(status_inpercent + ' %'); + setDowloadedCount(received); + setTotalCount(total); + }) + .then(async (res) => { + // the path should be dirs.DocumentDir + 'path-to-file.anything' + // let status = res.info().status; + let cache_filePath = res.path(); + console.log('The file saved to ', cache_filePath, filePath); + setDownloading(false); + if (cache_filePath != null && cache_filePath != "" && cache_filePath != 'undefined') { + RNApkInstaller.install(filePath); + //set login info in global reducer + const pdata = { islogin: true, UserId: res.UserId, SecurityToken: '', sessionData: res }; + props.set_session(pdata); + props.set_VisitDate({ VisitDate: res.VisitDate }) + //set login info in encryted local storage + // set_item('islogin', 'done'); + // set_item('loginToken', res.UserId); + // set_item('loginInfo', JSON.stringify(res)); + // set_item('clearOnInstall', 'true'); + Promise.all([ + set_item('islogin', 'done'), + set_item('loginToken', res.UserId), + set_item('loginInfo', JSON.stringify(res)), + set_item('clearOnInstall', 'true') + ]); + props.set_user_details({ session_name: res.UserId }); + } + }); + } + else { + setDownloading(false); + notify('Something went wrong! Cannot update version') + } + } + } + + function _render_Alert() { + return ( + + + { UpdateAppVersion() }}> + {ST.OK} + + + + ) + } + function _renderAnimPart() { + let cl_scale = 1, cl_ty = 0, pl_scale = 1, illus_scale = 1, illus_ty = 0, formty = 0; + if (animatedEffects != null) { + pl_scale = animatedEffects.interpolate({ + inputRange: [0, 1], + outputRange: [1, 0.7], + }); + cl_scale = animatedEffects.interpolate({ + inputRange: [0, 1], + outputRange: [1, 0.6], + }); + cl_ty = animatedEffects.interpolate({ + inputRange: [0, 1], + outputRange: [0, -40], + }); + illus_scale = animatedEffects.interpolate({ + inputRange: [0, 1], + outputRange: [1, 0.5], + }); + illus_ty = animatedEffects.interpolate({ + inputRange: [0, 1], + outputRange: [0, -160], + }); + formty = animatedEffects.interpolate({ + inputRange: [0, 1], + outputRange: [0, -130], + }); + } + return ( + + + + + {props.splashlogo != null && props.splashlogo != '' && + + } + + + + + + {ST.HeyThere} + {ST.SetMPintologinyouraccount} + + {ST.EnterMPin} + { setState({ ...state, mpin: code }); setIsMPINUpdate(!isMPINUpdate); }} + numberOfInputs={4} + secureTextEntry={true} + keyboardType={"numeric"} + defaultValue={''} + autofillFromClipboard={false} + inputStyles={customStyle.otp_inputStyle} + style={customStyle.otp_field} + /> + + + {ST.ConfirmMPin} + { setState({ ...state, cmpin: code }); setIsMPINUpdate(!isMPINUpdate); }} + numberOfInputs={4} + secureTextEntry={true} + keyboardType={"numeric"} + defaultValue={''} + autofillFromClipboard={false} + inputStyles={customStyle.otp_inputStyle} + style={customStyle.otp_field} + /> + + + + ) + } + + return ( + + {processing && } + {loading && } + {(downloading) && } + {_render_Alert()} + + + {_renderAnimPart()} + + + + { mpinlogin(); }} /> + + {version} + {copyrightText} + + + + + ); +} + +export default connect(mapStateToProps, mapDispatchToProps)(Mpin) \ No newline at end of file diff --git a/PerformicsSrc/src/screens/MpinLogin.js b/PerformicsSrc/src/screens/MpinLogin.js new file mode 100644 index 0000000..8b5e981 --- /dev/null +++ b/PerformicsSrc/src/screens/MpinLogin.js @@ -0,0 +1,712 @@ +import React, { useState, useEffect, useRef } from 'react'; +import Container from '../components/container'; +import { useRoute } from '@react-navigation/native'; +import { customStyles, GetPageTheme } from "../styles/Global"; +import { View, Text, ScrollView, TouchableOpacity, Platform, Animated, Keyboard, Alert } from 'react-native'; +import { connect } from 'react-redux'; +import { mapStateToProps, mapDispatchToProps } from '../reducers/contextProvider'; +import { notify } from '../components/notify'; +import { get_item, set_item } from '../components/localStorage'; +import { version, copyrightText, baseurl, db, AppVersion, loaderTimeOut, DevType } from '../constants/constants'; +import { METHODS, getMethodName } from '../constants/methodNames'; +import { requestMultiplePerms, _checkLocationPermission } from '../components/geolocation'; +import OtpInputs from 'react-native-otp-inputs'; +import SplashScreen from 'react-native-splash-screen'; +import CustomLoader from '../components/CustomLoader'; +import DeviceInfo from 'react-native-device-info'; +import { getDownloadJson, getProjectData, getProjectInfo, login, RestoreProjectInProps } from '../controller/functions'; +import Geolocation from 'react-native-geolocation-service'; +import moment from 'moment'; +import GradientButton from '../components/gradientButton'; +import { MaterialIcons } from '../components/icons'; +import * as RNFS from "react-native-fs"; +import RNApkInstaller from "@dominicvonk/react-native-apk-installer"; +import CustomModal from '../components/CustomModal'; +import Graphic1 from '../assets/performics/mpin.svg'; +import Text_eng from '../constants/Text_eng.json'; +import Text_thai from '../constants/Text_thai.json'; +import DownloadAPKModal from '../components/downloadApkModal'; +import ReactNativeBlobUtil from 'react-native-blob-util'; +import crashlytics from '@react-native-firebase/crashlytics'; + +function MpinLogin(props) { + const route = useRoute(); + const [ST, setST] = useState((props.StaticText || {})); + // get all theme styles acc to current theme set + const PageTheme = GetPageTheme(props.DarkMode, route.name); + const customStyle = customStyles(props.DarkMode, route.name); + const todayDate = moment(new Date()).format('DD/MM/YYYY'); + const [state, setState] = useState({ mpin: '' }); + const [isMPINUpdate, setIsMPINUpdate] = useState(false); + const [processing, setProcessing] = useState(false); + const [loading, setLoading] = useState(true); + const [loaderTitle, setLoaderTitle] = useState('Fetching Server Date Time...'); + const [downloading, setDownloading] = useState(false); + const [verToUpdate, setVerToUpdate] = useState(''); + const [loginRes, setLoginRes] = useState({}); + const [showVerUpdateModal, setShowVerUpdateModal] = useState(false); + const [dowloadedCount, setDowloadedCount] = useState(0); + const [totalCount, setTotalCount] = useState(0); + const [downloadingText, setDownloadingText] = useState(''); + const animatedEffects = useRef(new Animated.Value(0)).current; + const processingTimeOut = useRef(null); + + useEffect(() => { + SplashScreen.hide(); + getsetLanguage(); + requestMultiplePerms(); + RestoreProjectInProps(props); + const keyboardDidShowListener = Keyboard.addListener( + 'keyboardDidShow', + () => { + Animated.timing(animatedEffects, { + toValue: 1, + duration: 400, + useNativeDriver: (Platform.OS == 'ios' ? false : true), + }).start(); + } + ); + const keyboardDidHideListener = Keyboard.addListener( + 'keyboardDidHide', + () => { + + Animated.timing(animatedEffects, { + toValue: 0, + duration: 400, + useNativeDriver: (Platform.OS == 'ios' ? false : true), + }).start(); + } + ); + return () => { + keyboardDidHideListener.remove(); + keyboardDidShowListener.remove(); + clearProcessTimeOut(); + }; + }, []); + + useEffect(() => { + autosubmit(); + }, [isMPINUpdate]); + + useEffect(() => { + console.log('props.StaticText changed'); + setST(props.StaticText); + }, [props.StaticText]); + + async function getsetLanguage() { + let country = await get_item('UserCountry'); + let lngJson = country == '2' ? Text_thai : Text_eng; + props.setStaticText(lngJson); + setTimeout(() => { + setLoading(false); setProcessing(false); + console.log('props.StaticText timeout'); + }, 3000); + } + + async function checkIfData_Downloaded() { + try { + const isDataStorageCleared = await get_item('DataStorageCleared'); + console.log('iisDataStorageCleared on login:', isDataStorageCleared); + let dateWiseDataDownload = await get_item('dateWiseDataDownload'); + let dateWiseDataDownload1 = dateWiseDataDownload != null ? JSON.parse(dateWiseDataDownload) : {}; + if (isDataStorageCleared != '1') { + if (dateWiseDataDownload1[todayDate] != null) { + let d = dateWiseDataDownload1[todayDate]; + props.setTodayDataExists(d); + props.setGlobalData({ isDataDownloaded: d }); + } + else { + let lods = {}; + lods[todayDate] = false; + set_item('dateWiseDataDownload', JSON.stringify(lods)); + props.setTodayDataExists(false); + } + } + } + catch (err) { + console.log(err); + } + } + + async function refreshToken() { + let login_credentials = await get_item('login_credentials'); + let credentials = login_credentials != null ? JSON.parse(login_credentials) : {}; + if (credentials.un != null && credentials.pass != null) { + _getCurrentLocation(credentials.un, credentials.pass); + } + else { + notify(ST.Sessionnotfoundpleaseloginagain, 'SHORT'); + // clear stack and open login + props.navigation.reset({ index: 0, routes: [{ name: 'Login' }], }); + } + } + + function setProcessTimeOut() { + processingTimeOut.current = setTimeout(() => { + setProcessing(false); + }, loaderTimeOut); + } + + function clearProcessTimeOut() { + processingTimeOut.current ? clearTimeout(processingTimeOut.current) : ''; + } + + async function _getCurrentLocation(un, pass) { + console.log("checkpass:", pass, un) + setLoaderTitle(props.StaticText.Loading + '...'); + const hasPermission = await _checkLocationPermission(); + if (hasPermission) { + const gpsEnabled = await DeviceInfo.isLocationEnabled(); + if (!gpsEnabled) { + notify("Please enable GPS to continue"); + return; + } + setProcessing(true); + setProcessTimeOut(); + Geolocation.getCurrentPosition( + async (position) => { + clearProcessTimeOut(); + console.log("location", position) + let loc = { lat: position.coords.latitude, lng: position.coords.longitude }; + setState({ ...state, location: loc }); + await userlogin(loc, un, pass); + }, + (error) => { + notify(ST.Cannotgetuserposition); + let loc = { lat: '0', lng: '0' }; + userlogin(loc, un, pass); + setProcessing(false); + }, + { enableHighAccuracy: false, distanceFilter: 0, interval: 1000, fastestInterval: 2000, timeout: 10000, maximumAge: 10000 } + ); + } + else { + notify(ST.Pleaseallowlocationpermissiontologin); + } + } + + const userlogin = async (loc, username, password) => { + setLoaderTitle(props.StaticText.Loading + '...'); + let proj_data = await update_project(); + let { isUpdated, ProjectDetails, projectid } = proj_data + let d1 = new Date(); + let d2 = moment(d1).format('MM/DD/YYYY'); + let [ + projectInfo, + loginDetails, + loginInfo + ] = await Promise.all([ + get_item('projectInfo'), + get_item('loginOfDays'), + get_item('loginInfo') + ]); + // let projectInfo = await get_item('projectInfo'); + let projectDetails = projectInfo != null && projectInfo != "" ? JSON.parse(projectInfo) : {}; + // let loginDetails = await get_item('loginOfDays'); + let loginOfDays = loginDetails != null && loginDetails != "" ? JSON.parse(loginDetails) : {}; + let IR_Creds = projectDetails.IR_Creds != null && projectDetails.IR_Creds != "" ? JSON.parse(projectDetails.IR_Creds) : []; + console.log("`project IR Creds:", IR_Creds); + let Chatbot_Creds = projectDetails.Chatbot_Creds != null && projectDetails.Chatbot_Creds != "" ? JSON.parse(projectDetails.Chatbot_Creds) : []; + console.log("`Chatbot_Creds MpinLogin:", Chatbot_Creds); + // let loginInfo = await get_item('loginInfo'); + loginInfo = loginInfo != null && loginInfo != '' ? JSON.parse(loginInfo) : {}; + let apv = loginInfo.AppVersion ? loginInfo.AppVersion : ''; + // set Reports Data from localStorage to global props --- start + const AppDashBoardReports_obj = await get_item('Master_MenuAppDashboard'); + let reports = AppDashBoardReports_obj != null && AppDashBoardReports_obj != "" ? JSON.parse(AppDashBoardReports_obj) : {}; + props.set_DashboardReports(reports); + // set Reports Data from localStorage to global props --- end + const todate = new Date(); + const today = moment(todate).format("HH:mm:ss"); + let [manufacturer, os, imeiNo1] = await Promise.all([ + DeviceInfo.getManufacturer(), + DeviceInfo.getSystemVersion(), + DeviceInfo.getAndroidId() + ]); + // let manufacturer = await DeviceInfo.getManufacturer(); + const model = `${DeviceInfo.getBrand()} ${DeviceInfo.getModel()}`; + console.log("Device Info Model:", model); + // let os = await DeviceInfo.getSystemVersion(); + // let imeiNo1 = await DeviceInfo.getAndroidId(); + const data = { un: username, pass: password, Intime: today, lat: loc.lat, lng: loc.lng, manufacturer: manufacturer, model: model, os: os, imeiNo1: imeiNo1, imeiNo2: imeiNo1 }; + const method_name = getMethodName(METHODS.LOGIN_METHOD); + const url = (props.baseurl || baseurl) + method_name; + console.log('url:', url); + setProcessTimeOut(); + await login(url, data) + .then(async (res) => { + console.log("MpinLogin res:", res) + clearProcessTimeOut(); + setProcessTimeOut(); + if (res) { + if (res.networkErr && res.error) { + notify(ST.Pleaseconnecttointernet + '-' + res.error, 'SHORT'); + setProcessing(false); + } + else if (!res.false && res.error) { + notify(res.error, 'SHORT'); + setProcessing(false); + } + else { + let currentAppVersion = res.AppVersion != null ? res.AppVersion.toString() : ''; + if (currentAppVersion != null && currentAppVersion != '' && AppVersion != null && AppVersion != '' && currentAppVersion.replace(" ", '') != AppVersion.replace(" ", '') && Platform.OS == 'android' && DevType == "Prod") { + console.log('update version'); + setVerToUpdate(currentAppVersion); + setLoginRes(res); + setProcessing(false); + setShowVerUpdateModal(true); + return; + } + notify(ST.LoginSuccess, 'SHORT'); + //set user identifier for cryslatics + crashlytics().setUserId(res.UserId); + //set login info in global reducer + const pdata = { islogin: true, UserId: res.UserId, SecurityToken: '', sessionData: res }; + props.set_session(pdata); + props.set_VisitDate({ VisitDate: res.VisitDate }) + const proj_udata = getProjectInfo(ProjectDetails, projectid, res.AppClearData); + props.set_project(proj_udata); + let country = res.CountryId != null ? res.CountryId + '' : ''; + //set login info in encryted local storage + Promise.all([ + set_item('islogin', 'done'), + set_item('loginToken', res.UserId), + set_item('loginInfo', JSON.stringify(res)), + set_item('UserCountry', country) + ]); + props.set_user_details({ session_name: res.UserId }); + let lngJson = country == '2' ? Text_thai : Text_eng; + props.setStaticText(lngJson) + await checkIfData_Downloaded(); + let loginInfo = await get_item('loginInfo'); + const loginDetails = JSON.parse(loginInfo); + const tablesToDownload = [ + 'PreviousDay_PendingJourneyPlan', + 'Mapping_SideMenuMiscellaneous', + 'Mapping_MenuConfiguration', + 'Master_AppDashboardWebView' + ]; + let rs = await getData2(tablesToDownload, loginDetails); + setProcessing(false); + const final = Object.assign({}, ...rs); + const misc = final?.Mapping_SideMenuMiscellaneous || []; + const menuConfig = final?.Mapping_MenuConfiguration || []; + const QAD_arr = final?.PreviousDay_PendingJourneyPlan || []; + const app_dashbWebview_arr = final?.Master_AppDashboardWebView || [] + if (app_dashbWebview_arr?.length > 0) { + //console.log("loginU", app_dashbWebview_arr[0]?.AppDashboardWebUrl) + props.set_AppDashboardWebViewObj(app_dashbWebview_arr[0]?.AppDashboardWebUrl) + } else { + props.set_AppDashboardWebViewObj("") + } + //console.log("dfghj", misc) + const grooming = misc?.find(item => item.ScreenName === "GROOMINGIMG"); + //console.log("grooming------", JSON.stringify(grooming)) + let groomingObj = {} + if (grooming && grooming != undefined && misc) { + const groomingData = menuConfig.filter(item => item.ScreenName === "GROOMINGIMG"); + groomingObj = groomingData.reduce((acc, item) => { + acc[item.KPIFieldName] = item.KPIFieldDisplayName; + return acc; + }, {}); + + groomingObj.MenuName = grooming.MenuName + } + + props.set_GroomingObj(groomingObj); + // <<<<******for P-PAY + const pPAY = misc?.find(item => item.ScreenName === "PPAY"); + let pPAYObj = {} + if (pPAY && pPAY != undefined && misc) { + const pPAYData = menuConfig.filter(item => item.ScreenName === "PPAY"); + pPAYObj = pPAYData.reduce((acc, item) => { + acc[item.KPIFieldName] = item.KPIFieldDisplayName; + return acc; + }, {}); + pPAYObj.MenuName = pPAY.MenuName + } + //console.log("P-PAY", pPAYObj) + props.set_pPAYObj(pPAYObj); + // <<<<******for P-PAY*****************>>>>>>> + let prevStoreStatus = QAD_arr + let prevStoreObjStr = await get_item('prevStoreStatus'); + let prevStoreObj = prevStoreObjStr && JSON.parse(prevStoreObjStr) + let prevCond = !Boolean(prevStoreObj?.Status == true && prevStoreObj?.visiteDate == d2) + if (prevStoreStatus.length > 0 && prevCond) { + props.navigation.reset({ index: 0, routes: [{ name: 'PrevStoreReason', params: { UserData: res, 'TodayLogin': true } }], }); + } else if (loginOfDays[todayDate] != null) { + console.log('today login already done----------'); + props.setLoginExists(true); + console.log('today login already done----------22222222'); + props.navigation.replace('NoticeBoard', { + UserData: res, + TodayLogin: true, + }); + } + else { + let currenttime = moment(new Date()).format('DD/MM/YYYY HH:mm:ss'); + let lods = {}; + lods[todayDate] = currenttime; + props.setLoginExists(false); + console.log('navigation prop:', props.navigation); + props.navigation.reset({ index: 0, routes: [{ name: 'One_QAD', params: { UserData: res, 'TodayLogin': false } }], }); + } + } + } + else { + notify("There is some error while login" + res); + setProcessing(false); + } + }).catch((err) => { + notify("There is some error while login" + err); + setProcessing(false); + }); + + } + + + async function getData2(downloadTypes = [], loginDetails = {}) { + try { + const url = (props.baseurl || baseurl) + getMethodName(METHODS.DOWNLOADJSON_METHOD); + const calls = downloadTypes.map(type => { + const body = { Downloadtype: type, username: loginDetails.UserId, empid: "" }; + return getDownloadJson(url, body); + }); + const results = await Promise.all(calls); + return results; + } catch (err) { + console.log(err); + } + } + + async function update_project() { + // refresh project settings + let defData = { isUpdated: false, ProjectDetails: {}, projectid: "" } + let projectid = await get_item('projectCode'); + console.log('projectid', projectid); + return await new Promise((resolve, reject) => { + if (projectid != '' && projectid != null) { + getProjectData(projectid) + .then((res) => { + if (res.success && res.responseData.projectName != null) { + //set project info in global reducer + const pdata = getProjectInfo(res.responseData, projectid); + props.set_project(pdata); + //set project info in encryted local storage + Promise.all([ + set_item('projectCode', projectid), + set_item('projectInfo', JSON.stringify(res.responseData)) + ]); + // set_item('projectCode', projectid); + // set_item('projectInfo', JSON.stringify(res.responseData)); + defData['projectid'] = projectid; + defData['isUpdated'] = true; + defData['ProjectDetails'] = res.responseData; + resolve(defData); + } + else { + resolve(defData); + } + }) + .catch((err) => { + console.log('err', err); + resolve(defData); + }); + } + else { + resolve(defData); + } + }) + .catch((err) => { + return defData; + }); + + } + + async function mpinlogin() { + const { mpin } = state; + if (validate()) { + // let token = await get_item('loginToken'); + // let master_pin = await get_item('mpin'); + let [token, master_pin] = await Promise.all([ + get_item('loginToken'), + get_item('mpin') + ]); + console.log("master_pin",) + if (master_pin == mpin && master_pin != '' && master_pin != null && token != '' && token != null && token != undefined) { + refreshToken();// refresh token + } + else { + notify(ST.YouenteredwrongMPin, 'SHORT'); + } + } + } + + async function autosubmit() { + const { mpin } = state; + if (mpin.trim().length == 4) { + mpinlogin(); + } + } + const validate = () => { + const { mpin } = state; + if (mpin.trim().length == 0) { + notify(ST.PleaseenterMPin, 'SHORT'); + return false; + } + return true; + } + + + async function forgetMpin() { + let params = { 'forgotMpin': '1' }; + handlefcmtokenstatus('Login', { params: params }); + } + + async function UpdateAppVersion() { + setShowVerUpdateModal(false); + let res = loginRes; + let AppPath = res.AppPath ? res.AppPath : ''; + if (Platform.OS == 'ios') { + props.navigation.reset({ index: 0, routes: [{ name: 'NoticeBoard', params: { UserData: res } }], }); + } + else { + if (AppPath != '' && AppPath != null) { + // Do you have permission to install from unknown sources? + let hasAPKInstallPerm = RNApkInstaller.haveUnknownAppSourcesPermission(); + if (!hasAPKInstallPerm) { + // Turn on Unknown Sources permission settings + RNApkInstaller.showUnknownAppSourcesPermission(); + } + // android update app + setDownloading(true); + let file_parts = AppPath.split('/'); + let filename = file_parts[file_parts.length - 1]; + const filePath = RNFS.DownloadDirectoryPath + "/" + filename; + console.log('filePath for downloading:', filename, filePath); + let size = 0; + let isExists = await RNFS.exists(filePath).then((res) => { return res; }); + if (isExists) { + let tempPath = RNFS.DocumentDirectoryPath + "/" + filename; + await RNFS.moveFile(filePath, tempPath).then((res) => { console.log('file moved'); }); + console.log('tempPath:', tempPath); + await RNFS.unlink(tempPath); + } + + setTotalCount(size); + setDownloadingText('0 %') + ReactNativeBlobUtil.config({ + // response data will be saved to this path if it has access right. + addAndroidDownloads: { + path: filePath, + useDownloadManager: true, + title: filename, + description: 'An APK that will be installed', + mime: 'application/vnd.android.package-archive', + notification: true, + mediaScannable: true, + } + }) + .fetch('GET', AppPath, { + //some headers .. + }) + .progress((received, total) => { + let status_inpercent = ((received / total) * 100); + try { + status_inpercent = status_inpercent != NaN && status_inpercent != null ? parseInt(status_inpercent) : status_inpercent; + } + catch (err) { + console.log('status_inpercent error:', err); + } + setDownloadingText(status_inpercent + ' %'); + setDowloadedCount(received); + setTotalCount(total); + }) + .then(async (res) => { + // the path should be dirs.DocumentDir + 'path-to-file.anything' + // let status = res.info().status; + let cache_filePath = res.path(); + console.log('The file saved to ', cache_filePath, filePath); + setDownloading(false); + if (cache_filePath != null && cache_filePath != "" && cache_filePath != 'undefined') { + RNApkInstaller.install(filePath); + //set login info in global reducer + const pdata = { islogin: true, UserId: res.UserId, SecurityToken: '', sessionData: res }; + props.set_session(pdata); + props.set_VisitDate({ VisitDate: res.VisitDate }) + //set login info in encryted local storage + // set_item('islogin', 'done'); + // set_item('loginToken', res.UserId); + // set_item('loginInfo', JSON.stringify(res)); + // set_item('clearOnInstall', 'true'); + Promise.all([ + set_item('islogin', 'done'), + set_item('loginToken', res.UserId), + set_item('loginInfo', JSON.stringify(res)), + set_item('clearOnInstall', 'true') + ]); + props.set_user_details({ session_name: res.UserId }); + } + }); + } + else { + setDownloading(false); + notify('Something went wrong! Cannot update version') + } + } + } + + + function _render_Alert() { + return ( + + + { UpdateAppVersion() }}> + {ST.OK} + + + + ) + } + + + function _renderAnimPart() { + let cl_scale = 1, cl_ty = 0, pl_scale = 1, illus_scale = 1, illus_ty = 0, formty = 0; + if (animatedEffects != null) { + pl_scale = animatedEffects.interpolate({ + inputRange: [0, 1], + outputRange: [1, 0.7], + }); + cl_scale = animatedEffects.interpolate({ + inputRange: [0, 1], + outputRange: [1, 0.6], + }); + cl_ty = animatedEffects.interpolate({ + inputRange: [0, 1], + outputRange: [0, -40], + }); + illus_scale = animatedEffects.interpolate({ + inputRange: [0, 1], + outputRange: [1, 0.5], + }); + illus_ty = animatedEffects.interpolate({ + inputRange: [0, 1], + outputRange: [0, -150], + }); + formty = animatedEffects.interpolate({ + inputRange: [0, 1], + outputRange: [0, -120], + }); + } + return ( + + + {Platform.OS === 'ios' && ( + props.navigation.navigate('Settings')}> + + + )} + + {props.splashlogo != null && props.splashlogo != '' && + } + + + + + {loading == false && + {ST.HeyThere} + {ST.MPintologinyouraccount} + + { + // Defer state update to next tick + setTimeout(() => { + setState(prev => ({ ...prev, mpin: code })); + setIsMPINUpdate(prev => !prev); + }, 0); + }} + numberOfInputs={4} + secureTextEntry={true} + keyboardType="numeric" + defaultValue="" + autofillFromClipboard={false} + inputStyles={customStyle.otp_inputStyle} + style={customStyle.otp_field} + /> + + + + { forgetMpin() }}> + {ST.ForgotMPin} + + + } + + ) + } + + // notification token + const [deviceToken, setDeviceToken] = useState({ + android_token: '', + ios_token: '', + }); + + return ( + + {processing && } + {loading && } + {(downloading) && } + {_render_Alert()} + + + {_renderAnimPart()} + + {loading == false && + { mpinlogin(); }} /> + + {version} + {copyrightText} + + } + + + ); +} + +export default connect(mapStateToProps, mapDispatchToProps)(MpinLogin) \ No newline at end of file diff --git a/PerformicsSrc/src/screens/NoticeBoard.js b/PerformicsSrc/src/screens/NoticeBoard.js new file mode 100644 index 0000000..904fcb6 --- /dev/null +++ b/PerformicsSrc/src/screens/NoticeBoard.js @@ -0,0 +1,4339 @@ +import React, { useState, useEffect, useRef } from 'react'; +import Container from '../components/container'; +import { useRoute } from '@react-navigation/native'; +import { customStyles, GetPageTheme, WP } from "../styles/Global"; +import { StatusBar, Image, TextInput, View, Text, ScrollView, TouchableOpacity, Platform, PermissionsAndroid, Modal, Animated, FlatList, Alert, DeviceEventEmitter, StyleSheet, Button, Linking } from 'react-native'; +import { ReactReduxContext, connect, useSelector, useDispatch } from 'react-redux'; +import { mapStateToProps, mapDispatchToProps } from '../reducers/contextProvider'; +import { notify } from '../components/notify'; +import moment from 'moment'; +import { getDownloadJson, DownloadData, getDownloadJson1, UpdateStoreStatus, getKPIS, getProjectInfo, CreateDirKPIimg, getAllFolderImages, UploadData2, getIRPendingSessionCount, getDataPendingStores, uploadContractData, getAllFileForAFolder, uploadContractFormFiles, AlertForServerDT, get_rowColSettings, UploadAddStoreInfoData, getNotificationList, getKPIFields, openLink, openWebBrowser, createContact } from '../controller/functions'; +import { get_item, set_item, clear_item } from '../components/localStorage'; +import { db, ContractFormImagePath, loaderTimeOut, loaderTimeOut_longer, AddStoreImagePath, Production } from '../constants/constants'; +import SplashScreen from 'react-native-splash-screen'; +import { WebView } from 'react-native-webview'; +import CustomLoader from '../components/CustomLoader'; +import DownloadDataModal from '../components/downloadDataModal'; +import DrawerHeader from '../components/drawerHeader'; +import LinearGradient from 'react-native-linear-gradient'; +import { devDownloadKeys, getDownloadDataTask, getPostData } from '../components/downloadTasks'; +import { getMethodName, METHODS } from '../constants/methodNames'; +import { SyncIRsessions, getPendingIRImages, uploadAllData, uploadAllImages, uploadAllVisitors, uploadAll_DBData, uploadDBStatus, uploadStoreStatus } from '../constants/uploadData'; +import { AppTables } from '../constants/tableConstants'; +import { Q_DBMenuList, Q_MenuList } from '../constants/ConstantQueries'; +import { Q_getpaidvisibility } from '../constants/ConstantQueries'; +import Geolocation from 'react-native-geolocation-service'; +//import Carousel, { Pagination } from 'react-native-snap-carousel'; +import Carousel from 'react-native-reanimated-carousel'; +import Store_plannedIcon from '../assets/performics/Planned.svg'; +import Store_coveredIcon from '../assets/performics/Covered.svg'; +import { getDashBoardConstData } from '../constants/DashboardData'; +import IRLogin from '../components/IRLogin'; +import { Feather } from '../components/icons'; +import { AppName, PerformicsIRAppName } from '../../../AppSpecificContant'; +import CustomModal from '../components/CustomModal'; +import messaging from '@react-native-firebase/messaging'; +// webview survey +import { useIsFocused } from "@react-navigation/native"; +import PushNotification from "react-native-push-notification"; +import TrainingPromptModal from '../components/TrainingPromptModal' +import BadgeModal from '../components/BadgeModal'; + +function NoticeBoard(props) { + const route = useRoute(); + let d2 = moment().format('MM/DD/YYYY'); + let d3 = moment().format('DD/MM/YYYY'); + const ST = props.StaticText || {}; + ///Badge + const [showBadge, setShowBadge] = useState(false); + const [finalImage, setFinalImage] = useState(null); + const [webHeight, setWebHeight] = useState(400); + + useEffect(() => { + console.log("Updated groomingObj -->", props.GroomingObj, props.pPAYObj); + }, [props.GroomingObj]); + + useEffect(() => { + const unsubscribeBackground = messaging().onNotificationOpenedApp(remoteMessage => { + // Navigate to NotificationList when app is opened from background + props.navigation.navigate('NotificationList'); + }); + + const handleInitialNotification = async () => { + const initialNotification = await messaging().getInitialNotification(); + if (initialNotification) { + // Navigate to NotificationList when app is opened from quit state + props.navigation.navigate('NotificationList'); + } + }; + + handleInitialNotification(); + if (props?.badgeCount && props?.badgeCount > 0) { + PushNotification.setApplicationIconBadgeNumber(props?.badgeCount); + } + return () => { + unsubscribeBackground(); + }; + }, []); + + + const handleSaveBadge = async (uri) => { + setFinalImage(uri); + setProcessing(true); + let loginInfo = await get_item('loginInfo'); + const loginDetails = JSON.parse(loginInfo); + const today = moment(new Date()).format('MM/DD/YYYY'); + let user_answers = []; + let ans_obj = { "Visit_Date": today, "UserId": loginDetails.UserId, "Project_code": projectCode }; + user_answers.push(ans_obj); + let post_data = { + "MID": "0", + "Keys": "RetailDay_Data", + "JsonData": JSON.stringify(user_answers), + "UserId": loginDetails.UserId + } + const url = props.baseurl + getMethodName(METHODS.UPLOADJSON_METHOD); + console.log('RetailDay upload ', url, post_data); + await UploadData2(url, post_data) + .then(async (res) => { + setProcessing(false); + console.log(res); + if (res.success == false) { + return + } + }) + .catch(err => { + console.log('onPage Team error', err); + }); + }; + + // get all theme styles acc to current theme set + const PageTheme = GetPageTheme(props.DarkMode, route.name); + const customStyle = customStyles(props.DarkMode, route.name); + + const [state, setState] = useState({ webviewurl: '' }); + const [processing, setProcessing] = useState(true); + const [loaderTitle, setLoaderTitle] = useState(); + + // download data state + const [isDataDownloaded, setisDataDownloaded] = useState(false); + const [TaskResponse, setTaskResponse] = useState([]); + const [downloadingText, setDownloadingText] = useState(''); + const [dowloadedCount, setDowloadedCount] = useState(-1); + const [onDownloadCountChange, setOnDownloadCountChange] = useState(1); + const [totalCount, setTotalCount] = useState(0); + const [AllTableQueries, setAllTableQueries] = useState([]); + const [DownloadTasks, setDownloadTasks] = useState([]); + const [IsPJPMandatory, setIsPJPMandatory] = useState(true); + const projectCode = props.projectCode; + + const [uploadedCount, setUploadedCount] = useState(0); + const [TotalUpCount, setTotalUpCount] = useState(0); + const [startUploading, setStartUploading] = useState(false); + const [showOkButtonOnUpload, setShowOkButtonOnUpload] = useState(false); + + const [UploadingSubText, setUploadingSubText] = useState(""); + const [UploadingText, setUploadingText] = useState("Uploading Data..."); + const [showProgresssBar, setshowProgresssBar] = useState(false); + const [IRSessionPendingCount, setIRSessionPendingCount] = useState(0); + const [StartDafterPrevUpload, setStartDafterPrevUpload] = useState(false); + const [subTextStyle, setSubTextStyle] = useState(''); + const [DErrorMsg, setDErrorMsg] = useState({}); + const [showDErrAlert, setshowDErrAlert] = useState(false); + const sessionsToUpload = useRef([]); + const sessionsUploadedCount = useRef(0); + const sessionsReceived = useRef(0); + + //dashboard states + const imageSlider = useRef(null); + const [bannerdetail, setBannerDetail] = useState([]); + const [activeSlide, setActiveSlide] = useState(0); + const [DashboardCovdata, setDashboardCovdata] = useState({}); + + const [QuickLinks, setQuickLinks] = useState([]); + const [StorePerformanceText, setStorePerformanceText] = useState([]); + const processingTimeOut = useRef(null); + const [AppDashReportsSec, setAppDashReportsSec] = useState([]); + ///gyancast + const [TrainingOrg, setTrainingOrg] = useState({}); + const [showTrainingModal, setShowTrainingModal] = useState(false); + const [TrainingOrg2, setTrainingOrg2] = useState([]); + const [bannerRefresh, setBannerRefresh] = useState(false); + + const handleDoIt = async (item) => { + // await clear_item('GyanCast'); + setGyanCast(item) + props.navigation.navigate('Gyancasts', { Popup: true, PopupId: item?.PopupId }); + }; + + const handleNotNow = async (item) => { + setGyanCast(item) + }; + + const setGyanCast = async (item) => { + console.log("GyanCast-------1213", item?.PopupId) + if (item?.PopupId != 1) { + let d2 = moment().format('MM/DD/YYYY'); + let newData = { + Show: true, + visiteDate: d2 + } + let WindowsStr = JSON.stringify(newData) + console.log("GyanCast-----", WindowsStr) + await set_item('GyanCast', WindowsStr); + } + setShowTrainingModal(false); + } + + useEffect(() => { + setLoaderTitle(ST.Loading + '...') + dashboardview(); + const removeIRListener = DeviceEventEmitter.addListener('onGlobalIRImageUpload_NB', (data) => { onIRImageUpload(data) }); + const willFocusSubscription = props.navigation.addListener('focus', () => { + dashboardview('reload'); + getIRSessionStatus(); + }); + + return function cleanup() { + if (AppName == PerformicsIRAppName && props.IR_CameraEnableOnApp == true) { + IRLogin?.deRegisterReceiver(); + } + removeIRListener.remove(); + return willFocusSubscription; + }; + }, []); + + + + useEffect(() => { + // console.log('on props.startDownload change:',props.startDownload); + if (props.startDownload == true) { + // start previous day uploading if any exists + // if not exists then it will automatically start download by calling beforeExecuteTasks + uploadPrevDayData(); + } + }, [props.startDownload]); + + ///gyancast + useEffect(() => { + console.log('startDownload changed:', props.startDownload); + getData(); + getData2(); + }, [props.startDownload]); + + async function getData2() { + try { + let List = []; + await db.transaction(async function (txn) { + let q = `Select TrainingId,Topic,Description,MediaType,TrainingContentId,Thumnail,TrainingUrl,Status,StartTime,PublishDate,ExpiryDate,DefaultLang,TrainingNo from Gyancast_TrainingContent where (DefaultLang="true" or DefaultLang=1 or DefaultLang='1') and Status="Pending" and ExpiryDate>='${d3}' order by ExpiryDate`; + console.log("dummy-q", q) + await txn.executeSql( + q, + [], + async function (txn2, txnres2) { + console.log("txnres2.rows.length43434:", txnres2.rows.length); + if (txnres2.rows.length > 0) { + for (let i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + List.push(data); + } + + setTrainingOrg2(List); + + } + }, + function (txnE, txnerr) { + console.log(txnerr); + } + ); + }); + } catch (err) { + console.log(err); + } + } + + async function getData() { + try { + // await clear_item('GyanCast'); + let GyanCast = await get_item('GyanCast'); + let GyanCastVal = GyanCast && JSON.parse(GyanCast) + console.log("GyanCast-------", GyanCastVal, d2, (GyanCastVal == undefined), ((d2 != GyanCastVal?.visiteDate) && GyanCast?.Show != true), (GyanCastVal == undefined) || ((d2 != GyanCastVal?.visiteDate) && GyanCast?.Show != true)) + if ((GyanCastVal == undefined) || ((d2 != GyanCastVal?.visiteDate) && (GyanCast?.Show != true))) { + await db.transaction(async function (txn) { + let q = `Select * from Gyancast_PopupMessage`; + await txn.executeSql( + q, + [], + async function (txn2, txnres2) { + console.log("txnres2.rows.length:-setTrainingOrg", txnres2.rows.length); + if (txnres2.rows.length > 0) { + for (let i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + setTrainingOrg(data); + console.log("setTrainingOrg---", data) + setShowTrainingModal(true) + } + } + }, + function (txnE, txnerr) { + console.log(txnerr); + } + ); + }); + } + } catch (err) { + console.log(err); + } + } + + useEffect(() => { + console.log('on StartDafterPrevUpload change:', StartDafterPrevUpload, props.startDownload); + if (props.startDownload == true) { + beforeExecuteTasks(); + } + }, [StartDafterPrevUpload]); + + useEffect(() => { + console.log('on totalCount change:', totalCount, props.startDownload); + if (props.startDownload == true) { + startDownload(); + } + }, [totalCount]); + + useEffect(() => { + if (props.startUpload == true) { + startUpload(); + } + }, [props.startUpload]); + + + + useEffect(() => { + if (props.startDownload && TaskResponse != null) { + console.log('increment dowloadedCount changed'); + let count = dowloadedCount + 1; + setDowloadedCount(count); + setOnDownloadCountChange(!onDownloadCountChange); + } + }, [TaskResponse]); + + + useEffect(() => { + if (dowloadedCount <= totalCount) { + executeTasks(); + } else { + props.set_startDownload({ startDownload: false }); + notify(ST.DataDownloaded, 'SHORT'); + CreateDirKPIimg(); + } + }, [onDownloadCountChange]); + + function setProcessTimeOut(time = loaderTimeOut) { + processingTimeOut.current = setTimeout(() => { + setProcessing(false); + props.set_startDownload({ startDownload: false }); + setStartUploading(false); + }, time); + } + + function clearProcessTimeOut() { + processingTimeOut.current ? clearTimeout(processingTimeOut.current) : ''; + } + + async function checkData() { + let projectInfo = await get_item('projectInfo'); + let projectCode = await get_item('projectCode'); + let projectDetails = JSON.parse(projectInfo); + let isPJPMand = projectDetails.PJPMandatory != null ? projectDetails.PJPMandatory : true; + setIsPJPMandatory(isPJPMand); + + if (props.baseurl == '' || props.baseurl == null || props.baseurl == undefined) { + //set project info in global redux state + let imgurl = projectDetails.imageUploadURL != null ? projectDetails.imageUploadURL + '/' : ''; + // const pdata={pid:projectCode,pname:projectDetails.projectName,pcode:projectCode,alldata:projectDetails,baseurl:projectDetails.baseURL,imageUploadUrl:imgurl,GeoFenceEnable:(projectDetails.GeoFenceEnable_checkin!=null && projectDetails.GeoFenceEnable_checkin==1),GeoFenceRadius:(projectDetails.GeoFenceRadius_checkin || 0),GFEnable_checkout:(res.GeoFenceEnable_checkout!=null && res.GeoFenceEnable_checkout==1),GFRadius_checkout:(res.GeoFenceRadius_checkout || 0),CheckOut_PhotoReq:res.PhotoRequired_Checkout }; + const pdata = getProjectInfo(projectDetails, projectCode); + props.set_project(pdata); + } + } + + async function checkIfData_Downloaded() { + // console.log('checkIfData_Downloaded'); + let d1 = new Date(); + let d2 = moment(d1).format('MM/DD/YYYY'); + const isDataStorageCleared = await get_item('DataStorageCleared'); + let dateWiseDataDownload = await get_item('dateWiseDataDownload'); + let dateWiseDataDownload1 = dateWiseDataDownload != null ? JSON.parse(dateWiseDataDownload) : {}; + let todayDate = moment(new Date()).format('DD/MM/YYYY'); + if (isDataStorageCleared != '1') { + + if (dateWiseDataDownload1[todayDate] != null) { + let d = dateWiseDataDownload1[todayDate]; + console.log('isdtatdownloaded:', d); + props.setTodayDataExists(d); + props.setGlobalData({ isDataDownloaded: d }) + return d; + } else { + let lods = {}; + lods[todayDate] = false; + console.log('lods:', lods); + await set_item('dateWiseDataDownload', JSON.stringify(lods)); + props.setTodayDataExists(false); + return false; + } + } + else { + return false; + } + + } + + //Dashboard get data functions start + function NB_start_Download() { + clearProcessTimeOut(); + props.set_startDownload({ startDownload: true }); + } + + function NB_AskForDownload() { + Alert.alert( + "Performics", + ST.Doyouwanttodownloaddata, + [ + { + text: ST.Cancel, + onPress: () => { }, + style: "cancel" + }, + { text: ST.OK, onPress: () => { NB_start_Download(); } } + ], + ); + } + + function NB_RetailDay() { + setShowBadge(true) + } + + function NB_start_Upload() { + props.set_startUpload({ startUpload: true }); + } + + function NB_AskForUpload() { + Alert.alert( + "Performics", + ST.Doyouwanttouploaddata, + [ + { + text: ST.Cancel, + onPress: () => { }, + style: "cancel" + }, + { text: ST.OK, onPress: () => { NB_start_Upload(); } } + ], + ); + } + + async function NB_pPAYLink(Ppay_ExternalLink) { + if (Ppay_ExternalLink !== null && Ppay_ExternalLink !== undefined && Ppay_ExternalLink !== "") { + let modifyPpay_link = Ppay_ExternalLink + "?ProjectCode=" + props.projectCode + "&UserId=" + props.UserId + console.log("ppay_link", modifyPpay_link) + const supported = await Linking.canOpenURL(modifyPpay_link); + if (supported) { + await Linking.openURL(modifyPpay_link); + } else { + console.log("Don't know how to open URI: " + modifyPpay_link); + } + } + } + + async function getFTDData() { + console.log("getFTDData called"); + let alldata = DashboardCovdata; + let d1 = new Date(); + let d2 = moment(d1).format('MM/DD/YYYY'); + + await db.transaction(async function (txn) { + + //get FTD planned Count + let q = `Select * from Mapping_JourneyPlan where VisitDate='${d2}'`; + await txn.executeSql(q, [], async function (txn2, txnres2) { + console.log('FTD Planned count:', txnres2.rows.length); + alldata['FTDPlanned'] = txnres2.rows.length; + setDashboardCovdata(alldata) + }, function (txn2, txnerr) { console.log(txnerr); }); + + //get FTD Covered Count + let q2 = `Select Distinct STORE_ID from DR_COVERAGE where VISIT_DATE='${d2}'`; + await txn.executeSql(q2, [], async function (txn2, txnres2) { + console.log('FTDCovered count:', txnres2.rows.length); + alldata['FTDCovered'] = txnres2.rows.length; + setDashboardCovdata(alldata) + }, function (txn2, txnerr) { console.log(txnerr); }); + + //get FTD Merchandised Count + let q3 = `Select Distinct STORE_ID from DR_COVERAGE where VISIT_DATE='${d2}' and REASON_ID=0 `; + await txn.executeSql(q3, [], async function (txn2, txnres2) { + console.log('FTDMerchandised count:', txnres2.rows.length); + alldata['FTDMerchandised'] = txnres2.rows.length; + setDashboardCovdata(alldata) + }, function (txn2, txnerr) { console.log(txnerr); }); + }); + } + + async function loadConstDashBData() { + let allDashBData = getDashBoardConstData(props, customStyle, PageTheme, NB_AskForDownload, NB_AskForUpload, (link) => NB_pPAYLink(link)); + const cleanedQuickLinks = allDashBData?.QuickLinks?.filter( + item => !(Array.isArray(item) && item.length === 0) + ); + const updatedDashBData = { + ...allDashBData, + QuickLinks: cleanedQuickLinks, + }; + console.log("allDashBData", cleanedQuickLinks) + setQuickLinks(updatedDashBData.QuickLinks); + setStorePerformanceText(updatedDashBData.StorePerformanceText); + // download below data on flag basis only + if (props.Show_OldMTDReports && !props.WebViewDashboard && props.AppDashboardWebViewObj == "") { + await getFTDData(); + } + } + + ///download Banner with some reports Info + async function getMTDData() { + let loginInfo = await get_item('loginInfo'); + const loginDetails = JSON.parse(loginInfo); + const url = props.baseurl + getMethodName(METHODS.DOWNLOADJSON_METHOD); + let allData = DashboardCovdata; + //get Banner Detail + const data = { Downloadtype: "Mer_NoticeBoard", username: loginDetails.UserId, empid: '', }; + console.log('dashboardurl', url, data); + await getDownloadJson(url, data) + .then(async (res) => { + console.log('OQAD', res); + setBannerRefresh(true) + if (res.Mer_NoticeBoard != null) { + let NB_data = res.Mer_NoticeBoard ? res.Mer_NoticeBoard : []; + console.log("banner_info", NB_data) + setBannerDetail(NB_data); + } + }).catch(err => { + console.log('onPage Team error', err); + }); + + // download below data on flag basis only + if (props.Show_OldMTDReports && !props.WebViewDashboard && props.AppDashboardWebViewObj === "") { + //get Dashboard_Coverage : MTD Planned, covered, and merchandised count + const data1 = { Downloadtype: "Dashboard_Coverage", username: loginDetails.UserId, empid: '', }; + console.log('dashboardurl', url, data1); + await getDownloadJson(url, data1) + .then(async (res) => { + console.log('OQAD', res); + if (res.Dashboard_Coverage != null) { + let QAD_arr = res.Dashboard_Coverage || []; + let data = QAD_arr[0]; + allData['MTDPlanned'] = data.MTDPlanned != null ? data.MTDPlanned : 0; + allData['MTDCovered'] = data.MTDCovered != null ? data.MTDCovered : 0; + allData['MTDMerchandised'] = data.MTDMerchandised != null ? data.MTDMerchandised : 0; + setDashboardCovdata(allData); + } + }) + .catch(err => { + console.log('onPage Team error', err); + }); + //get OQAD count + const data2 = { Downloadtype: "Dashboard_OQAD", username: loginDetails.UserId, empid: '', }; + await getDownloadJson(url, data2) + .then(async (res) => { + if (res.Dashboard_OQAD != null) { + let QAD_arr = res.Dashboard_OQAD || []; + let data = QAD_arr[0]; + allData['MTD_OQAD'] = data.MTDOQAD_Per != null ? data.MTDOQAD_Per : 0; + setDashboardCovdata(allData); + } + }) + .catch(err => { + console.log('onPage Team error', err); + }); + + //get Attendace count + const data3 = { Downloadtype: "Dashboard_Attendance", username: loginDetails.UserId, empid: '', }; + await getDownloadJson(url, data3) + .then(async (res) => { + if (res.Dashboard_Attendance != null) { + let QAD_arr = res.Dashboard_Attendance || []; + let data = QAD_arr[0]; + allData['MTDManday'] = data.MTDManday != null ? data.MTDManday : 0; + setDashboardCovdata(allData); + } + }).catch(err => { + console.log('onPage Team error', err); + }); + } + + console.log('all dashboard Data:', allData); + } + + async function getAppDashBReports() { + console.log("getAppDashBReports called"); + let d1 = new Date(); + let d2 = moment(d1).format('MM/DD/YYYY'); + let arr = []; + await db.transaction(async function (txn) { + //get MenuAppDashboard Reports sections to show + // only those report will be shown which parent id is either null or 0 + let q = `Select * from Master_MenuAppDashboard where ParentId is null or ParentId='0' order by DisplayOrder`; + await txn.executeSql(q, [], async function (txn2, txnres2) { + console.log('Master_MenuAppDashboard count:', txnres2.rows.length); + if (txnres2.rows.length > 0) { + for (let i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + arr.push(data); + if (i == txnres2.rows.length - 1) { + setAppDashReportsSec(arr) + } + } + } else { + setAppDashReportsSec([]) + } + }, function (txn2, txnerr) { console.log(txnerr); setAppDashReportsSec([]) }); + }); + } + + async function dashboardview(type = '') { + setLoaderTitle("loading..."); + clearProcessTimeOut(); + setProcessing(true); + setProcessTimeOut(); + await checkData(); + await getDTasks(); + await loadConstDashBData(); + await getMTDData(); + // do not execute below tasks if dashboard is reloaded from back press + if (type == 'reload') { + clearProcessTimeOut(); + setProcessing(false); + return; + } + let token = await get_item('loginToken'); + let loginInfo = await get_item('loginInfo'); + const loginDetails = JSON.parse(loginInfo); + const todate = new Date(); + const today = moment(todate).format("HH:mm:ss"); + const data = { Downloadtype: "Notice_Board", username: loginDetails.UserId, empid: '', }; + const url = props.baseurl + getMethodName(METHODS.DOWNLOADJSON_METHOD); + clearProcessTimeOut(); + setProcessing(true); + setProcessTimeOut(); + await getDownloadJson(url, data) + .then(async (res) => { + clearProcessTimeOut(); + if (res.Notice_Board) { + let obj = res.Notice_Board.length > 0 ? res.Notice_Board[0] : {}; + setState({ ...state, webviewurl: obj.NOTICE_BOARD }); + setProcessing(false); + let isAlreadyDownl = await checkIfData_Downloaded(); + let params = props.route.params ? props.route.params : {}; + // let isTodayLogin=params.TodayLogin!=null?params.TodayLogin:true; + let isTodayLogin = props.isTodayLoginExists != null ? props.isTodayLoginExists : true; + + // check for autodownload + // console.log('check for auto download',isTodayLogin,isAlreadyDownl,props.startDownload); + if (Platform.OS == 'android' && isAlreadyDownl == false && props.startDownload == false) {//isTodayLogin==false + await clear_item('storeData'); + console.log('start auto download'); + // start auto download + clearProcessTimeOut(); + props.set_startDownload({ startDownload: true }); + } + else if (Platform.OS == 'ios' && isAlreadyDownl == false && props.startDownload == false && isTodayLogin == false) {//isTodayLogin==false + await clear_item('storeData'); + console.log('start auto download'); + // start auto download + clearProcessTimeOut(); + props.set_startDownload({ startDownload: true }); + } + else { + // get dashboards reports + getAppDashBReports(); + } + } + else { + setProcessing(false); + notify("Cannot load dashboard data!") + } + }) + .catch((err) => { + clearProcessTimeOut(); + console.log('onPage Login error1', err); + notify("Please Connect to the internet! " + err) + setProcessing(false); + }); + + SplashScreen.hide(); + } + + async function getIRSessionStatus() { + // console.log("getIRSessionStatus"); + let count = await getIRPendingSessionCount(props); + setIRSessionPendingCount(count); + return true; + } + + async function getDTasks() { + return new Promise(async (resolve, reject) => { + var DownloadTasks1 = []; + if (props.DownloadKey != null && props.DownloadKey != '') { + let prop_dk = JSON.parse(props.DownloadKey); + // console.log('set server d keys'); + let AllDTs = prop_dk['DownloadKey'] || []; + // console.log("kkkkkk--", AllDTs) + await new Promise.all(AllDTs.sort((a, b) => { + if (a.DownloadSequence < b.DownloadSequence) { + return -1; + } + if (a.DownloadSequence > b.DownloadSequence) { + return 1; + } + // a must be equal to b + return 0; + })).then((val) => { + DownloadTasks1 = AllDTs + }); + + if (Production != true) { + let tableStructureObj = AllDTs.find(item => item.DownloadKey === 'Table_Structure'); + let availableTables = []; + if (tableStructureObj && tableStructureObj.ResponseData) { + try { + availableTables = typeof tableStructureObj.ResponseData === 'string' + ? JSON.parse(tableStructureObj.ResponseData) + : tableStructureObj.ResponseData; + } catch (e) { + console.warn("❌ Error parsing Table_Structure data", e); + } + } + + let listKys = devDownloadKeys(availableTables); + console.log("✅ Dev keys after table check:", listKys.map(i => i.DownloadKey)); + const existingKeys = new Set(DownloadTasks1.map(item => item.DownloadKey)); + const finalDevKeys = listKys.filter(devItem => !existingKeys.has(devItem.DownloadKey)); + DownloadTasks1 = [...DownloadTasks1, ...finalDevKeys]; + console.log("DownloadTasks1----", DownloadTasks1); + } + setDownloadTasks(DownloadTasks1); + resolve(true); + } + else { + DownloadTasks1 = getDownloadDataTask(); + setDownloadTasks(DownloadTasks1); + resolve(true); + } + }).catch((Err) => { + return false; + }) + + } + + // download functionality start + async function startDownload() { + console.log('startDownload'); + clearProcessTimeOut(); + props.set_startDownload({ startDownload: true }); + setDowloadedCount(0); + setOnDownloadCountChange(!onDownloadCountChange); + } + + async function uploadPrevDayData() { + // check if any store pending for which data exists and not uploaded + setLoaderTitle('Loading...'); + clearProcessTimeOut(); + setProcessing(true); + setProcessTimeOut(); + // if previous day data exists then upload data + let isuploaded = await getLocOnCheckout(true); + console.log("is prev day data uploaded:", isuploaded); + } + + async function beforeExecuteTasks() { + console.log('beforeExecuteTasks:'); + // ----------------- Clear DB --------------------- + let ddata = { isDataDownloaded: false }; + await DownloadData(props, ddata).then((res) => { + console.log('isAllTablesCreates:', res, DownloadTasks) + if (totalCount == (DownloadTasks.length - 1) && totalCount > 0 && props.startDownload == true) { + startDownload(); + } else { + setTotalCount((DownloadTasks.length - 1)); + } + }); + } + + + async function onNoData(data = [], shouldStop = false, tbname = '', res = '', servertimealert = false) { + console.log("res on no data:", res); + if (tbname != '' && !tbname.includes('Master_MenuAppDashboard - ')) { + db.transaction(function (txn) { + // delete all today data + txn.executeSql(`delete from ${tbname} where 1=1`, [], function (txn1, txnres) { + console.log('deleted all data for ' + tbname); + }, function (Etxn, err) { + console.log('err:', err); + }); + }); + } + + if (shouldStop == true) { + let msg = ''; + // res should be set only when there is network or other related issue + if (res == '') { + msg = ST.Nodatafoundfor + tbname + ''; + if (tbname == 'Mapping_JourneyPlan') { + msg = ST.Youhavenojourneyplanfortoday; + } + } else { + msg = res + " Please ensure you are connected to the internet and retry downloading! "; + } + + console.log("msg :", msg); + // set is Data downloaded to false so that no other parts of app can be accessed if data is not downloaded + // update download status on local async storage + let dateWiseDataDownload = await get_item('dateWiseDataDownload'); + let dateWiseDataDownload1 = dateWiseDataDownload != null ? JSON.parse(dateWiseDataDownload) : {}; + let todayDate = moment(new Date()).format('DD/MM/YYYY'); + dateWiseDataDownload1[todayDate] = false; + set_item('dateWiseDataDownload', JSON.stringify(dateWiseDataDownload1)); + // update downloaed status on redux props + props.setTodayDataExists(false); + props.setGlobalData({ isDataDownloaded: false }) + // notify(msg); + // show error msg + if (servertimealert) { + AlertForServerDT("", ""); + props.set_startDownload({ startDownload: false }); + } else { + let obj = { "ErrorMsg": "!! Error in downloading data !!", "ErrorSubMsg": tbname, "ErrorDetail": msg } + setDErrorMsg(obj); + props.set_startDownload({ startDownload: false }); + setshowDErrAlert(true); + } + } + else { + setTaskResponse(data); + } + } + + async function executeTasks() { + // var DownloadTasks=getDownloadDataTask(); + let loginInfo = await get_item('loginInfo'); + const loginDetails = JSON.parse(loginInfo); + var currentIndex = dowloadedCount; + console.log('currentIndex:', currentIndex); + if (currentIndex >= 0) { + let dk_data = DownloadTasks[currentIndex]; + console.log('dk_data', dk_data); + let key = dk_data.DownloadKey || ''; + setDownloadingText(key); + var data = await getPostData(DownloadTasks, currentIndex); + var url = props.baseurl + getMethodName(METHODS.DOWNLOADJSON_METHOD); + console.log(url, data); + clearProcessTimeOut(); + setProcessTimeOut(); + await getDownloadJson1(url, data) + .then(async (res) => { + clearProcessTimeOut(); + if (key === 'Mapping_MenuConfiguration') { + console.log("res-object", res) + } + let isAdded = await updateTaskRes(res, currentIndex, 1); + console.log('res retuurn from updateTaskRes for ' + key); + if (isAdded == true) { + if (currentIndex == DownloadTasks.length - 1) { + console.log('last found all downloaded'); + onDownloadComplete(); + } + else { + console.log('all downloaded but last not found '); + } + } + else { + console.log('Cannot download all Data'); + notify("Cannot download all Data!"); + props.set_startDownload({ startDownload: false }); + } + }) + .catch(err => { + notify("Please retry downloading! There is some error while downloading data"); + clearProcessTimeOut(); + props.set_startDownload({ startDownload: false }); + console.log('onPage Team error', err); + }); + } + + } + + async function onDownloadComplete() { + clearProcessTimeOut(); + let dateWiseDataDownload = await get_item('dateWiseDataDownload'); + let dateWiseDataDownload1 = dateWiseDataDownload != null ? JSON.parse(dateWiseDataDownload) : {}; + let todayDate = moment(new Date()).format('DD/MM/YYYY'); + dateWiseDataDownload1[todayDate] = true; + set_item('dateWiseDataDownload', JSON.stringify(dateWiseDataDownload1)); + await CreateDirKPIimg(); + ///jp change avoid image upload if any coverage working + let countPrevCovrage = await getPrevCoverageData(true); + if (countPrevCovrage > 0) { + await UploadAllPrevImages(); + } + countPrevCovrage = await getPrevCoverageData(false); + if (countPrevCovrage == 0) { + await UploadAllPrevImages(); + } + setisDataDownloaded(true); + let count = dowloadedCount + 1; + props.set_startDownload({ startDownload: false }); + props.setTodayDataExists(true); + props.setGlobalData({ isDataDownloaded: true }) + clear_item('DataStorageCleared'); + setDowloadedCount(count); + notify(ST.DataDownloaded, 'SHORT'); + } + + + async function getPrevCoverageData(checkPrev) { + console.log("getPrevCoverageData called"); + return new Promise((resolve, reject) => { + let d1 = new Date(); + let d2 = moment(d1).format('MM/DD/YYYY'); + db.transaction(txn => { + let q2 = `SELECT * FROM DR_COVERAGE WHERE VISIT_DATE = ?`; + if (checkPrev) { + q2 = `SELECT * FROM DR_COVERAGE WHERE VISIT_DATE != ?`; + } + txn.executeSql( + q2, + [d2], + (txn2, txnres2) => { + console.log('getPrevCoverageData:', txnres2.rows.length); + resolve(txnres2.rows.length); // ✅ return value here + }, + (txn2, txnerr) => { + console.log(txnerr); + reject(txnerr); // ⛔ in case of error + } + ); + }); + }); + } + + async function UploadAllPrevImages() { + let allfiles = await getAllFolderImages(); + console.log('UploadAllPrevImages allfiles to upload:', allfiles.length); + if (allfiles.length > 0) { + let isAllUploaded = await uploadAllImages(props, {}, allfiles, ''); + console.log('uploading prev files:', isAllUploaded); + } + } + + /** + * Dynamically inserts JSON data into a SQLite table. + * @param {object} db - SQLite database instance + * @param {string} tableName - Target table name + * @param {Array} jsonData - Array of objects to insert + * @returns {Promise} Returns table name on error, or null on success + */ + + async function insertJsonDataToTable(db, tableName, jsonData) { + return new Promise((resolve) => { + // ✅ Check for empty data + if (!Array.isArray(jsonData) || jsonData.length === 0) { + console.warn(`⚠️ No data to insert in table: ${tableName}`); + return resolve(true); + } + if (tableName === 'Gyancast_TrainingContent') { + console.log("Gyancast_TrainingContent_Data", jsonData) + } + + // ✅ Collect all unique keys (columns) from all rows + const columns = Array.from( + new Set(jsonData.flatMap(row => Object.keys(row))) + ); + + // ✅ Normalize all rows: fill missing columns with null + const normalizedData = jsonData.map(row => { + const normalizedRow = {}; + columns.forEach(col => { + normalizedRow[col] = row.hasOwnProperty(col) ? row[col] : null; + }); + return normalizedRow; + }); + + // ✅ Convert normalized data to SQL values string + const valuesArray = normalizedData.map(row => { + const valueList = columns.map(col => { + let val = row[col]; + if (val === null || val === undefined) return 'NULL'; + if (typeof val === 'number') return val; + if (typeof val === 'boolean') return val ? 1 : 0; + // If val is an object or array, stringify it + if (typeof val === "object") val = JSON.stringify(val); + return `'${val.toString().replace(/'/g, "")}'`;// escape single quotes + }); + return `(${valueList.join(',')})`; + }); + + // ✅ Construct final SQL INSERT + const sql = `INSERT INTO ${tableName} (${columns.join(',')}) VALUES ${valuesArray.join(',')};`; + + try { + db.transaction((txn) => { + // ✅ First, delete existing data + txn.executeSql(`DELETE FROM ${tableName}`, [], () => { + // ✅ Then insert new normalized data + txn.executeSql(sql, [], () => { + setTaskResponse(jsonData); // Optional: your callback + console.log(`✅ Inserted data into table: ${tableName}`); + resolve(true); + }, (tx, error) => { + console.error(`❌ Insert failed in table: ${tableName}`, error); + resolve(false); + }); + }, (tx, error) => { + console.error(`❌ Delete failed in table: ${tableName}`, error); + resolve(false); + }); + }); + } catch (e) { + console.error(`❌ Transaction error for table: ${tableName}`, e); + resolve(false); + } + }); + } + + + ///created by jp first drop table if exist then re-created fixed new added column issue + const recreateAllTables = (res) => { + return new Promise((resolve, reject) => { + if (res != null && res.Table_Structure) { + const Table_Structure = res.Table_Structure || []; + setAllTableQueries(Table_Structure); + if (Table_Structure.length === 0) { + resolve(false); + return; + } + + const getTableNameFromSql = (sql) => { + const match = sql.match(/Create Table If Not Exists (\w+)/i); + return match ? match[1] : null; + }; + + const dropAllTables = () => { + return new Promise((dropResolve) => { + let dropCount = 0; + for (let i = 0; i < Table_Structure.length; i++) { + const sql = Table_Structure[i].SqlText; + const tableName = getTableNameFromSql(sql); + if (!tableName) { + console.warn('Unable to extract table name from:', sql); + dropCount++; + if (dropCount === Table_Structure.length) dropResolve(); + continue; + } + db.transaction((txn) => { + txn.executeSql( + `DROP TABLE IF EXISTS ${tableName}`, + [], + () => { + console.log(`Dropped table: ${tableName}`); + dropCount++; + if (dropCount === Table_Structure.length) dropResolve(); + }, + (errTxn, err) => { + console.error(`Error dropping ${tableName}:`, err); + dropCount++; + if (dropCount === Table_Structure.length) dropResolve(); + } + ); + }); + } + }); + }; + + const createAllTables = () => { + return new Promise((createResolve) => { + let createCount = 0; + for (let i = 0; i < Table_Structure.length; i++) { + const sql = Table_Structure[i].SqlText; + db.transaction((txn) => { + txn.executeSql( + sql, + [], + () => { + console.log(`Created table: ${getTableNameFromSql(sql)}`); + createCount++; + if (createCount === Table_Structure.length) { + setTaskResponse(Table_Structure); + createResolve(true); + } + }, + (errTxn, err) => { + console.error('Create table error:', err, sql); + createCount++; + if (createCount === Table_Structure.length) createResolve(true); + } + ); + }); + } + }); + }; + + // Execute drop then create + dropAllTables() + .then(() => createAllTables()) + .then(resolve) + .catch(reject); + } else { + resolve(false); + } + }); + }; + + async function updateTaskRes(res, index, count) { + // var DownloadTasks=getDownloadDataTask(); + const todate = new Date(); + const today = moment(todate).format("MM/DD/YYYY"); + let d2 = today; + let dk_data = DownloadTasks[index]; + let key = dk_data.DownloadKey || ''; + + let IsMandatory = dk_data.IsMandatory == 'true' || dk_data.IsMandatory == 1 ? true : false; + + return new Promise(async (resolve, reject) => { + switch (key) { + case 'Table_Structure': { + let status = await recreateAllTables(res); + resolve(status); + break; + } + + case 'Mapping_JourneyPlan': { + if (res != null && typeof res == 'object' && res.Mapping_JourneyPlan != null && res.Mapping_JourneyPlan != '') { + let data_arr = res.Mapping_JourneyPlan || []; + let status = insertJsonDataToTable(db, key, data_arr); + if (status) { + //get FTD Data when JourneyPlan downloaded + getFTDData(); + resolve(true); + } + resolve(status) + } + // pass to the next download key if data does not exists for this Key + else if (res != null && typeof (res) == 'object' && (res[0] != null && res[0].Result != null && res[0].Result == "No Data")) { + console.log('No data found'); + await onNoData(['No data for Mapping_JourneyPlan'], IsPJPMandatory, 'Mapping_JourneyPlan'); + resolve(true); + } + // Stop Downloading and report error + else if (res != null && typeof (res) == 'object' && res.success == false) { + console.log('Error in downloading network', res); + await onNoData(['No data for Mapping_JourneyPlan'], true, 'Mapping_JourneyPlan', res); + resolve(false); + } + // Stop Downloading and report error + else { + console.log('Error in downloading else', res); + await onNoData(['No data for Mapping_JourneyPlan'], true, 'Mapping_JourneyPlan', res); + resolve(false); + } + break; + } + + case 'Report_AferCheckIn': { + if (res != null && typeof res == 'object' && res.Report_AferCheckIn != null && res.Report_AferCheckIn != '') { + let data_arr = res.Report_AferCheckIn || []; + try { + let jsonStr = JSON.stringify(data_arr) + await set_item('Report_AferCheckIn', jsonStr); + console.log('Report_AferCheckIn added'); + setTaskResponse(data_arr); + resolve(true); + } catch (e) { + resolve(false); + } + + } + // pass to the next download key if data does not exists for this Key + else if (res != null && typeof (res) == 'object' && (res[0] != null && res[0].Result != null && res[0].Result == "No Data")) { + console.log('No data found'); + resolve(true); + } + // Stop Downloading and report error + else if (res != null && typeof (res) == 'object' && res.success == false) { + console.log('Error in downloading network', res); + resolve(false); + } + // Stop Downloading and report error + else { + console.log('Error in downloading else', res); + resolve(false); + } + break; + } + + case 'Master_AppDashboardWebView': { + if (res != null && typeof res == 'object' && res.Master_AppDashboardWebView != null && res.Master_AppDashboardWebView != '') { + let data_arr = res.Master_AppDashboardWebView || []; + if (data_arr?.length > 0) { + console.log("Master_AppDashboardWebView", data_arr[0].AppDashboardWebUrl) + props.set_AppDashboardWebViewObj(data_arr[0].AppDashboardWebUrl) + resolve(true); + setTaskResponse(data_arr); + } else { + props.set_AppDashboardWebViewObj("") + setAppDashReportsSec([]); + resolve(false); + } + } else { + props.set_AppDashboardWebViewObj("") + setAppDashReportsSec([]); + resolve(false); + } + + break; + } + + case 'Master_MenuAppDashboard': { + if (res != null && typeof res == 'object' && res.Master_MenuAppDashboard != null && res.Master_MenuAppDashboard != '') { + let data_arr = res.Master_MenuAppDashboard || []; + var values = [], reportKeysToDownload = [], MainReportsToShow = []; + data_arr.map((data_obj) => { + let { DashboardId, UserType, DashboardName, DashboardType, DownloadKey, GraphDetail, DrillDown, ParentId, DisplayOrder } = data_obj; + values.push(` ('${DashboardId}','${UserType}','${DashboardName}','${DashboardType}','${DownloadKey}','${GraphDetail}','${DrillDown}','${ParentId}','${DisplayOrder}')`); + reportKeysToDownload.push(DownloadKey); + // only those report will be shown which parent id is either null or 0 + if (ParentId == null || ParentId == 0 || ParentId == '0') { + MainReportsToShow.push(data_obj); + } + }); + MainReportsToShow.sort((a, b) => a.DisplayOrder - b.DisplayOrder); + setAppDashReportsSec(MainReportsToShow); + var all_vals = values.join(','); + var sql_stmnt = `INSERT INTO Master_MenuAppDashboard(DashboardId,UserType,DashboardName,DashboardType,DownloadKey,GraphDetail,DrillDown,ParentId,DisplayOrder) + values ${all_vals}`; + db.transaction(function (txn) { + // delete all today data + txn.executeSql(`delete from Master_MenuAppDashboard where 1=1`, [], function (txn1, txnres) { + // insert or refresh all today data + txn.executeSql(sql_stmnt, [], async function (txn1, txnres) { + console.log('Master_MenuAppDashboard added'); + // download reports data for dashboard + let isReportsDownloaded = await downloadReportKeys(reportKeysToDownload) + if (!isReportsDownloaded.success && isReportsDownloaded.error != null && isReportsDownloaded.error != '') { + console.log("Cannot download dashboard reports"); + await onNoData(['No data for Master_MenuAppDashboard'], true, 'Master_MenuAppDashboard - ' + isReportsDownloaded.reportKey, isReportsDownloaded.error); + resolve(false); + } + else { + setTaskResponse(data_arr); + console.log("All Report Keys Dowbloaded", isReportsDownloaded); + resolve(true); + } + + }, function (txnE, txnerr) { + console.log(txnerr); + resolve(true); + }); + }, function (txnE, txnerr) { + console.log(txnerr); + resolve(true); + }); + }); + + } + // pass to the next download key if data does not exists for this Key + else if (res != null && typeof (res) == 'object' && (res[0] != null && res[0].Result != null && res[0].Result == "No Data")) { + console.log('No data found'); + setAppDashReportsSec([]); + await onNoData(['No data for Master_MenuAppDashboard'], false, 'Master_MenuAppDashboard'); + resolve(true); + } + // Stop Downloading and report error + else if (res != null && typeof (res) == 'object' && res.success == false) { + console.log('Error in downloading network', res); + setAppDashReportsSec([]); + await onNoData(['No data for Master_MenuAppDashboard'], true, 'Master_MenuAppDashboard', res); + resolve(false); + } + // Stop Downloading and report error + else { + console.log('Error in downloading else', res); + setAppDashReportsSec([]); + await onNoData(['No data for Master_MenuAppDashboard'], true, 'Master_MenuAppDashboard', res); + resolve(false); + } + break; + } + + // -------------Historic Data ---------------- + case 'LastVisit_PaidVisibility': { + if (res.PaidVisibility) { + let data_arr = res.PaidVisibility || []; + var values = [], child_values = [], checklist_values = []; + let StoreId_arr = []; + console.log('LastVisit_PaidVisibility len:', data_arr.length) + let nonVis_q = `Select * From Master_NonVisibility`; + let AllNonVis = await executeQuery(nonVis_q, 'get'); + let displayCheckExists = false; + await Promise.all( + data_arr.map(async (data_obj, index) => { + let { StoreId, SubCategoryId, DisplayId, Present, ReasonId, Checklists } = data_obj; + let commonId = 'PaidVis' + moment().format('MMDDYYYYHHmmss') + index; + StoreId_arr.push(StoreId); + //get AllSubCats data + let getcq = Q_getpaidvisibility({ StoreId: StoreId }); + let AllSubCats = await executeQuery(getcq, 'get'); + let SubCatObj = AllSubCats.find(i => i.SubCategoryId == SubCategoryId) || {}; + let SubCategoryName = SubCatObj.SubCategoryName != null ? SubCatObj.SubCategoryName : ''; + + let join = ` INNER JOIN Mapping_Visibility v on p.SubCategoryId=v.SubCategoryId `; + let join2 = ` INNER join Master_Display md on md.DisplayId=v.DisplayId `; + let sku_q2 = `SELECT DISTINCT md.DisplayId,md.DisplayName,md.RefImage from Product_Master p ${join} ${join2} where v.StoreId='${StoreId}' and (p.SubCategoryId='${SubCategoryId}' or p.SubCategoryId= ${SubCategoryId})`; + let AllDisplays = await executeQuery(sku_q2, 'get'); + let DisplayObj = AllDisplays.find(i => i.DisplayId == DisplayId) || {}; + let DisplayName = DisplayObj.DisplayName != null ? DisplayObj.DisplayName : ''; + + let NonVisObj = AllNonVis.find(i => i.ReasonId == ReasonId) || {}; + let Reason = NonVisObj.Reason != null ? NonVisObj.Reason : ''; + let IsRemarkTaken = NonVisObj.IsRemarkTaken == 1 || NonVisObj.IsRemarkTaken == '1' ? 1 : 0; + + + values.push(` ('${StoreId}','${d2}','${SubCategoryName}','${SubCategoryId}','${d2}')`); + child_values.push(` ('${commonId}','${StoreId}','${d2}','${SubCategoryName}','${SubCategoryId}','${Present == true ? 1 : 0}','${DisplayId}','${DisplayName}','','','${Reason}','${ReasonId}','${IsRemarkTaken}','','${d2}') `); + + let Checklist_arr = Checklists || []; + Checklist_arr.map(async (checklistData, j) => { + + let { ChecklistId, AnswerId } = checklistData; + let DisplayId1 = checklistData.DisplayId; + let SubCategoryId1 = checklistData.DisplayId; + + let checklq = `Select Distinct ChecklistId,ChecklistName,AnswerId,Answer from Master_Checklist Where ChecklistId ='${ChecklistId}'`; + let checkName_arr = await executeQuery(checklq, 'get'); + let ChecklistName = checkName_arr.length > 0 ? checkName_arr[0].ChecklistName : ''; + + let AnsObj = checkName_arr.find(i => i.AnswerId == AnswerId) || {}; + let Answer = AnsObj.Answer != null ? AnsObj.Answer : ''; + + checklist_values.push(` ('${commonId}','${StoreId}','${d2}','${SubCategoryId}','${DisplayId}','${ChecklistName}','${ChecklistId}','${Answer}','${AnswerId}','${d2}') `); + displayCheckExists = true; + }); + + }) + ).then(async (val) => { + let StoreIds = StoreId_arr.join(','); + let values1 = values.join(','); + let child_values1 = child_values.join(','); + let checklist_values1 = checklist_values.join(','); + //Remove Old data + let q = `DELETE FROM ${AppTables.PAID_VISIBILITY_HEADER_DATA} WHERE STORE_ID in (${StoreIds}) and VISIT_DATE='${d2}' `; + let q2 = `DELETE FROM ${AppTables.PAID_VISIBILITY_CHILD_DATA} WHERE STORE_ID in (${StoreIds}) and VISIT_DATE='${d2}' `; + let q3 = `DELETE FROM ${AppTables.PAID_VIS_CHECKLIST} WHERE STORE_ID in (${StoreIds}) and VISIT_DATE='${d2}' `; + let isHdrRemoved = await executeQuery(q); + let isChildRemoved = await executeQuery(q2); + let isChecklistRemoved = await executeQuery(q3); + let add_HdrData = `INSERT INTO ${AppTables.PAID_VISIBILITY_HEADER_DATA} (STORE_ID,VISIT_DATE,SUB_CATEGORY,SUB_CATEGORY_ID,ADDED_DATE) VALUES ${values1} `; + let add_ChildData = `INSERT INTO ${AppTables.PAID_VISIBILITY_CHILD_DATA} (COMMON_ID,STORE_ID,VISIT_DATE,SUB_CATEGORY,SUB_CATEGORY_ID,VISIBILITY_PRESENT,DISPLAY_ID,DISPLAY,IMAGE1,IMAGE2,REASON,REASON_ID,SHOW_RSN_REMARK,REASON_REMARK,ADDED_DATE) VALUES ${child_values1} `; + let add_Checklist = `INSERT INTO ${AppTables.PAID_VIS_CHECKLIST} (COMMON_ID,STORE_ID,VISIT_DATE,SUB_CATEGORY_ID,DISPLAY_ID,CHECKLIST,CHECKLIST_ID,REASON,REASON_ID,ADDED_DATE) VALUES ${checklist_values1} `; + db.transaction(function (txn) { + // delete all today data + txn.executeSql(add_HdrData, [], function (txn1, txnres) { + // insert or refresh all today data + txn.executeSql(add_ChildData, [], function (txn1, txnres) { + if (displayCheckExists == true) { + txn.executeSql(add_Checklist, [], function (txn1, txnres) { + console.log('LastVisit_PaidVisibility added'); + setTaskResponse(data_arr); + resolve(true); + }, function (Etxn, txnerr) { console.log('txnerr:', txnerr); resolve(true); }); + } + else { + console.log('LastVisit_PaidVisibility added'); + setTaskResponse(data_arr); + resolve(true); + } + }, function (Etxn, txnerr) { console.log('txnerr:', txnerr); resolve(true); }); + }, function (Etxn, txnerr) { console.log('txnerr:', txnerr); resolve(true); }); + }); + }); + } + else if (res != null && typeof (res) == 'object' && (res.success == false || (res[0] != null && res[0].Result != null))) { + console.log('No data found'); + await onNoData(['No data for LastVisit_PaidVisibility'], false, 'LastVisit_PaidVisibility'); + resolve(true); + } + else { + await onNoData(['No data for LastVisit_PaidVisibility']); + resolve(true); + } + break; + } + case 'LastVisit_Promotion': { + if (res.Promotion) { + let data_arr = res.Promotion || []; + var values = [], child_values = [], stock_values = []; + let StoreId_arr = []; + console.log('LastVisit_Promotion len:', data_arr.length) + let nonVis_q = `Select PromoReasonId as ReasonId,PromoReason as Reason,IsRemarkTaken From Master_PromotionReason`; + let AllNonVis = await executeQuery(nonVis_q, 'get'); + let QAExists = false, StockExists = false; + await Promise.all( + data_arr.map(async (data_obj, index) => { + let { StoreId, PromoDefinitionId, PromoId, PromoTable, PromoField, PromoValue, ChildName, Present, ReasonId, QuestionAnswers, StockData } = data_obj; + let commonId = 'Promo' + moment().format('MMDDYYYYHHmmss') + index; + StoreId_arr.push(StoreId); + let join = ` inner join Mapping_StorePromotion s on w.PromoDefinitionId=s.PromoDefinitionId `; + let sku_q2 = ` SELECT w.PromoName from Master_PromotionDefinition w ${join} where s.StoreId='${StoreId}' and w.PromoDefinitionId='${PromoDefinitionId}' and w.PromoId='${PromoId}'`; + let PromoData = await executeQuery(sku_q2, 'get'); + let PromoObj = PromoData.length > 0 ? PromoData[0] : {}; + let PromoName = PromoObj.PromoName != null ? PromoObj.PromoName : ''; + let NonVisObj = AllNonVis.find(i => i.ReasonId == ReasonId) || {}; + let Reason = NonVisObj.Reason != null ? NonVisObj.Reason : ''; + let IsRemarkTaken = NonVisObj.IsRemarkTaken == 1 || NonVisObj.IsRemarkTaken == '1' ? 1 : 0; + values.push(` ('${commonId}','${StoreId}','${d2}','${PromoDefinitionId}','${PromoId}','${PromoName}','${PromoTable}','${PromoField}','${PromoValue}','${ChildName}','${(Present == true ? 1 : 0)}','','${ReasonId}','${Reason}','','${IsRemarkTaken}','','${d2}')`); + let QuestionAnswers_arr = QuestionAnswers || []; + QuestionAnswers_arr.map(async (QAData, j) => { + let { PromoQuestionId, AnswerId } = QAData; + let PromoDefinitionId1 = QAData.PromoDefinitionId; + let PromoId1 = QAData.PromoId; + let QAdetailq = `Select Distinct wq.PromoQuestionId,wq.PromoQuestionCode,wq.QuestionType,wq.PromoqShowCamera,wq.PromoAnswerId,wq.PromoAnswerName,wq.PromoaShowCamera from Master_PromotionQuestion wq + Inner join Mapping_PromotionQuestion mq on mq.PromoQuestionId=wq.PromoQuestionId + Where wq.PromoDefinitionId='${PromoDefinitionId}' and wq.PromoQuestionId='${PromoQuestionId}'`; + let QAdetail_arr = await executeQuery(QAdetailq, 'get'); + let Qdetail = QAdetail_arr.length > 0 ? QAdetail_arr[0] : {}; + let PromoQuestionCode = Qdetail.PromoQuestionCode != null ? Qdetail.PromoQuestionCode : ''; + let QuestionType = Qdetail.QuestionType != null ? Qdetail.QuestionType : ''; + let AnsObj = QAdetail_arr.find(i => i.PromoAnswerId == AnswerId) || {}; + let Answer = AnsObj.PromoAnswerName != null ? AnsObj.PromoAnswerName : ''; + child_values.push(` ('${commonId}','${StoreId}','${d2}','${PromoDefinitionId}','${PromoId}','${PromoQuestionId}','${PromoQuestionCode}','${QuestionType}','${Answer}','${AnswerId}','','','${0}','${d2}') `); + QAExists = true; + }); + let StockData_arr = StockData || []; + StockData_arr.map(async (STkData, k) => { + let { PromoStockDefinitionId, PromoStockTable, PromoStockField, PromoStockValue, PromoStockMBQ, Stock, ProductName, isPromoPresent } = STkData; + let PromoDefinitionId1 = STkData.PromoDefinitionId; + let PromoId1 = STkData.PromoId; + stock_values.push(` ('${commonId}','${StoreId}','${d2}','${PromoDefinitionId}','${PromoId}','${PromoStockDefinitionId}','${PromoStockTable}','${PromoStockField}','${PromoStockValue}','${PromoStockMBQ}','${ProductName}','${Stock}','${(isPromoPresent == true ? 1 : 0)}','${d2}') `); + StockExists = true; + }); + }) + ).then(async (val) => { + let StoreIds = StoreId_arr.join(','); + let values1 = values.join(','); + let child_values1 = child_values.join(','); + let stock_values1 = stock_values.join(','); + //Remove Old data + let q = `DELETE FROM ${AppTables.PROMO_HDR_DATA} WHERE STORE_ID in (${StoreIds}) and VISIT_DATE='${d2}' `; + let q2 = `DELETE FROM ${AppTables.PROMO_CHILD_DATA} WHERE STORE_ID in (${StoreIds}) and VISIT_DATE='${d2}' `; + let q3 = `DELETE FROM ${AppTables.PROMO_IMAGES} WHERE STORE_ID in (${StoreIds}) and VISIT_DATE='${d2}' `; + let q4 = `DELETE FROM ${AppTables.PROMO_STOCK_DATA} WHERE STORE_ID in (${StoreIds}) and VISIT_DATE='${d2}' `; + let isHdrRemoved = await executeQuery(q); + let isChildRemoved = await executeQuery(q2); + let isChecklistRemoved = await executeQuery(q3); + let isStockRemoved = await executeQuery(q4); + let add_hdr_data = `INSERT INTO ${AppTables.PROMO_HDR_DATA} (PROMO_HEADER_ID,STORE_ID,VISIT_DATE,PROMO_DEFINITION_ID,PROMO_ID,PROMO_NAME,PROMO_TABLE,PROMO_FIELD,PROMO_VALUE,CHILD_NAME,IS_PRESENT,PROMO_NA_IMAGE,REASON_ID,REASON,REMARK,SHOW_RSN_REMARK,REASON_REMARK,ADDED_DATE) VALUES ${values1} `; + let add_child_data = `INSERT INTO ${AppTables.PROMO_CHILD_DATA} (PROMO_HEADER_ID,STORE_ID,VISIT_DATE,PROMO_DEFINITION_ID,PROMO_ID,QUESTION_ID,QUESTION_CODE,QUESTION_TYPE,ANSWER,ANSWER_ID,MULTI_OPTIONS_IDS,IMAGE1,IMAGE_ALLOW1,ADDED_DATE) VALUES ${child_values1} `; + let add_stock_data = `INSERT INTO ${AppTables.PROMO_STOCK_DATA} (PROMO_HEADER_ID,STORE_ID,VISIT_DATE,PROMO_DEFINITION_ID,PROMO_ID,PROMO_STOCK_DEFINITION_ID,PROMO_STOCK_TABLE,PROMO_STOCK_FIELD,PROMO_STOCK_VALUE,PROMO_STOCK_MBQ,PRODUCT_NAME,STOCK,IS_PROMO_PRESENT,ADDED_DATE) VALUES ${stock_values1} `; + db.transaction(function (txn) { + // delete all today data + txn.executeSql(add_hdr_data, [], async function (txn1, txnres) { + // insert or refresh all today data + let QAexec = false, StockExec = false; + if (QAExists == true) { + QAexec = await executeQuery(add_child_data); + } + if (QAExists == true) { + StockExec = await executeQuery(add_stock_data); + } + console.log('LastVisit_Promotion added'); + setTaskResponse(data_arr); + resolve(true); + }, function (Etxn, txnerr) { console.log('txnerr:', txnerr); resolve(true); }); + }); + }).catch((err) => { + resolve(true); + }); + } + else if (res != null && typeof (res) == 'object' && (res.success == false || (res[0] != null && res[0].Result != null))) { + console.log('No data found'); + await onNoData(['No data for LastVisit_PaidVisibility'], false, 'LastVisit_PaidVisibility'); + resolve(true); + } + else { + await onNoData(['No data for LastVisit_PaidVisibility']); + resolve(true); + } + break; + } + case 'LastVisit_Visibility': { + if (res.LastVisit_Visibility) { + let data_arr = res.LastVisit_Visibility || []; + var values = [], childV = [], StockV = []; + let StoreId_arr = []; + let nonVis_q = `Select POSMReasonId as ReasonId,POSMReason as Reason,IsRemarkTaken From Master_VisibilityReason`; + let AllNonVis = await executeQuery(nonVis_q, 'get'); + let QAExists = false, StockExists = false; + await Promise.all( + data_arr.map(async (data_obj, index) => { + let { StoreId, VisibilityDefinitionId, VisibilityId, VisibilityTable, VisibilityField, VisibilityValue, ChildName, Present, ReasonId, Question, Stock, QuestionAnswers, StockData } = data_obj; + StoreId_arr.push(StoreId); + let PVIS_HEADER_ID = 'PVIS_ID' + moment().format('MMDDYYYYHHmmss') + index; + let selectlist2 = ` s.StoreId,w.VisibilityDefinitionId,w.VisibilityId,w.VisibilityName,w.VisibilityTable,w.VisibilityField,w.VisibilityValue,w.ChildName,w.VisibilityRefImage,w.VisibilityElementCheckAssortment,w.VisibilityElementStockRequired,'' as IsPresent,w.VisibilityNotExistCamera,'' as PVisNAImage,w.VisibilityExistReasonEnable,w.VisibilityNotExistReasonEnable,'' as ReasonId,'' as Reason,w.NoOfSplit,w.VisibilityImage1,w.VisibilityImage2,w.VisibilityImage1Lable,w.VisibilityImage2Lable,w.VisibilityImage1CameraGrid,w.VisibilityImage2CameraGrid,w.StockQtyRequired`; + let join2 = ` inner join Mapping_StoreVisibility s on w.VisibilityDefinitionId=s.VisibilityDefinitionId `; + let q2 = ` Select ${selectlist2} from Master_VisibilityDefinition w ${join2} where s.StoreId='${StoreId}' and VisibilityDefinitionId='${VisibilityDefinitionId}' `; + let AllDisplays = await executeQuery(q2, 'get'); + let NonVisObj = AllNonVis.find(i => i.ReasonId == ReasonId) || {}; + let IsRemarkTaken = NonVisObj.IsRemarkTaken == 1 || NonVisObj.IsRemarkTaken == '1' ? true : false; + let VisibilityName = (AllDisplays && AllDisplays[0] && AllDisplays[0]["VisibilityName"] != null) ? AllDisplays[0]["VisibilityName"] : ""; + values.push(` ('${PVIS_HEADER_ID}','${StoreId}','${d2}','${VisibilityDefinitionId}','${VisibilityId}','${VisibilityName}', '${VisibilityTable}' , '${VisibilityField}' , '${VisibilityValue}' , '${ChildName}' , '${Present}' , '${""}' , '${ReasonId}' , '${IsRemarkTaken}' , '' ,'${d2}' )`); + let StockData_arr = StockData = []; + StockData_arr.map(async (STkData, k) => { + let { VisibilityStockDefinitionId, VisibilityStockTable, VisibilityStockField, VisibilityStockValue, VisibilityStockMBQ, ProductName, Stock, isPromoPresent } = STkData; + StockV.push(` ('${PVIS_HEADER_ID}','${StoreId}','${d2}','${VisibilityDefinitionId}','${VisibilityId}','${VisibilityStockDefinitionId}','${VisibilityStockTable}','${VisibilityStockField}','${VisibilityStockValue}','${VisibilityStockMBQ}','${ProductName}','${Stock}','${Present}','${d2}') `); + StockExists = true; + }); + QuestionAnswers.map(async (QAdata, j) => { + let { VisibilityQuestionId, AnswerId } = QAdata; + let q12 = `select * from Master_VisibilityQuestion wq inner join Mapping_VisibilityQuestion mq on mq.POSMQuestionId=wq.POSMQuestionId where mq.VisibilityDefinitionId='${VisibilityDefinitionId}' and wq.VisibilityQuestionId='${VisibilityQuestionId}' `; + let AllDisplays2 = await executeQuery(q12, 'get'); + let VisibilityQuestionCode = (AllDisplays2 && AllDisplays2[0] && AllDisplays2[0]["VisibilityQuestionCode"] != null) ? AllDisplays[0]["VisibilityQuestionCode"] : ""; + let QuestionType = (AllDisplays2 && AllDisplays2[0] && AllDisplays2[0]["QuestionType"] != null) ? AllDisplays[0]["QuestionType"] : ""; + let VisibilityAnswerId = (AllDisplays2 && AllDisplays2[0] && AllDisplays2[0]["VisibilityAnswerId"] != null) ? AllDisplays[0]["VisibilityAnswerId"] : ""; + let AnswerInd = AllDisplays2.findIndex(i => i.VisibilityAnswerId == AnswerId); + let AnswerObj = AnswerObj >= 0 ? AllDisplays2[AnswerInd] : {}; + let ANSWER = AnswerObj.VisibilityAnswerName; + let IMAGE_ALLOW1 = (AllDisplays2 && AllDisplays2[0] && AllDisplays2[0].VAShowCamera == 'true' || AllDisplays2 && AllDisplays2[0] && AllDisplays2[0].VAShowCamera == true ? 1 : 0) + childV.push(` ('${PVIS_HEADER_ID}','${StoreId}','${d2}','${VisibilityDefinitionId}','${VisibilityId}','${VisibilityQuestionId}','${VisibilityQuestionCode}','${QuestionType}','${ANSWER}','${VisibilityAnswerId}','${multi_options_ids}','','${IMAGE_ALLOW1}','${d2}') `); + QAExists = true; + }) + + }) + ).then(async (val) => { + let StoreIds = StoreId_arr.join(','); + let values1 = values.join(','); + let child_values = childV.join(','); + let stockV = StockV.join(',') + //Remove Old data + let q = `DELETE FROM ${AppTables.PAIDVIS_HDR_DATA} WHERE STORE_ID in (${StoreIds}) and VISIT_DATE='${d2}' `; + let q2 = `DELETE FROM ${AppTables.PAIDVIS_CHILD_DATA} WHERE STORE_ID in (${StoreIds}) and VISIT_DATE='${d2}' `; + let q3 = `DELETE FROM ${AppTables.PAIDVIS_STOCK_DATA} WHERE STORE_ID in (${StoreIds}) and VISIT_DATE='${d2}' `; + let isHdrRemoved = await executeQuery(q); + let isChildRemoved = await executeQuery(q2); + let isChecklistRemoved = await executeQuery(q3); + let add_hdr_data = `INSERT INTO ${AppTables.PAIDVIS_HDR_DATA} (PVIS_HEADER_ID,STORE_ID,VISIT_DATE,PVIS_DEFINITION_ID,PVIS_ID,PVIS_NAME,PVIS_TABLE,PVIS_FIELD,PVIS_VALUE,CHILD_NAME,IS_PRESENT,PVIS_NA_IMAGE,REASON_ID,REASON,REMARK,ADDED_DATE) VALUES ${values1} `; + let add_child_data = `INSERT INTO ${AppTables.PAIDVIS_CHILD_DATA} (PVIS_HEADER_ID,STORE_ID,VISIT_DATE,PVIS_DEFINITION_ID,PVIS_ID,QUESTION_ID,QUESTION_CODE,QUESTION_TYPE,ANSWER,ANSWER_ID,MULTI_OPTIONS_IDS,IMAGE1,IMAGE_ALLOW1,ADDED_DATE) VALUES ${child_values} `; + let add_stock_data = `INSERT INTO ${AppTables.PAIDVIS_STOCK_DATA} (PVIS_HEADER_ID,STORE_ID,VISIT_DATE,PVIS_DEFINITION_ID,PVIS_ID,PVIS_STOCK_DEFINITION_ID,PVIS_STOCK_TABLE,PVIS_STOCK_FIELD,PVIS_STOCK_VALUE,PVIS_STOCK_MBQ,PRODUCT_NAME,STOCK,IS_PVIS_PRESENT,ADDED_DATE) VALUES ${stockV} `; + db.transaction(function (txn) { + // delete all today data + txn.executeSql(add_hdr_data, [], async function (txn1, txnres) { + // insert or refresh all today data + if (QAExists == true) { + QAexec = await executeQuery(add_child_data); + } + if (QAExists == true) { + StockExec = await executeQuery(add_stock_data); + } + console.log('LastVisit_Visibility added'); + setTaskResponse(data_arr); + resolve(true); + + }, function (Etxn, txnerr) { console.log('txnerr:', txnerr); resolve(true); }); + + }); + }).catch((err) => { + console.log('err:,', err); + resolve(true); + }); + } + else if (res != null && typeof (res) == 'object' && (res.success == false || (res[0] != null && res[0].Result != null))) { + console.log('No data found'); + onNoData(['No data for LastVisit_Visibility'], false, 'LastVisit_Visibility'); + resolve(true); + } + else { + onNoData(['No data for LastVisit_Visibility']); + resolve(true); + } + break; + } + + case 'LastVisit_POSM': { + if (res.POSM) { + let data_arr = res.POSM || []; + var values = [], childV = [], checklist_values = []; + let StoreId_arr = []; + let nonVis_q = `Select POSMReasonId as ReasonId,POSMReason as Reason,IsRemarkTaken From Master_POSMReason`; + let AllNonVis = await executeQuery(nonVis_q, 'get'); + let displayCheckExists = false; + await Promise.all( + data_arr.map(async (data_obj, index) => { + let { StoreId, POSMDefinitionId, POSMId, POSMTable, POSMField, POSMValue, Present, ChildName, POSMReasonId, QuestionAnswers } = data_obj; + let QuestionAnswers_arr = QuestionAnswers || []; + StoreId_arr.push(StoreId); + let POSM_HEADER_ID = 'PaidVis' + moment().format('MMDDYYYYHHmmss') + index; + StoreId_arr.push(StoreId); + let join2 = ` inner join Mapping_StorePOSM s on w.POSMDefinitionId=s.POSMDefinitionId `; + let sku_q2 = ` Select * from Master_POSMDefinition w ${join2} where s.StoreId='${StoreId}' and w.PosmId='${POSMId}' `; + let AllDisplays = await executeQuery(sku_q2, 'get'); + let NonVisObj = AllNonVis.find(i => i.ReasonId == POSMReasonId) || {}; + let Reason = NonVisObj.Reason != null ? NonVisObj.Reason : ''; + let IsRemarkTaken = NonVisObj.IsRemarkTaken == 1 || NonVisObj.IsRemarkTaken == '1' ? true : false; + let POSM_NAME = (AllDisplays && AllDisplays[0] && AllDisplays[0]["POSMName"] != null) ? AllDisplays[0]["POSMName"] : ""; + let POSM_TYPE_ID = (AllDisplays && AllDisplays[0] && AllDisplays[0]["PosmTypeId"] != null) ? AllDisplays[0]["PosmTypeId"] : ""; + let POSM_TYPE_NAME = (AllDisplays && AllDisplays[0] && AllDisplays[0]["POSMTypeName"] != null) ? AllDisplays[0]["POSMTypeName"] : ""; + values.push(` ('${POSM_HEADER_ID}','${StoreId}','${d2}','${POSMDefinitionId}','${POSMId}','${POSM_NAME}', '${POSM_TYPE_ID}' , '${POSM_TYPE_NAME}' , '${POSMTable}' , '${POSMField}' , '${POSMValue}' , '${ChildName}' , '${Present}' , '' , '' , '' , '${POSMReasonId}', '${Reason}', '${IsRemarkTaken}', '','${d2}' )`); + QuestionAnswers_arr.map(async (QAdata, j) => { + let { POSMQuestionId, AnswerId } = QAdata; + q12 = `select POSMQuestionCode,POSMQuestionName,QuestionType,POSMAnswerId,POSMAnswerName from Master_POSMQuestion wq inner join Mapping_POSMQuestion mq on mq.POSMQuestionId=wq.POSMQuestionId where mq.POSMDefinitionId='${POSMDefinitionId}' and wq.POSMQuestionId='${POSMQuestionId}' `; + let AllNonVis12 = await executeQuery(q12, 'get'); + let QUESTION_CODE = AllNonVis12 && AllNonVis12[0] && AllNonVis12[0].POSMQuestionCode != null ? AllNonVis12[0].POSMQuestionCode : "" + let QUESTION_TYPE = AllNonVis12 && AllNonVis12[0] && AllNonVis12[0].QuestionType != null ? AllNonVis12[0].QuestionType : "" + let AnswerInd = AllNonVis12.findIndex(i => i.POSMAnswerId == AnswerId); + let AnswerObj = AnswerObj >= 0 ? AllNonVis12[AnswerInd] : {}; + let ANSWER = AnswerObj.POSMAnswerName; + let IMAGE_ALLOW1 = (AllNonVis12 && AllNonVis12[0] && AllNonVis12[0].PAShowCamera == 'true' || AllNonVis12 && AllNonVis12[0] && AllNonVis12[0].PAShowCamera == true ? 1 : 0) + childV.push(` ('${POSM_HEADER_ID}','${StoreId}','${d2}','${POSMDefinitionId}','${POSMId}','${POSMQuestionId}','${QUESTION_CODE}','${QUESTION_TYPE}','${ANSWER}','${AnswerId}','','','${IMAGE_ALLOW1}','${d2}') `); + displayCheckExists = true; + }) + + }) + ).then(async (val) => { + let StoreIds = StoreId_arr.join(','); + let values1 = values.join(','); + let child_values = childV.join(','); + //Remove Old data + let q = `DELETE FROM ${AppTables.POSM_HDR_DATA} WHERE STORE_ID in (${StoreIds}) and VISIT_DATE='${d2}' `; + let q2 = `DELETE FROM ${AppTables.POSM_CHILD_DATA} WHERE STORE_ID in (${StoreIds}) and VISIT_DATE='${d2}' `; + let isHdrRemoved = await executeQuery(q); + let isChildRemoved = await executeQuery(q2); + let add_hdr_data = `INSERT INTO ${AppTables.POSM_HDR_DATA} (POSM_HEADER_ID,STORE_ID,VISIT_DATE,POSM_DEFINITION_ID,POSM_ID,POSM_NAME,POSM_TYPE_ID,POSM_TYPE_NAME,POSM_TABLE,POSM_FIELD,POSM_VALUE,CHILD_NAME,IS_PRESENT,POSM_NA_IMAGE,POSM_IMAGE1,POSM_IMAGE2,REASON_ID,REASON,SHOW_RSN_REMARK,REASON_REMARK,ADDED_DATE) VALUES ${values1} `; + let add_child_data = `INSERT INTO ${AppTables.POSM_CHILD_DATA} (POSM_HEADER_ID,STORE_ID,VISIT_DATE,POSM_DEFINITION_ID,POSM_ID,QUESTION_ID,QUESTION_CODE,QUESTION_TYPE,ANSWER,ANSWER_ID,MULTI_OPTIONS_IDS,IMAGE1,IMAGE_ALLOW1,ADDED_DATE) VALUES ${child_values} `; + db.transaction(function (txn) { + // delete all today data + txn.executeSql(add_hdr_data, [], function (txn1, txnres) { + // insert or refresh all today data + if (displayCheckExists == true) { + txn.executeSql(add_child_data, [], function (txn1, txnres) { + console.log('LastVisit_POSM added'); + setTaskResponse(data_arr); + resolve(true); + }, function (Etxn, txnerr) { console.log('txnerr:', txnerr) }); + } else { + setTaskResponse(data_arr); + resolve(true); + } + }, function (Etxn, txnerr) { + console.log('txnerr:', txnerr) + resolve(true); + }); + }); + }).catch((err) => { + console.log('err:', err); + resolve(true); + }); + } + else if (res != null && typeof (res) == 'object' && (res.success == false || (res[0] != null && res[0].Result != null))) { + console.log('No data found'); onNoData(['No data for LastVisit_POSM'], false, 'LastVisit_POSM'); + resolve(true); + } + else { + onNoData(['No data for LastVisit_POSM']); + resolve(true); + } + break; + } + case 'LastVisit_AdditionalVisibility': { + if (res.AdditionalVisibility) { + let data_arr = res.AdditionalVisibility || []; + var values = [], childV = [], checklist_values = []; + let StoreId_arr = []; + await Promise.all( + data_arr.map(async (data_obj, index) => { + let { StoreId, Present, BrandId, DisplayId, Remark } = data_obj; + StoreId_arr.push(StoreId); + let sku_q2 = ` Select * from Product_Master w where (w.BrandId='${BrandId}' or w.BrandId= ${BrandId}) `; + let AllDisplays = await executeQuery(sku_q2, 'get'); + let CategoryName = (AllDisplays && AllDisplays[0] && AllDisplays[0]["CategoryName"] != null) ? AllDisplays[0]["CategoryName"] : ""; + let CategoryId = (AllDisplays && AllDisplays[0] && AllDisplays[0]["CategoryId"] != null) ? AllDisplays[0]["CategoryId"] : ""; + let SubCategoryName = (AllDisplays && AllDisplays[0] && AllDisplays[0]["SubCategoryName"] != null) ? AllDisplays[0]["SubCategoryName"] : ""; + let SubCategoryId = (AllDisplays && AllDisplays[0] && AllDisplays[0]["SubCategoryId"] != null) ? AllDisplays[0]["SubCategoryId"] : ""; + let BrandName = (AllDisplays && AllDisplays[0] && AllDisplays[0]["BrandName"] != null) ? AllDisplays[0]["BrandName"] : ""; + let sku_q3 = ` Select * from Master_Display w where (w.DisplayId='${DisplayId}' or w.DisplayId= ${DisplayId}) `; + let AllDisplays2 = await executeQuery(sku_q3, 'get'); + let DisplayName = (AllDisplays2 && AllDisplays2[0] && AllDisplays2[0]["DisplayName"] != null) ? AllDisplays2[0]["DisplayName"] : ""; + values.push(` ('${StoreId}','${d2}','${Present}','${CategoryName}','${CategoryId}', '${SubCategoryName}' , '${SubCategoryId}' , '${BrandName}' , '${BrandId}' , '${DisplayName}' , '${DisplayId}' , '${Remark}' , '' , '${d2}' )`); + }) + ).then(async (val) => { + let StoreIds = StoreId_arr.join(','); + let values1 = values.join(','); + //Remove Old data + let q = `DELETE FROM ${AppTables.ADDITIONAL_VISIBILITY} WHERE STORE_ID in (${StoreIds}) and VISIT_DATE='${d2}' `; + let isHdrRemoved = await executeQuery(q); + let add_data = `INSERT INTO ${AppTables.ADDITIONAL_VISIBILITY} (STORE_ID,VISIT_DATE,PRESENT,CATEGORY,CATEGORY_ID,SUB_CATEGORY,SUB_CATEGORY_ID,BRAND,BRAND_ID,DISPLAY,DISPLAY_ID,REMARK,IMAGE,ADDED_DATE) VALUES ${values1} `; + db.transaction(function (txn) { + // delete all today data + txn.executeSql(add_data, [], function (txn1, txnres) { + // insert or refresh all today data + console.log('LastVisit_AdditionalVisibility added'); + setTaskResponse(data_arr); + resolve(true); + }, function (Etxn, txnerr) { + console.log('txnerr:', txnerr) + resolve(true); + }); + }); + }).catch((err) => { + console.log('err:', err); + resolve(true); + }); + } + else if (res != null && typeof (res) == 'object' && (res.success == false || (res[0] != null && res[0].Result != null))) { + console.log('No data found'); onNoData(['No data for LastVisit_POSM'], false, 'LastVisit_POSM'); + resolve(true); + } + else { + onNoData(['No data for LastVisit_POSM']); + resolve(true); + } + break; + } + + case 'LastVisit_StockSingleKPI': { + if (res.StockSingleKPI) { + let data_arr = res.StockSingleKPI || []; + let StoreId_arr = []; + var values = [], stock_values = [], mfdStockV = []; + await Promise.all( + data_arr.map(async (data_obj, index) => { + let { StoreId, ProductId, MBQ, MSL, Stock, BackroomStock, DamagedStock, LostStock, ExpiryStock, IsSkuPresent, OutOfStock, LessThanMBQ, NrExpiryStock1, NrExpiryStock2, NrExpiryStock3, MFD_Stocks } = data_obj; + StoreId_arr.push(StoreId); + let commonId = 'Stock' + moment().format('MMDDYYYYHHmmss') + index; + let SKU_UID = 'SKU' + moment().format('MMDDYYYYHHmmss') + index + (Math.floor(Math.random() * 1000) + 1); + let MFD_Stocks1 = MFD_Stocks || [] + let join = ` inner join Mapping_ProductAssortmentStorewise m on p.ProductId=m.ProductId `; + let q = `select distinct p.SubCategoryId,p.SubCategoryName,p.BrandId,p.BrandName from Product_Master p ${join} where (p.ProductId='${ProductId}' or p.ProductId= ${ProductId}) order by p.SubCategoryName`; + let AllDisplays = await executeQuery(q, 'get'); + let SubCategoryName = (AllDisplays && AllDisplays[0] && AllDisplays[0]["SubCategoryName"] != null) ? AllDisplays[0]["SubCategoryName"] : ""; + let SubCategoryId = (AllDisplays && AllDisplays[0] && AllDisplays[0]["SubCategoryId"] != null) ? AllDisplays[0]["SubCategoryId"] : ""; + let BrandId = (AllDisplays && AllDisplays[0] && AllDisplays[0]["BrandId"] != null) ? AllDisplays[0]["BrandId"] : ""; + let BrandName = (AllDisplays && AllDisplays[0] && AllDisplays[0]["BrandName"] != null) ? AllDisplays[0]["BrandName"] : ""; + let ProductName = (AllDisplays && AllDisplays[0] && AllDisplays[0]["ProductName"] != null) ? AllDisplays[0]["ProductName"] : ""; + values.push(` ('${StoreId}','${d2}','${SubCategoryName}','${SubCategoryId}','${MSL}','','','${d2}') `); + stock_values.push(` ('${commonId}','${SKU_UID}','${StoreId}','${d2}','${SubCategoryId}','${SubCategoryName}','${BrandId}','${BrandName}','${ProductId}','${ProductName}','${MSL}','${Stock}','${BackroomStock}','${DamagedStock}','${LostStock}','${ExpiryStock}','${IsSkuPresent}','${NrExpiryStock1}','${NrExpiryStock2}','${NrExpiryStock3}','${OutOfStock}','${LessThanMBQ}','${d2}' )`); + MFD_Stocks1.map((item, j) => { + let date = item.Mfd ? new Date(item.Mfd) : ""; + let Stock = item.Stock ? item.Stock : ""; + let mfd = item.Mfd ? item.Mfd : ""; + let LotNo = item.LotNo ? item.LotNo : ""; + mfdStockV.push(` ('${commonId}','${SKU_UID}','${StoreId}','${d2}','${SubCategoryId}','${BrandId}','${ProductId}','${Stock}','${mfd}','${LotNo}','${date}','${d2}') `); + }) + }) + ).then(async (val) => { + let StoreIds = StoreId_arr.join(','); + let values1 = values.join(','); + let stock_valuesV = stock_values.join(','); + let mfdStockv = mfdStockV.join(','); + //Remove Old data + let q = `DELETE FROM ${AppTables.STOCK2HDR_DATA} WHERE STORE_ID in (${StoreIds}) and VISIT_DATE='${d2}' `; + let q2 = `DELETE FROM ${AppTables.STOCK2_DATA} WHERE STORE_ID in (${StoreIds}) and VISIT_DATE='${d2}' `; + let q3 = `DELETE FROM ${AppTables.STOCK2_MFD_DATA} WHERE STORE_ID in (${StoreIds}) and VISIT_DATE='${d2}' `; + let isHdrRemoved = await executeQuery(q); + let isChildRemoved = await executeQuery(q2); + let isChecklistRemoved = await executeQuery(q3); + + let add_StockHdr = `INSERT INTO ${AppTables.STOCK2HDR_DATA} (STORE_ID,VISIT_DATE,SUB_CATEGORY,SUB_CATEGORY_ID,MSL,IMAGE,IMAGEPATH,ADDED_DATE) VALUES ${values1} `; + let add_Stock = `INSERT INTO ${AppTables.STOCK2_DATA} (COMMON_ID,STOCK_UID,STORE_ID,VISIT_DATE,SUB_CATEGORY_ID,SUB_CATEGORY,BRAND_ID,BRAND,PRODUCT_ID,PRODUCT,MSL,STOCK,BACKROOM_STOCK,DAMAGED_STOCK,LOST_STOCK,EXPIRY_STOCK,IS_SKU_STOCK_PRESENT,NREXPIRY1_STOCK,NREXPIRY2_STOCK,NREXPIRY3_STOCK,OUT_OF_STOCK,LESS_THAN_MBQ,ADDED_DATE) VALUES ${stock_valuesV} `; + let add_mfd_Stock = `INSERT INTO ${AppTables.STOCK2_MFD_DATA} (COMMON_ID,STOCK_UID,STORE_ID,VISIT_DATE,SUB_CATEGORY_ID,BRAND_ID,PRODUCT_ID,STOCK,MFD,LOT_NO,DATE,ADDED_DATE) VALUES ${mfdStockv} `; + db.transaction(function (txn) { + // delete all today data + txn.executeSql(add_StockHdr, [], function (txn1, txnres) { + // insert or refresh all today data + console.log('stock header added'); + // // ************************************************ + txn.executeSql(add_Stock, [], async function (txn2, txnres) { + console.log('stock added'); + if (mfdStockV != null && mfdStockV != '') { + await txn.executeSql(add_mfd_Stock, [], async function (txn2, txnres) { + console.log('LastVisit_StockSingleKPI added'); + setTaskResponse(data_arr); + resolve(true); + }, function (txnE, txnerr) { + console.log(txnerr); + resolve(true); + },); + } + else { + setTaskResponse(data_arr); + resolve(true); + } + }) + + }, function (Etxn, txnerr) { console.log('txnerr:', txnerr); resolve(true); }); + }); + }).catch((err) => { + console.log('err:', err); + resolve(true); + }); + } else if (res != null && typeof (res) == 'object' && (res.success == false || (res[0] != null && res[0].Result != null))) { + console.log('No data found'); onNoData(['No data for LastVisit_StockSingleKPI'], false, 'LastVisit_StockSingleKPI'); + resolve(true); + } + else { + onNoData(['No data for LastVisit_StockSingleKPI']); + resolve(true); + } + break; + } + // -------------Last Key (Needs to keep at end) ---------------- + case 'Training_Document': { + if (res != null && typeof res == 'object' && res.Training_Document != null && res.Training_Document != '') { + let data_arr = res.Training_Document || []; + let TraningLink = data_arr.length > 0 ? (data_arr[0].TraningLink || '') : ''; + db.transaction(function (txn) { + // delete all today data + let sql_stmnt = `INSERT INTO Training_Document(TraningLink) VALUES('${TraningLink}')`; + txn.executeSql(`delete from Training_Document where 1=1`, [], function (txn1, txnres) { + // insert or refresh all today data + txn.executeSql(sql_stmnt, [], function (txn1, txnres) { + console.log('Training_Document added'); + setTaskResponse(data_arr); + resolve(true); + }, function (Etxn, txnerr) { console.log('txnerr:', txnerr); resolve(true); }); + }, function (Etxn, txnerr) { console.log('txnerr:', txnerr); resolve(true); }); + }); + } + // pass to the next download key if data does not exists for this Key + else if (res != null && typeof (res) == 'object' && (res[0] != null && res[0].Result != null && res[0].Result == "No Data")) { + console.log('No data found'); + await onNoData(['No data for Training_Document'], false, 'Training_Document'); + resolve(true); + } + // Stop Downloading and report error + else if (res != null && typeof (res) == 'object' && res.success == false) { + console.log('Error in downloading network', res); + await onNoData(['No data for Training_Document'], true, 'Training_Document', res); + resolve(false); + } + // Stop Downloading and report error + else { + console.log('Error in downloading else', res); + await onNoData(['No data for Training_Document'], true, 'Training_Document', res); + resolve(false); + } + break; + } + + default: { + if (res != null && typeof res == 'object' && res[key] != null && res[key] != '') { + let data_arr = res[key] || []; + if (key === 'Mapping_MenuConfiguration') { + console.log("Json_Data", data_arr); + } + resolve(insertJsonDataToTable(db, key, data_arr)); + } + // pass to the next download key if data does not exists for this Key + else if (res != null && typeof (res) == 'object' && (res[0] != null && res[0].Result != null && res[0].Result == "No Data")) { + console.log('No data found'); + await onNoData(['No data for ' + key], false, key); + resolve(true); + } + // Stop Downloading and report error + else if (res != null && typeof (res) == 'object' && res.success == false) { + console.log('Error in downloading network', res); + await onNoData(['No data for ' + key], true, key, res); + resolve(false); + } + // Stop Downloading and report error + else { + console.log('Error in downloading else', res); + await onNoData(['No data for ' + key], true, key, res); + resolve(false); + } + break; + } + } + }).catch((err) => { + console.log('error in downloading', err); + return false; + }); + } + async function executeQuery(q, type = 'state') { + // type can be : state, length or get + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + await txn.executeSql(q, [], async function (txn2, txnres2) { + if (type == 'state') { + resolve(true); + } + else { + if (txnres2.rows.length > 0) { + if (type == 'length') { + resolve(txnres2.rows.length); + } + else { + // let data=txnres2.rows.raw(); + let arr = []; + for (let i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + arr.push(data); + if (i == txnres2.rows.length) { + resolve(arr); + } + } + } + } + else { + type == 'length' ? resolve(0) : resolve([]); + } + } + }, function (Etxn, txnerr) { console.log(txnerr); resolve(false) }); + }); + }).then((val) => { + return val; + }).catch((err) => { + console.log(err); + return false; + }) + } + + // upload functionality start + async function startUpload() { + setLoaderTitle('Loading...'); + setProcessing(true); + getLocOnCheckout(true); + } + + async function getMenuList(storeData1) { + let { StoreId, ChannelId, RegionId } = storeData1; + return new Promise((resolve, reject) => { + + db.transaction(async function (txn) { + let q = Q_MenuList(storeData1); + await txn.executeSql(q, [], async function (txn2, txnres) { + if (txnres.rows.length > 0) { + let arr = [];//txnres.rows.raw(); + console.log('menulist on nb:', arr); + // resolve(arr); + for (var i = 0; i < txnres.rows.length; i++) { + let data = txnres.rows.item(i); + arr.push(data); + if (i == (txnres.rows.length - 1)) { + resolve(arr); + } + } + } + else { + resolve([]) + } + }, function (txnE, txnerr) { console.log(txnerr); resolve([]); },); + }); + }).then((val) => { + return val; + }).catch((err) => { + console.log('') + return [] + }) + } + + async function UpdateUploadCountLocal(upCount) { + // keep 1 less to actual count as DownloadDataModal shows it as provided_value+1 + setUploadedCount(upCount - 1); + } + + async function getLocOnCheckout(previousDayUpload = false) { + return new Promise((resolve, reject) => { + Geolocation.getCurrentPosition( + async (position) => { + clearProcessTimeOut(); + let { latitude, longitude } = position.coords; + let loc = { lat: latitude, lng: longitude }; + await UploadOnCheckOut(loc, previousDayUpload); + resolve(true); + }, + (error) => { + notify(ST.Cannotgetuserposition); + setStartUploading(false); + resolve(false); + }, + { enableHighAccuracy: true, distanceFilter: 0, interval: 1000, fastestInterval: 2000 } + ); + }).then((res) => { + return res + }).catch((err) => { + console.log("getLocOnCheckout err:", err) + notify("Please allow location permission and keep your location on!") + return false; + }) + + } + + async function UploadOnCheckOut(loc, previousDayUpload = false) { + try { + // This function will check all stores , visitors login and distributors data + // And will upload if exists any + // ####--------- Note : If previousDayUpload is true, -------------- + // ####--------- then all data will be uploaded without "VisitDate" condition -------------- + let d1 = new Date(); + let d2 = moment(d1).format('MM/DD/YYYY'); + let token = await get_item('loginToken'); + let loginInfo = await get_item('loginInfo'); + const loginDetails = JSON.parse(loginInfo); + // Get All Stores Data to be uploaded + let PJPStores = await getPJPStoresData('Mapping_JourneyPlan', [], d2, previousDayUpload); + let AdhocSTores = await getPJPStoresData('Adhoc_JourneyPlan', PJPStores, d2, previousDayUpload); + let routeWise = await getPJPStoresData('JourneyPlan_RouteWise', AdhocSTores, d2, previousDayUpload); + let nonProg = await getPJPStoresData('NonProgram_JourneyPlan', routeWise, d2, previousDayUpload); + let storeSearch = await getPJPStoresData('StoreSearch_JourneyPlan', nonProg, d2, previousDayUpload); + let AllStores = await getPJPStoresData('NonMerchandising_JourneyPlan', storeSearch, d2, previousDayUpload); + // let AllStores=await getPJPStoresData('NonMerchandising_JourneyPlan',nonProg,d2,previousDayUpload); + let AllVisitors = await getVisitorLogin(d2, previousDayUpload); // pending visitors data -Get All Visitors login Data to be uploaded + let PeningIRSessC = await getIRPendingSessionCount(props); // pending IR sess data -Get All Visitors login Data to be uploaded + let AllDistributors = await getDistributors(d2, previousDayUpload);// pending distributors data -Get All distribbutors Data to be uploaded + let AllContracts = await getContractForms(d2); // pending contract forms data -Get All ContractForms Data to be uploaded + let AllAddStoreInfo = await getAddStoreInfoForms(d2); + let AllHomeLocation = await getHomeLocation(d2); + console.log("PeningIRSessC:", PeningIRSessC); + let uploadifany = false; + if (AllStores.length > 0 || AllAddStoreInfo.length > 0 || AllDistributors.length > 0 || AllVisitors.length > 0 || PeningIRSessC > 0 || AllContracts.length > 0 || AllHomeLocation.length > 0) { + // show uploading modal if any data exists to upload + uploadifany = true; + setProcessing(false); // hide process loader + setTotalUpCount(0); + setshowProgresssBar(false); + //start uploading if distributor / contracts data exists - + // All data which needs to be uploaded other than (stores,visitor, and pending IR sessions) + // should be uploaded from here one by one and should be added in below condition + if (AllDistributors.length > 0 || AllContracts.length > 0 || AllAddStoreInfo.length > 0 || AllHomeLocation.length > 0) { + if (AllDistributors.length > 0) {//uploading distributor data + setUploadingText('Uploading distributors...'); + clearProcessTimeOut(); + setStartUploading(true); + setProcessTimeOut(loaderTimeOut_longer); + let isDistUploaded = await uploadAllDistributors(d2, loc, AllDistributors, previousDayUpload); // upload all distributors data + console.log("isDistUploaded:", isDistUploaded); + } + if (AllHomeLocation.length > 0) {//uploading AllHomeLocation data + console.log("uploading AllHomeLocation data-----", AllHomeLocation); + setUploadingText('Uploading Home Location...'); + clearProcessTimeOut(); + setStartUploading(true); + setProcessTimeOut(loaderTimeOut_longer); + let isHomeLocationUploaded = await uploadAllHomeLocations(d2, loc, AllHomeLocation, previousDayUpload); // upload all distributors data + console.log("isHomeLocationUploaded:", isHomeLocationUploaded); + } + if (AllContracts.length > 0) {//uploading All Contracts data + setUploadingText('Uploading Contracts...'); + clearProcessTimeOut(); + setStartUploading(true); + setProcessTimeOut(loaderTimeOut_longer); + let isContractUploaded = await uploadAllContracts(d2, AllContracts); // upload all distributors data + console.log("isContractUploaded:", isContractUploaded); + let isContractFilesUploaded = await uploadAllContractFiles(); + console.log("isContract Files Uploaded:", isContractFilesUploaded); + + } + if (AllAddStoreInfo.length > 0) { + //uploading All Contracts data + setUploadingText(ST.UploadingAddStoreInfo); + clearProcessTimeOut(); + setStartUploading(true); + setProcessTimeOut(loaderTimeOut_longer); + let isAddStoreInfoUploaded = await uploadAllAddStoreInfo(d2, AllAddStoreInfo); // upload all distributors data + console.log('isAddStoreInfoUploaded:', isAddStoreInfoUploaded); + let isAddStoreInfoFilesUploaded = await uploadAllAddStoreInfoFiles(); + console.log('isAddStoreInfo Files Uploaded:', isAddStoreInfoFilesUploaded); + notify("Add Store Info data is uploaded"); + } + } + else { + setUploadingText(ST.UploadingData + '...'); + clearProcessTimeOut(); + setStartUploading(true); + setProcessTimeOut(loaderTimeOut_longer); + } + } + else { + console.log("else no data to upload"); + clearProcessTimeOut(); + setProcessing(false); // hide process loader + props.set_startUpload({ startUpload: false }); + // check if start download is enabled the start Downloading + setStartDafterPrevUpload(!StartDafterPrevUpload); + if (props.startDownload == true) { // if uploading is called before start download + // Don't do anything + } + else { + notify(ST.NodatatoUpload + ' for the store'); + } + + return false + } + + if (uploadifany) { + // return the function only when all uploads are done/completed + return new Promise((resolve, reject) => { + function resolveOnCompleteIR(res) { + resolve(res); + } + + function onStoreUploadLast(index, shouldret = true, res = true) { + // check if last index of store then do the common thing + if (index == AllStores.length - 1) { + // if IR session is pending then start uploading IR image data + // else stop uploading and hide the upload modal + // checkForIR will be false if store data is not uploaded + if (PeningIRSessC > 0) { + onUploadComplete(resolveOnCompleteIR) + } + else { + setStartUploading(false); + // check if start download is enabled the start Downloading + setStartDafterPrevUpload(!StartDafterPrevUpload); + if (shouldret) { + resolve(res); + } + } + + } + } + + db.transaction(async function (txn) { + console.log('stores to upload:', AllStores.length); + // If Stores data exists then start uploading + if (AllStores.length > 0) { + // If Visitors data also exists then upload visitors data first , after that upload stores data + if (AllVisitors.length > 0) { + setTotalUpCount(0); + setshowProgresssBar(false); + setUploadingText(ST.Uploadingvisitorsdata + '...'); + // setLoaderTitle(ST.Uploadingvisitorsdata+'...'); + let isallVisUploaded = await uploadAllVisitors(props, AllVisitors, previousDayUpload); + if (isallVisUploaded == true) { + notify(ST.AllDataUploaded + '...'); + } + else { + notify(ST.CannotUploadVisitors); + } + } + for (var i = 0; i < AllStores.length; i++) { + let data = AllStores[i]; + const index = i; + let { StoreId, StoreName, EmpId, MID, UploadStatus, Status, VisitDate, REASON_ID, JCP_TYPE } = data; + // get all checkout ids data + // setLoaderTitle(ST.UploadingDatafor+' '+StoreName+'...'); + + let MenuList = await getMenuList(data); + let allKPIs = await getKPIS(MenuList, props); // get KPIs to be uploaded from Menu list + let totalUpC = MenuList.length - 1; // keep 1 less to actual count as DownloadDataModal shows it as provided_value+1 + + // if(UploadStatus=='U'){ UploadStatus='C';} + console.log('UploadStatus before Start Uploading Data store :', totalUpC, UploadStatus); + setTotalUpCount(totalUpC); + setshowProgresssBar(false); + setUploadingSubText("Uploading Data for Store:" + StoreId); + + if (UploadStatus == 'C') { + let isUploaded_P = await uploadStoreStatus(props, data, 'P', JCP_TYPE, previousDayUpload); + if (isUploaded_P == true) { + setTotalUpCount(totalUpC); + setshowProgresssBar(true); + setUploadingText(ST.UploadingData + '...'); + await uploadAfter_P_status(index, AllStores, data, MenuList, allKPIs, JCP_TYPE, loc, onStoreUploadLast, previousDayUpload) + } else { + notify(ST.Erroroccurwhileuploadingdatafor + ' ' + StoreName, 'LONG'); + onStoreUploadLast(index); // check if last then end uploading + } + } else if (UploadStatus == 'D') { + setTotalUpCount(totalUpC); + setshowProgresssBar(true); + setUploadingText(ST.UploadingData + '...'); + // this never be called if there is no KPI + let allFilesToUpload = await uploadAllData(props, data, allKPIs, props.UserId, JCP_TYPE, false, UpdateUploadCountLocal, previousDayUpload); + console.log('allFilesToUpload.length:', allFilesToUpload.length); + if (allFilesToUpload.length > 0) { + await UploadDataWithImages(index, AllStores, data, MenuList, allKPIs, JCP_TYPE, allFilesToUpload, loc, onStoreUploadLast, previousDayUpload); + } else { + let isUploaded_U = await uploadStoreStatus(props, data, 'U', JCP_TYPE, previousDayUpload); + notify(ST.Alldatauploadedfor + ' ' + StoreName, 'SHORT'); + onStoreUploadLast(index); // check if last then end uploading + } + } + else if (UploadStatus == 'P') { + setTotalUpCount(totalUpC); + setshowProgresssBar(true); + setUploadingText(ST.UploadingData + '...'); + await uploadAfter_P_status(index, AllStores, data, MenuList, allKPIs, JCP_TYPE, loc, onStoreUploadLast, previousDayUpload); + } else if (UploadStatus == 'L') { + setshowProgresssBar(false); + setUploadingText(ST.UploadingData + '...'); + let isAllUploaded_S = await uploadStoreStatus(props, data, 'U', JCP_TYPE, previousDayUpload); + if (isAllUploaded_S == true) { + notify(ST.Alldatauploadedfor + ' ' + StoreName, 'SHORT'); + onStoreUploadLast(index); // check if last then end uploading + } else { + onStoreUploadLast(index); // check if last then end uploading + } + } else { + onStoreUploadLast(index); // check if last then end uploading + } + if (index == 0) { + props.set_startUpload({ startUpload: false }); + } + } + + } + else if (AllVisitors.length > 0) { + // setLoaderTitle(ST.Uploadingvisitorsdata+'...'); + setTotalUpCount(AllVisitors.length - 1); + setshowProgresssBar(false); + setUploadingText(ST.Uploadingvisitorsdata + '...'); + + let isallVisUploaded = await uploadAllVisitors(props, AllVisitors, previousDayUpload); + // setProcessing(false); + // setStartUploading(false); + if (PeningIRSessC) { + onUploadComplete(resolveOnCompleteIR) + } else { + setStartUploading(false); + props.set_startUpload({ startUpload: false }); + resolve(true); + } + + if (isallVisUploaded == true) { + notify(ST.AllDataUploaded); + } + else { + notify(ST.CannotUploadVisitors); + } + + } + else { + if (PeningIRSessC > 0) { // start Uploading IR session + onUploadComplete(resolveOnCompleteIR) + } else {// set Uploading modal to false when all uploading or no data found + setStartUploading(false); + props.set_startUpload({ startUpload: false }); + //check if uploading is called before start download then Start downloading + setStartDafterPrevUpload(!StartDafterPrevUpload); + resolve(true); + } + + + if (AllDistributors.length > 0) {// if distributor data exists and uploaded + // Don't do anything + } + else if (AllContracts.length > 0) {// if contract data exists and uploaded + // Don't do anything + } + else if (IRSessionPendingCount > 0) {// if IR data exists and uploading started + // Don't do anything + } + else {// No data found to upload (in visitors , distributors and stores) + if (props.startDownload == true) { // if uploading is called before start download + // Don't do anything + } + else { + notify(ST.NodatatoUpload); + } + } + + } + }); + + }).then((res) => { + return res; + }).catch((err) => { + console.log("UploadOnCheckOut err:", err); + return false; + }) + + } + + } catch (err) { + console.log(err); + } + } + + async function refreshDashBReport() { + console.log('refreshDashBReport'); + setLoaderTitle("Refreshing dashboard reports..") + setProcessing(true); + try { + + let loginInfo = await get_item('loginInfo'); + const loginDetails = JSON.parse(loginInfo); + + let dk_index = DownloadTasks.findIndex(i => i.DownloadKey == 'Master_MenuAppDashboard'); + var data = { + Downloadtype: "Master_MenuAppDashboard", + Username: loginDetails.UserId, + Param1: '', + Param2: Platform.OS == "ios" ? "iOS" : "Android", + }; + var url = props.baseurl + getMethodName(METHODS.DOWNLOADJSON_METHOD); + console.log(url, data); + + await getDownloadJson1(url, data) + .then(async (res) => { + let isAdded = await updateTaskRes(res, dk_index, 1); + if (isAdded == true) { + notify("Dashboard reports refreshed!"); + setProcessing(false); + } + else { + notify("Cannot refresh dashboard reports!"); + setProcessing(false); + } + }) + .catch(err => { + notify("Cannot refresh dashboard reports!"); + setProcessing(false); + }); + + } catch (err) { + setProcessing(false); + console.log(err); + } + } + + + async function downloadReportKeys(reportKeysToDownload = []) { + console.log('downloadReportKeys'); + let defData = { success: true, error: '', } + return new Promise(async (resolve, reject) => { + let reports = {}; + for (let i = 0; i < reportKeysToDownload.length; i++) { + let reportKey = reportKeysToDownload[i]; + let reportData = await DownloadDashboardReportData(reportKey); + console.log('DownloadDashboardReportData downloded:', reportKey, reportData); + if (!reportData.success && reportData.error != null && reportData.error != '') { + defData["success"] = false; + defData["error"] = reportData.error; + defData["reportKey"] = reportKey; + resolve(defData); + } + + reports[reportKey] = reportData.data; + + if (i == reportKeysToDownload.length - 1) { + + // console.log('all reports downloded:',reports); + set_item('Master_MenuAppDashboard', JSON.stringify(reports)); + props.set_DashboardReports(reports); + resolve(defData); + } + } + }).catch((err) => { + console.log("err:", err); + defData["success"] = false; + defData["error"] = "Error while downloading dashboard reports!"; + resolve(defData); + }); + } + + + // doownload reports + async function DownloadDashboardReportData(reportKey = '') { + console.log('DownloadDashboardReportData:', reportKey); + let loginInfo = await get_item('loginInfo'); + const loginDetails = JSON.parse(loginInfo); + console.log("report Key:", reportKey); + let defData = { success: false, data: {} }; + if (reportKey != null && reportKey != '') { + setDownloadingText("Master_MenuAppDashboard - " + reportKey); + let postdata = { + Downloadtype: reportKey, + Username: loginDetails.UserId, + Param1: '', + Param2: Platform.OS == "ios" ? "iOS" : "Android", + }; + var url = props.baseurl + getMethodName(METHODS.DOWNLOADJSON_METHOD); + console.log(url, postdata); + clearProcessTimeOut(); + setProcessTimeOut(); + return await getDownloadJson1(url, postdata) + .then(async (res) => { + clearProcessTimeOut(); + if (res != null && typeof res == 'object' && res[reportKey] != null && res[reportKey] != '') { + let data_arr = res[reportKey] || []; + + // get columns and colWidth + let firstRow = data_arr.length > 0 ? data_arr[0] : {}; + console.log('firstRow', firstRow); + let allCols = [], columnWidth = '50%'; + let i = 0; + let keylen = Object.keys(firstRow).length; + // get columns to display in report and store them with data + for (let key in firstRow) { + let obj = { 'actual_colname': key }; + let colname = key.replace(/[$$]/g, ' ').replace(/Percent/g, '%'); + obj['colname'] = colname; + let dontShowCol = (colname == 'Srno' || colname == 'AdKPIId' || colname == 'ReportValue' || colname == 'Color'); + if (!dontShowCol) { + allCols.push(obj); + } + + if (i == keylen - 1) { + console.log('allCols:', allCols); + if (allCols.length > 0) { + let colLen = allCols.length; + columnWidth = (94 / colLen) + '%'; + } + } + i++; + } + + defData["success"] = true; + defData["data"] = { "report_data": data_arr, "report_colWidth": columnWidth, "report_cols": allCols }; + return defData; + } + else if (res != null && typeof (res) == 'object' && (res[0] != null && res[0].Result != null && res[0].Result == "No Data")) { + console.log('No data found'); + defData["success"] = true; + return defData; + } + else { + defData["error"] = res; + return defData; + } + + }).catch((err) => { + notify("Please retry downloading! There is some error while downloading data"); + clearProcessTimeOut(); + props.set_startDownload({ startDownload: false }); + console.log('onDownload report error', err); + return defData; + }) + + } + else { + return defData; + } + } + + async function onUploadComplete(resolveOnCompleteIR = () => { }) { + // Sync all IR sessionsfor all stores at onces when all data and images fully uploaded + // setLoaderTitle('Syncing IR Sessions Status...'); + // stop uploading and hide upload modal + function stopUploading() { + clearProcessTimeOut(); + setStartUploading(false); + props.set_startUpload({ startUpload: false }); + // check if start download is enabled the start Downloading + setStartDafterPrevUpload(!StartDafterPrevUpload); + + // resolve uploading data method + resolveOnCompleteIR(true); + } + + // if not performics IR app then stop uploading and hide modal + if (AppName != PerformicsIRAppName) { + stopUploading(); + return; + } + + UpdateUploadCountLocal(0); // set uploaded count in progress bar to zero as IR session upload is just started + setTotalUpCount(0);// set Total uploaded count to 0 + setshowProgresssBar(false); + setUploadingSubText(''); + setUploadingText('Syncing IR Sessions Status...'); + sessionsToUpload.current = []; + sessionsReceived.current = 0; + sessionsUploadedCount.current = 0; + let sync_result = await SyncIRsessions(props, "2"); + let { isUploadStarted, noDataFound, AllDataUploaded, success, sessionList, sessionListWithDetails } = sync_result; + + if (!success) { + notify('Cannot Upload Data! Something went wrong.'); + stopUploading(); + } + else { + if (noDataFound) { + notify('No session to upload!'); + stopUploading(); + } + else { + if (!isUploadStarted && AllDataUploaded) { + notify('All images synced! No session to upload.'); + stopUploading(); + } else if (isUploadStarted) { + // resolve uploading data method but do not stop uploading as IR images uploads are still in process + resolveOnCompleteIR(true); + + sessionsToUpload.current = sessionListWithDetails; + console.log("UploadStarted", sessionsToUpload.current.length); + UpdateUploadCountLocal(0); // set uploaded count in progress bar to zero as IR session upload is just started + setTotalUpCount(sessionsToUpload.current.length - 1); // set Total Upload Count to IR Session Counts + setshowProgresssBar(true); + setUploadingSubText('Uploading IR Sessions'); + setUploadingText('Uploading IR Sessions Data...'); + //set a timeout for session uploading: if no response get from receiver for particular session + for (let i = 0; i < sessionListWithDetails.length; i++) { + let { TEMP_SESSION_ID } = sessionListWithDetails[i]; + setTimeout(async () => { + + let timerSessI = sessionsToUpload.current.findIndex(i => i.TEMP_SESSION_ID == TEMP_SESSION_ID); + let timerSessObj = timerSessI >= 0 ? sessionsToUpload.current[timerSessI] : {}; + + if (timerSessObj.IRStatusReceived != null && timerSessObj.IRStatusReceived === true) { + console.log("Session is already uploaded") + } + else { // upload local timout message and move loading to next step after 60 sec if no response received from server + let udata = { "message": "Session Upload Timeout", "sessionId": TEMP_SESSION_ID, "status": "local" } + await onIRImageUpload(udata); + } + }, 60 * 1000); + } + } + } + } + } + + + async function onIRImageUpload(data) { + console.log('onGlobalIRImageUpload on receive in STorelist', data); + let { message, sessionId, status } = data; + let snum = sessionsReceived.current + 1; + let su_num = sessionsUploadedCount.current; + sessionsReceived.current = snum; + + + + let sessionIndex = sessionsToUpload.current.findIndex(i => i.TEMP_SESSION_ID == sessionId); + let sessionObj = sessionIndex >= 0 ? sessionsToUpload.current[sessionIndex] : {}; + console.log('onGlobalIRImageUpload on receive in sessionObj', sessionId, sessionObj); + let TableName1 = sessionObj['TableName1'] || ''; + let TableName2 = sessionObj['TableName2'] || ''; + let StoreId = sessionObj['StoreId'] || ''; + let StoreName = sessionObj['StoreName'] || ''; + + let IRCategoryName = sessionObj["IRCategoryName"] || ''; + let IRTaskName = sessionObj["IRTaskName"] || ''; + let IRPhotoType = sessionObj["IRPhotoType"] || ''; + let IRStoreCode = sessionObj["IRStoreCode"] || ''; + let ScreenName = sessionObj["ScreenName"] || ''; + let IRDetails = { IRCategoryName, IRTaskName, IRPhotoType, IRStoreCode, ScreenName } + + // if any status for the given session is recieved then we don't need to run timer and send local timout for that session + // so update its IRStatusReceived to true + sessionObj.IRStatusReceived = true; + sessionsToUpload.current[sessionIndex] = sessionObj; + + // check if session is uploaded then upload its logs + if (status != null && status == '200' && sessionId != null && sessionId != '') { + + let UnSessionId = await IRLogin.getDataIRSession(sessionId); + if (UnSessionId != null && UnSessionId != '') { + sessionsUploadedCount.current = ++su_num; + + // update session uploaded count + UpdateUploadCountLocal(su_num); + let isUpdated = await UpdateIRUploadStatus(sessionId, UnSessionId, TableName1, TableName2, StoreId); + let isUploaded = await LogImageUpload(sessionId, UnSessionId, message, status, StoreId, StoreName, TableName1, TableName2, IRDetails); + if (isUploaded) { + console.log('Image Uploaded'); + notify("Images Log uploaded for session:" + sessionId); + } + else { + console.log('cannot Uploaded image'); + notify("cannot upload log for session:" + sessionId); + } + } + else { + notify("Cannot upload images for session:" + sessionId + ". Universal Id not found"); + let isUploaded = await LogImageUpload(sessionId, "", message, status, StoreId, StoreName, TableName1, TableName2, IRDetails); + if (isUploaded) { + console.log('Image Uploaded'); + notify("Images Log uploaded for session:" + sessionId); + } + else { + console.log('cannot Uploaded image'); + notify("cannot upload log for session:" + sessionId); + } + } + + } + else { + notify((message != null && message != "" ? message + ". " : "") + "Cannot upload images for session:" + sessionId); + let isUploaded = await LogImageUpload(sessionId, "", message, status, StoreId, StoreName, TableName1, TableName2, IRDetails); + if (isUploaded) { + console.log('Image Uploaded'); + notify("Images Log uploaded for session:" + sessionId); + } + else { + console.log('cannot Uploaded image'); + notify("cannot upload log for session:" + sessionId); + } + + } + + console.log("check snum and su_num:", snum, su_num, sessionsToUpload.current.length); + + let popupMsg = ""; + let subTstyle = {}; + // All IR Sessions with Images Uploaded : set DataUploaded Status to U (Fully Upload) + if (su_num == sessionsToUpload.current.length) { + // setProcessing(false); + // setStartUploading(false); + popupMsg = "All IR images uploaded!"; + subTstyle = { color: 'green' }; + + notify("All IR images uploaded!"); + console.log('set all uploaded true to U'); + setIRSessionPendingCount(0); + await getIRSessionStatus(); + } + // Some Of IR Sessions with Images Uploaded but some are yet pending : set DataUploaded Status to P (Partial Upload) + else if (su_num > 0 && su_num != sessionsToUpload.current.length) { + // setProcessing(false); + popupMsg = `${su_num} out of ${sessionsToUpload.current.length} IR Sessions uploaded! Please Retry`; + subTstyle = { color: 'red' }; + notify("Uploading IR Sessions!"); + console.log('set all uploaded true to P'); + } + else if (su_num == 0) { + subTstyle = { color: 'red' }; + popupMsg = `${su_num} out of ${sessionsToUpload.current.length} IR Sessions uploaded! Please Retry`; + } + + console.log("IR Session received ", snum) + // if last broadcast received either uploaded or not, update the processing status to false + if (snum == sessionsToUpload.current.length) { + setProcessing(false); + console.log("IR Session all received ", snum) + // ---------- stop upload on Ok click (OnOKClick) of popup message ------------ + // show ok button popup on upload success + setshowProgresssBar(false); + setUploadingSubText(popupMsg); + setSubTextStyle(subTstyle); + setShowOkButtonOnUpload(true); + console.log('Deregister event when last received'); + IRLogin.deRegisterReceiver(); + await getIRSessionStatus(); + } + } + + async function OnOKClick() { + // stop uploading and hide upload modal + setStartUploading(false); // hide upload modal + setUploadingSubText(''); // then clear upload modal subtext + setTotalUpCount(0); // clear tortal upload count + UpdateUploadCountLocal(0); // clear uploaded count + setShowOkButtonOnUpload(false); // hide ok button + setSubTextStyle(''); // remove style of subtext in uploading modal + props.set_startUpload({ startUpload: false }); + // check if start download is enabled the start Downloading + setStartDafterPrevUpload(!StartDafterPrevUpload); + } + + async function UpdateIRUploadStatus(TempSessionId, UnSessionId, TableName1, TableName2, StoreId) { + console.log("UpdateIRUploadStatus"); + // TableName1: IR Upload Table for KPI + // TableName2: IR Images Table for KPI + return new Promise((resolve, reject) => { + if (TableName1 != null && TableName2 != null && TableName1 != '' && TableName2 != '') { + db.transaction(async function (txn) { + let q = `Update ${TableName1} set UN_SESSION_ID='${UnSessionId}',UPLOAD_STATUS='1',SYNC_STATUS='Synced' where TEMP_SESSION_ID='${TempSessionId}' and STORE_ID='${StoreId}' `;//VISIT_DATE='${d2}' + await txn.executeSql(q, [], async function (txn2, txnres) { + console.log('Updated IR Upload Status', q); + let q2 = `Update ${TableName2} set UN_SESSION_ID='${UnSessionId}' where TEMP_SESSION_ID='${TempSessionId}' and STORE_ID='${StoreId}' `;//VISIT_DATE='${d2}' and + await txn.executeSql(q2, [], async function (txn2, txnres2) { + console.log('Updated IR Image Status', q2); + resolve(true); + }, function (txnE, txnerr) { console.log(txnerr); resolve(false); },); + + }, function (txnE, txnerr) { console.log(txnerr); resolve(false); },); + }); + } + else { + resolve(false); + } + }).catch((Err) => { + console.log('Error in UpdateIRUploadStatus:', Err); + return false; + }) + } + + async function LogImageUpload(TempSessionId, UnSessionId, message, status, StoreId, StoreName, TableName1, TableName2, IRDetails = {}) { + let { IRCategoryName, IRTaskName, IRPhotoType, IRStoreCode, ScreenName } = IRDetails + const url = props.baseurl + getMethodName(METHODS.UPLOADJSON_METHOD); + const nowTime = moment().format('HH:mm:ss'); + let ImageCount = await getImageCount(TempSessionId, TableName2); + ////Replaced special charecter and white space + let storeTittle = StoreName.replace(`@!%&`, '').replace(' ', '-'); + console.log("storeTittle:", storeTittle, StoreName); + let d1 = new Date(); + let d2 = moment(d1).format('MM/DD/YYYY'); + let obj = {}; + obj['StoreId'] = StoreId; + obj['Username'] = props.UserId; + obj['VisitDate'] = d2; + obj['InTime'] = nowTime; + obj['TempSessionId'] = TempSessionId; + obj['UnSessionId'] = UnSessionId; + obj['Status'] = status; + obj['Message'] = message; + obj['ImageCount'] = ImageCount; + obj['StoreTitle'] = storeTittle; + obj['StoreCode'] = IRStoreCode; + obj['TaskName'] = IRTaskName; + obj['CategoryName'] = IRCategoryName; + obj['PhotoType'] = IRPhotoType; + obj['KPIType'] = ""; + obj['ScreenName'] = ScreenName; + obj['UploadType'] = "New"; + let postData = {}; + postData['MID'] = 0; + postData['Keys'] = 'IR_UPLOAD_LOG_MSG'; + postData['JsonData'] = JSON.stringify(obj); + postData['UserId'] = props.UserId; + + console.log('postData', postData); + return await UploadData2(url, postData) + .then((res) => { + if (res.UploadJsonResult != null && res.UploadJsonResult == 'Success') { + return true; + } + return false; + }) + .catch((err) => { + console.log(err); + return false; + }); + } + + async function getImageCount(TempSessionId, TableName2) { + console.log('getImageCount'); + return new Promise((resolve, reject) => { + if (TableName2 != null && TableName2 != '') { + db.transaction(async function (txn) { + let q = `select DISTINCT TEMP_SESSION_ID,count(IMAGE1) as ImageCount from ${TableName2} where TEMP_SESSION_ID='${TempSessionId}' group by TEMP_SESSION_ID `;//VISIT_DATE='${d2}' and + await txn.executeSql(q, [], async function (txn2, txnres) { + console.log('ImageCount rows:', txnres.rows.length); + if (txnres.rows.length > 0) { + let data = txnres.rows.item(0); + console.log('data:', data) + console.log('Image Count for TempSessionId:', data.ImageCount); + resolve(data.ImageCount); + } + else { + resolve(0); + } + + }, function (txnE, txnerr) { console.log(txnerr); resolve(0); },); + }); + } + else { + resolve(false); + } + }).catch((Err) => { + console.log('Error in getImageCount:', Err); + return 0; + }) + + + + } + + + + async function uploadAllDistributors(d2, loc, AllStores, previousDayUpload = false) { + console.log('Distributors to upload:', AllStores.length); + if (AllStores.length > 0) { + function onStoreUploadLast(index, shouldret = true, res = true) { + // check if last index of store then do the common thing + if (index == AllStores.length - 1) { + setStartUploading(false); + } + } + + return new Promise(async (resolve, reject) => { + for (let i = 0; i < AllStores.length; i++) { + let data = AllStores[i]; + const index = i; + let { StoreId, StoreName, EmpId, MID, UploadStatus, Status, VisitDate, REASON_ID, JCP_TYPE } = data; + // get all checkout ids data + // setLoaderTitle(ST.UploadingDatafor+' '+StoreName+'...'); + + let MenuList = await getDBMenuList(data); + let allKPIs = MenuList; + + let totalUpC = MenuList.length - 1; // keep 1 less to actual count as DownloadDataModal shows it as provided_value+1 + console.log('UploadStatus before Start Uploading Data :', StoreId, UploadStatus); + // if(UploadStatus=='U'){ UploadStatus='C';} + setTotalUpCount(totalUpC); + setshowProgresssBar(false); + setUploadingSubText("Uploading data for distributor:" + StoreId); + + if (UploadStatus == 'C') { + let isUploaded_P = await uploadDBStatus(props, data, 'P', JCP_TYPE, loc); + if (isUploaded_P == true) { + setTotalUpCount(totalUpC); + setshowProgresssBar(true); + setUploadingText(ST.UploadingData + '...'); + await uploadAfter_P_status(index, AllStores, data, MenuList, allKPIs, JCP_TYPE, loc, onStoreUploadLast, previousDayUpload) + } + else { + notify(ST.Erroroccurwhileuploadingdatafor + ' ' + StoreName, 'LONG'); + if (index == AllStores.length - 1) { + // setProcessing(false); + setStartUploading(false); + } + } + } + else if (UploadStatus == 'D') { + setTotalUpCount(totalUpC); + setshowProgresssBar(true); + setUploadingSubText("Uploading data for distributor:" + StoreId); + // this never be called if there is no KPI + let allFilesToUpload = await uploadAll_DBData(props, data, allKPIs, props.UserId, JCP_TYPE, false, loc, UpdateUploadCountLocal); + console.log('allFilesToUpload.length:', allFilesToUpload.length); + if (allFilesToUpload.length > 0) { + await UploadDataWithImages(index, AllStores, data, MenuList, allKPIs, JCP_TYPE, allFilesToUpload, loc, onStoreUploadLast, previousDayUpload); + } + else { + let isUploaded_U = await uploadDBStatus(props, data, 'U', JCP_TYPE, loc); + notify(ST.Alldatauploadedfor + ' ' + StoreName, 'SHORT'); + if (index == AllStores.length - 1) { + // setProcessing(false); + setStartUploading(false); + } + } + + } + else if (UploadStatus == 'P') { + setTotalUpCount(totalUpC); + setshowProgresssBar(true); + setUploadingText(ST.UploadingData + '...'); + await uploadAfter_P_status(index, AllStores, data, MenuList, allKPIs, JCP_TYPE, loc, onStoreUploadLast, previousDayUpload); + } + else if (UploadStatus == 'L') { + setshowProgresssBar(false); + setUploadingText(ST.UploadingData + '...'); + let isAllUploaded_S = await uploadDBStatus(props, data, 'U', JCP_TYPE, loc); + if (isAllUploaded_S == true) { + notify(ST.Alldatauploadedfor + ' ' + StoreName, 'SHORT'); + if (index == AllStores.length - 1) { + // setProcessing(false); + setStartUploading(false); + } + } + else { + if (index == AllStores.length - 1) { + // setProcessing(false); + setStartUploading(false); + notify(ST.Erroroccurwhileuploadingdatafor, 'LONG'); + } + } + } + + if (index == 0) { + props.set_startUpload({ startUpload: false }); + } + // resolve true for last element after all uploaded + if (index == AllStores.length - 1) { + resolve(true); + } + } + }).then((val) => { + console.log('on all distributors uploaded:', val); + return true; + }).catch((err) => { + console.log('error', err); + return false; + }); + } + else { + return true; + } + } + + async function uploadAllHomeLocations(d2, loc, AllStores, previousDayUpload = false) { + console.log('Distributors to upload:', AllStores.length); + if (AllStores.length > 0) { + function onStoreUploadLast(index, shouldret = true, res = true) { + // check if last index of store then do the common thing + if (index == AllStores.length - 1) { + setStartUploading(false); + } + } + + return new Promise(async (resolve, reject) => { + for (let i = 0; i < AllStores.length; i++) { + let data = AllStores[i]; + const index = i; + let { StoreId, StoreName, EmpId, MID, UploadStatus, Status, VisitDate, REASON_ID, JCP_TYPE } = data; + // get all checkout ids data + // setLoaderTitle(ST.UploadingDatafor+' '+StoreName+'...'); + let MenuList = await getDBMenuList(data); + let allKPIs = MenuList; + let totalUpC = MenuList.length - 1; // keep 1 less to actual count as DownloadDataModal shows it as provided_value+1 + console.log('UploadStatus before Start Uploading Data :', StoreId, UploadStatus); + // if(UploadStatus=='U'){ UploadStatus='C';} + setTotalUpCount(totalUpC); + setshowProgresssBar(false); + setUploadingSubText("Uploading data for Home Location"); + // let isUploaded_P=await uploadDBStatus(props,data,'P',JCP_TYPE,loc); + let { LATITUDE, LONGITUDE } = data; + let obj = { + "Latitude": LATITUDE, + "Longitude": LONGITUDE, + "UserId": props.UserId, + }; + console.log("obj------", obj, AllStores) + let postData = { + "MID": 0, + "Keys": "User_Home_Location", + "JsonData": JSON.stringify(obj), + "UserId": props.UserId, + }; + + const url = props.baseurl + getMethodName(METHODS.UPLOADJSON_METHOD); + console.log(url, postData); + let isUploaded_P = await UploadData2(url, postData) + console.log("isUploaded_P--", isUploaded_P, isUploaded_P?.UploadJsonResult) + if (isUploaded_P?.UploadJsonResult == "Success") { + setTotalUpCount(totalUpC); + setshowProgresssBar(true); + setUploadingText(ST.UploadingData + '...'); + await uploadHomeLocationStatus(index, onStoreUploadLast, previousDayUpload) + notify('Home Location is uploaded successfuly', 'LONG'); + } + else { + notify(ST.Erroroccurwhileuploadingdatafor + ' ' + StoreName, 'LONG'); + if (index == AllStores.length - 1) { + // setProcessing(false); + setStartUploading(false); + } + } + if (index == 0) { + props.set_startUpload({ startUpload: false }); + } + // resolve true for last element after all uploaded + if (index == AllStores.length - 1) { + resolve(true); + } + } + }).then((val) => { + console.log('on all distributors uploaded:', val); + return true; + }).catch((err) => { + console.log('error', err); + return false; + }); + } + else { + return true; + } + } + + + // add store info upload + async function uploadAllAddStoreInfo(d2, AllAddStoreInfo) { + console.log('uploadAllAddStoreInfo called'); + if (AllAddStoreInfo.length > 0) { + setTotalUpCount(AllAddStoreInfo.length - 1); + setUploadedCount(0); + setshowProgresssBar(true); + return new Promise(async (resolve, reject) => { + let uploadCount = 0, + isAllUploaded = true, UploadData = []; + for (let i = 0; i < AllAddStoreInfo.length; i++) { + let data = AllAddStoreInfo[i]; + const index = i; + let { DISTRIBUTOR_NAME, DISTRIBUTOR_ID, STORE_NAME, STORE_ADDRESS, CITY_NAME, CITY_ID, STORETYPE_NAME, STORETYPE_ID, IMAGE, IMAGEPATH, LAT, LNG, STATUS } = data; + let UploadDataObj = { DistributorName: DISTRIBUTOR_NAME, DistributorId: DISTRIBUTOR_ID, StoreName: STORE_NAME, StoreAddress: STORE_ADDRESS, CityName: CITY_NAME, CityId: CITY_ID, StoreType: STORETYPE_NAME, StoreTypeId: STORETYPE_ID, ImageName: IMAGE, Longitude: LAT, Latitude: LNG, Status: STATUS } + // setUploadingSubText('`${ST.UploadingdataforStoreIdProgramId}`(' +StoreId +',' +ProgramDefinitionId +')',); + setUploadingSubText(`Uploading data for add store Info`); + UploadData.push(UploadDataObj) + } + console.log("UploadAddStoreInfoData------", UploadData) + let isuploaded = await UploadAddStoreInfoData(props, UploadData); + if (!isuploaded) { + isAllUploaded = false; + } + uploadCount++; + setUploadedCount(uploadCount - 1); + props.set_startUpload({ startUpload: false }); + // if (index == 0) { + // props.set_startUpload({startUpload: false}); + // } + // resolve true for last element after all uploaded + if (uploadCount == AllAddStoreInfo.length) { + resolve(isAllUploaded); + } + }) + .then(val => { + console.log('on all distributors uploaded:', val); + return true; + }) + .catch(err => { + console.log('error', err); + return false; + }); + } else { + return true; + } + } + + + async function uploadAllContracts(d2, AllContracts) { + console.log("uploadAllContracts called") + if (AllContracts.length > 0) { + setTotalUpCount(AllContracts.length - 1); + setUploadedCount(0); + setshowProgresssBar(true); + return new Promise(async (resolve, reject) => { + let uploadCount = 0, isAllUploaded = true; + for (let i = 0; i < AllContracts.length; i++) { + let data = AllContracts[i]; + const index = i; + let { StoreId, ProgramDefinitionId, ProgramId, IsContractSigned, ReasonId, Reason } = data; + setUploadingSubText("Uploading data for (StoreId,ProgramId):(" + StoreId + "," + ProgramDefinitionId + ")"); + + let ProgramQtns = await getContractQtns(d2, data); + console.log("getContractQtns", ProgramQtns) + let UploadData = {} + UploadData['UserId'] = props.UserId; + UploadData['Store_Id'] = StoreId; + UploadData['ProgramId'] = ProgramId; + UploadData['IsContractSigned'] = IsContractSigned; + UploadData['ReasonId'] = ReasonId != '' ? ReasonId : '0'; + UploadData['Reason'] = Reason; + UploadData['ContractQtns'] = ProgramQtns != null ? ProgramQtns : []; + UploadData['VisitDate'] = d2; + + let isuploaded = await uploadContractData(props, UploadData, data); + if (!isuploaded) { + isAllUploaded = false; + } + uploadCount++; + setUploadedCount(uploadCount - 1); + if (index == 0) { + props.set_startUpload({ startUpload: false }); + } + // resolve true for last element after all uploaded + if (uploadCount == AllContracts.length) { + resolve(isAllUploaded); + } + } + }).then((val) => { + console.log('on all distributors uploaded:', val); + return true; + }).catch((err) => { + console.log('error', err); + return false; + }); + } + else { + return true; + } + } + + async function uploadAllContractFiles() { + let allFilesToUpload = getAllFileForAFolder(ContractFormImagePath, "ContractFormImages"); + if (allFilesToUpload.length > 0) { + setUploadingText("Uploading Contract Images/Files...") + setTotalUpCount(allFilesToUpload.length - 1); + setUploadedCount(0); + let allImageUploaded = await uploadContractFormFiles(allFilesToUpload, UpdateUploadCountLocal, props); + return allImageUploaded; + } + } + + async function uploadAllAddStoreInfoFiles() { + let allFilesToUpload = await getAllFileForAFolder(AddStoreImagePath, "AddNewStoreImages"); + console.log("ImgFiles in--------", allFilesToUpload) + if (allFilesToUpload.length > 0) { + setUploadingText('Upload Add Store Info File'); + setTotalUpCount(allFilesToUpload.length - 1); + setUploadedCount(0); + console.log("ImgFiles in--------", allFilesToUpload.length) + let allImageUploaded = await uploadContractFormFiles( + allFilesToUpload, + UpdateUploadCountLocal, + props + ); + return allImageUploaded; + } + } + + + + async function getContractQtns(d2, data) { + console.log("getContractQtns called", data) + let allQtnsData = []; + let { StoreId, ProgramId, ProgramDefinitionId } = data; + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + // get inserted data for contract form + let selectlist = ` DISTINCT T.CategoryId,T.Category,T.Question as Question,T.QuestionId as QuestionId,T.QuestionType as QuestionType,T.ShowContractNotSigned,T.QEnable,T.LengthValidation as LengthValidation,T.QuestionImageAllow,T.DateRange as DateRange,T.MaxLength as MaxLength,T.MinLength as MinLength,T.OTP as OTP,T1.ANSWER As Answer, T1.ANSWER_ID as AnswerId,T1.IMAGE_ALLOW1 as ImageAllow1,T1.IMAGE1 as Image1,T1.IMAGE_ALLOW2 as ImageAllow2,T1.IMAGE2 as Image2,T1.MULTI_OPTIONS_IDS as MultiAnswerId `; + let join = ` INNER JOIN ${AppTables.CONTRACT_FORM_DATA} T1 on T.CategoryId=T1.CATEGORY_ID and T.QuestionId=T1.QUESTION_ID`; + let q2 = `Select ${selectlist} FROM Master_ContractFormQuestion T ${join} WHERE T1.STORE_ID='${StoreId}' AND T1.PROGRAM_ID=${ProgramId} AND T1.PROGRAM_DEFINITION_ID=${ProgramDefinitionId} `; + q2 += ` ORDER BY T.CategorySequence,T.QuestionSequence `; + console.log("getContractQtns q2:", q2) + await txn.executeSql(q2, [], async function (txn2, txnres2) { + console.log("qtns count:", txnres2.rows.length) + if (txnres2.rows.length > 0) { + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + + let { CategoryId, QuestionId, QuestionType, Answer, AnswerId, MultiAnswerId, Image1, Image2 } = data; + let obj = {}; + obj['UserId'] = props.UserId; + obj['Store_Id'] = StoreId; + obj['ProgramId'] = ProgramId; + obj['CategoryId'] = CategoryId; + obj['QuestionId'] = QuestionId; + obj['QuestionType'] = QuestionType; + obj['Answer'] = Answer; + obj['AnswerId'] = AnswerId; + obj['MultiAnswerId'] = MultiAnswerId != null && MultiAnswerId != 'undefined' ? MultiAnswerId : ''; + obj['AnswerImage1'] = (Image1 || ''); + obj['AnswerImage2'] = (Image2 || ''); + obj['VisitDate'] = d2; + + allQtnsData.push(obj); + + if (i == txnres2.rows.length - 1) { + resolve(allQtnsData); + } + } + + } + else { + resolve(allQtnsData); + } + }, function (txnE, txnerr) { console.log(txnerr); resolve(allQtnsData) },); + + }); + }).then((val) => { + return val; + }) + .catch((err) => { + console.log(err); + return allForms; + }) + } + + + async function getDistributors(d2, previousDayUpload = false) { + let alldist = []; + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + + let stored_Select = `t1.DMID as MID,t1.EmpId,t1.DistributorId as StoreId,t1.DistributorName as StoreName,t1.DistributorCode as StoreCode,t1.Latitude,t1.Longitude,t1.InTime,t1.OutTime,t1.UploadStatus,t1.GeoTag`; + + let join = `INNER JOIN ${AppTables.DISTRIBUTOR_CHECKIN} t2 on t2.DISTRIBUTOR_ID=t1.DistributorId `; + let q = `Select ${stored_Select},t2.REASON_ID,'Master_Distributor' as JCP_TYPE from Master_Distributor t1 ${join} where t1.UploadStatus in ('C','P','D','L')`; + console.log("q:", q); + if (!previousDayUpload) { + q += ` and t2.VISIT_DATE='${d2}' `; + } + await txn.executeSql(q, [], async function (txn2, txnres2) { + + if (txnres2.rows.length > 0) { + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + alldist.push(data); + } + resolve(alldist); + } + else { + resolve(alldist); + } + }, function (txnE, txnerr) { console.log(txnerr); resolve(alldist) },); + + }); + }).then((val) => { + return val; + }).catch((err) => { + console.log(err); + return alldist; + }) + } + + async function getDBMenuList(storeData1) { + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + let q = Q_DBMenuList(storeData1); + await txn.executeSql(q, [], async function (txn2, txnres) { + if (txnres.rows.length > 0) { + let arr = [];//txnres.rows.raw(); + // resolve(arr); + for (var i = 0; i < txnres.rows.length; i++) { + let data = txnres.rows.item(i); + arr.push(data); + if (i == (txnres.rows.length - 1)) { + resolve(arr); + } + } + } + else { + resolve([]) + } + }, function (txnE, txnerr) { console.log(txnerr); resolve([]); },); + }); + }).then((val) => { + return val; + }).catch((err) => { + console.log('') + return [] + }) + } + + async function uploadAfter_P_status(index, AllStores, data, MenuList, allKPIs, JCP_TYPE, loc, onStoreUploadLast = () => { }, previousDayUpload = false) { + let { StoreName } = data; + if (MenuList.length > 0) { + // Upload data with Images + let allFilesToUpload = 0; + if (JCP_TYPE == "Master_Distributor") { + allFilesToUpload = await uploadAll_DBData(props, data, allKPIs, props.UserId, JCP_TYPE, false, loc, UpdateUploadCountLocal); + } + else { + allFilesToUpload = await uploadAllData(props, data, allKPIs, props.UserId, JCP_TYPE, true, UpdateUploadCountLocal, previousDayUpload); + } + UploadDataWithImages(index, AllStores, data, MenuList, allKPIs, JCP_TYPE, allFilesToUpload, loc, onStoreUploadLast, previousDayUpload); + + } + else { + // If There is no menu exists or defined for the distributor or store + // Upload statua u if no data exists + let isAllUploaded_S = false; + if (JCP_TYPE == "Master_Distributor") { + // previousDayUpload not required to uploadDBStatus as Master_Distributor does not have visit date + isAllUploaded_S = await uploadDBStatus(props, data, 'U', JCP_TYPE, loc); + } else { + isAllUploaded_S = await uploadStoreStatus(props, data, 'U', JCP_TYPE, previousDayUpload); + } + + if (isAllUploaded_S == true) { + notify(ST.Alldatauploadedfor + ' ' + StoreName, 'SHORT'); + // this is not required in case of distributor as store list upload handling the last event + if (JCP_TYPE != "Master_Distributor") { + onStoreUploadLast(index); // check if last then end uploading + } + } + else { + notify(ST.Erroroccurwhileuploadingdatafor + ' ' + StoreName, 'SHORT'); + // this is not required in case of distributor as store list upload handling the last event + if (JCP_TYPE != "Master_Distributor") { + onStoreUploadLast(index); // check if last then end uploading + } + } + } + } + + async function uploadHomeLocationStatus(index, onStoreUploadLast = () => { }, previousDayUpload = false) { + await db.transaction(async function (txn) { + let update_q1 = `UPDATE ${AppTables.HOME_LOCATION} SET STATUS='1' `; + let update_q = `UPDATE Master_UserHomeLocation SET LocationTaken='1' `; + await txn.executeSql(update_q1, [], async function (txn2, txnres3) { + console.log('Update Home location done'); + }, function (txnE, txnerr) { },); + await txn.executeSql(update_q, [], async function (txn2, txnres3) { + console.log('Update Home location done'); + }, function (txnE, txnerr) { },); + }); + } + + async function UploadDataWithImages(index, AllStores, data, MenuList, allKPIs, JCP_TYPE, allFilesToUpload, loc, onStoreUploadLast = () => { }, previousDayUpload = false) { + let { StoreName } = data; + if (allFilesToUpload.length > 0) { + // setLoaderTitle(ST.UploadingImages+'...'); + // keep 1 less to actual count as DownloadDataModal shows it as provided_value+1 + setUploadedCount(0); + setTotalUpCount(allFilesToUpload.length - 1); + setshowProgresssBar(true); + setUploadingText(ST.UploadingImages + '...'); + let isAllUploaded = await uploadAllImages(props, data, allFilesToUpload, JCP_TYPE, loc, UpdateUploadCountLocal, previousDayUpload); + if (isAllUploaded == true) { + console.log('JCP_TYPE in images upload', JCP_TYPE); + notify(ST.Alldataandimagesuploadedfor + ' ' + StoreName, 'SHORT'); + // this is not required in case of distributor as store list upload handling the last event + if (JCP_TYPE != "Master_Distributor") { + onStoreUploadLast(index); // check if last then end uploading + } + } else { + console.log('JCP_TYPE in images upload2', JCP_TYPE); + notify(ST.Cannotuploadimagesfor + ' ' + StoreName, 'SHORT'); + // this is not required in case of distributor as store list upload handling the last event + if (JCP_TYPE != "Master_Distributor") { + onStoreUploadLast(index); // check if last then end uploading + } + + } + } + else { + let isupdatedU = false; + if (JCP_TYPE == "Master_Distributor") { + isupdatedU = await uploadDBStatus(props, data, 'U', JCP_TYPE, loc); + } + else { + isupdatedU = await uploadStoreStatus(props, data, 'U', JCP_TYPE, previousDayUpload); + } + + console.log('on no files found to upload , isupdated::', isupdatedU); + if (isupdatedU) { + notify(ST.Alldatauploadedfor + ' ' + StoreName, 'SHORT'); + // this is not required in case of distributor as store list upload handling the last event + if (JCP_TYPE != "Master_Distributor") { + onStoreUploadLast(index); // check if last then end uploading + } + } + else { + // this is not required in case of distributor as store list upload handling the last event + if (JCP_TYPE != "Master_Distributor") { + onStoreUploadLast(index); // check if last then end uploading + } + } + + } + } + + + async function getPJPStoresData(tbname, Stores = [], d2, previousDayUpload = false) { + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + let join = `INNER JOIN ${AppTables.COVERAGE_DATA} t2 on t2.STORE_ID=t1.StoreId and t2.JCP_TYPE='${tbname}' `; + let q = `Select t1.*,t2.REASON_ID,t2.JCP_TYPE from ${tbname} t1 ${join} where t1.UploadStatus in ('C','P','D','L')`; + if (!previousDayUpload) { + q += ` and t1.VisitDate='${d2}' `; + } + console.log("test----------", q) + await txn.executeSql(q, [], async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + Stores.push(data); + } + resolve(Stores); + } + else { + resolve(Stores); + } + }, function (txnE, txnerr) { console.log(txnerr); resolve(Stores) },); + + }); + }).then((val) => { + return val; + }) + .catch((err) => { + console.log(err); + return Stores; + }) + } + + async function getVisitorLogin(d2, previousDayUpload = false) { + let allVisitors = []; + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + let q = `Select * from ${AppTables.VISITOR_LOGIN} where OUT_TIME!='' and UPLOADSTATUS!='U' `; + if (!previousDayUpload) { + q += ` and VISIT_DATE='${d2}' `; + } + await txn.executeSql(q, [], async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + allVisitors.push(data); + } + resolve(allVisitors); + } + else { + resolve(allVisitors); + } + }, function (txnE, txnerr) { console.log(txnerr); resolve(allVisitors) },); + + }); + }).then((val) => { + return val; + }) + .catch((err) => { + console.log(err); + return Stores; + }) + } + + async function getContractForms(d2) { + let allForms = []; + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + let join = ` Inner Join Mapping_ContractForm mp on mp.ProgramId=cf.PROGRAM_ID and mp.StoreId=cf.STORE_ID and mp.ProgramDefinitionId=cf.PROGRAM_DEFINITION_ID ` + let q = `Select mp.*,cf.IS_CONTRACT_SIGNED as IsContractSigned,cf.REASON_ID as ReasonId,cf.REASON as Reason from ${AppTables.CONTRACT_FORM} cf ${join} where mp.ContractFormStatus='0' `; + await txn.executeSql(q, [], async function (txn2, txnres2) { + console.log("Allcontracts:", txnres2.rows.length); + if (txnres2.rows.length > 0) { + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + allForms.push(data); + } + resolve(allForms); + } + else { + resolve(allForms); + } + }, function (txnE, txnerr) { console.log(txnerr); resolve(allForms) },); + + }); + }).then((val) => { + return val; + }) + .catch((err) => { + console.log(err); + return allForms; + }) + } + + async function getAddStoreInfoForms(d2) { + let allForms = []; + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + let q = `SELECT * from ${AppTables.ADD_STORE_INFO} WHERE VISIT_DATE='${d2}' AND STATUS='I'`; + await txn.executeSql( + q, + [], + async function (txn2, txnres2) { + console.log('All AddStoreInfo:', txnres2.rows.length); + if (txnres2.rows.length > 0) { + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + allForms.push(data); + } + resolve(allForms); + } else { + resolve(allForms); + } + }, + function (txnE, txnerr) { + console.log(txnerr); + resolve(allForms); + }, + ); + }); + }) + .then(val => { + return val; + }) + .catch(err => { + console.log(err); + return allForms; + }); + } + + async function getHomeLocation(d2) { + let allForms = []; + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + let q = `SELECT * from ${AppTables.HOME_LOCATION} WHERE VISIT_DATE='${d2}' AND STATUS='I'`; + await txn.executeSql( + q, + [], + async function (txn2, txnres2) { + console.log('All AddStoreInfo:', txnres2.rows.length); + if (txnres2.rows.length > 0) { + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + allForms.push(data); + } + resolve(allForms); + } else { + resolve(allForms); + } + }, + function (txnE, txnerr) { + console.log(txnerr); + resolve(allForms); + }, + ); + }); + }) + .then(val => { + return val; + }) + .catch(err => { + console.log(err); + return allForms; + }); + } + + async function getMenuDataTable() { + let allVisitors = []; + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + let q = `Select * from Master_MenuAppDashboard `; + await txn.executeSql(q, [], async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + allVisitors.push(data); + } + resolve(allVisitors); + } + else { + resolve(allVisitors); + } + }, function (txnE, txnerr) { console.log(txnerr); resolve(allVisitors) },); + + }); + }).then((val) => { + return val; + }) + .catch((err) => { + console.log(err); + return Stores; + }) + } + + async function getMenuAppData(storeData1, menu1) { + try { + let loginInfo = await get_item('loginInfo'); + const loginDetails = JSON.parse(loginInfo); + let AllDashboardData = await getMenuDataTable(); + let dashDataList = [] + Promise.all(AllDashboardData.map(async (downloadKeyObj) => { + let keyname = downloadKeyObj['DownloadKey'] + let dashboardItem = downloadKeyObj; + let allReportData = await DownloadReport(keyname, loginDetails); + // dashDataList + dashboardItem["list"] = allReportData + return dashboardItem + })).then(function (results) { + console.log("results------", results) + }) + let allReportData = await DownloadReport(); + console.log('allReportData', allReportData); + if (allReportData.length > 0) { + let data = allReportData[0]; + console.log('data dynamicdata-----', data); + let ShowField = JSON.parse(data.ShowField) + let ColorField = JSON.parse(data.ColorField) + let arrCol = [] + if (ShowField.length > 0) { + + for (var i = 0; i < ShowField.length; i++) { + let data1 = ShowField[i]; + + if (data1.Show == "Y") { + let obj = { FieldName: data1.FieldName } + let colorobj = ColorField.find(i => i.FieldName == data1.FieldName); + if (colorobj !== undefined && colorobj != "") { + obj["Color"] = colorobj.Color + } + console.log("ITesm,--", obj) + arrCol.push(obj); + } + + if (i == ShowField.length - 1) { + let colLen = arrCol.length; + let width = 97 / colLen; + setColWidth(width + '%'); + setcols(arrCol); + console.log('reportData:', arrCol); + // setReportData(arr); + + } + } + } + + let filterData = allReportData.filter((item) => item.StoreId == storeData1.StoreId); + setReportData(filterData); + // setProcessing(false); + } + + } catch (err) { + // setProcessing(false); + console.log(err); + } + } + + async function DownloadReport(keyname, loginDetails) { + console.log("keyname---", keyname) + const url = props.baseurl + getMethodName(METHODS.DOWNLOADJSON_METHOD); + let data = { + Downloadtype: keyname, + Username: loginDetails.UserId, + Param1: '', + Param2: Platform.OS == "ios" ? "iOS" : "Android", + }; + + console.log(url, data); + return await getDownloadJson1(url, data) + .then(async (res) => { + if (res[keyname]) { + let data_arr = res[keyname] || []; + console.log("data_arr------", data_arr) + return data_arr; + } + else { + return []; + } + }) + .catch((err) => { + console.log('onPage Team error', err); + return []; + }); + } + + + const handleBannerNavigation = (item, props) => { + const beforeQuestionMark = + item?.NoticeLink_FullPage?.split("?")[0] ?? ""; + console.log("banner_item", beforeQuestionMark); + if (item?.FullPageTarget === "deeplink") { + if (beforeQuestionMark === "reports") { + props.navigation.navigate('ReportsMenu'); + } else if ( + (beforeQuestionMark === "gyancast" || beforeQuestionMark === "gyancasts") && + (props.Gyancast === 1 || props.Gyancast) + ) { + props.navigation.navigate('Gyancasts', { Popup: true }); + } else if (beforeQuestionMark === "gyanbuddy" && props.Chatbot) { + const hours = new Date().getHours(); + const isWithinTime = hours >= 8 && hours < 20; + if (isWithinTime) { + props.navigation.navigate('ChatScreen'); + } else { + notify("⏰ Gyan Buddy is available between 8:00 AM and 8:00 PM only."); + } + } else if (beforeQuestionMark === "training") { + props.navigation.navigate('TrainingMenu'); + } + } else if (item?.FullPageTarget === "html-webbrowser") { + openWebBrowser(item?.NoticeLink_FullPage); + } else if (item?.FullPageTarget === "frame") { + NB_RetailDay(); + } else if (item?.FullPageTarget === "contact") { + createContact(beforeQuestionMark); + } else { + props.navigation.navigate('Bannerdetail', { imagedesc: item }); + } + }; + + function _renderTabularReport(item) { + let report_key = item.DownloadKey; + let reportContentObj = props.AppDashboardReports != null && typeof props.AppDashboardReports == 'object' && props.AppDashboardReports[report_key] != null && props.AppDashboardReports[report_key] != '' ? props.AppDashboardReports[report_key] : {}; + let report_data = reportContentObj['report_data'] != null ? reportContentObj['report_data'] : []; + let report_colWidth = reportContentObj['report_colWidth'] != null ? reportContentObj['report_colWidth'] : '50%'; + let report_cols = reportContentObj['report_cols'] != null ? reportContentObj['report_cols'] : []; + return ( + + {/* render No data */} + {report_data.length <= 0 && No Data} + {report_data.length > 0 && + {/* render columns */} + + {/* render header */} + + {report_cols.map((column, index) => { + return ( + + {column.colname} + + ) + })} + + {/* render content */} + + {report_data.map((row, row_index) => { + + return ( + { props.navigation.navigate("DashboardReportDetail", { "ReportData": item, "AdKPIId": row["AdKPIId"] }) }}> + {report_cols.map((column, index) => { + let colValue = row[column.actual_colname] != null ? row[column.actual_colname] : ''; + + let color_obj = get_rowColSettings(colValue, column.actual_colname, row); + + let cust_style = {}, bg_style = {}; + if (color_obj.color != null && color_obj.color != '') { + bg_style["backgroundColor"] = color_obj.color; + cust_style["color"] = '#fff' + } + if (color_obj.fontsize != null && color_obj.fontsize != '') { + cust_style["fontSize"] = color_obj.fontsize + } + if (color_obj.bold == 1) { + cust_style["fontWeight"] = "600" + } + + return ( + + {colValue} + + ) + })} + + ) + })} + + + + } + + ) + } + + + function _renderCardReport(item) { + let report_key = item.DownloadKey; + let reportContentObj = props.AppDashboardReports != null && typeof props.AppDashboardReports == 'object' && props.AppDashboardReports[report_key] != null && props.AppDashboardReports[report_key] != '' ? props.AppDashboardReports[report_key] : {}; + + // {"report_data":data_arr,"report_colWidth":columnWidth,"report_cols":allCols} + let report_data = reportContentObj['report_data'] != null ? reportContentObj['report_data'] : []; + let report_colWidth = reportContentObj['report_colWidth'] != null ? reportContentObj['report_colWidth'] : '50%'; + let report_cols = reportContentObj['report_cols'] != null ? reportContentObj['report_cols'] : []; + // console.log("report_cols:",report_cols); + + return ( + + {/* render No data */} + {report_data.length <= 0 && No Data} + {report_data.length > 0 && + {/* render columns */} + + {/* render header */} + {/* + {report_cols.map((column,index)=>{ + return( + + {column.colname} + + ) + })} + */} + {/* render content */} + + {report_data.map((row, row_index) => { + + let gset_obj = row["Color"] != null && row["Color"] != null != '' ? JSON.parse(row["Color"]) : {}; + let card_bgColor = gset_obj["bgColor"] != null ? gset_obj["bgColor"] : ''; + let card_font = gset_obj["font"] != null ? gset_obj["font"] : {}; + let card_name = gset_obj["card_name"] != null ? gset_obj["card_name"] : ''; + let card_icon = gset_obj["icon"] != null ? gset_obj["icon"] : ''; + let show_random_icon = gset_obj["random_icon"] != null ? gset_obj["random_icon"] : true; + let hide_report_name = gset_obj["hide_report_name"] != null ? gset_obj["hide_report_name"] : false; + let isfirsItem = row_index == 0; + let islastItem = row_index == report_data.length - 1; + + + return ( + { props.navigation.navigate("DashboardReportDetail", { "ReportData": item, "AdKPIId": row["AdKPIId"] }) }}> + + {(card_name != '' || card_icon != '' || show_random_icon) && + + {!hide_report_name && {card_name}} + {card_icon != '' && + + {} + + } + {card_icon == '' && show_random_icon && + + {(row_index % 2 == 0) && } + {(row_index % 2 != 0) && } + + } + } + + {report_cols.map((column, index) => { + let colValue = row[column.actual_colname] != null ? row[column.actual_colname] : ''; + + let color_obj = get_rowColSettings(colValue, column.actual_colname, row); + + let cust_style = {}, bg_style = {}; + if (color_obj.color != null && color_obj.color != '') { + bg_style["backgroundColor"] = color_obj.color; + cust_style["color"] = '#fff' + } + if (color_obj.fontsize != null && color_obj.fontsize != '') { + cust_style["fontSize"] = color_obj.fontsize + } + if (color_obj.bold == 1) { + cust_style["fontWeight"] = "600" + } + + return ( + + {column.colname} + {colValue} + + ) + })} + + + ) + })} + + + + } + + ) + } + + function _renderDashboardReports() { + + return ( + + + {"Reports"} + { refreshDashBReport() }}> + + + + {AppDashReportsSec.map((item, index) => { + // console.log("report:",item); + return ( + + + {item.DashboardName} + + + {item.DashboardType == 'Tabular' && + _renderTabularReport(item) + } + {item.DashboardType == 'Card' && + _renderCardReport(item) + } + + + ) + })} + + ) + } + + const injectedHeightJS = ` +(function() { + var lastHeight = 0; + + function getHeight() { + var body = document.body; + var html = document.documentElement; + + return Math.max( + body.scrollHeight, + body.offsetHeight, + html.clientHeight, + html.scrollHeight, + html.offsetHeight + ); + } + + function sendHeight() { + var height = getHeight(); + + if (height !== lastHeight && height > 0) { + lastHeight = height; + window.ReactNativeWebView.postMessage( + JSON.stringify({ type: "HEIGHT", value: height }) + ); + } + } + + // initial attempts + sendHeight(); + setTimeout(sendHeight, 300); + setTimeout(sendHeight, 1000); + setTimeout(sendHeight, 2000); + + // mutation observer (modern phones) + try { + var observer = new MutationObserver(sendHeight); + observer.observe(document.body, { + childList: true, + subtree: true, + attributes: true + }); + } catch(e) {} + + // fallback polling (older phones) + setInterval(sendHeight, 500); + + window.addEventListener("load", sendHeight); + window.addEventListener("resize", sendHeight); +})(); +true; +`; + + + + + function _renderDashBoard() { + return ( + + + Quick Links + { + let IconCompFunc = item.icon; + let showVectoreIcon = item.iconType == 'Icon' ? true : false; + return ( + + + + {!showVectoreIcon && item.icon && ()} + {showVectoreIcon && IconCompFunc()} + + {item.text} + + + ) + }} + /> + + + {bannerdetail?.length > 0 && ( + + setActiveSlide(index)} + renderItem={({ item }) => { + const url = item.NoticeLink_Thumbnail; + return ( + + handleBannerNavigation(item, props)} + > + + + + ); + }} + /> + + {/* Pagination + More */} + {/* Pagination Container */} + + {/* Pagination Dots (CENTER) */} + + {bannerdetail.map((_, index) => ( + + ))} + + + {/* More Text (RIGHT SIDE) */} + props.navigation.navigate('BannerMoreInfo',{bannerdetail : bannerdetail})} + > + + More... + + + + + )} + + + {props.WebViewDashboard && props.AppDashboardWebViewObj !== "" && QuickLinks.length > 0 && bannerRefresh ? + { + try { + const msg = JSON.parse(event.nativeEvent.data); + console.log("height", msg) + if (msg.type === "HEIGHT" && msg.value > 0) { + setWebHeight(msg.value); + } + } catch (e) { + // ignore non-JSON or site events + } + }} + onError={(syntheticEvent) => { + console.error('WebView error:', syntheticEvent.nativeEvent); + }} + onLoadStart={() => console.log('WebView loading...')} + onLoadEnd={() => console.log('WebView loaded successfully')} + onLoadProgress={({ nativeEvent }) => { + console.log('Load progress:', nativeEvent.progress); + }} + /> + : <> + {props.Show_OldMTDReports && + + Performance + { + let value = DashboardCovdata[item.value_Key] || '0'; + return ( + + + {/* */} + {item.icon && ()} + + + {item.text} + + + {value} + + + + + ) + }} + /> + + + + + + + {'FTD'} + {/* */} + + + + + + Planned + {DashboardCovdata.FTDPlanned} + + + + Covered + {DashboardCovdata.FTDCovered} + + + + Merchandised + {DashboardCovdata.FTDMerchandised} + + + + + + + + + + {'MTD'} + {/* */} + + + + + Planned + {DashboardCovdata.MTDPlanned} + + + + Covered + {DashboardCovdata.MTDCovered} + + + + Merchandised + {DashboardCovdata.MTDMerchandised} + + + + + + + + + } + {AppDashReportsSec.length > 0 && + _renderDashboardReports() + } + } + + ) + } + + function DownloadErrorAlert() { + + let { ErrorMsg, ErrorSubMsg, ErrorDetail } = DErrorMsg; + + return ( + + {ErrorDetail != null && ErrorDetail != '' && {ErrorDetail}} + + { setshowDErrAlert(false) }}> + {'Ok'} + + + + ) + } + + // WebView Survey + + const [surveydata, setSurveyData] = useState({}); + const [modalVisiblesurvey, setModalVisibleSurvey] = useState(false); + const [surveyloader, setSurveyLoader] = useState(false); + const webViewRef = useRef(null); + const isFocused = useIsFocused(); + + const ShowSurveyPopup = async () => { + console.log("Survey popup called---") + let projectInfo = await get_item('projectInfo'); + let projectCode = await get_item('projectCode'); + let loginInfo = await get_item('loginInfo'); + const loginDetails = JSON.parse(loginInfo); + const projectDetails = JSON.parse(projectInfo); + + try { + setSurveyLoader(true); + const raw = JSON.stringify({ + ProjectId: projectDetails?.projectID, + UserId: loginDetails?.UserId, + + }); + console.log("raw---------", raw) + let res = await fetch( + "https://api1.parinaam.in/api/cpminternal/GetPopupWeburl", + { + method: "POST", + body: raw, + headers: { + Accept: "application/json", + "Content-Type": "application/json", + }, + } + ); + let responseJson = await res.json(); + if (responseJson) { + setSurveyData(responseJson?.GetPopupWeburl); + console.log("responseJson?.GetPopupWeburl[0]?.Status", responseJson) + if (responseJson?.GetPopupWeburl[0]?.Status) { + setModalVisibleSurvey(false); + } else { + setModalVisibleSurvey(true); + } + } else { + setSurveyData({}); + } + } catch (error) { + setSurveyLoader(false); + console.log("Survey Popup:" + error); + } finally { + setSurveyLoader(false); + } + }; + + useEffect(() => { + if (props.isInternetAvailable == true) { + ShowSurveyPopup(); + } + + }, [isFocused]); + + let webUrl = surveydata[0]?.WebUrl; + const injectedJS = ` + (function() { + function notifyReactNative() { + window.ReactNativeWebView.postMessage( + JSON.stringify({ id: "cpminternalclose", event: "clicked" }) + ); + } + + // Wait until DOM loads + document.addEventListener("DOMContentLoaded", function() { + var btn = document.getElementById("cpminternalclose"); + if (btn) { + btn.addEventListener("click", notifyReactNative); + } + }); + + // Also check repeatedly (in case content is dynamic) + var checkInterval = setInterval(function() { + var btn = document.getElementById("cpminternalclose"); + if (btn) { + clearInterval(checkInterval); + btn.addEventListener("click", notifyReactNative); + } + }, 500); + })(); + true; +`; + + + const handleMessage = (event) => { + const data = JSON.parse(event.nativeEvent.data); + console.log("WebView message:", data); + + if (data.id === "cpminternalclose" && data.event === "clicked") { + setTimeout(() => { + setModalVisibleSurvey(false); + ShowSurveyPopup(); + }, 1500); + } + }; + + + return ( + <> + + {processing && } + {(props.startDownload && dowloadedCount <= totalCount) && } + {(startUploading) && } + + + + + {IRSessionPendingCount > 0 && + { props.navigation.navigate('IRPendingDetails') }}> + + IR Image Upload Pending! Please upload all IR image by clicking side menu "Upload Data" button + } + {_renderDashBoard()} + + + + + { + // need to uncomment this popup + setModalVisibleSurvey(false)} + > + + + {surveyloader && } + setSurveyLoader(true)} + onLoadEnd={() => { + setSurveyLoader(false); + console.log("ENd Loadingggg...---"); + }} + ref={webViewRef} + injectedJavaScript={injectedJS} + onMessage={handleMessage} + /> + + + + } + + + + { + setTimeout(() => { + setShowBadge(false); + }, 100); // 10 seconds + }} + onSave={handleSaveBadge} + /> + + ); +} + +export default connect(mapStateToProps, mapDispatchToProps)(NoticeBoard); + + +const styles = StyleSheet.create({ + screen: { + flex: 1, + justifyContent: 'center', + alignItems: 'center', + backgroundColor: 'transparent', + }, + buttonText: { + color: '#fff', + fontSize: 16, + }, + modalContainer: { + flex: 1, + justifyContent: 'center', + alignItems: 'center', + overflow: 'hidden', + marginTop: 15 + }, + modalContent: { + width: '100%', + minHeight: "85%", + backgroundColor: 'transparent', + borderRadius: 10, + overflow: 'hidden', + }, + webView: { + flex: 1, + backgroundColor: "transparent" + }, +}) + diff --git a/PerformicsSrc/src/screens/NotificationList.js b/PerformicsSrc/src/screens/NotificationList.js new file mode 100644 index 0000000..835b882 --- /dev/null +++ b/PerformicsSrc/src/screens/NotificationList.js @@ -0,0 +1,261 @@ +import { View, Text, Platform, StyleSheet, FlatList, Image, TouchableOpacity } from 'react-native'; +import React, { useEffect, useState } from 'react'; +import Container from '../components/container'; +import CustomHeader from '../components/customHeader'; +import { connect } from 'react-redux'; +import { mapDispatchToProps, mapStateToProps } from '../reducers/contextProvider'; +import IMAGES from '../constants/Images'; +import NOTIFICATIONAPISERVICES from '../NotificationApiService'; +import { get_item } from '../components/localStorage'; +import { notify } from '../components/notify'; +import moment from 'moment'; +import CustomLoader from '../components/CustomLoader'; + +const NotificationList = (props) => { + + const [list , setList] = useState([]); + const [processing, setProcessing] = useState(true); + + const updatereadstatus = async (item) => { + + try { + const data = { NotificationId : item?.NotificationId}; + + NOTIFICATIONAPISERVICES.updatenotificationreadstatus.post(data) + .then(async res => { + console.log(res, "response?////// of read status") + if (!res.UpdateNotificationReadStatus) { + notify('Invalid response format', 'SHORT'); + return; + } + const updateInfo = res?.UpdateNotificationReadStatus?.length > 0 ? res?.UpdateNotificationReadStatus[0] : {}; + const status = updateInfo?.Status; + const message = updateInfo?.Message || ''; + if (status === 1) { + // navigate + props?.navigation.navigate('NotificationListDetail', { notificationdata: { ...item } }); + getNotificationList(); + + } + else if (status === 0) { + notify(message,'SHORT'); + } + else { + notify(`Status: ${status} with message: ${message}`, 'SHORT'); + } + }) + .catch(err => { + console.error(err); + notify('Something went wrong. Please try again later.','SHORT'); + }); + } catch (error) { + console.error(error); + notify('Failed to retrieve information.','LONG'); + } + }; + + const getNotificationList = async () => { + setProcessing(true); + try { + let projectInfo = await get_item('projectInfo'); + let projectDetails = projectInfo != null ? JSON.parse(projectInfo) : {}; + + let loginInfo = await get_item('loginInfo'); + const loginDetails = JSON.parse(loginInfo); + const data = { UserName: loginDetails?.UserId, ProjectCode: projectDetails?.ProjectCode }; + + NOTIFICATIONAPISERVICES.getnotificationlist.post(data) + .then(async res => { + setProcessing(false); + console.log(res, "response?////// readddd") + if (!res.GetNotificationListofUser) { + notify('Invalid response format', 'SHORT'); + return; + } + const notificationInfo = res?.GetNotificationListofUser ? res?.GetNotificationListofUser : {}; + const status = notificationInfo?.Status; + const message = notificationInfo?.Message || ''; + + console.log(notificationInfo, "statusInfo") + if (status === 1) { + setList(notificationInfo?.Data); + + } + else if (status === 2) { + notify(message,'SHORT'); + } + else { + notify(`Status: ${status} with message: ${message}`, 'SHORT'); + } + + }) + .catch(err => { + console.error(err); + setProcessing(false); + notify('Something went wrong. Please try again later.','SHORT'); + }); + } catch (error) { + setProcessing(false); + console.error(error); + notify('Failed to retrieve notification information.','LONG'); + } + }; + + const renderNotification = ({ item }) => { + const { Title, msg, ReadStatus , Icon , DateTime} = item; + return ( + + + + {!ReadStatus && } + + + updatereadstatus(item)}> + + + + {Title} + {msg} + + {moment(DateTime).format('MMM DD, YYYY')} + + {moment(DateTime).format('HH:mm')} + + + + + + + ); + }; + + useEffect(() => { + getNotificationList(); + },[]) + + return ( + + + + + {processing ? ( + + ) : list?.length > 0 ? ( + item?.NotificationId?.toString()} + ItemSeparatorComponent={() => } + renderItem={renderNotification} + /> + ) : ( + + + No Notifications + + )} + + + ); +}; + +export default connect(mapStateToProps, mapDispatchToProps)(NotificationList); + +const styles = StyleSheet.create({ + footer: { + flex: 5, + width: "100%", + backgroundColor: "#f2f5f7", + paddingBottom: 15, + paddingTop: 10, + }, + emptyCartContainer: { + marginTop: 250, + justifyContent: "center", + alignItems: "center", + }, + emptyCartMessage: { + fontSize: 20, + color: '#000', + marginTop:10 + }, + body: { + fontSize: 14, + paddingTop: 5, + color: "#000", + textAlign: "left", + }, + title: { + color: '#000', + fontWeight: "600", + fontSize: 16, + }, + notifyData: { + padding: 8, + backgroundColor: "#fff", + shadowOpacity: 0.22, + shadowRadius: 2.22, + elevation: 1, + borderRadius: 8, + }, + notifyItem: { + padding: 1, + marginTop: 5, + backgroundColor: "#fff", + flexDirection: "row", + marginHorizontal: 5, + alignItems: 'center', + }, + itemData: { + flex: 3, + marginHorizontal: 10, + flexDirection: "column", + }, + time: { + fontSize: 12, + paddingTop: 5, + color: "#8F8F8F", + textAlign: "left", + }, + notificationIcon: { + height: 40, + width: 40, + }, + NOnotificationIcon: { + height: 80, + width: 80, + resizeMode : 'contain', + tintColor : '#8BB5D3' + }, + timestamp: { + flexDirection: 'row', + alignItems: 'center', + }, + dot: { + width: 8, + height: 8, + backgroundColor: '#8F8F8F', + borderRadius: 50, + marginTop: 5, + marginHorizontal: 6, + }, + flatListContent: { + paddingBottom: 50, + }, + itemSeparator: { + paddingVertical: 6, + }, + notificationWrapper: { + marginHorizontal: 10, + }, + readTag: { + position: 'absolute', + zIndex: 100, + }, + readTagImage: { + height: 25, + width: 30, + borderTopLeftRadius: 8, + resizeMode: 'cover', + }, +}); diff --git a/PerformicsSrc/src/screens/NotificationListDetail.js b/PerformicsSrc/src/screens/NotificationListDetail.js new file mode 100644 index 0000000..0af26c0 --- /dev/null +++ b/PerformicsSrc/src/screens/NotificationListDetail.js @@ -0,0 +1,119 @@ +import { View, Text, Platform, StyleSheet, FlatList, Image } from 'react-native' +import React, { useState } from 'react' +import Container from '../components/container' +import CustomHeader from '../components/customHeader' +import { connect } from 'react-redux' +import { mapDispatchToProps, mapStateToProps } from '../reducers/contextProvider' +// import IMAGES from '../constants/Images' +import { useRoute } from '@react-navigation/native' +import moment from 'moment'; + +const NotificationListDetail = (props) => { + +const route = useRoute(); + +const notificationdata = route?.params?.notificationdata; + console.log(notificationdata, "notification data .....") + + return ( + + + + + + + {notificationdata?.Title} + + + {moment(notificationdata?.DateTime).format('MMM DD, YYYY')} + + {moment(notificationdata?.DateTime).format('HH:mm')} + + + + {notificationdata?.msg} + + + ) +} + +export default connect(mapStateToProps, mapDispatchToProps)(NotificationListDetail); + +const styles = StyleSheet.create({ + footer: { + flex: 5, + width: "100%", + backgroundColor: "#f2f5f7", + paddingBottom: 15, + }, + emptyCartContainer: { + marginTop: 250, + justifyContent: "center", + alignItems: "center", + }, + emptyCartMessage: { + fontSize: 28, + color: '#000' + }, + body: { + justifyContent: "flex-start", + fontSize: 15, + paddingTop: 5, + color: "#5c5b56", + textAlign: "left", + paddingTop:12 + }, + title: { + justifyContent: "flex-start", + color: '#000', + fontWeight: "600", + fontSize: 18, + }, + Notifydata: { + padding: 8, + backgroundColor: "#fff", + shadowColor: "#000", + shadowOffset: { + width: 0, + height: 1, + }, + shadowOpacity: 0.22, + shadowRadius: 2.22, + elevation: 3, + }, + NotifyItem: { + padding: 1, + marginTop: 5, + backgroundColor: "#fff", + flexDirection: "row", + marginHorizontal: 5, + alignItems:'center' + }, + itemDatas: { + flex: 1, + marginHorizontal: 10, + flexDirection: "column", + alignItems:'flex-start', + alignSelf:'flex-start', + paddingTop:10 + }, + time: { + justifyContent: "flex-start", + fontSize: 14, + paddingTop: 5, + color: "#878a88", + textAlign: "left", + }, + timestamp: { + flexDirection: 'row', + alignItems: 'center', + }, + dot: { + width: 8, + height: 8, + backgroundColor: '#8F8F8F', + borderRadius: 50, + marginTop: 5, + marginHorizontal: 6, + }, +}); \ No newline at end of file diff --git a/PerformicsSrc/src/screens/OfflineOrder.js b/PerformicsSrc/src/screens/OfflineOrder.js new file mode 100644 index 0000000..6a0032d --- /dev/null +++ b/PerformicsSrc/src/screens/OfflineOrder.js @@ -0,0 +1,1652 @@ +import React, { useState, useEffect, useRef } from 'react'; +import Container from '../components/container'; +import { useRoute } from '@react-navigation/native'; +import { customStyles, GetPageTheme } from "../styles/Global"; +import { TextInput, View, Text, ScrollView, TouchableOpacity, Platform, PermissionsAndroid, Animated, Alert, KeyboardAvoidingView, AppState, Keyboard, StyleSheet, Modal } from 'react-native'; +import { connect } from 'react-redux'; +import { mapStateToProps, mapDispatchToProps } from '../reducers/contextProvider'; +import { notify } from '../components/notify'; +import moment from 'moment'; +import { getKPIFields, validateNumber } from '../controller/functions'; +import { get_item, set_item, clear_item } from '../components/localStorage'; +import { db } from '../constants/constants'; +import CustomHeader from '../components/customHeader'; +import { AntDesign, Fontisto, MaterialCommunityIcons } from '../components/icons'; + +import CustomLoader from '../components/CustomLoader'; +import LinearGradient from 'react-native-linear-gradient'; +import { AppTables } from '../constants/tableConstants'; +import GradientButton from '../components/gradientButton'; +import { ConfirmSaveAlert } from '../components/alert'; + +import DateTimePicker from '@react-native-community/datetimepicker'; +import { CustomPicker2 } from '../components/CustomPicker'; +import SearchableSelector from '../components/SearchableSelector'; +import { KeyboardAwareFlatList } from 'react-native-keyboard-aware-scroll-view'; + +// import { log } from '@react-native-firebase/crashlytics'; + + + +function Order(props) { + const route = useRoute(); + const ST = props.StaticText || {}; + const { item } = route.params; + //console.log("checkprops-->", props) + + // get all theme styles acc to current theme set + const PageTheme = GetPageTheme(props.DarkMode, route.name); + const customStyle = customStyles(props.DarkMode, route.name); + const animatedChoice = useRef(new Animated.Value(0)).current; + + + + const [processing, setProcessing] = useState(false); + const [loaderTitle, setLoaderTitle] = useState('loading...'); + const [isAdhocScreen, setIsAdhocScreen] = useState(false); + const [storeData, setStoreData] = useState({}); + const [currentMenu, setCurrentMenu] = useState({}); + const [brandData, setBrandData] = useState([]); + const [rerenderdata, setrerenderdata] = useState(0); + const [SKUStockData, setSKUStockData] = useState([]); + + const [SystemPO, setSystemPO] = useState(''); + const [StorePO, setStorePO] = useState(''); + const [ContactName, setContactName] = useState(''); + const [ContactNo, setContactNo] = useState(''); + const [StockistDis, setStockistDis] = useState({}); + const [PODate, setPODate] = useState(''); + const [showRAllC_M, setShowRAllC_M] = useState(false); + const [PODate2, setPODate2] = useState(new Date()); + const [reason, setReason] = useState({}); + + + const [ShowDatePicker, setShowDatePicker] = useState(false); + + const [KPIFields, setKPIFields] = useState([]); + const [showAlert, setShowAlert] = useState(false); + const [hasUnsavedChanges, setHasUnsavedChanges] = useState(false); + const [IsOrderPresent, setIsOrderPresent] = useState(0); + const [reasons_list, setReasons_list] = useState([]); + const [StockistList, setStockistList] = useState([]); + const [searchedItem, setSearchedItem] = useState(''); + const [storeList, setStoreList] = useState([]); + const [selectedStore, setSelectedStore] = useState(null); + const [previewData, setPreviewData] = useState([]); + const [modalVisible, setModalVisible] = useState(false); + const [showMrpPtr, setShowMrpPtr] = useState('NA'); + const showMrpPtrRef = useRef('NA'); + + const hasUnsavedChangesRef = React.useRef(hasUnsavedChanges); + const WindowDataRef = React.useRef(SKUStockData); + const StoreIdRef = React.useRef(null); + const ScreenNameRef = React.useRef(''); + const IsOrderPresentRef = React.useRef(IsOrderPresent); + + const SystemPORef = React.useRef(SystemPO); + const StorePORef = React.useRef(StorePO); + const ContactNameRef = React.useRef(ContactName); + const ContactNoRef = React.useRef(ContactNo); + const PODateRef = React.useRef(PODate); + const PODate2Ref = React.useRef(PODate2); + const showRAllC_MRef = React.useRef(showRAllC_M); + const StockistDisRef = React.useRef(StockistDis); + + const inputRefs = useRef({}); + + const countries = ["Egypt", "Canada", "Australia", "Ireland", "Brazil", "England", "Dubai", "France", "Germany", "Saudi Arabia", "Argentina", "India"]; + + const emojisWithIcons = [ + { StockistId: 'happy', StockistName: 'emoticon-happy-outline' }, + { StockistId: 'cool', StockistName: 'emoticon-cool-outline' }, + { StockistId: 'lol', StockistName: 'emoticon-lol-outline' }, + { StockistId: 'sad', StockistName: 'emoticon-sad-outline' }, + { StockistId: 'cry', StockistName: 'emoticon-cry-outline' }, + { StockistId: 'angry', StockistName: 'emoticon-angry-outline' }, + { StockistId: 'confused', StockistName: 'emoticon-confused-outline' }, + { StockistId: 'excited', StockistName: 'emoticon-excited-outline' }, + { StockistId: 'kiss', StockistName: 'emoticon-kiss-outline' }, + { StockistId: 'devil', StockistName: 'emoticon-devil-outline' }, + { StockistId: 'dead', StockistName: 'emoticon-dead-outline' }, + { StockistId: 'wink', StockistName: 'emoticon-wink-outline' }, + { StockistId: 'sick', StockistName: 'emoticon-sick-outline' }, + { StockistId: 'frown', StockistName: 'emoticon-frown-outline' }, + ]; + + const d1 = new Date(); + const d2 = moment(d1).format('MM/DD/YYYY'); + + const fetchAndInsertData = async () => { + let loginInfo = await get_item('loginInfo'); + const loginDetails = JSON.parse(loginInfo); + //console.log("loginDetails",loginDetails); + + try { + const response = await fetch( + 'https://ap1.parinaam.in/Webservice/GenericService.svc/downloadJson', + { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ + Downloadtype: 'StoreList_OfflineOrder', + Param1: '', + Param2: Platform.OS == "ios" ? "iOS" : "Android", + Username: loginDetails.UserId, + }), + } + ); + + + const rawJson = await response.json(); + //console.log('typeof rawJson:', typeof rawJson); + + let json = rawJson; + + if (typeof rawJson === 'string') { + json = JSON.parse(rawJson); + } + + // console.log('Parsed json:', json); + + const storeList = json?.StoreList_OfflineOrder; + console.log('storeList:', storeList); + + + if (Array.isArray(storeList) && storeList.length > 0) { + console.log("Inserting store list..."); + setProcessing(true) + + db.transaction( + tx => { + // First delete OFFLINE_ORDER table data + tx.executeSql( + 'DELETE FROM OFFLINE_ORDER', + [], + (_, result) => { + console.log('Old OFFLINE_ORDER data cleared.'); + }, + (_, error) => { + console.log('Failed to clear OFFLINE_ORDER data:', error); + return true; // stop transaction on failure + } + ); + tx.executeSql( + 'DELETE FROM StoreList_OfflineOrder', + [], + (_, result) => { + console.log('Old store data cleared.'); + }, + (_, error) => { + console.log('Failed to clear old store data:', error); + return true; // stop transaction on failure + } + ); + + + storeList.forEach(item => { + console.log("Inserting item:", item); + + tx.executeSql( + `INSERT INTO StoreList_OfflineOrder + (storeId, StoreName, Address, Pincode, CityName, StoreType, VisitDate) + VALUES (?, ?, ?, ?, ?, ?, ?)`, + [ + item.storeId, + item.StoreName, + item.Address, + item.Pincode, + item.CityName, + item.StoreType, + item.VisitDate, + ], + (_, result) => { + console.log(`Inserted storeId ${item.storeId}`); + }, + (_, error) => { + console.log(`Failed to insert storeId ${item.storeId}: `, error); + return false; // continue transaction on error + } + ); + }); + }, + error => { + console.log('Transaction error:', error); + Alert.alert('Error', 'Failed to insert store data.'); + setProcessing(false) + }, + () => { + console.log('All stores inserted successfully!'); + Alert.alert('Success', 'Store data downloaded and saved.'); + setProcessing(false) + } + ); + } else { + console.log('No store data found in response.'); + Alert.alert('Info', 'No store data available.'); + setProcessing(false) + } + + } catch (error) { + console.log('Fetch or DB error:', error); + Alert.alert('Error', 'Failed to download store data.'); + setProcessing(false) + } + }; + + + const calculateTotalValue = () => { + let total = 0; + brandData.forEach((cat) => { + (cat.skulist || []).forEach((sku) => { + const thisCatSkuDataIndex = SKUStockData.findIndex( + (i) => i.CategoryId === cat.CategoryId && i.ProductId === sku.ProductId + ); + const stock = + thisCatSkuDataIndex >= 0 + ? SKUStockData[thisCatSkuDataIndex].Stock || 0 + : 0; + total += sku.ptr * (parseFloat(stock) || 0); + }); + }); + return total.toFixed(2); + }; + + const calculateTotalStockQty = () => { + let totalStockQty = 0; + + brandData.forEach((cat) => { + (cat.skulist || []).forEach((sku) => { + const thisCatSkuDataIndex = SKUStockData.findIndex( + (i) => i.CategoryId === cat.CategoryId && i.ProductId === sku.ProductId + ); + + // ✅ Get Stock Value + const stock = + thisCatSkuDataIndex >= 0 + ? parseFloat(SKUStockData[thisCatSkuDataIndex].Stock) || 0 + : 0; + + // ✅ Add Stock Qty only + totalStockQty += stock; + }); + }); + + return totalStockQty; + }; + + + useEffect(() => { + let params = props.route.params ? props.route.params : {}; + let storeData1 = params.storeData || {}; + let menu1 = params.menu || {}; + + let isAdhoc = params.isAdhoc || false; + setIsAdhocScreen(isAdhoc); + setStoreData(storeData1); + setCurrentMenu(menu1); + + // let SPO=selectedStore?.StoreId+'_'+moment().format('YYYYMMDDHHmmss'); + // setSystemPO(SPO); + // BgSystemPO(SPO) + + StoreIdRef.current = storeData1.StoreId + ScreenNameRef.current = menu1.ScreenName + getData(storeData1, menu1); + + const AppStateSubscription = AppState.addEventListener('change', (pro) => { _handleAppStateChange(pro) }); + const unsubscribe = props.navigation.addListener('beforeRemove', onBeforeRemove); + + return function cleanup() { + AppStateSubscription.remove(); + return unsubscribe; + }; + }, []); + + + useEffect(() => { + if (selectedStore) { + getData(selectedStore, currentMenu); + let SPO = selectedStore?.StoreId + '_' + moment().format('YYYYMMDDHHmmss'); + BgSystemPO(SPO) + + } + }, [selectedStore]); + + const _handleAppStateChange = async (nextAppState) => { + // console.log('getDAta-----bg-unsaved1--paid') + if (nextAppState == 'background' && hasUnsavedChangesRef.current == true) { + // console.log('getDAta-----bg-unsaved1--paid',hasUnsavedChangesRef ) + let newData = { + storeBGData: WindowDataRef.current, + menuName: ScreenNameRef.current, + StoreId1: StoreIdRef.current, + IsOrderPre: IsOrderPresentRef.current, + BgSystemPOData: SystemPORef.current, + BgStorePOData: StorePORef.current, + BgContactNameData: ContactNameRef.current, + BgContactNoData: ContactNoRef.current, + BgPODateData: PODateRef.current, + BgPODate2Data: PODate2Ref.current, + BgshowRAllC_MData: showRAllC_MRef.current, + visiteDate: d2, + StockistDisBG: StockistDisRef.current + } + let WindowsStr = JSON.stringify(newData) + console.log('getDAta-----bg-unsaved2', WindowsStr) + // await set_item('storeData',WindowsStr); + } + } + + useEffect(() => { + const unsubscribe = props.navigation.addListener('beforeRemove', onBeforeRemove); + return unsubscribe; + }, [hasUnsavedChanges]); + + function onBeforeRemove(e) { + if (hasUnsavedChanges == true) { + e.preventDefault(); // Prevent default behavior of leaving the screen + onRemoveScreen(e); + } + else { + return; + } + } + + function BgUnsavedChanges(val) { + hasUnsavedChangesRef.current = val + setHasUnsavedChanges(val); + } + + function BgWindowData(val) { + WindowDataRef.current = val + setSKUStockData(val); + } + + function BgSystemPO(val) { + SystemPORef.current = val + setSystemPO(val); + } + function BgStorePO(val) { + StorePORef.current = val + setStorePO(val); + } + function BgContactName(val) { + ContactNameRef.current = val + setContactName(val); + } + function BgContactNo(val) { + ContactNoRef.current = val + setContactNo(val); + } + + function BgStockist(val) { + StockistDisRef.current = val + setStockistDis(val); + } + + function BgPODate(val) { + PODateRef.current = val + setPODate(val); + } + + function BgPODate2(val) { + PODate2Ref.current = val + setPODate2(val); + } + + function BgshowRAllC_M(val) { + showRAllC_MRef.current = val + setShowRAllC_M(val); + } + + + function onRemoveScreen(e) { + Alert.alert( + "", + "Do you really want to exit the screen?", + [ + { + text: "Cancel", + onPress: () => { }, + style: "cancel" + }, + { + text: "OK", onPress: async () => { + // setHasUnsavedChanges(false); + BgUnsavedChanges(false) + await clear_item('storeData') + props.navigation.dispatch(e.data.action); + } + } + ] + ); + } + + + function updateShowMrpPtr(newVal) { + showMrpPtrRef.current = newVal; // instant + setShowMrpPtr(newVal); // triggers UI update + } + async function getData(storeData1, menu1) { + //console.log("selectedStore",selectedStore,menu1) + try { + let AllKPIFields = await getKPIFields(menu1, true); + setKPIFields(AllKPIFields); + console.log("menuuu", menu1) + let isShowMrpPtrIndex = AllKPIFields.findIndex(i => i.KPIFieldName == 'ShowMRPPTR') + let isShowMrpPtrKPIObj = isShowMrpPtrIndex >= 0 ? AllKPIFields[isShowMrpPtrIndex] : {}; + let isShowMrpPtrEnable = isShowMrpPtrIndex >= 0 ? isShowMrpPtrKPIObj['KPIFieldEnable'] : false; + if (isShowMrpPtrEnable == true) { + let isShowMrpPtrName = isShowMrpPtrIndex >= 0 ? isShowMrpPtrKPIObj['KPIFieldDisplayName'] : 'NA'; + updateShowMrpPtr(isShowMrpPtrName) + } + console.log("tessdsdsd", isShowMrpPtrKPIObj) + db.transaction(tx => { + tx.executeSql( + ` SELECT + COUNT(*) as count, + (SELECT VisitDate FROM StoreList_OfflineOrder ORDER BY VisitDate DESC) as latestVisitDate + FROM StoreList_OfflineOrder + `, + [], + (_, { rows }) => { + const count = rows.item(0).count; + const latestVisitDate = rows.item(0).latestVisitDate; + + console.log('Local store count:', count); + console.log('Latest Visit Date:', latestVisitDate); + // console.log('Today Date:', todayDate); + + if (count === 0) { + console.log('No local data found. Downloading...'); + fetchAndInsertData(); + } else if (latestVisitDate !== d2) { + console.log('Visit date does not match today. Downloading new data...'); + fetchAndInsertData(); + } else { + console.log('Local data is up to date.'); + } + }, + (_, error) => { + console.log('Error checking local store data:', error); + } + ); + }); + + + let PODateAutoFillIndex = KPIFields.findIndex(i => i.KPIFieldName == 'PODateAutoFill') + let PODateAutoFillKPIObj = PODateAutoFillIndex >= 0 ? KPIFields[PODateAutoFillIndex] : {}; + let PODateAutoFillEnable = PODateAutoFillIndex >= 0 ? PODateAutoFillKPIObj['KPIFieldEnable'] : true; + if (PODateAutoFillEnable == true && (PODate == '' || PODate == null)) { + let d1 = moment().format('DD/MM/YYYY'); + setPODate(d1); + } + + let storeBGData1 = [], bgStoreJson = {}, IsOrdPresent = false, isBgDataExists = false; + + db.transaction(async function (txn) { + let q3 = `Select OrderReasonId as ReasonId,OrderReason as Reason From Master_NonOrderReason`; + txn.executeSql(q3, [], async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + let arr = []; + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + arr.push(data); + if (i == txnres2.rows.length - 1) { + setReasons_list(arr); + } + } + } + }, function (txnE, txnerr) { console.log(txnerr); }); + let q4 = `Select StockistId,StockistName From Master_Stockist`; + txn.executeSql(q4, [], async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + let arr = []; + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + arr.push(data); + if (i == txnres2.rows.length - 1) { + setStockistList(arr); + } + } + } + }, function (txnE, txnerr) { console.log(txnerr); }); + + let join = ` INNER JOIN Mapping_ProductAssortmentStorewise mp on p.ProductId=mp.ProductId `; + let q = ` SELECT DISTINCT p.CategoryId,p.CategoryName,'' as MSL from Product_Master p ${join} Where mp.StoreId = ${selectedStore?.StoreId} and (IsCompetitor='0' or IsCompetitor=0) order by p.CategorySequence`; + + console.log("checkqq-->", q); + + + txn.executeSql(q, [], async function (txn2, txnres) { + if (txnres.rows.length > 0) { + console.log('inputs found'); + let arr = [], arr2 = []; + console.log("hea=der_length", txnres.rows.length); + for (var i = 0; i < txnres.rows.length; i++) { + let data = txnres.rows.item(i); + let SKU_d = await getSKU(data, storeData1, IsOrdPresent, bgStoreJson, isBgDataExists); + let skulist = SKU_d['skulist'] || []; + let skuData = SKU_d['skuData'] || []; + data['skulist'] = skulist; + arr.push(data); + arr2 = arr2.concat(skuData); + if (i == txnres.rows.length - 1) { + console.log('arr2:', arr2); + setBrandData(arr); + if (!isBgDataExists) { + BgWindowData(arr2); + } + + // setSKUStockData(arr2); + setProcessing(false); + } + } + + } else { + } + + }, function (txnE, txnerr) { console.log(txnerr); }); + // setProcessing(false); + }); + } catch (err) { + console.log(err); + } + } + + function onselectionChange3(option, keyLbl, keyVal, otherData) { + setReason(option) + console.log("option------", option) + + } + + + async function getSKU(cat, storeData1 = {}, IsOrdPresent = false, bgStoreJson = [], isBgDataExists = false) { + let defData = { 'skulist': [], 'skuData': [] }; + let { StoreId, ChainId, StateId, StoreTypeId, ExpiryStock, StoreClassId, StoreCategoryId } = storeData1; + let bgStoreDataLength = Object.keys(bgStoreJson).length + return await new Promise(async (resolve, reject) => { + db.transaction(async function (txn) { + let seletlist = `p.ProductName,p.ProductId,ifnull(p.ptr,0)as ptr,ifnull(p.Mrp,0)as Mrp`; + let join = `inner join Mapping_ProductAssortmentStorewise m on p.ProductId=m.ProductId `; + let q1 = `SELECT ${seletlist} from Product_Master p ${join} where m.StoreId= ${selectedStore.StoreId} and (p.CategoryId='${cat.CategoryId}' or p.CategoryId= ${cat.CategoryId}) and (p.IsCompetitor='0' or p.IsCompetitor= 0) order by p.ProductSequence `; + + console.log('product in orders q:', q1); + txn.executeSql(q1, [], async function (txn2, txnres) { + console.log('product in orders len:', txnres.rows.length); + if (txnres.rows.length > 0) { + let arr = [], arr2 = [], isAdded = false; + for (var i = 0; i < txnres.rows.length; i++) { + let data = txnres.rows.item(i); + let { SYSTEM_PO, STORE_PO, PO_DATE, IS_PRESENT, CONTACT_NAME, CONTACT_NO } = data; + inputRefs.current['input1_' + cat.CategoryId + '_' + data.ProductId] = ''; + data.ptr = showMrpPtrRef.current === 'PTR' ? data.ptr : data.Mrp + arr.push(data); + let defData1 = { 'CategoryId': cat.CategoryId, 'ProductId': data.ProductId, 'Stock': data.STOCK, 'ProductName': data.ProductName, 'CategoryName': cat.CategoryName }; + + arr2.push(defData1); + let isReasonId = data.REASON_ID != null ? data.REASON_ID : 0; + let isReason = data?.REASON != null ? data?.REASON : '' + let isPresent = IS_PRESENT == 1 || IS_PRESENT == '1'; + if (isPresent && !isAdded) { + + BgSystemPO(SYSTEM_PO) + BgStorePO(STORE_PO) + BgContactName(CONTACT_NAME) + BgContactNo(CONTACT_NO) + let d1 = moment(PO_DATE).format('DD/MM/YYYY'); + let d2 = new Date(PO_DATE); + BgPODate(d1) + BgPODate2(d2) + + if (isBgDataExists) { + isPresent = IsOrdPresent == '1' || IsOrdPresent == 1 ? 1 : 0; + } + + isAdded = true; + + Animated.timing(animatedChoice, { + toValue: isPresent, + duration: 400, + useNativeDriver: false, + }).start(); + IsOrderPresentRef.current = isPresent + setIsOrderPresent(isPresent); + } + if (i == txnres.rows.length - 1) { + defData['skulist'] = arr; + defData['skuData'] = arr2; + resolve(defData); + } + } + } + else { + let isPresent = 0; + if (isBgDataExists) { + isPresent = IsOrdPresent == '1' || IsOrdPresent == 1 ? 1 : 0; + } + Animated.timing(animatedChoice, { + toValue: isPresent, + duration: 400, + useNativeDriver: false, + }).start(); + IsOrderPresentRef.current = isPresent + setIsOrderPresent(isPresent); + + resolve(defData); + } + }, function (txnE, txnerr) { console.log(txnerr); setProcessing(false); resolve(defData); },); + }); + }).catch((err) => { + console.log('err:', err); + return defData; + }); + } + + async function focusToNext(cat, sku, type = '1') { + + let activeKey = ''; + let arr = Object.keys(inputRefs.current); + + activeKey = 'input' + type + '_' + cat.CategoryId + '_' + sku.ProductId; + + let activeIndex = arr.indexOf(activeKey); + if (activeIndex < arr.length - 1) { + let nextKey = arr[++activeIndex] + let nextRef = inputRefs.current[nextKey]; + console.log("nextKey", nextKey, nextRef, inputRefs.current[nextKey]) + nextRef.focus(); + } + else { + return + } + } + + async function submitData() { + let isValid = await validate(); + + if (isValid) { + Keyboard.dismiss(); + if (IsOrderPresentRef.current == 1 && (showMrpPtr !== 'NA'|| showMrpPtrRef.current!=='NA')) { + setModalVisible(true); // Show modal immediately + // Generate preview data + const preview = []; + brandData.forEach(cat => { + (cat.skulist || []).forEach(sku => { + const skuData = SKUStockData.find(ci => ci.CategoryId === cat.CategoryId && ci.ProductId === sku.ProductId) || { Stock: '' }; + if (skuData?.Stock != '' && parseInt(skuData?.Stock) > 0) { + preview.push({ CategoryName: cat.CategoryName, ProductName: sku.ProductName, Stock: skuData.Stock || '', ptr: sku?.ptr }); + } + }); + }); + setPreviewData(preview); // Update state with preview data + } else { + setShowAlert(true); + } + } + } + + function generateUniqueId(storeId) { + const now = new Date(); + const timestamp = moment(now).format('YYYYMMDD_HHmmss'); + return `${storeId}_${timestamp}`; + } + + async function saveData() { + const uniqueId = generateUniqueId(selectedStore?.StoreId); // Generate unique ID + BgUnsavedChanges(false); + setShowAlert(false); + setLoaderTitle('Saving Data...'); + setProcessing(true); + + try { + let ReasonId = reason?.value != null ? reason?.value : 0; + let Reason = reason?.label != null ? reason?.label : ''; + let PO_date1_MDY = moment(PODate2).format('MM/DD/YYYY'); + let allChilds = []; + let allData = {}; + if (IsOrderPresent == 1) { + for (let i = 0; i < SKUStockData.length; i++) { + let { CategoryId, ProductId, Stock } = SKUStockData[i]; + let catIndex = brandData.findIndex(a => a.CategoryId == CategoryId); + let cat = catIndex >= 0 ? brandData[catIndex] : {}; + let CategoryName = cat.CategoryName || ''; + let skulist = cat.skulist || []; + let skuItem_in = skulist.findIndex(b => b.ProductId == ProductId); + let skuItem = skuItem_in >= 0 ? skulist[skuItem_in] : {}; + let stockValue = Stock != null && Stock !== '' && Stock !== 'undefined' ? Stock : '0'; + + let obj = { + UserId: props.UserId, + CategoryId: CategoryId, + ProductId: ProductId, + OrderQty: stockValue + }; + + allChilds.push(obj); + + if (i === 0) { + allData = { + Unique_id: uniqueId, + UserId: props.UserId, + Visit_Date: d2, + StoreId: selectedStore?.StoreId, + IsPresent: 1, + Reason: '', + ReasonId: 0, + SystemPO: SystemPO, + StorePO: StorePO || '', + ContactName: ContactName || '', + ContactNo: ContactNo || '', + StockistId: StockistDis?.StockistId || '', + StockistName: StockistDis?.StockistName || '' + + }; + } + } + } else { + allData = { + Unique_id: uniqueId, + UserId: props.UserId, + Visit_Date: d2, + StoreId: selectedStore?.StoreId, + IsPresent: 0, + Reason: Reason, + ReasonId: ReasonId, + SystemPO: '', + StorePO: '', + ContactName: '', + ContactNo: '', + StockistId: StockistDis?.StockistId || '', + StockistName: StockistDis?.StockistName || '', + OrderSKUList: [] + }; + } + + allData.OrderSKUList = allChilds; + + let postData = { + MID: 0, + Keys: "OfflineOrder", + JsonData: JSON.stringify(allData), + UserId: props.UserId + }; + + //console.log("Uploading order postData:", postData); + + const res = await fetch('https://ap1.parinaam.in/Webservice/GenericService.svc/UploadJson', { + method: 'POST', + headers: { + Accept: 'application/json', + 'Content-Type': 'application/json' + }, + body: JSON.stringify(postData) + }); + + const text = await res.text(); + //console.log('Raw response:', text); + + let json; + try { + json = JSON.parse(text); + } catch (err) { + console.error('Could not parse JSON:', err); + setProcessing(false); + notify('Upload failed'); + return; + } + + if (json?.UploadJsonResult === "Success") { + console.log("Data Uploaded suceesfully") + notify('Offline Order uploaded successfully'); + // notify('Offline Order uploaded'); + // ✅ Now insert locally only if upload succeeded + db.transaction(async function (txn) { + const deleteQuery = `DELETE FROM ${AppTables.OFFLINE_ORDER} WHERE STORE_ID='${selectedStore?.StoreId}' and VISIT_DATE='${d2}'`; + txn.executeSql(deleteQuery, [], () => { + console.log("Old order data deleted"); + }); + + let stock_values = ''; + if (IsOrderPresent == 1) { + for (let i = 0; i < SKUStockData.length; i++) { + let { CategoryId, ProductId, Stock } = SKUStockData[i]; + let catIndex = brandData.findIndex(a => a.CategoryId == CategoryId); + let cat = catIndex >= 0 ? brandData[catIndex] : {}; + let CategoryName = cat.CategoryName || ''; + let skulist = cat.skulist || []; + let skuItem = skulist.find(b => b.ProductId == ProductId) || {}; + + let stockValue = Stock != null && Stock !== '' && Stock !== 'undefined' ? Stock : '0'; + + stock_values += stock_values ? ',' : ''; + stock_values += `('${selectedStore?.StoreId}','${d2}','${CategoryName}','${CategoryId}','${skuItem.ProductName}','${ProductId}','','1','${stockValue}','${SystemPO}','${StorePO}','${PO_date1_MDY}','${ContactName}','${ContactNo}','${d2}','','0','${StockistDis?.StockistId}','${StockistDis?.StockistName}')`; + } + } else { + stock_values += `('${selectedStore?.StoreId}','${d2}','','','','','','0','','','','','','','${d2}','${ReasonId}','${Reason}','${StockistDis?.StockistId}','${StockistDis?.StockistName}')`; + } + + let insertQuery = `INSERT INTO ${AppTables.OFFLINE_ORDER} (STORE_ID,VISIT_DATE,CATEGORY,CATEGORY_ID,PRODUCT,PRODUCT_ID,MSL,IS_PRESENT,STOCK,SYSTEM_PO,STORE_PO,PO_DATE,CONTACT_NAME,CONTACT_NO,ADDED_DATE,REASON_ID,REASON,STOCKIST_ID,STOCKIST_NAME) VALUES ${stock_values}`; + + txn.executeSql(insertQuery, [], () => { + console.log("Order saved locally after upload"); + clear_item('storeData'); + // notify('Offline Order uploaded and saved locally'); + setProcessing(false); + props.navigation.goBack(); + }, (txnE, err) => { + console.log('Insert error:', err); + setProcessing(false); + notify('Upload succeeded, but local save failed'); + }); + }); + } else { + notify('Upload failed', json?.UploadJsonResult); + setProcessing(false); + } + } catch (err) { + console.log('Final catch error:', err); + setProcessing(false); + notify('An unexpected error occurred'); + } + } + + async function validate() { + let isValid = true; + let ShowStorePOIndex = KPIFields.findIndex(i => i.KPIFieldName == 'ShowStorePO') + let ShowStorePOKPIObj = ShowStorePOIndex >= 0 ? KPIFields[ShowStorePOIndex] : {}; + let ShowStorePOEnable = ShowStorePOIndex >= 0 ? ShowStorePOKPIObj['KPIFieldEnable'] : true; + let ShowStorePODis_Name = ShowStorePOIndex >= 0 ? ShowStorePOKPIObj['KPIFieldDisplayName'] : 'Store PO'; + + let ShowPODateIndex = KPIFields.findIndex(i => i.KPIFieldName == 'ShowPODate') + let ShowPODateKPIObj = ShowPODateIndex >= 0 ? KPIFields[ShowPODateIndex] : {}; + let ShowPODateEnable = ShowPODateIndex >= 0 ? ShowPODateKPIObj['KPIFieldEnable'] : true; + let ShowPODateDis_Name = ShowPODateIndex >= 0 ? ShowPODateKPIObj['KPIFieldDisplayName'] : 'PO Date'; + let PODateAutoFillIndex = KPIFields.findIndex(i => i.KPIFieldName == 'PODateAutoFill') + let PODateAutoFillKPIObj = PODateAutoFillIndex >= 0 ? KPIFields[PODateAutoFillIndex] : {}; + let PODateAutoFillEnable = PODateAutoFillIndex >= 0 ? PODateAutoFillKPIObj['KPIFieldEnable'] : true; + let ShowCNameIndex = KPIFields.findIndex(i => i.KPIFieldName == 'ShowContactName') + let ShowCNameKPIObj = ShowCNameIndex >= 0 ? KPIFields[ShowCNameIndex] : {}; + let ShowCNameEnable = ShowCNameIndex >= 0 ? ShowCNameKPIObj['KPIFieldEnable'] : true; + let ShowCNameMand = ShowCNameIndex >= 0 && ShowCNameKPIObj['KPIMandatory'] != null ? (ShowCNameKPIObj['KPIMandatory'] == 1 || ShowCNameKPIObj['KPIMandatory'] == '1' ? true : false) : true; + let ShowCNameDis_Name = ShowCNameIndex >= 0 ? ShowCNameKPIObj['KPIFieldDisplayName'] : 'Contact Name'; + + let ShowCNoIndex = KPIFields.findIndex(i => i.KPIFieldName == 'ShowContactNumber') + let ShowCNoKPIObj = ShowCNoIndex >= 0 ? KPIFields[ShowCNoIndex] : {}; + let ShowCNoEnable = ShowCNoIndex >= 0 ? ShowCNoKPIObj['KPIFieldEnable'] : true; + let ShowCNoMand = ShowCNoIndex >= 0 && ShowCNoKPIObj['KPIMandatory'] != null ? (ShowCNoKPIObj['KPIMandatory'] == 1 || ShowCNoKPIObj['KPIMandatory'] == '1' ? true : false) : true; + let ShowCNoDis_Name = ShowCNoIndex >= 0 ? ShowCNoKPIObj['KPIFieldDisplayName'] : 'Contact Number'; + + let ShowReasonIndex = KPIFields.findIndex(i => i.KPIFieldName == 'IsReasonEnable') + let ShowReasonKPIObj = ShowReasonIndex >= 0 ? KPIFields[ShowReasonIndex] : {}; + let ShowReasonEnable = ShowReasonIndex >= 0 ? ShowReasonKPIObj['KPIFieldEnable'] : true; + + if (IsOrderPresent == true) { + if (ShowPODateEnable == true && PODateAutoFillEnable == false && (PODate == '' || PODate == null)) { + notify('Please enter ' + ShowPODateDis_Name + '!', 'SHORT'); + isValid = false; + } + else if (ShowCNameEnable == true && ShowCNameMand == true && (ContactName == '' || ContactName == null)) { + notify('Please enter ' + ShowCNameDis_Name + '!', 'SHORT'); + isValid = false; + } + else if (ShowCNoEnable == true && ShowCNoMand == true && (ContactNo == '' || ContactNo == null)) { + notify('Please enter ' + ShowCNoDis_Name + '!', 'SHORT'); + isValid = false; + } + else if (ShowCNoEnable == true && ShowCNoMand == true && (ContactNo.length != 10)) { + notify('Please enter valid ' + ShowCNoDis_Name + '!', 'SHORT'); + isValid = false; + } + else if ((StockistDis?.StockistId == '' || StockistDis?.StockistId == null)) { + notify('Please select ' + 'Distributor name' + '!', 'SHORT'); + isValid = false; + } + else { + isValid = false + for (const item of brandData) { + const skulist = item.skulist || []; + + for (const skuItem of skulist) { + const skuData = SKUStockData.find( + (ci) => ci.CategoryId == item.CategoryId && ci.ProductId == skuItem.ProductId + ) || {}; + + const stockQty = parseInt(skuData?.Stock ?? 0, 10); + console.log("skuData?.Stock", skuData?.Stock) + if (stockQty > 0) { + isValid = true; // At least one SKU has quantity > 0 + break; // No need to check further + } + } + + if (isValid) break; // Stop outer loop if already valid + } + + if (!isValid) { + notify("Please enter Order Qty greater than zero for at least one SKU", "SHORT"); + } + } + } else if (ShowReasonEnable == true && (reason?.value == null || reason?.value == '' || reason?.value == 0)) { + notify('Please select reason', 'SHORT'); + isValid = false; + } + console.log('isValid:', isValid); + return isValid; + } + + function onConfirmRemoveAll() { + // Remove all data + if (animatedChoice != null) { + Animated.timing(animatedChoice, { + toValue: 0, + duration: 400, + useNativeDriver: false, + }).start(); + } + IsOrderPresentRef.current = 0 + setIsOrderPresent(0); + BgUnsavedChanges(true) + BgStorePO('') + BgContactName('') + BgContactNo(''); + setSKUStockData([]); + BgshowRAllC_M(false) + } + + function onChoiceSelect(val, key) { + if (val == 0 && SKUStockData.length > 0) { + BgshowRAllC_M(true) + return; + } + var val1 = val == 1 ? 1 : 0; + if (animatedChoice != null) { + Animated.timing(animatedChoice, { + toValue: val1, + duration: 400, + useNativeDriver: false, + }).start(); + } + IsOrderPresentRef.current = val + setIsOrderPresent(val); + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + if (val1 == 1) { + setReason({ "label": '', "value": 0 }) + } + if (val == 0) { + setSKUStockData([]); + } + } + + function onStockValChange(item, skuItem, val, key, type = '') { + if (val != '') { + let isValid = validateNumber(val, type); + if (!isValid) { + return; + } + } + + let allSKUData = SKUStockData; + let defData = { 'CategoryId': item.CategoryId, 'ProductId': skuItem.ProductId }; + const skud_index = allSKUData.findIndex(i => i.CategoryId == item.CategoryId && i.ProductId == skuItem.ProductId); + const skud = skud_index >= 0 ? (allSKUData[skud_index] || defData) : defData; + skud[key] = val; + + skud_index >= 0 ? allSKUData[skud_index] = skud : allSKUData.push(skud); + setSKUStockData(allSKUData); + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + + function onSaveCancel() { + setShowAlert(false); + } + + function renderDatePicker() { + let today = new Date(); + console.log('renderDatePicker:', PODate2, PODate); + let d1 = PODate2 != null && PODate2 != '' ? PODate2 : new Date(); + console.log('d1 date:', d1); + return ( + { + console.log('onchange date', selectedDate); + if (selectedDate != null) { + console.log('change date', selectedDate); + let d1 = moment(selectedDate).format('DD/MM/YYYY'); + + setShowDatePicker(false); + // setPODate2(selectedDate); + // setPODate(d1); + BgPODate2(selectedDate) + BgPODate(d1) + } + }} + /> + ); + } + + function _render_PresentQ() { + let xpos = 0; + if (animatedChoice != null) { + xpos = animatedChoice.interpolate({ + inputRange: [0, 1], + outputRange: [0, -75], + }); + } + + let ShowSystemPOIndex = KPIFields.findIndex(i => i.KPIFieldName == 'ShowSystemPO') + let ShowSystemPOKPIObj = ShowSystemPOIndex >= 0 ? KPIFields[ShowSystemPOIndex] : {}; + let ShowSystemPOEnable = ShowSystemPOIndex >= 0 ? ShowSystemPOKPIObj['KPIFieldEnable'] : true; + let ShowSystemPODis_Name = ShowSystemPOIndex >= 0 ? ShowSystemPOKPIObj['KPIFieldDisplayName'] : 'System PO'; + + let ShowStorePOIndex = KPIFields.findIndex(i => i.KPIFieldName == 'ShowStorePO') + let ShowStorePOKPIObj = ShowStorePOIndex >= 0 ? KPIFields[ShowStorePOIndex] : {}; + let ShowStorePOEnable = ShowStorePOIndex >= 0 ? ShowStorePOKPIObj['KPIFieldEnable'] : true; + let ShowStorePODis_Name = ShowStorePOIndex >= 0 ? ShowStorePOKPIObj['KPIFieldDisplayName'] : 'Store PO'; + + let ShowPODateIndex = KPIFields.findIndex(i => i.KPIFieldName == 'ShowPODate') + let ShowPODateKPIObj = ShowPODateIndex >= 0 ? KPIFields[ShowPODateIndex] : {}; + let ShowPODateEnable = ShowPODateIndex >= 0 ? ShowPODateKPIObj['KPIFieldEnable'] : true; + let ShowPODateDis_Name = ShowPODateIndex >= 0 ? ShowPODateKPIObj['KPIFieldDisplayName'] : 'PO Date'; + + let PODateAutoFillIndex = KPIFields.findIndex(i => i.KPIFieldName == 'PODateAutoFill') + let PODateAutoFillKPIObj = PODateAutoFillIndex >= 0 ? KPIFields[PODateAutoFillIndex] : {}; + let PODateAutoFillEnable = false//PODateAutoFillIndex>=0?PODateAutoFillKPIObj['KPIFieldEnable']:true; + + let ShowCNameIndex = KPIFields.findIndex(i => i.KPIFieldName == 'ShowContactName') + let ShowCNameKPIObj = ShowCNameIndex >= 0 ? KPIFields[ShowCNameIndex] : {}; + let ShowCNameEnable = ShowCNameIndex >= 0 ? ShowCNameKPIObj['KPIFieldEnable'] : true; + let ShowCNameDis_Name = ShowCNameIndex >= 0 ? ShowCNameKPIObj['KPIFieldDisplayName'] : 'Contact Name'; + + let ShowCNoIndex = KPIFields.findIndex(i => i.KPIFieldName == 'ShowContactNumber') + let ShowCNoKPIObj = ShowCNoIndex >= 0 ? KPIFields[ShowCNoIndex] : {}; + let ShowCNoEnable = ShowCNoIndex >= 0 ? ShowCNoKPIObj['KPIFieldEnable'] : true; + let ShowCNoDis_Name = ShowCNoIndex >= 0 ? ShowCNoKPIObj['KPIFieldDisplayName'] : 'Contact Number'; + + let ShowReasonIndex = KPIFields.findIndex(i => i.KPIFieldName == 'IsReasonEnable') + let ShowReasonKPIObj = ShowReasonIndex >= 0 ? KPIFields[ShowReasonIndex] : {}; + let ShowReasonEnable = ShowReasonIndex >= 0 ? ShowReasonKPIObj['KPIFieldEnable'] : true; + + return ( + + { + selectedStore != null && ( + + {'Is Present'} + + + + { onChoiceSelect(1, 'isPresent') }}> + Yes + + { onChoiceSelect(0, 'isPresent') }}> + No + + + + + ) + } + + {(IsOrderPresent != '1' && ShowReasonEnable == true && selectedStore != null) && + + {ST.SelectReason} + {} + + } + + {IsOrderPresent != '0' && (showMrpPtr !== 'NA'|| showMrpPtrRef.current!=='NA') && ( + + + Total values : Rs {calculateTotalValue()} + + + Total Qty : {calculateTotalStockQty()} + + + )} + + {(IsOrderPresent == true) && + + + {(ShowSystemPOEnable == true) && + + + {ShowSystemPODis_Name} + {SystemPO} + + + } + {(ShowStorePOEnable == true) && + + + {ShowStorePODis_Name} + { + //setStorePO(val) + BgStorePO(val) + }} + /> + + + } + {(ShowPODateEnable == true) && + + + {ShowPODateDis_Name} + {PODateAutoFillEnable == true && + {PODate}} + {PODateAutoFillEnable != true && + + {PODate} + { setShowDatePicker(true); }}> + + + } + {(ShowDatePicker == true && PODateAutoFillEnable != true) && + renderDatePicker() + } + + + } + {(ShowCNameEnable == true) && + + + {ShowCNameDis_Name} + { //setContactName(val) + BgContactName(val) + }} + /> + + + } + {(ShowCNoEnable == true) && + + + {ShowCNoDis_Name} + { + // setContactNo(val) + BgContactNo(val) + }} + /> + + + } + + {(ShowCNoEnable == true) && + + + {"Distributor List"} + + + + } + + {console.log("checkbdata-->", brandData.length)} + {rerenderdata == rerenderdata && brandData.length > 0 && ( + `category-${item.CategoryId || index}`} // Unique key for each category + renderItem={({ item: cat, index: catIndex }) => ( + + {/* Category Header */} + + + + {cat.CategoryName} + + + + + {/* Products List */} + + {( + `sku-${item.ProductId || index}`} // Unique key for each SKU + renderItem={({ item: skus, index: skuIndex }) => { + const thisCatSkuDataIndex = SKUStockData.findIndex((i) => i.CategoryId === cat.CategoryId && i.ProductId === skus.ProductId); + const thisCatSkuData = + thisCatSkuDataIndex >= 0 + ? SKUStockData[thisCatSkuDataIndex] || {} + : {}; + const stock = + thisCatSkuData.Stock != null ? thisCatSkuData.Stock : ''; + + return ( + + + + + {skus.ProductName} + + {(showMrpPtr !== 'NA'|| showMrpPtrRef.current!=='NA') && ( + + {showMrpPtr + " : " + skus?.ptr} + + )} + + + + + + Order Qty + + { + inputRefs.current[ + `input1_${cat.CategoryId}_${skus.ProductId}` + ] = reff; + }} + style={[ + customStyle.openStk_prd_inputStyle, + customStyle.openStk_prd_flex_inputStyle, + ]} + placeholder="" + autoComplete="off" + placeholderTextColor={PageTheme.$placeholder_color} + value={stock + '' || ''} + keyboardType="number-pad" + returnKeyType={Platform.OS === 'ios' ? 'done' : 'next'} + blurOnSubmit={false} + onSubmitEditing={() => { + focusToNext(cat, skus, '1'); + }} + onChangeText={(val) => { + onStockValChange(cat, skus, val, 'Stock', 'numeric'); + }} + /> + + + {(showMrpPtr !== 'NA'|| showMrpPtrRef.current!=='NA') && ( + + Order value: + + {Number.isInteger(skus?.ptr * stock) + ? skus?.ptr * stock + : (skus?.ptr * stock).toFixed(2)} + + + )} + + + + ); + }} + /> + )} + + + )} + /> + )} + + + + } + + + ); + } + + + function FilterStores(searchedQry) { + const query = searchedQry.toLowerCase(); + console.log('searchedQry:', query); + + let sql = 'SELECT * FROM StoreList_OfflineOrder'; + let params = []; + + if (query && query.trim() !== '') { + sql += ' WHERE LOWER(StoreName) LIKE ? OR StoreId LIKE ?'; + params = [`%${query}%`, `%${query}%`]; + } + + db.transaction(tx => { + tx.executeSql( + sql, + params, + (_, results) => { + const rows = results.rows; + let arr = []; + for (let i = 0; i < rows.length; i++) { + arr.push(rows.item(i)); + } + setStoreList(arr); + setSelectedStore(null); + setrerenderdata(prev => !prev); + }, + (_, error) => { + console.log('Failed to filter stores:', error); + return false; + } + ); + }); + } + + + const handleUpdateStock = (item, newStock) => { + let updatedData = previewData.map(data => + data.ProductName === item.ProductName ? { ...data, Stock: newStock } : data + ); + setPreviewData(updatedData); + + let allSKUData = [...SKUStockData]; + let defData = { 'CategoryId': item.CategoryId, 'ProductId': item.ProductId }; + const skud_index = allSKUData.findIndex(i => i.CategoryId === item.CategoryId && i.ProductId === item.ProductId); + const skud = skud_index >= 0 ? (allSKUData[skud_index] || defData) : defData; + skud['Stock'] = newStock; + + skud_index >= 0 ? allSKUData[skud_index] = skud : allSKUData.push(skud); + setSKUStockData(allSKUData); + BgUnsavedChanges(true); + }; + + const renderModalContent = () => { + // ✅ Calculate Totals + const totalStockQty = previewData.reduce((sum, item) => sum + parseFloat(item?.Stock || 0), 0); + const totalAmount = previewData.reduce( + (sum, item) => sum + (parseFloat(item?.Stock || 0) * parseFloat(item?.ptr || 0)), + 0 + ); + + return ( + + Preview Order Data + + Qty + Value + + + `preview-${index}`} + renderItem={({ item }) => ( + + {console.log("data_preview", item)} + {item.ProductName} + + + handleUpdateStock(item, val)} + /> + + {(parseFloat(item?.Stock || 0) * parseFloat(item?.ptr || 0)).toFixed(2)} + + + + )} + /> + + {/* ✅ Totals Section */} + + Total Qty: {totalStockQty} + Total Amount: {totalAmount.toFixed(2)} + + + + + { setModalVisible(false); setShowAlert(true); }} + > + OK + + + + ); + }; + + return ( + + {processing && } + + + {ConfirmSaveAlert(props, showAlert, onSaveCancel, saveData)} + {ConfirmSaveAlert(props, showRAllC_M, () => { + {/* setShowRAllC_M(false) */ } + BgshowRAllC_M(false) + }, onConfirmRemoveAll, 'Do you really want to remove all Order Data?')} + + + + { setSearchedItem(val); FilterStores(val) }} + /> + { FilterStores(searchedItem) }}> + + + + + + item.StoreId.toString()} + renderItem={({ item }) => ( + { setSelectedStore(item); }}> + + + {item.StoreName} (ID: {item.StoreId}) + + + {item.Address}, {item.CityName} + + + + )} + ListEmptyComponent={() => null} // ✅ nothing is rendered if empty + /> + + {_render_PresentQ()} + + { + selectedStore != null && selectedStore != '' && ( + + { submitData() }} /> + + ) + } + + setModalVisible(false)} + animationType="slide" + > + + + {renderModalContent()} + + + + + + + + ); +} + +const styles = StyleSheet.create({ + + storeItemContainer: { + padding: 10, + borderBottomWidth: 1, + borderBottomColor: '#ccc', + }, + storeItemName: { + color: '#fff', + fontWeight: 'bold', + }, + storeItemAddress: { + color: '#eee', + fontSize: 12, + }, + modalBackground: { + flex: 1, + backgroundColor: 'rgba(0, 0, 0, 0.5)', + justifyContent: 'center', + alignItems: 'center', + }, + modalContainer: { + paddingVertical: 16, + paddingHorizontal: 4, // ✅ Reduce padding from left/right + backgroundColor: '#fff', + borderRadius: 10, + maxHeight: '100%', + width: '100%', + }, + modalTitle: { + fontSize: 18, + fontWeight: 'bold', + marginBottom: 10, + textAlign: 'center', + marginLeft: 20, + marginRight: 20 + }, + modalItem: { + flexDirection: 'row', + justifyContent: 'space-between', + paddingVertical: 10, + borderBottomWidth: 1, + borderBottomColor: '#ccc', + }, + modalProduct: { + fontSize: 14, + }, + modalButtons: { + flexDirection: 'row', + justifyContent: 'space-around', + marginTop: 20, + }, + modalButton: { + padding: 15, + backgroundColor: '#0066cc', + borderRadius: 50, + width: '50%' + }, + modalButtonText: { + color: '#fff', + fontWeight: 'bold', + textAlign: 'center' + }, + + modalItemRow: { + flexDirection: 'column', + backgroundColor: '#F9F9F9', + borderRadius: 10, + marginBottom: 10, + padding: 8, + borderColor: '#ccc', + marginHorizontal: 10, + }, + + qtyRow: { + flexDirection: 'row', + alignItems: 'center', + justifyContent: 'space-between', + + }, + + modalInput: { + padding: 8, + width: 60, + alignContent: 'center', + textAlign: 'center', + color: 'black' + }, + calculatedValue: { + fontWeight: 'bold', + color: '#333', + minWidth: 60, + }, + totalsContainer: { + marginTop: 10, + paddingVertical: 8, + borderTopWidth: 1, + borderColor: '#ccc', + flexDirection: 'row', + justifyContent: 'space-between', + paddingHorizontal: 5, + }, + + totalText: { + fontWeight: 'bold', + fontSize: 16, + color: '#000', + }, + + +}); + + +export default connect(mapStateToProps, mapDispatchToProps)(Order); + + + diff --git a/PerformicsSrc/src/screens/One_QAD.js b/PerformicsSrc/src/screens/One_QAD.js new file mode 100644 index 0000000..dea4abe --- /dev/null +++ b/PerformicsSrc/src/screens/One_QAD.js @@ -0,0 +1,455 @@ +import React,{useState,useEffect,useRef} from 'react'; +import Container from '../components/container'; +import { useRoute } from '@react-navigation/native'; +import CustomButton from '../components/customButton'; +import { globalStyles,customStyles,GetPageTheme,customeButtons } from "../styles/Global"; +import {StatusBar,Image,TextInput,View,Text,ScrollView,TouchableOpacity,KeyboardAvoidingView,Animated, ImageBackground, FlatList} from 'react-native'; +import { ReactReduxContext,connect,useSelector, useDispatch } from 'react-redux'; +import { mapStateToProps,mapDispatchToProps } from '../reducers/contextProvider'; +import {notify} from '../components/notify'; +import {get_item,set_item,clear_item} from '../components/localStorage'; +import {version,sloganline,appname,copyrightText,baseurl} from '../constants/constants'; +import {_checkLocationPermission} from '../components/geolocation'; +import OtpInputs from 'react-native-otp-inputs'; +import SplashScreen from 'react-native-splash-screen'; +import CustomLoader from '../components/CustomLoader'; +import {getDownloadJson, UploadData2,UploadData} from '../controller/functions'; +import moment from 'moment'; +import { Ionicons ,Fontisto, AntDesign} from '../components/icons'; +import LinearGradient from 'react-native-linear-gradient'; + +import Graphic1 from '../assets/performics/oqad_graphic.svg'; +import { getMethodName, METHODS } from '../constants/methodNames'; + +function One_QAD(props) { + const route = useRoute(); + const ST=props.StaticText || {}; + // get all theme styles acc to current theme set + const PageTheme=GetPageTheme(props.DarkMode,route.name); + const customStyle=customStyles(props.DarkMode,route.name); + const customeButton=customeButtons(props.DarkMode,route.name); + const todayDate=moment(new Date()).format('DD/MM/YYYY'); + + const AnswerTimeOut=props.OQAD_TimeOut; + var globalTimer=AnswerTimeOut; + const timerRef = useRef({}); + const timerAnimated = useRef(new Animated.Value(0)).current; + const [answers, setAnswers] = useState({}); + const [rerenderdata, setrerenderdata]= useState(0); + const [processing, setProcessing] = useState(false); + const [currentQtn, setCurrentQtn] = useState(1); + const [totalQtn, setTotalQtn] = useState(0); + const [answerTimer, setAnswerTimer] = useState({"1":globalTimer}); + const [qad, setQad] = useState([]); + + + useEffect(() => { + SplashScreen.hide(); + console.log("propssss",props) + get_OQAD(props); + }, []); + + useEffect(() => { + console.log('currentQtn chnge'); + let cqtn=currentQtn; + if(currentQtn>1){ + let item=qad.length>0? qad[(cqtn-1)]:null; + if(item){ + let qid=item.QuestionId; + let qtnKey=qid+'_question'; + let show_qtnKey=qid+'_question_show'; + let AllAns=answers; + console.log(answerTimer); + + if(AllAns[qtnKey]==null && AllAns[show_qtnKey]==null){ + globalTimer=AnswerTimeOut; + let atimerarr=answerTimer; + atimerarr[cqtn]=AnswerTimeOut; + setAnswerTimer(atimerarr); + timerAnimated.setValue(0); + setTimer(); //restart timer + } + } + } + }, [currentQtn]); + + + async function get_OQAD(){ + setProcessing(true); + let token = await get_item('loginToken'); + let loginInfo = await get_item('loginInfo'); + const loginDetails = JSON.parse(loginInfo); + var data = {Downloadtype: 'OQAD',username: loginDetails.UserId,empid: '',token: token,}; + + const url=(props.baseurl || baseurl)+getMethodName(METHODS.DOWNLOADJSON_METHOD); + console.log("12231312",url + "--------"+ props.baseurl ); + await getDownloadJson(url, data) + .then(async(res) => { + setProcessing(false); + console.log('res:',res); + if (res.OQAD!=null) { + let QAD_arr=res.OQAD|| []; + let allQADS=[]; + + var qad_data={}; + var qids=[]; + for(var i=0;i0) allQADS.push(qad_data); + qids.push(data.QuestionId) + qad_data={}; + qad_data['QuestionId']=data.QuestionId; + qad_data['Question']=data.Question; + qad_data['Options']=[{'AnswerId':data.AnswerId,'Answer':data.Answer}]; + if(data.RightAnswer==true) qad_data['Answer']=data.AnswerId; + + } + else{ + let ops=qad_data['Options'] || []; + ops.push({'AnswerId':data.AnswerId,'Answer':data.Answer}); + if(data.RightAnswer==true) qad_data['Answer']=data.AnswerId; + + } + + if(i==QAD_arr.length-1){ + allQADS.push(qad_data); + setQad(allQADS); + setTotalQtn(allQADS.length); + setTimer(false,false,allQADS); + } + } + + } + else if(typeof(res)=='object' && res.length>0 && res[0].Result!=null && res[0].Result.includes('No Data')){ + // OQAD Not Found + goToHome(); + } + }) + .catch(err => { + console.log('onPage Team error', err); + }); + + } + + + async function submitAnswer(){ + if(validate()){ + setProcessing(true); + let token = await get_item('loginToken'); + let loginInfo = await get_item('loginInfo'); + const loginDetails = JSON.parse(loginInfo); + const today=moment(new Date()).format('MM/DD/YYYY'); + + var user_answers=[]; + for (const qtn_key in answers){ + const item=answers[qtn_key]; + if(qtn_key.includes('_question_show')){ + console.log('showed question'); + let qid=qtn_key.replace('_question_show',''); + let answerid=0; + var ans_obj={"ANSWER_ID":answerid,"QUESTION_ID":qid,"VISIT_DATE":today,"USER_NAME":loginDetails.UserId}; + } + else if(qtn_key.includes('_question')){ + console.log('qtn replied') + let qid=item.qid; + let answerid=item.selId; + var ans_obj={"ANSWER_ID":answerid,"QUESTION_ID":qid,"VISIT_DATE":today,"USER_NAME":loginDetails.UserId}; + } + user_answers.push(ans_obj); + } + let post_data={ + "MID":"0", + "Keys": "TODAY_ANSWER", + "JsonData":JSON.stringify(user_answers), + "UserId": loginDetails.UserId + } + + const url=props.baseurl+getMethodName(METHODS.UPLOADJSON_METHOD); + console.log('OQAD upload ',url,post_data); + + await UploadData2(url, post_data) + .then(async(res) => { + setProcessing(false); + console.log(res); + if(res.success==false){ + return + } + let currenttime=moment(new Date()).format('DD/MM/YYYY HH:mm:ss'); + let lods={}; + lods[todayDate]=currenttime; + await set_item('loginOfDays',JSON.stringify(lods)); + goToHome(); + + }) + .catch(err => { + console.log('onPage Team error', err); + }); + } + } + + async function goToHome(){ + let params=props.route.params? props.route.params:{}; + let isTodayLogin=params.TodayLogin!=null?params.TodayLogin:false; + props.setLoginExists(false); + props.navigation.reset({index: 0,routes: [{name: 'NoticeBoard',params:{'TodayLogin':isTodayLogin}}],}); + } + + async function goToNext(){ + if(validate()){ + let cqtn=currentQtn; + cqtn=cqtn1?cqtn-1:cqtn; + setCurrentQtn(cqtn); + } + + function setTimer(reset,stop,allQADS=[]){ + let arr=timerRef.current; + if(stop){ + console.log('clearTimeout',arr[currentQtn],currentQtn,arr); + if(arr[currentQtn]){clearTimeout(arr[currentQtn]);} + } + else{ + reset?(globalTimer=AnswerTimeOut):--globalTimer; + if(globalTimer>=0){ + let atimerarr=answerTimer; + atimerarr[currentQtn]=globalTimer; + + if(timerAnimated){ + Animated.timing(timerAnimated, { + toValue: (AnswerTimeOut-globalTimer), + duration:1100, + useNativeDriver:false, + }).start(); + } + + console.log('atimerarr',currentQtn,globalTimer,atimerarr); + setAnswerTimer(atimerarr); + setrerenderdata(globalTimer); + arr[currentQtn]=setTimeout(()=>{ setTimer(false,false,allQADS);},1000); + } + else{showAnswer(allQADS);} + } + + } + + async function selectAnswer(item,option){ + let qid=item.QuestionId; + let qtnKey=qid+'_question'; + let AllAns=answers; + if(AllAns[qtnKey]==null){ + AllAns[qtnKey]={'selId':option.AnswerId,'selText':option.Answer,'qid':qid}; + } + setTimer(false,true); // stop timer + setAnswers(AllAns); + console.log('selectAnswer:',AllAns); + setrerenderdata(!rerenderdata); + + } + + async function showAnswer(allQADS=[]){ + let item=allQADS.length>0 && currentQtn>=1?allQADS[(currentQtn-1)]:null; + + if(item!=null){ + let qid=item?item.QuestionId:''; + let show_qtnKey=qid+'_question_show'; + let AllAns=answers; + if(AllAns[show_qtnKey]==null){ + AllAns[show_qtnKey]=true; + } + setAnswers(AllAns); + console.log('showAnswer:',AllAns); + setrerenderdata(!rerenderdata); + } + } + + + const validate=()=>{ + let item=qad.length>0? qad[(currentQtn-1)]:null; + if(item){ + let qid=item.QuestionId; + let qtnKey=qid+'_question'; + let show_qtnKey=qid+'_question_show'; + let AllAns=answers; + if(AllAns[qtnKey]==null && AllAns[show_qtnKey]==null){ + notify(ST.Pleaseselectyouranswer,'SHORT'); + return false; + } + } + return true; + } + + const validate2=()=>{ + + if(qad.length>0){ + for(var i=0;i + + {processing && } + + + {ST.HeyThere} + {ST.OneQuestionADay} + + + + + {/* */} + + + + + 0?(((currentQtn/totalQtn)*100)+'%'):'100%')}]}> + + {currentQtn+'/'+totalQtn} + + + { qad.length>0 && + { + let Options=item.Options; + let qid=item.QuestionId; + let qtnKey=qid+'_question'; + let show_qtnKey=qid+'_question_show'; + let AllAns=answers; + let showAnswer=AllAns[show_qtnKey]!=null?AllAns[show_qtnKey]:false; + + let selAns=AllAns[qtnKey]!=null?AllAns[qtnKey]['selId']:''; + console.log('AllAns',showAnswer); + + let prev_time=answerTimer[currentQtn] + {item.Question} + + { Options.length>0 && + Options.map((option,op_index)=>{ + let show_diff_bg=(item.Answer && ((selAns!='' && selAns!=null) || showAnswer) + && (item.Answer==option.AnswerId || ((selAns!='' && selAns!=null) && selAns==option.AnswerId))) ?true:false; + + let ansbgColor=((selAns!='' && selAns!=null) && selAns==option.AnswerId && (item.Answer!=selAns))?'red':'green'; + + let opbg=show_diff_bg?{backgroundColor:ansbgColor}:{}; + let opcolorText=show_diff_bg?{color:'#fff'}:{}; + let isD=((selAns!='' && selAns!=null) || showAnswer); + let isdisabled=(((selAns!='' && selAns!=null) || showAnswer) && item.Answer!=null && item.Answer!=option.AnswerId); + let disablebg=(isdisabled?{backgroundColor:PageTheme.$text_color_500}:{}); + let disabletext=(isdisabled?{color:PageTheme.$accent_color}:{}); + + return( + {selectAnswer(item,option)}}> + {option.Answer} + + ) + }) + } + + + + {answerTimer[currentQtn]+'s'} + + + {/* */} + + + + + {(selAns==item.Answer && (selAns!=null && selAns!='')) && + {ST.WellDoneGoodJob} + } + {(selAns!=item.Answer && ((selAns!=null && selAns!='') || showAnswer)) && + {ST.OopsBetterlucknexttime} + } + { index==( qad.length-1) && + + { (index!=0) && + {goToPrev();}} style={[customStyle.qad_qtnBtn,customStyle.qad_btnBack]}> + {ST.Back} + + } + {submitAnswer();}} style={[customStyle.qad_btnSubmitCon]}> + + {ST.Submit} + + + + } + { index<( qad.length-1) && + + {(index!=0) && + {goToPrev();}} style={[customStyle.qad_qtnBtn,customStyle.qad_btnBack]}> + {ST.Back} + + } + {goToNext();}} style={[customStyle.qad_qtnBtn,customStyle.qad_btnNext]}> + {ST.Next} + + + } + + ) + }} + + /> + } + + + + {/* */} + + {version} + {copyrightText} + + + + + ); +} + +export default connect(mapStateToProps, mapDispatchToProps)(One_QAD) \ No newline at end of file diff --git a/PerformicsSrc/src/screens/OpeningStock.js b/PerformicsSrc/src/screens/OpeningStock.js new file mode 100644 index 0000000..ba00521 --- /dev/null +++ b/PerformicsSrc/src/screens/OpeningStock.js @@ -0,0 +1,1805 @@ +import React, { useState, useEffect, useRef } from 'react'; +import Container from '../components/container'; +import { useRoute } from '@react-navigation/native'; +import { customStyles, GetPageTheme } from "../styles/Global"; +import { Image, TextInput, View, Text, TouchableOpacity, Platform, FlatList, Alert, KeyboardAvoidingView, BackHandler, AppState, Keyboard } from 'react-native'; +import { connect } from 'react-redux'; +import { mapStateToProps, mapDispatchToProps } from '../reducers/contextProvider'; +import { notify } from '../components/notify'; +import moment from 'moment'; +import { checkMDStockScreenExists, getKPIFields, getKPIFieldsWithSpecific, restore_ImageWithMetaData, validateNumber } from '../controller/functions'; +import { get_item, set_item, clear_item } from '../components/localStorage'; +import { db, ImageFolderPath } from '../constants/constants'; +import CustomHeader from '../components/customHeader'; +import { AntDesign, Entypo, MaterialCommunityIcons } from '../components/icons'; +import CustomLoader from '../components/CustomLoader'; +import LinearGradient from 'react-native-linear-gradient'; +import { AppTables } from '../constants/tableConstants'; +import * as RNFS from 'react-native-fs'; +import GradientButton from '../components/gradientButton'; +import CustomModal from '../components/CustomModal'; +import CustomCamera from '../components/Camera'; +import CameraImg3 from '../assets/performics/camera_tick.svg'; +import CameraImg5 from '../assets/image/astrickcamera.svg'; +import { CustomPicker } from '../components/CustomPicker'; +function OpeningStock(props) { + const route = useRoute(); + const ST = props.StaticText || {}; + // get all theme styles acc to current theme set + const PageTheme = GetPageTheme(props.DarkMode, route.name); + const customStyle = customStyles(props.DarkMode, route.name); + const [processing, setProcessing] = useState(true); + const [loaderTitle, setLoaderTitle] = useState('loading...'); + const [isAdhocScreen, setIsAdhocScreen] = useState(false); + const [storeData, setStoreData] = useState({}); + const [currentMenu, setCurrentMenu] = useState({}); + const [brandData, setBrandData] = useState([]); + const [rerenderdata, setrerenderdata] = useState(0); + const [rerenderdata2, setrerenderdata2] = useState(0); + const [KPIFields, setKPIFields] = useState([]); + const [KPIFieldsWithoutFilter, setKPIFieldsWithoutFilter] = useState([]); + const [catImages, setCatImages] = useState([]); + const [showSwitchCamera, setShowSwitchCamera] = useState(false); + const [SKUStockData, setSKUStockData] = useState([]); + const [showAlert, setShowAlert] = useState(false); + const [hasUnsavedChanges, setHasUnsavedChanges] = useState(false); + const [showCamera, setShowCamera] = useState(false); + const showCameraRef = React.useRef(false); + const [getImageProps, setGetImageProps] = useState({}); + const [SelectedImg, setSelectedImg] = useState(''); + const [showModal, setShowModal] = useState(false); + const [reCapImgModalObj, setReCapImgModalObj] = useState({}); + const [showImageSaveOp, setShowImageSaveOp] = useState(true); + const [disableEdit, setDisableEdit] = useState(false); + const hasUnsavedChangesRef = React.useRef(hasUnsavedChanges); + const WindowDataRef = React.useRef(SKUStockData); + const StoreIdRef = React.useRef(null); + const ScreenNameRef = React.useRef(''); + const catImagesRef = React.useRef(catImages); + //filter data states + const [globalBrandData, setGlobalBrandData] = useState([]); + const [filtervalue, setFilterValue] = useState({}); + const [catfilter, setcatFilter] = useState([]); + const [subcatfilter, setsubcatFilter] = useState([]); + const [brandfilter, setbrandFilter] = useState([]); + const [searchedItem, setSearchedItem] = useState(''); + const defCat = { "CategoryId": "", "CategoryName": "-Select-" }; + const defSubCat = { 'SubCategoryId': "", 'SubCategoryName': "-Select-" }; + const defBrand = { 'BrandId': "", 'BrandName': "-Select-" }; + // error field states + const [errorfield, setErrorField] = useState({}); + const [error, setError] = useState(false); + const inputRefs = useRef({}); + const d1 = new Date(); + const d2 = moment(d1).format('MM/DD/YYYY'); + // ✅ single object state for all colors + const [MSLDataInfo, setMSLDataInfo] = useState({ + Color_MSL: "", + isMSLProduct: false, + Color_NONMSL: "", + isNonMSLProduct: false, + Color_Competition: "", + isCompProduct: false + }); + + useEffect(() => { + let params = props.route.params ? props.route.params : {}; + let storeData1 = params.storeData || {}; + let menu1 = params.menu || {}; + let isAdhoc = params.isAdhoc || false; + setIsAdhocScreen(isAdhoc); + setStoreData(storeData1); + setCurrentMenu(menu1); + StoreIdRef.current = storeData1.StoreId + ScreenNameRef.current = menu1.ScreenName + getData(storeData1, menu1); + const AppStateSubscription = AppState.addEventListener('change', (pro) => { _handleAppStateChange(pro) }); + const unsubscribe = props.navigation.addListener('beforeRemove', onBeforeRemove); + return function cleanup() { + AppStateSubscription.remove(); + return unsubscribe; + }; + + }, []); + + const _handleAppStateChange = async (nextAppState) => { + if (nextAppState == 'background' && hasUnsavedChangesRef.current == true) { + let newData = { + storeBGData: WindowDataRef.current, + menuName: ScreenNameRef.current, + StoreId1: StoreIdRef.current, + BgCatImage: catImagesRef.current, + visiteDate: d2 + } + let WindowsStr = JSON.stringify(newData) + await set_item('storeData', WindowsStr); + } + } + + + function onBeforeRemove(e) { + if (showCameraRef.current == true) { + e.preventDefault(); + BgShowCamera(false); + } + else { + if (hasUnsavedChangesRef.current == true) { + e.preventDefault(); // Prevent default behavior of leaving the screen + onRemoveScreen(e); + } + else { + return; + } + } + } + + function BgUnsavedChanges(val) { + hasUnsavedChangesRef.current = val + setHasUnsavedChanges(val); + } + + function BgShowCamera(val) { + showCameraRef.current = val + setShowCamera(val); + } + + + + function BgWindowData(val) { + WindowDataRef.current = val + setSKUStockData(val); + } + + function BgCatImages(val) { + catImagesRef.current = val + setCatImages(val); + } + + function onRemoveScreen(e) { + Alert.alert( + "", + "Do you really want to exit the screen?", + [ + { + text: "Cancel", + onPress: () => { }, + style: "cancel" + }, + { + text: "OK", onPress: async () => { + BgUnsavedChanges(false) + await clear_item('storeData') + props.navigation.dispatch(e.data.action); + } + } + ] + ); + } + + async function getData(storeData1, menu1) { + try { + let { StoreId, ChainId, StateId, StoreTypeId, StoreClassId, StoreCategoryId } = storeData1; + let allCats = []; + let AllKPIFields = await getKPIFields(menu1); + setKPIFields(AllKPIFields); + let AllKPIFieldsWithoutFilter = await getKPIFieldsWithSpecific(); + setKPIFieldsWithoutFilter(AllKPIFieldsWithoutFilter) + ///get MSL Info + const result = await fetchDataFromDB(storeData1, AllKPIFieldsWithoutFilter, AllKPIFields); + setMSLDataInfo(result) + // set switch camera flag as defined in mapping menu flag (if exists) + let SwitchingCameraI = AllKPIFields.findIndex(i => i.KPIFieldName == 'SwitchingCamera'); + let SwitchingCameraObj = SwitchingCameraI >= 0 ? AllKPIFields[SwitchingCameraI] : {}; + let SwitchingCamera = SwitchingCameraI >= 0 ? SwitchingCameraObj['KPIFieldEnable'] : false; + setShowSwitchCamera(SwitchingCamera); + let isdisable = await getIsLastVisitStockAvlbl(storeData1, menu1); + console.log("isdisable", isdisable); + setDisableEdit(isdisable); + let COMPStockAllow_Index = AllKPIFields.findIndex(i => i.KPIFieldName == 'COMPStockAllow'); + let COMPStockAllow_Obj = COMPStockAllow_Index >= 0 ? AllKPIFields[COMPStockAllow_Index] : {}; + let isCOMPStockAllow = COMPStockAllow_Index >= 0 ? COMPStockAllow_Obj['KPIFieldEnable'] : false; + let ShowCompetionSku = AllKPIFields?.findIndex((i) => i.KPIFieldName == "ShowCompetionSku"); + let ShowCompetionObj = ShowCompetionSku >= 0 ? AllKPIFields[ShowCompetionSku] : {}; + let ShowCompetionSkuNo = ShowCompetionObj?.KPIFieldDisplayName || 0 + let ShowCompetionSkuNoSplitArr = ShowCompetionObj?.KPIFieldDisplayName?.split(",") || [] + const isCompetitorValues = ShowCompetionSkuNoSplitArr; + console.log('iscompetitorValues1', isCompetitorValues) + // const isCompetitorClause = `(${isCompetitorValues.join(",")})`; + // Check if isCompetitorValues is empty, null, or undefined + let isCompetitorClause = !isCompetitorValues || isCompetitorValues.length === 0 ? "p.IsCompetitor = 0" : `p.IsCompetitor IN (${isCompetitorValues.join(",")})`; + console.log("checkiscpmp1--", isCompetitorClause) + //allow insert only if LastVisitStock Exists and OPS does not already exists for this storeid + let isInsertLastVisitValid = false;//await checkInsertLastVisitValid(storeData1,menu1); + let seq = 0; + if (isInsertLastVisitValid) { + seq = await getSeq(); + } + console.log("isInsertLastVisitValid:", isInsertLastVisitValid, seq); + let storeBGData1 = [], bgStoreJson = {}, isBgDataExists = false; + let windData = await get_item('storeData') + if (windData != null && windData != '') { + let StoreJson = JSON.parse(windData) + let { storeBGData, menuName, StoreId1, BgCatImage, visiteDate } = StoreJson + if (menuName == menu1.ScreenName && StoreId1 == StoreId && visiteDate == d2) { + + storeBGData1 = storeBGData; + bgStoreJson = StoreJson + // setSKUStockData(storeBGData); + if (BgCatImage.length > 0) { + isBgDataExists = true; + BgCatImages(BgCatImage) + } + if (storeBGData.length > 0) { + isBgDataExists = true; + BgWindowData(storeBGData); + } + BgUnsavedChanges(true) + + } + } + + await db.transaction(async function (txn) { + let join = ' INNER join Product_Master p on c.CategoryId=p.CategoryId '; + let join2 = ` INNER join Mapping_ProductAssortmentStorewise mp on p.ProductId=mp.ProductId `; + let leftjoin = `Left join ${AppTables.INSERT_OPENINGHEADER_DATA} lt on lt.CATEGORY_ID = p.CategoryId and lt.STORE_ID='${StoreId}' and lt.VISIT_DATE='${d2}'` + let q = `SELECT DISTINCT ifnull(lt.IMAGE,'')as IMAGE,ifnull(lt.IMAGEPATH,'')as IMAGEPATH, c.CategoryId,c.CategoryName,'' as MSL from Master_Category c ${join} ${join2} ${leftjoin} where mp.StoreId='${StoreId}' ${(isCOMPStockAllow == true ? '' : ` and ${isCompetitorClause} `)} order by p.CategorySequence`; + let arr2 = [defCat]; + await txn.executeSql(q, [], async function (txn2, txnres) { + if (txnres.rows.length > 0) { + let arr = []; + for (var i = 0; i < txnres.rows.length; i++) { + let data = txnres.rows.item(i); + let catobj = { "CategoryId": data.CategoryId, "CategoryName": data.CategoryName } + arr.push(data); + arr2.push(catobj); + let defData = { 'CategoryId': data.CategoryId, 'ImageName': data.IMAGE, 'ImagePath': data.IMAGEPATH }; + allCats.push(defData); + if (i == txnres.rows.length - 1) { + BgCatImages(allCats); + setcatFilter(arr2); + setrerenderdata(!rerenderdata); + getSKU(arr, storeData1, AllKPIFields, menu1, isBgDataExists, isInsertLastVisitValid, seq); + } + } + } + }, function (txnE, txnerr) { console.log(txnerr); },); + + }); + } catch (err) { + console.log(err); + } + } + + async function getIsLastVisitStockAvlbl(storeData1, menu1) { + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + let q = `select * from LastVisit_ClosingStock where StoreId='${storeData1.StoreId}'`; + await txn.executeSql(q, [], async function (txn2, txnres) { + if (txnres.rows.length > 0) { + resolve(true); + } + else { + resolve(false); + } + }, function (txnE, txnerr) { console.log(txnerr); resolve(false); },); + }); + }).catch((err) => { + return false; + }); + } + + async function getSKU(brands = [], storeData1 = {}, AllKPIFields = [], menu1 = {}, isBgDataExists = false, isInsertLastVisitValid = false, seq = 0) { + + try { + let { StoreId } = storeData1; + let isExpStockIndex = AllKPIFields.findIndex(i => i.KPIFieldName == 'ExpiredStock') + let isExpStockPIObj = isExpStockIndex >= 0 ? AllKPIFields[isExpStockIndex] : {}; + let isExpStockEnable = isExpStockIndex >= 0 ? isExpStockPIObj['KPIFieldEnable'] : true; + let COMPStockAllow_Index = AllKPIFields.findIndex(i => i.KPIFieldName == 'COMPStockAllow'); + let COMPStockAllow_Obj = COMPStockAllow_Index >= 0 ? AllKPIFields[COMPStockAllow_Index] : {}; + let isCOMPStockAllow = COMPStockAllow_Index >= 0 ? COMPStockAllow_Obj['KPIFieldEnable'] : false; + let isExpStock1Index = KPIFields.findIndex(i => i.KPIFieldName == 'ExpiryStock1') + let isExpStock1PIObj = isExpStock1Index >= 0 ? KPIFields[isExpStock1Index] : {}; + let isExpStock1Enable = isExpStock1Index >= 0 ? isExpStock1PIObj['KPIFieldEnable'] : false; + let isExpStock2Index = KPIFields.findIndex(i => i.KPIFieldName == 'ExpiryStock2') + let isExpStock2PIObj = isExpStock2Index >= 0 ? KPIFields[isExpStock2Index] : {}; + let isExpStock2Enable = isExpStock2Index >= 0 ? isExpStock2PIObj['KPIFieldEnable'] : false; + let isExpStock3Index = KPIFields.findIndex(i => i.KPIFieldName == 'ExpiryStock3') + let isExpStock3PIObj = isExpStock3Index >= 0 ? KPIFields[isExpStock3Index] : {}; + let isExpStock3Enable = isExpStock3Index >= 0 ? isExpStock3PIObj['KPIFieldEnable'] : false; + let isExpStock4Index = KPIFields.findIndex(i => i.KPIFieldName == 'ExpiryStock4') + let isExpStock4PIObj = isExpStock4Index >= 0 ? KPIFields[isExpStock4Index] : {}; + let isExpStock4Enable = isExpStock4Index >= 0 ? isExpStock4PIObj['KPIFieldEnable'] : false; + let isStockCalculateIndex = KPIFields.findIndex(i => i.KPIFieldName == 'StockCalculate') + let isStockCalculatePIObj = isStockCalculateIndex >= 0 ? KPIFields[isStockCalculateIndex] : {}; + let isStockCalculateEnable = isStockCalculateIndex >= 0 ? isStockCalculatePIObj['KPIFieldEnable'] : false; + let ShowCompetionSku = AllKPIFields?.findIndex((i) => i.KPIFieldName == "ShowCompetionSku"); + let ShowCompetionObj = ShowCompetionSku >= 0 ? AllKPIFields[ShowCompetionSku] : {}; + let ShowCompetionSkuNoSplitArr = ShowCompetionObj?.KPIFieldDisplayName?.split(",") || [] + const isCompetitorValues = ShowCompetionSkuNoSplitArr; + let isCompetitorClause = !isCompetitorValues || isCompetitorValues.length === 0 ? "p.IsCompetitor = 0" : `p.IsCompetitor IN (${isCompetitorValues.join(",")})`; + let arr2 = [defSubCat]; + let arr3 = [defBrand]; + db.transaction(async function (txn) { + var allSKUData = []; + var stock_values = '', values = ''; + let insertCouunt = 0, prdLoadedForCatCount = 0; + await Promise.all( + brands.map(async (item, index) => { + let leftjoin = ` Left Outer join (select * from ${AppTables.SALES} where CATEGORY_ID='${item.CategoryId}' and STORE_ID='${StoreId}' and VISIT_DATE='${d2}' group by PRODUCT_ID ) sl on sl.PRODUCT_ID=p.ProductId`; + let seletlist = `distinct ifnull(sl.STOCK,'') as SALE_stock,s.EXPIRYSTOCK1,s.EXPIRYSTOCK2,s.EXPIRYSTOCK3,s.EXPIRYSTOCK4,s.PRODUCT as ProductName,s.PRODUCT_ID as ProductId,s.MSL,s.ARTICLE_CODE,s.MIDDAY_STOCK,s.OPENING_STOCK,s.CLOSING_STOCK,s.EXPIRY_ISOPEN,s.EXPIRY_STK,p.SubCategoryName, p.SubCategoryId,p.BrandName,p.BrandId,p.IsCompetitor `; + let join4 = `inner join Product_Master p on s.PRODUCT_ID=p.ProductId`; + let sku_q = `SELECT ${seletlist} FROM ${AppTables.STOCK_DATA} s ${join4} ${leftjoin} WHERE s.STORE_ID='${StoreId}' and s.VISIT_DATE='${d2}' and s.CATEGORY_ID='${item.CategoryId}' `; + // add Last Visit Stock join for prefilled functionality + let join6 = '', selectl_lv = ''; + if (isInsertLastVisitValid) { + selectl_lv = ` ,lv.ClosingStock as LV_ClosingStock,lv.CLS_ExpiryStock1 as LV_CLS_ExpiryStock1,lv.CLS_ExpiryStock2 as LV_CLS_ExpiryStock2,lv.CLS_ExpiryStock3 as LV_CLS_ExpiryStock3,lv.CLS_ExpiryStock4 as LV_CLS_ExpiryStock4`; + join6 = ` Left Outer join LastVisit_ClosingStock lv on lv.ProductId=p.ProductId and lv.StoreId='${StoreId}' `; + } + let join = ` inner join Mapping_ProductAssortmentStorewise m on p.ProductId=m.ProductId `; + let join2 = ` inner join Master_Category mc on mc.CategoryId=p.CategoryId `; + let sku_q2 = `select distinct ifnull(sl.STOCK,'') as SALE_stock,p.ProductName,p.ProductId,p.BrandName,p.BrandId,p.IsCompetitor,m.MSL,m.ArticleCode,p.SubCategoryName, p.SubCategoryId,p.BrandName,p.BrandId ${selectl_lv} from Product_Master p ${join} ${join2} ${join6} ${leftjoin} where m.StoreId='${StoreId}' and (p.CategoryId='${item.CategoryId}' or p.CategoryId= ${item.CategoryId}) ${(isCOMPStockAllow == true ? '' : ` and ${isCompetitorClause} `)} ORDER BY m.MSL desc, p.IsCompetitor ASC, p.ProductName ASC`; + seq++; + //build insert values array if InsertLastVisit is allowed + if (isInsertLastVisitValid) { + values += values != '' ? ' , ' : ''; + values += ` ('${StoreId}','${d2}','${item.CategoryName}','${item.CategoryId}','${item.MSL}','','','${d2}') `; + } + return await txn.executeSql(sku_q, [], async function (txn2, txnres) { + console.log("chekecc----->", sku_q) + if (txnres.rows.length > 0) { + let arr = []; + for (var i = 0; i < txnres.rows.length; i++) { + let data = txnres.rows.item(i); + inputRefs.current['input1_' + item.CategoryId + '_' + data.ProductId] = ''; + if ((isExpStockEnable && !isStockCalculateEnable) || isExpStock2Enable) { + inputRefs.current['input2_' + item.CategoryId + '_' + data.ProductId] = ''; + } + if (isExpStock3Enable) { + inputRefs.current['input3_' + item.CategoryId + '_' + data.ProductId] = ''; + } + if (isExpStock4Enable) { + inputRefs.current['input4_' + item.CategoryId + '_' + data.ProductId] = ''; + } + arr.push(data); + let subcatIndex = arr2.findIndex(i => i.SubCategoryId == data.SubCategoryId); + let subcatobj = { 'SubCategoryId': data.SubCategoryId, 'SubCategoryName': data.SubCategoryName }; + if (subcatIndex < 0) { + arr2.push(subcatobj); + } + let subbrandIndex = arr3.findIndex(i => i.BrandId == data.BrandId); + let subbrandobj = { 'BrandId': data.BrandId, 'BrandName': data.BrandName }; + if (subbrandIndex < 0) { + arr3.push(subbrandobj); + } + + let defData = { 'CategoryId': item.CategoryId, 'ProductId': data.ProductId, 'Stock': String(data.OPENING_STOCK), 'ExpiryStock': String(data.EXPIRY_STK), 'ExpiryStock1': String(data.EXPIRYSTOCK1), 'ExpiryStock2': String(data.EXPIRYSTOCK2), 'ExpiryStock3': String(data.EXPIRYSTOCK3), 'ExpiryStock4': String(data.EXPIRYSTOCK4), 'SALE_stock': data.SALE_stock }; + allSKUData.push(defData); + if (i == txnres.rows.length - 1) { + item['skulist'] = arr; + brands[index] = item; + prdLoadedForCatCount++; + if (prdLoadedForCatCount == brands.length) { //index==brands.length-1 + if (!isBgDataExists) { + BgWindowData(allSKUData); + } + setBrandData(brands); + setGlobalBrandData(brands); + setsubcatFilter(arr2); + setbrandFilter(arr3); + setTimeout(() => { setrerenderdata2(!rerenderdata2); }, 3000); + setProcessing(false); + } + return item; + } + } + } + else { + return await txn.executeSql(sku_q2, [], async function (txn2, txnres2) { + console.log("loaded count:", sku_q2, txnres2.rows.length, ',catid:', item.CategoryId); + if (txnres2.rows.length > 0) { + let arr = [], hdrseq = seq; + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + if (!isStockCalculateEnable) { + inputRefs.current['input1_' + item.CategoryId + '_' + data.ProductId] = ''; + } + + if ((isExpStockEnable && !isStockCalculateEnable)) { + inputRefs.current['input2_' + item.CategoryId + '_' + data.ProductId] = ''; + } + if (isExpStock1Enable) { + inputRefs.current['input3_' + item.CategoryId + '_' + data.ProductId] = ''; + } + + if (isExpStock2Enable) { + inputRefs.current['input4_' + item.CategoryId + '_' + data.ProductId] = ''; + } + if (isExpStock3Enable) { + inputRefs.current['input5_' + item.CategoryId + '_' + data.ProductId] = ''; + } + if (isExpStock4Enable) { + inputRefs.current['input6_' + item.CategoryId + '_' + data.ProductId] = ''; + } + arr.push(data); + let subcatIndex = arr2.findIndex(i => i.SubCategoryId == data.SubCategoryId); + let subcatobj = { 'SubCategoryId': data.SubCategoryId, 'SubCategoryName': data.SubCategoryName }; + if (subcatIndex < 0) { + arr2.push(subcatobj); + } + let subbrandIndex = arr3.findIndex(i => i.BrandId == data.BrandId); + let subbrandobj = { 'BrandId': data.BrandId, 'BrandName': data.BrandName }; + if (subbrandIndex < 0) { + arr3.push(subbrandobj); + } + //build insert values array if InsertLastVisit is allowed + if (isInsertLastVisitValid) { + let stock = data.LV_ClosingStock != null && data.LV_ClosingStock != 'undefined' ? data.LV_ClosingStock : '0'; + let lvCLS1 = data.LV_CLS_ExpiryStock1 != null && data.LV_CLS_ExpiryStock1 != 'undefined' ? data.LV_CLS_ExpiryStock1 : '0'; + let lvCLS2 = data.LV_CLS_ExpiryStock2 != null && data.LV_CLS_ExpiryStock2 != 'undefined' ? data.LV_CLS_ExpiryStock2 : '0'; + let lvCLS3 = data.LV_CLS_ExpiryStock3 != null && data.LV_CLS_ExpiryStock3 != 'undefined' ? data.LV_CLS_ExpiryStock3 : '0'; + let lvCLS4 = data.LV_CLS_ExpiryStock4 != null && data.LV_CLS_ExpiryStock4 != 'undefined' ? data.LV_CLS_ExpiryStock4 : '0'; + //prefil values if InsertLastVisit is allowed + let defData = { 'CategoryId': item.CategoryId, 'ProductId': data.ProductId, 'Stock': stock, 'ExpiryStock': 0, 'ExpiryStock1': lvCLS1, 'ExpiryStock2': lvCLS2, 'ExpiryStock3': lvCLS3, 'ExpiryStock4': lvCLS4, 'SALE_stock': data.SALE_stock }; + allSKUData.push(defData); + stock_values += stock_values != '' ? ' , ' : ''; + stock_values += ` ('${hdrseq}','${StoreId}','${d2}','${item.CategoryId}','${item.CategoryName}','${data.BrandId}','${data.BrandName}','${data.ProductId}','${data.ProductName}','${data.MSL}','${stock}','','','${isExpStockEnable}','0','${d2}') `; + insertCouunt++; + } + + if (i == (txnres2.rows.length - 1)) { + item['skulist'] = arr; + brands[index] = item; + prdLoadedForCatCount++; + if (prdLoadedForCatCount == brands.length) { + setBrandData(brands); + setGlobalBrandData(brands); + setsubcatFilter(arr2); + setbrandFilter(arr3); + setProcessing(false); + } + return item; + } + } + } + else { + return item; + } + }, function (txnE, txnerr) { console.log(txnerr); setProcessing(false); return item; }); + } + }, function (txnE, txnerr) { console.log(txnerr); setProcessing(false); return item; }); + return item; + }) + ).then((res) => { + }); + }); + } catch (err) { + console.log(err); + } + } + + async function getSeq() { + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + // select autogenerated seq from Header Table. + let seq_q = `select seq from sqlite_sequence where name="${AppTables.INSERT_OPENINGHEADER_DATA}" `; + await txn.executeSql(seq_q, [], async function (txn2, txnres) { + if (txnres.rows.length > 0) { + let data = txnres.rows.item(0); + let seq = data.seq; + resolve(seq); + } + else { + resolve(0); + } + }, function (txnE, txnerr) { console.log(txnerr); resolve(0); },); + }); + }).catch((e) => { + console.log(e); + return 0; + }); + } + + + async function focusToNext(cat, sku, type = '1') { + let activeKey = ''; + let arr = Object.keys(inputRefs.current); + if (type == "1") { + activeKey = 'input1_' + cat.CategoryId + '_' + sku.ProductId; + } else if (type == "2") { + activeKey = 'input2_' + cat.CategoryId + '_' + sku.ProductId; + } else if (type == "3") { + activeKey = 'input3_' + cat.CategoryId + '_' + sku.ProductId; + } else if (type == "4") { + activeKey = 'input4_' + cat.CategoryId + '_' + sku.ProductId; + } else if (type == "5") { + activeKey = 'input5_' + cat.CategoryId + '_' + sku.ProductId; + } else if (type == "6") { + activeKey = 'input6_' + cat.CategoryId + '_' + sku.ProductId; + } + let activeIndex = arr.indexOf(activeKey); + if (activeIndex < arr.length - 1) { + let nextKey = arr[++activeIndex] + let nextRef = inputRefs.current[nextKey]; + console.log("nextKey", nextKey) + nextRef.focus(); + } + else { + return + } + } + + async function getImage(imgdata) { + let cat = getImageProps.option || ''; + if (typeof imgdata == 'object' && imgdata.errorCode == 'camera_unavailable') { + notify('Camera unavailable'); + } + else if (typeof imgdata == 'object' && imgdata.uri != null) { + const img = imgdata; + const imgurl = img.uri, imgWidth = img.width, imgHeight = img.ExtendedHeight; + let isImgFromGallery = img.fromGallery != null ? img.fromGallery : false; + let picture_clickedd = isImgFromGallery == true ? img.datetime : new Date(); + let picture_clicked_time = moment(picture_clickedd).format('MM-DD-YYYY HH:mm:ss') + let picture_clicked_time_for_pic_name = moment(picture_clickedd).format('MMDDYYYY_HHmmss') + let calculate_tym_date_for_filename = picture_clicked_time_for_pic_name; + let calculate_tym_date_over_img = picture_clicked_time; + let filename = storeData.StoreId + '_' + (props.UserId || '') + '_OpeningStk-' + calculate_tym_date_for_filename + '.jpg'; + const mark_text1 = calculate_tym_date_over_img; + const mark_text2 = 'Store Name:' + storeData.StoreName + ' | Store Id:' + storeData.StoreId + ' | User Id:' + storeData.EmpId + ' | Image Type: ' + currentMenu.MenuName + ' (OPS) | Date:' + calculate_tym_date_over_img; + let allIMgs = catImages; + let defData = { 'CategoryId': cat.CategoryId }; + const cindex = allIMgs.findIndex(i => i.CategoryId == cat.CategoryId); + const imgData = cindex >= 0 ? (allIMgs[cindex] || defData) : defData; + imgData.ImageName = filename; + let imagePath = ImageFolderPath + currentMenu.ScreenName + "/" + filename; + RNFS.copyFile(imgurl, imagePath) + .then(async (resn) => { + // render data with clicked image + let uri = 'file://' + imagePath; + imgData.ImagePath = uri; + cindex >= 0 ? allIMgs[cindex] = imgData : allIMgs.push(imgData); + setSelectedImg(uri) + BgCatImages(allIMgs) + BgUnsavedChanges(true); + setrerenderdata(!rerenderdata); + // add metdata then resize image and restored back to the imagePath + let restore_data = { "destFilePath": imagePath, "imgurl": imgurl, imgWidth, imgHeight, mark_text1, mark_text2 } + let is_restored = await restore_ImageWithMetaData(restore_data, imgdata); + console.log("image restored:", is_restored); + }) + .catch(err => { + console.log('ERROR: image file write failed!!!'); + console.log(err.message, err.code); + }); + } + } + + async function openCamera(option) { + setGetImageProps({ 'option': option }); + BgShowCamera(true); + setErrorField({}); + setError(false); + } + + async function submitOpeningStock() { + let isvalid = await validate(); + if (isvalid) { + Keyboard.dismiss(); + setShowAlert(true); + } + } + + async function saveData() { + BgUnsavedChanges(false); + setShowAlert(false); + setLoaderTitle('Saving Data...'); + setProcessing(true); + try { + let { StoreId } = storeData; + await db.transaction(async function (txn) { + let q = `DELETE FROM ${AppTables.STOCK_DATA} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' `; + let q2 = `DELETE FROM ${AppTables.INSERT_OPENINGHEADER_DATA} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' `; + // remove old data + await txn.executeSql(q, [], async function (txn2, txnres) { + console.log('stock data deleted'); + }, function (txnE, txnerr) { console.log(txnerr); },); + await txn.executeSql(q2, [], async function (txn2, txnres) { + console.log('stock header data deleted'); + }, function (txnE, txnerr) { console.log(txnerr); },); + let seq_q = ` select seq from sqlite_sequence where name="${AppTables.INSERT_OPENINGHEADER_DATA}" `; + await txn.executeSql(seq_q, [], async function (txn2, txnres) { + if (txnres.rows.length > 0) { + let data = txnres.rows.item(0); + let seq = data.seq; + insertData(seq); + } + else { + insertData(0); + } + }, function (txnE, txnerr) { console.log(txnerr); insertData(0); },); + }); + } catch (err) { + console.log(err); + } + } + + async function insertData(seq = 0) { + try { + console.log(seq); + let ProductList = [] + let isSALEExists = await checkMDStockScreenExists(storeData, 'SALE') + let { StoreId, ExpiryStock } = storeData; + let isExpStockIndex = KPIFields.findIndex(i => i.KPIFieldName == 'ExpiredStock') + let isExpStockPIObj = isExpStockIndex >= 0 ? KPIFields[isExpStockIndex] : {}; + let isExpStockEnable = isExpStockIndex >= 0 ? isExpStockPIObj['KPIFieldEnable'] : true; + let isExpStock1Index = KPIFields.findIndex(i => i.KPIFieldName == 'ExpiryStock1') + let isExpStock1PIObj = isExpStock1Index >= 0 ? KPIFields[isExpStock1Index] : {}; + let isExpStock1Enable = isExpStock1Index >= 0 ? isExpStock1PIObj['KPIFieldEnable'] : false; + let isExpStock2Index = KPIFields.findIndex(i => i.KPIFieldName == 'ExpiryStock2') + let isExpStock2PIObj = isExpStock2Index >= 0 ? KPIFields[isExpStock2Index] : {}; + let isExpStock2Enable = isExpStock2Index >= 0 ? isExpStock2PIObj['KPIFieldEnable'] : false; + let isExpStock3Index = KPIFields.findIndex(i => i.KPIFieldName == 'ExpiryStock3') + let isExpStock3PIObj = isExpStock3Index >= 0 ? KPIFields[isExpStock3Index] : {}; + let isExpStock3Enable = isExpStock3Index >= 0 ? isExpStock3PIObj['KPIFieldEnable'] : false; + let isExpStock4Index = KPIFields.findIndex(i => i.KPIFieldName == 'ExpiryStock4') + let isExpStock4PIObj = isExpStock4Index >= 0 ? KPIFields[isExpStock4Index] : {}; + let isExpStock4Enable = isExpStock4Index >= 0 ? isExpStock4PIObj['KPIFieldEnable'] : false; + let isStockCalculateIndex = KPIFields.findIndex(i => i.KPIFieldName == 'StockCalculate') + let isStockCalculatePIObj = isStockCalculateIndex >= 0 ? KPIFields[isStockCalculateIndex] : {}; + let isStockCalculateEnable = isStockCalculateIndex >= 0 ? isStockCalculatePIObj['KPIFieldEnable'] : false; + await db.transaction(async function (txn) { + var values = '', stock_values = ''; + for (var i = 0; i < globalBrandData.length; i++) { + seq++; + let catIndex = i; + let item = globalBrandData[catIndex]; + let cimage = catImages.find(ci => ci.CategoryId == item.CategoryId) || {}; + values += values != '' ? ' , ' : ''; + values += ` ('${StoreId}','${d2}','${item.CategoryName}','${item.CategoryId}','${item.MSL}','${cimage.ImageName}','${cimage.ImagePath}','${d2}') `; + let skulist = item['skulist'] || []; + for (var j = 0; j < skulist.length; j++) { + let skuItem = skulist[j]; + let { BrandId, BrandName, MSL, ArticleCode, ProductId, ProductName, IsCompetitor } = skulist[j]; + ArticleCode = ArticleCode != null && ArticleCode != undefined && ArticleCode != 'undefined' && ArticleCode != '' ? ArticleCode : '' + stock_values += stock_values != '' ? ' , ' : ''; + let allSKUData = SKUStockData; + const skud_index = allSKUData.findIndex(ci => ci.CategoryId == item.CategoryId && ci.ProductId == skuItem.ProductId); + const skud = skud_index >= 0 ? (allSKUData[skud_index] || {}) : {}; + let StockData = '0'; + let expStock = isExpStockEnable == true && isStockCalculateEnable == false ? (skud['ExpiryStock'] != null ? skud['ExpiryStock'] : '0') : '0'; + let expStock1 = isExpStock1Enable == true ? (skud['ExpiryStock1'] != null ? skud['ExpiryStock1'] : '0') : '0'; + let expStock2 = isExpStock2Enable == true ? (skud['ExpiryStock2'] != null ? skud['ExpiryStock2'] : '0') : '0'; + let expStock3 = isExpStock3Enable == true ? (skud['ExpiryStock3'] != null ? skud['ExpiryStock3'] : '0') : '0'; + let expStock4 = isExpStock4Enable == true ? (skud['ExpiryStock4'] != null ? skud['ExpiryStock4'] : '0') : '0'; + if (isStockCalculateEnable) { + StockData = parseInt(expStock1) + parseInt(expStock2) + parseInt(expStock3) + parseInt(expStock4) + } else { + StockData = skud['Stock']; + if (StockData === null || StockData === '' || StockData === undefined) { + StockData = '0'; + } + if (parseInt(StockData) != 0) { + ProductList.push(ProductId) + } + } + stock_values += ` ('${seq}','${StoreId}','${d2}','${item.CategoryId}','${item.CategoryName}','${BrandId}','${BrandName}','${ProductId}','${ProductName}','${MSL}','${ArticleCode}','${StockData}','','','${ExpiryStock}','${expStock}','${expStock1}','${expStock2}','${expStock3}','${expStock4}','${d2}',${IsCompetitor}) `; + } + } + let add_StockHdr = `INSERT INTO ${AppTables.INSERT_OPENINGHEADER_DATA} (STORE_ID,VISIT_DATE,CATEGORY,CATEGORY_ID,MSL,IMAGE,IMAGEPATH,ADDED_DATE) VALUES ${values} `; + let add_Stock = `INSERT INTO ${AppTables.STOCK_DATA} (COMMON_ID,STORE_ID,VISIT_DATE,CATEGORY_ID,CATEGORY,BRAND_ID,BRAND,PRODUCT_ID,PRODUCT,MSL,ARTICLE_CODE,OPENING_STOCK,MIDDAY_STOCK,CLOSING_STOCK,EXPIRY_ISOPEN,EXPIRY_STK,EXPIRYSTOCK1,EXPIRYSTOCK2,EXPIRYSTOCK3,EXPIRYSTOCK4,ADDED_DATE,IsCompetitor) VALUES ${stock_values} `; + await txn.executeSql(add_StockHdr, [], async function (txn2, txnres) { + console.log('stock header added'); + await txn.executeSql(add_Stock, [], async function (txn2, txnres) { + console.log('stock added'); + if (isSALEExists) { + let saleDQ = `Delete from ${AppTables.SALES} where STORE_ID='${StoreId}' and VISIT_DATE='${d2}' and PRODUCT_ID not in (${ProductList.join(',')}) ` + txn.executeSql(saleDQ, [], function (txn2, txnres) { + console.log('sales deleted successfully'); + }, function (txnE, txnerr) { console.log(txnerr); },); + } + notify('Stock updated successfully'); + setProcessing(false); + // clear store data in local storage to avoiding re-set data for the store + clear_item('storeData') + props.navigation.goBack(); + }, function (txnE, txnerr) { console.log(txnerr); setProcessing(false); notify('Cannot add stock') },); + }, function (txnE, txnerr) { console.log(txnerr); setProcessing(false); notify('Cannot add stock') },); + }); + } catch (err) { + console.log(err); + } + } + + async function validate() { + let isValid = true; + var i = 0, j = 0; + let isSALEExists = await checkMDStockScreenExists(storeData, 'SALE') + let isExpMandIndex = KPIFields.findIndex(i => i.KPIFieldName == 'ExpiredStockMandatory') + let isExpMandKPIObj = isExpMandIndex >= 0 ? KPIFields[isExpMandIndex] : {}; + let isExpMandEnable = isExpMandIndex >= 0 ? isExpMandKPIObj['KPIFieldEnable'] : true; + let isExpStockIndex = KPIFields.findIndex(i => i.KPIFieldName == 'ExpiredStock') + let isExpStockPIObj = isExpStockIndex >= 0 ? KPIFields[isExpStockIndex] : {}; + let isExpStockEnable = isExpStockIndex >= 0 ? isExpStockPIObj['KPIFieldEnable'] : true; + let ShowSubCatImageIndex = KPIFields.findIndex(i => i.KPIFieldName == 'ShowSubCatImage') + let ShowSubCatImageObj = ShowSubCatImageIndex >= 0 ? KPIFields[ShowSubCatImageIndex] : {}; + let ShowSubCatImageEnable = ShowSubCatImageIndex >= 0 ? ShowSubCatImageObj['KPIFieldEnable'] : true; + let isExpStock1Index = KPIFields.findIndex(i => i.KPIFieldName == 'ExpiryStock1') + let isExpStock1PIObj = isExpStock1Index >= 0 ? KPIFields[isExpStock1Index] : {}; + let isExpStock1Enable = isExpStock1Index >= 0 ? isExpStock1PIObj['KPIFieldEnable'] : false; + let isExpStock2Index = KPIFields.findIndex(i => i.KPIFieldName == 'ExpiryStock2') + let isExpStock2PIObj = isExpStock2Index >= 0 ? KPIFields[isExpStock2Index] : {}; + let isExpStock2Enable = isExpStock2Index >= 0 ? isExpStock2PIObj['KPIFieldEnable'] : false; + let isExpStock3Index = KPIFields.findIndex(i => i.KPIFieldName == 'ExpiryStock3') + let isExpStock3PIObj = isExpStock3Index >= 0 ? KPIFields[isExpStock3Index] : {}; + let isExpStock3Enable = isExpStock3Index >= 0 ? isExpStock3PIObj['KPIFieldEnable'] : false; + let isExpStock4Index = KPIFields.findIndex(i => i.KPIFieldName == 'ExpiryStock4') + let isExpStock4PIObj = isExpStock4Index >= 0 ? KPIFields[isExpStock4Index] : {}; + let isExpStock4Enable = isExpStock4Index >= 0 ? isExpStock4PIObj['KPIFieldEnable'] : false; + let isStockCalculateIndex = KPIFields.findIndex(i => i.KPIFieldName == 'StockCalculate') + let isStockCalculatePIObj = isStockCalculateIndex >= 0 ? KPIFields[isStockCalculateIndex] : {}; + let isStockCalculateEnable = isStockCalculateIndex >= 0 ? isStockCalculatePIObj['KPIFieldEnable'] : false; + let isDefaultStockIndex = KPIFields.findIndex(i => i.KPIFieldName == 'DefaultStockValue') + let isDefaultStockPIObj = isDefaultStockIndex >= 0 ? KPIFields[isDefaultStockIndex] : {}; + let isDefaultStockEnable = isDefaultStockIndex >= 0 ? isDefaultStockPIObj['KPIFieldEnable'] : false; + let oneStockExists = true; + + await Promise.all( + globalBrandData.map(async (item, index) => { + if (isValid) { + let catId = item.CategoryId; + let errorobj = { 'EF_brand': item }; + let cimgData = catImages.find(ci => ci.CategoryId == catId) || {}; + if (ShowSubCatImageEnable == true && (cimgData.ImagePath == null || cimgData.ImagePath == '')) { + notify('Please click image for ' + item.CategoryName, 'SHORT'); + isValid = false; + errorobj['EF_ImageKey'] = 'Image1'; + setErrorField(errorobj); + setError(true); + } + else { + let skulist = item.skulist || []; + if (skulist.length > 0) { + await Promise.all( + skulist.map(async (skuItem, skuIndex) => { + if (isValid) { + let skuData = SKUStockData.find(ci => ci.CategoryId == item.CategoryId && ci.ProductId == skuItem.ProductId) || {}; + errorobj['EF_product'] = skuItem; + let error_bid = item.CategoryId + let error_pid = skuItem.ProductId + let show_errorH = false, error_HInputKey = '', error_HInputKey2 = '', error_HInputKeyEx1 = '', error_HInputKeyEx2 = '', error_HInputKeyEx3 = '', error_HInputKeyEx4 = ''; + let skuDataStock = skuData?.Stock ? skuData?.Stock : (isDefaultStockEnable ? "0" : null); + let skuDataExpiryStock = skuData?.ExpiryStock ? skuData?.ExpiryStock : (isDefaultStockEnable ? "0" : null); + let skuDataExpiryStock1 = skuData?.ExpiryStock1 ? skuData?.ExpiryStock1 : (isDefaultStockEnable ? "0" : null); + let skuDataExpiryStock2 = skuData?.ExpiryStock2 ? skuData?.ExpiryStock2 : (isDefaultStockEnable ? "0" : null); + let skuDataExpiryStock3 = skuData?.ExpiryStock3 ? skuData?.ExpiryStock3 : (isDefaultStockEnable ? "0" : null); + let skuDataExpiryStock4 = skuData?.ExpiryStock3 ? skuData?.ExpiryStock4 : (isDefaultStockEnable ? "0" : null); + if (isStockCalculateEnable != true) { + let stockCheck = parseInt(skuDataStock) || 0 + if (stockCheck > 0) { + oneStockExists = false; + } + if (skuDataStock != 0 && (!Boolean(skuDataStock))) { + isValid = false; + show_errorH = true, error_HInputKey = 'input1_'; + } + else if (skuDataStock != 0 && skuDataStock !== '' && !validateNumber(skuDataStock, 'numeric', false)) { + notify('Please enter whole numbers only for ' + skuItem.ProductName + ' stock', 'SHORT'); + isValid = false; + show_errorH = true, error_HInputKey = 'input1_'; + } else if (skuDataStock != '' && parseInt(skuData?.SALE_stock) > parseInt(skuDataStock)) { + notify('STOCK value must NOT BE LESS than entered SALE' + ' Stock ' + ST.for + ' ' + skuItem.ProductName, 'LONG'); + isValid = false; + show_errorH = true, error_HInputKey = 'input1_'; + } + else if ((isExpMandEnable == 1 && isExpStockEnable == true) && skuDataExpiryStock !== 0 && (skuDataExpiryStock == null || skuDataExpiryStock == '')) { + notify('Please enter expiry stock for ' + skuItem.ProductName, 'SHORT'); + isValid = false; + show_errorH = true, error_HInputKey2 = 'input2_'; + } + else if ((isExpMandEnable == 1 && isExpStockEnable == true) && skuDataExpiryStock !== 0 && skuDataExpiryStock != '' && !validateNumber(skuDataExpiryStock, 'numeric', false)) { + notify('Please enter whole numbers only for ' + skuItem.ProductName + ' expiry stock', 'SHORT'); + isValid = false; + show_errorH = true, error_HInputKey2 = 'input2_'; + } + else if (isExpStockEnable == true && (parseInt(skuDataExpiryStock) > parseInt(skuDataStock))) { + notify('Expiry Stock value should be less than or equal to Stock for ' + skuItem.ProductName, 'SHORT'); + isValid = false; + show_errorH = true, error_HInputKey = 'input1_', error_HInputKey2 = 'input2_'; + } + + if (show_errorH) { + errorobj['EF_InputKey'] = error_HInputKey; + errorobj['EF_InputKey2'] = error_HInputKey2; + setErrorField(errorobj) + setError(true) + if (error_HInputKey != null && error_HInputKey != '') { + let refIn1 = inputRefs.current[error_HInputKey + error_bid + '_' + error_pid]; + refIn1.focus(); + } + else if (error_HInputKey2 != '') { + let refIn1 = inputRefs.current[error_HInputKey2 + error_bid + '_' + error_pid]; + refIn1.focus(); + } + } + } else { + if ((isExpStock1Enable == true) && skuDataExpiryStock1 != 0 && (skuDataExpiryStock1 == null || skuDataExpiryStock1 == '')) { + notify('Please enter expiry stock for ' + skuItem.ProductName, 'SHORT'); + isValid = false; + show_errorH = true, error_HInputKeyEx1 = 'input3_'; + } + else if ((isExpStock1Enable == true) && skuDataExpiryStock1 != 0 && skuDataExpiryStock1 != '' && !validateNumber(skuDataExpiryStock1, 'numeric', false)) { + notify('Please enter whole numbers only for ' + skuItem.ProductName + ' expiry stock', 'SHORT'); + isValid = false; + show_errorH = true, error_HInputKeyEx1 = 'input3_'; + } else if ((isExpStock2Enable == true) && skuDataExpiryStock2 != 0 && (skuDataExpiryStock2 == null || skuDataExpiryStock2 == '')) { + notify('Please enter expiry stock for ' + skuItem.ProductName, 'SHORT'); + isValid = false; + show_errorH = true, error_HInputKeyEx2 = 'input4_'; + } + else if ((isExpStock2Enable == true) && skuDataExpiryStock2 != 0 && skuDataExpiryStock2 != '' && !validateNumber(skuDataExpiryStock2, 'numeric', false)) { + notify('Please enter whole numbers only for ' + skuItem.ProductName + ' expiry stock', 'SHORT'); + isValid = false; + show_errorH = true, error_HInputKeyEx2 = 'input4_'; + } else if ((isExpStock3Enable == true) && skuDataExpiryStock3 != 0 && (skuDataExpiryStock3 == null || skuDataExpiryStock3 == '')) { + notify('Please enter expiry stock for ' + skuItem.ProductName, 'SHORT'); + isValid = false; + show_errorH = true, error_HInputKeyEx3 = 'input5_'; + } + else if ((isExpStock3Enable == true) && skuDataExpiryStock3 != 0 && skuDataExpiryStock3 != '' && !validateNumber(skuDataExpiryStock3, 'numeric', false)) { + notify('Please enter whole numbers only for ' + skuItem.ProductName + ' expiry stock', 'SHORT'); + isValid = false; + show_errorH = true, error_HInputKeyEx3 = 'input5_'; + } else if ((isExpStock4Enable == true) && skuDataExpiryStock4 != 0 && (skuDataExpiryStock4 == null || skuDataExpiryStock4 == '')) { + notify('Please enter expiry stock for ' + skuItem.ProductName, 'SHORT'); + isValid = false; + show_errorH = true, error_HInputKeyEx4 = 'input6_'; + } + else if ((isExpStock4Enable == true) && skuDataExpiryStock4 != 0 && skuDataExpiryStock4 != '' && !validateNumber(skuDataExpiryStock4, 'numeric', false)) { + notify('Please enter whole numbers only for ' + skuItem.ProductName + ' expiry stock', 'SHORT'); + isValid = false; + show_errorH = true, error_HInputKeyEx4 = 'input6_'; + } + + if (show_errorH) { + errorobj['error_HInputKeyEx1'] = error_HInputKeyEx1; + errorobj['error_HInputKeyEx2'] = error_HInputKeyEx2; + errorobj['error_HInputKeyEx3'] = error_HInputKeyEx3; + errorobj['error_HInputKeyEx4'] = error_HInputKeyEx4; + setErrorField(errorobj) + setError(true) + if (error_HInputKey != null && error_HInputKey != '') { + let refIn1 = inputRefs.current[error_HInputKey + error_bid + '_' + error_pid]; + refIn1.focus(); + } + else if (error_HInputKey2 != '') { + let refIn1 = inputRefs.current[error_HInputKey2 + error_bid + '_' + error_pid]; + refIn1.focus(); + } + } + } + } + }) + ); + } + } + } + }) + ); + + if (isValid && isSALEExists && oneStockExists) { + notify("Fill Stock greater than 0 for atleast one product", 'SHORT'); + isValid = false; + } + + console.log('isValid:', isValid); + return isValid; + } + + function onStockValChange(item, skuItem, val, key, type = '') { + setError(false) + setErrorField({}) + if (val != '') { + let isValid = validateNumber(val, type); + if (!isValid) { + return; + } + } + + if (val.length > 1 && val[0] === '0') { + val = val.replace(/^0+/, ''); + } + + let allSKUData = SKUStockData; + let defData = { 'CategoryId': item.CategoryId, 'ProductId': skuItem.ProductId }; + const skud_index = allSKUData.findIndex(i => i.CategoryId == item.CategoryId && i.ProductId == skuItem.ProductId); + const skud = skud_index >= 0 ? (allSKUData[skud_index] || defData) : defData; + skud[key] = val; + + skud_index >= 0 ? allSKUData[skud_index] = skud : allSKUData.push(skud); + // setSKUStockData(allSKUData); + BgWindowData(allSKUData) + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + + function _render_Alert() { + return ( + + + { setShowAlert(false) }}> + Cancel + + { saveData() }}> + Yes + + + + ) + } + + + async function OpenImgModal(imgPath, item) { + setSelectedImg(imgPath) + setShowModal(true); + if ((imgPath != '' && imgPath != null)) { + setShowImageSaveOp(false); + } + else { + setShowImageSaveOp(true); + } + setReCapImgModalObj({ item }) + // _OpenCaptureImage_Modal(imgPath,window,splitItem,splitItemIndex,cameraType) + + } + + function cancelImage() { + // setImage1(''); + setSelectedImg(''); + setReCapImgModalObj({}) + setShowModal(false); + } + + function _OpenCaptureImage_Modal(img) { + const isImageCap = (img != '' || img != null) ? true : false; + // console.log("imag pop is trigger",isImageCap,showModal,img) + let { item } = reCapImgModalObj + let camera2Label = (window && window.PromoImage2Lable) || ''; + return ( + + { + isImageCap && + + + + + { openCamera(item) }}> + + + + {!showImageSaveOp && + { cancelImage() }}> + {ST.Close} + + } + + } + + ) + } + + function FilterStores(searchedQry, filtervalue1) { + searchedQry = searchedQry.toLowerCase(); + console.log('searchedQry', searchedQry); + let arr = []; + let newBrandList = []; + let filterCatId = filtervalue1.CategoryId; + let filterSubCatId = filtervalue1.SubCategoryId; + let filterBrandId = filtervalue1.BrandId; + + console.log('filterCatId', filterCatId) + console.log('filterSubCatId', filterSubCatId) + console.log('filterBrandId', filterBrandId) + + if ((searchedQry != null && searchedQry != '') || (filterCatId != null && filterCatId != '') || (filterSubCatId != null && filterSubCatId != '') || (filterBrandId != null && filterBrandId != '')) { + console.log('searchquerytrue') + for (let i = 0; i < globalBrandData.length; i++) { + let item = globalBrandData[i]; + // console.log('item',item) + let { CategoryId } = item; + let skulist = item.skulist || []; + + let newBrand = Object.assign({ 'test2': '2' }, item); + let newSkulist = []; + + + + for (let j = 0; j < skulist.length; j++) { + let sku = skulist[j]; + let { ProductName, SubCategoryId, BrandId } = sku; + + + let isQueryMatched = false, isCatMatch = false, isSubCatMatch = false, isBrandMatch = false; + if ((searchedQry != null && searchedQry != '') && ProductName.toLowerCase().includes(searchedQry)) { + + isQueryMatched = true; + } + else if (searchedQry == '' || searchedQry == null) { + isQueryMatched = true; + } + + + if ((filterCatId != null && filterCatId != '') && filterCatId == CategoryId) { + isCatMatch = true; + + } + else if (filterCatId == '' || filterCatId == null) { + isCatMatch = true; + } + + if ((filterSubCatId != null && filterSubCatId != '') && filterSubCatId == SubCategoryId) { + isSubCatMatch = true; + + } + else if (filterSubCatId == '' || filterSubCatId == null) { + isSubCatMatch = true; + } + + if ((filterBrandId != null && filterBrandId != '') && filterBrandId == BrandId) { + isBrandMatch = true; + + } + else if (filterBrandId == '' || filterBrandId == null) { + isBrandMatch = true; + } + + if (isQueryMatched && isCatMatch && isSubCatMatch && isBrandMatch) { + newSkulist.push(sku); + } + + if (j == skulist.length - 1) { + newBrand.skulist = newSkulist; + + if (newBrand.skulist.length > 0) { + newBrandList.push(newBrand); + // console.log('push',newBrandList.push(newBrand)) + // console.log('newBrandList',newBrandList) + // console.log('newBrand',newBrand) + + + } + } + } + + + } + } + else { + newBrandList = globalBrandData; + } + + setBrandData(newBrandList); + setrerenderdata(!rerenderdata) + setrerenderdata2(!rerenderdata2) + } + + async function onselectionChange(option, keyLbl, keyVal, otherData) { + setProcessing(true); + // let CategoryName=otherData.CategoryName!=null?otherData.CategoryName:''; + let data = filtervalue || {}; + // console.log('setFilterValue',data) + data[keyVal] = option.value; + data[keyLbl] = option.label; + await FilterHierarchy(keyVal, option.value); + if (keyVal == "CategoryId") { + data["SubCategoryId"] = defSubCat.SubCategoryId; + data["SubCategoryName"] = defSubCat.SubCategoryName; + data["BrandId"] = defBrand.BrandId; + data["BrandName"] = defBrand.BrandName; + } + else if (keyVal == "SubCategoryId") { + data["BrandId"] = defBrand.BrandId; + data["BrandName"] = defBrand.BrandName; + } + setFilterValue(data); + FilterStores(searchedItem, data) + console.log('filtersrores', searchedItem, data) + + setrerenderdata(!rerenderdata); + setrerenderdata2(!rerenderdata2) + setProcessing(false); + } + + + async function FilterHierarchy(keyVal, val) { + + let join = ` inner join Mapping_ProductAssortmentStorewise m on p.ProductId=m.ProductId `;// assortment join + + let { StoreId, ChainId, StateId, StoreCategoryId, StoreClassId, StoreTypeId } = storeData + if (keyVal == "CategoryId") { + // Filter Brand based on category + let brandq = `Select Distinct p.BrandId,p.BrandName from Product_Master p ${join} where m.StoreId='${StoreId}' and (p.CategoryId='${val}' or p.CategoryId=${val}) and (CompanyId= 1 or CompanyId= '1') order by p.BrandSequence `; + let brands = await executeQuery(brandq, [defBrand]); + setbrandFilter(brands); + // Filter Sub cats based on category + let subcatq = `Select Distinct p.SubCategoryId,p.SubCategoryName from Product_Master p ${join} where m.StoreId='${StoreId}' and (p.CategoryId='${val}' or p.CategoryId=${val}) and (CompanyId= 1 or CompanyId= '1') order by p.BrandSequence `; + let subCats = await executeQuery(subcatq, [defSubCat]); + setsubcatFilter(subCats); + } + else if (keyVal == "SubCategoryId") { + // Filter Brands based on Sub-category + let brandq = `Select Distinct p.BrandId,p.BrandName from Product_Master p ${join} where m.StoreId='${StoreId}' and (p.SubCategoryId='${val}' or p.SubCategoryId=${val}) and (CompanyId= 1 or CompanyId= '1') order by p.BrandSequence `; + let brands = await executeQuery(brandq, [defBrand]); + setbrandFilter(brands); + } + } + function clearFilter(obj, key1, key2) { + let fdata = filtervalue; + fdata[key1] = obj[key1]; + fdata[key2] = obj[key2]; + if (key1 == "CategoryId") { + fdata["SubCategoryId"] = defSubCat.SubCategoryId; + fdata["SubCategoryName"] = defSubCat.SubCategoryName; + fdata["BrandId"] = defBrand.BrandId; + fdata["BrandName"] = defBrand.BrandName; + } + else if (key1 == "SubCategoryId") { + fdata["BrandId"] = defBrand.BrandId; + fdata["BrandName"] = defBrand.BrandName; + } + setFilterValue(fdata); + FilterStores(searchedItem, fdata); + } + + function _renderSalesFilter() { + let salesCatFilterI = KPIFields.findIndex(i => i.KPIFieldName == 'OPCatFilter') + let salesCatFilterObj = salesCatFilterI >= 0 ? KPIFields[salesCatFilterI] : {}; + let salesCatFilter = salesCatFilterI >= 0 ? salesCatFilterObj['KPIFieldEnable'] : false; + + let salesSubCatFilterI = KPIFields.findIndex(i => i.KPIFieldName == 'OPSubCatFilter') + let salesSubCatFilterObj = salesSubCatFilterI >= 0 ? KPIFields[salesSubCatFilterI] : {}; + let salesSubCatFilter = salesSubCatFilterI >= 0 ? salesSubCatFilterObj['KPIFieldEnable'] : false; + + let salesBrandFilterI = KPIFields.findIndex(i => i.KPIFieldName == 'OPBrandFilter') + let salesBrandFilterObj = salesBrandFilterI >= 0 ? KPIFields[salesBrandFilterI] : {}; + let salesBrandFilter = salesSubCatFilterI >= 0 ? salesBrandFilterObj['KPIFieldEnable'] : false; + + if (rerenderdata == rerenderdata && (salesCatFilter || salesSubCatFilter || salesBrandFilter)) { + return ( + + {salesCatFilter && + + {'Category'} + + {CustomPicker(props, catfilter, 'CategoryName', 'CategoryId', 'CategoryName', 'CategoryId', onselectionChange, { value: filtervalue.CategoryId, otherData: {} }, customStyle.Sale_filterSelStyle, customStyle.Sale_filterSelInputStyle, true)} + { clearFilter(catfilter[0], 'CategoryId', 'CategoryName') }}> + + + + } + + {salesSubCatFilter && + + {'SubCategory'} + + {CustomPicker(props, subcatfilter, 'SubCategoryName', 'SubCategoryId', 'SubCategoryName', 'SubCategoryId', onselectionChange, { value: filtervalue.SubCategoryId, otherData: {} }, customStyle.Sale_filterSelStyle, customStyle.Sale_filterSelInputStyle, true)} + { clearFilter(subcatfilter[0], 'SubCategoryId', 'SubCategoryName') }}> + + + + } + + {salesBrandFilter && + + {'Brand'} + + {CustomPicker(props, brandfilter, 'BrandName', 'BrandId', 'BrandName', 'BrandId', onselectionChange, { value: filtervalue.BrandId, otherData: {} }, customStyle.Sale_filterSelStyle, customStyle.Sale_filterSelInputStyle, true)} + { clearFilter(brandfilter[0], 'BrandId', 'BrandName') }}> + + + + } + + ) + } + else { + return null; + } + } + + + // ✅ async function OUTSIDE return(), INSIDE component + const fetchDataFromDB = async (storeData, AllKPIFieldsWithoutFilter, AllKPIFields) => { + let isColor_MSLIndex = AllKPIFieldsWithoutFilter.findIndex(i => i.KPIFieldName == 'Color_MSL') + let isColor_MSLObj = isColor_MSLIndex >= 0 ? AllKPIFieldsWithoutFilter[isColor_MSLIndex] : {}; + let isColor_MSLEnable = isColor_MSLIndex >= 0 ? isColor_MSLObj['KPIFieldEnable'] : false; + let Color_MSL = isColor_MSLEnable && isColor_MSLIndex >= 0 ? isColor_MSLObj['KPIFieldDisplayName'] : "" + + let isColor_NONMSLIndex = AllKPIFieldsWithoutFilter.findIndex(i => i.KPIFieldName == 'Color_NONMSL') + let isColor_NONMSLObj = isColor_NONMSLIndex >= 0 ? AllKPIFieldsWithoutFilter[isColor_NONMSLIndex] : {}; + let isColor_NONMSLEnable = isColor_NONMSLIndex >= 0 ? isColor_NONMSLObj['KPIFieldEnable'] : false; + let Color_NONMSL = isColor_NONMSLEnable && isColor_NONMSLIndex >= 0 ? isColor_NONMSLObj['KPIFieldDisplayName'] : "" + + let isColor_CompetitionIndex = AllKPIFieldsWithoutFilter.findIndex(i => i.KPIFieldName == 'Color_Competition') + let isColor_CompetitionObj = isColor_CompetitionIndex >= 0 ? AllKPIFieldsWithoutFilter[isColor_CompetitionIndex] : {}; + let isColor_CompetitionEnable = isColor_CompetitionIndex >= 0 ? isColor_CompetitionObj['KPIFieldEnable'] : false; + let Color_Competition = isColor_CompetitionEnable && isColor_CompetitionIndex >= 0 ? isColor_CompetitionObj['KPIFieldDisplayName'] : "" + console.log("Color_MSL----", Color_MSL, Color_NONMSL, Color_Competition) + + let COMPStockAllow_Index = AllKPIFields.findIndex(i => i.KPIFieldName == 'COMPStockAllow'); + let COMPStockAllow_Obj = COMPStockAllow_Index >= 0 ? AllKPIFields[COMPStockAllow_Index] : {}; + let isCOMPStockAllow = COMPStockAllow_Index >= 0 ? COMPStockAllow_Obj['KPIFieldEnable'] : false; + let ShowCompetionSku = AllKPIFields?.findIndex((i) => i.KPIFieldName == "ShowCompetionSku"); + let ShowCompetionObj = ShowCompetionSku >= 0 ? AllKPIFields[ShowCompetionSku] : {}; + let ShowCompetionSkuNoSplitArr = ShowCompetionObj?.KPIFieldDisplayName?.split(",") || [] + const isCompetitorValues = ShowCompetionSkuNoSplitArr; + let isCompetitorClause = !isCompetitorValues || isCompetitorValues.length === 0 ? "p.IsCompetitor = 0" : `p.IsCompetitor IN (${isCompetitorValues.join(",")})`; + + try { + const menuQuery = `SELECT DISTINCT p.IsCompetitor, m.MSL FROM Product_Master p INNER JOIN Mapping_ProductAssortmentStorewise m ON p.ProductId = m.ProductId INNER JOIN Master_Category mc ON mc.CategoryId = p.CategoryId + WHERE m.StoreId = '${storeData?.StoreId}' ${isCOMPStockAllow ? '' : `AND ${isCompetitorClause}`}`; + + const result = await new Promise((resolve, reject) => { + db.transaction(txn => { + txn.executeSql( + menuQuery, [], + (txn2, txnres) => { + const len = txnres.rows.length; + let isMSLProduct = false, isNonMSLProduct = false, isCompProduct = false; + for (let i = 0; i < len; i++) { + let msls = txnres.rows.item(i); + console.log("msls------------", msls) + if (msls?.MSL === 1 && Color_MSL !== "") { + isMSLProduct = true; + } + if (msls?.MSL === 0 && Color_NONMSL !== "") { + isNonMSLProduct = true; + } + if (msls?.IsCompetitor === 1 && Color_Competition !== "") { + isCompProduct = true; + } + } + resolve({ + Color_MSL, + isMSLProduct, + Color_NONMSL, + isNonMSLProduct, + Color_Competition, + isCompProduct + }); + }, (txn, err) => { + console.error('DB error:', err); + reject(err); + return true; + } + ); + }); + }); + + return result; + + } catch (e) { + console.log("Error", e); + return { + Color_MSL, + isMSLProduct: false, + Color_NONMSL, + isNonMSLProduct: false, + Color_Competition, + isCompProduct: false + }; + } + }; + + function ThreeColorIndicator() { + return ( + + {MSLDataInfo?.isMSLProduct && ( + + + MSL + + )} + + {MSLDataInfo?.isNonMSLProduct && ( + + + Non-MSL + + )} + + {MSLDataInfo?.isCompProduct && ( + + + Comp + + )} + + + ); + }; + + + function _renderStocks() { + let isExpStockIndex = KPIFields.findIndex(i => i.KPIFieldName == 'ExpiredStock') + let isExpStockPIObj = isExpStockIndex >= 0 ? KPIFields[isExpStockIndex] : {}; + let isExpStockEnable = isExpStockIndex >= 0 ? isExpStockPIObj['KPIFieldEnable'] : true; + + let ShowSubCatImageIndex = KPIFields.findIndex(i => i.KPIFieldName == 'ShowSubCatImage') + let ShowSubCatImageObj = ShowSubCatImageIndex >= 0 ? KPIFields[ShowSubCatImageIndex] : {}; + let ShowSubCatImageEnable = ShowSubCatImageIndex >= 0 ? ShowSubCatImageObj['KPIFieldEnable'] : true; + + let isExpStock1Index = KPIFields.findIndex(i => i.KPIFieldName == 'ExpiryStock1') + let isExpStock1PIObj = isExpStock1Index >= 0 ? KPIFields[isExpStock1Index] : {}; + let isExpStock1Enable = isExpStock1Index >= 0 ? isExpStock1PIObj['KPIFieldEnable'] : false; + let isExpStock1DisplayName = isExpStock1Index >= 0 ? isExpStock1PIObj['KPIFieldDisplayName'] : "ExpStock 1"; + + let isExpStock2Index = KPIFields.findIndex(i => i.KPIFieldName == 'ExpiryStock2') + let isExpStock2PIObj = isExpStock2Index >= 0 ? KPIFields[isExpStock2Index] : {}; + let isExpStock2Enable = isExpStock2Index >= 0 ? isExpStock2PIObj['KPIFieldEnable'] : false; + let isExpStock2DisplayName = isExpStock2Index >= 0 ? isExpStock2PIObj['KPIFieldDisplayName'] : "ExpStock 2"; + + let isExpStock3Index = KPIFields.findIndex(i => i.KPIFieldName == 'ExpiryStock3') + let isExpStock3PIObj = isExpStock3Index >= 0 ? KPIFields[isExpStock3Index] : {}; + let isExpStock3Enable = isExpStock3Index >= 0 ? isExpStock3PIObj['KPIFieldEnable'] : false; + let isExpStock3DisplayName = isExpStock3Index >= 0 ? isExpStock3PIObj['KPIFieldDisplayName'] : "ExpStock 3"; + + let isExpStock4Index = KPIFields.findIndex(i => i.KPIFieldName == 'ExpiryStock4') + let isExpStock4PIObj = isExpStock4Index >= 0 ? KPIFields[isExpStock4Index] : {}; + let isExpStock4Enable = isExpStock4Index >= 0 ? isExpStock4PIObj['KPIFieldEnable'] : false; + let isExpStock4DisplayName = isExpStock4Index >= 0 ? isExpStock4PIObj['KPIFieldDisplayName'] : "ExpStock 4"; + + let isStockCalculateIndex = KPIFields.findIndex(i => i.KPIFieldName == 'StockCalculate') + let isStockCalculatePIObj = isStockCalculateIndex >= 0 ? KPIFields[isStockCalculateIndex] : {}; + let isStockCalculateEnable = isStockCalculateIndex >= 0 ? isStockCalculatePIObj['KPIFieldEnable'] : false; + + let isDefaultStockIndex = KPIFields.findIndex(i => i.KPIFieldName == 'DefaultStockValue') + let isDefaultStockPIObj = isDefaultStockIndex >= 0 ? KPIFields[isDefaultStockIndex] : {}; + let isDefaultStockEnable = isDefaultStockIndex >= 0 ? isDefaultStockPIObj['KPIFieldEnable'] : false; + let isDefaultStockValue = isDefaultStockEnable ? "0" : ""; + + + let isColor_MSLIndex = KPIFieldsWithoutFilter.findIndex(i => i.KPIFieldName == 'Color_MSL') + let isColor_MSLObj = isColor_MSLIndex >= 0 ? KPIFieldsWithoutFilter[isColor_MSLIndex] : {}; + let isColor_MSLEnable = isColor_MSLIndex >= 0 ? isColor_MSLObj['KPIFieldEnable'] : false; + let Color_MSL = isColor_MSLEnable && isColor_MSLIndex >= 0 ? isColor_MSLObj['KPIFieldDisplayName'] : "" + + let isColor_NONMSLIndex = KPIFieldsWithoutFilter.findIndex(i => i.KPIFieldName == 'Color_NONMSL') + let isColor_NONMSLObj = isColor_NONMSLIndex >= 0 ? KPIFieldsWithoutFilter[isColor_NONMSLIndex] : {}; + let isColor_NONMSLEnable = isColor_NONMSLIndex >= 0 ? isColor_NONMSLObj['KPIFieldEnable'] : false; + let Color_NONMSL = isColor_NONMSLEnable && isColor_NONMSLIndex >= 0 ? isColor_NONMSLObj['KPIFieldDisplayName'] : "" + + let isColor_CompetitionIndex = KPIFieldsWithoutFilter.findIndex(i => i.KPIFieldName == 'Color_Competition') + let isColor_CompetitionObj = isColor_CompetitionIndex >= 0 ? KPIFieldsWithoutFilter[isColor_CompetitionIndex] : {}; + let isColor_CompetitionEnable = isColor_CompetitionIndex >= 0 ? isColor_CompetitionObj['KPIFieldEnable'] : false; + let Color_Competition = isColor_CompetitionEnable && isColor_CompetitionIndex >= 0 ? isColor_CompetitionObj['KPIFieldDisplayName'] : "" + console.log("Color_MSL----", Color_MSL, Color_NONMSL, Color_Competition) + + const getBackgroundStyle = (skus) => { + if (skus?.MSL && skus?.MSL === 1 && skus?.IsCompetitor === 0 && Color_MSL !== "") { + return { backgroundColor: Color_MSL }; + } + if (skus?.MSL === 0 && skus?.IsCompetitor === 0 && Color_NONMSL !== "") { + return { backgroundColor: Color_NONMSL }; + } + if (skus?.IsCompetitor === 1 && Color_Competition !== "") { + return { backgroundColor: Color_Competition }; + } + + return null; + }; + + return ( + + { + const cat = item; + const catIndex = index; + const cindex = catImages.findIndex(i => i.CategoryId == item.CategoryId); + const cimgName = cindex >= 0 ? (catImages[cindex] ? catImages[cindex].ImageName : '') : ''; + const cimgPath = cindex >= 0 ? (catImages[cindex] ? catImages[cindex].ImagePath : '') : ''; + const showIMg = cimgPath != '' && cimgPath != null; + + // get error field brand id + let EF_brand = errorfield.EF_brand != null ? errorfield.EF_brand : {}; + let error_bid = EF_brand.CategoryId || ''; + let EF_ImageKey = errorfield.EF_ImageKey || ''; + + let errorStyle_Image1 = error && error_bid == cat.CategoryId && EF_ImageKey == 'Image1' ? customStyle.error_CatImage2 : {}; + + return ( + + + + {item.CategoryName} + + {ShowSubCatImageEnable == true && + + + {!showIMg ? + { openCamera(item) }}> + + : showIMg ? + { OpenImgModal(cimgPath, item) }}> + + : null + } + + } + + + { + + { + const skus = item; + const sku_index = index; + let calVal = 0; + let thisCatSkuData_i = SKUStockData.findIndex(i => i.CategoryId == cat.CategoryId && i.ProductId == skus.ProductId); + let thisCatSkuData = thisCatSkuData_i >= 0 ? (SKUStockData[thisCatSkuData_i] || {}) : {}; + let stock = thisCatSkuData.Stock != null ? thisCatSkuData.Stock : ''; + let ex_stock = thisCatSkuData.ExpiryStock != null ? thisCatSkuData.ExpiryStock : ''; + + let ex_stock1 = thisCatSkuData.ExpiryStock1 != null ? thisCatSkuData.ExpiryStock1 : ''; + let ex_stock2 = thisCatSkuData.ExpiryStock2 != null ? thisCatSkuData.ExpiryStock2 : ''; + let ex_stock3 = thisCatSkuData.ExpiryStock3 != null ? thisCatSkuData.ExpiryStock3 : ''; + let ex_stock4 = thisCatSkuData.ExpiryStock4 != null ? thisCatSkuData.ExpiryStock4 : ''; + + if (isStockCalculateEnable) { + calVal = parseInt(ex_stock1 || 0) + parseInt(ex_stock2 || 0) + parseInt(ex_stock3 || 0) + parseInt(ex_stock4 || 0) + } + // get error field product id + let EF_product = errorfield.EF_product != null ? errorfield.EF_product : {}; + let error_pid = EF_product.ProductId || ''; + let EF_InputKey = errorfield.EF_InputKey; + let EF_InputKey2 = errorfield.EF_InputKey2; + let show_errorhere = error_bid == cat.CategoryId && error_pid == skus.ProductId; + let errorStyle_ST = (error && show_errorhere && EF_InputKey == 'input1_' ? customStyle.stk_inptSTyle_error : {}); + let errorStyle_EXPS = (error && show_errorhere && EF_InputKey2 == 'input2_' ? customStyle.stk_inptSTyle_error : {}); + let error_HInputKeyEx1 = (error && show_errorhere && errorfield.error_HInputKeyEx1 == 'input1_' ? customStyle.stk_inptSTyle_error : {}); + let error_HInputKeyEx2 = (error && show_errorhere && errorfield.error_HInputKeyEx2 == 'input2_' ? customStyle.stk_inptSTyle_error : {}); + let error_HInputKeyEx3 = (error && show_errorhere && errorfield.error_HInputKeyEx3 == 'input3_' ? customStyle.stk_inptSTyle_error : {}); + let error_HInputKeyEx4 = (error && show_errorhere && errorfield.error_HInputKeyEx4 == 'input4_' ? customStyle.stk_inptSTyle_error : {}); + + + return ( + + {/* {skus.ProductName + " - "+skus.ArticleCode } */} + + + {skus.ArticleCode && skus.ArticleCode.trim() !== "" + ? `${skus.ProductName} [${skus.ArticleCode}]` + : skus.ARTICLE_CODE && skus.ARTICLE_CODE.trim() !== "" + ? `${skus.ProductName} [${skus.ARTICLE_CODE}]` + : skus.ProductName} + + + {isStockCalculateEnable == true && + + + {"Total Stock"} + + + + } + {isExpStockEnable == true && isStockCalculateEnable != true && + + + Stock + { inputRefs.current['input1_' + cat.CategoryId + '_' + skus.ProductId] = reff; }} + style={[customStyle.openStk_prd_inputStyle, customStyle.openStk_prd_inputShort, errorStyle_ST]} + placeholder="" + // defaultValue={stock+''||isDefaultStockValue} + autoComplete='off' + returnKeyType={(Platform.OS === 'ios') ? 'done' : 'next'} + editable={!disableEdit} + placeholderTextColor={PageTheme.$placeholder_color} + value={(stock != null ? stock + '' : isDefaultStockValue)} + maxLength={6} + keyboardType='number-pad' + blurOnSubmit={false} + onSubmitEditing={() => { focusToNext(cat, skus, '1') }} + // onBlur={(e) => {onChangeValidate(cat,cat_index,skus,sku_index)}} + onChangeText={(val) => { onStockValChange(cat, skus, val, 'Stock', 'numeric') }} + /> + + + Expiry Stock + { inputRefs.current['input2_' + cat.CategoryId + '_' + skus.ProductId] = reff; }} + style={[customStyle.openStk_prd_inputStyle, customStyle.openStk_prd_inputShort, errorStyle_EXPS]} + placeholder="" + autoComplete='off' + // defaultValue={ex_stock+'' || isDefaultStockValue} + returnKeyType={(Platform.OS === 'ios') ? 'done' : 'next'} + editable={!disableEdit} + placeholderTextColor={PageTheme.$placeholder_color} + value={(ex_stock + '' || isDefaultStockValue)} + maxLength={6} + keyboardType='number-pad' + blurOnSubmit={false} + onSubmitEditing={() => { focusToNext(cat, skus, '2') }} + onChangeText={(val) => { onStockValChange(cat, skus, val, 'ExpiryStock', 'numeric') }} + /> + + + } + + {isExpStockEnable == false && isStockCalculateEnable != true && + + + Stock + { inputRefs.current['input1_' + cat.CategoryId + '_' + skus.ProductId] = reff; }} + style={[customStyle.openStk_prd_inputStyle, customStyle.openStk_prd_flex_inputStyle, customStyle.openStk_prd_inputShort2, errorStyle_ST]} + placeholder="" + autoComplete='off' + // defaultValue={stock+''||isDefaultStockValue} + editable={!disableEdit} + placeholderTextColor={PageTheme.$placeholder_color} + value={(stock + '' || isDefaultStockValue)} + returnKeyType={(Platform.OS === 'ios') ? 'done' : 'next'} + maxLength={6} + keyboardType='number-pad' + blurOnSubmit={false} + onChangeText={(val) => { onStockValChange(cat, skus, val, 'Stock', 'numeric') }} + onSubmitEditing={() => { focusToNext(cat, skus, '1') }} + /> + + + } + + {isExpStock1Enable == true && + + + {isExpStock1DisplayName} + { inputRefs.current['input3_' + cat.CategoryId + '_' + skus.ProductId] = reff; }} + style={[customStyle.openStk_prd_inputStyle, customStyle.openStk_prd_flex_inputStyle, customStyle.openStk_prd_inputShort2, error_HInputKeyEx1]} + placeholder="" + autoComplete='off' + // defaultValue={ex_stock1+'' || isDefaultStockValue} + editable={!disableEdit} + placeholderTextColor={PageTheme.$placeholder_color} + value={(ex_stock1 + '' || isDefaultStockValue)} + returnKeyType={(Platform.OS === 'ios') ? 'done' : 'next'} + maxLength={6} + keyboardType='number-pad' + blurOnSubmit={false} + onChangeText={(val) => { onStockValChange(cat, skus, val, 'ExpiryStock1', 'numeric') }} + onSubmitEditing={() => { focusToNext(cat, skus, '3') }} + /> + + + } + {isExpStock2Enable == true && + + + {isExpStock2DisplayName} + { inputRefs.current['input4_' + cat.CategoryId + '_' + skus.ProductId] = reff; }} + style={[customStyle.openStk_prd_inputStyle, customStyle.openStk_prd_flex_inputStyle, customStyle.openStk_prd_inputShort2, error_HInputKeyEx2]} + placeholder="" + autoComplete='off' + // defaultValue={ex_stock2+'' ||isDefaultStockValue} + editable={!disableEdit} + placeholderTextColor={PageTheme.$placeholder_color} + value={(ex_stock2 + '' || isDefaultStockValue)} + returnKeyType={(Platform.OS === 'ios') ? 'done' : 'next'} + maxLength={6} + keyboardType='number-pad' + blurOnSubmit={false} + onChangeText={(val) => { onStockValChange(cat, skus, val, 'ExpiryStock2', 'numeric') }} + onSubmitEditing={() => { focusToNext(cat, skus, '4') }} + /> + + + } + {isExpStock3Enable == true && + + + {isExpStock3DisplayName} + { inputRefs.current['input5_' + cat.CategoryId + '_' + skus.ProductId] = reff; }} + style={[customStyle.openStk_prd_inputStyle, customStyle.openStk_prd_flex_inputStyle, customStyle.openStk_prd_inputShort2, error_HInputKeyEx3]} + placeholder="" + autoComplete='off' + // defaultValue={ex_stock3+'' ||isDefaultStockValue} + editable={!disableEdit} + placeholderTextColor={PageTheme.$placeholder_color} + value={(ex_stock3 + '' || isDefaultStockValue)} + returnKeyType={(Platform.OS === 'ios') ? 'done' : 'next'} + maxLength={6} + keyboardType='number-pad' + blurOnSubmit={false} + onChangeText={(val) => { onStockValChange(cat, skus, val, 'ExpiryStock3', 'numeric') }} + onSubmitEditing={() => { focusToNext(cat, skus, '5') }} + /> + + + } + {isExpStock4Enable == true && + + + {isExpStock4DisplayName} + { inputRefs.current['input6_' + cat.CategoryId + '_' + skus.ProductId] = reff; }} + style={[customStyle.openStk_prd_inputStyle, customStyle.openStk_prd_flex_inputStyle, customStyle.openStk_prd_inputShort2, error_HInputKeyEx4]} + placeholder="" + autoComplete='off' + // defaultValue={ex_stock4+'' ||isDefaultStockValue} + editable={!disableEdit} + placeholderTextColor={PageTheme.$placeholder_color} + value={(ex_stock4 + '' || isDefaultStockValue)} + returnKeyType={(Platform.OS === 'ios') ? 'done' : 'next'} + maxLength={6} + keyboardType='number-pad' + blurOnSubmit={false} + onChangeText={(val) => { onStockValChange(cat, skus, val, 'ExpiryStock4', 'numeric') }} + onSubmitEditing={() => { focusToNext(cat, skus, '6') }} + /> + + + } + + + + + ) + }} /> + } + + + ); + }} + /> + + ); + } + + async function executeQuery(query, defData) { + return await new Promise((resolve, reject) => { + db.transaction(async function (txn) { + await txn.executeSql(query, [], async function (txn2, txnres) { + if (txnres.rows.length > 0) { + let arr = defData; + for (var i = 0; i < txnres.rows.length; i++) { + let data = txnres.rows.item(i); + arr.push(data); + + if (i == txnres.rows.length - 1) { + resolve(arr); + } + } + } + else { + resolve(defData); + } + + }, function (txnE, txnerr) { console.log(txnerr); resolve(defData); },); + // setProcessing(false); + }); + }).catch((err) => { + console.log(err); + return defData; + }) + } + + return ( + + {processing && } + + {_OpenCaptureImage_Modal()} + {_render_Alert()} + { BgShowCamera(false); getImage(imgData) }} showCamera={showCamera} onHideCamera={() => { BgShowCamera(false); }} /> + + + + + { setSearchedItem(val); FilterStores(val, filtervalue) }} + /> + + { FilterStores(searchedItem, filtervalue) }}> + {/* {console.log('FilterStores',searchedItem)} */} + + + + + {/* "calling msl , non-msl and competitor products color indicator" */} + {!processing && ((MSLDataInfo?.isMSLProduct && MSLDataInfo?.Color_MSL !== "") + || (MSLDataInfo?.isNonMSLProduct && MSLDataInfo?.Color_NONMSL !== "") + || (MSLDataInfo?.isCompProduct && MSLDataInfo?.Color_Competition !== "")) && ThreeColorIndicator()} + + {Object.keys(storeData).length > 0 && _renderStocks()} + + {!disableEdit && { submitOpeningStock() }} />} + {disableEdit && { submitOpeningStock() }} disabled={true} colors={[PageTheme.$text_color_light, PageTheme.$text_color_light]} />} + + + + + ); +} + + +export default connect(mapStateToProps, mapDispatchToProps)(OpeningStock); \ No newline at end of file diff --git a/PerformicsSrc/src/screens/Order.js b/PerformicsSrc/src/screens/Order.js new file mode 100644 index 0000000..0bb7db7 --- /dev/null +++ b/PerformicsSrc/src/screens/Order.js @@ -0,0 +1,1338 @@ +import React, { useState, useEffect, useRef } from 'react'; +import Container from '../components/container'; +import { useRoute } from '@react-navigation/native'; +import { globalStyles, customStyles, GetPageTheme } from "../styles/Global"; +import { StatusBar, Image, TextInput, View, Text, ScrollView, TouchableOpacity, Platform, PermissionsAndroid, Animated, Alert, KeyboardAvoidingView, AppState, Keyboard, StyleSheet, Modal } from 'react-native'; +import { ReactReduxContext, connect, useSelector, useDispatch } from 'react-redux'; +import { mapStateToProps, mapDispatchToProps } from '../reducers/contextProvider'; +import SQLite from 'react-native-sqlite-2'; +import { notify } from '../components/notify'; +import moment from 'moment'; +import { checkMDStockScreenExists, getDownloadJson, getKPIFields, marktext1, marktext2, validateNumber } from '../controller/functions'; +import { get_item, set_item, clear_item } from '../components/localStorage'; +import { version, sloganline, appname, testurl, db, colors_Arr } from '../constants/constants'; +import CustomHeader from '../components/customHeader'; +import { Card, Menu, Switch } from 'react-native-paper'; +import { AntDesign, Fontisto, MaterialCommunityIcons } from '../components/icons'; +import { stat } from 'react-native-fs'; +import CustomLoader from '../components/CustomLoader'; +import LinearGradient from 'react-native-linear-gradient'; +import { AppTables } from '../constants/tableConstants'; +import { SvgXml } from 'react-native-svg'; +import { launchCamera, launchImageLibrary, CameraOptions } from 'react-native-image-picker'; +import * as RNFS from 'react-native-fs'; +import GradientButton from '../components/gradientButton'; +import cameraImg from '../assets/performics/camera_front_image.svg'; +import addImg from '../assets/performics/add_image.svg'; +import CustomModal from '../components/CustomModal'; +import { Q_GetAvailabityDefaultData, Q_MenuList } from '../constants/ConstantQueries'; +import { ConfirmSaveAlert } from '../components/alert'; +import DateTimePicker from '@react-native-community/datetimepicker'; +import { CustomPicker2 } from '../components/CustomPicker'; +import Icon from 'react-native-vector-icons/MaterialCommunityIcons'; +import SearchableSelector from '../components/SearchableSelector'; +import { KeyboardAwareFlatList } from 'react-native-keyboard-aware-scroll-view'; + +function Order(props) { + const route = useRoute(); + const ST = props.StaticText || {}; + + const PageTheme = GetPageTheme(props.DarkMode, route.name); + const customStyle = customStyles(props.DarkMode, route.name); + const animatedChoice = useRef(new Animated.Value(0)).current; + + const [processing, setProcessing] = useState(true); + const [loaderTitle, setLoaderTitle] = useState('loading...'); + const [isAdhocScreen, setIsAdhocScreen] = useState(false); + const [storeData, setStoreData] = useState({}); + const [currentMenu, setCurrentMenu] = useState({}); + const [brandData, setBrandData] = useState([]); + const [rerenderdata, setrerenderdata] = useState(0); + const [SKUStockData, setSKUStockData] = useState([]); + const [SystemPO, setSystemPO] = useState(''); + const [StorePO, setStorePO] = useState(''); + const [ContactName, setContactName] = useState(''); + const [ContactNo, setContactNo] = useState(''); + const [StockistDis, setStockistDis] = useState({}); + const [PODate, setPODate] = useState(''); + const [showRAllC_M, setShowRAllC_M] = useState(false); + const [PODate2, setPODate2] = useState(new Date()); + const [reason, setReason] = useState({}); + const [ShowDatePicker, setShowDatePicker] = useState(false); + const [KPIFields, setKPIFields] = useState([]); + const [showAlert, setShowAlert] = useState(false); + const [hasUnsavedChanges, setHasUnsavedChanges] = useState(false); + const [IsOrderPresent, setIsOrderPresent] = useState(0); + const [reasons_list, setReasons_list] = useState([]); + const [StockistList, setStockistList] = useState([]); + const [StockistNew, setStockistNew] = useState(''); + const [StockisId, setStockistId] = useState(''); + const [modalVisible, setModalVisible] = useState(false); + const [previewData, setPreviewData] = useState([]); + const [showMrpPtr, setShowMrpPtr] = useState('NA'); + const showMrpPtrRef = useRef('NA'); + + const hasUnsavedChangesRef = React.useRef(hasUnsavedChanges); + const WindowDataRef = React.useRef(SKUStockData); + const StoreIdRef = React.useRef(null); + const ScreenNameRef = React.useRef(''); + const IsOrderPresentRef = React.useRef(IsOrderPresent); + const SystemPORef = React.useRef(SystemPO); + const StorePORef = React.useRef(StorePO); + const ContactNameRef = React.useRef(ContactName); + const ContactNoRef = React.useRef(ContactNo); + const PODateRef = React.useRef(PODate); + const PODate2Ref = React.useRef(PODate2); + const showRAllC_MRef = React.useRef(showRAllC_M); + const StockistDisRef = React.useRef(StockistDis); + const inputRefs = useRef({}); + + const countries = ["Egypt", "Canada", "Australia", "Ireland", "Brazil", "England", "Dubai", "France", "Germany", "Saudi Arabia", "Argentina", "India"]; + const emojisWithIcons = [ + { StockistId: 'happy', StockistName: 'emoticon-happy-outline' }, + { StockistId: 'cool', StockistName: 'emoticon-cool-outline' }, + { StockistId: 'lol', StockistName: 'emoticon-lol-outline' }, + { StockistId: 'sad', StockistName: 'emoticon-sad-outline' }, + { StockistId: 'cry', StockistName: 'emoticon-cry-outline' }, + { StockistId: 'angry', StockistName: 'emoticon-angry-outline' }, + { StockistId: 'confused', StockistName: 'emoticon-confused-outline' }, + { StockistId: 'excited', StockistName: 'emoticon-excited-outline' }, + { StockistId: 'kiss', StockistName: 'emoticon-kiss-outline' }, + { StockistId: 'devil', StockistName: 'emoticon-devil-outline' }, + { StockistId: 'dead', StockistName: 'emoticon-dead-outline' }, + { StockistId: 'wink', StockistName: 'emoticon-wink-outline' }, + { StockistId: 'sick', StockistName: 'emoticon-sick-outline' }, + { StockistId: 'frown', StockistName: 'emoticon-frown-outline' }, + ]; + + const d1 = new Date(); + const d2 = moment(d1).format('MM/DD/YYYY'); + + useEffect(() => { + let params = props.route.params ? props.route.params : {}; + let storeData1 = params.storeData || {}; + let menu1 = params.menu || {}; + + let isAdhoc = params.isAdhoc || false; + setIsAdhocScreen(isAdhoc); + setStoreData(storeData1); + setCurrentMenu(menu1); + + let SPO = storeData1.StoreId + '_' + moment().format('YYYYMMDDHHmmss'); + BgSystemPO(SPO); + + StoreIdRef.current = storeData1.StoreId; + ScreenNameRef.current = menu1.ScreenName; + getData(storeData1, menu1); + + const AppStateSubscription = AppState.addEventListener('change', (pro) => { _handleAppStateChange(pro) }); + const unsubscribe = props.navigation.addListener('beforeRemove', onBeforeRemove); + + return function cleanup() { + AppStateSubscription.remove(); + return unsubscribe; + }; + }, []); + + const _handleAppStateChange = async (nextAppState) => { + if (nextAppState === 'background' && hasUnsavedChangesRef.current === true) { + let newData = { + storeBGData: WindowDataRef.current, + menuName: ScreenNameRef.current, + StoreId1: StoreIdRef.current, + IsOrderPre: IsOrderPresentRef.current, + BgSystemPOData: SystemPORef.current, + BgStorePOData: StorePORef.current, + BgContactNameData: ContactNameRef.current, + BgContactNoData: ContactNoRef.current, + BgPODateData: PODateRef.current, + BgPODate2Data: PODate2Ref.current, + BgshowRAllC_MData: showRAllC_MRef.current, + visiteDate: d2, + StockistDisBG: StockistDisRef.current + }; + let WindowsStr = JSON.stringify(newData); + await set_item('storeData', WindowsStr); + } + }; + + useEffect(() => { + const unsubscribe = props.navigation.addListener('beforeRemove', onBeforeRemove); + return unsubscribe; + }, [hasUnsavedChanges]); + + function onBeforeRemove(e) { + if (hasUnsavedChanges === true) { + e.preventDefault(); + onRemoveScreen(e); + } else { + return; + } + } + + function BgUnsavedChanges(val) { + hasUnsavedChangesRef.current = val; + setHasUnsavedChanges(val); + } + + function BgWindowData(val) { + WindowDataRef.current = val; + setSKUStockData(val); + } + + function BgSystemPO(val) { + SystemPORef.current = val; + setSystemPO(val); + } + + function BgStorePO(val) { + StorePORef.current = val; + setStorePO(val); + } + + function BgContactName(val) { + ContactNameRef.current = val; + setContactName(val); + } + + function BgContactNo(val) { + ContactNoRef.current = val; + setContactNo(val); + } + + function BgStockist(val) { + StockistDisRef.current = val; + setStockistDis(val); + } + + function BgPODate(val) { + PODateRef.current = val; + setPODate(val); + } + + function BgPODate2(val) { + PODate2Ref.current = val; + setPODate2(val); + } + + function BgshowRAllC_M(val) { + showRAllC_MRef.current = val; + setShowRAllC_M(val); + } + + function onRemoveScreen(e) { + Alert.alert( + "", + "Do you really want to exit the screen?", + [ + { + text: "Cancel", + onPress: () => { }, + style: "cancel" + }, + { + text: "OK", onPress: async () => { + BgUnsavedChanges(false); + await clear_item('storeData'); + props.navigation.dispatch(e.data.action); + } + } + ] + ); + } + + function updateShowMrpPtr(newVal) { + showMrpPtrRef.current = newVal; // instant + setShowMrpPtr(newVal); // triggers UI update + } + async function getData(storeData1, menu1) { + try { + let { StoreId, ChainId, StateId, StoreTypeId, StoreClassId, StoreCategoryId } = storeData1; + let AllKPIFields = await getKPIFields(menu1); + setKPIFields(AllKPIFields); + let PODateAutoFillIndex = KPIFields.findIndex(i => i.KPIFieldName == 'PODateAutoFill'); + let PODateAutoFillKPIObj = PODateAutoFillIndex >= 0 ? KPIFields[PODateAutoFillIndex] : {}; + let PODateAutoFillEnable = PODateAutoFillIndex >= 0 ? PODateAutoFillKPIObj['KPIFieldEnable'] : true; + if (PODateAutoFillEnable === true && (PODate === '' || PODate === null)) { + let d1 = moment().format('DD/MM/YYYY'); + setPODate(d1); + } + let isShowMrpPtrIndex = AllKPIFields.findIndex(i => i.KPIFieldName == 'ShowMRPPTR') + let isShowMrpPtrKPIObj = isShowMrpPtrIndex >= 0 ? AllKPIFields[isShowMrpPtrIndex] : {}; + let isShowMrpPtrEnable = isShowMrpPtrIndex >= 0 ? isShowMrpPtrKPIObj['KPIFieldEnable'] : false; + if (isShowMrpPtrEnable == true) { + let isShowMrpPtrName = isShowMrpPtrIndex >= 0 ? isShowMrpPtrKPIObj['KPIFieldDisplayName'] : 'NA'; + updateShowMrpPtr(isShowMrpPtrName) + } + console.log("tessdsdsd", showMrpPtrRef.current) + let storeBGData1 = [], bgStoreJson = {}, IsOrdPresent = false, isBgDataExists = false; + let windData = await get_item('storeData'); + if (windData != null && windData != '') { + let StoreJson = JSON.parse(windData); + let { storeBGData, menuName, StoreId1, visiteDate, IsOrderPre, + BgSystemPOData, + BgStorePOData, + BgContactNameData, + BgContactNoData, + BgPODateData, + BgPODate2Data, + BgshowRAllC_MData, StockistDisBG } = StoreJson; + if (menuName == menu1.ScreenName && StoreId1 == StoreId && visiteDate == d2) { + isBgDataExists = true; + storeBGData1 = storeBGData; + bgStoreJson = StoreJson; + IsOrdPresent = IsOrderPre; + BgStockist(StockistDisBG); + setIsOrderPresent(IsOrderPre); + IsOrderPresentRef.current = IsOrderPre; + var val1 = 0; + IsOrderPre == 1 ? val1 = 1 : ''; + if (animatedChoice != null) { + Animated.timing(animatedChoice, { + toValue: val1, + duration: 400, + useNativeDriver: false, + }).start(); + } + if (storeBGData.length > 0) { + BgWindowData(storeBGData); + } + if (BgSystemPOData != null && BgSystemPOData != '') { + BgSystemPO(BgSystemPOData); + } + BgStorePO(BgStorePOData); + BgContactName(BgContactNameData); + BgContactNo(BgContactNoData); + if (BgPODateData != null && BgPODateData != '') { + BgPODate(BgPODateData); + } + if (BgPODate2Data != null && BgPODate2Data != '') { + BgPODate2(BgPODate2Data); + } + BgshowRAllC_M(BgshowRAllC_MData); + BgUnsavedChanges(true); + } + } + + await db.transaction(async function (txn) { + let q3 = `Select OrderReasonId as ReasonId, OrderReason as Reason From Master_NonOrderReason`; + await txn.executeSql(q3, [], async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + let arr = []; + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + arr.push(data); + if (i == txnres2.rows.length - 1) { + setReasons_list(arr); + } + } + } + }, function (txnE, txnerr) { console.log(txnerr); },); + + let q4 = `Select StockistId, StockistName From Master_Stockist`; + await txn.executeSql(q4, [], async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + let arr = []; + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + arr.push(data); + if (i == txnres2.rows.length - 1) { + setStockistList(arr); + } + } + } + }, function (txnE, txnerr) { console.log(txnerr); },); + + let seletlist = `IS_PRESENT, REASON_ID, REASON`; + let q1 = `SELECT ${seletlist} from ${AppTables.ORDER}`; + txn.executeSql(q1, [], async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + let isReasonId = data.REASON_ID != null ? data.REASON_ID : 0; + let isReason = data?.REASON != null ? data?.REASON : ''; + let isPresent = data?.IS_PRESENT == 1 || data?.IS_PRESENT == '1'; + if (i == txnres2.rows.length - 1) { + if (!isPresent) { + setReason({ "label": isReason, "value": isReasonId }); + } + } + } + } + }, function (txnE, txnerr) { console.log(txnerr); },); + + let join = ` INNER JOIN Mapping_ProductAssortmentStorewise mp on p.ProductId=mp.ProductId `; + let q = ` SELECT DISTINCT p.CategoryId, p.CategoryName, '' as MSL from Product_Master p ${join} Where mp.StoreId ='${StoreId}' and (IsCompetitor='0' or IsCompetitor =0) order by p.CategorySequence`; + + console.log("CatQuery", q) + await txn.executeSql(q, [], async function (txn2, txnres) { + if (txnres.rows.length > 0) { + let arr = [], arr2 = []; + for (var i = 0; i < txnres.rows.length; i++) { + let data = txnres.rows.item(i); + let SKU_d = await getSKU(data, storeData1, IsOrdPresent, bgStoreJson, isBgDataExists); + let skulist = SKU_d['skulist'] || []; + let skuData = SKU_d['skuData'] || []; + data['skulist'] = skulist; + arr.push(data); + // console.log("arrrr",JSON.stringify(arr)) + arr2 = arr2.concat(skuData); + if (i == txnres.rows.length - 1) { + setBrandData(arr); + if (!isBgDataExists) { + BgWindowData(arr2); + } + setProcessing(false); + } + } + } else { + setProcessing(false); + } + }, function (txnE, txnerr) { console.log(txnerr); },); + }); + } catch (err) { + console.log(err); + } + } + + function onselectionChange3(option, keyLbl, keyVal, otherData) { + setReason(option); + } + + async function getSKU(cat, storeData1 = {}, IsOrdPresent = false, bgStoreJson = [], isBgDataExists = false) { + let defData = { 'skulist': [], 'skuData': [] }; + let { StoreId, ChainId, StateId, StoreTypeId, ExpiryStock, StoreClassId, StoreCategoryId } = storeData1; + let bgStoreDataLength = Object.keys(bgStoreJson).length; + return await new Promise(async (resolve, reject) => { + db.transaction(async function (txn) { + let seletlist = `p.ProductName, p.ProductId, ifnull(p.Mrp,0)as Mrp, ifnull(p.ptr,0)as ptr, o.IS_PRESENT, o.REASON_ID, o.REASON, o.STOCK, o.SYSTEM_PO, o.STORE_PO, o.PO_DATE, o.CONTACT_NAME, o.CONTACT_NO, o.STOCKIST_ID, o.STOCKIST_NAME`; + let join2 = `Left Outer Join ${AppTables.ORDER} o on o.PRODUCT_ID=p.ProductId and (o.CATEGORY_ID='${cat.CategoryId}' or o.CATEGORY_ID=${cat.CategoryId}) and o.STORE_ID='${StoreId}' and o.VISIT_DATE='${d2}'`; + let join = `inner join Mapping_ProductAssortmentStorewise m on p.ProductId=m.ProductId `; + let q1 = `SELECT ${seletlist} from Product_Master p ${join} ${join2} where m.StoreId='${StoreId}' and (p.CategoryId='${cat.CategoryId}' or p.CategoryId=${cat.CategoryId}) and (p.IsCompetitor='0' or p.IsCompetitor=0) order by p.ProductSequence `; + + console.log("sku_query", q1) + txn.executeSql(q1, [], async function (txn2, txnres) { + console.log("length", txnres.rows.length) + if (txnres.rows.length > 0) { + let arr = [], arr2 = [], isAdded = false; + for (var i = 0; i < txnres.rows.length; i++) { + let data = txnres.rows.item(i); + + let { SYSTEM_PO, STORE_PO, PO_DATE, IS_PRESENT, CONTACT_NAME, CONTACT_NO, STOCKIST_ID, STOCKIST_NAME } = data; + inputRefs.current['input1_' + cat.CategoryId + '_' + data.ProductId] = ''; + + data.ptr = showMrpPtrRef.current === 'PTR' ? data.ptr : data.Mrp + console.log("data-------", data.ptr, showMrpPtrRef.current) + arr.push(data); + let defData1 = { 'CategoryId': cat.CategoryId, 'ProductId': data.ProductId, 'Stock': data.STOCK, 'ProductName': data.ProductName, 'CategoryName': cat.CategoryName }; + arr2.push(defData1); + let isReasonId = data.REASON_ID != null ? data.REASON_ID : 0; + let isReason = data?.REASON != null ? data?.REASON : ''; + let isPresent = IS_PRESENT == 1 || IS_PRESENT == '1'; + if (isPresent && !isAdded) { + BgSystemPO(SYSTEM_PO); + BgStorePO(STORE_PO); + BgContactName(CONTACT_NAME); + BgContactNo(CONTACT_NO); + BgStockist(STOCKIST_NAME); + let d1 = moment(PO_DATE).format('DD/MM/YYYY'); + let d2 = new Date(PO_DATE); + BgPODate(d1); + BgPODate2(d2); + setStockistNew(STOCKIST_NAME); + setStockistId(STOCKIST_ID); + if (isBgDataExists) { + isPresent = IsOrdPresent == '1' || IsOrdPresent == 1 ? 1 : 0; + } + isAdded = true; + + Animated.timing(animatedChoice, { + toValue: isPresent, + duration: 400, + useNativeDriver: false, + }).start(); + IsOrderPresentRef.current = isPresent; + setIsOrderPresent(isPresent); + } + + if (i == txnres.rows.length - 1) { + defData['skulist'] = arr; + defData['skuData'] = arr2; + resolve(defData); + } + } + } else { + let isPresent = 0; + if (isBgDataExists) { + isPresent = IsOrdPresent == '1' || IsOrdPresent == 1 ? 1 : 0; + } + Animated.timing(animatedChoice, { + toValue: isPresent, + duration: 400, + useNativeDriver: false, + }).start(); + IsOrderPresentRef.current = isPresent; + setIsOrderPresent(isPresent); + + resolve(defData); + } + }, function (txnE, txnerr) { console.log(txnerr); setProcessing(false); resolve(defData); },); + }); + }).catch((err) => { + console.log('err:', err); + return defData; + }); + } + + async function focusToNext(cat, sku, type = '1') { + let activeKey = ''; + let arr = Object.keys(inputRefs.current); + + activeKey = 'input' + type + '_' + cat.CategoryId + '_' + sku.ProductId; + + let activeIndex = arr.indexOf(activeKey); + if (activeIndex < arr.length - 1) { + let nextKey = arr[++activeIndex]; + let nextRef = inputRefs.current[nextKey]; + nextRef.focus(); + } else { + return; + } + } + + async function submitData() { + let isValid = await validate(); + if (isValid) { + Keyboard.dismiss(); + if (IsOrderPresentRef.current == 1 && (showMrpPtr !== 'NA'||showMrpPtrRef.current!=='NA')) { + setModalVisible(true); // Show modal immediately + // Generate preview data + const preview = []; + brandData?.forEach(cat => { + (cat.skulist || []).forEach(sku => { + const skuData = SKUStockData.find(ci => ci.CategoryId === cat.CategoryId && ci.ProductId === sku.ProductId) || { Stock: '' }; + if (skuData?.Stock != '' && parseInt(skuData?.Stock) > 0) { + preview.push({ CategoryName: cat.CategoryName, ProductName: sku.ProductName, Stock: skuData.Stock || '', ptr: sku?.ptr }); + } + }); + }); + + setPreviewData(preview); // Update state with preview data + } else { + setShowAlert(true); + } + } + } + + async function saveData() { + BgUnsavedChanges(false); + setShowAlert(false); + setLoaderTitle('Saving Data...'); + setProcessing(true); + try { + let { StoreId, ChainId, StateId, StoreTypeId } = storeData; + await db.transaction(async function (txn) { + let q = `DELETE FROM ${AppTables.ORDER} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' `; + await txn.executeSql(q, [], async function (txn2, txnres) { + console.log('Order data deleted'); + }, function (txnE, txnerr) { console.log(txnerr); },); + }); + await db.transaction(async function (txn) { + var stock_values = ''; + let ReasonId = reason?.value != null ? reason?.value : 0; + let Reason = reason?.label != null ? reason?.label : ''; + if (IsOrderPresent == 1) { + let PO_date1_MDY = moment(PODate2).format('MM/DD/YYYY'); + for (var i = 0; i < SKUStockData.length; i++) { + let { CategoryId, ProductId, Stock } = SKUStockData[i]; + let catIndex = brandData.findIndex(a => a.CategoryId == CategoryId); + let cat = catIndex >= 0 ? brandData[catIndex] : {}; + let CategoryName = cat.CategoryName || ''; + let skulist = cat.skulist || []; + let skuItem_in = skulist.findIndex(b => b.ProductId == ProductId); + let skuItem = skuItem_in >= 0 ? skulist[skuItem_in] : {}; + + stock_values += stock_values != '' ? ' , ' : ''; + let stockValue = Stock != null && Stock !== '' && Stock !== 'undefined' ? Stock : '0'; + stock_values += ` ('${StoreId}', '${d2}', '${CategoryName}', '${CategoryId}', '${skuItem.ProductName}', '${ProductId}', '', '1', '${(stockValue || '0')}', '${SystemPO}', '${StorePO}', '${PO_date1_MDY}', '${ContactName}', '${ContactNo}', '${d2}', '', '0', '${StockistDis?.StockistId || StockisId}', '${StockistDis?.StockistName || StockistNew}') `; + } + } else { + stock_values += ` ('${StoreId}', '${d2}', '', '', '', '', '', '0', '', '', '', '', '', '', '${d2}', '${ReasonId}', '${Reason}', '${StockistDis?.StockistId || StockisId}', '${StockistDis?.StockistName || StockistNew}') `; + } + + let add_Stock = `INSERT INTO ${AppTables.ORDER} (STORE_ID, VISIT_DATE, CATEGORY, CATEGORY_ID, PRODUCT, PRODUCT_ID, MSL, IS_PRESENT, STOCK, SYSTEM_PO, STORE_PO, PO_DATE, CONTACT_NAME, CONTACT_NO, ADDED_DATE, REASON_ID, REASON, STOCKIST_ID, STOCKIST_NAME) VALUES ${stock_values} `; + await txn.executeSql(add_Stock, [], async function (txn2, txnres) { + console.log('Order added'); + clear_item('storeData'); + notify('Order updated successfully'); + setProcessing(false); + props.navigation.goBack(); + }, function (txnE, txnerr) { console.log(txnerr); setProcessing(false); notify('Cannot update order'); },); + }); + } catch (err) { + console.log(err); + } + } + + async function validate() { + let isValid = true; + + let ShowStorePOIndex = KPIFields.findIndex(i => i.KPIFieldName == 'ShowStorePO'); + let ShowStorePOKPIObj = ShowStorePOIndex >= 0 ? KPIFields[ShowStorePOIndex] : {}; + let ShowStorePOEnable = ShowStorePOIndex >= 0 ? ShowStorePOKPIObj['KPIFieldEnable'] : true; + let ShowStorePODis_Name = ShowStorePOIndex >= 0 ? ShowStorePOKPIObj['KPIFieldDisplayName'] : 'Store PO'; + + let ShowPODateIndex = KPIFields.findIndex(i => i.KPIFieldName == 'ShowPODate'); + let ShowPODateKPIObj = ShowPODateIndex >= 0 ? KPIFields[ShowPODateIndex] : {}; + let ShowPODateEnable = ShowPODateIndex >= 0 ? ShowPODateKPIObj['KPIFieldEnable'] : true; + let ShowPODateDis_Name = ShowPODateIndex >= 0 ? ShowPODateKPIObj['KPIFieldDisplayName'] : 'PO Date'; + + let PODateAutoFillIndex = KPIFields.findIndex(i => i.KPIFieldName == 'PODateAutoFill'); + let PODateAutoFillKPIObj = PODateAutoFillIndex >= 0 ? KPIFields[PODateAutoFillIndex] : {}; + let PODateAutoFillEnable = PODateAutoFillIndex >= 0 ? PODateAutoFillKPIObj['KPIFieldEnable'] : true; + + let ShowCNameIndex = KPIFields.findIndex(i => i.KPIFieldName == 'ShowContactName'); + let ShowCNameKPIObj = ShowCNameIndex >= 0 ? KPIFields[ShowCNameIndex] : {}; + let ShowCNameEnable = ShowCNameIndex >= 0 ? ShowCNameKPIObj['KPIFieldEnable'] : true; + let ShowCNameMand = ShowCNameIndex >= 0 && ShowCNameKPIObj['KPIMandatory'] != null ? (ShowCNameKPIObj['KPIMandatory'] == 1 || ShowCNameKPIObj['KPIMandatory'] == '1' ? true : false) : true; + let ShowCNameDis_Name = ShowCNameIndex >= 0 ? ShowCNameKPIObj['KPIFieldDisplayName'] : 'Contact Name'; + + let ShowCNoIndex = KPIFields.findIndex(i => i.KPIFieldName == 'ShowContactNumber'); + let ShowCNoKPIObj = ShowCNoIndex >= 0 ? KPIFields[ShowCNoIndex] : {}; + let ShowCNoEnable = ShowCNoIndex >= 0 ? ShowCNoKPIObj['KPIFieldEnable'] : true; + let ShowCNoMand = ShowCNoIndex >= 0 && ShowCNoKPIObj['KPIMandatory'] != null ? (ShowCNoKPIObj['KPIMandatory'] == 1 || ShowCNoKPIObj['KPIMandatory'] == '1' ? true : false) : true; + let ShowCNoDis_Name = ShowCNoIndex >= 0 ? ShowCNoKPIObj['KPIFieldDisplayName'] : 'Contact Number'; + + let ShowReasonIndex = KPIFields.findIndex(i => i.KPIFieldName == 'IsReasonEnable'); + let ShowReasonKPIObj = ShowReasonIndex >= 0 ? KPIFields[ShowReasonIndex] : {}; + let ShowReasonEnable = ShowReasonIndex >= 0 ? ShowReasonKPIObj['KPIFieldEnable'] : true; + + if (IsOrderPresent == true) { + if (ShowPODateEnable == true && PODateAutoFillEnable == false && (PODate == '' || PODate == null)) { + notify('Please enter ' + ShowPODateDis_Name + '!', 'SHORT'); + isValid = false; + } else if (ShowCNameEnable == true && ShowCNameMand == true && (ContactName == '' || ContactName == null)) { + notify('Please enter ' + ShowCNameDis_Name + '!', 'SHORT'); + isValid = false; + } else if (ShowCNoEnable == true && ShowCNoMand == true && (ContactNo == '' || ContactNo == null)) { + notify('Please enter ' + ShowCNoDis_Name + '!', 'SHORT'); + isValid = false; + } else if (ShowCNoEnable == true && ShowCNoMand == true && (ContactNo.length != 10)) { + notify('Please enter valid ' + ShowCNoDis_Name + '!', 'SHORT'); + isValid = false; + } + else if (!StockistDis || (typeof StockistDis === 'object' && (StockistDis.StockistId === '' || StockistDis.StockistId == null)) || (typeof StockistDis === 'string' && StockistDis.trim() === '')) { + notify('Please select Distributor name!', 'SHORT'); + isValid = false; + } else { + isValid = false + for (const item of brandData) { + const skulist = item.skulist || []; + + for (const skuItem of skulist) { + const skuData = SKUStockData.find( + (ci) => ci.CategoryId == item.CategoryId && ci.ProductId == skuItem.ProductId + ) || {}; + + const stockQty = parseInt(skuData?.Stock ?? 0, 10); + console.log("skuData?.Stock", skuData?.Stock) + if (stockQty > 0) { + isValid = true; // At least one SKU has quantity > 0 + break; // No need to check further + } + } + + if (isValid) break; // Stop outer loop if already valid + } + + if (!isValid) { + notify("Please enter Order Qty greater than zero for at least one SKU", "SHORT"); + } + } + } else if (ShowReasonEnable == true && (reason?.value == null || reason?.value == '' || reason?.value == 0)) { + notify('Please select reason', 'SHORT'); + isValid = false; + } + return isValid; + } + + function onConfirmRemoveAll() { + if (animatedChoice != null) { + Animated.timing(animatedChoice, { + toValue: 0, + duration: 400, + useNativeDriver: false, + }).start(); + } + IsOrderPresentRef.current = 0; + setIsOrderPresent(0); + BgUnsavedChanges(true); + BgStorePO(''); + BgContactName(''); + BgContactNo(''); + setSKUStockData([]); + BgshowRAllC_M(false); + } + + function onChoiceSelect(val, key) { + if (val == 0 && SKUStockData.length > 0) { + BgshowRAllC_M(true); + return; + } + var val1 = val == 1 ? 1 : 0; + if (animatedChoice != null) { + Animated.timing(animatedChoice, { + toValue: val1, + duration: 400, + useNativeDriver: false, + }).start(); + } + IsOrderPresentRef.current = val; + setIsOrderPresent(val); + BgUnsavedChanges(true); + if (val1 == 1) { + setReason({ "label": '', "value": 0 }); + } + if (val == 0) { + setSKUStockData([]); + } + } + + function onStockValChange(item, skuItem, val, key, type = '') { + if (val != '') { + let isValid = validateNumber(val, type); + if (!isValid) { + return; + } + } + + let allSKUData = SKUStockData; + let defData = { 'CategoryId': item.CategoryId, 'ProductId': skuItem.ProductId }; + const skud_index = allSKUData.findIndex(i => i.CategoryId == item.CategoryId && i.ProductId == skuItem.ProductId); + const skud = skud_index >= 0 ? (allSKUData[skud_index] || defData) : defData; + skud[key] = val; + + skud_index >= 0 ? allSKUData[skud_index] = skud : allSKUData.push(skud); + setSKUStockData(allSKUData); + BgUnsavedChanges(true); + setrerenderdata(!rerenderdata); + } + + function onSaveCancel() { + setShowAlert(false); + } + + function renderDatePicker() { + let today = new Date(); + let d1 = PODate2 != null && PODate2 != '' ? PODate2 : new Date(); + return ( + { + if (selectedDate != null) { + let d1 = moment(selectedDate).format('DD/MM/YYYY'); + setShowDatePicker(false); + BgPODate2(selectedDate); + BgPODate(d1); + } + }} + /> + ); + } + + function _render_PresentQ() { + let xpos = 0; + if (animatedChoice != null) { + xpos = animatedChoice.interpolate({ + inputRange: [0, 1], + outputRange: [0, -75], + }); + } + + let ShowSystemPOIndex = KPIFields.findIndex(i => i.KPIFieldName == 'ShowSystemPO'); + let ShowSystemPOKPIObj = ShowSystemPOIndex >= 0 ? KPIFields[ShowSystemPOIndex] : {}; + let ShowSystemPOEnable = ShowSystemPOIndex >= 0 ? ShowSystemPOKPIObj['KPIFieldEnable'] : true; + let ShowSystemPODis_Name = ShowSystemPOIndex >= 0 ? ShowSystemPOKPIObj['KPIFieldDisplayName'] : 'System PO'; + + let ShowStorePOIndex = KPIFields.findIndex(i => i.KPIFieldName == 'ShowStorePO'); + let ShowStorePOKPIObj = ShowStorePOIndex >= 0 ? KPIFields[ShowStorePOIndex] : {}; + let ShowStorePOEnable = ShowStorePOIndex >= 0 ? ShowStorePOKPIObj['KPIFieldEnable'] : true; + let ShowStorePODis_Name = ShowStorePOIndex >= 0 ? ShowStorePOKPIObj['KPIFieldDisplayName'] : 'Store PO'; + + let ShowPODateIndex = KPIFields.findIndex(i => i.KPIFieldName == 'ShowPODate'); + let ShowPODateKPIObj = ShowPODateIndex >= 0 ? KPIFields[ShowPODateIndex] : {}; + let ShowPODateEnable = ShowPODateIndex >= 0 ? ShowPODateKPIObj['KPIFieldEnable'] : true; + let ShowPODateDis_Name = ShowPODateIndex >= 0 ? ShowPODateKPIObj['KPIFieldDisplayName'] : 'PO Date'; + + let PODateAutoFillIndex = KPIFields.findIndex(i => i.KPIFieldName == 'PODateAutoFill'); + let PODateAutoFillKPIObj = PODateAutoFillIndex >= 0 ? KPIFields[PODateAutoFillIndex] : {}; + let PODateAutoFillEnable = false; //PODateAutoFillIndex >= 0 ? PODateAutoFillKPIObj['KPIFieldEnable'] : true; + + let ShowCNameIndex = KPIFields.findIndex(i => i.KPIFieldName == 'ShowContactName'); + let ShowCNameKPIObj = ShowCNameIndex >= 0 ? KPIFields[ShowCNameIndex] : {}; + let ShowCNameEnable = ShowCNameIndex >= 0 ? ShowCNameKPIObj['KPIFieldEnable'] : true; + let ShowCNameDis_Name = ShowCNameIndex >= 0 ? ShowCNameKPIObj['KPIFieldDisplayName'] : 'Contact Name'; + + let ShowCNoIndex = KPIFields.findIndex(i => i.KPIFieldName == 'ShowContactNumber'); + let ShowCNoKPIObj = ShowCNoIndex >= 0 ? KPIFields[ShowCNoIndex] : {}; + let ShowCNoEnable = ShowCNoIndex >= 0 ? ShowCNoKPIObj['KPIFieldEnable'] : true; + let ShowCNoDis_Name = ShowCNoIndex >= 0 ? ShowCNoKPIObj['KPIFieldDisplayName'] : 'Contact Number'; + + let ShowReasonIndex = KPIFields.findIndex(i => i.KPIFieldName == 'IsReasonEnable'); + let ShowReasonKPIObj = ShowReasonIndex >= 0 ? KPIFields[ShowReasonIndex] : {}; + let ShowReasonEnable = ShowReasonIndex >= 0 ? ShowReasonKPIObj['KPIFieldEnable'] : true; + + const calculateTotalValue = () => { + let total = 0; + brandData.forEach((cat) => { + (cat.skulist || []).forEach((sku) => { + const thisCatSkuDataIndex = SKUStockData.findIndex( + (i) => i.CategoryId === cat.CategoryId && i.ProductId === sku.ProductId + ); + const stock = + thisCatSkuDataIndex >= 0 + ? SKUStockData[thisCatSkuDataIndex].Stock || 0 + : 0; + total += sku?.ptr * (parseFloat(stock) || 0); + }); + }); + return total.toFixed(2); + }; + + const calculateTotalStockQty = () => { + let totalStockQty = 0; + + brandData.forEach((cat) => { + (cat.skulist || []).forEach((sku) => { + const thisCatSkuDataIndex = SKUStockData.findIndex( + (i) => i.CategoryId === cat.CategoryId && i.ProductId === sku.ProductId + ); + + // ✅ Get Stock Value + const stock = + thisCatSkuDataIndex >= 0 + ? parseFloat(SKUStockData[thisCatSkuDataIndex].Stock) || 0 + : 0; + + // ✅ Add Stock Qty only + totalStockQty += stock; + }); + }); + + return totalStockQty; + }; + + + return ( + + + {'Is Present'} + + + + + { onChoiceSelect(1, 'isPresent') }}> + Yes + + { onChoiceSelect(0, 'isPresent') }}> + No + + + + + {IsOrderPresentRef.current == 1 ? + + { + console.log('Prev. Orders clicked'); + // 👉 put your navigation or action here + props.navigation.navigate("PrevOrders", { storeData }) + }} + > + + Prev. Orders + + + + : <>} + + + {(IsOrderPresent != '1' && ShowReasonEnable == true) && + + {ST.SelectReason} + {} + + } + + {IsOrderPresent != '0' && (showMrpPtr !== 'NA'|| showMrpPtrRef.current!=='NA') && ( + + + Total values : Rs {calculateTotalValue()} + + + Total Qty : {calculateTotalStockQty()} + + + )} + + {(IsOrderPresent == true && Object.keys(storeData).length > 0) && + + + {(ShowSystemPOEnable == true) && + + + {ShowSystemPODis_Name} + {SystemPO} + + + } + {(ShowStorePOEnable == true) && + + + {ShowStorePODis_Name} + { BgStorePO(val) }} + /> + + + } + {(ShowPODateEnable == true) && + + + {ShowPODateDis_Name} + {PODateAutoFillEnable == true && + {PODate}} + {PODateAutoFillEnable != true && + + {PODate} + { setShowDatePicker(true); }}> + + + } + {(ShowDatePicker == true && PODateAutoFillEnable != true) && + renderDatePicker() + } + + + } + {(ShowCNameEnable == true) && + + + {ShowCNameDis_Name} + { BgContactName(val) }} + /> + + + } + {(ShowCNoEnable == true) && + + + {ShowCNoDis_Name} + { BgContactNo(val) }} + /> + + + } + + {ShowCNoEnable === true && ( + + + + {"Distributor List"} + + + {(() => { + const formattedList = StockistList.map(item => ({ + StockistName: item.StockistName, + StockistId: item.StockistId + })); + const matched = formattedList.find(item => item.StockistName === StockistDis); + return ( + + ); + })()} + + + )} + + {rerenderdata == rerenderdata && brandData.length > 0 && ( + `category-${item.CategoryId.toString() || index}`} + renderItem={({ item: cat, index: catIndex }) => ( + + + + + {cat.CategoryName} + + + + + + {console.log("cat?.skulist", cat?.skulist.length)} + {( + `sku-${item.ProductId || index}`} + renderItem={({ item: skus, index: skuIndex }) => { + const thisCatSkuDataIndex = SKUStockData.findIndex((i) => i.CategoryId === cat.CategoryId && i.ProductId === skus.ProductId); + const thisCatSkuData = + thisCatSkuDataIndex >= 0 + ? SKUStockData[thisCatSkuDataIndex] || {} + : {}; + const stock = + thisCatSkuData.Stock != null ? thisCatSkuData.Stock : ''; + + return ( + + + + {skus.ProductName} + + {(showMrpPtr !== 'NA'|| showMrpPtrRef.current!=='NA') && ( + + {showMrpPtr + " : " + skus?.ptr} + + )} + + + + + + + Order Qty + + { + inputRefs.current[ + `input1_${cat.CategoryId}_${skus.ProductId}` + ] = reff; + }} + style={[ + customStyle.openStk_prd_inputStyle, + customStyle.order_taking_input, + ]} + placeholder="" + autoComplete="off" + placeholderTextColor={PageTheme.$placeholder_color} + value={stock + '' || ''} + keyboardType="number-pad" + returnKeyType={Platform.OS === 'ios' ? 'done' : 'next'} + blurOnSubmit={false} + onSubmitEditing={() => { + focusToNext(cat, skus, '1'); + }} + onChangeText={(val) => { + onStockValChange(cat, skus, val, 'Stock', 'numeric'); + }} + /> + + + {(showMrpPtr !== 'NA'|| showMrpPtrRef.current!=='NA') && ( + + Order value: + + {Number.isInteger(skus?.ptr * stock) + ? skus?.ptr * stock + : (skus?.ptr * stock).toFixed(2)} + + + )} + + + ); + }} + /> + )} + + + )} + /> + )} + + + } + + ); + } + + const handleUpdateStock = (item, newStock) => { + let updatedData = previewData.map(data => + data.ProductName === item.ProductName ? { ...data, Stock: newStock } : data + ); + setPreviewData(updatedData); + + let allSKUData = [...SKUStockData]; + let defData = { 'CategoryId': item.CategoryId, 'ProductId': item.ProductId }; + const skud_index = allSKUData.findIndex(i => i.CategoryId === item.CategoryId && i.ProductId === item.ProductId); + const skud = skud_index >= 0 ? (allSKUData[skud_index] || defData) : defData; + skud['Stock'] = newStock; + + skud_index >= 0 ? allSKUData[skud_index] = skud : allSKUData.push(skud); + setSKUStockData(allSKUData); + BgUnsavedChanges(true); + }; + + const renderModalContent = () => { + // ✅ Calculate Totals + const totalStockQty = previewData.reduce((sum, item) => sum + parseFloat(item?.Stock || 0), 0); + const totalAmount = previewData.reduce( + (sum, item) => sum + (parseFloat(item?.Stock || 0) * parseFloat(item?.ptr || 0)), + 0 + ); + + return ( + + Preview Order Data + + Qty + Value + + + `preview-${index}`} + renderItem={({ item }) => ( + + {item.ProductName} + + + handleUpdateStock(item, val)} + /> + + {(parseFloat(item?.Stock || 0) * parseFloat(item?.ptr || 0)).toFixed(2)} + + + + )} + /> + + {/* ✅ Totals Section */} + + Total Qty: {totalStockQty} + Total Amount: {totalAmount.toFixed(2)} + + + + { setModalVisible(false); setShowAlert(true); }} + > + OK + + + + ); + }; + + + return ( + + {processing && } + + {ConfirmSaveAlert(props, showAlert, onSaveCancel, saveData)} + {ConfirmSaveAlert(props, showRAllC_M, () => { BgshowRAllC_M(false) }, onConfirmRemoveAll, 'Do you really want to remove all Order Data?')} + + + {_render_PresentQ()} + + { submitData() }} /> + + + + setModalVisible(false)} + animationType="slide" + > + + + {renderModalContent()} + + + + + ); +} + +const styles = StyleSheet.create({ + modalBackground: { + flex: 1, + backgroundColor: 'rgba(0, 0, 0, 0.5)', + justifyContent: 'center', + alignItems: 'center', + }, + modalContainer: { + paddingVertical: 16, + paddingHorizontal: 10, // ✅ Reduce padding from left/right + backgroundColor: '#fff', + borderRadius: 10, + maxHeight: '100%', + width: '100%', + }, + modalTitle: { + fontSize: 18, + fontWeight: 'bold', + marginBottom: 10, + textAlign: 'center', + marginLeft: 20, + marginRight: 20 + }, + modalItem: { + flexDirection: 'row', + justifyContent: 'space-between', + paddingVertical: 10, + borderBottomWidth: 1, + borderBottomColor: '#ccc', + }, + modalProduct: { + fontSize: 14, + }, + modalButtons: { + flexDirection: 'row', + justifyContent: 'space-around', + marginTop: 20, + }, + modalButton: { + padding: 15, + backgroundColor: '#0066cc', + borderRadius: 50, + width: '50%' + }, + modalButtonText: { + color: '#fff', + fontWeight: 'bold', + textAlign: 'center' + }, + + modalItemRow: { + flexDirection: 'column', + backgroundColor: '#F9F9F9', + borderRadius: 10, + marginBottom: 10, + padding: 8, + borderColor: '#ccc', + marginHorizontal: 10, + }, + + qtyRow: { + flexDirection: 'row', + alignItems: 'center', + justifyContent: 'space-between', + + }, + + modalInput: { + padding: 8, + width: 60, + alignContent: 'center', + textAlign: 'center', + color: 'black' + }, + calculatedValue: { + fontWeight: 'bold', + color: '#333', + minWidth: 60, + }, + totalsContainer: { + marginTop: 10, + paddingVertical: 8, + borderTopWidth: 1, + borderColor: '#ccc', + flexDirection: 'row', + justifyContent: 'space-between', + paddingHorizontal: 5, + }, + + totalText: { + fontWeight: 'bold', + fontSize: 16, + color: '#000', + }, +}); + +export default connect(mapStateToProps, mapDispatchToProps)(Order); \ No newline at end of file diff --git a/PerformicsSrc/src/screens/OrderDetail.js b/PerformicsSrc/src/screens/OrderDetail.js new file mode 100644 index 0000000..fa10c46 --- /dev/null +++ b/PerformicsSrc/src/screens/OrderDetail.js @@ -0,0 +1,912 @@ +import React, { useState, useEffect, useRef } from 'react'; +import Container from '../components/container'; +import { useRoute } from '@react-navigation/native'; +import { globalStyles, customStyles, GetPageTheme } from "../styles/Global"; +import { + StatusBar, Image, TextInput, View, Text, ScrollView, TouchableOpacity, Platform, PermissionsAndroid, StyleSheet, Modal, + FlatList, Animated, Alert, KeyboardAvoidingView, AppState, Keyboard, ActionSheetIOS +} from 'react-native'; +import { ReactReduxContext, connect, useSelector, useDispatch } from 'react-redux'; +import { mapStateToProps, mapDispatchToProps } from '../reducers/contextProvider'; +import SQLite from 'react-native-sqlite-2'; +import { notify } from '../components/notify'; +import moment from 'moment'; +import { + checkMDStockScreenExists, getDownloadJson, getKPIFields, getServerDT, marktext1, marktext2, + restore_ImageWithMetaData, validateNumber +} from '../controller/functions'; +import { get_item, set_item, clear_item } from '../components/localStorage'; +import { version, sloganline, appname, testurl, db, colors_Arr, ImageFolderPath } from '../constants/constants'; +import CustomHeader from '../components/customHeader'; +import { AntDesign, Entypo, Fontisto, MaterialCommunityIcons } from '../components/icons'; +import CustomLoader from '../components/CustomLoader'; +import LinearGradient from 'react-native-linear-gradient'; +import { AppTables } from '../constants/tableConstants'; +import { launchCamera, launchImageLibrary } from 'react-native-image-picker'; +import * as RNFS from 'react-native-fs'; +import GradientButton from '../components/gradientButton'; +import CustomModal from '../components/CustomModal'; +import { ConfirmSaveAlert } from '../components/alert'; +import CameraImg3 from '../assets/performics/camera_tick.svg'; +import CameraImg2 from '../assets/performics/camera_icon.svg'; +import CameraImg5 from '../assets/image/astrickcamera.svg'; +import CustomCamera from '../components/Camera'; +import CustomImagePickerModal from '../components/CustomImagePickerModal'; + +function OrderDetail(props) { + const route = useRoute(); + const PageTheme = GetPageTheme(props.DarkMode, route.name); + const customStyle = customStyles(props.DarkMode, route.name); + const animatedChoice = useRef(new Animated.Value(0)).current; + const ST = props.StaticText || {}; + const [processing, setProcessing] = useState(true); + const [loaderTitle, setLoaderTitle] = useState('loading...'); + const [isAdhocScreen, setIsAdhocScreen] = useState(false); + const [storeData, setStoreData] = useState({}); + const [currentMenu, setCurrentMenu] = useState({}); + const [brandData, setBrandData] = useState([]); + const [rerenderdata, setrerenderdata] = useState(0); + const [Orderlist, setOrderList] = useState([]); + const [SKUStockData, setSKUStockData] = useState([]); + const [SystemPO, setSystemPO] = useState(''); + const [StorePO, setStorePO] = useState(''); + const [ContactName, setContactName] = useState(''); + const [ContactNo, setContactNo] = useState(''); + const [PODate, setPODate] = useState(''); + const [PODate2, setPODate2] = useState(new Date()); + const [ShowDatePicker, setShowDatePicker] = useState(false); + const [KPIFields, setKPIFields] = useState([]); + const [showAlert, setShowAlert] = useState(false); + const [hasUnsavedChanges, setHasUnsavedChanges] = useState(false); + const [IsOrderPresent, setIsOrderPresent] = useState(false); + const [showRAllC_M, setShowRAllC_M] = useState(false); + const [orderData, setOrderData] = useState({}); + const [SelectedOrder, setSelectedOrder] = useState([]); + const [WindowData, setWindowData] = useState([]); + const [DataCleanModal, setDataCleanModal] = useState(false); + const [DataCleanAnim, setDataCleanAnim] = useState(""); + const [DataCleanItem, setDataCleanItem] = useState({}); + const [isPresentClean, setIsPresentClean] = useState(0); + const [InputChange, setInputChange] = useState([]); + const [AddVisFormData, setAddVisFormData] = useState({}); + const [showCamera, setShowCamera] = useState(false); + const [showSwitchCamera, setShowSwitchCamera] = useState(false); + const [getImageProps, setGetImageProps] = useState({}); + const [SelectedImg, setSelectedImg] = useState(''); + const [showModal, setShowModal] = useState(false); + const [reCapImgModalObj, setReCapImgModalObj] = useState({}); + const [showImageSaveOp, setShowImageSaveOp] = useState(true); + const [rerenderdata2, setrerenderdata2] = useState(0); + const [showImagePickerModal, setShowImagePickerModal] = useState(false); + + const [showPickerModal, setShowPickerModal] = useState(false); + const [pickerType, setPickerType] = useState(null); + + const hasUnsavedChangesRef = React.useRef(hasUnsavedChanges); + const WindowDataRef = React.useRef(SelectedOrder); + const StoreIdRef = React.useRef(null); + const ScreenNameRef = React.useRef(''); + const NavigationRef = React.useRef({}); + const VisFormDataRef = React.useRef(AddVisFormData); + const inputRefs = useRef({}); + + const d1 = new Date(); + const d2 = moment(d1).format('MM/DD/YYYY'); + + useEffect(() => { + let params = props.route.params ? props.route.params : {}; + let storeData1 = params.storeData || {}; + let orderDetail = params.orderDetail || {}; + let menu1 = params.menu || {}; + let isAdhoc = params.isAdhoc || false; + setOrderData(orderDetail); + setIsAdhocScreen(isAdhoc); + setStoreData(storeData1); + setCurrentMenu(menu1); + let SPO = storeData1.StoreId + '_' + moment().format('YYYYMMDD'); + setSystemPO(SPO); + StoreIdRef.current = storeData1.StoreId; + ScreenNameRef.current = menu1.ScreenName; + let navData = { + 'storeData': storeData1, + 'orderDetail': orderDetail + }; + NavigationRef.current = navData; + getData(storeData1, orderDetail, menu1); + + const AppStateSubscription = AppState.addEventListener('change', (pro) => { _handleAppStateChange(pro) }); + const unsubscribe = props.navigation.addListener('beforeRemove', onBeforeRemove); + + return function cleanup() { + AppStateSubscription.remove(); + return unsubscribe; + }; + }, []); + + const _handleAppStateChange = async (nextAppState) => { + if (nextAppState == 'background' && hasUnsavedChangesRef.current == true) { + let newData = { + storeBGData: WindowDataRef.current, + menuName: ScreenNameRef.current, + StoreId1: StoreIdRef.current, + NavData: NavigationRef.current, + visiteDate: d2, + VisFormData: VisFormDataRef.current + }; + let WindowsStr = JSON.stringify(newData); + await set_item('storeData', WindowsStr); + } + }; + + function BgUnsavedChanges(val) { + hasUnsavedChangesRef.current = val; + setHasUnsavedChanges(val); + } + + function BgWindowData(val) { + WindowDataRef.current = val; + setSelectedOrder(val); + } + + useEffect(() => { + const unsubscribe = props.navigation.addListener('beforeRemove', onBeforeRemove); + return unsubscribe; + }, [hasUnsavedChanges]); + + function onBeforeRemove(e) { + if (hasUnsavedChanges == true) { + e.preventDefault(); + onRemoveScreen(e); + } else { + return; + } + } + + function onRemoveScreen(e) { + Alert.alert( + "", + "Do you really want to exit the screen?", + [ + { + text: "Cancel", + onPress: () => { }, + style: "cancel" + }, + { + text: "OK", onPress: async () => { + BgUnsavedChanges(false); + await clear_item('storeData'); + props.navigation.dispatch(e.data.action); + } + } + ] + ); + } + + async function getData(storeData1, orderData, menu1) { + try { + console.log("checkdataas:", orderData); + let { OrderId, MID } = orderData; + let { StoreId } = storeData1; + let q = ` SELECT * from PriviousVisit_Orders p Where p.OrderId ='${OrderId}' AND p.MID='${MID}'`; + let q2 = ` SELECT STORE_ID as StoreId,INVOICE_TYPE as InvoiceType,MID as MID, ORDER_ID as OrderId ,ORDER_QTY as OrderQty,PRODUCT_ID as ProductId, PRODUCTNAME as ProductName, ISPRESENT as isPresent,p.IMAGES as imgObj FROM ${AppTables.ORDERSTATUS} p WHERE p.ORDER_ID ='${OrderId}' and STORE_ID='${StoreId}' and MID='${MID}' and VISIT_DATE='${d2}'`; + + let AllKPIFields = await getKPIFields(menu1); + setKPIFields(AllKPIFields); + + let storeBGData1 = [], bgStoreJson = {}, isBgDataExists = false; + let windData = await get_item('storeData'); + if (windData != null && windData != '') { + let StoreJson = JSON.parse(windData); + console.log("storeDataJson", StoreJson) + let { storeBGData, menuName, StoreId1, visiteDate, VisFormData } = StoreJson; + if (storeBGData.length > 0 && menuName == menu1.ScreenName && StoreId1 == StoreId && visiteDate == d2) { + isBgDataExists = true; + storeBGData1 = storeBGData; + bgStoreJson = StoreJson; + BgUnsavedChanges(true); + BgWindowData(storeBGData); + BgAddVisFormData(VisFormData); + } + } + await db.transaction(async function (txn) { + await txn.executeSql(q2, [], async function (txn2, txnres) { + console.log('added order found:', txnres.rows.length); + if (txnres.rows.length > 0) { + console.log('inputs found', txnres.rows.length); + let arr = [], arr2 = [], inputChangeFlag = []; + for (let i = 0; i < txnres.rows.length; i++) { + let data = txnres.rows.item(i); + let isPresent = (data.isPresent == '1' || data.isPresent == 1 ? 1 : 0); + if (isBgDataExists) { + let storeBgIndex = storeBGData1.findIndex(i => i.OrderId == data.OrderId && i.ProductId == data.ProductId); + let storeBgObj = storeBgIndex >= 0 ? storeBGData1[storeBgIndex] : {}; + isPresent = Number(storeBgObj.isPresent); + } + let animatedChoice = new Animated.Value(isPresent); + data.animatedChoice = animatedChoice; + data['isPresent'] = isPresent; + let defData = { 'OrderId': data.OrderId, 'ProductId': data.ProductId, 'StoreId': StoreId, 'OrderQty': data.OrderQty, 'ProductName': data.ProductName, 'isPresent': isPresent, 'InvoiceType': data.InvoiceType, 'MID': data.MID }; + let changesFlag = { OrderId: data.OrderId, ProductId: data.ProductId, Flag: false }; + inputChangeFlag.push(changesFlag); + arr.push(data); + arr2.push(defData); + if (i == txnres.rows.length - 1) { + setInputChange(inputChangeFlag); + setOrderList(arr); + let ImgObjct = data?.imgObj && JSON.parse(data.imgObj); + console.log("ImgObjct----", ImgObjct); + if (!isBgDataExists) { + BgWindowData(arr); + BgAddVisFormData(ImgObjct || {}); + } + + setProcessing(false); + } + } + } else { + await txn.executeSql(q, [], async function (txn2, txnres) { + console.log('inputs found', txnres.rows.length); + if (txnres.rows.length > 0) { + let arr = [], arr2 = [], inputChangeFlag = []; + for (var i = 0; i < txnres.rows.length; i++) { + let data = txnres.rows.item(i); + let isPresent = 0; + if (data != null && data != "") { + isPresent = 1; + } + if (isBgDataExists) { + let storeBgIndex = storeBGData1.findIndex(i => i.OrderId == data.OrderId && i.ProductId == data.ProductId); + let storeBgObj = storeBgIndex >= 0 ? storeBGData1[storeBgIndex] : {}; + console.log("storeBgObj-------", storeBgObj); + isPresent = Number(storeBgObj.isPresent); + } + let animatedChoice = new Animated.Value(isPresent); + data.animatedChoice = animatedChoice; + data['isPresent'] = isPresent; + let defData = { 'OrderId': data.OrderId, 'ProductId': data.ProductId, 'StoreId': StoreId, 'OrderQty': data.OrderQty, 'ProductName': data.ProductName, 'isPresent': isPresent, 'InvoiceType': data.InvoiceType, 'MID': data.MID }; + let changesFlag = { OrderId: data.OrderId, ProductId: data.ProductId, Flag: false }; + inputChangeFlag.push(changesFlag); + arr.push(data); + arr2.push(defData); + if (i == txnres.rows.length - 1) { + let { menuName, StoreId1, visiteDate } = bgStoreJson; + setInputChange(inputChangeFlag); + setOrderList(arr); + if (!isBgDataExists) { + BgWindowData(arr); + } + setProcessing(false); + } + } + } + }, function (txnE, txnerr) { console.log(txnerr); setProcessing(false); }); + } + }, function (txnE, txnerr) { console.log(txnerr); }); + }); + } catch (err) { + console.log(err); + } + } + + function cancelImage() { + setSelectedImg(''); + setReCapImgModalObj({}); + setShowModal(false); + } + + function _OpenCaptureImage_Modal() { + const isImageCap = (SelectedImg !== '' && SelectedImg !== null); + let { window, splitItem, splitItemIndex, cameraType } = reCapImgModalObj; + let camera2Label = (window && window.PromoImage2Lable) || ''; + return ( + + {isImageCap && + + + + + { + console.log('Retake pressed with cameraType:', cameraType); // Debugging + // cancelImage(); // Reset image states before retake + setShowModal(false); + showImagePicker(cameraType); + }} + > + + + {!showImageSaveOp && + { cancelImage(); }}> + {ST.Close} + + } + + } + + ); + } + + + async function submitData() { + let isvalid = await validate(); + if (isvalid) { + Keyboard.dismiss(); + setShowAlert(true); + } + } + + function BgAddVisFormData(val) { + VisFormDataRef.current = val; + setAddVisFormData(val); + } + + async function saveData() { + BgUnsavedChanges(false); + setShowAlert(false); + setLoaderTitle('Saving Data...'); + setProcessing(true); + try { + let { StoreId } = storeData; + await db.transaction(async function (txn) { + let q = `DELETE FROM ${AppTables.ORDERSTATUS} WHERE STORE_ID='${StoreId}' and ORDER_ID='${orderData.OrderId}' and VISIT_DATE='${d2}' `; + await txn.executeSql(q, [], async function (txn2, txnres) { + console.log('Order data deleted'); + }, function (txnE, txnerr) { console.log(txnerr); }); + + var stock_values = ''; + let imageObj = JSON.stringify(AddVisFormData); + for (var i = 0; i < SelectedOrder.length; i++) { + let { OrderId, OrderQty, StoreId, ProductId, ProductName, isPresent, InvoiceType, MID } = SelectedOrder[i]; + stock_values += stock_values != '' ? ' , ' : ''; + stock_values += ` ('${StoreId}','${d2}','${OrderId}','${(OrderQty || 0)}','${ProductId}','${ProductName}','${isPresent}','${d2}','${imageObj}','${InvoiceType}','${MID}') `; + } + + console.log("stock_values-----", stock_values); + let add_Stock = `INSERT INTO ${AppTables.ORDERSTATUS} (STORE_ID ,VISIT_DATE ,ORDER_ID ,ORDER_QTY ,PRODUCT_ID, PRODUCTNAME, ISPRESENT, ADDED_DATE,IMAGES,INVOICE_TYPE,MID) VALUES ${stock_values} `; + console.log('add_Stock:', add_Stock); + await txn.executeSql(add_Stock, [], async function (txn2, txnres) { + // clear store data in local storage to avoiding re-set data for the store + clear_item('storeData') + console.log('ORDERSTATUS added'); + notify('Order Status updated successfully'); + setProcessing(false); + props.navigation.goBack(); + }, function (txnE, txnerr) { console.log(txnerr); setProcessing(false); notify('Cannot update Order Status') }); + }); + } catch (err) { + console.log(err); + } + } + + async function validate() { + let ActualQty_Index = KPIFields.findIndex(i => i.KPIFieldName == 'ActualQty'); + let ActualQty_Obj = ActualQty_Index >= 0 ? KPIFields[ActualQty_Index] : {}; + let ActualQtyAllow = ActualQty_Index >= 0 ? ActualQty_Obj['KPIFieldEnable'] : true; + let ActualQtyDisName = ActualQty_Index >= 0 ? ActualQty_Obj['KPIFieldDisplayName'] : 'Actual Qty'; + + let CompPromoShowImage1I = KPIFields.findIndex(i => i.KPIFieldName == 'Image1'); + let CompPromoShowImage1Obj = CompPromoShowImage1I >= 0 ? KPIFields[CompPromoShowImage1I] : {}; + let CompPromoShowImage1 = CompPromoShowImage1I >= 0 ? CompPromoShowImage1Obj['KPIFieldEnable'] : true; + let KPIMandatoryImage1 = CompPromoShowImage1I >= 0 ? CompPromoShowImage1Obj['KPIMandatory'] : true; + let CompPromoShowImage1Label = CompPromoShowImage1I >= 0 ? CompPromoShowImage1Obj['KPIFieldDisplayName'] : "Image"; + + let CompPromoShowImage2I = KPIFields.findIndex(i => i.KPIFieldName == 'Image2'); + let CompPromoShowImage2Obj = CompPromoShowImage2I >= 0 ? KPIFields[CompPromoShowImage2I] : {}; + let CompPromoShowImage2 = CompPromoShowImage2I >= 0 ? CompPromoShowImage2Obj['KPIFieldEnable'] : false; + let KPIMandatoryImage2 = CompPromoShowImage2I >= 0 ? CompPromoShowImage2Obj['KPIMandatory'] : false; + let CompPromoShowImage2Label = CompPromoShowImage2I >= 0 ? CompPromoShowImage2Obj['KPIFieldDisplayName'] : "Image"; + + let isPresentFlag = false; + SelectedOrder?.map((itemD) => { + let isPresent = itemD.isPresent != null && itemD.isPresent != '' ? itemD.isPresent : '0'; + if (isPresent == '1') { + isPresentFlag = true; + } + }); + + let isValid = true; + console.log('validate', AddVisFormData); + return new Promise((resolve, reject) => { + if (isPresentFlag && CompPromoShowImage1 && KPIMandatoryImage1 && (AddVisFormData.Image1Path == "" || AddVisFormData.Image1Path == null)) { + notify(`Please Capture ${CompPromoShowImage1Label} `, 'LONG'); + resolve(false); return; + } else if (isPresentFlag && CompPromoShowImage2 && KPIMandatoryImage2 && (AddVisFormData.Image2Path == "" || AddVisFormData.Image2Path == null)) { + notify(`Please Capture ${CompPromoShowImage2Label} `, 'LONG'); + resolve(false); return; + } else if (ActualQtyAllow == true && SelectedOrder.length > 0) { + for (let wi in SelectedOrder) { + console.log('wi:', wi); + const wind = SelectedOrder[wi]; + let isPresent = wind.isPresent != null && wind.isPresent != '' ? wind.isPresent : '0'; + let OrderQty = wind.OrderQty != null && wind.OrderQty != '' ? wind.OrderQty : ''; + if (isPresent == '1') { + if (OrderQty == "") { + notify(`Please Fill ${ActualQtyDisName} for ${wind.ProductName} `, 'LONG'); + resolve(false); return; + } + } + if (wi == (SelectedOrder.length - 1)) { + console.log('last index return true'); + resolve(true); return; + } + } + } else { + resolve(true); return; + } + }).then((val) => { return val }) + .catch((err) => { console.log(err); return false }); + } + + function onConfirmRemoveAll() { + if (animatedChoice != null) { + Animated.timing(animatedChoice, { + toValue: 0, + duration: 400, + useNativeDriver: false, + }).start(); + } + setIsOrderPresent(0); + BgUnsavedChanges(true); + setStorePO(''); + setContactName(''); + setContactNo(''); + setSKUStockData([]); + setShowRAllC_M(false); + } + + async function OpenImgModal(imgPath, window, splitItem, splitItemIndex, cameraType) { + console.log("cameratype:", cameraType) + setSelectedImg(imgPath); + setShowModal(true); + if ((imgPath != '' && imgPath != null)) { + setShowImageSaveOp(false); + } else { + setShowImageSaveOp(true); + } + setReCapImgModalObj({ window, splitItem, splitItemIndex, cameraType }); + } + + function onChoiceSelect(item, val, key, animatedChoice) { + let win_index = InputChange.find(i => i.OrderId == item.OrderId && i.ProductId == item.ProductId); + let changeValue = win_index.Flag; + if (changeValue) { + setIsPresentClean(val); + setDataCleanAnim(animatedChoice); + setDataCleanItem(item); + setDataCleanModal(true); + return; + } + var val1 = val == 1 ? 1 : 0; + if (animatedChoice != null) { + Animated.timing(animatedChoice, { + toValue: val1, + duration: 400, + useNativeDriver: false, + }).start(); + } + onWindowDataChange(item, val, key); + setIsOrderPresent(val); + BgUnsavedChanges(true); + } + + function onWindowDataChange(item, val, key, type = "") { + if (val != '') { + let isValid = validateNumber(val, type); + if (!isValid) { + return; + } + } + let allData = SelectedOrder; + let defData = { 'OrderId': item.OrderId, 'ProductId': item.ProductId, 'StoreId': item.StoreId, 'OrderQty': item.OrderQty, 'ProductName': item.ProductName, 'InvoiceType': item.InvoiceType, 'MID': item.MID }; + const win_index = allData.findIndex(i => i.OrderId == item.OrderId && i.ProductId == item.ProductId); + let wind = win_index >= 0 ? (allData[win_index] || defData) : defData; + wind[key] = val; + win_index >= 0 ? allData[win_index] = wind : allData.push(wind); + if (key != "isPresent") { + let objIndex = InputChange.findIndex((obj => obj.OrderId == item.OrderId && obj.ProductId == item.ProductId)); + let winArr = [...InputChange]; + winArr[objIndex].Flag = true; + setInputChange(winArr); + } + BgWindowData(allData); + setrerenderdata(!rerenderdata); + } + + function onSaveCancel() { + setShowAlert(false); + } + + function onWindowDataClean() { + console.log("datacleann:", DataCleanItem); + if (DataCleanAnim != null) { + let anim = isPresentClean == 1 ? 1 : ''; + Animated.timing(DataCleanAnim, { + toValue: anim, + duration: 400, + useNativeDriver: false, + }).start(); + } + let allData = SelectedOrder; + let defData = { 'OrderId': DataCleanItem.OrderId, 'ProductId': DataCleanItem.ProductId, 'StoreId': storeData.StoreId, 'OrderQty': 0, 'ProductName': DataCleanItem.ProductName, 'isPresent': 0 }; + const win_index = allData.findIndex(i => i.OrderId == DataCleanItem.OrderId && i.ProductId == DataCleanItem.ProductId); + allData[win_index] = defData; + let objIndex = InputChange.findIndex((obj => obj.OrderId == DataCleanItem.OrderId && obj.ProductId == DataCleanItem.ProductId)); + let winArr = [...InputChange]; + winArr[objIndex].Flag = false; + setInputChange(winArr); + setDataCleanModal(false); + BgWindowData(allData); + BgUnsavedChanges(true); + setrerenderdata(!rerenderdata); + } + + const onCancelClean = () => { + setDataCleanModal(false); + }; + + const onclear = () => { + onWindowDataClean(DataCleanItem); + }; + + function _render_PresentQ(item, index) { + console.log("checkitem", item); + const wind = SelectedOrder.findIndex(i => i.OrderId == item.OrderId && i.ProductId == item.ProductId); + let selectedData = SelectedOrder[wind]; + let isPresent = selectedData && selectedData.isPresent != null && selectedData.isPresent != '' ? selectedData.isPresent : '0'; + let OrderQty = selectedData && selectedData.OrderQty != null && selectedData.OrderQty != '' ? selectedData.OrderQty : ''; + let ActualQty_Index = KPIFields.findIndex(i => i.KPIFieldName == 'ActualQty'); + let ActualQty_Obj = ActualQty_Index >= 0 ? KPIFields[ActualQty_Index] : {}; + let ActualQtyAllow = ActualQty_Index >= 0 ? ActualQty_Obj['KPIFieldEnable'] : true; + let ActualQtyDisName = ActualQty_Index >= 0 ? ActualQty_Obj['KPIFieldDisplayName'] : 'Actual Qty'; + var xpos = isPresent == '1' ? -75 : 0; + if (item.animatedChoice != null) { + xpos = item.animatedChoice.interpolate({ + inputRange: [0, 1], + outputRange: [0, -75], + }); + } + console.log("isPresent---------1", isPresent); + return ( + + + + {item.ProductName} + {"Order Qty:" + item.OrderQty} + + + + + + {ST.IsPresent} + + + + { onChoiceSelect(item, "1", 'isPresent', item.animatedChoice) }}> + {ST.Yes} + + { onChoiceSelect(item, "0", 'isPresent', item.animatedChoice) }}> + {ST.No} + + + + + {(ActualQtyAllow == true && isPresent == 1) && + + {ActualQtyDisName} + + { onWindowDataChange(item, val, 'OrderQty', 'numeric') }} + /> + + + } + + + + ); + } + + let CompPromoShowImage1I = KPIFields.findIndex(i => i.KPIFieldName == 'Image1'); + let CompPromoShowImage1Obj = CompPromoShowImage1I >= 0 ? KPIFields[CompPromoShowImage1I] : {}; + let CompPromoShowImage1 = CompPromoShowImage1I >= 0 ? CompPromoShowImage1Obj['KPIFieldEnable'] : true; + let KPIMandatoryImage1 = CompPromoShowImage1I >= 0 ? CompPromoShowImage1Obj['KPIMandatory'] : false; + let CompPromoShowImage1Label = CompPromoShowImage1I >= 0 ? CompPromoShowImage1Obj['KPIFieldDisplayName'] : "Image"; + + let CompPromoShowImage2I = KPIFields.findIndex(i => i.KPIFieldName == 'Image2'); + let CompPromoShowImage2Obj = CompPromoShowImage2I >= 0 ? KPIFields[CompPromoShowImage2I] : {}; + let CompPromoShowImage2 = CompPromoShowImage2I >= 0 ? CompPromoShowImage2Obj['KPIFieldEnable'] : false; + let KPIMandatoryImage2 = CompPromoShowImage2I >= 0 ? CompPromoShowImage2Obj['KPIMandatory'] : false; + let CompPromoShowImage2Label = CompPromoShowImage2I >= 0 ? CompPromoShowImage2Obj['KPIFieldDisplayName'] : "Image"; + + + //for new + + async function showImagePicker(type) { + setGetImageProps({ type }); + setShowModal(false); + setShowCamera(false); + + console.log('[Image Picker] User initiated image selection for type:', type); + + if (Platform.OS === 'ios') { + ActionSheetIOS.showActionSheetWithOptions( + { + options: ['Cancel', '📷 Take Photo', '🖼️ Choose from Gallery'], + cancelButtonIndex: 0, + title: 'Select Image Source', + }, + (buttonIndex) => { + if (buttonIndex === 1) openCamera(type); + else if (buttonIndex === 2) openGallery(type); + } + ); + } else { + setPickerType(type); + setShowPickerModal(true); // ✅ Show custom modal + } + } + + + async function openCamera(type = '1') { + try { + const granted = await PermissionsAndroid.request( + PermissionsAndroid.PERMISSIONS.CAMERA, + { + title: 'Camera Permission', + message: 'App needs access to your camera to take photos.', + buttonNeutral: 'Ask Me Later', + buttonNegative: 'Cancel', + buttonPositive: 'OK', + } + ); + if (granted === PermissionsAndroid.RESULTS.GRANTED || Platform.OS === 'ios') { + setShowCamera(true); + setGetImageProps({ type }); // Ensure type is set + console.log('Camera opened with type:', type); // Debugging + } else { + notify('Camera permission denied', 'LONG'); + } + } catch (err) { + console.warn('Camera permission error:', err); + } + } + + async function openGallery(type = '1') { + try { + let permissionsToRequest = []; + + if (Platform.OS === 'android') { + if (Platform.Version >= 33) { + permissionsToRequest = [ + PermissionsAndroid.PERMISSIONS.READ_MEDIA_IMAGES, + ]; + } else { + permissionsToRequest = [ + PermissionsAndroid.PERMISSIONS.READ_EXTERNAL_STORAGE, + ]; + } + + const granted = await PermissionsAndroid.requestMultiple(permissionsToRequest); + + const hasGalleryPermission = Object.values(granted).every( + status => status === PermissionsAndroid.RESULTS.GRANTED + ); + + if (!hasGalleryPermission) { + notify('Gallery permission denied', 'LONG'); + return; + } + } + + const options = { + mediaType: 'photo', + includeBase64: false, + quality: 1, + }; + + launchImageLibrary(options, (response) => { + if (response.didCancel) { + console.log('User cancelled image picker'); + } else if (response.errorCode) { + notify(`Error: ${response.errorMessage}`, 'LONG'); + } else if (response.assets && response.assets.length > 0) { + const imgdata = { + uri: response.assets[0].uri, + width: response.assets[0].width, + height: response.assets[0].height, + fromGallery: true, + datetime: new Date(), + type, // Include type + }; + console.log('Gallery image selected:', imgdata); + getImage(imgdata); + } + }); + + } catch (err) { + console.warn('Gallery permission error:', err); + notify('Failed to access gallery', 'LONG'); + } + } + + + + async function getImage(imgdata) { + console.log('getImage called with data:', imgdata); // Debugging + // let type = getImageProps.type || ''; + let type = imgdata.type || getImageProps.type || '1'; + if (!type) { + console.warn('Image type not set in getImageProps'); + return; + } + if (typeof imgdata === 'object' && imgdata.errorCode === 'camera_unavailable') { + notify('Camera unavailable', 'LONG'); + return; + } else if (typeof imgdata === 'object' && imgdata.uri != null) { + const img = imgdata; + const imgurl = img.uri, imgWidth = img.width, imgHeight = img.height; + let isImgFromGallery = img.fromGallery != null ? img.fromGallery : false; + let picture_clickedd = isImgFromGallery ? img.datetime : new Date(); + + let picture_clicked_time = moment(picture_clickedd).format('MM-DD-YYYY HH:mm:ss') + let picture_clicked_time_for_pic_name = moment(picture_clickedd).format('MMDDYYYY_HHmmss') + + console.log("time", picture_clicked_time); + console.log("time1", picture_clicked_time_for_pic_name); + let calculate_tym_date_for_filename = picture_clicked_time_for_pic_name; + let calculate_tym_date_over_img = picture_clicked_time; + + let filename = storeData.StoreId + '_' + (props.UserId || '') + '_orderImg-' + calculate_tym_date_for_filename + '.jpg'; + const mark_text1 = calculate_tym_date_over_img; + const mark_text2 = 'Store Name:' + storeData.StoreName + ' | Store Id:' + storeData.StoreId + ' | User Id:' + storeData.EmpId + ' | Image Type: OrderDetails' + ' | Date:' + calculate_tym_date_over_img; + let addvisdata = { ...AddVisFormData }; + let image_key = `Image${type}`; + let image_path_key = `Image${type}Path`; + addvisdata[image_key] = filename; + let imagePath = `${ImageFolderPath + currentMenu.ScreenName}/${filename}`; + + try { + // Ensure the directory exists + await RNFS.mkdir(`${ImageFolderPath + currentMenu.ScreenName}`); + await RNFS.copyFile(imgurl, imagePath); + let uri = 'file://' + imagePath; + addvisdata[image_path_key] = uri; + console.log('Image saved, updating AddVisFormData:', addvisdata); // Debugging + BgAddVisFormData(addvisdata); + BgUnsavedChanges(true); + setrerenderdata2(prev => prev + 1); + setShowCamera(false); + setShowModal(false); + setSelectedImg(uri); + setReCapImgModalObj({ cameraType: type }); + setShowImageSaveOp(false); + //setShowModal(true); // Re-open modal to show new image + let restore_data = { "destFilePath": imagePath, "imgurl": imgurl, imgWidth, imgHeight, mark_text1, mark_text2 }; + let is_restored = await restore_ImageWithMetaData(restore_data, imgdata); + console.log('Image restored:', is_restored); + } catch (err) { + console.error('Image file write failed:', err.message, err.code); + notify('Failed to save image', 'LONG'); + } + } + } + + return ( + + {processing && } + + {ConfirmSaveAlert(props, showAlert, onSaveCancel, saveData)} + { setShowCamera(false); getImage(imgData) }} showCamera={showCamera} onHideCamera={() => { setShowCamera(false); }} /> + + {_OpenCaptureImage_Modal()} + {ConfirmSaveAlert(props, DataCleanModal, onCancelClean, onclear, 'Your data will be clean')} + {ConfirmSaveAlert(props, showRAllC_M, () => { setShowRAllC_M(false) }, onConfirmRemoveAll, 'Do you really want to remove all Order Data?')} + + + + + + + + {'Order Id:'} + {orderData.OrderId} + + + + + {CompPromoShowImage1 && ( + + {!AddVisFormData.Image1Path ? ( + KPIMandatoryImage1 ? ( + showImagePicker('1')}> + + + ) : ( + showImagePicker('1')}> + + + ) + ) : ( + + OpenImgModal(AddVisFormData.Image1Path, '1', '', '', '1') + }> + + + )} + {CompPromoShowImage1Label} + +)} + + + {CompPromoShowImage2 && ( + + {!AddVisFormData.Image2Path ? ( + KPIMandatoryImage2 ? ( + showImagePicker('2')}> + + + ) : ( + showImagePicker('2')}> + + + ) + ) : ( + + OpenImgModal(AddVisFormData.Image2Path, '2', '', '', '2') + }> + + + )} + {CompPromoShowImage2Label} + + )} + + + + + {Object.keys(storeData).length > 0 && + + {rerenderdata == rerenderdata && + Orderlist.map((item, index) => { + return _render_PresentQ(item, index); + })} + + } + + { submitData() }} /> + + + + + setShowPickerModal(false)} + onCamera={() => openCamera(pickerType)} + onGallery={() => openGallery(pickerType)} + /> + + + ); +} + +export default connect(mapStateToProps, mapDispatchToProps)(OrderDetail); \ No newline at end of file diff --git a/PerformicsSrc/src/screens/OrderOfflineStoreList.js b/PerformicsSrc/src/screens/OrderOfflineStoreList.js new file mode 100644 index 0000000..7dfbb20 --- /dev/null +++ b/PerformicsSrc/src/screens/OrderOfflineStoreList.js @@ -0,0 +1,622 @@ +import React, { useState, useEffect, memo, useCallback } from 'react'; +import Container from '../components/container'; +import { useRoute, useFocusEffect } from '@react-navigation/native'; +import { globalStyles, customStyles, GetPageTheme } from "../styles/Global"; +import { StatusBar, Image, TextInput, View, Text, ScrollView, TouchableOpacity, TouchableHighlight, Platform, PermissionsAndroid, FlatList } from 'react-native'; +import { ReactReduxContext, connect, useSelector, useDispatch } from 'react-redux'; +import { mapStateToProps, mapDispatchToProps } from '../reducers/contextProvider'; +import { notify } from '../components/notify'; +import moment from 'moment'; +import { getDownloadJson, AddStore, checkRange, UploadData2, UploadData, UpdateStoreStatus, getKPIS, marktext1, marktext2, UploadFormData, validateNumber, ValidateEmail, getDownloadJson1 } from '../controller/functions'; +import { get_item, set_item, clear_item } from '../components/localStorage'; +import { version, sloganline, appname, testurl, db, AppVersion, common_ImagePath, baseurl } from '../constants/constants'; +import CustomHeader from '../components/customHeader'; +import { AntDesign, Entypo, EvilIcons, Feather, FontAwesome, Fontisto, Ionicons, MaterialCommunityIcons, FontAwesome5 } from '../components/icons'; +import CustomLoader from '../components/CustomLoader'; +import LinearGradient from 'react-native-linear-gradient'; +import { _checkLocationPermission } from '../components/geolocation'; +import { getBeatDownloadTask, getNewStoresDownloadTask, getPostData, insert_TaskDownloadedData, PJP_colList } from '../components/downloadTasks'; + + +import CustomCamera from '../components/Camera'; +import CustomModal from '../components/CustomModal'; +import { getFolderName, getMethodName, METHODS } from '../constants/methodNames'; + + + +function OrderOfflineStoreList(props) { + const route = useRoute(); + const ST = props.StaticText || {}; + // get all theme styles acc to current theme set + const PageTheme = GetPageTheme(props.DarkMode, route.name); + const customStyle = customStyles(props.DarkMode, route.name); + + const [loaderTitle, setLoaderTitle] = useState("Loading..."); + const [processing, setProcessing] = useState(false); + const [rerenderdata, setrerenderdata] = useState(0); + const [isAdhocScreen, setIsAdhocScreen] = useState(false); + const [isBeatPlan, setIsBeatPlan] = useState(false); + const [storeData, setStoreData] = useState({}); + + const [PrevStoreList, setPrevStoreList] = useState([]); + const [StoreReason, setStoreReason] = useState([]); + const [storeList, setStoreList] = useState([]); + const [searchedItem, setSearchedItem] = useState(''); + const [globalStorelist, setGlobalStorelist] = useState([]); + + + const [AllFormData, setAllFormData] = useState({}); + const [showCamera, setShowCamera] = useState(false); + + const [hasUnsavedChanges, setHasUnsavedChanges] = useState(false); + + const [IsEnableSubmit, setIsEnableSubmit] = useState(false); + + const [isNonMerchan, setIsNonMerchan] = useState(false); + const [isNonProg, setIsNonProg] = useState(false); + const [filtervalue, setFilterValue] = useState({}); + const [showAlert, setShowAlert] = useState(false); + const [EntryAllow, setEntryAllow] = useState(false); + + const [isDisable, setDisable] = useState(false); + + const [DownloadTasks, setDownloadTasks] = useState([]); + const [TaskResponse, setTaskResponse] = useState([]); + const [IsDownloadStart, setIsDownloadStart] = useState(false); + const [downloadingText, setDownloadingText] = useState(''); + const [dowloadedCount, setDowloadedCount] = useState(-1); + const [totalCount, setTotalCount] = useState(0) + + + + let d1 = new Date(); + let today = moment(d1).format('MM/DD/YYYY'); + + + useFocusEffect( + useCallback(() => { + setLoaderTitle(ST.Loading + '...') + let params = props.route.params ? props.route.params : {}; + let storeData1 = params.storeData || {}; + // getData(); // this will reload the store list every time screen is focused + let st2 = Object.assign({ 'test': '1' }, storeData1); + setAllFormData(st2); //Assigning current Store Data to FormData to be filled or changed + }, []) + ); + + useEffect(() => { + beforeExecuteTasks() + console.log('dowloadedCount change:', dowloadedCount); + if (dowloadedCount <= totalCount && IsDownloadStart == true) { + executeTasks(); + } + else { + setIsDownloadStart(false); + notify(ST.DataDownloaded, 'SHORT'); + } + }, [dowloadedCount]); + + + useEffect(() => { + if (IsDownloadStart && TaskResponse != null) { + console.log('increment dowloadedCount changed'); + let count = dowloadedCount + 1; + setDowloadedCount(count); + } + }, [TaskResponse]); + + + // download functionality start + async function startDownload() { + console.log('startDownload'); + setIsDownloadStart(true); + setDowloadedCount(0); + } + + + async function beforeExecuteTasks() { + console.log('beforeExecuteTasks:'); + let DownloadTasks1 = await getNewStoresDownloadTask(); + console.log('All BeatDownloadTask', DownloadTasks1.length); + setDownloadTasks(DownloadTasks1); + setTotalCount((DownloadTasks1.length - 1)); + startDownload(); + } + + async function executeTasks() { + console.log('executeTasks'); + + // var DownloadTasks=getDownloadDataTask(); + let loginInfo = await get_item('loginInfo'); + const loginDetails = JSON.parse(loginInfo); + var currentIndex = dowloadedCount; + + console.log('currentIndex:', currentIndex); + if (currentIndex >= 0) { + let dk_data = DownloadTasks[currentIndex]; + console.log('dk_data', dk_data); + let key = dk_data.DownloadKey || ''; + setDownloadingText(key); + + var data = await getPostData(DownloadTasks, currentIndex); + + var url = props.baseurl + getMethodName(METHODS.DOWNLOADJSON_METHOD); + console.log(url, data); + await getDownloadJson1(url, data) + .then(async (res) => { + let isAdded = await updateTaskRes(res, currentIndex, 1); + if (isAdded == true) { + if (currentIndex == DownloadTasks.length - 1) { + console.log('last found all downloaded'); + onDownloadComplete(); + } + else { + console.log('all downloaded but last not found '); + } + + } + else { + console.log('Cannot download all Data'); + } + + }) + .catch(err => { + console.log('onPage Team error', err); + }); + } + + } + + async function onDownloadComplete() { + let count = dowloadedCount + 1; + setIsDownloadStart(false); + setDowloadedCount(count); + notify(ST.DataDownloaded, 'SHORT'); + props.navigation.goBack(); + } + + async function updateTaskRes(res, index, count) { + // var DownloadTasks=getDownloadDataTask(); + + const todate = new Date(); + const today = moment(todate).format("MM/DD/YYYY"); + let d2 = today; + let dk_data = DownloadTasks[index]; + let key = dk_data.DownloadKey || ''; + let IsMandatory = dk_data.IsMandatory == 'true' || dk_data.IsMandatory == 1 ? true : false; + + return new Promise(async (resolve, reject) => { + switch (key) { + + case 'Mapping_JourneyPlan': { + let i_res = await insert_TaskDownloadedData(res, 'Mapping_JourneyPlan', PJP_colList, props); + console.log('i_res:', i_res); + let data_arr = i_res['data_arr']; + setTaskResponse(data_arr); + let r = i_res['r']; + console.log('r:', r); + resolve(r); + break; + } + case 'Adhoc_JourneyPlan': { + let i_res = await insert_TaskDownloadedData(res, 'Adhoc_JourneyPlan', PJP_colList, props); + console.log('i_res:', i_res); + let data_arr = i_res['data_arr']; + setTaskResponse(data_arr); + let r = i_res['r']; + console.log('r:', r); + resolve(r); + break; + } + case 'Mapping_ProductAssortmentStorewise': { + let colList = ['StoreId', 'ProductId', 'MSL', 'MBQ']; + let i_res = await insert_TaskDownloadedData(res, 'Mapping_ProductAssortmentStorewise', colList, props); + console.log('i_res:', i_res); + let data_arr = i_res['data_arr']; + setTaskResponse(data_arr); + let r = i_res['r']; + console.log('r:', r); + resolve(r); + break; + } + case 'Mapping_StoreWindow': { + let colList = ['StoreId', 'WindowDefinitionId']; + let i_res = await insert_TaskDownloadedData(res, 'Mapping_StoreWindow', colList, props); + console.log('i_res:', i_res); + let data_arr = i_res['data_arr']; + setTaskResponse(data_arr); + let r = i_res['r']; + console.log('r:', r); + resolve(r); + break; + } + case 'Mapping_WindowQuestion': { + let colList = ['WindowDefinitionId', 'WindowQuestionId']; + let i_res = await insert_TaskDownloadedData(res, 'Mapping_WindowQuestion', colList, props); + console.log('i_res:', i_res); + let data_arr = i_res['data_arr']; + setTaskResponse(data_arr); + let r = i_res['r']; + console.log('r:', r); + resolve(r); + break; + } + + case 'Mapping_StorePOSM': { + let colList = ['StoreId', 'POSMDefinitionId']; + let i_res = await insert_TaskDownloadedData(res, 'Mapping_StorePOSM', colList, props); + console.log('i_res:', i_res); + let data_arr = i_res['data_arr']; + setTaskResponse(data_arr); + let r = i_res['r']; + console.log('r:', r); + resolve(r); + break; + } + + case 'Mapping_POSMQuestion': { + let colList = ['POSMDefinitionId', 'POSMQuestionId']; + let i_res = await insert_TaskDownloadedData(res, 'Mapping_POSMQuestion', colList, props); + console.log('i_res:', i_res); + let data_arr = i_res['data_arr']; + setTaskResponse(data_arr); + let r = i_res['r']; + console.log('r:', r); + resolve(r); + break; + } + + case 'Mapping_StoreShelfTalker': { + let colList = ['StoreId', 'StDefinitionId']; + let i_res = await insert_TaskDownloadedData(res, 'Mapping_StoreShelfTalker', colList, props); + console.log('i_res:', i_res); + let data_arr = i_res['data_arr']; + setTaskResponse(data_arr); + let r = i_res['r']; + console.log('r:', r); + resolve(r); + break; + } + + case 'Mapping_ShelfTalkerQuestion': { + let colList = ['StDefinitionId', 'StQuestionId']; + let i_res = await insert_TaskDownloadedData(res, 'Mapping_ShelfTalkerQuestion', colList, props); + console.log('i_res:', i_res); + let data_arr = i_res['data_arr']; + setTaskResponse(data_arr); + let r = i_res['r']; + console.log('r:', r); + resolve(r); + break; + } + + case 'Mapping_StoreVisibility': { + let colList = ['StoreId', 'VisibilityDefinitionId']; + let i_res = await insert_TaskDownloadedData(res, 'Mapping_StoreVisibility', colList, props); + console.log('i_res:', i_res); + let data_arr = i_res['data_arr']; + setTaskResponse(data_arr); + let r = i_res['r']; + console.log('r:', r); + resolve(r); + break; + } + + case 'Mapping_VisibilityQuestion': { + let colList = ['VisibilityDefinitionId', 'VisibilityQuestionId']; + let i_res = await insert_TaskDownloadedData(res, 'Mapping_VisibilityQuestion', colList, props); + console.log('i_res:', i_res); + let data_arr = i_res['data_arr']; + setTaskResponse(data_arr); + let r = i_res['r']; + console.log('r:', r); + resolve(r); + break; + } + case 'Mapping_StorePromotion': { + let colList = ['StoreId', 'PromoDefinitionId']; + let i_res = await insert_TaskDownloadedData(res, 'Mapping_StorePromotion', colList, props); + console.log('i_res:', i_res); + let data_arr = i_res['data_arr']; + setTaskResponse(data_arr); + let r = i_res['r']; + console.log('r:', r); + resolve(r); + break; + } + case 'Mapping_PromotionQuestion': { + let colList = ['PromoDefinitionId', 'PromoQuestionId']; + let i_res = await insert_TaskDownloadedData(res, 'Mapping_PromotionQuestion', colList, props); + console.log('i_res:', i_res); + let data_arr = i_res['data_arr']; + setTaskResponse(data_arr); + let r = i_res['r']; + console.log('r:', r); + resolve(r); + break; + } + case 'Mapping_StoreShareOfShelf': { + let colList = ['StoreId', 'SOSDefinitionId']; + let i_res = await insert_TaskDownloadedData(res, 'Mapping_StoreShareOfShelf', colList, props); + console.log('i_res:', i_res); + let data_arr = i_res['data_arr']; + setTaskResponse(data_arr); + let r = i_res['r']; + console.log('r:', r); + resolve(r); + break; + } + case 'Mapping_DisplayChecklist': { + let colList = ['DisplayId', 'ChecklistId']; + let i_res = await insert_TaskDownloadedData(res, 'Mapping_DisplayChecklist', colList, props); + console.log('i_res:', i_res); + let data_arr = i_res['data_arr']; + setTaskResponse(data_arr); + let r = i_res['r']; + console.log('r:', r); + resolve(r); + break; + } + case 'Mapping_Survey': { + let colList = ['StoreId', 'SurveyId']; + let i_res = await insert_TaskDownloadedData(res, 'Mapping_Survey', colList, props); + console.log('i_res:', i_res); + let data_arr = i_res['data_arr']; + setTaskResponse(data_arr); + let r = i_res['r']; + console.log('r:', r); + resolve(r); + break; + } + case 'Mapping_StoreCategory': { + let colList = ['StoreId', 'CategoryDefinitionId']; + let i_res = await insert_TaskDownloadedData(res, 'Mapping_StoreCategory', colList, props); + console.log('i_res:', i_res); + let data_arr = i_res['data_arr']; + setTaskResponse(data_arr); + let r = i_res['r']; + console.log('r:', r); + resolve(r); + break; + } + case 'Mapping_CategoryQuestion': { + let colList = ['CategoryDefinitionId', 'CategoryQuestionId']; + let i_res = await insert_TaskDownloadedData(res, 'Mapping_CategoryQuestion', colList, props); + console.log('i_res:', i_res); + let data_arr = i_res['data_arr']; + setTaskResponse(data_arr); + let r = i_res['r']; + console.log('r:', r); + resolve(r); + break; + } + + + + } + }).catch((err) => { + console.log('error in downloading', err); + return false; + }); + + } + + + async function getData(storeData1) { + console.log("Function called with date:", today); + + try { + setLoaderTitle(ST.Loading + '...'); + setProcessing(true); + + db.transaction((txn) => { + console.log("Transaction started ✅"); + + let loadQuery = `SELECT distinct K.*,ifnull(T.STORE_ID,0)as Status from StoreList_OfflineOrder K left join (SELECT * from KYC_INFO Where VISIT_DATE = ?)as T on K.StoreId = T.STORE_ID Where K.VisitDate =? ` + // let loadQuery = `SELECT * FROM KYC_StoreList WHERE VisitDate = ?`; + console.log("Executing query:", loadQuery); + + txn.executeSql( + loadQuery, + [today, today], + (txn2, txnres) => { + console.log('Query success, rows:', txnres.rows.length); + let stores = []; + + for (let i = 0; i < txnres.rows.length; i++) { + stores.push(txnres.rows.item(i)); + } + + console.log("Loaded stores:", stores); + + setStoreList(stores); + setGlobalStorelist(stores); + setProcessing(false); + console.log("Loaded products:", storeList); + + }, + (txnE, txnerr) => { + console.log('SQL Error:', txnerr); + setProcessing(false); + } + ); + }); + + } catch (err) { + console.log('Catch block error:', err); + setProcessing(false); + } + } + + + + function _render_Alert() { + return ( + + + + ) + } + async function validate() { + let isValid = true; + + await Promise.all( + PrevStoreList.map(async (item, index) => { + if (isValid == true) { + if (!Boolean(item.Reason) && item.ReasonId == null || item.ReasonId == '') { + notify('Please select reason for store Id ' + item.StoreId, 'SHORT'); + isValid = false; + } + } + }) + ); + + console.log('isValid:', isValid); + return isValid; + } + + + + function FilterStores(searchedQry) { + searchedQry = searchedQry.toLowerCase(); + console.log('searchedQry', searchedQry); + // let {storeList}=state; + let arr = [] + if (searchedQry != null && searchedQry != '') { + globalStorelist.map((item, index) => { + let { StoreName, StoreId, StoreCode } = item; + StoreId = StoreId + ''; + if (StoreName.toLowerCase().includes(searchedQry) || StoreCode.toLowerCase().includes(searchedQry) || StoreId.includes(searchedQry)) { + arr.push(item); + } + }); + } + else { + arr = globalStorelist; + } + setStoreList(arr); + setrerenderdata(!rerenderdata) + } + + + + return ( + + {processing && } + + {_render_Alert()} + { setShowCamera(false); getImage(imgData) }} showCamera={showCamera} onHideCamera={() => { setShowCamera(false); }} /> + + + + + { setSearchedItem(val); FilterStores(val) }} + /> + { FilterStores(searchedItem) }}> + + + + + + {console.log("storelist--->", storeList)} + {rerenderdata == rerenderdata && storeList?.map((item, index) => { + return ( + + { + if (item.Status != 0) { + notify("You have already uploaded data for this store."); + } else { + props.navigation.navigate('KycForm', { storeId: item.StoreId }); + // props.navigation.navigate('StoreKycForm', { storeId: item.StoreId }); + } + }}> + + + + + {ST.StoreId + ':'} + {item.StoreId} + + + {ST.StoreType + ':'} + {item.StoreType} + + + + + {ST.StoreCode + ':'} + {item.StoreCode == "undefined" ? "" : item.StoreCode} + + + + + {'Store Name:'} + {item.StoreName} + + + + + {'City Name:'} + {item.CityName} + + + + + {'Address:'} + {item.Address} + + + + + + + {item.Status != 0 && + + {/* */} + Uploaded + + + } + + + + + ) + }) + } + + + {/* + + + {submit()}}/> + + + */} + + + + ); +} + + + +export default connect(mapStateToProps, mapDispatchToProps)(OrderOfflineStoreList); \ No newline at end of file diff --git a/PerformicsSrc/src/screens/OrderSimplify.js b/PerformicsSrc/src/screens/OrderSimplify.js new file mode 100644 index 0000000..83cd868 --- /dev/null +++ b/PerformicsSrc/src/screens/OrderSimplify.js @@ -0,0 +1,1083 @@ +import React, { useState, useEffect, useRef } from 'react'; +import Container from '../components/container'; +import { useRoute } from '@react-navigation/native'; +import { customStyles, GetPageTheme } from "../styles/Global"; +import { Image, TextInput, View, Text, ScrollView, TouchableOpacity, Platform, Alert, Animated, AppState, Keyboard } from 'react-native'; +import { connect } from 'react-redux'; +import { mapStateToProps, mapDispatchToProps } from '../reducers/contextProvider'; +import { notify } from '../components/notify'; +import moment from "dayjs"; +import { getKPIFields, restore_ImageWithMetaData, validateNumber } from '../controller/functions'; +import { CustomPicker2 } from '../components/CustomPicker'; +import { get_item, set_item, clear_item } from '../components/localStorage'; +import { db, ImageFolderPath } from '../constants/constants'; +import CustomHeader from '../components/customHeader'; +import { FontAwesome, MaterialCommunityIcons } from '../components/icons'; +import CustomLoader from '../components/CustomLoader'; +import LinearGradient from 'react-native-linear-gradient'; +import { AppTables } from '../constants/tableConstants'; +import * as RNFS from 'react-native-fs'; +import GradientButton from '../components/gradientButton'; + +import CustomModal from '../components/CustomModal'; +import { ConfirmSaveAlert } from '../components/alert'; +import { CustomPicker } from '../components/CustomPicker'; +import CustomCamera from '../components/Camera'; +import CameraImg3 from '../assets/performics/camera_tick.svg'; +import CameraImg5 from '../assets/image/astrickcamera.svg'; + +function OrderSimplify(props) { + const route = useRoute(); + const ST = props.StaticText || {}; + // get all theme styles acc to current theme set + const PageTheme = GetPageTheme(props.DarkMode, route.name); + const customStyle = customStyles(props.DarkMode, route.name); + const animatedChoice = useRef(new Animated.Value(0)).current; + + const [processing, setProcessing] = useState(true); + const [loaderTitle, setLoaderTitle] = useState(); + const [isAdhocScreen, setIsAdhocScreen] = useState(false); + const [storeData, setStoreData] = useState({}); + const [StoreCameraAllow, setStoreCameraAllow] = useState(true); + const [currentMenu, setCurrentMenu] = useState({}); + const [rerenderdata, setrerenderdata] = useState(0); + const [rerenderdata2, setrerenderdata2] = useState(0); + const [AddVisibility, setAddVisibility] = useState([]); + const [AddVisFormData, setAddVisFormData] = useState({}); + const [isAddVisPresent, setIsAddVisPresent] = useState(0); + const [showAlert, setShowAlert] = useState(false); + const [Categories, setCategories] = useState([]); + const [SubCategories, setSubCategories] = useState([]); + const [Brands, setBrands] = useState([]); + const [ProductsList, setProductsList] = useState([]); + const [PackTypeList, setPackTypeList] = useState([]); + const [hasUnsavedChanges, setHasUnsavedChanges] = useState(false); + const [showCamera, setShowCamera] = useState(false); + const [clickImageType, setClickImageType] = useState('1'); + const [toRemoveId, setToRemoveId] = useState(''); + const [toRemoveItem, setToRemoveItem] = useState({}); + const [showRemoveConfirm_M, setshowRemoveConfirm_M] = useState(false); + const [showRAllC_M, setShowRAllC_M] = useState(false); + const [KPIFields, setKPIFields] = useState([]); + const [reason, setReason] = useState({}); + const [reasons_list, setReasons_list] = useState([]); + const [SelectedImg, setSelectedImg] = useState(''); + const [showModal, setShowModal] = useState(false); + const [reCapImgModalObj, setReCapImgModalObj] = useState({}); + const [showImageSaveOp, setShowImageSaveOp] = useState(true); + const hasUnsavedChangesRef = React.useRef(hasUnsavedChanges); + const WindowDataRef = React.useRef(AddVisibility); + const StoreIdRef = React.useRef(null); + const ScreenNameRef = React.useRef(''); + const [showSwitchCamera, setShowSwitchCamera] = useState(false); + const VisFormDataRef = React.useRef(AddVisFormData); + const isAddVisPresentRef = React.useRef(isAddVisPresent); + const d2 = moment().format('MM/DD/YYYY'); + + useEffect(() => { + setLoaderTitle(ST.Loading + '...') + let params = props.route.params ? props.route.params : {}; + let storeData1 = params.storeData || {}; + let menu1 = params.menu || {}; + let cameraAllow = storeData1.CameraAllow == 'true' || storeData1.CameraAllow == 1 ? true : false; + setStoreCameraAllow(cameraAllow); + let isAdhoc = params.isAdhoc || false; + StoreIdRef.current = storeData1.StoreId + ScreenNameRef.current = menu1.ScreenName + setIsAdhocScreen(isAdhoc); + setStoreData(storeData1); + setCurrentMenu(menu1); + getData(storeData1, menu1); + + const AppStateSubscription = AppState.addEventListener('change', (pro) => { _handleAppStateChange(pro) }); + const unsubscribe = props.navigation.addListener('beforeRemove', onBeforeRemove); + + return function cleanup() { + AppStateSubscription.remove(); + return unsubscribe; + }; + }, []); + + + + const _handleAppStateChange = async (nextAppState) => { + if (nextAppState == 'background' && hasUnsavedChangesRef.current == true) { + let newData = { + storeBGData: WindowDataRef.current, + menuName: ScreenNameRef.current, + StoreId1: StoreIdRef.current, + AddFormData: VisFormDataRef.current, + isVisPresent: isAddVisPresentRef.current, + visiteDate: d2 + } + + let WindowsStr = JSON.stringify(newData) + await set_item('storeData', WindowsStr); + } + } + + useEffect(() => { + const unsubscribe = props.navigation.addListener('beforeRemove', onBeforeRemove); + return unsubscribe; + }, [hasUnsavedChanges]); + + useEffect(() => { + const unsubscribe = props.navigation.addListener('beforeRemove', onBeforeRemove); + return unsubscribe; + }, [showCamera]); + + function BgUnsavedChanges(val) { + hasUnsavedChangesRef.current = val + setHasUnsavedChanges(val); + } + + function BgWindowData(val) { + WindowDataRef.current = val + setAddVisibility(val); + } + + function BgAddVisFormData(val) { + VisFormDataRef.current = val + setAddVisFormData(val); + } + + function BgIsAddVisPresent(val) { + isAddVisPresentRef.current = val + setIsAddVisPresent(val); + } + + + function onBeforeRemove(e) { + if (showCamera == true) { + e.preventDefault(); + setShowCamera(false); + } + else { + if (hasUnsavedChanges == true) { + e.preventDefault(); // Prevent default behavior of leaving the screen + onRemoveScreen(e); + } + else { + return; + } + } + } + function onRemoveScreen(e) { + Alert.alert( + "", + ST.Doyoureallywanttoexitthescreen, + [ + { + text: ST.Cancel, + onPress: () => { }, + style: "cancel" + }, + { + text: ST.OK, onPress: async () => { + BgUnsavedChanges(false) + await clear_item('storeData') + // setHasUnsavedChanges(false); + props.navigation.dispatch(e.data.action); + } + } + ] + ); + } + + async function getData(storeData1, menu1) { + try { + let { StoreId } = storeData1; + let AllKPIFields = await getKPIFields(menu1); + setKPIFields(AllKPIFields); + // set switch camera flag as defined in mapping menu flag (if exists) + let SwitchingCameraI = AllKPIFields.findIndex(i => i.KPIFieldName == 'SwitchingCamera'); + let SwitchingCameraObj = SwitchingCameraI >= 0 ? AllKPIFields[SwitchingCameraI] : {}; + let SwitchingCamera = SwitchingCameraI >= 0 ? SwitchingCameraObj.KPIFieldEnable : false; + setShowSwitchCamera(SwitchingCamera); + + let storeBGData1 = [], bgStoreJson = {}, isBgDataExists = false; + let windData = await get_item('storeData') + if (windData != null && windData != '') { + let StoreJson = JSON.parse(windData) + let { storeBGData, menuName, StoreId1, AddFormData, visiteDate } = StoreJson + if (menuName == menu1.ScreenName && StoreId1 == StoreId && visiteDate == d2) { + isBgDataExists = true; + bgStoreJson = StoreJson + if (storeBGData.length > 0) { + storeBGData1 = storeBGData; + BgWindowData(storeBGData) + } + + if (AddFormData != null && Object.keys(AddFormData).length > 0) { + let { CategoryId, SubCategoryId, BrandId, ProductId } = AddFormData; + console.log("AddFormData---------", JSON.stringify(AddFormData)) + // load subcategories if category exists + if (CategoryId != null && CategoryId != '') { + loadData(CategoryId, 'SubCategories'); + } + if (SubCategoryId != null && CategoryId != '') { + loadData(SubCategoryId, 'Brands'); + } + + if (BrandId != null && ProductId != '') { + loadData(BrandId, 'Product'); + } + + BgAddVisFormData(AddFormData) + } + BgUnsavedChanges(true) + } + } + await db.transaction(async function (txn) { + let q = `Select Distinct p.CategoryId,p.CategoryName from Product_Master p where p.IsCompetitor= 0 order by p.CategorySequence`; + await txn.executeSql(q, [], async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + let arr = []; + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + arr.push(data); + if (i == txnres2.rows.length - 1) { setCategories(arr); } + } + } + }, function (txnE, txnerr) { console.log(txnerr); },); + + + let qr = `Select OrderReasonId as ReasonId, OrderReason as Reason From Master_NonOrderReason`; + await txn.executeSql(qr, [], async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + let arr = []; + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + console.log("Reson_data", data) + arr.push(data); + if (i == txnres2.rows.length - 1) { + setReasons_list(arr); + } + } + } + }, function (txnE, txnerr) { console.log(txnerr); },); + + + let seletlist = `PRESENT, REASON_ID, REASON`; + let q1 = `SELECT ${seletlist} from ${AppTables.ORDER_SIMPLIFY}`; + txn.executeSql(q1, [], async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + console.log("Reson_data", data) + let isReasonId = data.REASON_ID != null ? data.REASON_ID : 0; + let isReason = data?.REASON != null ? data?.REASON : ''; + let isPresent = data?.PRESENT == 1 || data?.PRESENT == '1'; + if (i == txnres2.rows.length - 1) { + if (!isPresent) { + setReason({ "label": isReason, "value": isReasonId }); + } + } + } + } + }, function (txnE, txnerr) { console.log(txnerr); },); + + let q2 = `Select Distinct PackType,ImageAllow,RemarkAllow from Master_ProductPackType order by PackType`; + await txn.executeSql(q2, [], async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + let arr = []; + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + arr.push(data); + + if (i == txnres2.rows.length - 1) { + console.log("PackTypeList", arr) + setPackTypeList(arr); + } + } + } + }, function (txnE, txnerr) { console.log(txnerr); },); + + + let q3 = `Select * from ${AppTables.ORDER_SIMPLIFY} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' `; + console.log("arr---", q3); + + await txn.executeSql(q3, [], async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + let { JSON_DATA, PRESENT } = data; + let obj = JSON.parse(JSON_DATA) + console.log("obj---------",obj) + + let isPresent = PRESENT; + if (i == txnres2.rows.length - 1) { + let {isVisPresent } = bgStoreJson + + if (!isBgDataExists) { + BgWindowData(obj); + } + else { + isPresent = isVisPresent == 1 ? 1 : 0; + } + + + Animated.timing(animatedChoice, { + toValue: isPresent, + duration: 400, + useNativeDriver: false, + }).start(); + + BgIsAddVisPresent(isPresent); + setProcessing(false); + } + } + } + else { + if (isBgDataExists) { + let { isVisPresent } = bgStoreJson + let isPresent = isVisPresent == 1 ? 1 : 0; + Animated.timing(animatedChoice, { + toValue: isPresent, + duration: 400, + useNativeDriver: false, + }).start(); + BgIsAddVisPresent(isPresent); + + } + setProcessing(false); + } + }, function (txnE, txnerr) { console.log(txnerr); setProcessing(false); },); + + }); + } catch (err) { + console.log(err); + } + } + + + async function OpenImgModal(imgPath, window, splitItem, splitItemIndex, cameraType) { + setSelectedImg(imgPath) + setShowModal(true); + if ((imgPath != '' && imgPath != null)) { + setShowImageSaveOp(false); + } + else { + setShowImageSaveOp(true); + } + setReCapImgModalObj({ window, splitItem, splitItemIndex, cameraType }) + } + + function cancelImage() { + // setImage1(''); + setSelectedImg(''); + setReCapImgModalObj({}) + setShowModal(false); + } + + async function getImage(imgdata) { + setShowModal(true); + if (typeof imgdata === 'object' && imgdata.errorCode == 'camera_unavailable') { + notify(ST.Cameraunavailable); + } + else if (typeof imgdata === 'object' && imgdata.uri != null) { + const img = imgdata; + const imgurl = img.uri, imgWidth = img.width, imgHeight = img.ExtendedHeight; + let isImgFromGallery = img.fromGallery != null ? img.fromGallery : false; + let picture_clickedd = isImgFromGallery == true ? img.datetime : new Date(); + + ////change by jeevanp + let picture_clicked_time = moment(picture_clickedd).format('MM-DD-YYYY HH:mm:ss') + let picture_clicked_time_for_pic_name = moment(picture_clickedd).format('MMDDYYYY_HHmmss') + console.log("time", picture_clicked_time); + console.log("time1", picture_clicked_time_for_pic_name); + ////change by jeevanp + let calculate_tym_date_for_filename = picture_clicked_time_for_pic_name; + let calculate_tym_date_over_img = picture_clicked_time; + + let filename = storeData.StoreId + '_' + (props.UserId || '') + '_ORDERSIMPLIFYImg-' + calculate_tym_date_for_filename + '.jpg'; + ////change by jeevanp + console.log("filename=>", filename) + const mark_text1 = calculate_tym_date_over_img; + const mark_text2 = 'Store Name:' + storeData.StoreName + ' | Store Id:' + storeData.StoreId + ' | User Id:' + storeData.EmpId + ' | Image Type: Order Simplify' + ' | Date:' + calculate_tym_date_over_img; + + let addvisdata = AddVisFormData; + let image_key = 'Image1'; + let image_path_key = 'Image1Path'; + addvisdata[image_key] = filename; + + let imagePath = `${ImageFolderPath + currentMenu.ScreenName}/${filename}`; + RNFS.copyFile(imgurl, imagePath) + .then(async (resn) => { + // render data with clicked image + let uri = 'file://' + imagePath; + addvisdata[image_path_key] = uri; + setSelectedImg(uri) + BgAddVisFormData(addvisdata) + BgUnsavedChanges(true) + setrerenderdata2(!rerenderdata2); + // add metdata then resize image and restored back to the imagePath + let restore_data = { "destFilePath": imagePath, "imgurl": imgurl, imgWidth, imgHeight, mark_text1, mark_text2 } + let is_restored = await restore_ImageWithMetaData(restore_data, imgdata); + console.log("image restored:", is_restored); + }) + .catch(err => { + console.log('ERROR: image file write failed!!!'); + console.log(err.message, err.code); + }); + } + } + + function _OpenCaptureImage_Modal(img) { + const isImageCap = (img != '' || img != null) ? true : false; + // console.log("imag pop is trigger",isImageCap,showModal,img) + let { window, splitItem, splitItemIndex, cameraType } = reCapImgModalObj + let camera2Label = (window && window.PromoImage2Lable) || ''; + return ( + + { + isImageCap && + + + + + { setShowModal(false); openCamera('1') }}> + + + { + { cancelImage() }}> + {ST.Close} + + } + + } + + ) + } + + async function openCamera(type = '1') { + console.log('openCamera'); + setClickImageType(type); + setShowCamera(true); + } + + async function onSubmitData() { + let isvalid = await validate(); + if (isvalid) { + Keyboard.dismiss(); + setShowAlert(true); + } + } + + async function saveData() { + BgUnsavedChanges(false) + setShowAlert(false); + setLoaderTitle(ST.SavingData + '...'); + setProcessing(true); + try { + let { StoreId } = storeData; + let ReasonId = reason?.value != null ? reason?.value : 0; + let Reason = reason?.label != null ? reason?.label : ''; + await db.transaction(async function (txn) { + + let q = `DELETE FROM ${AppTables.ORDER_SIMPLIFY} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' `; + + // remove old data + await txn.executeSql(q, [], async function (txn2, txnres) { + console.log('av data deleted'); + }, function (txnE, txnerr) { console.log(txnerr); },); + + + + let JsonStr = JSON.stringify(AddVisibility) + let values = ` ('${StoreId}','${d2}', ${isAddVisPresent},${ReasonId},'${Reason}', '${JsonStr}','1','${d2}') `; + + console.log('values ORDER_SIMPLIFY:', values); + let add_data = `INSERT INTO ${AppTables.ORDER_SIMPLIFY} (STORE_ID,VISIT_DATE,PRESENT,REASON_ID,REASON,JSON_DATA,IS_UPDATED,ADDED_DATE) VALUES ${values} `; + + console.log("add_data---", add_data) + await txn.executeSql(add_data, [], async function (txn2, txnres) { + console.log('av added'); + notify("Order added successfully", 'SHORT'); + setProcessing(false); + // clear store data in local storage to avoiding re-set data for the store + clear_item('storeData') + props.navigation.goBack(); + }, function (txnE, txnerr) { console.log(txnerr); setProcessing(false); notify("Cannot addad Return Stock") },); + }); + } catch (err) { + console.log(err); + } + } + + + + + async function validate() { + let isValid = true; + let ShowReasonIndex = KPIFields.findIndex(i => i.KPIFieldName == 'IsReasonEnable'); + let ShowReasonKPIObj = ShowReasonIndex >= 0 ? KPIFields[ShowReasonIndex] : {}; + let ShowReasonEnable = ShowReasonIndex >= 0 ? ShowReasonKPIObj['KPIFieldEnable'] : true; + + if (isAddVisPresent == 1 && AddVisibility.length <= 0) { + isValid = false; + notify(ST.Pleaseaddfirst, 'SHORT'); + } else if (isAddVisPresent != 1 && ShowReasonEnable == true && (reason?.value == null || reason?.value == '' || reason?.value == 0)) { + notify('Please select reason', 'SHORT'); + isValid = false; + } + console.log('isValid:', isValid); + return isValid; + } + + async function validateForm() { + let isValid = true; + let { CategoryName, CategoryId, SubCategoryName, SubCategoryId, BrandName, BrandId, ProductName, ProductId, Quantity, PackType, RemarkAllow, ImageAllow, Remark, Image1 } = AddVisFormData; + if ((CategoryName == '' || CategoryName == null) || (CategoryId == '' || CategoryId == null)) { + isValid = false; + notify(ST.PleaseSelectCategory, 'SHORT'); + } else if ((SubCategoryName == '' || SubCategoryName == null) || (SubCategoryId == '' || SubCategoryId == null)) { + isValid = false; + notify(ST.Pleaseselectsubcategory, 'SHORT'); + } else if ((BrandName == '' || BrandName == null) || (BrandId == '' || BrandId == null)) { + isValid = false; + notify(ST.Pleaseselectbrand, 'SHORT'); + } else if (!(ProductName && ProductId)) { + isValid = false; + notify("Please select Product Name", 'SHORT'); + } else if (!Quantity) { + isValid = false; + notify("Please fill Order Quantity", 'SHORT'); + } else if (!(PackType)) { + isValid = false; + notify('Please select Pack Type', 'SHORT'); + } else if ((RemarkAllow || RemarkAllow == 1) && (Remark == '' || Remark == null)) { + isValid = false; + notify('Please enter remark', 'SHORT'); + } else if (StoreCameraAllow == true && (ImageAllow || ImageAllow == 1) && (Image1 == '' || Image1 == null)) { + isValid = false; + notify(ST.Pleaseclickimage, 'SHORT'); + } + + console.log('isValid:', isValid); + return isValid; + } + + function onFormDataChange(val, key, type = '') { + if (val != '') { + let isValid = validateNumber(val, type); + if (!isValid) { + return; + } + } + + let data = AddVisFormData; + data[key] = val; + BgAddVisFormData(data) + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + + function onselectionChange(option, keyLbl, keyVal, otherData) { + let data = AddVisFormData; + console.log("option-------", option) + data[keyVal] = option.value; + data[keyLbl] = option.label; + if (keyLbl == "PackType") { + data = { ...data, ...option?.item } + } + console.log("data------", JSON.stringify(data)) + + CleanSelector(option, keyLbl, data) + BgAddVisFormData(data) + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + + } + + function CleanSelector(option, keyLbl = '', data = {}) { + if (keyLbl == 'CategoryName') { + loadData(option.value, 'SubCategories'); + data.SubCategoryId = ''; + data.SubCategoryName = ''; + data.BrandId = ''; + data.BrandName = ''; + data.Remark = '' + data.Image1Path = '' + } + else if (keyLbl == 'SubCategoryName') { + loadData(option.value, 'Brands'); + data.BrandId = ''; + data.BrandName = ''; + data.Image1Path = '' + data.Remark = '' + } else if (keyLbl == 'BrandName') { + loadData(option.value, 'Product'); + data.Image1Path = '' + data.Remark = '' + } else if (keyLbl == 'DisplayName') { + data.Image1Path = '' + data.Remark = '' + } + + } + + function CleanSelectorYes() { + let data = AddVisFormData; + + data.SubCategoryId = ''; + data.SubCategoryName = ''; + data.BrandId = ''; + data.BrandName = ''; + + data.Remark = '' + data.Image1Path = '' + + BgAddVisFormData(data) + } + async function loadData(qId, type) { + try { + await db.transaction(async function (txn) { + let q = ''; + if (type == 'SubCategories') q = `Select Distinct p.SubCategoryId,p.SubCategoryName from Product_Master p where p.CategoryId=${qId} and p.IsCompetitor=0 order by p.SubCategorySequence`; + else if (type == 'Brands') q = `Select Distinct p.BrandName,p.BrandId from Product_Master p Where p.SubCategoryId=${qId} and p.IsCompetitor=0 order by p.BrandSequence`; + else if (type == 'Product') q = `Select Distinct p.ProductId,p.ProductName from Product_Master p Where p.BrandId=${qId} and p.IsCompetitor=0 order by p.BrandSequence`; + + await txn.executeSql(q, [], async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + let arr = []; + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + arr.push(data); + if (i == txnres2.rows.length - 1) { + if (type == 'SubCategories') setSubCategories(arr); + else if (type == 'Brands') setBrands(arr); + else if (type == 'Product') setProductsList(arr); + } + } + } + }, function (txnE, txnerr) { console.log(txnerr); },); + + }); + } catch (err) { + console.log(err); + } + } + + + + function onChoiceSelect(val, key) { + if (val == 0 && AddVisibility.length > 0) { + setShowRAllC_M(true); + return; + } + var val1 = val == 1 ? 1 : 0; + if (animatedChoice != null) { + Animated.timing(animatedChoice, { + toValue: val1, + duration: 400, + useNativeDriver: false, + }).start(); + } + + if (val == 0) { + CleanSelectorYes() + } + BgIsAddVisPresent(val); + BgUnsavedChanges(true) + if (val == 0) { + BgWindowData([]) + BgAddVisFormData({}) + } + } + + function onConfirmRemoveAll() { + // Remove all data + if (animatedChoice != null) { + Animated.timing(animatedChoice, { + toValue: 0, + duration: 400, + useNativeDriver: false, + }).start(); + } + BgIsAddVisPresent(0); + BgUnsavedChanges(true) + BgWindowData([]) + BgAddVisFormData({}) + setShowRAllC_M(false); + } + + function onSaveCancel() { + setShowAlert(false); + } + + async function Add_AddVis() { + let isValid = await validateForm(); + console.log('isValid add:', isValid); + if (isValid) { + let arr = AddVisibility; + arr.push(AddVisFormData); + BgWindowData(arr) + BgUnsavedChanges(true) + notify("Order added successfully", 'LONG'); + setrerenderdata(!rerenderdata); + setAddVisFormData({}) + } + } + + function showRemoveConfirm(item, index) { + if (item.keyId > 0) { + setToRemoveId(item.keyId); + setToRemoveItem(item); + setshowRemoveConfirm_M(true); + } + else { + setToRemoveId(index); + setToRemoveItem(item); + setshowRemoveConfirm_M(true); + } + } + + async function Remove_AddVis() { + let { StoreId, ChainId, StateId, StoreTypeId } = storeData; + let { MenuId } = currentMenu; + + db.transaction(async function (txn) { + let index = toRemoveId; + let item = toRemoveItem; + let arr = AddVisibility; + if (item.keyId != null && item.keyId != 'undefined' && index > 0) { + let deleteQuery = `DELETE FROM ${AppTables.ORDER_SIMPLIFY} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' AND KEY_ID='${index}' `; + + txn.executeSql(deleteQuery, [], function (txn3, txnres) { + console.log('Order data deleted', item.keyId, +"" + index); + let updatedVisibility = AddVisibility.filter(item => item.keyId !== index); + setAddVisibility(updatedVisibility); + setHasUnsavedChanges(true); + notify('Order removed successfully', 'LONG'); + setrerenderdata(!rerenderdata); + setToRemoveId(''); + setToRemoveItem({}); + setshowRemoveConfirm_M(false); + }, function (txnE, txnerr) { + console.log('Error deleting survey data:', txnerr); + }); + } + else { + let index = toRemoveId + let item = toRemoveItem; + let arr = AddVisibility; + console.log('toRemoveId:', index); + if (index >= 0 && index < arr.length) { + arr.splice(index, 1); + setAddVisibility(arr); + setHasUnsavedChanges(true); + notify('Order removed successfully', 'LONG') + setrerenderdata(!rerenderdata); + } + else { + notify('Cannot remove! Order not found', 'LONG') + } + setToRemoveId(''); + setToRemoveItem({}); + setshowRemoveConfirm_M(false); + } + + }); + } + + function onselectionChange3(option, keyLbl, keyVal, otherData) { + console.log("option",option) + setReason(option); + } + + function _render_addVisFormTop() { + let xpos = 0; + if (animatedChoice != null) { + xpos = animatedChoice.interpolate({ + inputRange: [0, 1], + outputRange: [0, -75], + }); + } + + let AddVisCameraReqI = KPIFields.findIndex(i => i.KPIFieldName == 'AddVisCameraReq'); + let AddVisCameraReqObj = AddVisCameraReqI >= 0 ? KPIFields[AddVisCameraReqI] : {}; + let AddVisCameraReq = AddVisCameraReqI >= 0 ? AddVisCameraReqObj.KPIFieldEnable : true; + + let ShowReasonIndex = KPIFields.findIndex(i => i.KPIFieldName == 'IsReasonEnable'); + let ShowReasonKPIObj = ShowReasonIndex >= 0 ? KPIFields[ShowReasonIndex] : {}; + let ShowReasonEnable = ShowReasonIndex >= 0 ? ShowReasonKPIObj['KPIFieldEnable'] : true; + + + return ( + + + + {'Is Present'} + + + + + { onChoiceSelect(1, 'isPresent') }}> + Yes + + { onChoiceSelect(0, 'isPresent') }}> + No + + + + + {isAddVisPresent == 1 || isAddVisPresent == '1' ? + + { + console.log('Prev. Orders clicked'); + // 👉 put your navigation or action here + props.navigation.navigate("PrevOrders", { storeData , prevScreen : "OrderSimplify" }) + }} + > + + Prev. Orders + + + + : <>} + + + {(isAddVisPresent != '1' && ShowReasonEnable == true) && + + {ST.SelectReason} + {} + + } + + { + isAddVisPresent == 1 && (rerenderdata == rerenderdata) && + + + + + + {ST.Category} + {CustomPicker(props, Categories, 'CategoryName', 'CategoryId', 'CategoryName', 'CategoryId', onselectionChange, { value: AddVisFormData.CategoryName })} + + + + + + {'Sub Category'} + {CustomPicker(props, SubCategories, 'SubCategoryName', 'SubCategoryId', 'SubCategoryName', 'SubCategoryId', onselectionChange, { value: AddVisFormData.SubCategoryName })} + + + + + {ST.Brands} + {CustomPicker(props, Brands, 'BrandName', 'BrandId', 'BrandName', 'BrandId', onselectionChange, { value: AddVisFormData.BrandName })} + + + + + {"Product"} + {CustomPicker(props, ProductsList, 'ProductName', 'ProductId', 'ProductName', 'ProductId', onselectionChange, { value: AddVisFormData.ProductName })} + + + + + {"Order Quantity"} + { + // ✅ Only allow digits (no decimal point, no letters) + const numericVal = val.replace(/[^0-9]/g, "").slice(0, 3); + onFormDataChange(numericVal, 'Quantity', 'text'); + } + } + keyboardType="numeric" // ✅ opens numeric keyboard + maxLength={3} + /> + + + + + + {"Pack Type"} + {CustomPicker(props, PackTypeList, 'PackType', 0, 'PackType', 0, onselectionChange, { value: AddVisFormData.PackType })} + + + {(AddVisFormData?.RemarkAllow || AddVisFormData?.RemarkAllow == 1) && + + {"Remark"} + { onFormDataChange(val, 'Remark', 'text'); }} + /> + + } + { + (AddVisFormData?.ImageAllow || AddVisFormData?.ImageAllow == 1) && + + + {ST.Image} + + + {(AddVisFormData.Image1Path == '' || AddVisFormData.Image1Path == null) ? + { openCamera('1') }}> + + : (AddVisFormData.Image1Path != '' && AddVisFormData.Image1Path != null) ? + { OpenImgModal(AddVisFormData.Image1Path, '1') }}> + + : null + } + + + + + + } + + { Add_AddVis() }}> + {ST.Add} + + + + + + {AddVisibility.length > 0 && + {"Added Orders"} + + { + AddVisibility.length > 0 && + AddVisibility.map((item, index) => { + console.log(item); + return ( + + + + + {ST.Category + ' :'} + {item?.CategoryName} + + + {ST.SubCategory + ' :'} + {item?.SubCategoryName} + + + {ST.Brands + ' :'} + {item?.BrandName} + + + {"Product" + ' :'} + {item?.ProductName} + + + {'Order Quantity :'} + {item?.Quantity} + + + {'Pack Type :'} + {item?.PackType} + + {item?.Remark && + {ST.Remark + ' :'} + {item?.Remark} + } + + {AddVisCameraReq && item.Image1Path && + + {ST.Image} + {(item.Image1Path != null && item.Image1Path != '') && } + } + { showRemoveConfirm(item, index) }}> + + + + + + + ); + }) + } + + } + + + } + + ) + } + + + + return ( + + {processing && } + + + + {_OpenCaptureImage_Modal()} + + {ConfirmSaveAlert(props, showAlert, onSaveCancel, saveData)} + {ConfirmSaveAlert(props, showRemoveConfirm_M, () => { setshowRemoveConfirm_M(false) }, Remove_AddVis, "Do you really want to remove this Order ?")} + {ConfirmSaveAlert(props, showRAllC_M, () => { setShowRAllC_M(false) }, onConfirmRemoveAll, "Do you really want to remove all Order data?")} + { setShowCamera(false); getImage(imgData) }} showCamera={showCamera} onHideCamera={() => { setShowCamera(false); }} /> + + + + {Object.keys(storeData).length > 0 && + + {_render_addVisFormTop()} + + } + + { onSubmitData() }} /> + + + + + + + ); +} + + +export default connect(mapStateToProps, mapDispatchToProps)(OrderSimplify); \ No newline at end of file diff --git a/PerformicsSrc/src/screens/OrderStatus.js b/PerformicsSrc/src/screens/OrderStatus.js new file mode 100644 index 0000000..5fee386 --- /dev/null +++ b/PerformicsSrc/src/screens/OrderStatus.js @@ -0,0 +1,212 @@ +import React,{useState,useEffect,useRef} from 'react'; +import Container from '../components/container'; +import { useRoute } from '@react-navigation/native'; +import { globalStyles,customStyles,GetPageTheme } from "../styles/Global"; +import {StatusBar,Image,TextInput,View,Text,ScrollView,TouchableOpacity,Platform,PermissionsAndroid,FlatList,Animated, Alert, KeyboardAvoidingView} from 'react-native'; +import { ReactReduxContext,connect,useSelector, useDispatch } from 'react-redux'; +import { mapStateToProps,mapDispatchToProps } from '../reducers/contextProvider'; +import SQLite from 'react-native-sqlite-2'; +import {notify} from '../components/notify'; +import moment from 'moment'; +import {checkMDStockScreenExists, getDownloadJson,getKPIFields,marktext1,marktext2, validateNumber} from '../controller/functions'; +import {get_item,set_item,clear_item} from '../components/localStorage'; +import {version,sloganline,appname,testurl,db, colors_Arr} from '../constants/constants'; +import CustomHeader from '../components/customHeader'; +import {Card, Menu, Switch} from 'react-native-paper'; +import {AntDesign, Entypo, Fontisto, MaterialCommunityIcons} from '../components/icons'; +import { stat } from 'react-native-fs'; +import CustomLoader from '../components/CustomLoader'; +import LinearGradient from 'react-native-linear-gradient'; +import { AppTables } from '../constants/tableConstants'; +import { SvgXml } from 'react-native-svg'; +import {launchCamera, launchImageLibrary,CameraOptions} from 'react-native-image-picker'; +import * as RNFS from 'react-native-fs'; +import GradientButton from '../components/gradientButton'; + +import cameraImg from '../assets/performics/camera_front_image.svg' +import addImg from '../assets/performics/add_image.svg'; +import CustomModal from '../components/CustomModal'; +import { Q_GetAvailabityDefaultData, Q_MenuList } from '../constants/ConstantQueries'; +import { ConfirmSaveAlert } from '../components/alert'; + +import DateTimePicker from '@react-native-community/datetimepicker'; + +function OrderStatus(props) { + const route = useRoute(); + + // get all theme styles acc to current theme set + const PageTheme=GetPageTheme(props.DarkMode,route.name); + const customStyle=customStyles(props.DarkMode,route.name); + const ST=props.StaticText || {}; + const [processing, setProcessing] = useState(true); + const [loaderTitle, setLoaderTitle] = useState('loading...'); + const [isAdhocScreen, setIsAdhocScreen] = useState(false); + const [storeData, setStoreData] = useState({}); + const [currentMenu, setCurrentMenu] = useState({}); + const [Orderlist, setOrderList] = useState([]); + const [rerenderdata, setrerenderdata]= useState(0); + + const d1=new Date(); + const d2=moment(d1).format('MM/DD/YYYY'); + + useEffect(() => { + let params=props.route.params? props.route.params:{}; + let storeData1=params.storeData || {}; + let menu1=params.menu || {}; + let isAdhoc=params.isAdhoc || false; + let bgRedirFlag=params.redirect || false; + let BgNavData=params.BgNavData || {}; + + setIsAdhocScreen(isAdhoc); + setStoreData(storeData1); + + setCurrentMenu(menu1); + if(bgRedirFlag==true && Object.keys(BgNavData).length>0){ + BgNavToOrderDetail(BgNavData,menu1) + } + + getData(storeData1,menu1); + const willFocusSubscription = props.navigation.addListener('focus', () => { + getData(storeData1,menu1); + }); + + return willFocusSubscription; + + }, []); + + function BgNavToOrderDetail(BgNavData,menu1){ + + let { + storeData, + orderDetail}=BgNavData + props.navigation.navigate("OrderDetail",{'storeData':storeData,'orderDetail':orderDetail,menu:menu1}); + } + + async function getData(storeData1,menu1){ + try { + let {StoreId}=storeData1; + + await db.transaction(async function (txn) { + // let q=` SELECT Distinct OrderId,StorePO,SystemPO from PriviousVisit_Orders p Where p.StoreId ='${StoreId}'`; + + let q=` SELECT Distinct p.MID,p.InvoiceType, p.OrderId,p.StorePO,p.SystemPO,p2.ProductCount,(CASE WHEN o.FilledProdCount>0 THEN 1 ELSE 0 END) as IsDone from PriviousVisit_Orders p + LEFT OUTER JOIN (select OrderId,MID,count(ProductId) as ProductCount from PriviousVisit_Orders GROUP BY OrderId,MID ) p2 on p.OrderId=p2.OrderId AND p.MID =P2.MID + LEFT OUTER JOIN (Select ORDER_ID,MID,count(ORDER_ID) as FilledProdCount from ORDER_STATUS where STORE_ID='${StoreId}' and VISIT_DATE='${d2}' group by ORDER_ID) o on p.OrderId=o.ORDER_ID AND p.MID =o.MID + Where p.StoreId='${StoreId}'`; + + await txn.executeSql(q,[],async function (txn2, txnres) { + console.log('inputs found check',q); + if(txnres.rows.length>0){ + console.log('inputs found',); + let arr=[]; + for(var i=0;i0){ + // console.log("OrderId is found -----",OrderId) + // data["IsDone"]=true; + // }else{data["IsDone"]=false;} },function (txnE,txnerr) { console.log(txnerr);},); + arr.push(data); + if(i==txnres.rows.length-1){ + setOrderList(arr); + setProcessing(false); + } + } + }else{ + setProcessing(false); + } + + },function (txnE,txnerr) { console.log(txnerr); setProcessing(false); },); + + }); + } catch (err) { + console.log(err); + setProcessing(false); + } + } + + async function get_to_store_details(item){ + props.navigation.navigate("OrderDetail",{storeData:storeData,orderDetail:item,menu:currentMenu}); + } + + function _render_PresentQ(item,index){ + + return ( + {get_to_store_details(item)}}> + + {/* + + {item.StoreName} + + */} + + + + {'Order Id:'} + {item.OrderId} + + + + + {'Store PO:'} + {item.StorePO} + + + + + {'System PO:'} + {item.SystemPO} + + + + + {'Product Count:'} + {item.ProductCount} + + + + { console.log("OrderId is found ----2-",item.IsDone)} + {item.IsDone ==true && + + } + + + ); + } + + + return ( + + {processing && } + + + + { Object.keys(storeData).length>0 && + + + {"Order Status"} + + {Orderlist.map((item,index)=>{ + return _render_PresentQ(item,index) + }) + } + + } + {/* + {submitData()}}/> + */} + + + + ); + } + + + +export default connect(mapStateToProps, mapDispatchToProps)(OrderStatus); \ No newline at end of file diff --git a/PerformicsSrc/src/screens/POSM.js b/PerformicsSrc/src/screens/POSM.js new file mode 100644 index 0000000..c0d636a --- /dev/null +++ b/PerformicsSrc/src/screens/POSM.js @@ -0,0 +1,2286 @@ +import React,{useState,useEffect,useRef, memo} from 'react'; +import Container from '../components/container'; +import { useRoute } from '@react-navigation/native'; +import { globalStyles,customStyles,GetPageTheme } from "../styles/Global"; +import {StatusBar,Image,TextInput,View,Text,ScrollView,TouchableOpacity,Platform,PermissionsAndroid,FlatList, Alert, Animated, AppState, Keyboard} from 'react-native'; +import { ReactReduxContext,connect,useSelector, useDispatch } from 'react-redux'; +import { mapStateToProps,mapDispatchToProps } from '../reducers/contextProvider'; +import SQLite from 'react-native-sqlite-2'; +import {notify} from '../components/notify'; +import moment from 'moment'; +import {getDownloadJson,getKPIFields,marktext1,marktext2, resizeImage, restore_ImageWithMetaData, validateNumber} from '../controller/functions'; +import {get_item,set_item,clear_item} from '../components/localStorage'; +import {version,sloganline,appname,testurl,db, colors_Arr, common_ImagePath,ImageFolderPath} from '../constants/constants'; +import CustomHeader from '../components/customHeader'; +import {Card, Menu, Switch} from 'react-native-paper'; +import {AntDesign, Entypo, FontAwesome, Fontisto, MaterialCommunityIcons} from '../components/icons'; +import { stat } from 'react-native-fs'; +import CustomLoader from '../components/CustomLoader'; +import LinearGradient from 'react-native-linear-gradient'; +import { AppTables } from '../constants/tableConstants'; +import { SvgXml } from 'react-native-svg'; +import {launchCamera, launchImageLibrary,CameraOptions} from 'react-native-image-picker'; +import * as RNFS from 'react-native-fs'; +import GradientButton from '../components/gradientButton'; +import addImg from '../assets/performics/add_image.svg'; +import CustomModal from '../components/CustomModal'; +import { Q_getpaidvisibility } from '../constants/ConstantQueries'; +import { Picker } from '@react-native-picker/picker'; +import { ConfirmSaveAlert } from '../components/alert'; +import ModalSelector from 'react-native-modal-selector' +import { CustomPicker, CustomPicker2 } from '../components/CustomPicker'; +import CustomCamera from '../components/Camera'; +import ImageViewer from 'react-native-image-zoom-viewer'; +import DateTimePicker from '@react-native-community/datetimepicker'; +import CameraImg from '../assets/performics/camera_front_image.svg' +import MultiSelect from 'react-native-multiple-select'; + +import CameraImg3 from '../assets/performics/camera_tick.svg'; +import CameraImg5 from '../assets/image/astrickcamera.svg'; + +const POSM=memo((props)=>{ + const route = useRoute(); + const ST=props.StaticText || {}; + // get all theme styles acc to current theme set + const PageTheme=GetPageTheme(props.DarkMode,route.name); + const customStyle=customStyles(props.DarkMode,route.name); + const animatedChoice=useRef(new Animated.Value(0)).current; + + const [processing, setProcessing] = useState(true); + const [loaderTitle, setLoaderTitle] = useState(); + const [isAdhocScreen, setIsAdhocScreen] = useState(false); + const [storeData, setStoreData] = useState({}); + const [currentMenu, setCurrentMenu] = useState({}); + const [rerenderdata, setrerenderdata]= useState(0); + const [rerenderdata2, setrerenderdata2]= useState(0); + const [rerenderdata3, setrerenderdata3]= useState(0); + const [rerenderdata4, setrerenderdata4]= useState(0); + + const [hasUnsavedChanges,setHasUnsavedChanges] = useState(false); + + const [dateValue, setDateValue] = useState(''); + const [WindowData, setWindowData] = useState([]); + const [reasons_list, setReasons_list] = useState([]); + const [Windows, setWindows] = useState([]); + const [globalWindows, setGlobalWindows] = useState([]); + const [show_zoomImage, setShow_zoomImage] = useState(false); + const [refImageIndex, setrefImageIndex] = useState(0); + const [showAlert, setShowAlert] = useState(false); + const [zoomImageUrl, setZoomImageUrl] = useState([]); + const [showCamera, setShowCamera] = useState(false); + const [getImageProps,setGetImageProps]= useState({}); + const zoomView=useRef(null); + const [showRating, setShowRating] = useState(false); + const [RatingQtn, setRatingQtn] = useState({}); + const [RatingWindow, setRatingWindow] = useState({}); + const [RatingOrder, setRatingOrder] = useState([]); + const [searchedItem, setSearchedItem]= useState(''); + const [KPIFields, setKPIFields] = useState([]); + const [showSwitchCamera,setShowSwitchCamera]= useState(false); + const [GridValue, setGridValue] = useState(false); + const [StoreCameraAllow, setStoreCameraAllow] = useState(true); + const [ItemsInView,setItemsInView] = useState([]); + + const [DataCleanModal, setDataCleanModal] = useState(false); + const [DataCleanAnim, setDataCleanAnim] = useState(""); + const [DataCleanItem, setDataCleanItem] = useState({}); + const [isPresentClean, setIsPresentClean] = useState(0); + + const [InputChange, setInputChange] = useState([]); + + const [SelectedImg, setSelectedImg] = useState(''); + const [showModal, setShowModal] = useState(false); + const [reCapImgModalObj, setReCapImgModalObj] = useState({}); + const [showImageSaveOp, setShowImageSaveOp] = useState(true); + + const hasUnsavedChangesRef = React.useRef(hasUnsavedChanges); + const WindowDataRef=React.useRef(WindowData); + const StoreIdRef=React.useRef(null); + const ScreenNameRef=React.useRef(''); + + const [isKPIPresent, setIsKPIPresent] = useState(0); + const isKPIPresentAnim=useRef(new Animated.Value(0)).current; + const isKPIPresentRef=useRef(isKPIPresent) + + // error field states + const [errorfield, setErrorField] = useState({}); + const [error, setError] = useState(false); + + + const onViewableItemsChanged = ({ viewableItems,}) => { + // Do stuff + console.log("onViewableItemsChanged called:") + setItemsInView(viewableItems); + }; + + const FlatLConfCallbackPairs=useRef([{viewabilityConfig:{itemVisiblePercentThreshold:50},onViewableItemsChanged}]); + + const d1=new Date(); + const d2=moment(d1).format('MM/DD/YYYY'); + + + useEffect(() => { + setLoaderTitle(ST.Loading+'...') + let params=props.route.params? props.route.params:{}; + let storeData1=params.storeData || {}; + let menu1=params.menu || {}; + let cameraAllow=storeData1.CameraAllow=='true' || storeData1.CameraAllow==1?true:false; + + let isAdhoc=params.isAdhoc || false; + setStoreCameraAllow(cameraAllow); + setIsAdhocScreen(isAdhoc); + setStoreData(storeData1); + setCurrentMenu(menu1); + + StoreIdRef.current=storeData1.StoreId + ScreenNameRef.current=menu1.ScreenName + getData(storeData1,menu1); + + const AppStateSubscription = AppState.addEventListener('change', (pro)=>{ _handleAppStateChange(pro)}); + const unsubscribe=props.navigation.addListener('beforeRemove', onBeforeRemove); + + return function cleanup() { + AppStateSubscription.remove(); + // AppState.removeEventListener('change', (pro)=>{ _handleAppStateChange(WindowData,pro)}); + return unsubscribe; + }; + }, []); + + const _handleAppStateChange = async (nextAppState) => { + + if(nextAppState =='background' && hasUnsavedChangesRef.current==true){ + + let newData = { + storeBGData:WindowDataRef.current, + menuName:ScreenNameRef.current, + StoreId1:StoreIdRef.current, + visiteDate:d2, + bgisKPIPresent:isKPIPresentRef.current + } + let WindowsStr= JSON.stringify(newData) + + await set_item('storeData',WindowsStr); + } + } + + useEffect(() => { + const unsubscribe=props.navigation.addListener('beforeRemove', onBeforeRemove); + return unsubscribe; + // AppState.removeEventListener('change',(pro)=>{ _handleAppStateChange(WindowData,pro)}); + // AppState.addEventListener('change',(pro)=>{ _handleAppStateChange(WindowData,pro)}); + }, [hasUnsavedChanges]); + + // useEffect(() => { + // AppState.removeEventListener('change',(pro)=>{ _handleAppStateChange(WindowData,pro)}); + // AppState.addEventListener('change',(pro)=>{ _handleAppStateChange(WindowData,pro)}); + // }, [WindowData]); + + useEffect(() => { + const unsubscribe=props.navigation.addListener('beforeRemove', onBeforeRemove); + return unsubscribe; + }, [showCamera]); + + useEffect(() => { + const unsubscribe=props.navigation.addListener('beforeRemove', onBeforeRemove); + return unsubscribe; + }, [show_zoomImage]); + + function onBeforeRemove(e){ + if(showCamera==true){ + e.preventDefault(); + setShowCamera(false); + } + else if(show_zoomImage==true){ + e.preventDefault(); + setShow_zoomImage(false); + } + else{ + if (hasUnsavedChanges==true) { + e.preventDefault(); // Prevent default behavior of leaving the screen + onRemoveScreen(e); + } + else{ + return; + } + } + } + + function BgUnsavedChanges(val){ + hasUnsavedChangesRef.current=val + setHasUnsavedChanges(val); + } + + function onRemoveScreen(e){ + Alert.alert( + "", + ST.Doyoureallywanttoexitthescreen, + [ + { + text: ST.Cancel, + onPress: () => {}, + style: "cancel" + }, + { text: ST.OK, onPress: async () => { + // setHasUnsavedChanges(false); + BgUnsavedChanges(false) + await clear_item('storeData') + props.navigation.dispatch(e.data.action);} } + ] + ); + } + + + async function getData(storeData1,menu1){ + try { + let {StoreId,ChainId,StateId,StoreTypeId}=storeData1; + + let AllKPIFields=await getKPIFields(menu1); + setKPIFields(AllKPIFields); + + // set switch camera flag as defined in mapping menu flag (if exists) + let SwitchingCameraI=AllKPIFields.findIndex(i=>i.KPIFieldName=='SwitchingCamera'); + let SwitchingCameraObj=SwitchingCameraI>=0?AllKPIFields[SwitchingCameraI]:{}; + let SwitchingCamera=SwitchingCameraI>=0?SwitchingCameraObj['KPIFieldEnable']:false; + setShowSwitchCamera(SwitchingCamera); + + let storeBGData1=[],bgStoreJson={},isBgDataExists=false; + let windData = await get_item('storeData') + if(windData!=null && windData!=''){ + let StoreJson = JSON.parse(windData) + let { storeBGData,menuName,StoreId1,visiteDate,bgisKPIPresent }= StoreJson + if(storeBGData.length>0 && menuName == menu1.ScreenName && StoreId1== StoreId && visiteDate==d2){ + isBgDataExists=true; + storeBGData1=storeBGData; + bgStoreJson=StoreJson + BgUnsavedChanges(true) + WindowDataRef.current=storeBGData + setWindowData(storeBGData); + onChoiceSelect_Global(bgisKPIPresent) + } + } + + let KPIPresentEnableIndex=AllKPIFields.findIndex(i=>i.KPIFieldName=='StorePOSMPresent') + let KPIPresentEnableObj=KPIPresentEnableIndex>=0?AllKPIFields[KPIPresentEnableIndex]:{}; + let KPIPresentEnable=KPIPresentEnableIndex>=0?KPIPresentEnableObj['KPIFieldEnable']:true; + + + let StorePOSMDefaultReasonI=AllKPIFields.findIndex(i=>i.KPIFieldName=='StorePOSMDefaultReason') + let StorePOSMDefaultReasonObj=StorePOSMDefaultReasonI>=0?AllKPIFields[StorePOSMDefaultReasonI]:{}; + let StorePOSMDefaultReasonS=StorePOSMDefaultReasonI>=0?StorePOSMDefaultReasonObj['KPIFieldDisplayName']:"0"; + let StorePOSMDefaultReasonArr=StorePOSMDefaultReasonS!=null && StorePOSMDefaultReasonS!=''?StorePOSMDefaultReasonS.split(','):[]; + let StorePOSMDefaultReasonId=StorePOSMDefaultReasonArr.length>0?parseInt(StorePOSMDefaultReasonArr[0]):0; + + + await db.transaction(async function (txn) { + + + let q3=`Select POSMReasonId as ReasonId,POSMReason as Reason,IsRemarkTaken From Master_POSMReason where POSMReasonId not in ('${StorePOSMDefaultReasonId}')`; + + await txn.executeSql(q3,[],async function (txn2, txnres2) { + if(txnres2.rows.length>0){ + let arr=[]; + for(var i=0;i0){ + let arr=[];let images=[],allWindowsData=[],inputChangeFlag=[]; + + for(var i=0;ii.POSMDefinitionId==data.POSMDefinitionId && i.PosmId==data.PosmId) + let storeBgObj=storeBgIndex>=0?storeBGData1[storeBgIndex]:{}; + isPresent=storeBgObj.isPresent + } + + // if(isBgDataExists){ + // let storeBgIndex=storeBGData1.findIndex(i=>i.PromoId==data.PromoId && i.PromoDefinitionId==data.PromoDefinitionId) + // let storeBgObj=storeBgIndex>=0?storeBGData1[storeBgIndex]:{}; + // isPresent=HidePresentYesNoEnable?1:(storeBgObj.isPresent=='1' || storeBgObj.isPresent==1?1:0); + // // let animatedChoice=new Animated.Value(isPresent); + // // data.animatedChoice=animatedChoice; + // } + + let animatedChoice=new Animated.Value(isPresent||0); + let animatedHeight = new Animated.Value(450); + data.animatedHeight=animatedHeight + data.animatedChoice=animatedChoice; + + if(isPresent==1 || isPresent=='1'){ + anyPresent=1; + } + + let imgObj={imgIndex:(i+1),url: data.POSMRefImage, props: {}} + images.push(imgObj); + + let WQr = await getWindowQuestions(data,storeData1,isPresent,menu1); + let WindowQuestions = WQr['WindowQuestions'] || []; + let WindowQA= WQr['WindowQA'] || {}; + + + let isNAImageAvl=data.POSMNotExistCamera=='true' || data.POSMNotExistCamera==1?1:0; + let NAImage1=isNAImageAvl==1 && data.POSMNAImage!=null?data.POSMNAImage:''; + let NAImage1Path=NAImage1!=''?'file://'+ImageFolderPath+menu1.ScreenName+"/"+NAImage1:''; + + let isImage1= data.POSMImage1=='true' || data.POSMImage1==1?1:0; + let Image1Name=isImage1==1 && data.Image1!=null?data.Image1:''; + let Image1=Image1Name!=''?'file://'+ImageFolderPath+menu1.ScreenName+"/"+Image1Name:''; + console.log('IsPresent in save',data.IsPresent) + + let isImage2= data.POSMImage2=='true' || data.POSMImage2==1?1:0; + let Image2Name=isImage1==1 && data.Image2!=null?data.Image2:''; + let Image2=Image2Name!=''?'file://'+ImageFolderPath+menu1.ScreenName+"/"+Image2Name:''; + let showRsnRemark=((data.SHOW_RSN_REMARK=='1' || data.SHOW_RSN_REMARK==1 )?true:false); + + let windowDataObj={'PosmId':data.PosmId,'POSMDefinitionId':data.POSMDefinitionId,'WindowQA':WindowQA,'NAImage1':NAImage1,'NAImage1Path':NAImage1Path,'ReasonId':data.ReasonId,'Reason':data.Reason,'isPresent':isPresent,'Image1Name':Image1Name,'Image1':Image1,'Image2Name':Image2Name,'Image2':Image2,'showOtherText':showRsnRemark,'RemarkText':(data.REASON_REMARK || '')}; + data['WindowQuestions']=WindowQuestions; + + let item_change_flag=KPIPresentEnable && data.ReasonId!=null && parseInt(data.ReasonId)==StorePOSMDefaultReasonId?false:true; + console.log('data.ReasonId',data.ReasonId,StorePOSMDefaultReasonId,item_change_flag); + let changesFlag = {PosmId:data.PosmId, POSMDefinitionId: data.POSMDefinitionId, Flag:item_change_flag} + inputChangeFlag.push(changesFlag) + + arr.push(data); + + allWindowsData.push(windowDataObj); + if(i==txnres2.rows.length-1){ + let { menuName,StoreId1,visiteDate }=bgStoreJson + if(!isBgDataExists){ + WindowDataRef.current=allWindowsData + setWindowData(allWindowsData); + } + if(KPIPresentEnable && anyPresent==1){ + onChoiceSelect_Global(1); + } + setInputChange(inputChangeFlag) + setWindows(arr); + setGlobalWindows(arr); + setZoomImageUrl(images); + setProcessing(false); + } + } + } + else{ + await txn.executeSql(q2,[],async function (txn2, txnres2) { + + if(txnres2.rows.length>0){ + let arr=[],images=[],allWindowsData=[],inputChangeFlag=[]; + + for(var i=0;ii.POSMDefinitionId==data.POSMDefinitionId && i.PosmId==data.PosmId) + let storeBgObj=storeBgIndex>=0?storeBGData1[storeBgIndex]:{}; + isPresent=storeBgObj.isPresent + } + + let animatedChoice=new Animated.Value(isPresent||0); + let animatedHeight = new Animated.Value(450); + data.animatedHeight=animatedHeight + data.animatedChoice=animatedChoice; + + let imgObj={imgIndex:(i+1),url: data.POSMRefImage, props: {}} + images.push(imgObj); + + let WQr = await getWindowQuestions(data,storeData1,false,menu1); + let WindowQuestions = WQr['WindowQuestions'] || []; + let WindowQA= WQr['WindowQA'] || {}; + let WindowSplits = []; + for(var s=0;s{ + db.transaction(async function (txn) { + var q='',selectlist='',join='',join2=''; + if(isInserted==true){ + selectlist=` DISTINCT q.QUESTION_ID as POSMQuestionId,q.QUESTION_CODE as POSMQuestionCode,wq.POSMQuestionName,wq.QuestionType,wq.PQShowCamera,wq.PQCameraMandatory,wq.PQLengthValidationRequired,wq.PQMinimumChar,wq.PQMaximumChar,wq.PQDecimalPoint,wq.PQDateRangeMin,wq.PQDateRangeMax,wq.PQVoiceLengthInMinutes,wq.PQDefaultQuestionEnable,q.ANSWER as Answer,q.ANSWER_ID as AnswerId,q.MULTI_OPTIONS_IDS as multi_op_ids,q.IMAGE_ALLOW1 as PAShowCamera,q.IMAGE1 as Image1 `; + join2=` inner join Mapping_POSMQuestion mq on mq.POSMQuestionId=wq.POSMQuestionId `; + join=` inner join Master_POSMQuestion wq on wq.POSMQuestionId=q.QUESTION_ID `; + q=`select ${selectlist} from ${AppTables.POSM_CHILD_DATA} q ${join} ${join2} where q.STORE_ID='${storeData1.StoreId}' and q.POSM_DEFINITION_ID='${window.POSMDefinitionId}' and q.POSM_ID='${window.PosmId}' order by wq.POSMQuestionSequence `; + } + else{ + selectlist=` DISTINCT wq.POSMQuestionId,wq.POSMQuestionCode,wq.POSMQuestionName,wq.QuestionType,wq.PQShowCamera,wq.PQCameraMandatory,wq.PQLengthValidationRequired,wq.PQMinimumChar,wq.PQMaximumChar,wq.PQDecimalPoint,wq.PQDateRangeMin,wq.PQDateRangeMax,wq.PQVoiceLengthInMinutes,wq.PQDefaultQuestionEnable `; + join=` inner join Mapping_POSMQuestion mq on mq.POSMQuestionId=wq.POSMQuestionId `; + q=`select ${selectlist} from Master_POSMQuestion wq ${join} where mq.POSMDefinitionId='${window.POSMDefinitionId}' order by wq.POSMQuestionSequence `; + } + + await txn.executeSql(q,[],async function (txn2, txnres2) { + + if(txnres2.rows.length>0){ + let arr=[]; + let wqa_obj={}; + for(var i=0;i0){ + for(var k=0;k=0)){ + showImageTag=true; + } + } + } + } + + if(showImageTag && data.Answer!=null){ + + let imgPath=(Platform.OS=='ios'?'file://':'')+ImageFolderPath+menu1.ScreenName+"/"+data.Image1; + wqa_obj[imgname_key]=data.Image1; + wqa_obj[img_key]=imgPath; + } + + + + if(data.QuestionType=='Date' && data.Answer!=null){ + let dayonly=moment().format('DD'); + let actual_date=data.Answer?data.Answer.split('/'):[]; + let month=actual_date[0],year=actual_date[1]; + let fulldate=month+'/'+dayonly+'/'+year; + wqa_obj[date_key]=fulldate; + + } + + arr.push(data); + if(i==txnres2.rows.length-1){ + obj['WindowQuestions']=arr; + obj['WindowQA']=wqa_obj; + resolve(obj) + } + } + } + else{ + resolve(obj) + } + },function (txnE,txnerr) { console.log(txnerr); resolve(obj) },); + }); + }).then((val)=>{ + return val + }).catch((err)=>{ + console.log(err); + return obj; + }); + } + + + async function getWindowAnswers(qtn){ + + return new Promise((resolve,reject)=>{ + + db.transaction(async function (txn) { + var q='',selectlist=''; + selectlist=` DISTINCT POSMAnswerId as AnswerId,POSMAnswerName as Answer,PAShowCamera,PACameraMandatory,PAQuestionEnable,PAQuestionDisable `; + q=`select ${selectlist} from Master_POSMQuestion where POSMQuestionId='${qtn.POSMQuestionId}' order by PASequence `; + + await txn.executeSql(q,[],async function (txn2, txnres2) { + if(txnres2.rows.length>0){ + let arr=[]; + for(var i=0;i{ + return val + }).catch((err)=>{ + console.log(err); + return []; + }); + } + + + + async function getImage(imgdata){ + let type=getImageProps.type || ''; + let window=getImageProps.window || {}; + let qtn=getImageProps.qtn || {}; + let cameraType=getImageProps.cameraType!=null?getImageProps.cameraType:'1'; + + if(typeof imgdata=='object' && imgdata.errorCode=='camera_unavailable'){ + notify(ST.Cameraunavailable); + } + else if(typeof imgdata =='object' && imgdata.uri!=null){ + const img=imgdata; + const imgurl=img.uri, imgWidth=img.width, imgHeight=img.ExtendedHeight; + let isImgFromGallery=img.fromGallery!=null?img.fromGallery:false; + let picture_clickedd=isImgFromGallery==true?img.datetime:new Date(); + + let picture_clicked_time=moment(picture_clickedd).format('MM-DD-YYYY HH:mm:ss') + let picture_clicked_time_for_pic_name=moment(picture_clickedd).format('MMDDYYYY_HHmmss') + + console.log("time", picture_clicked_time); + console.log("time1", picture_clicked_time_for_pic_name); + let calculate_tym_date_for_filename = picture_clicked_time_for_pic_name; + let calculate_tym_date_over_img = picture_clicked_time; + + let filename=storeData.StoreId+'_'+window.POSMDefinitionId+'_'+window.PosmId+'_'+(props.UserId || '')+'_POSMImg-'+calculate_tym_date_for_filename+'.jpg'; + + let allData=WindowData; + let defData={'PosmId':window.PosmId,'POSMDefinitionId':window.POSMDefinitionId}; + const wind_index=allData.findIndex(i=>i.PosmId==window.PosmId && i.POSMDefinitionId==window.POSMDefinitionId) ; + let wind=wind_index>=0?allData[wind_index]:defData; + + let camera1Label=window.POSMImage1Lable || ''; + let camera2Label=window.POSMImage2Lable || ''; + let extraLabel=''; + + if(cameraType=='2'){ + + var QD=wind.WindowQA || {}; + var image_key=qtn.POSMQuestionId+'_ImageName1'; + var image_key_path=qtn.POSMQuestionId+'_ImagePath1'; + QD[image_key]=filename; + extraLabel='Qtn Id: '+qtn.POSMQuestionId; + + } + else if(cameraType=='3'){ + var image_key='NAImage1'; + var image_key_path='NAImage1Path'; + wind[image_key]=filename; + extraLabel='Not Exist'; + } + else{ + var image_key=type=='1'?'Image1Name':'Image2Name'; + var image_key_path=type=='1'?'Image1':'Image2'; + wind[image_key]=filename; + extraLabel=type=='1'?camera1Label:camera2Label; + } + + const mark_text1=calculate_tym_date_over_img; + const mark_text2='Store Name:'+storeData.StoreName+' | Store Id:'+storeData.StoreId+' | User Id:'+storeData.EmpId+' | POSMName:'+window.POSMName+"("+window.POSMDefinitionId+")"+(extraLabel!=''?' ('+extraLabel+')':'')+' | Image Type: '+currentMenu.MenuName+' | Date:'+calculate_tym_date_over_img; + + let imagePath=`${ImageFolderPath+currentMenu.ScreenName}/${filename}`; + RNFS.copyFile(imgurl, imagePath) + .then(async(resn) => { + // render data with clicked image + let uri='file://'+imagePath; + console.log('image marker',uri); + + if(cameraType=='2'){ + QD[image_key_path]=uri; + wind.WindowQA=QD; + wind_index>=0?allData[wind_index]=wind:allData.push(wind); + setWindowData(allData); + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata3(!rerenderdata3); + } + else{ + wind[image_key_path]=uri; + wind_index>=0?allData[wind_index]=wind:allData.push(wind); + setWindowData(allData); + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + let objIndex = InputChange.findIndex((obj => obj.PosmId == window.PosmId && obj.POSMDefinitionId==window.POSMDefinitionId)); + let winArr=[...InputChange] + winArr[objIndex].Flag=true + setSelectedImg(uri) + setInputChange(winArr) + + // add metdata then resize image and restored back to the imagePath + let restore_data={"destFilePath":imagePath,"imgurl":imgurl,imgWidth,imgHeight,mark_text1,mark_text2} + let is_restored=await restore_ImageWithMetaData(restore_data,imgdata); + console.log("image restored:",is_restored); + + }) + .catch(err => { + console.log('ERROR: image file write failed!!!'); + console.log(err.message, err.code); + }); + } + } + + async function openCamera(window,type='1',cameraType='1',qtn={}){ + setErrorField({}); + setError(false); + let GridAllow = cameraType=='1' ? ( type==='1' ? (window.POSMImage1CameraGrid === 'true' || window.POSMImage1CameraGrid==true): (window.POSMImage2CameraGrid === 'true' || window.POSMImage2CameraGrid==true)):false + setGridValue(GridAllow); + setGetImageProps({'window':window,'type':type,'cameraType':cameraType,'qtn':qtn}); + setShowCamera(true); + // props.navigation.navigate('CameraScreen',{'getImage':getImage,'cameraType':'back'}) + } + + async function OpenImgModal(imgPath,window,type,cameraType,qtn){ + setSelectedImg(imgPath) + setShowModal(true); + if((imgPath!='' && imgPath!=null)){ + setShowImageSaveOp(false); + } + else{ + setShowImageSaveOp(true); + } + setReCapImgModalObj({window,type,cameraType,qtn}) + // _OpenCaptureImage_Modal(imgPath,window,splitItem,splitItemIndex,cameraType) + + } + + function cancelImage(){ + // setImage1(''); + setSelectedImg(''); + setReCapImgModalObj({}) + setShowModal(false); + } + + async function onSubmitData(){ + let isvalid=await validate(); + if(isvalid){ + Keyboard.dismiss(); + setShowAlert(true); + } + } + + async function saveData(){ + setErrorField({}); + setError(false); + // setHasUnsavedChanges(false); + BgUnsavedChanges(false) + setShowAlert(false); + setLoaderTitle(ST.SavingData+'...'); + setProcessing(true); + let d1n=new Date(); + let d3=moment(d1n).format('MM/DD/YYYY'); + try { + let {StoreId,ChainId,StateId,StoreTypeId}=storeData; + await db.transaction(async function (txn) { + + // remove old data + await txn.executeSql(`DELETE FROM ${AppTables.POSM_HDR_DATA} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' `,[],async function (txn2, txnres) { + console.log('window hdr data deleted'); + },function (txnE,txnerr) { console.log(txnerr); },); + await txn.executeSql(`DELETE FROM ${AppTables.POSM_CHILD_DATA} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' `,[],async function (txn2, txnres) { + console.log('window child data deleted'); + },function (txnE,txnerr) { console.log(txnerr); },); + + + + // add data + var values='',childV=''; + let KPIPresentEnableIndex=KPIFields.findIndex(i=>i.KPIFieldName=='StorePOSMPresent') + let KPIPresentEnableObj=KPIPresentEnableIndex>=0?KPIFields[KPIPresentEnableIndex]:{}; + let KPIPresentEnable=KPIPresentEnableIndex>=0?KPIPresentEnableObj['KPIFieldEnable']:true; + + let StorePOSMDefaultReasonI=KPIFields.findIndex(i=>i.KPIFieldName=='StorePOSMDefaultReason') + let StorePOSMDefaultReasonObj=StorePOSMDefaultReasonI>=0?KPIFields[StorePOSMDefaultReasonI]:{}; + let StorePOSMDefaultReasonE=StorePOSMDefaultReasonI>=0?StorePOSMDefaultReasonObj['KPIFieldEnable']:true; + let StorePOSMDefaultReasonS=StorePOSMDefaultReasonI>=0?StorePOSMDefaultReasonObj['KPIFieldDisplayName']:"0"; + let StorePOSMDefaultReasonArr=StorePOSMDefaultReasonS!=null && StorePOSMDefaultReasonS!=''?StorePOSMDefaultReasonS.split(','):[]; + let StorePOSMDefaultReasonId=StorePOSMDefaultReasonArr.length>0?parseInt(StorePOSMDefaultReasonArr[0]):0; + let StorePOSMDefaultReason=StorePOSMDefaultReasonArr.length>1?StorePOSMDefaultReasonArr[1]:""; + + let showList=(KPIPresentEnable && isKPIPresent) || (KPIPresentEnable==false); + + + for (const wi in Windows){ + const window=Windows[wi]; + let isImage1=window.POSMImage1=='true' || window.POSMImage1==1?1:0; + let isImage2=window.POSMImage2=='true' || window.POSMImage2==1?1:0; + let isNAImageAvl=window.POSMNotExistCamera=='true' || window.POSMNotExistCamera==1?1:0; + let isNAReasonEnable=window.POSMNotExistReasonEnable=='true' || window.POSMNotExistReasonEnable==1? 1:0; + let isReasonEnable=window.POSMExistReasonEnable=='true' || window.POSMExistReasonEnable==1? 1:0; + let WindowQuestions=window.WindowQuestions || []; + + + const wind=WindowData.find(i=>i.PosmId==window.PosmId && i.POSMDefinitionId==window.POSMDefinitionId); + let isPresent=wind.isPresent!=null && wind.isPresent!=''?wind.isPresent:'0'; + let ReasonId=wind.ReasonId!=null?wind.ReasonId:0; + let Reason=wind.Reason!=null?wind.Reason:''; + let NAImage1=wind.NAImage1!=null?wind.NAImage1:''; + let NAImage1Path=wind.NAImage1Path!=null?wind.NAImage1Path:''; + let Image1Name=wind.Image1Name!=null?wind.Image1Name:''; + let Image1=wind.Image1!=null?wind.Image1:''; + let Image2Name=wind.Image2Name!=null?wind.Image2Name:''; + let Image2=wind.Image2!=null?wind.Image2:''; + + let QD=wind.WindowQA || {}; + + let POSM_HEADER_ID='POSM'+wi+(Math.floor(Math.random()*1000)+1); + let {POSMDefinitionId,PosmId,POSMName,PosmTypeId,POSMTypeName,POSMTable,POSMField,POSMValue,ChildName}=window; + let showOtherText=wind.showOtherText==true || wind.showOtherText=='1' ?1:0; + let RemarkText=wind.RemarkText!=null?wind.RemarkText:''; + + + values+=values!=''?' , ':''; + if(showList){ + values+=` ('${POSM_HEADER_ID}','${StoreId}','${d3}','${POSMDefinitionId}','${PosmId}','${POSMName}','${PosmTypeId}','${POSMTypeName}','${POSMTable}','${POSMField}','${POSMValue}','${ChildName}','${isPresent}','${NAImage1}','${Image1Name}','${Image2Name}','${ReasonId}','${Reason}','${showOtherText}','${RemarkText}','1','${d3}') `; + } + else{ + values+=` ('${POSM_HEADER_ID}','${StoreId}','${d3}','${POSMDefinitionId}','${PosmId}','${POSMName}','${PosmTypeId}','${POSMTypeName}','${POSMTable}','${POSMField}','${POSMValue}','${ChildName}','0','${NAImage1}','','','${StorePOSMDefaultReasonId}','${StorePOSMDefaultReason}','${showOtherText}','${RemarkText}','1','${d3}') `; + } + + if(isPresent==1){ + for(const qtnIndex in WindowQuestions){ + const qtn=WindowQuestions[qtnIndex]; + + let selansid='',selanswer='',selimg='',showImageTag=false; + let id_key=qtn.POSMQuestionId+'_AnswerId'; + let ans_key=qtn.POSMQuestionId+'_Answer'; + let multi_key=qtn.POSMQuestionId+'_MultiOption'; + let date_key=qtn.POSMQuestionId+'_Date'; + let img_key=qtn.POSMQuestionId+'_ImagePath1'; + let imgname_key=qtn.POSMQuestionId+'_ImageName1'; + let rating_key=qtn.POSMQuestionId+'_Rating'; + + + let {POSMQuestionId,POSMQuestionCode,QuestionType,PAShowCamera}=qtn + let answer=QD[ans_key] || ''; + let answerId=QD[id_key] || 0; + let multi_options_ids=QD[multi_key] || ''; + + if(qtn.QuestionType=='Number' || qtn.QuestionType=='Text' || qtn.QuestionType=='Decimal' || qtn.QuestionType=='Date') + { + showImageTag=(qtn.PQShowCamera==1 || qtn.PQShowCamera=='true'); + } + else if((qtn.QuestionType=='Single choice list' || qtn.QuestionType=='Multi choice list' )){ + if (qtn.Answers && qtn.Answers.length>0){ + for(var i=0;i=0)){ + showImageTag=true; + } + + } + } + } + + let Image1=showImageTag==1?QD[imgname_key]:''; + + + childV+=childV!=''?' , ':''; + childV+=` ('${POSM_HEADER_ID}','${StoreId}','${d3}','${POSMDefinitionId}','${PosmId}','${POSMQuestionId}','${POSMQuestionCode}','${QuestionType}','${answer}','${answerId}','${multi_options_ids}','${Image1}','${(PAShowCamera=='true' || PAShowCamera==true?1:0)}','${d3}') `; + } + } + } + + + + let add_hdr_data=`INSERT INTO ${AppTables.POSM_HDR_DATA} (POSM_HEADER_ID,STORE_ID,VISIT_DATE,POSM_DEFINITION_ID,POSM_ID,POSM_NAME,POSM_TYPE_ID,POSM_TYPE_NAME,POSM_TABLE,POSM_FIELD,POSM_VALUE,CHILD_NAME,IS_PRESENT,POSM_NA_IMAGE,POSM_IMAGE1,POSM_IMAGE2,REASON_ID,REASON,SHOW_RSN_REMARK,REASON_REMARK,IS_UPDATED,ADDED_DATE) VALUES ${values} `; + let add_child_data=`INSERT INTO ${AppTables.POSM_CHILD_DATA} (POSM_HEADER_ID,STORE_ID,VISIT_DATE,POSM_DEFINITION_ID,POSM_ID,QUESTION_ID,QUESTION_CODE,QUESTION_TYPE,ANSWER,ANSWER_ID,MULTI_OPTIONS_IDS,IMAGE1,IMAGE_ALLOW1,ADDED_DATE) VALUES ${childV} `; + + await txn.executeSql(add_hdr_data,[],async function (txn2, txnres) { + console.log('posm header data added'); + var isChildAdded=true; + + if(childV!=''){ + isChildAdded=await executeQuery(add_child_data); + } + + if(!isChildAdded){ + setProcessing(false);notify(ST.Cannotaddposmquestionsdata); + } + else{ + clear_item('storeData') + setProcessing(false);notify(ST.POSMdataupdatedsuccessfully); + props.navigation.goBack(); + } + + },function (txnE,txnerr) { console.log(txnerr);setProcessing(false);notify(ST.CannotaddPOSMdata); },); + }); + } catch (err) { + console.log(err); + } + } + + async function executeQuery(q){ + return new Promise((resolve,reject)=>{ + db.transaction(async function (txn) { + await txn.executeSql(q,[],async function (txn2, txnres2) { + resolve(true); + },function(Etxn,txnerr){console.log(txnerr);resolve(false) }); + }); + }).then((val)=>{ + return val; + }).catch((err)=>{ + console.log(err); + return false; + }) + } + + + + async function validate(){ + let isValid=true; + + function showError(obj,isErr){ + setErrorField(obj); + setError(isErr); + } + + let KPIPresentEnableIndex=KPIFields.findIndex(i=>i.KPIFieldName=='StorePOSMPresent') + let KPIPresentEnableObj=KPIPresentEnableIndex>=0?KPIFields[KPIPresentEnableIndex]:{}; + let KPIPresentEnable=KPIPresentEnableIndex>=0?KPIPresentEnableObj['KPIFieldEnable']:true; + + let StorePOSMDefaultReasonI=KPIFields.findIndex(i=>i.KPIFieldName=='StorePOSMDefaultReason') + let StorePOSMDefaultReasonObj=StorePOSMDefaultReasonI>=0?KPIFields[StorePOSMDefaultReasonI]:{}; + let StorePOSMDefaultReasonS=StorePOSMDefaultReasonI>=0?StorePOSMDefaultReasonObj['KPIFieldDisplayName']:"0"; + let StorePOSMDefaultReasonArr=StorePOSMDefaultReasonS!=null && StorePOSMDefaultReasonS!=''?StorePOSMDefaultReasonS.split(','):[]; + let StorePOSMDefaultReasonId=StorePOSMDefaultReasonArr.length>0?parseInt(StorePOSMDefaultReasonArr[0]):0; + + + let showList=(KPIPresentEnable && isKPIPresent) || (KPIPresentEnable==false); + + if(showList){ + + return new Promise((resolve,reject)=>{ + for (const [wi, window] of globalWindows.entries()) { + let isImage1=window.POSMImage1=='true' || window.POSMImage1==1?1:0; + let isImage2=window.POSMImage2=='true' || window.POSMImage2==1?1:0; + let isNAImageAvl=window.POSMNotExistCamera=='true' || window.POSMNotExistCamera==1?1:0; + let isNAReasonEnable=window.POSMNotExistReasonEnable=='true' || window.POSMNotExistReasonEnable==1? 1:0; + let isReasonEnable=window.POSMExistReasonEnable=='true' || window.POSMExistReasonEnable==1? 1:0; + let WindowQuestions=window.WindowQuestions || []; + + + const wind=WindowData.find(i=>i.PosmId==window.PosmId && i.POSMDefinitionId==window.POSMDefinitionId); + let isPresent=wind.isPresent!=null && wind.isPresent!=''?wind.isPresent:'0'; + let ReasonId=wind.ReasonId!=null?wind.ReasonId:''; + let Reason=wind.Reason!=null?wind.Reason:''; + let NAImage1=wind.NAImage1!=null?wind.NAImage1:''; + let NAImage1Path=wind.NAImage1Path!=null?wind.NAImage1Path:''; + let Image1Name=wind.Image1Name!=null?wind.Image1Name:''; + let Image1=wind.Image1!=null?wind.Image1:''; + let Image2Name=wind.Image2Name!=null?wind.Image2Name:''; + let Image2=wind.Image2!=null?wind.Image2:''; + let QD=wind.WindowQA || {}; + let showOtherText=wind.showOtherText!=null?wind.showOtherText:false; + + let errorobj = {'EF_Window':window}; + + if(isPresent=='1'){ + if(isReasonEnable==true && ReasonId=='' ){ + errorobj['EF_NExistReason']="NExistReason"; + showError(errorobj,true); + notify(`${ST.Pleaseselectreasonfor} ${window.POSMName} `,'LONG'); + resolve(false);return; + } + else{ + if(StoreCameraAllow && isImage1==1 && Image1Name==''){ + errorobj['EF_splitImage1']="splitImage1"; + showError(errorobj,true); + notify(`${ST.Pleaseclickallimagesfor} ${window.POSMName}`,'LONG'); + resolve(false);return; + } + else if(StoreCameraAllow && isImage2==1 && Image2Name==''){ + errorobj['EF_splitImage1']="splitImage1"; + showError(errorobj,true); + notify(`${ST.Pleaseclickallimagesfor} ${window.POSMName}`,'LONG'); + resolve(false);return; + } + else if(WindowQuestions.length>0){ + for(const qtnIndex in WindowQuestions){ + const qtn=WindowQuestions[qtnIndex]; + + let selansid='',selanswer='',selimg='',showImageTag=false; + let id_key=qtn.POSMQuestionId+'_AnswerId'; + let ans_key=qtn.POSMQuestionId+'_Answer'; + let multi_key=qtn.POSMQuestionId+'_MultiOption'; + let date_key=qtn.POSMQuestionId+'_Date'; + let img_key=qtn.POSMQuestionId+'_ImagePath1'; + let imgname_key=qtn.POSMQuestionId+'_ImageName1'; + let rating_key=qtn.POSMQuestionId+'_Rating'; + let list_mcdata=[]; + + errorobj['EF_qtn']=qtn; + + let isImgAllowed=(qtn.PQShowCamera=='true' || qtn.PQShowCamera==1); + let checkForAnsKey=(qtn.QuestionType=='Decimal' || qtn.QuestionType=='Number' || qtn.QuestionType=='Text' || qtn.QuestionType=='Date' || qtn.QuestionType=='Rating') ; + if(qtn.QuestionType=='Single choice list') + { + selansid=QD[id_key]; + } + else if(qtn.QuestionType=='Multi choice list') + { + selansid=QD[multi_key]!=null && QD[multi_key]!=''?QD[multi_key].split(','):[]; + } + + + if(qtn.QuestionType=='Multi choice list' && selansid.length<=0){ + errorobj['EF_Qtn_MultiChoice']='Qtn_MultiChoice'; + showError(errorobj,true); + notify(`${ST.Pleaseselectoptionsfortherequiredfield} ${ST.In} ${window.POSMName}`,'SHORT'); + resolve(false);return; + } + else if( checkForAnsKey && (Object.keys(QD).indexOf(ans_key)<0 || (Object.keys(QD).indexOf(ans_key)>=0 && QD[ans_key]===''))){ + errorobj['EF_Qtn_Date']='Qtn_Date'; + showError(errorobj,true); + let msg=( qtn.QuestionType=='Date'?`${ST.Pleasepickadatefortherequiredfield} ${ST.In} ${window.POSMName}`:(qtn.QuestionType=='Rating'?`${ST.Pleaseselectratingfortherequiredfield} ${ST.In} ${window.POSMName}`:`${ST.Pleasefillalltherequiredfield} ${ST.In} ${window.POSMName}`)); + notify(msg,'SHORT'); + resolve(false);return; + } + else if(Object.keys(QD).indexOf(id_key)<0 || (Object.keys(QD).indexOf(id_key)>=0 && (QD[id_key]==='' || (QD[id_key]===0 && qtn.isDisabled===false) ))){ + errorobj['EF_Qtn_Input']='Qtn_Input'; + showError(errorobj,true); + notify(`${ST.Pleasefillalltherequiredfield} ${ST.In} ${window.POSMName}`,'SHORT'); + resolve(false);return; + } + else if(StoreCameraAllow && isImgAllowed && (Object.keys(QD).indexOf(img_key)<0 || (Object.keys(QD).indexOf(img_key)>=0 && QD[img_key]===''))){ + errorobj['EF_Qtn_Image']='Qtn_Image'; + showError(errorobj,true); + notify(`${ST.Pleaseaddimages} ${ST.In} ${window.POSMName}`,'SHORT'); + resolve(false);return; + }else{ + console.log('no condition found'); + } + + if((qtn.QuestionType=='Single choice list' || qtn.QuestionType=='Multi choice list' )){ + if (qtn.Answers && qtn.Answers.length>0){ + for(var j=0;j=0)){ + showImageTag=true; + } + } + } + } + + if(StoreCameraAllow && showImageTag && (Object.keys(QD).indexOf(img_key)<0 || (Object.keys(QD).indexOf(img_key)>=0 && QD[img_key]===''))){ + errorobj['EF_Qtn_Image']='Qtn_Image'; + showError(errorobj,true); + notify(`${ST.Pleaseaddimages} ${ST.In} ${window.POSMName}`,'SHORT'); + resolve(false);return; + } + } + } + } + } + else{ + if(isNAReasonEnable==true && (ReasonId=='' || ReasonId==StorePOSMDefaultReasonId) ){ + errorobj['EF_NExistReason']="NExistReason"; + showError(errorobj,true); + notify(`${ST.Pleaseselectreasonfor} ${window.POSMName} `,'LONG'); + resolve(false);return; + } + else if(isNAReasonEnable==true && showOtherText==true && (wind.RemarkText==null || wind.RemarkText=='') ){ + errorobj['EF_NExistRemark']="NExistRemark"; + showError(errorobj,true); + notify(`${ST.PleaseEnterRemarkFor} ${window.POSMName} `,'LONG'); + resolve(false);return; + } + else if(StoreCameraAllow && isNAImageAvl==true && NAImage1=='' ){ + errorobj['EF_NExistImage']="NExistImage"; + showError(errorobj,true); + notify(`${ST.Pleaseclickimagefor} ${window.POSMName}`,'LONG'); + resolve(false);return; + } + } + + if (wi == (globalWindows.length - 1)) { + resolve(true);return; + } + + } + + }).then((val)=>{return val}) + .catch((err)=>{console.log(err); return false}); + + } + else{ + return true; + } + } + + + function onselectionChange(option,keyLbl,keyVal,otherData){ + setErrorField({}); + setError(false); + let item=otherData.window; + let allData=WindowData; + let defData={'PosmId':item.PosmId,'POSMDefinitionId':item.POSMDefinitionId}; + const win_index=allData.findIndex(i=>i.PosmId==item.PosmId && i.POSMDefinitionId==item.POSMDefinitionId); + let wind=win_index>=0?(allData[win_index] || defData) : defData; + wind[keyVal]=option.value; + wind[keyLbl]=option.label; + + if(keyLbl=='Reason'){ + let rsn_Index=reasons_list.findIndex(i=>i.ReasonId==option.value); + + if(rsn_Index>=0){ + let rsn=reasons_list[rsn_Index]; + let IsRemarkTaken=rsn.IsRemarkTaken==1 || rsn.IsRemarkTaken=='1'?true:false; + + if(IsRemarkTaken==true){ + wind['showOtherText']=true; + } + } + } + + win_index>=0?allData[win_index]=wind:allData.push(wind); + + let objIndex = InputChange.findIndex((obj => obj.PosmId == item.PosmId && obj.POSMDefinitionId==item.POSMDefinitionId)); + let winArr=[...InputChange] + winArr[objIndex].Flag=true + console.log("changeValue---------1",winArr) + setInputChange(winArr) + + setWindowData(allData); + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + + function onselectionChange2(option,qtn,window){ + setErrorField({}); + setError(false); + let allData=WindowData; + let defData={'PosmId':window.PosmId,'POSMDefinitionId':window.POSMDefinitionId}; + const wind_index=allData.findIndex(i=>i.PosmId==window.PosmId && i.POSMDefinitionId==window.POSMDefinitionId); + let wind=wind_index>=0?allData[wind_index]:defData; + let data=wind.WindowQA || {}; + let id_key=qtn.POSMQuestionId+'_AnswerId'; + let ans_key=qtn.POSMQuestionId+'_Answer'; + data[id_key]=option.value; + data[ans_key]=option.label; + + + wind['WindowQA']=data; + wind_index>=0?allData[wind_index]=wind:allData.push(wind); + + let objIndex = InputChange.findIndex((obj => obj.PosmId == window.PosmId && obj.POSMDefinitionId==window.POSMDefinitionId)); + let winArr=[...InputChange] + winArr[objIndex].Flag=true + console.log("changeValue---------1",winArr) + setInputChange(winArr) + setWindowData(allData); + + let aq_ans=qtn.Answers!=null?qtn.Answers:[]; + let ans_obj=aq_ans.find(i=>i.AnswerId==option.value) || {}; + let EQtns=ans_obj.WAQuestionEnable!=null && ans_obj.WAQuestionEnable!=''?ans_obj.WAQuestionEnable.replace(' ','').split(','):[]; + let DQtns=ans_obj.WAQuestionDisable!=null && ans_obj.WAQuestionDisable!=''?ans_obj.WAQuestionDisable.replace(' ','').split(','):[]; + + let sqtns=window.WindowQuestions || [] + + if(EQtns.length>0){ + enableQtns(sqtns,EQtns,DQtns,data,wind,wind_index,allData,window) + } + else if(DQtns.length>0){ + disableQtns(sqtns,DQtns,data,wind,wind_index,allData,window) + } + else{ + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + + } + + async function disableQtns(sqtns,DQtns,data,wind={},wind_index=-1,allData=[],window={}){ + + if(DQtns.length>0){ + new Promise.all( + DQtns.map((qid,q_index)=>{ + let s_qtnindex=sqtns.findIndex(i=>i.POSMQuestionId==qid) || {}; + let s_qtn=sqtns[s_qtnindex]; + if(s_qtn!=null){ + s_qtn['isDisabled']=true + sqtns[s_qtnindex]=s_qtn; + let id_key=s_qtn.POSMQuestionId+'_AnswerId'; + let ans_key=s_qtn.POSMQuestionId+'_Answer'; + data[id_key]=0; + data[ans_key]=''; + + wind['WindowQA']=data; + wind_index>=0?allData[wind_index]=wind:allData.push(wind); + + return false + }else{ + return false + } + }) + ).then(async (val)=>{ + let allwindows=Windows; + let windowIndex=allwindows.findIndex(i=>i.POSMDefinitionId==window.POSMDefinitionId && i.PosmId==window.PosmId) + if(windowIndex>0){ + window['WindowQuestions']=sqtns; + allwindows[windowIndex]=window; + setWindowData(allData); + setWindows(allwindows); + setGlobalWindows(allwindows); + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + + }) + } + } + + async function enableQtns(sqtns,EQtns,DQtns,data,wind={},wind_index=-1,allData=[],window={}){ + new Promise.all( + EQtns.map((qid,q_index)=>{ + let s_qtnindex=sqtns.findIndex(i=>i.POSMQuestionId==qid) || {}; + let s_qtn=sqtns[s_qtnindex]; + if(s_qtn!=null){ + s_qtn['isDisabled']=false + sqtns[s_qtnindex]=s_qtn; + return false + }else{ + return false + } + }) + ).then(async (val)=>{ + if(DQtns.length>0){ + disableQtns(sqtns,DQtns,data,wind,wind_index,allData,window) + } + else{ + let allwindows=Windows; + let windowIndex=allwindows.findIndex(i=>i.POSMDefinitionId==window.POSMDefinitionId && i.PosmId==window.PosmId) + if(windowIndex>0){ + window['WindowQuestions']=sqtns; + allwindows[windowIndex]=window; + setWindows(allwindows); + setGlobalWindows(allwindows); + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + } + }) + } + + async function setMultiSelectValue(selectedItems=[],qtn={},window={}) { + setErrorField({}); + setError(false); + let id_key=qtn.POSMQuestionId+'_AnswerId'; + let ans_key=qtn.POSMQuestionId+'_Answer'; + let multi_key=qtn.POSMQuestionId+'_MultiOption'; + + let allData=WindowData; + let defData={'PosmId':window.PosmId,'POSMDefinitionId':window.POSMDefinitionId}; + const wind_index=allData.findIndex(i=>i.PosmId==window.PosmId && i.POSMDefinitionId==window.POSMDefinitionId); + let wind=wind_index>=0?allData[wind_index]:defData; + let obj=wind.WindowQA || {}; + obj[id_key]=0; + obj[multi_key]=selectedItems.join(','); + let anss=[]; + selectedItems.map((itemValue)=>{ + let ans = qtn.Answers.find(c1 => c1.AnswerId == itemValue); + if(ans.Answer){anss.push(ans.Answer)} + }); + obj[ans_key]=anss.join(','); + + + wind['WindowQA']=obj; + wind_index>=0?allData[wind_index]=wind:allData.push(wind); + + let objIndex = InputChange.findIndex((obj => obj.PosmId == window.PosmId && obj.POSMDefinitionId==window.POSMDefinitionId)); + let winArr=[...InputChange] + winArr[objIndex].Flag=true + console.log("changeValue---------1",winArr) + setInputChange(winArr) + setWindowData(allData); + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + + function setTextValue(value,qtn,window,type='') { + setErrorField({}); + setError(false); + if(value!=''){ + let isValid=validateNumber(value,type); + if(!isValid){ + return; + } + } + let id_key=qtn.POSMQuestionId+'_AnswerId'; + let ans_key=qtn.POSMQuestionId+'_Answer'; + + let allData=WindowData; + let defData={'PosmId':window.PosmId,'POSMDefinitionId':window.POSMDefinitionId}; + const wind_index=allData.findIndex(i=>i.PosmId==window.PosmId && i.POSMDefinitionId==window.POSMDefinitionId); + let wind=wind_index>=0?allData[wind_index]:defData; + let obj=wind.WindowQA || {}; + + if(qtn.QuestionType=='Date' ){ + let date_key=qtn.POSMQuestionId+'_Date'; + let d=value!=null?new Date(value):new Date(); + let mfdate=moment(d).format('MM/YYYY'); + showQtnDatePicker(qtn,window,false); + obj[id_key]=0; + obj[ans_key]=mfdate; + obj[date_key]=moment(d).format('MM/DD/YYYY'); + } + else{ + obj[id_key]=0; + obj[ans_key]=value; + } + + + wind['WindowQA']=obj; + wind_index>=0?allData[wind_index]=wind:allData.push(wind); + + // setInputChange([...InputChange,{PosmId:window.PosmId, Flag:true}]) + let objIndex = InputChange.findIndex((obj => obj.PosmId == window.PosmId && obj.POSMDefinitionId==window.POSMDefinitionId)); + let winArr=[...InputChange] + winArr[objIndex].Flag=true + console.log("changeValue---------1",winArr) + setInputChange(winArr) + setWindowData(allData); + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + + function showQtnDatePicker(qtn,window,show=false){ + let allQtns=window.WindowQuestions || []; + let newqtnIndex=allQtns.findIndex(q=>q.POSMQuestionId==qtn.POSMQuestionId); + + if(newqtnIndex>=0){ + let newqtn=allQtns[newqtnIndex]; + newqtn.showDatePicker=show; + allQtns[newqtnIndex]=newqtn; + window['WindowQuestions']=allQtns; + let allWindows=Windows; + const winIndex=allWindows.findIndex(i=>i.PosmId==window.PosmId && i.POSMDefinitionId==window.POSMDefinitionId) || {}; + allWindows[winIndex]=window; + setWindows(allWindows); + setGlobalWindows(allWindows); + if(show==true) setrerenderdata(!rerenderdata); + } + } + + function setRatingValue(data){ + setRatingOrder(data); + } + + function onRatingCancel(){ + setShowRating(false); + } + + function onRatingSave(){ + setShowRating(false); + let qtn=RatingQtn; + let window=RatingWindow; + let id_key=qtn.POSMQuestionId+'_AnswerId'; + let ans_key=qtn.POSMQuestionId+'_Answer'; + let rating_key=qtn.POSMQuestionId+'_Rating'; + let ids=[],anss=[]; + RatingOrder.map((item,index)=>{ + ids.push(item.AnswerId); + anss.push(item.Answer); + }) + + let allData=WindowData; + let defData={'PosmId':window.PosmId,'POSMDefinitionId':window.POSMDefinitionId}; + const wind_index=allData.findIndex(i=>i.PosmId==window.PosmId && i.POSMDefinitionId==window.POSMDefinitionId); + let wind=wind_index>=0?allData[wind_index]:defData; + let obj=wind.WindowQA || {}; + + obj[rating_key]=ids.join(','); + obj[id_key]=0; + obj[ans_key]=anss.join(','); + + wind['WindowQA']=obj; + wind_index>=0?allData[wind_index]=wind:allData.push(wind); + + let objIndex = InputChange.findIndex((obj => obj.PosmId == window.PosmId && obj.POSMDefinitionId==window.POSMDefinitionId)); + let winArr=[...InputChange] + winArr[objIndex].Flag=true + console.log("changeValue---------7",winArr) + + setInputChange(winArr) + setWindowData(allData); + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + + + function onChoiceSelect(item,val,key,animatedChoice){ + let win_index=InputChange.find(i=> i.PosmId==item.PosmId && i.POSMDefinitionId==item.POSMDefinitionId) + let changeValue=win_index.Flag; + console.log("changeValue--------",changeValue,win_index,InputChange) + if(changeValue){ + setIsPresentClean(val) + setDataCleanAnim(animatedChoice) + setDataCleanItem(item) + setDataCleanModal(true) + return + } + + var val1=0; + val==1?val1=1:''; + + if(animatedChoice!=null){ + Animated.timing(animatedChoice, { + toValue: val1, + duration:400, + useNativeDriver:false, + }).start(); + } + onWindowDataChange(item,val,key) + } + + function onChoiceSelect_Global(val){ + console.log("onChoiceSelect_Global val:",val) + Animated.timing(isKPIPresentAnim, { + toValue: val, + duration:400, + useNativeDriver:false, + }).start(); + isKPIPresentRef.current=val; + hasUnsavedChangesRef.current=true + setIsKPIPresent(val); + } + + function onWindowDataChange(item,val,key,type=''){ + setErrorField({}); + setError(false); + if(val!=''){ + let isValid=validateNumber(val,type); + if(!isValid){ + return; + } + } + let allData=WindowData; + let defData={'PosmId':item.PosmId,'POSMDefinitionId':item.POSMDefinitionId}; + const win_index=allData.findIndex(i=>i.PosmId==item.PosmId && i.POSMDefinitionId==item.POSMDefinitionId); + let wind=win_index>=0?(allData[win_index] || defData) : defData; + wind[key]=val; + + if(key=='ReasonId'){ + let rsn=reasons_list.find(r=>r.ReasonId==val) || {}; + wind['Reason']=rsn.Reason || ''; + } + + win_index>=0?allData[win_index]=wind:allData.push(wind); + + if(key!="isPresent"){ + let objIndex = InputChange.findIndex((obj => obj.PosmId == item.PosmId && obj.POSMDefinitionId==item.POSMDefinitionId)); + let winArr=[...InputChange] + winArr[objIndex].Flag=true + setInputChange(winArr) + } + setWindowData(allData); + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + + function onWindowDataClean(){ + if(DataCleanAnim!=null){ + console.log("anim---") + let anim=isPresentClean==1?1:''; + Animated.timing(DataCleanAnim, { + toValue:anim, + duration:400, + useNativeDriver:false, + }).start(); + } + let allData=WindowData; + let WindowSplits = []; + for(var s=0;si.PosmId==DataCleanItem.PosmId && i.POSMDefinitionId==DataCleanItem.POSMDefinitionId); + allData[win_index]=defData + + let objIndex = InputChange.findIndex((obj => obj.PosmId == DataCleanItem.PosmId && obj.POSMDefinitionId==DataCleanItem.POSMDefinitionId)); + let winArr=[...InputChange] + winArr[objIndex].Flag=false + console.log("changeValue---------7",winArr) + setInputChange(winArr) + setWindowData(allData); + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setDataCleanModal(false) + setrerenderdata(!rerenderdata); + } + + function setWindowStockVal(val,window,stockProd){ + setErrorField({}); + setError(false); + let allData=WindowData; + let defData={'PosmId':window.PosmId,'POSMDefinitionId':window.POSMDefinitionId}; + const win_index=allData.findIndex(i=>i.PosmId==window.PosmId && i.POSMDefinitionId==window.POSMDefinitionId); + let wind=win_index>=0?(allData[win_index] || defData) : defData; + let WStocksData=wind['WStocksData'] || []; + let sdIndex=WStocksData.findIndex(i=> i.ProductId==stockProd.WindowStockValue); + let sd=sdIndex>=0?WStocksData[sdIndex]:{'ProductId':stockProd.WindowStockValue,'Stock':''}; + sd['Stock']=val; + sdIndex>=0?WStocksData[sdIndex]=sd:WStocksData.push(sd); + wind['WStocksData']=WStocksData; + win_index>=0?allData[win_index]=wind:allData.push(wind); + + setWindowData(allData); + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata4(!rerenderdata4); + } + + function onSaveCancel(){ + setShowAlert(false); + } + + + + function openImageRefView(windowIndex=0){ + setrefImageIndex(windowIndex); + setShow_zoomImage(true); + } + + + function renderRatingView(){ + let qtn=RatingQtn; + let Answers=qtn.Answers; + let id_key=qtn.POSMQuestionId+'_AnswerId'; + let ans_key=qtn.POSMQuestionId+'_Answer'; + let rating_key=qtn.POSMQuestionId+'_Rating'; + + let newarr=RatingOrder; + if(RatingOrder.length<=0){ + newarr=Answers; + } + + return ( + + + {ST.DragItemsInOrder} + {ST.Pressandholdtodrag} + {setRatingValue(data)}} + keyExtractor={(item) => item.AnswerId} + renderItem={renderItem} + /> + + {onRatingCancel()}}> + {ST.Cancel} + + {onRatingSave()}}> + {ST.Save} + + + + + ) + } + + function render_Picker(label_key,value_key,onChange=()=>{},selected_data={}){ + var data=[]; + let qtn=selected_data.qtn || {}; + let window=selected_data.window || {}; + let isQtnDisabled=qtn.isDisabled!=null || qtn.isDisabled!=''?false:true; + let allAnswers=qtn.Answers || []; + + allAnswers.map((item,index)=>{ + let obj={ key: index, label: item[label_key],value:item[value_key] }; + if(selected_data.value==item[label_key]) + obj['component']= {item[label_key]}; + data.push(obj); + }); + + return ( + {onChange(option,qtn,window) }} + overlayStyle={customStyle.addVisPickerOverlay} + cancelContainerStyle={customStyle.addVisPicker_OptionContainerStyle} + optionStyle={customStyle.addvis_opStyle} + optionTextStyle={customStyle.addvis_opTextStyle} + optionContainerStyle={customStyle.addVisPicker_OptionContainerStyle} + selectedKey={'1'} + disabled={isQtnDisabled} + cancelText={ST.Cancel} + > + {(selected_data.value!=null && selected_data.value!=''?selected_data.value: '-'+ST.select+'-')} + + ) + } + + function renderDatePicker(qtn,window){ + + let qtnn=qtn; + let DateRange=qtn.DateRange; + let maxDate=moment().add(10,'years').format('MM/DD/YYYY'); + let minDate=moment().subtract(10,'years').format('MM/DD/YYYY'); + if(DateRange=='RFD'){ + maxDate=moment().format('MM/DD/YYYY'); + } + else if(DateRange=='RPD'){ + minDate=moment().format('MM/DD/YYYY'); + } + + + + return ( + {setTextValue(selectedDate,qtnn,window)}} + maximumDate={new Date(maxDate)} + minimumDate={new Date(minDate)} + /> + ); + } + + function _renderKPIPresent(){ + + let KPIPresentEnableIndex=KPIFields.findIndex(i=>i.KPIFieldName=='StorePOSMPresent') + let KPIPresentEnableObj=KPIPresentEnableIndex>=0?KPIFields[KPIPresentEnableIndex]:{}; + let KPIPresentEnable=KPIPresentEnableIndex>=0?KPIPresentEnableObj['KPIFieldEnable']:true; + let KPIPresentEnableDisName=KPIPresentEnableIndex>=0?KPIPresentEnableObj['KPIFieldDisplayName']:"Is Present"; + + if(KPIPresentEnable==true){ + + let xpos=0; + xpos=isKPIPresentAnim.interpolate({ + inputRange:[0,1], + outputRange:[0,-75], + }); + + + return( + + {KPIPresentEnableDisName} + + + + {onChoiceSelect_Global(1)}}> + {ST.Yes} + + {onChoiceSelect_Global(0)}}> + {ST.No} + + + + + ) + } + else{ + return null; + } + } + + function _renderWindow(){ + let KPIPresentEnableIndex=KPIFields.findIndex(i=>i.KPIFieldName=='StorePOSMPresent') + let KPIPresentEnableObj=KPIPresentEnableIndex>=0?KPIFields[KPIPresentEnableIndex]:{}; + let KPIPresentEnable=KPIPresentEnableIndex>=0?KPIPresentEnableObj['KPIFieldEnable']:true; + + let showList=(KPIPresentEnable && isKPIPresent) || (KPIPresentEnable==false); + if(showList){ + return ( + `posm_${index.toString()}`} + renderItem={({item,index})=>{ + const window=item; + + let isImage1=window.POSMImage1=='true' || window.POSMImage1==1?1:0; + let isImage2=window.POSMImage2=='true' || window.POSMImage2==1?1:0; + let isNAImageAvl=window.POSMNotExistCamera=='true' || window.POSMNotExistCamera==1?1:0; + let isNAReasonEnable=window.POSMNotExistReasonEnable=='true' || window.POSMNotExistReasonEnable==1? 1:0; + let isReasonEnable=window.POSMExistReasonEnable=='true' || window.POSMExistReasonEnable==1? 1:0; + let POSMTitleEnable=window.POSMDefinitionTitleEnable=='true' || window.POSMDefinitionTitleEnable==1? 1:0; + let POSMTitle=window.POSMDefinitionTitle!=null && window.POSMDefinitionTitle!='undefined'? window.POSMDefinitionTitle:""; + let POSMRefImagePopUp=window.POSMRefImagePopUp=='true' || window.POSMRefImagePopUp==true? true:false; + + let RefImage=window.POSMRefImage; + let camera1Label=window.POSMImage1Lable || ''; + let camera2Label=window.POSMImage2Lable || ''; + let WindowQuestions=window.WindowQuestions || []; + + let isVisible=Boolean(ItemsInView.find(({item:i,isViewable}) => i.PosmId==window.PosmId && i.POSMDefinitionId==window.POSMDefinitionId && isViewable)) + // console.log("RenderItemList ItemsInView2:",index,isVisible) + + const wind=WindowData.find(i=>i.PosmId==window.PosmId && i.POSMDefinitionId==window.POSMDefinitionId); + let isPresent=wind.isPresent!=null && wind.isPresent!=''?wind.isPresent:'0'; + let ReasonId=wind.ReasonId!=null?wind.ReasonId:''; + let Reason=wind.Reason!=null?wind.Reason:''; + let showOtherText=wind.showOtherText!=null?wind.showOtherText:false; + let RemarkText=wind.RemarkText!=null?wind.RemarkText:''; + let NAImage1=wind.NAImage1!=null?wind.NAImage1:''; + let NAImage1Path=wind.NAImage1Path!=null?wind.NAImage1Path:''; + let QuestionsData=wind.WindowQA || {}; + let Image1Name=wind.Image1Name!=null?wind.Image1Name:''; + let Image1=wind.Image1!=null?wind.Image1:''; + let Image2Name=wind.Image2Name!=null?wind.Image2Name:''; + let Image2=wind.Image2!=null?wind.Image2:''; + + let isImg1mad=wind['img1Required'] || false; + let isImg2mad=wind['img2Required'] || false; + + + var xpos=isPresent=='1'||isPresent==1?-75:0; + + if(window.animatedChoice!=null ){ + xpos=window.animatedChoice.interpolate({ + inputRange:[0,1], + outputRange:[0,-75], + }); + } + + if(isVisible && window.animatedHeight!=null){ + setTimeout(()=>{ + Animated.timing(window.animatedHeight, { + toValue: 0, + duration: 800, + useNativeDriver: false, + }).start(); + },(props.RefImagePopUpTime||0)*1000) + } + + let EF_Window=errorfield.EF_Window!=null ?errorfield.EF_Window:{}; + let show_errorhere=error==true && EF_Window.PosmId==window.PosmId && EF_Window.POSMDefinitionId==window.POSMDefinitionId; + + // if not Present fields + + // this will show error field in red (if window is present and exist reason is enabled and not filled ) or (if window is not present and Not exist reason is enabled and not filled ) + let EF_NExistReason=errorfield.EF_NExistReason || ''; + let EStyle_NExistReason=show_errorhere && EF_NExistReason=='NExistReason'?customStyle.stk_inptSTyle_error:{}; + + let EF_NExistRemark=errorfield.EF_NExistRemark || ''; + let EStyle_NExistRemark=show_errorhere && EF_NExistRemark=='NExistRemark'?customStyle.stk_inptSTyle_error:{}; + + let EF_NExistImage=errorfield.EF_NExistImage || ''; + let EStyle_NExistImage=show_errorhere && EF_NExistImage=='NExistImage'?customStyle.error_CatImage2:{}; + + + // highlight slit image box + let EF_splitImage1=errorfield.EF_splitImage1 || ''; + let EStyle_splitImage1=show_errorhere && EF_splitImage1=='splitImage1'?customStyle.error_CatImage2:{}; + + let EF_splitImage2=errorfield.EF_splitImage2 || ''; + let EStyle_splitImage2=show_errorhere && EF_splitImage2=='splitImage2'?customStyle.error_CatImage2:{}; + + + + return( + + + {/* */} + + {window.POSMName} + {(POSMTitleEnable==1 && POSMTitle!=null && POSMTitle!='') && {POSMTitle}} + {openImageRefView(index)}}> + + + + {/* */} + + { POSMRefImagePopUp && + + + } + + + + + {ST.IsPresent} + + + + {onChoiceSelect(window,1,'isPresent',window.animatedChoice)}}> + {ST.Yes} + + {onChoiceSelect(window,0,'isPresent',window.animatedChoice)}}> + {ST.No} + + + + + {((isPresent!='1' && isNAReasonEnable==true) || (isPresent=='1' && isReasonEnable==true)) && + + {ST.SelectReason} + {} + + } + {isPresent!='1' && showOtherText==true && + + {ST.EnterRemark} + {onWindowDataChange(window,val,'RemarkText','text')}} + /> + + } + + + {(isPresent!='1' && isNAImageAvl==true) && + + + + {ST.CaptureImage} + + + + { (NAImage1Path=='' || NAImage1Path==null) && + {openCamera(window,'1','3')}}> + + + } + { (NAImage1Path!='' && NAImage1Path!=null) && + + + {openCamera(window,'1','3')}}> + + + + } + + + + + } + + + + {(isPresent=='1') && + + {(isImage1==1 || isImage2==1)&& + + + {ST.CaptureImage} + + + {isImage1==1 && + + + { (Image1=='' || Image1==null) ? + {openCamera(window,'1','1')}}> + + : (Image1!='' && Image1!=null) ? + {OpenImgModal(Image1,window,'1','1')}}> + + : null + } + {camera1Label} + + } + {isImage2==1 && + + + { (Image2=='' || Image2==null) ? + {openCamera(window,'2','1')}}> + + : (Image2!='' && Image2!=null) ? + {OpenImgModal(Image2,window,'2','1')}}> + + : null + } + {camera2Label} + + } + + + } + + {(WindowQuestions.length>0) && + + + {ST.POSMQuestions} + + {WindowQuestions.map((item,index)=>{ + + let qtn=item; + let qtnIndex=index; + let selansid='',selanswer='',selimg='',showImageTag=false; + let id_key=qtn.POSMQuestionId+'_AnswerId'; + let ans_key=qtn.POSMQuestionId+'_Answer'; + let multi_key=qtn.POSMQuestionId+'_MultiOption'; + let date_key=qtn.POSMQuestionId+'_Date'; + let img_key=qtn.POSMQuestionId+'_ImagePath1'; + let imgname_key=qtn.POSMQuestionId+'_ImageName1'; + let rating_key=qtn.POSMQuestionId+'_Rating'; + + let list_mcdata=[]; + + if(qtn.QuestionType=='Single choice list') + { + selansid=QuestionsData[id_key]!=null ?QuestionsData[id_key] :''; + selanswer=QuestionsData[ans_key]!=null ?QuestionsData[ans_key] :''; + } + else if(qtn.QuestionType=='Multi choice list') + { + if(qtn.Answers!=null){ + for(var i=0;i0){ + // let arr=[]; + // for(var i=0;i0){ + for(var i=0;i=0)){ + showImageTag=true; + } + + } + } + } + + if(showImageTag){ + selimg=QuestionsData[img_key]!=null && QuestionsData[img_key]!=''?'file://'+QuestionsData[img_key]:''; + } + + + let EF_qtn=errorfield.EF_qtn!=null?errorfield.EF_qtn:{}; + let showQtnErrHere=EF_qtn.CategoryQuestionId==qtn.CategoryQuestionId; + //Qtn_MultiChoice + let EF_Qtn_MultiChoice=errorfield.EF_Qtn_MultiChoice || ''; + let EStyle_Qtn_MultiChoice=show_errorhere && showQtnErrHere && EF_Qtn_MultiChoice=='Qtn_MultiChoice'?customStyle.stk_MultiSSTyle_error:customStyle.wind_MultiSearchInputStyle; + + + let EF_Qtn_Date=errorfield.EF_Qtn_Date || ''; + let EStyle_Qtn_Date=show_errorhere && showQtnErrHere && EF_Qtn_Date=='Qtn_Date'?customStyle.stk_inptSTyle_error:{}; + + let EF_Qtn_Input=errorfield.EF_Qtn_Input || ''; + let EStyle_Qtn_Input=show_errorhere && showQtnErrHere && EF_Qtn_Input=='Qtn_Input'?customStyle.stk_inptSTyle_error:{}; + + let EF_Qtn_Image=errorfield.EF_Qtn_Image || ''; + let EStyle_Qtn_Image=show_errorhere && showQtnErrHere && EF_Qtn_Image=='Qtn_Image'?customStyle.stk_inptSTyle_error:{}; + + + return( + + {qtn.POSMQuestionName} + {qtn.QuestionType=='Single choice list' && qtn.Answers && + render_Picker('Answer','AnswerId',onselectionChange2,{value:selanswer,qtn:qtn,window:window}) + } + {qtn.QuestionType=='Multi choice list' && qtn.Answers && + { setMultiSelectValue(selectedItems,qtn,window) }} //setMultiSelectValue(selectedItems,qtn) + selectedItems={selansid} + selectText="Pick Items" + searchInputPlaceholderText={ST.SearchItems+"..."} + // onChangeInput={ (text)=> console.log(text)} + tagRemoveIconColor={PageTheme.$primary_color} + tagBorderColor={PageTheme.$primary_color} + tagTextColor={PageTheme.$primary_color} + selectedItemTextColor={PageTheme.$primary_color} + selectedItemIconColor={PageTheme.$primary_color} + itemTextColor={PageTheme.$text_color} + displayKey="Answer" + searchInputStyle={EStyle_Qtn_MultiChoice} + submitButtonColor={PageTheme.$primary_color} + + submitButtonText={ST.Submit} + /> + } + { (qtn.QuestionType=='Number' || qtn.QuestionType=='Decimal' || qtn.QuestionType=='Text') && + {setTextValue(val,qtn,window(qtn.QuestionType=='Decimal'?'decimal':(qtn.QuestionType=='Text'?'text':'numeric')))}} + onChangeText={(val) => { + setTextValue(val, qtn, window, qtn.QuestionType == "Decimal" ? "decimal" : qtn.QuestionType == "Text" ? "text" : "numeric"); + }} + /> + + } + + { + (qtn.QuestionType=='Date') && + + {selansid!=''?selansid:'MM/YYYY'} + {setDateValue(selanswer);showQtnDatePicker(qtn,window,true)}}> + + + + } + { ((qtn.showDatePicker==true || qtn.showDatePicker=='true') && (qtn.QuestionType=='Date') ) && + renderDatePicker(qtn,window) + } + { + (qtn.QuestionType=='Rating') && + + {selanswer} + {setRatingQtn(qtn);setRatingWindow(window);setShowRating(true);}}> + + + + } + + { + // (qtn.QuestionType=='Audio') && + // + // {selanswer} + // {show_recorder(qtn);}}> + // + // + // + } + + { + showImageTag && + + + {openCamera(window,'1','2',qtn)}}> + + + + } + + + + ) + })} + + } + + + + } + + + + + + + ); + }} + /> + ) + } + else{ + return null; + } + } + + function _renderHeader(currentIndex){ + return( + + {`${(currentIndex+1)}/${zoomImageUrl.length}`} + {setShow_zoomImage(false) }}> + + + + ) + } + + function FilterStores(searchedQry){ + searchedQry=searchedQry.toLowerCase(); + console.log('searchedQry',searchedQry); + let arr=[]; + var arr2={}; + if(searchedQry!=null && searchedQry!=''){ + for(let i=0;ii.KPIFieldName=='SearchEnable') + let isSearchEnableKPIObj=isSearchEnableIndex>=0?KPIFields[isSearchEnableIndex]:{}; + let isSearchEnable=isSearchEnableIndex>=0?isSearchEnableKPIObj['KPIFieldEnable']:true; + + let KPIPresentEnableIndex=KPIFields.findIndex(i=>i.KPIFieldName=='StorePOSMPresent') + let KPIPresentEnableObj=KPIPresentEnableIndex>=0?KPIFields[KPIPresentEnableIndex]:{}; + let KPIPresentEnable=KPIPresentEnableIndex>=0?KPIPresentEnableObj['KPIFieldEnable']:true; + + let showList=(KPIPresentEnable && isKPIPresent) || (KPIPresentEnable==false); + if(isSearchEnable==true && showList){ + return ( + + {setSearchedItem(val); FilterStores(val)}} + /> + {FilterStores(searchedItem)}}> + + + + ) + } + else{ + return( + + ) + } + } + + const onCancelClean = () =>{ + setDataCleanModal(false) + } + const onclear = () => { + onWindowDataClean(DataCleanItem) + } + + function _OpenCaptureImage_Modal(img){ + + const isImageCap=(img!='' || img!=null)?true:false; + + let {window,type,cameraType,qtn}=reCapImgModalObj + let camera2Label=(window && window.PromoImage2Lable) || ''; + return ( + + { + isImageCap && + + + + + + {openCamera(window,type,cameraType,qtn)}}> + + + + {!showImageSaveOp && + {cancelImage(false)}}> + {ST.Close} + + } + + } + + ) + } + + return ( + + {processing && } + + + + {_OpenCaptureImage_Modal()} + {ConfirmSaveAlert(props,showAlert,onSaveCancel,saveData)} + {ConfirmSaveAlert(props,DataCleanModal,onCancelClean,onclear,'Your data will be clean',)} + {setShowCamera(false);getImage(imgData)}} showCamera={showCamera} onHideCamera={()=>{setShowCamera(false);}}/> + + + + {_renderKPIPresent()} + { getSearchBar()} + { Object.keys(storeData).length>0 && + + {_renderWindow()} + + } + + {onSubmitData()}}/> + + + + + { showRating==true && + renderRatingView() + } + {show_zoomImage && + + null} + /> + + } + + ); +}) + + + +export default connect(mapStateToProps, mapDispatchToProps)(POSM); \ No newline at end of file diff --git a/PerformicsSrc/src/screens/POSSale.js b/PerformicsSrc/src/screens/POSSale.js new file mode 100644 index 0000000..56ad2ce --- /dev/null +++ b/PerformicsSrc/src/screens/POSSale.js @@ -0,0 +1,1644 @@ +import React,{useState,useEffect,useRef} from 'react'; +import Container from '../components/container'; +import { useRoute } from '@react-navigation/native'; +import { globalStyles,customStyles,GetPageTheme } from "../styles/Global"; +import {StatusBar,Image,TextInput,View,Text,ScrollView,TouchableOpacity,Platform,PermissionsAndroid,FlatList, Alert, Animated, Keyboard} from 'react-native'; +import { ReactReduxContext,connect,useSelector, useDispatch } from 'react-redux'; +import { mapStateToProps,mapDispatchToProps } from '../reducers/contextProvider'; + +import {notify} from '../components/notify'; +import moment from 'moment'; +import {getDownloadJson,getKPIFields,marktext1,marktext2, restore_ImageWithMetaData, validateNumber} from '../controller/functions'; +import {get_item,set_item,clear_item} from '../components/localStorage'; +import {version,sloganline,appname,testurl,db, colors_Arr, common_ImagePath,ImageFolderPath, HierarchyTbls} from '../constants/constants'; +import CustomHeader from '../components/customHeader'; +import {Card, Menu, Switch} from 'react-native-paper'; +import {AntDesign, Entypo, FontAwesome, Fontisto, MaterialCommunityIcons} from '../components/icons'; + +import CustomLoader from '../components/CustomLoader'; +import LinearGradient from 'react-native-linear-gradient'; +import { AppTables } from '../constants/tableConstants'; + +import * as RNFS from 'react-native-fs'; +import GradientButton from '../components/gradientButton'; + +import CustomModal from '../components/CustomModal'; +import { ConfirmSaveAlert } from '../components/alert'; +import ModalSelector from 'react-native-modal-selector' +import { CustomPicker, CustomPicker2 } from '../components/CustomPicker'; +import CustomCamera from '../components/Camera'; +import ImageViewer from 'react-native-image-zoom-viewer'; +import DateTimePicker from '@react-native-community/datetimepicker'; + +import CameraImg3 from '../assets/performics/camera_tick.svg'; +import CameraImg2 from '../assets/performics/camera_icon.svg'; +import AstrickCamera from '../assets/icons/astrickcamera.svg'; + + +function POSSale(props) { + const route = useRoute(); + const ST=props.StaticText || {}; + + // get all theme styles acc to current theme set + const PageTheme=GetPageTheme(props.DarkMode,route.name); + const customStyle=customStyles(props.DarkMode,route.name); + + + const [processing, setProcessing] = useState(true); + const [loaderTitle, setLoaderTitle] = useState(); + const [isAdhocScreen, setIsAdhocScreen] = useState(false); + const [storeData, setStoreData] = useState({}); + const [StoreCameraAllow, setStoreCameraAllow] = useState(true); + const [currentMenu, setCurrentMenu] = useState({}); + const [rerenderdata, setrerenderdata]= useState(0); + const [rerenderdata2, setrerenderdata2]= useState(0); + const [rerenderdata3, setrerenderdata3]= useState(0); + const [rerenderdata4, setrerenderdata4]= useState(0); + const [getImageProps,setGetImageProps]= useState({}); + const [hasUnsavedChanges,setHasUnsavedChanges] = useState(false); + + const [WindowData, setWindowData] = useState([]); + const [reasons_list, setReasons_list] = useState([]); + const [Windows, setWindows] = useState([]); + const [show_zoomImage, setShow_zoomImage] = useState(false); + const [refImageIndex, setrefImageIndex] = useState(0); + const [zoomImageIndex, setzoomImageIndex] = useState(0); + const [showAlert, setShowAlert] = useState(false); + const [zoomImageUrl, setZoomImageUrl] = useState([]); + const [showCamera, setShowCamera] = useState(false); + const zoomView=useRef(null); + const [showRating, setShowRating] = useState(false); + const [RatingQtn, setRatingQtn] = useState({}); + const [RatingWindow, setRatingWindow] = useState({}); + const [RatingOrder, setRatingOrder] = useState([]); + + const [AllImagesData, setAllImagesData] = useState([]); + const [globalWindows, setGlobalWindows] = useState([]); + const [KPIFields, setKPIFields] = useState([]); + const [showSwitchCamera,setShowSwitchCamera]= useState(false); + const [Image1, setImage1] = useState(''); + const [Image2, setImage2] = useState(''); + const [imageCapture, setimageCapture] = useState(''); + const [imageCapture2, setimageCapture2] = useState(''); + + + + const [DataCleanModal, setDataCleanModal] = useState(false); + const [DataCleanAnim, setDataCleanAnim] = useState(""); + const [DataCleanItem, setDataCleanItem] = useState({}); + const [isPresentClean, setIsPresentClean] = useState(0); + const [data, setData] = useState({}); + const [POSDef, setPOSDef] = useState({}); + const [Months, setMonths] = useState([]); + const [posSData, setPosSData] = useState({}); + const [posSImgArr, setPosSImgArr] = useState([]); + + const [SelectedImg, setSelectedImg] = useState(''); + const [showModal, setShowModal] = useState(false); + const [reCapImgModalObj, setReCapImgModalObj] = useState({}); + const [showImageSaveOp, setShowImageSaveOp] = useState(true); + + + const [InputChange, setInputChange] = useState([]); + const DefPOSWind={"WindowId":"0","WindowName":"POS Sale"}; + + const inputRefs = useRef({}); + + + const d1=new Date(); + const d2=moment(d1).format('MM/DD/YYYY'); + + + + useEffect(() => { + setLoaderTitle(ST.Loading+'...') + let params=props.route.params? props.route.params:{}; + let storeData1=params.storeData || {}; + let menu1=params.menu || {}; + let cameraAllow=storeData1.CameraAllow=='true' || storeData1.CameraAllow==1?true:false; + setStoreCameraAllow(cameraAllow); + + + + let isAdhoc=params.isAdhoc || false; + setIsAdhocScreen(isAdhoc); + setStoreData(storeData1); + setCurrentMenu(menu1); + + getData(storeData1,menu1); + + const unsubscribe=props.navigation.addListener('beforeRemove', onBeforeRemove); + + return function cleanup() { + return unsubscribe; + }; + }, []); + + useEffect(() => { + const unsubscribe=props.navigation.addListener('beforeRemove', onBeforeRemove); + return unsubscribe; + }, [hasUnsavedChanges]); + + useEffect(() => { + const unsubscribe=props.navigation.addListener('beforeRemove', onBeforeRemove); + return unsubscribe; + }, [showCamera]); + + function onBeforeRemove(e){ + if(showCamera==true){ + e.preventDefault(); + setShowCamera(false); + } + else{ + if (hasUnsavedChanges==true) { + e.preventDefault(); // Prevent default behavior of leaving the screen + onRemoveScreen(e); + } + else{ + return; + } + } + } + function onRemoveScreen(e){ + Alert.alert( + "", + ST.Doyoureallywanttoexitthescreen, + [ + { + text: ST.Cancel, + onPress: () => {}, + style: "cancel" + }, + { text: ST.OK, onPress: () => {setHasUnsavedChanges(false);props.navigation.dispatch(e.data.action);} } + ] + ); + } + + + async function getData(storeData1,menu1){ + try { + let {StoreId,ChainId,StateId,StoreTypeId,StoreCategoryId,StoreClassId}=storeData1; + let arrobj=[]; + + let AllKPIFields=await getKPIFields(menu1); + setKPIFields(AllKPIFields); + + // set switch camera flag as defined in mapping menu flag (if exists) + let SwitchingCameraI=AllKPIFields.findIndex(i=>i.KPIFieldName=='SwitchingCamera'); + let SwitchingCameraObj=SwitchingCameraI>=0?AllKPIFields[SwitchingCameraI]:{}; + let SwitchingCamera=SwitchingCameraI>=0?SwitchingCameraObj['KPIFieldEnable']:false; + setShowSwitchCamera(SwitchingCamera); + + + let c_month=moment().format("MMM YYYY"),p_month=moment().subtract(1,"months").format("MMM YYYY"),ptp_month=moment().subtract(2,"months").format("MMM YYYY"); + let monthsArr=[{"MonthId":c_month,"MonthName":c_month},{"MonthId":p_month,"MonthName":p_month},{"MonthId":ptp_month,"MonthName":ptp_month}]; + setMonths(monthsArr); + + + + + + await db.transaction(async function (txn) { + + let q3=`Select PosReasonId as ReasonId,PosReason as Reason From Master_PosSaleReason`; + await txn.executeSql(q3,[],async function (txn2, txnres2) { + if(txnres2.rows.length>0){ + let arr=[]; + + for(var i=0;i0){ + let pos_d=txnres5.rows.item(0); + let {MONTH,IMAGE1,IMAGE2,TOTAL_POS_VALUE}=pos_d; + // let image1Path=IMAGE1!=''?'file://'+ImageFolderPath+menu1.ScreenName+"/"+IMAGE1:''; + // let image2Path=IMAGE2!=''?'file://'+ImageFolderPath+menu1.ScreenName+"/"+IMAGE2:''; + let posdata_obj={"MonthName":MONTH,"TotalPosValue":TOTAL_POS_VALUE};//,"Image1Name":IMAGE1,"Image1":image1Path,"Image2Name":IMAGE2,"Image2":image2Path + setPosSData(posdata_obj); + } + },function (txnE,txnerr) { console.log(txnerr); }); + + let q=` Select * from Master_PosSaleDefinition p INNER join Mapping_StorePosSaleDefinition mps on p.PosDefinitionId=mps.PosDefinitionId where mps.StoreId='${StoreId}' `; + let possaledata ={},defposData=[],inputChangeFlag=[]; + await txn.executeSql(q,[],async function (txn2, txnres2) { + console.log('q dicide',txnres2.rows.length) + if(txnres2.rows.length>0){ + let data=txnres2.rows.item(0); + let PosOverall=data.PosOverall==true || data.PosOverall=='true'?1:0; + let poscheckAssortment = data.PosCheckAssortment + console.log('PSA',poscheckAssortment) + possaledata = data; + + let HeaderImageRequired=data.HeaderImageRequired==1 || data.HeaderImageRequired=='1' ?true:false; + let HeaderImageCount=data.HeaderImageCount!=null?data.HeaderImageCount:2; + let HeaderImageMandatory=data.HeaderImageMandatory!=null?data.HeaderImageMandatory:2; + + setPOSDef(possaledata); + + let q2=` Select * from ${AppTables.POSSALE_DATA} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' `; + + await txn.executeSql(q2,[],async function (txn2, txnres3) { + console.log('added data:',txnres2.rows.length); + if(txnres3.rows.length>0){ + let allWindowsData=[]; + + for(var i=0;i0){ + + let arr=[]; + for(var i=0;i{ + + db.transaction(async function (txn) { + + let q=`select * from ${AppTables.POSSALE_IMAGES} where POSDEFINITIONID='${data.PosDefinitionId}' and STORE_ID='${storeData1.StoreId}' and VISIT_DATE='${d2}' `; + + await txn.executeSql(q,[],async function (txn2, txnres2) { + + if(txnres2.rows.length>0){ + let arr=[]; + for(var i=0;i{ + return val + }).catch((err)=>{ + console.log(err); + return WindowSplits_def; + }); + } + + + async function onSubmitData(){ + let isvalid = ''; + isvalid=await validate(); + if(isvalid){ + Keyboard.dismiss(); + setShowAlert(true); + } + + + } + + async function saveData(){ + + setHasUnsavedChanges(false); + setShowAlert(false); + setLoaderTitle(ST.SavingData+'...'); + setProcessing(true); + let d1n=new Date(); + let d3=moment(d1n).format('MM/DD/YYYY'); + try { + let {StoreId,ChainId,StateId,StoreTypeId}=storeData; + + await db.transaction(async function (txn) { + + // remove old data + await txn.executeSql(`DELETE FROM ${AppTables.HEADER_POSSALE_DATA} WHERE STORE_ID='${StoreId}'and VISIT_DATE='${d2}' `,[],async function (txn2, txnres) { + console.log('Possale hdr data deleted'); + },function (txnE,txnerr) { console.log(txnerr); },); + + await txn.executeSql(`DELETE FROM ${AppTables.POSSALE_DATA} WHERE STORE_ID='${StoreId}'and VISIT_DATE='${d2}' `,[],async function (txn2, txnres) { + console.log('Possale data deleted'); + },function (txnE,txnerr) { console.log(txnerr); },); + + + await txn.executeSql(`DELETE FROM ${AppTables.POSSALE_IMAGES} WHERE STORE_ID='${StoreId}'and VISIT_DATE='${d2}' `,[],async function (txn2, txnres) { + console.log('Possale images data deleted'); + },function (txnE,txnerr) { console.log(txnerr); },); + + + + var values='',values1='',img_values=''; + let {MonthName,Image1Name,Image2Name,TotalPosValue}=posSData; + values1+=` ('${StoreId}','${d3}','${MonthName}','${Image1Name || ''}','${Image2Name || ''}','${TotalPosValue}','${d3}') `; + + let PosOverall=POSDef.PosOverall==true || POSDef.PosOverall=='true'?1:0; + let HeaderImageRequired=POSDef.HeaderImageRequired==1 || POSDef.HeaderImageRequired=='1'?true:false; + let HeaderImageCount=POSDef.HeaderImageCount!=null?POSDef.HeaderImageCount:2; + let HeaderImageMandatory=POSDef.HeaderImageMandatory!=null?POSDef.HeaderImageMandatory:2; + + for (const wi in WindowData){ + const window=WindowData[wi]; + + let wind=window; + let isPresent = '', ReasonId='', Reason='', PosValue='',PosVolume='',WindowId='',WindowName=''; + WindowId = wind.WindowId; + WindowName = wind.WindowName; + isPresent=wind.isPresent!=null && wind.isPresent!=''?wind.isPresent:'0'; + ReasonId=wind.ReasonId!=null?wind.ReasonId:''; + Reason=wind.Reason!=null?wind.Reason:''; + PosValue=wind.PosValue!=null?wind.PosValue:''; + PosVolume=wind.PosVolume!=null?wind.PosVolume:''; + + values+=values!=''?' , ':''; + + values+=` ('${StoreId}','${d3}','${WindowId}','${WindowName}','${POSDef.PosDefinitionId}','${PosValue}','${PosVolume}','${isPresent}','${ReasonId}','${Reason}','${d3}') `; + + } + + for (const imgI in posSImgArr){ + let item=posSImgArr[imgI]; + let Image1=item.Image1!=null?item.Image1:''; + let Image1Name=item.Image1Name!=null?item.Image1Name:''; + img_values+=img_values!=''?' , ':''; + + img_values+=` ('${StoreId}','${d3}','${POSDef.PosDefinitionId}','${Image1Name}','${d3}') `; + } + + console.log('values:',values); + let header_add_possale_data=`INSERT INTO ${AppTables.HEADER_POSSALE_DATA} (STORE_ID,VISIT_DATE,MONTH,IMAGE1,IMAGE2,TOTAL_POS_VALUE,ADDED_DATE) VALUES ${values1} `; + console.log('add_possale_data',header_add_possale_data) + + let add_possale_data=`INSERT INTO ${AppTables.POSSALE_DATA} (STORE_ID,VISIT_DATE,WINDOW_ID,WINDOW_NAME,POSDEFINITIONID,POS_VALUE,POS_VOLUME,ISPRESENT,REASONID,REASON,ADDED_DATE) VALUES ${values} `; + let add_possale_Images=`INSERT INTO ${AppTables.POSSALE_IMAGES} (STORE_ID,VISIT_DATE,POSDEFINITIONID,IMAGE1,ADDED_DATE) VALUES ${img_values} `; + + await txn.executeSql(header_add_possale_data,[],async function (txn2, txnres) { + console.log('POSSALE header data added'); + await txn.executeSql(add_possale_data,[],async function (txn2, txnres) { + console.log('POSSALE data added'); + if(HeaderImageRequired==true && HeaderImageMandatory>=0){ + await txn.executeSql(add_possale_Images,[],async function (txn2, txnres) { + console.log('POSSALE header images added'); + props.navigation.goBack(); + },function (txnE,txnerr) { console.log(txnerr);setProcessing(false);notify('Cannot save possale data'); },); + }else{ + props.navigation.goBack(); + } + },function (txnE,txnerr) { console.log(txnerr);setProcessing(false);notify('Cannot save possale data'); },); + },function (txnE,txnerr) { console.log(txnerr);setProcessing(false);notify('Cannot save headerpossale data'); },); + + + }); + } catch (err) { + console.log(err); + } + } + + async function executeQuery(q){ + return new Promise((resolve,reject)=>{ + db.transaction(async function (txn) { + await txn.executeSql(q,[],async function (txn2, txnres2) { + resolve(true); + },function(Etxn,txnerr){console.log(txnerr);resolve(false) }); + }); + }).then((val)=>{ + return val; + }).catch((err)=>{ + console.log(err); + return false; + }) + } + + + + + async function validate(){ + console.log('validate') + let isValid=true; + let isReasonEnable=POSDef.PosNotExistReasonEnable=='true' || POSDef.PosNotExistReasonEnable==1? 1:0; + let isshowPosValue=POSDef.ShowPosValue=='true' || POSDef.ShowPosValue==1?1:0; + let isshowPosVolume=POSDef.ShowPosVolume=='true' || POSDef.ShowPosVolume==1?1:0; + + let ShowHdrPosSaleI=KPIFields.findIndex(i=>i.KPIFieldName=='ShowTotalPosSaleHeade'); + let ShowHdrPosSaleObj=ShowHdrPosSaleI>=0?KPIFields[ShowHdrPosSaleI]:{}; + let ShowHdrPosSale=ShowHdrPosSaleI>=0?ShowHdrPosSaleObj['KPIFieldEnable']:false; + let ShowHdrPosSaleDN=ShowHdrPosSaleObj['KPIFieldDisplayName']!='' && ShowHdrPosSaleObj['KPIFieldDisplayName']!=null ? ShowHdrPosSaleObj['KPIFieldDisplayName'] :"Total POS Value"; + + // let posCAValue=KPIFields.findIndex(i=>i.KPIFieldName=='PosSaleCameraAllow') + // let posCAValueObj=posCAValue>=0?KPIFields[posCAValue]:{}; + // let posCAValueEnable=posCAValue>=0?posCAValueObj['KPIFieldEnable']:true; + + let HeaderImageRequired=POSDef.HeaderImageRequired==1 || POSDef.HeaderImageRequired=='1'?true:false; + let HeaderImageCount=POSDef.HeaderImageCount!=null?POSDef.HeaderImageCount:2; + let HeaderImageMandatory=POSDef.HeaderImageMandatory!=null?POSDef.HeaderImageMandatory:2; + + + + + return new Promise(async(resolve,reject)=>{ + let {Image1,Image1Name,Image2,Image2Name,MonthName,TotalPosValue}=posSData; + if(MonthName==null || MonthName==''){ + notify(`Please select month`,'SHORT'); + resolve(false);return; + } + else if(ShowHdrPosSale==true && TotalPosValue!==0 && (TotalPosValue=='' || TotalPosValue==null)){ + notify(`Please enter ${ShowHdrPosSaleDN} value`,'SHORT'); + resolve(false);return; + } + // else if(posCAValueEnable && (Image1==null || Image1=='')){ + // notify(`Please click image`,'SHORT'); + // resolve(false);return; + // } + else{ + + if(HeaderImageRequired==true && HeaderImageMandatory>=0){ + let res=await new Promise((resolve1,reject1)=>{ + posSImgArr.map((item,index)=>{ + if(StoreCameraAllow && item.img1Required==true && (item.Image1=='' || item.Image1==null)){ + notify(`Please click image`,'SHORT'); + resolve1(false); + } + if(index==posSImgArr.length-1){ + resolve1(true); + } + }) + }).catch((err)=>{ + console.log("error:",err); + return false; + }) + console.log("HeaderImageRequired validate res:",res) + if(res==false){ + isValid=false;return false; + } + } + if(isValid){ + for (const wi in WindowData){ + const window=WindowData[wi]; + const wind=window; + let isPresent=wind.isPresent!=null && wind.isPresent!=''?wind.isPresent:'0'; + let ReasonId=wind.ReasonId!=null?wind.ReasonId:''; + let PosValue=wind.PosValue!=null?wind.PosValue:''; + let PosVolume=wind.PosVolume!=null?wind.PosVolume:''; + if(isPresent=='1'){ + if(isshowPosValue==true && ( PosValue==null || PosValue=='')){ + notify(`Please Enter ${POSDef.PosValueLabel} `,'SHORT'); + resolve(false);return; + } + else if(isshowPosVolume==true && (PosVolume==null || PosVolume=='')){ + notify(`Please Enter ${POSDef.PosVolumeLabel}`,'SHORT'); + resolve(false);return; + } + } + else { + if(isReasonEnable==true && ReasonId=='' ){ + notify(`${'Please Select Reason'}`,'SHORT'); + resolve(false);return; + } + } + + if(wi==WindowData.length-1){ + resolve(true);return; + } + + } + } + + } + + }).then((val)=>{return val}) + .catch((err)=>{console.log(err); return false}); + + + } + + function onselectionChange3(option,keyLbl,keyVal,otherData){ + let item=otherData.window; + let index=otherData.index; + + let allData=WindowData; + let wind = item; + wind[keyVal]=option.value; + wind[keyLbl]=option.label; + + let objIndex = InputChange.findIndex(i=>i.WindowId==item.WindowId); + let winArr=[...InputChange] + winArr[objIndex].Flag=true + setInputChange(winArr); + + + index>=0?allData[index]=wind:''; + console.log('windowallData',allData) + + setWindowData(allData); + setHasUnsavedChanges(true); + setrerenderdata(!rerenderdata); + + } + + + async function disableQtns(sqtns,DQtns,data,wind={},wind_index=-1,allData=[],window={}){ + + if(DQtns.length>0){ + new Promise.all( + DQtns.map((qid,q_index)=>{ + let s_qtnindex=sqtns.findIndex(i=>i.VisibilityQuestionId==qid) || {}; + let s_qtn=sqtns[s_qtnindex]; + s_qtn['isDisabled']=true + sqtns[s_qtnindex]=s_qtn; + let id_key=s_qtn.VisibilityQuestionId+'_AnswerId'; + let ans_key=s_qtn.VisibilityQuestionId+'_Answer'; + data[id_key]=0; + data[ans_key]=''; + + wind['WindowQA']=data; + wind_index>=0?allData[wind_index]=wind:allData.push(wind); + + return false + }) + ).then(async (val)=>{ + + let allwindows=Windows; + let windowIndex=allwindows.findIndex(i=>i.VisibilityDefinitionId==window.VisibilityDefinitionId && i.VisibilityId==window.VisibilityId) + if(windowIndex>=0){ + window['WindowQuestions']=sqtns; + allwindows[windowIndex]=window; + setWindowData(allData); + setWindows(allwindows); + setGlobalWindows(allwindows); + setHasUnsavedChanges(true); + setrerenderdata(!rerenderdata); + } + + }) + } + } + + async function enableQtns(sqtns,EQtns,DQtns,data,wind={},wind_index=-1,allData=[],window={}){ + new Promise.all( + EQtns.map((qid,q_index)=>{ + let s_qtnindex=sqtns.findIndex(i=>i.VisibilityQuestionId==qid) || {}; + let s_qtn=sqtns[s_qtnindex]; + s_qtn['isDisabled']=false + sqtns[s_qtnindex]=s_qtn; + return false + }) + ).then(async (val)=>{ + if(DQtns.length>0){ + await disableQtns(sqtns,DQtns,data,wind,wind_index,allData,window) + } + else{ + let allwindows=Windows; + let windowIndex=allwindows.findIndex(i=>i.VisibilityDefinitionId==window.VisibilityDefinitionId && i.VisibilityId==window.VisibilityId) + if(windowIndex>0){ + window['WindowQuestions']=sqtns; + allwindows[windowIndex]=window; + setWindows(allwindows); + setGlobalWindows(allwindows); + setHasUnsavedChanges(true); + setrerenderdata(!rerenderdata); + } + } + }) + } + + + function setTextValue(value,qtn,window) { + let id_key=qtn.VisibilityQuestionId+'_AnswerId'; + let ans_key=qtn.VisibilityQuestionId+'_Answer'; + + let allData=WindowData; + let defData={'PosDefinitionId':window.PosDefinitionId}; + const wind_index=allData.findIndex(i=> i.PosDefinitionId==window.PosDefinitionId); + let wind=wind_index>=0?allData[wind_index]:defData; + let obj=wind.WindowQA || {}; + + if(qtn.QuestionType=='Date' ){ + let date_key=qtn.VisibilityQuestionId+'_Date'; + let d=value!=null?new Date(value):new Date(); + let mfdate=moment(d).format('MM/YYYY'); + showQtnDatePicker(qtn,window,false); + obj[id_key]=0; + obj[ans_key]=mfdate; + obj[date_key]=moment(d).format('MM/DD/YYYY'); + } + else{ + obj[id_key]=0; + obj[ans_key]=value; + } + + console.log(value,obj); + wind['WindowQA']=obj; + wind_index>=0?allData[wind_index]=wind:allData.push(wind); + + let objIndex = InputChange.findIndex(i=>i.VisibilityId==window.VisibilityId && i.VisibilityDefinitionId==window.VisibilityDefinitionId); + let winArr=[...InputChange] + winArr[objIndex].Flag=true + console.log("changeValue---------1",winArr) + setInputChange(winArr) + setWindowData(allData); + setHasUnsavedChanges(true); + setrerenderdata(!rerenderdata); + } + + function showQtnDatePicker(qtn,window,show=false){ + let allQtns=window.WindowQuestions || []; + let newqtnIndex=allQtns.findIndex(q=>q.VisibilityQuestionId==qtn.VisibilityQuestionId); + + if(newqtnIndex>=0){ + let newqtn=allQtns[newqtnIndex]; + newqtn.showDatePicker=show; + allQtns[newqtnIndex]=newqtn; + window['WindowQuestions']=allQtns; + let allWindows=Windows; + const winIndex=allWindows.findIndex(i=>i.VisibilityId==window.VisibilityId && i.VisibilityDefinitionId==window.VisibilityDefinitionId) || {}; + allWindows[winIndex]=window; + setWindows(allWindows); + setGlobalWindows(allwindows); + if(show==true) setrerenderdata(!rerenderdata); + } + } + + function setRatingValue(data){ + setRatingOrder(data); + } + + function onRatingCancel(){ + setShowRating(false); + } + + function onRatingSave(){ + setShowRating(false); + let qtn=RatingQtn; + let window=RatingWindow; + let id_key=qtn.VisibilityQuestionId+'_AnswerId'; + let ans_key=qtn.VisibilityQuestionId+'_Answer'; + let rating_key=qtn.VisibilityQuestionId+'_Rating'; + let ids=[],anss=[]; + RatingOrder.map((item,index)=>{ + ids.push(item.AnswerId); + anss.push(item.Answer); + }) + + let allData=WindowData; + let defData={'PosDefinitionId':window.PosDefinitionId}; + const wind_index=allData.findIndex(i=>i.PosDefinitionId==window.PosDefinitionId); + let wind=wind_index>=0?allData[wind_index]:defData; + let obj=wind.WindowQA || {}; + + obj[rating_key]=ids.join(','); + obj[id_key]=0; + obj[ans_key]=anss.join(','); + + wind['WindowQA']=obj; + wind_index>=0?allData[wind_index]=wind:allData.push(wind); + + let objIndex = InputChange.findIndex(i=>i.VisibilityId==window.VisibilityId && i.VisibilityDefinitionId==window.VisibilityDefinitionId); + let winArr=[...InputChange] + winArr[objIndex].Flag=true + console.log("changeValue---------7",winArr) + + setInputChange(winArr) + setWindowData(allData); + setHasUnsavedChanges(true); + setrerenderdata(!rerenderdata); + } + + + function onChoiceSelect(item,index,val,key,animatedChoice){ + + let win_index=InputChange.find(i=>i.WindowId==item.WindowId) + console.log('win_index123',win_index) + let changeValue=win_index.Flag>=0?win_index.Flag:false; + console.log("win_index--------",win_index) + console.log("changeValue--------",changeValue) + console.log("InputChange--------",InputChange) + + + if(true){ + setIsPresentClean(val) + setDataCleanAnim(animatedChoice) + setDataCleanItem(item) + setDataCleanModal(true) + return + } + + var val1=0; + val==1?val1=1:''; + + if(animatedChoice!=null){ + Animated.timing(animatedChoice, { + toValue: val1, + duration:400, + useNativeDriver:false, + }).start(); + } + onWindowDataChange(item,index,val,key) + } + + function onWindowDataChange(item,index,val,key,type=''){ + + let allData=WindowData; + + if(val!=''){ + let isValid=validateNumber(val,type); + if(!isValid){ + return; + } + } + + let wind = item; + + let PosOverall=POSDef.PosOverall==true || POSDef.PosOverall=='true'?1:0; + wind[key]=val; + // if(key=='ReasonId'){ + // let rsn=reasons_list.find(r=>r.ReasonId==val) || {}; + // wind['Reason']=rsn.Reason || ''; + // } + + index>=0?allData[index]=wind:''; + + + let objIndex = InputChange.findIndex(i=>i.WindowId==item.WindowId); + let winArr=[...InputChange] + winArr[objIndex].Flag=true + console.log("changeValue---------1",winArr) + setInputChange(winArr) + + console.log('windowallData',allData) + + setWindowData(allData); + setHasUnsavedChanges(true); + setrerenderdata(!rerenderdata); + } + + function onHdrDataChange(val,key,type=''){ + if(val!=''){ + let isValid=validateNumber(val,type); + if(!isValid){ + return; + } + } + + let alldata=posSData; + alldata[key]=val; + setPosSData(alldata); + setHasUnsavedChanges(true); + setrerenderdata(!rerenderdata); + } + + function onselectionChange(option,keyLbl,keyVal,otherData){ + let allData=posSData; + allData[keyLbl]=option.label; + allData[keyVal]=option.value; + + setPosSData(allData); + setHasUnsavedChanges(true); + setrerenderdata(!rerenderdata); + } + + + async function setWindowStockVal(val,window,stockProd,key,type=''){ + if(type=='numeric' && val!=''){ + const regex = new RegExp(/^\d+$/); + let isNUmeric=regex.test(val); + if(!isNUmeric){ + notify(ST.Pleaseenterwholenumbersonly,'SHORT'); + return; + } + } + + let allData=WindowData; + let defData={'VisibilityId':window.VisibilityId,'VisibilityDefinitionId':window.VisibilityDefinitionId}; + const win_index=allData.findIndex(i=>i.VisibilityId==window.VisibilityId && i.VisibilityDefinitionId==window.VisibilityDefinitionId); + let wind=win_index>=0?(allData[win_index] || defData) : defData; + let WStocksData=wind['WStocksData'] || []; + let sdIndex=WStocksData.findIndex(i=> i.ProductId==stockProd.VisibilityStockValue); + let sd=sdIndex>=0?WStocksData[sdIndex]:{'ProductId':stockProd.VisibilityStockValue,'Stock':''}; + sd[key]=val; + sdIndex>=0?WStocksData[sdIndex]=sd:WStocksData.push(sd); + wind['WStocksData']=WStocksData; + win_index>=0?allData[win_index]=wind:allData.push(wind); + if(key=='isPVisPresent'){ + let isAllChecked = await verifyAllChecked(val,window,stockProd,key); + wind['isAllSKUChecked']=isAllChecked; + } + + setWindowData(allData); + setHasUnsavedChanges(true); + setrerenderdata4(!rerenderdata4); + } + + + + + async function onCatTextChange(window,key,val){ + let item=window; + let allData=WindowData; + let defData={'VisibilityId':item.VisibilityId,'VisibilityDefinitionId':item.VisibilityDefinitionId}; + const win_index=allData.findIndex(i=>i.VisibilityId==item.VisibilityId && i.VisibilityDefinitionId==item.VisibilityDefinitionId); + let wind=win_index>=0?(allData[win_index] || defData) : defData; + wind[key]=val; + + win_index>=0?allData[win_index]=wind:allData.push(wind); + setWindowData(allData); + setHasUnsavedChanges(true); + setrerenderdata(!rerenderdata); + } + + + async function verifyAllChecked(val,window,stockProd,key){ + return await new Promise((resolve,reject)=>{ + let WindowStocks=window.WindowStocks || []; + let allData=WindowData; + const win_index=allData.findIndex(i=>i.VisibilityId==window.VisibilityId && i.VisibilityDefinitionId==window.VisibilityDefinitionId); + let wind=win_index>=0?(allData[win_index] || defData) : defData; + let WStocksData=wind['WStocksData'] || []; + if(WindowStocks.length>0){ + let isAllChecked=1; + for(var i=0;i a.ProductId==stockProd.VisibilityStockValue); + let sd1=sdIndex1>=0?WStocksData[sdIndex1]:{}; + let isPVisPresent=sd1.isPVisPresent; + if(isPVisPresent==null || isPVisPresent=='' || isPVisPresent==0 || isPVisPresent=='0'){ + isAllChecked=0 + } + + if(i==WindowStocks.length-1){ + resolve(isAllChecked); + } + } + } + else{ + resolve(0); + } + + }).catch((err)=>{ + console.log(err); + return 0; + }); + } + + async function getImage(imgdata){ + let type=getImageProps.type || ''; + let ImageIndex=getImageProps.ImageIndex; + console.log('getImage ImageIndex:',type,ImageIndex) + if(typeof imgdata =='object' && imgdata.errorCode=='camera_unavailable'){ + notify(ST.Cameraunavailable); + } + else if(typeof imgdata =='object' && imgdata.uri!=null){ + const img=imgdata; + const imgurl=img.uri, imgWidth=img.width, imgHeight=img.height; + let isImgFromGallery=img.fromGallery!=null?img.fromGallery:false; + let picture_clickedd=isImgFromGallery==true?img.datetime:new Date(); + + let picture_clicked_time=moment(picture_clickedd).format('MM-DD-YYYY HH:mm:ss') + let picture_clicked_time_for_pic_name=moment(picture_clickedd).format('MMDDYYYY_HHmmss') + + console.log("time", picture_clicked_time); + console.log("time1", picture_clicked_time_for_pic_name); + let calculate_tym_date_for_filename = picture_clicked_time_for_pic_name; + let calculate_tym_date_over_img = picture_clicked_time; + + let filename=(props.UserId || '')+'_PossaleImg-'+calculate_tym_date_for_filename+'.jpg'; + + let allData=posSImgArr;//posSData; + let image_key,image_key_path; + let imgObj={}; + if(ImageIndex>=0){ + imgObj=allData[ImageIndex]; + } + if(type=='1'){ + image_key='Image1Name'; + image_key_path="Image1"; + } + // else{ + // image_key='Image2Name'; + // image_key_path="Image2"; + // } + + const mark_text1=calculate_tym_date_over_img; + const mark_text2='Store Name:'+storeData.StoreName+' | Store Id:'+storeData.StoreId+' | User Id:'+storeData.EmpId+' | Image Type: '+currentMenu.MenuName+' | Date:'+calculate_tym_date_over_img; + + + // renamefile + let imagePath=`${ImageFolderPath+currentMenu.ScreenName}/${filename}`; + + console.log('imagePath',imagePath,imgObj) + RNFS.copyFile(imgurl,imagePath) + .then(async(resn) => { + // render data with clicked image + let uri='file://'+imagePath; + imgObj[image_key]=filename; + imgObj[image_key_path]=uri; + + ImageIndex>=0?allData[ImageIndex]=imgObj:allData.push(imgObj); + console.log("allData:",allData); + setPosSImgArr(allData); + setSelectedImg(uri); + setrerenderdata(!rerenderdata); + + // add metdata then resize image and restored back to the imagePath + let restore_data={"destFilePath":imagePath,"imgurl":imgurl,imgWidth,imgHeight,mark_text1,mark_text2} + let is_restored=await restore_ImageWithMetaData(restore_data,imgdata); + console.log("image restored:",is_restored); + }) + .catch(err => { + console.log('ERROR: image file write failed!!!'); + console.log(err.message, err.code); + }); + } + } + + + + async function removeImage(){ + let index=toRemoveIndex; + let allData=AllImagesData; + let imgData=allData[index]; + let imgPath=imgData.ImagePath || ''; + if(imgPath!=''){ + let imgPath1='file://'+imgPath; + RNFS.unlink(imgPath1); + } + allData.splice(index,1); + setAllImagesData(allData); + } + + async function onRemoveImage(imgName,index){ + setToRemoveIndex(index); + } + + + async function openCamera(type='1',index=''){ + setGetImageProps({'type':type,"ImageIndex":index}); + setShowCamera(true); + } + + + function onWindowDataClean(){ + if(DataCleanAnim!=null){ + console.log("anim---") + let anim=isPresentClean==1?1:''; + Animated.timing(DataCleanAnim, { + toValue:anim, + duration:400, + useNativeDriver:false, + }).start(); + } + let allData=WindowData; + let WindowSplits = []; + for(var s=0;si.VisibilityId==window.VisibilityId && i.VisibilityDefinitionId==window.VisibilityDefinitionId + let defData={'WindowId':DataCleanItem.WindowId,isPresent:isPresentClean}; + const win_index=allData.findIndex(i=>i.WindowId==DataCleanItem.WindowId); + allData[win_index]=defData + + let objIndex = InputChange.findIndex((obj => obj.WindowId == DataCleanItem.WindowId)); + let winArr=[...InputChange] + winArr[objIndex].Flag=false + console.log("changeValue---------7",winArr) + setInputChange(winArr) + setWindowData(allData); + setHasUnsavedChanges(true); + setDataCleanModal(false) + setrerenderdata(!rerenderdata); + } + + function checkAllSKUs(val,window){ + + let WindowStocks=window.WindowStocks || []; + let allData=WindowData; + let defData={'VisibilityId':window.VisibilityId,'VisibilityDefinitionId':window.VisibilityDefinitionId}; + const win_index=allData.findIndex(i=>i.VisibilityId==window.VisibilityId && i.VisibilityDefinitionId==window.VisibilityDefinitionId); + let wind=win_index>=0?(allData[win_index] || defData) : defData; + let WStocksData=wind['WStocksData'] || []; + console.log('WStocksData before:',WStocksData) + for(var i=0;i a.ProductId==stockProd.VisibilityStockValue); + let sd=sdIndex>=0?WStocksData[sdIndex]:{'ProductId':stockProd.VisibilityStockValue,'Stock':''}; + let isPVisPresent=(val==1 || val=='1')?1:0; + sd['isPVisPresent']=isPVisPresent; + + sdIndex>=0?(WStocksData[sdIndex]=sd):(WStocksData.push(sd)); + } + + + wind['WStocksData']=WStocksData; + wind['isAllSKUChecked']=val==1?1:0; + console.log('wind updated'); + win_index>=0?allData[win_index]=wind:allData.push(wind); + + setWindowData(allData); + setHasUnsavedChanges(true); + setrerenderdata(!rerenderdata); + } + + function onSaveCancel(){ + setShowAlert(false); + } + + + + function openImageRefView(windowIndex=0){ + setrefImageIndex(windowIndex); + setShow_zoomImage(true); + } + + function FilterStores(searchedQry){ + searchedQry=searchedQry.toLowerCase(); + console.log('searchedQry',searchedQry); + let arr=[]; + let newWindows=[]; + if(searchedQry!=null && searchedQry!=''){ + + for(let i=0;i + + {ST.DragItemsInOrder} + {ST.Pressandholdtodrag} + {setRatingValue(data)}} + keyExtractor={(item) => item.AnswerId} + renderItem={renderItem} + /> + + {onRatingCancel()}}> + {ST.Cancel} + + {onRatingSave()}}> + {ST.Save} + + + + + ) + } + + function render_Picker(label_key,value_key,onChange=()=>{},selected_data={}){ + var data=[]; + let qtn=selected_data.qtn || {}; + let window=selected_data.window || {}; + let isQtnDisabled=qtn.isDisabled!=null || qtn.isDisabled!=''?false:true; + let allAnswers=qtn.Answers || []; + + allAnswers.map((item,index)=>{ + let obj={ key: index, label: item[label_key],value:item[value_key] }; + if(selected_data.value==item[label_key]) + obj['component']= {item[label_key]}; + data.push(obj); + }); + + return ( + {onChange(option,qtn,window) }} + overlayStyle={customStyle.addVisPickerOverlay} + cancelContainerStyle={customStyle.addVisPicker_OptionContainerStyle} + optionStyle={customStyle.addvis_opStyle} + optionTextStyle={customStyle.addvis_opTextStyle} + optionContainerStyle={customStyle.addVisPicker_OptionContainerStyle} + selectedKey={'1'} + disabled={isQtnDisabled} + > + {(selected_data.value!=null && selected_data.value!=''?selected_data.value: '-'+ST.select+'-')} + + ) + } + + function renderDatePicker(qtn,window){ + let qtnn=qtn; + let DateRange=qtn.DateRange; + let maxDate=moment().add(10,'years').format('MM/DD/YYYY'); + let minDate=moment().subtract(10,'years').format('MM/DD/YYYY'); + if(DateRange=='RFD'){ + maxDate=moment().format('MM/DD/YYYY'); + } + else if(DateRange=='RPD'){ + minDate=moment().format('MM/DD/YYYY'); + } + + return ( + {setTextValue(selectedDate,qtnn,window)}} + maximumDate={new Date(maxDate)} + minimumDate={new Date(minDate)} + /> + ); + } + + + function _renderItem(item,index){ + + const window=item; + const windowIndex=index; + + let isNAReasonEnable=POSDef.PosNotExistReasonEnable=='true' || POSDef.PosNotExistReasonEnable==1?1:0; + let isshowPosValue=POSDef.ShowPosValue=='true' || POSDef.ShowPosValue==1?1:0; + let isshowPosVolume=POSDef.ShowPosVolume=='true' || POSDef.ShowPosVolume==1?1:0; + let wind = item; + + + let isPresent=wind.isPresent!=null && wind.isPresent!=''?wind.isPresent:'0'; + let Reason=wind.Reason!=null?wind.Reason:''; + let ReasonId=wind.ReasonId!=null?wind.ReasonId:''; + let PosValue=wind.PosValue!=null?wind.PosValue:''; + let PosVolume=wind.PosVolume!=null?wind.PosVolume:''; + + var xpos=isPresent=='1'?-75:0; + if(wind.animatedChoice!=null ){ + xpos=wind.animatedChoice.interpolate({ + inputRange:[0,1], + outputRange:[0,-75], + }); + } + + return( + + + + {item.WindowName} + + + + + + + {ST.IsPresent} + + + + {onChoiceSelect(window,index,1,'isPresent',wind.animatedChoice)}}> + {ST.Yes} + + {onChoiceSelect(window,index,0,'isPresent',wind.animatedChoice)}}> + {ST.No} + + + + + + { ((isPresent=='1'&& isshowPosValue==true)) && + + {POSDef.PosValueLabel} + {onWindowDataChange(item,index,val,'PosValue','numeric')}} + + /> + + + } + { ((isPresent=='1'&& isshowPosVolume==true) ) && + + {POSDef.PosVolumeLabel} + {inputRefs.current['input1_'+stockProd.VisibilityDefinitionId+'_'+stockProd.VisibilityStockDefinitionId]=reff;}} + placeholder="" + autoComplete='off' + placeholderTextColor={PageTheme.$placeholder_color} + keyboardType={'numeric'} + value ={(PosVolume+'')} + onChangeText={(val)=>{onWindowDataChange(item,index,val,'PosVolume','numeric')}} + /> + + } + + { + (isPresent=='0' && isNAReasonEnable==true) && + + {ST.SelectReason} + {} + + } + + + + + ); + + } + + function _renderWindow(){ + + + let PosOverall=POSDef.PosOverall==true || POSDef.PosOverall=='true'?1:0; + if(PosOverall==1){ + return ( + <> + {_renderPOSSHeader()} + {_renderItem(DefPOSWind,0)} + + ) + } + else{ + return ( + `window_${index.toString()}`} + renderItem={({item,index})=>{ + return _renderItem(item,index); + + }} + /> + ) + } + } + + + + function _renderHeader(currentIndex){ + return( + + {`${(currentIndex+1)}/${zoomImageUrl.length}`} + {setShow_zoomImage(false) }}> + + + + ) + } + + function _renderPOSSHeader(){ + + let {TotalPosValue}=posSData;//Image1,Image1Name,Image2,Image2Name + + let HeaderImageRequired=POSDef.HeaderImageRequired==1 || POSDef.HeaderImageRequired=='1'?true:false; + let HeaderImageCount=POSDef.HeaderImageCount!=null?POSDef.HeaderImageCount:2; + // let HeaderImageMandatory=POSDef.HeaderImageMandatory!=null?POSDef.HeaderImageMandatory:2; + + let ShowHdrPosSaleI=KPIFields.findIndex(i=>i.KPIFieldName=='ShowTotalPosSaleHeade'); + let ShowHdrPosSaleObj=ShowHdrPosSaleI>=0?KPIFields[ShowHdrPosSaleI]:{}; + let ShowHdrPosSale=ShowHdrPosSaleI>=0?ShowHdrPosSaleObj['KPIFieldEnable']:false; + let ShowHdrPosSaleDN=ShowHdrPosSaleObj['KPIFieldDisplayName']!='' && ShowHdrPosSaleObj['KPIFieldDisplayName']!=null ? ShowHdrPosSaleObj['KPIFieldDisplayName'] :"Total POS Value"; + return ( + + + {'Month'} + + {CustomPicker(props,Months,'MonthId','MonthName','MonthId','MonthName',onselectionChange,{value:posSData.MonthName})} + + + {ShowHdrPosSale==true && + + + {ShowHdrPosSaleDN} + {onHdrDataChange(val,"TotalPosValue","numeric")}} + /> + + } + + + {HeaderImageRequired && HeaderImageCount>0 && + posSImgArr.map((item,index)=>{ + + let Image1=item.Image1!=null?item.Image1:''; + let img1Required=item.img1Required!=null?item.img1Required:false; + return ( + + { (Image1=='' || Image1==null) ? + (img1Required? + {openCamera('1',index)}}> + + : + {openCamera('1',index)}}> + + + ) : + + ((Image1!='' && Image1!=null) ? + {OpenImgModal(Image1,'1',index)}}> + + : null) + } + + ) + }) + } + + {/* + + { (Image1=='' || Image1==null) ? + {openCamera('1')}}> + + : (Image1!='' && Image1!=null) ? + {OpenImgModal(Image1,'1')}}> + + : null + } + */} + + + {/* + + { (Image2=='' || Image2==null) ? + {openCamera('2')}}> + + : (Image2!='' && Image2!=null) ? + {OpenImgModal(Image2,'2')}}> + + : null + } + */} + + + + ); + } + + const onCancelClean = () =>{ + setDataCleanModal(false) + } + const onclear = () => { + console.log("onclear---------",DataCleanItem) + onWindowDataClean(DataCleanItem) + } + + function _OpenCaptureImage_Modal(img){ + + const isImageCap=(img!='' || img!=null)?true:false; + + let {type,ImageIndex}=reCapImgModalObj + return ( + + { + isImageCap && + + + + + + {openCamera(type,ImageIndex)}}> + + + + {!showImageSaveOp && + {cancelImage(false)}}> + + {ST.Close} + + } + + } + + ) + } + + return ( + + + {processing && } + + {_OpenCaptureImage_Modal()} + {ConfirmSaveAlert(props,showAlert,onSaveCancel,saveData)} + {ConfirmSaveAlert(props,DataCleanModal,onCancelClean,onclear,'Your data will be clean',)} + {/* {setShowCamera(false);getImage(imgData)}} showCamera={showCamera} onHideCamera={()=>{setShowCamera(false);}}/> */} + + {setShowCamera(false);getImage(imgData)}} showCamera={showCamera} onHideCamera={()=>{setShowCamera(false);}}/> + + + + + + + { Object.keys(storeData).length>0 && + + {_renderWindow()} + + } + + {onSubmitData()}}/> + + + + + { showRating==true && + renderRatingView() + } + {show_zoomImage && + + null} + /> + + } + + ); +} + + +export default connect(mapStateToProps, mapDispatchToProps)(POSSale); \ No newline at end of file diff --git a/PerformicsSrc/src/screens/PaidVisibility.js b/PerformicsSrc/src/screens/PaidVisibility.js new file mode 100644 index 0000000..1592472 --- /dev/null +++ b/PerformicsSrc/src/screens/PaidVisibility.js @@ -0,0 +1,1067 @@ +import React,{useState,useEffect,useRef} from 'react'; +import Container from '../components/container'; +import { useRoute } from '@react-navigation/native'; +import { globalStyles,customStyles,GetPageTheme } from "../styles/Global"; +import {StatusBar,Image,TextInput,View,Text,ScrollView,TouchableOpacity,Platform,PermissionsAndroid,FlatList, Alert,BackHandler, Animated} from 'react-native'; +import { ReactReduxContext,connect,useSelector, useDispatch } from 'react-redux'; +import { mapStateToProps,mapDispatchToProps } from '../reducers/contextProvider'; +import SQLite from 'react-native-sqlite-2'; +import {notify} from '../components/notify'; +import moment from 'moment'; +import {getDownloadJson,getKPIFields,marktext1,marktext2, validateNumber} from '../controller/functions'; +import {get_item,set_item,clear_item} from '../components/localStorage'; +import {version,sloganline,appname,testurl,db, colors_Arr, common_ImagePath, ImageFolderPath} from '../constants/constants'; +import CustomHeader from '../components/customHeader'; +import {Card, Menu, Switch} from 'react-native-paper'; +import {AntDesign, Entypo, FontAwesome, MaterialCommunityIcons} from '../components/icons'; +import CustomLoader from '../components/CustomLoader'; +import LinearGradient from 'react-native-linear-gradient'; +import { AppTables } from '../constants/tableConstants'; +import * as RNFS from 'react-native-fs'; +import GradientButton from '../components/gradientButton'; + +import CameraImg from '../assets/performics/camera_front_image.svg' +import CustomModal from '../components/CustomModal'; +import { Q_getpaidvisibility } from '../constants/ConstantQueries'; +import { Picker } from '@react-native-picker/picker'; +import ImageViewer from 'react-native-image-zoom-viewer'; +import { CustomPicker, CustomPicker2 } from '../components/CustomPicker'; +import { ExitScreenAlert } from '../components/alert'; +import CustomCamera from '../components/Camera'; + +function PaidVisibility(props) { + const route = useRoute(); + const ST=props.StaticText || {}; + + // get all theme styles acc to current theme set + const PageTheme=GetPageTheme(props.DarkMode,route.name); + const customStyle=customStyles(props.DarkMode,route.name); + + + const [processing, setProcessing] = useState(true); + const [loaderTitle, setLoaderTitle] = useState(); + const [isAdhocScreen, setIsAdhocScreen] = useState(false); + const [storeData, setStoreData] = useState({}); + const [currentMenu, setCurrentMenu] = useState({}); + const [brandData, setBrandData] = useState([]); + const [globalBrandData, setGlobalBrandData] = useState([]); + const [rerenderdata, setrerenderdata]= useState(0); + const [rerenderdata2, setrerenderdata2]= useState(0); + + const [catImages, setCatImages] = useState([]); + const [SKUStockData, setSKUStockData] = useState([]); + const [showAlert, setShowAlert] = useState(false); + const [reasons_list, setReasons_list] = useState([]); + const [show_zoomImage, setShow_zoomImage] = useState(false); + const [zoomImageUrl, setZoomImageUrl] = useState([]); + const [hasUnsavedChanges,setHasUnsavedChanges] = useState(false); + const [KPIFields, setKPIFields] = useState([]); + const [showSwitchCamera,setShowSwitchCamera]= useState(false); + const [showCamera, setShowCamera] = useState(false); + const [getImageProps,setGetImageProps]= useState({}); + const [searchedItem, setSearchedItem]= useState(''); + + const d1=new Date(); + const d2=moment(d1).format('MM/DD/YYYY'); + const zoomView=useRef(null); + + useEffect(() => { + setLoaderTitle(ST.Loading+'...') + let params=props.route.params? props.route.params:{}; + let storeData1=params.storeData || {}; + let menu1=params.menu || {}; + + let isAdhoc=params.isAdhoc || false; + setIsAdhocScreen(isAdhoc); + setStoreData(storeData1); + setCurrentMenu(menu1); + + getData(storeData1,menu1); + const unsubscribe=props.navigation.addListener('beforeRemove', onBeforeRemove); + + return function cleanup() { + return unsubscribe; + }; + }, []); + + useEffect(() => { + const unsubscribe=props.navigation.addListener('beforeRemove', onBeforeRemove); + return unsubscribe; + }, [hasUnsavedChanges]); + + useEffect(() => { + const unsubscribe=props.navigation.addListener('beforeRemove', onBeforeRemove); + return unsubscribe; + }, [showCamera]); + + function onBeforeRemove(e){ + if(showCamera==true){ + e.preventDefault(); + setShowCamera(false); + } + else{ + if (hasUnsavedChanges==true) { + e.preventDefault(); // Prevent default behavior of leaving the screen + onRemoveScreen(e); + } + else{ + return; + } + } + } + + function onRemoveScreen(e){ + Alert.alert( + "", + ST.Doyoureallywanttoexitthescreen, + [ + { + text: ST.Cancel, + onPress: () => {}, + style: "cancel" + }, + { text: ST.OK, onPress: () => {setHasUnsavedChanges(false);props.navigation.dispatch(e.data.action);} } + ] + ); + } + + + async function getData(storeData1,menu1){ + try { + let {StoreId,ChainId,StateId,StoreTypeId}=storeData1; + let allCats=[]; + let AllKPIFields=await getKPIFields(menu1); + setKPIFields(AllKPIFields); + + // set switch camera flag as defined in mapping menu flag (if exists) + let SwitchingCameraI=AllKPIFields.findIndex(i=>i.KPIFieldName=='SwitchingCamera'); + let SwitchingCameraObj=SwitchingCameraI>=0?AllKPIFields[SwitchingCameraI]:{}; + let SwitchingCamera=SwitchingCameraI>=0?SwitchingCameraObj['KPIFieldEnable']:false; + setShowSwitchCamera(SwitchingCamera); + + + await db.transaction(async function (txn) { + let q2=Q_getpaidvisibility(storeData1); + let q=`Select * From Master_NonVisibility`; + await txn.executeSql(q,[],async function (txn2, txnres2) { + if(txnres2.rows.length>0){ + let arr=[]; + for(var i=0;i0){ + let arr=[]; + for(var i=0;i { + let seletlist=`p.DISPLAY_ID as DisplayId,p.DISPLAY as DisplayName,p.VISIBILITY_PRESENT,p.IMAGE1,p.IMAGE2,p.REASON_ID,p.REASON,md.RefImage,p.SHOW_RSN_REMARK,p.REASON_REMARK`; + let sku_q=`SELECT ${seletlist} FROM ${AppTables.PAID_VISIBILITY_CHILD_DATA} p INNER join Master_Display md on md.DisplayId=p.DISPLAY_ID WHERE p.STORE_ID='${StoreId}' and p.VISIT_DATE='${d2}' and p.SUB_CATEGORY_ID='${item.SubCategoryId}' `; + + let join=` INNER JOIN Mapping_Visibility v on p.SubCategoryId=v.SubCategoryId `; + let join2=` INNER join Master_Display md on md.DisplayId=v.DisplayId `; + let sku_q2=`SELECT DISTINCT md.DisplayId,md.DisplayName,md.RefImage from Product_Master p ${join} ${join2} where v.StoreId='${StoreId}' and (p.SubCategoryId='${item.SubCategoryId}' or p.SubCategoryId= ${item.SubCategoryId})`; + + let cindex=index; + return await txn.executeSql(sku_q,[],async function (txn2, txnres) { + if(txnres.rows.length>0){ + let arr=[]; + + for(var i=0;i0){ + for(var k=0;k0){ + let arr=[]; + + for(var i=0;i0){ + for(var k=0;k{ + + }); + }); + } catch (err) { + console.log(err); + } + } + + async function getDisplayCheckList(DisplayId,SubCategoryId,storeData1={}){ + var result=await new Promise((resolve, reject) => { + db.transaction(async function (txn) { + + let {StoreId}=storeData1; + let join=`Inner join Mapping_DisplayChecklist v on p.ChecklistId=v.ChecklistId`; + let join2=`Left join (Select * From ${AppTables.PAID_VIS_CHECKLIST} Where STORE_ID='${StoreId}' and VISIT_DATE='${d2}' and SUB_CATEGORY_ID='${SubCategoryId}' and DISPLAY_ID='${DisplayId}') as T on p.ChecklistId=T.CHECKLIST_iD `; + let q=`Select Distinct p.ChecklistId as ChecklistId,p.ChecklistName as ChecklistName ,ifnull(T.REASON,'')as REASON,ifnull(T.REASON_ID,0)as REASON_ID from Master_Checklist p ${join} ${join2} Where v.DisplayId ='${DisplayId}'`; + + await txn.executeSql(q,[],async function (txn2, txnres) { + + if(txnres.rows.length>0){ + let arr=[]; + for(var i=0;i{ + return {'Results':val}; + }).catch((err)=>{ + return {'Error':err}; + }); + return result; + } + + + async function getImage(imgdata){ + let cat=getImageProps.cat || ''; + let skuItem=getImageProps.skuItem || ''; + let type=getImageProps.type || ''; + if(typeof imgdata =='object' && imgdata.errorCode=='camera_unavailable'){ + notify(ST.Cameraunavailable); + } + else if(typeof imgdata =='object' && imgdata.uri!=null){ + const img=imgdata; + const imgurl=img.uri, imgWidth=img.width, imgHeight=img.height; + let isImgFromGallery=img.fromGallery!=null?img.fromGallery:false; + let picture_clickedd=isImgFromGallery==true?img.datetime:new Date(); + + let picture_clicked_time=moment(picture_clickedd).format('MM-DD-YYYY HH:mm:ss') + let picture_clicked_time_for_pic_name=moment(picture_clickedd).format('MMDDYYYY_HHmmss') + + console.log("time", picture_clicked_time); + console.log("time1", picture_clicked_time_for_pic_name); + let calculate_tym_date_for_filename = picture_clicked_time_for_pic_name; + let calculate_tym_date_over_img = picture_clicked_time; + + const mark_text1=calculate_tym_date_over_img; + const mark_text2='Store Name:'+storeData.StoreName+' | Store Id:'+storeData.StoreId+' | User Id:'+storeData.EmpId+' | Image Type: Paid Visibility'+' | Date:'+calculate_tym_date_over_img; + + await marktext1(mark_text1,imgurl) + .then((res)=>{ + if(res.success){ + let uri=res.uri; + marktext2(mark_text2,uri,imgWidth,imgHeight) + .then((res)=>{ + if(res.success){ + + let filename=storeData.StoreId+'_'+(props.UserId || '')+'_PaidVisibilityImg-'+calculate_tym_date_for_filename+'.jpg'; + + let allData=SKUStockData; + let defData={'SubCategoryId':cat.SubCategoryId,'DisplayId':skuItem.DisplayId}; + const cindex=allData.findIndex(ci=>ci.SubCategoryId==cat.SubCategoryId && ci.DisplayId==skuItem.DisplayId); + const imgData=cindex>=0?(allData[cindex] || defData):defData; + let image_key=type=='2'?'Image2':'Image1'; + let image_path_key=type=='2'?'Image2Path':'Image1Path'; + imgData[image_key]=filename; + + // renamefile + let imagePath='file://'+`${ImageFolderPath+currentMenu.ScreenName}/`+filename; + RNFS.copyFile(res.uri, imagePath) + .then(resn => { + let uri=imagePath; + console.log('image marker',uri); + imgData[image_path_key]=uri; + cindex>=0?allData[cindex]=imgData:allData.push(imgData); + + setSKUStockData(allData); + setHasUnsavedChanges(true); + setrerenderdata2(!rerenderdata2); + }) + .catch(err => { + console.log(ST.Errorimagefilewritefailed+'!!!'); + console.log(err.message, err.code); + }); + + + } + else{ + if(res.imagenotfound){ + notify(ST.Pleasecaptureaimage); + } + else{ + notify(res.error); + } + } + }); + } + else{ + if(res.imagenotfound){ + notify(ST.Pleasecaptureaimage); + } + else{ + notify(res.error); + } + } + }); + } + } + + async function openCamera(cat,skuItem,type='1'){ + setGetImageProps({'cat':cat,'skuItem':skuItem,'type':type}); + setShowCamera(true); + } + + async function submitOpeningStock(){ + let isvalid=await validate(); + if(isvalid){ + setShowAlert(true); + } + } + + async function saveData(){ + setHasUnsavedChanges(false); + setShowAlert(false); + setLoaderTitle(ST.SavingData+'...'); + setProcessing(true); + try { + let {StoreId,ChainId,StateId,StoreTypeId}=storeData; + await db.transaction(async function (txn) { + + let q=`DELETE FROM ${AppTables.PAID_VISIBILITY_HEADER_DATA} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' `; + let q2=`DELETE FROM ${AppTables.PAID_VISIBILITY_CHILD_DATA} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' `; + let q3=`DELETE FROM ${AppTables.PAID_VIS_CHECKLIST} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' `; + + // remove old data + await txn.executeSql(q,[],async function (txn2, txnres) { + console.log('paid vis hdr data deleted'); + },function (txnE,txnerr) { console.log(txnerr); },); + + await txn.executeSql(q2,[],async function (txn2, txnres) { + console.log('paid vis child data deleted'); + },function (txnE,txnerr) { console.log(txnerr); },); + + await txn.executeSql(q3,[],async function (txn2, txnres) { + console.log('paid vis checklist data deleted'); + },function (txnE,txnerr) { console.log(txnerr); },); + + let seq_q=` select seq from sqlite_sequence where name="${AppTables.PAID_VISIBILITY_HEADER_DATA}" `; + await txn.executeSql(seq_q,[],async function (txn2, txnres) { + if(txnres.rows.length>0){ + let data=txnres.rows.item(0); + let seq=data.seq; + insertData(seq); + } + else{ + insertData(0); + } + },function (txnE,txnerr) { console.log(txnerr); insertData(0); },); + + + }); + } catch (err) { + console.log(err); + } + } + + async function insertData(seq=0){ + try { + console.log(seq); + let {StoreId,ChainId,StateId,StoreTypeId,ExpiryStock}=storeData; + + await db.transaction(async function (txn) { + var values='',child_values='',checklist_values=''; + let isChecklistExists=false; + for(var i=0;ici.SubCategoryId==item.SubCategoryId && ci.DisplayId==skuItem.DisplayId); + const skud=skud_index>=0?(allSKUData[skud_index] || {}) : {}; + let RemarkText=skud.RemarkText!=null?skud.RemarkText:''; + let showOtherText=skud.showOtherText==true || skud.showOtherText=='1' ?1:0; + let checklist=skud['Checklist'] || []; + + child_values+=` ('${seq}','${StoreId}','${d2}','${item.SubCategoryName}','${item.SubCategoryId}','${skud.isPresent}','${skuItem.DisplayId}','${skuItem.DisplayName}','${(skud.Image1 || '')}','${(skud.Image2 || '')}','${skud.Reason}','${skud.ReasonId}','${showOtherText}','${RemarkText}','1','${d2}') `; + + if(displayCheckList.length>0 && skud.isPresent==1){ + for(var k=0;kci.ChecklistId==dcItem.ChecklistId) || {}; + + checklist_values+=checklist_values!=''?' , ':''; + + checklist_values+=` ('${seq}','${StoreId}','${d2}','${item.SubCategoryId}','${skuItem.DisplayId}','${dcItem.ChecklistName}','${dcItem.ChecklistId}','${checkeItem.Answer}','${checkeItem.AnswerId}','${d2}') `; + + isChecklistExists=true; + } + } + } + } + + let add_HdrData=`INSERT INTO ${AppTables.PAID_VISIBILITY_HEADER_DATA} (STORE_ID,VISIT_DATE,SUB_CATEGORY,SUB_CATEGORY_ID,ADDED_DATE) VALUES ${values} `; + let add_ChildData=`INSERT INTO ${AppTables.PAID_VISIBILITY_CHILD_DATA} (COMMON_ID,STORE_ID,VISIT_DATE,SUB_CATEGORY,SUB_CATEGORY_ID,VISIBILITY_PRESENT,DISPLAY_ID,DISPLAY,IMAGE1,IMAGE2,REASON,REASON_ID,SHOW_RSN_REMARK,REASON_REMARK,IS_UPDATED,ADDED_DATE) VALUES ${child_values} `; + let add_Checklist=`INSERT INTO ${AppTables.PAID_VIS_CHECKLIST} (COMMON_ID,STORE_ID,VISIT_DATE,SUB_CATEGORY_ID,DISPLAY_ID,CHECKLIST,CHECKLIST_ID,REASON,REASON_ID,ADDED_DATE) VALUES ${checklist_values} `; + + + + await txn.executeSql(add_HdrData,[],async function (txn2, txnres) { + console.log('pv header added'); + await txn.executeSql(add_ChildData,[],async function (txn2, txnres) { + console.log('pv child added'); + if(isChecklistExists){ + await txn.executeSql(add_Checklist,[],async function (txn2, txnres) { + console.log('pv checklist added'); + notify(ST.PaidVisibilityupdatedsuccessfully); + setProcessing(false); + props.navigation.goBack(); + },function (txnE,txnerr) { console.log(txnerr);setProcessing(false);notify(ST.Cannotaddpaidvisibility) },); + } + else{ + notify(ST.PaidVisibilityupdatedsuccessfully); + setProcessing(false); + props.navigation.goBack(); + } + + },function (txnE,txnerr) { console.log(txnerr);setProcessing(false);notify(ST.Cannotaddpaidvisibility) },); + },function (txnE,txnerr) { console.log(txnerr);setProcessing(false);notify(ST.Cannotaddpaidvisibility) },); + }); + } catch (err) { + console.log(err); + } + } + + + async function validate(){ + + let isValid=true; + var i=0,j=0; + + await Promise.all( + brandData.map(async (item,index) => { + if(isValid){ + + let skulist=item.skulist || []; + if(skulist.length>0){ + await Promise.all( + skulist.map(async (skuItem,skuIndex) => { + if(isValid){ + + let skuData=SKUStockData.find(ci=>ci.SubCategoryId==item.SubCategoryId && ci.DisplayId==skuItem.DisplayId) || {}; + let displayCheckList=skuItem['displayCheckList'] || []; + + let showOtherText=skuData.showOtherText!=null?skuData.showOtherText:false; + + let isCamera1EnableIndex=KPIFields.findIndex(i=>i.KPIFieldName=='Camera1Enable') + let isCamera1EnableKPIObj=isCamera1EnableIndex>=0?KPIFields[isCamera1EnableIndex]:{}; + let isCamera1Enable=isCamera1EnableIndex>=0?isCamera1EnableKPIObj['KPIFieldEnable']:true; + + let isCamera2EnableIndex=KPIFields.findIndex(i=>i.KPIFieldName=='Camera2Enable') + let isCamera2EnableKPIObj=isCamera2EnableIndex>=0?KPIFields[isCamera2EnableIndex]:{}; + let isCamera2Enable=isCamera2EnableIndex>=0?isCamera2EnableKPIObj['KPIFieldEnable']:true; + + let isCamera1MandIndex=KPIFields.findIndex(i=>i.KPIFieldName=='Camera1Mandatory') + let isCamera1MandKPIObj=isCamera1MandIndex>=0?KPIFields[isCamera1MandIndex]:{}; + let isCamera1Mand=isCamera1MandIndex>=0?isCamera1MandKPIObj['KPIFieldEnable']:true; + + let isCamera2MandIndex=KPIFields.findIndex(i=>i.KPIFieldName=='Camera2Mandatory') + let isCamera2MandKPIObj=isCamera2MandIndex>=0?KPIFields[isCamera2MandIndex]:{}; + let isCamera2Mand=isCamera2MandIndex>=0?isCamera2MandKPIObj['KPIFieldEnable']:true; + + + + console.log('isCamera1Mand:',isCamera1Mand,',isCamera2Mand:',isCamera2Mand) + + + if(skuData.isPresent!=0 && (skuData.isPresent==null || skuData.isPresent=='')){ + notify(ST.Pleaseselectifvisiblitypresentornotfor+' '+item.SubCategoryName+' '+skuItem.DisplayName,'SHORT'); + isValid=false; + } + else if(skuData.isPresent==0 && (skuData.ReasonId==null || skuData.ReasonId=='')){ + notify(ST.Pleaseselectreasonfor+' '+item.SubCategoryName+' '+skuItem.DisplayName,'SHORT'); + isValid=false; + } + else if(skuData.isPresent==0 && showOtherText==true && ( skuData.RemarkText==null || skuData.RemarkText=='')){ + notify(ST.PleaseEnterRemarkFor+' '+item.SubCategoryName+' '+skuItem.DisplayName,'SHORT'); + isValid=false; + } + else if(skuData.isPresent==1 && (((isCamera1Enable==1 || isCamera1Enable=='true') && (isCamera1Mand==1 || isCamera1Mand=='true') && (skuData.Image1==null || skuData.Image1=='') )|| ((isCamera2Enable==1 || isCamera2Enable=='true') && (isCamera2Mand==1 || isCamera2Mand=='true') && (skuData.Image2==null || skuData.Image2=='')))){ + notify(ST.Pleaseclickallimagesfor+' '+item.SubCategoryName+' '+skuItem.DisplayName,'SHORT'); + isValid=false; + }else if(skuData.isPresent==1){ + if(displayCheckList.length>0){ + await Promise.all( + displayCheckList.map(async (dclistItem,dcIndex) => { + if(isValid){ + const skud_ckecklist=skuData['Checklist'] || []; + let checkedItem=skud_ckecklist.find(c=>c.ChecklistId==dclistItem.ChecklistId) || {}; + + if(checkedItem['AnswerId']!=0 && (checkedItem['AnswerId']==null || checkedItem['AnswerId']=='')){ + isValid=false; + notify(ST.Pleaseselectreasonfor+' '+item.SubCategoryName+' '+skuItem.DisplayName+' '+dclistItem.ChecklistName,'SHORT'); + } + } + }) + ); + } + } + } + }) + ); + } + + + } + }) + ); + + console.log('isValid:',isValid); + return isValid; + } + + function onStockValChange(item,skuItem,val,key,type=''){ + if(val!=''){ + let isValid=validateNumber(val,type); + if(!isValid){ + return; + } + } + + let allSKUData=SKUStockData; + let defData={'SubCategoryId':item.SubCategoryId,'DisplayId':skuItem.DisplayId}; + const skud_index=allSKUData.findIndex(i=>i.SubCategoryId==item.SubCategoryId && i.DisplayId==skuItem.DisplayId); + const skud=skud_index>=0?(allSKUData[skud_index] || defData) : defData; + skud[key]=val; + if(key=='ReasonId'){ + let rsn=reasons_list.find(r=>r.ReasonId==val) || {}; + skud['Reason']=rsn.Reason || ''; + } + skud_index>=0?allSKUData[skud_index]=skud:allSKUData.push(skud); + + setSKUStockData(allSKUData); + setHasUnsavedChanges(true); + setrerenderdata(!rerenderdata); + } + + + + function onChoiceSelect(item,skuItem,val,key,animatedChoice){ + console.log('onChoiceSelect',animatedChoice) + + var val1=0; + if(val==1){ + val1=1; + } + + if(animatedChoice!=null){ + Animated.timing(animatedChoice, { + toValue: val1, + duration:400, + useNativeDriver:false, + }).start(); + } + onStockValChange(item,skuItem,val,key) + } + + function onselectionChange(option,keyLbl,keyVal,otherData){ + let skuItem=otherData.skus,item=otherData.cat; + let allSKUData=SKUStockData; + let defData={'SubCategoryId':item.SubCategoryId,'DisplayId':skuItem.DisplayId}; + const skud_index=allSKUData.findIndex(i=>i.SubCategoryId==item.SubCategoryId && i.DisplayId==skuItem.DisplayId); + const skud=skud_index>=0?(allSKUData[skud_index] || defData) : defData; + skud[keyVal]=option.value; + skud[keyLbl]=option.label; + + + if(keyLbl=='Reason'){ + let rsn_Index=reasons_list.findIndex(i=>i.ReasonId==option.value); + + if(rsn_Index>=0){ + let rsn=reasons_list[rsn_Index]; + let IsRemarkTaken=rsn.IsRemarkTaken==1 || rsn.IsRemarkTaken=='1'?true:false; + console.log('on reason change IsRemarkTaken :',IsRemarkTaken); + if(IsRemarkTaken==true){ + skud['showOtherText']=true; + } + else{ + skud['showOtherText']=false; + } + } + } + + skud_index>=0?allSKUData[skud_index]=skud:allSKUData.push(skud); + console.log('allSKUData:',allSKUData); + setSKUStockData(allSKUData); + setHasUnsavedChanges(true); + setrerenderdata(!rerenderdata); + } + + function onStockCheckListChange(option,keyLbl,keyVal,otherData){ + let skuItem=otherData.skus,item=otherData.cat,dclistItem=otherData.dclist; + let allSKUData=SKUStockData; + let defData={'SubCategoryId':item.SubCategoryId,'DisplayId':skuItem.DisplayId,'Checklist':[]}; + const skud_index=allSKUData.findIndex(i=>i.SubCategoryId==item.SubCategoryId && i.DisplayId==skuItem.DisplayId); + let skud=skud_index>=0?(allSKUData[skud_index] || defData) : defData; + let skud_ckecklist=skud['Checklist'] || []; + let defCheckedItem={"ChecklistId": dclistItem.ChecklistId, "ChecklistName": dclistItem.ChecklistName}; + let checkedItem_index=skud_ckecklist.findIndex(c=>c.ChecklistId==dclistItem.ChecklistId); + let checkedItem=checkedItem_index>=0?(skud_ckecklist[checkedItem_index] || defCheckedItem):defCheckedItem; + + checkedItem['AnswerId']=option.value; + checkedItem['Answer']=option.label; + + + checkedItem_index>=0?skud_ckecklist[checkedItem_index]=checkedItem:skud_ckecklist.push(checkedItem); + skud['Checklist']=skud_ckecklist; + + skud_index>=0?allSKUData[skud]=checkedItem:allSKUData.push(skud); + console.log('allSKUData:',allSKUData); + setSKUStockData(allSKUData); + setHasUnsavedChanges(true); + setrerenderdata(!rerenderdata); + } + + + function openImageRefView(RefImage=''){ + setShow_zoomImage(true); + } + + function FilterStores(searchedQry){ + searchedQry=searchedQry.toLowerCase(); + console.log('searchedQry',searchedQry); + let arr=[]; + var arr2=[]; + if(searchedQry!=null && searchedQry!=''){ + // globalBrandData.map((item,index)=>{ + for(let i=0;i{ + for(let j=0;j0){ + arr.push(arr2); + } + } + } + + + } + } + else{ + arr=globalBrandData; + } + + setBrandData(arr); + setrerenderdata(!rerenderdata) + setrerenderdata2(!rerenderdata2) + } + + function _render_Alert(){ + return ( + + + {setShowAlert(false)}}> + {ST.Cancel} + + {saveData()}}> + {ST.Yes} + + + + ) + } + + function _renderHeader(currentIndex){ + return( + + {/* {`${(currentIndex+1)}/${zoomImageUrl.length}`} */} + {console.log('tsth');setShow_zoomImage(false) }}> + + + + ) + } + + return ( + + {processing && } + + {_render_Alert()} + {setShowCamera(false);getImage(imgData)}} showCamera={showCamera} onHideCamera={()=>{setShowCamera(false);}}/> + + + + + {setSearchedItem(val); FilterStores(val)}} + /> + {FilterStores(searchedItem)}}> + + + + { Object.keys(storeData).length>0 && + { + const cat=item; + const cindex=catImages.findIndex(i=>i.SubCategoryId==item.SubCategoryId); + const cimgName=cindex>=0?(catImages[cindex]?catImages[cindex].ImageName:''):''; + const cimgPath=cindex>=0?(catImages[cindex]?catImages[cindex].ImagePath:''):''; + const showIMg=cimgPath!='' && cimgPath!=null; + return( + + + + {item.SubCategoryName} + + + + + + { + + { + const skus=item; + const sku_index=index; + let thisCatSkuData_i=SKUStockData.findIndex(i=>i.SubCategoryId==cat.SubCategoryId && i.DisplayId==skus.DisplayId); + let thisCatSkuData=thisCatSkuData_i>=0?(SKUStockData[thisCatSkuData_i] || {}):{}; + let ReasonId=thisCatSkuData.ReasonId!=null?thisCatSkuData.ReasonId:''; + let Reason=thisCatSkuData.Reason!=null?thisCatSkuData.Reason:''; + let isPresent=thisCatSkuData.isPresent!=null?thisCatSkuData.isPresent:'0'; + let showOtherText=thisCatSkuData.showOtherText!=null?thisCatSkuData.showOtherText:false; + let RemarkText=thisCatSkuData.RemarkText!=null?thisCatSkuData.RemarkText:''; + let Image1=(thisCatSkuData.Image1!=null && thisCatSkuData.Image1!='')?'file://'+`${ImageFolderPath+currentMenu.ScreenName}/`+thisCatSkuData.Image1:''; + let Image2=(thisCatSkuData.Image2!=null && thisCatSkuData.Image2!='')?'file://'+`${ImageFolderPath+currentMenu.ScreenName}/`+thisCatSkuData.Image2:''; + let RefImage=skus.RefImage; + let displayCheckList=item.displayCheckList || []; + + let isCamera1EnableIndex=KPIFields.findIndex(i=>i.KPIFieldName=='Camera1Enable') + let isCamera1EnableKPIObj=isCamera1EnableIndex>=0?KPIFields[isCamera1EnableIndex]:{}; + let isCamera1Enable=isCamera1EnableIndex>=0?isCamera1EnableKPIObj['KPIFieldEnable']:true; + + let isCamera2EnableIndex=KPIFields.findIndex(i=>i.KPIFieldName=='Camera2Enable') + let isCamera2EnableKPIObj=isCamera2EnableIndex>=0?KPIFields[isCamera2EnableIndex]:{}; + let isCamera2Enable=isCamera2EnableIndex>=0?isCamera2EnableKPIObj['KPIFieldEnable']:true; + + + var xpos=isPresent==1?-75:0; + if(skus.animatedChoice!=null ){ + xpos=skus.animatedChoice.interpolate({ + inputRange:[0,1], + outputRange:[0,-75], + }); + } + + + return( + + {skus.DisplayName} + + + + + + {ST.IsPresent} + + + + + {onChoiceSelect(cat,skus,1,'isPresent',skus.animatedChoice)}}> + {ST.Yes} + + {onChoiceSelect(cat,skus,0,'isPresent',skus.animatedChoice)}}> + {ST.No} + + + + + {isPresent!='1' && + + {ST.SelectReason} + {} + + } + {isPresent!='1' && showOtherText==true && + + {ST.EnterRemark} + { onStockValChange(cat,skus,val,'RemarkText','text')}} + /> + + } + {(isPresent=='1' && displayCheckList.length>0) && + displayCheckList.map((dclist_Item,dclist_index)=>{ + const dclist=dclist_Item; + + const skud=SKUStockData.find(ci=>ci.SubCategoryId==cat.SubCategoryId && ci.DisplayId==skus.DisplayId) || {}; + const skud_ckecklist=skud['Checklist'] || []; + let checkedItem=skud_ckecklist.find(c=>c.ChecklistId==dclist.ChecklistId) || {}; + + let dclist_answerid=checkedItem['AnswerId'] || '0'; + let dclist_answer=checkedItem['Answer'] || ''; + const dclist_options=[{'dcItem':'No','dcItemId':'0'},{'dcItem':'Yes','dcItemId':'1'}]; + return( + + {dclist.ChecklistName} + {} + + ); + }) + + } + {(isPresent=='1' && ( (isCamera1Enable=='true' || isCamera1Enable==1) || (isCamera2Enable=='true' || isCamera2Enable==1) )) && + + {ST.CaptureImage} + + { (isCamera1Enable=='true' || isCamera1Enable==1) && + + { (Image1=='' || Image1==null) && + {openCamera(cat,skus,'1')}}> + + + } + { (Image1!='' && Image1!=null) && + + + {openCamera(cat,skus,'1')}}> + + + + } + + } + { (isCamera2Enable=='true' || isCamera2Enable==1) && + + { (Image2=='' || Image2==null) && + {openCamera(cat,skus,'2')}}> + + + } + { (Image2!='' && Image2!=null) && + + + {openCamera(cat,skus,'2')}}> + + + + } + + } + + + + } + + + + + {openImageRefView(RefImage)}}> + + + + ) + }}/> + } + + + ); + }} + /> + } + + {submitOpeningStock()}}/> + + + + + {show_zoomImage && + + null} + /> + + } + + ); +} + + + +export default connect(mapStateToProps, mapDispatchToProps)(PaidVisibility); \ No newline at end of file diff --git a/PerformicsSrc/src/screens/PaidVisibility2.js b/PerformicsSrc/src/screens/PaidVisibility2.js new file mode 100644 index 0000000..85324b7 --- /dev/null +++ b/PerformicsSrc/src/screens/PaidVisibility2.js @@ -0,0 +1,1799 @@ +import React, { useState, useEffect, useRef } from 'react'; +import Container from '../components/container'; +import { useRoute } from '@react-navigation/native'; +import { globalStyles, customStyles, GetPageTheme } from "../styles/Global"; +import { StatusBar, Image, TextInput, View, Text, ScrollView, TouchableOpacity, Platform, PermissionsAndroid, FlatList, Alert, Animated } from 'react-native'; +import { ReactReduxContext, connect, useSelector, useDispatch } from 'react-redux'; +import { mapStateToProps, mapDispatchToProps } from '../reducers/contextProvider'; +import { notify } from '../components/notify'; +import moment from 'moment'; +import { getDownloadJson, marktext1, marktext2 } from '../controller/functions'; +import { get_item, set_item, clear_item } from '../components/localStorage'; +import { version, sloganline, appname, testurl, db, colors_Arr, common_ImagePath, ImageFolderPath } from '../constants/constants'; +import CustomHeader from '../components/customHeader'; +import { AntDesign, Entypo, FontAwesome, Fontisto, MaterialCommunityIcons } from '../components/icons'; +import CustomLoader from '../components/CustomLoader'; +import LinearGradient from 'react-native-linear-gradient'; +import { AppTables } from '../constants/tableConstants'; +import { SvgXml } from 'react-native-svg'; +import * as RNFS from 'react-native-fs'; +import GradientButton from '../components/gradientButton'; +import { ConfirmSaveAlert } from '../components/alert'; +import ModalSelector from 'react-native-modal-selector' +import { CustomPicker, CustomPicker2 } from '../components/CustomPicker'; +import CustomCamera from '../components/Camera'; +import ImageViewer from 'react-native-image-zoom-viewer'; +import DateTimePicker from '@react-native-community/datetimepicker'; + + +import CameraImg from '../assets/performics/camera_front_image.svg' +import MultiSelect from 'react-native-multiple-select'; + +function PaidVisibility(props) { + const route = useRoute(); + + // get all theme styles acc to current theme set + const PageTheme = GetPageTheme(props.DarkMode, route.name); + const customStyle = customStyles(props.DarkMode, route.name); + const animatedChoice = useRef(new Animated.Value(0)).current; + + const [processing, setProcessing] = useState(true); + const [loaderTitle, setLoaderTitle] = useState('loading...'); + const [isAdhocScreen, setIsAdhocScreen] = useState(false); + const [storeData, setStoreData] = useState({}); + const [currentMenu, setCurrentMenu] = useState({}); + const [rerenderdata, setrerenderdata] = useState(0); + const [rerenderdata2, setrerenderdata2] = useState(0); + const [rerenderdata3, setrerenderdata3] = useState(0); + const [rerenderdata4, setrerenderdata4] = useState(0); + + const [hasUnsavedChanges, setHasUnsavedChanges] = useState(false); + + const [WindowData, setWindowData] = useState([]); + const [reasons_list, setReasons_list] = useState([]); + const [Windows, setWindows] = useState([]); + const [show_zoomImage, setShow_zoomImage] = useState(false); + const [showAlert, setShowAlert] = useState(false); + const [zoomImageUrl, setZoomImageUrl] = useState([]); + const [showCamera, setShowCamera] = useState(false); + const [getImageProps, setGetImageProps] = useState({}); + const zoomView = useRef(null); + const [showRating, setShowRating] = useState(false); + const [RatingQtn, setRatingQtn] = useState({}); + const [RatingWindow, setRatingWindow] = useState({}); + const [RatingOrder, setRatingOrder] = useState([]); + + const [Products, setProducts] = useState([]); + const [DisplayList, setDisplayList] = useState([]); + const [toRemoveId, setToRemoveId] = useState(''); + const [toRemoveItem, setToRemoveItem] = useState({}); + const [showRemoveConfirm_M, setshowRemoveConfirm_M] = useState(false); + const [showRAllC_M, setShowRAllC_M] = useState(false); + + const d1 = new Date(); + const d2 = moment(d1).format('MM/DD/YYYY'); + + + useEffect(() => { + let params = props.route.params ? props.route.params : {}; + let storeData1 = params.storeData || {}; + let menu1 = params.menu || {}; + + let isAdhoc = params.isAdhoc || false; + setIsAdhocScreen(isAdhoc); + setStoreData(storeData1); + setCurrentMenu(menu1); + + getData(storeData1, menu1); + + const unsubscribe = props.navigation.addListener('beforeRemove', onBeforeRemove); + + return function cleanup() { + return unsubscribe; + }; + }, []); + + useEffect(() => { + const unsubscribe = props.navigation.addListener('beforeRemove', onBeforeRemove); + return unsubscribe; + }, [hasUnsavedChanges]); + + useEffect(() => { + const unsubscribe = props.navigation.addListener('beforeRemove', onBeforeRemove); + return unsubscribe; + }, [showCamera]); + + function onBeforeRemove(e) { + if (showCamera == true) { + e.preventDefault(); + setShowCamera(false); + } + else { + if (hasUnsavedChanges == true) { + e.preventDefault(); // Prevent default behavior of leaving the screen + onRemoveScreen(e); + } + else { + return; + } + } + } + function onRemoveScreen(e) { + Alert.alert( + "", + "Do you really want to exit the screen?", + [ + { + text: "Cancel", + onPress: () => { }, + style: "cancel" + }, + { text: "OK", onPress: () => { setHasUnsavedChanges(false); props.navigation.dispatch(e.data.action); } } + ] + ); + } + + + async function getData(storeData1, menu1) { + try { + let { StoreId, ChainId, StateId, StoreTypeId } = storeData1; + + await db.transaction(async function (txn) { + + + let q3 = `Select * From Master_NonVisibility`; + await txn.executeSql(q3, [], async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + let arr = []; + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + arr.push(data); + if (i == txnres2.rows.length - 1) { + setReasons_list(arr); + } + } + } + }, function (txnE, txnerr) { console.log(txnerr); },); + + // check if data exists + let selectlist = ` w.STORE_ID as StoreId,w.WINDOW_HEADER_ID as windowHeaderId,wd.WindowDefinitionId,wd.WindowId,wd.WindowName,wd.WindowTable,wd.WindowField,wd.WindowValue,wd.ChildName,wd.WindowRefImage,wd.WindowElementCheckAssortment,wd.WindowElementStockRequired,w.IS_PRESENT as IsPresent,wd.WindowNotExistCamera,w.WINDOW_NA_IMAGE as WindowNAImage,wd.WindowExistReasonEnable,wd.WindowNotExistReasonEnable,w.REASON_ID as ReasonId,w.REASON as Reason,wd.NoOfSplit,wd.WindowImage1,wd.WindowImage2,wd.WindowImage1Lable,wd.WindowImage2Lable,wd.WindowImage1CameraGrid,wd.WindowImage2CameraGrid`; + let join = ` inner join Master_WindowDefinition wd on w.WINDOW_DEFINITION_ID=wd.WindowDefinitionId `; + let q = ` Select ${selectlist} from ${AppTables.WINDOW_HDR_DATA} w ${join} where w.STORE_ID='${StoreId}' `; + + // else pick data from masters + let selectlist2 = ` s.StoreId,w.WindowDefinitionId,w.WindowId,w.WindowName,w.WindowTable,w.WindowField,w.WindowValue,w.ChildName,w.WindowRefImage,w.WindowElementCheckAssortment,w.WindowElementStockRequired,'' as IsPresent,w.WindowNotExistCamera,'' as WindowNAImage,w.WindowExistReasonEnable,w.WindowNotExistReasonEnable,'' as ReasonId,'' as Reason,w.NoOfSplit,w.WindowImage1,w.WindowImage2,w.WindowImage1Lable,w.WindowImage2Lable,w.WindowImage1CameraGrid,w.WindowImage2CameraGrid`; + let join2 = ` inner join Mapping_StoreWindow s on w.WindowDefinitionId=s.WindowDefinitionId `; + let q2 = ` Select ${selectlist2} from Master_WindowDefinition w ${join2} where s.StoreId='${StoreId}' `; + + await txn.executeSql(q, [], async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + let arr = []; let images = [], allWindowsData = []; + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + let animatedChoice = new Animated.Value((data.IsPresent == '1' || data.IsPresent == 1 ? 1 : 0)); + data.animatedChoice = animatedChoice; + data.NoOfSplit = parseInt(data.NoOfSplit); + + let NoOfSplit = data.NoOfSplit; + let isPresent = data.IsPresent == '1' || data.IsPresent == 1 ? 1 : 0; + let isStockReq = data.WindowElementStockRequired == 'true' || data.WindowElementStockRequired == 1 ? 1 : 0; + let imgObj = { imgIndex: (i + 1), url: data.WindowRefImage, props: {} } + let WindowSplits = await getWindowSplits(NoOfSplit, data, storeData1, menu1); + let WQr = await getWindowQuestions(data, storeData1, isPresent, menu1); + let WindowQuestions = WQr['WindowQuestions'] || []; + let WindowQA = WQr['WindowQA'] || {}; + let WSd = isStockReq == true ? await getWindowStockData(data, storeData1, isPresent) : { 'WStocks': [], 'WStocksData': [] }; + let WStocks = WSd['WStocks'] || []; + let WStocksData = WSd['WStocksData'] || []; + + let isNAImageAvl = data.WindowNotExistCamera == 'true' || data.WindowNotExistCamera == 1 ? 1 : 0; + let NAImage1 = isNAImageAvl == 1 && data.WindowNAImage != null ? data.WindowNAImage : ''; + let NAImage1Path = NAImage1 != '' ? 'file://' + ImageFolderPath + menu1.ScreenName + "/" + NAImage1 : ''; + + + let windowDataObj = { 'WindowId': data.WindowId, 'WindowDefinitionId': data.WindowDefinitionId, 'WindowSplits': WindowSplits, 'WindowQA': WindowQA, 'WStocksData': WStocksData, 'NAImage1': NAImage1, 'NAImage1Path': NAImage1Path, 'ReasonId': data.ReasonId, 'Reason': data.Reason, 'isPresent': isPresent }; + data['WindowQuestions'] = WindowQuestions; + data['WindowStocks'] = WStocks; + arr.push(data); + + allWindowsData.push(windowDataObj); + if (i == txnres2.rows.length - 1) { + setWindowData(allWindowsData); + setWindows(arr); + images.push(imgObj); + setZoomImageUrl(images); + setProcessing(false); + } + } + } + else { + await txn.executeSql(q2, [], async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + let arr = [], images = [], allWindowsData = []; + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + let animatedChoice = new Animated.Value(0); + data.animatedChoice = animatedChoice; + data.NoOfSplit = parseInt(data.NoOfSplit); + + let imgObj = { imgIndex: (i + 1), url: data.WindowRefImage, props: {} } + let WindowSplits = []; + for (var s = 0; s < data.NoOfSplit; s++) { + let obj = { 'Image1Name': '', 'Image1': '', 'Image2Name': '', 'Image2': '' }; + WindowSplits.push(obj); + } + let WQr = await getWindowQuestions(data, storeData1, false, menu1); + let WindowQuestions = WQr['WindowQuestions'] || []; + let WindowQA = WQr['WindowQA'] || {}; + let WSd = await getWindowStockData(data, storeData1, false); + let WStocks = WSd['WStocks'] || []; + let WStocksData = WSd['WStocksData'] || []; + + let windowDataObj = { 'WindowId': data.WindowId, 'WindowDefinitionId': data.WindowDefinitionId, 'WindowSplits': WindowSplits, 'WindowQA': WindowQA, 'WStocksData': WStocksData }; + data['WindowQuestions'] = WindowQuestions; + data['WindowStocks'] = WStocks; + + arr.push(data); + allWindowsData.push(windowDataObj); + if (i == txnres2.rows.length - 1) { + setWindowData(allWindowsData); + setWindows(arr); + images.push(imgObj); + setZoomImageUrl(images); + setProcessing(false); + } + } + } + else { + setProcessing(false); + } + }, function (txnE, txnerr) { console.log(txnerr); setProcessing(false); },); + } + }, function (txnE, txnerr) { console.log(txnerr); setProcessing(false); },); + + }); + } catch (err) { + console.log(err); + } + } + + async function getWindowSplits(NoOfSplit, window, storeData1, menu1) { + let WindowSplits_def = []; + for (var s = 0; s < NoOfSplit; s++) { + let obj = { 'Image1Name': '', 'Image1': '', 'Image2Name': '', 'Image2': '' }; + WindowSplits_def.push(obj); + } + return new Promise((resolve, reject) => { + + db.transaction(async function (txn) { + + let q = `select * from ${AppTables.WINDOW_IMAGES} where WINDOW_HEADER_ID='${window.windowHeaderId}' and STORE_ID='${storeData1.StoreId}' `; + + await txn.executeSql(q, [], async function (txn2, txnres2) { + + if (txnres2.rows.length > 0) { + let arr = []; + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + console.log(data.WINDOW_HEADER_ID) + let isImage1 = window.WindowImage1 == 'true' || window.WindowImage1 == 1 ? 1 : 0; + let isImage2 = window.WindowImage2 == 'true' || window.WindowImage2 == 1 ? 1 : 0; + + let Image1 = isImage1 == 1 && data.IMAGE1 != null && data.IMAGE1 != '' ? 'file://' + ImageFolderPath + menu1.ScreenName + "/" + data.IMAGE1 : ''; + let Image2 = isImage2 == 1 && data.IMAGE2 != null && data.IMAGE2 != '' ? 'file://' + ImageFolderPath + menu1.ScreenName + "/" + data.IMAGE2 : ''; + let obj = { 'Image1Name': data.IMAGE1, 'Image1': Image1, 'Image2Name': data.IMAGE2, 'Image2': Image2 }; + arr.push(obj); + + if (i == txnres2.rows.length - 1) { + resolve(arr) + } + } + } + else { + resolve(WindowSplits_def) + } + }, function (txnE, txnerr) { console.log(txnerr); resolve(WindowSplits_def) },); + }); + }).then((val) => { + return val + }).catch((err) => { + console.log(err); + return WindowSplits_def; + }); + } + + async function getWindowQuestions(window, storeData1, isInserted = false, menu1) { + let obj = { 'WindowQA': {}, 'WindowQuestions': [] } + return new Promise((resolve, reject) => { + + db.transaction(async function (txn) { + var q = '', selectlist = '', join = '', join2 = ''; + if (isInserted == true) { + selectlist = ` DISTINCT q.QUESTION_ID as WindowQuestionId,q.QUESTION_CODE as WindowQuestionCode,wq.WindowQuestionName,wq.QuestionType,wq.WQShowCamera,wq.WQCameraMandatory,wq.WQLengthValidationRequired,wq.WQMinimumChar,wq.WQMaximumChar,wq.WQDecimalPoint,wq.WQDateRangeMin,wq.WQDateRangeMax,wq.WQVoiceLengthInMinutes,wq.WQDefaultQuestionEnable,q.ANSWER as Answer,q.ANSWER_ID as AnswerId,q.MULTI_OPTIONS_IDS as multi_op_ids,q.IMAGE_ALLOW1 as WAShowCamera,q.IMAGE1 as Image1 `; + join2 = ` inner join Mapping_WindowQuestion mq on mq.WindowQuestionId=wq.WindowQuestionId `; + join = ` inner join Master_WindowQuestion wq on wq.WindowQuestionId=q.QUESTION_ID `; + q = `select ${selectlist} from ${AppTables.WINDOW_CHILD_DATA} q ${join} ${join2} where q.STORE_ID='${storeData1.StoreId}' and q.WINDOW_DEFINITION_ID='${window.WindowDefinitionId}' and q.WINDOW_ID='${window.WindowId}' order by wq.WindowQuestionSequence `; + } + else { + selectlist = ` DISTINCT wq.WindowQuestionId,wq.WindowQuestionCode,wq.WindowQuestionName,wq.QuestionType,wq.WQShowCamera,wq.WQCameraMandatory,wq.WQLengthValidationRequired,wq.WQMinimumChar,wq.WQMaximumChar,wq.WQDecimalPoint,wq.WQDateRangeMin,wq.WQDateRangeMax,wq.WQVoiceLengthInMinutes,wq.WQDefaultQuestionEnable `; + join = ` inner join Mapping_WindowQuestion mq on mq.WindowQuestionId=wq.WindowQuestionId `; + q = `select ${selectlist} from Master_WindowQuestion wq ${join} where mq.WindowDefinitionId='${window.WindowDefinitionId}' order by wq.WindowQuestionSequence `; + } + + await txn.executeSql(q, [], async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + let arr = []; + let wqa_obj = {}; + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + let answers = []; + data.WQDefaultQuestionEnable = data.WQDefaultQuestionEnable == 1 || data.WQDefaultQuestionEnable == 'true' ? true : false; + + if (data.QuestionType == 'Multi choice list' || data.QuestionType == 'Single choice list' || data.QuestionType == 'Rating') { + answers = await getWindowAnswers(data); + if (data.QuestionType == 'Rating') { + data.showRating = false; + } + } + else if (data.QuestionType == 'Date') { + data.showDatePicker = false; + } + data['Answers'] = answers; + + let id_key = data.WindowQuestionId + '_AnswerId'; + let ans_key = data.WindowQuestionId + '_Answer'; + let multi_key = data.WindowQuestionId + '_MultiOption'; + let date_key = data.WindowQuestionId + '_Date'; + let img_key = data.WindowQuestionId + '_ImagePath1'; + let imgname_key = data.WindowQuestionId + '_ImageName1'; + let rating_key = data.WindowQuestionId + '_Rating'; + + + let showImageTag = (data.WQShowCamera == 'true' || data.WQShowCamera == 1); + + data.AnswerId != null ? wqa_obj[id_key] = data.AnswerId : ''; + data.Answer != null ? wqa_obj[ans_key] = data.Answer : ''; + + + let selansid = data.AnswerId != null ? data.AnswerId : ''; + if (data.QuestionType == 'Multi choice list' && selansid != '' && data.multi_op_ids != null) { + selansid = data.multi_op_ids ? data.multi_op_ids.split(',') : []; + wqa_obj[multi_key] = data.multi_op_ids; + } + + if ((data.QuestionType == 'Single choice list' || data.QuestionType == 'Multi choice list') && selansid != '' && selansid != null) { + if (data.Answers && data.Answers.length > 0) { + for (var k = 0; k < data.Answers.length; k++) { + let ansss = data.Answers[k]; + let isandImgAl = (ansss.WAShowCamera == 1 || ansss.WAShowCamera == 'true'); + if (data.QuestionType == 'Single choice list' && (isandImgAl && ansss.AnswerId == selansid)) { + showImageTag = true; + } + else if (data.QuestionType == 'Multi choice list' && (isandImgAl && selansid.indexOf(ansss.AnswerId) >= 0)) { + showImageTag = true; + } + } + } + } + + if (showImageTag && data.Answer != null) { + let imgPath = (Platform.OS == 'ios' ? 'file://' : '') + ImageFolderPath + menu1.ScreenName + "/" + data.Image1; + wqa_obj[imgname_key] = data.Image1; + wqa_obj[img_key] = imgPath; + } + + + + if (data.QuestionType == 'Date' && data.Answer != null) { + let dayonly = moment().format('DD'); + let actual_date = data.Answer ? data.Answer.split('/') : []; + let month = actual_date[0], year = actual_date[1]; + let fulldate = month + '/' + dayonly + '/' + year; + wqa_obj[date_key] = fulldate; + + } + + arr.push(data); + if (i == txnres2.rows.length - 1) { + obj['WindowQuestions'] = arr; + obj['WindowQA'] = wqa_obj; + resolve(obj) + } + } + } + else { + resolve(obj) + } + }, function (txnE, txnerr) { console.log(txnerr); resolve(obj) },); + }); + }).then((val) => { + return val + }).catch((err) => { + console.log(err); + return obj; + }); + } + + + async function getWindowAnswers(qtn) { + + return new Promise((resolve, reject) => { + + db.transaction(async function (txn) { + var q = '', selectlist = ''; + selectlist = ` DISTINCT WindowAnswerId as AnswerId,WindowAnswerName as Answer,WAShowCamera,WACameraMandatory,WAQuestionEnable,WAQuestionDisable `; + q = `select ${selectlist} from Master_WindowQuestion where WindowQuestionId='${qtn.WindowQuestionId}' order by WASequence `; + + await txn.executeSql(q, [], async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + let arr = []; + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + arr.push(data); + if (i == txnres2.rows.length - 1) { + resolve(arr) + } + } + } + else { + resolve([]) + } + }, function (txnE, txnerr) { console.log(txnerr); resolve([]) },); + }); + }).then((val) => { + return val + }).catch((err) => { + console.log(err); + return []; + }); + } + + async function getWindowStockData(window, storeData1, isInserted = false) { + let obj = { 'WStocks': [], 'WStocksData': [] } + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + var q = '', selectlist = '', join = ''; + let checkassrt = window.WindowElementCheckAssortment == 'true' || window.WindowElementCheckAssortment == 1 ? true : false; + + if (isInserted == true) { + if (checkassrt) { + join = ` inner join Mapping_ProductAssortmentStorewise a on a.ProductId=s.WINDOW_STOCK_VALUE and a.StoreId='${storeData1.StoreId}'`; + } + selectlist = ` s.WINDOW_STOCK_DEFINITION_ID as WindowStockDefinitionId, s.WINDOW_DEFINITION_ID as WindowDefinitionId,s.WINDOW_STOCK_TABLE as WindowStockTable,s.WINDOW_STOCK_FIELD as WindowStockField,s.WINDOW_STOCK_VALUE as WindowStockValue,s.WINDOW_STOCK_MBQ as WindowStockMBQ,s.PRODUCT_NAME as ProductName, s.STOCK as Stock `; + q = `select ${selectlist} from ${AppTables.WINDOW_STOCK_DATA} s ${join} where s.WINDOW_DEFINITION_ID='${window.WindowDefinitionId}' and s.STORE_ID='${storeData1.StoreId}' `; + } else { + if (checkassrt) { + join = ` inner join Mapping_ProductAssortmentStorewise a on a.ProductId=s.WindowStockValue and a.StoreId='${storeData1.StoreId}'`; + } + selectlist = ` s.WindowStockDefinitionId, s.WindowDefinitionId,s.WindowStockTable,s.WindowStockField,s.WindowStockValue,s.WindowStockMBQ,s.ProductName `; + q = `select ${selectlist} from Master_WindowStockDefinition s ${join} where s.WindowDefinitionId='${window.WindowDefinitionId}' `; + } + if (checkassrt) { + q += ` and a.StoreId='${storeData1.StoreId}' `; + } + q += isInserted ? ` order by s.PRODUCT_NAME ` : ` order by s.ProductName `; + + + + await txn.executeSql(q, [], async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + let arr = [], WStocksData = []; + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + if (isInserted == true && data.Stock != null) { + + let stockData_obj = { 'ProductId': data.WindowStockValue, 'Stock': data.Stock } + WStocksData.push(stockData_obj); + } + arr.push(data); + if (i == txnres2.rows.length - 1) { + obj['WStocks'] = arr; + obj['WStocksData'] = WStocksData; + resolve(obj) + } + } + } + else { + resolve(obj) + } + }, function (txnE, txnerr) { console.log(txnerr); resolve(obj) },); + }); + }).then((val) => { + return val + }).catch((err) => { + console.log(err); + return obj; + }); + } + + + + + + async function getImage(imgdata) { + let type = getImageProps.type || ''; + let window = getImageProps.window || {}; + let splitItem = getImageProps.splitItem || {}; + let splitItemIndex = getImageProps.splitItemIndex || 0; + let qtn = getImageProps.qtn || {}; + let cameraType = getImageProps.cameraType != null ? getImageProps.cameraType : '1'; + + if (typeof imgdata == 'object' && imgdata.errorCode == 'camera_unavailable') { + notify('Camera unavailable'); + } + else if (typeof imgdata == 'object' && imgdata.uri != null) { + const img = imgdata; + const imgurl = img.uri, imgWidth = img.width, imgHeight = img.height; + let isImgFromGallery = img.fromGallery != null ? img.fromGallery : false; + let picture_clickedd = isImgFromGallery == true ? img.datetime : new Date(); + + let picture_clicked_time = moment(picture_clickedd).format('MM-DD-YYYY HH:mm:ss') + let picture_clicked_time_for_pic_name = moment(picture_clickedd).format('MMDDYYYY_HHmmss') + + console.log("time", picture_clicked_time); + console.log("time1", picture_clicked_time_for_pic_name); + let calculate_tym_date_for_filename = picture_clicked_time_for_pic_name; + let calculate_tym_date_over_img = picture_clicked_time; + + const mark_text1 = calculate_tym_date_over_img; + const mark_text2 = 'Store Name:' + storeData.StoreName + ' | Store Id:' + storeData.StoreId + ' | User Id:' + storeData.EmpId + ' | Image Type: Window' + ' | Date:' + calculate_tym_date_over_img; + + await marktext1(mark_text1, imgurl) + .then((res) => { + if (res.success) { + let uri = res.uri; + marktext2(mark_text2, uri, imgWidth, imgHeight) + .then((res) => { + if (res.success) { + let filename = storeData.StoreId + '_' + window.WindowDefinitionId + '_' + window.WindowId + '_' + (props.UserId || '') + '_WindowImg-' + calculate_tym_date_for_filename + '.jpg'; + let allData = WindowData; + let defData = { 'WindowId': window.WindowId, 'WindowDefinitionId': window.WindowDefinitionId }; + const wind_index = allData.findIndex(i => i.WindowId == window.WindowId && i.WindowDefinitionId == window.WindowDefinitionId); + let wind = wind_index >= 0 ? allData[wind_index] : defData; + + if (cameraType == '2') { + var QD = wind.WindowQA || {}; + var image_key = qtn.WindowQuestionId + '_ImageName1'; + var image_key_path = qtn.WindowQuestionId + '_ImagePath1'; + QD[image_key] = filename; + } + else if (cameraType == '3') { + var image_key = 'NAImage1'; + var image_key_path = 'NAImage1Path'; + wind[image_key] = filename; + } + else { + var WindowSplits = wind.WindowSplits || []; + var image_key = type == '1' ? 'Image1Name' : 'Image2Name'; + var image_key_path = type == '1' ? 'Image1' : 'Image2'; + splitItem[image_key] = filename; + } + // renamefile + let imagePath = `${ImageFolderPath + currentMenu.ScreenName}/${filename}`;; + RNFS.copyFile(res.uri, imagePath) + .then(resn => { + let uri = 'file://' + imagePath; + console.log('image marker:', uri); + + if (cameraType == '2') { + QD[image_key_path] = uri; + wind.WindowQA = QD; + wind_index >= 0 ? allData[wind_index] = wind : allData.push(wind); + setWindowData(allData); + setHasUnsavedChanges(true); + setrerenderdata3(!rerenderdata3); + } + else if (cameraType == '3') { + wind[image_key_path] = uri; + wind_index >= 0 ? allData[wind_index] = wind : allData.push(wind); + setWindowData(allData); + setHasUnsavedChanges(true); + setrerenderdata(!rerenderdata); + } + else { + console.log('split image updated'); + splitItem[image_key_path] = uri; + splitItemIndex >= 0 ? WindowSplits[splitItemIndex] = splitItem : WindowSplits.push(splitItem); + wind.WindowSplits = WindowSplits; + wind_index >= 0 ? allData[wind_index] = wind : allData.push(wind); + setWindowData(allData); + setHasUnsavedChanges(true); + setrerenderdata2(!rerenderdata2); + } + + + + }) + .catch(err => { + console.log('ERROR: image file write failed!!!'); + console.log(err.message, err.code); + }); + + } + else { + if (res.imagenotfound) { + notify('Please capture a image'); + } + else { + notify(res.error); + } + } + }); + } + else { + if (res.imagenotfound) { + notify('Please capture a image'); + } + else { + notify(res.error); + } + } + }); + } + } + + async function openCamera(window, splitItem, splitItemIndex, type = '1', cameraType = '1', qtn = {}) { + setGetImageProps({ 'window': window, 'splitItem': splitItem, 'splitItemIndex': splitItemIndex, 'type': type, 'cameraType': cameraType, 'qtn': qtn }); + setShowCamera(true); + // props.navigation.navigate('CameraScreen',{'getImage':getImage,'cameraType':'back'}) + } + + + async function onSubmitData() { + let isvalid = await validate(); + if (isvalid) { + setShowAlert(true); + } + } + + async function saveData() { + setHasUnsavedChanges(false); + setShowAlert(false); + setLoaderTitle('Saving Data...'); + setProcessing(true); + let d1n = new Date(); + let d3 = moment(d1n).format('MM/DD/YYYY'); + try { + let { StoreId, ChainId, StateId, StoreTypeId } = storeData; + await db.transaction(async function (txn) { + + // remove old data + await txn.executeSql(`DELETE FROM ${AppTables.WINDOW_HDR_DATA} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' `, [], async function (txn2, txnres) { + console.log('window hdr data deleted'); + }, function (txnE, txnerr) { console.log(txnerr); },); + await txn.executeSql(`DELETE FROM ${AppTables.WINDOW_CHILD_DATA} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' `, [], async function (txn2, txnres) { + console.log('window child data deleted'); + }, function (txnE, txnerr) { console.log(txnerr); },); + await txn.executeSql(`DELETE FROM ${AppTables.WINDOW_IMAGES} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' `, [], async function (txn2, txnres) { + console.log('window images data deleted'); + }, function (txnE, txnerr) { console.log(txnerr); },); + await txn.executeSql(`DELETE FROM ${AppTables.WINDOW_STOCK_DATA} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' `, [], async function (txn2, txnres) { + console.log('window stock data deleted'); + }, function (txnE, txnerr) { console.log(txnerr); },); + + // add data + var values = '', childV = '', imageV = '', stockV = ''; + + for (const wi in Windows) { + const window = Windows[wi]; + let isImage1 = window.WindowImage1 == 'true' || window.WindowImage1 == 1 ? 1 : 0; + let isImage2 = window.WindowImage2 == 'true' || window.WindowImage2 == 1 ? 1 : 0; + let isNAImageAvl = window.WindowNotExistCamera == 'true' || window.WindowNotExistCamera == 1 ? 1 : 0; + let isNAReasonEnable = window.WindowNotExistReasonEnable == 'true' || window.WindowNotExistReasonEnable == 1 ? 1 : 0; + let isReasonEnable = window.WindowExistReasonEnable == 'true' || window.WindowExistReasonEnable == 1 ? 1 : 0; + let isStockReq = window.WindowElementStockRequired == 'true' || window.WindowElementStockRequired == 1 ? 1 : 0; + let WindowQuestions = window.WindowQuestions || []; + let WindowStocks = window.WindowStocks || []; + + + const wind = WindowData.find(i => i.WindowId == window.WindowId && i.WindowDefinitionId == window.WindowDefinitionId); + let isPresent = wind.isPresent != null && wind.isPresent != '' ? wind.isPresent : '0'; + let ReasonId = wind.ReasonId != null ? wind.ReasonId : 0; + let Reason = wind.Reason != null ? wind.Reason : ''; + let NAImage1 = wind.NAImage1 != null ? wind.NAImage1 : ''; + let NAImage1Path = wind.NAImage1Path != null ? wind.NAImage1Path : ''; + let WindowSplits = wind.WindowSplits || []; + let QD = wind.WindowQA || {}; + let WStocksData = wind.WStocksData || []; + + let WINDOW_HEADER_ID = 'WIND' + wi + (Math.floor(Math.random() * 1000) + 1); + let { WindowDefinitionId, WindowId, WindowName, WindowTable, WindowField, WindowValue, ChildName } = window; + + + values += values != '' ? ' , ' : ''; + values += ` ('${WINDOW_HEADER_ID}','${StoreId}','${d3}','${WindowDefinitionId}','${WindowId}','${WindowName}','${WindowTable}','${WindowField}','${WindowValue}','${ChildName}','${isPresent}','${NAImage1}','${ReasonId}','${Reason}','${d3}') `; + + if (isPresent == 1) { + for (const qtnIndex in WindowQuestions) { + const qtn = WindowQuestions[qtnIndex]; + + let selansid = '', selanswer = '', selimg = '', showImageTag = false; + let id_key = qtn.WindowQuestionId + '_AnswerId'; + let ans_key = qtn.WindowQuestionId + '_Answer'; + let multi_key = qtn.WindowQuestionId + '_MultiOption'; + let date_key = qtn.WindowQuestionId + '_Date'; + let img_key = qtn.WindowQuestionId + '_ImagePath1'; + let imgname_key = qtn.WindowQuestionId + '_ImageName1'; + let rating_key = qtn.WindowQuestionId + '_Rating'; + let list_mcdata = []; + + let { WindowQuestionId, WindowQuestionCode, QuestionType, WAShowCamera } = qtn + let answer = QD[ans_key] || 0; + let answerId = QD[id_key] || ''; + let multi_options_ids = QD[multi_key] || ''; + let isImage1All = WAShowCamera == 'true' || WAShowCamera == 1 ? 1 : 0; + let Image1 = isImage1All == 1 ? QD[imgname_key] : ''; + + + childV += childV != '' ? ' , ' : ''; + childV += ` ('${WINDOW_HEADER_ID}','${StoreId}','${d3}','${WindowDefinitionId}','${WindowId}','${WindowQuestionId}','${WindowQuestionCode}','${QuestionType}','${answer}','${answerId}','${multi_options_ids}','${Image1}','${isImage1All}','${d3}') `; + } + for (const splitItemIndex in WindowSplits) { + const splitItem = WindowSplits[splitItemIndex]; + let Image1Name = splitItem['Image1Name'] != null && splitItem['Image1Name'] != '' ? splitItem['Image1Name'] : ''; + let Image2Name = splitItem['Image2Name'] != null && splitItem['Image2Name'] != '' ? splitItem['Image2Name'] : ''; + Image1Name = isImage1 == 1 ? Image1Name : ''; + Image2Name = isImage2 == 1 ? Image2Name : ''; + + imageV += imageV != '' ? ' , ' : ''; + imageV += ` ('${WINDOW_HEADER_ID}','${StoreId}','${d3}','${WindowDefinitionId}','${WindowId}','${Image1Name}','${Image2Name}','${d3}') `; + } + for (const stockProdIndex in WindowStocks) { + const stockProd = WindowStocks[stockProdIndex]; + let sd = WStocksData.find(i => i.ProductId == stockProd.WindowStockValue) || {}; + let stock = sd.Stock != null ? sd.Stock : (sd.Stock == 0 ? sd.Stock : ''); + let { WindowStockDefinitionId, WindowDefinitionId, WindowStockTable, WindowStockField, WindowStockValue, WindowStockMBQ, ProductName } = stockProd + stockV += stockV != '' ? ' , ' : ''; + stockV += ` ('${WINDOW_HEADER_ID}','${StoreId}','${d3}','${WindowDefinitionId}','${WindowId}','${WindowStockDefinitionId}','${WindowStockTable}','${WindowStockField}','${WindowStockValue}','${WindowStockMBQ}','${ProductName}','${stock}','${d3}') `; + } + + } + } + + console.log('values:', values); + + + let add_hdr_data = `INSERT INTO ${AppTables.WINDOW_HDR_DATA} (WINDOW_HEADER_ID,STORE_ID,VISIT_DATE,WINDOW_DEFINITION_ID,WINDOW_ID,WINDOW_NAME,WINDOW_TABLE,WINDOW_FIELD,WINDOW_VALUE,CHILD_NAME,IS_PRESENT,WINDOW_NA_IMAGE,REASON_ID,REASON,ADDED_DATE) VALUES ${values} `; + let add_child_data = `INSERT INTO ${AppTables.WINDOW_CHILD_DATA} (WINDOW_HEADER_ID,STORE_ID,VISIT_DATE,WINDOW_DEFINITION_ID,WINDOW_ID,QUESTION_ID,QUESTION_CODE,QUESTION_TYPE,ANSWER,ANSWER_ID,MULTI_OPTIONS_IDS,IMAGE1,IMAGE_ALLOW1,ADDED_DATE) VALUES ${childV} `; + let add_images_data = `INSERT INTO ${AppTables.WINDOW_IMAGES} (WINDOW_HEADER_ID,STORE_ID,VISIT_DATE,WINDOW_DEFINITION_ID,WINDOW_ID,IMAGE1,IMAGE2,ADDED_DATE) VALUES ${imageV} `; + let add_stock_data = `INSERT INTO ${AppTables.WINDOW_STOCK_DATA} (WINDOW_HEADER_ID,STORE_ID,VISIT_DATE,WINDOW_DEFINITION_ID,WINDOW_ID,WINDOW_STOCK_DEFINITION_ID,WINDOW_STOCK_TABLE,WINDOW_STOCK_FIELD,WINDOW_STOCK_VALUE,WINDOW_STOCK_MBQ,PRODUCT_NAME,STOCK,ADDED_DATE) VALUES ${stockV} `; + + await txn.executeSql(add_hdr_data, [], async function (txn2, txnres) { + console.log('window header data added'); + var isSplitImageAdded = true, isStockAdded = true, isChildAdded = true; + if (imageV != '') { + isSplitImageAdded = await executeQuery(add_images_data); + } + if (stockV != '') { + isStockAdded = await executeQuery(add_stock_data); + } + if (childV != '') { + isChildAdded = await executeQuery(add_child_data); + } + + if (!isSplitImageAdded) { + setProcessing(false); notify('Cannot add split window images'); + } + else if (!isStockAdded) { + setProcessing(false); notify('Cannot add window stock data'); + } + else if (!isChildAdded) { + setProcessing(false); notify('Cannot add window questions data'); + } + else { + setProcessing(false); notify('Window data updated successfully'); + props.navigation.goBack(); + } + + }, function (txnE, txnerr) { console.log(txnerr); setProcessing(false); notify('Cannot add window data'); },); + }); + } catch (err) { + console.log(err); + } + } + + async function executeQuery(q) { + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + await txn.executeSql(q, [], async function (txn2, txnres2) { + resolve(true); + }, function (Etxn, txnerr) { console.log(txnerr); resolve(false) }); + }); + }).then((val) => { + return val; + }).catch((err) => { + console.log(err); + return false; + }) + } + + + + async function validate() { + let isValid = true; + + return new Promise((resolve, reject) => { + for (const wi in Windows) { + const window = Windows[wi]; + let isImage1 = window.WindowImage1 == 'true' || window.WindowImage1 == 1 ? 1 : 0; + let isImage2 = window.WindowImage2 == 'true' || window.WindowImage2 == 1 ? 1 : 0; + let isNAImageAvl = window.WindowNotExistCamera == 'true' || window.WindowNotExistCamera == 1 ? 1 : 0; + let isNAReasonEnable = window.WindowNotExistReasonEnable == 'true' || window.WindowNotExistReasonEnable == 1 ? 1 : 0; + let isReasonEnable = window.WindowExistReasonEnable == 'true' || window.WindowExistReasonEnable == 1 ? 1 : 0; + let isStockReq = window.WindowElementStockRequired == 'true' || window.WindowElementStockRequired == 1 ? 1 : 0; + let WindowQuestions = window.WindowQuestions || []; + let WindowStocks = window.WindowStocks || []; + + + const wind = WindowData.find(i => i.WindowId == window.WindowId && i.WindowDefinitionId == window.WindowDefinitionId); + let isPresent = wind.isPresent != null && wind.isPresent != '' ? wind.isPresent : '0'; + let ReasonId = wind.ReasonId != null ? wind.ReasonId : ''; + let Reason = wind.Reason != null ? wind.Reason : ''; + let NAImage1 = wind.NAImage1 != null ? wind.NAImage1 : ''; + let NAImage1Path = wind.NAImage1Path != null ? wind.NAImage1Path : ''; + let WindowSplits = wind.WindowSplits || []; + let QD = wind.WindowQA || {}; + let WStocksData = wind.WStocksData || []; + + if (isPresent == '1') { + if (isReasonEnable == true && ReasonId == '') { + notify(`Please select reason for ${window.WindowName} `, 'LONG'); + resolve(false); return; + } + else { + if (window.NoOfSplit > 0 && WindowSplits.length > 0 && (isImage1 == 1 || isImage2 == 1)) { + for (const splitItemIndex in WindowSplits) { + const splitItem = WindowSplits[splitItemIndex]; + let Image1Name = splitItem['Image1Name'] != null && splitItem['Image1Name'] != '' ? splitItem['Image1Name'] : ''; + let Image2Name = splitItem['Image2Name'] != null && splitItem['Image2Name'] != '' ? splitItem['Image2Name'] : ''; + console.log('Image2Name', Image2Name, isImage2); + if (isImage1 == 1 && Image1Name == '') { + notify(`Please click all images for ${window.WindowName}`, 'LONG'); + resolve(false); return; + } + else if (isImage2 == 1 && Image2Name == '') { + notify(`Please click all images for ${window.WindowName}`, 'LONG'); + resolve(false); return; + } + } + } + + if (isStockReq == 1) { + for (const stockProdIndex in WindowStocks) { + const stockProd = WindowStocks[stockProdIndex]; + let sd = WStocksData.find(i => i.ProductId == stockProd.WindowStockValue) || {}; + let stock = sd.Stock != null ? sd.Stock : (sd.Stock == 0 ? sd.Stock : ''); + + if (stock == '') { + notify(`Please enter stock for ${window.WindowName} ( ${stockProd.ProductName} ) `, 'LONG'); + resolve(false); return; + } + } + } + + if (WindowQuestions.length > 0) { + for (const qtnIndex in WindowQuestions) { + const qtn = WindowQuestions[qtnIndex]; + + let selansid = '', selanswer = '', selimg = '', showImageTag = false; + let id_key = qtn.WindowQuestionId + '_AnswerId'; + let ans_key = qtn.WindowQuestionId + '_Answer'; + let multi_key = qtn.WindowQuestionId + '_MultiOption'; + let date_key = qtn.WindowQuestionId + '_Date'; + let img_key = qtn.WindowQuestionId + '_ImagePath1'; + let imgname_key = qtn.WindowQuestionId + '_ImageName1'; + let rating_key = qtn.WindowQuestionId + '_Rating'; + let list_mcdata = []; + + let isImgAllowed = (qtn.WQShowCamera == 'true' || qtn.WQShowCamera == 1); + let checkForAnsKey = (qtn.QuestionType == 'Decimal' || qtn.QuestionType == 'Number' || qtn.QuestionType == 'Text' || qtn.QuestionType == 'Date' || qtn.QuestionType == 'Rating'); + if (qtn.QuestionType == 'Single choice list') { + selansid = QD[id_key]; + } + else if (qtn.QuestionType == 'Multi choice list') { + selansid = QD[multi_key] != null && QD[multi_key] != '' ? QD[multi_key].split(',') : []; + } + + + if (qtn.QuestionType == 'Multi choice list' && selansid.length <= 0) { + notify(`Please select options for the required field in ${window.WindowName}`, 'SHORT'); + resolve(false); return; + } + else if (checkForAnsKey && (Object.keys(QD).indexOf(ans_key) < 0 || (Object.keys(QD).indexOf(ans_key) >= 0 && QD[ans_key] === ''))) { + let msg = (qtn.QuestionType == 'Date' ? `Please pick a date for the required field in ${window.WindowName}` : (qtn.QuestionType == 'Rating' ? `Please select rating for the required field in ${window.WindowName}` : `Please fill all the required field in ${window.WindowName}`)); + notify(msg, 'SHORT'); + resolve(false); return; + } + else if (Object.keys(QD).indexOf(id_key) < 0 || (Object.keys(QD).indexOf(id_key) >= 0 && (QD[id_key] === '' || (QD[id_key] === 0 && qtn.isDisabled === false)))) { + notify(`Please fill all the required field in ${window.WindowName}`, 'SHORT'); + resolve(false); return; + } + else if (isImgAllowed && (Object.keys(QD).indexOf(img_key) < 0 || (Object.keys(QD).indexOf(img_key) >= 0 && QD[img_key] === ''))) { + notify(`Please add images in ${window.WindowName}`, 'SHORT'); + resolve(false); return; + } else { + console.log('no condition found'); + } + + if ((qtn.QuestionType == 'Single choice list' || qtn.QuestionType == 'Multi choice list')) { + if (qtn.Answers && qtn.Answers.length > 0) { + for (var j = 0; j < qtn.Answers.length; j++) { + let ansss = qtn.Answers[j]; + let isandImgAl = (ansss.WAShowCamera == 'true' || ansss.WAShowCamera == 1); + if (qtn.QuestionType == 'Single choice list' && (isandImgAl && ansss.AnswerId == selansid)) { + showImageTag = true; + } + else if (qtn.QuestionType == 'Multi choice list' && (isandImgAl && selansid.indexOf(ansss.AnswerId) >= 0)) { + showImageTag = true; + } + } + } + } + + if (showImageTag && (Object.keys(QD).indexOf(img_key) < 0 || (Object.keys(QD).indexOf(img_key) >= 0 && QD[img_key] === ''))) { + notify(`Please add images in ${window.WindowName}`, 'SHORT'); + resolve(false); return; + } + } + } + + } + } + else { + if (isNAReasonEnable == true && ReasonId == '') { + notify(`Please select reason for ${window.WindowName} `, 'LONG'); + resolve(false); return; + } + else if (isNAImageAvl == true && NAImage1 == '') { + notify(`Please click image for ${window.WindowName}`, 'LONG'); + resolve(false); return; + } + } + + if (wi == (Windows.length - 1)) { + resolve(true); return; + } + + } + + }).then((val) => { return val }) + .catch((err) => { console.log(err); return false }); + + } + + + function onselectionChange(option, keyLbl, keyVal, otherData) { + let item = otherData.window; + let allData = WindowData; + let defData = { 'WindowId': item.WindowId, 'WindowDefinitionId': item.WindowDefinitionId }; + const win_index = allData.findIndex(i => i.WindowId == item.WindowId && i.WindowDefinitionId == item.WindowDefinitionId); + let wind = win_index >= 0 ? (allData[win_index] || defData) : defData; + wind[keyVal] = option.value; + wind[keyLbl] = option.label; + + win_index >= 0 ? allData[win_index] = wind : allData.push(wind); + console.log('allData:', allData); + setWindowData(allData); + setHasUnsavedChanges(true); + setrerenderdata(!rerenderdata); + } + + function onselectionChange2(option, qtn, window) { + let allData = WindowData; + let defData = { 'WindowId': window.WindowId, 'WindowDefinitionId': window.WindowDefinitionId }; + const wind_index = allData.findIndex(i => i.WindowId == window.WindowId && i.WindowDefinitionId == window.WindowDefinitionId); + let wind = wind_index >= 0 ? allData[wind_index] : defData; + let data = wind.WindowQA || {}; + let id_key = qtn.WindowQuestionId + '_AnswerId'; + let ans_key = qtn.WindowQuestionId + '_Answer'; + data[id_key] = option.value; + data[ans_key] = option.label; + + + wind['WindowQA'] = data; + wind_index >= 0 ? allData[wind_index] = wind : allData.push(wind); + + setWindowData(allData); + + let aq_ans = qtn.Answers != null ? qtn.Answers : []; + let ans_obj = aq_ans.find(i => i.AnswerId == option.value) || {}; + let EQtns = ans_obj.WAQuestionEnable != null && ans_obj.WAQuestionEnable != '' ? ans_obj.WAQuestionEnable.replace(' ', '').split(',') : []; + let DQtns = ans_obj.WAQuestionDisable != null && ans_obj.WAQuestionDisable != '' ? ans_obj.WAQuestionDisable.replace(' ', '').split(',') : []; + + let sqtns = window.WindowQuestions || [] + + if (EQtns.length > 0) { + enableQtns(sqtns, EQtns, DQtns, data, wind, wind_index, allData, window) + } + else if (DQtns.length > 0) { + disableQtns(sqtns, DQtns, data, wind, wind_index, allData, window) + } + else { + setHasUnsavedChanges(true); + setrerenderdata(!rerenderdata); + } + + } + + async function disableQtns(sqtns, DQtns, data, wind = {}, wind_index = -1, allData = [], window = {}) { + + if (DQtns.length > 0) { + new Promise.all( + DQtns.map((qid, q_index) => { + let s_qtnindex = sqtns.findIndex(i => i.WindowQuestionId == qid) || {}; + let s_qtn = sqtns[s_qtnindex]; + s_qtn['isDisabled'] = true + sqtns[s_qtnindex] = s_qtn; + let id_key = s_qtn.WindowQuestionId + '_AnswerId'; + let ans_key = s_qtn.WindowQuestionId + '_Answer'; + data[id_key] = 0; + data[ans_key] = ''; + + wind['WindowQA'] = data; + wind_index >= 0 ? allData[wind_index] = wind : allData.push(wind); + + return false + }) + ).then(async (val) => { + + let allwindows = Windows; + let windowIndex = allwindows.findIndex(i => i.WindowDefinitionId == window.WindowDefinitionId && i.WindowId == window.WindowId) + if (windowIndex > 0) { + window['WindowQuestions'] = sqtns; + allwindows[windowIndex] = window; + setWindowData(allData); + setWindows(allwindows); + setHasUnsavedChanges(true); + setrerenderdata(!rerenderdata); + } + + }) + } + } + + async function enableQtns(sqtns, EQtns, DQtns, data, wind = {}, wind_index = -1, allData = [], window = {}) { + new Promise.all( + EQtns.map((qid, q_index) => { + let s_qtnindex = sqtns.findIndex(i => i.WindowQuestionId == qid) || {}; + let s_qtn = sqtns[s_qtnindex]; + s_qtn['isDisabled'] = false + sqtns[s_qtnindex] = s_qtn; + return false + }) + ).then(async (val) => { + if (DQtns.length > 0) { + disableQtns(sqtns, DQtns, data, wind, wind_index, allData, window) + } + else { + let allwindows = Windows; + let windowIndex = allwindows.findIndex(i => i.WindowDefinitionId == window.WindowDefinitionId && i.WindowId == window.WindowId) + if (windowIndex > 0) { + window['WindowQuestions'] = sqtns; + allwindows[windowIndex] = window; + setWindows(allwindows); + setHasUnsavedChanges(true); + setrerenderdata(!rerenderdata); + } + } + }) + } + + async function setMultiSelectValue(selectedItems = [], qtn = {}, window = {}) { + console.log('setMultiSelectValue', selectedItems); + let id_key = qtn.WindowQuestionId + '_AnswerId'; + let ans_key = qtn.WindowQuestionId + '_Answer'; + let multi_key = qtn.WindowQuestionId + '_MultiOption'; + + let allData = WindowData; + let defData = { 'WindowId': window.WindowId, 'WindowDefinitionId': window.WindowDefinitionId }; + const wind_index = allData.findIndex(i => i.WindowId == window.WindowId && i.WindowDefinitionId == window.WindowDefinitionId); + let wind = wind_index >= 0 ? allData[wind_index] : defData; + let obj = wind.WindowQA || {}; + obj[id_key] = 0; + obj[multi_key] = selectedItems.join(','); + let anss = []; + selectedItems.map((itemValue) => { + let ans = qtn.Answers.find(c1 => c1.AnswerId == itemValue); + if (ans.Answer) { anss.push(ans.Answer) } + }); + obj[ans_key] = anss.join(','); + console.log('obj:', obj); + + wind['WindowQA'] = obj; + wind_index >= 0 ? allData[wind_index] = wind : allData.push(wind); + setWindowData(allData); + setHasUnsavedChanges(true); + setrerenderdata(!rerenderdata); + } + + function setTextValue(value, qtn, window) { + let id_key = qtn.WindowQuestionId + '_AnswerId'; + let ans_key = qtn.WindowQuestionId + '_Answer'; + + let allData = WindowData; + let defData = { 'WindowId': window.WindowId, 'WindowDefinitionId': window.WindowDefinitionId }; + const wind_index = allData.findIndex(i => i.WindowId == window.WindowId && i.WindowDefinitionId == window.WindowDefinitionId); + let wind = wind_index >= 0 ? allData[wind_index] : defData; + let obj = wind.WindowQA || {}; + + if (qtn.QuestionType == 'Date') { + let date_key = qtn.WindowQuestionId + '_Date'; + let d = value != null ? new Date(value) : new Date(); + let mfdate = moment(d).format('MM/YYYY'); + showQtnDatePicker(qtn, window, false); + obj[id_key] = 0; + obj[ans_key] = mfdate; + obj[date_key] = moment(d).format('MM/DD/YYYY'); + } + else { + obj[id_key] = 0; + obj[ans_key] = value; + } + + console.log(value, obj); + wind['WindowQA'] = obj; + wind_index >= 0 ? allData[wind_index] = wind : allData.push(wind); + + setWindowData(allData); + setHasUnsavedChanges(true); + setrerenderdata(!rerenderdata); + } + + function showQtnDatePicker(qtn, window, show = false) { + let allQtns = window.WindowQuestions || []; + let newqtnIndex = allQtns.findIndex(q => q.WindowQuestionId == qtn.WindowQuestionId); + + if (newqtnIndex >= 0) { + let newqtn = allQtns[newqtnIndex]; + newqtn.showDatePicker = show; + allQtns[newqtnIndex] = newqtn; + window['WindowQuestions'] = allQtns; + let allWindows = Windows; + const winIndex = allWindows.findIndex(i => i.WindowId == window.WindowId && i.WindowDefinitionId == window.WindowDefinitionId) || {}; + allWindows[winIndex] = window; + setWindows(allWindows); + + if (show == true) setrerenderdata(!rerenderdata); + } + } + + function setRatingValue(data) { + setRatingOrder(data); + } + + function onRatingCancel() { + setShowRating(false); + } + + function onRatingSave() { + setShowRating(false); + let qtn = RatingQtn; + let window = RatingWindow; + let id_key = qtn.WindowQuestionId + '_AnswerId'; + let ans_key = qtn.WindowQuestionId + '_Answer'; + let rating_key = qtn.WindowQuestionId + '_Rating'; + let ids = [], anss = []; + RatingOrder.map((item, index) => { + ids.push(item.AnswerId); + anss.push(item.Answer); + }) + + let allData = WindowData; + let defData = { 'WindowId': window.WindowId, 'WindowDefinitionId': window.WindowDefinitionId }; + const wind_index = allData.findIndex(i => i.WindowId == window.WindowId && i.WindowDefinitionId == window.WindowDefinitionId); + let wind = wind_index >= 0 ? allData[wind_index] : defData; + let obj = wind.WindowQA || {}; + + obj[rating_key] = ids.join(','); + obj[id_key] = 0; + obj[ans_key] = anss.join(','); + + wind['WindowQA'] = obj; + wind_index >= 0 ? allData[wind_index] = wind : allData.push(wind); + + setWindowData(allData); + setHasUnsavedChanges(true); + setrerenderdata(!rerenderdata); + } + + + function onChoiceSelect(item, val, key, animatedChoice) { + console.log('onChoiceSelect', animatedChoice) + var val1 = 0; + val == 1 ? val1 = 1 : ''; + + if (animatedChoice != null) { + Animated.timing(animatedChoice, { + toValue: val1, + duration: 400, + useNativeDriver: false, + }).start(); + } + onWindowDataChange(item, val, key) + } + + function onWindowDataChange(item, val, key) { + let allData = WindowData; + let defData = { 'WindowId': item.WindowId, 'WindowDefinitionId': item.WindowDefinitionId }; + const win_index = allData.findIndex(i => i.WindowId == item.WindowId && i.WindowDefinitionId == item.WindowDefinitionId); + let wind = win_index >= 0 ? (allData[win_index] || defData) : defData; + wind[key] = val; + + if (key == 'ReasonId') { + let rsn = reasons_list.find(r => r.ReasonId == val) || {}; + wind['Reason'] = rsn.Reason || ''; + } + + win_index >= 0 ? allData[win_index] = wind : allData.push(wind); + + setWindowData(allData); + setHasUnsavedChanges(true); + setrerenderdata(!rerenderdata); + } + + + function setWindowStockVal(val, window, stockProd) { + let allData = WindowData; + let defData = { 'WindowId': window.WindowId, 'WindowDefinitionId': window.WindowDefinitionId }; + const win_index = allData.findIndex(i => i.WindowId == window.WindowId && i.WindowDefinitionId == window.WindowDefinitionId); + let wind = win_index >= 0 ? (allData[win_index] || defData) : defData; + let WStocksData = wind['WStocksData'] || []; + let sdIndex = WStocksData.findIndex(i => i.ProductId == stockProd.WindowStockValue); + let sd = sdIndex >= 0 ? WStocksData[sdIndex] : { 'ProductId': stockProd.WindowStockValue, 'Stock': '' }; + sd['Stock'] = val; + sdIndex >= 0 ? WStocksData[sdIndex] = sd : WStocksData.push(sd); + wind['WStocksData'] = WStocksData; + win_index >= 0 ? allData[win_index] = wind : allData.push(wind); + + setWindowData(allData); + setHasUnsavedChanges(true); + setrerenderdata4(!rerenderdata4); + } + + function onSaveCancel() { + setShowAlert(false); + } + + + + function openImageRefView(RefImage = '') { + setShow_zoomImage(true); + } + + function renderRatingView() { + let qtn = RatingQtn; + let Answers = qtn.Answers; + let id_key = qtn.WindowQuestionId + '_AnswerId'; + let ans_key = qtn.WindowQuestionId + '_Answer'; + let rating_key = qtn.WindowQuestionId + '_Rating'; + + let newarr = RatingOrder; + if (RatingOrder.length <= 0) { + newarr = Answers; + } + + return ( + + + Drag Items In Order + Press and hold to drag + { setRatingValue(data) }} + keyExtractor={(item) => item.AnswerId} + renderItem={renderItem} + /> + + { onRatingCancel() }}> + Cancel + + { onRatingSave() }}> + Save + + + + + ) + } + + function render_Picker(label_key, value_key, onChange = () => { }, selected_data = {}) { + var data = []; + let qtn = selected_data.qtn || {}; + let window = selected_data.window || {}; + let isQtnDisabled = qtn.isDisabled != null || qtn.isDisabled != '' ? false : true; + let allAnswers = qtn.Answers || []; + + allAnswers.map((item, index) => { + let obj = { key: index, label: item[label_key], value: item[value_key] }; + if (selected_data.value == item[label_key]) + obj['component'] = {item[label_key]}; + data.push(obj); + }); + + return ( + { onChange(option, qtn, window) }} + overlayStyle={customStyle.addVisPickerOverlay} + cancelContainerStyle={customStyle.addVisPicker_OptionContainerStyle} + optionStyle={customStyle.addvis_opStyle} + optionTextStyle={customStyle.addvis_opTextStyle} + optionContainerStyle={customStyle.addVisPicker_OptionContainerStyle} + selectedKey={'1'} + disabled={isQtnDisabled} + > + {(selected_data.value != null && selected_data.value != '' ? selected_data.value : '-select-')} + + ) + } + + function renderDatePicker(qtn, window) { + let qtnn = qtn; + let DateRange = qtn.DateRange; + let maxDate = moment().add(10, 'years').format('MM/DD/YYYY'); + let minDate = moment().subtract(10, 'years').format('MM/DD/YYYY'); + if (DateRange == 'RFD') { + maxDate = moment().format('MM/DD/YYYY'); + } + else if (DateRange == 'RPD') { + minDate = moment().format('MM/DD/YYYY'); + } + + return ( + { setTextValue(selectedDate, qtnn, window) }} + maximumDate={new Date(maxDate)} + minimumDate={new Date(minDate)} + /> + ); + } + + function _renderWindow() { + return ( + `window_${index.toString()}`} + renderItem={({ item, index }) => { + const window = item; + + let isImage1 = window.WindowImage1 == 'true' || window.WindowImage1 == 1 ? 1 : 0; + let isImage2 = window.WindowImage2 == 'true' || window.WindowImage2 == 1 ? 1 : 0; + let isNAImageAvl = window.WindowNotExistCamera == 'true' || window.WindowNotExistCamera == 1 ? 1 : 0; + let isNAReasonEnable = window.WindowNotExistReasonEnable == 'true' || window.WindowNotExistReasonEnable == 1 ? 1 : 0; + let isReasonEnable = window.WindowExistReasonEnable == 'true' || window.WindowExistReasonEnable == 1 ? 1 : 0; + let isStockReq = window.WindowElementStockRequired == 'tre' || window.WindowElementStockRequired == 1 ? 1 : 0; + // let isStock_CheckAssrt=window.WindowElementCheckAssortment=='true' || window.WindowElementCheckAssortment==1?1:0; + let RefImage = window.WindowRefImage; + let camera1Label = window.WindowImage1Lable || ''; + let camera2Label = window.WindowImage2Lable || ''; + let WindowQuestions = window.WindowQuestions || []; + let WindowStocks = window.WindowStocks || []; + + const wind = WindowData.find(i => i.WindowId == window.WindowId && i.WindowDefinitionId == window.WindowDefinitionId); + let isPresent = wind.isPresent != null && wind.isPresent != '' ? wind.isPresent : '0'; + let ReasonId = wind.ReasonId != null ? wind.ReasonId : ''; + let Reason = wind.Reason != null ? wind.Reason : ''; + let NAImage1 = wind.NAImage1 != null ? wind.NAImage1 : ''; + let NAImage1Path = wind.NAImage1Path != null ? wind.NAImage1Path : ''; + let WindowSplits = wind.WindowSplits || []; + let QuestionsData = wind.WindowQA || {}; + let WStocksData = wind.WStocksData || []; + + // console.log('camera2Label:',window.WindowId,window.WindowDefinitionId,camera2Label); + + + var xpos = isPresent == '1' ? -75 : 0; + if (window.animatedChoice != null) { + xpos = window.animatedChoice.interpolate({ + inputRange: [0, 1], + outputRange: [0, -75], + }); + } + return ( + + + + {window.WindowName} + { openImageRefView(RefImage) }}> + + + + + + + + + {'Is Present'} + + + + { onChoiceSelect(window, 1, 'isPresent', window.animatedChoice) }}> + Yes + + { onChoiceSelect(window, 0, 'isPresent', window.animatedChoice) }}> + No + + + + + {((isPresent != '1' && isNAReasonEnable == true) || (isPresent == '1' && isReasonEnable == true)) && + + Select Reason + {} + + } + + + {(isPresent != '1' && isNAImageAvl == true) && + + + + {'Capture Image'} + + + + + + {(NAImage1Path == '' || NAImage1Path == null) && + { openCamera(window, {}, 0, '1', '3') }}> + + + } + {(NAImage1Path != '' && NAImage1Path != null) && + + + { openCamera(window, {}, 0, '1', '3') }}> + + + + } + + + + + } + + + + {(isPresent == '1') && + + {(isStockReq == true && WindowStocks.length > 0) && + + + {'Enter Stocks'} + + `wstock_${index.toString()}`} + renderItem={({ item, index }) => { + let stockProd = item; + let stockProdIndex = index; + let sd = WStocksData.find(i => i.ProductId == stockProd.WindowStockValue) || {}; + let stock = sd.Stock != null ? sd.Stock : ''; + return ( + + {stockProd.ProductName} + + + Stock + + + + { setWindowStockVal(val, window, stockProd) }} + /> + + + + + ); + }} + /> + + } + {(window.NoOfSplit > 0 && WindowSplits.length > 0 && (isImage1 == 1 || isImage2 == 1)) && + + + {'Capture Window Images'} + + `spliItem_${index.toString()}`} + renderItem={({ item, index }) => { + let splitItem = item; + let splitItemIndex = index; + let Image1Name = splitItem['Image1Name'] != null && splitItem['Image1Name'] != '' ? splitItem['Image1Name'] : ''; + let Image2Name = splitItem['Image2Name'] != null && splitItem['Image2Name'] != '' ? splitItem['Image2Name'] : ''; + let Image1 = splitItem['Image1'] != null && splitItem['Image1'] != '' ? splitItem['Image1'] : ''; + let Image2 = splitItem['Image2'] != null && splitItem['Image2'] != '' ? splitItem['Image2'] : ''; + + return ( + + {isImage1 == 1 && + + {(Image1 == '' || Image1 == null) && + { openCamera(window, splitItem, splitItemIndex, '1') }}> + + + } + {(Image1 != '' && Image1 != null) && + + + { openCamera(window, splitItem, splitItemIndex, '1') }}> + + + + } + {camera1Label} + + } + {isImage2 == 1 && + + {(Image2 == '' || Image2 == null) && + { openCamera(window, splitItem, splitItemIndex, '2') }}> + + + } + {(Image2 != '' && Image2 != null) && + + + { openCamera(window, splitItem, splitItemIndex, '2') }}> + + + + } + {console.log('camera2Label 2:', camera2Label)} + {camera2Label} + + } + + ); + }} + /> + + } + + {(WindowQuestions.length > 0) && + + + {'Window Questions'} + + {WindowQuestions.map((item, index) => { + + let qtn = item; + let qtnIndex = index; + let selansid = '', selanswer = '', selimg = '', showImageTag = false; + let id_key = qtn.WindowQuestionId + '_AnswerId'; + let ans_key = qtn.WindowQuestionId + '_Answer'; + let multi_key = qtn.WindowQuestionId + '_MultiOption'; + let date_key = qtn.WindowQuestionId + '_Date'; + let img_key = qtn.WindowQuestionId + '_ImagePath1'; + let imgname_key = qtn.WindowQuestionId + '_ImageName1'; + let rating_key = qtn.WindowQuestionId + '_Rating'; + + let list_mcdata = []; + + if (qtn.QuestionType == 'Single choice list') { + selansid = QuestionsData[id_key] != null ? QuestionsData[id_key] : ''; + selanswer = QuestionsData[ans_key] != null ? QuestionsData[ans_key] : ''; + } + else if (qtn.QuestionType == 'Multi choice list') { + if (qtn.Answers != null) { + for (var i = 0; i < qtn.Answers.length; i++) { + let obj = { 'AnswerId': parseInt(qtn.Answers[i].AnswerId), 'Answer': qtn.Answers[i].Answer }; + list_mcdata.push(obj); + } + } + selansid = QuestionsData[multi_key] != null && QuestionsData[multi_key] != '' ? QuestionsData[multi_key].split(',') : []; + // if(selansid!=null && selansid.length>0){ + // let arr=[]; + // for(var i=0;i 0) { + for (var i = 0; i < qtn.Answers.length; i++) { + let ansss = qtn.Answers[i]; + let isandImgAl = (ansss.WAShowCamera == 'true' || ansss.WAShowCamera == 1); + + if (qtn.QuestionType == 'Single choice list' && (isandImgAl && ansss.AnswerId == selansid)) { + showImageTag = true; + } + else if (qtn.QuestionType == 'Multi choice list' && (isandImgAl && selansid.indexOf(ansss.AnswerId) >= 0)) { + showImageTag = true; + } + + } + } + } + + if (showImageTag) { + selimg = QuestionsData[img_key] != null && QuestionsData[img_key] != '' ? 'file://' + QuestionsData[img_key] : ''; + } + + return ( + + {qtn.WindowQuestionName} + {qtn.QuestionType == 'Single choice list' && qtn.Answers && + render_Picker('Answer', 'AnswerId', onselectionChange2, { value: selanswer, qtn: qtn, window: window }) + } + {qtn.QuestionType == 'Multi choice list' && qtn.Answers && + { setMultiSelectValue(selectedItems, qtn, window) }} //setMultiSelectValue(selectedItems,qtn) + selectedItems={selansid} + selectText="Pick Items" + searchInputPlaceholderText="Search Items..." + // onChangeInput={ (text)=> console.log(text)} + tagRemoveIconColor={PageTheme.$primary_color} + tagBorderColor={PageTheme.$primary_color} + tagTextColor={PageTheme.$primary_color} + selectedItemTextColor={PageTheme.$primary_color} + selectedItemIconColor={PageTheme.$primary_color} + itemTextColor={PageTheme.$text_color} + displayKey="Answer" + searchInputStyle={{ color: '#CCC' }} + submitButtonColor={PageTheme.$primary_color} + submitButtonText="Submit" + /> + } + {(qtn.QuestionType == 'Number' || qtn.QuestionType == 'Decimal' || qtn.QuestionType == 'Text') && + { setTextValue(val, qtn, window) }} + /> + } + { + (qtn.QuestionType == 'Date') && + + {selansid != '' ? selansid : 'MM/YYYY'} + { setDateValue(selanswer); showQtnDatePicker(qtn, window, true) }}> + + + + } + {((qtn.showDatePicker == true || qtn.showDatePicker == 'true') && (qtn.QuestionType == 'Date')) && + renderDatePicker(qtn, window) + } + { + (qtn.QuestionType == 'Rating') && + + {selanswer} + { setRatingQtn(qtn); setRatingWindow(window); setShowRating(true); }}> + + + + } + + { + // (qtn.QuestionType=='Audio') && + // + // {selanswer} + // {show_recorder(qtn);}}> + // + // + // + } + + { + showImageTag && + + + { openCamera(window, {}, 0, '1', '2', qtn) }}> + + + + } + + + + ) + })} + + } + + + + } + + + + + + + ); + }} + /> + ) + } + + function _renderHeader(currentIndex) { + return ( + + {/* {`${(currentIndex+1)}/${zoomImageUrl.length}`} */} + { console.log('tsth'); setShow_zoomImage(false) }}> + + + + ) + } + + return ( + + {processing && } + + {ConfirmSaveAlert(props, showAlert, onSaveCancel, saveData)} + { setShowCamera(false); getImage(imgData) }} showCamera={showCamera} onHideCamera={() => { setShowCamera(false); }} /> + + + + {Object.keys(storeData).length > 0 && + + {_renderWindow()} + + } + + { onSubmitData() }} /> + + + + + {showRating == true && + renderRatingView() + } + {show_zoomImage && + + null} + /> + + } + + ); +} + + + +export default connect(mapStateToProps, mapDispatchToProps)(PaidVisibility); \ No newline at end of file diff --git a/PerformicsSrc/src/screens/PaidVisibilityOneApp.js b/PerformicsSrc/src/screens/PaidVisibilityOneApp.js new file mode 100644 index 0000000..b563eb3 --- /dev/null +++ b/PerformicsSrc/src/screens/PaidVisibilityOneApp.js @@ -0,0 +1,2945 @@ +import React, { useState, useEffect, useRef } from 'react'; +import Container from '../components/container'; +import { useRoute } from '@react-navigation/native'; +import {customStyles, GetPageTheme } from "../styles/Global"; +import { AppState, StatusBar, Image, TextInput, View, Text, TouchableOpacity, Platform, FlatList, Alert, Animated, KeyboardAvoidingView, Keyboard } from 'react-native'; +import { connect } from 'react-redux'; +import { mapStateToProps, mapDispatchToProps } from '../reducers/contextProvider'; +import { notify } from '../components/notify'; +import moment from 'moment'; +import { getKPIFields, restore_ImageWithMetaData, validateNumber } from '../controller/functions'; +import { get_item, set_item, clear_item } from '../components/localStorage'; +import { db,ImageFolderPath, HierarchyTbls } from '../constants/constants'; +import CustomHeader from '../components/customHeader'; +import { AntDesign, Entypo, FontAwesome, Fontisto, Ionicons, MaterialCommunityIcons } from '../components/icons'; +import CustomLoader from '../components/CustomLoader'; +import LinearGradient from 'react-native-linear-gradient'; +import { AppTables } from '../constants/tableConstants'; +import * as RNFS from 'react-native-fs'; +import GradientButton from '../components/gradientButton'; +import CustomModal from '../components/CustomModal'; +import { ConfirmSaveAlert } from '../components/alert'; +import ModalSelector from 'react-native-modal-selector' +import {CustomPicker2 } from '../components/CustomPicker'; +import CustomCamera from '../components/Camera'; +import ImageViewer from 'react-native-image-zoom-viewer'; +import DateTimePicker from '@react-native-community/datetimepicker'; +import CheckBox from '@react-native-community/checkbox'; +import CameraImg from '../assets/performics/camera_front_image.svg' +import MultiSelect from 'react-native-multiple-select'; +import CameraImg3 from '../assets/performics/camera_tick.svg'; +import CameraImg2 from '../assets/performics/camera_icon.svg'; +import CameraImg5 from '../assets/image/astrickcamera.svg'; +import AddIcon from '../assets/performics/add_image.svg' +import BinIcon from '../assets/performics/delete_icon_red.svg' + +function PaidVisibilityOneApp(props) { + const route = useRoute(); + const ST = props.StaticText || {}; + // get all theme styles acc to current theme set + const PageTheme = GetPageTheme(props.DarkMode, route.name); + const customStyle = customStyles(props.DarkMode, route.name); + const animatedChoice = useRef(new Animated.Value(0)).current; + + const [processing, setProcessing] = useState(true); + const [loaderTitle, setLoaderTitle] = useState(); + const [isAdhocScreen, setIsAdhocScreen] = useState(false); + const [storeData, setStoreData] = useState({}); + const [StoreCameraAllow, setStoreCameraAllow] = useState(true); + const [currentMenu, setCurrentMenu] = useState({}); + const [rerenderdata, setrerenderdata] = useState(0); + const [rerenderdata2, setrerenderdata2] = useState(0); + const [rerenderdata3, setrerenderdata3] = useState(0); + const [rerenderdata4, setrerenderdata4] = useState(0); + + const [hasUnsavedChanges, setHasUnsavedChanges] = useState(false); + + const [WindowData, setWindowData] = useState([]); + const [reasons_list, setReasons_list] = useState([]); + const [Windows, setWindows] = useState([]); + const [show_zoomImage, setShow_zoomImage] = useState(false); + const Show_zoomImageRef = useRef(false); + const [refImageIndex, setrefImageIndex] = useState(0); + const [zoomImageIndex, setzoomImageIndex] = useState(0); + const [showAlert, setShowAlert] = useState(false); + const [showAlert1, setShowAlert1] = useState(false); + + const [zoomImageUrl, setZoomImageUrl] = useState([]); + const [showCamera, setShowCamera] = useState(false); + const [showQRCamera, setShowQRCamera] = useState(false); + const [getImageProps, setGetImageProps] = useState({}); + const zoomView = useRef(null); + const [showRating, setShowRating] = useState(false); + const [RatingQtn, setRatingQtn] = useState({}); + const [RatingWindow, setRatingWindow] = useState({}); + const [RatingOrder, setRatingOrder] = useState([]); + const [searchedItem, setSearchedItem] = useState(''); + const [globalWindows, setGlobalWindows] = useState([]); + const [KPIFields, setKPIFields] = useState([]); + const [showSwitchCamera, setShowSwitchCamera] = useState(false); + const [GridValue, setGridValue] = useState(false); + const [QREnable, setQREnable] = useState(false); + const [DataCleanModal, setDataCleanModal] = useState(false); + const [DataCleanAnim, setDataCleanAnim] = useState(""); + const [DataCleanItem, setDataCleanItem] = useState({}); + const [isPresentClean, setIsPresentClean] = useState(0); + const [InputChange, setInputChange] = useState([]); + const [SelectedImg, setSelectedImg] = useState(''); + const [showModal, setShowModal] = useState(false); + const [reCapImgModalObj, setReCapImgModalObj] = useState({}); + const [showImageSaveOp, setShowImageSaveOp] = useState(true); + const [QRqtnData, setQRqtnData] = useState({}); + //for Partial save + const [FilteredPromoValues, setFilteredPromoValues] = useState([]); + const [ShowCatWise, setShowCatWise] = useState(false); + const [CatData, setCatData] = useState(false); + const [ColId, setColId] = useState(""); + const [ColName, setColName] = useState(""); + + const hasUnsavedChangesRef = React.useRef(hasUnsavedChanges); + const WindowDataRef = React.useRef(WindowData); + const StoreIdRef = React.useRef(null); + const ScreenNameRef = React.useRef({}); + const PSGroupData = React.useRef(''); // Grouping data (Category/ SubCategory/ Brand ) for BG save fuunctionality with Partial Save Scenario + const BGPSAllow = React.useRef(false); + + // error field states + const [errorfield, setErrorField] = useState({}); + const [error, setError] = useState(false); + + const inputRefs = useRef({}); + + const d1 = new Date(); + const d2 = moment(d1).format('MM/DD/YYYY'); + + const [ItemsInView, setItemsInView] = useState([]); + + const onViewableItemsChanged = ({ viewableItems, }) => { + // Do stuff + setItemsInView(viewableItems); + }; + + + const FlatLConfCallbackPairs = useRef([{ viewabilityConfig: { itemVisiblePercentThreshold: 50 }, onViewableItemsChanged }]); + + + const [addImages, setAddImages] = useState([]); + + const handleAddImages = (WIndex) => { + let NObj = { Image1Name: '', Image1: '', Image2Name: '', Image2: '', img1Required: false, img2Required: false, addImg: 1 } + let objD = WindowData[WIndex] + let WSplit = objD?.WindowSplits + WSplit.push(NObj) + objD.WindowSplits = WSplit || [] + WindowData[WIndex] = objD + setrerenderdata(!rerenderdata) + }; + + const handleDelete = (splitItemIndex, WIndex) => { + // setAddImages(prev => prev.filter((_, i) => i !== index)); + let objD = WindowData[WIndex] + let WSplit = objD?.WindowSplits + // WSplit.push(NObj) + // WSplit.Images = WSplit?.Images?.filter((_, i) => i !== splitChildItemIndex); + objD.WindowSplits = WSplit?.filter((_, i) => i !== splitItemIndex); + WindowData[WIndex] = objD + setrerenderdata(!rerenderdata) + + }; + + + + useEffect(() => { + setLoaderTitle(ST.Loading + '...') + let params = props.route.params ? props.route.params : {}; + let storeData1 = params.storeData || {}; + let menu1 = params.menu || {}; + let ShowCatWise1 = params.ShowCatWise != null ? params.ShowCatWise : false; + let CatData1 = params.CatData != null ? params.CatData : {}; + let isAdhoc = params.isAdhoc || false; + + setIsAdhocScreen(isAdhoc); + setShowCatWise(ShowCatWise1); + setCatData(CatData1); + setStoreData(storeData1); + setCurrentMenu(menu1); + let cameraAllow = storeData1.CameraAllow == 'true' || storeData1.CameraAllow == 1 ? true : false; + setStoreCameraAllow(cameraAllow); + StoreIdRef.current = storeData1.StoreId + ScreenNameRef.current = { BgscreenName: menu1.ScreenName, BgMenuId: menu1.MenuId } + getData(storeData1, menu1, CatData1, ShowCatWise1); + const AppStateSubscription = AppState.addEventListener('change', (pro) => { _handleAppStateChange(pro) }); + const unsubscribe = props.navigation.addListener('beforeRemove', onBeforeRemove); + return function cleanup() { + AppStateSubscription.remove(); + return unsubscribe; + }; + }, []); + + + + const _handleAppStateChange = async (nextAppState) => { + if (nextAppState == 'background' && hasUnsavedChangesRef.current == true) { + // windowQuestions: global.windowQuestions || [], // ✅ include this + // console.log("Saving WindowDataRef:", WindowDataRef.current); + let newData = { + storeBGData: WindowDataRef.current, + menuName: ScreenNameRef.current && ScreenNameRef.current.BgscreenName, + StoreId1: StoreIdRef.current, + BgMenuID: ScreenNameRef.current && ScreenNameRef.current.BgMenuId, + visiteDate: d2, + BGPSAllow: BGPSAllow.current, + PSGroupData: PSGroupData.current, + } + let WindowsStr = JSON.stringify(newData) + await set_item('storeData', WindowsStr); + // console.log("Store_json--", WindowData) + } + } + + + + useEffect(() => { + const unsubscribe = props.navigation.addListener('beforeRemove', onBeforeRemove); + return unsubscribe; + }, [hasUnsavedChanges]); + + + useEffect(() => { + const unsubscribe = props.navigation.addListener('beforeRemove', onBeforeRemove); + return unsubscribe; + }, [showCamera]); + + useEffect(() => { + const unsubscribe = props.navigation.addListener('beforeRemove', onBeforeRemove); + return unsubscribe; + }, [showQRCamera]); + + useEffect(() => { + const unsubscribe = props.navigation.addListener('beforeRemove', onBeforeRemove); + return unsubscribe; + }, [show_zoomImage]); + + function onBeforeRemove(e) { + + if (showCamera == true || showQRCamera == true) { + e.preventDefault(); + setShowCamera(false); + setShowQRCamera(false) + } + else if (Show_zoomImageRef.current == true) { + e.preventDefault(); + UpdateShow_zoomImageRef(false); + } + else { + if (hasUnsavedChanges == true) { + e.preventDefault(); // Prevent default behavior of leaving the screen + onRemoveScreen(e); + } + else { + return; + } + } + } + + function BgUnsavedChanges(val) { + hasUnsavedChangesRef.current = val + setHasUnsavedChanges(val); + } + + function BgWindowData(val) { + WindowDataRef.current = val + setWindowData(val); + } + + function UpdateShow_zoomImageRef(val) { + Show_zoomImageRef.current = val + setShow_zoomImage(val); + } + + function onRemoveScreen(e) { + Alert.alert( + "", + ST.Doyoureallywanttoexitthescreen, + [ + { + text: ST.Cancel, + onPress: () => { }, + style: "cancel" + }, + { + text: ST.OK, onPress: async () => { + // setHasUnsavedChanges(false); + BgUnsavedChanges(false) + await clear_item('storeData') + props.navigation.dispatch(e.data.action); + } + } + ] + ); + } + + + function _OpenCaptureImage_Modal(img) { + + const isImageCap = (img != '' || img != null) ? true : false; + let { window, splitItem, splitItemIndex, cameraType } = reCapImgModalObj + let camera2Label = (window && window.PromoImage2Lable) || ''; + return ( + + { + isImageCap && + + + + + + { openCamera(window, splitItem, splitItemIndex, cameraType) }}> + + + + {!showImageSaveOp && + { cancelImage(false) }}> + + {ST.Close} + + } + + } + + ) + } + + + async function getData(storeData1, menu1, CatData1 = {}, ShowCatWise1 = false) { + try { + let { StoreId } = storeData1; + + let AllKPIFields = await getKPIFields(menu1); + setKPIFields(AllKPIFields); + // set switch camera flag as defined in mapping menu flag (if exists) + let SwitchingCameraI = AllKPIFields.findIndex(i => i.KPIFieldName == 'SwitchingCamera'); + let SwitchingCameraObj = SwitchingCameraI >= 0 ? AllKPIFields[SwitchingCameraI] : {}; + let SwitchingCamera = SwitchingCameraI >= 0 ? SwitchingCameraObj['KPIFieldEnable'] : false; + setShowSwitchCamera(SwitchingCamera); + + let isSpecificMapIndex = AllKPIFields.findIndex(i => i.KPIFieldName == 'SpecificMapping') + let isSpecificMapKPIObj = isSpecificMapIndex >= 0 ? AllKPIFields[isSpecificMapIndex] : {}; + let isSpecificMappingEnable = isSpecificMapIndex >= 0 ? isSpecificMapKPIObj['KPIFieldEnable'] : false; + + let HidePresentYesNoIndex = AllKPIFields.findIndex(i => i.KPIFieldName == 'HidePresentYesNo'); + let HidePresentYesNoObj = HidePresentYesNoIndex >= 0 ? AllKPIFields[HidePresentYesNoIndex] : {}; + let HidePresentYesNoEn = HidePresentYesNoIndex >= 0 ? HidePresentYesNoObj['KPIFieldEnable'] : false; + let HidePresentYesNoEnable = HidePresentYesNoEn == 1 || HidePresentYesNoEn == "1" || HidePresentYesNoEn == true ? true : false; + + + let { PSAllow, PSTableName } = menu1; + PSTableName = PSTableName != null ? PSTableName : ''; + PSAllow = PSAllow != null ? PSAllow : false; + let idCol = '', nameCol = ''; + if (PSTableName.toLowerCase() == HierarchyTbls.Master_Category.toLowerCase()) { + idCol = 'CategoryId', nameCol = 'CategoryName'; + } + else if (PSTableName.toLowerCase() == HierarchyTbls.Master_Brand.toLowerCase()) { + idCol = 'BrandId', nameCol = 'BrandName'; + } + else { + idCol = 'SubCategoryId', nameCol = 'SubCategoryName'; + } + let IdVal = CatData1[idCol]; + let NameVal = CatData1[nameCol]; + let FilteredIds = []; + if (ShowCatWise1) { + FilteredIds = await getWindowFilterIds(idCol, IdVal, storeData1, isSpecificMappingEnable, menu1); + } + setFilteredPromoValues(FilteredIds); + let inputChangeFlag = [], storeBGData1 = [], bgStoreJson = {}, isBgDataExists = false; + //storeBGData check + let windData = await get_item('storeData') + if (windData != null && windData != '') { + let StoreJson = JSON.parse(windData) + let { storeBGData, menuName, StoreId1, BgMenuID, visiteDate } = StoreJson + if (storeBGData.length > 0 && menuName == menu1.ScreenName && StoreId1 == StoreId && menu1.MenuId == BgMenuID && visiteDate == d2) { + isBgDataExists = true; + storeBGData1 = storeBGData; + bgStoreJson = StoreJson + WindowDataRef.current = storeBGData + setWindowData(storeBGData); + BgUnsavedChanges(true) + } + } + + // call this after storeBGData check + if (PSAllow) { + // if Partial save is allowed then add the currently active category or group in BG var + BGPSAllow.current = true; + PSGroupData.current = CatData1; + } + + await db.transaction(async function (txn) { + let q3 = `Select Distinct VisibilityReasonId as ReasonId,VisibilityReason as Reason,IsRemarkTaken From Master_VisibilityReason WHERE (MenuId='${menu1.MenuId}' or MenuId= ${menu1.MenuId}) `; + await txn.executeSql(q3, [], async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + let arr = []; + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + arr.push(data); + if (i == txnres2.rows.length - 1) { + setReasons_list(arr); + } + } + } + }, function (txnE, txnerr) { console.log(txnerr); },); + //get data from masters with saved data if any + let FilterIdsJoin = FilteredIds.length > 0 ? FilteredIds.join(',') : ''; + let selectlist2 = `Distinct s.StoreId,wd.PVIS_HEADER_ID as PVisHeaderId,w.VisibilityRefImagePopUp ,w.VisibilityDefinitionId,w.MenuId,w.VisibilityId,w.VisibilityName,w.VisibilityTable,w.VisibilityField,w.VisibilityValue,w.ChildName,w.VisibilityRefImage,w.AddImageAllow,w.AddImageMax,w.VisibilityElementCheckAssortment,w.VisibilityElementStockRequired,IFNULL(wd.IS_PRESENT,'') as IsPresent,w.VisibilityNotExistCamera,IFNULL(wd.PVIS_NA_IMAGE,'') as PVisNAImage,w.VisibilityExistReasonEnable,w.VisibilityNotExistReasonEnable,IFNULL(wd.REASON_ID,'') as ReasonId,IFNULL(wd.REASON,'') as Reason,w.NoOfSplit,w.VisibilityImage1,w.VisibilityImage2,w.VisibilityImage1Lable,w.VisibilityImage2Lable,w.VisibilityImage1CameraGrid,w.VisibilityImage2CameraGrid,w.StockQtyRequired`; + let join3 = ` Left Outer Join ${AppTables.PAIDVIS_HDR_DATA} wd on w.VisibilityDefinitionId=wd.PVIS_DEFINITION_ID and wd.STORE_ID='${StoreId}' and wd.MENU_ID='${menu1.MenuId}' and wd.VISIT_DATE='${d2}'`; + let join2 = ` inner join ${(isSpecificMappingEnable ? 'Mapping_StoreVisibilitySpecific' : 'Mapping_StoreVisibility')} s on w.VisibilityDefinitionId=s.VisibilityDefinitionId `; + let q2 = ` Select ${selectlist2} from Master_VisibilityDefinition w ${join2} ${join3} where s.StoreId=${StoreId} and w.MenuId=${menu1.MenuId} `; + if (ShowCatWise1 == true) { + q2 += ` and w.VisibilityValue in (${FilterIdsJoin}) `; + } + q2 += `order by w.VisiDefSequence `; + await txn.executeSql(q2, [], async function (txn2, txnres2) { + console.log('Paid Visi added count', txnres2.rows.length); + if (txnres2.rows.length > 0) { + let arr = []; let images = [], allWindowsData = []; + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + let isPresent = (HidePresentYesNoEnable ? 1 : 0); + if (isBgDataExists) { + let storeBgIndex = storeBGData1.findIndex(i => i.VisibilityId == data.VisibilityId && i.VisibilityDefinitionId == data.VisibilityDefinitionId) + let storeBgObj = storeBgIndex >= 0 ? storeBGData1[storeBgIndex] : {}; + isPresent = HidePresentYesNoEnable ? 1 : (storeBgObj.isPresent == '1' || storeBgObj.isPresent == 1 ? 1 : 0); + } else { + isPresent = (HidePresentYesNoEnable ? 1 : (data.IsPresent == '1' || data.IsPresent == 1 ? 1 : 0)); + } + let animatedChoice = new Animated.Value(isPresent); + let animatedHeight = new Animated.Value(450); + data.animatedChoice = animatedChoice; + data.animatedHeight = animatedHeight + data.NoOfSplit = parseInt(data.NoOfSplit); + let NoOfSplit = data.NoOfSplit; + let isStockReq = data.VisibilityElementStockRequired == 'true' || data.VisibilityElementStockRequired == 1 ? 1 : 0; + let imgObj = { imgIndex: (i + 1), url: data.VisibilityRefImage, props: {} } + images.push(imgObj); + let WindowSplits = await getWindowSplits(NoOfSplit, data, storeData1, menu1); + let WQr = await getWindowQuestions(data, storeData1, menu1, bgStoreJson, isBgDataExists); + let WindowQuestions = WQr['WindowQuestions'] || []; + let WindowQA = WQr['WindowQA'] || {}; + let WSd = isStockReq == true ? await getWindowStockData(data, storeData1, isPresent, AllKPIFields) : { 'WStocks': [], 'WStocksData': [] }; + let WStocks = WSd['WStocks'] || []; + let WStocksData = WSd['WStocksData'] || []; + let isAllChecked = WSd['isAllChecked'] != null ? WSd['isAllChecked'] : 0; + + let isNAImageAvl = data.VisibilityNotExistCamera == 'true' || data.VisibilityNotExistCamera == 1 ? 1 : 0; + let NAImage1 = isNAImageAvl == 1 && data.PVisNAImage != null ? data.PVisNAImage : ''; + let NAImage1Path = NAImage1 != '' ? 'file://' + ImageFolderPath + menu1.ScreenName + "/" + NAImage1 : ''; + let showRsnRemark = ((data.SHOW_RSN_REMARK == '1' || data.SHOW_RSN_REMARK == 1) ? true : false); + + let windowDataObj = { 'VisibilityId': data.VisibilityId, 'VisibilityDefinitionId': data.VisibilityDefinitionId, 'WindowSplits': WindowSplits, 'WindowQA': WindowQA, 'WStocksData': WStocksData, 'NAImage1': NAImage1, 'NAImage1Path': NAImage1Path, 'ReasonId': data.ReasonId, 'Reason': data.Reason, 'isPresent': isPresent, 'isAllSKUChecked': isAllChecked, 'remark': (data.Remark != null ? data.Remark : ''), 'showOtherText': showRsnRemark, 'RemarkText': (data.REASON_REMARK || '') }; + data['WindowQuestions'] = WindowQuestions; + data['WindowStocks'] = WStocks; + let changesFlag = { VisibilityId: data.VisibilityId, VisibilityDefinitionId: data.VisibilityDefinitionId, Flag: (data.PVisHeaderId != null ? true : false) } + inputChangeFlag.push(changesFlag) + arr.push(data); + allWindowsData.push(windowDataObj); + if (i == txnres2.rows.length - 1) { + if (!isBgDataExists) { + BgWindowData(allWindowsData); + } + setInputChange(inputChangeFlag) + setWindows(arr); + setGlobalWindows(arr); + setZoomImageUrl(images); + setProcessing(false); + } + } + } + else { + setProcessing(false); + notify('No data found!') + } + }, function (txnE, txnerr) { console.log(txnerr); setProcessing(false); },); + + }); + } catch (err) { + console.log(err); + } + } + + async function getWindowFilterIds(idCol, IdVal, storeData1, isSpecificMappingEnable, menu1 = {}) { + let AllIds = []; + let { StoreId } = storeData1 + let { MenuId } = menu1 + let tbname2 = isSpecificMappingEnable ? 'Mapping_StoreVisibilitySpecific' : 'Mapping_StoreVisibility'; + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + let join = ` inner join ${tbname2} s on w.VisibilityDefinitionId=s.VisibilityDefinitionId `; + let q = `Select Distinct w.* from Master_VisibilityDefinition w ${join} where s.StoreId=${StoreId} and w.MenuId=${MenuId} `; + await txn.executeSql(q, [], async function (txn2, txnres) { + if (txnres.rows.length > 0) { + let Wind_data = txnres.rows.item(0); + let { VisibilityTable } = Wind_data; + VisibilityTable = VisibilityTable != null ? VisibilityTable : ''; + let filterIdsCol = '', filterNamesCol = ''; + if (VisibilityTable.toLowerCase() == HierarchyTbls.Master_Category.toLowerCase()) { + filterIdsCol = 'CategoryId', filterNamesCol = 'CategoryName'; + } + else if (VisibilityTable.toLowerCase() == HierarchyTbls.Master_Brand.toLowerCase()) { + filterIdsCol = 'BrandId', filterNamesCol = 'BrandName'; + } + else if (VisibilityTable.toLowerCase() == HierarchyTbls.Master_Product.toLowerCase()) { + filterIdsCol = 'ProductId', filterNamesCol = 'ProductName'; + } + else { + filterIdsCol = 'SubCategoryId', filterNamesCol = 'SubCategoryName'; + } + + let FIdsQ = `Select distinct p.${filterIdsCol},p.${filterNamesCol} from Product_Master p where (p.${idCol}='${IdVal}' or p.${idCol}=${IdVal}) `; + await txn.executeSql(FIdsQ, [], async function (txn2, txnres2) { + if (txnres.rows.length > 0) { + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + let id_value = data[filterIdsCol]; + AllIds.push(id_value); + if (i == txnres2.rows.length - 1) { + resolve(AllIds) + } + } + } + else { + resolve([]); + } + }, function (txnE, txnerr) { console.log(txnerr); resolve(AllIds) }); + } + else { + resolve(AllIds) + } + }, function (txnE, txnerr) { console.log(txnerr); resolve(AllIds) },); + }); + }).then((val) => { + return val + }).catch((err) => { + console.log(err); + return AllIds; + }); + } + + async function getWindowSplits(NoOfSplit, window, storeData1, menu1) { + let WindowSplits_def = []; + for (var s = 0; s < NoOfSplit; s++) { + let obj = { 'Image1Name': '', 'Image1': '', 'Image2Name': '', 'Image2': '', img1Required: true, img2Required: true }; + WindowSplits_def.push(obj); + } + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + let q = `select * from ${AppTables.PAIDVIS_IMAGES} where PVIS_HEADER_ID='${window.PVisHeaderId}' and STORE_ID='${storeData1.StoreId}' `; + await txn.executeSql(q, [], async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + let arr = []; + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + console.log(data.PVIS_HEADER_ID) + let isImage1 = window.VisibilityImage1 == 'true' || window.VisibilityImage1 == 1 ? 1 : 0; + let isImage2 = window.VisibilityImage2 == 'true' || window.VisibilityImage2 == 1 ? 1 : 0; + let Image1 = isImage1 == 1 && data.IMAGE1 != null && data.IMAGE1 != '' ? 'file://' + ImageFolderPath + menu1.ScreenName + "/" + data.IMAGE1 : ''; + let Image2 = isImage2 == 1 && data.IMAGE2 != null && data.IMAGE2 != '' ? 'file://' + ImageFolderPath + menu1.ScreenName + "/" + data.IMAGE2 : ''; + let obj = { 'Image1Name': data.IMAGE1, 'Image1': Image1, 'Image2Name': data.IMAGE2, 'Image2': Image2, img1Required: data?.ADD_IMAGES == 1 ? false : true, img2Required: data?.ADD_IMAGES == 1 ? false : true, addImg: data?.ADD_IMAGES || 0 }; + arr.push(obj); + if (i == txnres2.rows.length - 1) { + resolve(arr) + } + } + } + else { + resolve(WindowSplits_def) + } + }, function (txnE, txnerr) { console.log(txnerr); resolve(WindowSplits_def) },); + }); + }).then((val) => { + return val + }).catch((err) => { + console.log(err); + return WindowSplits_def; + }); + } + + ///jp fixed queation enable disable on app kill + const getWindowQuestionsById = (bgJsonDta, visibilityId, VisibilityDefinitionId) => { + const item = bgJsonDta?.storeBGData?.find(i => i.VisibilityId == visibilityId && i.VisibilityDefinitionId == VisibilityDefinitionId); + return item?.WindowQuestions || [] + }; + + async function getWindowQuestions(window, storeData1, menu1, bgStoreJson = {}, isBgDataExists = false) { + let obj = { 'WindowQA': {}, 'WindowQuestions': [] } + let questionsBg = [] + ///jp fixed queation enable disable on app kill + if (isBgDataExists) { + questionsBg = getWindowQuestionsById(bgStoreJson, window.VisibilityId, window.VisibilityDefinitionId); + console.log("bgStoreJson_new", questionsBg); + } + + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + var q = '', selectlist = '', join = '', join2 = ''; + selectlist = ` DISTINCT wq.VisibilityQuestionId,wq.VisibilityQuestionCode,wq.VisibilityQuestionName,wq.QuestionType,wq.VQShowCamera,wq.VQCameraMandatory,wq.VQLengthValidationRequired,wq.VQMinimumChar,wq.VQMaximumChar,wq.VQDecimalPoint,wq.VQDateRangeMin,wq.VQDateRangeMax,wq.VQVoiceLengthInMinutes,wq.VQDefaultQuestionEnable,(CASE WHEN q.QUESTION_ID is not null THEN 1 ELSE 0 END) isInserted,q.IS_DISABLED,q.ANSWER as Answer,q.ANSWER_ID as AnswerId,q.MULTI_OPTIONS_IDS as multi_op_ids,q.IMAGE_ALLOW1 as VAShowCamera,q.IMAGE1 as Image1 `; + join2 = ` Left Outer Join ${AppTables.PAIDVIS_CHILD_DATA} q on wq.VisibilityQuestionId=q.QUESTION_ID and q.STORE_ID='${storeData1.StoreId}' and q.PVIS_DEFINITION_ID='${window.VisibilityDefinitionId}' and q.PVIS_ID='${window.VisibilityId}' and q.VISIT_DATE='${d2}'`; + join = ` inner join Mapping_VisibilityQuestion mq on mq.VisibilityQuestionId=wq.VisibilityQuestionId `; + q = `select ${selectlist} from Master_VisibilityQuestion wq ${join} ${join2} where mq.VisibilityDefinitionId=${window.VisibilityDefinitionId} order by wq.VisibilityQuestionSequence `; + + + await txn.executeSql(q, [], async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + let arr = []; + let wqa_obj = {}; + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + let { isInserted } = data; + let answers = []; + data.VQDefaultQuestionEnable = data.VQDefaultQuestionEnable == 1 || data.VQDefaultQuestionEnable == 'true' ? true : false; + if (isInserted) { + data['isDisabled'] = data.IS_DISABLED == true || data.IS_DISABLED == "true" ? true : false; + if (isBgDataExists) { + if (questionsBg != null && questionsBg != undefined && Array.isArray(questionsBg) && questionsBg.length > 0) { + const isEnabled = questionsBg.some(q => + q.VisibilityQuestionId === data.VisibilityQuestionId && q.isDisabled === false + ); + if (isEnabled) { + data['isDisabled'] = false; + console.log("Matched Question:", data.VisibilityQuestionId); + } else { + data['isDisabled'] = true; + } + } + } + } + ///jp fixed queation enable disable on app kill + else if (isBgDataExists) { + data['isDisabled'] = !data.VQDefaultQuestionEnable; + if (questionsBg != null && questionsBg != undefined && Array.isArray(questionsBg) && questionsBg.length > 0) { + const isEnabled = questionsBg.some(q => + q.VisibilityQuestionId === data.VisibilityQuestionId && q.isDisabled === false + ); + if (isEnabled) { + data['isDisabled'] = false; + console.log("Matched Question:", data.VisibilityQuestionId); + } else { + data['isDisabled'] = true; + } + } + } else { + data['isDisabled'] = !data.VQDefaultQuestionEnable; + } + + if (data.QuestionType == 'Multi choice list' || data.QuestionType == 'Single choice list' || data.QuestionType == 'Rating') { + answers = await getWindowAnswers(data); + if (data.QuestionType == 'Rating') { + data.showRating = false; + } + } + else if (data.QuestionType == 'Date') { + data.showDatePicker = false; + } + data['Answers'] = answers; + + let id_key = data.VisibilityQuestionId + '_AnswerId'; + let ans_key = data.VisibilityQuestionId + '_Answer'; + let multi_key = data.VisibilityQuestionId + '_MultiOption'; + let date_key = data.VisibilityQuestionId + '_Date'; + let img_key = data.VisibilityQuestionId + '_ImagePath1'; + let imgname_key = data.VisibilityQuestionId + '_ImageName1'; + let rating_key = data.VisibilityQuestionId + '_Rating'; + + + let showImageTag = (data.VQShowCamera == 'true' || data.VQShowCamera == 1); + + data.AnswerId != null ? wqa_obj[id_key] = data.AnswerId : ''; + data.Answer != null ? wqa_obj[ans_key] = data.Answer : ''; + + + let selansid = data.AnswerId != null ? data.AnswerId : ''; + + if (data.QuestionType == 'Multi choice list' && (selansid != '' || selansid === 0) && data.multi_op_ids != null) { + selansid = data.multi_op_ids ? data.multi_op_ids.split(',') : []; + wqa_obj[multi_key] = data.multi_op_ids; + } + + if ((data.QuestionType == 'Single choice list' || data.QuestionType == 'Multi choice list') && selansid != '' && selansid != null) { + if (data.Answers && data.Answers.length > 0) { + for (var k = 0; k < data.Answers.length; k++) { + let ansss = data.Answers[k]; + let isandImgAl = (ansss.VAShowCamera == 1 || ansss.VAShowCamera == 'true'); + if (data.QuestionType == 'Single choice list' && (isandImgAl && ansss.AnswerId == selansid)) { + showImageTag = true; + } + else if (data.QuestionType == 'Multi choice list' && (isandImgAl && selansid.indexOf(ansss.AnswerId) >= 0)) { + showImageTag = true; + } + } + } + } + + if (showImageTag && data.Answer != null) { + let imgPath = (Platform.OS == 'ios' ? 'file://' : '') + ImageFolderPath + menu1.ScreenName + "/" + data.Image1; + wqa_obj[imgname_key] = data.Image1; + wqa_obj[img_key] = imgPath; + } + + + + if (data.QuestionType == 'Date' && data.Answer != null) { + let dayonly = moment().format('DD'); + let actual_date = data.Answer ? data.Answer.split('/') : []; + let month = actual_date[0], year = actual_date[1]; + let fulldate = month + '/' + dayonly + '/' + year; + wqa_obj[date_key] = fulldate; + + } + + arr.push(data); + if (i == txnres2.rows.length - 1) { + obj['WindowQuestions'] = arr; + obj['WindowQA'] = wqa_obj; + resolve(obj) + } + } + } + else { + resolve(obj) + } + }, function (txnE, txnerr) { console.log(txnerr); resolve(obj) },); + }); + }).then((val) => { + return val + }).catch((err) => { + console.log(err); + return obj; + }); + } + + async function getWindowAnswers(qtn) { + + return new Promise((resolve, reject) => { + + db.transaction(async function (txn) { + var q = '', selectlist = ''; + selectlist = ` DISTINCT VisibilityAnswerId as AnswerId,VisibilityAnswerName as Answer,VAShowCamera,VACameraMandatory,VAQuestionEnable,VAQuestionDisable `; + q = `select ${selectlist} from Master_VisibilityQuestion where VisibilityQuestionId=${qtn.VisibilityQuestionId} order by VASequence `; + + await txn.executeSql(q, [], async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + let arr = []; + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + arr.push(data); + if (i == txnres2.rows.length - 1) { + resolve(arr) + } + } + } + else { + resolve([]) + } + }, function (txnE, txnerr) { console.log(txnerr); resolve([]) },); + }); + }).then((val) => { + return val + }).catch((err) => { + console.log(err); + return []; + }); + } + + async function getWindowStockData(window, storeData1, isInserted = false, AllKPIFields = []) { + let obj = { 'WStocks': [], 'WStocksData': [], 'isAllChecked': 0 } + let { StateId, ChainId, StoreTypeId, StoreId } = storeData1; + + let isSpecificMapIndex = AllKPIFields.findIndex(i => i.KPIFieldName == 'SpecificMapping') + let isSpecificMapKPIObj = isSpecificMapIndex >= 0 ? AllKPIFields[isSpecificMapIndex] : {}; + let isSpecificMappingEnable = isSpecificMapIndex >= 0 ? isSpecificMapKPIObj['KPIFieldEnable'] : false; + + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + let checkassrt = window.VisibilityElementCheckAssortment == 'true' || window.VisibilityElementCheckAssortment == 1 ? true : false; + let join = '', join2 = '', selectlist2 = '', q2 = ''; + + //get data from masters with saved data if any + if (checkassrt) { + join2 = ` inner join Mapping_ProductAssortmentStorewise a on a.ProductId=s.VisibilityStockValue and a.StoreId=${StoreId}`; + } + + let join3 = ''; + if (isSpecificMappingEnable == true) { + join3 = ` Left Outer Join ${AppTables.PAIDVIS_STOCK_DATA} ps on s.VisibilityValue=ps.PVIS_STOCK_VALUE and ps.PVIS_DEFINITION_ID='${window.VisibilityDefinitionId}' and ps.STORE_ID='${storeData1.StoreId}' `; + selectlist2 = ` Distinct '0' as VisibilityStockDefinitionId, s.VisibilityDefinitionId,s.VisibilityTable as VisibilityStockTable,s.VisibilityField as VisibilityStockField,s.VisibilityValue as VisibilityStockValue,'' as VisibilityStockMBQ,s.ChildName as ProductName, ps.STOCK as Stock,IFNULL(ps.IS_PVIS_PRESENT,'') as isPVisPresent `; + q2 = `select ${selectlist2} from Mapping_StoreVisibilitySpecific s ${join2} ${join3} where s.VisibilityDefinitionId='${window.VisibilityDefinitionId}' and s.StoreId='${StoreId}' order by s.ChildName `; + + } else { + join3 = ` Left Outer Join ${AppTables.PAIDVIS_STOCK_DATA} ps on s.VisibilityStockDefinitionId=ps.PVIS_STOCK_DEFINITION_ID and s.VisibilityStockValue=ps.PVIS_STOCK_VALUE and ps.PVIS_DEFINITION_ID='${window.VisibilityDefinitionId}' and ps.STORE_ID='${storeData1.StoreId}' `; + selectlist2 = ` s.VisibilityStockDefinitionId, s.VisibilityDefinitionId,s.VisibilityStockTable,s.VisibilityStockField,s.VisibilityStockValue,s.VisibilityStockMBQ,s.ProductName, ps.STOCK as Stock,IFNULL(ps.IS_PVIS_PRESENT,'') as isPVisPresent `; + q2 = `select ${selectlist2} from Master_VisibilityStockDefinition s ${join2} ${join3} where s.VisibilityDefinitionId=${window.VisibilityDefinitionId} order by s.ProductName `; + } + + // console.log("isSpecificMappingEnable---",isSpecificMappingEnable,q2) + await txn.executeSql(q2, [], async function (txn2, txnres2) { + console.log('Stock qty added:', txnres2.rows.length); + if (txnres2.rows.length > 0) { + let arr = [], WStocksData = []; + let isAllChecked = 1; + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + // use index for refId instead of VisibilityStockDefinitionId as the condition does not work in case of isSpecificMappingEnable is true ( because all VisibilityStockDefinitionId are 0) + let refId = 'input1_' + data.VisibilityDefinitionId + "_" + i; + + inputRefs.current[refId] = ''; + if (data.Stock != null) { + let stockData_obj = { 'ProductId': data.VisibilityStockValue, 'Stock': data.Stock, 'isPVisPresent': (data.isPVisPresent != null ? data.isPVisPresent : 0) } + WStocksData.push(stockData_obj); + } + if (data.isPVisPresent == null || data.isPVisPresent == 0 || data.isPVisPresent == '0' || data.isPVisPresent == '') { + isAllChecked = 0; + } + arr.push(data); + if (i == txnres2.rows.length - 1) { + obj['WStocks'] = arr; + obj['WStocksData'] = WStocksData; + obj['isAllChecked'] = isAllChecked; + resolve(obj) + } + } + } + else { + resolve(obj) + } + }, function (txnE, txnerr) { console.log(txnerr); resolve(obj) },); + }); + }).then((val) => { + return val + }).catch((err) => { + console.log(err); + return obj; + }); + } + + async function focusToNext(WindowStocks, windowIndex, stockProd, index) { + //console.log('focusToNext is call'); + //console.log('WindowStocks', index + 1) + if (index == WindowStocks.length - 1) { + return; + } + try { + console.log('next 1 call', 'input1_' + WindowStocks[index + 1].VisibilityDefinitionId + '_' + (index + 1)) + let refIn2 = inputRefs.current['input1_' + WindowStocks[index + 1].VisibilityDefinitionId + '_' + (index + 1)]; + if (refIn2 != null) { + refIn2.focus(); + } + } + catch (err) { + console.log(err); + } + } + + ///optimize code for taking much time + async function getImage(imgdata) { + let type = getImageProps.type || ''; + let window = getImageProps.window || {}; + let splitItem = getImageProps.splitItem || {}; + let splitItemIndex = getImageProps.splitItemIndex || 0; + let qtn = getImageProps.qtn || {}; + let cameraType = getImageProps.cameraType != null ? getImageProps.cameraType : '1'; + if (typeof imgdata == 'object' && imgdata.errorCode == 'camera_unavailable') { + notify(ST.Cameraunavailable); + } + else if (typeof imgdata == 'object' && imgdata.uri != null) { + const img = imgdata; + const imgurl = img.uri, imgWidth = img.width, imgHeight = img.ExtendedHeight; + let isImgFromGallery = img.fromGallery != null ? img.fromGallery : false; + let picture_clickedd = isImgFromGallery == true ? img.datetime : new Date(); + ////change by jeevanp + let picture_clicked_time = moment(picture_clickedd).format('MM-DD-YYYY HH:mm:ss') + let picture_clicked_time_for_pic_name = moment(picture_clickedd).format('MMDDYYYY_HHmmss') + console.log("time", picture_clicked_time); + console.log("time1", picture_clicked_time_for_pic_name); + ////change by jeevanp + let calculate_tym_date_for_filename = picture_clicked_time_for_pic_name; + let calculate_tym_date_over_img = picture_clicked_time; + let filename = storeData.StoreId + '_' + window.VisibilityDefinitionId + '_' + window.VisibilityId + '_' + (props.UserId || '') + '_STImg-' + calculate_tym_date_for_filename + '.jpg'; + let allData = WindowData; + let defData = { 'VisibilityId': window.VisibilityId, 'VisibilityDefinitionId': window.VisibilityDefinitionId }; + const wind_index = allData.findIndex(i => i.VisibilityId == window.VisibilityId && i.VisibilityDefinitionId == window.VisibilityDefinitionId); + let wind = wind_index >= 0 ? allData[wind_index] : defData; + let camera1Label = window.VisibilityImage1Lable || ''; + let camera2Label = window.VisibilityImage2Lable || ''; + let extraLabel = ''; + + if (cameraType == '2') { + var QD = wind.WindowQA || {}; + var image_key = qtn.VisibilityQuestionId + '_ImageName1'; + var image_key_path = qtn.VisibilityQuestionId + '_ImagePath1'; + QD[image_key] = filename; + extraLabel = 'Qtn Id: ' + qtn.VisibilityQuestionId; + } + else if (cameraType == '3') { + var image_key = 'NAImage1'; + var image_key_path = 'NAImage1Path'; + wind[image_key] = filename; + extraLabel = 'Not Exist'; + } + else { + var WindowSplits = wind.WindowSplits || []; + var image_key = type == '1' ? 'Image1Name' : 'Image2Name'; + var image_key_path = type == '1' ? 'Image1' : 'Image2'; + splitItem[image_key] = filename; + extraLabel = type == '1' ? camera1Label : camera2Label; + } + + console.log("checkimgoffline--", calculate_tym_date_over_img, picture_clicked_time) + const mark_text1 = calculate_tym_date_over_img; + const mark_text2 = 'Store Name:' + storeData.StoreName + ' | Store Id:' + storeData.StoreId + ' | User Id:' + storeData.EmpId + ' | Visibility Name:' + window.VisibilityName + '(' + window.VisibilityDefinitionId + ')' + (extraLabel != '' ? ' (' + extraLabel + ')' : '') + ' | Image Type: ' + currentMenu.MenuName + ' | Date:' + calculate_tym_date_over_img; + + let imagePath = `${ImageFolderPath + currentMenu.ScreenName}/${filename}`; + RNFS.copyFile(imgurl, imagePath) + .then(async (resn) => { + // render data with clicked image + let uri = 'file://' + imagePath; + console.log('image marker:', imgWidth, imgHeight, uri); + + if (cameraType == '2') { + QD[image_key_path] = uri; + wind.WindowQA = QD; + wind_index >= 0 ? allData[wind_index] = wind : allData.push(wind); + WindowDataRef.current = allData + setWindowData(allData); + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata3(!rerenderdata3); + } + else if (cameraType == '3') { + wind[image_key_path] = uri; + wind_index >= 0 ? allData[wind_index] = wind : allData.push(wind); + WindowDataRef.current = allData + setWindowData(allData); + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + else { + console.log('split image updated'); + splitItem[image_key_path] = uri; + splitItemIndex >= 0 ? WindowSplits[splitItemIndex] = splitItem : WindowSplits.push(splitItem); + wind.WindowSplits = WindowSplits; + wind_index >= 0 ? allData[wind_index] = wind : allData.push(wind); + WindowDataRef.current = allData + setWindowData(allData); + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata2(!rerenderdata2); + } + + let objIndex = InputChange.findIndex(i => i.VisibilityId == window.VisibilityId && i.VisibilityDefinitionId == window.VisibilityDefinitionId); + let winArr = [...InputChange] + winArr[objIndex].Flag = true + setSelectedImg(uri) + setInputChange(winArr) + + // add metdata then resize image and restored back to the imagePath + let restore_data = { "destFilePath": imagePath, "imgurl": imgurl, imgWidth, imgHeight, mark_text1, mark_text2 } + let is_restored = await restore_ImageWithMetaData(restore_data, imgdata); + console.log("image restored:", is_restored); + + }) + .catch(err => { + console.log('ERROR: image file write failed!!!'); + console.log(err.message, err.code); + }); + } + + } + + + async function onQRScanned(imgdata) { + let qtn = QRqtnData.qtn || {}; + let window = QRqtnData.window || {}; + let QR_withValidChars = imgdata != null && imgdata != '' ? imgdata.replace(/["']/g, '') : ''; + let value = QR_withValidChars;//imgdata && imgdata[0] && imgdata[0].displayValue ? imgdata[0].displayValue :"" + setTextValue(value, qtn, window) + } + + + function showQtnDatePicker(qtn, window, show = false) { + let allQtns = window.WindowQuestions || []; + let newqtnIndex = allQtns.findIndex(q => q.VisibilityQuestionId == qtn.VisibilityQuestionId); + + if (newqtnIndex >= 0) { + let newqtn = allQtns[newqtnIndex]; + newqtn.showDatePicker = show; + allQtns[newqtnIndex] = newqtn; + window['WindowQuestions'] = allQtns; + let allWindows = Windows; + const winIndex = allWindows.findIndex(i => i.VisibilityId == window.VisibilityId && i.VisibilityDefinitionId == window.VisibilityDefinitionId) || {}; + allWindows[winIndex] = window; + setWindows(allWindows); + setGlobalWindows(allwindows); + if (show == true) setrerenderdata(!rerenderdata); + } + } + + async function openCamera(window, splitItem, splitItemIndex, type = '1', cameraType = '1', qtn = {}) { + setErrorField({}); + setError(false); + let GridAllow = false; + if (type == '1') { + GridAllow = cameraType == '1' ? (type === '1' ? (window.VisibilityImage1CameraGrid === 'true' || window.VisibilityImage1CameraGrid == true) : (window.VisibilityImage1CameraGrid === 'true' || window.VisibilityImage1CameraGrid == true)) : false + } else { + GridAllow = cameraType == '1' ? (type === '2' ? (window.VisibilityImage2CameraGrid === 'true' || window.VisibilityImage2CameraGrid == true) : (window.VisibilityImage2CameraGrid === 'true' || window.VisibilityImage2CameraGrid == true)) : false + } + setGridValue(GridAllow); + setGetImageProps({ 'window': window, 'splitItem': splitItem, 'splitItemIndex': splitItemIndex, 'type': type, 'cameraType': cameraType, 'qtn': qtn }); + setShowCamera(true); + } + + async function onSubmitData() { + let isvalid = await validate(); + if (isvalid) { + Keyboard.dismiss(); + setShowAlert(true); + } + } + + async function saveData() { + // setHasUnsavedChanges(false); + BgUnsavedChanges(false) + setShowAlert(false); + setLoaderTitle(ST.SavingData + '...'); + setProcessing(true); + let d1n = new Date(); + let d3 = moment(d1n).format('MM/DD/YYYY'); + try { + let { StoreId } = storeData; + let isSpecificMapIndex = KPIFields.findIndex(i => i.KPIFieldName == 'SpecificMapping') + let isSpecificMapKPIObj = isSpecificMapIndex >= 0 ? KPIFields[isSpecificMapIndex] : {}; + let isSpecificMappingEnable = isSpecificMapIndex >= 0 ? isSpecificMapKPIObj['KPIFieldEnable'] : false; + // remove old data + let isDeleted = await removePreviousData(); + console.log("isDeleted:", isDeleted); + await db.transaction(async function (txn) { + // add data + var values = '', childV = '', imageV = '', stockV = ''; + for (const wi in globalWindows) { + const window = globalWindows[wi]; + let isImage1 = window.VisibilityImage1 == 'true' || window.VisibilityImage1 == 1 ? 1 : 0; + let isImage2 = window.VisibilityImage2 == 'true' || window.VisibilityImage2 == 1 ? 1 : 0; + let isNAImageAvl = window.VisibilityNotExistCamera == 'true' || window.VisibilityNotExistCamera == 1 ? 1 : 0; + let isNAReasonEnable = window.VisibilityNotExistReasonEnable == 'true' || window.VisibilityNotExistReasonEnable == 1 ? 1 : 0; + let isReasonEnable = window.VisibilityExistReasonEnable == 'true' || window.VisibilityExistReasonEnable == 1 ? 1 : 0; + let isStockReq = window.VisibilityElementStockRequired == 'true' || window.VisibilityElementStockRequired == 1 ? 1 : 0; + let WindowQuestions = window.WindowQuestions || []; + let WindowStocks = window.WindowStocks || []; + + const wind = WindowData.find(i => i.VisibilityId == window.VisibilityId && i.VisibilityDefinitionId == window.VisibilityDefinitionId); + let isPresent = wind.isPresent != null && wind.isPresent != '' ? wind.isPresent : '0'; + let ReasonId = wind.ReasonId != null ? wind.ReasonId : 0; + let Reason = wind.Reason != null ? wind.Reason : ''; + let NAImage1 = wind.NAImage1 != null ? wind.NAImage1 : ''; + let NAImage1Path = wind.NAImage1Path != null ? wind.NAImage1Path : ''; + let remark = wind.remark != null ? wind.remark : ''; + let WindowSplits = wind.WindowSplits || []; + let QD = wind.WindowQA || {}; + let WStocksData = wind.WStocksData || []; + + let PVIS_HEADER_ID = 'WIND' + wi + (Math.floor(Math.random() * 1000) + 1); + let { VisibilityDefinitionId, MenuId, VisibilityId, VisibilityName, VisibilityTable, VisibilityField, VisibilityValue, ChildName } = window; + let showOtherText = wind.showOtherText == true || wind.showOtherText == '1' ? 1 : 0; + let RemarkText = wind.RemarkText != null ? wind.RemarkText : ''; + console.log('MenuId in savedata:', MenuId); + values += values != '' ? ' , ' : ''; + values += ` ('${PVIS_HEADER_ID}','${MenuId}','${StoreId}','${d3}','${VisibilityDefinitionId}','${VisibilityId}','${VisibilityName}','${VisibilityTable}','${VisibilityField}','${VisibilityValue}','${ChildName}','${isPresent}','${NAImage1}','${ReasonId}','${Reason}','${(remark || '')}','${showOtherText}','${RemarkText}','1','${d3}','${isSpecificMappingEnable}') `; + if (isPresent == 1) { + for (const qtnIndex in WindowQuestions) { + const qtn = WindowQuestions[qtnIndex]; + + let selansid = '', selanswer = '', selimg = '', showImageTag = false; + let id_key = qtn.VisibilityQuestionId + '_AnswerId'; + let ans_key = qtn.VisibilityQuestionId + '_Answer'; + let multi_key = qtn.VisibilityQuestionId + '_MultiOption'; + let date_key = qtn.VisibilityQuestionId + '_Date'; + let img_key = qtn.VisibilityQuestionId + '_ImagePath1'; + let imgname_key = qtn.VisibilityQuestionId + '_ImageName1'; + let rating_key = qtn.VisibilityQuestionId + '_Rating'; + let list_mcdata = []; + let isDisabled = qtn.isDisabled; + + let { VisibilityQuestionId, VisibilityQuestionCode, QuestionType, VQShowCamera } = qtn + let answer = QD[ans_key] || 0; + let answerId = QD[id_key] === 0 ? 0 : (QD[id_key] || ''); + let multi_options_ids = QD[multi_key] || ''; + + if (qtn.QuestionType == 'Number' || qtn.QuestionType == 'Text' || qtn.QuestionType == 'Decimal' || qtn.QuestionType == 'Date') { + showImageTag = (qtn.VQShowCamera == 1 || qtn.VQShowCamera == 'true'); + } + else if ((qtn.QuestionType == 'Single choice list' || qtn.QuestionType == 'Multi choice list')) { + if (qtn.Answers && qtn.Answers.length > 0) { + for (var i = 0; i < qtn.Answers.length; i++) { + let ansss = qtn.Answers[i]; + let isandImgAl = (ansss.VAShowCamera == 'true' || ansss.VAShowCamera == 1); + if (qtn.QuestionType == 'Single choice list' && (isandImgAl && ansss.AnswerId == answerId)) { + showImageTag = true; + } + else if (qtn.QuestionType == 'Multi choice list' && (isandImgAl && answerId.indexOf(ansss.AnswerId) >= 0)) { + showImageTag = true; + } + + } + } + } + + let Image1 = showImageTag == 1 ? QD[imgname_key] : ''; + + + childV += childV != '' ? ' , ' : ''; + childV += ` ('${PVIS_HEADER_ID}','${StoreId}','${d3}','${VisibilityDefinitionId}','${VisibilityId}','${VisibilityQuestionId}','${VisibilityQuestionCode}','${QuestionType}','${answer}','${answerId}','${multi_options_ids}','${Image1}','${showImageTag}','${d3}','${isDisabled}') `; + } + for (const splitItemIndex in WindowSplits) { + const splitItem = WindowSplits[splitItemIndex]; + let Image1Name = splitItem['Image1Name'] != null && splitItem['Image1Name'] != '' ? splitItem['Image1Name'] : ''; + let Image2Name = splitItem['Image2Name'] != null && splitItem['Image2Name'] != '' ? splitItem['Image2Name'] : ''; + Image1Name = isImage1 == 1 ? Image1Name : ''; + Image2Name = isImage2 == 1 ? Image2Name : ''; + + imageV += imageV != '' ? ' , ' : ''; + imageV += ` ('${PVIS_HEADER_ID}','${StoreId}','${d3}','${VisibilityDefinitionId}','${VisibilityId}','${Image1Name}','${Image2Name}','${d3}',${splitItem?.addImg || 0}) `; + } + for (const stockProdIndex in WindowStocks) { + const stockProd = WindowStocks[stockProdIndex]; + let sd = WStocksData.find(i => i.ProductId == stockProd.VisibilityStockValue) || {}; + let stock = sd.Stock != null ? sd.Stock : (sd.Stock == 0 ? sd.Stock : ''); + let isPVisPresent = sd.isPVisPresent != null ? sd.isPVisPresent : 0; + let { VisibilityStockDefinitionId, VisibilityDefinitionId, VisibilityStockTable, VisibilityStockField, VisibilityStockValue, VisibilityStockMBQ, ProductName } = stockProd + stockV += stockV != '' ? ' , ' : ''; + stockV += ` ('${PVIS_HEADER_ID}','${StoreId}','${d3}','${VisibilityDefinitionId}','${VisibilityId}','${VisibilityStockDefinitionId}','${VisibilityStockTable}','${VisibilityStockField}','${VisibilityStockValue}','${VisibilityStockMBQ}','${ProductName}','${stock}','${isPVisPresent}','${d3}') `; + } + + } + } + + console.log('values:', values); + + + let add_hdr_data = `INSERT INTO ${AppTables.PAIDVIS_HDR_DATA} (PVIS_HEADER_ID,MENU_ID,STORE_ID,VISIT_DATE,PVIS_DEFINITION_ID,PVIS_ID,PVIS_NAME,PVIS_TABLE,PVIS_FIELD,PVIS_VALUE,CHILD_NAME,IS_PRESENT,PVIS_NA_IMAGE,REASON_ID,REASON,REMARK,SHOW_RSN_REMARK,REASON_REMARK,IS_UPDATED,ADDED_DATE, IS_STORE_SPECIFIC) VALUES ${values} `; + let add_child_data = `INSERT INTO ${AppTables.PAIDVIS_CHILD_DATA} (PVIS_HEADER_ID,STORE_ID,VISIT_DATE,PVIS_DEFINITION_ID,PVIS_ID,QUESTION_ID,QUESTION_CODE,QUESTION_TYPE,ANSWER,ANSWER_ID,MULTI_OPTIONS_IDS,IMAGE1,IMAGE_ALLOW1,ADDED_DATE,IS_DISABLED) VALUES ${childV} `; + let add_images_data = `INSERT INTO ${AppTables.PAIDVIS_IMAGES} (PVIS_HEADER_ID,STORE_ID,VISIT_DATE,PVIS_DEFINITION_ID,PVIS_ID,IMAGE1,IMAGE2,ADDED_DATE,ADD_IMAGES) VALUES ${imageV} `; + let add_stock_data = `INSERT INTO ${AppTables.PAIDVIS_STOCK_DATA} (PVIS_HEADER_ID,STORE_ID,VISIT_DATE,PVIS_DEFINITION_ID,PVIS_ID,PVIS_STOCK_DEFINITION_ID,PVIS_STOCK_TABLE,PVIS_STOCK_FIELD,PVIS_STOCK_VALUE,PVIS_STOCK_MBQ,PRODUCT_NAME,STOCK,IS_PVIS_PRESENT,ADDED_DATE) VALUES ${stockV} `; + + + await txn.executeSql(add_hdr_data, [], async function (txn2, txnres) { + console.log('st header data added'); + var isSplitImageAdded = true, isStockAdded = true, isChildAdded = true; + if (imageV != '') { + isSplitImageAdded = await executeQuery(add_images_data); + } + if (stockV != '') { + isStockAdded = await executeQuery(add_stock_data); + } + if (childV != '') { + isChildAdded = await executeQuery(add_child_data); + } + + if (!isSplitImageAdded) { + setProcessing(false); notify('Cannot add paid visibility images'); + } + else if (!isStockAdded) { + setProcessing(false); notify('Cannot add paid visibility stock data'); + } + else if (!isChildAdded) { + setProcessing(false); notify('Cannot add paid visibility questions data'); + } + else { + // clear store data in local storage to avoiding re-set data for the store + clear_item('storeData') + setProcessing(false); notify('Paid visibility updated successfully'); + props.navigation.goBack(); + } + + + }, function (txnE, txnerr) { console.log(txnerr); setProcessing(false); notify('Cannot add paid visibility data'); },); + }); + } catch (err) { + console.log(err); + } + } + + async function removePreviousData() { + let { StoreId } = storeData; + let { PSAllow } = currentMenu + let deleteOnlyCatData = ShowCatWise && PSAllow && FilteredPromoValues.length > 0; + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + let sq = `Select * FROM ${AppTables.PAIDVIS_HDR_DATA} WHERE STORE_ID='${StoreId}' and MENU_ID='${currentMenu.MenuId}' and VISIT_DATE='${d2}' `; + if (deleteOnlyCatData) { + let FilterIdsJoin = FilteredPromoValues.join(','); + sq += ` and PVIS_VALUE in (${FilterIdsJoin}) `; + } + await txn.executeSql(sq, [], async function (txn2, txnres) { + if (txnres.rows.length > 0) { + let arr = []; + let isHdrDel = false, isQtnsDel = false, isImagesDel = false, isStockDel = false; + for (let i = 0; i < txnres.rows.length; i++) { + let data = txnres.rows.item(i); + let { PVIS_HEADER_ID } = data; + arr.push(PVIS_HEADER_ID); + if (i == txnres.rows.length - 1) { + let AllHdrIds = `'${arr.join("','")}'`; + + await txn.executeSql(`DELETE FROM ${AppTables.PAIDVIS_HDR_DATA} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' and PVIS_HEADER_ID in (${AllHdrIds}) `, [], async function (txn2, txnres) { + console.log('window hdr data deleted'); + isHdrDel = true; + if (isHdrDel && isHdrDel && isImagesDel && isStockDel) { + resolve(true); + } + }, function (txnE, txnerr) { console.log(txnerr); },); + await txn.executeSql(`DELETE FROM ${AppTables.PAIDVIS_CHILD_DATA} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' and PVIS_HEADER_ID in (${AllHdrIds}) `, [], async function (txn2, txnres) { + console.log('window child data deleted'); + isQtnsDel = true; + if (isHdrDel && isHdrDel && isImagesDel && isStockDel) { + resolve(true); + } + }, function (txnE, txnerr) { console.log(txnerr); },); + await txn.executeSql(`DELETE FROM ${AppTables.PAIDVIS_IMAGES} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' and PVIS_HEADER_ID in (${AllHdrIds}) `, [], async function (txn2, txnres) { + console.log('window images data deleted'); + isImagesDel = true; + if (isHdrDel && isHdrDel && isImagesDel && isStockDel) { + resolve(true); + } + }, function (txnE, txnerr) { console.log(txnerr); },); + await txn.executeSql(`DELETE FROM ${AppTables.PAIDVIS_STOCK_DATA} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' and PVIS_HEADER_ID in (${AllHdrIds}) `, [], async function (txn2, txnres) { + console.log('window stock data deleted'); + isStockDel = true; + if (isHdrDel && isHdrDel && isImagesDel && isStockDel) { + resolve(true); + } + }, function (txnE, txnerr) { console.log(txnerr); },); + + } + } + } + else { + resolve(true); + } + }, function (txnE, txnerr) { console.log(txnerr); resolve(false); },); + + + }); + + }).then((val) => { + return val; + }).catch((err) => { + console.log('error:', err); + return false; + }) + } + + async function executeQuery(q) { + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + await txn.executeSql(q, [], async function (txn2, txnres2) { + resolve(true); + }, function (Etxn, txnerr) { console.log(txnerr); resolve(false) }); + }); + }).then((val) => { + return val; + }).catch((err) => { + console.log(err); + return false; + }) + } + + async function validate() { + let isValid = true; + let isListedSKUIndex = KPIFields.findIndex(i => i.KPIFieldName == 'ListedSKUCheckbox'); + let isListedSKUKPIObj = isListedSKUIndex >= 0 ? KPIFields[isListedSKUIndex] : {}; + let isListedSKUEnable = isListedSKUIndex >= 0 ? isListedSKUKPIObj['KPIFieldEnable'] : true; + function showError(obj, isErr) { + setErrorField(obj); + setError(isErr); + } + return new Promise((resolve, reject) => { + for (const [index, window] of globalWindows.entries()) { + console.log(globalWindows, "globalWindowsglobalWindows"); + console.log(window, "windowwindow", WindowData, "WindowDataWindowData"); + let isImage1 = window.VisibilityImage1 == 'true' || window.VisibilityImage1 == 1 ? 1 : 0; + let isImage2 = window.VisibilityImage2 == 'true' || window.VisibilityImage2 == 1 ? 1 : 0; + let isNAImageAvl = window.VisibilityNotExistCamera == 'true' || window.VisibilityNotExistCamera == 1 ? 1 : 0; + let isNAReasonEnable = window.VisibilityNotExistReasonEnable == 'true' || window.VisibilityNotExistReasonEnable == 1 ? 1 : 0; + let isReasonEnable = window.VisibilityExistReasonEnable == 'true' || window.VisibilityExistReasonEnable == 1 ? 1 : 0; + let isStockReq = window.VisibilityElementStockRequired == 'true' || window.VisibilityElementStockRequired == 1 ? 1 : 0; + let StockQtyRequired = window.StockQtyRequired == 'true' || window.StockQtyRequired == 1 ? 1 : 0; + let WindowQuestions = window.WindowQuestions || []; + console.log(WindowQuestions, 'WindowQuestionSSSS') + let WindowStocks = window.WindowStocks || []; + const wind = WindowData.find(i => i.VisibilityId == window.VisibilityId && i.VisibilityDefinitionId == window.VisibilityDefinitionId); + let isPresent = wind.isPresent != null && wind.isPresent != '' ? wind.isPresent : '0'; + let ReasonId = wind.ReasonId != null ? wind.ReasonId : ''; + + let Reason = wind.Reason != null ? wind.Reason : ''; + let NAImage1 = wind.NAImage1 != null ? wind.NAImage1 : ''; + let NAImage1Path = wind.NAImage1Path != null ? wind.NAImage1Path : ''; + let remark = wind.remark != null ? wind.remark : ''; + let WindowSplits = wind.WindowSplits || []; + let QD = wind.WindowQA || {}; + + let WStocksData = wind.WStocksData || []; + let showOtherText = wind.showOtherText != null ? wind.showOtherText : false; + + let errorobj = { 'EF_Window': window }; + + if (isPresent == '1') { + if (isReasonEnable == true && ReasonId == '') { + errorobj['EF_NExistReason'] = "NExistReason"; + showError(errorobj, true); + notify(`${ST.Pleaseselectreasonfor} ${window.VisibilityName} `, 'LONG'); + resolve(false); + return; + } else { + if (StoreCameraAllow && window.NoOfSplit > 0 && WindowSplits.length > 0 && (isImage1 == 1 || isImage2 == 1)) { + for (const splitItemIndex in WindowSplits) { + const splitItem = WindowSplits[splitItemIndex]; + let Image1Name = splitItem['Image1Name'] != null && splitItem['Image1Name'] != '' ? splitItem['Image1Name'] : ''; + let Image2Name = splitItem['Image2Name'] != null && splitItem['Image2Name'] != '' ? splitItem['Image2Name'] : ''; + let addImg = splitItem['addImg'] != null && splitItem['addImg'] != '' ? splitItem['addImg'] : ''; + let addImgFlag = true + console.log('Image2Name', Image2Name, isImage2); + if (addImg ? Image1Name == '' : (isImage1 == 1 && Image1Name == '')) { + errorobj['EF_splitImage1'] = "splitImage1"; + errorobj['EF_splitItemIndex'] = splitItemIndex; + showError(errorobj, true); + notify(`${ST.Pleaseclickallimagesfor} ${window.VisibilityName}`, 'LONG'); + resolve(false); + addImgFlag = false + return; + } else if ((addImg && !addImgFlag) ? (Image2Name == '') : (addImg ? false : (isImage2 == 1 && Image2Name == ''))) { + console.log("tes---", addImg, !addImgFlag, (addImg && !addImgFlag) ? (Image2Name == '') : (addImg ? false : (isImage2 == 1 && Image2Name == ''))) + errorobj['EF_splitImage2'] = "splitImage2"; + errorobj['EF_splitItemIndex'] = splitItemIndex; + showError(errorobj, true); + notify(`${ST.Pleaseclickallimagesfor} ${window.VisibilityName}`, 'LONG'); + resolve(false); + addImgFlag = false + return; + } + } + } + + if (isStockReq == 1) { + let isProductSelected = false; + for (const stockProdIndex in WindowStocks) { + const stockProd = WindowStocks[stockProdIndex]; + + let sd = WStocksData.find(i => i.ProductId == stockProd.VisibilityStockValue) || {}; + let stock = sd.Stock != null ? sd.Stock : (sd.Stock == 0 ? sd.Stock : ''); + let isPVisPresent = sd.isPVisPresent != null ? sd.isPVisPresent : 0; + + if (isPVisPresent == 1) { + isProductSelected = true; + } + + if ((isListedSKUEnable == true && isPVisPresent == 1 && StockQtyRequired == 1 && stock == '') || (isListedSKUEnable != true && stock !== 0 && (stock == null || stock == ''))) { + errorobj['EF_stock'] = "input1_"; + errorobj['EF_stockProdIndex'] = stockProdIndex; + let refIn1 = inputRefs.current['input1_' + window.VisibilityDefinitionId + '_' + stockProdIndex]; + if (refIn1 != null) { + refIn1.focus(); + } + showError(errorobj, true); + notify(`${ST.Pleaseenterstockfor} ${window.VisibilityName} ( ${stockProd.ProductName} ) `, 'LONG'); + resolve(false); + return; + } + + if (isListedSKUEnable == true && stockProdIndex == WindowStocks.length - 1) { + if (!isProductSelected) { + errorobj['EF_isProductSelected'] = "isProductSelected"; + showError(errorobj, true); + notify(`${ST.PleaseselectatleastoneSKUfor} ${window.VisibilityName} `, 'LONG'); + resolve(false); + return; + } + } + } + } + + if (WindowQuestions.length > 0) { + for (const qtnIndex in WindowQuestions) { + const qtn = WindowQuestions[qtnIndex]; + + let selansid = '', selanswer = '', selimg = '', showImageTag = false; + let id_key = qtn.VisibilityQuestionId + '_AnswerId'; + let ans_key = qtn.VisibilityQuestionId + '_Answer'; + let multi_key = qtn.VisibilityQuestionId + '_MultiOption'; + let date_key = qtn.VisibilityQuestionId + '_Date'; + let img_key = qtn.VisibilityQuestionId + '_ImagePath1'; + let imgname_key = qtn.VisibilityQuestionId + '_ImageName1'; + let rating_key = qtn.VisibilityQuestionId + '_Rating'; + + let isDisabled = qtn.isDisabled; + + if (!isDisabled) { + let list_mcdata = []; + errorobj['EF_qtn'] = qtn; + + let isImgAllowed = false; + + if (qtn.QuestionType == 'Single choice list') { + selansid = QD[id_key]; + + // Determine if image is allowed based on the selected answer + for (let i = 0; i < qtn.Answers.length; i++) { + if (qtn.Answers[i].AnswerId == selansid) { + isImgAllowed = (qtn.Answers[i].VACameraMandatory == 'true' || qtn.Answers[i].VACameraMandatory == 1); + break; + } + } + + } else if (qtn.QuestionType == 'Multi choice list') { + selansid = QD[multi_key] != null && QD[multi_key] != '' ? QD[multi_key].split(',') : []; + + // Determine if image is allowed based on any selected answer + for (let i = 0; i < qtn.Answers.length; i++) { + if (selansid.indexOf(qtn.Answers[i].AnswerId.toString()) >= 0 && (qtn.Answers[i].VACameraMandatory == 'true' || qtn.Answers[i].VACameraMandatory == 1)) { + isImgAllowed = true; + break; + } + } + } + + let checkForAnsKey = (qtn.QuestionType == 'Decimal' || qtn.QuestionType == 'Number' || qtn.QuestionType == 'Text' || qtn.QuestionType == 'Date' || qtn.QuestionType == 'Rating' || qtn.QuestionType == 'QR'); + + if (qtn.QuestionType == 'Multi choice list' && selansid.length <= 0) { + errorobj['EF_Qtn_MultiChoice'] = 'Qtn_MultiChoice'; + showError(errorobj, true); + notify(`${ST.Pleaseselectoptionsfortherequiredfield} ${ST.In} ${window.VisibilityName}`, 'SHORT'); + resolve(false); + return; + } else if (checkForAnsKey && (Object.keys(QD).indexOf(ans_key) < 0 || (Object.keys(QD).indexOf(ans_key) >= 0 && QD[ans_key] === ''))) { + errorobj['EF_Qtn_Date'] = 'Qtn_Date'; + showError(errorobj, true); + let msg = (qtn.QuestionType == 'Date' ? `${ST.Pleasepickadatefortherequiredfield} ${ST.In} ${window.VisibilityName}` : (qtn.QuestionType == 'Rating' ? `${ST.Pleaseselectratingfortherequiredfield} ${ST.In} ${window.VisibilityName}` : `${ST.Pleasefillalltherequiredfield} ${ST.In} ${window.VisibilityName}`)); + notify(msg, 'SHORT'); + resolve(false); + return; + } else if (Object.keys(QD).indexOf(id_key) < 0 || (Object.keys(QD).indexOf(id_key) >= 0 && (QD[id_key] === ''))) { + errorobj['EF_Qtn_Input'] = 'Qtn_Input'; + showError(errorobj, true); + notify(`${ST.Pleasefillalltherequiredfield} ${ST.In} ${window.VisibilityName}`, 'SHORT'); + resolve(false); + return; + } else if (isImgAllowed && StoreCameraAllow && (Object.keys(QD).indexOf(img_key) < 0 || (Object.keys(QD).indexOf(img_key) >= 0 && QD[img_key] === ''))) { + errorobj['EF_Qtn_Image'] = 'Qtn_Image'; + showError(errorobj, true); + notify(`${ST.Pleaseaddimages} ${ST.In} ${window.VisibilityName}`, 'SHORT'); + resolve(false); + return; + } else { + console.log('no condition found'); + } + + if ((qtn.QuestionType == 'Single choice list' || qtn.QuestionType == 'Multi choice list')) { + if (qtn.Answers && qtn.Answers.length > 0) { + for (var j = 0; j < qtn.Answers.length; j++) { + let ansss = qtn.Answers[j]; + let isandImgAl = (ansss.VAShowCamera == 'true' || ansss.VAShowCamera == 1); + if (qtn.QuestionType == 'Single choice list' && (isandImgAl && ansss.AnswerId == selansid)) { + showImageTag = true; + } else if (qtn.QuestionType == 'Multi choice list' && (isandImgAl && selansid.indexOf(ansss.AnswerId) >= 0)) { + showImageTag = true; + } + } + } + } + + if (showImageTag && StoreCameraAllow && (Object.keys(QD).indexOf(img_key) < 0 || (Object.keys(QD).indexOf(img_key) >= 0 && QD[img_key] === ''))) { + errorobj['EF_Qtn_Image'] = 'Qtn_Image'; + showError(errorobj, true); + notify(`${ST.Pleaseaddimages} ${ST.In} ${window.VisibilityName}`, 'SHORT'); + resolve(false); + return; + } + } + } + } + + } + } else { + if (isNAReasonEnable == true && ReasonId == '') { + errorobj['EF_NExistReason'] = "NExistReason"; + showError(errorobj, true); + notify(`${ST.Pleaseselectreasonfor} ${window.VisibilityName}`, 'LONG'); + resolve(false); + return; + } else if (isNAReasonEnable == true && showOtherText == true && (wind.RemarkText == null || wind.RemarkText == '')) { + errorobj['EF_NExistRemark'] = "NExistRemark"; + showError(errorobj, true); + notify(`${ST.PleaseEnterRemarkFor} ${window.VisibilityName} `, 'LONG'); + resolve(false); + return; + } else if (StoreCameraAllow && isNAImageAvl == true && NAImage1 == '') { + errorobj['EF_NExistImage'] = "NExistImage"; + showError(errorobj, true); + notify(`${ST.Pleaseclickimagefor} ${window.VisibilityName}`, 'LONG'); + resolve(false); + return; + } + } + + if (index === globalWindows?.length - 1) { + resolve(true); + return; + } + } + }).then((val) => { return val }) + .catch((err) => { console.log(err); return false }); + } + + + function onselectionChange3(option, keyLbl, keyVal, otherData) { + setErrorField({}); + setError(false); + let item = otherData.window; + let allData = WindowData; + let defData = { 'VisibilityId': item.VisibilityId, 'VisibilityDefinitionId': item.VisibilityDefinitionId }; + const win_index = allData.findIndex(i => i.VisibilityId == item.VisibilityId && i.VisibilityDefinitionId == item.VisibilityDefinitionId); + let wind = win_index >= 0 ? (allData[win_index] || defData) : defData; + wind[keyVal] = option.value; + wind[keyLbl] = option.label; + + if (keyLbl == 'Reason') { + let rsn_Index = reasons_list.findIndex(i => i.ReasonId == option.value); + + if (rsn_Index >= 0) { + let rsn = reasons_list[rsn_Index]; + let IsRemarkTaken = rsn.IsRemarkTaken == 1 || rsn.IsRemarkTaken == '1' ? true : false; + + if (IsRemarkTaken == true) { + wind['showOtherText'] = true; + } + else { + wind['showOtherText'] = false; + } + } + } + + win_index >= 0 ? allData[win_index] = wind : allData.push(wind); + console.log('allData:', allData); + let objIndex = InputChange.findIndex(i => i.VisibilityId == item.VisibilityId && i.VisibilityDefinitionId == item.VisibilityDefinitionId); + let winArr = [...InputChange] + winArr[objIndex].Flag = true + + setInputChange(winArr) + // console.log("setInputChange-",InputChange) + WindowDataRef.current = allData + setWindowData(allData); + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + + function onselectionChange(option, qtn, window) { + setErrorField({}); + setError(false); + let allData = WindowData; + let defData = { 'VisibilityId': window.VisibilityId, 'VisibilityDefinitionId': window.VisibilityDefinitionId }; + const wind_index = allData.findIndex(i => i.VisibilityId == window.VisibilityId && i.VisibilityDefinitionId == window.VisibilityDefinitionId); + let wind = wind_index >= 0 ? allData[wind_index] : defData; + let data = wind.WindowQA || {}; + let id_key = qtn.VisibilityQuestionId + '_AnswerId'; + let ans_key = qtn.VisibilityQuestionId + '_Answer'; + data[id_key] = option.value; + data[ans_key] = option.label; + + wind['WindowQA'] = data; + wind_index >= 0 ? allData[wind_index] = wind : allData.push(wind); + let objIndex = InputChange.findIndex(i => i.VisibilityId == window.VisibilityId && i.VisibilityDefinitionId == window.VisibilityDefinitionId); + let winArr = [...InputChange] + winArr[objIndex].Flag = true + + setInputChange(winArr) + WindowDataRef.current = allData + setWindowData(allData); + + let aq_ans = qtn.Answers != null ? qtn.Answers : []; + let ans_obj = aq_ans.find(i => i.AnswerId == option.value) || {}; + let EQtns = ans_obj.VAQuestionEnable != null && ans_obj.VAQuestionEnable != '' ? ans_obj.VAQuestionEnable.replace(' ', '').split(',') : []; + let DQtns = ans_obj.VAQuestionDisable != null && ans_obj.VAQuestionDisable != '' ? ans_obj.VAQuestionDisable.replace(' ', '').split(',') : []; + + let sqtns = window.WindowQuestions || [] + + if (EQtns.length > 0) { + enableQtns(sqtns, EQtns, DQtns, data, wind, wind_index, allData, window) + } + else if (DQtns.length > 0) { + disableQtns(sqtns, DQtns, data, wind, wind_index, allData, window) + } + else { + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + BgUnsavedChanges(true) + + } + + async function disableQtns(sqtns, DQtns, data, wind = {}, wind_index = -1, allData = [], window = {}) { + + if (DQtns.length > 0) { + new Promise.all( + DQtns.map((qid, q_index) => { + let s_qtnindex = sqtns.findIndex(i => i.VisibilityQuestionId == qid) || {}; + let s_qtn = sqtns[s_qtnindex]; + if (s_qtn != null) { + s_qtn['isDisabled'] = true + sqtns[s_qtnindex] = s_qtn; + let id_key = s_qtn.VisibilityQuestionId + '_AnswerId'; + let ans_key = s_qtn.VisibilityQuestionId + '_Answer'; + data[id_key] = 0; + data[ans_key] = ''; + + wind['WindowQA'] = data; + wind_index >= 0 ? allData[wind_index] = wind : allData.push(wind); + return false + } else { + return false + } + }) + ).then(async (val) => { + ///jp fixed queation enable disable on app kill + let allwindows = Windows; + let windowIndex = allwindows.findIndex(i => i.VisibilityDefinitionId == window.VisibilityDefinitionId && i.VisibilityId == window.VisibilityId) + let dataIndex = allData.findIndex(i => i.VisibilityDefinitionId == window.VisibilityDefinitionId && i.VisibilityId == window.VisibilityId); + if (windowIndex >= 0) { + window['WindowQuestions'] = sqtns; + allwindows[windowIndex] = window; + // ✅ Update in allData too + if (dataIndex >= 0) { + allData[dataIndex]['WindowQuestions'] = sqtns; + } + // ✅ Set final updated refs and states + WindowDataRef.current = allData; + setWindowData(allData); + setWindows(allwindows); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + + }) + } + } + + async function enableQtns(sqtns, EQtns, DQtns, data, wind = {}, wind_index = -1, allData = [], window = {}) { + new Promise.all( + EQtns.map((qid, q_index) => { + let s_qtnindex = sqtns.findIndex(i => i.VisibilityQuestionId == qid) || {}; + let s_qtn = sqtns[s_qtnindex]; + if (s_qtn != null) { + s_qtn['isDisabled'] = false + sqtns[s_qtnindex] = s_qtn; + return false + } + else { + return false + } + }) + ).then(async (val) => { + if (DQtns.length > 0) { + await disableQtns(sqtns, DQtns, data, wind, wind_index, allData, window) + } + else { + ///jp fixed queation enable disable on app kill + let allwindows = Windows; + let windowIndex = allwindows.findIndex(i => i.VisibilityDefinitionId == window.VisibilityDefinitionId && i.VisibilityId == window.VisibilityId) + let dataIndex = allData.findIndex(i => + i.VisibilityDefinitionId == window.VisibilityDefinitionId && + i.VisibilityId == window.VisibilityId + ); + + if (windowIndex >= 0) { + window['WindowQuestions'] = sqtns; + allwindows[windowIndex] = window; + // ✅ Update in allData too + if (dataIndex >= 0) { + allData[dataIndex]['WindowQuestions'] = sqtns; + } + + // ✅ Set final updated refs and states + WindowDataRef.current = allData; + setWindows(allwindows); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + } + }) + } + + async function setMultiSelectValue(selectedItems = [], qtn = {}, window = {}) { + setErrorField({}); + setError(false); + console.log('setMultiSelectValue', selectedItems); + let id_key = qtn.VisibilityQuestionId + '_AnswerId'; + let ans_key = qtn.VisibilityQuestionId + '_Answer'; + let multi_key = qtn.VisibilityQuestionId + '_MultiOption'; + + let allData = WindowData; + let defData = { 'VisibilityId': window.VisibilityId, 'VisibilityDefinitionId': window.VisibilityDefinitionId }; + const wind_index = allData.findIndex(i => i.VisibilityId == window.VisibilityId && i.VisibilityDefinitionId == window.VisibilityDefinitionId); + let wind = wind_index >= 0 ? allData[wind_index] : defData; + let obj = wind.WindowQA || {}; + obj[id_key] = 0; + obj[multi_key] = selectedItems.join(','); + let anss = []; + selectedItems.map((itemValue) => { + let ans = qtn.Answers.find(c1 => c1.AnswerId == itemValue); + if (ans.Answer) { anss.push(ans.Answer) } + }); + obj[ans_key] = anss.join(','); + console.log('obj:', obj); + + wind['WindowQA'] = obj; + wind_index >= 0 ? allData[wind_index] = wind : allData.push(wind); + + let objIndex = InputChange.findIndex(i => i.VisibilityId == window.VisibilityId && i.VisibilityDefinitionId == window.VisibilityDefinitionId); + let winArr = [...InputChange] + winArr[objIndex].Flag = true + + setInputChange(winArr) + WindowDataRef.current = allData + setWindowData(allData); + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + + function setTextValue(value, qtn, window, type = "") { + if (value != '') { + let isValid = validateNumber(value, type); + if (!isValid) { + return; + } + } + + setErrorField({}); + setError(false); + let id_key = qtn.VisibilityQuestionId + '_AnswerId'; + let ans_key = qtn.VisibilityQuestionId + '_Answer'; + + let allData = WindowData; + let defData = { 'VisibilityId': window.VisibilityId, 'VisibilityDefinitionId': window.VisibilityDefinitionId }; + const wind_index = allData.findIndex(i => i.VisibilityId == window.VisibilityId && i.VisibilityDefinitionId == window.VisibilityDefinitionId); + let wind = wind_index >= 0 ? allData[wind_index] : defData; + let obj = wind.WindowQA || {}; + + if (qtn.QuestionType == 'Date') { + let date_key = qtn.VisibilityQuestionId + '_Date'; + let d = value != null ? new Date(value) : new Date(); + let mfdate = moment(d).format('MM/YYYY'); + showQtnDatePicker(qtn, window, false); + obj[id_key] = 0; + obj[ans_key] = mfdate; + obj[date_key] = moment(d).format('MM/DD/YYYY'); + } + else { + obj[id_key] = 0; + obj[ans_key] = value; + } + + console.log(value, obj); + wind['WindowQA'] = obj; + wind_index >= 0 ? allData[wind_index] = wind : allData.push(wind); + + let objIndex = InputChange.findIndex(i => i.VisibilityId == window.VisibilityId && i.VisibilityDefinitionId == window.VisibilityDefinitionId); + let winArr = [...InputChange] + winArr[objIndex].Flag = true + + setInputChange(winArr) + WindowDataRef.current = allData + setWindowData(allData); + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + console.log("tyeop-14") + setrerenderdata(!rerenderdata); + } + + function showQtnDatePicker(qtn, window, show = false) { + let allQtns = window.WindowQuestions || []; + let newqtnIndex = allQtns.findIndex(q => q.VisibilityQuestionId == qtn.VisibilityQuestionId); + + if (newqtnIndex >= 0) { + let newqtn = allQtns[newqtnIndex]; + newqtn.showDatePicker = show; + allQtns[newqtnIndex] = newqtn; + window['WindowQuestions'] = allQtns; + let allWindows = Windows; + const winIndex = allWindows.findIndex(i => i.VisibilityId == window.VisibilityId && i.VisibilityDefinitionId == window.VisibilityDefinitionId) || {}; + allWindows[winIndex] = window; + setWindows(allWindows); + setGlobalWindows(allwindows); + if (show == true) setrerenderdata(!rerenderdata); + } + } + + function setRatingValue(data) { + setRatingOrder(data); + } + + function onRatingCancel() { + setShowRating(false); + } + + function onRatingSave() { + setShowRating(false); + let qtn = RatingQtn; + let window = RatingWindow; + let id_key = qtn.VisibilityQuestionId + '_AnswerId'; + let ans_key = qtn.VisibilityQuestionId + '_Answer'; + let rating_key = qtn.VisibilityQuestionId + '_Rating'; + let ids = [], anss = []; + RatingOrder.map((item, index) => { + ids.push(item.AnswerId); + anss.push(item.Answer); + }) + + let allData = WindowData; + let defData = { 'VisibilityId': window.VisibilityId, 'VisibilityDefinitionId': window.VisibilityDefinitionId }; + const wind_index = allData.findIndex(i => i.VisibilityId == window.VisibilityId && i.VisibilityDefinitionId == window.VisibilityDefinitionId); + let wind = wind_index >= 0 ? allData[wind_index] : defData; + let obj = wind.WindowQA || {}; + + obj[rating_key] = ids.join(','); + obj[id_key] = 0; + obj[ans_key] = anss.join(','); + + wind['WindowQA'] = obj; + wind_index >= 0 ? allData[wind_index] = wind : allData.push(wind); + + let objIndex = InputChange.findIndex(i => i.VisibilityId == window.VisibilityId && i.VisibilityDefinitionId == window.VisibilityDefinitionId); + let winArr = [...InputChange] + winArr[objIndex].Flag = true + + setInputChange(winArr) + WindowDataRef.current = allData + setWindowData(allData); + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + + + function onChoiceSelect(item, val, key, animatedChoice) { + console.log("checkonchoice:", item, val, key, animatedChoice) + let win_index = InputChange.find(i => i.VisibilityId == item.VisibilityId && i.VisibilityDefinitionId == item.VisibilityDefinitionId) + let changeValue = win_index.Flag; + + if (changeValue) { + setIsPresentClean(val) + setDataCleanAnim(animatedChoice) + setDataCleanItem(item) + setDataCleanModal(true) + return + } + + var val1 = 0; + val == 1 ? val1 = 1 : ''; + + if (animatedChoice != null) { + Animated.timing(animatedChoice, { + toValue: val1, + duration: 400, + useNativeDriver: false, + }).start(); + } + onWindowDataChange(item, val, key) + } + + function onWindowDataChange(item, val, key) { + let allData = WindowData; + let defData = { 'VisibilityId': item.VisibilityId, 'VisibilityDefinitionId': item.VisibilityDefinitionId }; + const win_index = allData.findIndex(i => i.VisibilityId == item.VisibilityId && i.VisibilityDefinitionId == item.VisibilityDefinitionId); + let wind = win_index >= 0 ? (allData[win_index] || defData) : defData; + wind[key] = val; + + if (key == 'ReasonId') { + let rsn = reasons_list.find(r => r.ReasonId == val) || {}; + wind['Reason'] = rsn.Reason || ''; + } + + win_index >= 0 ? allData[win_index] = wind : allData.push(wind); + + if (key != "isPresent") { + let objIndex = InputChange.findIndex(i => i.VisibilityId == item.VisibilityId && i.VisibilityDefinitionId == item.VisibilityDefinitionId); + let winArr = [...InputChange] + winArr[objIndex].Flag = true + setInputChange(winArr) + } + + WindowDataRef.current = allData + setWindowData(allData); + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + + + async function setWindowStockVal(val, window, stockProd, key, type = '') { + setErrorField({}); + setError(false); + if (type == 'numeric' && val != '') { + const regex = new RegExp(/^\d+$/); + let isNUmeric = regex.test(val); + if (!isNUmeric) { + notify(ST.Pleaseenterwholenumbersonly, 'SHORT'); + return; + } + } + + let allData = WindowData; + let defData = { 'VisibilityId': window.VisibilityId, 'VisibilityDefinitionId': window.VisibilityDefinitionId }; + const win_index = allData.findIndex(i => i.VisibilityId == window.VisibilityId && i.VisibilityDefinitionId == window.VisibilityDefinitionId); + let wind = win_index >= 0 ? (allData[win_index] || defData) : defData; + let WStocksData = wind['WStocksData'] || []; + let sdIndex = WStocksData.findIndex(i => i.ProductId == stockProd.VisibilityStockValue); + let sd = sdIndex >= 0 ? WStocksData[sdIndex] : { 'ProductId': stockProd.VisibilityStockValue, 'Stock': '' }; + sd[key] = val; + sdIndex >= 0 ? WStocksData[sdIndex] = sd : WStocksData.push(sd); + wind['WStocksData'] = WStocksData; + win_index >= 0 ? allData[win_index] = wind : allData.push(wind); + if (key == 'isPVisPresent') { + let isAllChecked = await verifyAllChecked(val, window, stockProd, key); + wind['isAllSKUChecked'] = isAllChecked; + } + + WindowDataRef.current = allData + setWindowData(allData); + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata4(!rerenderdata4); + } + + async function onCatTextChange(window, key, val) { + setErrorField({}); + setError(false); + let item = window; + let allData = WindowData; + let defData = { 'VisibilityId': item.VisibilityId, 'VisibilityDefinitionId': item.VisibilityDefinitionId }; + const win_index = allData.findIndex(i => i.VisibilityId == item.VisibilityId && i.VisibilityDefinitionId == item.VisibilityDefinitionId); + let wind = win_index >= 0 ? (allData[win_index] || defData) : defData; + wind[key] = val; + + win_index >= 0 ? allData[win_index] = wind : allData.push(wind); + + WindowDataRef.current = allData + setWindowData(allData); + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + + + async function verifyAllChecked(val, window, stockProd, key) { + return await new Promise((resolve, reject) => { + let WindowStocks = window.WindowStocks || []; + let allData = WindowData; + const win_index = allData.findIndex(i => i.VisibilityId == window.VisibilityId && i.VisibilityDefinitionId == window.VisibilityDefinitionId); + let wind = win_index >= 0 ? (allData[win_index] || defData) : defData; + let WStocksData = wind['WStocksData'] || []; + if (WindowStocks.length > 0) { + let isAllChecked = 1; + for (var i = 0; i < WindowStocks.length; i++) { + let stockProd = WindowStocks[i]; + + let sdIndex1 = WStocksData.findIndex(a => a.ProductId == stockProd.VisibilityStockValue); + let sd1 = sdIndex1 >= 0 ? WStocksData[sdIndex1] : {}; + let isPVisPresent = sd1.isPVisPresent; + if (isPVisPresent == null || isPVisPresent == '' || isPVisPresent == 0 || isPVisPresent == '0') { + isAllChecked = 0 + } + + if (i == WindowStocks.length - 1) { + resolve(isAllChecked); + } + } + } + else { + resolve(0); + } + + }).catch((err) => { + console.log(err); + return 0; + }); + } + + function onWindowDataClean() { + if (DataCleanAnim != null) { + console.log("anim---") + let anim = isPresentClean == 1 ? 1 : ''; + Animated.timing(DataCleanAnim, { + toValue: anim, + duration: 400, + useNativeDriver: false, + }).start(); + } + let allData = WindowData; + let WindowSplits = []; + for (var s = 0; s < DataCleanItem.NoOfSplit; s++) { + let obj = { 'Image1Name': '', 'Image1': '', 'Image2Name': '', 'Image2': '', img1Required: true, img2Required: true }; + WindowSplits.push(obj); + } + + let defData = { 'VisibilityId': DataCleanItem.VisibilityId, 'VisibilityDefinitionId': DataCleanItem.VisibilityDefinitionId, 'isAllSKUChecked': 0, 'WindowSplits': WindowSplits, 'WindowQA': {}, 'WStocksData': [], isPresent: isPresentClean }; + const win_index = allData.findIndex(i => i.VisibilityId == DataCleanItem.VisibilityId && i.VisibilityDefinitionId == DataCleanItem.VisibilityDefinitionId); + allData[win_index] = defData + + let objIndex = InputChange.findIndex((obj => obj.VisibilityId == DataCleanItem.VisibilityId && obj.VisibilityDefinitionId == DataCleanItem.VisibilityDefinitionId)); + let winArr = [...InputChange] + winArr[objIndex].Flag = false + + setInputChange(winArr) + WindowDataRef.current = allData + setWindowData(allData); + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setDataCleanModal(false) + setrerenderdata(!rerenderdata); + } + + function checkAllSKUs(val, window) { + let WindowStocks = window.WindowStocks || []; + let allData = WindowData; + let defData = { 'VisibilityId': window.VisibilityId, 'VisibilityDefinitionId': window.VisibilityDefinitionId }; + const win_index = allData.findIndex(i => i.VisibilityId == window.VisibilityId && i.VisibilityDefinitionId == window.VisibilityDefinitionId); + let wind = win_index >= 0 ? (allData[win_index] || defData) : defData; + let WStocksData = wind['WStocksData'] || []; + console.log('WStocksData before:', WStocksData) + for (var i = 0; i < WindowStocks.length; i++) { + let stockProd = WindowStocks[i]; + + let sdIndex = WStocksData.findIndex(a => a.ProductId == stockProd.VisibilityStockValue); + let sd = sdIndex >= 0 ? WStocksData[sdIndex] : { 'ProductId': stockProd.VisibilityStockValue, 'Stock': '' }; + let isPVisPresent = (val == 1 || val == '1') ? 1 : 0; + sd['isPVisPresent'] = isPVisPresent; + + sdIndex >= 0 ? (WStocksData[sdIndex] = sd) : (WStocksData.push(sd)); + } + + + wind['WStocksData'] = WStocksData; + wind['isAllSKUChecked'] = val == 1 ? 1 : 0; + console.log('wind updated'); + win_index >= 0 ? allData[win_index] = wind : allData.push(wind); + + WindowDataRef.current = allData + setWindowData(allData); + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + + function onSaveCancel() { + setShowAlert(false); + } + + + + function openImageRefView(windowIndex = 0) { + setrefImageIndex(windowIndex); + UpdateShow_zoomImageRef(true); + } + + function FilterStores(searchedQry) { + searchedQry = searchedQry.toLowerCase(); + console.log('searchedQry', searchedQry); + let arr = []; + let newWindows = []; + if (searchedQry != null && searchedQry != '') { + + for (let i = 0; i < globalWindows.length; i++) { + let item = globalWindows[i]; + let { VisibilityName } = item; + if (VisibilityName.toLowerCase().includes(searchedQry)) { + newWindows.push(item); + } + + if (i == globalWindows.length - 1) { + arr = newWindows; + } + } + } + else { + arr = globalWindows; + } + + setWindows(arr); + setrerenderdata(!rerenderdata) + setrerenderdata2(!rerenderdata2) + } + + function renderRatingView() { + let qtn = RatingQtn; + let Answers = qtn.Answers; + let id_key = qtn.VisibilityQuestionId + '_AnswerId'; + let ans_key = qtn.VisibilityQuestionId + '_Answer'; + let rating_key = qtn.VisibilityQuestionId + '_Rating'; + + let newarr = RatingOrder; + if (RatingOrder.length <= 0) { + newarr = Answers; + } + + return ( + + + {ST.DragItemsInOrder} + {ST.Pressandholdtodrag} + { setRatingValue(data) }} + keyExtractor={(item) => item.AnswerId} + renderItem={renderItem} + /> + + { onRatingCancel() }}> + {ST.Cancel} + + { onRatingSave() }}> + {ST.Save} + + + + + ) + } + + function render_Picker(label_key, value_key, onChange = () => { }, selected_data = {}) { + var data = []; + let qtn = selected_data.qtn || {}; + let window = selected_data.window || {}; + let isQtnDisabled = qtn.isDisabled != null || qtn.isDisabled != '' ? false : true; + let allAnswers = qtn.Answers || []; + + allAnswers.map((item, index) => { + let obj = { key: index, label: item[label_key], value: item[value_key] }; + if (selected_data.value == item[label_key]) + obj['component'] = {item[label_key]}; + data.push(obj); + }); + + return ( + { onChange(option, qtn, window) }} + overlayStyle={customStyle.addVisPickerOverlay} + cancelContainerStyle={customStyle.addVisPicker_OptionContainerStyle} + optionStyle={customStyle.addvis_opStyle} + optionTextStyle={customStyle.addvis_opTextStyle} + optionContainerStyle={customStyle.addVisPicker_OptionContainerStyle} + selectedKey={'1'} + disabled={isQtnDisabled} + > + {(selected_data.value != null && selected_data.value != '' ? selected_data.value : '-' + ST.select + '-')} + + ) + } + + function renderDatePicker(qtn, window) { + let qtnn = qtn; + let DateRange = qtn.DateRange; + let maxDate = moment().add(10, 'years').format('MM/DD/YYYY'); + let minDate = moment().subtract(10, 'years').format('MM/DD/YYYY'); + if (DateRange == 'RFD') { + maxDate = moment().format('MM/DD/YYYY'); + } + else if (DateRange == 'RPD') { + minDate = moment().format('MM/DD/YYYY'); + } + + return ( + { setTextValue(selectedDate, qtnn, window) }} + maximumDate={new Date(maxDate)} + minimumDate={new Date(minDate)} + /> + ); + } + + async function OpenImgModal(imgPath, window, splitItem, splitItemIndex, cameraType) { + setSelectedImg(imgPath) + setShowModal(true); + if ((imgPath != '' && imgPath != null)) { + setShowImageSaveOp(false); + } + else { + setShowImageSaveOp(true); + } + setReCapImgModalObj({ window, splitItem, splitItemIndex, cameraType }) + } + + function cancelImage() { + // setImage1(''); + setSelectedImg(''); + setReCapImgModalObj({}) + setShowModal(false); + } + + function _renderWindow() { + let RemarkEnableIndex = KPIFields.findIndex(i => i.KPIFieldName == 'RemarkEnable') + let RemarkEnableKPIObj = RemarkEnableIndex >= 0 ? KPIFields[RemarkEnableIndex] : {}; + let RemarkEnable = RemarkEnableIndex >= 0 ? RemarkEnableKPIObj['KPIFieldEnable'] : false; + + let isListedSKUIndex = KPIFields.findIndex(i => i.KPIFieldName == 'ListedSKUCheckbox'); + let isListedSKUKPIObj = isListedSKUIndex >= 0 ? KPIFields[isListedSKUIndex] : {}; + let isListedSKUEnable = isListedSKUIndex >= 0 ? isListedSKUKPIObj['KPIFieldEnable'] : true; + + let HidePresentYesNoIndex = KPIFields.findIndex(i => i.KPIFieldName == 'HidePresentYesNo'); + let HidePresentYesNoObj = HidePresentYesNoIndex >= 0 ? KPIFields[HidePresentYesNoIndex] : {}; + let HidePresentYesNoEn = HidePresentYesNoIndex >= 0 ? HidePresentYesNoObj['KPIFieldEnable'] : false; + let HidePresentYesNoEnable = HidePresentYesNoEn == 1 || HidePresentYesNoEn == "1" || HidePresentYesNoEn == true ? true : false; + + return ( + + `window_${index.toString()}`} + renderItem={({ item, index }) => { + const window = item; + const windowIndex = index; + let isVisible = Boolean(ItemsInView.find(({ item: i, isViewable }) => i.VisibilityId == window.VisibilityId && i.VisibilityDefinitionId == window.VisibilityDefinitionId && isViewable)) + let AddImageAllow = (window?.AddImageAllow ? true : false) || false + let AddImageMax = (window?.AddImageMax ? window?.AddImageMax : 0) || 0 + let isImage1 = window.VisibilityImage1 == 'true' || window.VisibilityImage1 == 1 ? 1 : 0; + let isImage2 = window.VisibilityImage2 == 'true' || window.VisibilityImage2 == 1 ? 1 : 0; + let isNAImageAvl = window.VisibilityNotExistCamera == 'true' || window.VisibilityNotExistCamera == 1 ? 1 : 0; + let isNAReasonEnable = window.VisibilityNotExistReasonEnable == 'true' || window.VisibilityNotExistReasonEnable == 1 ? 1 : 0; + let VisibilityRefImagePopUp = window.VisibilityRefImagePopUp == 'true' || window.VisibilityRefImagePopUp == true ? true : false; + let isReasonEnable = window.VisibilityExistReasonEnable == 'true' || window.VisibilityExistReasonEnable == 1 ? 1 : 0; + let isStockReq = window.VisibilityElementStockRequired == 'true' || window.VisibilityElementStockRequired == 1 ? 1 : 0; + let StockQtyRequired = window.StockQtyRequired == 'true' || window.StockQtyRequired == 1 ? 1 : 0; + let PromoTitleEnable = window.PromoDefinitionTitleEnable == 'true' || window.PromoDefinitionTitleEnable == 1 ? 1 : 0; + let PromoTitle = window.PromoDefinitionTitle != null && window.PromoDefinitionTitle != 'undefined' ? window.PromoDefinitionTitle : ""; + + let RefImage = window.VisibilityRefImage; + let camera1Label = window.VisibilityImage1Lable || ''; + let camera2Label = window.VisibilityImage2Lable || ''; + let WindowQuestions = window.WindowQuestions || []; + let WindowStocks = window.WindowStocks || []; + + const wind = WindowData.find(i => i.VisibilityId == window.VisibilityId && i.VisibilityDefinitionId == window.VisibilityDefinitionId); + const WIndex = WindowData.findIndex(i => i.VisibilityId == window.VisibilityId && i.VisibilityDefinitionId == window.VisibilityDefinitionId); + let isPresent = wind.isPresent != null && wind.isPresent != '' ? wind.isPresent : '0'; + let ReasonId = wind.ReasonId != null ? wind.ReasonId : ''; + let Reason = wind.Reason != null ? wind.Reason : ''; + let NAImage1 = wind.NAImage1 != null ? wind.NAImage1 : ''; + let NAImage1Path = wind.NAImage1Path != null ? wind.NAImage1Path : ''; + let remark = wind.remark != null ? wind.remark : ''; + let RemarkText = wind.RemarkText != null ? wind.RemarkText : ''; + let showOtherText = wind.showOtherText != null ? wind.showOtherText : false; + let WindowSplits = wind.WindowSplits || []; + let QuestionsData = wind.WindowQA || {}; + let WStocksData = wind.WStocksData || []; + let isAllSKUChecked = wind.isAllSKUChecked == 1 || wind.isAllSKUChecked == "1"; + + + let tempDisable = WindowSplits?.some(item => (isImage1 == 1 && !item?.Image1) || (isImage2 == 1 && !item?.Image2)); + let AddedMax = window?.AddImageMax <= WindowSplits.length + let AddDisable = tempDisable ? true : AddedMax && !tempDisable + + // console.log("wind---",window?.AddImageMax, wind, WIndex); + + + var xpos = isPresent == '1' || isPresent == 1 ? -75 : 0; + if (window.animatedChoice != null) { + xpos = window.animatedChoice.interpolate({ + inputRange: [0, 1], + outputRange: [0, -75], + }); + } + + if (isVisible && window.animatedHeight != null) { + setTimeout(() => { + Animated.timing(window.animatedHeight, { + toValue: 0, + duration: 800, + useNativeDriver: false, + }).start(); + + }, (props.RefImagePopUpTime || 0) * 1000) + } + + + + let EF_Window = errorfield.EF_Window != null ? errorfield.EF_Window : {}; + let show_errorhere = error == true && EF_Window.VisibilityId == window.VisibilityId && EF_Window.VisibilityDefinitionId == window.VisibilityDefinitionId; + + // if not Present fields + + // this will show error field in red (if window is present and exist reason is enabled and not filled ) or (if window is not present and Not exist reason is enabled and not filled ) + let EF_NExistReason = errorfield.EF_NExistReason || ''; + let EStyle_NExistReason = show_errorhere && EF_NExistReason == 'NExistReason' ? customStyle.stk_inptSTyle_error : {}; + + let EF_NExistRemark = errorfield.EF_NExistRemark || ''; + let EStyle_NExistRemark = show_errorhere && EF_NExistRemark == 'NExistRemark' ? customStyle.stk_inptSTyle_error : {}; + + let EF_NExistImage = errorfield.EF_NExistImage || ''; + let EStyle_NExistImage = show_errorhere && EF_NExistImage == 'NExistImage' ? customStyle.error_CatImage2 : {}; + + return ( + + + + {window.VisibilityName} + { + window && window.ChildName != "" && {window.ChildName} + } + {(PromoTitleEnable == 1 && PromoTitle != null && PromoTitle != '') && {PromoTitle}} + { openImageRefView(index) }}> + + + + + {VisibilityRefImagePopUp && + + + } + + + + + {!HidePresentYesNoEnable && + {ST.IsPresent} + + + + { onChoiceSelect(window, 1, 'isPresent', window.animatedChoice) }}> + {ST.Yes} + + { onChoiceSelect(window, 0, 'isPresent', window.animatedChoice) }}> + {ST.No} + + + + } + + {((isPresent != '1' && isNAReasonEnable == true) || (isPresent == '1' && isReasonEnable == true)) && + + {ST.SelectReason} + {} + + } + + + {(isPresent != '1' && isNAImageAvl == true) && + + + + {ST.CaptureImage} + + + + {(NAImage1Path == '' || NAImage1Path == null) && + { openCamera(window, {}, 0, '1', '3') }}> + + + } + {(NAImage1Path != '' && NAImage1Path != null) && + + + { openCamera(window, {}, 0, '1', '3') }}> + + + + } + + + + + + } + + + {isPresent != '1' && showOtherText == true && + + {ST.EnterRemark} + { onCatTextChange(window, 'RemarkText', val, 'text') }} + /> + + } + + {(isPresent == '1') && + + + {(isStockReq == true && WindowStocks.length > 0) && + + + {(isListedSKUEnable == true ? ST.SelectProducts : 'Enter Stocks')} + + {isListedSKUEnable == true && + + { checkAllSKUs((isAllSKUChecked == 1 ? 0 : 1), window) }}> + { let val1 = (val == true) ? 1 : 0; checkAllSKUs(val1, window) }} + style={[customStyle.WStkHdr_checkbox, (Platform.OS == 'ios' ? { height: 20, width: 20, marginLeft: 5 } : {})]} + tintColors={{ true: PageTheme.$primary_color, false: PageTheme.$text_color_light }} + /> + {ST.SelectAll} + + } + `wstock_${index.toString()}`} + renderItem={({ item, index }) => { + let stockProd = item; + let stockProdIndex = index; + let sd = WStocksData.find(i => i.ProductId == stockProd.VisibilityStockValue) || {}; + let stock = sd.Stock != null ? sd.Stock : ''; + let isPVisPresent = sd.isPVisPresent != null ? sd.isPVisPresent : 0; + + + // highlight prd errors + let EF_stockProdIndex = errorfield.EF_stockProdIndex || ''; + let showPrdErrHere = EF_stockProdIndex == stockProdIndex; + + let EF_stock = errorfield.EF_stock || ''; + let EStyle_StockInput = show_errorhere && showPrdErrHere && EF_stock == 'input1_' ? customStyle.stk_inptSTyle_error : {}; + + + return ( + + + + + {isListedSKUEnable != true && {stockProd.ProductName}} + {isListedSKUEnable != true && {"MBQ " + stockProd.VisibilityStockMBQ}} + + + {isListedSKUEnable == true && + + + { let val1 = (val == true) ? 1 : 0; setWindowStockVal(val1, window, stockProd, 'isPVisPresent') }} + style={[customStyle.WStkHdr_checkbox, (Platform.OS == 'ios' ? { height: 20, width: 20, marginTop: 5, marginLeft: 5, } : {})]} + tintColors={{ true: PageTheme.$primary_color, false: PageTheme.$text_color_light }} + /> + + {stockProd.ProductName} + + } + {((isListedSKUEnable == true && StockQtyRequired == 1 && isPVisPresent == 1) || isListedSKUEnable != true) && + + + + Stock + + + + { inputRefs.current['input1_' + stockProd.VisibilityDefinitionId + '_' + index] = reff; }} + placeholder="" + autoComplete='off' + placeholderTextColor={PageTheme.$placeholder_color} + keyboardType={'number-pad'} + returnKeyType={(Platform.OS === 'ios') ? 'done' : 'next'} + blurOnSubmit={false} + value={stock + ''} + onSubmitEditing={() => { focusToNext(WindowStocks, windowIndex, stockProd, index) }} + onChangeText={(val) => { setWindowStockVal(val, window, stockProd, 'Stock', 'numeric') }} + /> + + + + } + + ); + }} + /> + + } + {console.log("checkwind--", WindowSplits)} + {(window.NoOfSplit > 0 && WindowSplits.length > 0 && (isImage1 == 1 || isImage2 == 1)) && + + + {currentMenu.MenuName + ' Images'} + {AddImageAllow && + handleAddImages(WIndex)} style={{ marginLeft: 20, opacity: AddDisable ? 0.4 : 1 }}> + + + } + + + + + `spliItem_${index.toString()}`} + renderItem={({ item, index }) => { + let splitItem = item; + let splitItemIndex = index; + let Image1Name = splitItem['Image1Name'] != null && splitItem['Image1Name'] != '' ? splitItem['Image1Name'] : ''; + let Image2Name = splitItem['Image2Name'] != null && splitItem['Image2Name'] != '' ? splitItem['Image2Name'] : ''; + let Image1 = splitItem['Image1'] != null && splitItem['Image1'] != '' ? splitItem['Image1'] : ''; + let Image2 = splitItem['Image2'] != null && splitItem['Image2'] != '' ? splitItem['Image2'] : ''; + let isImg1mad = splitItem['img1Required'] || false; + let isImg2mad = splitItem['img2Required'] || false; + + // highlight slit image box + let EF_splitItemIndex = errorfield.EF_splitItemIndex || ''; + let showSplitItemErrHere = EF_splitItemIndex == splitItemIndex; + + let EF_splitImage1 = errorfield.EF_splitImage1 || ''; + let EStyle_splitImage1 = show_errorhere && showSplitItemErrHere && EF_splitImage1 == 'splitImage1' ? customStyle.error_CatImage2 : {}; + + let EF_splitImage2 = errorfield.EF_splitImage2 || ''; + let EStyle_splitImage2 = show_errorhere && showSplitItemErrHere && EF_splitImage2 == 'splitImage2' ? customStyle.error_CatImage2 : {}; + + + return ( + + {isImage1 == 1 && + + + {((Image1 == '' || Image1 == null) && isImg1mad) ? + { openCamera(window, splitItem, splitItemIndex, '1') }}> + + : (Image1 == '' || Image1 == null) ? + { openCamera(window, splitItem, splitItemIndex, '1') }}> + + : (Image1 != '' || Image1 != null) ? + { OpenImgModal(Image1, window, splitItem, splitItemIndex, '1') }}> + + : null + } + {camera1Label} + + } + {isImage2 == 1 && + + + + {((Image2 == '' || Image2 == null) && isImg2mad) ? + { openCamera(window, splitItem, splitItemIndex, '2') }}> + + : (Image2 == '' || Image2 == null) ? + { openCamera(window, splitItem, splitItemIndex, '2') }}> + + : (Image2 != '' || Image2 != null) ? + { OpenImgModal(Image2, window, splitItem, splitItemIndex, '2') }}> + + : null + } + {camera2Label} + + } + {splitItem?.addImg == 1 && + handleDelete(splitItemIndex, WIndex)} + onPress={() => { + Alert.alert( + "Delete Image", + "Are you sure, you want to delete this image?", + [ + { + text: "Cancel", + style: "cancel", + }, + { + text: "Delete", + style: "destructive", + onPress: () => handleDelete(splitItemIndex, WIndex), + }, + ], + { cancelable: true } // bahar tap karne se alert band ho jaye + ); + }} + style={{ position: 'absolute', bottom: 30, right: 30, backgroundColor: '#fff', borderRadius: 12, }} + > + + + } + + ); + }} + /> + + } + + {/* Add Image Section */} + {/* + Add More Images + + + + */} + + {/* {addImages && addImages.length > 0 ? addImages.map((item, index) => ( + + + + + + + + {"Long Shot"} + + + + + + {"Close Shot"} + + + + handleDelete(index)} + style={{ position: 'absolute', bottom: 30, right: 30, backgroundColor: '#fff', borderRadius: 12, }} + > + + + + + )) : null + } */} + + + + {(WindowQuestions.length > 0) && + 0 && WindowSplits.length > 0 && (isImage1 == 1 || isImage2 == 1))) ? customStyle.openStk_prd_borderT3 : {}), customStyle.mb10]}> + {/* */} + + {currentMenu.MenuName + ' Questions'} + + {WindowQuestions.map((item, index) => { + + let qtn = item; + let qtnIndex = index; + let selansid = '', selanswer = '', selimg = '', showImageTag = false; + let id_key = qtn.VisibilityQuestionId + '_AnswerId'; + let ans_key = qtn.VisibilityQuestionId + '_Answer'; + let multi_key = qtn.VisibilityQuestionId + '_MultiOption'; + let date_key = qtn.VisibilityQuestionId + '_Date'; + let img_key = qtn.VisibilityQuestionId + '_ImagePath1'; + let imgname_key = qtn.VisibilityQuestionId + '_ImageName1'; + let rating_key = qtn.VisibilityQuestionId + '_Rating'; + + let list_mcdata = []; + let VQDefaultQuestionEnable = qtn.VQDefaultQuestionEnable == 'true' || qtn.VQDefaultQuestionEnable == 1 || qtn.VQDefaultQuestionEnable == '1' ? true : false; + let isDisabled = qtn.isDisabled; + if (qtn.QuestionType == 'Single choice list') { + selansid = QuestionsData[id_key] != null ? QuestionsData[id_key] : ''; + selanswer = QuestionsData[ans_key] != null ? QuestionsData[ans_key] : ''; + } + else if (qtn.QuestionType == 'Multi choice list') { + if (qtn.Answers != null) { + for (var i = 0; i < qtn.Answers.length; i++) { + let obj = { 'AnswerId': parseInt(qtn.Answers[i].AnswerId), 'Answer': qtn.Answers[i].Answer }; + list_mcdata.push(obj); + } + } + selansid = QuestionsData[multi_key] != null && QuestionsData[multi_key] != '' ? QuestionsData[multi_key].split(',') : []; + console.log("selansid--", selansid) + if (selansid != null && selansid.length > 0) { + let arr = []; + for (var i = 0; i < selansid.length; i++) { + arr.push(parseInt(selansid[i])); + } + selansid = arr; + } + + } + else if (qtn.QuestionType == 'Number' || qtn.QuestionType == 'Text' || qtn.QuestionType == 'Decimal' || qtn.QuestionType == 'Date') { + selansid = QuestionsData[ans_key] != null && QuestionsData[ans_key] != undefined ? QuestionsData[ans_key] : ""; + selanswer = (qtn.QuestionType == 'Date') ? (QuestionsData[date_key] || moment().format('MM/DD/YYYY')) : ''; + showImageTag = (qtn.VQShowCamera == 1 || qtn.VQShowCamera == 'true'); + } + else if (qtn.QuestionType == 'Rating' || qtn.QuestionType == 'QR') { + selanswer = QuestionsData[ans_key] ? QuestionsData[ans_key] : ''; + } + + + if ((qtn.QuestionType == 'Single choice list' || qtn.QuestionType == 'Multi choice list')) { + if (qtn.Answers && qtn.Answers.length > 0) { + for (var i = 0; i < qtn.Answers.length; i++) { + let ansss = qtn.Answers[i]; + let isandImgAl = (ansss.VAShowCamera == 'true' || ansss.VAShowCamera == 1); + + if (qtn.QuestionType == 'Single choice list' && (isandImgAl && ansss.AnswerId == selansid)) { + showImageTag = true; + } + else if (qtn.QuestionType == 'Multi choice list' && (isandImgAl && selansid.indexOf(ansss.AnswerId) >= 0)) { + showImageTag = true; + } + + } + } + } + + if (showImageTag) { + selimg = QuestionsData[img_key] != null && QuestionsData[img_key] != '' ? 'file://' + QuestionsData[img_key] : ''; + } + + let EF_qtn = errorfield.EF_qtn != null ? errorfield.EF_qtn : {}; + let showQtnErrHere = EF_qtn.VisibilityQuestionId == qtn.VisibilityQuestionId; + //Qtn_MultiChoice + let EF_Qtn_MultiChoice = errorfield.EF_Qtn_MultiChoice || ''; + let EStyle_Qtn_MultiChoice = show_errorhere && showQtnErrHere && EF_Qtn_MultiChoice == 'Qtn_MultiChoice' ? customStyle.stk_MultiSSTyle_error : {}; + + + let EF_Qtn_Date = errorfield.EF_Qtn_Date || ''; + let EStyle_Qtn_Date = show_errorhere && showQtnErrHere && EF_Qtn_Date == 'Qtn_Date' ? customStyle.stk_inptSTyle_error : {}; + + let EF_Qtn_Input = errorfield.EF_Qtn_Input || ''; + let EStyle_Qtn_Input = show_errorhere && showQtnErrHere && EF_Qtn_Input == 'Qtn_Input' ? customStyle.stk_inptSTyle_error : {}; + + let EF_Qtn_Image = errorfield.EF_Qtn_Image || ''; + let EStyle_Qtn_Image = show_errorhere && showQtnErrHere && EF_Qtn_Image == 'Qtn_Image' ? customStyle.stk_inptSTyle_error : {}; + + + if (!isDisabled) { + return ( + + {qtn.VisibilityQuestionName} + {qtn.QuestionType == 'Single choice list' && qtn.Answers && + render_Picker('Answer', 'AnswerId', onselectionChange, { value: selanswer, qtn: qtn, window: window }) + } + {qtn.QuestionType == 'Multi choice list' && qtn.Answers && + { setMultiSelectValue(selectedItems, qtn, window) }} //setMultiSelectValue(selectedItems,qtn) + selectedItems={selansid} + selectText="Pick Items" + searchInputPlaceholderText={ST.SearchItems + "..."} + // onChangeInput={ (text)=> console.log(text)} + tagRemoveIconColor={PageTheme.$primary_color} + tagBorderColor={PageTheme.$primary_color} + tagTextColor={PageTheme.$primary_color} + selectedItemTextColor={PageTheme.$primary_color} + selectedItemIconColor={PageTheme.$primary_color} + itemTextColor={PageTheme.$text_color} + displayKey="Answer" + searchInputStyle={customStyle.wind_MultiSearchInputStyle} + styleMainWrapper={EStyle_Qtn_MultiChoice} + submitButtonColor={PageTheme.$primary_color} + submitButtonText={ST.Submit} + /> + } + {(qtn.QuestionType == 'Number' || qtn.QuestionType == 'Decimal' || qtn.QuestionType == 'Text') && + console.log("onchangeVal--", e.value)} + onChangeText={(val) => { setTextValue(val, qtn, window, (qtn.QuestionType == 'Decimal' ? 'decimal' : (qtn.QuestionType == 'Text' ? 'text' : 'numeric'))) }} + /> + } + { + (qtn.QuestionType == 'Date') && + + {selansid != '' ? selansid : 'MM/YYYY'} + { setDateValue(selanswer); showQtnDatePicker(qtn, window, true) }}> + + + + } + { + (qtn.QuestionType == 'QR') && + + {selanswer != '' ? selanswer : ''} + { setQREnable(true); setQRqtnData({ qtn, window }); setShowQRCamera(true); }}> + {/* */} + + + + } + {((qtn.showDatePicker == true || qtn.showDatePicker == 'true') && (qtn.QuestionType == 'Date')) && + renderDatePicker(qtn, window) + } + { + (qtn.QuestionType == 'Rating') && + + {selanswer} + { setRatingQtn(qtn); setRatingWindow(window); setShowRating(true); }}> + + + + } + + + { + showImageTag && + + + { openCamera(window, {}, 0, '1', '2', qtn) }}> + + + + } + + + + ) + } + else { + return null; + } + })} + + } + {RemarkEnable == true && + + {ST.Remark} + { onCatTextChange(window, 'remark', val) }} + /> + + } + + + } + + + + + + + ); + }} + /> + + + ) + } + + function _renderHeader(currentIndex) { + return ( + + {`${(currentIndex + 1)}/${zoomImageUrl.length}`} + { UpdateShow_zoomImageRef(false) }}> + + + + ) + } + + const onCancelClean = () => { + setDataCleanModal(false) + } + const onclear = () => { + onWindowDataClean(DataCleanItem) + } + + return ( + + {processing && } + + + + {_OpenCaptureImage_Modal()} + {ConfirmSaveAlert(props, showAlert, onSaveCancel, saveData)} + {ConfirmSaveAlert(props, showAlert1, onSaveCancel, saveData)} + {ConfirmSaveAlert(props, DataCleanModal, onCancelClean, onclear, 'Your data will be clean',)} + { console.log("QRRec:", imgData); setShowQRCamera(false); onQRScanned(imgData) }} showCamera={showQRCamera} onHideCamera={() => { setShowQRCamera(false); }} /> + { setShowCamera(false); getImage(imgData) }} showCamera={showCamera} onHideCamera={() => { setShowCamera(false); }} /> + + + + + { setSearchedItem(val); FilterStores(val) }} + /> + { FilterStores(searchedItem) }}> + + + + {Object.keys(storeData).length > 0 && + + {_renderWindow()} + + } + + { onSubmitData() }} /> + + + + + {showRating == true && + renderRatingView() + } + {show_zoomImage && + + null} + /> + + } + + ); +} + + +export default connect(mapStateToProps, mapDispatchToProps)(PaidVisibilityOneApp); \ No newline at end of file diff --git a/PerformicsSrc/src/screens/PaidVisibilityOneAppIR.js b/PerformicsSrc/src/screens/PaidVisibilityOneAppIR.js new file mode 100644 index 0000000..6b25c8b --- /dev/null +++ b/PerformicsSrc/src/screens/PaidVisibilityOneAppIR.js @@ -0,0 +1,3725 @@ +import React,{useState,useEffect,useRef} from 'react'; +import Container from '../components/container'; +import { useRoute } from '@react-navigation/native'; +import { globalStyles,customStyles,GetPageTheme } from "../styles/Global"; +import { AppState, StatusBar,Image,TextInput,View,Text,ScrollView,TouchableOpacity,Platform,PermissionsAndroid,FlatList, Alert, Animated,KeyboardAvoidingView, DeviceEventEmitter, ViewBase, Keyboard} from 'react-native'; +import { ReactReduxContext,connect,useSelector, useDispatch } from 'react-redux'; +import { mapStateToProps,mapDispatchToProps } from '../reducers/contextProvider'; +import SQLite from 'react-native-sqlite-2'; +import {notify} from '../components/notify'; +import moment from 'moment'; +import {UploadData2, getDownloadJson,getKPIFields,marktext1,marktext2, resizeImage, restore_ImageWithMetaData} from '../controller/functions'; +import {get_item,set_item,clear_item} from '../components/localStorage'; +import {version,sloganline,appname,testurl,db, colors_Arr, common_ImagePath,ImageFolderPath} from '../constants/constants'; +import CustomHeader from '../components/customHeader'; +import {Card, Menu, Switch} from 'react-native-paper'; +import {AntDesign, Entypo, FontAwesome, Fontisto, Ionicons, MaterialCommunityIcons} from '../components/icons'; +import { stat } from 'react-native-fs'; +import CustomLoader from '../components/CustomLoader'; +import LinearGradient from 'react-native-linear-gradient'; +import { AppTables } from '../constants/tableConstants'; +import { SvgXml } from 'react-native-svg'; +import * as RNFS from 'react-native-fs'; +import GradientButton from '../components/gradientButton'; +import CustomModal from '../components/CustomModal'; +import { ConfirmSaveAlert } from '../components/alert'; +import ModalSelector from 'react-native-modal-selector' +import { CustomPicker, CustomPicker2 } from '../components/CustomPicker'; +import CustomCamera from '../components/Camera'; +import ImageViewer from 'react-native-image-zoom-viewer'; +import DateTimePicker from '@react-native-community/datetimepicker'; +import CheckBox from '@react-native-community/checkbox'; + +import CameraImg from '../assets/performics/camera_front_image.svg' +import MultiSelect from 'react-native-multiple-select'; +import CameraImg3 from '../assets/performics/camera_tick.svg'; +import CameraImg2 from '../assets/performics/camera_icon.svg'; +import CameraImg4 from '../assets/performics/camera_asterisk.svg'; +import CameraImg5 from '../assets/image/astrickcamera.svg'; +import IRLogin from '../components/IRLogin'; +import { SyncIRsessionsInKPI } from '../constants/uploadData'; +import { METHODS, getMethodName } from '../constants/methodNames'; + +function PaidVisibilityOneAppIR(props) { + const route = useRoute(); + const ST=props.StaticText || {}; + + // get all theme styles acc to current theme set + const PageTheme=GetPageTheme(props.DarkMode,route.name); + const customStyle=customStyles(props.DarkMode,route.name); + const animatedChoice=useRef(new Animated.Value(0)).current; + + const [processing, setProcessing] = useState(true); + const [loaderTitle, setLoaderTitle] = useState(); + const [isAdhocScreen, setIsAdhocScreen] = useState(false); + const [storeData, setStoreData] = useState({}); + const [StoreCameraAllow, setStoreCameraAllow] = useState(true); + const [currentMenu, setCurrentMenu] = useState({}); + const [rerenderdata, setrerenderdata]= useState(0); + const [rerenderdata2, setrerenderdata2]= useState(0); + const [rerenderdata3, setrerenderdata3]= useState(0); + const [rerenderdata4, setrerenderdata4]= useState(0); + + const [hasUnsavedChanges,setHasUnsavedChanges] = useState(false); + + const [WindowData, setWindowData] = useState([]); + const [reasons_list, setReasons_list] = useState([]); + const [Windows, setWindows] = useState([]); + + const [show_zoomImage, setShow_zoomImage] = useState(false); + const [show_zoomImage2, setShow_zoomImage2] = useState(false); + const Show_zoomImageRef=useRef(false); + const Show_zoomImageRef2=useRef(false); + const [zoomImageIndex, setzoomImageIndex] = useState(0); + const [refImageIndex, setrefImageIndex] = useState(0); + const [refImageIndex2, setrefImageIndex2] = useState(0); + const [zoomImageUrl, setZoomImageUrl] = useState([]); + const [zoomImageUrl2, setZoomImageUrl2] = useState([]); + const zoomView=useRef(null); + const zoomView2=useRef(null); + + const [showAlert, setShowAlert] = useState(false); + + const [showCamera, setShowCamera] = useState(false); + const showCameraRef = useRef(false); + const [showQRCamera, setShowQRCamera] = useState(false); + const showQRCameraRef = useRef(false); + const [getImageProps,setGetImageProps]= useState({}); + const [showRating, setShowRating] = useState(false); + const [RatingQtn, setRatingQtn] = useState({}); + const [RatingWindow, setRatingWindow] = useState({}); + const [RatingOrder, setRatingOrder] = useState([]); + + const [Products, setProducts] = useState([]); + const [DisplayList, setDisplayList] = useState([]); + const [toRemoveId,setToRemoveId]= useState(''); + const [toRemoveItem,setToRemoveItem]= useState({}); + const [showRemoveConfirm_M,setshowRemoveConfirm_M]= useState(false); + const [showRAllC_M,setShowRAllC_M]= useState(false); + const [searchedItem, setSearchedItem]= useState(''); + const [globalWindows, setGlobalWindows] = useState([]); + const [KPIFields, setKPIFields] = useState([]); + const [GridValue, setGridValue] = useState(false); + const [QREnable, setQREnable] = useState(false); + + const [DataCleanModal, setDataCleanModal] = useState(false); + const [DataCleanAnim, setDataCleanAnim] = useState(""); + const [DataCleanItem, setDataCleanItem] = useState({}); + const [isPresentClean, setIsPresentClean] = useState(0); + + const [InputChange, setInputChange] = useState([]); + + const [SelectedImg, setSelectedImg] = useState(''); + const [showModal, setShowModal] = useState(false); + const [reCapImgModalObj, setReCapImgModalObj] = useState({}); + const [showImageSaveOp, setShowImageSaveOp] = useState(true); + const [ImgMadCount, setImgMadCount] = useState({img1:0,img2:0}); + const [AppStatus, setAppStatus] = useState(AppState.currentState); + const [QRqtnData, setQRqtnData] = useState({}); + + const hasUnsavedChangesRef = React.useRef(hasUnsavedChanges); + const WindowDataRef=React.useRef(WindowData); + const StoreIdRef=React.useRef(null); + const ScreenNameRef=React.useRef({}); + + const inputRefs = useRef({}); + + + // IR states or refs + const [isDataExists, setisDataExists] = useState(false); + const [isDataUploaded, setisDataUploaded] = useState("N"); + // const [WindowIRImages, setWindowIRImages] = useState([]); + // const [GbTempSessionId, setGbTempSessionId] = useState(""); + const WindowIRImages=useRef([]); + const GbTempSessionId=useRef(""); + const GbTempSessionObj=useRef({}); + const sessionsToUpload = useRef([]); + const sessionsToUploadDetails = useRef([]); + const sessionsUploadedCount = useRef(0); + const sessionsReceived = useRef(0); + const [showRetakeModal, setshowRetakeModal] = useState(false); + const [retakeMData, setretakeMData] = useState({}); + const [showUploadAlert, setshowUploadAlert] = useState(false); + const [windIRParams, setWindIRParams] = useState({}); + + + const d1=new Date(); + const d2=moment(d1).format('MM/DD/YYYY'); + + + useEffect(() => { + setLoaderTitle(ST.Loading+'...') + let params=props.route.params? props.route.params:{}; + let storeData1=params.storeData || {}; + let menu1=params.menu || {}; + let cameraAllow=storeData1.CameraAllow=='true' || storeData1.CameraAllow==1?true:false; + setStoreCameraAllow(cameraAllow); + + let isAdhoc=params.isAdhoc || false; + + StoreIdRef.current=storeData1.StoreId + ScreenNameRef.current={BgscreenName:menu1.ScreenName,BgMenuId:menu1.MenuId } + setIsAdhocScreen(isAdhoc); + setStoreData(storeData1); + setCurrentMenu(menu1); + + let IR_Creds=props.IR_Creds!=null && props.IR_Creds!=""?JSON.parse(props.IR_Creds):[]; + let IR_CredsObj=IR_Creds.length>0?IR_Creds[0]:{}; + let Vis_IRCreds=IR_CredsObj.Visibility!=null && IR_CredsObj.Visibility.length>0?IR_CredsObj.Visibility[0]:{}; + setWindIRParams(Vis_IRCreds); + + getData(storeData1,menu1); + + const AppStateSubscription = AppState.addEventListener('change', (pro)=>{ _handleAppStateChange(pro)}); + const removeIRListener=DeviceEventEmitter.addListener('onIRImageUpload',(data)=>{ onIRImageUpload(data,storeData1,menu1)}); + const unsubscribe=props.navigation.addListener('beforeRemove', onBeforeRemove); + + + return function cleanup() { + IRLogin.deRegisterReceiver(); + AppStateSubscription.remove(); + removeIRListener.remove(); + return unsubscribe; + }; + }, []); + + + + const _handleAppStateChange = async (nextAppState) => { + + if(nextAppState =='background' && hasUnsavedChangesRef.current==true){ + + let newData = { + storeBGData:WindowDataRef.current, + menuName:ScreenNameRef.current && ScreenNameRef.current.BgscreenName, + StoreId1:StoreIdRef.current, + BgMenuID: ScreenNameRef.current && ScreenNameRef.current.BgMenuId, + bg_GbTempSessionId:GbTempSessionId.current, + bg_WindowIRImages:WindowIRImages.current, + visiteDate:d2 + } + let WindowsStr= await JSON.stringify(newData) + + await set_item('storeData',WindowsStr); + } + } + + + + // useEffect(() => { + // const unsubscribe=props.navigation.addListener('beforeRemove', onBeforeRemove); + // return unsubscribe; + // }, [hasUnsavedChanges]); + + + // useEffect(() => { + // const unsubscribe=props.navigation.addListener('beforeRemove', onBeforeRemove); + // return unsubscribe; + // }, [showCamera]); + + // useEffect(() => { + // const unsubscribe=props.navigation.addListener('beforeRemove', onBeforeRemove); + // return unsubscribe; + // }, [showQRCamera]); + + + function onBeforeRemove(e){ + + if(showCameraRef.current==true || showQRCameraRef.current==true ){ + e.preventDefault(); + UpdateShowCameraRef(false); + UpdateShowQRCameraRef(false) + } + else if(Show_zoomImageRef.current==true || Show_zoomImageRef2.current==true){ + e.preventDefault(); + UpdateShow_zoomImageRef(false); + UpdateShow_zoomImageRef2(false); + } + else{ + if (hasUnsavedChangesRef.current==true) { + e.preventDefault(); // Prevent default behavior of leaving the screen + onRemoveScreen(e); + } + else{ + return; + } + } + } + + function BgUnsavedChanges(val){ + hasUnsavedChangesRef.current=val + setHasUnsavedChanges(val); + } + + function BgWindowData(val){ + WindowDataRef.current=val + setWindowData(val); + } + + function UpdateShow_zoomImageRef(val){ + Show_zoomImageRef.current=val + setShow_zoomImage(val); + } + + function UpdateShow_zoomImageRef2(val){ + Show_zoomImageRef2.current=val + setShow_zoomImage2(val); + } + + + function UpdateShowCameraRef(val){ + showCameraRef.current=val + setShowCamera(val); + } + + function UpdateShowQRCameraRef(val){ + showQRCameraRef.current=val + setShowQRCamera(val); + } + + + async function onIRImageUpload(data,storeData1,menu1){ + console.log('onIRImageUpload on receive',data); + let {message,sessionId,status}=data; + let snum=sessionsReceived.current+1; + let su_num=sessionsUploadedCount.current; + console.log('onreceive data',data); + sessionsReceived.current=snum; + let thisIR_SessObjIndex=sessionsToUploadDetails.current.findIndex(i=>i.TEMP_SESSION_ID==sessionId); + let thisIR_SessObj=sessionsToUploadDetails.current[thisIR_SessObjIndex]; + if(status!=null && status=='200' && sessionId!=null && sessionId!=''){ + + let UnSessionId=await IRLogin.getDataIRSession(sessionId); + if(UnSessionId!=null && UnSessionId!=''){ + sessionsUploadedCount.current=++su_num; + let isUpdated=await UpdateIRUploadStatus(storeData1,menu1,sessionId,UnSessionId); + let isUploaded=await LogImageUpload(storeData1,menu1,sessionId,UnSessionId,message,status,thisIR_SessObj); + console.log("su_num:",su_num); + if(isUploaded){ + console.log('Image Uploaded'); + notify("Images Log uploaded for session:"+sessionId); + } + else{ + console.log('cannot Uploaded image'); + notify("cannot upload log for session:"+sessionId); + } + + } + else{ + console.log('OnReceived UnSessionId get',UnSessionId); + notify("Cannot upload images for session:"+sessionId+". Universal Id not found"); + let isUploaded=await LogImageUpload(storeData1,menu1,sessionId,"",message,status,thisIR_SessObj); + if(isUploaded){ + console.log('Image Uploaded'); + notify("Images Log uploaded for session:"+sessionId); + } + else{ + console.log('cannot Uploaded image'); + notify("cannot upload log for session:"+sessionId); + } + + } + + } + else{ + console.log('Cannot get OnReceived UnSessionId'); + notify((message!=null && message!=""?message+". ":"")+"Cannot upload images for session:"+sessionId); + let isUploaded=await LogImageUpload(storeData1,menu1,sessionId,"",message,status,thisIR_SessObj); + if(isUploaded){ + console.log('Image Uploaded'); + notify("Images Log uploaded for session:"+sessionId); + } + else{ + console.log('cannot Uploaded image'); + notify("cannot upload log for session:"+sessionId); + } + + + } + + console.log("check snum and su_num:",snum,su_num,sessionsToUpload.current.length); + // if last broadcast received either uploaded or not update the processing status to false + if(snum==sessionsToUpload.current.length){ + setProcessing(false); + console.log('Deregister event when last received'); + IRLogin.deRegisterReceiver(); + } + + // All IR Sessions with Images Uploaded : set DataUploaded Status to U (Fully Upload) + if(su_num==sessionsToUpload.current.length){ + setisDataUploaded("U"); + setProcessing(false); + notify("All IR images uploaded!"); + console.log('set all uploaded true to U'); + } + // Some Of IR Sessions with Images Uploaded but some are yet pending : set DataUploaded Status to P (Partial Upload) + else if(su_num>0 && su_num!=sessionsToUpload.current.length){ + // setProcessing(false); + setisDataUploaded("P"); + notify("Some IR Images are still not uploaded!"); + console.log('set all uploaded true to P'); + } + } + + function onRemoveScreen(e){ + Alert.alert( + "", + ST.Doyoureallywanttoexitthescreen, + [ + { + text: ST.Cancel, + onPress: () => {}, + style: "cancel" + }, + { text: ST.OK, onPress: async () => { + // setHasUnsavedChanges(false); + BgUnsavedChanges(false) + await clear_item('storeData') + props.navigation.dispatch(e.data.action);} } + ] + ); + } + + + function _OpenCaptureImage_Modal(img){ + + const isImageCap=(img!='' || img!=null)?true:false; + let {window,splitItem,splitItemIndex,cameraType}=reCapImgModalObj + let camera2Label=(window && window.PromoImage2Lable) || ''; + return ( + + { + isImageCap && + + + + + + {openCamera(window,splitItem,splitItemIndex,cameraType)}}> + + + + {!showImageSaveOp && + {cancelImage(false)}}> + + {ST.Close} + + } + + } + + ) + } + + + async function getData(storeData1,menu1){ + try { + let {StoreId,ChainId,StateId,StoreTypeId}=storeData1; + + let AllKPIFields=await getKPIFields(menu1); + setKPIFields(AllKPIFields); + + let isSpecificMapIndex=AllKPIFields.findIndex(i=>i.KPIFieldName=='SpecificMapping') + let isSpecificMapKPIObj=isSpecificMapIndex>=0?AllKPIFields[isSpecificMapIndex]:{}; + let isSpecificMappingEnable=isSpecificMapIndex>=0?isSpecificMapKPIObj['KPIFieldEnable']:false; + + let isKPIIREnableI=AllKPIFields.findIndex(i=>i.KPIFieldName=='KPIIREnable') + let isKPIIREnableObj=isKPIIREnableI>=0?AllKPIFields[isKPIIREnableI]:{}; + let isKPIIREnable=isKPIIREnableI>=0?isKPIIREnableObj['KPIFieldEnable']:false; + + let CameraIROnceOnlyIndex=AllKPIFields.findIndex(i=>i.KPIFieldName=='CameraIROnceOnly') + let CameraIROnceOnlyObj=CameraIROnceOnlyIndex>=0?AllKPIFields[CameraIROnceOnlyIndex]:{}; + let CameraIROnceOnly=CameraIROnceOnlyIndex>=0?CameraIROnceOnlyObj['KPIFieldEnable']:true; + + let windData = await get_item('storeData'); + + + await db.transaction(async function (txn) { + // delete data for test purpose + // await txn.executeSql(`DELETE FROM ${AppTables.PAIDVIS_HDR_DATA} `,[],async function (txn2, txnres) { + // console.log('window hdr data deleted'); + // },function (txnE,txnerr) { console.log(txnerr); },); + // await txn.executeSql(`DELETE FROM ${AppTables.PAIDVIS_CHILD_DATA} `,[],async function (txn2, txnres) { + // console.log('window child data deleted'); + // },function (txnE,txnerr) { console.log(txnerr); },); + // await txn.executeSql(`DELETE FROM ${AppTables.PAIDVIS_IMAGES}`,[],async function (txn2, txnres) { + // console.log('window images data deleted'); + // },function (txnE,txnerr) { console.log(txnerr); },); + // await txn.executeSql(`DELETE FROM ${AppTables.PAIDVIS_STOCK_DATA} `,[],async function (txn2, txnres) { + // console.log('window stock data deleted'); + // },function (txnE,txnerr) { console.log(txnerr); },); + + // await txn.executeSql(`DELETE FROM ${AppTables.PAIDVIS_IR_IMAGES} `,[],async function (txn2, txnres) { + // console.log('window IR images data deleted'); + // },function (txnE,txnerr) { console.log(txnerr); },); + + // await txn.executeSql(`UPDATE ${AppTables.PAIDVIS_IRUPLOAD} set UPLOAD_STATUS='0' , SYNC_STATUS='' `,[],async function (txn2, txnres) { + // console.log('window IR Status data deleted'); + // },function (txnE,txnerr) { console.log(txnerr); },); + + + + let q3=`Select VisibilityReasonId as ReasonId,VisibilityReason as Reason From Master_VisibilityReason WHERE MenuId='${menu1.MenuId}' `; + await txn.executeSql(q3,[],async function (txn2, txnres2) { + if(txnres2.rows.length>0){ + let arr=[]; + for(var i=0;i0){ + storeBGData1=storeBGData; + bgStoreJson=StoreJson + // setWindowData(storeBGData); + BgWindowData(storeBGData); + BgUnsavedChanges(true); + console.log("set bg data"); + } + + // Check if IR Images and session present in bg data + if(bg_GbTempSessionId!=null && bg_GbTempSessionId!='' && bg_WindowIRImages!=null && bg_WindowIRImages.length>0){ + WindowIRImages.current=bg_WindowIRImages; + GbTempSessionId.current=bg_GbTempSessionId; + } + } + } + + console.log("execute q"); + await txn.executeSql(q,[],async function (txn2, txnres2) { + console.log('Paid Visi added count',txnres2.rows.length); + if(txnres2.rows.length>0){ + let arr=[];let images=[],allWindowsData=[],inputChangeFlag=[]; + let isfullyUploaded=true; + + + for(var i=0;i0){ + let storeBgIndex=storeBGData1.findIndex(i=>i.VisibilityId==data.VisibilityId && i.VisibilityDefinitionId==data.VisibilityDefinitionId) + let storeBgObj=storeBgIndex>=0?storeBGData1[storeBgIndex]:{}; + + let bgisPresent=storeBgObj.isPresent=='1' || storeBgObj.isPresent==1?1:0; + let animatedChoice=new Animated.Value(bgisPresent); + data.animatedChoice=animatedChoice; + }else{ + let animatedChoice=new Animated.Value((data.IsPresent=='1' || data.IsPresent==1?1:0)); + data.animatedChoice=animatedChoice; + } + + data.NoOfSplit=parseInt(data.NoOfSplit); + + let NoOfSplit=data.NoOfSplit; + let isPresent=data.IsPresent=='1' || data.IsPresent==1?1:0; + let isStockReq=data.VisibilityElementStockRequired=='true' || data.VisibilityElementStockRequired==1?1:0; + + let imgObj={imgIndex:(i+1),url: data.VisibilityRefImage, props: {}} + let WindowSplits = await getWindowSplits(NoOfSplit,data,storeData1,menu1); + let IRImages=[],zoomIRImages=[]; + if(isKPIIREnable && !isBGDataExists){ //perform action only if IRImages flag is enable for this KPI and if bg data does not exists + if(CameraIROnceOnly && i==0){// get IR images for all KPI at once if CameraIROnceOnly enabled + let IRImgResObj=await getIRImages({},storeData1,menu1,"2"); + IRImages=IRImgResObj!=null && IRImgResObj["allImages"]!=null?IRImgResObj["allImages"]:[]; + zoomIRImages=IRImgResObj!=null && IRImgResObj["zoomIRImages"]!=null?IRImgResObj["zoomIRImages"]:[]; + // setWindowIRImages(IRImages); + WindowIRImages.current=IRImages; + setZoomImageUrl2(zoomIRImages); + + } + else if(!CameraIROnceOnly){// get IR images for each window if CameraIROnceOnly is not enabled + let IRImgResObj=await getIRImages(data,storeData1,menu1,"1"); + IRImages=IRImgResObj!=null && IRImgResObj["allImages"]!=null?IRImgResObj["allImages"]:[]; + zoomIRImages=IRImgResObj!=null && IRImgResObj["zoomIRImages"]!=null?IRImgResObj["zoomIRImages"]:[]; + } + } + + let WQr = await getWindowQuestions(data,storeData1,isPresent,menu1); + let WindowQuestions = WQr['WindowQuestions'] || []; + let WindowQA= WQr['WindowQA'] || {}; + let WSd= isStockReq==true ? await getWindowStockData(data,storeData1,isPresent,AllKPIFields) : {'WStocks':[],'WStocksData':[]}; + let WStocks=WSd['WStocks'] || []; + let WStocksData=WSd['WStocksData'] || []; + let isAllChecked=WSd['isAllChecked']!=null?WSd['isAllChecked']:0; + + let isNAImageAvl=data.VisibilityNotExistCamera=='true' || data.VisibilityNotExistCamera==1?1:0; + let NAImage1=isNAImageAvl==1 && data.PVisNAImage!=null?data.PVisNAImage:''; + let NAImage1Path=NAImage1!=''?'file://'+ImageFolderPath+menu1.ScreenName+"/"+NAImage1:''; + + + let windowDataObj={'VisibilityId':data.VisibilityId,'VisibilityDefinitionId':data.VisibilityDefinitionId,'WindowSplits':WindowSplits,'WindowQA':WindowQA,'WStocksData':WStocksData,'NAImage1':NAImage1,'NAImage1Path':NAImage1Path,'ReasonId':data.ReasonId,'Reason':data.Reason,'isPresent':isPresent,'isAllSKUChecked':isAllChecked,'remark':(data.Remark!=null?data.Remark:'')}; + if(isKPIIREnable && !CameraIROnceOnly && !isBGDataExists){ // If IR enable and IR camera is shown for each window and if bg data does not exists + windowDataObj['IRImages']=IRImages; + windowDataObj['zoomIRImages'] =zoomIRImages; + windowDataObj['TempSessionId']=data.TempSessionId; + windowDataObj['Sess_StoreCode']=data.Sess_StoreCode; + windowDataObj['Sess_TaskName']=data.Sess_TaskName; + windowDataObj['Sess_CatName']=data.Sess_CatName; + windowDataObj['Sess_PhotoType']=data.Sess_PhotoType; + + if(data.UploadStatus=='1' && isDataUploaded!='P' && isDataUploaded!='U'){ + console.log('cat hdr image upload success: P'); + // stop editing if any image is uploaded + setisDataUploaded("P"); + } + + if(data.UploadStatus!='1'){ + // check if any image is not uploaded then set uploaded status to U + isfullyUploaded=false; + } + + } + + data['WindowQuestions']=WindowQuestions; + data['WindowStocks']=WStocks; + let changesFlag = {VisibilityId:data.VisibilityId, VisibilityDefinitionId: data.VisibilityDefinitionId, Flag:true} + inputChangeFlag.push(changesFlag) + arr.push(data); + + allWindowsData.push(windowDataObj); + images.push(imgObj); + if(i==txnres2.rows.length-1){ + let { menuName,StoreId1,BgMenuID,visiteDate }=bgStoreJson + if(!isBGDataExists){ + // setWindowData(allWindowsData); + BgWindowData(allWindowsData); + } + + if(isKPIIREnable){// set IR Images Upload Status if KPI IR flag is enabled + if(CameraIROnceOnly){ // Camera for each window is not enabled + let isChecked=await getUploadIRStatus(storeData1,menu1); + } + else if(!CameraIROnceOnly && isfullyUploaded){ // Stop Upload and Editing both when fully uploaded, Case: if Camera for each window is enabled + setisDataUploaded('U'); + } + } + + setisDataExists(true); + setInputChange(inputChangeFlag) + setWindows(arr); + setGlobalWindows(arr); + setZoomImageUrl(images); + setProcessing(false); + } + } + } + else{ + console.log('execute q2'); + await txn.executeSql(q2,[],async function (txn2, txnres2) { + console.log('Paid Visi load count',txnres2.rows.length); + if(txnres2.rows.length>0){ + let arr=[],images=[],allWindowsData=[],inputChangeFlag=[]; + + + for(var i=0;i0){ + let storeBgIndex=storeBGData1.findIndex(i=>i.VisibilityId==data.VisibilityId && i.VisibilityDefinitionId==data.VisibilityDefinitionId) + let storeBgObj=storeBgIndex>=0?storeBGData1[storeBgIndex]:{}; + + let bgisPresent=storeBgObj.isPresent=='1' || storeBgObj.isPresent==1?1:0; + let animatedChoice=new Animated.Value(bgisPresent); + data.animatedChoice=animatedChoice; + }else{ + let animatedChoice=new Animated.Value(0); + data.animatedChoice=animatedChoice; + } + + data.NoOfSplit=parseInt(data.NoOfSplit); + let isStockReq=data.VisibilityElementStockRequired=='true' || data.VisibilityElementStockRequired==1?1:0; + + let imgObj={imgIndex:(i+1),url: data.VisibilityRefImage, props: {}} + let WindowSplits = []; + for(var s=0;s{ + + db.transaction(async function (txn) { + + let q=`select * from ${AppTables.PAIDVIS_IMAGES} where PVIS_HEADER_ID='${window.PVisHeaderId}' and STORE_ID='${storeData1.StoreId}' `; + + await txn.executeSql(q,[],async function (txn2, txnres2) { + + if(txnres2.rows.length>0){ + let arr=[]; + for(var i=0;i{ + return val + }).catch((err)=>{ + console.log(err); + return WindowSplits_def; + }); + } + + async function getIRImages(window,storeData1,menu1,type="1"){ + let res={allImages:[],zoomIRImages:[]} + + return new Promise((resolve,reject)=>{ + + db.transaction(async function (txn) { + + let q=`select IMAGE1 as Image1 from ${AppTables.PAIDVIS_IR_IMAGES} where STORE_ID='${storeData1.StoreId}' and MENU_ID='${menu1.MenuId}' and VISIT_DATE='${d2}'`; + q+=type=='1'?` and PVIS_HEADER_ID='${window.PVisHeaderId}'`:''; + + await txn.executeSql(q,[],async function (txn2, txnres2) { + console.log('get IRImages count ',txnres2.rows.length); + let arr=[],arr2=[]; + if(txnres2.rows.length>0){ + for(var i=0;i{ + return val + }).catch((err)=>{ + console.log(err); + return res; + }); + } + + async function getUploadIRStatus(storeData1,menu1){ + let allImages=[]; + let {StoreId} =storeData1; + return new Promise((resolve,reject)=>{ + db.transaction(async function (txn) { + + // For CameraIROnceOnly enabled condition only one TempSessionId will be genrated per KPI + let q=` SELECT Distinct TEMP_SESSION_ID as TempSessionId,UN_SESSION_ID as UploadSessionId,UPLOAD_STATUS as UploadStatus,SYNC_STATUS as SyncStatus,SESSION_STORECODE as Sess_StoreCode,SESSION_TASKNAME as Sess_TaskName,SESSION_CATNAME as Sess_CatName,SESSION_PHOTOTYPE FROM ${AppTables.PAIDVIS_IRUPLOAD} where STORE_ID='${StoreId}' and MENU_ID='${menu1.MenuId}' and VISIT_DATE='${d2}' `; + await txn.executeSql(q,[],async function (txn2, txnres) { + if(txnres.rows.length>0){ + let isfullyUploaded=true; + //No Loop required, As For CameraIROnceOnly enabled condition only one TempSessionId will be genrated per KPI + let data =txnres.rows.item(0); + let {Sess_StoreCode,Sess_TaskName,Sess_CatName,Sess_PhotoType}=data; + if(data.UploadStatus=='1' && isDataUploaded!='P' && isDataUploaded!='U'){ + console.log('getUploadIRStatus success: U'); + // Stop Upload and Editing both when fully uploaded + setisDataUploaded("U"); + } + // setGbTempSessionId(data.TempSessionId); + GbTempSessionId.current=data.TempSessionId; + let obj={Sess_StoreCode,Sess_TaskName,Sess_CatName,Sess_PhotoType}; + GbTempSessionObj.current=obj; + resolve(true); + } + else{ + resolve(true); + } + },function (txnE,txnerr) { console.log(txnerr); resolve(false); },); + }); + }).catch((err)=>{ + return false; + }) + } + + async function getWindowQuestions(window,storeData1,isInserted=false,menu1){ + let obj={'WindowQA':{},'WindowQuestions':[]} + return new Promise((resolve,reject)=>{ + + db.transaction(async function (txn) { + var q='',selectlist='',join='',join2=''; + if(isInserted==true){ + selectlist=` DISTINCT q.QUESTION_ID as VisibilityQuestionId,q.QUESTION_CODE as VisibilityQuestionCode,wq.VisibilityQuestionName,wq.QuestionType,wq.VQShowCamera,wq.VQCameraMandatory,wq.VQLengthValidationRequired,wq.VQMinimumChar,wq.VQMaximumChar,wq.VQDecimalPoint,wq.VQDateRangeMin,wq.VQDateRangeMax,wq.VQVoiceLengthInMinutes,wq.VQDefaultQuestionEnable,q.ANSWER as Answer,q.ANSWER_ID as AnswerId,q.MULTI_OPTIONS_IDS as multi_op_ids,q.IMAGE_ALLOW1 as VAShowCamera,q.IMAGE1 as Image1 `; + join2=` inner join Mapping_VisibilityQuestion mq on mq.VisibilityQuestionId=wq.VisibilityQuestionId `; + join=` inner join Master_VisibilityQuestion wq on wq.VisibilityQuestionId=q.QUESTION_ID `; + q=`select ${selectlist} from ${AppTables.PAIDVIS_CHILD_DATA} q ${join} ${join2} where q.STORE_ID='${storeData1.StoreId}' and q.PVIS_DEFINITION_ID='${window.VisibilityDefinitionId}' and q.PVIS_ID='${window.VisibilityId}' order by wq.VisibilityQuestionSequence `; + } + else{ + selectlist=` DISTINCT wq.VisibilityQuestionId,wq.VisibilityQuestionCode,wq.VisibilityQuestionName,wq.QuestionType,wq.VQShowCamera,wq.VQCameraMandatory,wq.VQLengthValidationRequired,wq.VQMinimumChar,wq.VQMaximumChar,wq.VQDecimalPoint,wq.VQDateRangeMin,wq.VQDateRangeMax,wq.VQVoiceLengthInMinutes,wq.VQDefaultQuestionEnable `; + join=` inner join Mapping_VisibilityQuestion mq on mq.VisibilityQuestionId=wq.VisibilityQuestionId `; + q=`select ${selectlist} from Master_VisibilityQuestion wq ${join} where mq.VisibilityDefinitionId='${window.VisibilityDefinitionId}' order by wq.VisibilityQuestionSequence `; + } + + + + await txn.executeSql(q,[],async function (txn2, txnres2) { + + if(txnres2.rows.length>0){ + let arr=[]; + let wqa_obj={}; + for(var i=0;i0){ + for(var k=0;k=0)){ + showImageTag=true; + } + } + } + } + + if(showImageTag && data.Answer!=null){ + let imgPath=(Platform.OS=='ios'?'file://':'')+ImageFolderPath+menu1.ScreenName+"/"+data.Image1; + wqa_obj[imgname_key]=data.Image1; + wqa_obj[img_key]=imgPath; + } + + + + if(data.QuestionType=='Date' && data.Answer!=null){ + let dayonly=moment().format('DD'); + let actual_date=data.Answer?data.Answer.split('/'):[]; + let month=actual_date[0],year=actual_date[1]; + let fulldate=month+'/'+dayonly+'/'+year; + wqa_obj[date_key]=fulldate; + + } + + arr.push(data); + if(i==txnres2.rows.length-1){ + obj['WindowQuestions']=arr; + obj['WindowQA']=wqa_obj; + resolve(obj) + } + } + } + else{ + resolve(obj) + } + },function (txnE,txnerr) { console.log(txnerr); resolve(obj) },); + }); + }).then((val)=>{ + return val + }).catch((err)=>{ + console.log(err); + return obj; + }); + } + + + async function getWindowAnswers(qtn){ + + return new Promise((resolve,reject)=>{ + + db.transaction(async function (txn) { + var q='',selectlist=''; + selectlist=` DISTINCT VisibilityAnswerId as AnswerId,VisibilityAnswerName as Answer,VAShowCamera,VACameraMandatory,VAQuestionEnable,VAQuestionDisable `; + q=`select ${selectlist} from Master_VisibilityQuestion where VisibilityQuestionId='${qtn.VisibilityQuestionId}' order by VASequence `; + + await txn.executeSql(q,[],async function (txn2, txnres2) { + if(txnres2.rows.length>0){ + let arr=[]; + for(var i=0;i{ + return val + }).catch((err)=>{ + console.log(err); + return []; + }); + } + + async function getWindowStockData(window,storeData1,isInserted=false,AllKPIFields=[]){ + let obj={'WStocks':[],'WStocksData':[],'isAllChecked':0} + let {StateId,ChainId,StoreTypeId,StoreId}=storeData1; + + let isSpecificMapIndex=AllKPIFields.findIndex(i=>i.KPIFieldName=='SpecificMapping') + let isSpecificMapKPIObj=isSpecificMapIndex>=0?AllKPIFields[isSpecificMapIndex]:{}; + let isSpecificMappingEnable=isSpecificMapIndex>=0?isSpecificMapKPIObj['KPIFieldEnable']:false; + + return new Promise((resolve,reject)=>{ + db.transaction(async function (txn) { + let checkassrt=window.VisibilityElementCheckAssortment=='true' || window.VisibilityElementCheckAssortment==1?true:false; + let join='',join2='',selectlist2='',q2=''; + if(checkassrt){ + join=` inner join Mapping_ProductAssortmentStorewise a on a.ProductId=s.PVIS_STOCK_VALUE and a.StoreId='${StoreId}' `; + } + let selectlist1=` s.PVIS_STOCK_DEFINITION_ID as VisibilityStockDefinitionId, s.PVIS_DEFINITION_ID as VisibilityDefinitionId,s.PVIS_STOCK_TABLE as VisibilityStockTable,s.PVIS_STOCK_FIELD as VisibilityStockField,s.PVIS_STOCK_VALUE as VisibilityStockValue,s.PVIS_STOCK_MBQ as VisibilityStockMBQ,s.PRODUCT_NAME as ProductName, s.STOCK as Stock,s.IS_PVIS_PRESENT as isPVisPresent `; + let q=`select ${selectlist1} from ${AppTables.PAIDVIS_STOCK_DATA} s ${join} where s.PVIS_DEFINITION_ID='${window.VisibilityDefinitionId}' and s.STORE_ID='${storeData1.StoreId}' `; + + q+=` order by s.PRODUCT_NAME `; + + if(checkassrt){ + join2=` inner join Mapping_ProductAssortmentStorewise a on a.ProductId=s.VisibilityStockValue and a.StoreId='${StoreId}' `; + } + + if(isSpecificMappingEnable==true){ + // StoreId,VisibilityDefinitionId,VisibilityTable,VisibilityField,VisibilityValue,ChildName + selectlist2=` '0' as VisibilityStockDefinitionId, s.VisibilityDefinitionId,s.VisibilityTable as VisibilityStockTable,s.VisibilityField as VisibilityStockField,s.VisibilityValue as VisibilityStockValue,'' as VisibilityStockMBQ,s.ChildName as ProductName `; + q2=`select ${selectlist2} from Mapping_StoreVisibilitySpecific s ${join2} where s.VisibilityDefinitionId='${window.VisibilityDefinitionId}' and s.StoreId='${StoreId}' `; + }else{ + selectlist2=` s.VisibilityStockDefinitionId, s.VisibilityDefinitionId,s.VisibilityStockTable,s.VisibilityStockField,s.VisibilityStockValue,s.VisibilityStockMBQ,s.ProductName `; + q2=`select ${selectlist2} from Master_VisibilityStockDefinition s ${join2} where s.VisibilityDefinitionId='${window.VisibilityDefinitionId}' `; + } + + + // if(checkassrt){ + // q2+=` and a.StateId='${storeData1.StateId}' `; + // } + if(isSpecificMappingEnable==true){ + q2+=` order by s.ChildName `; + } + else{ + q2+=` order by s.ProductName `; + } + + + + await txn.executeSql(q,[],async function (txn2, txnres2) { + console.log('Stock qty added:',txnres2.rows.length); + if(txnres2.rows.length>0){ + let arr=[],WStocksData=[]; + let isAllChecked=1; + for(var i=0;i0){ + let arr=[],WStocksData=[]; + let isAllChecked=1; + for(var i=0;i{ + return val + }).catch((err)=>{ + console.log(err); + return obj; + }); + } + + function openRetakeOp(wind, type='1',IRImgIndex,IRimgPath){ + let data={'wind':wind,'type':type,'IRImgIndex':IRImgIndex,'IRimgPath':IRimgPath}; + setretakeMData(data); + setshowRetakeModal(true); + } + + + function closeRetakeOp(){ + setretakeMData({}) + setshowRetakeModal(false); + } + + async function StartCameraSession(wind,type='1'){ + // type: 1 or 2 , 1: Camera enabled for each window header ,2 : Camera enabled for once in KPI + let IR_Creds=props.IR_Creds!=null && props.IR_Creds!=""?JSON.parse(props.IR_Creds):[]; + let IR_CredsObj=IR_Creds.length>0?IR_Creds[0]:{}; + wind=wind!=null?wind:{}; + let newStdata=storeData; + if(IR_CredsObj.UseStoreCode!=1){ + newStdata.StoreCode=newStdata.StoreId; + } + let obj={"StoreData":newStdata}; + + // Option values for Perfetti paid visibility if IR shown in header only + // obj["category_name"]="multi"; + // obj["task_name"]="paid-visibility-displays"; + // obj["photo_type"]="paid-visibility"; + let task_name=windIRParams.task_name+" "+currentMenu.MenuId; + obj["category_name"]=windIRParams.category_name || ''; + obj["task_name"]=task_name;//'Generic Display'; + obj["photo_type"]=windIRParams.photo_type || ''; + + let st1=JSON.stringify(obj); + let TempSessionId= await IRLogin.StartIRSession(st1); + console.log('TempSessionId StartCameraSession:',TempSessionId,newStdata.StoreCode,windIRParams); + if(TempSessionId!=null){ + setLoaderTitle('Processing Image...'); + setProcessing(true); + let IRCamImages=await IRLogin.getImageURIFromIRSession(TempSessionId); + console.log('Images from session :',IRCamImages); + + if(type=='2'){ //set global IR images and session id if Camera is shown only once in header for KPI Screen + // setGbTempSessionId(TempSessionId); + GbTempSessionId.current=TempSessionId; + let sessObj={} + sessObj['Sess_StoreCode'] =newStdata.StoreCode; + sessObj['Sess_TaskName'] =obj["task_name"]; + sessObj['Sess_CatName'] =obj["category_name"]; + sessObj['Sess_PhotoType'] =obj["photo_type"]; + // setSOSIRImages(IRCamImages); + GbTempSessionObj.current=sessObj; + WindowIRImages.current=IRCamImages; + setIRZoomImages(IRCamImages); + } + else{ //set category wise IR images and session id if Camera is shown for each window + let zoomIRImages=await getIRZoomImages(IRCamImages) + + let allData=WindowData; + let defData={'VisibilityId':wind.VisibilityId,'VisibilityDefinitionId':wind.VisibilityDefinitionId}; + const win_index=allData.findIndex(i=>i.VisibilityId==wind.VisibilityId && i.VisibilityDefinitionId==wind.VisibilityDefinitionId); + let windData=win_index>=0?(allData[win_index] || defData) : defData; + windData['IRImages'] =IRCamImages; + windData['zoomIRImages'] =zoomIRImages; + windData['TempSessionId'] =TempSessionId; + windData['Sess_StoreCode'] =newStdata.StoreCode; + windData['Sess_TaskName'] =obj["task_name"]; + windData['Sess_CatName'] =obj["category_name"]; + windData['Sess_PhotoType'] =obj["photo_type"]; + win_index>=0?allData[win_index]=windData:allData.push(windData); + // setWindowData(allData); + BgWindowData(allData); + } + + // setHasUnsavedChanges(true); + BgUnsavedChanges(true); + setrerenderdata(!rerenderdata); + + // stop image processing loader after all images get from sessionID + setProcessing(false); + setLoaderTitle('loading...'); + + } + else{ + notify('Cannot capture images as getting Session Null.'); + } + + } + + + async function ResumeCameraSession(wind,type='1'){ + // type: 1 or 2 , 1: Camera enabled for each window header ,2 : Camera enabled for once in KPI + wind=wind!=null?wind:{}; + let allData=WindowData; + let defData={'VisibilityId':wind.VisibilityId,'VisibilityDefinitionId':wind.VisibilityDefinitionId}; + const win_index=allData.findIndex(i=>i.VisibilityId==wind.VisibilityId && i.VisibilityDefinitionId==wind.VisibilityDefinitionId); + let windData=win_index>=0?(allData[win_index] || defData) : defData; + + // Resume Temp Session Id + let TempSessionId=""; + if(type=='2'){ + TempSessionId= GbTempSessionId.current; + } + else{ + TempSessionId= windData.TempSessionId; + } + console.log('TempSessionId of wind :',TempSessionId); + if(TempSessionId!=null){ + setLoaderTitle('Processing Image...'); + setProcessing(true); + let retTempSessionId=await IRLogin.ResumeIRSession(TempSessionId); + console.log('retTempSessionId :',retTempSessionId); + if(retTempSessionId!=null){ + // start fetching images after capturing photos + + let IRCamImages=await IRLogin.getImageURIFromIRSession(TempSessionId); + console.log('Images from session :',IRCamImages); + + if(type=='2'){ + // setWindowIRImages(IRCamImages); + WindowIRImages.current=IRCamImages + setIRZoomImages(IRCamImages); + } + else{ + let zoomIRImages=await getIRZoomImages(IRCamImages) + windData['IRImages'] =IRCamImages; + windData['zoomIRImages'] =zoomIRImages; + win_index>=0?allData[win_index]=windData:allData.push(windData); + // setWindowData(allData); + BgWindowData(allData); + } + // setHasUnsavedChanges(true); + BgUnsavedChanges(true); + setrerenderdata(!rerenderdata); + + // stop image processing loader after all images get from sessionID + setProcessing(false); + setLoaderTitle('loading...'); + } + else{ + notify('Cannot capture images as getting Session Null.'); + } + + } + else{ + notify('Cannot capture images as getting Session Null.'); + } + + } + + async function DeleteIRPhoto(){ + console.log('DeleteIRPhoto called'); + setshowRetakeModal(false); + let {wind,type,IRImgIndex,IRimgPath}= retakeMData; + // type: 1 or 2 , 1: Camera enabled for each window header ,2 : Camera enabled for once in KPI + + wind=wind!=null?wind:{}, + type=type!=null?type:'1'; + IRImgIndex=IRImgIndex!=null?IRImgIndex:''; + IRimgPath=IRimgPath!=null?IRimgPath:''; + + + let allData=WindowData; + let defData={'VisibilityId':wind.VisibilityId,'VisibilityDefinitionId':wind.VisibilityDefinitionId}; + const win_index=allData.findIndex(i=>i.VisibilityId==wind.VisibilityId && i.VisibilityDefinitionId==wind.VisibilityDefinitionId); + let windData=win_index>=0?(allData[win_index] || defData) : defData; + + let TempSessionId=""; + if(type=='2'){ + TempSessionId=GbTempSessionId.current; + } + else{ + TempSessionId=windData['TempSessionId']; + } + + console.log('DeleteIRPhoto sessionID :',TempSessionId); + if(TempSessionId!=null || TempSessionId!=''){ + setLoaderTitle('Removing Image...'); + setProcessing(true); + let isDeleted= await IRLogin.DeleteIRSessionPhoto(TempSessionId,IRimgPath);//"8099b819-0979-40d2-950e-489566041484";// + console.log('DeleteIRPhoto isDeleted :',isDeleted); + if(isDeleted){ + setLoaderTitle('Processing Image...'); + + let IRCamImages=await IRLogin.getImageURIFromIRSession(TempSessionId); + console.log('Deleted, Images from session :',IRCamImages); + if(type=='2'){ + // setWindowIRImages(IRCamImages); + WindowIRImages.current=IRCamImages; + setIRZoomImages(IRCamImages); + } + else{ + let zoomIRImages=await getIRZoomImages(IRCamImages) + windData['IRImages'] =IRCamImages; + windData['zoomIRImages'] =zoomIRImages; + win_index>=0?allData[win_index]=windData:allData.push(windData); + // setWindowData(allData); + BgWindowData(allData); + } + + // setHasUnsavedChanges(true); + BgUnsavedChanges(true); + setrerenderdata(!rerenderdata); + + // stop image processing loader after all images get from sessionID + setProcessing(false); + setLoaderTitle('loading...'); + + } + else{ + notify('Cannot delete photo!.'); + } + + } + else{ + notify('Cannot delete photo! Found Null Session.'); + } + + } + + async function RetakeIRPhoto(){ + setshowRetakeModal(false); + let {wind,type,IRImgIndex,IRimgPath}= retakeMData; + // type: 1 or 2 , 1: Camera enabled for each window header ,2 : Camera enabled for once in KPI + + wind=wind!=null?wind:{}, + type=type!=null?type:'1'; + IRImgIndex=IRImgIndex!=null?IRImgIndex:''; + IRimgPath=IRimgPath!=null?IRimgPath:''; + + + let allData=WindowData; + let defData={'VisibilityId':wind.VisibilityId,'VisibilityDefinitionId':wind.VisibilityDefinitionId}; + const win_index=allData.findIndex(i=>i.VisibilityId==wind.VisibilityId && i.VisibilityDefinitionId==wind.VisibilityDefinitionId); + let windData=win_index>=0?(allData[win_index] || defData) : defData; + + let TempSessionId=""; + if(type=='2'){ + TempSessionId=GbTempSessionId.current; + } + else{ + TempSessionId=windData['TempSessionId']; + } + + console.log('Retake sessionID :',TempSessionId); + if(TempSessionId!=null || TempSessionId!=''){ + setLoaderTitle('Processing Image...'); + setProcessing(true); + let isRetakeDone= await IRLogin.RetakeIRSessionPhoto(TempSessionId,IRimgPath); + console.log('Retake isRetakeDone :',isRetakeDone); + if(isRetakeDone){ + setTimeout(async ()=>{ + let IRCamImages=await IRLogin.getImageURIFromIRSession(TempSessionId); + console.log('Retake Images from session :',IRCamImages); + if(type=='2'){ + // setWindowIRImages(IRCamImages); + WindowIRImages.current=IRCamImages; + setIRZoomImages(IRCamImages); + } + else{ + let zoomIRImages=await getIRZoomImages(IRCamImages) + windData['IRImages'] =IRCamImages; + windData['zoomIRImages'] =zoomIRImages; + win_index>=0?allData[win_index]=windData:allData.push(windData); + // setWindowData(allData); + BgWindowData(allData); + } + // setHasUnsavedChanges(true); + BgUnsavedChanges(true); + setrerenderdata(!rerenderdata); + + // stop image processing loader after all images get from sessionID + setProcessing(false); + setLoaderTitle('loading...'); + },1000); + + } + else{ + notify('Error occur while retaking photo!.'); + } + + } + else{ + notify('Cannot start camera! Found Null Session.'); + } + + } + + // Start Upload for IR images + async function UploadIRSessions(){ + setshowUploadAlert(false); + sessionsToUpload.current=[]; + sessionsReceived.current=0; + sessionsUploadedCount.current=0; + + try{ + let {StoreId}=storeData; + setLoaderTitle('Uploading Images...'); + setProcessing(true); + + // Global Upload function + // Sync Status for IR images + // From Infilect SDK 1.3.6 - The Images are uploading on realtime bases i.e. As the images are clicked by user the Images are getting uploaded to infilect server. + // In this case call below func to check the status of images that is already being uploaded by Real Time processing + let sync_result=await SyncIRsessionsInKPI(props,storeData,AppTables.PAIDVIS_IRUPLOAD,AppTables.PAIDVIS_IR_IMAGES,true,currentMenu); + let {isUploadStarted,AllDataUploaded,noDataFound,success,sessionList,sessionListWithDetails}=sync_result; + console.log("Sync Resp sync_result:",sync_result); + if(!success){ + notify('Cannot Upload Data! Something went wrong.'); + setProcessing(false); + } + else{ + if(noDataFound){ + notify('No session to upload!'); + setisDataUploaded('U'); + setProcessing(false); + } + else{ + if(!isUploadStarted && AllDataUploaded){ + notify('All images synced! No session to upload.'); + setisDataUploaded('U'); + setProcessing(false); + }else if(isUploadStarted){ + sessionsToUpload.current=sessionList; + sessionsToUploadDetails.current=sessionListWithDetails; + console.log("UploadStarted"); + } + } + } + }catch(e){ + console.log('Uploading Issue:',e); + setProcessing(false); + } + + + } + + async function UpdateIRUploadStatus(storeData1,menu1,TempSessionId,UnSessionId){ + console.log('UpdateIRUploadStatus'); + return new Promise((resolve,reject)=>{ + + let {StoreId,ChainId,StateId,StoreTypeId}=storeData1; + db.transaction(async function (txn) { + // update upload status and sync status here : when files are uploaded and we have got the universal session id for that + let q=`Update ${AppTables.PAIDVIS_IRUPLOAD} set UN_SESSION_ID='${UnSessionId}',UPLOAD_STATUS='1',SYNC_STATUS='Synced' where STORE_ID='${StoreId}' and VISIT_DATE='${d2}' and MENU_ID='${menu1.MenuId}' and TEMP_SESSION_ID='${TempSessionId}' `; + // console.log("update IR Upload q:",q); + await txn.executeSql(q,[],async function (txn2, txnres) { + console.log('Updated IR Upload Status'); + // console.log("update IR Upload q2:",q2); + let q2=`Update ${AppTables.PAIDVIS_IR_IMAGES} set UN_SESSION_ID='${UnSessionId}' where STORE_ID='${StoreId}' and VISIT_DATE='${d2}' and MENU_ID='${menu1.MenuId}' and TEMP_SESSION_ID='${TempSessionId}' `; + await txn.executeSql(q2,[],async function (txn2, txnres2) { + console.log('Updated IR Upload Images Status'); + resolve(true); + },function (txnE,txnerr) { console.log(txnerr);resolve(false); },); + + },function (txnE,txnerr) { console.log(txnerr);resolve(false); },); + }); + }).catch((Err)=>{ + console.log('Error in UpdateIRUploadStatus:',Err); + return false; + }) + + + + } + + async function LogImageUpload(storeData1,menu1,TempSessionId,UnSessionId,message,status,thisIR_SessObj={}){ + let {StoreId,StoreName}=storeData1; + const url=props.baseurl+getMethodName(METHODS.UPLOADJSON_METHOD); + const nowTime=moment().format('HH:mm:ss'); + let ImageCount=await getImageCount(storeData1,menu1,TempSessionId); + let {SESSION_STORECODE,SESSION_TASKNAME,SESSION_CATNAME,SESSION_PHOTOTYPE}=thisIR_SessObj; + + + ////Replaced special charecter and white space + let storeTittle = StoreName.replace(`@!%&`, '').replace(' ', '-'); + console.log("storeTittle:",storeTittle,StoreName); + + let obj={}; + obj['StoreId']=StoreId; + obj['Username']=props.UserId; + obj['VisitDate']=d2; + obj['InTime']=nowTime; + obj['TempSessionId']=TempSessionId; + obj['UnSessionId']=UnSessionId; + obj['Status']=status; + obj['Message']=message; + obj['ImageCount']=ImageCount; + obj['StoreTitle']=storeTittle; + obj['StoreCode']=SESSION_STORECODE; + obj['TaskName']=SESSION_TASKNAME; + obj['CategoryName']=SESSION_CATNAME; + obj['PhotoType']=SESSION_PHOTOTYPE; + obj['KPIType']=currentMenu.MenuName; + obj['ScreenName']=currentMenu.ScreenName; + obj['UploadType']="New"; + + let postData={}; + postData['MID']=0; + postData['Keys']='IR_UPLOAD_LOG_MSG'; + postData['JsonData']=JSON.stringify(obj); + postData['UserId']=props.UserId; + + console.log('postData',postData); + + return await UploadData2(url,postData) + .then((res)=>{ + // console.log("log Uploaded:",res.UploadJsonResult); + if(res.UploadJsonResult!=null && res.UploadJsonResult=='Success'){ + return true; + } + return false; + }) + .catch((err)=>{ + console.log(err); + return false; + }); + } + + async function getImageCount(storeData1,menu1,TempSessionId){ + let {StoreId,ChainId,StateId,StoreTypeId}=storeData1; + console.log('storeData in getImageCount',storeData1); + return new Promise((resolve,reject)=>{ + + + db.transaction(async function (txn) { + + let q=`select DISTINCT TEMP_SESSION_ID,count(IMAGE1) as ImageCount from ${AppTables.PAIDVIS_IR_IMAGES} where STORE_ID='${StoreId}' and VISIT_DATE='${d2}' and TEMP_SESSION_ID='${TempSessionId}' group by TEMP_SESSION_ID `; + console.log('q',q); + await txn.executeSql(q,[],async function (txn2, txnres) { + console.log('ImageCount rows:',txnres.rows.length); + if(txnres.rows.length>0){ + let data =txnres.rows.item(0); + console.log('data:',data) + console.log('Image Count for TempSessionId:',data.ImageCount); + resolve(data.ImageCount); + } + else{ + resolve(0); + } + + },function (txnE,txnerr) { console.log(txnerr);resolve(0); },); + }); + }).catch((Err)=>{ + console.log('Error in getImageCount:',Err); + return 0; + }) + + + + } + + + async function focusToNext(WindowStocks,windowIndex,stockProd,index) + { + console.log('focusToNext is call'); + console.log('WindowStocks',index+1) + + if(index==WindowStocks.length-1){ + return; + } + + try{ + // inputRefs.current['input1_'+data.VisibilityDefinitionId+"_"+data.VisibilityStockDefinitionId]=''; + // use (index+1) instead of WindowStocks[index+1].VisibilityStockDefinitionId as the condition does not work in case of isSpecificMappingEnable is true ( because all VisibilityStockDefinitionId are 0) + console.log('next 1 call','input1_'+WindowStocks[index+1].VisibilityDefinitionId+'_'+(index+1)) + let refIn2=inputRefs.current['input1_'+WindowStocks[index+1].VisibilityDefinitionId+'_'+(index+1)]; + // let refIn2=inputRefs.current['input1_'+stockProd.WindowDefinitionId+'_'+stockProd.WindowStockDefinitionId]; + + if(refIn2!=null){ + refIn2.focus(); + } + } + catch(err){ + console.log(err); + } + } + + async function getImage(imgdata){ + let type=getImageProps.type || ''; + let window=getImageProps.window || {}; + let splitItem=getImageProps.splitItem || {}; + let splitItemIndex=getImageProps.splitItemIndex || 0; + let qtn=getImageProps.qtn || {}; + let cameraType=getImageProps.cameraType!=null?getImageProps.cameraType:'1'; + + if(typeof imgdata=='object' && imgdata.errorCode=='camera_unavailable'){ + notify(ST.Cameraunavailable); + } + else if(typeof imgdata =='object' && imgdata.uri!=null){ + const img=imgdata; + const imgurl=img.uri, imgWidth=img.width, imgHeight=img.ExtendedHeight; + let isImgFromGallery=img.fromGallery!=null?img.fromGallery:false; + let picture_clickedd=isImgFromGallery==true?img.datetime:new Date(); + + let picture_clicked_time=moment(picture_clickedd).format('MM-DD-YYYY HH:mm:ss') + let picture_clicked_time_for_pic_name=moment(picture_clickedd).format('MMDDYYYY_HHmmss') + + console.log("time", picture_clicked_time); + console.log("time1", picture_clicked_time_for_pic_name); + let calculate_tym_date_for_filename = picture_clicked_time_for_pic_name; + let calculate_tym_date_over_img = picture_clicked_time; + + + let filename=storeData.StoreId+'_'+window.VisibilityDefinitionId+'_'+window.VisibilityId+'_'+(props.UserId || '')+'_STImg-'+calculate_tym_date_for_filename+'.jpg'; + + let allData=WindowData; + let defData={'VisibilityId':window.VisibilityId,'VisibilityDefinitionId':window.VisibilityDefinitionId}; + const wind_index=allData.findIndex(i=>i.VisibilityId==window.VisibilityId && i.VisibilityDefinitionId==window.VisibilityDefinitionId) ; + let wind=wind_index>=0?allData[wind_index]:defData; + + let camera1Label=window.VisibilityImage1Lable || ''; + let camera2Label=window.VisibilityImage2Lable || ''; + let extraLabel=''; + + if(cameraType=='2'){ + var QD=wind.WindowQA || {}; + var image_key=qtn.VisibilityQuestionId+'_ImageName1'; + var image_key_path=qtn.VisibilityQuestionId+'_ImagePath1'; + QD[image_key]=filename; + extraLabel='Qtn Id: '+qtn.VisibilityQuestionId; + } + else if(cameraType=='3'){ + var image_key='NAImage1'; + var image_key_path='NAImage1Path'; + wind[image_key]=filename; + extraLabel='Not Exist'; + } + else{ + var WindowSplits=wind.WindowSplits || []; + var image_key=type=='1'?'Image1Name':'Image2Name'; + var image_key_path=type=='1'?'Image1':'Image2'; + splitItem[image_key]=filename; + extraLabel=type=='1'?camera1Label:camera2Label; + } + + + + const mark_text1=calculate_tym_date_over_img; + const mark_text2='Store Name:'+storeData.StoreName+' | Store Id:'+storeData.StoreId+' | User Id:'+storeData.EmpId+' | Visibility Id:'+window.VisibilityDefinitionId+(extraLabel!=''?' ('+extraLabel+')':'')+' | Image Type: '+currentMenu.MenuName+' | Date:'+calculate_tym_date_over_img; + + + let imagePath=`${ImageFolderPath+currentMenu.ScreenName}/${filename}`; + RNFS.copyFile(imgurl, imagePath) + .then(async(resn) => { + // render data with clicked image + let uri='file://'+imagePath; + console.log('image marker:',imgWidth,imgHeight,uri); + + if(cameraType=='2'){ + QD[image_key_path]=uri; + wind.WindowQA=QD; + wind_index>=0?allData[wind_index]=wind:allData.push(wind); + WindowDataRef.current=allData + setWindowData(allData); + BgUnsavedChanges(true) + setrerenderdata3(!rerenderdata3); + } + else if(cameraType=='3'){ + wind[image_key_path]=uri; + wind_index>=0?allData[wind_index]=wind:allData.push(wind); + WindowDataRef.current=allData + setWindowData(allData); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + else{ + console.log('split image updated'); + splitItem[image_key_path]=uri; + splitItemIndex>=0?WindowSplits[splitItemIndex]=splitItem:WindowSplits.push(splitItem); + wind.WindowSplits=WindowSplits; + wind_index>=0?allData[wind_index]=wind:allData.push(wind); + WindowDataRef.current=allData + setWindowData(allData); + BgUnsavedChanges(true) + setrerenderdata2(!rerenderdata2); + } + + let objIndex = InputChange.findIndex(i=>i.VisibilityId==window.VisibilityId && i.VisibilityDefinitionId==window.VisibilityDefinitionId); + let winArr=[...InputChange] + winArr[objIndex].Flag=true + setSelectedImg(uri) + setInputChange(winArr) + + // add metdata then resize image and restored back to the imagePath + let restore_data={"destFilePath":imagePath,"imgurl":imgurl,imgWidth,imgHeight,mark_text1,mark_text2} + let is_restored=await restore_ImageWithMetaData(restore_data,imgdata); + console.log("image restored:",is_restored); + + }) + .catch(err => { + console.log('ERROR: image file write failed!!!'); + console.log(err.message, err.code); + }); + + } + +} + + + + async function onQRScanned(imgdata){ + let qtn=QRqtnData.qtn || {}; + let window=QRqtnData.window || {}; + let QR_withValidChars=imgdata!=null && imgdata!=''?imgdata.replace(/["']/g,''):''; + let value=QR_withValidChars;//imgdata && imgdata[0] && imgdata[0].displayValue ? imgdata[0].displayValue :"" + setTextValue(value,qtn,window) + } + + + function showQtnDatePicker(qtn,window,show=false){ + let allQtns=window.WindowQuestions || []; + let newqtnIndex=allQtns.findIndex(q=>q.VisibilityQuestionId==qtn.VisibilityQuestionId); + + if(newqtnIndex>=0){ + let newqtn=allQtns[newqtnIndex]; + newqtn.showDatePicker=show; + allQtns[newqtnIndex]=newqtn; + window['WindowQuestions']=allQtns; + let allWindows=Windows; + const winIndex=allWindows.findIndex(i=>i.VisibilityId==window.VisibilityId && i.VisibilityDefinitionId==window.VisibilityDefinitionId) || {}; + allWindows[winIndex]=window; + setWindows(allWindows); + setGlobalWindows(allwindows); + if(show==true) setrerenderdata(!rerenderdata); + } + } + + async function openCamera(window,splitItem,splitItemIndex,type='1',cameraType='1',qtn={}){ + let GridAllow = cameraType=='1' ?( type==='1' ? (window.VisibilityImage1CameraGrid === 'true' || window.VisibilityImage1CameraGrid==true): (window.VisibilityImage1CameraGrid === 'true' || window.VisibilityImage1CameraGrid==true)):false + + setGridValue(GridAllow); + setGetImageProps({'window':window,'splitItem':splitItem,'splitItemIndex':splitItemIndex,'type':type,'cameraType':cameraType,'qtn':qtn}); + UpdateShowCameraRef(true); + // props.navigation.navigate('CameraScreen',{'getImage':getImage,'cameraType':'back'}) + } + + async function onSubmitData(){ + let isvalid=await validate(); + if(isvalid){ + Keyboard.dismiss(); + setShowAlert(true); + } + } + + async function saveData(){ + // setHasUnsavedChanges(false); + BgUnsavedChanges(false) + setShowAlert(false); + setLoaderTitle(ST.SavingData+'...'); + setProcessing(true); + let d1n=new Date(); + let d3=moment(d1n).format('MM/DD/YYYY'); + try { + let {StoreId,ChainId,StateId,StoreTypeId}=storeData; + + let isSpecificMapIndex=KPIFields.findIndex(i=>i.KPIFieldName=='SpecificMapping') + let isSpecificMapKPIObj=isSpecificMapIndex>=0?KPIFields[isSpecificMapIndex]:{}; + let isSpecificMappingEnable=isSpecificMapIndex>=0?isSpecificMapKPIObj['KPIFieldEnable']:false; + + let isKPIIREnableI=KPIFields.findIndex(i=>i.KPIFieldName=='KPIIREnable') + let isKPIIREnableObj=isKPIIREnableI>=0?KPIFields[isKPIIREnableI]:{}; + let isKPIIREnable=isKPIIREnableI>=0?isKPIIREnableObj['KPIFieldEnable']:false; + + let CameraIROnceOnlyIndex=KPIFields.findIndex(i=>i.KPIFieldName=='CameraIROnceOnly') + let CameraIROnceOnlyObj=CameraIROnceOnlyIndex>=0?KPIFields[CameraIROnceOnlyIndex]:{}; + let CameraIROnceOnly=CameraIROnceOnlyIndex>=0?CameraIROnceOnlyObj['KPIFieldEnable']:true; + + + // remove old data + let isDeleted = await removePreviousData(); + console.log("isDeleted:",isDeleted); + + await db.transaction(async function (txn) { + + + + // add data + var values='',childV='',imageV='',stockV='',IRImageV='',IRStatusV=''; + + for (const wi in globalWindows){ + const window=globalWindows[wi]; + let isImage1=window.VisibilityImage1=='true' || window.VisibilityImage1==1?1:0; + let isImage2=window.VisibilityImage2=='true' || window.VisibilityImage2==1?1:0; + let isNAImageAvl=window.VisibilityNotExistCamera=='true' || window.VisibilityNotExistCamera==1?1:0; + let isNAReasonEnable=window.VisibilityNotExistReasonEnable=='true' || window.VisibilityNotExistReasonEnable==1? 1:0; + let isReasonEnable=window.VisibilityExistReasonEnable=='true' || window.VisibilityExistReasonEnable==1? 1:0; + let isStockReq=window.VisibilityElementStockRequired=='true' || window.VisibilityElementStockRequired==1?1:0; + let WindowQuestions=window.WindowQuestions || []; + let WindowStocks=window.WindowStocks || []; + + + const wind=WindowData.find(i=>i.VisibilityId==window.VisibilityId && i.VisibilityDefinitionId==window.VisibilityDefinitionId); + let isPresent=wind.isPresent!=null && wind.isPresent!=''?wind.isPresent:'0'; + let ReasonId=wind.ReasonId!=null?wind.ReasonId:0; + let Reason=wind.Reason!=null?wind.Reason:''; + let NAImage1=wind.NAImage1!=null?wind.NAImage1:''; + let NAImage1Path=wind.NAImage1Path!=null?wind.NAImage1Path:''; + let remark=wind.remark!=null?wind.remark:''; + let WindowSplits=wind.WindowSplits || []; + let QD=wind.WindowQA || {}; + let WStocksData=wind.WStocksData || []; + let windIRImages=wind.IRImages!=null?wind.IRImages:[]; + let TempSessionId=wind.TempSessionId!=null?wind.TempSessionId:''; + let Sess_StoreCode=wind.Sess_StoreCode!=null?wind.Sess_StoreCode:''; + let Sess_TaskName=wind.Sess_TaskName!=null?wind.Sess_TaskName:''; + let Sess_CatName=wind.Sess_CatName!=null?wind.Sess_CatName:''; + let Sess_PhotoType=wind.Sess_PhotoType!=null?wind.Sess_PhotoType:''; + + + let PVIS_HEADER_ID='WIND'+wi+(Math.floor(Math.random()*1000)+1); + let {VisibilityDefinitionId,MenuId,VisibilityId,VisibilityName,VisibilityTable,VisibilityField,VisibilityValue,ChildName}=window; + + // console.log('MenuId in savedata:',MenuId); + values+=values!=''?' , ':''; + values+=` ('${PVIS_HEADER_ID}','${MenuId}','${StoreId}','${d3}','${VisibilityDefinitionId}','${VisibilityId}','${VisibilityName}','${VisibilityTable}','${VisibilityField}','${VisibilityValue}','${ChildName}','${isPresent}','${NAImage1}','${ReasonId}','${Reason}','${(remark || '')}','1','${d3}','${isSpecificMappingEnable}') `; + + if(isKPIIREnable && !CameraIROnceOnly){ // Add window wise IR Status and Images if IR enabled and IR Camera enabled for each window + + for(const IRImageIndex in windIRImages){ + let IRImgObj=windIRImages[IRImageIndex]; + let Image1=IRImgObj['ImagePath']!=null && IRImgObj['ImagePath']!=''?IRImgObj['ImagePath']:''; + + IRImageV+=IRImageV!=''?' , ':''; + // PVIS_HEADER_ID,STORE_ID,VISIT_DATE,PVIS_DEFINITION_ID,PVIS_ID,IMAGE1,IMAGE2,TEMP_SESSION_ID,UN_SESSION_ID,MENU_ID,ADDED_DATE + IRImageV+=` ('${PVIS_HEADER_ID}','${StoreId}','${d3}','${VisibilityDefinitionId}','${VisibilityId}','${Image1}','','${TempSessionId}','','${currentMenu.MenuId}','${d3}') `; + } + + + IRStatusV+=IRStatusV!=''?' , ':''; + IRStatusV+=` ('${PVIS_HEADER_ID}','${StoreId}','${d3}','${VisibilityDefinitionId}','${VisibilityId}','${TempSessionId}','','0','','${currentMenu.MenuId}','${Sess_StoreCode}','${Sess_TaskName}','${Sess_CatName}','${Sess_PhotoType}','${d3}') `; + + } + + if(isPresent==1){ + for(const qtnIndex in WindowQuestions){ + const qtn=WindowQuestions[qtnIndex]; + + let selansid='',selanswer='',selimg='',showImageTag=false; + let id_key=qtn.VisibilityQuestionId+'_AnswerId'; + let ans_key=qtn.VisibilityQuestionId+'_Answer'; + let multi_key=qtn.VisibilityQuestionId+'_MultiOption'; + let date_key=qtn.VisibilityQuestionId+'_Date'; + let img_key=qtn.VisibilityQuestionId+'_ImagePath1'; + let imgname_key=qtn.VisibilityQuestionId+'_ImageName1'; + let rating_key=qtn.VisibilityQuestionId+'_Rating'; + let list_mcdata=[]; + + let {VisibilityQuestionId,VisibilityQuestionCode,QuestionType,VQShowCamera}=qtn + let answer=QD[ans_key] || 0; + let answerId=QD[id_key]===0? 0 :(QD[id_key]|| ''); + console.log("QDkey---------",answerId,QD[id_key],id_key) + let multi_options_ids=QD[multi_key] || ''; + + if(qtn.QuestionType=='Number' || qtn.QuestionType=='Text' || qtn.QuestionType=='Decimal' || qtn.QuestionType=='Date') + { + showImageTag=(qtn.VQShowCamera==1 || qtn.VQShowCamera=='true'); + } + else if((qtn.QuestionType=='Single choice list' || qtn.QuestionType=='Multi choice list' )){ + if (qtn.Answers && qtn.Answers.length>0){ + for(var i=0;i=0)){ + showImageTag=true; + } + + } + } + } + + let Image1=showImageTag==1?QD[imgname_key]:''; + + + childV+=childV!=''?' , ':''; + childV+=` ('${PVIS_HEADER_ID}','${StoreId}','${d3}','${VisibilityDefinitionId}','${VisibilityId}','${VisibilityQuestionId}','${VisibilityQuestionCode}','${QuestionType}','${answer}','${answerId}','${multi_options_ids}','${Image1}','${showImageTag}','${d3}') `; + } + if(!isKPIIREnable){ // Add images of normal camera only if IR not enabled + for(const splitItemIndex in WindowSplits){ + const splitItem=WindowSplits[splitItemIndex]; + let Image1Name=splitItem['Image1Name']!=null && splitItem['Image1Name']!=''?splitItem['Image1Name']:''; + let Image2Name=splitItem['Image2Name']!=null && splitItem['Image2Name']!=''?splitItem['Image2Name']:''; + Image1Name=isImage1==1?Image1Name:''; + Image2Name=isImage2==1?Image2Name:''; + + imageV+=imageV!=''?' , ':''; + imageV+=` ('${PVIS_HEADER_ID}','${StoreId}','${d3}','${VisibilityDefinitionId}','${VisibilityId}','${Image1Name}','${Image2Name}','${d3}') `; + } + } + + + for(const stockProdIndex in WindowStocks){ + const stockProd=WindowStocks[stockProdIndex]; + let sd=WStocksData.find(i=> i.ProductId==stockProd.VisibilityStockValue) || {}; + let stock=sd.Stock!=null?sd.Stock:(sd.Stock==0?sd.Stock:''); + let isPVisPresent=sd.isPVisPresent!=null?sd.isPVisPresent:0; + let {VisibilityStockDefinitionId, VisibilityDefinitionId,VisibilityStockTable,VisibilityStockField,VisibilityStockValue,VisibilityStockMBQ,ProductName} =stockProd + stockV+=stockV!=''?' , ':''; + stockV+=` ('${PVIS_HEADER_ID}','${StoreId}','${d3}','${VisibilityDefinitionId}','${VisibilityId}','${VisibilityStockDefinitionId}','${VisibilityStockTable}','${VisibilityStockField}','${VisibilityStockValue}','${VisibilityStockMBQ}','${ProductName}','${stock}','${isPVisPresent}','${d3}') `; + } + + } + } + + if(isKPIIREnable && CameraIROnceOnly){// Add window wise IR images if IR enabled and IR Camera enabled for once only + for(const IRImageIndex in WindowIRImages.current){ + let IRImgObj=WindowIRImages.current[IRImageIndex]; + let Image1=IRImgObj['ImagePath']!=null && IRImgObj['ImagePath']!=''?IRImgObj['ImagePath']:''; + + IRImageV+=IRImageV!=''?' , ':''; + IRImageV+=` ('','${StoreId}','${d3}','','','${Image1}','','${GbTempSessionId.current}','','${currentMenu.MenuId}','${d3}') `; + } + + let {Sess_StoreCode,Sess_TaskName,Sess_CatName,Sess_PhotoType}=GbTempSessionObj.current; + Sess_StoreCode=Sess_StoreCode || ''; + Sess_TaskName=Sess_TaskName || ''; + Sess_CatName=Sess_CatName || ''; + Sess_PhotoType=Sess_PhotoType || ''; + IRStatusV+=IRStatusV!=''?' , ':''; + IRStatusV+=` ('','${StoreId}','${d3}','','','${GbTempSessionId.current}','','0','','${currentMenu.MenuId}','${Sess_StoreCode}','${Sess_TaskName}','${Sess_CatName}','${Sess_PhotoType}','${d3}') `; + + } + console.log("savedata GbTempSessionId:",GbTempSessionId.current); + console.log("savedata IRImageV:",IRImageV); + console.log("savedata IRStatusV:",IRStatusV); + let add_hdr_data=`INSERT INTO ${AppTables.PAIDVIS_HDR_DATA} (PVIS_HEADER_ID,MENU_ID,STORE_ID,VISIT_DATE,PVIS_DEFINITION_ID,PVIS_ID,PVIS_NAME,PVIS_TABLE,PVIS_FIELD,PVIS_VALUE,CHILD_NAME,IS_PRESENT,PVIS_NA_IMAGE,REASON_ID,REASON,REMARK,IS_UPDATED,ADDED_DATE, IS_STORE_SPECIFIC) VALUES ${values} `; + let add_child_data=`INSERT INTO ${AppTables.PAIDVIS_CHILD_DATA} (PVIS_HEADER_ID,STORE_ID,VISIT_DATE,PVIS_DEFINITION_ID,PVIS_ID,QUESTION_ID,QUESTION_CODE,QUESTION_TYPE,ANSWER,ANSWER_ID,MULTI_OPTIONS_IDS,IMAGE1,IMAGE_ALLOW1,ADDED_DATE) VALUES ${childV} `; + let add_images_data=`INSERT INTO ${AppTables.PAIDVIS_IMAGES} (PVIS_HEADER_ID,STORE_ID,VISIT_DATE,PVIS_DEFINITION_ID,PVIS_ID,IMAGE1,IMAGE2,ADDED_DATE) VALUES ${imageV} `; + let add_stock_data=`INSERT INTO ${AppTables.PAIDVIS_STOCK_DATA} (PVIS_HEADER_ID,STORE_ID,VISIT_DATE,PVIS_DEFINITION_ID,PVIS_ID,PVIS_STOCK_DEFINITION_ID,PVIS_STOCK_TABLE,PVIS_STOCK_FIELD,PVIS_STOCK_VALUE,PVIS_STOCK_MBQ,PRODUCT_NAME,STOCK,IS_PVIS_PRESENT,ADDED_DATE) VALUES ${stockV} `; + let add_IRImage_data=`INSERT INTO ${AppTables.PAIDVIS_IR_IMAGES} (PVIS_HEADER_ID,STORE_ID,VISIT_DATE,PVIS_DEFINITION_ID,PVIS_ID,IMAGE1,IMAGE2,TEMP_SESSION_ID,UN_SESSION_ID,MENU_ID,ADDED_DATE) VALUES ${IRImageV} `; + let add_IRStatus_data=`INSERT INTO ${AppTables.PAIDVIS_IRUPLOAD} (PVIS_HEADER_ID,STORE_ID,VISIT_DATE,PVIS_DEFINITION_ID,PVIS_ID,TEMP_SESSION_ID,UN_SESSION_ID,UPLOAD_STATUS,SYNC_STATUS,MENU_ID,SESSION_STORECODE,SESSION_TASKNAME,SESSION_CATNAME,SESSION_PHOTOTYPE,ADDED_DATE) VALUES ${IRStatusV} `; + + + + await txn.executeSql(add_hdr_data,[],async function (txn2, txnres) { + console.log('st header data added'); + var isSplitImageAdded=true,isStockAdded=true,isChildAdded=true,isIRImageAdded=true,isIRStatusAdded=true; + if(imageV!=''){ + isSplitImageAdded=await executeQuery(add_images_data); + } + if(stockV!=''){ + isStockAdded=await executeQuery(add_stock_data); + } + if(childV!=''){ + isChildAdded=await executeQuery(add_child_data); + } + if(IRImageV!=''){ + isIRImageAdded=await executeQuery(add_IRImage_data); + } + if(IRStatusV!=''){ + isIRStatusAdded=await executeQuery(add_IRStatus_data); + } + + if(!isSplitImageAdded){ + setProcessing(false);notify('Cannot add paid visibility images'); + } + else if(!isStockAdded){ + setProcessing(false);notify('Cannot add paid visibility stock data'); + } + else if(!isChildAdded){ + setProcessing(false);notify('Cannot add paid visibility questions data'); + } + else if(!isIRImageAdded){ + setProcessing(false);notify('Cannot add paid visibility IR Images data'); + } + else if(!isIRStatusAdded){ + setProcessing(false);notify('Cannot add paid visibility IR Status data'); + } + else{ + setProcessing(false);notify('Paid visibility updated successfully'); + setisDataExists(true); + // setshowUploadAlert(true); + // clear store data in local storage to avoiding re-set data for the store + await clear_item('storeData') + BgUnsavedChanges(false);// when all data saved clear the unsaved changes flag + props.navigation.goBack();// send back + } + + + },function (txnE,txnerr) { console.log(txnerr);setProcessing(false);notify('Cannot add paid visibility data'); },); + }); + } catch (err) { + console.log(err); + } + } + + async function removePreviousData(){ + let {StoreId,ChainId,StateId,StoreTypeId}=storeData; + return new Promise((resolve,reject)=>{ + + db.transaction(async function (txn) { + + await txn.executeSql(`Select * FROM ${AppTables.PAIDVIS_HDR_DATA} WHERE STORE_ID='${StoreId}' and MENU_ID='${currentMenu.MenuId}' and VISIT_DATE='${d2}' `,[],async function (txn2, txnres) { + if(txnres.rows.length>0){ + let arr=[]; + let isHdrDel=false,isQtnsDel=false,isImagesDel=false,isStockDel=false,isIRImageDel=false,isIRStatusDel=false; + for(let i=0;i{ + return val; + }).catch((err)=>{ + console.log('error:',err); + return false; + }) + } + + async function executeQuery(q){ + return new Promise((resolve,reject)=>{ + db.transaction(async function (txn) { + await txn.executeSql(q,[],async function (txn2, txnres2) { + resolve(true); + },function(Etxn,txnerr){console.log(txnerr);resolve(false) }); + }); + }).then((val)=>{ + return val; + }).catch((err)=>{ + console.log(err); + return false; + }) + } + + async function validate(){ + let isValid=true; + + let isListedSKUIndex=KPIFields.findIndex(i=>i.KPIFieldName=='ListedSKUCheckbox'); + let isListedSKUKPIObj=isListedSKUIndex>=0?KPIFields[isListedSKUIndex]:{}; + let isListedSKUEnable=isListedSKUIndex>=0?isListedSKUKPIObj['KPIFieldEnable']:true; + + let isKPIIREnableI=KPIFields.findIndex(i=>i.KPIFieldName=='KPIIREnable') + let isKPIIREnableObj=isKPIIREnableI>=0?KPIFields[isKPIIREnableI]:{}; + let isKPIIREnable=isKPIIREnableI>=0?isKPIIREnableObj['KPIFieldEnable']:false; + + let CameraIROnceOnlyIndex=KPIFields.findIndex(i=>i.KPIFieldName=='CameraIROnceOnly') + let CameraIROnceOnlyObj=CameraIROnceOnlyIndex>=0?KPIFields[CameraIROnceOnlyIndex]:{}; + let CameraIROnceOnly=CameraIROnceOnlyIndex>=0?CameraIROnceOnlyObj['KPIFieldEnable']:true; + + + return new Promise((resolve,reject)=>{ + + // if(isKPIIREnable && StoreCameraAllow && CameraIROnceOnly && ( WindowIRImages.length<=0 || GbTempSessionId=='') ){ + // notify(`Please click Images for ${currentMenu.MenuName}`,'SHORT'); + // resolve(false);return; + // } + // else{ + let isAllNotPresent=true; + for (const wi in globalWindows){ + const window=globalWindows[wi]; + let isImage1=window.VisibilityImage1=='true' || window.VisibilityImage1==1?1:0; + let isImage2=window.VisibilityImage2=='true' || window.VisibilityImage2==1?1:0; + let isNAImageAvl=window.VisibilityNotExistCamera=='true' || window.VisibilityNotExistCamera==1?1:0; + let isNAReasonEnable=window.VisibilityNotExistReasonEnable=='true' || window.VisibilityNotExistReasonEnable==1? 1:0; + let isReasonEnable=window.VisibilityExistReasonEnable=='true' || window.VisibilityExistReasonEnable==1? 1:0; + let isStockReq=window.VisibilityElementStockRequired=='true' || window.VisibilityElementStockRequired==1?1:0; + let StockQtyRequired=window.StockQtyRequired=='true' || window.StockQtyRequired==1?1:0; + let WindowQuestions=window.WindowQuestions || []; + let WindowStocks=window.WindowStocks || []; + + + const wind=WindowData.find(i=>i.VisibilityId==window.VisibilityId && i.VisibilityDefinitionId==window.VisibilityDefinitionId); + let isPresent=wind.isPresent!=null && wind.isPresent!=''?wind.isPresent:'0'; + let ReasonId=wind.ReasonId!=null?wind.ReasonId:''; + let Reason=wind.Reason!=null?wind.Reason:''; + let NAImage1=wind.NAImage1!=null?wind.NAImage1:''; + let NAImage1Path=wind.NAImage1Path!=null?wind.NAImage1Path:''; + let remark=wind.remark!=null?wind.remark:''; + let WindowSplits=wind.WindowSplits || []; + let QD=wind.WindowQA || {}; + let WStocksData=wind.WStocksData || []; + let windIRImages=wind.IRImages!=null?wind.IRImages:[]; + let TempSessionId=wind.TempSessionId!=null?wind.TempSessionId:""; + + + if(isKPIIREnable && StoreCameraAllow && !CameraIROnceOnly && (windIRImages.length<=0 || TempSessionId=='') ){ + notify(`Please click Images for ${window.VisibilityName}`,'SHORT'); + resolve(false);return; + } + else{ + if(isPresent=='1'){ + isAllNotPresent=false; // Any paid visibility data exists + if(isReasonEnable==true && ReasonId=='' ){ + notify(`${ST.Pleaseselectreasonfor} ${window.VisibilityName} `,'LONG'); + resolve(false);return; + } + // else if(remark==''){ + // notify(`Please enter remark for ${window.VisibilityName} `,'LONG'); + // resolve(false);return; + // } + else{ + if(!isKPIIREnable && StoreCameraAllow && window.NoOfSplit>0 && WindowSplits.length>0 && (isImage1==1 || isImage2==1)) + { + for(const splitItemIndex in WindowSplits){ + const splitItem=WindowSplits[splitItemIndex]; + let Image1Name=splitItem['Image1Name']!=null && splitItem['Image1Name']!=''?splitItem['Image1Name']:''; + let Image2Name=splitItem['Image2Name']!=null && splitItem['Image2Name']!=''?splitItem['Image2Name']:''; + console.log('Image2Name',Image2Name,isImage2); + if(isImage1==1 && Image1Name==''){ + notify(`${ST.Pleaseclickallimagesfor} ${window.VisibilityName}`,'LONG'); + resolve(false);return; + } + else if(isImage2==1 && Image2Name==''){ + notify(`${ST.Pleaseclickallimagesfor} ${window.VisibilityName}`,'LONG'); + resolve(false);return; + } + } + } + + if(isStockReq==1){ + let isProductSelected=false; + for(const stockProdIndex in WindowStocks){ + const stockProd=WindowStocks[stockProdIndex]; + + let sd=WStocksData.find(i=> i.ProductId==stockProd.VisibilityStockValue) || {}; + let stock=sd.Stock!=null?sd.Stock:(sd.Stock==0?sd.Stock:''); + let isPVisPresent=sd.isPVisPresent!=null?sd.isPVisPresent:0; + + if(isPVisPresent==1){ + isProductSelected=true; + } + + if((isListedSKUEnable==true && isPVisPresent==1 && StockQtyRequired==1 && stock=='') || (isListedSKUEnable!=true && (stock==null || stock==''))){ + notify(`${ST.Pleaseenterstockfor} ${window.VisibilityName} ( ${stockProd.ProductName} ) `,'LONG'); + resolve(false);return; + } + + if(isListedSKUEnable==true && stockProdIndex==WindowStocks.length-1){ + if(!isProductSelected){ + notify(`${ST.PleaseselectatleastoneSKUfor} ${window.VisibilityName} `,'LONG'); + resolve(false);return; + } + } + + } + } + + if(WindowQuestions.length>0){ + for(const qtnIndex in WindowQuestions){ + const qtn=WindowQuestions[qtnIndex]; + + let selansid='',selanswer='',selimg='',showImageTag=false; + let id_key=qtn.VisibilityQuestionId+'_AnswerId'; + let ans_key=qtn.VisibilityQuestionId+'_Answer'; + let multi_key=qtn.VisibilityQuestionId+'_MultiOption'; + let date_key=qtn.VisibilityQuestionId+'_Date'; + let img_key=qtn.VisibilityQuestionId+'_ImagePath1'; + let imgname_key=qtn.VisibilityQuestionId+'_ImageName1'; + let rating_key=qtn.VisibilityQuestionId+'_Rating'; + let list_mcdata=[]; + + let isImgAllowed=(qtn.VQShowCamera=='true' || qtn.VQShowCamera==1); + let checkForAnsKey=(qtn.QuestionType=='Decimal' || qtn.QuestionType=='Number' || qtn.QuestionType=='Text' || qtn.QuestionType=='Date' || qtn.QuestionType=='Rating' || qtn.QuestionType=='QR') ; + if(qtn.QuestionType=='Single choice list') + { + selansid=QD[id_key]; + } + else if(qtn.QuestionType=='Multi choice list') + { + selansid=QD[multi_key]!=null && QD[multi_key]!=''?QD[multi_key].split(','):[]; + } + + + if(qtn.QuestionType=='Multi choice list' && selansid.length<=0){ + notify(`${Pleaseselectoptionsfortherequiredfield} ${ST.In} ${window.VisibilityName}`,'SHORT'); + resolve(false);return; + } + else if( checkForAnsKey && (Object.keys(QD).indexOf(ans_key)<0 || (Object.keys(QD).indexOf(ans_key)>=0 && QD[ans_key]===''))){ + // console.log("checkForAnsKey--------",checkForAnsKey, checkForAnsKey && (Object.keys(QD).indexOf(ans_key)<0 || (Object.keys(QD).indexOf(ans_key)>=0 && QD[ans_key]===''))) + let msg=( qtn.QuestionType=='Date'?`${ST.Pleasepickadatefortherequiredfield} ${ST.In} ${window.VisibilityName}`:(qtn.QuestionType=='Rating'?`${Pleaseselectratingfortherequiredfield} ${ST.In} ${window.VisibilityName}`:`${ST.Pleasefillalltherequiredfield} ${ST.In} ${window.VisibilityName}`)); + notify(msg,'SHORT'); + resolve(false);return; + } + else if(Object.keys(QD).indexOf(id_key)<0 || (Object.keys(QD).indexOf(id_key)>=0 && (QD[id_key]===''))){ + // console.log("checkForAnsKey--------2",Object.keys(QD).indexOf(id_key)<0 ,"|| (",Object.keys(QD).indexOf(id_key)>=0 ,"&&" ,(QD[id_key]===''),")",id_key,qtn.VisibilityQuestionName) + notify(`${ST.Pleasefillalltherequiredfield} ${ST.In} ${window.VisibilityName}`,'SHORT'); + resolve(false);return; + } + else if(!isKPIIREnable && StoreCameraAllow && isImgAllowed && (Object.keys(QD).indexOf(img_key)<0 || (Object.keys(QD).indexOf(img_key)>=0 && QD[img_key]===''))){ + notify(`${ST.Pleaseaddimages} ${ST.In} ${window.VisibilityName}`,'SHORT'); + resolve(false);return; + }else{ + console.log('no condition found'); + } + + if((qtn.QuestionType=='Single choice list' || qtn.QuestionType=='Multi choice list' )){ + if (qtn.Answers && qtn.Answers.length>0){ + for(var j=0;j=0)){ + showImageTag=true; + } + } + } + } + + if(!isKPIIREnable && StoreCameraAllow && showImageTag && (Object.keys(QD).indexOf(img_key)<0 || (Object.keys(QD).indexOf(img_key)>=0 && QD[img_key]===''))){ + notify(`${ST.Pleaseaddimages} ${ST.In} ${window.VisibilityName}`,'SHORT'); + resolve(false);return; + } + } + } + + } + } + else{ + if(isNAReasonEnable==true && ReasonId=='' ){ + notify(`${ST.Pleaseselectreasonfor} ${window.VisibilityName} `,'LONG'); + resolve(false);return; + } + else if(!isKPIIREnable && StoreCameraAllow && isNAImageAvl==true && NAImage1=='' ){ + notify(`${ST.Pleaseclickimagefor} ${window.VisibilityName}`,'LONG'); + resolve(false);return; + } + } + } + + + if(wi==(Windows.length-1)){ + // isAllNotPresent : check only of Any paid visibility data exists + if( isKPIIREnable && StoreCameraAllow && CameraIROnceOnly && !isAllNotPresent && ( WindowIRImages.current.length<=0 || GbTempSessionId.current=='') ){ + notify(`Please click Images for ${currentMenu.MenuName}`,'SHORT'); + resolve(false);return; + } + else{ + resolve(true);return; + } + } + + } + // } + + }).then((val)=>{return val}) + .catch((err)=>{console.log(err); return false}); + + } + + + function onselectionChange3(option,keyLbl,keyVal,otherData){ + + let item=otherData.window; + let allData=WindowData; + let defData={'VisibilityId':item.VisibilityId,'VisibilityDefinitionId':item.VisibilityDefinitionId}; + const win_index=allData.findIndex(i=>i.VisibilityId==item.VisibilityId && i.VisibilityDefinitionId==item.VisibilityDefinitionId); + let wind=win_index>=0?(allData[win_index] || defData) : defData; + wind[keyVal]=option.value; + wind[keyLbl]=option.label; + + win_index>=0?allData[win_index]=wind:allData.push(wind); + console.log('allData:',allData); + let objIndex = InputChange.findIndex(i=>i.VisibilityId==item.VisibilityId && i.VisibilityDefinitionId==item.VisibilityDefinitionId); + let winArr=[...InputChange] + winArr[objIndex].Flag=true + + setInputChange(winArr) + // setWindowData(allData); + BgWindowData(allData); + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + + function onselectionChange(option,qtn,window){ + let allData=WindowData; + let defData={'VisibilityId':window.VisibilityId,'VisibilityDefinitionId':window.VisibilityDefinitionId}; + const wind_index=allData.findIndex(i=>i.VisibilityId==window.VisibilityId && i.VisibilityDefinitionId==window.VisibilityDefinitionId); + let wind=wind_index>=0?allData[wind_index]:defData; + let data=wind.WindowQA || {}; + let id_key=qtn.VisibilityQuestionId+'_AnswerId'; + let ans_key=qtn.VisibilityQuestionId+'_Answer'; + data[id_key]=option.value; + data[ans_key]=option.label; + + + wind['WindowQA']=data; + wind_index>=0?allData[wind_index]=wind:allData.push(wind); + let objIndex = InputChange.findIndex(i=>i.VisibilityId==window.VisibilityId && i.VisibilityDefinitionId==window.VisibilityDefinitionId); + let winArr=[...InputChange] + winArr[objIndex].Flag=true + + setInputChange(winArr) + // setWindowData(allData); + BgWindowData(allData); + + let aq_ans=qtn.Answers!=null?qtn.Answers:[]; + let ans_obj=aq_ans.find(i=>i.AnswerId==option.value) || {}; + let EQtns=ans_obj.VAQuestionEnable!=null && ans_obj.VAQuestionEnable!=''?ans_obj.VAQuestionEnable.replace(' ','').split(','):[]; + let DQtns=ans_obj.VAQuestionDisable!=null && ans_obj.VAQuestionDisable!=''?ans_obj.VAQuestionDisable.replace(' ','').split(','):[]; + + let sqtns=window.WindowQuestions || [] + + // console.log("DQtns.length-----disableQtns",DQtns.length>0,EQtns.length>0) + // console.log("DQtns.length-----1",EQtns,DQtns) + + if(EQtns.length>0){ + enableQtns(sqtns,EQtns,DQtns,data,wind,wind_index,allData,window) + } + else if(DQtns.length>0){ + disableQtns(sqtns,DQtns,data,wind,wind_index,allData,window) + } + else{ + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + + } + + async function disableQtns(sqtns,DQtns,data,wind={},wind_index=-1,allData=[],window={}){ + + if(DQtns.length>0){ + new Promise.all( + DQtns.map((qid,q_index)=>{ + let s_qtnindex=sqtns.findIndex(i=>i.VisibilityQuestionId==qid) || {}; + let s_qtn=sqtns[s_qtnindex]; + if(s_qtn!=null){ + s_qtn['isDisabled']=true + sqtns[s_qtnindex]=s_qtn; + let id_key=s_qtn.VisibilityQuestionId+'_AnswerId'; + let ans_key=s_qtn.VisibilityQuestionId+'_Answer'; + data[id_key]=0; + data[ans_key]=''; + + wind['WindowQA']=data; + wind_index>=0?allData[wind_index]=wind:allData.push(wind); + return false + }else{ + return false + } + }) + ).then(async (val)=>{ + + let allwindows=Windows; + let windowIndex=allwindows.findIndex(i=>i.VisibilityDefinitionId==window.VisibilityDefinitionId && i.VisibilityId==window.VisibilityId) + if(windowIndex>=0){ + window['WindowQuestions']=sqtns; + allwindows[windowIndex]=window; + // setWindowData(allData); + BgWindowData(allData); + setWindows(allwindows); + setGlobalWindows(allwindows); + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + + }) + } + } + + async function enableQtns(sqtns,EQtns,DQtns,data,wind={},wind_index=-1,allData=[],window={}){ + new Promise.all( + EQtns.map((qid,q_index)=>{ + let s_qtnindex=sqtns.findIndex(i=>i.VisibilityQuestionId==qid) || {}; + let s_qtn=sqtns[s_qtnindex]; + // console.log("DQtns.length-----1.1",s_qtn,sqtns,qid) + if(s_qtn!=null){ + s_qtn['isDisabled']=false + sqtns[s_qtnindex]=s_qtn; + return false + } + else{ + return false + } + }) + ).then(async (val)=>{ + if(DQtns.length>0){ + await disableQtns(sqtns,DQtns,data,wind,wind_index,allData,window) + } + else{ + let allwindows=Windows; + let windowIndex=allwindows.findIndex(i=>i.VisibilityDefinitionId==window.VisibilityDefinitionId && i.VisibilityId==window.VisibilityId) + if(windowIndex>0){ + window['WindowQuestions']=sqtns; + allwindows[windowIndex]=window; + setWindows(allwindows); + setGlobalWindows(allwindows); + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + } + }) + } + + async function setMultiSelectValue(selectedItems=[],qtn={},window={}) { + console.log('setMultiSelectValue',selectedItems); + let id_key=qtn.VisibilityQuestionId+'_AnswerId'; + let ans_key=qtn.VisibilityQuestionId+'_Answer'; + let multi_key=qtn.VisibilityQuestionId+'_MultiOption'; + + let allData=WindowData; + let defData={'VisibilityId':window.VisibilityId,'VisibilityDefinitionId':window.VisibilityDefinitionId}; + const wind_index=allData.findIndex(i=>i.VisibilityId==window.VisibilityId && i.VisibilityDefinitionId==window.VisibilityDefinitionId); + let wind=wind_index>=0?allData[wind_index]:defData; + let obj=wind.WindowQA || {}; + obj[id_key]=0; + obj[multi_key]=selectedItems.join(','); + let anss=[]; + selectedItems.map((itemValue)=>{ + let ans = qtn.Answers.find(c1 => c1.AnswerId == itemValue); + if(ans.Answer){anss.push(ans.Answer)} + }); + obj[ans_key]=anss.join(','); + console.log('obj:',obj); + + wind['WindowQA']=obj; + wind_index>=0?allData[wind_index]=wind:allData.push(wind); + + let objIndex = InputChange.findIndex(i=>i.VisibilityId==window.VisibilityId && i.VisibilityDefinitionId==window.VisibilityDefinitionId); + let winArr=[...InputChange] + winArr[objIndex].Flag=true + + setInputChange(winArr) + // setWindowData(allData); + BgWindowData(allData); + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + + function setTextValue(value,qtn,window) { + let id_key=qtn.VisibilityQuestionId+'_AnswerId'; + let ans_key=qtn.VisibilityQuestionId+'_Answer'; + + let allData=WindowData; + let defData={'VisibilityId':window.VisibilityId,'VisibilityDefinitionId':window.VisibilityDefinitionId}; + const wind_index=allData.findIndex(i=>i.VisibilityId==window.VisibilityId && i.VisibilityDefinitionId==window.VisibilityDefinitionId); + let wind=wind_index>=0?allData[wind_index]:defData; + let obj=wind.WindowQA || {}; + + if(qtn.QuestionType=='Date' ){ + let date_key=qtn.VisibilityQuestionId+'_Date'; + let d=value!=null?new Date(value):new Date(); + let mfdate=moment(d).format('MM/YYYY'); + showQtnDatePicker(qtn,window,false); + obj[id_key]=0; + obj[ans_key]=mfdate; + obj[date_key]=moment(d).format('MM/DD/YYYY'); + } + else{ + obj[id_key]=0; + obj[ans_key]=value; + } + + console.log(value,obj); + wind['WindowQA']=obj; + wind_index>=0?allData[wind_index]=wind:allData.push(wind); + + let objIndex = InputChange.findIndex(i=>i.VisibilityId==window.VisibilityId && i.VisibilityDefinitionId==window.VisibilityDefinitionId); + let winArr=[...InputChange] + winArr[objIndex].Flag=true + + setInputChange(winArr) + // setWindowData(allData); + BgWindowData(allData); + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + + function showQtnDatePicker(qtn,window,show=false){ + let allQtns=window.WindowQuestions || []; + let newqtnIndex=allQtns.findIndex(q=>q.VisibilityQuestionId==qtn.VisibilityQuestionId); + + if(newqtnIndex>=0){ + let newqtn=allQtns[newqtnIndex]; + newqtn.showDatePicker=show; + allQtns[newqtnIndex]=newqtn; + window['WindowQuestions']=allQtns; + let allWindows=Windows; + const winIndex=allWindows.findIndex(i=>i.VisibilityId==window.VisibilityId && i.VisibilityDefinitionId==window.VisibilityDefinitionId) || {}; + allWindows[winIndex]=window; + setWindows(allWindows); + setGlobalWindows(allwindows); + if(show==true) setrerenderdata(!rerenderdata); + } + } + + function setRatingValue(data){ + setRatingOrder(data); + } + + function onRatingCancel(){ + setShowRating(false); + } + + function onRatingSave(){ + setShowRating(false); + let qtn=RatingQtn; + let window=RatingWindow; + let id_key=qtn.VisibilityQuestionId+'_AnswerId'; + let ans_key=qtn.VisibilityQuestionId+'_Answer'; + let rating_key=qtn.VisibilityQuestionId+'_Rating'; + let ids=[],anss=[]; + RatingOrder.map((item,index)=>{ + ids.push(item.AnswerId); + anss.push(item.Answer); + }) + + let allData=WindowData; + let defData={'VisibilityId':window.VisibilityId,'VisibilityDefinitionId':window.VisibilityDefinitionId}; + const wind_index=allData.findIndex(i=>i.VisibilityId==window.VisibilityId && i.VisibilityDefinitionId==window.VisibilityDefinitionId); + let wind=wind_index>=0?allData[wind_index]:defData; + let obj=wind.WindowQA || {}; + + obj[rating_key]=ids.join(','); + obj[id_key]=0; + obj[ans_key]=anss.join(','); + + wind['WindowQA']=obj; + wind_index>=0?allData[wind_index]=wind:allData.push(wind); + + let objIndex = InputChange.findIndex(i=>i.VisibilityId==window.VisibilityId && i.VisibilityDefinitionId==window.VisibilityDefinitionId); + let winArr=[...InputChange] + winArr[objIndex].Flag=true + + setInputChange(winArr) + // setWindowData(allData); + BgWindowData(allData); + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + + + function onChoiceSelect(item,val,key,animatedChoice){ + let win_index=InputChange.find(i=>i.VisibilityId==item.VisibilityId && i.VisibilityDefinitionId==item.VisibilityDefinitionId) + let changeValue=win_index.Flag; + + if(changeValue){ + setIsPresentClean(val) + setDataCleanAnim(animatedChoice) + setDataCleanItem(item) + setDataCleanModal(true) + return + } + + var val1=0; + val==1?val1=1:''; + + if(animatedChoice!=null){ + Animated.timing(animatedChoice, { + toValue: val1, + duration:400, + useNativeDriver:false, + }).start(); + } + onWindowDataChange(item,val,key) + } + + function onWindowDataChange(item,val,key){ + let allData=WindowData; + let defData={'VisibilityId':item.VisibilityId,'VisibilityDefinitionId':item.VisibilityDefinitionId}; + const win_index=allData.findIndex(i=>i.VisibilityId==item.VisibilityId && i.VisibilityDefinitionId==item.VisibilityDefinitionId); + let wind=win_index>=0?(allData[win_index] || defData) : defData; + wind[key]=val; + + if(key=='ReasonId'){ + let rsn=reasons_list.find(r=>r.ReasonId==val) || {}; + wind['Reason']=rsn.Reason || ''; + } + + win_index>=0?allData[win_index]=wind:allData.push(wind); + + if(key!="isPresent"){ + let objIndex = InputChange.findIndex(i=>i.VisibilityId==item.VisibilityId && i.VisibilityDefinitionId==item.VisibilityDefinitionId); + let winArr=[...InputChange] + winArr[objIndex].Flag=true + setInputChange(winArr) + } + + // setWindowData(allData); + BgWindowData(allData); + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + + + async function setWindowStockVal(val,window,stockProd,key,type=''){ + if(type=='numeric' && val!=''){ + const regex = new RegExp(/^\d+$/); + let isNUmeric=regex.test(val); + if(!isNUmeric){ + notify(ST.Pleaseenterwholenumbersonly,'SHORT'); + return; + } + } + + let allData=WindowData; + let defData={'VisibilityId':window.VisibilityId,'VisibilityDefinitionId':window.VisibilityDefinitionId}; + const win_index=allData.findIndex(i=>i.VisibilityId==window.VisibilityId && i.VisibilityDefinitionId==window.VisibilityDefinitionId); + let wind=win_index>=0?(allData[win_index] || defData) : defData; + let WStocksData=wind['WStocksData'] || []; + let sdIndex=WStocksData.findIndex(i=> i.ProductId==stockProd.VisibilityStockValue); + let sd=sdIndex>=0?WStocksData[sdIndex]:{'ProductId':stockProd.VisibilityStockValue,'Stock':''}; + sd[key]=val; + sdIndex>=0?WStocksData[sdIndex]=sd:WStocksData.push(sd); + wind['WStocksData']=WStocksData; + win_index>=0?allData[win_index]=wind:allData.push(wind); + if(key=='isPVisPresent'){ + let isAllChecked = await verifyAllChecked(val,window,stockProd,key); + wind['isAllSKUChecked']=isAllChecked; + } + + // setWindowData(allData); + BgWindowData(allData); + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata4(!rerenderdata4); + } + + async function onCatTextChange(window,key,val){ + let item=window; + let allData=WindowData; + let defData={'VisibilityId':item.VisibilityId,'VisibilityDefinitionId':item.VisibilityDefinitionId}; + const win_index=allData.findIndex(i=>i.VisibilityId==item.VisibilityId && i.VisibilityDefinitionId==item.VisibilityDefinitionId); + let wind=win_index>=0?(allData[win_index] || defData) : defData; + wind[key]=val; + + win_index>=0?allData[win_index]=wind:allData.push(wind); + + // setWindowData(allData); + BgWindowData(allData); + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + + + async function verifyAllChecked(val,window,stockProd,key){ + return await new Promise((resolve,reject)=>{ + let WindowStocks=window.WindowStocks || []; + let allData=WindowData; + const win_index=allData.findIndex(i=>i.VisibilityId==window.VisibilityId && i.VisibilityDefinitionId==window.VisibilityDefinitionId); + let wind=win_index>=0?(allData[win_index] || defData) : defData; + let WStocksData=wind['WStocksData'] || []; + if(WindowStocks.length>0){ + let isAllChecked=1; + for(var i=0;i a.ProductId==stockProd.VisibilityStockValue); + let sd1=sdIndex1>=0?WStocksData[sdIndex1]:{}; + let isPVisPresent=sd1.isPVisPresent; + if(isPVisPresent==null || isPVisPresent=='' || isPVisPresent==0 || isPVisPresent=='0'){ + isAllChecked=0 + } + + if(i==WindowStocks.length-1){ + resolve(isAllChecked); + } + } + } + else{ + resolve(0); + } + + }).catch((err)=>{ + console.log(err); + return 0; + }); + } + + function onWindowDataClean(){ + if(DataCleanAnim!=null){ + // console.log("anim---") + let anim=isPresentClean==1?1:''; + Animated.timing(DataCleanAnim, { + toValue:anim, + duration:400, + useNativeDriver:false, + }).start(); + } + let allData=WindowData; + let WindowSplits = []; + for(var s=0;si.VisibilityId==window.VisibilityId && i.VisibilityDefinitionId==window.VisibilityDefinitionId + let defData={'VisibilityId':DataCleanItem.VisibilityId,'VisibilityDefinitionId':DataCleanItem.VisibilityDefinitionId,'isAllSKUChecked':0,'WindowSplits':WindowSplits,'WindowQA':{},'WStocksData':[],isPresent:isPresentClean}; + const win_index=allData.findIndex(i=>i.VisibilityId==DataCleanItem.VisibilityId && i.VisibilityDefinitionId==DataCleanItem.VisibilityDefinitionId); + allData[win_index]=defData + + let objIndex = InputChange.findIndex((obj => obj.VisibilityId == DataCleanItem.VisibilityId && obj.VisibilityDefinitionId==DataCleanItem.VisibilityDefinitionId)); + let winArr=[...InputChange] + winArr[objIndex].Flag=false + + setInputChange(winArr) + // setWindowData(allData); + BgWindowData(allData); + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setDataCleanModal(false) + setrerenderdata(!rerenderdata); + } + + function checkAllSKUs(val,window){ + + let WindowStocks=window.WindowStocks || []; + let allData=WindowData; + let defData={'VisibilityId':window.VisibilityId,'VisibilityDefinitionId':window.VisibilityDefinitionId}; + const win_index=allData.findIndex(i=>i.VisibilityId==window.VisibilityId && i.VisibilityDefinitionId==window.VisibilityDefinitionId); + let wind=win_index>=0?(allData[win_index] || defData) : defData; + let WStocksData=wind['WStocksData'] || []; + console.log('WStocksData before:',WStocksData) + for(var i=0;i a.ProductId==stockProd.VisibilityStockValue); + let sd=sdIndex>=0?WStocksData[sdIndex]:{'ProductId':stockProd.VisibilityStockValue,'Stock':''}; + let isPVisPresent=(val==1 || val=='1')?1:0; + sd['isPVisPresent']=isPVisPresent; + + sdIndex>=0?(WStocksData[sdIndex]=sd):(WStocksData.push(sd)); + } + + + wind['WStocksData']=WStocksData; + wind['isAllSKUChecked']=val==1?1:0; + console.log('wind updated'); + win_index>=0?allData[win_index]=wind:allData.push(wind); + + + // setWindowData(allData); + BgWindowData(allData); + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + + function onSaveCancel(){ + setShowAlert(false); + } + + + + function setIRZoomImages(IRCamImages){ + let z_images=[]; + for(let ci in IRCamImages){ + let img=IRCamImages[ci]; + let img_obj={imgIndex:(ci+1),url: img.ImagePath, props: {}} + + z_images.push(img_obj); + if(ci==IRCamImages.length-1){ + setZoomImageUrl2(z_images); + } + } + } + + async function getIRZoomImages(IRCamImages){ + return new Promise((resolve,reject)=>{ + let z_images=[]; + for(let ci in IRCamImages){ + let img=IRCamImages[ci]; + let img_obj={imgIndex:(ci+1),url: img.ImagePath, props: {}} + + z_images.push(img_obj); + if(ci==IRCamImages.length-1){ + resolve(z_images) + } + } + }).catch((err)=>{ + console.log(err); + return []; + }) + } + + function openImageRefView(windowIndex=0){ + setrefImageIndex(windowIndex); + UpdateShow_zoomImageRef(true); + } + + function openImageRefView2(ImageIndex=0,wind_index,Type='2'){ + if(Type=='1'){ + let wind=Windows[wind_index]; + const windDataIndex=WindowData.findIndex(i=>i.VisibilityId==wind.VisibilityId && i.VisibilityDefinitionId==wind.VisibilityDefinitionId) ; + const windData=windDataIndex>=0?windData[windDataIndex]:{}; + let zoomIRImages=windData?.zoomIRImages!=null && windData?.zoomIRImages!=""? windData?.zoomIRImages:[]; + setZoomImageUrl2(zoomIRImages); + } + setrefImageIndex2(ImageIndex); + UpdateShow_zoomImageRef2(true); + } + + function FilterStores(searchedQry){ + searchedQry=searchedQry.toLowerCase(); + console.log('searchedQry',searchedQry); + let arr=[]; + let newWindows=[]; + if(searchedQry!=null && searchedQry!=''){ + + for(let i=0;i + + {ST.DragItemsInOrder} + {ST.Pressandholdtodrag} + {setRatingValue(data)}} + keyExtractor={(item) => item.AnswerId} + renderItem={renderItem} + /> + + {onRatingCancel()}}> + {ST.Cancel} + + {onRatingSave()}}> + {ST.Save} + + + + + ) + } + + function render_Picker(label_key,value_key,onChange=()=>{},selected_data={}){ + var data=[]; + let qtn=selected_data.qtn || {}; + let window=selected_data.window || {}; + let isQtnDisabled=qtn.isDisabled!=null || qtn.isDisabled!=''?false:true; + let allAnswers=qtn.Answers || []; + + allAnswers.map((item,index)=>{ + let obj={ key: index, label: item[label_key],value:item[value_key] }; + if(selected_data.value==item[label_key]) + obj['component']= {item[label_key]}; + data.push(obj); + }); + + return ( + {onChange(option,qtn,window) }} + overlayStyle={customStyle.addVisPickerOverlay} + cancelContainerStyle={customStyle.addVisPicker_OptionContainerStyle} + optionStyle={customStyle.addvis_opStyle} + optionTextStyle={customStyle.addvis_opTextStyle} + optionContainerStyle={customStyle.addVisPicker_OptionContainerStyle} + selectedKey={'1'} + disabled={isQtnDisabled} + > + {(selected_data.value!=null && selected_data.value!=''?selected_data.value: '-'+ST.select+'-')} + + ) + } + + function renderDatePicker(qtn,window){ + let qtnn=qtn; + let DateRange=qtn.DateRange; + let maxDate=moment().add(10,'years').format('MM/DD/YYYY'); + let minDate=moment().subtract(10,'years').format('MM/DD/YYYY'); + if(DateRange=='RFD'){ + maxDate=moment().format('MM/DD/YYYY'); + } + else if(DateRange=='RPD'){ + minDate=moment().format('MM/DD/YYYY'); + } + + return ( + {setTextValue(selectedDate,qtnn,window)}} + maximumDate={new Date(maxDate)} + minimumDate={new Date(minDate)} + /> + ); + } + + async function OpenImgModal(imgPath,window,splitItem,splitItemIndex,cameraType){ + setSelectedImg(imgPath) + setShowModal(true); + if((imgPath!='' && imgPath!=null)){ + setShowImageSaveOp(false); + } + else{ + setShowImageSaveOp(true); + } + setReCapImgModalObj({window,splitItem,splitItemIndex,cameraType}) + // _OpenCaptureImage_Modal(imgPath,window,splitItem,splitItemIndex,cameraType) + + } + + function cancelImage(){ + // setImage1(''); + setSelectedImg(''); + setReCapImgModalObj({}) + setShowModal(false); + } + + function _render_RetakePopup(){ + return ( + + + {RetakeIRPhoto()}}> + + + Retake + + + {DeleteIRPhoto()}}> + + + Delete + + + {closeRetakeOp()}}> + + + Cancel + + + + + + + + ) + } + + function _render_UploadAlert(){ + return ( + + + {setshowUploadAlert(false)}}> + Cancel + + {UploadIRSessions()}}> + Yes + + + + ) + } + + function _renderIRCamera(wind,IRImages,TempSessionId,type='1',wind_index=''){ + + let isSaveDisabled=(isDataUploaded=='U' || isDataUploaded=='P'); + let isResumeDisabled=(TempSessionId==null || TempSessionId=='' || TempSessionId=='undefined' || isSaveDisabled==true); + + return ( + + + {`Capture ${currentMenu.MenuName} Images`} + + + + { (IRImages!=null && IRImages.length>0) && + IRImages.map((IRImg,IRImgIndex)=>{ + let IRimgPath=IRImg.ImagePath; + return( + {openImageRefView2(IRImgIndex,wind_index,type)}}> + {(IRimgPath!=null && IRimgPath!='') && } + {(IRimgPath==null || IRimgPath=='') && } + {openRetakeOp(wind,type,IRImgIndex,IRimgPath)}}> + + + + ); + }) + + } + + + {StartCameraSession(wind,type)}}> + + Start Session + + {ResumeCameraSession(wind,type)}} > + + Resume Session + + + + + ) + } + + function _renderIRCameraOnce(){ + let isKPIIREnableI=KPIFields.findIndex(i=>i.KPIFieldName=='KPIIREnable') + let isKPIIREnableObj=isKPIIREnableI>=0?KPIFields[isKPIIREnableI]:{}; + let isKPIIREnable=isKPIIREnableI>=0?isKPIIREnableObj['KPIFieldEnable']:false; + + let CameraIROnceOnlyIndex=KPIFields.findIndex(i=>i.KPIFieldName=='CameraIROnceOnly') + let CameraIROnceOnlyObj=CameraIROnceOnlyIndex>=0?KPIFields[CameraIROnceOnlyIndex]:{}; + let CameraIROnceOnly=CameraIROnceOnlyIndex>=0?CameraIROnceOnlyObj['KPIFieldEnable']:true; + + if(isKPIIREnable && CameraIROnceOnly){ + return _renderIRCamera({},WindowIRImages.current,GbTempSessionId.current,'2',''); + } + else{ + return null; + } + + } + + + function _renderWindow(){ + let RemarkEnableIndex=KPIFields.findIndex(i=>i.KPIFieldName=='RemarkEnable') + let RemarkEnableKPIObj=RemarkEnableIndex>=0?KPIFields[RemarkEnableIndex]:{}; + let RemarkEnable=RemarkEnableIndex>=0?RemarkEnableKPIObj['KPIFieldEnable']:false; + + let isListedSKUIndex=KPIFields.findIndex(i=>i.KPIFieldName=='ListedSKUCheckbox'); + let isListedSKUKPIObj=isListedSKUIndex>=0?KPIFields[isListedSKUIndex]:{}; + let isListedSKUEnable=isListedSKUIndex>=0?isListedSKUKPIObj['KPIFieldEnable']:true; + + let isKPIIREnableI=KPIFields.findIndex(i=>i.KPIFieldName=='KPIIREnable') + let isKPIIREnableObj=isKPIIREnableI>=0?KPIFields[isKPIIREnableI]:{}; + let isKPIIREnable=isKPIIREnableI>=0?isKPIIREnableObj['KPIFieldEnable']:false; + + let CameraIROnceOnlyIndex=KPIFields.findIndex(i=>i.KPIFieldName=='CameraIROnceOnly') + let CameraIROnceOnlyObj=CameraIROnceOnlyIndex>=0?KPIFields[CameraIROnceOnlyIndex]:{}; + let CameraIROnceOnly=CameraIROnceOnlyIndex>=0?CameraIROnceOnlyObj['KPIFieldEnable']:true; + + + return ( + + + `window_${index.toString()}`} + ListHeaderComponent={_renderIRCameraOnce} + renderItem={({item,index})=>{ + const window=item; + const windowIndex=index; + + let isImage1=window.VisibilityImage1=='true' || window.VisibilityImage1==1?1:0; + let isImage2=window.VisibilityImage2=='true' || window.VisibilityImage2==1?1:0; + let isNAImageAvl=window.VisibilityNotExistCamera=='true' || window.VisibilityNotExistCamera==1?1:0; + let isNAReasonEnable=window.VisibilityNotExistReasonEnable=='true' || window.VisibilityNotExistReasonEnable==1? 1:0; + let isReasonEnable=window.VisibilityExistReasonEnable=='true' || window.VisibilityExistReasonEnable==1? 1:0; + let isStockReq=window.VisibilityElementStockRequired=='true' || window.VisibilityElementStockRequired==1?1:0; + let StockQtyRequired=window.StockQtyRequired=='true' || window.StockQtyRequired==1?1:0; + let PromoTitleEnable=window.PromoDefinitionTitleEnable=='true' || window.PromoDefinitionTitleEnable==1? 1:0; + let PromoTitle=window.PromoDefinitionTitle!=null && window.PromoDefinitionTitle!='undefined'? window.PromoDefinitionTitle:""; + + // let isStock_CheckAssrt=window.VisibilityElementCheckAssortment=='true' || window.VisibilityElementCheckAssortment==1?1:0; + let RefImage=window.VisibilityRefImage; + let camera1Label=window.VisibilityImage1Lable || ''; + let camera2Label=window.VisibilityImage2Lable || ''; + let WindowQuestions=window.WindowQuestions || []; + let WindowStocks=window.WindowStocks || []; + + + const wind=WindowData.find(i=>i.VisibilityId==window.VisibilityId && i.VisibilityDefinitionId==window.VisibilityDefinitionId); + let isPresent=wind.isPresent!=null && wind.isPresent!=''?wind.isPresent:'0'; + let ReasonId=wind.ReasonId!=null?wind.ReasonId:''; + let Reason=wind.Reason!=null?wind.Reason:''; + let NAImage1=wind.NAImage1!=null?wind.NAImage1:''; + let NAImage1Path=wind.NAImage1Path!=null?wind.NAImage1Path:''; + let remark=wind.remark!=null?wind.remark:''; + let WindowSplits=wind.WindowSplits || []; + let QuestionsData=wind.WindowQA || {}; + let WStocksData=wind.WStocksData || []; + let isAllSKUChecked=wind.isAllSKUChecked==1 || wind.isAllSKUChecked=="1"; + let windIRImages=wind.IRImages!=null?wind.IRImages:[]; + let TempSessionId=wind.TempSessionId!=null?wind.TempSessionId:""; + // console.log('RefImage:',RefImage); + + + var xpos=isPresent=='1'||isPresent==1?-75:0; + // console.log("Animated.Value-------------paid-",isPresent,wind.isPresent) + if(window.animatedChoice!=null ){ + xpos=window.animatedChoice.interpolate({ + inputRange:[0,1], + outputRange:[0,-75], + }); + } + + return( + + + + {window.VisibilityName} + { + window && window.ChildName !="" && {window.ChildName} + } + {(PromoTitleEnable==1 && PromoTitle!=null && PromoTitle!='') && {PromoTitle}} + {openImageRefView(index)}}> + + + + + + + + + {ST.IsPresent} + + + + {onChoiceSelect(window,1,'isPresent',window.animatedChoice)}}> + {ST.Yes} + + {onChoiceSelect(window,0,'isPresent',window.animatedChoice)}}> + {ST.No} + + + + + + {((isPresent!='1' && isNAReasonEnable==true) || (isPresent=='1' && isReasonEnable==true)) && + + {ST.SelectReason} + {} + {/* {CustomPicker(props,reasons_list,"Reason","ReasonId","Reason","ReasonId",onselectionChange3,{value:Reason,otherData:{window:window}},customStyle.PV_selectStyle,customStyle.PV_selectInputStyle,false,route)} */} + + } + + + {(!isKPIIREnable && (isPresent!='1' && isNAImageAvl==true)) && + + + + {ST.CaptureImage} + + + + + + { (NAImage1Path=='' || NAImage1Path==null) && + {openCamera(window,{},0,'1','3')}}> + + + } + { (NAImage1Path!='' && NAImage1Path!=null) && + + + {openCamera(window,{},0,'1','3')}}> + + + + } + + + + + + } + + {isKPIIREnable && !CameraIROnceOnly && + _renderIRCamera(window,windIRImages,TempSessionId,'1',windowIndex) + } + + {(isPresent=='1') && + + + {(isStockReq==true && WindowStocks.length>0) && + + + {(isListedSKUEnable==true?ST.SelectProducts:'Enter Stocks')} + + {isListedSKUEnable==true && + + {checkAllSKUs((isAllSKUChecked==1?0:1),window)}}> + {let val1=(val==true)?1:0; checkAllSKUs(val1,window) }} + style={[customStyle.WStkHdr_checkbox,(Platform.OS=='ios'?{height:20,width:20,marginLeft:5}:{})]} + tintColors={{ true:PageTheme.$primary_color, false:PageTheme.$text_color_light }} + /> + {ST.SelectAll} + + } + `wstock_${index.toString()}`} + renderItem={({item,index})=>{ + let stockProd=item; + let stockProdIndex=index; + let sd=WStocksData.find(i=> i.ProductId==stockProd.VisibilityStockValue) || {}; + let stock=sd.Stock!=null?sd.Stock:''; + let isPVisPresent=sd.isPVisPresent!=null?sd.isPVisPresent:0; + + return( + + {isListedSKUEnable!=true && {stockProd.ProductName}} + {isListedSKUEnable==true && + + + {let val1=(val==true)?1:0; setWindowStockVal(val1,window,stockProd,'isPVisPresent') }} + style={[customStyle.WStkHdr_checkbox,(Platform.OS=='ios'?{height:20,width:20,marginTop:5,marginLeft:5,}:{})]} + tintColors={{ true:PageTheme.$primary_color, false:PageTheme.$text_color_light }} + /> + + {stockProd.ProductName} + } + {((isListedSKUEnable==true && StockQtyRequired==1 && isPVisPresent==1 ) || isListedSKUEnable!=true) && + + + + Stock + + + + {inputRefs.current['input1_'+stockProd.VisibilityDefinitionId+'_'+index]=reff;}} + placeholder="" + autoComplete='off' + placeholderTextColor={PageTheme.$placeholder_color} + keyboardType={'number-pad'} + returnKeyType="next" + blurOnSubmit={false} + value={stock+''} + onSubmitEditing={()=>{focusToNext(WindowStocks,windowIndex,stockProd,index)}} + onChangeText={(val)=>{setWindowStockVal(val,window,stockProd,'Stock','numeric')}} + /> + + + + } + + ); + }} + /> + + } + {(!isKPIIREnable && ( window.NoOfSplit>0 && WindowSplits.length>0 && (isImage1==1 || isImage2==1))) && + + + {currentMenu.MenuName+' Images'} + + `spliItem_${index.toString()}`} + renderItem={({item,index})=>{ + let splitItem=item; + let splitItemIndex=index; + let Image1Name=splitItem['Image1Name']!=null && splitItem['Image1Name']!=''?splitItem['Image1Name']:''; + let Image2Name=splitItem['Image2Name']!=null && splitItem['Image2Name']!=''?splitItem['Image2Name']:''; + let Image1=splitItem['Image1']!=null && splitItem['Image1']!=''?splitItem['Image1']:''; + let Image2=splitItem['Image2']!=null && splitItem['Image2']!=''?splitItem['Image2']:''; + let isImg1mad=splitItem['img1Required'] || false; + let isImg2mad=splitItem['img2Required'] || false; + + + return( + + {isImage1==1 && + + {((Image1=='' || Image1==null) && isImg1mad) ? + {openCamera(window,splitItem,splitItemIndex,'1')}}> + + : (Image1=='' || Image1==null ) ? + {openCamera(window,splitItem,splitItemIndex,'1')}}> + + :(Image1!='' || Image1!=null ) ? + {OpenImgModal(Image1,window,splitItem,splitItemIndex,'1')}}> + + : null + } + {camera1Label} + + } + {isImage2==1 && + + {((Image2=='' || Image2==null) && isImg2mad) ? + {openCamera(window,splitItem,splitItemIndex,'2')}}> + + : (Image2=='' || Image2==null ) ? + {openCamera(window,splitItem,splitItemIndex,'2')}}> + + :(Image2!='' || Image2!=null ) ? + {OpenImgModal(Image2,window,splitItem,splitItemIndex,'2')}}> + + : null + } + {camera2Label} + + } + + ); + }} + /> + + } + + {(WindowQuestions.length>0) && + + + {currentMenu.MenuName+' Questions'} + + {WindowQuestions.map((item,index)=>{ + + let qtn=item; + let qtnIndex=index; + let selansid='',selanswer='',selimg='',showImageTag=false; + let id_key=qtn.VisibilityQuestionId+'_AnswerId'; + let ans_key=qtn.VisibilityQuestionId+'_Answer'; + let multi_key=qtn.VisibilityQuestionId+'_MultiOption'; + let date_key=qtn.VisibilityQuestionId+'_Date'; + let img_key=qtn.VisibilityQuestionId+'_ImagePath1'; + let imgname_key=qtn.VisibilityQuestionId+'_ImageName1'; + let rating_key=qtn.VisibilityQuestionId+'_Rating'; + + let list_mcdata=[]; + let VQDefaultQuestionEnable=qtn.VQDefaultQuestionEnable=='true' || qtn.VQDefaultQuestionEnable==1 || qtn.VQDefaultQuestionEnable=='1'?true:false; + let isDisabled=qtn.isDisabled; + if(qtn.QuestionType=='Single choice list') + { + selansid=QuestionsData[id_key]!=null ?QuestionsData[id_key] :''; + selanswer=QuestionsData[ans_key]!=null ?QuestionsData[ans_key] :''; + } + else if(qtn.QuestionType=='Multi choice list') + { + if(qtn.Answers!=null){ + for(var i=0;i0){ + // let arr=[]; + // for(var i=0;i0){ + for(var i=0;i=0)){ + showImageTag=true; + } + + } + } + } + + if(showImageTag){ + selimg=QuestionsData[img_key]!=null && QuestionsData[img_key]!=''?'file://'+QuestionsData[img_key]:''; + } + + + if(!isDisabled){ + return( + + {qtn.VisibilityQuestionName} + {qtn.QuestionType=='Single choice list' && qtn.Answers && + render_Picker('Answer','AnswerId',onselectionChange,{value:selanswer,qtn:qtn,window:window}) + } + {qtn.QuestionType=='Multi choice list' && qtn.Answers && + { setMultiSelectValue(selectedItems,qtn,window) }} //setMultiSelectValue(selectedItems,qtn) + selectedItems={selansid} + selectText="Pick Items" + searchInputPlaceholderText={ST.SearchItems+"..."} + // onChangeInput={ (text)=> console.log(text)} + tagRemoveIconColor={PageTheme.$primary_color} + tagBorderColor={PageTheme.$primary_color} + tagTextColor={PageTheme.$primary_color} + selectedItemTextColor={PageTheme.$primary_color} + selectedItemIconColor={PageTheme.$primary_color} + itemTextColor={PageTheme.$text_color} + displayKey="Answer" + searchInputStyle={{ color: '#CCC' }} + submitButtonColor={PageTheme.$primary_color} + submitButtonText={ST.Submit} + /> + } + { (qtn.QuestionType=='Number' || qtn.QuestionType=='Decimal' || qtn.QuestionType=='Text') && + {setTextValue(val,qtn,window)}} + /> + } + { + (qtn.QuestionType=='Date') && + + {selansid!=''?selansid:'MM/YYYY'} + {setDateValue(selanswer);showQtnDatePicker(qtn,window,true)}}> + + + + } + { + (qtn.QuestionType=='QR') && + + {selanswer!=''?selanswer:''} + {setQREnable(true);setQRqtnData({qtn,window});UpdateShowQRCameraRef(true);}}> + {/* */} + + + + } + { ((qtn.showDatePicker==true || qtn.showDatePicker=='true') && (qtn.QuestionType=='Date') ) && + renderDatePicker(qtn,window) + } + { + (qtn.QuestionType=='Rating') && + + {selanswer} + {setRatingQtn(qtn);setRatingWindow(window);setShowRating(true);}}> + + + + } + + { + // (qtn.QuestionType=='Audio') && + // + // {selanswer} + // {show_recorder(qtn);}}> + // + // + // + } + + { (!isKPIIREnable && (showImageTag)) && + + + {openCamera(window,{},0,'1','2',qtn)}}> + + + + } + + + + ) + } + else{ + return null; + } + })} + + } + { RemarkEnable==true && + + {ST.Remark} + {onCatTextChange(window,'remark',val)}} + /> + + } + + + } + + + + + + + ); + }} + /> + + + ) + } + + function _renderHeader(currentIndex,ImagesArr){ + return( + + {`${(currentIndex+1)}/${ImagesArr?.length}`} + {UpdateShow_zoomImageRef(false); UpdateShow_zoomImageRef2(false);}}> + + + + ) + } + + const onCancelClean = () =>{ + setDataCleanModal(false) + } + const onclear = () => { + onWindowDataClean(DataCleanItem) + } + + function _renderBtns(){ + + let isUploadDisabled=isDataUploaded=='U'; + let isSaveDisabled=(isDataUploaded=='U' || isDataUploaded=='P'); + + let colors1=(isUploadDisabled?[PageTheme.$tertiary_color,PageTheme.$tertiary_color]:[PageTheme.$secondary_color_light,PageTheme.$gradient2, PageTheme.$primary_color]); + let colors2=(isSaveDisabled?[PageTheme.$tertiary_color,PageTheme.$tertiary_color]:[PageTheme.$secondary_color_light,PageTheme.$gradient2, PageTheme.$primary_color]); + + return ( + + {onSubmitData()}} /> + + + ) + } + + + return ( + + {processing && } + + {_OpenCaptureImage_Modal()} + {ConfirmSaveAlert(props,showAlert,onSaveCancel,saveData)} + {ConfirmSaveAlert(props,DataCleanModal,onCancelClean,onclear,'Your data will be clean',)} + {_render_RetakePopup()} + {_render_UploadAlert()} + + {UpdateShowQRCameraRef(false);onQRScanned(imgData)}} showCamera={showQRCamera} onHideCamera={()=>{UpdateShowQRCameraRef(false);}}/> + {UpdateShowCameraRef(false);getImage(imgData)}} showCamera={showCamera} onHideCamera={()=>{UpdateShowCameraRef(false);}}/> + + + + + {setSearchedItem(val); FilterStores(val)}} + /> + {FilterStores(searchedItem)}}> + + + + { Object.keys(storeData).length>0 && + _renderWindow() + } + {_renderBtns()} + + + { showRating==true && + renderRatingView() + } + {show_zoomImage && + + null} + /> + + } + + {show_zoomImage2 && + + {return _renderHeader(currentIndex,zoomImageUrl2)}} renderIndicator={()=>null} + /> + + } + + ); +} + + +export default connect(mapStateToProps, mapDispatchToProps)(PaidVisibilityOneAppIR); \ No newline at end of file diff --git a/PerformicsSrc/src/screens/PaidVisibilityOneAppIR_Only.js b/PerformicsSrc/src/screens/PaidVisibilityOneAppIR_Only.js new file mode 100644 index 0000000..985a4b5 --- /dev/null +++ b/PerformicsSrc/src/screens/PaidVisibilityOneAppIR_Only.js @@ -0,0 +1,3081 @@ +import React,{useState,useEffect,useRef} from 'react'; +import Container from '../components/container'; +import { useRoute } from '@react-navigation/native'; +import { globalStyles,customStyles,GetPageTheme } from "../styles/Global"; +import { AppState, StatusBar,Image,TextInput,View,Text,ScrollView,TouchableOpacity,Platform,PermissionsAndroid,FlatList, Alert, Animated,KeyboardAvoidingView, DeviceEventEmitter, ViewBase, Keyboard} from 'react-native'; +import { ReactReduxContext,connect,useSelector, useDispatch } from 'react-redux'; +import { mapStateToProps,mapDispatchToProps } from '../reducers/contextProvider'; +import SQLite from 'react-native-sqlite-2'; +import {notify} from '../components/notify'; +import moment from 'moment'; +import {UploadData2, getDownloadJson,getKPIFields,marktext1,marktext2, resizeImage, restore_ImageWithMetaData} from '../controller/functions'; +import {get_item,set_item,clear_item} from '../components/localStorage'; +import {version,sloganline,appname,testurl,db, colors_Arr, common_ImagePath,ImageFolderPath} from '../constants/constants'; +import CustomHeader from '../components/customHeader'; +import {Card, Menu, Switch} from 'react-native-paper'; +import {AntDesign, Entypo, FontAwesome, Fontisto, Ionicons, MaterialCommunityIcons} from '../components/icons'; +import { stat } from 'react-native-fs'; +import CustomLoader from '../components/CustomLoader'; +import LinearGradient from 'react-native-linear-gradient'; +import { AppTables } from '../constants/tableConstants'; +import { SvgXml } from 'react-native-svg'; +import {launchCamera, launchImageLibrary,CameraOptions} from 'react-native-image-picker'; +import * as RNFS from 'react-native-fs'; +import GradientButton from '../components/gradientButton'; +import addImg from '../assets/performics/add_image.svg'; +import CustomModal from '../components/CustomModal'; +import { Q_getpaidvisibility } from '../constants/ConstantQueries'; +import { Picker } from '@react-native-picker/picker'; +import { ConfirmSaveAlert } from '../components/alert'; +import ModalSelector from 'react-native-modal-selector' +import { CustomPicker, CustomPicker2 } from '../components/CustomPicker'; +import CustomCamera from '../components/Camera'; +import ImageViewer from 'react-native-image-zoom-viewer'; +import DateTimePicker from '@react-native-community/datetimepicker'; +import CheckBox from '@react-native-community/checkbox'; + +import cameraImg from '../assets/performics/camera_front_image.svg' +import MultiSelect from 'react-native-multiple-select'; +import CameraImg3 from '../assets/performics/camera_tick.svg'; +import CameraImg2 from '../assets/performics/camera_icon.svg'; +import CameraImg4 from '../assets/performics/camera_asterisk.svg'; +import CameraImg5 from '../assets/image/astrickcamera.svg'; +import IRLogin from '../components/IRLogin'; +import { SyncIRsessionsInKPI } from '../constants/uploadData'; +import { METHODS, getMethodName } from '../constants/methodNames'; +import { PageTheme } from '../styles/Themes'; + +function PaidVisibilityOneAppIR_Only(props) { + const route = useRoute(); + const ST=props.StaticText || {}; + + // get all theme styles acc to current theme set + const PageTheme=GetPageTheme(props.DarkMode,route.name); + const customStyle=customStyles(props.DarkMode,route.name); + const animatedChoice=useRef(new Animated.Value(0)).current; + + const [processing, setProcessing] = useState(true); + const [loaderTitle, setLoaderTitle] = useState(); + const [isAdhocScreen, setIsAdhocScreen] = useState(false); + const [storeData, setStoreData] = useState({}); + const [StoreCameraAllow, setStoreCameraAllow] = useState(true); + const [currentMenu, setCurrentMenu] = useState({}); + const [rerenderdata, setrerenderdata]= useState(0); + const [rerenderdata2, setrerenderdata2]= useState(0); + const [rerenderdata3, setrerenderdata3]= useState(0); + const [rerenderdata4, setrerenderdata4]= useState(0); + + const [hasUnsavedChanges,setHasUnsavedChanges] = useState(false); + + const [WindowData, setWindowData] = useState([]); + const [reasons_list, setReasons_list] = useState([]); + const [Windows, setWindows] = useState([]); + + const [show_zoomImage, setShow_zoomImage] = useState(false); + const [show_zoomImage2, setShow_zoomImage2] = useState(false); + const Show_zoomImageRef=useRef(false); + const Show_zoomImageRef2=useRef(false); + const [zoomImageIndex, setzoomImageIndex] = useState(0); + const [refImageIndex, setrefImageIndex] = useState(0); + const [refImageIndex2, setrefImageIndex2] = useState(0); + const [zoomImageUrl, setZoomImageUrl] = useState([]); + const [zoomImageUrl2, setZoomImageUrl2] = useState([]); + const zoomView=useRef(null); + const zoomView2=useRef(null); + + const [showAlert, setShowAlert] = useState(false); + + const [showCamera, setShowCamera] = useState(false); + const showCameraRef = useRef(false); + const [showQRCamera, setShowQRCamera] = useState(false); + const showQRCameraRef = useRef(false); + const [getImageProps,setGetImageProps]= useState({}); + const [showRating, setShowRating] = useState(false); + const [RatingQtn, setRatingQtn] = useState({}); + const [RatingWindow, setRatingWindow] = useState({}); + const [RatingOrder, setRatingOrder] = useState([]); + + const [Products, setProducts] = useState([]); + const [DisplayList, setDisplayList] = useState([]); + const [toRemoveId,setToRemoveId]= useState(''); + const [toRemoveItem,setToRemoveItem]= useState({}); + const [showRemoveConfirm_M,setshowRemoveConfirm_M]= useState(false); + const [showRAllC_M,setShowRAllC_M]= useState(false); + const [searchedItem, setSearchedItem]= useState(''); + const [globalWindows, setGlobalWindows] = useState([]); + const [KPIFields, setKPIFields] = useState([]); + const [GridValue, setGridValue] = useState(false); + const [QREnable, setQREnable] = useState(false); + + const [DataCleanModal, setDataCleanModal] = useState(false); + const [DataCleanAnim, setDataCleanAnim] = useState(""); + const [DataCleanItem, setDataCleanItem] = useState({}); + const [isPresentClean, setIsPresentClean] = useState(0); + + const [InputChange, setInputChange] = useState([]); + + const [SelectedImg, setSelectedImg] = useState(''); + const [showModal, setShowModal] = useState(false); + const [reCapImgModalObj, setReCapImgModalObj] = useState({}); + const [showImageSaveOp, setShowImageSaveOp] = useState(true); + const [ImgMadCount, setImgMadCount] = useState({img1:0,img2:0}); + const [AppStatus, setAppStatus] = useState(AppState.currentState); + const [QRqtnData, setQRqtnData] = useState({}); + + const hasUnsavedChangesRef = React.useRef(hasUnsavedChanges); + const WindowDataRef=React.useRef(WindowData); + const StoreIdRef=React.useRef(null); + const ScreenNameRef=React.useRef({}); + + const inputRefs = useRef({}); + + + // IR states or refs + const [isDataExists, setisDataExists] = useState(false); + const [isDataUploaded, setisDataUploaded] = useState("N"); + // const [WindowIRImages, setWindowIRImages] = useState([]); + // const [GbTempSessionId, setGbTempSessionId] = useState(""); + const WindowIRImages=useRef([]); + const GbTempSessionId=useRef(""); + const GbTempSessionObj=useRef({}); + const sessionsToUpload = useRef([]); + const sessionsToUploadDetails = useRef([]); + const sessionsUploadedCount = useRef(0); + const sessionsReceived = useRef(0); + const [showRetakeModal, setshowRetakeModal] = useState(false); + const [retakeMData, setretakeMData] = useState({}); + const [showUploadAlert, setshowUploadAlert] = useState(false); + const [windIRParams, setWindIRParams] = useState({}); + + + const d1=new Date(); + const d2=moment(d1).format('MM/DD/YYYY'); + + + useEffect(() => { + setLoaderTitle(ST.Loading+'...') + let params=props.route.params? props.route.params:{}; + let storeData1=params.storeData || {}; + let menu1=params.menu || {}; + let cameraAllow=storeData1.CameraAllow=='true' || storeData1.CameraAllow==1?true:false; + setStoreCameraAllow(cameraAllow); + + let isAdhoc=params.isAdhoc || false; + + StoreIdRef.current=storeData1.StoreId + ScreenNameRef.current={BgscreenName:menu1.ScreenName,BgMenuId:menu1.MenuId } + setIsAdhocScreen(isAdhoc); + setStoreData(storeData1); + setCurrentMenu(menu1); + + let IR_Creds=props.IR_Creds!=null && props.IR_Creds!=""?JSON.parse(props.IR_Creds):[]; + let IR_CredsObj=IR_Creds.length>0?IR_Creds[0]:{}; + let Vis_IRCreds=IR_CredsObj.Visibility!=null && IR_CredsObj.Visibility.length>0?IR_CredsObj.Visibility[0]:{}; + setWindIRParams(Vis_IRCreds); + + getData(storeData1,menu1); + + const AppStateSubscription = AppState.addEventListener('change', (pro)=>{ _handleAppStateChange(pro)}); + const removeIRListener=DeviceEventEmitter.addListener('onIRImageUpload',(data)=>{ onIRImageUpload(data,storeData1,menu1)}); + const unsubscribe=props.navigation.addListener('beforeRemove', onBeforeRemove); + + + return function cleanup() { + IRLogin.deRegisterReceiver(); + AppStateSubscription.remove(); + removeIRListener.remove(); + return unsubscribe; + }; + }, []); + + + + const _handleAppStateChange = async (nextAppState) => { + + if(nextAppState =='background' && hasUnsavedChangesRef.current==true){ + + let newData = { + storeBGData:WindowDataRef.current, + menuName:ScreenNameRef.current && ScreenNameRef.current.BgscreenName, + StoreId1:StoreIdRef.current, + BgMenuID: ScreenNameRef.current && ScreenNameRef.current.BgMenuId, + bg_GbTempSessionId:GbTempSessionId.current, + bg_WindowIRImages:WindowIRImages.current, + visiteDate:d2 + } + let WindowsStr= await JSON.stringify(newData) + + await set_item('storeData',WindowsStr); + } + } + + + + // useEffect(() => { + // const unsubscribe=props.navigation.addListener('beforeRemove', onBeforeRemove); + // return unsubscribe; + // }, [hasUnsavedChanges]); + + + // useEffect(() => { + // const unsubscribe=props.navigation.addListener('beforeRemove', onBeforeRemove); + // return unsubscribe; + // }, [showCamera]); + + // useEffect(() => { + // const unsubscribe=props.navigation.addListener('beforeRemove', onBeforeRemove); + // return unsubscribe; + // }, [showQRCamera]); + + + function onBeforeRemove(e){ + + if(showCameraRef.current==true || showQRCameraRef.current==true ){ + e.preventDefault(); + UpdateShowCameraRef(false); + UpdateShowQRCameraRef(false) + } + else if(Show_zoomImageRef.current==true || Show_zoomImageRef2.current==true){ + e.preventDefault(); + UpdateShow_zoomImageRef(false); + UpdateShow_zoomImageRef2(false); + } + else{ + if (hasUnsavedChangesRef.current==true) { + e.preventDefault(); // Prevent default behavior of leaving the screen + onRemoveScreen(e); + } + else{ + return; + } + } + } + + function BgUnsavedChanges(val){ + hasUnsavedChangesRef.current=val + setHasUnsavedChanges(val); + } + + function BgWindowData(val){ + WindowDataRef.current=val + setWindowData(val); + } + + function UpdateShow_zoomImageRef(val){ + Show_zoomImageRef.current=val + setShow_zoomImage(val); + } + + function UpdateShow_zoomImageRef2(val){ + Show_zoomImageRef2.current=val + setShow_zoomImage2(val); + } + + + function UpdateShowCameraRef(val){ + showCameraRef.current=val + setShowCamera(val); + } + + function UpdateShowQRCameraRef(val){ + showQRCameraRef.current=val + setShowQRCamera(val); + } + + + async function onIRImageUpload(data,storeData1,menu1){ + console.log('onIRImageUpload on receive',data); + let {message,sessionId,status}=data; + let snum=sessionsReceived.current+1; + let su_num=sessionsUploadedCount.current; + console.log('onreceive data',data); + sessionsReceived.current=snum; + let thisIR_SessObjIndex=sessionsToUploadDetails.current.findIndex(i=>i.TEMP_SESSION_ID==sessionId); + let thisIR_SessObj=sessionsToUploadDetails.current[thisIR_SessObjIndex]; + if(status!=null && status=='200' && sessionId!=null && sessionId!=''){ + + let UnSessionId=await IRLogin.getDataIRSession(sessionId); + if(UnSessionId!=null && UnSessionId!=''){ + sessionsUploadedCount.current=++su_num; + let isUpdated=await UpdateIRUploadStatus(storeData1,menu1,sessionId,UnSessionId); + let isUploaded=await LogImageUpload(storeData1,menu1,sessionId,UnSessionId,message,status,thisIR_SessObj); + console.log("su_num:",su_num); + if(isUploaded){ + console.log('Image Uploaded'); + notify("Images Log uploaded for session:"+sessionId); + } + else{ + console.log('cannot Uploaded image'); + notify("cannot upload log for session:"+sessionId); + } + + } + else{ + console.log('OnReceived UnSessionId get',UnSessionId); + notify("Cannot upload images for session:"+sessionId+". Universal Id not found"); + let isUploaded=await LogImageUpload(storeData1,menu1,sessionId,"",message,status,thisIR_SessObj); + if(isUploaded){ + console.log('Image Uploaded'); + notify("Images Log uploaded for session:"+sessionId); + } + else{ + console.log('cannot Uploaded image'); + notify("cannot upload log for session:"+sessionId); + } + + } + + } + else{ + console.log('Cannot get OnReceived UnSessionId'); + notify((message!=null && message!=""?message+". ":"")+"Cannot upload images for session:"+sessionId); + let isUploaded=await LogImageUpload(storeData1,menu1,sessionId,"",message,status,thisIR_SessObj); + if(isUploaded){ + console.log('Image Uploaded'); + notify("Images Log uploaded for session:"+sessionId); + } + else{ + console.log('cannot Uploaded image'); + notify("cannot upload log for session:"+sessionId); + } + + + } + + console.log("check snum and su_num:",snum,su_num,sessionsToUpload.current.length); + // if last broadcast received either uploaded or not update the processing status to false + if(snum==sessionsToUpload.current.length){ + setProcessing(false); + console.log('Deregister event when last received'); + IRLogin.deRegisterReceiver(); + } + + // All IR Sessions with Images Uploaded : set DataUploaded Status to U (Fully Upload) + if(su_num==sessionsToUpload.current.length){ + setisDataUploaded("U"); + setProcessing(false); + notify("All IR images uploaded!"); + console.log('set all uploaded true to U'); + } + // Some Of IR Sessions with Images Uploaded but some are yet pending : set DataUploaded Status to P (Partial Upload) + else if(su_num>0 && su_num!=sessionsToUpload.current.length){ + // setProcessing(false); + setisDataUploaded("P"); + notify("Some IR Images are still not uploaded!"); + console.log('set all uploaded true to P'); + } + } + + function onRemoveScreen(e){ + Alert.alert( + "", + ST.Doyoureallywanttoexitthescreen, + [ + { + text: ST.Cancel, + onPress: () => {}, + style: "cancel" + }, + { text: ST.OK, onPress: async () => { + // setHasUnsavedChanges(false); + BgUnsavedChanges(false) + await clear_item('storeData') + props.navigation.dispatch(e.data.action);} } + ] + ); + } + + + function _OpenCaptureImage_Modal(img){ + + const isImageCap=(img!='' || img!=null)?true:false; + let {window,splitItem,splitItemIndex,cameraType}=reCapImgModalObj + let camera2Label=(window && window.PromoImage2Lable) || ''; + return ( + + { + isImageCap && + + + + + + {openCamera(window,splitItem,splitItemIndex,cameraType)}}> + + + + {!showImageSaveOp && + {cancelImage(false)}}> + + {ST.Close} + + } + + } + + ) + } + + + async function getData(storeData1,menu1){ + try { + let {StoreId,ChainId,StateId,StoreTypeId}=storeData1; + + let AllKPIFields=await getKPIFields(menu1); + setKPIFields(AllKPIFields); + + let isSpecificMapIndex=AllKPIFields.findIndex(i=>i.KPIFieldName=='SpecificMapping') + let isSpecificMapKPIObj=isSpecificMapIndex>=0?AllKPIFields[isSpecificMapIndex]:{}; + let isSpecificMappingEnable=isSpecificMapIndex>=0?isSpecificMapKPIObj['KPIFieldEnable']:false; + + + let CameraIROnceOnlyIndex=AllKPIFields.findIndex(i=>i.KPIFieldName=='CameraIROnceOnly') + let CameraIROnceOnlyObj=CameraIROnceOnlyIndex>=0?AllKPIFields[CameraIROnceOnlyIndex]:{}; + let CameraIROnceOnly=CameraIROnceOnlyIndex>=0?CameraIROnceOnlyObj['KPIFieldEnable']:true; + + let windData = await get_item('storeData'); + + console.log('CameraIROnceOnly in PV IR Only;',CameraIROnceOnly); + await db.transaction(async function (txn) { + // delete data for test purpose + // await txn.executeSql(`DELETE FROM ${AppTables.PAIDVIS_HDR_DATA} `,[],async function (txn2, txnres) { + // console.log('window hdr data deleted'); + // },function (txnE,txnerr) { console.log(txnerr); },); + // await txn.executeSql(`DELETE FROM ${AppTables.PAIDVIS_CHILD_DATA} `,[],async function (txn2, txnres) { + // console.log('window child data deleted'); + // },function (txnE,txnerr) { console.log(txnerr); },); + // await txn.executeSql(`DELETE FROM ${AppTables.PAIDVIS_IMAGES}`,[],async function (txn2, txnres) { + // console.log('window images data deleted'); + // },function (txnE,txnerr) { console.log(txnerr); },); + // await txn.executeSql(`DELETE FROM ${AppTables.PAIDVIS_STOCK_DATA} `,[],async function (txn2, txnres) { + // console.log('window stock data deleted'); + // },function (txnE,txnerr) { console.log(txnerr); },); + + // await txn.executeSql(`DELETE FROM ${AppTables.PAIDVIS_IR_IMAGES} `,[],async function (txn2, txnres) { + // console.log('window IR images data deleted'); + // },function (txnE,txnerr) { console.log(txnerr); },); + + // await txn.executeSql(`UPDATE ${AppTables.PAIDVIS_IRUPLOAD} set UPLOAD_STATUS='0' , SYNC_STATUS='' `,[],async function (txn2, txnres) { + // console.log('window IR Status data deleted'); + // },function (txnE,txnerr) { console.log(txnerr); },); + + + + let q3=`Select VisibilityReasonId as ReasonId,VisibilityReason as Reason From Master_VisibilityReason WHERE MenuId='${menu1.MenuId}' `; + await txn.executeSql(q3,[],async function (txn2, txnres2) { + if(txnres2.rows.length>0){ + let arr=[]; + for(var i=0;i0){ + storeBGData1=storeBGData; + bgStoreJson=StoreJson + // setWindowData(storeBGData); + BgWindowData(storeBGData); + BgUnsavedChanges(true); + console.log("set bg data"); + } + + // Check if IR Images and session present in bg data + if(bg_GbTempSessionId!=null && bg_GbTempSessionId!='' && bg_WindowIRImages!=null && bg_WindowIRImages.length>0){ + WindowIRImages.current=bg_WindowIRImages; + GbTempSessionId.current=bg_GbTempSessionId; + } + } + } + + console.log("execute q"); + await txn.executeSql(q,[],async function (txn2, txnres2) { + console.log('Paid Visi added count',txnres2.rows.length); + if(txnres2.rows.length>0){ + let arr=[];let images=[],allWindowsData=[],inputChangeFlag=[]; + let isfullyUploaded=true; + + + for(var i=0;i0){ + let storeBgIndex=storeBGData1.findIndex(i=>i.VisibilityId==data.VisibilityId && i.VisibilityDefinitionId==data.VisibilityDefinitionId) + let storeBgObj=storeBgIndex>=0?storeBGData1[storeBgIndex]:{}; + + let bgisPresent=storeBgObj.isPresent=='1' || storeBgObj.isPresent==1?1:0; + let animatedChoice=new Animated.Value(bgisPresent); + data.animatedChoice=animatedChoice; + }else{ + let animatedChoice=new Animated.Value((data.IsPresent=='1' || data.IsPresent==1?1:0)); + data.animatedChoice=animatedChoice; + } + + data.NoOfSplit=parseInt(data.NoOfSplit); + + let NoOfSplit=data.NoOfSplit; + let isPresent=data.IsPresent=='1' || data.IsPresent==1?1:0; + let isStockReq=data.VisibilityElementStockRequired=='true' || data.VisibilityElementStockRequired==1?1:0; + + let imgObj={imgIndex:(i+1),url: data.VisibilityRefImage, props: {}} + let WindowSplits = await getWindowSplits(NoOfSplit,data,storeData1,menu1); + let IRImages=[],zoomIRImages=[]; + if(!isBGDataExists){ //perform action only if IRImages flag is enable for this KPI and if bg data does not exists + if(CameraIROnceOnly && i==0){// get IR images for all KPI at once if CameraIROnceOnly enabled + let IRImgResObj=await getIRImages({},storeData1,menu1,"2"); + IRImages=IRImgResObj!=null && IRImgResObj["allImages"]!=null?IRImgResObj["allImages"]:[]; + zoomIRImages=IRImgResObj!=null && IRImgResObj["zoomIRImages"]!=null?IRImgResObj["zoomIRImages"]:[]; + // setWindowIRImages(IRImages); + WindowIRImages.current=IRImages; + setZoomImageUrl2(zoomIRImages); + + } + else if(!CameraIROnceOnly){// get IR images for each window if CameraIROnceOnly is not enabled + let IRImgResObj=await getIRImages(data,storeData1,menu1,"1"); + IRImages=IRImgResObj!=null && IRImgResObj["allImages"]!=null?IRImgResObj["allImages"]:[]; + zoomIRImages=IRImgResObj!=null && IRImgResObj["zoomIRImages"]!=null?IRImgResObj["zoomIRImages"]:[]; + } + } + + let WQr = await getWindowQuestions(data,storeData1,isPresent,menu1); + let WindowQuestions = WQr['WindowQuestions'] || []; + let WindowQA= WQr['WindowQA'] || {}; + let WSd= isStockReq==true ? await getWindowStockData(data,storeData1,isPresent,AllKPIFields) : {'WStocks':[],'WStocksData':[]}; + let WStocks=WSd['WStocks'] || []; + let WStocksData=WSd['WStocksData'] || []; + let isAllChecked=WSd['isAllChecked']!=null?WSd['isAllChecked']:0; + + let isNAImageAvl=data.VisibilityNotExistCamera=='true' || data.VisibilityNotExistCamera==1?1:0; + let NAImage1=isNAImageAvl==1 && data.PVisNAImage!=null?data.PVisNAImage:''; + let NAImage1Path=NAImage1!=''?'file://'+ImageFolderPath+menu1.ScreenName+"/"+NAImage1:''; + + + let windowDataObj={'VisibilityId':data.VisibilityId,'VisibilityDefinitionId':data.VisibilityDefinitionId,'WindowSplits':WindowSplits,'WindowQA':WindowQA,'WStocksData':WStocksData,'NAImage1':NAImage1,'NAImage1Path':NAImage1Path,'ReasonId':data.ReasonId,'Reason':data.Reason,'isPresent':isPresent,'isAllSKUChecked':isAllChecked,'remark':(data.Remark!=null?data.Remark:'')}; + if(!CameraIROnceOnly && !isBGDataExists){ // If IR enable and IR camera is shown for each window and if bg data does not exists + windowDataObj['IRImages']=IRImages; + windowDataObj['zoomIRImages'] =zoomIRImages; + windowDataObj['TempSessionId']=data.TempSessionId; + windowDataObj['Sess_StoreCode']=data.Sess_StoreCode; + windowDataObj['Sess_TaskName']=data.Sess_TaskName; + windowDataObj['Sess_CatName']=data.Sess_CatName; + windowDataObj['Sess_PhotoType']=data.Sess_PhotoType; + + if(data.UploadStatus=='1' && isDataUploaded!='P' && isDataUploaded!='U'){ + console.log('cat hdr image upload success: P'); + // stop editing if any image is uploaded + setisDataUploaded("P"); + } + + if(data.UploadStatus!='1'){ + // check if any image is not uploaded then set uploaded status to U + isfullyUploaded=false; + } + + } + + data['WindowQuestions']=WindowQuestions; + data['WindowStocks']=WStocks; + let changesFlag = {VisibilityId:data.VisibilityId, VisibilityDefinitionId: data.VisibilityDefinitionId, Flag:true} + inputChangeFlag.push(changesFlag) + arr.push(data); + + allWindowsData.push(windowDataObj); + images.push(imgObj); + if(i==txnres2.rows.length-1){ + let { menuName,StoreId1,BgMenuID,visiteDate }=bgStoreJson + if(!isBGDataExists){ + // setWindowData(allWindowsData); + BgWindowData(allWindowsData); + } + + //set IR Images Upload Status if KPI IR flag is enabled + if(CameraIROnceOnly){ // Camera for each window is not enabled + let isChecked=await getUploadIRStatus(storeData1,menu1); + } + else if(!CameraIROnceOnly && isfullyUploaded){ // Stop Upload and Editing both when fully uploaded, Case: if Camera for each window is enabled + setisDataUploaded('U'); + } + + + setisDataExists(true); + setInputChange(inputChangeFlag) + setWindows(arr); + setGlobalWindows(arr); + setZoomImageUrl(images); + setProcessing(false); + } + } + } + else{ + console.log('execute q2'); + await txn.executeSql(q2,[],async function (txn2, txnres2) { + console.log('Paid Visi load count',txnres2.rows.length); + if(txnres2.rows.length>0){ + let arr=[],images=[],allWindowsData=[],inputChangeFlag=[]; + + + for(var i=0;i0){ + let storeBgIndex=storeBGData1.findIndex(i=>i.VisibilityId==data.VisibilityId && i.VisibilityDefinitionId==data.VisibilityDefinitionId) + let storeBgObj=storeBgIndex>=0?storeBGData1[storeBgIndex]:{}; + + let bgisPresent=storeBgObj.isPresent=='1' || storeBgObj.isPresent==1?1:0; + let animatedChoice=new Animated.Value(bgisPresent); + data.animatedChoice=animatedChoice; + }else{ + let animatedChoice=new Animated.Value(0); + data.animatedChoice=animatedChoice; + } + + data.NoOfSplit=parseInt(data.NoOfSplit); + let isStockReq=data.VisibilityElementStockRequired=='true' || data.VisibilityElementStockRequired==1?1:0; + + let imgObj={imgIndex:(i+1),url: data.VisibilityRefImage, props: {}} + let WindowSplits = []; + for(var s=0;s{ + + db.transaction(async function (txn) { + + let q=`select * from ${AppTables.PAIDVIS_IMAGES} where PVIS_HEADER_ID='${window.PVisHeaderId}' and STORE_ID='${storeData1.StoreId}' `; + + await txn.executeSql(q,[],async function (txn2, txnres2) { + + if(txnres2.rows.length>0){ + let arr=[]; + for(var i=0;i{ + return val + }).catch((err)=>{ + console.log(err); + return WindowSplits_def; + }); + } + + async function getIRImages(window,storeData1,menu1,type="1"){ + let res={allImages:[],zoomIRImages:[]} + + return new Promise((resolve,reject)=>{ + + db.transaction(async function (txn) { + + let q=`select IMAGE1 as Image1 from ${AppTables.PAIDVIS_IR_IMAGES} where STORE_ID='${storeData1.StoreId}' and MENU_ID='${menu1.MenuId}' and VISIT_DATE='${d2}'`; + q+=type=='1'?` and PVIS_HEADER_ID='${window.PVisHeaderId}'`:''; + + await txn.executeSql(q,[],async function (txn2, txnres2) { + console.log('get IRImages count ',txnres2.rows.length); + let arr=[],arr2=[]; + if(txnres2.rows.length>0){ + for(var i=0;i{ + return val + }).catch((err)=>{ + console.log(err); + return res; + }); + } + + async function getUploadIRStatus(storeData1,menu1){ + let allImages=[]; + let {StoreId} =storeData1; + return new Promise((resolve,reject)=>{ + db.transaction(async function (txn) { + + // For CameraIROnceOnly enabled condition only one TempSessionId will be genrated per KPI + let q=` SELECT Distinct TEMP_SESSION_ID as TempSessionId,UN_SESSION_ID as UploadSessionId,UPLOAD_STATUS as UploadStatus,SYNC_STATUS as SyncStatus,SESSION_STORECODE as Sess_StoreCode,SESSION_TASKNAME as Sess_TaskName,SESSION_CATNAME as Sess_CatName,SESSION_PHOTOTYPE FROM ${AppTables.PAIDVIS_IRUPLOAD} where STORE_ID='${StoreId}' and MENU_ID='${menu1.MenuId}' and VISIT_DATE='${d2}' `; + await txn.executeSql(q,[],async function (txn2, txnres) { + if(txnres.rows.length>0){ + let isfullyUploaded=true; + //No Loop required, As For CameraIROnceOnly enabled condition only one TempSessionId will be genrated per KPI + let data =txnres.rows.item(0); + let {Sess_StoreCode,Sess_TaskName,Sess_CatName,Sess_PhotoType}=data; + if(data.UploadStatus=='1' && isDataUploaded!='P' && isDataUploaded!='U'){ + console.log('getUploadIRStatus success: U'); + // Stop Upload and Editing both when fully uploaded + setisDataUploaded("U"); + } + // setGbTempSessionId(data.TempSessionId); + GbTempSessionId.current=data.TempSessionId; + let obj={Sess_StoreCode,Sess_TaskName,Sess_CatName,Sess_PhotoType}; + GbTempSessionObj.current=obj; + resolve(true); + } + else{ + resolve(true); + } + },function (txnE,txnerr) { console.log(txnerr); resolve(false); },); + }); + }).catch((err)=>{ + return false; + }) + } + + async function getWindowQuestions(window,storeData1,isInserted=false,menu1){ + let obj={'WindowQA':{},'WindowQuestions':[]} + return new Promise((resolve,reject)=>{ + + db.transaction(async function (txn) { + var q='',selectlist='',join='',join2=''; + if(isInserted==true){ + selectlist=` DISTINCT q.QUESTION_ID as VisibilityQuestionId,q.QUESTION_CODE as VisibilityQuestionCode,wq.VisibilityQuestionName,wq.QuestionType,wq.VQShowCamera,wq.VQCameraMandatory,wq.VQLengthValidationRequired,wq.VQMinimumChar,wq.VQMaximumChar,wq.VQDecimalPoint,wq.VQDateRangeMin,wq.VQDateRangeMax,wq.VQVoiceLengthInMinutes,wq.VQDefaultQuestionEnable,q.ANSWER as Answer,q.ANSWER_ID as AnswerId,q.MULTI_OPTIONS_IDS as multi_op_ids,q.IMAGE_ALLOW1 as VAShowCamera,q.IMAGE1 as Image1 `; + join2=` inner join Mapping_VisibilityQuestion mq on mq.VisibilityQuestionId=wq.VisibilityQuestionId `; + join=` inner join Master_VisibilityQuestion wq on wq.VisibilityQuestionId=q.QUESTION_ID `; + q=`select ${selectlist} from ${AppTables.PAIDVIS_CHILD_DATA} q ${join} ${join2} where q.STORE_ID='${storeData1.StoreId}' and q.PVIS_DEFINITION_ID='${window.VisibilityDefinitionId}' and q.PVIS_ID='${window.VisibilityId}' order by wq.VisibilityQuestionSequence `; + } + else{ + selectlist=` DISTINCT wq.VisibilityQuestionId,wq.VisibilityQuestionCode,wq.VisibilityQuestionName,wq.QuestionType,wq.VQShowCamera,wq.VQCameraMandatory,wq.VQLengthValidationRequired,wq.VQMinimumChar,wq.VQMaximumChar,wq.VQDecimalPoint,wq.VQDateRangeMin,wq.VQDateRangeMax,wq.VQVoiceLengthInMinutes,wq.VQDefaultQuestionEnable `; + join=` inner join Mapping_VisibilityQuestion mq on mq.VisibilityQuestionId=wq.VisibilityQuestionId `; + q=`select ${selectlist} from Master_VisibilityQuestion wq ${join} where mq.VisibilityDefinitionId='${window.VisibilityDefinitionId}' order by wq.VisibilityQuestionSequence `; + } + + + + await txn.executeSql(q,[],async function (txn2, txnres2) { + + if(txnres2.rows.length>0){ + let arr=[]; + let wqa_obj={}; + for(var i=0;i0){ + for(var k=0;k=0)){ + showImageTag=true; + } + } + } + } + + if(showImageTag && data.Answer!=null){ + let imgPath=(Platform.OS=='ios'?'file://':'')+ImageFolderPath+menu1.ScreenName+"/"+data.Image1; + wqa_obj[imgname_key]=data.Image1; + wqa_obj[img_key]=imgPath; + } + + + + if(data.QuestionType=='Date' && data.Answer!=null){ + let dayonly=moment().format('DD'); + let actual_date=data.Answer?data.Answer.split('/'):[]; + let month=actual_date[0],year=actual_date[1]; + let fulldate=month+'/'+dayonly+'/'+year; + wqa_obj[date_key]=fulldate; + + } + + arr.push(data); + if(i==txnres2.rows.length-1){ + obj['WindowQuestions']=arr; + obj['WindowQA']=wqa_obj; + resolve(obj) + } + } + } + else{ + resolve(obj) + } + },function (txnE,txnerr) { console.log(txnerr); resolve(obj) },); + }); + }).then((val)=>{ + return val + }).catch((err)=>{ + console.log(err); + return obj; + }); + } + + + async function getWindowAnswers(qtn){ + + return new Promise((resolve,reject)=>{ + + db.transaction(async function (txn) { + var q='',selectlist=''; + selectlist=` DISTINCT VisibilityAnswerId as AnswerId,VisibilityAnswerName as Answer,VAShowCamera,VACameraMandatory,VAQuestionEnable,VAQuestionDisable `; + q=`select ${selectlist} from Master_VisibilityQuestion where VisibilityQuestionId='${qtn.VisibilityQuestionId}' order by VASequence `; + + await txn.executeSql(q,[],async function (txn2, txnres2) { + if(txnres2.rows.length>0){ + let arr=[]; + for(var i=0;i{ + return val + }).catch((err)=>{ + console.log(err); + return []; + }); + } + + async function getWindowStockData(window,storeData1,isInserted=false,AllKPIFields=[]){ + let obj={'WStocks':[],'WStocksData':[],'isAllChecked':0} + let {StateId,ChainId,StoreTypeId,StoreId}=storeData1; + + let isSpecificMapIndex=AllKPIFields.findIndex(i=>i.KPIFieldName=='SpecificMapping') + let isSpecificMapKPIObj=isSpecificMapIndex>=0?AllKPIFields[isSpecificMapIndex]:{}; + let isSpecificMappingEnable=isSpecificMapIndex>=0?isSpecificMapKPIObj['KPIFieldEnable']:false; + + return new Promise((resolve,reject)=>{ + db.transaction(async function (txn) { + let checkassrt=window.VisibilityElementCheckAssortment=='true' || window.VisibilityElementCheckAssortment==1?true:false; + let join='',join2='',selectlist2='',q2=''; + if(checkassrt){ + join=` inner join Mapping_ProductAssortmentStorewise a on a.ProductId=s.PVIS_STOCK_VALUE and a.StoreId='${StoreId}'`; + } + let selectlist1=` s.PVIS_STOCK_DEFINITION_ID as VisibilityStockDefinitionId, s.PVIS_DEFINITION_ID as VisibilityDefinitionId,s.PVIS_STOCK_TABLE as VisibilityStockTable,s.PVIS_STOCK_FIELD as VisibilityStockField,s.PVIS_STOCK_VALUE as VisibilityStockValue,s.PVIS_STOCK_MBQ as VisibilityStockMBQ,s.PRODUCT_NAME as ProductName, s.STOCK as Stock,s.IS_PVIS_PRESENT as isPVisPresent `; + let q=`select ${selectlist1} from ${AppTables.PAIDVIS_STOCK_DATA} s ${join} where s.PVIS_DEFINITION_ID='${window.VisibilityDefinitionId}' and s.STORE_ID='${storeData1.StoreId}' `; + + q+=` order by s.PRODUCT_NAME `; + + if(checkassrt){ + join2=` inner join Mapping_ProductAssortmentStorewise a on a.ProductId=s.VisibilityStockValue and a.Storeid='${StoreId}'`; + } + + if(isSpecificMappingEnable==true){ + // StoreId,VisibilityDefinitionId,VisibilityTable,VisibilityField,VisibilityValue,ChildName + selectlist2=` '0' as VisibilityStockDefinitionId, s.VisibilityDefinitionId,s.VisibilityTable as VisibilityStockTable,s.VisibilityField as VisibilityStockField,s.VisibilityValue as VisibilityStockValue,'' as VisibilityStockMBQ,s.ChildName as ProductName `; + q2=`select ${selectlist2} from Mapping_StoreVisibilitySpecific s ${join2} where s.VisibilityDefinitionId='${window.VisibilityDefinitionId}' and s.StoreId='${StoreId}' `; + }else{ + selectlist2=` s.VisibilityStockDefinitionId, s.VisibilityDefinitionId,s.VisibilityStockTable,s.VisibilityStockField,s.VisibilityStockValue,s.VisibilityStockMBQ,s.ProductName `; + q2=`select ${selectlist2} from Master_VisibilityStockDefinition s ${join2} where s.VisibilityDefinitionId='${window.VisibilityDefinitionId}' `; + } + + + // if(checkassrt){ + // q2+=` and a.StateId='${storeData1.StateId}' `; + // } + if(isSpecificMappingEnable==true){ + q2+=` order by s.ChildName `; + } + else{ + q2+=` order by s.ProductName `; + } + + + + await txn.executeSql(q,[],async function (txn2, txnres2) { + console.log('Stock qty added:',txnres2.rows.length); + if(txnres2.rows.length>0){ + let arr=[],WStocksData=[]; + let isAllChecked=1; + for(var i=0;i0){ + let arr=[],WStocksData=[]; + let isAllChecked=1; + for(var i=0;i{ + return val + }).catch((err)=>{ + console.log(err); + return obj; + }); + } + + function openRetakeOp(wind, type='1',IRImgIndex,IRimgPath){ + let data={'wind':wind,'type':type,'IRImgIndex':IRImgIndex,'IRimgPath':IRimgPath}; + setretakeMData(data); + setshowRetakeModal(true); + } + + + function closeRetakeOp(){ + setretakeMData({}) + setshowRetakeModal(false); + } + + async function StartCameraSession(wind,type='1'){ + // type: 1 or 2 , 1: Camera enabled for each window header ,2 : Camera enabled for once in KPI + let IR_Creds=props.IR_Creds!=null && props.IR_Creds!=""?JSON.parse(props.IR_Creds):[]; + let IR_CredsObj=IR_Creds.length>0?IR_Creds[0]:{}; + wind=wind!=null?wind:{}; + let newStdata=storeData; + if(IR_CredsObj.UseStoreCode!=1){ + newStdata.StoreCode=newStdata.StoreId; + } + let obj={"StoreData":newStdata}; + + // Option values for Perfetti paid visibility if IR shown in header only + // obj["category_name"]="multi"; + // obj["task_name"]="paid-visibility-displays"; + // obj["photo_type"]="paid-visibility"; + let task_name=windIRParams.task_name+" "+currentMenu.MenuId; + obj["category_name"]=windIRParams.category_name || ''; + obj["task_name"]=task_name;//'Generic Display'; + obj["photo_type"]=windIRParams.photo_type || ''; + + let st1=JSON.stringify(obj); + let TempSessionId= await IRLogin.StartIRSession(st1); + console.log('TempSessionId StartCameraSession:',TempSessionId,newStdata.StoreCode,windIRParams); + if(TempSessionId!=null){ + setLoaderTitle('Processing Image...'); + setProcessing(true); + let IRCamImages=await IRLogin.getImageURIFromIRSession(TempSessionId); + console.log('Images from session :',IRCamImages); + + if(type=='2'){ //set global IR images and session id if Camera is shown only once in header for KPI Screen + // setGbTempSessionId(TempSessionId); + GbTempSessionId.current=TempSessionId; + let sessObj={} + sessObj['Sess_StoreCode'] =newStdata.StoreCode; + sessObj['Sess_TaskName'] =obj["task_name"]; + sessObj['Sess_CatName'] =obj["category_name"]; + sessObj['Sess_PhotoType'] =obj["photo_type"]; + // setSOSIRImages(IRCamImages); + GbTempSessionObj.current=sessObj; + WindowIRImages.current=IRCamImages; + setIRZoomImages(IRCamImages); + } + else{ //set category wise IR images and session id if Camera is shown for each window + let zoomIRImages=await getIRZoomImages(IRCamImages) + + let allData=WindowData; + let defData={'VisibilityId':wind.VisibilityId,'VisibilityDefinitionId':wind.VisibilityDefinitionId}; + const win_index=allData.findIndex(i=>i.VisibilityId==wind.VisibilityId && i.VisibilityDefinitionId==wind.VisibilityDefinitionId); + let windData=win_index>=0?(allData[win_index] || defData) : defData; + windData['IRImages'] =IRCamImages; + windData['zoomIRImages'] =zoomIRImages; + windData['TempSessionId'] =TempSessionId; + windData['Sess_StoreCode'] =newStdata.StoreCode; + windData['Sess_TaskName'] =obj["task_name"]; + windData['Sess_CatName'] =obj["category_name"]; + windData['Sess_PhotoType'] =obj["photo_type"]; + win_index>=0?allData[win_index]=windData:allData.push(windData); + // setWindowData(allData); + BgWindowData(allData); + } + + // setHasUnsavedChanges(true); + BgUnsavedChanges(true); + setrerenderdata(!rerenderdata); + + // stop image processing loader after all images get from sessionID + setProcessing(false); + setLoaderTitle('loading...'); + + } + else{ + notify('Cannot capture images as getting Session Null.'); + } + + } + + + async function ResumeCameraSession(wind,type='1'){ + // type: 1 or 2 , 1: Camera enabled for each window header ,2 : Camera enabled for once in KPI + wind=wind!=null?wind:{}; + let allData=WindowData; + let defData={'VisibilityId':wind.VisibilityId,'VisibilityDefinitionId':wind.VisibilityDefinitionId}; + const win_index=allData.findIndex(i=>i.VisibilityId==wind.VisibilityId && i.VisibilityDefinitionId==wind.VisibilityDefinitionId); + let windData=win_index>=0?(allData[win_index] || defData) : defData; + + // Resume Temp Session Id + let TempSessionId=""; + if(type=='2'){ + TempSessionId= GbTempSessionId.current; + } + else{ + TempSessionId= windData.TempSessionId; + } + console.log('TempSessionId of wind :',TempSessionId); + if(TempSessionId!=null){ + setLoaderTitle('Processing Image...'); + setProcessing(true); + let retTempSessionId=await IRLogin.ResumeIRSession(TempSessionId); + console.log('retTempSessionId :',retTempSessionId); + if(retTempSessionId!=null){ + // start fetching images after capturing photos + + let IRCamImages=await IRLogin.getImageURIFromIRSession(TempSessionId); + console.log('Images from session :',IRCamImages); + + if(type=='2'){ + // setWindowIRImages(IRCamImages); + WindowIRImages.current=IRCamImages + setIRZoomImages(IRCamImages); + } + else{ + let zoomIRImages=await getIRZoomImages(IRCamImages) + windData['IRImages'] =IRCamImages; + windData['zoomIRImages'] =zoomIRImages; + win_index>=0?allData[win_index]=windData:allData.push(windData); + // setWindowData(allData); + BgWindowData(allData); + } + // setHasUnsavedChanges(true); + BgUnsavedChanges(true); + setrerenderdata(!rerenderdata); + + // stop image processing loader after all images get from sessionID + setProcessing(false); + setLoaderTitle('loading...'); + } + else{ + notify('Cannot capture images as getting Session Null.'); + } + + } + else{ + notify('Cannot capture images as getting Session Null.'); + } + + } + + async function DeleteIRPhoto(){ + console.log('DeleteIRPhoto called'); + setshowRetakeModal(false); + let {wind,type,IRImgIndex,IRimgPath}= retakeMData; + // type: 1 or 2 , 1: Camera enabled for each window header ,2 : Camera enabled for once in KPI + + wind=wind!=null?wind:{}, + type=type!=null?type:'1'; + IRImgIndex=IRImgIndex!=null?IRImgIndex:''; + IRimgPath=IRimgPath!=null?IRimgPath:''; + + + let allData=WindowData; + let defData={'VisibilityId':wind.VisibilityId,'VisibilityDefinitionId':wind.VisibilityDefinitionId}; + const win_index=allData.findIndex(i=>i.VisibilityId==wind.VisibilityId && i.VisibilityDefinitionId==wind.VisibilityDefinitionId); + let windData=win_index>=0?(allData[win_index] || defData) : defData; + + let TempSessionId=""; + if(type=='2'){ + TempSessionId=GbTempSessionId.current; + } + else{ + TempSessionId=windData['TempSessionId']; + } + + console.log('DeleteIRPhoto sessionID :',TempSessionId); + if(TempSessionId!=null || TempSessionId!=''){ + setLoaderTitle('Removing Image...'); + setProcessing(true); + let isDeleted= await IRLogin.DeleteIRSessionPhoto(TempSessionId,IRimgPath);//"8099b819-0979-40d2-950e-489566041484";// + console.log('DeleteIRPhoto isDeleted :',isDeleted); + if(isDeleted){ + setLoaderTitle('Processing Image...'); + + let IRCamImages=await IRLogin.getImageURIFromIRSession(TempSessionId); + console.log('Deleted, Images from session :',IRCamImages); + if(type=='2'){ + // setWindowIRImages(IRCamImages); + WindowIRImages.current=IRCamImages; + setIRZoomImages(IRCamImages); + } + else{ + let zoomIRImages=await getIRZoomImages(IRCamImages) + windData['IRImages'] =IRCamImages; + windData['zoomIRImages'] =zoomIRImages; + win_index>=0?allData[win_index]=windData:allData.push(windData); + // setWindowData(allData); + BgWindowData(allData); + } + + // setHasUnsavedChanges(true); + BgUnsavedChanges(true); + setrerenderdata(!rerenderdata); + + // stop image processing loader after all images get from sessionID + setProcessing(false); + setLoaderTitle('loading...'); + + } + else{ + notify('Cannot delete photo!.'); + } + + } + else{ + notify('Cannot delete photo! Found Null Session.'); + } + + } + + async function RetakeIRPhoto(){ + setshowRetakeModal(false); + let {wind,type,IRImgIndex,IRimgPath}= retakeMData; + // type: 1 or 2 , 1: Camera enabled for each window header ,2 : Camera enabled for once in KPI + + wind=wind!=null?wind:{}, + type=type!=null?type:'1'; + IRImgIndex=IRImgIndex!=null?IRImgIndex:''; + IRimgPath=IRimgPath!=null?IRimgPath:''; + + + let allData=WindowData; + let defData={'VisibilityId':wind.VisibilityId,'VisibilityDefinitionId':wind.VisibilityDefinitionId}; + const win_index=allData.findIndex(i=>i.VisibilityId==wind.VisibilityId && i.VisibilityDefinitionId==wind.VisibilityDefinitionId); + let windData=win_index>=0?(allData[win_index] || defData) : defData; + + let TempSessionId=""; + if(type=='2'){ + TempSessionId=GbTempSessionId.current; + } + else{ + TempSessionId=windData['TempSessionId']; + } + + console.log('Retake sessionID :',TempSessionId); + if(TempSessionId!=null || TempSessionId!=''){ + setLoaderTitle('Processing Image...'); + setProcessing(true); + let isRetakeDone= await IRLogin.RetakeIRSessionPhoto(TempSessionId,IRimgPath); + console.log('Retake isRetakeDone :',isRetakeDone); + if(isRetakeDone){ + setTimeout(async ()=>{ + let IRCamImages=await IRLogin.getImageURIFromIRSession(TempSessionId); + console.log('Retake Images from session :',IRCamImages); + if(type=='2'){ + // setWindowIRImages(IRCamImages); + WindowIRImages.current=IRCamImages; + setIRZoomImages(IRCamImages); + } + else{ + let zoomIRImages=await getIRZoomImages(IRCamImages) + windData['IRImages'] =IRCamImages; + windData['zoomIRImages'] =zoomIRImages; + win_index>=0?allData[win_index]=windData:allData.push(windData); + // setWindowData(allData); + BgWindowData(allData); + } + // setHasUnsavedChanges(true); + BgUnsavedChanges(true); + setrerenderdata(!rerenderdata); + + // stop image processing loader after all images get from sessionID + setProcessing(false); + setLoaderTitle('loading...'); + },1000); + + } + else{ + notify('Error occur while retaking photo!.'); + } + + } + else{ + notify('Cannot start camera! Found Null Session.'); + } + + } + + // Start Upload for IR images + async function UploadIRSessions(){ + setshowUploadAlert(false); + sessionsToUpload.current=[]; + sessionsReceived.current=0; + sessionsUploadedCount.current=0; + + try{ + let {StoreId}=storeData; + setLoaderTitle('Uploading Images...'); + setProcessing(true); + + // Global Upload function + // Sync Status for IR images + // From Infilect SDK 1.3.6 - The Images are uploading on realtime bases i.e. As the images are clicked by user the Images are getting uploaded to infilect server. + // In this case call below func to check the status of images that is already being uploaded by Real Time processing + let sync_result=await SyncIRsessionsInKPI(props,storeData,AppTables.PAIDVIS_IRUPLOAD,AppTables.PAIDVIS_IR_IMAGES,true,currentMenu); + let {isUploadStarted,AllDataUploaded,noDataFound,success,sessionList,sessionListWithDetails}=sync_result; + console.log("Sync Resp sync_result:",sync_result); + if(!success){ + notify('Cannot Upload Data! Something went wrong.'); + setProcessing(false); + } + else{ + if(noDataFound){ + notify('No session to upload!'); + setisDataUploaded('U'); + setProcessing(false); + } + else{ + if(!isUploadStarted && AllDataUploaded){ + notify('All images synced! No session to upload.'); + setisDataUploaded('U'); + setProcessing(false); + }else if(isUploadStarted){ + sessionsToUpload.current=sessionList; + sessionsToUploadDetails.current=sessionListWithDetails; + console.log("UploadStarted"); + } + } + } + }catch(e){ + console.log('Uploading Issue:',e); + setProcessing(false); + } + + + } + + async function UpdateIRUploadStatus(storeData1,menu1,TempSessionId,UnSessionId){ + console.log('UpdateIRUploadStatus'); + return new Promise((resolve,reject)=>{ + + let {StoreId,ChainId,StateId,StoreTypeId}=storeData1; + db.transaction(async function (txn) { + // update upload status and sync status here : when files are uploaded and we have got the universal session id for that + let q=`Update ${AppTables.PAIDVIS_IRUPLOAD} set UN_SESSION_ID='${UnSessionId}',UPLOAD_STATUS='1',SYNC_STATUS='Synced' where STORE_ID='${StoreId}' and VISIT_DATE='${d2}' and MENU_ID='${menu1.MenuId}' and TEMP_SESSION_ID='${TempSessionId}' `; + // console.log("update IR Upload q:",q); + await txn.executeSql(q,[],async function (txn2, txnres) { + console.log('Updated IR Upload Status'); + // console.log("update IR Upload q2:",q2); + let q2=`Update ${AppTables.PAIDVIS_IR_IMAGES} set UN_SESSION_ID='${UnSessionId}' where STORE_ID='${StoreId}' and VISIT_DATE='${d2}' and MENU_ID='${menu1.MenuId}' and TEMP_SESSION_ID='${TempSessionId}' `; + await txn.executeSql(q2,[],async function (txn2, txnres2) { + console.log('Updated IR Upload Images Status'); + resolve(true); + },function (txnE,txnerr) { console.log(txnerr);resolve(false); },); + + },function (txnE,txnerr) { console.log(txnerr);resolve(false); },); + }); + }).catch((Err)=>{ + console.log('Error in UpdateIRUploadStatus:',Err); + return false; + }) + + + + } + + async function LogImageUpload(storeData1,menu1,TempSessionId,UnSessionId,message,status,thisIR_SessObj={}){ + let {StoreId,StoreName}=storeData1; + const url=props.baseurl+getMethodName(METHODS.UPLOADJSON_METHOD); + const nowTime=moment().format('HH:mm:ss'); + let ImageCount=await getImageCount(storeData1,menu1,TempSessionId); + let {SESSION_STORECODE,SESSION_TASKNAME,SESSION_CATNAME,SESSION_PHOTOTYPE}=thisIR_SessObj; + + + ////Replaced special charecter and white space + let storeTittle = StoreName.replace(`@!%&`, '').replace(' ', '-'); + console.log("storeTittle:",storeTittle,StoreName); + + let obj={}; + obj['StoreId']=StoreId; + obj['Username']=props.UserId; + obj['VisitDate']=d2; + obj['InTime']=nowTime; + obj['TempSessionId']=TempSessionId; + obj['UnSessionId']=UnSessionId; + obj['Status']=status; + obj['Message']=message; + obj['ImageCount']=ImageCount; + obj['StoreTitle']=storeTittle; + obj['StoreCode']=SESSION_STORECODE; + obj['TaskName']=SESSION_TASKNAME; + obj['CategoryName']=SESSION_CATNAME; + obj['PhotoType']=SESSION_PHOTOTYPE; + obj['KPIType']=currentMenu.MenuName; + obj['ScreenName']=currentMenu.ScreenName; + obj['UploadType']="New"; + + let postData={}; + postData['MID']=0; + postData['Keys']='IR_UPLOAD_LOG_MSG'; + postData['JsonData']=JSON.stringify(obj); + postData['UserId']=props.UserId; + + console.log('postData',postData); + + return await UploadData2(url,postData) + .then((res)=>{ + // console.log("log Uploaded:",res.UploadJsonResult); + if(res.UploadJsonResult!=null && res.UploadJsonResult=='Success'){ + return true; + } + return false; + }) + .catch((err)=>{ + console.log(err); + return false; + }); + } + + async function getImageCount(storeData1,menu1,TempSessionId){ + let {StoreId,ChainId,StateId,StoreTypeId}=storeData1; + console.log('storeData in getImageCount',storeData1); + return new Promise((resolve,reject)=>{ + + + db.transaction(async function (txn) { + + let q=`select DISTINCT TEMP_SESSION_ID,count(IMAGE1) as ImageCount from ${AppTables.PAIDVIS_IR_IMAGES} where STORE_ID='${StoreId}' and VISIT_DATE='${d2}' and TEMP_SESSION_ID='${TempSessionId}' group by TEMP_SESSION_ID `; + console.log('q',q); + await txn.executeSql(q,[],async function (txn2, txnres) { + console.log('ImageCount rows:',txnres.rows.length); + if(txnres.rows.length>0){ + let data =txnres.rows.item(0); + console.log('data:',data) + console.log('Image Count for TempSessionId:',data.ImageCount); + resolve(data.ImageCount); + } + else{ + resolve(0); + } + + },function (txnE,txnerr) { console.log(txnerr);resolve(0); },); + }); + }).catch((Err)=>{ + console.log('Error in getImageCount:',Err); + return 0; + }) + + + + } + + + async function focusToNext(WindowStocks,windowIndex,stockProd,index) + { + console.log('focusToNext is call'); + console.log('WindowStocks',index+1) + + if(index==WindowStocks.length-1){ + return; + } + + try{ + // inputRefs.current['input1_'+data.VisibilityDefinitionId+"_"+data.VisibilityStockDefinitionId]=''; + // use (index+1) instead of WindowStocks[index+1].VisibilityStockDefinitionId as the condition does not work in case of isSpecificMappingEnable is true ( because all VisibilityStockDefinitionId are 0) + console.log('next 1 call','input1_'+WindowStocks[index+1].VisibilityDefinitionId+'_'+(index+1)) + let refIn2=inputRefs.current['input1_'+WindowStocks[index+1].VisibilityDefinitionId+'_'+(index+1)]; + // let refIn2=inputRefs.current['input1_'+stockProd.WindowDefinitionId+'_'+stockProd.WindowStockDefinitionId]; + + if(refIn2!=null){ + refIn2.focus(); + } + } + catch(err){ + console.log(err); + } + } + + async function getImage(imgdata){ + let type=getImageProps.type || ''; + let window=getImageProps.window || {}; + let splitItem=getImageProps.splitItem || {}; + let splitItemIndex=getImageProps.splitItemIndex || 0; + let qtn=getImageProps.qtn || {}; + let cameraType=getImageProps.cameraType!=null?getImageProps.cameraType:'1'; + + if(typeof imgdata=='object' && imgdata.errorCode=='camera_unavailable'){ + notify(ST.Cameraunavailable); + } + else if(typeof imgdata =='object' && imgdata.uri!=null){ + const img=imgdata; + const imgurl=img.uri, imgWidth=img.width, imgHeight=img.ExtendedHeight; + let isImgFromGallery=img.fromGallery!=null?img.fromGallery:false; + let picture_clickedd=isImgFromGallery==true?img.datetime:new Date(); + + let picture_clicked_time=moment(picture_clickedd).format('MM-DD-YYYY HH:mm:ss') + let picture_clicked_time_for_pic_name=moment(picture_clickedd).format('MMDDYYYY_HHmmss') + + console.log("time", picture_clicked_time); + console.log("time1", picture_clicked_time_for_pic_name); + let calculate_tym_date_for_filename = picture_clicked_time_for_pic_name; + let calculate_tym_date_over_img = picture_clicked_time; + + let filename=storeData.StoreId+'_'+window.VisibilityDefinitionId+'_'+window.VisibilityId+'_'+(props.UserId || '')+'_STImg-'+calculate_tym_date_for_filename+'.jpg'; + + let allData=WindowData; + let defData={'VisibilityId':window.VisibilityId,'VisibilityDefinitionId':window.VisibilityDefinitionId}; + const wind_index=allData.findIndex(i=>i.VisibilityId==window.VisibilityId && i.VisibilityDefinitionId==window.VisibilityDefinitionId) ; + let wind=wind_index>=0?allData[wind_index]:defData; + + let camera1Label=window.VisibilityImage1Lable || ''; + let camera2Label=window.VisibilityImage2Lable || ''; + let extraLabel=''; + + if(cameraType=='2'){ + var QD=wind.WindowQA || {}; + var image_key=qtn.VisibilityQuestionId+'_ImageName1'; + var image_key_path=qtn.VisibilityQuestionId+'_ImagePath1'; + QD[image_key]=filename; + extraLabel='Qtn Id: '+qtn.VisibilityQuestionId; + } + else if(cameraType=='3'){ + var image_key='NAImage1'; + var image_key_path='NAImage1Path'; + wind[image_key]=filename; + extraLabel='Not Exist'; + } + else{ + var WindowSplits=wind.WindowSplits || []; + var image_key=type=='1'?'Image1Name':'Image2Name'; + var image_key_path=type=='1'?'Image1':'Image2'; + splitItem[image_key]=filename; + extraLabel=type=='1'?camera1Label:camera2Label; + } + + + + const mark_text1=calculate_tym_date_over_img; + const mark_text2='Store Name:'+storeData.StoreName+' | Store Id:'+storeData.StoreId+' | User Id:'+storeData.EmpId+' | Visibility Id:'+window.VisibilityDefinitionId+(extraLabel!=''?' ('+extraLabel+')':'')+' | Image Type: '+currentMenu.MenuName+' | Date:'+calculate_tym_date_over_img; + + + let imagePath=`${ImageFolderPath+currentMenu.ScreenName}/${filename}`; + RNFS.copyFile(imgurl, imagePath) + .then(async(resn) => { + // render data with clicked image + let uri='file://'+imagePath; + console.log('image marker:',imgWidth,imgHeight,uri); + + if(cameraType=='2'){ + QD[image_key_path]=uri; + wind.WindowQA=QD; + wind_index>=0?allData[wind_index]=wind:allData.push(wind); + WindowDataRef.current=allData + setWindowData(allData); + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata3(!rerenderdata3); + } + else if(cameraType=='3'){ + wind[image_key_path]=uri; + wind_index>=0?allData[wind_index]=wind:allData.push(wind); + WindowDataRef.current=allData + setWindowData(allData); + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + else{ + console.log('split image updated'); + splitItem[image_key_path]=uri; + splitItemIndex>=0?WindowSplits[splitItemIndex]=splitItem:WindowSplits.push(splitItem); + wind.WindowSplits=WindowSplits; + wind_index>=0?allData[wind_index]=wind:allData.push(wind); + WindowDataRef.current=allData + setWindowData(allData); + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata2(!rerenderdata2); + } + + let objIndex = InputChange.findIndex(i=>i.VisibilityId==window.VisibilityId && i.VisibilityDefinitionId==window.VisibilityDefinitionId); + let winArr=[...InputChange] + winArr[objIndex].Flag=true + setSelectedImg(uri) + setInputChange(winArr) + + // add metdata then resize image and restored back to the imagePath + let restore_data={"destFilePath":imagePath,"imgurl":imgurl,imgWidth,imgHeight,mark_text1,mark_text2} + let is_restored=await restore_ImageWithMetaData(restore_data,imgdata); + console.log("image restored:",is_restored); + + }) + .catch(err => { + console.log('ERROR: image file write failed!!!'); + console.log(err.message, err.code); + }); + + + // Add MetaData + // const viewShotRef=img.viewShotRef; + // let ss_imgurl = await viewShotRef.current.capture(); + + + // resize file + // let resize_res=await resizeImage(ss_imgurl,imgWidth,imgHeight) + + + // if(resize_res.success){ + // file resized now rename file + + // } + // else{ + // if(resize_res.error){ + // notify("Error in image: ",resize_res.error); + // }else if (resize_res.imagenotfound){ + // notify("Cannot find image!"); + // }else{ + // notify("Something went wrong while capturing image!"); + // } + // } + + } + +} + + + + async function onQRScanned(imgdata){ + let qtn=QRqtnData.qtn || {}; + let window=QRqtnData.window || {}; + let QR_withValidChars=imgdata!=null && imgdata!=''?imgdata.replace(/["']/g,''):''; + let value=QR_withValidChars;//imgdata && imgdata[0] && imgdata[0].displayValue ? imgdata[0].displayValue :"" + setTextValue(value,qtn,window) + } + + + function showQtnDatePicker(qtn,window,show=false){ + let allQtns=window.WindowQuestions || []; + let newqtnIndex=allQtns.findIndex(q=>q.VisibilityQuestionId==qtn.VisibilityQuestionId); + + if(newqtnIndex>=0){ + let newqtn=allQtns[newqtnIndex]; + newqtn.showDatePicker=show; + allQtns[newqtnIndex]=newqtn; + window['WindowQuestions']=allQtns; + let allWindows=Windows; + const winIndex=allWindows.findIndex(i=>i.VisibilityId==window.VisibilityId && i.VisibilityDefinitionId==window.VisibilityDefinitionId) || {}; + allWindows[winIndex]=window; + setWindows(allWindows); + setGlobalWindows(allwindows); + if(show==true) setrerenderdata(!rerenderdata); + } + } + + async function openCamera(window,splitItem,splitItemIndex,type='1',cameraType='1',qtn={}){ + let GridAllow = cameraType=='1' ?( type==='1' ? (window.VisibilityImage1CameraGrid === 'true' || window.VisibilityImage1CameraGrid==true): (window.VisibilityImage1CameraGrid === 'true' || window.VisibilityImage1CameraGrid==true)):false + + setGridValue(GridAllow); + setGetImageProps({'window':window,'splitItem':splitItem,'splitItemIndex':splitItemIndex,'type':type,'cameraType':cameraType,'qtn':qtn}); + UpdateShowCameraRef(true); + // props.navigation.navigate('CameraScreen',{'getImage':getImage,'cameraType':'back'}) + } + + async function onSubmitData(){ + let isvalid=await validate(); + if(isvalid){ + Keyboard.dismiss(); + setShowAlert(true); + } + } + + async function saveData(){ + // setHasUnsavedChanges(false); + BgUnsavedChanges(false) + setShowAlert(false); + setLoaderTitle(ST.SavingData+'...'); + setProcessing(true); + let d1n=new Date(); + let d3=moment(d1n).format('MM/DD/YYYY'); + try { + let {StoreId,ChainId,StateId,StoreTypeId}=storeData; + + let isSpecificMapIndex=KPIFields.findIndex(i=>i.KPIFieldName=='SpecificMapping') + let isSpecificMapKPIObj=isSpecificMapIndex>=0?KPIFields[isSpecificMapIndex]:{}; + let isSpecificMappingEnable=isSpecificMapIndex>=0?isSpecificMapKPIObj['KPIFieldEnable']:false; + + + let CameraIROnceOnlyIndex=KPIFields.findIndex(i=>i.KPIFieldName=='CameraIROnceOnly') + let CameraIROnceOnlyObj=CameraIROnceOnlyIndex>=0?KPIFields[CameraIROnceOnlyIndex]:{}; + let CameraIROnceOnly=CameraIROnceOnlyIndex>=0?CameraIROnceOnlyObj['KPIFieldEnable']:true; + + + // remove old data + let isDeleted = await removePreviousData(); + console.log("isDeleted:",isDeleted); + + await db.transaction(async function (txn) { + + + + // add data + var values='',childV='',imageV='',stockV='',IRImageV='',IRStatusV=''; + + for (const wi in globalWindows){ + const window=globalWindows[wi]; + let isImage1=window.VisibilityImage1=='true' || window.VisibilityImage1==1?1:0; + let isImage2=window.VisibilityImage2=='true' || window.VisibilityImage2==1?1:0; + let isNAImageAvl=window.VisibilityNotExistCamera=='true' || window.VisibilityNotExistCamera==1?1:0; + let isNAReasonEnable=window.VisibilityNotExistReasonEnable=='true' || window.VisibilityNotExistReasonEnable==1? 1:0; + let isReasonEnable=window.VisibilityExistReasonEnable=='true' || window.VisibilityExistReasonEnable==1? 1:0; + let isStockReq=window.VisibilityElementStockRequired=='true' || window.VisibilityElementStockRequired==1?1:0; + let WindowQuestions=window.WindowQuestions || []; + let WindowStocks=window.WindowStocks || []; + + + const wind=WindowData.find(i=>i.VisibilityId==window.VisibilityId && i.VisibilityDefinitionId==window.VisibilityDefinitionId); + let isPresent=wind.isPresent!=null && wind.isPresent!=''?wind.isPresent:'0'; + let ReasonId=wind.ReasonId!=null?wind.ReasonId:0; + let Reason=wind.Reason!=null?wind.Reason:''; + let NAImage1=wind.NAImage1!=null?wind.NAImage1:''; + let NAImage1Path=wind.NAImage1Path!=null?wind.NAImage1Path:''; + let remark=wind.remark!=null?wind.remark:''; + let WindowSplits=wind.WindowSplits || []; + let QD=wind.WindowQA || {}; + let WStocksData=wind.WStocksData || []; + let windIRImages=wind.IRImages!=null?wind.IRImages:[]; + let TempSessionId=wind.TempSessionId!=null?wind.TempSessionId:''; + let Sess_StoreCode=wind.Sess_StoreCode!=null?wind.Sess_StoreCode:''; + let Sess_TaskName=wind.Sess_TaskName!=null?wind.Sess_TaskName:''; + let Sess_CatName=wind.Sess_CatName!=null?wind.Sess_CatName:''; + let Sess_PhotoType=wind.Sess_PhotoType!=null?wind.Sess_PhotoType:''; + + + let PVIS_HEADER_ID='WIND'+wi+(Math.floor(Math.random()*1000)+1); + let {VisibilityDefinitionId,MenuId,VisibilityId,VisibilityName,VisibilityTable,VisibilityField,VisibilityValue,ChildName}=window; + + // console.log('MenuId in savedata:',MenuId); + values+=values!=''?' , ':''; + values+=` ('${PVIS_HEADER_ID}','${MenuId}','${StoreId}','${d3}','${VisibilityDefinitionId}','${VisibilityId}','${VisibilityName}','${VisibilityTable}','${VisibilityField}','${VisibilityValue}','${ChildName}','${isPresent}','${NAImage1}','${ReasonId}','${Reason}','${(remark || '')}','1','${d3}','${isSpecificMappingEnable}') `; + + if(!CameraIROnceOnly){ // Add window wise IR Status and Images if IR enabled and IR Camera enabled for each window + + for(const IRImageIndex in windIRImages){ + let IRImgObj=windIRImages[IRImageIndex]; + let Image1=IRImgObj['ImagePath']!=null && IRImgObj['ImagePath']!=''?IRImgObj['ImagePath']:''; + + IRImageV+=IRImageV!=''?' , ':''; + // PVIS_HEADER_ID,STORE_ID,VISIT_DATE,PVIS_DEFINITION_ID,PVIS_ID,IMAGE1,IMAGE2,TEMP_SESSION_ID,UN_SESSION_ID,MENU_ID,ADDED_DATE + IRImageV+=` ('${PVIS_HEADER_ID}','${StoreId}','${d3}','${VisibilityDefinitionId}','${VisibilityId}','${Image1}','','${TempSessionId}','','${currentMenu.MenuId}','${d3}') `; + } + + + IRStatusV+=IRStatusV!=''?' , ':''; + IRStatusV+=` ('${PVIS_HEADER_ID}','${StoreId}','${d3}','${VisibilityDefinitionId}','${VisibilityId}','${TempSessionId}','','0','','${currentMenu.MenuId}','${Sess_StoreCode}','${Sess_TaskName}','${Sess_CatName}','${Sess_PhotoType}','${d3}') `; + + } + } + + if(CameraIROnceOnly){// Add window wise IR images if IR enabled and IR Camera enabled for once only + for(const IRImageIndex in WindowIRImages.current){ + let IRImgObj=WindowIRImages.current[IRImageIndex]; + let Image1=IRImgObj['ImagePath']!=null && IRImgObj['ImagePath']!=''?IRImgObj['ImagePath']:''; + + IRImageV+=IRImageV!=''?' , ':''; + IRImageV+=` ('','${StoreId}','${d3}','','','${Image1}','','${GbTempSessionId.current}','','${currentMenu.MenuId}','${d3}') `; + } + + let {Sess_StoreCode,Sess_TaskName,Sess_CatName,Sess_PhotoType}=GbTempSessionObj.current; + Sess_StoreCode=Sess_StoreCode || ''; + Sess_TaskName=Sess_TaskName || ''; + Sess_CatName=Sess_CatName || ''; + Sess_PhotoType=Sess_PhotoType || ''; + IRStatusV+=IRStatusV!=''?' , ':''; + IRStatusV+=` ('','${StoreId}','${d3}','','','${GbTempSessionId.current}','','0','','${currentMenu.MenuId}','${Sess_StoreCode}','${Sess_TaskName}','${Sess_CatName}','${Sess_PhotoType}','${d3}') `; + + } + + let add_hdr_data=`INSERT INTO ${AppTables.PAIDVIS_HDR_DATA} (PVIS_HEADER_ID,MENU_ID,STORE_ID,VISIT_DATE,PVIS_DEFINITION_ID,PVIS_ID,PVIS_NAME,PVIS_TABLE,PVIS_FIELD,PVIS_VALUE,CHILD_NAME,IS_PRESENT,PVIS_NA_IMAGE,REASON_ID,REASON,REMARK,IS_UPDATED,ADDED_DATE, IS_STORE_SPECIFIC) VALUES ${values} `; + let add_child_data=`INSERT INTO ${AppTables.PAIDVIS_CHILD_DATA} (PVIS_HEADER_ID,STORE_ID,VISIT_DATE,PVIS_DEFINITION_ID,PVIS_ID,QUESTION_ID,QUESTION_CODE,QUESTION_TYPE,ANSWER,ANSWER_ID,MULTI_OPTIONS_IDS,IMAGE1,IMAGE_ALLOW1,ADDED_DATE) VALUES ${childV} `; + let add_images_data=`INSERT INTO ${AppTables.PAIDVIS_IMAGES} (PVIS_HEADER_ID,STORE_ID,VISIT_DATE,PVIS_DEFINITION_ID,PVIS_ID,IMAGE1,IMAGE2,ADDED_DATE) VALUES ${imageV} `; + let add_stock_data=`INSERT INTO ${AppTables.PAIDVIS_STOCK_DATA} (PVIS_HEADER_ID,STORE_ID,VISIT_DATE,PVIS_DEFINITION_ID,PVIS_ID,PVIS_STOCK_DEFINITION_ID,PVIS_STOCK_TABLE,PVIS_STOCK_FIELD,PVIS_STOCK_VALUE,PVIS_STOCK_MBQ,PRODUCT_NAME,STOCK,IS_PVIS_PRESENT,ADDED_DATE) VALUES ${stockV} `; + let add_IRImage_data=`INSERT INTO ${AppTables.PAIDVIS_IR_IMAGES} (PVIS_HEADER_ID,STORE_ID,VISIT_DATE,PVIS_DEFINITION_ID,PVIS_ID,IMAGE1,IMAGE2,TEMP_SESSION_ID,UN_SESSION_ID,MENU_ID,ADDED_DATE) VALUES ${IRImageV} `; + let add_IRStatus_data=`INSERT INTO ${AppTables.PAIDVIS_IRUPLOAD} (PVIS_HEADER_ID,STORE_ID,VISIT_DATE,PVIS_DEFINITION_ID,PVIS_ID,TEMP_SESSION_ID,UN_SESSION_ID,UPLOAD_STATUS,SYNC_STATUS,MENU_ID,SESSION_STORECODE,SESSION_TASKNAME,SESSION_CATNAME,SESSION_PHOTOTYPE,ADDED_DATE) VALUES ${IRStatusV} `; + + + + await txn.executeSql(add_hdr_data,[],async function (txn2, txnres) { + console.log('st header data added'); + var isSplitImageAdded=true,isStockAdded=true,isChildAdded=true,isIRImageAdded=true,isIRStatusAdded=true; + if(imageV!=''){ + isSplitImageAdded=await executeQuery(add_images_data); + } + if(stockV!=''){ + isStockAdded=await executeQuery(add_stock_data); + } + if(childV!=''){ + isChildAdded=await executeQuery(add_child_data); + } + if(IRImageV!=''){ + isIRImageAdded=await executeQuery(add_IRImage_data); + } + if(IRStatusV!=''){ + isIRStatusAdded=await executeQuery(add_IRStatus_data); + } + + if(!isSplitImageAdded){ + setProcessing(false);notify('Cannot add paid visibility images'); + } + else if(!isStockAdded){ + setProcessing(false);notify('Cannot add paid visibility stock data'); + } + else if(!isChildAdded){ + setProcessing(false);notify('Cannot add paid visibility questions data'); + } + else if(!isIRImageAdded){ + setProcessing(false);notify('Cannot add paid visibility IR Images data'); + } + else if(!isIRStatusAdded){ + setProcessing(false);notify('Cannot add paid visibility IR Status data'); + } + else{ + setProcessing(false);notify('Paid visibility updated successfully'); + setisDataExists(true); + // clear store data in local storage to avoiding re-set data for the store + await clear_item('storeData') + BgUnsavedChanges(false);// when all data saved clear the unsaved changes flag + props.navigation.goBack();// send back + } + + + },function (txnE,txnerr) { console.log(txnerr);setProcessing(false);notify('Cannot add paid visibility data'); },); + }); + } catch (err) { + console.log(err); + } + } + + async function removePreviousData(){ + let {StoreId,ChainId,StateId,StoreTypeId}=storeData; + return new Promise((resolve,reject)=>{ + + db.transaction(async function (txn) { + + await txn.executeSql(`Select * FROM ${AppTables.PAIDVIS_HDR_DATA} WHERE STORE_ID='${StoreId}' and MENU_ID='${currentMenu.MenuId}' and VISIT_DATE='${d2}' `,[],async function (txn2, txnres) { + if(txnres.rows.length>0){ + let arr=[]; + let isHdrDel=false,isQtnsDel=false,isImagesDel=false,isStockDel=false,isIRImageDel=false,isIRStatusDel=false; + for(let i=0;i{ + return val; + }).catch((err)=>{ + console.log('error:',err); + return false; + }) + } + + async function executeQuery(q){ + return new Promise((resolve,reject)=>{ + db.transaction(async function (txn) { + await txn.executeSql(q,[],async function (txn2, txnres2) { + resolve(true); + },function(Etxn,txnerr){console.log(txnerr);resolve(false) }); + }); + }).then((val)=>{ + return val; + }).catch((err)=>{ + console.log(err); + return false; + }) + } + + async function validate(){ + let isValid=true; + + let isListedSKUIndex=KPIFields.findIndex(i=>i.KPIFieldName=='ListedSKUCheckbox'); + let isListedSKUKPIObj=isListedSKUIndex>=0?KPIFields[isListedSKUIndex]:{}; + let isListedSKUEnable=isListedSKUIndex>=0?isListedSKUKPIObj['KPIFieldEnable']:true; + + + let CameraIROnceOnlyIndex=KPIFields.findIndex(i=>i.KPIFieldName=='CameraIROnceOnly') + let CameraIROnceOnlyObj=CameraIROnceOnlyIndex>=0?KPIFields[CameraIROnceOnlyIndex]:{}; + let CameraIROnceOnly=CameraIROnceOnlyIndex>=0?CameraIROnceOnlyObj['KPIFieldEnable']:true; + + + return new Promise((resolve,reject)=>{ + for (const wi in globalWindows){ + const window=globalWindows[wi]; + const wind=WindowData.find(i=>i.VisibilityId==window.VisibilityId && i.VisibilityDefinitionId==window.VisibilityDefinitionId); + let windIRImages=wind.IRImages!=null?wind.IRImages:[]; + let TempSessionId=wind.TempSessionId!=null?wind.TempSessionId:""; + + + if(StoreCameraAllow && !CameraIROnceOnly && (windIRImages.length<=0 || TempSessionId=='') ){ + notify(`Please click Images for ${window.VisibilityName}`,'SHORT'); + resolve(false);return; + } + + + if(wi==(Windows.length-1)){ + if( StoreCameraAllow && CameraIROnceOnly && ( WindowIRImages.current.length<=0 || GbTempSessionId.current=='') ){ + notify(`Please click Images for ${currentMenu.MenuName}`,'SHORT'); + resolve(false);return; + } + else{ + resolve(true);return; + } + } + + } + + + }).then((val)=>{return val}) + .catch((err)=>{console.log(err); return false}); + + } + + + function onselectionChange3(option,keyLbl,keyVal,otherData){ + + let item=otherData.window; + let allData=WindowData; + let defData={'VisibilityId':item.VisibilityId,'VisibilityDefinitionId':item.VisibilityDefinitionId}; + const win_index=allData.findIndex(i=>i.VisibilityId==item.VisibilityId && i.VisibilityDefinitionId==item.VisibilityDefinitionId); + let wind=win_index>=0?(allData[win_index] || defData) : defData; + wind[keyVal]=option.value; + wind[keyLbl]=option.label; + + win_index>=0?allData[win_index]=wind:allData.push(wind); + console.log('allData:',allData); + let objIndex = InputChange.findIndex(i=>i.VisibilityId==item.VisibilityId && i.VisibilityDefinitionId==item.VisibilityDefinitionId); + let winArr=[...InputChange] + winArr[objIndex].Flag=true + + setInputChange(winArr) + // setWindowData(allData); + BgWindowData(allData); + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + + function onselectionChange(option,qtn,window){ + let allData=WindowData; + let defData={'VisibilityId':window.VisibilityId,'VisibilityDefinitionId':window.VisibilityDefinitionId}; + const wind_index=allData.findIndex(i=>i.VisibilityId==window.VisibilityId && i.VisibilityDefinitionId==window.VisibilityDefinitionId); + let wind=wind_index>=0?allData[wind_index]:defData; + let data=wind.WindowQA || {}; + let id_key=qtn.VisibilityQuestionId+'_AnswerId'; + let ans_key=qtn.VisibilityQuestionId+'_Answer'; + data[id_key]=option.value; + data[ans_key]=option.label; + + + wind['WindowQA']=data; + wind_index>=0?allData[wind_index]=wind:allData.push(wind); + let objIndex = InputChange.findIndex(i=>i.VisibilityId==window.VisibilityId && i.VisibilityDefinitionId==window.VisibilityDefinitionId); + let winArr=[...InputChange] + winArr[objIndex].Flag=true + + setInputChange(winArr) + // setWindowData(allData); + BgWindowData(allData); + + let aq_ans=qtn.Answers!=null?qtn.Answers:[]; + let ans_obj=aq_ans.find(i=>i.AnswerId==option.value) || {}; + let EQtns=ans_obj.VAQuestionEnable!=null && ans_obj.VAQuestionEnable!=''?ans_obj.VAQuestionEnable.replace(' ','').split(','):[]; + let DQtns=ans_obj.VAQuestionDisable!=null && ans_obj.VAQuestionDisable!=''?ans_obj.VAQuestionDisable.replace(' ','').split(','):[]; + + let sqtns=window.WindowQuestions || [] + + // console.log("DQtns.length-----disableQtns",DQtns.length>0,EQtns.length>0) + // console.log("DQtns.length-----1",EQtns,DQtns) + + if(EQtns.length>0){ + enableQtns(sqtns,EQtns,DQtns,data,wind,wind_index,allData,window) + } + else if(DQtns.length>0){ + disableQtns(sqtns,DQtns,data,wind,wind_index,allData,window) + } + else{ + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + + } + + async function disableQtns(sqtns,DQtns,data,wind={},wind_index=-1,allData=[],window={}){ + + if(DQtns.length>0){ + new Promise.all( + DQtns.map((qid,q_index)=>{ + let s_qtnindex=sqtns.findIndex(i=>i.VisibilityQuestionId==qid) || {}; + let s_qtn=sqtns[s_qtnindex]; + if(s_qtn!=null){ + s_qtn['isDisabled']=true + sqtns[s_qtnindex]=s_qtn; + let id_key=s_qtn.VisibilityQuestionId+'_AnswerId'; + let ans_key=s_qtn.VisibilityQuestionId+'_Answer'; + data[id_key]=0; + data[ans_key]=''; + + wind['WindowQA']=data; + wind_index>=0?allData[wind_index]=wind:allData.push(wind); + return false + }else{ + return false + } + }) + ).then(async (val)=>{ + + let allwindows=Windows; + let windowIndex=allwindows.findIndex(i=>i.VisibilityDefinitionId==window.VisibilityDefinitionId && i.VisibilityId==window.VisibilityId) + if(windowIndex>=0){ + window['WindowQuestions']=sqtns; + allwindows[windowIndex]=window; + // setWindowData(allData); + BgWindowData(allData); + setWindows(allwindows); + setGlobalWindows(allwindows); + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + + }) + } + } + + async function enableQtns(sqtns,EQtns,DQtns,data,wind={},wind_index=-1,allData=[],window={}){ + new Promise.all( + EQtns.map((qid,q_index)=>{ + let s_qtnindex=sqtns.findIndex(i=>i.VisibilityQuestionId==qid) || {}; + let s_qtn=sqtns[s_qtnindex]; + // console.log("DQtns.length-----1.1",s_qtn,sqtns,qid) + if(s_qtn!=null){ + s_qtn['isDisabled']=false + sqtns[s_qtnindex]=s_qtn; + return false + } + else{ + return false + } + }) + ).then(async (val)=>{ + if(DQtns.length>0){ + await disableQtns(sqtns,DQtns,data,wind,wind_index,allData,window) + } + else{ + let allwindows=Windows; + let windowIndex=allwindows.findIndex(i=>i.VisibilityDefinitionId==window.VisibilityDefinitionId && i.VisibilityId==window.VisibilityId) + if(windowIndex>0){ + window['WindowQuestions']=sqtns; + allwindows[windowIndex]=window; + setWindows(allwindows); + setGlobalWindows(allwindows); + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + } + }) + } + + async function setMultiSelectValue(selectedItems=[],qtn={},window={}) { + console.log('setMultiSelectValue',selectedItems); + let id_key=qtn.VisibilityQuestionId+'_AnswerId'; + let ans_key=qtn.VisibilityQuestionId+'_Answer'; + let multi_key=qtn.VisibilityQuestionId+'_MultiOption'; + + let allData=WindowData; + let defData={'VisibilityId':window.VisibilityId,'VisibilityDefinitionId':window.VisibilityDefinitionId}; + const wind_index=allData.findIndex(i=>i.VisibilityId==window.VisibilityId && i.VisibilityDefinitionId==window.VisibilityDefinitionId); + let wind=wind_index>=0?allData[wind_index]:defData; + let obj=wind.WindowQA || {}; + obj[id_key]=0; + obj[multi_key]=selectedItems.join(','); + let anss=[]; + selectedItems.map((itemValue)=>{ + let ans = qtn.Answers.find(c1 => c1.AnswerId == itemValue); + if(ans.Answer){anss.push(ans.Answer)} + }); + obj[ans_key]=anss.join(','); + console.log('obj:',obj); + + wind['WindowQA']=obj; + wind_index>=0?allData[wind_index]=wind:allData.push(wind); + + let objIndex = InputChange.findIndex(i=>i.VisibilityId==window.VisibilityId && i.VisibilityDefinitionId==window.VisibilityDefinitionId); + let winArr=[...InputChange] + winArr[objIndex].Flag=true + + setInputChange(winArr) + // setWindowData(allData); + BgWindowData(allData); + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + + function setTextValue(value,qtn,window) { + let id_key=qtn.VisibilityQuestionId+'_AnswerId'; + let ans_key=qtn.VisibilityQuestionId+'_Answer'; + + let allData=WindowData; + let defData={'VisibilityId':window.VisibilityId,'VisibilityDefinitionId':window.VisibilityDefinitionId}; + const wind_index=allData.findIndex(i=>i.VisibilityId==window.VisibilityId && i.VisibilityDefinitionId==window.VisibilityDefinitionId); + let wind=wind_index>=0?allData[wind_index]:defData; + let obj=wind.WindowQA || {}; + + if(qtn.QuestionType=='Date' ){ + let date_key=qtn.VisibilityQuestionId+'_Date'; + let d=value!=null?new Date(value):new Date(); + let mfdate=moment(d).format('MM/YYYY'); + showQtnDatePicker(qtn,window,false); + obj[id_key]=0; + obj[ans_key]=mfdate; + obj[date_key]=moment(d).format('MM/DD/YYYY'); + } + else{ + obj[id_key]=0; + obj[ans_key]=value; + } + + console.log(value,obj); + wind['WindowQA']=obj; + wind_index>=0?allData[wind_index]=wind:allData.push(wind); + + let objIndex = InputChange.findIndex(i=>i.VisibilityId==window.VisibilityId && i.VisibilityDefinitionId==window.VisibilityDefinitionId); + let winArr=[...InputChange] + winArr[objIndex].Flag=true + + setInputChange(winArr) + // setWindowData(allData); + BgWindowData(allData); + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + + function showQtnDatePicker(qtn,window,show=false){ + let allQtns=window.WindowQuestions || []; + let newqtnIndex=allQtns.findIndex(q=>q.VisibilityQuestionId==qtn.VisibilityQuestionId); + + if(newqtnIndex>=0){ + let newqtn=allQtns[newqtnIndex]; + newqtn.showDatePicker=show; + allQtns[newqtnIndex]=newqtn; + window['WindowQuestions']=allQtns; + let allWindows=Windows; + const winIndex=allWindows.findIndex(i=>i.VisibilityId==window.VisibilityId && i.VisibilityDefinitionId==window.VisibilityDefinitionId) || {}; + allWindows[winIndex]=window; + setWindows(allWindows); + setGlobalWindows(allwindows); + if(show==true) setrerenderdata(!rerenderdata); + } + } + + function setRatingValue(data){ + setRatingOrder(data); + } + + function onRatingCancel(){ + setShowRating(false); + } + + function onRatingSave(){ + setShowRating(false); + let qtn=RatingQtn; + let window=RatingWindow; + let id_key=qtn.VisibilityQuestionId+'_AnswerId'; + let ans_key=qtn.VisibilityQuestionId+'_Answer'; + let rating_key=qtn.VisibilityQuestionId+'_Rating'; + let ids=[],anss=[]; + RatingOrder.map((item,index)=>{ + ids.push(item.AnswerId); + anss.push(item.Answer); + }) + + let allData=WindowData; + let defData={'VisibilityId':window.VisibilityId,'VisibilityDefinitionId':window.VisibilityDefinitionId}; + const wind_index=allData.findIndex(i=>i.VisibilityId==window.VisibilityId && i.VisibilityDefinitionId==window.VisibilityDefinitionId); + let wind=wind_index>=0?allData[wind_index]:defData; + let obj=wind.WindowQA || {}; + + obj[rating_key]=ids.join(','); + obj[id_key]=0; + obj[ans_key]=anss.join(','); + + wind['WindowQA']=obj; + wind_index>=0?allData[wind_index]=wind:allData.push(wind); + + let objIndex = InputChange.findIndex(i=>i.VisibilityId==window.VisibilityId && i.VisibilityDefinitionId==window.VisibilityDefinitionId); + let winArr=[...InputChange] + winArr[objIndex].Flag=true + + setInputChange(winArr) + // setWindowData(allData); + BgWindowData(allData); + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + + + function onChoiceSelect(item,val,key,animatedChoice){ + let win_index=InputChange.find(i=>i.VisibilityId==item.VisibilityId && i.VisibilityDefinitionId==item.VisibilityDefinitionId) + let changeValue=win_index.Flag; + + if(changeValue){ + setIsPresentClean(val) + setDataCleanAnim(animatedChoice) + setDataCleanItem(item) + setDataCleanModal(true) + return + } + + var val1=0; + val==1?val1=1:''; + + if(animatedChoice!=null){ + Animated.timing(animatedChoice, { + toValue: val1, + duration:400, + useNativeDriver:false, + }).start(); + } + onWindowDataChange(item,val,key) + } + + function onWindowDataChange(item,val,key){ + let allData=WindowData; + let defData={'VisibilityId':item.VisibilityId,'VisibilityDefinitionId':item.VisibilityDefinitionId}; + const win_index=allData.findIndex(i=>i.VisibilityId==item.VisibilityId && i.VisibilityDefinitionId==item.VisibilityDefinitionId); + let wind=win_index>=0?(allData[win_index] || defData) : defData; + wind[key]=val; + + if(key=='ReasonId'){ + let rsn=reasons_list.find(r=>r.ReasonId==val) || {}; + wind['Reason']=rsn.Reason || ''; + } + + win_index>=0?allData[win_index]=wind:allData.push(wind); + + if(key!="isPresent"){ + let objIndex = InputChange.findIndex(i=>i.VisibilityId==item.VisibilityId && i.VisibilityDefinitionId==item.VisibilityDefinitionId); + let winArr=[...InputChange] + winArr[objIndex].Flag=true + setInputChange(winArr) + } + + // setWindowData(allData); + BgWindowData(allData); + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + + + async function setWindowStockVal(val,window,stockProd,key,type=''){ + if(type=='numeric' && val!=''){ + const regex = new RegExp(/^\d+$/); + let isNUmeric=regex.test(val); + if(!isNUmeric){ + notify(ST.Pleaseenterwholenumbersonly,'SHORT'); + return; + } + } + + let allData=WindowData; + let defData={'VisibilityId':window.VisibilityId,'VisibilityDefinitionId':window.VisibilityDefinitionId}; + const win_index=allData.findIndex(i=>i.VisibilityId==window.VisibilityId && i.VisibilityDefinitionId==window.VisibilityDefinitionId); + let wind=win_index>=0?(allData[win_index] || defData) : defData; + let WStocksData=wind['WStocksData'] || []; + let sdIndex=WStocksData.findIndex(i=> i.ProductId==stockProd.VisibilityStockValue); + let sd=sdIndex>=0?WStocksData[sdIndex]:{'ProductId':stockProd.VisibilityStockValue,'Stock':''}; + sd[key]=val; + sdIndex>=0?WStocksData[sdIndex]=sd:WStocksData.push(sd); + wind['WStocksData']=WStocksData; + win_index>=0?allData[win_index]=wind:allData.push(wind); + if(key=='isPVisPresent'){ + let isAllChecked = await verifyAllChecked(val,window,stockProd,key); + wind['isAllSKUChecked']=isAllChecked; + } + + // setWindowData(allData); + BgWindowData(allData); + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata4(!rerenderdata4); + } + + async function onCatTextChange(window,key,val){ + let item=window; + let allData=WindowData; + let defData={'VisibilityId':item.VisibilityId,'VisibilityDefinitionId':item.VisibilityDefinitionId}; + const win_index=allData.findIndex(i=>i.VisibilityId==item.VisibilityId && i.VisibilityDefinitionId==item.VisibilityDefinitionId); + let wind=win_index>=0?(allData[win_index] || defData) : defData; + wind[key]=val; + + win_index>=0?allData[win_index]=wind:allData.push(wind); + + // setWindowData(allData); + BgWindowData(allData); + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + + + async function verifyAllChecked(val,window,stockProd,key){ + return await new Promise((resolve,reject)=>{ + let WindowStocks=window.WindowStocks || []; + let allData=WindowData; + const win_index=allData.findIndex(i=>i.VisibilityId==window.VisibilityId && i.VisibilityDefinitionId==window.VisibilityDefinitionId); + let wind=win_index>=0?(allData[win_index] || defData) : defData; + let WStocksData=wind['WStocksData'] || []; + if(WindowStocks.length>0){ + let isAllChecked=1; + for(var i=0;i a.ProductId==stockProd.VisibilityStockValue); + let sd1=sdIndex1>=0?WStocksData[sdIndex1]:{}; + let isPVisPresent=sd1.isPVisPresent; + if(isPVisPresent==null || isPVisPresent=='' || isPVisPresent==0 || isPVisPresent=='0'){ + isAllChecked=0 + } + + if(i==WindowStocks.length-1){ + resolve(isAllChecked); + } + } + } + else{ + resolve(0); + } + + }).catch((err)=>{ + console.log(err); + return 0; + }); + } + + function onWindowDataClean(){ + if(DataCleanAnim!=null){ + // console.log("anim---") + let anim=isPresentClean==1?1:''; + Animated.timing(DataCleanAnim, { + toValue:anim, + duration:400, + useNativeDriver:false, + }).start(); + } + let allData=WindowData; + let WindowSplits = []; + for(var s=0;si.VisibilityId==window.VisibilityId && i.VisibilityDefinitionId==window.VisibilityDefinitionId + let defData={'VisibilityId':DataCleanItem.VisibilityId,'VisibilityDefinitionId':DataCleanItem.VisibilityDefinitionId,'isAllSKUChecked':0,'WindowSplits':WindowSplits,'WindowQA':{},'WStocksData':[],isPresent:isPresentClean}; + const win_index=allData.findIndex(i=>i.VisibilityId==DataCleanItem.VisibilityId && i.VisibilityDefinitionId==DataCleanItem.VisibilityDefinitionId); + allData[win_index]=defData + + let objIndex = InputChange.findIndex((obj => obj.VisibilityId == DataCleanItem.VisibilityId && obj.VisibilityDefinitionId==DataCleanItem.VisibilityDefinitionId)); + let winArr=[...InputChange] + winArr[objIndex].Flag=false + + setInputChange(winArr) + // setWindowData(allData); + BgWindowData(allData); + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setDataCleanModal(false) + setrerenderdata(!rerenderdata); + } + + function checkAllSKUs(val,window){ + + let WindowStocks=window.WindowStocks || []; + let allData=WindowData; + let defData={'VisibilityId':window.VisibilityId,'VisibilityDefinitionId':window.VisibilityDefinitionId}; + const win_index=allData.findIndex(i=>i.VisibilityId==window.VisibilityId && i.VisibilityDefinitionId==window.VisibilityDefinitionId); + let wind=win_index>=0?(allData[win_index] || defData) : defData; + let WStocksData=wind['WStocksData'] || []; + console.log('WStocksData before:',WStocksData) + for(var i=0;i a.ProductId==stockProd.VisibilityStockValue); + let sd=sdIndex>=0?WStocksData[sdIndex]:{'ProductId':stockProd.VisibilityStockValue,'Stock':''}; + let isPVisPresent=(val==1 || val=='1')?1:0; + sd['isPVisPresent']=isPVisPresent; + + sdIndex>=0?(WStocksData[sdIndex]=sd):(WStocksData.push(sd)); + } + + + wind['WStocksData']=WStocksData; + wind['isAllSKUChecked']=val==1?1:0; + console.log('wind updated'); + win_index>=0?allData[win_index]=wind:allData.push(wind); + + + // setWindowData(allData); + BgWindowData(allData); + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + + function onSaveCancel(){ + setShowAlert(false); + } + + + + function setIRZoomImages(IRCamImages){ + let z_images=[]; + for(let ci in IRCamImages){ + let img=IRCamImages[ci]; + let img_obj={imgIndex:(ci+1),url: img.ImagePath, props: {}} + + z_images.push(img_obj); + if(ci==IRCamImages.length-1){ + setZoomImageUrl2(z_images); + } + } + } + + async function getIRZoomImages(IRCamImages){ + return new Promise((resolve,reject)=>{ + let z_images=[]; + for(let ci in IRCamImages){ + let img=IRCamImages[ci]; + let img_obj={imgIndex:(ci+1),url: img.ImagePath, props: {}} + + z_images.push(img_obj); + if(ci==IRCamImages.length-1){ + resolve(z_images) + } + } + }).catch((err)=>{ + console.log(err); + return []; + }) + } + + function openImageRefView(windowIndex=0){ + setrefImageIndex(windowIndex); + UpdateShow_zoomImageRef(true); + } + + function openImageRefView2(ImageIndex=0,wind_index,Type='2'){ + if(Type=='1'){ + let wind=Windows[wind_index]; + const windDataIndex=WindowData.findIndex(i=>i.VisibilityId==wind.VisibilityId && i.VisibilityDefinitionId==wind.VisibilityDefinitionId) ; + const windData=windDataIndex>=0?windData[windDataIndex]:{}; + let zoomIRImages=windData?.zoomIRImages!=null && windData?.zoomIRImages!=""? windData?.zoomIRImages:[]; + setZoomImageUrl2(zoomIRImages); + } + setrefImageIndex2(ImageIndex); + UpdateShow_zoomImageRef2(true); + } + + function FilterStores(searchedQry){ + searchedQry=searchedQry.toLowerCase(); + console.log('searchedQry',searchedQry); + let arr=[]; + let newWindows=[]; + if(searchedQry!=null && searchedQry!=''){ + + for(let i=0;i + + {ST.DragItemsInOrder} + {ST.Pressandholdtodrag} + {setRatingValue(data)}} + keyExtractor={(item) => item.AnswerId} + renderItem={renderItem} + /> + + {onRatingCancel()}}> + {ST.Cancel} + + {onRatingSave()}}> + {ST.Save} + + + + + ) + } + + function render_Picker(label_key,value_key,onChange=()=>{},selected_data={}){ + var data=[]; + let qtn=selected_data.qtn || {}; + let window=selected_data.window || {}; + let isQtnDisabled=qtn.isDisabled!=null || qtn.isDisabled!=''?false:true; + let allAnswers=qtn.Answers || []; + + allAnswers.map((item,index)=>{ + let obj={ key: index, label: item[label_key],value:item[value_key] }; + if(selected_data.value==item[label_key]) + obj['component']= {item[label_key]}; + data.push(obj); + }); + + return ( + {onChange(option,qtn,window) }} + overlayStyle={customStyle.addVisPickerOverlay} + cancelContainerStyle={customStyle.addVisPicker_OptionContainerStyle} + optionStyle={customStyle.addvis_opStyle} + optionTextStyle={customStyle.addvis_opTextStyle} + optionContainerStyle={customStyle.addVisPicker_OptionContainerStyle} + selectedKey={'1'} + disabled={isQtnDisabled} + > + {(selected_data.value!=null && selected_data.value!=''?selected_data.value: '-'+ST.select+'-')} + + ) + } + + function renderDatePicker(qtn,window){ + let qtnn=qtn; + let DateRange=qtn.DateRange; + let maxDate=moment().add(10,'years').format('MM/DD/YYYY'); + let minDate=moment().subtract(10,'years').format('MM/DD/YYYY'); + if(DateRange=='RFD'){ + maxDate=moment().format('MM/DD/YYYY'); + } + else if(DateRange=='RPD'){ + minDate=moment().format('MM/DD/YYYY'); + } + + return ( + {setTextValue(selectedDate,qtnn,window)}} + maximumDate={new Date(maxDate)} + minimumDate={new Date(minDate)} + /> + ); + } + + async function OpenImgModal(imgPath,window,splitItem,splitItemIndex,cameraType){ + setSelectedImg(imgPath) + setShowModal(true); + if((imgPath!='' && imgPath!=null)){ + setShowImageSaveOp(false); + } + else{ + setShowImageSaveOp(true); + } + setReCapImgModalObj({window,splitItem,splitItemIndex,cameraType}) + // _OpenCaptureImage_Modal(imgPath,window,splitItem,splitItemIndex,cameraType) + + } + + function cancelImage(){ + // setImage1(''); + setSelectedImg(''); + setReCapImgModalObj({}) + setShowModal(false); + } + + function _render_RetakePopup(){ + return ( + + + {RetakeIRPhoto()}}> + + + Retake + + + {DeleteIRPhoto()}}> + + + Delete + + + {closeRetakeOp()}}> + + + Cancel + + + + + + + + ) + } + + function _render_UploadAlert(){ + return ( + + + {setshowUploadAlert(false)}}> + Cancel + + {UploadIRSessions()}}> + Yes + + + + ) + } + + function _renderIRCamera(wind,IRImages,TempSessionId,type='1',wind_index=''){ + + let isSaveDisabled=(isDataUploaded=='U' || isDataUploaded=='P'); + let isResumeDisabled=(TempSessionId==null || TempSessionId=='' || TempSessionId=='undefined' || isSaveDisabled==true); + + return ( + + + {`Capture ${currentMenu.MenuName} Images`} + + + + { (IRImages!=null && IRImages.length>0) && + IRImages.map((IRImg,IRImgIndex)=>{ + let IRimgPath=IRImg.ImagePath; + return( + {openImageRefView2(IRImgIndex,wind_index,type)}}> + {(IRimgPath!=null && IRimgPath!='') && } + {(IRimgPath==null || IRimgPath=='') && } + {openRetakeOp(wind,type,IRImgIndex,IRimgPath)}}> + + + + ); + }) + + } + + + {StartCameraSession(wind,type)}}> + + Start Session + + {ResumeCameraSession(wind,type)}} > + + Resume Session + + + + + ) + } + + function _renderIRCameraOnce(){ + + let CameraIROnceOnlyIndex=KPIFields.findIndex(i=>i.KPIFieldName=='CameraIROnceOnly') + let CameraIROnceOnlyObj=CameraIROnceOnlyIndex>=0?KPIFields[CameraIROnceOnlyIndex]:{}; + let CameraIROnceOnly=CameraIROnceOnlyIndex>=0?CameraIROnceOnlyObj['KPIFieldEnable']:true; + + if(CameraIROnceOnly){ + return _renderIRCamera({},WindowIRImages.current,GbTempSessionId.current,'2',''); + } + else{ + return null; + } + + } + + + function _renderWindow(){ + let RemarkEnableIndex=KPIFields.findIndex(i=>i.KPIFieldName=='RemarkEnable') + let RemarkEnableKPIObj=RemarkEnableIndex>=0?KPIFields[RemarkEnableIndex]:{}; + let RemarkEnable=RemarkEnableIndex>=0?RemarkEnableKPIObj['KPIFieldEnable']:false; + + let isListedSKUIndex=KPIFields.findIndex(i=>i.KPIFieldName=='ListedSKUCheckbox'); + let isListedSKUKPIObj=isListedSKUIndex>=0?KPIFields[isListedSKUIndex]:{}; + let isListedSKUEnable=isListedSKUIndex>=0?isListedSKUKPIObj['KPIFieldEnable']:true; + + let CameraIROnceOnlyIndex=KPIFields.findIndex(i=>i.KPIFieldName=='CameraIROnceOnly') + let CameraIROnceOnlyObj=CameraIROnceOnlyIndex>=0?KPIFields[CameraIROnceOnlyIndex]:{}; + let CameraIROnceOnly=CameraIROnceOnlyIndex>=0?CameraIROnceOnlyObj['KPIFieldEnable']:true; + + + return ( + + + `window_${index.toString()}`} + ListHeaderComponent={_renderIRCameraOnce} + renderItem={({item,index})=>{ + const window=item; + const windowIndex=index; + + let PromoTitleEnable=window.PromoDefinitionTitleEnable=='true' || window.PromoDefinitionTitleEnable==1? 1:0; + let PromoTitle=window.PromoDefinitionTitle!=null && window.PromoDefinitionTitle!='undefined'? window.PromoDefinitionTitle:""; + + const wind=WindowData.find(i=>i.VisibilityId==window.VisibilityId && i.VisibilityDefinitionId==window.VisibilityDefinitionId); + let isPresent=wind.isPresent!=null && wind.isPresent!=''?wind.isPresent:'0'; + let windIRImages=wind.IRImages!=null?wind.IRImages:[]; + let TempSessionId=wind.TempSessionId!=null?wind.TempSessionId:""; + // console.log('RefImage:',RefImage); + + + // var xpos=isPresent=='1'||isPresent==1?-75:0; + + // if(window.animatedChoice!=null ){ + // xpos=window.animatedChoice.interpolate({ + // inputRange:[0,1], + // outputRange:[0,-75], + // }); + // } + + return( + + + + {window.VisibilityName} + { + window && window.ChildName !="" && {window.ChildName} + } + {(PromoTitleEnable==1 && PromoTitle!=null && PromoTitle!='') && {PromoTitle}} + {openImageRefView(index)}}> + + + + + + {!CameraIROnceOnly && + + + {_renderIRCamera(window,windIRImages,TempSessionId,'1',windowIndex)} + + } + + ); + }} + /> + + + ) + } + + function _renderHeader(currentIndex,ImagesArr){ + return( + + {`${(currentIndex+1)}/${ImagesArr.length}`} + {UpdateShow_zoomImageRef(false); UpdateShow_zoomImageRef2(false);}}> + + + + ) + } + + const onCancelClean = () =>{ + setDataCleanModal(false) + } + const onclear = () => { + onWindowDataClean(DataCleanItem) + } + + function _renderBtns(){ + + let isUploadDisabled=isDataUploaded=='U'; + let isSaveDisabled=(isDataUploaded=='U' || isDataUploaded=='P'); + + let colors1=(isUploadDisabled?[PageTheme.$tertiary_color,PageTheme.$tertiary_color]:[PageTheme.$secondary_color_light,PageTheme.$gradient2, PageTheme.$primary_color]); + let colors2=(isSaveDisabled?[PageTheme.$tertiary_color,PageTheme.$tertiary_color]:[PageTheme.$secondary_color_light,PageTheme.$gradient2, PageTheme.$primary_color]); + + return ( + + {onSubmitData()}} /> + + + ) + } + + + return ( + + {processing && } + + {_OpenCaptureImage_Modal()} + {ConfirmSaveAlert(props,showAlert,onSaveCancel,saveData)} + {ConfirmSaveAlert(props,DataCleanModal,onCancelClean,onclear,'Your data will be clean',)} + {_render_RetakePopup()} + {_render_UploadAlert()} + + {UpdateShowQRCameraRef(false);onQRScanned(imgData)}} showCamera={showQRCamera} onHideCamera={()=>{UpdateShowQRCameraRef(false);}}/> + {UpdateShowCameraRef(false);getImage(imgData)}} showCamera={showCamera} onHideCamera={()=>{UpdateShowCameraRef(false);}}/> + + + + + {setSearchedItem(val); FilterStores(val)}} + /> + {FilterStores(searchedItem)}}> + + + + { Object.keys(storeData).length>0 && + _renderWindow() + } + {_renderBtns()} + + + { showRating==true && + renderRatingView() + } + {show_zoomImage && + + {return _renderHeader(currentIndex,zoomImageUrl)}} renderIndicator={()=>null} + /> + + } + + {show_zoomImage2 && + + {return _renderHeader(currentIndex,zoomImageUrl2)}} renderIndicator={()=>null} + /> + + } + + ); +} + + +export default connect(mapStateToProps, mapDispatchToProps)(PaidVisibilityOneAppIR_Only); \ No newline at end of file diff --git a/PerformicsSrc/src/screens/PersonalDocument.js b/PerformicsSrc/src/screens/PersonalDocument.js new file mode 100644 index 0000000..ae2df04 --- /dev/null +++ b/PerformicsSrc/src/screens/PersonalDocument.js @@ -0,0 +1,58 @@ +import React, {useState, useEffect} from 'react'; +import Container from '../components/container'; +import {useRoute} from '@react-navigation/native'; +import {globalStyles, customStyles, GetPageTheme} from '../styles/Global'; +import { StatusBar,Image,TextInput,View,Text,ScrollView,TouchableOpacity,Platform,PermissionsAndroid,FlatList,} from 'react-native'; +import {ReactReduxContext,connect,useSelector,useDispatch,} from 'react-redux'; +import {mapStateToProps, mapDispatchToProps} from '../reducers/contextProvider'; +import SQLite from 'react-native-sqlite-2'; +import {notify} from '../components/notify'; +import moment from 'moment'; +import {getDownloadJson,DownloadData} from '../controller/functions'; +import {get_item, set_item, clear_item} from '../components/localStorage'; +import {version,sloganline,appname,testurl,db,} from '../constants/constants'; +import CustomHeader from '../components/customHeader'; +import CustomLoader from '../components/CustomLoader'; +import LinearGradient from 'react-native-linear-gradient'; +import { FontAwesome, Fontisto, Ionicons, MaterialCommunityIcons } from '../components/icons'; +import NoDataComponent from '../components/NoDataComponent'; + +function PersonalDocument(props) { + const route = useRoute(); + + // get all theme styles acc to current theme set + const PageTheme = GetPageTheme(props.DarkMode, route.name); + const customStyle = customStyles(props.DarkMode, route.name); + const globalStyle = globalStyles(props.DarkMode, route.name); + + + const [processing, setProcessing] = useState(false); + + useEffect(() => { + + }, []); + + + + return ( + + {processing && } + + + + { !props.isDataDownloaded && } + { props.isDataDownloaded==true && + + + + } + + + + + ); +} + +export default connect(mapStateToProps, mapDispatchToProps)(PersonalDocument); diff --git a/PerformicsSrc/src/screens/PrevOrders.js b/PerformicsSrc/src/screens/PrevOrders.js new file mode 100644 index 0000000..43e21ea --- /dev/null +++ b/PerformicsSrc/src/screens/PrevOrders.js @@ -0,0 +1,382 @@ +import React, { useState, useEffect, useRef } from 'react'; +import Container from '../components/container'; +import { useRoute } from '@react-navigation/native'; +import { customStyles, GetPageTheme, deffontfamily } from "../styles/Global"; +import { View, Text, TouchableOpacity, Platform, Animated, Alert, AppState, StyleSheet, SectionList } from 'react-native'; +import { connect, } from 'react-redux'; +import { mapStateToProps, mapDispatchToProps } from '../reducers/contextProvider'; +import moment from 'moment'; +import { db } from '../constants/constants'; +import CustomHeader from '../components/customHeader'; +import CustomLoader from '../components/CustomLoader'; +import LinearGradient from 'react-native-linear-gradient'; + +function PrevOrders(props) { + const route = useRoute(); + const ST = props.StaticText || {}; + const PageTheme = GetPageTheme(props.DarkMode, route.name); + const customStyle = customStyles(props.DarkMode, route.name); + const animatedChoice = useRef(new Animated.Value(0)).current; + const [processing, setProcessing] = useState(true); + const [loaderTitle, setLoaderTitle] = useState('loading...'); + + const [storeData, setStoreData] = useState({}); + const [hasUnsavedChanges, setHasUnsavedChanges] = useState(false); + const hasUnsavedChangesRef = React.useRef(hasUnsavedChanges); + const StoreIdRef = React.useRef(null); + const prevScreenRef = React.useRef(""); + const d1 = new Date(); + const d2 = moment(d1).format('MM/DD/YYYY'); + const [orders, setOrders] = useState([]); // raw data + const [sections, setSections] = useState([]); // grouped data + const [expandedSections, setExpandedSections] = useState({}); // key: true/false + // ✅ Group by StorePO + SystemPO + const groupOrders = (data, prevScreen) => { + const grouped = {}; + data.forEach((item) => { + if (prevScreen != "") { + const key = `${item.VisitDate}_${item.StoreId}`; + if (!grouped[key]) { + grouped[key] = { + VisitDate: item.VisitDate, + StoreId: item.StoreId, + data: [], + }; + } + grouped[key].data.push({ + ProductName: item.ProductName, + OrderQty: item.OrderQty, + PackType: item.PackType + }); + } else { + const key = `${item.StorePO}_${item.SystemPO}`; + if (!grouped[key]) { + grouped[key] = { + StorePO: item.StorePO, + SystemPO: item.SystemPO, + ContactName: item.ContactName, + ContactNo: item.ContactNo, + VisitDate: item.VisitDate, + data: [], + }; + } + grouped[key].data.push({ + ProductName: item.ProductName, + OrderQty: item.OrderQty, + }); + } + }); + + return Object.values(grouped); + }; + + const toggleSection = (key) => { + setExpandedSections((prev) => ({ + ...prev, + [key]: !prev[key], + })); + }; + + useEffect(() => { + const params = props.route.params || {}; + const storeData1 = params.storeData || {}; + const prevScreen = params.prevScreen || ""; + prevScreenRef.current = prevScreen; + setStoreData(storeData1); + console.log("Store_data", prevScreen, storeData1); + getData(storeData1, prevScreen); + StoreIdRef.current = storeData1.StoreId; + if (storeData1.StoreId) { + getData(storeData1, prevScreen); + } + + const AppStateSubscription = AppState.addEventListener('change', _handleAppStateChange); + const unsubscribe = props.navigation.addListener('beforeRemove', onBeforeRemove); + + return () => { + AppStateSubscription.remove(); + unsubscribe(); + }; + }, [props.route.params]); // <-- only re-run when route params change + + + const _handleAppStateChange = async (nextAppState) => { + if (nextAppState === 'background' && hasUnsavedChangesRef.current === true) { + } + }; + + useEffect(() => { + const unsubscribe = props.navigation.addListener('beforeRemove', onBeforeRemove); + return unsubscribe; + }, [hasUnsavedChanges]); + + function onBeforeRemove(e) { + if (hasUnsavedChanges === true) { + e.preventDefault(); + onRemoveScreen(e); + } else { + return; + } + } + + + function onRemoveScreen(e) { + Alert.alert( + "", + "Do you really want to exit the screen?", + [ + { + text: "Cancel", + onPress: () => { }, + style: "cancel" + }, + { + text: "OK", onPress: async () => { + props.navigation.dispatch(e.data.action); + } + } + ] + ); + } + + async function getData(storeData1, prevScreen) { + try { + const { StoreId } = storeData1; + db.transaction((txn) => { + const tableName = + prevScreen !== "" ? "PriviousVisit_OrdersSimplyfyHistory" : "PriviousVisit_OrdersHistory"; + + const query = `SELECT * FROM ${tableName} WHERE StoreId=${StoreId}`; + txn.executeSql( + query, + null, // filter by StoreId if needed + (txn, res) => { + let arr = []; + for (let i = 0; i < res.rows.length; i++) { + arr.push(res.rows.item(i)); + } + console.log("arr", arr) + setOrders(arr); + const groupedSections = groupOrders(arr, prevScreen); + setSections(groupedSections); + // ✅ Expand the first section only + if (groupedSections.length > 0) { + const firstKey = prevScreen != "" ? `${groupedSections[0].VisitDate}_${groupedSections[0].StoreId}` : `${groupedSections[0].StorePO}_${groupedSections[0].SystemPO}`; + setExpandedSections({ [firstKey]: true }); + } + + setProcessing(false); + }, + (txn, err) => { + console.log("SQLite Error:", err); + setProcessing(false); + } + ); + }); + } catch (err) { + console.log(err); + setProcessing(false); + } + } + + return ( + + {processing && } + + + + {console.log("sections", sections)} + + {sections.length > 0 ? ( + { + const key = prevScreenRef.current != "" ? `${section.VisitDate}_${section.StoreId}` : `${section.StorePO}_${section.SystemPO}`; + return { + ...section, + data: expandedSections[key] ? section.data : [], // show data only if expanded + }; + })} + keyExtractor={(item, index) => item.ProductName + index} + renderItem={({ item }) => ( + + prevScreenRef.current !== "" ? ( + + {/* Left side: ProductName and PackType stacked vertically */} + + Product: {item.ProductName} + {item.PackType && ( + PackType: {item.PackType} + )} + + + + {/* Right side: Orders */} + Orders: {item.OrderQty} + + + ) : ( + + {item.ProductName} + Orders : {item.OrderQty} + + ) + + )} + + renderSectionHeader={({ section }) => { + const key = prevScreenRef.current !== "" ? `${section.VisitDate}_${section.StoreId}` : `${section.StorePO}_${section.SystemPO}`; + const isExpanded = expandedSections[key]; + return ( + toggleSection(key)}> + + + {isExpanded ? '▼' : '▶'} + + {prevScreenRef.current !== "" ? ( + <> + + Order Date : {section.VisitDate} + + + Store Info : {section.StoreId}: {storeData.StoreName} + + + ) : ( + <> + + Store PO : {section.StorePO} - {section.VisitDate} + + + System PO : {section.SystemPO} + + {section.ContactName && ( + + User Info : {section.ContactName} ({section.ContactNo}) + + )} + + + )} + + + + + + ); + }} + stickySectionHeadersEnabled={false} + contentContainerStyle={{ paddingBottom: 20 }} + /> + ) : ( + + No Previous Orders Found !! + + )} + + + + + + + + ); +} + + +export default connect(mapStateToProps, mapDispatchToProps)(PrevOrders); + +const styles = StyleSheet.create({ + sectionHeader: { + backgroundColor: '#e0e4faff', + padding: 10, + borderRadius: 12, + marginVertical: 6, + marginHorizontal: 10, + }, + headerRow: { + flexDirection: 'row', + justifyContent: 'space-between', + alignItems: 'center', + }, + headerTitle: { + fontSize: 15, + fontWeight: 'bold', + color: 'white', + }, + expandIcon: { + fontSize: 20, + fontWeight: 'bold', + color: 'white', + marginHorizontal: 5, + }, + contact: { + fontSize: 14, + color: 'white', + marginTop: 4, + marginStart: 5 + }, + itemCard: { + flexDirection: 'row', + justifyContent: 'space-between', + padding: 12, + marginHorizontal: 16, + marginVertical: 4, + borderRadius: 5, + elevation: 1, + shadowColor: '#484848', + shadowOpacity: 0.1, + shadowOffset: { width: 0, height: 2 }, + }, + product: { + color: '#333', + fontFamily: deffontfamily, + fontWeight: '600', + fontSize: 14, + + }, + qty: { + fontSize: 15, + fontWeight: '600', + color: '#000', + + }, + headerRow: { + flexDirection: 'row', + alignItems: 'center', // vertically center the icon with texts + }, + noOrdersContainer: { + flex: 1, + justifyContent: 'center', + alignItems: 'center', + }, + noOrdersText: { + color: 'red', + fontSize: 18, + fontWeight: 'bold', + }, +}); + diff --git a/PerformicsSrc/src/screens/PrevStoreReason.js b/PerformicsSrc/src/screens/PrevStoreReason.js new file mode 100644 index 0000000..f52fdf0 --- /dev/null +++ b/PerformicsSrc/src/screens/PrevStoreReason.js @@ -0,0 +1,488 @@ +import React, { useState, useEffect, memo } from 'react'; +import Container from '../components/container'; +import { useRoute } from '@react-navigation/native'; +import { globalStyles, customStyles, GetPageTheme } from "../styles/Global"; +import { StatusBar, Image, TextInput, View, Text, ScrollView, TouchableOpacity, TouchableHighlight, Platform, PermissionsAndroid, FlatList } from 'react-native'; +import { ReactReduxContext, connect, useSelector, useDispatch } from 'react-redux'; +import { mapStateToProps, mapDispatchToProps } from '../reducers/contextProvider'; +import SQLite from 'react-native-sqlite-2'; +import { notify } from '../components/notify'; +import moment from 'moment'; +import { getDownloadJson, AddStore, checkRange, UploadData2, UploadData, UpdateStoreStatus, getKPIS, marktext1, marktext2, UploadFormData, validateNumber, ValidateEmail } from '../controller/functions'; +import { get_item, set_item, clear_item } from '../components/localStorage'; +import { version, sloganline, appname, testurl, db, AppVersion, common_ImagePath, baseurl } from '../constants/constants'; +import CustomHeader from '../components/customHeader'; + +import CustomLoader from '../components/CustomLoader'; +import LinearGradient from 'react-native-linear-gradient'; + +import { AppTables } from '../constants/tableConstants'; +import { _checkLocationPermission } from '../components/geolocation'; + +import CustomCamera from '../components/Camera'; +import GradientButton from '../components/gradientButton'; +import { CustomPicker, CustomPicker2 } from '../components/CustomPicker'; +import { METHODS, getMethodName } from '../constants/methodNames'; +import CustomModal from '../components/CustomModal'; +import { useSafeAreaInsets } from 'react-native-safe-area-context'; + + + +function PrevStoreReason(props) { + const route = useRoute(); + + const insets = useSafeAreaInsets(); + const ST = props.StaticText || {}; + // get all theme styles acc to current theme set + const PageTheme = GetPageTheme(props.DarkMode, route.name); + const customStyle = customStyles(props.DarkMode, route.name); + + const [loaderTitle, setLoaderTitle] = useState("Loading..."); + const [processing, setProcessing] = useState(false); + const [rerenderdata, setrerenderdata] = useState(0); + const [isAdhocScreen, setIsAdhocScreen] = useState(false); + const [isBeatPlan, setIsBeatPlan] = useState(false); + const [storeData, setStoreData] = useState({}); + + const [PrevStoreList, setPrevStoreList] = useState([]); + const [StoreReason, setStoreReason] = useState([]); + const [totalQtn, setTotalQtn] = useState(0); + const [qad, setQad] = useState([]); + + + + + const [AllFormData, setAllFormData] = useState({}); + const [showCamera, setShowCamera] = useState(false); + + const [hasUnsavedChanges, setHasUnsavedChanges] = useState(false); + + const [IsEnableSubmit, setIsEnableSubmit] = useState(false); + + const [isNonMerchan, setIsNonMerchan] = useState(false); + const [isNonProg, setIsNonProg] = useState(false); + const [filtervalue, setFilterValue] = useState({}); + const [showAlert, setShowAlert] = useState(false); + const [EntryAllow, setEntryAllow] = useState(false); + + const [isDisable, setDisable] = useState(false); + + + + let d1 = new Date(); + let today = moment(d1).format('MM/DD/YYYY'); + + useEffect(() => { + const init = async () => { + try { + setProcessing(true); + setLoaderTitle(ST.Loading + '...'); + + const params = props.route.params || {}; + const storeData1 = params.storeData || {}; + + setIsAdhocScreen(params.isAdhoc || false); + setIsBeatPlan(params.isBeat ?? false); + setIsNonMerchan(params.isNonMerchans ?? false); + setIsNonProg(params.isNonProgs ?? false); + setStoreData(storeData1); + setAllFormData({ test: '1', ...storeData1 }); + + await Promise.all([ + getData(storeData1), + get_OQAD() + ]); + } catch (e) { + console.log("Init error", e); + } finally { + setProcessing(false); // ✅ only here + } + }; + + init(); +}, []); + + + async function getData() { + try { + const token = await get_item('loginToken'); + const loginInfo = JSON.parse(await get_item('loginInfo')); + + const url = (props.baseurl || baseurl) + + getMethodName(METHODS.DOWNLOADJSON_METHOD); + + const req1 = { + Downloadtype: 'PreviousDay_PendingJourneyPlan', + username: loginInfo.UserId, + empid: "" + }; + + const req2 = { + Downloadtype: 'Non_Working_Reason', + username: loginInfo.UserId, + empid: "" + }; + + const [res1, res2] = await Promise.all([ + getDownloadJson(url, req1), + getDownloadJson(url, req2) + ]); + + let EntryAllowFlag = false; + + if (res1?.PreviousDay_PendingJourneyPlan) { + const list = res1.PreviousDay_PendingJourneyPlan; + EntryAllowFlag = list.some(i => i?.CoveredStore == 1); + setEntryAllow(EntryAllowFlag); + setPrevStoreList(list); + } + + if (res2?.Non_Working_Reason) { + const filtered = res2.Non_Working_Reason.filter(r => + r.PreviousVisit === true && + (EntryAllowFlag ? r.EntryAllow === true : true) + ); + setStoreReason(filtered); + } + + } catch (err) { + console.log("getData error:", err); + } +} + + + + function _render_Alert() { + return ( + + + { setShowAlert(false) }}> + Cancel + + { saveData() }}> + Yes + + + + ) + } + async function validate() { + let isValid = true; + + await Promise.all( + PrevStoreList.map(async (item, index) => { + if (isValid == true) { + if (!Boolean(item.Reason) && item.ReasonId == null || item.ReasonId == '') { + notify('Please select reason for store Id ' + item.StoreId, 'SHORT'); + isValid = false; + } + } + }) + ); + + console.log('isValid:', isValid); + return isValid; + } + + async function submit() { + let isvalid = await validate(); + if (isvalid) { + setShowAlert(true); + } + } + + + async function saveData() { + let d1 = new Date(); + let d2 = moment(d1).format('MM/DD/YYYY'); + setShowAlert(false); + setProcessing(true); + setLoaderTitle('Uploading Data...'); + + let storeInfo = PrevStoreList + let arr = [] + + storeInfo?.map((item, i) => { + let itemObj = { + MID: item.MID, + StoreId: item.StoreId, + VisitDate: item.VisitDate, + EmpId: item.EmpId, + ReasonId: item.ReasonId, + UserId: props.UserId, + AppVersion: AppVersion + }; + arr.push(itemObj); + }) + + + let postData = { + "MID": 0, + "Keys": "PrevStoreNonCovStatus", + "JsonData": JSON.stringify(arr), + "UserId": props.UserId, + }; + + console.log("jsondataaa:", postData) + + + const url = props.baseurl + getMethodName(METHODS.UPLOADJSON_METHOD); + await UploadData2(url, postData) + .then(async (res) => { + console.log('res: 12', res); + if (res?.UploadJsonResult == "Success") { + notify('Store Status Uploaded Succesfully', 'SHORT'); + let prevStoreObj = { + Status: true, + visiteDate: d2 + } + let strObj = JSON.stringify(prevStoreObj) + await set_item('prevStoreStatus', strObj); + setProcessing(false); + setShowAlert(false) + gotoScreen(true, totalQtn); + } + else { + setShowAlert(false) + setProcessing(false); + } + }) + .catch((err) => { + console.log(err); setProcessing(false); + }); + + } + + + async function get_OQAD() { + let token = await get_item('loginToken'); + let loginInfo = await get_item('loginInfo'); + const loginDetails = JSON.parse(loginInfo); + var data = { Downloadtype: 'OQAD', username: loginDetails.UserId, empid: '', token: token, }; + + const url = (props.baseurl || baseurl) + getMethodName(METHODS.DOWNLOADJSON_METHOD); + console.log(url, data); + await getDownloadJson(url, data) + .then(async (res) => { + console.log('res:', res); + if (res.OQAD != null) { + let QAD_arr = res.OQAD || []; + let allQADS = []; + + var qad_data = {}; + var qids = []; + for (var i = 0; i < QAD_arr.length; i++) { + let data = QAD_arr[i]; + let isadded = false; + + + if (qids.indexOf(data.QuestionId) < 0) { + if (Object.keys(qad_data).length > 0) allQADS.push(qad_data); + qids.push(data.QuestionId) + qad_data = {}; + qad_data['QuestionId'] = data.QuestionId; + qad_data['Question'] = data.Question; + qad_data['Options'] = [{ 'AnswerId': data.AnswerId, 'Answer': data.Answer }]; + if (data.RightAnswer == true) qad_data['Answer'] = data.AnswerId; + + } + else { + let ops = qad_data['Options'] || []; + ops.push({ 'AnswerId': data.AnswerId, 'Answer': data.Answer }); + if (data.RightAnswer == true) qad_data['Answer'] = data.AnswerId; + + } + + if (i == QAD_arr.length - 1) { + allQADS.push(qad_data); + setQad(allQADS); + setTotalQtn(allQADS.length); + setTimer(false, false, allQADS); + } + } + + } + else if (typeof (res) == 'object' && res.length > 0 && res[0].Result != null && res[0].Result.includes('No Data')) { + // OQAD Not Found + // goToHome(); + setTotalQtn(-1); + } + }) + .catch(err => { + console.log('onPage Team error', err); + }); + + } + + const gotoScreen = (flag,totalQtn) => { + console.log('totalQtn:', totalQtn, 'flag:', flag); + if (flag == true && totalQtn < 0) { + props.navigation.replace("NoticeBoard"); + } + else{ + props.setLoginExists(false); + props.navigation.replace("One_QAD", { UserData: storeData, TodayLogin: true }); + } + + } + + function onselectionChange(option, keyLbl, keyVal, otherData) { + console.log("onselectionChange:", option, keyLbl, keyVal, otherData) + // let data=AddStoreinfoFormData; + let data = PrevStoreList || []; + let optionDAta = otherData?.filterData || [] + + let optionObj = optionDAta[option?.key] + + // if(EntryAllow){ + // optionObj?.EntryAllow==false || EntryAllow + if (optionObj?.EntryAllow == false) { + + data = data?.map((item, i) => { + let obj = item; + obj[keyVal] = option.value; + obj[keyLbl] = option.label; + // data[index]=obj + return obj + }) + setDisable(true) + } else { + let index = otherData?.index + if (isDisable) { + data = data?.map((item, i) => { + let obj = item; + if (index == i) { + obj[keyVal] = option.value; + obj[keyLbl] = option.label; + } else { + obj[keyVal] = null; + obj[keyLbl] = null; + } + return obj + }) + } else { + // let index=otherData?.index + let obj = data[index]; + obj[keyVal] = option.value; + obj[keyLbl] = option.label; + data[index] = obj + } + setDisable(false) + } + + setPrevStoreList(data) + // BgAddVisFormData(data) + // // setHasUnsavedChanges(true); + // BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + + } + + return ( + + {processing && } + + {_render_Alert()} + { setShowCamera(false); getImage(imgData) }} showCamera={showCamera} onHideCamera={() => { setShowCamera(false); }} /> + + + + + Previous day non-working Store status + + + + {rerenderdata == rerenderdata && PrevStoreList?.map((item, index) => { + + let filterData = StoreReason.filter((rs) => rs.ChannelId == item.ChannelId && rs.PreviousVisit == true); + return ( + + + + + + {ST.StoreId + ':'} + {item.StoreId} + + + {ST.StoreType + ':'} + {item.StoreType} + + + + + {ST.StoreCode + ':'} + {item.StoreCode == "undefined" ? "" : item.StoreCode} + + + + + {'Distributor Name:'} + {item.DistributorName} + + + + + {'City Name:'} + {item.CityName} + + + + + {'Address:'} + {item.Address} + + + + + + Select Reason : + {CustomPicker(props, filterData, 'Reason', 'ReasonId', 'Reason', 'ReasonId', onselectionChange, { value: item?.Reason || '', otherData: { index, filterData } }, {}, {}, '', null, (index == 0 ? false : isDisable))} + + + + ) + }) + } + + + {/* + + + { submit() }} /> + + + */} + + + + + + + + + + + ); +} + + + +export default connect(mapStateToProps, mapDispatchToProps)(PrevStoreReason); \ No newline at end of file diff --git a/PerformicsSrc/src/screens/ProgramChecklist.js b/PerformicsSrc/src/screens/ProgramChecklist.js new file mode 100644 index 0000000..3bb1160 --- /dev/null +++ b/PerformicsSrc/src/screens/ProgramChecklist.js @@ -0,0 +1,237 @@ +import React,{useState,useEffect} from 'react'; +import Container from '../components/container'; +import { useRoute } from '@react-navigation/native'; +import { globalStyles,customStyles,GetPageTheme } from "../styles/Global"; +import {StatusBar,Image,TextInput,View,Text,ScrollView,TouchableOpacity,Platform,PermissionsAndroid,FlatList, Alert, KeyboardAvoidingView, BackHandler, Keyboard} from 'react-native'; +import { connect, } from 'react-redux'; +import { mapStateToProps,mapDispatchToProps } from '../reducers/contextProvider'; +import {notify} from '../components/notify'; +import moment from 'moment'; +import {db, HierarchyTbls} from '../constants/constants'; +import CustomHeader from '../components/customHeader'; +import {AntDesign, Entypo, Fontisto, Ionicons, MaterialCommunityIcons} from '../components/icons'; +import CustomLoader from '../components/CustomLoader'; +import LinearGradient from 'react-native-linear-gradient'; +import { AppTables } from '../constants/tableConstants'; +import { getKPIFields, goToMenuPage } from '../controller/functions'; +import { getProgramChecklistAvailableQ } from '../constants/ConstantQueries'; +import GradientButton from '../components/gradientButton'; + + +function ProgramChecklist(props) { + const route = useRoute(); + const ST=props.StaticText || {}; + + // get all theme styles acc to current theme set + const PageTheme=GetPageTheme(props.DarkMode,route.name); + const customStyle=customStyles(props.DarkMode,route.name); + + const [processing, setProcessing] = useState(true); + const [loaderTitle, setLoaderTitle] = useState('loading...'); + const [isAdhocScreen, setIsAdhocScreen] = useState(false); + const [isNonMerchan, setIsNonMerchan] = useState(false); + const [isNonProg, setIsNonProg] = useState(false); + const [isStoreSearch, SetIsStoreSearch] = useState(false); + const [isBeatPlan, setIsBeatPlan] = useState(false); + const [storeData, setStoreData] = useState({}); + const [program, setProgram] = useState({}); + const [currentMenu, setCurrentMenu] = useState({}); + const [ScreenName, setScreenName] = useState(""); + const [BgNav, setBgNav] = useState(false); + const [BgNavData, setBgNavData] = useState({}); + const [KPIFields, setKPIFields] = useState([]); + const [CheckList, setCheckList] = useState([]); + const [rerenderdata, setrerenderdata]= useState(0); + + const [showAlert, setShowAlert] = useState(false); + + const [hasUnsavedChanges,setHasUnsavedChanges] = useState(false); + const [showCamera, setShowCamera] = useState(false); + const [getImageProps,setGetImageProps]= useState({}); + const [Hdrname, setHdrname] = useState(""); + const [ColId, setColId] = useState(""); + const [ColName, setColName] = useState(""); + + const d1=new Date(); + const d2=moment(d1).format('MM/DD/YYYY'); + + useEffect(() => { + let params=props.route.params? props.route.params:{}; + let storeData1=params.storeData || {}; + let program1=params.CatData || {}; + let menu1=(params.menu || params.MenuItem) || {}; + let isAdhoc=params.isAdhoc || false; + let isBeat=params.isBeat!=null? params.isBeat : false; + let isNonMerchan1=params.isNonMerchans!=null? params.isNonMerchans : false; + let isNonProgam=params.isNonProgs!=null? params.isNonProgs : false; + let isStoreSearch=params.isStoreSearch!=null? params.isStoreSearch : false; + let screenname1=params.screenname!=null? params.screenname : ""; + let BgNav1=params.redirect!=null? params.redirect : false; + let BgNavData1=params.BgNavData!=null? params.BgNavData : {}; + + setIsAdhocScreen(isAdhoc); + setIsBeatPlan(isBeat); + setIsNonMerchan(isNonMerchan1) + setIsNonProg(isNonProgam) + SetIsStoreSearch(isStoreSearch) + setStoreData(storeData1); + setCurrentMenu(menu1); + setScreenName(screenname1); + setBgNav(BgNav1); + setBgNavData(BgNavData1); + setProgram(program1); + + getData(storeData1,program1,menu1,screenname1,BgNav1,BgNavData1,isAdhoc,isBeat,isNonMerchan1,isNonProgam,isStoreSearch); + + + const willFocusSubscription = props.navigation.addListener('focus', () => { + getData(storeData1,program1,menu1,screenname1,BgNav1,BgNavData1,isAdhoc,isBeat,isNonMerchan1,isNonProgam,isStoreSearch); + }); + + return function cleanup() { + + return willFocusSubscription + }; + + }, []); + + + async function getData(storeData1,program1,menu1,screenname1,BgNav1,BgNavData1,isAdhoc,isBeat,isNonMerchan1,isNonProgam,isStoreSearch){ + + try { + let {StoreId,ChainId,StateId,StoreTypeId,StoreClassId,StoreCategoryId}=storeData1; + + let AllKPIFields=await getKPIFields(menu1); + setKPIFields(AllKPIFields); + + await db.transaction(async function (txn) { + + let q=await getProgramChecklistAvailableQ(storeData1,menu1,program1); + console.log("checklist q:",q); + await txn.executeSql(q,[],async function (txn2, txnres2) { + console.log('program checklist len:',txnres2.rows.length) + + if(txnres2.rows.length>0){ + let arr=[]; + for(var i=0;i + + + + Checklist + + + + + Status + + + + {rerenderdata==rerenderdata && + CheckList.map((item,index)=>{ + + return( + + + + {item.Checklist} + + + + + {item.Answer} + + + + ); + }) + } + + ) + } + + return ( + + {processing && } + + + + + + + {'Program:'} + {program.ProgramName} + + + + {'Grade:'} + {program.Grade} + + + {'Audit Date:'} + {program.AuditDate} + + + + + + + + {Object.keys(storeData).length>0 && + _renderChecklist() + } + + + + {movetoMenuScreen(storeData,currentMenu,program,BgNav,BgNavData,isAdhocScreen,isBeatPlan,isNonMerchan,isNonProg,isStoreSearch)}}> + + + + + + + ); +} + +export default connect(mapStateToProps, mapDispatchToProps)(ProgramChecklist); \ No newline at end of file diff --git a/PerformicsSrc/src/screens/ProgramList.js b/PerformicsSrc/src/screens/ProgramList.js new file mode 100644 index 0000000..600fc93 --- /dev/null +++ b/PerformicsSrc/src/screens/ProgramList.js @@ -0,0 +1,588 @@ +import React,{useState,useEffect} from 'react'; +import Container from '../components/container'; +import { useRoute } from '@react-navigation/native'; +import { globalStyles,customStyles,GetPageTheme } from "../styles/Global"; +import {StatusBar,Image,TextInput,View,Text,ScrollView,TouchableOpacity,Platform,PermissionsAndroid,FlatList, Alert, KeyboardAvoidingView, BackHandler, Keyboard} from 'react-native'; +import { ReactReduxContext,connect,useSelector, useDispatch } from 'react-redux'; +import { mapStateToProps,mapDispatchToProps } from '../reducers/contextProvider'; +import {notify} from '../components/notify'; +import moment from 'moment'; +import {get_item,set_item,clear_item} from '../components/localStorage'; +import {version,sloganline,appname,testurl,db, colors_Arr, common_ImagePath, HierarchyTbls} from '../constants/constants'; +import CustomHeader from '../components/customHeader'; +import {AntDesign, Entypo, Fontisto, Ionicons, MaterialCommunityIcons} from '../components/icons'; +import CustomLoader from '../components/CustomLoader'; +import LinearGradient from 'react-native-linear-gradient'; +import { AppTables } from '../constants/tableConstants'; +import { getKPIFields, goToMenuPage } from '../controller/functions'; + + +function ProgramList(props) { + const route = useRoute(); + const ST=props.StaticText || {}; + + // get all theme styles acc to current theme set + const PageTheme=GetPageTheme(props.DarkMode,route.name); + const customStyle=customStyles(props.DarkMode,route.name); + + const [processing, setProcessing] = useState(true); + const [loaderTitle, setLoaderTitle] = useState('loading...'); + const [isAdhocScreen, setIsAdhocScreen] = useState(false); + const [isNonMerchan, setIsNonMerchan] = useState(false); + const [isNonProg, setIsNonProg] = useState(false); + const [isStoreSearch, SetIsStoreSearch] = useState(false); + const [isBeatPlan, setIsBeatPlan] = useState(false); + const [storeData, setStoreData] = useState({}); + const [currentMenu, setCurrentMenu] = useState({}); + const [ScreenName, setScreenName] = useState(""); + const [BgNav, setBgNav] = useState(false); + const [BgNavData, setBgNavData] = useState({}); + const [KPIFields, setKPIFields] = useState([]); + const [productCats, setProductCats] = useState([]); + const [rerenderdata, setrerenderdata]= useState(0); + + const [showAlert, setShowAlert] = useState(false); + + const [hasUnsavedChanges,setHasUnsavedChanges] = useState(false); + const [showCamera, setShowCamera] = useState(false); + const [getImageProps,setGetImageProps]= useState({}); + const [Hdrname, setHdrname] = useState(""); + const [ColId, setColId] = useState(""); + const [ColName, setColName] = useState(""); + + const d1=new Date(); + const d2=moment(d1).format('MM/DD/YYYY'); + + useEffect(() => { + let params=props.route.params? props.route.params:{}; + let storeData1=params.storeData || {}; + let menu1=params.menu || {}; + let isAdhoc=params.isAdhoc || false; + let isBeat=params.isBeat!=null? params.isBeat : false; + let isNonMerchan1=params.isNonMerchans!=null? params.isNonMerchans : false; + let isNonProgam=params.isNonProgs!=null? params.isNonProgs : false; + let isStoreSearch=params.isStoreSearch!=null? params.isStoreSearch : false; + let screenname1=params.screenname!=null? params.screenname : ""; + let BgNav1=params.redirect!=null? params.redirect : false; + let BgNavData1=params.BgNavData!=null? params.BgNavData : {}; + + setIsAdhocScreen(isAdhoc); + setIsBeatPlan(isBeat); + setIsNonMerchan(isNonMerchan1) + setIsNonProg(isNonProgam) + SetIsStoreSearch(isStoreSearch) + setStoreData(storeData1); + setCurrentMenu(menu1); + console.log("w.ProgramName------",screenname1) + setScreenName(screenname1); + setBgNav(BgNav1); + setBgNavData(BgNavData1); + + + getData(storeData1,menu1,screenname1,BgNav1,BgNavData1,isAdhoc,isBeat,isNonMerchan1,isNonProgam,isStoreSearch); + + const unsubscribe=props.navigation.addListener('beforeRemove', onBeforeRemove); + + const willFocusSubscription = props.navigation.addListener('focus', () => { + console.log('onfocus'); + getData(storeData1,menu1,screenname1,BgNav1,BgNavData1,isAdhoc,isBeat,isNonMerchan1,isNonProgam,isStoreSearch); + }); + + return function cleanup() { + return unsubscribe; + return willFocusSubscription + }; + + }, []); + + useEffect(() => { + const unsubscribe=props.navigation.addListener('beforeRemove', onBeforeRemove); + return unsubscribe; + }, [hasUnsavedChanges]); + + useEffect(() => { + const unsubscribe=props.navigation.addListener('beforeRemove', onBeforeRemove); + return unsubscribe; + }, [showCamera]); + + function onBeforeRemove(e){ + if(showCamera==true){ + e.preventDefault(); + setShowCamera(false); + } + else{ + if (hasUnsavedChanges==true) { + e.preventDefault(); // Prevent default behavior of leaving the screen + onRemoveScreen(e); + } + else{ + return; + } + } + } + + function onRemoveScreen(e){ + Alert.alert( + "", + "Do you really want to exit the screen?", + [ + { + text: "Cancel", + onPress: () => {}, + style: "cancel" + }, + { text: "OK", onPress: () => {setHasUnsavedChanges(false);props.navigation.dispatch(e.data.action);} } + ] + ); + } + + + + async function getData(storeData1,menu1,screenname1,BgNav1,BgNavData1,isAdhoc,isBeat,isNonMerchan1,isNonProgam,isStoreSearch){ + + try { + let {StoreId,ChainId,StateId,StoreTypeId,StoreClassId,StoreCategoryId}=storeData1; + let {PSAllow,PSTableName}=menu1; + PSTableName=PSTableName!=null?PSTableName:''; + PSAllow=PSAllow!=null?PSAllow:false; + + let AllKPIFields=await getKPIFields(menu1); + setKPIFields(AllKPIFields); + + let HdrName1=(PSTableName.toLowerCase()==HierarchyTbls.Master_SubCategory.toLowerCase()?'Sub Categories':(PSTableName.toLowerCase()==HierarchyTbls.Master_Brand.toLowerCase()?'Brands':'Categories')); + setHdrname(HdrName1); + + // Forward to menu screen if Partial Save is not allowed + if(!PSAllow || PSTableName==''){ + let obj={props,'storeData':storeData1,'screenname':screenname1,'ShowCatWise':true,'MenuItem':menu1,'BgNav':BgNav1,'BgNavData':BgNavData1,'isAdhocScreen':isAdhoc,'isBeatPlan':isBeat,'isNonMerchan':isNonMerchan1,'isNonProg':isNonProgam,'isStoreSearch':isStoreSearch} + goToMenuPage(obj); + } + + let orderBy='',idCol='',nameCol=''; + // if(PSTableName.toLowerCase()==HierarchyTbls.Master_SubCategory.toLowerCase()){ + // idCol='SubCategoryId',nameCol='SubCategoryName'; + // orderBy=' p.SubCategorySequence '; + // } + // else if(PSTableName.toLowerCase()==HierarchyTbls.Master_Brand.toLowerCase()){ + // idCol='BrandId',nameCol='BrandName'; + // orderBy=' p.BrandSequence '; + // } + // else if(PSTableName.toLowerCase()==HierarchyTbls.Master_Product.toLowerCase()){ + // idCol='ProductId',nameCol='ProductName'; + // orderBy=' p.ProductSequence '; + // } + // else { + // idCol='CategoryId',nameCol='CategoryName'; + // orderBy=' p.CategorySequence '; + // } + + nameCol='ProgramName' + idCol='ProgramId'; + + + let q=await getFilterQuery(storeData1,menu1,idCol,nameCol,orderBy,AllKPIFields); + + + + await db.transaction(async function (txn) { + + // let q2=` SELECT CATEGORY_ID as CategoryId,CATEGORY as CategoryName FROM ${AppTables.STOCKWITHCAT_HDR_DATA} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' `; + await txn.executeSql(q,[],async function (txn2, txnres2) { + console.log('filters len:',txnres2.rows.length) + if(txnres2.rows.length>0){ + let arr=[]; + for(var i=0;ii.KPIFieldName=='SpecificMapping') + let isSpecificMapKPIObj=isSpecificMapIndex>=0?AllKPIFields[isSpecificMapIndex]:{}; + let isSpecificMappingEnable=isSpecificMapIndex>=0?isSpecificMapKPIObj['KPIFieldEnable']:false; + + let sosCheckAssortmentI=AllKPIFields.findIndex(i=>i.KPIFieldName=='SOSCheckAssortment') + let sosCheckAssortmentObj=sosCheckAssortmentI>=0?AllKPIFields[sosCheckAssortmentI]:{}; + let sosCheckAssortment=sosCheckAssortmentI>=0?sosCheckAssortmentObj['KPIFieldEnable']:false; + + let COMPStockAllow_Index=AllKPIFields.findIndex(i=>i.KPIFieldName=='COMPStockAllow' && i.ScreenName==ScreenName); + let COMPStockAllow_Obj=COMPStockAllow_Index>=0?AllKPIFields[COMPStockAllow_Index]:{}; + let isCOMPStockAllow=COMPStockAllow_Index>=0?COMPStockAllow_Obj['KPIFieldEnable']:false; + + + let ProgramStockAllow_Index=AllKPIFields.findIndex(i=>i.KPIFieldName=='PartialSaveAllow' && i.ScreenName==ScreenName); + let ProgramStockAllow_Obj=ProgramStockAllow_Index>=0?AllKPIFields[ProgramStockAllow_Index]:{}; + let isProgramStockAllow=ProgramStockAllow_Index>=0?ProgramStockAllow_Obj['KPIFieldDisplayName']:""; + + let d1=new Date(); + let d2=moment(d1).format('MM/DD/YYYY'); + + let q=``,join='',join2='',join3='',WindData={},joinKey=''; + switch(ScreenName){ + case 'STOCK': + join=` INNER join Mapping_ProductAssortmentStorewise mp on p.ProductId=mp.ProductId `; + q=`SELECT DISTINCT p.${idCol},p.${nameCol} from Product_Master p ${join} where mp.StoreId='${StoreId}' ${(isCOMPStockAllow==true?'':` and (p.IsCompetitor='0' or p.IsCompetitor= 0) `)}`; + q+=` order by ${orderBy}`; + return q; + case 'PROMOTIONONEAPP': + WindData=await getWindowFilterFields(storeData1,'Master_PromotionDefinition','Mapping_StorePromotion','PromoDefinitionId','PromoDefinitionId','PromoTable'); + WindData=WindData!=null?WindData:{}; + joinKey=WindData['filterIdsCol']!=null?WindData['filterIdsCol']:''; + console.log('joinKey:',joinKey); + join=` INNER join Master_PromotionDefinition d on p.${joinKey}=d.PromoValue `; + join2=` INNER join Mapping_StorePromotion md on d.PromoDefinitionId=md.PromoDefinitionId `; + q=`select DISTINCT p.${idCol},p.${nameCol} from Product_Master p ${join} ${join2} where md.StoreId='${StoreId}' `; + q+=` order by ${orderBy}`; + console.log("PROMOTIONONEAPP:",q); + return q; + + case 'SOSONEAPP': + WindData=await getWindowFilterFields(storeData1,'Master_ShareOfShelfDefinition','Mapping_StoreShareOfShelf','SOSDefinitionId','SOSDefinitionId','SOSHeaderTable'); + WindData=WindData!=null?WindData:{}; + joinKey=WindData['filterIdsCol']!=null?WindData['filterIdsCol']:''; + join=` INNER join Master_ShareOfShelfDefinition d on p.${joinKey}=d.SOSHeaderValue `; + join2=` INNER join Mapping_StoreShareOfShelf md on d.SOSDefinitionId=md.SOSDefinitionId `; + if(sosCheckAssortment){ + join3=` INNER JOIN (select * from Mapping_ProductAssortmentStorewise mp + where mp.StoreId='${StoreId}') mp1 + on p.ProductId=mp1.ProductId `; + } + q=`select DISTINCT p.${idCol},p.${nameCol} from Product_Master p ${join} ${join2} ${join3} where md.StoreId='${StoreId}' `; + q+=` order by ${orderBy}`; + console.log("SOSONEAPP:",sosCheckAssortment,q); + return q; + + case 'PAIDVISIONEAPP': + let tbname2=isSpecificMappingEnable?'Mapping_StoreVisibilitySpecific':'Mapping_StoreVisibility'; + + WindData=await getWindowFilterFields(storeData1,'Master_VisibilityDefinition',tbname2,'VisibilityDefinitionId','VisibilityDefinitionId','VisibilityTable'); + WindData=WindData!=null?WindData:{}; + joinKey=WindData['filterIdsCol']!=null?WindData['filterIdsCol']:''; + join=` INNER join Master_VisibilityDefinition d on p.${joinKey}=d.VisibilityValue and d.MenuId='${MenuId}' `; + join2=` INNER join ${tbname2} md on d.VisibilityDefinitionId=md.VisibilityDefinitionId `; + + q=`select DISTINCT p.${idCol},p.${nameCol} from Product_Master p ${join} ${join2} where md.StoreId='${StoreId}' `; + q+=` order by ${orderBy}`; + console.log("PAIDVISIONEAPP:",q); + return q; + case 'PROGRAMONEAPP': + // let tbname3="Mapping_StoreProgram"; + + // WindData=await getWindowFilterFields(storeData1,'Master_ProgramDefinition',tbname3,'ProgramDefinitionId','ProgramDefinitionId',"ProgramTable"); + // WindData=WindData!=null?WindData:{}; + // joinKey=WindData['filterIdsCol']!=null?WindData['filterIdsCol']:''; + // join=` INNER join Master_VisibilityDefinition d on p.${joinKey}=d.ProgramValue and d.MenuId='${MenuId}' `; + // join2=` INNER join ${tbname3} md on d.VisibilityDefinitionId=md.VisibilityDefinitionId `; + + // q=`select DISTINCT p.${idCol},p.${nameCol} from Product_Master p ${join} ${join2} where md.StoreId='${StoreId}' `; + // q+=` order by ${orderBy}`; + + q=`SELECT DISTINCT w.ProgramId, w.ProgramName FROM Master_ProgramDefinition w INNER JOIN Mapping_StoreProgram MW on W.ProgramDefinitionId=MW.ProgramDefinitionId WHERE StoreId='${StoreId}' and w.MenuId='${MenuId}' ` + console.log("PROGRAMONEAPP:",q); + return q; + + default: return ''; + } + } + + async function getCatDoneQuery(storeData1,menu1,cat,idCol,nameCol,AllKPIFields=[]){ + let {StoreId,ChainId,StateId,StoreTypeId}=storeData1; + let {ScreenName,MenuId}=menu1; + + let IdVal=cat[idCol]; + let nameVal=cat[nameCol]; + + console.log("Cat---",cat,IdVal) + let PJP_Table=isBeatPlan==true?'JourneyPlan_RouteWise':(isAdhocScreen==true?'Adhoc_JourneyPlan':isNonMerchan==true?'NonMerchandising_JourneyPlan':isNonProg==true?'NonProgram_JourneyPlan': isStoreSearch==true?'StoreSearch_JourneyPlan':'Mapping_JourneyPlan'); + let d1=new Date(); + let d2=moment(d1).format('MM/DD/YYYY'); + + let isSpecificMapIndex=AllKPIFields.findIndex(i=>i.KPIFieldName=='SpecificMapping') + let isSpecificMapKPIObj=isSpecificMapIndex>=0?AllKPIFields[isSpecificMapIndex]:{}; + let isSpecificMappingEnable=isSpecificMapIndex>=0?isSpecificMapKPIObj['KPIFieldEnable']:false; + + + + let q=``,FilterIds=[],FilterIdsJoin=''; + switch(ScreenName){ + case 'STOCK': + q=` SELECT * FROM ${AppTables.STOCK2HDR_DATA} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' and SUB_CATEGORY_ID='${IdVal}' `; + return q; + case 'PROMOTIONONEAPP': + FilterIds=await getWindowFilterIds(idCol,IdVal,storeData1,'Master_PromotionDefinition','Mapping_StorePromotion','PromoDefinitionId','PromoDefinitionId','PromoTable') + FilterIds=FilterIds!=null?FilterIds:[]; + FilterIdsJoin=FilterIds.length>0?FilterIds.join(','):''; + q=` SELECT * FROM ${AppTables.PROMO_HDR_DATA} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' and PROMO_VALUE in (${FilterIdsJoin}) `; + return q; + case 'SOSONEAPP': + FilterIds=await getWindowFilterIds(idCol,IdVal,storeData1,'Master_ShareOfShelfDefinition','Mapping_StoreShareOfShelf','SOSDefinitionId','SOSDefinitionId','SOSHeaderTable') + FilterIds=FilterIds!=null?FilterIds:[]; + FilterIdsJoin=FilterIds.length>0?FilterIds.join(','):''; + q=` SELECT * FROM ${AppTables.SOS_HDR_DATA} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' and SOS_HDR_VALUE in (${FilterIdsJoin}) `; + return q; + case 'PAIDVISIONEAPP': + let tbname2=isSpecificMappingEnable?'Mapping_StoreVisibilitySpecific':'Mapping_StoreVisibility'; + + FilterIds=await getWindowFilterIds(idCol,IdVal,storeData1,'Master_VisibilityDefinition',tbname2,'VisibilityDefinitionId','VisibilityDefinitionId','VisibilityTable',true,menu1) + FilterIds=FilterIds!=null?FilterIds:[]; + FilterIdsJoin=FilterIds.length>0?FilterIds.join(','):''; + q=` SELECT * FROM ${AppTables.PAIDVIS_HDR_DATA} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' and PVIS_VALUE in (${FilterIdsJoin}) `; + return q; + case 'PROGRAMONEAPP': + // let tbname3="Mapping_StoreProgram"; + + // WindData=await getWindowFilterFields(storeData1,'Master_ProgramDefinition',tbname3,'ProgramDefinitionId','ProgramDefinitionId',"ProgramTable"); + // WindData=WindData!=null?WindData:{}; + // joinKey=WindData['filterIdsCol']!=null?WindData['filterIdsCol']:''; + // join=` INNER join Master_VisibilityDefinition d on p.${joinKey}=d.ProgramValue and d.MenuId='${MenuId}' `; + // join2=` INNER join ${tbname3} md on d.VisibilityDefinitionId=md.VisibilityDefinitionId `; + + // q=`select DISTINCT p.${idCol},p.${nameCol} from Product_Master p ${join} ${join2} where md.StoreId='${StoreId}' `; + // q+=` order by ${orderBy}`; + + let tbname3="Mapping_StoreProgram"; + + FilterIds=await getWindowFilterIds(idCol,IdVal,storeData1,'Master_ProgramDefinition',tbname3,'ProgramDefinitionId','ProgramDefinitionId','ProgramTable',true,menu1) + FilterIds=FilterIds!=null?FilterIds:[]; + FilterIdsJoin=FilterIds.length>0?FilterIds.join(','):''; + q=` SELECT * FROM ${AppTables.PROGRAM_HDR_DATA} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' and PROG_ID in (${FilterIdsJoin}) `; + // q=`SELECT DISTINCT w.ProgramId, w.ProgramName FROM Master_ProgramDefinition w INNER JOIN Mapping_StoreProgram MW on W.ProgramDefinitionId=MW.ProgramDefinitionId WHERE StoreId='${StoreId}' ` + console.log("PROGRAMONEAPP---:",q); + return q; + + default: return ''; + } + } + + + async function getWindowFilterIds(idCol,IdVal,storeData1,TableName1,TableName2,JoinCol1,JoinCol2,compareKey,AddMenuCase=false,menu1={}){ + + try{ + let AllIds=[]; + let {StoreId}=storeData1 + let {ScreenName,MenuId}=menu1; + + return new Promise((resolve,reject)=>{ + + db.transaction(async function (txn) { + let join=` inner join ${TableName2} s on w.${JoinCol1}=s.${JoinCol2} `; + let q=`Select w.* from ${TableName1} w ${join} where s.StoreId='${StoreId}' and w.ProgramId='${IdVal}' `; + if(AddMenuCase){ + q+=` and w.MenuId='${MenuId}' `; + } + + console.log("done------",q) + await txn.executeSql(q,[],async function (txn2, txnres) { + if(txnres.rows.length>0){ + for(var i=0;i{ + return val + }).catch((err)=>{ + console.log(err); + return AllIds; + }); + } + catch(err){ + console.log("err",err); + } + } + + async function getWindowFilterFields(storeData1,TableName1,TableName2,JoinCol1,JoinCol2,compareKey){ + + try{ + let AllIds={}; + let {StoreId}=storeData1 + return new Promise((resolve,reject)=>{ + + db.transaction(async function (txn) { + let join=` inner join ${TableName2} s on w.${JoinCol1}=s.${JoinCol2} `; + let q=`Select w.* from ${TableName1} w ${join} where s.StoreId='${StoreId}' `; + console.log("filter---------",q) + await txn.executeSql(q,[],async function (txn2, txnres) { + if(txnres.rows.length>0){ + let Wind_data =txnres.rows.item(0); + let compareVal=Wind_data[compareKey]!=null?Wind_data[compareKey]:''; + console.log("compareVal1:",Wind_data,HierarchyTbls,compareVal); + let filterIdsCol=''; + if(compareVal.toLowerCase()==HierarchyTbls.Master_Category.toLowerCase()){ + filterIdsCol='CategoryId'; + } + else if(compareVal.toLowerCase()==HierarchyTbls.Master_Brand.toLowerCase()){ + filterIdsCol='BrandId'; + } + else if(compareVal.toLowerCase()==HierarchyTbls.Master_Product.toLowerCase()){ + filterIdsCol='ProductId'; + } + else{ + filterIdsCol='SubCategoryId'; + } + Wind_data['filterIdsCol']=filterIdsCol; + + resolve(Wind_data) + } + else{ + resolve(AllIds) + } + },function (txnE,txnerr) { console.log(txnerr); resolve(AllIds) },); + }); + }).then((val)=>{ + return val + }).catch((err)=>{ + console.log(err); + return AllIds; + }); + } + catch(err){ + console.log("err",err); + } + } + + + async function isCatDone(storeData1,menu1,cat,idCol,nameCol,AllKPIFields=[]){ + // let {StoreId,ChainId,StateId,StoreTypeId}=storeData1; + // let {MenuId, MenuName,ScreenName}=menu1; + let q=await getCatDoneQuery(storeData1,menu1,cat,idCol,nameCol,AllKPIFields); + return await new Promise((resolve,reject)=>{ + db.transaction(async function (txn) { + await txn.executeSql(q,[],async function (txn2, txnres2) { + if(txnres2.rows.length>0){ + resolve(true); + }else{ + resolve(false); + } + },function (txnE,txnerr) { console.log(txnerr);resolve(false); },); + + }); + }).catch((err)=>{ + console.log(err); + return false; + }) + } + + function gotoCatProducts(cat={}){ + let obj={props,'screenname':ScreenName,'storeData':storeData,'MenuItem':currentMenu,'ShowCatWise':false,'CatData':cat,'BgNav':BgNav,'BgNavData':BgNavData,'isAdhocScreen':isAdhocScreen,'isBeatPlan':isBeatPlan,'isNonMerchan':isNonMerchan,'isNonProg':isNonProg,'isStoreSearch':isStoreSearch} + goToMenuPage(obj); + } + + + function _renderFilterCategories(){ + return ( + + { + const cat=item; + let isDone=item.isDone; + return( + + + {gotoCatProducts(cat)}}> + + {item[ColName]} + + {(item.isDone!=null && item.isDone==true) && } + + + + ); + }} + /> + + ) + } + + + + + + return ( + + {processing && } + + + + + + + + + + + {storeData.StoreName} + + {storeData.StoreType} + + + + + + + {ST.StoreId+':'} + {storeData.StoreId} + + + {ST.StoreCode+':'} + {storeData.StoreCode} + + + + + + + + + {currentMenu.MenuName} + + {Object.keys(storeData).length>0 && + _renderFilterCategories() + } + + + + + ); +} + +export default connect(mapStateToProps, mapDispatchToProps)(ProgramList); \ No newline at end of file diff --git a/PerformicsSrc/src/screens/ProgramQuestions.js b/PerformicsSrc/src/screens/ProgramQuestions.js new file mode 100644 index 0000000..4ba8ba7 --- /dev/null +++ b/PerformicsSrc/src/screens/ProgramQuestions.js @@ -0,0 +1,2935 @@ +import React,{useState,useEffect,useRef} from 'react'; +import Container from '../components/container'; +import { useRoute } from '@react-navigation/native'; +import { customStyles,GetPageTheme } from "../styles/Global"; +import { AppState, Image,TextInput,View,Text,ScrollView,TouchableOpacity,Platform,PermissionsAndroid,FlatList, Alert, Animated,KeyboardAvoidingView, Keyboard} from 'react-native'; +import { connect } from 'react-redux'; +import { mapStateToProps,mapDispatchToProps } from '../reducers/contextProvider'; +import {notify} from '../components/notify'; +import moment from 'moment'; +import {Add_metadataToImage, getKPIFields, resizeImage,restore_ImageWithMetaData,validateNumber} from '../controller/functions'; +import {get_item,set_item,clear_item} from '../components/localStorage'; +import {db, ImageFolderPath} from '../constants/constants'; +import CustomHeader from '../components/customHeader'; +import {AntDesign, Entypo, Fontisto, Ionicons, MaterialCommunityIcons} from '../components/icons'; +import CustomLoader from '../components/CustomLoader'; +import LinearGradient from 'react-native-linear-gradient'; +import { AppTables } from '../constants/tableConstants'; +import { SvgXml } from 'react-native-svg'; +import * as RNFS from 'react-native-fs'; +import GradientButton from '../components/gradientButton'; +import CustomModal from '../components/CustomModal'; +import { ConfirmSaveAlert } from '../components/alert'; +import ModalSelector from 'react-native-modal-selector' +import { CustomPicker2 } from '../components/CustomPicker'; +import CustomCamera from '../components/Camera'; +import ImageViewer from 'react-native-image-zoom-viewer'; +import DateTimePicker from '@react-native-community/datetimepicker'; +import CheckBox from '@react-native-community/checkbox'; + +import CameraImg from '../assets/performics/camera_front_image.svg' +import MultiSelect from 'react-native-multiple-select'; +import CameraImg3 from '../assets/performics/camera_tick.svg'; +import CameraImg2 from '../assets/performics/camera_icon.svg'; +import CameraImg5 from '../assets/image/astrickcamera.svg'; + +function ProgramQuestionsOneApp(props) { + const route = useRoute(); + const ST=props.StaticText || {}; + + // get all theme styles acc to current theme set + const PageTheme=GetPageTheme(props.DarkMode,route.name); + const customStyle=customStyles(props.DarkMode,route.name); + const animatedChoice=useRef(new Animated.Value(0)).current; + + const [processing, setProcessing] = useState(true); + const [loaderTitle, setLoaderTitle] = useState(); + const [isAdhocScreen, setIsAdhocScreen] = useState(false); + const [storeData, setStoreData] = useState({}); + const [StoreCameraAllow, setStoreCameraAllow] = useState(true); + const [currentMenu, setCurrentMenu] = useState({}); + const [rerenderdata, setrerenderdata]= useState(0); + const [rerenderdata2, setrerenderdata2]= useState(0); + const [rerenderdata3, setrerenderdata3]= useState(0); + const [rerenderdata4, setrerenderdata4]= useState(0); + + const [hasUnsavedChanges,setHasUnsavedChanges] = useState(false); + + const [WindowData, setWindowData] = useState([]); + const [reasons_list, setReasons_list] = useState([]); + const [SqrFtPosReasons, setSqrFtPosReasons] = useState([]); + const [SqrFtNegReasons, setSqrFtNegReasons] = useState([]); + const [Windows, setWindows] = useState([]); + const [show_zoomImage, setShow_zoomImage] = useState(false); + const [refImageIndex, setrefImageIndex] = useState(0); + const [zoomImageIndex, setzoomImageIndex] = useState(0); + const [showAlert, setShowAlert] = useState(false); + const [zoomImageUrl, setZoomImageUrl] = useState([]); + const [showCamera, setShowCamera] = useState(false); + const [showQRCamera, setShowQRCamera] = useState(false); + const [getImageProps,setGetImageProps]= useState({}); + const zoomView=useRef(null); + const [showRating, setShowRating] = useState(false); + const [RatingQtn, setRatingQtn] = useState({}); + const [RatingWindow, setRatingWindow] = useState({}); + const [RatingOrder, setRatingOrder] = useState([]); + + const [Products, setProducts] = useState([]); + const [DisplayList, setDisplayList] = useState([]); + const [toRemoveId,setToRemoveId]= useState(''); + const [toRemoveItem,setToRemoveItem]= useState({}); + const [showRemoveConfirm_M,setshowRemoveConfirm_M]= useState(false); + const [showRAllC_M,setShowRAllC_M]= useState(false); + const [searchedItem, setSearchedItem]= useState(''); + const [globalWindows, setGlobalWindows] = useState([]); + const [KPIFields, setKPIFields] = useState([]); + const [showSwitchCamera,setShowSwitchCamera]= useState(false); + const [GridValue, setGridValue] = useState(false); + const [QREnable, setQREnable] = useState(false); + + + const [DataCleanModal, setDataCleanModal] = useState(false); + const [DataCleanAnim, setDataCleanAnim] = useState(""); + const [DataCleanItem, setDataCleanItem] = useState({}); + const [isPresentClean, setIsPresentClean] = useState(0); + + const [InputChange, setInputChange] = useState([]); + + const [SelectedImg, setSelectedImg] = useState(''); + const [showModal, setShowModal] = useState(false); + const [reCapImgModalObj, setReCapImgModalObj] = useState({}); + const [showImageSaveOp, setShowImageSaveOp] = useState(true); + const [ImgMadCount, setImgMadCount] = useState({img1:0,img2:0}); + const [AppStatus, setAppStatus] = useState(AppState.currentState); + const [QRqtnData, setQRqtnData] = useState({}); + //for Partial save + const [FilteredPromoValues,setFilteredPromoValues]= useState(''); + const [ShowCatWise,setShowCatWise]= useState(false); + const [CatData,setCatData]= useState(false); + const [ColId, setColId] = useState(""); + const [ColName, setColName] = useState(""); + + const hasUnsavedChangesRef = React.useRef(hasUnsavedChanges); + const WindowDataRef=React.useRef(WindowData); + const StoreIdRef=React.useRef(null); + const ScreenNameRef=React.useRef({}); + const PSGroupData=React.useRef(''); // Grouping data (Category/ SubCategory/ Brand ) for BG save fuunctionality with Partial Save Scenario + const BGPSAllow=React.useRef(false); + + + // error field states + const [errorfield, setErrorField] = useState({}); + const [error, setError] = useState(false); + + const inputRefs = useRef({}); + + const d1=new Date(); + const d2=moment(d1).format('MM/DD/YYYY'); + + + useEffect(() => { + setLoaderTitle(ST.Loading+'...') + let params=props.route.params? props.route.params:{}; + let storeData1=params.storeData || {}; + let menu1=params.menu || {}; + let ShowCatWise1=params.ShowCatWise!=null?params.ShowCatWise:false; + let CatData1=params.CatData!=null?params.CatData:{}; + let isAdhoc=params.isAdhoc || false; + + + setIsAdhocScreen(isAdhoc); + setShowCatWise(ShowCatWise1); + setCatData(CatData1); + setStoreData(storeData1); + setCurrentMenu(menu1); + + let cameraAllow=storeData1.CameraAllow=='true' || storeData1.CameraAllow==1?true:false; + setStoreCameraAllow(cameraAllow); + + StoreIdRef.current=storeData1.StoreId + ScreenNameRef.current={BgscreenName:menu1.ScreenName,BgMenuId:menu1.MenuId } + + + getData(storeData1,menu1,CatData1,ShowCatWise1); + + const AppStateSubscription = AppState.addEventListener('change', (pro)=>{ _handleAppStateChange(pro)}); + const unsubscribe=props.navigation.addListener('beforeRemove', onBeforeRemove); + + return function cleanup() { + AppStateSubscription.remove(); + // AppState.removeEventListener('change', (pro)=>{ _handleAppStateChange(WindowData,pro)}); + return unsubscribe; + }; + }, []); + + + + const _handleAppStateChange = async (nextAppState) => { + + if(nextAppState =='background' && hasUnsavedChangesRef.current==true){ + + let newData = { + storeBGData:WindowDataRef.current, + menuName:ScreenNameRef.current && ScreenNameRef.current.BgscreenName, + StoreId1:StoreIdRef.current, + BgMenuID: ScreenNameRef.current && ScreenNameRef.current.BgMenuId, + visiteDate:d2, + BGPSAllow:BGPSAllow.current, + PSGroupData:PSGroupData.current, + } + let WindowsStr= JSON.stringify(newData) + + await set_item('storeData',WindowsStr); + } + } + + + + useEffect(() => { + const unsubscribe=props.navigation.addListener('beforeRemove', onBeforeRemove); + return unsubscribe; + }, [hasUnsavedChanges]); + + + useEffect(() => { + const unsubscribe=props.navigation.addListener('beforeRemove', onBeforeRemove); + return unsubscribe; + }, [showCamera]); + + useEffect(() => { + const unsubscribe=props.navigation.addListener('beforeRemove', onBeforeRemove); + return unsubscribe; + }, [showQRCamera]); + + useEffect(() => { + const unsubscribe=props.navigation.addListener('beforeRemove', onBeforeRemove); + return unsubscribe; + }, [show_zoomImage]); + + function onBeforeRemove(e){ + + if(showCamera==true || showQRCamera==true ){ + e.preventDefault(); + setShowCamera(false); + setShowQRCamera(false) + } + else if(show_zoomImage==true){ + e.preventDefault(); + setShow_zoomImage(false); + } + else{ + if (hasUnsavedChanges==true) { + e.preventDefault(); // Prevent default behavior of leaving the screen + onRemoveScreen(e); + } + else{ + return; + } + } + } + + function BgUnsavedChanges(val){ + hasUnsavedChangesRef.current=val + setHasUnsavedChanges(val); + } + + function BgWindowData(val){ + WindowDataRef.current=val + setWindowData(val); + } + + function onRemoveScreen(e){ + Alert.alert( + "", + ST.Doyoureallywanttoexitthescreen, + [ + { + text: ST.Cancel, + onPress: () => {}, + style: "cancel" + }, + { text: ST.OK, onPress: async () => { + // setHasUnsavedChanges(false); + BgUnsavedChanges(false) + await clear_item('storeData') + props.navigation.dispatch(e.data.action);} } + ] + ); + } + + + function _OpenCaptureImage_Modal(img){ + + const isImageCap=(img!='' || img!=null)?true:false; + let {window,splitItem,splitItemIndex,cameraType}=reCapImgModalObj + let camera2Label=(window && window.PromoImage2Lable) || ''; + return ( + + { + isImageCap && + + + + + + {openCamera(window,splitItem,splitItemIndex,cameraType)}}> + + + + {!showImageSaveOp && + {cancelImage(false)}}> + + {ST.Close} + + } + + } + + ) + } + + + async function getData(storeData1,menu1,CatData1={},ShowCatWise1=false){ + try { + let {StoreId,ChainId,StateId,StoreTypeId}=storeData1; + + + + let AllKPIFields=await getKPIFields(menu1); + setKPIFields(AllKPIFields); + + // set switch camera flag as defined in mapping menu flag (if exists) + let SwitchingCameraI=AllKPIFields.findIndex(i=>i.KPIFieldName=='SwitchingCamera'); + let SwitchingCameraObj=SwitchingCameraI>=0?AllKPIFields[SwitchingCameraI]:{}; + let SwitchingCamera=SwitchingCameraI>=0?SwitchingCameraObj['KPIFieldEnable']:false; + setShowSwitchCamera(SwitchingCamera); + + let isSpecificMapIndex=AllKPIFields.findIndex(i=>i.KPIFieldName=='SpecificMapping') + let isSpecificMapKPIObj=isSpecificMapIndex>=0?AllKPIFields[isSpecificMapIndex]:{}; + let isSpecificMappingEnable=isSpecificMapIndex>=0?isSpecificMapKPIObj['KPIFieldEnable']:false; + + + let {PSAllow,PSTableName}=menu1; + PSTableName=PSTableName!=null?PSTableName:''; + PSAllow=PSAllow!=null?PSAllow:false; + + let idCol='ProgramId'; + // ,nameCol='ProgramName'; + + + let IdVal=CatData1[idCol]; + // let NameVal=CatData1[nameCol]; + setFilteredPromoValues(IdVal); + let inputChangeFlag=[],storeBGData1=[],bgStoreJson={},isBgDataExists=false; + + //storeBGData check + let windData = await get_item('storeData') + if(windData!=null && windData!=''){ + let StoreJson = JSON.parse(windData) + let { storeBGData,menuName,StoreId1,BgMenuID,visiteDate }= StoreJson + if(storeBGData.length>0 && menuName == menu1.ScreenName && StoreId1== StoreId && menu1.MenuId==BgMenuID && visiteDate==d2){ + isBgDataExists=true; + storeBGData1=storeBGData; + bgStoreJson=StoreJson + WindowDataRef.current=storeBGData + setWindowData(storeBGData); + BgUnsavedChanges(true) + } + } + + // call this after storeBGData check + if(PSAllow){ + // if Partial save is allowed then add the currently active category or group in BG var + BGPSAllow.current=true; + PSGroupData.current=CatData1; + } + + await db.transaction(async function (txn) { + + let q3=`Select ProgramReasonId as ReasonId,ProgramReason as Reason,IsRemarkTaken From Master_ProgramReason WHERE MenuId='${menu1.MenuId}' order by ProgramReason `; + await txn.executeSql(q3,[],async function (txn2, txnres2) { + if(txnres2.rows.length>0){ + let arr=[]; + for(var i=0;i0){ + let Posarr=[],Negarr=[]; + for(var i=0;i0){ + let arr=[];let images=[],allWindowsData=[]; + + + for(var i=0;ii.ProgramId==data.ProgramId && i.ProgramDefinitionId==data.ProgramDefinitionId) + let storeBgObj=storeBgIndex>=0?storeBGData1[storeBgIndex]:{}; + isPresent=storeBgObj.isPresent=='1' || storeBgObj.isPresent==1 ?1:0; + } + + let animatedChoice=new Animated.Value(isPresent); + data.animatedChoice=animatedChoice; + + data.NoOfSplit=parseInt(data.NoOfSplit); + let NoOfSplit=data.NoOfSplit; + + let isStockReq=data.ProgramElementStockRequired=='true' || data.ProgramElementStockRequired==1?1:0; + + let imgObj={imgIndex:(i+1),url: data.ProgramRefImage, props: {}} + images.push(imgObj); + + let WindowSplits = await getWindowSplits(NoOfSplit,data,storeData1,menu1); + let WQr = await getWindowQuestions(data,storeData1,menu1); + let WindowQuestions = WQr['WindowQuestions'] || []; + let WindowQA= WQr['WindowQA'] || {}; + let WSd= isStockReq==true ? await getWindowStockData(data,storeData1,isPresent,AllKPIFields) : {'WStocks':[],'WStocksData':[]}; + let WStocks=WSd['WStocks'] || []; + let WStocksData=WSd['WStocksData'] || []; + let isAllChecked=WSd['isAllChecked']!=null?WSd['isAllChecked']:0; + + let isNAImageAvl=data.ProgramNotExistCamera=='true' || data.ProgramNotExistCamera==1?1:0; + let NAImage1=isNAImageAvl==1 && data.PROGNAImage!=null?data.PROGNAImage:''; + let NAImage1Path=NAImage1!=''?'file://'+ImageFolderPath+menu1.ScreenName+"/"+NAImage1:''; + let showRsnRemark=((data.SHOW_RSN_REMARK=='1' || data.SHOW_RSN_REMARK==1 )?true:false); + + let PrevDisplayArea=(data.PrevDisplayArea!=null && data.PrevDisplayArea!='' && data.PrevDisplayArea!='undefined')?data.PrevDisplayArea:''; + data.PrevDisplayArea=PrevDisplayArea; // reassign values + let DISPLAY_AREA=data.DISPLAY_AREA!=null && data.DISPLAY_AREA!='undefined'?data.DISPLAY_AREA:''; + let POS_DA_REASON_ID=data.POS_DA_REASON_ID!=null && data.POS_DA_REASON_ID!='undefined'?data.POS_DA_REASON_ID:''; + let POS_DA_REASON=data.POS_DA_REASON!=null && data.POS_DA_REASON!='undefined'?data.POS_DA_REASON:''; + let NEG_DA_REASON_ID=data.NEG_DA_REASON_ID!=null && data.NEG_DA_REASON_ID!='undefined'?data.NEG_DA_REASON_ID:''; + let NEG_DA_REASON=data.NEG_DA_REASON!=null && data.NEG_DA_REASON!='undefined'?data.NEG_DA_REASON:''; + let showPosDAReason=PrevDisplayArea!='' && DISPLAY_AREA!=''?(parseFloat(data.PrevDisplayArea)parseFloat(DISPLAY_AREA)):false; + + let windowDataObj={'ProgramId':data.ProgramId,'ProgramDefinitionId':data.ProgramDefinitionId,'WindowSplits':WindowSplits,'WindowQA':WindowQA,'WStocksData':WStocksData,'NAImage1':NAImage1,'NAImage1Path':NAImage1Path,'ReasonId':data.ReasonId,'Reason':data.Reason,'isPresent':isPresent,'isAllSKUChecked':isAllChecked,'remark':(data.Remark!=null?data.Remark:''),'showOtherText':showRsnRemark,'RemarkText':(data.REASON_REMARK || '')}; + windowDataObj["displayAreaInSqrFeet"]=(DISPLAY_AREA!=''?DISPLAY_AREA:(PrevDisplayArea!=''?PrevDisplayArea:'')); + windowDataObj["PosDisplayAreaReasonId"]=POS_DA_REASON_ID; + windowDataObj["PosDisplayAreaReason"]=POS_DA_REASON; + windowDataObj["NegDisplayAreaReasonId"]=NEG_DA_REASON_ID; + windowDataObj["NegDisplayAreaReason"]=NEG_DA_REASON; + windowDataObj["showPosDAReason"]=showPosDAReason; + windowDataObj["showNegDAReason"]=showNegDAReason; + + data['WindowQuestions']=WindowQuestions; + data['WindowStocks']=WStocks; + let changesFlag = {ProgramId:data.ProgramId, ProgramDefinitionId: data.ProgramDefinitionId, Flag:(data.PROGHeaderId!=null?true:false)} + inputChangeFlag.push(changesFlag) + arr.push(data); + + allWindowsData.push(windowDataObj); + + if(i==txnres2.rows.length-1){ + if(!isBgDataExists){ + BgWindowData(allWindowsData); + } + setInputChange(inputChangeFlag) + setWindows(arr); + setGlobalWindows(arr); + setZoomImageUrl(images); + setProcessing(false); + } + } + } + else{ + setProcessing(false); + notify('No data found!') + } + + },function (txnE,txnerr) { console.log(txnerr);setProcessing(false); },); + + }); + } catch (err) { + console.log(err); + } + } + + + async function getWindowSplits(NoOfSplit,window,storeData1,menu1){ + let WindowSplits_def= []; + for(var s=0;s{ + + db.transaction(async function (txn) { + + let q=`select * from ${AppTables.PROGRAM_IMAGES} where PROG_HEADER_ID='${window.PROGHeaderId}' and STORE_ID='${storeData1.StoreId}' `; + + await txn.executeSql(q,[],async function (txn2, txnres2) { + if(txnres2.rows.length>0){ + let arr=[]; + for(var i=0;i{ + return val + }).catch((err)=>{ + console.log(err); + return WindowSplits_def; + }); + } + + async function getWindowQuestions(window,storeData1,menu1){ + let obj={'WindowQA':{},'WindowQuestions':[]} + return new Promise((resolve,reject)=>{ + + db.transaction(async function (txn) { + var q='',selectlist='',join='',join2=''; + // if(isInserted==true){ + // selectlist=` DISTINCT q.QUESTION_ID as ProgramQuestionId,q.QUESTION_CODE as ProgramQuestionCode,wq.ProgramQuestionName,wq.QuestionType,wq.PQShowCamera,wq.VQCameraMandatory,wq.VQLengthValidationRequired,wq.VQMinimumChar,wq.VQMaximumChar,wq.VQDecimalPoint,wq.VQDateRangeMin,wq.VQDateRangeMax,wq.VQVoiceLengthInMinutes,wq.VQDefaultQuestionEnable,q.ANSWER as Answer,q.ANSWER_ID as AnswerId,q.MULTI_OPTIONS_IDS as multi_op_ids,q.IMAGE_ALLOW1 as PAShowCamera,q.IMAGE1 as Image1 `; + // join2=` inner join Mapping_ProgramQuestion mq on mq.ProgramQuestionId=wq.ProgramQuestionId `; + // join=` inner join Master_ProgramQuestion wq on wq.ProgramQuestionId=q.QUESTION_ID `; + // q=`select ${selectlist} from ${AppTables.PROGRAM_CHILD_DATA} q ${join} ${join2} where q.STORE_ID='${storeData1.StoreId}' and q.PROG_DEFINITION_ID='${window.ProgramDefinitionId}' and q.PROG_ID='${window.ProgramId}' order by wq.ProgramQuestionSequence `; + // } + // else{ + // selectlist=` DISTINCT wq.ProgramQuestionId,wq.ProgramQuestionCode,wq.ProgramQuestionName,wq.QuestionType,wq.PQShowCamera,wq.VQCameraMandatory,wq.VQLengthValidationRequired,wq.VQMinimumChar,wq.VQMaximumChar,wq.VQDecimalPoint,wq.VQDateRangeMin,wq.VQDateRangeMax,wq.VQVoiceLengthInMinutes,wq.VQDefaultQuestionEnable `; + // join=` inner join Mapping_ProgramQuestion mq on mq.ProgramQuestionId=wq.ProgramQuestionId `; + // q=`select ${selectlist} from Master_ProgramQuestion wq ${join} where mq.ProgramDefinitionId='${window.ProgramDefinitionId}' order by wq.ProgramQuestionSequence `; + // } + + + //get data from masters with saved data if any + // selectlist=` DISTINCT q.QUESTION_ID as ProgramQuestionId,q.QUESTION_CODE as ProgramQuestionCode,wq.ProgramQuestionName,wq.QuestionType,wq.PQShowCamera,wq.VQCameraMandatory,wq.VQLengthValidationRequired,wq.VQMinimumChar,wq.VQMaximumChar,wq.VQDecimalPoint,wq.VQDateRangeMin,wq.VQDateRangeMax,wq.VQVoiceLengthInMinutes,wq.VQDefaultQuestionEnable,q.ANSWER as Answer,q.ANSWER_ID as AnswerId,q.MULTI_OPTIONS_IDS as multi_op_ids,q.IMAGE_ALLOW1 as PAShowCamera,q.IMAGE1 as Image1 `; + selectlist=` DISTINCT wq.ProgramQuestionId,wq.ProgramQuestionSequence,wq.ProgramQuestionCode,wq.ProgramQuestionName,wq.QuestionType,wq.PQShowCamera,wq.PQCameraMandatory,wq.PQLengthValidationRequired,wq.PQMinimumChar,wq.PQMaximumChar,wq.PQDecimalPoint,wq.PQDateRangeMin,wq.PQDateRangeMax,wq.PQVoiceLengthInMinutes,wq.PQDefaultQuestionEnable,(CASE WHEN q.QUESTION_ID is not null THEN 1 ELSE 0 END) isInserted,q.IS_DISABLED,q.ANSWER as Answer,q.ANSWER_ID as AnswerId,q.MULTI_OPTIONS_IDS as multi_op_ids,q.IMAGE_ALLOW1 as PAShowCamera,q.IMAGE1 as Image1 `; + join2=` Left Outer Join ${AppTables.PROGRAM_CHILD_DATA} q on wq.ProgramQuestionId=q.QUESTION_ID and q.STORE_ID='${storeData1.StoreId}' and q.PROG_DEFINITION_ID='${window.ProgramDefinitionId}' and q.PROG_ID='${window.ProgramId}' and q.VISIT_DATE='${d2}'`; + join=` inner join Mapping_ProgramQuestion mq on mq.ProgramQuestionId=wq.ProgramQuestionId `; + q=`select ${selectlist} from Master_ProgramQuestion wq ${join} ${join2} where mq.ProgramDefinitionId='${window.ProgramDefinitionId}' order by wq.ProgramQuestionSequence `; + + // console.log("hdakshd----",q) + await txn.executeSql(q,[],async function (txn2, txnres2) { + if(txnres2.rows.length>0){ + let arr=[]; + let wqa_obj={}; + for(var i=0;i0){ + for(var k=0;k=0)){ + showImageTag=true; + } + } + } + } + + if(showImageTag && data.Answer!=null){ + let imgPath=(Platform.OS=='ios'?'file://':'')+ImageFolderPath+menu1.ScreenName+"/"+data.Image1; + wqa_obj[imgname_key]=data.Image1; + wqa_obj[img_key]=imgPath; + } + + + + if(data.QuestionType=='Date' && data.Answer!=null){ + let dayonly=moment().format('DD'); + let actual_date=data.Answer?data.Answer.split('/'):[]; + let month=actual_date[0],year=actual_date[1]; + let fulldate=month+'/'+dayonly+'/'+year; + wqa_obj[date_key]=fulldate; + + } + + arr.push(data); + if(i==txnres2.rows.length-1){ + obj['WindowQuestions']=arr; + obj['WindowQA']=wqa_obj; + resolve(obj) + } + } + } + else{ + resolve(obj) + } + },function (txnE,txnerr) { console.log(txnerr); resolve(obj) },); + }); + }).then((val)=>{ + return val + }).catch((err)=>{ + console.log(err); + return obj; + }); + } + + + async function getWindowAnswers(qtn){ + + return new Promise((resolve,reject)=>{ + + db.transaction(async function (txn) { + var q='',selectlist=''; + selectlist=` DISTINCT ProgramAnswerId as AnswerId,ProgramAnswerName as Answer,PAShowCamera,PACameraMandatory,PAQuestionEnable,PAQuestionDisable `; + q=`select ${selectlist} from Master_ProgramQuestion where ProgramQuestionId='${qtn.ProgramQuestionId}' order by PASequence `; + + await txn.executeSql(q,[],async function (txn2, txnres2) { + if(txnres2.rows.length>0){ + let arr=[]; + for(var i=0;i{ + return val + }).catch((err)=>{ + console.log(err); + return []; + }); + } + + async function getWindowStockData(window,storeData1,isInserted=false,AllKPIFields=[]){ + let obj={'WStocks':[],'WStocksData':[],'isAllChecked':0} + let {StateId,ChainId,StoreTypeId,StoreId}=storeData1; + + let isSpecificMapIndex=AllKPIFields.findIndex(i=>i.KPIFieldName=='SpecificMapping') + let isSpecificMapKPIObj=isSpecificMapIndex>=0?AllKPIFields[isSpecificMapIndex]:{}; + let isSpecificMappingEnable=isSpecificMapIndex>=0?isSpecificMapKPIObj['KPIFieldEnable']:false; + + return new Promise((resolve,reject)=>{ + db.transaction(async function (txn) { + let checkassrt=window.ProgramElementCheckAssortment=='true' || window.ProgramElementCheckAssortment==1?true:false; + let join='',join2='',selectlist2='',q2=''; + + //get data from masters with saved data if any + if(checkassrt){ + join2=` inner join Mapping_ProductAssortmentStorewise a on a.ProductId=s.ProgramStockValue and a.StoreId='${StoreId}' `; + } + + let join3=''; + // if(isSpecificMappingEnable==true){ + // join3=` Left Outer Join ${AppTables.PROGRAM_STOCK_DATA} ps on s.ProgramValue=ps.PROG_STOCK_VALUE and ps.PROG_DEFINITION_ID='${window.ProgramDefinitionId}' and ps.STORE_ID='${storeData1.StoreId}' `; + // selectlist2=` '0' as ProgramStockDefinitionId, s.ProgramDefinitionId,s.ProgramTable as ProgramStockTable,s.ProgramField as ProgramStockField,s.ProgramValue as ProgramStockValue,'' as ProgramStockMBQ,s.ChildName as ProductName, ps.STOCK as Stock,IFNULL(ps.IS_PROG_PRESENT,'') as isPROGPresent `; + // q2=`select ${selectlist2} from Mapping_StoreProgramSpecific s ${join2} ${join3} where s.ProgramDefinitionId='${window.ProgramDefinitionId}' and s.StoreId='${StoreId}' order by s.ChildName `; + + // }else{ + join3=` Left Outer Join ${AppTables.PROGRAM_STOCK_DATA} ps on s.ProgramStockDefinitionId=ps.PROG_STOCK_DEFINITION_ID and s.ProgramStockValue=ps.PROG_STOCK_VALUE and ps.PROG_DEFINITION_ID='${window.ProgramDefinitionId}' and ps.STORE_ID='${storeData1.StoreId}' `; + selectlist2=` s.ProgramStockDefinitionId, s.ProgramDefinitionId,s.ProgramStockTable,s.ProgramStockField,s.ProgramStockValue,s.ProgramStockMBQ,s.ProductName, ps.STOCK as Stock,IFNULL(ps.IS_PROG_PRESENT,'') as isPROGPresent `; + q2=`select ${selectlist2} from Master_ProgramStockDefinition s ${join2} ${join3} where s.ProgramDefinitionId='${window.ProgramDefinitionId}' order by s.ProductName `; + // } + + console.log("isSpecificMappingEnable---",isSpecificMappingEnable,q2) + await txn.executeSql(q2,[],async function (txn2, txnres2) { + console.log('Stock qty added:',txnres2.rows.length); + if(txnres2.rows.length>0){ + let arr=[],WStocksData=[]; + let isAllChecked=1; + for(var i=0;i0){ + // let arr=[],WStocksData=[]; + // let isAllChecked=1; + // for(var i=0;i{ + return val + }).catch((err)=>{ + console.log(err); + return obj; + }); + } + + async function focusToNext(WindowStocks,windowIndex,stockProd,index) + { + console.log('focusToNext is call'); + console.log('WindowStocks',index+1) + + if(index==WindowStocks.length-1){ + return; + } + + try{ + // inputRefs.current['input1_'+data.ProgramDefinitionId+"_"+data.ProgramStockDefinitionId]=''; + // use (index+1) instead of WindowStocks[index+1].ProgramStockDefinitionId as the condition does not work in case of isSpecificMappingEnable is true ( because all ProgramStockDefinitionId are 0) + console.log('next 1 call','input1_'+WindowStocks[index+1].ProgramDefinitionId+'_'+(index+1)) + let refIn2=inputRefs.current['input1_'+WindowStocks[index+1].ProgramDefinitionId+'_'+(index+1)]; + // let refIn2=inputRefs.current['input1_'+stockProd.WindowDefinitionId+'_'+stockProd.WindowStockDefinitionId]; + + if(refIn2!=null){ + refIn2.focus(); + } + } + catch(err){ + console.log(err); + } + } + + async function getImage(imgdata){ + let type=getImageProps.type || ''; + let window=getImageProps.window || {}; + let splitItem=getImageProps.splitItem || {}; + let splitItemIndex=getImageProps.splitItemIndex || 0; + let qtn=getImageProps.qtn || {}; + let cameraType=getImageProps.cameraType!=null?getImageProps.cameraType:'1'; + + if(typeof imgdata=='object' && imgdata.errorCode=='camera_unavailable'){ + notify(ST.Cameraunavailable); + } + else if(typeof imgdata =='object' && imgdata.uri!=null){ + const img=imgdata; + const imgurl=img.uri, imgWidth=img.width, imgHeight=img.ExtendedHeight; + + let isImgFromGallery=img.fromGallery!=null?img.fromGallery:false; + let picture_clickedd=isImgFromGallery==true?img.datetime:new Date(); + + let picture_clicked_time=moment(picture_clickedd).format('MM-DD-YYYY HH:mm:ss') + let picture_clicked_time_for_pic_name=moment(picture_clickedd).format('MMDDYYYY_HHmmss') + + console.log("time", picture_clicked_time); + console.log("time1", picture_clicked_time_for_pic_name); + let calculate_tym_date_for_filename = picture_clicked_time_for_pic_name; + let calculate_tym_date_over_img = picture_clicked_time; + + let filename=storeData.StoreId+'_'+window.ProgramDefinitionId+'_'+window.ProgramId+'_'+(props.UserId || '')+'_STImg-'+calculate_tym_date_for_filename+'.jpg'; + + let allData=WindowData; + let defData={'ProgramId':window.ProgramId,'ProgramDefinitionId':window.ProgramDefinitionId}; + const wind_index=allData.findIndex(i=>i.ProgramId==window.ProgramId && i.ProgramDefinitionId==window.ProgramDefinitionId) ; + let wind=wind_index>=0?allData[wind_index]:defData; + + let camera1Label=window.ProgramImage1Lable || ''; + let camera2Label=window.ProgramImage2Lable || ''; + let extraLabel=''; + if(cameraType=='2'){ + var QD=wind.WindowQA || {}; + var image_key=qtn.ProgramQuestionId+'_ImageName1'; + var image_key_path=qtn.ProgramQuestionId+'_ImagePath1'; + QD[image_key]=filename; + extraLabel='Qtn Id: '+qtn.ProgramQuestionId; + + } + else if(cameraType=='3'){ + var image_key='NAImage1'; + var image_key_path='NAImage1Path'; + wind[image_key]=filename; + extraLabel='Not Exist'; + } + else{ + var WindowSplits=wind.WindowSplits || []; + var image_key=type=='1'?'Image1Name':'Image2Name'; + var image_key_path=type=='1'?'Image1':'Image2'; + splitItem[image_key]=filename; + extraLabel=type=='1'?camera1Label:camera2Label; + } + + const mark_text1=calculate_tym_date_over_img; + const mark_text2='Store Name:'+storeData.StoreName+' | Store Id:'+storeData.StoreId+' | User Id:'+storeData.EmpId+' | ProgDef Id:'+window.ProgramDefinitionId+(extraLabel!=''?' ('+extraLabel+')':'')+' | Image Type: '+currentMenu.MenuName+' | Date:'+calculate_tym_date_over_img; + + let imagePath=`${ImageFolderPath+currentMenu.ScreenName}/${filename}`; + RNFS.copyFile(imgurl, imagePath) + .then(async(resn) => { + let uri='file://'+imagePath; + console.log('image marker:',uri); + // render data with clicked image + if(cameraType=='2'){ + + QD[image_key_path]=uri; + if(qtn.QuestionType=="Image"){ + //set answid - 0 and answer to filename if qtnType is Image + let id_key=qtn.ProgramQuestionId+'_AnswerId'; + let ans_key=qtn.ProgramQuestionId+'_Answer'; + QD[id_key]=0; + QD[ans_key]=filename; + } + wind.WindowQA=QD; + wind_index>=0?allData[wind_index]=wind:allData.push(wind); + WindowDataRef.current=allData + setWindowData(allData); + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata3(!rerenderdata3); + } + else if(cameraType=='3'){ + wind[image_key_path]=uri; + wind_index>=0?allData[wind_index]=wind:allData.push(wind); + WindowDataRef.current=allData + setWindowData(allData); + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + else{ + console.log('split image updated'); + splitItem[image_key_path]=uri; + splitItemIndex>=0?WindowSplits[splitItemIndex]=splitItem:WindowSplits.push(splitItem); + wind.WindowSplits=WindowSplits; + wind_index>=0?allData[wind_index]=wind:allData.push(wind); + WindowDataRef.current=allData + setWindowData(allData); + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata2(!rerenderdata2); + } + + let objIndex = InputChange.findIndex(i=>i.ProgramId==window.ProgramId && i.ProgramDefinitionId==window.ProgramDefinitionId); + let winArr=[...InputChange] + winArr[objIndex].Flag=true + setSelectedImg(uri) + setInputChange(winArr) + + // add metdata then resize image and restored back to the imagePath + let restore_data={"destFilePath":imagePath,"imgurl":imgurl,imgWidth,imgHeight,mark_text1,mark_text2} + let is_restored=await restore_ImageWithMetaData(restore_data,imgdata); + console.log("image restored:",is_restored); + + }) + .catch(err => { + console.log('ERROR: image file write failed!!!'); + console.log(err.message, err.code); + }); + + } + // setProcessing(false); + } + + + async function onQRScanned(imgdata){ + let qtn=QRqtnData.qtn || {}; + let window=QRqtnData.window || {}; + let QR_withValidChars=imgdata!=null && imgdata!=''?imgdata.replace(/["']/g,''):''; + let value=QR_withValidChars;//imgdata && imgdata[0] && imgdata[0].displayValue ? imgdata[0].displayValue :"" + setTextValue(value,qtn,window) + } + + + function showQtnDatePicker(qtn,window,show=false){ + let allQtns=window.WindowQuestions || []; + let newqtnIndex=allQtns.findIndex(q=>q.ProgramQuestionId==qtn.ProgramQuestionId); + + if(newqtnIndex>=0){ + let newqtn=allQtns[newqtnIndex]; + newqtn.showDatePicker=show; + allQtns[newqtnIndex]=newqtn; + window['WindowQuestions']=allQtns; + let allWindows=Windows; + const winIndex=allWindows.findIndex(i=>i.ProgramId==window.ProgramId && i.ProgramDefinitionId==window.ProgramDefinitionId) || {}; + allWindows[winIndex]=window; + setWindows(allWindows); + setGlobalWindows(allwindows); + if(show==true) setrerenderdata(!rerenderdata); + } + } + + async function openCamera(window,splitItem,splitItemIndex,type='1',cameraType='1',qtn={}){ + setErrorField({}); + setError(false); + let GridAllow = cameraType=='1' ?( type==='1' ? (window.ProgramImage1CameraGrid === 'true' || window.ProgramImage1CameraGrid==true): (window.ProgramImage1CameraGrid === 'true' || window.ProgramImage1CameraGrid==true)):false + + setGridValue(GridAllow); + setGetImageProps({'window':window,'splitItem':splitItem,'splitItemIndex':splitItemIndex,'type':type,'cameraType':cameraType,'qtn':qtn}); + setShowCamera(true); + // props.navigation.navigate('CameraScreen',{'getImage':getImage,'cameraType':'back'}) + } + + async function onSubmitData(){ + let isvalid=await validate(); + if(isvalid){ + Keyboard.dismiss(); + setShowAlert(true); + } + } + + async function saveData(){ + // setHasUnsavedChanges(false); + BgUnsavedChanges(false) + setShowAlert(false); + setLoaderTitle(ST.SavingData+'...'); + setProcessing(true); + let d1n=new Date(); + let d3=moment(d1n).format('MM/DD/YYYY'); + try { + let {StoreId,ChainId,StateId,StoreTypeId}=storeData; + + let isSpecificMapIndex=KPIFields.findIndex(i=>i.KPIFieldName=='SpecificMapping') + let isSpecificMapKPIObj=isSpecificMapIndex>=0?KPIFields[isSpecificMapIndex]:{}; + let isSpecificMappingEnable=isSpecificMapIndex>=0?isSpecificMapKPIObj['KPIFieldEnable']:false; + + // remove old data + let isDeleted = await removePreviousData(); + // console.log("isDeleted:",isDeleted); + + await db.transaction(async function (txn) { + + // add data + var values='',childV='',imageV='',stockV=''; + + for (const wi in globalWindows){ + const window=globalWindows[wi]; + let isImage1=window.ProgramImage1=='true' || window.ProgramImage1==1?1:0; + let isImage2=window.ProgramImage2=='true' || window.ProgramImage2==1?1:0; + let isNAImageAvl=window.ProgramNotExistCamera=='true' || window.ProgramNotExistCamera==1?1:0; + let isNAReasonEnable=window.ProgramNotExistReasonEnable=='true' || window.ProgramNotExistReasonEnable==1? 1:0; + let isReasonEnable=window.ProgramExistReasonEnable=='true' || window.ProgramExistReasonEnable==1? 1:0; + let isStockReq=window.ProgramElementStockRequired=='true' || window.ProgramElementStockRequired==1?1:0; + let WindowQuestions=window.WindowQuestions || []; + let WindowStocks=window.WindowStocks || []; + + + const wind=WindowData.find(i=>i.ProgramId==window.ProgramId && i.ProgramDefinitionId==window.ProgramDefinitionId); + let isPresent=wind.isPresent!=null && wind.isPresent!=''?wind.isPresent:'0'; + let ReasonId=wind.ReasonId!=null?wind.ReasonId:0; + let Reason=wind.Reason!=null?wind.Reason:''; + let NAImage1=wind.NAImage1!=null?wind.NAImage1:''; + let NAImage1Path=wind.NAImage1Path!=null?wind.NAImage1Path:''; + let remark=wind.remark!=null?wind.remark:''; + let WindowSplits=wind.WindowSplits || []; + let QD=wind.WindowQA || {}; + let WStocksData=wind.WStocksData || []; + + let PROG_HEADER_ID='WIND'+wi+(Math.floor(Math.random()*1000)+1); + let {ProgramDefinitionId,MenuId,ProgramId,ProgramName,ProgramTable,ProgramField,ProgramValue,ChildName}=window; + let showOtherText=wind.showOtherText==true || wind.showOtherText=='1' ?1:0; + let RemarkText=wind.RemarkText!=null?wind.RemarkText:''; + let displayAreaInSqrFeet=wind.displayAreaInSqrFeet!=null?wind.displayAreaInSqrFeet:'0'; + let PosDisplayAreaReasonId=wind.PosDisplayAreaReasonId!=null?wind.PosDisplayAreaReasonId:''; + let PosDisplayAreaReason=wind.PosDisplayAreaReason!=null?wind.PosDisplayAreaReason:''; + let NegDisplayAreaReasonId=wind.NegDisplayAreaReasonId!=null?wind.NegDisplayAreaReasonId:''; + let NegDisplayAreaReason=wind.NegDisplayAreaReason!=null?wind.NegDisplayAreaReason:''; + let showPosDAReason=wind.showPosDAReason==1 || wind.showPosDAReason=='1'; + let showNegDAReason=wind.showNegDAReason==1 || wind.showNegDAReason=='1'; + + + console.log('MenuId in savedata:',MenuId); + + values+=values!=''?' , ':''; + values+=` ('${PROG_HEADER_ID}','${MenuId}','${StoreId}','${d3}','${ProgramDefinitionId}','${ProgramId}','${ProgramName}','${ProgramTable}','${ProgramField}','${ProgramValue}','${ChildName}','${isPresent}','${NAImage1}','${ReasonId}','${Reason}','${(remark || '')}','${showOtherText}','${RemarkText}','1','${d3}','${isSpecificMappingEnable}','${displayAreaInSqrFeet}','${showPosDAReason?PosDisplayAreaReasonId:''}','${showPosDAReason?PosDisplayAreaReason:''}','${showNegDAReason?NegDisplayAreaReasonId:''}','${showNegDAReason?NegDisplayAreaReason:''}') `; + + if(isPresent==1){ + for(const qtnIndex in WindowQuestions){ + const qtn=WindowQuestions[qtnIndex]; + + let selansid='',selanswer='',selimg='',showImageTag=false,Image1=""; + let id_key=qtn.ProgramQuestionId+'_AnswerId'; + let ans_key=qtn.ProgramQuestionId+'_Answer'; + let multi_key=qtn.ProgramQuestionId+'_MultiOption'; + let date_key=qtn.ProgramQuestionId+'_Date'; + let img_key=qtn.ProgramQuestionId+'_ImagePath1'; + let imgname_key=qtn.ProgramQuestionId+'_ImageName1'; + let rating_key=qtn.ProgramQuestionId+'_Rating'; + let list_mcdata=[]; + let isDisabled=qtn.isDisabled; + + let {ProgramQuestionId,ProgramQuestionCode,QuestionType,PQShowCamera}=qtn + let answer=QD[ans_key] || 0; + let answerId=QD[id_key]===0? 0 :(QD[id_key]|| ''); + let multi_options_ids=QD[multi_key] || ''; + + if(qtn.QuestionType=='Number' || qtn.QuestionType=='Text' || qtn.QuestionType=='Decimal' || qtn.QuestionType=='Date' || qtn.QuestionType=='Image') + { + showImageTag=(qtn.PQShowCamera==1 || qtn.PQShowCamera=='true'); + } + else if((qtn.QuestionType=='Single choice list' || qtn.QuestionType=='Multi choice list' )){ + if (qtn.Answers && qtn.Answers.length>0){ + for(var i=0;i=0)){ + showImageTag=true; + } + + } + } + } + + Image1=showImageTag==1?(qtn?.QuestionType=='Image'? QD[ans_key] :QD[imgname_key]):''; + + if(qtn?.QuestionType=='Image'){ + Image1=QD[ans_key] + } + + + childV+=childV!=''?' , ':''; + childV+=` ('${PROG_HEADER_ID}','${StoreId}','${d3}','${ProgramDefinitionId}','${ProgramId}','${ProgramQuestionId}','${ProgramQuestionCode}','${QuestionType}','${answer}','${answerId}','${multi_options_ids}','${Image1}','${showImageTag}','${d3}','${isDisabled}') `; + } + for(const splitItemIndex in WindowSplits){ + const splitItem=WindowSplits[splitItemIndex]; + let Image1Name=splitItem['Image1Name']!=null && splitItem['Image1Name']!=''?splitItem['Image1Name']:''; + let Image2Name=splitItem['Image2Name']!=null && splitItem['Image2Name']!=''?splitItem['Image2Name']:''; + Image1Name=isImage1==1?Image1Name:''; + Image2Name=isImage2==1?Image2Name:''; + + imageV+=imageV!=''?' , ':''; + imageV+=` ('${PROG_HEADER_ID}','${StoreId}','${d3}','${ProgramDefinitionId}','${ProgramId}','${Image1Name}','${Image2Name}','${d3}') `; + } + for(const stockProdIndex in WindowStocks){ + const stockProd=WindowStocks[stockProdIndex]; + let sd=WStocksData.find(i=> i.ProductId==stockProd.ProgramStockValue) || {}; + let stock=sd.Stock!=null?sd.Stock:(sd.Stock==0?sd.Stock:''); + let isPROGPresent=sd.isPROGPresent!=null?sd.isPROGPresent:0; + let {ProgramStockDefinitionId, ProgramDefinitionId,ProgramStockTable,ProgramStockField,ProgramStockValue,ProgramStockMBQ,ProductName} =stockProd + stockV+=stockV!=''?' , ':''; + stockV+=` ('${PROG_HEADER_ID}','${StoreId}','${d3}','${ProgramDefinitionId}','${ProgramId}','${ProgramStockDefinitionId}','${ProgramStockTable}','${ProgramStockField}','${ProgramStockValue}','${ProgramStockMBQ}','${ProductName}','${stock}','${isPROGPresent}','${d3}') `; + } + + } + } + + console.log('values:',values); + + + + let add_hdr_data=`INSERT INTO ${AppTables.PROGRAM_HDR_DATA} (PROG_HEADER_ID,MENU_ID,STORE_ID,VISIT_DATE,PROG_DEFINITION_ID,PROG_ID,PROG_NAME,PROG_TABLE,PROG_FIELD,PROG_VALUE,CHILD_NAME,IS_PRESENT,PROG_NA_IMAGE,REASON_ID,REASON,REMARK,SHOW_RSN_REMARK,REASON_REMARK,IS_UPDATED,ADDED_DATE, IS_STORE_SPECIFIC,DISPLAY_AREA,POS_DA_REASON_ID,POS_DA_REASON,NEG_DA_REASON_ID,NEG_DA_REASON) VALUES ${values} `; + let add_child_data=`INSERT INTO ${AppTables.PROGRAM_CHILD_DATA} (PROG_HEADER_ID,STORE_ID,VISIT_DATE,PROG_DEFINITION_ID,PROG_ID,QUESTION_ID,QUESTION_CODE,QUESTION_TYPE,ANSWER,ANSWER_ID,MULTI_OPTIONS_IDS,IMAGE1,IMAGE_ALLOW1,ADDED_DATE,IS_DISABLED) VALUES ${childV} `; + let add_images_data=`INSERT INTO ${AppTables.PROGRAM_IMAGES} (PROG_HEADER_ID,STORE_ID,VISIT_DATE,PROG_DEFINITION_ID,PROG_ID,IMAGE1,IMAGE2,ADDED_DATE) VALUES ${imageV} `; + let add_stock_data=`INSERT INTO ${AppTables.PROGRAM_STOCK_DATA} (PROG_HEADER_ID,STORE_ID,VISIT_DATE,PROG_DEFINITION_ID,PROG_ID,PROG_STOCK_DEFINITION_ID,PROG_STOCK_TABLE,PROG_STOCK_FIELD,PROG_STOCK_VALUE,PROG_STOCK_MBQ,PRODUCT_NAME,STOCK,IS_PROG_PRESENT,ADDED_DATE) VALUES ${stockV} `; + + + await txn.executeSql(add_hdr_data,[],async function (txn2, txnres) { + console.log('st header data added'); + var isSplitImageAdded=true,isStockAdded=true,isChildAdded=true; + if(imageV!=''){ + isSplitImageAdded=await executeQuery(add_images_data); + } + if(stockV!=''){ + isStockAdded=await executeQuery(add_stock_data); + } + if(childV!=''){ + isChildAdded=await executeQuery(add_child_data); + } + + if(!isSplitImageAdded){ + setProcessing(false);notify('Cannot add paid Program images'); + } + else if(!isStockAdded){ + setProcessing(false);notify('Cannot add paid Program stock data'); + } + else if(!isChildAdded){ + setProcessing(false);notify('Cannot add paid Program questions data'); + } + else{ + // clear store data in local storage to avoiding re-set data for the store + clear_item('storeData') + setProcessing(false);notify('Paid Program updated successfully'); + props.navigation.goBack(); + } + + + },function (txnE,txnerr) { console.log(txnerr);setProcessing(false);notify('Cannot add paid Program data'); },); + }); + } catch (err) { + console.log(err); + } + } + + async function removePreviousData(){ + let {StoreId,ChainId,StateId,StoreTypeId}=storeData; + + let {PSAllow}=currentMenu + let deleteOnlyCatData=ShowCatWise && PSAllow && FilteredPromoValues!="" && FilteredPromoValues!=null ; + + + return new Promise((resolve,reject)=>{ + + db.transaction(async function (txn) { + + let sq=`Select * FROM ${AppTables.PROGRAM_HDR_DATA} WHERE STORE_ID='${StoreId}' and MENU_ID='${currentMenu.MenuId}' and VISIT_DATE='${d2}' `; + if(deleteOnlyCatData){ + sq+=` and PROG_ID='${FilteredPromoValues}' `; + } + await txn.executeSql(sq,[],async function (txn2, txnres) { + if(txnres.rows.length>0){ + let arr=[]; + let isHdrDel=false,isQtnsDel=false,isImagesDel=false,isStockDel=false; + for(let i=0;i{ + return val; + }).catch((err)=>{ + console.log('error:',err); + return false; + }) + } + + async function executeQuery(q){ + return new Promise((resolve,reject)=>{ + db.transaction(async function (txn) { + await txn.executeSql(q,[],async function (txn2, txnres2) { + resolve(true); + },function(Etxn,txnerr){console.log(txnerr);resolve(false) }); + }); + }).then((val)=>{ + return val; + }).catch((err)=>{ + console.log(err); + return false; + }) + } + + async function validate(){ + let isValid=true; + + let isListedSKUIndex=KPIFields.findIndex(i=>i.KPIFieldName=='ListedSKUCheckbox'); + let isListedSKUKPIObj=isListedSKUIndex>=0?KPIFields[isListedSKUIndex]:{}; + let isListedSKUEnable=isListedSKUIndex>=0?isListedSKUKPIObj['KPIFieldEnable']:true; + + function showError(obj,isErr){ + setErrorField(obj); + setError(isErr); + } + + return new Promise((resolve,reject)=>{ + for (const wi in globalWindows){ + const window=globalWindows[wi]; + let isImage1=window.ProgramImage1=='true' || window.ProgramImage1==1?1:0; + let isImage2=window.ProgramImage2=='true' || window.ProgramImage2==1?1:0; + let isNAImageAvl=window.ProgramNotExistCamera=='true' || window.ProgramNotExistCamera==1?1:0; + let isNAReasonEnable=window.ProgramNotExistReasonEnable=='true' || window.ProgramNotExistReasonEnable==1? 1:0; + let isReasonEnable=window.ProgramExistReasonEnable=='true' || window.ProgramExistReasonEnable==1? 1:0; + let isStockReq=window.ProgramElementStockRequired=='true' || window.ProgramElementStockRequired==1?1:0; + let StockQtyRequired=window.StockQtyRequired=='true' || window.StockQtyRequired==1?1:0; + let DisplayAreaRequired=window.DisplayAreaRequired=='true' || window.DisplayAreaRequired==1?1:0; + let DisplayAreaRequiredLabel=window.DisplayAreaRequiredLabel!=null && window.DisplayAreaRequiredLabel!='undefined'? window.DisplayAreaRequiredLabel:""; + + let WindowQuestions=window.WindowQuestions || []; + let WindowStocks=window.WindowStocks || []; + + const wind=WindowData.find(i=>i.ProgramId==window.ProgramId && i.ProgramDefinitionId==window.ProgramDefinitionId); + let isPresent=wind.isPresent!=null && wind.isPresent!=''?wind.isPresent:'0'; + let ReasonId=wind.ReasonId!=null?wind.ReasonId:''; + let Reason=wind.Reason!=null?wind.Reason:''; + let NAImage1=wind.NAImage1!=null?wind.NAImage1:''; + let NAImage1Path=wind.NAImage1Path!=null?wind.NAImage1Path:''; + let remark=wind.remark!=null?wind.remark:''; + let WindowSplits=wind.WindowSplits || []; + let QD=wind.WindowQA || {}; + let WStocksData=wind.WStocksData || []; + let showOtherText=wind.showOtherText!=null?wind.showOtherText:false; + + let displayAreaInSqrFeet=wind.displayAreaInSqrFeet!=null?wind.displayAreaInSqrFeet:''; + let PosDisplayAreaReasonId=wind.PosDisplayAreaReasonId!=null?wind.PosDisplayAreaReasonId:''; + let PosDisplayAreaReason=wind.PosDisplayAreaReason!=null?wind.PosDisplayAreaReason:''; + let NegDisplayAreaReasonId=wind.NegDisplayAreaReasonId!=null?wind.NegDisplayAreaReasonId:''; + let NegDisplayAreaReason=wind.NegDisplayAreaReason!=null?wind.NegDisplayAreaReason:''; + let showPosDAReason=wind.showPosDAReason==1 || wind.showPosDAReason=='1'; + let showNegDAReason=wind.showNegDAReason==1 || wind.showNegDAReason=='1'; + + + let errorobj = {'EF_Window':window}; + + if(isPresent=='1'){ + if(isReasonEnable==true && ReasonId=='' ){ + errorobj['EF_NExistReason']="NExistReason"; + showError(errorobj,true); + notify(`${ST.Pleaseselectreasonfor} ${window.ProgramName} `,'LONG'); + resolve(false);return; + } + // else if(remark==''){ + // notify(`Please enter remark for ${window.ProgramName} `,'LONG'); + // resolve(false);return; + // } + else{ + if(StoreCameraAllow && window.NoOfSplit>0 && WindowSplits.length>0 && (isImage1==1 || isImage2==1)) + { + for(const splitItemIndex in WindowSplits){ + const splitItem=WindowSplits[splitItemIndex]; + let Image1Name=splitItem['Image1Name']!=null && splitItem['Image1Name']!=''?splitItem['Image1Name']:''; + let Image2Name=splitItem['Image2Name']!=null && splitItem['Image2Name']!=''?splitItem['Image2Name']:''; + console.log('Image2Name',Image2Name,isImage2); + if(isImage1==1 && Image1Name==''){ + errorobj['EF_splitImage1']="splitImage1"; + errorobj['EF_splitItemIndex']=splitItemIndex; + showError(errorobj,true); + notify(`${ST.Pleaseclickallimagesfor} ${window.ProgramName}`,'LONG'); + resolve(false);return; + } + else if(isImage2==1 && Image2Name==''){ + errorobj['EF_splitImage2']="splitImage2"; + errorobj['EF_splitItemIndex']=splitItemIndex; + showError(errorobj,true); + notify(`${ST.Pleaseclickallimagesfor} ${window.ProgramName}`,'LONG'); + resolve(false);return; + } + } + } + + if(isStockReq==1){ + let isProductSelected=false; + for(const stockProdIndex in WindowStocks){ + const stockProd=WindowStocks[stockProdIndex]; + + let sd=WStocksData.find(i=> i.ProductId==stockProd.ProgramStockValue) || {}; + let stock=sd.Stock!=null?sd.Stock:(sd.Stock==0?sd.Stock:''); + let isPROGPresent=sd.isPROGPresent!=null?sd.isPROGPresent:0; + + if(isPROGPresent==1){ + isProductSelected=true; + } + + if((isListedSKUEnable==true && isPROGPresent==1 && StockQtyRequired==1 && stock=='') || (isListedSKUEnable!=true && stock!==0 && (stock==null || stock==''))){ + errorobj['EF_stock']="input1_"; + errorobj['EF_stockProdIndex']=stockProdIndex; + let refIn1=inputRefs.current['input1_'+window.ProgramDefinitionId+'_'+stockProdIndex]; + if(refIn1!=null){ + refIn1.focus(); + } + showError(errorobj,true); + notify(`${ST.Pleaseenterstockfor} ${window.ProgramName} ( ${stockProd.ProductName} ) `,'LONG'); + resolve(false);return; + } + + if(isListedSKUEnable==true && stockProdIndex==WindowStocks.length-1){ + if(!isProductSelected){ + errorobj['EF_isProductSelected']="isProductSelected"; + showError(errorobj,true); + notify(`${ST.PleaseselectatleastoneSKUfor} ${window.ProgramName} `,'LONG'); + resolve(false);return; + } + } + + } + } + + if(WindowQuestions.length>0){ + for(const qtnIndex in WindowQuestions){ + const qtn=WindowQuestions[qtnIndex]; + + let selansid='',selanswer='',selimg='',showImageTag=false; + let id_key=qtn.ProgramQuestionId+'_AnswerId'; + let ans_key=qtn.ProgramQuestionId+'_Answer'; + let multi_key=qtn.ProgramQuestionId+'_MultiOption'; + let date_key=qtn.ProgramQuestionId+'_Date'; + let img_key=qtn.ProgramQuestionId+'_ImagePath1'; + let imgname_key=qtn.ProgramQuestionId+'_ImageName1'; + let rating_key=qtn.ProgramQuestionId+'_Rating'; + + let isDisabled=qtn.isDisabled; + + console.log("isDisabled:",qtn.ProgramQuestionId,isDisabled); + if(!isDisabled){ + let list_mcdata=[]; + errorobj['EF_qtn']=qtn; + + let isImgAllowed=((qtn.PQShowCamera=='true' || qtn.PQShowCamera==1) || (qtn.QuestionType=="Image")); + let checkForAnsKey=(qtn.QuestionType=='Decimal' || qtn.QuestionType=='Number' || qtn.QuestionType=='Text' || qtn.QuestionType=='Date' || qtn.QuestionType=='Rating' || qtn.QuestionType=='QR' ) ; + + + if(qtn.QuestionType=='Single choice list') + { + selansid=QD[id_key]; + } + else if(qtn.QuestionType=='Multi choice list') + { + selansid=QD[multi_key]!=null && QD[multi_key]!=''?QD[multi_key].split(','):[]; + } + + + if(qtn.QuestionType=='Multi choice list' && selansid.length<=0){ + errorobj['EF_Qtn_MultiChoice']='Qtn_MultiChoice'; + showError(errorobj,true); + notify(`${Pleaseselectoptionsfortherequiredfield} ${ST.In} ${window.ProgramName}`,'SHORT'); + resolve(false);return; + } + else if( checkForAnsKey && (Object.keys(QD).indexOf(ans_key)<0 || (Object.keys(QD).indexOf(ans_key)>=0 && QD[ans_key]===''))){ + errorobj['EF_Qtn_Date']='Qtn_Date'; + showError(errorobj,true); + let msg=( qtn.QuestionType=='Date'?`${ST.Pleasepickadatefortherequiredfield} ${ST.In} ${window.ProgramName}`:(qtn.QuestionType=='Rating'?`${Pleaseselectratingfortherequiredfield} ${ST.In} ${window.ProgramName}`:`${ST.Pleasefillalltherequiredfield} ${ST.In} ${window.ProgramName}`)); + notify(msg,'SHORT'); + resolve(false);return; + } + else if(Object.keys(QD).indexOf(id_key)<0 || (Object.keys(QD).indexOf(id_key)>=0 && (QD[id_key]===''))){ + console.log('error fouund here ',id_key,QD[id_key],QD[ans_key],qtn.QuestionType); + errorobj['EF_Qtn_Input']='Qtn_Input'; + showError(errorobj,true); + notify(`${ST.Pleasefillalltherequiredfield} ${ST.In} ${window.ProgramName}`,'SHORT'); + resolve(false);return; + } + else if(isImgAllowed && (Object.keys(QD).indexOf(img_key)<0 || (Object.keys(QD).indexOf(img_key)>=0 && QD[img_key]===''))){ + errorobj['EF_Qtn_Image']='Qtn_Image'; + showError(errorobj,true); + notify(`${ST.Pleaseaddimages} ${ST.In} ${window.ProgramName}`,'SHORT'); + resolve(false);return; + }else{ + console.log('no condition found'); + } + + if((qtn.QuestionType=='Single choice list' || qtn.QuestionType=='Multi choice list' )){ + if (qtn.Answers && qtn.Answers.length>0){ + for(var j=0;j=0)){ + showImageTag=true; + } + } + } + } + + if(showImageTag && (Object.keys(QD).indexOf(img_key)<0 || (Object.keys(QD).indexOf(img_key)>=0 && QD[img_key]===''))){ + errorobj['EF_Qtn_Image']='Qtn_Image'; + showError(errorobj,true); + notify(`${ST.Pleaseaddimages} ${ST.In} ${window.ProgramName}`,'SHORT'); + resolve(false);return; + } + } + } + } + + if(DisplayAreaRequired && displayAreaInSqrFeet!==0 && (displayAreaInSqrFeet==null || displayAreaInSqrFeet=='') ){ + errorobj['EF_DisplayArea']="DisplayArea"; + showError(errorobj,true); + notify(`Please enter ${DisplayAreaRequiredLabel} for ${window.ProgramName} `,'LONG'); + resolve(false);return; + } + else if(DisplayAreaRequired && showPosDAReason && (PosDisplayAreaReasonId==null || PosDisplayAreaReasonId=='') ){ + errorobj['EF_DisplayAreaPosReason']="DisplayAreaPosReason"; + showError(errorobj,true); + notify(`Please select reason for Plus in ${DisplayAreaRequiredLabel}, ${window.ProgramName} `,'LONG'); + resolve(false);return; + } + else if(DisplayAreaRequired && showNegDAReason && (NegDisplayAreaReasonId==null || NegDisplayAreaReasonId=='') ){ + errorobj['EF_DisplayAreaNegReason']="DisplayAreaNegReason"; + showError(errorobj,true); + notify(`Please select reason for Minus in ${DisplayAreaRequiredLabel}, ${window.ProgramName} `,'LONG'); + resolve(false);return; + } + + } + } + else{ + if(isNAReasonEnable==true && ReasonId=='' ){ + errorobj['EF_NExistReason']="NExistReason"; + showError(errorobj,true); + notify(`${ST.Pleaseselectreasonfor} ${window.ProgramName} `,'LONG'); + resolve(false);return; + } + else if(isNAReasonEnable==true && showOtherText==true && (wind.RemarkText==null || wind.RemarkText=='')){ + errorobj['EF_NExistRemark']="NExistRemark"; + showError(errorobj,true); + notify(`${ST.PleaseEnterRemarkFor} ${window.ProgramName} `,'LONG'); + resolve(false);return; + } + else if(StoreCameraAllow && isNAImageAvl==true && NAImage1=='' ){ + errorobj['EF_NExistImage']="NExistImage"; + showError(errorobj,true); + notify(`${ST.Pleaseclickimagefor} ${window.ProgramName}`,'LONG'); + resolve(false);return; + } + } + + if(wi==(Windows.length-1)){ + resolve(true);return; + } + + } + + }).then((val)=>{return val}) + .catch((err)=>{console.log(err); return false}); + + } + + + function onselectionChange3(option,keyLbl,keyVal,otherData){ + setErrorField({}); + setError(false); + let item=otherData.window; + let allData=WindowData; + let defData={'ProgramId':item.ProgramId,'ProgramDefinitionId':item.ProgramDefinitionId}; + const win_index=allData.findIndex(i=>i.ProgramId==item.ProgramId && i.ProgramDefinitionId==item.ProgramDefinitionId); + let wind=win_index>=0?(allData[win_index] || defData) : defData; + wind[keyVal]=option.value; + wind[keyLbl]=option.label; + + if(keyLbl=='Reason'){ + let rsn_Index=reasons_list.findIndex(i=>i.ReasonId==option.value); + + if(rsn_Index>=0){ + let rsn=reasons_list[rsn_Index]; + let IsRemarkTaken=rsn.IsRemarkTaken==1 || rsn.IsRemarkTaken=='1' ?true:false; + + if(IsRemarkTaken==true){ + wind['showOtherText']=true; + } + else{ + wind['showOtherText']=false; + } + } + } + + + win_index>=0?allData[win_index]=wind:allData.push(wind); + console.log('allData:',allData); + let objIndex = InputChange.findIndex(i=>i.ProgramId==item.ProgramId && i.ProgramDefinitionId==item.ProgramDefinitionId); + let winArr=[...InputChange] + winArr[objIndex].Flag=true + + setInputChange(winArr) + WindowDataRef.current=allData + setWindowData(allData); + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + + function onselectionChange(option,qtn,window){ + setErrorField({}); + setError(false); + let allData=WindowData; + let defData={'ProgramId':window.ProgramId,'ProgramDefinitionId':window.ProgramDefinitionId}; + const wind_index=allData.findIndex(i=>i.ProgramId==window.ProgramId && i.ProgramDefinitionId==window.ProgramDefinitionId); + let wind=wind_index>=0?allData[wind_index]:defData; + let data=wind.WindowQA || {}; + let id_key=qtn.ProgramQuestionId+'_AnswerId'; + let ans_key=qtn.ProgramQuestionId+'_Answer'; + data[id_key]=option.value; + data[ans_key]=option.label; + + wind['WindowQA']=data; + wind_index>=0?allData[wind_index]=wind:allData.push(wind); + let objIndex = InputChange.findIndex(i=>i.ProgramId==window.ProgramId && i.ProgramDefinitionId==window.ProgramDefinitionId); + let winArr=[...InputChange] + winArr[objIndex].Flag=true + + setInputChange(winArr) + WindowDataRef.current=allData + setWindowData(allData); + + let aq_ans=qtn.Answers!=null?qtn.Answers:[]; + let ans_obj=aq_ans.find(i=>i.AnswerId==option.value) || {}; + let EQtns=ans_obj.VAQuestionEnable!=null && ans_obj.VAQuestionEnable!=''?ans_obj.VAQuestionEnable.replace(' ','').split(','):[]; + let DQtns=ans_obj.VAQuestionDisable!=null && ans_obj.VAQuestionDisable!=''?ans_obj.VAQuestionDisable.replace(' ','').split(','):[]; + + let sqtns=window.WindowQuestions || [] + + if(EQtns.length>0){ + enableQtns(sqtns,EQtns,DQtns,data,wind,wind_index,allData,window) + } + else if(DQtns.length>0){ + disableQtns(sqtns,DQtns,data,wind,wind_index,allData,window) + } + else{ + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + BgUnsavedChanges(true) + + } + + async function disableQtns(sqtns,DQtns,data,wind={},wind_index=-1,allData=[],window={}){ + + if(DQtns.length>0){ + new Promise.all( + DQtns.map((qid,q_index)=>{ + let s_qtnindex=sqtns.findIndex(i=>i.ProgramQuestionId==qid) || {}; + let s_qtn=sqtns[s_qtnindex]; + if(s_qtn!=null){ + s_qtn['isDisabled']=true + sqtns[s_qtnindex]=s_qtn; + let id_key=s_qtn.ProgramQuestionId+'_AnswerId'; + let ans_key=s_qtn.ProgramQuestionId+'_Answer'; + data[id_key]=0; + data[ans_key]=''; + + wind['WindowQA']=data; + wind_index>=0?allData[wind_index]=wind:allData.push(wind); + return false + }else{ + return false + } + }) + ).then(async (val)=>{ + + let allwindows=Windows; + let windowIndex=allwindows.findIndex(i=>i.ProgramDefinitionId==window.ProgramDefinitionId && i.ProgramId==window.ProgramId) + if(windowIndex>=0){ + window['WindowQuestions']=sqtns; + allwindows[windowIndex]=window; + WindowDataRef.current=allData + setWindowData(allData); + setWindows(allwindows); + setGlobalWindows(allwindows); + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + + }) + } + } + + async function enableQtns(sqtns,EQtns,DQtns,data,wind={},wind_index=-1,allData=[],window={}){ + new Promise.all( + EQtns.map((qid,q_index)=>{ + let s_qtnindex=sqtns.findIndex(i=>i.ProgramQuestionId==qid) || {}; + let s_qtn=sqtns[s_qtnindex]; + if(s_qtn!=null){ + s_qtn['isDisabled']=false + sqtns[s_qtnindex]=s_qtn; + return false + } + else{ + return false + } + }) + ).then(async (val)=>{ + if(DQtns.length>0){ + await disableQtns(sqtns,DQtns,data,wind,wind_index,allData,window) + } + else{ + let allwindows=Windows; + let windowIndex=allwindows.findIndex(i=>i.ProgramDefinitionId==window.ProgramDefinitionId && i.ProgramId==window.ProgramId) + if(windowIndex>0){ + window['WindowQuestions']=sqtns; + allwindows[windowIndex]=window; + setWindows(allwindows); + setGlobalWindows(allwindows); + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + } + }) + } + + async function setMultiSelectValue(selectedItems=[],qtn={},window={}) { + setErrorField({}); + setError(false); + console.log('setMultiSelectValue',selectedItems); + let id_key=qtn.ProgramQuestionId+'_AnswerId'; + let ans_key=qtn.ProgramQuestionId+'_Answer'; + let multi_key=qtn.ProgramQuestionId+'_MultiOption'; + + let allData=WindowData; + let defData={'ProgramId':window.ProgramId,'ProgramDefinitionId':window.ProgramDefinitionId}; + const wind_index=allData.findIndex(i=>i.ProgramId==window.ProgramId && i.ProgramDefinitionId==window.ProgramDefinitionId); + let wind=wind_index>=0?allData[wind_index]:defData; + let obj=wind.WindowQA || {}; + obj[id_key]=0; + obj[multi_key]=selectedItems.join(','); + let anss=[]; + selectedItems.map((itemValue)=>{ + let ans = qtn.Answers.find(c1 => c1.AnswerId == itemValue); + if(ans.Answer){anss.push(ans.Answer)} + }); + obj[ans_key]=anss.join(','); + console.log('obj:',obj); + + wind['WindowQA']=obj; + wind_index>=0?allData[wind_index]=wind:allData.push(wind); + + let objIndex = InputChange.findIndex(i=>i.ProgramId==window.ProgramId && i.ProgramDefinitionId==window.ProgramDefinitionId); + let winArr=[...InputChange] + winArr[objIndex].Flag=true + + setInputChange(winArr) + WindowDataRef.current=allData + setWindowData(allData); + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + + function setTextValue(value,qtn,window,type) { + setErrorField({}); + setError(false); + if(value!=''){ + let isValid=validateNumber(value,type); + if(!isValid){ + return; + } + } + let id_key=qtn.ProgramQuestionId+'_AnswerId'; + let ans_key=qtn.ProgramQuestionId+'_Answer'; + + let allData=WindowData; + let defData={'ProgramId':window.ProgramId,'ProgramDefinitionId':window.ProgramDefinitionId}; + const wind_index=allData.findIndex(i=>i.ProgramId==window.ProgramId && i.ProgramDefinitionId==window.ProgramDefinitionId); + let wind=wind_index>=0?allData[wind_index]:defData; + let obj=wind.WindowQA || {}; + + if(qtn.QuestionType=='Date' ){ + let date_key=qtn.ProgramQuestionId+'_Date'; + let d=value!=null?new Date(value):new Date(); + let mfdate=moment(d).format('MM/YYYY'); + showQtnDatePicker(qtn,window,false); + obj[id_key]=0; + obj[ans_key]=mfdate; + obj[date_key]=moment(d).format('MM/DD/YYYY'); + } + else{ + obj[id_key]=0; + obj[ans_key]=value; + } + + console.log('setTextValue:',value,obj); + wind['WindowQA']=obj; + wind_index>=0?allData[wind_index]=wind:allData.push(wind); + + let objIndex = InputChange.findIndex(i=>i.ProgramId==window.ProgramId && i.ProgramDefinitionId==window.ProgramDefinitionId); + let winArr=[...InputChange] + winArr[objIndex].Flag=true + + setInputChange(winArr) + WindowDataRef.current=allData + setWindowData(allData); + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + + function showQtnDatePicker(qtn,window,show=false){ + let allQtns=window.WindowQuestions || []; + let newqtnIndex=allQtns.findIndex(q=>q.ProgramQuestionId==qtn.ProgramQuestionId); + + if(newqtnIndex>=0){ + let newqtn=allQtns[newqtnIndex]; + newqtn.showDatePicker=show; + allQtns[newqtnIndex]=newqtn; + window['WindowQuestions']=allQtns; + let allWindows=Windows; + const winIndex=allWindows.findIndex(i=>i.ProgramId==window.ProgramId && i.ProgramDefinitionId==window.ProgramDefinitionId) || {}; + allWindows[winIndex]=window; + setWindows(allWindows); + setGlobalWindows(allwindows); + if(show==true) setrerenderdata(!rerenderdata); + } + } + + function setRatingValue(data){ + setRatingOrder(data); + } + + function onRatingCancel(){ + setShowRating(false); + } + + function onRatingSave(){ + setShowRating(false); + let qtn=RatingQtn; + let window=RatingWindow; + let id_key=qtn.ProgramQuestionId+'_AnswerId'; + let ans_key=qtn.ProgramQuestionId+'_Answer'; + let rating_key=qtn.ProgramQuestionId+'_Rating'; + let ids=[],anss=[]; + RatingOrder.map((item,index)=>{ + ids.push(item.AnswerId); + anss.push(item.Answer); + }) + + let allData=WindowData; + let defData={'ProgramId':window.ProgramId,'ProgramDefinitionId':window.ProgramDefinitionId}; + const wind_index=allData.findIndex(i=>i.ProgramId==window.ProgramId && i.ProgramDefinitionId==window.ProgramDefinitionId); + let wind=wind_index>=0?allData[wind_index]:defData; + let obj=wind.WindowQA || {}; + + obj[rating_key]=ids.join(','); + obj[id_key]=0; + obj[ans_key]=anss.join(','); + + wind['WindowQA']=obj; + wind_index>=0?allData[wind_index]=wind:allData.push(wind); + + let objIndex = InputChange.findIndex(i=>i.ProgramId==window.ProgramId && i.ProgramDefinitionId==window.ProgramDefinitionId); + let winArr=[...InputChange] + winArr[objIndex].Flag=true + + setInputChange(winArr) + WindowDataRef.current=allData + setWindowData(allData); + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + + + function onChoiceSelect(item,val,key,animatedChoice){ + let win_index=InputChange.find(i=>i.ProgramId==item.ProgramId && i.ProgramDefinitionId==item.ProgramDefinitionId) + let changeValue=win_index.Flag; + + if(changeValue){ + setIsPresentClean(val) + setDataCleanAnim(animatedChoice) + setDataCleanItem(item) + setDataCleanModal(true) + return + } + + var val1=0; + val==1?val1=1:''; + + if(animatedChoice!=null){ + Animated.timing(animatedChoice, { + toValue: val1, + duration:400, + useNativeDriver:false, + }).start(); + } + onWindowDataChange(item,val,key) + } + + function onWindowDataChange(item,val,key){ + let allData=WindowData; + let defData={'ProgramId':item.ProgramId,'ProgramDefinitionId':item.ProgramDefinitionId}; + const win_index=allData.findIndex(i=>i.ProgramId==item.ProgramId && i.ProgramDefinitionId==item.ProgramDefinitionId); + let wind=win_index>=0?(allData[win_index] || defData) : defData; + wind[key]=val; + + if(key=='ReasonId'){ + let rsn=reasons_list.find(r=>r.ReasonId==val) || {}; + wind['Reason']=rsn.Reason || ''; + } + + win_index>=0?allData[win_index]=wind:allData.push(wind); + + if(key!="isPresent"){ + let objIndex = InputChange.findIndex(i=>i.ProgramId==item.ProgramId && i.ProgramDefinitionId==item.ProgramDefinitionId); + let winArr=[...InputChange] + winArr[objIndex].Flag=true + setInputChange(winArr) + } + + WindowDataRef.current=allData + setWindowData(allData); + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + + + async function setWindowStockVal(val,window,stockProd,key,type=''){ + setErrorField({}); + setError(false); + if(type=='numeric' && val!=''){ + const regex = new RegExp(/^\d+$/); + let isNUmeric=regex.test(val); + if(!isNUmeric){ + notify(ST.Pleaseenterwholenumbersonly,'SHORT'); + return; + } + } + + let allData=WindowData; + let defData={'ProgramId':window.ProgramId,'ProgramDefinitionId':window.ProgramDefinitionId}; + const win_index=allData.findIndex(i=>i.ProgramId==window.ProgramId && i.ProgramDefinitionId==window.ProgramDefinitionId); + let wind=win_index>=0?(allData[win_index] || defData) : defData; + let WStocksData=wind['WStocksData'] || []; + let sdIndex=WStocksData.findIndex(i=> i.ProductId==stockProd.ProgramStockValue); + let sd=sdIndex>=0?WStocksData[sdIndex]:{'ProductId':stockProd.ProgramStockValue,'Stock':''}; + sd[key]=val; + sdIndex>=0?WStocksData[sdIndex]=sd:WStocksData.push(sd); + wind['WStocksData']=WStocksData; + win_index>=0?allData[win_index]=wind:allData.push(wind); + if(key=='isPROGPresent'){ + let isAllChecked = await verifyAllChecked(val,window,stockProd,key); + wind['isAllSKUChecked']=isAllChecked; + } + + WindowDataRef.current=allData + setWindowData(allData); + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata4(!rerenderdata4); + } + + async function onCatTextChange(window,key,val,type="text"){ + if(val!=''){ + let isValid=validateNumber(val,type); + if(!isValid){ + return; + } + } + setErrorField({}); + setError(false); + let item=window; + let allData=WindowData; + let defData={'ProgramId':item.ProgramId,'ProgramDefinitionId':item.ProgramDefinitionId}; + const win_index=allData.findIndex(i=>i.ProgramId==item.ProgramId && i.ProgramDefinitionId==item.ProgramDefinitionId); + let wind=win_index>=0?(allData[win_index] || defData) : defData; + wind[key]=val; + + if(key=='displayAreaInSqrFeet'){ + let PrevDisplayArea=item.PrevDisplayArea!=null && item.PrevDisplayArea!='undefined' && item.PrevDisplayArea!=''?item.PrevDisplayArea:'' + let displayAreaInSqrFeet=wind.displayAreaInSqrFeet!=null?wind.displayAreaInSqrFeet:''; + let showPosDAReason=PrevDisplayArea!='' && displayAreaInSqrFeet!=''?(parseFloat(PrevDisplayArea)parseFloat(displayAreaInSqrFeet)):false; + + wind["showPosDAReason"]=showPosDAReason; + wind["showNegDAReason"]=showNegDAReason; + } + + + win_index>=0?allData[win_index]=wind:allData.push(wind); + + WindowDataRef.current=allData + setWindowData(allData); + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + + + async function verifyAllChecked(val,window,stockProd,key){ + return await new Promise((resolve,reject)=>{ + let WindowStocks=window.WindowStocks || []; + let allData=WindowData; + const win_index=allData.findIndex(i=>i.ProgramId==window.ProgramId && i.ProgramDefinitionId==window.ProgramDefinitionId); + let wind=win_index>=0?(allData[win_index] || defData) : defData; + let WStocksData=wind['WStocksData'] || []; + if(WindowStocks.length>0){ + let isAllChecked=1; + for(var i=0;i a.ProductId==stockProd.ProgramStockValue); + let sd1=sdIndex1>=0?WStocksData[sdIndex1]:{}; + let isPROGPresent=sd1.isPROGPresent; + if(isPROGPresent==null || isPROGPresent=='' || isPROGPresent==0 || isPROGPresent=='0'){ + isAllChecked=0 + } + + if(i==WindowStocks.length-1){ + resolve(isAllChecked); + } + } + } + else{ + resolve(0); + } + + }).catch((err)=>{ + console.log(err); + return 0; + }); + } + + function onWindowDataClean(){ + if(DataCleanAnim!=null){ + let anim=isPresentClean==1?1:''; + Animated.timing(DataCleanAnim, { + toValue:anim, + duration:400, + useNativeDriver:false, + }).start(); + } + let allData=WindowData; + let WindowSplits = []; + for(var s=0;si.ProgramId==window.ProgramId && i.ProgramDefinitionId==window.ProgramDefinitionId + let defData={'ProgramId':DataCleanItem.ProgramId,'ProgramDefinitionId':DataCleanItem.ProgramDefinitionId,'isAllSKUChecked':0,'WindowSplits':WindowSplits,'WindowQA':{},'WStocksData':[],isPresent:isPresentClean}; + const win_index=allData.findIndex(i=>i.ProgramId==DataCleanItem.ProgramId && i.ProgramDefinitionId==DataCleanItem.ProgramDefinitionId); + allData[win_index]=defData + + let objIndex = InputChange.findIndex((obj => obj.ProgramId == DataCleanItem.ProgramId && obj.ProgramDefinitionId==DataCleanItem.ProgramDefinitionId)); + let winArr=[...InputChange] + winArr[objIndex].Flag=false + + setInputChange(winArr) + WindowDataRef.current=allData + setWindowData(allData); + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setDataCleanModal(false) + setrerenderdata(!rerenderdata); + } + + function checkAllSKUs(val,window){ + + let WindowStocks=window.WindowStocks || []; + let allData=WindowData; + let defData={'ProgramId':window.ProgramId,'ProgramDefinitionId':window.ProgramDefinitionId}; + const win_index=allData.findIndex(i=>i.ProgramId==window.ProgramId && i.ProgramDefinitionId==window.ProgramDefinitionId); + let wind=win_index>=0?(allData[win_index] || defData) : defData; + let WStocksData=wind['WStocksData'] || []; + console.log('WStocksData before:',WStocksData) + for(var i=0;i a.ProductId==stockProd.ProgramStockValue); + let sd=sdIndex>=0?WStocksData[sdIndex]:{'ProductId':stockProd.ProgramStockValue,'Stock':''}; + let isPROGPresent=(val==1 || val=='1')?1:0; + sd['isPROGPresent']=isPROGPresent; + + sdIndex>=0?(WStocksData[sdIndex]=sd):(WStocksData.push(sd)); + } + + + wind['WStocksData']=WStocksData; + wind['isAllSKUChecked']=val==1?1:0; + console.log('wind updated'); + win_index>=0?allData[win_index]=wind:allData.push(wind); + + WindowDataRef.current=allData + setWindowData(allData); + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + + function onSaveCancel(){ + setShowAlert(false); + } + + + + function openImageRefView(windowIndex=0){ + setrefImageIndex(windowIndex); + setShow_zoomImage(true); + } + + function FilterStores(searchedQry){ + searchedQry=searchedQry.toLowerCase(); + console.log('searchedQry',searchedQry); + let arr=[]; + let newWindows=[]; + if(searchedQry!=null && searchedQry!=''){ + + for(let i=0;i + + {ST.DragItemsInOrder} + {ST.Pressandholdtodrag} + {setRatingValue(data)}} + keyExtractor={(item) => item.AnswerId} + renderItem={renderItem} + /> + + {onRatingCancel()}}> + {ST.Cancel} + + {onRatingSave()}}> + {ST.Save} + + + + + ) + } + + function render_Picker(label_key,value_key,onChange=()=>{},selected_data={}){ + var data=[]; + let qtn=selected_data.qtn || {}; + let window=selected_data.window || {}; + let isQtnDisabled=qtn.isDisabled!=null || qtn.isDisabled!=''?false:true; + let allAnswers=qtn.Answers || []; + + allAnswers.map((item,index)=>{ + let obj={ key: index, label: item[label_key],value:item[value_key] }; + if(selected_data.value==item[label_key]) + obj['component']= {item[label_key]}; + data.push(obj); + }); + + return ( + {onChange(option,qtn,window) }} + overlayStyle={customStyle.addVisPickerOverlay} + cancelContainerStyle={customStyle.addVisPicker_OptionContainerStyle} + optionStyle={customStyle.addvis_opStyle} + optionTextStyle={customStyle.addvis_opTextStyle} + optionContainerStyle={customStyle.addVisPicker_OptionContainerStyle} + selectedKey={'1'} + disabled={isQtnDisabled} + > + {(selected_data.value!=null && selected_data.value!=''?selected_data.value: '-'+ST.select+'-')} + + ) + } + + function renderDatePicker(qtn,window){ + let qtnn=qtn; + let DateRange=qtn.DateRange; + let maxDate=moment().add(10,'years').format('MM/DD/YYYY'); + let minDate=moment().subtract(10,'years').format('MM/DD/YYYY'); + if(DateRange=='RFD'){ + maxDate=moment().format('MM/DD/YYYY'); + } + else if(DateRange=='RPD'){ + minDate=moment().format('MM/DD/YYYY'); + } + + return ( + {setTextValue(selectedDate,qtnn,window)}} + maximumDate={new Date(maxDate)} + minimumDate={new Date(minDate)} + /> + ); + } + + async function OpenImgModal(imgPath,window,splitItem,splitItemIndex,cameraType){ + setSelectedImg(imgPath) + setShowModal(true); + if((imgPath!='' && imgPath!=null)){ + setShowImageSaveOp(false); + } + else{ + setShowImageSaveOp(true); + } + setReCapImgModalObj({window,splitItem,splitItemIndex,cameraType}) + // _OpenCaptureImage_Modal(imgPath,window,splitItem,splitItemIndex,cameraType) + + } + + function cancelImage(){ + // setImage1(''); + setSelectedImg(''); + setReCapImgModalObj({}) + setShowModal(false); + } + + function _renderWindow(){ + let RemarkEnableIndex=KPIFields.findIndex(i=>i.KPIFieldName=='RemarkEnable') + let RemarkEnableKPIObj=RemarkEnableIndex>=0?KPIFields[RemarkEnableIndex]:{}; + let RemarkEnable=RemarkEnableIndex>=0?RemarkEnableKPIObj['KPIFieldEnable']:false; + + let isListedSKUIndex=KPIFields.findIndex(i=>i.KPIFieldName=='ListedSKUCheckbox'); + let isListedSKUKPIObj=isListedSKUIndex>=0?KPIFields[isListedSKUIndex]:{}; + let isListedSKUEnable=isListedSKUIndex>=0?isListedSKUKPIObj['KPIFieldEnable']:true; + + return ( + + + `window_${index.toString()}`} + renderItem={({item,index})=>{ + const window=item; + const windowIndex=index; + + let isImage1=window.ProgramImage1=='true' || window.ProgramImage1==1?1:0; + let isImage2=window.ProgramImage2=='true' || window.ProgramImage2==1?1:0; + let isNAImageAvl=window.ProgramNotExistCamera=='true' || window.ProgramNotExistCamera==1?1:0; + let isNAReasonEnable=window.ProgramNotExistReasonEnable=='true' || window.ProgramNotExistReasonEnable==1? 1:0; + let isReasonEnable=window.ProgramExistReasonEnable=='true' || window.ProgramExistReasonEnable==1? 1:0; + let isStockReq=window.ProgramElementStockRequired=='true' || window.ProgramElementStockRequired==1?1:0; + let StockQtyRequired=window.StockQtyRequired=='true' || window.StockQtyRequired==1?1:0; + let PromoTitleEnable=window.PromoDefinitionTitleEnable=='true' || window.PromoDefinitionTitleEnable==1? 1:0; + let PromoTitle=window.PromoDefinitionTitle!=null && window.PromoDefinitionTitle!='undefined'? window.PromoDefinitionTitle:""; + let DisplayAreaRequired=window.DisplayAreaRequired=='true' || window.DisplayAreaRequired==1?1:0; + let DisplayAreaRequiredLabel=window.DisplayAreaRequiredLabel!=null && window.DisplayAreaRequiredLabel!='undefined'? window.DisplayAreaRequiredLabel:""; + + // let isStock_CheckAssrt=window.ProgramElementCheckAssortment=='true' || window.ProgramElementCheckAssortment==1?1:0; + let RefImage=window.ProgramRefImage; + let camera1Label=window.ProgramImage1Lable || ''; + let camera2Label=window.ProgramImage2Lable || ''; + let WindowQuestions=window.WindowQuestions || []; + let WindowStocks=window.WindowStocks || []; + + + const wind=WindowData.find(i=>i.ProgramId==window.ProgramId && i.ProgramDefinitionId==window.ProgramDefinitionId); + let isPresent=wind.isPresent!=null && wind.isPresent!=''?wind.isPresent:'0'; + let ReasonId=wind.ReasonId!=null?wind.ReasonId:''; + let Reason=wind.Reason!=null?wind.Reason:''; + + let NAImage1=wind.NAImage1!=null?wind.NAImage1:''; + let NAImage1Path=wind.NAImage1Path!=null?wind.NAImage1Path:''; + let remark=wind.remark!=null?wind.remark:''; + let RemarkText=wind.RemarkText!=null?wind.RemarkText:''; + let showOtherText=wind.showOtherText!=null?wind.showOtherText:false; + let WindowSplits=wind.WindowSplits || []; + let QuestionsData=wind.WindowQA || {}; + let WStocksData=wind.WStocksData || []; + let isAllSKUChecked=wind.isAllSKUChecked==1 || wind.isAllSKUChecked=="1"; + let displayAreaInSqrFeet=wind.displayAreaInSqrFeet!=null?wind.displayAreaInSqrFeet:(wind.displayAreaInSqrFeet===0?'0':''); + let PosDisplayAreaReasonId=wind.PosDisplayAreaReasonId!=null?wind.PosDisplayAreaReasonId:''; + let PosDisplayAreaReason=wind.PosDisplayAreaReason!=null?wind.PosDisplayAreaReason:''; + let NegDisplayAreaReasonId=wind.NegDisplayAreaReasonId!=null?wind.NegDisplayAreaReasonId:''; + let NegDisplayAreaReason=wind.NegDisplayAreaReason!=null?wind.NegDisplayAreaReason:''; + let showPosDAReason=wind.showPosDAReason==1 || wind.showPosDAReason=='1'; + let showNegDAReason=wind.showNegDAReason==1 || wind.showNegDAReason=='1'; + + var xpos=isPresent=='1'||isPresent==1?-75:0; + if(window.animatedChoice!=null ){ + xpos=window.animatedChoice.interpolate({ + inputRange:[0,1], + outputRange:[0,-75], + }); + } + + let EF_Window=errorfield.EF_Window!=null ?errorfield.EF_Window:{}; + let show_errorhere=error==true && EF_Window.ProgramId==window.ProgramId && EF_Window.ProgramDefinitionId==window.ProgramDefinitionId; + + // if not Present fields + + // this will show error field in red (if window is present and exist reason is enabled and not filled ) or (if window is not present and Not exist reason is enabled and not filled ) + let EF_NExistReason=errorfield.EF_NExistReason || ''; + let EStyle_NExistReason=show_errorhere && EF_NExistReason=='NExistReason'?customStyle.stk_inptSTyle_error:{}; + + let EF_NExistRemark=errorfield.EF_NExistRemark || ''; + let EStyle_NExistRemark=show_errorhere && EF_NExistRemark=='NExistRemark'?customStyle.stk_inptSTyle_error:{}; + + let EF_NExistImage=errorfield.EF_NExistImage || ''; + let EStyle_NExistImage=show_errorhere && EF_NExistImage=='NExistImage'?customStyle.error_CatImage2:{}; + + let EF_DisplayArea=errorfield.EF_DisplayArea || ''; + let EStyle_DisplayArea=show_errorhere && EF_DisplayArea=='DisplayArea'?customStyle.stk_inptSTyle_error:{}; + + + let EF_DisplayAreaPosReason=errorfield.EF_DisplayAreaPosReason || ''; + let EStyle_DisplayAreaPosReason=show_errorhere && EF_DisplayAreaPosReason=='DisplayAreaPosReason'?customStyle.stk_inptSTyle_error:{}; + + + let EF_DisplayAreaNegReason=errorfield.EF_DisplayAreaNegReason || ''; + let EStyle_DisplayAreaNegReason=show_errorhere && EF_DisplayAreaNegReason=='DisplayAreaNegReason'?customStyle.stk_inptSTyle_error:{}; + + return( + + + + {window.ProgramName} + { + window && window.ChildName !="" && {window.ChildName} + } + {(PromoTitleEnable==1 && PromoTitle!=null && PromoTitle!='') && {PromoTitle}} + {openImageRefView(index)}}> + + + + + + + + + {ST.IsPresent} + + + + {onChoiceSelect(window,1,'isPresent',window.animatedChoice)}}> + {ST.Yes} + + {onChoiceSelect(window,0,'isPresent',window.animatedChoice)}}> + {ST.No} + + + + + {((isPresent!='1' && isNAReasonEnable==true) || (isPresent=='1' && isReasonEnable==true)) && + + {ST.SelectReason} + {} + + } + + + {(isPresent!='1' && isNAImageAvl==true) && + + + + {ST.CaptureImage} + + + + + + { (NAImage1Path=='' || NAImage1Path==null) && + {openCamera(window,{},0,'1','3')}}> + + + } + { (NAImage1Path!='' && NAImage1Path!=null) && + + + {openCamera(window,{},0,'1','3')}}> + + + + } + + + + + + } + + + {isPresent!='1' && showOtherText==true && + + {ST.EnterRemark} + {onCatTextChange(window,'RemarkText',val,'text')}} + /> + + } + + {(isPresent=='1') && + + + {(isStockReq==true && WindowStocks.length>0) && + + + {(isListedSKUEnable==true?ST.SelectProducts:'Enter Stocks')} + + {isListedSKUEnable==true && + + {checkAllSKUs((isAllSKUChecked==1?0:1),window)}}> + {let val1=(val==true)?1:0; checkAllSKUs(val1,window) }} + style={[customStyle.WStkHdr_checkbox,(Platform.OS=='ios'?{height:20,width:20,marginLeft:5}:{})]} + tintColors={{ true:PageTheme.$primary_color, false:PageTheme.$text_color_light }} + /> + {ST.SelectAll} + + } + `wstock_${index.toString()}`} + renderItem={({item,index})=>{ + let stockProd=item; + let stockProdIndex=index; + let sd=WStocksData.find(i=> i.ProductId==stockProd.ProgramStockValue) || {}; + let stock=sd.Stock!=null?sd.Stock:''; + let isPROGPresent=sd.isPROGPresent!=null?sd.isPROGPresent:0; + + + // highlight prd errors + let EF_stockProdIndex=errorfield.EF_stockProdIndex || ''; + let showPrdErrHere=EF_stockProdIndex==stockProdIndex; + + let EF_stock=errorfield.EF_stock || ''; + let EStyle_StockInput=show_errorhere && showPrdErrHere && EF_stock=='input1_'?customStyle.stk_inptSTyle_error:{}; + + + return( + + {isListedSKUEnable!=true && {stockProd.ProductName}} + {isListedSKUEnable==true && + + + {let val1=(val==true)?1:0; setWindowStockVal(val1,window,stockProd,'isPROGPresent') }} + style={[customStyle.WStkHdr_checkbox,(Platform.OS=='ios'?{height:20,width:20,marginTop:5,marginLeft:5,}:{})]} + tintColors={{ true:PageTheme.$primary_color, false:PageTheme.$text_color_light }} + /> + + {stockProd.ProductName} + } + {((isListedSKUEnable==true && StockQtyRequired==1 && isPROGPresent==1 ) || isListedSKUEnable!=true) && + + + + Stock + + + + {inputRefs.current['input1_'+stockProd.ProgramDefinitionId+'_'+index]=reff;}} + placeholder="" + autoComplete='off' + placeholderTextColor={PageTheme.$placeholder_color} + keyboardType={'number-pad'} + returnKeyType={(Platform.OS==='ios')?'done':'next'} + blurOnSubmit={false} + value={stock+''} + onSubmitEditing={()=>{focusToNext(WindowStocks,windowIndex,stockProd,index)}} + onChangeText={(val)=>{setWindowStockVal(val,window,stockProd,'Stock','numeric')}} + /> + + + + } + + ); + }} + /> + + } + {( window.NoOfSplit>0 && WindowSplits.length>0 && (isImage1==1 || isImage2==1)) && + + + {currentMenu.MenuName+' Images'} + + `spliItem_${index.toString()}`} + renderItem={({item,index})=>{ + let splitItem=item; + let splitItemIndex=index; + let Image1Name=splitItem['Image1Name']!=null && splitItem['Image1Name']!=''?splitItem['Image1Name']:''; + let Image2Name=splitItem['Image2Name']!=null && splitItem['Image2Name']!=''?splitItem['Image2Name']:''; + let Image1=splitItem['Image1']!=null && splitItem['Image1']!=''?splitItem['Image1']:''; + let Image2=splitItem['Image2']!=null && splitItem['Image2']!=''?splitItem['Image2']:''; + let isImg1mad=splitItem['img1Required'] || false; + let isImg2mad=splitItem['img2Required'] || false; + + // highlight slit image box + let EF_splitItemIndex=errorfield.EF_splitItemIndex || ''; + let showSplitItemErrHere=EF_splitItemIndex==splitItemIndex; + + let EF_splitImage1=errorfield.EF_splitImage1 || ''; + let EStyle_splitImage1=show_errorhere && showSplitItemErrHere && EF_splitImage1=='splitImage1'?customStyle.error_CatImage2:{}; + + let EF_splitImage2=errorfield.EF_splitImage2 || ''; + let EStyle_splitImage2=show_errorhere && showSplitItemErrHere && EF_splitImage2=='splitImage2'?customStyle.error_CatImage2:{}; + + + return( + + {isImage1==1 && + + + {((Image1=='' || Image1==null) && isImg1mad) ? + {openCamera(window,splitItem,splitItemIndex,'1')}}> + + : (Image1=='' || Image1==null ) ? + {openCamera(window,splitItem,splitItemIndex,'1')}}> + + :(Image1!='' || Image1!=null ) ? + {OpenImgModal(Image1,window,splitItem,splitItemIndex,'1')}}> + + : null + } + {camera1Label} + + } + {isImage2==1 && + + + + {((Image2=='' || Image2==null) && isImg2mad) ? + {openCamera(window,splitItem,splitItemIndex,'2')}}> + + : (Image2=='' || Image2==null ) ? + {openCamera(window,splitItem,splitItemIndex,'2')}}> + + :(Image2!='' || Image2!=null ) ? + {OpenImgModal(Image2,window,splitItem,splitItemIndex,'2')}}> + + : null + } + {camera2Label} + + } + + ); + }} + /> + + } + + {(WindowQuestions.length>0) && + + + {currentMenu.MenuName+' Questions'} + + {WindowQuestions.map((item,index)=>{ + + let qtn=item; + let qtnIndex=index; + let selansid='',selanswer='',selimg='',showImageTag=false,showImgFlag=false,filePath=""; + let id_key=qtn.ProgramQuestionId+'_AnswerId'; + let ans_key=qtn.ProgramQuestionId+'_Answer'; + let multi_key=qtn.ProgramQuestionId+'_MultiOption'; + let date_key=qtn.ProgramQuestionId+'_Date'; + let img_key=qtn.ProgramQuestionId+'_ImagePath1'; + let imgname_key=qtn.ProgramQuestionId+'_ImageName1'; + let rating_key=qtn.ProgramQuestionId+'_Rating'; + + let list_mcdata=[]; + let VQDefaultQuestionEnable=qtn.VQDefaultQuestionEnable=='true' || qtn.VQDefaultQuestionEnable==1 || qtn.VQDefaultQuestionEnable=='1'?true:false; + let isDisabled=qtn.isDisabled; + if(qtn.QuestionType=='Single choice list') + { + selansid=QuestionsData[id_key]!=null ?QuestionsData[id_key] :''; + selanswer=QuestionsData[ans_key]!=null ?QuestionsData[ans_key] :''; + } + else if(qtn.QuestionType=='Multi choice list') + { + if(qtn.Answers!=null){ + for(var i=0;i0){ + // let arr=[]; + // for(var i=0;i0){ + for(var i=0;i=0)){ + showImageTag=true; + } + + } + } + } + + if(showImageTag){ + selimg=QuestionsData[img_key]!=null && QuestionsData[img_key]!=''?'file://'+QuestionsData[img_key]:''; + } + + let EF_qtn=errorfield.EF_qtn!=null?errorfield.EF_qtn:{}; + let showQtnErrHere=EF_qtn.ProgramQuestionId==qtn.ProgramQuestionId; + //Qtn_MultiChoice + let EF_Qtn_MultiChoice=errorfield.EF_Qtn_MultiChoice || ''; + let EStyle_Qtn_MultiChoice=show_errorhere && showQtnErrHere && EF_Qtn_MultiChoice=='Qtn_MultiChoice'?customStyle.stk_MultiSSTyle_error:customStyle.wind_MultiSearchInputStyle; + + + let EF_Qtn_Date=errorfield.EF_Qtn_Date || ''; + let EStyle_Qtn_Date=show_errorhere && showQtnErrHere && EF_Qtn_Date=='Qtn_Date'?customStyle.stk_inptSTyle_error:{}; + + let EF_Qtn_Input=errorfield.EF_Qtn_Input || ''; + let EStyle_Qtn_Input=show_errorhere && showQtnErrHere && EF_Qtn_Input=='Qtn_Input'?customStyle.stk_inptSTyle_error:{}; + + let EF_Qtn_Image=errorfield.EF_Qtn_Image || ''; + let EStyle_Qtn_Image=show_errorhere && showQtnErrHere && EF_Qtn_Image=='Qtn_Image'?customStyle.stk_inptSTyle_error:{}; + + + + if(!isDisabled){ + return( + + {qtn.ProgramQuestionName} + {qtn.QuestionType=='Single choice list' && qtn.Answers && + render_Picker('Answer','AnswerId',onselectionChange,{value:selanswer,qtn:qtn,window:window}) + } + {qtn.QuestionType=='Multi choice list' && qtn.Answers && + { setMultiSelectValue(selectedItems,qtn,window) }} //setMultiSelectValue(selectedItems,qtn) + selectedItems={selansid} + selectText="Pick Items" + searchInputPlaceholderText={ST.SearchItems+"..."} + // onChangeInput={ (text)=> console.log(text)} + tagRemoveIconColor={PageTheme.$primary_color} + tagBorderColor={PageTheme.$primary_color} + tagTextColor={PageTheme.$primary_color} + selectedItemTextColor={PageTheme.$primary_color} + selectedItemIconColor={PageTheme.$primary_color} + itemTextColor={PageTheme.$text_color} + displayKey="Answer" + searchInputStyle={EStyle_Qtn_MultiChoice} + submitButtonColor={PageTheme.$primary_color} + submitButtonText={ST.Submit} + /> + } + { (qtn.QuestionType=='Number' || qtn.QuestionType=='Decimal' || qtn.QuestionType=='Text') && + {setTextValue(val,qtn,window,(qtn.QuestionType=='Decimal'?'decimal':(qtn.QuestionType=='Text'?'text':'numeric')))}} + /> + } + { + (qtn.QuestionType=='Date') && + + {selansid!=''?selansid:'MM/YYYY'} + {setDateValue(selanswer);showQtnDatePicker(qtn,window,true)}}> + + + + } + { + (qtn.QuestionType=='QR') && + + {selanswer!=''?selanswer:''} + {setQREnable(true);setQRqtnData({qtn,window});setShowQRCamera(true);}}> + {/* */} + + + + } + { ((qtn.showDatePicker==true || qtn.showDatePicker=='true') && (qtn.QuestionType=='Date') ) && + renderDatePicker(qtn,window) + } + { + (qtn.QuestionType=='Rating') && + + {selanswer} + {setRatingQtn(qtn);setRatingWindow(window);setShowRating(true);}}> + + + + } + + { + // (qtn.QuestionType=='Audio') && + // + // {selanswer} + // {show_recorder(qtn);}}> + // + // + // + } + + { + showImageTag && + + + {openCamera(window,{},0,'1','2',qtn)}}> + + + + } + + + + ) + } + else{ + return null; + } + })} + + } + + { DisplayAreaRequired==1 && + + {DisplayAreaRequiredLabel} + {(window.PrevDisplayArea!='') && {DisplayAreaRequiredLabel+" in Last Visit:"+window.PrevDisplayArea}} + {onCatTextChange(window,'displayAreaInSqrFeet',val,'numeric')}} + /> + + } + + {DisplayAreaRequired==1 && showPosDAReason && + + {'Reason for Plus'} + {} + + + } + {DisplayAreaRequired==1 && showNegDAReason && + + {'Reason for Minus'} + {} + + } + { RemarkEnable==true && + + {ST.Remark} + {onCatTextChange(window,'remark',val)}} + /> + + } + + + } + + + + + + + ); + }} + /> + + + ) + } + + function _renderHeader(currentIndex){ + return( + + {`${(currentIndex+1)}/${zoomImageUrl.length}`} + {setShow_zoomImage(false) }}> + + + + ) + } + + const onCancelClean = () =>{ + setDataCleanModal(false) + } + const onclear = () => { + onWindowDataClean(DataCleanItem) + } + + return ( + + {processing && } + + {_OpenCaptureImage_Modal()} + {ConfirmSaveAlert(props,showAlert,onSaveCancel,saveData)} + {ConfirmSaveAlert(props,DataCleanModal,onCancelClean,onclear,'Your data will be clean',)} + {setShowQRCamera(false);onQRScanned(imgData)}} showCamera={showQRCamera} onHideCamera={()=>{setShowQRCamera(false);}}/> + {setShowCamera(false);getImage(imgData)}} showCamera={showCamera} onHideCamera={()=>{setShowCamera(false);}}/> + + + + + {setSearchedItem(val); FilterStores(val)}} + /> + {FilterStores(searchedItem)}}> + + + + { Object.keys(storeData).length>0 && + + {_renderWindow()} + + } + + {onSubmitData()}}/> + + + + + { showRating==true && + renderRatingView() + } + {show_zoomImage && + + null} + /> + + } + + ); +} + + +export default connect(mapStateToProps, mapDispatchToProps)(ProgramQuestionsOneApp); \ No newline at end of file diff --git a/PerformicsSrc/src/screens/Project.js b/PerformicsSrc/src/screens/Project.js new file mode 100644 index 0000000..6a53ff3 --- /dev/null +++ b/PerformicsSrc/src/screens/Project.js @@ -0,0 +1,204 @@ +import React, { useEffect, useContext, useState, useRef } from 'react'; +import SplashScreen from 'react-native-splash-screen'; +//import SplashScreen from 'react-native-bootsplash'; +import Container from '../components/container'; +import { useRoute } from '@react-navigation/native'; +import GradientButton from '../components/gradientButton'; +import { globalStyles, customStyles, GetPageTheme, HP, WP } from "../styles/Global"; +import { StatusBar, Image, TextInput, View, Text, ScrollView, Platform, PermissionsAndroid, Animated, Keyboard, Alert } from 'react-native'; +import { ReactReduxContext, connect, useSelector, useDispatch } from 'react-redux'; +import { mapStateToProps, mapDispatchToProps } from '../reducers/contextProvider'; +import { notify } from '../components/notify'; +import moment from 'moment'; +import { AlertForServerDT, getProjectData, getProjectInfo, getServerDT } from '../controller/functions'; +import { get_item, set_item, clear_item } from '../components/localStorage'; +import { version, sloganline, appname, copyrightText, logoImage } from '../constants/constants'; +import { requestMultiplePerms } from '../components/geolocation'; +import CustomLoader from '../components/CustomLoader'; +import { Ionicons } from '../components/icons'; +import Graphic1 from '../assets/performics/product_id.svg'; + +//Project Page +function Project(props) { + // get dynamic styles based on dark theme or pageactive + const route = useRoute(); + const PageTheme = GetPageTheme(props.DarkMode, route.name); + const customStyle = customStyles(props.DarkMode, route.name); + const globalStyle = globalStyles(props.DarkMode, route.name); + const [processing, setProcessing] = useState(false); + const animatedEffects = useRef(new Animated.Value(0)).current; + // get and define props and states + const [projectId, setProjectId] = useState(''); + // const labelAnim = useRef(new Animated.Value(0)).current; + + useEffect(() => { + SplashScreen.hide(); + requestMultiplePerms(); // check for permissions + const keyboardDidShowListener = Keyboard.addListener( + 'keyboardDidShow', + () => { + Animated.timing(animatedEffects, { + toValue: 1, + duration: 400, + useNativeDriver: (Platform.OS == 'ios' ? false : true), + }).start(); + } + ); + const keyboardDidHideListener = Keyboard.addListener( + 'keyboardDidHide', + () => { + Animated.timing(animatedEffects, { + toValue: 0, + duration: 400, + useNativeDriver: (Platform.OS == 'ios' ? false : true), + }).start(); + } + ); + return () => { + keyboardDidHideListener.remove(); + keyboardDidShowListener.remove(); + }; + }, []); + + + const update_project = async () => { + if (projectId != '' && projectId != null && projectId !==undefined) { + setProcessing(true); + await getProjectData(projectId) + .then((res) => { + console.log(res); + setProcessing(false); + console.log("reaaaa", res) + if (res.success && res.responseData.projectName != null) { + const pdata = getProjectInfo(res.responseData, projectId); + props.set_project(pdata); + //set project info in encryted local storage + Promise.all([ + set_item('firsttime', 'done'), + set_item('projectCode', projectId), + set_item('projectInfo', JSON.stringify(res.responseData)), + ]); + // set_item('firsttime', 'done'); + // set_item('projectCode', projectId); + // set_item('projectInfo', JSON.stringify(res.responseData)); + // open login screen + props.navigation.navigate('Login'); + } else { + notify('Project not found, ensure if you have entered correct project Id', 'SHORT'); + Alert.alert( + 'Data Parsing Error', + `'${res.rawData}'\n\n Please share with support team.`, + [ + { + text: 'Ok', + onPress: () => { }, + }, + ], + { cancelable: false } + ); + } + }).catch((err) => { + setProcessing(false); + console.log('onPage Project error', err); + }); + } + else { + notify('Please enter Project Id', 'SHORT'); + } + } + + function _renderAnimPart() { + let pl_scale = 1, illus_scale = 1, illus_ty = 0, formty = 0; + if (animatedEffects != null) { + pl_scale = animatedEffects.interpolate({ + inputRange: [0, 1], + outputRange: [1, 0.7], + }); + illus_scale = animatedEffects.interpolate({ + inputRange: [0, 1], + outputRange: [1, 0.5], + }); + illus_ty = animatedEffects.interpolate({ + inputRange: [0, 1], + outputRange: [0, -150], + }); + formty = animatedEffects.interpolate({ + inputRange: [0, 1], + outputRange: [0, -120], + }); + } + return ( + + + + + + + + + Hey There + Enter your Project Id + + + + + + + + + + ) + } + + return ( + + {processing && } + + {_renderAnimPart()} + + + + + {version} + {copyrightText} + + + + + ); +} + +export default connect(mapStateToProps, mapDispatchToProps)(Project) \ No newline at end of file diff --git a/PerformicsSrc/src/screens/Promotion.js b/PerformicsSrc/src/screens/Promotion.js new file mode 100644 index 0000000..1d1199a --- /dev/null +++ b/PerformicsSrc/src/screens/Promotion.js @@ -0,0 +1,759 @@ +import React,{useState,useEffect,useRef} from 'react'; +import Container from '../components/container'; +import { useRoute } from '@react-navigation/native'; +import { globalStyles,customStyles,GetPageTheme } from "../styles/Global"; +import {StatusBar,Image,TextInput,View,Text,ScrollView,TouchableOpacity,Platform,PermissionsAndroid,FlatList, Alert, Animated, Keyboard} from 'react-native'; +import { ReactReduxContext,connect,useSelector, useDispatch } from 'react-redux'; +import { mapStateToProps,mapDispatchToProps } from '../reducers/contextProvider'; +import SQLite from 'react-native-sqlite-2'; +import {notify} from '../components/notify'; +import moment from 'moment'; +import {getDownloadJson,marktext1,marktext2} from '../controller/functions'; +import {get_item,set_item,clear_item} from '../components/localStorage'; +import {version,sloganline,appname,testurl,db, colors_Arr, common_ImagePath,ImageFolderPath} from '../constants/constants'; +import CustomHeader from '../components/customHeader'; +import {Card, Menu, Switch} from 'react-native-paper'; +import {AntDesign, Entypo, FontAwesome, MaterialCommunityIcons} from '../components/icons'; +import { stat } from 'react-native-fs'; +import CustomLoader from '../components/CustomLoader'; +import LinearGradient from 'react-native-linear-gradient'; +import { AppTables } from '../constants/tableConstants'; +import { SvgXml } from 'react-native-svg'; +import {launchCamera, launchImageLibrary,CameraOptions} from 'react-native-image-picker'; +import * as RNFS from 'react-native-fs'; +import GradientButton from '../components/gradientButton'; + +import CameraImg from '../assets/performics/camera_front_image.svg' +import addImg from '../assets/performics/add_image.svg'; +import CustomModal from '../components/CustomModal'; +import { Q_getpaidvisibility, Q_getpromotionmappingList } from '../constants/ConstantQueries'; +import { Picker } from '@react-native-picker/picker'; +import ImageViewer from 'react-native-image-zoom-viewer'; +import { ConfirmSaveAlert } from '../components/alert'; +import CustomCamera from '../components/Camera'; + +function Promotion(props) { + const route = useRoute(); + const ST=props.StaticText || {}; + + // get all theme styles acc to current theme set + const PageTheme=GetPageTheme(props.DarkMode,route.name); + const customStyle=customStyles(props.DarkMode,route.name); + + + const [processing, setProcessing] = useState(true); + const [loaderTitle, setLoaderTitle] = useState(); + const [isAdhocScreen, setIsAdhocScreen] = useState(false); + const [storeData, setStoreData] = useState({}); + const [currentMenu, setCurrentMenu] = useState({}); + const [promotionData, setPromotionData] = useState([]); + const [globalPromoData, setGlobalPromoData] = useState([]); + const [rerenderdata, setrerenderdata]= useState(0); + const [rerenderdata2, setrerenderdata2]= useState(0); + + const [SKUStockData, setSKUStockData] = useState([]); + const [showAlert, setShowAlert] = useState(false); + const [reasons_list, setReasons_list] = useState([]); + const [show_zoomImage, setShow_zoomImage] = useState(false); + const [zoomImageUrl, setZoomImageUrl] = useState([]); + const [hasUnsavedChanges,setHasUnsavedChanges] = useState(false); + const [showCamera, setShowCamera] = useState(false); + const [getImageProps,setGetImageProps]= useState({}); + + const [searchedItem, setSearchedItem]= useState(''); + + const d1=new Date(); + const d2=moment(d1).format('MM/DD/YYYY'); + const zoomView=useRef(null); + + useEffect(() => { + setLoaderTitle(ST.Loading+'...') + let params=props.route.params? props.route.params:{}; + let storeData1=params.storeData || {}; + let menu1=params.menu || {}; + + let isAdhoc=params.isAdhoc || false; + setIsAdhocScreen(isAdhoc); + setStoreData(storeData1); + setCurrentMenu(menu1); + + getData(storeData1,menu1); + + props.navigation.addListener('beforeRemove', onBeforeRemove); + + return function cleanup() { + props.navigation.removeListener('beforeRemove', onBeforeRemove); + }; + }, []); + + useEffect(() => { + props.navigation.removeListener('beforeRemove', onBeforeRemove); + props.navigation.addListener('beforeRemove', onBeforeRemove); + }, [hasUnsavedChanges]); + + useEffect(() => { + props.navigation.removeListener('beforeRemove', onBeforeRemove); + props.navigation.addListener('beforeRemove', onBeforeRemove); + }, [showCamera]); + + function onBeforeRemove(e){ + if(showCamera==true){ + e.preventDefault(); + setShowCamera(false); + } + else{ + if (hasUnsavedChanges==true) { + e.preventDefault(); // Prevent default behavior of leaving the screen + onRemoveScreen(e); + } + else{ + return; + } + } + } + + function onRemoveScreen(e){ + Alert.alert( + "", + ST.Doyoureallywanttoexitthescreen, + [ + { + text: ST.Cancel, + onPress: () => {}, + style: "cancel" + }, + { text: ST.OK, onPress: () => {setHasUnsavedChanges(false);props.navigation.dispatch(e.data.action);} } + ] + ); + } + + async function getData(storeData1,menu1){ + try { + let {StoreId,ChainId,StateId,StoreTypeId}=storeData1; + let allCats=[]; + await db.transaction(async function (txn) { + let q2=Q_getpromotionmappingList(storeData1); + // let q2=Q_getpaidvisibility(storeData1); + + await txn.executeSql(q2,[],async function (txn2, txnres2) { + console.log('promotion cats',txnres2.rows.length); + if(txnres2.rows.length>0){ + let arr=[]; + for(var i=0;i { + let seletlist=`p.PROMOTION_ID as PromoId,p.PROMOTION as Promotion,p.POS_AVL,p.STOCK_AVL,p.PROMOTALK_AVL,p.IMAGE1`; + let sku_q=`SELECT ${seletlist} FROM ${AppTables.PROMOTION_DATA} p WHERE p.STORE_ID='${StoreId}' and p.VISIT_DATE='${d2}' and p.SUB_CATEGORY_ID='${item.SubCategoryId}' `; + + let sku_q2=`SELECT DISTINCT m.PromoId as PromoId,m.Promotion as Promotion FROM Mapping_Promotion m where m.SubCategoryId='${item.SubCategoryId}' and m.ChainId='${ChainId}' and m.StoreTypeId='${StoreTypeId}'and m.StateId='${StateId}'`; + + return await txn.executeSql(sku_q,[],async function (txn2, txnres) { + console.log('inserted data:',txnres.rows.length); + if(txnres.rows.length>0){ + let arr=[]; + + for(var i=0;i0){ + let arr=[]; + console.log('avlbl prmotions:',txnres2.rows.length); + for(var i=0;i{ + + }); + }); + } catch (err) { + console.log(err); + } + } + + + + async function getImage(imgdata){ + let cat=getImageProps.cat || ''; + let skuItem=getImageProps.skuItem || ''; + let type=getImageProps.type || ''; + if(typeof imgdata =='object' && imgdata.errorCode=='camera_unavailable'){ + notify(ST.Cameraunavailable); + } + else if(typeof imgdata =='object' && imgdata.uri!=null){ + const img=imgdata; + const imgurl=img.uri, imgWidth=img.width, imgHeight=img.height; + let isImgFromGallery=img.fromGallery!=null?img.fromGallery:false; + let picture_clickedd=isImgFromGallery==true?img.datetime:new Date(); + let picture_clicked_time=moment(picture_clickedd).format('DD-MM-YYYY HH:mm:ss') + + const mark_text1=picture_clicked_time; + const mark_text2='Store Name:'+storeData.StoreName+' | Store Id:'+storeData.StoreId+' | User Id:'+storeData.EmpId+' | Image Type: Promotion'+' | Date:'+picture_clicked_time; + + await marktext1(mark_text1,imgurl) + .then((res)=>{ + if(res.success){ + let uri=res.uri; + marktext2(mark_text2,uri,imgWidth,imgHeight) + .then((res)=>{ + if(res.success){ + let picture_clicked_date=moment(picture_clickedd).format('YYYYMMDD'); + let picture_clicked_time=moment(picture_clickedd).format('HHmmss'); + let filename=storeData.StoreId+'_'+(props.UserId || '')+'_PromotionImg-'+picture_clicked_date+'_'+picture_clicked_time+'.jpg'; + let allData=SKUStockData; + let defData={'SubCategoryId':cat.SubCategoryId,'PromoId':skuItem.PromoId}; + const cindex=allData.findIndex(ci=>ci.SubCategoryId==cat.SubCategoryId && ci.PromoId==skuItem.PromoId); + const imgData=cindex>=0?(allData[cindex] || defData):defData; + let image_key=type=='2'?'Image2':'Image1'; + let image_path_key=type=='2'?'Image2Path':'Image1Path'; + imgData[image_key]=filename; + + // renamefile + let imagePath=ImageFolderPath+currentMenu.ScreenName+"/"+filename; + RNFS.copyFile(res.uri, imagePath) + .then(resn => { + let uri='file://'+imagePath; + console.log('image marker',uri); + imgData[image_path_key]=uri; + console.log(imgData); + cindex>=0?allData[cindex]=imgData:allData.push(imgData); + + setSKUStockData(allData); + setHasUnsavedChanges(true); + setrerenderdata2(!rerenderdata2); + }) + .catch(err => { + console.log('ERROR: image file write failed!!!'); + console.log(err.message, err.code); + }); + + } + else{ + if(res.imagenotfound){ + notify(ST.Pleasecaptureaimage); + } + else{ + notify(res.error); + } + } + }); + } + else{ + if(res.imagenotfound){ + notify(ST.Pleasecaptureaimage); + } + else{ + notify(res.error); + } + } + }); + } + } + + async function openCamera(cat,skuItem,type='1'){ + setGetImageProps({'cat':cat,'skuItem':skuItem,'type':type}); + setShowCamera(true); + // props.navigation.navigate('CameraScreen',{'getImage':getImage,'cameraType':'back'}) + } + + async function submitOpeningStock(){ + let isvalid=await validate(); + if(isvalid){ + Keyboard.dismiss(); + setShowAlert(true); + } + } + + async function saveData(){ + setHasUnsavedChanges(false); + setShowAlert(false); + setLoaderTitle(ST.SavingData+'...'); + setProcessing(true); + try { + let {StoreId,ChainId,StateId,StoreTypeId}=storeData; + await db.transaction(async function (txn) { + + let q=`DELETE FROM ${AppTables.PROMOTION_HEADER_DATA} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' `; + let q2=`DELETE FROM ${AppTables.PROMOTION_DATA} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' `; + + // remove old data + await txn.executeSql(q,[],async function (txn2, txnres) { + console.log('promotions hdr data deleted'); + },function (txnE,txnerr) { console.log(txnerr); },); + + await txn.executeSql(q2,[],async function (txn2, txnres) { + console.log('promotions data deleted'); + },function (txnE,txnerr) { console.log(txnerr); },); + + + let seq_q=` select seq from sqlite_sequence where name="${AppTables.PROMOTION_HEADER_DATA}" `; + await txn.executeSql(seq_q,[],async function (txn2, txnres) { + if(txnres.rows.length>0){ + let data=txnres.rows.item(0); + let seq=data.seq; + insertData(seq); + } + else{ + insertData(0); + } + },function (txnE,txnerr) { console.log(txnerr); insertData(0); },); + + + }); + } catch (err) { + console.log(err); + } + } + + async function insertData(seq=0){ + try { + console.log(seq); + let {StoreId,ChainId,StateId,StoreTypeId,ExpiryStock}=storeData; + + await db.transaction(async function (txn) { + var values='',child_values='',checklist_values=''; + + for(var i=0;ici.SubCategoryId==item.SubCategoryId && ci.PromoId==skuItem.PromoId); + const skud=skud_index>=0?(allSKUData[skud_index] || {}) : {}; + + child_values+=` ('${seq}','${StoreId}','${d2}','${item.SubCategoryName}','${item.SubCategoryId}','${skuItem.Promotion}','${skuItem.PromoId}','${skud.isStockAvlbl}','${skud.isPromoTalkerAvlbl}','${skud.isPresent}','${skud.Image1}','${d2}') `; + } + } + + let add_HdrData=`INSERT INTO ${AppTables.PROMOTION_HEADER_DATA} (STORE_ID,VISIT_DATE,SUB_CATEGORY,SUB_CATEGORY_ID,ADDED_DATE) VALUES ${values} `; + + let add_ChildData=`INSERT INTO ${AppTables.PROMOTION_DATA} (COMMON_ID,STORE_ID,VISIT_DATE,SUB_CATEGORY,SUB_CATEGORY_ID,PROMOTION,PROMOTION_ID,STOCK_AVL,PROMOTALK_AVL,POS_AVL,IMAGE1,ADDED_DATE) VALUES ${child_values} `; + + + await txn.executeSql(add_HdrData,[],async function (txn2, txnres) { + console.log('promotion header added'); + await txn.executeSql(add_ChildData,[],async function (txn2, txnres) { + console.log('promotion child added'); + notify(ST.Promotionupdatedsuccessfully); + setProcessing(false); + props.navigation.goBack(); + + },function (txnE,txnerr) { console.log(txnerr);setProcessing(false);notify(ST.CannotupdatePromotion) },); + },function (txnE,txnerr) { console.log(txnerr);setProcessing(false);notify(ST.CannotupdatePromotion) },); + }); + } catch (err) { + console.log(err); + } + } + + + async function validate(){ + let isValid=true; + await Promise.all( + promotionData.map(async (item,index) => { + if(isValid){ + + let promotionlist=item.promotionlist || []; + if(promotionlist.length>0){ + await Promise.all( + promotionlist.map(async (skuItem,skuIndex) => { + if(isValid){ + let skuData=SKUStockData.find(ci=>ci.SubCategoryId==item.SubCategoryId && ci.PromoId==skuItem.PromoId) || {}; + if(skuData.isPresent!=0 && (skuData.isPresent==null || skuData.isPresent=='')){ + notify(ST.Pleaseselectifpromotionpresentornotfor+' '+item.SubCategoryName+' '+skuItem.Promotion,'SHORT'); + isValid=false; + }else if(skuData.isStockAvlbl!=0 && (skuData.isStockAvlbl==null || skuData.isStockAvlbl=='')){ + notify(ST.Pleaseselectifstockisavailablefor+' '+item.SubCategoryName+' '+skuItem.Promotion,'SHORT'); + isValid=false; + }else if(skuData.isPromoTalkerAvlbl!=0 && (skuData.isPromoTalkerAvlbl==null || skuData.isPromoTalkerAvlbl=='')){ + notify(ST.Pleaseselectifstockisavailablefor+' '+item.SubCategoryName+' '+skuItem.Promotion,'SHORT'); + isValid=false; + }else if((skuData.isPresent==1 || skuData.isPromoTalkerAvlbl==1 || skuData.isStockAvlbl==1 ) && ((skuData.Image1==null || skuData.Image1==''))){ + notify('Please click all images for '+item.SubCategoryName+' '+skuItem.Promotion,'SHORT'); + isValid=false; + } + } + }) + ); + } + } + }) + ); + + console.log('isValid:',isValid); + return isValid; + } + + function onStockValChange(item,skuItem,val,key,isChoiceSelect=0){ + let allSKUData=SKUStockData; + let defData={'SubCategoryId':item.SubCategoryId,'PromoId':skuItem.PromoId}; + const skud_index=allSKUData.findIndex(i=>i.SubCategoryId==item.SubCategoryId && i.PromoId==skuItem.PromoId); + const skud=skud_index>=0?(allSKUData[skud_index] || defData) : defData; + skud[key]=val; + + if(isChoiceSelect==1 && (skud.isPresent!=1 && skud.isPromoTalkerAvlbl!=1 && skud.isStockAvlbl!=1 )){ + skud.Image1=''; + skud.Image1Path=''; + } + skud_index>=0?allSKUData[skud_index]=skud:allSKUData.push(skud); + + setSKUStockData(allSKUData); + setHasUnsavedChanges(true); + setrerenderdata(!rerenderdata); + } + + + function onChoiceSelect(item,skuItem,val,key,animatedChoice){ + var val1=0; + if(val==1){ + val1=1; + } + + if(animatedChoice!=null){ + Animated.timing(animatedChoice, { + toValue: val1, + duration:400, + useNativeDriver:false, + }).start(); + } + onStockValChange(item,skuItem,val,key,1) + } + + function onSaveCancel(){ + setShowAlert(false); + } + + function FilterStores(searchedQry){ + searchedQry=searchedQry.toLowerCase(); + console.log('searchedQry',searchedQry); + let arr=[]; + var arr2=[]; + if(searchedQry!=null && searchedQry!=''){ + + for(let i=0;i0){ + arr.push(arr2); + } + } + } + + + } + } + else{ + arr=globalPromoData; + } + + setPromotionData(arr); + setrerenderdata(!rerenderdata) + setrerenderdata2(!rerenderdata2) + } + + return ( + + {processing && } + + {ConfirmSaveAlert(props,showAlert,onSaveCancel,saveData)} + {setShowCamera(false);getImage(imgData)}} showCamera={showCamera} onHideCamera={()=>{setShowCamera(false);}}/> + + + + + {setSearchedItem(val); FilterStores(val)}} + /> + {FilterStores(searchedItem)}}> + + + + { Object.keys(storeData).length>0 && + { + const cat=item; + + return( + + + + {item.SubCategoryName} + + + + + + { + + { + const skus=item; + const sku_index=index; + let thisCatSkuData_i=SKUStockData.findIndex(i=>i.SubCategoryId==cat.SubCategoryId && i.PromoId==skus.PromoId); + let thisCatSkuData=thisCatSkuData_i>=0?(SKUStockData[thisCatSkuData_i] || {}):{}; + let isPresent=thisCatSkuData.isPresent!=null?thisCatSkuData.isPresent:'0'; + let isStockAvlbl=thisCatSkuData.isStockAvlbl!=null?thisCatSkuData.isStockAvlbl:'0'; + let isPromoTalkerAvlbl=thisCatSkuData.isPromoTalkerAvlbl!=null?thisCatSkuData.isPromoTalkerAvlbl:'0'; + let Image1Path=(thisCatSkuData.Image1Path!=null && thisCatSkuData.Image1Path!='')?thisCatSkuData.Image1Path:''; + + var xpos=isPresent==1?-75:0,xposStock=isStockAvlbl==1?-75:0,xposPromo=isPromoTalkerAvlbl==1?-75:0; + if(skus.animatedChoice!=null ){ + xpos=skus.animatedChoice.interpolate({ + inputRange:[0,1], + outputRange:[0,-75], + }); + } + + if(skus.animatedChoiceStock!=null ){ + xposStock=skus.animatedChoiceStock.interpolate({ + inputRange:[0,1], + outputRange:[0,-75], + }); + } + + if(skus.animatedChoicePromo!=null ){ + xposPromo=skus.animatedChoicePromo.interpolate({ + inputRange:[0,1], + outputRange:[0,-75], + }); + } + + return( + + {skus.Promotion} + + + + + {'Stock'} + + + + + {onChoiceSelect(cat,skus,1,'isStockAvlbl',skus.animatedChoiceStock)}}> + Yes + + {onChoiceSelect(cat,skus,0,'isStockAvlbl',skus.animatedChoiceStock)}}> + No + + + + + + {'Promo Talker'} + + + + + {onChoiceSelect(cat,skus,1,'isPromoTalkerAvlbl',skus.animatedChoicePromo)}}> + Yes + + {onChoiceSelect(cat,skus,0,'isPromoTalkerAvlbl',skus.animatedChoicePromo)}}> + No + + + + + + {'Running on POS'} + + + + + {onChoiceSelect(cat,skus,1,'isPresent',skus.animatedChoice)}}> + Yes + + {onChoiceSelect(cat,skus,0,'isPresent',skus.animatedChoice)}}> + No + + + + + + + {(isPresent=='1' || isPromoTalkerAvlbl=='1' || isStockAvlbl=='1') && + + Capture Image + + + { (Image1Path=='' || Image1Path==null) && + {openCamera(cat,skus,'1')}}> + + + } + { (Image1Path!='' && Image1Path!=null) && + + + {openCamera(cat,skus,'1')}}> + + + + } + + + + + } + + + + + + + ) + }}/> + } + + + ); + }} + /> + } + + {submitOpeningStock()}}/> + + + + + + ); +} + + + +export default connect(mapStateToProps, mapDispatchToProps)(Promotion); \ No newline at end of file diff --git a/PerformicsSrc/src/screens/PromotionOneApp.js b/PerformicsSrc/src/screens/PromotionOneApp.js new file mode 100644 index 0000000..255c058 --- /dev/null +++ b/PerformicsSrc/src/screens/PromotionOneApp.js @@ -0,0 +1,2972 @@ +import React, { useState, useEffect, useRef } from 'react'; +import Container from '../components/container'; +import { useRoute } from '@react-navigation/native'; +import { globalStyles, customStyles, GetPageTheme } from "../styles/Global"; +import { StatusBar, Image, TextInput, View, Text, ScrollView, TouchableOpacity, Platform, PermissionsAndroid, FlatList, Alert, Animated, AppState, Keyboard } from 'react-native'; +import { ReactReduxContext, connect, useSelector, useDispatch } from 'react-redux'; +import { mapStateToProps, mapDispatchToProps } from '../reducers/contextProvider'; +import SQLite from 'react-native-sqlite-2'; +import { notify } from '../components/notify'; +import moment from 'moment'; +import { getDownloadJson, getKPIFields, marktext1, marktext2, resizeImage, restore_ImageWithMetaData, validateNumber } from '../controller/functions'; +import { get_item, set_item, clear_item } from '../components/localStorage'; +import { version, sloganline, appname, testurl, db, colors_Arr, common_ImagePath, ImageFolderPath, HierarchyTbls } from '../constants/constants'; +import CustomHeader from '../components/customHeader'; +import { AntDesign, Entypo, FontAwesome, Fontisto, MaterialCommunityIcons } from '../components/icons'; +import { stat } from 'react-native-fs'; +import CustomLoader from '../components/CustomLoader'; +import LinearGradient from 'react-native-linear-gradient'; +import { AppTables } from '../constants/tableConstants'; +import * as RNFS from 'react-native-fs'; +import GradientButton from '../components/gradientButton'; +import addImg from '../assets/performics/add_image.svg'; +import CustomModal from '../components/CustomModal'; +import { ConfirmSaveAlert } from '../components/alert'; +import ModalSelector from 'react-native-modal-selector' +import { CustomPicker, CustomPicker2 } from '../components/CustomPicker'; +import CustomCamera from '../components/Camera'; +import ImageViewer from 'react-native-image-zoom-viewer'; +import DateTimePicker from '@react-native-community/datetimepicker'; +import CheckBox from '@react-native-community/checkbox'; + +import CameraImg from '../assets/performics/camera_front_image.svg' +import MultiSelect from 'react-native-multiple-select'; +import CameraImg3 from '../assets/performics/camera_tick.svg'; +import CameraImg2 from '../assets/performics/camera_icon.svg'; +import CameraImg5 from '../assets/image/astrickcamera.svg'; + + +function PromotionOneApp(props) { + const route = useRoute(); + const ST = props.StaticText || {}; + + // get all theme styles acc to current theme set + const PageTheme = GetPageTheme(props.DarkMode, route.name); + const customStyle = customStyles(props.DarkMode, route.name); + const animatedChoice = useRef(new Animated.Value(0)).current; + + const [processing, setProcessing] = useState(true); + const [loaderTitle, setLoaderTitle] = useState(); + const [isAdhocScreen, setIsAdhocScreen] = useState(false); + const [storeData, setStoreData] = useState({}); + const [StoreCameraAllow, setStoreCameraAllow] = useState(true); + const [currentMenu, setCurrentMenu] = useState({}); + const [rerenderdata, setrerenderdata] = useState(0); + const [rerenderdata2, setrerenderdata2] = useState(0); + const [rerenderdata3, setrerenderdata3] = useState(0); + const [rerenderdata4, setrerenderdata4] = useState(0); + + const [hasUnsavedChanges, setHasUnsavedChanges] = useState(false); + + const [WindowData, setWindowData] = useState([]); + const [reasons_list, setReasons_list] = useState([]); + const [Windows, setWindows] = useState([]); + const [show_zoomImage, setShow_zoomImage] = useState(false); + const [refImageIndex, setrefImageIndex] = useState(0); + const [showAlert, setShowAlert] = useState(false); + const [zoomImageUrl, setZoomImageUrl] = useState([]); + const [showCamera, setShowCamera] = useState(false); + const [getImageProps, setGetImageProps] = useState({}); + const zoomView = useRef(null); + const [showRating, setShowRating] = useState(false); + const [RatingQtn, setRatingQtn] = useState({}); + const [RatingWindow, setRatingWindow] = useState({}); + const [RatingOrder, setRatingOrder] = useState([]); + + const [Products, setProducts] = useState([]); + const [DisplayList, setDisplayList] = useState([]); + const [toRemoveId, setToRemoveId] = useState(''); + const [toRemoveItem, setToRemoveItem] = useState({}); + const [showRemoveConfirm_M, setshowRemoveConfirm_M] = useState(false); + const [showRAllC_M, setShowRAllC_M] = useState(false); + const [searchedItem, setSearchedItem] = useState(''); + const [globalWindows, setGlobalWindows] = useState([]); + const [KPIFields, setKPIFields] = useState([]); + const [showSwitchCamera, setShowSwitchCamera] = useState(false); + + const [DataCleanModal, setDataCleanModal] = useState(false); + const [DataCleanAnim, setDataCleanAnim] = useState(""); + const [DataCleanItem, setDataCleanItem] = useState({}); + const [isPresentClean, setIsPresentClean] = useState(0); + + const [InputChange, setInputChange] = useState([]); + const [SelectedImg, setSelectedImg] = useState(''); + const [showModal, setShowModal] = useState(false); + const [reCapImgModalObj, setReCapImgModalObj] = useState({}); + const [showImageSaveOp, setShowImageSaveOp] = useState(true); + const [ImgMadCount, setImgMadCount] = useState({ img1: 0, img2: 0 }); + const [FilteredPromoValues, setFilteredPromoValues] = useState([]); + const [ShowCatWise, setShowCatWise] = useState(false); + const [CatData, setCatData] = useState(false); + const [ColId, setColId] = useState(""); + const [ColName, setColName] = useState(""); + + const inputRefs = useRef({}); + const hasUnsavedChangesRef = React.useRef(hasUnsavedChanges); + const WindowDataRef = React.useRef(WindowData); + const StoreIdRef = React.useRef(null); + const ScreenNameRef = React.useRef(''); + const PSGroupData = React.useRef(''); // Grouping data (Category/ SubCategory/ Brand ) for BG save fuunctionality with Partial Save Scenario + const BGPSAllow = React.useRef(false); + const BGWindowsRef = React.useRef(Windows); + + function BGWindowsRefFun(val) { + BGWindowsRef.current = val + setWindows(val) + } + + + const [ItemsInView, setItemsInView] = useState([]); + + const onViewableItemsChanged = ({ viewableItems, }) => { + // Do stuff + //console.log("onViewableItemsChanged called:") + setItemsInView(viewableItems); + }; + + // error field states + const [errorfield, setErrorField] = useState({}); + const [error, setError] = useState(false); + const FlatLConfCallbackPairs = useRef([{ viewabilityConfig: { itemVisiblePercentThreshold: 50 }, onViewableItemsChanged }]); + const d1 = new Date(); + const d2 = moment(d1).format('MM/DD/YYYY'); + + useEffect(() => { + setLoaderTitle(ST.Loading + '...') + let params = props.route.params ? props.route.params : {}; + let storeData1 = params.storeData || {}; + let menu1 = params.menu || {}; + let ShowCatWise1 = params.ShowCatWise != null ? params.ShowCatWise : false; + let CatData1 = params.CatData != null ? params.CatData : {}; + let isAdhoc = params.isAdhoc || false; + + + setIsAdhocScreen(isAdhoc); + setShowCatWise(ShowCatWise1); + setCatData(CatData1); + setStoreData(storeData1); + setCurrentMenu(menu1); + + let cameraAllow = storeData1.CameraAllow == 'true' || storeData1.CameraAllow == 1 ? true : false; + setStoreCameraAllow(cameraAllow); + + StoreIdRef.current = storeData1.StoreId + ScreenNameRef.current = menu1.ScreenName + getData(storeData1, menu1, CatData1, ShowCatWise1); + + const AppStateSubscription = AppState.addEventListener('change', (pro) => { _handleAppStateChange(pro) }); + const unsubscribe = props.navigation.addListener('beforeRemove', onBeforeRemove); + + return function cleanup() { + AppStateSubscription.remove(); + return unsubscribe; + }; + }, []); + + + const _handleAppStateChange = async (nextAppState) => { + if (nextAppState == 'background' && hasUnsavedChangesRef.current == true) { + // windowQuestions: global.windowQuestions || [], // ✅ include this + console.log("Saving WindowDataRef:", WindowDataRef.current); + let newData = { + storeBGData: WindowDataRef.current, + menuName: ScreenNameRef.current, + StoreId1: StoreIdRef.current, + visiteDate: d2 || moment().format('MM/DD/YYYY'), + BGPSAllow: BGPSAllow.current, + PSGroupData: PSGroupData.current, + BGWindowsData: BGWindowsRef.current + }; + let WindowsStr = JSON.stringify(newData); + //console.log('storedjson', WindowsStr); + try { + await set_item('storeData', WindowsStr); + //console.log("Successfully saved storeData"); + } catch (error) { + console.error("Error saving storeData:", error); + } + } + }; + + useEffect(() => { + const unsubscribe = props.navigation.addListener('beforeRemove', onBeforeRemove); + return unsubscribe; + }, [hasUnsavedChanges]); + + useEffect(() => { + const unsubscribe = props.navigation.addListener('beforeRemove', onBeforeRemove); + return unsubscribe; + }, [showCamera]); + + useEffect(() => { + const unsubscribe = props.navigation.addListener('beforeRemove', onBeforeRemove); + return unsubscribe; + }, [show_zoomImage]); + + function onBeforeRemove(e) { + if (showCamera == true) { + e.preventDefault(); + setShowCamera(false); + } + else if (show_zoomImage == true) { + e.preventDefault(); + setShow_zoomImage(false); + } + else { + if (hasUnsavedChanges == true) { + e.preventDefault(); // Prevent default behavior of leaving the screen + onRemoveScreen(e); + } + else { + return; + } + } + } + + function BgUnsavedChanges(val) { + hasUnsavedChangesRef.current = val + setHasUnsavedChanges(val); + } + + function BgWindowData(val) { + WindowDataRef.current = val + setWindowData(val); + } + + function onRemoveScreen(e) { + Alert.alert( + "", + ST.Doyoureallywanttoexitthescreen, + [ + { + text: ST.Cancel, + onPress: () => { }, + style: "cancel" + }, + { + text: ST.OK, onPress: async () => { + // setHasUnsavedChanges(false); + BgUnsavedChanges(false) + await clear_item('storeData') + props.navigation.dispatch(e.data.action); + } + } + ] + ); + } + + + async function getData(storeData1, menu1, CatData1 = {}, ShowCatWise1 = false) { + try { + let { StoreId, ChainId, StateId, StoreTypeId } = storeData1; + let { PSAllow, PSTableName } = menu1; + PSTableName = PSTableName != null ? PSTableName : ''; + PSAllow = PSAllow != null ? PSAllow : false; + + let idCol = '', nameCol = ''; + + if (PSTableName.toLowerCase() == HierarchyTbls.Master_Category.toLowerCase()) { + idCol = 'CategoryId', nameCol = 'CategoryName'; + } + else if (PSTableName.toLowerCase() == HierarchyTbls.Master_Brand.toLowerCase()) { + idCol = 'BrandId', nameCol = 'BrandName'; + } + else { + idCol = 'SubCategoryId', nameCol = 'SubCategoryName'; + } + let IdVal = CatData1[idCol]; + let NameVal = CatData1[nameCol]; + + let FilteredIds = []; + if (ShowCatWise1) { + FilteredIds = await getWindowFilterIds(idCol, IdVal, storeData1); + } + setFilteredPromoValues(FilteredIds); + + + let AllKPIFields = await getKPIFields(menu1); + setKPIFields(AllKPIFields); + + // set switch camera flag as defined in mapping menu flag (if exists) + let SwitchingCameraI = AllKPIFields.findIndex(i => i.KPIFieldName == 'SwitchingCamera'); + let SwitchingCameraObj = SwitchingCameraI >= 0 ? AllKPIFields[SwitchingCameraI] : {}; + let SwitchingCamera = SwitchingCameraI >= 0 ? SwitchingCameraObj['KPIFieldEnable'] : false; + setShowSwitchCamera(SwitchingCamera); + + + let isPromoImage1 = AllKPIFields.findIndex(i => i.KPIFieldName == 'PromoImage1') + let isPromoImage1KPIObj = isPromoImage1 >= 0 ? AllKPIFields[isPromoImage1] : {}; + let isPromoImage1MANDCOUNT = isPromoImage1 >= 0 ? isPromoImage1KPIObj['KPIMandatory'] : 1; + + let isPromoImage2 = AllKPIFields.findIndex(i => i.KPIFieldName == 'PromoImage2') + let isPromoImage2KPIObj = isPromoImage2 >= 0 ? AllKPIFields[isPromoImage2] : {}; + let isPromoImage2MANDCOUNT = isPromoImage2 >= 0 ? isPromoImage2KPIObj['KPIMandatory'] : 1; + + let HidePresentYesNoIndex = AllKPIFields.findIndex(i => i.KPIFieldName == 'HidePresentYesNo'); + let HidePresentYesNoObj = HidePresentYesNoIndex >= 0 ? AllKPIFields[HidePresentYesNoIndex] : {}; + let HidePresentYesNoEn = HidePresentYesNoIndex >= 0 ? HidePresentYesNoObj['KPIFieldEnable'] : false; + let HidePresentYesNoEnable = HidePresentYesNoEn == 1 || HidePresentYesNoEn == "1" || HidePresentYesNoEn == true ? true : false; + + let isOPStockEnable = AllKPIFields.findIndex(i => i.KPIFieldName == 'PromoStock_ShowOPStockProduct') + let isOPStockEnableKPIObj = isOPStockEnable >= 0 ? AllKPIFields[isOPStockEnable] : {}; + let isOPStockEnableFlag = isOPStockEnable >= 0 ? isOPStockEnableKPIObj['KPIFieldEnable'] : false; + + setImgMadCount({ img1: parseInt(isPromoImage1MANDCOUNT), img2: parseInt(isPromoImage2MANDCOUNT) }) + + let inputChangeFlag = [], storeBGData1 = [], bgStoreJson = {}, isBgDataExists = false; + let windData = await get_item('storeData') + console.log("windData in promo:", windData); + if (windData != null && windData != '') { + let StoreJson = JSON.parse(windData) + let { storeBGData, menuName, StoreId1, visiteDate, BGWindowsData } = StoreJson + if (storeBGData.length > 0 && menuName == menu1.ScreenName && StoreId1 == StoreId && visiteDate == d2) { + isBgDataExists = true; + storeBGData1 = storeBGData; + bgStoreJson = StoreJson + //console.log("checkbgdataaa:", bgStoreJson) + BgUnsavedChanges(true) + BgWindowData(storeBGData) + // BGWindowsRefFun(BGWindowsData) + // setWindowData(storeBGData); + } + } + + if (PSAllow) { + // if Partial save is allowed then add the currently active category or group in BG var + BGPSAllow.current = true; + PSGroupData.current = CatData1; + } + await db.transaction(async function (txn) { + + + let q3 = `Select PromoReasonId as ReasonId,PromoReason as Reason,IsRemarkTaken From Master_PromotionReason`; + await txn.executeSql(q3, [], async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + let arr = []; + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + arr.push(data); + if (i == txnres2.rows.length - 1) { + setReasons_list(arr); + } + } + } + }, function (txnE, txnerr) { console.log(txnerr); },); + + + // Load All Promo Definitions from masters and get data for it if any + let FilterIdsJoin = FilteredIds.length > 0 ? FilteredIds.join(',') : ''; + let selectlist2 = ` s.StoreId,wd.PROMO_HEADER_ID as PromoHeaderId,w.PromoRefImage,w.PromoRefImagePopUp,w.PromoDefinitionId,w.PromoId,w.PromoName,w.PromoDefinitionTitleEnable,w.PromoDefinitionTitle,w.PromoTable,w.PromoField,w.PromoValue,w.ChildName,w.PromoRefImage,w.PromoElementCheckAssortment,w.PromoElementStockRequired,IFNULL(wd.IS_PRESENT,'') as IsPresent,w.PromoNotExistCamera,IFNULL(wd.PROMO_NA_IMAGE,'') as PromoNAImage,w.PromoExistReasonEnable,w.PromoNotExistReasonEnable,IFNULL(wd.REASON_ID ,'') as ReasonId,IFNULL(wd.REASON,'') as Reason,w.NoOfSplit,w.PromoImage1,w.PromoImage2,w.PromoImage1Lable,w.PromoImage2Lable,w.PromoImage1CameraGrid,w.PromoImage2CameraGrid,w.StockQtyRequired,wd.SHOW_RSN_REMARK,wd.REASON_REMARK`; + let join3 = ` Left outer join ${AppTables.PROMO_HDR_DATA} wd on w.PromoDefinitionId=wd.PROMO_DEFINITION_ID and wd.STORE_ID='${StoreId}' and VISIT_DATE='${d2}' `; + let join2 = ` inner join Mapping_StorePromotion s on w.PromoDefinitionId=s.PromoDefinitionId `; + let q2 = ` Select ${selectlist2} from Master_PromotionDefinition w ${join2} ${join3} where s.StoreId='${StoreId}' `; + if (ShowCatWise1 == true) { + q2 += ` and PromoValue in (${FilterIdsJoin}) `; + } + // q2+=`order by w.PromoDefSequence `; + q2 += `order by w.PromoDefSequence `; + + //console.log('q2:', q2); + await txn.executeSql(q2, [], async function (txn2, txnres2) { + //console.log('Promotion items loaded with added data', txnres2.rows.length); + if (txnres2.rows.length > 0) { + let arr = []; let images = [], allWindowsData = [] + + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + // //console.log('data:',data.PromoDefinitionId,data.StockQtyRequired); + let isPresent = (HidePresentYesNoEnable ? 1 : 0); + if (isBgDataExists) { + let storeBgIndex = storeBGData1.findIndex(i => i.PromoId == data.PromoId && i.PromoDefinitionId == data.PromoDefinitionId) + let storeBgObj = storeBgIndex >= 0 ? storeBGData1[storeBgIndex] : {}; + isPresent = HidePresentYesNoEnable ? 1 : (storeBgObj.isPresent == '1' || storeBgObj.isPresent == 1 ? 1 : 0); + let animatedChoice = new Animated.Value(isPresent); + data.animatedChoice = animatedChoice; + } else { + isPresent = (HidePresentYesNoEnable ? 1 : (data.IsPresent == '1' || data.IsPresent == 1 ? 1 : 0)); + let animatedChoice = new Animated.Value(isPresent); + data.animatedChoice = animatedChoice; + } + let animatedHeight = new Animated.Value(450); + data.animatedHeight = animatedHeight + + data.NoOfSplit = parseInt(data.NoOfSplit); + + let NoOfSplit = data.NoOfSplit; + let isStockReq = data.PromoElementStockRequired == 'true' || data.PromoElementStockRequired == 1 ? 1 : 0; + + let imgObj = { imgIndex: (i + 1), url: data.PromoRefImage, props: {} } + images.push(imgObj); + + let WindowSplits = await getWindowSplits(NoOfSplit, data, storeData1, menu1, isPromoImage1MANDCOUNT, isPromoImage2MANDCOUNT); + let WQr = await getWindowQuestions(data, storeData1, isPresent, menu1, bgStoreJson, isBgDataExists); + let WindowQuestions = WQr['WindowQuestions'] || []; + let WindowQA = WQr['WindowQA'] || {}; + + let WSd = isStockReq == true ? await getWindowStockData(data, storeData1, isPresent, isOPStockEnableFlag) : { 'WStocks': [], 'WStocksData': [] }; + let WStocks = WSd['WStocks'] || []; + let WStocksData = WSd['WStocksData'] || []; + let isAllChecked = WSd['isAllChecked'] != null ? WSd['isAllChecked'] : 0; + + let isNAImageAvl = data.PromoNotExistCamera == 'true' || data.PromoNotExistCamera == 1 ? 1 : 0; + let NAImage1 = isNAImageAvl == 1 && data.PromoNAImage != null ? data.PromoNAImage : ''; + let NAImage1Path = NAImage1 != '' ? 'file://' + ImageFolderPath + menu1.ScreenName + "/" + NAImage1 : ''; + + let showRsnRemark = ((data.SHOW_RSN_REMARK == '1' || data.SHOW_RSN_REMARK == 1) ? true : false); + + let windowDataObj = { 'PromoId': data.PromoId, 'PromoDefinitionId': data.PromoDefinitionId, 'WindowSplits': WindowSplits, 'WindowQA': WindowQA, 'WStocksData': WStocksData, 'NAImage1': NAImage1, 'NAImage1Path': NAImage1Path, 'ReasonId': data.ReasonId, 'Reason': data.Reason, 'isPresent': isPresent, 'isAllSKUChecked': isAllChecked, 'remark': (data.Remark != null ? data.Remark : ''), 'showOtherText': showRsnRemark, 'RemarkText': (data.REASON_REMARK || '') }; + data['WindowQuestions'] = WindowQuestions; + data['WindowStocks'] = WStocks; + + + let changesFlag = { PromoId: data.PromoId, PromoDefinitionId: data.PromoDefinitionId, Flag: (data.PromoHeaderId != null ? true : false) } + inputChangeFlag.push(changesFlag) + + arr.push(data); + allWindowsData.push(windowDataObj); + if (i == txnres2.rows.length - 1) { + let { menuName, StoreId1, visiteDate } = bgStoreJson + if (!isBgDataExists) { + BgWindowData(allWindowsData); + BGWindowsRefFun(arr) + } + + setInputChange(inputChangeFlag) + setWindows(arr); + setGlobalWindows(arr); + setZoomImageUrl(images); + setProcessing(false); + } + } + } + else { + setProcessing(false); + notify('No Data found'); + } + + }, function (txnE, txnerr) { console.log(txnerr); setProcessing(false); },); + + }); + } catch (err) { + //console.log(err); + } + } + + + async function getWindowFilterIds(idCol, IdVal, storeData1) { + let AllIds = []; + let { StoreId } = storeData1 + return new Promise((resolve, reject) => { + + db.transaction(async function (txn) { + let join = ` inner join Mapping_StorePromotion s on w.PromoDefinitionId=s.PromoDefinitionId `; + let q = `Select w.* from Master_PromotionDefinition w ${join} where s.StoreId='${StoreId}' `; + await txn.executeSql(q, [], async function (txn2, txnres) { + if (txnres.rows.length > 0) { + let Wind_data = txnres.rows.item(0); + let { PromoValue, PromoTable } = Wind_data; + PromoTable = PromoTable != null ? PromoTable : ''; + + let filterIdsCol = '', filterNamesCol = ''; + if (PromoTable.toLowerCase() == HierarchyTbls.Master_Category.toLowerCase()) { + filterIdsCol = 'CategoryId', filterNamesCol = 'CategoryName'; + } + else if (PromoTable.toLowerCase() == HierarchyTbls.Master_Brand.toLowerCase()) { + filterIdsCol = 'BrandId', filterNamesCol = 'BrandName'; + } + else if (PromoTable.toLowerCase() == HierarchyTbls.Master_Product.toLowerCase()) { + filterIdsCol = 'ProductId', filterNamesCol = 'ProductName'; + } + else { + filterIdsCol = 'SubCategoryId', filterNamesCol = 'SubCategoryName'; + } + + let FIdsQ = `Select p.${filterIdsCol},p.${filterNamesCol} from Product_Master p where (p.${idCol}='${IdVal}' or p.${idCol}=${IdVal}) `; + + await txn.executeSql(FIdsQ, [], async function (txn2, txnres2) { + if (txnres.rows.length > 0) { + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + let id_value = data[filterIdsCol]; + AllIds.push(id_value); + if (i == txnres2.rows.length - 1) { + resolve(AllIds) + } + } + } + else { + resolve([]); + } + }, function (txnE, txnerr) { console.log(txnerr); resolve(AllIds) }); + + + } + else { + resolve(AllIds) + } + }, function (txnE, txnerr) { console.log(txnerr); resolve(AllIds) },); + }); + }).then((val) => { + return val + }).catch((err) => { + //console.log(err); + return AllIds; + }); + } + + async function focusToNext(WindowStocks, windowIndex, stockProd, index) { + //console.log('focusToNext is call'); + + if (index == WindowStocks.length - 1) { + return; + } + try { + //console.log('next 1 call', 'input1_' + WindowStocks[index + 1].PromoDefinitionId + '_' + WindowStocks[index + 1].PromoStockDefinitionId) + let refIn2 = inputRefs.current['input1_' + WindowStocks[index + 1].PromoDefinitionId + '_' + WindowStocks[index + 1].PromoStockDefinitionId]; + + if (refIn2 != null) { + refIn2.focus(); + } + } + catch (err) { + //console.log(err); + } + + } + + async function getWindowSplits(NoOfSplit, window, storeData1, menu1, isPromoImage1MANDCOUNT, isPromoImage2MANDCOUNT) { + let WindowSplits_def = []; + // for(var s=0;s { + + db.transaction(async function (txn) { + + let q = `select * from ${AppTables.PROMO_IMAGES} where PROMO_HEADER_ID='${window.PromoHeaderId}' and STORE_ID='${storeData1.StoreId}' `; + + await txn.executeSql(q, [], async function (txn2, txnres2) { + //console.log("images saved len:", txnres2.rows.length); + if (txnres2.rows.length > 0) { + let arr = []; + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + //console.log(data.PROMO_HEADER_ID) + let isImage1 = window.PromoImage1 == 'true' || window.PromoImage1 == 1 ? 1 : 0; + let isImage2 = window.PromoImage2 == 'true' || window.PromoImage2 == 1 ? 1 : 0; + img1Req = i <= isPromoImage1MANDCOUNT ? true : false; + img2Req = i <= isPromoImage2MANDCOUNT ? true : false; + let Image1 = isImage1 == 1 && data.IMAGE1 != null && data.IMAGE1 != '' ? 'file://' + ImageFolderPath + menu1.ScreenName + "/" + data.IMAGE1 : ''; + let Image2 = isImage2 == 1 && data.IMAGE2 != null && data.IMAGE2 != '' ? 'file://' + ImageFolderPath + menu1.ScreenName + "/" + data.IMAGE2 : ''; + let obj = { 'Image1Name': data.IMAGE1, 'Image1': Image1, 'Image2Name': data.IMAGE2, 'Image2': Image2, 'img1Required': img1Req, 'img2Required': img2Req }; + arr.push(obj); + + if (i == txnres2.rows.length - 1) { + resolve(arr) + } + } + } + else { + resolve(WindowSplits_def) + } + }, function (txnE, txnerr) { console.log(txnerr); resolve(WindowSplits_def) },); + }); + }).then((val) => { + return val + }).catch((err) => { + //console.log(err); + return WindowSplits_def; + }); + } + + ///jp fixed queation enable disable on app kill + const getWindowQuestionsById = (bgJsonDta, promotionId, promotionDefinitionId) => { + const item = bgJsonDta?.storeBGData?.find(i => i.PromoId == promotionId && i.PromoDefinitionId == promotionDefinitionId); + return item?.WindowQuestions || [] + }; + + async function getWindowQuestions(window, storeData1, isInserted1 = false, menu1, bgStoreJson = {}, isBgDataExists = false) { + let obj = { 'WindowQA': {}, 'WindowQuestions': [] }; + let questionsBg = [] + ///jp fixed queation enable disable on app kill + if (isBgDataExists) { + questionsBg = getWindowQuestionsById(bgStoreJson, window.PromoId, window.PromoDefinitionId); + console.log("bgStoreJson_new", questionsBg); + } + + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + var q = '', selectlist = '', join = '', join3 = ''; + selectlist = ` DISTINCT wq.PromoQuestionId,wq.PromoQuestionCode,wq.PromoQuestionName,wq.QuestionType,wq.PromoqShowCamera,wq.PromoqCameraMandatory,wq.PromoqLengthValidationRequired,wq.PromoqMinimumChar,wq.PromoqMaximumChar,wq.PromoqDecimalPoint,wq.PromoqDateRangeMin,wq.PromoqDateRangeMax,wq.PromoqVoiceLengthInMinutes,wq.PromoqDefaultQuestionEnable,(CASE WHEN q.QUESTION_ID is not null THEN 1 ELSE 0 END) isInserted,q.ANSWER as Answer,q.ANSWER_ID as AnswerId,q.MULTI_OPTIONS_IDS as multi_op_ids,q.IMAGE_ALLOW1 as PromoaShowCamera,q.IMAGE1 as Image1,q.IS_DISABLED as IsDisabled `; + join3 = ` left outer join ${AppTables.PROMO_CHILD_DATA} q on q.QUESTION_ID=wq.PromoQuestionId and q.STORE_ID='${storeData1.StoreId}' and q.PROMO_DEFINITION_ID='${window.PromoDefinitionId}' and q.PROMO_ID='${window.PromoId}'`; + join = ` inner join Mapping_PromotionQuestion mq on mq.PromoQuestionId=wq.PromoQuestionId `; + q = `select ${selectlist} from Master_PromotionQuestion wq ${join} ${join3} where mq.PromoDefinitionId='${window.PromoDefinitionId}' order by wq.PromoQuestionSequence `; + + await txn.executeSql(q, [], async function (txn2, txnres2) { + //console.log("Raw Query Results:", txnres2.rows.raw ? txnres2.rows.raw() : Array.from(txnres2.rows)); + if (txnres2.rows.length > 0) { + let arr = []; + let wqa_obj = {}; + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + let { isInserted, IsDisabled } = data; + + //console.log("Question Data:", data); + + data.PromoqDefaultQuestionEnable = data.PromoqDefaultQuestionEnable == 1 || data.PromoqDefaultQuestionEnable == 'true'; + if (isInserted) { + console.log("checkinserted--", isInserted, data); + data['isDisabled'] = data.IsDisabled == 1 || data.IsDisabled == "1"; + ///jp fixed queation enable disable on app kill + if (isBgDataExists) { + if (questionsBg != null && questionsBg != undefined && Array.isArray(questionsBg) && questionsBg.length > 0) { + const isEnabled = questionsBg.some(q => + q.PromoQuestionId === data.PromoQuestionId && q.isDisabled === false + ); + if (isEnabled) { + data['isDisabled'] = false; + } else { + data['isDisabled'] = true; + } + } + } + } + ///jp fixed queation enable disable on app kill + else if (isBgDataExists) { + data['isDisabled'] = !data.PromoqDefaultQuestionEnable; + if (questionsBg != null && questionsBg != undefined && Array.isArray(questionsBg) && questionsBg.length > 0) { + const isEnabled = questionsBg.some(q => + q.PromoQuestionId === data.PromoQuestionId && q.isDisabled === false + ); + if (isEnabled) { + data['isDisabled'] = false; + }else{ + data['isDisabled'] = true; + } + } + } else { + data['isDisabled'] = !data.PromoqDefaultQuestionEnable; + } + + let answers = []; + if (data.QuestionType == 'Multi choice list' || data.QuestionType == 'Single choice list' || data.QuestionType == 'Rating') { + answers = await getWindowAnswers(data); + if (data.QuestionType == 'Rating') { + data.showRating = false; + } + } else if (data.QuestionType == 'Date') { + data.showDatePicker = false; + } else if (data.QuestionType == 'Number') { + data.showNumberInput = true; + } + data['Answers'] = answers; + + let id_key = data.PromoQuestionId + '_AnswerId'; + let ans_key = data.PromoQuestionId + '_Answer'; + let multi_key = data.PromoQuestionId + '_MultiOption'; + let date_key = data.PromoQuestionId + '_Date'; + let img_key = data.PromoQuestionId + '_ImagePath1'; + let imgname_key = data.PromoQuestionId + '_ImageName1'; + let rating_key = data.PromoQuestionId + '_Rating'; + + let showImageTag = (data.PromoqShowCamera == 'true' || data.PromoqShowCamera == 1); + //console.log("Populating wqa_obj:", { id_key, ans_key, AnswerId: data.AnswerId, Answer: data.Answer, isDisabled: data.isDisabled }); + + if (data.AnswerId != null) { + wqa_obj[id_key] = data.AnswerId; + } + if (data.Answer != null) { + wqa_obj[ans_key] = data.Answer; + } + + let selansid = data.AnswerId != null ? data.AnswerId : ''; + if (data.QuestionType == 'Multi choice list' && selansid != '' && data.multi_op_ids != null) { + selansid = data.multi_op_ids ? data.multi_op_ids.split(',') : []; + wqa_obj[multi_key] = data.multi_op_ids; + } + + if ((data.QuestionType == 'Single choice list' || data.QuestionType == 'Multi choice list') && selansid != '' && selansid != null) { + if (data.Answers && data.Answers.length > 0) { + for (var k = 0; k < data.Answers.length; k++) { + let ansss = data.Answers[k]; + let isandImgAl = (ansss.PromoaShowCamera == 1 || ansss.PromoaShowCamera == 'true'); + if (data.QuestionType == 'Single choice list' && (isandImgAl && ansss.AnswerId == selansid)) { + showImageTag = true; + } else if (data.QuestionType == 'Multi choice list' && (isandImgAl && selansid.indexOf(ansss.AnswerId) >= 0)) { + showImageTag = true; + } + } + } + } + + if (showImageTag && data.Answer != null && data.Image1 != null && data.Image1 != "undefined") { + let imgPath = (Platform.OS == 'ios' ? 'file://' : '') + ImageFolderPath + menu1.ScreenName + "/" + data.Image1; + //console.log('imgPath:', imgPath); + wqa_obj[imgname_key] = data.Image1; + wqa_obj[img_key] = imgPath; + } + + if (data.QuestionType == 'Date' && data.Answer != null) { + let dayonly = moment().format('DD'); + let actual_date = data.Answer ? data.Answer.split('/') : []; + let month = actual_date[0], year = actual_date[1]; + let fulldate = month + '/' + dayonly + '/' + year; + wqa_obj[date_key] = fulldate; + } + + arr.push(data); + if (i == txnres2.rows.length - 1) { + //console.log("Final WindowQA:", wqa_obj); + //console.log("Final WindowQuestions:", arr); + obj['WindowQuestions'] = arr; + obj['WindowQA'] = wqa_obj; + resolve(obj); + } + } + } else { + //console.log("No questions found in query"); + resolve(obj); + } + }, function (txnE, txnerr) { + //console.log("SQL Error:", txnerr); + resolve(obj); + }); + }); + }).then((val) => { + return val; + }).catch((err) => { + //console.log(err); + return obj; + }); + } + + + async function getWindowAnswers(qtn) { + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + var q = '', selectlist = ''; + selectlist = ` DISTINCT PromoAnswerId as AnswerId,PromoAnswerName as Answer,PromoaShowCamera,PromoaCameraMandatory,PromoaQuestionEnable,PromoaQuestionDisable `; + q = `select ${selectlist} from Master_PromotionQuestion where PromoQuestionId='${qtn.PromoQuestionId}' order by PromoaSequence `; + + await txn.executeSql(q, [], async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + let arr = []; + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + arr.push(data); + if (i == txnres2.rows.length - 1) { + resolve(arr) + } + } + } + else { + resolve([]) + } + }, function (txnE, txnerr) { console.log(txnerr); resolve([]) },); + }); + }).then((val) => { + return val + }).catch((err) => { + //console.log(err); + return []; + }); + } + + async function getWindowStockData(window, storeData1, isInserted = false, isOPStockEnableFlag = false) { + let obj = { 'WStocks': [], 'WStocksData': [], 'isAllChecked': 0 } + let { StoreId, StateId, ChainId, StoreTypeId, StoreClassId, StoreCategoryId } = storeData1; + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + + let checkassrt = window.PromoElementCheckAssortment == 'true' || window.PromoElementCheckAssortment == 1 ? true : false; + let join = '', join2 = '', join3 = ''; + + if (isOPStockEnableFlag == true || isOPStockEnableFlag == "true") { + join3 = `inner join ${AppTables.STOCK_DATA} s2 on s2.PRODUCT_ID=s.PromoStockValue and STORE_ID='${storeData1.StateId}' and VISIT_DATE='${d2}'`; + } + + // get data from masters with inserted data if any + if (checkassrt) { + join2 = ` inner join Mapping_ProductAssortmentStorewise a on a.ProductId=s.PromoStockValue and a.StoreId='${StoreId}'`; + } + let join4 = `left outer join ${AppTables.PROMO_STOCK_DATA} st on s.PromoStockDefinitionId=st.PROMO_STOCK_DEFINITION_ID and st.PROMO_DEFINITION_ID='${window.PromoDefinitionId}' and st.STORE_ID='${storeData1.StoreId}' and st.VISIT_DATE='${d2}'`; + // let selectlist1=` s.PROMO_STOCK_DEFINITION_ID as PromoStockDefinitionId, s.PROMO_DEFINITION_ID as PromoDefinitionId,s.PROMO_STOCK_TABLE as PromoStockTable,s.PROMO_STOCK_FIELD as PromoStockField,s.PROMO_STOCK_VALUE as PromoStockValue,s.PROMO_STOCK_MBQ as PromoStockMBQ,s.PRODUCT_NAME as ProductName, s.STOCK as Stock,s.IS_PROMO_PRESENT as isPromoPresent `; + let selectlist2 = ` s.PromoStockDefinitionId, s.PromoDefinitionId,s.PromoStockTable,s.PromoStockField,s.PromoStockValue,s.PromoStockMBQ,s.ProductName,s.PromoStockMBQ,st.STOCK as Stock,st.IS_PROMO_PRESENT as isPromoPresent `; + let q2 = `select ${selectlist2} from Master_PromotionStockDefinition s ${join2} ${join3} ${join4} where s.PromoDefinitionId='${window.PromoDefinitionId}' `; + if (checkassrt) { + q2 += ` and a.StoreId='${storeData1.StoreId}' `; + } + if (isOPStockEnableFlag == true || isOPStockEnableFlag == "true") { + q2 += ` and s2.OPENING_STOCK>0`; + } + q2 += ` order by s.ProductName `; + + await txn.executeSql(q2, [], async function (txn2, txnres2) { + //console.log('products added:', txnres2.rows.length) + if (txnres2.rows.length > 0) { + let arr = [], WStocksData = []; + let isAllChecked = 1; + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + inputRefs.current['input1_' + data.PromoDefinitionId + "_" + data.PromoStockDefinitionId] = ''; + + //console.log('data ProductName:', data.ProductName, data) + if (data.Stock != null) { + let stockData_obj = { 'ProductId': data.PromoStockValue, 'Stock': data.Stock, 'isPromoPresent': (data.isPromoPresent != null ? data.isPromoPresent : 0) } + WStocksData.push(stockData_obj); + } + if (data.isPromoPresent == null || data.isPromoPresent == 0 || data.isPromoPresent == '0' || data.isPromoPresent == '') { + + isAllChecked = 0; + } + arr.push(data); + if (i == txnres2.rows.length - 1) { + obj['WStocks'] = arr; + obj['WStocksData'] = WStocksData; + obj['isAllChecked'] = isAllChecked; + resolve(obj) + } + } + } + else { + resolve(obj) + } + }, function (txnE, txnerr) {console.log(txnerr); resolve(obj) },); + }); + }).then((val) => { + return val + }).catch((err) => { + //console.log(err); + return obj; + }); + } + + + async function getImage(imgdata) { + let type = getImageProps.type || ''; + let window = getImageProps.window || {}; + let splitItem = getImageProps.splitItem || {}; + let splitItemIndex = getImageProps.splitItemIndex || 0; + let qtn = getImageProps.qtn || {}; + let cameraType = getImageProps.cameraType != null ? getImageProps.cameraType : '1'; + + if (typeof imgdata == 'object' && imgdata.errorCode == 'camera_unavailable') { + notify(ST.Cameraunavailable); + } + else if (typeof imgdata == 'object' && imgdata.uri != null) { + const img = imgdata; + const imgurl = img.uri, imgWidth = img.width, imgHeight = img.ExtendedHeight; + let isImgFromGallery = img.fromGallery != null ? img.fromGallery : false; + let picture_clickedd = isImgFromGallery == true ? img.datetime : new Date(); + + let picture_clicked_time = moment(picture_clickedd).format('MM-DD-YYYY HH:mm:ss') + let picture_clicked_time_for_pic_name = moment(picture_clickedd).format('MMDDYYYY_HHmmss') + + console.log("time", picture_clicked_time); + console.log("time1", picture_clicked_time_for_pic_name); + let calculate_tym_date_for_filename = picture_clicked_time_for_pic_name; + let calculate_tym_date_over_img = picture_clicked_time; + + let filename = storeData.StoreId + '_' + window.PromoDefinitionId + '_' + window.PromoId + '_' + (props.UserId || '') + '_STImg-' + calculate_tym_date_for_filename + '.jpg'; + + let allData = WindowData; + let defData = { 'PromoId': window.PromoId, 'PromoDefinitionId': window.PromoDefinitionId }; + const wind_index = allData.findIndex(i => i.PromoId == window.PromoId && i.PromoDefinitionId == window.PromoDefinitionId); + let wind = wind_index >= 0 ? allData[wind_index] : defData; + + let camera1Label = window.PromoImage1Lable || ''; + let camera2Label = window.PromoImage2Lable || ''; + let extraLabel = ''; + + if (cameraType == '2') { + var QD = wind.WindowQA || {}; + var image_key = qtn.PromoQuestionId + '_ImageName1'; + var image_key_path = qtn.PromoQuestionId + '_ImagePath1'; + QD[image_key] = filename; + extraLabel = 'Qtn Id: ' + qtn.PromoQuestionId; + } + else if (cameraType == '3') { + var image_key = 'NAImage1'; + var image_key_path = 'NAImage1Path'; + wind[image_key] = filename; + extraLabel = 'Not Exist'; + } + else { + var WindowSplits = wind.WindowSplits || []; + var image_key = type == '1' ? 'Image1Name' : 'Image2Name'; + var image_key_path = type == '1' ? 'Image1' : 'Image2'; + splitItem[image_key] = filename; + extraLabel = type == '1' ? camera1Label : camera2Label; + } + + const mark_text1 = calculate_tym_date_over_img; + const mark_text2 = 'Store Name:' + storeData.StoreName + ' | Store Id:' + storeData.StoreId + ' | User Id:' + storeData.EmpId + ' | PromoName:' + window.PromoName + "(" + window.PromoDefinitionId + ")" + (extraLabel != '' ? ' (' + extraLabel + ')' : '') + ' | Image Type: ' + currentMenu.MenuName + ' | Date:' + calculate_tym_date_over_img; + + let imagePath = `${ImageFolderPath + currentMenu.ScreenName}/${filename}`; + RNFS.copyFile(imgurl, imagePath) + .then(async (resn) => { + // render data with clicked image + let uri = 'file://' + imagePath; + //console.log('image marker:', uri); + + if (cameraType == '2') { + QD[image_key_path] = uri; + if (qtn.QuestionType == "Image") { + //set answid - 0 and answer to filename if qtnType is Image + let id_key = qtn.PromoQuestionId + '_AnswerId'; + let ans_key = qtn.PromoQuestionId + '_Answer'; + QD[id_key] = 0; + QD[ans_key] = filename; + } + wind.WindowQA = QD; + wind_index >= 0 ? allData[wind_index] = wind : allData.push(wind); + BgWindowData(allData); + // setWindowData(allData); + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata3(!rerenderdata3); + } + else if (cameraType == '3') { + wind[image_key_path] = uri; + wind_index >= 0 ? allData[wind_index] = wind : allData.push(wind); + // setWindowData(allData); + BgWindowData(allData); + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + else { + //console.log('split image updated'); + splitItem[image_key_path] = uri; + splitItemIndex >= 0 ? WindowSplits[splitItemIndex] = splitItem : WindowSplits.push(splitItem); + wind.WindowSplits = WindowSplits; + wind_index >= 0 ? allData[wind_index] = wind : allData.push(wind); + // setWindowData(allData); + BgWindowData(allData); + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata2(!rerenderdata2); + } + + let objIndex = InputChange.findIndex(i => i.PromoId == window.PromoId && i.PromoDefinitionId == window.PromoDefinitionId); + let winArr = [...InputChange] + winArr[objIndex].Flag = true + + setSelectedImg(uri) + setInputChange(winArr); + + + // add metdata then resize image and restored back to the imagePath + let restore_data = { "destFilePath": imagePath, "imgurl": imgurl, imgWidth, imgHeight, mark_text1, mark_text2 } + let is_restored = await restore_ImageWithMetaData(restore_data, imgdata); + //console.log("image restored:", is_restored); + + }) + .catch(err => { + //console.log('ERROR: image file write failed!!!'); + //console.log(err.message, err.code); + }); + + } + + } + + async function openCamera(window, splitItem, splitItemIndex, type = '1', cameraType = '1', qtn = {}) { + setErrorField({}); + setError(false); + setGetImageProps({ 'window': window, 'splitItem': splitItem, 'splitItemIndex': splitItemIndex, 'type': type, 'cameraType': cameraType, 'qtn': qtn }); + setShowCamera(true); + } + + async function onSubmitData() { + let isvalid = await validate(); + if (isvalid) { + Keyboard.dismiss(); + setShowAlert(true); + } + } + + async function saveData() { + // setHasUnsavedChanges(false); + BgUnsavedChanges(false) + setShowAlert(false); + setLoaderTitle(ST.SavingData + '...'); + setProcessing(true); + let d1n = new Date(); + let d3 = moment(d1n).format('MM/DD/YYYY'); + + + + try { + let { StoreId, ChainId, StateId, StoreTypeId } = storeData; + + // remove old data + // Delete only filtered data if partail save allowed is true + + let { PSAllow } = currentMenu + let deletePrevData = false; + if (ShowCatWise && PSAllow) { + if (FilteredPromoValues.length > 0) { + await removePreviousData(); + } + else { + notify('Something went wrong while deleteing old data!') + setProcessing(false); + return; + } + } else { + deletePrevData = true; + } + + await db.transaction(async function (txn) { + + // remove old data + if (deletePrevData) { + await txn.executeSql(`DELETE FROM ${AppTables.PROMO_HDR_DATA} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' `, [], async function (txn2, txnres) { + //console.log('window hdr data deleted'); + }, function (txnE, txnerr) { console.log(txnerr); },); + await txn.executeSql(`DELETE FROM ${AppTables.PROMO_CHILD_DATA} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' `, [], async function (txn2, txnres) { + //console.log('window child data deleted'); + }, function (txnE, txnerr) { console.log(txnerr); },); + await txn.executeSql(`DELETE FROM ${AppTables.PROMO_IMAGES} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' `, [], async function (txn2, txnres) { + //console.log('window images data deleted'); + }, function (txnE, txnerr) { console.log(txnerr); },); + await txn.executeSql(`DELETE FROM ${AppTables.PROMO_STOCK_DATA} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' `, [], async function (txn2, txnres) { + //console.log('window stock data deleted'); + }, function (txnE, txnerr) {console.log(txnerr); },); + + } + // add data + var values = '', childV = '', imageV = '', stockV = ''; + + for (const wi in globalWindows) { + const window = globalWindows[wi]; + let isImage1 = window.PromoImage1 == 'true' || window.PromoImage1 == 1 ? 1 : 0; + let isImage2 = window.PromoImage2 == 'true' || window.PromoImage2 == 1 ? 1 : 0; + let isNAImageAvl = window.PromoNotExistCamera == 'true' || window.PromoNotExistCamera == 1 ? 1 : 0; + let isNAReasonEnable = window.PromoNotExistReasonEnable == 'true' || window.PromoNotExistReasonEnable == 1 ? 1 : 0; + let isReasonEnable = window.PromoExistReasonEnable == 'true' || window.PromoExistReasonEnable == 1 ? 1 : 0; + let isStockReq = window.PromoElementStockRequired == 'true' || window.PromoElementStockRequired == 1 ? 1 : 0; + let WindowQuestions = window.WindowQuestions || []; + let WindowStocks = window.WindowStocks || []; + + + const wind = WindowData.find(i => i.PromoId == window.PromoId && i.PromoDefinitionId == window.PromoDefinitionId); + let isPresent = wind.isPresent != null && wind.isPresent != '' ? wind.isPresent : '0'; + let ReasonId = wind.ReasonId != null ? wind.ReasonId : 0; + let Reason = wind.Reason != null ? wind.Reason : ''; + let NAImage1 = wind.NAImage1 != null ? wind.NAImage1 : ''; + let NAImage1Path = wind.NAImage1Path != null ? wind.NAImage1Path : ''; + let remark = wind.remark != null ? wind.remark : ''; + let WindowSplits = wind.WindowSplits || []; + let QD = wind.WindowQA || {}; + let WStocksData = wind.WStocksData || []; + + let PROMO_HEADER_ID = 'WIND' + wi + (Math.floor(Math.random() * 1000) + 1); + let { PromoDefinitionId, PromoId, PromoName, PromoTable, PromoField, PromoValue, ChildName } = window; + let showOtherText = wind.showOtherText == true || wind.showOtherText == '1' ? 1 : 0; + let RemarkText = wind.RemarkText != null ? wind.RemarkText : ''; + + values += values != '' ? ' , ' : ''; + values += ` ('${PROMO_HEADER_ID}','${StoreId}','${d3}','${PromoDefinitionId}','${PromoId}','${PromoName}','${PromoTable}','${PromoField}','${PromoValue}','${ChildName}','${isPresent}','${NAImage1}','${ReasonId}','${Reason}','${(remark || '')}','${showOtherText}','${RemarkText}','1','${d3}') `; + + if (isPresent == 1) { + for (const qtnIndex in WindowQuestions) { + const qtn = WindowQuestions[qtnIndex]; + + let selansid = '', selanswer = '', selimg = '', showImageTag = false; + let isDisabled = qtn.isDisabled == true ? "1" : "0"; + // let isDisabled=qtn.isDisabled==true?"0":"0"; + let id_key = qtn.PromoQuestionId + '_AnswerId'; + let ans_key = qtn.PromoQuestionId + '_Answer'; + let multi_key = qtn.PromoQuestionId + '_MultiOption'; + let date_key = qtn.PromoQuestionId + '_Date'; + let img_key = qtn.PromoQuestionId + '_ImagePath1'; + let imgname_key = qtn.PromoQuestionId + '_ImageName1'; + let rating_key = qtn.PromoQuestionId + '_Rating'; + let list_mcdata = []; + + let { PromoQuestionId, PromoQuestionCode, QuestionType, PromoqShowCamera } = qtn + let answer = qtn.QuestionType == 'Single choice list' ? (QD[ans_key] || "") : (QD[ans_key] || 0); + // let answer=QD[ans_key] || 0; + let DecimalAnswerVal = '' + let lastchar = '' + let DecimalAnswer = answer + ""; + if (qtn.QuestionType == 'Decimal') { + if (DecimalAnswer != null && DecimalAnswer != '' && DecimalAnswer != 0 && DecimalAnswer != ".") { + DecimalAnswerVal = parseFloat(DecimalAnswer).toFixed(1) + } else { + DecimalAnswerVal = "0.0" + } + } else { + DecimalAnswerVal = answer + } + + // let answerId=QD[id_key] || ''; + let answerId = QD[id_key] == 0 ? 0 : (QD[id_key] || ''); + + let multi_options_ids = QD[multi_key] || ''; + + if (qtn.QuestionType == 'Number' || qtn.QuestionType == 'Text' || qtn.QuestionType == 'Decimal' || qtn.QuestionType == 'Date' || qtn.QuestionType == 'Image') { + showImageTag = (qtn.PromoqShowCamera == 1 || qtn.PromoqShowCamera == 'true'); + } + else if ((qtn.QuestionType == 'Single choice list' || qtn.QuestionType == 'Multi choice list')) { + if (qtn.Answers && qtn.Answers.length > 0) { + for (var i = 0; i < qtn.Answers.length; i++) { + let ansss = qtn.Answers[i]; + let isandImgAl = (ansss.PromoaShowCamera == 'true' || ansss.PromoaShowCamera == 1); + // let isandImgAl=(ansss.PromoaCameraMandatory=='true' || ansss.PromoaCameraMandatory==1); + if (qtn.QuestionType == 'Single choice list' && (isandImgAl && ansss.AnswerId == answerId)) { + showImageTag = true; + } + else if (qtn.QuestionType == 'Multi choice list' && (isandImgAl && answerId.indexOf(ansss.AnswerId) >= 0)) { + showImageTag = true; + } + + } + } + } + + let Image1 = showImageTag == 1 ? QD[imgname_key] : ''; + + childV += childV != '' ? ' , ' : ''; + childV += ` ('${PROMO_HEADER_ID}','${StoreId}','${d3}','${PromoDefinitionId}','${PromoId}','${PromoQuestionId}','${PromoQuestionCode}','${QuestionType}','${DecimalAnswerVal}','${answerId}','${multi_options_ids}','${Image1}','${showImageTag}','${isDisabled}','${d3}') `; + } + for (const splitItemIndex in WindowSplits) { + const splitItem = WindowSplits[splitItemIndex]; + let Image1Name = splitItem['Image1Name'] != null && splitItem['Image1Name'] != '' ? splitItem['Image1Name'] : ''; + let Image2Name = splitItem['Image2Name'] != null && splitItem['Image2Name'] != '' ? splitItem['Image2Name'] : ''; + Image1Name = isImage1 == 1 ? Image1Name : ''; + Image2Name = isImage2 == 1 ? Image2Name : ''; + + imageV += imageV != '' ? ' , ' : ''; + imageV += ` ('${PROMO_HEADER_ID}','${StoreId}','${d3}','${PromoDefinitionId}','${PromoId}','${Image1Name}','${Image2Name}','${d3}') `; + } + for (const stockProdIndex in WindowStocks) { + const stockProd = WindowStocks[stockProdIndex]; + let sd = WStocksData.find(i => i.ProductId == stockProd.PromoStockValue) || {}; + let stock = sd.Stock != null ? sd.Stock : (sd.Stock == 0 ? sd.Stock : ''); + let isPromoPresent = sd.isPromoPresent != null ? sd.isPromoPresent : 0; + let { PromoStockDefinitionId, PromoDefinitionId, PromoStockTable, PromoStockField, PromoStockValue, PromoStockMBQ, ProductName } = stockProd + stockV += stockV != '' ? ' , ' : ''; + stockV += ` ('${PROMO_HEADER_ID}','${StoreId}','${d3}','${PromoDefinitionId}','${PromoId}','${PromoStockDefinitionId}','${PromoStockTable}','${PromoStockField}','${PromoStockValue}','${PromoStockMBQ}','${ProductName}','${stock}','${isPromoPresent}','${d3}') `; + } + + } + } + + + + + let add_hdr_data = `INSERT INTO ${AppTables.PROMO_HDR_DATA} (PROMO_HEADER_ID,STORE_ID,VISIT_DATE,PROMO_DEFINITION_ID,PROMO_ID,PROMO_NAME,PROMO_TABLE,PROMO_FIELD,PROMO_VALUE,CHILD_NAME,IS_PRESENT,PROMO_NA_IMAGE,REASON_ID,REASON,REMARK,SHOW_RSN_REMARK,REASON_REMARK,IS_UPDATED,ADDED_DATE) VALUES ${values} `; + let add_child_data = `INSERT INTO ${AppTables.PROMO_CHILD_DATA} (PROMO_HEADER_ID,STORE_ID,VISIT_DATE,PROMO_DEFINITION_ID,PROMO_ID,QUESTION_ID,QUESTION_CODE,QUESTION_TYPE,ANSWER,ANSWER_ID,MULTI_OPTIONS_IDS,IMAGE1,IMAGE_ALLOW1,IS_DISABLED,ADDED_DATE) VALUES ${childV} `; + let add_images_data = `INSERT INTO ${AppTables.PROMO_IMAGES} (PROMO_HEADER_ID,STORE_ID,VISIT_DATE,PROMO_DEFINITION_ID,PROMO_ID,IMAGE1,IMAGE2,ADDED_DATE) VALUES ${imageV} `; + let add_stock_data = `INSERT INTO ${AppTables.PROMO_STOCK_DATA} (PROMO_HEADER_ID,STORE_ID,VISIT_DATE,PROMO_DEFINITION_ID,PROMO_ID,PROMO_STOCK_DEFINITION_ID,PROMO_STOCK_TABLE,PROMO_STOCK_FIELD,PROMO_STOCK_VALUE,PROMO_STOCK_MBQ,PRODUCT_NAME,STOCK,IS_PROMO_PRESENT,ADDED_DATE) VALUES ${stockV} `; + //console.log("imageV:", add_child_data); + + + await txn.executeSql(add_hdr_data, [], async function (txn2, txnres) { + //console.log('st header data added'); + var isSplitImageAdded = true, isStockAdded = true, isChildAdded = true; + if (imageV != '') { + isSplitImageAdded = await executeQuery(add_images_data); + } + if (stockV != '') { + isStockAdded = await executeQuery(add_stock_data); + } + if (childV != '') { + isChildAdded = await executeQuery(add_child_data); + } + + if (!isSplitImageAdded) { + setProcessing(false); notify(ST.Cannotaddpromotionimages); + } + else if (!isStockAdded) { + setProcessing(false); notify(ST.Cannotaddpromotionstockdata); + } + else if (!isChildAdded) { + setProcessing(false); notify(ST.Cannotaddpromotionquestionsdata); + } + else { + // clear store data in local storage to avoiding re-set data for the store + clear_item('storeData') + //console.log("store is stored") + setProcessing(false); notify(ST.Promotiondataupdatedsuccessfully); + props.navigation.goBack(); + } + + }, function (txnE, txnerr) {console.log(txnerr); setProcessing(false); notify(ST.Cannotaddpromotiondata); },); + }); + } catch (err) { + //console.log(err); + } + } + + + async function removePreviousData() { + let { StoreId, ChainId, StateId, StoreTypeId } = storeData; + + return new Promise((resolve, reject) => { + + db.transaction(async function (txn) { + let FilterIdsJoin = FilteredPromoValues.join(','); + let q = `SELECT * FROM ${AppTables.PROMO_HDR_DATA} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' and PROMO_VALUE in (${FilterIdsJoin}) ` + await txn.executeSql(q, [], async function (txn2, txnres) { + //console.log("data to delete:", txnres.rows.length); + if (txnres.rows.length > 0) { + let arr = []; + let isHdrDel = false, isQtnsDel = false, isImagesDel = false, isStockDel = false; + for (let i = 0; i < txnres.rows.length; i++) { + let data = txnres.rows.item(i); + let { PROMO_HEADER_ID } = data; + arr.push(PROMO_HEADER_ID); + + if (i == txnres.rows.length - 1) { + let AllHdrIds = `'${arr.join("','")}'`; + + await txn.executeSql(`DELETE FROM ${AppTables.PROMO_HDR_DATA} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' and PROMO_HEADER_ID in (${AllHdrIds}) `, [], async function (txn2, txnres) { + //console.log('window hdr data deleted'); + isHdrDel = true; + if (isHdrDel && isQtnsDel && isImagesDel && isStockDel) { + resolve(true); + } + }, function (txnE, txnerr) { console.log(txnerr); },); + await txn.executeSql(`DELETE FROM ${AppTables.PROMO_CHILD_DATA} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' and PROMO_HEADER_ID in (${AllHdrIds}) `, [], async function (txn2, txnres) { + //console.log('window child data deleted'); + isQtnsDel = true; + if (isHdrDel && isQtnsDel && isImagesDel && isStockDel) { + resolve(true); + } + }, function (txnE, txnerr) { console.log(txnerr); },); + await txn.executeSql(`DELETE FROM ${AppTables.PROMO_IMAGES} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' and PROMO_HEADER_ID in (${AllHdrIds}) `, [], async function (txn2, txnres) { + //console.log('window images data deleted'); + isImagesDel = true; + if (isHdrDel && isQtnsDel && isImagesDel && isStockDel) { + resolve(true); + } + }, function (txnE, txnerr) { console.log(txnerr); },); + await txn.executeSql(`DELETE FROM ${AppTables.PROMO_STOCK_DATA} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' and PROMO_HEADER_ID in (${AllHdrIds}) `, [], async function (txn2, txnres) { + //console.log('window stock data deleted'); + isStockDel = true; + if (isHdrDel && isQtnsDel && isImagesDel && isStockDel) { + resolve(true); + } + }, function (txnE, txnerr) { console.log(txnerr); },); + + } + } + } + else { + resolve(true); + } + }, function (txnE, txnerr) { console.log(txnerr); resolve(false); },); + + + }); + + }).then((val) => { + return val; + }).catch((err) => { + //console.log('error:', err); + return false; + }) + } + + async function executeQuery(q) { + + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + await txn.executeSql(q, [], async function (txn2, txnres2) { + resolve(true); + }, function (Etxn, txnerr) { console.log(txnerr); resolve(false) }); + }); + }).then((val) => { + return val; + }).catch((err) => { + //console.log(err); + return false; + }) + } + + + async function validate() { + let isValid = true; + + // Get KPI field information + let isPromoImage1 = KPIFields.findIndex(i => i.KPIFieldName == 'PromoImage1'); + let isPromoImage1KPIObj = isPromoImage1 >= 0 ? KPIFields[isPromoImage1] : {}; + let isPromoImage1MANDCOUNT = isPromoImage1 >= 0 ? isPromoImage1KPIObj['KPIMandatory'] : 1; + + let isPromoImage2 = KPIFields.findIndex(i => i.KPIFieldName == 'PromoImage2'); + let isPromoImage2KPIObj = isPromoImage2 >= 0 ? KPIFields[isPromoImage2] : {}; + let isPromoImage2MANDCOUNT = isPromoImage2 >= 0 ? isPromoImage2KPIObj['KPIMandatory'] : 1; + + let PromotionValidationRequiredI = KPIFields.findIndex(i => i.KPIFieldName == 'PromotionValidationRequired'); + let PromotionValidationRequiredObj = PromotionValidationRequiredI >= 0 ? KPIFields[PromotionValidationRequiredI] : {}; + let PromotionValidationRequired = PromotionValidationRequiredI >= 0 ? PromotionValidationRequiredObj['KPIFieldEnable'] : true; + + let isListedSKUIndex = KPIFields.findIndex(i => i.KPIFieldName == 'ListedSKUCheckbox'); + let isListedSKUKPIObj = isListedSKUIndex >= 0 ? KPIFields[isListedSKUIndex] : {}; + let isListedSKUEnable = isListedSKUIndex >= 0 ? isListedSKUKPIObj['KPIFieldEnable'] : true; + + function showError(obj, isErr) { + //console.log("error obj:", obj); + setErrorField(obj); + setError(isErr); + } + + // Validate only if permit + return new Promise((resolve, reject) => { + (async function validateWindows() { + for (const [index, window] of globalWindows.entries()) { + let isImage1 = window.PromoImage1 == 'true' || window.PromoImage1 == 1 ? 1 : 0; + let isImage2 = window.PromoImage2 == 'true' || window.PromoImage2 == 1 ? 1 : 0; + let isNAImageAvl = window.PromoNotExistCamera == 'true' || window.PromoNotExistCamera == 1 ? 1 : 0; + let isNAReasonEnable = window.PromoNotExistReasonEnable == 'true' || window.PromoNotExistReasonEnable == 1 ? 1 : 0; + let isReasonEnable = window.PromoExistReasonEnable == 'true' || window.PromoExistReasonEnable == 1 ? 1 : 0; + let isStockReq = window.PromoElementStockRequired == 'true' || window.PromoElementStockRequired == 1 ? 1 : 0; + let StockQtyRequired = window.StockQtyRequired == 'true' || window.StockQtyRequired == 1 ? 1 : 0; + let WindowQuestions = window.WindowQuestions || []; + let WindowStocks = window.WindowStocks || []; + + const wind = WindowData.find(i => i.PromoId === window.PromoId && i.PromoDefinitionId === window.PromoDefinitionId); + //console.log('Processing window:', window); + //console.log('Matching WindowData:', wind); + let isPresent = wind.isPresent != null && wind.isPresent != '' ? wind.isPresent : '0'; + let ReasonId = wind.ReasonId != null ? wind.ReasonId : ''; + + //console.log(wind, "windwindwind1133") + + if (!wind) { + console.warn('No matching WindowData for:', window); + isValid = false; + break; // Exit if no matching WindowData + } + + let Reason = wind.Reason != null ? wind.Reason : ''; + let NAImage1 = wind.NAImage1 != null ? wind.NAImage1 : ''; + let NAImage1Path = wind.NAImage1Path != null ? wind.NAImage1Path : ''; + let remark = wind.remark != null ? wind.remark : ''; + let WindowSplits = wind.WindowSplits || []; + let QD = wind.WindowQA || {}; + let WStocksData = wind.WStocksData || []; + let showOtherText = wind.showOtherText != null ? wind.showOtherText : false; + + let errorobj = { 'EF_Window': window }; + + if (isPresent == '1') { + if (PromotionValidationRequired == true && isReasonEnable == true && ReasonId == '') { + errorobj['EF_NExistReason'] = "NExistReason"; + showError(errorobj, true); + notify(`${ST.Pleaseselectreasonfor} ${window.PromoName}`, 'LONG'); + resolve(false); return; + } + + if (PromotionValidationRequired == true && StoreCameraAllow && window.NoOfSplit > 0 && WindowSplits.length > 0 && (isImage1 == 1 || isImage2 == 1)) { + for (const [splitItemIndex, splitItem] of WindowSplits.entries()) { + let Image1Name = splitItem['Image1Name'] != null && splitItem['Image1Name'] != '' ? splitItem['Image1Name'] : ''; + let Image2Name = splitItem['Image2Name'] != null && splitItem['Image2Name'] != '' ? splitItem['Image2Name'] : ''; + let currentImgIndex = splitItemIndex + 1; + + if (isImage1 == 1 && currentImgIndex <= isPromoImage1MANDCOUNT && Image1Name == '') { + errorobj['EF_splitImage1'] = "splitImage1"; + errorobj['EF_splitItemIndex'] = splitItemIndex; + showError(errorobj, true); + notify(`${ST.Pleaseclickallimagesfor} ${window.PromoName}`, 'LONG'); + resolve(false); return; + } else if (isImage2 == 1 && currentImgIndex <= isPromoImage2MANDCOUNT && Image2Name == '') { + errorobj['EF_splitImage2'] = "splitImage2"; + errorobj['EF_splitItemIndex'] = splitItemIndex; + showError(errorobj, true); + notify(`${ST.Pleaseclickallimagesfor} ${window.PromoName}`, 'LONG'); + resolve(false); return; + } + } + } + + if (PromotionValidationRequired == true && isStockReq == 1) { + let isProductSelected = false; + for (const [stockProdIndex, stockProd] of WindowStocks.entries()) { + let sd = WStocksData.find(i => i.ProductId == stockProd.PromoStockValue) || {}; + let stock = sd.Stock != null ? sd.Stock : (sd.Stock == 0 ? sd.Stock : ''); + let isPromoPresent = sd.isPromoPresent != null ? sd.isPromoPresent : 0; + + if (isPromoPresent == 1) { + isProductSelected = true; + } + + if ((isListedSKUEnable == true && isPromoPresent == 1 && StockQtyRequired == 1 && stock == '') || (isListedSKUEnable != true && stock !== 0 && (stock == null || stock == ''))) { + errorobj['EF_stock'] = "input1_"; + errorobj['EF_stockProd'] = stockProd; + let refIn1 = inputRefs.current['input1_' + window.PromoDefinitionId + '_' + stockProd.PromoStockDefinitionId]; + if (refIn1 != null) { + refIn1.focus(); + } + showError(errorobj, true); + notify(`${ST.Pleaseenterstockfor} ${window.PromoName} ( ${stockProd.ProductName} )`, 'LONG'); + resolve(false); return; + } + + if (isListedSKUEnable == true && stockProdIndex == WindowStocks.length - 1) { + if (!isProductSelected) { + errorobj['EF_isProductSelected'] = "isProductSelected"; + showError(errorobj, true); + notify(`${ST.PleaseselectatleastoneSKUfor} ${window.PromoName}`, 'LONG'); + resolve(false); return; + } + } + } + } + + if (PromotionValidationRequired == true && WindowQuestions.length > 0) { + for (const qtn of WindowQuestions) { + let selansid = '', selanswer = '', selimg = '', showImageTag = false; + let id_key = qtn.PromoQuestionId + '_AnswerId'; + let ans_key = qtn.PromoQuestionId + '_Answer'; + let multi_key = qtn.PromoQuestionId + '_MultiOption'; + let date_key = qtn.PromoQuestionId + '_Date'; + let img_key = qtn.PromoQuestionId + '_ImagePath1'; + let imgname_key = qtn.PromoQuestionId + '_ImageName1'; + let rating_key = qtn.PromoQuestionId + '_Rating'; + let list_mcdata = []; + + let isDisabled = qtn.isDisabled != null ? qtn.isDisabled : false; + errorobj['EF_qtn'] = qtn; + + if (!isDisabled) { + let isImgAllowed = ((qtn.PromoqShowCamera == 'true' || qtn.PromoqShowCamera == 1) || (qtn.QuestionType == "Image")); + let checkForAnsKey = (qtn.QuestionType == 'Decimal' || qtn.QuestionType == 'Number' || qtn.QuestionType == 'Text' || qtn.QuestionType == 'Date' || qtn.QuestionType == 'Rating'); + + if (qtn.QuestionType == 'Single choice list') { + selansid = QD[id_key]; + //console.log("selansid-----------", selansid) + } else if (qtn.QuestionType == 'Multi choice list') { + selansid = QD[multi_key] != null && QD[multi_key] != '' ? QD[multi_key].split(',') : []; + } + + let err_type = ''; + if (qtn.QuestionType == 'Single choice list') { + err_type = 'Qtn_Select'; + } else if (qtn.QuestionType == 'Decimal' || qtn.QuestionType == 'Number' || qtn.QuestionType == 'Text') { + err_type = 'Qtn_Input'; + } else if (qtn.QuestionType == 'Date') { + err_type = 'Qtn_Date'; + } + + //console.log("select -------------", qtn?.PromoQuestionName, id_key, QD[id_key], "--", Object.keys(QD).indexOf(id_key) < 0 || (Object.keys(QD).indexOf(id_key) >= 0 && (QD[id_key] === '')), "=====", QD) + + if (qtn.QuestionType == 'Multi choice list' && selansid.length <= 0) { + errorobj['EF_Qtn_MultiChoice'] = 'Qtn_MultiChoice'; + showError(errorobj, true); + notify(`${Pleaseselectoptionsfortherequiredfield} ${ST.In} ${window.PromoName}`, 'SHORT'); + resolve(false); return; + } else if (checkForAnsKey && (Object.keys(QD).indexOf(ans_key) < 0 || (Object.keys(QD).indexOf(ans_key) >= 0 && QD[ans_key] === ''))) { + errorobj['EF_Qtn_Input'] = err_type; + showError(errorobj, true); + let msg = (qtn.QuestionType == 'Date' ? `${ST.Pleasepickadatefortherequiredfield} ${ST.In} ${window.PromoName}` : + (qtn.QuestionType == 'Rating' ? `${Pleaseselectratingfortherequiredfield} ${ST.In} ${window.PromoName}` : + `${ST.Pleasefillalltherequiredfield} ${ST.In} ${window.PromoName}`)); + notify(msg, 'SHORT'); + resolve(false); return; + } else if (Object.keys(QD).indexOf(id_key) < 0 || (Object.keys(QD).indexOf(id_key) >= 0 && (QD[id_key] === ''))) { + errorobj['EF_Qtn_Input'] = err_type; + showError(errorobj, true); + notify(`${ST.Pleasefillalltherequiredfield} ${ST.In} ${window.PromoName}`, 'SHORT'); + resolve(false); return; + } else if (StoreCameraAllow && isImgAllowed && (Object.keys(QD).indexOf(img_key) < 0 || (Object.keys(QD).indexOf(img_key) >= 0 && QD[img_key] === ''))) { + errorobj['EF_Qtn_Image'] = 'Qtn_Image'; + showError(errorobj, true); + notify(`${ST.Pleaseaddimages} ${ST.In} ${window.PromoName}`, 'SHORT'); + resolve(false); return; + } else { + console.log('no condition found'); + } + + if ((qtn.QuestionType == 'Single choice list' || qtn.QuestionType == 'Multi choice list')) { + if (qtn.Answers && qtn.Answers.length > 0) { + for (const ansss of qtn.Answers) { + let isandImgAl = (ansss.PromoaShowCamera == 'true' || ansss.PromoaShowCamera == 1); + let isandCameraMandatory = (ansss.PromoaCameraMandatory == 'true' || ansss.PromoaCameraMandatory == 1); + + if (qtn.QuestionType == 'Single choice list' && isandCameraMandatory && (isandImgAl && ansss.AnswerId == selansid)) { + showImageTag = true; + } else if (qtn.QuestionType == 'Multi choice list' && (isandImgAl && selansid.indexOf(ansss.AnswerId) >= 0)) { + showImageTag = true; + } + } + } + } + + if (StoreCameraAllow && showImageTag && (Object.keys(QD).indexOf(img_key) < 0 || (Object.keys(QD).indexOf(img_key) >= 0 && QD[img_key] === ''))) { + errorobj['EF_Qtn_Image'] = 'Qtn_Image'; + showError(errorobj, true); + notify(`${ST.Pleaseaddimages} ${ST.In} ${window.PromoName}`, 'SHORT'); + resolve(false); return; + } + } else { + // Don't validate field when disabled + } + } + } + } else { + //console.log(PromotionValidationRequired, 'PromotionValidationRequiredcont', isReasonEnable, 'isReasonEnable', ReasonId, "ReasonId"); + + if (PromotionValidationRequired == true && isNAReasonEnable == true && ReasonId == '') { + errorobj['EF_NExistReason'] = "NExistReason"; + showError(errorobj, true); + notify(`${ST.Pleaseselectreasonfor} ${window.PromoName}`, 'LONG'); + resolve(false); return; + } else if (isNAReasonEnable == true && showOtherText == true && (wind.RemarkText == null || wind.RemarkText == '')) { + errorobj['EF_NExistRemark'] = "NExistRemark"; + showError(errorobj, true); + notify(`${ST.PleaseEnterRemarkFor} ${window.PromoName}`, 'LONG'); + resolve(false); return; + } else if (PromotionValidationRequired == true && StoreCameraAllow && isNAImageAvl == true && NAImage1 == '') { + errorobj['EF_NExistImage'] = "NExistImage"; + showError(errorobj, true); + notify(`${ST.Pleaseclickimagefor} ${window.PromoName}`, 'LONG'); + resolve(false); return; + } + } + + if (index == (globalWindows.length - 1)) { + resolve(true); return; + } + } + })().catch(err => { + console.error('Validation error:', err); + return false; + }); + }); + } + + + function onselectionChange(option, keyLbl, keyVal, otherData) { + setErrorField({}); + setError(false); + let item = otherData.window; + let allData = WindowData; + let defData = { 'PromoId': item.PromoId, 'PromoDefinitionId': item.PromoDefinitionId }; + const win_index = allData.findIndex(i => i.PromoId == item.PromoId && i.PromoDefinitionId == item.PromoDefinitionId); + let wind = win_index >= 0 ? (allData[win_index] || defData) : defData; + wind[keyVal] = option.value; + wind[keyLbl] = option.label; + + + if (keyLbl == 'Reason') { + let rsn_Index = reasons_list.findIndex(i => i.ReasonId == option.value); + + if (rsn_Index >= 0) { + let rsn = reasons_list[rsn_Index]; + let IsRemarkTaken = rsn.IsRemarkTaken == 1 || rsn.IsRemarkTaken == '1' ? true : false; + + if (IsRemarkTaken == true) { + wind['showOtherText'] = true; + } + else { + wind['showOtherText'] = false; + } + } + } + + win_index >= 0 ? allData[win_index] = wind : allData.push(wind); + + + let objIndex = InputChange.findIndex(i => i.PromoId == item.PromoId && i.PromoDefinitionId == item.PromoDefinitionId); + let winArr = [...InputChange] + winArr[objIndex].Flag = true + + setInputChange(winArr) + // setWindowData(allData); + BgWindowData(allData); + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + + function onselectionChange2(option, qtn, window) { + setErrorField({}); + setError(false); + let allData = WindowData; + let defData = { 'PromoId': window.PromoId, 'PromoDefinitionId': window.PromoDefinitionId }; + const wind_index = allData.findIndex(i => i.PromoId == window.PromoId && i.PromoDefinitionId == window.PromoDefinitionId); + + let wind = wind_index >= 0 ? allData[wind_index] : defData; + let data = wind.WindowQA || {}; + let id_key = qtn.PromoQuestionId + '_AnswerId'; + let ans_key = qtn.PromoQuestionId + '_Answer'; + data[id_key] = option.value; + data[ans_key] = option.label; + + + wind['WindowQA'] = data; + wind_index >= 0 ? allData[wind_index] = wind : allData.push(wind); + + let objIndex = InputChange.findIndex(i => i.PromoId == window.PromoId && i.PromoDefinitionId == window.PromoDefinitionId); + let winArr = [...InputChange] + winArr[objIndex].Flag = true + + setInputChange(winArr) + // setWindowData(allData); + BgWindowData(allData); + + let aq_ans = qtn.Answers != null ? qtn.Answers : []; + let ans_obj = aq_ans.find(i => i.AnswerId == option.value) || {}; + let EQtns = ans_obj.PromoaQuestionEnable != null && ans_obj.PromoaQuestionEnable != '' ? ans_obj.PromoaQuestionEnable.replace(' ', '').split(',') : []; + let DQtns = ans_obj.PromoaQuestionDisable != null && ans_obj.PromoaQuestionDisable != '' ? ans_obj.PromoaQuestionDisable.replace(' ', '').split(',') : []; + + let sqtns = window.WindowQuestions || [] + + if (EQtns.length > 0) { + enableQtns(sqtns, EQtns, DQtns, data, wind, wind_index, allData, window) + } + else if (DQtns.length > 0) { + disableQtns(sqtns, DQtns, data, wind, wind_index, allData, window,option) + } + else { + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + BgUnsavedChanges(true) + } + + async function disableQtns(sqtns, DQtns, data, wind = {}, wind_index = -1, allData = [], window = {},option) { + ////console.log("hello--", 22222) + if (DQtns.length > 0) { + new Promise.all( + DQtns.map((qid, q_index) => { + let s_qtnindex = sqtns.findIndex(i => i.PromoQuestionId == qid) || {}; + if (s_qtnindex >= 0) { + let s_qtn = sqtns[s_qtnindex]; + s_qtn['isDisabled'] = true + sqtns[s_qtnindex] = s_qtn; + let id_key = s_qtn.PromoQuestionId + '_AnswerId'; + let ans_key = s_qtn.PromoQuestionId + '_Answer'; + data[id_key] = 0; + data[ans_key] = ''; + + wind['WindowQA'] = data; + wind_index >= 0 ? allData[wind_index] = wind : allData.push(wind); + } + return false + }) + ).then(async (val) => { + ///jp fixed queation enable disable on app kill + let allwindows = Windows; + let windowIndex = allwindows.findIndex(i => i.PromoDefinitionId == window.PromoDefinitionId && i.PromoId == window.PromoId) + let dataIndex = allData.findIndex(i => i.PromoDefinitionId == window.PromoDefinitionId && i.PromoId == window.PromoId); + + if (windowIndex >= 0) { + window['WindowQuestions'] = sqtns; + allwindows[windowIndex] = window; + // ✅ Update in allData too + if (dataIndex >= 0) { + allData[dataIndex]['WindowQuestions'] = sqtns; + } + //clear images + const activeQuestions = wind?.WindowQuestions?.filter(q => q.isDisabled === false) || []; + const PromoQuestionId = activeQuestions?.map(q => q.PromoQuestionId); + if(PromoQuestionId!=null && PromoQuestionId!=undefined){ + let id_key = PromoQuestionId + '_ImageName1'; + let id_key_path = PromoQuestionId + '_ImagePath1'; + data[id_key] = ''; + data[id_key_path] = ''; + } + // ✅ Set final updated refs and states + WindowDataRef.current = allData; + BgWindowData(allData); + BGWindowsRefFun(allwindows) + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + + console.log("allwindows",wind); + + } + else { + setrerenderdata(!rerenderdata); + } + + }) + } + } + + async function enableQtns(sqtns, EQtns, DQtns, data, wind = {}, wind_index = -1, allData = [], window = {}) { + new Promise.all( + EQtns.map((qid, q_index) => { + let s_qtnindex = sqtns.findIndex(i => i.PromoQuestionId == qid) || {}; + if (s_qtnindex >= 0) { + let s_qtn = sqtns[s_qtnindex]; + s_qtn['isDisabled'] = false + sqtns[s_qtnindex] = s_qtn; + } + return false + }) + ).then(async (val) => { + if (DQtns.length > 0) { + disableQtns(sqtns, DQtns, data, wind, wind_index, allData, window) + } + else { + ///jp fixed queation enable disable on app kill + let allwindows = Windows; + let windowIndex = allwindows.findIndex(i => i.PromoDefinitionId == window.PromoDefinitionId && i.PromoId == window.PromoId) + let dataIndex = allData.findIndex(i => + i.PromoDefinitionId == window.PromoDefinitionId && + i.PromoId == window.PromoId + ); + + if (windowIndex >= 0) { + window['WindowQuestions'] = sqtns; + allwindows[windowIndex] = window; + // ✅ Update in allData too + if (dataIndex >= 0) { + allData[dataIndex]['WindowQuestions'] = sqtns; + } + //console.log("allData---", allData); + + // ✅ Set final updated refs and states + WindowDataRef.current = allData; + BGWindowsRefFun(allwindows) + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + else { + setrerenderdata(!rerenderdata); + } + } + }) + } + + async function setMultiSelectValue(selectedItems = [], qtn = {}, window = {}) { + setErrorField({}); + setError(false); + //console.log('setMultiSelectValue', selectedItems); + let id_key = qtn.PromoQuestionId + '_AnswerId'; + let ans_key = qtn.PromoQuestionId + '_Answer'; + let multi_key = qtn.PromoQuestionId + '_MultiOption'; + + let allData = WindowData; + let defData = { 'PromoId': window.PromoId, 'PromoDefinitionId': window.PromoDefinitionId }; + const wind_index = allData.findIndex(i => i.PromoId == window.PromoId && i.PromoDefinitionId == window.PromoDefinitionId); + let wind = wind_index >= 0 ? allData[wind_index] : defData; + let obj = wind.WindowQA || {}; + obj[id_key] = 0; + obj[multi_key] = selectedItems.join(','); + let anss = []; + selectedItems.map((itemValue) => { + let ans = qtn.Answers.find(c1 => c1.AnswerId == itemValue); + if (ans.Answer) { anss.push(ans.Answer) } + }); + obj[ans_key] = anss.join(','); + //console.log('obj:', obj); + + wind['WindowQA'] = obj; + wind_index >= 0 ? allData[wind_index] = wind : allData.push(wind); + + + let objIndex = InputChange.findIndex(i => i.PromoId == window.PromoId && i.PromoDefinitionId == window.PromoDefinitionId); + let winArr = [...InputChange] + winArr[objIndex].Flag = true + + setInputChange(winArr) + // setWindowData(allData); + BgWindowData(allData); + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + + function setTextValue(value, qtn, window, type = '') { + setErrorField({}); + setError(false); + if (value != '') { + let isValid = validateNumber(value, type); + if (!isValid) { + return; + } + } + + let id_key = qtn.PromoQuestionId + '_AnswerId'; + let ans_key = qtn.PromoQuestionId + '_Answer'; + + let allData = WindowData; + let defData = { 'PromoId': window.PromoId, 'PromoDefinitionId': window.PromoDefinitionId }; + const wind_index = allData.findIndex(i => i.PromoId == window.PromoId && i.PromoDefinitionId == window.PromoDefinitionId); + let wind = wind_index >= 0 ? allData[wind_index] : defData; + let obj = wind.WindowQA || {}; + + if (qtn.QuestionType == 'Date') { + let date_key = qtn.PromoQuestionId + '_Date'; + let d = value != null ? new Date(value) : new Date(); + let mfdate = moment(d).format('MM/YYYY'); + showQtnDatePicker(qtn, window, false); + obj[id_key] = 0; + obj[ans_key] = mfdate; + obj[date_key] = moment(d).format('MM/DD/YYYY'); + } + else { + obj[id_key] = 0; + obj[ans_key] = value; + } + + //console.log(value, obj); + wind['WindowQA'] = obj; + wind_index >= 0 ? allData[wind_index] = wind : allData.push(wind); + + // setWindowData(allData); + BgWindowData(allData); + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + + function showQtnDatePicker(qtn, window, show = false) { + let allQtns = window.WindowQuestions || []; + let newqtnIndex = allQtns.findIndex(q => q.PromoQuestionId == qtn.PromoQuestionId); + + if (newqtnIndex >= 0) { + let newqtn = allQtns[newqtnIndex]; + newqtn.showDatePicker = show; + allQtns[newqtnIndex] = newqtn; + window['WindowQuestions'] = allQtns; + let allWindows = Windows; + const winIndex = allWindows.findIndex(i => i.PromoId == window.PromoId && i.PromoDefinitionId == window.PromoDefinitionId) || {}; + allWindows[winIndex] = window; + // setWindows(allWindows); + BGWindowsRefFun(allWindows); + // setGlobalWindows(allWindows); + if (show == true) setrerenderdata(!rerenderdata); + } + } + + function setRatingValue(data) { + setRatingOrder(data); + } + + function onRatingCancel() { + setShowRating(false); + } + + function onRatingSave() { + setShowRating(false); + let qtn = RatingQtn; + let window = RatingWindow; + let id_key = qtn.PromoQuestionId + '_AnswerId'; + let ans_key = qtn.PromoQuestionId + '_Answer'; + let rating_key = qtn.PromoQuestionId + '_Rating'; + let ids = [], anss = []; + RatingOrder.map((item, index) => { + ids.push(item.AnswerId); + anss.push(item.Answer); + }) + + let allData = WindowData; + let defData = { 'PromoId': window.PromoId, 'PromoDefinitionId': window.PromoDefinitionId }; + const wind_index = allData.findIndex(i => i.PromoId == window.PromoId && i.PromoDefinitionId == window.PromoDefinitionId); + let wind = wind_index >= 0 ? allData[wind_index] : defData; + let obj = wind.WindowQA || {}; + + obj[rating_key] = ids.join(','); + obj[id_key] = 0; + obj[ans_key] = anss.join(','); + + wind['WindowQA'] = obj; + wind_index >= 0 ? allData[wind_index] = wind : allData.push(wind); + + let objIndex = InputChange.findIndex(i => i.PromoId == window.PromoId && i.PromoDefinitionId == window.PromoDefinitionId); + let winArr = [...InputChange] + winArr[objIndex].Flag = true + + setInputChange(winArr) + // setWindowData(allData); + BgWindowData(allData); + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + + + function onChoiceSelect(item, val, key, animatedChoice) { + + let win_index = InputChange.find(i => i.PromoId == item.PromoId && i.PromoDefinitionId == item.PromoDefinitionId) + let changeValue = win_index.Flag; + + if (changeValue) { + setIsPresentClean(val) + setDataCleanAnim(animatedChoice) + setDataCleanItem(item) + setDataCleanModal(true) + return + } + + var val1 = 0; + val == 1 ? val1 = 1 : ''; + + if (animatedChoice != null) { + Animated.timing(animatedChoice, { + toValue: val1, + duration: 400, + useNativeDriver: false, + }).start(); + } + onWindowDataChange(item, val, key) + } + + function onWindowDataChange(item, val, key) { + let allData = WindowData; + let defData = { 'PromoId': item.PromoId, 'PromoDefinitionId': item.PromoDefinitionId }; + const win_index = allData.findIndex(i => i.PromoId == item.PromoId && i.PromoDefinitionId == item.PromoDefinitionId); + let wind = win_index >= 0 ? (allData[win_index] || defData) : defData; + wind[key] = val; + + if (key == 'ReasonId') { + let rsn = reasons_list.find(r => r.ReasonId == val) || {}; + wind['Reason'] = rsn.Reason || ''; + } + + win_index >= 0 ? allData[win_index] = wind : allData.push(wind); + + if (key != "isPresent") { + let objIndex = InputChange.findIndex(i => i.PromoId == item.PromoId && i.PromoDefinitionId == item.PromoDefinitionId); + let winArr = [...InputChange] + winArr[objIndex].Flag = true + setInputChange(winArr) + } + // setWindowData(allData); + BgWindowData(allData); + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + + function onWindowDataClean() { + if (DataCleanAnim != null) { + //console.log("anim---") + let anim = isPresentClean == 1 ? 1 : ''; + Animated.timing(DataCleanAnim, { + toValue: anim, + duration: 400, + useNativeDriver: false, + }).start(); + } + let isPromoImage1 = KPIFields.findIndex(i => i.KPIFieldName == 'PromoImage1') + let isPromoImage1KPIObj = isPromoImage1 >= 0 ? KPIFields[isPromoImage1] : {}; + let isPromoImage1MANDCOUNT = isPromoImage1 >= 0 ? isPromoImage1KPIObj['KPIMandatory'] : 1; + + let isPromoImage2 = KPIFields.findIndex(i => i.KPIFieldName == 'PromoImage2') + let isPromoImage2KPIObj = isPromoImage2 >= 0 ? KPIFields[isPromoImage2] : {}; + let isPromoImage2MANDCOUNT = isPromoImage2 >= 0 ? isPromoImage2KPIObj['KPIMandatory'] : 1; + + let allData = WindowData; + let WindowSplits = []; + for (var s = 0; s < DataCleanItem.NoOfSplit; s++) { + let img1Req = s <= isPromoImage1MANDCOUNT ? true : false; + let img2Req = s <= isPromoImage2MANDCOUNT ? true : false; + let obj = { 'Image1Name': '', 'Image1': '', 'Image2Name': '', 'Image2': '', 'img1Required': img1Req, 'img2Required': img2Req }; + WindowSplits.push(obj); + } + i => i.PromoId == item.PromoId && i.PromoDefinitionId == item.PromoDefinitionId + + + let defData = { 'PromoId': DataCleanItem.PromoId, 'PromoDefinitionId': DataCleanItem.PromoDefinitionId, 'WindowSplits': WindowSplits, 'WindowQA': {}, 'WStocksData': [], isPresent: isPresentClean, 'isAllSKUChecked': 0 }; + const win_index = allData.findIndex(i => i.PromoId == DataCleanItem.PromoId && i.PromoDefinitionId == DataCleanItem.PromoDefinitionId); + allData[win_index] = defData + + let objIndex = InputChange.findIndex((obj => obj.PromoId == DataCleanItem.PromoId && obj.PromoDefinitionId == DataCleanItem.PromoDefinitionId)); + let winArr = [...InputChange] + winArr[objIndex].Flag = false + + setInputChange(winArr) + // setWindowData(allData); + BgWindowData(allData); + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setDataCleanModal(false) + setrerenderdata(!rerenderdata); + } + + const onCancelClean = () => { + setDataCleanModal(false) + } + const onclear = () => { + onWindowDataClean(DataCleanItem) + } + + async function setWindowStockVal(val, window, stockProd, key, type = '') { + setErrorField({}); + setError(false); + if (val != '') { + let isValid = validateNumber(val, type); + if (!isValid) { + return; + } + } + + let allData = WindowData; + let defData = { 'PromoId': window.PromoId, 'PromoDefinitionId': window.PromoDefinitionId }; + const win_index = allData.findIndex(i => i.PromoId == window.PromoId && i.PromoDefinitionId == window.PromoDefinitionId); + let wind = win_index >= 0 ? (allData[win_index] || defData) : defData; + let WStocksData = wind['WStocksData'] || []; + let sdIndex = WStocksData.findIndex(i => i.ProductId == stockProd.PromoStockValue); + let sd = sdIndex >= 0 ? WStocksData[sdIndex] : { 'ProductId': stockProd.PromoStockValue, 'Stock': '' }; + sd[key] = val; + sdIndex >= 0 ? WStocksData[sdIndex] = sd : WStocksData.push(sd); + wind['WStocksData'] = WStocksData; + win_index >= 0 ? allData[win_index] = wind : allData.push(wind); + if (key == 'isPromoPresent') { + let isAllChecked = await verifyAllChecked(val, window, stockProd, key); + wind['isAllSKUChecked'] = isAllChecked; + } + + // setWindowData(allData); + BgWindowData(allData); + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata4(!rerenderdata4); + } + + async function onCatTextChange(window, key, val, type = '') { + setErrorField({}); + setError(false); + if (val != '') { + let isValid = validateNumber(val, type); + if (!isValid) { + return; + } + } + + let item = window; + let allData = WindowData; + let defData = { 'PromoId': item.PromoId, 'PromoDefinitionId': item.PromoDefinitionId }; + const win_index = allData.findIndex(i => i.PromoId == item.PromoId && i.PromoDefinitionId == item.PromoDefinitionId); + let wind = win_index >= 0 ? (allData[win_index] || defData) : defData; + wind[key] = val; + + win_index >= 0 ? allData[win_index] = wind : allData.push(wind); + // setWindowData(allData); + BgWindowData(allData); + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + + + async function verifyAllChecked(val, window, stockProd, key) { + return await new Promise((resolve, reject) => { + let WindowStocks = window.WindowStocks || []; + let allData = WindowData; + const win_index = allData.findIndex(i => i.PromoId == window.PromoId && i.PromoDefinitionId == window.PromoDefinitionId); + let wind = win_index >= 0 ? (allData[win_index] || defData) : defData; + let WStocksData = wind['WStocksData'] || []; + if (WindowStocks.length > 0) { + let isAllChecked = 1; + for (var i = 0; i < WindowStocks.length; i++) { + let stockProd = WindowStocks[i]; + + let sdIndex1 = WStocksData.findIndex(a => a.ProductId == stockProd.PromoStockValue); + let sd1 = sdIndex1 >= 0 ? WStocksData[sdIndex1] : {}; + let isPromoPresent = sd1.isPromoPresent; + if (isPromoPresent == null || isPromoPresent == '' || isPromoPresent == 0 || isPromoPresent == '0') { + isAllChecked = 0 + } + + if (i == WindowStocks.length - 1) { + resolve(isAllChecked); + } + } + } + else { + resolve(0); + } + + }).catch((err) => { + //console.log(err); + return 0; + }); + } + + function checkAllSKUs(val, window) { + + let WindowStocks = window.WindowStocks || []; + let allData = WindowData; + let defData = { 'PromoId': window.PromoId, 'PromoDefinitionId': window.PromoDefinitionId }; + const win_index = allData.findIndex(i => i.PromoId == window.PromoId && i.PromoDefinitionId == window.PromoDefinitionId); + let wind = win_index >= 0 ? (allData[win_index] || defData) : defData; + let WStocksData = wind['WStocksData'] || []; + //console.log('WStocksData before:', WStocksData) + for (var i = 0; i < WindowStocks.length; i++) { + let stockProd = WindowStocks[i]; + + let sdIndex = WStocksData.findIndex(a => a.ProductId == stockProd.PromoStockValue); + let sd = sdIndex >= 0 ? WStocksData[sdIndex] : { 'ProductId': stockProd.PromoStockValue, 'Stock': '' }; + let isPromoPresent = (val == 1 || val == '1') ? 1 : 0; + sd['isPromoPresent'] = isPromoPresent; + + sdIndex >= 0 ? (WStocksData[sdIndex] = sd) : (WStocksData.push(sd)); + } + + + wind['WStocksData'] = WStocksData; + wind['isAllSKUChecked'] = val == 1 ? 1 : 0; + //console.log('wind updated'); + win_index >= 0 ? allData[win_index] = wind : allData.push(wind); + + // setWindowData(allData); + BgWindowData(allData); + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + + function onSaveCancel() { + setShowAlert(false); + } + + + + function openImageRefView(windowIndex = 0) { + setrefImageIndex(windowIndex); + setShow_zoomImage(true); + } + + function FilterStores(searchedQry) { + searchedQry = searchedQry.toLowerCase(); + //console.log('searchedQry', searchedQry); + let arr = []; + let newWindows = []; + if (searchedQry != null && searchedQry != '') { + + for (let i = 0; i < globalWindows.length; i++) { + let item = globalWindows[i]; + let { PromoName } = item; + if (PromoName.toLowerCase().includes(searchedQry)) { + newWindows.push(item); + } + + if (i == globalWindows.length - 1) { + arr = newWindows; + } + } + } + else { + arr = globalWindows; + } + + // setWindows(arr); + BGWindowsRefFun(arr) + setrerenderdata(!rerenderdata) + setrerenderdata2(!rerenderdata2) + } + + function renderRatingView() { + let qtn = RatingQtn; + let Answers = qtn.Answers; + let id_key = qtn.PromoQuestionId + '_AnswerId'; + let ans_key = qtn.PromoQuestionId + '_Answer'; + let rating_key = qtn.PromoQuestionId + '_Rating'; + + let newarr = RatingOrder; + if (RatingOrder.length <= 0) { + newarr = Answers; + } + + return ( + + + {ST.DragItemsInOrder} + {ST.Pressandholdtodrag} + { setRatingValue(data) }} + keyExtractor={(item) => item.AnswerId} + renderItem={renderItem} + /> + + { onRatingCancel() }}> + {ST.Cancel} + + { onRatingSave() }}> + {ST.Save} + + + + + ) + } + + function render_Picker(label_key, value_key, onChange = () => { }, selected_data = {}, errorStyle = {}) { + var data = []; + let qtn = selected_data.qtn || {}; + let window = selected_data.window || {}; + let isQtnDisabled = qtn.isDisabled != null || qtn.isDisabled != '' ? false : true; + let allAnswers = qtn.Answers || []; + + allAnswers.map((item, index) => { + let obj = { key: index, label: item[label_key], value: item[value_key] }; + if (selected_data.value == item[label_key]) + obj['component'] = {item[label_key]}; + data.push(obj); + }); + + return ( + { onChange(option, qtn, window) }} + overlayStyle={customStyle.addVisPickerOverlay} + cancelContainerStyle={customStyle.addVisPicker_OptionContainerStyle} + optionStyle={customStyle.addvis_opStyle} + optionTextStyle={customStyle.addvis_opTextStyle} + optionContainerStyle={customStyle.addVisPicker_OptionContainerStyle} + selectedKey={'1'} + disabled={isQtnDisabled} + > + {(selected_data.value != null && selected_data.value != '' ? selected_data.value : '-' + ST.select + '-')} + + + ) + } + + function renderDatePicker(qtn, window) { + let qtnn = qtn; + let DateRange = qtn.DateRange; + let maxDate = moment().add(10, 'years').format('MM/DD/YYYY'); + let minDate = moment().subtract(10, 'years').format('MM/DD/YYYY'); + if (DateRange == 'RFD') { + maxDate = moment().format('MM/DD/YYYY'); + } + else if (DateRange == 'RPD') { + minDate = moment().format('MM/DD/YYYY'); + } + + return ( + { setTextValue(selectedDate, qtnn, window) }} + maximumDate={new Date(maxDate)} + minimumDate={new Date(minDate)} + /> + ); + } + + async function OpenImgModal(imgPath, window, splitItem, splitItemIndex, cameraType) { + setSelectedImg(imgPath) + setShowModal(true); + if ((imgPath != '' && imgPath != null)) { + setShowImageSaveOp(false); + } + else { + setShowImageSaveOp(true); + } + setReCapImgModalObj({ window, splitItem, splitItemIndex, cameraType }) + // _OpenCaptureImage_Modal(imgPath,window,splitItem,splitItemIndex,cameraType) + + } + + function cancelImage() { + // setImage1(''); + setSelectedImg(''); + setReCapImgModalObj({}) + setShowModal(false); + } + + function _OpenCaptureImage_Modal(img) { + + const isImageCap = (img != '' || img != null) ? true : false; + + let { window, splitItem, splitItemIndex, cameraType } = reCapImgModalObj + let camera2Label = window != null && window.PromoImage1Lable != null ? window.PromoImage1Lable : ''; + return ( + + { + isImageCap && + + + + + + { openCamera(window, splitItem, splitItemIndex, cameraType) }}> + + + + {!showImageSaveOp && + { cancelImage() }}> + + {ST.Close} + + } + + } + + ) + } + + + function _renderWindow() { + let RemarkEnableIndex = KPIFields.findIndex(i => i.KPIFieldName == 'RemarkEnable') + let RemarkEnableKPIObj = RemarkEnableIndex >= 0 ? KPIFields[RemarkEnableIndex] : {}; + let RemarkEnable = RemarkEnableIndex >= 0 ? RemarkEnableKPIObj['KPIFieldEnable'] : false; + + let isListedSKUIndex = KPIFields.findIndex(i => i.KPIFieldName == 'ListedSKUCheckbox'); + let isListedSKUKPIObj = isListedSKUIndex >= 0 ? KPIFields[isListedSKUIndex] : {}; + let isListedSKUEnable = isListedSKUIndex >= 0 ? isListedSKUKPIObj['KPIFieldEnable'] : true; + + let HidePresentYesNoIndex = KPIFields.findIndex(i => i.KPIFieldName == 'HidePresentYesNo'); + let HidePresentYesNoObj = HidePresentYesNoIndex >= 0 ? KPIFields[HidePresentYesNoIndex] : {}; + let HidePresentYesNoEn = HidePresentYesNoIndex >= 0 ? HidePresentYesNoObj['KPIFieldEnable'] : false; + let HidePresentYesNoEnable = HidePresentYesNoEn == 1 || HidePresentYesNoEn == "1" || HidePresentYesNoEn == true ? true : false; + + return ( + `window_${index.toString()}`} + renderItem={({ item, index }) => { + const window = item; + let windowIndex = index; + + let isImage1 = window.PromoImage1 == 'true' || window.PromoImage1 == 1 ? 1 : 0; + let isImage2 = window.PromoImage2 == 'true' || window.PromoImage2 == 1 ? 1 : 0; + let isNAImageAvl = window.PromoNotExistCamera == 'true' || window.PromoNotExistCamera == 1 ? 1 : 0; + let isNAReasonEnable = window.PromoNotExistReasonEnable == 'true' || window.PromoNotExistReasonEnable == 1 ? 1 : 0; + let isReasonEnable = window.PromoExistReasonEnable == 'true' || window.PromoExistReasonEnable == 1 ? 1 : 0; + let isStockReq = window.PromoElementStockRequired == 'true' || window.PromoElementStockRequired == 1 ? 1 : 0; + let StockQtyRequired = window.StockQtyRequired == 'true' || window.StockQtyRequired == 1 ? 1 : 0; + let PromoTitleEnable = window.PromoDefinitionTitleEnable == 'true' || window.PromoDefinitionTitleEnable == 1 ? 1 : 0; + let PromoTitle = window.PromoDefinitionTitle != null && window.PromoDefinitionTitle != 'undefined' ? window.PromoDefinitionTitle : ""; + let PromoRefImagePopUp = window.PromoRefImagePopUp == 'true' || window.PromoRefImagePopUp == true ? true : false; + + // let isStock_CheckAssrt=window.PromoElementCheckAssortment=='true' || window.PromoElementCheckAssortment==1?1:0; + let RefImage = window.PromoRefImage; + let camera1Label = window.PromoImage1Lable || ''; + let camera2Label = window.PromoImage2Lable || ''; + let WindowQuestions = window.WindowQuestions || []; + let WindowStocks = window.WindowStocks || []; + + let isVisible = Boolean(ItemsInView.find(({ item: i, isViewable }) => i.PromoId == window.PromoId && i.PromoDefinitionId == window.PromoDefinitionId && isViewable)) + + // const wind=WindowData.find(i=>i.PromoId==window.PromoId && i.PromoDefinitionId==window.PromoDefinitionId); + const wind_I = WindowData.findIndex(i => i.PromoId == window.PromoId && i.PromoDefinitionId == window.PromoDefinitionId); + const wind = wind_I != null && wind_I >= 0 ? WindowData[wind_I] : {}; + let isPresent = wind.isPresent != null && wind.isPresent != '' ? wind.isPresent : '0'; + let ReasonId = wind.ReasonId != null ? wind.ReasonId : ''; + let Reason = wind.Reason != null ? wind.Reason : ''; + let showOtherText = wind.showOtherText != null ? wind.showOtherText : false; + let RemarkText = wind.RemarkText != null ? wind.RemarkText : ''; + let NAImage1 = wind.NAImage1 != null ? wind.NAImage1 : ''; + let NAImage1Path = wind.NAImage1Path != null ? wind.NAImage1Path : ''; + let remark = wind.remark != null ? wind.remark : ''; + let WindowSplits = wind.WindowSplits || []; + let QuestionsData = wind.WindowQA || {}; + let WStocksData = wind.WStocksData || []; + let isAllSKUChecked = wind.isAllSKUChecked == 1 || wind.isAllSKUChecked == "1"; + + // //console.log('camera2Label:',window.PromoId,window.PromoDefinitionId,camera2Label);\ + var xpos = (isPresent == '1' || isPresent == 1) ? -75 : 0; + if (window.animatedChoice != null) { + xpos = window?.animatedChoice?.interpolate({ + inputRange: [0, 1], + outputRange: [0, -75], + }); + } + + if (isVisible && window.animatedHeight != null) { + setTimeout(() => { + Animated.timing(window.animatedHeight, { + toValue: 0, + duration: 800, + useNativeDriver: false, + }).start(); + }, (props.RefImagePopUpTime || 0) * 1000) + } + let EF_Window = errorfield.EF_Window != null ? errorfield.EF_Window : {}; + let show_errorhere = error == true && EF_Window.PromoId == window.PromoId && EF_Window.PromoDefinitionId == window.PromoDefinitionId; + // if not Present fields + + // this will show error field in red (if window is present and exist reason is enabled and not filled ) or (if window is not present and Not exist reason is enabled and not filled ) + let EF_NExistReason = errorfield.EF_NExistReason || ''; + let EStyle_NExistReason = show_errorhere && EF_NExistReason == 'NExistReason' ? customStyle.stk_inptSTyle_error : {}; + + let EF_NExistRemark = errorfield.EF_NExistRemark || ''; + let EStyle_NExistRemark = show_errorhere && EF_NExistRemark == 'NExistRemark' ? customStyle.stk_inptSTyle_error : {}; + + let EF_NExistImage = errorfield.EF_NExistImage || ''; + let EStyle_NExistImage = show_errorhere && EF_NExistImage == 'NExistImage' ? customStyle.error_CatImage2 : {}; + + + + return ( + + + + {window.PromoName} + { + window && window.ChildName != "" && {window.ChildName} + } + + {(PromoTitleEnable == 1 && PromoTitle != null && PromoTitle != '') && {PromoTitle}} + { openImageRefView(index) }}> + + + + + {PromoRefImagePopUp && + + + } + + + + {!HidePresentYesNoEnable && + + {ST.IsPresent} + + + + { onChoiceSelect(window, 1, 'isPresent', window.animatedChoice) }}> + {ST.Yes} + + { onChoiceSelect(window, 0, 'isPresent', window.animatedChoice) }}> + {ST.No} + + + + + } + {((isPresent != '1' && isNAReasonEnable == true) || (isPresent == '1' && isReasonEnable == true)) && + + {ST.SelectReason} + {} + + } + {isPresent != '1' && showOtherText == true && + + {ST.EnterRemark} + { onCatTextChange(window, 'RemarkText', val, 'text') }} + /> + + } + + + {(isPresent != '1' && isNAImageAvl == true) && + + + + {ST.CaptureImage} + + + + + + {(NAImage1Path == '' || NAImage1Path == null) && + { openCamera(window, {}, 0, '1', '3') }}> + + + } + {(NAImage1Path != '' && NAImage1Path != null) && + + + { openCamera(window, {}, 0, '1', '3') }}> + + + + } + + + + + + } + + + + {(isPresent == '1') && + + + {(isStockReq == true && WindowStocks.length > 0) && + + + {(isListedSKUEnable == true ? ST.SelectProducts : 'Enter Stocks')} + + + {isListedSKUEnable == true && + + { checkAllSKUs((isAllSKUChecked == 1 ? 0 : 1), window) }}> + { let val1 = (val == true) ? 1 : 0; checkAllSKUs(val1, window) }} + style={[customStyle.WStkHdr_checkbox, (Platform.OS == 'ios' ? { height: 20, width: 20, marginLeft: 5 } : {})]} + tintColors={{ true: PageTheme.$primary_color, false: PageTheme.$text_color_light }} + /> + {ST.SelectAll} + + } + `wstock_${index.toString()}`} + renderItem={({ item, index }) => { + let stockProd = item; + let stockProdIndex = index; + let sd = WStocksData.find(i => i.ProductId == stockProd.PromoStockValue) || {}; + let stock = sd.Stock != null ? sd.Stock : ''; + let isPromoPresent = sd.isPromoPresent != null ? sd.isPromoPresent : 0; + + // highlight prd errors + let EF_stockProd = errorfield.EF_stockProd != null ? errorfield.EF_stockProd : {}; + let showPrdErrHere = EF_stockProd.PromoStockDefinitionId == stockProd.PromoStockDefinitionId; + + let EF_stock = errorfield.EF_stock || ''; + let EStyle_StockInput = show_errorhere && showPrdErrHere && EF_stock == 'input1_' ? customStyle.stk_inptSTyle_error : {}; + + + + return ( + + {isListedSKUEnable != true && {stockProd.ProductName}} + {isListedSKUEnable == true && + + { let val1 = (val == true) ? 1 : 0; setWindowStockVal(val1, window, stockProd, 'isPromoPresent') }} + style={[customStyle.WStkHdr_checkbox, (Platform.OS == 'ios' ? { height: 20, width: 20, marginTop: 5, marginLeft: 5, } : {})]} + tintColors={{ true: PageTheme.$primary_color, false: PageTheme.$text_color_light }} + /> + + {stockProd.ProductName} + } + {((isListedSKUEnable == true && StockQtyRequired == 1 && isPromoPresent == 1) || isListedSKUEnable != true) && + + + + Stock + + + + { inputRefs.current['input1_' + stockProd.PromoDefinitionId + '_' + stockProd.PromoStockDefinitionId] = reff; }} + style={[customStyle.WStkInputStyle, EStyle_StockInput]} + placeholder="" + autoComplete='off' + placeholderTextColor={PageTheme.$placeholder_color} + keyboardType={'number-pad'} + returnKeyType={(Platform.OS === 'ios') ? 'done' : 'next'} + blurOnSubmit={false} + value={stock + ''} + onSubmitEditing={() => { focusToNext(WindowStocks, windowIndex, stockProd, index) }} + onChangeText={(val) => { setWindowStockVal(val, window, stockProd, 'Stock', 'numeric') }} + /> + + + + } + + ); + }} + /> + + } + {(window.NoOfSplit > 0 && WindowSplits.length > 0 && (isImage1 == 1 || isImage2 == 1)) && + + + {ST.CapturePromotionImages} + + `spliItem_${index.toString()}`} + renderItem={({ item, index }) => { + let splitItem = item; + let splitItemIndex = index; + let Image1Name = splitItem['Image1Name'] != null && splitItem['Image1Name'] != '' ? splitItem['Image1Name'] : ''; + let Image2Name = splitItem['Image2Name'] != null && splitItem['Image2Name'] != '' ? splitItem['Image2Name'] : ''; + let Image1 = splitItem['Image1'] != null && splitItem['Image1'] != '' ? splitItem['Image1'] : ''; + let Image2 = splitItem['Image2'] != null && splitItem['Image2'] != '' ? splitItem['Image2'] : ''; + let isImg1mad = splitItem['img1Required'] || false; + let isImg2mad = splitItem['img2Required'] || false; + + + + // highlight split image box + let EF_splitItemIndex = errorfield.EF_splitItemIndex || ''; + let showSplitItemErrHere = EF_splitItemIndex == splitItemIndex; + + let EF_splitImage1 = errorfield.EF_splitImage1 || ''; + let EStyle_splitImage1 = show_errorhere && showSplitItemErrHere && EF_splitImage1 == 'splitImage1' ? customStyle.error_CatImage2 : {}; + + let EF_splitImage2 = errorfield.EF_splitImage2 || ''; + let EStyle_splitImage2 = show_errorhere && showSplitItemErrHere && EF_splitImage2 == 'splitImage2' ? customStyle.error_CatImage2 : {}; + + + return ( + + + {isImage1 == 1 && + + + {((Image1 == '' || Image1 == null) && isImg1mad) ? + { openCamera(window, splitItem, splitItemIndex, '1') }}> + + : (Image1 == '' || Image1 == null) ? + { openCamera(window, splitItem, splitItemIndex, '1') }}> + + : (Image1 != '' || Image1 != null) ? + { OpenImgModal(Image1, window, splitItem, splitItemIndex, '1') }}> + + : null + } + + {camera1Label} + + } + + {isImage2 == 1 && + + + {((Image2 == '' || Image2 == null) && isImg2mad) ? + { openCamera(window, splitItem, splitItemIndex, '2') }}> + + : (Image2 == '' || Image2 == null) ? + { openCamera(window, splitItem, splitItemIndex, '2') }}> + + : (Image2 != '' || Image2 != null) ? + { OpenImgModal(Image2, window, splitItem, splitItemIndex, '2') }}> + + : null + } + {camera2Label} + + } + + ); + }} + /> + + } + + {(WindowQuestions.length > 0) && + 0 && WindowSplits.length > 0 && (isImage1 == 1 || isImage2 == 1))) ? customStyle.openStk_prd_borderT3 : {}), customStyle.mb10]}> + + {ST.PromotionQuestions} + + {WindowQuestions.map((item, index) => { + + let qtn = item; + let qtnIndex = index; + let selansid = '', selanswer = '', selimg = '', showImageTag = false; + let id_key = qtn.PromoQuestionId + '_AnswerId'; + let ans_key = qtn.PromoQuestionId + '_Answer'; + let multi_key = qtn.PromoQuestionId + '_MultiOption'; + let date_key = qtn.PromoQuestionId + '_Date'; + let img_key = qtn.PromoQuestionId + '_ImagePath1'; + let imgname_key = qtn.PromoQuestionId + '_ImageName1'; + let rating_key = qtn.PromoQuestionId + '_Rating'; + + let list_mcdata = []; + + if (qtn.QuestionType == 'Single choice list') { + selansid = QuestionsData[id_key] != null ? QuestionsData[id_key] : ''; + selanswer = QuestionsData[ans_key] != null ? QuestionsData[ans_key] : ''; + } + else if (qtn.QuestionType == 'Multi choice list') { + if (qtn.Answers != null) { + for (var i = 0; i < qtn.Answers.length; i++) { + let obj = { 'AnswerId': parseInt(qtn.Answers[i].AnswerId), 'Answer': qtn.Answers[i].Answer }; + list_mcdata.push(obj); + } + } + selansid = QuestionsData[multi_key] != null && QuestionsData[multi_key] != '' ? QuestionsData[multi_key].split(',') : []; + // if(selansid!=null && selansid.length>0){ + // let arr=[]; + // for(var i=0;i 0) { + for (var i = 0; i < qtn.Answers.length; i++) { + let ansss = qtn.Answers[i]; + let isandImgAl = (ansss.PromoaShowCamera == 'true' || ansss.PromoaShowCamera == 1); + + if (qtn.QuestionType == 'Single choice list' && (isandImgAl && ansss.AnswerId == selansid)) { + showImageTag = true; + } + else if (qtn.QuestionType == 'Multi choice list' && (isandImgAl && selansid.indexOf(ansss.AnswerId) >= 0)) { + showImageTag = true; + } + + } + } + } + + if (showImageTag) { + selimg = QuestionsData[img_key] != null && QuestionsData[img_key] != '' ? 'file://' + QuestionsData[img_key] : ''; + } + let isDisabled = qtn.isDisabled != null ? qtn.isDisabled : false + + let EF_qtn = errorfield.EF_qtn != null ? errorfield.EF_qtn : {}; + let showQtnErrHere = EF_qtn.PromoQuestionId == qtn.PromoQuestionId; + + let EF_Qtn_MultiChoice = errorfield.EF_Qtn_MultiChoice || ''; + let EStyle_Qtn_MultiChoice = show_errorhere && showQtnErrHere && EF_Qtn_MultiChoice == 'Qtn_MultiChoice' ? customStyle.stk_MultiSSTyle_error : customStyle.wind_MultiSearchInputStyle; + + + let EF_Qtn_Input = errorfield.EF_Qtn_Input || ''; + let EStyle_Qtn_Input = show_errorhere && showQtnErrHere && EF_Qtn_Input == 'Qtn_Input' ? customStyle.stk_inptSTyle_error : {}; + let EStyle_Qtn_Select = show_errorhere && showQtnErrHere && EF_Qtn_Input == 'Qtn_Select' ? customStyle.stk_inptSTyle_error : {}; + let EStyle_Qtn_Date = show_errorhere && showQtnErrHere && EF_Qtn_Input == 'Qtn_Date' ? customStyle.stk_inptSTyle_error : {}; + + let EF_Qtn_Image = errorfield.EF_Qtn_Image || ''; + let EStyle_Qtn_Image = show_errorhere && showQtnErrHere && EF_Qtn_Image == 'Qtn_Image' ? customStyle.stk_inptSTyle_error : {}; + + + if (isDisabled == true) { + return ( + + ) + } + else { + return ( + + {qtn.PromoQuestionName} + {qtn.QuestionType == 'Single choice list' && qtn.Answers && + render_Picker('Answer', 'AnswerId', onselectionChange2, { value: selanswer, qtn: qtn, window: window }, EStyle_Qtn_Select) + } + {qtn.QuestionType == 'Multi choice list' && qtn.Answers && + { setMultiSelectValue(selectedItems, qtn, window) }} //setMultiSelectValue(selectedItems,qtn) + selectedItems={selansid} + selectText="Pick Items" + searchInputPlaceholderText={ST.SearchItems + "..."} + // onChangeInput={ (text)=> //console.log(text)} + tagRemoveIconColor={PageTheme.$primary_color} + tagBorderColor={PageTheme.$primary_color} + tagTextColor={PageTheme.$primary_color} + selectedItemTextColor={PageTheme.$primary_color} + selectedItemIconColor={PageTheme.$primary_color} + itemTextColor={PageTheme.$text_color} + displayKey="Answer" + searchInputStyle={EStyle_Qtn_MultiChoice} + submitButtonColor={PageTheme.$primary_color} + submitButtonText={ST.Submit} + /> + } + {(qtn.QuestionType == 'Number' || qtn.QuestionType == 'Decimal' || qtn.QuestionType == 'Text') && + { setTextValue(val, qtn, window, (qtn.QuestionType == 'Decimal' ? 'decimal' : (qtn.QuestionType == 'Text' ? 'text' : 'numeric'))) }} + /> + } + { + (qtn.QuestionType == 'Date') && + + {selansid != '' ? selansid : 'MM/YYYY'} + { setDateValue(selanswer); showQtnDatePicker(qtn, window, true) }}> + + + + } + {((qtn.showDatePicker == true || qtn.showDatePicker == 'true') && (qtn.QuestionType == 'Date')) && + renderDatePicker(qtn, window) + } + { + (qtn.QuestionType == 'Rating') && + + {selanswer} + { setRatingQtn(qtn); setRatingWindow(window); setShowRating(true); }}> + + + + } + + { + // (qtn.QuestionType=='Audio') && + // + // {selanswer} + // {show_recorder(qtn);}}> + // + // + // + } + + { + showImageTag && + + + { openCamera(window, {}, 0, '1', '2', qtn) }}> + + + + } + + + + ) + } + })} + + } + {RemarkEnable == true && + + {ST.Remark} + { onCatTextChange(window, 'remark', val, 'text') }} + /> + + } + + + } + + + + + + + ); + }} + /> + ) + } + + function _renderHeader(currentIndex) { + return ( + + {`${(currentIndex + 1)}/${zoomImageUrl.length}`} + { setShow_zoomImage(false) }}> + + + + ) + } + + return ( + + {processing && } + + + + {_OpenCaptureImage_Modal()} + {ConfirmSaveAlert(props, showAlert, onSaveCancel, saveData)} + {ConfirmSaveAlert(props, DataCleanModal, onCancelClean, onclear, 'Your data will be clean',)} + { setShowCamera(false); getImage(imgData) }} showCamera={showCamera} onHideCamera={() => { setShowCamera(false); }} /> + + + + + { setSearchedItem(val); FilterStores(val) }} + /> + { FilterStores(searchedItem) }}> + + + + {Object.keys(storeData).length > 0 && + + {_renderWindow()} + + } + + { onSubmitData() }} /> + + + + + {showRating == true && + renderRatingView() + } + {show_zoomImage && + + null} + /> + + } + + ); +} + + +export default connect(mapStateToProps, mapDispatchToProps)(PromotionOneApp); \ No newline at end of file diff --git a/PerformicsSrc/src/screens/PromotionOneAppIR.js b/PerformicsSrc/src/screens/PromotionOneAppIR.js new file mode 100644 index 0000000..8744aa7 --- /dev/null +++ b/PerformicsSrc/src/screens/PromotionOneAppIR.js @@ -0,0 +1,4045 @@ +import React,{useState,useEffect,useRef} from 'react'; +import Container from '../components/container'; +import { useRoute } from '@react-navigation/native'; +import { globalStyles,customStyles,GetPageTheme } from "../styles/Global"; +import {StatusBar,Image,TextInput,View,Text,ScrollView,TouchableOpacity,Platform,PermissionsAndroid,FlatList, Alert, Animated, AppState, Keyboard, DeviceEventEmitter} from 'react-native'; +import { ReactReduxContext,connect,useSelector, useDispatch } from 'react-redux'; +import { mapStateToProps,mapDispatchToProps } from '../reducers/contextProvider'; +import {notify} from '../components/notify'; +import moment from 'moment'; +import {UploadData2, getDownloadJson,getKPIFields,marktext1,marktext2, resizeImage, restore_ImageWithMetaData, validateNumber} from '../controller/functions'; +import {get_item,set_item,clear_item} from '../components/localStorage'; +import {version,sloganline,appname,testurl,db, colors_Arr, common_ImagePath,ImageFolderPath, HierarchyTbls} from '../constants/constants'; +import CustomHeader from '../components/customHeader'; +import {Card, Menu, Switch} from 'react-native-paper'; +import {AntDesign, Entypo, FontAwesome, Fontisto, MaterialCommunityIcons} from '../components/icons'; + +import CustomLoader from '../components/CustomLoader'; +import LinearGradient from 'react-native-linear-gradient'; +import { AppTables } from '../constants/tableConstants'; +import * as RNFS from 'react-native-fs'; +import GradientButton from '../components/gradientButton'; +import CustomModal from '../components/CustomModal'; +import { ConfirmSaveAlert } from '../components/alert'; +import ModalSelector from 'react-native-modal-selector' +import { CustomPicker, CustomPicker2 } from '../components/CustomPicker'; +import CustomCamera from '../components/Camera'; +import ImageViewer from 'react-native-image-zoom-viewer'; +import DateTimePicker from '@react-native-community/datetimepicker'; +import CheckBox from '@react-native-community/checkbox'; + +import CameraImg from '../assets/performics/camera_front_image.svg' +import MultiSelect from 'react-native-multiple-select'; +import CameraImg3 from '../assets/performics/camera_tick.svg'; +import CameraImg2 from '../assets/performics/camera_icon.svg'; +import CameraImg5 from '../assets/image/astrickcamera.svg'; +import IRLogin from '../components/IRLogin'; +import { METHODS } from '../constants/methodNames'; +import { SyncIRsessionsInKPI } from '../constants/uploadData'; + + +function PromotionOneAppIR(props) { + const route = useRoute(); + const ST=props.StaticText || {}; + + // get all theme styles acc to current theme set + const PageTheme=GetPageTheme(props.DarkMode,route.name); + const customStyle=customStyles(props.DarkMode,route.name); + const animatedChoice=useRef(new Animated.Value(0)).current; + + const [processing, setProcessing] = useState(true); + const [loaderTitle, setLoaderTitle] = useState(); + const [isAdhocScreen, setIsAdhocScreen] = useState(false); + const [storeData, setStoreData] = useState({}); + const [StoreCameraAllow, setStoreCameraAllow] = useState(true); + const [currentMenu, setCurrentMenu] = useState({}); + const [rerenderdata, setrerenderdata]= useState(0); + const [rerenderdata2, setrerenderdata2]= useState(0); + const [rerenderdata3, setrerenderdata3]= useState(0); + const [rerenderdata4, setrerenderdata4]= useState(0); + + const [hasUnsavedChanges,setHasUnsavedChanges] = useState(false); + + const [WindowData, setWindowData] = useState([]); + const [reasons_list, setReasons_list] = useState([]); + const [Windows, setWindows] = useState([]); + + const [refImageIndex, setrefImageIndex] = useState(0); + const [refImageIndex2, setrefImageIndex2] = useState(0); + + const [showAlert, setShowAlert] = useState(false); + const [zoomImageUrl, setZoomImageUrl] = useState([]); + const [zoomImageUrl2, setZoomImageUrl2] = useState([]); + + const [show_zoomImage, setShow_zoomImage] = useState(false); + const [show_zoomImage2, setShow_zoomImage2] = useState(false); + + const [showCamera, setShowCamera] = useState(false); + const [getImageProps,setGetImageProps]= useState({}); + const zoomView=useRef(null); + const zoomView2=useRef(null); + + const Show_zoomImageRef=useRef(false); + const Show_zoomImageRef2=useRef(false); + + const [showRating, setShowRating] = useState(false); + const [RatingQtn, setRatingQtn] = useState({}); + const [RatingWindow, setRatingWindow] = useState({}); + const [RatingOrder, setRatingOrder] = useState([]); + + const [Products, setProducts] = useState([]); + const [DisplayList, setDisplayList] = useState([]); + const [toRemoveId,setToRemoveId]= useState(''); + const [toRemoveItem,setToRemoveItem]= useState({}); + const [showRemoveConfirm_M,setshowRemoveConfirm_M]= useState(false); + const [showRAllC_M,setShowRAllC_M]= useState(false); + const [searchedItem, setSearchedItem]= useState(''); + const [globalWindows, setGlobalWindows] = useState([]); + const [KPIFields, setKPIFields] = useState([]); + const [showSwitchCamera,setShowSwitchCamera]= useState(false); + + const [DataCleanModal, setDataCleanModal] = useState(false); + const [DataCleanAnim, setDataCleanAnim] = useState(""); + const [DataCleanItem, setDataCleanItem] = useState({}); + const [isPresentClean, setIsPresentClean] = useState(0); + + const [InputChange, setInputChange] = useState([]); + const [SelectedImg, setSelectedImg] = useState(''); + const [showModal, setShowModal] = useState(false); + const [reCapImgModalObj, setReCapImgModalObj] = useState({}); + const [showImageSaveOp, setShowImageSaveOp] = useState(true); + const [ImgMadCount, setImgMadCount] = useState({img1:0,img2:0}); + const [FilteredPromoValues,setFilteredPromoValues]= useState([]); + const [ShowCatWise,setShowCatWise]= useState(false); + const [CatData,setCatData]= useState(false); + const [ColId, setColId] = useState(""); + const [ColName, setColName] = useState(""); + const [ItemsInView,setItemsInView] = useState([]); + const [windIRParams, setWindIRParams] = useState({}); + const [isDataUploaded, setisDataUploaded] = useState("N"); + + const [showRetakeModal, setshowRetakeModal] = useState(false); + const [retakeMData, setretakeMData] = useState({}); + const [showUploadAlert, setshowUploadAlert] = useState(false); + + const inputRefs = useRef({}); + const hasUnsavedChangesRef = React.useRef(hasUnsavedChanges); + const WindowDataRef=React.useRef(WindowData); + const StoreIdRef=React.useRef(null); + const ScreenNameRef=React.useRef(''); + const PSGroupData=React.useRef(''); // Grouping data (Category/ SubCategory/ Brand ) for BG save fuunctionality with Partial Save Scenario + const BGPSAllow=React.useRef(false); + + const WindowIRImages=useRef([]); + const GbTempSessionId=useRef(""); + const GbTempSessionObj=useRef({}); + const sessionsToUpload = useRef([]); + const sessionsToUploadDetails = useRef([]); + const sessionsUploadedCount = useRef(0); + const sessionsReceived = useRef(0); + + + + + + const onViewableItemsChanged = ({ viewableItems,}) => { + // Do stuff + console.log("onViewableItemsChanged called:") + setItemsInView(viewableItems); + }; + + // error field states + const [errorfield, setErrorField] = useState({}); + const [error, setError] = useState(false); + + const FlatLConfCallbackPairs=useRef([{viewabilityConfig:{itemVisiblePercentThreshold:50},onViewableItemsChanged}]); + + const d1=new Date(); + const d2=moment(d1).format('MM/DD/YYYY'); + + + useEffect(() => { + setLoaderTitle(ST.Loading+'...') + let params=props.route.params? props.route.params:{}; + let storeData1=params.storeData || {}; + let menu1=params.menu || {}; + let ShowCatWise1=params.ShowCatWise!=null?params.ShowCatWise:false; + let CatData1=params.CatData!=null?params.CatData:{}; + let isAdhoc=params.isAdhoc || false; + + + setIsAdhocScreen(isAdhoc); + setShowCatWise(ShowCatWise1); + setCatData(CatData1); + setStoreData(storeData1); + setCurrentMenu(menu1); + + let cameraAllow=storeData1.CameraAllow=='true' || storeData1.CameraAllow==1?true:false; + setStoreCameraAllow(cameraAllow); + + let IR_Creds=props.IR_Creds!=null?JSON.parse(props.IR_Creds):[]; + let IR_CredsObj=IR_Creds.length>0?IR_Creds[0]:{}; + let PROMO_IRCreds=IR_CredsObj.Promotion!=null && IR_CredsObj.Promotion.length>0?IR_CredsObj.Promotion[0]:{}; + setWindIRParams(PROMO_IRCreds); + + StoreIdRef.current=storeData1.StoreId + ScreenNameRef.current=menu1.ScreenName + getData(storeData1,menu1,CatData1,ShowCatWise1); + + const AppStateSubscription = AppState.addEventListener('change', (pro)=>{ _handleAppStateChange(pro)}); + const removeIRListener=DeviceEventEmitter.addListener('onIRImageUpload',(data)=>{ onIRImageUpload(data,storeData1,menu1)}); + const unsubscribe=props.navigation.addListener('beforeRemove', onBeforeRemove); + + return function cleanup() { + AppStateSubscription.remove(); + removeIRListener.remove(); + return unsubscribe; + }; + }, []); + + async function onIRImageUpload(data,storeData1,menu1){ + console.log('onIRImageUpload on receive',data); + let {message,sessionId,status}=data; + let snum=sessionsReceived.current+1; + let su_num=sessionsUploadedCount.current; + console.log('onreceive data',data); + sessionsReceived.current=snum; + let thisIR_SessObjIndex=sessionsToUploadDetails.current.findIndex(i=>i.TEMP_SESSION_ID==sessionId); + let thisIR_SessObj=sessionsToUploadDetails.current[thisIR_SessObjIndex]; + if(status!=null && status=='200' && sessionId!=null && sessionId!=''){ + + let UnSessionId=await IRLogin.getDataIRSession(sessionId); + if(UnSessionId!=null && UnSessionId!=''){ + sessionsUploadedCount.current=++su_num; + let isUpdated=await UpdateIRUploadStatus(storeData1,menu1,sessionId,UnSessionId); + let isUploaded=await LogImageUpload(storeData1,menu1,sessionId,UnSessionId,message,status,thisIR_SessObj); + console.log("su_num:",su_num); + if(isUploaded){ + console.log('Image Uploaded'); + notify("Images Log uploaded for session:"+sessionId); + } + else{ + console.log('cannot Uploaded image'); + notify("cannot upload log for session:"+sessionId); + } + + } + else{ + console.log('OnReceived UnSessionId get',UnSessionId); + notify("Cannot upload images for session:"+sessionId+". Universal Id not found"); + let isUploaded=await LogImageUpload(storeData1,menu1,sessionId,"",message,status,thisIR_SessObj); + if(isUploaded){ + console.log('Image Uploaded'); + notify("Images Log uploaded for session:"+sessionId); + } + else{ + console.log('cannot Uploaded image'); + notify("cannot upload log for session:"+sessionId); + } + + } + + } + else{ + console.log('Cannot get OnReceived UnSessionId'); + notify((message!=null && message!=""?message+". ":"")+"Cannot upload images for session:"+sessionId); + let isUploaded=await LogImageUpload(storeData1,menu1,sessionId,"",message,status,thisIR_SessObj); + if(isUploaded){ + console.log('Image Uploaded'); + notify("Images Log uploaded for session:"+sessionId); + } + else{ + console.log('cannot Uploaded image'); + notify("cannot upload log for session:"+sessionId); + } + + + } + + console.log("check snum and su_num:",snum,su_num,sessionsToUpload.current.length); + // if last broadcast received either uploaded or not update the processing status to false + if(snum==sessionsToUpload.current.length){ + setProcessing(false); + console.log('Deregister event when last received'); + IRLogin.deRegisterReceiver(); + } + + // All IR Sessions with Images Uploaded : set DataUploaded Status to U (Fully Upload) + if(su_num==sessionsToUpload.current.length){ + setisDataUploaded("U"); + setProcessing(false); + notify("All IR images uploaded!"); + console.log('set all uploaded true to U'); + } + // Some Of IR Sessions with Images Uploaded but some are yet pending : set DataUploaded Status to P (Partial Upload) + else if(su_num>0 && su_num!=sessionsToUpload.current.length){ + // setProcessing(false); + setisDataUploaded("P"); + notify("Some IR Images are still not uploaded!"); + console.log('set all uploaded true to P'); + } + } + + async function LogImageUpload(storeData1,menu1,TempSessionId,UnSessionId,message,status,thisIR_SessObj={}){ + let {StoreId,StoreName}=storeData1; + const url=props.baseurl+getMethodName(METHODS.UPLOADJSON_METHOD); + const nowTime=moment().format('HH:mm:ss'); + let ImageCount=await getImageCount(storeData1,menu1,TempSessionId); + let {SESSION_STORECODE,SESSION_TASKNAME,SESSION_CATNAME,SESSION_PHOTOTYPE}=thisIR_SessObj; + + ////Replaced special charecter and white space + let storeTittle = StoreName.replace(`@!%&`, '').replace(' ', '-'); + console.log("storeTittle:",storeTittle,StoreName); + + let obj={}; + obj['StoreId']=StoreId; + obj['Username']=props.UserId; + obj['VisitDate']=d2; + obj['InTime']=nowTime; + obj['TempSessionId']=TempSessionId; + obj['UnSessionId']=UnSessionId; + obj['Status']=status; + obj['Message']=message; + obj['ImageCount']=ImageCount; + obj['StoreTitle']=storeTittle; + obj['StoreCode']=SESSION_STORECODE; + obj['TaskName']=SESSION_TASKNAME; + obj['CategoryName']=SESSION_CATNAME; + obj['PhotoType']=SESSION_PHOTOTYPE; + obj['KPIType']=currentMenu.MenuName; + obj['ScreenName']=currentMenu.ScreenName; + obj['UploadType']="New"; + + + let postData={}; + postData['MID']=0; + postData['Keys']='IR_UPLOAD_LOG_MSG'; + postData['JsonData']=JSON.stringify(obj); + postData['UserId']=props.UserId; + + console.log('postData',postData); + + return await UploadData2(url,postData) + .then((res)=>{ + if(res.UploadJsonResult!=null && res.UploadJsonResult=='Success'){ + return true; + } + return false; + }) + .catch((err)=>{ + console.log(err); + return false; + }); + } + + async function UpdateIRUploadStatus(storeData1,menu1,TempSessionId,UnSessionId){ + console.log('UpdateIRUploadStatus'); + return new Promise((resolve,reject)=>{ + + let {StoreId,ChainId,StateId,StoreTypeId}=storeData1; + db.transaction(async function (txn) { + // update upload status and sync status here : when files are uploaded and we have got the universal session id for that + let q=`Update ${AppTables.PROMO_IRUPLOAD} set UN_SESSION_ID='${UnSessionId}',UPLOAD_STATUS='1',SYNC_STATUS='Synced' where STORE_ID='${StoreId}' and VISIT_DATE='${d2}' and TEMP_SESSION_ID='${TempSessionId}' `; + // console.log("update IR Upload q:",q); + await txn.executeSql(q,[],async function (txn2, txnres) { + console.log('Updated IR Upload Status'); + // console.log("update IR Upload q2:",q2); + let q2=`Update ${AppTables.PROMO_IR_IMAGES} set UN_SESSION_ID='${UnSessionId}' where STORE_ID='${StoreId}' and VISIT_DATE='${d2}' and TEMP_SESSION_ID='${TempSessionId}' `; + await txn.executeSql(q2,[],async function (txn2, txnres2) { + console.log('Updated IR Upload Images Status'); + resolve(true); + },function (txnE,txnerr) { console.log(txnerr);resolve(false); },); + + },function (txnE,txnerr) { console.log(txnerr);resolve(false); },); + }); + }).catch((Err)=>{ + console.log('Error in UpdateIRUploadStatus:',Err); + return false; + }) + + + + } + + + async function getImageCount(storeData1,menu1,TempSessionId){ + let {StoreId,ChainId,StateId,StoreTypeId}=storeData1; + console.log('storeData in getImageCount',storeData1); + return new Promise((resolve,reject)=>{ + + + db.transaction(async function (txn) { + + let q=`select DISTINCT TEMP_SESSION_ID,count(IMAGE1) as ImageCount from ${AppTables.PROMO_IR_IMAGES} where STORE_ID='${StoreId}' and VISIT_DATE='${d2}' and TEMP_SESSION_ID='${TempSessionId}' group by TEMP_SESSION_ID `; + console.log('q',q); + await txn.executeSql(q,[],async function (txn2, txnres) { + console.log('ImageCount rows:',txnres.rows.length); + if(txnres.rows.length>0){ + let data =txnres.rows.item(0); + console.log('data:',data) + console.log('Image Count for TempSessionId:',data.ImageCount); + resolve(data.ImageCount); + } + else{ + resolve(0); + } + + },function (txnE,txnerr) { console.log(txnerr);resolve(0); },); + }); + }).catch((Err)=>{ + console.log('Error in getImageCount:',Err); + return 0; + }) + + + + } + + const _handleAppStateChange = async (nextAppState) => { + + if(nextAppState =='background' && hasUnsavedChangesRef.current==true){ + + let newData = { + storeBGData:WindowDataRef.current, + menuName:ScreenNameRef.current, + StoreId1:StoreIdRef.current, + visiteDate:d2, + BGPSAllow:BGPSAllow.current, + PSGroupData:PSGroupData.current, + } + let WindowsStr= JSON.stringify(newData) + console.log('storedjson',WindowsStr); + await set_item('storeData',WindowsStr); + } + } + + useEffect(() => { + const unsubscribe=props.navigation.addListener('beforeRemove', onBeforeRemove); + return unsubscribe; + }, [hasUnsavedChanges]); + + useEffect(() => { + const unsubscribe=props.navigation.addListener('beforeRemove', onBeforeRemove); + return unsubscribe; + }, [showCamera]); + + useEffect(() => { + const unsubscribe=props.navigation.addListener('beforeRemove', onBeforeRemove); + return unsubscribe; + }, [show_zoomImage]); + + function onBeforeRemove(e){ + if(showCamera==true){ + e.preventDefault(); + setShowCamera(false); + } + else if(show_zoomImage==true){ + e.preventDefault(); + setShow_zoomImage(false); + } + else{ + if (hasUnsavedChanges==true) { + e.preventDefault(); // Prevent default behavior of leaving the screen + onRemoveScreen(e); + } + else{ + return; + } + } + } + + function BgUnsavedChanges(val){ + hasUnsavedChangesRef.current=val + setHasUnsavedChanges(val); + } + + function BgWindowData(val){ + WindowDataRef.current=val + setWindowData(val); + } + + function onRemoveScreen(e){ + Alert.alert( + "", + ST.Doyoureallywanttoexitthescreen, + [ + { + text: ST.Cancel, + onPress: () => {}, + style: "cancel" + }, + { text: ST.OK, onPress: async () => { + // setHasUnsavedChanges(false); + BgUnsavedChanges(false) + await clear_item('storeData') + props.navigation.dispatch(e.data.action);} } + ] + ); + } + + + async function getData(storeData1,menu1,CatData1={},ShowCatWise1=false){ + try { + let {StoreId,ChainId,StateId,StoreTypeId}=storeData1; + let {PSAllow,PSTableName}=menu1; + PSTableName=PSTableName!=null?PSTableName:''; + PSAllow=PSAllow!=null?PSAllow:false; + + let idCol='',nameCol=''; + + if(PSTableName.toLowerCase()==HierarchyTbls.Master_Category.toLowerCase()){ + idCol='CategoryId',nameCol='CategoryName'; + } + else if(PSTableName.toLowerCase()==HierarchyTbls.Master_Brand.toLowerCase()){ + idCol='BrandId',nameCol='BrandName'; + } + else { + idCol='SubCategoryId',nameCol='SubCategoryName'; + } + let IdVal=CatData1[idCol]; + let NameVal=CatData1[nameCol]; + + let FilteredIds=[]; + if(ShowCatWise1){ + FilteredIds=await getWindowFilterIds(idCol,IdVal,storeData1); + } + setFilteredPromoValues(FilteredIds); + + + let AllKPIFields=await getKPIFields(menu1); + console.log("AllKPIFields-----",AllKPIFields) + setKPIFields(AllKPIFields); + + // set switch camera flag as defined in mapping menu flag (if exists) + let SwitchingCameraI=AllKPIFields.findIndex(i=>i.KPIFieldName=='SwitchingCamera'); + let SwitchingCameraObj=SwitchingCameraI>=0?AllKPIFields[SwitchingCameraI]:{}; + let SwitchingCamera=SwitchingCameraI>=0?SwitchingCameraObj['KPIFieldEnable']:false; + setShowSwitchCamera(SwitchingCamera); + + + let isPromoImage1=AllKPIFields.findIndex(i=>i.KPIFieldName=='PromoImage1') + let isPromoImage1KPIObj=isPromoImage1>=0?AllKPIFields[isPromoImage1]:{}; + let isPromoImage1MANDCOUNT=isPromoImage1>=0?isPromoImage1KPIObj['KPIMandatory']:1; + + let isPromoImage2=AllKPIFields.findIndex(i=>i.KPIFieldName=='PromoImage2') + let isPromoImage2KPIObj=isPromoImage2>=0?AllKPIFields[isPromoImage2]:{}; + let isPromoImage2MANDCOUNT=isPromoImage2>=0?isPromoImage2KPIObj['KPIMandatory']:1; + + let HidePresentYesNoIndex=AllKPIFields.findIndex(i=>i.KPIFieldName=='HidePresentYesNo'); + let HidePresentYesNoObj=HidePresentYesNoIndex>=0?AllKPIFields[HidePresentYesNoIndex]:{}; + let HidePresentYesNoEn=HidePresentYesNoIndex>=0?HidePresentYesNoObj['KPIFieldEnable']:false; + let HidePresentYesNoEnable=HidePresentYesNoEn==1 || HidePresentYesNoEn=="1" || HidePresentYesNoEn==true?true:false; + + let isOPStockEnable=AllKPIFields.findIndex(i=>i.KPIFieldName=='PromoStock_ShowOPStockProduct') + let isOPStockEnableKPIObj=isOPStockEnable>=0?AllKPIFields[isOPStockEnable]:{}; + let isOPStockEnableFlag=isOPStockEnable>=0?isOPStockEnableKPIObj['KPIFieldEnable']:false; + + let isKPIIREnableI=AllKPIFields.findIndex(i=>i.KPIFieldName=='IR_KPIEnable') + let isKPIIREnableObj=isKPIIREnableI>=0?AllKPIFields[isKPIIREnableI]:{}; + let isKPIIREnable=isKPIIREnableI>=0?isKPIIREnableObj['KPIFieldEnable']:false; + + let CameraIROnceOnlyIndex=AllKPIFields.findIndex(i=>i.KPIFieldName=='IR_CameraOnceOnly') + let CameraIROnceOnlyObj=CameraIROnceOnlyIndex>=0?AllKPIFields[CameraIROnceOnlyIndex]:{}; + let CameraIROnceOnly=CameraIROnceOnlyIndex>=0?CameraIROnceOnlyObj['KPIFieldEnable']:true; + + + + setImgMadCount({img1:parseInt(isPromoImage1MANDCOUNT),img2:parseInt(isPromoImage2MANDCOUNT)}) + + let inputChangeFlag=[],storeBGData1=[],bgStoreJson={},isBgDataExists=false; + let windData = await get_item('storeData') + console.log("windData in promo:",windData); + if(windData!=null && windData!=''){ + let StoreJson = JSON.parse(windData) + let { storeBGData,menuName,StoreId1,visiteDate }= StoreJson + if(storeBGData.length>0 && menuName == menu1.ScreenName && StoreId1== StoreId && visiteDate==d2){ + isBgDataExists=true; + storeBGData1=storeBGData; + bgStoreJson=StoreJson + BgUnsavedChanges(true) + BgWindowData(storeBGData) + // setWindowData(storeBGData); + } + } + + if(PSAllow){ + // if Partial save is allowed then add the currently active category or group in BG var + BGPSAllow.current=true; + PSGroupData.current=CatData1; + } + await db.transaction(async function (txn) { + + + let q3=`Select PromoReasonId as ReasonId,PromoReason as Reason,IsRemarkTaken From Master_PromotionReason`; + await txn.executeSql(q3,[],async function (txn2, txnres2) { + if(txnres2.rows.length>0){ + let arr=[]; + for(var i=0;i0?FilteredIds.join(','):''; + let selectlist2=` s.StoreId,wd.PROMO_HEADER_ID as PromoHeaderId,w.PromoRefImage,w.PromoRefImagePopUp,w.PromoDefinitionId,w.PromoId,w.PromoName,w.PromoDefinitionTitleEnable,w.PromoDefinitionTitle,w.PromoTable,w.PromoField,w.PromoValue,w.ChildName,w.PromoRefImage,w.PromoElementCheckAssortment,w.PromoElementStockRequired,IFNULL(wd.IS_PRESENT,'') as IsPresent,w.PromoNotExistCamera,IFNULL(wd.PROMO_NA_IMAGE,'') as PromoNAImage,w.PromoExistReasonEnable,w.PromoNotExistReasonEnable,IFNULL(wd.REASON_ID ,'') as ReasonId,IFNULL(wd.REASON,'') as Reason,w.NoOfSplit,w.PromoImage1,w.PromoImage2,w.PromoImage1Lable,w.PromoImage2Lable,w.PromoImage1CameraGrid,w.PromoImage2CameraGrid,w.StockQtyRequired,wd.SHOW_RSN_REMARK,wd.REASON_REMARK`; + // let selectlist=` w.STORE_ID as StoreId,w.PROMO_HEADER_ID as PromoHeaderId,wd.PromoDefinitionId,wd.PromoId,wd.PromoName,wd.PromoDefinitionTitleEnable,wd.PromoDefinitionTitle,wd.PromoTable,wd.PromoField,wd.PromoValue,wd.ChildName,wd.PromoRefImage,wd.PromoElementCheckAssortment,wd.PromoElementStockRequired,w.IS_PRESENT as IsPresent,wd.PromoNotExistCamera,w.PROMO_NA_IMAGE as PromoNAImage,wd.PromoExistReasonEnable,wd.PromoNotExistReasonEnable,w.REASON_ID as ReasonId,w.REASON as Reason,w.REMARK as Remark,wd.NoOfSplit,wd.PromoImage1,wd.PromoImage2,wd.PromoImage1Lable,wd.PromoImage2Lable,wd.PromoImage1CameraGrid,wd.PromoImage2CameraGrid,wd.StockQtyRequired,w.SHOW_RSN_REMARK,w.REASON_REMARK`; + let join3=` Left outer join ${AppTables.PROMO_HDR_DATA} wd on w.PromoDefinitionId=wd.PROMO_DEFINITION_ID and wd.STORE_ID='${StoreId}' and VISIT_DATE='${d2}' `; + let join2=` inner join Mapping_StorePromotion s on w.PromoDefinitionId=s.PromoDefinitionId `; + let q2=` Select ${selectlist2} from Master_PromotionDefinition w ${join2} ${join3} where s.StoreId='${StoreId}' `; + if(ShowCatWise1==true){ + q2+=` and PromoValue in (${FilterIdsJoin}) `; + } + q2+=`order by w.PromoDefSequence `; + + console.log('q2:',q2); + await txn.executeSql(q2,[],async function (txn2, txnres2) { + console.log('Promotion items loaded with added data',txnres2.rows.length); + if(txnres2.rows.length>0){ + let arr=[];let images=[],allWindowsData=[] + + for(var i=0;ii.PromoId==data.PromoId && i.PromoDefinitionId==data.PromoDefinitionId) + let storeBgObj=storeBgIndex>=0?storeBGData1[storeBgIndex]:{}; + isPresent=HidePresentYesNoEnable?1:(storeBgObj.isPresent=='1' || storeBgObj.isPresent==1?1:0); + let animatedChoice=new Animated.Value(isPresent); + data.animatedChoice=animatedChoice; + }else{ + isPresent= (HidePresentYesNoEnable?1:(data.IsPresent=='1' || data.IsPresent==1?1:0)); + let animatedChoice=new Animated.Value(isPresent); + data.animatedChoice=animatedChoice; + } + let animatedHeight = new Animated.Value(450); + data.animatedHeight=animatedHeight + + data.NoOfSplit=parseInt(data.NoOfSplit); + + let NoOfSplit=data.NoOfSplit; + let isStockReq=data.PromoElementStockRequired=='true' || data.PromoElementStockRequired==1?1:0; + + let imgObj={imgIndex:(i+1),url: data.PromoRefImage, props: {}} + images.push(imgObj); + + let WindowSplits = await getWindowSplits(NoOfSplit,data,storeData1,menu1,isPromoImage1MANDCOUNT,isPromoImage2MANDCOUNT); + let IRImages=[],IRImages1=[],zoomIRImages=[],zoomIRImages1=[]; + if(isKPIIREnable && !isBgDataExists){ //perform action only if IRImages flag is enable for this KPI and if bg data does not exists + if(CameraIROnceOnly && i==0){// get IR images for all KPI at once if CameraIROnceOnly enabled + let IRImgResObj=await getIRImages({},storeData1,menu1,"2"); + IRImages1=IRImgResObj!=null && IRImgResObj["allImages"]!=null?IRImgResObj["allImages"]:[]; + zoomIRImages1=IRImgResObj!=null && IRImgResObj["zoomIRImages"]!=null?IRImgResObj["zoomIRImages"]:[]; + // setWindowIRImages(IRImages); + WindowIRImages.current=IRImages1; + setZoomImageUrl2(zoomIRImages1); + } + else if(!CameraIROnceOnly){// get IR images for each window if CameraIROnceOnly is not enabled + let IRImgResObj=await getIRImages(data,storeData1,menu1,"1"); + IRImages=IRImgResObj!=null && IRImgResObj["allImages"]!=null?IRImgResObj["allImages"]:[]; + zoomIRImages=IRImgResObj!=null && IRImgResObj["zoomIRImages"]!=null?IRImgResObj["zoomIRImages"]:[]; + } + } + + let WQr = await getWindowQuestions(data,storeData1,isPresent,menu1); + let WindowQuestions = WQr['WindowQuestions'] || []; + let WindowQA= WQr['WindowQA'] || {}; + let WSd= isStockReq==true ? await getWindowStockData(data,storeData1,isPresent,isOPStockEnableFlag) : {'WStocks':[],'WStocksData':[]}; + let WStocks=WSd['WStocks'] || []; + let WStocksData=WSd['WStocksData'] || []; + let isAllChecked=WSd['isAllChecked']!=null?WSd['isAllChecked']:0; + + let isNAImageAvl=data.PromoNotExistCamera=='true' || data.PromoNotExistCamera==1?1:0; + let NAImage1=isNAImageAvl==1 && data.PromoNAImage!=null?data.PromoNAImage:''; + let NAImage1Path=NAImage1!=''?'file://'+ImageFolderPath+menu1.ScreenName+"/"+NAImage1:''; + + let showRsnRemark=((data.SHOW_RSN_REMARK=='1' || data.SHOW_RSN_REMARK==1 )?true:false); + + let windowDataObj={'PromoId':data.PromoId, 'PromoDefinitionId':data.PromoDefinitionId,'WindowSplits':WindowSplits,'WindowQA':WindowQA,'WStocksData':WStocksData,'NAImage1':NAImage1,'NAImage1Path':NAImage1Path,'ReasonId':data.ReasonId,'Reason':data.Reason,'isPresent':isPresent,'isAllSKUChecked':isAllChecked,'remark':(data.Remark!=null?data.Remark:''),'showOtherText':showRsnRemark,'RemarkText':(data.REASON_REMARK || '')}; + if(isKPIIREnable && !CameraIROnceOnly && !isBgDataExists){ // If IR enable and IR camera is shown for each window and if bg data does not exists + windowDataObj['IRImages']=IRImages; + windowDataObj['zoomIRImages'] =zoomIRImages; + windowDataObj['TempSessionId']=data.TempSessionId; + windowDataObj['Sess_StoreCode']=data.Sess_StoreCode; + windowDataObj['Sess_TaskName']=data.Sess_TaskName; + windowDataObj['Sess_CatName']=data.Sess_CatName; + windowDataObj['Sess_PhotoType']=data.Sess_PhotoType; + + + if(data.UploadStatus=='1' && isDataUploaded!='P' && isDataUploaded!='U'){ + console.log('cat hdr image upload success: P'); + // stop editing if any image is uploaded + setisDataUploaded("P"); + } + + if(data.UploadStatus!='1'){ + // check if any image is not uploaded then set uploaded status to U + isfullyUploaded=false; + } + + } + + data['WindowQuestions']=WindowQuestions; + data['WindowStocks']=WStocks; + + + let changesFlag = {PromoId:data.PromoId, PromoDefinitionId: data.PromoDefinitionId, Flag:(data.PromoHeaderId!=null?true:false)} + inputChangeFlag.push(changesFlag) + + arr.push(data); + allWindowsData.push(windowDataObj); + if(i==txnres2.rows.length-1){ + let { menuName,StoreId1,visiteDate }=bgStoreJson + if(!isBgDataExists){ + BgWindowData(allWindowsData); + } + + if(isKPIIREnable){// set IR Images Upload Status if KPI IR flag is enabled + if(CameraIROnceOnly){ // Camera for each window is not enabled + let isChecked=await getUploadIRStatus(storeData1,menu1); + } + else if(!CameraIROnceOnly && isfullyUploaded){ // Stop Upload and Editing both when fully uploaded, Case: if Camera for each window is enabled + setisDataUploaded('U'); + } + } + + setInputChange(inputChangeFlag) + setWindows(arr); + setGlobalWindows(arr); + setZoomImageUrl(images); + setProcessing(false); + } + } + } + else{ + setProcessing(false); + notify('No Data found'); + } + // else{ + + // await txn.executeSql(q2,[],async function (txn2, txnres2) { + // console.log('def data:',txnres2.rows.length); + // if(txnres2.rows.length>0){ + // let arr=[],images=[],allWindowsData=[],inputChangeFlag=[],storeBGData1=[],bgStoreJson={}; + // let windData = await get_item('storeData') + // if(windData!=null && windData!=''){ + // let StoreJson = JSON.parse(windData) + // let { storeBGData,menuName,StoreId1,visiteDate }= StoreJson + // storeBGData1=storeBGData; + // console.log("storeBGData1 in promo: ",StoreJson) + // bgStoreJson=StoreJson + // if(storeBGData.length>0 && menuName == menu1.ScreenName && StoreId1== StoreId && visiteDate==d2){ + // BgUnsavedChanges(true) + // BgWindowData(storeBGData) + // // setWindowData(storeBGData); + // } + // } + // // for(var i=0;ii.PromoId==data.PromoId && i.PromoDefinitionId==data.PromoDefinitionId) + // let storeBgObj=storeBgIndex>=0?storeBGData1[storeBgIndex]:{}; + + // let bgisPresent=storeBgObj.isPresent + + // if(bgisPresent=='1'||bgisPresent==1){ + // let animatedChoice=new Animated.Value(1); + // data.animatedChoice=animatedChoice; + // }else{ + // let animatedChoice=new Animated.Value((HidePresentYesNoEnable?1:0)); + // data.animatedChoice=animatedChoice; + // } + + // data.NoOfSplit=parseInt(data.NoOfSplit); + // let isStockReq=data.PromoElementStockRequired=='true' || data.PromoElementStockRequired==1?1:0; + + // let imgObj={imgIndex:(i+1),url: data.PromoRefImage, props: {}} + // let WindowSplits = []; + // let img1Req=false; + // let img2Req=false; + // for(var s=0;s{ + + db.transaction(async function (txn) { + + let q=`select IMAGE1 as Image1 from ${AppTables.PROMO_IR_IMAGES} where STORE_ID='${storeData1.StoreId}' and MENU_ID='${menu1.MenuId}' and VISIT_DATE='${d2}'`; + q+=type=='1'?` and PROMO_HEADER_ID='${window.PromoHeaderId}'`:''; + + await txn.executeSql(q,[],async function (txn2, txnres2) { + console.log('get IRImages count ',txnres2.rows.length); + let arr=[],arr2=[]; + if(txnres2.rows.length>0){ + for(var i=0;i{ + return val + }).catch((err)=>{ + console.log(err); + return res; + }); + } + + async function getWindowFilterIds(idCol,IdVal,storeData1){ + let AllIds=[]; + let {StoreId}=storeData1 + return new Promise((resolve,reject)=>{ + + db.transaction(async function (txn) { + let join=` inner join Mapping_StorePromotion s on w.PromoDefinitionId=s.PromoDefinitionId `; + let q=`Select w.* from Master_PromotionDefinition w ${join} where s.StoreId='${StoreId}' `; + await txn.executeSql(q,[],async function (txn2, txnres) { + if(txnres.rows.length>0){ + let Wind_data =txnres.rows.item(0); + let {PromoValue,PromoTable}=Wind_data; + PromoTable=PromoTable!=null?PromoTable:''; + + let filterIdsCol='',filterNamesCol=''; + if(PromoTable.toLowerCase()==HierarchyTbls.Master_Category.toLowerCase()){ + filterIdsCol='CategoryId',filterNamesCol='CategoryName'; + } + else if(PromoTable.toLowerCase()==HierarchyTbls.Master_Brand.toLowerCase()){ + filterIdsCol='BrandId',filterNamesCol='BrandName'; + } + else if(PromoTable.toLowerCase()==HierarchyTbls.Master_Product.toLowerCase()){ + filterIdsCol='ProductId',filterNamesCol='ProductName'; + } + else{ + filterIdsCol='SubCategoryId',filterNamesCol='SubCategoryName'; + } + + let FIdsQ=`Select p.${filterIdsCol},p.${filterNamesCol} from Product_Master p where (p.${idCol}='${IdVal}' or p.${idCol}= ${IdVal}) `; + + await txn.executeSql(FIdsQ,[],async function (txn2, txnres2) { + if(txnres.rows.length>0){ + for(var i=0;i{ + return val + }).catch((err)=>{ + console.log(err); + return AllIds; + }); + } + + async function focusToNext(WindowStocks,windowIndex,stockProd,index){ + console.log('focusToNext is call'); + + if(index==WindowStocks.length-1){ + return; + } + try{ + console.log('next 1 call','input1_'+WindowStocks[index+1].PromoDefinitionId+'_'+WindowStocks[index+1].PromoStockDefinitionId) + let refIn2=inputRefs.current['input1_'+WindowStocks[index+1].PromoDefinitionId+'_'+WindowStocks[index+1].PromoStockDefinitionId]; + + if(refIn2!=null){ + refIn2.focus(); + } + } + catch(err){ + console.log(err); + } + + } + + async function getUploadIRStatus(storeData1,menu1){ + let allImages=[]; + let {StoreId} =storeData1; + return new Promise((resolve,reject)=>{ + db.transaction(async function (txn) { + + // For CameraIROnceOnly enabled condition only one TempSessionId will be genrated per KPI + let q=` SELECT Distinct TEMP_SESSION_ID as TempSessionId,UN_SESSION_ID as UploadSessionId,UPLOAD_STATUS as UploadStatus,SYNC_STATUS as SyncStatus,SESSION_STORECODE as Sess_StoreCode,SESSION_TASKNAME as Sess_TaskName,SESSION_CATNAME as Sess_CatName,SESSION_PHOTOTYPE as Sess_PhotoType FROM ${AppTables.PROMO_IRUPLOAD} where STORE_ID='${StoreId}' and MENU_ID='${menu1.MenuId}' and VISIT_DATE='${d2}' `; + await txn.executeSql(q,[],async function (txn2, txnres) { + if(txnres.rows.length>0){ + let isfullyUploaded=true; + //No Loop required, As For CameraIROnceOnly enabled condition only one TempSessionId will be genrated per KPI + let data =txnres.rows.item(0); + let {Sess_StoreCode,Sess_TaskName,Sess_CatName,Sess_PhotoType}=data; + if(data.UploadStatus=='1' && isDataUploaded!='P' && isDataUploaded!='U'){ + console.log('getUploadIRStatus success: U'); + // Stop Upload and Editing both when fully uploaded + setisDataUploaded("U"); + } + // setGbTempSessionId(data.TempSessionId); + GbTempSessionId.current=data.TempSessionId; + let obj={Sess_StoreCode,Sess_TaskName,Sess_CatName,Sess_PhotoType}; + GbTempSessionObj.current=obj; + resolve(true); + } + else{ + resolve(true); + } + },function (txnE,txnerr) { console.log(txnerr); resolve(false); },); + }); + }).catch((err)=>{ + return false; + }) + } + + async function getWindowSplits(NoOfSplit,window,storeData1,menu1,isPromoImage1MANDCOUNT,isPromoImage2MANDCOUNT){ + let WindowSplits_def= []; + // for(var s=0;s{ + + db.transaction(async function (txn) { + + let q=`select * from ${AppTables.PROMO_IMAGES} where PROMO_HEADER_ID='${window.PromoHeaderId}' and STORE_ID='${storeData1.StoreId}' `; + + await txn.executeSql(q,[],async function (txn2, txnres2) { + console.log("images saved len:",txnres2.rows.length); + if(txnres2.rows.length>0){ + let arr=[]; + for(var i=0;i{ + return val + }).catch((err)=>{ + console.log(err); + return WindowSplits_def; + }); + } + + async function getWindowQuestions(window,storeData1,isInserted1=false,menu1){ + let obj={'WindowQA':{},'WindowQuestions':[]} + return new Promise((resolve,reject)=>{ + + db.transaction(async function (txn) { + var q='',selectlist='',join='',join2='',join3=''; + // if(isInserted==true){ + // selectlist=` DISTINCT q.QUESTION_ID as PromoQuestionId,q.QUESTION_CODE as PromoQuestionCode,wq.PromoQuestionName,wq.QuestionType,wq.PromoqShowCamera,wq.PromoqCameraMandatory,wq.PromoqLengthValidationRequired,wq.PromoqMinimumChar,wq.PromoqMaximumChar,wq.PromoqDecimalPoint,wq.PromoqDateRangeMin,wq.PromoqDateRangeMax,wq.PromoqVoiceLengthInMinutes,wq.PromoqDefaultQuestionEnable,q.ANSWER as Answer,q.ANSWER_ID as AnswerId,q.MULTI_OPTIONS_IDS as multi_op_ids,q.IMAGE_ALLOW1 as PromoaShowCamera,q.IMAGE1 as Image1,q.IS_DISABLED as IsDisabled `; + // join2=` inner join Mapping_PromotionQuestion mq on mq.PromoQuestionId=wq.PromoQuestionId `; + // join=` inner join Master_PromotionQuestion wq on wq.PromoQuestionId=q.QUESTION_ID `; + // q=`select ${selectlist} from ${AppTables.PROMO_CHILD_DATA} q ${join} ${join2} where q.STORE_ID='${storeData1.StoreId}' and q.PROMO_DEFINITION_ID='${window.PromoDefinitionId}' and q.PROMO_ID='${window.PromoId}' order by wq.PromoQuestionSequence `; + + // } + // else{ + // selectlist=` DISTINCT wq.PromoQuestionId,wq.PromoQuestionCode,wq.PromoQuestionName,wq.QuestionType,wq.PromoqShowCamera,wq.PromoqCameraMandatory,wq.PromoqLengthValidationRequired,wq.PromoqMinimumChar,wq.PromoqMaximumChar,wq.PromoqDecimalPoint,wq.PromoqDateRangeMin,wq.PromoqDateRangeMax,wq.PromoqVoiceLengthInMinutes,wq.PromoqDefaultQuestionEnable `; + // join=` inner join Mapping_PromotionQuestion mq on mq.PromoQuestionId=wq.PromoQuestionId `; + // q=`select ${selectlist} from Master_PromotionQuestion wq ${join} where mq.PromoDefinitionId='${window.PromoDefinitionId}' order by wq.PromoQuestionSequence `; + // } + + + //get data from master and filled data for that particular qtn if any + // selectlist=` DISTINCT q.QUESTION_ID as PromoQuestionId,q.QUESTION_CODE as PromoQuestionCode,wq.PromoQuestionName,wq.QuestionType,wq.PromoqShowCamera,wq.PromoqCameraMandatory,wq.PromoqLengthValidationRequired,wq.PromoqMinimumChar,wq.PromoqMaximumChar,wq.PromoqDecimalPoint,wq.PromoqDateRangeMin,wq.PromoqDateRangeMax,wq.PromoqVoiceLengthInMinutes,wq.PromoqDefaultQuestionEnable,q.ANSWER as Answer,q.ANSWER_ID as AnswerId,q.MULTI_OPTIONS_IDS as multi_op_ids,q.IMAGE_ALLOW1 as PromoaShowCamera,q.IMAGE1 as Image1,q.IS_DISABLED as IsDisabled `; + selectlist=` DISTINCT wq.PromoQuestionId,wq.PromoQuestionCode,wq.PromoQuestionName,wq.QuestionType,wq.PromoqShowCamera,wq.PromoqCameraMandatory,wq.PromoqLengthValidationRequired,wq.PromoqMinimumChar,wq.PromoqMaximumChar,wq.PromoqDecimalPoint,wq.PromoqDateRangeMin,wq.PromoqDateRangeMax,wq.PromoqVoiceLengthInMinutes,wq.PromoqDefaultQuestionEnable,(CASE WHEN q.QUESTION_ID is not null THEN 1 ELSE 0 END) isInserted,q.ANSWER as Answer,q.ANSWER_ID as AnswerId,q.MULTI_OPTIONS_IDS as multi_op_ids,q.IMAGE_ALLOW1 as PromoaShowCamera,q.IMAGE1 as Image1,q.IS_DISABLED as IsDisabled `; + join3=` left outer join ${AppTables.PROMO_CHILD_DATA} q on q.QUESTION_ID=wq.PromoQuestionId and q.STORE_ID='${storeData1.StoreId}' and q.PROMO_DEFINITION_ID='${window.PromoDefinitionId}' and q.PROMO_ID='${window.PromoId}'`; + join=` inner join Mapping_PromotionQuestion mq on mq.PromoQuestionId=wq.PromoQuestionId `; + q=`select ${selectlist} from Master_PromotionQuestion wq ${join} ${join3} where mq.PromoDefinitionId='${window.PromoDefinitionId}' order by wq.PromoQuestionSequence `; + + + + await txn.executeSql(q,[],async function (txn2, txnres2) { + + if(txnres2.rows.length>0){ + let arr=[]; + let wqa_obj={}; + for(var i=0;i0){ + for(var k=0;k=0)){ + showImageTag=true; + } + } + } + } + + if(showImageTag && data.Answer!=null){ + let imgPath=(Platform.OS=='ios'?'file://':'')+ImageFolderPath+menu1.ScreenName+"/"+data.Image1; + console.log('imgPath:',imgPath); + wqa_obj[imgname_key]=data.Image1; + wqa_obj[img_key]=imgPath; + } + + + + if(data.QuestionType=='Date' && data.Answer!=null){ + let dayonly=moment().format('DD'); + let actual_date=data.Answer?data.Answer.split('/'):[]; + let month=actual_date[0],year=actual_date[1]; + let fulldate=month+'/'+dayonly+'/'+year; + wqa_obj[date_key]=fulldate; + + } + + arr.push(data); + if(i==txnres2.rows.length-1){ + obj['WindowQuestions']=arr; + obj['WindowQA']=wqa_obj; + resolve(obj) + } + } + } + else{ + resolve(obj) + } + },function (txnE,txnerr) { console.log(txnerr); resolve(obj) },); + }); + }).then((val)=>{ + return val + }).catch((err)=>{ + console.log(err); + return obj; + }); + } + + + async function getWindowAnswers(qtn){ + + return new Promise((resolve,reject)=>{ + + db.transaction(async function (txn) { + var q='',selectlist=''; + selectlist=` DISTINCT PromoAnswerId as AnswerId,PromoAnswerName as Answer,PromoaShowCamera,PromoaCameraMandatory,PromoaQuestionEnable,PromoaQuestionDisable `; + q=`select ${selectlist} from Master_PromotionQuestion where PromoQuestionId='${qtn.PromoQuestionId}' order by PromoaSequence `; + + await txn.executeSql(q,[],async function (txn2, txnres2) { + if(txnres2.rows.length>0){ + let arr=[]; + for(var i=0;i{ + return val + }).catch((err)=>{ + console.log(err); + return []; + }); + } + + async function getWindowStockData(window,storeData1,isInserted=false,isOPStockEnableFlag=false){ + let obj={'WStocks':[],'WStocksData':[],'isAllChecked':0} + let {StoreId,StateId,ChainId,StoreTypeId,StoreClassId,StoreCategoryId}=storeData1; + return new Promise((resolve,reject)=>{ + db.transaction(async function (txn) { + + let checkassrt=window.PromoElementCheckAssortment=='true' || window.PromoElementCheckAssortment==1?true:false; + let join='',join2='',join3=''; + + if(isOPStockEnableFlag==true||isOPStockEnableFlag=="true"){ + join3=`inner join ${AppTables.STOCK_DATA} s2 on s2.PRODUCT_ID=s.PromoStockValue and STORE_ID='${storeData1.StateId}' and VISIT_DATE='${d2}'`; + } + + // get data from masters with inserted data if any + if(checkassrt){ + join2=` inner join Mapping_ProductAssortmentStorewise a on a.ProductId=s.PromoStockValue and a.StoreId='${StoreId}'`; + } + let join4=`left outer join ${AppTables.PROMO_STOCK_DATA} st on s.PromoStockDefinitionId=st.PROMO_STOCK_DEFINITION_ID and st.PROMO_DEFINITION_ID='${window.PromoDefinitionId}' and st.STORE_ID='${storeData1.StoreId}' and st.VISIT_DATE='${d2}'`; + // let selectlist1=` s.PROMO_STOCK_DEFINITION_ID as PromoStockDefinitionId, s.PROMO_DEFINITION_ID as PromoDefinitionId,s.PROMO_STOCK_TABLE as PromoStockTable,s.PROMO_STOCK_FIELD as PromoStockField,s.PROMO_STOCK_VALUE as PromoStockValue,s.PROMO_STOCK_MBQ as PromoStockMBQ,s.PRODUCT_NAME as ProductName, s.STOCK as Stock,s.IS_PROMO_PRESENT as isPromoPresent `; + let selectlist2=` s.PromoStockDefinitionId, s.PromoDefinitionId,s.PromoStockTable,s.PromoStockField,s.PromoStockValue,s.PromoStockMBQ,s.ProductName,s.PromoStockMBQ,st.STOCK as Stock,st.IS_PROMO_PRESENT as isPromoPresent `; + let q2=`select ${selectlist2} from Master_PromotionStockDefinition s ${join2} ${join3} ${join4} where s.PromoDefinitionId='${window.PromoDefinitionId}' `; + if(checkassrt){ + q2+=` and a.StoreId='${storeData1.StoreId}' `; + } + if(isOPStockEnableFlag==true||isOPStockEnableFlag=="true"){ + q2+=` and s2.OPENING_STOCK>0`; + } + q2+=` order by s.ProductName `; + + await txn.executeSql(q2,[],async function (txn2, txnres2) { + console.log('products added:',txnres2.rows.length) + if(txnres2.rows.length>0){ + let arr=[],WStocksData=[]; + let isAllChecked=1; + for(var i=0;i0){ + // let arr=[],WStocksData=[]; + // let isAllChecked=1; + // for(var i=0;i{ + return val + }).catch((err)=>{ + console.log(err); + return obj; + }); + } + + + async function getImage(imgdata){ + let type=getImageProps.type || ''; + let window=getImageProps.window || {}; + let splitItem=getImageProps.splitItem || {}; + let splitItemIndex=getImageProps.splitItemIndex || 0; + let qtn=getImageProps.qtn || {}; + let cameraType=getImageProps.cameraType!=null?getImageProps.cameraType:'1'; + + console.log('getImage cameraType:',cameraType); + if(typeof imgdata=='object' && imgdata.errorCode=='camera_unavailable'){ + notify(ST.Cameraunavailable); + } + else if(typeof imgdata =='object' && imgdata.uri!=null){ + const img=imgdata; + const imgurl=img.uri, imgWidth=img.width, imgHeight=img.ExtendedHeight; + let isImgFromGallery=img.fromGallery!=null?img.fromGallery:false; + let picture_clickedd=isImgFromGallery==true?img.datetime:new Date(); + + let picture_clicked_time=moment(picture_clickedd).format('MM-DD-YYYY HH:mm:ss') + let picture_clicked_time_for_pic_name=moment(picture_clickedd).format('MMDDYYYY_HHmmss') + + console.log("time", picture_clicked_time); + console.log("time1", picture_clicked_time_for_pic_name); + let calculate_tym_date_for_filename = picture_clicked_time_for_pic_name; + let calculate_tym_date_over_img = picture_clicked_time; + let filename=storeData.StoreId+'_'+window.PromoDefinitionId+'_'+window.PromoId+'_'+(props.UserId || '')+'_STImg-'+calculate_tym_date_for_filename+'.jpg'; + + let allData=WindowData; + let defData={'PromoId':window.PromoId,'PromoDefinitionId':window.PromoDefinitionId}; + const wind_index=allData.findIndex(i=>i.PromoId==window.PromoId && i.PromoDefinitionId==window.PromoDefinitionId) ; + let wind=wind_index>=0?allData[wind_index]:defData; + + let camera1Label=window.PromoImage1Lable || ''; + let camera2Label=window.PromoImage2Lable || ''; + let extraLabel=''; + + if(cameraType=='2'){ + var QD=wind.WindowQA || {}; + var image_key=qtn.PromoQuestionId+'_ImageName1'; + var image_key_path=qtn.PromoQuestionId+'_ImagePath1'; + QD[image_key]=filename; + extraLabel='Qtn Id: '+qtn.PromoQuestionId; + } + else if(cameraType=='3'){ + var image_key='NAImage1'; + var image_key_path='NAImage1Path'; + wind[image_key]=filename; + extraLabel='Not Exist'; + } + else{ + var WindowSplits=wind.WindowSplits || []; + console.log('WindowSplits:',WindowSplits); + var image_key=type=='1'?'Image1Name':'Image2Name'; + var image_key_path=type=='1'?'Image1':'Image2'; + splitItem[image_key]=filename; + extraLabel=type=='1'?camera1Label:camera2Label; + } + + const mark_text1=calculate_tym_date_over_img; + const mark_text2='Store Name:'+storeData.StoreName+' | Store Id:'+storeData.StoreId+' | User Id:'+storeData.EmpId+' | PromoDef Id:'+window.PromoDefinitionId+(extraLabel!=''?' ('+extraLabel+')':'')+' | Image Type: '+currentMenu.MenuName+' | Date:'+calculate_tym_date_over_img; + + let imagePath=`${ImageFolderPath+currentMenu.ScreenName}/${filename}`; + RNFS.copyFile(imgurl, imagePath) + .then(async(resn) => { + // render data with clicked image + let uri='file://'+imagePath; + console.log('image marker:',uri); + + if(cameraType=='2'){ + QD[image_key_path]=uri; + if(qtn.QuestionType=="Image"){ + //set answid - 0 and answer to filename if qtnType is Image + let id_key=qtn.PromoQuestionId+'_AnswerId'; + let ans_key=qtn.PromoQuestionId+'_Answer'; + QD[id_key]=0; + QD[ans_key]=filename; + } + wind.WindowQA=QD; + wind_index>=0?allData[wind_index]=wind:allData.push(wind); + BgWindowData(allData); + // setWindowData(allData); + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata3(!rerenderdata3); + } + else if(cameraType=='3'){ + wind[image_key_path]=uri; + wind_index>=0?allData[wind_index]=wind:allData.push(wind); + // setWindowData(allData); + BgWindowData(allData); + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + else{ + console.log('split image updated'); + splitItem[image_key_path]=uri; + splitItemIndex>=0?WindowSplits[splitItemIndex]=splitItem:WindowSplits.push(splitItem); + wind.WindowSplits=WindowSplits; + wind_index>=0?allData[wind_index]=wind:allData.push(wind); + // setWindowData(allData); + BgWindowData(allData); + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata2(!rerenderdata2); + } + + let objIndex = InputChange.findIndex(i=>i.PromoId==window.PromoId && i.PromoDefinitionId==window.PromoDefinitionId); + let winArr=[...InputChange] + winArr[objIndex].Flag=true + + setSelectedImg(uri) + setInputChange(winArr); + + + // add metdata then resize image and restored back to the imagePath + let restore_data={"destFilePath":imagePath,"imgurl":imgurl,imgWidth,imgHeight,mark_text1,mark_text2} + let is_restored=await restore_ImageWithMetaData(restore_data,imgdata); + console.log("image restored:",is_restored); + + }) + .catch(err => { + console.log('ERROR: image file write failed!!!'); + console.log(err.message, err.code); + }); + + } + + } + + async function openCamera(window,splitItem,splitItemIndex,type='1',cameraType='1',qtn={}){ + setErrorField({}); + setError(false); + setGetImageProps({'window':window,'splitItem':splitItem,'splitItemIndex':splitItemIndex,'type':type,'cameraType':cameraType,'qtn':qtn}); + setShowCamera(true); + } + + async function onSubmitData(){ + let isvalid=await validate(); + if(isvalid){ + Keyboard.dismiss(); + setShowAlert(true); + } + } + + async function saveData(){ + // setHasUnsavedChanges(false); + BgUnsavedChanges(false) + setShowAlert(false); + setLoaderTitle(ST.SavingData+'...'); + setProcessing(true); + let d1n=new Date(); + let d3=moment(d1n).format('MM/DD/YYYY'); + + + + try { + let {StoreId,ChainId,StateId,StoreTypeId}=storeData; + + let isKPIIREnableI=KPIFields.findIndex(i=>i.KPIFieldName=='IR_KPIEnable') + let isKPIIREnableObj=isKPIIREnableI>=0?KPIFields[isKPIIREnableI]:{}; + let isKPIIREnable=isKPIIREnableI>=0?isKPIIREnableObj['KPIFieldEnable']:false; + + let CameraIROnceOnlyIndex=KPIFields.findIndex(i=>i.KPIFieldName=='IR_CameraOnceOnly') + let CameraIROnceOnlyObj=CameraIROnceOnlyIndex>=0?KPIFields[CameraIROnceOnlyIndex]:{}; + let CameraIROnceOnly=CameraIROnceOnlyIndex>=0?CameraIROnceOnlyObj['KPIFieldEnable']:true; + + + // remove old data + // Delete only filtered data if partail save allowed is true + + let {PSAllow}=currentMenu + let deletePrevData=false; + if(ShowCatWise && PSAllow){ + if(FilteredPromoValues.length>0){ + await removePreviousData(); + } + else{ + notify('Something went wrong while deleteing old data!') + setProcessing(false); + return ; + } + }else{ + deletePrevData=true; + } + + await db.transaction(async function (txn) { + + // remove old data + if(deletePrevData){ + await txn.executeSql(`DELETE FROM ${AppTables.PROMO_HDR_DATA} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' `,[],async function (txn2, txnres) { + console.log('window hdr data deleted'); + },function (txnE,txnerr) { console.log(txnerr); },); + await txn.executeSql(`DELETE FROM ${AppTables.PROMO_CHILD_DATA} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' `,[],async function (txn2, txnres) { + console.log('window child data deleted'); + },function (txnE,txnerr) { console.log(txnerr); },); + await txn.executeSql(`DELETE FROM ${AppTables.PROMO_IMAGES} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' `,[],async function (txn2, txnres) { + console.log('window images data deleted'); + },function (txnE,txnerr) { console.log(txnerr); },); + await txn.executeSql(`DELETE FROM ${AppTables.PROMO_STOCK_DATA} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' `,[],async function (txn2, txnres) { + console.log('window stock data deleted'); + },function (txnE,txnerr) { console.log(txnerr); },); + await txn.executeSql(`DELETE FROM ${AppTables.PROMO_IR_IMAGES} WHERE STORE_ID='${StoreId}' and MENU_ID='${currentMenu.MenuId}' and VISIT_DATE='${d2}' `,[],async function (txn2, txnres) { + console.log('window IR images deleted'); + },function (txnE,txnerr) { console.log(txnerr); },); + await txn.executeSql(`DELETE FROM ${AppTables.PROMO_IRUPLOAD} WHERE STORE_ID='${StoreId}' and MENU_ID='${currentMenu.MenuId}' and VISIT_DATE='${d2}' `,[],async function (txn2, txnres) { + console.log('window IR upload data deleted'); + },function (txnE,txnerr) { console.log(txnerr); },); + + } + // add data + var values='',childV='',imageV='',stockV='',IRImageV='',IRStatusV=''; + + for (const wi in globalWindows){ + const window=globalWindows[wi]; + let isImage1=window.PromoImage1=='true' || window.PromoImage1==1?1:0; + let isImage2=window.PromoImage2=='true' || window.PromoImage2==1?1:0; + let isNAImageAvl=window.PromoNotExistCamera=='true' || window.PromoNotExistCamera==1?1:0; + let isNAReasonEnable=window.PromoNotExistReasonEnable=='true' || window.PromoNotExistReasonEnable==1? 1:0; + let isReasonEnable=window.PromoExistReasonEnable=='true' || window.PromoExistReasonEnable==1? 1:0; + let isStockReq=window.PromoElementStockRequired=='true' || window.PromoElementStockRequired==1?1:0; + let WindowQuestions=window.WindowQuestions || []; + let WindowStocks=window.WindowStocks || []; + + + const wind=WindowData.find(i=>i.PromoId==window.PromoId && i.PromoDefinitionId==window.PromoDefinitionId); + let isPresent=wind.isPresent!=null && wind.isPresent!=''?wind.isPresent:'0'; + let ReasonId=wind.ReasonId!=null?wind.ReasonId:0; + let Reason=wind.Reason!=null?wind.Reason:''; + let NAImage1=wind.NAImage1!=null?wind.NAImage1:''; + let NAImage1Path=wind.NAImage1Path!=null?wind.NAImage1Path:''; + let remark=wind.remark!=null?wind.remark:''; + let WindowSplits=wind.WindowSplits || []; + let QD=wind.WindowQA || {}; + let WStocksData=wind.WStocksData || []; + let windIRImages=wind.IRImages!=null?wind.IRImages:[]; + let TempSessionId=wind.TempSessionId!=null?wind.TempSessionId:''; + let Sess_StoreCode=wind.Sess_StoreCode!=null?wind.Sess_StoreCode:''; + let Sess_TaskName=wind.Sess_TaskName!=null?wind.Sess_TaskName:''; + let Sess_CatName=wind.Sess_CatName!=null?wind.Sess_CatName:''; + let Sess_PhotoType=wind.Sess_PhotoType!=null?wind.Sess_PhotoType:''; + + let PROMO_HEADER_ID='WIND'+wi+(Math.floor(Math.random()*1000)+1); + let {PromoDefinitionId,PromoId,PromoName,PromoTable,PromoField,PromoValue,ChildName}=window; + let showOtherText=wind.showOtherText==true || wind.showOtherText=='1' ?1:0; + let RemarkText=wind.RemarkText!=null?wind.RemarkText:''; + + values+=values!=''?' , ':''; + values+=` ('${PROMO_HEADER_ID}','${StoreId}','${d3}','${PromoDefinitionId}','${PromoId}','${PromoName}','${PromoTable}','${PromoField}','${PromoValue}','${ChildName}','${isPresent}','${NAImage1}','${ReasonId}','${Reason}','${(remark || '')}','${showOtherText}','${RemarkText}','1','${d3}') `; + + if(isKPIIREnable && !CameraIROnceOnly){ // Add window wise IR Status and Images if IR enabled and IR Camera enabled for each window + + for(const IRImageIndex in windIRImages){ + let IRImgObj=windIRImages[IRImageIndex]; + let Image1=IRImgObj['ImagePath']!=null && IRImgObj['ImagePath']!=''?IRImgObj['ImagePath']:''; + + IRImageV+=IRImageV!=''?' , ':''; + IRImageV+=` ('${PROMO_HEADER_ID}','${StoreId}','${d3}','${PromoDefinitionId}','${PromoId}','${Image1}','','${TempSessionId}','','${currentMenu.MenuId}','${d3}') `; + } + IRStatusV+=IRStatusV!=''?' , ':''; + IRStatusV+=` ('${PROMO_HEADER_ID}','${StoreId}','${d3}','${PromoDefinitionId}','${PromoId}','${TempSessionId}','','0','','${currentMenu.MenuId}','${Sess_StoreCode}','${Sess_TaskName}','${Sess_CatName}','${Sess_PhotoType}','${d3}') `; + + } + + if(isPresent==1){ + for(const qtnIndex in WindowQuestions){ + const qtn=WindowQuestions[qtnIndex]; + + let selansid='',selanswer='',selimg='',showImageTag=false; + let isDisabled=qtn.isDisabled==true?"1":"0"; + let id_key=qtn.PromoQuestionId+'_AnswerId'; + let ans_key=qtn.PromoQuestionId+'_Answer'; + let multi_key=qtn.PromoQuestionId+'_MultiOption'; + let date_key=qtn.PromoQuestionId+'_Date'; + let img_key=qtn.PromoQuestionId+'_ImagePath1'; + let imgname_key=qtn.PromoQuestionId+'_ImageName1'; + let rating_key=qtn.PromoQuestionId+'_Rating'; + let list_mcdata=[]; + + let {PromoQuestionId,PromoQuestionCode,QuestionType,PromoqShowCamera}=qtn + let answer=QD[ans_key] || 0; + let DecimalAnswerVal='' + let lastchar='' + let DecimalAnswer=answer+""; + if( qtn.QuestionType=='Decimal'){ + if(DecimalAnswer!=null && DecimalAnswer!='' && DecimalAnswer!=0 && DecimalAnswer!="."){ + DecimalAnswerVal = parseFloat(DecimalAnswer).toFixed(1) + }else{ + DecimalAnswerVal="0.0" + } + }else{ + DecimalAnswerVal=answer + } + + // let answerId=QD[id_key] || ''; + let answerId=QD[id_key]==0? 0 :(QD[id_key]|| ''); + + let multi_options_ids=QD[multi_key] || ''; + + if(qtn.QuestionType=='Number' || qtn.QuestionType=='Text' || qtn.QuestionType=='Decimal' || qtn.QuestionType=='Date' || qtn.QuestionType=='Image') + { + showImageTag=(qtn.PromoqShowCamera==1 || qtn.PromoqShowCamera=='true'); + } + else if((qtn.QuestionType=='Single choice list' || qtn.QuestionType=='Multi choice list' )){ + if (qtn.Answers && qtn.Answers.length>0){ + for(var i=0;i=0)){ + showImageTag=true; + } + + } + } + } + + let Image1=showImageTag==1?QD[imgname_key]:''; + + childV+=childV!=''?' , ':''; + childV+=` ('${PROMO_HEADER_ID}','${StoreId}','${d3}','${PromoDefinitionId}','${PromoId}','${PromoQuestionId}','${PromoQuestionCode}','${QuestionType}','${DecimalAnswerVal}','${answerId}','${multi_options_ids}','${Image1}','${showImageTag}','${isDisabled}','${d3}') `; + } + + if(!isKPIIREnable){ + for(const splitItemIndex in WindowSplits){ + const splitItem=WindowSplits[splitItemIndex]; + let Image1Name=splitItem['Image1Name']!=null && splitItem['Image1Name']!=''?splitItem['Image1Name']:''; + let Image2Name=splitItem['Image2Name']!=null && splitItem['Image2Name']!=''?splitItem['Image2Name']:''; + Image1Name=isImage1==1?Image1Name:''; + Image2Name=isImage2==1?Image2Name:''; + + imageV+=imageV!=''?' , ':''; + imageV+=` ('${PROMO_HEADER_ID}','${StoreId}','${d3}','${PromoDefinitionId}','${PromoId}','${Image1Name}','${Image2Name}','${d3}') `; + } + } + + for(const stockProdIndex in WindowStocks){ + const stockProd=WindowStocks[stockProdIndex]; + let sd=WStocksData.find(i=> i.ProductId==stockProd.PromoStockValue) || {}; + let stock=sd.Stock!=null?sd.Stock:(sd.Stock==0?sd.Stock:''); + let isPromoPresent=sd.isPromoPresent!=null?sd.isPromoPresent:0; + let {PromoStockDefinitionId, PromoDefinitionId,PromoStockTable,PromoStockField,PromoStockValue,PromoStockMBQ,ProductName} =stockProd + stockV+=stockV!=''?' , ':''; + stockV+=` ('${PROMO_HEADER_ID}','${StoreId}','${d3}','${PromoDefinitionId}','${PromoId}','${PromoStockDefinitionId}','${PromoStockTable}','${PromoStockField}','${PromoStockValue}','${PromoStockMBQ}','${ProductName}','${stock}','${isPromoPresent}','${d3}') `; + } + + } + } + + if(isKPIIREnable && CameraIROnceOnly){// Add window wise IR images if IR enabled and IR Camera enabled for once only + for(const IRImageIndex in WindowIRImages.current){ + let IRImgObj=WindowIRImages.current[IRImageIndex]; + let Image1=IRImgObj['ImagePath']!=null && IRImgObj['ImagePath']!=''?IRImgObj['ImagePath']:''; + + IRImageV+=IRImageV!=''?' , ':''; + IRImageV+=` ('','${StoreId}','${d3}','','','${Image1}','','${GbTempSessionId.current}','','${currentMenu.MenuId}','${d3}') `; + } + + let {Sess_StoreCode,Sess_TaskName,Sess_CatName,Sess_PhotoType}=GbTempSessionObj.current; + Sess_StoreCode=Sess_StoreCode || ''; + Sess_TaskName=Sess_TaskName || ''; + Sess_CatName=Sess_CatName || ''; + Sess_PhotoType=Sess_PhotoType || ''; + IRStatusV+=IRStatusV!=''?' , ':''; + IRStatusV+=` ('','${StoreId}','${d3}','','','${GbTempSessionId.current}','','0','','${currentMenu.MenuId}','${Sess_StoreCode}','${Sess_TaskName}','${Sess_CatName}','${Sess_PhotoType}','${d3}') `; + + } + + + + let add_hdr_data=`INSERT INTO ${AppTables.PROMO_HDR_DATA} (PROMO_HEADER_ID,STORE_ID,VISIT_DATE,PROMO_DEFINITION_ID,PROMO_ID,PROMO_NAME,PROMO_TABLE,PROMO_FIELD,PROMO_VALUE,CHILD_NAME,IS_PRESENT,PROMO_NA_IMAGE,REASON_ID,REASON,REMARK,SHOW_RSN_REMARK,REASON_REMARK,IS_UPDATED,ADDED_DATE) VALUES ${values} `; + let add_child_data=`INSERT INTO ${AppTables.PROMO_CHILD_DATA} (PROMO_HEADER_ID,STORE_ID,VISIT_DATE,PROMO_DEFINITION_ID,PROMO_ID,QUESTION_ID,QUESTION_CODE,QUESTION_TYPE,ANSWER,ANSWER_ID,MULTI_OPTIONS_IDS,IMAGE1,IMAGE_ALLOW1,IS_DISABLED,ADDED_DATE) VALUES ${childV} `; + let add_images_data=`INSERT INTO ${AppTables.PROMO_IMAGES} (PROMO_HEADER_ID,STORE_ID,VISIT_DATE,PROMO_DEFINITION_ID,PROMO_ID,IMAGE1,IMAGE2,ADDED_DATE) VALUES ${imageV} `; + let add_stock_data=`INSERT INTO ${AppTables.PROMO_STOCK_DATA} (PROMO_HEADER_ID,STORE_ID,VISIT_DATE,PROMO_DEFINITION_ID,PROMO_ID,PROMO_STOCK_DEFINITION_ID,PROMO_STOCK_TABLE,PROMO_STOCK_FIELD,PROMO_STOCK_VALUE,PROMO_STOCK_MBQ,PRODUCT_NAME,STOCK,IS_PROMO_PRESENT,ADDED_DATE) VALUES ${stockV} `; + let add_IRImage_data=`INSERT INTO ${AppTables.PROMO_IR_IMAGES} (PROMO_HEADER_ID,STORE_ID,VISIT_DATE,PROMO_DEFINITION_ID,PROMO_ID,IMAGE1,IMAGE2,TEMP_SESSION_ID,UN_SESSION_ID,MENU_ID,ADDED_DATE) VALUES ${IRImageV} `; + let add_IRStatus_data=`INSERT INTO ${AppTables.PROMO_IRUPLOAD} (PROMO_HEADER_ID,STORE_ID,VISIT_DATE,PROMO_DEFINITION_ID,PROMO_ID,TEMP_SESSION_ID,UN_SESSION_ID,UPLOAD_STATUS,SYNC_STATUS,MENU_ID,SESSION_STORECODE,SESSION_TASKNAME,SESSION_CATNAME,SESSION_PHOTOTYPE,ADDED_DATE) VALUES ${IRStatusV} `; + + console.log("imageV:",imageV); + + + await txn.executeSql(add_hdr_data,[],async function (txn2, txnres) { + console.log('st header data added'); + var isSplitImageAdded=true,isStockAdded=true,isChildAdded=true,isIRImageAdded=true,isIRStatusAdded=true; + if(imageV!=''){ + isSplitImageAdded=await executeQuery(add_images_data); + } + if(stockV!=''){ + isStockAdded=await executeQuery(add_stock_data); + } + if(childV!=''){ + isChildAdded=await executeQuery(add_child_data); + } + if(IRImageV!=''){ + isIRImageAdded=await executeQuery(add_IRImage_data); + } + if(IRStatusV!=''){ + isIRStatusAdded=await executeQuery(add_IRStatus_data); + } + + if(!isSplitImageAdded){ + setProcessing(false);notify(ST.Cannotaddpromotionimages); + } + else if(!isStockAdded){ + setProcessing(false);notify(ST.Cannotaddpromotionstockdata); + } + else if(!isChildAdded){ + setProcessing(false);notify(ST.Cannotaddpromotionquestionsdata); + }else if(!isIRImageAdded){ + setProcessing(false);notify('Cannot add paid promotion IR Images data'); + } + else if(!isIRStatusAdded){ + setProcessing(false);notify('Cannot add paid promotion IR Status data'); + } + else{ + // clear store data in local storage to avoiding re-set data for the store + clear_item('storeData') + console.log("store is stored") + setProcessing(false);notify(ST.Promotiondataupdatedsuccessfully); + props.navigation.goBack(); + } + + },function (txnE,txnerr) { console.log(txnerr);setProcessing(false);notify(ST.Cannotaddpromotiondata); },); + }); + } catch (err) { + console.log(err); + } + } + + + async function removePreviousData(){ + let {StoreId,ChainId,StateId,StoreTypeId}=storeData; + + return new Promise((resolve,reject)=>{ + + db.transaction(async function (txn) { + let FilterIdsJoin=FilteredPromoValues.join(','); + let q=`SELECT * FROM ${AppTables.PROMO_HDR_DATA} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' and PROMO_VALUE in (${FilterIdsJoin}) ` + await txn.executeSql(q,[],async function (txn2, txnres) { + console.log("data to delete:",txnres.rows.length); + if(txnres.rows.length>0){ + let arr=[]; + let isHdrDel=false,isQtnsDel=false,isImagesDel=false,isStockDel=false; + for(let i=0;i{ + return val; + }).catch((err)=>{ + console.log('error:',err); + return false; + }) + } + + async function executeQuery(q){ + + return new Promise((resolve,reject)=>{ + db.transaction(async function (txn) { + await txn.executeSql(q,[],async function (txn2, txnres2) { + resolve(true); + },function(Etxn,txnerr){console.log(txnerr);resolve(false) }); + }); + }).then((val)=>{ + return val; + }).catch((err)=>{ + console.log(err); + return false; + }) + } + + async function validate(){ + let isValid=true; + + let isPromoImage1=KPIFields.findIndex(i=>i.KPIFieldName=='PromoImage1') + let isPromoImage1KPIObj=isPromoImage1>=0?KPIFields[isPromoImage1]:{}; + let isPromoImage1MANDCOUNT=isPromoImage1>=0?isPromoImage1KPIObj['KPIMandatory']:1; + + let isPromoImage2=KPIFields.findIndex(i=>i.KPIFieldName=='PromoImage2') + let isPromoImage2KPIObj=isPromoImage2>=0?KPIFields[isPromoImage2]:{}; + let isPromoImage2MANDCOUNT=isPromoImage2>=0?isPromoImage2KPIObj['KPIMandatory']:1; + + let PromotionValidationRequiredI=KPIFields.findIndex(i=>i.KPIFieldName=='PromotionValidationRequired') + let PromotionValidationRequiredObj=PromotionValidationRequiredI>=0?KPIFields[PromotionValidationRequiredI]:{}; + let PromotionValidationRequired=PromotionValidationRequiredI>=0?PromotionValidationRequiredObj['KPIFieldEnable']:true; + + + let isListedSKUIndex=KPIFields.findIndex(i=>i.KPIFieldName=='ListedSKUCheckbox'); + let isListedSKUKPIObj=isListedSKUIndex>=0?KPIFields[isListedSKUIndex]:{}; + let isListedSKUEnable=isListedSKUIndex>=0?isListedSKUKPIObj['KPIFieldEnable']:true; + + let isKPIIREnableI=KPIFields.findIndex(i=>i.KPIFieldName=='IR_KPIEnable') + let isKPIIREnableObj=isKPIIREnableI>=0?KPIFields[isKPIIREnableI]:{}; + let isKPIIREnable=isKPIIREnableI>=0?isKPIIREnableObj['KPIFieldEnable']:false; + + let CameraIROnceOnlyIndex=KPIFields.findIndex(i=>i.KPIFieldName=='IR_CameraOnceOnly') + let CameraIROnceOnlyObj=CameraIROnceOnlyIndex>=0?KPIFields[CameraIROnceOnlyIndex]:{}; + let CameraIROnceOnly=CameraIROnceOnlyIndex>=0?CameraIROnceOnlyObj['KPIFieldEnable']:true; + + + function showError(obj,isErr){ + console.log("error obj:",obj); + setErrorField(obj); + setError(isErr); + } + + // validate only if permit + return new Promise((resolve,reject)=>{ + for (const wi in globalWindows){ + const window=globalWindows[wi]; + let isImage1=window.PromoImage1=='true' || window.PromoImage1==1?1:0; + let isImage2=window.PromoImage2=='true' || window.PromoImage2==1?1:0; + let isNAImageAvl=window.PromoNotExistCamera=='true' || window.PromoNotExistCamera==1?1:0; + let isNAReasonEnable=window.PromoNotExistReasonEnable=='true' || window.PromoNotExistReasonEnable==1? 1:0; + let isReasonEnable=window.PromoExistReasonEnable=='true' || window.PromoExistReasonEnable==1? 1:0; + let isStockReq=window.PromoElementStockRequired=='true' || window.PromoElementStockRequired==1?1:0; + let StockQtyRequired=window.StockQtyRequired=='true' || window.StockQtyRequired==1?1:0; + let WindowQuestions=window.WindowQuestions || []; + let WindowStocks=window.WindowStocks || []; + + + const wind=WindowData.find(i=>i.PromoId==window.PromoId && i.PromoDefinitionId==window.PromoDefinitionId); + let isPresent=wind.isPresent!=null && wind.isPresent!=''?wind.isPresent:'0'; + let ReasonId=wind.ReasonId!=null?wind.ReasonId:''; + let Reason=wind.Reason!=null?wind.Reason:''; + let NAImage1=wind.NAImage1!=null?wind.NAImage1:''; + let NAImage1Path=wind.NAImage1Path!=null?wind.NAImage1Path:''; + let remark=wind.remark!=null?wind.remark:''; + let WindowSplits=wind.WindowSplits || []; + let QD=wind.WindowQA || {}; + let WStocksData=wind.WStocksData || []; + let windIRImages=wind.IRImages!=null?wind.IRImages:[]; + let TempSessionId=wind.TempSessionId!=null?wind.TempSessionId:""; + let showOtherText=wind.showOtherText!=null?wind.showOtherText:false; + + let errorobj = {'EF_Window':window}; + // if(isKPIIREnable && StoreCameraAllow && !CameraIROnceOnly && (windIRImages.length<=0 || TempSessionId=='') ){ + // notify(`Please click Images for ${window.PromoName}`,'SHORT'); + // resolve(false);return; + // } + // else{ + if(isPresent=='1'){ + if(PromotionValidationRequired==true && isReasonEnable==true && ReasonId=='' ){ + errorobj['EF_NExistReason']="NExistReason"; + showError(errorobj,true); + notify(`${ST.Pleaseselectreasonfor} ${window.PromoName} `,'LONG'); + resolve(false);return; + } + // else if(PromotionValidationRequired==true && remark==''){ + // notify(`Please enter remark for ${window.PromoName} `,'LONG'); + // resolve(false);return; + // } + else{ + console.log("!isKPIIREnable && StoreCameraAllow--------",!isKPIIREnable, StoreCameraAllow, !isKPIIREnable && StoreCameraAllow) + if(!isKPIIREnable && PromotionValidationRequired==true && StoreCameraAllow && window.NoOfSplit>0 && WindowSplits.length>0 && (isImage1==1 || isImage2==1)) + { + + for(const splitItemIndex in WindowSplits){ + const splitItem=WindowSplits[splitItemIndex]; + let Image1Name=splitItem['Image1Name']!=null && splitItem['Image1Name']!=''?splitItem['Image1Name']:''; + let Image2Name=splitItem['Image2Name']!=null && splitItem['Image2Name']!=''?splitItem['Image2Name']:''; + // console.log('Image2Name',Image2Name,isImage2); + // console.log('isPromoImage1MAND',isPromoImage1MAND<=window.NoOfSplit) + // console.log('window.NoOfSplit',window.NoOfSplit) + let currentImgIndex=splitItemIndex+1; + + + if(isImage1==1 && currentImgIndex<=isPromoImage1MANDCOUNT && Image1Name==''){ + errorobj['EF_splitImage1']="splitImage1"; + errorobj['EF_splitItemIndex']=splitItemIndex; + showError(errorobj,true); + notify(`${ST.Pleaseclickallimagesfor} ${window.PromoName}`,'LONG'); + resolve(false);return; + } + else if(isImage2==1 && currentImgIndex<=isPromoImage2MANDCOUNT && Image2Name==''){ + errorobj['EF_splitImage2']="splitImage2"; + errorobj['EF_splitItemIndex']=splitItemIndex; + showError(errorobj,true); + notify(`${ST.Pleaseclickallimagesfor} ${window.PromoName}`,'LONG'); + resolve(false);return; + } + + } + } + + + + + if(PromotionValidationRequired==true && isStockReq==1){ + let isProductSelected=false; + for(const stockProdIndex in WindowStocks){ + const stockProd=WindowStocks[stockProdIndex]; + + let sd=WStocksData.find(i=> i.ProductId==stockProd.PromoStockValue) || {}; + let stock=sd.Stock!=null?sd.Stock:(sd.Stock==0?sd.Stock:''); + let isPromoPresent=sd.isPromoPresent!=null?sd.isPromoPresent:0; + + if(isPromoPresent==1){ + isProductSelected=true; + } + + if((isListedSKUEnable==true && isPromoPresent==1 && StockQtyRequired==1 && stock=='') || (isListedSKUEnable!=true && stock!==0 && (stock==null || stock==''))){ + errorobj['EF_stock']="input1_"; + errorobj['EF_stockProd']=stockProd; + let refIn1=inputRefs.current['input1_'+window.PromoDefinitionId+'_'+stockProd.PromoStockDefinitionId]; + if(refIn1!=null){ + refIn1.focus(); + } + showError(errorobj,true); + notify(`${ST.Pleaseenterstockfor} ${window.PromoName} ( ${stockProd.ProductName} ) `,'LONG'); + resolve(false);return; + } + + if(isListedSKUEnable==true && stockProdIndex==WindowStocks.length-1){ + if(!isProductSelected){ + errorobj['EF_isProductSelected']="isProductSelected"; + showError(errorobj,true); + notify(`${ST.PleaseselectatleastoneSKUfor} ${window.PromoName} `,'LONG'); + resolve(false);return; + } + } + + } + } + + if(PromotionValidationRequired==true && WindowQuestions.length>0){ + for(const qtnIndex in WindowQuestions){ + const qtn=WindowQuestions[qtnIndex]; + + let selansid='',selanswer='',selimg='',showImageTag=false; + let id_key=qtn.PromoQuestionId+'_AnswerId'; + let ans_key=qtn.PromoQuestionId+'_Answer'; + let multi_key=qtn.PromoQuestionId+'_MultiOption'; + let date_key=qtn.PromoQuestionId+'_Date'; + let img_key=qtn.PromoQuestionId+'_ImagePath1'; + let imgname_key=qtn.PromoQuestionId+'_ImageName1'; + let rating_key=qtn.PromoQuestionId+'_Rating'; + let list_mcdata=[]; + + let isDisabled=qtn.isDisabled!=null?qtn.isDisabled:false + errorobj['EF_qtn']=qtn; + + if(!isDisabled){ + let isImgAllowed=((qtn.PromoqShowCamera=='true' || qtn.PromoqShowCamera==1) || (qtn.QuestionType=="Image")); + let checkForAnsKey=(qtn.QuestionType=='Decimal' || qtn.QuestionType=='Number' || qtn.QuestionType=='Text' || qtn.QuestionType=='Date' || qtn.QuestionType=='Rating') ; + if(qtn.QuestionType=='Single choice list') + { + selansid=QD[id_key]; + } + else if(qtn.QuestionType=='Multi choice list') + { + selansid=QD[multi_key]!=null && QD[multi_key]!=''?QD[multi_key].split(','):[]; + } + + let err_type=''; + //show error type based on qtn type + if(qtn.QuestionType=='Single choice list'){ + err_type='Qtn_Select'; + } + else if(qtn.QuestionType=='Decimal' || qtn.QuestionType=='Number' || qtn.QuestionType=='Text' ){ + err_type='Qtn_Input'; + } + else if(qtn.QuestionType=='Date' ){ + err_type='Qtn_Date'; + } + + + if(qtn.QuestionType=='Multi choice list' && selansid.length<=0){ + errorobj['EF_Qtn_MultiChoice']='Qtn_MultiChoice'; + showError(errorobj,true); + notify(`${Pleaseselectoptionsfortherequiredfield} ${ST.In} ${window.PromoName}`,'SHORT'); + resolve(false);return; + } + else if( checkForAnsKey && (Object.keys(QD).indexOf(ans_key)<0 || (Object.keys(QD).indexOf(ans_key)>=0 && QD[ans_key]===''))){ + // console.log("checkForAnsKey--------1") + errorobj['EF_Qtn_Input']=err_type; + showError(errorobj,true); + let msg=( qtn.QuestionType=='Date'?`${ST.Pleasepickadatefortherequiredfield} ${ST.In} ${window.PromoName}`:(qtn.QuestionType=='Rating'?`${Pleaseselectratingfortherequiredfield} ${ST.In} ${window.PromoName}`:`${ST.Pleasefillalltherequiredfield} ${ST.In} ${window.PromoName}`)); + notify(msg,'SHORT'); + resolve(false);return; + } + else if(Object.keys(QD).indexOf(id_key)<0 || (Object.keys(QD).indexOf(id_key)>=0 && (QD[id_key]===''))){ + // Object.keys(QD).indexOf(id_key)<0 || (Object.keys(QD).indexOf(id_key)>=0 && (QD[id_key]==='')) + // console.log("checkForAnsKey--------2",Object.keys(QD).indexOf(id_key)<0 ," ||(",Object.keys(QD).indexOf(id_key)>=0," &&", (QD[id_key]===''),")",Object.keys(QD).indexOf(id_key),id_key,"--",QD[id_key],"---",QD) + errorobj['EF_Qtn_Input']=err_type; + showError(errorobj,true); + notify(`${ST.Pleasefillalltherequiredfield} ${ST.In} ${window.PromoName}`,'SHORT'); + resolve(false);return; + } + else if(!isKPIIREnable && StoreCameraAllow && isImgAllowed && (Object.keys(QD).indexOf(img_key)<0 || (Object.keys(QD).indexOf(img_key)>=0 && QD[img_key]===''))){ + errorobj['EF_Qtn_Image']='Qtn_Image'; + showError(errorobj,true); + notify(`${ST.Pleaseaddimages} ${ST.In} ${window.PromoName}`,'SHORT'); + resolve(false);return; + }else{ + console.log('no condition found'); + } + + if((qtn.QuestionType=='Single choice list' || qtn.QuestionType=='Multi choice list' )){ + if (qtn.Answers && qtn.Answers.length>0){ + for(var j=0;j=0)){ + showImageTag=true; + } + } + } + } + + if(!isKPIIREnable && StoreCameraAllow && showImageTag && (Object.keys(QD).indexOf(img_key)<0 || (Object.keys(QD).indexOf(img_key)>=0 && QD[img_key]===''))){ + errorobj['EF_Qtn_Image']='Qtn_Image'; + showError(errorobj,true); + notify(`${ST.Pleaseaddimages} ${ST.In} ${window.PromoName}`,'SHORT'); + resolve(false);return; + } + } + else{ + // Don't validate field when disabled + } + } + } + + } + } + else{ + if(PromotionValidationRequired==true && isNAReasonEnable==true && ReasonId=='' ){ + errorobj['EF_NExistReason']="NExistReason"; + showError(errorobj,true); + notify(`${ST.Pleaseselectreasonfor} ${window.PromoName} `,'LONG'); + resolve(false);return; + } + else if(isNAReasonEnable==true && showOtherText==true && (wind.RemarkText==null || wind.RemarkText=='')){ + errorobj['EF_NExistRemark']="NExistRemark"; + showError(errorobj,true); + notify(`${ST.PleaseEnterRemarkFor} ${window.PromoName} `,'LONG'); + resolve(false);return; + } + else if(!isKPIIREnable && StoreCameraAllow && PromotionValidationRequired==true && isNAImageAvl==true && NAImage1=='' ){ + errorobj['EF_NExistImage']="NExistImage"; + showError(errorobj,true); + notify(`${ST.Pleaseclickimagefor} ${window.PromoName}`,'LONG'); + resolve(false);return; + } + } + // } + if(wi==(Windows.length-1)){ + if( isKPIIREnable && StoreCameraAllow && CameraIROnceOnly && !isAllNotPresent && ( WindowIRImages.current.length<=0 || GbTempSessionId.current=='') ){ + notify(`Please click Images for ${currentMenu.MenuName}`,'SHORT'); + resolve(false);return; + } + else{ + resolve(true);return; + } + + // resolve(true);return; + } + + } + + }).then((val)=>{return val}) + .catch((err)=>{console.log(err); return false}); + + } + + + function onselectionChange(option,keyLbl,keyVal,otherData){ + setErrorField({}); + setError(false); + let item=otherData.window; + let allData=WindowData; + let defData={'PromoId':item.PromoId,'PromoDefinitionId':item.PromoDefinitionId}; + const win_index=allData.findIndex(i=>i.PromoId==item.PromoId && i.PromoDefinitionId==item.PromoDefinitionId); + let wind=win_index>=0?(allData[win_index] || defData) : defData; + wind[keyVal]=option.value; + wind[keyLbl]=option.label; + + + if(keyLbl=='Reason'){ + let rsn_Index=reasons_list.findIndex(i=>i.ReasonId==option.value); + + if(rsn_Index>=0){ + let rsn=reasons_list[rsn_Index]; + let IsRemarkTaken=rsn.IsRemarkTaken==1 || rsn.IsRemarkTaken=='1'?true:false; + + if(IsRemarkTaken==true){ + wind['showOtherText']=true; + } + else{ + wind['showOtherText']=false; + } + } + } + + win_index>=0?allData[win_index]=wind:allData.push(wind); + + + let objIndex = InputChange.findIndex(i=>i.PromoId==item.PromoId && i.PromoDefinitionId==item.PromoDefinitionId); + let winArr=[...InputChange] + winArr[objIndex].Flag=true + + setInputChange(winArr) + // setWindowData(allData); + BgWindowData(allData); + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + + function onselectionChange2(option,qtn,window){ + setErrorField({}); + setError(false); + let allData=WindowData; + let defData={'PromoId':window.PromoId,'PromoDefinitionId':window.PromoDefinitionId}; + const wind_index=allData.findIndex(i=>i.PromoId==window.PromoId && i.PromoDefinitionId==window.PromoDefinitionId); + console.log('onselectionChange2 wind_index:',wind_index); + let wind=wind_index>=0?allData[wind_index]:defData; + let data=wind.WindowQA || {}; + let id_key=qtn.PromoQuestionId+'_AnswerId'; + let ans_key=qtn.PromoQuestionId+'_Answer'; + data[id_key]=option.value; + data[ans_key]=option.label; + + + wind['WindowQA']=data; + wind_index>=0?allData[wind_index]=wind:allData.push(wind); + + let objIndex = InputChange.findIndex(i=>i.PromoId==window.PromoId && i.PromoDefinitionId==window.PromoDefinitionId); + let winArr=[...InputChange] + winArr[objIndex].Flag=true + + setInputChange(winArr) + // setWindowData(allData); + BgWindowData(allData); + + let aq_ans=qtn.Answers!=null?qtn.Answers:[]; + let ans_obj=aq_ans.find(i=>i.AnswerId==option.value) || {}; + let EQtns=ans_obj.PromoaQuestionEnable!=null && ans_obj.PromoaQuestionEnable!=''?ans_obj.PromoaQuestionEnable.replace(' ','').split(','):[]; + let DQtns=ans_obj.PromoaQuestionDisable!=null && ans_obj.PromoaQuestionDisable!=''?ans_obj.PromoaQuestionDisable.replace(' ','').split(','):[]; + + let sqtns=window.WindowQuestions || [] + + if(EQtns.length>0){ + enableQtns(sqtns,EQtns,DQtns,data,wind,wind_index,allData,window) + } + else if(DQtns.length>0){ + disableQtns(sqtns,DQtns,data,wind,wind_index,allData,window) + } + else{ + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + BgUnsavedChanges(true) + + } + + async function disableQtns(sqtns,DQtns,data,wind={},wind_index=-1,allData=[],window={}){ + + if(DQtns.length>0){ + new Promise.all( + DQtns.map((qid,q_index)=>{ + let s_qtnindex=sqtns.findIndex(i=>i.PromoQuestionId==qid) || {}; + if(s_qtnindex>=0) + { + let s_qtn=sqtns[s_qtnindex]; + s_qtn['isDisabled']=true + sqtns[s_qtnindex]=s_qtn; + let id_key=s_qtn.PromoQuestionId+'_AnswerId'; + let ans_key=s_qtn.PromoQuestionId+'_Answer'; + data[id_key]=0; + data[ans_key]=''; + + wind['WindowQA']=data; + wind_index>=0?allData[wind_index]=wind:allData.push(wind); + } + return false + }) + ).then(async (val)=>{ + + let allwindows=Windows; + let windowIndex=allwindows.findIndex(i=>i.PromoDefinitionId==window.PromoDefinitionId && i.PromoId==window.PromoId) + if(windowIndex>0){ + window['WindowQuestions']=sqtns; + allwindows[windowIndex]=window; + // setWindowData(allData); + BgWindowData(allData); + setWindows(allwindows); + setGlobalWindows(allwindows); + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + else{ + setrerenderdata(!rerenderdata); + } + + }) + } + } + + async function enableQtns(sqtns,EQtns,DQtns,data,wind={},wind_index=-1,allData=[],window={}){ + new Promise.all( + EQtns.map((qid,q_index)=>{ + let s_qtnindex=sqtns.findIndex(i=>i.PromoQuestionId==qid) || {}; + if(s_qtnindex>=0){ + let s_qtn=sqtns[s_qtnindex]; + s_qtn['isDisabled']=false + sqtns[s_qtnindex]=s_qtn; + } + return false + }) + ).then(async (val)=>{ + if(DQtns.length>0){ + disableQtns(sqtns,DQtns,data,wind,wind_index,allData,window) + } + else{ + let allwindows=Windows; + let windowIndex=allwindows.findIndex(i=>i.PromoDefinitionId==window.PromoDefinitionId && i.PromoId==window.PromoId) + if(windowIndex>0){ + window['WindowQuestions']=sqtns; + allwindows[windowIndex]=window; + setWindows(allwindows); + setGlobalWindows(allwindows); + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + else{ + setrerenderdata(!rerenderdata); + } + } + }) + } + + async function setMultiSelectValue(selectedItems=[],qtn={},window={}) { + setErrorField({}); + setError(false); + console.log('setMultiSelectValue',selectedItems); + let id_key=qtn.PromoQuestionId+'_AnswerId'; + let ans_key=qtn.PromoQuestionId+'_Answer'; + let multi_key=qtn.PromoQuestionId+'_MultiOption'; + + let allData=WindowData; + let defData={'PromoId':window.PromoId,'PromoDefinitionId':window.PromoDefinitionId}; + const wind_index=allData.findIndex(i=>i.PromoId==window.PromoId && i.PromoDefinitionId==window.PromoDefinitionId); + let wind=wind_index>=0?allData[wind_index]:defData; + let obj=wind.WindowQA || {}; + obj[id_key]=0; + obj[multi_key]=selectedItems.join(','); + let anss=[]; + selectedItems.map((itemValue)=>{ + let ans = qtn.Answers.find(c1 => c1.AnswerId == itemValue); + if(ans.Answer){anss.push(ans.Answer)} + }); + obj[ans_key]=anss.join(','); + console.log('obj:',obj); + + wind['WindowQA']=obj; + wind_index>=0?allData[wind_index]=wind:allData.push(wind); + + + let objIndex = InputChange.findIndex(i=>i.PromoId==window.PromoId && i.PromoDefinitionId==window.PromoDefinitionId); + let winArr=[...InputChange] + winArr[objIndex].Flag=true + + setInputChange(winArr) + // setWindowData(allData); + BgWindowData(allData); + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + + function setTextValue(value,qtn,window,type='') { + setErrorField({}); + setError(false); + if(value!=''){ + let isValid=validateNumber(value,type); + if(!isValid){ + return; + } + } + + let id_key=qtn.PromoQuestionId+'_AnswerId'; + let ans_key=qtn.PromoQuestionId+'_Answer'; + + let allData=WindowData; + let defData={'PromoId':window.PromoId,'PromoDefinitionId':window.PromoDefinitionId}; + const wind_index=allData.findIndex(i=>i.PromoId==window.PromoId && i.PromoDefinitionId==window.PromoDefinitionId); + let wind=wind_index>=0?allData[wind_index]:defData; + let obj=wind.WindowQA || {}; + + if(qtn.QuestionType=='Date' ){ + let date_key=qtn.PromoQuestionId+'_Date'; + let d=value!=null?new Date(value):new Date(); + let mfdate=moment(d).format('MM/YYYY'); + showQtnDatePicker(qtn,window,false); + obj[id_key]=0; + obj[ans_key]=mfdate; + obj[date_key]=moment(d).format('MM/DD/YYYY'); + } + else{ + obj[id_key]=0; + obj[ans_key]=value; + } + + console.log(value,obj); + wind['WindowQA']=obj; + wind_index>=0?allData[wind_index]=wind:allData.push(wind); + + // setWindowData(allData); + BgWindowData(allData); + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + + function showQtnDatePicker(qtn,window,show=false){ + let allQtns=window.WindowQuestions || []; + let newqtnIndex=allQtns.findIndex(q=>q.PromoQuestionId==qtn.PromoQuestionId); + + if(newqtnIndex>=0){ + let newqtn=allQtns[newqtnIndex]; + newqtn.showDatePicker=show; + allQtns[newqtnIndex]=newqtn; + window['WindowQuestions']=allQtns; + let allWindows=Windows; + const winIndex=allWindows.findIndex(i=>i.PromoId==window.PromoId && i.PromoDefinitionId==window.PromoDefinitionId) || {}; + allWindows[winIndex]=window; + setWindows(allWindows); + setGlobalWindows(allwindows); + if(show==true) setrerenderdata(!rerenderdata); + } + } + + function setRatingValue(data){ + setRatingOrder(data); + } + + function onRatingCancel(){ + setShowRating(false); + } + + function onRatingSave(){ + setShowRating(false); + let qtn=RatingQtn; + let window=RatingWindow; + let id_key=qtn.PromoQuestionId+'_AnswerId'; + let ans_key=qtn.PromoQuestionId+'_Answer'; + let rating_key=qtn.PromoQuestionId+'_Rating'; + let ids=[],anss=[]; + RatingOrder.map((item,index)=>{ + ids.push(item.AnswerId); + anss.push(item.Answer); + }) + + let allData=WindowData; + let defData={'PromoId':window.PromoId,'PromoDefinitionId':window.PromoDefinitionId}; + const wind_index=allData.findIndex(i=>i.PromoId==window.PromoId && i.PromoDefinitionId==window.PromoDefinitionId); + let wind=wind_index>=0?allData[wind_index]:defData; + let obj=wind.WindowQA || {}; + + obj[rating_key]=ids.join(','); + obj[id_key]=0; + obj[ans_key]=anss.join(','); + + wind['WindowQA']=obj; + wind_index>=0?allData[wind_index]=wind:allData.push(wind); + + let objIndex = InputChange.findIndex(i=>i.PromoId==window.PromoId && i.PromoDefinitionId==window.PromoDefinitionId); + let winArr=[...InputChange] + winArr[objIndex].Flag=true + + setInputChange(winArr) + // setWindowData(allData); + BgWindowData(allData); + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + + function UpdateShow_zoomImageRef2(val){ + Show_zoomImageRef2.current=val + setShow_zoomImage2(val); + } + + + function onChoiceSelect(item,val,key,animatedChoice){ + + let win_index=InputChange.find(i=>i.PromoId==item.PromoId && i.PromoDefinitionId==item.PromoDefinitionId) + let changeValue=win_index.Flag; + + if(changeValue){ + setIsPresentClean(val) + setDataCleanAnim(animatedChoice) + setDataCleanItem(item) + setDataCleanModal(true) + return + } + + var val1=0; + val==1?val1=1:''; + + if(animatedChoice!=null){ + Animated.timing(animatedChoice, { + toValue: val1, + duration:400, + useNativeDriver:false, + }).start(); + } + onWindowDataChange(item,val,key) + } + + function onWindowDataChange(item,val,key){ + let allData=WindowData; + let defData={'PromoId':item.PromoId,'PromoDefinitionId':item.PromoDefinitionId}; + const win_index=allData.findIndex(i=>i.PromoId==item.PromoId && i.PromoDefinitionId==item.PromoDefinitionId); + let wind=win_index>=0?(allData[win_index] || defData) : defData; + wind[key]=val; + + if(key=='ReasonId'){ + let rsn=reasons_list.find(r=>r.ReasonId==val) || {}; + wind['Reason']=rsn.Reason || ''; + } + + win_index>=0?allData[win_index]=wind:allData.push(wind); + + if(key!="isPresent"){ + let objIndex = InputChange.findIndex(i=>i.PromoId==item.PromoId && i.PromoDefinitionId==item.PromoDefinitionId); + let winArr=[...InputChange] + winArr[objIndex].Flag=true + setInputChange(winArr) + } + // setWindowData(allData); + BgWindowData(allData); + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + + function onWindowDataClean(){ + if(DataCleanAnim!=null){ + console.log("anim---") + let anim=isPresentClean==1?1:''; + Animated.timing(DataCleanAnim, { + toValue:anim, + duration:400, + useNativeDriver:false, + }).start(); + } + let isPromoImage1=KPIFields.findIndex(i=>i.KPIFieldName=='PromoImage1') + let isPromoImage1KPIObj=isPromoImage1>=0?KPIFields[isPromoImage1]:{}; + let isPromoImage1MANDCOUNT=isPromoImage1>=0?isPromoImage1KPIObj['KPIMandatory']:1; + + let isPromoImage2=KPIFields.findIndex(i=>i.KPIFieldName=='PromoImage2') + let isPromoImage2KPIObj=isPromoImage2>=0?KPIFields[isPromoImage2]:{}; + let isPromoImage2MANDCOUNT=isPromoImage2>=0?isPromoImage2KPIObj['KPIMandatory']:1; + + let allData=WindowData; + let WindowSplits = []; + for(var s=0;si.PromoId==item.PromoId && i.PromoDefinitionId==item.PromoDefinitionId + + // let WindowQuestions = WQr['WindowQuestions'] || []; + // let WindowQA= WQr['WindowQA'] || {}; + // let WSd= isStockReq==true ? await getWindowStockData(data,storeData1,isPresent) : {'WStocks':[],'WStocksData':[]}; + // let WStocks=WSd['WStocks'] || []; + // let WStocksData=WSd['WStocksData'] || []; + // let isAllChecked=WSd['isAllChecked']!=null?WSd['isAllChecked']:0; + + // ,'WindowSplits':WindowSplits,'WindowQA':WindowQA,'WStocksData':WStocksData,'isAllSKUChecked':isAllChecked + + let defData={'PromoId':DataCleanItem.PromoId,'PromoDefinitionId':DataCleanItem.PromoDefinitionId,'WindowSplits':WindowSplits,'WindowQA':{},'WStocksData':[],isPresent:isPresentClean,'isAllSKUChecked':0}; + const win_index=allData.findIndex(i=>i.PromoId==DataCleanItem.PromoId && i.PromoDefinitionId==DataCleanItem.PromoDefinitionId); + allData[win_index]=defData + + let objIndex = InputChange.findIndex((obj => obj.PromoId == DataCleanItem.PromoId && obj.PromoDefinitionId==DataCleanItem.PromoDefinitionId)); + let winArr=[...InputChange] + winArr[objIndex].Flag=false + + setInputChange(winArr) + // setWindowData(allData); + BgWindowData(allData); + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setDataCleanModal(false) + setrerenderdata(!rerenderdata); + } + + const onCancelClean = () =>{ + setDataCleanModal(false) + } + const onclear = () => { + onWindowDataClean(DataCleanItem) + } + + async function setWindowStockVal(val,window,stockProd,key,type=''){ + setErrorField({}); + setError(false); + if(val!=''){ + let isValid=validateNumber(val,type); + if(!isValid){ + return; + } + } + + let allData=WindowData; + let defData={'PromoId':window.PromoId,'PromoDefinitionId':window.PromoDefinitionId}; + const win_index=allData.findIndex(i=>i.PromoId==window.PromoId && i.PromoDefinitionId==window.PromoDefinitionId); + let wind=win_index>=0?(allData[win_index] || defData) : defData; + let WStocksData=wind['WStocksData'] || []; + let sdIndex=WStocksData.findIndex(i=> i.ProductId==stockProd.PromoStockValue); + let sd=sdIndex>=0?WStocksData[sdIndex]:{'ProductId':stockProd.PromoStockValue,'Stock':''}; + sd[key]=val; + sdIndex>=0?WStocksData[sdIndex]=sd:WStocksData.push(sd); + wind['WStocksData']=WStocksData; + win_index>=0?allData[win_index]=wind:allData.push(wind); + if(key=='isPromoPresent'){ + let isAllChecked = await verifyAllChecked(val,window,stockProd,key); + wind['isAllSKUChecked']=isAllChecked; + } + + // setWindowData(allData); + BgWindowData(allData); + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata4(!rerenderdata4); + } + + async function onCatTextChange(window,key,val,type=''){ + setErrorField({}); + setError(false); + if(val!=''){ + let isValid=validateNumber(val,type); + if(!isValid){ + return; + } + } + + let item=window; + let allData=WindowData; + let defData={'PromoId':item.PromoId,'PromoDefinitionId':item.PromoDefinitionId}; + const win_index=allData.findIndex(i=>i.PromoId==item.PromoId && i.PromoDefinitionId==item.PromoDefinitionId); + let wind=win_index>=0?(allData[win_index] || defData) : defData; + wind[key]=val; + + win_index>=0?allData[win_index]=wind:allData.push(wind); + // setWindowData(allData); + BgWindowData(allData); + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + + + async function verifyAllChecked(val,window,stockProd,key){ + return await new Promise((resolve,reject)=>{ + let WindowStocks=window.WindowStocks || []; + let allData=WindowData; + const win_index=allData.findIndex(i=>i.PromoId==window.PromoId && i.PromoDefinitionId==window.PromoDefinitionId); + let wind=win_index>=0?(allData[win_index] || defData) : defData; + let WStocksData=wind['WStocksData'] || []; + if(WindowStocks.length>0){ + let isAllChecked=1; + for(var i=0;i a.ProductId==stockProd.PromoStockValue); + let sd1=sdIndex1>=0?WStocksData[sdIndex1]:{}; + let isPromoPresent=sd1.isPromoPresent; + if(isPromoPresent==null || isPromoPresent=='' || isPromoPresent==0 || isPromoPresent=='0'){ + isAllChecked=0 + } + + if(i==WindowStocks.length-1){ + resolve(isAllChecked); + } + } + } + else{ + resolve(0); + } + + }).catch((err)=>{ + console.log(err); + return 0; + }); + } + + function checkAllSKUs(val,window){ + + let WindowStocks=window.WindowStocks || []; + let allData=WindowData; + let defData={'PromoId':window.PromoId,'PromoDefinitionId':window.PromoDefinitionId}; + const win_index=allData.findIndex(i=>i.PromoId==window.PromoId && i.PromoDefinitionId==window.PromoDefinitionId); + let wind=win_index>=0?(allData[win_index] || defData) : defData; + let WStocksData=wind['WStocksData'] || []; + console.log('WStocksData before:',WStocksData) + for(var i=0;i a.ProductId==stockProd.PromoStockValue); + let sd=sdIndex>=0?WStocksData[sdIndex]:{'ProductId':stockProd.PromoStockValue,'Stock':''}; + let isPromoPresent=(val==1 || val=='1')?1:0; + sd['isPromoPresent']=isPromoPresent; + + sdIndex>=0?(WStocksData[sdIndex]=sd):(WStocksData.push(sd)); + } + + + wind['WStocksData']=WStocksData; + wind['isAllSKUChecked']=val==1?1:0; + console.log('wind updated'); + win_index>=0?allData[win_index]=wind:allData.push(wind); + + // setWindowData(allData); + BgWindowData(allData); + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + + function onSaveCancel(){ + setShowAlert(false); + } + + + + function openImageRefView(windowIndex=0){ + setrefImageIndex(windowIndex); + setShow_zoomImage(true); + } + + function openImageRefView2(ImageIndex=0,wind_index,Type='2'){ + if(Type=='1'){ + let wind=Windows[wind_index]; + const windDataIndex=WindowData.findIndex(i=>i.PromoId==wind.PromoId && i.PromoDefinitionId==wind.PromoDefinitionId) ; + const windData=windDataIndex>=0?windData[windDataIndex]:{}; + let zoomIRImages=windData.zoomIRImages!=null && windData.zoomIRImages!=""? windData.zoomIRImages:[]; + setZoomImageUrl2(zoomIRImages); + } + setrefImageIndex2(ImageIndex); + UpdateShow_zoomImageRef2(true); + } + + function FilterStores(searchedQry){ + searchedQry=searchedQry.toLowerCase(); + console.log('searchedQry',searchedQry); + let arr=[]; + let newWindows=[]; + if(searchedQry!=null && searchedQry!=''){ + + for(let i=0;i + + {ST.DragItemsInOrder} + {ST.Pressandholdtodrag} + {setRatingValue(data)}} + keyExtractor={(item) => item.AnswerId} + renderItem={renderItem} + /> + + {onRatingCancel()}}> + {ST.Cancel} + + {onRatingSave()}}> + {ST.Save} + + + + + ) + } + + function render_Picker(label_key,value_key,onChange=()=>{},selected_data={},errorStyle={}){ + var data=[]; + let qtn=selected_data.qtn || {}; + let window=selected_data.window || {}; + let isQtnDisabled=qtn.isDisabled!=null || qtn.isDisabled!=''?false:true; + let allAnswers=qtn.Answers || []; + + allAnswers.map((item,index)=>{ + let obj={ key: index, label: item[label_key],value:item[value_key] }; + if(selected_data.value==item[label_key]) + obj['component']= {item[label_key]}; + data.push(obj); + }); + + return ( + {onChange(option,qtn,window) }} + overlayStyle={customStyle.addVisPickerOverlay} + cancelContainerStyle={customStyle.addVisPicker_OptionContainerStyle} + optionStyle={customStyle.addvis_opStyle} + optionTextStyle={customStyle.addvis_opTextStyle} + optionContainerStyle={customStyle.addVisPicker_OptionContainerStyle} + selectedKey={'1'} + disabled={isQtnDisabled} + > + {(selected_data.value!=null && selected_data.value!=''?selected_data.value: '-'+ST.select+'-')} + + ) + } + + function renderDatePicker(qtn,window){ + let qtnn=qtn; + let DateRange=qtn.DateRange; + let maxDate=moment().add(10,'years').format('MM/DD/YYYY'); + let minDate=moment().subtract(10,'years').format('MM/DD/YYYY'); + if(DateRange=='RFD'){ + maxDate=moment().format('MM/DD/YYYY'); + } + else if(DateRange=='RPD'){ + minDate=moment().format('MM/DD/YYYY'); + } + + return ( + {setTextValue(selectedDate,qtnn,window)}} + maximumDate={new Date(maxDate)} + minimumDate={new Date(minDate)} + /> + ); + } + + async function OpenImgModal(imgPath,window,splitItem,splitItemIndex,cameraType){ + setSelectedImg(imgPath) + setShowModal(true); + if((imgPath!='' && imgPath!=null)){ + setShowImageSaveOp(false); + } + else{ + setShowImageSaveOp(true); + } + setReCapImgModalObj({window,splitItem,splitItemIndex,cameraType}) + // _OpenCaptureImage_Modal(imgPath,window,splitItem,splitItemIndex,cameraType) + + } + + function cancelImage(){ + // setImage1(''); + setSelectedImg(''); + setReCapImgModalObj({}) + setShowModal(false); + } + + async function getIRZoomImages(IRCamImages){ + return new Promise((resolve,reject)=>{ + let z_images=[]; + for(let ci in IRCamImages){ + let img=IRCamImages[ci]; + let img_obj={imgIndex:(ci+1),url: img.ImagePath, props: {}} + + z_images.push(img_obj); + if(ci==IRCamImages.length-1){ + resolve(z_images) + } + } + }).catch((err)=>{ + console.log(err); + return []; + }) + } + + async function StartCameraSession(wind,type='1'){ + // type: 1 or 2 , 1: Camera enabled for each window header ,2 : Camera enabled for once in KPI + let IR_Creds=props.IR_Creds!=null && props.IR_Creds!=""?JSON.parse(props.IR_Creds):[]; + let IR_CredsObj=IR_Creds.length>0?IR_Creds[0]:{}; + + wind=wind!=null?wind:{}; + let newStdata=storeData; + if(IR_CredsObj.UseStoreCode!=1){ + newStdata.StoreCode=newStdata.StoreId; + } + let obj={"StoreData":newStdata}; + + // Option values for Perfetti paid visibility if IR shown in header only + // obj["category_name"]="multi"; + // obj["task_name"]="paid-visibility-displays"; + // obj["photo_type"]="paid-visibility"; + let task_name=windIRParams.task_name+" "+currentMenu.MenuId+" "+wind?.PromoDefinitionId; + obj["category_name"]=windIRParams.category_name || ''; + obj["task_name"]=task_name; + obj["photo_type"]=windIRParams.photo_type || ''; + + let st1=JSON.stringify(obj); + let TempSessionId= await IRLogin.StartIRSession(st1); + console.log(' StartCameraSession TempSessionId,task_name:',TempSessionId,",",task_name); + if(TempSessionId!=null){ + setLoaderTitle('Processing Image...'); + setProcessing(true); + let IRCamImages=await IRLogin.getImageURIFromIRSession(TempSessionId); + console.log('Images from session :',IRCamImages); + + if(type=='2'){ //set global IR images and session id if Camera is shown only once in header for KPI Screen + // setGbTempSessionId(TempSessionId); + GbTempSessionId.current=TempSessionId; + let sessObj={} + sessObj['Sess_StoreCode'] =newStdata.StoreCode; + sessObj['Sess_TaskName'] =obj["task_name"]; + sessObj['Sess_CatName'] =obj["category_name"]; + sessObj['Sess_PhotoType'] =obj["photo_type"]; + GbTempSessionObj.current=sessObj; + WindowIRImages.current=IRCamImages; + setIRZoomImages(IRCamImages); + } + else{ //set category wise IR images and session id if Camera is shown for each window + let zoomIRImages=await getIRZoomImages(IRCamImages) + + let allData=WindowData; + let defData={'PromoId':wind.PromoId,'PromoDefinitionId':wind.PromoDefinitionId}; + const win_index=allData.findIndex(i=>i.PromoId==wind.PromoId && i.PromoDefinitionId==wind.PromoDefinitionId); + let windData=win_index>=0?(allData[win_index] || defData) : defData; + windData['IRImages'] =IRCamImages; + windData['zoomIRImages'] =zoomIRImages; + windData['TempSessionId'] =TempSessionId; + windData['Sess_StoreCode'] =newStdata.StoreCode; + windData['Sess_TaskName'] =obj["task_name"]; + windData['Sess_CatName'] =obj["category_name"]; + windData['Sess_PhotoType'] =obj["photo_type"]; + win_index>=0?allData[win_index]=windData:allData.push(windData); + WindowIRImages.current=IRCamImages; + + // setWindowData(allData); + BgWindowData(allData); + } + + // setHasUnsavedChanges(true); + BgUnsavedChanges(true); + setrerenderdata(!rerenderdata); + + // stop image processing loader after all images get from sessionID + setProcessing(false); + setLoaderTitle('loading...'); + + } + else{ + notify('Cannot capture images as getting Session Null.'); + } + + } + + + async function ResumeCameraSession(wind,type='1'){ + // type: 1 or 2 , 1: Camera enabled for each window header ,2 : Camera enabled for once in KPI + wind=wind!=null?wind:{}; + let allData=WindowData; + let defData={'PromoId':wind.PromoId,'PromoDefinitionId':wind.PromoDefinitionId}; + const win_index=allData.findIndex(i=>i.PromoId==wind.PromoId && i.PromoDefinitionId==wind.PromoDefinitionId); + let windData=win_index>=0?(allData[win_index] || defData) : defData; + + // Resume Temp Session Id + let TempSessionId=""; + if(type=='2'){ + TempSessionId= GbTempSessionId.current; + } + else{ + TempSessionId= windData.TempSessionId; + } + console.log('TempSessionId of wind :',TempSessionId); + if(TempSessionId!=null){ + setLoaderTitle('Processing Image...'); + setProcessing(true); + let retTempSessionId=await IRLogin.ResumeIRSession(TempSessionId); + console.log('retTempSessionId :',retTempSessionId); + if(retTempSessionId!=null){ + // start fetching images after capturing photos + + let IRCamImages=await IRLogin.getImageURIFromIRSession(TempSessionId); + console.log('Images from session :',IRCamImages); + + if(type=='2'){ + // setWindowIRImages(IRCamImages); + WindowIRImages.current=IRCamImages + setIRZoomImages(IRCamImages); + } + else{ + let zoomIRImages=await getIRZoomImages(IRCamImages) + windData['IRImages'] =IRCamImages; + windData['zoomIRImages'] =zoomIRImages; + win_index>=0?allData[win_index]=windData:allData.push(windData); + // setWindowData(allData); + BgWindowData(allData); + } + // setHasUnsavedChanges(true); + BgUnsavedChanges(true); + setrerenderdata(!rerenderdata); + + // stop image processing loader after all images get from sessionID + setProcessing(false); + setLoaderTitle('loading...'); + } + else{ + notify('Cannot capture images as getting Session Null.'); + } + + } + else{ + notify('Cannot capture images as getting Session Null.'); + } + + } + + function _OpenCaptureImage_Modal(img){ + + const isImageCap=(img!='' || img!=null)?true:false; + + let {window,splitItem,splitItemIndex,cameraType}=reCapImgModalObj + let camera2Label=window!=null && window.PromoImage1Lable!=null?window.PromoImage1Lable:''; + return ( + + { + isImageCap && + + + + + + {openCamera(window,splitItem,splitItemIndex,cameraType)}}> + + + + {!showImageSaveOp && + {cancelImage()}}> + + {ST.Close} + + } + + } + + ) + } + + async function DeleteIRPhoto(){ + console.log('DeleteIRPhoto called'); + setshowRetakeModal(false); + let {wind,type,IRImgIndex,IRimgPath}= retakeMData; + // type: 1 or 2 , 1: Camera enabled for each window header ,2 : Camera enabled for once in KPI + + wind=wind!=null?wind:{}, + type=type!=null?type:'1'; + IRImgIndex=IRImgIndex!=null?IRImgIndex:''; + IRimgPath=IRimgPath!=null?IRimgPath:''; + + + let allData=WindowData; + let defData={'PromoId':wind.PromoId,'PromoDefinitionId':wind.PromoDefinitionId}; + const win_index=allData.findIndex(i=>i.PromoId==wind.PromoId && i.PromoDefinitionId==wind.PromoDefinitionId); + let windData=win_index>=0?(allData[win_index] || defData) : defData; + + let TempSessionId=""; + if(type=='2'){ + TempSessionId=GbTempSessionId.current; + } + else{ + TempSessionId=windData['TempSessionId']; + } + + console.log('DeleteIRPhoto sessionID :',TempSessionId); + if(TempSessionId!=null || TempSessionId!=''){ + setLoaderTitle('Removing Image...'); + setProcessing(true); + let isDeleted= await IRLogin.DeleteIRSessionPhoto(TempSessionId,IRimgPath);//"8099b819-0979-40d2-950e-489566041484";// + console.log('DeleteIRPhoto isDeleted :',isDeleted); + if(isDeleted){ + setLoaderTitle('Processing Image...'); + + let IRCamImages=await IRLogin.getImageURIFromIRSession(TempSessionId); + console.log('Deleted, Images from session :',IRCamImages); + if(type=='2'){ + // setWindowIRImages(IRCamImages); + WindowIRImages.current=IRCamImages; + setIRZoomImages(IRCamImages); + } + else{ + let zoomIRImages=await getIRZoomImages(IRCamImages) + windData['IRImages'] =IRCamImages; + windData['zoomIRImages'] =zoomIRImages; + win_index>=0?allData[win_index]=windData:allData.push(windData); + // setWindowData(allData); + BgWindowData(allData); + } + + // setHasUnsavedChanges(true); + BgUnsavedChanges(true); + setrerenderdata(!rerenderdata); + + // stop image processing loader after all images get from sessionID + setProcessing(false); + setLoaderTitle('loading...'); + + } + else{ + notify('Cannot delete photo!.'); + } + + } + else{ + notify('Cannot delete photo! Found Null Session.'); + } + + } + + async function RetakeIRPhoto(){ + setshowRetakeModal(false); + let {wind,type,IRImgIndex,IRimgPath}= retakeMData; + // type: 1 or 2 , 1: Camera enabled for each window header ,2 : Camera enabled for once in KPI + + wind=wind!=null?wind:{}, + type=type!=null?type:'1'; + IRImgIndex=IRImgIndex!=null?IRImgIndex:''; + IRimgPath=IRimgPath!=null?IRimgPath:''; + + + let allData=WindowData; + let defData={'PromoId':wind.PromoId,'PromoDefinitionId':wind.PromoDefinitionId}; + const win_index=allData.findIndex(i=>i.PromoId==wind.PromoId && i.PromoDefinitionId==wind.PromoDefinitionId); + let windData=win_index>=0?(allData[win_index] || defData) : defData; + + let TempSessionId=""; + if(type=='2'){ + TempSessionId=GbTempSessionId.current; + } + else{ + TempSessionId=windData['TempSessionId']; + } + + console.log('Retake sessionID :',TempSessionId); + if(TempSessionId!=null || TempSessionId!=''){ + setLoaderTitle('Processing Image...'); + setProcessing(true); + let isRetakeDone= await IRLogin.RetakeIRSessionPhoto(TempSessionId,IRimgPath); + console.log('Retake isRetakeDone :',isRetakeDone); + if(isRetakeDone){ + setTimeout(async ()=>{ + let IRCamImages=await IRLogin.getImageURIFromIRSession(TempSessionId); + console.log('Retake Images from session :',IRCamImages); + if(type=='2'){ + // setWindowIRImages(IRCamImages); + WindowIRImages.current=IRCamImages; + setIRZoomImages(IRCamImages); + } + else{ + let zoomIRImages=await getIRZoomImages(IRCamImages) + windData['IRImages'] =IRCamImages; + windData['zoomIRImages'] =zoomIRImages; + win_index>=0?allData[win_index]=windData:allData.push(windData); + // setWindowData(allData); + BgWindowData(allData); + } + // setHasUnsavedChanges(true); + BgUnsavedChanges(true); + setrerenderdata(!rerenderdata); + + // stop image processing loader after all images get from sessionID + setProcessing(false); + setLoaderTitle('loading...'); + },1000); + + } + else{ + notify('Error occur while retaking photo!.'); + } + + } + else{ + notify('Cannot start camera! Found Null Session.'); + } + + } + //start IR functions + function openRetakeOp(wind, type='1',IRImgIndex,IRimgPath){ + let data={'wind':wind,'type':type,'IRImgIndex':IRImgIndex,'IRimgPath':IRimgPath}; + setretakeMData(data); + setshowRetakeModal(true); +} + + function closeRetakeOp(){ + setretakeMData({}) + setshowRetakeModal(false); + } + + function _render_RetakePopup(){ + return ( + + + {RetakeIRPhoto()}}> + + + Retake + + + {DeleteIRPhoto()}}> + + + Delete + + + {closeRetakeOp()}}> + + + Cancel + + + + + + + + ) + } + + function _render_UploadAlert(){ + return ( + + + {setshowUploadAlert(false)}}> + Cancel + + {UploadIRSessions()}}> + Yes + + + + ) + } + + function _renderIRCamera(wind,IRImages,TempSessionId,type='1',wind_index=''){ + + let isSaveDisabled=(isDataUploaded=='U' || isDataUploaded=='P'); + let isResumeDisabled=(TempSessionId==null || TempSessionId=='' || TempSessionId=='undefined' || isSaveDisabled==true); + + return ( + + + {`Capture ${currentMenu.MenuName} Images`} + + + + { (IRImages!=null && IRImages.length>0) && + IRImages.map((IRImg,IRImgIndex)=>{ + let IRimgPath=IRImg.ImagePath; + return( + {openImageRefView2(IRImgIndex,wind_index,type)}}> + {(IRimgPath!=null && IRimgPath!='') && } + {(IRimgPath==null || IRimgPath=='') && } + {openRetakeOp(wind,type,IRImgIndex,IRimgPath)}}> + + + + ); + }) + + } + + + {StartCameraSession(wind,type)}}> + + Start Session + + {ResumeCameraSession(wind,type)}} > + + Resume Session + + + + + ) + } + + function _renderWindow(){ + let RemarkEnableIndex=KPIFields.findIndex(i=>i.KPIFieldName=='RemarkEnable') + let RemarkEnableKPIObj=RemarkEnableIndex>=0?KPIFields[RemarkEnableIndex]:{}; + let RemarkEnable=RemarkEnableIndex>=0?RemarkEnableKPIObj['KPIFieldEnable']:false; + + let isListedSKUIndex=KPIFields.findIndex(i=>i.KPIFieldName=='ListedSKUCheckbox'); + let isListedSKUKPIObj=isListedSKUIndex>=0?KPIFields[isListedSKUIndex]:{}; + let isListedSKUEnable=isListedSKUIndex>=0?isListedSKUKPIObj['KPIFieldEnable']:true; + + let HidePresentYesNoIndex=KPIFields.findIndex(i=>i.KPIFieldName=='HidePresentYesNo'); + let HidePresentYesNoObj=HidePresentYesNoIndex>=0?KPIFields[HidePresentYesNoIndex]:{}; + let HidePresentYesNoEn=HidePresentYesNoIndex>=0?HidePresentYesNoObj['KPIFieldEnable']:false; + let HidePresentYesNoEnable=HidePresentYesNoEn==1 || HidePresentYesNoEn=="1" || HidePresentYesNoEn==true?true:false; + + let isKPIIREnableI=KPIFields.findIndex(i=>i.KPIFieldName=='IR_KPIEnable') + let isKPIIREnableObj=isKPIIREnableI>=0?KPIFields[isKPIIREnableI]:{}; + let isKPIIREnable=isKPIIREnableI>=0?isKPIIREnableObj['KPIFieldEnable']:false; + + let CameraIROnceOnlyIndex=KPIFields.findIndex(i=>i.KPIFieldName=='IR_CameraOnceOnly') + let CameraIROnceOnlyObj=CameraIROnceOnlyIndex>=0?KPIFields[CameraIROnceOnlyIndex]:{}; + let CameraIROnceOnly=CameraIROnceOnlyIndex>=0?CameraIROnceOnlyObj['KPIFieldEnable']:true; + + + return ( + `window_${index.toString()}`} + renderItem={({item,index})=>{ + const window=item; + let windowIndex=index; + + let isImage1=window.PromoImage1=='true' || window.PromoImage1==1?1:0; + let isImage2=window.PromoImage2=='true' || window.PromoImage2==1?1:0; + let isNAImageAvl=window.PromoNotExistCamera=='true' || window.PromoNotExistCamera==1?1:0; + let isNAReasonEnable=window.PromoNotExistReasonEnable=='true' || window.PromoNotExistReasonEnable==1? 1:0; + let isReasonEnable=window.PromoExistReasonEnable=='true' || window.PromoExistReasonEnable==1? 1:0; + let isStockReq=window.PromoElementStockRequired=='true' || window.PromoElementStockRequired==1?1:0; + let StockQtyRequired=window.StockQtyRequired=='true' || window.StockQtyRequired==1?1:0; + let PromoTitleEnable=window.PromoDefinitionTitleEnable=='true' || window.PromoDefinitionTitleEnable==1? 1:0; + let PromoTitle=window.PromoDefinitionTitle!=null && window.PromoDefinitionTitle!='undefined'? window.PromoDefinitionTitle:""; + let PromoRefImagePopUp=window.PromoRefImagePopUp=='true' || window.PromoRefImagePopUp==true? true:false; + + // let isStock_CheckAssrt=window.PromoElementCheckAssortment=='true' || window.PromoElementCheckAssortment==1?1:0; + let RefImage=window.PromoRefImage; + let camera1Label=window.PromoImage1Lable || ''; + let camera2Label=window.PromoImage2Lable || ''; + let WindowQuestions=window.WindowQuestions || []; + let WindowStocks=window.WindowStocks || []; + + let isVisible=Boolean(ItemsInView.find(({item:i,isViewable}) => i.PromoId==window.PromoId && i.PromoDefinitionId==window.PromoDefinitionId && isViewable)) + + // const wind=WindowData.find(i=>i.PromoId==window.PromoId && i.PromoDefinitionId==window.PromoDefinitionId); + const wind_I=WindowData.findIndex(i=>i.PromoId==window.PromoId && i.PromoDefinitionId==window.PromoDefinitionId); + const wind=wind_I!=null && wind_I>=0?WindowData[wind_I]:{}; + let isPresent=wind.isPresent!=null && wind.isPresent!=''?wind.isPresent:'0'; + let ReasonId=wind.ReasonId!=null?wind.ReasonId:''; + let Reason=wind.Reason!=null?wind.Reason:''; + let showOtherText=wind.showOtherText!=null?wind.showOtherText:false; + let RemarkText=wind.RemarkText!=null?wind.RemarkText:''; + let NAImage1=wind.NAImage1!=null?wind.NAImage1:''; + let NAImage1Path=wind.NAImage1Path!=null?wind.NAImage1Path:''; + let remark=wind.remark!=null?wind.remark:''; + let WindowSplits=wind.WindowSplits || []; + let QuestionsData=wind.WindowQA || {}; + let WStocksData=wind.WStocksData || []; + let isAllSKUChecked=wind.isAllSKUChecked==1 || wind.isAllSKUChecked=="1"; + + let windIRImages=wind['IRImages']!=null?wind['IRImages'] : [] ; + let TempSessionId= wind.TempSessionId!=null?wind.TempSessionId:''; + + // console.log('camera2Label:',window.PromoId,window.PromoDefinitionId,camera2Label);\ + var xpos=(isPresent=='1'||isPresent==1)?-75:0; + if(window.animatedChoice!=null ){ + xpos=window.animatedChoice.interpolate({ + inputRange:[0,1], + outputRange:[0,-75], + }); + } + + if(isVisible && window.animatedHeight!=null){ + setTimeout(()=>{ + Animated.timing(window.animatedHeight, { + toValue: 0, + duration: 800, + useNativeDriver: false, + }).start(); + },(props.RefImagePopUpTime||0)*1000) + } + let EF_Window=errorfield.EF_Window!=null ?errorfield.EF_Window:{}; + let show_errorhere=error==true && EF_Window.PromoId==window.PromoId && EF_Window.PromoDefinitionId==window.PromoDefinitionId; + // if not Present fields + + // this will show error field in red (if window is present and exist reason is enabled and not filled ) or (if window is not present and Not exist reason is enabled and not filled ) + let EF_NExistReason=errorfield.EF_NExistReason || ''; + let EStyle_NExistReason=show_errorhere && EF_NExistReason=='NExistReason'?customStyle.stk_inptSTyle_error:{}; + + let EF_NExistRemark=errorfield.EF_NExistRemark || ''; + let EStyle_NExistRemark=show_errorhere && EF_NExistRemark=='NExistRemark'?customStyle.stk_inptSTyle_error:{}; + + let EF_NExistImage=errorfield.EF_NExistImage || ''; + let EStyle_NExistImage=show_errorhere && EF_NExistImage=='NExistImage'?customStyle.error_CatImage2:{}; + + + + return( + + + + {window.PromoName} + { + window && window.ChildName !="" && {window.ChildName} + } + + {(PromoTitleEnable==1 && PromoTitle!=null && PromoTitle!='') && {PromoTitle}} + {openImageRefView(index)}}> + + + + + { PromoRefImagePopUp && + + + } + + + + {!HidePresentYesNoEnable && + + {ST.IsPresent} + + + + {onChoiceSelect(window,1,'isPresent',window.animatedChoice)}}> + {ST.Yes} + + {onChoiceSelect(window,0,'isPresent',window.animatedChoice)}}> + {ST.No} + + + + + } + {((isPresent!='1' && isNAReasonEnable==true) || (isPresent=='1' && isReasonEnable==true)) && + + {ST.SelectReason} + {} + + } + {isPresent!='1' && showOtherText==true && + + {ST.EnterRemark} + {onCatTextChange(window,'RemarkText',val,'text')}} + /> + + } + + + {(isPresent!='1' && isNAImageAvl==true) && + + + + {ST.CaptureImage} + + + {/* { _renderIRCamera(window,windIRImages,TempSessionId,'1',windowIndex)} */} + + + + { (NAImage1Path=='' || NAImage1Path==null) && + {openCamera(window,{},0,'1','3')}}> + + + } + { (NAImage1Path!='' && NAImage1Path!=null) && + + + {openCamera(window,{},0,'1','3')}}> + + + + } + + + + + + } + + {(isPresent=='1') && + + + { isKPIIREnable && !CameraIROnceOnly && + _renderIRCamera(window,windIRImages,TempSessionId,'1',windowIndex)} + + {(isStockReq==true && WindowStocks.length>0) && + + + {(isListedSKUEnable==true?ST.SelectProducts:'Enter Stocks')} + + + {isListedSKUEnable==true && + + {checkAllSKUs((isAllSKUChecked==1?0:1),window)}}> + {let val1=(val==true)?1:0; checkAllSKUs(val1,window) }} + style={[customStyle.WStkHdr_checkbox,(Platform.OS=='ios'?{height:20,width:20,marginLeft:5}:{})]} + tintColors={{ true:PageTheme.$primary_color, false:PageTheme.$text_color_light }} + /> + {ST.SelectAll} + + } + `wstock_${index.toString()}`} + renderItem={({item,index})=>{ + let stockProd=item; + let stockProdIndex=index; + let sd=WStocksData.find(i=> i.ProductId==stockProd.PromoStockValue) || {}; + let stock=sd.Stock!=null?sd.Stock:''; + let isPromoPresent=sd.isPromoPresent!=null?sd.isPromoPresent:0; + + // highlight prd errors + let EF_stockProd=errorfield.EF_stockProd!=null?errorfield.EF_stockProd:{}; + let showPrdErrHere=EF_stockProd.PromoStockDefinitionId==stockProd.PromoStockDefinitionId; + + let EF_stock=errorfield.EF_stock || ''; + let EStyle_StockInput=show_errorhere && showPrdErrHere && EF_stock=='input1_'?customStyle.stk_inptSTyle_error:{}; + + + + return( + + {isListedSKUEnable!=true && {stockProd.ProductName} } + {isListedSKUEnable==true && + + {let val1=(val==true)?1:0; setWindowStockVal(val1,window,stockProd,'isPromoPresent') }} + style={[customStyle.WStkHdr_checkbox,(Platform.OS=='ios'?{height:20,width:20,marginTop:5,marginLeft:5,}:{})]} + tintColors={{ true:PageTheme.$primary_color, false:PageTheme.$text_color_light }} + /> + + {stockProd.ProductName} + } + {((isListedSKUEnable==true && StockQtyRequired==1 && isPromoPresent==1 ) || isListedSKUEnable!=true) && + + + + Stock + + + + {inputRefs.current['input1_'+stockProd.PromoDefinitionId+'_'+stockProd.PromoStockDefinitionId]=reff;}} + style={[customStyle.WStkInputStyle,EStyle_StockInput]} + placeholder="" + autoComplete='off' + placeholderTextColor={PageTheme.$placeholder_color} + keyboardType={'number-pad'} + returnKeyType={(Platform.OS==='ios')?'done':'next'} + blurOnSubmit={false} + value={stock+''} + onSubmitEditing={()=>{focusToNext(WindowStocks,windowIndex,stockProd,index)}} + onChangeText={(val)=>{setWindowStockVal(val,window,stockProd,'Stock','numeric')}} + /> + + + + } + + ); + }} + /> + + } + {(!isKPIIREnable &&( window.NoOfSplit>0 && WindowSplits.length>0 && (isImage1==1 || isImage2==1))) && + + + {ST.CapturePromotionImages} + + `spliItem_${index.toString()}`} + renderItem={({item,index})=>{ + let splitItem=item; + let splitItemIndex=index; + let Image1Name=splitItem['Image1Name']!=null && splitItem['Image1Name']!=''?splitItem['Image1Name']:''; + let Image2Name=splitItem['Image2Name']!=null && splitItem['Image2Name']!=''?splitItem['Image2Name']:''; + let Image1=splitItem['Image1']!=null && splitItem['Image1']!=''?splitItem['Image1']:''; + let Image2=splitItem['Image2']!=null && splitItem['Image2']!=''?splitItem['Image2']:''; + let isImg1mad=splitItem['img1Required'] || false; + let isImg2mad=splitItem['img2Required'] || false; + + + // highlight split image box + let EF_splitItemIndex=errorfield.EF_splitItemIndex || ''; + let showSplitItemErrHere=EF_splitItemIndex==splitItemIndex; + + let EF_splitImage1=errorfield.EF_splitImage1 || ''; + let EStyle_splitImage1=show_errorhere && showSplitItemErrHere && EF_splitImage1=='splitImage1'?customStyle.error_CatImage2:{}; + + let EF_splitImage2=errorfield.EF_splitImage2 || ''; + let EStyle_splitImage2=show_errorhere && showSplitItemErrHere && EF_splitImage2=='splitImage2'?customStyle.error_CatImage2:{}; + + + return( + + + {isImage1==1 && + + + {((Image1=='' || Image1==null) && isImg1mad) ? + {openCamera(window,splitItem,splitItemIndex,'1')}}> + + : (Image1=='' || Image1==null ) ? + {openCamera(window,splitItem,splitItemIndex,'1')}}> + + :(Image1!='' || Image1!=null ) ? + {OpenImgModal(Image1,window,splitItem,splitItemIndex,'1')}}> + + : null + } + + {camera1Label} + + } + + {isImage2==1 && + + + {((Image2=='' || Image2==null) && isImg2mad) ? + {openCamera(window,splitItem,splitItemIndex,'2')}}> + + : (Image2=='' || Image2==null ) ? + {openCamera(window,splitItem,splitItemIndex,'2')}}> + + :(Image2!='' || Image2!=null ) ? + {OpenImgModal(Image2,window,splitItem,splitItemIndex,'2')}}> + + : null + } + {camera2Label} + + } + + ); + }} + /> + + } + + {(WindowQuestions.length>0) && + 0 && WindowSplits.length>0 && (isImage1==1 || isImage2==1)))?customStyle.openStk_prd_borderT3:{}),customStyle.mb10]}> + + {ST.PromotionQuestions} + + {WindowQuestions.map((item,index)=>{ + + let qtn=item; + let qtnIndex=index; + let selansid='',selanswer='',selimg='',showImageTag=false; + let id_key=qtn.PromoQuestionId+'_AnswerId'; + let ans_key=qtn.PromoQuestionId+'_Answer'; + let multi_key=qtn.PromoQuestionId+'_MultiOption'; + let date_key=qtn.PromoQuestionId+'_Date'; + let img_key=qtn.PromoQuestionId+'_ImagePath1'; + let imgname_key=qtn.PromoQuestionId+'_ImageName1'; + let rating_key=qtn.PromoQuestionId+'_Rating'; + + let list_mcdata=[]; + + if(qtn.QuestionType=='Single choice list') + { + selansid=QuestionsData[id_key]!=null ?QuestionsData[id_key] :''; + selanswer=QuestionsData[ans_key]!=null ?QuestionsData[ans_key] :''; + } + else if(qtn.QuestionType=='Multi choice list') + { + if(qtn.Answers!=null){ + for(var i=0;i0){ + // let arr=[]; + // for(var i=0;i0){ + for(var i=0;i=0)){ + showImageTag=true; + } + + } + } + } + + if(showImageTag){ + selimg=QuestionsData[img_key]!=null && QuestionsData[img_key]!=''?'file://'+QuestionsData[img_key]:''; + } + let isDisabled=qtn.isDisabled!=null?qtn.isDisabled:false + + let EF_qtn=errorfield.EF_qtn!=null?errorfield.EF_qtn:{}; + let showQtnErrHere=EF_qtn.PromoQuestionId==qtn.PromoQuestionId; + + let EF_Qtn_MultiChoice=errorfield.EF_Qtn_MultiChoice || ''; + let EStyle_Qtn_MultiChoice=show_errorhere && showQtnErrHere && EF_Qtn_MultiChoice=='Qtn_MultiChoice'?customStyle.stk_MultiSSTyle_error:customStyle.wind_MultiSearchInputStyle; + + + // let EF_Qtn_Date=errorfield.EF_Qtn_Date || ''; + // let EStyle_Qtn_Date=show_errorhere && showQtnErrHere && EF_Qtn_Date=='Qtn_Date'?customStyle.stk_inptSTyle_error:{}; + + let EF_Qtn_Input=errorfield.EF_Qtn_Input || ''; + let EStyle_Qtn_Input=show_errorhere && showQtnErrHere && EF_Qtn_Input=='Qtn_Input'?customStyle.stk_inptSTyle_error:{}; + let EStyle_Qtn_Select=show_errorhere && showQtnErrHere && EF_Qtn_Input=='Qtn_Select'?customStyle.stk_inptSTyle_error:{}; + let EStyle_Qtn_Date=show_errorhere && showQtnErrHere && EF_Qtn_Input=='Qtn_Date'?customStyle.stk_inptSTyle_error:{}; + + let EF_Qtn_Image=errorfield.EF_Qtn_Image || ''; + let EStyle_Qtn_Image=show_errorhere && showQtnErrHere && EF_Qtn_Image=='Qtn_Image'?customStyle.stk_inptSTyle_error:{}; + + + if(isDisabled==true){ + return ( + + ) + } + else{ + return( + + {qtn.PromoQuestionName} + {qtn.QuestionType=='Single choice list' && qtn.Answers && + render_Picker('Answer','AnswerId',onselectionChange2,{value:selanswer,qtn:qtn,window:window},EStyle_Qtn_Select) + } + {qtn.QuestionType=='Multi choice list' && qtn.Answers && + { setMultiSelectValue(selectedItems,qtn,window) }} //setMultiSelectValue(selectedItems,qtn) + selectedItems={selansid} + selectText="Pick Items" + searchInputPlaceholderText={ST.SearchItems+"..."} + // onChangeInput={ (text)=> console.log(text)} + tagRemoveIconColor={PageTheme.$primary_color} + tagBorderColor={PageTheme.$primary_color} + tagTextColor={PageTheme.$primary_color} + selectedItemTextColor={PageTheme.$primary_color} + selectedItemIconColor={PageTheme.$primary_color} + itemTextColor={PageTheme.$text_color} + displayKey="Answer" + searchInputStyle={EStyle_Qtn_MultiChoice} + submitButtonColor={PageTheme.$primary_color} + submitButtonText={ST.Submit} + /> + } + { (qtn.QuestionType=='Number' || qtn.QuestionType=='Decimal' || qtn.QuestionType=='Text') && + {setTextValue(val,qtn,window,(qtn.QuestionType=='Decimal'?'decimal':(qtn.QuestionType=='Text'?'text':'numeric')))}} + /> + } + { + (qtn.QuestionType=='Date') && + + {selansid!=''?selansid:'MM/YYYY'} + {setDateValue(selanswer);showQtnDatePicker(qtn,window,true)}}> + + + + } + { ((qtn.showDatePicker==true || qtn.showDatePicker=='true') && (qtn.QuestionType=='Date') ) && + renderDatePicker(qtn,window) + } + { + (qtn.QuestionType=='Rating') && + + {selanswer} + {setRatingQtn(qtn);setRatingWindow(window);setShowRating(true);}}> + + + + } + + { + // (qtn.QuestionType=='Audio') && + // + // {selanswer} + // {show_recorder(qtn);}}> + // + // + // + } + + { + showImageTag && + + + {openCamera(window,{},0,'1','2',qtn)}}> + + + + } + + + + ) + } + })} + + } + { RemarkEnable==true && + + {ST.Remark} + {onCatTextChange(window,'remark',val,'text')}} + /> + + } + + + } + + + + + + + ); + }} + /> + ) + } + + function _renderHeader(currentIndex){ + return( + + {`${(currentIndex+1)}/${zoomImageUrl.length}`} + {setShow_zoomImage(false) }}> + + + + ) + } + + return ( + + {processing && } + + {_OpenCaptureImage_Modal()} + {ConfirmSaveAlert(props,showAlert,onSaveCancel,saveData)} + {ConfirmSaveAlert(props,DataCleanModal,onCancelClean,onclear,'Your data will be clean',)} + {_render_RetakePopup()} + {_render_UploadAlert()} + {setShowCamera(false);getImage(imgData)}} showCamera={showCamera} onHideCamera={()=>{setShowCamera(false);}}/> + + + + + {setSearchedItem(val); FilterStores(val)}} + /> + {FilterStores(searchedItem)}}> + + + + { Object.keys(storeData).length>0 && + + {_renderWindow()} + + } + + {onSubmitData()}}/> + + + + + { showRating==true && + renderRatingView() + } + {show_zoomImage && + + null} + /> + + } + + ); +} + + +export default connect(mapStateToProps, mapDispatchToProps)(PromotionOneAppIR); \ No newline at end of file diff --git a/PerformicsSrc/src/screens/QuestionsScreen.js b/PerformicsSrc/src/screens/QuestionsScreen.js new file mode 100644 index 0000000..ed41d8b --- /dev/null +++ b/PerformicsSrc/src/screens/QuestionsScreen.js @@ -0,0 +1,1786 @@ +import React,{useState,useEffect, useRef} from 'react'; +import Container from '../components/container'; +import { useRoute } from '@react-navigation/native'; +import { customStyles,GetPageTheme, STATUSBAR_HEIGHT } from "../styles/Global"; +import {Image,TextInput,View,Text,ScrollView,TouchableOpacity,Platform,FlatList, Alert, Dimensions,Animated, Easing} from 'react-native'; +import { connect } from 'react-redux'; +import { mapStateToProps,mapDispatchToProps } from '../reducers/contextProvider'; +import {notify} from '../components/notify'; +import moment from 'moment'; +import {marktext1,marktext2, resizeImage, restore_ImageWithMetaData} from '../controller/functions'; +import {db, common_ImagePath,ImageFolderPath} from '../constants/constants'; +import CustomHeader from '../components/customHeader'; +import {AntDesign, Entypo, FontAwesome, FontAwesome5, Fontisto, MaterialCommunityIcons} from '../components/icons'; +import CustomLoader from '../components/CustomLoader'; +import LinearGradient from 'react-native-linear-gradient'; +import { AppTables } from '../constants/tableConstants'; +import * as RNFS from 'react-native-fs'; +import GradientButton from '../components/gradientButton'; +import { ConfirmSaveAlert } from '../components/alert'; +import ModalSelector from 'react-native-modal-selector'; +import MultiSelect from 'react-native-multiple-select'; +import { PageTheme } from '../styles/Themes'; +import DateTimePicker from '@react-native-community/datetimepicker'; +import DraggableFlatList,{ScaleDecorator} from 'react-native-draggable-flatlist' +import AudioRecorderPlayer, { AudioEncoderAndroidType, AudioSourceAndroidType, AVEncoderAudioQualityIOSType, AVEncodingOption, AVModeIOSOption } from 'react-native-audio-recorder-player'; +import CustomCamera from '../components/Camera'; + +const {height, width} = Dimensions.get('window'); +const topbarht=STATUSBAR_HEIGHT+50; +const actualWindowHt=parseInt((height-topbarht)+10); + +function QuestionsScreen(props) { + const route = useRoute(); + const audioRecorderPlayer = new AudioRecorderPlayer(); + const AudioSet = { + AudioEncoderAndroid: AudioEncoderAndroidType.AAC, + AudioSourceAndroid: AudioSourceAndroidType.MIC, + AVModeIOS: AVModeIOSOption.measurement, + AVEncoderAudioQualityKeyIOS: AVEncoderAudioQualityIOSType.high, + AVNumberOfChannelsKeyIOS: 2, + AVFormatIDKeyIOS: AVEncodingOption.aac, + }; + // get all theme styles acc to current theme set + const PageTheme=GetPageTheme(props.DarkMode,route.name); + const customStyle=customStyles(props.DarkMode,route.name); + + const [processing, setProcessing] = useState(true); + const [loaderTitle, setLoaderTitle] = useState('loading...'); + const [isAdhocScreen, setIsAdhocScreen] = useState(false); + const [showRating, setShowRating] = useState(false); + const [RatingQtn, setRatingQtn] = useState({}); + const [RatingOrder, setRatingOrder] = useState([]); + const [showRecorder, setShowRecorder] = useState(false); + const [VRS, setVRS] = useState({}); + const [RecorderTimer, setRecorderTimer] = useState({}); + const [playerTimer, setPlayerTimer] = useState({}); + const [rerenderView, setRerenderView] = useState(0); + const [hasUnsavedChanges,setHasUnsavedChanges] = useState(false); + const [VoiceRecorderStatus, setVoiceRecorderStatus] = useState('Press mic to start recording voice'); + const [RecFilePath, setRecFilePath] = useState({}); + const [dateValue, setDateValue] = useState(''); + const [openDatePicker, setOpenDatePicker]= useState(0); + const [storeData, setStoreData] = useState({}); + const [ShowCat, setShowCat] = useState(false); + const [ActiveSurvey, setActiveSurvey]= useState({}); + const [ActiveCategory, setActiveCategory]= useState({}); + const [currentMenu, setCurrentMenu] = useState({}); + const [rerenderdata, setrerenderdata]= useState(0); + const [SurveySubCats, setSurveySubCats]= useState([]); + const [SurveyQuestions, setSurveyQuestions]= useState([]); + const [QuestionsData,setQuestionsData]=useState({}); + const [showAlert, setShowAlert] = useState(false); + const [showCamera, setShowCamera] = useState(false); + const [getImageProps,setGetImageProps]= useState({}); + + const [isFeedbackView,setIsFeedbackView]= useState(false); + + + const animatedRipple=useRef(new Animated.Value(0)).current; + const animatedRipple2=useRef(new Animated.Value(0.5)).current; + + const d1=new Date(); + const d2=moment(d1).format('MM/DD/YYYY'); + + useEffect(() => { + let params=props.route.params? props.route.params:{}; + let storeData1=params.storeData || {}; + let surveydata=params.surveyData || {}; + let catData=params.catData || {}; + let menu1=params.menu || {}; + let ShowCat1=params.ShowCat || false; + let isAdhoc=params.isAdhocScreen || false; + let fbv1=params.FeedbackView || false; + setIsFeedbackView(fbv1); + setShowCat(ShowCat1); + setIsAdhocScreen(isAdhoc); + setStoreData(storeData1); + setActiveSurvey(surveydata) + setCurrentMenu(menu1); + setActiveCategory(catData) + + if(fbv1==true){ + getSurveyData2(storeData1); + }else{ + getSurveyData(surveydata,catData,storeData1,ShowCat1); + } + + props.navigation.addListener('beforeRemove', onBeforeRemove); + return (()=>{ + audioRecorderPlayer.removePlayBackListener(); + audioRecorderPlayer.removeRecordBackListener(); + props.navigation.removeListener('beforeRemove', onBeforeRemove); + }); + }, []); + + useEffect(() => { + props.navigation.removeListener('beforeRemove', onBeforeRemove); + props.navigation.addListener('beforeRemove', onBeforeRemove); + }, [hasUnsavedChanges]); + + useEffect(() => { + props.navigation.removeListener('beforeRemove', onBeforeRemove); + props.navigation.addListener('beforeRemove', onBeforeRemove); + }, [showCamera]); + + function onBeforeRemove(e){ + if(showCamera==true){ + e.preventDefault(); + setShowCamera(false); + } + else{ + if (hasUnsavedChanges==true) { + e.preventDefault(); // Prevent default behavior of leaving the screen + onRemoveScreen(e); + } + else{ + return; + } + } + } + + + function onRemoveScreen(e){ + Alert.alert( + "", + "Do you really want to exit the screen?", + [ + { + text: "Cancel", + onPress: () => {}, + style: "cancel" + }, + { text: "OK", onPress: () => {setHasUnsavedChanges(false);props.navigation.dispatch(e.data.action);} } + ] + ); + } + + // async function getData(surveydata,catData={},storeData1){ + + // try { + // let {StoreId,ChainId,StateId,StoreTypeId}=storeData1; + // let surveyQtns=require('../constants/s_qtns.json'); + // let subcats=[],qtns=[]; + // for(const i in surveyQtns){ + // let item=surveyQtns[i] + // let {ShowCat,AnswerId,Answer,AnswerSequence,ImageAllow,EnableQuestion,DisableQuestion,SubCategoryId,SubCategory,SubCategorySequence}=item; + // let addqtn=false; + + // // let obj={MaxLength,MinLength,SubCategoryId,SubCategory,LengthValidation,QuestionImageAllow,DateRange,Question,QuestionId,QuestionType,OTP,Answer,AnswerId,ImageAllow,MULTI_OPTIONS_IDS:[]} + // if(ShowCat==0 && item.SurveyId==surveydata.SurveyId && qtns.findIndex(a=>a.QuestionId==item.QuestionId)<0) + // { + // qtns.push(item); + // } + // else if(ShowCat==1 && Object.keys(catData).length>0 && item.SurveyId==surveydata.SurveyId && item.CategoryId==catData.CategoryId && qtns.findIndex(a=>a.QuestionId==item.QuestionId)<0) + // { + // qtns.push(item); + // } + + // let s_obj={SubCategory,SubCategoryId,SubCategorySequence}; + // if(ShowCat==0 && item.SurveyId==surveydata.SurveyId && subcats.findIndex(a=>a.SubCategoryId==item.SubCategoryId)<0){ + // subcats.push(s_obj); + // } + // else if(ShowCat==1 && Object.keys(catData).length>0 && item.SurveyId==surveydata.SurveyId && item.CategoryId==catData.CategoryId && subcats.findIndex(a=>a.SubCategoryId==item.SubCategoryId)<0){ + // subcats.push(s_obj); + // } + + + // let sc_index=subcats.findIndex(a=>a.SubCategoryId==item.SubCategoryId); + // if(sc_index>=0){ + // let sc=subcats[sc_index]; + // let Questions=sc['Questions'] || []; + // if(ShowCat==0 && item.SurveyId==surveydata.SurveyId && Questions.findIndex(a=>a.QuestionId==item.QuestionId)<0) + // { + // Questions.push(item); + // } + // else if(ShowCat==1 && Object.keys(catData).length>0 && item.SurveyId==surveydata.SurveyId && item.CategoryId==catData.CategoryId && Questions.findIndex(a=>a.QuestionId==item.QuestionId)<0) + // { + // Questions.push(item); + // } + + // sc['Questions']=Questions; + // subcats[sc_index]=sc; + // let q_index=Questions.findIndex(a=>a.QuestionId==item.QuestionId); + // let q_index2=qtns.findIndex(a=>a.QuestionId==item.QuestionId); + + // // if(q_index>=0){ + // // let data=item; + // // let qn=Questions[q_index]; + // // if(data.QuestionType=='List_Multi_Choice' || data.QuestionType=='List_Single_Choice' || data.QuestionType=='Rating'){ + // // let allanswers=qn['Answers'] || []; + // // let ansobj={AnswerId,Answer,AnswerSequence,ImageAllow,EnableQuestion,DisableQuestion} + // // allanswers.push(ansobj); + // // qn['Answers']=allanswers; + // // } + // // else if(data.QuestionType=='Date'){ + // // qn.showDatePicker=false; + // // } + // // Questions[q_index]=qn; + // // } + + + // if(q_index2>=0){ + // let data=item; + // let qn=qtns[q_index2]; + // if(data.QuestionType=='List_Multi_Choice' || data.QuestionType=='List_Single_Choice' || data.QuestionType=='Rating'){ + // let allanswers=qn['Answers'] || []; + // let ansobj={AnswerId,Answer,AnswerSequence,ImageAllow,EnableQuestion,DisableQuestion} + // if(allanswers.findIndex(a=>a.AnswerId==data.AnswerId)<0) + // allanswers.push(ansobj); + + // console.log('allanswers:',allanswers.length) + // qn['Answers']=allanswers; + // } + // else if(data.QuestionType=='Date'){ + // qn.showDatePicker=false; + // } + // qtns[q_index]=qn; + // } + + // } + // } + // setSurveySubCats(subcats); + // setSurveyQuestions(qtns); + // setProcessing(false); + + // } catch (err) { + // console.log(err); + // } + // } + + async function getSurveyData(item,catData={},storeData1,ShowCat1){ + try { + let {StoreId}=storeData1; + let {CategoryId}=catData; + let {SurveyId}= item; + + await db.transaction(async function (txn) { + + + let q2=`SELECT DISTINCT T.SubCategory,T.SubCategoryId,T.SubCategorySequence FROM Master_SurveyQuestion T INNER JOIN Mapping_Survey M ON T.SurveyId=M.SurveyId WHERE M.StoreId='${StoreId}' and T.SurveyId='${SurveyId}' `; + if(ShowCat1==true){ + q2+=` and T.CategoryId='${CategoryId}' `; + } + q2+=` order by T.CategorySequence`; + + + await txn.executeSql(q2,[],async function (txn2, txnres) { + console.log('survey subcats:',txnres.rows.length); + if(txnres.rows.length>0){ + let arr=[],allQtns=[]; + for(var i=0;i0){ + let arr=[],allQtns=[]; + for(var i=0;i{ + try { + let {StoreId}=storeData1; + let {CategoryId}=catData; + let {SurveyId}= item; + let {SubCategoryId}=subCat; + + db.transaction(async function (txn) { + let q2=''; + if(fbv1==true){ + // get inserted audit + let selectlist=` DISTINCT T.MaxLength as MaxLength,T.MinLength as MinLength,T.CategoryId,T.Category,T.SubCategoryId,T.SubCategory,T.LengthValidation as LengthValidation,T.QuestionImageAllow as QuestionImageAllow,T.DateRange as DateRange,T.Question as Question,T.QuestionId as QuestionId,T.QuestionType as QuestionType,T.OTP as OTP,T1.ANSWER As Answer, T1.ANSWER_ID as AnswerId,T1.IMAGE_ALLOW1 as ImageAllow1,T1.IMAGE1 as Image1,T1.IMAGE_ALLOW2 as ImageAllow2,T1.IMAGE2 as Image2,T1.MULTI_OPTIONS_IDS as multi_op_ids,T1.IS_DISABLED as isDisabled `; + let join=` INNER JOIN Mapping_Survey M on T.SurveyId=M.SurveyId`; + let join2=` INNER JOIN ${AppTables.SURVEY} T1 on T.SurveyId=T1.SURVEY_ID and T.CategoryId=T1.CATEGORY_ID and T.SubCategoryId=T1.SUB_CATEGORY_ID And T.QuestionId=T1.QUESTION_ID`; + q2=`Select ${selectlist} FROM Master_SurveyQuestion T ${join} ${join2} WHERE T1.STORE_ID='${StoreId}' AND T1.VISIT_DATE= '${d2}' AND T1.SUB_CATEGORY_ID='${SubCategoryId}' `; + q2+=` ORDER BY T.SubCategorySequence `; + } + else{ + // get inserted audit + let selectlist=` DISTINCT T.MaxLength as MaxLength,T.MinLength as MinLength,T.CategoryId,T.Category,T.SubCategoryId,T.SubCategory,T.LengthValidation as LengthValidation,T.QuestionImageAllow as QuestionImageAllow,T.DateRange as DateRange,T.Question as Question,T.QuestionId as QuestionId,T.QuestionType as QuestionType,T.OTP as OTP,T1.ANSWER As Answer, T1.ANSWER_ID as AnswerId,T1.IMAGE_ALLOW1 as ImageAllow1,T1.IMAGE1 as Image1,T1.IMAGE_ALLOW2 as ImageAllow2,T1.IMAGE2 as Image2,T1.MULTI_OPTIONS_IDS as multi_op_ids,T1.IS_DISABLED as isDisabled `; + let join=` INNER JOIN Mapping_Survey M on T.SurveyId=M.SurveyId`; + let join2=` INNER JOIN ${AppTables.SURVEY} T1 on T.SurveyId=T1.SURVEY_ID and T.CategoryId=T1.CATEGORY_ID and T.SubCategoryId=T1.SUB_CATEGORY_ID And T.QuestionId=T1.QUESTION_ID`; + q2=`Select ${selectlist} FROM Master_SurveyQuestion T ${join} ${join2} WHERE T1.STORE_ID='${StoreId}' AND T1.VISIT_DATE= '${d2}' AND T1.SURVEY_ID=${SurveyId} AND T1.SUB_CATEGORY_ID='${SubCategoryId}' `; + if(ShowCat1==true){ + q2+=` AND T1.CATEGORY_ID=${CategoryId} `; + } + q2+=` ORDER BY T.SubCategorySequence `; + } + + + + + await txn.executeSql(q2,[],async function (txn2, txnres) { + + if(txnres.rows.length>0){ + let arr=[]; + var QD=QuestionsData; + for(var i=0;i0){ + for(var k=0;k=0)){ + showImageTag=true; + } + + if(qtn.QuestionType=='List_Single_Choice' && (isandImgAl2 && ansss.AnswerId==selansid)){ + showImageTag2=true; + } + else if(qtn.QuestionType=='List_Multi_Choice' && (isandImgAl2 && selansid.indexOf(ansss.AnswerId)>=0)){ + showImageTag2=true; + } + + } + } + } + + if(showImageTag){ + let imgPath=(Platform.OS=='ios'?'file://':'')+ImageFolderPath+menu1.ScreenName+"/"+data.Image1; + QD[imgname_key]=data.Image1; + QD[img_key]=imgPath; + } + + if(showImageTag2){ + let imgPath=(Platform.OS=='ios'?'file://':'')+ImageFolderPath+menu1.ScreenName+"/"+data.Image2; + QD[imgname_key2]=data.Image2; + QD[img_key2]=imgPath; + } + + + + if(qtn.QuestionType=='Audio'){ + let voicefile_path=(Platform.OS=='ios'?'file://':'')+ImageFolderPath+menu1.ScreenName+'/Recordings/'+data.Answer; + QD[voiceClip_key]={'path':voicefile_path,'filename':data.Answer}; + } + + if(qtn.QuestionType=='Date'){ + let dayonly=moment().format('DD'); + let actual_date=data.Answer?data.Answer.split('/'):[]; + let month=actual_date[0],year=actual_date[1]; + let fulldate=month+'/'+dayonly+'/'+year; + QD[date_key]=fulldate; + + } + arr.push(data); + if(i==txnres.rows.length-1){ + setQuestionsData(QD); + resolve(arr); + // setSurveyQuestions(arr); + // setProcessing(false); + } + } + } + else{ + let q=''; + if(fbv1==true){ + let sl=` DISTINCT T.CategoryId,T.Category,T.SubCategoryId,T.SubCategory,T.MaxLength,T.MinLength,T.LengthValidation,T.Question,T.QuestionId,T.QuestionType,T.OTP,T.QuestionImageAllow,T.DateRange`; + q=` SELECT ${sl} FROM Master_SurveyQuestion T INNER JOIN Mapping_Survey M on T.SurveyId=M.SurveyId WHERE M.StoreId='${StoreId}' and T.SubCategoryId='${SubCategoryId}' `; + q+=` order by T.SubCategorySequence `; + } + else{ + let sl=` DISTINCT T.CategoryId,T.Category,T.SubCategoryId,T.SubCategory,T.MaxLength,T.MinLength,T.LengthValidation,T.Question,T.QuestionId,T.QuestionType,T.OTP,T.QuestionImageAllow,T.DateRange`; + q=` SELECT ${sl} FROM Master_SurveyQuestion T INNER JOIN Mapping_Survey M on T.SurveyId=M.SurveyId WHERE M.StoreId='${StoreId}' and T.SurveyId='${SurveyId}' and T.SubCategoryId='${SubCategoryId}' `; + if(ShowCat1==true){ + q+=` and T.CategoryId='${CategoryId}' `; + } + q+=` order by T.SubCategorySequence `; + } + + + + await txn.executeSql(q,[],async function (txn2, txnres2) { + + let arr=[]; + if(txnres2.rows.length>0){ + for(var i=0;i{ + db.transaction(async function (txn) { + // get inserted audit + let q2=''; + if(fbv1==true){ + let selectlist=` DISTINCT T.Answer,T.AnswerId,T.ImageAllow1,T.ImageAllow2,T.EnableQuestion,T.DisableQuestion`; + let join=` INNER JOIN Mapping_Survey M on T.SurveyId=M.SurveyId`; + q2=`Select ${selectlist} FROM Master_SurveyQuestion T ${join} WHERE T.QuestionId='${qtn.QuestionId}' AND M.StoreId = '${StoreId}' AND T.SubCategoryId='${qtn.SubCategoryId}' ORDER BY T.AnswerSequence `; + } + else{ + let selectlist=` DISTINCT T.Answer,T.AnswerId,T.ImageAllow1,T.ImageAllow2,T.EnableQuestion,T.DisableQuestion`; + let join=` INNER JOIN Mapping_Survey M on T.SurveyId=M.SurveyId`; + q2=`Select ${selectlist} FROM Master_SurveyQuestion T ${join} WHERE T.QuestionId='${qtn.QuestionId}' AND M.StoreId = '${StoreId}' AND T.SurveyId==${SurveyId} AND T.SubCategoryId='${qtn.SubCategoryId}' ORDER BY T.AnswerSequence `; + } + + await txn.executeSql(q2,[],async function (txn2, txnres) { + // console.log('answers len',txnres.rows.length); + if(txnres.rows.length>0){ + let arr=[]; + for(var i=0;i{ + return {'Answers':val,'Success':true}; + }).catch((err)=>{ + console.log(err); + return {'Success':false,'Error':err} + }); + } + + async function getImage(imgdata){ + let qtn=getImageProps.qtn || ''; + let type=getImageProps.type || '1'; + if(typeof imgdata =='object' && imgdata.errorCode=='camera_unavailable'){ + notify('Camera unavailable'); + } + else if(typeof imgdata =='object' && imgdata.uri!=null){ + const img=imgdata; + const imgurl=img.uri, imgWidth=img.width, imgHeight=img.ExtendedHeight; + let isImgFromGallery=img.fromGallery!=null?img.fromGallery:false; + let picture_clickedd=isImgFromGallery==true?img.datetime:new Date(); + + let picture_clicked_time=moment(picture_clickedd).format('MM-DD-YYYY HH:mm:ss') + let picture_clicked_time_for_pic_name=moment(picture_clickedd).format('MMDDYYYY_HHmmss') + + console.log("time", picture_clicked_time); + console.log("time1", picture_clicked_time_for_pic_name); + let calculate_tym_date_for_filename = picture_clicked_time_for_pic_name; + let calculate_tym_date_over_img = picture_clicked_time; + + let filename=storeData.StoreId+'_'+ActiveSurvey.SurveyId+'_'+qtn.QuestionId+'_SurveyImg_'+calculate_tym_date_for_filename+'.jpg'; + + const mark_text1=calculate_tym_date_over_img; + const mark_text2='Store Name:'+storeData.StoreName+' | Store Id:'+storeData.StoreId+' | Survey Id:'+ActiveSurvey.SurveyId+' | Question Id :'+qtn.QuestionId+' | Image Type: Survey'+' | Date:'+calculate_tym_date_over_img; + + + + let qd=QuestionsData; + let img_key=type=='1'?qtn.QuestionId+'_ImagePath1':qtn.QuestionId+'_ImagePath2'; + let imgname_key=type=='1'?qtn.QuestionId+'_ImageName1':qtn.QuestionId+'_ImageName2'; + qd[imgname_key]=filename; + + + let imagePath=`${ImageFolderPath+currentMenu.ScreenName}/${filename}`; + RNFS.copyFile(imgurl, imagePath) + .then(async(resn) => { + // render data with clicked image + let uri='file://'+imagePath; + console.log('image marker',uri); + qd[img_key]=uri; + + setQuestionsData(qd); + setHasUnsavedChanges(true); + setrerenderdata(!rerenderdata); + + // add metdata then resize image and restored back to the imagePath + let restore_data={"destFilePath":imagePath,"imgurl":imgurl,imgWidth,imgHeight,mark_text1,mark_text2} + let is_restored=await restore_ImageWithMetaData(restore_data,imgdata); + console.log("image restored:",is_restored); + }) + .catch(err => { + console.log('ERROR: image file write failed!!!'); + console.log(err.message, err.code); + }); + } + } + + async function openCamera(qtn,type){ + setGetImageProps({'qtn':qtn,'type':type}); + setShowCamera(true); + } + + async function disableQtns(sqtns,DQtns,data,isreturn=false){ + if(DQtns.length>0){ + new Promise.all( + DQtns.map((qid,q_index)=>{ + let s_qtnindex=sqtns.findIndex(i=>i.QuestionId==qid) || {}; + let s_qtn=sqtns[s_qtnindex]; + if(s_qtn!=null){ + s_qtn['isDisabled']=true + sqtns[s_qtnindex]=s_qtn; + let id_key=s_qtn.QuestionId+'_AnswerId'; + let ans_key=s_qtn.QuestionId+'_Answer'; + data[id_key]=0; + data[ans_key]=''; + return false + }else{ + return false + } + }) + ).then(async (val)=>{ + setSurveyQuestions(sqtns); + setQuestionsData(data); + setHasUnsavedChanges(true); + setrerenderdata(!rerenderdata); + }) + } + } + + async function enableQtns(sqtns,EQtns,DQtns,data){ + new Promise.all( + EQtns.map((qid,q_index)=>{ + let s_qtnindex=sqtns.findIndex(i=>i.QuestionId==qid) || {}; + let s_qtn=sqtns[s_qtnindex]; + if(s_qtn!=null){ + s_qtn['isDisabled']=false + sqtns[s_qtnindex]=s_qtn; + return false + }else{ + return false + } + }) + ).then(async (val)=>{ + if(DQtns.length>0){ + disableQtns(sqtns,DQtns,data) + } + else{ + setSurveyQuestions(sqtns); + setHasUnsavedChanges(true); + setrerenderdata(!rerenderdata); + } + }) + } + + function onselectionChange(option,qtn){ + let data=QuestionsData; + let id_key=qtn.QuestionId+'_AnswerId'; + let ans_key=qtn.QuestionId+'_Answer'; + data[id_key]=option.value; + data[ans_key]=option.label; + + setQuestionsData(data); + + let aq_ans=qtn.Answers!=null?qtn.Answers:[]; + let ans_obj=aq_ans.find(i=>i.AnswerId==option.value) || {}; + let EQtns=ans_obj.EnableQuestion!=null && ans_obj.EnableQuestion!=''?ans_obj.EnableQuestion.replace(' ','').split(','):[]; + let DQtns=ans_obj.DisableQuestion!=null && ans_obj.DisableQuestion!=''?ans_obj.DisableQuestion.replace(' ','').split(','):[]; + + let sqtns=SurveyQuestions + if(EQtns.length>0){ + enableQtns(sqtns,EQtns,DQtns,data) + } + else if(DQtns.length>0){ + disableQtns(sqtns,DQtns,data) + } + else{ + setHasUnsavedChanges(true); + setrerenderdata(!rerenderdata); + } + + + + } + + function setTextValue(value,qtn) { + let id_key=qtn.QuestionId+'_AnswerId'; + let ans_key=qtn.QuestionId+'_Answer'; + + let obj=QuestionsData; + if(qtn.QuestionType=='Date' ){ + let date_key=qtn.QuestionId+'_Date'; + let d=value!=null?new Date(value):new Date(); + let mfdate=moment(d).format('MM/YYYY'); + showQtnDatePicker(qtn,false); + obj[id_key]=0; + obj[ans_key]=mfdate; + obj[date_key]=moment(d).format('MM/DD/YYYY'); + } + else{ + obj[id_key]=0; + obj[ans_key]=value; + } + console.log(value,obj); + setQuestionsData(obj); + setHasUnsavedChanges(true); + setrerenderdata(!rerenderdata); + } + + function setRatingValue(data){ + // let ids=[]; + // data.map((item,index)=>{ + // ids.push(item.AnswerId); + // }) + setRatingOrder(data); + } + + + async function setMultiSelectValue(selectedItems=[],qtn) { + console.log('setMultiSelectValue',selectedItems); + let id_key=qtn.QuestionId+'_AnswerId'; + let ans_key=qtn.QuestionId+'_Answer'; + let multi_key=qtn.QuestionId+'_MultiOption'; + let obj=QuestionsData; + obj[id_key]=0; + obj[multi_key]=selectedItems.join(','); + let anss=[]; + selectedItems.map((itemValue)=>{ + let ans = qtn.Answers.find(c1 => c1.AnswerId == itemValue); + if(ans.Answer){anss.push(ans.Answer)} + }); + obj[ans_key]=anss.join(','); + console.log('obj:',obj); + setQuestionsData(obj); + setHasUnsavedChanges(true); + setrerenderdata(!rerenderdata); + } + + + function showQtnDatePicker(qtn,show=false){ + let newqtnIndex=SurveyQuestions.findIndex(q=>q.QuestionId==qtn.QuestionId); + console.log('showQtnDatePicker:',newqtnIndex); + if(newqtnIndex>=0){ + let sq=SurveyQuestions; + let newqtn=sq[newqtnIndex]; + newqtn.showDatePicker=show; + sq[newqtnIndex]=newqtn; + setSurveyQuestions(sq); + if(show==true) setrerenderdata(!rerenderdata); + } + } + + + function setShowQtnKey(qtn,key,show=false){ + if(key!=null && key!=''){ + let newqtnIndex=SurveyQuestions.findIndex(q=>q.QuestionId==qtn.QuestionId); + console.log('setShowQtnKey:',newqtnIndex); + if(newqtnIndex>=0){ + let sq=SurveyQuestions; + let newqtn=sq[newqtnIndex]; + newqtn[key]=show; + sq[newqtnIndex]=newqtn; + setSurveyQuestions(sq); + if(show==true) setrerenderdata(!rerenderdata); + } + } + } + + function onRatingCancel(){ + setShowRating(false); + + } + + function onRatingSave(){ + setShowRating(false); + + let qtn=RatingQtn; + let id_key=qtn.QuestionId+'_AnswerId'; + let ans_key=qtn.QuestionId+'_Answer'; + let rating_key=qtn.QuestionId+'_Rating'; + let ids=[],anss=[]; + RatingOrder.map((item,index)=>{ + ids.push(item.AnswerId); + anss.push(item.Answer); + }) + let obj=QuestionsData; + obj[rating_key]=ids.join(','); + obj[id_key]=0; + obj[ans_key]=anss.join(','); + + console.log(obj); + setQuestionsData(obj); + setHasUnsavedChanges(true); + setrerenderdata(!rerenderdata); + } + + function onRecordCancel(){ + setShowRecorder(false); + } + + function onRecordSave(){ + + let isRecorderPlaying=VRS.RecorderPlayStatus!=null && VRS.RecorderPlayStatus==true; + let isPlayerPlaying=VRS.PlayerPlayStatus!=null && VRS.PlayerPlayStatus==true; + + if(isRecorderPlaying){ + notify('Please stop recording first'); + return; + } + else if(isPlayerPlaying){ + stopPlayer(VRS); + // notify('Please stop playing audio first'); + // return; + } + + setShowRecorder(false); + let qtn=RatingQtn; + let id_key=qtn.QuestionId+'_AnswerId'; + let ans_key=qtn.QuestionId+'_Answer'; + let voiceClip_key=qtn.QuestionId+'_VoiceClip'; + + let obj=QuestionsData; + obj[ans_key]=RecFilePath.filename || ''; + obj[id_key]=0; + obj[voiceClip_key]=RecFilePath; + + setQuestionsData(obj); + setHasUnsavedChanges(true); + setrerenderdata(!rerenderdata); + } + + const RippleAnimation = (value,minValue,maxValue,delay) => + Animated.loop( + Animated.sequence([ + Animated.timing(value, { + toValue: maxValue, + duration: 1000, + delay:delay, + useNativeDriver:(Platform.OS=='ios'?false:true), + }), + Animated.timing(value, { + toValue: minValue, + duration: 1000, + delay:delay, + useNativeDriver:(Platform.OS=='ios'?false:true), + }), + ]), + + ).start(); + + const startRecorder = React.useCallback(async (storeData1,qtn,ActiveSurvey1,vrStatus) => { + try{ + console.log('startRecorder') + if(audioRecorderPlayer!=null){ + + if(vrStatus['RecorderPlayStatus']==true){ + notify('Already Recording...') + return; + } + else if(vrStatus['PlayerPlayStatus']==true){ + notify('Please stop player first!') + return; + } + + stopPlayer(vrStatus); + + let picture_clickedd=new Date(); + let picture_clicked_date=moment(picture_clickedd).format('YYYYMMDD'); + let picture_clicked_time=moment(picture_clickedd).format('HHmmss'); + let commname=storeData1.StoreId+'_'+ActiveSurvey1.SurveyId+'_'+qtn.QuestionId+'_SurveyRecording_'+picture_clicked_date+'_'+picture_clicked_time; + let filename=Platform.OS=='ios'?commname+'.m4a':commname+'.mp3'; + + const url=Platform.OS=='ios'?'file://'+ImageFolderPath+currentMenu.ScreenName+"/"+'Recordings/'+filename:ImageFolderPath+currentMenu.ScreenName+"/"+'Recordings/'+filename; + const url_dir=ImageFolderPath+currentMenu.ScreenName+"/"+'Recordings/'; + console.log('write file url:',url); + RNFS.mkdir(url_dir).then((res)=>{ + + RNFS.writeFile(url, '') + .then(async (success) => { + // if(success!=null){ + const path = Platform.select({ + ios: url, + android: url, + }); + + const result = await audioRecorderPlayer.startRecorder(path,AudioSet); + + if(result!=null && result!=''){ + console.log('start recording now'); + vrStatus['RecorderPlayStatus']=true; + setVRS(vrStatus); + setRecFilePath({'path':url,'filename':filename}); + // animate + RippleAnimation(animatedRipple,0,1,0); + RippleAnimation(animatedRipple2,0,1,100); + + audioRecorderPlayer.addRecordBackListener((e) => { + let recordsec=e.currentPosition; + let data={'recordSecs':recordsec,'recordTime':audioRecorderPlayer.mmssss(Math.floor(recordsec))}; + if(vrStatus['RecorderPlayStatus']==true) + { + setRecorderTimer(data); + setHasUnsavedChanges(true); + setVoiceRecorderStatus('Recording... ! Press mic to stop recording'); + } + + console.log('recordsec:',recordsec); + if(recordsec>=60*1000){ + stopRecorder(vrStatus); + notify('Maximum record time limit reached.','LONG'); + } + return; + }); + } + console.log('start recorder:',result); + // } + // else{ + // notify('Something Went Wrong! Cannot open file for recording!'); + // } + + }) + .catch((err) => { + console.log('eerriur1',err.message); + notify('Something Went Wrong! Cannot open file for recording!'); + }); + }) + .catch((err) => { + console.log('eerriur2',err.message); + notify('Something Went Wrong! Cannot open file for recording!'); + }); + + } + } + catch(e){ + console.log('error:',e); + } + + },[]); + + + + + + + const stopRecorder = React.useCallback(async (vrStatus) => { + try{ + console.log('stopRecorder'); + if(audioRecorderPlayer!=null){ + + animatedRipple.setValue(0); + animatedRipple2.setValue(0.5); + const uri = await audioRecorderPlayer.stopRecorder(); + audioRecorderPlayer.removeRecordBackListener(); + + vrStatus['RecorderPlayStatus']=false; + vrStatus['PlayerPlayStatus']=false; + setPlayerTimer({}); + setVRS({...VRS,vrStatus}); + setVoiceRecorderStatus('Press mic to start recording voice'); + } + } + catch(e){ + console.log('error:',e); + } + + },[]); + + const startPlayer = React.useCallback(async (url,vrStatus1,type='0') => { + try{ + let vrStatus=VRS; + let qtn=RatingQtn; + if(audioRecorderPlayer!=null){ + console.log('startPlayer1',url); + if(vrStatus['PlayerPlayStatus']==true){ + notify('Already Playing...') + return; + } + else if(vrStatus['RecorderPlayStatus']==true){ + notify('Please stop recording first!') + return; + } + else if(url=='' || url==null){ + notify('File not found!') + return; + } + + const result = await audioRecorderPlayer.startPlayer(url); + if(result!=null){ + vrStatus['PlayerPlayStatus']=true; + setVRS(vrStatus); + + audioRecorderPlayer.addPlayBackListener((e) => { + let playDuration=audioRecorderPlayer.mmssss(Math.floor(e.duration)); + let vrs=VRS; + let data={'playerSecs':e.currentPosition,'totalDuration':e.duration,'playDuration':playDuration,'playTime':audioRecorderPlayer.mmssss(Math.floor(e.currentPosition),)}; + let data2={'playerSecs':'0000','totalDuration':e.duration,'playDuration':playDuration,'playTime':"00:00:00"}; + if(vrs['PlayerPlayStatus']==true) + { + setPlayerTimer(e.currentPosition<0?data2:data); + } + if(e.currentPosition<0){ + return ; + } + let wp=e.duration!=null?Math.floor((e.currentPosition/e.duration)* 100):0; + console.log('wp:',wp); + if(wp>=100 || isNaN(wp)){ + stopPlayer(vrs); + } + else if(type=='1' && wp<1){ + pausePlayer(); + } + setProcessing(false); + return; + }); + } + else{ + setProcessing(false); + } + } + } + catch(e){ + console.log('error:',e); + setProcessing(false); + } + + },[]); + + const resumePlayer = React.useCallback(async (url)=>{ + console.log('resume player') + let vrStatus=VRS; + const res=await audioRecorderPlayer.resumePlayer(); + console.log('res:',res); + if(res=='No audio playing'){ + startPlayer(url,vrStatus); + } + vrStatus['PlayerPlayStatus']=true; + setVRS({...VRS,vrStatus}); + },[]); + + + const pausePlayer = React.useCallback(()=>{ + console.log('pause player') + let vrStatus=VRS; + audioRecorderPlayer.pausePlayer(); + vrStatus['PlayerPlayStatus']=false; + setVRS({...VRS,vrStatus}); + },[]); + + const stopPlayer = React.useCallback(async (vrStatus) => { + try{ + console.log('stop player now'); + + if(audioRecorderPlayer!=null){ + const uri = await audioRecorderPlayer.stopPlayer(); + audioRecorderPlayer.removePlayBackListener(); + vrStatus['PlayerPlayStatus']=false; + setVRS({...VRS,vrStatus}); + } + } + catch(e){ + console.log('error:',e); + } + + },[]); + + async function show_recorder(qtn){ + let voiceClip_key=qtn.QuestionId+'_VoiceClip'; + let url=QuestionsData[voiceClip_key]?QuestionsData[voiceClip_key].path :''; + setRatingQtn(qtn); + if((RecorderTimer==null || Object.keys(RecorderTimer).length<=0) && (playerTimer==null || Object.keys(playerTimer).length<=0) && url!=null && url!=''){ + setLoaderTitle('Loading...'); + setProcessing(true); + await startPlayer(url,VRS,'1'); + } + setRecFilePath((QuestionsData[voiceClip_key] || {})); + setShowRecorder(true); + } + + async function onSubmitData(){ + let isvalid=await validate(); + if(isvalid){ + setShowAlert(true); + } + } + + function onSaveCancel(){ + setShowAlert(false); + } + + async function saveData(){ + setHasUnsavedChanges(false); + setShowAlert(false); + setLoaderTitle('Saving Data...'); + setProcessing(true); + try { + let {StoreId,ChainId,StateId,StoreTypeId}=storeData; + await db.transaction(async function (txn) { + + + let q=`DELETE FROM ${AppTables.SURVEY} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' and SURVEY_ID='${ActiveSurvey.SurveyId}' `; + if(ShowCat==true){ + q+=` and CATEGORY_ID='${ActiveCategory.CategoryId}' `; + } + + // remove old data + await txn.executeSql(q,[],async function (txn2, txnres) { + console.log('survey data deleted'); + },function (txnE,txnerr) { console.log(txnerr); },); + + + var values=''; + let {SurveyId,SurveyName} = ActiveSurvey; + for(var i=0;ii.AnswerId==selansid) + let imgallow1=ans_obj!=null && ans_obj['ImageAllow1']!=null?ans_obj.ImageAllow1:false; + let imgallow2=ans_obj!=null && ans_obj['ImageAllow2']!=null?ans_obj.ImageAllow2:false; + let f_imgalloq1=(QuestionImageAllow=='true' || QuestionImageAllow==1) || (imgallow1=='true' || imgallow1==1) + + values+=` ('${StoreId}','${d2}','${SurveyId}','${CategoryId}','${SubCategoryId}','${Question}','${QuestionId}','${QuestionType}','${selans}','${selansid}','${f_imgalloq1}','${imgName1}','${imgallow2}','${imgName2}','${multiops}','${isQtnDisabled}','${d2}') `; + } + + let add_data=`INSERT INTO ${AppTables.SURVEY} (STORE_ID,VISIT_DATE,SURVEY_ID,CATEGORY_ID,SUB_CATEGORY_ID,QUESTION,QUESTION_ID,QUESTION_TYPE,ANSWER,ANSWER_ID,IMAGE_ALLOW1,IMAGE1,IMAGE_ALLOW2,IMAGE2,MULTI_OPTIONS_IDS,IS_DISABLED,ADDED_DATE) VALUES ${values} `; + + await txn.executeSql(add_data,[],async function (txn2, txnres) { + console.log('surveys added'); + notify('Survey updated successfully','SHORT'); + setProcessing(false); + props.navigation.goBack(); + },function (txnE,txnerr) { console.log(txnerr);setProcessing(false);notify('Cannot update survey') },); + + + }); + } catch (err) { + console.log(err); + } + } + + async function validate(){ + var isvalid=true; + const QD=QuestionsData; + console.log(SurveyQuestions.length); + for(var i=0;i=0 && QD[ans_key]===''))){ + isvalid=false; + let msg=( qtn.QuestionType=='Date'?'Please pick a date':(qtn.QuestionType=='Rating'?'Please select rating':'Please fill all details')); + notify(msg,'SHORT'); + break; + } + else if( qtn.QuestionType=='Audio' && (Object.keys(QD).indexOf(voiceClip_key)<0 || (Object.keys(QD).indexOf(voiceClip_key)>=0 && (QD[voiceClip_key]==null || QD[voiceClip_key].filename==null || QD[voiceClip_key].filename=='')))){ + isvalid=false; + notify('Please record audio clip for the required field','SHORT'); + break; + } + else if(Object.keys(QD).indexOf(id_key)<0 || (Object.keys(QD).indexOf(id_key)>=0 && (QD[id_key]==='' || (QD[id_key]===0 && qtn.isDisabled===false) ))){ + isvalid=false; + notify('Please fill all details','SHORT'); + break; + } + else if(isImgAllowed && (Object.keys(QD).indexOf(img_key)<0 || (Object.keys(QD).indexOf(img_key)>=0 && QD[img_key]===''))){ + isvalid=false; + notify('Please add images','SHORT'); + break; + }else{ + console.log('no condition found'); + } + + if((qtn.QuestionType=='List_Single_Choice' || qtn.QuestionType=='List_Multi_Choice' )){ + if (qtn.Answers && qtn.Answers.length>0){ + for(var j=0;j=0)){ + showImageTag=true; + } + + let isandImgAl2=(ansss.ImageAllow2==true || ansss.ImageAllow2=='true' || ansss.ImageAllow2==1); + if(qtn.QuestionType=='List_Single_Choice' && (isandImgAl2 && ansss.AnswerId==selansid)){ + showImageTag2=true; + } + else if(qtn.QuestionType=='List_Multi_Choice' && (isandImgAl2 && selansid.indexOf(ansss.AnswerId)>=0)){ + showImageTag2=true; + } + } + } + } + + if(showImageTag && (Object.keys(QD).indexOf(img_key)<0 || (Object.keys(QD).indexOf(img_key)>=0 && QD[img_key]===''))){ + isvalid=false; + notify('Please add images','SHORT'); + break; + } + + + if(showImageTag2 && (Object.keys(QD).indexOf(img_key2)<0 || (Object.keys(QD).indexOf(img_key2)>=0 && QD[img_key2]===''))){ + isvalid=false; + notify('Please add images','SHORT'); + break; + } + + + } + + return isvalid; + } + + function render_Picker(label_key,value_key,onChange=()=>{},selected_data={}){ + var data=[]; + let qtn=selected_data.qtn || {}; + let isQtnDisabled=qtn.isDisabled!=null && qtn.isDisabled!=''?qtn.isDisabled:false; + let allAnswers=qtn.Answers || []; + + allAnswers.map((item,index)=>{ + let obj={ key: index, label: item[label_key],value:item[value_key] }; + if(selected_data.value==item[label_key]) + obj['component']= {item[label_key]}; + data.push(obj); + }); + + return ( + {onChange(option,qtn) }} + overlayStyle={customStyle.addVisPickerOverlay} + cancelContainerStyle={customStyle.addVisPicker_OptionContainerStyle} + optionStyle={customStyle.addvis_opStyle} + optionTextStyle={customStyle.addvis_opTextStyle} + optionContainerStyle={customStyle.addVisPicker_OptionContainerStyle} + selectedKey={'1'} + disabled={isQtnDisabled} + > + {(selected_data.value!=null && selected_data.value!=''?selected_data.value: '-select-')} + + ) + } + + function renderDatePicker(qtn){ + let qtnn=qtn; + let DateRange=qtn.DateRange; + let maxDate=moment().add(10,'years').format('MM/DD/YYYY'); + let minDate=moment().subtract(10,'years').format('MM/DD/YYYY'); + if(DateRange=='RFD'){ + maxDate=moment().format('MM/DD/YYYY'); + } + else if(DateRange=='RPD'){ + minDate=moment().format('MM/DD/YYYY'); + } + + return ( + {setTextValue(selectedDate,qtnn)}} + maximumDate={new Date(maxDate)} + minimumDate={new Date(minDate)} + /> + ); + } + + function renderItem({ item, drag, isActive }){ + return ( + + + {item.Answer} + + + ); + }; + + function renderRatingView(){ + let qtn=RatingQtn; + let Answers=qtn.Answers; + let id_key=qtn.QuestionId+'_AnswerId'; + let ans_key=qtn.QuestionId+'_Answer'; + let rating_key=qtn.QuestionId+'_Rating'; + // let ratings=QuestionsData[rating_key]!=null?QuestionsData[rating_key].split(','):[]; + + let newarr=RatingOrder; + if(RatingOrder.length<=0){ + newarr=Answers; + } + + return ( + + + Drag Items In Order + Press and hold to drag + {setRatingValue(data)}} + keyExtractor={(item) => item.AnswerId} + renderItem={renderItem} + /> + + {onRatingCancel()}}> + Cancel + + {onRatingSave()}}> + Save + + + + + ) + } + + function renderRecorderView(){ + + let qtn=RatingQtn; + let isRecorderPlaying=VRS.RecorderPlayStatus!=null && VRS.RecorderPlayStatus==true; + let isPlayerPlaying=VRS.PlayerPlayStatus!=null && VRS.PlayerPlayStatus==true; + const scale=animatedRipple.interpolate({ + inputRange:[0,1], + outputRange:[1,1.3], + }); + + const borderColor=animatedRipple.interpolate({ + inputRange:[0,1], + outputRange:['#f5acb4c2','#fce6e9e3'], + }); + + const scale2=animatedRipple2.interpolate({ + inputRange:[0,1], + outputRange:[1,1.5], + }); + + const borderColor2=animatedRipple2.interpolate({ + inputRange:[0,1], + outputRange:['#f5acb4c2','#fce6e9e3'], + }); + + let totalDuration=RecorderTimer.recordSecs!=null?RecorderTimer.recordSecs:playerTimer.totalDuration; + let wp=totalDuration!=null?Math.floor((playerTimer.playerSecs/totalDuration)* 100):0; + let width1=wp<=100?(wp>0?wp+'%':'0%'):'100%'; + if(isNaN(wp)) width1='0%'; + + return ( + + {rerenderView==rerenderView && + + Record Voice Clip + You can record max for 60 secs + {VoiceRecorderStatus} + + + + + + {startRecorder(storeData,qtn,ActiveSurvey,VRS); }}> + + + {isRecorderPlaying && + {stopRecorder(VRS); }}> + + + } + + + + {RecorderTimer.recordTime} + { + (!isRecorderPlaying && RecFilePath.filename!=null && RecFilePath.filename!='') && + + + + + + + {`${(playerTimer.playTime || '00:00:00')} / ${playerTimer.playDuration || RecorderTimer.recordTime}`} + + + + {let url=(Platform.OS=='ios'?'file://':'')+ImageFolderPath+currentMenu.ScreenName+"/"+'Recordings/'+RecFilePath.filename; (wp<100 && wp>0)? resumePlayer(url):startPlayer(url,VRS); }}> + + + {isPlayerPlaying && { wp<100?pausePlayer():stopPlayer(VRS); }}> + + } + + + } + + + + {onRecordCancel()}}> + Cancel + + {onRecordSave()}}> + Save + + + } + + ) + } + + function _renderSurveyQtns(subcat){ + const SurveyQuestions=subcat.Questions; + return ( + + { + SurveyQuestions.length>0 && + SurveyQuestions.map((item,index)=>{ + + let qtn=item; + let selansid='',selanswer='',selimg='',selimg2='',showImageTag=false,showImageTag2=false; + let id_key=qtn.QuestionId+'_AnswerId'; + let ans_key=qtn.QuestionId+'_Answer'; + let multi_key=qtn.QuestionId+'_MultiOption'; + let date_key=qtn.QuestionId+'_Date'; + let img_key=qtn.QuestionId+'_ImagePath1'; + let imgname_key=qtn.QuestionId+'_ImageName1'; + let img_key2=qtn.QuestionId+'_ImagePath2'; + let imgname_key2=qtn.QuestionId+'_ImageName2'; + let rating_key=qtn.QuestionId+'_Rating'; + let voiceClip_key=qtn.QuestionId+'_VoiceClip'; + let list_mcdata=[]; + + if(qtn.QuestionType=='List_Single_Choice') + { + selansid=QuestionsData[id_key]!=null ?QuestionsData[id_key] :''; + selanswer=QuestionsData[ans_key]!=null ?QuestionsData[ans_key] :''; + } + else if(qtn.QuestionType=='List_Multi_Choice') + { + + if(qtn.Answers!=null){ + console.log('qtn.Answers:',qtn.Answers.length); + for(var i=0;i0){ + let arr=[]; + for(var i=0;i0){ + for(var i=0;i=0)){ + showImageTag=true; + } + + if(qtn.QuestionType=='List_Single_Choice' && (isandImgAl2 && ansss.AnswerId==selansid)){ + showImageTag2=true; + } + else if(qtn.QuestionType=='List_Multi_Choice' && (isandImgAl2 && selansid.indexOf(ansss.AnswerId)>=0)){ + showImageTag2=true; + } + } + } + } + + if(showImageTag){ + selimg=QuestionsData[img_key]!=null && QuestionsData[img_key]!=''?'file://'+QuestionsData[img_key]:''; + } + + if(showImageTag2){ + selimg2=QuestionsData[img_key2]!=null && QuestionsData[img_key2]!=''?'file://'+QuestionsData[img_key2]:''; + } + + + + return( + + {qtn.Question} + {qtn.QuestionType=='List_Single_Choice' && qtn.Answers && + render_Picker('Answer','AnswerId',onselectionChange,{value:selanswer,qtn:qtn}) + } + {qtn.QuestionType=='List_Multi_Choice' && qtn.Answers && + {console.log('onSelectedItemsChange'); }} //setMultiSelectValue(selectedItems,qtn) + selectedItems={selansid} + selectText="Pick Items" + searchInputPlaceholderText="Search Items..." + // onChangeInput={ (text)=> console.log(text)} + tagRemoveIconColor={PageTheme.$primary_color} + tagBorderColor={PageTheme.$primary_color} + tagTextColor={PageTheme.$primary_color} + selectedItemTextColor={PageTheme.$primary_color} + selectedItemIconColor={PageTheme.$primary_color} + itemTextColor={PageTheme.$text_color} + displayKey="Answer" + searchInputStyle={{ color: '#CCC' }} + submitButtonColor={PageTheme.$primary_color} + submitButtonText="Submit" + /> + } + { (qtn.QuestionType=='Number' || qtn.QuestionType=='Decimal' || qtn.QuestionType=='Text') && + {setTextValue(val,qtn)}} + /> + } + { + (qtn.QuestionType=='Date') && + + {selansid!=''?selansid:'MM/YYYY'} + {setDateValue(selanswer);showQtnDatePicker(qtn,true)}}> + + + + } + { ((qtn.showDatePicker==true || qtn.showDatePicker=='true') && (qtn.QuestionType=='Date') ) && + renderDatePicker(qtn) + } + { + (qtn.QuestionType=='Rating') && + + {selanswer} + {setRatingQtn(qtn);setShowRating(true);}}> + + + + } + + { + (qtn.QuestionType=='Audio') && + + {selanswer} + {show_recorder(qtn);}}> + + + + } + + { + showImageTag && + + + {openCamera(qtn,'1')}}> + + + + } + { + showImageTag2 && + + + {openCamera(qtn,'2')}}> + + + + } + + ) + }) + } + + + ); + } + + // function _renderSurveyQtns(subcatItem){ + // return ( + // { + + // }} + // /> + // ) + // } + + function _renderSurveyView(){ + return ( + + { + let subcat=item,s_index=index; + + return ( + + + {subcat.SubCategory} + + { _renderSurveyQtns(subcat)} + + ) + }} + > + + + + ); + } + + + + return ( + + {processing && } + + {ConfirmSaveAlert(props,showAlert,onSaveCancel,saveData)} + {setShowCamera(false);getImage(imgData)}} showCamera={showCamera} onHideCamera={()=>{setShowCamera(false);}}/> + + + + {isFeedbackView!=true && + + {/* {(ActiveSurvey.SurveyName!=null?(ActiveSurvey.SurveyName.length>26?ActiveSurvey.SurveyName.substring(0,26)+'...':ActiveSurvey.SurveyName) : '')} */} + {('Survey Id : '+(ActiveSurvey.SurveyId || '')+(ShowCat==true?' | '+'Category Id : '+(ActiveCategory.CategoryId || ''):''))} + + } + { + // Object.keys(ActiveSurvey).length>0 && + _renderSurveyView() + } + + {onSubmitData()}}/> + + + + { showRating==true && + renderRatingView() + } + { showRecorder==true && + renderRecorderView() + } + + ); + } + + +export default connect(mapStateToProps, mapDispatchToProps)(QuestionsScreen); \ No newline at end of file diff --git a/PerformicsSrc/src/screens/ReportChart.js b/PerformicsSrc/src/screens/ReportChart.js new file mode 100644 index 0000000..75c5612 --- /dev/null +++ b/PerformicsSrc/src/screens/ReportChart.js @@ -0,0 +1,374 @@ +import React,{useState,useEffect} from 'react'; +import Container from '../components/container'; +import { useRoute } from '@react-navigation/native'; +import { globalStyles,customStyles,GetPageTheme } from "../styles/Global"; +import {StatusBar,Image,TextInput,View,Text,ScrollView,TouchableOpacity,Platform,PermissionsAndroid,FlatList, Dimensions} from 'react-native'; +import { ReactReduxContext,connect,useSelector, useDispatch } from 'react-redux'; +import { mapStateToProps,mapDispatchToProps } from '../reducers/contextProvider'; +import SQLite from 'react-native-sqlite-2'; +import {notify} from '../components/notify'; +import moment from 'moment'; +import {getDownloadJson,DownloadData, getDownloadJson1} from '../controller/functions'; +import {get_item,set_item,clear_item} from '../components/localStorage'; +import {version,sloganline,appname,testurl, db} from '../constants/constants'; +import CustomHeader from '../components/customHeader'; +import {Card} from 'react-native-paper'; +import {AntDesign} from '../components/icons'; +import { WebView } from 'react-native-webview'; +import CustomLoader from '../components/CustomLoader'; +import NoDataComponent from '../components/NoDataComponent'; +import LinearGradient from 'react-native-linear-gradient'; +import { getFolderName, getMethodName, METHODS } from '../constants/methodNames'; +import { PieChart,BarChart } from 'react-native-chart-kit'; + +function ReportChart(props) { + const route = useRoute(); + const ST=props.StaticText || {}; + // get all theme styles acc to current theme set + const PageTheme=GetPageTheme(props.DarkMode,route.name); + const customStyle=customStyles(props.DarkMode,route.name); + + + const [processing, setProcessing] = useState(true); + const [isDataFound, setisDataFound] = useState(false); + const [reportData, setReportData] = useState([]); + const [aggrData, setAggrData] = useState({}); + const [cols, setcols] = useState([]); + const [colWidth, setColWidth] = useState('100%'); + const [currentReportMenu, setCurrentReportMenu] = useState({}); + const [designation, setDesignation] = useState(''); + const d1=new Date(); + const d2=moment(d1).format('MM/DD/YYYY'); + + useEffect(() => { + let params=props.route.params? props.route.params:{}; + let ReportMenu=params?.ReportData || {}; + + console.log("ReportChart------------",ReportMenu) + setCurrentReportMenu(ReportMenu); + getData(ReportMenu); + }, []); + + + async function getData(ReportMenu){ + try { + + let DownloadList=JSON.parse(ReportMenu?.DownloadKey); + console.log("ReportChart------------1",DownloadList) + if(DownloadList.length>0){ + await Promise.all( + DownloadList.map(async (item,index) => { + let allReportData= await DownloadReport(item); + console.log('allReportData',allReportData,item); + if(allReportData.length>0){ + let repotKey=item; + repotKey["data"]=allReportData + console.log("repotKey----",repotKey) + setisDataFound(true); + return repotKey + // setReportData(allReportData); + // setProcessing(false); + // setisDataFound(true); + } + else{ + notify('No data found'); + setisDataFound(false); + setProcessing(false); + } + }) + ).then((res)=>{ + console.log("Directory is created successfully",res) + setReportData(res); + setProcessing(false); + return + }); + + } + } catch (err) { + setProcessing(false); + console.log(err); + } + + } + + async function DownloadReport(ReportMenu){ + let downloadKey=ReportMenu.KeyName; + let loginInfo = await get_item('loginInfo'); + const loginDetails = JSON.parse(loginInfo); + const url=props.baseurl+getMethodName(METHODS.DOWNLOADJSON_METHOD); + let data={ + Downloadtype:downloadKey, + Username: loginDetails.UserId, + Param1: '', + Param2: Platform.OS=="ios"?"iOS":"Android", + }; + + console.log(url,data); + return await getDownloadJson1(url,data) + .then(async(res)=>{ + if (res[downloadKey]) { + let data_arr = res[downloadKey] || []; + return data_arr; + } + else{ + return []; + } + }) + .catch((err)=>{ + console.log('onPage Team error',err); + return []; + }); + } + + + let data=[ + { + name: "OSA", + score: 60, + color: "#a29bfe", + legendFontColor: "#000", + legendFontSize: 15 + },{ + name: "total", + score: 60, + color: "#6c5ce7", + legendFontColor: "#7F7F7F", + legendFontSize: 15 + },] + + // const data1 = { + // labels: ["January", "February", "March", "April", "May", "June"], + // datasets: [ + // { + // data: [20, 45, 28, 80, 99, 43] + // } + // ] + // }; + // const data1=[ + // { + // label: 'January', + // data: [10, 20, 30], + // }, + // { + // label: 'February', + // data: [40, 50, 60], + // }, + // { + // label: 'March', + // data: [70, 80, 90], + // }, + // ] + +// const minValue = 80; + +// function* yLabel() { +// yield* [minValue, 90, 100]; +// } + +// const datapoints = [89, 88, 96, 97, 94, 91, 88].map( +// (datapoint) => datapoint - minValue - 1, +// ); + +const data1 = { + labels: ["TotalAttempt", "RightAnswer"], + datasets: [ + { + data: [12, 6] + } + ] + }; + +// const data1 = { +// labels: ['Sat', 'Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri'], +// datasets: [ +// { +// data: [89, 88, 96, 97, 94, 91, 88], +// }, +// ], +// }; + + +const screenWidth = Dimensions.get('window').width; + // const yLabelIterator = yLabel(); + + + return ( + + {processing && } + + + + + {currentReportMenu.ReportName} + + { !props?.isDataDownloaded && } + { + + { isDataFound==false && + + {ST.NoDataAvailable} + + } + + { + + + + <> + {reportData && reportData?.map((item)=>{ + console.log("item?.data--------",item?.data) + let label=[]; + let labelVal=[]; + let barColor=[] + item && item?.data && item?.data?.map((item)=>{ + label.push(item?.name) + labelVal.push(item?.score||0) + barColor.push(()=>item?.color) + }) + + const structData = { + labels: label, + datasets: [ + { + data: labelVal, + colors: barColor, + }, + ], + }; + + const dataWithPercentages = data?.map((item,i) => ({ + name: item?.name, + score: (item?.score / 100) * 100, + color:item?.color + })); + return( + <> + + + {item?.Title} + + {console.log("item---",item)} + { + item?.GraphType=="Pie" && item?.data && item?.data[0].hasOwnProperty("score") && + `rgba(255, 255, 255, ${opacity})`, + labelColor: (opacity = 1) => `rgb(255, 0, 0, ${opacity})`, + style: { + borderRadius: 16 + }, + propsForDots: { + r: "2", + strokeWidth: "2", + stroke: "#ffa726" + } + }} + accessor={"score"} + backgroundColor={"transparent"} + // paddingLeft={"15"} + center={[20,-10]} + absolute + /> + + } + { + + item?.GraphType=="Column" && + + `rgba(0, 255, 0, 100)`, + // labelColor: (opacity = 1) => `rgba(56, 103, 214, ${opacity})`, + backgroundGradientFrom: '#1E2923', + backgroundGradientTo: '#08130D', + color: (opacity = 1) => `rgba(255, 255, 255, ${opacity})`, + labelColor: (opacity = 1) => `rgba(255, 255, 255, ${opacity})`, + style: { + // borderColor:"#000000", + // borderWidth:10, + // borderRadius: 30, + }, + + fillShadowGradient:'#00cec9', + fillShadowGradientOpacity:1, + // showBarTops:false, + // formatYLabel: () => yLabelIterator.next().value, + // data: data.datasets, + // paddingRight: Number, + // useShadowColorFromDataset: true, + propsForDots: { + r: '0', + strokeWidth: '0', + stroke: '#000000', + }, + yLabelFormatter: (value) => `${value}%` + }} + animation={{ + duration: 2000, + }} + withCustomBarColorFromData={true} + // flatColor={true} + /> + + } + + + ) + }) + + } + + + } + + + } + + + + + ); + } + + + +export default connect(mapStateToProps, mapDispatchToProps)(ReportChart); \ No newline at end of file diff --git a/PerformicsSrc/src/screens/ReportDetail.js b/PerformicsSrc/src/screens/ReportDetail.js new file mode 100644 index 0000000..6a8333a --- /dev/null +++ b/PerformicsSrc/src/screens/ReportDetail.js @@ -0,0 +1,458 @@ +import React,{useState,useEffect} from 'react'; +import Container from '../components/container'; +import { useRoute } from '@react-navigation/native'; +import { globalStyles,customStyles,GetPageTheme } from "../styles/Global"; +import {StatusBar,Image,TextInput,View,Text,ScrollView,TouchableOpacity,Platform,PermissionsAndroid,FlatList, StyleSheet, Dimensions,BackHandler} from 'react-native'; +import { ReactReduxContext,connect,useSelector, useDispatch } from 'react-redux'; +import { mapStateToProps,mapDispatchToProps } from '../reducers/contextProvider'; +import SQLite from 'react-native-sqlite-2'; +import {notify} from '../components/notify'; +import moment from 'moment'; +import {getDownloadJson,DownloadData, getDownloadJson1} from '../controller/functions'; +import {get_item,set_item,clear_item} from '../components/localStorage'; +import {version,sloganline,appname,testurl, db} from '../constants/constants'; +import CustomHeader from '../components/customHeader'; +import {Card} from 'react-native-paper'; +import {AntDesign} from '../components/icons'; +import { WebView } from 'react-native-webview'; +import CustomLoader from '../components/CustomLoader'; +import NoDataComponent from '../components/NoDataComponent'; +import LinearGradient from 'react-native-linear-gradient'; +import { getFolderName, getMethodName, METHODS } from '../constants/methodNames'; +import { DataTable } from 'react-native-paper'; + +function ReportDetail(props) { + const route = useRoute(); + const ST=props.StaticText || {}; + // get all theme styles acc to current theme set + const PageTheme=GetPageTheme(props.DarkMode,route.name); + const customStyle=customStyles(props.DarkMode,route.name); + const [processing, setProcessing] = useState(true); + const [isFromStoreWises, setIsfromStoreWise] = useState(''); + const [isDataFound, setisDataFound] = useState(false); + const [reportData, setReportData] = useState([]); + const [reportConfig, setReportConfig] = useState([]); + const [aggrData, setAggrData] = useState({}); + const [cols, setcols] = useState([]); + const [colWidth, setColWidth] = useState('100%'); + const [currentReportMenu, setCurrentReportMenu] = useState({}); + const [designation, setDesignation] = useState(''); + const d1=new Date(); + const d2=moment(d1).format('MM/DD/YYYY'); + const { height } = Dimensions.get('window'); + + useEffect(() => { + let params=props.route.params? props.route.params:{}; + let ReportMenu=(params.ReportData||params?.ExtraData?.ReportData) || {}; + // console.log("ReportMenuNew---",JSON.stringify(ReportMenu)) + setCurrentReportMenu(ReportMenu); + getData(ReportMenu,params); + + // if(isFromStoreWises==true){ + // BackHandler.addEventListener('hardwareBackPress', () => { + // // Return true to prevent default behavior (going back) + // props.navigation.replace('StoreList'); + // return true; + // }); + + // } + + }, []); + + + + async function getData(ReportMenu,params){ + try { + let config=ReportMenu?.ColumnConfig + let configValue= (config && JSON.parse(config))||[] + let configArr=configValue.length>0? configValue : [] + setReportConfig(configArr) + + let allReportData= await DownloadReport(ReportMenu,params); + console.log('allReportData',allReportData); + console.log('ReportMenu',ReportMenu); + if(allReportData.length>0){ + let data=allReportData[0]; + console.log('data',data); + if(data.ReportValue!=null && data.ReportValue!=''){ + let TotalIndex=allReportData.findIndex(i=>i.ReportValue=='Total'); + console.log('TotalIndex:',TotalIndex) + if(TotalIndex>=0){ + let aggrgateData=allReportData[TotalIndex]; + console.log('aggrgateData',aggrgateData); + setAggrData(aggrgateData); + let newReports=allReportData + newReports.splice(TotalIndex,1); + console.log('newReports',newReports); + setReportData(newReports); + } + else{ + setReportData(allReportData); + } + } + else{ + setReportData(allReportData); + } + + + let allCols=[]; + let i=0; + let keylen=Object.keys(data).length; + + + for(let key in data){ + let obj={'actual_colname':key}; + let colname=key.replace(/[$$]/g,' ').replace(/Percent/g,'%'); + obj['colname']=colname; + let dontShowCol=(colname=='Srno' || colname=='ReportValue'); + if(!dontShowCol){ + allCols.push(obj); + } + + if(i==keylen-1){ + console.log('allCols:',allCols); + setcols(allCols); + let colLen=allCols.length; + let width=94/colLen; + setColWidth(width+'%'); + } + i++; + } + + + + setProcessing(false); + setisDataFound(true); + } + else{ + notify('No data found'); + setProcessing(false); + } + + } catch (err) { + setProcessing(false); + console.log(err); + } + } + + async function DownloadReport(ReportMenu,params){ + let downloadKey=ReportMenu?.DownloadKey; + ///new changes + let storeInfo = params.storeData || {}; + let _fromStoreWise = params._fromStoreWise!=null && params._fromStoreWise!=''?params._fromStoreWise : false + setIsfromStoreWise(_fromStoreWise) + console.log("checkdownloadkey---",params + "\n\n\n"+ ReportMenu) + let NavigateBy=ReportMenu?.NavigateBy; + let storeData=ReportMenu?.storeData; + let IsLocalDB=ReportMenu?.IsLocalDB=="true" || ReportMenu?.IsLocalDB==true + console.log("checkislocaldb-",IsLocalDB) + + if(IsLocalDB){ + + let arr=[]; + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + let q=`select * from ${downloadKey} `; + await txn.executeSql(q,[],async function (txn2, txnres) { + console.log('added products subcats:',txnres.rows.length) + if(txnres.rows.length>0){ + for(var i=0;i{ + if (res[downloadKey]) { + let data_arr = res[downloadKey] || []; + return data_arr; + } + else{ + return []; + } + }) + .catch((err)=>{ + console.log('onPage Team error',err); + return []; + }); + } + } + + const columnWidths = cols?.map((col, colIndex) => { + const headerLength = col.actual_colname?.length || 0; + + let maxCellLength = 0; + cols?.forEach(row => { + const key = col?.coloum_name; + const value = row[key] ? row[key].toString() : ""; + if (value.length > maxCellLength) { + maxCellLength = value.length; + } + }); + + // const maxTextLength = Math.max(headerLength, maxCellLength); + // const width = Math.max(80, maxTextLength * 25); // 9px per character, min 80px + + const maxTextLength = Math.max(headerLength, maxCellLength); + const estimatedWidth = maxTextLength * 15; + + // Clamp width between 80px and 150px + const width = Math.min(Math.max(120, estimatedWidth), 200); + + return width; + }); + + function gotoDailyMenuScreen(props) { + let params=props.route.params? props.route.params:{}; + let _fromStoreWise = + params._fromStoreWise != null ? params._fromStoreWise : false; + let isNonMerchan = + params.isNonMerchans != null ? params.isNonMerchans : false; + let isStoreSearch = + params.isStoreSearch != null ? params.isStoreSearch : false; + let isNonProgs = params.isNonProgs != null ? params.isNonProgs : false; + let isAdhocScreen = params.isAdhoc != null ? params.isAdhoc : false; + let isBeatPlan = params.isBeat != null ? params.isBeat : false; + let storeData = params.storeData || {}; + props.navigation.replace('StoreDailyMenu', { storeData: storeData, 'isAdhoc': isAdhocScreen, 'isBeat': isBeatPlan, 'isNonMerchans': isNonMerchan, isNonProgs: isNonProgs, isStoreSearch: isStoreSearch }); + } + + // Define handleBackPress function here + const handleBackPress = () => { + props.navigation.replace('StoreList'); // Navigate to StoreList on back press + }; + + return ( + + {processing && } + {/* {console.log("helooooo-->",isFromStoreWises)} */} + + + + + {currentReportMenu?.ReportName || currentReportMenu?.ContentType} + + {!props.isDataDownloaded && } + {props.isDataDownloaded === true && + + {isDataFound === false && + + {ST.NoDataAvailable} + + } + + {isDataFound === true && + + {currentReportMenu.ReportType === 'Tabular' && + + + + + + {cols?.map((col, colindex) => ( + + + + {col.actual_colname} + + + + ))} + + + + + + + {reportData?.length > 0 && + reportData?.map((item, index) => { + let FieldName = reportConfig[0]?.FieldName; + let FieldNameObj = reportConfig?.find((val) => { + return item[val?.FieldName] == val?.FieldValue; + }); + + let configValueMatch = false; + if (FieldNameObj) { + configValueMatch = item[FieldNameObj?.FieldName] == FieldNameObj?.FieldValue; + } + + return ( + + {cols?.map((col, colindex) => { + let keyValue = col?.actual_colname != null ? item[col?.actual_colname] : ''; + let isString = isNaN(keyValue); + let str = String(keyValue).replace("%", ""); + + let ColorArr = configValueMatch && FieldNameObj?.Color ? FieldNameObj.Color : null; + let ColorCode = null; + + if (!isNaN(str) && ColorArr) { + ColorCode = ColorArr.find((colorItem) => { + return ( + eval(str + (colorItem?.MinRange || "")) && + eval(str + (colorItem?.MaxRange || "")) + ); + }); + } + + return ( + + + + {keyValue} + + + + ); + })} + + ); + })} + + + + + + } + + {currentReportMenu.ReportType === 'Card' && + + + {Object.keys(aggrData).length > 0 && + + + {'Total'} + + + {cols.map((col, colindex) => ( + + {col.colname + ' :'} + {col.colname != null ? aggrData[col.actual_colname] : ''} + + ))} + + + } + + {reportData.length > 0 && + reportData.map((item, index) => ( + + {cols.map((col, colindex) => ( + + {col.colname + ' :'} + {col.colname != null ? item[col.actual_colname] : ''} + + ))} + + )) + } + + + } + + } + + } + + + {props?.route?.params?._fromStoreWise === true && ( + gotoDailyMenuScreen(props)} + style={{ + position: 'absolute', + bottom: 20, + right: 20, + backgroundColor: '#f0f0f0', + paddingVertical: 10, + paddingHorizontal: 20, + borderRadius: 30, + elevation: 4, + shadowColor: '#000', + shadowOffset: { width: 0, height: 2 }, + shadowOpacity: 0.3, + shadowRadius: 3, + }} + > + + Skip + + +)} + + + + ); + } + +export default connect(mapStateToProps, mapDispatchToProps)(ReportDetail); \ No newline at end of file diff --git a/PerformicsSrc/src/screens/ReportDetailNew.js b/PerformicsSrc/src/screens/ReportDetailNew.js new file mode 100644 index 0000000..8cb17c8 --- /dev/null +++ b/PerformicsSrc/src/screens/ReportDetailNew.js @@ -0,0 +1,1320 @@ +import React,{useState,useEffect,useRef} from 'react'; +import Container from '../components/container'; +import { useRoute } from '@react-navigation/native'; +import { globalStyles,customStyles,GetPageTheme } from "../styles/Global"; +import {StatusBar,Image,TextInput,View,Text,ScrollView,TouchableOpacity,Platform,PermissionsAndroid,FlatList, Alert, Animated, AppState, Keyboard,StyleSheet,ActivityIndicator, Appearance} from 'react-native'; +import { ReactReduxContext,connect,useSelector, useDispatch } from 'react-redux'; +import { mapStateToProps,mapDispatchToProps } from '../reducers/contextProvider'; +import {notify} from '../components/notify'; +import moment from 'moment'; +import {getDownloadJson,getKPIFields} from '../controller/functions'; +import {get_item,set_item,clear_item} from '../components/localStorage'; +import {version,sloganline,appname,testurl,db, colors_Arr, common_ImagePath, ImageFolderPath} from '../constants/constants'; +import CustomHeader from '../components/customHeader'; +import {AntDesign, Entypo,Fontisto, FontAwesome, MaterialCommunityIcons} from '../components/icons'; +import CustomLoader from '../components/CustomLoader'; +import LinearGradient from 'react-native-linear-gradient'; + +import { CustomPicker } from '../components/CustomPicker'; +import DateTimePickerModal from 'react-native-modal-datetime-picker'; + +function ReportDetailNew(props) { + const route = useRoute(); + const ST=props.StaticText || {}; + + // get all theme styles acc to current theme set + const PageTheme=GetPageTheme(props.DarkMode,route.name); + const customStyle=customStyles(props.DarkMode,route.name); + const animatedChoice=useRef(new Animated.Value(0)).current; + + const [processing, setProcessing] = useState(false); + const [loaderTitle, setLoaderTitle] = useState('loading...'); + const [isAdhocScreen, setIsAdhocScreen] = useState(false); + const [storeData, setStoreData] = useState({}); + const [currentMenu, setCurrentMenu] = useState({}); + const [brandData, setBrandData] = useState([]); + const [rerenderdata, setrerenderdata]= useState(0); + const [rerenderdata2, setrerenderdata2]= useState(0); + const [KPIFields, setKPIFields] = useState([]); + const [showSwitchCamera,setShowSwitchCamera]= useState(false); + + const [AddVisibility, setAddVisibility] = useState([]); + const [AddVisFormData, setAddVisFormData] = useState({}); + const [isAddVisPresent, setIsAddVisPresent] = useState(0); + const [showAlert, setShowAlert] = useState(false); + const [Companies, setCompanies] = useState([]); + const [Categories, setCategories] = useState([]); + const [SubCategories, setSubCategories] = useState([]); + const [Brands, setBrands] = useState([]); + const [DisplayList, setDisplayList] = useState([]); + const [hasUnsavedChanges,setHasUnsavedChanges] = useState(false); + const [showCamera, setShowCamera] = useState(false); + const showCameraRef = React.useRef(false); + const [StoreCameraAllow, setStoreCameraAllow] = useState(true); + + const [SelectedImg, setSelectedImg] = useState(''); + const [showModal, setShowModal] = useState(false); + const [reCapImgModalObj, setReCapImgModalObj] = useState({}); + const [showImageSaveOp, setShowImageSaveOp] = useState(true); + const [ImgMadCount, setImgMadCount] = useState({img1:0,img2:0}); + + const [isDatePickerVisible, setDatePickerVisibility] = useState(false); + const [selectedDate, setSelectedDate] = useState(null); + + const hasUnsavedChangesRef = React.useRef(hasUnsavedChanges); + const WindowDataRef=React.useRef(AddVisibility); + const StoreIdRef=React.useRef(null); + const ScreenNameRef=React.useRef(''); + + const VisFormDataRef=React.useRef(AddVisFormData); + const isAddVisPresentRef=React.useRef(isAddVisPresent) + + const d1=new Date(); + const d2=moment(d1).format('MM/DD/YYYY'); + + const [data, setData] = useState([]); + const [groupedData, setGroupedData] = useState([]); + const [uniqueBrandData, setUniqueBrandData] = useState([]); + + const [overall, setOverAll] = useState([]); + const [subCategory, setSubCateogry] = useState([]); + const [detailed, setDetailed] = useState([]); + + const [loading, setLoading] = useState(false); + const [daburSummary, setDaburSummary] = useState({ total: 0, available: 0 }); + +// let jsonData ={ +// "status": 1, +// "output": { +// "store_id": "2418.0", +// "category_id": "3d7242a8-19c4-4417-8b76-2e87abb1e52b", +// "visit_date": "2024-12-25", +// "shop_msl_score": null, +// "shop_sos_score": 2.0, +// "report": { +// "overall": [ +// { +// "kpi_name": "MSL", +// "value": "0%" +// }, +// { +// "kpi_name": "SOS", +// "value": "70%" +// } +// ], +// "detailed": [ +// { +// "kpi_level": "sub_category", +// "data": [ +// { +// "sub_category": "Muesli", +// "data": [ +// { +// "kpi_name": "MSL", +// "kpi_type": "presence", +// "sub_category_score": "0%", +// "data": [ +// { +// "present_skus": [ + +// ] +// }, +// { +// "absent_skus": [ + +// ] +// } +// ] +// }, +// { +// "kpi_name": "SOS", +// "kpi_type": "share of shelf", +// "self_brand_subcategory_score": "81%", +// "data": [ +// { +// "brand_name": "Kelloggs", +// "value": "81%", +// "facings": 21, +// "metadata": { + +// } +// }, +// { +// "brand_name": "Yoga Bar", +// "value": "19%", +// "facings": 5, +// "metadata": { + +// } +// } +// ] +// } +// ] +// }, +// { +// "sub_category": "Corn", +// "data": [ +// { +// "kpi_name": "MSL", +// "kpi_type": "presence", +// "sub_category_score": "0%", +// "data": [ +// { +// "present_skus": [ + +// ] +// }, +// { +// "absent_skus": [ + +// ] +// } +// ] +// }, +// { +// "kpi_name": "SOS", +// "kpi_type": "share of shelf", +// "self_brand_subcategory_score": "77%", +// "data": [ +// { +// "brand_name": "Aarambh", +// "value": "23%", +// "facings": 7, +// "metadata": { + +// } +// }, +// { +// "brand_name": "Kelloggs", +// "value": "77%", +// "facings": 23, +// "metadata": { + +// } +// } +// ] +// } +// ] +// }, +// { +// "sub_category": "Chocos", +// "data": [ +// { +// "kpi_name": "MSL", +// "kpi_type": "presence", +// "sub_category_score": "0%", +// "data": [ +// { +// "present_skus": [ + +// ] +// }, +// { +// "absent_skus": [ + +// ] +// } +// ] +// }, +// { +// "kpi_name": "SOS", +// "kpi_type": "share of shelf", +// "self_brand_subcategory_score": "82%", +// "data": [ +// { +// "brand_name": "Kelloggs", +// "value": "82%", +// "facings": 33, +// "metadata": { + +// } +// }, +// { +// "brand_name": "Kwality", +// "value": "18%", +// "facings": 7, +// "metadata": { + +// } +// } +// ] +// } +// ] +// }, +// { +// "sub_category": "Oats", +// "data": [ +// { +// "kpi_name": "MSL", +// "kpi_type": "presence", +// "sub_category_score": "0%", +// "data": [ +// { +// "present_skus": [ + +// ] +// }, +// { +// "absent_skus": [ + +// ] +// } +// ] +// }, +// { +// "kpi_name": "SOS", +// "kpi_type": "share of shelf", +// "self_brand_subcategory_score": "45%", +// "data": [ +// { +// "brand_name": "Aarambh", +// "value": "5%", +// "facings": 2, +// "metadata": { + +// } +// }, +// { +// "brand_name": "Bagrrys", +// "value": "41%", +// "facings": 18, +// "metadata": { + +// } +// }, +// { +// "brand_name": "Kelloggs", +// "value": "45%", +// "facings": 20, +// "metadata": { + +// } +// }, +// { +// "brand_name": "Saffola", +// "value": "9%", +// "facings": 4, +// "metadata": { + +// } +// } +// ] +// } +// ] +// }, +// { +// "sub_category": "Others", +// "data": [ +// { +// "kpi_name": "MSL", +// "kpi_type": "presence", +// "sub_category_score": "0%", +// "data": [ +// { +// "present_skus": [ + +// ] +// }, +// { +// "absent_skus": [ + +// ] +// } +// ] +// }, +// { +// "kpi_name": "SOS", +// "kpi_type": "share of shelf", +// "self_brand_subcategory_score": "100%", +// "data": [ +// { +// "brand_name": "Kelloggs", +// "value": "100%", +// "facings": 4, +// "metadata": { + +// } +// } +// ] +// } +// ] +// } +// ] +// } +// ] +// }, +// "images": [ +// { +// "shelf_type": "Primary Shelf", +// "raw_images": [ +// { +// "url": "https://view.shelfwatch.io/?url=https://storage.googleapis.com/pd-sw-prod-us-core-sw2/dist/test_images_modified/e0b92c12-8cfe-473f-bdf6-d4b4ee2c1ee3_169806/9bf3afbf-b8da-44a1-b30e-1827572b1e1a_1.jpg", +// "metadata": { + +// } +// }, +// { +// "url": "https://view.shelfwatch.io/?url=https://storage.googleapis.com/pd-sw-prod-us-core-sw2/dist/test_images_modified/e0b92c12-8cfe-473f-bdf6-d4b4ee2c1ee3_169806/a3194f19-5032-480d-b479-1f2a3fb275bd_1.jpg", +// "metadata": { + +// } +// } +// ], +// "stitched_images": [ +// { +// "url": "https://view.shelfwatch.io/?url=https://storage.googleapis.com/pd-sw-prod-us-core-sw2//mnt/gcp/dist/analytics_stitch/stitched_images/1012/1bbb33d8006f49ad8554062744503273.jpg", +// "metadata": { + +// } +// } +// ] +// } +// ] +// } +// } + +// const myJSON = JSON.stringify(jsonData); + +// console.log("checkjson--",myJSON); + + useEffect(() => { + StatusBar.setBarStyle('dark-content'); + let params=props.route.params? props.route.params:{}; + let storeData1=params.storeData || {}; + let menu1=params.menu || {}; + let cameraAllow=storeData1.CameraAllow=='true' || storeData1.CameraAllow==1?true:false; + setStoreCameraAllow(cameraAllow); + + let isAdhoc=params.isAdhoc || false; + setIsAdhocScreen(isAdhoc); + setStoreData(storeData1); + setCurrentMenu(menu1); + + StoreIdRef.current=storeData1.StoreId + ScreenNameRef.current=menu1.ScreenName + getData(storeData1,menu1); + + // const AppStateSubscription = AppState.addEventListener('change', (pro)=>{ _handleAppStateChange(pro)}); + const unsubscribe=props.navigation.addListener('beforeRemove', onBeforeRemove); + + return function cleanup() { + // AppStateSubscription.remove(); + return unsubscribe; + }; + }, []); + + + + const showDatePicker = () => { + setDatePickerVisibility(true); + }; + + const hideDatePicker = () => { + setDatePickerVisibility(false); + }; + + const handleConfirm = (date) => { + setSelectedDate(date); // Save the selected date in state + hideDatePicker(); + }; + + + function onBeforeRemove(e){ + if(showCameraRef.current==true){ + e.preventDefault(); + BgShowCamera(false); + } + else{ + if (hasUnsavedChangesRef.current==true) { + e.preventDefault(); // Prevent default behavior of leaving the screen + onRemoveScreen(e); + } + else{ + return; + } + } + } + + function onRemoveScreen(e){ + Alert.alert( + "", + "Do you really want to exit the screen?", + [ + { + text: "Cancel", + onPress: () => {}, + style: "cancel" + }, + { text: ST.OK, onPress: async () => { + BgUnsavedChanges(false) + await clear_item('storeData') + // setHasUnsavedChanges(false); + props.navigation.dispatch(e.data.action);} } + ] + ); + } + + function BgUnsavedChanges(val){ + hasUnsavedChangesRef.current=val + setHasUnsavedChanges(val); + } + + function BgShowCamera(val){ + showCameraRef.current=val + setShowCamera(val); + } + + function BgWindowData(val){ + WindowDataRef.current=val + setAddVisibility(val); + } + + function BgAddVisFormData(val){ + VisFormDataRef.current=val + setAddVisFormData(val); + } + + + + + async function getData(storeData1,menu1){ + try { + let {StoreId,ChainId,StateId,StoreTypeId}=storeData1; + + let AllKPIFields=await getKPIFields(menu1); + setKPIFields(AllKPIFields); + + + + + await db.transaction(async function (txn) { + + let q4=`SELECT StoreId,StoreName from Mapping_JourneyPlan UNION SELECT StoreId,StoreName FROM Adhoc_JourneyPlan`; + + await txn.executeSql(q4,[],async function (txn2, txnres2) { + if(txnres2.rows.length>0){ + let arr=[]; + for(var i=0;i0){ + let arr=[]; + for(var i=0;ii.KPIFieldName=='CompVisCameraReq'); + let AddVisCameraReqObj=AddVisCameraReqI>=0?KPIFields[AddVisCameraReqI]:{}; + let CompVisCameraReq=AddVisCameraReqI>=0?AddVisCameraReqObj['KPIFieldEnable']:true; + + + + if((StoreName=='' || StoreName==null )|| (StoreId=='' || StoreId==null)){ + isValid=false; + notify('Please select Store Name','SHORT'); + } + else if((CategoryName=='' || CategoryName==null )|| (CategoryId=='' || CategoryId==null)){ + isValid=false; + notify('Please select category','SHORT'); + } + else if(selectedDate=='' || selectedDate==null) + { + isValid=false; + notify('Please select date','SHORT'); + } + + + console.log('isValid:',isValid); + return isValid; + } + + + function onselectionChange(option,keyLbl,keyVal,otherData){ + console.log('checkselection',option) + let CompanyId=otherData.CompanyId!=null?otherData.CompanyId:''; + let data=AddVisFormData; + data[keyVal]=option.value; + data[keyLbl]=option.label; + BgAddVisFormData(data) + BgUnsavedChanges(true) + CleanSelector(option,keyLbl,data,CompanyId) + setrerenderdata(!rerenderdata); + } + + function CleanSelector(option,keyLbl='',data={},CompanyId){ + + if(keyLbl=='Company'){ + loadData(option.value,'Categories'); + + data['CategoryId']=''; + data['CategoryName']=''; + data['SubCategoryId']=''; + data['SubCategoryName']=''; + data['BrandId']=''; + data['BrandName']=''; + + data['DisplayId']='' + data['DisplayName']='' + + data['Image1Path']='' + + data['Remark']='' + } + else if(keyLbl=='CategoryName'){ + console.log('CompanyId:',CompanyId); + loadData(option.value,'SubCategories',CompanyId); + + data['SubCategoryId']=''; + data['SubCategoryName']=''; + data['BrandId']=''; + data['BrandName']=''; + + data['DisplayId']='' + data['DisplayName']='' + + data['Image1Path']='' + + data['Remark']='' + } + else if(keyLbl=='SubCategoryName'){ + console.log('CompanyId:',CompanyId); + loadData(option.value,'Brands',CompanyId); + + data['BrandId']=''; + data['BrandName']=''; + + data['DisplayId']='' + data['DisplayName']='' + + data['Image1Path']='' + + data['Remark']='' + }else if(keyLbl=='BrandName'){ + + // clear brand + + data['DisplayId']='' + data['DisplayName']='' + + data['Image1Path']='' + + data['Remark']='' + + }else if(keyLbl=='DisplayName'){ + + // clear brand + + data['Image1Path']='' + + data['Remark']='' + + } + setrerenderdata(!rerenderdata); + } + + async function loadData(qId,type,CompanyId){ + try { + await db.transaction(async function (txn) { + let q=''; + if(type=='Categories') q=`select distinct CategoryId,CategoryName from Master_Competitor where (CompanyId ='${qId}' or CompanyId = ${qId}) order by CategoryName`; + else if(type=='SubCategories') q=`Select Distinct p.SubCategoryId,p.SubCategoryName from Product_Master p where (p.CategoryId='${qId}' or p.CategoryId=${qId}) and (CompanyId ='${CompanyId}' or CompanyId = ${CompanyId}) order by p.SubCategorySequence`; + else if(type=='Brands') q=`Select Distinct p.BrandName,p.BrandId from Product_Master p Where (p.SubCategoryId='${qId}' or p.SubCategoryId=${qId}) and (CompanyId ='${CompanyId}' or CompanyId = ${CompanyId}) order by p.BrandSequence`; + + await txn.executeSql(q,[],async function (txn2, txnres2) { + if(txnres2.rows.length>0){ + let arr=[]; + for(var i=0;i { + let isValid = await validateForm(); + if (isValid) { + setProcessing(true); + console.log('Fetching--', AddVisFormData.StoreId); + let storeId = AddVisFormData.StoreId; + // console.log("aaaaa", storeId); + let categoryName = AddVisFormData.CategoryName; + let v_date = selectedDate; + + const [month, day, year] = v_date.toLocaleDateString().split('/'); + const fullYear = year.length === 2 ? `20${year}` : year; + const formattedDate = `${fullYear}-${month.padStart(2, '0')}-${day.padStart(2, '0')}`; + const visitdate = formattedDate; + + const visit_date = visitdate; + const store_id = storeId; + const category_name = categoryName; + + const auth_token = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJwcm9qZWN0X2lkIjoiYWIyNmE1NDktMTA3YS00MTkyLTk1YTAtZDM1MzRlMWY4YjNhIn0.DcX-VA-1yCXoJd1WNdhFfTg-PZeNzqQE7NjsRkMrlC8'; + const myHeaders = new Headers(); + myHeaders.append("auth-token", auth_token); + + const requestOptions = { + method: "GET", + headers: myHeaders, + redirect: "follow", + }; + + try { + const response = await fetch( + `https://apis.shelfwatch.io/dabur_insights?visit_date=${visit_date}&store_id=${store_id}&category_name=${category_name}&project_id=ab26a549-107a-4192-95a0-d3534e1f8b3a`, + requestOptions + ); + + if (!response.ok) { + throw new Error(`HTTP error! status: ${response.status}`); + } + + const result = await response.json(); + + // Check if result is 1, then set data, otherwise set empty array + if (result?.status === 1) { + // Set the fetched data to state if status is 1 + setData(result?.output || []); + console.log('Original data---', result?.output); + + const groupedData = result?.output?.filter(item => item['Shelf'] === 'Primary Shelf') || []; + console.log('Grouped data---', groupedData); + setGroupedData(groupedData); + + const uniqueBrands = Array.from( + new Map(groupedData.map(item => [item.Brand, item])).values() + ); + console.log('Unique brands---', uniqueBrands); + setUniqueBrandData(uniqueBrands); + + // Calculate summary for Dabur + const daburItems = groupedData.filter(item => item.Brand === "Dabur"); + const total = daburItems.length; + const available = daburItems.filter(item => item["On Shelf Availability"] === 1).length; + + setDaburSummary({ total, available }); + } else { + // If result status is not 1, set empty data or some default value + setData([]); + setGroupedData([]); + setUniqueBrandData([]); + setDaburSummary({ total: 0, available: 0 }); + console.log('No data available'); + } + + } catch (error) { + console.error("Error fetching data:", error); + } finally { + setProcessing(false); + } + } + }; + + + const fetchIRnewReportData = async () => { + let isValid = await validateForm(); + if(isValid){ + setProcessing(true); + // let storeId = AddVisFormData.StoreId; + // console.log("aaaaa", storeId); + //let categoryName = AddVisFormData.CategoryName; + console.log("categoryiddd->",AddVisFormData.categoryId); + + let v_date = selectedDate; + const [month, day, year] = v_date.toLocaleDateString().split('/'); + const fullYear = year.length === 2 ? `20${year}` : year; + const formattedDate = `${fullYear}-${month.padStart(2, '0')}-${day.padStart(2, '0')}`; + const visitdate = formattedDate; + + const visit_date = visitdate; + console.log("visit_date",visit_date) + // const store_id = storeId; + // const category_name = categoryName; + + + + const storeId = "2202"; + const categoryId = "3d7242a8-19c4-4417-8b76-2e87abb1e52b"; + const projectId = "e0b92c12-8cfe-473f-bdf6-d4b4ee2c1ee3"; + + const url = `https://apis.shelfwatch.io/get_kelloggs_insights?visit_date=${visit_date}&store_id=${storeId}&category_id=${categoryId}&project_id=${projectId}`; + + try { + const response = await fetch(url); + const json = await response.json(); + if (json.status === 1) { + setProcessing(false); + const overall = json.output.report.overall; // MSL & SOS + // const detailed = json.output.report.detailed[0].data; // Array of subcategories + const detailed = json.output.report.detailed.flatMap(item => item.data || []);; // Array of subcategories + // const subCategory = json.output.report.detailed[0].kpi_level; // "sub_category" + setOverAll(overall); + setSubCateogry(subCategory); + setDetailed(detailed) + + console.log("Overall:", overall); + console.log("Subcategory Level:", subCategory); + console.log("Detailed Subcategories:", detailed); + } else { + setProcessing(false); + setOverAll([]); + setSubCateogry([]); + setDetailed([]) + + } + } catch (error) { + setProcessing(false); + console.error("Error fetching report:", error); + } + + } + +}; + + +const _render_newIR_report = () => { +// const overall = jsonData.output.report.overall; +// const detailed = jsonData.output.report.detailed[0].data; +// const subCategory = jsonData.output.report.detailed[0].kpi_level; + +const renderSubCategory = ({ item }) => ( + <> + + {/* Sub-category Header */} + + {item.sub_category} + + + {/* KPI Rows */} + {item.data.map((kpi, kpiIdx) => ( + k.kpi_name === 'SOS') ? 0 : 1, + borderColor: '#e0e0e0', + }} + > + {kpi.kpi_name} + {kpi.sub_category_score || kpi.self_brand_subcategory_score} + + ))} + + {/* SOS Brand Block (only if exists) */} + {item.data.map((kpi, kpiIdx) => ( + kpi.kpi_name === 'SOS' && kpi.data && ( + + Brand Details + {[...kpi.data].sort((a, b) => (a.brand_name === 'Kelloggs' ? -1 : b.brand_name === 'Kelloggs' ? 1 : 0)) + .map((brand, brandIdx) => ( + + • {brand.brand_name} + {brand.value} + + ))} + + ) + ))} + + + + +); + + return ( + <> + + + + + + + + + + + + Store name + {CustomPicker(props,Companies,'StoreName','StoreId','StoreName','StoreId',onselectionChange,{value:AddVisFormData.StoreName,otherData:{}})} + + + + + Category + + {CustomPicker(props,Categories,'CategoryName','CategoryId','CategoryName','CategoryId',onselectionChange,{value:AddVisFormData.CategoryName,otherData:{}})} + + + + + + + + + Select Date + + + + + + + {selectedDate && (Selected Date: {selectedDate.toLocaleDateString()})} + + + + + + {fetchIRnewReportData()}}> + Go + + + + + + { + (rerenderdata== rerenderdata) && + + + Report Details + + + + {/* Store Information */} + {/* + { + AddVisFormData.StoreId && overall.length > 0 && + Store ID: {AddVisFormData.StoreId} + } + + { + AddVisFormData.StoreName && overall.length > 0 && + Store Name: {AddVisFormData.StoreName} + } + + { + AddVisFormData.CategoryName &&overall.length > 0 && + Category: {AddVisFormData.CategoryName} + } + + + */} + + + + + } + + + ( + + + {overall.length>0 && ( + <> + Store Category Score + + + {overall.map((item, idx) => ( + + {item.kpi_name} + {item.value} + + ))} + + + + )} + + + {/* Sub Category Score heading here */} + { + detailed.length>0 &&( + Sub Category Score + ) + } + + + + )} + data={detailed} + renderItem={renderSubCategory} + showsVerticalScrollIndicator={false} + keyExtractor={(item, index) => `${item.sub_category}_${index}`} + contentContainerStyle={{ paddingHorizontal: 10, paddingBottom: 20 }} + /> + + + + ); +}; + + + function _render_ir_report(){ + let xpos=0; + if(animatedChoice!=null ){ + xpos=animatedChoice.interpolate({ + inputRange:[0,1], + outputRange:[0,-75], + }); + } + + let AddVisCameraReqI=KPIFields.findIndex(i=>i.KPIFieldName=='CompVisCameraReq'); + let AddVisCameraReqObj=AddVisCameraReqI>=0?KPIFields[AddVisCameraReqI]:{}; + let CompVisCameraReq=AddVisCameraReqI>=0?AddVisCameraReqObj['KPIFieldEnable']:true; + return ( + + + + + + + + + + + + Store name + {CustomPicker(props,Companies,'StoreName','StoreId','StoreName','StoreId',onselectionChange,{value:AddVisFormData.StoreName,otherData:{}})} + + + + + Category + {/* {CustomPicker(props,Categories,'CategoryName','CategoryId','CategoryName','CategoryId',onselectionChange,{value:AddVisFormData.CategoryName,otherData:{'CompanyId':AddVisFormData.CompanyId!=null?AddVisFormData.CompanyId:''}})} */} + + {CustomPicker(props,Categories,'CategoryName','CategoryId','CategoryName','CategoryId',onselectionChange,{value:AddVisFormData.CategoryName,otherData:{}})} + + + + + + + + + Select Date + + + + + + + {selectedDate && (Selected Date: {selectedDate.toLocaleDateString()})} + + + + + + {fetchData()}}> + Go + + + + + + { + (rerenderdata== rerenderdata) && + + + Report Details + + + + {/* Store Information */} + + { + AddVisFormData.StoreId && uniqueBrandData.length > 0 && + Store ID: {AddVisFormData.StoreId} + } + + { + AddVisFormData.StoreName && uniqueBrandData.length > 0 && + Store Name: {AddVisFormData.StoreName} + } + + { + AddVisFormData.CategoryName &&uniqueBrandData.length > 0 && + Category: {AddVisFormData.CategoryName} + } + {/* Store ID: {AddVisFormData.StoreId} + Store Name: {AddVisFormData.StoreName} + Category: {AddVisFormData.CategoryName} */} + {/* Category: Juices Nectar and Drinks */} + + + + {uniqueBrandData.length > 0 && ( + <> + Primary Shelf + + Share of Shelf + + Brand + SOS % + + index.toString()} + renderItem={({ item }) => ( + + {item.Brand} + {item["SoS % (Brand Level)"]} + + )} + /> + + + {/* { + uniqueBrandData.length > 0 &&( + <> + Summary + + + Brand + Availability + + + Dabur + {`${daburSummary.available} / ${daburSummary.total}`} + + + + + + ) + + } */} + + On Shelf Availability + + Summary + + + Brand + Availability % + + + Dabur + {`${daburSummary.available} / ${daburSummary.total} (${parseInt(daburSummary.available*100/daburSummary.total)}%)`} + + + + + Details + + + SKU + Status + + index.toString()} + renderItem={({ item }) => ( + + {item["SKU Name"]} + {item["On Shelf Availability"] || '0'} + + )} + /> + + + + Asset + + Asset Presence + + Brand + Asset Presence + + index.toString()} + renderItem={({ item }) => ( + + {item.Brand} + {item["Asset Presence"] || '0'} + + )} + /> + + + )} + + + + + } + + ) + } + + return ( + + {processing && } + + {/* */} + + + + + + + {Object.keys(storeData).length == 10000 ? ( + + {_render_ir_report()} + + ) : ( + + {_render_newIR_report()} + + )} + + + + + + + ); +} + + + +const styles = StyleSheet.create({ + container: { + flex: 1, + padding: 1, + backgroundColor: '#fff', + }, + storeInfo: { + marginBottom: 5, + }, + infoText: { + fontSize: 14, + fontWeight: '500', + marginBottom: 2, + marginLeft:10, + color:'#454545' + }, + sectionHeader: { + fontSize: 18, + fontWeight: '700', + marginVertical: 10, + color:'#454545' + }, + table: { + borderWidth: 1, + borderColor: '#ddd', + marginBottom: 20, + }, + tableSOS: { + textAlign: 'center', // Centers text horizontally + fontSize: 18, // Adjust the font size as needed + fontWeight: 'bold', // Optional: Makes the text bold + marginVertical: 10, // Adds space above and below the text + color:'#454545' + }, + tableHeader: { + flexDirection: 'row', + backgroundColor: '#f5f5f5', + borderBottomWidth: 1, + justifyContent: 'center', + alignItems: 'center', + alignSelf: 'center', + textAlign: 'center', + padding: 5, + borderColor: '#ddd', + }, + tableHeaderText: { + flex: 1, + fontSize: 16, + fontWeight: '700', + padding: 5, + textAlign: 'center', + color:'#454545' + }, + tableRow: { + flexDirection: 'row', + borderBottomWidth: 1, + borderColor: '#ddd', + }, + tableCell: { + flex: 1, + fontSize: 14, + padding: 5, + textAlign: 'center', + color:'#454545' + }, + loadingContainer: { flex: 1, justifyContent: "center", alignItems: "center" }, + summaryContainer: { marginVertical: 20, borderWidth: 1, borderColor: "#ccc" }, +}); + + + +export default connect(mapStateToProps, mapDispatchToProps)(ReportDetailNew); \ No newline at end of file diff --git a/PerformicsSrc/src/screens/ReportsMenu.js b/PerformicsSrc/src/screens/ReportsMenu.js new file mode 100644 index 0000000..583e70d --- /dev/null +++ b/PerformicsSrc/src/screens/ReportsMenu.js @@ -0,0 +1,265 @@ +import React, {useState, useEffect} from 'react'; +import Container from '../components/container'; +import {useRoute} from '@react-navigation/native'; +import {globalStyles, customStyles, GetPageTheme} from '../styles/Global'; +import { + StatusBar, + Image, + TextInput, + View, + Text, + ScrollView, + TouchableOpacity, + Platform, + PermissionsAndroid, + FlatList, +} from 'react-native'; +import { + ReactReduxContext, + connect, + useSelector, + useDispatch, +} from 'react-redux'; +import {mapStateToProps, mapDispatchToProps} from '../reducers/contextProvider'; +import SQLite from 'react-native-sqlite-2'; +import {notify} from '../components/notify'; +import moment from 'moment'; +import {getDownloadJson, DownloadData} from '../controller/functions'; +import {get_item, set_item, clear_item} from '../components/localStorage'; +import { + version, + sloganline, + appname, + testurl, + db, +} from '../constants/constants'; +import CustomHeader from '../components/customHeader'; +import {Card} from 'react-native-paper'; +import {AntDesign} from '../components/icons'; +import {WebView} from 'react-native-webview'; +import CustomLoader from '../components/CustomLoader'; +import NoDataComponent from '../components/NoDataComponent'; +import LinearGradient from 'react-native-linear-gradient'; + +function ReportsMenu(props) { + const route = useRoute(); + const ST = props.StaticText || {}; + // get all theme styles acc to current theme set + const PageTheme = GetPageTheme(props.DarkMode, route.name); + const customStyle = customStyles(props.DarkMode, route.name); + const [processing, setProcessing] = useState(true); + const [isDataFound, setisDataFound] = useState(false); + const [reportData, setReportData] = useState([]); + const [designation, setDesignation] = useState(''); + const [paramsState, setParamsState] = useState({}); + + const d1 = new Date(); + const d2 = moment(d1).format('MM/DD/YYYY'); + +useEffect(() => { + const params = route.params ?? props.route?.params ?? {}; + setParamsState(params); + getData(params); +}, []); + + + async function getData(props) { + try { + //let params=props.route.params? props.route.params:{}; + let params = props || {}; + let loginInfo = await get_item('loginInfo'); + const loginDetails = JSON.parse(loginInfo); + let desg = loginDetails.Designation || ''; + let _fromStoreWise = params._fromStoreWise != null ? params._fromStoreWise : false; + setDesignation(desg); + console.log("_fromStoreWise---",_fromStoreWise); + + await db.transaction(async function (txn) { + let q = `SELECT * from Master_MenuReports`; + if (_fromStoreWise) { + q = `SELECT * from Master_MenuReportStoreWise`; + } + + txn.executeSql( + q, + [], + async function (txn2, txnres) { + console.log('txnres.rows.length:', txnres.rows.length,_fromStoreWise); + if (txnres.rows.length > 0) { + let arr = []; + for (var i = 0; i < txnres.rows.length; i++) { + let data = txnres.rows.item(i); + arr.push(data); + if (i == txnres.rows.length - 1) { + setReportData(arr); + setisDataFound(true); + setProcessing(false); + } + } + + if (_fromStoreWise && txnres.rows.length == 1) { + console.log('txnres.rows.item(0)', txnres.rows.item(0)); + console.log("paramssss:",params) + gotoReport(txnres.rows.item(0), params,true); + } + } else { + setProcessing(false); + } + }, + function (txn2, txnerr) { + console.log(txnerr); + setProcessing(false); + }, + ); + }); + } catch (err) { + setProcessing(false); + console.log(err); + } + } + + // function gotoReport(item, params) { + // console.log('item----', item + "\n"+params); + // let _fromStoreWise = + // params._fromStoreWise != null ? params._fromStoreWise : false; + // let isNonMerchans = + // params.isNonMerchans != null ? params.isNonMerchans : false; + // let isStoreSearch = + // params.isStoreSearch != null ? params.isStoreSearch : false; + // let isNonProgs = params.isNonProgs != null ? params.isNonProgs : false; + // let isAdhocScreen = params.isAdhoc != null ? params.isAdhoc : false; + // let isBeatPlan = params.isBeat != null ? params.isBeat : false; + // let storeData = params.storeData || {}; + // if (item.ReportType == 'Graph') { + // props.navigation.navigate('ReportChart', { + // ReportData: item, + // _fromStoreWise: _fromStoreWise, + // 'storeData': storeData, + // 'isAdhoc': isAdhocScreen, 'isBeat': isBeatPlan, + // 'isNonMerchans': isNonMerchans, isNonProgs: isNonProgs, isStoreSearch: isStoreSearch + // }); + // } else { + // props.navigation.navigate('ReportDetail', { + // ReportData: item, + // _fromStoreWise: _fromStoreWise, + // 'storeData': storeData, + // 'isAdhoc': isAdhocScreen, 'isBeat': isBeatPlan, + // 'isNonMerchans': isNonMerchans, isNonProgs: isNonProgs, isStoreSearch: isStoreSearch + // }); + // } + // } + + function gotoReport(item, params) { + console.log('item----', item + "\n"+params); + console.log("currentParams",currentParams); + + let currentParams = route.params || paramsState || {}; + let storeData = currentParams.storeData || {}; + let _fromStoreWise = currentParams._fromStoreWise ?? false; + + let isStoreSearch = currentParams.isStoreSearch ?? false; + let isAdhocScreen = currentParams.isAdhoc ?? false; + let isBeatPlan = currentParams.isBeat ?? false; + let isNonMerchans = currentParams.isNonMerchans ?? false; + let isNonProgs = currentParams.isNonProgs ?? false; + + if (item.ReportType == 'Graph') { + props.navigation.navigate('ReportChart', { + ReportData: item, + _fromStoreWise: _fromStoreWise, + 'storeData': storeData, + 'isAdhoc': isAdhocScreen, 'isBeat': isBeatPlan, + 'isNonMerchans': isNonMerchans, isNonProgs: isNonProgs, isStoreSearch: isStoreSearch + }); + } else { + props.navigation.navigate('ReportDetail', { + ReportData: item, + _fromStoreWise: _fromStoreWise, + 'storeData': storeData, + 'isAdhoc': isAdhocScreen, 'isBeat': isBeatPlan, + 'isNonMerchans': isNonMerchans, isNonProgs: isNonProgs, isStoreSearch: isStoreSearch + }); + } + } + + return ( + + {processing && } + + + + {!props.isDataDownloaded && } + {props.isDataDownloaded == true && ( + + {isDataFound == false && ( + + + {ST.NoDataAvailable} + + + )} + + {isDataFound == true && ( + + + + + {ST.Username + ' :'} + + + {props.UserId} + + + + + {ST.Designation + ' :'} + + + {designation} + + + + + {reportData.length > 0 && + reportData.map((item, index) => { + return ( + { + // gotoReport(item, props); + {console.log("checkprops:","--item",item, "----route", route?.params, "paramsState--",paramsState )} + gotoReport(item, route?.params || paramsState); + + }}> + + {item.ReportName} + + + ); + })} + + + )} + + )} + + + + ); +} + +export default connect(mapStateToProps, mapDispatchToProps)(ReportsMenu); diff --git a/PerformicsSrc/src/screens/ReportsMenuOld.js b/PerformicsSrc/src/screens/ReportsMenuOld.js new file mode 100644 index 0000000..dad1be4 --- /dev/null +++ b/PerformicsSrc/src/screens/ReportsMenuOld.js @@ -0,0 +1,196 @@ +import React,{useState,useEffect} from 'react'; +import Container from '../components/container'; +import { useRoute } from '@react-navigation/native'; +import { globalStyles,customStyles,GetPageTheme } from "../styles/Global"; +import {StatusBar,Image,TextInput,View,Text,ScrollView,TouchableOpacity,Platform,PermissionsAndroid,FlatList} from 'react-native'; +import { ReactReduxContext,connect,useSelector, useDispatch } from 'react-redux'; +import { mapStateToProps,mapDispatchToProps } from '../reducers/contextProvider'; +import SQLite from 'react-native-sqlite-2'; +import {notify} from '../components/notify'; +import moment from 'moment'; +import {getDownloadJson,DownloadData} from '../controller/functions'; +import {get_item,set_item,clear_item} from '../components/localStorage'; +import {version,sloganline,appname,testurl, db} from '../constants/constants'; +import CustomHeader from '../components/customHeader'; +import {Card} from 'react-native-paper'; +import {AntDesign} from '../components/icons'; +import { WebView } from 'react-native-webview'; +import CustomLoader from '../components/CustomLoader'; +import NoDataComponent from '../components/NoDataComponent'; +import LinearGradient from 'react-native-linear-gradient'; + +function ReportsMenu(props) { + const route = useRoute(); + const ST=props.StaticText || {}; + // get all theme styles acc to current theme set + const PageTheme=GetPageTheme(props.DarkMode,route.name); + const customStyle=customStyles(props.DarkMode,route.name); + + const [webviewurl, setWebviewurl] = useState(false); + const [processing, setProcessing] = useState(true); + const [isDataFound, setisDataFound] = useState(false); + const [reportData, setReportData] = useState([]); + const [designation, setDesignation] = useState(''); + const d1=new Date(); + const d2=moment(d1).format('MM/DD/YYYY'); + + useEffect(() => { + getData(); + }, []); + + + async function getData(){ + try { + let loginInfo=await get_item('loginInfo'); + const loginDetails=JSON.parse(loginInfo); + let desg=loginDetails.Designation || ''; + setDesignation(desg); + await db.transaction(async function (txn) { + + let q=`SELECT * from Mapping_JourneyPlan where VisitDate='${d2}'`; + let q2=`SELECT * from Adhoc_JourneyPlan where VisitDate='${d2}'`; + await txn.executeSql(q,[],async function (txn2, txnres) { + if(txnres.rows.length>0){ + setisDataFound(true); + let dd=await getReportData(); + setProcessing(false); + } + else{ + await txn.executeSql(q2,[],async function (txn2, txnres) { + if(txnres.rows.length>0){ + setisDataFound(true); + let dd=await getReportData(); + setProcessing(false); + } + else{ + setProcessing(false); + } + },function (txnE,txnerr) { console.log(txnerr);setProcessing(false); },); + } + },function (txnE,txnerr) { console.log(txnerr); setProcessing(false);},); + + }); + } catch (err) { + setProcessing(false); + console.log(err); + } + } + + + async function getReportData(){ + return new Promise((resolve,reject)=>{ + db.transaction(async function (txn) { + let q=`SELECT * from Report_PromoterMerchandiserPerformance`; + await txn.executeSql(q,[],async function (txn2, txnres) { + let arr=[] + if(txnres.rows.length>0){ + for(var i=0;i{ + return val; + }).catch((err)=>{ + return false; + }); + + } + + return ( + + {processing && } + + + + { !props.isDataDownloaded && } + { props.isDataDownloaded==true && + + + { isDataFound==false && + + {ST.NoDataAvailable} + + } + + { + isDataFound==true && + + + + {ST.Username+' :'} + {props.UserId} + + + {ST.Designation+' :'} + {designation} + + + + + {ST.Performance} + + + + + {ST.Kpi} + + + {ST.Target} + + + {ST.Achivement} + + + + { + reportData.length>0 && + reportData.map((item,index)=>{ + return( + + + {item.KPI} + + + {item.Target} + + + {item.Achivement} + + + ) + }) + } + + + + } + + + } + + + + + ); + } + + + +export default connect(mapStateToProps, mapDispatchToProps)(ReportsMenu); \ No newline at end of file diff --git a/PerformicsSrc/src/screens/ReturnStock.js b/PerformicsSrc/src/screens/ReturnStock.js new file mode 100644 index 0000000..32882f0 --- /dev/null +++ b/PerformicsSrc/src/screens/ReturnStock.js @@ -0,0 +1,1016 @@ +import React, { useState, useEffect, useRef } from 'react'; +import Container from '../components/container'; +import { useRoute } from '@react-navigation/native'; +import { customStyles, GetPageTheme } from "../styles/Global"; +import { Image, TextInput, View, Text, ScrollView, TouchableOpacity, Platform, Alert, Animated, AppState, Keyboard } from 'react-native'; +import { connect } from 'react-redux'; +import { mapStateToProps, mapDispatchToProps } from '../reducers/contextProvider'; +import { notify } from '../components/notify'; +import moment from "dayjs"; +import { getKPIFields, getServerDT, restore_ImageWithMetaData, validateNumber } from '../controller/functions'; +import { get_item, set_item, clear_item } from '../components/localStorage'; +import { db, ImageFolderPath } from '../constants/constants'; +import CustomHeader from '../components/customHeader'; +import { FontAwesome, MaterialCommunityIcons } from '../components/icons'; +import CustomLoader from '../components/CustomLoader'; +import LinearGradient from 'react-native-linear-gradient'; +import { AppTables } from '../constants/tableConstants'; +import * as RNFS from 'react-native-fs'; +import GradientButton from '../components/gradientButton'; + +import CustomModal from '../components/CustomModal'; +import { ConfirmSaveAlert } from '../components/alert'; +import { CustomPicker } from '../components/CustomPicker'; +import CustomCamera from '../components/Camera'; +import CameraImg3 from '../assets/performics/camera_tick.svg'; +import CameraImg5 from '../assets/image/astrickcamera.svg'; + +function ReturnStock(props) { + const route = useRoute(); + const ST = props.StaticText || {}; + // get all theme styles acc to current theme set + const PageTheme = GetPageTheme(props.DarkMode, route.name); + const customStyle = customStyles(props.DarkMode, route.name); + const animatedChoice = useRef(new Animated.Value(0)).current; + + const [processing, setProcessing] = useState(true); + const [loaderTitle, setLoaderTitle] = useState(); + const [isAdhocScreen, setIsAdhocScreen] = useState(false); + const [storeData, setStoreData] = useState({}); + const [StoreCameraAllow, setStoreCameraAllow] = useState(true); + const [currentMenu, setCurrentMenu] = useState({}); + const [brandData, setBrandData] = useState([]); + const [rerenderdata, setrerenderdata] = useState(0); + const [rerenderdata2, setrerenderdata2] = useState(0); + + const [AddVisibility, setAddVisibility] = useState([]); + const [AddVisFormData, setAddVisFormData] = useState({}); + const [isAddVisPresent, setIsAddVisPresent] = useState(0); + const [showAlert, setShowAlert] = useState(false); + const [Categories, setCategories] = useState([]); + const [SubCategories, setSubCategories] = useState([]); + const [Brands, setBrands] = useState([]); + const [ProductsList, setProductsList] = useState([]); + const [ReturnTypeList, setReturnTypeList] = useState([]); + const [hasUnsavedChanges, setHasUnsavedChanges] = useState(false); + const [showCamera, setShowCamera] = useState(false); + const [clickImageType, setClickImageType] = useState('1'); + const [toRemoveId, setToRemoveId] = useState(''); + const [toRemoveItem, setToRemoveItem] = useState({}); + const [showRemoveConfirm_M, setshowRemoveConfirm_M] = useState(false); + const [showRAllC_M, setShowRAllC_M] = useState(false); + const [KPIFields, setKPIFields] = useState([]); + + + const [SelectedImg, setSelectedImg] = useState(''); + const [showModal, setShowModal] = useState(false); + const [reCapImgModalObj, setReCapImgModalObj] = useState({}); + const [showImageSaveOp, setShowImageSaveOp] = useState(true); + + const hasUnsavedChangesRef = React.useRef(hasUnsavedChanges); + const WindowDataRef = React.useRef(AddVisibility); + const StoreIdRef = React.useRef(null); + const ScreenNameRef = React.useRef(''); + + const [showSwitchCamera, setShowSwitchCamera] = useState(false); + + + const VisFormDataRef = React.useRef(AddVisFormData); + const isAddVisPresentRef = React.useRef(isAddVisPresent); + + const d2 = moment().format('MM/DD/YYYY'); + + + useEffect(() => { + setLoaderTitle(ST.Loading + '...') + let params = props.route.params ? props.route.params : {}; + let storeData1 = params.storeData || {}; + let menu1 = params.menu || {}; + let cameraAllow = storeData1.CameraAllow == 'true' || storeData1.CameraAllow == 1 ? true : false; + setStoreCameraAllow(cameraAllow); + + let isAdhoc = params.isAdhoc || false; + + StoreIdRef.current = storeData1.StoreId + ScreenNameRef.current = menu1.ScreenName + setIsAdhocScreen(isAdhoc); + setStoreData(storeData1); + setCurrentMenu(menu1); + + getData(storeData1, menu1); + + const AppStateSubscription = AppState.addEventListener('change', (pro) => { _handleAppStateChange(pro) }); + const unsubscribe = props.navigation.addListener('beforeRemove', onBeforeRemove); + + return function cleanup() { + AppStateSubscription.remove(); + return unsubscribe; + }; + }, []); + + + + const _handleAppStateChange = async (nextAppState) => { + if (nextAppState == 'background' && hasUnsavedChangesRef.current == true) { + let newData = { + storeBGData: WindowDataRef.current, + menuName: ScreenNameRef.current, + StoreId1: StoreIdRef.current, + AddFormData: VisFormDataRef.current, + isVisPresent: isAddVisPresentRef.current, + visiteDate: d2 + } + let WindowsStr = JSON.stringify(newData) + await set_item('storeData', WindowsStr); + } + } + + useEffect(() => { + const unsubscribe = props.navigation.addListener('beforeRemove', onBeforeRemove); + return unsubscribe; + }, [hasUnsavedChanges]); + + + useEffect(() => { + const unsubscribe = props.navigation.addListener('beforeRemove', onBeforeRemove); + return unsubscribe; + }, [showCamera]); + + function BgUnsavedChanges(val) { + hasUnsavedChangesRef.current = val + setHasUnsavedChanges(val); + } + + function BgWindowData(val) { + WindowDataRef.current = val + setAddVisibility(val); + } + + function BgAddVisFormData(val) { + VisFormDataRef.current = val + setAddVisFormData(val); + } + + function BgIsAddVisPresent(val) { + isAddVisPresentRef.current = val + setIsAddVisPresent(val); + } + + + function onBeforeRemove(e) { + if (showCamera == true) { + e.preventDefault(); + setShowCamera(false); + } + else { + if (hasUnsavedChanges == true) { + e.preventDefault(); // Prevent default behavior of leaving the screen + onRemoveScreen(e); + } + else { + return; + } + } + } + function onRemoveScreen(e) { + Alert.alert( + "", + ST.Doyoureallywanttoexitthescreen, + [ + { + text: ST.Cancel, + onPress: () => { }, + style: "cancel" + }, + { + text: ST.OK, onPress: async () => { + BgUnsavedChanges(false) + await clear_item('storeData') + // setHasUnsavedChanges(false); + props.navigation.dispatch(e.data.action); + } + } + ] + ); + } + + async function getData(storeData1, menu1) { + try { + let { StoreId, ChainId, StateId, StoreTypeId } = storeData1; + + let AllKPIFields = await getKPIFields(menu1); + setKPIFields(AllKPIFields); + let isFromDateIndex = AllKPIFields.findIndex(i => i.KPIFieldName == 'ShowFromDate'); + let isFromDateKPIObj = isFromDateIndex >= 0 ? AllKPIFields[isFromDateIndex] : {}; + let isFromDateEnable = isFromDateIndex >= 0 ? isFromDateKPIObj.KPIFieldEnable : true; + + let isToDateIndex = AllKPIFields.findIndex(i => i.KPIFieldName == 'ShowToDate'); + let isToDateKPIObj = isToDateIndex >= 0 ? AllKPIFields[isToDateIndex] : {}; + let isToDateEnable = isToDateIndex >= 0 ? isToDateKPIObj.KPIFieldEnable : true; + + // set switch camera flag as defined in mapping menu flag (if exists) + let SwitchingCameraI = AllKPIFields.findIndex(i => i.KPIFieldName == 'SwitchingCamera'); + let SwitchingCameraObj = SwitchingCameraI >= 0 ? AllKPIFields[SwitchingCameraI] : {}; + let SwitchingCamera = SwitchingCameraI >= 0 ? SwitchingCameraObj.KPIFieldEnable : false; + setShowSwitchCamera(SwitchingCamera); + + let storeBGData1 = [], bgStoreJson = {}, isBgDataExists = false; + let windData = await get_item('storeData') + if (windData != null && windData != '') { + let StoreJson = JSON.parse(windData) + let { storeBGData, menuName, StoreId1, AddFormData, visiteDate } = StoreJson + if (menuName == menu1.ScreenName && StoreId1 == StoreId && visiteDate == d2) { + isBgDataExists = true; + bgStoreJson = StoreJson + if (storeBGData.length > 0) { + storeBGData1 = storeBGData; + BgWindowData(storeBGData) + } + + if (AddFormData != null && Object.keys(AddFormData).length > 0) { + let { CategoryId, SubCategoryId, BrandId, ProductId } = AddFormData; + console.log("AddFormData---------", JSON.stringify(AddFormData)) + // load subcategories if category exists + if (CategoryId != null && CategoryId != '') { + loadData(CategoryId, 'SubCategories'); + } + if (SubCategoryId != null && CategoryId != '') { + loadData(SubCategoryId, 'Brands'); + } + + if (BrandId != null && ProductId != '') { + loadData(BrandId, 'Product'); + } + + BgAddVisFormData(AddFormData) + } + BgUnsavedChanges(true) + } + } + await db.transaction(async function (txn) { + + let q = `Select Distinct p.CategoryId,p.CategoryName from Product_Master p where p.IsCompetitor= 0 order by p.CategorySequence`; + await txn.executeSql(q, [], async function (txn2, txnres2) { + + if (txnres2.rows.length > 0) { + let arr = []; + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + arr.push(data); + if (i == txnres2.rows.length - 1) { setCategories(arr); } + } + } + }, function (txnE, txnerr) { console.log(txnerr); },); + + + let q2 = `Select Distinct ReturnTypeId,ReturnType,IsImageTaken,IsRemarkTaken from Master_StockReturnType order by ReturnType`; + await txn.executeSql(q2, [], async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + let arr = []; + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + arr.push(data); + + if (i == txnres2.rows.length - 1) { + console.log("ReturnList", arr) + setReturnTypeList(arr); + } + } + } + }, function (txnE, txnerr) { console.log(txnerr); },); + + + let q3 = `Select * from ${AppTables.RETURN_STOCK} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' `; + console.log("arr---", q3); + + await txn.executeSql(q3, [], async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + let { JSON_DATA, PRESENT } = data; + let obj = JSON.parse(JSON_DATA) + + let isPresent = PRESENT; + if (i == txnres2.rows.length - 1) { + let { menuName, StoreId1, isVisPresent } = bgStoreJson + + if (!isBgDataExists) { + BgWindowData(obj); + } + else { + isPresent = isVisPresent == 1 ? 1 : 0; + } + + + Animated.timing(animatedChoice, { + toValue: isPresent, + duration: 400, + useNativeDriver: false, + }).start(); + + BgIsAddVisPresent(isPresent); + setProcessing(false); + } + } + } + else { + + if (isBgDataExists) { + let { isVisPresent } = bgStoreJson + let isPresent = isVisPresent == 1 ? 1 : 0; + Animated.timing(animatedChoice, { + toValue: isPresent, + duration: 400, + useNativeDriver: false, + }).start(); + BgIsAddVisPresent(isPresent); + + } + setProcessing(false); + } + }, function (txnE, txnerr) { console.log(txnerr); setProcessing(false); },); + + }); + } catch (err) { + console.log(err); + } + } + + + async function OpenImgModal(imgPath, window, splitItem, splitItemIndex, cameraType) { + setSelectedImg(imgPath) + setShowModal(true); + if ((imgPath != '' && imgPath != null)) { + setShowImageSaveOp(false); + } + else { + setShowImageSaveOp(true); + } + setReCapImgModalObj({ window, splitItem, splitItemIndex, cameraType }) + } + + function cancelImage() { + // setImage1(''); + setSelectedImg(''); + setReCapImgModalObj({}) + setShowModal(false); + } + + async function getImage(imgdata) { + setShowModal(true); + if (typeof imgdata === 'object' && imgdata.errorCode == 'camera_unavailable') { + notify(ST.Cameraunavailable); + } + else if (typeof imgdata === 'object' && imgdata.uri != null) { + const img = imgdata; + const imgurl = img.uri, imgWidth = img.width, imgHeight = img.ExtendedHeight; + let isImgFromGallery = img.fromGallery != null ? img.fromGallery : false; + let picture_clickedd = isImgFromGallery == true ? img.datetime : new Date(); + + ////change by jeevanp + let picture_clicked_time = moment(picture_clickedd).format('MM-DD-YYYY HH:mm:ss') + let picture_clicked_time_for_pic_name = moment(picture_clickedd).format('MMDDYYYY_HHmmss') + console.log("time", picture_clicked_time); + console.log("time1", picture_clicked_time_for_pic_name); + ////change by jeevanp + let calculate_tym_date_for_filename = picture_clicked_time_for_pic_name; + let calculate_tym_date_over_img = picture_clicked_time; + + let filename = storeData.StoreId + '_' + (props.UserId || '') + '_ReturnSTOCKImg-' + calculate_tym_date_for_filename + '.jpg'; + ////change by jeevanp + console.log("filename=>", filename) + const mark_text1 = calculate_tym_date_over_img; + const mark_text2 = 'Store Name:' + storeData.StoreName + ' | Store Id:' + storeData.StoreId + ' | User Id:' + storeData.EmpId + ' | Image Type: Return. Stock' + ' | Date:' + calculate_tym_date_over_img; + + let addvisdata = AddVisFormData; + let image_key = 'Image1'; + let image_path_key = 'Image1Path'; + addvisdata[image_key] = filename; + + let imagePath = `${ImageFolderPath + currentMenu.ScreenName}/${filename}`; + RNFS.copyFile(imgurl, imagePath) + .then(async (resn) => { + // render data with clicked image + let uri = 'file://' + imagePath; + addvisdata[image_path_key] = uri; + + setSelectedImg(uri) + // setAddVisFormData(addvisdata); + // setHasUnsavedChanges(true); + BgAddVisFormData(addvisdata) + BgUnsavedChanges(true) + setrerenderdata2(!rerenderdata2); + + // add metdata then resize image and restored back to the imagePath + let restore_data = { "destFilePath": imagePath, "imgurl": imgurl, imgWidth, imgHeight, mark_text1, mark_text2 } + let is_restored = await restore_ImageWithMetaData(restore_data, imgdata); + console.log("image restored:", is_restored); + }) + .catch(err => { + console.log('ERROR: image file write failed!!!'); + console.log(err.message, err.code); + }); + } + } + + function _OpenCaptureImage_Modal(img) { + const isImageCap = (img != '' || img != null) ? true : false; + // console.log("imag pop is trigger",isImageCap,showModal,img) + let { window, splitItem, splitItemIndex, cameraType } = reCapImgModalObj + let camera2Label = (window && window.PromoImage2Lable) || ''; + return ( + + { + isImageCap && + + + + + { setShowModal(false); openCamera('1') }}> + + + + { + { cancelImage() }}> + {ST.Close} + + } + + } + + ) + } + + async function openCamera(type = '1') { + console.log('openCamera'); + setClickImageType(type); + setShowCamera(true); + } + + async function onSubmitData() { + let isvalid = await validate(); + if (isvalid) { + Keyboard.dismiss(); + setShowAlert(true); + } + } + + async function saveData() { + BgUnsavedChanges(false) + setShowAlert(false); + setLoaderTitle(ST.SavingData + '...'); + setProcessing(true); + try { + let { StoreId } = storeData; + await db.transaction(async function (txn) { + + let q = `DELETE FROM ${AppTables.RETURN_STOCK} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' `; + + // remove old data + await txn.executeSql(q, [], async function (txn2, txnres) { + console.log('av data deleted'); + }, function (txnE, txnerr) { console.log(txnerr); },); + + + + let JsonStr = JSON.stringify(AddVisibility) + let values = ` ('${StoreId}','${d2}','${isAddVisPresent}','${JsonStr}','1','${d2}') `; + + console.log('values RETURN_STOCK:', values); + let add_data = `INSERT INTO ${AppTables.RETURN_STOCK} (STORE_ID,VISIT_DATE,PRESENT,JSON_DATA,IS_UPDATED,ADDED_DATE) VALUES ${values} `; + + console.log("add_data---", add_data) + await txn.executeSql(add_data, [], async function (txn2, txnres) { + console.log('av added'); + notify("Return Stock added successfully", 'SHORT'); + setProcessing(false); + // clear store data in local storage to avoiding re-set data for the store + clear_item('storeData') + props.navigation.goBack(); + }, function (txnE, txnerr) { console.log(txnerr); setProcessing(false); notify("Cannot addad Return Stock") },); + }); + } catch (err) { + console.log(err); + } + } + + + + + async function validate() { + + let isValid = true; + if (isAddVisPresent == 1 && AddVisibility.length <= 0) { + isValid = false; + notify(ST.Pleaseaddfirst, 'SHORT'); + } + + console.log('isValid:', isValid); + return isValid; + } + + async function validateForm() { + let isValid = true; + let { CategoryName, CategoryId, SubCategoryName, SubCategoryId, BrandName, BrandId, ProductName, ProductId, Quantity, ReturnType, ReturnTypeId, IsRemarkTaken, IsImageTaken, Remark, Image1, Image1Path } = AddVisFormData; + + if ((CategoryName == '' || CategoryName == null) || (CategoryId == '' || CategoryId == null)) { + isValid = false; + notify(ST.PleaseSelectCategory, 'SHORT'); + } + else if ((SubCategoryName == '' || SubCategoryName == null) || (SubCategoryId == '' || SubCategoryId == null)) { + isValid = false; + notify(ST.Pleaseselectsubcategory, 'SHORT'); + } + else if ((BrandName == '' || BrandName == null) || (BrandId == '' || BrandId == null)) { + isValid = false; + notify(ST.Pleaseselectbrand, 'SHORT'); + } else if (!(ProductName && ProductId)) { + isValid = false; + notify("Please select Product Name", 'SHORT'); + } + else if (!Quantity) { + isValid = false; + notify("Please fill Quantity", 'SHORT'); + } + else if (!(ReturnType && ReturnTypeId)) { + isValid = false; + notify('Please select Return Type', 'SHORT'); + } else if ((IsRemarkTaken || IsRemarkTaken==1) && (Remark == '' || Remark == null)) { + isValid = false; + notify('Please enter remark', 'SHORT'); + } + else if (StoreCameraAllow == true && (IsImageTaken || IsImageTaken ==1) && (Image1 == '' || Image1 == null)) { + isValid = false; + notify(ST.Pleaseclickimage, 'SHORT'); + } + + console.log('isValid:', isValid); + return isValid; + } + + function onFormDataChange(val, key, type = '') { + if (val != '') { + let isValid = validateNumber(val, type); + if (!isValid) { + return; + } + } + + let data = AddVisFormData; + data[key] = val; + + BgAddVisFormData(data) + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + + function onselectionChange(option, keyLbl, keyVal, otherData) { + let data = AddVisFormData; + console.log() + data[keyVal] = option.value; + data[keyLbl] = option.label; + if (keyLbl == "ReturnType") { + data = { ...data, ...option?.item } + //console.log("data------",JSON.stringify(data) + "----------",option) + } + + CleanSelector(option, keyLbl, data) + + BgAddVisFormData(data) + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + + } + + function CleanSelector(option, keyLbl = '', data = {}) { + + if (keyLbl == 'CategoryName') { + loadData(option.value, 'SubCategories'); + data.SubCategoryId = ''; + data.SubCategoryName = ''; + data.BrandId = ''; + data.BrandName = ''; + data.Remark = '' + data.Image1Path = '' + } + else if (keyLbl == 'SubCategoryName') { + loadData(option.value, 'Brands'); + data.BrandId = ''; + data.BrandName = ''; + data.Image1Path = '' + data.Remark = '' + } else if (keyLbl == 'BrandName') { + loadData(option.value, 'Product'); + data.Image1Path = '' + data.Remark = '' + } else if (keyLbl == 'DisplayName') { + data.Image1Path = '' + data.Remark = '' + } + + } + + function CleanSelectorYes() { + let data = AddVisFormData; + + data.SubCategoryId = ''; + data.SubCategoryName = ''; + data.BrandId = ''; + data.BrandName = ''; + + data.Remark = '' + data.Image1Path = '' + + BgAddVisFormData(data) + } + async function loadData(qId, type) { + try { + await db.transaction(async function (txn) { + let q = ''; + if (type == 'SubCategories') q = `Select Distinct p.SubCategoryId,p.SubCategoryName from Product_Master p where p.CategoryId=${qId} and p.IsCompetitor=0 order by p.SubCategorySequence`; + else if (type == 'Brands') q = `Select Distinct p.BrandName,p.BrandId from Product_Master p Where p.SubCategoryId=${qId} and p.IsCompetitor=0 order by p.BrandSequence`; + else if (type == 'Product') q = `Select Distinct p.ProductId,p.ProductName from Product_Master p Where p.BrandId=${qId} and p.IsCompetitor=0 order by p.BrandSequence`; + + await txn.executeSql(q, [], async function (txn2, txnres2) { + // console.log('rowcount:,',type,':',txnres2.rows.length); + if (txnres2.rows.length > 0) { + let arr = []; + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + arr.push(data); + + if (i == txnres2.rows.length - 1) { + if (type == 'SubCategories') setSubCategories(arr); + else if (type == 'Brands') setBrands(arr); + else if (type == 'Product') setProductsList(arr); + } + } + } + }, function (txnE, txnerr) { console.log(txnerr); },); + + }); + } catch (err) { + console.log(err); + } + } + + + + function onChoiceSelect(val, key) { + if (val == 0 && AddVisibility.length > 0) { + setShowRAllC_M(true); + return; + } + var val1 = val == 1 ? 1 : 0; + if (animatedChoice != null) { + Animated.timing(animatedChoice, { + toValue: val1, + duration: 400, + useNativeDriver: false, + }).start(); + } + + if (val == 0) { + CleanSelectorYes() + } + BgIsAddVisPresent(val); + BgUnsavedChanges(true) + if (val == 0) { + BgWindowData([]) + BgAddVisFormData({}) + } + } + + function onConfirmRemoveAll() { + // Remove all data + if (animatedChoice != null) { + Animated.timing(animatedChoice, { + toValue: 0, + duration: 400, + useNativeDriver: false, + }).start(); + } + BgIsAddVisPresent(0); + BgUnsavedChanges(true) + BgWindowData([]) + BgAddVisFormData({}) + setShowRAllC_M(false); + } + + function onSaveCancel() { + setShowAlert(false); + } + + async function Add_AddVis() { + let isValid = await validateForm(); + console.log('isValid add:', isValid); + if (isValid) { + let arr = AddVisibility; + arr.push(AddVisFormData); + BgWindowData(arr) + BgUnsavedChanges(true) + notify("Return Stock added successfully", 'LONG'); + setrerenderdata(!rerenderdata); + setAddVisFormData({}) + } + } + + function showRemoveConfirm(item, index) { + if (item.keyId > 0) { + setToRemoveId(item.keyId); + setToRemoveItem(item); + setshowRemoveConfirm_M(true); + } + else { + setToRemoveId(index); + setToRemoveItem(item); + setshowRemoveConfirm_M(true); + } + } + + async function Remove_AddVis() { + let { StoreId, ChainId, StateId, StoreTypeId } = storeData; + let { MenuId } = currentMenu; + + db.transaction(async function (txn) { + let index = toRemoveId; + let item = toRemoveItem; + let arr = AddVisibility; + if (item.keyId != null && item.keyId != 'undefined' && index > 0) { + let deleteQuery = `DELETE FROM ${AppTables.RETURN_STOCK} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' AND KEY_ID='${index}' `; + + txn.executeSql(deleteQuery, [], function (txn3, txnres) { + console.log('Return Stock data deleted', item.keyId, +"" + index); + let updatedVisibility = AddVisibility.filter(item => item.keyId !== index); + setAddVisibility(updatedVisibility); + setHasUnsavedChanges(true); + notify('Return Stock removed successfully', 'LONG'); + setrerenderdata(!rerenderdata); + setToRemoveId(''); + setToRemoveItem({}); + setshowRemoveConfirm_M(false); + }, function (txnE, txnerr) { + console.log('Error deleting survey data:', txnerr); + }); + } + else { + let index = toRemoveId + let item = toRemoveItem; + let arr = AddVisibility; + console.log('toRemoveId:', index); + if (index >= 0 && index < arr.length) { + arr.splice(index, 1); + setAddVisibility(arr); + setHasUnsavedChanges(true); + notify('Return Stock removed successfully', 'LONG') + setrerenderdata(!rerenderdata); + } + else { + notify('Cannot remove! Return Stock not found', 'LONG') + } + setToRemoveId(''); + setToRemoveItem({}); + setshowRemoveConfirm_M(false); + } + + }); + } + + + + function _render_addVisFormTop() { + let xpos = 0; + if (animatedChoice != null) { + xpos = animatedChoice.interpolate({ + inputRange: [0, 1], + outputRange: [0, -75], + }); + } + + let AddVisCameraReqI = KPIFields.findIndex(i => i.KPIFieldName == 'AddVisCameraReq'); + let AddVisCameraReqObj = AddVisCameraReqI >= 0 ? KPIFields[AddVisCameraReqI] : {}; + let AddVisCameraReq = AddVisCameraReqI >= 0 ? AddVisCameraReqObj.KPIFieldEnable : true; + + + return ( + + + {ST.IsPresent} + + + + { onChoiceSelect(1, 'isPresent') }}> + {ST.Yes} + + { onChoiceSelect(0, 'isPresent') }}> + {ST.No} + + + + + + { + isAddVisPresent == 1 && (rerenderdata == rerenderdata) && + + + + + + {ST.Category} + {CustomPicker(props, Categories, 'CategoryName', 'CategoryId', 'CategoryName', 'CategoryId', onselectionChange, { value: AddVisFormData.CategoryName })} + + + + + + {'Sub Category'} + {CustomPicker(props, SubCategories, 'SubCategoryName', 'SubCategoryId', 'SubCategoryName', 'SubCategoryId', onselectionChange, { value: AddVisFormData.SubCategoryName })} + + + + + {ST.Brands} + {CustomPicker(props, Brands, 'BrandName', 'BrandId', 'BrandName', 'BrandId', onselectionChange, { value: AddVisFormData.BrandName })} + + + + + {"Product"} + {CustomPicker(props, ProductsList, 'ProductName', 'ProductId', 'ProductName', 'ProductId', onselectionChange, { value: AddVisFormData.ProductName })} + + + + + {"Quantity"} + { + // ✅ Only allow digits (no decimal point, no letters) + const numericVal = val.replace(/[^0-9]/g, "").slice(0, 3); + onFormDataChange(numericVal, 'Quantity', 'text'); + } + } + keyboardType="numeric" // ✅ opens numeric keyboard + maxLength={3} + /> + + + + + + {"Return Reason"} + {CustomPicker(props, ReturnTypeList, 'ReturnType', 'ReturnTypeId', 'ReturnType', 'ReturnTypeId', onselectionChange, { value: AddVisFormData.ReturnType })} + + + {(AddVisFormData?.IsRemarkTaken || AddVisFormData?.IsRemarkTaken==1)&& + + {"Remark"} + { onFormDataChange(val, 'Remark', 'text'); }} + /> + + } + { + (AddVisFormData?.IsImageTaken || AddVisFormData?.IsImageTaken ==1) && + + + {ST.Image} + + + {(AddVisFormData.Image1Path == '' || AddVisFormData.Image1Path == null) ? + { openCamera('1') }}> + + : (AddVisFormData.Image1Path != '' && AddVisFormData.Image1Path != null) ? + { OpenImgModal(AddVisFormData.Image1Path, '1') }}> + + : null + } + + + + + + } + + { Add_AddVis() }}> + {ST.Add} + + + + + + {"Added Return Stocks "} + + { + AddVisibility.length > 0 && + AddVisibility.map((item, index) => { + console.log(item); + return ( + + + + + {ST.Category + ' :'} + {item?.CategoryName} + + + {ST.SubCategory + ' :'} + {item?.SubCategoryName} + + + {ST.Brands + ' :'} + {item?.BrandName} + + + {"Product" + ' :'} + {item?.ProductName} + + + {'Quantity :'} + {item?.Quantity} + + + {'Return Reason :'} + {item?.ReturnType} + + {item?.Remark && + {ST.Remark + ' :'} + {item?.Remark} + } + + {AddVisCameraReq && item.Image1Path && + + {ST.Image} + {(item.Image1Path != null && item.Image1Path != '') && } + } + { showRemoveConfirm(item, index) }}> + + + + + + + ); + }) + } + + + + } + + ) + } + + + + return ( + + {processing && } + + + + {_OpenCaptureImage_Modal()} + + {ConfirmSaveAlert(props, showAlert, onSaveCancel, saveData)} + {ConfirmSaveAlert(props, showRemoveConfirm_M, () => { setshowRemoveConfirm_M(false) }, Remove_AddVis, "Do you really want to remove this Return Stock?")} + {ConfirmSaveAlert(props, showRAllC_M, () => { setShowRAllC_M(false) }, onConfirmRemoveAll, "Do you really want to remove all Return Stock data?")} + { setShowCamera(false); getImage(imgData) }} showCamera={showCamera} onHideCamera={() => { setShowCamera(false); }} /> + + + + {Object.keys(storeData).length > 0 && + + {_render_addVisFormTop()} + + } + + { onSubmitData() }} /> + + + + + + + ); +} + + +export default connect(mapStateToProps, mapDispatchToProps)(ReturnStock); \ No newline at end of file diff --git a/PerformicsSrc/src/screens/SOSEyeLevel.js b/PerformicsSrc/src/screens/SOSEyeLevel.js new file mode 100644 index 0000000..7e09597 --- /dev/null +++ b/PerformicsSrc/src/screens/SOSEyeLevel.js @@ -0,0 +1,2061 @@ + +import React, { useState, useEffect, useRef } from 'react'; +import Container from '../components/container'; +import { useRoute } from '@react-navigation/native'; +import { globalStyles, customStyles, GetPageTheme } from "../styles/Global"; +import { StatusBar, Image, TextInput, View, Text, ScrollView, TouchableOpacity, Platform, PermissionsAndroid, FlatList, Alert, KeyboardAvoidingView, AppState, Keyboard } from 'react-native'; +import { ReactReduxContext, connect, useSelector, useDispatch } from 'react-redux'; +import { mapStateToProps, mapDispatchToProps } from '../reducers/contextProvider'; +import { notify } from '../components/notify'; +import moment from 'moment'; +import { getDownloadJson, getKPIFields, marktext1, marktext2, resizeImage, restore_ImageWithMetaData, validateNumber } from '../controller/functions'; +import { get_item, set_item, clear_item } from '../components/localStorage'; +import { version, sloganline, appname, testurl, db, colors_Arr, common_ImagePath, ImageFolderPath, HierarchyTbls } from '../constants/constants'; +import CustomHeader from '../components/customHeader'; +import { AntDesign, MaterialCommunityIcons } from '../components/icons'; +import CustomLoader from '../components/CustomLoader'; +import LinearGradient from 'react-native-linear-gradient'; +import { AppTables } from '../constants/tableConstants'; +import * as RNFS from 'react-native-fs'; +import GradientButton from '../components/gradientButton'; + +import CustomModal from '../components/CustomModal'; +import CustomCamera from '../components/Camera'; + +import CameraImg3 from '../assets/performics/camera_tick.svg'; +import CameraImg2 from '../assets/performics/camera_icon.svg'; +import CameraImg4 from '../assets/performics/camera_asterisk.svg'; +import CameraImg5 from '../assets/image/astrickcamera.svg'; + +function SOSEyeLevel(props) { + const route = useRoute(); + const ST = props.StaticText || {}; + + // get all theme styles acc to current theme set + const PageTheme = GetPageTheme(props.DarkMode, route.name); + const customStyle = customStyles(props.DarkMode, route.name); + + const [processing, setProcessing] = useState(true); + const [loaderTitle, setLoaderTitle] = useState('loading...'); + const [isAdhocScreen, setIsAdhocScreen] = useState(false); + const [storeData, setStoreData] = useState({}); + const [StoreCameraAllow, setStoreCameraAllow] = useState(true); + const [currentMenu, setCurrentMenu] = useState({}); + const [brandData, setBrandData] = useState([]); + const [rerenderdata, setrerenderdata] = useState(0); + const [rerenderdata2, setrerenderdata2] = useState(0); + const [rerenderdata3, setrerenderdata3] = useState(0); + const [rerenderdata4, setrerenderdata4] = useState(0); + + const [SOSStockData, setSOSStockData] = useState([]); + const [AllSOSData, setAllSOSData] = useState([]); + const [showAlert, setShowAlert] = useState(false); + const [hasUnsavedChanges, setHasUnsavedChanges] = useState(false); + const [showCamera, setShowCamera] = useState(false); + const [getImageProps, setGetImageProps] = useState({}); + const [KPIFields, setKPIFields] = useState([]); + const [showSwitchCamera, setShowSwitchCamera] = useState(false); + const [GridValue, setGridValue] = useState(false); + + const [SelectedImg, setSelectedImg] = useState(''); + const [showModal, setShowModal] = useState(false); + const [reCapImgModalObj, setReCapImgModalObj] = useState({}); + const [showImageSaveOp, setShowImageSaveOp] = useState(true); + const [ImgMadCount, setImgMadCount] = useState({ img1: 0, img2: 0 }); + const [FilteredPromoValues, setFilteredPromoValues] = useState([]); + const [ShowCatWise, setShowCatWise] = useState(false); + const [CatData, setCatData] = useState(false); + const [ColId, setColId] = useState(""); + const [ColName, setColName] = useState(""); + + const hasUnsavedChangesRef = React.useRef(hasUnsavedChanges); + const WindowDataRef = React.useRef(SOSStockData); + const StoreIdRef = React.useRef(null); + const ScreenNameRef = React.useRef(''); + const PSGroupData = React.useRef(''); // Grouping data (Category/ SubCategory/ Brand ) for BG save fuunctionality with Partial Save Scenario + const BGPSAllow = React.useRef(false); + + + // error field states + const [errorfield, setErrorField] = useState({}); + const [error, setError] = useState(false); + + + const inputRefs = useRef({}); + + const d1 = new Date(); + const d2 = moment(d1).format('MM/DD/YYYY'); + + useEffect(() => { + setLoaderTitle(ST.Loading + '...') + let params = props.route.params ? props.route.params : {}; + let storeData1 = params.storeData || {}; + let menu1 = params.menu || {}; + let ShowCatWise1 = params.ShowCatWise != null ? params.ShowCatWise : false; + let CatData1 = params.CatData != null ? params.CatData : {}; + let isAdhoc = params.isAdhoc || false; + + + setIsAdhocScreen(isAdhoc); + setShowCatWise(ShowCatWise1); + setCatData(CatData1); + setStoreData(storeData1); + setCurrentMenu(menu1); + + let cameraAllow = storeData1.CameraAllow == 'true' || storeData1.CameraAllow == 1 ? true : false; + setStoreCameraAllow(cameraAllow); + + + StoreIdRef.current = storeData1.StoreId + ScreenNameRef.current = menu1.ScreenName + getData(storeData1, menu1, CatData1, ShowCatWise1); + + const AppStateSubscription = AppState.addEventListener('change', (pro) => { _handleAppStateChange(pro) }); + const unsubscribe = props.navigation.addListener('beforeRemove', onBeforeRemove); + + return function cleanup() { + AppStateSubscription.remove(); + // AppState.removeEventListener('change', (pro)=>{ _handleAppStateChange(SOSStockData,pro)}); + return unsubscribe; + }; + }, []); + + const _handleAppStateChange = async (nextAppState) => { + if (nextAppState == 'background' && hasUnsavedChangesRef.current == true) { + let newData = { + storeBGData: WindowDataRef.current, + menuName: ScreenNameRef.current, + StoreId1: StoreIdRef.current, + visiteDate: d2, + BGPSAllow: BGPSAllow.current, + PSGroupData: PSGroupData.current, + } + let WindowsStr = JSON.stringify(newData) + await set_item('storeData', WindowsStr); + } + } + + useEffect(() => { + const unsubscribe = props.navigation.addListener('beforeRemove', onBeforeRemove); + return unsubscribe; + // AppState.removeEventListener('change',(pro)=>{ _handleAppStateChange(SOSStockData,pro)}); + // AppState.addEventListener('change',(pro)=>{ _handleAppStateChange(SOSStockData,pro)}); + }, [hasUnsavedChanges]); + + // useEffect(() => { + // AppState.removeEventListener('change',(pro)=>{ _handleAppStateChange(SOSStockData,pro)}); + // AppState.addEventListener('change',(pro)=>{ _handleAppStateChange(SOSStockData,pro)}); + // }, [SOSStockData]); + + + useEffect(() => { + const unsubscribe = props.navigation.addListener('beforeRemove', onBeforeRemove); + return unsubscribe; + }, [showCamera]); + + function BgUnsavedChanges(val) { + hasUnsavedChangesRef.current = val + setHasUnsavedChanges(val); + } + + function BgWindowData(val) { + WindowDataRef.current = val + setSOSStockData(val); + } + + function onBeforeRemove(e) { + if (showCamera == true) { + e.preventDefault(); + setShowCamera(false); + } + else { + console.log('hasUnsavedChanges:', hasUnsavedChanges); + if (hasUnsavedChanges == true) { + console.log('hasUnsavedChanges is true'); + e.preventDefault(); // Prevent default behavior of leaving the screen + onRemoveScreen(e); + } + else { + return; + } + } + } + + function onRemoveScreen(e) { + Alert.alert( + "", + "Do you really want to exit the screen?", + [ + { + text: "Cancel", + onPress: () => { }, + style: "cancel" + }, + { + text: "OK", onPress: async () => { + // setHasUnsavedChanges(false); + BgUnsavedChanges(false) + await clear_item('storeData') + props.navigation.dispatch(e.data.action); + } + } + ] + ); + } + + async function getData(storeData1, menu1, CatData1 = {}, ShowCatWise1 = false) { + try { + let { StoreId, ChainId, StateId, StoreTypeId } = storeData1; + let { PSAllow, PSTableName } = menu1; + PSTableName = PSTableName != null ? PSTableName : ''; + PSAllow = PSAllow != null ? PSAllow : false; + + let idCol = '', nameCol = ''; + if (PSTableName.toLowerCase() == HierarchyTbls.Master_Category.toLowerCase()) { + idCol = 'CategoryId', nameCol = 'CategoryName'; + } + else if (PSTableName.toLowerCase() == HierarchyTbls.Master_Brand.toLowerCase()) { + idCol = 'BrandId', nameCol = 'BrandName'; + } + else { + idCol = 'SubCategoryId', nameCol = 'SubCategoryName'; + } + let IdVal = CatData1[idCol]; + let NameVal = CatData1[nameCol]; + + let FilteredIds = []; + if (ShowCatWise1) { + FilteredIds = await getWindowFilterIds(idCol, IdVal, storeData1); + } + setFilteredPromoValues(FilteredIds); + + + let AllKPIFields = await getKPIFields(menu1); + setKPIFields(AllKPIFields); + + // set switch camera flag as defined in mapping menu flag (if exists) + let SwitchingCameraI = AllKPIFields.findIndex(i => i.KPIFieldName == 'SwitchingCamera'); + let SwitchingCameraObj = SwitchingCameraI >= 0 ? AllKPIFields[SwitchingCameraI] : {}; + let SwitchingCamera = SwitchingCameraI >= 0 ? SwitchingCameraObj['KPIFieldEnable'] : false; + setShowSwitchCamera(SwitchingCamera); + + let sosCheckAssortmentI = AllKPIFields.findIndex(i => i.KPIFieldName == 'SOSCheckAssortment') + let sosCheckAssortmentObj = sosCheckAssortmentI >= 0 ? AllKPIFields[sosCheckAssortmentI] : {}; + let sosCheckAssortment = sosCheckAssortmentI >= 0 ? sosCheckAssortmentObj['KPIFieldEnable'] : false; + + let sosMSLOnlyI = AllKPIFields.findIndex(i => i.KPIFieldName == 'SOSMSLOnly') + let sosMSLOnlyObj = sosMSLOnlyI >= 0 ? AllKPIFields[sosMSLOnlyI] : {}; + let sosMSLOnly = sosMSLOnlyI >= 0 ? sosMSLOnlyObj['KPIFieldEnable'] : false; + + let AssortIds = sosCheckAssortment == true ? await getAssortmentIds(storeData1, sosMSLOnly) : ''; + console.log('AssortIds:', sosCheckAssortment, sosMSLOnly, AssortIds); + + //storeBGData check + let storeBGData1 = [], bgStoreJson = {}, isBgDataExists = false; + let windData = await get_item('storeData') + if (windData != null && windData != '') { + let StoreJson = JSON.parse(windData) + let { storeBGData, menuName, StoreId1, visiteDate } = StoreJson + if (storeBGData.length > 0 && menuName == menu1.ScreenName && StoreId1 == StoreId && visiteDate == d2) { + isBgDataExists = true; + storeBGData1 = storeBGData; + bgStoreJson = StoreJson + // setSOSStockData(storeBGData); + BgUnsavedChanges(true) + BgWindowData(storeBGData) + } + } + + // call this after storeBGData check + if (PSAllow) { + // if Partial save is allowed then add the currently active category or group in BG var + BGPSAllow.current = true; + PSGroupData.current = CatData1; + } + + await db.transaction(async function (txn) { + + //get data from masters + // let join1=` INNER JOIN Mapping_StoreShareOfShelfEyeLevel m on p.SOSDefinitionId=m.SOSDefinitionId `; + // let selectlist1=` DISTINCT p.SOSHeaderTable,p.SOSHeaderField,p.SOSHeaderValue,p.HeaderName as HeaderName,p.SOSHeaderNonEyeLevelFacing,p.SOSHeaderEyeLevelFacingLable,p.SOSHeaderImage,p.SOSHeaderImageCount,p.SOSHeaderImageGrid`; + // let q=`SELECT ${selectlist1} from Master_ShareOfShelfEyeLevelDefinition p ${join1} Where m.StoreId ='${StoreId}' + // ${sosCheckAssortment==true?` and p.SOSHeaderValue in (${AssortIds}) `:''} + // order by p.HeaderName `; + + //get inserted SOS data + // let selectlist2=` DISTINCT p.SOS_HEADER_ID as SOSHeaderId,m.SOSHeaderTable,m.SOSHeaderField,p.SOS_HDR_VALUE as SOSHeaderValue,p.HEADER_NAME as HeaderName,m.SOSHeaderNonEyeLevelFacing,m.SOSHeaderEyeLevelFacingLable,m.SOSHeaderImage,m.SOSHeaderImageCount,m.SOSHeaderImageGrid,p.SOS_HDR_FACING as SOSHdrFacing `; + // // let join3=` INNER JOIN Mapping_StoreShareOfShelfEyeLevel mp on m.SOSDefinitionId=mp.SOSDefinitionId `; + // let join4=` INNER JOIN Master_ShareOfShelfEyeLevelDefinition m on p.SOS_HDR_VALUE=m.SOSHeaderValue `; + // let q2=` SELECT ${selectlist2} FROM ${AppTables.SOS_HDR_DATA} p ${join4} WHERE p.STORE_ID='${StoreId}' and p.VISIT_DATE='${d2}' order by p.HEADER_NAME `; + + + //get Data from masters with saved data of any + let FilterIdsJoin = FilteredIds.length > 0 ? FilteredIds.join(',') : ''; + let join1 = ` INNER JOIN Mapping_StoreShareOfShelfEyeLevel m on p.SOSDefinitionId=m.SOSDefinitionId `; + let join5 = ` LEFT OUTER JOIN ${AppTables.EYE_LEVEL_HDR_DATA} wd on p.SOSHeaderValue=wd.SOS_HDR_VALUE and wd.STORE_ID='${StoreId}' and wd.VISIT_DATE='${d2}'`; + let selectlist1 = ` DISTINCT wd.SOS_HEADER_ID as SOSHeaderId,p.SOSHeaderTable,p.SOSHeaderField,p.SOSHeaderEyeLevelFacing,p.SOSHeaderValue,p.HeaderName as HeaderName,p.SOSHeaderNonEyeLevelFacing,p.SOSHeaderEyeLevelFacingLable,p.SOSHeaderNonEyeLevelFacingLable,p.SOSHeaderImage,p.SOSHeaderImageCount,p.SOSHeaderImageGrid,wd.EYE_LEVEL_HDR_FACING as SOSHdrEyeFacing,wd.NONEYE_LEVEL_HDR_FACING as SOSHdrNonEyeFacing`; + // let selectlist2=` DISTINCT p.SOS_HEADER_ID as SOSHeaderId,m.SOSHeaderTable,m.SOSHeaderField,p.SOS_HDR_VALUE as SOSHeaderValue,p.HEADER_NAME as HeaderName,m.SOSHeaderNonEyeLevelFacing,m.SOSHeaderEyeLevelFacingLable,m.SOSHeaderImage,m.SOSHeaderImageCount,m.SOSHeaderImageGrid,p.SOS_HDR_FACING as SOSHdrFacing `; + let q = `SELECT ${selectlist1} from Master_ShareOfShelfEyeLevelDefinition p ${join1} ${join5} Where m.StoreId ='${StoreId}' + ${sosCheckAssortment == true ? ` and p.SOSHeaderValue in (${AssortIds}) ` : ''} `; + if (ShowCatWise1 == true) { + q += ` and p.SOSHeaderValue in (${FilterIdsJoin}) `; + } + q += `order by p.HeaderName `; + + console.log('q:', q); + await txn.executeSql(q, [], async function (txn2, txnres) { + // console.log('soscats added:',txnres.rows.length); + + if (txnres.rows.length > 0) { + let arr = [], allCats = []; + for (var i = 0; i < txnres.rows.length; i++) { + let data = txnres.rows.item(i); + + let SOSHeaderEyeLevelFacing = data.SOSHeaderEyeLevelFacing == 1 || data.SOSHeaderEyeLevelFacing == 'true' ? true : false; + let SOSHeaderNonEyeLevelFacing = data.SOSHeaderNonEyeLevelFacing == 1 || data.SOSHeaderNonEyeLevelFacing == 'true' ? true : false; + console.log("SOSHeaderEyeLevelFacing-", SOSHeaderEyeLevelFacing) + if (SOSHeaderEyeLevelFacing) { + inputRefs.current['input_' + data.SOSHeaderValue] = ''; + } + if (SOSHeaderNonEyeLevelFacing) { + inputRefs.current['input1_' + data.SOSHeaderValue] = ''; + } + + let AllCData = await getChilds(storeData1, data, menu1, sosMSLOnly, sosCheckAssortment); + let allChilds = AllCData['allChilds'] || []; + let childData = AllCData['childData'] || []; + data['skulist'] = allChilds; + arr.push(data); + let HdrImages = await getHdrImages(storeData1, data, menu1, data.SOSHeaderImageCount); + + let defData = { 'SOSHeaderValue': data.SOSHeaderValue, 'SOSHdrNonEyeFacing': data.SOSHeaderId != null ? data.SOSHdrNonEyeFacing : '', 'SOSHdrEyeFacing': data.SOSHeaderId != null ? data.SOSHdrEyeFacing : '', 'Images': HdrImages, 'SKUData': childData }; + allCats.push(defData); + if (i == txnres.rows.length - 1) { + let { menuName, StoreId1, visiteDate } = bgStoreJson + if (!isBgDataExists) { + BgWindowData(allCats) + } + setAllSOSData(arr); + // setSOSStockData(allCats); + setProcessing(false); + } + } + } + else { + setProcessing(false); + notify("No data found"); + } + // else{ + // await txn.executeSql(q,[],async function (txn2, txnres2) { + // // console.log('soscats',txnres2.rows.length); + // if(txnres2.rows.length>0){ + // let arr=[],allCats=[],storeBGData1=[],bgStoreJson={}; + // let windData = await get_item('storeData') + // if(windData!=null && windData!=''){ + // let StoreJson = JSON.parse(windData) + // let { storeBGData,menuName,StoreId1,visiteDate }= StoreJson + // if(storeBGData.length>0 && menuName == menu1.ScreenName && StoreId1== StoreId && visiteDate==d2){ + // storeBGData1=storeBGData; + // bgStoreJson=StoreJson + // BgUnsavedChanges(true) + // BgWindowData(storeBGData) + // // setSOSStockData(storeBGData); + // } + // } + + // for(var i=0;i { + + db.transaction(async function (txn) { + let join = ` inner join Mapping_StoreShareOfShelfEyeLevel s on w.SOSDefinitionId=s.SOSDefinitionId `; + let q = `Select w.* from Master_ShareOfShelfEyeLevelDefinition w ${join} where s.StoreId='${StoreId}' `; + await txn.executeSql(q, [], async function (txn2, txnres) { + if (txnres.rows.length > 0) { + let Wind_data = txnres.rows.item(0); + let { SOSHeaderTable } = Wind_data; + SOSHeaderTable = SOSHeaderTable != null ? SOSHeaderTable : ''; + + let filterIdsCol = '', filterNamesCol = ''; + if (SOSHeaderTable.toLowerCase() == HierarchyTbls.Master_Category.toLowerCase()) { + filterIdsCol = 'CategoryId', filterNamesCol = 'CategoryName'; + } + else if (SOSHeaderTable.toLowerCase() == HierarchyTbls.Master_Brand.toLowerCase()) { + filterIdsCol = 'BrandId', filterNamesCol = 'BrandName'; + } + else if (SOSHeaderTable.toLowerCase() == HierarchyTbls.Master_Product.toLowerCase()) { + filterIdsCol = 'ProductId', filterNamesCol = 'ProductName'; + } + else { + filterIdsCol = 'SubCategoryId', filterNamesCol = 'SubCategoryName'; + } + + let FIdsQ = `Select Distinct p.${filterIdsCol},p.${filterNamesCol} from Product_Master p where (p.${idCol}='${IdVal}' or p.${idCol}= ${IdVal})`; + console.log('FIdsQ:', FIdsQ); + await txn.executeSql(FIdsQ, [], async function (txn2, txnres2) { + if (txnres.rows.length > 0) { + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + let id_value = data[filterIdsCol]; + AllIds.push(id_value); + if (i == txnres2.rows.length - 1) { + resolve(AllIds) + } + } + } + else { + resolve([]); + } + }, function (txnE, txnerr) { console.log(txnerr); resolve(AllIds) }); + + + } + else { + resolve(AllIds) + } + }, function (txnE, txnerr) { console.log(txnerr); resolve(AllIds) },); + }); + }).then((val) => { + return val + }).catch((err) => { + console.log(err); + return AllIds; + }); + } + + async function getAssortmentIds(storeData1 = {}, sosMSLOnly = false) { + let { StoreId, ChainId, StateId, StoreTypeId, StoreClassId, StoreCategoryId } = storeData1; + let AllIds = []; + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + let join1 = ` INNER JOIN Mapping_StoreShareOfShelfEyeLevel m on p.SOSDefinitionId=m.SOSDefinitionId `; + let q = `select Distinct p.SOSHeaderTable,p.SOSHeaderField from Master_ShareOfShelfEyeLevelDefinition p ${join1} Where m.StoreId ='${StoreId}' and p.SOSHeaderTable!='' and p.SOSHeaderTable is not null `; + await txn.executeSql(q, [], async function (txn2, txnres) { + if (txnres.rows.length > 0) { + let data = txnres.rows.item(0); + let SOSHeaderTable = data['SOSHeaderTable']; + let SOSHeaderField = data['SOSHeaderField']; + + let join2 = ` INNER JOIN Mapping_ProductAssortmentStorewise mp on t1.ProductId=mp.ProductId `; + let q2 = `select distinct t1.${SOSHeaderField} from Product_Master t1 ${join2} where mp.StoreId='${StoreId}' ${sosMSLOnly == true ? ` and (mp.MSL='true' or mp.MSL='1' or mp.MSL =1) ` : ''} `; + await txn.executeSql(q2, [], async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + let id = data[SOSHeaderField]; + AllIds.push(id); + if (i == txnres2.rows.length - 1) { + let AllIdsJoin = AllIds.join(','); + resolve(AllIdsJoin); + } + } + } + else { + resolve('') + } + }, function (txnE, txnerr) { console.log(txnerr); resolve('') },); + } + else { + resolve('') + } + }, function (txnE, txnerr) { console.log(txnerr); resolve('') },); + }); + }).then((val) => { + return val; + }).catch((err) => { + console.log(err); + return ''; + }); + } + + async function getChildAssortmentIds(storeData1 = {}, sosMSLOnly = false) { + let { StoreId, ChainId, StateId, StoreTypeId, StoreClassId, StoreCategoryId } = storeData1; + let AllIds = []; + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + let join1 = ` INNER JOIN Mapping_StoreShareOfShelfEyeLevel m on p.SOSDefinitionId=m.SOSDefinitionId `; + let q = `select Distinct p.SOSChildTable,p.SOSChildField from Master_ShareOfShelfEyeLevelDefinition p ${join1} Where m.StoreId ='${StoreId}' and p.SOSChildTable!='' and p.SOSChildTable is not null `; + + await txn.executeSql(q, [], async function (txn2, txnres) { + if (txnres.rows.length > 0) { + let data = txnres.rows.item(0); + let SOSChildTable = data['SOSChildTable']; + let SOSChildField = data['SOSChildField']; + + let join2 = ` INNER JOIN Mapping_ProductAssortmentStorewise mp on t1.ProductId=mp.ProductId `; + let q2 = `select distinct t1.${SOSChildField} from Product_Master t1 ${join2} where mp.StoreId='${StoreId}' ${sosMSLOnly == true ? ` and (mp.MSL='true' or mp.MSL='1' or mp.MSL =1) ` : ''} `; + await txn.executeSql(q2, [], async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + let id = data[SOSChildField]; + AllIds.push(id); + if (i == txnres2.rows.length - 1) { + let AllIdsJoin = AllIds.join(','); + resolve(AllIdsJoin); + } + } + } + else { + resolve('') + } + }, function (txnE, txnerr) { console.log(txnerr); resolve('') },); + } + else { + resolve('') + } + }, function (txnE, txnerr) { console.log(txnerr); resolve('') },); + }); + }).then((val) => { + return val; + }).catch((err) => { + console.log(err); + return ''; + }); + } + + + async function getHdrImages(storeData1, cat1, menu1, SOSHeaderImageCount) { + let allImages = []; + let { StoreId } = storeData1; + let { SOSHeaderId } = cat1; + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + let q = ` SELECT IMAGE1 as Image1 FROM ${AppTables.SOS_IMAGES} where SOS_HEADER_ID='${SOSHeaderId}' and TYPE='Header' and STORE_ID='${StoreId}' and VISIT_DATE='${d2}' `; + await txn.executeSql(q, [], async function (txn2, txnres) { + if (txnres.rows.length > 0) { + for (var i = 0; i < txnres.rows.length; i++) { + let data = txnres.rows.item(i); + let { Image1 } = data; + let imagePath = Image1 != null && Image1 != '' ? 'file://' + ImageFolderPath + menu1.ScreenName + "/" + Image1 : ''; + let obj = { 'Image1Name': data.Image1, 'Image1': imagePath }; + allImages.push(obj); + if (i == txnres.rows.length - 1) { + resolve(allImages); + } + } + } + else { + if (SOSHeaderImageCount > 0) { + for (let s = 0; s < SOSHeaderImageCount; s++) { + let obj = { 'Image1Name': '', 'Image1': '', img1Required: true }; + allImages.push(obj); + if (s == SOSHeaderImageCount - 1) { + resolve(allImages); + } + } + } + else { + resolve(allImages); + } + + } + }, function (txnE, txnerr) { console.log(txnerr); resolve(allImages); },); + }); + }).catch((err) => { + return allImages; + }) + } + + async function getChilds(storeData1, cat1, menu1, sosMSLOnly = false, sosCheckAs = false) { + let defData = { allChilds: [], childData: [] }; + let { StoreId, StateId } = storeData1; + let { SOSHeaderValue } = cat1; + // SOSChildValue + let childAssorted = await getChildAssortmentIds(storeData1, sosMSLOnly) + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + + // let selectlist=` p.SOSDefinitionId,p.SOSChildTable,p.SOSChildField,p.SOSChildValue,p.ChildName,p.SOSChildEyeLevelTotalFacing,p.SOSChildNonEyeLevelSelfFacing,p.SOSChildEyeLevelTotalFacingLable,p.SOSChildNonEyeLevelSelfFacingLable,p.SOSChildImage,p.SOSChildImageCount,p.SOSChildImageGrid`; + // let join1=` INNER JOIN Mapping_StoreShareOfShelfEyeLevel m on p.SOSDefinitionId=m.SOSDefinitionId `; + // let q=`SELECT ${selectlist} from Master_ShareOfShelfEyeLevelDefinition p ${join1} Where m.StoreId ='${StoreId}' and p.SOSHeaderValue='${SOSHeaderValue}' + // ${sosCheckAs==true?` and p.SOSChildValue in (${childAssorted}) `:''} + // order by p.ChildName `; + + // let selectlist2=` m.SOSDefinitionId,m.SOSChildTable,m.SOSChildField,p.SOS_CHILD_VALUE as SOSChildValue,p.CHILD_NAME as ChildName,m.SOSChildEyeLevelTotalFacing,m.SOSChildNonEyeLevelSelfFacing,m.SOSChildEyeLevelTotalFacingLable,m.SOSChildNonEyeLevelSelfFacingLable,m.SOSChildImage,m.SOSChildImageCount,m.SOSChildImageGrid,p.TOTAL_FACING as TotalFacing,p.SELF_FACING as SelfNonEyeFacing`; + // // let join3=` INNER JOIN Mapping_StoreShareOfShelfEyeLevel mp on m.SOSDefinitionId=mp.SOSDefinitionId `; + // let join4=` INNER JOIN Master_ShareOfShelfEyeLevelDefinition m on p.SOS_DEFINITION_ID=m.SOSDefinitionId `; + // let q2=` SELECT ${selectlist2} FROM ${AppTables.SOS_CHILD_DATA} p ${join4} WHERE p.SOS_HDR_VALUE='${SOSHeaderValue}' and p.STORE_ID='${StoreId}' and p.VISIT_DATE='${d2}' order by p.CHILD_NAME `; + + + // get data from masters with saved data + + // wd.SELF_EYE_FACING as SelfEyeFacing + let selectlist = ` p.SOSDefinitionId,p.SOSChildTable,p.SOSChildField,p.SOSChildValue,p.ChildName,p.SOSChildEyeLevelTotalFacing,p.SOSChildNonEyeLevelTotalFacing,p.SOSChildNonEyeLevelSelfFacing,p.SOSChildEyeLevelSelfFacing,p.SOSHeaderNonEyeLevelFacingLable,p.SOSChildEyeLevelTotalFacingLable,p.SOSChildEyeLevelSelfFacingLable,p.SOSChildNonEyeLevelSelfFacingLable,p.SOSChildImage,p.SOSChildImageCount,p.SOSChildImageGrid,wd.TOTAL_EYE_FACING as TotalEyeLevelFacing, wd.TOTAL_NONEYE_FACING as TotalNonEyeFacing ,wd.SELF_EYE_FACING as SelfEyeFacing ,wd.SELF_NONEYE_FACING as SelfNonEyeFacing,tg.SOSTarget`; + // let selectlist2=` m.SOSDefinitionId,m.SOSChildTable,m.SOSChildField,p.SOS_CHILD_VALUE as SOSChildValue,p.CHILD_NAME as ChildName,m.SOSChildEyeLevelTotalFacing,m.SOSChildNonEyeLevelSelfFacing,m.SOSChildEyeLevelTotalFacingLable,m.SOSChildNonEyeLevelSelfFacingLable,m.SOSChildImage,m.SOSChildImageCount,m.SOSChildImageGrid,p.TOTAL_FACING as TotalFacing,p.SELF_FACING as SelfNonEyeFacing`; + let join1 = ` INNER JOIN Mapping_StoreShareOfShelfEyeLevel m on p.SOSDefinitionId=m.SOSDefinitionId `; + let join5 = ` LEFT OUTER JOIN ${AppTables.EYE_LEVEL_CHILD_DATA} wd on p.SOSDefinitionId=wd.SOS_DEFINITION_ID and wd.SOS_HDR_VALUE='${SOSHeaderValue}' and wd.STORE_ID='${StoreId}' and wd.VISIT_DATE='${d2}' `; + let target_join = ` LEFT OUTER JOIN Mapping_ShareOfShelfTarget tg on p.SOSDefinitionId=tg.SOSDefinitionId and tg.StateId='${StateId}' `; + + let q = `SELECT ${selectlist} from Master_ShareOfShelfEyeLevelDefinition p ${join1} ${join5} ${target_join} Where m.StoreId ='${StoreId}' and p.SOSHeaderValue='${SOSHeaderValue}' + ${sosCheckAs == true ? ` and p.SOSChildValue in (${childAssorted}) ` : ''} + order by p.ChildName `; + + + await txn.executeSql(q, [], async function (txn2, txnres) { + console.log('sossubcats added', txnres.rows.length); + if (txnres.rows.length > 0) { + let arr = [], arr2 = []; + for (var i = 0; i < txnres.rows.length; i++) { + let data = txnres.rows.item(i); + + let SOSChildEyeLevelTotalFacing = data.SOSChildEyeLevelTotalFacing == 1 || data.SOSChildEyeLevelTotalFacing == 'true' ? 1 : 0; + let SOSChildNonEyeLevelTotalFacing = data.SOSChildNonEyeLevelTotalFacing == 1 || data.SOSChildNonEyeLevelTotalFacing == 'true' ? 1 : 0; + let SOSChildNonEyeLevelSelfFacing = data.SOSChildNonEyeLevelSelfFacing == 1 || data.SOSChildNonEyeLevelSelfFacing == 'true' ? 1 : 0; + let SOSChildEyeLevelSelfFacing = data.SOSChildEyeLevelSelfFacing == 1 || data.SOSChildEyeLevelSelfFacing == 'true' ? 1 : 0; + + if (SOSChildEyeLevelTotalFacing == 1) { + console.log("input2_", 'input2_' + SOSHeaderValue + "_" + data.SOSChildValue) + inputRefs.current['input2_' + SOSHeaderValue + "_" + data.SOSChildValue] = ''; + } + if (SOSChildNonEyeLevelTotalFacing == 1) { + console.log("input3_", 'input3_' + SOSHeaderValue + "_" + data.SOSChildValue) + + inputRefs.current['input3_' + SOSHeaderValue + "_" + data.SOSChildValue] = ''; + } + if (SOSChildEyeLevelSelfFacing == 1) { + console.log("input4_", 'input4_' + SOSHeaderValue + "_" + data.SOSChildValue) + + inputRefs.current['input4_' + SOSHeaderValue + "_" + data.SOSChildValue] = ''; + } + if (SOSChildNonEyeLevelSelfFacing == 1) { + console.log("input5_", 'input5_' + SOSHeaderValue + "_" + data.SOSChildValue) + inputRefs.current['input5_' + SOSHeaderValue + "_" + data.SOSChildValue] = ''; + } + + + arr.push(data); + let allChildImages = await getChildImages(storeData1, cat1, data, menu1, data.SOSChildImageCount); + let defCData = { 'SOSChildValue': data.SOSChildValue, 'TotalNonEyeFacing': data.TotalNonEyeFacing, 'TotalEyeLevelFacing': data.TotalEyeLevelFacing, 'SelfNonEyeFacing': data.SelfNonEyeFacing, 'SelfEyeFacing': data.SelfEyeFacing, 'ChildImages': (allChildImages || []) }; + + console.log("SOSChildNonEye----", defCData) + arr2.push(defCData); + if (i == txnres.rows.length - 1) { + defData['allChilds'] = arr; + defData['childData'] = arr2; + resolve(defData); + } + } + } else { + resolve(defData); + } + // else{ + // console.log('sossubcats added',txnres.rows.length); + // await txn.executeSql(q,[],async function (txn2, txnres2) { + // if(txnres2.rows.length>0){ + // let arr=[],arr2=[]; + // for(var i=0;i { + return defData; + }); + } + + async function getChildImages(storeData1, cat1, subcat1, menu1, SOSChildImageCount) { + let allImages = []; + let { StoreId } = storeData1; + let { SOSHeaderId } = cat1; + let { SOSChildValue } = subcat1; + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + let q = ` SELECT IMAGE1 as Image1 FROM ${AppTables.SOS_IMAGES} where SOS_HEADER_ID='${SOSHeaderId}' and SOS_CHILD_VALUE='${SOSChildValue}' and TYPE='Child' and STORE_ID='${StoreId}' and VISIT_DATE='${d2}' `; + await txn.executeSql(q, [], async function (txn2, txnres) { + if (txnres.rows.length > 0) { + for (var i = 0; i < txnres.rows.length; i++) { + let data = txnres.rows.item(i); + let { Image1 } = data; + let imagePath = Image1 != null && Image1 != '' ? 'file://' + ImageFolderPath + menu1.ScreenName + "/" + Image1 : ''; + let obj = { 'Image1Name': Image1, 'Image1': imagePath }; + allImages.push(obj); + if (i == txnres.rows.length - 1) { + resolve(allImages); + } + } + } + else { + if (SOSChildImageCount > 0) { + for (let s = 0; s < SOSChildImageCount; s++) { + let obj = { 'Image1Name': '', 'Image1': '', img1Required: true }; + allImages.push(obj); + if (s == SOSChildImageCount - 1) { + resolve(allImages); + } + } + } + else { + resolve(allImages); + } + + } + }, function (txnE, txnerr) { console.log(txnerr); resolve(allImages); },); + }); + }).catch((err) => { + return allImages; + }) + } + + + + + async function getImage(imgdata) { + let type = getImageProps.type || ''; + let cat = getImageProps.cat || {}; + let splitItem = getImageProps.splitItem || {}; + let splitItemIndex = getImageProps.splitItemIndex || 0; + let skuItem = getImageProps.sku != null ? getImageProps.sku : {}; + + if (typeof imgdata == 'object' && imgdata.errorCode == 'camera_unavailable') { + notify(ST.Cameraunavailable); + } + else if (typeof imgdata == 'object' && imgdata.uri != null) { + const img = imgdata; + const imgurl = img.uri, imgWidth = img.width, imgHeight = img.ExtendedHeight; + let isImgFromGallery = img.fromGallery != null ? img.fromGallery : false; + let picture_clickedd = isImgFromGallery == true ? img.datetime : new Date(); + ////change by jeevanp + let picture_clicked_time = moment(picture_clickedd).format('MM-DD-YYYY HH:mm:ss') + let picture_clicked_time_for_pic_name = moment(picture_clickedd).format('MMDDYYYY_HHmmss') + console.log("time", picture_clicked_time); + console.log("time1", picture_clicked_time_for_pic_name); + let calculate_tym_date_for_filename = picture_clicked_time_for_pic_name; + let calculate_tym_date_over_img = picture_clicked_time; + + const mark_text1 = calculate_tym_date_over_img; + const mark_text2 = 'Store Name:' + storeData.StoreName + ' | Store Id:' + storeData.StoreId + ' | User Id:' + storeData.EmpId + ' | Image Type: ' + currentMenu.MenuName + ' - (' + cat.HeaderName + ')' + ' | Date:' + calculate_tym_date_over_img; + + let filename = ''; + if (type == '2') { + filename = storeData.StoreId + '_' + cat.SOSHeaderValue + '_' + skuItem.SOSChildValue + '_' + splitItemIndex + '_' + (props.UserId || '') + '_SOSImg-' + calculate_tym_date_for_filename + '.jpg'; + } + else { + filename = storeData.StoreId + '_' + cat.SOSHeaderValue + '_' + splitItemIndex + '_' + (props.UserId || '') + '_SOSImg-' + calculate_tym_date_for_filename + '.jpg'; + } + + let allData = SOSStockData; + let defData = { 'SOSHeaderValue': cat.SOSHeaderValue, 'Images': [], 'SKUData': [] }; + const catDataIndex = allData.findIndex(i => i.SOSHeaderValue == cat.SOSHeaderValue); + const catData = catDataIndex >= 0 ? allData[catDataIndex] : {}; + + + if (type == '2') { + var SKUData = catData['SKUData'] || []; + var childIndex = SKUData.findIndex(i => i.SOSChildValue == skuItem.SOSChildValue); + var childData = childIndex >= 0 ? SKUData[childIndex] : {}; + + var ChildImages = childData['ChildImages'] || []; + var image_key = 'Image1Name'; + var image_key_path = 'Image1'; + splitItem[image_key] = filename; + } + else { + var HeaderImages = catData['Images'] || []; + var image_key = 'Image1Name'; + var image_key_path = 'Image1'; + splitItem[image_key] = filename; + } + + + let imagePath = `${ImageFolderPath + currentMenu.ScreenName}/${filename}`; + RNFS.copyFile(imgurl, imagePath) + .then(async (resn) => { + // render data with clicked image + let uri = 'file://' + imagePath; + console.log('image marker:', uri); + setSelectedImg(uri) + + if (type == '2') { + splitItem[image_key_path] = uri; + splitItemIndex >= 0 ? ChildImages[splitItemIndex] = splitItem : ChildImages.push(splitItem); + childData['ChildImages'] = ChildImages; + childIndex >= 0 ? SKUData[childIndex] = childData : SKUData.push(childData); + + catData['SKUData'] = SKUData; + catDataIndex >= 0 ? allData[catDataIndex] = catData : allData.push(catData); + setSOSStockData(allData); + BgWindowData(allData) + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + else { + console.log('Hdr split image updated'); + splitItem[image_key_path] = uri; + splitItemIndex >= 0 ? HeaderImages[splitItemIndex] = splitItem : HeaderImages.push(splitItem); + catData['Images'] = HeaderImages; + catDataIndex >= 0 ? allData[catDataIndex] = catData : allData.push(catData); + // setSOSStockData(allData); + BgWindowData(allData) + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + + // add metdata then resize image and restored back to the imagePath + let restore_data = { "destFilePath": imagePath, "imgurl": imgurl, imgWidth, imgHeight, mark_text1, mark_text2 } + let is_restored = await restore_ImageWithMetaData(restore_data, imgdata); + console.log("image restored:", is_restored); + }) + .catch(err => { + console.log('ERROR: image file write failed!!!'); + console.log(err.message, err.code); + }); + } + } + + async function openCamera(cat, splitItem, splitItemIndex, type = '1', sku) { + setErrorField({}); + setError(false); + let GridAllow = type === '1' ? (window.SOSHeaderImageGrid === 'true' || window.SOSHeaderImageGrid == true || window.SOSHeaderImageGrid == '1' || window.SOSHeaderImageGrid == 1) : (window.SOSChildImageGrid === 'true' || window.SOSChildImageGrid == true || window.SOSChildImageGrid == '1' || window.SOSChildImageGrid == 1) + setGridValue(GridAllow); + setGetImageProps({ 'cat': cat, 'splitItem': splitItem, 'splitItemIndex': splitItemIndex, 'type': type, 'sku': sku }); + setShowCamera(true); + } + + async function onFocusChange(cat, sku, inputType = '1') { + let d = { 'catId': cat.SOSHeaderValue, 'subcatId': sku.SubSOSHeaderValue, 'inputType': inputType }; + console.log(d); + setCurrentFocusedData(d); + } + + async function focusToNext(cat, catIndex, skus, sku_index, type = 'EyeHEADER') { + + let activeKey = ''; + let arr = Object.keys(inputRefs.current); + + if (type == 'EyeHEADER') { + activeKey = 'input_' + cat.SOSHeaderValue; + } else if (type == 'NonEyeHEADER') { + activeKey = 'input1_' + cat.SOSHeaderValue; + } else if (type == "ChildEyeTotal") { + activeKey = 'input2_' + cat.SOSHeaderValue + '_' + skus.SOSChildValue; + } else if (type == "ChildNonEyeTotal") { + activeKey = 'input3_' + cat.SOSHeaderValue + '_' + skus.SOSChildValue; + } else if (type == "CHILD1") { + activeKey = 'input4_' + cat.SOSHeaderValue + '_' + skus.SOSChildValue; + } else if (type == "CHILD2") { + activeKey = 'input5_' + cat.SOSHeaderValue + '_' + skus.SOSChildValue; + } + + + let activeIndex = arr.indexOf(activeKey); + if (activeIndex < arr.length - 1) { + let nextKey = arr[++activeIndex] + let nextRef = inputRefs.current[nextKey]; + console.log("nextKey", activeKey, cat, nextKey, nextRef, inputRefs.current[nextKey]) + nextRef.focus(); + } + else { + return + } + + } + + async function submitOpeningStock() { + let isvalid = await validate(); + if (isvalid) { + Keyboard.dismiss(); + setShowAlert(true); + } + } + + async function saveData() { + // setHasUnsavedChanges(false); + BgUnsavedChanges(false) + setShowAlert(false); + setLoaderTitle('Saving Data...'); + setProcessing(true); + try { + let { StoreId, ChainId, StateId, StoreTypeId } = storeData; + let { PSAllow } = currentMenu + let deletePrevData = false; + if (ShowCatWise && PSAllow) { + if (FilteredPromoValues.length > 0) { + await removePreviousData(); + } + else { + notify('Something went wrong while deleteing old data!') + setProcessing(false); + return; + } + } else { + deletePrevData = true; + } + + + await db.transaction(async function (txn) { + + // remove old data + if (deletePrevData) { + let q = `DELETE FROM ${AppTables.EYE_LEVEL_HDR_DATA} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' `; + let q2 = `DELETE FROM ${AppTables.EYE_LEVEL_CHILD_DATA} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' `; + let q3 = `DELETE FROM ${AppTables.EYE_LEVEL_IMAGES} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' `; + + await txn.executeSql(q, [], async function (txn2, txnres) { + console.log('stock facing hdr data deleted'); + }, function (txnE, txnerr) { console.log(txnerr); },); + + await txn.executeSql(q2, [], async function (txn2, txnres) { + console.log('stock facing images deleted'); + }, function (txnE, txnerr) { console.log(txnerr); },); + + await txn.executeSql(q3, [], async function (txn2, txnres) { + console.log('stock facing child data deleted'); + }, function (txnE, txnerr) { console.log(txnerr); },); + } + + insertData(); + + + }); + } catch (err) { + console.log(err); + } + } + + async function removePreviousData() { + let { StoreId, ChainId, StateId, StoreTypeId } = storeData; + + return new Promise((resolve, reject) => { + + db.transaction(async function (txn) { + let FilterIdsJoin = FilteredPromoValues.join(','); + let q = `SELECT * FROM ${AppTables.EYE_LEVEL_HDR_DATA} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' and SOS_HDR_VALUE in (${FilterIdsJoin}) ` + await txn.executeSql(q, [], async function (txn2, txnres) { + console.log("data to delete:", txnres.rows.length); + if (txnres.rows.length > 0) { + let arr = []; + let isHdrDel = false, isImagesDel = false, isStockDel = false; + for (let i = 0; i < txnres.rows.length; i++) { + let data = txnres.rows.item(i); + let { SOS_HEADER_ID } = data; + arr.push(SOS_HEADER_ID); + + if (i == txnres.rows.length - 1) { + let AllHdrIds = `'${arr.join("','")}'`; + + await txn.executeSql(`DELETE FROM ${AppTables.EYE_LEVEL_HDR_DATA} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' and SOS_HEADER_ID in (${AllHdrIds}) `, [], async function (txn2, txnres) { + console.log('window hdr data deleted'); + isHdrDel = true; + if (isHdrDel && isImagesDel && isStockDel) { + resolve(true); + } + }, function (txnE, txnerr) { console.log(txnerr); },); + await txn.executeSql(`DELETE FROM ${AppTables.EYE_LEVEL_IMAGES} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' and SOS_HEADER_ID in (${AllHdrIds}) `, [], async function (txn2, txnres) { + console.log('window images data deleted'); + isImagesDel = true; + if (isHdrDel && isImagesDel && isStockDel) { + resolve(true); + } + }, function (txnE, txnerr) { console.log(txnerr); },); + await txn.executeSql(`DELETE FROM ${AppTables.EYE_LEVEL_CHILD_DATA} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' and SOS_HEADER_ID in (${AllHdrIds}) `, [], async function (txn2, txnres) { + console.log('window stock data deleted'); + isStockDel = true; + if (isHdrDel && isImagesDel && isStockDel) { + resolve(true); + } + }, function (txnE, txnerr) { console.log(txnerr); },); + + } + } + } + else { + resolve(true); + } + }, function (txnE, txnerr) { console.log(txnerr); resolve(false); },); + + + }); + + }).then((val) => { + return val; + }).catch((err) => { + console.log('error:', err); + return false; + }) + } + + async function insertData() { + try { + + let { StoreId, ChainId, StateId, StoreTypeId } = storeData; + await db.transaction(async function (txn) { + var values = '', stock_values = '', images_values = '', SOSHdrFacingDec = '', lastchar = '', SelfFacinglastchar = '', SelfFacingDec = '', TotalFacingDec = '', TotalFacinglastchar = ''; + for (var i = 0; i < AllSOSData.length; i++) { + let item = AllSOSData[i]; + const cat = item; + const catIndex = i; + let { SOSHeaderTable, SOSHeaderField, SOSHeaderValue, HeaderName, SOSHeaderNonEyeLevelFacing, SOSHeaderEyeLevelFacingLable, SOSHeaderNonEyeLevelFacingLable, SOSHeaderImage, SOSHeaderImageCount, SOSHeaderImageGrid } = cat; + let SOSHeaderId = 'SOS' + i + SOSHeaderValue + moment().format('MMDDYYYYHHmmss'); + const cindex = SOSStockData.findIndex(i => i.SOSHeaderValue == item.SOSHeaderValue); + const cobj = cindex >= 0 ? SOSStockData[cindex] : {}; + const HeaderImages = cobj['Images'] || []; + let SOSHdrEyeFacing = cobj['SOSHdrEyeFacing'] != null ? cobj['SOSHdrEyeFacing'] : (cobj['SOSHdrEyeFacing'] === 0 ? cobj['SOSHdrEyeFacing'] : ''); + SOSHdrEyeFacing = SOSHdrEyeFacing + ""; + + let SOSHdrNonEyeFacing = cobj['SOSHdrNonEyeFacing'] != null ? cobj['SOSHdrNonEyeFacing'] : (cobj['SOSHdrNonEyeFacing'] === 0 ? cobj['SOSHdrNonEyeFacing'] : ''); + SOSHdrNonEyeFacing = SOSHdrNonEyeFacing + ""; + + + console.log("SOSHdrFacing:", SOSHdrEyeFacing) + // if decimal value is allowed in facing - then validate on save time if is there any illegal decimal value then adjust it , for e.g. 0. or .0 is not valid integer or float number + // this will only alter the value of facing if it is in decimal form + if (SOSHdrEyeFacing != null && SOSHdrEyeFacing != '' && SOSHdrEyeFacing.includes(".")) { + let SOSHdrEyeFacing_CharArr = SOSHdrEyeFacing.split("."); + // there should be only two parts of this decimal value - the value before dot(.) and the value after dot(.) + // (Warning !! more than 2 values resturn by split function on dot (.) char will be ignored) + let charbefore_dot = SOSHdrEyeFacing_CharArr.length > 0 ? (SOSHdrEyeFacing_CharArr[0] != null && SOSHdrEyeFacing_CharArr[0] != '' ? SOSHdrEyeFacing_CharArr[0] : '0') : '0'; + let charafter_dot = SOSHdrEyeFacing_CharArr.length > 1 ? (SOSHdrEyeFacing_CharArr[1] != null && SOSHdrEyeFacing_CharArr[1] != '' ? SOSHdrEyeFacing_CharArr[1] : '0') : '0'; + console.log("charbefore_dot:", charbefore_dot, ",", charafter_dot); + SOSHdrEyeFacing = charbefore_dot + "." + charafter_dot; + // lastchar=SOSHdrFacing.substring(SOSHdrFacing.length-2,SOSHdrFacing.length-1); + // SOSHdrFacingDec = lastchar==='.'?lastchar+"0": SOSHdrFacing; + } + + if (SOSHdrNonEyeFacing != null && SOSHdrNonEyeFacing != '' && SOSHdrNonEyeFacing.includes(".")) { + let SOSHdrNonEyeFacing_CharArr = SOSHdrNonEyeFacing.split("."); + // there should be only two parts of this decimal value - the value before dot(.) and the value after dot(.) + // (Warning !! more than 2 values resturn by split function on dot (.) char will be ignored) + let charbefore_dot = SOSHdrNonEyeFacing_CharArr.length > 0 ? (SOSHdrNonEyeFacing_CharArr[0] != null && SOSHdrNonEyeFacing_CharArr[0] != '' ? SOSHdrNonEyeFacing_CharArr[0] : '0') : '0'; + let charafter_dot = SOSHdrNonEyeFacing_CharArr.length > 1 ? (SOSHdrNonEyeFacing_CharArr[1] != null && SOSHdrNonEyeFacing_CharArr[1] != '' ? SOSHdrNonEyeFacing_CharArr[1] : '0') : '0'; + console.log("charbefore_dot:", charbefore_dot, ",", charafter_dot); + SOSHdrNonEyeFacing = charbefore_dot + "." + charafter_dot; + // lastchar=SOSHdrFacing.substring(SOSHdrFacing.length-2,SOSHdrFacing.length-1); + // SOSHdrFacingDec = lastchar==='.'?lastchar+"0": SOSHdrFacing; + } + console.log("SOSHdrFacing after alter:", SOSHdrEyeFacing) + + let this_SKUData = cobj['SKUData'] || []; + values += values != '' ? ' , ' : ''; + values += ` ('${SOSHeaderId}','${StoreId}','${d2}','${SOSHeaderTable}','${SOSHeaderField}','${SOSHeaderValue}','${HeaderName}','${SOSHdrEyeFacing}','${SOSHdrNonEyeFacing}','${d2}') `; + + let skulist = item['skulist'] || []; + let SOSHeaderImage1 = item.SOSHeaderImage == 1 || item.SOSHeaderImage == 'true' ? 1 : 0; + if (SOSHeaderImage1 == true) { + for (var k = 0; k < HeaderImages.length; k++) { + let imgObj = HeaderImages[k]; + let { Image1Name, Image1 } = imgObj; + images_values += images_values != '' ? ' , ' : ''; + images_values += ` ('${SOSHeaderId}','${StoreId}','${d2}','${SOSHeaderValue}','','${(Image1Name || '')}','Header','${d2}') `; + } + } + + for (var j = 0; j < skulist.length; j++) { + let skus = skulist[j]; + let sku_index = j; + let { SOSDefinitionId, SOSChildTable, SOSChildField, SOSChildValue, ChildName, SOSChildEyeLevelTotalFacing, SOSChildEyeLevelSelfFacing, SOSChildNonEyeLevelSelfFacing, SOSChildEyeLevelTotalFacingLable, SOSChildNonEyeLevelSelfFacingLable, SOSChildEyeLevelSelfFacingLable, SOSChildImage, SOSChildImageCount, SOSChildImageGrid } = skus; + stock_values += stock_values != '' ? ' , ' : ''; + + let thisCatSkuData_i = this_SKUData.findIndex(i => i.SOSChildValue == skus.SOSChildValue); + let thisCatSkuData = thisCatSkuData_i >= 0 ? (this_SKUData[thisCatSkuData_i] || {}) : {}; + let TotalFacing = thisCatSkuData.TotalFacing != null ? thisCatSkuData.TotalFacing : (thisCatSkuData.TotalFacing === 0 ? thisCatSkuData.TotalFacing : ''); + + let TotalNonEyeFacing = thisCatSkuData.TotalNonEyeFacing != null ? thisCatSkuData.TotalNonEyeFacing : (thisCatSkuData.TotalNonEyeFacing === 0 ? thisCatSkuData.TotalNonEyeFacing : ''); + let TotalEyeLevelFacing = thisCatSkuData.TotalEyeLevelFacing != null ? thisCatSkuData.TotalEyeLevelFacing : (thisCatSkuData.TotalEyeLevelFacing === 0 ? thisCatSkuData.TotalEyeLevelFacing : ''); + + let SelfNonEyeFacing = thisCatSkuData.SelfNonEyeFacing != null ? thisCatSkuData.SelfNonEyeFacing : (thisCatSkuData.SelfNonEyeFacing === 0 ? thisCatSkuData.SelfNonEyeFacing : ''); + let SelfEyeFacing = thisCatSkuData.SelfEyeFacing != null ? thisCatSkuData.SelfEyeFacing : (thisCatSkuData.SelfEyeFacing === 0 ? thisCatSkuData.SelfEyeFacing : ''); + + + SelfNonEyeFacing = SelfNonEyeFacing + ""; + SelfEyeFacing = SelfEyeFacing + ""; + + console.log("SelfNonEyeFacing", SelfNonEyeFacing) + // if decimal value is allowed in facing - then validate on save time if is there any illegal decimal value then adjust it , for e.g. 0. or .0 is not valid integer or float number + // this will only alter the value of facing if it is in decimal form + + if (SelfEyeFacing != null && SelfEyeFacing != '' && SelfEyeFacing.includes(".")) { + let SelfFacing_CharArr = SelfEyeFacing.split("."); + // there should be only two parts of this decimal value - the value before dot(.) and the value after dot(.) + // (Warning !! more than 2 values resturn by split function on dot (.) char will be ignored) + let charbefore_dot = SelfFacing_CharArr.length > 0 ? (SelfFacing_CharArr[0] != null && SelfFacing_CharArr[0] != '' ? SelfFacing_CharArr[0] : '0') : '0'; + let charafter_dot = SelfFacing_CharArr.length > 1 ? (SelfFacing_CharArr[1] != null && SelfFacing_CharArr[1] != '' ? SelfFacing_CharArr[1] : '0') : '0'; + console.log("charbefore_dot:", charbefore_dot, ",", charafter_dot); + SelfEyeFacing = charbefore_dot + "." + charafter_dot; + } + + if (SelfNonEyeFacing != null && SelfNonEyeFacing != '' && SelfNonEyeFacing.includes(".")) { + let SelfFacing_CharArr = SelfNonEyeFacing.split("."); + // there should be only two parts of this decimal value - the value before dot(.) and the value after dot(.) + // (Warning !! more than 2 values resturn by split function on dot (.) char will be ignored) + let charbefore_dot = SelfFacing_CharArr.length > 0 ? (SelfFacing_CharArr[0] != null && SelfFacing_CharArr[0] != '' ? SelfFacing_CharArr[0] : '0') : '0'; + let charafter_dot = SelfFacing_CharArr.length > 1 ? (SelfFacing_CharArr[1] != null && SelfFacing_CharArr[1] != '' ? SelfFacing_CharArr[1] : '0') : '0'; + console.log("charbefore_dot:", charbefore_dot, ",", charafter_dot); + SelfNonEyeFacing = charbefore_dot + "." + charafter_dot; + } + + console.log("SelfNonEyeFacing after alter:", SelfNonEyeFacing) + + TotalNonEyeFacing = TotalNonEyeFacing + ""; + TotalEyeLevelFacing = TotalEyeLevelFacing + ""; + TotalFacing = TotalFacing + ""; + + console.log("TotalFacing", TotalFacing) + // if decimal value is allowed in facing - then validate on save time if is there any illegal decimal value then adjust it , for e.g. 0. or .0 is not valid integer or float number + // this will only alter the value of facing if it is in decimal form + if (TotalFacing != null && TotalFacing != '' && TotalFacing.includes(".")) { + let TotalFacing_CharArr = TotalFacing.split("."); + // there should be only two parts of this decimal value - the value before dot(.) and the value after dot(.) + // (Warning !! more than 2 values resturn by split function on dot (.) char will be ignored) + let charbefore_dot = TotalFacing_CharArr.length > 0 ? (TotalFacing_CharArr[0] != null && TotalFacing_CharArr[0] != '' ? TotalFacing_CharArr[0] : '0') : '0'; + let charafter_dot = TotalFacing_CharArr.length > 1 ? (TotalFacing_CharArr[1] != null && TotalFacing_CharArr[1] != '' ? TotalFacing_CharArr[1] : '0') : '0'; + console.log("charbefore_dot:", charbefore_dot, ",", charafter_dot); + TotalFacing = charbefore_dot + "." + charafter_dot; + } + + if (TotalEyeLevelFacing != null && TotalEyeLevelFacing != '' && TotalEyeLevelFacing.includes(".")) { + let TotalEyeLevelFacing_CharArr = TotalEyeLevelFacing.split("."); + // there should be only two parts of this decimal value - the value before dot(.) and the value after dot(.) + // (Warning !! more than 2 values resturn by split function on dot (.) char will be ignored) + let charbefore_dot = TotalEyeLevelFacing_CharArr.length > 0 ? (TotalEyeLevelFacing_CharArr[0] != null && TotalEyeLevelFacing_CharArr[0] != '' ? TotalEyeLevelFacing_CharArr[0] : '0') : '0'; + let charafter_dot = TotalEyeLevelFacing_CharArr.length > 1 ? (TotalEyeLevelFacing_CharArr[1] != null && TotalEyeLevelFacing_CharArr[1] != '' ? TotalEyeLevelFacing_CharArr[1] : '0') : '0'; + console.log("charbefore_dot:", charbefore_dot, ",", charafter_dot); + TotalEyeLevelFacing = charbefore_dot + "." + charafter_dot; + } + if (TotalNonEyeFacing != null && TotalNonEyeFacing != '' && TotalNonEyeFacing.includes(".")) { + let TotalNonEyeFacing_CharArr = TotalNonEyeFacing.split("."); + // there should be only two parts of this decimal value - the value before dot(.) and the value after dot(.) + // (Warning !! more than 2 values resturn by split function on dot (.) char will be ignored) + let charbefore_dot = TotalNonEyeFacing_CharArr.length > 0 ? (TotalNonEyeFacing_CharArr[0] != null && TotalNonEyeFacing_CharArr[0] != '' ? TotalNonEyeFacing_CharArr[0] : '0') : '0'; + let charafter_dot = TotalNonEyeFacing_CharArr.length > 1 ? (TotalNonEyeFacing_CharArr[1] != null && TotalNonEyeFacing_CharArr[1] != '' ? TotalNonEyeFacing_CharArr[1] : '0') : '0'; + console.log("charbefore_dot:", charbefore_dot, ",", charafter_dot); + TotalNonEyeFacing = charbefore_dot + "." + charafter_dot; + } + + console.log("SelfNonEyeFacing after alter:", SelfNonEyeFacing) + + const ChildImages = thisCatSkuData['ChildImages'] || []; + + stock_values += ` ('${SOSHeaderId}','${StoreId}','${d2}','${SOSDefinitionId}','${SOSHeaderValue}','${SOSChildTable}','${SOSChildField}','${SOSChildValue}','${ChildName}','${TotalEyeLevelFacing}','${TotalNonEyeFacing}','${SelfNonEyeFacing}','${SelfEyeFacing}','${d2}') `; + + let SOSChildImage1 = SOSChildImage == 1 || SOSChildImage == 'true' ? 1 : 0; + if (SOSChildImage1 == true) { + for (var l = 0; l < ChildImages.length; l++) { + let imgObj = ChildImages[l]; + let { Image1Name, Image1 } = imgObj; + images_values += images_values != '' ? ' , ' : ''; + images_values += ` ('${SOSHeaderId}','${StoreId}','${d2}','${SOSHeaderValue}','${SOSChildValue}','${(Image1Name || '')}','Child','${d2}') `; + } + } + } + } + + console.log("values:", values) + + let add_StockHdr = `INSERT INTO ${AppTables.EYE_LEVEL_HDR_DATA} (SOS_HEADER_ID,STORE_ID,VISIT_DATE,SOS_HDR_TABLE,SOS_HDR_FIELD,SOS_HDR_VALUE,HEADER_NAME,EYE_LEVEL_HDR_FACING,NONEYE_LEVEL_HDR_FACING,ADDED_DATE) VALUES ${values} `; + let add_Stock = `INSERT INTO ${AppTables.EYE_LEVEL_CHILD_DATA} (SOS_HEADER_ID,STORE_ID,VISIT_DATE,SOS_DEFINITION_ID,SOS_HDR_VALUE,SOS_CHILD_TABLE,SOS_CHILD_FIELD,SOS_CHILD_VALUE,CHILD_NAME,TOTAL_EYE_FACING,TOTAL_NONEYE_FACING,SELF_EYE_FACING,SELF_NONEYE_FACING,ADDED_DATE ) VALUES ${stock_values} `; + let add_images = `INSERT INTO ${AppTables.EYE_LEVEL_IMAGES} (SOS_HEADER_ID,STORE_ID,VISIT_DATE,SOS_HDR_VALUE,SOS_CHILD_VALUE,IMAGE1,TYPE,ADDED_DATE) VALUES ${images_values} `; + + console.log("add_Stock-------", add_Stock) + await txn.executeSql(add_StockHdr, [], async function (txn2, txnres) { + console.log('stock facing header added'); + await txn.executeSql(add_Stock, [], async function (txn2, txnres) { + console.log('stock facing child added'); + + if (images_values != '') { + await txn.executeSql(add_images, [], async function (txn2, txnres) { + console.log('stock facing images added'); + notify('Share Of Shelf data updated successfully'); + setProcessing(false); + // clear store data in local storage to avoiding re-set data for the store + clear_item('storeData') + props.navigation.goBack(); + }, function (txnE, txnerr) { console.log(txnerr); setProcessing(false); notify('Cannot add Share Of Shelf data') },); + } + else { + + notify('Share Of Shelf data updated successfully'); + setProcessing(false); + // clear store data in local storage to avoiding re-set data for the store + clear_item('storeData') + props.navigation.goBack(); + } + }, function (txnE, txnerr) { console.log(txnerr); setProcessing(false); notify('Cannot add Share Of Shelf data') },); + }, function (txnE, txnerr) { console.log(txnerr); setProcessing(false); notify('Cannot add Share Of Shelf data') },); + }); + } catch (err) { + console.log(err); + } + } + + + async function validate() { + function showError(obj, isErr) { + setErrorField(obj); + setError(isErr); + } + + return new Promise((resolve, reject) => { + for (const index in AllSOSData) { + const item = AllSOSData[index]; + const cat = item; + const catIndex = index; + + let SOSHeaderImage = item.SOSHeaderImage == 1 || item.SOSHeaderImage == 'true' ? 1 : 0; + let SOSHeaderEyeLevelFacing = item.SOSHeaderEyeLevelFacing == 1 || item.SOSHeaderEyeLevelFacing == 'true' ? 1 : 0; + let SOSHeaderEyeLevelFacingLable = item.SOSHeaderEyeLevelFacingLable != null ? item.SOSHeaderEyeLevelFacingLable : ''; + + + let SOSHeaderNonEyeLevelFacing = item.SOSHeaderNonEyeLevelFacing == 1 || item.SOSHeaderNonEyeLevelFacing == 'true' ? 1 : 0; + let SOSHeaderNonEyeLevelFacingLable = item.SOSHeaderNonEyeLevelFacingLable != null ? item.SOSHeaderNonEyeLevelFacingLable : ''; + const cindex = SOSStockData.findIndex(i => i.SOSHeaderValue == item.SOSHeaderValue); + const cobj = cindex >= 0 ? SOSStockData[cindex] : {}; + const HeaderImages = cobj['Images'] || []; + let SOSHdrEyeFacing = cobj['SOSHdrEyeFacing'] != null ? cobj['SOSHdrEyeFacing'] : ''; + let SOSHdrNonEyeFacing = cobj['SOSHdrNonEyeFacing'] != null ? cobj['SOSHdrNonEyeFacing'] : ''; + + let this_SKUData = cobj['SKUData'] || []; + let TotalSelfFacingsEntered = 0; + let TotalSelfNonEyeFacingsEntered = 0; + let TotalSelfEyeFacingsEntered = 0; + console.log('StoreCameraAllow:', StoreCameraAllow); + + let errorobj = { 'EF_Cat': cat }; + + if (SOSHeaderEyeLevelFacing == true && SOSHdrEyeFacing !== 0 && (SOSHdrEyeFacing == null || SOSHdrEyeFacing == '')) { + errorobj["EF_EyeHEADER"] = 'EyeHEADER'; + showError(errorobj, true); + let refIn1 = inputRefs.current['input_' + cat.SOSHeaderValue]; + refIn1.focus(); + notify(`Please enter Header Facing for ${cat.HeaderName}`, 'SHORT'); + resolve(false); return; + } + else if (SOSHeaderNonEyeLevelFacing == true && SOSHdrNonEyeFacing !== 0 && (SOSHdrNonEyeFacing == null || SOSHdrNonEyeFacing == '')) { + errorobj["EF_NonEyeHEADER"] = 'NonEyeHEADER'; + showError(errorobj, true); + let refIn1 = inputRefs.current['input1_' + cat.SOSHeaderValue]; + refIn1.focus(); + notify(`Please enter Header Facing for ${cat.HeaderName}`, 'SHORT'); + resolve(false); return; + } else { + if (StoreCameraAllow && SOSHeaderImage == true && HeaderImages.length > 0) { + for (const splitItemIndex in HeaderImages) { + const splitItem = HeaderImages[splitItemIndex]; + let Image1Name = splitItem['Image1Name'] != null && splitItem['Image1Name'] != '' ? splitItem['Image1Name'] : ''; + if (Image1Name == '') { + errorobj["EF_HdrImage"] = 'HdrImage'; + errorobj["EF_HdrImageIndex"] = splitItemIndex; + showError(errorobj, true); + let refIn1 = inputRefs.current['input_' + cat.SOSHeaderValue]; + refIn1.focus(); + notify(`Please click all header images for ${cat.HeaderName}`, 'SHORT'); + resolve(false); return; + } + } + } + let skulist = cat.skulist || []; + for (const sku_index in skulist) { + const skus = skulist[sku_index]; + + let SOSChildImage = skus.SOSChildImage == 1 || skus.SOSChildImage == 'true' ? 1 : 0; + let SOSChildEyeLevelTotalFacing = skus.SOSChildEyeLevelTotalFacing == 1 || skus.SOSChildEyeLevelTotalFacing == 'true' ? 1 : 0; + let SOSChildNonEyeLevelTotalFacing = skus.SOSChildNonEyeLevelTotalFacing == 1 || skus.SOSChildNonEyeLevelTotalFacing == 'true' ? 1 : 0; + + let SOSChildNonEyeLevelSelfFacing = skus.SOSChildNonEyeLevelSelfFacing == 1 || skus.SOSChildNonEyeLevelSelfFacing == 'true' ? 1 : 0; + let SOSChildEyeLevelSelfFacing = skus.SOSChildEyeLevelSelfFacing == 1 || skus.SOSChildEyeLevelSelfFacing == 'true' ? 1 : 0; + + let SOSChildNonEyeLevelSelfFacingLable = skus.SOSChildNonEyeLevelSelfFacingLable != null ? skus.SOSChildNonEyeLevelSelfFacingLable : ''; + let SOSChildEyeLevelSelfFacingLable = skus.SOSChildEyeLevelSelfFacingLable != null ? skus.SOSChildEyeLevelSelfFacingLable : ''; + + + + let SOSChildEyeLevelTotalFacingLable = skus.SOSChildEyeLevelTotalFacingLable != null ? skus.SOSChildEyeLevelTotalFacingLable : ''; + // let SOSChildNonEyeLevelSelfFacingLable=skus.SOSChildNonEyeLevelSelfFacingLable!=null?skus.SOSChildNonEyeLevelSelfFacingLable: ''; + + + let thisCatSkuData_i = this_SKUData.findIndex(i => i.SOSChildValue == skus.SOSChildValue); + let thisCatSkuData = thisCatSkuData_i >= 0 ? (this_SKUData[thisCatSkuData_i] || {}) : {}; + let TotalFacing = thisCatSkuData.TotalFacing != null ? thisCatSkuData.TotalFacing : ''; + + let TotalEyeLevelFacing = thisCatSkuData.TotalEyeLevelFacing != null ? thisCatSkuData.TotalEyeLevelFacing : ''; + let TotalNonEyeFacing = thisCatSkuData.TotalNonEyeFacing != null ? thisCatSkuData.TotalNonEyeFacing : ''; + let SelfNonEyeFacing = thisCatSkuData.SelfNonEyeFacing != null ? thisCatSkuData.SelfNonEyeFacing : ''; + let SelfEyeFacing = thisCatSkuData.SelfEyeFacing != null ? thisCatSkuData.SelfEyeFacing : ''; + + const ChildImages = thisCatSkuData['ChildImages'] || []; + errorobj["EF_Brand"] = skus; + + if (SOSChildEyeLevelTotalFacing == true && TotalEyeLevelFacing !== 0 && (TotalEyeLevelFacing == null || TotalEyeLevelFacing == '')) { + errorobj["EF_ChildEyeTotal"] = 'ChildEyeTotal'; + showError(errorobj, true); + let refIn1 = inputRefs.current['input2_' + cat.SOSHeaderValue + '_' + skus.SOSChildValue]; + refIn1.focus(); + notify(`Please enter ${SOSChildEyeLevelTotalFacingLable} for ${skus.ChildName} in ${cat.HeaderName}`, 'SHORT'); + resolve(false); return; + } else if (SOSChildNonEyeLevelTotalFacing == true && TotalNonEyeFacing !== 0 && (TotalNonEyeFacing == null || TotalNonEyeFacing == '')) { + errorobj["EF_ChildNonEyeTotal"] = 'ChildNonEyeTotal'; + showError(errorobj, true); + let refIn1 = inputRefs.current['input3_' + cat.SOSHeaderValue + '_' + skus.SOSChildValue]; + refIn1.focus(); + notify(`Please enter ${SOSChildNonEyeLevelTotalFacingLable} for ${skus.ChildName} in ${cat.HeaderName}`, 'SHORT'); + resolve(false); return; + } else if (SOSChildEyeLevelSelfFacing == true && SelfEyeFacing !== 0 && (SelfEyeFacing == null || SelfEyeFacing == '')) { + errorobj["EF_CHILD1"] = 'CHILD1'; + showError(errorobj, true); + let refIn1 = inputRefs.current['input4_' + cat.SOSHeaderValue + '_' + skus.SOSChildValue]; + refIn1.focus(); + notify(`Please enter ${SOSChildEyeLevelSelfFacingLable} for ${skus.ChildName} in ${cat.HeaderName}`, 'SHORT'); + resolve(false); return; + } + else if (SOSChildNonEyeLevelSelfFacing == true && SelfNonEyeFacing !== 0 && (SelfNonEyeFacing == null || SelfNonEyeFacing == '')) { + errorobj["EF_CHILD2"] = 'CHILD2'; + showError(errorobj, true); + let refIn1 = inputRefs.current['input5_' + cat.SOSHeaderValue + '_' + skus.SOSChildValue]; + refIn1.focus(); + notify(`Please enter ${SOSChildNonEyeLevelSelfFacingLable} for ${skus.ChildName} in ${cat.HeaderName}`, 'SHORT'); + resolve(false); return; + } + else if (SOSChildEyeLevelSelfFacing == true && SOSChildEyeLevelTotalFacing == true && (parseFloat(SelfEyeFacing) > parseFloat(TotalEyeLevelFacing))) { + // show error in both field : the ChildTotal and the ChildSelf + + errorobj["EF_ChildEyeTotal"] = 'ChildEyeTotal'; + errorobj["EF_CHILD1"] = 'CHILD1'; + showError(errorobj, true); + let refIn1 = inputRefs.current['input2_' + cat.SOSHeaderValue + '_' + skus.SOSChildValue]; + refIn1.focus(); + + notify(`${SOSChildNonEyeLevelSelfFacingLable} should be less than or equals to ${SOSChildEyeLevelTotalFacingLable} for ${skus.ChildName} in ${cat.HeaderName}`, 'SHORT'); + resolve(false); return; + } + else if (SOSChildNonEyeLevelSelfFacing == true && SOSChildNonEyeLevelTotalFacing == true && (parseFloat(SelfNonEyeFacing) > parseFloat(TotalNonEyeFacing))) { + // show error in both field : the ChildTotal and the ChildSelf + errorobj["EF_ChildNonEyeTotal"] = 'ChildNonEyeTotal'; + errorobj["EF_CHILD2"] = 'CHILD2'; + showError(errorobj, true); + let refIn1 = inputRefs.current['input3_' + cat.SOSHeaderValue + '_' + skus.SOSChildValue]; + refIn1.focus(); + + notify(`${SOSChildNonEyeLevelSelfFacingLable} should be less than or equals to ${SOSChildEyeLevelTotalFacingLable} for ${skus.ChildName} in ${cat.HeaderName}`, 'SHORT'); + resolve(false); return; + } + else { + TotalSelfNonEyeFacingsEntered += parseFloat(parseFloat(SelfNonEyeFacing).toFixed(2)); + TotalSelfEyeFacingsEntered += parseFloat(parseFloat(SelfEyeFacing).toFixed(2)); + + if (sku_index == this_SKUData.length - 1) { + // console.log("TotalSelfFacingsEntered:",TotalSelfFacingsEntered ,",HdrFacing:",parseFloat(parseFloat(SelfEyeFacing).toFixed(2)), (TotalSelfFacingsEntered> parseFloat(SelfEyeFacing).toFixed(2))) + if (SOSChildNonEyeLevelSelfFacing == true && SOSHeaderNonEyeLevelFacing == true && (TotalSelfNonEyeFacingsEntered > parseFloat(parseFloat(SOSHdrNonEyeFacing).toFixed(2)))) { + // show error in both field : the HdrTotal and the ChildSelf + errorobj["EF_HdrFacing"] = 'HdrFacing'; + errorobj["EF_ChildSelf"] = 'ChildSelf'; + showError(errorobj, true); + let refIn1 = inputRefs.current['input_' + cat.SOSHeaderValue]; + refIn1.focus(); + + notify(`Sum of all ${SOSChildNonEyeLevelSelfFacingLable} should be less than or equals to ${SOSHeaderEyeLevelFacingLable} for ${cat.HeaderName}`, 'SHORT'); + resolve(false); return; + } + if (SOSChildEyeLevelSelfFacing == true && SOSHeaderEyeLevelFacing == true && (TotalSelfEyeFacingsEntered > parseFloat(parseFloat(SOSHdrEyeFacing).toFixed(2)))) { + // show error in both field : the HdrTotal and the ChildSelf + errorobj["EF_HdrFacing"] = 'HdrFacing'; + errorobj["EF_ChildSelf"] = 'ChildSelf'; + showError(errorobj, true); + let refIn1 = inputRefs.current['input_' + cat.SOSHeaderValue]; + refIn1.focus(); + + notify(`Sum of all ${SOSChildNonEyeLevelSelfFacingLable} should be less than or equals to ${SOSHeaderEyeLevelFacingLable} for ${cat.HeaderName}`, 'SHORT'); + resolve(false); return; + } + } + + console.log('StoreCameraAllow:', StoreCameraAllow, SOSChildImage) + + if (StoreCameraAllow && SOSChildImage == true && ChildImages.length > 0) { + for (const splitItemIndex in ChildImages) { + const splitItem = ChildImages[splitItemIndex]; + let Image1Name = splitItem['Image1Name'] != null && splitItem['Image1Name'] != '' ? splitItem['Image1Name'] : ''; + if (Image1Name == '') { + errorobj["EF_ChildImage"] = 'ChildImage'; + errorobj["EF_ChildImageIndex"] = splitItemIndex; + showError(errorobj, true); + let refIn1 = inputRefs.current['input1_' + cat.SOSHeaderValue + '_' + skus.SOSChildValue]; + refIn1.focus(); + + notify(`Please click all child images for ${skus.ChildName} in ${cat.HeaderName}`, 'SHORT'); + resolve(false); return; + } + } + } + } + } + } + + if (index == (AllSOSData.length - 1)) { + resolve(true); return; + } + + } + + }).then((val) => { return val }) + .catch((err) => { console.log(err); return false }); + + } + + function onStockValChange(item, skuItem, val, key, type = '') { + setErrorField({}); + setError(false); + if (val != '') { + let isValid = validateNumber(val, type); + if (!isValid) { + return; + } + } + let allSKUData = SOSStockData; + let defData = { 'SOSHeaderValue': item.SOSHeaderValue, 'Images': [], 'SKUData': [] }; + const catindex = allSKUData.findIndex(i => i.SOSHeaderValue == item.SOSHeaderValue); + const catData = catindex >= 0 ? (allSKUData[catindex] || defData) : defData; + let AllSKUs = catData['SKUData'] || []; + + let defCData = { 'SOSChildValue': skuItem.SOSChildValue, 'ChildImages': [] }; + let skud_index = AllSKUs.findIndex(i => i.SOSChildValue == skuItem.SOSChildValue); + const skud = skud_index >= 0 ? (AllSKUs[skud_index] || defCData) : defCData + skud[key] = val; + skud_index >= 0 ? AllSKUs[skud_index] = skud : AllSKUs.push(skud); + catData['SKUData'] = AllSKUs; + + catindex >= 0 ? allSKUData[catindex] = catData : allSKUData.push(catData); + // setSOSStockData(allSKUData); + BgWindowData(allSKUData) + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + + function onHdrStockValChange(item, val, key, type = '') { + setErrorField({}); + setError(false); + if (val != '') { + let isValid = validateNumber(val, type); + if (!isValid) { + return; + } + } + + let allSKUData = SOSStockData; + let defData = { 'SOSHeaderValue': item.SOSHeaderValue, 'Images': [], 'SKUData': [] }; + const skud_index = allSKUData.findIndex(i => i.SOSHeaderValue == item.SOSHeaderValue); + const skud = skud_index >= 0 ? (allSKUData[skud_index] || defData) : defData; + skud[key] = val; + skud_index >= 0 ? allSKUData[skud_index] = skud : allSKUData.push(skud); + // setSOSStockData(allSKUData); + BgWindowData(allSKUData) + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + + function _render_Alert() { + return ( + + + { setShowAlert(false) }}> + Cancel + + { saveData() }}> + Yes + + + + ) + } + + + + async function OpenImgModal(imgPath, cat, splitChildItem, splitChildItemIndex, skus) { + setSelectedImg(imgPath) + setShowModal(true); + if ((imgPath != '' && imgPath != null)) { + setShowImageSaveOp(false); + } + else { + setShowImageSaveOp(true); + } + setReCapImgModalObj({ cat, splitChildItem, splitChildItemIndex, skus }) + // _OpenCaptureImage_Modal(imgPath,window,splitItem,splitItemIndex,cameraType) + + } + + function cancelImage() { + // setImage1(''); + setSelectedImg(''); + setReCapImgModalObj({}) + setShowModal(false); + } + + function _OpenCaptureImage_Modal(img) { + + const isImageCap = (img != '' || img != null) ? true : false; + + let { cat, splitChildItem, splitChildItemIndex, skus } = reCapImgModalObj + let camera2Label = (cat && cat.PromoImage2Lable) || ''; + return ( + + { + isImageCap && + + + + + { openCamera(cat, splitChildItem, splitChildItemIndex, skus) }}> + + + + {!showImageSaveOp && + { cancelImage(false) }}> + + {ST.Close} + + } + + } + + ) + } + + function _renderSOSList() { + + let SOSHeaderLabel = KPIFields.findIndex(i => i.KPIFieldName == 'SOSHeaderLabel') + let SOSHeaderObj = SOSHeaderLabel >= 0 ? KPIFields[SOSHeaderLabel] : {}; + let SOSHeaderDisName = SOSHeaderLabel >= 0 ? SOSHeaderObj['KPIFieldDisplayName'] : 'Product Facing'; + + let sosDecimalValue = KPIFields.findIndex(i => i.KPIFieldName == 'SOSValueDecimalAllow') + let sosDecimalValueObj = sosDecimalValue >= 0 ? KPIFields[sosDecimalValue] : {}; + let sosDecimalValueEnable = sosDecimalValue >= 0 ? sosDecimalValueObj['KPIFieldEnable'] : false; + + let sosPercValue = KPIFields.findIndex(i => i.KPIFieldName == 'SOSPercentageCalculate') + let sosPercValueObj = sosPercValue >= 0 ? KPIFields[sosPercValue] : {}; + let sosPercValueEnable = sosPercValue >= 0 ? sosPercValueObj['KPIFieldEnable'] : false; + + // sosPercValueEnable=true + + console.log("sosPercValueEnable----", sosPercValueEnable) + let decimalAllow = sosDecimalValueEnable ? 'decimal' : 'numeric'; + console.log("sosPercValueEnable--", sosPercValueEnable) + + console.log("decimalAllow:", decimalAllow); + return ( + + + + `window_${index.toString()}`} + renderItem={({ item, index }) => { + const cat = item; + const catIndex = index; + + let SOSHeaderImage = item.SOSHeaderImage == 1 || item.SOSHeaderImage == 'true' ? 1 : 0; + let SOSHeaderNonEyeLevelFacing = item.SOSHeaderNonEyeLevelFacing == 1 || item.SOSHeaderNonEyeLevelFacing == 'true' ? 1 : 0; + let SOSHeaderEyeLevelFacing = item.SOSHeaderEyeLevelFacing == 1 || item.SOSHeaderEyeLevelFacing == 'true' ? 1 : 0; + + let SOSHeaderEyeLevelFacingLable = item.SOSHeaderEyeLevelFacingLable != null ? item.SOSHeaderEyeLevelFacingLable : ''; + let SOSHeaderNonEyeLevelFacingLable = item.SOSHeaderNonEyeLevelFacingLable != null ? item.SOSHeaderNonEyeLevelFacingLable : ''; + + + const cindex = SOSStockData.findIndex(i => i.SOSHeaderValue == item.SOSHeaderValue); + const cobj = cindex >= 0 ? SOSStockData[cindex] : {}; + const HeaderImages = cobj['Images'] || []; + let SOSHdrEyeFacing = cobj['SOSHdrEyeFacing'] != null ? cobj['SOSHdrEyeFacing'] : ''; + let SOSHdrNonEyeFacing = cobj['SOSHdrNonEyeFacing'] != null ? cobj['SOSHdrNonEyeFacing'] : ''; + // console.log("SOSHdrFacing in render :",SOSHdrFacing); + let this_SKUData = cobj['SKUData'] || []; + let show_HdrForm = SOSHeaderNonEyeLevelFacing == true || (SOSHeaderImage == true && HeaderImages.length > 0); + + // Error Field highlight styles + let EF_Cat = errorfield.EF_Cat != null ? errorfield.EF_Cat : {}; + let show_errorhere = error == true && EF_Cat.SOSHeaderValue == cat.SOSHeaderValue && EF_Cat.SOSDefinitionId == cat.SOSDefinitionId; + + // this will show error field in red (if window is present and exist reason is enabled and not filled ) or (if window is not present and Not exist reason is enabled and not filled ) + let EF_HdrFacing = errorfield.EF_HdrFacing || ''; + let EF_EyeHEADER = errorfield.EF_EyeHEADER || ''; + let EF_NonEyeHEADER = errorfield.EF_NonEyeHEADER || ''; + + let EStyle_HdrFacing = show_errorhere && EF_HdrFacing == 'HdrFacing' ? customStyle.stk_inptSTyle_error : {}; + let EStyle_EyeHEADER = show_errorhere && EF_EyeHEADER == 'EyeHEADER' ? customStyle.stk_inptSTyle_error : {}; + let EStyle_NonEyeHEADER = show_errorhere && EF_NonEyeHEADER == 'NonEyeHEADER' ? customStyle.stk_inptSTyle_error : {}; + + + + //get SOS Target at header from skulist first child- as all children of particular hdr will contain same SOSTarget Value + let child_list = cat.skulist || []; + let first_child = child_list.length > 0 ? child_list[0] : {}; + let SOSTarget = first_child.SOSTarget; + // let SelfchildCount=0; + let facingPerc1 = 0; + let SOSChildNonEyeLevelSelfFacingFlag = 0; + + + // var filtered = cat.skulist.filter(function(item) { + // return id_filter.indexOf(item.id) !== -1 && item.gender==='m'; + // }); + + let valData = this_SKUData.reduce((a, b) => (a || 0) + ((b.SelfNonEyeFacing || 0) + (b.SelfEyeFacing || 0)), 0); + // let SelfchildCount= valData.SelfNonEyeFacing ||0 + let SelfchildCount = valData || 0 + + + if ((SOSHeaderNonEyeLevelFacing == true) && (SelfchildCount != 0 && SOSHdrEyeFacing != 0)) { + facingPerc1 = ((SelfchildCount || 0) / ((SOSHdrEyeFacing || 0) + (SOSHdrNonEyeFacing || 0))) * 100 + console.log("vdshva--", facingPerc1) + } + // if((SOSHeaderEyeLevelFacing==true) && (SelfchildCount!=0 && SOSHdrNonEyeFacing!=0) ){ + // facingPerc1= ((SelfchildCount||0)/(SOSHdrNonEyeFacing||0))*100 + // console.log("vdshva--",facingPerc1) + // } + + return ( + + + + + {item.HeaderName} + {sosPercValueEnable == true && SOSHeaderNonEyeLevelFacing == true && {`SOS ${facingPerc1.toFixed(0)}%`}} + + {/* {item.HeaderName } */} + {/* + ` (${SOSTarget}%)` */} + {SOSTarget != null && SOSTarget != '' && {`SOS Target: ${SOSTarget}%`}} + + + + {show_HdrForm == true && + + {SOSHeaderEyeLevelFacing == true && + + + + {SOSHeaderEyeLevelFacingLable} + + + + { inputRefs.current['input_' + cat.SOSHeaderValue] = reff; }} + placeholder="" + autoComplete='off' + placeholderTextColor={PageTheme.$placeholder_color} + value={(SOSHdrEyeFacing + '')} + keyboardType='numeric' + blurOnSubmit={false} + returnKeyType={(Platform.OS === 'ios') ? 'done' : 'next'} + onSubmitEditing={() => { focusToNext(cat, catIndex, "", "", "EyeHEADER") }} + onChangeText={(val) => { onHdrStockValChange(cat, val, 'SOSHdrEyeFacing', decimalAllow) }} + /> + + + + } + + {SOSHeaderNonEyeLevelFacing == true && + + + + {SOSHeaderNonEyeLevelFacingLable} + + + + { inputRefs.current['input1_' + cat.SOSHeaderValue] = reff; }} + placeholder="" + autoComplete='off' + placeholderTextColor={PageTheme.$placeholder_color} + value={(SOSHdrNonEyeFacing + '')} + keyboardType='numeric' + blurOnSubmit={false} + returnKeyType={(Platform.OS === 'ios') ? 'done' : 'next'} + onSubmitEditing={() => { focusToNext(cat, catIndex, "", "", "NonEyeHEADER") }} + onChangeText={(val) => { onHdrStockValChange(cat, val, 'SOSHdrNonEyeFacing', decimalAllow) }} + /> + + + + } + {(SOSHeaderImage == true && HeaderImages.length > 0) && + + + {'Capture SOS Header Images'} + + + + {(rerenderdata2 == rerenderdata2) && + HeaderImages.map((item, index) => { + let splitItem = item; + let splitItemIndex = index; + let Image1Name = splitItem['Image1Name'] != null && splitItem['Image1Name'] != '' ? splitItem['Image1Name'] : ''; + let Image1 = splitItem['Image1'] != null && splitItem['Image1'] != '' ? splitItem['Image1'] : ''; + let isImg1mad = splitItem['img1Required'] || false; + + let EF_HdrImageIndex = errorfield.EF_HdrImageIndex === 0 || errorfield.EF_HdrImageIndex != null ? errorfield.EF_HdrImageIndex : ''; + let show_hdrImageErrHere = EF_HdrImageIndex == splitItemIndex; + + let EF_HdrImage = errorfield.EF_HdrImage || ''; + let EStyle_HdrImage = show_errorhere && show_hdrImageErrHere && EF_HdrImage == 'HdrImage' ? customStyle.error_CatImage2 : {}; + + return ( + + {((Image1 == '' || Image1 == null) && isImg1mad) ? + { openCamera(cat, splitItem, splitItemIndex, '1') }}> + + : (Image1 == '' || Image1 == null) ? + { openCamera(cat, splitItem, splitItemIndex, '1') }}> + + : (Image1 != '' || Image1 != null) ? + { OpenImgModal(Image1, cat, splitItem, splitItemIndex, '1') }}> + + : null + } + + ); + }) + } + + + + } + + } + + + + {/* + {SOSHeaderDisName} + */} + + {SOSHeaderDisName} + + + + + + { + const skus = item; + const sku_index = index; + + + let SOSChildImage = skus.SOSChildImage == 1 || skus.SOSChildImage == 'true' ? 1 : 0; + let SOSChildEyeLevelTotalFacing = skus.SOSChildEyeLevelTotalFacing == 1 || skus.SOSChildEyeLevelTotalFacing == 'true' ? 1 : 0; + let SOSChildNonEyeLevelTotalFacing = skus.SOSChildNonEyeLevelTotalFacing == 1 || skus.SOSChildNonEyeLevelTotalFacing == 'true' ? 1 : 0; + + let SOSChildNonEyeLevelSelfFacing = skus.SOSChildNonEyeLevelSelfFacing == 1 || skus.SOSChildNonEyeLevelSelfFacing == 'true' ? 1 : 0; + let SOSChildEyeLevelSelfFacing = skus.SOSChildEyeLevelSelfFacing == 1 || skus.SOSChildEyeLevelSelfFacing == 'true' ? 1 : 0; + + let SOSChildEyeLevelTotalFacingLable = skus.SOSChildEyeLevelTotalFacingLable != null ? skus.SOSChildEyeLevelTotalFacingLable : ''; + let SOSChildNonEyeLevelSelfFacingLable = skus.SOSChildNonEyeLevelSelfFacingLable != null ? skus.SOSChildNonEyeLevelSelfFacingLable : ''; + let SOSChildEyeLevelSelfFacingLable = skus.SOSChildEyeLevelSelfFacingLable != null ? skus.SOSChildEyeLevelSelfFacingLable : ''; + + let thisCatSkuData_i = this_SKUData.findIndex(i => i.SOSChildValue == skus.SOSChildValue); + let thisCatSkuData = thisCatSkuData_i >= 0 ? (this_SKUData[thisCatSkuData_i] || {}) : {}; + let TotalFacing = thisCatSkuData.TotalFacing != null ? thisCatSkuData.TotalFacing : ''; + let TotalEyeLevelFacing = thisCatSkuData.TotalEyeLevelFacing != null ? thisCatSkuData.TotalEyeLevelFacing : ''; + let TotalNonEyeFacing = thisCatSkuData.TotalNonEyeFacing != null ? thisCatSkuData.TotalNonEyeFacing : ''; + + let SelfNonEyeFacing = thisCatSkuData.SelfNonEyeFacing != null ? thisCatSkuData.SelfNonEyeFacing : ''; + let SelfEyeFacing = thisCatSkuData.SelfEyeFacing != null ? thisCatSkuData.SelfEyeFacing : ''; + + + const ChildImages = thisCatSkuData['ChildImages'] || []; + + let EF_Brand = errorfield.EF_Brand != null ? errorfield.EF_Brand : {}; + let show_ChildErrHere = EF_Brand.SOSChildValue == skus.SOSChildValue; + + let EF_ChildTotal = errorfield.EF_ChildTotal || ''; + let EStyle_ChildTotal = show_errorhere && show_ChildErrHere && EF_ChildTotal == 'ChildTotal' ? customStyle.stk_inptSTyle_error : {}; + + let EStyle_ChildNonEyeTotal = show_errorhere && show_ChildErrHere && EF_ChildTotal == 'ChildTotal' ? customStyle.stk_inptSTyle_error : {}; + + + let EF_ChildSelf = errorfield.EF_ChildSelf || ''; + let EStyle_ChildSelf = show_errorhere && show_ChildErrHere && EF_ChildSelf == 'ChildSelf' ? customStyle.stk_inptSTyle_error : {}; + let facingPerc = 0; + if ((SOSChildEyeLevelTotalFacing == true && SOSChildNonEyeLevelSelfFacing == true) && ((SelfNonEyeFacing != 0 && TotalNonEyeFacing != 0) || (SelfEyeFacing != 0 && TotalEyeLevelFacing != 0))) { + facingPerc = (((SelfNonEyeFacing || 0) + (SelfEyeFacing)) / ((TotalEyeLevelFacing || 0) + (TotalNonEyeFacing || 0))) * 100 + } + SOSChildNonEyeLevelSelfFacingFlag = SOSChildNonEyeLevelSelfFacing; + SelfchildCount = SelfNonEyeFacing; + + return ( + + + {skus.ChildName} + {sosPercValueEnable == true && SOSHeaderNonEyeLevelFacing != true && SOSHeaderEyeLevelFacing != true && {`SOS ${facingPerc.toFixed(0)}%`}} + + {/* {skus.ChildName} */} + + {(SOSChildImage == true) && + + + + {'Capture SOS Child Images'} + + + + {rerenderdata4 == rerenderdata4 && + ChildImages.map((item, index) => { + let splitChildItem = item; + let splitChildItemIndex = index; + let Image1Name = splitChildItem['Image1Name'] != null && splitChildItem['Image1Name'] != '' ? splitChildItem['Image1Name'] : ''; + let Image1 = splitChildItem['Image1'] != null && splitChildItem['Image1'] != '' ? splitChildItem['Image1'] : ''; + let isImg1mad = splitChildItem['img1Required'] || false; + + let EF_ChildImageIndex = errorfield.EF_ChildImageIndex === 0 || errorfield.EF_ChildImageIndex != null ? errorfield.EF_ChildImageIndex : ''; + let show_ChildImgErrHere = EF_ChildImageIndex == splitChildItemIndex; + + let EF_ChildImage = errorfield.EF_ChildImage || ''; + let EStyle_ChildImage = show_errorhere && show_ChildErrHere && show_ChildImgErrHere && EF_ChildImage == 'ChildImage' ? customStyle.error_CatImage2 : {}; + + + return ( + + + {((Image1 == '' || Image1 == null) && isImg1mad) ? + { openCamera(cat, splitChildItem, splitChildItemIndex, '2', skus) }}> + + : (Image1 == '' || Image1 == null) ? + { openCamera(cat, splitChildItem, splitChildItemIndex, '2', skus) }}> + + : (Image1 != '' || Image1 != null) ? + { OpenImgModal(Image1, cat, splitChildItem, splitChildItemIndex, '2', skus) }}> + + : null + } + {/* {camera1Label} */} + + ); + }) + } + + + + } + + {SOSChildEyeLevelTotalFacing == true && + + + + {SOSChildEyeLevelTotalFacingLable} + + + + { inputRefs.current['input2_' + cat.SOSHeaderValue + '_' + skus.SOSChildValue] = reff; }} + style={[customStyle.SOSInputStyle, EStyle_ChildTotal]} + placeholder="" + autoComplete='off' + placeholderTextColor={PageTheme.$placeholder_color} + value={(TotalEyeLevelFacing + '')} + keyboardType='numeric' + returnKeyType={(Platform.OS === 'ios') ? 'done' : 'next'} + blurOnSubmit={false} + onSubmitEditing={() => { focusToNext(cat, catIndex, skus, sku_index, "ChildEyeTotal") }} + onChangeText={(val) => { onStockValChange(cat, skus, val, 'TotalEyeLevelFacing', decimalAllow) }} + /> + + + } + + {SOSChildNonEyeLevelTotalFacing == true && + + + + {SOSChildNonEyeLevelTotalFacingLable} + + + + { inputRefs.current['input3_' + cat.SOSHeaderValue + '_' + skus.SOSChildValue] = reff; }} + style={[customStyle.SOSInputStyle, EStyle_ChildNonEyeTotal]} + placeholder="" + autoComplete='off' + placeholderTextColor={PageTheme.$placeholder_color} + value={(TotalNonEyeFacing + '')} + keyboardType='numeric' + returnKeyType={(Platform.OS === 'ios') ? 'done' : 'next'} + blurOnSubmit={false} + onSubmitEditing={() => { focusToNext(cat, catIndex, skus, sku_index, "ChildNonEyeTotal") }} + onChangeText={(val) => { onStockValChange(cat, skus, val, 'TotalNonEyeFacing', decimalAllow) }} + /> + + + } + + {SOSChildEyeLevelSelfFacing == true && + + + + {SOSChildEyeLevelSelfFacingLable} + + + { inputRefs.current['input4_' + cat.SOSHeaderValue + '_' + skus.SOSChildValue] = reff; }} + placeholder="" + autoComplete='off' + placeholderTextColor={PageTheme.$placeholder_color} + value={(SelfEyeFacing + '')} + keyboardType='numeric' + returnKeyType={(Platform.OS === 'ios') ? 'done' : 'next'} + blurOnSubmit={false} + onSubmitEditing={() => { focusToNext(cat, catIndex, skus, sku_index, "CHILD1") }} + onChangeText={(val) => { onStockValChange(cat, skus, val, 'SelfEyeFacing', decimalAllow) }} + /> + + + } + {SOSChildNonEyeLevelSelfFacing == true && + + + + {SOSChildNonEyeLevelSelfFacingLable} + + + { inputRefs.current['input5_' + cat.SOSHeaderValue + '_' + skus.SOSChildValue] = reff; }} + placeholder="" + autoComplete='off' + placeholderTextColor={PageTheme.$placeholder_color} + value={(SelfNonEyeFacing + '')} + keyboardType='numeric' + returnKeyType={(Platform.OS === 'ios') ? 'done' : 'next'} + blurOnSubmit={false} + onSubmitEditing={() => { focusToNext(cat, catIndex, skus, sku_index, "CHILD2") }} + onChangeText={(val) => { onStockValChange(cat, skus, val, 'SelfNonEyeFacing', decimalAllow) }} + /> + + + } + + + ) + }} /> + + + + + + ); + }} + /> + + + ) + } + + return ( + + {processing && } + + {_OpenCaptureImage_Modal()} + {_render_Alert()} + { setShowCamera(false); getImage(imgData) }} showCamera={showCamera} onHideCamera={() => { setShowCamera(false); }} /> + + + + {Object.keys(storeData).length > 0 && + _renderSOSList() + } + + { submitOpeningStock() }} /> + + + + + ); +} + + +export default connect(mapStateToProps, mapDispatchToProps)(SOSEyeLevel); \ No newline at end of file diff --git a/PerformicsSrc/src/screens/Sale.js b/PerformicsSrc/src/screens/Sale.js new file mode 100644 index 0000000..6a131a2 --- /dev/null +++ b/PerformicsSrc/src/screens/Sale.js @@ -0,0 +1,1134 @@ +import React, { useState, useEffect, useRef } from 'react'; +import Container from '../components/container'; +import { useRoute } from '@react-navigation/native'; +import { customStyles, GetPageTheme } from "../styles/Global"; +import { TextInput, View, Text, TouchableOpacity, Platform, FlatList, Alert, KeyboardAvoidingView, AppState, Keyboard, StyleSheet, Modal } from 'react-native'; +import { connect, } from 'react-redux'; +import { mapStateToProps, mapDispatchToProps } from '../reducers/contextProvider'; +import { notify } from '../components/notify'; +import moment from 'moment'; +import { checkMDStockScreenExists, getKPIFields, validateNumber } from '../controller/functions'; +import { get_item, set_item, clear_item } from '../components/localStorage'; +import { db } from '../constants/constants'; +import CustomHeader from '../components/customHeader'; +import { AntDesign, Entypo } from '../components/icons'; +import CustomLoader from '../components/CustomLoader'; +import LinearGradient from 'react-native-linear-gradient'; +import { AppTables } from '../constants/tableConstants'; +import GradientButton from '../components/gradientButton'; +import { ConfirmSaveAlert } from '../components/alert'; +import { CustomPicker } from '../components/CustomPicker'; + +function Sale(props) { + const route = useRoute(); + // get all theme styles acc to current theme set + const PageTheme = GetPageTheme(props.DarkMode, route.name); + const customStyle = customStyles(props.DarkMode, route.name); + const [processing, setProcessing] = useState(true); + const [loaderTitle, setLoaderTitle] = useState('loading...'); + const [isAdhocScreen, setIsAdhocScreen] = useState(false); + const [storeData, setStoreData] = useState({}); + const [currentMenu, setCurrentMenu] = useState({}); + const [brandData, setBrandData] = useState([]); + const [rerenderdata, setrerenderdata] = useState(0); + const [KPIFields, setKPIFields] = useState([]); + const [SKUStockData, setSKUStockData] = useState([]); + const [IsMidDayStockScreen, setIsMidDayStockScreen] = useState(false); + const [IsOpeningStockScreen, setIsOpeningStockScreen] = useState(false); + const [IsStockScreen, setIsStockScreen] = useState(false); + const [showAlert, setShowAlert] = useState(false); + const [hasUnsavedChanges, setHasUnsavedChanges] = useState(false); + const hasUnsavedChangesRef = React.useRef(hasUnsavedChanges); + const SKUStockDataRef = React.useRef(SKUStockData); + const StoreIdRef = React.useRef(null); + const ScreenNameRef = React.useRef(''); + const [globalBrandData, setGlobalBrandData] = useState([]); + const [filtervalue, setFilterValue] = useState({}); + const [catfilter, setcatFilter] = useState([]); + const [subcatfilter, setsubcatFilter] = useState([]); + const [brandfilter, setbrandFilter] = useState([]); + const [searchedItem, setSearchedItem] = useState(''); + const [rerenderdata2, setrerenderdata2] = useState(0); + const [modalVisible, setModalVisible] = useState(false); + + const defCat = { "CategoryId": "", "CategoryName": "-Select-" }; + const defSubCat = { 'SubCategoryId': "", 'SubCategoryName': "-Select-" }; + const defBrand = { 'BrandId': "", 'BrandName': "-Select-" }; + const [showMrpPtr, setShowMrpPtr] = useState('NA'); + const showMrpPtrRef = useRef('NA'); + const inputRefs = useRef({}); + // error field states + const [errorfield, setErrorField] = useState({}); + const [error, setError] = useState(false); + const d1 = new Date(); + const d2 = moment(d1).format('MM/DD/YYYY'); + + useEffect(() => { + let params = props.route.params ? props.route.params : {}; + let storeData1 = params.storeData || {}; + let menu1 = params.menu || {}; + + let isAdhoc = params.isAdhoc || false; + setIsAdhocScreen(isAdhoc); + setStoreData(storeData1); + setCurrentMenu(menu1); + + StoreIdRef.current = storeData1.StoreId + ScreenNameRef.current = menu1.ScreenName + getData(storeData1, menu1); + + const AppStateSubscription = AppState.addEventListener('change', (pro) => { _handleAppStateChange(SKUStockData, pro, hasUnsavedChanges) }); + const unsubscribe = props.navigation.addListener('beforeRemove', onBeforeRemove); + + return function cleanup() { + AppStateSubscription.remove(); + return unsubscribe; + }; + }, []); + + + const _handleAppStateChange = async (WindData, nextAppState, hasUnsaved) => { + if (nextAppState == 'background' && hasUnsavedChangesRef.current == true) { + let newData = { + storeBGData: SKUStockDataRef.current, + menuName: ScreenNameRef.current, + StoreId1: StoreIdRef.current, + visiteDate: d2 + } + let WindowsStr = JSON.stringify(newData) + await set_item('storeData', WindowsStr); + + } + + } + + useEffect(() => { + const unsubscribe = props.navigation.addListener('beforeRemove', onBeforeRemove); + return unsubscribe; + }, [hasUnsavedChanges]); + + function BgUnsavedChanges(val) { + hasUnsavedChangesRef.current = val + setHasUnsavedChanges(val); + } + + function onBeforeRemove(e) { + if (hasUnsavedChanges == true) { + e.preventDefault(); // Prevent default behavior of leaving the screen + onRemoveScreen(e); + } + else { + return; + } + } + function onRemoveScreen(e) { + Alert.alert( + "", + "Do you really want to exit the screen?", + [ + { + text: "Cancel", + onPress: () => { }, + style: "cancel" + }, + { + text: "OK", onPress: async () => { + BgUnsavedChanges(false) + await clear_item('storeData') + props.navigation.dispatch(e.data.action); + } + } + ] + ); + } + + + function updateShowMrpPtr(newVal) { + showMrpPtrRef.current = newVal; // instant + setShowMrpPtr(newVal); // triggers UI update + } + async function getData(storeData1, menu1) { + try { + let { StoreId, ChainId, StateId, StoreTypeId } = storeData1; + let isMDSTOCKExists = await checkMDStockScreenExists(storeData1, 'MDSTOCK') + setIsMidDayStockScreen(isMDSTOCKExists); + let isOPSTOCKExists = await checkMDStockScreenExists(storeData1, 'OPSTOCK') + setIsOpeningStockScreen(isOPSTOCKExists); + let isSTOCKExists = await checkMDStockScreenExists(storeData1, 'STOCK') + setIsStockScreen(isSTOCKExists); + let AllKPIFields = await getKPIFields(menu1); + setKPIFields(AllKPIFields); + let ShowCompetionSku = AllKPIFields?.findIndex((i) => i.KPIFieldName == "ShowCompetionSku"); + let ShowCompetionObj = ShowCompetionSku >= 0 ? AllKPIFields[ShowCompetionSku] : {}; + let ShowCompetionSkuNo = ShowCompetionObj?.KPIFieldDisplayName || 0 + let ShowCompetionSkuNoSplitArr = ShowCompetionObj?.KPIFieldDisplayName?.split(",") || [] + const isCompetitorValues = ShowCompetionSkuNoSplitArr; + let isShowMrpPtrIndex = AllKPIFields.findIndex(i => i.KPIFieldName == 'ShowMRPPTR') + let isShowMrpPtrKPIObj = isShowMrpPtrIndex >= 0 ? AllKPIFields[isShowMrpPtrIndex] : {}; + let isShowMrpPtrEnable = isShowMrpPtrIndex >= 0 ? isShowMrpPtrKPIObj['KPIFieldEnable'] : false; + if (isShowMrpPtrEnable == true) { + let isShowMrpPtrName = isShowMrpPtrIndex >= 0 ? isShowMrpPtrKPIObj['KPIFieldDisplayName'] : 'NA'; + updateShowMrpPtr(isShowMrpPtrName) + } + console.log('iscompetitorValues1', isShowMrpPtrEnable) + // Check if isCompetitorValues is empty, null, or undefined + let isCompetitorClause = !isCompetitorValues || isCompetitorValues.length === 0 ? "p.IsCompetitor = 0" : `p.IsCompetitor IN (${isCompetitorValues.join(",")})`; + let storeBGData1 = [], bgStoreJson = {}, isBgDataExists = false; + let windData = await get_item('storeData'); + if (windData != null && windData != '') { + let StoreJson = JSON.parse(windData) + console.log("StoreJson11--", StoreJson) + let { storeBGData, menuName, StoreId1, visiteDate } = StoreJson + if (storeBGData.length > 0 && menuName == menu1.ScreenName && StoreId1 == StoreId && visiteDate == d2) { + isBgDataExists = true + storeBGData1 = storeBGData; + bgStoreJson = StoreJson + BgUnsavedChanges(true) + SKUStockDataRef.current = storeBGData + setSKUStockData(storeBGData); + } + } + + await db.transaction(async function (txn) { + + let join7 = '', where_q = '', cols = '' + if (isOPSTOCKExists || isMDSTOCKExists) { + cols = ' ,o.MIDDAY_STOCK,o.OPENING_STOCK '; + where_q = `AND (CAST(IFNULL(o.OPENING_STOCK, 0) AS INTEGER) + CAST(IFNULL(o.MIDDAY_STOCK, 0) AS INTEGER)) > 0` + join7 = ` inner join ${AppTables.STOCK_DATA} o on p.ProductId=o.PRODUCT_ID and o.STORE_ID='${StoreId}' and o.VISIT_DATE='${d2}' `; + } + else if (isSTOCKExists) { + cols = ' ,o.STOCK as OPENING_STOCK '; + where_q = ' AND CAST(IFNULL(o.STOCK, 0) AS INTEGER) > 0' + join7 = ` inner join ${AppTables.STOCK2_DATA} o on p.ProductId=o.PRODUCT_ID and o.STORE_ID='${StoreId}' and o.VISIT_DATE='${d2}' `; + } + let join = ` INNER JOIN Product_Master p on c.CategoryId=p.CategoryId `; + let join2 = ` INNER JOIN Mapping_ProductAssortmentStorewise mp on p.ProductId=mp.ProductId `; + let q2 = ` SELECT * FROM ( SELECT c.CategoryId,c.CategoryName,'' as MSL ${cols}, p.CategorySequence, ROW_NUMBER() OVER (PARTITION BY c.CategoryId ORDER BY c.CategoryId) as rn from Master_Category c ${join} ${join2} ${join7} Where mp.StoreId ='${StoreId}' and p.IsCompetitor='0' ${where_q} ) t WHERE rn = 1 ORDER BY CategorySequence`; + console.log("checkquery_header", q2) + + console.log("checkquery", q2) + await txn.executeSql(q2, [], async function (txn2, txnres) { + if (txnres.rows.length > 0) { + console.log('inputs found', txnres.rows.length); + let arr = [], arr2 = [defCat]; + for (var i = 0; i < txnres.rows.length; i++) { + let data = txnres.rows.item(i); + let catobj = { "CategoryId": data.CategoryId, "CategoryName": data.CategoryName } + arr.push(data); + arr2.push(catobj); + if (i == txnres.rows.length - 1) { + setcatFilter(arr2); + setrerenderdata(!rerenderdata); + getSKU(arr, storeData1, AllKPIFields, bgStoreJson, menu1, isOPSTOCKExists, isMDSTOCKExists, isSTOCKExists, isBgDataExists); + } + } + } + + }, function (txnE, txnerr) { console.log(txnerr); },); + }); + } catch (err) { + console.log(err); + } + } + + + + async function getSKU(brands = [], storeData1 = {}, AllKPIFields = [], bgStoreJson = {}, menu1 = {}, isOPSTOCKExists, isMDSTOCKExists, isSTOCKExists, isBgDataExists = false) { + console.log('getSKU') + try { + + let ShowCompetionSku = AllKPIFields?.findIndex((i) => i.KPIFieldName == "ShowCompetionSku"); + let ShowCompetionObj = ShowCompetionSku >= 0 ? AllKPIFields[ShowCompetionSku] : {}; + let ShowCompetionSkuNo = ShowCompetionObj?.KPIFieldDisplayName || 0 + let ShowCompetionSkuNoSplitArr = ShowCompetionObj?.KPIFieldDisplayName?.split(",") || [] + const isCompetitorValues = ShowCompetionSkuNoSplitArr; + // Check if isCompetitorValues is empty, null, or undefined + let isCompetitorClause = !isCompetitorValues || isCompetitorValues.length === 0 ? "p.IsCompetitor = 0" : `p.IsCompetitor IN (${isCompetitorValues.join(",")})`; + console.log("checkiscpmp2--", isCompetitorClause) + let { StoreId } = storeData1; + let arr2 = [defSubCat]; + let arr3 = [defBrand]; + await db.transaction(async function (txn) { + var allSKUData = []; + await Promise.all( + brands.map(async (item, index) => { + let cols = '', join_o = '', where_stock = ''; + if (isOPSTOCKExists || isMDSTOCKExists) { + cols = ' ,o.MIDDAY_STOCK,o.OPENING_STOCK '; + where_stock = `AND (CAST(IFNULL(o.OPENING_STOCK, 0) AS INTEGER) + CAST(IFNULL(o.MIDDAY_STOCK, 0) AS INTEGER)) > 0`; + join_o = ` left join ${AppTables.STOCK_DATA} o on p.ProductId=o.PRODUCT_ID and o.STORE_ID='${StoreId}' and o.VISIT_DATE='${d2}' `; + } + else if (isSTOCKExists) { + cols = ' ,o.STOCK as OPENING_STOCK '; + where_stock = ' AND CAST(IFNULL(o.STOCK, 0) AS INTEGER) > 0'; + join_o = ` left join ${AppTables.STOCK2_DATA} o on p.ProductId=o.PRODUCT_ID and o.STORE_ID='${StoreId}' and o.VISIT_DATE='${d2}' `; + } + + let seletlist = ` ifnull(p.Mrp,0) as Mrp, ifnull(p.ptr,0) as ptr, p.ProductName, p.ProductId, a.MSL,a.ArticleCode, p.SubCategoryName, p.SubCategoryId, p.BrandName, p.BrandId, s.STOCK ${cols} `; + let join2 = ` inner join Master_Category mc on mc.CategoryId=p.CategoryId `; + let join = ` inner join Mapping_ProductAssortmentStorewise a on a.ProductId=p.ProductId and a.StoreId='${StoreId}' `; + let join5 = ` left join ${AppTables.SALES} s on s.PRODUCT_ID=p.ProductId and s.STORE_ID='${StoreId}' and s.VISIT_DATE='${d2}' and s.CATEGORY_ID='${item.CategoryId}' `; + let sku_q = `SELECT DISTINCT ${seletlist} FROM Product_Master p ${join} ${join2} ${join5} ${join_o} WHERE (p.CategoryId='${item.CategoryId}' or p.CategoryId=${item.CategoryId}) and ${isCompetitorClause} ${where_stock} ORDER BY p.ProductSequence`; + console.log("checkskud--", sku_q) + return await txn.executeSql(sku_q, [], async function (txn2, txnres) { + if (txnres.rows.length > 0) { + let arr = []; + for (var i = 0; i < txnres.rows.length; i++) { + let data = txnres.rows.item(i); + inputRefs.current['input1_' + item.CategoryId + '_' + data.ProductId] = ''; + arr.push(data); + let subcatIndex = arr2.findIndex(i => i.SubCategoryId == data.SubCategoryId) + let subcatobj = { 'SubCategoryId': data.SubCategoryId, 'SubCategoryName': data.SubCategoryName } + if (subcatIndex < 0) { + arr2.push(subcatobj); + + } + let subbrandIndex = arr3.findIndex(i => i.BrandId == data.BrandId) + let subbrandobj = { 'BrandId': data.BrandId, 'BrandName': data.BrandName } + if (subbrandIndex < 0) { + arr3.push(subbrandobj); + } + let defData = { + 'CategoryId': item.CategoryId, 'ProductId': data.ProductId, 'Stock': data.STOCK, 'ProductName': data.ProductName, + 'ptr': showMrpPtrRef.current === 'PTR' ? data.ptr : data.Mrp + }; + + allSKUData.push(defData); + if (i == txnres.rows.length - 1) { + item['skulist'] = arr; + brands[index] = item; + if (index == brands.length - 1) { + let { storeBGData, menuName, StoreId1, visiteDate } = bgStoreJson + if (!isBgDataExists) { + SKUStockDataRef.current = allSKUData + setSKUStockData(allSKUData); + } + + setGlobalBrandData(brands); + setBrandData(brands); + setsubcatFilter(arr2); + setbrandFilter(arr3); + setProcessing(true); + setrerenderdata(!rerenderdata); + } + + return item; + } + } + } + }, function (txnE, txnerr) { console.log(txnerr); setProcessing(false); return item; },); + return item; + }) + ).then((res) => { + setTimeout(() => { + setProcessing(false); + }, 3000); + + }); + }); + } catch (err) { + console.log(err); + } + } + + async function focusToNext(cat, sku, type = '1') { + let activeKey = ''; + let arr = Object.keys(inputRefs.current); + activeKey = 'input' + type + '_' + cat.CategoryId + '_' + sku.ProductId; + let activeIndex = arr.indexOf(activeKey); + if (activeIndex < arr.length - 1) { + let nextKey = arr[++activeIndex] + let nextRef = inputRefs.current[nextKey]; + console.log("nextKey", nextKey, nextRef, inputRefs.current[nextKey]) + nextRef.focus(); + } + else { + return + } + } + + async function submitData() { + let isvalid = await validate(); + if (isvalid) { + Keyboard.dismiss(); + const totalStockQty = SKUStockData.reduce( + (sum, item) => sum + (parseFloat(item.Stock) > 0 ? parseFloat(item.Stock) : 0), + 0 + ); + if ((showMrpPtr !== 'NA' || showMrpPtrRef.current !== 'NA') && totalStockQty > 0) { + setModalVisible(true); + } else { + setShowAlert(true); + } + } + } + + async function saveData() { + BgUnsavedChanges(false) + setShowAlert(false); + setLoaderTitle('Saving Data...'); + setProcessing(true); + try { + let { StoreId, ChainId, StateId, StoreTypeId } = storeData; + await db.transaction(async function (txn) { + let q = `DELETE FROM ${AppTables.SALES} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' `; + // remove old data + await txn.executeSql(q, [], async function (txn2, txnres) { + console.log('sales data deleted'); + }, function (txnE, txnerr) { console.log(txnerr); },); + var stock_values = ''; + for (var i = 0; i < globalBrandData.length; i++) { + let catIndex = i; + let item = globalBrandData[catIndex]; + let skulist = item['skulist'] || []; + for (var j = 0; j < skulist.length; j++) { + let skuItem = skulist[j]; + let { MSL, ProductId, ProductName, ArticleCode } = skulist[j]; + ArticleCode = ArticleCode != null && ArticleCode != undefined && ArticleCode != 'undefined' && ArticleCode != '' ? ArticleCode : '' + stock_values += stock_values != '' ? ' , ' : ''; + let allSKUData = SKUStockData; + const skud_index = allSKUData.findIndex(ci => ci.CategoryId == item.CategoryId && ci.ProductId == skuItem.ProductId); + const skud = skud_index >= 0 ? (allSKUData[skud_index] || {}) : {}; + let StockVal = skud['Stock'] || ''; + stock_values += ` ('${StoreId}','${d2}','${item.CategoryName}','${item.CategoryId}','${ProductName}','${ProductId}','${MSL}','${StockVal}','${d2}','${ArticleCode}') `; + } + } + + let add_Stock = `INSERT INTO ${AppTables.SALES} (STORE_ID,VISIT_DATE,CATEGORY,CATEGORY_ID,PRODUCT,PRODUCT_ID,MSL,STOCK,ADDED_DATE,ARTICLE_CODE) VALUES ${stock_values} `; + await txn.executeSql(add_Stock, [], async function (txn2, txnres) { + console.log('sales added'); + notify('Sales updated successfully'); + setProcessing(false); + // clear store data in local storage to avoiding re-set data for the store + hasUnsavedChangesRef.current = false + await clear_item('storeData') + props.navigation.goBack(); + }, function (txnE, txnerr) { console.log(txnerr); setProcessing(false); notify('Cannot update Sales') },); + + + }); + } catch (err) { + console.log(err); + } + } + + function FilterStores(searchedQry, filtervalue1) { + searchedQry = searchedQry.toLowerCase(); + console.log('searchedQry', searchedQry); + let arr = []; + let newBrandList = []; + let filterCatId = filtervalue1.CategoryId; + let filterSubCatId = filtervalue1.SubCategoryId; + let filterBrandId = filtervalue1.BrandId; + if ((searchedQry != null && searchedQry != '') || (filterCatId != null && filterCatId != '') || (filterSubCatId != null && filterSubCatId != '') || (filterBrandId != null && filterBrandId != '')) { + console.log('searchquerytrue') + for (let i = 0; i < globalBrandData.length; i++) { + let item = globalBrandData[i]; + let { CategoryId } = item; + let skulist = item.skulist || []; + let newBrand = Object.assign({ 'test2': '2' }, item); + let newSkulist = []; + for (let j = 0; j < skulist.length; j++) { + let sku = skulist[j]; + let { ProductName, SubCategoryId, BrandId } = sku; + let isQueryMatched = false, isCatMatch = false, isSubCatMatch = false, isBrandMatch = false; + if ((searchedQry != null && searchedQry != '') && ProductName.toLowerCase().includes(searchedQry)) { + isQueryMatched = true; + } + else if (searchedQry == '' || searchedQry == null) { + isQueryMatched = true; + } + + if ((filterCatId != null && filterCatId != '') && filterCatId == CategoryId) { + isCatMatch = true; + + } + else if (filterCatId == '' || filterCatId == null) { + isCatMatch = true; + } + + if ((filterSubCatId != null && filterSubCatId != '') && filterSubCatId == SubCategoryId) { + isSubCatMatch = true; + + } + else if (filterSubCatId == '' || filterSubCatId == null) { + isSubCatMatch = true; + } + + if ((filterBrandId != null && filterBrandId != '') && filterBrandId == BrandId) { + isBrandMatch = true; + + } + else if (filterBrandId == '' || filterBrandId == null) { + isBrandMatch = true; + } + + if (isQueryMatched && isCatMatch && isSubCatMatch && isBrandMatch) { + newSkulist.push(sku); + } + + if (j == skulist.length - 1) { + newBrand.skulist = newSkulist; + + if (newBrand.skulist.length > 0) { + newBrandList.push(newBrand); + } + } + } + + + } + } + else { + newBrandList = globalBrandData; + } + + setBrandData(newBrandList); + setrerenderdata(!rerenderdata) + setrerenderdata2(!rerenderdata2) + } + + async function onselectionChange(option, keyLbl, keyVal, otherData) { + // console.log('trueeeeeeeeeeee') + setProcessing(true); + // let CategoryName=otherData.CategoryName!=null?otherData.CategoryName:''; + let data = filtervalue || {}; + // console.log('setFilterValue',data) + data[keyVal] = option.value; + data[keyLbl] = option.label; + await FilterHierarchy(keyVal, option.value); + if (keyVal == "CategoryId") { + data["SubCategoryId"] = defSubCat.SubCategoryId; + data["SubCategoryName"] = defSubCat.SubCategoryName; + data["BrandId"] = defBrand.BrandId; + data["BrandName"] = defBrand.BrandName; + } + else if (keyVal == "SubCategoryId") { + data["BrandId"] = defBrand.BrandId; + data["BrandName"] = defBrand.BrandName; + } + setFilterValue(data); + FilterStores(searchedItem, data) + console.log('filtersrores', searchedItem, data) + + setrerenderdata(!rerenderdata); + setrerenderdata2(!rerenderdata2) + setProcessing(false); + } + + async function FilterHierarchy(keyVal, val) { + let join = ` inner join Mapping_ProductAssortmentStorewise m on p.ProductId=m.ProductId `;// assortment join + let { StoreId } = storeData + if (keyVal == "CategoryId") { + // Filter Brand based on category + let brandq = `Select Distinct p.BrandId,p.BrandName from Product_Master p ${join} where m.StoreId='${StoreId}' and (p.CategoryId='${val}' or p.CategoryId= ${val}) and (CompanyId='1' or CompanyId =1) order by p.BrandSequence `; + let brands = await executeQuery(brandq, [defBrand]); + setbrandFilter(brands); + // Filter Sub cats based on category + let subcatq = `Select Distinct p.SubCategoryId,p.SubCategoryName from Product_Master p ${join} where m.StoreId='${StoreId}' and (p.CategoryId='${val}' or p.CategoryId= ${val}) and (CompanyId='1' or CompanyId =1) order by p.BrandSequence `; + let subCats = await executeQuery(subcatq, [defSubCat]); + setsubcatFilter(subCats); + } + else if (keyVal == "SubCategoryId") { + // Filter Brands based on Sub-category + let brandq = `Select Distinct p.BrandId,p.BrandName from Product_Master p ${join} where m.StoreId='${StoreId}' and (p.SubCategoryId='${val}' or p.SubCategoryId= ${val}) and (CompanyId='1' or CompanyId =1) order by p.BrandSequence `; + let brands = await executeQuery(brandq, [defBrand]); + setbrandFilter(brands); + } + } + + async function executeQuery(query, defData) { + return await new Promise((resolve, reject) => { + db.transaction(async function (txn) { + await txn.executeSql(query, [], async function (txn2, txnres) { + if (txnres.rows.length > 0) { + let arr = defData; + for (var i = 0; i < txnres.rows.length; i++) { + let data = txnres.rows.item(i); + arr.push(data); + if (i == txnres.rows.length - 1) { + resolve(arr); + } + } + } + else { + resolve(defData); + } + + }, function (txnE, txnerr) { console.log(txnerr); resolve(defData); },); + // setProcessing(false); + }); + }).catch((err) => { + console.log(err); + return defData; + }) + } + + async function validate() { + let isValid = true; + let isAnyFilled = false; + await Promise.all( + globalBrandData.map(async (item, index) => { + if (isValid) { + let errorobj = { 'EF_brand': item }; + let skulist = item.skulist || []; + if (skulist.length > 0) { + await Promise.all( + skulist.map(async (skuItem, skuIndex) => { + if (isValid) { + let skuData = SKUStockData.find(ci => ci.CategoryId == item.CategoryId && ci.ProductId == skuItem.ProductId) || {}; + let OS = skuItem.OPENING_STOCK || 0; + let MDS = skuItem.MIDDAY_STOCK || 0; + let maxClosingStock = IsMidDayStockScreen == true ? parseInt(OS) + parseInt(MDS) : parseInt(OS); + errorobj['EF_product'] = skuItem; + let error_bid = item.CategoryId + let error_pid = skuItem.ProductId + let show_errorH = false, error_HInputKey = ''; + if ((IsOpeningStockScreen == true || IsMidDayStockScreen == true || IsStockScreen == true) && parseInt(skuData.Stock) > maxClosingStock) { + if (IsOpeningStockScreen == true || IsMidDayStockScreen == true) { + IsMidDayStockScreen == true ? notify('Sale Should not be greater than the sum of Opening-Stock and Midday-Stock for ' + skuItem.ProductName) : notify('Sale Should not be greater than Opening-Stock for ' + skuItem.ProductName); + } else if (IsStockScreen) { + // notify('Sale Should not be greater than the stock for '+skuItem.ProductName) + notify('SALES value cannot exceed STOCK Value ' + skuItem.ProductName) + } + isValid = false; + show_errorH = true, error_HInputKey = 'input1_'; + } + + if (skuData.Stock === 0 || (skuData.Stock != null && skuData.Stock != '')) { + isAnyFilled = true; + } + + if (index == globalBrandData.length - 1 && skuIndex == skulist.length - 1 && !isAnyFilled) { + notify('Please enter Sale for atleast one Product (If not present then Enter "0")', 'SHORT'); + isValid = false; + } + if (show_errorH) { + errorobj['EF_InputKey'] = error_HInputKey; + setErrorField(errorobj) + setError(true) + let refIn1 = inputRefs.current[error_HInputKey + error_bid + '_' + error_pid]; + refIn1.focus(); + } + } + }) + ); + } + } + }) + ); + + console.log('isValid:', isValid); + return isValid; + } + + function onStockValChange(item, skuItem, val, key, type = '') { + setError(false); + setErrorField({}); + if (val != '') { + let isValid = validateNumber(val, type); + if (!isValid) { + return; + } + } + + let allSKUData = SKUStockData; + let defData = { 'CategoryId': item.CategoryId, 'ProductId': skuItem.ProductId }; + const skud_index = allSKUData.findIndex(i => i.CategoryId == item.CategoryId && i.ProductId == skuItem.ProductId); + const skud = skud_index >= 0 ? (allSKUData[skud_index] || defData) : defData; + skud[key] = val; + skud_index >= 0 ? allSKUData[skud_index] = skud : allSKUData.push(skud); + SKUStockDataRef.current = allSKUData + setSKUStockData(allSKUData); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + + function onSaveCancel() { + setShowAlert(false); + } + + function clearFilter(obj, key1, key2) { + let fdata = filtervalue; + fdata[key1] = obj[key1]; + fdata[key2] = obj[key2]; + if (key1 == "CategoryId") { + fdata["SubCategoryId"] = defSubCat.SubCategoryId; + fdata["SubCategoryName"] = defSubCat.SubCategoryName; + fdata["BrandId"] = defBrand.BrandId; + fdata["BrandName"] = defBrand.BrandName; + } else if (key1 == "SubCategoryId") { + fdata["BrandId"] = defBrand.BrandId; + fdata["BrandName"] = defBrand.BrandName; + } + setFilterValue(fdata); + FilterStores(searchedItem, fdata); + } + + + const calculatetotalStockQty = (data) => { + const totalStockQty = data.reduce( + (sum, item) => sum + (parseFloat(item.Stock) > 0 ? parseFloat(item.Stock) : 0), + 0 + ); + return totalStockQty; + }; + + const calculatetotalAmount = (data) => { + const totalAmount = data.reduce( + (sum, item) => + sum + + (parseFloat(item?.Stock) > 0 + ? parseFloat(item?.Stock) * parseFloat(item?.ptr || 0) + : 0), + 0 + ); + return totalAmount.toFixed(2); // ensures 2 decimal places + }; + + const renderModalContent = () => { + // ✅ Calculate Totals + const totalStockQty = SKUStockData.reduce( + (sum, item) => sum + (parseFloat(item.Stock) > 0 ? parseFloat(item.Stock) : 0), + 0 + ); + const totalAmount = SKUStockData.reduce( + (sum, item) => + sum + + (parseFloat(item?.Stock) > 0 + ? parseFloat(item?.Stock) * parseFloat(item?.ptr || 0) + : 0), + 0 + ); + + return ( + + Preview Sales Data + + Sales + Values + + + parseFloat(item.Stock) > 0)} + keyExtractor={(item, index) => `preview-${index}`} + renderItem={({ item }) => ( + + {item.ProductName} + + + + {(parseFloat(item?.Stock || 0) * parseFloat(item?.ptr || 0)).toFixed(2)} + + + + )} + /> + + {/* ✅ Totals Section */} + + Total Sale: {totalStockQty} + Total Amount: {totalAmount.toFixed(2)} + + + + + setModalVisible(false)} + > + Cancel + + + { setModalVisible(false); saveData() }} + > + Proceed + + + + ); + }; + + function _renderSalesFilter() { + let salesCatFilterI = KPIFields.findIndex(i => i.KPIFieldName == 'salesCatFilter') + let salesCatFilterObj = salesCatFilterI >= 0 ? KPIFields[salesCatFilterI] : {}; + let salesCatFilter = salesCatFilterI >= 0 ? salesCatFilterObj['KPIFieldEnable'] : false; + let salesSubCatFilterI = KPIFields.findIndex(i => i.KPIFieldName == 'salesSubCatFilter') + let salesSubCatFilterObj = salesSubCatFilterI >= 0 ? KPIFields[salesSubCatFilterI] : {}; + let salesSubCatFilter = salesSubCatFilterI >= 0 ? salesSubCatFilterObj['KPIFieldEnable'] : false; + let salesBrandFilterI = KPIFields.findIndex(i => i.KPIFieldName == 'salesBrandFilter') + let salesBrandFilterObj = salesBrandFilterI >= 0 ? KPIFields[salesBrandFilterI] : {}; + let salesBrandFilter = salesSubCatFilterI >= 0 ? salesBrandFilterObj['KPIFieldEnable'] : false; + if (rerenderdata == rerenderdata && (salesCatFilter || salesSubCatFilter || salesBrandFilter)) { + return ( + + {salesCatFilter && + + {'Category'} + + {CustomPicker(props, catfilter, 'CategoryName', 'CategoryId', 'CategoryName', 'CategoryId', onselectionChange, { value: filtervalue.CategoryId, otherData: {} }, customStyle.Sale_filterSelStyle, customStyle.Sale_filterSelInputStyle, true)} + { clearFilter(catfilter[0], 'CategoryId', 'CategoryName') }}> + + + + } + + {salesSubCatFilter && + + {'SubCategory'} + + {CustomPicker(props, subcatfilter, 'SubCategoryName', 'SubCategoryId', 'SubCategoryName', 'SubCategoryId', onselectionChange, { value: filtervalue.SubCategoryId, otherData: {} }, customStyle.Sale_filterSelStyle, customStyle.Sale_filterSelInputStyle, true)} + { clearFilter(subcatfilter[0], 'SubCategoryId', 'SubCategoryName') }}> + + + + } + + {salesBrandFilter && + + {'Brand'} + + {CustomPicker(props, brandfilter, 'BrandName', 'BrandId', 'BrandName', 'BrandId', onselectionChange, { value: filtervalue.BrandId, otherData: {} }, customStyle.Sale_filterSelStyle, customStyle.Sale_filterSelInputStyle, true)} + { clearFilter(brandfilter[0], 'BrandId', 'BrandName') }}> + + + + } + + ) + } + else { + return null; + } + } + + + return ( + + {processing && } + + {ConfirmSaveAlert(props, showAlert, onSaveCancel, saveData)} + + + + + { setSearchedItem(val); FilterStores(val, filtervalue) }} + /> + + { FilterStores(searchedItem, filtervalue) }}> + + + + + + {(showMrpPtr !== 'NA' || showMrpPtrRef.current !== 'NA') && + + Total Amount : Rs {calculatetotalAmount(SKUStockData)} + + + Total Sales : {calculatetotalStockQty(SKUStockData)} + + } + + {Object.keys(storeData).length > 0 && + + + { + const cat = item; + const catIndex = index; + // get error field brand id + let EF_brand = errorfield.EF_brand != null ? errorfield.EF_brand : {}; + let error_bid = EF_brand.CategoryId || ''; + return ( + + + + {item.CategoryName} + + + + { + { + const skus = item; + const sku_index = index; + let thisCatSkuData_i = SKUStockData.findIndex(i => i.CategoryId == cat.CategoryId && i.ProductId == skus.ProductId); + let thisCatSkuData = thisCatSkuData_i >= 0 ? (SKUStockData[thisCatSkuData_i] || {}) : {}; + let stock = thisCatSkuData.Stock != null ? thisCatSkuData.Stock : ''; + + // get error field product id + let EF_product = errorfield.EF_product != null ? errorfield.EF_product : {}; + let error_pid = EF_product.ProductId || ''; + let EF_InputKey = errorfield.EF_InputKey; + let show_errorhere = error_bid == cat.CategoryId && error_pid == skus.ProductId; + + let errorStyle_ST = (error && show_errorhere && EF_InputKey == 'input1_' ? customStyle.stk_inptSTyle_error : {}); + + return ( + + + + {skus.ArticleCode && skus.ArticleCode.trim() !== "" + ? `${skus.ProductName} [${skus.ArticleCode}]` + : skus.ARTICLE_CODE && skus.ARTICLE_CODE.trim() !== "" + ? `${skus.ProductName} [${skus.ARTICLE_CODE}]` + : skus.ProductName} + + + {(showMrpPtr !== 'NA' || showMrpPtrRef.current !== 'NA') && ( + + {showMrpPtr + " : " + (showMrpPtr === 'PTR' ? skus?.ptr : skus?.Mrp)} + + ) + + } + + + + {(IsOpeningStockScreen == true || IsMidDayStockScreen == true || IsStockScreen == true) && + + + {IsMidDayStockScreen == true && + + {`Opening Stock + Midday Stock : (${skus.OPENING_STOCK} + ${skus.MIDDAY_STOCK}) :`} + {(parseInt(skus.MIDDAY_STOCK) + parseInt(skus.OPENING_STOCK))} + + } + {IsMidDayStockScreen == false && (IsStockScreen == true || IsOpeningStockScreen == true) && + {`Opening Stock : ${skus.OPENING_STOCK}`} + } + + } + + { + + + + + Sale + { inputRefs.current['input1_' + cat.CategoryId + '_' + skus.ProductId] = reff; }} + style={[customStyle.openStk_prd_inputStyle, customStyle.openStk_prd_flex_inputStyle, customStyle.openStk_prd_inputShort2, errorStyle_ST]} + placeholder="" + autoComplete='off' + placeholderTextColor={PageTheme.$placeholder_color} + value={(stock + '' || '')} + keyboardType='number-pad' + returnKeyType={(Platform.OS === 'ios') ? 'done' : 'next'} + blurOnSubmit={false} + onSubmitEditing={() => { focusToNext(cat, skus, '1') }} + onChangeText={(val) => { onStockValChange(cat, skus, val, 'Stock', 'numeric') }} + /> + + + + {stock !== undefined && stock !== '' && stock !== 0 && (showMrpPtr !== 'NA' || showMrpPtrRef.current !== 'NA') ? + Sale value : + + {(() => { + const rate = skus?.ptr === 0; + const value = rate * (stock || 0); + return Number.isInteger(value) ? value : value.toFixed(2); + })()} + + : <>} + + } + + + ) + }} /> + } + + + ); + }} + /> + + } + + { submitData() }} /> + + + + + setModalVisible(false)} + animationType="slide" + > + + + {renderModalContent()} + + + + + ); +} + + + +export default connect(mapStateToProps, mapDispatchToProps)(Sale); + +const styles = StyleSheet.create({ + modalBackground: { + flex: 1, + backgroundColor: 'rgba(0, 0, 0, 0.5)', + justifyContent: 'center', + alignItems: 'center', + }, + modalContainer: { + paddingVertical: 16, + paddingHorizontal: 10, // ✅ Reduce padding from left/right + backgroundColor: '#fff', + borderRadius: 10, + maxHeight: '100%', + width: '100%', + }, + modalTitle: { + fontSize: 18, + fontWeight: 'bold', + marginBottom: 10, + textAlign: 'center', + marginLeft: 20, + marginRight: 20, + color: 'black' + }, + modalItem: { + flexDirection: 'row', + justifyContent: 'space-between', + paddingVertical: 10, + borderBottomWidth: 1, + borderBottomColor: '#ccc', + }, + modalProduct: { + fontSize: 14, + alignContent: 'flex-start', + textAlign: 'flex-start', + padding: 5 + }, + modalButtons: { + flexDirection: 'row', + justifyContent: 'space-around', + marginTop: 20, + }, + modalButton: { + padding: 15, + backgroundColor: '#0066cc', + borderRadius: 50, + width: '50%' + }, + modalButtonText: { + color: '#fff', + fontWeight: 'bold', + textAlign: 'center' + }, + modalButtonYes: { + padding: 15, + backgroundColor: '#0066cc', + borderRadius: 50, + width: '50%', + marginStart: 28 + }, + + modalItemRow: { + flexDirection: 'column', + backgroundColor: '#F9F9F9', + borderRadius: 5, + marginBottom: 5, + padding: 5, + borderColor: '#ccc', + marginHorizontal: 10, + }, + + qtyRow: { + flexDirection: 'row', + alignItems: 'center', + justifyContent: 'space-between', + + }, + + modalInput: { + padding: 5, + width: 60, + alignContent: 'flex-start', + textAlign: 'flex-start', + color: 'black' + }, + calculatedValue: { + fontWeight: 'bold', + color: '#333', + minWidth: 60, + padding: 5, + alignContent: 'right', + textAlign: 'right', + }, + totalsContainer: { + marginTop: 10, + paddingVertical: 8, + borderTopWidth: 1, + borderColor: '#ccc', + flexDirection: 'row', + justifyContent: 'space-between', + paddingHorizontal: 5, + }, + + totalText: { + fontWeight: 'bold', + fontSize: 16, + color: '#000', + }, + +}); \ No newline at end of file diff --git a/PerformicsSrc/src/screens/SaleQRCode.js b/PerformicsSrc/src/screens/SaleQRCode.js new file mode 100644 index 0000000..27d8787 --- /dev/null +++ b/PerformicsSrc/src/screens/SaleQRCode.js @@ -0,0 +1,694 @@ +import React,{useState,useEffect, useRef} from 'react'; +import Container from '../components/container'; +import { useRoute } from '@react-navigation/native'; +import { globalStyles,customStyles,GetPageTheme } from "../styles/Global"; +import {StatusBar,Image,TextInput,View,Text,ScrollView,TouchableOpacity,Platform,PermissionsAndroid,FlatList, Alert, KeyboardAvoidingView, BackHandler, Keyboard, Animated, AppState} from 'react-native'; +import { ReactReduxContext,connect,useSelector, useDispatch } from 'react-redux'; +import { mapStateToProps,mapDispatchToProps } from '../reducers/contextProvider'; +import {notify} from '../components/notify'; +import moment from 'moment'; +import {getDownloadJson,getKPIFields,marktext1,marktext2, resizeImage, restore_ImageWithMetaData, validateNumber} from '../controller/functions'; +import {get_item,set_item,clear_item} from '../components/localStorage'; +import {version,sloganline,appname,testurl,db, colors_Arr, common_ImagePath,ImageFolderPath, HierarchyTbls} from '../constants/constants'; +import CustomHeader from '../components/customHeader'; +import {Card, Menu, Switch} from 'react-native-paper'; +import {AntDesign, Entypo, FontAwesome, Ionicons, MaterialCommunityIcons} from '../components/icons'; +import CustomLoader from '../components/CustomLoader'; +import LinearGradient from 'react-native-linear-gradient'; +import { AppTables } from '../constants/tableConstants'; + +import GradientButton from '../components/gradientButton'; +import { ConfirmSaveAlert} from '../components/alert'; +import QRCodeScannerKit from '../components/QRCodeScannerKit'; + + +function SaleQRCode(props) { + const route = useRoute(); + const ST=props.StaticText || {}; + // get all theme styles acc to current theme set + const PageTheme=GetPageTheme(props.DarkMode,route.name); + const customStyle=customStyles(props.DarkMode,route.name); + + const [processing, setProcessing] = useState(false); + const [loaderTitle, setLoaderTitle] = useState(); + const [isAdhocScreen, setIsAdhocScreen] = useState(false); + const [storeData, setStoreData] = useState({}); + const [StoreCameraAllow, setStoreCameraAllow] = useState(true); + const [currentMenu, setCurrentMenu] = useState({}); + const [brandData, setBrandData] = useState([]); + const [globalBrandData, setGlobalBrandData] = useState([]); + const [rerenderdata, setrerenderdata]= useState(0); + const [rerenderdata2, setrerenderdata2]= useState(0); + + const [catImages, setCatImages] = useState([]); + const [SKUStockData, setSKUStockData] = useState([]); + const [KPIFields, setKPIFields] = useState([]); + + const [showAlert, setShowAlert] = useState(false); + const [toRemoveId, setToRemoveId] = useState(''); + const [toRemoveItem,setToRemoveItem]= useState({}); + const [showRemoveConfirm_M,setshowRemoveConfirm_M]= useState(false); + + + const [AddVisFormData, setAddVisFormData] = useState({}); + const [QREnable, setQREnable] = useState(false); + const [QRqtnData, setQRqtnData] = useState({}); + const [showQRCamera, setShowQRCamera] = useState(false); + const [products, setProducts] = useState([]); + + const [hasUnsavedChanges,setHasUnsavedChanges] = useState(false); + const [showCamera, setShowCamera] = useState(false); + const [ShowCatWise,setShowCatWise]= useState(false); + const [CatData,setCatData]= useState(false); + + + + const hasUnsavedChangesRef = React.useRef(hasUnsavedChanges); + const WindowDataRef=React.useRef(SKUStockData); + const WindowDataImgRef = React.useRef(catImages); + const StoreIdRef=React.useRef(null); + const ScreenNameRef=React.useRef(''); + const [errorfield, setErrorField] = useState({}); + const [error, setError] = useState(false); + const PSGroupData=React.useRef(''); // Grouping data (Category/ SubCategory/ Brand ) for BG save fuunctionality with Partial Save Scenario + const BGPSAllow=React.useRef(false); + + + const d1=new Date(); + const d2=moment(d1).format('MM/DD/YYYY'); + + const [productList, setProductList] = useState([]); + + + + useEffect(() => { + setLoaderTitle(ST.Loading+'...') + let params=props.route.params? props.route.params:{}; + let storeData1=params.storeData || {}; + let menu1=params.menu || {}; + let ShowCatWise1=params.ShowCatWise!=null?params.ShowCatWise:false; + let CatData1=params.CatData!=null?params.CatData:{}; + let isAdhoc=params.isAdhoc || false; + + console.log('params.ShowCatWise',params.ShowCatWise); + + setIsAdhocScreen(isAdhoc); + setShowCatWise(ShowCatWise1); + setCatData(CatData1); + setStoreData(storeData1); + setCurrentMenu(menu1); + + let cameraAllow=storeData1.CameraAllow=='true' || storeData1.CameraAllow==1?true:false; + setStoreCameraAllow(cameraAllow); + + StoreIdRef.current=storeData1.StoreId + ScreenNameRef.current=menu1.ScreenName + getData(storeData1,menu1,ShowCatWise1,CatData1); + + const AppStateSubscription = AppState.addEventListener('change', (pro)=>{ _handleAppStateChange(pro)}); + const unsubscribe=props.navigation.addListener('beforeRemove', onBeforeRemove); + + return function cleanup() { + AppStateSubscription.remove(); + // AppState.removeEventListener('change', (pro)=>{ _handleAppStateChange(SKUStockData,pro)}); + return unsubscribe; + }; + + }, []); + + const _handleAppStateChange = async (nextAppState) => { + if(nextAppState =='background' && hasUnsavedChangesRef.current==true){ + let newData = { + storeBGData:WindowDataRef.current, + menuName:ScreenNameRef.current, + StoreId1:StoreIdRef.current, + visiteDate:d2, + BGPSAllow:BGPSAllow.current, + PSGroupData:PSGroupData.current, + } + let WindowsStr= JSON.stringify(newData) + console.log("checkwindata:",WindowsStr) + await set_item('storeData',WindowsStr); + + let newDataForSubCateory ={ + storeBGDataHdr:WindowDataImgRef.current, + menuName:ScreenNameRef.current, + StoreId1:StoreIdRef.current, + visiteDate:d2, + BGPSAllow:BGPSAllow.current, + PSGroupData:PSGroupData.current, + } + let WindowsStr2= JSON.stringify(newDataForSubCateory) + console.log("checkwindatahdr:",WindowsStr2) + await set_item('storeDataHdr',WindowsStr2); + } + } + + useEffect(() => { + const unsubscribe=props.navigation.addListener('beforeRemove', onBeforeRemove); + return unsubscribe; + }, [hasUnsavedChanges]); + + useEffect(() => { + const unsubscribe=props.navigation.addListener('beforeRemove', onBeforeRemove); + return unsubscribe; + }, [showCamera]); + + function onBeforeRemove(e){ + if(showCamera==true){ + e.preventDefault(); + setShowCamera(false); + } + else{ + if (hasUnsavedChanges==true) { + e.preventDefault(); // Prevent default behavior of leaving the screen + onRemoveScreen(e); + } + else{ + return; + } + } + } + + function BgUnsavedChanges(val){ + hasUnsavedChangesRef.current=val + setHasUnsavedChanges(val); + } + + + + function onRemoveScreen(e){ + Alert.alert( + "", + ST.Doyoureallywanttoexitthescreen, + [ + { + text: ST.Cancel, + onPress: () => {}, + style: "cancel" + }, + { text: ST.OK, onPress: async () => { + // setHasUnsavedChanges(false); + BgUnsavedChanges(false) + await clear_item('storeData') + props.navigation.dispatch(e.data.action);} } + ] + ); + } + +//chngesss new restricate dublicate when same product exist in db also + +async function getData(storeData1, menu1, ShowCatWise1, CatData1 = {}, QRcode = null) { + try { + let { StoreId } = storeData1; + + db.transaction((txn) => { + // ✅ Step 1: Load existing data if no QR code is scanned + if (!QRcode) { + setLoaderTitle(ST.Loading + '...'); + setProcessing(true); + + let loadQuery = `SELECT * FROM ${AppTables.QRCODE_SALE} WHERE STORE_ID = ? AND VISIT_DATE = ?`; + txn.executeSql(loadQuery, [StoreId, d2], (txn2, txnres) => { + console.log('Existing products:', txnres.rows.length); + + let existingProducts = []; + for (let i = 0; i < txnres.rows.length; i++) { + existingProducts.push({id: i + 1, ...txnres.rows.item(i)}); + } + + console.log("Loaded existing products:", existingProducts); + setProducts(existingProducts); + setProcessing(false); + }, (txnE, txnerr) => { + console.log('Error loading existing data:', txnerr); + }); + } + + // ✅ Step 2: Handle new QR code scan + if (QRcode) { + // Check for duplicates in current products list + const existsInList = products.some((item) => item.code === QRcode); + if (existsInList) { + Alert.alert('Duplicate', 'This item is already added to the list.'); + return; + } + + // ✅ Improved QR extraction with validation + let extractedCode = 'N/A'; // Default if extraction fails + const qrParts = QRcode.split('-'); + if (qrParts.length >= 2) { + extractedCode = qrParts[qrParts.length - 2]; // Second-last part + } + + console.log('Extracted Product Code:', extractedCode); + + // ✅ Check if product already exists in QRCODE_SALE table + txn.executeSql( + `SELECT COUNT(*) as count FROM ${AppTables.QRCODE_SALE} WHERE STORE_ID = ? AND VISIT_DATE = ? AND UNIQUE_QRCODE = ?`, + [StoreId, d2, QRcode], // Use full QRcode instead of extractedCode + (txn2, checkRes) => { + // Log the raw result for debugging + console.log("checkRes:", JSON.stringify(checkRes)); + // Access the count correctly + const count = checkRes.rows.item(0).count; // Should work for most SQLite libraries + const existsInTable = count > 0; + + console.log("Exists in table:", existsInTable, "Count:", count); + + if (existsInTable) { + Alert.alert('Duplicate', 'This item already exists in the sales record for today.'); + return; + } + + // ✅ Query Product_Master for product name if no duplicate found + txn.executeSql( + `SELECT ProductName, ProductId FROM Product_Master WHERE ProductCode = ?`, + [extractedCode], + (txn3, res) => { + let productName = 'Unknown Product'; + let productId = ''; + if (res.rows.length > 0) { + productName = res.rows.item(0).ProductName; + productId = res.rows.item(0).ProductId; + } + + console.log('Matched Product Name:', productName); + + // Add new product with name to the list and re-index IDs + setProducts((prev) => { + const newProduct = { + id: prev.length + 1, + code: QRcode, + productName: productName, + productId: productId, + ProductCode: extractedCode // Add ProductCode for consistency + }; + const updatedList = [newProduct, ...prev]; + return updatedList.map((item, index) => ({ + ...item, + id: index + 1 // Re-index IDs + })); + }); + }, + (txn3, err) => { + console.error('Error querying Product_Master:', err); + } + ); + }, + (txn2, err) => { + console.error('Error checking QRCODE_SALE:', err); + } + ); + } + }); + + } catch (err) { + console.error('Error in getData:', err); + } +} + async function submitQRData(){ + let isvalid=await validate(); + console.log("isvalidd--",isvalid); + if(isvalid){ + Keyboard.dismiss(); + setShowAlert(true); + } + } + + async function saveData(){ + BgUnsavedChanges(false) + setShowAlert(false); + setLoaderTitle(ST.SavingData+'...'); + setProcessing(true); + try { + let {StoreId}=storeData; + db.transaction(async function (txn) { + + let q = `DELETE FROM ${AppTables.QRCODE_SALE} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' `; + + // remove old data + txn.executeSql(q, [], async function (txn2, txnres) { + console.log('QRCODE_SALE data deleted'); + }, function (txnE, txnerr) { console.log(txnerr); }); + + insertData() + }); + } catch (err) { + console.log(err); + } + } + + + + async function insertData(seq = 0) { + try { + let {StoreId}=storeData; + console.log('scannedProducts before insertion:', products,StoreId); // ✅ Verify the data + + if (products.length === 0) { + console.log('No products to insert.'); + notify('No products to insert!'); + return; + } + + db.transaction(async (txn) => { + let scanValues = products.map((product, index) => { + seq++; + console.log('scannedProducts for insertion:', products); + const {code,id,productName,productId} = product; + console.log("checkproducts:",product) + + // let SKU_UID = `SKU${seq}${Math.floor(Math.random() * 1000)}`; + + return `('${id || product.QRCODE_ID}', '${StoreId}','${d2}','${code || product.UNIQUE_QRCODE}','${productName || product.PRODUCT_NAME}','${productId || product.PRODUCT_ID}','${d2}')`; + }).join(", "); // Combine all values into a single query + + let addScanQuery=`INSERT INTO ${AppTables.QRCODE_SALE} (QRCODE_ID,STORE_ID,VISIT_DATE,UNIQUE_QRCODE,PRODUCT_NAME,PRODUCT_ID,ADDED_DATE) VALUES ${scanValues} `; + + console.log('Insert query:', addScanQuery); + + txn.executeSql( + addScanQuery, + [], + (txn2, res) => { + console.log('Data inserted successfully'); + notify('Sale QR Data inserted successfully!'); + setProcessing(false); + setProductList([]); // ✅ Clear the list after insertion + }, + (error) => { + console.error('Insert Error:', error); + notify('Failed to insert data!'); + } + ); + }); + + } catch (err) { + console.error('Insertion Error:', err); + notify('An error occurred while inserting data!'); + } + } + + + + async function validate(){ + let isValid=true; + + if(products.length === 0){ + notify("Please Scan QR Code"); + isValid=false; + } + console.log('isValid:',isValid); + return isValid; + } + + + function onSaveCancel(){ + setShowAlert(false) + } + + function showRemoveConfirm(item,index){ + console.log("checking-------",item) + + if(item.QRCODE_ID>0){ + console.log("checking--id-----",item.QRCODE_ID) + setToRemoveId(item.QRCODE_ID); + setToRemoveItem(item); + setshowRemoveConfirm_M(true); + } + else{ + setToRemoveId(index); + setToRemoveItem(item); + setshowRemoveConfirm_M(true); + } + + } + + // async function Remove_QRdata() { + // let { StoreId, ChainId, StateId, StoreTypeId } = storeData; + // let { MenuId } = currentMenu; + + // db.transaction(async function (txn) { + // let index = toRemoveId; + // console.log("indexxx----",index) + // let item = toRemoveItem; + // let arr = products; + // if (item.QRCODE_ID!=null && item.QRCODE_ID!='undefined'&& index>0) { + // console.log("check-keyId-",index) + + // let deleteQuery=`DELETE FROM ${AppTables.QRCODE_SCANNER} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' AND QRCODE_ID='${index}' `; + // console.log("dlete-query",deleteQuery) + + // txn.executeSql(deleteQuery, [], function (txn3, txnres) { + // console.log('QR-Code data deleted', item.QRCODE_ID,+""+index); + // let updatedProduct = products.filter(item => item.QRCODE_ID !== index); + // setProducts(updatedProduct); + // setHasUnsavedChanges(true); + // notify('QR-Code removed successfully', 'LONG'); + // setrerenderdata(!rerenderdata); + // setToRemoveId(''); + // setToRemoveItem({}); + // setshowRemoveConfirm_M(false); + + // }, function (txnE, txnerr) { + // console.log('Error deleting QR-Code :', txnerr); + // }); + + // } + // else { + // let index=toRemoveId + // let item=toRemoveItem; + // let arr=products; + // console.log('toRemoveId:',"helllo"); + // console.log('toRemoveId:',index); + // if(index>=0 && index { + // ✅ If item exists in the database + if (item.QRCODE_ID && item.QRCODE_ID !== 'undefined' && index >= 0) { + console.log("Deleting from DB, ID:", item.QRCODE_ID); + + let deleteQuery = `DELETE FROM ${AppTables.QRCODE_SALE} WHERE STORE_ID = '${StoreId}'AND VISIT_DATE = '${d2}'AND QRCODE_ID = '${item.QRCODE_ID}' `; + + txn.executeSql(deleteQuery, [], (txn3, txnres) => { + console.log('QR-Code data deleted:', item.QRCODE_ID); + + // ✅ Remove from the local products list + const updatedProducts = products + .filter((p) => p.QRCODE_ID !== item.QRCODE_ID) + .map((p, idx) => ({ ...p, id: idx + 1 })); // ✅ Reassign IDs + + setProducts([...updatedProducts]); // Ensure a fresh reference for re-render + setHasUnsavedChanges(true); + notify('QR-Code removed successfully', 'LONG'); + setAddVisFormData({}); + setrerenderdata((prev) => !prev); // Trigger re-render + setToRemoveId(''); + setToRemoveItem({}); + setshowRemoveConfirm_M(false); + + }, (txnE, txnerr) => { + console.log('Error deleting QR-Code:', txnerr); + }); + + } else { + // ✅ Handle local deletion (not in DB) + if (index >= 0 && index < products.length) { + console.log('Deleting locally, index:', index); + + const updatedProducts = products + .filter((_, i) => i !== index) // Remove item by index + .map((item, idx) => ({ ...item, id: idx + 1 })); // ✅ Reassign IDs + + setProducts([...updatedProducts]); // Ensure fresh reference for re-render + setHasUnsavedChanges(true); + notify('QR-Code removed successfully', 'LONG'); + setAddVisFormData({}); + setrerenderdata((prev) => !prev); // Trigger re-render + } else { + notify('Cannot remove! QR-Code not found', 'LONG'); + } + + setToRemoveId(''); + setToRemoveItem({}); + setshowRemoveConfirm_M(false); + } + }); + } + + + + async function onQRScanned(imgdata){ + + let QR_withValidChars=imgdata!=null && imgdata!=''?imgdata.replace(/["']/g,''):''; + let value=QR_withValidChars; + console.log("value------",value) + onFormDataChange(value,'QRCode','qrtext') + getData(storeData,currentMenu,"","",value); + } + + + function onFormDataChange(val,key,type="text"){ + + // if(val!=''){ + // let isValid=validateNumber(val,type); + // console.log("type:",type,isValid); + // if(!isValid){ + // return; + // }r + // } + let data=AddVisFormData; + data[key]=val; + setAddVisFormData(data); + setHasUnsavedChanges(true); + setrerenderdata(!rerenderdata); + + console.log("addvisbiltydtaa--",AddVisFormData) + } + + + + + function _renderSaleData(){ + //{console.log("productList----", productList )} + let isHdrImgIndex=KPIFields.findIndex(i=>i.KPIFieldName=='HeaderImageAllow') + let isHdrImgKPIObj=isHdrImgIndex>=0?KPIFields[isHdrImgIndex]:{}; + + return ( + + { return skuIndex;}} + renderItem={({item,index})=>{ + + const skus=item; + console.log("checkskudata:",skus) + + const sku_index=index; + + let card_bg = skus.code ? { backgroundColor: PageTheme.$fifth_color } : {}; + // get error field product id + let EF_product= errorfield.EF_product!=null? errorfield.EF_product:{}; + let error_pid = EF_product.ProductId || ''; + let EF_InputKey=errorfield.EF_InputKey; + // let show_errorhere =errorcatid==cat.SubCategoryId && error_bid==brand.BrandId && error_pid==skus.ProductId; + + let errorStyle_ST=( error && show_errorhere && EF_InputKey=='input1_'? customStyle.stk_inptSTyle_error :{}); + + return( + + {skus.id || skus.QRCODE_ID} + + {skus.code || skus.UNIQUE_QRCODE} + {skus.productName || skus.PRODUCT_NAME} + + + { showRemoveConfirm(item, index); } }> + + + + + ) + }} + contentContainerStyle={{ paddingBottom: 120 }} + /> + + ) + } + + + + + + return ( + + {processing && } + + + + {ConfirmSaveAlert(props,showAlert,onSaveCancel,saveData)} + {ConfirmSaveAlert(props,showRemoveConfirm_M,()=>{setshowRemoveConfirm_M(false)},Remove_QRdata,ST.Doyoureallywanttoremovethisvisibility)} + {/* {setShowQRCamera(false);onQRScanned(imgData)}} showCamera={showQRCamera} onHideCamera={()=>{setShowQRCamera(false);}}/> */} + + { setShowQRCamera(false); setQREnable(false);}} + onQRScanned={(value) => { + setShowQRCamera(false); + setQREnable(false); + onQRScanned(value); + }} + /> + + + + + + + + + {"QR Code"} + + {onFormDataChange(val,'QRCode',"qrtext");}} + autoComplete='off' + /> + + {setQREnable(true);setQRqtnData({});setShowQRCamera(true);}}> + + + + + + + + + + { + _renderSaleData() + } + + + {submitQRData()}}/> + + + + + ); + } + + + +export default connect(mapStateToProps, mapDispatchToProps)(SaleQRCode); \ No newline at end of file diff --git a/PerformicsSrc/src/screens/SamplingCustTrack.js b/PerformicsSrc/src/screens/SamplingCustTrack.js new file mode 100644 index 0000000..45cadca --- /dev/null +++ b/PerformicsSrc/src/screens/SamplingCustTrack.js @@ -0,0 +1,1813 @@ +import React,{useState,useEffect, useRef} from 'react'; +import Container from '../components/container'; +import { useRoute } from '@react-navigation/native'; +import { customStyles,GetPageTheme, STATUSBAR_HEIGHT } from "../styles/Global"; +import {Image,TextInput,View,Text,ScrollView,TouchableOpacity,Platform,FlatList, Alert, Dimensions,Animated, Easing, AppState, Keyboard} from 'react-native'; +import { connect } from 'react-redux'; +import { mapStateToProps,mapDispatchToProps } from '../reducers/contextProvider'; +import {notify} from '../components/notify'; +import moment from 'moment'; +import {getAllFolderImages, getKPIFields, marktext1,marktext2, resizeImage, restore_ImageWithMetaData, validateNumber, ValidateEmail} from '../controller/functions'; +import {db, common_ImagePath, ImageFolderPath} from '../constants/constants'; +import CustomHeader from '../components/customHeader'; +import {AntDesign, Entypo, FontAwesome, FontAwesome5, Fontisto, MaterialCommunityIcons} from '../components/icons'; +import CustomLoader from '../components/CustomLoader'; +import LinearGradient from 'react-native-linear-gradient'; +import { AppTables } from '../constants/tableConstants'; +import * as RNFS from 'react-native-fs'; +import GradientButton from '../components/gradientButton'; +import { ConfirmSaveAlert } from '../components/alert'; +import ModalSelector from 'react-native-modal-selector'; +import MultiSelect from 'react-native-multiple-select'; +import { PageTheme } from '../styles/Themes'; +import DateTimePicker from '@react-native-community/datetimepicker'; +import DraggableFlatList,{ScaleDecorator} from 'react-native-draggable-flatlist' +import AudioRecorderPlayer, { AudioEncoderAndroidType, AudioSourceAndroidType, AVEncoderAudioQualityIOSType, AVEncodingOption, AVModeIOSOption } from 'react-native-audio-recorder-player'; +import CustomCamera from '../components/Camera'; +import { clear_item, get_item, set_item } from '../components/localStorage'; +import { Item } from 'react-native-paper/lib/typescript/components/Drawer/Drawer'; + +const {height, width} = Dimensions.get('window'); +const topbarht=STATUSBAR_HEIGHT+50; +const actualWindowHt=parseInt((height-topbarht)+10); + + + +function SamplingCustTrack(props) { + const route = useRoute(); + const ST=props.StaticText || {}; + const audioRecorderPlayer = new AudioRecorderPlayer(); + const AudioSet = { + AudioEncoderAndroid: AudioEncoderAndroidType.AAC, + AudioSourceAndroid: AudioSourceAndroidType.MIC, + AVModeIOS: AVModeIOSOption.measurement, + AVEncoderAudioQualityKeyIOS: AVEncoderAudioQualityIOSType.high, + AVNumberOfChannelsKeyIOS: 2, + AVFormatIDKeyIOS: AVEncodingOption.aac, + }; + // get all theme styles acc to current theme set + const PageTheme=GetPageTheme(props.DarkMode,route.name); + const customStyle=customStyles(props.DarkMode,route.name); + + const [processing, setProcessing] = useState(true); + const [loaderTitle, setLoaderTitle] = useState(); + const [isAdhocScreen, setIsAdhocScreen] = useState(false); + const [showRating, setShowRating] = useState(false); + const [RatingQtn, setRatingQtn] = useState({}); + const [RatingOrder, setRatingOrder] = useState([]); + const [showRecorder, setShowRecorder] = useState(false); + const [VRS, setVRS] = useState({}); + const [RecorderTimer, setRecorderTimer] = useState({}); + const [playerTimer, setPlayerTimer] = useState({}); + const [rerenderView, setRerenderView] = useState(0); + const [hasUnsavedChanges,setHasUnsavedChanges] = useState(false); + const [VoiceRecorderStatus, setVoiceRecorderStatus] = useState(ST.Pressmictostartrecordingvoice); + const [RecFilePath, setRecFilePath] = useState({}); + const [dateValue, setDateValue] = useState(''); + const [openDatePicker, setOpenDatePicker]= useState(0); + const [storeData, setStoreData] = useState({}); + const [ShowCat, setShowCat] = useState(false); + const [ActiveSampling, setActiveSampling]= useState({}); + const [ActiveCategory, setActiveCategory]= useState({}); + const [currentMenu, setCurrentMenu] = useState({}); + const [rerenderdata, setrerenderdata]= useState(0); + const [SurveySubCats, setSurveySubCats]= useState([]); + const [SurveyQuestions, setSurveyQuestions]= useState([]); + const [QuestionsData,setQuestionsData]=useState({}); + const [showAlert, setShowAlert] = useState(false); + const [showCamera, setShowCamera] = useState(false); + const [getImageProps,setGetImageProps]= useState({}); + const [KPIFields, setKPIFields] = useState([]); + const [showSwitchCamera,setShowSwitchCamera]= useState(false); + const [AddVisibility, setAddVisibility] = useState([]); + const [AddVisFormData, setAddVisFormData] = useState({}); + const [showRemoveConfirm_M,setshowRemoveConfirm_M]= useState(false); + const [toRemoveId,setToRemoveId]= useState(''); + const [toRemoveItem,setToRemoveItem]= useState({}); + + const inputRefs = useRef({}); + + const animatedRipple=useRef(new Animated.Value(0)).current; + const animatedRipple2=useRef(new Animated.Value(0.5)).current; + + const hasUnsavedChangesRef = React.useRef(hasUnsavedChanges); + const WindowDataRef=React.useRef(AddVisFormData); + const StoreIdRef=React.useRef(null); + const ScreenNameRef=React.useRef({}); + const NavigationRef=React.useRef({}); + + const d1=new Date(); + const d2=moment(d1).format('MM/DD/YYYY'); + + + useEffect(() => { + setLoaderTitle(ST.Loading+'...') + let params=props.route.params? props.route.params:{}; + let storeData1=params.storeData || {}; + let SamplingData=params.SamplingData || {}; + let menu1=params.menu || {}; + let isAdhoc=params.isAdhocScreen || false; + let isBeat=params.isBeat || false; + + setIsAdhocScreen(isAdhoc); + setStoreData(storeData1); + setActiveSampling(SamplingData) + setCurrentMenu(menu1); + + StoreIdRef.current=storeData1.StoreId + ScreenNameRef.current={BgscreenName:menu1.ScreenName,BgMenuId:menu1.MenuId } + let navData={ + 'surveyData':SamplingData, + 'storeData':storeData1, + 'menu':menu1, + 'isAdhocScreen':isAdhoc, + 'isBeat':isBeat} + NavigationRef.current=navData + + getData(SamplingData,storeData1,menu1) + + const AppStateSubscription = AppState.addEventListener('change', (pro)=>{ _handleAppStateChange(pro)}); + const unsubscribe=props.navigation.addListener('beforeRemove', onBeforeRemove); + return (()=>{ + audioRecorderPlayer.removePlayBackListener(); + audioRecorderPlayer.removeRecordBackListener(); + AppStateSubscription.remove(); + // AppState.removeEventListener('change', (pro)=>{ _handleAppStateChange(QuestionsData,pro)}); + return unsubscribe; + }); + }, []); + + const _handleAppStateChange = async (nextAppState) => { + if(nextAppState =='background' && hasUnsavedChangesRef.current==true){ + let newData = { + storeBGData:WindowDataRef.current, + menuName:ScreenNameRef.current && ScreenNameRef.current.BgscreenName, + StoreId1:StoreIdRef.current, + NavData:NavigationRef.current, + BgMenuID: ScreenNameRef.current && ScreenNameRef.current.BgMenuId, + visiteDate:d2 + } + let WindowsStr= JSON.stringify(newData) + await set_item('storeData',WindowsStr); + } + } + + useEffect(() => { + const unsubscribe=props.navigation.addListener('beforeRemove', onBeforeRemove); + return unsubscribe; + }, [hasUnsavedChanges]); + + useEffect(() => { + const unsubscribe=props.navigation.addListener('beforeRemove', onBeforeRemove); + return unsubscribe; + }, [showCamera]); + + function onBeforeRemove(e){ + if(showCamera==true){ + e.preventDefault(); + setShowCamera(false); + } + else{ + if (hasUnsavedChanges==true) { + e.preventDefault(); // Prevent default behavior of leaving the screen + onRemoveScreen(e); + } + else{ + return; + } + } + } + + function BgUnsavedChanges(val){ + hasUnsavedChangesRef.current=val + setHasUnsavedChanges(val); + } + + function BgWindowData(val){ + WindowDataRef.current=val + // setQuestionsData(val); + setAddVisFormData(val) + } + + + function onRemoveScreen(e){ + Alert.alert( + "", + ST.Doyoureallywanttoexitthescreen, + [ + { + text: ST.Cancel, + onPress: () => {}, + style: "cancel" + }, + { text: ST.OK, onPress: async () => { + // setHasUnsavedChanges(false); + BgUnsavedChanges(false) + await clear_item('storeData') + props.navigation.dispatch(e.data.action);} } + ] + ); + } + + + + async function getData(SamplingData1,storeData1,menu1){ + let storeBGData1=[],bgStoreJson={}; + setProcessing(true); + let windData = await get_item('storeData') + + let AllKPIFields=await getKPIFields(menu1); + setKPIFields(AllKPIFields); + + // set switch camera flag as defined in mapping menu flag (if exists) + let SwitchingCameraI=AllKPIFields.findIndex(i=>i.KPIFieldName=='SwitchingCamera'); + let SwitchingCameraObj=SwitchingCameraI>=0?AllKPIFields[SwitchingCameraI]:{}; + let SwitchingCamera=SwitchingCameraI>=0?SwitchingCameraObj['KPIFieldEnable']:false; + setShowSwitchCamera(SwitchingCamera); + + + if(windData!=null && windData!=''){ + let StoreJson = JSON.parse(windData) + let { storeBGData,menuName,StoreId1,BgMenuID,visiteDate }= StoreJson + if(Object.keys(storeBGData).length>0 && menuName == menu1.ScreenName && menu1.MenuId==BgMenuID && StoreId1== storeData1.StoreId && visiteDate==d2){ + storeBGData1=storeBGData; + bgStoreJson=StoreJson + // setQuestionsData(storeBGData); + BgUnsavedChanges(true) + BgWindowData(storeBGData) + } + } + + return new Promise((resolve,reject)=>{ + try { + let {StoreId}=storeData1; + let { CustomerTrackingQuestionCategoryId,SamplingDefinitionId }=SamplingData1; + + db.transaction(async function (txn) { + + // get added qtns data + let mappQtn_join1=` INNER JOIN Mapping_SamplingQuestion T2 on m.SamplingQuestionId=T2.SamplingQuestionId And T2.SamplingDefinitionId='${SamplingDefinitionId}' ` + let join12=`Left Outer join Master_SamplingQuestion m on d.QUESTION_ID=m.SamplingQuestionId ` + let q7=`Select d.*,m.SamplingQuestionName,m.QuestionType,m.* from ${AppTables.SAMPLING_CUST_TRACK} d ${join12} ${mappQtn_join1} WHERE d.STORE_ID='${StoreId}' and d.VISIT_DATE='${d2}' AND d.CATEGORY_ID='${CustomerTrackingQuestionCategoryId}' AND d.SAMPLING_DEFINITION_ID='${SamplingDefinitionId}' `; + + + // load qtns data from masters + let sl=` DISTINCT T.SQMaximumChar as MaxLength,T.SQMinimumChar as MinLength,T.QuestionCategoryId as CategoryId,T.SQLengthValidationRequired as LengthValidation,T.SQShowCamera,T.SAShowCamera as QuestionImageAllow,"" as DateRange,T.SQDefaultQuestionEnable as QEnable,T.SamplingQuestionName as Question,T.SamplingQuestionId as QuestionId,T.QuestionType as QuestionType,"" as OTP`; + let mappQtn_join2=` INNER JOIN Mapping_SamplingQuestion T2 on T.SamplingQuestionId=T2.SamplingQuestionId And T2.SamplingDefinitionId='${SamplingDefinitionId}' ` + let q=`Select ${sl} FROM Master_SamplingQuestion T ${mappQtn_join2} WHERE T.QuestionCategoryId='${CustomerTrackingQuestionCategoryId} ' `; + q+=` GROUP BY T.SamplingQuestionId ORDER BY T.SamplingQuestionSequence `; + + + await txn.executeSql(q7,[],async function (txn2, txnres) { + console.log('getSurveyData len',txnres.rows); + console.log("txnres2.rows.length----2212",txnres.rows.length) + if(txnres.rows.length>0){ + let arr=[]; + console.log("txnres2.rows.length----22",txnres.rows.length) + for(var i=0;i0){ + for(var k=0;k=0)){ + showImageTag=true; + } + + if(qtn.QuestionType=='Single choice list' && (isandImgAl2 && ansss.AnswerId==selansid)){ + showImageTag2=true; + } + else if(qtn.QuestionType=='List_Multi_Choice' && (isandImgAl2 && selansid.indexOf(ansss.AnswerId)>=0)){ + showImageTag2=true; + } + + } + } + } + + if(qtn.QuestionType=='Number' || qtn.QuestionType=='Text' || qtn.QuestionType=='Decimal' || qtn.QuestionType=='Date'|| qtn.QuestionType=='Email') + { + // selansid=QuestionsData[ans_key]; + showImageTag=(qtn.SQShowCamera==true || qtn.SQShowCamera=='true' || qtn.SQShowCamera==1)?true:(qtn.QuestionImageAllow==true || qtn.QuestionImageAllow=='true' || qtn.QuestionImageAllow==1) ; + // showImageTag2=false; + } + + if(showImageTag){ + let imgPath=data.IMAGE1!=''?((Platform.OS=='ios'?'file://':'')+`${ImageFolderPath+menu1.ScreenName}/`+data.IMAGE1):''; + QD[imgname_key]=data.IMAGE1; + QD[img_key]=imgPath; + } + + if(showImageTag2){ + let imgPath=data.IMAGE2!=''?((Platform.OS=='ios'?'file://':'')+`${ImageFolderPath+menu1.ScreenName}/`+data.IMAGE2):''; + QD[imgname_key2]=data.IMAGE2; + QD[img_key2]=imgPath; + } + + if(qtn.QuestionType=='Audio'){ + let voicefile_path=(Platform.OS=='ios'?'file://':'')+`${ImageFolderPath+menu1.ScreenName}/`+'Recordings/'+data.Answer; + QD[voiceClip_key]={'path':voicefile_path,'filename':data.Answer}; + } + + if(qtn.QuestionType=='Date'){ + let dayonly=moment().format('DD'); + let actual_date=data.Answer?data.Answer.split('/'):[]; + let month=actual_date[0],year=actual_date[1]; + let fulldate=month+'/'+dayonly+'/'+year; + QD[date_key]=fulldate; + + } + let bIndex=arr.findIndex(i=>i.CUSTID==data.CUSTID); + if(bIndex>=0){ + let obj=arr[bIndex] || {}; + let QD1=obj.QuestionsData || []; + QD1.push(QD); + obj['QuestionsData']= QD1; + arr[bIndex]=obj; + } + else{ + let obj={'CUSTID':data.CUSTID,'QuestionsData':[QD]}; + arr.push(obj); + } + // arr.push(data); + + if(i==txnres.rows.length-1){ + + setAddVisibility(arr) + setProcessing(false); + resolve(arr); + // setProcessing(false); + + // setSurveyQuestions(arr); + // setProcessing(false); + } + + + } + + + } + else{ + + + + await txn.executeSql(q,[],async function (txn2, txnres2) { + + let arr=[]; + if(txnres2.rows.length>0){ + for(var i=0;i{ + // setProcessing(false); + // },1000) + resolve(arr); + } + } + } + else{ + resolve([]); + } + + },function (txnE,txnerr) { console.log(txnerr);resolve([]); },); + } + + },function (txnE,txnerr) { console.log(txnerr);resolve([]); },); + + + // let selectlist=` DISTINCT T.SQMaximumChar as MaxLength,T.SQMinimumChar as MinLength,T.QuestionCategoryId as CategoryId,T.SQLengthValidationRequired as LengthValidation,T.SQShowCamera,T.SAShowCamera as QuestionImageAllow, "" as DateRange,T.SQDefaultQuestionEnable as QEnable,T.SamplingQuestionName as Question,T.SamplingQuestionId as QuestionId, T.QuestionType as QuestionType,"" as OTP`; + // let join2=` INNER JOIN ${AppTables.SAMPLING_CUST_TRACK} T1 on T.QuestionCategoryId=T1.CATEGORY_ID And T.SamplingQuestionId=T1.QUESTION_ID `; + // let join3=` INNER JOIN Mapping_SamplingQuestion T2 on T.SamplingQuestionId=T2.SamplingQuestionId And T2.SamplingDefinitionId='${SamplingDefinitionId}' ` + // let q2=`Select ${selectlist} FROM Master_SamplingQuestion T ${join2} ${join3} WHERE T1.STORE_ID='${StoreId}' AND T1.VISIT_DATE= '${d2}' AND T1.SAMPLING_DEFINITION_ID='${SamplingDefinitionId}' AND T.QuestionCategoryId='${CustomerTrackingQuestionCategoryId}' `; + // q2+=` ORDER BY T.SamplingQuestionSequence `; + + let selectlist=` DISTINCT T.SQMaximumChar as MaxLength,T1.IMAGE1,T.SQMinimumChar as MinLength,T.QuestionCategoryId as CategoryId,T.SQLengthValidationRequired as LengthValidation,T.SQShowCamera,T.SAShowCamera as QuestionImageAllow, T1.IMAGE_ALLOW1,"" as DateRange,T.SQDefaultQuestionEnable as QEnable,T.SamplingQuestionName as Question,T.SamplingQuestionId as QuestionId, T.QuestionType as QuestionType,"" as OTP`; + let join2=` INNER JOIN ${AppTables.SAMPLING_CUST_TRACK} T1 on T.QuestionCategoryId=T1.CATEGORY_ID And T.SamplingQuestionId=T1.QUESTION_ID `; + let join3=` INNER JOIN Mapping_SamplingQuestion T2 on T.SamplingQuestionId=T2.SamplingQuestionId And T2.SamplingDefinitionId='${SamplingDefinitionId}' ` + let q2=`Select ${selectlist} FROM Master_SamplingQuestion T ${join2} ${join3} WHERE T1.STORE_ID='${StoreId}' AND T1.VISIT_DATE= '${d2}' AND T1.SAMPLING_DEFINITION_ID='${SamplingDefinitionId}' AND T.QuestionCategoryId='${CustomerTrackingQuestionCategoryId}' `; + q2+=` GROUP BY T.SamplingQuestionId ORDER BY T.SamplingQuestionSequence `; + + await txn.executeSql(q2,[],async function (txn2, txnres2) { + console.log("txnres2.rows.length----2112",txnres2.rows.length) + if(txnres2.rows.length>0){ + let arr=[], arr2=[]; + // var QD=QuestionsData; + for(var i=0;i0){ + for(var k=0;k=0)){ + showImageTag=true; + } + + if(qtn.QuestionType=='Single choice list' && (isandImgAl2 && ansss.AnswerId==selansid)){ + showImageTag2=true; + } + else if(qtn.QuestionType=='List_Multi_Choice' && (isandImgAl2 && selansid.indexOf(ansss.AnswerId)>=0)){ + showImageTag2=true; + } + + } + } + } + + if(showImageTag){ + let imgPath=data.Image1!=''?((Platform.OS=='ios'?'file://':'')+`${ImageFolderPath+menu1.ScreenName}/`+data.Image1):''; + QD[imgname_key]=data.Image1; + QD[img_key]=imgPath; + } + + if(showImageTag2){ + let imgPath=data.Image2!=''?((Platform.OS=='ios'?'file://':'')+`${ImageFolderPath+menu1.ScreenName}/`+data.Image2):''; + QD[imgname_key2]=data.Image2; + QD[img_key2]=imgPath; + } + + if(qtn.QuestionType=='Audio'){ + let voicefile_path=(Platform.OS=='ios'?'file://':'')+`${ImageFolderPath+menu1.ScreenName}/`+'Recordings/'+data.Answer; + QD[voiceClip_key]={'path':voicefile_path,'filename':data.Answer}; + } + + if(qtn.QuestionType=='Date'){ + let dayonly=moment().format('DD'); + let actual_date=data.Answer?data.Answer.split('/'):[]; + let month=actual_date[0],year=actual_date[1]; + let fulldate=month+'/'+dayonly+'/'+year; + QD[date_key]=fulldate; + + } + arr.push(data); + + let bIndex=arr2.findIndex(i=>i.CUSTID==data.CUSTID); + if(bIndex>=0){ + let obj=arr2[bIndex] || {}; + let QD1=obj.QuestionsData || []; + QD1.push(QD); + obj['QuestionsData']= QD1; + arr2[bIndex]=obj; + } + else{ + let obj={'CUSTID':data.CUSTID,'QuestionsData':[QD]}; + arr2.push(obj); + } + + if(i==txnres2.rows.length-1){ + + let { storeBGData,menuName,StoreId1,BgMenuID,visiteDate }=bgStoreJson + if(storeBGData!=null && storeBGData!='' && menuName == menu1.ScreenName && StoreId1== StoreId && menu1.MenuId==BgMenuID && visiteDate==d2){ + if(Object.keys(storeBGData).length<=0){ + // setQuestionsData(QD); + BgWindowData(QD) + } + }else{ + + BgWindowData(QD) + } + + // setAddVisibility(arr) + // setAddVisibility(arr2) + setSurveyQuestions(arr) + setTimeout(()=>{ + setProcessing(false); + },1100) + // resolve(arr); + // setSurveyQuestions(arr); + } + } + + } + else{ + setTimeout(()=>{ + setProcessing(false); + },1100) + } + + },function (txnE,txnerr) { console.log('ryuhuyg',txnerr); setProcessing(false);},); + + + + }); + } catch (err) { + console.log(err); + } + }) + } + + async function getAnswers(qtn,SamplingData1,storeData1,isInserted){ + let {StoreId,ChainId,StateId,StoreTypeId}=storeData1; + let {QuestionId,CategoryId}=qtn + return new Promise((resolve,reject)=>{ + db.transaction(async function (txn) { + // get inserted audit + let sl=` DISTINCT T.SamplingAnswerName as Answer,T.SamplingAnswerId as AnswerId,T.SAShowCamera as ImageAllow1,"" as ImageAllow2,T.SAQuestionEnable,T.SAQuestionDisable`; + let q2=`Select ${sl} FROM Master_SamplingQuestion T WHERE T.SamplingQuestionId='${QuestionId}' AND T.QuestionCategoryId='${CategoryId}' ORDER BY T.SamplingQuestionSequence `; + + + await txn.executeSql(q2,[],async function (txn2, txnres) { + + if(txnres.rows.length>0){ + let arr=[]; + for(var i=0;i{ + return {'Answers':val,'Success':true}; + }).catch((err)=>{ + console.log(err); + return {'Success':false,'Error':err} + }); + } + + async function getImage(imgdata){ + let qtn=getImageProps.qtn || ''; + let type=getImageProps.type || '1'; + if(typeof imgdata =='object' && imgdata.errorCode=='camera_unavailable'){ + notify(ST.Cameraunavailable); + } + else if(typeof imgdata =='object' && imgdata.uri!=null){ + const img=imgdata; + const imgurl=img.uri, imgWidth=img.width, imgHeight=img.ExtendedHeight; + let isImgFromGallery=img.fromGallery!=null?img.fromGallery:false; + let picture_clickedd=isImgFromGallery==true?img.datetime:new Date(); + + let picture_clicked_time=moment(picture_clickedd).format('MM-DD-YYYY HH:mm:ss') + let picture_clicked_time_for_pic_name=moment(picture_clickedd).format('MMDDYYYY_HHmmss') + + console.log("time", picture_clicked_time); + console.log("time1", picture_clicked_time_for_pic_name); + let calculate_tym_date_for_filename = picture_clicked_time_for_pic_name; + let calculate_tym_date_over_img = picture_clicked_time; + + const mark_text1=calculate_tym_date_over_img; + const mark_text2='Store Name:'+storeData.StoreName+' | Store Id:'+storeData.StoreId+' | Question Id :'+qtn.QuestionId+' | Image Type: Sampling Cust Track'+' | Date:'+calculate_tym_date_over_img; + + let filename=storeData.StoreId+'_'+ActiveSampling.CustomerTrackingQuestionCategoryId+'_'+qtn.QuestionId+'_SamplingCustTrack_'+calculate_tym_date_for_filename+'.jpg'; + + + let alldata=AddVisFormData; + let qd=alldata.QuestionsData || []; + const qtnDIndex=qd.findIndex(i=>i.QuestionId==qtn.QuestionId); + let obj=qtnDIndex>=0?qd[qtnDIndex]:{"QuestionId":qtn.QuestionId}; + + // let qd=ActiveSampling; + let img_key=type=='1'?qtn.QuestionId+'_ImagePath1':qtn.QuestionId+'_ImagePath2'; + let imgname_key=type=='1'?qtn.QuestionId+'_ImageName1':qtn.QuestionId+'_ImageName2'; + obj[imgname_key]=filename; + + let imagePath=`${ImageFolderPath+currentMenu.ScreenName}/${filename}`; + RNFS.copyFile(imgurl, imagePath) + .then(async(resn) => { + // render data with clicked image + let uri='file://'+imagePath; + console.log('image marker',uri); + obj[img_key]=uri; + if(qtn.QuestionType=="Image"){ + //set answid - 0 and answer to filename if qtnType is Image + let id_key=qtn.QuestionId+'_AnswerId'; + let ans_key=qtn.QuestionId+'_Answer'; + obj[id_key]=0; + obj[ans_key]=""; + // qd[ans_key]=filename; + } + + qtnDIndex>=0?qd[qtnDIndex]=obj:qd.push(obj); + alldata['QuestionsData']=qd; + console.log('alldata:',qtnDIndex,alldata); + setAddVisFormData(alldata); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + + // add metdata then resize image and restored back to the imagePath + let restore_data={"destFilePath":imagePath,"imgurl":imgurl,imgWidth,imgHeight,mark_text1,mark_text2} + let is_restored=await restore_ImageWithMetaData(restore_data,imgdata); + console.log("image restored:",is_restored); + }) + .catch(err => { + console.log('ERROR: image file write failed!!!'); + console.log(err.message, err.code); + }); + } + } + + async function openCamera(qtn,type){ + setGetImageProps({'qtn':qtn,'type':type}); + setShowCamera(true); + } + + async function disableQtns(sqtns,DQtns,data,isreturn=false){ + if(DQtns.length>0){ + new Promise.all( + DQtns.map((qid,q_index)=>{ + let s_qtnindex=sqtns.findIndex(i=>i.QuestionId==qid) || {}; + let s_qtn=s_qtnindex>=0?sqtns[s_qtnindex]:{}; + if(s_qtnindex>=0){ + s_qtn['isDisabled']=true + sqtns[s_qtnindex]=s_qtn; + let id_key=s_qtn.QuestionId+'_AnswerId'; + let ans_key=s_qtn.QuestionId+'_Answer'; + data[id_key]=0; + data[ans_key]=''; + } + return false + }) + ).then(async (val)=>{ + setSurveyQuestions(sqtns); + // setQuestionsData(data); + BgWindowData(data) + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + }) + } + } + + async function enableQtns(sqtns,EQtns,DQtns,data){ + console.log('enableQtns'); + new Promise.all( + EQtns.map((qid,q_index)=>{ + let s_qtnindex=sqtns.findIndex(i=>i.QuestionId==qid) || {}; + let s_qtn=s_qtnindex>=0?sqtns[s_qtnindex]:{}; + if(s_qtnindex>=0){ + s_qtn['isDisabled']=false + sqtns[s_qtnindex]=s_qtn; + } + return false + }) + ).then(async (val)=>{ + if(DQtns.length>0){ + disableQtns(sqtns,DQtns,data) + } + else{ + setSurveyQuestions(sqtns); + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + }) + } + + function onselectionChange(option,qtn){ + + let alldata=AddVisFormData; + let QD=alldata.QuestionsData || []; + const qtnDIndex=QD.findIndex(i=>i.QuestionId==qtn.QuestionId); + let obj=qtnDIndex>=0?QD[qtnDIndex]:{"QuestionId":qtn.QuestionId}; + + let data=QuestionsData; + let id_key=qtn.QuestionId+'_AnswerId'; + let ans_key=qtn.QuestionId+'_Answer'; + obj[id_key]=option.value; + obj[ans_key]=option.label; + + // setQuestionsData(data); + + qtnDIndex>=0?QD[qtnDIndex]=obj:QD.push(obj); + alldata['QuestionsData']=QD; + console.log('alldata:',alldata); + setAddVisFormData(alldata); + + BgWindowData(alldata) + + let aq_ans=qtn.Answers!=null?qtn.Answers:[]; + let ans_obj=aq_ans.find(i=>i.AnswerId==option.value) || {}; + let EQtns=ans_obj.SAQuestionEnable!=null && ans_obj.SAQuestionEnable!='' && Boolean(String(ans_obj?.SAQuestionEnable?.trim()))?ans_obj.SAQuestionEnable.replace(' ','').split(','):[]; + let DQtns=ans_obj.SAQuestionDisable!=null && ans_obj.SAQuestionDisable!='' && Boolean(String(ans_obj?.SAQuestionDisable?.trim()))?ans_obj.SAQuestionDisable.replace(' ','').split(','):[]; + + console.log('EQtns:',EQtns,DQtns); + let sqtns=SurveyQuestions + if(EQtns.length>0){ + enableQtns(sqtns,EQtns,DQtns,data) + } + else if(DQtns.length>0){ + disableQtns(sqtns,DQtns,data) + } + else{ + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + + + + } + + // function setTextValue(value,qtn,type='') { + // if(value!=''){ + // let isValid=validateNumber(value,type); + // if(!isValid){ + // return; + // } + // } + + // let alldata=AddVisFormData; + // let QD=alldata.QuestionsData || []; + // const qtnDIndex=QD.findIndex(i=>i.QuestionId==qtn.QuestionId); + // let obj=qtnDIndex>=0?QD[qtnDIndex]:{"QuestionId":qtn.QuestionId}; + + + // let id_key=qtn.QuestionId+'_AnswerId'; + // let ans_key=qtn.QuestionId+'_Answer'; + + // // let obj=QuestionsData; + // if(qtn.QuestionType=='Date' ){ + // let date_key=qtn.QuestionId+'_Date'; + // let d=value!=null?new Date(value):new Date(); + // let mfdate=moment(d).format('MM/YYYY'); + // showQtnDatePicker(qtn,false); + // obj[id_key]=0; + // obj[ans_key]=mfdate; + // obj[date_key]=moment(d).format('MM/DD/YYYY'); + // } + // else{ + // obj[id_key]=0; + // obj[ans_key]=value; + // } + // console.log(value,obj); + // // setQuestionsData(obj); + // qtnDIndex>=0?QD[qtnDIndex]=obj:QD.push(obj); + // alldata['QuestionsData']=QD; + // setAddVisFormData(alldata); + // BgWindowData(obj) + // // setHasUnsavedChanges(true); + // BgUnsavedChanges(true) + // setrerenderdata(!rerenderdata); + // } + + function setTextValue(value,qtn,type='') { + if(value!=''){ + let isValid=validateNumber(value,type); + if(!isValid){ + return; + } + } + let id_key=qtn.QuestionId+'_AnswerId'; + let ans_key=qtn.QuestionId+'_Answer'; + + let alldata=AddVisFormData; + let QD=alldata.QuestionsData || []; + const qtnDIndex=QD.findIndex(i=>i.QuestionId==qtn.QuestionId); + let obj=qtnDIndex>=0?QD[qtnDIndex]:{"QuestionId":qtn.QuestionId}; + + if(qtn.QuestionType=='Date' ){ + let date_key=qtn.QuestionId+'_Date'; + let d=value!=null?new Date(value):new Date(); + let mfdate=moment(d).format('MM/YYYY'); + showQtnDatePicker(qtn,false); + obj[id_key]=0; + obj[ans_key]=mfdate; + obj[date_key]=moment(d).format('MM/DD/YYYY'); + } + else{ + obj[id_key]=0; + obj[ans_key]=value; + } + + console.log(value,obj); + qtnDIndex>=0?QD[qtnDIndex]=obj:QD.push(obj); + alldata['QuestionsData']=QD; + setAddVisFormData(alldata); + setHasUnsavedChanges(true); + setrerenderdata(!rerenderdata); + } + + function setRatingValue(data){ + // let ids=[]; + // data.map((item,index)=>{ + // ids.push(item.AnswerId); + // }) + setRatingOrder(data); + } + + + async function setMultiSelectValue(selectedItems=[],qtn) { + let id_key=qtn.QuestionId+'_AnswerId'; + let ans_key=qtn.QuestionId+'_Answer'; + let multi_key=qtn.QuestionId+'_MultiOption'; + + let alldata=AddVisFormData; + let QD=alldata.QuestionsData || []; + let qtnDIndex=QD.findIndex(i=>i.QuestionId==qtn.QuestionId); + let QuestionsData=qtnDIndex>=0?QD[qtnDIndex]:{"QuestionId":qtn.QuestionId}; + + let obj=QuestionsData; + obj[id_key]=0; + obj[multi_key]=selectedItems.join(','); + let anss=[]; + selectedItems.map((itemValue)=>{ + let ans = qtn.Answers.find(c1 => c1.AnswerId == itemValue); + if(ans.Answer){anss.push(ans.Answer)} + }); + obj[ans_key]=anss.join(','); + + qtnDIndex>=0?QD[qtnDIndex]=obj:QD.push(obj); + alldata['QuestionsData']=QD; + console.log('alldata:',alldata); + setAddVisFormData(alldata); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + + + function showQtnDatePicker(qtn,show=false){ + let newqtnIndex=SurveyQuestions.findIndex(q=>q.QuestionId==qtn.QuestionId); + console.log('showQtnDatePicker:',newqtnIndex); + if(newqtnIndex>=0){ + let sq=SurveyQuestions; + let newqtn=sq[newqtnIndex]; + newqtn.showDatePicker=show; + sq[newqtnIndex]=newqtn; + setSurveyQuestions(sq); + if(show==true) setrerenderdata(!rerenderdata); + } + } + + + function setShowQtnKey(qtn,key,show=false){ + if(key!=null && key!=''){ + let newqtnIndex=SurveyQuestions.findIndex(q=>q.QuestionId==qtn.QuestionId); + console.log('setShowQtnKey:',newqtnIndex); + if(newqtnIndex>=0){ + let sq=SurveyQuestions; + let newqtn=sq[newqtnIndex]; + newqtn[key]=show; + sq[newqtnIndex]=newqtn; + setSurveyQuestions(sq); + if(show==true) setrerenderdata(!rerenderdata); + } + } + } + + function onRatingCancel(){ + setShowRating(false); + + } + + function onRatingSave(){ + setShowRating(false); + + let qtn=RatingQtn; + let id_key=qtn.QuestionId+'_AnswerId'; + let ans_key=qtn.QuestionId+'_Answer'; + let rating_key=qtn.QuestionId+'_Rating'; + let ids=[],anss=[]; + RatingOrder.map((item,index)=>{ + ids.push(item.AnswerId); + anss.push(item.Answer); + }) + let obj=QuestionsData; + obj[rating_key]=ids.join(','); + obj[id_key]=0; + obj[ans_key]=anss.join(','); + + console.log(obj); + // setQuestionsData(obj); + BgWindowData(obj) + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + + + + async function focusToNext(qtn,type='1'){ + + let activeKey=''; + let arr=Object.keys(inputRefs.current); + + activeKey='input'+type+'_'+qtn.QuestionId; + + let activeIndex=arr.indexOf(activeKey); + if(activeIndex + Animated.loop( + Animated.sequence([ + Animated.timing(value, { + toValue: maxValue, + duration: 1000, + delay:delay, + useNativeDriver:(Platform.OS=='ios'?false:true), + }), + Animated.timing(value, { + toValue: minValue, + duration: 1000, + delay:delay, + useNativeDriver:(Platform.OS=='ios'?false:true), + }), + ]), + + ).start(); + + + + async function onSubmitData(){ + let isvalid=await validate(); + if(isvalid){ + Keyboard.dismiss(); + setShowAlert(true); + } + } + + function onSaveCancel(){ + setShowAlert(false); + } + + async function saveData(){ + // setHasUnsavedChanges(false); + BgUnsavedChanges(false) + setShowAlert(false); + setLoaderTitle(ST.SavingData+'...'); + setProcessing(true); + try { + let {StoreId,ChainId,StateId,StoreTypeId}=storeData; + await db.transaction(async function (txn) { + + let { CustomerTrackingQuestionCategoryId,SamplingDefinitionId }=ActiveSampling + let {MenuId}=currentMenu; + + let q=`DELETE FROM ${AppTables.SAMPLING_CUST_TRACK} WHERE STORE_ID='${StoreId}' and CATEGORY_ID='${CustomerTrackingQuestionCategoryId}' and VISIT_DATE='${d2}' AND SAMPLING_DEFINITION_ID='${SamplingDefinitionId}' `; + + // remove old data + await txn.executeSql(q,[],async function (txn2, txnres) { + console.log('survey data deleted'); + },function (txnE,txnerr) { console.log(txnerr); },); + + + var values=''; + + for(var j=0;ji.QuestionId==qtn.QuestionId); + let QD34=qtnDIndex34>=0?item[qtnDIndex34]:{}; + + + let selansid=QD34[id_key] || 0; + let selans=QD34[ans_key] || ''; + let imgName1=QD34[imgname_key1] || ''; + let imgName2=QD34[imgname_key2] || ''; + let multiops=QD34[multi_key] || ''; + let isQtnDisabled=qtn.isDisabled!=null && qtn.isDisabled!=''?qtn.isDisabled?1:0:0; + let allanss=qtn.Answers || {}; + let ans_obj=allanss.find(i=>i.AnswerId==selansid) + let imgallow1=ans_obj!=null && ans_obj['ImageAllow1']!=null?ans_obj.ImageAllow1:false; + let imgallow2=ans_obj!=null && ans_obj['ImageAllow2']!=null?ans_obj.ImageAllow2:false; + let f_imgalloq1=(QuestionImageAllow=='true' || QuestionImageAllow==1) || (imgallow1=='true' || imgallow1==1) + + values+=` ('${StoreId}','${d2}','${ActiveSampling.SamplingDefinitionId}','${CategoryId}','${Question}','${QuestionId}','${QuestionType}','${selans}','${selansid}','${f_imgalloq1}','${(imgName1 || '')}','${imgallow2}','${(imgName2 || '')}','${multiops}','${isQtnDisabled}','${uniqueCustId}','${d2}' ) `; + } + } + + let add_data=`INSERT INTO ${AppTables.SAMPLING_CUST_TRACK} (STORE_ID,VISIT_DATE,SAMPLING_DEFINITION_ID,CATEGORY_ID,QUESTION,QUESTION_ID,QUESTION_TYPE,ANSWER,ANSWER_ID,IMAGE_ALLOW1,IMAGE1,IMAGE_ALLOW2,IMAGE2,MULTI_OPTIONS_IDS,IS_DISABLED,CUSTID,ADDED_DATE) VALUES ${values} `; + + console.log("CustTracking value:",add_data) + await txn.executeSql(add_data,[],async function (txn2, txnres) { + console.log('Sampling CustTracking added'); + // props.set_autoback({'AutoGoToPrev':true}); + notify(ST.Surveyupdatedsuccessfully,'SHORT'); + setProcessing(false); + props.navigation.goBack(); + + },function (txnE,txnerr) { console.log(txnerr);setProcessing(false);notify(ST.Cannotupdatesurvey) },); + + + }); + } catch (err) { + console.log(err); + } + } + + async function validate(){ + + let isValid=true; + if(AddVisibility.length<=0){ + isValid=false; + notify('Please add first','SHORT'); + } + + console.log('isValid:',isValid); + return isValid; + } + + async function validateForm(){ + let Image1MandIndex=KPIFields.findIndex(i=>i.KPIFieldName=='Image1Mandatory'); + let Image1MandObj=Image1MandIndex>=0?KPIFields[Image1MandIndex]:{}; + let isImage1Mand=Image1MandIndex>=0?Image1MandObj['KPIFieldEnable']:true; + + let Image2MandIndex=KPIFields.findIndex(i=>i.KPIFieldName=='Image2Mandatory'); + let Image2MandObj=Image2MandIndex>=0?KPIFields[Image2MandIndex]:{}; + let isImage2Mand=Image2MandIndex>=0?Image2MandObj['KPIFieldEnable']:false; + + let {BrandName,BrandId,QuestionsData}=AddVisFormData; + let allData=QuestionsData || []; + var isvalid=true; + // const QD=QuestionsData; + for(var i=0;ii.QuestionId==qtn.QuestionId); + let QD=qtnDIndex>=0?allData[qtnDIndex]:{}; + // let QD=AddVisFormData + + let selansid='',selanswer='',selimg='',showImageTag=false,showImageTag2=false; + let id_key=qtn.QuestionId+'_AnswerId'; + let ans_key=qtn.QuestionId+'_Answer'; + let multi_key=qtn.QuestionId+'_MultiOption'; + let date_key=qtn.QuestionId+'_Date'; + let img_key=qtn.QuestionId+'_ImagePath1'; + let imgname_key=qtn.QuestionId+'_ImageName1'; + let img_key2=qtn.QuestionId+'_ImagePath2'; + let imgname_key2=qtn.QuestionId+'_ImageName2'; + let rating_key=qtn.QuestionId+'_Rating'; + let voiceClip_key=qtn.QuestionId+'_VoiceClip'; + let list_mcdata=[]; + + let isDisabled=qtn.isDisabled!=null?qtn.isDisabled:false + + if(isDisabled==true){ + + } + else{ + let isImgAllowed=((qtn.QuestionImageAllow==true || qtn.QuestionImageAllow=='true' || qtn.QuestionImageAllow==1)|| (qtn.QuestionType=="Image")); + let checkForAnsKey=(qtn.QuestionType=='Decimal' || qtn.QuestionType=='Number'|| qtn.QuestionType=='Email' || qtn.QuestionType=='Text' || qtn.QuestionType=='Date' || qtn.QuestionType=='Rating') ; + let maxLength = qtn?.MaxLength + let minLength = qtn?.MinLength + console.log("question1111",(QD[ans_key])) + + if(qtn.QuestionType=='Single choice list') + { + selansid=QD[id_key]; + } + else if(qtn.QuestionType=='Multi choice list') + { + selansid=QD[multi_key]!=null && QD[multi_key]!=''?QD[multi_key].split(','):[]; + } + + + if(qtn.QuestionType=='Multi choice list' && selansid.length<=0){ + isvalid=false; + notify(ST.Pleaseselectoptionsfortherequiredfield,'SHORT'); + break; + } + else if( checkForAnsKey && (Object.keys(QD).indexOf(ans_key)<0 || (Object.keys(QD).indexOf(ans_key)>=0 && QD[ans_key]===''))){ + isvalid=false; + let msg=( qtn.QuestionType=='Date'?ST.Pleasepickadate:(qtn.QuestionType=='Rating'?ST.Pleaseselectrating:ST.Pleasefillalldetails)); + notify(msg,'SHORT'); + break; + } + else if( qtn.QuestionType=='Audio' && (Object.keys(QD).indexOf(voiceClip_key)<0 || (Object.keys(QD).indexOf(voiceClip_key)>=0 && (QD[voiceClip_key]==null || QD[voiceClip_key].filename==null || QD[voiceClip_key].filename=='')))){ + isvalid=false; + notify(ST.Pleaserecordaudioclipfortherequiredfield,'SHORT'); + break; + } + else if(Object.keys(QD).indexOf(id_key)<0 || (Object.keys(QD).indexOf(id_key)>=0 && (QD[id_key]===''))){ + isvalid=false; + notify(ST.Pleasefillalldetails,'SHORT'); + console.log(QD[id_key],QD,id_key) + break; + } + else if((Object.keys(QD).indexOf(id_key)<0 || (Object.keys(QD).indexOf(id_key)>=0)) && qtn?.QuestionType ==='Number' && (QD[ans_key]!='') && minLength!=0 && maxLength!=0 && ((QD[ans_key].lengthmaxLength)|| (QD[ans_key].length=0)) && qtn?.QuestionType ==='Email' && (QD[ans_key]!='') && !ValidateEmail((QD[ans_key]))){ + isvalid=false; + notify('Please enter valid '+qtn.Question,'SHORT'); + console.log(QD[id_key],QD,id_key) + break; + } + else{ + console.log('no condition found'); + } + + if((qtn.QuestionType=='Single choice list' || qtn.QuestionType=='Multi choice list' )){ + if (qtn.Answers && qtn.Answers.length>0){ + for(var j=0;j=0)){ + showImageTag=true; + } + + let isandImgAl2=(ansss.ImageAllow2==true || ansss.ImageAllow2=='true' || ansss.ImageAllow2==1); + if(qtn.QuestionType=='Single choice list' && (isandImgAl2 && ansss.AnswerId==selansid)){ + showImageTag2=true; + } + else if(qtn.QuestionType=='Multi choice list' && (isandImgAl2 && selansid.indexOf(ansss.AnswerId)>=0)){ + showImageTag2=true; + } + } + } + } + + if((isImage1Mand=='1' || isImage1Mand==true) && showImageTag && (Object.keys(QD).indexOf(img_key)<0 || (Object.keys(QD).indexOf(img_key)>=0 && QD[img_key]===''))){ + isvalid=false; + notify(ST.Pleaseaddimages,'SHORT'); + break; + } + + if((isImage2Mand=='1' || isImage2Mand==true) && showImageTag2 && (Object.keys(QD).indexOf(img_key2)<0 || (Object.keys(QD).indexOf(img_key2)>=0 && QD[img_key2]===''))){ + isvalid=false; + notify(ST.Pleaseaddimages,'SHORT'); + break; + } + + } + } + + return isvalid; + } + + function render_Picker(label_key,value_key,onChange=()=>{},selected_data={}){ + var data=[]; + let qtn=selected_data.qtn || {}; + let isQtnDisabled=qtn.isDisabled!=null && qtn.isDisabled!=''?qtn.isDisabled:false; + let allAnswers=qtn.Answers || []; + + allAnswers.map((item,index)=>{ + let obj={ key: index, label: item[label_key],value:item[value_key] }; + if(selected_data.value==item[label_key]) + obj['component']= {item[label_key]}; + data.push(obj); + }); + + return ( + {onChange(option,qtn) }} + overlayStyle={customStyle.addVisPickerOverlay} + cancelContainerStyle={customStyle.addVisPicker_OptionContainerStyle} + optionStyle={customStyle.addvis_opStyle} + optionTextStyle={customStyle.addvis_opTextStyle} + optionContainerStyle={customStyle.addVisPicker_OptionContainerStyle} + selectedKey={'1'} + disabled={isQtnDisabled} + cancelText={ST.Cancel} + > + {(selected_data.value!=null && selected_data.value!=''?selected_data.value: '-select-')} + + ) + } + + function renderDatePicker(qtn){ + let qtnn=qtn; + let DateRange=qtn.DateRange; + let maxDate=moment().add(10,'years').format('MM/DD/YYYY'); + let minDate=moment().subtract(10,'years').format('MM/DD/YYYY'); + if(DateRange=='RFD'){ + maxDate=moment().format('MM/DD/YYYY'); + } + else if(DateRange=='RPD'){ + minDate=moment().format('MM/DD/YYYY'); + } + + return ( + {setTextValue(selectedDate,qtnn)}} + maximumDate={new Date(maxDate)} + minimumDate={new Date(minDate)} + /> + ); + } + + function renderItem({ item, drag, isActive }){ + return ( + + + {item.Answer} + + + ); + }; + + function renderRatingView(){ + let qtn=RatingQtn; + let Answers=qtn.Answers; + let id_key=qtn.QuestionId+'_AnswerId'; + let ans_key=qtn.QuestionId+'_Answer'; + let rating_key=qtn.QuestionId+'_Rating'; + // let ratings=QuestionsData[rating_key]!=null?QuestionsData[rating_key].split(','):[]; + + let newarr=RatingOrder; + if(RatingOrder.length<=0){ + newarr=Answers; + } + + return ( + + + {ST.DragItemsInOrder} + {ST.Pressandholdtodrag} + {setRatingValue(data)}} + keyExtractor={(item) => item.AnswerId} + renderItem={renderItem} + /> + + {onRatingCancel()}}> + {ST.Cancel} + + {onRatingSave()}}> + {ST.Save} + + + + + ) + } + + async function Add_AddVis(){ + let isValid=await validateForm(); + console.log('isValid add:',isValid); + if(isValid){ + let arr=AddVisibility; + arr.push(AddVisFormData); + setAddVisibility(arr); + setHasUnsavedChanges(true); + notify('Visibility added successfully','LONG'); + setrerenderdata(!rerenderdata); + + // clear data + setQuestionsData({}) + setAddVisFormData({}); + } + } + + function showRemoveConfirm(item,index){ + setToRemoveId(index); + setToRemoveItem(item); + setshowRemoveConfirm_M(true); + } + + function Remove_AddVis(){ + let index=toRemoveId + let item=toRemoveItem; + let arr=AddVisibility; + console.log('toRemoveId:',index); + if(index>=0 && index + { + { + + let qtn=item; + let selansid='',selanswer='',selimg='',selimg2='',showImageTag=false,showImageTag2=false; + let id_key=qtn.QuestionId+'_AnswerId'; + let ans_key=qtn.QuestionId+'_Answer'; + let multi_key=qtn.QuestionId+'_MultiOption'; + let date_key=qtn.QuestionId+'_Date'; + let img_key=qtn.QuestionId+'_ImagePath1'; + let imgname_key=qtn.QuestionId+'_ImageName1'; + let img_key2=qtn.QuestionId+'_ImagePath2'; + let imgname_key2=qtn.QuestionId+'_ImageName2'; + let rating_key=qtn.QuestionId+'_Rating'; + let voiceClip_key=qtn.QuestionId+'_VoiceClip'; + let list_mcdata=[]; + + let QD=AddVisFormData.QuestionsData || []; + let qtnDIndex=QD.findIndex(i=>i.QuestionId==qtn.QuestionId); + let QuestionsData=qtnDIndex>=0?QD[qtnDIndex]:{}; + + if(qtn.QuestionType=='Single choice list') + { + selansid=QuestionsData[id_key]!=null ?QuestionsData[id_key] :''; + selanswer=QuestionsData[ans_key]!=null ?QuestionsData[ans_key] :''; + } + else if(qtn.QuestionType=='Multi choice list') + { + + if(qtn.Answers!=null){ + // console.log('qtn.Answers:',qtn.Answers.length); + for(var i=0;i0){ + let arr=[]; + for(var i=0;i0){ + for(var i=0;i=0)){ + showImageTag=true; + } + + if(qtn.QuestionType=='Single choice list' && (isandImgAl2 && ansss.AnswerId==selansid)){ + showImageTag2=true; + } + else if(qtn.QuestionType=='Multi choice list' && (isandImgAl2 && selansid.indexOf(ansss.AnswerId)>=0)){ + showImageTag2=true; + } + } + } + } + + if(showImageTag){ + selimg=QuestionsData[img_key]!=null && QuestionsData[img_key]!=''?QuestionsData[img_key]:''; + } + + if(showImageTag2){ + selimg2=QuestionsData[img_key2]!=null && QuestionsData[img_key2]!=''?'file://'+QuestionsData[img_key2]:''; + } + + let isDisabled=qtn.isDisabled!=null?qtn.isDisabled:false + + if(isDisabled==true){ + return ( + + ) + } + else{ + return( + + {qtn.Question} + {qtn.QuestionType=='Single choice list' && qtn.Answers && + render_Picker('Answer','AnswerId',onselectionChange,{value:selanswer,qtn:qtn}) + } + {qtn.QuestionType=='Multi choice list' && qtn.Answers && + {console.log('onSelectedItemsChange',selectedItems);setMultiSelectValue(selectedItems,qtn) }} + selectedItems={selansid} + selectText="Pick Items" + searchInputPlaceholderText="Search Items..." + // onChangeInput={ (text)=> console.log(text)} + tagRemoveIconColor={PageTheme.$primary_color} + tagBorderColor={PageTheme.$primary_color} + tagTextColor={PageTheme.$primary_color} + selectedItemTextColor={PageTheme.$primary_color} + selectedItemIconColor={PageTheme.$primary_color} + tagContainerStyle={{height:30,width:'100%',paddingVertical:5}} + styleTextTag={{fontSize:14}} + itemTextColor={PageTheme.$text_color} + displayKey="Answer" + searchInputStyle={{ color: '#CCC' }} + submitButtonColor={PageTheme.$primary_color} + submitButtonText="Submit" + /> + } + { (qtn.QuestionType=='Number' || qtn.QuestionType=='Decimal' || qtn.QuestionType=='Text' || qtn.QuestionType=='Email') && + {inputRefs.current['input1_'+qtn.QuestionId]=reff;}} + style={[customStyle.surveyQtn_InputStyle]} + placeholder="" + autoComplete='off' + placeholderTextColor={PageTheme.$placeholder_color} + // keyboardType={'ascii-capable'} + returnKeyType={(Platform.OS==='ios')?'done':'next'} + blurOnSubmit={false} + keyboardType={ + qtn.QuestionType === 'Decimal' + ? 'decimal-pad' + : qtn.QuestionType === 'Text' + ? 'default' + : qtn.QuestionType === 'Email' + ? 'email-address' + : 'number-pad' + } + value={selansid} + onSubmitEditing={()=>{focusToNext(qtn,'1')}} + onChangeText={(val) => { + setTextValue( + val, + qtn, + qtn.QuestionType === 'Decimal' + ? 'decimal' + : qtn.QuestionType === 'Text' + ? 'text' + : qtn.QuestionType === 'Email' + ? 'email' + : 'numeric' + ); + }} + /> + } + { + (qtn.QuestionType=='Date') && + + {selansid!=''?selansid:'MM/YYYY'} + {setDateValue(selanswer);showQtnDatePicker(qtn,true)}}> + + + + } + { ((qtn.showDatePicker==true || qtn.showDatePicker=='true') && (qtn.QuestionType=='Date') ) && + renderDatePicker(qtn) + } + { + (qtn.QuestionType=='Rating') && + + {selanswer} + {setRatingQtn(qtn);setShowRating(true);}}> + + + + } + + + { + showImageTag && + + + {openCamera(qtn,'1')}}> + + + + } + + { + showImageTag2 && + + + {openCamera(qtn,'2')}}> + + + + } + + ) + } + + }} + // keyExtractor={item => item.id} + /> + } + + + ); + } + + + return ( + + {processing && } + + + + {ConfirmSaveAlert(props,showAlert,onSaveCancel,saveData)} + {ConfirmSaveAlert(props,showRemoveConfirm_M,()=>{setshowRemoveConfirm_M(false)},Remove_AddVis,'Do you really want to remove this visibility?')} + {setShowCamera(false);getImage(imgData)}} showCamera={showCamera} onHideCamera={()=>{setShowCamera(false);}}/> + + + + + + {"Customer Tracking Question"} + + + + { Object.keys(storeData).length>0 && !processing && SurveyQuestions.length>0 && Object.keys(ActiveSampling).length>0 && + <> + + + + { _renderSurveyQtns()} + + {Add_AddVis()}}> + {ST.Add} + + + + {"Customer Tracking List"} + + { + AddVisibility.length>0 && + AddVisibility.map((item,index)=>{ + let qtn=item; + let QD=item.QuestionsData || []; + + console.log("QDlis:",QD) + return ( + + + + { + SurveyQuestions.length>0 && + SurveyQuestions.map((item,index)=>{ + let qtnDIndex=QD.findIndex(i=>i.QuestionId==item.QuestionId); + let obj=qtnDIndex>=0?QD[qtnDIndex]:{}; + + console.log("checkobjdata:",obj) + let selanswer=''; + let ans_key=item.QuestionId+'_Answer'; + let imgKey=item.QuestionId+'_ImagePath1' + + + console.log("imagekeyy:",imgKey) + console.log("objke:",obj) + console.log("objimgkey:",obj[imgKey]) + + selanswer=obj[ans_key]!=null ?obj[ans_key] :''; + + return ( + <> + + {item.Question+' :'} + {selanswer} + + {console.log("imagekeyfor:",obj[imgKey])} + {(obj[imgKey]!=null && obj[imgKey]!='') && + + {(obj[imgKey]!=null && obj[imgKey]!='') && } + } + + ); + }) + } + + {showRemoveConfirm(item,index)}}> + + + + + ); + }) + } + + + + + + + + } + + { + // getAllFolderImages() + onSubmitData() + }}/> + + + + { showRating==true && + renderRatingView() + } + + + ); + } + + +export default connect(mapStateToProps, mapDispatchToProps)(SamplingCustTrack); \ No newline at end of file diff --git a/PerformicsSrc/src/screens/SamplingInventory.js b/PerformicsSrc/src/screens/SamplingInventory.js new file mode 100644 index 0000000..3427efe --- /dev/null +++ b/PerformicsSrc/src/screens/SamplingInventory.js @@ -0,0 +1,1375 @@ +import React,{useState,useEffect, useRef} from 'react'; +import Container from '../components/container'; +import { useRoute } from '@react-navigation/native'; +import { customStyles,GetPageTheme, STATUSBAR_HEIGHT } from "../styles/Global"; +import {Image,TextInput,View,Text,ScrollView,TouchableOpacity,Platform,FlatList, Alert, Dimensions,Animated, Easing, AppState, Keyboard} from 'react-native'; +import { connect } from 'react-redux'; +import { mapStateToProps,mapDispatchToProps } from '../reducers/contextProvider'; +import {notify} from '../components/notify'; +import moment from 'moment'; +import {getAllFolderImages, getKPIFields, marktext1,marktext2, resizeImage, restore_ImageWithMetaData, validateNumber} from '../controller/functions'; +import {db, common_ImagePath, ImageFolderPath} from '../constants/constants'; +import CustomHeader from '../components/customHeader'; +import {AntDesign, Entypo, FontAwesome, FontAwesome5, Fontisto, MaterialCommunityIcons} from '../components/icons'; +import CustomLoader from '../components/CustomLoader'; +import LinearGradient from 'react-native-linear-gradient'; +import { AppTables } from '../constants/tableConstants'; +import * as RNFS from 'react-native-fs'; +import GradientButton from '../components/gradientButton'; +import { ConfirmSaveAlert } from '../components/alert'; +import ModalSelector from 'react-native-modal-selector'; +import MultiSelect from 'react-native-multiple-select'; +import { PageTheme } from '../styles/Themes'; +import DateTimePicker from '@react-native-community/datetimepicker'; +import DraggableFlatList,{ScaleDecorator} from 'react-native-draggable-flatlist' +import AudioRecorderPlayer, { AudioEncoderAndroidType, AudioSourceAndroidType, AVEncoderAudioQualityIOSType, AVEncodingOption, AVModeIOSOption } from 'react-native-audio-recorder-player'; +import CustomCamera from '../components/Camera'; +import { clear_item, get_item, set_item } from '../components/localStorage'; + +const {height, width} = Dimensions.get('window'); +const topbarht=STATUSBAR_HEIGHT+50; +const actualWindowHt=parseInt((height-topbarht)+10); + + + +function SamplingInventory(props) { + const route = useRoute(); + const ST=props.StaticText || {}; + const audioRecorderPlayer = new AudioRecorderPlayer(); + const AudioSet = { + AudioEncoderAndroid: AudioEncoderAndroidType.AAC, + AudioSourceAndroid: AudioSourceAndroidType.MIC, + AVModeIOS: AVModeIOSOption.measurement, + AVEncoderAudioQualityKeyIOS: AVEncoderAudioQualityIOSType.high, + AVNumberOfChannelsKeyIOS: 2, + AVFormatIDKeyIOS: AVEncodingOption.aac, + }; + // get all theme styles acc to current theme set + const PageTheme=GetPageTheme(props.DarkMode,route.name); + const customStyle=customStyles(props.DarkMode,route.name); + + const [processing, setProcessing] = useState(true); + const [loaderTitle, setLoaderTitle] = useState(); + const [isAdhocScreen, setIsAdhocScreen] = useState(false); + const [showRating, setShowRating] = useState(false); + const [RatingQtn, setRatingQtn] = useState({}); + const [RatingOrder, setRatingOrder] = useState([]); + const [showRecorder, setShowRecorder] = useState(false); + const [VRS, setVRS] = useState({}); + const [RecorderTimer, setRecorderTimer] = useState({}); + const [playerTimer, setPlayerTimer] = useState({}); + const [rerenderView, setRerenderView] = useState(0); + const [hasUnsavedChanges,setHasUnsavedChanges] = useState(false); + const [VoiceRecorderStatus, setVoiceRecorderStatus] = useState(ST.Pressmictostartrecordingvoice); + const [RecFilePath, setRecFilePath] = useState({}); + const [dateValue, setDateValue] = useState(''); + const [openDatePicker, setOpenDatePicker]= useState(0); + const [storeData, setStoreData] = useState({}); + const [ShowCat, setShowCat] = useState(false); + const [ActiveSampling, setActiveSampling]= useState({}); + const [ActiveCategory, setActiveCategory]= useState({}); + const [currentMenu, setCurrentMenu] = useState({}); + const [rerenderdata, setrerenderdata]= useState(0); + const [SurveySubCats, setSurveySubCats]= useState([]); + const [SurveyQuestions, setSurveyQuestions]= useState([]); + const [QuestionsData,setQuestionsData]=useState({}); + const [showAlert, setShowAlert] = useState(false); + const [showCamera, setShowCamera] = useState(false); + const [getImageProps,setGetImageProps]= useState({}); + const [KPIFields, setKPIFields] = useState([]); + const [showSwitchCamera,setShowSwitchCamera]= useState(false); + + const inputRefs = useRef({}); + + const animatedRipple=useRef(new Animated.Value(0)).current; + const animatedRipple2=useRef(new Animated.Value(0.5)).current; + + const hasUnsavedChangesRef = React.useRef(hasUnsavedChanges); + const WindowDataRef=React.useRef(QuestionsData); + const StoreIdRef=React.useRef(null); + const ScreenNameRef=React.useRef({}); + const NavigationRef=React.useRef({}); + + const d1=new Date(); + const d2=moment(d1).format('MM/DD/YYYY'); + + useEffect(() => { + setLoaderTitle(ST.Loading+'...') + let params=props.route.params? props.route.params:{}; + let storeData1=params.storeData || {}; + let SamplingData=params.SamplingData || {}; + let menu1=params.menu || {}; + + let isAdhoc=params.isAdhocScreen || false; + let isBeat=params.isBeat || false; + + setIsAdhocScreen(isAdhoc); + setStoreData(storeData1); + setActiveSampling(SamplingData) + setCurrentMenu(menu1); + + StoreIdRef.current=storeData1.StoreId + ScreenNameRef.current={BgscreenName:menu1.ScreenName,BgMenuId:menu1.MenuId } + let navData={ + 'surveyData':SamplingData, + 'storeData':storeData1, + 'menu':menu1, + 'isAdhocScreen':isAdhoc, + 'isBeat':isBeat, + } + NavigationRef.current=navData + + getData(SamplingData,storeData1,menu1) + + const AppStateSubscription = AppState.addEventListener('change', (pro)=>{ _handleAppStateChange(pro)}); + const unsubscribe=props.navigation.addListener('beforeRemove', onBeforeRemove); + return (()=>{ + audioRecorderPlayer.removePlayBackListener(); + audioRecorderPlayer.removeRecordBackListener(); + AppStateSubscription.remove(); + // AppState.removeEventListener('change', (pro)=>{ _handleAppStateChange(QuestionsData,pro)}); + return unsubscribe; + }); + }, []); + + const _handleAppStateChange = async (nextAppState) => { + if(nextAppState =='background' && hasUnsavedChangesRef.current==true){ + let newData = { + storeBGData:WindowDataRef.current, + menuName:ScreenNameRef.current && ScreenNameRef.current.BgscreenName, + StoreId1:StoreIdRef.current, + NavData:NavigationRef.current, + BgMenuID: ScreenNameRef.current && ScreenNameRef.current.BgMenuId, + visiteDate:d2 + } + let WindowsStr= JSON.stringify(newData) + await set_item('storeData',WindowsStr); + } + } + + useEffect(() => { + const unsubscribe=props.navigation.addListener('beforeRemove', onBeforeRemove); + return unsubscribe; + }, [hasUnsavedChanges]); + + useEffect(() => { + const unsubscribe=props.navigation.addListener('beforeRemove', onBeforeRemove); + return unsubscribe; + }, [showCamera]); + + function onBeforeRemove(e){ + if(showCamera==true){ + e.preventDefault(); + setShowCamera(false); + } + else{ + if (hasUnsavedChanges==true) { + e.preventDefault(); // Prevent default behavior of leaving the screen + onRemoveScreen(e); + } + else{ + return; + } + } + } + + function BgUnsavedChanges(val){ + hasUnsavedChangesRef.current=val + setHasUnsavedChanges(val); + } + + function BgWindowData(val){ + WindowDataRef.current=val + setQuestionsData(val); + } + + + function onRemoveScreen(e){ + Alert.alert( + "", + ST.Doyoureallywanttoexitthescreen, + [ + { + text: ST.Cancel, + onPress: () => {}, + style: "cancel" + }, + { text: ST.OK, onPress: async () => { + // setHasUnsavedChanges(false); + BgUnsavedChanges(false) + await clear_item('storeData') + props.navigation.dispatch(e.data.action);} } + ] + ); + } + + + + async function getData(SamplingData1,storeData1,menu1){ + + let AllKPIFields=await getKPIFields(menu1); + setKPIFields(AllKPIFields); + + // set switch camera flag as defined in mapping menu flag (if exists) + let SwitchingCameraI=AllKPIFields.findIndex(i=>i.KPIFieldName=='SwitchingCamera'); + let SwitchingCameraObj=SwitchingCameraI>=0?AllKPIFields[SwitchingCameraI]:{}; + let SwitchingCamera=SwitchingCameraI>=0?SwitchingCameraObj['KPIFieldEnable']:false; + setShowSwitchCamera(SwitchingCamera); + + let storeBGData1=[],bgStoreJson={}; + let windData = await get_item('storeData') + if(windData!=null && windData!=''){ + let StoreJson = JSON.parse(windData) + let { storeBGData,menuName,StoreId1,BgMenuID,visiteDate }= StoreJson + if(Object.keys(storeBGData).length>0 && menuName == menu1.ScreenName && menu1.MenuId==BgMenuID && StoreId1== storeData1.StoreId && visiteDate==d2){ + storeBGData1=storeBGData; + bgStoreJson=StoreJson + // setQuestionsData(storeBGData); + BgUnsavedChanges(true) + BgWindowData(storeBGData) + } + } + + return new Promise((resolve,reject)=>{ + try { + let {StoreId}=storeData1; + let { InventoryQuestionCategoryId,SamplingDefinitionId }=SamplingData1; + + db.transaction(async function (txn) { + + // get inserted audit + let selectlist=` DISTINCT T.SQMaximumChar as MaxLength,T.SQMinimumChar as MinLength,T.QuestionCategoryId as CategoryId,T.SQLengthValidationRequired as LengthValidation,T.SAShowCamera as QuestionImageAllow,"" as DateRange,T.SQDefaultQuestionEnable as QEnable,T.SamplingQuestionName as Question,T.SamplingQuestionId as QuestionId,T.QuestionType as QuestionType,"" as OTP,T1.ANSWER As Answer, T1.ANSWER_ID as AnswerId,T1.IMAGE_ALLOW1 as ImageAllow1,T1.IMAGE1 as Image1,T1.IMAGE_ALLOW2 as ImageAllow2,T1.IMAGE2 as Image2,T1.MULTI_OPTIONS_IDS as multi_op_ids,T1.IS_DISABLED as isDisabled `; + let join2=` INNER JOIN ${AppTables.SAMPLING_INVENTORY} T1 on T.QuestionCategoryId=T1.CATEGORY_ID And T.SamplingQuestionId=T1.QUESTION_ID `; + let join3=` INNER JOIN Mapping_SamplingQuestion T2 on T.SamplingQuestionId=T2.SamplingQuestionId And T2.SamplingDefinitionId='${SamplingDefinitionId}' ` + let q2=`Select ${selectlist} FROM Master_SamplingQuestion T ${join2} ${join3} WHERE T1.STORE_ID='${StoreId}' AND T1.VISIT_DATE= '${d2}' AND T1.SAMPLING_DEFINITION_ID='${SamplingDefinitionId}' AND T.QuestionCategoryId='${InventoryQuestionCategoryId}' `; + q2+=` ORDER BY T.SamplingQuestionSequence `; + + //load data from master if not inserted + let sl=` DISTINCT T.SQMaximumChar as MaxLength,T.SQMinimumChar as MinLength,T.QuestionCategoryId as CategoryId,T.SQLengthValidationRequired as LengthValidation,T.SAShowCamera as QuestionImageAllow,"" as DateRange,T.SQDefaultQuestionEnable as QEnable,T.SamplingQuestionName as Question,T.SamplingQuestionId as QuestionId,T.QuestionType as QuestionType,"" as OTP`; + let q=`Select ${sl} FROM Master_SamplingQuestion T ${join3} WHERE T.QuestionCategoryId='${InventoryQuestionCategoryId}' `; + q+=` ORDER BY T.SamplingQuestionSequence `; + + await txn.executeSql(q2,[],async function (txn2, txnres) { + console.log('getSurveyData len',txnres.rows.length); + if(txnres.rows.length>0){ + let arr=[]; + var QD=QuestionsData; + for(var i=0;i0){ + for(var k=0;k=0)){ + showImageTag=true; + } + + if(qtn.QuestionType=='Single choice list' && (isandImgAl2 && ansss.AnswerId==selansid)){ + showImageTag2=true; + } + else if(qtn.QuestionType=='List_Multi_Choice' && (isandImgAl2 && selansid.indexOf(ansss.AnswerId)>=0)){ + showImageTag2=true; + } + + } + } + } + + if(showImageTag){ + let imgPath=data.Image1!=''?((Platform.OS=='ios'?'file://':'')+`${ImageFolderPath+menu1.ScreenName}/`+data.Image1):''; + QD[imgname_key]=data.Image1; + QD[img_key]=imgPath; + } + + if(showImageTag2){ + let imgPath=data.Image2!=''?((Platform.OS=='ios'?'file://':'')+`${ImageFolderPath+menu1.ScreenName}/`+data.Image2):''; + QD[imgname_key2]=data.Image2; + QD[img_key2]=imgPath; + } + + if(qtn.QuestionType=='Audio'){ + let voicefile_path=(Platform.OS=='ios'?'file://':'')+`${ImageFolderPath+menu1.ScreenName}/`+'Recordings/'+data.Answer; + QD[voiceClip_key]={'path':voicefile_path,'filename':data.Answer}; + } + + if(qtn.QuestionType=='Date'){ + let dayonly=moment().format('DD'); + let actual_date=data.Answer?data.Answer.split('/'):[]; + let month=actual_date[0],year=actual_date[1]; + let fulldate=month+'/'+dayonly+'/'+year; + QD[date_key]=fulldate; + + } + arr.push(data); + if(i==txnres.rows.length-1){ + + let { storeBGData,menuName,StoreId1,BgMenuID,visiteDate }=bgStoreJson + if(storeBGData!=null && storeBGData!='' && menuName == menu1.ScreenName && StoreId1== StoreId && menu1.MenuId==BgMenuID && visiteDate==d2){ + if(Object.keys(storeBGData).length<=0){ + // setQuestionsData(QD); + BgWindowData(QD) + } + }else{ + // setQuestionsData(QD); + BgWindowData(QD) + } + // setQuestionsData(QD); + console.log("QD--------1",QD) + setSurveyQuestions(arr) + setProcessing(false); + resolve(arr); + } + } + } + else{ + await txn.executeSql(q,[],async function (txn2, txnres2) { + console.log('Surveys:',txnres2.rows.length) + let arr=[]; + if(txnres2.rows.length>0){ + for(var i=0;i{ + db.transaction(async function (txn) { + // get inserted audit + let sl=` DISTINCT T.SamplingAnswerName as Answer,T.SamplingAnswerId as AnswerId,"" as ImageAllow1,"" as ImageAllow2,T.SAQuestionEnable,T.SAQuestionDisable`; + let join3=` INNER JOIN Mapping_SamplingQuestion T2 on T.SamplingQuestionId=T2.SamplingQuestionId ` + let q2=`Select ${sl} FROM Master_SamplingQuestion T ${join3} WHERE T.SamplingQuestionId='${qtn.QuestionId}' AND T.QuestionCategoryId='${qtn.CategoryId}' ORDER BY T.SamplingQuestionSequence `; + + + await txn.executeSql(q2,[],async function (txn2, txnres) { + // console.log('answers len',txnres.rows.length); + if(txnres.rows.length>0){ + let arr=[]; + for(var i=0;i{ + return {'Answers':val,'Success':true}; + }).catch((err)=>{ + console.log(err); + return {'Success':false,'Error':err} + }); + } + + async function getImage(imgdata){ + let qtn=getImageProps.qtn || ''; + let type=getImageProps.type || '1'; + if(typeof imgdata =='object' && imgdata.errorCode=='camera_unavailable'){ + notify(ST.Cameraunavailable); + } + else if(typeof imgdata =='object' && imgdata.uri!=null){ + const img=imgdata; + const imgurl=img.uri, imgWidth=img.width, imgHeight=img.ExtendedHeight; + let isImgFromGallery=img.fromGallery!=null?img.fromGallery:false; + let picture_clickedd=isImgFromGallery==true?img.datetime:new Date(); + + let picture_clicked_time=moment(picture_clickedd).format('MM-DD-YYYY HH:mm:ss') + let picture_clicked_time_for_pic_name=moment(picture_clickedd).format('MMDDYYYY_HHmmss') + + console.log("time", picture_clicked_time); + console.log("time1", picture_clicked_time_for_pic_name); + let calculate_tym_date_for_filename = picture_clicked_time_for_pic_name; + let calculate_tym_date_over_img = picture_clicked_time; + + let filename=storeData.StoreId+'_'+ActiveSampling.SurveyId+'_'+qtn.QuestionId+'_SamplingInventory_'+calculate_tym_date_for_filename+'.jpg'; + + const mark_text1=calculate_tym_date_over_img; + const mark_text2='Store Name:'+storeData.StoreName+' | Store Id:'+storeData.StoreId+' | Question Id :'+qtn.QuestionId+' | Image Type: Sampling Inventory'+' | Date:'+calculate_tym_date_over_img; + + let qd=QuestionsData; + let img_key=type=='1'?qtn.QuestionId+'_ImagePath1':qtn.QuestionId+'_ImagePath2'; + let imgname_key=type=='1'?qtn.QuestionId+'_ImageName1':qtn.QuestionId+'_ImageName2'; + qd[imgname_key]=filename; + + let imagePath=`${ImageFolderPath+currentMenu.ScreenName}/${filename}`; + RNFS.copyFile(imgurl, imagePath) + .then(async(resn) => { + // render data with clicked image + let uri='file://'+imagePath; + console.log('image marker',uri); + qd[img_key]=uri; + + // setQuestionsData(qd); + BgWindowData(qd) + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + + // add metdata then resize image and restored back to the imagePath + let restore_data={"destFilePath":imagePath,"imgurl":imgurl,imgWidth,imgHeight,mark_text1,mark_text2} + let is_restored=await restore_ImageWithMetaData(restore_data,imgdata); + console.log("image restored:",is_restored); + }) + .catch(err => { + console.log('ERROR: image file write failed!!!'); + console.log(err.message, err.code); + }); + } + } + + async function openCamera(qtn,type){ + setGetImageProps({'qtn':qtn,'type':type}); + setShowCamera(true); + // props.navigation.navigate('CameraScreen',{'getImage':getImage,'cameraType':'back'}) + } + + async function disableQtns(sqtns,DQtns,data,isreturn=false){ + console.log('disableQtns'); + if(DQtns.length>0){ + new Promise.all( + DQtns.map((qid,q_index)=>{ + let s_qtnindex=sqtns.findIndex(i=>i.QuestionId==qid) || {}; + console.log('sqtns qid',qid,s_qtnindex) + let s_qtn=s_qtnindex>=0?sqtns[s_qtnindex]:{}; + if(s_qtnindex>=0){ + console.log('sqtns not found',s_qtnindex) + s_qtn['isDisabled']=true + sqtns[s_qtnindex]=s_qtn; + let id_key=s_qtn.QuestionId+'_AnswerId'; + let ans_key=s_qtn.QuestionId+'_Answer'; + data[id_key]=0; + data[ans_key]=''; + } + return false + }) + ).then(async (val)=>{ + setSurveyQuestions(sqtns); + // setQuestionsData(data); + BgWindowData(data) + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + }) + } + } + + async function enableQtns(sqtns,EQtns,DQtns,data){ + console.log('enableQtns'); + new Promise.all( + EQtns.map((qid,q_index)=>{ + let s_qtnindex=sqtns.findIndex(i=>i.QuestionId==qid) || {}; + let s_qtn=s_qtnindex>=0?sqtns[s_qtnindex]:{}; + if(s_qtnindex>=0){ + s_qtn['isDisabled']=false + sqtns[s_qtnindex]=s_qtn; + } + return false + }) + ).then(async (val)=>{ + if(DQtns.length>0){ + disableQtns(sqtns,DQtns,data) + } + else{ + setSurveyQuestions(sqtns); + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + }) + } + + function onselectionChange(option,qtn){ + let data=QuestionsData; + let id_key=qtn.QuestionId+'_AnswerId'; + let ans_key=qtn.QuestionId+'_Answer'; + data[id_key]=option.value; + data[ans_key]=option.label; + + // setQuestionsData(data); + BgWindowData(data) + + let aq_ans=qtn.Answers!=null?qtn.Answers:[]; + let ans_obj=aq_ans.find(i=>i.AnswerId==option.value) || {}; + let EQtns=ans_obj.SAQuestionEnable!=null && ans_obj.SAQuestionEnable!=''?ans_obj.SAQuestionEnable.replace(' ','').split(','):[]; + let DQtns=ans_obj.SAQuestionDisable!=null && ans_obj.SAQuestionDisable!=''?ans_obj.SAQuestionDisable.replace(' ','').split(','):[]; + + console.log('EQtns:',EQtns,DQtns); + let sqtns=SurveyQuestions + if(EQtns.length>0){ + enableQtns(sqtns,EQtns,DQtns,data) + } + else if(DQtns.length>0){ + disableQtns(sqtns,DQtns,data) + } + else{ + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + + + + } + + function setTextValue(value,qtn,type='') { + if(value!=''){ + let isValid=validateNumber(value,type); + if(!isValid){ + return; + } + } + + let id_key=qtn.QuestionId+'_AnswerId'; + let ans_key=qtn.QuestionId+'_Answer'; + + let obj=QuestionsData; + if(qtn.QuestionType=='Date' ){ + let date_key=qtn.QuestionId+'_Date'; + let d=value!=null?new Date(value):new Date(); + let mfdate=moment(d).format('MM/YYYY'); + showQtnDatePicker(qtn,false); + obj[id_key]=0; + obj[ans_key]=mfdate; + obj[date_key]=moment(d).format('MM/DD/YYYY'); + } + else{ + obj[id_key]=0; + obj[ans_key]=value; + } + console.log(value,obj); + // setQuestionsData(obj); + BgWindowData(obj) + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + + function setRatingValue(data){ + // let ids=[]; + // data.map((item,index)=>{ + // ids.push(item.AnswerId); + // }) + setRatingOrder(data); + } + + + async function setMultiSelectValue(selectedItems=[],qtn) { + console.log('setMultiSelectValue',selectedItems); + let id_key=qtn.QuestionId+'_AnswerId'; + let ans_key=qtn.QuestionId+'_Answer'; + let multi_key=qtn.QuestionId+'_MultiOption'; + let obj=QuestionsData; + obj[id_key]=0; + obj[multi_key]=selectedItems.join(','); + let anss=[]; + selectedItems.map((itemValue)=>{ + let ans = qtn.Answers.find(c1 => c1.AnswerId == itemValue); + if(ans.Answer){anss.push(ans.Answer)} + }); + obj[ans_key]=anss.join(','); + console.log('obj:',obj); + // setQuestionsData(obj); + BgWindowData(obj) + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + + + function showQtnDatePicker(qtn,show=false){ + let newqtnIndex=SurveyQuestions.findIndex(q=>q.QuestionId==qtn.QuestionId); + console.log('showQtnDatePicker:',newqtnIndex); + if(newqtnIndex>=0){ + let sq=SurveyQuestions; + let newqtn=sq[newqtnIndex]; + newqtn.showDatePicker=show; + sq[newqtnIndex]=newqtn; + setSurveyQuestions(sq); + if(show==true) setrerenderdata(!rerenderdata); + } + } + + + function setShowQtnKey(qtn,key,show=false){ + if(key!=null && key!=''){ + let newqtnIndex=SurveyQuestions.findIndex(q=>q.QuestionId==qtn.QuestionId); + console.log('setShowQtnKey:',newqtnIndex); + if(newqtnIndex>=0){ + let sq=SurveyQuestions; + let newqtn=sq[newqtnIndex]; + newqtn[key]=show; + sq[newqtnIndex]=newqtn; + setSurveyQuestions(sq); + if(show==true) setrerenderdata(!rerenderdata); + } + } + } + + function onRatingCancel(){ + setShowRating(false); + + } + + function onRatingSave(){ + setShowRating(false); + + let qtn=RatingQtn; + let id_key=qtn.QuestionId+'_AnswerId'; + let ans_key=qtn.QuestionId+'_Answer'; + let rating_key=qtn.QuestionId+'_Rating'; + let ids=[],anss=[]; + RatingOrder.map((item,index)=>{ + ids.push(item.AnswerId); + anss.push(item.Answer); + }) + let obj=QuestionsData; + obj[rating_key]=ids.join(','); + obj[id_key]=0; + obj[ans_key]=anss.join(','); + + console.log(obj); + // setQuestionsData(obj); + BgWindowData(obj) + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + + + + async function focusToNext(qtn,type='1'){ + + let activeKey=''; + let arr=Object.keys(inputRefs.current); + + activeKey='input'+type+'_'+qtn.QuestionId; + + let activeIndex=arr.indexOf(activeKey); + if(activeIndex + Animated.loop( + Animated.sequence([ + Animated.timing(value, { + toValue: maxValue, + duration: 1000, + delay:delay, + useNativeDriver:(Platform.OS=='ios'?false:true), + }), + Animated.timing(value, { + toValue: minValue, + duration: 1000, + delay:delay, + useNativeDriver:(Platform.OS=='ios'?false:true), + }), + ]), + + ).start(); + + + + async function onSubmitData(){ + let isvalid=await validate(); + if(isvalid){ + Keyboard.dismiss(); + setShowAlert(true); + } + } + + function onSaveCancel(){ + setShowAlert(false); + } + + async function saveData(){ + // setHasUnsavedChanges(false); + BgUnsavedChanges(false) + setShowAlert(false); + setLoaderTitle(ST.SavingData+'...'); + setProcessing(true); + try { + let {StoreId,ChainId,StateId,StoreTypeId}=storeData; + await db.transaction(async function (txn) { + + + let { InventoryQuestionCategoryId,SamplingDefinitionId }=ActiveSampling; + let {MenuId}=currentMenu; + // remove old data + let q=`DELETE FROM ${AppTables.SAMPLING_INVENTORY} WHERE STORE_ID='${StoreId}' and SAMPLING_DEFINITION_ID='${SamplingDefinitionId}' and CATEGORY_ID='${InventoryQuestionCategoryId}' and VISIT_DATE='${d2}' `; + await txn.executeSql(q,[],async function (txn2, txnres) { + console.log('survey data deleted'); + },function (txnE,txnerr) { console.log(txnerr); },); + + + var values=''; + + for(var i=0;ii.AnswerId==selansid) + let imgallow1=ans_obj!=null && ans_obj['ImageAllow1']!=null?ans_obj.ImageAllow1:false; + let imgallow2=ans_obj!=null && ans_obj['ImageAllow2']!=null?ans_obj.ImageAllow2:false; + let f_imgalloq1=(QuestionImageAllow=='true' || QuestionImageAllow==1) || (imgallow1=='true' || imgallow1==1) + + values+=` ('${StoreId}','${d2}','${SamplingDefinitionId}','${CategoryId}','${Question}','${QuestionId}','${QuestionType}','${selans}','${selansid}','${f_imgalloq1}','${(imgName1 || '')}','${imgallow2}','${(imgName2 || '')}','${multiops}','${isQtnDisabled}','${d2}') `; + } + + console.log("SAMPLING_INVENTORY value:",values,SamplingDefinitionId) + let add_data=`INSERT INTO ${AppTables.SAMPLING_INVENTORY} (STORE_ID,VISIT_DATE,SAMPLING_DEFINITION_ID,CATEGORY_ID,QUESTION,QUESTION_ID,QUESTION_TYPE,ANSWER,ANSWER_ID,IMAGE_ALLOW1,IMAGE1,IMAGE_ALLOW2,IMAGE2,MULTI_OPTIONS_IDS,IS_DISABLED,ADDED_DATE) VALUES ${values} `; + + await txn.executeSql(add_data,[],async function (txn2, txnres) { + console.log('surveys added'); + // props.set_autoback({'AutoGoToPrev':true}); + notify("Sampling Inventory updated successfully",'SHORT'); + setProcessing(false); + props.navigation.goBack(); + + },function (txnE,txnerr) { console.log(txnerr);setProcessing(false);notify("Cannot update Sampling Inventory") },); + + + }); + } catch (err) { + console.log(err); + } + } + + async function validate(){ + let Image1MandIndex=KPIFields.findIndex(i=>i.KPIFieldName=='Image1Mandatory'); + let Image1MandObj=Image1MandIndex>=0?KPIFields[Image1MandIndex]:{}; + let isImage1Mand=Image1MandIndex>=0?Image1MandObj['KPIFieldEnable']:true; + + let Image2MandIndex=KPIFields.findIndex(i=>i.KPIFieldName=='Image2Mandatory'); + let Image2MandObj=Image2MandIndex>=0?KPIFields[Image2MandIndex]:{}; + let isImage2Mand=Image2MandIndex>=0?Image2MandObj['KPIFieldEnable']:false; + + var isvalid=true; + const QD=QuestionsData; + console.log(SurveyQuestions.length); + for(var i=0;i=0 && QD[ans_key]===''))){ + isvalid=false; + let msg=( qtn.QuestionType=='Date'?ST.Pleasepickadate:(qtn.QuestionType=='Rating'?ST.Pleaseselectrating:ST.Pleasefillalldetails)); + notify(msg,'SHORT'); + break; + } + else if( qtn.QuestionType=='Audio' && (Object.keys(QD).indexOf(voiceClip_key)<0 || (Object.keys(QD).indexOf(voiceClip_key)>=0 && (QD[voiceClip_key]==null || QD[voiceClip_key].filename==null || QD[voiceClip_key].filename=='')))){ + isvalid=false; + notify(ST.Pleaserecordaudioclipfortherequiredfield,'SHORT'); + break; + } + else if(Object.keys(QD).indexOf(id_key)<0 || (Object.keys(QD).indexOf(id_key)>=0 && (QD[id_key]===''))){ + isvalid=false; + notify(ST.Pleasefillalldetails,'SHORT'); + console.log(QD[id_key],QD,id_key) + break; + } + else if(isImgAllowed && (Object.keys(QD).indexOf(img_key)<0 || (Object.keys(QD).indexOf(img_key)>=0 && QD[img_key]===''))){ + isvalid=false; + notify(ST.Pleaseaddimages,'SHORT'); + break; + }else{ + console.log('no condition found'); + } + + if((qtn.QuestionType=='Single choice list' || qtn.QuestionType=='Multi choice list' )){ + if (qtn.Answers && qtn.Answers.length>0){ + for(var j=0;j=0)){ + showImageTag=true; + } + + let isandImgAl2=(ansss.ImageAllow2==true || ansss.ImageAllow2=='true' || ansss.ImageAllow2==1); + if(qtn.QuestionType=='Single choice list' && (isandImgAl2 && ansss.AnswerId==selansid)){ + showImageTag2=true; + } + else if(qtn.QuestionType=='Multi choice list' && (isandImgAl2 && selansid.indexOf(ansss.AnswerId)>=0)){ + showImageTag2=true; + } + } + } + } + + if((isImage1Mand=='1' || isImage1Mand==true) && showImageTag && (Object.keys(QD).indexOf(img_key)<0 || (Object.keys(QD).indexOf(img_key)>=0 && QD[img_key]===''))){ + isvalid=false; + notify(ST.Pleaseaddimages,'SHORT'); + break; + } + + if((isImage2Mand=='1' || isImage2Mand==true) && showImageTag2 && (Object.keys(QD).indexOf(img_key2)<0 || (Object.keys(QD).indexOf(img_key2)>=0 && QD[img_key2]===''))){ + isvalid=false; + notify(ST.Pleaseaddimages,'SHORT'); + break; + } + + } + } + + return isvalid; + } + + function render_Picker(label_key,value_key,onChange=()=>{},selected_data={}){ + var data=[]; + let qtn=selected_data.qtn || {}; + let isQtnDisabled=qtn.isDisabled!=null && qtn.isDisabled!=''?qtn.isDisabled:false; + let allAnswers=qtn.Answers || []; + + allAnswers.map((item,index)=>{ + let obj={ key: index, label: item[label_key],value:item[value_key] }; + if(selected_data.value==item[label_key]) + obj['component']= {item[label_key]}; + data.push(obj); + }); + + return ( + {onChange(option,qtn) }} + overlayStyle={customStyle.addVisPickerOverlay} + cancelContainerStyle={customStyle.addVisPicker_OptionContainerStyle} + optionStyle={customStyle.addvis_opStyle} + optionTextStyle={customStyle.addvis_opTextStyle} + optionContainerStyle={customStyle.addVisPicker_OptionContainerStyle} + selectedKey={'1'} + disabled={isQtnDisabled} + cancelText={ST.Cancel} + > + {(selected_data.value!=null && selected_data.value!=''?selected_data.value: '-select-')} + + ) + } + + function renderDatePicker(qtn){ + let qtnn=qtn; + let DateRange=qtn.DateRange; + let maxDate=moment().add(10,'years').format('MM/DD/YYYY'); + let minDate=moment().subtract(10,'years').format('MM/DD/YYYY'); + if(DateRange=='RFD'){ + maxDate=moment().format('MM/DD/YYYY'); + } + else if(DateRange=='RPD'){ + minDate=moment().format('MM/DD/YYYY'); + } + + return ( + {setTextValue(selectedDate,qtnn)}} + maximumDate={new Date(maxDate)} + minimumDate={new Date(minDate)} + /> + ); + } + + function renderItem({ item, drag, isActive }){ + return ( + + + {item.Answer} + + + ); + }; + + function renderRatingView(){ + let qtn=RatingQtn; + let Answers=qtn.Answers; + let id_key=qtn.QuestionId+'_AnswerId'; + let ans_key=qtn.QuestionId+'_Answer'; + let rating_key=qtn.QuestionId+'_Rating'; + // let ratings=QuestionsData[rating_key]!=null?QuestionsData[rating_key].split(','):[]; + + let newarr=RatingOrder; + if(RatingOrder.length<=0){ + newarr=Answers; + } + + return ( + + + {ST.DragItemsInOrder} + {ST.Pressandholdtodrag} + {setRatingValue(data)}} + keyExtractor={(item) => item.AnswerId} + renderItem={renderItem} + /> + + {onRatingCancel()}}> + {ST.Cancel} + + {onRatingSave()}}> + {ST.Save} + + + + + ) + } + + + + function _renderSurveyQtns(){ + return ( + + { + SurveyQuestions.length>0 && + SurveyQuestions.map((item,index)=>{ + + let qtn=item; + let selansid='',selanswer='',selimg='',selimg2='',showImageTag=false,showImageTag2=false; + let id_key=qtn.QuestionId+'_AnswerId'; + let ans_key=qtn.QuestionId+'_Answer'; + let multi_key=qtn.QuestionId+'_MultiOption'; + let date_key=qtn.QuestionId+'_Date'; + let img_key=qtn.QuestionId+'_ImagePath1'; + let imgname_key=qtn.QuestionId+'_ImageName1'; + let img_key2=qtn.QuestionId+'_ImagePath2'; + let imgname_key2=qtn.QuestionId+'_ImageName2'; + let rating_key=qtn.QuestionId+'_Rating'; + let voiceClip_key=qtn.QuestionId+'_VoiceClip'; + let list_mcdata=[]; + + if(qtn.QuestionType=='Single choice list') + { + selansid=QuestionsData[id_key]!=null ?QuestionsData[id_key] :''; + selanswer=QuestionsData[ans_key]!=null ?QuestionsData[ans_key] :''; + } + else if(qtn.QuestionType=='Multi choice list') + { + + if(qtn.Answers!=null){ + console.log('qtn.Answers:',qtn.Answers.length); + for(var i=0;i0){ + let arr=[]; + for(var i=0;i0){ + for(var i=0;i=0)){ + showImageTag=true; + } + + if(qtn.QuestionType=='Single choice list' && (isandImgAl2 && ansss.AnswerId==selansid)){ + showImageTag2=true; + } + else if(qtn.QuestionType=='Multi choice list' && (isandImgAl2 && selansid.indexOf(ansss.AnswerId)>=0)){ + showImageTag2=true; + } + } + } + } + + if(showImageTag){ + selimg=QuestionsData[img_key]!=null && QuestionsData[img_key]!=''?'file://'+QuestionsData[img_key]:''; + } + + if(showImageTag2){ + selimg2=QuestionsData[img_key2]!=null && QuestionsData[img_key2]!=''?'file://'+QuestionsData[img_key2]:''; + } + + let isDisabled=qtn.isDisabled!=null?qtn.isDisabled:false + console.log('isDisabled',qtn.QuestionId,qtn.isDisabled,isDisabled) + if(isDisabled==true){ + return ( + + ) + } + else{ + return( + + {qtn.Question} + {qtn.QuestionType=='Single choice list' && qtn.Answers && + render_Picker('Answer','AnswerId',onselectionChange,{value:selanswer,qtn:qtn}) + } + {qtn.QuestionType=='Multi choice list' && qtn.Answers && + {console.log('onSelectedItemsChange');setMultiSelectValue(selectedItems,qtn) }} + selectedItems={selansid} + selectText="Pick Items" + searchInputPlaceholderText="Search Items..." + // onChangeInput={ (text)=> console.log(text)} + tagRemoveIconColor={PageTheme.$primary_color} + tagBorderColor={PageTheme.$primary_color} + tagTextColor={PageTheme.$primary_color} + selectedItemTextColor={PageTheme.$primary_color} + selectedItemIconColor={PageTheme.$primary_color} + tagContainerStyle={{height:30,width:'100%',paddingVertical:5}} + styleTextTag={{fontSize:14}} + itemTextColor={PageTheme.$text_color} + displayKey="Answer" + searchInputStyle={{ color: '#CCC' }} + submitButtonColor={PageTheme.$primary_color} + submitButtonText="Submit" + /> + } + { (qtn.QuestionType=='Number' || qtn.QuestionType=='Decimal' || qtn.QuestionType=='Text') && + {inputRefs.current['input1_'+qtn.QuestionId]=reff;}} + style={[customStyle.surveyQtn_InputStyle]} + placeholder="" + autoComplete='off' + placeholderTextColor={PageTheme.$placeholder_color} + // keyboardType={'ascii-capable'} + maxLength={qtn.QuestionType=='Number'?3:null} + returnKeyType={(Platform.OS==='ios')?'done':'next'} + blurOnSubmit={false} + keyboardType={(qtn.QuestionType=='Decimal'?'decimal-pad':(qtn.QuestionType=='Text'?'default':'number-pad'))} + value={selansid} + onSubmitEditing={()=>{focusToNext(qtn,'1')}} + onChangeText={(val)=>{setTextValue(val,qtn,(qtn.QuestionType=='Decimal'?'decimal':(qtn.QuestionType=='Text'?'text':'numeric')))}} + /> + } + { + (qtn.QuestionType=='Date') && + + {selansid!=''?selansid:'MM/YYYY'} + {setDateValue(selanswer);showQtnDatePicker(qtn,true)}}> + + + + } + { ((qtn.showDatePicker==true || qtn.showDatePicker=='true') && (qtn.QuestionType=='Date') ) && + renderDatePicker(qtn) + } + { + (qtn.QuestionType=='Rating') && + + {selanswer} + {setRatingQtn(qtn);setShowRating(true);}}> + + + + } + + + + { + showImageTag && + + + {openCamera(qtn,'1')}}> + + + + } + + { + showImageTag2 && + + + {openCamera(qtn,'2')}}> + + + + } + + ) + } + + }) + } + + + ); + } + + function _renderSurveyView(){ + return ( + + { + let subcat=item,s_index=index; + + return ( + + + {subcat.SubCategory} + + { _renderSurveyQtns(subcat)} + + ) + }} + > + + + + ); + } + + + + return ( + + {processing && } + + {ConfirmSaveAlert(props,showAlert,onSaveCancel,saveData)} + {setShowCamera(false);getImage(imgData)}} showCamera={showCamera} onHideCamera={()=>{setShowCamera(false);}}/> + + + + + + {"Inventory Question"} + + + + { Object.keys(ActiveSampling).length>0 && + <> + + + + { _renderSurveyQtns()} + + + + + + } + + { + // getAllFolderImages() + onSubmitData() + }}/> + + + + { showRating==true && + renderRatingView() + } + + + ); + } + + +export default connect(mapStateToProps, mapDispatchToProps)(SamplingInventory); \ No newline at end of file diff --git a/PerformicsSrc/src/screens/SamplingList.js b/PerformicsSrc/src/screens/SamplingList.js new file mode 100644 index 0000000..182219e --- /dev/null +++ b/PerformicsSrc/src/screens/SamplingList.js @@ -0,0 +1,161 @@ +import React,{useState,useEffect, useRef} from 'react'; +import Container from '../components/container'; +import { useRoute } from '@react-navigation/native'; +import { customStyles,GetPageTheme, STATUSBAR_HEIGHT } from "../styles/Global"; +import {Image,TextInput,View,Text,ScrollView,TouchableOpacity,Platform,FlatList, Alert,Animated} from 'react-native'; +import { connect } from 'react-redux'; +import { mapStateToProps,mapDispatchToProps } from '../reducers/contextProvider'; +import {notify} from '../components/notify'; +import moment from 'moment'; +import {get_item,set_item,clear_item} from '../components/localStorage'; +import {db,} from '../constants/constants'; +import CustomHeader from '../components/customHeader'; +import CustomLoader from '../components/CustomLoader'; +import LinearGradient from 'react-native-linear-gradient'; +import { checkIf_surveyDone } from '../constants/ConstantQueries'; +import { AntDesign } from '../components/icons'; +import { AppTables } from '../constants/tableConstants'; + + +function SamplingList(props) { + const route = useRoute(); + const ST=props.StaticText || {}; + // get all theme styles acc to current theme set + const PageTheme=GetPageTheme(props.DarkMode,route.name); + const customStyle=customStyles(props.DarkMode,route.name); + + const [processing, setProcessing] = useState(true); + const [loaderTitle, setLoaderTitle] = useState(); + const [isAdhocScreen, setIsAdhocScreen] = useState(false); + const [isBeatPlan, setIsBeatPlan] = useState(false); + const [storeData, setStoreData] = useState({}); + const [currentMenu, setCurrentMenu] = useState({}); + const [surveys, setSurveys] = useState([]); + + const d1=new Date(); + const d2=moment(d1).format('MM/DD/YYYY'); + + useEffect(() => { + setLoaderTitle(ST.Loading+'...') + let params=props.route.params? props.route.params:{}; + let storeData1=params.storeData || {}; + let menu1=params.menu || {}; + let isAdhoc=params.isAdhocScreen || false; + let isBeat=params.isBeat!=null? params.isBeat : false; + setIsAdhocScreen(isAdhoc); + setIsBeatPlan(isBeat); + setStoreData(storeData1); + setCurrentMenu(menu1); + getData(storeData1,menu1); + + const willFocusSubscription = props.navigation.addListener('focus', () => { + console.log('onfocus'); + getData(storeData1,menu1); + }); + + return willFocusSubscription; + }, []); + + // useEffect(() => { + // console.log('on AutoGoToPrev change (in list view)',props.AutoGoToPrev); + // if(props.AutoGoToPrev==true){ + // let params=props.route.params? props.route.params:{}; + // let storeData1=params.storeData || {}; + // console.log("survey list currentMenu:",currentMenu) + // getData(storeData1,currentMenu,true); + // } + // }, [props.AutoGoToPrev]); + + + async function getData(storeData1,menu1={},isAutoBack=false){ + try { + let {StoreId,ChainId,StateId,StoreTypeId}=storeData1; + + + await db.transaction(async function (txn) { + + let join=`Left Outer Join ${AppTables.SAMPLING_LIST} l on l.SAMPLING_DEFINITION_ID=T.SamplingDefinitionId and l.STORE_ID='${StoreId}' and l.VISIT_DATE='${d2}' `; + let q2=`SELECT T.*,(CASE WHEN (l.ISFILLED=='1' ) THEN 1 ELSE 0 END) SamplingDone FROM Master_SamplingDefinition T INNER JOIN Mapping_StoreSampling M ON T.SamplingDefinitionId=M.SamplingDefinitionId ${join} WHERE M.StoreId='${StoreId}'`; + // console.log("Sampling list q:2",q2,menu1) + await txn.executeSql(q2,[],async function (txn2, txnres) { + if(txnres.rows.length>0){ + let arr=[],isAllSurveyDone=true; + for(var i=0;i { + props.navigation.goBack(); + }, 1000); + } + } + } + + } + else{ + setProcessing(false); + notify('No Data Found!') + } + },function (txnE,txnerr) { setProcessing(false);console.log(txnerr); },); + + }); + } catch (err) { + console.log(err); + } + } + + + function openSurveyView(item){ + props.set_autoback({'AutoGoToPrev':false}); + props.navigation.navigate('SamplingView',{'SamplingData':item,'storeData':storeData,'menu':currentMenu}); + } + + + return ( + + {processing && } + + + + + { Object.keys(storeData).length>0 && + { + return( + {openSurveyView(item)}}> + + + {item.SamplingDefinitionName.substring(0,1)} + + {item.SamplingDefinitionName} + {(item.isDone!=null && item.isDone==true) && } + + + ); + }} + /> + } + + + + ); +} + + + +export default connect(mapStateToProps, mapDispatchToProps)(SamplingList) \ No newline at end of file diff --git a/PerformicsSrc/src/screens/SamplingView.js b/PerformicsSrc/src/screens/SamplingView.js new file mode 100644 index 0000000..5e12cae --- /dev/null +++ b/PerformicsSrc/src/screens/SamplingView.js @@ -0,0 +1,1509 @@ +import React, { useState, useEffect, useRef } from 'react'; +import Container from '../components/container'; +import { useRoute } from '@react-navigation/native'; +import { globalStyles, customStyles, GetPageTheme } from "../styles/Global"; +import { StatusBar, Image, TextInput, View, Text, ScrollView, TouchableOpacity, Platform, PermissionsAndroid, FlatList, Alert, Animated, Keyboard } from 'react-native'; +import { ReactReduxContext, connect, useSelector, useDispatch } from 'react-redux'; +import { mapStateToProps, mapDispatchToProps } from '../reducers/contextProvider'; +import SQLite from 'react-native-sqlite-2'; +import { notify } from '../components/notify'; +import moment from 'moment'; +import { getDownloadJson, getKPIFields, marktext1, marktext2, resizeImage, restore_ImageWithMetaData, validateNumber } from '../controller/functions'; +import { get_item, set_item, clear_item } from '../components/localStorage'; +import { version, sloganline, appname, testurl, db, colors_Arr, common_ImagePath, ImageFolderPath } from '../constants/constants'; +import CustomHeader from '../components/customHeader'; +import { AntDesign, Entypo, FontAwesome, MaterialCommunityIcons, MaterialIcons } from '../components/icons'; +import CustomLoader from '../components/CustomLoader'; +import LinearGradient from 'react-native-linear-gradient'; +import { AppTables } from '../constants/tableConstants'; +import * as RNFS from 'react-native-fs'; + +import CustomModal from '../components/CustomModal'; +import { ConfirmSaveAlert } from '../components/alert'; +import { CustomPicker, CustomPicker2 } from '../components/CustomPicker'; +import CustomCamera from '../components/Camera'; + +import CameraImg3 from '../assets/performics/camera_tick.svg'; +import CameraImg2 from '../assets/performics/camera_icon.svg'; +import CameraImg5 from '../assets/image/astrickcamera.svg'; +import Camera_icon_grey from '../assets/performics/camera_icon_grey.svg'; + +import SamplingHeaderTab from '../components/SamplingHeaderTab'; +import GradientButton from '../components/gradientButton'; + + +function SamplingView(props) { + const route = useRoute(); + const ST = props.StaticText || {}; + + // get all theme styles acc to current theme set + const PageTheme = GetPageTheme(props.DarkMode, route.name); + const customStyle = customStyles(props.DarkMode, route.name); + // const animatedChoice=useRef(new Animated.Value(0)).current; + + const [processing, setProcessing] = useState(true); + const [loaderTitle, setLoaderTitle] = useState('loading...'); + const [isAdhocScreen, setIsAdhocScreen] = useState(false); + const [isBeatPlan, setIsBeatPlan] = useState(false); + const [isNonMerchan, setIsNonMerchan] = useState(false); + const [isNonProg, setIsNonProg] = useState(false); + + const [storeData, setStoreData] = useState({}); + const [currentMenu, setCurrentMenu] = useState({}); + const [brandData, setBrandData] = useState([]); + const [rerenderdata, setrerenderdata] = useState(0); + const [rerenderAll, setrerenderAll] = useState(false); + const [rerenderdata2, setrerenderdata2] = useState(0); + const [Refresh1, setRefresh1] = useState(0); + + // const [AddVisFormData, setAddVisFormData] = useState({}); + const [AddVisFormData, setAddVisFormData] = useState({}); + + const [removeAllTabsData, setRemoveAllTabsData] = useState(false); + const [isAddVisPresent, setIsAddVisPresent] = useState(0); + const [showAlert, setShowAlert] = useState(false); + const [showSaveAlert, setShowSaveAlert] = useState(false); + const [Companies, setCompanies] = useState([]); + const [SamplingData, setSamplingData] = useState({}); + const [Categories, setCategories] = useState([]); + const [SubCategories, setSubCategories] = useState([]); + const [Brands, setBrands] = useState([]); + const [DisplayList, setDisplayList] = useState([]); + const [hasUnsavedChanges, setHasUnsavedChanges] = useState(false); + const [showCamera, setShowCamera] = useState(false); + const [getImageProps, setGetImageProps] = useState({}); + const [toRemoveId, setToRemoveId] = useState(''); + const [toRemoveItem, setToRemoveItem] = useState({}); + const [showRemoveConfirm_M, setshowRemoveConfirm_M] = useState(false); + const [showRAllC_M, setShowRAllC_M] = useState(false); + const [KPIFields, setKPIFields] = useState([]); + const [showSwitchCamera, setShowSwitchCamera] = useState(false); + + const [showRAllC_MData, setShowRAllC_MData] = useState({}); + + const [SelectedImg, setSelectedImg] = useState(''); + const [showModal, setShowModal] = useState(false); + const [reCapImgModalObj, setReCapImgModalObj] = useState({}); + const [showImageSaveOp, setShowImageSaveOp] = useState(true); + const [ImgMadCount, setImgMadCount] = useState({ img1: 0, img2: 0 }); + const [SamplingTabObj, setSamplingTabObj1] = useState({}); + const [isLunchTime, setIsLunchTime] = useState(false); + const [saveModalDObj, setSaveModalDObj] = useState({}); + const [reasons_list, setReasons_list] = useState([]); + + const [reason, setReason] = useState({}); + + // error field states + const [errorfield, setErrorField] = useState({}); + const [error, setError] = useState(false); + + + const d1 = new Date(); + const d2 = moment(d1).format('MM/DD/YYYY'); + + const animatedChoice = useRef(new Animated.Value(0)).current; + const animatedChoice2 = useRef(new Animated.Value(0)).current; + const SamplingTabObjRef = React.useRef(SamplingTabObj); + const rerenderdata2Ref = React.useRef(rerenderdata2); + + + useEffect(() => { + let params = props.route.params ? props.route.params : {}; + let storeData1 = params.storeData || {}; + let menu1 = params.menu || {}; + + let isAdhoc = params.isAdhoc || false; + let isBeat = params.isBeat != null ? params.isBeat : false; + let isNonMerchan1 = params.isNonMerchans != null ? params.isNonMerchans : false; + let isNonProgam = params.isNonProgs != null ? params.isNonProgs : false; + + let SamplingDataItem = params.SamplingData + + setIsAdhocScreen(isAdhoc); + setIsBeatPlan(isBeat); + setIsNonMerchan(isNonMerchan1); + setIsNonProg(isNonProgam) + + setStoreData(storeData1); + setCurrentMenu(menu1); + + setSamplingData(SamplingDataItem); + + + getData(storeData1, menu1, SamplingDataItem); + + const unsubscribe = props.navigation.addListener('beforeRemove', onBeforeRemove); + const willFocusSubscription = props.navigation.addListener('focus', () => { + console.log("refresh data") + getData(storeData1, menu1, SamplingDataItem); + + }); + + return function cleanup() { + willFocusSubscription(); + return unsubscribe; + }; + }, []); + + + + async function saveDataOnRefresh() { + if (AddVisFormData.SamplingIsPresent == true) { + let AllDataIsFilled = await CheckIfSamlingCompleted(); + console.log("AllDataIsFilled:", AllDataIsFilled); + if (AllDataIsFilled) { + onSubmitData(); + } + } + } + + function SamplingTabObjUpdate(val) { + SamplingTabObjRef.current = val + setSamplingTabObj1(val); + } + + function rerenderdata2Update(val) { + rerenderdata2Ref.current = val + setrerenderdata2(val) + // setSamplingTabObj1(val); + } + + useEffect(() => { + checkFilledData() + }); + + + useEffect(() => { + const unsubscribe = props.navigation.addListener('beforeRemove', onBeforeRemove); + return unsubscribe; + }, [hasUnsavedChanges]); + + useEffect(() => { + const unsubscribe = props.navigation.addListener('beforeRemove', onBeforeRemove); + return unsubscribe; + }, [showCamera]); + + function onBeforeRemove(e) { + if (showCamera == true) { + e.preventDefault(); + setShowCamera(false); + } + else { + if (hasUnsavedChanges == true) { + e.preventDefault(); // Prevent default behavior of leaving the screen + onRemoveScreen(e); + } + else { + return; + } + } + } + + async function checkFilledData() { + if (AddVisFormData.SamplingIsPresent == true || AddVisFormData.SamplingIsPresent == 1) { + let AllDataIsFilled = await CheckIfSamlingCompleted(); + if (AllDataIsFilled == false) { + updateTblSampling(); + } + } + + } + + async function updateTblSampling(e) { + try { + let { StoreId, ChainId, StateId, StoreTypeId } = storeData; + db.transaction(async function (txn) { + let { SamplingDefinitionId } = SamplingData; + let KioskSetupPresent = SamplingData.KioskSetup == '1' || SamplingData.KioskSetup == 'true' || SamplingData.KioskSetup == true ? true : false; + + //remove old data + let q = `DELETE FROM ${AppTables.SAMPLING_LIST} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' and SAMPLING_DEFINITION_ID='${SamplingDefinitionId}'`; + txn.executeSql(q, [], async function (txn2, txnres) { + console.log('sampling data deleted'); + }, function (txnE, txnerr) { console.log(txnerr); }); + + }); + } catch (err) { + console.log(err); + } + } + + + function onRemoveScreen(e) { + Alert.alert( + "", + "Do you really want to exit the screen?", + [ + { + text: "Cancel", + onPress: () => { }, + style: "cancel" + }, + { text: "OK", onPress: () => { setHasUnsavedChanges(false); props.navigation.dispatch(e.data.action); } } + ] + ); + } + + + async function OpenImgModal(imgPath, keyName, ImageLabel) { + setSelectedImg(imgPath) + setShowModal(true); + if ((imgPath != '' && imgPath != null)) { + setShowImageSaveOp(false); + } + else { + setShowImageSaveOp(true); + } + setReCapImgModalObj({ keyName, ImageLabel }) + } + + function cancelImage() { + setSelectedImg(''); + setReCapImgModalObj({}) + setShowModal(false); + } + + + async function getData(storeData1, menu1, SamplingDataItem1) { + setLoaderTitle("Loading..."); + setProcessing(true); + try { + let AllKPIFields = await getKPIFields(menu1); + setKPIFields(AllKPIFields); + + // set switch camera flag as defined in mapping menu flag (if exists) + let SwitchingCameraI = AllKPIFields.findIndex(i => i.KPIFieldName == 'SwitchingCamera'); + let SwitchingCameraObj = SwitchingCameraI >= 0 ? AllKPIFields[SwitchingCameraI] : {}; + let SwitchingCamera = SwitchingCameraI >= 0 ? SwitchingCameraObj['KPIFieldEnable'] : false; + + let isSaleDependIndex = AllKPIFields.findIndex(i => i.KPIFieldName == 'SaleDependOnStock') + let isSaleDependPIObj = isSaleDependIndex >= 0 ? AllKPIFields[isSaleDependIndex] : {}; + let isSaleDependEnable = isSaleDependIndex >= 0 ? isSaleDependPIObj['KPIFieldEnable'] : true; + + setShowSwitchCamera(SwitchingCamera); + + + + let { StoreId, ChainId, StateId, StoreTypeId } = storeData1; + + let InventoryRequired = SamplingDataItem1.InventoryRequired == true || SamplingDataItem1.InventoryRequired == "true" ? 1 : 0; + let CustomerTrackingRequired = SamplingDataItem1.CustomerTrackingRequired == true || SamplingDataItem1.CustomerTrackingRequired == "true" ? 1 : 0; + let CustomerConversionRequired = SamplingDataItem1.CustomerConversionRequired == true || SamplingDataItem1.CustomerConversionRequired == "true" ? 1 : 0; + let LunchTimeRequired = SamplingDataItem1.LunchTimeRequired == true || SamplingDataItem1.LunchTimeRequired == "true" ? 1 : 0; + let SaleRequired = SamplingDataItem1.SaleRequired == true || SamplingDataItem1.SaleRequired == "true" ? 1 : 0; + let StockRequird = SamplingDataItem1.StockRequird == true || SamplingDataItem1.StockRequird == "true" ? 1 : 0; + + await db.transaction(async function (txn) { + let StockAvil = false; + + // get done count for stock // -- add available only if product available + if (StockRequird) { + + let q6 = `Select * FROM ${AppTables.SAMPLING_STOCK_DATA} T WHERE T.SAMPLING_DEFINITION_ID='${SamplingDataItem1.SamplingDefinitionId}'`; + + await txn.executeSql(q6, [], async function (txn2, txnres2) { + let alldata = SamplingTabObjRef.current; + if (txnres2.rows.length > 0) { + console.log("StockAvil------") + StockAvil = true + alldata['StockAvil'] = true; + } else { + StockAvil = false + alldata['StockAvil'] = false; + } + + SamplingTabObjUpdate(alldata) + console.log("alldata---", alldata) + rerenderdata2Update(!rerenderdata2Ref.current) + }, function (txnE, txnerr) { console.log(txnerr); },); + + + let selectlist4 = ` DISTINCT T.SamplingStockValue, count(T.SamplingDefinitionId) as QtnAvlblCount,count(T1.SAMPLING_DEFINITION_ID) as QtnDoneCount`; + let join4 = ` LEFT OUTER JOIN ${AppTables.SAMPLING_STOCK_DATA} T1 on T.SamplingDefinitionId=T1.SAMPLING_DEFINITION_ID And T.SamplingStockValue=T1.SAMPLING_STOCK_VALUE AND T1.STORE_ID='${StoreId}' AND T1.VISIT_DATE='${d2}'`; + let q4 = `Select ${selectlist4} FROM Master_SamplingStockDefinition T ${join4} WHERE T.SamplingDefinitionId='${SamplingDataItem1.SamplingDefinitionId}'`; + + + // let q4=`SELECT count(c.STOCK) as StockQtnCount from ${AppTables.SAMPLING_STOCK_DATA} c where c.SAMPLING_DEFINITION_ID='${SamplingDataItem1.SamplingDefinitionId}' AND c.STORE_ID='${StoreId}' AND c.VISIT_DATE='${d2}' And c.STOCK is not null and c.STOCK!=""`; + + await txn.executeSql(q4, [], async function (txn2, txnres2) { + let alldata = SamplingTabObjRef.current; + if (txnres2.rows.length > 0) { + let checkOut = txnres2.rows.item(0); + alldata["StockIsDone"] = checkOut && checkOut.QtnDoneCount > 0 ? true : false; + alldata["StockIsAvlbl"] = checkOut && checkOut.QtnAvlblCount > 0 ? true : false; + + } else { + alldata["StockIsAvlbl"] = false + } + + SamplingTabObjUpdate(alldata) + rerenderdata2Update(!rerenderdata2Ref.current) + }, function (txnE, txnerr) { console.log(txnerr); },); + } + + let q3 = `Select SamplingReasonId as ReasonId,SamplingReason as Reason From Master_SamplingReason`; + await txn.executeSql(q3, [], async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + let arr = []; + + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + arr.push(data); + if (i == txnres2.rows.length - 1) { + console.log('Master_SamplingReason-----', arr) + setReasons_list(arr); + } + } + } + }, function (txnE, txnerr) { console.log(txnerr); },); + + // get Available and done count for inventory + if (InventoryRequired) { + let selectlist = ` DISTINCT T.QuestionCategoryId, count(T.SamplingQuestionId) as QtnAvlblCount,count(T1.QUESTION_ID) as QtnDoneCount`; + let join2 = ` LEFT OUTER JOIN ${AppTables.SAMPLING_INVENTORY} T1 on T.QuestionCategoryId=T1.CATEGORY_ID And T.SamplingQuestionId=T1.QUESTION_ID AND T1.STORE_ID='${StoreId}' AND T1.VISIT_DATE='${d2}'`; + let join3 = ` INNER JOIN Mapping_SamplingQuestion T2 on T.SamplingQuestionId=T2.SamplingQuestionId ` + let q2 = `Select ${selectlist} FROM Master_SamplingQuestion T ${join2} ${join3} WHERE T.QuestionCategoryId='${SamplingDataItem1.InventoryQuestionCategoryId}' `; + q2 += ` ORDER BY T.SamplingQuestionSequence `; + + await txn.executeSql(q2, [], async function (txn2, txnres2) { + let alldata = SamplingTabObjRef.current; + console.log("Inventory count:", txnres2.rows.length, q2); + if (txnres2.rows.length > 0) { + let data = txnres2.rows.item(0); + console.log("Inventory data:", data, SamplingDataItem1.InventoryQuestionCategoryId); + alldata["inventoryIsDone"] = data && data.QtnDoneCount > 0 ? true : false; + alldata["inventoryIsAvlbl"] = data && data.QtnAvlblCount > 0 ? true : false; + } else { + alldata["inventoryIsAvlbl"] = false; + } + SamplingTabObjUpdate(alldata) + rerenderdata2Update(!rerenderdata2Ref.current); + }, function (txnE, txnerr) { console.log("error 404-", txnerr); },); + } + + // get done count for customer tracking + if (CustomerTrackingRequired) { + + let selectlist = ` DISTINCT T.QuestionCategoryId, count(T.SamplingQuestionId) as QtnAvlblCount,count(T1.QUESTION_ID) as QtnDoneCount`; + let join3 = ` LEFT OUTER JOIN ${AppTables.SAMPLING_CUST_TRACK} T1 on T.QuestionCategoryId=T1.CATEGORY_ID And T.SamplingQuestionId=T1.QUESTION_ID AND T1.STORE_ID='${StoreId}' AND T1.SAMPLING_DEFINITION_ID='${SamplingDataItem1.SamplingDefinitionId}' AND T1.VISIT_DATE='${d2}'`; + let join9 = ` INNER JOIN Mapping_SamplingQuestion T2 on T.SamplingQuestionId=T2.SamplingQuestionId ` + let q3 = `Select ${selectlist} FROM Master_SamplingQuestion T ${join3} ${join9} WHERE T.QuestionCategoryId=='${SamplingDataItem1.CustomerTrackingQuestionCategoryId}' `; + q3 += ` ORDER BY T.SamplingQuestionSequence `; + + // let q3=`Select * from ${AppTables.SAMPLING_CUST_TRACK} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' AND CATEGORY_ID='${SamplingDataItem1.CustomerTrackingQuestionCategoryId}' `; + await txn.executeSql(q3, [], async function (txn2, txnres2) { + let alldata = SamplingTabObjRef.current; + + if (txnres2.rows.length > 0) { + let data1 = txnres2.rows.item(0); + alldata["trackIsAvlbl"] = data1 && data1.QtnAvlblCount > 0 ? true : false; + alldata["trackIsDone"] = data1 && data1.QtnDoneCount > 0 ? true : false; + } else { + alldata["trackIsAvlbl"] = false + } + + SamplingTabObjUpdate(alldata) + rerenderdata2Update(!rerenderdata2Ref.current) + }, function (txnE, txnerr) { console.log(txnerr); },); + } + + // get done count for customer tracking + if (CustomerConversionRequired) { + + let q3 = `Select * from ${AppTables.CONTACT_CONVERSION} WHERE STORE_ID='${StoreId}' and SAMPLING_DEFINITION_ID='${SamplingDataItem1.SamplingDefinitionId}' and VISIT_DATE='${d2}' AND SCREEN_TYPE='SamplingContactConversion' `; + await txn.executeSql(q3, [], async function (txn2, txnres2) { + let alldata = SamplingTabObjRef.current; + if (txnres2.rows.length > 0) { + alldata["ContactIsDone"] = true + } else { + alldata["ContactIsDone"] = false + } + + SamplingTabObjUpdate(alldata) + rerenderdata2Update(!rerenderdata2Ref.current) + }, function (txnE, txnerr) { console.log(txnerr); },); + } + + // get done count for sale // -- add available only if product available + if (SaleRequired) { + let selectlist5 = ` DISTINCT T.SamplingStockValue, count(T.SamplingDefinitionId) as QtnAvlblCount,count(T1.SAMPLING_DEFINITION_ID) as QtnDoneCount`; + let join5 = ` LEFT OUTER JOIN ${AppTables.SAMPLING_SALE_DATA} T1 on T.SamplingDefinitionId=T1.SAMPLING_DEFINITION_ID And T.SamplingStockValue=T1.SAMPLING_STOCK_VALUE AND T1.STORE_ID='${StoreId}' AND T1.VISIT_DATE='${d2}'`; + let q5 = `Select ${selectlist5} FROM Master_SamplingStockDefinition T ${join5} WHERE T.SamplingDefinitionId='${SamplingDataItem1.SamplingDefinitionId}'`; + + await txn.executeSql(q5, [], async function (txn2, txnres2) { + let alldata = SamplingTabObjRef.current; + if (txnres2.rows.length > 0) { + let checkOut = txnres2.rows.item(0); + alldata["SaleIsDone"] = checkOut && checkOut.QtnDoneCount > 0 ? true : false; + alldata["SaleIsAvlbl"] = checkOut && checkOut.QtnAvlblCount > 0 ? true : false; + } else { + alldata['SaleIsAvlbl'] = false; + } + + SamplingTabObjUpdate(alldata) + rerenderdata2Update(!rerenderdata2Ref.current) + }, function (txnE, txnerr) { console.log(txnerr); },); + } + + let sample_q = `SELECT * FROM ${AppTables.SAMPLING_LIST} WHERE STORE_ID='${StoreId}' and SAMPLING_DEFINITION_ID='${SamplingDataItem1.SamplingDefinitionId}' and VISIT_DATE='${d2}' `; + await txn.executeSql(sample_q, [], async function (txn2, txnres2) { + console.log("sampling data len:", txnres2.rows.length); + if (txnres2.rows.length > 0) { + let data1 = txnres2.rows.item(0); + let addvisFormdata = AddVisFormData; + console.log("sampling data:", data1); + + let imagePath = `file://${ImageFolderPath + menu1.ScreenName}/`; + let isSamplingPresent = data1.SAMPLING_PRESENT == 1 ? 1 : 0; + let isReasonId = data1.REASONID != null ? data1.REASONID : 0; + let isReason = data1?.REASON != null ? data1?.REASON : ''; + let isKiosksetupPresent = data1.KIOSKSETUP == 1 ? 1 : 0; + if (isSamplingPresent == 0) { + setReason({ "label": isReason, "value": isReasonId }) + } + + addvisFormdata["SamplingIsPresent"] = isSamplingPresent; + addvisFormdata["ReasonId"] = isReasonId; + addvisFormdata["Reason"] = isReason; + addvisFormdata["KioskIsPresent"] = isKiosksetupPresent; + + Animated.timing(animatedChoice, { + toValue: isSamplingPresent, + duration: 400, + useNativeDriver: false, + }).start(); + + Animated.timing(animatedChoice2, { + toValue: isKiosksetupPresent, + duration: 400, + useNativeDriver: false, + }).start(); + + + // if(data1.START_IMAGE1!=''){ + // let alldata=SamplingTabObj; + // alldata["allTabDisable"]=false + + // SamplingTabObjUpdate(alldata) + // rerenderdata2Update(!rerenderdata2Ref.current) + // } + + addvisFormdata["StartLunchStamp"] = data1.START_LUNCH + addvisFormdata["EndLunchStamp"] = data1.END_LUNCH + + addvisFormdata["StartTimeImage1"] = data1.START_IMAGE1 + addvisFormdata["StartTimeImage2"] = data1.START_IMAGE2 + addvisFormdata["EndTimeImage1"] = data1.END_IMAGE1 + addvisFormdata["EndTimeImage2"] = data1.END_IMAGE2 + + addvisFormdata["StartTimeImage1path"] = data1.START_IMAGE1 != '' ? imagePath + data1.START_IMAGE1 : "" + addvisFormdata["StartTimeImage2path"] = data1.START_IMAGE2 != '' ? imagePath + data1.START_IMAGE2 : "" + addvisFormdata["EndTimeImage1path"] = data1.END_IMAGE1 != "" ? imagePath + data1.END_IMAGE1 : '' + addvisFormdata["EndTimeImage2path"] = data1.END_IMAGE2 != "" ? imagePath + data1.END_IMAGE2 : '' + + addvisFormdata["StartTimeImage1stamp"] = data1.START_IMG_TIME + addvisFormdata["EndTimeImage1stamp"] = data1.END_IMG_TIME + + //Lunch started but not ended yet + if (data1.START_LUNCH != null && data1.START_LUNCH != '' && (data1.END_LUNCH == null || data1.END_LUNCH == '')) { + setIsLunchTime(true); + } + + setAddVisFormData(addvisFormdata); + setrerenderdata(!rerenderdata) + setProcessing(false); + } + else { + setProcessing(false); + } + }, function (txnE, txnerr) { console.log(txnerr); setProcessing(false); },); + + let alldata2 = SamplingTabObjRef.current; + alldata2['isSaleDependEnable'] = isSaleDependEnable; + SamplingTabObjUpdate(alldata2) + rerenderdata2Update(!rerenderdata2Ref.current) + + }); + } catch (err) { + console.log(err); + } + } + + + async function StartLunch() { + let addvisdata = AddVisFormData; + let { StartLunchStamp } = addvisdata; + if (StartLunchStamp == null || StartLunchStamp == '') { + let picture_clicked_STamp = moment(new Date()).format('HH:mm:ss'); + addvisdata["StartLunchStamp"] = picture_clicked_STamp; + // let alldata=SamplingTabObj; + // alldata["allTabDisable"]=true + + // setSamplingTabObj1(alldata) + // SamplingTabObjUpdate(alldata) + + setAddVisFormData(addvisdata); + setIsLunchTime(true); + setHasUnsavedChanges(true); + setrerenderdata(!rerenderdata); + rerenderdata2Update(!rerenderdata2Ref.current); + } else { + notify('You have already started lunch', 'SHORT'); + } + } + + async function EndLunch() { + let addvisdata = AddVisFormData; + let { EndLunchStamp } = addvisdata; + if (EndLunchStamp == null || EndLunchStamp == '') { + let picture_clicked_STamp = moment(new Date()).format('HH:mm:ss'); + addvisdata["EndLunchStamp"] = picture_clicked_STamp + + // let alldata=SamplingTabObj; + // alldata["allTabDisable"]=false + + // setSamplingTabObj1(alldata) + // SamplingTabObjUpdate(alldata) + setAddVisFormData(addvisdata); + setIsLunchTime(false); + setHasUnsavedChanges(true); + setrerenderdata(!rerenderdata); + rerenderdata2Update(!rerenderdata2Ref.current); + } else { + notify('You have already end lunch', 'SHORT'); + } + } + + async function getImage(imgdata) { + let type = getImageProps.type || ''; + let keyName = getImageProps.keyName || ''; + + if (typeof imgdata == 'object' && imgdata.errorCode == 'camera_unavailable') { + notify('Camera unavailable'); + } + else if (typeof imgdata == 'object' && imgdata.uri != null) { + const img = imgdata; + const imgurl = img.uri, imgWidth = img.width, imgHeight = img.ExtendedHeight; + let isImgFromGallery = img.fromGallery != null ? img.fromGallery : false; + let picture_clickedd = isImgFromGallery == true ? img.datetime : new Date(); + + let picture_clicked_time = moment(picture_clickedd).format('MM-DD-YYYY HH:mm:ss') + let picture_clicked_time_for_pic_name = moment(picture_clickedd).format('MMDDYYYY_HHmmss') + + + console.log("time", picture_clicked_time); + console.log("time1", picture_clicked_time_for_pic_name); + let calculate_tym_date_for_filename = picture_clicked_time_for_pic_name; + let calculate_tym_date_over_img = picture_clicked_time; + + let filename = storeData.StoreId + '_' + (props.UserId || '') + '_SamplingImg-' + calculate_tym_date_for_filename + '.jpg'; + + const mark_text1 = calculate_tym_date_over_img; + + const mark_text2 = 'Store Name:' + storeData.StoreName + ' | Store Id:' + storeData.StoreId + ' | User Id:' + storeData.EmpId + ' | SampleDef Id:' + SamplingData.SamplingDefinitionId + ' | Image Type: ' + currentMenu.MenuName + ' | Date:' + calculate_tym_date_over_img; + + let picture_clicked_STamp = moment(picture_clickedd).format('HH:mm:ss'); + + let addvisdata = AddVisFormData; + let image_key = keyName; + let image_path_key = keyName + "path"; + let imgTime = keyName + "stamp" + addvisdata[image_key] = filename; + + let imagePath = `${ImageFolderPath + currentMenu.ScreenName}/${filename}`; + RNFS.copyFile(imgurl, imagePath) + .then(async (resn) => { + // render data with clicked image + let uri = 'file://' + imagePath; + addvisdata[image_path_key] = uri; + addvisdata[imgTime] = picture_clicked_STamp + + setSelectedImg(uri) + setAddVisFormData(addvisdata); + setHasUnsavedChanges(true); + setrerenderdata2(!rerenderdata2); + + // add metdata then resize image and restored back to the imagePath + let restore_data = { "destFilePath": imagePath, "imgurl": imgurl, imgWidth, imgHeight, mark_text1, mark_text2 } + let is_restored = await restore_ImageWithMetaData(restore_data, imgdata); + console.log("image restored:", is_restored); + }) + .catch(err => { + console.log('ERROR: image file write failed!!!'); + console.log(err.message, err.code); + }); + } + } + + function _OpenCaptureImage_Modal(img) { + + const isImageCap = (img != '' || img != null) ? true : false; + let { keyName, ImageLabel } = reCapImgModalObj + return ( + + { + isImageCap && + + + + + + { openCamera(keyName) }}> + + + + {!showImageSaveOp && + { cancelImage() }}> + {ST.Close} + + } + + } + + ) + } + + + async function openCamera(keyName = '') { + // stop user to lock by adding end image if all the fields are not done + let isValid = true; + if (keyName == 'EndTimeImage1') { + isValid = await CheckIfSamlingCompleted(true, false); + } + console.log("openCamera isValid:", isValid, keyName); + if (isValid) { + setGetImageProps({ keyName: keyName }); + setShowCamera(true); + } + } + + async function onSubmitData() { + let isvalid = await validate(); + if (isvalid) { + Keyboard.dismiss(); + setSaveModalDObj({}); + setShowAlert(true); + } + } + + + async function saveData() { + let { screenName, params } = saveModalDObj; + setShowAlert(false); + setShowSaveAlert(false) + setLoaderTitle('Saving Data...'); + setProcessing(true); + try { + let { StoreId, ChainId, StateId, StoreTypeId } = storeData; + await db.transaction(async function (txn) { + let { SamplingDefinitionId } = SamplingData; + let KioskSetupPresent = SamplingData.KioskSetup == '1' || SamplingData.KioskSetup == 'true' || SamplingData.KioskSetup == true ? true : false; + + + //remove old data + let q = `DELETE FROM ${AppTables.SAMPLING_LIST} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' and SAMPLING_DEFINITION_ID='${SamplingDefinitionId}'`; + await txn.executeSql(q, [], async function (txn2, txnres) { + console.log('sampling data deleted'); + }, function (txnE, txnerr) { console.log(txnerr); },); + + //remove All tabs Data + if (removeAllTabsData) { + let q1 = `DELETE FROM ${AppTables.SAMPLING_INVENTORY} WHERE STORE_ID='${storeData.StoreId}' and VISIT_DATE='${d2}' and SAMPLING_DEFINITION_ID='${SamplingDefinitionId}' `; + await txn.executeSql(q1, [], async function (txn2, txnres) { + console.log('SAMPLING_INVENTORY data deleted'); + }, function (txnE, txnerr) { console.log(txnerr); },); + + let q2 = `DELETE FROM ${AppTables.CONTACT_CONVERSION} WHERE STORE_ID='${storeData.StoreId}' and VISIT_DATE='${d2}' and SCREEN_TYPE='SamplingContactConversion' and SAMPLING_DEFINITION_ID='${SamplingDefinitionId}' `; + await txn.executeSql(q2, [], async function (txn2, txnres) { + console.log('SamplingContactConversion data deleted'); + }, function (txnE, txnerr) { console.log(txnerr); },); + + let q3 = `DELETE FROM ${AppTables.SAMPLING_STOCK_DATA} WHERE STORE_ID='${storeData.StoreId}' and VISIT_DATE='${d2}' and SAMPLING_DEFINITION_ID='${SamplingDefinitionId}' `; + await txn.executeSql(q3, [], async function (txn2, txnres) { + console.log('Sampling stock data deleted'); + }, function (txnE, txnerr) { console.log(txnerr); },); + + let q4 = `DELETE FROM ${AppTables.SAMPLING_SALE_DATA} WHERE STORE_ID='${storeData.StoreId}' and VISIT_DATE='${d2}' and SAMPLING_DEFINITION_ID='${SamplingDefinitionId}' `; + await txn.executeSql(q4, [], async function (txn2, txnres) { + console.log('Sampling Sale data deleted'); + }, function (txnE, txnerr) { console.log(txnerr); },); + + let q5 = `DELETE FROM ${AppTables.SAMPLING_CUST_TRACK} WHERE STORE_ID='${storeData.StoreId}' and VISIT_DATE='${d2}' and SAMPLING_DEFINITION_ID='${SamplingDefinitionId}' `; + await txn.executeSql(q5, [], async function (txn2, txnres) { + console.log('Sampling customer tracking data deleted'); + }, function (txnE, txnerr) { console.log(txnerr); },); + } + + + let AllDataIsFilled = await CheckIfSamlingCompleted(); + console.log("AllDataIsFilled:", AllDataIsFilled); + + var values = '', add_data = ''; + let { SamplingIsPresent, KioskIsPresent, StartTimeImage1, StartTimeImage2, EndTimeImage1, EndTimeImage2, StartLunchStamp, EndLunchStamp, StartTimeImage1stamp, EndTimeImage1stamp } = AddVisFormData; + let samplinPres = SamplingIsPresent == 1 || SamplingIsPresent == '1' ? 1 : 0; + let kioskPres = KioskIsPresent == 1 || KioskIsPresent == '1' ? 1 : 0; + + let ReasonId = reason?.value != null ? reason?.value : 0; + let Reason = reason?.label != null ? reason?.label : ''; + + let item = AddVisFormData + let goBackOnSave = false; + if (samplinPres == 1 && ((KioskSetupPresent && kioskPres == 1) || !KioskSetupPresent)) { + //STORE_ID,VISIT_DATE,SAMPLING_PRESENT, KIOSKSETUP,SAMPLING_DEFINITION_ID,START_IMAGE1,START_IMAGE2,END_IMAGE1,END_IMAGE2,START_LUNCH,END_LUNCH,START_IMG_TIME,END_IMG_TIME,ISFILLED,ADDED_DATE + values += ` ('${StoreId}','${d2}','${samplinPres}','${kioskPres}','${SamplingDefinitionId}','${StartTimeImage1 || ''}','${StartTimeImage2 || ''}','${EndTimeImage1 || ''}','${EndTimeImage2 || ''}','${StartLunchStamp || ''}','${EndLunchStamp || ''}','${StartTimeImage1stamp || ''}','${EndTimeImage1stamp || ''}','${AllDataIsFilled ? 1 : 0}','${d2}','${ReasonId}','${Reason}') `; + goBackOnSave = AllDataIsFilled; + } + else { + values += ` ('${StoreId}','${d2}','${samplinPres}','${kioskPres}','${SamplingDefinitionId}','','','','','','','','','1','${d2}','${ReasonId}','${Reason}') `; + goBackOnSave = true; + } + + console.log('sampling data to save:', values); + // if(DataExist==true){ + // add_data=`UPDATE ${AppTables.SAMPLING_LIST} SET SAMPLING_PRESENT='${samplinPres}',KIOSKSETUP='${kioskPres}',START_IMAGE1='${StartTimeImage1||""}',START_IMAGE2='${StartTimeImage2||""}',END_IMAGE1='${EndTimeImage1||""}',END_IMAGE2='${EndTimeImage2||""}',START_LUNCH='${StartLunchStamp||""}',END_LUNCH='${EndLunchStamp||""}',START_IMG_TIME='${StartTimeImage1stamp||""}',END_IMG_TIME='${EndTimeImage1stamp||""}', ISFILLED='${AllDataIsFilled?1:0}' WHERE STORE_ID='${StoreId}' and SAMPLING_DEFINITION_ID='${SamplingData.SamplingDefinitionId}' and VISIT_DATE='${d2}' `; + // }else{ + add_data = `INSERT INTO ${AppTables.SAMPLING_LIST} (STORE_ID,VISIT_DATE,SAMPLING_PRESENT, KIOSKSETUP,SAMPLING_DEFINITION_ID,START_IMAGE1,START_IMAGE2,END_IMAGE1,END_IMAGE2,START_LUNCH,END_LUNCH,START_IMG_TIME,END_IMG_TIME,ISFILLED,ADDED_DATE,REASONID,REASON) VALUES ${values} `; + // } + + + await txn.executeSql(add_data, [], async function (txn2, txnres) { + console.log('sampling added'); + notify('Sampling added successfully', 'SHORT'); + setProcessing(false); + setHasUnsavedChanges(false); + // clear store data in local storage to avoiding re-set data for the store + clear_item('storeData') + if (goBackOnSave) { + props.navigation.goBack(); + } + if (Object.keys(saveModalDObj).length > 0 && screenName != null && screenName != '') { + props.navigation.navigate(screenName, params); + } + }, function (txnE, txnerr) { console.log(txnerr); setProcessing(false); notify('Cannot add sampling data') },); + + + }); + } catch (err) { + console.log(err); + } + } + + // useEffect(()=>{ + // validateDis() + // },[Refresh1]) + + // async function validateDis(){ + + // let isValid=false; + // let alldata=SamplingTabObj; + + // // if(AddVisFormData && (AddVisFormData.SamplingIsPresent==1) && (AddVisFormData.KioskIsPresent==1)){ + // // console.log("testvalidate----------1",AddVisFormData) + + // // || ( (SamplingData.StartTimeImage2==true || SamplingData.StartTimeImage2=="true" ) && (!AddVisFormData.hasOwnProperty('StartTimeImage2path') || AddVisFormData.StartTimeImage2path=='' || AddVisFormData.StartTimeImage2path==null)) + + // if( (Object.keys(AddVisFormData).length == 0) || (AddVisFormData && ( ( (SamplingData.StartTimeImage1==true || SamplingData.StartTimeImage1=="true" ) && (!AddVisFormData.hasOwnProperty('StartTimeImage1path') || AddVisFormData.StartTimeImage1path=='' || AddVisFormData.StartTimeImage1path==null) )))){ + // isValid=true; + // }else if( AddVisFormData && ( (AddVisFormData.StartLunchStamp!= undefined && AddVisFormData.StartLunchStamp!='' && AddVisFormData.StartLunchStamp!=null ) && (AddVisFormData.EndLunchStamp== undefined || AddVisFormData.EndLunchStamp=='' || AddVisFormData.EndLunchStamp==null) )){ + // isValid=true; + // console.log("allTabDisable isValid--start-",isValid,AddVisFormData.StartLunchStamp , (AddVisFormData.StartLunchStamp!= undefined || AddVisFormData.StartLunchStamp!='' || AddVisFormData.StartLunchStamp!=null ),"&&",(AddVisFormData.EndLunchStamp== undefined || AddVisFormData.EndLunchStamp=='' || AddVisFormData.EndLunchStamp==null)) + // // notify('Please capture end time image','SHORT'); + // } + // // } + + // alldata["allTabDisable"]=isValid + // console.log("allTabDisable isValid---4",alldata,AddVisFormData) + // SamplingTabObjUpdate(alldata) + // rerenderdata2Update(!rerenderdata2Ref.current); + // } + + + async function validate() { + let isValid = true; + let KioskSetupPresent = SamplingData.KioskSetup == '1' || SamplingData.KioskSetup == 'true' || SamplingData.KioskSetup == true ? true : false; + let StartTimeImage1 = SamplingData.StartTimeImage1 == '1' || SamplingData.StartTimeImage1 == 'true' || SamplingData.StartTimeImage1 == true ? true : false; + let StartTimeImage2 = SamplingData.StartTimeImage2 == '1' || SamplingData.StartTimeImage2 == 'true' || SamplingData.StartTimeImage2 == true ? true : false; + + let { SamplingIsPresent, KioskIsPresent, StartTimeImage1path, StartTimeImage2path, EndTimeImage1path, EndTimeImage2path, StartLunchStamp, EndLunchStamp } = AddVisFormData; + SamplingIsPresent = SamplingIsPresent == 1 || SamplingIsPresent == '1' ? 1 : 0; + KioskIsPresent = KioskIsPresent == 1 || KioskIsPresent == '1' ? 1 : 0; + + if (SamplingIsPresent && ((KioskSetupPresent && KioskIsPresent == 1) || !KioskSetupPresent)) { + if (StartTimeImage1 && (StartTimeImage1path == null || StartTimeImage1path == '')) { + isValid = false; + notify('Please capture start time image', 'SHORT'); + } + } else if (SamplingIsPresent == 0 && (reason?.label == "" || reason?.label == null)) { + isValid = false; + notify('Please select reason', 'SHORT'); + } + + return isValid; + } + + async function CheckIfSamlingCompleted(showNotif = false, EndImageValid = true) { + + let isValid = true; + + let KioskSetupPresent = SamplingData.KioskSetup == '1' || SamplingData.KioskSetup == 'true' || SamplingData.KioskSetup == true ? true : false; + let StartTimeImage1 = SamplingData.StartTimeImage1 == '1' || SamplingData.StartTimeImage1 == 'true' || SamplingData.StartTimeImage1 == true ? true : false; + let StartTimeImage2 = SamplingData.StartTimeImage2 == '1' || SamplingData.StartTimeImage2 == 'true' || SamplingData.StartTimeImage2 == true ? true : false; + let EndTimeImage1 = SamplingData.EndTimeImage1 == '1' || SamplingData.EndTimeImage1 == 'true' || SamplingData.EndTimeImage1 == true ? true : false; + let EndTimeImage2 = SamplingData.EndTimeImage2 == '1' || SamplingData.EndTimeImage2 == 'true' || SamplingData.EndTimeImage2 == true ? true : false; + let InventoryRequired = SamplingData.InventoryRequired == true || SamplingData.InventoryRequired == "true" ? 1 : 0; + let CustomerTrackingRequired = SamplingData.CustomerTrackingRequired == true || SamplingData.CustomerTrackingRequired == "true" ? 1 : 0; + let CustomerConversionRequired = SamplingData.CustomerConversionRequired == true || SamplingData.CustomerConversionRequired == "true" ? 1 : 0; + let LunchTimeRequired = SamplingData.LunchTimeRequired == true || SamplingData.LunchTimeRequired == "true" ? 1 : 0; + let SaleRequired = SamplingData.SaleRequired == true || SamplingData.SaleRequired == "true" ? 1 : 0; + let StockRequird = SamplingData.StockRequird == true || SamplingData.StockRequird == "true" ? 1 : 0; + let StartTimeImageLabel = SamplingData.StartTimeImageLabel != null ? SamplingData.StartTimeImageLabel : "Start Time Image"; + let EndTimeImageLabel = SamplingData.EndTimeImageLabel != null ? SamplingData.EndTimeImageLabel : "End Time Image"; + + + let { SamplingIsPresent, KioskIsPresent, StartTimeImage1path, StartTimeImage2path, EndTimeImage1path, EndTimeImage2path, StartLunchStamp, EndLunchStamp } = AddVisFormData; + SamplingIsPresent = SamplingIsPresent == 1 || SamplingIsPresent == '1' ? 1 : 0; + KioskIsPresent = KioskIsPresent == 1 || KioskIsPresent == '1' ? 1 : 0; + + let { inventoryIsDone, inventoryIsAvlbl, trackIsDone, trackIsAvlbl, ContactIsDone, StockIsDone, StockIsAvlbl, SaleIsDone, SaleIsAvlbl } = SamplingTabObj + + if (SamplingIsPresent && ((KioskSetupPresent && KioskIsPresent == 1) || !KioskSetupPresent)) { + console.log("CustomerTrackingRequired ", CustomerTrackingRequired, trackIsAvlbl, trackIsDone) + + if (StartTimeImage1 && (StartTimeImage1path == null || StartTimeImage1path == '')) { + isValid = false; + showNotif ? notify("Please click " + StartTimeImageLabel) : ''; + } else if (EndImageValid && EndTimeImage1 && (EndTimeImage1path == null || EndTimeImage1path == '')) { + isValid = false; + showNotif ? notify("Please click " + EndTimeImageLabel) : ''; + } else if (InventoryRequired && inventoryIsAvlbl && (inventoryIsDone == null || inventoryIsDone == '' || inventoryIsDone == false)) { + isValid = false; + showNotif ? notify("Please fill data for Inventory") : ''; + } else if (CustomerTrackingRequired && trackIsAvlbl && (trackIsDone == null || trackIsDone == '' || trackIsDone == false)) { + isValid = false; + showNotif ? notify("Please fill data for Customer Tracking") : ''; + } else if (CustomerConversionRequired && (ContactIsDone == null || ContactIsDone == '' || ContactIsDone == false)) { + isValid = false; + showNotif ? notify("Please fill data for Contact Conversion") : ''; + } else if (SaleRequired && SaleIsAvlbl && (SaleIsDone == null || SaleIsDone == '' || SaleIsDone == false)) { + isValid = false; + showNotif ? notify("Please fill data for Sale") : ''; + } else if (StockRequird && StockIsAvlbl && (StockIsDone == null || StockIsDone == '' || StockIsDone == false)) { + isValid = false; + showNotif ? notify("Please fill data for Stock") : ''; + } else if (LunchTimeRequired && (StartLunchStamp == null || StartLunchStamp == '')) { + isValid = false; + showNotif ? notify("Please add Lunch Start Timing") : ''; + } + else if (LunchTimeRequired && (EndLunchStamp == null || EndLunchStamp == '')) { + isValid = false; + showNotif ? notify("Please add Lunch End Timing") : ''; + } + } + return isValid; + } + + async function validateForm() { + let isValid = true; + let { Company, CompanyId, CategoryName, CategoryId, SubCategoryName, SubCategoryId, BrandName, BrandId, DisplayName, DisplayId, Remark, Image1, Image1Path } = AddVisFormData; + + if ((Company == '' || Company == null) || (CompanyId == '' || CompanyId == null)) { + isValid = false; + notify('Please select company', 'SHORT'); + } + else if ((CategoryName == '' || CategoryName == null) || (CategoryId == '' || CategoryId == null)) { + isValid = false; + notify('Please select category', 'SHORT'); + } + else if ((SubCategoryName == '' || SubCategoryName == null) || (SubCategoryId == '' || SubCategoryId == null)) { + isValid = false; + notify('Please select sub category', 'SHORT'); + } + else if ((BrandName == '' || BrandName == null) || (BrandId == '' || BrandId == null)) { + isValid = false; + notify('Please select brand', 'SHORT'); + } + else if ((DisplayName == '' || DisplayName == null) || (DisplayId == '' || DisplayId == null)) { + isValid = false; + notify('Please select display type', 'SHORT'); + } + else if ((Remark == '' || Remark == null)) { + isValid = false; + notify('Please enter remark', 'SHORT'); + } + else if ((Image1 == '' || Image1 == null)) { + isValid = false; + notify('Please click image', 'SHORT'); + } + + + + return isValid; + } + + function onFormDataChange(val, key, type = '') { + if (val != '') { + let isValid = validateNumber(val, type); + if (!isValid) { + return; + } + } + + let data = AddVisFormData; + data[key] = val; + setAddVisFormData(data); + setHasUnsavedChanges(true); + setrerenderdata(!rerenderdata); + } + + function onselectionChange(option, keyLbl, keyVal, otherData) { + let CompanyId = otherData.CompanyId != null ? otherData.CompanyId : ''; + let data = AddVisFormData; + data[keyVal] = option.value; + data[keyLbl] = option.label; + setAddVisFormData(data); + setHasUnsavedChanges(true); + if (keyLbl == 'Company') { + loadData(option.value, 'Categories'); + + data['CategoryId'] = ''; + data['CategoryName'] = ''; + data['SubCategoryId'] = ''; + data['SubCategoryName'] = ''; + data['BrandId'] = ''; + data['BrandName'] = ''; + } + else if (keyLbl == 'CategoryName') { + + loadData(option.value, 'SubCategories', CompanyId); + + data['SubCategoryId'] = ''; + data['SubCategoryName'] = ''; + data['BrandId'] = ''; + data['BrandName'] = ''; + } + else if (keyLbl == 'SubCategoryName') { + loadData(option.value, 'Brands', CompanyId); + + data['BrandId'] = ''; + data['BrandName'] = ''; + } + setrerenderdata(!rerenderdata); + + + } + + async function loadData(qId, type, CompanyId) { + try { + await db.transaction(async function (txn) { + let q = ''; + if (type == 'Categories') q = `select distinct CategoryId,CategoryName from Master_Competitor where (CompanyId ='${qId}' or CompanyId = ${qId})`; + else if (type == 'SubCategories') q = `Select Distinct p.SubCategoryId,p.SubCategoryName from Product_Master p where p.CategoryId='${qId}' and (CompanyId ='${CompanyId}' or CompanyId = ${CompanyId}) order by p.SubCategorySequence`; + else if (type == 'Brands') q = `Select Distinct p.BrandName,p.BrandId from Product_Master p Where (p.SubCategoryId='${qId}' or p.SubCategoryId= ${qId}) and (CompanyId ='${CompanyId}' or CompanyId = ${CompanyId}) order by p.BrandSequence`; + + await txn.executeSql(q, [], async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + let arr = []; + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + arr.push(data); + if (i == txnres2.rows.length - 1) { + if (type == 'Categories') setCategories(arr); + else if (type == 'SubCategories') setSubCategories(arr); + else if (type == 'Brands') setBrands(arr); + } + } + } + }, function (txnE, txnerr) { console.log(txnerr); },); + + }); + } catch (err) { + console.log(err); + } + } + + + function onChoiceSelect(val, key, animatedChoice, type) { + console.log("reason?.la------", Boolean(reason?.label), reason) + if (val == 0 || (Boolean(reason?.label))) { + setShowRAllC_MData({ val, key, animatedChoice, type }) + setShowRAllC_M(true) + } else { + var val1 = val == 1 ? 1 : 0; + let data = AddVisFormData; + data[key] = val; + if (animatedChoice != null) { + Animated.timing(animatedChoice, { + toValue: val1, + duration: 400, + useNativeDriver: false, + }).start(); + } + setAddVisFormData(data); + setrerenderdata(!rerenderdata) + } + + setHasUnsavedChanges(true); + } + + async function onConfirmRemoveAll() { + + + let data1 = AddVisFormData; + + console.log("showRAllC_MData.key----", showRAllC_MData.key == "SamplingIsPresent", showRAllC_MData) + if (showRAllC_MData.key == "SamplingIsPresent") { + // data1["SamplingIsPresent"]=0; + data1["SamplingIsPresent"] = showRAllC_MData?.val || 0; + data1["KioskIsPresent"] = 0; + setReason({}) + if (animatedChoice != null) { + Animated.timing(animatedChoice, { + toValue: showRAllC_MData?.val || 0, + // toValue: 0, + duration: 400, + useNativeDriver: false, + }).start(); + } + + if (animatedChoice2 != null) { + Animated.timing(animatedChoice2, { + toValue: 0, + duration: 400, + useNativeDriver: false, + }).start(); + } + + } else { + if (animatedChoice2 != null) { + Animated.timing(animatedChoice2, { + toValue: 0, + duration: 400, + useNativeDriver: false, + }).start(); + } + data1["KioskIsPresent"] = 0; + } + + setRemoveAllTabsData(true); + setAddVisFormData(data1) + setHasUnsavedChanges(true); + // getData(storeData,currentMenu,SamplingData,"reload"); + // setAddVisFormData({}); + setrerenderdata(!rerenderdata) + setShowRAllC_M(false); + } + + + + function onSaveCancel() { + setShowAlert(false); + setShowSaveAlert(false); + } + + async function Add_AddVis() { + let isValid = await validateForm(); + console.log('isValid add:', isValid); + if (isValid) { + let arr = AddVisFormData; + let { Company, CompanyId, CategoryName, CategoryId, SubCategoryName, SubCategoryId, BrandName, BrandId, DisplayName, DisplayId, Remark, Image1, Image1Path } = AddVisFormData; + + let index = AddVisFormData.findIndex(i => i.CompanyId == CompanyId && i.CategoryId == CategoryId && i.SubCategoryId == SubCategoryId && i.BrandId == BrandId && i.DisplayId == DisplayId); + if (index >= 0) { + notify('This visibility has already been added', 'LONG'); + } + else { + arr.push(AddVisFormData); + setAddVisFormData(arr); + setHasUnsavedChanges(true); + notify('Visibility added successfully', 'LONG'); + setrerenderdata(!rerenderdata); + + // clear data + setAddVisFormData({}); + } + } + + } + + function showRemoveConfirm(item, index) { + setToRemoveId(index); + setToRemoveItem(item); + setshowRemoveConfirm_M(true); + } + + async function Remove_AddVis() { + + let index = toRemoveId + let item = toRemoveItem; + let arr = AddVisFormData; + + if (index >= 0 && index < arr.length) { + arr.splice(index, 1); + setAddVisFormData(arr); + setHasUnsavedChanges(true); + notify('Sampling removed successfully', 'LONG') + setrerenderdata(!rerenderdata); + } + else { + notify('Cannot remove! Sampling not found', 'LONG') + } + setReason({}); + setToRemoveId(''); + setToRemoveItem({}); + setshowRemoveConfirm_M(false); + } + + function onselectionChange3(option, keyLbl, keyVal, otherData) { + let item = otherData.window; + let index = otherData.index; + setReason(option) + console.log("option------", option) + // let allData=WindowData; + // let wind = item; + // wind[keyVal]=option.value; + // wind[keyLbl]=option.label; + + // let objIndex = InputChange.findIndex(i=>i.WindowId==item.WindowId); + // let winArr=[...InputChange] + // winArr[objIndex].Flag=true + // setInputChange(winArr); + + + // index>=0?allData[index]=wind:''; + // console.log('windowallData',allData) + + // setWindowData(allData); + // setHasUnsavedChanges(true); + // setrerenderdata(!rerenderdata); + + } + + + + + const _render_addVisFormTop = () => { + let StartTimeImageLabel = SamplingData.StartTimeImageLabel != null ? SamplingData.StartTimeImageLabel : "Start Time"; + let EndTimeImageLabel = SamplingData.EndTimeImageLabel != null ? SamplingData.EndTimeImageLabel : "End Time"; + let SamplingPresentLabel = (SamplingData && SamplingData.SamplingPresentLabel) || "" + let KioskSetupLabel = (SamplingData && SamplingData.KioskSetupLabel) || "" + // let SamplingPresent=SamplingData && SamplingData.SamplingPresent!=null? SamplingData.SamplingPresent : false; + let KioskSetupPresent = SamplingData.KioskSetup == '1' || SamplingData.KioskSetup == 'true' || SamplingData.KioskSetup == true ? true : false; + let StartTimeImage1 = SamplingData.StartTimeImage1 == '1' || SamplingData.StartTimeImage1 == 'true' || SamplingData.StartTimeImage1 == true ? true : false; + let StartTimeImage2 = SamplingData.StartTimeImage2 == '1' || SamplingData.StartTimeImage2 == 'true' || SamplingData.StartTimeImage2 == true ? true : false; + let EndTimeImage1 = SamplingData.EndTimeImage1 == '1' || SamplingData.EndTimeImage1 == 'true' || SamplingData.EndTimeImage1 == true ? true : false; + let EndTimeImage2 = SamplingData.EndTimeImage2 == '1' || SamplingData.EndTimeImage2 == 'true' || SamplingData.EndTimeImage2 == true ? true : false; + + + // let InventoryRequired=SamplingData.InventoryRequired==true || SamplingData.InventoryRequired=="true"?1:0; + // let CustomerTrackingRequired=SamplingData.CustomerTrackingRequired==true || SamplingData.CustomerTrackingRequired=="true"?1:0; + // let CustomerConversionRequired=SamplingData.CustomerConversionRequired==true || SamplingData.CustomerConversionRequired=="true"?1:0; + let LunchTimeRequired = SamplingData.LunchTimeRequired == true || SamplingData.LunchTimeRequired == "true" ? 1 : 0; + // let SaleRequired=SamplingData.SaleRequired==true || SamplingData.SaleRequired=="true"?1:0; + // let StockRequird=SamplingData.StockRequird==true || SamplingData.StockRequird=="true"?1:0; + + + let { SamplingIsPresent, KioskIsPresent, StartTimeImage1path, StartTimeImage2path, EndTimeImage1path, EndTimeImage2path, StartLunchStamp, EndLunchStamp } = AddVisFormData; + SamplingIsPresent = SamplingIsPresent == 1 || SamplingIsPresent == '1' ? 1 : 0; + KioskIsPresent = KioskIsPresent == 1 || KioskIsPresent == '1' ? 1 : 0; + + + let isEndImgCaptured = (EndTimeImage1path != null && EndTimeImage1path != '') ? true : false; + let isStartImgCaptured = StartTimeImage1 ? ((StartTimeImage1path != null && StartTimeImage1path != '') ? true : false) : true; + // let tabdisable= (SamplingTabObj && SamplingTabObj.allTabDisable==true ); + // let lunchStarted=AddVisFormData && SamplingTabObj && SamplingTabObj.allTabDisable==false && ( AddVisFormData.StartLunchStamp!='' && AddVisFormData.StartLunchStamp!=null) + // let EnableEndLunch= (AddVisFormData.EndLunchStamp!='' && AddVisFormData.EndLunchStamp!=null)? false: (AddVisFormData && (AddVisFormData.StartLunchStamp== undefined || AddVisFormData.StartLunchStamp=='' || AddVisFormData.StartLunchStamp==null)) ? (!tabdisable && lunchStarted):true + // let startImgDis= (Object.keys(AddVisFormData).length==0 ||(AddVisFormData.StartTimeImage1path!= undefined && AddVisFormData.StartTimeImage1path!='' && AddVisFormData.StartTimeImage1path!=null) )? true: (!AddVisFormData.hasOwnProperty('StartLunchStamp') &&(AddVisFormData.StartLunchStamp== undefined || AddVisFormData.StartLunchStamp=='' || AddVisFormData.StartLunchStamp==null)) && SamplingTabObj.allTabDisable==true ? true: SamplingTabObj.allTabDisable==false? true: false + // let EnableStartLunch= (AddVisFormData.StartLunchStamp!='' && AddVisFormData.StartLunchStamp!=null) ? false: ((SamplingTabObj && SamplingTabObj.allTabDisable==false) &&(AddVisFormData && (AddVisFormData.StartLunchStamp== undefined || AddVisFormData.StartLunchStamp=='' || AddVisFormData.StartLunchStamp==null) )) ? true : false + let isLunchDone = EndLunchStamp != null && EndLunchStamp != '' && EndLunchStamp != 'undefined' ? true : false; + let startImgDis = isLunchTime == true || isEndImgCaptured ? true : false; + let endImgDis = (isLunchTime == true || !isStartImgCaptured) ? true : false; + let EnableStartLunch = !isLunchTime && !isLunchDone && isStartImgCaptured && !isEndImgCaptured ? true : false; + let EnableEndLunch = isLunchTime && isStartImgCaptured && !isEndImgCaptured ? true : false; + let AllTabDisabled = isLunchTime || !isStartImgCaptured || isEndImgCaptured ? true : false; + + + let xpos = AddVisFormData.SamplingIsPresent == 1 ? -75 : 0; + let xpos2 = AddVisFormData.KioskIsPresent == 1 ? -75 : 0; + if (animatedChoice != null) { + xpos = animatedChoice.interpolate({ + inputRange: [0, 1], + outputRange: [0, -75], + }); + } + if (animatedChoice2 != null) { + xpos2 = animatedChoice2.interpolate({ + inputRange: [0, 1], + outputRange: [0, -75], + }); + } + + + if (rerenderdata == rerenderdata) { + return ( + + + {SamplingPresentLabel} + + + + { onChoiceSelect(1, 'SamplingIsPresent', animatedChoice, 1) }}> + Yes + + { onChoiceSelect(0, 'SamplingIsPresent', animatedChoice, 1) }}> + No + + + + + + {SamplingIsPresent != '1' && + + {ST.SelectReason} + {} + + } + + + {(SamplingIsPresent == 1 || SamplingIsPresent == '1') && + + {KioskSetupPresent && + + {KioskSetupLabel} + + + + { onChoiceSelect(1, 'KioskIsPresent', animatedChoice2, 2) }}> + Yes + + { onChoiceSelect(0, 'KioskIsPresent', animatedChoice2, 2) }}> + No + + + + + } + {((KioskSetupPresent && KioskIsPresent == 1) || !KioskSetupPresent) && (rerenderdata == rerenderdata) && + + + + {(StartTimeImage1 || StartTimeImage2) && + + + {StartTimeImageLabel} + + {StartTimeImage1 && + + {(startImgDis) && + ( + { }} disabled={true}> + + {(StartTimeImage1path != null && StartTimeImage1path != '') && + + + + } + + ) + } + {!startImgDis && + (((StartTimeImage1path == null || StartTimeImage1path == '')) ? + { openCamera("StartTimeImage1") }}> + + : (StartTimeImage1path != null && StartTimeImage1path != '') ? + { OpenImgModal(StartTimeImage1path, 'StartTimeImage1', StartTimeImageLabel) }}> + + : + null + ) + } + + } + {StartTimeImage2 && + + {(startImgDis) && + { }} disabled={true}> + + {(StartTimeImage2path != null && StartTimeImage2path != '') && + + + + } + + } + {!startImgDis && + (((StartTimeImage2path == null || StartTimeImage2path == '') ? + { openCamera('StartTimeImage2') }}> + + : (StartTimeImage2path != null && StartTimeImage2path != '') ? + { OpenImgModal(StartTimeImage2path, 'StartTimeImage2', StartTimeImageLabel) }}> + + : null) + ) + } + + } + {AddVisFormData.StartTimeImage1stamp} + + + + } + {(EndTimeImage1 || EndTimeImage2) && + + + {'End Time Image'} + + {EndTimeImage1 && + + {endImgDis && + { }} disabled={true}> + + {(EndTimeImage1path != null && EndTimeImage1path != '') && + + + + } + + } + {!endImgDis && + ((EndTimeImage1path == null || EndTimeImage1path == '') ? + { openCamera('EndTimeImage1') }}> + + : (EndTimeImage1path != '' && EndTimeImage1path != null) ? + { OpenImgModal(EndTimeImage1path, 'EndTimeImage1', EndTimeImageLabel) }}> + + : null + ) + } + + } + {EndTimeImage2 && + + {endImgDis && + { }} disabled={true}> + + {(EndTimeImage2path != null && EndTimeImage2path != '') && + + + + } + + } + {!endImgDis && + ((EndTimeImage2path == null || EndTimeImage2path == '') ? + { openCamera('EndTimeImage2') }}> + + : (EndTimeImage2path != '' && EndTimeImage2path != null) ? + { OpenImgModal(EndTimeImage2path, 'EndTimeImage2', EndTimeImageLabel) }}> + + : null + ) + } + + } + {AddVisFormData.EndTimeImage1stamp} + + + + } + + + { + rerenderdata2 == rerenderdata2 && + // (rerenderdata2Ref.current== rerenderdata2Ref.current) && + // + + } + {LunchTimeRequired == true && + + + {'Start Lunch'} + + { StartLunch() }}> + + + + {StartLunchStamp != null && StartLunchStamp != '' && StartLunchStamp != 'undefined' && + {StartLunchStamp} + } + + + + {'End Lunch'} + + { EndLunch() }}> + + + + {EndLunchStamp != null && EndLunchStamp != '' && EndLunchStamp != 'undefined' && + {EndLunchStamp} + } + + + } + + + } + + } + + ) + } + else { + return null; + } + } + + return ( + + {processing && } + + {_OpenCaptureImage_Modal()} + {ConfirmSaveAlert(props, showAlert, onSaveCancel, saveData)} + {ConfirmSaveAlert(props, showSaveAlert, onSaveCancel, saveData, 'Please save your data before change tab')} + {ConfirmSaveAlert(props, showRemoveConfirm_M, () => { setshowRemoveConfirm_M(false) }, Remove_AddVis, 'Do you really want to remove this sampling?')} + {ConfirmSaveAlert(props, showRAllC_M, () => { setShowRAllC_M(false) }, onConfirmRemoveAll, 'Do you really want to remove all data?')} + { setShowCamera(false); getImage(imgData) }} showCamera={showCamera} onHideCamera={() => { setShowCamera(false); }} /> + + + + {Object.keys(storeData).length > 0 && + + {_render_addVisFormTop()} + + } + + { onSubmitData() }} /> + + + + + + + ); +} + + + +export default connect(mapStateToProps, mapDispatchToProps)(SamplingView); \ No newline at end of file diff --git a/PerformicsSrc/src/screens/Sampling_Stock.js b/PerformicsSrc/src/screens/Sampling_Stock.js new file mode 100644 index 0000000..9479388 --- /dev/null +++ b/PerformicsSrc/src/screens/Sampling_Stock.js @@ -0,0 +1,637 @@ +import React,{useState,useEffect, useRef} from 'react'; +import Container from '../components/container'; +import { useRoute } from '@react-navigation/native'; +import { globalStyles,customStyles,GetPageTheme } from "../styles/Global"; +import {StatusBar,Image,TextInput,View,Text,ScrollView,TouchableOpacity,Platform,PermissionsAndroid,FlatList, Alert, KeyboardAvoidingView, BackHandler, AppState, Keyboard} from 'react-native'; +import { ReactReduxContext,connect,useSelector, useDispatch } from 'react-redux'; +import { mapStateToProps,mapDispatchToProps } from '../reducers/contextProvider'; +import SQLite from 'react-native-sqlite-2'; +import {notify} from '../components/notify'; +import moment from 'moment'; +import {getDownloadJson,getKPIFields,marktext1,marktext2, validateNumber} from '../controller/functions'; +import {get_item,set_item,clear_item} from '../components/localStorage'; +import {version,sloganline,appname,testurl,db, colors_Arr, common_ImagePath,ImageFolderPath} from '../constants/constants'; +import CustomHeader from '../components/customHeader'; +import {Card, Menu, Switch} from 'react-native-paper'; +import {AntDesign, MaterialCommunityIcons} from '../components/icons'; +import { stat } from 'react-native-fs'; +import CustomLoader from '../components/CustomLoader'; +import LinearGradient from 'react-native-linear-gradient'; +import { AppTables } from '../constants/tableConstants'; +import { SvgXml } from 'react-native-svg'; +import {launchCamera, launchImageLibrary,CameraOptions} from 'react-native-image-picker'; +import * as RNFS from 'react-native-fs'; +import GradientButton from '../components/gradientButton'; + +import cameraImg from '../assets/performics/camera_front_image.svg' +import addImg from '../assets/performics/add_image.svg'; +import CustomModal from '../components/CustomModal'; +import { ExitScreenAlert } from '../components/alert'; +import CustomCamera from '../components/Camera'; + +import CameraImg3 from '../assets/performics/camera_tick.svg'; +import CameraImg2 from '../assets/performics/camera_icon.svg'; +import CameraImg4 from '../assets/performics/camera_asterisk.svg'; +import CameraImg5 from '../assets/image/astrickcamera.svg'; + +function Sampling_Stock(props) { + const route = useRoute(); + const ST=props.StaticText || {}; + + // get all theme styles acc to current theme set + const PageTheme=GetPageTheme(props.DarkMode,route.name); + const customStyle=customStyles(props.DarkMode,route.name); + + const [processing, setProcessing] = useState(true); + const [loaderTitle, setLoaderTitle] = useState('loading...'); + const [isAdhocScreen, setIsAdhocScreen] = useState(false); + const [storeData, setStoreData] = useState({}); + const [currentMenu, setCurrentMenu] = useState({}); + const [brandData, setBrandData] = useState([]); + const [rerenderdata, setrerenderdata]= useState(0); + const [rerenderdata2, setrerenderdata2]= useState(0); + const [KPIFields, setKPIFields] = useState([]); + const [showSwitchCamera,setShowSwitchCamera]= useState(false); + + const [catImages, setCatImages] = useState([]); + const [SKUStockData, setSKUStockData] = useState([]); + const [showAlert, setShowAlert] = useState(false); + const [hasUnsavedChanges,setHasUnsavedChanges] = useState(false); + const [showCamera, setShowCamera] = useState(false); + const [getImageProps,setGetImageProps]= useState({}); + + const [SelectedImg, setSelectedImg] = useState(''); + const [showModal, setShowModal] = useState(false); + const [reCapImgModalObj, setReCapImgModalObj] = useState({}); + const [showImageSaveOp, setShowImageSaveOp] = useState(true); + const [disableEdit, setDisableEdit] = useState(false); + const [SaleFlag, setSaleFlag] = useState(false); + const [SamplingData, setSamplingData] = useState({}); + + const hasUnsavedChangesRef = React.useRef(hasUnsavedChanges); + const WindowDataRef=React.useRef(SKUStockData); + const StoreIdRef=React.useRef(null); + const ScreenNameRef=React.useRef(''); + const catImagesRef=React.useRef(catImages); + + const inputRefs = useRef({}); + + const d1=new Date(); + const d2=moment(d1).format('MM/DD/YYYY'); + + useEffect(() => { + let params=props.route.params? props.route.params:{}; + let storeData1=params.storeData || {}; + let menu1=params.menu || {}; + let SamplingData1=params.SamplingData || {}; + + let isAdhoc=params.isAdhoc || false; + let SamplingSaleFlag=params.SamplingSaleFlag || false; + + setSaleFlag(SamplingSaleFlag) + setSamplingData(SamplingData1); + setIsAdhocScreen(isAdhoc); + setStoreData(storeData1); + setCurrentMenu(menu1); + + StoreIdRef.current=storeData1.StoreId + ScreenNameRef.current=menu1.ScreenName + getData(storeData1,menu1,SamplingData1,SamplingSaleFlag); + + const AppStateSubscription = AppState.addEventListener('change', (pro)=>{ _handleAppStateChange(pro)}); + const unsubscribe=props.navigation.addListener('beforeRemove', onBeforeRemove); + + return function cleanup() { + AppStateSubscription.remove(); + return unsubscribe; + }; + + }, []); + + const _handleAppStateChange = async (nextAppState) => { + if(nextAppState =='background' && hasUnsavedChangesRef.current==true){ + let newData = { + storeBGData:WindowDataRef.current, + menuName:ScreenNameRef.current, + StoreId1:StoreIdRef.current, + BgCatImage:catImagesRef.current, + visiteDate:d2 + } + let WindowsStr= JSON.stringify(newData) + await set_item('storeData',WindowsStr); + } + } + + useEffect(() => { + const unsubscribe=props.navigation.addListener('beforeRemove', onBeforeRemove); + return unsubscribe; + // AppState.removeEventListener('change',(pro)=>{ _handleAppStateChange(SKUStockData,pro)}); + // AppState.addEventListener('change',(pro)=>{ _handleAppStateChange(SKUStockData,pro)}); + }, [hasUnsavedChanges]); + + // useEffect(() => { + // AppState.removeEventListener('change',(pro)=>{ _handleAppStateChange(SKUStockData,pro)}); + // AppState.addEventListener('change',(pro)=>{ _handleAppStateChange(SKUStockData,pro)}); + // }, [SKUStockData]); + + useEffect(() => { + const unsubscribe=props.navigation.addListener('beforeRemove', onBeforeRemove); + return unsubscribe; + }, [showCamera]); + + function onBeforeRemove(e){ + if(showCamera==true){ + e.preventDefault(); + setShowCamera(false); + } + else{ + if (hasUnsavedChanges==true) { + e.preventDefault(); // Prevent default behavior of leaving the screen + onRemoveScreen(e); + } + else{ + return; + } + } + } + + function BgUnsavedChanges(val){ + hasUnsavedChangesRef.current=val + setHasUnsavedChanges(val); + } + + function BgWindowData(val){ + WindowDataRef.current=val + setSKUStockData(val); + } + + function BgCatImages(val){ + catImagesRef.current=val + setCatImages(val); + } + + function onRemoveScreen(e){ + Alert.alert( + "", + "Do you really want to exit the screen?", + [ + { + text: "Cancel", + onPress: () => {}, + style: "cancel" + }, + { text: "OK", onPress: async () => { + // setHasUnsavedChanges(false); + BgUnsavedChanges(false) + await clear_item('storeData') + props.navigation.dispatch(e.data.action);} } + ] + ); + } + + async function getData(storeData1,menu1,SamplingData1,SamplingSaleFlag){ + try { + let {StoreId,ChainId,StateId,StoreTypeId,StoreClassId,StoreCategoryId}=storeData1; + let {SamplingDefinitionId}=SamplingData1; + let allCats=[]; + + let AllKPIFields=await getKPIFields(menu1); + setKPIFields(AllKPIFields); + + // set switch camera flag as defined in mapping menu flag (if exists) + let SwitchingCameraI=AllKPIFields.findIndex(i=>i.KPIFieldName=='SwitchingCamera'); + let SwitchingCameraObj=SwitchingCameraI>=0?AllKPIFields[SwitchingCameraI]:{}; + let SwitchingCamera=SwitchingCameraI>=0?SwitchingCameraObj['KPIFieldEnable']:false; + setShowSwitchCamera(SwitchingCamera); + + await db.transaction(async function (txn) { + + + let q=`SELECT DISTINCT c.SamplingStockValue as SamplingStockId,c.ProductName as ProductName,'' as MSL, c.SamplingStockDefinitionId, c.SamplingDefinitionId, c.SamplingStockTable, c.SamplingStockField, c.SamplingStockMBQ from Master_SamplingStockDefinition c where c.SamplingDefinitionId='${SamplingDefinitionId}' `; + + let q2=""; + if( SamplingSaleFlag==true){ + // SELECT c.STOCK, c.SAMPLING_STOCK_VALUE as SamplingStockId, c.PRODUCT_NAME as ProductName,'' as MSL, c.SAMPLING_STOCK_DEFINITION_ID as SamplingStockDefinitionId, c.SAMPLING_DEFINITION_ID as SamplingDefinitionId, c.SAMPLING_STOCK_TABLE as SamplingStockTable, c.SAMPLING_STOCK_FIELD as SamplingStockField, c.SAMPLING_STOCK_MBQ as SamplingStockMBQ from SAMPLING_STOCK_DATA c LEFT OUTER JOIN SAMPLING_SALE_DATA s on c.SAMPLING_DEFINITION_ID=s.SAMPLING_DEFINITION_ID where c.STORE_ID='1' AND c.VISIT_DATE='08/21/2023' + + // let join=` INNER JOIN ${AppTables.SAMPLING_SALE_DATA} s on c.SAMPLING_DEFINITION_ID=s.SAMPLING_DEFINITION_ID `; + // q2=`SELECT c.STOCK, c.SAMPLING_STOCK_VALUE as SamplingStockId, c.PRODUCT_NAME as ProductName,'' as MSL, c.SAMPLING_STOCK_DEFINITION_ID as SamplingStockDefinitionId, c.SAMPLING_DEFINITION_ID as SamplingDefinitionId, c.SAMPLING_STOCK_TABLE as SamplingStockTable, c.SAMPLING_STOCK_FIELD as SamplingStockField, c.SAMPLING_STOCK_MBQ as SamplingStockMBQ, s.SALE from ${AppTables.SAMPLING_STOCK_DATA } c ${join} where c.SAMPLING_DEFINITION_ID='${SamplingDefinitionId}' AND c.STORE_ID='${StoreId}' AND c.VISIT_DATE='${d2}' `; + + let join=` LEFT OUTER JOIN ${AppTables.SAMPLING_SALE_DATA} s on c.SAMPLING_STOCK_DEFINITION_ID=s.SAMPLING_STOCK_DEFINITION_ID AND c.SAMPLING_DEFINITION_ID=s.SAMPLING_DEFINITION_ID `; + q2=`SELECT c.STOCK, c.SAMPLING_STOCK_VALUE as SamplingStockId, c.PRODUCT_NAME as ProductName,'' as MSL, c.SAMPLING_STOCK_DEFINITION_ID as SamplingStockDefinitionId, c.SAMPLING_DEFINITION_ID as SamplingDefinitionId, c.SAMPLING_STOCK_TABLE as SamplingStockTable, c.SAMPLING_STOCK_FIELD as SamplingStockField, c.SAMPLING_STOCK_MBQ as SamplingStockMBQ, s.SALE from ${AppTables.SAMPLING_STOCK_DATA } c ${join} where c.SAMPLING_DEFINITION_ID='${SamplingDefinitionId}' AND c.STORE_ID='${StoreId}' AND c.VISIT_DATE='${d2}' `; + }else{ + + q2=`SELECT c.SAMPLING_STOCK_VALUE as SamplingStockId, c.PRODUCT_NAME as ProductName,'' as MSL, c.SAMPLING_STOCK_DEFINITION_ID as SamplingStockDefinitionId, c.SAMPLING_DEFINITION_ID as SamplingDefinitionId, c.SAMPLING_STOCK_TABLE as SamplingStockTable, c.SAMPLING_STOCK_FIELD as SamplingStockField, c.SAMPLING_STOCK_MBQ as SamplingStockMBQ , STOCK from ${AppTables.SAMPLING_STOCK_DATA} c where c.SAMPLING_DEFINITION_ID='${SamplingDefinitionId}' AND c.STORE_ID='${StoreId}' AND c.VISIT_DATE='${d2}' `; + } + + await txn.executeSql(q,[],async function (txn2, txnres2) { + if(txnres2.rows.length>0){ + let arr=[],storeBGData1=[],bgStoreJson={}; + + for(var i=0;i0){ + let arr=[],storeBGData1=[],bgStoreJson={}; + let windData = await get_item('storeData') + if(windData!=null && windData!=''){ + let StoreJson = JSON.parse(windData) + let { storeBGData,menuName,StoreId1,BgCatImage,visiteDate }= StoreJson + // if( menuName == menu1.ScreenName && StoreId1== StoreId && visiteDate==d2){ + // storeBGData1=storeBGData; + // bgStoreJson=StoreJson + // // setSKUStockData(storeBGData); + // if(BgCatImage.length>0){ + // // BgCatImages(BgCatImage) + // } + // if(storeBGData.length>0){ + // // BgWindowData(storeBGData); + // } + // BgUnsavedChanges(true) + + // } + } + + for(var i=0;i0){ + // let arr=[],storeBGData1=[],bgStoreJson={}; + + // for(var i=0;ii.SamplingStockId==item.SamplingStockId && i.SamplingStockDefinitionId==item.SamplingStockDefinitionId) || {}; + values+=values!=''?' , ':''; + // SaleFlag==true? AppTables.SAMPLING_STOCK_DATA:AppTables.SAMPLING_SALE_DATA + if(SaleFlag==true){ + values+=` ('${StoreId}','${d2}','${item.SamplingStockDefinitionId}','${SamplingDefinitionId}','${item.SamplingStockTable}', '${item.SamplingStockField}','${item.SamplingStockId}', '${item.SamplingStockMBQ}','${item.ProductName}','${skuData.Sale || '0'}','${d2}') `; + }else{ + values+=` ('${StoreId}','${d2}','${item.SamplingStockDefinitionId}','${SamplingDefinitionId}','${item.SamplingStockTable}', '${item.SamplingStockField}','${item.SamplingStockId}', '${item.SamplingStockMBQ}','${item.ProductName}','${skuData.Stock}','${d2}') `; + } + } + + if(SaleFlag==true){ + add_Stock=`INSERT INTO ${AppTables.SAMPLING_SALE_DATA} (STORE_ID,VISIT_DATE, SAMPLING_STOCK_DEFINITION_ID, SAMPLING_DEFINITION_ID, SAMPLING_STOCK_TABLE, SAMPLING_STOCK_FIELD, SAMPLING_STOCK_VALUE, SAMPLING_STOCK_MBQ, PRODUCT_NAME, SALE, ADDED_DATE) VALUES ${values} `; + }else{ + add_Stock=`INSERT INTO ${AppTables.SAMPLING_STOCK_DATA} (STORE_ID,VISIT_DATE, SAMPLING_STOCK_DEFINITION_ID, SAMPLING_DEFINITION_ID, SAMPLING_STOCK_TABLE, SAMPLING_STOCK_FIELD, SAMPLING_STOCK_VALUE, SAMPLING_STOCK_MBQ, PRODUCT_NAME, STOCK, ADDED_DATE) VALUES ${values} `; + } + + await txn.executeSql(add_Stock,[],async function (txn2, txnres) { + console.log('stock added'); + notify('Stock updated successfully'); + setProcessing(false); + // clear store data in local storage to avoiding re-set data for the store + clear_item('storeData') + props.navigation.goBack(); + },function (txnE,txnerr) { console.log(txnerr);setProcessing(false);notify('Cannot add stock') },); + + + }); + } catch (err) { + console.log(err); + } + } + + + // async function onChangeValidate(cat,CategoryIndex,skus,ProductIndex){ + // let isValid=true; + + // let skuData=SKUStockData.find(ci=>ci.CategoryId==item.CategoryId && ci.ProductId==skuItem.ProductId ) || {}; + // if(skuData.ExpiryStock!=null && skuData.ExpiryStock!="" && skuData.Stock!=null && skuData.Stock!="" ){ + // let isExpStockIndex=KPIFields.findIndex(i=>i.KPIFieldName=='ExpiredStock') + // let isExpStockPIObj=isExpStockIndex>=0?KPIFields[isExpStockIndex]:{}; + // let isExpStockEnable=isExpStockIndex>=0?isExpStockPIObj['KPIFieldEnable']:true; + + + // if(isExpStockEnable==true &&(parseInt(skuData.ExpiryStock)>parseInt(skuData.Stock))){ + // notify('Expiry Stock value should be less than or equal to Stock for '+skuItem.ProductName,'SHORT'); + // isValid=false; + // }else{ + + // } + // } + + // } + + async function validate(){ + let isValid=true; + let dataCheckKey=SaleFlag==true ? 'Sale' :'Stock'; + let isAnyFilled=false; + + let isSaleDependIndex=KPIFields.findIndex(i=>i.KPIFieldName=='SaleDependOnStock') + let isSaleDependPIObj=isSaleDependIndex>=0?KPIFields[isSaleDependIndex]:{}; + let isSaleDependEnable=isSaleDependIndex>=0?isSaleDependPIObj['KPIFieldEnable']:true; + + + await Promise.all( + brandData.map(async (item,index) => { + + if((isValid && !SaleFlag) || SaleFlag){ + let skuData=SKUStockData.find(i=>i.SamplingStockId==item.SamplingStockId && i.SamplingStockDefinitionId==item.SamplingStockDefinitionId) || {}; + + if(skuData[dataCheckKey]!==0 && ( skuData[dataCheckKey]==null || skuData[dataCheckKey]=='')){ + + if(!SaleFlag){ // pop up alert for stock + notify('Please enter '+dataCheckKey+' for '+item.ProductName,'SHORT'); + isValid=false; + } + }else{ + if(SaleFlag && isSaleDependEnable && ((skuData["Sale"]>skuData["Stock"]) )){ + //data does not exists for sale + notify('Sale should not be greater than stock for '+item.ProductName,'SHORT'); + isValid=false; + } + + //data exists for sale + isAnyFilled=true; + } + + //check if any filled for sales at last index + console.log("isAnyFilled:",isAnyFilled); + if(SaleFlag && index==brandData.length-1 && !isAnyFilled){ + isValid=false; + notify('Please enter sale for atleast one product!'); + } + + } + }) + ); + + console.log('isValid:',isValid); + return isValid; + } + + function onStockValChange(item,val,key,type=''){ + if(val!=''){ + let isValid=validateNumber(val,type); + if(!isValid){ + return; + } + } + + let allSKUData=SKUStockData; + let defData={'SamplingStockId':item.SamplingStockId,'SamplingStockDefinitionId':item.SamplingStockDefinitionId}; + const skud_index=allSKUData.findIndex(i=>i.SamplingStockId==item.SamplingStockId && i.SamplingStockDefinitionId==item.SamplingStockDefinitionId); + const skud=skud_index>=0?(allSKUData[skud_index] || defData) : defData; + skud[key]=val; + + skud_index>=0?allSKUData[skud_index]=skud:allSKUData.push(skud); + BgWindowData(allSKUData) + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + + function _render_Alert(){ + return ( + + + {setShowAlert(false)}}> + Cancel + + {saveData()}}> + Yes + + + + ) + } + + function cancelImage(){ + // setImage1(''); + setSelectedImg(''); + setReCapImgModalObj({}) + setShowModal(false); + } + + function _OpenCaptureImage_Modal(img){ + + const isImageCap=(img!='' || img!=null)?true:false; + // console.log("imag pop is trigger",isImageCap,showModal,img) + let {item}=reCapImgModalObj + let camera2Label=(window && window.PromoImage2Lable) || ''; + return ( + + { + isImageCap && + + + + + {openCamera(item)}}> + + + + {!showImageSaveOp && + {cancelImage()}}> + {ST.Close} + + } + + } + + ) + } + + + function _renderStocks(){ + + return ( + + { + + const cat=item; + const catIndex=index; + let keyname= SaleFlag==true ? 'Sale' :'Stock'; + const cindex=SKUStockData.findIndex(i=>i.SamplingStockId==item.SamplingStockId && i.SamplingStockDefinitionId==item.SamplingStockDefinitionId); + let stockData=cindex>=0?SKUStockData[cindex]:{}; + const Stock=stockData[keyname]!=null?stockData[keyname]:''; + + return( + + {/* + + {item.ProductName} + + */} + + + {item.ProductName} + {SaleFlag && {"Stock: "+stockData.Stock}} + + + + { SaleFlag==true ? 'Sale' :'Stock'} + {inputRefs.current['input1_'+item.SamplingStockId+'_'+item.SamplingStockDefinitionId]=reff;}} + style={[customStyle.openStk_prd_inputStyle,customStyle.openStk_prd_flex_inputStyle]} + placeholder="" + autoComplete='off' + editable={!disableEdit} + placeholderTextColor={PageTheme.$placeholder_color} + value={(Stock+'' || '')} + returnKeyType={(Platform.OS==='ios')?'done':'next'} + keyboardType='number-pad' + blurOnSubmit={false} + onChangeText={(val)=>{ + onStockValChange(cat,val,keyname,'numeric')}} + onSubmitEditing={()=>{focusToNext(cat,'1')}} + /> + + + + + + + ); + }} + /> + + ); + } + + return ( + + {processing && } + + {_OpenCaptureImage_Modal()} + {_render_Alert()} + {setShowCamera(false);getImage(imgData)}} showCamera={showCamera} onHideCamera={()=>{setShowCamera(false);}}/> + + + + { Object.keys(storeData).length>0 && + _renderStocks() + } + + {!disableEdit && {submitOpeningStock()}}/> } + {disableEdit && {submitOpeningStock()}} disabled={true} colors={[PageTheme.$text_color_light,PageTheme.$text_color_light]} /> } + + + + + ); + } + + + +export default connect(mapStateToProps, mapDispatchToProps)(Sampling_Stock); \ No newline at end of file diff --git a/PerformicsSrc/src/screens/Settings.js b/PerformicsSrc/src/screens/Settings.js new file mode 100644 index 0000000..2ad6a4c --- /dev/null +++ b/PerformicsSrc/src/screens/Settings.js @@ -0,0 +1,223 @@ +import React,{useState,useEffect} from 'react'; +import Container from '../components/container'; +import { useRoute } from '@react-navigation/native'; +import { globalStyles,customStyles,GetPageTheme } from "../styles/Global"; +import {StatusBar,Image,TextInput,View,Text,ScrollView,TouchableOpacity,Platform,PermissionsAndroid,FlatList, Alert} from 'react-native'; +import { ReactReduxContext,connect,useSelector, useDispatch } from 'react-redux'; +import { mapStateToProps,mapDispatchToProps } from '../reducers/contextProvider'; +import SQLite from 'react-native-sqlite-2'; +import {notify} from '../components/notify'; +import moment from 'moment'; +import {getDownloadJson,DownloadData} from '../controller/functions'; +import {get_item,set_item,clear_item} from '../components/localStorage'; +import {version,sloganline,appname,testurl, db} from '../constants/constants'; +import CustomHeader from '../components/customHeader'; +import {Card} from 'react-native-paper'; +import {AntDesign, Feather, FontAwesome, MaterialCommunityIcons} from '../components/icons'; +import { WebView } from 'react-native-webview'; +import CustomLoader from '../components/CustomLoader'; +import NoDataComponent from '../components/NoDataComponent'; +import LinearGradient from 'react-native-linear-gradient'; +import RNExitApp from 'react-native-exit-app'; +import { ConfirmSaveAlert } from '../components/alert'; +import CustomModal from '../components/CustomModal'; +import OtpInputs from 'react-native-otp-inputs'; +import { PrimaryTheme } from '../styles/Themes'; + +function Settings(props) { + const route = useRoute(); + + const ST=props.StaticText || {}; + // get all theme styles acc to current theme set + const PageTheme=GetPageTheme(props.DarkMode,route.name); + const customStyle=customStyles(props.DarkMode,route.name); + + const [mpin, setMpin] = useState(''); + const [processing, setProcessing] = useState(false); + const [isDataFound, setisDataFound] = useState(false); + const [showAlert, setShowAlert] = useState(false); + const [showMPinModal, setShowMPinModal] = useState(false); + + + const [reportData, setReportData] = useState([]); + const [designation, setDesignation] = useState(''); + const d1=new Date(); + const d2=moment(d1).format('MM/DD/YYYY'); + + useEffect(() => { + + }, []); + + async function exitApp(){ + console.log('exit app'); + clear_item('islogin'); + clear_item('mpin'); + clear_item('loginToken'); + clear_item('loginInfo'); + clear_item('login_credentials'); + clear_item('firsttime'); + clear_item('projectCode'); + clear_item('projectInfo'); + clear_item('loginOfDays'); + clear_item('GyanCast'); + props.setGlobalData({isDataDownloaded:false}); + const pdata={islogin:false,SecurityToken:''}; + props.pageprops?props.pageprops.set_session(pdata):''; + setTimeout(()=>{ + props.navigation.reset({index: 0,routes: [{name: 'Project'}],}); + },1000); + } + + async function clearStorage(){ + + let isvalid=await validate(); + if(isvalid){ + setShowMPinModal(false); + setProcessing(true); + await set_item('DataStorageCleared','1'); + try { + db.transaction(async function (txn) { + await txn.executeSql(`SELECT name FROM sqlite_master WHERE type='table' ORDER BY name`,[],async function (txnd, txnres1) { + console.log('q exec:',txnres1.rows.length); + if(txnres1.rows.length>0){ + for(var i=0;i {}, + style: "cancel" + }, + { text: ST.OK, onPress: () => { clearStorage()} } + ], + ); + } + + function _Mpin_Modal(){ + return ( + + + + {ST.Warning} + + {ST.Allcacheandstoragewillbedeletedfortheapp} + + + {setMpin(code);}} + numberOfInputs={4} + secureTextEntry={true} + keyboardType={"numeric"} + defaultValue={''} + autofillFromClipboard={false} + inputStyles={customStyle.MPinM_otp_inputStyle} + style={customStyle.MPinM_otp_field} + /> + + + + {setShowMPinModal(false);}}> + {ST.Cancel} + + {clearStorage()}}> + {ST.Yes} + + + + ) + } + + + + return ( + + {processing && } + + + {_Mpin_Modal()} + {ConfirmSaveAlert(props,showAlert,()=>{setShowAlert(false)},askForMPin,ST.DoyoureallywanttoclearalldataThiswillremoveallcacheandstorage)} + + + + {/* {borderTopLeftRadius:0,borderTopRightRadius:0,} */} + + + + {AskForClearStorage() }}> + {ST.ClearDataLogout} + + + + + + + + + ); + } + + + +export default connect(mapStateToProps, mapDispatchToProps)(Settings); \ No newline at end of file diff --git a/PerformicsSrc/src/screens/ShareOfShelf.js b/PerformicsSrc/src/screens/ShareOfShelf.js new file mode 100644 index 0000000..35e509f --- /dev/null +++ b/PerformicsSrc/src/screens/ShareOfShelf.js @@ -0,0 +1,781 @@ +import React,{useState,useEffect, useRef} from 'react'; +import Container from '../components/container'; +import { useRoute } from '@react-navigation/native'; +import { globalStyles,customStyles,GetPageTheme } from "../styles/Global"; +import {StatusBar,Image,TextInput,View,Text,ScrollView,TouchableOpacity,Platform,PermissionsAndroid,FlatList, Alert, KeyboardAvoidingView} from 'react-native'; +import { ReactReduxContext,connect,useSelector, useDispatch } from 'react-redux'; +import { mapStateToProps,mapDispatchToProps } from '../reducers/contextProvider'; +import SQLite from 'react-native-sqlite-2'; +import {notify} from '../components/notify'; +import moment from 'moment'; +import {getDownloadJson,getKPIFields,marktext1,marktext2, validateNumber} from '../controller/functions'; +import {get_item,set_item,clear_item} from '../components/localStorage'; +import {version,sloganline,appname,testurl,db, colors_Arr, common_ImagePath,ImageFolderPath} from '../constants/constants'; +import CustomHeader from '../components/customHeader'; +import {AntDesign, MaterialCommunityIcons} from '../components/icons'; +import CustomLoader from '../components/CustomLoader'; +import LinearGradient from 'react-native-linear-gradient'; +import { AppTables } from '../constants/tableConstants'; +import * as RNFS from 'react-native-fs'; +import GradientButton from '../components/gradientButton'; + +import CameraImg from '../assets/performics/camera_front_image.svg' +import CustomModal from '../components/CustomModal'; +import { Q_getdefaltShareofSelf } from '../constants/ConstantQueries'; +import CustomCamera from '../components/Camera'; +import Orientation from 'react-native-orientation-locker'; + +function ShareOfShelf(props) { + const route = useRoute(); + + // get all theme styles acc to current theme set + const PageTheme=GetPageTheme(props.DarkMode,route.name); + const customStyle=customStyles(props.DarkMode,route.name); + + const [processing, setProcessing] = useState(true); + const [loaderTitle, setLoaderTitle] = useState('loading...'); + const [isAdhocScreen, setIsAdhocScreen] = useState(false); + const [storeData, setStoreData] = useState({}); + const [StoreCameraAllow, setStoreCameraAllow] = useState(true); + const [currentMenu, setCurrentMenu] = useState({}); + const [brandData, setBrandData] = useState([]); + const [rerenderdata, setrerenderdata]= useState(0); + const [rerenderdata2, setrerenderdata2]= useState(0); + + const [catImages, setCatImages] = useState([]); + const [SKUStockData, setSKUStockData] = useState([]); + const [showAlert, setShowAlert] = useState(false); + const [hasUnsavedChanges,setHasUnsavedChanges] = useState(false); + const [showCamera, setShowCamera] = useState(false); + const [getImageProps,setGetImageProps]= useState({}); + const [KPIFields, setKPIFields] = useState([]); + + const inputRefs = useRef({}); + + const d1=new Date(); + const d2=moment(d1).format('MM/DD/YYYY'); + + useEffect(() => { + let params=props.route.params? props.route.params:{}; + let storeData1=params.storeData || {}; + let menu1=params.menu || {}; + let cameraAllow=storeData1.CameraAllow=='true' || storeData1.CameraAllow==1?true:false; + setStoreCameraAllow(cameraAllow); + + let isAdhoc=params.isAdhoc || false; + setIsAdhocScreen(isAdhoc); + setStoreData(storeData1); + setCurrentMenu(menu1); + + getData(storeData1,menu1); + + props.navigation.addListener('beforeRemove', onBeforeRemove); + + return function cleanup() { + props.navigation.removeListener('beforeRemove', onBeforeRemove); + }; + }, []); + + useEffect(() => { + props.navigation.removeListener('beforeRemove', onBeforeRemove); + props.navigation.addListener('beforeRemove', onBeforeRemove); + }, [hasUnsavedChanges]); + + useEffect(() => { + props.navigation.removeListener('beforeRemove', onBeforeRemove); + props.navigation.addListener('beforeRemove', onBeforeRemove); + }, [showCamera]); + + function onBeforeRemove(e){ + Orientation.unlockAllOrientations() + if(showCamera==true){ + e.preventDefault(); + setShowCamera(false); + } + else{ + console.log('hasUnsavedChanges:',hasUnsavedChanges); + if (hasUnsavedChanges==true) { + console.log('hasUnsavedChanges is true'); + e.preventDefault(); // Prevent default behavior of leaving the screen + onRemoveScreen(e); + } + else{ + return; + } + } + } + + function onRemoveScreen(e){ + Alert.alert( + "", + "Do you really want to exit the screen?", + [ + { + text: "Cancel", + onPress: () => {}, + style: "cancel" + }, + { text: "OK", onPress: () => {setHasUnsavedChanges(false);props.navigation.dispatch(e.data.action);} } + ] + ); + } + + async function getData(storeData1,menu1){ + try { + let {StoreId,ChainId,StateId,StoreTypeId}=storeData1; + let allCats=[]; + + let AllKPIFields=await getKPIFields(menu1); + setKPIFields(AllKPIFields); + await db.transaction(async function (txn) { + let q=Q_getdefaltShareofSelf(storeData1); + let select=` CATEGORY_ID as CategoryId,CATEGORY as CategoryName,IMAGE `; + let q2=` SELECT ${select} FROM ${AppTables.SHARE_OF_SHELF_IMAGE} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' `; + + await txn.executeSql(q2,[],async function (txn2, txnres) { + if(txnres.rows.length>0){ + let arr=[]; + for(var i=0;i0){ + let arr=[]; + for(var i=0;i { + let seletlist=`SUB_CATEGORY as SubCategoryName,SUB_CATEGORY_ID as SubCategoryId,SUB_CATEGORY_STOCK,STOCK,IMAGE1`; + let sku_q=`SELECT ${seletlist} FROM ${AppTables.SHARE_OF_SHELF_FACING_DATA} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' and CATEGORY_ID='${item.CategoryId}' `; + + let join=` INNER JOIN Mapping_ShareOfShelf m on p.SubCategoryId=m.SubCategoryId`; + let sku_q2=`SELECT DISTINCT p.SubCategoryId,p.SubCategoryName from Product_Master p ${join} where m.StateId='${StateId}' and m.ChainId='${ChainId}' and m.StoreTypeId='${StoreTypeId}' and (p.CategoryId='${item.CategoryId}' or p.CategoryId= ${item.CategoryId}) order by p.SubCategorySequence`; + + return await txn.executeSql(sku_q,[],async function (txn2, txnres) { + if(txnres.rows.length>0){ + let arr=[]; + for(var i=0;i{setrerenderdata2(!rerenderdata2);},3000); + setProcessing(false); + } + return item; + } + } + } + else{ + return await txn.executeSql(sku_q2,[],async function (txn2, txnres2) { + + if(txnres2.rows.length>0){ + let arr=[]; + for(var i=0;i{ + + }); + }); + } catch (err) { + console.log(err); + } + } + + async function getImage(imgdata){ + let cat=getImageProps.option!=null?getImageProps.option:{}; + let type=getImageProps.type!=null?getImageProps.type:'1'; + let skuItem=getImageProps.skuItem!=null?getImageProps.skuItem:{}; + if(typeof imgdata =='object' && imgdata.errorCode=='camera_unavailable'){ + notify('Camera unavailable'); + } + else if(typeof imgdata =='object' && imgdata.uri!=null){ + const img=imgdata; + const imgurl=img.uri, imgWidth=img.width, imgHeight=img.height; + let isImgFromGallery=img.fromGallery!=null?img.fromGallery:false; + let picture_clickedd=isImgFromGallery==true?img.datetime:new Date(); + let picture_clicked_time=moment(picture_clickedd).format('DD-MM-YYYY HH:mm:ss') + + + const mark_text1=picture_clicked_time; + const mark_text2='Store Name:'+storeData.StoreName+' | Store Id:'+storeData.StoreId+' | User Id:'+storeData.EmpId+' | Image Type: SOS'+' | Date:'+picture_clicked_time; + + await marktext1(mark_text1,imgurl) + .then((res)=>{ + if(res.success){ + let uri=res.uri; + marktext2(mark_text2,uri,imgWidth,imgHeight) + .then((res)=>{ + if(res.success){ + + let picture_clicked_date=moment(picture_clickedd).format('YYYYMMDD'); + let picture_clicked_time=moment(picture_clickedd).format('HHmmss'); + let filename=storeData.StoreId+'_'+(props.UserId || '')+'_SOS-'+picture_clicked_date+'_'+picture_clicked_time+'.jpg'; + + + let allIMgs=catImages; + let defData={'CategoryId':cat.CategoryId}; + let cindex=-1,imgData=defData; + + + let allSKUData=SKUStockData; + let defData1={'CategoryId':cat.CategoryId,'SubCategoryId':skuItem.SubCategoryId}; + const skud_index=allSKUData.findIndex(i=>i.CategoryId==cat.CategoryId && i.SubCategoryId==skuItem.SubCategoryId); + const skud=skud_index>=0?(allSKUData[skud_index] || defData1) : defData1; + + + if(type=='2'){ + skud['ImageName']=filename; + } + else{ + cindex=allIMgs.findIndex(i=>i.CategoryId==cat.CategoryId); + imgData=cindex>=0?(allIMgs[cindex] || defData):defData; + imgData.ImageName=filename; + } + + + + // renamefile + let imagePath=ImageFolderPath+currentMenu.ScreenName+"/"+filename; + RNFS.copyFile(res.uri, imagePath) + .then(resn => { + let uri='file://'+imagePath; + + if(type=='2'){ + skud['ImagePath']=uri; + skud_index>=0?allSKUData[skud_index]=skud:allSKUData.push(skud); + console.log('skud:',skud); + console.log('allSKUData:',allSKUData); + setSKUStockData(allSKUData); + setHasUnsavedChanges(true); + setrerenderdata(!rerenderdata); + } + else{ + imgData.ImagePath=uri; + cindex>=0?allIMgs[cindex]=imgData:allIMgs.push(imgData); + setCatImages(allIMgs); + setHasUnsavedChanges(true); + setrerenderdata(!rerenderdata); + } + + }) + .catch(err => { + console.log('ERROR: image file write failed!!!'); + console.log(err.message, err.code); + }); + + } + else{ + if(res.imagenotfound){ + notify('Please capture a image'); + } + else{ + notify(res.error); + } + } + }); + } + else{ + if(res.imagenotfound){ + notify('Please capture a image'); + } + else{ + notify(res.error); + } + } + }); + } + } + + async function openCamera(type,option,skuItem){ + setGetImageProps({'type':type,'option':option,'skuItem':skuItem}); + setShowCamera(true); + // props.navigation.navigate('CameraScreen',{'getImage':getImage,'cameraType':'back'}) + } + + async function onFocusChange(cat,sku,inputType='1'){ + let d={'catId':cat.CategoryId,'subcatId':sku.SubCategoryId,'inputType':inputType}; + console.log(d); + setCurrentFocusedData(d); + } + + async function focusToNext(cat,index,sku,sku_index,inputType='1'){ + console.log('focusToNext',index); + let data=brandData; + + if(inputType=='1'){ + let refIn2=inputRefs.current['input2_'+cat.CategoryId+'_'+sku.SubCategoryId]; + refIn2.focus(); + } + else{ + let ccat_index=index; + let skulist=cat.skulist || []; + if(sku_index==skulist.length-1){ // if last subcategory element + //then move to next category + console.log('move to next cat',ccat_index,data.length) + if(ccat_index==data.length-1){ + return; + } + else{ + ccat_index+=1; + console.log('move to next cat n:',ccat_index) + let cat1=data[ccat_index]; + let skulist1=cat1.skulist || []; + if(skulist1.length>0){ + let sku1=skulist1[0]; + let refIn1=inputRefs.current['input1_'+cat1.CategoryId+'_'+sku1.SubCategoryId]; + console.log('move to next cat refIn1:','input1_'+cat1.CategoryId+'_'+sku1.SubCategoryId) + refIn1.focus(); + } + } + } + else{ + // move to next subcategory + let sku1=skulist[sku_index+1]; + let refIn1=inputRefs.current['input1_'+cat.CategoryId+'_'+sku1.SubCategoryId]; + refIn1.focus(); + } + + + + } + + } + + async function submitOpeningStock(){ + let isvalid=await validate(); + if(isvalid){ + setShowAlert(true); + } + } + + async function saveData(){ + setHasUnsavedChanges(false); + setShowAlert(false); + setLoaderTitle('Saving Data...'); + setProcessing(true); + try { + let {StoreId,ChainId,StateId,StoreTypeId}=storeData; + await db.transaction(async function (txn) { + + let q=`DELETE FROM ${AppTables.SHARE_OF_SHELF_IMAGE} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' `; + let q2=`DELETE FROM ${AppTables.SHARE_OF_SHELF_FACING_DATA} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' `; + + // remove old data + await txn.executeSql(q,[],async function (txn2, txnres) { + console.log('stock facing data deleted'); + },function (txnE,txnerr) { console.log(txnerr); },); + + await txn.executeSql(q2,[],async function (txn2, txnres) { + console.log('stock facing header data deleted'); + },function (txnE,txnerr) { console.log(txnerr); },); + + let seq_q=` select seq from sqlite_sequence where name="${AppTables.SHARE_OF_SHELF_IMAGE}" `; + await txn.executeSql(seq_q,[],async function (txn2, txnres) { + if(txnres.rows.length>0){ + let data=txnres.rows.item(0); + let seq=data.seq; + insertData(seq); + } + else{ + insertData(0); + } + },function (txnE,txnerr) { console.log(txnerr); insertData(0); },); + + + }); + } catch (err) { + console.log(err); + } + } + + async function insertData(seq=0){ + try { + console.log(seq); + let {StoreId,ChainId,StateId,StoreTypeId}=storeData; + + await db.transaction(async function (txn) { + var values='',stock_values=''; + for(var i=0;ici.CategoryId==item.CategoryId) || {}; + values+=values!=''?' , ':''; + values+=` ('${StoreId}','${d2}','${item.CategoryId}','${item.CategoryName}','${cimage.ImageName || ''}','${d2}') `; + + let skulist=item['skulist'] || []; + for(var j=0;jci.CategoryId==item.CategoryId && ci.SubCategoryId==SubCategoryId); + const skud=skud_index>=0?(allSKUData[skud_index] || {}) : {}; + stock_values+=` ('${seq}','${StoreId}','${d2}','${item.CategoryName}','${item.CategoryId}','${SubCategoryName}','${SubCategoryId}','${skud['subcat_facing']}','${(skud['brand_facing'])}','${(skud['ImageName']!=null?skud['ImageName']:'')}','${d2}') `; + } + } + + let add_StockHdr=`INSERT INTO ${AppTables.SHARE_OF_SHELF_IMAGE} (STORE_ID,VISIT_DATE,CATEGORY_ID,CATEGORY,IMAGE,ADDED_DATE) VALUES ${values} `; + let add_Stock=`INSERT INTO ${AppTables.SHARE_OF_SHELF_FACING_DATA} (COMMON_ID,STORE_ID,VISIT_DATE,CATEGORY,CATEGORY_ID,SUB_CATEGORY,SUB_CATEGORY_ID,SUB_CATEGORY_STOCK,STOCK,IMAGE1,ADDED_DATE) VALUES ${stock_values} `; + + await txn.executeSql(add_StockHdr,[],async function (txn2, txnres) { + console.log('stock facing header added'); + await txn.executeSql(add_Stock,[],async function (txn2, txnres) { + console.log('stock facing added'); + notify('Stock facing updated successfully'); + setProcessing(false); + props.navigation.goBack(); + },function (txnE,txnerr) { console.log(txnerr);setProcessing(false);notify('Cannot add stock facing') },); + },function (txnE,txnerr) { console.log(txnerr);setProcessing(false);notify('Cannot add stock facing') },); + }); + } catch (err) { + console.log(err); + } + } + + + async function validate(){ + let isValid=true; + var i=0,j=0; + let HdrImgAllowIndex=KPIFields.findIndex(i=>i.KPIFieldName=='HeaderImageAllow'); + let HdrImgAllowObj=HdrImgAllowIndex>=0?KPIFields[HdrImgAllowIndex]:{}; + let isHdrImgAllow=HdrImgAllowIndex>=0?HdrImgAllowObj['KPIFieldEnable']:true; + + let ChildImgAllowIndex=KPIFields.findIndex(i=>i.KPIFieldName=='ChildImageAllow'); + let ChildImageAllowObj=ChildImgAllowIndex>=0?KPIFields[ChildImgAllowIndex]:{}; + let isChildImageAllow=ChildImgAllowIndex>=0?ChildImageAllowObj['KPIFieldEnable']:false; + await Promise.all( + brandData.map(async (item,index) => { + + + if(isValid){ + let catId=item.CategoryId; + let cimgData=catImages.find(ci=>ci.CategoryId==catId) || {}; + if(StoreCameraAllow && isHdrImgAllow==true && (cimgData.ImagePath== null || cimgData.ImagePath=='')){ + notify('Please click image for '+item.CategoryName,'SHORT'); + isValid=false; + } + else{ + let skulist=item.skulist || []; + if(skulist.length>0){ + await Promise.all( + skulist.map(async (skuItem,skuIndex) => { + if(isValid){ + let skuData=SKUStockData.find(ci=>ci.CategoryId==item.CategoryId && ci.SubCategoryId==skuItem.SubCategoryId ) || {}; + + + if(StoreCameraAllow && isChildImageAllow==true && ( skuData.ImagePath== null || skuData.ImagePath=='')){ + notify('Please click image for '+skuItem.SubCategoryName,'SHORT'); + isValid=false; + } + else if(skuData.subcat_facing!==0 && (skuData.subcat_facing==null || skuData.subcat_facing=='')){ + notify('Please enter sub category facing for '+skuItem.SubCategoryName,'SHORT'); + isValid=false; + }else if(skuData.subcat_facing!==0 && (skuData.subcat_facing!=null && skuData.subcat_facing!='' && skuData.subcat_facing.includes('.'))){ + notify('Please enter sub category facing in whole number for '+skuItem.SubCategoryName,'SHORT'); + isValid=false; + }else if(skuData.brand_facing!==0 && (skuData.brand_facing==null || skuData.brand_facing=='')){ + notify('Please enter brand facing for '+skuItem.SubCategoryName,'SHORT'); + isValid=false; + }else if(skuData.brand_facing!==0 && (skuData.brand_facing!=null && skuData.brand_facing!='' && skuData.brand_facing.includes('.'))){ + notify('Please enter brand facing in whole number for '+skuItem.SubCategoryName,'SHORT'); + isValid=false; + }else if(parseInt(skuData.brand_facing)>parseInt(skuData.subcat_facing)){ + notify('Brand facing value should be less than or equal to sub category facing value for '+skuItem.SubCategoryName,'LONG'); + isValid=false; + }else{ + + } + } + }) + ); + } + } + } + }) + ); + + console.log('isValid:',isValid); + return isValid; + } + + function onStockValChange(item,skuItem,val,key,type=''){ + if(val!=''){ + let isValid=validateNumber(val,type); + if(!isValid){ + return; + } + } + + let allSKUData=SKUStockData; + let defData={'CategoryId':item.CategoryId,'SubCategoryId':skuItem.SubCategoryId}; + const skud_index=allSKUData.findIndex(i=>i.CategoryId==item.CategoryId && i.SubCategoryId==skuItem.SubCategoryId); + const skud=skud_index>=0?(allSKUData[skud_index] || defData) : defData; + skud[key]=val; + + + skud_index>=0?allSKUData[skud_index]=skud:allSKUData.push(skud); + setSKUStockData(allSKUData); + setHasUnsavedChanges(true); + setrerenderdata(!rerenderdata); + } + + function _render_Alert(){ + return ( + + + {setShowAlert(false)}}> + Cancel + + {saveData()}}> + Yes + + + + ) + } + + return ( + + {processing && } + + {_render_Alert()} + {setShowCamera(false);getImage(imgData)}} showCamera={showCamera} onHideCamera={()=>{setShowCamera(false);}}/> + + + + { Object.keys(storeData).length>0 && + + + { + const cat=item; + const catIndex=index; + const cindex=catImages.findIndex(i=>i.CategoryId==item.CategoryId); + const cimgName=cindex>=0?(catImages[cindex]?catImages[cindex].ImageName:''):''; + const cimgPath=cindex>=0?(catImages[cindex]?catImages[cindex].ImagePath:''):''; + const showIMg=cimgPath!='' && cimgPath!=null; + + let HdrImgAllowIndex=KPIFields.findIndex(i=>i.KPIFieldName=='HeaderImageAllow'); + let HdrImgAllowObj=HdrImgAllowIndex>=0?KPIFields[HdrImgAllowIndex]:{}; + let isHdrImgAllow=HdrImgAllowIndex>=0?HdrImgAllowObj['KPIFieldEnable']:true; + + let ChildImgAllowIndex=KPIFields.findIndex(i=>i.KPIFieldName=='ChildImageAllow'); + let ChildImageAllowObj=ChildImgAllowIndex>=0?KPIFields[ChildImgAllowIndex]:{}; + let isChildImageAllow=ChildImgAllowIndex>=0?ChildImageAllowObj['KPIFieldEnable']:false; + + + return( + + + + {item.CategoryName} + + {isHdrImgAllow==true && + + { !showIMg && + {openCamera('1',item)}}> + + + } + { showIMg && + + + {/* */} + {openCamera('1',item)}}> + + + + } + + } + + + { + + { + const skus=item; + const sku_index=index; + let thisCatSkuData_i=SKUStockData.findIndex(i=>i.CategoryId==cat.CategoryId && i.SubCategoryId==skus.SubCategoryId); + let thisCatSkuData=thisCatSkuData_i>=0?(SKUStockData[thisCatSkuData_i] || {}):{}; + let brand_facing=thisCatSkuData.brand_facing!=null?thisCatSkuData.brand_facing:''; + let subcat_facing=thisCatSkuData.subcat_facing!=null?thisCatSkuData.subcat_facing:''; + + let childImgPath=thisCatSkuData.ImagePath!=null?thisCatSkuData.ImagePath:''; + const showSubCatIMg=childImgPath!='' && childImgPath!=null; + + const input1IsFocused=skus.input1IsFocused; + const input2IsFocused=skus.input2IsFocused; + + if(input2IsFocused==1){ + console.log('set focus to ',cat.CategoryName,skus.SubCategoryName,'input 2') + } + + return( + + {skus.SubCategoryName} + + {isChildImageAllow==true && + + { !showSubCatIMg && + {openCamera('2',cat,skus)}}> + + + } + { showSubCatIMg && + + + {openCamera('2',cat,skus)}}> + + + + } + + } + + + + + Sub Category Facing + {inputRefs.current['input1_'+cat.CategoryId+'_'+skus.SubCategoryId]=reff;}} + style={[customStyle.openStk_prd_inputStyle]} + placeholder="" + autoComplete='off' + placeholderTextColor={PageTheme.$placeholder_color} + value={(subcat_facing+'' || '')} + keyboardType='numeric' + onSubmitEditing={()=>{focusToNext(cat,catIndex,skus,sku_index,'1')}} + onChangeText={(val)=>{ onStockValChange(cat,skus,val,'subcat_facing','numeric')}} + /> + + + + Brand Facing + {inputRefs.current['input2_'+cat.CategoryId+'_'+skus.SubCategoryId]=reff;}} + style={[customStyle.openStk_prd_inputStyle]} + placeholder="" + autoComplete='off' + placeholderTextColor={PageTheme.$placeholder_color} + value={(brand_facing+'' || '')} + keyboardType='numeric' + onSubmitEditing={()=>{focusToNext(cat,catIndex,skus,sku_index,'2')}} + // onKeyPress={(e)=>{let isDot=e.nativeEvent.key=='.'; return isDot}} + onChangeText={(val)=>{ onStockValChange(cat,skus,val,'brand_facing','numeric')}} + /> + + + + + + ) + }}/> + } + + + ); + }} + /> + + } + + {submitOpeningStock()}}/> + + + + + ); + } + + +export default connect(mapStateToProps, mapDispatchToProps)(ShareOfShelf); \ No newline at end of file diff --git a/PerformicsSrc/src/screens/ShareOfShelfOneApp.js b/PerformicsSrc/src/screens/ShareOfShelfOneApp.js new file mode 100644 index 0000000..657bb1f --- /dev/null +++ b/PerformicsSrc/src/screens/ShareOfShelfOneApp.js @@ -0,0 +1,3166 @@ + +import React, { useState, useEffect, useRef } from 'react'; +import Container from '../components/container'; +import { useRoute } from '@react-navigation/native'; +import { globalStyles, customStyles, GetPageTheme } from "../styles/Global"; +import { StatusBar, Image, TextInput, View, Text, ScrollView, TouchableOpacity, Platform, PermissionsAndroid, FlatList, Alert, KeyboardAvoidingView, Animated, AppState, Keyboard, LogBox } from 'react-native'; +import { ReactReduxContext, connect, useSelector, useDispatch } from 'react-redux'; +import { mapStateToProps, mapDispatchToProps } from '../reducers/contextProvider'; +import SQLite from 'react-native-sqlite-2'; +import { notify } from '../components/notify'; +import moment from 'moment'; +import { getDownloadJson, getKPIFields, marktext1, marktext2, resizeImage, restore_ImageWithMetaData, validateNumber } from '../controller/functions'; +import { get_item, set_item, clear_item } from '../components/localStorage'; +import CustomHeader from '../components/customHeader'; +import { Card, Menu, Switch } from 'react-native-paper'; +import { AntDesign, Entypo, MaterialCommunityIcons } from '../components/icons'; +import { stat } from 'react-native-fs'; +import CustomLoader from '../components/CustomLoader'; +import LinearGradient from 'react-native-linear-gradient'; +import { AppTables } from '../constants/tableConstants'; +import * as RNFS from 'react-native-fs'; +import GradientButton from '../components/gradientButton'; + +import CustomModal from '../components/CustomModal'; +import { Q_getdefaltShareofSelf } from '../constants/ConstantQueries'; +import CustomCamera from '../components/Camera'; + +import CameraImg3 from '../assets/performics/camera_tick.svg'; +import CameraImg2 from '../assets/performics/camera_icon.svg'; +import CameraImg4 from '../assets/performics/camera_asterisk.svg'; +import CameraImg5 from '../assets/image/astrickcamera.svg'; +import ImageViewer from 'react-native-image-zoom-viewer'; +import MultiSelect from 'react-native-multiple-select'; +import ModalSelector from 'react-native-modal-selector' +import CameraGrey from '../assets/image/camera_icon_grey.svg'; + +import AddIcon from '../assets/performics/add_image.svg' +import BinIcon from '../assets/performics/delete_icon_red.svg' + +//jp +import { version, sloganline, appname, testurl, db, colors_Arr, common_ImagePath, ImageFolderPath, HierarchyTbls } from '../constants/constants'; + + + +function ShareOfShelfOneApp(props) { + const route = useRoute(); + const ST = props.StaticText || {}; + + // get all theme styles acc to current theme set + const PageTheme = GetPageTheme(props.DarkMode, route.name); + const customStyle = customStyles(props.DarkMode, route.name); + + const [processing, setProcessing] = useState(true); + const [loaderTitle, setLoaderTitle] = useState('loading...'); + const [isAdhocScreen, setIsAdhocScreen] = useState(false); + const [storeData, setStoreData] = useState({}); + const [StoreCameraAllow, setStoreCameraAllow] = useState(true); + const [currentMenu, setCurrentMenu] = useState({}); + const [brandData, setBrandData] = useState([]); + const [rerenderdata, setrerenderdata] = useState(0); + const [rerenderdata2, setrerenderdata2] = useState(0); + const [rerenderdata3, setrerenderdata3] = useState(0); + const [rerenderdata4, setrerenderdata4] = useState(0); + + const [SOSStockData, setSOSStockData] = useState([]); + const [AllSOSData, setAllSOSData] = useState([]); + const [showAlert, setShowAlert] = useState(false); + const [showImageAlert, setShowImageAlert] = useState(false); + const [hasUnsavedChanges, setHasUnsavedChanges] = useState(false); + const [showCamera, setShowCamera] = useState(false); + const [getImageProps, setGetImageProps] = useState({}); + const [KPIFields, setKPIFields] = useState([]); + const [showSwitchCamera, setShowSwitchCamera] = useState(false); + const [GridValue, setGridValue] = useState(false); + + const [SelectedImg, setSelectedImg] = useState(''); + const [showModal, setShowModal] = useState(false); + const [reCapImgModalObj, setReCapImgModalObj] = useState({}); + const [showImageSaveOp, setShowImageSaveOp] = useState(true); + const [ImgMadCount, setImgMadCount] = useState({ img1: 0, img2: 0 }); + const [FilteredPromoValues, setFilteredPromoValues] = useState([]); + const [ShowCatWise, setShowCatWise] = useState(false); + const [CatData, setCatData] = useState(false); + const [ColId, setColId] = useState(""); + const [ColName, setColName] = useState(""); + const [ItemsInView, setItemsInView] = useState([]); + + const [InputChange, setInputChange] = useState([]); + + const [zoomImageUrl, setZoomImageUrl] = useState([]); + const [show_zoomImage, setShow_zoomImage] = useState(false); + const Show_zoomImageRef = useRef(false); + const [refImageIndex, setrefImageIndex] = useState(0); + const zoomView = useRef(null); + + const hasUnsavedChangesRef = React.useRef(hasUnsavedChanges); + const WindowDataRef = React.useRef(SOSStockData); + const StoreIdRef = React.useRef(null); + const ScreenNameRef = React.useRef(''); + const PSGroupData = React.useRef(''); // Grouping data (Category/ SubCategory/ Brand ) for BG save fuunctionality with Partial Save Scenario + const BGPSAllow = React.useRef(false); + + const onViewableItemsChanged = ({ viewableItems, }) => { + // Do stuff + console.log("onViewableItemsChanged called:") + setItemsInView(viewableItems); + }; + + console.log('storeDatastoreData----', storeData); + + + // error field states + const [errorfield, setErrorField] = useState({}); + const [error, setError] = useState(false); + + const FlatLConfCallbackPairs = useRef([{ viewabilityConfig: { itemVisiblePercentThreshold: 30 }, onViewableItemsChanged }]); + + const inputRefs = useRef({}); + + const d1 = new Date(); + const d2 = moment(d1).format('MM/DD/YYYY'); + + const handleAddImages = (cat, type = '1', cameraType = '1', qtn = {}, skus = {}, addImg = "0") => { + // setAddImages(prev => [...prev, prev.length]); + let splitItem = { Image1: "", Image1Name: "", img1Required: false, addImg: 1 } + + let window = cat || {}; + + let allData = SOSStockData; + let defData = { 'SOSDefinitionId': window.SOSDefinitionId }; + const wind_index = allData.findIndex(i => i.SOSDefinitionId == window.SOSDefinitionId); + let wind = wind_index >= 0 ? allData[wind_index] : defData; + console.log("wind----------1", wind) + + + console.log("test 4", splitItem, cameraType) + + if (cameraType == '1') { + let splitItem = { Image1: "", Image1Name: "", img1Required: false, addImg: 1 } + wind.Images.push(splitItem) + wind_index >= 0 ? allData[wind_index] = wind : allData.push(wind); + console.log('split image updated 12--', wind_index, allData); + WindowDataRef.current = allData + setSOSStockData(allData); + BgUnsavedChanges(true) + setrerenderdata2(!rerenderdata2); + } + }; + + const handleDelete = (reCapImgModalObj) => { + let { cat, splitChildItem, splitChildItemIndex, skus, type, } = reCapImgModalObj + let window = cat || {}; + let allData = SOSStockData; + let defData = { 'SOSDefinitionId': window.SOSDefinitionId }; + const wind_index = allData.findIndex(i => i.SOSDefinitionId == window.SOSDefinitionId); + let wind = wind_index >= 0 ? allData[wind_index] : defData; + console.log("handleDelete-----", wind) + + if (type == '1') { + wind.Images = wind?.Images?.filter((_, i) => i !== splitChildItemIndex); + wind_index >= 0 ? allData[wind_index] = wind : allData.push(wind); + console.log('split image updated 12--', wind_index, allData); + setTimeout(() => { + cancelImage() + }, 0) + WindowDataRef.current = allData + setSOSStockData(allData); + } else if (type == '2') { + + var SKUData = wind['SKUData'] || []; + var childIndex = SKUData.findIndex(i => i.SOSChildValue == skus.SOSChildValue); + + var childData = childIndex >= 0 ? SKUData[childIndex] : {}; + var ChildImages = childData['ChildImages'] || []; + + childData['ChildImages'] = ChildImages?.filter((_, i) => i !== splitChildItemIndex);; + childIndex >= 0 ? SKUData[childIndex] = childData : SKUData.push(childData); + wind['SKUData'] = SKUData; + wind_index >= 0 ? allData[wind_index] = wind : allData.push(wind); + + setTimeout(() => { + cancelImage() + }, 0) + setSOSStockData(allData); + BgWindowData(allData) + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata3); + } + + }; + useEffect(() => { + setLoaderTitle(ST.Loading + '...') + let params = props.route.params ? props.route.params : {}; + let storeData1 = params.storeData || {}; + let menu1 = params.menu || {}; + let ShowCatWise1 = params.ShowCatWise != null ? params.ShowCatWise : false; + let CatData1 = params.CatData != null ? params.CatData : {}; + let isAdhoc = params.isAdhoc || false; + + + setIsAdhocScreen(isAdhoc); + setShowCatWise(ShowCatWise1); + setCatData(CatData1); + setStoreData(storeData1); + setCurrentMenu(menu1); + let cameraAllow = storeData1.CameraAllow == 'true' || storeData1.CameraAllow == 1 ? true : false; + setStoreCameraAllow(cameraAllow); + StoreIdRef.current = storeData1.StoreId + ScreenNameRef.current = menu1.ScreenName + getData(storeData1, menu1, CatData1, ShowCatWise1); + const AppStateSubscription = AppState.addEventListener('change', (pro) => { _handleAppStateChange(pro) }); + const unsubscribe = props.navigation.addListener('beforeRemove', onBeforeRemove); + + return function cleanup() { + AppStateSubscription.remove(); + return unsubscribe; + }; + }, []); + + const _handleAppStateChange = async (nextAppState) => { + console.log("WindowsStr------------", nextAppState + "called") + if ((nextAppState == 'background' || nextAppState === "inactive") && hasUnsavedChangesRef.current == true) { + let newData = { + storeBGData: WindowDataRef.current, + menuName: ScreenNameRef.current, + StoreId1: StoreIdRef.current, + visiteDate: d2, + BGPSAllow: BGPSAllow.current, + PSGroupData: PSGroupData.current, + } + + let WindowsStr = JSON.stringify(newData) + console.log("WindowsStr------------", WindowsStr) + await set_item('storeData', WindowsStr); + } + } + + useEffect(() => { + const unsubscribe = props.navigation.addListener('beforeRemove', onBeforeRemove); + return unsubscribe; + }, [hasUnsavedChanges]); + + useEffect(() => { + const unsubscribe = props.navigation.addListener('beforeRemove', onBeforeRemove); + return unsubscribe; + }, [showCamera]); + + + + + + + + + function BgUnsavedChanges(val) { + hasUnsavedChangesRef.current = val + setHasUnsavedChanges(val); + } + + function BgWindowData(val) { + WindowDataRef.current = val + setSOSStockData(val); + } + + function UpdateShow_zoomImageRef(val) { + Show_zoomImageRef.current = val + setShow_zoomImage(val); + } + + + + + function onBeforeRemove(e) { + if (showCamera == true) { + e.preventDefault(); + setShowCamera(false); + } + else if (Show_zoomImageRef.current == true) { + e.preventDefault(); + UpdateShow_zoomImageRef(false); + } + else { + console.log('hasUnsavedChanges:', hasUnsavedChanges); + if (hasUnsavedChanges == true) { + console.log('hasUnsavedChanges is true'); + e.preventDefault(); // Prevent default behavior of leaving the screen + onRemoveScreen(e); + } + else { + return; + } + } + } + + function onRemoveScreen(e) { + Alert.alert( + "", + "Do you really want to exit the screen?", + [ + { + text: "Cancel", + onPress: () => { }, + style: "cancel" + }, + { + text: "OK", onPress: async () => { + // setHasUnsavedChanges(false); + BgUnsavedChanges(false) + await clear_item('storeData') + props.navigation.dispatch(e.data.action); + } + } + ] + ); + } + + async function getData(storeData1, menu1, CatData1 = {}, ShowCatWise1 = false) { + try { + let { StoreId, ChainId, StateId, StoreTypeId } = storeData1; + let { PSAllow, PSTableName } = menu1; + PSTableName = PSTableName != null ? PSTableName : ''; + PSAllow = PSAllow != null ? PSAllow : false; + + let idCol = '', nameCol = ''; + if (PSTableName.toLowerCase() == HierarchyTbls.Master_Category.toLowerCase()) { + idCol = 'CategoryId', nameCol = 'CategoryName'; + } + else if (PSTableName.toLowerCase() == HierarchyTbls.Master_Brand.toLowerCase()) { + idCol = 'BrandId', nameCol = 'BrandName'; + } + else { + idCol = 'SubCategoryId', nameCol = 'SubCategoryName'; + } + let IdVal = CatData1[idCol]; + let NameVal = CatData1[nameCol]; + + let FilteredIds = []; + if (ShowCatWise1) { + FilteredIds = await getWindowFilterIds(idCol, IdVal, storeData1); + } + setFilteredPromoValues(FilteredIds); + + + let AllKPIFields = await getKPIFields(menu1); + setKPIFields(AllKPIFields); + + // set switch camera flag as defined in mapping menu flag (if exists) + let SwitchingCameraI = AllKPIFields.findIndex(i => i.KPIFieldName == 'SwitchingCamera'); + let SwitchingCameraObj = SwitchingCameraI >= 0 ? AllKPIFields[SwitchingCameraI] : {}; + let SwitchingCamera = SwitchingCameraI >= 0 ? SwitchingCameraObj['KPIFieldEnable'] : false; + setShowSwitchCamera(SwitchingCamera); + + let sosCheckAssortmentI = AllKPIFields.findIndex(i => i.KPIFieldName == 'SOSCheckAssortment') + let sosCheckAssortmentObj = sosCheckAssortmentI >= 0 ? AllKPIFields[sosCheckAssortmentI] : {}; + let sosCheckAssortment = sosCheckAssortmentI >= 0 ? sosCheckAssortmentObj['KPIFieldEnable'] : false; + + let sosMSLOnlyI = AllKPIFields.findIndex(i => i.KPIFieldName == 'SOSMSLOnly') + let sosMSLOnlyObj = sosMSLOnlyI >= 0 ? AllKPIFields[sosMSLOnlyI] : {}; + let sosMSLOnly = sosMSLOnlyI >= 0 ? sosMSLOnlyObj['KPIFieldEnable'] : false; + + let AssortIds = sosCheckAssortment == true ? await getAssortmentIds(storeData1, sosMSLOnly) : ''; + console.log('AssortIds:', sosCheckAssortment, sosMSLOnly, AssortIds); + + //storeBGData check + let storeBGData1 = [], bgStoreJson = {}, isBgDataExists = false; + let windData = await get_item('storeData') + if (windData != null && windData != '') { + let StoreJson = JSON.parse(windData) + let { storeBGData, menuName, StoreId1, visiteDate } = StoreJson + if (storeBGData.length > 0 && menuName == menu1.ScreenName && StoreId1 == StoreId && visiteDate == d2) { + isBgDataExists = true; + storeBGData1 = storeBGData; + bgStoreJson = StoreJson + // setSOSStockData(storeBGData); + BgUnsavedChanges(true) + BgWindowData(storeBGData) + } + } + + // call this after storeBGData check + if (PSAllow) { + // if Partial save is allowed then add the currently active category or group in BG var + BGPSAllow.current = true; + PSGroupData.current = CatData1; + } + + await db.transaction(async function (txn) { + + //get Data from masters with saved data of any + let FilterIdsJoin = FilteredIds.length > 0 ? FilteredIds.join(',') : ''; + let join1 = ` INNER JOIN Mapping_StoreShareOfShelf m on p.SOSDefinitionId=m.SOSDefinitionId `; + let join5 = ` LEFT OUTER JOIN ${AppTables.SOS_HDR_DATA} wd on p.SOSHeaderValue=wd.SOS_HDR_VALUE and wd.STORE_ID='${StoreId}' and wd.VISIT_DATE='${d2}'`; + let selectlist1 = ` DISTINCT p.SOSDefinitionId,p.HeaderAddImageAllow,p.HeaderAddImageMax,p.ChildAddImageAllow,p.ChildAddImageMax, wd.SOS_HEADER_ID as SOSHeaderId,p.SOSHeaderTable,p.SOSRefImage,p.SOSRefImagePopUP,p.SOSHeaderField,p.SOSHeaderValue,p.HeaderName as HeaderName,p.SOSHeaderFacing,p.SOSHeaderFacingLable,p.SOSHeaderImage,p.SOSHeaderImageCount,p.SOSHeaderImageGrid,wd.SOS_HDR_FACING as SOSHdrFacing `; + // let selectlist1 = ` DISTINCT p.SOSDefinitionId,wd.SOS_HEADER_ID as SOSHeaderId,p.SOSHeaderTable,p.SOSRefImage,p.SOSRefImagePopUP,p.SOSHeaderField,p.SOSHeaderValue,p.HeaderName as HeaderName,p.SOSHeaderFacing,p.SOSHeaderFacingLable,p.SOSHeaderImage,p.SOSHeaderImageCount,p.SOSHeaderImageGrid,wd.SOS_HDR_FACING as SOSHdrFacing `; + // let selectlist2=` DISTINCT p.SOS_HEADER_ID as SOSHeaderId,m.SOSHeaderTable,m.SOSHeaderField,p.SOS_HDR_VALUE as SOSHeaderValue,p.HEADER_NAME as HeaderName,m.SOSHeaderFacing,m.SOSHeaderFacingLable,m.SOSHeaderImage,m.SOSHeaderImageCount,m.SOSHeaderImageGrid,p.SOS_HDR_FACING as SOSHdrFacing `; + let q = `SELECT ${selectlist1} from Master_ShareOfShelfDefinition p ${join1} ${join5} Where (m.StoreId ='${StoreId}' or m.StoreId = ${StoreId}) + ${sosCheckAssortment == true ? ` and p.SOSHeaderValue in (${AssortIds}) ` : ''} `; + if (ShowCatWise1 == true) { + q += ` and p.SOSHeaderValue in (${FilterIdsJoin}) `; + } + // q+=` group by wd.SOS_HEADER_ID order by p.HeaderName `; + q += ` group by p.SOSHeaderValue order by p.HeaderName `; + + // console.log('q:',q); + await txn.executeSql(q, [], async function (txn2, txnres) { + // console.log('soscats heasder added:',txnres.rows.length); + + if (txnres.rows.length > 0) { + let arr = [], allCats = [], images = []; + for (var i = 0; i < txnres.rows.length; i++) { + let data = txnres.rows.item(i); + console.log('soscats heasder added:', data); + inputRefs.current['input_' + data.SOSHeaderValue] = ''; + let AllCData = await getChilds(storeData1, data, menu1, sosMSLOnly, sosCheckAssortment); + let allChilds = AllCData['allChilds'] || []; + let childData = AllCData['childData'] || []; + let WindowQuestions = AllCData['WindowQuestions'] || []; + let WindowQA = AllCData['WindowQA'] || {}; + let windowChildImage = AllCData['ChildImages'] || [] + data['skulist'] = allChilds; + + let animatedHeight = new Animated.Value(450); + data.animatedHeight = animatedHeight + + arr.push(data); + let HdrImages = await getHdrImages(storeData1, data, menu1, data.SOSHeaderImageCount); + + let WQr = {}; //await getWindowQuestions(data,storeData1,menu1); + // let WindowQuestions = WQr['WindowQuestions'] || []; + // let WindowQA= WQr['WindowQA'] || {}; + let defData = { 'SOSDefinitionId': data.SOSDefinitionId, 'SOSHeaderValue': data.SOSHeaderValue, 'SOSHdrFacing': data.SOSHeaderId != null ? data.SOSHdrFacing : '', 'Images': HdrImages, 'SKUData': childData, 'WindowQA': WindowQA, WindowQuestions: WindowQuestions }; + data['WindowQuestions'] = WindowQuestions; + allCats.push(defData); + + let imgObj = { imgIndex: (i + 1), url: data.SOSRefImage, props: {} } + images.push(imgObj); + + if (i == txnres.rows.length - 1) { + let { menuName, StoreId1, visiteDate } = bgStoreJson + if (!isBgDataExists) { + BgWindowData(allCats) + } + setAllSOSData(arr); + setZoomImageUrl(images); + + // setSOSStockData(allCats); + setProcessing(false); + } + } + } + else { + setProcessing(false); + notify("No data found"); + } + + }, function (txnE, txnerr) { console.log(txnerr); },); + // setProcessing(false); + }); + } catch (err) { + console.log(err); + } + } + + async function getWindowFilterIds(idCol, IdVal, storeData1) { + let AllIds = []; + let { StoreId } = storeData1 + return new Promise((resolve, reject) => { + + db.transaction(async function (txn) { + let join = ` inner join Mapping_StoreShareOfShelf s on w.SOSDefinitionId=s.SOSDefinitionId `; + let q = `Select Distinct w.* from Master_ShareOfShelfDefinition w ${join} where (s.StoreId='${StoreId}' or s.StoreId= ${StoreId}) `; + await txn.executeSql(q, [], async function (txn2, txnres) { + if (txnres.rows.length > 0) { + let Wind_data = txnres.rows.item(0); + let { SOSHeaderTable } = Wind_data; + SOSHeaderTable = SOSHeaderTable != null ? SOSHeaderTable : ''; + + let filterIdsCol = '', filterNamesCol = ''; + if (SOSHeaderTable.toLowerCase() == HierarchyTbls.Master_Category.toLowerCase()) { + filterIdsCol = 'CategoryId', filterNamesCol = 'CategoryName'; + } + else if (SOSHeaderTable.toLowerCase() == HierarchyTbls.Master_Brand.toLowerCase()) { + filterIdsCol = 'BrandId', filterNamesCol = 'BrandName'; + } + else if (SOSHeaderTable.toLowerCase() == HierarchyTbls.Master_Product.toLowerCase()) { + filterIdsCol = 'ProductId', filterNamesCol = 'ProductName'; + } + else { + filterIdsCol = 'SubCategoryId', filterNamesCol = 'SubCategoryName'; + } + + let FIdsQ = `Select Distinct p.${filterIdsCol},p.${filterNamesCol} from Product_Master p where (p.${idCol}='${IdVal}' or p.${idCol}= ${IdVal}) `; + console.log('FIdsQ:', FIdsQ); + await txn.executeSql(FIdsQ, [], async function (txn2, txnres2) { + if (txnres.rows.length > 0) { + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + let id_value = data[filterIdsCol]; + AllIds.push(id_value); + if (i == txnres2.rows.length - 1) { + resolve(AllIds) + } + } + } + else { + resolve([]); + } + }, function (txnE, txnerr) { console.log(txnerr); resolve(AllIds) }); + + + } + else { + resolve(AllIds) + } + }, function (txnE, txnerr) { console.log(txnerr); resolve(AllIds) },); + }); + }).then((val) => { + return val + }).catch((err) => { + console.log(err); + return AllIds; + }); + } + + async function getAssortmentIds(storeData1 = {}, sosMSLOnly = false) { + let { StoreId, ChainId, StateId, StoreTypeId, StoreClassId, StoreCategoryId } = storeData1; + let AllIds = []; + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + let join1 = ` INNER JOIN Mapping_StoreShareOfShelf m on p.SOSDefinitionId=m.SOSDefinitionId `; + let q = `select Distinct p.SOSHeaderTable,p.SOSHeaderField from Master_ShareOfShelfDefinition p ${join1} Where (m.StoreId ='${StoreId}' or m.StoreId = ${StoreId}) and p.SOSHeaderTable!='' and p.SOSHeaderTable is not null `; + await txn.executeSql(q, [], async function (txn2, txnres) { + if (txnres.rows.length > 0) { + let data = txnres.rows.item(0); + let SOSHeaderTable = data['SOSHeaderTable']; + let SOSHeaderField = data['SOSHeaderField']; + + let join2 = ` INNER JOIN Mapping_ProductAssortmentStorewise mp on t1.ProductId=mp.ProductId `; + let q2 = `select distinct t1.${SOSHeaderField} from Product_Master t1 ${join2} where (mp.StoreId='${StoreId}' or mp.StoreId= ${StoreId}) ${sosMSLOnly == true ? ` and (mp.MSL='true' or mp.MSL='1' or mp.MSL =1) ` : ''} `; + await txn.executeSql(q2, [], async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + let id = data[SOSHeaderField]; + AllIds.push(id); + if (i == txnres2.rows.length - 1) { + let AllIdsJoin = AllIds.join(','); + resolve(AllIdsJoin); + } + } + } + else { + resolve('') + } + }, function (txnE, txnerr) { console.log(txnerr); resolve('') },); + } + else { + resolve('') + } + }, function (txnE, txnerr) { console.log(txnerr); resolve('') },); + }); + }).then((val) => { + return val; + }).catch((err) => { + console.log(err); + return ''; + }); + } + + async function getChildAssortmentIds(storeData1 = {}, sosMSLOnly = false) { + let { StoreId, ChainId, StateId, StoreTypeId, StoreClassId, StoreCategoryId } = storeData1; + let AllIds = []; + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + let join1 = ` INNER JOIN Mapping_StoreShareOfShelf m on p.SOSDefinitionId=m.SOSDefinitionId `; + let q = `select Distinct p.SOSChildTable,p.SOSChildField from Master_ShareOfShelfDefinition p ${join1} Where (m.StoreId ='${StoreId}' or m.StoreId = ${StoreId}) and p.SOSChildTable!='' and p.SOSChildTable is not null `; + + await txn.executeSql(q, [], async function (txn2, txnres) { + if (txnres.rows.length > 0) { + let data = txnres.rows.item(0); + let SOSChildTable = data['SOSChildTable']; + let SOSChildField = data['SOSChildField']; + + let join2 = ` INNER JOIN Mapping_ProductAssortmentStorewise mp on t1.ProductId=mp.ProductId `; + let q2 = `select distinct t1.${SOSChildField} from Product_Master t1 ${join2} where (mp.StoreId='${StoreId}'or mp.StoreId= ${StoreId}) ${sosMSLOnly == true ? ` and (mp.MSL='true' or mp.MSL='1') ` : ''} `; + await txn.executeSql(q2, [], async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + let id = data[SOSChildField]; + AllIds.push(id); + if (i == txnres2.rows.length - 1) { + let AllIdsJoin = AllIds.join(','); + resolve(AllIdsJoin); + } + } + } + else { + resolve('') + } + }, function (txnE, txnerr) { console.log(txnerr); resolve('') },); + } + else { + resolve('') + } + }, function (txnE, txnerr) { console.log(txnerr); resolve('') },); + }); + }).then((val) => { + return val; + }).catch((err) => { + console.log(err); + return ''; + }); + } + + async function getWindowQuestions(window, storeData1, menu1, SOSHeaderValue) { + // console.log("window-----", window.SOSDefinitionId) + let obj = { 'WindowQA': {}, 'WindowQuestions': [] } + return new Promise((resolve, reject) => { + + db.transaction(async function (txn) { + var q = '', selectlist = '', join = '', join2 = ''; + + selectlist = ` DISTINCT wq.SOSQuestionId,mq.SOSDefinitionId,q.SOS_CHILD_VALUE,wq.SOSQuestionCode,wq.SOSQuestionName,wq.QuestionType,wq.SOSQShowCamera,wq.SOSQCameraMandatory,wq.SOSQLengthValidationRequired,wq.SOSQMinimumChar,wq.SOSQMaximumChar,wq.SOSQDecimalPoint,wq.SOSQDateRangeMin,wq.SOSQDateRangeMax,wq.SOSQVoiceLengthInMinutes,wq.SOSQDefaultQuestionEnable,(CASE WHEN q.QUESTION_ID is not null THEN 1 ELSE 0 END) isInserted,q.IS_DISABLED,q.ANSWER as Answer,q.ANSWER_ID as AnswerId,q.MULTI_OPTIONS_IDS as multi_op_ids,q.IMAGE_ALLOW1 as SOSAShowCamera,q.IMAGE1 as Image1 `; + join2 = ` Left Outer Join ${AppTables.SOS_CHILD_QUES_DATA} q on wq.SOSQuestionId=q.QUESTION_ID and q.STORE_ID='${storeData1.StoreId}' and q.SOS_DEFINITION_ID='${window.SOSDefinitionId}' and q.SOS_HDR_VALUE='${SOSHeaderValue}' and q.SOS_CHILD_VALUE='${window.SOSChildValue}' and q.VISIT_DATE='${d2}'`; + join = ` inner join Mapping_ShareOfShelfQuestion mq on mq.SOSQuestionId=wq.SOSQuestionId `; + q = `select ${selectlist} from Master_ShareOfShelfQuestion wq ${join} ${join2} where (mq.SOSDefinitionId='${window.SOSDefinitionId}' or mq.SOSDefinitionId= ${window.SOSDefinitionId}) order by wq.SOSQuestionSequence `; + + console.log("getWindowQuestions---", q) + await txn.executeSql(q, [], async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + let arr = []; + let wqa_obj = {}; + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + let { isInserted } = data; + console.log("getWindowQuestions---data-",) + let answers = []; + data.SOSQDefaultQuestionEnable = data.SOSQDefaultQuestionEnable == 1 || data.SOSQDefaultQuestionEnable == 'true' ? true : false; + // data['isDisabled']=!data.SOSQDefaultQuestionEnable; + if (isInserted) { + data['isDisabled'] = data.IS_DISABLED == true || data.IS_DISABLED == "true" || data.IS_DISABLED == 1 ? true : false; + } + else { + + data['isDisabled'] = !data.SOSQDefaultQuestionEnable; + } + if (data.QuestionType == 'Multi choice list' || data.QuestionType == 'Single choice list' || data.QuestionType == 'Rating') { + answers = await getWindowAnswers(data); + console.log("answer------", answers) + if (data.QuestionType == 'Rating') { + data.showRating = false; + } + } + else if (data.QuestionType == 'Date') { + data.showDatePicker = false; + } + data['Answers'] = answers; + + let id_key = data.SOSQuestionId + "_ChildId_" + data.SOS_CHILD_VALUE + '_AnswerId'; + let ans_key = data.SOSQuestionId + "_ChildId_" + data.SOS_CHILD_VALUE + '_Answer'; + let multi_key = data.SOSQuestionId + "_ChildId_" + data.SOS_CHILD_VALUE + '_MultiOption'; + let date_key = data.SOSQuestionId + "_ChildId_" + data.SOS_CHILD_VALUE + '_Date'; + let img_key = data.SOSQuestionId + "_ChildId_" + data.SOS_CHILD_VALUE + '_ImagePath1'; + let imgname_key = data.SOSQuestionId + "_ChildId_" + data.SOS_CHILD_VALUE + '_ImageName1'; + let rating_key = data.SOSQuestionId + "_ChildId_" + data.SOS_CHILD_VALUE + '_Rating'; + + let cam_allow = data.SOSQuestionId + '_Camera_allow'; + + + + let showImageTag = (data.SOSShowCamera == 'true' || data.SOSShowCamera == 1); + + data.AnswerId != null ? wqa_obj[id_key] = data.AnswerId : ''; + data.Answer != null ? wqa_obj[ans_key] = data.Answer : ''; + + let selansid = data.AnswerId != null ? data.AnswerId : ''; + + if (data.QuestionType == 'Multi choice list' && (selansid != '' || selansid === 0) && data.multi_op_ids != null) { + selansid = data.multi_op_ids ? data.multi_op_ids.split(',') : []; + wqa_obj[multi_key] = data.multi_op_ids; + } + + if ((data.QuestionType == 'Single choice list' || data.QuestionType == 'Multi choice list') && selansid != '' && selansid != null) { + if (data.Answers && data.Answers.length > 0) { + for (var k = 0; k < data.Answers.length; k++) { + let ansss = data.Answers[k]; + let isandImgAl = (ansss.SOSAShowCamera == 1 || ansss.SOSAShowCamera == 'true'); + if (data.QuestionType == 'Single choice list' && (isandImgAl && ansss.AnswerId == selansid)) { + //...changes by shaikh + wqa_obj[cam_allow] = isandImgAl; + showImageTag = true; + } + else if (data.QuestionType == 'Multi choice list' && (isandImgAl && selansid.indexOf(ansss.AnswerId) >= 0)) { + showImageTag = true; + } + } + } + } + + if (showImageTag && data.Answer != null) { + let imgPath = (Platform.OS == 'ios' ? 'file://' : '') + ImageFolderPath + menu1.ScreenName + "/" + data.Image1; + wqa_obj[imgname_key] = data.Image1; + wqa_obj[img_key] = imgPath; + } + + + + if (data.QuestionType == 'Date' && data.Answer != null) { + let dayonly = moment().format('DD'); + let actual_date = data.Answer ? data.Answer.split('/') : []; + let month = actual_date[0], year = actual_date[1]; + let fulldate = month + '/' + dayonly + '/' + year; + wqa_obj[date_key] = fulldate; + + } + + arr.push(data); + + if (i == txnres2.rows.length - 1) { + obj['WindowQuestions'] = arr; + console.log("wqa_obj-------", wqa_obj) + obj['WindowQA'] = wqa_obj; + resolve(obj) + } + } + } + else { + resolve(obj) + } + }, function (txnE, txnerr) { console.log(txnerr); resolve(obj) },); + }); + }).then((val) => { + return val + }).catch((err) => { + console.log(err); + return obj; + }); + } + + async function getWindowAnswers(qtn) { + + return new Promise((resolve, reject) => { + + db.transaction(async function (txn) { + var q = '', selectlist = ''; + selectlist = ` DISTINCT SOSAnswerId as AnswerId,SOSAnswerName as Answer,SOSAShowCamera,SOSACameraMandatory,SOSAQuestionEnable,SOSAQuestionDisable `; + q = `select ${selectlist} from Master_ShareOfShelfQuestion where (SOSQuestionId='${qtn.SOSQuestionId}' or SOSQuestionId= ${qtn.SOSQuestionId}) order by SOSASequence `; + + //console.log("getWindowAnswers----", q) + await txn.executeSql(q, [], async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + let arr = []; + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + arr.push(data); + if (i == txnres2.rows.length - 1) { + resolve(arr) + } + } + } + else { + resolve([]) + } + }, function (txnE, txnerr) { console.log(txnerr); resolve([]) },); + }); + }).then((val) => { + return val + }).catch((err) => { + console.log(err); + return []; + }); + } + + async function getHdrImages(storeData1, cat1, menu1, SOSHeaderImageCount) { + let allImages = []; + let { StoreId } = storeData1; + let { SOSHeaderId } = cat1; + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + let q = ` SELECT IMAGE1 as Image1,img1Required,ADD_IMAGES FROM ${AppTables.SOS_IMAGES} where SOS_HEADER_ID='${SOSHeaderId}' and TYPE='Header' and STORE_ID='${StoreId}' and VISIT_DATE='${d2}' `; + await txn.executeSql(q, [], async function (txn2, txnres) { + if (txnres.rows.length > 0) { + for (var i = 0; i < txnres.rows.length; i++) { + let data = txnres.rows.item(i); + let { Image1, img1Required, ADD_IMAGES } = data; + let imagePath = Image1 == "NA" ? Image1 : (Image1 != null && Image1 != '' ? 'file://' + ImageFolderPath + menu1.ScreenName + "/" + Image1 : ''); + let obj = { 'Image1Name': data.Image1, 'Image1': imagePath, "img1Required": img1Required, addImg: ADD_IMAGES }; + allImages.push(obj); + if (i == txnres.rows.length - 1) { + resolve(allImages); + } + } + } + else { + if (SOSHeaderImageCount > 0) { + for (let s = 0; s < SOSHeaderImageCount; s++) { + let obj = { 'Image1Name': '', 'Image1': '', img1Required: true, addImg: 0 }; + allImages.push(obj); + if (s == SOSHeaderImageCount - 1) { + resolve(allImages); + } + } + } + else { + resolve(allImages); + } + + } + }, function (txnE, txnerr) { console.log(txnerr); resolve(allImages); },); + }); + }).catch((err) => { + return allImages; + }) + } + + async function getChilds(storeData1, cat1, menu1, sosMSLOnly = false, sosCheckAs = false) { + let defData = { allChilds: [], childData: [] }; + let { StoreId, StateId } = storeData1; + let { SOSHeaderValue } = cat1; + // SOSChildValue + let childAssorted = await getChildAssortmentIds(storeData1, sosMSLOnly) + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + // get data from masters with saved data + let selectlist = ` Distinct p.SOSDefinitionId,p.SOSChildTable,p.SOSChildField,p.SOSChildValue,p.ChildName,p.SOSChildTotalFacing,p.SOSChildSelfFacing,p.SOSChildTotalFacingLable,p.SOSChildSelfFacingLable,p.SOSChildImage,p.SOSChildImageCount,p.SOSChildImageGrid,wd.TOTAL_FACING as TotalFacing,wd.SELF_FACING as SelfFacing,tg.SOSTarget`; + // let selectlist2=` m.SOSDefinitionId,m.SOSChildTable,m.SOSChildField,p.SOS_CHILD_VALUE as SOSChildValue,p.CHILD_NAME as ChildName,m.SOSChildTotalFacing,m.SOSChildSelfFacing,m.SOSChildTotalFacingLable,m.SOSChildSelfFacingLable,m.SOSChildImage,m.SOSChildImageCount,m.SOSChildImageGrid,p.TOTAL_FACING as TotalFacing,p.SELF_FACING as SelfFacing`; + let join1 = ` INNER JOIN Mapping_StoreShareOfShelf m on p.SOSDefinitionId=m.SOSDefinitionId `; + let join5 = ` LEFT OUTER JOIN ${AppTables.SOS_CHILD_DATA} wd on p.SOSDefinitionId=wd.SOS_DEFINITION_ID and wd.SOS_HDR_VALUE='${SOSHeaderValue}' and wd.STORE_ID='${StoreId}' and wd.VISIT_DATE='${d2}' `; + // let target_join=` LEFT OUTER JOIN Mapping_ShareOfShelfTarget tg on p.SOSDefinitionId=tg.SOSDefinitionId and tg.StateId='${StateId}' `; + let target_join = ` LEFT OUTER JOIN Mapping_StoreShareOfShelfTarget tg on p.SOSDefinitionId=tg.SOSDefinitionId and tg.StoreId='${StoreId}' `; + + let q = `SELECT ${selectlist} from Master_ShareOfShelfDefinition p ${join1} ${join5} ${target_join} Where (m.StoreId ='${StoreId}' or m.StoreId = ${StoreId}) and p.SOSHeaderValue='${SOSHeaderValue}' + ${sosCheckAs == true ? ` and p.SOSChildValue in (${childAssorted}) ` : ''} + order by p.SOSDefSequence `; + console.log("sossubcats-----1", q) + await txn.executeSql(q, [], async function (txn2, txnres) { + console.log('sossubcats added', txnres.rows.length); + if (txnres.rows.length > 0) { + let arr = [], arr2 = []; + for (var i = 0; i < txnres.rows.length; i++) { + let data = txnres.rows.item(i); + let SOSChildTotalFacing = data.SOSChildTotalFacing == 1 || data.SOSChildTotalFacing == 'true' ? 1 : 0; + let SOSChildSelfFacing = data.SOSChildSelfFacing == 1 || data.SOSChildSelfFacing == 'true' ? 1 : 0; + if (SOSChildTotalFacing == 1) { + inputRefs.current['input1_' + SOSHeaderValue + "_" + data.SOSChildValue] = ''; + } + if (SOSChildSelfFacing == 1) { + inputRefs.current['input2_' + SOSHeaderValue + "_" + data.SOSChildValue] = ''; + } + + let allChildImages = await getChildImages(storeData1, cat1, data, menu1, data.SOSChildImageCount); + let WQr = await getWindowQuestions(data, storeData1, menu1, SOSHeaderValue); + data['WindowQuestions'] = WQr['WindowQuestions'] || []; + data['WindowQA'] = WQr['WindowQA'] || {}; + let WindowQA = WQr['WindowQA'] || {}; + let defCData = { 'SOSChildValue': data.SOSChildValue, 'TotalFacing': data.TotalFacing, 'SelfFacing': data.SelfFacing, 'ChildImages': (allChildImages || []), 'WindowQA': WindowQA, WindowQuestions: WQr['WindowQuestions'] || [] }; + arr.push(data); + arr2.push(defCData); + + if (i == txnres.rows.length - 1) { + defData['allChilds'] = arr; + defData['childData'] = arr2; + defData['WindowQuestions'] = WQr['WindowQuestions'] || []; + defData['WindowQA'] = WQr['WindowQA'] || {}; + resolve(defData); + } + } + } else { + resolve(defData); + } + }, function (txnE, txnerr) { console.log(txnerr); resolve(defData); },); + }); + }).catch((err) => { + return defData; + }); + } + + async function getChildImages(storeData1, cat1, subcat1, menu1, SOSChildImageCount) { + let allImages = []; + let { StoreId } = storeData1; + let { SOSHeaderId } = cat1; + let { SOSChildValue } = subcat1; + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + let q = ` SELECT IMAGE1 as Image1,img1Required,ADD_IMAGES FROM ${AppTables.SOS_IMAGES} where SOS_HEADER_ID='${SOSHeaderId}' and SOS_CHILD_VALUE='${SOSChildValue}' and TYPE='Child' and STORE_ID='${StoreId}' and VISIT_DATE='${d2}' `; + console.log("imgObjimgOb---") + await txn.executeSql(q, [], async function (txn2, txnres) { + console.log("imgObjimgOb----q", q) + if (txnres.rows.length > 0) { + console.log("imgObjimgOb----q", q) + for (var i = 0; i < txnres.rows.length; i++) { + let data = txnres.rows.item(i); + console.log("imgObjimgOb---", data) + let { Image1, img1Required, ADD_IMAGES } = data; + let imagePath = Image1 == "NA" ? Image1 : (Image1 != null && Image1 != '' ? 'file://' + ImageFolderPath + menu1.ScreenName + "/" + Image1 : ''); + let obj = { 'Image1Name': data.Image1, 'Image1': imagePath, "img1Required": img1Required, addImg: ADD_IMAGES }; + allImages.push(obj); + if (i == txnres.rows.length - 1) { + resolve(allImages); + } + } + } + else { + if (SOSChildImageCount > 0) { + for (let s = 0; s < SOSChildImageCount; s++) { + let obj = { 'Image1Name': '', 'Image1': '', img1Required: true, addImg: 0 }; + allImages.push(obj); + if (s == SOSChildImageCount - 1) { + resolve(allImages); + } + } + } + else { + resolve(allImages); + } + } + }, function (txnE, txnerr) { console.log(txnerr); resolve(allImages); },); + }); + }).catch((err) => { + return allImages; + }) + } + + ///optimize code for taking much time + async function getImage(imgdata) { + let type = getImageProps.type || ''; + let window = getImageProps.cat || {}; + let splitItem = getImageProps.splitItem || {}; + let splitItemIndex = getImageProps.splitItemIndex || 0; + let qtn = getImageProps.qtn || {}; + let skus = getImageProps.skus || {}; + let addImg = getImageProps.addImg || 0 + + let cameraType = getImageProps.cameraType != null ? getImageProps.cameraType : '1'; + console.log("cameraType0", cameraType, JSON.stringify(qtn) + "------------" + JSON.stringify(skus)) + if (typeof imgdata == 'object' && imgdata.errorCode == 'camera_unavailable') { + notify(ST.Cameraunavailable); + } + else if (typeof imgdata == 'object' && imgdata.uri != null) { + const img = imgdata; + const imgurl = img.uri, imgWidth = img.width, imgHeight = img.ExtendedHeight; + let isImgFromGallery = img.fromGallery != null ? img.fromGallery : false; + let picture_clickedd = isImgFromGallery == true ? img.datetime : new Date(); + ////change by jeevanp + let picture_clicked_time = moment(picture_clickedd).format('MM-DD-YYYY HH:mm:ss') + let picture_clicked_time_for_pic_name = moment(picture_clickedd).format('MMDDYYYY_HHmmss') + ////change by jeevanp + let calculate_tym_date_for_filename = picture_clicked_time_for_pic_name; + let calculate_tym_date_over_img = picture_clicked_time; + + let filename = storeData.StoreId + '_' + window.SOSDefinitionId + '_' + (props.UserId || '') + '_SOSImg-' + calculate_tym_date_for_filename + '.jpg'; + let allData = SOSStockData; + let defData = { 'SOSDefinitionId': window.SOSDefinitionId }; + const wind_index = allData.findIndex(i => i.SOSDefinitionId == window.SOSDefinitionId); + let wind = wind_index >= 0 ? allData[wind_index] : defData; + console.log("wind----------", wind) + + if (cameraType == '2') { + var SKUData = wind['SKUData'] || []; + console.log("SKUData----", SKUData) + var childIndex = SKUData.findIndex(i => i.SOSChildValue == skus.SOSChildValue); + + console.log("ChildImages---0", childIndex, skus) + var childData = childIndex >= 0 ? SKUData[childIndex] : {}; + var ChildImages = childData['ChildImages'] || []; + var image_key = 'Image1Name'; + var image_key_path = 'Image1'; + splitItem[image_key] = filename; + console.log("splitItem----", splitItem) + } + else if (cameraType == '3') { + var image_key = 'NAImage1'; + var image_key_path = 'NAImage1Path'; + wind[image_key] = filename; + } + else { + var WindowSplits = wind.WindowSplits || []; + var image_key = type == '1' ? 'Image1Name' : 'Image2Name'; + var image_key_path = type == '1' ? 'Image1' : 'Image2'; + splitItem[image_key] = filename; + } + + ////change by jeevanp + const mark_text1 = calculate_tym_date_over_img; + const mark_text2 = 'Store Name:' + storeData.StoreName + ' | Store Id:' + storeData.StoreId + ' | User Id:' + storeData.EmpId + ' | Visibility Name:' + window.HeaderName + '(' + window.SOSDefinitionId + ') | Image Type: ' + currentMenu.MenuName + ' | Date:' + calculate_tym_date_over_img; + console.log(mark_text1 + "\n" + mark_text2, "mark_text2"); + let imagePath = `${ImageFolderPath + currentMenu.ScreenName}/${filename}`; + console.log("imgurl ", imgurl, imagePath) + RNFS.copyFile(imgurl, imagePath) + .then(async (resn) => { + // render data with clicked image + let uri = 'file://' + imagePath; + console.log('image marker:', imgWidth, imgHeight, uri); + if (cameraType == '2') { + splitItem[image_key_path] = uri; + + if (addImg == 1) { + splitItem['addImg'] = 1 + ChildImages.push(splitItem) + } else { + splitItemIndex >= 0 ? ChildImages[splitItemIndex] = splitItem : ChildImages.push(splitItem); + } + childData['ChildImages'] = ChildImages; + childIndex >= 0 ? SKUData[childIndex] = childData : SKUData.push(childData); + wind['SKUData'] = SKUData; + wind_index >= 0 ? allData[wind_index] = wind : allData.push(wind); + + setSOSStockData(allData); + BgWindowData(allData) + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata3); + } + else if (cameraType == '3') { + wind[image_key_path] = uri; + wind_index >= 0 ? allData[wind_index] = wind : allData.push(wind); + WindowDataRef.current = allData + setSOSStockData(allData); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + else { + console.log('split image updated'); + splitItem[image_key_path] = uri; + if (addImg == 1) { + splitItem['addImg'] = 1 + // let splitItem={Image1: "",Image1Name: "",img1Required: false,addImg:1} + wind.Images.push(splitItem) + } else { + splitItemIndex >= 0 ? WindowSplits[splitItemIndex] = splitItem : WindowSplits.push(splitItem); + wind.WindowSplits = WindowSplits; + } + + wind_index >= 0 ? allData[wind_index] = wind : allData.push(wind); + WindowDataRef.current = allData + setSOSStockData(allData); + BgUnsavedChanges(true) + setrerenderdata2(!rerenderdata2); + } + + setSelectedImg(uri) + // add metdata then resize image and restored back to the imagePath + let restore_data = { "destFilePath": imagePath, "imgurl": imgurl, imgWidth, imgHeight, mark_text1, mark_text2 } + let is_restored = await restore_ImageWithMetaData(restore_data, imgdata); + console.log("image restored:", is_restored); + }).catch(err => { + console.log('ERROR: image file write failed!!!'); + console.log(err.message, err.code); + }); + + } + + } + + async function openCamera(cat, splitItem, splitItemIndex, type = '1', cameraType = '1', qtn = {}, skus = {}, addImg = "0") { + setErrorField({}); + setError(false); + let GridAllow = false; + console.log("type----------", qtn) + console.log("skus2222", skus) + if (type == '1') { + GridAllow = cameraType == '1' ? (type === '1' ? (cat.SOSHeaderImageGrid === 'true' || cat.SOSHeaderImageGrid == true || cat.SOSHeaderImageGrid == '1' || cat.SOSHeaderImageGrid == 1) : (cat.SOSChildImageGrid === 'true' || cat.SOSChildImageGrid == true || cat.SOSChildImageGrid == '1' || cat.SOSChildImageGrid == 1)) : false + } else { + //GridAllow = cameraType=='1' ?( type==='2' ? (window.VisibilityImage2CameraGrid === 'true' || window.VisibilityImage2CameraGrid==true): (window.VisibilityImage2CameraGrid === 'true' || window.VisibilityImage2CameraGrid==true)):false + } + setGridValue(GridAllow); + setGetImageProps({ 'cat': cat, 'splitItem': splitItem, 'splitItemIndex': splitItemIndex, 'type': type, 'cameraType': cameraType, 'qtn': qtn, 'skus': skus, addImg }); + setShowCamera(true); + } + + async function onFocusChange(cat, sku, inputType = '1') { + let d = { 'catId': cat.SOSHeaderValue, 'subcatId': sku.SubSOSHeaderValue, 'inputType': inputType }; + console.log(d); + setCurrentFocusedData(d); + } + + async function focusToNext(cat, catIndex, skus, sku_index, type = 'HEADER') { + + let activeKey = ''; + let arr = Object.keys(inputRefs.current); + + if (type == 'HEADER') { + activeKey = 'input_' + cat.SOSHeaderValue; + } + else if (type == "CHILD1") { + activeKey = 'input1_' + cat.SOSHeaderValue + '_' + skus.SOSChildValue; + } else if (type == "CHILD2") { + activeKey = 'input2_' + cat.SOSHeaderValue + '_' + skus.SOSChildValue; + } + + + let activeIndex = arr.indexOf(activeKey); + if (activeIndex < arr.length - 1) { + let nextKey = arr[++activeIndex] + let nextRef = inputRefs.current[nextKey]; + console.log("nextKey", nextKey, nextRef, inputRefs.current[nextKey]) + nextRef.focus(); + } + else { + return + } + + } + + async function submitOpeningStock() { + + let isvalid = await validate(); + if (isvalid) { + Keyboard.dismiss(); + setShowAlert(true); + } + } + + async function saveData() { + // setHasUnsavedChanges(false); + BgUnsavedChanges(false) + setShowAlert(false); + setLoaderTitle('Saving Data...'); + setProcessing(true); + try { + let { StoreId, ChainId, StateId, StoreTypeId } = storeData; + let { PSAllow } = currentMenu + let deletePrevData = false; + if (ShowCatWise && PSAllow) { + if (FilteredPromoValues.length > 0) { + await removePreviousData(); + } + else { + notify('Something went wrong while deleteing old data!') + setProcessing(false); + return; + } + } else { + deletePrevData = true; + } + + + await db.transaction(async function (txn) { + + // remove old data + if (deletePrevData) { + let q = `DELETE FROM ${AppTables.SOS_HDR_DATA} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' `; + let q2 = `DELETE FROM ${AppTables.SOS_IMAGES} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' `; + let q3 = `DELETE FROM ${AppTables.SOS_CHILD_DATA} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' `; + let q4 = `DELETE FROM ${AppTables.SOS_CHILD_QUES_DATA} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' `; + // let q5=`DELETE FROM ${AppTables.SOS_STOCK_DATA} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' `; + + await txn.executeSql(q, [], async function (txn2, txnres) { + console.log('stock facing hdr data deleted'); + }, function (txnE, txnerr) { console.log(txnerr); },); + + await txn.executeSql(q2, [], async function (txn2, txnres) { + console.log('stock facing images deleted'); + }, function (txnE, txnerr) { console.log(txnerr); },); + + await txn.executeSql(q3, [], async function (txn2, txnres) { + console.log('stock facing child data deleted'); + }, function (txnE, txnerr) { console.log(txnerr); },); + await txn.executeSql(q4, [], async function (txn2, txnres) { + console.log('stock SOS Questions data deleted'); + }, function (txnE, txnerr) { console.log(txnerr); },); + + } + insertData(); + }); + } catch (err) { + console.log(err); + } + } + + async function removePreviousData() { + let { StoreId, ChainId, StateId, StoreTypeId } = storeData; + + return new Promise((resolve, reject) => { + + db.transaction(async function (txn) { + let FilterIdsJoin = FilteredPromoValues.join(','); + let q = `SELECT * FROM ${AppTables.SOS_HDR_DATA} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' and SOS_HDR_VALUE in (${FilterIdsJoin}) ` + await txn.executeSql(q, [], async function (txn2, txnres) { + console.log("data to delete:", txnres.rows.length); + if (txnres.rows.length > 0) { + let arr = []; + let isHdrDel = false, isImagesDel = false, isStockDel = false; + for (let i = 0; i < txnres.rows.length; i++) { + let data = txnres.rows.item(i); + let { SOS_HEADER_ID } = data; + arr.push(SOS_HEADER_ID); + + if (i == txnres.rows.length - 1) { + let AllHdrIds = `'${arr.join("','")}'`; + + await txn.executeSql(`DELETE FROM ${AppTables.SOS_HDR_DATA} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' and SOS_HEADER_ID in (${AllHdrIds}) `, [], async function (txn2, txnres) { + console.log('window hdr data deleted'); + isHdrDel = true; + if (isHdrDel && isImagesDel && isStockDel) { + resolve(true); + } + }, function (txnE, txnerr) { console.log(txnerr); },); + await txn.executeSql(`DELETE FROM ${AppTables.SOS_IMAGES} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' and SOS_HEADER_ID in (${AllHdrIds}) `, [], async function (txn2, txnres) { + console.log('window images data deleted'); + isImagesDel = true; + if (isHdrDel && isImagesDel && isStockDel) { + resolve(true); + } + }, function (txnE, txnerr) { console.log(txnerr); },); + await txn.executeSql(`DELETE FROM ${AppTables.SOS_CHILD_DATA} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' and SOS_HEADER_ID in (${AllHdrIds}) `, [], async function (txn2, txnres) { + console.log('window stock data deleted'); + isStockDel = true; + if (isHdrDel && isImagesDel && isStockDel) { + resolve(true); + } + }, function (txnE, txnerr) { console.log(txnerr); },); + + await txn.executeSql(`DELETE FROM ${AppTables.SOS_CHILD_QUES_DATA} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' and SOS_HEADER_ID in (${AllHdrIds}) `, [], async function (txn2, txnres) { + console.log('window stock data deleted'); + isStockDel = true; + if (isHdrDel && isImagesDel && isStockDel) { + resolve(true); + } + }, function (txnE, txnerr) { console.log(txnerr); },); + + } + } + } + else { + resolve(true); + } + }, function (txnE, txnerr) { console.log(txnerr); resolve(false); },); + + + }); + + }).then((val) => { + return val; + }).catch((err) => { + console.log('error:', err); + return false; + }) + } + + async function insertData() { + try { + + let { StoreId, ChainId, StateId, StoreTypeId } = storeData; + db.transaction(async function (txn) { + var values = '', stock_values = '', images_values = '', stockV = '', SOSHdrFacingDec = '', lastchar = '', SelfFacinglastchar = '', SelfFacingDec = '', TotalFacingDec = '', TotalFacinglastchar = ''; + for (var i = 0; i < AllSOSData.length; i++) { + let item = AllSOSData[i]; + const cat = item; + console.log("checkdata---", cat); + const catIndex = i; + let { SOSHeaderTable, SOSHeaderField, SOSHeaderValue, HeaderName, SOSHeaderFacing, SOSHeaderFacingLable, SOSHeaderImage, SOSHeaderImageCount, SOSHeaderImageGrid } = cat; + let SOSHeaderId = 'SOS' + i + SOSHeaderValue + moment().format('MMDDYYYYHHmmss'); + const cindex = SOSStockData.findIndex(i => i.SOSHeaderValue == item.SOSHeaderValue); + const cobj = cindex >= 0 ? SOSStockData[cindex] : {}; + //console.log("cobj----",cobj) + const HeaderImages = cobj['Images'] || []; + // const WindowQuestions= cobj['WindowQuestions'] || [] ; + let SOSHdrFacing = cobj['SOSHdrFacing'] != null ? cobj['SOSHdrFacing'] : (cobj['SOSHdrFacing'] === 0 ? cobj['SOSHdrFacing'] : ''); + SOSHdrFacing = SOSHdrFacing + ""; + // console.log("windowquessss:",WindowQuestions) + console.log("SOSHdrFacing:", SOSHdrFacing); + // if decimal value is allowed in facing - then validate on save time if is there any illegal decimal value then adjust it , for e.g. 0. or .0 is not valid integer or float number + // this will only alter the value of facing if it is in decimal form + if (SOSHdrFacing != null && SOSHdrFacing != '' && SOSHdrFacing.includes(".")) { + let SOSHdrFacing_CharArr = SOSHdrFacing.split("."); + // there should be only two parts of this decimal value - the value before dot(.) and the value after dot(.) + let charbefore_dot = SOSHdrFacing_CharArr.length > 0 ? (SOSHdrFacing_CharArr[0] != null && SOSHdrFacing_CharArr[0] != '' ? SOSHdrFacing_CharArr[0] : '0') : '0'; + let charafter_dot = SOSHdrFacing_CharArr.length > 1 ? (SOSHdrFacing_CharArr[1] != null && SOSHdrFacing_CharArr[1] != '' ? SOSHdrFacing_CharArr[1] : '0') : '0'; + console.log("charbefore_dot:", charbefore_dot, ",", charafter_dot); + SOSHdrFacing = charbefore_dot + "." + charafter_dot; + } + console.log("SOSHdrFacing after alter:", SOSHdrFacing); + + let this_SKUData = cobj['SKUData'] || []; + values += values != '' ? ' , ' : ''; + values += ` ('${SOSHeaderId}','${StoreId}','${d2}','${SOSHeaderTable}','${SOSHeaderField}','${SOSHeaderValue}','${HeaderName}','${SOSHdrFacing}','${d2}') `; + + let skulist = item['skulist'] || []; + let SOSHeaderImage1 = item.SOSHeaderImage == 1 || item.SOSHeaderImage == 'true' ? 1 : 0; + if (SOSHeaderImage1 == true) { + for (var k = 0; k < HeaderImages.length; k++) { + let imgObj = HeaderImages[k]; + let { Image1Name, Image1, img1Required, addImg } = imgObj; + images_values += images_values != '' ? ' , ' : ''; + images_values += ` ('${SOSHeaderId}','${StoreId}','${d2}','${SOSHeaderValue}','','${(Image1Name || '')}','Header','${d2}','${img1Required}',${addImg || 0}) `; + + console.log('imgObjimgOb----', imgObj); + + + } + } + + for (var j = 0; j < skulist.length; j++) { + let skus = skulist[j]; + let sku_index = j; + //console.log("skus----------", skus); + let { SOSDefinitionId, SOSChildTable, WindowQuestions, SOSChildField, SOSChildValue, ChildName, SOSChildTotalFacing, SOSChildSelfFacing, SOSChildTotalFacingLable, SOSChildSelfFacingLable, SOSChildImage, SOSChildImageCount, SOSChildImageGrid } = skus; + stock_values += stock_values != '' ? ' , ' : ''; + + let thisCatSkuData_i = this_SKUData.findIndex(i => i.SOSChildValue == skus.SOSChildValue); + let thisCatSkuData = thisCatSkuData_i >= 0 ? (this_SKUData[thisCatSkuData_i] || {}) : {}; + let TotalFacing = thisCatSkuData.TotalFacing != null ? thisCatSkuData.TotalFacing : (thisCatSkuData.TotalFacing === 0 ? thisCatSkuData.TotalFacing : ''); + let SelfFacing = thisCatSkuData.SelfFacing != null ? thisCatSkuData.SelfFacing : (thisCatSkuData.SelfFacing === 0 ? thisCatSkuData.SelfFacing : ''); + let WindowQA = thisCatSkuData?.WindowQA || {}; + SelfFacing = SelfFacing + ""; + // if decimal value is allowed in facing - then validate on save time if is there any illegal decimal value then adjust it , for e.g. 0. or .0 is not valid integer or float number + // this will only alter the value of facing if it is in decimal form + if (SelfFacing != null && SelfFacing != '' && SelfFacing.includes(".")) { + let SelfFacing_CharArr = SelfFacing.split("."); + // there should be only two parts of this decimal value - the value before dot(.) and the value after dot(.) + // (Warning !! more than 2 values resturn by split function on dot (.) char will be ignored) + let charbefore_dot = SelfFacing_CharArr.length > 0 ? (SelfFacing_CharArr[0] != null && SelfFacing_CharArr[0] != '' ? SelfFacing_CharArr[0] : '0') : '0'; + let charafter_dot = SelfFacing_CharArr.length > 1 ? (SelfFacing_CharArr[1] != null && SelfFacing_CharArr[1] != '' ? SelfFacing_CharArr[1] : '0') : '0'; + console.log("charbefore_dot:", charbefore_dot, ",", charafter_dot); + SelfFacing = charbefore_dot + "." + charafter_dot; + } + + // console.log("SelfFacing after alter:", SelfFacing); + + TotalFacing = TotalFacing + ""; + // console.log("TotalFacing", TotalFacing); + // if decimal value is allowed in facing - then validate on save time if is there any illegal decimal value then adjust it , for e.g. 0. or .0 is not valid integer or float number + // this will only alter the value of facing if it is in decimal form + if (TotalFacing != null && TotalFacing != '' && TotalFacing.includes(".")) { + let TotalFacing_CharArr = TotalFacing.split("."); + // there should be only two parts of this decimal value - the value before dot(.) and the value after dot(.) + // (Warning !! more than 2 values resturn by split function on dot (.) char will be ignored) + let charbefore_dot = TotalFacing_CharArr.length > 0 ? (TotalFacing_CharArr[0] != null && TotalFacing_CharArr[0] != '' ? TotalFacing_CharArr[0] : '0') : '0'; + let charafter_dot = TotalFacing_CharArr.length > 1 ? (TotalFacing_CharArr[1] != null && TotalFacing_CharArr[1] != '' ? TotalFacing_CharArr[1] : '0') : '0'; + console.log("charbefore_dot:", charbefore_dot, ",", charafter_dot); + TotalFacing = charbefore_dot + "." + charafter_dot; + } + + //console.log("SelfFacing after alter:", SelfFacing); + + const ChildImages = thisCatSkuData['ChildImages'] || []; + + stock_values += ` ('${SOSHeaderId}','${StoreId}','${d2}','${SOSDefinitionId}','${SOSHeaderValue}','${SOSChildTable}','${SOSChildField}','${SOSChildValue}','${ChildName}','${TotalFacing}','${SelfFacing}','${d2}') `; + + let SOSChildImage1 = SOSChildImage == 1 || SOSChildImage == 'true' ? 1 : 0; + if (SOSChildImage1 == true) { + for (var l = 0; l < ChildImages.length; l++) { + let imgObj = ChildImages[l]; + let { Image1Name, Image1, img1Required, addImg } = imgObj; + images_values += images_values != '' ? ' , ' : ''; + images_values += ` ('${SOSHeaderId}','${StoreId}','${d2}','${SOSHeaderValue}','${SOSChildValue}','${(Image1Name || '')}','Child','${d2}','${img1Required}',${addImg || 0}) `; + } + } + + // console.log("WindowQuestions-----121", WindowQuestions); + for (const stockProdIndex of WindowQuestions) { + // console.log("stockProdIndex---",stockProdIndex.SOSAShowCamera) + //console.log("stockProdIndex1---", SOSStockData); + + let id_key = stockProdIndex.SOSQuestionId + "_ChildId_" + skus.SOSChildValue + '_AnswerId'; + let ans_key = stockProdIndex.SOSQuestionId + "_ChildId_" + skus.SOSChildValue + '_Answer'; + let cam_allow = stockProdIndex.SOSQuestionId + "_ChildId_" + skus.SOSChildValue + '_Camera_allow'; + let imgname_key = stockProdIndex.SOSQuestionId + "_ChildId_" + skus.SOSChildValue + '_ImageName1'; + + const stockProd = stockProdIndex; + // let sd=SOSStockData.find(i=> i.SOSDefinitionId==cat?.SOSDefinitionId) || {}; + let sd = SOSStockData.find(i => i.SOSDefinitionId == cat?.SOSDefinitionId) || {}; + + //console.log("stockProdIndex--sd-", sd); + // let stock=sd.Stock!=null?sd.Stock:(sd.Stock==0?sd.Stock:''); + let { SOSQuestionId, SOSQuestionCode, QuestionType, SOSAQuestionDisable } = stockProd; + // let { WindowQA}=sd + //console.log("check----", WindowQA, WindowQA?.[ans_key], ans_key); + let SOSAnswerName = WindowQA?.[ans_key] || ''; + let SOSAnswerId = WindowQA[id_key] === 0 ? 0 : (WindowQA[id_key] || ''); + // let SOSHeaderValue=sd.SOSHeaderValue || 0; + // console.log("windowqaa----", WindowQA); + let SOSAShowCamera = WindowQA[cam_allow] || false; + // console.log("showcam---", SOSAShowCamera); + let Image1 = (SOSAShowCamera === 1) ? WindowQA[imgname_key] : (WindowQA[imgname_key] ? WindowQA[imgname_key] : ''); + console.log("img1----", Image1); + stockV += stockV != '' ? ' , ' : ''; + stockV += ` ('${SOSHeaderId}','${StoreId}','${d2}','${SOSDefinitionId}','${SOSHeaderValue}','${SOSQuestionId}','${SOSQuestionCode}','${QuestionType}','${SOSAnswerName}','${SOSAnswerId}','','${Image1}','${SOSAShowCamera}','','${SOSAQuestionDisable}','${d2}','${skus.SOSChildValue}') `; + } + + } + } + + console.log("values:", stockV); + + let add_StockHdr = `INSERT INTO ${AppTables.SOS_HDR_DATA} (SOS_HEADER_ID,STORE_ID,VISIT_DATE,SOS_HDR_TABLE,SOS_HDR_FIELD,SOS_HDR_VALUE,HEADER_NAME,SOS_HDR_FACING,ADDED_DATE) VALUES ${values} `; + let add_Stock = `INSERT INTO ${AppTables.SOS_CHILD_DATA} (SOS_HEADER_ID,STORE_ID,VISIT_DATE,SOS_DEFINITION_ID,SOS_HDR_VALUE,SOS_CHILD_TABLE,SOS_CHILD_FIELD,SOS_CHILD_VALUE,CHILD_NAME,TOTAL_FACING,SELF_FACING,ADDED_DATE ) VALUES ${stock_values} `; + let add_ques_stock = `INSERT INTO ${AppTables.SOS_CHILD_QUES_DATA} (SOS_HEADER_ID,STORE_ID,VISIT_DATE,SOS_DEFINITION_ID,SOS_HDR_VALUE,QUESTION_ID,QUESTION_CODE,QUESTION_TYPE,ANSWER,ANSWER_ID,MULTI_OPTIONS_IDS,IMAGE1,IMAGE_ALLOW1,MENU_ID,IS_DISABLED,ADDED_DATE,SOS_CHILD_VALUE) VALUES ${stockV} `; + let add_images = `INSERT INTO ${AppTables.SOS_IMAGES} (SOS_HEADER_ID,STORE_ID,VISIT_DATE,SOS_HDR_VALUE,SOS_CHILD_VALUE,IMAGE1,TYPE,ADDED_DATE,img1Required,ADD_IMAGES) VALUES ${images_values} `; + + console.log('imgObjimgOb----12', add_images); + + + console.log("add_Stock-------", stockV, "---", stockV == ""); + txn.executeSql(add_StockHdr, [], async function (txn2, txnres) { + console.log('stock facing header added'); + txn.executeSql(add_Stock, [], async function (txn2, txnres) { + console.log('stock facing child added'); + if (images_values != '') { + txn.executeSql(add_images, [], async function (txn2, txnres) { + console.log('stock facing images added'); + if (stock_values != '' && stockV != "") { + await txn.executeSql(add_ques_stock, [], async function (txn2, txnres) { + console.log('stock facing child added'); + notify('Share Of Shelf data updated successfully'); + setProcessing(false); + // Clear store data in local storage to avoid re-setting data for the store + clear_item('storeData'); + props.navigation.goBack(); + }, function (txnE, txnerr) { + console.log(txnerr); + setProcessing(false); + notify('Cannot add Share Of Shelf data'); + }); + } else { + notify('Share Of Shelf data updated successfully'); + setProcessing(false); + // Clear store data in local storage to avoid re-setting data for the store + clear_item('storeData'); + props.navigation.goBack(); + } + }, function (txnE, txnerr) { + console.log(txnerr); + setProcessing(false); + notify('Cannot add Share Of Shelf data'); + }); + } else if (stock_values == '' || images_values == '') { + txn.executeSql(add_ques_stock, [], async function (txn2, txnres) { + console.log('stock facing child added'); + notify('Share Of Shelf data updated successfully'); + setProcessing(false); + // Clear store data in local storage to avoid re-setting data for the store + clear_item('storeData'); + props.navigation.goBack(); + }, function (txnE, txnerr) { + console.log(txnerr); + setProcessing(false); + notify('Cannot add Share Of Shelf data'); + }); + } else { + notify('Share Of Shelf data updated successfully'); + setProcessing(false); + // Clear store data in local storage to avoid re-setting data for the store + clear_item('storeData'); + props.navigation.goBack(); + } + + }, function (txnE, txnerr) { console.log(txnerr); setProcessing(false); notify('Cannot add Share Of Shelf data'); }); + }, function (txnE, txnerr) { console.log(txnerr); setProcessing(false); notify('Cannot add Share Of Shelf data stock Question data'); }); + }); + } catch (err) { + console.log(err); + } + } + + + + async function validate() { + function showError(obj, isErr, msg, refKey) { + setErrorField(obj); + setError(isErr); + if (refKey) { + let refIn = inputRefs.current[refKey]; + if (refIn) refIn.focus(); + } + if (msg) notify(msg, 'SHORT'); + } + + // let headerImagesValidation = true; + + return new Promise((resolve) => { + for (let index = 0; index < AllSOSData.length; index++) { + const cat = AllSOSData[index]; + + let SOSHeaderImage = cat.SOSHeaderImage == 1 || cat.SOSHeaderImage == 'true' ? true : false; + let SOSHeaderFacing = cat.SOSHeaderFacing == 1 || cat.SOSHeaderFacing == 'true' ? true : false; + let SOSHeaderFacingLable = cat.SOSHeaderFacingLable || ''; + let SOSChildSelfFacingLable = ''; + + const cobj = SOSStockData.find(i => i.SOSHeaderValue == cat.SOSHeaderValue) || {}; + const HeaderImages = cobj['Images'] || []; + let SOSHdrFacing = cobj['SOSHdrFacing'] != null ? cobj['SOSHdrFacing'] : ''; + let this_SKUData = cobj['SKUData'] || []; + + let TotalSelfFacingsEntered = 0; + let errorobj = { 'EF_Cat': cat }; + console.log("valida", SOSHeaderFacing == true && SOSHdrFacing !== 0 && (SOSHdrFacing == null || SOSHdrFacing == '')) + + // if(SOSHdrFacing==0){ + // headerImagesValidation=false + // } + + /** ---------- Header Facing Validation ---------- **/ + if (SOSHeaderFacing == true && SOSHdrFacing !== 0 && (SOSHdrFacing == null || SOSHdrFacing == '')) { + showError(errorobj, true, `Please enter Header Facing for ${cat.HeaderName}`, 'input_' + cat.SOSHeaderValue); + resolve(false); return; + } + + /** ---------- Header Images Validation ---------- **/ + if (StoreCameraAllow && SOSHeaderImage == true && HeaderImages?.length > 0) { + console.log("vlai---") + for (const splitItemIndex in HeaderImages) { + const splitItem = HeaderImages[splitItemIndex]; + console.log("splitItem----", splitItem); + let Image1Name = splitItem['Image1Name'] != null && splitItem['Image1Name'] != '' ? splitItem['Image1Name'] : ''; + if (Image1Name == '') { + errorobj["EF_HdrImage"] = 'HdrImage'; + errorobj["EF_HdrImageIndex"] = splitItemIndex; + showError(errorobj, true); + let refIn1 = inputRefs.current['input_' + cat.SOSHeaderValue]; + refIn1.focus(); + notify(`Please click all header images for ${cat.HeaderName}`, 'SHORT'); + resolve(false); return; + } + } + } + + + /** ---------- Child Facing Validation ---------- **/ + for (let s = 0; s < cat?.skulist.length; s++) { + const skus = cat.skulist[s]; + const thisCatSkuData = this_SKUData.find(i => i.SOSChildValue == skus.SOSChildValue) || {}; + let TotalFacing = parseFloat(thisCatSkuData.TotalFacing || 0); + let SelfFacing = parseFloat(thisCatSkuData.SelfFacing || 0); + const ChildImages = thisCatSkuData['ChildImages'] || []; + const WindowQA = thisCatSkuData['WindowQA'] || {}; + + let SOSChildImage = skus.SOSChildImage == 1 || skus.SOSChildImage == 'true' ? true : false; + let SOSChildTotalFacing = skus.SOSChildTotalFacing == 1 || skus.SOSChildTotalFacing == 'true' ? true : false; + let SOSChildSelfFacing = skus.SOSChildSelfFacing == 1 || skus.SOSChildSelfFacing == 'true' ? true : false; + SOSChildSelfFacingLable = skus.SOSChildSelfFacingLable != null ? skus.SOSChildSelfFacingLable : ''; + + errorobj["EF_Brand"] = skus; + + console.log("childValidation--",) + // Total Facing required + if (SOSChildTotalFacing && thisCatSkuData.TotalFacing !== 0 && (thisCatSkuData.TotalFacing == null || thisCatSkuData.TotalFacing == '')) { + showError(errorobj, true, `Please enter ${skus.SOSChildTotalFacingLable} for ${skus.ChildName} in ${cat.HeaderName}`, + 'input1_' + cat.SOSHeaderValue + '_' + skus.SOSChildValue); + resolve(false); return; + } + + // Self Facing required + if (SOSChildSelfFacing && thisCatSkuData.SelfFacing !== 0 && (thisCatSkuData.SelfFacing == null || thisCatSkuData.SelfFacing == '')) { + showError(errorobj, true, `Please enter ${skus.SOSChildSelfFacingLable} for ${skus.ChildName} in ${cat.HeaderName}`, + 'input2_' + cat.SOSHeaderValue + '_' + skus.SOSChildValue); + resolve(false); return; + } + + // Self ≤ Total + if (SOSChildSelfFacing && SOSChildTotalFacing && (SelfFacing > TotalFacing)) { + showError(errorobj, true, `${skus.SOSChildSelfFacingLable} should be less than or equals to ${skus.SOSChildTotalFacingLable} for ${skus.ChildName} in ${cat.HeaderName}`, + 'input1_' + cat.SOSHeaderValue + '_' + skus.SOSChildValue); + resolve(false); return; + } + + // Collect Self Facing sum + TotalSelfFacingsEntered += SelfFacing; + + // Child Images required + console.log("valiaaaaa", StoreCameraAllow, SOSChildImage, (SOSHdrFacing != 0)) + if (StoreCameraAllow && SOSChildImage && ChildImages.length > 0) { + for (const splitItemIndex in ChildImages) { + const splitItem = ChildImages[splitItemIndex]; + let Image1Name = splitItem['Image1Name'] != null && splitItem['Image1Name'] != '' ? splitItem['Image1Name'] : ''; + if (Image1Name == '') { + errorobj["EF_ChildImage"] = 'ChildImage'; + errorobj["EF_ChildImageIndex"] = splitItemIndex; + showError(errorobj, true); + notify(`Please click all child images for ${skus.ChildName} in ${cat.HeaderName}`, 'SHORT'); + resolve(false); return; + } + } + } + + + // Child Window Questions validation + if (skus?.WindowQuestions?.length > 0) { + for (const qtnIndex in skus?.WindowQuestions) { + const qtn = skus?.WindowQuestions[qtnIndex]; + let selansid = '', showImageTag = false, isImageMandateforAns = false;; + let id_key = qtn.SOSQuestionId + "_ChildId_" + skus.SOSChildValue + '_AnswerId'; + let ans_key = qtn.SOSQuestionId + "_ChildId_" + skus.SOSChildValue + '_Answer'; + let multi_key = qtn.SOSQuestionId + "_ChildId_" + skus.SOSChildValue + '_MultiOption'; + let date_key = qtn.SOSQuestionId + "_ChildId_" + skus.SOSChildValue + '_Date'; + let img_key = qtn.SOSQuestionId + "_ChildId_" + skus.SOSChildValue + '_ImagePath1'; + // console.log("img_key---------", id_key, ans_key) + let imgname_key = qtn.SOSQuestionId + "_ChildId_" + skus.SOSChildValue + '_ImageName1'; + let rating_key = qtn.SOSQuestionId + "_ChildId_" + skus.SOSChildValue + '_Rating'; + let isDisabled = qtn.isDisabled; + if (!isDisabled) { + let list_mcdata = []; + errorobj['EF_qtn'] = qtn; + let isImgAllowed = (qtn.SOSQShowCamera == 'true' || qtn.SOSQShowCamera == 1); + let checkForAnsKey = (qtn.QuestionType == 'Decimal' || qtn.QuestionType == 'Number' || qtn.QuestionType == 'Text' || qtn.QuestionType == 'Date' || qtn.QuestionType == 'Rating' || qtn.QuestionType == 'QR'); + if (qtn.QuestionType == 'Single choice list') { + selansid = WindowQA[id_key]; + } + else if (qtn.QuestionType == 'Multi choice list') { + selansid = WindowQA[multi_key] != null && WindowQA[multi_key] != '' ? WindowQA[multi_key].split(',') : []; + } + + if (qtn.QuestionType == 'Multi choice list' && selansid.length <= 0) { + errorobj['EF_Qtn_MultiChoice'] = 'Qtn_MultiChoice'; + showError(errorobj, true); + notify(`${ST.Pleaseselectoptionsfortherequiredfield} ${ST.In} ${qtn.HeaderName}`, 'SHORT'); + resolve(false); return; + } + else if (checkForAnsKey && (Object.keys(WindowQA).indexOf(ans_key) < 0 || (Object.keys(WindowQA).indexOf(ans_key) >= 0 && WindowQA[ans_key] === ''))) { + errorobj['EF_Qtn_Date'] = 'Qtn_Date'; + showError(errorobj, true); + let msg = (qtn.QuestionType == 'Date' ? `${ST.Pleasepickadatefortherequiredfield} ${ST.In} ${qtn.HeaderName}` : (qtn.QuestionType == 'Rating' ? `${ST.Pleaseselectratingfortherequiredfield} ${ST.In} ${window.HeaderName}` : `${ST.Pleasefillalltherequiredfield} ${ST.In} ${window.HeaderName}`)); + notify(msg, 'SHORT'); + resolve(false); return; + } + else if (Object.keys(WindowQA).indexOf(id_key) < 0 || (Object.keys(WindowQA).indexOf(id_key) >= 0 && (WindowQA[id_key] === ''))) { + errorobj['EF_Qtn_Input'] = 'Qtn_Input'; + showError(errorobj, true); + notify(`${ST.Pleasefillalltherequiredfield} ${ST.In} ${cat.HeaderName}`, 'SHORT'); + resolve(false); return; + } + else if (isImgAllowed && (Object.keys(WindowQA).indexOf(img_key) < 0 || (Object.keys(WindowQA).indexOf(img_key) >= 0 && WindowQA[img_key] === ''))) { + errorobj['EF_Qtn_Image'] = 'Qtn_Image'; + showError(errorobj, true); + // notify(`${ST.Pleaseaddimages} ${ST.In} ${window.HeaderName}`,'SHORT'); + resolve(false); return; + } else { + console.log('no condition found'); + } + + if ((qtn.QuestionType == 'Single choice list' || qtn.QuestionType == 'Multi choice list')) { + if (qtn.Answers && qtn.Answers.length > 0) { + for (var j = 0; j < qtn.Answers.length; j++) { + let ansss = qtn.Answers[j]; + let isandImgAl = (ansss.SOSAShowCamera == 'true' || ansss.SOSAShowCamera == 1); + isImageMandateforAns = (ansss.SOSACameraMandatory == 'true' || ansss.SOSACameraMandatory == 1); + if (qtn.QuestionType == 'Single choice list' && (isandImgAl && ansss.AnswerId == selansid)) { + showImageTag = true; + isImageMandateforAns = true; + } + else if (qtn.QuestionType == 'Multi choice list' && (isandImgAl && selansid.indexOf(ansss.AnswerId) >= 0)) { + showImageTag = true; + } + } + } + } + + if (showImageTag && isImageMandateforAns && (Object.keys(WindowQA).indexOf(img_key) < 0 || (Object.keys(WindowQA).indexOf(img_key) >= 0 && WindowQA[img_key] === ''))) { + errorobj['EF_Qtn_Image'] = 'Qtn_Image'; + showError(errorobj, true); + notify(`${ST.Pleaseaddimages} ${ST.In} ${qtn.SOSQuestionName}`, 'SHORT'); + resolve(false); return; + } + } + } + } + } + + /** ---------- Header vs Child Self Facing Validation ---------- **/ + console.log("SOSChildSelfFacingLable---", SOSChildSelfFacingLable) + if (SOSHeaderFacing && TotalSelfFacingsEntered > parseFloat(SOSHdrFacing)) { + errorobj["EF_HdrFacing"] = 'HdrFacing'; + errorobj["EF_ChildSelf"] = 'ChildSelf'; + showError( + errorobj, + true, + `Sum of all ${SOSChildSelfFacingLable || 'Child Self Facing'} should be less than or equal to ${SOSHeaderFacingLable || 'Header Facing'} for ${cat.HeaderName}`, + 'input_' + cat.SOSHeaderValue + ); resolve(false); return; + } + + // ✅ Last Category reached → success + if (index === AllSOSData.length - 1) { + resolve(true); return; + } + } + }).catch((err) => { + console.log("Validation error:", err); + return false; + }); + } + + + function onStockValChange(item, skuItem, val, key, type = '') { + setErrorField({}); + setError(false); + if (val != '') { + let isValid = validateNumber(val, type); + if (!isValid) { + return; + } + } + let allSKUData = SOSStockData; + let defData = { 'SOSHeaderValue': item.SOSHeaderValue, 'Images': [], 'SKUData': [] }; + const catindex = allSKUData.findIndex(i => i.SOSHeaderValue == item.SOSHeaderValue); + const catData = catindex >= 0 ? (allSKUData[catindex] || defData) : defData; + let AllSKUs = catData['SKUData'] || []; + + let defCData = { 'SOSChildValue': skuItem.SOSChildValue, 'ChildImages': [] }; + let skud_index = AllSKUs.findIndex(i => i.SOSChildValue == skuItem.SOSChildValue); + const skud = skud_index >= 0 ? (AllSKUs[skud_index] || defCData) : defCData + skud[key] = val; + skud_index >= 0 ? AllSKUs[skud_index] = skud : AllSKUs.push(skud); + catData['SKUData'] = AllSKUs; + + catindex >= 0 ? allSKUData[catindex] = catData : allSKUData.push(catData); + // setSOSStockData(allSKUData); + BgWindowData([...allSKUData]) + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + // setrerenderdata(!rerenderdata); + } + + function onHdrStockValChange(item, val, key, type = '') { + setErrorField({}); + setError(false); + if (val != '') { + let isValid = validateNumber(val, type); + if (!isValid) { + return; + } + } + + let allSKUData = SOSStockData; + let defData = { 'SOSHeaderValue': item.SOSHeaderValue, 'Images': [], 'SKUData': [] }; + const skud_index = allSKUData.findIndex(i => i.SOSHeaderValue == item.SOSHeaderValue); + const skud = skud_index >= 0 ? (allSKUData[skud_index] || defData) : defData; + + console.log("windowChildImage2-------", key == "SOSHdrFacing" && val == "0", key, val) + console.log("headerStock---val is valid5", key == "SOSHdrFacing" && val == "0", key, val); + + if (key == "SOSHdrFacing" && val == "0") { + console.log("headerStock---val is 0"); + skud.Images = skud?.Images?.filter((item) => { + console.log("item----", item, item.addImg, item.addImg != "1"); + return item.addImg != "1" + })?.map(vl => ({ + ...vl, + Image1Name: "NA", + Image1: "NA" + })) || []; + + skud.SKUData = skud?.SKUData?.map(sku => { + const updatedChildImages = sku?.ChildImages?.filter((item) => { + return item.addImg != "1" + }).map(img => ({ + ...img, + Image1Name: "NA", + Image1: "NA" + })) || []; + + // const updatedChildImagesF = sku?.ChildImages?.filter(img => ({ + // ...img, + // Image1Name: "NA", + // Image1: "NA" + // })) || []; + + return { + ...sku, + TotalFacing: "0", + SelfFacing: "0", + ...(updatedChildImages.length > 0 && { ChildImages: updatedChildImages }) + }; + }) || []; + + } else if (key === "SOSHdrFacing" && val !== "0") { + skud.Images = skud?.Images?.map(vl => ({ + ...vl, + Image1Name: vl?.Image1Name === "NA" ? "" : vl?.Image1Name, + Image1: vl?.Image1 === "NA" ? "" : vl?.Image1 + })) || []; + + skud.SKUData = skud?.SKUData?.map(sku => { + const updatedChildImages = sku?.ChildImages?.map(img => ({ + ...img, + Image1Name: img?.Image1Name === "NA" ? "" : img?.Image1Name, + Image1: img?.Image1 === "NA" ? "" : img?.Image1 + })) || []; + + return { + ...sku, + TotalFacing: sku?.TotalFacing === "0" ? "" : sku?.TotalFacing, + SelfFacing: sku?.SelfFacing === "0" ? "" : sku?.SelfFacing, + ...(updatedChildImages.length > 0 && { ChildImages: updatedChildImages }) + }; + }) || []; + } + + skud[key] = val; + console.log("headerStock---skud", JSON.stringify(skud)); + skud_index >= 0 ? allSKUData[skud_index] = skud : allSKUData.push(skud); + console.log("headerStock---", JSON.stringify(allSKUData) + "\n" + val + "\n" + key); + + + + BgWindowData(allSKUData) + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + + function _render_Alert() { + return ( + + + { setShowAlert(false) }}> + Cancel + + { saveData() }}> + Yes + + + + ) + } + + + + async function OpenImgModal(imgPath, cat, splitChildItem, splitChildItemIndex, type, cameraType, skus) { + setSelectedImg(imgPath) + setShowModal(true); + if ((imgPath != '' && imgPath != null)) { + setShowImageSaveOp(false); + } + else { + setShowImageSaveOp(true); + } + setReCapImgModalObj({ cat, splitChildItem, splitChildItemIndex, type, cameraType, skus }) + } + + function cancelImage() { + // setImage1(''); + setSelectedImg(''); + setReCapImgModalObj({}) + setShowModal(false); + } + + function _OpenCaptureImage_Modal(img) { + + const isImageCap = (img != '' || img != null) ? true : false; + + let { cat, splitChildItem, splitChildItemIndex, skus, type, } = reCapImgModalObj + let camera2Label = (cat && cat.PromoImage2Lable) || ''; + console.log("reCapImgModalObj--", reCapImgModalObj) + return ( + + { + isImageCap && + + + + + { openCamera(cat, splitChildItem, splitChildItemIndex, type, type, skus, skus) }}> + + + + + {!showImageSaveOp && + { cancelImage(false) }}> + {ST.Close} + + } + {splitChildItem?.addImg == 1 && + { handleDelete(reCapImgModalObj) }}> + {"Delete"} + + } + + + } + + ) + } + + function _renderHeader(currentIndex) { + return ( + + {`${(currentIndex + 1)}/${zoomImageUrl.length}`} + { UpdateShow_zoomImageRef(false) }}> + + + + ) + } + + function openImageRefView(windowIndex = 0) { + setrefImageIndex(windowIndex); + UpdateShow_zoomImageRef(true); + } + + function render_Picker(label_key, value_key, onChange = () => { }, selected_data = {}) { + var data = []; + let qtn = selected_data.qtn || {}; + let window = selected_data.window || {}; + let skus = selected_data.skus || {}; + let isQtnDisabled = qtn.isDisabled != null || qtn.isDisabled != '' ? false : true; + let allAnswers = qtn.Answers || []; + + allAnswers.map((item, index) => { + let obj = { key: index, label: item[label_key], value: item[value_key] }; + if (selected_data.value == item[label_key]) + // console.log("selected---",selected_data.value, item[label_key]) + obj['component'] = + {item[label_key]} + ; + data.push(obj); + }); + + return ( + { onChange(option, qtn, window, skus); }} + overlayStyle={customStyle.addVisPickerOverlay} + cancelContainerStyle={customStyle.addVisPicker_OptionContainerStyle} + optionStyle={customStyle.addvis_opStyle} + optionTextStyle={customStyle.addvis_opTextStyle} + optionContainerStyle={customStyle.addVisPicker_OptionContainerStyle} + selectedKey={'1'} + disabled={isQtnDisabled} + > + + {(selected_data.value != null && selected_data.value != '' ? selected_data.value : '-' + ST.select + '-')} + + + ) + } + + + + + function onselectionChange(option, qtn, window, skus) { + setErrorField({}); + setError(false); + + let allData = SOSStockData; + console.log("kkk---", allData) + // let allData= WindowData + + let item = window; + let skuItem = skus; + + let allSKUData = SOSStockData; + let defData = { 'SOSHeaderValue': item.SOSHeaderValue, 'Images': [], 'SKUData': [] }; + const catindex = allSKUData.findIndex(i => i.SOSHeaderValue == item.SOSHeaderValue); + const catData = catindex >= 0 ? (allSKUData[catindex] || defData) : defData; + let AllSKUs = catData['SKUData'] || []; + + let defCData = { 'SOSChildValue': skuItem.SOSChildValue, 'ChildImages': [], 'WindowQA': {} }; + let skud_index = AllSKUs.findIndex(i => i.SOSChildValue == skuItem.SOSChildValue); + const skud = skud_index >= 0 ? (AllSKUs[skud_index] || defCData) : defCData + let WindowQA = skud['WindowQA'] || {}; + + let id_key = qtn.SOSQuestionId + "_ChildId_" + skus.SOSChildValue + '_AnswerId'; + let ans_key = qtn.SOSQuestionId + "_ChildId_" + skus.SOSChildValue + '_Answer'; + WindowQA[id_key] = option.value; + WindowQA[ans_key] = option.label; + skud['WindowQA'] = WindowQA + + skud_index >= 0 ? AllSKUs[skud_index] = skud : AllSKUs.push(skud); + + console.log("skud--------12-", AllSKUs) + + catData['SKUData'] = AllSKUs; + + catindex >= 0 ? allSKUData[catindex] = catData : allSKUData.push(catData); + // // setSOSStockData(allSKUData); + BgWindowData([...allSKUData]) + // ************************************************************************************************* + let aq_ans = qtn.Answers != null ? qtn.Answers : []; + let ans_obj = aq_ans.find(i => i.AnswerId == option.value) || {}; + let EQtns = ans_obj.SOSAQuestionEnable != null && ans_obj.SOSAQuestionEnable != '' ? ans_obj.SOSAQuestionEnable.replace(' ', '').split(',') : []; + let DQtns = ans_obj.SOSAQuestionDisable != null && ans_obj.SOSAQuestionDisable != '' ? ans_obj.SOSAQuestionDisable.replace(' ', '').split(',') : []; + + let sqtns = window.WindowQuestions || [] + + if (EQtns.length > 0) { + enableQtns(sqtns, EQtns, DQtns, data, wind, wind_index, allData, window) + } + else if (DQtns.length > 0) { + disableQtns(sqtns, DQtns, data, wind, wind_index, allData, window) + } + else { + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + BgUnsavedChanges(true) + + } + + async function disableQtns(sqtns, DQtns, data, wind = {}, wind_index = -1, allData = [], window = {}) { + + if (DQtns.length > 0) { + new Promise.all( + DQtns.map((qid, q_index) => { + let s_qtnindex = sqtns.findIndex(i => i.SOSQuestionId == qid) || {}; + let s_qtn = sqtns[s_qtnindex]; + if (s_qtn != null) { + s_qtn['isDisabled'] = true + sqtns[s_qtnindex] = s_qtn; + let id_key = s_qtn.SOSQuestionId + '_AnswerId'; + let ans_key = s_qtn.SOSQuestionId + '_Answer'; + data[id_key] = 0; + data[ans_key] = ''; + + wind['WindowQA'] = data; + wind_index >= 0 ? allData[wind_index] = wind : allData.push(wind); + return false + } else { + return false + } + }) + ).then(async (val) => { + let allwindows = Windows; + let windowIndex = allwindows.findIndex(i => i.SOSDefinitionId == window.SOSDefinitionId) + if (windowIndex >= 0) { + window['WindowQuestions'] = sqtns; + allwindows[windowIndex] = window; + WindowDataRef.current = allData + BgWindowData(allData); + setWindows(allwindows); + setGlobalWindows(allwindows); + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + }) + } + } + + async function enableQtns(sqtns, EQtns, DQtns, data, wind = {}, wind_index = -1, allData = [], window = {}) { + new Promise.all( + EQtns.map((qid, q_index) => { + let s_qtnindex = sqtns.findIndex(i => i.SOSQuestionId == qid) || {}; + let s_qtn = sqtns[s_qtnindex]; + if (s_qtn != null) { + s_qtn['isDisabled'] = false + sqtns[s_qtnindex] = s_qtn; + return false + } + else { + return false + } + }) + ).then(async (val) => { + if (DQtns.length > 0) { + await disableQtns(sqtns, DQtns, data, wind, wind_index, allData, window) + } + else { + let allwindows = SOSStockData; + let windowIndex = allwindows.findIndex(i => i.SOSDefinitionId == window.SOSDefinitionId) + if (windowIndex > 0) { + window['WindowQuestions'] = sqtns; + allwindows[windowIndex] = window; + setWindows(allwindows); + setGlobalWindows(allwindows); + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + } + }) + } + + + async function setMultiSelectValue(selectedItems = [], qtn = {}, window = {}) { + setErrorField({}); + setError(false); + console.log('setMultiSelectValue', selectedItems); + let id_key = qtn.SOSQuestionId + '_AnswerId'; + let ans_key = qtn.SOSQuestionId + '_Answer'; + let multi_key = qtn.SOSQuestionId + '_MultiOption'; + + let allData = SOSStockData; + let defData = { 'SOSDefinitionId': window.SOSDefinitionId }; + const wind_index = allData.findIndex(i => i.SOSDefinitionId == window.SOSDefinitionId); + let wind = wind_index >= 0 ? allData[wind_index] : defData; + let obj = wind.WindowQA || {}; + obj[id_key] = 0; + obj[multi_key] = selectedItems.join(','); + let anss = []; + selectedItems.map((itemValue) => { + let ans = qtn.Answers.find(c1 => c1.AnswerId == itemValue); + if (ans.Answer) { anss.push(ans.Answer) } + }); + obj[ans_key] = anss.join(','); + console.log('obj:', obj); + + wind['WindowQA'] = obj; + wind_index >= 0 ? allData[wind_index] = wind : allData.push(wind); + + WindowDataRef.current = allData + BgWindowData(allData); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + + function setTextValue(value, qtn, window, type = "") { + // console.log("value--",value) + if (value != '') { + let isValid = validateNumber(value, type); + if (!isValid) { + return; + } + } + + setErrorField({}); + setError(false); + let id_key = qtn.SOSQuestionId + '_AnswerId'; + let ans_key = qtn.SOSQuestionId + '_Answer'; + + let allData = SOSStockData; + // console.log("def---", window.SOSDefinitionId) + let defData = { 'SOSDefinitionId': window.SOSDefinitionId }; + const wind_index = allData.findIndex(i => i.SOSDefinitionId == window.SOSDefinitionId); + //console.log("windindx---", wind_index) + let wind = wind_index >= 0 ? allData[wind_index] : defData; + let obj = wind.WindowQA || {}; + + if (qtn.QuestionType == 'Date') { + let date_key = qtn.SOSQuestionId + '_Date'; + let d = value != null ? new Date(value) : new Date(); + let mfdate = moment(d).format('MM/YYYY'); + showQtnDatePicker(qtn, window, false); + obj[id_key] = 0; + obj[ans_key] = mfdate; + obj[date_key] = moment(d).format('MM/DD/YYYY'); + } + else { + obj[id_key] = 0; + obj[ans_key] = value; + } + + console.log(value, obj); + wind['WindowQA'] = obj; + wind_index >= 0 ? allData[wind_index] = wind : allData.push(wind); + + WindowDataRef.current = allData + BgWindowData(allData); + BgUnsavedChanges(true) + console.log("tyeop-14") + setrerenderdata(!rerenderdata); + } + + function renderDatePicker(qtn, window) { + let qtnn = qtn; + let DateRange = qtn.DateRange; + let maxDate = moment().add(10, 'years').format('MM/DD/YYYY'); + let minDate = moment().subtract(10, 'years').format('MM/DD/YYYY'); + if (DateRange == 'RFD') { + maxDate = moment().format('MM/DD/YYYY'); + } + else if (DateRange == 'RPD') { + minDate = moment().format('MM/DD/YYYY'); + } + + return ( + { setTextValue(selectedDate, qtnn, window) }} + maximumDate={new Date(maxDate)} + minimumDate={new Date(minDate)} + /> + ); + } + + const prevHdrFacingRef = useRef({}); + const alertActiveRef = useRef(false); + const pendingCatRef = useRef(null); + const decimalAllowRef = useRef(null); + const zeroFacingActionRef = useRef(null); + + + const hasCapturedImages = (cat) => { + + const wIndex = SOSStockData.findIndex( + i => i.SOSHeaderValue === cat.SOSHeaderValue + ); + + if (wIndex < 0) return false; + + const wind = SOSStockData[wIndex]; + + // HEADER + const headerImages = + wind?.Images?.some(img => img?.Image1); + + // CHILD + const childImages = + wind?.SKUData?.some(sku => + sku?.ChildImages?.some(img => img?.Image1) + ); + + return headerImages || childImages; + }; + + function _renderZeroFacingAlert() { + return ( + + + {/* CANCEL */} + { + setShowImageAlert(false); + alertActiveRef.current = false; + // restore previous value + const prevVal = + prevHdrFacingRef.current?.[pendingCatRef.current?.SOSHeaderValue]; + + if (pendingCatRef.current) { + onHdrStockValChange( + pendingCatRef.current, + prevVal || '', + 'SOSHdrFacing', + decimalAllowRef.current + ); + } + }} + > + + Cancel + + + + {/* YES */} + { + setShowImageAlert(false); + zeroFacingActionRef.current?.(); + alertActiveRef.current = false; + }} + > + + Yes + + + + + + ); + } + + // const handleZeroFacingAlert = (cat, newVal, decimalAllow) => { + // if (alertActiveRef.current) return; + // // const prevVal = prevHdrFacingRef.current[cat.SOSHeaderValue]; + // // if (newVal === "0" && prevVal && prevVal !== "0") { + // if (newVal === "0" && hasCapturedImages(cat)) { + // alertActiveRef.current = true; + // // Store pending action + // zeroFacingActionRef.current = () => { + // onHdrStockValChange(cat, "0", 'SOSHdrFacing', decimalAllow); + // cleanupImagesOnZeroFacing(cat); + // }; + // pendingCatRef.current = cat; + // decimalAllowRef.current = decimalAllow; + // setShowImageAlert(true); + // } + // }; + + const handleZeroFacingAlert = (cat, newVal, decimalAllow) => { + if (alertActiveRef.current) return; + if (newVal === "0" && hasCapturedImages(cat)) { + alertActiveRef.current = true; + zeroFacingActionRef.current = () => { + // ✅ ONLY CLEANUP + cleanupImagesOnZeroFacing(cat); + onHdrStockValChange(cat, "0", 'SOSHdrFacing', decimalAllow); + + alertActiveRef.current = false; + }; + pendingCatRef.current = cat; + decimalAllowRef.current = decimalAllow; + setShowImageAlert(true); + } + }; + + + + + const cleanupImagesOnZeroFacing = (window) => { + // Use ref so we have latest data when called from async alert callback + let allData = [...(WindowDataRef.current || SOSStockData)]; + const wIndex = allData.findIndex( + i => i.SOSHeaderValue === window.SOSHeaderValue + ); + + if (wIndex < 0) return; + let wind = { ...allData[wIndex] }; + wind.SOSHdrFacing = "0"; + /* ---------- HEADER IMAGES ---------- */ + wind.Images = (wind.Images || []).map(img => { + // remove ONLY user added images + if (Number(img.addImg) === 1) return null; + // ✅ VERY IMPORTANT CHANGE HERE + return { + ...img, + Image1: "NA", // ⭐⭐⭐⭐⭐ THIS FIXES YOUR BUG + Image1Name: "" + }; + + }).filter(Boolean); + + + /* ---------- CHILD IMAGES ---------- */ + + let SKUData = wind.SKUData || []; + SKUData = SKUData.map(sku => { + return { + ...sku, + ChildImages: (sku.ChildImages || []).map(img => { + if (Number(img.addImg) === 1) return null; + return { + ...img, + Image1: "NA", // ⭐⭐⭐⭐⭐ SAME FIX + Image1Name: "" + }; + }).filter(Boolean) + }; + }); + + wind.SKUData = SKUData; + allData[wIndex] = wind; + WindowDataRef.current = allData; + setSOSStockData(allData); + setrerenderdata2(prev => !prev); + setrerenderdata3(prev => !prev); + setrerenderdata4(prev => !prev); + BgUnsavedChanges(true); + }; + + + function _renderSOSList() { + let SOSHeaderLabel = KPIFields.findIndex(i => i.KPIFieldName == 'SOSHeaderLabel') + let SOSHeaderObj = SOSHeaderLabel >= 0 ? KPIFields[SOSHeaderLabel] : {}; + let SOSHeaderDisName = SOSHeaderLabel >= 0 ? SOSHeaderObj['KPIFieldDisplayName'] : 'Product Facing'; + + let SOSFacingMaxValue = KPIFields.findIndex(i => i.KPIFieldName == 'SOSFacingMaxValue') + let SOSFacingObj = SOSFacingMaxValue >= 0 ? KPIFields[SOSFacingMaxValue] : {}; + let SOSFacingMaxDisplayName = SOSFacingMaxValue >= 0 ? SOSFacingObj['KPIFieldDisplayName'] : ''; + let SOSFacingValueEnable = SOSFacingMaxValue >= 0 ? SOSFacingObj['KPIFieldEnable'] : false; + + const maxFacingVal = Number(SOSFacingMaxDisplayName); + + let sosDecimalValue = KPIFields.findIndex(i => i.KPIFieldName == 'SOSValueDecimalAllow') + let sosDecimalValueObj = sosDecimalValue >= 0 ? KPIFields[sosDecimalValue] : {}; + let sosDecimalValueEnable = sosDecimalValue >= 0 ? sosDecimalValueObj['KPIFieldEnable'] : false; + + let sosPercValue = KPIFields.findIndex(i => i.KPIFieldName == 'SOSPercentageCalculate') + let sosPercValueObj = sosPercValue >= 0 ? KPIFields[sosPercValue] : {}; + let sosPercValueEnable = sosPercValue >= 0 ? sosPercValueObj['KPIFieldEnable'] : false; + let decimalAllow = sosDecimalValueEnable ? 'decimal' : 'numeric'; + return ( + + + + `window_${index.toString()}`} + renderItem={({ item, index }) => { + const cat = item; + const catIndex = index; + + let RefImage = cat.SOSRefImage; + let SOSHeaderImage = item.SOSHeaderImage == 1 || item.SOSHeaderImage == 'true' ? 1 : 0; + let SOSHeaderFacing = item.SOSHeaderFacing == 1 || item.SOSHeaderFacing == 'true' ? 1 : 0; + let SOSHeaderFacingLable = item.SOSHeaderFacingLable != null ? item.SOSHeaderFacingLable : ''; + let SOSRefImagePopUp = item.SOSRefImagePopUP == 'true' || item.SOSRefImagePopUP == true ? true : false; + let WindowQuestions = cat.WindowQuestions || []; + const cindex = SOSStockData.findIndex(i => i.SOSHeaderValue == item.SOSHeaderValue); + const cobj = cindex >= 0 ? SOSStockData[cindex] : {}; + const HeaderImages = cobj['Images'] || []; + let SOSHdrFacing = cobj['SOSHdrFacing'] != null ? cobj['SOSHdrFacing'] : ''; + let this_SKUData = cobj['SKUData'] || []; + let QuestionsData = cobj.WindowQA || {}; + let show_HdrForm = SOSHeaderFacing == true || (SOSHeaderImage == true && HeaderImages.length > 0); + + // Error Field highlight styles + let EF_Cat = errorfield.EF_Cat != null ? errorfield.EF_Cat : {}; + let show_errorhere = error == true && EF_Cat.SOSHeaderValue == cat.SOSHeaderValue && EF_Cat.SOSDefinitionId == cat.SOSDefinitionId; + + // this will show error field in red (if window is present and exist reason is enabled and not filled ) or (if window is not present and Not exist reason is enabled and not filled ) + let EF_HdrFacing = errorfield.EF_HdrFacing || ''; + let EStyle_HdrFacing = show_errorhere && EF_HdrFacing == 'HdrFacing' ? customStyle.stk_inptSTyle_error : {}; + + //get SOS Target at header from skulist first child- as all children of particular hdr will contain same SOSTarget Value + let child_list = cat.skulist || []; + let first_child = child_list.length > 0 ? child_list[0] : {}; + let SOSTarget = first_child.SOSTarget; + // let SelfchildCount=0; + let facingPerc1 = 0; + let SOSChildSelfFacingFlag = 0; + + + let isVisible = Boolean(ItemsInView.find(({ item: i, isViewable }) => i.SOSHeaderValue == item.SOSHeaderValue && isViewable)) + + let valData = this_SKUData.reduce((a, b) => (a || 0) + (b.SelfFacing || 0), 0); + let SelfchildCount = valData || 0 + + if (isVisible && cat.animatedHeight != null) { + setTimeout(() => { + Animated.timing(cat.animatedHeight, { + toValue: 0, + duration: 800, + useNativeDriver: false, + }).start(); + }, (props.RefImagePopUpTime || 0) * 1000) + } + + if ((SOSHeaderFacing == true || SOSHeaderFacing == 1) && (SelfchildCount != 0 && SOSHdrFacing != 0)) { + facingPerc1 = ((SelfchildCount || 0) / (SOSHdrFacing || 0)) * 100 + console.log("vdshva--", facingPerc1) + } + + let HeaderAddImageAllow = (cat?.HeaderAddImageAllow ? true : false) || false + let ChildAddImageAllow = (cat?.ChildAddImageAllow ? true : false) || false + + const isHdrFacingZero = Number(SOSHdrFacing) === 0; + + let tempHeaderDisable = HeaderImages?.some(item => !item?.Image1); + let HeaderAddImageMax = cat?.HeaderAddImageMax <= HeaderImages.length + let AddDisable = SOSHeaderFacing && isHdrFacingZero ? true : (tempHeaderDisable ? true : HeaderAddImageMax && !tempHeaderDisable); + + return ( + + + + + {item.HeaderName} + {/* {sosPercValueEnable==true && SOSHeaderFacing==true&& {`SOS ${facingPerc1.toFixed(0)}%`} } */} + + {/* {item.HeaderName } */} + {/* + ` (${SOSTarget}%)`*/} + {(sosPercValueEnable == true || sosPercValueEnable == 1) && (SOSHeaderFacing == true || SOSHeaderFacing == 1) && {`SOS Percent: ${facingPerc1.toFixed(0)}%`}} + {SOSTarget != null && SOSTarget != '' && {`SOS Target: ${SOSTarget}%`}} + { openImageRefView(index) }}> + + + + + {SOSRefImagePopUp && + + + + } + + {show_HdrForm == true && + + {SOSHeaderFacing == true && !SOSFacingValueEnable && + + + + {SOSHeaderFacingLable} + + + + { inputRefs.current['input_' + cat.SOSHeaderValue] = reff; }} + placeholder="" + autoComplete='off' + placeholderTextColor={PageTheme.$placeholder_color} + value={(SOSHdrFacing + '')} + maxLength={10} + keyboardType='numeric' + blurOnSubmit={false} + contextMenuHidden={true} + returnKeyType={(Platform.OS === 'ios') ? 'done' : 'next'} + onSubmitEditing={() => { focusToNext(cat, catIndex, "", "", "HEADER") }} + onChangeText={(val) => { onHdrStockValChange(cat, val, 'SOSHdrFacing', decimalAllow) }} + /> + + + + } + + {SOSHeaderFacing == true && SOSFacingValueEnable == true && + + + + {SOSHeaderFacingLable} + + + + {/* { inputRefs.current['input_' + cat.SOSHeaderValue] = reff; }} + placeholder="" + autoComplete='off' + placeholderTextColor={PageTheme.$placeholder_color} + value={(SOSHdrFacing + '')} + // maxLength={10} + keyboardType='numeric' + blurOnSubmit={false} + contextMenuHidden={true} + returnKeyType={(Platform.OS === 'ios') ? 'done' : 'next'} + onSubmitEditing={() => { focusToNext(cat, catIndex, "", "", "HEADER") }} + onChangeText={(val) => { + if (val >= 0 && val <= maxFacingVal) { + onHdrStockValChange(cat, val, 'SOSHdrFacing', decimalAllow); + + } + else if (val === '') { + // Handle clearing the input + onHdrStockValChange(cat, '', 'SOSHdrFacing', decimalAllow); + } else { + notify(`Please fill the value less than and equal to ${maxFacingVal}`, "LONG"); + } + }} + /> */} + + { + inputRefs.current['input_' + cat.SOSHeaderValue] = reff; + }} + value={(SOSHdrFacing + '')} + keyboardType='numeric' + onFocus={() => { + prevHdrFacingRef.current[cat.SOSHeaderValue] = SOSHdrFacing; + }} + + onChangeText={(val) => { + // normalize leading zeros + if (val.length > 1 && val.startsWith("0")) { + val = String(parseInt(val, 10)); + } + if (val === "") { + console.log("headerStock---val is valid3", val); + onHdrStockValChange(cat, '', 'SOSHdrFacing', decimalAllow); + return; + } + if (val === "0" && SOSHdrFacing !== "0") { + + if (!hasCapturedImages(cat)) { + console.log("headerStock---val is valid4", val); + onHdrStockValChange(cat, "0", 'SOSHdrFacing', decimalAllow); + return; + } + console.log("headerStock---val is valid2", val); + handleZeroFacingAlert(cat, val, decimalAllow); + return; + } + if (val >= 0 && val <= maxFacingVal) { + console.log("headerStock---val is valid1", val); + onHdrStockValChange(cat, val, 'SOSHdrFacing', decimalAllow); + } + else { + notify( + `Please fill the value less than and equal to ${maxFacingVal}`, + "LONG" + ); + } + }} + /> + + + + + } + + {(SOSHeaderImage == true && HeaderImages?.length > 0) && + + + {'Capture SOS Header Images'} + + + + {(rerenderdata2 == rerenderdata2) && + HeaderImages.map((item, index) => { + let splitItem = item; + let splitItemIndex = index; + let Image1Name = splitItem['Image1Name'] != null && splitItem['Image1Name'] != '' ? splitItem['Image1Name'] : ''; + let Image1 = splitItem['Image1'] != null && splitItem['Image1'] != '' ? splitItem['Image1'] : ''; + let isImg1mad = splitItem['img1Required'] || false; + let EF_HdrImageIndex = errorfield.EF_HdrImageIndex === 0 || errorfield.EF_HdrImageIndex != null ? errorfield.EF_HdrImageIndex : ''; + let show_hdrImageErrHere = EF_HdrImageIndex == splitItemIndex; + + let EF_HdrImage = errorfield.EF_HdrImage || ''; + let EStyle_HdrImage = show_errorhere && show_hdrImageErrHere && EF_HdrImage == 'HdrImage' ? customStyle.error_CatImage2 : {}; + return ( + + {((Image1 == '' || Image1 == null) && isImg1mad) ? + { openCamera(cat, splitItem, splitItemIndex, '1', '1', {}, {}) }}> + + : (Image1 == '' || Image1 == null) ? + { openCamera(cat, splitItem, splitItemIndex, '1', '1', {}, {}) }}> + + : (Image1 == "NA") ? + { }}> + + : (Image1 != '' || Image1 != null) ? + { OpenImgModal(Image1, cat, splitItem, splitItemIndex, '1') }}> + + : null + } + + ); + }) + } + + <> + {HeaderAddImageAllow && + + openCamera(cat, {}, 0, '1', '1', {}, {}, 1)}> + + + } + + + + + + + + + + + + } + + } + + + + + {SOSHeaderDisName} + + + + + + { + const skus = item; + const sku_index = index; + + let SOSChildImage = skus.SOSChildImage == 1 || skus.SOSChildImage == 'true' ? 1 : 0; + console.log("SOSChildImage",SOSChildImage) + let SOSChildTotalFacing = skus.SOSChildTotalFacing == 1 || skus.SOSChildTotalFacing == 'true' ? 1 : 0; + let SOSChildSelfFacing = skus.SOSChildSelfFacing == 1 || skus.SOSChildSelfFacing == 'true' ? 1 : 0; + let SOSChildTotalFacingLable = skus.SOSChildTotalFacingLable != null ? skus.SOSChildTotalFacingLable : ''; + let SOSChildSelfFacingLable = skus.SOSChildSelfFacingLable != null ? skus.SOSChildSelfFacingLable : ''; + + let thisCatSkuData_i = this_SKUData.findIndex(i => i.SOSChildValue == skus.SOSChildValue); + let thisCatSkuData = thisCatSkuData_i >= 0 ? (this_SKUData[thisCatSkuData_i] || {}) : {}; + let TotalFacing = thisCatSkuData.TotalFacing != null ? thisCatSkuData.TotalFacing : ''; + let SelfFacing = thisCatSkuData.SelfFacing != null ? thisCatSkuData.SelfFacing : ''; + const ChildImages = thisCatSkuData['ChildImages'] || []; + const WindowQA = thisCatSkuData?.WindowQA || {} + let addDisableChild1 = ChildImages?.some(item => !item?.Image1); + // Child Image Max and Disabled btn + let ChildAddImageMax = cat?.ChildAddImageMax <= ChildImages.length + // let addDisableChild = isHdrFacingZero ? true : (addDisableChild1 ? true : ChildAddImageMax && !addDisableChild1) + let addDisableChild = (SOSHeaderFacing && isHdrFacingZero) ? true : (addDisableChild1 ? true : ChildAddImageMax && !addDisableChild1) + console.log("addDisableChild", addDisableChild,ChildImages,addDisableChild1) + let EF_Brand = errorfield.EF_Brand != null ? errorfield.EF_Brand : {}; + let show_ChildErrHere = EF_Brand.SOSChildValue == skus.SOSChildValue; + let EF_ChildTotal = errorfield.EF_ChildTotal || ''; + let EStyle_ChildTotal = show_errorhere && show_ChildErrHere && EF_ChildTotal == 'ChildTotal' ? customStyle.stk_inptSTyle_error : {}; + let EF_ChildSelf = errorfield.EF_ChildSelf || ''; + let EStyle_ChildSelf = show_errorhere && show_ChildErrHere && EF_ChildSelf == 'ChildSelf' ? customStyle.stk_inptSTyle_error : {}; + let facingPerc = 0; + if (((SOSChildTotalFacing == true || SOSChildTotalFacing == 1) && (SOSChildSelfFacing == true || SOSChildSelfFacing == 1)) && (SelfFacing != 0 && TotalFacing != 0)) { + facingPerc = ((SelfFacing || 0) / (TotalFacing || 0)) * 100 + } + SOSChildSelfFacingFlag = SOSChildSelfFacing; + SelfchildCount = SelfFacing; + + return ( + + + {skus.ChildName} + {sosPercValueEnable == true && SOSHeaderFacing != true && {`SOS ${facingPerc.toFixed(0)}%`}} + + {/* {skus.ChildName} */} + + {(SOSChildImage == true && ChildImages.length>0) && + + + {'Capture SOS Child Images'} + + + + {rerenderdata4 == rerenderdata4 && + ChildImages.map((item, index) => { + let splitChildItem = item; + let splitChildItemIndex = index; + let Image1Name = splitChildItem['Image1Name'] != null && splitChildItem['Image1Name'] != '' ? splitChildItem['Image1Name'] : ''; + let Image1 = splitChildItem['Image1'] != null && splitChildItem['Image1'] != '' ? splitChildItem['Image1'] : ''; + let isImg1mad = splitChildItem['img1Required'] || false; + let EF_ChildImageIndex = errorfield.EF_ChildImageIndex === 0 || errorfield.EF_ChildImageIndex != null ? errorfield.EF_ChildImageIndex : ''; + let show_ChildImgErrHere = EF_ChildImageIndex == splitChildItemIndex; + + let EF_ChildImage = errorfield.EF_ChildImage || ''; + let EStyle_ChildImage = show_errorhere && show_ChildErrHere && show_ChildImgErrHere && EF_ChildImage == 'ChildImage' ? customStyle.error_CatImage2 : {}; + return ( + + {/* CameraGrey */} + {console.log("sku1111", skus)} + {((Image1 == '' || Image1 == null) && isImg1mad) ? + { openCamera(cat, splitChildItem, splitChildItemIndex, '2', '2', skus, skus) }}> + + : (Image1 == '' || Image1 == null) ? + { openCamera(cat, splitChildItem, splitChildItemIndex, '2', '2', skus, skus) }}> + + : (Image1 == "NA") ? + { }}> + + : (Image1 != '' || Image1 != null) ? + { OpenImgModal(Image1, cat, splitChildItem, splitChildItemIndex, '2', skus, skus) }}> + + : null + } + + + ); + }) + } + + {SOSChildImage == true && ChildImages.length>0 && ChildAddImageAllow && + + openCamera(cat, {}, 0, '2', '2', skus, skus, 1)} + style={{ opacity: addDisableChild ? 0.4 : 1, marginRight: 10 }} + > + + + } + + + + } + + + + + + {SOSChildTotalFacing == true && !SOSFacingValueEnable && + + + + {SOSChildTotalFacingLable} + + + + { inputRefs.current['input1_' + cat.SOSHeaderValue + '_' + skus.SOSChildValue] = reff; }} + style={[customStyle.SOSInputStyle, EStyle_ChildTotal]} + placeholder="" + autoComplete='off' + placeholderTextColor={PageTheme.$placeholder_color} + value={(TotalFacing + '')} + keyboardType='numeric' + maxLength={5} + contextMenuHidden={true} + returnKeyType={(Platform.OS === 'ios') ? 'done' : 'next'} + blurOnSubmit={false} + onSubmitEditing={() => { focusToNext(cat, catIndex, skus, sku_index, "CHILD1") }} + onChangeText={(val) => { onStockValChange(cat, skus, val, 'TotalFacing', decimalAllow) }} + /> + + + } + + {SOSChildTotalFacing == true && SOSFacingValueEnable && + + + + {SOSChildTotalFacingLable} + + + + { inputRefs.current['input1_' + cat.SOSHeaderValue + '_' + skus.SOSChildValue] = reff; }} + style={[customStyle.SOSInputStyle, EStyle_ChildTotal]} + placeholder="" + autoComplete='off' + placeholderTextColor={PageTheme.$placeholder_color} + value={(TotalFacing + '')} + keyboardType='numeric' + // maxLength={5} + contextMenuHidden={true} + returnKeyType={(Platform.OS === 'ios') ? 'done' : 'next'} + blurOnSubmit={false} + onSubmitEditing={() => { focusToNext(cat, catIndex, skus, sku_index, "CHILD1") }} + // onChangeText={(val)=>{ onStockValChange(cat,skus,val,'TotalFacing',decimalAllow)}} + onChangeText={(val) => { + if (val >= 0 && val <= maxFacingVal) { + onStockValChange(cat, skus, val, 'TotalFacing', decimalAllow) + } else if (val === '') { + // Handle clearing the input + onStockValChange(cat, skus, '', 'TotalFacing', decimalAllow) + } else { + notify(`Please fill the value less than and equal to ${maxFacingVal}`, "LONG"); + } + }} + /> + + + } + + + + + {SOSChildSelfFacing == true && !SOSFacingValueEnable && + + + + {SOSChildSelfFacingLable} + + + { inputRefs.current['input2_' + cat.SOSHeaderValue + '_' + skus.SOSChildValue] = reff; }} + placeholder="" + autoComplete='off' + placeholderTextColor={PageTheme.$placeholder_color} + value={(SelfFacing + '')} + keyboardType='numeric' + maxLength={5} + contextMenuHidden={true} + returnKeyType={(Platform.OS === 'ios') ? 'done' : 'next'} + blurOnSubmit={false} + onSubmitEditing={() => { focusToNext(cat, catIndex, skus, sku_index, "CHILD2") }} + onChangeText={(val) => { onStockValChange(cat, skus, val, 'SelfFacing', decimalAllow) }} + /> + + + } + + {SOSChildSelfFacing == true && SOSFacingValueEnable && + + + + {SOSChildSelfFacingLable} + + + { inputRefs.current['input2_' + cat.SOSHeaderValue + '_' + skus.SOSChildValue] = reff; }} + placeholder="" + autoComplete='off' + placeholderTextColor={PageTheme.$placeholder_color} + value={(SelfFacing + '')} + keyboardType='numeric' + // maxLength={maxFacingVal} + contextMenuHidden={true} + returnKeyType={(Platform.OS === 'ios') ? 'done' : 'next'} + blurOnSubmit={false} + onSubmitEditing={() => { focusToNext(cat, catIndex, skus, sku_index, "CHILD2") }} + // onChangeText={(val)=>{ onStockValChange(cat,skus,val,'SelfFacing',decimalAllow)}} + // Handle change to restrict value between 0 and 499 + onChangeText={(val) => { + if (val >= 0 && val <= maxFacingVal) { + onStockValChange(cat, skus, val, 'SelfFacing', decimalAllow); + } else if (val === '') { + // Handle clearing the input + onStockValChange(cat, skus, '', 'SelfFacing', decimalAllow); + } else { + notify(`Please fill the value less than and equal to ${maxFacingVal}`, "LONG"); + // If the value is outside the range, you can show an error or ignore it + } + }} + /> + + + } + {(skus?.WindowQuestions.length > 0) && + + + {currentMenu.MenuName + ' Questions'} + + {/* {WindowQuestions.map((item,index)=>{ */} + {skus?.WindowQuestions?.map((item, index) => { + + let qtn = item; + let qtnIndex = index; + let selansid = '', selanswer = '', selimg = '', showImageTag = false; + let id_key = qtn.SOSQuestionId + "_ChildId_" + skus.SOSChildValue + '_AnswerId'; + let ans_key = qtn.SOSQuestionId + "_ChildId_" + skus.SOSChildValue + '_Answer'; + let multi_key = qtn.SOSQuestionId + "_ChildId_" + skus.SOSChildValue + '_MultiOption'; + let date_key = qtn.SOSQuestionId + "_ChildId_" + skus.SOSChildValue + '_Date'; + let img_key = qtn.SOSQuestionId + "_ChildId_" + skus.SOSChildValue + '_ImagePath1'; + {/* console.log("img---",img_key) */ } + let imgname_key = qtn.SOSQuestionId + "_ChildId_" + skus.SOSChildValue + '_ImageName1'; + let rating_key = qtn.SOSQuestionId + "_ChildId_" + skus.SOSChildValue + '_Rating'; + + let list_mcdata = []; + let SOSQDefaultQuestionEnable = qtn.SOSQDefaultQuestionEnable == 'true' || qtn.SOSQDefaultQuestionEnable == 1 || qtn.SOSQDefaultQuestionEnable == '1' ? true : false; + let isDisabled = qtn.isDisabled; + if (qtn.QuestionType == 'Single choice list') { + selansid = WindowQA[id_key] != null ? WindowQA[id_key] : ''; + selanswer = WindowQA[ans_key] != null ? WindowQA[ans_key] : ''; + } + else if (qtn.QuestionType == 'Multi choice list') { + if (qtn.Answers != null) { + for (var i = 0; i < qtn.Answers.length; i++) { + let obj = { 'AnswerId': parseInt(qtn.Answers[i].AnswerId), 'Answer': qtn.Answers[i].Answer }; + list_mcdata.push(obj); + } + } + selansid = WindowQA[multi_key] != null && WindowQA[multi_key] != '' ? WindowQA[multi_key].split(',') : []; + console.log("selansid--", selansid) + if (selansid != null && selansid.length > 0) { + let arr = []; + for (var i = 0; i < selansid.length; i++) { + arr.push(parseInt(selansid[i])); + } + selansid = arr; + } + // if(selansid!=null && selansid.length>0){ + // let arr=[]; + // for(var i=0;i 0) { + for (var i = 0; i < qtn.Answers.length; i++) { + let ansss = qtn.Answers[i]; + let isandImgAl = (ansss.SOSAShowCamera == 'true' || ansss.SOSAShowCamera == 1); + + if (qtn.QuestionType == 'Single choice list' && (isandImgAl && ansss.AnswerId == selansid)) { + showImageTag = true; + } + else if (qtn.QuestionType == 'Multi choice list' && (isandImgAl && selansid.indexOf(ansss.AnswerId) >= 0)) { + showImageTag = true; + } + + } + } + } + + if (showImageTag) { + {/* selimg=WindowQA[img_key]!=null && WindowQA[img_key]!=''?'file://'+WindowQA[img_key]:''; */ } + + selimg = WindowQA[img_key] != null && WindowQA[img_key] !== "" ? "file://" + WindowQA[img_key] : ""; + console.log("checkselimg--", selimg) + } + + let EF_qtn = errorfield.EF_qtn != null ? errorfield.EF_qtn : {}; + let showQtnErrHere = EF_qtn.SOSQuestionId == qtn.SOSQuestionId; + //Qtn_MultiChoice + let EF_Qtn_MultiChoice = errorfield.EF_Qtn_MultiChoice || ''; + let EStyle_Qtn_MultiChoice = show_errorhere && showQtnErrHere && EF_Qtn_MultiChoice == 'Qtn_MultiChoice' ? customStyle.stk_MultiSSTyle_error : {}; + + + let EF_Qtn_Date = errorfield.EF_Qtn_Date || ''; + let EStyle_Qtn_Date = show_errorhere && showQtnErrHere && EF_Qtn_Date == 'Qtn_Date' ? customStyle.stk_inptSTyle_error : {}; + + let EF_Qtn_Input = errorfield.EF_Qtn_Input || ''; + let EStyle_Qtn_Input = show_errorhere && showQtnErrHere && EF_Qtn_Input == 'Qtn_Input' ? customStyle.stk_inptSTyle_error : {}; + + let EF_Qtn_Image = errorfield.EF_Qtn_Image || ''; + let EStyle_Qtn_Image = show_errorhere && showQtnErrHere && EF_Qtn_Image == 'Qtn_Image' ? customStyle.stk_inptSTyle_error : {}; + + + if (!isDisabled) { + return ( + + {qtn.SOSQuestionName} + {qtn.QuestionType == 'Single choice list' && qtn.Answers && + render_Picker('Answer', 'AnswerId', onselectionChange, { value: selanswer, qtn: qtn, window: cat, skus }) + } + + {qtn.QuestionType == 'Multi choice list' && qtn.Answers && + { setMultiSelectValue(selectedItems, qtn, window) }} //setMultiSelectValue(selectedItems,qtn) + selectedItems={selansid} + selectText="Pick Items" + searchInputPlaceholderText={ST.SearchItems + "..."} + // onChangeInput={ (text)=> console.log(text)} + tagRemoveIconColor={PageTheme.$primary_color} + tagBorderColor={PageTheme.$primary_color} + tagTextColor={PageTheme.$primary_color} + selectedItemTextColor={PageTheme.$primary_color} + selectedItemIconColor={PageTheme.$primary_color} + itemTextColor={PageTheme.$text_color} + displayKey="Answer" + searchInputStyle={customStyle.wind_MultiSearchInputStyle} + styleMainWrapper={EStyle_Qtn_MultiChoice} + submitButtonColor={PageTheme.$primary_color} + submitButtonText={ST.Submit} + /> + } + + {(qtn.QuestionType == 'Number' || qtn.QuestionType == 'Decimal' || qtn.QuestionType == 'Text') && + console.log("onchangeVal--", e.value)} + onChangeText={(val) => { setTextValue(val, qtn, cat, (qtn.QuestionType == 'Decimal' ? 'decimal' : (qtn.QuestionType == 'Text' ? 'text' : 'numeric'))) }} + /> + } + { + (qtn.QuestionType == 'Date') && + + {selansid != '' ? selansid : 'MM/YYYY'} + { setDateValue(selanswer); showQtnDatePicker(qtn, window, true) }}> + + + + } + { + (qtn.QuestionType == 'QR') && + + {selanswer != '' ? selanswer : ''} + { setQREnable(true); setQRqtnData({ qtn, window }); setShowQRCamera(true); }}> + {/* */} + + + + } + {((qtn.showDatePicker == true || qtn.showDatePicker == 'true') && (qtn.QuestionType == 'Date')) && + renderDatePicker(qtn, window) + } + { + (qtn.QuestionType == 'Rating') && + + {selanswer} + { setRatingQtn(qtn); setRatingWindow(window); setShowRating(true); }}> + + + + } + + + + { + showImageTag && + + + { + openCamera(cat, {}, 0, '1', '2', qtn, skus) + }}> + + + + } + + ) + } + else { + return null; + } + })} + + } + + + ) + }} /> + + + + + + ); + }} + /> + + + ) + } + + return ( + + {processing && } + + + + {_OpenCaptureImage_Modal()} + {_render_Alert()} + {_renderZeroFacingAlert()} + { setShowCamera(false); getImage(imgData) }} showCamera={showCamera} onHideCamera={() => { setShowCamera(false); }} /> + + + {Object.keys(storeData).length > 0 && + _renderSOSList() + } + + { submitOpeningStock() }} /> + + + + {show_zoomImage && + + null} + /> + + } + + ); +} + + +export default connect(mapStateToProps, mapDispatchToProps)(ShareOfShelfOneApp); \ No newline at end of file diff --git a/PerformicsSrc/src/screens/ShareOfShelfOneAppIR.js b/PerformicsSrc/src/screens/ShareOfShelfOneAppIR.js new file mode 100644 index 0000000..5259b2e --- /dev/null +++ b/PerformicsSrc/src/screens/ShareOfShelfOneAppIR.js @@ -0,0 +1,2718 @@ + +import React, { useState, useEffect, useRef } from 'react'; +import Container from '../components/container'; +import { useRoute } from '@react-navigation/native'; +import { globalStyles, customStyles, GetPageTheme } from "../styles/Global"; +import { StatusBar, Image, TextInput, View, Text, ScrollView, TouchableOpacity, Platform, PermissionsAndroid, FlatList, Alert, KeyboardAvoidingView, AppState, DeviceEventEmitter, Keyboard } from 'react-native'; +import { ReactReduxContext, connect, useSelector, useDispatch } from 'react-redux'; +import { mapStateToProps, mapDispatchToProps } from '../reducers/contextProvider'; +import SQLite from 'react-native-sqlite-2'; +import { notify } from '../components/notify'; +import moment from 'moment'; +import { getDownloadJson, getKPIFields, marktext1, marktext2, UploadData2, validateNumber } from '../controller/functions'; +import { get_item, set_item, clear_item } from '../components/localStorage'; +import { version, sloganline, appname, testurl, db, colors_Arr, common_ImagePath, ImageFolderPath, } from '../constants/constants'; +import CustomHeader from '../components/customHeader'; +import { AntDesign, Entypo, FontAwesome, MaterialCommunityIcons } from '../components/icons'; +import CustomLoader from '../components/CustomLoader'; +import LinearGradient from 'react-native-linear-gradient'; +import { AppTables } from '../constants/tableConstants'; +import * as RNFS from 'react-native-fs'; +import GradientButton from '../components/gradientButton'; + +import CustomModal from '../components/CustomModal'; +import CustomCamera from '../components/Camera'; +import IRLogin from '../components/IRLogin'; +import ImageViewer from 'react-native-image-zoom-viewer'; +import { getMethodName, METHODS } from '../constants/methodNames'; + +import CameraImg3 from '../assets/performics/camera_tick.svg'; +import CameraImg2 from '../assets/performics/camera_icon.svg'; +import CameraImg4 from '../assets/performics/camera_asterisk.svg'; +import CameraImg5 from '../assets/image/astrickcamera.svg'; +import { SyncIRsessionsInKPI } from '../constants/uploadData'; + +function ShareOfShelfOneAppIR(props) { + const route = useRoute(); + const ST = props.StaticText || {}; + // get all theme styles acc to current theme set + const PageTheme = GetPageTheme(props.DarkMode, route.name); + const customStyle = customStyles(props.DarkMode, route.name); + + const [processing, setProcessing] = useState(true); + const [loaderTitle, setLoaderTitle] = useState('loading...'); + const [isAdhocScreen, setIsAdhocScreen] = useState(false); + const [storeData, setStoreData] = useState({}); + const [StoreCameraAllow, setStoreCameraAllow] = useState(true); + const [currentMenu, setCurrentMenu] = useState({}); + const [brandData, setBrandData] = useState([]); + const [rerenderdata, setrerenderdata] = useState(0); + const [rerenderdata2, setrerenderdata2] = useState(0); + const [rerenderdata3, setrerenderdata3] = useState(0); + const [rerenderdata4, setrerenderdata4] = useState(0); + const [ItemsInView, setItemsInView] = useState([]); + + + const [SOSStockData, setSOSStockData] = useState([]); + // const [SOSIRImages, setSOSIRImages] = useState([]); + // const [GbTempSessionId, setGbTempSessionId] = useState(""); + const SOSIRImages = useRef([]); + const GbTempSessionId = useRef(""); + const GbTempSessionObj = useRef({}); + const [AllSOSData, setAllSOSData] = useState([]); + const [showAlert, setShowAlert] = useState(false); + const [showUploadAlert, setshowUploadAlert] = useState(false); + const [hasUnsavedChanges, setHasUnsavedChanges] = useState(false); + const [showCamera, setShowCamera] = useState(false); + const showCameraRef = useRef(false); + const [getImageProps, setGetImageProps] = useState({}); + const [KPIFields, setKPIFields] = useState([]); + const [GridValue, setGridValue] = useState(false); + + const [show_zoomImage, setShow_zoomImage] = useState(false); + const [show_zoomImage2, setShow_zoomImage2] = useState(false); + const Show_zoomImageRef = useRef(false); + const Show_zoomImageRef2 = useRef(false); + const [zoomImageUrl, setZoomImageUrl] = useState([]); + const [zoomImageUrl2, setZoomImageUrl2] = useState([]); + const [refImageIndex, setrefImageIndex] = useState(0); + const [refImageIndex2, setrefImageIndex2] = useState(0); + const zoomView = useRef(null); + const zoomView2 = useRef(null); + + const [showRetakeModal, setshowRetakeModal] = useState(false); + const [retakeMData, setretakeMData] = useState({}); + + const [isDataExists, setisDataExists] = useState(false); + const [isDataUploaded, setisDataUploaded] = useState("N"); + const sessionsToUpload = useRef([]); + const sessionsToUploadDetails = useRef([]); + const sessionsUploadedCount = useRef(0); + const sessionsReceived = useRef(0); + + const [SelectedImg, setSelectedImg] = useState(''); + const [showModal, setShowModal] = useState(false); + const [reCapImgModalObj, setReCapImgModalObj] = useState({}); + const [showImageSaveOp, setShowImageSaveOp] = useState(true); + const [ImgMadCount, setImgMadCount] = useState({ img1: 0, img2: 0 }); + const [windIRParams, setWindIRParams] = useState({}); + + const hasUnsavedChangesRef = React.useRef(hasUnsavedChanges); + const WindowDataRef = React.useRef(SOSStockData); + const StoreIdRef = React.useRef(null); + const ScreenNameRef = React.useRef(''); + + // error field states + const [errorfield, setErrorField] = useState({}); + const [error, setError] = useState(false); + + const inputRefs = useRef({}); + + const d1 = new Date(); + const d2 = moment(d1).format('MM/DD/YYYY'); + + const FlatLConfCallbackPairs = React.useRef([{ viewabilityConfig: { itemVisiblePercentThreshold: 30 }, onViewableItemsChanged }]); + + useEffect(() => { + let params = props.route.params ? props.route.params : {}; + let storeData1 = params.storeData || {}; + let menu1 = params.menu || {}; + let cameraAllow = storeData1.CameraAllow == 'true' || storeData1.CameraAllow == 1 ? true : false; + console.log('storeData1.CameraAllow:', storeData1); + setStoreCameraAllow(cameraAllow); + + let isAdhoc = params.isAdhoc || false; + setIsAdhocScreen(isAdhoc); + setStoreData(storeData1); + setCurrentMenu(menu1); + + StoreIdRef.current = storeData1.StoreId + ScreenNameRef.current = menu1.ScreenName + + let IR_Creds = props.IR_Creds != null && props.IR_Creds != '' ? JSON.parse(props.IR_Creds) : []; + let IR_CredsObj = IR_Creds.length > 0 ? IR_Creds[0] : {}; + let SOS_IRCreds = IR_CredsObj.ShareOfShelf != null && IR_CredsObj.ShareOfShelf.length > 0 ? IR_CredsObj.ShareOfShelf[0] : {}; + setWindIRParams(SOS_IRCreds); + + getData(storeData1, menu1); + + const AppStateSubscription = AppState.addEventListener('change', (pro) => { _handleAppStateChange(pro) }); + const removeIRListener = DeviceEventEmitter.addListener('onIRImageUpload', (data) => { onIRImageUpload(data, storeData1, menu1) }); + const unsubscribe = props.navigation.addListener('beforeRemove', onBeforeRemove); + + return function cleanup() { + IRLogin.deRegisterReceiver(); + AppStateSubscription.remove(); + removeIRListener.remove(); + return unsubscribe; + }; + }, []); + + const onViewableItemsChanged = ({ viewableItems, }) => { + // Do stuff + console.log("onViewableItemsChanged called:") + setItemsInView(viewableItems); + }; + + const _handleAppStateChange = async (nextAppState) => { + if (nextAppState == 'background' && hasUnsavedChangesRef.current == true) { + let newData = { + storeBGData: WindowDataRef.current, + menuName: ScreenNameRef.current, + StoreId1: StoreIdRef.current, + bg_GbTempSessionId: GbTempSessionId.current, + bg_SOSIRImages: SOSIRImages.current, + visiteDate: d2 + } + let WindowsStr = await JSON.stringify(newData) + await set_item('storeData', WindowsStr); + } + } + + useEffect(() => { + const unsubscribe = props.navigation.addListener('beforeRemove', onBeforeRemove); + return unsubscribe; + }, [hasUnsavedChanges]); + + useEffect(() => { + const unsubscribe = props.navigation.addListener('beforeRemove', onBeforeRemove); + return unsubscribe; + }, [showCamera]); + + function BgUnsavedChanges(val) { + hasUnsavedChangesRef.current = val + setHasUnsavedChanges(val); + } + + function BgWindowData(val) { + WindowDataRef.current = val + setSOSStockData(val); + } + + function UpdateShowCameraRef(val) { + showCameraRef.current = val + setShowCamera(val); + } + + async function onIRImageUpload(data, storeData1, menu1) { + console.log('onIRImageUpload on receive', data); + let { message, sessionId, status } = data; + let snum = sessionsReceived.current + 1; + let su_num = sessionsUploadedCount.current; + console.log('onreceive data', data); + sessionsReceived.current = snum; + let thisIR_SessObjIndex = sessionsToUploadDetails.current.findIndex(i => i.TEMP_SESSION_ID == sessionId); + let thisIR_SessObj = sessionsToUploadDetails.current[thisIR_SessObjIndex]; + if (status != null && status == '200' && sessionId != null && sessionId != '') { + + let UnSessionId = await IRLogin.getDataIRSession(sessionId); + if (UnSessionId != null && UnSessionId != '') { + sessionsUploadedCount.current = ++su_num; + let isUpdated = await UpdateIRUploadStatus(storeData1, menu1, sessionId, UnSessionId); + let isUploaded = await LogImageUpload(storeData1, menu1, sessionId, UnSessionId, message, status, thisIR_SessObj); + console.log("su_num:", su_num); + if (isUploaded) { + console.log('Image Uploaded'); + notify("Images Log uploaded for session:" + sessionId); + } + else { + console.log('cannot Uploaded image'); + notify("cannot upload log for session:" + sessionId); + } + + } + else { + console.log('OnReceived UnSessionId get', UnSessionId); + notify("Cannot upload images for session:" + sessionId + ". Universal Id not found"); + let isUploaded = await LogImageUpload(storeData1, menu1, sessionId, "", message, status, thisIR_SessObj); + if (isUploaded) { + console.log('Image Uploaded'); + notify("Images Log uploaded for session:" + sessionId); + } + else { + console.log('cannot Uploaded image'); + notify("cannot upload log for session:" + sessionId); + } + + } + + } + else { + console.log('Cannot get OnReceived UnSessionId'); + notify((message != null && message != "" ? message + ". " : "") + "Cannot upload images for session:" + sessionId); + let isUploaded = await LogImageUpload(storeData1, menu1, sessionId, "", message, status, thisIR_SessObj); + if (isUploaded) { + console.log('Image Uploaded'); + notify("Images Log uploaded for session:" + sessionId); + } + else { + console.log('cannot Uploaded image'); + notify("cannot upload log for session:" + sessionId); + } + + + } + + console.log("check snum and su_num:", snum, su_num, sessionsToUpload.current.length); + // if last broadcast received either uploaded or not update the processing status to false + if (snum == sessionsToUpload.current.length) { + setProcessing(false); + console.log('Deregister event when last received'); + IRLogin.deRegisterReceiver(); + } + + // All IR Sessions with Images Uploaded : set DataUploaded Status to U (Fully Upload) + if (su_num == sessionsToUpload.current.length) { + setisDataUploaded("U"); + setProcessing(false); + notify("All IR images uploaded!"); + console.log('set all uploaded true to U'); + } + // Some Of IR Sessions with Images Uploaded but some are yet pending : set DataUploaded Status to P (Partial Upload) + else if (su_num > 0 && su_num != sessionsToUpload.current.length) { + // setProcessing(false); + setisDataUploaded("P"); + notify("Some IR Images are still not uploaded!"); + console.log('set all uploaded true to P'); + } + } + + + + function onBeforeRemove(e) { + if (showCameraRef.current == true) { + e.preventDefault(); + UpdateShowCameraRef(false); + } + else if (Show_zoomImageRef.current == true || Show_zoomImageRef2.current == true) { + e.preventDefault(); + UpdateShow_zoomImageRef(false); + UpdateShow_zoomImageRef2(false); + } + else { + console.log('hasUnsavedChanges:', hasUnsavedChanges); + if (hasUnsavedChangesRef.current == true) { + console.log('hasUnsavedChanges is true'); + e.preventDefault(); // Prevent default behavior of leaving the screen + onRemoveScreen(e); + } + else { + return; + } + } + } + + function UpdateShow_zoomImageRef(val) { + Show_zoomImageRef.current = val + setShow_zoomImage(val); + } + + function UpdateShow_zoomImageRef2(val) { + Show_zoomImageRef2.current = val + setShow_zoomImage2(val); + } + + function onRemoveScreen(e) { + Alert.alert( + "", + "Do you really want to exit the screen?", + [ + { + text: "Cancel", + onPress: () => { }, + style: "cancel" + }, + { + text: "OK", onPress: async () => { + // setHasUnsavedChanges(false); + BgUnsavedChanges(false) + await clear_item('storeData') + props.navigation.dispatch(e.data.action); + } + } + ] + ); + } + + async function getData(storeData1, menu1) { + try { + let { StoreId, ChainId, StateId, StoreTypeId } = storeData1; + + + let AllKPIFields = await getKPIFields(menu1); + setKPIFields(AllKPIFields); + + let sosCheckAssortmentI = AllKPIFields.findIndex(i => i.KPIFieldName == 'SOSCheckAssortment') + let sosCheckAssortmentObj = sosCheckAssortmentI >= 0 ? AllKPIFields[sosCheckAssortmentI] : {}; + let sosCheckAssortment = sosCheckAssortmentI >= 0 ? sosCheckAssortmentObj['KPIFieldEnable'] : false; + + let sosMSLOnlyI = AllKPIFields.findIndex(i => i.KPIFieldName == 'SOSMSLOnly') + let sosMSLOnlyObj = sosMSLOnlyI >= 0 ? AllKPIFields[sosMSLOnlyI] : {}; + let sosMSLOnly = sosMSLOnlyI >= 0 ? sosMSLOnlyObj['KPIFieldEnable'] : false; + + let CameraIROnceOnlyIndex = AllKPIFields.findIndex(i => i.KPIFieldName == 'CameraIROnceOnly') + let CameraIROnceOnlyObj = CameraIROnceOnlyIndex >= 0 ? AllKPIFields[CameraIROnceOnlyIndex] : {}; + let CameraIROnceOnly = CameraIROnceOnlyIndex >= 0 ? CameraIROnceOnlyObj['KPIFieldEnable'] : true; + + let isKPIIREnableI = AllKPIFields.findIndex(i => i.KPIFieldName == 'KPIIREnable') + let isKPIIREnableObj = isKPIIREnableI >= 0 ? AllKPIFields[isKPIIREnableI] : {}; + let isKPIIREnable = isKPIIREnableI >= 0 ? isKPIIREnableObj['KPIFieldEnable'] : false; + + let AssortIds = sosCheckAssortment == true ? await getAssortmentIds(storeData1, sosMSLOnly) : ''; + console.log('AssortIds:', sosCheckAssortment, sosMSLOnly, AssortIds); + + + await db.transaction(async function (txn) { + + // delete data + // let dq1=`delete from ${AppTables.SOS_HDR_DATA}` + // await txn.executeSql(dq1,[],async function (txn2, txnres) { + // console.log('data removed SOS_HDR_DATA'); + // },function (txnE,txnerr) { console.log(txnerr); },); + + // let dq2=`delete from ${AppTables.SOS_CHILD_DATA}` + // await txn.executeSql(dq2,[],async function (txn2, txnres) { + // console.log('data removed SOS_CHILD_DATA'); + // },function (txnE,txnerr) { console.log(txnerr); },); + + // let dq3=`delete from ${AppTables.SOS_IMAGES}` + // await txn.executeSql(dq3,[],async function (txn2, txnres) { + // console.log('data removed SOS_IMAGES'); + // },function (txnE,txnerr) { console.log(txnerr); },); + + // let dq4=`delete from ${AppTables.SOS_IR_IMAGES}` + // await txn.executeSql(dq4,[],async function (txn2, txnres) { + // console.log('data removed SOS_IR_IMAGES'); + // },function (txnE,txnerr) { console.log(txnerr); },); + + // let dq5=`delete from ${AppTables.SOS_IRUPLOAD}` + // let dq5=`Update ${AppTables.SOS_IRUPLOAD} set UN_SESSION_ID='',UPLOAD_STATUS='0',SYNC_STATUS='' where STORE_ID='${StoreId}' and VISIT_DATE='${d2}' `; + // await txn.executeSql(dq5,[],async function (txn2, txnres) { + // console.log('data removed SOS_IRUPLOAD'); + // },function (txnE,txnerr) { console.log(txnerr); },); + + let join1 = ` INNER JOIN Mapping_StoreShareOfShelf m on p.SOSDefinitionId=m.SOSDefinitionId `; + let selectlist1 = ` DISTINCT p.SOSDefinitionName,p.SOSHeaderTable,p.SOSHeaderField,p.SOSHeaderValue,p.HeaderName as HeaderName,p.SOSHeaderFacing,p.SOSHeaderFacingLable,p.SOSHeaderImage,p.SOSHeaderImageCount,p.SOSHeaderImageGrid`; + let q = `SELECT ${selectlist1} from Master_ShareOfShelfDefinition p ${join1} Where m.StoreId ='${StoreId}' + ${sosCheckAssortment == true ? ` and p.SOSHeaderValue in (${AssortIds}) ` : ''} + order by p.HeaderName `; + + + let selectlist2 = ` DISTINCT m.SOSDefinitionName,p.SOS_HEADER_ID as SOSHeaderId,m.SOSHeaderTable,m.SOSHeaderField,p.SOS_HDR_VALUE as SOSHeaderValue,p.HEADER_NAME as HeaderName,m.SOSHeaderFacing,m.SOSHeaderFacingLable,m.SOSHeaderImage,m.SOSHeaderImageCount,m.SOSHeaderImageGrid,p.SOS_HDR_FACING as SOSHdrFacing`; + let qIRSelect = '', join5 = ''; + if (isKPIIREnable && !CameraIROnceOnly) { // If IR enabled and IR camera is shown for each window + join5 = `Left outer join ${AppTables.SOS_IRUPLOAD} u on p.SOS_HDR_VALUE=u.SOS_HDR_VALUE and u.STORE_ID='${StoreId}' and u.TYPE='Header' and u.VISIT_DATE='${d2}' ` + qIRSelect = ` ,u.TEMP_SESSION_ID as TempSessionId,u.UN_SESSION_ID as UploadSessionId,u.UPLOAD_STATUS as UploadStatus,u.SYNC_STATUS as SyncStatus,u.SESSION_STORECODE as Sess_StoreCode,u.SESSION_TASKNAME as Sess_TaskName,u.SESSION_CATNAME as Sess_CatName,u.SESSION_PHOTOTYPE as Sess_PhotoType`; + } + let join4 = ` INNER JOIN Master_ShareOfShelfDefinition m on p.SOS_HDR_VALUE=m.SOSHeaderValue `; + let q2 = ` SELECT ${selectlist2} ${qIRSelect} FROM ${AppTables.SOS_HDR_DATA} p ${join4} ${join5} WHERE p.STORE_ID='${StoreId}' and p.VISIT_DATE='${d2}' order by p.HEADER_NAME `; + + // console.log("q2:",q2); + let storeBGData1 = [], bgStoreJson = {}, isBGDataExists = false; + let windData = await get_item('storeData') + if (windData != null && windData != '') { + let StoreJson = await JSON.parse(windData) + let { storeBGData, menuName, StoreId1, visiteDate, bg_SOSIRImages, bg_GbTempSessionId } = StoreJson + + // Check if bg data exists for this Store and menu on today date + if (menuName == menu1.ScreenName && StoreId1 == StoreId && visiteDate == d2) { + isBGDataExists = true; + + // Check if added sos data exists in bg data + if (storeBGData.length > 0) { + storeBGData1 = storeBGData; + bgStoreJson = StoreJson + // setSOSStockData(storeBGData); + BgUnsavedChanges(true) + BgWindowData(storeBGData) + } + + // Check if IR Images and session present in bg data + if (bg_GbTempSessionId != null && bg_GbTempSessionId != '' && bg_SOSIRImages != null && bg_SOSIRImages.length > 0) { + SOSIRImages.current = bg_SOSIRImages; + GbTempSessionId.current = bg_GbTempSessionId; + } + } + + + } + console.log("isBGDataExists:", isBGDataExists, windData); + + await txn.executeSql(q2, [], async function (txn2, txnres) { + // console.log('soscats added:',txnres.rows.length); + + if (txnres.rows.length > 0) { + let arr = [], allCats = []; + for (var i = 0; i < txnres.rows.length; i++) { + + let data = txnres.rows.item(i); + // console.log("data.TempSessionId",data.TempSessionId); + let SOSHeaderFacing = data.SOSHeaderFacing == 1 || data.SOSHeaderFacing == 'true' ? 1 : 0; + + // console.log('SOS data:',i,data); + if (SOSHeaderFacing == 1) { + inputRefs.current['input_' + data.SOSHeaderValue] = ''; + } + + let AllCData = await getChilds(storeData1, data, menu1, sosMSLOnly, sosCheckAssortment); + let allChilds = AllCData['allChilds'] || []; + let childData = AllCData['childData'] || []; + data['skulist'] = allChilds; + arr.push(data); + let HdrImages = await getHdrImages(storeData1, data, menu1); + + let HdrIRImages = [], zoomIRImages = []; + if ((isBGDataExists || (!isKPIIREnable))) { + HdrIRImages = []; + } else if (CameraIROnceOnly == true) { + HdrIRImages = []; + } else { + let HdrIRImageObj = await getHdrIRImages(storeData1, data, menu1, "1"); + HdrIRImages = HdrIRImageObj != null && HdrIRImageObj["allImages"] != null ? HdrIRImageObj["allImages"] : []; + zoomIRImages = HdrIRImageObj != null && HdrIRImageObj["zoomIRImages"] != null ? HdrIRImageObj["zoomIRImages"] : []; + } + + + let defData = { 'SOSHeaderValue': data.SOSHeaderValue, 'SOSHdrFacing': data.SOSHdrFacing, 'Images': HdrImages, 'IRImages': HdrIRImages, 'zoomIRImages': zoomIRImages, 'TempSessionId': data.TempSessionId, 'SKUData': childData, 'Sess_StoreCode': data.Sess_StoreCode, 'Sess_TaskName': data.Sess_TaskName, 'Sess_CatName': data.Sess_CatName, 'Sess_PhotoType': data.Sess_PhotoType }; + allCats.push(defData); + + if (i == txnres.rows.length - 1) { + + if (isKPIIREnable) {// set IR Images Upload Status if KPI IR flag is enabled + if (CameraIROnceOnly) { // Camera for each window is not enabled + if (!isBGDataExists) { + let sosImagesObj = await getHdrIRImages(storeData1, data, menu1, "2"); + + let AllSOSIRImages = sosImagesObj != null && sosImagesObj["allImages"] != null ? sosImagesObj["allImages"] : []; + let AllzoomIRImages = sosImagesObj != null && sosImagesObj["zoomIRImages"] != null ? sosImagesObj["zoomIRImages"] : []; + // setSOSIRImages(AllSOSIRImages); + SOSIRImages.current = AllSOSIRImages; + setZoomImageUrl2(AllzoomIRImages); + } + let isChecked = await getUploadIRStatus(storeData1, menu1); + } + // else if(!CameraIROnceOnly && isfullyUploaded){ // Stop Upload and Editing both when fully uploaded, Case: if Camera for each window is enabled + // setisDataUploaded('U'); + // } + } + + if (!isBGDataExists) { //set current data in list if bg data does not exists + // setSOSStockData(allCats); + BgWindowData(allCats) + } + + setAllSOSData(arr); + // setSOSStockData(allCats); + setisDataExists(true); + setProcessing(false); + } + } + } + else { + await txn.executeSql(q, [], async function (txn2, txnres2) { + // console.log('soscats',txnres2.rows.length); + if (txnres2.rows.length > 0) { + let arr = [], allCats = []; + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + let SOSHeaderFacing = data.SOSHeaderFacing == 1 || data.SOSHeaderFacing == 'true' ? 1 : 0; + + if (SOSHeaderFacing == 1) { + inputRefs.current['input_' + data.SOSHeaderValue] = ''; + } + + let AllCData = await getChilds(storeData1, data, menu1, sosMSLOnly, sosCheckAssortment); + let allChilds = AllCData['allChilds'] || []; + let childData = AllCData['childData'] || []; + data['skulist'] = allChilds; + arr.push(data); + let HdrImages = []; + for (var s = 0; s < data.SOSHeaderImageCount; s++) { + let obj = { 'Image1Name': '', 'Image1': '', img1Required: true }; + HdrImages.push(obj); + } + let defData = { 'SOSHeaderValue': data.SOSHeaderValue, 'SOSHdrFacing': '', 'Images': HdrImages, 'IRImages': [], 'SKUData': childData }; + allCats.push(defData); + if (i == txnres2.rows.length - 1) { + if (!isBGDataExists) { //set current data in list if bg data does not exists + // setSOSStockData(allCats); + BgWindowData(allCats) + } + + setAllSOSData(arr); + // setSOSStockData(allCats); + setProcessing(false); + } + } + } else { + setProcessing(false); + notify('No data found', 'SHORT') + } + }, function (txnE, txnerr) { console.log(txnerr); },); + } + }, function (txnE, txnerr) { console.log(txnerr); },); + // setProcessing(false); + }); + } catch (err) { + console.log(err); + } + } + + async function getUploadIRStatus(storeData1, menu1) { + let allImages = []; + let { StoreId } = storeData1; + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + let q = ` SELECT Distinct TEMP_SESSION_ID as TempSessionId,UN_SESSION_ID as UploadSessionId,UPLOAD_STATUS as UploadStatus,SYNC_STATUS as SyncStatus,SESSION_STORECODE as Sess_StoreCode,SESSION_TASKNAME as Sess_TaskName,SESSION_CATNAME as Sess_CatName,SESSION_PHOTOTYPE as Sess_PhotoType FROM ${AppTables.SOS_IRUPLOAD} where TYPE='Header' and STORE_ID='${StoreId}' and VISIT_DATE='${d2}' `; + await txn.executeSql(q, [], async function (txn2, txnres) { + if (txnres.rows.length > 0) { + let isfullyUploaded = true; + //No Loop required, As For CameraIROnceOnly enabled condition only one TempSessionId will be genrated per KPI + let data = txnres.rows.item(0); + let { Sess_StoreCode, Sess_TaskName, Sess_CatName, Sess_PhotoType } = data; + if (data.UploadStatus == '1' && isDataUploaded != 'P' && isDataUploaded != 'U') { + console.log('getUploadIRStatus success: U'); + // Stop Upload and Editing both when fully uploaded + setisDataUploaded("U"); + } + // setGbTempSessionId(data.TempSessionId); + GbTempSessionId.current = data.TempSessionId; + let obj = { Sess_StoreCode, Sess_TaskName, Sess_CatName, Sess_PhotoType }; + GbTempSessionObj.current = obj; + resolve(true); + } + else { + resolve(true); + } + }, function (txnE, txnerr) { console.log(txnerr); resolve(false); },); + }); + }).catch((err) => { + return false; + }) + } + + + async function getAssortmentIds(storeData1 = {}, sosMSLOnly = false) { + let { StoreId, ChainId, StateId, StoreTypeId, StoreClassId, StoreCategoryId } = storeData1; + let AllIds = []; + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + let join1 = ` INNER JOIN Mapping_StoreShareOfShelf m on p.SOSDefinitionId=m.SOSDefinitionId `; + let q = `select Distinct p.SOSHeaderTable,p.SOSHeaderField from Master_ShareOfShelfDefinition p ${join1} Where m.StoreId ='${StoreId}' and p.SOSHeaderTable!='' and p.SOSHeaderTable is not null `; + await txn.executeSql(q, [], async function (txn2, txnres) { + if (txnres.rows.length > 0) { + let data = txnres.rows.item(0); + let SOSHeaderTable = data['SOSHeaderTable']; + let SOSHeaderField = data['SOSHeaderField']; + + let join2 = ` INNER JOIN Mapping_ProductAssortmentStorewise mp on t1.ProductId=mp.ProductId `; + let q2 = `select distinct t1.${SOSHeaderField} from Product_Master t1 ${join2} where mp.StoreId='${StoreId}' ${sosMSLOnly == true ? ` and (mp.MSL='true' or mp.MSL='1') ` : ''} `; + await txn.executeSql(q2, [], async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + let id = data[SOSHeaderField]; + AllIds.push(id); + if (i == txnres2.rows.length - 1) { + let AllIdsJoin = AllIds.join(','); + resolve(AllIdsJoin); + } + } + } + else { + resolve('') + } + }, function (txnE, txnerr) { console.log(txnerr); resolve('') },); + } + else { + resolve('') + } + }, function (txnE, txnerr) { console.log(txnerr); resolve('') },); + }); + }).then((val) => { + return val; + }).catch((err) => { + console.log(err); + return ''; + }); + } + + async function getChildAssortmentIds(storeData1 = {}, sosMSLOnly = false) { + let { StoreId, ChainId, StateId, StoreTypeId, StoreClassId, StoreCategoryId } = storeData1; + let AllIds = []; + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + let join1 = ` INNER JOIN Mapping_StoreShareOfShelf m on p.SOSDefinitionId=m.SOSDefinitionId `; + let q = `select Distinct p.SOSChildTable,p.SOSChildField from Master_ShareOfShelfDefinition p ${join1} Where m.StoreId ='${StoreId}' and p.SOSChildTable!='' and p.SOSChildTable is not null `; + + await txn.executeSql(q, [], async function (txn2, txnres) { + if (txnres.rows.length > 0) { + let data = txnres.rows.item(0); + let SOSChildTable = data['SOSChildTable']; + let SOSChildField = data['SOSChildField']; + + let join2 = ` INNER JOIN Mapping_ProductAssortmentStorewise mp on t1.ProductId=mp.ProductId `; + let q2 = `select distinct t1.${SOSChildField} from Product_Master t1 ${join2} where mp.StoreId='${StoreId}' ${sosMSLOnly == true ? ` and (mp.MSL='true' or mp.MSL='1') ` : ''} `; + await txn.executeSql(q2, [], async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + let id = data[SOSChildField]; + AllIds.push(id); + if (i == txnres2.rows.length - 1) { + let AllIdsJoin = AllIds.join(','); + resolve(AllIdsJoin); + } + } + } + else { + resolve('') + } + }, function (txnE, txnerr) { console.log(txnerr); resolve('') },); + } + else { + resolve('') + } + }, function (txnE, txnerr) { console.log(txnerr); resolve('') },); + }); + }).then((val) => { + return val; + }).catch((err) => { + console.log(err); + return ''; + }); + } + + + async function getHdrImages(storeData1, cat1, menu1) { + let allImages = []; + let { StoreId } = storeData1; + let { SOSHeaderId } = cat1; + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + let q = ` SELECT IMAGE1 as Image1 FROM ${AppTables.SOS_IMAGES} where SOS_HEADER_ID='${SOSHeaderId}' and TYPE='Header' and STORE_ID='${StoreId}' and VISIT_DATE='${d2}' `; + await txn.executeSql(q, [], async function (txn2, txnres) { + if (txnres.rows.length > 0) { + for (var i = 0; i < txnres.rows.length; i++) { + let data = txnres.rows.item(i); + let { Image1 } = data; + let imagePath = Image1 != null && Image1 != '' ? 'file://' + ImageFolderPath + menu1.ScreenName + "/" + Image1 : ''; + let obj = { 'Image1Name': data.Image1, 'Image1': imagePath }; + allImages.push(obj); + if (i == txnres.rows.length - 1) { + resolve(allImages); + } + } + } + else { + resolve(allImages); + } + }, function (txnE, txnerr) { console.log(txnerr); resolve(allImages); },); + }); + }).catch((err) => { + return allImages; + }) + } + + async function getHdrIRImages(storeData1, cat1, menu1, type = "1") { + + let res = { allImages: [], zoomIRImages: [] } + let { StoreId } = storeData1; + let { SOSHeaderId } = cat1; + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + let q = ` SELECT IMAGE1 as Image1 FROM ${AppTables.SOS_IR_IMAGES} where `; + if (type == '2') { + // dont append SOSHeaderId condition + } + else { + q += ` SOS_HEADER_ID='${SOSHeaderId}' and `; + } + q += ` TYPE='Header' and STORE_ID='${StoreId}' and VISIT_DATE='${d2}'`; + + await txn.executeSql(q, [], async function (txn2, txnres) { + if (txnres.rows.length > 0) { + let arr = [], arr2 = []; + for (var i = 0; i < txnres.rows.length; i++) { + let data = txnres.rows.item(i); + let obj = { 'ImagePath': data.Image1 }; + arr.push(obj); + + let imgObj = { imgIndex: (i + 1), url: data.Image1, props: {} } + arr2.push(imgObj); + if (i == txnres.rows.length - 1) { + res['allImages'] = arr + res['zoomIRImages'] = arr2 + resolve(res); + } + } + } + else { + resolve(res); + } + }, function (txnE, txnerr) { console.log(txnerr); resolve(res); },); + }); + }).catch((err) => { + return res; + }) + } + + async function getChilds(storeData1, cat1, menu1, sosMSLOnly = false, sosCheckAs = false) { + let defData = { allChilds: [], childData: [] }; + let { StoreId } = storeData1; + let { SOSHeaderValue } = cat1; + // SOSChildValue + let childAssorted = await getChildAssortmentIds(storeData1, sosMSLOnly) + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + let selectlist = ` p.SOSDefinitionId,p.SOSChildTable,p.SOSChildField,p.SOSChildValue,p.ChildName,p.SOSChildTotalFacing,p.SOSChildSelfFacing,p.SOSChildTotalFacingLable,p.SOSChildSelfFacingLable,p.SOSChildImage,p.SOSChildImageCount,p.SOSChildImageGrid,tg.SOSTarget`; + let join1 = ` INNER JOIN Mapping_StoreShareOfShelf m on p.SOSDefinitionId=m.SOSDefinitionId `; + let target_join = ` LEFT OUTER JOIN Mapping_StoreShareOfShelfTarget tg on p.SOSDefinitionId=tg.SOSDefinitionId and tg.StoreId='${StoreId}' `; + + let q = `SELECT ${selectlist} from Master_ShareOfShelfDefinition p ${join1} ${target_join} Where m.StoreId ='${StoreId}' and p.SOSHeaderValue='${SOSHeaderValue}' + ${sosCheckAs == true ? ` and p.SOSChildValue in (${childAssorted}) ` : ''} + order by p.ChildName `; + + let selectlist2 = ` m.SOSDefinitionId,m.SOSChildTable,m.SOSChildField,p.SOS_CHILD_VALUE as SOSChildValue,p.CHILD_NAME as ChildName,m.SOSChildTotalFacing,m.SOSChildSelfFacing,m.SOSChildTotalFacingLable,m.SOSChildSelfFacingLable,m.SOSChildImage,m.SOSChildImageCount,m.SOSChildImageGrid,p.TOTAL_FACING as TotalFacing,p.SELF_FACING as SelfFacing,tg.SOSTarget`; + // let join3=` INNER JOIN Mapping_StoreShareOfShelf mp on m.SOSDefinitionId=mp.SOSDefinitionId `; + let target_join2 = ` LEFT OUTER JOIN Mapping_StoreShareOfShelfTarget tg on p.SOS_DEFINITION_ID=tg.SOSDefinitionId and tg.StoreId='${StoreId}' `; + + let join4 = ` INNER JOIN Master_ShareOfShelfDefinition m on p.SOS_DEFINITION_ID=m.SOSDefinitionId `; + let q2 = ` SELECT ${selectlist2} FROM ${AppTables.SOS_CHILD_DATA} p ${join4} ${target_join2} WHERE p.SOS_HDR_VALUE='${SOSHeaderValue}' and p.STORE_ID='${StoreId}' and p.VISIT_DATE='${d2}' order by p.CHILD_NAME `; + + + await txn.executeSql(q2, [], async function (txn2, txnres) { + console.log('sossubcats added', txnres.rows.length); + if (txnres.rows.length > 0) { + let arr = [], arr2 = []; + for (var i = 0; i < txnres.rows.length; i++) { + let data = txnres.rows.item(i); + + let SOSChildTotalFacing = data.SOSChildTotalFacing == 1 || data.SOSChildTotalFacing == 'true' ? 1 : 0; + let SOSChildSelfFacing = data.SOSChildSelfFacing == 1 || data.SOSChildSelfFacing == 'true' ? 1 : 0; + + if (SOSChildTotalFacing == 1) { + inputRefs.current['input1_' + SOSHeaderValue + "_" + data.SOSChildValue] = ''; + } + if (SOSChildSelfFacing == 1) { + inputRefs.current['input2_' + SOSHeaderValue + "_" + data.SOSChildValue] = ''; + } + + arr.push(data); + let allChildImages = await getChildImages(storeData1, cat1, data, menu1); + let defCData = { 'SOSChildValue': data.SOSChildValue, 'TotalFacing': data.TotalFacing, 'SelfFacing': data.SelfFacing, 'ChildImages': (allChildImages || []) }; + + arr2.push(defCData); + if (i == txnres.rows.length - 1) { + defData['allChilds'] = arr; + defData['childData'] = arr2; + resolve(defData); + } + } + } + else { + console.log('sossubcats added', txnres.rows.length); + await txn.executeSql(q, [], async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + let arr = [], arr2 = []; + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + let SOSChildTotalFacing = data.SOSChildTotalFacing == 1 || data.SOSChildTotalFacing == 'true' ? 1 : 0; + let SOSChildSelfFacing = data.SOSChildSelfFacing == 1 || data.SOSChildSelfFacing == 'true' ? 1 : 0; + if (SOSChildTotalFacing == 1) { + inputRefs.current['input1_' + SOSHeaderValue + "_" + data.SOSChildValue] = ''; + } + if (SOSChildSelfFacing == 1) { + inputRefs.current['input2_' + SOSHeaderValue + "_" + data.SOSChildValue] = ''; + } + console.log("data-------", data) + arr.push(data); + let allChildImages = []; + for (var s = 0; s < data.SOSChildImageCount; s++) { + let obj = { 'Image1Name': '', 'Image1': '', img1Required: true }; + allChildImages.push(obj); + } + let defCData = { 'SOSChildValue': data.SOSChildValue, 'TotalFacing': '', 'SelfFacing': '', 'ChildImages': allChildImages }; + arr2.push(defCData); + if (i == txnres2.rows.length - 1) { + defData['allChilds'] = arr; + defData['childData'] = arr2; + resolve(defData); + } + } + } + else { + resolve(defData); + } + }, function (txnE, txnerr) { console.log(txnerr); resolve(defData); },); + } + }, function (txnE, txnerr) { console.log(txnerr); resolve(defData); },); + }); + }).catch((err) => { + return defData; + }); + } + + async function getChildImages(storeData1, cat1, subcat1, menu1) { + let allImages = []; + let { StoreId } = storeData1; + let { SOSHeaderId } = cat1; + let { SOSChildValue } = subcat1; + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + let q = ` SELECT IMAGE1 as Image1 FROM ${AppTables.SOS_IMAGES} where SOS_HEADER_ID='${SOSHeaderId}' and SOS_CHILD_VALUE='${SOSChildValue}' and TYPE='Child' and STORE_ID='${StoreId}' and VISIT_DATE='${d2}' `; + await txn.executeSql(q, [], async function (txn2, txnres) { + if (txnres.rows.length > 0) { + for (var i = 0; i < txnres.rows.length; i++) { + let data = txnres.rows.item(i); + let { Image1 } = data; + let imagePath = Image1 != null && Image1 != '' ? 'file://' + ImageFolderPath + menu1.ScreenName + "/" + Image1 : ''; + let obj = { 'Image1Name': Image1, 'Image1': imagePath }; + allImages.push(obj); + if (i == txnres.rows.length - 1) { + resolve(allImages); + } + } + } + else { + resolve(allImages); + } + }, function (txnE, txnerr) { console.log(txnerr); resolve(allImages); },); + }); + }).catch((err) => { + return allImages; + }) + } + + async function getImage(imgdata) { + let type = getImageProps.type || ''; + let cat = getImageProps.cat || {}; + let splitItem = getImageProps.splitItem || {}; + let splitItemIndex = getImageProps.splitItemIndex || 0; + let skuItem = getImageProps.sku != null ? getImageProps.sku : {}; + + if (typeof imgdata == 'object' && imgdata.errorCode == 'camera_unavailable') { + notify(ST.Cameraunavailable); + } + else if (typeof imgdata == 'object' && imgdata.uri != null) { + const img = imgdata; + const imgurl = img.uri, imgWidth = img.width, imgHeight = img.ExtendedHeight; + let isImgFromGallery = img.fromGallery != null ? img.fromGallery : false; + let picture_clickedd = isImgFromGallery == true ? img.datetime : new Date(); + + let picture_clicked_time = moment(picture_clickedd).format('MM-DD-YYYY HH:mm:ss') + let picture_clicked_time_for_pic_name = moment(picture_clickedd).format('MMDDYYYY_HHmmss') + + console.log("time", picture_clicked_time); + console.log("time1", picture_clicked_time_for_pic_name); + let calculate_tym_date_for_filename = picture_clicked_time_for_pic_name; + let calculate_tym_date_over_img = picture_clicked_time; + + + const mark_text1 = calculate_tym_date_over_img; + const mark_text2 = 'Store Name:' + storeData.StoreName + ' | Store Id:' + storeData.StoreId + ' | User Id:' + storeData.EmpId + ' | Image Type: Share Of Shelf - (' + cat.HeaderName + ')' + ' | Date:' + calculate_tym_date_over_img; + let filename = ''; + if (type == '2') { + filename = storeData.StoreId + '_' + cat.SOSHeaderValue + '_' + skuItem.SOSChildValue + '_' + splitItemIndex + '_' + (props.UserId || '') + '_SOSImg-' + calculate_tym_date_for_filename + '.jpg'; + } + else { + filename = storeData.StoreId + '_' + cat.SOSHeaderValue + '_' + splitItemIndex + '_' + (props.UserId || '') + '_SOSImg-' + calculate_tym_date_for_filename + '.jpg'; + } + + + let allData = SOSStockData; + let defData = { 'SOSHeaderValue': cat.SOSHeaderValue, 'Images': [], 'SKUData': [] }; + const catDataIndex = allData.findIndex(i => i.SOSHeaderValue == cat.SOSHeaderValue); + const catData = catDataIndex >= 0 ? allData[catDataIndex] : {}; + + + if (type == '2') { + var SKUData = catData['SKUData'] || []; + var childIndex = SKUData.findIndex(i => i.SOSChildValue == skuItem.SOSChildValue); + var childData = childIndex >= 0 ? SKUData[childIndex] : {}; + + var ChildImages = childData['ChildImages'] || []; + var image_key = 'Image1Name'; + var image_key_path = 'Image1'; + splitItem[image_key] = filename; + } + else { + var HeaderImages = catData['Images'] || []; + var image_key = 'Image1Name'; + var image_key_path = 'Image1'; + splitItem[image_key] = filename; + } + + let imagePath = `${ImageFolderPath + currentMenu.ScreenName}/${filename}`; + + // file resized now rename file + RNFS.copyFile(imgurl, imagePath) + .then(async (resn) => { + // render data with clicked image + let uri = 'file://' + imagePath; + console.log('image marker:', uri); + setSelectedImg(uri) + + if (type == '2') { + splitItem[image_key_path] = uri; + splitItemIndex >= 0 ? ChildImages[splitItemIndex] = splitItem : ChildImages.push(splitItem); + childData['ChildImages'] = ChildImages; + childIndex >= 0 ? SKUData[childIndex] = childData : SKUData.push(childData); + + catData['SKUData'] = SKUData; + catDataIndex >= 0 ? allData[catDataIndex] = catData : allData.push(catData); + setSOSStockData(allData); + BgWindowData(allData) + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + else { + console.log('Hdr split image updated'); + splitItem[image_key_path] = uri; + splitItemIndex >= 0 ? HeaderImages[splitItemIndex] = splitItem : HeaderImages.push(splitItem); + catData['Images'] = HeaderImages; + catDataIndex >= 0 ? allData[catDataIndex] = catData : allData.push(catData); + // setSOSStockData(allData); + BgWindowData(allData) + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + + // add metdata then resize image and restored back to the imagePath + let restore_data = { "destFilePath": imagePath, "imgurl": imgurl, imgWidth, imgHeight, mark_text1, mark_text2 } + let is_restored = await restore_ImageWithMetaData(restore_data, imgdata); + console.log("image restored:", is_restored); + }) + .catch(err => { + console.log('ERROR: image file write failed!!!'); + console.log(err.message, err.code); + }); + + } + } + + + async function openCamera(cat, splitItem, splitItemIndex, type = '1', sku) { + setErrorField({}); + setError(false); + let GridAllow = type === '1' ? (window.SOSHeaderImageGrid === 'true' || window.SOSHeaderImageGrid == true || window.SOSHeaderImageGrid == '1' || window.SOSHeaderImageGrid == 1) : (window.SOSChildImageGrid === 'true' || window.SOSChildImageGrid == true || window.SOSChildImageGrid == '1' || window.SOSChildImageGrid == 1) + setGridValue(GridAllow); + setGetImageProps({ 'cat': cat, 'splitItem': splitItem, 'splitItemIndex': splitItemIndex, 'type': type, 'sku': sku }); + UpdateShowCameraRef(true); + } + async function StartCameraSession(cat, type = '1', sku) { + setErrorField({}); + setError(false); + let IR_Creds = props.IR_Creds != null && props.IR_Creds != "" ? JSON.parse(props.IR_Creds) : []; + let IR_CredsObj = IR_Creds.length > 0 ? IR_Creds[0] : {}; + + cat = cat != null ? cat : {}, + sku = sku != null ? sku : {}; + let newStdata = storeData; + if (IR_CredsObj.UseStoreCode != 1) { + newStdata.StoreCode = newStdata.StoreId; + } + let obj = { "StoreData": newStdata }; + + + + // Option values for Perfetti paid visibility if IR shown in header only + // obj["category_name"]="multi"; + // obj["task_name"]="multi-shelf"; + // obj["photo_type"]="shelf"; + + + + if (type == '1' && windIRParams.category_name == 'AsDefined') { // if IR Camera is present for each category + let { SOSDefinitionName } = cat; + console.log("SOSDefinitionName:", SOSDefinitionName); + obj["category_name"] = SOSDefinitionName || ''; + obj["task_name"] = SOSDefinitionName || ''; + obj["photo_type"] = windIRParams.photo_type || ''; + } + else { // if IR Camera is present only in header + obj["category_name"] = windIRParams.category_name || ''; + obj["task_name"] = windIRParams.task_name || ''; + obj["photo_type"] = windIRParams.photo_type || ''; + } + let st1 = JSON.stringify(obj); + + //storeData,cat,type,sku + console.log("ir camera obj:", obj.category_name, obj.task_name, obj.photo_type, newStdata.StoreCode); + let TempSessionId = await IRLogin.StartIRSession(st1);//"8099b819-0979-40d2-950e-489566041484";// + console.log('TempSessionId :', TempSessionId, newStdata.StoreCode); + if (TempSessionId != null) { + setLoaderTitle('Processing Image...'); + setProcessing(true); + let IRCamImages = await IRLogin.getImageURIFromIRSession(TempSessionId); + // let imgObj=Images[Images.length-1]; + + console.log('Images from session :', IRCamImages); + + if (type == '2') { + // setGbTempSessionId(TempSessionId); + GbTempSessionId.current = TempSessionId; + let sessObj = {} + sessObj['Sess_StoreCode'] = newStdata.StoreCode; + sessObj['Sess_TaskName'] = obj["task_name"]; + sessObj['Sess_CatName'] = obj["category_name"]; + sessObj['Sess_PhotoType'] = obj["photo_type"]; + // setSOSIRImages(IRCamImages); + GbTempSessionObj.current = sessObj; + SOSIRImages.current = IRCamImages; + setIRZoomImages(IRCamImages); + } + else { + let zoomIRImages = await getIRZoomImages(IRCamImages) + console.log("getIRZoomImages res:", zoomIRImages); + + let allData = SOSStockData; + let defData = { 'SOSHeaderValue': cat.SOSHeaderValue, 'SOSHdrFacing': '', 'Images': [], 'IRImages': [], 'SKUData': [] }; + const catDataIndex = allData.findIndex(i => i.SOSHeaderValue == cat.SOSHeaderValue); + const catData = catDataIndex >= 0 ? allData[catDataIndex] : defData; + catData['IRImages'] = IRCamImages; + catData['zoomIRImages'] = zoomIRImages; + catData['TempSessionId'] = TempSessionId; + catData['Sess_StoreCode'] = newStdata.StoreCode; + catData['Sess_TaskName'] = obj["task_name"]; + catData['Sess_CatName'] = obj["category_name"]; + catData['Sess_PhotoType'] = obj["photo_type"]; + catDataIndex >= 0 ? allData[catDataIndex] = catData : allData.push(catData); + console.log("allData:", allData); + setSOSStockData(allData); + } + + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + + // stop image processing loader after all images get from sessionID + setProcessing(false); + setLoaderTitle('loading...'); + + } + else { + notify('Cannot capture images as getting Session Null.'); + } + + } + + + async function ResumeCameraSession(cat, type = '1', sku) { + cat = cat != null ? cat : {}, + sku = sku != null ? sku : {}; + + let allData = SOSStockData; + let defData = { 'SOSHeaderValue': cat.SOSHeaderValue, 'SOSHdrFacing': '', 'Images': [], 'IRImages': [], 'SKUData': [] }; + const catDataIndex = allData.findIndex(i => i.SOSHeaderValue == cat.SOSHeaderValue); + const catData = catDataIndex >= 0 ? allData[catDataIndex] : defData; + + //storeData,cat,type,sku + let TempSessionId = ""; + if (type == '2') { + TempSessionId = GbTempSessionId.current; + } + else { + TempSessionId = catData.TempSessionId; + } + console.log('TempSessionId of cat :', TempSessionId); + if (TempSessionId != null) { + setLoaderTitle('Processing Image...'); + setProcessing(true); + let retTempSessionId = await IRLogin.ResumeIRSession(TempSessionId);//"8099b819-0979-40d2-950e-489566041484";// + console.log('retTempSessionId :', retTempSessionId); + if (retTempSessionId != null) { + // start fetching images after capturing photos + + + let IRCamImages = await IRLogin.getImageURIFromIRSession(TempSessionId); + console.log('Images from session :', IRCamImages); + + if (type == '2') { + // setSOSIRImages(IRCamImages); + SOSIRImages.current = IRCamImages; + setIRZoomImages(IRCamImages); + } + else { + let zoomIRImages = await getIRZoomImages(IRCamImages) + catData['IRImages'] = IRCamImages; + catData['zoomIRImages'] = zoomIRImages; + catDataIndex >= 0 ? allData[catDataIndex] = catData : allData.push(catData); + console.log("allData2:", allData); + setSOSStockData(allData); + } + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + + // stop image processing loader after all images get from sessionID + setProcessing(false); + setLoaderTitle('loading...'); + } + else { + notify('Cannot capture images as getting Session Null.'); + } + + } + else { + notify('Cannot capture images as getting Session Null.'); + } + + } + + async function DeleteIRPhoto() { + console.log('DeleteIRPhoto called'); + setshowRetakeModal(false); + let { cat, type, IRImgIndex, IRimgPath } = retakeMData; + cat = cat != null ? cat : {}, + type = type != null ? type : '1'; + IRImgIndex = IRImgIndex != null ? IRImgIndex : ''; + IRimgPath = IRimgPath != null ? IRimgPath : ''; + + + let allData = SOSStockData; + let defData = { 'SOSHeaderValue': cat.SOSHeaderValue, 'SOSHdrFacing': '', 'Images': [], 'IRImages': [], 'SKUData': [] }; + const catDataIndex = allData.findIndex(i => i.SOSHeaderValue == cat.SOSHeaderValue); + const catData = catDataIndex >= 0 ? allData[catDataIndex] : defData; + + let TempSessionId = ""; + console.log("type:", type, GbTempSessionId.current); + if (type == '2') { + TempSessionId = GbTempSessionId.current; + } + else { + TempSessionId = catData['TempSessionId']; + } + + // let st1=JSON.stringify(storeData); + //storeData,cat,type,sku + console.log('DeleteIRPhoto sessionID :', TempSessionId); + if (TempSessionId != null || TempSessionId != '') { + setLoaderTitle('Removing Image...'); + setProcessing(true); + let isDeleted = await IRLogin.DeleteIRSessionPhoto(TempSessionId, IRimgPath);//"8099b819-0979-40d2-950e-489566041484";// + console.log('DeleteIRPhoto isDeleted :', isDeleted); + if (isDeleted) { + setLoaderTitle('Processing Image...'); + + let IRCamImages = await IRLogin.getImageURIFromIRSession(TempSessionId); + console.log('Deleted, Images from session :', IRCamImages); + if (type == '2') { + // setSOSIRImages(IRCamImages); + SOSIRImages.current = IRCamImages; + setIRZoomImages(IRCamImages); + } + else { + let zoomIRImages = await getIRZoomImages(IRCamImages) + catData['IRImages'] = IRCamImages; + catData['zoomIRImages'] = zoomIRImages; + catDataIndex >= 0 ? allData[catDataIndex] = catData : allData.push(catData); + setSOSStockData(allData); + } + + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + + // stop image processing loader after all images get from sessionID + setProcessing(false); + setLoaderTitle('loading...'); + + } + else { + notify('Cannot delete photo!.'); + } + + } + else { + notify('Cannot delete photo! Found Null Session.'); + } + + } + + async function RetakeIRPhoto() { + setshowRetakeModal(false); + let { cat, type, IRImgIndex, IRimgPath } = retakeMData; + cat = cat != null ? cat : {}, + type = type != null ? type : '1'; + IRImgIndex = IRImgIndex != null ? IRImgIndex : ''; + IRimgPath = IRimgPath != null ? IRimgPath : ''; + + + let allData = SOSStockData; + let defData = { 'SOSHeaderValue': cat.SOSHeaderValue, 'SOSHdrFacing': '', 'Images': [], 'IRImages': [], 'SKUData': [] }; + const catDataIndex = allData.findIndex(i => i.SOSHeaderValue == cat.SOSHeaderValue); + const catData = catDataIndex >= 0 ? allData[catDataIndex] : defData; + + let TempSessionId = ""; + if (type == '2') { + TempSessionId = GbTempSessionId.current; + } + else { + TempSessionId = catData['TempSessionId']; + } + + + // let st1=JSON.stringify(storeData); + //storeData,cat,type,sku + console.log('Retake sessionID :', TempSessionId); + if (TempSessionId != null || TempSessionId != '') { + setLoaderTitle('Processing Image...'); + setProcessing(true); + let isRetakeDone = await IRLogin.RetakeIRSessionPhoto(TempSessionId, IRimgPath);//"8099b819-0979-40d2-950e-489566041484";// + console.log('Retake isRetakeDone :', isRetakeDone); + if (isRetakeDone) { + setTimeout(async () => { + let IRCamImages = await IRLogin.getImageURIFromIRSession(TempSessionId); + console.log('Retake Images from session :', IRCamImages); + if (type == '2') { + // setSOSIRImages(IRCamImages); + SOSIRImages.current = IRCamImages; + setIRZoomImages(IRCamImages); + } + else { + let zoomIRImages = await getIRZoomImages(IRCamImages) + catData['IRImages'] = IRCamImages; + catData['zoomIRImages'] = zoomIRImages; + catDataIndex >= 0 ? allData[catDataIndex] = catData : allData.push(catData); + setSOSStockData(allData); + } + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + + // stop image processing loader after all images get from sessionID + setProcessing(false); + setLoaderTitle('loading...'); + }, 1000); + } + else { + notify('Error occur while retaking photo!.'); + } + + } + else { + notify('Cannot start camera! Found Null Session.'); + } + + } + // Start Upload for IR images + async function UploadIRSessions() { + setshowUploadAlert(false); + sessionsToUpload.current = []; + sessionsReceived.current = 0; + sessionsUploadedCount.current = 0; + + try { + let { StoreId } = storeData; + setLoaderTitle('Uploading Images...'); + setProcessing(true); + + // Global Upload function + // Sync Status for IR images + // From Infilect SDK 1.3.6 - The Images are uploading on realtime bases i.e. As the images are clicked by user the Images are getting uploaded to infilect server. + // In this case call below func to check the status of images that is already being uploaded by Real Time processing + let sync_result = await SyncIRsessionsInKPI(props, storeData, AppTables.SOS_IRUPLOAD, AppTables.SOS_IR_IMAGES); + let { isUploadStarted, AllDataUploaded, noDataFound, success, sessionList, sessionListWithDetails } = sync_result; + console.log("Sync Resp sync_result:", sync_result); + if (!success) { + notify('Cannot Upload Data! Something went wrong.'); + setProcessing(false); + } + else { + if (noDataFound) { + notify('No session to upload!'); + setisDataUploaded('U'); + setProcessing(false); + } + else { + if (!isUploadStarted && AllDataUploaded) { + notify('All images synced! No session to upload.'); + setisDataUploaded('U'); + setProcessing(false); + } else if (isUploadStarted) { + sessionsToUpload.current = sessionList; + sessionsToUploadDetails.current = sessionListWithDetails; + } + } + } + + } catch (e) { + console.log('Uploading Issue:', e); + setProcessing(false); + } + + + } + + async function UpdateIRUploadStatus(storeData1, menu1, TempSessionId, UnSessionId) { + console.log('UpdateIRUploadStatus'); + return new Promise((resolve, reject) => { + + let { StoreId, ChainId, StateId, StoreTypeId } = storeData1; + db.transaction(async function (txn) { + // update upload status and sync status here : when files are uploaded and we have got the universal session id for that + let q = `Update ${AppTables.SOS_IRUPLOAD} set UN_SESSION_ID='${UnSessionId}',UPLOAD_STATUS='1',SYNC_STATUS='Synced' where STORE_ID='${StoreId}' and VISIT_DATE='${d2}' and TEMP_SESSION_ID='${TempSessionId}' `; + // console.log("update IR Upload q:",q); + await txn.executeSql(q, [], async function (txn2, txnres) { + console.log('Updated IR Upload Status'); + // console.log("update IR Upload q2:",q2); + let q2 = `Update ${AppTables.SOS_IR_IMAGES} set UN_SESSION_ID='${UnSessionId}' where STORE_ID='${StoreId}' and VISIT_DATE='${d2}' and TEMP_SESSION_ID='${TempSessionId}' `; + await txn.executeSql(q2, [], async function (txn2, txnres2) { + console.log('Updated IR Upload Images Status'); + resolve(true); + }, function (txnE, txnerr) { console.log(txnerr); resolve(false); },); + + }, function (txnE, txnerr) { console.log(txnerr); resolve(false); },); + }); + }).catch((Err) => { + console.log('Error in UpdateIRUploadStatus:', Err); + return false; + }) + + + + } + + async function LogImageUpload(storeData1, menu1, TempSessionId, UnSessionId, message, status, thisIR_SessObj = {}) { + let { StoreId, StoreName } = storeData1; + const url = props.baseurl + getMethodName(METHODS.UPLOADJSON_METHOD); + const nowTime = moment().format('HH:mm:ss'); + let ImageCount = await getImageCount(storeData1, menu1, TempSessionId); + let { SESSION_STORECODE, SESSION_TASKNAME, SESSION_CATNAME, SESSION_PHOTOTYPE } = thisIR_SessObj; + + ////Replaced special charecter and white space + let storeTittle = StoreName.replace(`@!%&`, '').replace(' ', '-'); + console.log("storeTittle:", storeTittle, StoreName); + + let obj = {}; + obj['StoreId'] = StoreId; + obj['Username'] = props.UserId; + obj['VisitDate'] = d2; + obj['InTime'] = nowTime; + obj['TempSessionId'] = TempSessionId; + obj['UnSessionId'] = UnSessionId; + obj['Status'] = status; + obj['Message'] = message; + obj['ImageCount'] = ImageCount; + obj['StoreTitle'] = storeTittle; + obj['StoreCode'] = SESSION_STORECODE; + obj['TaskName'] = SESSION_TASKNAME; + obj['CategoryName'] = SESSION_CATNAME; + obj['PhotoType'] = SESSION_PHOTOTYPE; + obj['KPIType'] = currentMenu.MenuName; + obj['ScreenName'] = currentMenu.ScreenName; + obj['UploadType'] = "New"; + + + let postData = {}; + postData['MID'] = 0; + postData['Keys'] = 'IR_UPLOAD_LOG_MSG'; + postData['JsonData'] = JSON.stringify(obj); + postData['UserId'] = props.UserId; + + console.log('postData', postData); + + return await UploadData2(url, postData) + .then((res) => { + if (res.UploadJsonResult != null && res.UploadJsonResult == 'Success') { + return true; + } + return false; + }) + .catch((err) => { + console.log(err); + return false; + }); + } + + async function getImageCount(storeData1, menu1, TempSessionId) { + let { StoreId, ChainId, StateId, StoreTypeId } = storeData1; + console.log('storeData in getImageCount', storeData1); + return new Promise((resolve, reject) => { + + + db.transaction(async function (txn) { + + let q = `select DISTINCT TEMP_SESSION_ID,count(IMAGE1) as ImageCount from ${AppTables.SOS_IR_IMAGES} where STORE_ID='${StoreId}' and VISIT_DATE='${d2}' and TEMP_SESSION_ID='${TempSessionId}' group by TEMP_SESSION_ID `; + console.log('q', q); + await txn.executeSql(q, [], async function (txn2, txnres) { + console.log('ImageCount rows:', txnres.rows.length); + if (txnres.rows.length > 0) { + let data = txnres.rows.item(0); + console.log('data:', data) + console.log('Image Count for TempSessionId:', data.ImageCount); + resolve(data.ImageCount); + } + else { + resolve(0); + } + + }, function (txnE, txnerr) { console.log(txnerr); resolve(0); },); + }); + }).catch((Err) => { + console.log('Error in getImageCount:', Err); + return 0; + }) + + + + } + + + async function onFocusChange(cat, sku, inputType = '1') { + let d = { 'catId': cat.SOSHeaderValue, 'subcatId': sku.SubSOSHeaderValue, 'inputType': inputType }; + console.log(d); + setCurrentFocusedData(d); + } + + async function focusToNext(cat, catIndex, skus, sku_index, type = 'HEADER') { + + let activeKey = ''; + let arr = Object.keys(inputRefs.current); + + if (type == 'HEADER') { + activeKey = 'input_' + cat.SOSHeaderValue; + } + else if (type == "CHILD1") { + activeKey = 'input1_' + cat.SOSHeaderValue + '_' + skus.SOSChildValue; + } else if (type == "CHILD2") { + activeKey = 'input2_' + cat.SOSHeaderValue + '_' + skus.SOSChildValue; + } + + let activeIndex = arr.indexOf(activeKey); + if (activeIndex < arr.length - 1) { + let nextKey = arr[++activeIndex] + let nextRef = inputRefs.current[nextKey]; + console.log("nextKey", nextKey, nextRef, inputRefs.current[nextKey]) + nextRef.focus(); + } + else { + return + } + + } + + async function onSubmitData() { + let isvalid = await validate(); + if (isvalid) { + Keyboard.dismiss(); + setShowAlert(true); + } + } + + async function saveData() { + // setHasUnsavedChanges(false); + BgUnsavedChanges(false) + setShowAlert(false); + setLoaderTitle('Saving Data...'); + setProcessing(true); + try { + let { StoreId, ChainId, StateId, StoreTypeId } = storeData; + await db.transaction(async function (txn) { + + let q = `DELETE FROM ${AppTables.SOS_HDR_DATA} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' `; + let q2 = `DELETE FROM ${AppTables.SOS_IMAGES} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' `; + let q3 = `DELETE FROM ${AppTables.SOS_CHILD_DATA} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' `; + let q4 = `DELETE FROM ${AppTables.SOS_IR_IMAGES} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' `; + let q5 = `DELETE FROM ${AppTables.SOS_IRUPLOAD} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' `; + + // remove old data + await txn.executeSql(q, [], async function (txn2, txnres) { + console.log('stock facing hdr data deleted'); + }, function (txnE, txnerr) { console.log(txnerr); },); + + await txn.executeSql(q2, [], async function (txn2, txnres) { + console.log('stock facing images deleted'); + }, function (txnE, txnerr) { console.log(txnerr); },); + + await txn.executeSql(q3, [], async function (txn2, txnres) { + console.log('stock facing child data deleted'); + }, function (txnE, txnerr) { console.log(txnerr); },); + + await txn.executeSql(q4, [], async function (txn2, txnres) { + console.log('SOS IR images deleted'); + }, function (txnE, txnerr) { console.log(txnerr); },); + + await txn.executeSql(q5, [], async function (txn2, txnres) { + console.log('SOS session status deleted'); + }, function (txnE, txnerr) { console.log(txnerr); },); + + insertData(); + + + }); + } catch (err) { + console.log(err); + } + } + + async function insertData() { + try { + + let { StoreId, ChainId, StateId, StoreTypeId } = storeData; + + let CameraIROnceOnlyIndex = KPIFields.findIndex(i => i.KPIFieldName == 'CameraIROnceOnly') + let CameraIROnceOnlyObj = CameraIROnceOnlyIndex >= 0 ? KPIFields[CameraIROnceOnlyIndex] : {}; + let CameraIROnceOnly = CameraIROnceOnlyIndex >= 0 ? CameraIROnceOnlyObj['KPIFieldEnable'] : true; + + let isKPIIREnableI = KPIFields.findIndex(i => i.KPIFieldName == 'KPIIREnable') + let isKPIIREnableObj = isKPIIREnableI >= 0 ? KPIFields[isKPIIREnableI] : {}; + let isKPIIREnable = isKPIIREnableI >= 0 ? isKPIIREnableObj['KPIFieldEnable'] : false; + + await db.transaction(async function (txn) { + var values = '', stock_values = '', images_values = '', IRimages_values = '', lastchar = '', IRsessions = '', SOSHdrFacingDec = '', SelfFacinglastchar = '', SelfFacingDec = '', TotalFacingDec = '', TotalFacinglastchar = ''; + + for (var i = 0; i < AllSOSData.length; i++) { + let item = AllSOSData[i]; + const cat = item; + const catIndex = i; + let { SOSHeaderTable, SOSHeaderField, SOSHeaderValue, HeaderName, SOSHeaderFacing, SOSHeaderFacingLable, SOSHeaderImage, SOSHeaderImageCount, SOSHeaderImageGrid } = cat; + let SOSHeaderId = 'SOS' + i + SOSHeaderValue + moment().format('MMDDYYYYHHmmss'); + const cindex = SOSStockData.findIndex(i => i.SOSHeaderValue == item.SOSHeaderValue); + const cobj = cindex >= 0 ? SOSStockData[cindex] : {}; + const HeaderImages = cobj['Images'] || []; + let SOSHdrFacing = cobj['SOSHdrFacing'] != null ? cobj['SOSHdrFacing'] : (cobj['SOSHdrFacing'] === 0 ? cobj['SOSHdrFacing'] : ''); + console.log("SOSHdrFacing.slice-------", SOSHdrFacing) + SOSHdrFacing = SOSHdrFacing + ""; + if (SOSHdrFacing != null && SOSHdrFacing != '' && SOSHdrFacing != 0) { + lastchar = SOSHdrFacing.substring(SOSHdrFacing.length - 2, SOSHdrFacing.length - 1); + SOSHdrFacingDec = lastchar === '.' ? lastchar + "0" : SOSHdrFacing; + } else { + SOSHdrFacingDec = "0.0" + } + // let CatIRImages=CameraIROnceOnly==true?SOSIRImages:(cobj['IRImages']!=null?cobj['IRImages'] : []) ; + // let TempSessionId= CameraIROnceOnly==true?GbTempSessionId:(cobj.TempSessionId!=null?cobj.TempSessionId:''); + let CatIRImages = cobj['IRImages'] != null ? cobj['IRImages'] : []; + let TempSessionId = cobj.TempSessionId != null ? cobj.TempSessionId : ''; + let Sess_StoreCode = cobj.Sess_StoreCode != null ? cobj.Sess_StoreCode : ''; + let Sess_TaskName = cobj.Sess_TaskName != null ? cobj.Sess_TaskName : ''; + let Sess_CatName = cobj.Sess_CatName != null ? cobj.Sess_CatName : ''; + let Sess_PhotoType = cobj.Sess_PhotoType != null ? cobj.Sess_PhotoType : ''; + + let this_SKUData = cobj['SKUData'] || []; + + values += values != '' ? ' , ' : ''; + values += ` ('${SOSHeaderId}','${StoreId}','${d2}','${SOSHeaderTable}','${SOSHeaderField}','${SOSHeaderValue}','${HeaderName}','${SOSHdrFacingDec}','${d2}') `; + + // Add IR session upload status for each category + if (isKPIIREnable && !CameraIROnceOnly) { + IRsessions += IRsessions != '' ? ' , ' : ''; + IRsessions += ` ('${SOSHeaderId}','${StoreId}','${d2}','','${SOSHeaderValue}','','${TempSessionId}','','0','0','Header','${Sess_StoreCode}','${Sess_TaskName}','${Sess_CatName}','${Sess_PhotoType}','${d2}') `; + } + + let skulist = item['skulist'] || []; + let SOSHeaderImage1 = item.SOSHeaderImage == 1 || item.SOSHeaderImage == 'true' ? 1 : 0; + // check if child image available in header + let firstSkuObj = skulist.length > 0 ? skulist[0] : {}; + let isChildImgEnabled = firstSkuObj.SOSChildImage == 1 || firstSkuObj.SOSChildImage == 'true' ? 1 : 0; + + + if (isKPIIREnable && !CameraIROnceOnly && (SOSHeaderImage1 == true || isChildImgEnabled == true)) { + for (var l = 0; l < CatIRImages.length; l++) { + let imgObj = CatIRImages[l]; + let { ImagePath } = imgObj; + IRimages_values += IRimages_values != '' ? ' , ' : ''; + IRimages_values += ` ('${SOSHeaderId}','${StoreId}','${d2}','${SOSHeaderValue}','','${(ImagePath || '')}','Header','${TempSessionId}','','${d2}') `; + } + } else { + // Don't include header images if IR images is enabled + for (var k = 0; k < HeaderImages.length; k++) { + let imgObj = HeaderImages[k]; + let { Image1Name, Image1 } = imgObj; + images_values += images_values != '' ? ' , ' : ''; + images_values += ` ('${SOSHeaderId}','${StoreId}','${d2}','${SOSHeaderValue}','','${(Image1Name || '')}','Header','${d2}') `; + } + } + + + for (var j = 0; j < skulist.length; j++) { + let skus = skulist[j]; + let sku_index = j; + let { SOSDefinitionId, SOSChildTable, SOSChildField, SOSChildValue, ChildName, SOSChildTotalFacing, SOSChildSelfFacing, SOSChildTotalFacingLable, SOSChildSelfFacingLable, SOSChildImage, SOSChildImageCount, SOSChildImageGrid } = skus; + stock_values += stock_values != '' ? ' , ' : ''; + + let thisCatSkuData_i = this_SKUData.findIndex(i => i.SOSChildValue == skus.SOSChildValue); + let thisCatSkuData = thisCatSkuData_i >= 0 ? (this_SKUData[thisCatSkuData_i] || {}) : {}; + let TotalFacing = thisCatSkuData.TotalFacing != null ? thisCatSkuData.TotalFacing : (thisCatSkuData.TotalFacing === 0 ? thisCatSkuData.TotalFacing : ''); + let SelfFacing = thisCatSkuData.SelfFacing != null ? thisCatSkuData.SelfFacing : (thisCatSkuData.SelfFacing === 0 ? thisCatSkuData.SelfFacing : ''); + console.log("SelfFacing------", SelfFacing) + SelfFacing = SelfFacing + ""; + if (SelfFacing != null && SelfFacing != '' && SelfFacing != 0) { + // SelfFacinglastchar=SelfFacing.slice(-1) + SelfFacinglastchar = SelfFacing.substring(SelfFacing.length - 2, SelfFacing.length - 1); + SelfFacingDec = SelfFacinglastchar === '.' ? SelfFacinglastchar + "0" : SelfFacing + } else { + SelfFacingDec = "0.0" + } + console.log("TotalFacing------", TotalFacing) + + TotalFacing = TotalFacing + ""; + if (TotalFacing != null && TotalFacing != '' && TotalFacing != 0) { + // TotalFacinglastchar=TotalFacing.slice(-1) + SelfFacinglastchar = TotalFacing.substring(TotalFacing.length - 2, TotalFacing.length - 1); + TotalFacingDec = TotalFacinglastchar === '.' ? TotalFacinglastchar + "0" : TotalFacing + } else { + TotalFacingDec = '0.0' + } + const ChildImages = thisCatSkuData['ChildImages'] || []; + + stock_values += ` ('${SOSHeaderId}','${StoreId}','${d2}','${SOSDefinitionId}','${SOSHeaderValue}','${SOSChildTable}','${SOSChildField}','${SOSChildValue}','${ChildName}','${TotalFacingDec}','${SelfFacingDec}','${d2}') `; + + let SOSChildImage1 = SOSChildImage == 1 || SOSChildImage == 'true' ? 1 : 0; + if (SOSChildImage1 == true) { + for (var l = 0; l < ChildImages.length; l++) { + let imgObj = ChildImages[l]; + let { Image1Name, Image1 } = imgObj; + images_values += images_values != '' ? ' , ' : ''; + images_values += ` ('${SOSHeaderId}','${StoreId}','${d2}','${SOSHeaderValue}','${SOSChildValue}','${(Image1Name || '')}','Child','${d2}') `; + } + } + } + } + + if (isKPIIREnable && CameraIROnceOnly) { + IRimages_values = ''; + for (var l = 0; l < SOSIRImages.current.length; l++) { + let imgObj = SOSIRImages.current[l]; + let { ImagePath } = imgObj; + IRimages_values += IRimages_values != '' ? ' , ' : ''; + IRimages_values += ` ('','${StoreId}','${d2}','','','${(ImagePath || '')}','Header','${GbTempSessionId.current}','','${d2}') `; + + } + + let { Sess_StoreCode, Sess_TaskName, Sess_CatName, Sess_PhotoType } = GbTempSessionObj.current; + Sess_StoreCode = Sess_StoreCode || ''; + Sess_TaskName = Sess_TaskName || ''; + Sess_CatName = Sess_CatName || ''; + Sess_PhotoType = Sess_PhotoType || ''; + // Add IR session upload status once only for whole KPI + IRsessions += IRsessions != '' ? ' , ' : ''; + IRsessions += ` ('','${StoreId}','${d2}','','','','${GbTempSessionId.current}','','0','0','Header','${Sess_StoreCode}','${Sess_TaskName}','${Sess_CatName}','${Sess_PhotoType}','${d2}') `; + } + + let add_StockHdr = `INSERT INTO ${AppTables.SOS_HDR_DATA} (SOS_HEADER_ID,STORE_ID,VISIT_DATE,SOS_HDR_TABLE,SOS_HDR_FIELD,SOS_HDR_VALUE,HEADER_NAME,SOS_HDR_FACING,ADDED_DATE) VALUES ${values} `; + let add_Stock = `INSERT INTO ${AppTables.SOS_CHILD_DATA} (SOS_HEADER_ID,STORE_ID,VISIT_DATE,SOS_DEFINITION_ID,SOS_HDR_VALUE,SOS_CHILD_TABLE,SOS_CHILD_FIELD,SOS_CHILD_VALUE,CHILD_NAME,TOTAL_FACING,SELF_FACING,ADDED_DATE ) VALUES ${stock_values} `; + let add_images = `INSERT INTO ${AppTables.SOS_IMAGES} (SOS_HEADER_ID,STORE_ID,VISIT_DATE,SOS_HDR_VALUE,SOS_CHILD_VALUE,IMAGE1,TYPE,ADDED_DATE) VALUES ${images_values} `; + let add_IRimages = `INSERT INTO ${AppTables.SOS_IR_IMAGES} (SOS_HEADER_ID,STORE_ID,VISIT_DATE,SOS_HDR_VALUE,SOS_CHILD_VALUE,IMAGE1,TYPE,TEMP_SESSION_ID,UN_SESSION_ID,ADDED_DATE) VALUES ${IRimages_values} `; + + let add_IRUploadS = `INSERT INTO ${AppTables.SOS_IRUPLOAD} (SOS_HEADER_ID,STORE_ID,VISIT_DATE,SOS_DEFINITION_ID,SOS_HDR_VALUE,SOS_CHILD_VALUE,TEMP_SESSION_ID,UN_SESSION_ID,UPLOAD_STATUS,SYNC_STATUS,TYPE,SESSION_STORECODE,SESSION_TASKNAME,SESSION_CATNAME,SESSION_PHOTOTYPE,ADDED_DATE) VALUES ${IRsessions} `; + + + await txn.executeSql(add_StockHdr, [], async function (txn2, txnres) { + console.log('stock facing header added'); + await txn.executeSql(add_Stock, [], async function (txn2, txnres) { + console.log('stock facing child added'); + var isImageAdded = true, isIRImageAdded = true, isIRStatusAdded = true; + if (images_values != '') { + isImageAdded = executeSDQuery(txn, add_images); + } + if (IRimages_values != '') { + isIRImageAdded = executeSDQuery(txn, add_IRimages); + } + if (IRsessions != '') { + isIRStatusAdded = executeSDQuery(txn, add_IRUploadS); + } + + if (!isImageAdded) { + setProcessing(false); notify('Cannot add Share Of Shelf Images data'); + } + else if (!isIRImageAdded) { + setProcessing(false); notify('Cannot add Share Of Shelf IR Images data'); + } + else if (!isIRStatusAdded) { + setProcessing(false); notify('Cannot add Share Of Shelf IR Session data'); + } + else { + console.log('stock facing IR Upload status added'); + notify('Share Of Shelf data updated successfully'); + setProcessing(false); + setisDataExists(true); + // setshowUploadAlert(true); + await clear_item('storeData'); //clear bg data + BgUnsavedChanges(false);// when all data saved clear the unsaved changes flag + props.navigation.goBack();// send back + } + }, function (txnE, txnerr) { console.log(txnerr); setProcessing(false); notify('Cannot add Share Of Shelf data') },); + }, function (txnE, txnerr) { console.log(txnerr); setProcessing(false); notify('Cannot add Share Of Shelf data') },); + }); + } catch (err) { + console.log(err); + } + } + + async function executeQuery(q) { + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + await txn.executeSql(q, [], async function (txn2, txnres2) { + resolve(true); + }, function (Etxn, txnerr) { console.log(txnerr); resolve(false) }); + }); + }).then((val) => { + return val; + }).catch((err) => { + console.log(err); + return false; + }) + } + + async function executeSDQuery(txn, q) { + // execute savedata queries + return new Promise((resolve, reject) => { + txn.executeSql(q, [], async function (txn2, txnres2) { + resolve(true); + }, function (Etxn, txnerr) { console.log(txnerr); resolve(false); }); + + }).then((val) => { + return val; + }).catch((err) => { + console.log(err); + return false; + }) + } + + + + async function validate() { + function showError(obj, isErr) { + setErrorField(obj); + setError(isErr); + } + + let CameraIROnceOnlyIndex = KPIFields.findIndex(i => i.KPIFieldName == 'CameraIROnceOnly') + let CameraIROnceOnlyObj = CameraIROnceOnlyIndex >= 0 ? KPIFields[CameraIROnceOnlyIndex] : {}; + let CameraIROnceOnly = CameraIROnceOnlyIndex >= 0 ? CameraIROnceOnlyObj['KPIFieldEnable'] : true; + + let isKPIIREnableI = KPIFields.findIndex(i => i.KPIFieldName == 'KPIIREnable') + let isKPIIREnableObj = isKPIIREnableI >= 0 ? KPIFields[isKPIIREnableI] : {}; + let isKPIIREnable = isKPIIREnableI >= 0 ? isKPIIREnableObj['KPIFieldEnable'] : false; + + return new Promise((resolve, reject) => { + // if(isKPIIREnable && StoreCameraAllow && CameraIROnceOnly==true && (SOSIRImages.length==0 || GbTempSessionId=="")){ + // notify(`Please click header image for SOS`,'SHORT'); + // resolve(false);return; + // } + // else{ + let isAllNotPresent = true; + for (const index in AllSOSData) { + const item = AllSOSData[index]; + const cat = item; + const catIndex = index; + + let SOSHeaderImage = item.SOSHeaderImage == 1 || item.SOSHeaderImage == 'true' ? 1 : 0; + let SOSHeaderFacing = item.SOSHeaderFacing == 1 || item.SOSHeaderFacing == 'true' ? 1 : 0; + let SOSHeaderFacingLable = item.SOSHeaderFacingLable != null ? item.SOSHeaderFacingLable : ''; + + let skulist = item.skulist || []; + + // check if child image available (in header ) + let firstSkuObj = skulist.length > 0 ? skulist[0] : {}; + let isChildImgEnabled = firstSkuObj.SOSChildImage == 1 || firstSkuObj.SOSChildImage == 'true' ? 1 : 0; + + const cindex = SOSStockData.findIndex(i => i.SOSHeaderValue == item.SOSHeaderValue); + const cobj = cindex >= 0 ? SOSStockData[cindex] : {}; + const HeaderImages = cobj['Images'] || []; + let SOSHdrFacing = cobj['SOSHdrFacing'] != null ? cobj['SOSHdrFacing'] : ''; + let this_SKUData = cobj['SKUData'] || []; + let TotalSelfFacingsEntered = 0, sumOfTotalFacingsEntered = 0; + console.log('StoreCameraAllow:', StoreCameraAllow); + + let CatIRImages = cobj['IRImages'] != null ? cobj['IRImages'] : []; + let TempSessionId = cobj.TempSessionId != null ? cobj.TempSessionId : ''; + + let errorobj = { 'EF_Cat': cat }; + if (SOSHeaderFacing == true && SOSHdrFacing !== 0 && (SOSHdrFacing == null || SOSHdrFacing == '')) { + errorobj["EF_HdrFacing"] = 'HdrFacing'; + showError(errorobj, true); + let refIn1 = inputRefs.current['input_' + cat.SOSHeaderValue]; + refIn1.focus(); + notify(`Please enter Header Facing for ${cat.HeaderName}`, 'SHORT'); + resolve(false); return; + } + else { + // if(StoreCameraAllow && SOSHeaderImage==true && HeaderImages.length>0) + // { + // for(const splitItemIndex in HeaderImages){ + // const splitItem=HeaderImages[splitItemIndex]; + // let Image1Name=splitItem['Image1Name']!=null && splitItem['Image1Name']!=''?splitItem['Image1Name']:''; + // if(Image1Name==''){ + // notify(`Please click all header images for ${cat.HeaderName}`,'SHORT'); + // resolve(false);return; + // } + // } + // } + + for (const sku_index in skulist) { + const skus = skulist[sku_index]; + + let SOSChildImage = skus.SOSChildImage == 1 || skus.SOSChildImage == 'true' ? 1 : 0; + let SOSChildTotalFacing = skus.SOSChildTotalFacing == 1 || skus.SOSChildTotalFacing == 'true' ? 1 : 0; + let SOSChildSelfFacing = skus.SOSChildSelfFacing == 1 || skus.SOSChildSelfFacing == 'true' ? 1 : 0; + let SOSChildTotalFacingLable = skus.SOSChildTotalFacingLable != null ? skus.SOSChildTotalFacingLable : ''; + let SOSChildSelfFacingLable = skus.SOSChildSelfFacingLable != null ? skus.SOSChildSelfFacingLable : ''; + + + let thisCatSkuData_i = this_SKUData.findIndex(i => i.SOSChildValue == skus.SOSChildValue); + let thisCatSkuData = thisCatSkuData_i >= 0 ? (this_SKUData[thisCatSkuData_i] || {}) : {}; + let TotalFacing = thisCatSkuData.TotalFacing != null ? thisCatSkuData.TotalFacing : ''; + let SelfFacing = thisCatSkuData.SelfFacing != null ? thisCatSkuData.SelfFacing : ''; + const ChildImages = thisCatSkuData['ChildImages'] || []; + errorobj["EF_Brand"] = skus; + if (SOSChildTotalFacing == true && TotalFacing !== 0 && (TotalFacing == null || TotalFacing == '')) { + errorobj["EF_ChildTotal"] = 'ChildTotal'; + showError(errorobj, true); + let refIn1 = inputRefs.current['input1_' + cat.SOSHeaderValue + '_' + skus.SOSChildValue]; + refIn1.focus(); + notify(`Please enter ${SOSChildTotalFacingLable} for ${skus.ChildName} in ${cat.HeaderName}`, 'SHORT'); + resolve(false); return; + } + else if (SOSChildSelfFacing == true && SelfFacing !== 0 && (SelfFacing == null || SelfFacing == '')) { + errorobj["EF_ChildSelf"] = 'ChildSelf'; + showError(errorobj, true); + let refIn1 = inputRefs.current['input2_' + cat.SOSHeaderValue + '_' + skus.SOSChildValue]; + refIn1.focus(); + notify(`Please enter ${SOSChildSelfFacingLable} for ${skus.ChildName} in ${cat.HeaderName}`, 'SHORT'); + resolve(false); return; + } + else if (SOSChildSelfFacing == true && SOSChildTotalFacing == true && (parseFloat(SelfFacing) > parseFloat(TotalFacing))) { + // show error in both field : the ChildTotal and the ChildSelf + errorobj["EF_ChildTotal"] = 'ChildTotal'; + errorobj["EF_ChildSelf"] = 'ChildSelf'; + showError(errorobj, true); + let refIn1 = inputRefs.current['input1_' + cat.SOSHeaderValue + '_' + skus.SOSChildValue]; + refIn1.focus(); + + notify(`${SOSChildSelfFacingLable} should be less than or equals to ${SOSChildTotalFacingLable} for ${skus.ChildName} in ${cat.HeaderName}`, 'SHORT'); + resolve(false); return; + } + else { + TotalSelfFacingsEntered += parseFloat(SelfFacing); + sumOfTotalFacingsEntered += TotalFacing != '' ? parseFloat(TotalFacing) : 0; + // isAllNotPresent : If Any SOS data exists + if (parseFloat(TotalFacing) > 0 || parseFloat(SOSHdrFacing) > 0) { + isAllNotPresent = false; + } + + //check in last of all childs + if (sku_index == skulist.length - 1) { + console.log("TotalSelfFacingsEntered:", TotalSelfFacingsEntered, ",HdrFacing:", parseFloat(SOSHdrFacing), (TotalSelfFacingsEntered > parseFloat(SOSHdrFacing))) + if (SOSChildSelfFacing == true && SOSHeaderFacing == true && (TotalSelfFacingsEntered > parseFloat(SOSHdrFacing))) { + // show error in both field : the HdrTotal and the ChildSelf + errorobj["EF_HdrFacing"] = 'HdrFacing'; + errorobj["EF_ChildSelf"] = 'ChildSelf'; + showError(errorobj, true); + let refIn1 = inputRefs.current['input_' + cat.SOSHeaderValue]; + refIn1.focus(); + + notify(`Sum of all ${SOSChildSelfFacingLable} should be less than or equals to ${SOSHeaderFacingLable} for ${cat.HeaderName}`, 'SHORT'); + resolve(false); return; + } + //check header IR images clicked or not only if any child facings is available (TotalSelfFacingsEntered>0) + + if (isKPIIREnable && StoreCameraAllow && !CameraIROnceOnly && (SOSHeaderImage == true || isChildImgEnabled == true) && (TotalSelfFacingsEntered > 0 || (sumOfTotalFacingsEntered > 0 || SOSHdrFacing > 0)) && (CatIRImages.length == 0 || TempSessionId == '')) { + notify(`Please click header image for ${cat.HeaderName}`, 'SHORT'); + resolve(false); return; + } + } + + console.log('StoreCameraAllow:', StoreCameraAllow, SOSChildImage) + + if (StoreCameraAllow && SOSChildImage == true && ChildImages.length > 0) { + for (const splitItemIndex in ChildImages) { + const splitItem = ChildImages[splitItemIndex]; + let Image1Name = splitItem['Image1Name'] != null && splitItem['Image1Name'] != '' ? splitItem['Image1Name'] : ''; + if (Image1Name == '') { + errorobj["EF_ChildImage"] = 'ChildImage'; + errorobj["EF_ChildImageIndex"] = splitItemIndex; + showError(errorobj, true); + let refIn1 = inputRefs.current['input1_' + cat.SOSHeaderValue + '_' + skus.SOSChildValue]; + refIn1.focus(); + + notify(`Please click all child images for ${skus.ChildName} in ${cat.HeaderName}`, 'SHORT'); + resolve(false); return; + } + } + } + + + + + } + } + } + + if (index == (AllSOSData.length - 1)) { + // isAllNotPresent : check only of Any SOS data exists + if (isKPIIREnable && StoreCameraAllow && CameraIROnceOnly == true && !isAllNotPresent && (SOSIRImages.current.length == 0 || GbTempSessionId.current == "")) { + notify(`Please click header image for SOS`, 'SHORT'); + resolve(false); return; + } + else { + resolve(true); return; + } + + } + + } + // } + + }).then((val) => { return val }) + .catch((err) => { console.log(err); return false }); + + } + + function onStockValChange(item, skuItem, val, key, type = '') { + setErrorField({}); + setError(false); + if (val != '') { + let isValid = validateNumber(val, type); + if (!isValid) { + return; + } + } + let allSKUData = SOSStockData; + let defData = { 'SOSHeaderValue': item.SOSHeaderValue, 'Images': [], 'SKUData': [] }; + const catindex = allSKUData.findIndex(i => i.SOSHeaderValue == item.SOSHeaderValue); + const catData = catindex >= 0 ? (allSKUData[catindex] || defData) : defData; + let AllSKUs = catData['SKUData'] || []; + + let defCData = { 'SOSChildValue': skuItem.SOSChildValue, 'ChildImages': [] }; + let skud_index = AllSKUs.findIndex(i => i.SOSChildValue == skuItem.SOSChildValue); + const skud = skud_index >= 0 ? (AllSKUs[skud_index] || defCData) : defCData + skud[key] = val; + skud_index >= 0 ? AllSKUs[skud_index] = skud : AllSKUs.push(skud); + catData['SKUData'] = AllSKUs; + + catindex >= 0 ? allSKUData[catindex] = catData : allSKUData.push(catData); + // setSOSStockData(allSKUData); + BgWindowData(allSKUData) + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + + function onHdrStockValChange(item, val, key, type = '') { + setErrorField({}); + setError(false); + if (val != '') { + let isValid = validateNumber(val, type); + if (!isValid) { + return; + } + } + + let allSKUData = SOSStockData; + let defData = { 'SOSHeaderValue': item.SOSHeaderValue, 'Images': [], 'SKUData': [] }; + const skud_index = allSKUData.findIndex(i => i.SOSHeaderValue == item.SOSHeaderValue); + const skud = skud_index >= 0 ? (allSKUData[skud_index] || defData) : defData; + skud[key] = val; + skud_index >= 0 ? allSKUData[skud_index] = skud : allSKUData.push(skud); + // setSOSStockData(allSKUData); + BgWindowData(allSKUData) + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + + function openRetakeOp(cat, type = '1', IRImgIndex, IRimgPath) { + let data = { 'cat': cat, 'type': type, 'IRImgIndex': IRImgIndex, 'IRimgPath': IRimgPath }; + setretakeMData(data); + setshowRetakeModal(true); + } + + + function closeRetakeOp() { + setretakeMData({}) + setshowRetakeModal(false); + } + + function setIRZoomImages(IRCamImages) { + let z_images = []; + for (let ci in IRCamImages) { + let img = IRCamImages[ci]; + let img_obj = { imgIndex: (ci + 1), url: img.ImagePath, props: {} } + + z_images.push(img_obj); + if (ci == IRCamImages.length - 1) { + setZoomImageUrl2(z_images); + } + } + } + + async function getIRZoomImages(IRCamImages) { + return new Promise((resolve, reject) => { + let z_images = []; + for (let ci in IRCamImages) { + let img = IRCamImages[ci]; + let img_obj = { imgIndex: (ci + 1), url: img.ImagePath, props: {} } + + z_images.push(img_obj); + if (ci == IRCamImages.length - 1) { + resolve(z_images) + } + } + }).catch((err) => { + console.log(err); + return []; + }) + } + + function openImageRefView(windowIndex = 0) { + setrefImageIndex(windowIndex); + UpdateShow_zoomImageRef(true); + } + + function openImageRefView2(ImageIndex = 0, catIndex, Type = '2') { + if (Type == '1') { + let cat = AllSOSData[catIndex]; + const catDataIndex = SOSStockData.findIndex(i => i.SOSHeaderValue == cat.SOSHeaderValue); + const catData = catDataIndex >= 0 ? SOSStockData[catDataIndex] : {}; + let zoomIRImages = catData.zoomIRImages != null && catData.zoomIRImages != "" ? catData.zoomIRImages : []; + setZoomImageUrl2(zoomIRImages); + } + setrefImageIndex2(ImageIndex); + UpdateShow_zoomImageRef2(true); + } + + function _renderHeader(currentIndex, ImagesArr) { + return ( + + {`${(currentIndex + 1)}/${ImagesArr.length}`} + { UpdateShow_zoomImageRef(false); UpdateShow_zoomImageRef2(false); }}> + + + + ) + } + + function _render_Alert() { + return ( + + + { setShowAlert(false) }}> + Cancel + + { saveData() }}> + Yes + + + + ) + } + + async function OpenImgModal(imgPath, cat, splitChildItem, splitChildItemIndex, skus) { + setSelectedImg(imgPath) + setShowModal(true); + if ((imgPath != '' && imgPath != null)) { + setShowImageSaveOp(false); + } + else { + setShowImageSaveOp(true); + } + setReCapImgModalObj({ cat, splitChildItem, splitChildItemIndex, skus }) + // _OpenCaptureImage_Modal(imgPath,window,splitItem,splitItemIndex,cameraType) + + } + + function _render_RetakePopup() { + return ( + + + { RetakeIRPhoto() }}> + + + Retake + + + { DeleteIRPhoto() }}> + + + Delete + + + { closeRetakeOp() }}> + + + Cancel + + + + + + + + ) + } + + function _render_UploadAlert() { + return ( + + + { setshowUploadAlert(false) }}> + Cancel + + { UploadIRSessions() }}> + Yes + + + + ) + } + + function _renderIRCamera(cat, CatIRImages, TempSessionId, type = '1', catIndex = '') { + + let isSaveDisabled = (isDataUploaded == 'U' || isDataUploaded == 'P'); + let isResumeDisabled = (TempSessionId == null || TempSessionId == '' || TempSessionId == 'undefined' || isSaveDisabled == true); + + return ( + + + {'Capture SOS Header Images'} + + + + {(CatIRImages != null && CatIRImages.length > 0) && + CatIRImages.map((IRImg, IRImgIndex) => { + let IRimgPath = IRImg.ImagePath; + return ( + { openImageRefView2(IRImgIndex, catIndex, type) }}> + {(IRimgPath != null && IRimgPath != '') && } + {(IRimgPath == null || IRimgPath == '') && } + { openRetakeOp(cat, type, IRImgIndex, IRimgPath) }}> + + + + ); + }) + + } + + + { StartCameraSession(cat, type) }}> + + Start Session + + { ResumeCameraSession(cat, type) }} > + + Resume Session + + + + + ) + } + + + function _renderIRCameraOnce() { + let CameraIROnceOnlyIndex = KPIFields.findIndex(i => i.KPIFieldName == 'CameraIROnceOnly') + let CameraIROnceOnlyObj = CameraIROnceOnlyIndex >= 0 ? KPIFields[CameraIROnceOnlyIndex] : {}; + let CameraIROnceOnly = CameraIROnceOnlyIndex >= 0 ? CameraIROnceOnlyObj['KPIFieldEnable'] : true; + + if (CameraIROnceOnly) { + return _renderIRCamera({}, SOSIRImages.current, GbTempSessionId.current, '2'); + } + else { + return (); + } + + } + + + function cancelImage() { + // setImage1(''); + setSelectedImg(''); + setReCapImgModalObj({}) + setShowModal(false); + } + + function _OpenCaptureImage_Modal(img) { + + const isImageCap = (img != '' || img != null) ? true : false; + console.log("imag pop is trigger", isImageCap, showModal, img) + let { cat, splitChildItem, splitChildItemIndex, skus } = reCapImgModalObj + let camera2Label = (cat && cat.PromoImage2Lable) || ''; + return ( + + { + isImageCap && + + + + + { openCamera(cat, splitChildItem, splitChildItemIndex, skus) }}> + + + + {!showImageSaveOp && + { cancelImage(false) }}> + {console.log("imag pop is trigger--4")} + {ST.Close} + + } + + } + + ) + } + + function _renderSOSList() { + + let SOSHeaderLabel = KPIFields.findIndex(i => i.KPIFieldName == 'SOSHeaderLabel') + let SOSHeaderObj = SOSHeaderLabel >= 0 ? KPIFields[SOSHeaderLabel] : {}; + let SOSHeaderDisName = SOSHeaderLabel >= 0 ? SOSHeaderObj['KPIFieldDisplayName'] : 'Product Facing'; + + let sosDecimalValue = KPIFields.findIndex(i => i.KPIFieldName == 'SOSValueDecimalAllow') + let sosDecimalValueObj = sosDecimalValue >= 0 ? KPIFields[sosDecimalValue] : {}; + let sosDecimalValueEnable = sosDecimalValue >= 0 ? sosDecimalValueObj['KPIFieldEnable'] : false; + + let CameraIROnceOnlyIndex = KPIFields.findIndex(i => i.KPIFieldName == 'CameraIROnceOnly') + let CameraIROnceOnlyObj = CameraIROnceOnlyIndex >= 0 ? KPIFields[CameraIROnceOnlyIndex] : {}; + let CameraIROnceOnly = CameraIROnceOnlyIndex >= 0 ? CameraIROnceOnlyObj['KPIFieldEnable'] : true; + + let isKPIIREnableI = KPIFields.findIndex(i => i.KPIFieldName == 'KPIIREnable') + let isKPIIREnableObj = isKPIIREnableI >= 0 ? KPIFields[isKPIIREnableI] : {}; + let isKPIIREnable = isKPIIREnableI >= 0 ? isKPIIREnableObj['KPIFieldEnable'] : false; + + //shaikh + let sosPercValue = KPIFields.findIndex(i => i.KPIFieldName == 'SOSPercentageCalculate') + let sosPercValueObj = sosPercValue >= 0 ? KPIFields[sosPercValue] : {}; + let sosPercValueEnable = sosPercValue >= 0 ? sosPercValueObj['KPIFieldEnable'] : false; + + let decimalAllow = sosDecimalValueEnable ? 'decimal' : 'numeric' + + let isSaveDisabled = (isDataUploaded == 'U' || isDataUploaded == 'P'); + + return ( + + + + { + return _renderIRCameraOnce() + }} + viewabilityConfigCallbackPairs={ + FlatLConfCallbackPairs.current + } + listKey={(item, index) => `window_${index.toString()}`} + renderItem={({ item, index }) => { + const cat = item; + const catIndex = index; + + let SOSHeaderImage = true;//item.SOSHeaderImage==1 || item.SOSHeaderImage=='true'?1: 0; + let SOSHeaderFacing = item.SOSHeaderFacing == 1 || item.SOSHeaderFacing == 'true' ? 1 : 0; + let SOSHeaderFacingLable = item.SOSHeaderFacingLable != null ? item.SOSHeaderFacingLable : ''; + + + const cindex = SOSStockData.findIndex(i => i.SOSHeaderValue == item.SOSHeaderValue); + const cobj = cindex >= 0 ? SOSStockData[cindex] : {}; + const HeaderImages = cobj['Images'] || []; + let SOSHdrFacing = cobj['SOSHdrFacing'] != null ? cobj['SOSHdrFacing'] : ''; + let this_SKUData = cobj['SKUData'] || []; + // check if child image available in header + let firstSkuObj = cat.skulist.length > 0 ? cat.skulist[0] : {}; + let isChildImgEnabled = firstSkuObj.SOSChildImage == 1 || firstSkuObj.SOSChildImage == 'true' ? 1 : 0; + + let show_HdrForm = SOSHeaderFacing == true || (isKPIIREnable && CameraIROnceOnly == false && (SOSHeaderImage == true || isChildImgEnabled)) || (isKPIIREnable == false && SOSHeaderImage == true); + + let CatIRImages = cobj['IRImages'] != null ? cobj['IRImages'] : []; + let TempSessionId = cobj.TempSessionId != null ? cobj.TempSessionId : ''; + + + // Error Field highlight styles + let EF_Cat = errorfield.EF_Cat != null ? errorfield.EF_Cat : {}; + let show_errorhere = error == true && EF_Cat.SOSHeaderValue == cat.SOSHeaderValue && EF_Cat.SOSDefinitionId == cat.SOSDefinitionId; + + // this will show error field in red (if window is present and exist reason is enabled and not filled ) or (if window is not present and Not exist reason is enabled and not filled ) + let EF_HdrFacing = errorfield.EF_HdrFacing || ''; + let EStyle_HdrFacing = show_errorhere && EF_HdrFacing == 'HdrFacing' ? customStyle.stk_inptSTyle_error : {}; + + //get SOS Target at header from skulist first child- as all children of particular hdr will contain same SOSTarget Value + let child_list = cat.skulist || []; + let first_child = child_list.length > 0 ? child_list[0] : {}; + let SOSTarget = first_child.SOSTarget; + + + //shaikh... + // let SelfchildCount=0; + let facingPerc1 = 0; + let SOSChildSelfFacingFlag = 0; + + let isVisible = Boolean(ItemsInView.find(({ item: i, isViewable }) => i.SOSHeaderValue == item.SOSHeaderValue && isViewable)) + console.log("RenderItemList ItemsInView2:", index, isVisible) + + let valData = this_SKUData.reduce((a, b) => (a || 0) + (b.SelfFacing || 0), 0); + // let SelfchildCount= valData.SelfFacing ||0 + let SelfchildCount = valData || 0 + if (isVisible && cat.animatedHeight != null) { + setTimeout(() => { + Animated.timing(cat.animatedHeight, { + toValue: 0, + duration: 800, + useNativeDriver: false, + }).start(); + + }, (props.RefImagePopUpTime || 0) * 1000) + } + + if ((SOSHeaderFacing == true) && (SelfchildCount != 0 && SOSHdrFacing != 0)) { + facingPerc1 = ((SelfchildCount || 0) / (SOSHdrFacing || 0)) * 100 + console.log("vdshva--", facingPerc1) + } + + return ( + + + + + {item.HeaderName} + + + + {sosPercValueEnable == true && SOSHeaderFacing == true && {`SOS Percent: ${facingPerc1.toFixed(0)}%`}} + {SOSTarget != null && SOSTarget != '' && {`SOS Target: ${SOSTarget}%`}} + + + + + {/* { SOSRefImagePopUp && + + + } */} + + + + {show_HdrForm == true && + + {SOSHeaderFacing == true && + + + + {SOSHeaderFacingLable} + + + + { inputRefs.current['input_' + cat.SOSHeaderValue] = reff; }} + placeholder="" + autoComplete='off' + placeholderTextColor={PageTheme.$placeholder_color} + value={(SOSHdrFacing + '')} + keyboardType='numeric' + editable={!isSaveDisabled} + blurOnSubmit={false} + returnKeyType={(Platform.OS === 'ios') ? 'done' : 'next'} + onSubmitEditing={() => { focusToNext(cat, catIndex, "", "", "HEADER") }} + onChangeText={(val) => { onHdrStockValChange(cat, val, 'SOSHdrFacing', decimalAllow) }} + /> + + + + } + {(isKPIIREnable && !CameraIROnceOnly && (SOSHeaderImage == true || isChildImgEnabled == true)) && + _renderIRCamera(cat, CatIRImages, TempSessionId, '1', catIndex) + } + {/* {(SOSHeaderImage==true && HeaderImages.length>0) && + + + {'Capture SOS Header Images'} + + + + {(rerenderdata2==rerenderdata2) && + HeaderImages.map((item,index)=>{ + let splitItem=item; + let splitItemIndex=index; + let Image1Name=splitItem['Image1Name']!=null && splitItem['Image1Name']!=''?splitItem['Image1Name']:''; + let Image1=splitItem['Image1']!=null && splitItem['Image1']!=''?splitItem['Image1']:''; + let isImg1mad=splitItem['img1Required'] || false; + + return( + + + + {((Image1=='' || Image1==null) && isImg1mad) ? + {openCamera(cat,splitItem,splitItemIndex,'1')}}> + + : (Image1=='' || Image1==null ) ? + {openCamera(cat,splitItem,splitItemIndex,'1')}}> + + :(Image1!='' || Image1!=null ) ? + {OpenImgModal(Image1,cat,splitItem,splitItemIndex,'1')}}> + + : null + } + + + ); + }) + } + + + + } */} + + } + + + + {/* + {SOSHeaderDisName} + */} + + {SOSHeaderDisName} + + + + + + { + const skus = item; + const sku_index = index; + + + let SOSChildImage = skus.SOSChildImage == 1 || skus.SOSChildImage == 'true' ? 1 : 0; + let SOSChildTotalFacing = skus.SOSChildTotalFacing == 1 || skus.SOSChildTotalFacing == 'true' ? 1 : 0; + let SOSChildSelfFacing = skus.SOSChildSelfFacing == 1 || skus.SOSChildSelfFacing == 'true' ? 1 : 0; + let SOSChildTotalFacingLable = skus.SOSChildTotalFacingLable != null ? skus.SOSChildTotalFacingLable : ''; + let SOSChildSelfFacingLable = skus.SOSChildSelfFacingLable != null ? skus.SOSChildSelfFacingLable : ''; + + let thisCatSkuData_i = this_SKUData.findIndex(i => i.SOSChildValue == skus.SOSChildValue); + let thisCatSkuData = thisCatSkuData_i >= 0 ? (this_SKUData[thisCatSkuData_i] || {}) : {}; + let TotalFacing = thisCatSkuData.TotalFacing != null ? thisCatSkuData.TotalFacing : ''; + let SelfFacing = thisCatSkuData.SelfFacing != null ? thisCatSkuData.SelfFacing : ''; + const ChildImages = thisCatSkuData['ChildImages'] || []; + + let EF_Brand = errorfield.EF_Brand != null ? errorfield.EF_Brand : {}; + let show_ChildErrHere = EF_Brand.SOSChildValue == skus.SOSChildValue; + + let EF_ChildTotal = errorfield.EF_ChildTotal || ''; + let EStyle_ChildTotal = show_errorhere && show_ChildErrHere && EF_ChildTotal == 'ChildTotal' ? customStyle.stk_inptSTyle_error : {}; + + let EF_ChildSelf = errorfield.EF_ChildSelf || ''; + let EStyle_ChildSelf = show_errorhere && show_ChildErrHere && EF_ChildSelf == 'ChildSelf' ? customStyle.stk_inptSTyle_error : {}; + //shaikh cahnges + let facingPerc = 0; + if ((SOSChildTotalFacing == true && SOSChildSelfFacing == true) && (SelfFacing != 0 && TotalFacing != 0)) { + facingPerc = ((SelfFacing || 0) / (TotalFacing || 0)) * 100 + } + SOSChildSelfFacingFlag = SOSChildSelfFacing; + SelfchildCount = SelfFacing; + + return ( + + {skus.ChildName} + {(SOSChildImage == true) && + + + + {'Capture SOS Child Images'} + + + + {rerenderdata4 == rerenderdata4 && + ChildImages.map((item, index) => { + let splitChildItem = item; + let splitChildItemIndex = index; + let Image1Name = splitChildItem['Image1Name'] != null && splitChildItem['Image1Name'] != '' ? splitChildItem['Image1Name'] : ''; + let Image1 = splitChildItem['Image1'] != null && splitChildItem['Image1'] != '' ? splitChildItem['Image1'] : ''; + let isImg1mad = splitChildItem['img1Required'] || false; + + let EF_ChildImageIndex = errorfield.EF_ChildImageIndex === 0 || errorfield.EF_ChildImageIndex != null ? errorfield.EF_ChildImageIndex : ''; + let show_ChildImgErrHere = EF_ChildImageIndex == splitChildItemIndex; + + let EF_ChildImage = errorfield.EF_ChildImage || ''; + let EStyle_ChildImage = show_errorhere && show_ChildErrHere && show_ChildImgErrHere && EF_ChildImage == 'ChildImage' ? customStyle.error_CatImage2 : {}; + + + return ( + + {((Image1 == '' || Image1 == null) && isImg1mad) ? + { openCamera(cat, splitChildItem, splitChildItemIndex, '2', skus) }}> + + : (Image1 == '' || Image1 == null) ? + { openCamera(cat, splitChildItem, splitChildItemIndex, '2', skus) }}> + + : (Image1 != '' || Image1 != null) ? + { OpenImgModal(Image1, cat, splitChildItem, splitChildItemIndex, '2', skus) }}> + + : null + } + + ); + }) + } + + + + } + + {SOSChildTotalFacing == true && + + + + {SOSChildTotalFacingLable} + + + + { inputRefs.current['input1_' + cat.SOSHeaderValue + '_' + skus.SOSChildValue] = reff; }} + style={[customStyle.SOSInputStyle, EStyle_ChildTotal]} + placeholder="" + autoComplete='off' + placeholderTextColor={PageTheme.$placeholder_color} + value={(TotalFacing + '')} + keyboardType='numeric' + returnKeyType={(Platform.OS === 'ios') ? 'done' : 'next'} + editable={!isSaveDisabled} + blurOnSubmit={false} + onSubmitEditing={() => { focusToNext(cat, catIndex, skus, sku_index, "CHILD1") }} + onChangeText={(val) => { onStockValChange(cat, skus, val, 'TotalFacing', decimalAllow) }} + /> + + + } + {SOSChildSelfFacing == true && + + + + {SOSChildSelfFacingLable} + + + { inputRefs.current['input2_' + cat.SOSHeaderValue + '_' + skus.SOSChildValue] = reff; }} + placeholder="" + autoComplete='off' + placeholderTextColor={PageTheme.$placeholder_color} + value={(SelfFacing + '')} + keyboardType='numeric' + returnKeyType={(Platform.OS === 'ios') ? 'done' : 'next'} + editable={!isSaveDisabled} + blurOnSubmit={false} + onSubmitEditing={() => { focusToNext(cat, catIndex, skus, sku_index, "CHILD2") }} + onChangeText={(val) => { onStockValChange(cat, skus, val, 'SelfFacing', decimalAllow) }} + /> + + + } + + + + ) + }} /> + + + + + + ); + }} + /> + + + ) + } + + function _renderBtns() { + + let isUploadDisabled = isDataUploaded == 'U'; + let isSaveDisabled = (isDataUploaded == 'U' || isDataUploaded == 'P'); + + let colors1 = (isUploadDisabled ? [PageTheme.$tertiary_color, PageTheme.$tertiary_color] : [PageTheme.$secondary_color_light, PageTheme.$gradient2, PageTheme.$primary_color]); + let colors2 = (isSaveDisabled ? [PageTheme.$tertiary_color, PageTheme.$tertiary_color] : [PageTheme.$secondary_color_light, PageTheme.$gradient2, PageTheme.$primary_color]); + + return ( + + { onSubmitData() }} /> + + + ) + } + + + return ( + + {processing && } + + {_OpenCaptureImage_Modal()} + {_render_Alert()} + {_render_RetakePopup()} + {_render_UploadAlert()} + { UpdateShowCameraRef(false); getImage(imgData) }} showCamera={showCamera} onHideCamera={() => { UpdateShowCameraRef(false); }} /> + + + + + {Object.keys(storeData).length > 0 && + _renderSOSList() + } + + {_renderBtns()} + + + + {/* {show_zoomImage && + + null} + /> + + } */} + + {show_zoomImage2 && + + { return _renderHeader(currentIndex, zoomImageUrl2) }} renderIndicator={() => null} + /> + + } + + ); +} + + +export default connect(mapStateToProps, mapDispatchToProps)(ShareOfShelfOneAppIR); \ No newline at end of file diff --git a/PerformicsSrc/src/screens/ShareOfShelfOneAppIR_Only.js b/PerformicsSrc/src/screens/ShareOfShelfOneAppIR_Only.js new file mode 100644 index 0000000..0cc067f --- /dev/null +++ b/PerformicsSrc/src/screens/ShareOfShelfOneAppIR_Only.js @@ -0,0 +1,2241 @@ + +import React,{useState,useEffect, useRef} from 'react'; +import Container from '../components/container'; +import { useRoute } from '@react-navigation/native'; +import { globalStyles,customStyles,GetPageTheme } from "../styles/Global"; +import {StatusBar,Image,TextInput,View,Text,ScrollView,TouchableOpacity,Platform,PermissionsAndroid,FlatList, Alert, KeyboardAvoidingView, AppState,DeviceEventEmitter, Keyboard} from 'react-native'; +import { ReactReduxContext,connect,useSelector, useDispatch } from 'react-redux'; +import { mapStateToProps,mapDispatchToProps } from '../reducers/contextProvider'; +import SQLite from 'react-native-sqlite-2'; +import {notify} from '../components/notify'; +import moment from 'moment'; +import {getDownloadJson,getKPIFields,marktext1,marktext2, UploadData2, validateNumber} from '../controller/functions'; +import {get_item,set_item,clear_item} from '../components/localStorage'; +import {version,sloganline,appname,testurl,db, colors_Arr, common_ImagePath,ImageFolderPath,} from '../constants/constants'; +import CustomHeader from '../components/customHeader'; +import {Card, Menu, Switch} from 'react-native-paper'; +import {AntDesign, Entypo, FontAwesome, MaterialCommunityIcons} from '../components/icons'; +import { stat } from 'react-native-fs'; +import CustomLoader from '../components/CustomLoader'; +import LinearGradient from 'react-native-linear-gradient'; +import { AppTables } from '../constants/tableConstants'; +import { SvgXml } from 'react-native-svg'; +import {launchCamera, launchImageLibrary,CameraOptions} from 'react-native-image-picker'; +import * as RNFS from 'react-native-fs'; +import GradientButton from '../components/gradientButton'; + +import cameraImg from '../assets/performics/camera_icon.svg' +import cameraImg2 from '../assets/performics/camera_front_image.svg' +import addImg from '../assets/performics/add_image.svg'; +import CustomModal from '../components/CustomModal'; +import { Q_getdefaltShareofSelf } from '../constants/ConstantQueries'; +import CustomCamera from '../components/Camera'; +import IRLogin from '../components/IRLogin'; +import ImageViewer from 'react-native-image-zoom-viewer'; +import { getMethodName, METHODS } from '../constants/methodNames'; + +import CameraImg3 from '../assets/performics/camera_tick.svg'; +import CameraImg2 from '../assets/performics/camera_icon.svg'; +import CameraImg4 from '../assets/performics/camera_asterisk.svg'; +import CameraImg5 from '../assets/image/astrickcamera.svg'; +import { SyncIRsessionsInKPI } from '../constants/uploadData'; + +function ShareOfShelfOneAppIR_Only(props) { + const route = useRoute(); + const ST=props.StaticText || {}; + // get all theme styles acc to current theme set + const PageTheme=GetPageTheme(props.DarkMode,route.name); + const customStyle=customStyles(props.DarkMode,route.name); + + const [processing, setProcessing] = useState(true); + const [loaderTitle, setLoaderTitle] = useState('loading...'); + const [isAdhocScreen, setIsAdhocScreen] = useState(false); + const [storeData, setStoreData] = useState({}); + const [StoreCameraAllow, setStoreCameraAllow] = useState(true); + const [currentMenu, setCurrentMenu] = useState({}); + const [brandData, setBrandData] = useState([]); + const [rerenderdata, setrerenderdata]= useState(0); + const [rerenderdata2, setrerenderdata2]= useState(0); + const [rerenderdata3, setrerenderdata3]= useState(0); + const [rerenderdata4, setrerenderdata4]= useState(0); + + + const [SOSStockData, setSOSStockData] = useState([]); + // const [SOSIRImages, setSOSIRImages] = useState([]); + // const [GbTempSessionId, setGbTempSessionId] = useState(""); + const SOSIRImages=useRef([]); + const GbTempSessionId=useRef(""); + const GbTempSessionObj=useRef({}); + const [AllSOSData, setAllSOSData] = useState([]); + const [showAlert, setShowAlert] = useState(false); + const [showUploadAlert, setshowUploadAlert] = useState(false); + const [hasUnsavedChanges,setHasUnsavedChanges] = useState(false); + const [showCamera, setShowCamera] = useState(false); + const showCameraRef = useRef(false); + const [getImageProps,setGetImageProps]= useState({}); + const [KPIFields, setKPIFields] = useState([]); + const [GridValue, setGridValue] = useState(false); + + const [show_zoomImage, setShow_zoomImage] = useState(false); + const [show_zoomImage2, setShow_zoomImage2] = useState(false); + const Show_zoomImageRef=useRef(false); + const Show_zoomImageRef2=useRef(false); + const [zoomImageUrl, setZoomImageUrl] = useState([]); + const [zoomImageUrl2, setZoomImageUrl2] = useState([]); + const [refImageIndex, setrefImageIndex] = useState(0); + const [refImageIndex2, setrefImageIndex2] = useState(0); + const zoomView=useRef(null); + const zoomView2=useRef(null); + + const [showRetakeModal, setshowRetakeModal] = useState(false); + const [retakeMData, setretakeMData] = useState({}); + + const [isDataExists, setisDataExists] = useState(false); + const [isDataUploaded, setisDataUploaded] = useState("N"); + const sessionsToUpload = useRef([]); + const sessionsToUploadDetails = useRef([]); + const sessionsUploadedCount = useRef(0); + const sessionsReceived = useRef(0); + + const [SelectedImg, setSelectedImg] = useState(''); + const [showModal, setShowModal] = useState(false); + const [reCapImgModalObj, setReCapImgModalObj] = useState({}); + const [showImageSaveOp, setShowImageSaveOp] = useState(true); + const [ImgMadCount, setImgMadCount] = useState({img1:0,img2:0}); + const [windIRParams, setWindIRParams] = useState({}); + + const hasUnsavedChangesRef = React.useRef(hasUnsavedChanges); + const WindowDataRef=React.useRef(SOSStockData); + const StoreIdRef=React.useRef(null); + const ScreenNameRef=React.useRef(''); + + // error field states + const [errorfield, setErrorField] = useState({}); + const [error, setError] = useState(false); + + const inputRefs = useRef({}); + + const d1=new Date(); + const d2=moment(d1).format('MM/DD/YYYY'); + + + + useEffect(() => { + let params=props.route.params? props.route.params:{}; + let storeData1=params.storeData || {}; + let menu1=params.menu || {}; + let cameraAllow=storeData1.CameraAllow=='true' || storeData1.CameraAllow==1?true:false; + console.log('storeData1.CameraAllow:',storeData1); + setStoreCameraAllow(cameraAllow); + + let isAdhoc=params.isAdhoc || false; + setIsAdhocScreen(isAdhoc); + setStoreData(storeData1); + setCurrentMenu(menu1); + + StoreIdRef.current=storeData1.StoreId + ScreenNameRef.current=menu1.ScreenName + + let IR_Creds=props.IR_Creds!=null && props.IR_Creds!=""?JSON.parse(props.IR_Creds):[]; + let IR_CredsObj=IR_Creds.length>0?IR_Creds[0]:{}; + let SOS_IRCreds=IR_CredsObj.ShareOfShelf!=null && IR_CredsObj.ShareOfShelf.length>0?IR_CredsObj.ShareOfShelf[0]:{}; + setWindIRParams(SOS_IRCreds); + + getData(storeData1,menu1); + + const AppStateSubscription = AppState.addEventListener('change', (pro)=>{ _handleAppStateChange(pro)}); + const removeIRListener=DeviceEventEmitter.addListener('onIRImageUpload',(data)=>{ onIRImageUpload(data,storeData1,menu1)}); + const unsubscribe=props.navigation.addListener('beforeRemove', onBeforeRemove); + + return function cleanup() { + IRLogin.deRegisterReceiver(); + AppStateSubscription.remove(); + removeIRListener.remove(); + return unsubscribe; + }; + }, []); + + const _handleAppStateChange = async (nextAppState) => { + if(nextAppState =='background' && hasUnsavedChangesRef.current==true){ + let newData = { + storeBGData:WindowDataRef.current, + menuName:ScreenNameRef.current, + StoreId1:StoreIdRef.current, + bg_GbTempSessionId:GbTempSessionId.current, + bg_SOSIRImages:SOSIRImages.current, + visiteDate:d2 + } + let WindowsStr= await JSON.stringify(newData) + await set_item('storeData',WindowsStr); + } + } + + useEffect(() => { + const unsubscribe=props.navigation.addListener('beforeRemove', onBeforeRemove); + return unsubscribe; + }, [hasUnsavedChanges]); + + useEffect(() => { + const unsubscribe=props.navigation.addListener('beforeRemove', onBeforeRemove); + return unsubscribe; + }, [showCamera]); + + function BgUnsavedChanges(val){ + hasUnsavedChangesRef.current=val + setHasUnsavedChanges(val); + } + + function BgWindowData(val){ + WindowDataRef.current=val + setSOSStockData(val); + } + + function UpdateShowCameraRef(val){ + showCameraRef.current=val + setShowCamera(val); + } + + async function onIRImageUpload(data,storeData1,menu1){ + console.log('onIRImageUpload on receive',data); + let {message,sessionId,status}=data; + let snum=sessionsReceived.current+1; + let su_num=sessionsUploadedCount.current; + console.log('onreceive data',data); + sessionsReceived.current=snum; + let thisIR_SessObjIndex=sessionsToUploadDetails.current.findIndex(i=>i.TEMP_SESSION_ID==sessionId); + let thisIR_SessObj=sessionsToUploadDetails.current[thisIR_SessObjIndex]; + if(status!=null && status=='200' && sessionId!=null && sessionId!=''){ + + let UnSessionId=await IRLogin.getDataIRSession(sessionId); + if(UnSessionId!=null && UnSessionId!=''){ + sessionsUploadedCount.current=++su_num; + let isUpdated=await UpdateIRUploadStatus(storeData1,menu1,sessionId,UnSessionId); + let isUploaded=await LogImageUpload(storeData1,menu1,sessionId,UnSessionId,message,status,thisIR_SessObj); + console.log("su_num:",su_num); + if(isUploaded){ + console.log('Image Uploaded'); + notify("Images Log uploaded for session:"+sessionId); + } + else{ + console.log('cannot Uploaded image'); + notify("cannot upload log for session:"+sessionId); + } + + } + else{ + console.log('OnReceived UnSessionId get',UnSessionId); + notify("Cannot upload images for session:"+sessionId+". Universal Id not found"); + let isUploaded=await LogImageUpload(storeData1,menu1,sessionId,"",message,status,thisIR_SessObj); + if(isUploaded){ + console.log('Image Uploaded'); + notify("Images Log uploaded for session:"+sessionId); + } + else{ + console.log('cannot Uploaded image'); + notify("cannot upload log for session:"+sessionId); + } + + } + + } + else{ + console.log('Cannot get OnReceived UnSessionId'); + notify((message!=null && message!=""?message+". ":"")+"Cannot upload images for session:"+sessionId); + let isUploaded=await LogImageUpload(storeData1,menu1,sessionId,"",message,status,thisIR_SessObj); + if(isUploaded){ + console.log('Image Uploaded'); + notify("Images Log uploaded for session:"+sessionId); + } + else{ + console.log('cannot Uploaded image'); + notify("cannot upload log for session:"+sessionId); + } + + + } + + console.log("check snum and su_num:",snum,su_num,sessionsToUpload.current.length); + // if last broadcast received either uploaded or not update the processing status to false + if(snum==sessionsToUpload.current.length){ + setProcessing(false); + console.log('Deregister event when last received'); + IRLogin.deRegisterReceiver(); + } + + // All IR Sessions with Images Uploaded : set DataUploaded Status to U (Fully Upload) + if(su_num==sessionsToUpload.current.length){ + setisDataUploaded("U"); + setProcessing(false); + notify("All IR images uploaded!"); + console.log('set all uploaded true to U'); + } + // Some Of IR Sessions with Images Uploaded but some are yet pending : set DataUploaded Status to P (Partial Upload) + else if(su_num>0 && su_num!=sessionsToUpload.current.length){ + // setProcessing(false); + setisDataUploaded("P"); + notify("Some IR Images are still not uploaded!"); + console.log('set all uploaded true to P'); + } + } + + + + function onBeforeRemove(e){ + if(showCameraRef.current==true){ + e.preventDefault(); + UpdateShowCameraRef(false); + } + else if(Show_zoomImageRef.current==true || Show_zoomImageRef2.current==true){ + e.preventDefault(); + UpdateShow_zoomImageRef(false); + UpdateShow_zoomImageRef2(false); + } + else{ + console.log('hasUnsavedChanges:',hasUnsavedChanges); + if (hasUnsavedChangesRef.current==true) { + console.log('hasUnsavedChanges is true'); + e.preventDefault(); // Prevent default behavior of leaving the screen + onRemoveScreen(e); + } + else{ + return; + } + } + } + + function UpdateShow_zoomImageRef(val){ + Show_zoomImageRef.current=val + setShow_zoomImage(val); + } + + function UpdateShow_zoomImageRef2(val){ + Show_zoomImageRef2.current=val + setShow_zoomImage2(val); + } + + function onRemoveScreen(e){ + Alert.alert( + "", + "Do you really want to exit the screen?", + [ + { + text: "Cancel", + onPress: () => {}, + style: "cancel" + }, + { text: "OK", onPress: async () => { + // setHasUnsavedChanges(false); + BgUnsavedChanges(false) + await clear_item('storeData') + props.navigation.dispatch(e.data.action);} } + ] + ); + } + + async function getData(storeData1,menu1){ + try { + let {StoreId,ChainId,StateId,StoreTypeId}=storeData1; + + + let AllKPIFields=await getKPIFields(menu1); + setKPIFields(AllKPIFields); + + let sosCheckAssortmentI=AllKPIFields.findIndex(i=>i.KPIFieldName=='SOSCheckAssortment') + let sosCheckAssortmentObj=sosCheckAssortmentI>=0?AllKPIFields[sosCheckAssortmentI]:{}; + let sosCheckAssortment=sosCheckAssortmentI>=0?sosCheckAssortmentObj['KPIFieldEnable']:false; + + let sosMSLOnlyI=AllKPIFields.findIndex(i=>i.KPIFieldName=='SOSMSLOnly') + let sosMSLOnlyObj=sosMSLOnlyI>=0?AllKPIFields[sosMSLOnlyI]:{}; + let sosMSLOnly=sosMSLOnlyI>=0?sosMSLOnlyObj['KPIFieldEnable']:false; + + let CameraIROnceOnlyIndex=AllKPIFields.findIndex(i=>i.KPIFieldName=='CameraIROnceOnly') + let CameraIROnceOnlyObj=CameraIROnceOnlyIndex>=0?AllKPIFields[CameraIROnceOnlyIndex]:{}; + let CameraIROnceOnly=CameraIROnceOnlyIndex>=0?CameraIROnceOnlyObj['KPIFieldEnable']:true; + + let AssortIds=sosCheckAssortment==true?await getAssortmentIds(storeData1,sosMSLOnly):''; + console.log('AssortIds:',sosCheckAssortment,sosMSLOnly,AssortIds); + + + await db.transaction(async function (txn) { + + // delete data + // let dq1=`delete from ${AppTables.SOS_HDR_DATA}` + // await txn.executeSql(dq1,[],async function (txn2, txnres) { + // console.log('data removed SOS_HDR_DATA'); + // },function (txnE,txnerr) { console.log(txnerr); },); + + // let dq2=`delete from ${AppTables.SOS_CHILD_DATA}` + // await txn.executeSql(dq2,[],async function (txn2, txnres) { + // console.log('data removed SOS_CHILD_DATA'); + // },function (txnE,txnerr) { console.log(txnerr); },); + + // let dq3=`delete from ${AppTables.SOS_IMAGES}` + // await txn.executeSql(dq3,[],async function (txn2, txnres) { + // console.log('data removed SOS_IMAGES'); + // },function (txnE,txnerr) { console.log(txnerr); },); + + // let dq4=`delete from ${AppTables.SOS_IR_IMAGES}` + // await txn.executeSql(dq4,[],async function (txn2, txnres) { + // console.log('data removed SOS_IR_IMAGES'); + // },function (txnE,txnerr) { console.log(txnerr); },); + + // let dq5=`delete from ${AppTables.SOS_IRUPLOAD}` + // let dq5=`Update ${AppTables.SOS_IRUPLOAD} set UN_SESSION_ID='',UPLOAD_STATUS='0',SYNC_STATUS='' where STORE_ID='${StoreId}' and VISIT_DATE='${d2}' `; + // await txn.executeSql(dq5,[],async function (txn2, txnres) { + // console.log('data removed SOS_IRUPLOAD'); + // },function (txnE,txnerr) { console.log(txnerr); },); + + let join1=` INNER JOIN Mapping_StoreShareOfShelf m on p.SOSDefinitionId=m.SOSDefinitionId `; + let selectlist1=` DISTINCT p.SOSDefinitionName,p.SOSHeaderTable,p.SOSHeaderField,p.SOSHeaderValue,p.HeaderName as HeaderName,p.SOSHeaderFacing,p.SOSHeaderFacingLable,p.SOSHeaderImage,p.SOSHeaderImageCount,p.SOSHeaderImageGrid`; + let q=`SELECT ${selectlist1} from Master_ShareOfShelfDefinition p ${join1} Where m.StoreId ='${StoreId}' + ${sosCheckAssortment==true?` and p.SOSHeaderValue in (${AssortIds}) `:''} + order by p.HeaderName `; + + + let selectlist2=` DISTINCT m.SOSDefinitionName,p.SOS_HEADER_ID as SOSHeaderId,m.SOSHeaderTable,m.SOSHeaderField,p.SOS_HDR_VALUE as SOSHeaderValue,p.HEADER_NAME as HeaderName,m.SOSHeaderFacing,m.SOSHeaderFacingLable,m.SOSHeaderImage,m.SOSHeaderImageCount,m.SOSHeaderImageGrid,p.SOS_HDR_FACING as SOSHdrFacing`; + let qIRSelect='',join5=''; + + if(!CameraIROnceOnly){ // If IR camera is shown for each window + join5=`Left outer join ${AppTables.SOS_IRUPLOAD} u on p.SOS_HDR_VALUE=u.SOS_HDR_VALUE and u.STORE_ID='${StoreId}' and u.TYPE='Header' and u.VISIT_DATE='${d2}' ` + qIRSelect=` ,u.TEMP_SESSION_ID as TempSessionId,u.UN_SESSION_ID as UploadSessionId,u.UPLOAD_STATUS as UploadStatus,u.SYNC_STATUS as SyncStatus,u.SESSION_STORECODE as Sess_StoreCode,u.SESSION_TASKNAME as Sess_TaskName,u.SESSION_CATNAME as Sess_CatName,u.SESSION_PHOTOTYPE as Sess_PhotoType`; + } + let join4=` INNER JOIN Master_ShareOfShelfDefinition m on p.SOS_HDR_VALUE=m.SOSHeaderValue `; + let q2=` SELECT ${selectlist2} ${qIRSelect} FROM ${AppTables.SOS_HDR_DATA} p ${join4} ${join5} WHERE p.STORE_ID='${StoreId}' and p.VISIT_DATE='${d2}' order by p.HEADER_NAME `; + + // console.log("q2:",q2); + let storeBGData1=[],bgStoreJson={}, isBGDataExists=false; + let windData = await get_item('storeData') + if(windData!=null && windData!=''){ + let StoreJson = await JSON.parse(windData) + let { storeBGData,menuName,StoreId1,visiteDate,bg_SOSIRImages,bg_GbTempSessionId }= StoreJson + + // Check if bg data exists for this Store and menu on today date + if(menuName == menu1.ScreenName && StoreId1== StoreId && visiteDate==d2){ + isBGDataExists=true; + + // Check if added sos data exists in bg data + if(storeBGData.length>0){ + storeBGData1=storeBGData; + bgStoreJson=StoreJson + // setSOSStockData(storeBGData); + BgUnsavedChanges(true) + BgWindowData(storeBGData) + } + + // Check if IR Images and session present in bg data + if(bg_GbTempSessionId!=null && bg_GbTempSessionId!='' && bg_SOSIRImages!=null && bg_SOSIRImages.length>0){ + SOSIRImages.current=bg_SOSIRImages; + GbTempSessionId.current=bg_GbTempSessionId; + } + } + + + } + console.log("isBGDataExists:",isBGDataExists,windData); + + await txn.executeSql(q2,[],async function (txn2, txnres) { + // console.log('soscats added:',txnres.rows.length); + + if(txnres.rows.length>0){ + let arr=[],allCats=[]; + for(var i=0;i0){ + let arr=[],allCats=[]; + for(var i=0;i{ + db.transaction(async function (txn) { + let q=` SELECT Distinct TEMP_SESSION_ID as TempSessionId,UN_SESSION_ID as UploadSessionId,UPLOAD_STATUS as UploadStatus,SYNC_STATUS as SyncStatus,SESSION_STORECODE as Sess_StoreCode,SESSION_TASKNAME as Sess_TaskName,SESSION_CATNAME as Sess_CatName,SESSION_PHOTOTYPE as Sess_PhotoType FROM ${AppTables.SOS_IRUPLOAD} where TYPE='Header' and STORE_ID='${StoreId}' and VISIT_DATE='${d2}' `; + await txn.executeSql(q,[],async function (txn2, txnres) { + if(txnres.rows.length>0){ + let isfullyUploaded=true; + //No Loop required, As For CameraIROnceOnly enabled condition only one TempSessionId will be genrated per KPI + let data =txnres.rows.item(0); + let {Sess_StoreCode,Sess_TaskName,Sess_CatName,Sess_PhotoType}=data; + if(data.UploadStatus=='1' && isDataUploaded!='P' && isDataUploaded!='U'){ + console.log('getUploadIRStatus success: U'); + // Stop Upload and Editing both when fully uploaded + setisDataUploaded("U"); + } + // setGbTempSessionId(data.TempSessionId); + GbTempSessionId.current=data.TempSessionId; + let obj={Sess_StoreCode,Sess_TaskName,Sess_CatName,Sess_PhotoType}; + GbTempSessionObj.current=obj; + resolve(true); + } + else{ + resolve(true); + } + },function (txnE,txnerr) { console.log(txnerr); resolve(false); },); + }); + }).catch((err)=>{ + return false; + }) + } + + + async function getAssortmentIds(storeData1={},sosMSLOnly=false){ + let {StoreId,ChainId,StateId,StoreTypeId,StoreClassId,StoreCategoryId}=storeData1; + let AllIds=[]; + return new Promise((resolve,reject)=>{ + db.transaction(async function (txn) { + let join1=` INNER JOIN Mapping_StoreShareOfShelf m on p.SOSDefinitionId=m.SOSDefinitionId `; + let q=`select Distinct p.SOSHeaderTable,p.SOSHeaderField from Master_ShareOfShelfDefinition p ${join1} Where m.StoreId ='${StoreId}' and p.SOSHeaderTable!='' and p.SOSHeaderTable is not null `; + await txn.executeSql(q,[],async function (txn2, txnres) { + if(txnres.rows.length>0){ + let data =txnres.rows.item(0); + let SOSHeaderTable=data['SOSHeaderTable']; + let SOSHeaderField=data['SOSHeaderField']; + + let join2=` INNER JOIN Mapping_ProductAssortmentStorewise mp on t1.ProductId=mp.ProductId `; + let q2=`select distinct t1.${SOSHeaderField} from Product_Master t1 ${join2} where mp.StoreId='${StoreId}' ${sosMSLOnly==true?` and (mp.MSL='true' or mp.MSL='1') `:''} `; + await txn.executeSql(q2,[],async function (txn2, txnres2) { + if(txnres2.rows.length>0){ + for(var i=0;i{ + return val; + }).catch((err)=>{ + console.log(err); + return ''; + }); + } + + async function getChildAssortmentIds(storeData1={},sosMSLOnly=false){ + let {StoreId,ChainId,StateId,StoreTypeId,StoreClassId,StoreCategoryId}=storeData1; + let AllIds=[]; + return new Promise((resolve,reject)=>{ + db.transaction(async function (txn) { + let join1=` INNER JOIN Mapping_StoreShareOfShelf m on p.SOSDefinitionId=m.SOSDefinitionId `; + let q=`select Distinct p.SOSChildTable,p.SOSChildField from Master_ShareOfShelfDefinition p ${join1} Where m.StoreId ='${StoreId}' and p.SOSChildTable!='' and p.SOSChildTable is not null `; + + await txn.executeSql(q,[],async function (txn2, txnres) { + if(txnres.rows.length>0){ + let data =txnres.rows.item(0); + let SOSChildTable=data['SOSChildTable']; + let SOSChildField=data['SOSChildField']; + + let join2=` INNER JOIN Mapping_ProductAssortmentStorewise mp on t1.ProductId=mp.ProductId `; + let q2=`select distinct t1.${SOSChildField} from Product_Master t1 ${join2} where mp.StoreId='${StoreId}' ${sosMSLOnly==true?` and (mp.MSL='true' or mp.MSL='1') `:''} `; + await txn.executeSql(q2,[],async function (txn2, txnres2) { + if(txnres2.rows.length>0){ + for(var i=0;i{ + return val; + }).catch((err)=>{ + console.log(err); + return ''; + }); + } + + + async function getHdrImages(storeData1,cat1,menu1){ + let allImages=[]; + let {StoreId} =storeData1; + let {SOSHeaderId} =cat1; + return new Promise((resolve,reject)=>{ + db.transaction(async function (txn) { + let q=` SELECT IMAGE1 as Image1 FROM ${AppTables.SOS_IMAGES} where SOS_HEADER_ID='${SOSHeaderId}' and TYPE='Header' and STORE_ID='${StoreId}' and VISIT_DATE='${d2}' `; + await txn.executeSql(q,[],async function (txn2, txnres) { + if(txnres.rows.length>0){ + for(var i=0;i{ + return allImages; + }) + } + + async function getHdrIRImages(storeData1,cat1,menu1,type="1"){ + + let res={allImages:[],zoomIRImages:[]} + let {StoreId} =storeData1; + let {SOSHeaderId} =cat1; + return new Promise((resolve,reject)=>{ + db.transaction(async function (txn) { + let q=` SELECT IMAGE1 as Image1 FROM ${AppTables.SOS_IR_IMAGES} where `; + if(type=='2'){ + // dont append SOSHeaderId condition + } + else{ + q+=` SOS_HEADER_ID='${SOSHeaderId}' and `; + } + q+=` TYPE='Header' and STORE_ID='${StoreId}' and VISIT_DATE='${d2}'`; + + await txn.executeSql(q,[],async function (txn2, txnres) { + if(txnres.rows.length>0){ + let arr=[],arr2=[]; + for(var i=0;i{ + return res; + }) + } + + async function getChilds(storeData1,cat1,menu1,sosMSLOnly=false,sosCheckAs=false){ + let defData={allChilds:[],childData:[]}; + let {StoreId} =storeData1; + let {SOSHeaderValue} =cat1; + // SOSChildValue + let childAssorted = await getChildAssortmentIds(storeData1,sosMSLOnly) + return new Promise((resolve,reject)=>{ + db.transaction(async function (txn) { + let selectlist=` p.SOSDefinitionId,p.SOSChildTable,p.SOSChildField,p.SOSChildValue,p.ChildName,p.SOSChildTotalFacing,p.SOSChildSelfFacing,p.SOSChildTotalFacingLable,p.SOSChildSelfFacingLable,p.SOSChildImage,p.SOSChildImageCount,p.SOSChildImageGrid`; + let join1=` INNER JOIN Mapping_StoreShareOfShelf m on p.SOSDefinitionId=m.SOSDefinitionId `; + let q=`SELECT ${selectlist} from Master_ShareOfShelfDefinition p ${join1} Where m.StoreId ='${StoreId}' and p.SOSHeaderValue='${SOSHeaderValue}' + ${sosCheckAs==true?` and p.SOSChildValue in (${childAssorted}) `:''} + order by p.ChildName `; + + let selectlist2=` m.SOSDefinitionId,m.SOSChildTable,m.SOSChildField,p.SOS_CHILD_VALUE as SOSChildValue,p.CHILD_NAME as ChildName,m.SOSChildTotalFacing,m.SOSChildSelfFacing,m.SOSChildTotalFacingLable,m.SOSChildSelfFacingLable,m.SOSChildImage,m.SOSChildImageCount,m.SOSChildImageGrid,p.TOTAL_FACING as TotalFacing,p.SELF_FACING as SelfFacing`; + // let join3=` INNER JOIN Mapping_StoreShareOfShelf mp on m.SOSDefinitionId=mp.SOSDefinitionId `; + let join4=` INNER JOIN Master_ShareOfShelfDefinition m on p.SOS_DEFINITION_ID=m.SOSDefinitionId `; + let q2=` SELECT ${selectlist2} FROM ${AppTables.SOS_CHILD_DATA} p ${join4} WHERE p.SOS_HDR_VALUE='${SOSHeaderValue}' and p.STORE_ID='${StoreId}' and p.VISIT_DATE='${d2}' order by p.CHILD_NAME `; + + + await txn.executeSql(q2,[],async function (txn2, txnres) { + console.log('sossubcats added',txnres.rows.length); + if(txnres.rows.length>0){ + let arr=[],arr2=[]; + for(var i=0;i0){ + let arr=[],arr2=[]; + for(var i=0;i{ + return defData; + }); + } + + async function getChildImages(storeData1,cat1,subcat1,menu1){ + let allImages=[]; + let {StoreId} =storeData1; + let {SOSHeaderId} =cat1; + let {SOSChildValue}=subcat1; + return new Promise((resolve,reject)=>{ + db.transaction(async function (txn) { + let q=` SELECT IMAGE1 as Image1 FROM ${AppTables.SOS_IMAGES} where SOS_HEADER_ID='${SOSHeaderId}' and SOS_CHILD_VALUE='${SOSChildValue}' and TYPE='Child' and STORE_ID='${StoreId}' and VISIT_DATE='${d2}' `; + await txn.executeSql(q,[],async function (txn2, txnres) { + if(txnres.rows.length>0){ + for(var i=0;i{ + return allImages; + }) + } + + async function getImage(imgdata){ + let type=getImageProps.type || ''; + let cat=getImageProps.cat || {}; + let splitItem=getImageProps.splitItem || {}; + let splitItemIndex=getImageProps.splitItemIndex || 0; + let skuItem=getImageProps.sku!=null?getImageProps.sku: {}; + + if(typeof imgdata=='object' && imgdata.errorCode=='camera_unavailable'){ + notify(ST.Cameraunavailable); + } + else if(typeof imgdata =='object' && imgdata.uri!=null){ + const img=imgdata; + const imgurl=img.uri, imgWidth=img.width, imgHeight=img.ExtendedHeight; + let isImgFromGallery=img.fromGallery!=null?img.fromGallery:false; + let picture_clickedd=isImgFromGallery==true?img.datetime:new Date(); + + let picture_clicked_time=moment(picture_clickedd).format('MM-DD-YYYY HH:mm:ss') + let picture_clicked_time_for_pic_name=moment(picture_clickedd).format('MMDDYYYY_HHmmss') + + console.log("time", picture_clicked_time); + console.log("time1", picture_clicked_time_for_pic_name); + let calculate_tym_date_for_filename = picture_clicked_time_for_pic_name; + let calculate_tym_date_over_img = picture_clicked_time; + + + const mark_text1=calculate_tym_date_over_img; + const mark_text2='Store Name:'+storeData.StoreName+' | Store Id:'+storeData.StoreId+' | User Id:'+storeData.EmpId+' | Image Type: Share Of Shelf - ('+cat.HeaderName+')'+' | Date:'+calculate_tym_date_over_img; + + + let filename=''; + if(type=='2'){ + filename=storeData.StoreId+'_'+cat.SOSHeaderValue+'_'+skuItem.SOSChildValue+'_'+splitItemIndex+'_'+(props.UserId || '')+'_SOSImg-'+calculate_tym_date_for_filename+'.jpg'; + } + else{ + filename=storeData.StoreId+'_'+cat.SOSHeaderValue+'_'+splitItemIndex+'_'+(props.UserId || '')+'_SOSImg-'+calculate_tym_date_for_filename+'.jpg'; + } + + + let allData=SOSStockData; + let defData={'SOSHeaderValue':cat.SOSHeaderValue,'Images':[],'SKUData':[]}; + const catDataIndex=allData.findIndex(i=>i.SOSHeaderValue==cat.SOSHeaderValue) ; + const catData=catDataIndex>=0?allData[catDataIndex]:{}; + + + if(type=='2'){ + var SKUData=catData['SKUData'] || []; + var childIndex=SKUData.findIndex(i=>i.SOSChildValue==skuItem.SOSChildValue) ; + var childData=childIndex>=0?SKUData[childIndex]:{}; + + var ChildImages=childData['ChildImages'] || []; + var image_key='Image1Name'; + var image_key_path='Image1'; + splitItem[image_key]=filename; + } + else{ + var HeaderImages=catData['Images'] || []; + var image_key='Image1Name'; + var image_key_path='Image1'; + splitItem[image_key]=filename; + } + + let imagePath=`${ImageFolderPath+currentMenu.ScreenName}/${filename}`; + + // file resized now rename file + RNFS.copyFile(imgurl, imagePath) + .then(async(resn) => { + // render data with clicked image + let uri='file://'+imagePath; + console.log('image marker:',uri); + setSelectedImg(uri) + + if(type=='2'){ + splitItem[image_key_path]=uri; + splitItemIndex>=0?ChildImages[splitItemIndex]=splitItem:ChildImages.push(splitItem); + childData['ChildImages']=ChildImages; + childIndex>=0?SKUData[childIndex]=childData:SKUData.push(childData); + + catData['SKUData']=SKUData; + catDataIndex>=0?allData[catDataIndex]=catData:allData.push(catData); + setSOSStockData(allData); + BgWindowData(allData) + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + else{ + console.log('Hdr split image updated'); + splitItem[image_key_path]=uri; + splitItemIndex>=0?HeaderImages[splitItemIndex]=splitItem:HeaderImages.push(splitItem); + catData['Images']=HeaderImages; + catDataIndex>=0?allData[catDataIndex]=catData:allData.push(catData); + // setSOSStockData(allData); + BgWindowData(allData) + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + + // add metdata then resize image and restored back to the imagePath + let restore_data={"destFilePath":imagePath,"imgurl":imgurl,imgWidth,imgHeight,mark_text1,mark_text2} + let is_restored=await restore_ImageWithMetaData(restore_data,imgdata); + console.log("image restored:",is_restored); + }) + .catch(err => { + console.log('ERROR: image file write failed!!!'); + console.log(err.message, err.code); + }); + } + } + + + async function openCamera(cat,splitItem,splitItemIndex,type='1',sku){ + setErrorField({}); + setError(false); + let GridAllow = type==='1' ? (window.SOSHeaderImageGrid === 'true' || window.SOSHeaderImageGrid==true || window.SOSHeaderImageGrid=='1'|| window.SOSHeaderImageGrid==1): (window.SOSChildImageGrid === 'true' || window.SOSChildImageGrid==true || window.SOSChildImageGrid=='1' || window.SOSChildImageGrid==1) + setGridValue(GridAllow); + setGetImageProps({'cat':cat,'splitItem':splitItem,'splitItemIndex':splitItemIndex,'type':type,'sku':sku}); + UpdateShowCameraRef(true); + } + async function StartCameraSession(cat,type='1',sku){ + setErrorField({}); + setError(false); + let IR_Creds=props.IR_Creds!=null && props.IR_Creds!=""?JSON.parse(props.IR_Creds):[]; + let IR_CredsObj=IR_Creds.length>0?IR_Creds[0]:{}; + + cat=cat!=null?cat:{}, + sku=sku!=null?sku:{}; + let newStdata=storeData; + if(IR_CredsObj.UseStoreCode!=1){ + newStdata.StoreCode=newStdata.StoreId; + } + let obj={"StoreData":newStdata}; + + + + // Option values for Perfetti paid visibility if IR shown in header only + // obj["category_name"]="multi"; + // obj["task_name"]="multi-shelf"; + // obj["photo_type"]="shelf"; + + + + if(type=='1' && windIRParams.category_name=='AsDefined'){ // if IR Camera is present for each category + let {SOSDefinitionName}=cat; + console.log("SOSDefinitionName:",SOSDefinitionName); + obj["category_name"]=SOSDefinitionName || ''; + obj["task_name"]=SOSDefinitionName || ''; + obj["photo_type"]=windIRParams.photo_type || ''; + } + else{ // if IR Camera is present only in header + obj["category_name"]=windIRParams.category_name || ''; + obj["task_name"]=windIRParams.task_name || ''; + obj["photo_type"]=windIRParams.photo_type || ''; + } + let st1=JSON.stringify(obj); + + //storeData,cat,type,sku + console.log("ir camera obj:",obj.category_name,obj.task_name,obj.photo_type,newStdata.StoreCode); + let TempSessionId= await IRLogin.StartIRSession(st1);//"8099b819-0979-40d2-950e-489566041484";// + console.log('TempSessionId :',TempSessionId,newStdata.StoreCode); + if(TempSessionId!=null){ + setLoaderTitle('Processing Image...'); + setProcessing(true); + let IRCamImages=await IRLogin.getImageURIFromIRSession(TempSessionId); + // let imgObj=Images[Images.length-1]; + + console.log('Images from session :',IRCamImages); + + if(type=='2'){ + // setGbTempSessionId(TempSessionId); + GbTempSessionId.current=TempSessionId; + let sessObj={} + sessObj['Sess_StoreCode'] =newStdata.StoreCode; + sessObj['Sess_TaskName'] =obj["task_name"]; + sessObj['Sess_CatName'] =obj["category_name"]; + sessObj['Sess_PhotoType'] =obj["photo_type"]; + // setSOSIRImages(IRCamImages); + GbTempSessionObj.current=sessObj; + SOSIRImages.current=IRCamImages; + setIRZoomImages(IRCamImages); + } + else{ + let zoomIRImages=await getIRZoomImages(IRCamImages) + console.log("getIRZoomImages res:",zoomIRImages); + + let allData=SOSStockData; + let defData={'SOSHeaderValue':cat.SOSHeaderValue,'SOSHdrFacing':'','Images':[],'IRImages':[],'SKUData':[]}; + const catDataIndex=allData.findIndex(i=>i.SOSHeaderValue==cat.SOSHeaderValue) ; + const catData=catDataIndex>=0?allData[catDataIndex]:defData; + catData['IRImages'] =IRCamImages; + catData['zoomIRImages'] =zoomIRImages; + catData['TempSessionId'] =TempSessionId; + catData['Sess_StoreCode'] =newStdata.StoreCode; + catData['Sess_TaskName'] =obj["task_name"]; + catData['Sess_CatName'] =obj["category_name"]; + catData['Sess_PhotoType'] =obj["photo_type"]; + catDataIndex>=0?allData[catDataIndex]=catData:allData.push(catData); + console.log("allData:",allData); + setSOSStockData(allData); + } + + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + + // stop image processing loader after all images get from sessionID + setProcessing(false); + setLoaderTitle('loading...'); + + } + else{ + notify('Cannot capture images as getting Session Null.'); + } + + } + + + async function ResumeCameraSession(cat,type='1',sku){ + cat=cat!=null?cat:{}, + sku=sku!=null?sku:{}; + + let allData=SOSStockData; + let defData={'SOSHeaderValue':cat.SOSHeaderValue,'SOSHdrFacing':'','Images':[],'IRImages':[],'SKUData':[]}; + const catDataIndex=allData.findIndex(i=>i.SOSHeaderValue==cat.SOSHeaderValue) ; + const catData=catDataIndex>=0?allData[catDataIndex]:defData; + + //storeData,cat,type,sku + let TempSessionId=""; + if(type=='2'){ + TempSessionId= GbTempSessionId.current; + } + else{ + TempSessionId= catData.TempSessionId; + } + console.log('TempSessionId of cat :',TempSessionId); + if(TempSessionId!=null){ + setLoaderTitle('Processing Image...'); + setProcessing(true); + let retTempSessionId=await IRLogin.ResumeIRSession(TempSessionId);//"8099b819-0979-40d2-950e-489566041484";// + console.log('retTempSessionId :',retTempSessionId); + if(retTempSessionId!=null){ + // start fetching images after capturing photos + + + let IRCamImages=await IRLogin.getImageURIFromIRSession(TempSessionId); + console.log('Images from session :',IRCamImages); + + if(type=='2'){ + // setSOSIRImages(IRCamImages); + SOSIRImages.current=IRCamImages; + setIRZoomImages(IRCamImages); + } + else{ + let zoomIRImages=await getIRZoomImages(IRCamImages) + catData['IRImages'] =IRCamImages; + catData['zoomIRImages'] =zoomIRImages; + catDataIndex>=0?allData[catDataIndex]=catData:allData.push(catData); + console.log("allData2:",allData); + setSOSStockData(allData); + } + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + + // stop image processing loader after all images get from sessionID + setProcessing(false); + setLoaderTitle('loading...'); + } + else{ + notify('Cannot capture images as getting Session Null.'); + } + + } + else{ + notify('Cannot capture images as getting Session Null.'); + } + + } + + async function DeleteIRPhoto(){ + console.log('DeleteIRPhoto called'); + setshowRetakeModal(false); + let {cat,type,IRImgIndex,IRimgPath}= retakeMData; + cat=cat!=null?cat:{}, + type=type!=null?type:'1'; + IRImgIndex=IRImgIndex!=null?IRImgIndex:''; + IRimgPath=IRimgPath!=null?IRimgPath:''; + + + let allData=SOSStockData; + let defData={'SOSHeaderValue':cat.SOSHeaderValue,'SOSHdrFacing':'','Images':[],'IRImages':[],'SKUData':[]}; + const catDataIndex=allData.findIndex(i=>i.SOSHeaderValue==cat.SOSHeaderValue) ; + const catData=catDataIndex>=0?allData[catDataIndex]:defData; + + let TempSessionId=""; + console.log("type:",type,GbTempSessionId.current); + if(type=='2'){ + TempSessionId=GbTempSessionId.current; + } + else{ + TempSessionId=catData['TempSessionId']; + } + + // let st1=JSON.stringify(storeData); + //storeData,cat,type,sku + console.log('DeleteIRPhoto sessionID :',TempSessionId); + if(TempSessionId!=null || TempSessionId!=''){ + setLoaderTitle('Removing Image...'); + setProcessing(true); + let isDeleted= await IRLogin.DeleteIRSessionPhoto(TempSessionId,IRimgPath);//"8099b819-0979-40d2-950e-489566041484";// + console.log('DeleteIRPhoto isDeleted :',isDeleted); + if(isDeleted){ + setLoaderTitle('Processing Image...'); + + let IRCamImages=await IRLogin.getImageURIFromIRSession(TempSessionId); + console.log('Deleted, Images from session :',IRCamImages); + if(type=='2'){ + // setSOSIRImages(IRCamImages); + SOSIRImages.current=IRCamImages; + setIRZoomImages(IRCamImages); + } + else{ + let zoomIRImages=await getIRZoomImages(IRCamImages) + catData['IRImages'] =IRCamImages; + catData['zoomIRImages'] =zoomIRImages; + catDataIndex>=0?allData[catDataIndex]=catData:allData.push(catData); + setSOSStockData(allData); + } + + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + + // stop image processing loader after all images get from sessionID + setProcessing(false); + setLoaderTitle('loading...'); + + } + else{ + notify('Cannot delete photo!.'); + } + + } + else{ + notify('Cannot delete photo! Found Null Session.'); + } + + } + + async function RetakeIRPhoto(){ + setshowRetakeModal(false); + let {cat,type,IRImgIndex,IRimgPath}= retakeMData; + cat=cat!=null?cat:{}, + type=type!=null?type:'1'; + IRImgIndex=IRImgIndex!=null?IRImgIndex:''; + IRimgPath=IRimgPath!=null?IRimgPath:''; + + + let allData=SOSStockData; + let defData={'SOSHeaderValue':cat.SOSHeaderValue,'SOSHdrFacing':'','Images':[],'IRImages':[],'SKUData':[]}; + const catDataIndex=allData.findIndex(i=>i.SOSHeaderValue==cat.SOSHeaderValue) ; + const catData=catDataIndex>=0?allData[catDataIndex]:defData; + + let TempSessionId=""; + if(type=='2'){ + TempSessionId=GbTempSessionId.current; + } + else{ + TempSessionId=catData['TempSessionId']; + } + + + // let st1=JSON.stringify(storeData); + //storeData,cat,type,sku + console.log('Retake sessionID :',TempSessionId); + if(TempSessionId!=null || TempSessionId!=''){ + setLoaderTitle('Processing Image...'); + setProcessing(true); + let isRetakeDone= await IRLogin.RetakeIRSessionPhoto(TempSessionId,IRimgPath);//"8099b819-0979-40d2-950e-489566041484";// + console.log('Retake isRetakeDone :',isRetakeDone); + if(isRetakeDone){ + setTimeout(async ()=>{ + let IRCamImages=await IRLogin.getImageURIFromIRSession(TempSessionId); + console.log('Retake Images from session :',IRCamImages); + if(type=='2'){ + // setSOSIRImages(IRCamImages); + SOSIRImages.current=IRCamImages; + setIRZoomImages(IRCamImages); + } + else{ + let zoomIRImages=await getIRZoomImages(IRCamImages) + catData['IRImages'] =IRCamImages; + catData['zoomIRImages'] =zoomIRImages; + catDataIndex>=0?allData[catDataIndex]=catData:allData.push(catData); + setSOSStockData(allData); + } + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + + // stop image processing loader after all images get from sessionID + setProcessing(false); + setLoaderTitle('loading...'); + },1000); + } + else{ + notify('Error occur while retaking photo!.'); + } + + } + else{ + notify('Cannot start camera! Found Null Session.'); + } + + } + // Start Upload for IR images + async function UploadIRSessions(){ + setshowUploadAlert(false); + sessionsToUpload.current=[]; + sessionsReceived.current=0; + sessionsUploadedCount.current=0; + + try{ + let {StoreId}=storeData; + setLoaderTitle('Uploading Images...'); + setProcessing(true); + + // Global Upload function + // Sync Status for IR images + // From Infilect SDK 1.3.6 - The Images are uploading on realtime bases i.e. As the images are clicked by user the Images are getting uploaded to infilect server. + // In this case call below func to check the status of images that is already being uploaded by Real Time processing + let sync_result=await SyncIRsessionsInKPI(props,storeData,AppTables.SOS_IRUPLOAD,AppTables.SOS_IR_IMAGES); + let {isUploadStarted,AllDataUploaded,noDataFound,success,sessionList,sessionListWithDetails}=sync_result; + console.log("Sync Resp sync_result:",sync_result); + if(!success){ + notify('Cannot Upload Data! Something went wrong.'); + setProcessing(false); + } + else{ + if(noDataFound){ + notify('No session to upload!'); + setisDataUploaded('U'); + setProcessing(false); + } + else{ + if(!isUploadStarted && AllDataUploaded){ + notify('All images synced! No session to upload.'); + setisDataUploaded('U'); + setProcessing(false); + }else if(isUploadStarted){ + sessionsToUpload.current=sessionList; + sessionsToUploadDetails.current=sessionListWithDetails; + } + } + } + + }catch(e){ + console.log('Uploading Issue:',e); + setProcessing(false); + } + + + } + + async function UpdateIRUploadStatus(storeData1,menu1,TempSessionId,UnSessionId){ + console.log('UpdateIRUploadStatus'); + return new Promise((resolve,reject)=>{ + + let {StoreId,ChainId,StateId,StoreTypeId}=storeData1; + db.transaction(async function (txn) { + // update upload status and sync status here : when files are uploaded and we have got the universal session id for that + let q=`Update ${AppTables.SOS_IRUPLOAD} set UN_SESSION_ID='${UnSessionId}',UPLOAD_STATUS='1',SYNC_STATUS='Synced' where STORE_ID='${StoreId}' and VISIT_DATE='${d2}' and TEMP_SESSION_ID='${TempSessionId}' `; + // console.log("update IR Upload q:",q); + await txn.executeSql(q,[],async function (txn2, txnres) { + console.log('Updated IR Upload Status'); + // console.log("update IR Upload q2:",q2); + let q2=`Update ${AppTables.SOS_IR_IMAGES} set UN_SESSION_ID='${UnSessionId}' where STORE_ID='${StoreId}' and VISIT_DATE='${d2}' and TEMP_SESSION_ID='${TempSessionId}' `; + await txn.executeSql(q2,[],async function (txn2, txnres2) { + console.log('Updated IR Upload Images Status'); + resolve(true); + },function (txnE,txnerr) { console.log(txnerr);resolve(false); },); + + },function (txnE,txnerr) { console.log(txnerr);resolve(false); },); + }); + }).catch((Err)=>{ + console.log('Error in UpdateIRUploadStatus:',Err); + return false; + }) + + + + } + + async function LogImageUpload(storeData1,menu1,TempSessionId,UnSessionId,message,status,thisIR_SessObj={}){ + let {StoreId,StoreName}=storeData1; + const url=props.baseurl+getMethodName(METHODS.UPLOADJSON_METHOD); + const nowTime=moment().format('HH:mm:ss'); + let ImageCount=await getImageCount(storeData1,menu1,TempSessionId); + let {SESSION_STORECODE,SESSION_TASKNAME,SESSION_CATNAME,SESSION_PHOTOTYPE}=thisIR_SessObj; + + ////Replaced special charecter and white space + let storeTittle = StoreName.replace(`@!%&`, '').replace(' ', '-'); + console.log("storeTittle:",storeTittle,StoreName); + + let obj={}; + obj['StoreId']=StoreId; + obj['Username']=props.UserId; + obj['VisitDate']=d2; + obj['InTime']=nowTime; + obj['TempSessionId']=TempSessionId; + obj['UnSessionId']=UnSessionId; + obj['Status']=status; + obj['Message']=message; + obj['ImageCount']=ImageCount; + obj['StoreTitle']=storeTittle; + obj['StoreCode']=SESSION_STORECODE; + obj['TaskName']=SESSION_TASKNAME; + obj['CategoryName']=SESSION_CATNAME; + obj['PhotoType']=SESSION_PHOTOTYPE; + obj['KPIType']=currentMenu.MenuName; + obj['ScreenName']=currentMenu.ScreenName; + obj['UploadType']="New"; + + + let postData={}; + postData['MID']=0; + postData['Keys']='IR_UPLOAD_LOG_MSG'; + postData['JsonData']=JSON.stringify(obj); + postData['UserId']=props.UserId; + + console.log('postData',postData); + + return await UploadData2(url,postData) + .then((res)=>{ + if(res.UploadJsonResult!=null && res.UploadJsonResult=='Success'){ + return true; + } + return false; + }) + .catch((err)=>{ + console.log(err); + return false; + }); + } + + async function getImageCount(storeData1,menu1,TempSessionId){ + let {StoreId,ChainId,StateId,StoreTypeId}=storeData1; + console.log('storeData in getImageCount',storeData1); + return new Promise((resolve,reject)=>{ + + + db.transaction(async function (txn) { + + let q=`select DISTINCT TEMP_SESSION_ID,count(IMAGE1) as ImageCount from ${AppTables.SOS_IR_IMAGES} where STORE_ID='${StoreId}' and VISIT_DATE='${d2}' and TEMP_SESSION_ID='${TempSessionId}' group by TEMP_SESSION_ID `; + console.log('q',q); + await txn.executeSql(q,[],async function (txn2, txnres) { + console.log('ImageCount rows:',txnres.rows.length); + if(txnres.rows.length>0){ + let data =txnres.rows.item(0); + console.log('data:',data) + console.log('Image Count for TempSessionId:',data.ImageCount); + resolve(data.ImageCount); + } + else{ + resolve(0); + } + + },function (txnE,txnerr) { console.log(txnerr);resolve(0); },); + }); + }).catch((Err)=>{ + console.log('Error in getImageCount:',Err); + return 0; + }) + + + + } + + + async function onFocusChange(cat,sku,inputType='1'){ + let d={'catId':cat.SOSHeaderValue,'subcatId':sku.SubSOSHeaderValue,'inputType':inputType}; + console.log(d); + setCurrentFocusedData(d); + } + + async function focusToNext(cat,catIndex,skus,sku_index,type='HEADER'){ + + let activeKey=''; + let arr=Object.keys(inputRefs.current); + + if(type=='HEADER'){ + activeKey='input_'+cat.SOSHeaderValue; + } + else if(type=="CHILD1"){ + activeKey='input1_'+cat.SOSHeaderValue+'_'+skus.SOSChildValue; + }else if(type=="CHILD2" ){ + activeKey='input2_'+cat.SOSHeaderValue+'_'+skus.SOSChildValue; + } + + let activeIndex=arr.indexOf(activeKey); + if(activeIndexi.KPIFieldName=='CameraIROnceOnly') + let CameraIROnceOnlyObj=CameraIROnceOnlyIndex>=0?KPIFields[CameraIROnceOnlyIndex]:{}; + let CameraIROnceOnly=CameraIROnceOnlyIndex>=0?CameraIROnceOnlyObj['KPIFieldEnable']:true; + + + await db.transaction(async function (txn) { + var values='',stock_values='',images_values='',IRimages_values='',IRsessions=''; + + for(var i=0;ii.SOSHeaderValue==item.SOSHeaderValue); + const cobj=cindex>=0?SOSStockData[cindex]:{}; + const HeaderImages=cobj['Images'] || [] ; + let SOSHdrFacing="0"; + let CatIRImages=cobj['IRImages']!=null?cobj['IRImages'] : [] ; + let TempSessionId= cobj.TempSessionId!=null?cobj.TempSessionId:''; + let Sess_StoreCode=cobj.Sess_StoreCode!=null?cobj.Sess_StoreCode:''; + let Sess_TaskName=cobj.Sess_TaskName!=null?cobj.Sess_TaskName:''; + let Sess_CatName=cobj.Sess_CatName!=null?cobj.Sess_CatName:''; + let Sess_PhotoType=cobj.Sess_PhotoType!=null?cobj.Sess_PhotoType:''; + + let this_SKUData=cobj['SKUData'] || []; + + values+=values!=''?' , ':''; + values+=` ('${SOSHeaderId}','${StoreId}','${d2}','${SOSHeaderTable}','${SOSHeaderField}','${SOSHeaderValue}','${HeaderName}','${SOSHdrFacing}','${d2}') `; + + // Add IR session upload status for each category + if(!CameraIROnceOnly){ + IRsessions+=IRsessions!=''?' , ':''; + IRsessions+=` ('${SOSHeaderId}','${StoreId}','${d2}','','${SOSHeaderValue}','','${TempSessionId}','','0','0','Header','${Sess_StoreCode}','${Sess_TaskName}','${Sess_CatName}','${Sess_PhotoType}','${d2}') `; + } + + let skulist=item['skulist'] || []; + + + if(!CameraIROnceOnly){ + for(var l=0;li.SOSChildValue==skus.SOSChildValue); + let thisCatSkuData=thisCatSkuData_i>=0?(this_SKUData[thisCatSkuData_i] || {}):{}; + let TotalFacing="0.0"; + let SelfFacing="0.0"; + + stock_values+=` ('${SOSHeaderId}','${StoreId}','${d2}','${SOSDefinitionId}','${SOSHeaderValue}','${SOSChildTable}','${SOSChildField}','${SOSChildValue}','${ChildName}','${TotalFacing}','${SelfFacing}','${d2}') `; + + } + } + + + + + if(CameraIROnceOnly){ + IRimages_values=''; + for(var l=0;l{ + db.transaction(async function (txn) { + await txn.executeSql(q,[],async function (txn2, txnres2) { + resolve(true); + },function(Etxn,txnerr){console.log(txnerr);resolve(false) }); + }); + }).then((val)=>{ + return val; + }).catch((err)=>{ + console.log(err); + return false; + }) + } + + async function executeSDQuery(txn,q){ + // execute savedata queries + return new Promise((resolve,reject)=>{ + txn.executeSql(q,[],async function (txn2, txnres2) { + resolve(true); + },function(Etxn,txnerr){console.log(txnerr);resolve(false); }); + + }).then((val)=>{ + return val; + }).catch((err)=>{ + console.log(err); + return false; + }) + } + + + + async function validate(){ + + let CameraIROnceOnlyIndex=KPIFields.findIndex(i=>i.KPIFieldName=='CameraIROnceOnly') + let CameraIROnceOnlyObj=CameraIROnceOnlyIndex>=0?KPIFields[CameraIROnceOnlyIndex]:{}; + let CameraIROnceOnly=CameraIROnceOnlyIndex>=0?CameraIROnceOnlyObj['KPIFieldEnable']:true; + + return new Promise((resolve,reject)=>{ + + for (const index in AllSOSData){ + const item=AllSOSData[index]; + const cat=item; + const catIndex=index; + + + let skulist=item.skulist || []; + + // check if child image available (in header ) + let firstSkuObj=skulist.length>0?skulist[0]:{}; + + const cindex=SOSStockData.findIndex(i=>i.SOSHeaderValue==item.SOSHeaderValue); + const cobj=cindex>=0?SOSStockData[cindex]:{}; + + let CatIRImages=cobj['IRImages']!=null?cobj['IRImages'] : [] ; + let TempSessionId= cobj.TempSessionId!=null?cobj.TempSessionId:''; + + if(StoreCameraAllow && CameraIROnceOnly==false && (CatIRImages.length==0 || TempSessionId=="")){ + notify(`Please click header image for SOS`,'SHORT'); + resolve(false);return; + } + + if(index==(AllSOSData.length-1)){ + + if(StoreCameraAllow && CameraIROnceOnly==true && (SOSIRImages.current.length==0 || GbTempSessionId.current=="")){ + notify(`Please click header image for SOS`,'SHORT'); + resolve(false);return; + } + else{ + resolve(true);return; + } + } + } + }).then((val)=>{return val}) + .catch((err)=>{console.log(err); return false}); + + } + + function onStockValChange(item,skuItem,val,key,type=''){ + setErrorField({}); + setError(false); + if(val!=''){ + let isValid=validateNumber(val,type); + if(!isValid){ + return; + } + } + let allSKUData=SOSStockData; + let defData={'SOSHeaderValue':item.SOSHeaderValue,'Images':[],'SKUData':[]}; + const catindex=allSKUData.findIndex(i=>i.SOSHeaderValue==item.SOSHeaderValue); + const catData=catindex>=0?(allSKUData[catindex] || defData) : defData; + let AllSKUs=catData['SKUData'] ||[]; + + let defCData={'SOSChildValue':skuItem.SOSChildValue,'ChildImages':[]}; + let skud_index=AllSKUs.findIndex(i=>i.SOSChildValue==skuItem.SOSChildValue); + const skud=skud_index>=0?(AllSKUs[skud_index] || defCData) : defCData + skud[key]=val; + skud_index>=0?AllSKUs[skud_index]=skud:AllSKUs.push(skud); + catData['SKUData']=AllSKUs; + + catindex>=0?allSKUData[catindex]=catData:allSKUData.push(catData); + // setSOSStockData(allSKUData); + BgWindowData(allSKUData) + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + + function onHdrStockValChange(item,val,key,type=''){ + setErrorField({}); + setError(false); + if(val!=''){ + let isValid=validateNumber(val,type); + if(!isValid){ + return; + } + } + + let allSKUData=SOSStockData; + let defData={'SOSHeaderValue':item.SOSHeaderValue,'Images':[],'SKUData':[]}; + const skud_index=allSKUData.findIndex(i=>i.SOSHeaderValue==item.SOSHeaderValue); + const skud=skud_index>=0?(allSKUData[skud_index] || defData) : defData; + skud[key]=val; + skud_index>=0?allSKUData[skud_index]=skud:allSKUData.push(skud); + // setSOSStockData(allSKUData); + BgWindowData(allSKUData) + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + + function openRetakeOp(cat, type='1',IRImgIndex,IRimgPath){ + let data={'cat':cat,'type':type,'IRImgIndex':IRImgIndex,'IRimgPath':IRimgPath}; + setretakeMData(data); + setshowRetakeModal(true); + } + + + function closeRetakeOp(){ + setretakeMData({}) + setshowRetakeModal(false); + } + + function setIRZoomImages(IRCamImages){ + let z_images=[]; + for(let ci in IRCamImages){ + let img=IRCamImages[ci]; + let img_obj={imgIndex:(ci+1),url: img.ImagePath, props: {}} + + z_images.push(img_obj); + if(ci==IRCamImages.length-1){ + setZoomImageUrl2(z_images); + } + } + } + + async function getIRZoomImages(IRCamImages){ + return new Promise((resolve,reject)=>{ + let z_images=[]; + for(let ci in IRCamImages){ + let img=IRCamImages[ci]; + let img_obj={imgIndex:(ci+1),url: img.ImagePath, props: {}} + + z_images.push(img_obj); + if(ci==IRCamImages.length-1){ + resolve(z_images) + } + } + }).catch((err)=>{ + console.log(err); + return []; + }) + } + + function openImageRefView(windowIndex=0){ + setrefImageIndex(windowIndex); + UpdateShow_zoomImageRef(true); + } + + function openImageRefView2(ImageIndex=0,catIndex,Type='2'){ + if(Type=='1'){ + let cat=AllSOSData[catIndex]; + const catDataIndex=SOSStockData.findIndex(i=>i.SOSHeaderValue==cat.SOSHeaderValue) ; + const catData=catDataIndex>=0?SOSStockData[catDataIndex]:{}; + let zoomIRImages=catData.zoomIRImages!=null && catData.zoomIRImages!=""? catData.zoomIRImages:[]; + setZoomImageUrl2(zoomIRImages); + } + setrefImageIndex2(ImageIndex); + UpdateShow_zoomImageRef2(true); + } + + function _renderHeader(currentIndex,ImagesArr){ + return( + + {`${(currentIndex+1)}/${ImagesArr.length}`} + {UpdateShow_zoomImageRef(false); UpdateShow_zoomImageRef2(false);}}> + + + + ) + } + + function _render_Alert(){ + return ( + + + {setShowAlert(false)}}> + Cancel + + {saveData()}}> + Yes + + + + ) + } + + async function OpenImgModal(imgPath,cat,splitChildItem,splitChildItemIndex,skus){ + setSelectedImg(imgPath) + setShowModal(true); + if((imgPath!='' && imgPath!=null)){ + setShowImageSaveOp(false); + } + else{ + setShowImageSaveOp(true); + } + setReCapImgModalObj({cat,splitChildItem,splitChildItemIndex,skus}) + // _OpenCaptureImage_Modal(imgPath,window,splitItem,splitItemIndex,cameraType) + + } + + function _render_RetakePopup(){ + return ( + + + {RetakeIRPhoto()}}> + + + Retake + + + {DeleteIRPhoto()}}> + + + Delete + + + {closeRetakeOp()}}> + + + Cancel + + + + + + + + ) + } + + function _render_UploadAlert(){ + return ( + + + {setshowUploadAlert(false)}}> + Cancel + + {UploadIRSessions()}}> + Yes + + + + ) + } + + function _renderIRCamera(cat,CatIRImages,TempSessionId,type='1',catIndex=''){ + + let isSaveDisabled=(isDataUploaded=='U' || isDataUploaded=='P'); + let isResumeDisabled=(TempSessionId==null || TempSessionId=='' || TempSessionId=='undefined' || isSaveDisabled==true); + + return ( + + + {'Capture SOS Header Images'} + + + + { (CatIRImages!=null && CatIRImages.length>0) && + CatIRImages.map((IRImg,IRImgIndex)=>{ + let IRimgPath=IRImg.ImagePath; + return( + {openImageRefView2(IRImgIndex,catIndex,type)}}> + {(IRimgPath!=null && IRimgPath!='') && } + {(IRimgPath==null || IRimgPath=='') && } + {openRetakeOp(cat,type,IRImgIndex,IRimgPath)}}> + + + + ); + }) + + } + + + {StartCameraSession(cat,type)}}> + + Start Session + + {ResumeCameraSession(cat,type)}} > + + Resume Session + + + + + ) + } + + + function _renderIRCameraOnce(){ + let CameraIROnceOnlyIndex=KPIFields.findIndex(i=>i.KPIFieldName=='CameraIROnceOnly') + let CameraIROnceOnlyObj=CameraIROnceOnlyIndex>=0?KPIFields[CameraIROnceOnlyIndex]:{}; + let CameraIROnceOnly=CameraIROnceOnlyIndex>=0?CameraIROnceOnlyObj['KPIFieldEnable']:true; + + if(CameraIROnceOnly){ + return _renderIRCamera({},SOSIRImages.current,GbTempSessionId.current,'2'); + } + else{ + return (); + } + + } + + + function cancelImage(){ + // setImage1(''); + setSelectedImg(''); + setReCapImgModalObj({}) + setShowModal(false); + } + + function _OpenCaptureImage_Modal(img){ + + const isImageCap=(img!='' || img!=null)?true:false; + // console.log("imag pop is trigger",isImageCap,showModal,img) + let {cat,splitChildItem,splitChildItemIndex,skus}=reCapImgModalObj + let camera2Label=(cat && cat.PromoImage2Lable) || ''; + return ( + + { + isImageCap && + + + + + {openCamera(cat,splitChildItem,splitChildItemIndex,skus)}}> + + + + {!showImageSaveOp && + {cancelImage(false)}}> + {ST.Close} + + } + + } + + ) + } + + function _renderSOSList(){ + + let SOSHeaderLabel=KPIFields.findIndex(i=>i.KPIFieldName=='SOSHeaderLabel') + let SOSHeaderObj=SOSHeaderLabel>=0?KPIFields[SOSHeaderLabel]:{}; + let SOSHeaderDisName=SOSHeaderLabel>=0?SOSHeaderObj['KPIFieldDisplayName']:'Product Facing'; + + let sosDecimalValue=KPIFields.findIndex(i=>i.KPIFieldName=='SOSValueDecimalAllow') + let sosDecimalValueObj=sosDecimalValue>=0?KPIFields[sosDecimalValue]:{}; + let sosDecimalValueEnable=sosDecimalValue>=0?sosDecimalValueObj['KPIFieldEnable']:false; + + let CameraIROnceOnlyIndex=KPIFields.findIndex(i=>i.KPIFieldName=='CameraIROnceOnly') + let CameraIROnceOnlyObj=CameraIROnceOnlyIndex>=0?KPIFields[CameraIROnceOnlyIndex]:{}; + let CameraIROnceOnly=CameraIROnceOnlyIndex>=0?CameraIROnceOnlyObj['KPIFieldEnable']:true; + + let decimalAllow = sosDecimalValueEnable ? 'decimal': 'numeric' + + let isSaveDisabled=(isDataUploaded=='U' || isDataUploaded=='P'); + + return ( + + + + { + return _renderIRCameraOnce() + }} + listKey={(item, index) => `window_${index.toString()}`} + renderItem={({item,index})=>{ + const cat=item; + const catIndex=index; + + let SOSHeaderImage=true;//item.SOSHeaderImage==1 || item.SOSHeaderImage=='true'?1: 0; + let SOSHeaderFacing=item.SOSHeaderFacing==1 || item.SOSHeaderFacing=='true'?1: 0; + let SOSHeaderFacingLable=item.SOSHeaderFacingLable!=null?item.SOSHeaderFacingLable: ''; + + + const cindex=SOSStockData.findIndex(i=>i.SOSHeaderValue==item.SOSHeaderValue); + const cobj=cindex>=0?SOSStockData[cindex]:{}; + const HeaderImages=cobj['Images'] || [] ; + let SOSHdrFacing=cobj['SOSHdrFacing']!=null?cobj['SOSHdrFacing']:''; + let this_SKUData=cobj['SKUData'] || []; + // check if child image available in header + let firstSkuObj=cat.skulist.length>0?cat.skulist[0]:{}; + let isChildImgEnabled=firstSkuObj.SOSChildImage==1 || firstSkuObj.SOSChildImage=='true'?1: 0; + + // let show_HdrForm=(CameraIROnceOnly==false && (SOSHeaderImage==true || isChildImgEnabled)); + + let CatIRImages=cobj['IRImages']!=null?cobj['IRImages'] : [] ; + let TempSessionId= cobj.TempSessionId!=null?cobj.TempSessionId:''; + + //get SOS Target at header from skulist first child- as all children of particular hdr will contain same SOSTarget Value + let child_list=cat.skulist || []; + let first_child=child_list.length>0?child_list[0]:{}; + let SOSTarget=first_child.SOSTarget; + + return( + + + + {item.HeaderName } + {SOSTarget!=null && SOSTarget!='' && {`SOS Target: ${SOSTarget}%`}} + + + + + {CameraIROnceOnly==false && + _renderIRCamera(cat,CatIRImages,TempSessionId,'1',catIndex) + } + + + + {SOSHeaderDisName} + + + + + + { + const skus=item; + const sku_index=index; + // let thisCatSkuData_i=this_SKUData.findIndex(i=>i.SOSChildValue==skus.SOSChildValue); + // let thisCatSkuData=thisCatSkuData_i>=0?(this_SKUData[thisCatSkuData_i] || {}):{}; + + return( + + {skus.ChildName} + + ) + }}/> + + + + + + ); + }} + /> + + + ) + } + + function _renderBtns(){ + + let isUploadDisabled=isDataUploaded=='U'; + let isSaveDisabled=(isDataUploaded=='U' || isDataUploaded=='P'); + + let colors1=(isUploadDisabled?[PageTheme.$tertiary_color,PageTheme.$tertiary_color]:[PageTheme.$secondary_color_light,PageTheme.$gradient2, PageTheme.$primary_color]); + let colors2=(isSaveDisabled?[PageTheme.$tertiary_color,PageTheme.$tertiary_color]:[PageTheme.$secondary_color_light,PageTheme.$gradient2, PageTheme.$primary_color]); + + return ( + + {onSubmitData()}} /> + + + ) + } + + + return ( + + {processing && } + + {_OpenCaptureImage_Modal()} + {_render_Alert()} + {_render_RetakePopup()} + {_render_UploadAlert()} + {UpdateShowCameraRef(false);getImage(imgData)}} showCamera={showCamera} onHideCamera={()=>{UpdateShowCameraRef(false);}}/> + + + + + { Object.keys(storeData).length>0 && + _renderSOSList() + } + + {_renderBtns()} + + + + {/* {show_zoomImage && + + null} + /> + + } */} + + {show_zoomImage2 && + + {return _renderHeader(currentIndex,zoomImageUrl2)}} renderIndicator={()=>null} + /> + + } + + ); +} + + +export default connect(mapStateToProps, mapDispatchToProps)(ShareOfShelfOneAppIR_Only); \ No newline at end of file diff --git a/PerformicsSrc/src/screens/ShelfTalker.js b/PerformicsSrc/src/screens/ShelfTalker.js new file mode 100644 index 0000000..6410bfc --- /dev/null +++ b/PerformicsSrc/src/screens/ShelfTalker.js @@ -0,0 +1,2141 @@ +import React,{useState,useEffect,useRef} from 'react'; +import Container from '../components/container'; +import { useRoute } from '@react-navigation/native'; +import { globalStyles,customStyles,GetPageTheme } from "../styles/Global"; +import {StatusBar,Image,TextInput,View,Text,ScrollView,TouchableOpacity,Platform,PermissionsAndroid,FlatList, Alert, Animated} from 'react-native'; +import { ReactReduxContext,connect,useSelector, useDispatch } from 'react-redux'; +import { mapStateToProps,mapDispatchToProps } from '../reducers/contextProvider'; +import {notify} from '../components/notify'; +import moment from 'moment'; +import {getDownloadJson,marktext1,marktext2, validateNumber} from '../controller/functions'; +import {get_item,set_item,clear_item} from '../components/localStorage'; +import {version,sloganline,appname,testurl,db, colors_Arr, common_ImagePath,ImageFolderPath} from '../constants/constants'; +import CustomHeader from '../components/customHeader'; +import {AntDesign, Entypo, FontAwesome, Fontisto, MaterialCommunityIcons} from '../components/icons'; +import CustomLoader from '../components/CustomLoader'; +import LinearGradient from 'react-native-linear-gradient'; +import { AppTables } from '../constants/tableConstants'; +import * as RNFS from 'react-native-fs'; +import GradientButton from '../components/gradientButton'; + +import CustomModal from '../components/CustomModal'; +import { ConfirmSaveAlert } from '../components/alert'; +import ModalSelector from 'react-native-modal-selector' +import { CustomPicker, CustomPicker2 } from '../components/CustomPicker'; +import CustomCamera from '../components/Camera'; +import ImageViewer from 'react-native-image-zoom-viewer'; +import DateTimePicker from '@react-native-community/datetimepicker'; +import CheckBox from '@react-native-community/checkbox'; + +import CameraImg from '../assets/performics/camera_front_image.svg' +// import CameraImg2 from '../assets/performics/camera_icon.svg' +// import CameraImg3 from '../assets/performics/view_image.svg' +// import CameraImg5 from '../assets/performics/add_image.svg' +import MultiSelect from 'react-native-multiple-select'; + + +function ShelfTalker(props) { + const route = useRoute(); + const ST=props.StaticText || {}; + + // get all theme styles acc to current theme set + const PageTheme=GetPageTheme(props.DarkMode,route.name); + const customStyle=customStyles(props.DarkMode,route.name); + const animatedChoice=useRef(new Animated.Value(0)).current; + + const [processing, setProcessing] = useState(true); + const [loaderTitle, setLoaderTitle] = useState(); + const [isAdhocScreen, setIsAdhocScreen] = useState(false); + const [storeData, setStoreData] = useState({}); + const [currentMenu, setCurrentMenu] = useState({}); + const [rerenderdata, setrerenderdata]= useState(0); + const [rerenderdata2, setrerenderdata2]= useState(0); + const [rerenderdata3, setrerenderdata3]= useState(0); + const [rerenderdata4, setrerenderdata4]= useState(0); + + const [hasUnsavedChanges,setHasUnsavedChanges] = useState(false); + + const [WindowData, setWindowData] = useState([]); + const [reasons_list, setReasons_list] = useState([]); + const [Windows, setWindows] = useState([]); + const [show_zoomImage, setShow_zoomImage] = useState(false); + const [showAlert, setShowAlert] = useState(false); + const [zoomImageUrl, setZoomImageUrl] = useState([]); + const [showCamera, setShowCamera] = useState(false); + const [getImageProps,setGetImageProps]= useState({}); + const zoomView=useRef(null); + const [showRating, setShowRating] = useState(false); + const [RatingQtn, setRatingQtn] = useState({}); + const [RatingWindow, setRatingWindow] = useState({}); + const [RatingOrder, setRatingOrder] = useState([]); + + const [Products, setProducts] = useState([]); + const [DisplayList, setDisplayList] = useState([]); + const [toRemoveId,setToRemoveId]= useState(''); + const [toRemoveItem,setToRemoveItem]= useState({}); + const [showRemoveConfirm_M,setshowRemoveConfirm_M]= useState(false); + const [showRAllC_M,setShowRAllC_M]= useState(false); + const [searchedItem, setSearchedItem]= useState(''); + const [globalWindows, setGlobalWindows] = useState([]); + + const [SelectedImg, setSelectedImg] = useState(''); + const [showModal, setShowModal] = useState(false); + const [reCapImgModalObj, setReCapImgModalObj] = useState({}); + const [showImageSaveOp, setShowImageSaveOp] = useState(true); + + const d1=new Date(); + const d2=moment(d1).format('MM/DD/YYYY'); + + + useEffect(() => { + setLoaderTitle(ST.Loading+'...') + let params=props.route.params? props.route.params:{}; + let storeData1=params.storeData || {}; + let menu1=params.menu || {}; + + let isAdhoc=params.isAdhoc || false; + setIsAdhocScreen(isAdhoc); + setStoreData(storeData1); + setCurrentMenu(menu1); + + getData(storeData1,menu1); + + props.navigation.addListener('beforeRemove', onBeforeRemove); + + return function cleanup() { + props.navigation.removeListener('beforeRemove', onBeforeRemove); + }; + }, []); + + useEffect(() => { + props.navigation.removeListener('beforeRemove', onBeforeRemove); + props.navigation.addListener('beforeRemove', onBeforeRemove); + }, [hasUnsavedChanges]); + + useEffect(() => { + props.navigation.removeListener('beforeRemove', onBeforeRemove); + props.navigation.addListener('beforeRemove', onBeforeRemove); + }, [showCamera]); + + function onBeforeRemove(e){ + if(showCamera==true){ + e.preventDefault(); + setShowCamera(false); + } + else{ + if (hasUnsavedChanges==true) { + e.preventDefault(); // Prevent default behavior of leaving the screen + onRemoveScreen(e); + } + else{ + return; + } + } + } + function onRemoveScreen(e){ + Alert.alert( + "", + ST.Doyoureallywanttoexitthescreen, + [ + { + text: ST.Cancel, + onPress: () => {}, + style: "cancel" + }, + { text: ST.OK, onPress: () => {setHasUnsavedChanges(false);props.navigation.dispatch(e.data.action);} } + ] + ); + } + + + async function getData(storeData1,menu1){ + try { + let {StoreId,ChainId,StateId,StoreTypeId}=storeData1; + + await db.transaction(async function (txn) { + + + let q3=`Select StReasonId as ReasonId,StReason as Reason From Master_ShelfTalkerReason`; + await txn.executeSql(q3,[],async function (txn2, txnres2) { + if(txnres2.rows.length>0){ + let arr=[]; + for(var i=0;i0){ + let arr=[];let images=[],allWindowsData=[]; + for(var i=0;i0){ + let arr=[],images=[],allWindowsData=[]; + for(var i=0;i{ + + db.transaction(async function (txn) { + + let q=`select * from ${AppTables.ST_IMAGES} where ST_HEADER_ID='${window.stHeaderId}' and STORE_ID='${storeData1.StoreId}' `; + + await txn.executeSql(q,[],async function (txn2, txnres2) { + + if(txnres2.rows.length>0){ + let arr=[]; + for(var i=0;i{ + return val + }).catch((err)=>{ + console.log(err); + return WindowSplits_def; + }); + } + + async function getWindowQuestions(window,storeData1,isInserted=false,menu1){ + let obj={'WindowQA':{},'WindowQuestions':[]} + return new Promise((resolve,reject)=>{ + + db.transaction(async function (txn) { + var q='',selectlist='',join='',join2=''; + if(isInserted==true){ + selectlist=` DISTINCT q.QUESTION_ID as StQuestionId,q.QUESTION_CODE as StQuestionCode,wq.StQuestionName,wq.QuestionType,wq.StqShowCamera,wq.StqCameraMandatory,wq.StqLengthValidationRequired,wq.StqMinimumChar,wq.StqMaximumChar,wq.StqDecimalPoint,wq.StqDateRangeMin,wq.StqDateRangeMax,wq.StqVoiceLengthInMinutes,wq.StqDefaultQuestionEnable,q.ANSWER as Answer,q.ANSWER_ID as AnswerId,q.MULTI_OPTIONS_IDS as multi_op_ids,q.IMAGE_ALLOW1 as StaShowCamera,q.IMAGE1 as Image1 `; + join2=` inner join Mapping_ShelfTalkerQuestion mq on mq.StQuestionId=wq.StQuestionId `; + join=` inner join Master_ShelfTalkerQuestion wq on wq.StQuestionId=q.QUESTION_ID `; + q=`select ${selectlist} from ${AppTables.ST_CHILD_DATA} q ${join} ${join2} where q.STORE_ID='${storeData1.StoreId}' and q.ST_DEFINITION_ID='${window.StDefinitionId}' and q.SHELFTALKER_ID='${window.ShelfTalkerId}' order by wq.StQuestionSequence `; + } + else{ + selectlist=` DISTINCT wq.StQuestionId,wq.StQuestionCode,wq.StQuestionName,wq.QuestionType,wq.StqShowCamera,wq.StqCameraMandatory,wq.StqLengthValidationRequired,wq.StqMinimumChar,wq.StqMaximumChar,wq.StqDecimalPoint,wq.StqDateRangeMin,wq.StqDateRangeMax,wq.StqVoiceLengthInMinutes,wq.StqDefaultQuestionEnable `; + join=` inner join Mapping_ShelfTalkerQuestion mq on mq.StQuestionId=wq.StQuestionId `; + q=`select ${selectlist} from Master_ShelfTalkerQuestion wq ${join} where mq.StDefinitionId='${window.StDefinitionId}' order by wq.StQuestionSequence `; + } + + await txn.executeSql(q,[],async function (txn2, txnres2) { + if(txnres2.rows.length>0){ + let arr=[]; + let wqa_obj={}; + for(var i=0;i0){ + for(var k=0;k=0)){ + showImageTag=true; + } + } + } + } + + if(showImageTag && data.Answer!=null){ + let imgPath=(Platform.OS=='ios'?'file://':'')+ImageFolderPath+menu1.ScreenName+"/"+data.Image1; + wqa_obj[imgname_key]=data.Image1; + wqa_obj[img_key]=imgPath; + } + + + + if(data.QuestionType=='Date' && data.Answer!=null){ + let dayonly=moment().format('DD'); + let actual_date=data.Answer?data.Answer.split('/'):[]; + let month=actual_date[0],year=actual_date[1]; + let fulldate=month+'/'+dayonly+'/'+year; + wqa_obj[date_key]=fulldate; + + } + + arr.push(data); + if(i==txnres2.rows.length-1){ + obj['WindowQuestions']=arr; + obj['WindowQA']=wqa_obj; + resolve(obj) + } + } + } + else{ + resolve(obj) + } + },function (txnE,txnerr) { console.log(txnerr); resolve(obj) },); + }); + }).then((val)=>{ + return val + }).catch((err)=>{ + console.log(err); + return obj; + }); + } + + + async function getWindowAnswers(qtn){ + + return new Promise((resolve,reject)=>{ + + db.transaction(async function (txn) { + var q='',selectlist=''; + selectlist=` DISTINCT StAnswerId as AnswerId,StAnswerName as Answer,StaShowCamera,StaCameraMandatory,StaQuestionEnable,StaQuestionDisable `; + q=`select ${selectlist} from Master_ShelfTalkerQuestion where StQuestionId='${qtn.StQuestionId}' order by StaSequence `; + + await txn.executeSql(q,[],async function (txn2, txnres2) { + if(txnres2.rows.length>0){ + let arr=[]; + for(var i=0;i{ + return val + }).catch((err)=>{ + console.log(err); + return []; + }); + } + + async function getWindowStockData(window,storeData1,isInserted=false){ + let obj={'WStocks':[],'WStocksData':[],'isAllChecked':0} + return new Promise((resolve,reject)=>{ + db.transaction(async function (txn) { + var q='',selectlist='',join=''; + let checkassrt=window.StElementCheckAssortment=='true' || window.StElementCheckAssortment==1?true:false; + + if(isInserted==true){ + if(checkassrt){ + join=` inner join Mapping_ProductAssortmentStorewise a on a.ProductId=s.ST_STOCK_VALUE and a.StoreId='${storeData1.StoreId}'`; + } + + selectlist=` s.ST_STOCK_DEFINITION_ID as StStockDefinitionId, s.ST_DEFINITION_ID as StDefinitionId,s.ST_STOCK_TABLE as StStockTable,s.ST_STOCK_FIELD as StStockField,s.ST_STOCK_VALUE as StStockValue,s.ST_STOCK_MBQ as StStockMBQ,s.PRODUCT_NAME as ProductName, s.STOCK as Stock,s.IS_PROMO_PRESENT as isPromoPresent `; + q=`select ${selectlist} from ${AppTables.ST_STOCK_DATA} s ${join} where s.ST_DEFINITION_ID='${window.StDefinitionId}' and s.STORE_ID='${storeData1.StoreId}' `; + }else{ + if(checkassrt){ + join=` inner join Mapping_ProductAssortmentStorewise a on a.ProductId=s.StStockValue and a.StoreId='${storeData1.StoreId}'`; + } + selectlist=` s.StStockDefinitionId, s.StDefinitionId,s.StStockTable,s.StStockField,s.StStockValue,s.StStockMBQ,s.ProductName `; + q=`select ${selectlist} from Master_ShelfTalkerStockDefinition s ${join} where s.StDefinitionId='${window.StDefinitionId}' `; + } + if(checkassrt){ + q+=` and a.StoreId='${storeData1.StoreId}' `; + } + q+=isInserted?` order by s.PRODUCT_NAME `:` order by s.ProductName `; + + + + await txn.executeSql(q,[],async function (txn2, txnres2) { + + if(txnres2.rows.length>0){ + let arr=[],WStocksData=[]; + let isAllChecked=1; + for(var i=0;i{ + return val + }).catch((err)=>{ + console.log(err); + return obj; + }); + } + + + async function getImage(imgdata){ + let type=getImageProps.type || ''; + let window=getImageProps.window || {}; + let splitItem=getImageProps.splitItem || {}; + let splitItemIndex=getImageProps.splitItemIndex || 0; + let qtn=getImageProps.qtn || {}; + let cameraType=getImageProps.cameraType!=null?getImageProps.cameraType:'1'; + + if(typeof imgdata=='object' && imgdata.errorCode=='camera_unavailable'){ + notify(ST.Cameraunavailable); + } + else if(typeof imgdata =='object' && imgdata.uri!=null){ + const img=imgdata; + const imgurl=img.uri, imgWidth=img.width, imgHeight=img.height; + let isImgFromGallery=img.fromGallery!=null?img.fromGallery:false; + let picture_clickedd=isImgFromGallery==true?img.datetime:new Date(); + let picture_clicked_time=moment(picture_clickedd).format('DD-MM-YYYY HH:mm:ss') + + + const mark_text1=picture_clicked_time; + const mark_text2='Store Name:'+storeData.StoreName+' | Store Id:'+storeData.StoreId+' | User Id:'+storeData.EmpId+' | Image Type: Shelf Talker'+' | Date:'+picture_clicked_time; + + await marktext1(mark_text1,imgurl) + .then((res)=>{ + if(res.success){ + let uri=res.uri; + marktext2(mark_text2,uri,imgWidth,imgHeight) + .then((res)=>{ + if(res.success){ + + let picture_clicked_date=moment(picture_clickedd).format('YYYYMMDD'); + let picture_clicked_time=moment(picture_clickedd).format('HHmmss'); + let filename=storeData.StoreId+'_'+window.StDefinitionId+'_'+window.ShelfTalkerId+'_'+(props.UserId || '')+'_STImg-'+picture_clicked_date+'_'+picture_clicked_time+'.jpg'; + + let allData=WindowData; + let defData={'ShelfTalkerId':window.ShelfTalkerId,'StDefinitionId':window.StDefinitionId}; + const wind_index=allData.findIndex(i=>i.ShelfTalkerId==window.ShelfTalkerId && i.StDefinitionId==window.StDefinitionId) ; + let wind=wind_index>=0?allData[wind_index]:defData; + + if(cameraType=='2'){ + var QD=wind.WindowQA || {}; + var image_key=qtn.StQuestionId+'_ImageName1'; + var image_key_path=qtn.StQuestionId+'_ImagePath1'; + QD[image_key]=filename; + } + else if(cameraType=='3'){ + var image_key='NAImage1'; + var image_key_path='NAImage1Path'; + wind[image_key]=filename; + } + else{ + var WindowSplits=wind.WindowSplits || []; + var image_key=type=='1'?'Image1Name':'Image2Name'; + var image_key_path=type=='1'?'Image1':'Image2'; + splitItem[image_key]=filename; + } + + + + // renamefile + let imagePath=`${ImageFolderPath+currentMenu.ScreenName}/${filename}`;; + RNFS.copyFile(res.uri, imagePath) + .then(resn => { + let uri='file://'+imagePath; + console.log('image marker:',uri); + setSelectedImg(uri) + if(cameraType=='2'){ + QD[image_key_path]=uri; + wind.WindowQA=QD; + wind_index>=0?allData[wind_index]=wind:allData.push(wind); + setWindowData(allData); + setHasUnsavedChanges(true); + setrerenderdata3(!rerenderdata3); + } + else if(cameraType=='3'){ + wind[image_key_path]=uri; + wind_index>=0?allData[wind_index]=wind:allData.push(wind); + setWindowData(allData); + setHasUnsavedChanges(true); + setrerenderdata(!rerenderdata); + } + else{ + console.log('split image updated'); + splitItem[image_key_path]=uri; + splitItemIndex>=0?WindowSplits[splitItemIndex]=splitItem:WindowSplits.push(splitItem); + wind.WindowSplits=WindowSplits; + wind_index>=0?allData[wind_index]=wind:allData.push(wind); + setWindowData(allData); + setHasUnsavedChanges(true); + setrerenderdata2(!rerenderdata2); + } + + + + }) + .catch(err => { + console.log('ERROR: image file write failed!!!'); + console.log(err.message, err.code); + }); + + } + else{ + if(res.imagenotfound){ + notify(ST.Pleasecaptureaimage); + } + else{ + notify(res.error); + } + } + }); + } + else{ + if(res.imagenotfound){ + notify(ST.Pleasecaptureaimage); + } + else{ + notify(res.error); + } + } + }); + } + } + + async function openCamera(window,splitItem,splitItemIndex,type='1',cameraType='1',qtn={}){ + setGetImageProps({'window':window,'splitItem':splitItem,'splitItemIndex':splitItemIndex,'type':type,'cameraType':cameraType,'qtn':qtn}); + setShowCamera(true); + // props.navigation.navigate('CameraScreen',{'getImage':getImage,'cameraType':'back'}) + } + + async function onSubmitData(){ + let isvalid=await validate(); + if(isvalid){ + setShowAlert(true); + } + } + + async function saveData(){ + setHasUnsavedChanges(false); + setShowAlert(false); + setLoaderTitle(ST.SavingData+'...'); + setProcessing(true); + let d1n=new Date(); + let d3=moment(d1n).format('MM/DD/YYYY'); + try { + let {StoreId,ChainId,StateId,StoreTypeId}=storeData; + await db.transaction(async function (txn) { + + // remove old data + await txn.executeSql(`DELETE FROM ${AppTables.ST_HDR_DATA} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' `,[],async function (txn2, txnres) { + console.log('window hdr data deleted'); + },function (txnE,txnerr) { console.log(txnerr); },); + await txn.executeSql(`DELETE FROM ${AppTables.ST_CHILD_DATA} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' `,[],async function (txn2, txnres) { + console.log('window child data deleted'); + },function (txnE,txnerr) { console.log(txnerr); },); + await txn.executeSql(`DELETE FROM ${AppTables.ST_IMAGES} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' `,[],async function (txn2, txnres) { + console.log('window images data deleted'); + },function (txnE,txnerr) { console.log(txnerr); },); + await txn.executeSql(`DELETE FROM ${AppTables.ST_STOCK_DATA} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' `,[],async function (txn2, txnres) { + console.log('window stock data deleted'); + },function (txnE,txnerr) { console.log(txnerr); },); + + // add data + var values='',childV='',imageV='',stockV=''; + + for (const wi in globalWindows){ + const window=globalWindows[wi]; + let isImage1=window.StImage1=='true' || window.StImage1==1?1:0; + let isImage2=window.StImage2=='true' || window.StImage2==1?1:0; + let isNAImageAvl=window.StNotExistCamera=='true' || window.StNotExistCamera==1?1:0; + let isNAReasonEnable=window.StNotExistReasonEnable=='true' || window.StNotExistReasonEnable==1? 1:0; + let isReasonEnable=window.StExistReasonEnable=='true' || window.StExistReasonEnable==1? 1:0; + let isStockReq=window.StElementStockRequired=='true' || window.StElementStockRequired==1?1:0; + let WindowQuestions=window.WindowQuestions || []; + let WindowStocks=window.WindowStocks || []; + + + const wind=WindowData.find(i=>i.ShelfTalkerId==window.ShelfTalkerId && i.StDefinitionId==window.StDefinitionId); + let isPresent=wind.isPresent!=null && wind.isPresent!=''?wind.isPresent:'0'; + let ReasonId=wind.ReasonId!=null?wind.ReasonId:0; + let Reason=wind.Reason!=null?wind.Reason:''; + let NAImage1=wind.NAImage1!=null?wind.NAImage1:''; + let NAImage1Path=wind.NAImage1Path!=null?wind.NAImage1Path:''; + let remark=wind.remark!=null?wind.remark:''; + let WindowSplits=wind.WindowSplits || []; + let QD=wind.WindowQA || {}; + let WStocksData=wind.WStocksData || []; + + let ST_HEADER_ID='WIND'+wi+(Math.floor(Math.random()*1000)+1); + let {StDefinitionId,ShelfTalkerId,StName,StTable,StField,StValue,ChildName}=window; + + + values+=values!=''?' , ':''; + values+=` ('${ST_HEADER_ID}','${StoreId}','${d3}','${StDefinitionId}','${ShelfTalkerId}','${StName}','${StTable}','${StField}','${StValue}','${ChildName}','${isPresent}','${NAImage1}','${ReasonId}','${Reason}','${remark}','${d3}') `; + + if(isPresent==1){ + for(const qtnIndex in WindowQuestions){ + const qtn=WindowQuestions[qtnIndex]; + + let selansid='',selanswer='',selimg='',showImageTag=false; + let id_key=qtn.StQuestionId+'_AnswerId'; + let ans_key=qtn.StQuestionId+'_Answer'; + let multi_key=qtn.StQuestionId+'_MultiOption'; + let date_key=qtn.StQuestionId+'_Date'; + let img_key=qtn.StQuestionId+'_ImagePath1'; + let imgname_key=qtn.StQuestionId+'_ImageName1'; + let rating_key=qtn.StQuestionId+'_Rating'; + let list_mcdata=[]; + + let {StQuestionId,StQuestionCode,QuestionType,StaShowCamera}=qtn + let answer=QD[ans_key] || 0; + let answerId=QD[id_key] || ''; + let multi_options_ids=QD[multi_key] || ''; + let isImage1All=StaShowCamera=='true' || StaShowCamera==1?1:0; + let Image1=isImage1All==1?QD[imgname_key]:''; + + + childV+=childV!=''?' , ':''; + childV+=` ('${ST_HEADER_ID}','${StoreId}','${d3}','${StDefinitionId}','${ShelfTalkerId}','${StQuestionId}','${StQuestionCode}','${QuestionType}','${answer}','${answerId}','${multi_options_ids}','${Image1}','${isImage1All}','${d3}') `; + } + for(const splitItemIndex in WindowSplits){ + const splitItem=WindowSplits[splitItemIndex]; + let Image1Name=splitItem['Image1Name']!=null && splitItem['Image1Name']!=''?splitItem['Image1Name']:''; + let Image2Name=splitItem['Image2Name']!=null && splitItem['Image2Name']!=''?splitItem['Image2Name']:''; + Image1Name=isImage1==1?Image1Name:''; + Image2Name=isImage2==1?Image2Name:''; + + imageV+=imageV!=''?' , ':''; + imageV+=` ('${ST_HEADER_ID}','${StoreId}','${d3}','${StDefinitionId}','${ShelfTalkerId}','${Image1Name}','${Image2Name}','${d3}') `; + } + for(const stockProdIndex in WindowStocks){ + const stockProd=WindowStocks[stockProdIndex]; + let sd=WStocksData.find(i=> i.ProductId==stockProd.StStockValue) || {}; + let stock=sd.Stock!=null?sd.Stock:(sd.Stock==0?sd.Stock:''); + let isPromoPresent=sd.isPromoPresent!=null?sd.isPromoPresent:0; + let {StStockDefinitionId, StDefinitionId,StStockTable,StStockField,StStockValue,StStockMBQ,ProductName} =stockProd + stockV+=stockV!=''?' , ':''; + stockV+=` ('${ST_HEADER_ID}','${StoreId}','${d3}','${StDefinitionId}','${ShelfTalkerId}','${StStockDefinitionId}','${StStockTable}','${StStockField}','${StStockValue}','${StStockMBQ}','${ProductName}','${stock}','${isPromoPresent}','${d3}') `; + } + + } + } + + console.log('values:',values); + + + let add_hdr_data=`INSERT INTO ${AppTables.ST_HDR_DATA} (ST_HEADER_ID,STORE_ID,VISIT_DATE,ST_DEFINITION_ID,SHELFTALKER_ID,ST_NAME,ST_TABLE,ST_FIELD,ST_VALUE,CHILD_NAME,IS_PRESENT,ST_NA_IMAGE,REASON_ID,REASON,REMARK,ADDED_DATE) VALUES ${values} `; + let add_child_data=`INSERT INTO ${AppTables.ST_CHILD_DATA} (ST_HEADER_ID,STORE_ID,VISIT_DATE,ST_DEFINITION_ID,SHELFTALKER_ID,QUESTION_ID,QUESTION_CODE,QUESTION_TYPE,ANSWER,ANSWER_ID,MULTI_OPTIONS_IDS,IMAGE1,IMAGE_ALLOW1,ADDED_DATE) VALUES ${childV} `; + let add_images_data=`INSERT INTO ${AppTables.ST_IMAGES} (ST_HEADER_ID,STORE_ID,VISIT_DATE,ST_DEFINITION_ID,SHELFTALKER_ID,IMAGE1,IMAGE2,ADDED_DATE) VALUES ${imageV} `; + let add_stock_data=`INSERT INTO ${AppTables.ST_STOCK_DATA} (ST_HEADER_ID,STORE_ID,VISIT_DATE,ST_DEFINITION_ID,SHELFTALKER_ID,ST_STOCK_DEFINITION_ID,ST_STOCK_TABLE,ST_STOCK_FIELD,ST_STOCK_VALUE,ST_STOCK_MBQ,PRODUCT_NAME,STOCK,IS_PROMO_PRESENT,ADDED_DATE ) VALUES ${stockV} `; + + await txn.executeSql(add_hdr_data,[],async function (txn2, txnres) { + console.log('st header data added'); + var isSplitImageAdded=true,isStockAdded=true,isChildAdded=true; + if(imageV!=''){ + isSplitImageAdded=await executeQuery(add_images_data); + } + if(stockV!=''){ + isStockAdded=await executeQuery(add_stock_data); + } + if(childV!=''){ + isChildAdded=await executeQuery(add_child_data); + } + + if(!isSplitImageAdded){ + setProcessing(false);notify(ST.Cannotaddsplitshelftalkerimages); + } + else if(!isStockAdded){ + setProcessing(false);notify(ST.Cannotaddshelftalkerstockdata); + } + else if(!isChildAdded){ + setProcessing(false);notify(ST.Cannotaddshelftalkerquestionsdata); + } + else{ + setProcessing(false);notify(ST.ShelfTalkerdataupdatedsuccessfully); + props.navigation.goBack(); + } + + },function (txnE,txnerr) { console.log(txnerr);setProcessing(false);notify(ST.Cannotaddshelftalkerdata); },); + }); + } catch (err) { + console.log(err); + } + } + + async function executeQuery(q){ + return new Promise((resolve,reject)=>{ + db.transaction(async function (txn) { + await txn.executeSql(q,[],async function (txn2, txnres2) { + resolve(true); + },function(Etxn,txnerr){console.log(txnerr);resolve(false) }); + }); + }).then((val)=>{ + return val; + }).catch((err)=>{ + console.log(err); + return false; + }) + } + + async function validate(){ + let isValid=true; + + + return new Promise((resolve,reject)=>{ + for (const wi in globalWindows){ + const window=globalWindows[wi]; + let isImage1=window.StImage1=='true' || window.StImage1==1?1:0; + let isImage2=window.StImage2=='true' || window.StImage2==1?1:0; + let isNAImageAvl=window.StNotExistCamera=='true' || window.StNotExistCamera==1?1:0; + let isNAReasonEnable=window.StNotExistReasonEnable=='true' || window.StNotExistReasonEnable==1? 1:0; + let isReasonEnable=window.StExistReasonEnable=='true' || window.StExistReasonEnable==1? 1:0; + let isStockReq=window.StElementStockRequired=='true' || window.StElementStockRequired==1?1:0; + let StockQtyRequired=window.StockQtyRequired=='true' || window.StockQtyRequired==1?1:0; + let WindowQuestions=window.WindowQuestions || []; + let WindowStocks=window.WindowStocks || []; + + + const wind=WindowData.find(i=>i.ShelfTalkerId==window.ShelfTalkerId && i.StDefinitionId==window.StDefinitionId); + let isPresent=wind.isPresent!=null && wind.isPresent!=''?wind.isPresent:'0'; + let ReasonId=wind.ReasonId!=null?wind.ReasonId:''; + let Reason=wind.Reason!=null?wind.Reason:''; + let NAImage1=wind.NAImage1!=null?wind.NAImage1:''; + let NAImage1Path=wind.NAImage1Path!=null?wind.NAImage1Path:''; + let remark=wind.remark!=null?wind.remark:''; + let WindowSplits=wind.WindowSplits || []; + let QD=wind.WindowQA || {}; + let WStocksData=wind.WStocksData || []; + + if(isPresent=='1'){ + if(isReasonEnable==true && ReasonId=='' ){ + notify(`${ST.Pleaseselectreasonfor} ${window.StName} `,'LONG'); + resolve(false);return; + } + // else if(remark==''){ + // notify(`Please enter remark for ${window.StName} `,'LONG'); + // resolve(false);return; + // } + else{ + if(window.NoOfSplit>0 && WindowSplits.length>0 && (isImage1==1 || isImage2==1)) + { + for(const splitItemIndex in WindowSplits){ + const splitItem=WindowSplits[splitItemIndex]; + let Image1Name=splitItem['Image1Name']!=null && splitItem['Image1Name']!=''?splitItem['Image1Name']:''; + let Image2Name=splitItem['Image2Name']!=null && splitItem['Image2Name']!=''?splitItem['Image2Name']:''; + console.log('Image2Name',Image2Name,isImage2); + if(isImage1==1 && Image1Name==''){ + notify(`${ST.Pleaseclickallimagesfor} ${window.StName}`,'LONG'); + resolve(false);return; + } + else if(isImage2==1 && Image2Name==''){ + notify(`${ST.Pleaseclickallimagesfor} ${window.StName}`,'LONG'); + resolve(false);return; + } + } + } + + if(isStockReq==1){ + let isProductSelected=false; + for(const stockProdIndex in WindowStocks){ + const stockProd=WindowStocks[stockProdIndex]; + + let sd=WStocksData.find(i=> i.ProductId==stockProd.StStockValue) || {}; + let stock=sd.Stock!=null?sd.Stock:(sd.Stock==0?sd.Stock:''); + let isPromoPresent=sd.isPromoPresent!=null?sd.isPromoPresent:0; + + if(isPromoPresent==1){ + isProductSelected=true; + } + + if(isPromoPresent==1 && StockQtyRequired==1 && stock==''){ + notify(`${ST.Pleaseenterstockfor} ${window.StName} ( ${stockProd.ProductName} ) `,'LONG'); + resolve(false);return; + } + + if(stockProdIndex==WindowStocks.length-1){ + if(!isProductSelected){ + notify(`${ST.PleaseselectatleastoneSKUfor} ${window.StName} `,'LONG'); + resolve(false);return; + } + } + + } + } + + if(WindowQuestions.length>0){ + for(const qtnIndex in WindowQuestions){ + const qtn=WindowQuestions[qtnIndex]; + + let selansid='',selanswer='',selimg='',showImageTag=false; + let id_key=qtn.StQuestionId+'_AnswerId'; + let ans_key=qtn.StQuestionId+'_Answer'; + let multi_key=qtn.StQuestionId+'_MultiOption'; + let date_key=qtn.StQuestionId+'_Date'; + let img_key=qtn.StQuestionId+'_ImagePath1'; + let imgname_key=qtn.StQuestionId+'_ImageName1'; + let rating_key=qtn.StQuestionId+'_Rating'; + let list_mcdata=[]; + + let isImgAllowed=(qtn.StqShowCamera=='true' || qtn.StqShowCamera==1); + let checkForAnsKey=(qtn.QuestionType=='Decimal' || qtn.QuestionType=='Number' || qtn.QuestionType=='Text' || qtn.QuestionType=='Date' || qtn.QuestionType=='Rating') ; + if(qtn.QuestionType=='Single choice list') + { + selansid=QD[id_key]; + } + else if(qtn.QuestionType=='Multi choice list') + { + selansid=QD[multi_key]!=null && QD[multi_key]!=''?QD[multi_key].split(','):[]; + } + + + if(qtn.QuestionType=='Multi choice list' && selansid.length<=0){ + notify(`${Pleaseselectoptionsfortherequiredfield} ${ST.In} ${window.StName}`,'SHORT'); + resolve(false);return; + } + else if( checkForAnsKey && (Object.keys(QD).indexOf(ans_key)<0 || (Object.keys(QD).indexOf(ans_key)>=0 && QD[ans_key]===''))){ + let msg=( qtn.QuestionType=='Date'?`${ST.Pleasepickadatefortherequiredfield} ${ST.In} ${window.StName}`:(qtn.QuestionType=='Rating'?`${Pleaseselectratingfortherequiredfield} ${ST.In} ${window.StName}`:`${ST.Pleasefillalltherequiredfield} ${ST.In} ${window.StName}`)); + notify(msg,'SHORT'); + resolve(false);return; + } + else if(Object.keys(QD).indexOf(id_key)<0 || (Object.keys(QD).indexOf(id_key)>=0 && (QD[id_key]==='' || (QD[id_key]===0 && qtn.isDisabled===false) ))){ + notify(`${ST.Pleasefillalltherequiredfield} ${ST.In} ${window.StName}`,'SHORT'); + resolve(false);return; + } + else if(isImgAllowed && (Object.keys(QD).indexOf(img_key)<0 || (Object.keys(QD).indexOf(img_key)>=0 && QD[img_key]===''))){ + notify(`${ST.Pleaseaddimages} ${ST.In} ${window.StName}`,'SHORT'); + resolve(false);return; + }else{ + console.log('no condition found'); + } + + if((qtn.QuestionType=='Single choice list' || qtn.QuestionType=='Multi choice list' )){ + if (qtn.Answers && qtn.Answers.length>0){ + for(var j=0;j=0)){ + showImageTag=true; + } + } + } + } + + if(showImageTag && (Object.keys(QD).indexOf(img_key)<0 || (Object.keys(QD).indexOf(img_key)>=0 && QD[img_key]===''))){ + notify(`${ST.Pleaseaddimages} ${ST.In} ${window.StName}`,'SHORT'); + resolve(false);return; + } + } + } + + } + } + else{ + if(isNAReasonEnable==true && ReasonId=='' ){ + notify(`${ST.Pleaseselectreasonfor} ${window.StName} `,'LONG'); + resolve(false);return; + } + else if(isNAImageAvl==true && NAImage1=='' ){ + notify(`${ST.Pleaseclickimagefor} ${window.StName}`,'LONG'); + resolve(false);return; + } + } + + if(wi==(Windows.length-1)){ + resolve(true);return; + } + + } + + }).then((val)=>{return val}) + .catch((err)=>{console.log(err); return false}); + + } + + + function onselectionChange(option,keyLbl,keyVal,otherData){ + let item=otherData.window; + let allData=WindowData; + let defData={'ShelfTalkerId':item.ShelfTalkerId,'StDefinitionId':item.StDefinitionId}; + const win_index=allData.findIndex(i=>i.ShelfTalkerId==item.ShelfTalkerId && i.StDefinitionId==item.StDefinitionId); + let wind=win_index>=0?(allData[win_index] || defData) : defData; + wind[keyVal]=option.value; + wind[keyLbl]=option.label; + + win_index>=0?allData[win_index]=wind:allData.push(wind); + console.log('allData:',allData); + setWindowData(allData); + setHasUnsavedChanges(true); + setrerenderdata(!rerenderdata); + } + + function onselectionChange2(option,qtn,window){ + let allData=WindowData; + let defData={'ShelfTalkerId':window.ShelfTalkerId,'StDefinitionId':window.StDefinitionId}; + const wind_index=allData.findIndex(i=>i.ShelfTalkerId==window.ShelfTalkerId && i.StDefinitionId==window.StDefinitionId); + let wind=wind_index>=0?allData[wind_index]:defData; + let data=wind.WindowQA || {}; + let id_key=qtn.StQuestionId+'_AnswerId'; + let ans_key=qtn.StQuestionId+'_Answer'; + data[id_key]=option.value; + data[ans_key]=option.label; + + + wind['WindowQA']=data; + wind_index>=0?allData[wind_index]=wind:allData.push(wind); + + setWindowData(allData); + + let aq_ans=qtn.Answers!=null?qtn.Answers:[]; + let ans_obj=aq_ans.find(i=>i.AnswerId==option.value) || {}; + let EQtns=ans_obj.StaQuestionEnable!=null && ans_obj.StaQuestionEnable!=''?ans_obj.StaQuestionEnable.replace(' ','').split(','):[]; + let DQtns=ans_obj.StaQuestionDisable!=null && ans_obj.StaQuestionDisable!=''?ans_obj.StaQuestionDisable.replace(' ','').split(','):[]; + + let sqtns=window.WindowQuestions || [] + + if(EQtns.length>0){ + enableQtns(sqtns,EQtns,DQtns,data,wind,wind_index,allData,window) + } + else if(DQtns.length>0){ + disableQtns(sqtns,DQtns,data,wind,wind_index,allData,window) + } + else{ + setHasUnsavedChanges(true); + setrerenderdata(!rerenderdata); + } + + } + + async function disableQtns(sqtns,DQtns,data,wind={},wind_index=-1,allData=[],window={}){ + + if(DQtns.length>0){ + new Promise.all( + DQtns.map((qid,q_index)=>{ + let s_qtnindex=sqtns.findIndex(i=>i.StQuestionId==qid) || {}; + let s_qtn=sqtns[s_qtnindex]; + if(s_qtn!=null){ + s_qtn['isDisabled']=true + sqtns[s_qtnindex]=s_qtn; + let id_key=s_qtn.StQuestionId+'_AnswerId'; + let ans_key=s_qtn.StQuestionId+'_Answer'; + data[id_key]=0; + data[ans_key]=''; + + wind['WindowQA']=data; + wind_index>=0?allData[wind_index]=wind:allData.push(wind); + + return false + }else{ + return false; + } + }) + ).then(async (val)=>{ + + let allwindows=Windows; + let windowIndex=allwindows.findIndex(i=>i.StDefinitionId==window.StDefinitionId && i.ShelfTalkerId==window.ShelfTalkerId) + if(windowIndex>0){ + window['WindowQuestions']=sqtns; + allwindows[windowIndex]=window; + setWindowData(allData); + setWindows(allwindows); + setGlobalWindows(allwindows); + setHasUnsavedChanges(true); + setrerenderdata(!rerenderdata); + } + + }) + } + } + + async function enableQtns(sqtns,EQtns,DQtns,data,wind={},wind_index=-1,allData=[],window={}){ + new Promise.all( + EQtns.map((qid,q_index)=>{ + let s_qtnindex=sqtns.findIndex(i=>i.StQuestionId==qid) || {}; + let s_qtn=sqtns[s_qtnindex]; + if(s_qtn!=null){ + s_qtn['isDisabled']=false + sqtns[s_qtnindex]=s_qtn; + return false + }else{ + return false + } + }) + ).then(async (val)=>{ + if(DQtns.length>0){ + disableQtns(sqtns,DQtns,data,wind,wind_index,allData,window) + } + else{ + let allwindows=Windows; + let windowIndex=allwindows.findIndex(i=>i.StDefinitionId==window.StDefinitionId && i.ShelfTalkerId==window.ShelfTalkerId) + if(windowIndex>0){ + window['WindowQuestions']=sqtns; + allwindows[windowIndex]=window; + setWindows(allwindows); + setGlobalWindows(allwindows); + setHasUnsavedChanges(true); + setrerenderdata(!rerenderdata); + } + } + }) + } + + async function setMultiSelectValue(selectedItems=[],qtn={},window={}) { + console.log('setMultiSelectValue',selectedItems); + let id_key=qtn.StQuestionId+'_AnswerId'; + let ans_key=qtn.StQuestionId+'_Answer'; + let multi_key=qtn.StQuestionId+'_MultiOption'; + + let allData=WindowData; + let defData={'ShelfTalkerId':window.ShelfTalkerId,'StDefinitionId':window.StDefinitionId}; + const wind_index=allData.findIndex(i=>i.ShelfTalkerId==window.ShelfTalkerId && i.StDefinitionId==window.StDefinitionId); + let wind=wind_index>=0?allData[wind_index]:defData; + let obj=wind.WindowQA || {}; + obj[id_key]=0; + obj[multi_key]=selectedItems.join(','); + let anss=[]; + selectedItems.map((itemValue)=>{ + let ans = qtn.Answers.find(c1 => c1.AnswerId == itemValue); + if(ans.Answer){anss.push(ans.Answer)} + }); + obj[ans_key]=anss.join(','); + console.log('obj:',obj); + + wind['WindowQA']=obj; + wind_index>=0?allData[wind_index]=wind:allData.push(wind); + setWindowData(allData); + setHasUnsavedChanges(true); + setrerenderdata(!rerenderdata); + } + + function setTextValue(value,qtn,window,type='') { + if(value!=''){ + let isValid=validateNumber(value,type); + if(!isValid){ + return; + } + } + let id_key=qtn.StQuestionId+'_AnswerId'; + let ans_key=qtn.StQuestionId+'_Answer'; + + let allData=WindowData; + let defData={'ShelfTalkerId':window.ShelfTalkerId,'StDefinitionId':window.StDefinitionId}; + const wind_index=allData.findIndex(i=>i.ShelfTalkerId==window.ShelfTalkerId && i.StDefinitionId==window.StDefinitionId); + let wind=wind_index>=0?allData[wind_index]:defData; + let obj=wind.WindowQA || {}; + + if(qtn.QuestionType=='Date' ){ + let date_key=qtn.StQuestionId+'_Date'; + let d=value!=null?new Date(value):new Date(); + let mfdate=moment(d).format('MM/YYYY'); + showQtnDatePicker(qtn,window,false); + obj[id_key]=0; + obj[ans_key]=mfdate; + obj[date_key]=moment(d).format('MM/DD/YYYY'); + } + else{ + obj[id_key]=0; + obj[ans_key]=value; + } + + console.log(value,obj); + wind['WindowQA']=obj; + wind_index>=0?allData[wind_index]=wind:allData.push(wind); + + setWindowData(allData); + setHasUnsavedChanges(true); + setrerenderdata(!rerenderdata); + } + + function showQtnDatePicker(qtn,window,show=false){ + let allQtns=window.WindowQuestions || []; + let newqtnIndex=allQtns.findIndex(q=>q.StQuestionId==qtn.StQuestionId); + + if(newqtnIndex>=0){ + let newqtn=allQtns[newqtnIndex]; + newqtn.showDatePicker=show; + allQtns[newqtnIndex]=newqtn; + window['WindowQuestions']=allQtns; + let allWindows=Windows; + const winIndex=allWindows.findIndex(i=>i.ShelfTalkerId==window.ShelfTalkerId && i.StDefinitionId==window.StDefinitionId) || {}; + allWindows[winIndex]=window; + setWindows(allWindows); + setGlobalWindows(allwindows); + if(show==true) setrerenderdata(!rerenderdata); + } + } + + function setRatingValue(data){ + setRatingOrder(data); + } + + function onRatingCancel(){ + setShowRating(false); + } + + function onRatingSave(){ + setShowRating(false); + let qtn=RatingQtn; + let window=RatingWindow; + let id_key=qtn.StQuestionId+'_AnswerId'; + let ans_key=qtn.StQuestionId+'_Answer'; + let rating_key=qtn.StQuestionId+'_Rating'; + let ids=[],anss=[]; + RatingOrder.map((item,index)=>{ + ids.push(item.AnswerId); + anss.push(item.Answer); + }) + + let allData=WindowData; + let defData={'ShelfTalkerId':window.ShelfTalkerId,'StDefinitionId':window.StDefinitionId}; + const wind_index=allData.findIndex(i=>i.ShelfTalkerId==window.ShelfTalkerId && i.StDefinitionId==window.StDefinitionId); + let wind=wind_index>=0?allData[wind_index]:defData; + let obj=wind.WindowQA || {}; + + obj[rating_key]=ids.join(','); + obj[id_key]=0; + obj[ans_key]=anss.join(','); + + wind['WindowQA']=obj; + wind_index>=0?allData[wind_index]=wind:allData.push(wind); + + setWindowData(allData); + setHasUnsavedChanges(true); + setrerenderdata(!rerenderdata); + } + + + function onChoiceSelect(item,val,key,animatedChoice){ + console.log('onChoiceSelect',animatedChoice) + var val1=0; + val==1?val1=1:''; + + if(animatedChoice!=null){ + Animated.timing(animatedChoice, { + toValue: val1, + duration:400, + useNativeDriver:false, + }).start(); + } + onWindowDataChange(item,val,key) + } + + function onWindowDataChange(item,val,key){ + let allData=WindowData; + let defData={'ShelfTalkerId':item.ShelfTalkerId,'StDefinitionId':item.StDefinitionId}; + const win_index=allData.findIndex(i=>i.ShelfTalkerId==item.ShelfTalkerId && i.StDefinitionId==item.StDefinitionId); + let wind=win_index>=0?(allData[win_index] || defData) : defData; + wind[key]=val; + + if(key=='ReasonId'){ + let rsn=reasons_list.find(r=>r.ReasonId==val) || {}; + wind['Reason']=rsn.Reason || ''; + } + + win_index>=0?allData[win_index]=wind:allData.push(wind); + + setWindowData(allData); + setHasUnsavedChanges(true); + setrerenderdata(!rerenderdata); + } + + + async function setWindowStockVal(val,window,stockProd,key){ + if(val!=''){ + let isValid=validateNumber(val,type); + if(!isValid){ + return; + } + } + + let allData=WindowData; + let defData={'ShelfTalkerId':window.ShelfTalkerId,'StDefinitionId':window.StDefinitionId}; + const win_index=allData.findIndex(i=>i.ShelfTalkerId==window.ShelfTalkerId && i.StDefinitionId==window.StDefinitionId); + let wind=win_index>=0?(allData[win_index] || defData) : defData; + let WStocksData=wind['WStocksData'] || []; + let sdIndex=WStocksData.findIndex(i=> i.ProductId==stockProd.StStockValue); + let sd=sdIndex>=0?WStocksData[sdIndex]:{'ProductId':stockProd.StStockValue,'Stock':''}; + sd[key]=val; + sdIndex>=0?WStocksData[sdIndex]=sd:WStocksData.push(sd); + wind['WStocksData']=WStocksData; + win_index>=0?allData[win_index]=wind:allData.push(wind); + if(key=='isPromoPresent'){ + let isAllChecked = await verifyAllChecked(val,window,stockProd,key); + wind['isAllSKUChecked']=isAllChecked; + } + + setWindowData(allData); + setHasUnsavedChanges(true); + setrerenderdata4(!rerenderdata4); + } + + async function onCatTextChange(window,key,val,type=''){ + if(val!=''){ + let isValid=validateNumber(val,type); + if(!isValid){ + return; + } + } + let item=window; + let allData=WindowData; + let defData={'ShelfTalkerId':item.ShelfTalkerId,'StDefinitionId':item.StDefinitionId}; + const win_index=allData.findIndex(i=>i.ShelfTalkerId==item.ShelfTalkerId && i.StDefinitionId==item.StDefinitionId); + let wind=win_index>=0?(allData[win_index] || defData) : defData; + wind[key]=val; + + win_index>=0?allData[win_index]=wind:allData.push(wind); + setWindowData(allData); + setHasUnsavedChanges(true); + setrerenderdata(!rerenderdata); + } + + + async function verifyAllChecked(val,window,stockProd,key){ + return await new Promise((resolve,reject)=>{ + let WindowStocks=window.WindowStocks || []; + let allData=WindowData; + const win_index=allData.findIndex(i=>i.ShelfTalkerId==window.ShelfTalkerId && i.StDefinitionId==window.StDefinitionId); + let wind=win_index>=0?(allData[win_index] || defData) : defData; + let WStocksData=wind['WStocksData'] || []; + if(WindowStocks.length>0){ + let isAllChecked=1; + for(var i=0;i a.ProductId==stockProd.StStockValue); + let sd1=sdIndex1>=0?WStocksData[sdIndex1]:{}; + let isPromoPresent=sd1.isPromoPresent; + if(isPromoPresent==null || isPromoPresent=='' || isPromoPresent==0 || isPromoPresent=='0'){ + isAllChecked=0 + } + + if(i==WindowStocks.length-1){ + resolve(isAllChecked); + } + } + } + else{ + resolve(0); + } + + }).catch((err)=>{ + console.log(err); + return 0; + }); + } + + function checkAllSKUs(val,window){ + + let WindowStocks=window.WindowStocks || []; + let allData=WindowData; + let defData={'ShelfTalkerId':window.ShelfTalkerId,'StDefinitionId':window.StDefinitionId}; + const win_index=allData.findIndex(i=>i.ShelfTalkerId==window.ShelfTalkerId && i.StDefinitionId==window.StDefinitionId); + let wind=win_index>=0?(allData[win_index] || defData) : defData; + let WStocksData=wind['WStocksData'] || []; + console.log('WStocksData before:',WStocksData) + for(var i=0;i a.ProductId==stockProd.StStockValue); + let sd=sdIndex>=0?WStocksData[sdIndex]:{'ProductId':stockProd.StStockValue,'Stock':''}; + let isPromoPresent=(val==1 || val=='1')?1:0; + sd['isPromoPresent']=isPromoPresent; + + sdIndex>=0?(WStocksData[sdIndex]=sd):(WStocksData.push(sd)); + } + + + wind['WStocksData']=WStocksData; + wind['isAllSKUChecked']=val==1?1:0; + console.log('wind updated'); + win_index>=0?allData[win_index]=wind:allData.push(wind); + + setWindowData(allData); + setHasUnsavedChanges(true); + setrerenderdata(!rerenderdata); + } + + function onSaveCancel(){ + setShowAlert(false); + } + + + + function openImageRefView(RefImage=''){ + setShow_zoomImage(true); + } + + function FilterStores(searchedQry){ + searchedQry=searchedQry.toLowerCase(); + console.log('searchedQry',searchedQry); + let arr=[]; + let newWindows=[]; + if(searchedQry!=null && searchedQry!=''){ + + for(let i=0;i + + {ST.DragItemsInOrder} + {ST.Pressandholdtodrag} + {setRatingValue(data)}} + keyExtractor={(item) => item.AnswerId} + renderItem={renderItem} + /> + + {onRatingCancel()}}> + {ST.Cancel} + + {onRatingSave()}}> + {ST.Save} + + + + + ) + } + + function render_Picker(label_key,value_key,onChange=()=>{},selected_data={}){ + var data=[]; + let qtn=selected_data.qtn || {}; + let window=selected_data.window || {}; + let isQtnDisabled=qtn.isDisabled!=null || qtn.isDisabled!=''?false:true; + let allAnswers=qtn.Answers || []; + + allAnswers.map((item,index)=>{ + let obj={ key: index, label: item[label_key],value:item[value_key] }; + if(selected_data.value==item[label_key]) + obj['component']= {item[label_key]}; + data.push(obj); + }); + + return ( + {onChange(option,qtn,window) }} + overlayStyle={customStyle.addVisPickerOverlay} + cancelContainerStyle={customStyle.addVisPicker_OptionContainerStyle} + optionStyle={customStyle.addvis_opStyle} + optionTextStyle={customStyle.addvis_opTextStyle} + optionContainerStyle={customStyle.addVisPicker_OptionContainerStyle} + selectedKey={'1'} + disabled={isQtnDisabled} + > + {(selected_data.value!=null && selected_data.value!=''?selected_data.value: '-'+ST.select+'-')} + + ) + } + + function renderDatePicker(qtn,window){ + let qtnn=qtn; + let DateRange=qtn.DateRange; + let maxDate=moment().add(10,'years').format('MM/DD/YYYY'); + let minDate=moment().subtract(10,'years').format('MM/DD/YYYY'); + if(DateRange=='RFD'){ + maxDate=moment().format('MM/DD/YYYY'); + } + else if(DateRange=='RPD'){ + minDate=moment().format('MM/DD/YYYY'); + } + + return ( + {setTextValue(selectedDate,qtnn,window)}} + maximumDate={new Date(maxDate)} + minimumDate={new Date(minDate)} + /> + ); + } + + + function _OpenCaptureImage_Modal(img){ + + const isImageCap=(img!='' || img!=null)?true:false; + // console.log("imag pop is trigger",isImageCap,showModal,img) + let {window,splitItem,splitItemIndex,cameraType}=reCapImgModalObj + let camera2Label=(window && window.PromoImage2Lable) || ''; + return ( + + { + isImageCap && + + + + + {openCamera(window,splitItem,splitItemIndex,cameraType)}}> + + + + {!showImageSaveOp && + {cancelImage(false)}}> + {ST.Close} + + } + + } + + ) + } + + function _renderWindow(){ + return ( + `window_${index.toString()}`} + renderItem={({item,index})=>{ + const window=item; + + let isImage1=window.StImage1=='true' || window.StImage1==1?1:0; + let isImage2=window.StImage2=='true' || window.StImage2==1?1:0; + let isNAImageAvl=window.StNotExistCamera=='true' || window.StNotExistCamera==1?1:0; + let isNAReasonEnable=window.StNotExistReasonEnable=='true' || window.StNotExistReasonEnable==1? 1:0; + let isReasonEnable=window.StExistReasonEnable=='true' || window.StExistReasonEnable==1? 1:0; + let isStockReq=window.StElementStockRequired=='true' || window.StElementStockRequired==1?1:0; + let StockQtyRequired=window.StockQtyRequired=='true' || window.StockQtyRequired==1?1:0; + + // let isStock_CheckAssrt=window.StElementCheckAssortment=='true' || window.StElementCheckAssortment==1?1:0; + let RefImage=window.StRefImage; + let camera1Label=window.StImage1Lable || ''; + let camera2Label=window.StImage2Lable || ''; + let WindowQuestions=window.WindowQuestions || []; + let WindowStocks=window.WindowStocks || []; + + + const wind=WindowData.find(i=>i.ShelfTalkerId==window.ShelfTalkerId && i.StDefinitionId==window.StDefinitionId); + let isPresent=wind.isPresent!=null && wind.isPresent!=''?wind.isPresent:'0'; + let ReasonId=wind.ReasonId!=null?wind.ReasonId:''; + let Reason=wind.Reason!=null?wind.Reason:''; + let NAImage1=wind.NAImage1!=null?wind.NAImage1:''; + let NAImage1Path=wind.NAImage1Path!=null?wind.NAImage1Path:''; + let remark=wind.remark!=null?wind.remark:''; + let WindowSplits=wind.WindowSplits || []; + let QuestionsData=wind.WindowQA || {}; + let WStocksData=wind.WStocksData || []; + let isAllSKUChecked=wind.isAllSKUChecked==1 || wind.isAllSKUChecked=="1"; + + // console.log('camera2Label:',window.ShelfTalkerId,window.StDefinitionId,camera2Label); + + + var xpos=isPresent=='1'?-75:0; + if(window.animatedChoice!=null ){ + xpos=window.animatedChoice.interpolate({ + inputRange:[0,1], + outputRange:[0,-75], + }); + } + + + + return( + + + + {window.StName} + {openImageRefView(RefImage)}}> + + + + + + + + + {ST.IsPresent} + + + + {onChoiceSelect(window,1,'isPresent',window.animatedChoice)}}> + {ST.Yes} + + {onChoiceSelect(window,0,'isPresent',window.animatedChoice)}}> + {ST.No} + + + + + {((isPresent!='1' && isNAReasonEnable==true) || (isPresent=='1' && isReasonEnable==true)) && + + {ST.SelectReason} + {} + + } + + + {(isPresent!='1' && isNAImageAvl==true) && + + + + {ST.CaptureImage} + + + + + + { (NAImage1Path=='' || NAImage1Path==null) && + {openCamera(window,{},0,'1','3')}}> + + + } + { (NAImage1Path!='' && NAImage1Path!=null) && + + + {openCamera(window,{},0,'1','3')}}> + + + + } + + + + + + } + + + + {(isPresent=='1') && + + {(isStockReq==true && WindowStocks.length>0) && + + + {ST.SelectProducts} + + + + {checkAllSKUs((isAllSKUChecked==1?0:1),window)}}> + {let val1=(val==true)?1:0; checkAllSKUs(val1,window) }} + style={[customStyle.WStkHdr_checkbox,(Platform.OS=='ios'?{height:20,width:20,marginLeft:5}:{})]} + tintColors={{ true:PageTheme.$primary_color, false:PageTheme.$text_color_light }} + /> + {ST.SelectAll} + + + `wstock_${index.toString()}`} + renderItem={({item,index})=>{ + let stockProd=item; + let stockProdIndex=index; + let sd=WStocksData.find(i=> i.ProductId==stockProd.StStockValue) || {}; + let stock=sd.Stock!=null?sd.Stock:''; + let isPromoPresent=sd.isPromoPresent!=null?sd.isPromoPresent:0; + + return( + + {/* {stockProd.ProductName} */} + + + {let val1=(val==true)?1:0; setWindowStockVal(val1,window,stockProd,'isPromoPresent') }} + style={[customStyle.WStkHdr_checkbox,(Platform.OS=='ios'?{height:20,width:20,marginTop:5,marginLeft:5,}:{})]} + tintColors={{ true:PageTheme.$primary_color, false:PageTheme.$text_color_light }} + /> + + {stockProd.ProductName} + + {StockQtyRequired==1 && isPromoPresent==1 && + + + + Stock + + + + {setWindowStockVal(val,window,stockProd,'Stock','numeric')}} + /> + + + + } + + ); + }} + /> + + } + {( window.NoOfSplit>0 && WindowSplits.length>0 && (isImage1==1 || isImage2==1)) && + + + {ST.CaptureShelfTalkerImages} + + `spliItem_${index.toString()}`} + renderItem={({item,index})=>{ + let splitItem=item; + let splitItemIndex=index; + let Image1Name=splitItem['Image1Name']!=null && splitItem['Image1Name']!=''?splitItem['Image1Name']:''; + let Image2Name=splitItem['Image2Name']!=null && splitItem['Image2Name']!=''?splitItem['Image2Name']:''; + let Image1=splitItem['Image1']!=null && splitItem['Image1']!=''?splitItem['Image1']:''; + let Image2=splitItem['Image2']!=null && splitItem['Image2']!=''?splitItem['Image2']:''; + let isImg1mad=splitItem['img1Required'] || false; + let isImg2mad=splitItem['img2Required'] || false; + return( + + {isImage1==1 && + + {/* { (Image1=='' || Image1==null) && + {openCamera(window,splitItem,splitItemIndex,'1')}}> + + + } + { (Image1!='' && Image1!=null) && + + + {openCamera(window,splitItem,splitItemIndex,'1')}}> + + + + } */} + + {((Image1=='' || Image1==null) && isImg1mad) ? + {openCamera(window,splitItem,splitItemIndex,'1')}}> + + : (Image1=='' || Image1==null ) ? + {openCamera(window,splitItem,splitItemIndex,'1')}}> + + :(Image1!='' || Image1!=null ) ? + {OpenImgModal(Image1,window,splitItem,splitItemIndex,'1')}}> + + : null + } + {camera1Label} + + } + {isImage2==1 && + + {/* { (Image2=='' || Image2==null) && + {openCamera(window,splitItem,splitItemIndex,'2')}}> + + + } + { (Image2!='' && Image2!=null) && + + + {openCamera(window,splitItem,splitItemIndex,'2')}}> + + + + } */} + {((Image2=='' || Image2==null) && isImg2mad) ? + {openCamera(window,splitItem,splitItemIndex,'2')}}> + + : (Image2=='' || Image2==null ) ? + {openCamera(window,splitItem,splitItemIndex,'2')}}> + + :(Image2!='' || Image2!=null ) ? + {OpenImgModal(Image2,window,splitItem,splitItemIndex,'2')}}> + + : null + } + {console.log('camera2Label 2:',camera2Label)} + {camera2Label} + + } + + ); + }} + /> + + } + + {(WindowQuestions.length>0) && + + + {ST.ShelfTalkerQuestions} + + {WindowQuestions.map((item,index)=>{ + + let qtn=item; + let qtnIndex=index; + let selansid='',selanswer='',selimg='',showImageTag=false; + let id_key=qtn.StQuestionId+'_AnswerId'; + let ans_key=qtn.StQuestionId+'_Answer'; + let multi_key=qtn.StQuestionId+'_MultiOption'; + let date_key=qtn.StQuestionId+'_Date'; + let img_key=qtn.StQuestionId+'_ImagePath1'; + let imgname_key=qtn.StQuestionId+'_ImageName1'; + let rating_key=qtn.StQuestionId+'_Rating'; + + let list_mcdata=[]; + + if(qtn.QuestionType=='Single choice list') + { + selansid=QuestionsData[id_key]!=null ?QuestionsData[id_key] :''; + selanswer=QuestionsData[ans_key]!=null ?QuestionsData[ans_key] :''; + } + else if(qtn.QuestionType=='Multi choice list') + { + if(qtn.Answers!=null){ + for(var i=0;i0){ + // let arr=[]; + // for(var i=0;i0){ + for(var i=0;i=0)){ + showImageTag=true; + } + + } + } + } + + if(showImageTag){ + selimg=QuestionsData[img_key]!=null && QuestionsData[img_key]!=''?'file://'+QuestionsData[img_key]:''; + } + + return( + + {qtn.StQuestionName} + {qtn.QuestionType=='Single choice list' && qtn.Answers && + render_Picker('Answer','AnswerId',onselectionChange2,{value:selanswer,qtn:qtn,window:window}) + } + {qtn.QuestionType=='Multi choice list' && qtn.Answers && + { setMultiSelectValue(selectedItems,qtn,window) }} //setMultiSelectValue(selectedItems,qtn) + selectedItems={selansid} + selectText="Pick Items" + searchInputPlaceholderText={ST.SearchItems+"..."} + // onChangeInput={ (text)=> console.log(text)} + tagRemoveIconColor={PageTheme.$primary_color} + tagBorderColor={PageTheme.$primary_color} + tagTextColor={PageTheme.$primary_color} + selectedItemTextColor={PageTheme.$primary_color} + selectedItemIconColor={PageTheme.$primary_color} + itemTextColor={PageTheme.$text_color} + displayKey="Answer" + searchInputStyle={{ color: '#CCC' }} + submitButtonColor={PageTheme.$primary_color} + submitButtonText={ST.Submit} + /> + } + { (qtn.QuestionType=='Number' || qtn.QuestionType=='Decimal' || qtn.QuestionType=='Text') && + {setTextValue(val,qtn,window,(qtn.QuestionType=='Decimal'?'decimal':(qtn.QuestionType=='Text'?'text':'numeric')))}} + /> + } + { + (qtn.QuestionType=='Date') && + + {selansid!=''?selansid:'MM/YYYY'} + {setDateValue(selanswer);showQtnDatePicker(qtn,window,true)}}> + + + + } + { ((qtn.showDatePicker==true || qtn.showDatePicker=='true') && (qtn.QuestionType=='Date') ) && + renderDatePicker(qtn,window) + } + { + (qtn.QuestionType=='Rating') && + + {selanswer} + {setRatingQtn(qtn);setRatingWindow(window);setShowRating(true);}}> + + + + } + + { + // (qtn.QuestionType=='Audio') && + // + // {selanswer} + // {show_recorder(qtn);}}> + // + // + // + } + + { + showImageTag && + + + {openCamera(window,{},0,'1','2',qtn)}}> + + + + } + + + + ) + })} + + } + + + {ST.Remark} + {onCatTextChange(window,'remark',val,'text')}} + /> + + + + + } + + + + + + + ); + }} + /> + ) + } + + function _renderHeader(currentIndex){ + return( + + {/* {`${(currentIndex+1)}/${zoomImageUrl.length}`} */} + {console.log('tsth');setShow_zoomImage(false) }}> + + + + ) + } + + return ( + + {processing && } + + {_OpenCaptureImage_Modal()} + {ConfirmSaveAlert(props,showAlert,onSaveCancel,saveData)} + {setShowCamera(false);getImage(imgData)}} showCamera={showCamera} onHideCamera={()=>{setShowCamera(false);}}/> + + + + + {setSearchedItem(val); FilterStores(val)}} + /> + {FilterStores(searchedItem)}}> + + + + { Object.keys(storeData).length>0 && + + {_renderWindow()} + + } + + {onSubmitData()}}/> + + + + + { showRating==true && + renderRatingView() + } + {show_zoomImage && + + null} + /> + + } + + ); +} + + + +export default connect(mapStateToProps, mapDispatchToProps)(ShelfTalker); \ No newline at end of file diff --git a/PerformicsSrc/src/screens/ShowMap.js b/PerformicsSrc/src/screens/ShowMap.js new file mode 100644 index 0000000..8d2a401 --- /dev/null +++ b/PerformicsSrc/src/screens/ShowMap.js @@ -0,0 +1,263 @@ +import React,{useState,useEffect} from 'react'; +import Container from '../components/container'; +import { useRoute } from '@react-navigation/native'; +import { globalStyles,customStyles,GetPageTheme, WP } from "../styles/Global"; +import {Image,View,Text,ScrollView,TouchableOpacity,Platform,FlatList} from 'react-native'; +import { connect} from 'react-redux'; +import { mapStateToProps,mapDispatchToProps } from '../reducers/contextProvider'; +import {notify} from '../components/notify'; +import moment from 'moment'; +import {checkRange,marktext1,marktext2, UploadData, UploadData2, UploadFormData} from '../controller/functions'; +import {get_item,set_item,clear_item} from '../components/localStorage'; +import {db, gMap_key} from '../constants/constants'; +import CustomHeader from '../components/customHeader'; +import {AntDesign, Entypo} from '../components/icons'; +import CustomLoader from '../components/CustomLoader'; +import LinearGradient from 'react-native-linear-gradient'; +import {SvgXml} from 'react-native-svg'; +import MapView,{ Marker,AnimatedRegion,Polyline,PROVIDER_GOOGLE } from 'react-native-maps'; +import { _checkLocationPermission } from '../components/geolocation'; +import Geolocation from 'react-native-geolocation-service'; +import { useRef } from 'react'; +import GradientButton from '../components/gradientButton'; +import {launchCamera, launchImageLibrary,CameraOptions} from 'react-native-image-picker'; +import * as RNFS from 'react-native-fs'; + +import cameraImg from '../assets/performics/camera_front_image.svg' +import { AppTables } from '../constants/tableConstants'; +import { getFolderName, getMethodName, METHODS } from '../constants/methodNames'; + +function ShowMap(props) { + const route = useRoute(); + const ST = props.StaticText || {}; + // get all theme styles acc to current theme set + const PageTheme=GetPageTheme(props.DarkMode,route.name); + const customStyle=customStyles(props.DarkMode,route.name); + const [processing, setProcessing] = useState(false); + + const [storeData, setStoreData] = useState({}); + const [StoreImage, setStoreImage] = useState(''); + const [StoreImgPath, setStoreImgPath] = useState(''); + + const [currentLocation, setCurrentLocation] = useState({}); + const [markerCoordinate, setMarkerCoordinate] = useState(); + const [markerPos, setMarkerPos] = useState({}); + const [markerTitle, setMarkerTitle] = useState(''); + const [markerPlaceText, setMarkerPlaceText] = useState(''); + const [loaderTitle, setLoaderTitle] = useState(ST.Loadingwithdots); + const [isAdhocScreen, setIsAdhocScreen] = useState(false); + const [storeDistanceText, setStoreDistanceText] = useState('0 m'); + const [storeDistance, setStoreDistance] = useState(0); + + const MyMap=useRef(null); + const MyMarker=useRef(null); + const isCancelled = useRef(false); + const d1=new Date(); + const d2=moment(d1).format('MM/DD/YYYY'); + + useEffect(() => { + let params=props.route.params? props.route.params:{}; + let storeData1=params.storeData || {}; + let isAdhoc=params.isAdhoc || false; + setIsAdhocScreen(isAdhoc); + setStoreData(storeData1); + getCurrentPosition(storeData1); + getLocationUpdates(storeData1); + return () => {isCancelled.current = true; Geolocation.clearWatch()}; + }, []); + + async function getCurrentPosition(storeData1){ + Geolocation.getCurrentPosition( + async (position) => { + OnLocation(position,storeData1); + }, + (error) => { + notify(ST.Cannotgetuserposition); + }, + { enableHighAccuracy: true, distanceFilter: 0, interval: 1000, fastestInterval: 2000 } + ); + } + + async function getLocationUpdates(storeData1){ + Geolocation.watchPosition( + async (position) => { + OnLocation(position,storeData1); + }, + (error) => { + notify(ST.Cannotgetuserposition); + }, + { enableHighAccuracy: true, distanceFilter: 0, interval: 1000, fastestInterval: 2000, } + ) + } + + async function OnLocation(position,storeData1){ + let loc={lat:position.coords.latitude,lng:position.coords.longitude}; + let storeLat=parseFloat(storeData1.Latitude),storeLng=parseFloat(storeData1.Longitude); + setMarkerPos({ lat:storeLat, lng: storeLng }); + + setMarkerCoordinate(new AnimatedRegion({ latitude:storeLat, longitude: storeLng })); + setMarkerInfo({ latitude:storeLat, longitude: storeLng }); + setCurrentLocation(loc); + + + var distance = checkRange(loc.lat,loc.lng,storeData1.Latitude,storeData1.Longitude); + console.log('distance:',distance); + let dinKM=(distance / 1000); + let distanceinM=(distance=='' || distance==null || isNaN(distance))?' 0 m':( dinKM > 1 ? dinKM.toFixed(1) + ' Km' : distance + ' m'); + setStoreDistanceText(distanceinM); + setStoreDistance(distance); + + + } + + async function setMarkerInfo(coords){ + if(MyMap.current!=null){ + MyMap.current.addressForCoordinate(coords) + .then((res)=>{ + + if(res!=null){ + let title=res.name; + let placeText=`${res.subLocality}, ${res.locality}, ${res.administrativeArea} ${res.postalCode}`; + setMarkerTitle(title); + setMarkerPlaceText(placeText); + } + }) + } + } + + async function animateCamera(coords) { + if(MyMap.current!=null){ + const camera = await MyMap.current.getCamera(); + camera.heading = 7; + camera.pitch = 7; + camera.altitude = 100; + camera.zoom = 19; + camera.center.latitude = coords.latitude; + camera.center.longitude = coords.longitude; + MyMap.current.animateCamera(camera, { duration: 2000 }); + console.log('animate camera'); + } + } + + + function _renderMap(){ + const lat =currentLocation.lat?currentLocation.lat:28.579660; + const lng=currentLocation.lng?currentLocation.lng:77.321110; + + if(currentLocation.lat!=null) + { + return ( + + + + + + + + + + ); + } + else{ + return() + } + } + + + + return ( + + {processing && } + + + + { Object.keys(storeData).length>0 && + + + + + + + + {storeData.StoreName} + + + + + {storeData?.StoreId && + + {ST.StoreId}: + {storeData.StoreId} + + } + { storeData?.StoreCode && + + Store Code: + {storeData.StoreCode} + + } + + + + Address: + {storeData?.Address || storeData?.StoreAddress} + + + + + + + { _renderMap()} + + { + + {`You are ${storeDistanceText} away from the store!`} + + } + + + } + + + + + ); + } + + + +export default connect(mapStateToProps, mapDispatchToProps)(ShowMap); \ No newline at end of file diff --git a/PerformicsSrc/src/screens/SimplePromotion.js b/PerformicsSrc/src/screens/SimplePromotion.js new file mode 100644 index 0000000..c56e46f --- /dev/null +++ b/PerformicsSrc/src/screens/SimplePromotion.js @@ -0,0 +1,768 @@ +import React,{useState,useEffect,useRef} from 'react'; +import Container from '../components/container'; +import { useRoute } from '@react-navigation/native'; +import { globalStyles,customStyles,GetPageTheme } from "../styles/Global"; +import {StatusBar,Image,TextInput,View,Text,ScrollView,TouchableOpacity,Platform,PermissionsAndroid,FlatList, Alert, Animated} from 'react-native'; +import { ReactReduxContext,connect,useSelector, useDispatch } from 'react-redux'; +import { mapStateToProps,mapDispatchToProps } from '../reducers/contextProvider'; +import SQLite from 'react-native-sqlite-2'; +import {notify} from '../components/notify'; +import moment from 'moment'; +import {getDownloadJson,marktext1,marktext2} from '../controller/functions'; +import {version,sloganline,appname,testurl,db, colors_Arr, common_ImagePath,ImageFolderPath} from '../constants/constants'; +import CustomHeader from '../components/customHeader'; +import {AntDesign, Entypo, FontAwesome, MaterialCommunityIcons} from '../components/icons'; +import CustomLoader from '../components/CustomLoader'; +import LinearGradient from 'react-native-linear-gradient'; +import { AppTables } from '../constants/tableConstants'; +import * as RNFS from 'react-native-fs'; +import GradientButton from '../components/gradientButton'; + +import CameraImg from '../assets/performics/camera_front_image.svg' +import { Q_getpaidvisibility, Q_getpromotionmappingList } from '../constants/ConstantQueries'; +import { ConfirmSaveAlert } from '../components/alert'; +import CustomCamera from '../components/Camera'; +import { CustomPicker2 } from '../components/CustomPicker'; + +function SimplePromotion(props) { + const route = useRoute(); + const ST=props.StaticText || {}; + // get all theme styles acc to current theme set + const PageTheme=GetPageTheme(props.DarkMode,route.name); + const customStyle=customStyles(props.DarkMode,route.name); + + + const [processing, setProcessing] = useState(true); + const [loaderTitle, setLoaderTitle] = useState(); + const [isAdhocScreen, setIsAdhocScreen] = useState(false); + const [storeData, setStoreData] = useState({}); + const [currentMenu, setCurrentMenu] = useState({}); + const [promotionData, setPromotionData] = useState([]); + const [globalPromoData, setGlobalPromoData] = useState([]); + const [rerenderdata, setrerenderdata]= useState(0); + const [rerenderdata2, setrerenderdata2]= useState(0); + + const [SKUStockData, setSKUStockData] = useState([]); + const [showAlert, setShowAlert] = useState(false); + const [reasons_list, setReasons_list] = useState([]); + const [show_zoomImage, setShow_zoomImage] = useState(false); + const [zoomImageUrl, setZoomImageUrl] = useState([]); + const [hasUnsavedChanges,setHasUnsavedChanges] = useState(false); + const [showCamera, setShowCamera] = useState(false); + const [getImageProps,setGetImageProps]= useState({}); + const [searchedItem, setSearchedItem]= useState(''); + const [KPIFields, setKPIFields] = useState([]); + + const d1=new Date(); + const d2=moment(d1).format('MM/DD/YYYY'); + const zoomView=useRef(null); + + useEffect(() => { + setLoaderTitle(ST.Loading+'...') + let params=props.route.params? props.route.params:{}; + let storeData1=params.storeData || {}; + let menu1=params.menu || {}; + + let isAdhoc=params.isAdhoc || false; + setIsAdhocScreen(isAdhoc); + setStoreData(storeData1); + setCurrentMenu(menu1); + + getData(storeData1,menu1); + + props.navigation.addListener('beforeRemove', onBeforeRemove); + + return function cleanup() { + props.navigation.removeListener('beforeRemove', onBeforeRemove); + }; + }, []); + + useEffect(() => { + props.navigation.removeListener('beforeRemove', onBeforeRemove); + props.navigation.addListener('beforeRemove', onBeforeRemove); + }, [hasUnsavedChanges]); + + useEffect(() => { + props.navigation.removeListener('beforeRemove', onBeforeRemove); + props.navigation.addListener('beforeRemove', onBeforeRemove); + }, [showCamera]); + + function onBeforeRemove(e){ + if(showCamera==true){ + e.preventDefault(); + setShowCamera(false); + } + else{ + if (hasUnsavedChanges==true) { + e.preventDefault(); // Prevent default behavior of leaving the screen + onRemoveScreen(e); + } + else{ + return; + } + } + } + + function onRemoveScreen(e){ + Alert.alert( + "", + ST.Doyoureallywanttoexitthescreen, + [ + { + text: ST.Cancel, + onPress: () => {}, + style: "cancel" + }, + { text: ST.OK, onPress: () => {setHasUnsavedChanges(false);props.navigation.dispatch(e.data.action);} } + ] + ); + } + + async function getData(storeData1,menu1){ + try { + let {StoreId,ChainId,StateId,StoreTypeId}=storeData1; + let allCats=[]; + await getKPIFields(menu1); + await db.transaction(async function (txn) { + let q2=Q_getpromotionmappingList(storeData1); + // let q2=Q_getpaidvisibility(storeData1); + let q=`Select * From Master_NonVisibility`; + await txn.executeSql(q,[],async function (txn2, txnres2) { + if(txnres2.rows.length>0){ + let arr=[]; + for(var i=0;i0){ + let arr=[]; + for(var i=0;i{ + db.transaction(async function (txn) { + let q=`select * from Mapping_MenuConfiguration where ScreenName='${menu1.ScreenName}'`; + await txn.executeSql(q,[],async function (txn2, txnres) { + if(txnres.rows.length>0){ + let arr=[]; + for(var i=0;i{ + return val; + }).catch((err)=>{ + console.log(err); + return false; + }); + } + + async function getPromotion(prom_mappings=[],storeData1={},menu1){ + + try { + let {StoreId,ChainId,StateId,StoreTypeId}=storeData1; + + await db.transaction(async function (txn) { + let allSKUData=[]; + let completed_tasks=0; + await Promise.all( + prom_mappings.map(async (item,index) => { + let seletlist=`p.PROMOTION_ID as PromoId,p.PROMOTION as Promotion,p.IS_PRESENT as IsPresent,p.REASON_ID as ReasonId,p.REASON as Reason,p.IMAGE1 as Image1,m.Promotion_Line2,m.PromotionType,m.Camera1Enable,m.Camera2Enable`; + let sku_q=`SELECT ${seletlist} FROM ${AppTables.SIMPLE_PROMOTION_DATA} p Inner Join Mapping_Promotion m on m.PromoId=p.PROMOTION_ID WHERE p.STORE_ID='${StoreId}' and p.VISIT_DATE='${d2}' and p.SUB_CATEGORY_ID='${item.SubCategoryId}' `; + + let sku_q2=`SELECT DISTINCT m.PromoId as PromoId,m.Promotion as Promotion,m.Promotion_Line2,m.PromotionType,m.Camera1Enable,m.Camera2Enable FROM Mapping_Promotion m where m.SubCategoryId='${item.SubCategoryId}' and m.ChainId='${ChainId}' and m.StoreTypeId='${StoreTypeId}'and m.StateId='${StateId}'`; + + return await txn.executeSql(sku_q,[],async function (txn2, txnres) { + console.log('inserted data:',txnres.rows.length); + if(txnres.rows.length>0){ + let arr=[]; + + for(var i=0;i0){ + let arr=[]; + console.log('avlbl prmotions:',txnres2.rows.length); + for(var i=0;i{ + + }); + }); + } catch (err) { + console.log(err); + } + } + + + + async function getImage(imgdata){ + let cat=getImageProps.cat || ''; + let skuItem=getImageProps.skuItem || ''; + let type=getImageProps.type || ''; + if(typeof imgdata =='object' && imgdata.errorCode=='camera_unavailable'){ + notify(ST.Cameraunavailable); + } + else if(typeof imgdata =='object' && imgdata.uri!=null){ + const img=imgdata; + const imgurl=img.uri, imgWidth=img.width, imgHeight=img.height; + let isImgFromGallery=img.fromGallery!=null?img.fromGallery:false; + let picture_clickedd=isImgFromGallery==true?img.datetime:new Date(); + let picture_clicked_time=moment(picture_clickedd).format('DD-MM-YYYY HH:mm:ss') + const mark_text1=picture_clicked_time; + const mark_text2='Store Name:'+storeData.StoreName+' | Store Id:'+storeData.StoreId+' | User Id:'+storeData.EmpId+' | Image Type: Promotion'+' | Date:'+picture_clicked_time; + + await marktext1(mark_text1,imgurl) + .then((res)=>{ + if(res.success){ + let uri=res.uri; + marktext2(mark_text2,uri,imgWidth,imgHeight) + .then((res)=>{ + if(res.success){ + + let picture_clicked_date=moment(picture_clickedd).format('YYYYMMDD'); + let picture_clicked_time=moment(picture_clickedd).format('HHmmss'); + let filename=storeData.StoreId+'_'+(props.UserId || '')+'_PromotionImg-'+picture_clicked_date+'_'+picture_clicked_time+'.jpg'; + + let allData=SKUStockData; + let defData={'SubCategoryId':cat.SubCategoryId,'PromoId':skuItem.PromoId}; + const cindex=allData.findIndex(ci=>ci.SubCategoryId==cat.SubCategoryId && ci.PromoId==skuItem.PromoId); + const imgData=cindex>=0?(allData[cindex] || defData):defData; + let image_key=type=='2'?'Image2':'Image1'; + let image_path_key=type=='2'?'Image2Path':'Image1Path'; + imgData[image_key]=filename; + + // renamefile + let imagePath=ImageFolderPath+currentMenu.ScreenName+"/"+filename; + RNFS.copyFile(res.uri, imagePath) + .then(resn => { + let uri='file://'+imagePath; + console.log('image marker',uri); + imgData[image_path_key]=uri; + console.log(imgData); + cindex>=0?allData[cindex]=imgData:allData.push(imgData); + + setSKUStockData(allData); + setHasUnsavedChanges(true); + setrerenderdata2(!rerenderdata2); + }) + .catch(err => { + console.log('ERROR: image file write failed!!!'); + console.log(err.message, err.code); + }); + + } + else{ + if(res.imagenotfound){ + notify(ST.Pleasecaptureaimage); + } + else{ + notify(res.error); + } + } + }); + } + else{ + if(res.imagenotfound){ + notify(ST.Pleasecaptureaimage); + } + else{ + notify(res.error); + } + } + }); + } + } + + async function openCamera(cat,skuItem,type='1'){ + setGetImageProps({'cat':cat,'skuItem':skuItem,'type':type}); + setShowCamera(true); + // props.navigation.navigate('CameraScreen',{'getImage':getImage,'cameraType':'back'}) + } + + async function submitOpeningStock(){ + let isvalid=await validate(); + if(isvalid){ + setShowAlert(true); + } + } + + async function saveData(){ + setHasUnsavedChanges(false); + setShowAlert(false); + setLoaderTitle(ST.SavingData+'...'); + setProcessing(true); + try { + let {StoreId,ChainId,StateId,StoreTypeId}=storeData; + await db.transaction(async function (txn) { + + let q=`DELETE FROM ${AppTables.SIMPLE_PROMOHDR_DATA} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' `; + let q2=`DELETE FROM ${AppTables.SIMPLE_PROMOTION_DATA} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' `; + + // remove old data + await txn.executeSql(q,[],async function (txn2, txnres) { + console.log('promotions hdr data deleted'); + },function (txnE,txnerr) { console.log(txnerr); },); + + await txn.executeSql(q2,[],async function (txn2, txnres) { + console.log('promotions data deleted'); + },function (txnE,txnerr) { console.log(txnerr); },); + + + let seq_q=` select seq from sqlite_sequence where name="${AppTables.SIMPLE_PROMOHDR_DATA}" `; + await txn.executeSql(seq_q,[],async function (txn2, txnres) { + if(txnres.rows.length>0){ + let data=txnres.rows.item(0); + let seq=data.seq; + insertData(seq); + } + else{ + insertData(0); + } + },function (txnE,txnerr) { console.log(txnerr); insertData(0); },); + + + }); + } catch (err) { + console.log(err); + } + } + + async function insertData(seq=0){ + try { + console.log(seq); + let {StoreId,ChainId,StateId,StoreTypeId,ExpiryStock}=storeData; + + await db.transaction(async function (txn) { + var values='',child_values='',checklist_values=''; + + for(var i=0;ici.SubCategoryId==item.SubCategoryId && ci.PromoId==skuItem.PromoId); + const skud=skud_index>=0?(allSKUData[skud_index] || {}) : {}; + + child_values+=` ('${seq}','${StoreId}','${d2}','${item.SubCategoryName}','${item.SubCategoryId}','${skuItem.Promotion}','${skuItem.PromoId}','${skud.isPresent}','${(skud.ReasonId || 0)}','${(skud.Reason || '')}','${(skud.Image1)}','${d2}') `; + } + } + + let add_HdrData=`INSERT INTO ${AppTables.SIMPLE_PROMOHDR_DATA} (STORE_ID,VISIT_DATE,SUB_CATEGORY,SUB_CATEGORY_ID,ADDED_DATE) VALUES ${values} `; + + let add_ChildData=`INSERT INTO ${AppTables.SIMPLE_PROMOTION_DATA} (COMMON_ID,STORE_ID,VISIT_DATE,SUB_CATEGORY,SUB_CATEGORY_ID,PROMOTION,PROMOTION_ID,IS_PRESENT,REASON_ID,REASON,IMAGE1,ADDED_DATE ) VALUES ${child_values} `; + + + await txn.executeSql(add_HdrData,[],async function (txn2, txnres) { + console.log('promotion header added'); + await txn.executeSql(add_ChildData,[],async function (txn2, txnres) { + console.log('promotion child added'); + notify(ST.Promotionupdatedsuccessfully); + setProcessing(false); + props.navigation.goBack(); + + },function (txnE,txnerr) { console.log(txnerr);setProcessing(false);notify(ST.CannotupdatePromotion) },); + },function (txnE,txnerr) { console.log(txnerr);setProcessing(false);notify(ST.CannotupdatePromotion) },); + }); + } catch (err) { + console.log(err); + } + } + + + async function validate(){ + let isValid=true; + await Promise.all( + promotionData.map(async (item,index) => { + if(isValid){ + + let promotionlist=item.promotionlist || []; + if(promotionlist.length>0){ + await Promise.all( + promotionlist.map(async (skuItem,skuIndex) => { + let Camera1Enable=(skuItem.Camera1Enable==1 || skuItem.Camera1Enable=='true')?true:false; + if(isValid){ + let skuData=SKUStockData.find(ci=>ci.SubCategoryId==item.SubCategoryId && ci.PromoId==skuItem.PromoId) || {}; + if(skuData.isPresent!=0 && (skuData.isPresent==null || skuData.isPresent=='')){ + notify(ST.Pleaseselectifpromotionpresentornotfor+' '+item.SubCategoryName+' '+skuItem.Promotion,'SHORT'); + isValid=false; + }else if((skuData.isPresent==1) && Camera1Enable==true && ((skuData.Image1==null || skuData.Image1==''))){ + notify(ST.Pleaseclickallimagesfor+' '+item.SubCategoryName+' '+skuItem.Promotion,'SHORT'); + isValid=false; + } + else if((skuData.isPresent!=1) && ((skuData.ReasonId==null || skuData.ReasonId==''))){ + notify(ST.Pleaseselectreasonfor+' '+item.SubCategoryName+' '+skuItem.Promotion,'SHORT'); + isValid=false; + } + } + }) + ); + } + } + }) + ); + + console.log('isValid:',isValid); + return isValid; + } + + function onStockValChange(item,skuItem,val,key,isChoiceSelect=0){ + let allSKUData=SKUStockData; + let defData={'SubCategoryId':item.SubCategoryId,'PromoId':skuItem.PromoId}; + const skud_index=allSKUData.findIndex(i=>i.SubCategoryId==item.SubCategoryId && i.PromoId==skuItem.PromoId); + const skud=skud_index>=0?(allSKUData[skud_index] || defData) : defData; + skud[key]=val; + + if(isChoiceSelect==1 && (skud.isPresent!=1 && skud.isPromoTalkerAvlbl!=1 && skud.isStockAvlbl!=1 )){ + skud.Image1=''; + skud.Image1Path=''; + } + skud_index>=0?allSKUData[skud_index]=skud:allSKUData.push(skud); + + setSKUStockData(allSKUData); + setHasUnsavedChanges(true); + setrerenderdata(!rerenderdata); + } + + + function onChoiceSelect(item,skuItem,val,key,animatedChoice){ + var val1=0; + if(val==1){ + val1=1; + } + + if(animatedChoice!=null){ + Animated.timing(animatedChoice, { + toValue: val1, + duration:400, + useNativeDriver:false, + }).start(); + } + onStockValChange(item,skuItem,val,key,1) + } + + function onselectionChange(option,keyLbl,keyVal,otherData){ + let skuItem=otherData.skus,item=otherData.cat; + let allSKUData=SKUStockData; + let defData={'SubCategoryId':item.SubCategoryId,'DisplayId':skuItem.DisplayId}; + const skud_index=allSKUData.findIndex(i=>i.SubCategoryId==item.SubCategoryId && i.DisplayId==skuItem.DisplayId); + const skud=skud_index>=0?(allSKUData[skud_index] || defData) : defData; + skud[keyVal]=option.value; + skud[keyLbl]=option.label; + + skud_index>=0?allSKUData[skud_index]=skud:allSKUData.push(skud); + console.log('allSKUData:',allSKUData); + setSKUStockData(allSKUData); + setHasUnsavedChanges(true); + setrerenderdata(!rerenderdata); + } + + function onSaveCancel(){ + setShowAlert(false); + } + + function FilterStores(searchedQry){ + searchedQry=searchedQry.toLowerCase(); + console.log('searchedQry',searchedQry); + let arr=[]; + var arr2=[]; + if(searchedQry!=null && searchedQry!=''){ + + for(let i=0;i0){ + arr.push(arr2); + } + } + } + + + } + } + else{ + arr=globalPromoData; + } + + setPromotionData(arr); + setrerenderdata(!rerenderdata) + setrerenderdata2(!rerenderdata2) + } + + return ( + + {processing && } + + {ConfirmSaveAlert(props,showAlert,onSaveCancel,saveData)} + {setShowCamera(false);getImage(imgData)}} showCamera={showCamera} onHideCamera={()=>{setShowCamera(false);}}/> + + + + + {setSearchedItem(val); FilterStores(val)}} + /> + {FilterStores(searchedItem)}}> + + + + { Object.keys(storeData).length>0 && + { + const cat=item; + + return( + + + + {item.SubCategoryName} + + + + + + { + + { + const skus=item; + const sku_index=index; + let thisCatSkuData_i=SKUStockData.findIndex(i=>i.SubCategoryId==cat.SubCategoryId && i.PromoId==skus.PromoId); + let thisCatSkuData=thisCatSkuData_i>=0?(SKUStockData[thisCatSkuData_i] || {}):{}; + let isPresent=thisCatSkuData.isPresent!=null?thisCatSkuData.isPresent:'0'; + let Image1Path=(thisCatSkuData.Image1Path!=null && thisCatSkuData.Image1Path!='')?thisCatSkuData.Image1Path:''; + let ReasonId=thisCatSkuData.ReasonId!=null?thisCatSkuData.ReasonId:''; + let Reason=thisCatSkuData.Reason!=null?thisCatSkuData.Reason:''; + + let Camera1Enable=(item.Camera1Enable==1 || item.Camera1Enable=='true')?true:false; + + var xpos=isPresent==1?-75:0; + if(skus.animatedChoice!=null ){ + xpos=skus.animatedChoice.interpolate({ + inputRange:[0,1], + outputRange:[0,-75], + }); + } + + + // let isCamera1EnableIndex=KPIFields.findIndex(i=>i.KPIFieldName=='Camera1Enable') + // let isCamera1EnableKPIObj=isCamera1EnableIndex>=0?KPIFields[isCamera1EnableIndex]:{}; + // let isCamera1Enable=isCamera1EnableIndex>=0?isCamera1EnableKPIObj['KPIFieldEnable']:true; + + // let isCamera2EnableIndex=KPIFields.findIndex(i=>i.KPIFieldName=='Camera2Enable') + // let isCamera2EnableKPIObj=isCamera2EnableIndex>=0?KPIFields[isCamera2EnableIndex]:{}; + // let isCamera2Enable=isCamera2EnableIndex>=0?isCamera2EnableKPIObj['KPIFieldEnable']:true; + + + return( + + {skus.Promotion} + + {(skus.Promotion_Line2!=null && skus.Promotion_Line2!='undefined' && skus.Promotion_Line2!='') && {(skus.Promotion_Line2 || '')}} + + + + + {ST.IsPresent} + + + + + {onChoiceSelect(cat,skus,1,'isPresent',skus.animatedChoice)}}> + {ST.Yes} + + {onChoiceSelect(cat,skus,0,'isPresent',skus.animatedChoice)}}> + {ST.No} + + + + + {isPresent!='1' && + {ST.SelectReason} + {} + } + + {(isPresent=='1' && Camera1Enable==true) && + + {ST.CaptureImage} + + + { (Image1Path=='' || Image1Path==null) && + {openCamera(cat,skus,'1')}}> + + + } + { (Image1Path!='' && Image1Path!=null) && + + + {openCamera(cat,skus,'1')}}> + + + + } + + + + } + + + + + + + ) + }}/> + } + + + ); + }} + /> + } + + {submitOpeningStock()}}/> + + + + + + ); +} + + + +export default connect(mapStateToProps, mapDispatchToProps)(SimplePromotion); \ No newline at end of file diff --git a/PerformicsSrc/src/screens/SplashScreen.js b/PerformicsSrc/src/screens/SplashScreen.js new file mode 100644 index 0000000..b0983bd --- /dev/null +++ b/PerformicsSrc/src/screens/SplashScreen.js @@ -0,0 +1,71 @@ +import React, { useEffect,useContext ,useState} from 'react'; +import SplashScreen from 'react-native-splash-screen'; +import Container from '../components/container'; +import { useRoute} from '@react-navigation/native'; +import { globalStyles,customStyles,GetPageTheme } from "../styles/Global"; +import { ReactReduxContext,connect,useSelector, useDispatch } from 'react-redux'; +import { mapStateToProps,mapDispatchToProps } from '../reducers/contextProvider'; +import {get_item,set_item,clear_item} from '../components/localStorage'; + + +//Splash Screen +function Splash (props) { + + // get dynamic styles based on dark theme or pageactive + const route = useRoute(); + const PageTheme=GetPageTheme(props.DarkMode,route.name); + const customStyle=customStyles(props.DarkMode,route.name); + + const [state, setState] = useState({islogin:false,firsttime:true}); + + useEffect(() => { + get_token_from_local(); + }, []); + + + async function get_token_from_local(){ + // await clear_item('islogin'); + // await clear_item('loginToken'); + let token=await get_item('loginToken'); + let is_login=await get_item('islogin'); + let mpin=await get_item('mpin'); + let firsttime=await get_item('firsttime'); + let ft=(firsttime=='done'?false:true); + let isl=((is_login=='done' && token!='' && token!=null && token!=undefined)?true:false); + let is_mpin=(mpin!='' && mpin!=undefined && mpin!=null)?true:false; + + setState({...state,firsttime:ft,islogin:isl}) + const pdata={firsttime:ft,islogin:isl,securityToken:token}; + props.set_session(pdata); + navigateToScreen(ft,isl,is_mpin); + } + + async function navigateToScreen(firsttime,islogin,ismpinavlbl){ + console.log(firsttime,islogin); + var routename=''; + if(firsttime){ + routename='Project'; + } + else if(islogin && ismpinavlbl){ + routename='MpinLogin';//'MpinLogin'; + } + else if(islogin){ + routename='Mpin';//'MpinLogin'; + } + else{ + routename='Login';//'MpinLogin'; + } + + //clear stack and navigate + props.navigation.reset({index: 0,routes: [{name: routename}],}); + SplashScreen.hide(); + } + + return ( + + + + ); +} + +export default connect(mapStateToProps, mapDispatchToProps)(Splash) \ No newline at end of file diff --git a/PerformicsSrc/src/screens/Stock.js b/PerformicsSrc/src/screens/Stock.js new file mode 100644 index 0000000..a669e83 --- /dev/null +++ b/PerformicsSrc/src/screens/Stock.js @@ -0,0 +1,2398 @@ +import React, { useState, useEffect, useRef } from 'react'; +import Container from '../components/container'; +import { useRoute } from '@react-navigation/native'; +import { customStyles, GetPageTheme } from "../styles/Global"; +import { Image, TextInput, View, Text, TouchableOpacity, Platform, FlatList, Alert, KeyboardAvoidingView, Keyboard, Animated, AppState } from 'react-native'; +import { connect, } from 'react-redux'; +import { mapStateToProps, mapDispatchToProps } from '../reducers/contextProvider'; +import { notify } from '../components/notify'; +import moment from 'moment'; +import { checkMDStockScreenExists, getKPIFields, getKPIFieldsWithSpecific, restore_ImageWithMetaData, validateNumber } from '../controller/functions'; +import { get_item, set_item, clear_item } from '../components/localStorage'; +import { db, ImageFolderPath, HierarchyTbls } from '../constants/constants'; +import CustomHeader from '../components/customHeader'; +import { AntDesign, Entypo, Fontisto, Ionicons, MaterialCommunityIcons } from '../components/icons'; +import CustomLoader from '../components/CustomLoader'; +import LinearGradient from 'react-native-linear-gradient'; +import { AppTables } from '../constants/tableConstants'; +import * as RNFS from 'react-native-fs'; +import GradientButton from '../components/gradientButton'; +import CheckBox from '@react-native-community/checkbox'; +import CameraImg from '../assets/performics/camera_front_image.svg' +import { ConfirmSaveAlert } from '../components/alert'; +import CustomCamera from '../components/Camera'; +import DateTimePicker from '@react-native-community/datetimepicker'; +import CustomModal2 from '../components/CustomModal2'; +import YesNoToggle from '../components/YesNoToggle'; +import { CustomPickerStock } from '../components/CustomPicker'; +///jeeeeeee + +function Stock(props) { + const route = useRoute(); + const ST = props.StaticText || {}; + // get all theme styles acc to current theme set + const PageTheme = GetPageTheme(props.DarkMode, route.name); + const customStyle = customStyles(props.DarkMode, route.name); + const [processing, setProcessing] = useState(true); + const [loaderTitle, setLoaderTitle] = useState(); + const [isAdhocScreen, setIsAdhocScreen] = useState(false); + const [storeData, setStoreData] = useState({}); + const [StoreCameraAllow, setStoreCameraAllow] = useState(true); + const [currentMenu, setCurrentMenu] = useState({}); + const [brandData, setBrandData] = useState([]); + const [globalBrandData, setGlobalBrandData] = useState([]); + const [rerenderdata, setrerenderdata] = useState(0); + const [rerenderdata2, setrerenderdata2] = useState(0); + const [catImages, setCatImages] = useState([]); + const [SKUStockData, setSKUStockData] = useState([]); + const [currentStock, setCurrentStock] = useState({}); + const [currentBrand, setCurrentBrand] = useState({}); + const [currentProduct, setCurrentProduct] = useState({}); + const [KPIFields, setKPIFields] = useState([]); + const [KPIFieldsWithoutFilter, setKPIFieldsWithoutFilter] = useState([]); + const [showSwitchCamera, setShowSwitchCamera] = useState(false); + const [showAlert, setShowAlert] = useState(false); + const [showStockModal, setShowStockModal] = useState(false); + const [showDatePicker, setShowDatePicker] = useState(false); + const [rerendermodal, setrerendermodal] = useState(0); + const [toRemoveId, setToRemoveId] = useState(''); + const [toRemoveCat, setToRemoveCat] = useState({}); + const [toRemoveSKU, setToRemoveSKU] = useState({}); + const [showRemoveConfirm_M, setShowRemoveConfirm_M] = useState(false); + const [searchedItem, setSearchedItem] = useState(''); + const [hasUnsavedChanges, setHasUnsavedChanges] = useState(false); + const [showCamera, setShowCamera] = useState(false); + const [getImageProps, setGetImageProps] = useState({}); + const [activeSections, setActiveSections] = useState([]); + const [ShowCatWise, setShowCatWise] = useState(false); + const [CatData, setCatData] = useState(false); + const [ColId, setColId] = useState(""); + const [ColName, setColName] = useState(""); + const [IsStockScreen, setIsStockScreen] = useState(false); + const [HeaderIdCol, setHeaderIdCol] = useState(""); + const inputRefs = useRef({}); + const outerFlatListRef = useRef(null); + const middleFlatListRefs = useRef({}); + const innerFlatListRefs = useRef({}); + + const hasUnsavedChangesRef = React.useRef(hasUnsavedChanges); + const WindowDataRef = React.useRef(SKUStockData); + const StoreIdRef = React.useRef(null); + const ScreenNameRef = React.useRef(''); + const [errorfield, setErrorField] = useState({}); + const [error, setError] = useState(false); + const PSGroupData = React.useRef(''); // Grouping data (Category/ SubCategory/ Brand ) for BG save fuunctionality with Partial Save Scenario + const BGPSAllow = React.useRef(false); + const [isPartialEnable, setisPartialEnable] = useState(false); + const [PackTypeList, setPackTypeList] = useState([]); + const d1 = new Date(); + const d2 = moment(d1).format('MM/DD/YYYY'); + + useEffect(() => { + setLoaderTitle(ST.Loading + '...') + let params = props.route.params ? props.route.params : {}; + let storeData1 = params.storeData || {}; + let menu1 = params.menu || {}; + let ShowCatWise1 = params.ShowCatWise != null ? params.ShowCatWise : false; + let CatData1 = params.CatData != null ? params.CatData : {}; + let isAdhoc = params.isAdhoc || false; + setIsAdhocScreen(isAdhoc); + setShowCatWise(ShowCatWise1); + setCatData(CatData1); + setStoreData(storeData1); + setCurrentMenu(menu1); + let cameraAllow = storeData1.CameraAllow == 'true' || storeData1.CameraAllow == 1 ? true : false; + setStoreCameraAllow(cameraAllow); + StoreIdRef.current = storeData1.StoreId + ScreenNameRef.current = menu1.ScreenName + getData(storeData1, menu1, ShowCatWise1, CatData1); + const AppStateSubscription = AppState.addEventListener('change', (pro) => { _handleAppStateChange(pro) }); + const unsubscribe = props.navigation.addListener('beforeRemove', onBeforeRemove); + return function cleanup() { + AppStateSubscription.remove(); + return unsubscribe; + }; + }, []); + + const _handleAppStateChange = async (nextAppState) => { + if (nextAppState == 'background' && hasUnsavedChangesRef.current == true) { + let newData = { + storeBGData: WindowDataRef.current, + menuName: ScreenNameRef.current, + StoreId1: StoreIdRef.current, + visiteDate: d2, + BGPSAllow: BGPSAllow.current, + PSGroupData: PSGroupData.current, + } + let WindowsStr = JSON.stringify(newData) + console.log("WindowsStr", WindowsStr) + await set_item('storeData', WindowsStr); + } + } + + useEffect(() => { + const unsubscribe = props.navigation.addListener('beforeRemove', onBeforeRemove); + return unsubscribe; + }, [hasUnsavedChanges]); + + useEffect(() => { + const unsubscribe = props.navigation.addListener('beforeRemove', onBeforeRemove); + return unsubscribe; + }, [showCamera]); + + function onBeforeRemove(e) { + if (showCamera == true) { + e.preventDefault(); + setShowCamera(false); + } + else { + if (hasUnsavedChanges == true) { + e.preventDefault(); // Prevent default behavior of leaving the screen + onRemoveScreen(e); + } + else { + return; + } + } + } + + function BgUnsavedChanges(val) { + hasUnsavedChangesRef.current = val + setHasUnsavedChanges(val); + } + + function BgWindowData(val) { + WindowDataRef.current = val + setSKUStockData(val); + } + + function onRemoveScreen(e) { + Alert.alert( + "", + ST.Doyoureallywanttoexitthescreen, + [ + { + text: ST.Cancel, + onPress: () => { }, + style: "cancel" + }, + { + text: ST.OK, onPress: async () => { + // setHasUnsavedChanges(false); + BgUnsavedChanges(false) + await clear_item('storeData') + props.navigation.dispatch(e.data.action); + } + } + ] + ); + } + + + + async function getData(storeData1, menu1, ShowCatWise1, CatData1 = {}) { + try { + let { StoreId } = storeData1; + let allCats = []; + let allSKUData = []; + let AllKPIFields = await getKPIFields(menu1); + setKPIFields(AllKPIFields); + let isSTOCKExists = await checkMDStockScreenExists(storeData1, 'STOCK') + setIsStockScreen(isSTOCKExists); + let AllKPIFieldsWithoutFilter = await getKPIFieldsWithSpecific(); + setKPIFieldsWithoutFilter(AllKPIFieldsWithoutFilter) + // set switch camera flag as defined in mapping menu flag (if exists) + let SwitchingCameraI = AllKPIFields.findIndex(i => i.KPIFieldName == 'SwitchingCamera'); + let SwitchingCameraObj = SwitchingCameraI >= 0 ? AllKPIFields[SwitchingCameraI] : {}; + let SwitchingCamera = SwitchingCameraI >= 0 ? SwitchingCameraObj['KPIFieldEnable'] : false; + setShowSwitchCamera(SwitchingCamera); + + let innerHeaderVwIndex = AllKPIFields.findIndex(i => i.KPIFieldName == 'InnerHeaderView') + let innerHeaderVwObj = innerHeaderVwIndex >= 0 ? AllKPIFields[innerHeaderVwIndex] : {}; + let isInnerHeaderVwEnable = innerHeaderVwIndex >= 0 ? innerHeaderVwObj['KPIFieldEnable'] : false; + let innerHeaderName = innerHeaderVwIndex >= 0 ? innerHeaderVwObj['KPIFieldDisplayName'] : ''; + let innerChildVwIndex = AllKPIFields.findIndex(i => i.KPIFieldName == 'InnerChildView') + let innerChildVwObj = innerChildVwIndex >= 0 ? AllKPIFields[innerChildVwIndex] : {}; + let isInnerChildVwEnable = innerChildVwIndex >= 0 ? innerChildVwObj['KPIFieldEnable'] : false; + let innerChildName = innerChildVwIndex >= 0 ? innerChildVwObj['KPIFieldDisplayName'] : ''; + + let partialSvIndex = AllKPIFields.findIndex(i => i.KPIFieldName == 'PartialSaveAllow') + let partialSvObj = partialSvIndex >= 0 ? AllKPIFields[partialSvIndex] : {}; + let isPartialEnable = partialSvIndex >= 0 ? partialSvObj['KPIFieldEnable'] : false; + let patialSaveName = partialSvIndex >= 0 ? partialSvObj['KPIFieldDisplayName'] : ''; + + let ShowCompetionSku = AllKPIFields?.findIndex((i) => i.KPIFieldName == "ShowCompetionSku"); + let ShowCompetionObj = ShowCompetionSku >= 0 ? AllKPIFields[ShowCompetionSku] : {}; + let ShowCompetionSkuNo = ShowCompetionObj?.KPIFieldDisplayName || 0 + let ShowCompetionSkuNoSplitArr = ShowCompetionObj?.KPIFieldDisplayName?.split(",") || [] + const isCompetitorValues = ShowCompetionSkuNoSplitArr; + + // Check if isCompetitorValues is empty, null, or undefined + let isCompetitorClause = !isCompetitorValues || isCompetitorValues.length === 0 ? "p.IsCompetitor = 0" : `p.IsCompetitor IN (${isCompetitorValues.join(",")})`; + console.log("checkiscpmp--", isCompetitorClause) + let { PSAllow, PSTableName } = menu1; + PSTableName = PSTableName != null ? PSTableName : ''; + PSAllow = PSAllow != null ? PSAllow : false; + setisPartialEnable(isPartialEnable); + + //storeBGData check + let storeBGData1 = [], bgStoreJson = {}, isBgDataExists = false; + let windData = await get_item('storeData') + if (windData != null && windData != '') { + let StoreJson = JSON.parse(windData) + let { storeBGData, menuName, StoreId1, visiteDate } = StoreJson + if (storeBGData.length > 0 && menuName == menu1.ScreenName && StoreId1 == StoreId && visiteDate == d2) { + isBgDataExists = true; + storeBGData1 = storeBGData; + bgStoreJson = StoreJson + // setSKUStockData(storeBGData); + BgUnsavedChanges(true) + BgWindowData(storeBGData); + } + } + + // call this after storeBGData check + if (PSAllow) { + // if Partial save is allowed then add the currently active category or group in BG var + BGPSAllow.current = true; + PSGroupData.current = CatData1; + } + + await db.transaction(async function (txn) { + let orderBy = '', idCol = '', nameCol = '', conditionIdCol = ""; + let HeaderOrderBy = '', HeaderIdCol = '', HeaderNameCol = ''; + let ChildOrderBy = '', ChildIdCol = '', ChildNameCol = ''; + + if (isPartialEnable) { + console.log("partialsave----", isPartialEnable, innerHeaderName) + if (PSTableName.toLowerCase() == HierarchyTbls.Master_Category.toLowerCase()) { + console.log("partialsave3----", idCol) + conditionIdCol = 'CategoryId'; + + } else if (PSTableName.toLowerCase() == HierarchyTbls.Master_Brand.toLowerCase()) { + console.log("partialsave3----", idCol) + conditionIdCol = 'BrandId'; + } + else { + console.log("partialsave4----", idCol) + conditionIdCol = 'SubCategoryId'; + } + + } + + if (isInnerHeaderVwEnable && innerHeaderName.toLowerCase() == HierarchyTbls.Master_Category.toLowerCase()) { + HeaderIdCol = 'CategoryId', HeaderNameCol = 'CategoryName'; + HeaderOrderBy = 'CategorySequence'; + } else if (isInnerHeaderVwEnable && innerHeaderName.toLowerCase() == HierarchyTbls.Master_SubCategory.toLowerCase()) { + HeaderIdCol = 'SubCategoryId', HeaderNameCol = 'SubCategoryName'; + HeaderOrderBy = ' SubCategorySequence '; + } else if (isInnerHeaderVwEnable && innerHeaderName.toLowerCase() == HierarchyTbls.Master_Brand.toLowerCase()) { + HeaderIdCol = 'BrandId', HeaderNameCol = 'BrandName'; + HeaderOrderBy = ' BrandSequence '; + } else if (isInnerHeaderVwEnable && innerHeaderName.toLowerCase() == HierarchyTbls.Master_SubBrand.toLowerCase()) { + HeaderIdCol = 'SubBrandId', HeaderNameCol = 'SubBrandName'; + HeaderOrderBy = ' SubBrandSequence '; + } else { + HeaderIdCol = 'SubCategoryId', HeaderNameCol = 'SubCategoryName'; + HeaderOrderBy = ' SubCategorySequence '; + } + + + if (isInnerChildVwEnable && innerChildName.toLowerCase() == HierarchyTbls.Master_SubCategory.toLowerCase()) { + ChildIdCol = 'SubCategoryId', ChildNameCol = 'SubCategoryName'; + ChildOrderBy = ' SubCategorySequence'; + } else if (isInnerChildVwEnable && innerChildName.toLowerCase() == HierarchyTbls.Master_Brand.toLowerCase()) { + ChildIdCol = 'BrandId', ChildNameCol = 'BrandName'; + ChildOrderBy = ' BrandSequence '; + } else if (isInnerChildVwEnable && innerChildName.toLowerCase() == HierarchyTbls.Master_SubBrand.toLowerCase()) { + ChildIdCol = 'SubBrandId', ChildNameCol = 'SubBrandName'; + ChildOrderBy = ' SubBrandSequence '; + } else { + ChildIdCol = 'BrandId', ChildNameCol = 'BrandName'; + ChildOrderBy = ' BrandSequence '; + } + let IdVal = CatData1[conditionIdCol]; + //console.log("idcolumn---", IdVal) + let NameVal = CatData1[HeaderNameCol || nameCol]; + //console.log(idCol, 'idColidCol') + setColId(idCol); + setColName(nameCol); + setHeaderIdCol(HeaderIdCol); + let COMPStockAllow_Index = AllKPIFields.findIndex(i => i.KPIFieldName == 'COMPStockAllow'); + let COMPStockAllow_Obj = COMPStockAllow_Index >= 0 ? AllKPIFields[COMPStockAllow_Index] : {}; + let isCOMPStockAllow = COMPStockAllow_Index >= 0 ? COMPStockAllow_Obj['KPIFieldEnable'] : false; + let join = '', join2 = '', join3 = '', q = '', q2 = ''; + join = ` inner join Mapping_ProductAssortmentStorewise m on p.ProductId=m.ProductId `; + join2 = ` inner join Master_Category mc on mc.CategoryId=p.CategoryId `; + join3 = ` Left Outer Join ${AppTables.STOCK2HDR_DATA} st on st.SUB_CATEGORY_ID=p.${HeaderIdCol || idCol} and st.STORE_ID='${StoreId}' and st.VISIT_DATE='${d2}' `; + q = `select distinct p.${HeaderIdCol || idCol},p.${HeaderNameCol || nameCol},st.IMAGE,st.IMAGEPATH,p.CategoryId as CatId from Product_Master p ${join} ${join2} ${join3} where m.StoreId='${StoreId}' ${(isCOMPStockAllow == true ? '' : ` and ${isCompetitorClause} `)} `; + if (ShowCatWise1 == true) { + q += ` and (p.${conditionIdCol}='${IdVal}' or p.${conditionIdCol}= ${IdVal}) `; + } + q += ` order by p.${HeaderNameCol || nameCol}`; + + let q23 = `Select Distinct PackType,ImageAllow,RemarkAllow from Master_ProductPackType order by PackType`; + await txn.executeSql(q23, [], async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + let arr = []; + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + arr.push(data); + if (i == txnres2.rows.length - 1) { + console.log("PackTypeList", arr) + setPackTypeList(arr); + } + } + } + }, function (txnE, txnerr) { console.log(txnerr); },); + await txn.executeSql(q, [], async function (txn2, txnres) { + console.log('added products subcats:', txnres.rows.length) + if (txnres.rows.length > 0) { + let arr = []; + for (var i = 0; i < txnres.rows.length; i++) { + let data = txnres.rows.item(i); + data['isCollapsed'] = false; + let br_d = await getBrands(storeData1, menu1, data, allSKUData, AllKPIFields, (ChildIdCol || idCol), (ChildNameCol || nameCol), CatData1, ShowCatWise1, (HeaderIdCol || idCol)); + //console.log("br_d----", br_d) + let brands = br_d['brands']; + let products_data = br_d['products_data']; + data['brandList'] = brands; + let defData = { 'SubCategoryId': data[HeaderIdCol || idCol], 'ImageName': data.IMAGE, 'ImagePath': data.IMAGEPATH, 'CatId': data.CatId }; + allCats.push(defData); + allSKUData.concat(products_data); + data.SubCategoryId = data[HeaderIdCol || idCol] + data.SubCategoryName = data[HeaderNameCol || nameCol] + arr.push(data); + if (i == txnres.rows.length - 1) { + if (!isBgDataExists) { + BgWindowData(allSKUData) + } + + setCatImages(allCats); + setBrandData(arr); + setGlobalBrandData(arr); + setTimeout(() => { setrerenderdata2(!rerenderdata2); }, 3000); + setProcessing(false); + } + } + } + else { + setProcessing(false); + notify("No Data Found!"); + } + + }, function (txnE, txnerr) { console.log('qerr:', txnerr); setProcessing(false); },); + + }); + } catch (err) { + console.log(err); + } + } + + async function getBrands(storeData1, menu1, item, allSKUData = [], AllKPIFields, idCol, nameCol, CatData1 = {}, ShowCatWise1 = false, HIdCol) { + console.log("isval---", HIdCol, idCol, nameCol) + // If Partial save is allowed then pick the filter data id else pick the Subcaetgroy Id (default) + let IdVal = item[HIdCol || idCol]; + console.log("check brand---", ShowCatWise1, CatData1[HIdCol], CatData1) + let NameVal = ShowCatWise1 ? CatData1[nameCol] : item[nameCol]; + let data_to_ret = { 'brands': [], 'products_data': allSKUData } + let { StoreId, ChainId, StateId, StoreTypeId, StoreClassId, StoreCategoryId } = storeData1; + let COMPStockAllow_Index = AllKPIFields.findIndex(i => i.KPIFieldName == 'COMPStockAllow'); + let COMPStockAllow_Obj = COMPStockAllow_Index >= 0 ? AllKPIFields[COMPStockAllow_Index] : {}; + let isCOMPStockAllow = COMPStockAllow_Index >= 0 ? COMPStockAllow_Obj['KPIFieldEnable'] : false; + let ShowCompetionSku = AllKPIFields?.findIndex((i) => i.KPIFieldName == "ShowCompetionSku"); + let ShowCompetionObj = ShowCompetionSku >= 0 ? AllKPIFields[ShowCompetionSku] : {}; + let ShowCompetionSkuNo = ShowCompetionObj?.KPIFieldDisplayName || 0 + let ShowCompetionSkuNoSplitArr = ShowCompetionObj?.KPIFieldDisplayName?.split(",") || [] + const isCompetitorValues = ShowCompetionSkuNoSplitArr; + // Check if isCompetitorValues is empty, null, or undefined + let isCompetitorClause = !isCompetitorValues || isCompetitorValues.length === 0 ? "p.IsCompetitor = 0" : `p.IsCompetitor IN (${isCompetitorValues.join(",")})`; + return await new Promise((resolve, reject) => { + db.transaction(async function (txn) { + let join = ` inner join Mapping_ProductAssortmentStorewise m on p.ProductId=m.ProductId `; + let join2 = ` inner join Master_Category mc on mc.CategoryId=p.CategoryId `; + let brands_q = `select distinct p.${nameCol || 'BrandName'},p.${idCol || 'BrandId'}, p.IsCompetitor from Product_Master p ${join} ${join2} where m.StoreId='${StoreId}' and (p.${HIdCol}='${IdVal}' or p.${HIdCol}= ${IdVal}) ${(isCOMPStockAllow == true ? '' : ` and ${isCompetitorClause} `)} order by p.IsCompetitor, p.BrandName`; + console.log("chekbrandq----", brands_q) + await txn.executeSql(brands_q, [], async function (txn2, txnres) { + if (txnres.rows.length > 0) { + let arr = []; + for (var i = 0; i < txnres.rows.length; i++) { + let data = txnres.rows.item(i); + data['isBrandCollapsed'] = false; + let pr_d = await getSKU(storeData1, item, data, allSKUData, AllKPIFields, idCol, nameCol, CatData1, ShowCatWise1, HIdCol); + console.log('pr_d:', pr_d['products'].length, data); + let products = pr_d['products']; + let products_data = pr_d['products_data']; + data['skulist'] = products + console.log('products len:', products.length); + allSKUData.concat(products_data); + arr.push(data); + + if (i == txnres.rows.length - 1) { + data_to_ret['brands'] = arr; + data_to_ret['products_data'] = allSKUData; + resolve(data_to_ret); + } + } + } + else { + resolve(data_to_ret) + } + }, function (txnE, txnerr) { console.log(txnerr); resolve(data_to_ret) },); + + }); + }).then((val) => { + return val; + }).catch((err) => { + console.log(err); + return data_to_ret; + }) + } + + async function getSKU(storeData1, cat, brand, allSKUData = [], AllKPIFields, idCol, nameCol, CatData1 = {}, ShowCatWise1 = false, HIdCol) { + // If Partial save is allowed then pick the filter data id else pick the Subcaetgroy Id (default) + let IdVal = ShowCatWise1 ? CatData1[idCol] : cat[idCol]; + let NameVal = ShowCatWise1 ? CatData1[nameCol] : cat[nameCol]; + let sku_ret = { 'products': [], 'products_data': allSKUData }; + let { StoreId } = storeData1; + let isDefaultStockIndex = AllKPIFields.findIndex(i => i.KPIFieldName == 'DefaultStockValue') + let isDefaultStockPIObj = isDefaultStockIndex >= 0 ? AllKPIFields[isDefaultStockIndex] : {}; + let isDefaultStockEnable = isDefaultStockIndex >= 0 ? isDefaultStockPIObj['KPIFieldEnable'] : false; + let isDefaultStockValue = isDefaultStockEnable ? "0" : ''; + console.log("isDefaultStockValue---", isDefaultStockValue) + + let DefaultStockToggleI = AllKPIFields.findIndex(i => i.KPIFieldName == 'DefaultStockToggle') + let DefaultStockToggleObj = DefaultStockToggleI >= 0 ? AllKPIFields[DefaultStockToggleI] : {}; + let DefaultStockToggle = DefaultStockToggleI >= 0 ? DefaultStockToggleObj['KPIFieldEnable'] : false; + let DefaultStockToggleValue = DefaultStockToggleI >= 0 ? DefaultStockToggleObj['KPIFieldDisplayName'] : "2"; + let deftogvalue = DefaultStockToggleValue == "3" ? "3" : (DefaultStockToggle == "1" ? "1" : "0"); + + let COMPStockAllow_Index = AllKPIFields.findIndex(i => i.KPIFieldName == 'COMPStockAllow'); + let COMPStockAllow_Obj = COMPStockAllow_Index >= 0 ? AllKPIFields[COMPStockAllow_Index] : {}; + let isCOMPStockAllow = COMPStockAllow_Index >= 0 ? COMPStockAllow_Obj['KPIFieldEnable'] : false; + + let ShowCompetionSku = AllKPIFields?.findIndex((i) => i.KPIFieldName == "ShowCompetionSku"); + let ShowCompetionObj = ShowCompetionSku >= 0 ? AllKPIFields[ShowCompetionSku] : {}; + let ShowCompetionSkuNo = ShowCompetionObj?.KPIFieldDisplayName || 0 + let ShowCompetionSkuNoSplitArr = ShowCompetionObj?.KPIFieldDisplayName?.split(",") || [] + const isCompetitorValues = ShowCompetionSkuNoSplitArr; + // Check if isCompetitorValues is empty, null, or undefined + let isCompetitorClause = !isCompetitorValues || isCompetitorValues.length === 0 ? "p.IsCompetitor = 0" : `p.IsCompetitor IN (${isCompetitorValues.join(",")})`; + return await new Promise((resolve, reject) => { + db.transaction(async function (txn) { + let join = ` inner join Mapping_ProductAssortmentStorewise m on p.ProductId=m.ProductId `; + let join2 = ` inner join Master_Category mc on mc.CategoryId=p.CategoryId `; + //let join4 = ` Left Outer Join (select PRODUCT_ID, CATEGORY_ID, STORE_ID, VISIT_DATE, MAX(STOCK) as STOCK from ${AppTables.SALES} where CATEGORY_ID='${brand.CategoryId}' and STORE_ID='${StoreId}' and VISIT_DATE='${d2}' group by PRODUCT_ID, CATEGORY_ID, STORE_ID, VISIT_DATE) sl on p.ProductId=sl.PRODUCT_ID and sl.CATEGORY_ID='${brand.CategoryId}' and sl.STORE_ID='${StoreId}' and sl.VISIT_DATE='${d2}' `; + + let join6 = ` Left Outer join (select * from ${AppTables.SALES} where CATEGORY_ID='${cat.CatId}' and STORE_ID='${StoreId}' and VISIT_DATE='${d2}' group by PRODUCT_ID ) sl on sl.PRODUCT_ID=p.ProductId`; + let join5 = ` Left Outer join (select * from ${AppTables.STOCK2_DATA} where SUB_CATEGORY_ID='${cat[HIdCol]}' and STORE_ID='${StoreId}' and VISIT_DATE='${d2}' group by PRODUCT_ID ) st on st.PRODUCT_ID=p.ProductId`; + let seletlist = `Distinct ifnull(sl.STOCK,'') as SALE_stock,st.STOCK_UID,p.ProductName,p.ProductId,p.BrandName,p.BrandId,p.IsCompetitor,m.MSL,m.MBQ,m.ArticleCode,st.STOCK,st.PACKTYPE,st.BACKROOM_STOCK,st.DAMAGED_STOCK,st.LOST_STOCK,st.EXPIRY_STOCK,st.IS_SKU_STOCK_PRESENT,st.NREXPIRY1_STOCK,st.NREXPIRY2_STOCK,st.NREXPIRY3_STOCK,st.OUT_OF_STOCK,st.LESS_THAN_MBQ,st.PriceYesNo`; + let sku_q2 = `select ${seletlist} from Product_Master p ${join} ${join2} ${join5} ${join6} where m.StoreId='${StoreId}' `; + sku_q2 += idCol != 'BrandId' ? ` and (p.${idCol}='${IdVal}' or p.${idCol}= ${IdVal}) ` : ''; + sku_q2 += ` and p.${idCol}='${brand[idCol]}' ${(isCOMPStockAllow == true ? '' : ` and ${isCompetitorClause} `)} ORDER BY m.MSL desc, p.IsCompetitor ASC, p.ProductName ASC`; + console.log("sku_q2", sku_q2) + await txn.executeSql(sku_q2, [], async function (txn2, txnres) { + if (txnres.rows.length > 0) { + let arr = []; + for (var i = 0; i < txnres.rows.length; i++) { + let data = txnres.rows.item(i); + console.log("datttttt", data) + let ancval = data.OUT_OF_STOCK == 1 ? 1 : 0; + let ancval2 = data.LESS_THAN_MBQ == 1 ? 1 : 0; + let animatedChoice = new Animated.Value(ancval); + let animatedChoice2 = new Animated.Value(ancval2); + data.animatedChoice = animatedChoice; + data.animatedChoice2 = animatedChoice2; + setInputRefss(AllKPIFields, cat, brand, data, (HeaderIdCol || idCol), idCol); + data['Old_Stock'] = (data.STOCK || ''); + data['OldDamagedStock'] = (data.DAMAGED_STOCK || ''); + data['OldLostStock'] = (data.LOST_STOCK || ''); + data['OldExStock'] = (data.EXPIRY_STOCK || ''); + let mfdStocks = await getMFDStockData(data); + let PackType = (data.PACKTYPE !== null && data.PACKTYPE !== undefined) ? data.PACKTYPE : '' + let stock = (data.STOCK !== null && data.STOCK !== undefined && data.STOCK !== '') ? data.STOCK : isDefaultStockValue + + let BACKROOM_STOCK = (data.BACKROOM_STOCK !== null && data.BACKROOM_STOCK !== undefined && data.BACKROOM_STOCK !== '') ? data.BACKROOM_STOCK : isDefaultStockValue + let EXPIRY_STOCK = (data.EXPIRY_STOCK !== null && data.EXPIRY_STOCK !== undefined && data.EXPIRY_STOCK !== '') ? data.EXPIRY_STOCK : isDefaultStockValue + let DAMAGED_STOCK = (data.DAMAGED_STOCK !== null && data.DAMAGED_STOCK !== undefined && data.DAMAGED_STOCK !== '') ? data.DAMAGED_STOCK : isDefaultStockValue + let LOST_STOCK = (data.LOST_STOCK !== null && data.LOST_STOCK !== undefined && data.LOST_STOCK !== '') ? data.LOST_STOCK : isDefaultStockValue + let NREXPIRY1_STOCK = (data.NREXPIRY1_STOCK !== null && data.NREXPIRY1_STOCK !== undefined && data.NREXPIRY1_STOCK !== '') ? data.NREXPIRY1_STOCK : isDefaultStockValue + let NREXPIRY2_STOCK = (data.NREXPIRY2_STOCK !== null && data.NREXPIRY2_STOCK !== '' && data.NREXPIRY2_STOCK !== undefined) ? data.NREXPIRY2_STOCK : isDefaultStockValue + let NREXPIRY3_STOCK = (data.NREXPIRY3_STOCK !== null && data.NREXPIRY3_STOCK !== '' && data.NREXPIRY3_STOCK !== undefined) ? data.NREXPIRY3_STOCK : isDefaultStockValue + let defData = { 'SubCategoryId': cat[HIdCol], 'ProductId': data.ProductId, 'Stock': stock, 'PackType': PackType, 'SALE_stock': data.SALE_stock, 'BackRoomStock': BACKROOM_STOCK, 'ExpiryStock': EXPIRY_STOCK, 'DamagedStock': DAMAGED_STOCK, 'LostStock': LOST_STOCK, 'mfdStocks': (mfdStocks || []), 'isSKUPresent': data.IS_SKU_STOCK_PRESENT, 'showAllSKU_Fields': (data.IS_SKU_STOCK_PRESENT == 1), 'NearExpiry1': NREXPIRY1_STOCK, 'NearExpiry2': NREXPIRY2_STOCK, 'NearExpiry3': NREXPIRY3_STOCK, "OutOfStock": data.OUT_OF_STOCK == 1 ? 1 : 0, PriceYesNo: data.PriceYesNo, "LessThanMBQ": data.LESS_THAN_MBQ == 1 ? 1 : 0 }; + allSKUData.push(defData); + arr.push(data); + if (i == txnres.rows.length - 1) { + sku_ret['products'] = arr; + sku_ret['products_data'] = allSKUData; + resolve(sku_ret); + } + } + } + else { + resolve(sku_ret); + } + + }, function (txnE, txnerr) { console.log(txnerr); setProcessing(false); resolve(sku_ret); },); + + + }); + }).then((val) => { + return val; + }).catch((err) => { + console.log('err:', err); + return sku_ret; + }) + + + } + + function setInputRefss(AllKPIFields, cat, brand, data, HeaderIdCol, idCol) + // cat[idCol],brand[idCol] + { + //console.log("neww---", cat, brand) + let isStockIndex = AllKPIFields.findIndex(i => i.KPIFieldName == 'Stock') + let isStockKPIObj = isStockIndex >= 0 ? AllKPIFields[isStockIndex] : {}; + let isStockEnable = isStockIndex >= 0 ? isStockKPIObj['KPIFieldEnable'] : true; + let isStockDis_Name = isStockIndex >= 0 ? isStockKPIObj['KPIFieldDisplayName'] : ''; + + let isBRStockIndex = AllKPIFields.findIndex(i => i.KPIFieldName == 'BackRoomStock') + let isBRStockKPIObj = isBRStockIndex >= 0 ? AllKPIFields[isBRStockIndex] : {}; + let isBRStockEnable = isBRStockIndex >= 0 ? isBRStockKPIObj['KPIFieldEnable'] : true; + let isBRStockDis_Name = isBRStockIndex >= 0 ? isBRStockKPIObj['KPIFieldDisplayName'] : ''; + + let isDStockIndex = AllKPIFields.findIndex(i => i.KPIFieldName == 'DamageStock') + let isDStockKPIObj = isDStockIndex >= 0 ? AllKPIFields[isDStockIndex] : {}; + let isDStockEnable = isDStockIndex >= 0 ? isDStockKPIObj['KPIFieldEnable'] : false; + let isDStockDis_Name = isDStockIndex >= 0 ? isDStockKPIObj['KPIFieldDisplayName'] : ''; + + let isLStockIndex = AllKPIFields.findIndex(i => i.KPIFieldName == 'LostStock') + let isLStockKPIObj = isLStockIndex >= 0 ? AllKPIFields[isLStockIndex] : {}; + let isLStockEnable = isLStockIndex >= 0 ? isLStockKPIObj['KPIFieldEnable'] : false; + let isLStockDis_Name = isLStockIndex >= 0 ? isLStockKPIObj['KPIFieldDisplayName'] : ''; + + let isExStockIndex = AllKPIFields.findIndex(i => i.KPIFieldName == 'ExpiredStock') + let isExStockKPIObj = isExStockIndex >= 0 ? AllKPIFields[isExStockIndex] : {}; + let isExStockEnable = isExStockIndex >= 0 ? isExStockKPIObj['KPIFieldEnable'] : false; + let isExStockDis_Name = isExStockIndex >= 0 ? isExStockKPIObj['KPIFieldDisplayName'] : ''; + + let NrExpiry1Index = AllKPIFields.findIndex(i => i.KPIFieldName == 'NrExpiry1') + let NrExpiry1KPIObj = NrExpiry1Index >= 0 ? AllKPIFields[NrExpiry1Index] : {}; + let NrExpiry1Enable = NrExpiry1Index >= 0 ? NrExpiry1KPIObj['KPIFieldEnable'] : false; + let NrExpiry1_Dis_Name = NrExpiry1Index >= 0 ? NrExpiry1KPIObj['KPIFieldDisplayName'] : ''; + + let NrExpiry2Index = AllKPIFields.findIndex(i => i.KPIFieldName == 'NrExpiry2') + let NrExpiry2KPIObj = NrExpiry2Index >= 0 ? AllKPIFields[NrExpiry2Index] : {}; + let NrExpiry2Enable = NrExpiry2Index >= 0 ? NrExpiry2KPIObj['KPIFieldEnable'] : false; + let NrExpiry2_Dis_Name = NrExpiry2Index >= 0 ? NrExpiry2KPIObj['KPIFieldDisplayName'] : ''; + + let NrExpiry3Index = AllKPIFields.findIndex(i => i.KPIFieldName == 'NrExpiry3') + let NrExpiry3KPIObj = NrExpiry1Index >= 0 ? AllKPIFields[NrExpiry3Index] : {}; + let NrExpiry3Enable = NrExpiry1Index >= 0 ? NrExpiry3KPIObj['KPIFieldEnable'] : false; + let NrExpiry3_Dis_Name = NrExpiry1Index >= 0 ? NrExpiry3KPIObj['KPIFieldDisplayName'] : ''; + + if (isStockEnable) { + inputRefs.current['input1_' + cat[HeaderIdCol || idCol] + '_' + brand[idCol] + '_' + data.ProductId] = ''; + } + if (isBRStockEnable) { + inputRefs.current['input2_' + cat[HeaderIdCol || idCol] + '_' + brand[idCol] + '_' + data.ProductId] = ''; + } + if (isDStockEnable) { + inputRefs.current['input3_' + cat[HeaderIdCol || idCol] + '_' + brand[idCol] + '_' + data.ProductId] = ''; + } + if (isLStockEnable) { + inputRefs.current['input4_' + cat[HeaderIdCol || idCol] + '_' + brand[idCol] + '_' + data.ProductId] = ''; + } + if (isExStockEnable) { + inputRefs.current['input5_' + cat[HeaderIdCol || idCol] + '_' + brand[idCol] + '_' + data.ProductId] = ''; + } + if (NrExpiry1Enable) { + inputRefs.current['input6_' + cat[HeaderIdCol || idCol] + '_' + brand[idCol] + '_' + data.ProductId] = ''; + } + if (NrExpiry2Enable) { + inputRefs.current['input7_' + cat[HeaderIdCol || idCol] + '_' + brand[idCol] + '_' + data.ProductId] = ''; + } + if (NrExpiry3Enable) { + inputRefs.current['input8_' + cat[HeaderIdCol || idCol] + '_' + brand[idCol] + '_' + data.ProductId] = ''; + } + + } + + async function getMFDStockData(skud) { + + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + let q = `select * from ${AppTables.STOCK2_MFD_DATA} where STOCK_UID='${skud.STOCK_UID}'`; + await txn.executeSql(q, [], async function (txn2, txnres) { + if (txnres.rows.length > 0) { + let arr = []; + for (var i = 0; i < txnres.rows.length; i++) { + let data = txnres.rows.item(i); + let obj = { 'date': new Date(data.DATE), 'mfd': data.MFD, 'stock': data.STOCK, 'lotno': data.LOT_NO } + + arr.push(obj); + if (i == txnres.rows.length - 1) { + console.log('mfdStocks', arr); + resolve(arr) + } + } + } + else { + resolve([]) + } + }, function (txnE, txnerr) { console.log(txnerr); resolve([]) },); + }); + }).catch((err) => { + console.log(err); + return []; + }) + } + + async function getImage(imgdata) { + let cat = getImageProps.option || ''; + if (typeof imgdata == 'object' && imgdata.errorCode == 'camera_unavailable') { + notify(ST.Cameraunavailable); + } + else if (typeof imgdata == 'object' && imgdata.uri != null) { + const img = imgdata; + const imgurl = img.uri, imgWidth = img.width, imgHeight = img.ExtendedHeight; + let isImgFromGallery = img.fromGallery != null ? img.fromGallery : false; + let picture_clickedd = isImgFromGallery == true ? img.datetime : new Date(); + let picture_clicked_time = moment(picture_clickedd).format('MM-DD-YYYY HH:mm:ss') + let picture_clicked_time_for_pic_name = moment(picture_clickedd).format('MMDDYYYY_HHmmss') + console.log("time", picture_clicked_time); + console.log("time1", picture_clicked_time_for_pic_name); + let calculate_tym_date_for_filename = picture_clicked_time_for_pic_name; + let calculate_tym_date_over_img = picture_clicked_time; + const mark_text1 = calculate_tym_date_over_img; + const mark_text2 = 'Store Name:' + storeData.StoreName + ' | Store Id:' + storeData.StoreId + ' | User Id:' + storeData.EmpId + ' | Image Type: ' + currentMenu.MenuName + ' | Date:' + calculate_tym_date_over_img; + let filename = storeData.StoreId + '_' + (props.UserId || '') + '_Stock-' + calculate_tym_date_for_filename + '.jpg'; + let allIMgs = catImages; + let defData = { 'SubCategoryId': cat.SubCategoryId }; + const cindex = allIMgs.findIndex(i => i.SubCategoryId == cat.SubCategoryId); + const imgData = cindex >= 0 ? (allIMgs[cindex] || defData) : defData; + imgData.ImageName = filename; + + let imagePath = 'file://' + ImageFolderPath + currentMenu.ScreenName + "/" + filename; + RNFS.copyFile(imgurl, imagePath) + .then(async (resn) => { + // render data with clicked image + let uri = imagePath; + console.log('image marker', uri); + imgData.ImagePath = uri; + cindex >= 0 ? allIMgs[cindex] = imgData : allIMgs.push(imgData); + setCatImages(allIMgs); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + // add metdata then resize image and restored back to the imagePath + let restore_data = { "destFilePath": imagePath, "imgurl": imgurl, imgWidth, imgHeight, mark_text1, mark_text2 } + let is_restored = await restore_ImageWithMetaData(restore_data, imgdata); + console.log("image restored:", is_restored); + }) + .catch(err => { + console.log(ST.Errorimagefilewritefailed + '!!!'); + console.log(err.message, err.code); + }); + } + } + + async function openCamera(option) { + setGetImageProps({ 'option': option }); + console.log('openCamera'); + setShowCamera(true); + } + + async function submitOpeningStock() { + let isvalid = await validate(); + if (isvalid) { + Keyboard.dismiss(); + setShowAlert(true); + } + } + + async function saveData() { + // setHasUnsavedChanges(false); + BgUnsavedChanges(false) + setShowAlert(false); + setLoaderTitle(ST.SavingData + '...'); + setProcessing(true); + try { + let { StoreId, ChainId, StateId, StoreTypeId } = storeData; + await db.transaction(async function (txn) { + console.log(CatData, "CatDataCatData") + let IdVal = CatData[ColId]; + console.log("isvallll--", IdVal) + let NameVal = CatData[ColName]; + //console.log(brandData, "brandDatabrandData"); + //console.log(NameVal, "NameVal--------", ShowCatWise); + //console.log(HeaderIdCol, "HeaderIdColHeaderIdCol") + let ids = []; + if (isPartialEnable) { + brandData?.forEach(item => { + if (item.hasOwnProperty(HeaderIdCol)) { + ids.push(item[HeaderIdCol]) + } + }); + } else { + ids.push(IdVal); + } + const commaSeparatedValues = ids.join(','); + //console.log(commaSeparatedValues, "commaSeparatedValues") + let q = `DELETE FROM ${AppTables.STOCK2_DATA} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' ${ShowCatWise ? ` and SUB_CATEGORY_ID in (${commaSeparatedValues}) ` : ''} `; + let q2 = `DELETE FROM ${AppTables.STOCK2HDR_DATA} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' ${ShowCatWise ? ` and SUB_CATEGORY_ID in (${commaSeparatedValues}) ` : ''} `; + let q3 = `DELETE FROM ${AppTables.STOCK2_MFD_DATA} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' ${ShowCatWise ? ` and SUB_CATEGORY_ID in (${commaSeparatedValues}) ` : ''} `; + console.log(q, "QUERYYY---") + + + // remove old data + await txn.executeSql(q, [], async function (txn2, txnres) { + console.log('stock data deleted'); + }, function (txnE, txnerr) { console.log(txnerr); },); + + await txn.executeSql(q2, [], async function (txn2, txnres) { + console.log('stock header data deleted'); + }, function (txnE, txnerr) { console.log(txnerr); },); + + await txn.executeSql(q3, [], async function (txn2, txnres) { + console.log('stock mfd data deleted'); + }, function (txnE, txnerr) { console.log(txnerr); },); + + + let seq_q = ` select seq from sqlite_sequence where name="${AppTables.STOCK2HDR_DATA}" `; + await txn.executeSql(seq_q, [], async function (txn2, txnres) { + if (txnres.rows.length > 0) { + let data = txnres.rows.item(0); + let seq = data.seq; + insertData(seq); + } + else { + insertData(0); + } + }, function (txnE, txnerr) { console.log(txnerr); insertData(0); },); + + + }); + } catch (err) { + console.log(err); + } + } + + async function insertData(seq = 0) { + try { + console.log(seq); + let { StoreId } = storeData; + let partialSvIndex = KPIFields.findIndex(i => i.KPIFieldName == 'PartialSaveAllow') + let partialSvObj = partialSvIndex >= 0 ? KPIFields[partialSvIndex] : {}; + let isPartialEnable = partialSvIndex >= 0 ? partialSvObj['KPIFieldEnable'] : false; + console.log('insertData'); + let ProductList = [] + let CatId = 0 + await db.transaction(async function (txn) { + var values = '', stock_values = '', mfdStockV = ''; + for (var i = 0; i < globalBrandData.length; i++) { + seq++; + let catIndex = i; + let item = globalBrandData[catIndex]; + let cimage = catImages.find(ci => ci.SubCategoryId == item.SubCategoryId) || {}; + CatId = item?.CatId + values += values != '' ? ' , ' : ''; + values += ` ('${StoreId}','${d2}','${item.SubCategoryName}','${item.SubCategoryId}','','${(cimage.ImageName || '')}','${(cimage.ImagePath || '')}','1','${d2}') `; + console.log('stock hdr values added'); + + let brandList = item.brandList || []; + for (var j = 0; j < brandList.length; j++) { + let brand = brandList[j]; + let skulist = brand['skulist'] || []; + for (var k = 0; k < skulist.length; k++) { + let skuItem = skulist[k]; + let SKU_UID = 'SKU' + seq + j + k + (Math.floor(Math.random() * 1000) + 1); + let { BrandId, BrandName, MSL, ArticleCode, ProductId, ProductName } = skuItem; + ArticleCode = ArticleCode != null && ArticleCode != undefined && ArticleCode != 'undefined' && ArticleCode != '' ? ArticleCode : '' + + stock_values += stock_values != '' ? ' , ' : ''; + let allSKUData = SKUStockData; + const skud_index = allSKUData.findIndex(ci => ci.SubCategoryId == item.SubCategoryId && ci.ProductId == skuItem.ProductId); + const skud = skud_index >= 0 ? (allSKUData[skud_index] || {}) : {}; + let mfdStocks = skud['mfdStocks'] || []; + let stock = skud.Stock != null ? skud.Stock : ''; + let PackType = skud.PackType != null && skud.PackType != undefined && + skud.PackType != "" && skud.PackType != 'undefiend' ? skud.PackType : ''; + let br_stock = skud.BackRoomStock != null ? skud.BackRoomStock : ''; + let ex_stock = skud.ExpiryStock != null ? skud.ExpiryStock : ''; + let damage_stock = skud.DamagedStock != null ? skud.DamagedStock : ''; + let lost_stock = skud.LostStock != null ? skud.LostStock : ''; + let isSKUPresent = skud.isSKUPresent != null ? skud.isSKUPresent : 0; + let OutOfStock = skud.OutOfStock != null ? skud.OutOfStock : ''; + let PriceYesNo = skud.PriceYesNo != null ? skud.PriceYesNo : ''; + let LessThanMBQ = skud.LessThanMBQ != null ? skud.LessThanMBQ : ''; + let NearExpiry_stock1 = skud.NearExpiry1 != null ? skud.NearExpiry1 : ''; + let NearExpiry_stock2 = skud.NearExpiry2 != null ? skud.NearExpiry2 : ''; + let NearExpiry_stock3 = skud.NearExpiry3 != null ? skud.NearExpiry3 : ''; + if (stock != 0) { + ProductList.push(ProductId) + } + stock_values += ` ('${seq}','${SKU_UID}','${StoreId}','${d2}','${item.SubCategoryId}','${item.SubCategoryName}','${BrandId}','${BrandName}','${ProductId}','${ProductName}','${MSL}','${ArticleCode}','${stock}','${PackType}','${br_stock}','${damage_stock}','${lost_stock}','${ex_stock}','${isSKUPresent}','${NearExpiry_stock1}','${NearExpiry_stock2}','${NearExpiry_stock3}','${OutOfStock}','${LessThanMBQ}','${PriceYesNo}','${d2}') `; + for (let m = 0; m < mfdStocks.length; m++) { + let cstock = mfdStocks[m]; + let mfd_stock = cstock['stock']; + let mfd_mfd = cstock['mfd']; + let mfd_lotno = cstock['lotno']; + let mfd_date = cstock['date'] != null ? moment(cstock['date']).format('MM-DD-YYYY') : ''; + mfdStockV += mfdStockV != '' ? ' , ' : ''; + mfdStockV += ` ('${seq}','${SKU_UID}','${StoreId}','${d2}','${item.SubCategoryId}','${BrandId}','${ProductId}','${mfd_stock}','${mfd_mfd}','${mfd_lotno}','${mfd_date}','${d2}') `; + + } + + } + } + + } + + let add_StockHdr = `INSERT INTO ${AppTables.STOCK2HDR_DATA} (STORE_ID,VISIT_DATE,SUB_CATEGORY,SUB_CATEGORY_ID,MSL,IMAGE,IMAGEPATH,IS_UPDATED,ADDED_DATE) VALUES ${values} `; + let add_Stock = `INSERT INTO ${AppTables.STOCK2_DATA} (COMMON_ID,STOCK_UID,STORE_ID,VISIT_DATE,SUB_CATEGORY_ID,SUB_CATEGORY,BRAND_ID,BRAND,PRODUCT_ID,PRODUCT,MSL,ARTICLE_CODE,STOCK,PACKTYPE,BACKROOM_STOCK,DAMAGED_STOCK,LOST_STOCK,EXPIRY_STOCK,IS_SKU_STOCK_PRESENT,NREXPIRY1_STOCK,NREXPIRY2_STOCK,NREXPIRY3_STOCK,OUT_OF_STOCK,LESS_THAN_MBQ,PriceYesNo,ADDED_DATE) VALUES ${stock_values} `; + let add_mfd_Stock = `INSERT INTO ${AppTables.STOCK2_MFD_DATA} (COMMON_ID,STOCK_UID,STORE_ID,VISIT_DATE,SUB_CATEGORY_ID,BRAND_ID,PRODUCT_ID,STOCK,MFD,LOT_NO,DATE,ADDED_DATE) VALUES ${mfdStockV} `; + + await txn.executeSql(add_StockHdr, [], async function (txn2, txnres) { + console.log('stock header added'); + await txn.executeSql(add_Stock, [], async function (txn2, txnres) { + console.log('stock added', isPartialEnable); + let saleQForZero = '' + let saleDQ = `Delete from ${AppTables.SALES} where STORE_ID='${StoreId}' and VISIT_DATE='${d2}' and PRODUCT_ID not in (${ProductList.join(',')}) ` + if (isPartialEnable) { + saleDQ = `Delete from ${AppTables.SALES} where STORE_ID='${StoreId}' and VISIT_DATE='${d2}' and PRODUCT_ID not in (${ProductList.join(',')}) and CATEGORY_ID = '${CatId}' ` + saleQForZero = `Delete from ${AppTables.SALES} where STORE_ID='${StoreId}' and VISIT_DATE='${d2}' and (STOCK = '' or STOCK = '0') ` + } + console.log("saleDQ---", saleQForZero) + txn.executeSql(saleDQ, [], function (txn2, txnres) { + console.log('sales deleted successfully'); + if (saleQForZero !== '' && isPartialEnable) { + txn.executeSql(saleQForZero, [], function (txn2, txnres) { + console.log('sales deleted successfully 2'); + }, function (txnE, txnerr) { console.log(txnerr); },); + } + }, function (txnE, txnerr) { console.log(txnerr); },); + if (mfdStockV != null && mfdStockV != '') { + await txn.executeSql(add_mfd_Stock, [], async function (txn2, txnres) { + console.log('stock mfd added'); + notify(ST.Stockupdatedsuccessfully); + setProcessing(false); + // clear store data in local storage to avoiding re-set data for the store + clear_item('storeData') + props.navigation.goBack(); + }, function (txnE, txnerr) { console.log(txnerr); setProcessing(false); notify(ST.Cannotaddstock) },); + } + else { + notify(ST.Stockupdatedsuccessfully); + setProcessing(false); + // clear store data in local storage to avoiding re-set data for the store + clear_item('storeData') + props.navigation.goBack(); + } + }, function (txnE, txnerr) { console.log(txnerr); setProcessing(false); notify(ST.Cannotaddstock) },); + }, function (txnE, txnerr) { console.log(txnerr); setProcessing(false); notify(ST.Cannotaddstock) },); + + }); + } catch (err) { + console.log(err); + } + } + + async function validateStockValuePartial(ProductList) { + return new Promise(async (resolve, reject) => { + let { PSAllow, PSTableName } = currentMenu; + PSTableName = PSTableName != null ? PSTableName : ''; + PSAllow = PSAllow != null ? PSAllow : false; + let orderBy = '', idCol = '', nameCol = ''; + if (PSTableName.toLowerCase() == HierarchyTbls.Master_SubCategory.toLowerCase()) { + idCol = 'SubCategoryId'; + nameCol = 'SubCategoryName'; + orderBy = ' p.SubCategorySequence '; + } + else if (PSTableName.toLowerCase() == HierarchyTbls.Master_Brand.toLowerCase()) { + idCol = 'BrandId'; + nameCol = 'BrandName'; + orderBy = ' p.BrandSequence '; + } + else if (PSTableName.toLowerCase() == HierarchyTbls.Master_Product.toLowerCase()) { + idCol = 'ProductId'; + nameCol = 'ProductName'; + orderBy = ' p.ProductSequence '; + } + else { + idCol = 'CategoryId'; + nameCol = 'CategoryName'; + orderBy = ' p.CategorySequence '; + } + + let q = await getFilterQuery(storeData, currentMenu, idCol, nameCol, orderBy, KPIFields); + console.log("q", q) + db.transaction(async function (txn) { + txn.executeSql(q, [], function (txn2, txnres2) { + console.log("CatLength", txnres2.rows.length, idCol, nameCol) + if (txnres2.rows.length > 0) { + let q3 = `SELECT DISTINCT SUB_CATEGORY_ID + FROM STOCK2_DATA + WHERE SUB_CATEGORY_ID IN ( + SELECT DISTINCT p.${idCol} + FROM Product_Master p + INNER JOIN Mapping_ProductAssortmentStorewise mp + ON p.ProductId = mp.ProductId + WHERE mp.StoreId='${storeData.StoreId}' and p.ProductId not in (${ProductList.join(',')}) + ) + AND VISIT_DATE ='${storeData.VisitDate}'`; + console.log("q3", q3) + txn.executeSql(q3, [], function (txn3, txnres3) { + let comp = txnres2.rows.length - txnres3.rows.length; + console.log("comp-----", comp + "---", txnres2.rows.length + "---", txnres3.rows.length) + if (comp == 1 || comp == 0) { + let q4 = `SELECT CAST(SUM(IFNULL(STOCK,0)) AS INTEGER) AS Stock_total + FROM STOCK2_DATA + WHERE STORE_ID ='${storeData.StoreId}' + AND VISIT_DATE ='${storeData.VisitDate}' and PRODUCT_ID not in (${ProductList.join(',')})`; + txn.executeSql(q4, [], function (txn4, txnres4) { + let total_stock = 0; + if (txnres4.rows.length > 0) { + total_stock = txnres4.rows.item(0).Stock_total; + } + console.log("total_stock", total_stock) + resolve(total_stock); + }, function (err) { reject(err); }); + } else { + resolve(-1); + } + }, function (err) { reject(err); }); + + } else { + resolve(-1); + } + }, function (err) { reject(err); }); + + }); + + }); + } + + async function getFilterQuery(storeData1, menu1, idCol, nameCol, orderBy, AllKPIFields = []) { + let { StoreId } = storeData1; + let { ScreenName } = menu1; + let COMPStockAllow_Index = AllKPIFields.findIndex(i => i.KPIFieldName == 'COMPStockAllow' && i.ScreenName == ScreenName); + let COMPStockAllow_Obj = COMPStockAllow_Index >= 0 ? AllKPIFields[COMPStockAllow_Index] : {}; + let isCOMPStockAllow = COMPStockAllow_Index >= 0 ? COMPStockAllow_Obj['KPIFieldEnable'] : false; + let ShowCompetionSku = AllKPIFields?.findIndex((i) => i.KPIFieldName == "ShowCompetionSku"); + let ShowCompetionObj = ShowCompetionSku >= 0 ? AllKPIFields[ShowCompetionSku] : {}; + let ShowCompetionSkuNoSplitArr = ShowCompetionObj?.KPIFieldDisplayName?.split(",") || [] + const isCompetitorValues = ShowCompetionSkuNoSplitArr; + // Check if isCompetitorValues is empty, null, or undefined + let isCompetitorClause = !isCompetitorValues || isCompetitorValues.length === 0 ? "p.IsCompetitor = 0" : `p.IsCompetitor IN (${isCompetitorValues.join(",")})`; + let q = ``, join = ''; + switch (ScreenName) { + case 'STOCK': + join = ` INNER join Mapping_ProductAssortmentStorewise mp on p.ProductId=mp.ProductId `; + q = `SELECT DISTINCT p.${idCol},p.${nameCol} ,p.CategoryId as CatId from Product_Master p ${join} where mp.StoreId='${StoreId}' ${(isCOMPStockAllow == true ? '' : ` and ${isCompetitorClause}`)}`; + q += ` order by ${orderBy}`; + return q; + + default: return ''; + } + } + + async function validate() { + let isValid = true; + var i = 0, j = 0; + let ProductList = [] + let isSALEExists = await checkMDStockScreenExists(storeData, 'SALE') + let StockValidationRequiredI = KPIFields.findIndex(i => i.KPIFieldName == 'StockValidationRequired') + let StockValidationRequiredObj = StockValidationRequiredI >= 0 ? KPIFields[StockValidationRequiredI] : {}; + let StockValidationRequired = StockValidationRequiredI >= 0 ? StockValidationRequiredObj['KPIFieldEnable'] : true; + if (StockValidationRequired == false) { + return isValid; + } + // validate only if permit + let isHdrImgIndex = KPIFields.findIndex(i => i.KPIFieldName == 'HeaderImageAllow') + let isHdrImgKPIObj = isHdrImgIndex >= 0 ? KPIFields[isHdrImgIndex] : {}; + let isHdrImgEnable = isHdrImgIndex >= 0 ? isHdrImgKPIObj['KPIFieldEnable'] : false; + let isListedSKUIndex = KPIFields.findIndex(i => i.KPIFieldName == 'ListedSKU'); + let isListedSKUKPIObj = isListedSKUIndex >= 0 ? KPIFields[isListedSKUIndex] : {}; + let isListedSKUEnable = isListedSKUIndex >= 0 ? isListedSKUKPIObj['KPIFieldEnable'] : true; + let isStockIndex = KPIFields.findIndex(i => i.KPIFieldName == 'Stock') + let isStockKPIObj = isStockIndex >= 0 ? KPIFields[isStockIndex] : {}; + let isStockEnable = isStockIndex >= 0 ? isStockKPIObj['KPIFieldEnable'] : true; + let isStockDis_Name = isStockIndex >= 0 ? isStockKPIObj['KPIFieldDisplayName'] : 'Stock'; + let isBRStockIndex = KPIFields.findIndex(i => i.KPIFieldName == 'BackRoomStock') + let isBRStockKPIObj = isBRStockIndex >= 0 ? KPIFields[isBRStockIndex] : {}; + let isBRStockEnable = isBRStockIndex >= 0 ? isBRStockKPIObj['KPIFieldEnable'] : true; + let isBRStockDis_Name = isBRStockIndex >= 0 ? isBRStockKPIObj['KPIFieldDisplayName'] : ''; + let isDStockIndex = KPIFields.findIndex(i => i.KPIFieldName == 'DamageStock') + let isDStockKPIObj = isDStockIndex >= 0 ? KPIFields[isDStockIndex] : {}; + let isDStockEnable = isDStockIndex >= 0 ? isDStockKPIObj['KPIFieldEnable'] : false; + let isDStockDis_Name = isDStockIndex >= 0 ? isDStockKPIObj['KPIFieldDisplayName'] : ''; + let isLStockIndex = KPIFields.findIndex(i => i.KPIFieldName == 'LostStock') + let isLStockKPIObj = isLStockIndex >= 0 ? KPIFields[isLStockIndex] : {}; + let isLStockEnable = isLStockIndex >= 0 ? isLStockKPIObj['KPIFieldEnable'] : false; + let isLStockDis_Name = isLStockIndex >= 0 ? isLStockKPIObj['KPIFieldDisplayName'] : ''; + let isExStockIndex = KPIFields.findIndex(i => i.KPIFieldName == 'ExpiredStock') + let isExStockKPIObj = isExStockIndex >= 0 ? KPIFields[isExStockIndex] : {}; + let isExStockEnable = isExStockIndex >= 0 ? isExStockKPIObj['KPIFieldEnable'] : false; + let isExStockDis_Name = isExStockIndex >= 0 ? isExStockKPIObj['KPIFieldDisplayName'] : ''; + let isMFDIndex = KPIFields.findIndex(i => i.KPIFieldName == 'MFD') + let isMFD_KPIObj = isMFDIndex >= 0 ? KPIFields[isMFDIndex] : {}; + let isMFDEnable = isMFDIndex >= 0 ? isMFD_KPIObj['KPIFieldEnable'] : false; + let isMFDDis_Name = isMFDIndex >= 0 ? isMFD_KPIObj['KPIFieldDisplayName'] : ''; + let NrExpiry1Index = KPIFields.findIndex(i => i.KPIFieldName == 'NrExpiry1') + let NrExpiry1KPIObj = NrExpiry1Index >= 0 ? KPIFields[NrExpiry1Index] : {}; + let NrExpiry1Enable = NrExpiry1Index >= 0 ? NrExpiry1KPIObj['KPIFieldEnable'] : false; + let NrExpiry1_Dis_Name = NrExpiry1Index >= 0 ? NrExpiry1KPIObj['KPIFieldDisplayName'] : ''; + let NrExpiry2Index = KPIFields.findIndex(i => i.KPIFieldName == 'NrExpiry2') + let NrExpiry2KPIObj = NrExpiry2Index >= 0 ? KPIFields[NrExpiry2Index] : {}; + let NrExpiry2Enable = NrExpiry2Index >= 0 ? NrExpiry2KPIObj['KPIFieldEnable'] : false; + let NrExpiry2_Dis_Name = NrExpiry2Index >= 0 ? NrExpiry2KPIObj['KPIFieldDisplayName'] : ''; + let NrExpiry3Index = KPIFields.findIndex(i => i.KPIFieldName == 'NrExpiry3') + let NrExpiry3KPIObj = NrExpiry1Index >= 0 ? KPIFields[NrExpiry3Index] : {}; + let NrExpiry3Enable = NrExpiry1Index >= 0 ? NrExpiry3KPIObj['KPIFieldEnable'] : false; + let NrExpiry3_Dis_Name = NrExpiry1Index >= 0 ? NrExpiry3KPIObj['KPIFieldDisplayName'] : ''; + let MSLIndex = KPIFields.findIndex(i => i.KPIFieldName == 'MSL'); + let MSLObj = MSLIndex >= 0 ? KPIFields[MSLIndex] : {}; + let isMSLAllow = MSLIndex >= 0 ? MSLObj['KPIFieldEnable'] : true; + let NONMSL_Index = KPIFields.findIndex(i => i.KPIFieldName == 'NONMSL'); + let NONMSL_Obj = NONMSL_Index >= 0 ? KPIFields[NONMSL_Index] : {}; + let isNONMSL_Allow = NONMSL_Index >= 0 ? NONMSL_Obj['KPIFieldEnable'] : true; + // new + let OutofStockI = KPIFields.findIndex(i => i.KPIFieldName == 'OutofStock') + let OutofStockObj = OutofStockI >= 0 ? KPIFields[OutofStockI] : {}; + let OutofStockEnable = OutofStockI >= 0 ? OutofStockObj['KPIFieldEnable'] : false; + let LessThanMBQI = KPIFields.findIndex(i => i.KPIFieldName == 'LessThanMBQ') + let LessThanMBQObj = LessThanMBQI >= 0 ? KPIFields[LessThanMBQI] : {}; + let LessThanMBQEnable = LessThanMBQI >= 0 ? LessThanMBQObj['KPIFieldEnable'] : false; + let DefaultStockToggleI = KPIFields.findIndex(i => i.KPIFieldName == 'DefaultStockToggle') + let DefaultStockToggleObj = DefaultStockToggleI >= 0 ? KPIFields[DefaultStockToggleI] : {}; + let DefaultStockToggle = DefaultStockToggleI >= 0 ? DefaultStockToggleObj['KPIFieldEnable'] : false; + let DefaultStockToggleValue = DefaultStockToggleI >= 0 ? DefaultStockToggleObj['KPIFieldDisplayName'] : "2"; + let deftogvalue = DefaultStockToggleValue == "3" ? "3" : (DefaultStockToggle == "1" ? "1" : "0"); + let COMPStockAllow_Index = KPIFields.findIndex(i => i.KPIFieldName == 'COMPStockAllow'); + let COMPStockAllow_Obj = COMPStockAllow_Index >= 0 ? KPIFields[COMPStockAllow_Index] : {}; + let isCOMPStockAllow = COMPStockAllow_Index >= 0 ? COMPStockAllow_Obj['KPIMandatory'] : false; + let SamePriceYesNoI = KPIFields.findIndex(i => i.KPIFieldName == 'SamePriceYesNo') + let SamePriceYesNoObj = SamePriceYesNoI >= 0 ? KPIFields[SamePriceYesNoI] : {}; + let SamePriceYesNoEnable = SamePriceYesNoI >= 0 ? SamePriceYesNoObj['KPIFieldEnable'] : false; + let SamePriceYesNoAllow = SamePriceYesNoI >= 0 ? SamePriceYesNoObj['KPIMandatory'] : false; + let isProductPackTypeIndex = KPIFields.findIndex(i => i.KPIFieldName == 'ProductPackType') + let isProductPackTypeObj = isProductPackTypeIndex >= 0 ? KPIFields[isProductPackTypeIndex] : {}; + let isProductPackTypeEnable = isProductPackTypeIndex >= 0 ? isProductPackTypeObj['KPIFieldEnable'] : false; + let oneStockExists = true; + let catId = 0 + + await Promise.all( + globalBrandData.map(async (item, index) => { + if (isValid) { + catId = item.SubCategoryId; + let cimgData = catImages.find(ci => ci.SubCategoryId == catId) || {}; + if (StoreCameraAllow && isHdrImgEnable == true && (cimgData.ImagePath == null || cimgData.ImagePath == '')) { + notify(ST.Pleaseclickimagefor + ' ' + item.SubCategoryName, 'SHORT'); + isValid = false; + } + else { + let brandList = item.brandList || []; + if (brandList.length > 0) { + brandList.map(async (brand, brand_index) => { + let skulist = brand.skulist || []; + if (isValid == true) { + if (skulist.length > 0) { + await Promise.all( + skulist.map(async (skuItem, skuIndex) => { + if (isValid == true) { + let skuData = SKUStockData.find(ci => ci.SubCategoryId == item.SubCategoryId && ci.ProductId == skuItem.ProductId) || {}; + let stock = skuData.Stock != null ? skuData.Stock : ''; + let PackType = skuData.PackType != null ? skuData.PackType : ''; + console.log("validate_PackType", PackType) + ProductList.push(skuItem.ProductId) + let SALE_stock = skuData.SALE_stock || ''; + let ex_stock = skuData.ExpiryStock != null ? skuData.ExpiryStock : ''; + let damage_stock = skuData.DamagedStock != null ? skuData.DamagedStock : ''; + let lost_stock = skuData.LostStock != null ? skuData.LostStock : ''; + let isSKUPresent = skuData.isSKUPresent != null ? skuData.isSKUPresent : 0; + let br_stock = skuData.BackRoomStock != null ? skuData.BackRoomStock : ''; + let NearExpiry_stock1 = skuData.NearExpiry1 != null ? skuData.NearExpiry1 : ''; + let NearExpiry_stock2 = skuData.NearExpiry2 != null ? skuData.NearExpiry2 : ''; + let NearExpiry_stock3 = skuData.NearExpiry3 != null ? skuData.NearExpiry3 : ''; + let OutOfStock = skuData.OutOfStock != null ? skuData.OutOfStock : deftogvalue; + let LessThanMBQ = skuData.LessThanMBQ != null ? skuData.LessThanMBQ : deftogvalue; + let IsCompetitor = skuItem.IsCompetitor == '1' || skuItem.IsCompetitor == 1 ? true : false; + let isMSLMandCond = !IsCompetitor && (isMSLAllow == 1 || isMSLAllow == 'true') && (skuItem.MSL == 1 || skuItem.MSL == 'true'); + let isNONMSLMandCond = !IsCompetitor && (isNONMSL_Allow == true || isNONMSL_Allow == 'true') && (skuItem.MSL != 1 && skuItem.MSL != 'true') + let IsCompetitorMand = (isCOMPStockAllow == 1 || isCOMPStockAllow == 'true') && IsCompetitor; + let isMandatory = isMSLMandCond || isNONMSLMandCond || IsCompetitorMand; + let errorobj = { 'EF_cat': item, 'EF_brand': brand, 'EF_product': skuItem } + let errorcatid = item.SubCategoryId + let error_bid = brand.BrandId + let error_pid = skuItem.ProductId + let show_errorH = false, error_HInputKey = ''; + console.log("isListedSKUEnable:", isMandatory, isMSLMandCond, isNONMSLMandCond, IsCompetitorMand, IsCompetitor) + if ((isListedSKUEnable == true && isSKUPresent == 1) || (!isListedSKUEnable && (isMandatory))) { + let stockCheck = parseInt(stock) || 0 + if (stockCheck > 0) { + oneStockExists = false; + } + console.log("isStockEnable-----", isStockEnable, stock, SALE_stock) + if (LessThanMBQEnable == true && LessThanMBQ == "3") { + notify("Please select required options for " + skuItem.ProductName, 'LONG'); + isValid = false; + } + else if (OutofStockEnable == true && OutOfStock == "3") { + notify("Please select required options for " + skuItem.ProductName, 'LONG'); + isValid = false; + } + else if (isStockEnable == true && stock !== 0 && (stock == null || stock == '')) { + console.log("isStockEnable--:", isStockEnable, stock) + notify(ST.Pleaseenter + ' ' + isStockDis_Name + ' ' + ST.for + ' ' + skuItem.ProductName, 'LONG'); + isValid = false; + show_errorH = true, error_HInputKey = 'input1_'; + } else if (isStockEnable == true && isProductPackTypeEnable && Number(stock) > 0 && (PackType == null || PackType == '')) { + console.log("isProductPackTypeEnable--:", isStockEnable, isProductPackTypeEnable, PackType) + notify('Please Select PackType ' + ST.for + ' ' + skuItem.ProductName, 'LONG'); + isValid = false; + } + else if (isStockEnable == true && stock != '' && parseInt(SALE_stock) > parseInt(stock)) { + notify('STOCK value must NOT BE LESS than entered SALE' + ' ' + isStockDis_Name + ' ' + ST.for + ' ' + skuItem.ProductName, 'LONG'); + isValid = false; + show_errorH = true, error_HInputKey = 'input1_'; + } + else if (isBRStockEnable == true && br_stock !== 0 && (br_stock == null || br_stock == '')) { + notify(ST.Pleaseenter + ' ' + isBRStockDis_Name + ' ' + ST.for + ' ' + skuItem.ProductName, 'LONG'); + isValid = false; + show_errorH = true, error_HInputKey = 'input2_'; + } + else if (isDStockEnable == true && damage_stock !== 0 && (damage_stock == null || damage_stock == '')) { + notify(ST.Pleaseenter + ' ' + isDStockDis_Name + ' ' + ST.for + ' ' + skuItem.ProductName, 'LONG'); + isValid = false; + show_errorH = true, error_HInputKey = 'input3_'; + } + else if (isLStockEnable == true && lost_stock !== 0 && (lost_stock == null || lost_stock == '')) { + notify(ST.Pleaseenter + ' ' + isDStockDis_Name + ' ' + ST.for + ' ' + skuItem.ProductName, 'LONG'); + isValid = false; + show_errorH = true, error_HInputKey = 'input4_'; + } + else if (isExStockEnable == true && ex_stock !== 0 && (ex_stock == null || ex_stock == '')) { + notify(ST.Pleaseenter + ' ' + isExStockDis_Name + ' ' + ST.for + ' ' + skuItem.ProductName, 'LONG'); + isValid = false; + show_errorH = true, error_HInputKey = 'input5_'; + } + else if (NrExpiry1Enable == true && NearExpiry_stock1 !== 0 && (NearExpiry_stock1 == null || NearExpiry_stock1 == '')) { + notify(ST.Pleaseenter + ' ' + NrExpiry1_Dis_Name + ' ' + ST.for + ' ' + skuItem.ProductName, 'LONG'); + isValid = false; + show_errorH = true, error_HInputKey = 'input6_'; + } + else if (NrExpiry2Enable == true && NearExpiry_stock2 !== 0 && (NearExpiry_stock2 == null || NearExpiry_stock2 == '')) { + notify(ST.Pleaseenter + ' ' + NrExpiry2_Dis_Name + ' ' + ST.for + ' ' + skuItem.ProductName, 'LONG'); + isValid = false; + show_errorH = true, error_HInputKey = 'input7_'; + } + else if (NrExpiry3Enable == true && NearExpiry_stock3 !== 0 && (NearExpiry_stock3 == null || NearExpiry_stock3 == '')) { + notify(ST.Pleaseenter + ' ' + NrExpiry3_Dis_Name + ' ' + ST.for + ' ' + skuItem.ProductName, 'LONG'); + isValid = false; + show_errorH = true, error_HInputKey = 'input8_'; + } + + if (show_errorH) { + errorobj['EF_InputKey'] = error_HInputKey; + setErrorField(errorobj) + setError(true) + let refIn1 = inputRefs.current[error_HInputKey + errorcatid + '_' + error_bid + '_' + error_pid] + refIn1.focus(); + } + + } + } + }) + ); + } + } + + }); + } + + } + } + }) + ); + console.log("isPartialEnable-----", isPartialEnable) + if (isPartialEnable) { + let total_stock = await validateStockValuePartial(ProductList) + if (isValid && isSALEExists && oneStockExists && total_stock == 0) { + notify("Fill Stock greater than 0 for atleast one product", 'SHORT'); + isValid = false; + } + } else { + if (isValid && isSALEExists && oneStockExists) { + notify("Fill Stock greater than 0 for atleast one product", 'SHORT'); + isValid = false; + } + } + + console.log('isValid:', isValid); + return isValid; + } + + + + function openAddStkModal(cat, skuItem) { + setCurrentBrand(cat); + setCurrentProduct(skuItem); + let allSKUData = SKUStockData; + let defData = { 'SubCategoryId': cat.SubCategoryId, 'ProductId': skuItem.ProductId }; + const skud_index = allSKUData.findIndex(i => i.SubCategoryId == cat.SubCategoryId && i.ProductId == skuItem.ProductId); + const skud = skud_index >= 0 ? (allSKUData[skud_index] || defData) : defData; + setShowStockModal(true); + + } + + function onSaveCancel() { + setShowAlert(false) + } + + function setStockDate(date) { + let d1 = moment(date).format('DD/MM/YYYY'); + let cstock = currentStock; + cstock['date'] = date; + cstock['mfd'] = d1; + setCurrentStock(cstock); + setShowDatePicker(false); + } + + function setCS_Stock(key, val, type = '') { + if (val != '') { + let isValid = validateNumber(val, type); + if (!isValid) { + return; + } + } + + let cstock = currentStock; + cstock[key] = val; + console.log(key, val) + setCurrentStock(cstock); + setrerendermodal(!rerendermodal); + } + + + + function getAllSum(mfdStocks = [], cstock = {}) { + let { mfd, date, stock } = cstock + let sumOfAllStocks = parseInt(stock); + return new Promise((resolve, reject) => { + if (mfdStocks.length > 0) { + for (let i in mfdStocks) { + let ds = mfdStocks[i]; + sumOfAllStocks += parseInt(ds.stock); + if (i == mfdStocks.length - 1) { + resolve(sumOfAllStocks) + } + } + } + else { + resolve(sumOfAllStocks) + } + }).catch((err) => { + console.log(err); + return 0; + }) + } + + async function addMFDStock() { + Keyboard.dismiss(); + let cat = currentBrand + let skuItem = currentProduct + let cstock = currentStock; + var allSKUData = SKUStockData; + let defData = { 'SubCategoryId': cat.SubCategoryId, 'ProductId': skuItem.ProductId }; + const skud_index = allSKUData.findIndex(i => i.SubCategoryId == cat.SubCategoryId && i.ProductId == skuItem.ProductId); + var skud = skud_index >= 0 ? (allSKUData[skud_index] || defData) : defData; + let mfdStocks = skud['mfdStocks'] || []; + let product_total_stock = skud['Stock']; + let product_damage_stock = parseInt(skud['DamagedStock'] || 0); + let product_lost_stock = parseInt(skud['LostStock'] || 0); + let product_ex_stock = parseInt(skud['ExpiryStock'] || 0); + + let product_stock = product_ex_stock;//product_total_stock-(product_damage_stock+product_lost_stock+product_ex_stock); + let { mfd, date, stock, lotno } = cstock + + + + + if (mfd == null || mfd == '') { + notify(ST.Pleaseselectdate); + return; + } + else if (stock == null || stock == '') { + notify(ST.Pleaseenterstock); + return; + } + else if (lotno == null || lotno == '') { + notify(ST.Pleaseenterlotno); + return; + } + else if (mfdStocks.findIndex(i => i.mfd == mfd) >= 0) { + notify(ST.ThisdateisalreadyaddedPleaseselectdifferentdate); + return; + } + else { + + console.log('added') + mfdStocks.push(cstock); + skud['mfdStocks'] = mfdStocks; + skud_index >= 0 ? allSKUData[skud_index] = skud : allSKUData.push(skud); + BgWindowData(allSKUData) + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + setCurrentStock({}); + setShowStockModal(false); + } + } + + + function removeMFDStock() { + let cat = toRemoveCat; + let skuItem = toRemoveSKU; + let cstockIndex = toRemoveId; + let allSKUData = SKUStockData; + let defData = { 'SubCategoryId': cat.SubCategoryId, 'ProductId': skuItem.ProductId }; + const skud_index = allSKUData.findIndex(i => i.SubCategoryId == cat.SubCategoryId && i.ProductId == skuItem.ProductId); + const skud = skud_index >= 0 ? (allSKUData[skud_index] || defData) : defData; + let mfdStocks = skud['mfdStocks'] || []; + mfdStocks.splice(cstockIndex, 1); + skud['mfdStocks'] = mfdStocks; + + skud_index >= 0 ? allSKUData[skud_index] = skud : allSKUData.push(skud); + setShowRemoveConfirm_M(false); + BgWindowData(allSKUData) + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + + function showRemoveConfirm(cat, skuItem, cstock, cstockIndex) { + setToRemoveId(cstockIndex); + setToRemoveCat(cat); + setToRemoveSKU(skuItem); + setShowRemoveConfirm_M(true); + } + + + + function FilterStores(searchedQry) { + searchedQry = searchedQry.toLowerCase(); + //console.log('searchedQry', searchedQry); + + if (!searchedQry) { + // If there's no search query, return the full globalBrandData + setBrandData(globalBrandData); + setrerenderdata(!rerenderdata); + setrerenderdata2(!rerenderdata2); + return; + } + + const filteredData = globalBrandData.map(item => { + const filteredBrands = item.brandList?.map(brand => { + const filteredSkulist = brand.skulist?.filter(sku => + sku.ProductName.toLowerCase().includes(searchedQry) + ); + + if (filteredSkulist.length > 0) { + return { ...brand, skulist: filteredSkulist }; + } + return null; + }).filter(brand => brand !== null); + + if (filteredBrands.length > 0) { + return { ...item, brandList: filteredBrands }; + } + return null; + }).filter(item => item !== null); + + // console.log('filteredData:', filteredData); + setBrandData(filteredData); + setrerenderdata(!rerenderdata); + setrerenderdata2(!rerenderdata2); + } + + + async function focusToNext(cat, brand, sku, type = '1', outerId, middleId, index) { + let activeKey = ''; + let arr = Object.keys(inputRefs.current); + activeKey = 'input' + type + '_' + cat.SubCategoryId + '_' + brand.BrandId + '_' + sku.ProductId; + let activeIndex = arr.indexOf(activeKey); + if (activeIndex >= 0 && activeIndex < arr.length - 1) { + let nextKey = arr[++activeIndex] + let nextRef = inputRefs.current[nextKey]; + nextRef.focus(); + } + else { + return + } + } + + function renderDatePicker() { + let today = new Date(); + console.log('today:', today); + let d1 = Object.keys(currentStock).length > 0 && currentStock.date != null && currentStock.date != '' ? new Date(currentStock.date) : new Date(); + return ( + { setStockDate(selectedDate) }} + /> + ); + } + + function _render_StockModal() { + let mfd = Object.keys(currentStock).length > 0 && currentStock.mfd != null && currentStock.mfd != '' ? currentStock.mfd : ''; + let stock = Object.keys(currentStock).length > 0 && currentStock.stock != null ? currentStock.stock : ''; + let lotno = Object.keys(currentStock).length > 0 && currentStock.lotno != null ? currentStock.lotno : ''; + + return ( + + + + {ST.ExpiryDate} + + {mfd} + + { setShowDatePicker(true); }}> + + + + {showDatePicker == true && + renderDatePicker() + } + + + {ST.Stock} + + { setCS_Stock('stock', val, 'numeric') }} + /> + + + + {ST.LotNo} + + { setCS_Stock('lotno', val, 'text') }} + /> + + + + + { setCurrentStock({}); setShowStockModal(false); }}> + {ST.Cancel} + + { addMFDStock() }}> + {ST.Add} + + + + + ) + } + + + function toggleCollapse(cat = {}, catIndex) { + let allData = brandData; + let isCollapsed = cat.isCollapsed; + cat['isCollapsed'] = !isCollapsed; + allData[catIndex] = cat; + setBrandData(allData); + setGlobalBrandData(allData); + setrerenderdata(!rerenderdata); + } + + + function toggleCollapse2(cat = {}, catIndex, brand = {}, brand_index) { + let allData = brandData; + let isBrandCollapsed = brand.isBrandCollapsed; + let brandList = cat.brandList || []; + + brand['isBrandCollapsed'] = !isBrandCollapsed; + brandList[brand_index] = brand; + cat['brandList'] = brandList; + allData[catIndex] = cat; + setBrandData(allData); + setGlobalBrandData(allData); + setrerenderdata(!rerenderdata); + } + + function onChoiceSelect(item, skuItem, val, key, animatedChoice) { + //console.log('onChoiceSelect', animatedChoice) + + var val1 = 0; + if (val == 1) { + val1 = 1; + } + + if (animatedChoice != null) { + Animated.timing(animatedChoice, { + toValue: val1, + duration: 400, + useNativeDriver: false, + }).start(); + } + onStockValChange(item, skuItem, val, key, ''); + } + + async function onStockValChange(item, skuItem, val, key, type = '') { + setError(false) + setErrorField({}) + if (val != '') { + let isValid = validateNumber(val, type); + if (!isValid) { + return; + } + } + + let allSKUData = [...SKUStockData]; + let defData = { 'SubCategoryId': item.SubCategoryId, 'ProductId': skuItem.ProductId }; + const skud_index = allSKUData.findIndex(i => i.SubCategoryId == item.SubCategoryId && i.ProductId == skuItem.ProductId); + const skud = skud_index >= 0 ? { ...(allSKUData[skud_index] || defData) } : { ...defData }; + skud[key] = val; + console.log("skud------------", val, skud, skuItem?.ProductName) + + // ============================= + // HANDLE SKU PRESENT TOGGLE + // ============================= + if (key === 'isSKUPresent') { + if (val == 0) { + const hasSale = + skuItem.SALE_stock !== undefined && + skuItem.SALE_stock !== null && + skuItem.SALE_stock.toString().trim() !== ''; + console.log("skuItem.SALE_stock", skuItem.SALE_stock) + if (hasSale) { + let isSALEExists = await checkMDStockScreenExists(storeData, 'SALE'); + if (isSALEExists) { + Alert.alert( + "Alert", + `${skuItem?.ProductName} is linked to Sales KPI with values already entered. Do you want to remove?`, + [ + { + text: "Cancel", + style: "cancel", + onPress: () => { + // restore toggle back to YES + const updated = [...SKUStockData]; + const idx = updated.findIndex(i => + i.SubCategoryId == item.SubCategoryId && + i.ProductId == skuItem.ProductId + ); + + if (idx >= 0) { + updated[idx] = { + ...updated[idx], + isSKUPresent: 1, + showAllSKU_Fields: true + }; + } + + BgWindowData(updated); + BgUnsavedChanges(true); + } + }, + { + text: "Proceed", + onPress: () => { + // clear values after confirmation + const updated = [...SKUStockData]; + const idx = updated.findIndex(i => + i.SubCategoryId == item.SubCategoryId && + i.ProductId == skuItem.ProductId + ); + + if (idx >= 0) { + updated[idx] = { + ...updated[idx], + Stock: "", + SALE: "", + isSKUPresent: 0, + showAllSKU_Fields: false + }; + } + + BgWindowData(updated); + BgUnsavedChanges(true); + } + } + ] + ); + + return; // stop execution until user chooses + } + } + + // if no sale exists → directly clear + skud.Stock = ""; + skud.SALE = ""; + skud.showAllSKU_Fields = false; + + } else { + skud.showAllSKU_Fields = true; + } + } + + // ============================= + // UPDATE ARRAY (IMMUTABLE) + // ============================= + skud_index >= 0 ? allSKUData[skud_index] = skud : allSKUData.push(skud); + // setSKUStockData(allSKUData); + BgWindowData(allSKUData) + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + + + function onselectionChange(option, keyLbl, keyVal, otherData) { + // Make a copy of SKUStockData + let allSKUData = [...SKUStockData]; + console.log("datrr====>", option, otherData) + // Default object if SKU not found + let defData = { SubCategoryId: otherData?.cat?.SubCategoryId, ProductId: otherData?.skus?.ProductId }; + // Find existing SKU entry + const skud_index = allSKUData.findIndex( + i => i.SubCategoryId === otherData?.cat?.SubCategoryId && i.ProductId === otherData?.skus?.ProductId + ); + // Get existing or default SKU object + const skud = skud_index >= 0 ? { ...allSKUData[skud_index] } : defData; + // Update PackType + skud[keyLbl] = option?.label; // dynamically set key + if (keyLbl === "PackType") { + skud.PackType = option.label; // optional new column + } + // Insert or update SKU in the array + if (skud_index >= 0) { + allSKUData[skud_index] = skud; + } else { + allSKUData.push(skud); + } + + //Update the background data and re-render + BgWindowData(allSKUData); + BgUnsavedChanges(true); + setrerenderdata(prev => !prev); + console.log("Updated SKU with PackType:", JSON.stringify(skud)); + } + + + function _renderStocks() { + let isHdrImgIndex = KPIFields.findIndex(i => i.KPIFieldName == 'HeaderImageAllow') + let isHdrImgKPIObj = isHdrImgIndex >= 0 ? KPIFields[isHdrImgIndex] : {}; + let isHdrImgEnable = isHdrImgIndex >= 0 ? isHdrImgKPIObj['KPIFieldEnable'] : false; + + let isListedSKUIndex = KPIFields.findIndex(i => i.KPIFieldName == 'ListedSKU') + let isListedSKUKPIObj = isListedSKUIndex >= 0 ? KPIFields[isListedSKUIndex] : {}; + let isListedSKUEnable = isListedSKUIndex >= 0 ? isListedSKUKPIObj['KPIFieldEnable'] : true; + let isStockIndex = KPIFields.findIndex(i => i.KPIFieldName == 'Stock') + let isStockKPIObj = isStockIndex >= 0 ? KPIFields[isStockIndex] : {}; + let isStockEnable = isStockIndex >= 0 ? isStockKPIObj['KPIFieldEnable'] : true; + let isStockDis_Name = isStockIndex >= 0 ? isStockKPIObj['KPIFieldDisplayName'] : ''; + + let isProductPackTypeIndex = KPIFields.findIndex(i => i.KPIFieldName == 'ProductPackType') + let isProductPackTypeObj = isProductPackTypeIndex >= 0 ? KPIFields[isProductPackTypeIndex] : {}; + let isProductPackTypeEnable = isProductPackTypeIndex >= 0 ? isProductPackTypeObj['KPIFieldEnable'] : false; + + + let isBRStockIndex = KPIFields.findIndex(i => i.KPIFieldName == 'BackRoomStock') + let isBRStockKPIObj = isBRStockIndex >= 0 ? KPIFields[isBRStockIndex] : {}; + let isBRStockEnable = isBRStockIndex >= 0 ? isBRStockKPIObj['KPIFieldEnable'] : true; + let isBRStockDis_Name = isBRStockIndex >= 0 ? isBRStockKPIObj['KPIFieldDisplayName'] : ''; + + let isDStockIndex = KPIFields.findIndex(i => i.KPIFieldName == 'DamageStock') + let isDStockKPIObj = isDStockIndex >= 0 ? KPIFields[isDStockIndex] : {}; + let isDStockEnable = isDStockIndex >= 0 ? isDStockKPIObj['KPIFieldEnable'] : false; + let isDStockDis_Name = isDStockIndex >= 0 ? isDStockKPIObj['KPIFieldDisplayName'] : ''; + + let isLStockIndex = KPIFields.findIndex(i => i.KPIFieldName == 'LostStock') + let isLStockKPIObj = isLStockIndex >= 0 ? KPIFields[isLStockIndex] : {}; + let isLStockEnable = isLStockIndex >= 0 ? isLStockKPIObj['KPIFieldEnable'] : false; + let isLStockDis_Name = isLStockIndex >= 0 ? isLStockKPIObj['KPIFieldDisplayName'] : ''; + + let isExStockIndex = KPIFields.findIndex(i => i.KPIFieldName == 'ExpiredStock') + let isExStockKPIObj = isExStockIndex >= 0 ? KPIFields[isExStockIndex] : {}; + let isExStockEnable = isExStockIndex >= 0 ? isExStockKPIObj['KPIFieldEnable'] : false; + let isExStockDis_Name = isExStockIndex >= 0 ? isExStockKPIObj['KPIFieldDisplayName'] : ''; + + let isMFDIndex = KPIFields.findIndex(i => i.KPIFieldName == 'MFD') + let isMFD_KPIObj = isMFDIndex >= 0 ? KPIFields[isMFDIndex] : {}; + let isMFDEnable = isMFDIndex >= 0 ? isMFD_KPIObj['KPIFieldEnable'] : false; + let isMFDDis_Name = isMFDIndex >= 0 ? isMFD_KPIObj['KPIFieldDisplayName'] : ''; + + let NrExpiry1Index = KPIFields.findIndex(i => i.KPIFieldName == 'NrExpiry1') + let NrExpiry1KPIObj = NrExpiry1Index >= 0 ? KPIFields[NrExpiry1Index] : {}; + let NrExpiry1Enable = NrExpiry1Index >= 0 ? NrExpiry1KPIObj['KPIFieldEnable'] : false; + let NrExpiry1_Dis_Name = NrExpiry1Index >= 0 ? NrExpiry1KPIObj['KPIFieldDisplayName'] : ''; + + let NrExpiry2Index = KPIFields.findIndex(i => i.KPIFieldName == 'NrExpiry2') + let NrExpiry2KPIObj = NrExpiry2Index >= 0 ? KPIFields[NrExpiry2Index] : {}; + let NrExpiry2Enable = NrExpiry2Index >= 0 ? NrExpiry2KPIObj['KPIFieldEnable'] : false; + let NrExpiry2_Dis_Name = NrExpiry2Index >= 0 ? NrExpiry2KPIObj['KPIFieldDisplayName'] : ''; + + let NrExpiry3Index = KPIFields.findIndex(i => i.KPIFieldName == 'NrExpiry3') + let NrExpiry3KPIObj = NrExpiry1Index >= 0 ? KPIFields[NrExpiry3Index] : {}; + let NrExpiry3Enable = NrExpiry1Index >= 0 ? NrExpiry3KPIObj['KPIFieldEnable'] : false; + let NrExpiry3_Dis_Name = NrExpiry1Index >= 0 ? NrExpiry3KPIObj['KPIFieldDisplayName'] : ''; + + let MSLIndex = KPIFields.findIndex(i => i.KPIFieldName == 'MSL'); + let MSLObj = MSLIndex >= 0 ? KPIFields[MSLIndex] : {}; + let isMSLAllow = MSLIndex >= 0 ? MSLObj['KPIFieldEnable'] : true; + + let NONMSL_Index = KPIFields.findIndex(i => i.KPIFieldName == 'ChildImageAllow'); + let NONMSL_Obj = NONMSL_Index >= 0 ? KPIFields[NONMSL_Index] : {}; + let isNONMSL_Allow = NONMSL_Index >= 0 ? NONMSL_Obj['KPIFieldEnable'] : true; + + + // yes no fields + let OutofStockI = KPIFields.findIndex(i => i.KPIFieldName == 'OutofStock') + let OutofStockObj = OutofStockI >= 0 ? KPIFields[OutofStockI] : {}; + let OutofStockEnable = OutofStockI >= 0 ? OutofStockObj['KPIFieldEnable'] : false; + let OutofStockDisName = OutofStockI >= 0 ? OutofStockObj['KPIFieldDisplayName'] : ''; + let LessThanMBQI = KPIFields.findIndex(i => i.KPIFieldName == 'LessThanMBQ') + let LessThanMBQObj = LessThanMBQI >= 0 ? KPIFields[LessThanMBQI] : {}; + let LessThanMBQEnable = LessThanMBQI >= 0 ? LessThanMBQObj['KPIFieldEnable'] : false; + let LessThanMBQDisName = LessThanMBQI >= 0 ? LessThanMBQObj['KPIFieldDisplayName'] : ''; + + let SamePriceYesNoI = KPIFields.findIndex(i => i.KPIFieldName == 'SamePriceYesNo') + let SamePriceYesNoObj = SamePriceYesNoI >= 0 ? KPIFields[SamePriceYesNoI] : {}; + let SamePriceYesNoEnable = SamePriceYesNoI >= 0 ? SamePriceYesNoObj['KPIFieldEnable'] : false; + let SamePriceYesNoDisName = SamePriceYesNoI >= 0 ? SamePriceYesNoObj['KPIFieldDisplayName'] : ''; + + let ShowMBQLabelI = KPIFields.findIndex(i => i.KPIFieldName == 'ShowMBQ') + let ShowMBQLabelObj = ShowMBQLabelI >= 0 ? KPIFields[ShowMBQLabelI] : {}; + let ShowMBQLabel = ShowMBQLabelI >= 0 ? ShowMBQLabelObj['KPIFieldEnable'] : false; + let ShowMBQLabelDisName = ShowMBQLabelI >= 0 ? ShowMBQLabelObj['KPIFieldDisplayName'] : ''; + let DefaultStockToggleI = KPIFields.findIndex(i => i.KPIFieldName == 'DefaultStockToggle') + let DefaultStockToggleObj = DefaultStockToggleI >= 0 ? KPIFields[DefaultStockToggleI] : {}; + let DefaultStockToggle = DefaultStockToggleI >= 0 ? DefaultStockToggleObj['KPIFieldEnable'] : false; + let DefaultStockToggleValue = DefaultStockToggleI >= 0 ? DefaultStockToggleObj['KPIFieldDisplayName'] : "2"; + let deftogvalue = DefaultStockToggleValue == "3" ? "3" : (DefaultStockToggle == "1" ? "1" : "0"); + + let isColor_MSLIndex = KPIFieldsWithoutFilter.findIndex(i => i.KPIFieldName == 'Color_MSL') + let isColor_MSLObj = isColor_MSLIndex >= 0 ? KPIFieldsWithoutFilter[isColor_MSLIndex] : {}; + let isColor_MSLEnable = isColor_MSLIndex >= 0 ? isColor_MSLObj['KPIFieldEnable'] : false; + let Color_MSL = isColor_MSLEnable && isColor_MSLIndex >= 0 ? isColor_MSLObj['KPIFieldDisplayName'] : "" + + let isColor_NONMSLIndex = KPIFieldsWithoutFilter.findIndex(i => i.KPIFieldName == 'Color_NONMSL') + let isColor_NONMSLObj = isColor_NONMSLIndex >= 0 ? KPIFieldsWithoutFilter[isColor_NONMSLIndex] : {}; + let isColor_NONMSLEnable = isColor_NONMSLIndex >= 0 ? isColor_NONMSLObj['KPIFieldEnable'] : false; + let Color_NONMSL = isColor_NONMSLEnable && isColor_NONMSLIndex >= 0 ? isColor_NONMSLObj['KPIFieldDisplayName'] : "" + + let isColor_CompetitionIndex = KPIFieldsWithoutFilter.findIndex(i => i.KPIFieldName == 'Color_Competition') + let isColor_CompetitionObj = isColor_CompetitionIndex >= 0 ? KPIFieldsWithoutFilter[isColor_CompetitionIndex] : {}; + let isColor_CompetitionEnable = isColor_CompetitionIndex >= 0 ? isColor_CompetitionObj['KPIFieldEnable'] : false; + let Color_Competition = isColor_CompetitionEnable && isColor_CompetitionIndex >= 0 ? isColor_CompetitionObj['KPIFieldDisplayName'] : "" + console.log("Color_MSL----", Color_MSL, Color_NONMSL, Color_Competition) + + const getBackgroundStyle = (skus) => { + if (skus?.MSL && skus?.MSL === 1 && skus?.IsCompetitor === 0 && Color_MSL !== "") { + return { backgroundColor: Color_MSL }; + } + if (skus?.MSL === 0 && skus?.IsCompetitor === 0 && Color_NONMSL !== "") { + return { backgroundColor: Color_NONMSL }; + } + if (skus?.IsCompetitor === 1 && Color_Competition !== "") { + return { backgroundColor: Color_Competition }; + } + + return null; + }; + + return ( + + { + const cat = item; + const outerId = index + //console.log("cat--outter---", item); + const cindex = catImages.findIndex(i => i.SubCategoryId == item.SubCategoryId); + const cimgName = cindex >= 0 ? (catImages[cindex] ? catImages[cindex].ImageName : '') : ''; + const cimgPath = cindex >= 0 ? (catImages[cindex] ? catImages[cindex].ImagePath : '') : ''; + const showIMg = cimgPath != '' && cimgPath != null; + let isCollapsed = cat.isCollapsed != null ? item.isCollapsed : false; + // get error field category id + let EF_cat = errorfield.EF_cat != null ? errorfield.EF_cat : {}; + let errorcatid = EF_cat.SubCategoryId || ''; + // let isHdrImgDis_Name=isHdrImgIndex>=0?isHdrImgKPIObj['KPIFieldDisplayName']:''; + return ( + + + { toggleCollapse(cat, index) }}> + + {item.SubCategoryName || item.CategoryName || item.BrandName} + + {isCollapsed == true && } + {isCollapsed == false && } + + {(!isCollapsed && isHdrImgEnable == true) && + + + {!showIMg && + { openCamera(item) }}> + + + } + {showIMg && + + + { openCamera(item) }}> + + + + } + } + + {!isCollapsed && + item.brandList != null && item.brandList.length > 0 && + middleItem.id} + ref={(ref) => { + if (ref) middleFlatListRefs.current[outerId] = ref; + }} + + renderItem={({ item: brand, index: brand_index }) => { + let isBrandCollapsed = brand.isBrandCollapsed != null ? brand.isBrandCollapsed : false; + const middleId = brand_index; + // get error field brand id + let EF_brand = errorfield.EF_brand != null ? errorfield.EF_brand : {}; + let error_bid = EF_brand.BrandId || ''; + //console.log("branddata------", brand) + return ( + + { toggleCollapse2(cat, index, brand, brand_index) }}> + + + {brand.BrandName || brand.SubCategoryName || brand.skulist.BrandName} + + {isBrandCollapsed == true && } + {isBrandCollapsed == false && } + + + + {!isBrandCollapsed && + + { return skuIndex; }} + // keyExtractor={(innerItem) => innerItem.id} + ref={(ref) => { + if (ref) innerFlatListRefs.current[middleId] = ref; + }} + + renderItem={({ item, index }) => { + const skus = item; + const sku_index = index; + let thisCatSkuData_i = SKUStockData.findIndex(i => i.SubCategoryId == cat.SubCategoryId && i.ProductId == skus.ProductId); + let thisCatSkuData = thisCatSkuData_i >= 0 ? (SKUStockData[thisCatSkuData_i] || {}) : {}; + + let stock = thisCatSkuData.Stock != null ? thisCatSkuData.Stock : ''; + let PackType = thisCatSkuData.PackType != null ? thisCatSkuData.PackType : ''; + + let br_stock = thisCatSkuData.BackRoomStock != null ? thisCatSkuData.BackRoomStock : ''; + let Old_Stock = thisCatSkuData.Old_Stock != null ? thisCatSkuData.Old_Stock : ''; + let OldDamagedStock = thisCatSkuData.OldDamagedStock != null ? thisCatSkuData.OldDamagedStock : ''; + let OldLostStock = thisCatSkuData.OldLostStock != null ? thisCatSkuData.OldLostStock : ''; + let OldExStock = thisCatSkuData.OldExStock != null ? thisCatSkuData.OldExStock : ''; + let isSKUPresent = thisCatSkuData.isSKUPresent != null ? thisCatSkuData.isSKUPresent : 0; + // console.log("isskupreee===", isSKUPresent) + let showAllSKU_Fields = thisCatSkuData.showAllSKU_Fields != null ? thisCatSkuData.showAllSKU_Fields : false; + let OutOfStock = thisCatSkuData.OutOfStock != null ? thisCatSkuData.OutOfStock : deftogvalue; + let PriceYesNo = thisCatSkuData.PriceYesNo != null ? thisCatSkuData.PriceYesNo : 0; + let LessThanMBQ = thisCatSkuData.LessThanMBQ != null ? thisCatSkuData.LessThanMBQ : deftogvalue; + + let ex_stock = thisCatSkuData.ExpiryStock != null ? thisCatSkuData.ExpiryStock : ''; + let damage_stock = thisCatSkuData.DamagedStock != null ? thisCatSkuData.DamagedStock : ''; + let lost_stock = thisCatSkuData.LostStock != null ? thisCatSkuData.LostStock : ''; + let mfdStocks = thisCatSkuData.mfdStocks || []; + + let NearExpiry_stock1 = thisCatSkuData.NearExpiry1 != null ? thisCatSkuData.NearExpiry1 : ''; + let NearExpiry_stock2 = thisCatSkuData.NearExpiry2 != null ? thisCatSkuData.NearExpiry2 : ''; + let NearExpiry_stock3 = thisCatSkuData.NearExpiry3 != null ? thisCatSkuData.NearExpiry3 : ''; + + let isMandatory = ((isMSLAllow == 1 || isMSLAllow == 'true') && (skus.MSL == 1 || skus.MSL == 'true')) || ((isNONMSL_Allow == 1 || isNONMSL_Allow == 'true') && (skus.MSL != 1 && skus.MSL != 'true')) + let IsCompetitor = skus.IsCompetitor == '1' || skus.IsCompetitor == 1 ? true : false; + + + let xpos = OutOfStock == "3" ? 0 : (OutOfStock == 1 ? -75 : 0); + if (skus.animatedChoice != null) { + xpos = skus.animatedChoice.interpolate({ + inputRange: [0, 1], + outputRange: [0, -75], + }); + } + + let xpos1 = LessThanMBQ == "3" ? 0 : (LessThanMBQ == 1 ? -75 : 0); + if (skus.animatedChoice2 != null) { + xpos1 = skus.animatedChoice2.interpolate({ + inputRange: [0, 1], + outputRange: [0, -75], + }); + } + + // change color for competitor + let card_bg = (IsCompetitor ? { backgroundColor: PageTheme.$card_colorYellowLight } : (isMandatory ? { backgroundColor: PageTheme.$fifth_color } : {})); + let card_border = (IsCompetitor ? { borderColor: PageTheme.$card_colorYellowDark } : (isMandatory ? { borderColor: PageTheme.$primary_color } : {})); + + // get error field product id + let EF_product = errorfield.EF_product != null ? errorfield.EF_product : {}; + let error_pid = EF_product.ProductId || ''; + let EF_InputKey = errorfield.EF_InputKey; + let show_errorhere = errorcatid == cat.SubCategoryId && error_bid == brand.BrandId && error_pid == skus.ProductId; + + let errorStyle_ST = (error && show_errorhere && EF_InputKey == 'input1_' ? customStyle.stk_inptSTyle_error : {}); + let errorStyle_BS = (error && show_errorhere && EF_InputKey == 'input2_' ? customStyle.stk_inptSTyle_error : {}); + let errorStyle_DS = (error && show_errorhere && EF_InputKey == 'input3_' ? customStyle.stk_inptSTyle_error : {}); + let errorStyle_LS = (error && show_errorhere && EF_InputKey == 'input4_' ? customStyle.stk_inptSTyle_error : {}); + let errorStyle_EXS = (error && show_errorhere && EF_InputKey == 'input5_' ? customStyle.stk_inptSTyle_error : {}); + let errorStyle_NEX1 = (error && show_errorhere && EF_InputKey == 'input6_' ? customStyle.stk_inptSTyle_error : {}); + let errorStyle_NEX2 = (error && show_errorhere && EF_InputKey == 'input7_' ? customStyle.stk_inptSTyle_error : {}); + let errorStyle_NEX3 = (error && show_errorhere && EF_InputKey == 'input8_' ? customStyle.stk_inptSTyle_error : {}); + + return ( + + + {isListedSKUEnable == true && + + + { console.log('valchange:', val); let val1 = (val == true) ? 1 : 0; onStockValChange(cat, skus, val1, 'isSKUPresent', '') }} + // cat[idCol],brand[idCol],data + // onValueChange={(val)=>{console.log('valchange:',val); let val1=(val==true)?1:0; onStockValChange(cat,skus,val1,'isSKUPresent','') }} + style={[customStyle.openStkP_checkbox, (Platform.OS == 'ios' ? { height: 20, width: 20, marginTop: 8, marginLeft: 8, } : {})]} + tintColors={{ true: PageTheme.$primary_color, false: PageTheme.$text_color_light }} + /> + + {skus.ProductName} + + } + + {isListedSKUEnable != true && + + {skus.ArticleCode && skus.ArticleCode.trim() !== "" + ? `${skus.ProductName} [${skus.ArticleCode}]` + : skus.ARTICLE_CODE && skus.ARTICLE_CODE.trim() !== "" + ? `${skus.ProductName} [${skus.ARTICLE_CODE}]` + : skus.ProductName} + } + + {((isListedSKUEnable == true && showAllSKU_Fields == true) || isListedSKUEnable == false) && + + {ShowMBQLabel == true && + + + {'MBQ :'} + {skus.MBQ} + + + } + {OutofStockEnable == true && + {OutofStockDisName} + + + + { onChoiceSelect(cat, skus, 1, 'OutOfStock', skus.animatedChoice) }}> + {ST.Yes} + + { onChoiceSelect(cat, skus, 0, 'OutOfStock', skus.animatedChoice) }}> + {ST.No} + + + + } + + {LessThanMBQEnable == true && + {LessThanMBQDisName} + + + + + { onChoiceSelect(cat, skus, 1, 'LessThanMBQ', skus.animatedChoice2) }}> + {ST.Yes} + + { onChoiceSelect(cat, skus, 0, 'LessThanMBQ', skus.animatedChoice2) }}> + {ST.No} + + + + } + + {(isStockEnable == true) && + + + {isStockDis_Name} + + {/* {"shaikhhhhhh"} */} + { inputRefs.current['input1_' + cat.SubCategoryId + '_' + brand.BrandId + '_' + skus.ProductId] = reff; }} + style={[customStyle.openStk_prd_inputStyle, customStyle.openStk_prd_flex_inputStyle, customStyle.stk_inptSTyle, errorStyle_ST]} + placeholder="" + autoComplete='off' + maxLength={6} + placeholderTextColor={PageTheme.$placeholder_color} + value={(stock + '' || '')} + keyboardType='number-pad' + returnKeyType={(Platform.OS === 'ios') ? 'done' : 'next'} + blurOnSubmit={false} + onChangeText={(val) => { onStockValChange(cat, skus, val, 'Stock', 'numeric') }} + // onEndEditing={(e)=>{ checkStockVal(cat,skus,'Stock','Old_Stock',Old_Stock)}} + onSubmitEditing={() => { focusToNext(cat, brand, skus, '1', outerId, middleId, index) }} + /> + + + + + } + + {(isStockEnable == true && isProductPackTypeEnable == true) && + + + PackType + { + CustomPickerStock({ ...props, bgColor: "white" }, PackTypeList, 'PackType', 0, 'PackType', 0, + onselectionChange, { value: PackType, otherData: { cat, skus } } + ) + } + + + } + + {SamePriceYesNoEnable && + { + onChoiceSelect(cat, skus, newValue, 'PriceYesNo', skus.animatedChoice) + } + } + styles={{ + container: [customStyle.openStk_prd_colflex, customStyle.mb10], + label: [customStyle.openStk_prd_label, customStyle.openStk_prd_flexlabel], + choiceBoxCon: customStyle.openStk_prd_choiceBoxCon, + choiceBox: customStyle.openStk_prd_choiceBox, + bg: customStyle.openStkCh_absolutebg, + bgYes: customStyle.openStkCh_con_green, + bgNo: customStyle.openStkCh_con_red, + choice: customStyle.openStkCh_con1, + choiceText: customStyle.openStkCh_text, + choiceTextActive: customStyle.openStkCh_textactive, + }} + yesLabel={ST.Yes} + noLabel={ST.No} + />} + + {(isBRStockEnable == true) && + + + {isBRStockDis_Name} + { inputRefs.current['input2_' + cat.SubCategoryId + '_' + brand.BrandId + '_' + skus.ProductId] = reff; }} + style={[customStyle.openStk_prd_inputStyle, customStyle.openStk_prd_flex_inputStyle, customStyle.stk_inptSTyle, errorStyle_BS]} + placeholder="" + autoComplete='off' + maxLength={6} + placeholderTextColor={PageTheme.$placeholder_color} + value={(br_stock + '' || '')} + + keyboardType='number-pad' + returnKeyType={(Platform.OS === 'ios') ? 'done' : 'next'} + blurOnSubmit={false} + onChangeText={(val) => { onStockValChange(cat, skus, val, 'BackRoomStock', 'numeric') }} + // onEndEditing={(e)=>{ checkStockVal(cat,skus,'Stock','Old_Stock',Old_Stock)}} + onSubmitEditing={() => { focusToNext(cat, brand, skus, '2', outerId, middleId, index) }} + /> + + + } + {(isDStockEnable == true) && + + + {isDStockDis_Name} + { inputRefs.current['input3_' + cat.SubCategoryId + '_' + brand.BrandId + '_' + skus.ProductId] = reff; }} + style={[customStyle.openStk_prd_inputStyle, customStyle.openStk_prd_flex_inputStyle, customStyle.stk_inptSTyle, errorStyle_DS]} + placeholder="" + autoComplete='off' + placeholderTextColor={PageTheme.$placeholder_color} + + value={(damage_stock + '')} + maxLength={6} + keyboardType='number-pad' + returnKeyType={(Platform.OS === 'ios') ? 'done' : 'next'} + blurOnSubmit={false} + onChangeText={(val) => { onStockValChange(cat, skus, val, 'DamagedStock', 'numeric') }} + // onEndEditing={(e)=>{ checkStockVal(cat,skus,'DamagedStock','OldDamagedStock',OldDamagedStock)}} + onSubmitEditing={() => { focusToNext(cat, brand, skus, '3', outerId, middleId, index) }} + /> + + + } + {(isLStockEnable == true) && + + + {isLStockDis_Name} + { inputRefs.current['input4_' + cat.SubCategoryId + '_' + brand.BrandId + '_' + skus.ProductId] = reff; }} + style={[customStyle.openStk_prd_inputStyle, customStyle.openStk_prd_flex_inputStyle, customStyle.stk_inptSTyle, errorStyle_LS]} + placeholder="" + autoComplete='off' + placeholderTextColor={PageTheme.$placeholder_color} + value={(lost_stock + '')} + maxLength={6} + keyboardType='number-pad' + returnKeyType={(Platform.OS === 'ios') ? 'done' : 'next'} + blurOnSubmit={false} + onChangeText={(val) => { onStockValChange(cat, skus, val, 'LostStock', 'numeric') }} + // onEndEditing={(e)=>{ checkStockVal(cat,skus,'LostStock','OldLostStock',OldLostStock)}} + onSubmitEditing={() => { focusToNext(cat, brand, skus, '4', outerId, middleId, index) }} + /> + + + } + {(isExStockEnable == true) && + // && !isMFDEnable + + + {isExStockDis_Name} + { inputRefs.current['input5_' + cat.SubCategoryId + '_' + brand.BrandId + '_' + skus.ProductId] = reff; }} + style={[customStyle.openStk_prd_inputStyle, customStyle.openStk_prd_flex_inputStyle, customStyle.stk_inptSTyle, errorStyle_EXS]} + placeholder="" + autoComplete='off' + placeholderTextColor={PageTheme.$placeholder_color} + value={(ex_stock + '')} + maxLength={6} + keyboardType='number-pad' + returnKeyType={(Platform.OS === 'ios') ? 'done' : 'next'} + blurOnSubmit={false} + onChangeText={(val) => { onStockValChange(cat, skus, val, 'ExpiryStock', 'numeric') }} + // onEndEditing={(e)=>{ checkStockVal(cat,skus,'ExpiryStock','OldExStock',OldExStock)}} + onSubmitEditing={() => { focusToNext(cat, brand, skus, '5', outerId, middleId, index) }} + /> + + + } + + {(NrExpiry1Enable == true) && + + + {NrExpiry1_Dis_Name} + { inputRefs.current['input6_' + cat.SubCategoryId + '_' + brand.BrandId + '_' + skus.ProductId] = reff; }} + style={[customStyle.openStk_prd_inputStyle, customStyle.openStk_prd_flex_inputStyle, customStyle.stk_inptSTyle, errorStyle_NEX1]} + placeholder="" + autoComplete='off' + placeholderTextColor={PageTheme.$placeholder_color} + value={(NearExpiry_stock1 + '')} + maxLength={6} + keyboardType='number-pad' + returnKeyType={(Platform.OS === 'ios') ? 'done' : 'next'} + blurOnSubmit={false} + onChangeText={(val) => { onStockValChange(cat, skus, val, 'NearExpiry1', 'numeric') }} + onSubmitEditing={() => { focusToNext(cat, brand, skus, '6', outerId, middleId, index) }} + /> + + + } + {(NrExpiry2Enable == true) && + + + {NrExpiry2_Dis_Name} + { inputRefs.current['input7_' + cat.SubCategoryId + '_' + brand.BrandId + '_' + skus.ProductId] = reff; }} + style={[customStyle.openStk_prd_inputStyle, customStyle.openStk_prd_flex_inputStyle, customStyle.stk_inptSTyle, errorStyle_NEX2]} + placeholder="" + autoComplete='off' + placeholderTextColor={PageTheme.$placeholder_color} + value={(NearExpiry_stock2 + '')} + maxLength={6} + keyboardType='number-pad' + returnKeyType={(Platform.OS === 'ios') ? 'done' : 'next'} + blurOnSubmit={false} + onChangeText={(val) => { onStockValChange(cat, skus, val, 'NearExpiry2', 'numeric') }} + onSubmitEditing={() => { focusToNext(cat, brand, skus, '7', outerId, middleId, index) }} + /> + + + } + {(NrExpiry3Enable == true) && + + + {NrExpiry3_Dis_Name} + { inputRefs.current['input8_' + cat.SubCategoryId + '_' + brand.BrandId + '_' + skus.ProductId] = reff; }} + style={[customStyle.openStk_prd_inputStyle, customStyle.openStk_prd_flex_inputStyle, customStyle.stk_inptSTyle, errorStyle_NEX3]} + placeholder="" + autoComplete='off' + placeholderTextColor={PageTheme.$placeholder_color} + value={(NearExpiry_stock3 + '')} + maxLength={6} + keyboardType='number-pad' + returnKeyType={(Platform.OS === 'ios') ? 'done' : 'next'} + blurOnSubmit={false} + onChangeText={(val) => { onStockValChange(cat, skus, val, 'NearExpiry3', 'numeric') }} + onSubmitEditing={() => { focusToNext(cat, brand, skus, '8', outerId, middleId, index) }} + /> + + + } + {(isMFDEnable == true) && + + {isMFDDis_Name} + { openAddStkModal(cat, skus) }}> + {ST.Add} + + + + {ST.Date} + + + {ST.Stock} + + + {ST.LotNo} + + + {ST.Actions} + + + + + { + mfdStocks.map((mfd_Item, mfd_index) => { + let mfd = mfd_Item.mfd || ''; + let stock = mfd_Item.stock || ''; + let lotno = mfd_Item.lotno || ''; + + return ( + + + {mfd} + + + {stock} + + + {lotno} + + + { showRemoveConfirm(cat, skus, mfd_Item, mfd_index) }}> + + + + + ) + }) + } + + + } + + } + + ) + }} /> + } + + + ) + }} + /> + } + + + ); + }} + /> + + ) + } + + return ( + + {processing && } + + + + {ConfirmSaveAlert(props, showRemoveConfirm_M, () => { setShowRemoveConfirm_M(false) }, removeMFDStock, ST.Doyoureallywanttoremovethisstock)} + {ConfirmSaveAlert(props, showAlert, onSaveCancel, saveData)} + {rerendermodal == rerendermodal && _render_StockModal()} + { setShowCamera(false); getImage(imgData) }} showCamera={showCamera} onHideCamera={() => { setShowCamera(false); }} /> + + + + + { setSearchedItem(val); FilterStores(val) }} + /> + { FilterStores(searchedItem) }}> + + + + {Object.keys(storeData).length > 0 && + _renderStocks() + } + + + { submitOpeningStock() }} /> + + + + + ); +} + +export default connect(mapStateToProps, mapDispatchToProps)(Stock); \ No newline at end of file diff --git a/PerformicsSrc/src/screens/StockCat.js b/PerformicsSrc/src/screens/StockCat.js new file mode 100644 index 0000000..09213b1 --- /dev/null +++ b/PerformicsSrc/src/screens/StockCat.js @@ -0,0 +1,252 @@ +import React,{useState,useEffect} from 'react'; +import Container from '../components/container'; +import { useRoute } from '@react-navigation/native'; +import { globalStyles,customStyles,GetPageTheme } from "../styles/Global"; +import {StatusBar,Image,TextInput,View,Text,ScrollView,TouchableOpacity,Platform,PermissionsAndroid,FlatList, Alert, KeyboardAvoidingView, BackHandler, Keyboard} from 'react-native'; +import { ReactReduxContext,connect,useSelector, useDispatch } from 'react-redux'; +import { mapStateToProps,mapDispatchToProps } from '../reducers/contextProvider'; +import SQLite from 'react-native-sqlite-2'; +import {notify} from '../components/notify'; +import moment from 'moment'; +import {getDownloadJson,getKPIFields,marktext1,marktext2} from '../controller/functions'; +import {get_item,set_item,clear_item} from '../components/localStorage'; +import {version,sloganline,appname,testurl,db, colors_Arr, common_ImagePath} from '../constants/constants'; +import CustomHeader from '../components/customHeader'; +import {Card, Menu, Switch} from 'react-native-paper'; +import {AntDesign, Entypo, Fontisto, Ionicons, MaterialCommunityIcons} from '../components/icons'; +import { stat } from 'react-native-fs'; +import CustomLoader from '../components/CustomLoader'; +import LinearGradient from 'react-native-linear-gradient'; +import { AppTables } from '../constants/tableConstants'; +import { SvgXml } from 'react-native-svg'; +import {launchCamera, launchImageLibrary,CameraOptions} from 'react-native-image-picker'; +import * as RNFS from 'react-native-fs'; +import GradientButton from '../components/gradientButton'; +import CheckBox from '@react-native-community/checkbox'; + +import cameraImg from '../assets/performics/camera_front_image.svg' +import addImg from '../assets/performics/add_image.svg'; +import CustomModal from '../components/CustomModal'; +import { ConfirmSaveAlert, ExitScreenAlert } from '../components/alert'; +import CustomCamera from '../components/Camera'; +import Accordion from 'react-native-collapsible/Accordion'; +import DateTimePicker from '@react-native-community/datetimepicker'; +import { createFalse } from 'typescript'; +import CustomModal2 from '../components/CustomModal2'; + +function StockCat(props) { + const route = useRoute(); + + // get all theme styles acc to current theme set + const PageTheme=GetPageTheme(props.DarkMode,route.name); + const customStyle=customStyles(props.DarkMode,route.name); + + const [processing, setProcessing] = useState(true); + const [loaderTitle, setLoaderTitle] = useState('loading...'); + const [isAdhocScreen, setIsAdhocScreen] = useState(false); + const [isBeatPlan, setIsBeatPlan] = useState(false); + const [storeData, setStoreData] = useState({}); + const [currentMenu, setCurrentMenu] = useState({}); + const [productCats, setProductCats] = useState([]); + const [rerenderdata, setrerenderdata]= useState(0); + + const [showAlert, setShowAlert] = useState(false); + const [rerendermodal, setrerendermodal] = useState(0); + + const [hasUnsavedChanges,setHasUnsavedChanges] = useState(false); + const [showCamera, setShowCamera] = useState(false); + const [getImageProps,setGetImageProps]= useState({}); + + + const d1=new Date(); + const d2=moment(d1).format('MM/DD/YYYY'); + + useEffect(() => { + let params=props.route.params? props.route.params:{}; + let storeData1=params.storeData || {}; + let menu1=params.menu || {}; + + let isAdhoc=params.isAdhoc || false; + let isBeat=params.isBeat!=null? params.isBeat : false; + setIsAdhocScreen(isAdhoc); + setIsBeatPlan(isBeat); + setStoreData(storeData1); + setCurrentMenu(menu1); + + getData(storeData1,menu1); + + const unsubscribe=props.navigation.addListener('beforeRemove', onBeforeRemove); + const willFocusSubscription = props.navigation.addListener('focus', () => { + console.log('onfocus'); + getData(storeData1); + }); + + return function cleanup() { + willFocusSubscription(); + return unsubscribe; + }; + + }, []); + + useEffect(() => { + const unsubscribe=props.navigation.addListener('beforeRemove', onBeforeRemove); + return unsubscribe; + }, [hasUnsavedChanges]); + + useEffect(() => { + const unsubscribe=props.navigation.addListener('beforeRemove', onBeforeRemove); + return unsubscribe; + }, [showCamera]); + + function onBeforeRemove(e){ + if(showCamera==true){ + e.preventDefault(); + setShowCamera(false); + } + else{ + if (hasUnsavedChanges==true) { + e.preventDefault(); // Prevent default behavior of leaving the screen + onRemoveScreen(e); + } + else{ + return; + } + } + } + + function onRemoveScreen(e){ + Alert.alert( + "", + "Do you really want to exit the screen?", + [ + { + text: "Cancel", + onPress: () => {}, + style: "cancel" + }, + { text: "OK", onPress: () => {setHasUnsavedChanges(false);props.navigation.dispatch(e.data.action);} } + ] + ); + } + + + + async function getData(storeData1,menu1){ + + try { + let {StoreId,ChainId,StateId,StoreTypeId,StoreClassId,StoreCategoryId}=storeData1; + + await db.transaction(async function (txn) { + + let join=' INNER join Product_Master p on c.CategoryId=p.CategoryId '; + let join2=` INNER join Mapping_ProductAssortmentStorewise mp on p.ProductId=mp.ProductId `; + let q=`SELECT DISTINCT c.CategoryId,c.CategoryName from Master_Category c ${join} ${join2} where mp.StoreId='${StoreId}' order by p.CategorySequence`; + + // let q2=` SELECT CATEGORY_ID as CategoryId,CATEGORY as CategoryName FROM ${AppTables.STOCKWITHCAT_HDR_DATA} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' `; + await txn.executeSql(q,[],async function (txn2, txnres2) { + console.log('cats len:',txnres2.rows.length) + if(txnres2.rows.length>0){ + let arr=[]; + for(var i=0;i{ + db.transaction(async function (txn) { + let seletlist=`STOCK_UID,PRODUCT as ProductName,PRODUCT_ID as ProductId,BRAND as BrandName,BRAND_ID as BrandId,SUB_CATEGORY as SubCategoryName,SUB_CATEGORY_ID as SubCategoryId,MSL,STOCK,BACKROOM_STOCK,DAMAGED_STOCK,LOST_STOCK,EXPIRY_STOCK,IS_SKU_STOCK_PRESENT,NREXPIRY1_STOCK,NREXPIRY2_STOCK,NREXPIRY3_STOCK`; + let sku_q=`SELECT ${seletlist} FROM ${AppTables.STOCKWITHCAT_DATA} WHERE STORE_ID='${StoreId}' and CATEGORY_ID='${cat.CategoryId}' `; + await txn.executeSql(sku_q,[],async function (txn2, txnres2) { + if(txnres2.rows.length>0){ + resolve(true); + }else{ + resolve(false); + } + },function (txnE,txnerr) { console.log(txnerr);resolve(false); },); + + }); + }).catch((err)=>{ + console.log(err); + return false; + }) + } + + function gotoCatProducts(cat={}){ + props.navigation.navigate('StockWithCat',{'storeData':storeData,'menu':currentMenu,'isAdhoc':isAdhocScreen,'isBeat':isBeatPlan,'category':cat}); + } + + + function _renderStocks(){ + return ( + + { + const cat=item; + let isDone=item.isDone; + return( + + + {gotoCatProducts(cat)}}> + + {item.CategoryName} + + {(item.isDone!=null && item.isDone==true) && } + + + + ); + }} + /> + + ) + } + + + + + + return ( + + {processing && } + + + + + + Product Categories + + {Object.keys(storeData).length>0 && + _renderStocks() + } + + + + + ); +} + +export default connect(mapStateToProps, mapDispatchToProps)(StockCat); \ No newline at end of file diff --git a/PerformicsSrc/src/screens/StockPromo.js b/PerformicsSrc/src/screens/StockPromo.js new file mode 100644 index 0000000..7d250fc --- /dev/null +++ b/PerformicsSrc/src/screens/StockPromo.js @@ -0,0 +1,3039 @@ +import React, { useState, useEffect, useRef } from 'react'; +import Container from '../components/container'; +import { useRoute } from '@react-navigation/native'; +import { globalStyles, customStyles, GetPageTheme } from "../styles/Global"; +import { StatusBar, Image, TextInput, View, Text, ScrollView, TouchableOpacity, Platform, PermissionsAndroid, FlatList, Alert, KeyboardAvoidingView, BackHandler, Keyboard, Animated, AppState } from 'react-native'; +import { ReactReduxContext, connect, useSelector, useDispatch } from 'react-redux'; +import { mapStateToProps, mapDispatchToProps } from '../reducers/contextProvider'; +import SQLite from 'react-native-sqlite-2'; +import { notify } from '../components/notify'; +import moment from 'moment'; +import { getDownloadJson, getKPIFields, marktext1, marktext2, resizeImage, restore_ImageWithMetaData, validateNumber, validateNumber12 } from '../controller/functions'; +import { get_item, set_item, clear_item } from '../components/localStorage'; +import { version, sloganline, appname, testurl, db, colors_Arr, common_ImagePath, ImageFolderPath, HierarchyTbls } from '../constants/constants'; +import CustomHeader from '../components/customHeader'; +import { Card, Menu, Switch } from 'react-native-paper'; +import { AntDesign, Entypo, Fontisto, Ionicons, MaterialCommunityIcons } from '../components/icons'; +import { stat } from 'react-native-fs'; +import CustomLoader from '../components/CustomLoader'; +import LinearGradient from 'react-native-linear-gradient'; +import { AppTables } from '../constants/tableConstants'; +import { SvgXml } from 'react-native-svg'; +import { launchCamera, launchImageLibrary, CameraOptions } from 'react-native-image-picker'; +import * as RNFS from 'react-native-fs'; +import GradientButton from '../components/gradientButton'; +import CheckBox from '@react-native-community/checkbox'; + +import cameraImg from '../assets/performics/camera_front_image.svg' +import addImg from '../assets/performics/add_image.svg'; +import CustomModal from '../components/CustomModal'; +import { ConfirmSaveAlert, ExitScreenAlert } from '../components/alert'; +import CustomCamera from '../components/Camera'; +import Accordion from 'react-native-collapsible/Accordion'; +import DateTimePicker from '@react-native-community/datetimepicker'; +import { createFalse } from 'typescript'; +import CustomModal2 from '../components/CustomModal2'; +import { CustomPicker2 } from '../components/CustomPicker'; +import CameraImg3 from "../assets/performics/camera_tick.svg"; +import CameraImg2 from "../assets/performics/camera_icon.svg"; +import CameraImg4 from "../assets/performics/camera_asterisk.svg"; +import CameraImg5 from '../assets/image/astrickcamera.svg' +import DateTimePickerModal from "react-native-modal-datetime-picker"; + + +function StockPromo(props) { + const route = useRoute(); + const ST = props.StaticText || {}; + // get all theme styles acc to current theme set + const PageTheme = GetPageTheme(props.DarkMode, route.name); + const customStyle = customStyles(props.DarkMode, route.name); + + const [processing, setProcessing] = useState(true); + const [loaderTitle, setLoaderTitle] = useState(); + const [isAdhocScreen, setIsAdhocScreen] = useState(false); + const [storeData, setStoreData] = useState({}); + const [StoreCameraAllow, setStoreCameraAllow] = useState(true); + const [currentMenu, setCurrentMenu] = useState({}); + const [brandData, setBrandData] = useState([]); + const [globalBrandData, setGlobalBrandData] = useState([]); + const [rerenderdata, setrerenderdata] = useState(0); + const [rerenderdata2, setrerenderdata2] = useState(0); + const [catImages, setCatImages] = useState([]); + const [SKUStockData, setSKUStockData] = useState([]); + const [currentStock, setCurrentStock] = useState({}); + const [currentBrand, setCurrentBrand] = useState({}); + const [currentProduct, setCurrentProduct] = useState({}); + const [KPIFields, setKPIFields] = useState([]); + const [showSwitchCamera, setShowSwitchCamera] = useState(false); + const [showAlert, setShowAlert] = useState(false); + const [showStockModal, setShowStockModal] = useState(false); + const [FromDate, setFromDate] = useState(''); + const [FromDate2, setFromDate2] = useState(""); + const [FromDateObj, setFromDateObj] = useState({}); + const [rerendermodal, setrerendermodal] = useState(0); + const [toRemoveId, setToRemoveId] = useState(''); + const [toRemoveCat, setToRemoveCat] = useState({}); + const [toRemoveSKU, setToRemoveSKU] = useState({}); + const [showRemoveConfirm_M, setShowRemoveConfirm_M] = useState(false); + const [searchedItem, setSearchedItem] = useState(''); + const [hasUnsavedChanges, setHasUnsavedChanges] = useState(false); + const [showCamera, setShowCamera] = useState(false); + const [getImageProps, setGetImageProps] = useState({}); + const [activeSections, setActiveSections] = useState([]); + const [ShowCatWise, setShowCatWise] = useState(false); + const [CatData, setCatData] = useState(false); + const [ColId, setColId] = useState(""); + const [ColName, setColName] = useState(""); + const [SelectedImg, setSelectedImg] = useState(""); + const [showModal, setShowModal] = useState(false); + const [reCapImgModalObj, setReCapImgModalObj] = useState({}); + const [showImageSaveOp, setShowImageSaveOp] = useState(true); + const [HeaderImageLabel, setHeaderImageLabel] = useState([]); + const [ChildImageLabel, setChildImageLabel] = useState([]); + const inputRefs = useRef({}); + const outerFlatListRef = useRef(null); + const middleFlatListRefs = useRef({}); + const innerFlatListRefs = useRef({}); + const hasUnsavedChangesRef = React.useRef(hasUnsavedChanges); + const WindowDataRef = React.useRef(SKUStockData); + const StoreIdRef = React.useRef(null); + const ScreenNameRef = React.useRef(''); + const [errorfield, setErrorField] = useState({}); + const [error, setError] = useState(false); + const PSGroupData = React.useRef(''); // Grouping data (Category/ SubCategory/ Brand ) for BG save fuunctionality with Partial Save Scenario + const BGPSAllow = React.useRef(false); + const [reasons_list, setReasons_list] = useState([]); + const [ShowDatePicker1, setShowDatePicker1] = useState(false); + const [ShowDatePicker, setShowDatePicker] = useState(false); + const d1 = new Date(); + const d2 = moment(d1).format('MM/DD/YYYY'); + + useEffect(() => { + setLoaderTitle(ST.Loading + '...') + let params = props.route.params ? props.route.params : {}; + let storeData1 = params.storeData || {}; + let menu1 = params.menu || {}; + let ShowCatWise1 = params.ShowCatWise != null ? params.ShowCatWise : false; + let CatData1 = params.CatData != null ? params.CatData : {}; + let isAdhoc = params.isAdhoc || false; + + console.log('params.ShowCatWise', params.ShowCatWise); + + setIsAdhocScreen(isAdhoc); + setShowCatWise(ShowCatWise1); + setCatData(CatData1); + setStoreData(storeData1); + setCurrentMenu(menu1); + + let cameraAllow = storeData1.CameraAllow == 'true' || storeData1.CameraAllow == 1 ? true : false; + setStoreCameraAllow(cameraAllow); + + StoreIdRef.current = storeData1.StoreId + ScreenNameRef.current = menu1.ScreenName + getData(storeData1, menu1, ShowCatWise1, CatData1); + + const AppStateSubscription = AppState.addEventListener('change', (pro) => { _handleAppStateChange(pro) }); + const unsubscribe = props.navigation.addListener('beforeRemove', onBeforeRemove); + + return function cleanup() { + AppStateSubscription.remove(); + return unsubscribe; + }; + + }, []); + + const _handleAppStateChange = async (nextAppState) => { + if (nextAppState == 'background' && hasUnsavedChangesRef.current == true) { + let newData = { + storeBGData: WindowDataRef.current, + menuName: ScreenNameRef.current, + StoreId1: StoreIdRef.current, + visiteDate: d2, + BGPSAllow: BGPSAllow.current, + PSGroupData: PSGroupData.current, + } + // let WindowsStr= JSON.stringify(newData) + // await set_item('storeData',WindowsStr); + } + } + + useEffect(() => { + const unsubscribe = props.navigation.addListener('beforeRemove', onBeforeRemove); + }, [hasUnsavedChanges]); + + useEffect(() => { + const unsubscribe = props.navigation.addListener('beforeRemove', onBeforeRemove); + return unsubscribe; + }, [showCamera]); + + function onBeforeRemove(e) { + if (showCamera == true) { + e.preventDefault(); + setShowCamera(false); + } + else { + if (hasUnsavedChanges == true) { + e.preventDefault(); // Prevent default behavior of leaving the screen + onRemoveScreen(e); + } + else { + return; + } + } + } + + function BgUnsavedChanges(val) { + hasUnsavedChangesRef.current = val + setHasUnsavedChanges(val); + } + + function BgWindowData(val) { + WindowDataRef.current = val + setSKUStockData(val); + } + + function onRemoveScreen(e) { + Alert.alert( + "", + ST.Doyoureallywanttoexitthescreen, + [ + { + text: ST.Cancel, + onPress: () => { }, + style: "cancel" + }, + { + text: ST.OK, onPress: async () => { + // setHasUnsavedChanges(false); + BgUnsavedChanges(false) + await clear_item('storeData') + props.navigation.dispatch(e.data.action); + } + } + ] + ); + } + + + + async function getData(storeData1, menu1, ShowCatWise1, CatData1 = {}) { + try { + let { StoreId } = storeData1; + let allCats = []; + let allSKUData = []; + let AllKPIFields = await getKPIFields(menu1); + setKPIFields(AllKPIFields); + // set switch camera flag as defined in mapping menu flag (if exists) + let SwitchingCameraI = AllKPIFields.findIndex(i => i.KPIFieldName == 'SwitchingCamera'); + let SwitchingCameraObj = SwitchingCameraI >= 0 ? AllKPIFields[SwitchingCameraI] : {}; + let SwitchingCamera = SwitchingCameraI >= 0 ? SwitchingCameraObj['KPIFieldEnable'] : false; + setShowSwitchCamera(SwitchingCamera); + + let HeaderCameraAllow = AllKPIFields?.findIndex((i) => i.KPIFieldName == "HeaderImageAllow"); + let HeaderCameraAllowObj = HeaderCameraAllow >= 0 ? AllKPIFields[HeaderCameraAllow] : {}; + let HeaderCameraSplitNo = HeaderCameraAllowObj?.KPIFieldDisplayName || 0 + let isImgMandatory = HeaderCameraAllowObj?.KPIMandatory || 0 + let HeaderCameraSplitArr = HeaderCameraAllowObj?.KPIType?.split(",") || [] + let HeaderCameraAllowI = HeaderCameraAllow >= 0 ? HeaderCameraAllowObj["KPIFieldEnable"] : false; + setHeaderImageLabel(HeaderCameraSplitArr) + + let ChildCameraAllow = AllKPIFields?.findIndex((i) => i.KPIFieldName == "ChildImageAllow"); + let ChildCameraAllowObj = ChildCameraAllow >= 0 ? AllKPIFields[ChildCameraAllow] : {}; + let ChildCameraSplitNo = ChildCameraAllowObj?.KPIFieldDisplayName || 0 + let ChildCameraSplitArr = ChildCameraAllowObj?.KPIType?.split(",") || [] + let ChildCameraAllowI = ChildCameraAllow >= 0 ? ChildCameraAllowObj["KPIFieldEnable"] : false; + setChildImageLabel(ChildCameraSplitArr) + let { PSAllow, PSTableName } = menu1; + PSTableName = PSTableName != null ? PSTableName : ''; + PSAllow = PSAllow != null ? PSAllow : false; + //storeBGData check + let storeBGData1 = [], bgStoreJson = {}, isBgDataExists = false; + // call this after storeBGData check + if (PSAllow) { + // if Partial save is allowed then add the currently active category or group in BG var + BGPSAllow.current = true; + PSGroupData.current = CatData1; + } + + db.transaction(async function (txn) { + + let orderBy = '', idCol = '', nameCol = ''; + + if (PSTableName.toLowerCase() == HierarchyTbls.Master_Category.toLowerCase()) { + idCol = 'CategoryId', nameCol = 'CategoryName'; + orderBy = ' CategorySequence '; + } + else if (PSTableName.toLowerCase() == HierarchyTbls.Master_Brand.toLowerCase()) { + idCol = 'BrandId', nameCol = 'BrandName'; + orderBy = ' BrandSequence '; + } + else { + idCol = 'SubCategoryId', nameCol = 'SubCategoryName'; + orderBy = ' SubCategorySequence '; + } + let IdVal = CatData1[idCol]; + let NameVal = CatData1[nameCol]; + setColId(idCol); + setColName(nameCol); + + + + let q3 = `Select StockPromoTypeId,StockPromoType,ActualAllow,ActualDisplayName From Master_StockPromoType `; + txn.executeSql(q3, [], async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + let arr = []; + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + arr.push(data); + if (i == txnres2.rows.length - 1) { + console.log("checkdata---", arr); + setReasons_list(arr); + } + } + } + }, function (txnE, txnerr) { console.log(txnerr); }); + + let COMPStockAllow_Index = AllKPIFields.findIndex(i => i.KPIFieldName == 'COMPStockAllow'); + let COMPStockAllow_Obj = COMPStockAllow_Index >= 0 ? AllKPIFields[COMPStockAllow_Index] : {}; + let isCOMPStockAllow = COMPStockAllow_Index >= 0 ? COMPStockAllow_Obj['KPIFieldEnable'] : false; + + + let join = '', join2 = '', join3 = '', q = '', q2 = '', join4 = ''; + + + // if(ShowCatWise1==true){ + join = ` inner join Mapping_ProductAssortmentStorewise m on p.ProductId=m.ProductId `; + join2 = ` inner join Master_Category mc on mc.CategoryId=p.CategoryId `; + join3 = ` Left Outer Join ${AppTables.STOCKPOMO_HDR_DATA} st on st.SUB_CATEGORY_ID=p.${idCol} and st.STORE_ID='${StoreId}' and st.VISIT_DATE='${d2}' `; + join4 = ` Left Outer Join ${AppTables.STOCKPROMO_HDR_TOP} st1 on st.SUB_CATEGORY_ID=p.${idCol} and st1.STORE_ID='${StoreId}' and st1.VISIT_DATE='${d2}' `; + + q = `select distinct p.${idCol} as SubCategoryId,p.${nameCol} as SubCategoryName,st.IMAGE_JSON as WindowSplits,st.IMAGE,st.IMAGEPATH,st1.SUB_CATEGORY,st1.STOCK_AVL_STATUS,ifnull(st1.PROMO_TYPE,'')as PROMO_TYPE,st1.PROMO_RUNNING from Product_Master p ${join} ${join2} ${join3} ${join4} where m.StoreId='${StoreId}' ${(isCOMPStockAllow == true ? '' : ` and p.IsCompetitor='0' `)} `; + + console.log("querycheck---", q); + if (ShowCatWise1 == true) { + q += ` and p.${idCol}='${IdVal}' `; + } + q += ` order by p.IsCompetitor,p.${nameCol} `; + + console.log('ShowCatWise1:', ShowCatWise1, q); + await txn.executeSql(q, [], async function (txn2, txnres) { + console.log('added products subcats:', txnres.rows.length); + if (txnres.rows.length > 0) { + let arr = []; + for (var i = 0; i < txnres.rows.length; i++) { + let data = txnres.rows.item(i); + + + data['isCollapsed'] = false; + data.NoOfSplit = parseInt(HeaderCameraSplitNo); + data.ChildNoOfSplit = parseInt(ChildCameraSplitNo); + data.ChildCameraAllowI = ChildCameraAllowI; + data.ChildCameraSplitArr = ChildCameraSplitArr; + + + let WindowSplits = HeaderCameraAllowI ? await getWindowSplits(HeaderCameraSplitArr, data, storeData1, menu1) : []; + let splitImgArr = data?.WindowSplits && JSON.parse(data?.WindowSplits); + data.WindowSplits = splitImgArr && splitImgArr?.length > 0 ? splitImgArr : WindowSplits; + // data.WindowSplits=WindowSplits; + let br_d = await getBrands(storeData1, menu1, data, allSKUData, AllKPIFields, idCol, nameCol, CatData1, ShowCatWise1); + let brands = br_d['brands']; + let products_data = br_d['products_data']; + + data['brandList'] = brands; + let defData = { 'SubCategoryId': data.SubCategoryId, 'ImageName': data.IMAGE, WindowSplits: WindowSplits, 'ImagePath': data.IMAGEPATH, 'StockStatus': data.STOCK_AVL_STATUS, 'promoType': data.PROMO_TYPE, 'promoRunning': data.PROMO_RUNNING }; + + + allCats.push(defData); + allSKUData.concat(products_data); + + arr.push(data); + if (i == txnres.rows.length - 1) { + if (!isBgDataExists) { + BgWindowData(allSKUData); + } + + setCatImages(allCats); + // setSKUStockData(allSKUData); + setBrandData(arr); + setGlobalBrandData(arr); + setTimeout(() => { setrerenderdata2(!rerenderdata2); }, 3000); + setProcessing(false); + } + } + } + else { + setProcessing(false); + notify("No Data Found!"); + } + + }, function (txnE, txnerr) { console.log('qerr:', txnerr); setProcessing(false); }); + + }); + } catch (err) { + console.log(err); + } + } + + async function getWindowSplits(NoOfSplit, window, storeData1, menu1, ImageMandatoryNo = 0) { + let WindowSplits_def = []; + for (var s = 0; s < NoOfSplit.length; s++) { + let obj = { + ImageName: "", + Image: "", + ImageLable: NoOfSplit[s], + imgRequired: s < ImageMandatoryNo + }; + + // obj[`Image${s}Name`]="" + // obj[`Image${s}`]="" + WindowSplits_def.push(obj); + } + // console.log("window----",window) + return WindowSplits_def + new Promise((resolve, reject) => { + db.transaction(async function (txn) { + let q = `select * from ${AppTables.WAREHOUSE_IMAGES} where WAREHS_HEADER_ID='${window.WHRESHeaderId}' and STORE_ID='${storeData1.StoreId}' `; + + console.log("IMAGE1------q", q); + await txn.executeSql( + q, + [], + async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + let arr = []; + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + console.log("IMAGE1------", data.PVIS_HEADER_ID); + let isImage1 = window.VisibilityImage1 == "true" || window.VisibilityImage1 == 1 ? 1 : 0; + let isImage2 = window.VisibilityImage2 == "true" || window.VisibilityImage2 == 1 ? 1 : 0; + + let Image1 = data.IMAGE1 != null && data.IMAGE1 != "" ? "file://" + ImageFolderPath + menu1.ScreenName + "/" + data.IMAGE1 : ""; + let Image2 = isImage2 == 1 && data.IMAGE2 != null && data.IMAGE2 != "" ? "file://" + ImageFolderPath + menu1.ScreenName + "/" + data.IMAGE2 : ""; + // let obj = { + // Image1Name: data.IMAGE1, + // Image1: Image1, + // Image2Name: data.IMAGE2, + // Image2: Image2, + // img1Required: true, + // img2Required: true, + // }; + let obj = { + ImageName: data.IMAGE1, + Image: Image1, + ImageLable: "", + ImageLable: NoOfSplit[i], + // imgRequired: s < ImageMandatoryNo + imgRequired: false + }; + console.log("obj-------", obj) + arr.push(obj); + + if (i == txnres2.rows.length - 1) { + resolve(arr); + } + } + } else { + resolve(WindowSplits_def); + } + }, + function (txnE, txnerr) { + console.log(txnerr); + resolve(WindowSplits_def); + } + ); + }); + }) + .then((val) => { + return val; + }) + .catch((err) => { + console.log(err); + return WindowSplits_def; + }); + } + + async function getBrands(storeData1, menu1, item, allSKUData = [], AllKPIFields, idCol, nameCol, CatData1 = {}, ShowCatWise1 = false) { + + // If Partial save is allowed then pick the filter data id else pick the Subcaetgroy Id (default) + let IdVal = ShowCatWise1 ? CatData1[idCol] : item[idCol]; + let NameVal = ShowCatWise1 ? CatData1[nameCol] : item[nameCol]; + + let data_to_ret = { 'brands': [], 'products_data': allSKUData } + let { StoreId, ChainId, StateId, StoreTypeId, StoreClassId, StoreCategoryId } = storeData1; + + let COMPStockAllow_Index = AllKPIFields.findIndex(i => i.KPIFieldName == 'COMPStockAllow'); + let COMPStockAllow_Obj = COMPStockAllow_Index >= 0 ? AllKPIFields[COMPStockAllow_Index] : {}; + let isCOMPStockAllow = COMPStockAllow_Index >= 0 ? COMPStockAllow_Obj['KPIFieldEnable'] : false; + + return await new Promise((resolve, reject) => { + db.transaction(async function (txn) { + // ${(isCOMPStockAllow==true?'':` and p.IsCompetitor='0' `)} + let join = ` inner join Mapping_ProductAssortmentStorewise m on p.ProductId=m.ProductId `; + let join2 = ` inner join Master_Category mc on mc.CategoryId=p.CategoryId `; + let brands_q = `select distinct p.BrandName,p.BrandId, p.IsCompetitor from Product_Master p ${join} ${join2} where m.StoreId='${StoreId}' and p.${idCol}='${IdVal}' + order by p.IsCompetitor, p.BrandName `; + + console.log("brands_q------", brands_q) + await txn.executeSql(brands_q, [], async function (txn2, txnres) { + + if (txnres.rows.length > 0) { + let arr = []; + for (var i = 0; i < txnres.rows.length; i++) { + let data = txnres.rows.item(i); + + console.log("brands_q------data", data) + data['isBrandCollapsed'] = false; + let pr_d = await getSKU(storeData1, item, data, allSKUData, AllKPIFields, idCol, nameCol, CatData1, ShowCatWise1, menu1); + console.log('pr_d:', pr_d['products'].length, data); + let products = pr_d['products']; + let products_data = pr_d['products_data']; + data['skulist'] = products + + console.log('products len:', products.length); + allSKUData.concat(products_data); + arr.push(data); + + if (i == txnres.rows.length - 1) { + data_to_ret['brands'] = arr; + data_to_ret['products_data'] = allSKUData; + resolve(data_to_ret); + } + } + } + else { + resolve(data_to_ret) + } + }, function (txnE, txnerr) { console.log(txnerr); resolve(data_to_ret) },); + // setProcessing(false); + + }); + }).then((val) => { + return val; + }).catch((err) => { + console.log(err); + return data_to_ret; + }) + } + + async function getSKU(storeData1, cat, brand, allSKUData = [], AllKPIFields, idCol, nameCol, CatData1 = {}, ShowCatWise1 = false, menu1 = {}) { + + // If Partial save is allowed then pick the filter data id else pick the Subcaetgroy Id (default) + let IdVal = ShowCatWise1 ? CatData1[idCol] : cat[idCol]; + let NameVal = ShowCatWise1 ? CatData1[nameCol] : cat[nameCol]; + + let sku_ret = { 'products': [], 'products_data': allSKUData }; + let { StoreId, ChainId, StateId, StoreTypeId, ExpiryStock, StoreClassId, StoreCategoryId } = storeData1; + + let DefaultStockToggleI = AllKPIFields.findIndex(i => i.KPIFieldName == 'DefaultStockToggle') + let DefaultStockToggleObj = DefaultStockToggleI >= 0 ? AllKPIFields[DefaultStockToggleI] : {}; + let DefaultStockToggle = DefaultStockToggleI >= 0 ? DefaultStockToggleObj['KPIFieldEnable'] : false; + let DefaultStockToggleValue = DefaultStockToggleI >= 0 ? DefaultStockToggleObj['KPIFieldDisplayName'] : "2"; + let deftogvalue = DefaultStockToggleValue == "3" ? "3" : (DefaultStockToggle == "1" ? "1" : "0"); + + + let COMPStockAllow_Index = AllKPIFields.findIndex(i => i.KPIFieldName == 'COMPStockAllow'); + let COMPStockAllow_Obj = COMPStockAllow_Index >= 0 ? AllKPIFields[COMPStockAllow_Index] : {}; + let isCOMPStockAllow = COMPStockAllow_Index >= 0 ? COMPStockAllow_Obj['KPIFieldEnable'] : false; + + let ChildCameraAllowI = cat?.ChildCameraAllowI || false; + let ChildCameraSplitArr = cat?.ChildCameraSplitArr || [] + + console.log('ChildCameraAllowI-------', ChildCameraAllowI) + return await new Promise((resolve, reject) => { + db.transaction(async function (txn) { + + // else get products from masters + //${(isCOMPStockAllow==true?'':` and p.IsCompetitor='0' `)} + let join = ` inner join Mapping_ProductAssortmentStorewise m on p.ProductId=m.ProductId `; + let join2 = ` inner join Master_Category mc on mc.CategoryId=p.CategoryId `; + let join5 = ` Left Outer join (select * from ${AppTables.STOCKPROMO_DATA} where SUB_CATEGORY_ID='${cat.SubCategoryId}' and BRAND_ID='${brand.BrandId}' and STORE_ID='${StoreId}' and VISIT_DATE='${d2}' ) st on st.PRODUCT_ID=p.ProductId`; + let seletlist = `Distinct st.STOCK_UID,p.ProductName,p.ProductId,p.BrandName,p.BrandId,p.IsCompetitor,m.MSL,m.MBQ,st.STOCK,st.FROM_DATE,st.TO_DATE,st.MRP,st.SELLING_PRICE,st.REMARK,st.BACKROOM_STOCK,st.DAMAGED_STOCK,st.LOST_STOCK,st.EXPIRY_STOCK,st.IS_SKU_STOCK_PRESENT,st.NREXPIRY1_STOCK,st.NREXPIRY2_STOCK,st.IMAGE_JSON as WindowChildSplits,st.NREXPIRY3_STOCK,st.OUT_OF_STOCK, st.STOCK_AVL_STATUS,ifnull(st.PROMO_TYPE,'')as PROMO_TYPE,st.PROMO_RUNNING,st.IMAGE,st.IMAGEPATH,st.LESS_THAN_MBQ`; + let sku_q2 = `select ${seletlist} from Product_Master p ${join} ${join2} ${join5} where m.StoreId='${StoreId}' `; + sku_q2 += idCol != 'BrandId' ? ` and p.${idCol}='${IdVal}' ` : ''; + sku_q2 += ` and p.BrandId='${brand.BrandId}' + order by p.ProductSequence ` ; + + console.log("sku_q2---------:", sku_q2); + await txn.executeSql(sku_q2, [], async function (txn2, txnres) { + console.log(txnres.rows.length, 'length of sku------') + if (txnres.rows.length > 0) { + let arr = []; + for (var i = 0; i < txnres.rows.length; i++) { + let data = txnres.rows.item(i); + + let ancval = data.OUT_OF_STOCK == 1 ? 1 : 0; + let ancval2 = data.LESS_THAN_MBQ == 1 ? 1 : 0; + let animatedChoice = new Animated.Value(ancval); + let animatedChoice2 = new Animated.Value(ancval2); + data.animatedChoice = animatedChoice; + data.animatedChoice2 = animatedChoice2; + + setInputRefss(AllKPIFields, cat, brand, data); + + + data['Old_Stock'] = (data.STOCK || ''); + data['OldDamagedStock'] = (data.DAMAGED_STOCK || ''); + data['OldLostStock'] = (data.LOST_STOCK || ''); + data['OldExStock'] = (data.EXPIRY_STOCK || ''); + + let WindowChildSplits = ChildCameraAllowI ? await getWindowSplits(ChildCameraSplitArr, data, storeData1, menu1) : []; + + let mfdStocks = await getMFDStockData(data); + let stock = data.STOCK != null ? data.STOCK : (data.STOCK === 0 ? 0 : ''); + + let mrp = data.MRP != null ? data.MRP : (data.MRP === 0 ? 0 : ''); + let selling_price = data.SELLING_PRICE != null ? data.SELLING_PRICE : (data.SELLING_PRICE === 0 ? 0 : ''); + let remark = data.REMARK != null ? data.REMARK : (data.REMARK === 0 ? 0 : ''); + + + let stockImg = data.IMAGE != null ? data.IMAGE : "" + let stockImgPath = data?.IMAGEPATH != null ? data?.IMAGEPATH : "" + + // data.WindowChildSplits=WindowChildSplits + let splitImgArr = data?.WindowChildSplits && JSON.parse(data?.WindowChildSplits) + data.WindowChildSplits = splitImgArr && splitImgArr?.length > 0 ? splitImgArr : WindowChildSplits + + // data.IMAGE,'ImagePath':data.IMAGEPATH, + let BACKROOM_STOCK = data.BACKROOM_STOCK != null ? data.BACKROOM_STOCK : (data.BACKROOM_STOCK === 0 ? 0 : ''); + let EXPIRY_STOCK = data.EXPIRY_STOCK != null ? data.EXPIRY_STOCK : (data.EXPIRY_STOCK === 0 ? 0 : ''); + let DAMAGED_STOCK = data.DAMAGED_STOCK != null ? data.DAMAGED_STOCK : (data.DAMAGED_STOCK === 0 ? 0 : ''); + let LOST_STOCK = data.LOST_STOCK != null ? data.LOST_STOCK : (data.LOST_STOCK === 0 ? 0 : ''); + let NREXPIRY1_STOCK = data.NREXPIRY1_STOCK != null ? data.NREXPIRY1_STOCK : (data.NREXPIRY1_STOCK === 0 ? 0 : ''); + let NREXPIRY2_STOCK = data.NREXPIRY2_STOCK != null ? data.NREXPIRY2_STOCK : (data.NREXPIRY2_STOCK === 0 ? 0 : ''); + let NREXPIRY3_STOCK = data.NREXPIRY3_STOCK != null ? data.NREXPIRY3_STOCK : (data.NREXPIRY3_STOCK === 0 ? 0 : ''); + + + // console.log(data, 'datadata') + + let defData = { + 'SubCategoryId': cat.SubCategoryId, 'ProductId': data.ProductId, 'ProductName': data.ProductName, 'Stock': stock, 'StockImg': stockImg, 'StockImgPath': stockImgPath, FromDate: data?.FROM_DATE || "", ToDate: data?.TO_DATE || "", + 'WindowChildSplits': data.WindowChildSplits, + 'StockAvlStatus': data.STOCK_AVL_STATUS, 'PromoType': data.PROMO_TYPE, 'PromoRunning': data.PROMO_RUNNING, + 'BackRoomStock': BACKROOM_STOCK, 'MRP': mrp, 'SellingPrice': selling_price, 'Remark': remark, 'ExpiryStock': EXPIRY_STOCK, 'DamagedStock': DAMAGED_STOCK, + 'LostStock': LOST_STOCK, 'mfdStocks': (mfdStocks || []), 'isSKUPresent': data.IS_SKU_STOCK_PRESENT, + 'showAllSKU_Fields': (data.IS_SKU_STOCK_PRESENT == 1), 'NearExpiry1': NREXPIRY1_STOCK, + 'NearExpiry2': NREXPIRY2_STOCK, 'NearExpiry3': NREXPIRY3_STOCK, + "OutOfStock": data.OUT_OF_STOCK == 1 ? 1 : 0, "LessThanMBQ": data.LESS_THAN_MBQ == 1 ? 1 : 0 + }; + + //console.log("allSKUData===", allSKUData) + + allSKUData.push(defData); + arr.push(data); + + if (i == txnres.rows.length - 1) { + sku_ret['products'] = arr; + sku_ret['products_data'] = allSKUData; + resolve(sku_ret); + } + } + } + else { + resolve(sku_ret); + } + }, function (txnE, txnerr) { console.log(txnerr); setProcessing(false); resolve(sku_ret); },); + + + }); + }).then((val) => { + return val; + }).catch((err) => { + console.log('err:', err); + return sku_ret; + }) + + + } + + function setInputRefss(AllKPIFields, cat, brand, data) { + let isStockIndex = AllKPIFields.findIndex(i => i.KPIFieldName == 'Stock') + let isStockKPIObj = isStockIndex >= 0 ? AllKPIFields[isStockIndex] : {}; + let isStockEnable = isStockIndex >= 0 ? isStockKPIObj['KPIFieldEnable'] : true; + let isStockDis_Name = isStockIndex >= 0 ? isStockKPIObj['KPIFieldDisplayName'] : ''; + + let isBRStockIndex = AllKPIFields.findIndex(i => i.KPIFieldName == 'BackRoomStock') + let isBRStockKPIObj = isBRStockIndex >= 0 ? AllKPIFields[isBRStockIndex] : {}; + let isBRStockEnable = isBRStockIndex >= 0 ? isBRStockKPIObj['KPIFieldEnable'] : true; + let isBRStockDis_Name = isBRStockIndex >= 0 ? isBRStockKPIObj['KPIFieldDisplayName'] : ''; + + let isDStockIndex = AllKPIFields.findIndex(i => i.KPIFieldName == 'DamageStock') + let isDStockKPIObj = isDStockIndex >= 0 ? AllKPIFields[isDStockIndex] : {}; + let isDStockEnable = isDStockIndex >= 0 ? isDStockKPIObj['KPIFieldEnable'] : false; + let isDStockDis_Name = isDStockIndex >= 0 ? isDStockKPIObj['KPIFieldDisplayName'] : ''; + + let isLStockIndex = AllKPIFields.findIndex(i => i.KPIFieldName == 'LostStock') + let isLStockKPIObj = isLStockIndex >= 0 ? AllKPIFields[isLStockIndex] : {}; + let isLStockEnable = isLStockIndex >= 0 ? isLStockKPIObj['KPIFieldEnable'] : false; + let isLStockDis_Name = isLStockIndex >= 0 ? isLStockKPIObj['KPIFieldDisplayName'] : ''; + + let isExStockIndex = AllKPIFields.findIndex(i => i.KPIFieldName == 'ExpiredStock') + let isExStockKPIObj = isExStockIndex >= 0 ? AllKPIFields[isExStockIndex] : {}; + let isExStockEnable = isExStockIndex >= 0 ? isExStockKPIObj['KPIFieldEnable'] : false; + let isExStockDis_Name = isExStockIndex >= 0 ? isExStockKPIObj['KPIFieldDisplayName'] : ''; + + let NrExpiry1Index = AllKPIFields.findIndex(i => i.KPIFieldName == 'NrExpiry1') + let NrExpiry1KPIObj = NrExpiry1Index >= 0 ? AllKPIFields[NrExpiry1Index] : {}; + let NrExpiry1Enable = NrExpiry1Index >= 0 ? NrExpiry1KPIObj['KPIFieldEnable'] : false; + let NrExpiry1_Dis_Name = NrExpiry1Index >= 0 ? NrExpiry1KPIObj['KPIFieldDisplayName'] : ''; + + let NrExpiry2Index = AllKPIFields.findIndex(i => i.KPIFieldName == 'NrExpiry2') + let NrExpiry2KPIObj = NrExpiry2Index >= 0 ? AllKPIFields[NrExpiry2Index] : {}; + let NrExpiry2Enable = NrExpiry2Index >= 0 ? NrExpiry2KPIObj['KPIFieldEnable'] : false; + let NrExpiry2_Dis_Name = NrExpiry2Index >= 0 ? NrExpiry2KPIObj['KPIFieldDisplayName'] : ''; + + let NrExpiry3Index = AllKPIFields.findIndex(i => i.KPIFieldName == 'NrExpiry3') + let NrExpiry3KPIObj = NrExpiry1Index >= 0 ? AllKPIFields[NrExpiry3Index] : {}; + let NrExpiry3Enable = NrExpiry1Index >= 0 ? NrExpiry3KPIObj['KPIFieldEnable'] : false; + let NrExpiry3_Dis_Name = NrExpiry1Index >= 0 ? NrExpiry3KPIObj['KPIFieldDisplayName'] : ''; + + + if (isStockEnable) { + inputRefs.current['input1_' + cat.SubCategoryId + '_' + brand.BrandId + '_' + data.ProductId] = ''; + } + if (isBRStockEnable) { + inputRefs.current['input2_' + cat.SubCategoryId + '_' + brand.BrandId + '_' + data.ProductId] = ''; + } + if (isDStockEnable) { + inputRefs.current['input3_' + cat.SubCategoryId + '_' + brand.BrandId + '_' + data.ProductId] = ''; + } + if (isLStockEnable) { + inputRefs.current['input4_' + cat.SubCategoryId + '_' + brand.BrandId + '_' + data.ProductId] = ''; + } + if (isExStockEnable) { + inputRefs.current['input5_' + cat.SubCategoryId + '_' + brand.BrandId + '_' + data.ProductId] = ''; + } + if (NrExpiry1Enable) { + inputRefs.current['input6_' + cat.SubCategoryId + '_' + brand.BrandId + '_' + data.ProductId] = ''; + } + if (NrExpiry2Enable) { + inputRefs.current['input7_' + cat.SubCategoryId + '_' + brand.BrandId + '_' + data.ProductId] = ''; + } + if (NrExpiry3Enable) { + inputRefs.current['input8_' + cat.SubCategoryId + '_' + brand.BrandId + '_' + data.ProductId] = ''; + } + + } + + async function getMFDStockData(skud) { + + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + let q = `select * from ${AppTables.STOCK2_MFD_DATA} where STOCK_UID='${skud.STOCK_UID}'`; + await txn.executeSql(q, [], async function (txn2, txnres) { + if (txnres.rows.length > 0) { + let arr = []; + for (var i = 0; i < txnres.rows.length; i++) { + let data = txnres.rows.item(i); + let obj = { 'date': new Date(data.DATE), 'mfd': data.MFD, 'stock': data.STOCK, 'lotno': data.LOT_NO } + + arr.push(obj); + if (i == txnres.rows.length - 1) { + // console.log('mfdStocks', arr); + resolve(arr) + } + } + } + else { + resolve([]) + } + }, function (txnE, txnerr) { console.log(txnerr); resolve([]) },); + }); + }).catch((err) => { + console.log(err); + return []; + }) + } + + function cancelImage() { + setSelectedImg(""); + setReCapImgModalObj({}); + setShowModal(false); + } + + function _OpenCaptureImage_Modal(img) { + const isImageCap = img != "" || img != null ? true : false; + let { ImageLable } = reCapImgModalObj; + let camera2Label = ImageLable || ""; + return ( + + {isImageCap && ( + + + + + { + setShowModal(false); + openCamera(reCapImgModalObj); + }} + > + + + + {!showImageSaveOp && ( + { + cancelImage(false); + }} + > + {ST.Close} + + )} + + )} + + ); + } + + + async function getImage(imgdata) { + let cat = getImageProps.option || {}; + if (typeof imgdata == 'object' && imgdata.errorCode == 'camera_unavailable') { + notify(ST.Cameraunavailable); + } + else if (typeof imgdata == 'object' && imgdata.uri != null) { + const img = imgdata; + const imgurl = img.uri, imgWidth = img.width, imgHeight = img.ExtendedHeight; + let isImgFromGallery = img.fromGallery != null ? img.fromGallery : false; + let picture_clickedd = isImgFromGallery == true ? img.datetime : new Date(); + let picture_clicked_time = moment(picture_clickedd).format('DD-MM-YYYY HH:mm:ss') + + const mark_text1 = picture_clicked_time; + const mark_text2 = 'Store Name:' + storeData.StoreName + ' | Store Id:' + storeData.StoreId + ' | User Id:' + storeData.EmpId + ' | Image Type: ' + currentMenu.MenuName + ' | Date:' + picture_clicked_time; + + + let picture_clicked_date1 = moment(picture_clickedd).format('YYYYMMDD'); + let picture_clicked_time1 = moment(picture_clickedd).format('HHmmss'); + let filename = storeData.StoreId + '_' + (props.UserId || '') + '_Stock-' + picture_clicked_date1 + '_' + picture_clicked_time1 + '.jpg'; + + let { catIndex, subCatIndex, skuIndex, splitItemIndex, type } = cat + var brandList, brandListItem, WindowSplitsList, WindowSplitsItme, skulist, skulistItem, WindowChildSplitsList, WindowChildSplitsItme; + var CatList = brandData || []; + var CatListItem = CatList[catIndex]; + + if (type == 5) { + WindowSplitsList = CatListItem["WindowSplits"]; + WindowSplitsItme = WindowSplitsList[splitItemIndex] + //console.log("WindowSplitsList[splitItemIndex]------", WindowSplitsList, splitItemIndex, WindowSplitsItme) + WindowSplitsItme["Image"] = filename + } else { + brandList = CatListItem.brandList + brandListItem = brandList[subCatIndex] + + skulist = brandListItem.skulist; + skulistItem = skulist[skuIndex]; + + WindowChildSplitsList = skulistItem["WindowChildSplits"]; + WindowChildSplitsItme = WindowChildSplitsList[splitItemIndex] + + WindowChildSplitsItme["Image"] = filename + } + + + let imagePath = 'file://' + ImageFolderPath + currentMenu.ScreenName + "/" + filename; + RNFS.copyFile(imgurl, imagePath) + .then(async (resn) => { + // render data with clicked image + let uri = imagePath; + console.log('image marker', uri); + if (type == 5) { + WindowSplitsItme["ImagePath"] = uri + WindowSplitsList[splitItemIndex] = WindowSplitsItme + CatListItem["WindowSplits"] = WindowSplitsList + } else { + WindowChildSplitsItme["ImagePath"] = uri + WindowChildSplitsList[splitItemIndex] = WindowChildSplitsItme + skulistItem['WindowChildSplits'] = WindowChildSplitsList + skulist[skuIndex] = skulistItem + brandListItem.skulist = skulist + brandList[subCatIndex] = brandListItem + CatListItem.brandList = brandList + } + + + + CatList[catIndex] = CatListItem + setBrandData([...CatList]); + setSelectedImg(uri) + // add metdata then resize image and restored back to the imagePath + let restore_data = { "destFilePath": imagePath, "imgurl": imgurl, imgWidth, imgHeight, mark_text1, mark_text2 } + let is_restored = await restore_ImageWithMetaData(restore_data, imgdata); + console.log("image restored:", is_restored); + }) + .catch(err => { + console.log(ST.Errorimagefilewritefailed + '!!!'); + console.log(err.message, err.code); + }); + + + } + } + + async function openCamera(option) { + setGetImageProps({ 'option': option }); + console.log('openCamera'); + setShowCamera(true); + } + + + async function submitOpeningStock() { + let isvalid = await validate(); + if (isvalid) { + Keyboard.dismiss(); + setShowAlert(true); + } + } + + async function saveData() { + BgUnsavedChanges(false) + setShowAlert(false); + setLoaderTitle(ST.SavingData + '...'); + setProcessing(true); + try { + let { StoreId, ChainId, StateId, StoreTypeId } = storeData; + await db.transaction(async function (txn) { + + let IdVal = CatData[ColId]; + let NameVal = CatData[ColName]; + let q = `DELETE FROM ${AppTables.STOCKPOMO_HDR_DATA} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' ${ShowCatWise ? ` and SUB_CATEGORY_ID='${IdVal}' ` : ''} `; + let q2 = `DELETE FROM ${AppTables.STOCKPROMO_DATA} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' ${ShowCatWise ? ` and SUB_CATEGORY_ID='${IdVal}' ` : ''} `; + let q3 = `DELETE FROM ${AppTables.STOCK2_MFD_DATA} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' ${ShowCatWise ? ` and SUB_CATEGORY_ID='${IdVal}' ` : ''} `; + // remove old data + await txn.executeSql(q, [], async function (txn2, txnres) { + console.log('stock data deleted'); + }, function (txnE, txnerr) { console.log(txnerr); },); + + await txn.executeSql(q2, [], async function (txn2, txnres) { + console.log('stock header data deleted'); + }, function (txnE, txnerr) { console.log(txnerr); },); + + await txn.executeSql(q3, [], async function (txn2, txnres) { + console.log('stock mfd data deleted'); + }, function (txnE, txnerr) { console.log(txnerr); },); + + let seq_q = ` select seq from sqlite_sequence where name="${AppTables.STOCKPOMO_HDR_DATA}" `; + await txn.executeSql(seq_q, [], async function (txn2, txnres) { + if (txnres.rows.length > 0) { + let data = txnres.rows.item(0); + let seq = data.seq; + insertData(seq); + } + else { + insertData(0); + } + }, function (txnE, txnerr) { console.log(txnerr); insertData(0); },); + + + }); + } catch (err) { + console.log(err); + } + } + + async function insertData(seq = 0) { + try { + console.log(seq); + let { StoreId, ChainId, StateId, StoreTypeId, ExpiryStock } = storeData; + console.log('insertData'); + await db.transaction(async function (txn) { + var values = '', stock_values = '', mfdStockV = '', valuesTopHdr = ''; + for (var i = 0; i < globalBrandData.length; i++) { + + seq++; + let catIndex = i; + let item = globalBrandData[catIndex]; + let cimage = catImages.find(ci => ci.SubCategoryId == item.SubCategoryId) || {}; + values += values != '' ? ' , ' : ''; + + let WindowSplitsJson = item?.WindowSplits && JSON.stringify(item?.WindowSplits) + + values += ` ('${StoreId}','${d2}','${item.SubCategoryName}','${item.SubCategoryId}','','${(cimage.ImageName || '')}','${(cimage.ImagePath || '')}','1','${d2}','${WindowSplitsJson}') `; + console.log('stock hdr values added'); + + let brandList = item.brandList || []; + for (var j = 0; j < brandList.length; j++) { + let brand = brandList[j]; + + let skulist = brand['skulist'] || []; + + for (var k = 0; k < skulist.length; k++) { + let skuItem = skulist[k]; + let SKU_UID = 'SKU' + seq + j + k + (Math.floor(Math.random() * 1000) + 1); + let { BrandId, BrandName, MSL, ProductId, ProductName, WindowChildSplits } = skuItem; + + let WindowChildSplitsJson = JSON.stringify(WindowChildSplits) + stock_values += stock_values != '' ? ' , ' : ''; + let allSKUData = SKUStockData; + const skud_index = allSKUData.findIndex(ci => ci.SubCategoryId == item.SubCategoryId && ci.ProductId == skuItem.ProductId); + const skud = skud_index >= 0 ? (allSKUData[skud_index] || {}) : {}; + // console.log("checkdataaainsert---", skud) + let mfdStocks = skud['mfdStocks'] || []; + + let stock = skud.Stock != null ? skud.Stock : ''; + let mrp = skud.MRP != null ? skud.MRP : ''; + let sellingprice = skud.SellingPrice != null ? skud.SellingPrice : ''; + let remark = skud.Remark != null ? skud.Remark : ''; + + let br_stock = skud.BackRoomStock != null ? skud.BackRoomStock : ''; + let ex_stock = skud.ExpiryStock != null ? skud.ExpiryStock : ''; + let damage_stock = skud.DamagedStock != null ? skud.DamagedStock : ''; + let lost_stock = skud.LostStock != null ? skud.LostStock : ''; + let FromDate = skud.FromDate != null ? skud.FromDate : ''; + let ToDate = skud.ToDate != null ? skud.ToDate : ''; + + let isSKUPresent = skud.isSKUPresent != null ? skud.isSKUPresent : 0; + let OutOfStock = skud.OutOfStock != null ? skud.OutOfStock : '0'; + let LessThanMBQ = skud.LessThanMBQ != null ? skud.LessThanMBQ : '0'; + + let NearExpiry_stock1 = skud.NearExpiry1 != null ? skud.NearExpiry1 : ''; + let NearExpiry_stock2 = skud.NearExpiry2 != null ? skud.NearExpiry2 : ''; + let NearExpiry_stock3 = skud.NearExpiry3 != null ? skud.NearExpiry3 : ''; + + let stockImg = skud.ImageName != null ? skud.ImageName : ''; + let stockImgPath = skud.ImagePath != null ? skud.ImagePath : ''; + + + + //console.log("skuimg-----", stockImg + "," + stockImgPath) + + let stockS = skuItem?.stockAnswer?.StockStatus ?? skuItem.STOCK_AVL_STATUS + let promoRun + let StockPromoTypeId + if (stockS === "No") { + promoRun = ''; + StockPromoTypeId = ''; + stock = ''; + WindowChildSplitsJson = JSON.stringify([ + { "ImageName": "", "Image": "", "ImageLable": "Promo Image1", "imgRequired": false }, + { "ImageName": "", "Image": "", "ImageLable": "Promo Image2", "imgRequired": false } + ]); + //console.log("prm----", stockS, promoRun, StockPromoTypeId, WindowChildSplitsJson); + } + else if (stockS === "Not Listed") { + promoRun = ''; + StockPromoTypeId = ''; + stock = ''; + WindowChildSplitsJson = JSON.stringify([ + { "ImageName": "", "Image": "", "ImageLable": "Promo Image1", "imgRequired": false }, + { "ImageName": "", "Image": "", "ImageLable": "Promo Image2", "imgRequired": false } + ]); + //console.log("prm----", stockS, promoRun, StockPromoTypeId, WindowChildSplitsJson); + } + + + else { + + promoRun = skuItem?.stockAnswer?.PromoRunning ?? skuItem.PROMO_RUNNING; + StockPromoTypeId = skuItem?.stockAnswer?.StockPromoType != null ? skuItem.stockAnswer.StockPromoType : ((skuItem.PROMO_TYPE != null || skuItem.PROMO_TYPE != 'null') ? skuItem.PROMO_TYPE : ""); + if (StockPromoTypeId == 'null') { + StockPromoTypeId = ""; + } + + } + + stock_values += ` ('${seq}','${SKU_UID}','${StoreId}','${d2}','${item.SubCategoryId}','${item.SubCategoryName}','${BrandId}','${BrandName}','${ProductId}','${ProductName}','${MSL}','${stockS}','${StockPromoTypeId}','${promoRun}','${stockImg}','${stockImgPath}','${stock}','${mrp}','${sellingprice}','${remark}','${br_stock}','${damage_stock}','${lost_stock}','${ex_stock}','${isSKUPresent}','${NearExpiry_stock1}','${NearExpiry_stock2}','${NearExpiry_stock3}','${OutOfStock}','${LessThanMBQ}','${d2}','${WindowChildSplitsJson}', '${FromDate}','${ToDate}') `; + + //console.log(stock_values, 'stock_valuesstock_values') + + for (let m = 0; m < mfdStocks.length; m++) { + let cstock = mfdStocks[m]; + let mfd_stock = cstock['stock']; + let mfd_mfd = cstock['mfd']; + let mfd_lotno = cstock['lotno']; + let mfd_date = cstock['date'] != null ? moment(cstock['date']).format('MM-DD-YYYY') : ''; + + mfdStockV += mfdStockV != '' ? ' , ' : ''; + mfdStockV += ` ('${seq}','${SKU_UID}','${StoreId}','${d2}','${item.SubCategoryId}','${BrandId}','${ProductId}','${mfd_stock}','${mfd_mfd}','${mfd_lotno}','${mfd_date}','${d2}') `; + + } + + } + } + + } + // let add_StockHdrDropDwn=`INSERT INTO ${AppTables.STOCKPROMO_HDR_TOP} (STORE_ID,VISIT_DATE,SUB_CATEGORY,SUB_CATEGORY_ID,MSL,STOCK_AVL_STATUS,PROMO_TYPE,PROMO_RUNNING,IS_UPDATED,ADDED_DATE) VALUES ${valuesTopHdr} `; + let add_StockHdr = `INSERT INTO ${AppTables.STOCKPOMO_HDR_DATA} (STORE_ID,VISIT_DATE,SUB_CATEGORY,SUB_CATEGORY_ID,MSL,IMAGE,IMAGEPATH,IS_UPDATED,ADDED_DATE,IMAGE_JSON) VALUES ${values} `; + let add_Stock = `INSERT INTO ${AppTables.STOCKPROMO_DATA} (COMMON_ID,STOCK_UID,STORE_ID,VISIT_DATE,SUB_CATEGORY_ID,SUB_CATEGORY,BRAND_ID,BRAND,PRODUCT_ID,PRODUCT,MSL,STOCK_AVL_STATUS,PROMO_TYPE,PROMO_RUNNING,IMAGE,IMAGEPATH,STOCK,MRP,SELLING_PRICE,REMARK,BACKROOM_STOCK,DAMAGED_STOCK,LOST_STOCK,EXPIRY_STOCK,IS_SKU_STOCK_PRESENT,NREXPIRY1_STOCK,NREXPIRY2_STOCK,NREXPIRY3_STOCK,OUT_OF_STOCK,LESS_THAN_MBQ,ADDED_DATE,IMAGE_JSON,FROM_DATE,TO_DATE) VALUES ${stock_values} `; + let add_mfd_Stock = `INSERT INTO ${AppTables.STOCK2_MFD_DATA} (COMMON_ID,STOCK_UID,STORE_ID,VISIT_DATE,SUB_CATEGORY_ID,BRAND_ID,PRODUCT_ID,STOCK,MFD,LOT_NO,DATE,ADDED_DATE) VALUES ${mfdStockV} `; + + + await txn.executeSql(add_StockHdr, [], async function (txn2, txnres) { + await txn.executeSql(add_Stock, [], async function (txn2, txnres) { + console.log('stock added'); + if (mfdStockV != null && mfdStockV != '') { + await txn.executeSql(add_mfd_Stock, [], async function (txn2, txnres) { + console.log('stock mfd added'); + notify(ST.Stockupdatedsuccessfully); + setProcessing(false); + // clear store data in local storage to avoiding re-set data for the store + clear_item('storeData') + props.navigation.goBack(); + }, function (txnE, txnerr) { console.log(txnerr); setProcessing(false); notify(ST.Cannotaddstock) },); + } + else { + notify(ST.Stockupdatedsuccessfully); + setProcessing(false); + // clear store data in local storage to avoiding re-set data for the store + clear_item('storeData') + props.navigation.goBack(); + } + + }, function (txnE, txnerr) { console.log(txnerr); setProcessing(false); notify(ST.Cannotaddstock) },); + }, function (txnE, txnerr) { console.log(txnerr); setProcessing(false); notify(ST.Cannotaddstock) },); + + + }); + } catch (err) { + console.log(err); + } + } + + + async function validate() { + let isValid = true; + var i = 0, j = 0; + + + let StockValidationRequiredI = KPIFields.findIndex(i => i.KPIFieldName == 'StockValidationRequired') + let StockValidationRequiredObj = StockValidationRequiredI >= 0 ? KPIFields[StockValidationRequiredI] : {}; + let StockValidationRequired = StockValidationRequiredI >= 0 ? StockValidationRequiredObj['KPIFieldEnable'] : true; + //console.log('StockValidationRequired:', StockValidationRequired); + if (StockValidationRequired == false) { + return isValid; + } + + // validate only if permit + + let isHdrImgIndex = KPIFields.findIndex(i => i.KPIFieldName == 'HeaderImageAllow') + let isHdrImgKPIObj = isHdrImgIndex >= 0 ? KPIFields[isHdrImgIndex] : {}; + let isHdrImgEnable = isHdrImgIndex >= 0 ? isHdrImgKPIObj['KPIFieldEnable'] : false; + + //console.log(isHdrImgEnable, 'isHdrImgEnable') + + let isListedSKUIndex = KPIFields.findIndex(i => i.KPIFieldName == 'ListedSKU'); + let isListedSKUKPIObj = isListedSKUIndex >= 0 ? KPIFields[isListedSKUIndex] : {}; + let isListedSKUEnable = isListedSKUIndex >= 0 ? isListedSKUKPIObj['KPIFieldEnable'] : true; + + let isStockIndex = KPIFields.findIndex(i => i.KPIFieldName == 'Stock') + let isStockKPIObj = isStockIndex >= 0 ? KPIFields[isStockIndex] : {}; + let isStockEnable = isStockIndex >= 0 ? isStockKPIObj['KPIFieldEnable'] : true; + let isStockDis_Name = isStockIndex >= 0 ? isStockKPIObj['KPIFieldDisplayName'] : 'Stock'; + + + let StockAvlStatus = KPIFields.find(i => i.KPIFieldName == 'StockAvailableStatus') + let StockAvlStatusObj = StockAvlStatus || {}; + let isStockAvlEnable = StockAvlStatusObj?.KPIFieldEnable; + let StockAvlStatusName = StockAvlStatusObj?.KPIFieldDisplayName || "Stock Available Status"; + + + let promoRunning = KPIFields.find(i => i.KPIFieldName == 'PromoRunning') + let promoRunningObj = promoRunning || {}; + let isPromoRunEnable = promoRunningObj?.KPIFieldEnable; + let promoRunningName = promoTypeObj?.KPIFieldDisplayName || "Promo Running"; + //console.log("promo---", promoRunningName) + + let MRP = KPIFields.find(i => i.KPIFieldName == 'MRP') + let MRPTypeObj = MRP || {}; + let isMRPEnable = MRPTypeObj?.KPIFieldEnable; + let MRPName = MRPTypeObj?.KPIFieldDisplayName || "MRP"; + + let SellingPrice = KPIFields.find(i => i.KPIFieldName == 'SellingPrice') + let SellingPriceObj = SellingPrice || {}; + let isSellingPriceEnable = SellingPriceObj?.KPIFieldEnable; + let isSellingPriceDis_Name = SellingPriceObj?.KPIFieldDisplayName || "SellingPrice"; + + let promoType = KPIFields.find(i => i.KPIFieldName == 'PromoType') + let promoTypeObj = promoType || {}; + let ispromoTypeEnable = promoRunningObj?.KPIFieldEnable; + let promoTypeName = promoTypeObj?.KPIFieldDisplayName || "Promo Type"; + + let isBRStockIndex = KPIFields.findIndex(i => i.KPIFieldName == 'BackRoomStock') + let isBRStockKPIObj = isBRStockIndex >= 0 ? KPIFields[isBRStockIndex] : {}; + let isBRStockEnable = isBRStockIndex >= 0 ? isBRStockKPIObj['KPIFieldEnable'] : false; + //console.log("isbackroom----", isBRStockEnable) + let isBRStockDis_Name = isBRStockIndex >= 0 ? isBRStockKPIObj['KPIFieldDisplayName'] : ''; + + let isDStockIndex = KPIFields.findIndex(i => i.KPIFieldName == 'DamageStock') + let isDStockKPIObj = isDStockIndex >= 0 ? KPIFields[isDStockIndex] : {}; + let isDStockEnable = isDStockIndex >= 0 ? isDStockKPIObj['KPIFieldEnable'] : false; + let isDStockDis_Name = isDStockIndex >= 0 ? isDStockKPIObj['KPIFieldDisplayName'] : ''; + + let isLStockIndex = KPIFields.findIndex(i => i.KPIFieldName == 'LostStock') + let isLStockKPIObj = isLStockIndex >= 0 ? KPIFields[isLStockIndex] : {}; + let isLStockEnable = isLStockIndex >= 0 ? isLStockKPIObj['KPIFieldEnable'] : false; + let isLStockDis_Name = isLStockIndex >= 0 ? isLStockKPIObj['KPIFieldDisplayName'] : ''; + + let isExStockIndex = KPIFields.findIndex(i => i.KPIFieldName == 'ExpiredStock') + let isExStockKPIObj = isExStockIndex >= 0 ? KPIFields[isExStockIndex] : {}; + let isExStockEnable = isExStockIndex >= 0 ? isExStockKPIObj['KPIFieldEnable'] : false; + let isExStockDis_Name = isExStockIndex >= 0 ? isExStockKPIObj['KPIFieldDisplayName'] : ''; + + let isMFDIndex = KPIFields.findIndex(i => i.KPIFieldName == 'MFD') + let isMFD_KPIObj = isMFDIndex >= 0 ? KPIFields[isMFDIndex] : {}; + let isMFDEnable = isMFDIndex >= 0 ? isMFD_KPIObj['KPIFieldEnable'] : false; + let isMFDDis_Name = isMFDIndex >= 0 ? isMFD_KPIObj['KPIFieldDisplayName'] : ''; + + let NrExpiry1Index = KPIFields.findIndex(i => i.KPIFieldName == 'NrExpiry1') + let NrExpiry1KPIObj = NrExpiry1Index >= 0 ? KPIFields[NrExpiry1Index] : {}; + let NrExpiry1Enable = NrExpiry1Index >= 0 ? NrExpiry1KPIObj['KPIFieldEnable'] : false; + let NrExpiry1_Dis_Name = NrExpiry1Index >= 0 ? NrExpiry1KPIObj['KPIFieldDisplayName'] : ''; + + let NrExpiry2Index = KPIFields.findIndex(i => i.KPIFieldName == 'NrExpiry2') + let NrExpiry2KPIObj = NrExpiry2Index >= 0 ? KPIFields[NrExpiry2Index] : {}; + let NrExpiry2Enable = NrExpiry2Index >= 0 ? NrExpiry2KPIObj['KPIFieldEnable'] : false; + let NrExpiry2_Dis_Name = NrExpiry2Index >= 0 ? NrExpiry2KPIObj['KPIFieldDisplayName'] : ''; + + let NrExpiry3Index = KPIFields.findIndex(i => i.KPIFieldName == 'NrExpiry3') + let NrExpiry3KPIObj = NrExpiry1Index >= 0 ? KPIFields[NrExpiry3Index] : {}; + let NrExpiry3Enable = NrExpiry1Index >= 0 ? NrExpiry3KPIObj['KPIFieldEnable'] : false; + let NrExpiry3_Dis_Name = NrExpiry1Index >= 0 ? NrExpiry3KPIObj['KPIFieldDisplayName'] : ''; + + let MSLIndex = KPIFields.findIndex(i => i.KPIFieldName == 'MSL'); + let MSLObj = MSLIndex >= 0 ? KPIFields[MSLIndex] : {}; + let isMSLAllow = MSLIndex >= 0 ? MSLObj['KPIFieldEnable'] : true; + + let NONMSL_Index = KPIFields.findIndex(i => i.KPIFieldName == 'NONMSL'); + let NONMSL_Obj = NONMSL_Index >= 0 ? KPIFields[NONMSL_Index] : {}; + let isNONMSL_Allow = NONMSL_Index >= 0 ? NONMSL_Obj['KPIFieldEnable'] : true; + + // new + let OutofStockI = KPIFields.findIndex(i => i.KPIFieldName == 'OutofStock') + let OutofStockObj = OutofStockI >= 0 ? KPIFields[OutofStockI] : {}; + let OutofStockEnable = OutofStockI >= 0 ? OutofStockObj['KPIFieldEnable'] : false; + + let LessThanMBQI = KPIFields.findIndex(i => i.KPIFieldName == 'LessThanMBQ') + let LessThanMBQObj = LessThanMBQI >= 0 ? KPIFields[LessThanMBQI] : {}; + let LessThanMBQEnable = LessThanMBQI >= 0 ? LessThanMBQObj['KPIFieldEnable'] : false; + + let DefaultStockToggleI = KPIFields.findIndex(i => i.KPIFieldName == 'DefaultStockToggle') + let DefaultStockToggleObj = DefaultStockToggleI >= 0 ? KPIFields[DefaultStockToggleI] : {}; + let DefaultStockToggle = DefaultStockToggleI >= 0 ? DefaultStockToggleObj['KPIFieldEnable'] : false; + let DefaultStockToggleValue = DefaultStockToggleI >= 0 ? DefaultStockToggleObj['KPIFieldDisplayName'] : "2"; + let deftogvalue = DefaultStockToggleValue == "3" ? "3" : (DefaultStockToggle == "1" ? "1" : "0"); + + let COMPStockAllow_Index = KPIFields.findIndex(i => i.KPIFieldName == 'COMPStockAllow'); + let COMPStockAllow_Obj = COMPStockAllow_Index >= 0 ? KPIFields[COMPStockAllow_Index] : {}; + let isCOMPStockAllow = COMPStockAllow_Index >= 0 ? COMPStockAllow_Obj['KPIMandatory'] : false; + + + let FromDate_Index = KPIFields.findIndex(i => i.KPIFieldName == 'FromDate'); + let FromDate_Obj = FromDate_Index >= 0 ? KPIFields[FromDate_Index] : {}; + let isFromDate = FromDate_Index >= 0 ? FromDate_Obj['KPIFieldEnable'] : false; + + let ToDate_Index = KPIFields.findIndex(i => i.KPIFieldName == 'ToDate'); + let ToDate_Obj = ToDate_Index >= 0 ? KPIFields[ToDate_Index] : {}; + let isToDate = ToDate_Index >= 0 ? ToDate_Obj['KPIFieldEnable'] : false; + + await Promise.all( + + globalBrandData.map(async (item, index) => { + if (isValid) { + let catId = item.SubCategoryId; + let cimgData = catImages.find(ci => ci.SubCategoryId == catId) || {}; + let isCollapsed = item.isCollapsed != null ? item.isCollapsed : true; + let WindowSplits = item?.WindowSplits + if (WindowSplits.length > 0) { + console.log("windsplits---", item) + let errorobj = { EF_Window: item }; + for (const splitItemIndex in WindowSplits) { + const splitItem = WindowSplits[splitItemIndex]; + + let Image1Name = splitItem["Image"] != null && splitItem["Image"] != "" ? splitItem["Image"] : ""; + + if (StoreCameraAllow && Image1Name == "") { + errorobj["EF_splitImage1"] = "splitImage1"; + errorobj["EF_splitItemIndex"] = splitItemIndex; + // showError(errorobj, true); + notify(`${ST.Pleaseclickallimagesfor} ${item.SubCategoryName}`, "LONG"); + // resolve(false); + isValid = false; + return; + } + } + + } + + let brandList = item.brandList || []; + + if (brandList.length > 0) { + + brandList.map(async (brand, brand_index) => { + let skulist = brand.skulist || []; + + if (isValid == true) { + if (skulist.length > 0) { + await Promise.all( + skulist.map(async (skuItem, skuIndex) => { + if (isValid == true) { + + let skuData = SKUStockData.find(ci => ci.SubCategoryId == item.SubCategoryId && ci.ProductId == skuItem.ProductId) || {}; + + let StockStatus = skuItem.stockAnswer?.StockStatus ?? skuItem?.STOCK_AVL_STATUS ?? ''; + let StockPromoType = skuItem.stockAnswer?.StockPromoType ?? skuItem?.PROMO_TYPE ?? ''; + let StockPromoRunning = skuItem.stockAnswer?.PromoRunning ?? skuItem?.PROMO_RUNNING ?? ''; + + let isActualPromoIndex = reasons_list?.findIndex(i => i.StockPromoType == StockPromoType) + let isActualPromoObj = isActualPromoIndex >= 0 ? reasons_list[isActualPromoIndex] : {}; + let isActualPromoEnable = isActualPromoIndex >= 0 ? isActualPromoObj['ActualAllow'] : true; + let isActualPromoDis_Name = isActualPromoIndex >= 0 ? isActualPromoObj['ActualDisplayName'] : ''; + + skuData = { + ...skuData, + StockStatus, + StockPromoType, + StockPromoRunning + }; + + + let stock = skuData.Stock != null ? skuData.Stock : ''; + let mrp = skuData.MRP != null ? skuData.MRP : ''; + let sellingprice = skuData.SellingPrice != null ? skuData.SellingPrice : ''; + let remark = skuData.Remark != null ? skuData.Remark : ''; + + let stockStaus = skuData.StockStatus != null ? skuData.StockStatus : ''; + let stockPromoType = skuData.StockPromoType != null ? skuData.StockPromoType : ''; + let stockPromoRunning = skuData.StockPromoRunning != null ? skuData.StockPromoRunning : ''; + let FromDate = skuData.FromDate != null ? skuData.FromDate : "" + let ToDate = skuData.ToDate != null ? skuData.ToDate : "" + + let WindowChildSplits = skuData?.WindowChildSplits + + let ex_stock = skuData.ExpiryStock != null ? skuData.ExpiryStock : ''; + let damage_stock = skuData.DamagedStock != null ? skuData.DamagedStock : ''; + let lost_stock = skuData.LostStock != null ? skuData.LostStock : ''; + let isSKUPresent = skuData.isSKUPresent != null ? skuData.isSKUPresent : 0; + let br_stock = skuData.BackRoomStock != null ? skuData.BackRoomStock : ''; + let NearExpiry_stock1 = skuData.NearExpiry1 != null ? skuData.NearExpiry1 : ''; + let NearExpiry_stock2 = skuData.NearExpiry2 != null ? skuData.NearExpiry2 : ''; + let NearExpiry_stock3 = skuData.NearExpiry3 != null ? skuData.NearExpiry3 : ''; + let OutOfStock = skuData.OutOfStock != null ? skuData.OutOfStock : deftogvalue; + let LessThanMBQ = skuData.LessThanMBQ != null ? skuData.LessThanMBQ : deftogvalue; + + // let isMandatory=((isMSLAllow==1 || isMSLAllow=='true') && (skuItem.MSL==1 || skuItem.MSL=='true') ) || ((isNONMSL_Allow==0 || isNONMSL_Allow=='false') && (skuItem.MSL!=1 && skuItem.MSL!='true') ) + let IsCompetitor = skuItem.IsCompetitor == '1' || skuItem.IsCompetitor == 1 ? true : false; + + let isMSLMandCond = !IsCompetitor && (isMSLAllow == 1 || isMSLAllow == 'true') && (skuItem.MSL == 1 || skuItem.MSL == 'true'); + let isNONMSLMandCond = !IsCompetitor && (isNONMSL_Allow == true || isNONMSL_Allow == 'true') && (skuItem.MSL != 1 && skuItem.MSL != 'true') + + let IsCompetitorMand = (isCOMPStockAllow == 1 || isCOMPStockAllow == 'true') && IsCompetitor; + let isMandatory = isMSLMandCond || isNONMSLMandCond || IsCompetitorMand; + + let isChildImgIndex = KPIFields.findIndex(i => i.KPIFieldName == 'ChildImageAllow') + let isChildImgKPIObj = isChildImgIndex >= 0 ? KPIFields[isChildImgIndex] : {}; + let isChildImgEnable = isChildImgIndex >= 0 ? isChildImgKPIObj['KPIFieldEnable'] : false; + + + let errorobj = { 'EF_cat': item, 'EF_brand': brand, 'EF_product': skuItem } + let errorcatid = item.SubCategoryId + let error_bid = brand.BrandId + let error_pid = skuItem.ProductId + let show_errorH = false, error_HInputKey = ''; + if (isListedSKUEnable == 1) { + // console.log("isStockEnable:", isStockEnable, stock) + if (LessThanMBQEnable == true && LessThanMBQ == "3") { + notify("Please select required options for " + skuItem.ProductName, 'LONG'); + isValid = false; + } + + if (isStockAvlEnable === true && (stockStaus === "No" || stockStaus === "Not Listed" || stockPromoRunning === "No")) { + + } + else { + if (isStockAvlEnable == true && stockStaus !== 0 && (stockStaus == null || stockStaus == '')) { + notify('Please select' + ' ' + StockAvlStatusName + ' ' + ST.for + ' ' + skuItem.ProductName, 'LONG'); + isValid = false; + + } + else if (isStockEnable == true && stock !== 0 && (stock == null || stock == '')) { + notify(ST.Pleaseenter + ' ' + isStockDis_Name + ' ' + ST.for + ' ' + skuItem.ProductName, 'LONG'); + isValid = false; + + } + + else if (isMRPEnable == true && mrp !== 0 && (mrp == null || mrp == '')) { // MRP + notify(ST.Pleaseenter + ' ' + MRPName + ' ' + ST.for + ' ' + skuItem.ProductName, 'LONG'); + isValid = false; + + } + + else if (isPromoRunEnable == true && stockPromoRunning !== 0 && (stockPromoRunning == null || stockPromoRunning == '')) { + notify('Please select' + ' ' + promoRunningName + ' ' + ST.for + ' ' + skuItem.ProductName, 'LONG'); + isValid = false; + + } + + else if (ispromoTypeEnable == true && stockPromoType !== 0 && (stockPromoType == null || stockPromoType == '')) { + notify('Please select' + ' ' + promoTypeName + ' ' + ST.for + ' ' + skuItem.ProductName, 'LONG'); + isValid = false; + + } + else if (isFromDate == true && FromDate !== 0 && (FromDate == null || FromDate == '')) { + notify('Please select From Date' + isStockDis_Name + ' ' + ST.for + ' ' + skuItem.ProductName, 'LONG'); + isValid = false; + + } + else if (isToDate == true && ToDate !== 0 && (ToDate == null || ToDate == '')) { + notify('Please select ToDate' + isStockDis_Name + ' ' + ST.for + ' ' + skuItem.ProductName, 'LONG'); + isValid = false; + // show_errorH=true,error_HInputKey='input1_'; + } + else if (isSellingPriceEnable == true && sellingprice !== 0 && (sellingprice == null || sellingprice == '')) { + notify(ST.Pleaseenter + ' ' + isSellingPriceDis_Name + ' ' + ST.for + ' ' + skuItem.ProductName, 'LONG'); + isValid = false; + // show_errorH=true,error_HInputKey='input1_'; + } + + else if ((isActualPromoEnable == "true" || isActualPromoEnable == true) && StockPromoRunning === 'Yes' && isActualPromoEnable && remark !== 0 && (remark == null || remark == '')) { + notify(ST.Pleaseenter + ' ' + isActualPromoDis_Name + ' ' + ST.for + ' ' + skuItem.ProductName, 'LONG'); + isValid = false; + // show_errorH=true,error_HInputKey='input1_'; + } + + + else if (WindowChildSplits.length > 0) { + // console.log("arraylength---",WindowChildSplits.length) + let errorobj = { EF_Window: window }; + for (const splitItemIndex in WindowChildSplits) { + const splitItem = WindowChildSplits[splitItemIndex]; + + let Image1Name = splitItem["Image"] != null && splitItem["Image"] != "" ? splitItem["Image"] : ""; + if (StoreCameraAllow && Image1Name == "" && isChildImgEnable) { + errorobj["EF_splitImage1"] = "splitImage1"; + errorobj["EF_splitItemIndex"] = splitItemIndex; + notify('Please click all' + ' ' + 'images' + ' ' + ST.for + ' ' + skuItem.ProductName, 'LONG'); + isValid = false; + return; + + + } + + } + + } + + + else if (OutofStockEnable == true && OutOfStock == "3") { + notify("Please select required options for " + skuItem.ProductName, 'LONG'); + isValid = false; + } + } + + + if (isBRStockEnable == true && br_stock !== 0 && (br_stock == null || br_stock == '')) { + notify(ST.Pleaseenter + ' ' + isBRStockDis_Name + ' ' + ST.for + ' ' + skuItem.ProductName, 'LONG'); + isValid = false; + show_errorH = true, error_HInputKey = 'input2_'; + } + else if (isDStockEnable == true && damage_stock !== 0 && (damage_stock == null || damage_stock == '')) { + notify(ST.Pleaseenter + ' ' + isDStockDis_Name + ' ' + ST.for + ' ' + skuItem.ProductName, 'LONG'); + isValid = false; + show_errorH = true, error_HInputKey = 'input3_'; + } + + + + + else if (isLStockEnable == true && lost_stock !== 0 && (lost_stock == null || lost_stock == '')) { + notify(ST.Pleaseenter + ' ' + isDStockDis_Name + ' ' + ST.for + ' ' + skuItem.ProductName, 'LONG'); + isValid = false; + show_errorH = true, error_HInputKey = 'input4_'; + } + else if (isExStockEnable == true && ex_stock !== 0 && (ex_stock == null || ex_stock == '')) { + notify(ST.Pleaseenter + ' ' + isExStockDis_Name + ' ' + ST.for + ' ' + skuItem.ProductName, 'LONG'); + isValid = false; + show_errorH = true, error_HInputKey = 'input5_'; + } + else if (NrExpiry1Enable == true && NearExpiry_stock1 !== 0 && (NearExpiry_stock1 == null || NearExpiry_stock1 == '')) { + notify(ST.Pleaseenter + ' ' + NrExpiry1_Dis_Name + ' ' + ST.for + ' ' + skuItem.ProductName, 'LONG'); + isValid = false; + show_errorH = true, error_HInputKey = 'input6_'; + } + else if (NrExpiry2Enable == true && NearExpiry_stock2 !== 0 && (NearExpiry_stock2 == null || NearExpiry_stock2 == '')) { + notify(ST.Pleaseenter + ' ' + NrExpiry2_Dis_Name + ' ' + ST.for + ' ' + skuItem.ProductName, 'LONG'); + isValid = false; + show_errorH = true, error_HInputKey = 'input7_'; + } + else if (NrExpiry3Enable == true && NearExpiry_stock3 !== 0 && (NearExpiry_stock3 == null || NearExpiry_stock3 == '')) { + notify(ST.Pleaseenter + ' ' + NrExpiry3_Dis_Name + ' ' + ST.for + ' ' + skuItem.ProductName, 'LONG'); + isValid = false; + show_errorH = true, error_HInputKey = 'input8_'; + } + + + if (show_errorH) { + errorobj['EF_InputKey'] = error_HInputKey; + setErrorField(errorobj) + setError(true) + let refIn1 = inputRefs.current[error_HInputKey + errorcatid + '_' + error_bid + '_' + error_pid] + refIn1.focus(); + } + + } + } + }) + ); + } + } + + }); + } + + // } + } + }) + ); + + console.log('isValid:', isValid); + return isValid; + } + + + async function onselectionChange3(option, keyLbl, keyVal, otherData) { + setErrorField({}); + setError(false); + + let dataIndex = otherData?.index + let dataItem = otherData?.item + + let { catIndex, subCatIndex, skuIndex, thisCatSkuData_i, thisCatSkuData1 } = otherData + + let CatList = brandData || []; + let CatListItem = CatList[catIndex]; + let brandList = CatListItem.brandList + let brandListItem = brandList[subCatIndex] + let skulist = brandListItem.skulist; + let skulistItem = skulist[skuIndex]; + + + let stAnswer = dataItem["stockAnswer"] || {} + let stockAnswer = { ...stAnswer } + let WindowChildSplitsArr = dataItem["WindowChildSplits"] || [] + // SubCategoryId==cat.SubCategoryId && i.ProductId==skus + // let thisCatSkuData=SKUStockData[skuIndex]; + let SKUStockData1 = SKUStockData[thisCatSkuData_i] || {} + let thisCatSkuData = thisCatSkuData_i > -1 ? { ...SKUStockData1 } : { ...thisCatSkuData1 }; + + if (stockAnswer?.PromoRunning != option.value && keyVal == "PromoRunning") { + stockAnswer["StockPromoType"] = ""; + stockAnswer["StockPromoTypeId"] = ""; + thisCatSkuData["SellingPrice"] = ""; + thisCatSkuData["Remark"] = ""; + + thisCatSkuData["FromDate"] = ""; + thisCatSkuData["ToDate"] = ""; + + WindowChildSplitsArr = await WindowChildSplitsArr?.map((itme) => { + return { ...itme, Image: "", ImagePath: "" } + }) || []; + } else if (stockAnswer?.StockStatus != option.value && keyVal == "StockStatus") { + + thisCatSkuData["MRP"] = ""; + thisCatSkuData["SellingPrice"] = ""; + thisCatSkuData["Remark"] = ""; + thisCatSkuData["FromDate"] = ""; + thisCatSkuData["ToDate"] = ""; + WindowChildSplitsArr = await WindowChildSplitsArr?.map((itme) => { + return { ...itme, Image: "", ImagePath: "" } + }) || []; + + stockAnswer["PromoRunning"] = ""; + stockAnswer["StockPromoType"] = ""; + stockAnswer["StockPromoTypeId"] = ""; + + } + + thisCatSkuData["WindowChildSplits"] = WindowChildSplitsArr || [] + SKUStockData[thisCatSkuData_i] = thisCatSkuData + + + stockAnswer[keyVal] = option.value; + stockAnswer[keyLbl] = option.label; + + // dataItem["stockAnswer"]=stockAnswer + // dataItem["WindowChildSplits"]=WindowChildSplitsArr || [] + + skulistItem['stockAnswer'] = stockAnswer + skulistItem["WindowChildSplits"] = WindowChildSplitsArr || [] + + skulist[skuIndex] = skulistItem + + brandListItem.skulist = skulist + brandList[subCatIndex] = brandListItem + + CatListItem.brandList = brandList + CatList[catIndex] = CatListItem + + brandList[subCatIndex] = brandListItem + CatListItem.brandList = brandList + CatList[catIndex] = CatListItem + + console.log("SKUStockData----", SKUStockData) + + setSKUStockData([...SKUStockData]) + setBrandData([...CatList]); + } + + + const isStockStatusCompare = (value, StockAvlStHideKPIType) => { + const stockavlstatushide = StockAvlStHideKPIType || ""; + console.log("compare---", value); + console.log(stockavlstatushide, 'stockavlstatushidehide------') + const valuesToCompare = stockavlstatushide.split(',').map(item => item.trim()); + const result = !valuesToCompare.includes(value); + return result; + }; + + + function onStockValChange(item, skuItem, val, key, type = '') { + console.log("item---", item) + console.log("skuItem---", skuItem) + console.log("value---", val, key) + setError(false) + setErrorField({}) + if (val !== '' && type != "date") { + let isValid; + if (key == 'Remark') { + isValid = validateNumber12(val, type); + } else { + isValid = validateNumber(val, type); + } + if (!isValid) { + return; + } + } + + let allSKUData = SKUStockData; + let defData = { 'SubCategoryId': item.SubCategoryId, 'ProductId': skuItem.ProductId }; + const skud_index = allSKUData.findIndex(i => i.SubCategoryId == item.SubCategoryId && i.ProductId == skuItem.ProductId); + const skud = skud_index >= 0 ? (allSKUData[skud_index] || defData) : defData; + if (type == "date") { + let Jp = JSON.parse(val) + let dd = moment(Jp).format('MM/DD/YYYY'); + if (key != "ToDate") { + skud["ToDate"] = ""; + } + skud[key] = dd; + } else { + skud[key] = val; + } + + if (key == 'isSKUPresent') { + skud['showAllSKU_Fields'] = val == 1 ? true : false; + } + skud_index >= 0 ? allSKUData[skud_index] = skud : allSKUData.push(skud); + console.log("allSKUData-----", allSKUData) + BgWindowData(allSKUData) + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + + function openAddStkModal(cat, skuItem) { + setCurrentBrand(cat); + setCurrentProduct(skuItem); + let allSKUData = SKUStockData; + let defData = { 'SubCategoryId': cat.SubCategoryId, 'ProductId': skuItem.ProductId }; + const skud_index = allSKUData.findIndex(i => i.SubCategoryId == cat.SubCategoryId && i.ProductId == skuItem.ProductId); + const skud = skud_index >= 0 ? (allSKUData[skud_index] || defData) : defData; + setShowStockModal(true); + } + + function onSaveCancel() { + setShowAlert(false) + } + + function setStockDate(date) { + let d1 = moment(date).format('DD/MM/YYYY'); + let cstock = currentStock; + cstock['date'] = date; + cstock['mfd'] = d1; + setCurrentStock(cstock); + setShowDatePicker(false); + } + + function setCS_Stock(key, val, type = '') { + if (val != '') { + let isValid = validateNumber(val, type); + if (!isValid) { + return; + } + } + + let cstock = currentStock; + cstock[key] = val; + console.log(key, val) + setCurrentStock(cstock); + setrerendermodal(!rerendermodal); + } + + + + function getAllSum(mfdStocks = [], cstock = {}) { + let { mfd, date, stock } = cstock + let sumOfAllStocks = parseInt(stock); + return new Promise((resolve, reject) => { + if (mfdStocks.length > 0) { + for (let i in mfdStocks) { + let ds = mfdStocks[i]; + sumOfAllStocks += parseInt(ds.stock); + if (i == mfdStocks.length - 1) { + resolve(sumOfAllStocks) + } + } + } + else { + resolve(sumOfAllStocks) + } + }).catch((err) => { + console.log(err); + return 0; + }) + } + + async function addMFDStock() { + Keyboard.dismiss(); + let cat = currentBrand + let skuItem = currentProduct + let cstock = currentStock; + var allSKUData = SKUStockData; + let defData = { 'SubCategoryId': cat.SubCategoryId, 'ProductId': skuItem.ProductId }; + const skud_index = allSKUData.findIndex(i => i.SubCategoryId == cat.SubCategoryId && i.ProductId == skuItem.ProductId); + var skud = skud_index >= 0 ? (allSKUData[skud_index] || defData) : defData; + let mfdStocks = skud['mfdStocks'] || []; + let product_total_stock = skud['Stock']; + let product_damage_stock = parseInt(skud['DamagedStock'] || 0); + let product_lost_stock = parseInt(skud['LostStock'] || 0); + let product_ex_stock = parseInt(skud['ExpiryStock'] || 0); + let product_stock = product_ex_stock;//product_total_stock-(product_damage_stock+product_lost_stock+product_ex_stock); + let { mfd, date, stock, lotno } = cstock + + if (mfd == null || mfd == '') { + notify(ST.Pleaseselectdate); + return; + } + else if (stock == null || stock == '') { + notify(ST.Pleaseenterstock); + return; + } + else if (lotno == null || lotno == '') { + notify(ST.Pleaseenterlotno); + return; + } + else if (mfdStocks.findIndex(i => i.mfd == mfd) >= 0) { + notify(ST.ThisdateisalreadyaddedPleaseselectdifferentdate); + return; + } + else { + console.log('added') + mfdStocks.push(cstock); + skud['mfdStocks'] = mfdStocks; + skud_index >= 0 ? allSKUData[skud_index] = skud : allSKUData.push(skud); + BgWindowData(allSKUData) + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + setCurrentStock({}); + setShowStockModal(false); + } + } + + + function removeMFDStock() { + let cat = toRemoveCat; + let skuItem = toRemoveSKU; + let cstockIndex = toRemoveId; + let allSKUData = SKUStockData; + let defData = { 'SubCategoryId': cat.SubCategoryId, 'ProductId': skuItem.ProductId }; + const skud_index = allSKUData.findIndex(i => i.SubCategoryId == cat.SubCategoryId && i.ProductId == skuItem.ProductId); + const skud = skud_index >= 0 ? (allSKUData[skud_index] || defData) : defData; + let mfdStocks = skud['mfdStocks'] || []; + mfdStocks.splice(cstockIndex, 1); + skud['mfdStocks'] = mfdStocks; + + skud_index >= 0 ? allSKUData[skud_index] = skud : allSKUData.push(skud); + setShowRemoveConfirm_M(false); + BgWindowData(allSKUData) + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + + function showRemoveConfirm(cat, skuItem, cstock, cstockIndex) { + setToRemoveId(cstockIndex); + setToRemoveCat(cat); + setToRemoveSKU(skuItem); + setShowRemoveConfirm_M(true); + } + + + function FilterStores(searchedQry) { + searchedQry = searchedQry ? searchedQry.toLowerCase().trim() : ''; + console.log('searchedQry', searchedQry); + + let filteredData = []; + + if (searchedQry) { + filteredData = globalBrandData.map(item => { + const itemCopy = { ...item }; + + const filteredBrands = (item.brandList || []).map(brand => { + const brandCopy = { ...brand }; + + brandCopy.skulist = (brand.skulist || []).filter(sku => { + const productName = sku.ProductName || ''; + return productName.toLowerCase().includes(searchedQry); + }); + + return brandCopy; + }).filter(brand => brand.skulist.length > 0); + + itemCopy.brandList = filteredBrands; + return itemCopy; + }).filter(item => item.brandList.length > 0); + } else { + filteredData = globalBrandData; + } + + setBrandData(filteredData); + setrerenderdata(prev => !prev); + setrerenderdata2(prev => !prev); + } + + async function focusToNext(cat, brand, sku, type = '1', outerId, middleId, index) { + + let activeKey = ''; + let arr = Object.keys(inputRefs.current); + + activeKey = 'input' + type + '_' + cat.SubCategoryId + '_' + brand.BrandId + '_' + sku.ProductId; + + let activeIndex = arr.indexOf(activeKey); + if (activeIndex >= 0 && activeIndex < arr.length - 1) { + let nextKey = arr[++activeIndex] + let nextRef = inputRefs.current[nextKey]; + nextRef.focus(); + } + else { + return + } + } + + function renderDatePicker() { + let today = new Date(); + console.log('today:', today); + let d1 = Object.keys(currentStock).length > 0 && currentStock.date != null && currentStock.date != '' ? new Date(currentStock.date) : new Date(); + return ( + { setStockDate(selectedDate) }} + /> + ); + } + + function _render_StockModal() { + let mfd = Object.keys(currentStock).length > 0 && currentStock.mfd != null && currentStock.mfd != '' ? currentStock.mfd : ''; + let stock = Object.keys(currentStock).length > 0 && currentStock.stock != null ? currentStock.stock : ''; + let lotno = Object.keys(currentStock).length > 0 && currentStock.lotno != null ? currentStock.lotno : ''; + + return ( + + + + {ST.ExpiryDate} + + {mfd} + + { setShowDatePicker(false); }}> + + + + {/* {showDatePicker==true && + renderDatePicker() + } */} + + + {ST.Stock} + + { setCS_Stock('stock', val, 'numeric') }} + /> + + + + {ST.LotNo} + + { setCS_Stock('lotno', val, 'text') }} + /> + + + + + { setCurrentStock({}); setShowStockModal(false); }}> + {ST.Cancel} + + { addMFDStock() }}> + {ST.Add} + + + + + ) + } + + + function toggleCollapse(cat = {}, catIndex) { + let allData = brandData; + let isCollapsed = cat.isCollapsed; + cat['isCollapsed'] = !isCollapsed; + allData[catIndex] = cat; + setBrandData(allData); + setGlobalBrandData(allData); + setrerenderdata(!rerenderdata); + } + + + function toggleCollapse2(cat = {}, catIndex, brand = {}, brand_index) { + let allData = brandData; + let isBrandCollapsed = brand.isBrandCollapsed; + let brandList = cat.brandList || []; + + brand['isBrandCollapsed'] = !isBrandCollapsed; + brandList[brand_index] = brand; + cat['brandList'] = brandList; + allData[catIndex] = cat; + setBrandData(allData); + setGlobalBrandData(allData); + setrerenderdata(!rerenderdata); + } + + function onChoiceSelect(item, skuItem, val, key, animatedChoice) { + console.log('onChoiceSelect', animatedChoice) + + var val1 = 0; + if (val == 1) { + val1 = 1; + } + + if (animatedChoice != null) { + Animated.timing(animatedChoice, { + toValue: val1, + duration: 400, + useNativeDriver: false, + }).start(); + } + onStockValChange(item, skuItem, val, key, ''); + } + + + async function OpenImgModal(imgPath, windsData) { + console.log("iamgepath--m--", imgPath) + setSelectedImg(imgPath); + setShowModal(true); + if (imgPath != "" && imgPath != null) { + setShowImageSaveOp(false); + } else { + setShowImageSaveOp(true); + } + setReCapImgModalObj(windsData); + } + + function _renderStocks() { + let isHdrImgIndex = KPIFields.findIndex(i => i.KPIFieldName == 'HeaderImageAllow') + let isHdrImgKPIObj = isHdrImgIndex >= 0 ? KPIFields[isHdrImgIndex] : {}; + let isHdrImgEnable = isHdrImgIndex >= 0 ? isHdrImgKPIObj['KPIFieldEnable'] : false; + let isHdrImgCount = isHdrImgIndex >= 0 ? isHdrImgKPIObj['KPIFieldDisplayName'] : ''; + + console.log(isHdrImgEnable, "isHdrImgEnableisHdrImgEnable") + + console.log("countheaderimg---", isHdrImgCount) + + let isChildImgIndex = KPIFields.findIndex(i => i.KPIFieldName == 'ChildImageAllow') + let isChildImgKPIObj = isChildImgIndex >= 0 ? KPIFields[isChildImgIndex] : {}; + let isChildImgEnable = isChildImgIndex >= 0 ? isChildImgKPIObj['KPIFieldEnable'] : false; + let isChildImgCount = isChildImgIndex >= 0 ? isChildImgKPIObj['KPIFieldDisplayName'] : ''; + + console.log("isChildImgEnable---", isChildImgEnable); + + let isListedSKUIndex = KPIFields.findIndex(i => i.KPIFieldName == 'ListedSKU') + let isListedSKUKPIObj = isListedSKUIndex >= 0 ? KPIFields[isListedSKUIndex] : {}; + let isListedSKUEnable = isListedSKUIndex >= 0 ? isListedSKUKPIObj['KPIFieldEnable'] : true; + + console.log(isListedSKUEnable, 'isListedSKUEnable') + + let isStockIndex = KPIFields.findIndex(i => i.KPIFieldName == 'Stock') + let isStockKPIObj = isStockIndex >= 0 ? KPIFields[isStockIndex] : {}; + let isStockEnable = isStockIndex >= 0 ? isStockKPIObj['KPIFieldEnable'] : true; + let isStockDis_Name = isStockIndex >= 0 ? isStockKPIObj['KPIFieldDisplayName'] : ''; + + + let isMRPIndex = KPIFields.findIndex(i => i.KPIFieldName == 'MRP') + let isMRPKPIObj = isMRPIndex >= 0 ? KPIFields[isMRPIndex] : {}; + let isMRPEnable = isMRPIndex >= 0 ? isMRPKPIObj['KPIFieldEnable'] : true; + let isMRPDis_Name = isMRPIndex >= 0 ? isMRPKPIObj['KPIFieldDisplayName'] : ''; + + let isSellingPriceIndex = KPIFields.findIndex(i => i.KPIFieldName == 'SellingPrice') + let isSellingPriceKPIObj = isSellingPriceIndex >= 0 ? KPIFields[isSellingPriceIndex] : {}; + let isSellingPriceEnable = isSellingPriceIndex >= 0 ? isSellingPriceKPIObj['KPIFieldEnable'] : true; + let isSellingPriceDis_Name = isSellingPriceIndex >= 0 ? isSellingPriceKPIObj['KPIFieldDisplayName'] : ''; + + console.log(isSellingPriceEnable, 'isSellingPriceEnableisSellingPriceEnable', isSellingPriceDis_Name) + + let isBRStockIndex = KPIFields.findIndex(i => i.KPIFieldName == 'BackRoomStock') + let isBRStockKPIObj = isBRStockIndex >= 0 ? KPIFields[isBRStockIndex] : {}; + let isBRStockEnable = isBRStockIndex >= 0 ? isBRStockKPIObj['KPIFieldEnable'] : true; + let isBRStockDis_Name = isBRStockIndex >= 0 ? isBRStockKPIObj['KPIFieldDisplayName'] : ''; + + let isDStockIndex = KPIFields.findIndex(i => i.KPIFieldName == 'DamageStock') + let isDStockKPIObj = isDStockIndex >= 0 ? KPIFields[isDStockIndex] : {}; + let isDStockEnable = isDStockIndex >= 0 ? isDStockKPIObj['KPIFieldEnable'] : false; + let isDStockDis_Name = isDStockIndex >= 0 ? isDStockKPIObj['KPIFieldDisplayName'] : ''; + + let isLStockIndex = KPIFields.findIndex(i => i.KPIFieldName == 'LostStock') + let isLStockKPIObj = isLStockIndex >= 0 ? KPIFields[isLStockIndex] : {}; + let isLStockEnable = isLStockIndex >= 0 ? isLStockKPIObj['KPIFieldEnable'] : false; + let isLStockDis_Name = isLStockIndex >= 0 ? isLStockKPIObj['KPIFieldDisplayName'] : ''; + + let isExStockIndex = KPIFields.findIndex(i => i.KPIFieldName == 'ExpiredStock') + let isExStockKPIObj = isExStockIndex >= 0 ? KPIFields[isExStockIndex] : {}; + let isExStockEnable = isExStockIndex >= 0 ? isExStockKPIObj['KPIFieldEnable'] : false; + let isExStockDis_Name = isExStockIndex >= 0 ? isExStockKPIObj['KPIFieldDisplayName'] : ''; + + let isMFDIndex = KPIFields.findIndex(i => i.KPIFieldName == 'MFD') + let isMFD_KPIObj = isMFDIndex >= 0 ? KPIFields[isMFDIndex] : {}; + let isMFDEnable = isMFDIndex >= 0 ? isMFD_KPIObj['KPIFieldEnable'] : false; + let isMFDDis_Name = isMFDIndex >= 0 ? isMFD_KPIObj['KPIFieldDisplayName'] : ''; + + let NrExpiry1Index = KPIFields.findIndex(i => i.KPIFieldName == 'NrExpiry1') + let NrExpiry1KPIObj = NrExpiry1Index >= 0 ? KPIFields[NrExpiry1Index] : {}; + let NrExpiry1Enable = NrExpiry1Index >= 0 ? NrExpiry1KPIObj['KPIFieldEnable'] : false; + let NrExpiry1_Dis_Name = NrExpiry1Index >= 0 ? NrExpiry1KPIObj['KPIFieldDisplayName'] : ''; + + let NrExpiry2Index = KPIFields.findIndex(i => i.KPIFieldName == 'NrExpiry2') + let NrExpiry2KPIObj = NrExpiry2Index >= 0 ? KPIFields[NrExpiry2Index] : {}; + let NrExpiry2Enable = NrExpiry2Index >= 0 ? NrExpiry2KPIObj['KPIFieldEnable'] : false; + let NrExpiry2_Dis_Name = NrExpiry2Index >= 0 ? NrExpiry2KPIObj['KPIFieldDisplayName'] : ''; + + let NrExpiry3Index = KPIFields.findIndex(i => i.KPIFieldName == 'NrExpiry3') + let NrExpiry3KPIObj = NrExpiry1Index >= 0 ? KPIFields[NrExpiry3Index] : {}; + let NrExpiry3Enable = NrExpiry1Index >= 0 ? NrExpiry3KPIObj['KPIFieldEnable'] : false; + let NrExpiry3_Dis_Name = NrExpiry1Index >= 0 ? NrExpiry3KPIObj['KPIFieldDisplayName'] : ''; + + let MSLIndex = KPIFields.findIndex(i => i.KPIFieldName == 'MSL'); + let MSLObj = MSLIndex >= 0 ? KPIFields[MSLIndex] : {}; + let isMSLAllow = MSLIndex >= 0 ? MSLObj['KPIFieldEnable'] : true; + + let NONMSL_Index = KPIFields.findIndex(i => i.KPIFieldName == 'ChildImageAllow'); + let NONMSL_Obj = NONMSL_Index >= 0 ? KPIFields[NONMSL_Index] : {}; + let isNONMSL_Allow = NONMSL_Index >= 0 ? NONMSL_Obj['KPIFieldEnable'] : true; + + + // yes no fields + let OutofStockI = KPIFields.findIndex(i => i.KPIFieldName == 'OutofStock') + let OutofStockObj = OutofStockI >= 0 ? KPIFields[OutofStockI] : {}; + let OutofStockEnable = OutofStockI >= 0 ? OutofStockObj['KPIFieldEnable'] : false; + let OutofStockDisName = OutofStockI >= 0 ? OutofStockObj['KPIFieldDisplayName'] : ''; + + let LessThanMBQI = KPIFields.findIndex(i => i.KPIFieldName == 'LessThanMBQ') + let LessThanMBQObj = LessThanMBQI >= 0 ? KPIFields[LessThanMBQI] : {}; + let LessThanMBQEnable = LessThanMBQI >= 0 ? LessThanMBQObj['KPIFieldEnable'] : false; + let LessThanMBQDisName = LessThanMBQI >= 0 ? LessThanMBQObj['KPIFieldDisplayName'] : ''; + + let ShowMBQLabelI = KPIFields.findIndex(i => i.KPIFieldName == 'ShowMBQ') + let ShowMBQLabelObj = ShowMBQLabelI >= 0 ? KPIFields[ShowMBQLabelI] : {}; + let ShowMBQLabel = ShowMBQLabelI >= 0 ? ShowMBQLabelObj['KPIFieldEnable'] : false; + let ShowMBQLabelDisName = ShowMBQLabelI >= 0 ? ShowMBQLabelObj['KPIFieldDisplayName'] : ''; + + + let DefaultStockToggleI = KPIFields.findIndex(i => i.KPIFieldName == 'DefaultStockToggle') + let DefaultStockToggleObj = DefaultStockToggleI >= 0 ? KPIFields[DefaultStockToggleI] : {}; + let DefaultStockToggle = DefaultStockToggleI >= 0 ? DefaultStockToggleObj['KPIFieldEnable'] : false; + let DefaultStockToggleValue = DefaultStockToggleI >= 0 ? DefaultStockToggleObj['KPIFieldDisplayName'] : "2"; + let deftogvalue = DefaultStockToggleValue == "3" ? "3" : (DefaultStockToggle == "1" ? "1" : "0"); + + let StockAvlStatus = KPIFields.find(i => i.KPIFieldName == 'StockAvailableStatus') + let StockAvlStatusObj = StockAvlStatus || {}; + let StockAvlStatusName = StockAvlStatusObj?.KPIFieldDisplayName || "Stock Available Status"; + + let StockAvlStatusHide = KPIFields.find(i => i.KPIFieldName == 'StockAvailableStatusHide') + let StockAvlStatusHideObj = StockAvlStatusHide || {}; + let StockAvlStatusHideName = StockAvlStatusHideObj?.KPIFieldDisplayName || "Stock Available Status Hide"; + let StockAvlStHideKPIType = StockAvlStatusHideObj?.KPIType || ""; + console.log("stockavlstatushide---", StockAvlStHideKPIType) + let KPITypeListHide = StockAvlStHideKPIType?.split(",").map((item) => { return ({ "StockAvlStatusHide": item }) }) + console.log("stockavlstatushide2---", KPITypeListHide) + let promoRunning = KPIFields.find(i => i.KPIFieldName == 'PromoRunning') + let promoRunningObj = promoRunning || {}; + let promoRunningName = promoRunningObj?.KPIFieldDisplayName || "Promo Running"; + // console.log("promo---",promoRunningName) + + let promoType = KPIFields.find(i => i.KPIFieldName == 'PromoType') + let promoTypeObj = promoType || {}; + let promoTypeName = promoTypeObj?.KPIFieldDisplayName || "Promo Type"; + + let SASKPIFieldEnable = StockAvlStatusObj?.KPIFieldEnable || false; + let StockAvlStKPIType = StockAvlStatusObj?.KPIType || ""; + let KPITypeList = StockAvlStKPIType?.split(",").map((item) => { return ({ "StockStatus": item }) }) + + let PromoRunnigType = promoRunningObj?.KPIType || ""; + console.log("promorunning---", PromoRunnigType) + let KPITypeListForRunning = PromoRunnigType?.split(",").map((item) => { return ({ "PromoRunning": item }) }) + + console.log(KPITypeListForRunning, 'KPITypeListForRunning') + + ///////////////// + + let PromoTypeStatusHide = KPIFields.find(i => i.KPIFieldName == 'PromoRunning') + let PromoTypeStatusHideObj = PromoTypeStatusHide || {}; + let PromoTypeStatusHideName = PromoTypeStatusHideObj?.KPIFieldDisplayName || "Promo Running"; + + let PromoTypeHideKPIType = PromoTypeStatusHideObj?.KPIType || ""; + console.log("PromoTypeHideKPIType---", PromoTypeHideKPIType) + + + let FromDate_Index = KPIFields.findIndex(i => i.KPIFieldName == 'FromDate'); + let FromDate_Obj = FromDate_Index >= 0 ? KPIFields[FromDate_Index] : {}; + let isFromDate = FromDate_Index >= 0 ? FromDate_Obj['KPIFieldEnable'] : false; + let FromDateName = FromDate_Index >= 0 ? FromDate_Obj['KPIFieldDisplayName'] : 'From Date'; + + let ToDate_Index = KPIFields.findIndex(i => i.KPIFieldName == 'ToDate'); + let ToDate_Obj = ToDate_Index >= 0 ? KPIFields[ToDate_Index] : {}; + let isToDate = ToDate_Index >= 0 ? ToDate_Obj['KPIFieldEnable'] : false; + let ToDateName = ToDate_Index >= 0 ? ToDate_Obj['KPIFieldDisplayName'] : 'To Date'; + + console.log("isToDate-----", isToDate, isFromDate, ToDate_Obj) + + return ( + + + { + const cat = item; + const outerId = index + + let WindowSplits = cat?.WindowSplits || [] + const cindex = catImages.findIndex(i => i.SubCategoryId == item.SubCategoryId); + const cimgName = cindex >= 0 ? (catImages[cindex] ? catImages[cindex].ImageName : '') : ''; + const cimgPath = cindex >= 0 ? (catImages[cindex] ? catImages[cindex].ImagePath : '') : ''; + + const showIMg = cimgPath != '' && cimgPath != null; + // let WindowSplits = cindex>=0?(catImages[cindex]?catImages[cindex].WindowSplits:[]):[]; + + let isCollapsed = cat.isCollapsed != null ? item.isCollapsed : false; + + let StockSta = cindex >= 0 ? (catImages[cindex] ? catImages[cindex].StockStatus : '') : ''; + let promoType = cindex >= 0 ? (catImages[cindex] ? catImages[cindex].promoType : '') : ''; + let promoRunning = cindex >= 0 ? (catImages[cindex] ? catImages[cindex].promoRunning : '') : ''; + + // get error field category id + let EF_cat = errorfield.EF_cat != null ? errorfield.EF_cat : {}; + let errorcatid = EF_cat.SubCategoryId || ''; + + return ( + + + + { toggleCollapse(cat, index) }}> + + {item.SubCategoryName} + + {isCollapsed == true && } + {isCollapsed == false && } + + {console.log("WindowSplits-------", WindowSplits)} + {WindowSplits?.length > 0 && ( + + + {currentMenu.MenuName + " Images"} + + `spliItem_${index.toString()}`} + style={{ flexWrap: "wrap", flexDirection: "row", justifyContent: "space-between", marginHorizontal: "25%" }} + renderItem={({ item, index }) => { + let splitItem = item; + let splitItemIndex = index; + // let Img = item?.Image + let Img = item?.ImagePath + let imgRequired = item?.imgRequired + let ImageLable = item?.ImageLable + let Image1Name = splitItem["Image1Name"] != null && splitItem["Image1Name"] != "" ? splitItem["Image1Name"] : ""; + let Image2Name = splitItem["Image2Name"] != null && splitItem["Image2Name"] != "" ? splitItem["Image2Name"] : ""; + let Image1 = splitItem["Image1"] != null && splitItem["Image1"] != "" ? splitItem["Image1"] : ""; + let Image2 = splitItem["Image2"] != null && splitItem["Image2"] != "" ? splitItem["Image2"] : ""; + let isImg1mad = splitItem["img1Required"] || false; + let isImg2mad = splitItem["img2Required"] || false; + + // highlight slit image box + let EF_splitItemIndex = errorfield.EF_splitItemIndex || ""; + let showSplitItemErrHere = EF_splitItemIndex == splitItemIndex; + + let EF_splitImage1 = errorfield.EF_splitImage1 || ""; + let EStyle_splitImage1 = showSplitItemErrHere && EF_splitImage1 == "splitImage1" ? customStyle.error_CatImage2 : {}; + + let EF_splitImage2 = errorfield.EF_splitImage2 || ""; + let EStyle_splitImage2 = showSplitItemErrHere && EF_splitImage2 == "splitImage2" ? customStyle.error_CatImage2 : {}; + + + return ( + + + + {!Img && imgRequired ? ( + { + openCamera({ catIndex: outerId, splitItemIndex: splitItemIndex, type: 5 }); + }} + > + + + ) : !Img ? ( + { + openCamera({ catIndex: outerId, splitItemIndex: splitItemIndex, type: 5 }); + }} + > + + + ) : Img && ( + { + // const kc = {catIndex:outerId,splitItemIndex:splitItemIndex,type:5,ImageLable} + // console.log("kkkkkk----",kc) + OpenImgModal(Img, { catIndex: outerId, splitItemIndex: splitItemIndex, type: 5, ImageLable }); + + }} + > + + + )} + {ImageLable} + + + + ); + }} + /> + + )} + + {!isCollapsed && + item.brandList != null && item.brandList.length > 0 && + middleItem.id} + ref={(ref) => { + if (ref) middleFlatListRefs.current[outerId] = ref; + }} + + renderItem={({ item: brand, index: brand_index }) => { + let isBrandCollapsed = brand.isBrandCollapsed != null ? brand.isBrandCollapsed : false; + const middleId = brand_index; + // get error field brand id + let EF_brand = errorfield.EF_brand != null ? errorfield.EF_brand : {}; + let error_bid = EF_brand.BrandId || ''; + + return ( + + { toggleCollapse2(cat, index, brand, brand_index) }}> + + {brand.BrandName} + + {isBrandCollapsed == true && } + {isBrandCollapsed == false && } + + + + {!isBrandCollapsed && + + { return skuIndex; }} + // keyExtractor={(innerItem) => innerItem.id} + ref={(ref) => { + if (ref) innerFlatListRefs.current[middleId] = ref; + }} + + renderItem={({ item, index }) => { + + const skus = item; + const sku_index = index; + console.log("sku---------", skus) + console.log("index---", sku_index) + + let imageSkuOption = { cat, skus, type: 6 } + + const cindex = SKUStockData.findIndex(i => i.ProductId == skus.ProductId); + const cimgName = cindex >= 0 ? (SKUStockData[cindex] ? SKUStockData[cindex].ImageName : '') : ''; + const childImgPath = cindex >= 0 ? (SKUStockData[cindex] ? SKUStockData[cindex].ImagePath : '') : ''; + + + const showIMgChild = childImgPath != '' && childImgPath != null; + + + let thisCatSkuData_i = SKUStockData.findIndex(i => i.SubCategoryId == cat.SubCategoryId && i.ProductId == skus.ProductId); + let thisCatSkuData = thisCatSkuData_i >= 0 ? (SKUStockData[thisCatSkuData_i] || {}) : {}; + + let stockStatus = skus.stockAnswer?.StockStatus ?? skus?.STOCK_AVL_STATUS ?? ''; + let stockPromoType = skus.stockAnswer?.StockPromoType ?? skus?.PROMO_TYPE ?? ''; + let stockPromoRunning = skus.stockAnswer?.PromoRunning ?? skus?.PROMO_RUNNING ?? ''; + + let WindowChildSplits = skus?.WindowChildSplits || []; + + console.log("showI----", thisCatSkuData) + + console.log(skus, "skusskusskus") + + + + + + // let Stock =skus?.STOCK??'' + + thisCatSkuData = { + ...thisCatSkuData, + stockStatus, + stockPromoType, + stockPromoRunning + // Stock + }; + + let StockStatus = thisCatSkuData.stockStatus != null ? thisCatSkuData.stockStatus : ''; + + console.log(StockStatus, "StockStatusStockStatus"); + + let StockPromoType = thisCatSkuData.stockPromoType != null ? thisCatSkuData.stockPromoType : ''; + + let StockPromoRunning = thisCatSkuData.stockPromoRunning != null ? thisCatSkuData.stockPromoRunning : ''; + + let isActualPromoIndex = reasons_list?.findIndex(i => i.StockPromoType == StockPromoType) + let isActualPromoObj = isActualPromoIndex >= 0 ? reasons_list[isActualPromoIndex] : {}; + let isActualPromoEnable = isActualPromoIndex >= 0 ? isActualPromoObj['ActualAllow'] : false; + // let isActualPromoEnable=isActualPromoIndex>=0?isActualPromoObj['ActualAllow']:true; + let isActualPromoDis_Name = isActualPromoIndex >= 0 ? isActualPromoObj['ActualDisplayName'] : ''; + + console.log(isActualPromoEnable, "isActualPromoEnable", isActualPromoDis_Name) + + let stock = thisCatSkuData.Stock != null ? thisCatSkuData.Stock : ''; + + let mrp = thisCatSkuData.MRP != null ? thisCatSkuData.MRP : ''; + let FromDate = thisCatSkuData.FromDate != null ? thisCatSkuData.FromDate : "" + let ToDate = thisCatSkuData.ToDate != null ? thisCatSkuData.ToDate : "" + let sellingprice = thisCatSkuData.SellingPrice != null ? thisCatSkuData.SellingPrice : ''; + let remark = thisCatSkuData.Remark != null ? thisCatSkuData.Remark : ''; + + let stockImg = thisCatSkuData.StockImg != null ? thisCatSkuData.StockImg : ''; + let stockImgPath = thisCatSkuData.StockImgPath != null ? thisCatSkuData.StockImgPath : ''; + console.log("stockImgPath---",) + + // let stock = thisCatSkuData.Stock != null ? thisCatSkuData.Stock : (skus?.STOCK ?? ''); + + let br_stock = thisCatSkuData.BackRoomStock != null ? thisCatSkuData.BackRoomStock : ''; + let Old_Stock = thisCatSkuData.Old_Stock != null ? thisCatSkuData.Old_Stock : ''; + let OldDamagedStock = thisCatSkuData.OldDamagedStock != null ? thisCatSkuData.OldDamagedStock : ''; + let OldLostStock = thisCatSkuData.OldLostStock != null ? thisCatSkuData.OldLostStock : ''; + let OldExStock = thisCatSkuData.OldExStock != null ? thisCatSkuData.OldExStock : ''; + let isSKUPresent = thisCatSkuData.isSKUPresent != null ? thisCatSkuData.isSKUPresent : 0; + let showAllSKU_Fields = thisCatSkuData.showAllSKU_Fields != null ? thisCatSkuData.showAllSKU_Fields : false; + let OutOfStock = thisCatSkuData.OutOfStock != null ? thisCatSkuData.OutOfStock : deftogvalue; + let LessThanMBQ = thisCatSkuData.LessThanMBQ != null ? thisCatSkuData.LessThanMBQ : deftogvalue; + + let ex_stock = thisCatSkuData.ExpiryStock != null ? thisCatSkuData.ExpiryStock : ''; + let damage_stock = thisCatSkuData.DamagedStock != null ? thisCatSkuData.DamagedStock : ''; + let lost_stock = thisCatSkuData.LostStock != null ? thisCatSkuData.LostStock : ''; + let mfdStocks = thisCatSkuData.mfdStocks || []; + + let NearExpiry_stock1 = thisCatSkuData.NearExpiry1 != null ? thisCatSkuData.NearExpiry1 : ''; + let NearExpiry_stock2 = thisCatSkuData.NearExpiry2 != null ? thisCatSkuData.NearExpiry2 : ''; + let NearExpiry_stock3 = thisCatSkuData.NearExpiry3 != null ? thisCatSkuData.NearExpiry3 : ''; + + let isMandatory = ((isMSLAllow == 1 || isMSLAllow == 'true') && (skus.MSL == 1 || skus.MSL == 'true')) || ((isNONMSL_Allow == 1 || isNONMSL_Allow == 'true') && (skus.MSL != 1 && skus.MSL != 'true')) + let IsCompetitor = skus.IsCompetitor == '1' || skus.IsCompetitor == 1 ? true : false; + + + let xpos = OutOfStock == "3" ? 0 : (OutOfStock == 1 ? -75 : 0); + if (skus.animatedChoice != null) { + xpos = skus.animatedChoice.interpolate({ + inputRange: [0, 1], + outputRange: [0, -75], + }); + } + + let xpos1 = LessThanMBQ == "3" ? 0 : (LessThanMBQ == 1 ? -75 : 0); + if (skus.animatedChoice2 != null) { + xpos1 = skus.animatedChoice2.interpolate({ + inputRange: [0, 1], + outputRange: [0, -75], + }); + } + + // change color for competitor + let card_bg = (IsCompetitor ? { backgroundColor: PageTheme.$card_colorYellowLight } : (isMandatory ? { backgroundColor: PageTheme.$fifth_color } : {})); + let card_border = (IsCompetitor ? { borderColor: PageTheme.$card_colorYellowDark } : (isMandatory ? { borderColor: PageTheme.$primary_color } : {})); + + // get error field product id + let EF_product = errorfield.EF_product != null ? errorfield.EF_product : {}; + let error_pid = EF_product.ProductId || ''; + let EF_InputKey = errorfield.EF_InputKey; + let show_errorhere = errorcatid == cat.SubCategoryId && error_bid == brand.BrandId && error_pid == skus.ProductId; + + let errorStyle_ST = (error && show_errorhere && EF_InputKey == 'input1_' ? customStyle.stk_inptSTyle_error : {}); + let errorStyle_BS = (error && show_errorhere && EF_InputKey == 'input2_' ? customStyle.stk_inptSTyle_error : {}); + let errorStyle_DS = (error && show_errorhere && EF_InputKey == 'input3_' ? customStyle.stk_inptSTyle_error : {}); + let errorStyle_LS = (error && show_errorhere && EF_InputKey == 'input4_' ? customStyle.stk_inptSTyle_error : {}); + let errorStyle_EXS = (error && show_errorhere && EF_InputKey == 'input5_' ? customStyle.stk_inptSTyle_error : {}); + let errorStyle_NEX1 = (error && show_errorhere && EF_InputKey == 'input6_' ? customStyle.stk_inptSTyle_error : {}); + let errorStyle_NEX2 = (error && show_errorhere && EF_InputKey == 'input7_' ? customStyle.stk_inptSTyle_error : {}); + let errorStyle_NEX3 = (error && show_errorhere && EF_InputKey == 'input8_' ? customStyle.stk_inptSTyle_error : {}); + + const defaultPromoType = reasons_list && reasons_list.length > 0 ? reasons_list[0].StockPromoType : ''; + + console.log(defaultPromoType, "defaultPromoType") + + return ( + + {isListedSKUEnable == true && + + + + + + {skus.ProductName} + {ShowMBQLabel == true && {'MBQ :' + skus.MBQ}} + + + + + } + + {(isListedSKUEnable == true) && + + {OutofStockEnable == true && + {OutofStockDisName} + + + + { onChoiceSelect(cat, skus, 1, 'OutOfStock', skus.animatedChoice) }}> + {ST.Yes} + + { onChoiceSelect(cat, skus, 0, 'OutOfStock', skus.animatedChoice) }}> + {ST.No} + + + + } + + {LessThanMBQEnable == true && + {LessThanMBQDisName} + + + + + { onChoiceSelect(cat, skus, 1, 'LessThanMBQ', skus.animatedChoice2) }}> + {ST.Yes} + + { onChoiceSelect(cat, skus, 0, 'LessThanMBQ', skus.animatedChoice2) }}> + {ST.No} + + + + } + + {(isBRStockEnable == true) && + + + {isBRStockDis_Name} + { inputRefs.current['input2_' + cat.SubCategoryId + '_' + brand.BrandId + '_' + skus.ProductId] = reff; }} + style={[customStyle.openStk_prd_inputStyle, customStyle.openStk_prd_flex_inputStyle, customStyle.stk_inptSTyle, errorStyle_BS, { height: 40 }]} + placeholder="" + autoComplete='off' + maxLength={6} + placeholderTextColor={PageTheme.$placeholder_color} + value={(br_stock + '')} + keyboardType='number-pad' + returnKeyType={(Platform.OS === 'ios') ? 'done' : 'next'} + blurOnSubmit={false} + onChangeText={(val) => { onStockValChange(cat, skus, val, 'BackRoomStock', 'numeric') }} + // onEndEditing={(e)=>{ checkStockVal(cat,skus,'Stock','Old_Stock',Old_Stock)}} + onSubmitEditing={() => { focusToNext(cat, brand, skus, '2', outerId, middleId, index) }} + /> + + + } + {(isDStockEnable == true) && + + + {isDStockDis_Name} + { inputRefs.current['input3_' + cat.SubCategoryId + '_' + brand.BrandId + '_' + skus.ProductId] = reff; }} + style={[customStyle.openStk_prd_inputStyle, customStyle.openStk_prd_flex_inputStyle, customStyle.stk_inptSTyle, errorStyle_DS, { height: 40 }]} + placeholder="" + autoComplete='off' + placeholderTextColor={PageTheme.$placeholder_color} + value={(damage_stock + '')} + maxLength={6} + keyboardType='number-pad' + returnKeyType={(Platform.OS === 'ios') ? 'done' : 'next'} + blurOnSubmit={false} + onChangeText={(val) => { onStockValChange(cat, skus, val, 'DamagedStock', 'numeric') }} + // onEndEditing={(e)=>{ checkStockVal(cat,skus,'DamagedStock','OldDamagedStock',OldDamagedStock)}} + onSubmitEditing={() => { focusToNext(cat, brand, skus, '3', outerId, middleId, index) }} + /> + + + } + {(isLStockEnable == true) && + + + {isLStockDis_Name} + { inputRefs.current['input4_' + cat.SubCategoryId + '_' + brand.BrandId + '_' + skus.ProductId] = reff; }} + style={[customStyle.openStk_prd_inputStyle, customStyle.openStk_prd_flex_inputStyle, customStyle.stk_inptSTyle, errorStyle_LS, { height: 40 }]} + placeholder="" + autoComplete='off' + placeholderTextColor={PageTheme.$placeholder_color} + value={(lost_stock + '')} + maxLength={6} + keyboardType='number-pad' + returnKeyType={(Platform.OS === 'ios') ? 'done' : 'next'} + blurOnSubmit={false} + onChangeText={(val) => { onStockValChange(cat, skus, val, 'LostStock', 'numeric') }} + // onEndEditing={(e)=>{ checkStockVal(cat,skus,'LostStock','OldLostStock',OldLostStock)}} + onSubmitEditing={() => { focusToNext(cat, brand, skus, '4', outerId, middleId, index) }} + /> + + + } + {(isExStockEnable == true) && + // && !isMFDEnable + + + {isExStockDis_Name} + { inputRefs.current['input5_' + cat.SubCategoryId + '_' + brand.BrandId + '_' + skus.ProductId] = reff; }} + style={[customStyle.openStk_prd_inputStyle, customStyle.openStk_prd_flex_inputStyle, customStyle.stk_inptSTyle, errorStyle_EXS, { height: 40 }]} + placeholder="" + autoComplete='off' + placeholderTextColor={PageTheme.$placeholder_color} + value={(ex_stock + '')} + maxLength={6} + keyboardType='number-pad' + returnKeyType={(Platform.OS === 'ios') ? 'done' : 'next'} + blurOnSubmit={false} + onChangeText={(val) => { onStockValChange(cat, skus, val, 'ExpiryStock', 'numeric') }} + // onEndEditing={(e)=>{ checkStockVal(cat,skus,'ExpiryStock','OldExStock',OldExStock)}} + onSubmitEditing={() => { focusToNext(cat, brand, skus, '5', outerId, middleId, index) }} + /> + + + } + + {(NrExpiry1Enable == true) && + + + {NrExpiry1_Dis_Name} + { inputRefs.current['input6_' + cat.SubCategoryId + '_' + brand.BrandId + '_' + skus.ProductId] = reff; }} + style={[customStyle.openStk_prd_inputStyle, customStyle.openStk_prd_flex_inputStyle, customStyle.stk_inptSTyle, errorStyle_NEX1, { height: 40 }]} + placeholder="" + autoComplete='off' + placeholderTextColor={PageTheme.$placeholder_color} + value={(NearExpiry_stock1 + '')} + maxLength={6} + keyboardType='number-pad' + returnKeyType={(Platform.OS === 'ios') ? 'done' : 'next'} + blurOnSubmit={false} + onChangeText={(val) => { onStockValChange(cat, skus, val, 'NearExpiry1', 'numeric') }} + onSubmitEditing={() => { focusToNext(cat, brand, skus, '6', outerId, middleId, index) }} + /> + + + } + {(NrExpiry2Enable == true) && + + + {NrExpiry2_Dis_Name} + { inputRefs.current['input7_' + cat.SubCategoryId + '_' + brand.BrandId + '_' + skus.ProductId] = reff; }} + style={[customStyle.openStk_prd_inputStyle, customStyle.openStk_prd_flex_inputStyle, customStyle.stk_inptSTyle, errorStyle_NEX2, { height: 40 }]} + placeholder="" + autoComplete='off' + placeholderTextColor={PageTheme.$placeholder_color} + value={(NearExpiry_stock2 + '')} + maxLength={6} + keyboardType='number-pad' + returnKeyType={(Platform.OS === 'ios') ? 'done' : 'next'} + blurOnSubmit={false} + onChangeText={(val) => { onStockValChange(cat, skus, val, 'NearExpiry2', 'numeric') }} + onSubmitEditing={() => { focusToNext(cat, brand, skus, '7', outerId, middleId, index) }} + /> + + + } + {(NrExpiry3Enable == true) && + + + {NrExpiry3_Dis_Name} + { inputRefs.current['input8_' + cat.SubCategoryId + '_' + brand.BrandId + '_' + skus.ProductId] = reff; }} + style={[customStyle.openStk_prd_inputStyle, customStyle.openStk_prd_flex_inputStyle, customStyle.stk_inptSTyle, errorStyle_NEX3, { height: 40 }]} + placeholder="" + autoComplete='off' + placeholderTextColor={PageTheme.$placeholder_color} + value={(NearExpiry_stock3 + '')} + maxLength={6} + keyboardType='number-pad' + returnKeyType={(Platform.OS === 'ios') ? 'done' : 'next'} + blurOnSubmit={false} + onChangeText={(val) => { onStockValChange(cat, skus, val, 'NearExpiry3', 'numeric') }} + onSubmitEditing={() => { focusToNext(cat, brand, skus, '8', outerId, middleId, index) }} + /> + + + } + {(isMFDEnable == true) && + + {isMFDDis_Name} + { openAddStkModal(cat, skus) }}> + {ST.Add} + + + + {ST.Date} + + + {ST.Stock} + + + {ST.LotNo} + + + {ST.Actions} + + + + + { + mfdStocks.map((mfd_Item, mfd_index) => { + let mfd = mfd_Item.mfd || ''; + let stock = mfd_Item.stock || ''; + let lotno = mfd_Item.lotno || ''; + + return ( + + + {mfd} + + + {stock} + + + {lotno} + + + { showRemoveConfirm(cat, skus, mfd_Item, mfd_index) }}> + + + + + ) + }) + } + + + } + + + } + + + {StockAvlStatusName} + {} + + + + {(isStockEnable == true) && StockStatus != 'No' && isStockStatusCompare(StockStatus, StockAvlStHideKPIType) && + + + {isStockDis_Name} + { inputRefs.current['input1_' + cat.SubCategoryId + '_' + brand.BrandId + '_' + skus.ProductId] = reff; }} + style={[customStyle.openStk_prd_inputStyle, customStyle.openStk_prd_flex_inputStyle, customStyle.stk_inptSTyle, errorStyle_ST, { height: 40 }]} + placeholder="" + autoComplete='off' + maxLength={6} + placeholderTextColor={PageTheme.$placeholder_color} + value={(stock + '' || '')} + keyboardType='number-pad' + returnKeyType={(Platform.OS === 'ios') ? 'done' : 'next'} + blurOnSubmit={false} + onChangeText={(val) => { onStockValChange(cat, skus, val, 'Stock', 'numeric') }} + // onEndEditing={(e)=>{ checkStockVal(cat,skus,'Stock','Old_Stock',Old_Stock)}} + onSubmitEditing={() => { focusToNext(cat, brand, skus, '1', outerId, middleId, index) }} + /> + + + } + + + + + {(isMRPEnable == true && StockStatus != 'No' && isStockStatusCompare(StockStatus, StockAvlStHideKPIType)) && + + + {isMRPDis_Name} + { inputRefs.current['input1_' + cat.SubCategoryId + '_' + brand.BrandId + '_' + skus.ProductId] = reff; }} + style={[customStyle.openStk_prd_inputStyle, customStyle.openStk_prd_flex_inputStyle, customStyle.stk_inptSTyle, errorStyle_ST, { height: 40 }]} + placeholder="" + autoComplete='off' + maxLength={6} + placeholderTextColor={PageTheme.$placeholder_color} + value={(mrp + '' || '')} + keyboardType='number-pad' + returnKeyType={(Platform.OS === 'ios') ? 'done' : 'next'} + blurOnSubmit={false} + onChangeText={(val) => { onStockValChange(cat, skus, val, 'MRP', 'numeric') }} + onSubmitEditing={() => { focusToNext(cat, brand, skus, '9', outerId, middleId, index) }} + /> + + + } + + + {StockStatus != 'No' && isStockStatusCompare(StockStatus, StockAvlStHideKPIType) && + ( + + {promoRunningName} + {} + + )} + + {StockStatus != 'No' && StockPromoRunning === 'Yes' && isStockStatusCompare(StockStatus, StockAvlStHideKPIType) && ( + + {promoTypeName} + + + ) + } + + {isFromDate && StockStatus != 'No' && StockPromoRunning === 'Yes' && isStockStatusCompare(StockStatus, StockAvlStHideKPIType) && + + {FromDateName} + + {FromDate} + { + setFromDateObj({ + curDate: FromDate, ToDate, setTimeStamp: setFromDate2, setDate: setFromDate, ColumnName: 'FromDate', setShowDate: setShowDatePicker1, + cat, skus + }) + setShowDatePicker(true); + }} > + + + + } + + {isToDate && StockStatus != 'No' && StockPromoRunning === 'Yes' && isStockStatusCompare(StockStatus, StockAvlStHideKPIType) && + + {ToDateName} + + {ToDate} + { + if (FromDate == "") { + notify("Please select From Date first" + skus.ProductName, 'LONG'); + } else { + setFromDateObj({ + curDate: ToDate, setTimeStamp: setFromDate2, setDate: setFromDate, ColumnName: 'ToDate', setShowDate: setShowDatePicker1, FromDate, + cat, skus + }) + setShowDatePicker(true); + } + }} + // disabled={FromDate==""} + > + + + + } + + {StockStatus != 'No' && StockPromoRunning === 'Yes' && isSellingPriceEnable === true && isStockStatusCompare(StockStatus, StockAvlStHideKPIType) && ( + + + {isSellingPriceDis_Name} + { + inputRefs.current['input1_' + cat.SubCategoryId + '_' + brand.BrandId + '_' + skus.ProductId] = reff; + }} + style={[customStyle.openStk_prd_inputStyle, customStyle.openStk_prd_flex_inputStyle, customStyle.stk_inptSTyle, errorStyle_ST, { height: 40 }]} + placeholder="" + autoComplete='off' + maxLength={6} + placeholderTextColor={PageTheme.$placeholder_color} + keyboardType='number-pad' + value={(sellingprice + '' || '')} + returnKeyType={(Platform.OS === 'ios') ? 'done' : 'next'} + blurOnSubmit={false} + onChangeText={(val) => { onStockValChange(cat, skus, val, 'SellingPrice', 'numeric') }} + onSubmitEditing={() => { focusToNext(cat, brand, skus, '10', outerId, middleId, index) }} + /> + + + ) + } + { } + + + {(StockPromoRunning === 'Yes' && (isActualPromoEnable == "true" || isActualPromoEnable == true) && StockStatus != 'No' && isStockStatusCompare(StockStatus, StockAvlStHideKPIType)) && + + + {isActualPromoDis_Name} + { inputRefs.current['input1_' + cat.SubCategoryId + '_' + brand.BrandId + '_' + skus.ProductId] = reff; }} + style={[customStyle.openStk_prd_inputStyle, customStyle.openStk_prd_flex_inputStyle, customStyle.stk_inptSTyle, errorStyle_ST, { height: 40 }]} + placeholder="" + autoComplete='off' + maxLength={50} + placeholderTextColor={PageTheme.$placeholder_color} + value={(remark + '' || '')} + returnKeyType={(Platform.OS === 'ios') ? 'done' : 'next'} + blurOnSubmit={false} + onChangeText={(val) => { onStockValChange(cat, skus, val, 'Remark', 'text') }} + onSubmitEditing={() => { focusToNext(cat, brand, skus, '11', outerId, middleId, index) }} + /> + + + } + + {WindowChildSplits?.length > 0 && StockStatus != 'No' && isChildImgEnable && isStockStatusCompare(StockStatus, StockAvlStHideKPIType) && StockPromoRunning == "Yes" && ( + + + {currentMenu.MenuName + " Images"} + + `spliItem_${index.toString()}`} + style={{ flexWrap: "wrap", flexDirection: "row", justifyContent: "space-between", marginHorizontal: "25%" }} + renderItem={({ item, index }) => { + console.log("item------", item) + let splitItem = item; + let splitItemIndex = index; + let Img = item?.ImagePath + let imgRequired = item?.imgRequired + let ImageLable = item?.ImageLable + let Image1Name = splitItem["Image1Name"] != null && splitItem["Image1Name"] != "" ? splitItem["Image1Name"] : ""; + let Image2Name = splitItem["Image2Name"] != null && splitItem["Image2Name"] != "" ? splitItem["Image2Name"] : ""; + let Image1 = splitItem["Image1"] != null && splitItem["Image1"] != "" ? splitItem["Image1"] : ""; + let Image2 = splitItem["Image2"] != null && splitItem["Image2"] != "" ? splitItem["Image2"] : ""; + let isImg1mad = splitItem["img1Required"] || false; + let isImg2mad = splitItem["img2Required"] || false; + + // highlight slit image box + let EF_splitItemIndex = errorfield.EF_splitItemIndex || ""; + let showSplitItemErrHere = EF_splitItemIndex == splitItemIndex; + + let EF_splitImage1 = errorfield.EF_splitImage1 || ""; + let EStyle_splitImage1 = showSplitItemErrHere && EF_splitImage1 == "splitImage1" ? customStyle.error_CatImage2 : {}; + + let EF_splitImage2 = errorfield.EF_splitImage2 || ""; + let EStyle_splitImage2 = showSplitItemErrHere && EF_splitImage2 == "splitImage2" ? customStyle.error_CatImage2 : {}; + + + return ( + + + + {!Boolean(Img) && imgRequired ? ( + { + openCamera({ catIndex: outerId, subCatIndex: brand_index, skuIndex: sku_index, splitItemIndex: splitItemIndex, type: 4 }); + }} + > + + + ) : !Boolean(Img) ? ( + { + openCamera({ catIndex: outerId, subCatIndex: brand_index, skuIndex: sku_index, splitItemIndex: splitItemIndex, type: 4 }); + }} + > + + + ) : Boolean(Img) && ( + { + const ch = { catIndex: outerId, subCatIndex: brand_index, skuIndex: sku_index, splitItemIndex: splitItemIndex, type: 4, ImageLable } + console.log("childddd---", Img) + OpenImgModal(Img, { catIndex: outerId, subCatIndex: brand_index, skuIndex: sku_index, splitItemIndex: splitItemIndex, type: 4, ImageLable }); + + }} + > + + + )} + {ImageLable} + + + + ); + }} + /> + + )} + + {(!isCollapsed && isChildImgEnable && StockPromoRunning == "Yes") && + + } + + ) + }} /> + } + + + ) + }} + /> + } + + + ); + }} + /> + + ) + } + + const handleConfirm = (date) => { + setShowDatePicker(false) + console.log("from_date", date) + console.log("FromDateObj", JSON.stringify(FromDateObj)) + let dateVal = JSON.stringify(date) + let { cat, skus, ColumnName } = FromDateObj + onStockValChange(cat, skus, dateVal, ColumnName, "date") + }; + + + const hideDatePicker = () => { + setShowDatePicker(false); + }; + + + return ( + + {processing && } + + + + {_OpenCaptureImage_Modal()} + + setShowDatePicker(false)} + /> + + {ConfirmSaveAlert(props, showRemoveConfirm_M, () => { setShowRemoveConfirm_M(false) }, removeMFDStock, ST.Doyoureallywanttoremovethisstock)} + {ConfirmSaveAlert(props, showAlert, onSaveCancel, saveData)} + {rerendermodal == rerendermodal && _render_StockModal()} + { setShowCamera(false); getImage(imgData) }} showCamera={showCamera} onHideCamera={() => { setShowCamera(false); }} /> + + + + + { setSearchedItem(val); FilterStores(val) }} + /> + { FilterStores(searchedItem) }}> + + + + {Object.keys(storeData).length > 0 && + _renderStocks() + } + + + { submitOpeningStock() }} /> + + + + + ); +} + + + +export default connect(mapStateToProps, mapDispatchToProps)(StockPromo); \ No newline at end of file diff --git a/PerformicsSrc/src/screens/StockQR.js b/PerformicsSrc/src/screens/StockQR.js new file mode 100644 index 0000000..a0223e3 --- /dev/null +++ b/PerformicsSrc/src/screens/StockQR.js @@ -0,0 +1,803 @@ +import React,{useState,useEffect,useRef} from 'react'; +import Container from '../components/container'; +import { useRoute } from '@react-navigation/native'; +import { globalStyles,customStyles,GetPageTheme } from "../styles/Global"; +import {StatusBar,Image,TextInput,View,Text,ScrollView,TouchableOpacity,Platform,PermissionsAndroid,FlatList, Alert, Animated} from 'react-native'; +import { ReactReduxContext,connect,useSelector, useDispatch } from 'react-redux'; +import { mapStateToProps,mapDispatchToProps } from '../reducers/contextProvider'; +import SQLite from 'react-native-sqlite-2'; +import {notify} from '../components/notify'; +import moment from 'moment'; +import {getDownloadJson,marktext1,marktext2, validateNumber} from '../controller/functions'; +import {get_item,set_item,clear_item} from '../components/localStorage'; +import {version,sloganline,appname,testurl,db, colors_Arr, visiCoolerImgPath,ImageFolderPath} from '../constants/constants'; +import CustomHeader from '../components/customHeader'; +import {Card, Menu, Switch} from 'react-native-paper'; +import {AntDesign, Entypo, FontAwesome, Ionicons, MaterialCommunityIcons} from '../components/icons'; + +import CustomLoader from '../components/CustomLoader'; +import LinearGradient from 'react-native-linear-gradient'; +import { AppTables } from '../constants/tableConstants'; + +import * as RNFS from 'react-native-fs'; +import GradientButton from '../components/gradientButton'; + +import { ConfirmSaveAlert } from '../components/alert'; + +import CustomCamera from '../components/Camera'; + +function StockQR(props) { + const route = useRoute(); + const ST=props.StaticText || {}; + // get all theme styles acc to current theme set + const PageTheme=GetPageTheme(props.DarkMode,route.name); + const customStyle=customStyles(props.DarkMode,route.name); + const animatedChoice=useRef(new Animated.Value(0)).current; + + const [processing, setProcessing] = useState(true); + const [loaderTitle, setLoaderTitle] = useState(); + const [isAdhocScreen, setIsAdhocScreen] = useState(false); + const [storeData, setStoreData] = useState({}); + const [StoreCameraAllow, setStoreCameraAllow] = useState(true); + + const [currentMenu, setCurrentMenu] = useState({}); + const [brandData, setBrandData] = useState([]); + const [rerenderdata, setrerenderdata]= useState(0); + const [rerenderdata2, setrerenderdata2]= useState(0); + + const [AddVisibility, setAddVisibility] = useState([]); + const [PreviousVisicooler, setPreviousVisicooler] = useState([]); + const [AddVisFormData, setAddVisFormData] = useState({}); + const [isAddVisPresent, setIsAddVisPresent] = useState(0); + const [showAlert, setShowAlert] = useState(false); + const [Categories, setCategories] = useState([]); + const [SubCategories, setSubCategories] = useState([]); + const [Brands, setBrands] = useState([]); + const [DisplayList, setDisplayList] = useState([]); + const [hasUnsavedChanges,setHasUnsavedChanges] = useState(false); + const [showCamera, setShowCamera] = useState(false); + const [clickImageType,setClickImageType]= useState('1'); + const [toRemoveId,setToRemoveId]= useState(''); + const [toRemoveItem,setToRemoveItem]= useState({}); + const [showRemoveConfirm_M,setshowRemoveConfirm_M]= useState(false); + const [showRAllC_M,setShowRAllC_M]= useState(false); + + const [QREnable, setQREnable] = useState(false); + const [QRqtnData, setQRqtnData] = useState({}); + const [showQRCamera, setShowQRCamera] = useState(false); + + const d1=new Date(); + const d2=moment(d1).format('MM/DD/YYYY'); + + + useEffect(() => { + setLoaderTitle(ST.Loading+'...') + let params=props.route.params? props.route.params:{}; + let storeData1=params.storeData || {}; + let menu1=params.menu || {}; + let cameraAllow=storeData1.CameraAllow=='true' || storeData1.CameraAllow==1?true:false; + setStoreCameraAllow(cameraAllow); + + let isAdhoc=params.isAdhoc || false; + setIsAdhocScreen(isAdhoc); + setStoreData(storeData1); + setCurrentMenu(menu1); + + getData(storeData1); + + props.navigation.addListener('beforeRemove', onBeforeRemove); + + return function cleanup() { + props.navigation.removeListener('beforeRemove', onBeforeRemove); + }; + }, []); + + useEffect(() => { + props.navigation.removeListener('beforeRemove', onBeforeRemove); + props.navigation.addListener('beforeRemove', onBeforeRemove); + }, [hasUnsavedChanges]); + + useEffect(() => { + props.navigation.removeListener('beforeRemove', onBeforeRemove); + props.navigation.addListener('beforeRemove', onBeforeRemove); + }, [showCamera]); + + function onBeforeRemove(e){ + if(showCamera==true){ + e.preventDefault(); + setShowCamera(false); + } + else{ + if (hasUnsavedChanges==true) { + e.preventDefault(); // Prevent default behavior of leaving the screen + onRemoveScreen(e); + } + else{ + return; + } + } + } + function onRemoveScreen(e){ + Alert.alert( + "", + ST.Doyoureallywanttoexitthescreen, + [ + { + text: ST.Cancel, + onPress: () => {}, + style: "cancel" + }, + { text: ST.OK, onPress: () => {setHasUnsavedChanges(false);props.navigation.dispatch(e.data.action);} } + ] + ); + } + + async function getData(storeData1){ + try { + let {StoreId,ChainId,StateId,StoreTypeId}=storeData1; + + await db.transaction(async function (txn) { + + + let q3=`Select * from ${AppTables.DB_VISICOOLER} WHERE DISTRIBUTOR_ID='${StoreId}' and VISIT_DATE='${d2}' `; + await txn.executeSql(q3,[],async function (txn2, txnres2) { + if(txnres2.rows.length>0){ + let arr=[]; + for(var i=0;i0){ + let arr=[]; + for(var i=0;i{ + if(res.success){ + let uri=res.uri; + marktext2(mark_text2,uri,imgWidth,imgHeight) + .then((res)=>{ + if(res.success){ + let picture_clickedd=new Date(); + let picture_clicked_date=moment(picture_clickedd).format('YYYYMMDD'); + let picture_clicked_time=moment(picture_clickedd).format('HHmmss'); + let filename=storeData.StoreId+'_'+(props.UserId || '')+'_DbVisicoolerImg-'+picture_clicked_date+'_'+picture_clicked_time+'.jpg'; + + + let addvisdata=AddVisFormData; + let image_key='Image1'; + let image_path_key='Image1Path'; + addvisdata[image_key]=filename; + + // renamefile + // let imagePath=`${visiCoolerImgPath}/${filename}`; + let imagePath=`${ImageFolderPath+currentMenu.ScreenName}/${filename}`; + console.log("imgpath---",imagePath,ImageFolderPath,currentMenu.ScreenName); + RNFS.copyFile(res.uri, imagePath) + .then(resn => { + let uri='file://'+imagePath; + console.log('image marker',uri); + addvisdata[image_path_key]=uri; + + setAddVisFormData(addvisdata); + setHasUnsavedChanges(true); + setrerenderdata2(!rerenderdata2); + }) + .catch(err => { + console.log('ERROR: image file write failed!!!'); + console.log(err.message, err.code); + }); + + } + else{ + if(res.imagenotfound){ + notify(ST.Pleasecaptureaimage); + } + else{ + notify(res.error); + } + } + }); + } + else{ + if(res.imagenotfound){ + notify(ST.Pleasecaptureaimage); + } + else{ + notify(res.error); + } + } + }); + } + } + + async function openCamera(type='1'){ + console.log('openCamera'); + setClickImageType(type); + setShowCamera(true); + // props.navigation.navigate('CameraScreen',{'getImage':getImage,'cameraType':'back'}) + } + + async function onSubmitData(){ + let isvalid=await validate(); + if(isvalid){ + setShowAlert(true); + } + } + + async function saveData(){ + setHasUnsavedChanges(false); + setShowAlert(false); + setLoaderTitle(ST.SavingData+'...'); + setProcessing(true); + try { + let {StoreId,ChainId,StateId,StoreTypeId}=storeData; + await db.transaction(async function (txn) { + + let q=`DELETE FROM ${AppTables.DB_VISICOOLER} WHERE DISTRIBUTOR_ID='${StoreId}' and VISIT_DATE='${d2}' `; + + // remove old data + await txn.executeSql(q,[],async function (txn2, txnres) { + console.log('av data deleted'); + },function (txn2, txnerr) { console.log(txnerr); },); + + var values=''; + // if(isAddVisPresent==1 && AddVisibility.length>0){ + for(var i=0;i0){ + let arr=[]; + for(var i=0;i0){ + setShowRAllC_M(true); + return ; + } + var val1=val==1?1:0; + if(animatedChoice!=null){ + Animated.timing(animatedChoice, { + toValue: val1, + duration:400, + useNativeDriver:false, + }).start(); + } + setIsAddVisPresent(val); + setHasUnsavedChanges(true); + if(val==0){ + setAddVisibility([]); + setAddVisFormData({}); + } + } + + function onConfirmRemoveAll(){ + // Remove all data + if(animatedChoice!=null){ + Animated.timing(animatedChoice, { + toValue: 0, + duration:400, + useNativeDriver:false, + }).start(); + } + setIsAddVisPresent(0); + setHasUnsavedChanges(true); + setAddVisibility([]); + setAddVisFormData({}); + setShowRAllC_M(false); + } + + function onSaveCancel(){ + setShowAlert(false); + } + + async function onQRScanned(imgdata){ + // let qtn=QRqtnData.qtn || {}; + // let window=QRqtnData.window || {}; + let QR_withValidChars=imgdata!=null && imgdata!=''?imgdata.replace(/["']/g,''):''; + let value=QR_withValidChars;//imgdata && imgdata[0] && imgdata[0].displayValue ? imgdata[0].displayValue :"" + // setTextValue(value,qtn,window) + console.log("value------",value) + onFormDataChange(value,'QRCode','qrtext') + } + + async function Add_AddVis(){ + let isValid=await validateForm(); + console.log('isValid add:',isValid); + if(isValid){ + let arr=AddVisibility; + + arr.push(AddVisFormData); + setAddVisibility(arr); + setHasUnsavedChanges(true); + notify(ST.AdditionalVisibilityaddedsuccessfully,'LONG'); + setrerenderdata(!rerenderdata); + + // clear data + setAddVisFormData({}); + } + + } + + function showRemoveConfirm(item,index){ + console.log("checking-------",item) + + if(item.keyId>0){ + console.log("checking--id-----",item.keyId) + setToRemoveId(item.keyId); + setToRemoveItem(item); + setshowRemoveConfirm_M(true); + } + else{ + setToRemoveId(index); + setToRemoveItem(item); + setshowRemoveConfirm_M(true); + } + + } + + // function Remove_AddVis(){ + // let index=toRemoveId + // let item=toRemoveItem; + // let arr=AddVisibility; + // console.log('toRemoveId:',index); + // if(index>=0 && index0) { + console.log("check-keyId-",index) + + let deleteQuery=`DELETE FROM ${AppTables.DB_VISICOOLER} WHERE DISTRIBUTOR_ID='${StoreId}' and VISIT_DATE='${d2}' AND KEY_ID='${index}' `; + + txn.executeSql(deleteQuery, [], function (txn3, txnres) { + console.log('Visicooler data deleted', item.keyId,+""+index); + let updatedVisibility = AddVisibility.filter(item => item.keyId !== index); + setAddVisibility(updatedVisibility); + setHasUnsavedChanges(true); + notify('Visicooler removed successfully', 'LONG'); + setrerenderdata(!rerenderdata); + setToRemoveId(''); + setToRemoveItem({}); + setshowRemoveConfirm_M(false); + + }, function (txnE, txnerr) { + console.log('Error deleting survey data:', txnerr); + }); + + } + else { + let index=toRemoveId + let item=toRemoveItem; + let arr=AddVisibility; + console.log('toRemoveId:',index); + if(index>=0 && index + + { + (rerenderdata== rerenderdata) && + + + + + + {"QR Code"} + + {onFormDataChange(val,'QRCode',"qrtext");}} + autoComplete='off' + /> + {setQREnable(true);setQRqtnData({});setShowQRCamera(true);}}> + + + + + + + + {/* + + {"Asset Code"} + {onFormDataChange(val,'AssetCode');}} + autoComplete='off' + /> + + */} + {/* + + {ST.Image} + + + { (AddVisFormData.Image1Path=='' || AddVisFormData.Image1Path==null) && + {openCamera('1')}}> + + + } + { (AddVisFormData.Image1Path!='' && AddVisFormData.Image1Path!=null) && + + + {openCamera('1')}}> + + + + } + + + + + + + {Add_AddVis()}}> + {ST.Add} + + */} + + + + + {"Stock"} + + { + AddVisibility.length>0 && + AddVisibility.map((item,index)=>{ + console.log(item); + return ( + + + + + {'QR Code :'} + {item.QRCode} + + + + {'Asset Code :'} + {item.AssetCode} + + + + + {ST.Image} + {console.log("Image1Path--------",item.Image1Path)} + {(item.Image1Path!=null && item.Image1Path!='') && } + + {showRemoveConfirm(item,index)}}> + + + + + + + ); + }) + } + + + + + { PreviousVisicooler.length>0 &&{"Last Visit Stock"}} + + { + PreviousVisicooler.length>0 && + PreviousVisicooler.map((item,index)=>{ + console.log(item); + return ( + + + + + {'Store Id :'} + {item.StoreId} + + + + {'Product Id :'} + {item.ProductId} + + + + { + (item.Image1Path!=null && item.Image1Path!='') && + + {ST.Image} + {(item.Image1Path!=null && item.Image1Path!='') && } + + } + + + + + ); + }) + } + + + + } + + ) + } + + return ( + + {processing && } + + {ConfirmSaveAlert(props,showAlert,onSaveCancel,saveData)} + {ConfirmSaveAlert(props,showRemoveConfirm_M,()=>{setshowRemoveConfirm_M(false)},Remove_AddVis,ST.Doyoureallywanttoremovethisvisibility)} + {ConfirmSaveAlert(props,showRAllC_M,()=>{setShowRAllC_M(false)},onConfirmRemoveAll,ST.Doyoureallywanttoremoveallvisibilitydata)} + {setShowQRCamera(false);onQRScanned(imgData)}} showCamera={showQRCamera} onHideCamera={()=>{setShowQRCamera(false);}}/> + + {setShowCamera(false);getImage(imgData)}} showCamera={showCamera} onHideCamera={()=>{setShowCamera(false);}}/> + + + + { Object.keys(storeData).length>0 && + + {_render_addVisFormTop()} + + } + + {onSubmitData()}}/> + + + + + + + ); +} + + + +export default connect(mapStateToProps, mapDispatchToProps)(StockQR); \ No newline at end of file diff --git a/PerformicsSrc/src/screens/StockQRCode.js b/PerformicsSrc/src/screens/StockQRCode.js new file mode 100644 index 0000000..815a6e8 --- /dev/null +++ b/PerformicsSrc/src/screens/StockQRCode.js @@ -0,0 +1,2279 @@ +import React,{useState,useEffect, useRef} from 'react'; +import Container from '../components/container'; +import { useRoute } from '@react-navigation/native'; +import { globalStyles,customStyles,GetPageTheme } from "../styles/Global"; +import {StatusBar,Image,TextInput,View,Text,ScrollView,TouchableOpacity,Platform,PermissionsAndroid,FlatList, Alert, KeyboardAvoidingView, BackHandler, Keyboard, Animated, AppState} from 'react-native'; +import { ReactReduxContext,connect,useSelector, useDispatch } from 'react-redux'; +import { mapStateToProps,mapDispatchToProps } from '../reducers/contextProvider'; +import SQLite from 'react-native-sqlite-2'; +import {notify} from '../components/notify'; +import moment from 'moment'; +import {getDownloadJson,getKPIFields,marktext1,marktext2, resizeImage, restore_ImageWithMetaData, validateNumber} from '../controller/functions'; +import {get_item,set_item,clear_item} from '../components/localStorage'; +import {version,sloganline,appname,testurl,db, colors_Arr, common_ImagePath,ImageFolderPath, HierarchyTbls} from '../constants/constants'; +import CustomHeader from '../components/customHeader'; +import {Card, Menu, Switch} from 'react-native-paper'; +import {AntDesign, Entypo, Fontisto, Ionicons, MaterialCommunityIcons} from '../components/icons'; +import { stat } from 'react-native-fs'; +import CustomLoader from '../components/CustomLoader'; +import LinearGradient from 'react-native-linear-gradient'; +import { AppTables } from '../constants/tableConstants'; +import { SvgXml } from 'react-native-svg'; +import {launchCamera, launchImageLibrary,CameraOptions} from 'react-native-image-picker'; +import * as RNFS from 'react-native-fs'; +import GradientButton from '../components/gradientButton'; +import CheckBox from '@react-native-community/checkbox'; + +import CameraImg from '../assets/performics/camera_front_image.svg' + +import { ConfirmSaveAlert, ExitScreenAlert } from '../components/alert'; +import CustomCamera from '../components/Camera'; +import Accordion from 'react-native-collapsible/Accordion'; +import DateTimePicker from '@react-native-community/datetimepicker'; +import { createFalse } from 'typescript'; +import CustomModal2 from '../components/CustomModal2'; + +function StockQRCode(props) { + const route = useRoute(); + const ST=props.StaticText || {}; + // get all theme styles acc to current theme set + const PageTheme=GetPageTheme(props.DarkMode,route.name); + const customStyle=customStyles(props.DarkMode,route.name); + + const [processing, setProcessing] = useState(false); + const [loaderTitle, setLoaderTitle] = useState(); + const [isAdhocScreen, setIsAdhocScreen] = useState(false); + const [storeData, setStoreData] = useState({}); + const [StoreCameraAllow, setStoreCameraAllow] = useState(true); + const [currentMenu, setCurrentMenu] = useState({}); + const [brandData, setBrandData] = useState([]); + const [globalBrandData, setGlobalBrandData] = useState([]); + const [rerenderdata, setrerenderdata]= useState(0); + const [rerenderdata2, setrerenderdata2]= useState(0); + + const [catImages, setCatImages] = useState([]); + const [SKUStockData, setSKUStockData] = useState([]); + const [currentStock, setCurrentStock] = useState({}); + const [currentBrand, setCurrentBrand] = useState({}); + const [currentProduct, setCurrentProduct] = useState({}); + const [KPIFields, setKPIFields] = useState([]); + const [showSwitchCamera,setShowSwitchCamera]= useState(false); + const [showAlert, setShowAlert] = useState(false); + const [showStockModal, setShowStockModal] = useState(false); + const [showDatePicker, setShowDatePicker] = useState(false); + const [rerendermodal, setrerendermodal] = useState(0); + const [toRemoveId, setToRemoveId] = useState(''); + const [toRemoveCat, setToRemoveCat] = useState({}); + const [toRemoveSKU, setToRemoveSKU] = useState({}); + const [showRemoveConfirm_M, setShowRemoveConfirm_M] = useState(false); + const [searchedItem, setSearchedItem]= useState(''); + + const [AddVisFormData, setAddVisFormData] = useState({}); + const [QREnable, setQREnable] = useState(false); + const [QRqtnData, setQRqtnData] = useState({}); + const [showQRCamera, setShowQRCamera] = useState(false); + const [products, setProducts] = useState([]); + + const [hasUnsavedChanges,setHasUnsavedChanges] = useState(false); + const [showCamera, setShowCamera] = useState(false); + const [getImageProps,setGetImageProps]= useState({}); + const [activeSections,setActiveSections]= useState([]); + const [ShowCatWise,setShowCatWise]= useState(false); + const [CatData,setCatData]= useState(false); + const [ColId, setColId] = useState(""); + const [ColName, setColName] = useState(""); + const inputRefs = useRef({}); + const outerFlatListRef = useRef(null); + const middleFlatListRefs = useRef({}); + const innerFlatListRefs = useRef({}); + + const hasUnsavedChangesRef = React.useRef(hasUnsavedChanges); + const WindowDataRef=React.useRef(SKUStockData); + const WindowDataImgRef = React.useRef(catImages); + const StoreIdRef=React.useRef(null); + const ScreenNameRef=React.useRef(''); + const [errorfield, setErrorField] = useState({}); + const [error, setError] = useState(false); + const PSGroupData=React.useRef(''); // Grouping data (Category/ SubCategory/ Brand ) for BG save fuunctionality with Partial Save Scenario + const BGPSAllow=React.useRef(false); + + + const d1=new Date(); + const d2=moment(d1).format('MM/DD/YYYY'); + + + + useEffect(() => { + setLoaderTitle(ST.Loading+'...') + let params=props.route.params? props.route.params:{}; + let storeData1=params.storeData || {}; + let menu1=params.menu || {}; + let ShowCatWise1=params.ShowCatWise!=null?params.ShowCatWise:false; + let CatData1=params.CatData!=null?params.CatData:{}; + let isAdhoc=params.isAdhoc || false; + + console.log('params.ShowCatWise',params.ShowCatWise); + + setIsAdhocScreen(isAdhoc); + setShowCatWise(ShowCatWise1); + setCatData(CatData1); + setStoreData(storeData1); + setCurrentMenu(menu1); + + let cameraAllow=storeData1.CameraAllow=='true' || storeData1.CameraAllow==1?true:false; + setStoreCameraAllow(cameraAllow); + + StoreIdRef.current=storeData1.StoreId + ScreenNameRef.current=menu1.ScreenName + // getData(storeData1,menu1,ShowCatWise1,CatData1); + + const AppStateSubscription = AppState.addEventListener('change', (pro)=>{ _handleAppStateChange(pro)}); + const unsubscribe=props.navigation.addListener('beforeRemove', onBeforeRemove); + + return function cleanup() { + AppStateSubscription.remove(); + // AppState.removeEventListener('change', (pro)=>{ _handleAppStateChange(SKUStockData,pro)}); + return unsubscribe; + }; + + }, []); + + const _handleAppStateChange = async (nextAppState) => { + if(nextAppState =='background' && hasUnsavedChangesRef.current==true){ + let newData = { + storeBGData:WindowDataRef.current, + menuName:ScreenNameRef.current, + StoreId1:StoreIdRef.current, + visiteDate:d2, + BGPSAllow:BGPSAllow.current, + PSGroupData:PSGroupData.current, + } + let WindowsStr= JSON.stringify(newData) + console.log("checkwindata:",WindowsStr) + await set_item('storeData',WindowsStr); + + let newDataForSubCateory ={ + storeBGDataHdr:WindowDataImgRef.current, + menuName:ScreenNameRef.current, + StoreId1:StoreIdRef.current, + visiteDate:d2, + BGPSAllow:BGPSAllow.current, + PSGroupData:PSGroupData.current, + } + let WindowsStr2= JSON.stringify(newDataForSubCateory) + console.log("checkwindatahdr:",WindowsStr2) + await set_item('storeDataHdr',WindowsStr2); + } + } + + useEffect(() => { + const unsubscribe=props.navigation.addListener('beforeRemove', onBeforeRemove); + return unsubscribe; + // AppState.removeEventListener('change',(pro)=>{ _handleAppStateChange(SKUStockData,pro)}); + // AppState.addEventListener('change',(pro)=>{ _handleAppStateChange(SKUStockData,pro)}); + }, [hasUnsavedChanges]); + + // useEffect(() => { + // AppState.removeEventListener('change',(pro)=>{ _handleAppStateChange(SKUStockData,pro)}); + // AppState.addEventListener('change',(pro)=>{ _handleAppStateChange(SKUStockData,pro)}); + // }, [SKUStockData]); + + useEffect(() => { + const unsubscribe=props.navigation.addListener('beforeRemove', onBeforeRemove); + return unsubscribe; + }, [showCamera]); + + function onBeforeRemove(e){ + if(showCamera==true){ + e.preventDefault(); + setShowCamera(false); + } + else{ + if (hasUnsavedChanges==true) { + e.preventDefault(); // Prevent default behavior of leaving the screen + onRemoveScreen(e); + } + else{ + return; + } + } + } + + function BgUnsavedChanges(val){ + hasUnsavedChangesRef.current=val + setHasUnsavedChanges(val); + } + + function BgWindowData(val){ + WindowDataRef.current=val + setSKUStockData(val); + } + + function BgWindowDataHdr(val){ + WindowDataImgRef.current=val + setCatImages(val); + } + + + + function onRemoveScreen(e){ + Alert.alert( + "", + ST.Doyoureallywanttoexitthescreen, + [ + { + text: ST.Cancel, + onPress: () => {}, + style: "cancel" + }, + { text: ST.OK, onPress: async () => { + // setHasUnsavedChanges(false); + BgUnsavedChanges(false) + await clear_item('storeData') + props.navigation.dispatch(e.data.action);} } + ] + ); + } + + + + async function getData(storeData1,menu1,ShowCatWise1,CatData1={},QRcode){ + try { + console.log("Qrcode---:",QRcode) + // let {StoreId,ChainId,StateId,StoreTypeId,StoreClassId,StoreCategoryId}=storeData1; + // let allCats=[]; + // let allSKUData=[]; + // let AllKPIFields=await getKPIFields(menu1); + // setKPIFields(AllKPIFields); + + // // set switch camera flag as defined in mapping menu flag (if exists) + // let SwitchingCameraI=AllKPIFields.findIndex(i=>i.KPIFieldName=='SwitchingCamera'); + // let SwitchingCameraObj=SwitchingCameraI>=0?AllKPIFields[SwitchingCameraI]:{}; + // let SwitchingCamera=SwitchingCameraI>=0?SwitchingCameraObj['KPIFieldEnable']:false; + // setShowSwitchCamera(SwitchingCamera); + + // let {PSAllow,PSTableName}=menu1; + // PSTableName=PSTableName!=null?PSTableName:''; + // PSAllow=PSAllow!=null?PSAllow:false; + + + // //storeBGData check + // let storeBGData1=[],bgStoreJson={},isBgDataExists=false; + // let windData = await get_item('storeData') + // console.log("windowdataaa--",windData) + // if(windData!=null && windData!=''){ + // let StoreJson = JSON.parse(windData) + // let { storeBGData,menuName,StoreId1,visiteDate }= StoreJson + // if(storeBGData.length>0 && menuName == menu1.ScreenName && StoreId1== StoreId && visiteDate==d2){ + // isBgDataExists=true; + // storeBGData1=storeBGData; + // bgStoreJson=StoreJson + // // setSKUStockData(storeBGData); + // BgUnsavedChanges(true) + // BgWindowData(storeBGData); + // } + // } + + // //storeBGData check for SubCategoryImg + // let storeBGData2=[],bgStoreJson2={},isBgDataExists2=false; + // let windData2 = await get_item('storeDataHdr') + // console.log("windowdata--",windData2) + // if(windData2!=null && windData2!=''){ + // let StoreJson2 = JSON.parse(windData2); + // let { storeBGDataHdr,menuName,StoreId1,visiteDate }= StoreJson2 + // if(storeBGData2.length>0 && menuName == menu1.ScreenName && StoreId1== StoreId && visiteDate==d2){ + // isBgDataExists2=true; + // storeBGData2=storeBGDataHdr; + // bgStoreJson2=StoreJson2 + // // setSKUStockData(storeBGData); + // BgUnsavedChanges(true) + // BgWindowDataHdr(storeBGDataHdr); + // } + // } + + // // call this after storeBGData check + // if(PSAllow){ + // // if Partial save is allowed then add the currently active category or group in BG var + // BGPSAllow.current=true; + // PSGroupData.current=CatData1; + // } + + // await db.transaction(async function (txn) { + + // let orderBy='',idCol='',nameCol=''; + + // if(PSTableName.toLowerCase()==HierarchyTbls.Master_Category.toLowerCase()){ + // idCol='CategoryId',nameCol='CategoryName'; + // orderBy=' CategorySequence '; + // } + // else if(PSTableName.toLowerCase()==HierarchyTbls.Master_Brand.toLowerCase()){ + // idCol='BrandId',nameCol='BrandName'; + // orderBy=' BrandSequence '; + // } + // else { + // idCol='SubCategoryId',nameCol='SubCategoryName'; + // orderBy=' SubCategorySequence '; + // } + // let IdVal=CatData1[idCol]; + // let NameVal=CatData1[nameCol]; + // setColId(idCol); + // setColName(nameCol); + + + + // let COMPStockAllow_Index=AllKPIFields.findIndex(i=>i.KPIFieldName=='COMPStockAllow'); + // let COMPStockAllow_Obj=COMPStockAllow_Index>=0?AllKPIFields[COMPStockAllow_Index]:{}; + // let isCOMPStockAllow=COMPStockAllow_Index>=0?COMPStockAllow_Obj['KPIFieldEnable']:false; + + + // let join='',join2='',join3='',q='',q2=''; + + + // // if(ShowCatWise1==true){ + // console.log("idcolumnnn---",idCol) + + // join=` inner join Mapping_ProductAssortment m on p.ProductId=m.ProductId `; + // join2=` inner join Master_Category mc on mc.CategoryId=p.CategoryId `; + // join3=` Left Outer Join ${AppTables.STOCK2HDR_DATA} st on st.SUB_CATEGORY_ID=p.${idCol} and st.STORE_ID='${StoreId}' and st.VISIT_DATE='${d2}' `; + // q=`select distinct p.${idCol} as SubCategoryId,p.${nameCol} as SubCategoryName,st.IMAGE,st.IMAGEPATH from Product_Master p ${join} ${join2} ${join3} where m.ChainId='${ChainId}' and m.StateId='${StateId}' and p.ProductCode= '${QRcode}' and m.StoreTypeId='${StoreTypeId}' and m.StoreCategoryId='${StoreCategoryId}' and m.StoreClassId='${StoreClassId}' ${(isCOMPStockAllow==true?'':` and p.IsCompetitor='0' `)} `; + // if(ShowCatWise1==true){ + // console.log("showcatewise:",ShowCatWise1) + // q+=` and p.${idCol}='${IdVal}' `; + // } + // q+=` order by p.IsCompetitor,p.${nameCol}`; + + // // q2=` SELECT SUB_CATEGORY_ID as SubCategoryId,SUB_CATEGORY as SubCategoryName,IMAGE,IMAGEPATH FROM ${AppTables.STOCK2HDR_DATA} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' `; + + // console.log('ShowCatWise1:',ShowCatWise1,q); + + // await txn.executeSql(q,[],async function (txn2, txnres) { + // console.log('added products subcats:',txnres.rows.length) + // if(txnres.rows.length>0){ + // let arr=[]; + // for(var i=0;i{setrerenderdata2(!rerenderdata2);},3000); + // setProcessing(false); + // } + // } + // } + // else{ + // setProcessing(false); + // notify("No Data Found!"); + // } + + // },function (txnE,txnerr) { console.log('qerr:',txnerr);setProcessing(false); },); + // // setProcessing(false); + + // }); + } catch (err) { + console.log(err); + } + } + + // async function getBrands(storeData1,menu1,item,allSKUData=[],AllKPIFields,idCol,nameCol,CatData1={},ShowCatWise1=false,QRcode){ + + // console.log("yessssss",QRcode) + + // // If Partial save is allowed then pick the filter data id else pick the Subcaetgroy Id (default) + // let IdVal=ShowCatWise1?CatData1[idCol]:item[idCol]; + // let NameVal=ShowCatWise1?CatData1[nameCol]:item[nameCol]; + + // let data_to_ret={'brands':[],'products_data':allSKUData} + // let {StoreId,ChainId,StateId,StoreTypeId,StoreClassId,StoreCategoryId}=storeData1; + + // let COMPStockAllow_Index=AllKPIFields.findIndex(i=>i.KPIFieldName=='COMPStockAllow'); + // let COMPStockAllow_Obj=COMPStockAllow_Index>=0?AllKPIFields[COMPStockAllow_Index]:{}; + // let isCOMPStockAllow=COMPStockAllow_Index>=0?COMPStockAllow_Obj['KPIFieldEnable']:false; + + // return await new Promise((resolve,reject)=>{ + // db.transaction(async function (txn) { + + // let join=` inner join Mapping_ProductAssortment m on p.ProductId=m.ProductId `; + // let join2=` inner join Master_Category mc on mc.CategoryId=p.CategoryId `; + // let brands_q=`select distinct p.BrandName,p.BrandId, p.IsCompetitor from Product_Master p ${join} ${join2} where m.ChainId='${ChainId}' and p.ProductCode='${QRcode}' and m.StateId='${StateId}' and m.StoreCategoryId='${StoreCategoryId}' and m.StoreClassId='${StoreClassId}' and m.StoreTypeId='${StoreTypeId}' and p.${idCol}='${IdVal}' ${(isCOMPStockAllow==true?'':` and p.IsCompetitor='0' `)} order by p.IsCompetitor, p.BrandName`; + + + // await txn.executeSql(brands_q,[],async function (txn2, txnres) { + + // if(txnres.rows.length>0){ + // let arr=[]; + // for(var i=0;i{ + // return val; + // }).catch((err)=>{ + // console.log(err); + // return data_to_ret; + // }) + // } + + // async function getSKU(storeData1,cat,brand,allSKUData=[],AllKPIFields,idCol,nameCol,CatData1={},ShowCatWise1=false,QRcode){ + + // // If Partial save is allowed then pick the filter data id else pick the Subcaetgroy Id (default) + // let IdVal=ShowCatWise1?CatData1[idCol]:cat[idCol]; + // let NameVal=ShowCatWise1?CatData1[nameCol]:cat[nameCol]; + + // let sku_ret={'products':[],'products_data':allSKUData}; + // let {StoreId,ChainId,StateId,StoreTypeId,ExpiryStock,StoreClassId,StoreCategoryId}=storeData1; + + // let DefaultStockToggleI=AllKPIFields.findIndex(i=>i.KPIFieldName=='DefaultStockToggle') + // let DefaultStockToggleObj=DefaultStockToggleI>=0?AllKPIFields[DefaultStockToggleI]:{}; + // let DefaultStockToggle=DefaultStockToggleI>=0?DefaultStockToggleObj['KPIFieldEnable']:false; + // let DefaultStockToggleValue=DefaultStockToggleI>=0?DefaultStockToggleObj['KPIFieldDisplayName']:"2"; + // let deftogvalue=DefaultStockToggleValue=="3"?"3":(DefaultStockToggle=="1"?"1":"0"); + + + // let COMPStockAllow_Index=AllKPIFields.findIndex(i=>i.KPIFieldName=='COMPStockAllow'); + // let COMPStockAllow_Obj=COMPStockAllow_Index>=0?AllKPIFields[COMPStockAllow_Index]:{}; + // let isCOMPStockAllow=COMPStockAllow_Index>=0?COMPStockAllow_Obj['KPIFieldEnable']:false; + + // return await new Promise((resolve,reject)=>{ + // db.transaction(async function (txn) { + + // let join=` inner join Mapping_ProductAssortment m on p.ProductId=m.ProductId `; + // let join2=` inner join Master_Category mc on mc.CategoryId=p.CategoryId `; + // let join5=` Left Outer join (select * from ${AppTables.STOCK2_DATA} where SUB_CATEGORY_ID='${cat.SubCategoryId}' and BRAND_ID='${brand.BrandId}' and STORE_ID='${StoreId}' and VISIT_DATE='${d2}' ) st on st.PRODUCT_ID=p.ProductId`; + // let seletlist=`Distinct st.STOCK_UID,p.ProductName,p.ProductCode,p.ProductId,p.BrandName,p.BrandId,p.IsCompetitor,m.MSL,m.MBQ,st.STOCK,st.BACKROOM_STOCK,st.DAMAGED_STOCK,st.LOST_STOCK,st.EXPIRY_STOCK,st.IS_SKU_STOCK_PRESENT,st.NREXPIRY1_STOCK,st.NREXPIRY2_STOCK,st.NREXPIRY3_STOCK,st.OUT_OF_STOCK,st.LESS_THAN_MBQ`; + // let sku_q2=`select ${seletlist} from Product_Master p ${join} ${join2} ${join5} where m.ChainId='${ChainId}' and m.StateId='${StateId}' and m.StoreCategoryId='${StoreCategoryId}' and p.ProductCode='${QRcode}' and m.StoreClassId='${StoreClassId}' and m.StoreTypeId='${StoreTypeId}' `; + // sku_q2+=idCol!='BrandId'?` and p.${idCol}='${IdVal}' `:''; + // sku_q2+=` and p.BrandId='${brand.BrandId}' ${(isCOMPStockAllow==true?'':` and p.IsCompetitor='0' `)} order by p.ProductSequence`; + + + // console.log("sku_q2:",sku_q2); + + // await txn.executeSql(sku_q2,[],async function (txn2, txnres) { + + // if(txnres.rows.length>0){ + // let arr=[]; + // for(var i=0;i{ + // return val; + // }).catch((err)=>{ + // console.log('err:',err); + // return sku_ret; + // }) + + + // } + + + function setInputRefss(AllKPIFields,cat,brand,data){ + let isStockIndex=AllKPIFields.findIndex(i=>i.KPIFieldName=='Stock') + let isStockKPIObj=isStockIndex>=0?AllKPIFields[isStockIndex]:{}; + let isStockEnable=isStockIndex>=0?isStockKPIObj['KPIFieldEnable']:true; + let isStockDis_Name=isStockIndex>=0?isStockKPIObj['KPIFieldDisplayName']:''; + + + let isBRStockIndex=AllKPIFields.findIndex(i=>i.KPIFieldName=='BackRoomStock') + let isBRStockKPIObj=isBRStockIndex>=0?AllKPIFields[isBRStockIndex]:{}; + let isBRStockEnable=isBRStockIndex>=0?isBRStockKPIObj['KPIFieldEnable']:true; + let isBRStockDis_Name=isBRStockIndex>=0?isBRStockKPIObj['KPIFieldDisplayName']:''; + + let isDStockIndex=AllKPIFields.findIndex(i=>i.KPIFieldName=='DamageStock') + let isDStockKPIObj=isDStockIndex>=0?AllKPIFields[isDStockIndex]:{}; + let isDStockEnable=isDStockIndex>=0?isDStockKPIObj['KPIFieldEnable']:false; + let isDStockDis_Name=isDStockIndex>=0?isDStockKPIObj['KPIFieldDisplayName']:''; + + let isLStockIndex=AllKPIFields.findIndex(i=>i.KPIFieldName=='LostStock') + let isLStockKPIObj=isLStockIndex>=0?AllKPIFields[isLStockIndex]:{}; + let isLStockEnable=isLStockIndex>=0?isLStockKPIObj['KPIFieldEnable']:false; + let isLStockDis_Name=isLStockIndex>=0?isLStockKPIObj['KPIFieldDisplayName']:''; + + let isExStockIndex=AllKPIFields.findIndex(i=>i.KPIFieldName=='ExpiredStock') + let isExStockKPIObj=isExStockIndex>=0?AllKPIFields[isExStockIndex]:{}; + let isExStockEnable=isExStockIndex>=0?isExStockKPIObj['KPIFieldEnable']:false; + let isExStockDis_Name=isExStockIndex>=0?isExStockKPIObj['KPIFieldDisplayName']:''; + + let NrExpiry1Index=AllKPIFields.findIndex(i=>i.KPIFieldName=='NrExpiry1') + let NrExpiry1KPIObj=NrExpiry1Index>=0?AllKPIFields[NrExpiry1Index]:{}; + let NrExpiry1Enable=NrExpiry1Index>=0?NrExpiry1KPIObj['KPIFieldEnable']:false; + let NrExpiry1_Dis_Name=NrExpiry1Index>=0?NrExpiry1KPIObj['KPIFieldDisplayName']:''; + + let NrExpiry2Index=AllKPIFields.findIndex(i=>i.KPIFieldName=='NrExpiry2') + let NrExpiry2KPIObj=NrExpiry2Index>=0?AllKPIFields[NrExpiry2Index]:{}; + let NrExpiry2Enable=NrExpiry2Index>=0?NrExpiry2KPIObj['KPIFieldEnable']:false; + let NrExpiry2_Dis_Name=NrExpiry2Index>=0?NrExpiry2KPIObj['KPIFieldDisplayName']:''; + + let NrExpiry3Index=AllKPIFields.findIndex(i=>i.KPIFieldName=='NrExpiry3') + let NrExpiry3KPIObj=NrExpiry1Index>=0?AllKPIFields[NrExpiry3Index]:{}; + let NrExpiry3Enable=NrExpiry1Index>=0?NrExpiry3KPIObj['KPIFieldEnable']:false; + let NrExpiry3_Dis_Name=NrExpiry1Index>=0?NrExpiry3KPIObj['KPIFieldDisplayName']:''; + + + if(isStockEnable){ + inputRefs.current['input1_'+cat.SubCategoryId+'_'+brand.BrandId+'_'+data.ProductId]=''; + } + if(isBRStockEnable){ + inputRefs.current['input2_'+cat.SubCategoryId+'_'+brand.BrandId+'_'+data.ProductId]=''; + } + if(isDStockEnable){ + inputRefs.current['input3_'+cat.SubCategoryId+'_'+brand.BrandId+'_'+data.ProductId]=''; + } + if(isLStockEnable){ + inputRefs.current['input4_'+cat.SubCategoryId+'_'+brand.BrandId+'_'+data.ProductId]=''; + } + if(isExStockEnable){ + inputRefs.current['input5_'+cat.SubCategoryId+'_'+brand.BrandId+'_'+data.ProductId]=''; + } + if(NrExpiry1Enable){ + inputRefs.current['input6_'+cat.SubCategoryId+'_'+brand.BrandId+'_'+data.ProductId]=''; + } + if(NrExpiry2Enable){ + inputRefs.current['input7_'+cat.SubCategoryId+'_'+brand.BrandId+'_'+data.ProductId]=''; + } + if(NrExpiry3Enable){ + inputRefs.current['input8_'+cat.SubCategoryId+'_'+brand.BrandId+'_'+data.ProductId]=''; + } + + } + + async function getMFDStockData(skud){ + + return new Promise((resolve,reject)=>{ + db.transaction(async function (txn) { + let q=`select * from ${AppTables.STOCK2_MFD_DATA} where STOCK_UID='${skud.STOCK_UID}'`; + await txn.executeSql(q,[],async function (txn2, txnres) { + if(txnres.rows.length>0){ + let arr=[]; + for(var i=0;i{ + console.log(err); + return []; + }) + } + + async function getImage(imgdata){ + let cat=getImageProps.option || ''; + if(typeof imgdata =='object' && imgdata.errorCode=='camera_unavailable'){ + notify(ST.Cameraunavailable); + } + else if(typeof imgdata =='object' && imgdata.uri!=null){ + const img=imgdata; + const imgurl=img.uri, imgWidth=img.width, imgHeight=img.ExtendedHeight; + let isImgFromGallery=img.fromGallery!=null?img.fromGallery:false; + let picture_clickedd=isImgFromGallery==true?img.datetime:new Date(); + let picture_clicked_time=moment(picture_clickedd).format('DD-MM-YYYY HH:mm:ss') + + const mark_text1=picture_clicked_time; + const mark_text2='Store Name:'+storeData.StoreName+' | Store Id:'+storeData.StoreId+' | User Id:'+storeData.EmpId+' | Image Type: '+currentMenu.MenuName+' | Date:'+picture_clicked_time; + + + let picture_clicked_date1=moment(picture_clickedd).format('YYYYMMDD'); + let picture_clicked_time1=moment(picture_clickedd).format('HHmmss'); + let filename=storeData.StoreId+'_'+(props.UserId || '')+'_Stock-'+picture_clicked_date1+'_'+picture_clicked_time1+'.jpg'; + + let allIMgs=catImages; + let defData={'SubCategoryId':cat.SubCategoryId}; + const cindex=allIMgs.findIndex(i=>i.SubCategoryId==cat.SubCategoryId); + const imgData=cindex>=0?(allIMgs[cindex] || defData):defData; + imgData.ImageName=filename; + + let imagePath='file://'+ImageFolderPath+currentMenu.ScreenName+"/"+filename; + RNFS.copyFile(imgurl, imagePath) + .then(async(resn) => { + // render data with clicked image + let uri=imagePath; + console.log('image marker',uri); + imgData.ImagePath=uri; + cindex>=0?allIMgs[cindex]=imgData:allIMgs.push(imgData); + setCatImages(allIMgs); + console.log("catimages--",catImages) + // setHasUnsavedChanges(true); + BgWindowDataHdr(allIMgs) + + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + + // add metdata then resize image and restored back to the imagePath + let restore_data={"destFilePath":imagePath,"imgurl":imgurl,imgWidth,imgHeight,mark_text1,mark_text2} + let is_restored=await restore_ImageWithMetaData(restore_data,imgdata); + console.log("image restored:",is_restored); + }) + .catch(err => { + console.log(ST.Errorimagefilewritefailed+'!!!'); + console.log(err.message, err.code); + }); + + // resize file + // let resize_res=await resizeImage(imgurl,imgWidth,imgHeight) + + + // if(resize_res.success){ + // file resized now rename file + + // } + // else{ + // if(resize_res.error){ + // notify("Error in image: ",resize_res.error); + // }else if (resize_res.imagenotfound){ + // notify("Cannot find image!"); + // }else{ + // notify("Something went wrong while capturing image!"); + // } + // } + } + } + + async function openCamera(option){ + setGetImageProps({'option':option}); + console.log('openCamera'); + setShowCamera(true); + // props.navigation.navigate('CameraScreen',{'getImage':getImage,'cameraType':'back'}) + } + + async function submitOpeningStock(){ + let isvalid=await validate(); + if(isvalid){ + Keyboard.dismiss(); + setShowAlert(true); + } + } + + async function saveData(){ + // setHasUnsavedChanges(false); + BgUnsavedChanges(false) + setShowAlert(false); + setLoaderTitle(ST.SavingData+'...'); + setProcessing(true); + try { + let {StoreId,ChainId,StateId,StoreTypeId}=storeData; + await db.transaction(async function (txn) { + + let IdVal=CatData[ColId]; + let NameVal=CatData[ColName]; + let q=`DELETE FROM ${AppTables.STOCK2_DATA} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' ${ShowCatWise?` and SUB_CATEGORY_ID='${IdVal}' `:''} `; + let q2=`DELETE FROM ${AppTables.STOCK2HDR_DATA} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' ${ShowCatWise?` and SUB_CATEGORY_ID='${IdVal}' `:''} `; + let q3=`DELETE FROM ${AppTables.STOCK2_MFD_DATA} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' ${ShowCatWise?` and SUB_CATEGORY_ID='${IdVal}' `:''} `; + + // remove old data + await txn.executeSql(q,[],async function (txn2, txnres) { + console.log('stock data deleted'); + },function (txnE,txnerr) { console.log(txnerr); },); + + await txn.executeSql(q2,[],async function (txn2, txnres) { + console.log('stock header data deleted'); + },function (txnE,txnerr) { console.log(txnerr); },); + + await txn.executeSql(q3,[],async function (txn2, txnres) { + console.log('stock mfd data deleted'); + },function (txnE,txnerr) { console.log(txnerr); },); + + + let seq_q=` select seq from sqlite_sequence where name="${AppTables.STOCK2HDR_DATA}" `; + await txn.executeSql(seq_q,[],async function (txn2, txnres) { + if(txnres.rows.length>0){ + let data=txnres.rows.item(0); + let seq=data.seq; + insertData(seq); + } + else{ + insertData(0); + } + },function (txnE,txnerr) { console.log(txnerr); insertData(0); },); + + + }); + } catch (err) { + console.log(err); + } + } + + async function insertData(seq=0){ + try { + console.log(seq); + let {StoreId,ChainId,StateId,StoreTypeId,ExpiryStock}=storeData; + console.log('insertData'); + await db.transaction(async function (txn) { + var values='',stock_values='',mfdStockV=''; + for(var i=0;ici.SubCategoryId==item.SubCategoryId) || {}; + values+=values!=''?' , ':''; + + + values+=` ('${StoreId}','${d2}','${item.SubCategoryName}','${item.SubCategoryId}','','${(cimage.ImageName || '')}','${(cimage.ImagePath || '')}','1','${d2}') `; + console.log('stock hdr values added'); + + let brandList=item.brandList || []; + for(var j=0;jci.SubCategoryId==item.SubCategoryId && ci.ProductId==skuItem.ProductId); + const skud=skud_index>=0?(allSKUData[skud_index] || {}) : {}; + let mfdStocks=skud['mfdStocks'] || []; + + let stock=skud.Stock!=null?skud.Stock:''; + let br_stock=skud.BackRoomStock!=null?skud.BackRoomStock:''; + let ex_stock=skud.ExpiryStock!=null?skud.ExpiryStock:''; + let damage_stock=skud.DamagedStock!=null?skud.DamagedStock:''; + let lost_stock=skud.LostStock!=null?skud.LostStock:''; + let isSKUPresent=skud.isSKUPresent!=null?skud.isSKUPresent:0; + let OutOfStock=skud.OutOfStock!=null?skud.OutOfStock:'0'; + let LessThanMBQ=skud.LessThanMBQ!=null?skud.LessThanMBQ:'0'; + + let NearExpiry_stock1=skud.NearExpiry1!=null?skud.NearExpiry1:''; + let NearExpiry_stock2=skud.NearExpiry2!=null?skud.NearExpiry2:''; + let NearExpiry_stock3=skud.NearExpiry3!=null?skud.NearExpiry3:''; + + stock_values+=` ('${seq}','${SKU_UID}','${StoreId}','${d2}','${item.SubCategoryId}','${item.SubCategoryName}','${BrandId}','${BrandName}','${ProductId}','${ProductName}','${MSL}','${stock}','${br_stock}','${damage_stock}','${lost_stock}','${ex_stock}','${isSKUPresent}','${NearExpiry_stock1}','${NearExpiry_stock2}','${NearExpiry_stock3}','${OutOfStock}','${LessThanMBQ}','${d2}') `; + + for(let m=0;mi.KPIFieldName=='StockValidationRequired') + let StockValidationRequiredObj=StockValidationRequiredI>=0?KPIFields[StockValidationRequiredI]:{}; + let StockValidationRequired=StockValidationRequiredI>=0?StockValidationRequiredObj['KPIFieldEnable']:true; + console.log('StockValidationRequired:',StockValidationRequired); + if(StockValidationRequired==false){ + return isValid; + } + + // validate only if permit + + let isHdrImgIndex=KPIFields.findIndex(i=>i.KPIFieldName=='HeaderImageAllow') + let isHdrImgKPIObj=isHdrImgIndex>=0?KPIFields[isHdrImgIndex]:{}; + let isHdrImgEnable=isHdrImgIndex>=0?isHdrImgKPIObj['KPIFieldEnable']:false; + + let isListedSKUIndex=KPIFields.findIndex(i=>i.KPIFieldName=='ListedSKU'); + let isListedSKUKPIObj=isListedSKUIndex>=0?KPIFields[isListedSKUIndex]:{}; + let isListedSKUEnable=isListedSKUIndex>=0?isListedSKUKPIObj['KPIFieldEnable']:true; + + let isStockIndex=KPIFields.findIndex(i=>i.KPIFieldName=='Stock') + let isStockKPIObj=isStockIndex>=0?KPIFields[isStockIndex]:{}; + let isStockEnable=isStockIndex>=0?isStockKPIObj['KPIFieldEnable']:true; + let isStockDis_Name=isStockIndex>=0?isStockKPIObj['KPIFieldDisplayName']:'Stock'; + + let isBRStockIndex=KPIFields.findIndex(i=>i.KPIFieldName=='BackRoomStock') + let isBRStockKPIObj=isBRStockIndex>=0?KPIFields[isBRStockIndex]:{}; + let isBRStockEnable=isBRStockIndex>=0?isBRStockKPIObj['KPIFieldEnable']:true; + let isBRStockDis_Name=isBRStockIndex>=0?isBRStockKPIObj['KPIFieldDisplayName']:''; + + let isDStockIndex=KPIFields.findIndex(i=>i.KPIFieldName=='DamageStock') + let isDStockKPIObj=isDStockIndex>=0?KPIFields[isDStockIndex]:{}; + let isDStockEnable=isDStockIndex>=0?isDStockKPIObj['KPIFieldEnable']:false; + let isDStockDis_Name=isDStockIndex>=0?isDStockKPIObj['KPIFieldDisplayName']:''; + + let isLStockIndex=KPIFields.findIndex(i=>i.KPIFieldName=='LostStock') + let isLStockKPIObj=isLStockIndex>=0?KPIFields[isLStockIndex]:{}; + let isLStockEnable=isLStockIndex>=0?isLStockKPIObj['KPIFieldEnable']:false; + let isLStockDis_Name=isLStockIndex>=0?isLStockKPIObj['KPIFieldDisplayName']:''; + + let isExStockIndex=KPIFields.findIndex(i=>i.KPIFieldName=='ExpiredStock') + let isExStockKPIObj=isExStockIndex>=0?KPIFields[isExStockIndex]:{}; + let isExStockEnable=isExStockIndex>=0?isExStockKPIObj['KPIFieldEnable']:false; + let isExStockDis_Name=isExStockIndex>=0?isExStockKPIObj['KPIFieldDisplayName']:''; + + let isMFDIndex=KPIFields.findIndex(i=>i.KPIFieldName=='MFD') + let isMFD_KPIObj=isMFDIndex>=0?KPIFields[isMFDIndex]:{}; + let isMFDEnable=isMFDIndex>=0?isMFD_KPIObj['KPIFieldEnable']:false; + let isMFDDis_Name=isMFDIndex>=0?isMFD_KPIObj['KPIFieldDisplayName']:''; + + let NrExpiry1Index=KPIFields.findIndex(i=>i.KPIFieldName=='NrExpiry1') + let NrExpiry1KPIObj=NrExpiry1Index>=0?KPIFields[NrExpiry1Index]:{}; + let NrExpiry1Enable=NrExpiry1Index>=0?NrExpiry1KPIObj['KPIFieldEnable']:false; + let NrExpiry1_Dis_Name=NrExpiry1Index>=0?NrExpiry1KPIObj['KPIFieldDisplayName']:''; + + let NrExpiry2Index=KPIFields.findIndex(i=>i.KPIFieldName=='NrExpiry2') + let NrExpiry2KPIObj=NrExpiry2Index>=0?KPIFields[NrExpiry2Index]:{}; + let NrExpiry2Enable=NrExpiry2Index>=0?NrExpiry2KPIObj['KPIFieldEnable']:false; + let NrExpiry2_Dis_Name=NrExpiry2Index>=0?NrExpiry2KPIObj['KPIFieldDisplayName']:''; + + let NrExpiry3Index=KPIFields.findIndex(i=>i.KPIFieldName=='NrExpiry3') + let NrExpiry3KPIObj=NrExpiry1Index>=0?KPIFields[NrExpiry3Index]:{}; + let NrExpiry3Enable=NrExpiry1Index>=0?NrExpiry3KPIObj['KPIFieldEnable']:false; + let NrExpiry3_Dis_Name=NrExpiry1Index>=0?NrExpiry3KPIObj['KPIFieldDisplayName']:''; + + let MSLIndex=KPIFields.findIndex(i=>i.KPIFieldName=='MSL'); + let MSLObj=MSLIndex>=0?KPIFields[MSLIndex]:{}; + let isMSLAllow=MSLIndex>=0?MSLObj['KPIFieldEnable']:true; + + let NONMSL_Index=KPIFields.findIndex(i=>i.KPIFieldName=='NONMSL'); + let NONMSL_Obj=NONMSL_Index>=0?KPIFields[NONMSL_Index]:{}; + let isNONMSL_Allow=NONMSL_Index>=0?NONMSL_Obj['KPIFieldEnable']:true; + + // new + let OutofStockI=KPIFields.findIndex(i=>i.KPIFieldName=='OutofStock') + let OutofStockObj=OutofStockI>=0?KPIFields[OutofStockI]:{}; + let OutofStockEnable=OutofStockI>=0?OutofStockObj['KPIFieldEnable']:false; + + let LessThanMBQI=KPIFields.findIndex(i=>i.KPIFieldName=='LessThanMBQ') + let LessThanMBQObj=LessThanMBQI>=0?KPIFields[LessThanMBQI]:{}; + let LessThanMBQEnable=LessThanMBQI>=0?LessThanMBQObj['KPIFieldEnable']:false; + + let DefaultStockToggleI=KPIFields.findIndex(i=>i.KPIFieldName=='DefaultStockToggle') + let DefaultStockToggleObj=DefaultStockToggleI>=0?KPIFields[DefaultStockToggleI]:{}; + let DefaultStockToggle=DefaultStockToggleI>=0?DefaultStockToggleObj['KPIFieldEnable']:false; + let DefaultStockToggleValue=DefaultStockToggleI>=0?DefaultStockToggleObj['KPIFieldDisplayName']:"2"; + let deftogvalue=DefaultStockToggleValue=="3"?"3":(DefaultStockToggle=="1"?"1":"0"); + + let COMPStockAllow_Index=KPIFields.findIndex(i=>i.KPIFieldName=='COMPStockAllow'); + let COMPStockAllow_Obj=COMPStockAllow_Index>=0?KPIFields[COMPStockAllow_Index]:{}; + let isCOMPStockAllow=COMPStockAllow_Index>=0?COMPStockAllow_Obj['KPIMandatory']:false; + + + await Promise.all( + globalBrandData.map(async (item,index) => { + if(isValid){ + let catId=item.SubCategoryId; + + let cimgData=catImages.find(ci=>ci.SubCategoryId==catId) || {}; + + + // let isCollapsed=item.isCollapsed!=null?item.isCollapsed:true; + + if(StoreCameraAllow && isHdrImgEnable==true && (cimgData.ImagePath== null || cimgData.ImagePath=='')){ + notify(ST.Pleaseclickimagefor+' '+item.SubCategoryName,'SHORT'); + isValid=false; + } + else{ + let brandList=item.brandList || []; + + if(brandList.length>0){ + brandList.map(async (brand,brand_index) => { + let skulist=brand.skulist || []; + + if(isValid==true){ + if(skulist.length>0){ + await Promise.all( + skulist.map(async (skuItem,skuIndex) => { + if(isValid==true){ + let skuData=SKUStockData.find(ci=>ci.SubCategoryId==item.SubCategoryId && ci.ProductId==skuItem.ProductId ) || {}; + + let stock=skuData.Stock!=null?skuData.Stock:''; + let ex_stock=skuData.ExpiryStock!=null?skuData.ExpiryStock:''; + let damage_stock=skuData.DamagedStock!=null?skuData.DamagedStock:''; + let lost_stock=skuData.LostStock!=null?skuData.LostStock:''; + let isSKUPresent=skuData.isSKUPresent!=null?skuData.isSKUPresent:0; + let br_stock=skuData.BackRoomStock!=null?skuData.BackRoomStock:''; + let NearExpiry_stock1=skuData.NearExpiry1!=null?skuData.NearExpiry1:''; + let NearExpiry_stock2=skuData.NearExpiry2!=null?skuData.NearExpiry2:''; + let NearExpiry_stock3=skuData.NearExpiry3!=null?skuData.NearExpiry3:''; + let OutOfStock=skuData.OutOfStock!=null?skuData.OutOfStock:deftogvalue; + let LessThanMBQ=skuData.LessThanMBQ!=null?skuData.LessThanMBQ:deftogvalue; + + // let isMandatory=((isMSLAllow==1 || isMSLAllow=='true') && (skuItem.MSL==1 || skuItem.MSL=='true') ) || ((isNONMSL_Allow==0 || isNONMSL_Allow=='false') && (skuItem.MSL!=1 && skuItem.MSL!='true') ) + let IsCompetitor=skuItem.IsCompetitor=='1' || skuItem.IsCompetitor==1?true:false; + + let isMSLMandCond=!IsCompetitor && (isMSLAllow==1 || isMSLAllow=='true') && (skuItem.MSL==1 || skuItem.MSL=='true') ; + let isNONMSLMandCond=!IsCompetitor && (isNONMSL_Allow==true || isNONMSL_Allow=='true') && (skuItem.MSL!=1 && skuItem.MSL!='true') + + let IsCompetitorMand= (isCOMPStockAllow==1 || isCOMPStockAllow=='true') && IsCompetitor; + let isMandatory=isMSLMandCond || isNONMSLMandCond || IsCompetitorMand; + + + + let errorobj = {'EF_cat':item,'EF_brand':brand,'EF_product':skuItem} + let errorcatid = item.SubCategoryId + let error_bid = brand.BrandId + let error_pid = skuItem.ProductId + let show_errorH=false,error_HInputKey=''; + console.log("isListedSKUEnable:",isMandatory,isMSLMandCond,isNONMSLMandCond,IsCompetitorMand,IsCompetitor) + if((isListedSKUEnable==true && isSKUPresent==1) || (!isListedSKUEnable && (isMandatory)) ){ + + // let sumOfDamagedStocks=parseInt(ex_stock)+parseInt(damage_stock)+parseInt(lost_stock); + console.log("isStockEnable:",isStockEnable,stock) + if(LessThanMBQEnable==true && LessThanMBQ=="3"){ + notify("Please select required options for "+skuItem.ProductName,'LONG'); + isValid=false; + } + else if(OutofStockEnable==true && OutOfStock=="3"){ + notify("Please select required options for "+skuItem.ProductName,'LONG'); + isValid=false; + } + else if(isStockEnable==true && stock!==0 && ( stock==null || stock=='')){ + notify(ST.Pleaseenter+' '+isStockDis_Name+' '+ST.for+' '+skuItem.ProductName,'LONG'); + isValid=false; + show_errorH=true,error_HInputKey='input1_'; + } + // else if(isBRStockEnable==true && br_stock!==0 && ( br_stock==null || br_stock=='')){ + // notify(ST.Pleaseenter+' '+isBRStockDis_Name+' '+ST.for+' '+skuItem.ProductName,'LONG'); + // isValid=false; + // show_errorH=true,error_HInputKey='input2_'; + // } + else if(isDStockEnable==true && damage_stock!==0 && ( damage_stock==null || damage_stock=='')){ + notify(ST.Pleaseenter+' '+isDStockDis_Name+' '+ST.for+' '+skuItem.ProductName,'LONG'); + isValid=false; + show_errorH=true,error_HInputKey='input3_'; + } + else if(isLStockEnable==true && lost_stock!==0 && ( lost_stock==null || lost_stock=='')){ + notify(ST.Pleaseenter+' '+isDStockDis_Name+' '+ST.for+' '+skuItem.ProductName,'LONG'); + isValid=false; + show_errorH=true,error_HInputKey='input4_'; + } + else if(isExStockEnable==true && ex_stock!==0 && ( ex_stock==null || ex_stock=='')){ + notify(ST.Pleaseenter+' '+isExStockDis_Name+' '+ST.for+' '+skuItem.ProductName,'LONG'); + isValid=false; + show_errorH=true,error_HInputKey='input5_'; + } + else if(NrExpiry1Enable==true && NearExpiry_stock1!==0 && ( NearExpiry_stock1==null || NearExpiry_stock1=='')){ + notify(ST.Pleaseenter+' '+NrExpiry1_Dis_Name+' '+ST.for+' '+skuItem.ProductName,'LONG'); + isValid=false; + show_errorH=true,error_HInputKey='input6_'; + } + else if(NrExpiry2Enable==true && NearExpiry_stock2!==0 && ( NearExpiry_stock2==null || NearExpiry_stock2=='')){ + notify(ST.Pleaseenter+' '+NrExpiry2_Dis_Name+' '+ST.for+' '+skuItem.ProductName,'LONG'); + isValid=false; + show_errorH=true,error_HInputKey='input7_'; + } + else if(NrExpiry3Enable==true && NearExpiry_stock3!==0 && ( NearExpiry_stock3==null ||NearExpiry_stock3=='')){ + notify(ST.Pleaseenter+' '+NrExpiry3_Dis_Name+' '+ST.for+' '+skuItem.ProductName,'LONG'); + isValid=false; + show_errorH=true,error_HInputKey='input8_'; + } + // else if((isDStockEnable && isLStockEnable && isExStockEnable) && sumOfDamagedStocks>parseInt(stock)){ + // notify('Sum of '+isDStockDis_Name+','+isLStockDis_Name+' and '+isExStockDis_Name+' should be less than or equal to Stock for '+skuItem.ProductName,'LONG'); + // isValid=false; + // } + // else if((isDStockEnable && isLStockEnable) && sumOfDamagedStocks>parseInt(stock)){ + // notify('Sum of '+isDStockDis_Name+' and '+isLStockDis_Name+' should be less than or equal to '+isStockDis_Name+' '+ST.for+' '+skuItem.ProductName,'LONG'); + // isValid=false; + // } + // else if((isLStockEnable && isExStockEnable) && sumOfDamagedStocks>parseInt(stock)){ + // notify('Sum of '+isLStockDis_Name+' and '+isExStockDis_Name+' should be less than or equal to '+isStockDis_Name+' '+ST.for+' '+skuItem.ProductName,'LONG'); + // isValid=false; + // } + // else if((isDStockEnable && isExStockEnable) && sumOfDamagedStocks>parseInt(stock)){ + // notify('Sum of '+isDStockDis_Name+' and '+isExStockDis_Name+' should be less than or equal to '+isStockDis_Name+' '+ST.for+' '+skuItem.ProductName,'LONG'); + // isValid=false; + // } + else{ + + } + + if(show_errorH){ + errorobj['EF_InputKey']=error_HInputKey; + setErrorField(errorobj) + setError(true) + let refIn1=inputRefs.current[error_HInputKey+errorcatid+'_'+error_bid+'_'+error_pid] + refIn1.focus(); + } + + } + } + }) + ); + } + } + + }); + } + + } + } + }) + ); + + console.log('isValid:',isValid); + return isValid; + } + + function onStockValChange(item,skuItem,val,key,type=''){ + console.log("keycheck",key, val) + setError(false) + setErrorField({}) + if(val!=''){ + let isValid=validateNumber(val,type); + if(!isValid){ + return; + } + } + + let allSKUData=SKUStockData; + let defData={'SubCategoryId':item.SubCategoryId,'ProductId':skuItem.ProductId}; + const skud_index=allSKUData.findIndex(i=>i.SubCategoryId==item.SubCategoryId && i.ProductId==skuItem.ProductId); + const skud=skud_index>=0?(allSKUData[skud_index] || defData) : defData; + skud[key]=val; + + + if(key=='isSKUPresent'){ + skud['showAllSKU_Fields']=val==1?true:false; + } + + skud_index>=0?allSKUData[skud_index]=skud:allSKUData.push(skud); + // setSKUStockData(allSKUData); + BgWindowData(allSKUData) + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + + function openAddStkModal(cat,skuItem){ + setCurrentBrand(cat); + setCurrentProduct(skuItem); + let allSKUData=SKUStockData; + let defData={'SubCategoryId':cat.SubCategoryId,'ProductId':skuItem.ProductId}; + const skud_index=allSKUData.findIndex(i=>i.SubCategoryId==cat.SubCategoryId && i.ProductId==skuItem.ProductId); + const skud=skud_index>=0?(allSKUData[skud_index] || defData) : defData; + + setShowStockModal(true); + } + + function onSaveCancel(){ + setShowAlert(false) + } + + + async function onQRScanned(imgdata){ + + let QR_withValidChars=imgdata!=null && imgdata!=''?imgdata.replace(/["']/g,''):''; + let value=QR_withValidChars;//imgdata && imgdata[0] && imgdata[0].displayValue ? imgdata[0].displayValue :"" + // setTextValue(value,qtn,window) + console.log("value------",value) + onFormDataChange(value,'QRCode','qrtext') + getData(storeData,currentMenu,"","",value); + } + + + function onFormDataChange(val,key,type="text"){ + + // if(val!=''){ + // let isValid=validateNumber(val,type); + // console.log("type:",type,isValid); + // if(!isValid){ + // return; + // }r + // } + let data=AddVisFormData; + data[key]=val; + setAddVisFormData(data); + setHasUnsavedChanges(true); + setrerenderdata(!rerenderdata); + + console.log("addvisbiltydtaa--",AddVisFormData) + } + + + + function setStockDate(date){ + let d1=moment(date).format('DD/MM/YYYY'); + let cstock=currentStock; + cstock['date']=date; + cstock['mfd']=d1; + setCurrentStock(cstock); + setShowDatePicker(false); + } + + function setCS_Stock(key,val,type=''){ + if(val!=''){ + let isValid=validateNumber(val,type); + if(!isValid){ + return; + } + } + + let cstock=currentStock; + cstock[key]=val; + console.log(key,val) + setCurrentStock(cstock); + setrerendermodal(!rerendermodal); + } + + + + function getAllSum(mfdStocks=[],cstock={}){ + let {mfd,date,stock}=cstock + let sumOfAllStocks=parseInt(stock); + return new Promise((resolve,reject)=>{ + if(mfdStocks.length>0){ + for(let i in mfdStocks){ + let ds=mfdStocks[i]; + sumOfAllStocks+=parseInt(ds.stock); + if(i==mfdStocks.length-1){ + resolve(sumOfAllStocks) + } + } + } + else{ + resolve(sumOfAllStocks) + } + }).catch((err)=>{ + console.log(err); + return 0; + }) + } + + async function addMFDStock(){ + Keyboard.dismiss(); + let cat=currentBrand + let skuItem=currentProduct + let cstock=currentStock; + var allSKUData=SKUStockData; + let defData={'SubCategoryId':cat.SubCategoryId,'ProductId':skuItem.ProductId}; + const skud_index=allSKUData.findIndex(i=>i.SubCategoryId==cat.SubCategoryId && i.ProductId==skuItem.ProductId); + var skud=skud_index>=0?(allSKUData[skud_index] || defData) : defData; + let mfdStocks=skud['mfdStocks'] || []; + let product_total_stock=skud['Stock']; + let product_damage_stock=parseInt(skud['DamagedStock'] || 0); + let product_lost_stock=parseInt(skud['LostStock'] || 0); + let product_ex_stock=parseInt(skud['ExpiryStock'] || 0); + + let product_stock=product_ex_stock;//product_total_stock-(product_damage_stock+product_lost_stock+product_ex_stock); + let {mfd,date,stock,lotno}=cstock + + + + + if(mfd==null || mfd==''){ + notify(ST.Pleaseselectdate); + return ; + } + else if(stock==null || stock==''){ + notify(ST.Pleaseenterstock); + return ; + } + else if(lotno==null || lotno==''){ + notify(ST.Pleaseenterlotno); + return ; + } + else if(mfdStocks.findIndex(i=>i.mfd==mfd)>=0){ + notify(ST.ThisdateisalreadyaddedPleaseselectdifferentdate); + return ; + } + else { + // let sumOfAllStocks=await getAllSum(mfdStocks,cstock); + // console.log('product_stock',product_stock,',sum:',sumOfAllStocks,JSON.stringify(SKUStockData)) + // if(product_stock!==0 && (product_stock==null || product_stock=='')){ + // notify('Please enter sku stock'); + // return ; + // } + // else if(sumOfAllStocks>product_stock){ + // notify('Sum of all MFD stock cannot be greater than product stock count!'); + // return ; + // }else{ + console.log('added') + mfdStocks.push(cstock); + skud['mfdStocks']=mfdStocks; + skud_index>=0?allSKUData[skud_index]=skud:allSKUData.push(skud); + // setSKUStockData(allSKUData); + BgWindowData(allSKUData) + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + setCurrentStock({}); + setShowStockModal(false); + // } + + } + } + + + function removeMFDStock(){ + let cat=toRemoveCat; + let skuItem=toRemoveSKU; + let cstockIndex=toRemoveId; + let allSKUData=SKUStockData; + let defData={'SubCategoryId':cat.SubCategoryId,'ProductId':skuItem.ProductId}; + const skud_index=allSKUData.findIndex(i=>i.SubCategoryId==cat.SubCategoryId && i.ProductId==skuItem.ProductId); + const skud=skud_index>=0?(allSKUData[skud_index] || defData) : defData; + let mfdStocks=skud['mfdStocks'] || []; + mfdStocks.splice(cstockIndex,1); + skud['mfdStocks']=mfdStocks; + + skud_index>=0?allSKUData[skud_index]=skud:allSKUData.push(skud); + setShowRemoveConfirm_M(false); + // setSKUStockData(allSKUData); + BgWindowData(allSKUData) + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + + function showRemoveConfirm(cat,skuItem,cstock,cstockIndex){ + setToRemoveId(cstockIndex); + setToRemoveCat(cat); + setToRemoveSKU(skuItem); + setShowRemoveConfirm_M(true); + } + + function FilterStores(searchedQry){ + searchedQry=searchedQry.toLowerCase(); + console.log('searchedQry',searchedQry); + let arr=[]; + var arr2={}; + var newBrand={}; + if(searchedQry!=null && searchedQry!=''){ + // globalBrandData.map((item,index)=>{ + for(let i=0;i0){ + newBrandList.push(newBrand); + if(j==brandList.length-1){ + arr2.brandList=newBrandList; + arr.push(arr2); + } + } + + } + } + } + + + } + } + else{ + arr=globalBrandData; + } + + console.log('globalBrandData:',globalBrandData) + setBrandData(arr); + setrerenderdata(!rerenderdata) + setrerenderdata2(!rerenderdata2) + } + + async function focusToNext(cat,brand,sku,type='1',outerId, middleId,index){ + + let activeKey=''; + let arr=Object.keys(inputRefs.current); + + + // const middleFlatListRef = middleFlatListRefs.current[outerId]; + // if (middleFlatListRef) { + // const innerFlatListRef = innerFlatListRefs.current[middleId]; + // if (innerFlatListRef) { + // innerFlatListRef.scrollToIndex({ animated: true, index: index }); + // } + // } + + activeKey='input'+type+'_'+cat.SubCategoryId+'_'+brand.BrandId+'_'+sku.ProductId; + + let activeIndex=arr.indexOf(activeKey); + if(activeIndex>=0 && activeIndex0 && currentStock.date!=null && currentStock.date!='' ?new Date(currentStock.date):new Date(); + return ( + {setStockDate(selectedDate)}} + /> + ); + } + + function _render_StockModal(){ + let mfd=Object.keys(currentStock).length>0 && currentStock.mfd!=null && currentStock.mfd!='' ?currentStock.mfd:''; + let stock=Object.keys(currentStock).length>0 && currentStock.stock!=null?currentStock.stock:''; + let lotno=Object.keys(currentStock).length>0 && currentStock.lotno!=null?currentStock.lotno:''; + + return ( + + + + {ST.ExpiryDate} + + {mfd} + + {setShowDatePicker(true);}}> + + + + {showDatePicker==true && + renderDatePicker() + } + + + {ST.Stock} + + {setCS_Stock('stock',val,'numeric')}} + /> + + + + {ST.LotNo} + + {setCS_Stock('lotno',val,'text')}} + /> + + + + + {setCurrentStock({});setShowStockModal(false);}}> + {ST.Cancel} + + {addMFDStock()}}> + {ST.Add} + + + + + ) + } + + + function toggleCollapse(cat={},catIndex){ + let allData=brandData; + let isCollapsed=cat.isCollapsed; + cat['isCollapsed']=!isCollapsed; + allData[catIndex]=cat; + setBrandData(allData); + setGlobalBrandData(allData); + setrerenderdata(!rerenderdata); + } + + + function toggleCollapse2(cat={},catIndex,brand={},brand_index){ + let allData=brandData; + let isBrandCollapsed=brand.isBrandCollapsed; + let brandList=cat.brandList || []; + + brand['isBrandCollapsed']=!isBrandCollapsed; + brandList[brand_index]=brand; + cat['brandList']=brandList; + allData[catIndex]=cat; + setBrandData(allData); + setGlobalBrandData(allData); + setrerenderdata(!rerenderdata); + } + + function onChoiceSelect(item,skuItem,val,key,animatedChoice){ + console.log('onChoiceSelect',animatedChoice) + + var val1=0; + if(val==1){ + val1=1; + } + + if(animatedChoice!=null){ + Animated.timing(animatedChoice, { + toValue: val1, + duration:400, + useNativeDriver:false, + }).start(); + } + onStockValChange(item,skuItem,val,key,''); + } + + function _renderStocks(){ + let isHdrImgIndex=KPIFields.findIndex(i=>i.KPIFieldName=='HeaderImageAllow') + let isHdrImgKPIObj=isHdrImgIndex>=0?KPIFields[isHdrImgIndex]:{}; + let isHdrImgEnable=isHdrImgIndex>=0?isHdrImgKPIObj['KPIFieldEnable']:false; + + let isListedSKUIndex=KPIFields.findIndex(i=>i.KPIFieldName=='ListedSKU') + let isListedSKUKPIObj=isListedSKUIndex>=0?KPIFields[isListedSKUIndex]:{}; + let isListedSKUEnable=isListedSKUIndex>=0?isListedSKUKPIObj['KPIFieldEnable']:true; + + let isStockIndex=KPIFields.findIndex(i=>i.KPIFieldName=='Stock') + let isStockKPIObj=isStockIndex>=0?KPIFields[isStockIndex]:{}; + let isStockEnable=isStockIndex>=0?isStockKPIObj['KPIFieldEnable']:true; + let isStockDis_Name=isStockIndex>=0?isStockKPIObj['KPIFieldDisplayName']:''; + + console.log("istockdispname--",isStockDis_Name) + + let isBRStockIndex=KPIFields.findIndex(i=>i.KPIFieldName=='BackRoomStock') + let isBRStockKPIObj=isBRStockIndex>=0?KPIFields[isBRStockIndex]:{}; + let isBRStockEnable=isBRStockIndex>=0?isBRStockKPIObj['KPIFieldEnable']:true; + let isBRStockDis_Name=isBRStockIndex>=0?isBRStockKPIObj['KPIFieldDisplayName']:''; + + let isDStockIndex=KPIFields.findIndex(i=>i.KPIFieldName=='DamageStock') + let isDStockKPIObj=isDStockIndex>=0?KPIFields[isDStockIndex]:{}; + let isDStockEnable=isDStockIndex>=0?isDStockKPIObj['KPIFieldEnable']:false; + let isDStockDis_Name=isDStockIndex>=0?isDStockKPIObj['KPIFieldDisplayName']:''; + + let isLStockIndex=KPIFields.findIndex(i=>i.KPIFieldName=='LostStock') + let isLStockKPIObj=isLStockIndex>=0?KPIFields[isLStockIndex]:{}; + let isLStockEnable=isLStockIndex>=0?isLStockKPIObj['KPIFieldEnable']:false; + let isLStockDis_Name=isLStockIndex>=0?isLStockKPIObj['KPIFieldDisplayName']:''; + + let isExStockIndex=KPIFields.findIndex(i=>i.KPIFieldName=='ExpiredStock') + let isExStockKPIObj=isExStockIndex>=0?KPIFields[isExStockIndex]:{}; + let isExStockEnable=isExStockIndex>=0?isExStockKPIObj['KPIFieldEnable']:false; + let isExStockDis_Name=isExStockIndex>=0?isExStockKPIObj['KPIFieldDisplayName']:''; + + let isMFDIndex=KPIFields.findIndex(i=>i.KPIFieldName=='MFD') + let isMFD_KPIObj=isMFDIndex>=0?KPIFields[isMFDIndex]:{}; + let isMFDEnable=isMFDIndex>=0?isMFD_KPIObj['KPIFieldEnable']:false; + let isMFDDis_Name=isMFDIndex>=0?isMFD_KPIObj['KPIFieldDisplayName']:''; + + let NrExpiry1Index=KPIFields.findIndex(i=>i.KPIFieldName=='NrExpiry1') + let NrExpiry1KPIObj=NrExpiry1Index>=0?KPIFields[NrExpiry1Index]:{}; + let NrExpiry1Enable=NrExpiry1Index>=0?NrExpiry1KPIObj['KPIFieldEnable']:false; + let NrExpiry1_Dis_Name=NrExpiry1Index>=0?NrExpiry1KPIObj['KPIFieldDisplayName']:''; + + let NrExpiry2Index=KPIFields.findIndex(i=>i.KPIFieldName=='NrExpiry2') + let NrExpiry2KPIObj=NrExpiry2Index>=0?KPIFields[NrExpiry2Index]:{}; + let NrExpiry2Enable=NrExpiry2Index>=0?NrExpiry2KPIObj['KPIFieldEnable']:false; + let NrExpiry2_Dis_Name=NrExpiry2Index>=0?NrExpiry2KPIObj['KPIFieldDisplayName']:''; + + let NrExpiry3Index=KPIFields.findIndex(i=>i.KPIFieldName=='NrExpiry3') + let NrExpiry3KPIObj=NrExpiry1Index>=0?KPIFields[NrExpiry3Index]:{}; + let NrExpiry3Enable=NrExpiry1Index>=0?NrExpiry3KPIObj['KPIFieldEnable']:false; + let NrExpiry3_Dis_Name=NrExpiry1Index>=0?NrExpiry3KPIObj['KPIFieldDisplayName']:''; + + let MSLIndex=KPIFields.findIndex(i=>i.KPIFieldName=='MSL'); + let MSLObj=MSLIndex>=0?KPIFields[MSLIndex]:{}; + let isMSLAllow=MSLIndex>=0?MSLObj['KPIFieldEnable']:true; + + let NONMSL_Index=KPIFields.findIndex(i=>i.KPIFieldName=='ChildImageAllow'); + let NONMSL_Obj=NONMSL_Index>=0?KPIFields[NONMSL_Index]:{}; + let isNONMSL_Allow=NONMSL_Index>=0?NONMSL_Obj['KPIFieldEnable']:true; + + + // yes no fields + let OutofStockI=KPIFields.findIndex(i=>i.KPIFieldName=='OutofStock') + let OutofStockObj=OutofStockI>=0?KPIFields[OutofStockI]:{}; + let OutofStockEnable=OutofStockI>=0?OutofStockObj['KPIFieldEnable']:false; + let OutofStockDisName=OutofStockI>=0?OutofStockObj['KPIFieldDisplayName']:''; + + let LessThanMBQI=KPIFields.findIndex(i=>i.KPIFieldName=='LessThanMBQ') + let LessThanMBQObj=LessThanMBQI>=0?KPIFields[LessThanMBQI]:{}; + let LessThanMBQEnable=LessThanMBQI>=0?LessThanMBQObj['KPIFieldEnable']:false; + let LessThanMBQDisName=LessThanMBQI>=0?LessThanMBQObj['KPIFieldDisplayName']:''; + + let ShowMBQLabelI=KPIFields.findIndex(i=>i.KPIFieldName=='ShowMBQ') + let ShowMBQLabelObj=ShowMBQLabelI>=0?KPIFields[ShowMBQLabelI]:{}; + let ShowMBQLabel=ShowMBQLabelI>=0?ShowMBQLabelObj['KPIFieldEnable']:false; + let ShowMBQLabelDisName=ShowMBQLabelI>=0?ShowMBQLabelObj['KPIFieldDisplayName']:''; + + + let DefaultStockToggleI=KPIFields.findIndex(i=>i.KPIFieldName=='DefaultStockToggle') + let DefaultStockToggleObj=DefaultStockToggleI>=0?KPIFields[DefaultStockToggleI]:{}; + let DefaultStockToggle=DefaultStockToggleI>=0?DefaultStockToggleObj['KPIFieldEnable']:false; + let DefaultStockToggleValue=DefaultStockToggleI>=0?DefaultStockToggleObj['KPIFieldDisplayName']:"2"; + let deftogvalue=DefaultStockToggleValue=="3"?"3":(DefaultStockToggle=="1"?"1":"0"); + + + + return ( + + + { + const cat=item; + const outerId=index + console.log("cat--outter---",item) + const cindex=catImages.findIndex(i=>i.SubCategoryId==item.SubCategoryId); + const cimgName=cindex>=0?(catImages[cindex]?catImages[cindex].ImageName:''):''; + const cimgPath=cindex>=0?(catImages[cindex]?catImages[cindex].ImagePath:''):''; + const showIMg=cimgPath!='' && cimgPath!=null; + + let isCollapsed=cat.isCollapsed!=null?item.isCollapsed:false; + + // get error field category id + let EF_cat= errorfield.EF_cat!=null? errorfield.EF_cat:{}; + let errorcatid = EF_cat.SubCategoryId || ''; + + + // let isHdrImgDis_Name=isHdrImgIndex>=0?isHdrImgKPIObj['KPIFieldDisplayName']:''; + return( + + + {toggleCollapse(cat,index)}}> + + {item.SubCategoryName} + + {isCollapsed==true && } + {isCollapsed==false && } + + {( !isCollapsed && isHdrImgEnable==true) && + + + + { !showIMg && + {openCamera(item)}}> + + + } + { showIMg && + + + {openCamera(item)}}> + + + + } + } + + { !isCollapsed && + item.brandList!=null && item.brandList.length>0 && + middleItem.id} + ref={(ref) => { + if (ref) middleFlatListRefs.current[outerId] = ref; + }} + + renderItem={({item:brand,index:brand_index})=>{ + let isBrandCollapsed=brand.isBrandCollapsed!=null?brand.isBrandCollapsed:false; + const middleId=brand_index; + // get error field brand id + let EF_brand= errorfield.EF_brand!=null? errorfield.EF_brand:{}; + let error_bid = EF_brand.BrandId || ''; + + return ( + + {toggleCollapse2(cat,index,brand,brand_index)}}> + + {brand.BrandName} + + {isBrandCollapsed==true && } + {isBrandCollapsed==false && } + + + + { !isBrandCollapsed && + + { return skuIndex;}} + // keyExtractor={(innerItem) => innerItem.id} + ref={(ref) => { + if (ref) innerFlatListRefs.current[middleId] = ref; + }} + + renderItem={({item,index})=>{ + + const skus=item; + const sku_index=index; + + + + let thisCatSkuData_i=SKUStockData.findIndex(i=>i.SubCategoryId==cat.SubCategoryId && i.ProductId==skus.ProductId); + let thisCatSkuData=thisCatSkuData_i>=0?(SKUStockData[thisCatSkuData_i] || {}):{}; + let stock=thisCatSkuData.Stock!=null?thisCatSkuData.Stock:''; + let QrCode=thisCatSkuData.ProductCode!=null?thisCatSkuData.ProductCode:''; + + let br_stock=thisCatSkuData.BackRoomStock!=null?thisCatSkuData.BackRoomStock:''; + let Old_Stock=thisCatSkuData.Old_Stock!=null?thisCatSkuData.Old_Stock:''; + let OldDamagedStock=thisCatSkuData.OldDamagedStock!=null?thisCatSkuData.OldDamagedStock:''; + let OldLostStock=thisCatSkuData.OldLostStock!=null?thisCatSkuData.OldLostStock:''; + let OldExStock=thisCatSkuData.OldExStock!=null?thisCatSkuData.OldExStock:''; + let isSKUPresent=thisCatSkuData.isSKUPresent!=null?thisCatSkuData.isSKUPresent:0; + let showAllSKU_Fields=thisCatSkuData.showAllSKU_Fields!=null?thisCatSkuData.showAllSKU_Fields:false; + let OutOfStock=thisCatSkuData.OutOfStock!=null?thisCatSkuData.OutOfStock:deftogvalue; + let LessThanMBQ=thisCatSkuData.LessThanMBQ!=null?thisCatSkuData.LessThanMBQ:deftogvalue; + + let ex_stock=thisCatSkuData.ExpiryStock!=null?thisCatSkuData.ExpiryStock:''; + let damage_stock=thisCatSkuData.DamagedStock!=null?thisCatSkuData.DamagedStock:''; + let lost_stock=thisCatSkuData.LostStock!=null?thisCatSkuData.LostStock:''; + let mfdStocks=thisCatSkuData.mfdStocks || []; + + let NearExpiry_stock1=thisCatSkuData.NearExpiry1!=null?thisCatSkuData.NearExpiry1:''; + let NearExpiry_stock2=thisCatSkuData.NearExpiry2!=null?thisCatSkuData.NearExpiry2:''; + let NearExpiry_stock3=thisCatSkuData.NearExpiry3!=null?thisCatSkuData.NearExpiry3:''; + + let isMandatory=((isMSLAllow==1 || isMSLAllow=='true') && (skus.MSL==1 || skus.MSL=='true') ) || ((isNONMSL_Allow==1 || isNONMSL_Allow=='true') && (skus.MSL!=1 && skus.MSL!='true') ) + let IsCompetitor=skus.IsCompetitor=='1' || skus.IsCompetitor==1?true:false; + + + let xpos=OutOfStock=="3"?0:(OutOfStock==1?-75:0); + if(skus.animatedChoice!=null ){ + xpos=skus.animatedChoice.interpolate({ + inputRange:[0,1], + outputRange:[0,-75], + }); + } + + let xpos1=LessThanMBQ=="3"?0:( LessThanMBQ==1?-75:0); + if(skus.animatedChoice2!=null ){ + xpos1=skus.animatedChoice2.interpolate({ + inputRange:[0,1], + outputRange:[0,-75], + }); + } + + // change color for competitor + let card_bg=(IsCompetitor?{backgroundColor:PageTheme.$card_colorYellowLight}:(isMandatory?{backgroundColor:PageTheme.$fifth_color}:{})); + let card_border=(IsCompetitor?{borderColor:PageTheme.$card_colorYellowDark}:(isMandatory?{borderColor:PageTheme.$primary_color}:{})); + + // get error field product id + let EF_product= errorfield.EF_product!=null? errorfield.EF_product:{}; + let error_pid = EF_product.ProductId || ''; + let EF_InputKey=errorfield.EF_InputKey; + let show_errorhere =errorcatid==cat.SubCategoryId && error_bid==brand.BrandId && error_pid==skus.ProductId; + + let errorStyle_ST=( error && show_errorhere && EF_InputKey=='input1_'? customStyle.stk_inptSTyle_error :{}); + let errorStyle_BS=( error && show_errorhere && EF_InputKey=='input2_'? customStyle.stk_inptSTyle_error :{}); + let errorStyle_DS=( error && show_errorhere && EF_InputKey=='input3_'? customStyle.stk_inptSTyle_error :{}); + let errorStyle_LS=( error && show_errorhere && EF_InputKey=='input4_'? customStyle.stk_inptSTyle_error :{}); + let errorStyle_EXS=( error && show_errorhere && EF_InputKey=='input5_'? customStyle.stk_inptSTyle_error :{}); + let errorStyle_NEX1=( error && show_errorhere && EF_InputKey=='input6_'? customStyle.stk_inptSTyle_error :{}); + let errorStyle_NEX2=( error && show_errorhere && EF_InputKey=='input7_'? customStyle.stk_inptSTyle_error :{}); + let errorStyle_NEX3=( error && show_errorhere && EF_InputKey=='input8_'? customStyle.stk_inptSTyle_error :{}); + + + + return( + + {isListedSKUEnable==true && + + + {console.log('valchange:',val); let val1=(val==true)?1:0; onStockValChange(cat,skus,val1,'isSKUPresent','') }} + style={[customStyle.openStkP_checkbox,(Platform.OS=='ios'?{height:20,width:20,marginTop:8,marginLeft:8,}:{})]} + tintColors={{ true:PageTheme.$primary_color, false:PageTheme.$text_color_light }} + /> + + {skus.ProductName} + + } + + {isListedSKUEnable!=true && {skus.ProductName}} + {((isListedSKUEnable==true && showAllSKU_Fields==true) || isListedSKUEnable==false) && + + {ShowMBQLabel==true && + + + {'MBQ :'} + {skus.MBQ} + + + } + {OutofStockEnable==true && + {OutofStockDisName} + + + + {onChoiceSelect(cat,skus,1,'OutOfStock',skus.animatedChoice)}}> + {ST.Yes} + + {onChoiceSelect(cat,skus,0,'OutOfStock',skus.animatedChoice)}}> + {ST.No} + + + + } + + {LessThanMBQEnable==true && + {LessThanMBQDisName} + + + + + {onChoiceSelect(cat,skus,1,'LessThanMBQ',skus.animatedChoice2)}}> + {ST.Yes} + + {onChoiceSelect(cat,skus,0,'LessThanMBQ',skus.animatedChoice2)}}> + {ST.No} + + + + } + + {(isStockEnable==true) && + + + {/* {isStockDis_Name} */} + {"QR Code"} + {inputRefs.current['input1_'+cat.SubCategoryId+'_'+brand.BrandId+'_'+skus.ProductId]=reff;}} + style={[customStyle.openStk_prd_inputStyle,customStyle.openStk_prd_flex_inputStyle,customStyle.stk_inptSTyle,errorStyle_ST]} + placeholder="" + autoComplete='off' + maxLength={18} + placeholderTextColor={PageTheme.$placeholder_color} + value={(skus.ProductCode+'' || '')} + keyboardType='number-pad' + returnKeyType={(Platform.OS==='ios')?'done':'next'} + blurOnSubmit={false} + // onChangeText={(val)=>{ onStockValChange(cat,skus,val,'QRcode','numeric')}} + // onEndEditing={(e)=>{ checkStockVal(cat,skus,'Stock','Old_Stock',Old_Stock)}} + // onSubmitEditing={()=>{focusToNext(cat,brand,skus,'1',outerId, middleId,index)}} + /> + + + } + + {(isStockEnable==true) && + + + {/* {isStockDis_Name} */} + {"Stock"} + {inputRefs.current['input1_'+cat.SubCategoryId+'_'+brand.BrandId+'_'+skus.ProductId]=reff;}} + style={[customStyle.openStk_prd_inputStyle,customStyle.openStk_prd_flex_inputStyle,customStyle.stk_inptSTyle,errorStyle_ST]} + placeholder="" + autoComplete='off' + maxLength={6} + placeholderTextColor={PageTheme.$placeholder_color} + value={(stock+'' || '')} + keyboardType='number-pad' + returnKeyType={(Platform.OS==='ios')?'done':'next'} + blurOnSubmit={false} + onChangeText={(val)=>{ onStockValChange(cat,skus,val,'Stock','numeric')}} + // onEndEditing={(e)=>{ checkStockVal(cat,skus,'Stock','Old_Stock',Old_Stock)}} + onSubmitEditing={()=>{focusToNext(cat,brand,skus,'1',outerId, middleId,index)}} + /> + + + } + {/* {(isBRStockEnable==true) && + + + {isBRStockDis_Name} + {inputRefs.current['input2_'+cat.SubCategoryId+'_'+brand.BrandId+'_'+skus.ProductId]=reff;}} + style={[customStyle.openStk_prd_inputStyle,customStyle.openStk_prd_flex_inputStyle,customStyle.stk_inptSTyle,errorStyle_BS]} + placeholder="" + autoComplete='off' + maxLength={6} + placeholderTextColor={PageTheme.$placeholder_color} + value={(br_stock+'')} + keyboardType='number-pad' + returnKeyType={(Platform.OS==='ios')?'done':'next'} + blurOnSubmit={false} + onChangeText={(val)=>{ onStockValChange(cat,skus,val,'BackRoomStock','numeric')}} + // onEndEditing={(e)=>{ checkStockVal(cat,skus,'Stock','Old_Stock',Old_Stock)}} + onSubmitEditing={()=>{focusToNext(cat,brand,skus,'2',outerId, middleId,index)}} + /> + + + } */} + {(isDStockEnable==true) && + + + {isDStockDis_Name} + {inputRefs.current['input3_'+cat.SubCategoryId+'_'+brand.BrandId+'_'+skus.ProductId]=reff;}} + style={[customStyle.openStk_prd_inputStyle,customStyle.openStk_prd_flex_inputStyle,customStyle.stk_inptSTyle,errorStyle_DS]} + placeholder="" + autoComplete='off' + placeholderTextColor={PageTheme.$placeholder_color} + value={(damage_stock+'')} + maxLength={6} + keyboardType='number-pad' + returnKeyType={(Platform.OS==='ios')?'done':'next'} + blurOnSubmit={false} + onChangeText={(val)=>{ onStockValChange(cat,skus,val,'DamagedStock','numeric')}} + // onEndEditing={(e)=>{ checkStockVal(cat,skus,'DamagedStock','OldDamagedStock',OldDamagedStock)}} + onSubmitEditing={()=>{focusToNext(cat,brand,skus,'3',outerId, middleId,index)}} + /> + + + } + {(isLStockEnable==true) && + + + {isLStockDis_Name} + {inputRefs.current['input4_'+cat.SubCategoryId+'_'+brand.BrandId+'_'+skus.ProductId]=reff;}} + style={[customStyle.openStk_prd_inputStyle,customStyle.openStk_prd_flex_inputStyle,customStyle.stk_inptSTyle,errorStyle_LS]} + placeholder="" + autoComplete='off' + placeholderTextColor={PageTheme.$placeholder_color} + value={(lost_stock+'')} + maxLength={6} + keyboardType='number-pad' + returnKeyType={(Platform.OS==='ios')?'done':'next'} + blurOnSubmit={false} + onChangeText={(val)=>{ onStockValChange(cat,skus,val,'LostStock','numeric')}} + // onEndEditing={(e)=>{ checkStockVal(cat,skus,'LostStock','OldLostStock',OldLostStock)}} + onSubmitEditing={()=>{focusToNext(cat,brand,skus,'4',outerId, middleId,index)}} + /> + + + } + {(isExStockEnable==true ) && + // && !isMFDEnable + + + {isExStockDis_Name} + {inputRefs.current['input5_'+cat.SubCategoryId+'_'+brand.BrandId+'_'+skus.ProductId]=reff;}} + style={[customStyle.openStk_prd_inputStyle,customStyle.openStk_prd_flex_inputStyle,customStyle.stk_inptSTyle,errorStyle_EXS]} + placeholder="" + autoComplete='off' + placeholderTextColor={PageTheme.$placeholder_color} + value={(ex_stock+'')} + maxLength={6} + keyboardType='number-pad' + returnKeyType={(Platform.OS==='ios')?'done':'next'} + blurOnSubmit={false} + onChangeText={(val)=>{ onStockValChange(cat,skus,val,'ExpiryStock','numeric')}} + // onEndEditing={(e)=>{ checkStockVal(cat,skus,'ExpiryStock','OldExStock',OldExStock)}} + onSubmitEditing={()=>{focusToNext(cat,brand,skus,'5',outerId, middleId,index)}} + /> + + + } + + {(NrExpiry1Enable==true ) && + + + {NrExpiry1_Dis_Name} + {inputRefs.current['input6_'+cat.SubCategoryId+'_'+brand.BrandId+'_'+skus.ProductId]=reff;}} + style={[customStyle.openStk_prd_inputStyle,customStyle.openStk_prd_flex_inputStyle,customStyle.stk_inptSTyle,errorStyle_NEX1]} + placeholder="" + autoComplete='off' + placeholderTextColor={PageTheme.$placeholder_color} + value={(NearExpiry_stock1+'')} + maxLength={6} + keyboardType='number-pad' + returnKeyType={(Platform.OS==='ios')?'done':'next'} + blurOnSubmit={false} + onChangeText={(val)=>{ onStockValChange(cat,skus,val,'NearExpiry1','numeric')}} + onSubmitEditing={()=>{focusToNext(cat,brand,skus,'6',outerId, middleId,index)}} + /> + + + } + {(NrExpiry2Enable==true ) && + + + {NrExpiry2_Dis_Name} + {inputRefs.current['input7_'+cat.SubCategoryId+'_'+brand.BrandId+'_'+skus.ProductId]=reff;}} + style={[customStyle.openStk_prd_inputStyle,customStyle.openStk_prd_flex_inputStyle,customStyle.stk_inptSTyle,errorStyle_NEX2]} + placeholder="" + autoComplete='off' + placeholderTextColor={PageTheme.$placeholder_color} + value={(NearExpiry_stock2+'')} + maxLength={6} + keyboardType='number-pad' + returnKeyType={(Platform.OS==='ios')?'done':'next'} + blurOnSubmit={false} + onChangeText={(val)=>{ onStockValChange(cat,skus,val,'NearExpiry2','numeric')}} + onSubmitEditing={()=>{focusToNext(cat,brand,skus,'7',outerId, middleId,index)}} + /> + + + } + {(NrExpiry3Enable==true ) && + + + {NrExpiry3_Dis_Name} + {inputRefs.current['input8_'+cat.SubCategoryId+'_'+brand.BrandId+'_'+skus.ProductId]=reff;}} + style={[customStyle.openStk_prd_inputStyle,customStyle.openStk_prd_flex_inputStyle,customStyle.stk_inptSTyle,errorStyle_NEX3]} + placeholder="" + autoComplete='off' + placeholderTextColor={PageTheme.$placeholder_color} + value={(NearExpiry_stock3+'')} + maxLength={6} + keyboardType='number-pad' + returnKeyType={(Platform.OS==='ios')?'done':'next'} + blurOnSubmit={false} + onChangeText={(val)=>{ onStockValChange(cat,skus,val,'NearExpiry3','numeric')}} + onSubmitEditing={()=>{focusToNext(cat,brand,skus,'8',outerId, middleId,index)}} + /> + + + } + {(isMFDEnable==true) && + + {isMFDDis_Name} + {openAddStkModal(cat,skus)}}> + {ST.Add} + + + + {ST.Date} + + + {ST.Stock} + + + {ST.LotNo} + + + {ST.Actions} + + + + + { + mfdStocks.map((mfd_Item,mfd_index)=>{ + let mfd=mfd_Item.mfd || ''; + let stock=mfd_Item.stock || ''; + let lotno=mfd_Item.lotno || ''; + + return( + + + {mfd} + + + {stock} + + + {lotno} + + + {showRemoveConfirm(cat,skus,mfd_Item,mfd_index)}}> + + + + + ) + }) + } + + + } + + } + + ) + }}/> + } + + + ) + }} + /> + } + + + ); + }} + /> + + ) + } + + + + + + return ( + + {processing && } + + + + {ConfirmSaveAlert(props,showRemoveConfirm_M,()=>{setShowRemoveConfirm_M(false)},removeMFDStock,ST.Doyoureallywanttoremovethisstock)} + {ConfirmSaveAlert(props,showAlert,onSaveCancel,saveData)} + {rerendermodal==rerendermodal && _render_StockModal()} + {setShowQRCamera(false);onQRScanned(imgData)}} showCamera={showQRCamera} onHideCamera={()=>{setShowQRCamera(false);}}/> + + {setShowCamera(false);getImage(imgData)}} showCamera={showCamera} onHideCamera={()=>{setShowCamera(false);}}/> + + + + {/* + {setSearchedItem(val); FilterStores(val)}} + /> + {FilterStores(searchedItem)}}> + + + */} + + + + + + {"QR Code"} + + {onFormDataChange(val,'QRCode',"qrtext");}} + autoComplete='off' + /> + {setQREnable(true);setQRqtnData({});setShowQRCamera(true);}}> + + + + + + + + {/* + + {"Asset Code"} + {onFormDataChange(val,'AssetCode');}} + autoComplete='off' + /> + + */} + {/* + + {ST.Image} + + + { (AddVisFormData.Image1Path=='' || AddVisFormData.Image1Path==null) && + {openCamera('1')}}> + + + } + { (AddVisFormData.Image1Path!='' && AddVisFormData.Image1Path!=null) && + + + {openCamera('1')}}> + + + + } + + + + + + + {Add_AddVis()}}> + {ST.Add} + + */} + + + + { Object.keys(storeData).length>0 && + _renderStocks() + } + + + {submitOpeningStock()}}/> + + + + + ); + } + + + +export default connect(mapStateToProps, mapDispatchToProps)(StockQRCode); \ No newline at end of file diff --git a/PerformicsSrc/src/screens/StockUniqueQRCode.js b/PerformicsSrc/src/screens/StockUniqueQRCode.js new file mode 100644 index 0000000..4693056 --- /dev/null +++ b/PerformicsSrc/src/screens/StockUniqueQRCode.js @@ -0,0 +1,752 @@ +import React,{useState,useEffect, useRef} from 'react'; +import Container from '../components/container'; +import { useRoute } from '@react-navigation/native'; +import { customStyles,GetPageTheme } from "../styles/Global"; +import {TextInput,View,Text,TouchableOpacity,Platform,FlatList, Alert, KeyboardAvoidingView, Keyboard, AppState} from 'react-native'; +import { connect } from 'react-redux'; +import { mapStateToProps,mapDispatchToProps } from '../reducers/contextProvider'; +import {notify} from '../components/notify'; +import moment from 'moment'; +import { restore_ImageWithMetaData} from '../controller/functions'; +import {set_item,clear_item} from '../components/localStorage'; +import {db, ImageFolderPath} from '../constants/constants'; +import CustomHeader from '../components/customHeader'; +import { FontAwesome, Ionicons} from '../components/icons'; +import CustomLoader from '../components/CustomLoader'; +import LinearGradient from 'react-native-linear-gradient'; +import { AppTables } from '../constants/tableConstants'; +import * as RNFS from 'react-native-fs'; +import GradientButton from '../components/gradientButton'; + +import { ConfirmSaveAlert} from '../components/alert'; +import CustomCamera from '../components/Camera'; +import QRCodeScannerKit from '../components/QRCodeScannerKit'; + + +function StockUniqueQRCode(props) { + const route = useRoute(); + const ST=props.StaticText || {}; + // get all theme styles acc to current theme set + const PageTheme=GetPageTheme(props.DarkMode,route.name); + const customStyle=customStyles(props.DarkMode,route.name); + + const [processing, setProcessing] = useState(false); + const [loaderTitle, setLoaderTitle] = useState(); + const [isAdhocScreen, setIsAdhocScreen] = useState(false); + const [storeData, setStoreData] = useState({}); + const [StoreCameraAllow, setStoreCameraAllow] = useState(true); + const [currentMenu, setCurrentMenu] = useState({}); + const [brandData, setBrandData] = useState([]); + const [globalBrandData, setGlobalBrandData] = useState([]); + const [rerenderdata, setrerenderdata]= useState(0); + const [rerenderdata2, setrerenderdata2]= useState(0); + + const [catImages, setCatImages] = useState([]); + const [SKUStockData, setSKUStockData] = useState([]); + + const [KPIFields, setKPIFields] = useState([]); + const [showSwitchCamera,setShowSwitchCamera]= useState(false); + const [showAlert, setShowAlert] = useState(false); + const [toRemoveId, setToRemoveId] = useState(''); + const [toRemoveItem,setToRemoveItem]= useState({}); + const [showRemoveConfirm_M,setshowRemoveConfirm_M]= useState(false); + + + const [AddVisFormData, setAddVisFormData] = useState({}); + const [QREnable, setQREnable] = useState(false); + const [QRqtnData, setQRqtnData] = useState({}); + const [showQRCamera, setShowQRCamera] = useState(false); + const [products, setProducts] = useState([]); + + const [hasUnsavedChanges,setHasUnsavedChanges] = useState(false); + const [showCamera, setShowCamera] = useState(false); + const [getImageProps,setGetImageProps]= useState({}); + const [ShowCatWise,setShowCatWise]= useState(false); + const [CatData,setCatData]= useState(false); + + const hasUnsavedChangesRef = React.useRef(hasUnsavedChanges); + const WindowDataRef=React.useRef(SKUStockData); + const WindowDataImgRef = React.useRef(catImages); + const StoreIdRef=React.useRef(null); + const ScreenNameRef=React.useRef(''); + const [errorfield, setErrorField] = useState({}); + const [error, setError] = useState(false); + const PSGroupData=React.useRef(''); // Grouping data (Category/ SubCategory/ Brand ) for BG save fuunctionality with Partial Save Scenario + const BGPSAllow=React.useRef(false); + + + const d1=new Date(); + const d2=moment(d1).format('MM/DD/YYYY'); + + const [productList, setProductList] = useState([]); + + + + useEffect(() => { + setLoaderTitle(ST.Loading+'...') + let params=props.route.params? props.route.params:{}; + let storeData1=params.storeData || {}; + let menu1=params.menu || {}; + let ShowCatWise1=params.ShowCatWise!=null?params.ShowCatWise:false; + let CatData1=params.CatData!=null?params.CatData:{}; + let isAdhoc=params.isAdhoc || false; + + console.log('params.ShowCatWise',params.ShowCatWise); + + setIsAdhocScreen(isAdhoc); + setShowCatWise(ShowCatWise1); + setCatData(CatData1); + setStoreData(storeData1); + setCurrentMenu(menu1); + + let cameraAllow=storeData1.CameraAllow=='true' || storeData1.CameraAllow==1?true:false; + setStoreCameraAllow(cameraAllow); + + StoreIdRef.current=storeData1.StoreId + ScreenNameRef.current=menu1.ScreenName + getData(storeData1,menu1,ShowCatWise1,CatData1); + + const AppStateSubscription = AppState.addEventListener('change', (pro)=>{ _handleAppStateChange(pro)}); + const unsubscribe=props.navigation.addListener('beforeRemove', onBeforeRemove); + + return function cleanup() { + AppStateSubscription.remove(); + // AppState.removeEventListener('change', (pro)=>{ _handleAppStateChange(SKUStockData,pro)}); + return unsubscribe; + }; + + }, []); + + const _handleAppStateChange = async (nextAppState) => { + if(nextAppState =='background' && hasUnsavedChangesRef.current==true){ + let newData = { + storeBGData:WindowDataRef.current, + menuName:ScreenNameRef.current, + StoreId1:StoreIdRef.current, + visiteDate:d2, + BGPSAllow:BGPSAllow.current, + PSGroupData:PSGroupData.current, + } + let WindowsStr= JSON.stringify(newData) + console.log("checkwindata:",WindowsStr) + await set_item('storeData',WindowsStr); + + let newDataForSubCateory ={ + storeBGDataHdr:WindowDataImgRef.current, + menuName:ScreenNameRef.current, + StoreId1:StoreIdRef.current, + visiteDate:d2, + BGPSAllow:BGPSAllow.current, + PSGroupData:PSGroupData.current, + } + let WindowsStr2= JSON.stringify(newDataForSubCateory) + console.log("checkwindatahdr:",WindowsStr2) + await set_item('storeDataHdr',WindowsStr2); + } + } + + useEffect(() => { + const unsubscribe=props.navigation.addListener('beforeRemove', onBeforeRemove); + return unsubscribe; + // AppState.removeEventListener('change',(pro)=>{ _handleAppStateChange(SKUStockData,pro)}); + // AppState.addEventListener('change',(pro)=>{ _handleAppStateChange(SKUStockData,pro)}); + }, [hasUnsavedChanges]); + + useEffect(() => { + const unsubscribe=props.navigation.addListener('beforeRemove', onBeforeRemove); + return unsubscribe; + }, [showCamera]); + + function onBeforeRemove(e){ + if(showCamera==true){ + e.preventDefault(); + setShowCamera(false); + } + else{ + if (hasUnsavedChanges==true) { + e.preventDefault(); // Prevent default behavior of leaving the screen + onRemoveScreen(e); + } + else{ + return; + } + } + } + + function BgUnsavedChanges(val){ + hasUnsavedChangesRef.current=val + setHasUnsavedChanges(val); + } + + function BgWindowData(val){ + WindowDataRef.current=val + setSKUStockData(val); + } + + function BgWindowDataHdr(val){ + WindowDataImgRef.current=val + setCatImages(val); + } + + + + function onRemoveScreen(e){ + Alert.alert( + "", + ST.Doyoureallywanttoexitthescreen, + [ + { + text: ST.Cancel, + onPress: () => {}, + style: "cancel" + }, + { text: ST.OK, onPress: async () => { + // setHasUnsavedChanges(false); + BgUnsavedChanges(false) + await clear_item('storeData') + props.navigation.dispatch(e.data.action);} } + ] + ); + } + +async function getData(storeData1, menu1, ShowCatWise1, CatData1 = {}, QRcode = null) { + try { + let { StoreId } = storeData1; + + db.transaction((txn) => { + + // ✅ Step 1: Load existing data if no QR code is scanned + if (!QRcode) { + setLoaderTitle(ST.Loading + '...'); + setProcessing(true); + + let loadQuery = `SELECT * FROM ${AppTables.QRCODE_SCANNER} WHERE STORE_ID = ? AND VISIT_DATE = ?`; + txn.executeSql(loadQuery, [StoreId, d2], (txn2, txnres) => { + console.log('Existing products:', txnres.rows.length); + + let existingProducts = []; + for (let i = 0; i < txnres.rows.length; i++) { + existingProducts.push({ + // id: i + 1, + // code: txnres.rows.item(i).UNIQUE_QRCODE, + // productName: txnres.rows.item(i).PRODUCT_NAME || 'Unknown Product', + // qrCodeId: txnres.rows.item(i).QRCODE_ID + id: i + 1, ...txnres.rows.item(i) + + }); + } + + console.log("Loaded existing products:", existingProducts); + setProducts(existingProducts); + setProcessing(false); + + }, (txnE, txnerr) => { + console.log('Error loading existing data:', txnerr); + }); + } + + // ✅ Step 2: Handle new QR code scan + if (QRcode) { + // Check for duplicates + const exists = products.some((item) => item.code === QRcode); + if (exists) { + Alert.alert('Duplicate', 'This item is already added to the list.'); + return; + } + + // ✅ Improved QR extraction with validation + let extractedCode = 'N/A'; // Default if extraction fails + + console.log("qrcode---",QRcode) + + const qrParts = QRcode.split('-'); + if (qrParts.length >= 2) { + extractedCode = qrParts[qrParts.length - 2]; // Second-last part + } + + console.log('Extracted Product Code:', extractedCode); + + // ✅ Query `Product_Master` for product name + txn.executeSql( + `SELECT ProductName,ProductId FROM Product_Master WHERE ProductCode = ?`, + [extractedCode], + (txn2, res) => { + let productName = 'Unknown Product'; + let productId ='' + if (res.rows.length > 0) { + productName = res.rows.item(0).ProductName; + productId = res.rows.item(0).ProductId; + } + + console.log('Matched Product Name:', productName); + + // ✅ Add new product with name to the list and re-index IDs + setProducts((prev) => { + // const newProduct = { + // id: prev.length + 1, + // code: QRcode, + // productName: productName + // }; + + const newProduct = { id: prev.length + 1, code: QRcode, productName: productName,productId:productId }; + + // const updatedList = [...prev, newProduct]; + const updatedList = [newProduct, ...prev]; + return updatedList.map((item, index) => ({ + ...item, + id: index + 1 // ✅ Re-index IDs + })); + }); + }, + (txn2, err) => { + console.error('Error querying Product_Master:', err); + } + ); + } + }); + + } catch (err) { + console.error('Error in getData:', err); + } +} + + + + + async function getImage(imgdata){ + let cat=getImageProps.option || ''; + if(typeof imgdata =='object' && imgdata.errorCode=='camera_unavailable'){ + notify(ST.Cameraunavailable); + } + else if(typeof imgdata =='object' && imgdata.uri!=null){ + const img=imgdata; + const imgurl=img.uri, imgWidth=img.width, imgHeight=img.ExtendedHeight; + let isImgFromGallery=img.fromGallery!=null?img.fromGallery:false; + let picture_clickedd=isImgFromGallery==true?img.datetime:new Date(); + let picture_clicked_time=moment(picture_clickedd).format('DD-MM-YYYY HH:mm:ss') + + const mark_text1=picture_clicked_time; + const mark_text2='Store Name:'+storeData.StoreName+' | Store Id:'+storeData.StoreId+' | User Id:'+storeData.EmpId+' | Image Type: '+currentMenu.MenuName+' | Date:'+picture_clicked_time; + + + let picture_clicked_date1=moment(picture_clickedd).format('YYYYMMDD'); + let picture_clicked_time1=moment(picture_clickedd).format('HHmmss'); + let filename=storeData.StoreId+'_'+(props.UserId || '')+'_Stock-'+picture_clicked_date1+'_'+picture_clicked_time1+'.jpg'; + + let allIMgs=catImages; + let defData={'SubCategoryId':cat.SubCategoryId}; + const cindex=allIMgs.findIndex(i=>i.SubCategoryId==cat.SubCategoryId); + const imgData=cindex>=0?(allIMgs[cindex] || defData):defData; + imgData.ImageName=filename; + + let imagePath='file://'+ImageFolderPath+currentMenu.ScreenName+"/"+filename; + RNFS.copyFile(imgurl, imagePath) + .then(async(resn) => { + // render data with clicked image + let uri=imagePath; + console.log('image marker',uri); + imgData.ImagePath=uri; + cindex>=0?allIMgs[cindex]=imgData:allIMgs.push(imgData); + setCatImages(allIMgs); + console.log("catimages--",catImages) + // setHasUnsavedChanges(true); + BgWindowDataHdr(allIMgs) + + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + + // add metdata then resize image and restored back to the imagePath + let restore_data={"destFilePath":imagePath,"imgurl":imgurl,imgWidth,imgHeight,mark_text1,mark_text2} + let is_restored=await restore_ImageWithMetaData(restore_data,imgdata); + console.log("image restored:",is_restored); + }) + .catch(err => { + console.log(ST.Errorimagefilewritefailed+'!!!'); + console.log(err.message, err.code); + }); + } + } + + + async function submitQRData(){ + let isvalid=await validate(); + console.log("isvalidd--",isvalid); + if(isvalid){ + Keyboard.dismiss(); + setShowAlert(true); + } + } + + async function saveData(){ + BgUnsavedChanges(false) + setShowAlert(false); + setLoaderTitle(ST.SavingData+'...'); + setProcessing(true); + try { + let {StoreId}=storeData; + db.transaction(async function (txn) { + + let q = `DELETE FROM ${AppTables.QRCODE_SCANNER} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' `; + + // remove old data + txn.executeSql(q, [], async function (txn2, txnres) { + console.log('QRCODE_SCANNER data deleted'); + }, function (txnE, txnerr) { console.log(txnerr); }); + + insertData() + }); + } catch (err) { + console.log(err); + } + } + + + + async function insertData(seq = 0) { + try { + let {StoreId}=storeData; + console.log('scannedProducts before insertion:', products,StoreId); // ✅ Verify the data + + if (products.length === 0) { + console.log('No products to insert.'); + notify('No products to insert!'); + return; + } + + db.transaction(async (txn) => { + let scanValues = products.map((product, index) => { + seq++; + console.log('scannedProducts for insertion:', products); + const {code,id,productName,productId} = product; + console.log("checkproducts:",product) + + // let SKU_UID = `SKU${seq}${Math.floor(Math.random() * 1000)}`; + + return `('${id || product.QRCODE_ID}', '${StoreId}','${d2}','${code || product.UNIQUE_QRCODE}','${productName || product.PRODUCT_NAME}','${productId || product.PRODUCT_ID}','${d2}')`; + }).join(", "); // ✅ Combine all values into a single query + + let addScanQuery=`INSERT INTO ${AppTables.QRCODE_SCANNER} (QRCODE_ID,STORE_ID,VISIT_DATE,UNIQUE_QRCODE,PRODUCT_NAME,PRODUCT_ID,ADDED_DATE) VALUES ${scanValues} `; + + console.log('Insert query:', addScanQuery); + + txn.executeSql( + addScanQuery, + [], + (txn2, res) => { + console.log('Data inserted successfully'); + notify('Stock inserted successfully!'); + setProcessing(false); + setProductList([]); // ✅ Clear the list after insertion + }, + (error) => { + console.error('Insert Error:', error); + notify('Failed to insert data!'); + } + ); + }); + + } catch (err) { + console.error('Insertion Error:', err); + notify('An error occurred while inserting data!'); + } + } + + + + async function validate(){ + let isValid=true; + + if(products.length === 0){ + notify("Please Scan QR Code"); + isValid=false; + } + console.log('isValid:',isValid); + return isValid; + } + + + function onSaveCancel(){ + setShowAlert(false) + } + + function showRemoveConfirm(item,index){ + console.log("checking-------",item) + + if(item.QRCODE_ID>0){ + console.log("checking--id-----",item.QRCODE_ID) + setToRemoveId(item.QRCODE_ID); + setToRemoveItem(item); + setshowRemoveConfirm_M(true); + } + else{ + setToRemoveId(index); + setToRemoveItem(item); + setshowRemoveConfirm_M(true); + } + + } + + //===============neww deletion + async function Remove_QRdata() { + let { StoreId } = storeData; + let index = toRemoveId; + let item = toRemoveItem; + console.log("Deleting frommmm-----"); + + db.transaction(async (txn) => { + // ✅ If item exists in the database + console.log("Deleting from -----",item); + if (item.QRCODE_ID && item.QRCODE_ID !== 'undefined' && index >= 0) { + console.log("Deleting from DB, ID:", item.qrCodeId); + + let deleteQuery = `DELETE FROM ${AppTables.QRCODE_SCANNER} WHERE STORE_ID = '${StoreId}'AND VISIT_DATE = '${d2}'AND QRCODE_ID = '${item.QRCODE_ID}' `; + console.log("deleteQuery:", deleteQuery); + + txn.executeSql(deleteQuery, [], (txn3, txnres) => { + console.log('QR-Code data deleted:', item.QRCODE_ID); + + // ✅ Remove from the local products list + const updatedProducts = products + .filter((p) => p.QRCODE_ID !== item.QRCODE_ID) + .map((p, idx) => ({ ...p, id: idx + 1 })); // ✅ Reassign IDs + + setProducts([...updatedProducts]); // Ensure a fresh reference for re-render + setHasUnsavedChanges(true); + notify('QR-Code removed successfully', 'LONG'); + setAddVisFormData({}); + setrerenderdata((prev) => !prev); // Trigger re-render + setToRemoveId(''); + setToRemoveItem({}); + setshowRemoveConfirm_M(false); + + }, (txnE, txnerr) => { + console.log('Error deleting QR-Code:', txnerr); + }); + + } else { + // ✅ Handle local deletion (not in DB) + if (index >= 0 && index < products.length) { + console.log('Deleting locally, index:', index); + + const updatedProducts = products + .filter((_, i) => i !== index) // Remove item by index + .map((item, idx) => ({ ...item, id: idx + 1 })); // ✅ Reassign IDs + + setProducts([...updatedProducts]); // Ensure fresh reference for re-render + setHasUnsavedChanges(true); + notify('QR-Code removed successfully', 'LONG'); + setAddVisFormData({}); + setrerenderdata((prev) => !prev); // Trigger re-render + } else { + notify('Cannot remove! QR-Code not found', 'LONG'); + } + + setToRemoveId(''); + setToRemoveItem({}); + setshowRemoveConfirm_M(false); + } + }); + } + + + + async function onQRScanned(imgdata){ + + let QR_withValidChars=imgdata!=null && imgdata!=''?imgdata.replace(/["']/g,''):''; + let value=QR_withValidChars; + console.log("value------",value) + onFormDataChange(value,'QRCode','qrtext') + getData(storeData,currentMenu,"","",value); + } + + + function onFormDataChange(val,key,type="text"){ + + + let data=AddVisFormData; + data[key]=val; + setAddVisFormData(data); + setHasUnsavedChanges(true); + setrerenderdata(!rerenderdata); + + console.log("addvisbiltydtaa--",AddVisFormData) + } + + + + function FilterStores(searchedQry){ + searchedQry=searchedQry.toLowerCase(); + console.log('searchedQry',searchedQry); + let arr=[]; + var arr2={}; + var newBrand={}; + if(searchedQry!=null && searchedQry!=''){ + // globalBrandData.map((item,index)=>{ + for(let i=0;i0){ + newBrandList.push(newBrand); + if(j==brandList.length-1){ + arr2.brandList=newBrandList; + arr.push(arr2); + } + } + + } + } + } + + + } + } + else{ + arr=globalBrandData; + } + + console.log('globalBrandData:',globalBrandData) + setBrandData(arr); + setrerenderdata(!rerenderdata) + setrerenderdata2(!rerenderdata2) + } + + + function _renderStocks(){ + //{console.log("productList----", productList )} + let isHdrImgIndex=KPIFields.findIndex(i=>i.KPIFieldName=='HeaderImageAllow') + let isHdrImgKPIObj=isHdrImgIndex>=0?KPIFields[isHdrImgIndex]:{}; + + return ( + + { return skuIndex;}} + renderItem={({item,index})=>{ + + const skus=item; + console.log("checkskudata:",skus) + + const sku_index=index; + + let card_bg = skus.code ? { backgroundColor: PageTheme.$fifth_color } : {}; + // get error field product id + let EF_product= errorfield.EF_product!=null? errorfield.EF_product:{}; + let error_pid = EF_product.ProductId || ''; + let EF_InputKey=errorfield.EF_InputKey; + // let show_errorhere =errorcatid==cat.SubCategoryId && error_bid==brand.BrandId && error_pid==skus.ProductId; + + let errorStyle_ST=( error && show_errorhere && EF_InputKey=='input1_'? customStyle.stk_inptSTyle_error :{}); + + return( + + {skus.id || skus.QRCODE_ID} + + {skus.code || skus.UNIQUE_QRCODE} + {skus.productName||skus.PRODUCT_NAME} + + + { showRemoveConfirm(item, index); } }> + + + + ) + }} + contentContainerStyle={{ paddingBottom: 120 }} + /> + + ) + } + + + + + + return ( + + {processing && } + + + + {ConfirmSaveAlert(props,showAlert,onSaveCancel,saveData)} + {ConfirmSaveAlert(props,showRemoveConfirm_M,()=>{setshowRemoveConfirm_M(false)},Remove_QRdata,"Do you want to remove this item")} + {/* {setShowQRCamera(false);onQRScanned(imgData)}} showCamera={showQRCamera} onHideCamera={()=>{setShowQRCamera(false);}}/> */} + { setShowQRCamera(false); setQREnable(false);}} + onQRScanned={(value) => { + setShowQRCamera(false); + setQREnable(false); + onQRScanned(value); // तुम्हारा existing function + }} +/> + + + {setShowCamera(false);getImage(imgData)}} showCamera={showCamera} onHideCamera={()=>{setShowCamera(false);}}/> + + + + + + + + + {"QR Code"} + + {onFormDataChange(val,'QRCode',"qrtext");}} + autoComplete='off' + /> + {setQREnable(true);setQRqtnData({});setShowQRCamera(true);}}> + + + + + + + + + + { + _renderStocks() + } + + + {submitQRData()}}/> + + + + + ); + } + + + +export default connect(mapStateToProps, mapDispatchToProps)(StockUniqueQRCode); \ No newline at end of file diff --git a/PerformicsSrc/src/screens/StockWithCat.js b/PerformicsSrc/src/screens/StockWithCat.js new file mode 100644 index 0000000..64b59d8 --- /dev/null +++ b/PerformicsSrc/src/screens/StockWithCat.js @@ -0,0 +1,1654 @@ +import React,{useState,useEffect, useRef} from 'react'; +import Container from '../components/container'; +import { useRoute } from '@react-navigation/native'; +import { globalStyles,customStyles,GetPageTheme } from "../styles/Global"; +import {StatusBar,Image,TextInput,View,Text,ScrollView,TouchableOpacity,Platform,PermissionsAndroid,FlatList, Alert, KeyboardAvoidingView, BackHandler, Keyboard} from 'react-native'; +import { ReactReduxContext,connect,useSelector, useDispatch } from 'react-redux'; +import { mapStateToProps,mapDispatchToProps } from '../reducers/contextProvider'; +import SQLite from 'react-native-sqlite-2'; +import {notify} from '../components/notify'; +import moment from 'moment'; +import {getDownloadJson,getKPIFields,marktext1,marktext2, resizeImage, restore_ImageWithMetaData, validateNumber} from '../controller/functions'; +import {get_item,set_item,clear_item} from '../components/localStorage'; +import {version,sloganline,appname,testurl,db, colors_Arr, common_ImagePath,ImageFolderPath} from '../constants/constants'; +import CustomHeader from '../components/customHeader'; +import {AntDesign, Entypo, Fontisto, Ionicons, MaterialCommunityIcons} from '../components/icons'; +import CustomLoader from '../components/CustomLoader'; +import LinearGradient from 'react-native-linear-gradient'; +import { AppTables } from '../constants/tableConstants'; +import * as RNFS from 'react-native-fs'; +import GradientButton from '../components/gradientButton'; +import CheckBox from '@react-native-community/checkbox'; + +import CameraImg from '../assets/performics/camera_front_image.svg' +import { ConfirmSaveAlert, ExitScreenAlert } from '../components/alert'; +import CustomCamera from '../components/Camera'; +import DateTimePicker from '@react-native-community/datetimepicker'; +import CustomModal2 from '../components/CustomModal2'; + +function StockWithCat(props) { + const route = useRoute(); + + // get all theme styles acc to current theme set + const PageTheme=GetPageTheme(props.DarkMode,route.name); + const customStyle=customStyles(props.DarkMode,route.name); + + const [processing, setProcessing] = useState(true); + const [loaderTitle, setLoaderTitle] = useState('loading...'); + const [isAdhocScreen, setIsAdhocScreen] = useState(false); + const [storeData, setStoreData] = useState({}); + const [currentMenu, setCurrentMenu] = useState({}); + const [Category, setCategory] = useState({}); + const [subCatData, setSubCatData] = useState([]); + const [globalSubCatData, setGlobalSubCatData] = useState([]); + const [rerenderdata, setrerenderdata]= useState(0); + const [rerenderdata2, setrerenderdata2]= useState(0); + const [catData, setCatData] = useState({}); + const [SKUStockData, setSKUStockData] = useState([]); + + const [currentStock, setCurrentStock] = useState({}); + const [currentInputIndex, setCurrentInputIndex] = useState(0); + const [currentProduct, setCurrentProduct] = useState({}); + + const [KPIFields, setKPIFields] = useState([]); + const [showSwitchCamera,setShowSwitchCamera]= useState(false); + const [showAlert, setShowAlert] = useState(false); + const [showStockModal, setShowStockModal] = useState(false); + const [showDatePicker, setShowDatePicker] = useState(false); + const [rerendermodal, setrerendermodal] = useState(0); + const [toRemoveId, setToRemoveId] = useState(''); + const [toRemoveSKU, setToRemoveSKU] = useState({}); + const [showRemoveConfirm_M, setShowRemoveConfirm_M] = useState(false); + const [searchedItem, setSearchedItem]= useState(''); + + const [hasUnsavedChanges,setHasUnsavedChanges] = useState(false); + const [showCamera, setShowCamera] = useState(false); + const [getImageProps,setGetImageProps]= useState({}); + const [activeSections,setActiveSections]= useState([]); + const inputRefs = useRef({}); + + + const d1=new Date(); + const d2=moment(d1).format('MM/DD/YYYY'); + + useEffect(() => { + let params=props.route.params? props.route.params:{}; + let storeData1=params.storeData || {}; + let menu1=params.menu || {}; + let cat=params.category || {}; + let isAdhoc=params.isAdhoc || false; + setIsAdhocScreen(isAdhoc); + setStoreData(storeData1); + setCategory(cat); + setCurrentMenu(menu1); + + getData(storeData1,cat,menu1); + + const unsubscribe=props.navigation.addListener('beforeRemove', onBeforeRemove); + + return function cleanup() { + return unsubscribe; + }; + + }, []); + + useEffect(() => { + const unsubscribe=props.navigation.addListener('beforeRemove', onBeforeRemove); + return unsubscribe; + }, [hasUnsavedChanges]); + + useEffect(() => { + const unsubscribe=props.navigation.addListener('beforeRemove', onBeforeRemove); + return unsubscribe; + }, [showCamera]); + + function onBeforeRemove(e){ + if(showCamera==true){ + e.preventDefault(); + setShowCamera(false); + } + else{ + if (hasUnsavedChanges==true) { + e.preventDefault(); // Prevent default behavior of leaving the screen + onRemoveScreen(e); + } + else{ + return; + } + } + } + + function onRemoveScreen(e){ + Alert.alert( + "", + "Do you really want to exit the screen?", + [ + { + text: "Cancel", + onPress: () => {}, + style: "cancel" + }, + { text: "OK", onPress: () => {setHasUnsavedChanges(false);props.navigation.dispatch(e.data.action);} } + ] + ); + } + + + + async function getData(storeData1,cat,menu1){ + + try { + let {StoreId,ChainId,StateId,StoreTypeId}=storeData1; + + let AllKPIFields=await getKPIFields(menu1); + setKPIFields(AllKPIFields); + + // set switch camera flag as defined in mapping menu flag (if exists) + let SwitchingCameraI=AllKPIFields.findIndex(i=>i.KPIFieldName=='SwitchingCamera'); + let SwitchingCameraObj=SwitchingCameraI>=0?AllKPIFields[SwitchingCameraI]:{}; + let SwitchingCamera=SwitchingCameraI>=0?SwitchingCameraObj['KPIFieldEnable']:false; + setShowSwitchCamera(SwitchingCamera); + + let AllKPIFieldEnable ={} + if(AllKPIFields != null && AllKPIFields.length>0){ + + let isStockIndex=AllKPIFields.findIndex(i=>i.KPIFieldName=='Stock') + let isStockKPIObj=isStockIndex>=0?AllKPIFields[isStockIndex]:{}; + let isStockEnable=isStockIndex>=0?isStockKPIObj['KPIFieldEnable']:true; + + let isBRStockIndex=AllKPIFields.findIndex(i=>i.KPIFieldName=='BackRoomStock') + let isBRStockKPIObj=isBRStockIndex>=0?AllKPIFields[isBRStockIndex]:{}; + let isBRStockEnable=isBRStockIndex>=0?isBRStockKPIObj['KPIFieldEnable']:true; + + let isDStockIndex=AllKPIFields.findIndex(i=>i.KPIFieldName=='DamageStock') + let isDStockKPIObj=isDStockIndex>=0?AllKPIFields[isDStockIndex]:{}; + let isDStockEnable=isDStockIndex>=0?isDStockKPIObj['KPIFieldEnable']:false; + + let isLStockIndex=AllKPIFields.findIndex(i=>i.KPIFieldName=='LostStock') + let isLStockKPIObj=isLStockIndex>=0?AllKPIFields[isLStockIndex]:{}; + let isLStockEnable=isLStockIndex>=0?isLStockKPIObj['KPIFieldEnable']:false; + + let isExStockIndex=AllKPIFields.findIndex(i=>i.KPIFieldName=='ExpiredStock') + let isExStockKPIObj=isExStockIndex>=0?AllKPIFields[isExStockIndex]:{}; + let isExStockEnable=isExStockIndex>=0?isExStockKPIObj['KPIFieldEnable']:false; + + let isMFDIndex=AllKPIFields.findIndex(i=>i.KPIFieldName=='MFD') + let isMFD_KPIObj=isMFDIndex>=0?AllKPIFields[isMFDIndex]:{}; + let isMFDEnable=isMFDIndex>=0?isMFD_KPIObj['KPIFieldEnable']:false; + + let NrExpiry1Index=AllKPIFields.findIndex(i=>i.KPIFieldName=='NrExpiry1') + let NrExpiry1KPIObj=NrExpiry1Index>=0?AllKPIFields[NrExpiry1Index]:{}; + let NrExpiry1Enable=NrExpiry1Index>=0?NrExpiry1KPIObj['KPIFieldEnable']:false; + + let NrExpiry2Index=AllKPIFields.findIndex(i=>i.KPIFieldName=='NrExpiry2') + let NrExpiry2KPIObj=NrExpiry2Index>=0?AllKPIFields[NrExpiry2Index]:{}; + let NrExpiry2Enable=NrExpiry2Index>=0?NrExpiry2KPIObj['KPIFieldEnable']:false; + + let NrExpiry3Index=AllKPIFields.findIndex(i=>i.KPIFieldName=='NrExpiry3') + let NrExpiry3KPIObj=NrExpiry1Index>=0?AllKPIFields[NrExpiry3Index]:{}; + let NrExpiry3Enable=NrExpiry1Index>=0?NrExpiry3KPIObj['KPIFieldEnable']:false; + + AllKPIFieldEnable ={ + isStockEnable, + isBRStockEnable, + isDStockEnable, + isLStockEnable, + isExStockEnable, + NrExpiry1Enable, + NrExpiry2Enable, + NrExpiry3Enable, + } + + + } + await db.transaction(async function (txn) { + + // let dq=`Select * FROM ${AppTables.STOCKWITHCAT_DATA} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' `; + // let dq2=`select * FROM ${AppTables.STOCKWITHCAT_HDR_DATA} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' `; + // let dq3=`select * FROM ${AppTables.STOCKWITHCAT_MFD_DATA} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' `; + + // // remove old data + // await txn.executeSql(dq,[],async function (txn2, txnres) { + // console.log('stock data deleted',txnres.rows.length); + // },function (txnE,txnerr) { console.log(txnerr); },); + + // await txn.executeSql(dq2,[],async function (txn2, txnres) { + // console.log('stock header data deleted',txnres.rows.length); + // },function (txnE,txnerr) { console.log(txnerr); },); + + // await txn.executeSql(dq3,[],async function (txn2, txnres) { + // console.log('stock mfd data deleted',txnres.rows.length); + // },function (txnE,txnerr) { console.log(txnerr); },); + + let q2=` SELECT CATEGORY_ID as CategoryId,CATEGORY as CategoryName,MSL,IMAGE,IMAGEPATH FROM ${AppTables.STOCKWITHCAT_HDR_DATA} WHERE STORE_ID='${StoreId}' and CATEGORY_ID='${cat.CategoryId}' and VISIT_DATE='${d2}' `; + + await txn.executeSql(q2,[],async function (txn2, txnres) { + console.log('added products cats:',txnres.rows.length) + if(txnres.rows.length>0){ + let data =txnres.rows.item(0); + let defData={'CategoryId':data.CategoryId,'ImageName':data.IMAGE,'ImagePath':data.IMAGEPATH}; + + let subcats=await getSubCats(storeData1,menu1,data,true,AllKPIFieldEnable); + setCatData(defData); + setSubCatData(subcats); + setGlobalSubCatData(subcats); + setProcessing(false); + } + else{ + let subcats=await getSubCats(storeData1,menu1,cat,false,AllKPIFieldEnable); + setSubCatData(subcats); + setGlobalSubCatData(subcats); + setProcessing(false); + } + },function (txnE,txnerr) { console.log(txnerr);setProcessing(false); },); + // setProcessing(false); + + + + }); + } catch (err) { + console.log(err); + } + } + + async function getSubCats(storeData1,menu1,item,isInserted=false,AllKPIFieldEnable={}){ + let allSKUData=[]; + + let {StoreId,ChainId,StateId,StoreTypeId,StoreClassId,StoreCategoryId}=storeData1; + return await new Promise((resolve,reject)=>{ + db.transaction(async function (txn) { + + let join=` inner join Mapping_ProductAssortmentStorewise m on p.ProductId=m.ProductId `; + let join2=` inner join Master_Category mc on mc.CategoryId=p.CategoryId `; + let s_q=`select distinct p.SubCategoryId,p.SubCategoryName from Product_Master p ${join} ${join2} where m.StoreId='${StoreId}' and (p.CategoryId='${item.CategoryId}' or p.CategoryId=${item.CategoryId}) and (CompanyId='1' or CompanyId=1) order by p.SubCategoryName,p.BrandName`; + await txn.executeSql(s_q,[],async function (txn2, txnres) { + console.log('SubCats len:',txnres.rows.length) + if(txnres.rows.length>0){ + let arr=[]; + for(var i=0;i{ + return val; + }).catch((err)=>{ + console.log(err); + return []; + }) + } + + async function setOnFocus(item,type='1'){ + let key='input'+type+'_'+item.ProductId; + let arr=Object.keys(inputRefs.current); + let activeIndex=arr.indexOf(key); + console.log('setfocus activeindex:',activeIndex); + setCurrentInputIndex(activeIndex); + } + + async function focusToNext(){ + + let arr=Object.keys(inputRefs.current); + + let activeIndex=currentInputIndex; + if(activeIndex{ + db.transaction(async function (txn) { + + // get from stored data if exists + let seletlist=`STOCK_UID,PRODUCT as ProductName,PRODUCT_ID as ProductId,BRAND as BrandName,BRAND_ID as BrandId,SUB_CATEGORY as SubCategoryName,SUB_CATEGORY_ID as SubCategoryId,MSL,STOCK,BACKROOM_STOCK,DAMAGED_STOCK,LOST_STOCK,EXPIRY_STOCK,IS_SKU_STOCK_PRESENT,NREXPIRY1_STOCK,NREXPIRY2_STOCK,NREXPIRY3_STOCK`; + let sku_q=`SELECT ${seletlist} FROM ${AppTables.STOCKWITHCAT_DATA} WHERE STORE_ID='${StoreId}' and CATEGORY_ID='${cat.CategoryId}' and SUB_CATEGORY_ID='${subcat.SubCategoryId}' `; + + // else get products from masters + let join=` inner join Mapping_ProductAssortmentStorewise m on p.ProductId=m.ProductId `; + let join2=` inner join Master_Category mc on mc.CategoryId=p.CategoryId `; + let sku_q2=`select distinct p.ProductName,p.ProductId,p.BrandName,p.BrandId,p.SubCategoryName,p.SubCategoryId,m.MSL from Product_Master p ${join} ${join2} where m.StoreId='${StoreId}' and (p.CategoryId='${cat.CategoryId}' or p.CategoryId= ${cat.CategoryId}) and (p.SubCategoryId='${subcat.SubCategoryId}' or p.SubCategoryId= ${subcat.SubCategoryId}) and (CompanyId='1' or CompanyId= 1) order by p.ProductSequence`; + await txn.executeSql(sku_q,[],async function (txn2, txnres) { + console.log('txnres.rows.length:',txnres.rows.length); + if(txnres.rows.length>0){ + let arr=[]; + for(var i=0;i0){ + let arr=[]; + for(var i=0;i{ + return val; + }).catch((err)=>{ + console.log('getSKU err:',err); + return sku_ret; + }) + + + } + + async function getMFDStockData(skud){ + + return new Promise((resolve,reject)=>{ + db.transaction(async function (txn) { + let q=`select * from ${AppTables.STOCK2_MFD_DATA} where STOCK_UID='${skud.STOCK_UID}'`; + await txn.executeSql(q,[],async function (txn2, txnres) { + if(txnres.rows.length>0){ + let arr=[]; + for(var i=0;i{ + console.log(err); + return []; + }) + } + + async function getImage(imgdata){ + let cat=getImageProps.option || ''; + if(typeof imgdata =='object' && imgdata.errorCode=='camera_unavailable'){ + notify('Camera unavailable'); + } + else if(typeof imgdata =='object' && imgdata.uri!=null){ + const img=imgdata; + const imgurl=img.uri, imgWidth=img.width, imgHeight=img.ExtendedHeight; + let isImgFromGallery=img.fromGallery!=null?img.fromGallery:false; + let picture_clickedd=isImgFromGallery==true?img.datetime:new Date(); + + let picture_clicked_time=moment(picture_clickedd).format('MM-DD-YYYY HH:mm:ss') + let picture_clicked_time_for_pic_name=moment(picture_clickedd).format('MMDDYYYY_HHmmss') + + console.log("time", picture_clicked_time); + console.log("time1", picture_clicked_time_for_pic_name); + let calculate_tym_date_for_filename = picture_clicked_time_for_pic_name; + let calculate_tym_date_over_img = picture_clicked_time; + + let filename=storeData.StoreId+'_'+(props.UserId || '')+'_Stock-'+calculate_tym_date_for_filename+'.jpg'; + + const mark_text1=calculate_tym_date_over_img; + const mark_text2='Store Name:'+storeData.StoreName+' | Store Id:'+storeData.StoreId+' | User Id:'+storeData.EmpId+' | Image Type: '+currentMenu.MenuName+' | Date:'+calculate_tym_date_over_img; + + + let allIMgData=catData; + allIMgData.ImageName=filename; + + let imagePath='file://'+ImageFolderPath+currentMenu.ScreenName+"/"+filename; + RNFS.copyFile(imgurl, imagePath) + .then(async(resn) => { + // render data with clicked image + let uri=imagePath; + console.log('image marker',uri); + allIMgData.ImagePath=uri; + + setCatData(allIMgData); + setHasUnsavedChanges(true); + setrerenderdata(!rerenderdata); + + // add metdata then resize image and restored back to the imagePath + let restore_data={"destFilePath":imagePath,"imgurl":imgurl,imgWidth,imgHeight,mark_text1,mark_text2} + let is_restored=await restore_ImageWithMetaData(restore_data,imgdata); + console.log("image restored:",is_restored); + }) + .catch(err => { + console.log('ERROR: image file write failed!!!'); + console.log(err.message, err.code); + }); + + } + } + + async function openCamera(option){ + setGetImageProps({'option':option}); + console.log('openCamera'); + setShowCamera(true); + // props.navigation.navigate('CameraScreen',{'getImage':getImage,'cameraType':'back'}) + } + + async function submitOpeningStock(){ + let isvalid=await validate(); + if(isvalid){ + Keyboard.dismiss(); + setShowAlert(true); + } + } + + async function saveData(){ + setHasUnsavedChanges(false); + setShowAlert(false); + setLoaderTitle('Saving Data...'); + setProcessing(true); + try { + let {StoreId,ChainId,StateId,StoreTypeId}=storeData; + await db.transaction(async function (txn) { + + let q=`DELETE FROM ${AppTables.STOCKWITHCAT_DATA} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' and CATEGORY_ID='${Category.CategoryId}' `; + let q2=`DELETE FROM ${AppTables.STOCKWITHCAT_HDR_DATA} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' and CATEGORY_ID='${Category.CategoryId}'`; + let q3=`DELETE FROM ${AppTables.STOCKWITHCAT_MFD_DATA} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' and CATEGORY_ID='${Category.CategoryId}' `; + + // remove old data + await txn.executeSql(q,[],async function (txn2, txnres) { + console.log('stock data deleted'); + },function (txnE,txnerr) { console.log(txnerr); },); + + await txn.executeSql(q2,[],async function (txn2, txnres) { + console.log('stock header data deleted'); + },function (txnE,txnerr) { console.log(txnerr); },); + + await txn.executeSql(q3,[],async function (txn2, txnres) { + console.log('stock mfd data deleted'); + },function (txnE,txnerr) { console.log(txnerr); },); + + + let seq_q=` select seq from sqlite_sequence where name="${AppTables.STOCKWITHCAT_HDR_DATA}" `; + await txn.executeSql(seq_q,[],async function (txn2, txnres) { + if(txnres.rows.length>0){ + let data=txnres.rows.item(0); + let seq=data.seq; + insertData(seq); + } + else{ + insertData(0); + } + },function (txnE,txnerr) { console.log(txnerr); insertData(0); },); + + + }); + } catch (err) { + console.log(err); + } + } + + async function insertData(seq=0){ + try { + console.log(seq); + let {StoreId,ChainId,StateId,StoreTypeId,ExpiryStock}=storeData; + console.log('insertData'); + await db.transaction(async function (txn) { + var values='',stock_values='',mfdStockV=''; + // values+=values!=''?' , ':''; + values+=` ('${StoreId}','${d2}','${Category.CategoryName}','${Category.CategoryId}','','${(catData.ImageName || '')}','${(catData.ImagePath || '')}','${d2}') `; + + + for(var i=0;ici.ProductId==skuItem.ProductId); + const skud=skud_index>=0?(allSKUData[skud_index] || {}) : {}; + let mfdStocks=skud['mfdStocks'] || []; + + let stock=skud.Stock!=null?skud.Stock:''; + let br_stock=skud.BackRoomStock!=null?skud.BackRoomStock:''; + let ex_stock=skud.ExpiryStock!=null?skud.ExpiryStock:''; + let damage_stock=skud.DamagedStock!=null?skud.DamagedStock:''; + let lost_stock=skud.LostStock!=null?skud.LostStock:''; + let isSKUPresent=skud.isSKUPresent!=null?skud.isSKUPresent:0; + let NearExpiry_stock1=skud.NearExpiry1!=null?skud.NearExpiry1:''; + let NearExpiry_stock2=skud.NearExpiry2!=null?skud.NearExpiry2:''; + let NearExpiry_stock3=skud.NearExpiry3!=null?skud.NearExpiry3:''; + + stock_values+=` ('${seq}','${SKU_UID}','${StoreId}','${d2}','${Category.CategoryId}','${Category.CategoryName}','${SubCategoryId}','${SubCategoryName}','${BrandId}','${BrandName}','${ProductId}','${ProductName}','${MSL}','${stock}','${br_stock}','${damage_stock}','${lost_stock}','${ex_stock}','${isSKUPresent}','${NearExpiry_stock1}','${NearExpiry_stock2}','${NearExpiry_stock3}','${d2}') `; + + for(let m=0;mi.KPIFieldName=='HeaderImageAllow') + let isHdrImgKPIObj=isHdrImgIndex>=0?KPIFields[isHdrImgIndex]:{}; + let isHdrImgEnable=isHdrImgIndex>=0?isHdrImgKPIObj['KPIFieldEnable']:false; + + let isListedSKUIndex=KPIFields.findIndex(i=>i.KPIFieldName=='ListedSKU'); + let isListedSKUKPIObj=isListedSKUIndex>=0?KPIFields[isListedSKUIndex]:{}; + let isListedSKUEnable=isListedSKUIndex>=0?isListedSKUKPIObj['KPIFieldEnable']:true; + + let isStockIndex=KPIFields.findIndex(i=>i.KPIFieldName=='Stock') + let isStockKPIObj=isStockIndex>=0?KPIFields[isStockIndex]:{}; + let isStockEnable=isStockIndex>=0?isStockKPIObj['KPIFieldEnable']:true; + let isStockDis_Name=isStockIndex>=0?isStockKPIObj['KPIFieldDisplayName']:'Stock'; + + let isBRStockIndex=KPIFields.findIndex(i=>i.KPIFieldName=='BackRoomStock') + let isBRStockKPIObj=isBRStockIndex>=0?KPIFields[isBRStockIndex]:{}; + let isBRStockEnable=isBRStockIndex>=0?isBRStockKPIObj['KPIFieldEnable']:true; + let isBRStockDis_Name=isBRStockIndex>=0?isBRStockKPIObj['KPIFieldDisplayName']:'Stock'; + + let isDStockIndex=KPIFields.findIndex(i=>i.KPIFieldName=='DamageStock') + let isDStockKPIObj=isDStockIndex>=0?KPIFields[isDStockIndex]:{}; + let isDStockEnable=isDStockIndex>=0?isDStockKPIObj['KPIFieldEnable']:false; + let isDStockDis_Name=isDStockIndex>=0?isDStockKPIObj['KPIFieldDisplayName']:''; + + let isLStockIndex=KPIFields.findIndex(i=>i.KPIFieldName=='LostStock') + let isLStockKPIObj=isLStockIndex>=0?KPIFields[isLStockIndex]:{}; + let isLStockEnable=isLStockIndex>=0?isLStockKPIObj['KPIFieldEnable']:false; + let isLStockDis_Name=isLStockIndex>=0?isLStockKPIObj['KPIFieldDisplayName']:''; + + let isExStockIndex=KPIFields.findIndex(i=>i.KPIFieldName=='ExpiredStock') + let isExStockKPIObj=isExStockIndex>=0?KPIFields[isExStockIndex]:{}; + let isExStockEnable=isExStockIndex>=0?isExStockKPIObj['KPIFieldEnable']:false; + let isExStockDis_Name=isExStockIndex>=0?isExStockKPIObj['KPIFieldDisplayName']:''; + + let isMFDIndex=KPIFields.findIndex(i=>i.KPIFieldName=='MFD') + let isMFD_KPIObj=isMFDIndex>=0?KPIFields[isMFDIndex]:{}; + let isMFDEnable=isMFDIndex>=0?isMFD_KPIObj['KPIFieldEnable']:false; + let isMFDDis_Name=isMFDIndex>=0?isMFD_KPIObj['KPIFieldDisplayName']:''; + + let NrExpiry1Index=KPIFields.findIndex(i=>i.KPIFieldName=='NrExpiry1') + let NrExpiry1KPIObj=NrExpiry1Index>=0?KPIFields[NrExpiry1Index]:{}; + let NrExpiry1Enable=NrExpiry1Index>=0?NrExpiry1KPIObj['KPIFieldEnable']:false; + let NrExpiry1_Dis_Name=NrExpiry1Index>=0?NrExpiry1KPIObj['KPIFieldDisplayName']:''; + + let NrExpiry2Index=KPIFields.findIndex(i=>i.KPIFieldName=='NrExpiry2') + let NrExpiry2KPIObj=NrExpiry2Index>=0?KPIFields[NrExpiry2Index]:{}; + let NrExpiry2Enable=NrExpiry2Index>=0?NrExpiry2KPIObj['KPIFieldEnable']:false; + let NrExpiry2_Dis_Name=NrExpiry2Index>=0?NrExpiry2KPIObj['KPIFieldDisplayName']:''; + + let NrExpiry3Index=KPIFields.findIndex(i=>i.KPIFieldName=='NrExpiry3') + let NrExpiry3KPIObj=NrExpiry1Index>=0?KPIFields[NrExpiry3Index]:{}; + let NrExpiry3Enable=NrExpiry1Index>=0?NrExpiry3KPIObj['KPIFieldEnable']:false; + let NrExpiry3_Dis_Name=NrExpiry1Index>=0?NrExpiry3KPIObj['KPIFieldDisplayName']:''; + + let MSLIndex=KPIFields.findIndex(i=>i.KPIFieldName=='MSL'); + let MSLObj=MSLIndex>=0?KPIFields[MSLIndex]:{}; + let isMSLAllow=MSLIndex>=0?MSLObj['KPIFieldEnable']:true; + + let NONMSL_Index=KPIFields.findIndex(i=>i.KPIFieldName=='ChildImageAllow'); + let NONMSL_Obj=NONMSL_Index>=0?KPIFields[NONMSL_Index]:{}; + let isNONMSL_Allow=NONMSL_Index>=0?NONMSL_Obj['KPIFieldEnable']:false; + + let catId=Category.CategoryId; + if(isHdrImgEnable==true && (catData.ImagePath== null || catData.ImagePath=='')){ + notify('Please click image for '+Category.CategoryName,'SHORT'); + isValid=false; + } + else{ + await Promise.all( + globalSubCatData.map(async (item,index) => { + let skulist=item.skulist || []; + if(isValid==true){ + if(skulist.length>0){ + await Promise.all( + skulist.map(async (skuItem,skuIndex) => { + if(isValid==true){ + let skuData=SKUStockData.find(ci=>ci.ProductId==skuItem.ProductId ) || {}; + let stock=skuData.Stock!=null?skuData.Stock:''; + let ex_stock=skuData.ExpiryStock!=null?skuData.ExpiryStock:''; + let damage_stock=skuData.DamagedStock!=null?skuData.DamagedStock:''; + let lost_stock=skuData.LostStock!=null?skuData.LostStock:''; + let isSKUPresent=skuData.isSKUPresent!=null?skuData.isSKUPresent:0; + let br_stock=skuData.BackRoomStock!=null?skuData.BackRoomStock:''; + let NearExpiry_stock1=skuData.NearExpiry1!=null?skuData.NearExpiry1:''; + let NearExpiry_stock2=skuData.NearExpiry2!=null?skuData.NearExpiry2:''; + let NearExpiry_stock3=skuData.NearExpiry3!=null?skuData.NearExpiry3:''; + + let isMandatory=((isMSLAllow==1 || isMSLAllow=='true') && (skuItem.MSL==1 || skuItem.MSL=='true') ) || ((isNONMSL_Allow==1 || isNONMSL_Allow=='true') && (skuItem.MSL!=1 && skuItem.MSL!='true') ) + + if((isListedSKUEnable==true && isSKUPresent==1) || (!isListedSKUEnable && (isMandatory)) ){ + // let sumOfDamagedStocks=parseInt(ex_stock)+parseInt(damage_stock)+parseInt(lost_stock); + if(isStockEnable==true && stock!==0 && ( stock==null || stock=='')){ + notify('Please enter '+isStockDis_Name+' for '+skuItem.ProductName,'LONG'); + isValid=false; + } + else if(isBRStockEnable==true && br_stock!==0 && ( br_stock==null || br_stock=='')){ + notify('Please enter '+isBRStockDis_Name+' for '+skuItem.ProductName,'LONG'); + isValid=false; + } + else if(isDStockEnable==true && damage_stock!==0 && ( damage_stock==null || damage_stock=='')){ + notify('Please enter '+isDStockDis_Name+' for '+skuItem.ProductName,'LONG'); + isValid=false; + } + else if(isLStockEnable==true && lost_stock!==0 && ( lost_stock==null || lost_stock=='')){ + notify('Please enter '+isDStockDis_Name+' for '+skuItem.ProductName,'LONG'); + isValid=false; + } + else if(isExStockEnable==true && ex_stock!==0 && ( ex_stock==null || ex_stock=='')){ + notify('Please enter '+isExStockDis_Name+' for '+skuItem.ProductName,'LONG'); + isValid=false; + } + else if(NrExpiry1Enable==true && NearExpiry_stock1!==0 && ( NearExpiry_stock1==null || NearExpiry_stock1=='')){ + notify('Please enter '+NrExpiry1_Dis_Name+' for '+skuItem.ProductName,'LONG'); + isValid=false; + } + else if(NrExpiry2Enable==true && NearExpiry_stock2!==0 && ( NearExpiry_stock2==null || NearExpiry_stock2=='')){ + notify('Please enter '+NrExpiry2_Dis_Name+' for '+skuItem.ProductName,'LONG'); + isValid=false; + } + else if(NrExpiry3Enable==true && NearExpiry_stock3!==0 && ( NearExpiry_stock3==null ||NearExpiry_stock3=='')){ + notify('Please enter '+NrExpiry3_Dis_Name+' for '+skuItem.ProductName,'LONG'); + isValid=false; + } + // else if((isDStockEnable && isLStockEnable && isExStockEnable) && sumOfDamagedStocks>parseInt(stock)){ + // notify('Sum of '+isDStockDis_Name+','+isLStockDis_Name+' and '+isExStockDis_Name+' should be less than or equal to Stock for '+skuItem.ProductName,'LONG'); + // isValid=false; + // } + // else if((isDStockEnable && isLStockEnable) && sumOfDamagedStocks>parseInt(stock)){ + // notify('Sum of '+isDStockDis_Name+' and '+isLStockDis_Name+' should be less than or equal to '+isStockDis_Name+' for '+skuItem.ProductName,'LONG'); + // isValid=false; + // } + // else if((isLStockEnable && isExStockEnable) && sumOfDamagedStocks>parseInt(stock)){ + // notify('Sum of '+isLStockDis_Name+' and '+isExStockDis_Name+' should be less than or equal to '+isStockDis_Name+' for '+skuItem.ProductName,'LONG'); + // isValid=false; + // } + // else if((isDStockEnable && isExStockEnable) && sumOfDamagedStocks>parseInt(stock)){ + // notify('Sum of '+isDStockDis_Name+' and '+isExStockDis_Name+' should be less than or equal to '+isStockDis_Name+' for '+skuItem.ProductName,'LONG'); + // isValid=false; + // } + else{ + + } + + } + } + }) + ); + } + } + }) + ); + } + + console.log('isValid:',isValid); + return isValid; + } + + function onStockValChange(skuItem,val,key,type=''){ + if(val!=''){ + let isValid=validateNumber(val,type); + if(!isValid){ + return; + } + } + + let allSKUData=SKUStockData; + let defData={'ProductId':skuItem.ProductId}; + const skud_index=allSKUData.findIndex(i=>i.ProductId==skuItem.ProductId); + const skud=skud_index>=0?(allSKUData[skud_index] || defData) : defData; + skud[key]=val; + + if(key=='isSKUPresent'){ + skud['showAllSKU_Fields']=val==1?true:false; + } + + skud_index>=0?allSKUData[skud_index]=skud:allSKUData.push(skud); + setSKUStockData(allSKUData); + setHasUnsavedChanges(true); + setrerenderdata(!rerenderdata); + } + + // function checkStockVal(item,skuItem,key,old_key,old_val){ + // console.log('checkStockVal',old_val,val); + // let allSKUData=SKUStockData; + // let defData={'ProductId':skuItem.ProductId}; + // const skud_index=allSKUData.findIndex(i=>i.CategoryId==item.CategoryId && i.ProductId==skuItem.ProductId); + // const skud=skud_index>=0?(allSKUData[skud_index] || defData) : defData; + // console.log('checkStockVal'); + // let val=skud[key] || ''; + // let val1=skud[key] || 0; + // let product_total_stock=skud['Stock']; + // if(product_total_stock!=''){ + // product_total_stock=parseInt(product_total_stock); + // let product_damage_stock=parseInt(skud['DamagedStock'] || 0); + // let product_lost_stock=parseInt(skud['LostStock'] || 0); + // let product_ex_stock=parseInt(skud['ExpiryStock'] || 0); + + // let product_stock=product_ex_stock;//product_total_stock-(product_damage_stock+product_lost_stock+product_ex_stock); + // val1=parseInt(val1); + // if(skud_index>=0){ + // let mfdStocks=skud['mfdStocks'] || []; + // let sumOfAllStocks=0 + // for(let i in mfdStocks){ + // let ds=mfdStocks[i]; + // sumOfAllStocks+=parseInt(ds.stock); + // } + + // if(sumOfAllStocks>product_stock){ + // notify('Sum of all MFD stock cannot be greater than product stock count!'); + // skud[key]=old_val; + // skud[old_key]=old_val; + // } + // else{ + // skud[old_key]=val; + // } + // } + // else{ + // skud[old_key]=val; + // } + + + // skud_index>=0?allSKUData[skud_index]=skud:allSKUData.push(skud); + // setSKUStockData(allSKUData); + // setHasUnsavedChanges(true); + // setrerenderdata(!rerenderdata); + // } + // } + + function openAddStkModal(skuItem){ + setCurrentProduct(skuItem); + // let allSKUData=SKUStockData; + // let defData={'ProductId':skuItem.ProductId}; + // const skud_index=allSKUData.findIndex(i=>i.ProductId==skuItem.ProductId); + // const skud=skud_index>=0?(allSKUData[skud_index] || defData) : defData; + + setShowStockModal(true); + // let mfdStocks=skud['mfdStocks'] || []; + // let product_stock=skud['Stock']; + // let product_ex_stock=skud['ExpiryStock']; + + // if(product_stock==null || product_stock==''){ + // notify('Please enter sku stock first!'); + // } + // else if(product_ex_stock==null || product_ex_stock==''){ + // notify('Please enter expiry stock first!'); + // } + // else{ + + // } + + } + + function onSaveCancel(){ + setShowAlert(false) + } + + function setStockDate(date){ + let d1=moment(date).format('DD/MM/YYYY'); + let cstock=currentStock; + cstock['date']=date; + cstock['mfd']=d1; + setCurrentStock(cstock); + setShowDatePicker(false); + } + + function setCS_Stock(key,val,type=''){ + if(val!=''){ + let isValid=validateNumber(val,type); + if(!isValid){ + return; + } + } + + + let cstock=currentStock; + cstock[key]=val; + setCurrentStock(cstock); + setrerendermodal(!rerendermodal); + } + + + + function getAllSum(mfdStocks=[],cstock={}){ + let {mfd,date,stock}=cstock + let sumOfAllStocks=parseInt(stock); + return new Promise((resolve,reject)=>{ + if(mfdStocks.length>0){ + for(let i in mfdStocks){ + let ds=mfdStocks[i]; + sumOfAllStocks+=parseInt(ds.stock); + if(i==mfdStocks.length-1){ + resolve(sumOfAllStocks) + } + } + } + else{ + resolve(sumOfAllStocks) + } + }).catch((err)=>{ + console.log(err); + return 0; + }) + } + + async function addMFDStock(){ + Keyboard.dismiss(); + let skuItem=currentProduct + let cstock=currentStock; + var allSKUData=SKUStockData; + let defData={'ProductId':skuItem.ProductId}; + const skud_index=allSKUData.findIndex(i=> i.ProductId==skuItem.ProductId); + var skud=skud_index>=0?(allSKUData[skud_index] || defData) : defData; + let mfdStocks=skud['mfdStocks'] || []; + let {mfd,date,stock,lotno}=cstock + + if(mfd==null || mfd==''){ + notify('Please select date!'); + return ; + } + else if(stock==null || stock==''){ + notify('Please enter stock!'); + return ; + } + else if(lotno==null || lotno==''){ + notify('Please enter lot no.!'); + return ; + } + else if(mfdStocks.findIndex(i=>i.mfd==mfd)>=0){ + notify('This date is already added! Please select different date'); + return ; + } + else { + console.log('added') + mfdStocks.push(cstock); + skud['mfdStocks']=mfdStocks; + skud_index>=0?allSKUData[skud_index]=skud:allSKUData.push(skud); + setSKUStockData(allSKUData); + setHasUnsavedChanges(true); + setrerenderdata(!rerenderdata); + setCurrentStock({}); + setShowStockModal(false); + } + } + + + function removeMFDStock(){ + let skuItem=toRemoveSKU; + let cstockIndex=toRemoveId; + let allSKUData=SKUStockData; + let defData={'ProductId':skuItem.ProductId}; + const skud_index=allSKUData.findIndex(i=>i.ProductId==skuItem.ProductId); + const skud=skud_index>=0?(allSKUData[skud_index] || defData) : defData; + let mfdStocks=skud['mfdStocks'] || []; + mfdStocks.splice(cstockIndex,1); + skud['mfdStocks']=mfdStocks; + + skud_index>=0?allSKUData[skud_index]=skud:allSKUData.push(skud); + setShowRemoveConfirm_M(false); + setSKUStockData(allSKUData); + setHasUnsavedChanges(true); + setrerenderdata(!rerenderdata); + } + + function showRemoveConfirm(skuItem,cstock,cstockIndex){ + setToRemoveId(cstockIndex); + setToRemoveSKU(skuItem); + setShowRemoveConfirm_M(true); + } + + function FilterStores(searchedQry){ + searchedQry=searchedQry.toLowerCase(); + console.log('searchedQry',searchedQry); + let arr=[]; + var arr2={}; + if(searchedQry!=null && searchedQry!=''){ + for(let i=0;i0){ + arr.push(arr2); + } + } + } + + + } + } + else{ + arr=globalSubCatData; + } + + setSubCatData(arr); + setrerenderdata(!rerenderdata) + setrerenderdata2(!rerenderdata2) + } + + function renderDatePicker(){ + let today=new Date(); + console.log('today:',today); + let d1=Object.keys(currentStock).length>0 && currentStock.date!=null && currentStock.date!='' ?new Date(currentStock.date):new Date(); + return ( + {setStockDate(selectedDate)}} + /> + ); + } + + function _render_StockModal(){ + let mfd=Object.keys(currentStock).length>0 && currentStock.mfd!=null && currentStock.mfd!='' ?currentStock.mfd:''; + let stock=Object.keys(currentStock).length>0 && currentStock.stock!=null?currentStock.stock:''; + let lotno=Object.keys(currentStock).length>0 && currentStock.lotno!=null?currentStock.lotno:''; + + return ( + + + + Expiry Date + + {mfd} + + {setShowDatePicker(true);}}> + + + + {showDatePicker==true && + renderDatePicker() + } + + + Stock + + {setCS_Stock('stock',val,'numeric')}} + /> + + + + Lot No. + + {setCS_Stock('lotno',val,'text')}} + /> + + + + + {setCurrentStock({});setShowStockModal(false);}}> + Cancel + + {addMFDStock()}}> + Add + + + + + ) + } + + + function toggleCollapse(subcat={},subcatIndex){ + let allData=subCatData; + let isSubCatCollapsed=subcat.isSubCatCollapsed; + subcat['isSubCatCollapsed']=!isSubCatCollapsed; + allData[subcatIndex]=subcat; + setSubCatData(allData); + setGlobalSubCatData(allData); + setrerenderdata(!rerenderdata); + } + + function _renderStocks(){ + + let isHdrImgIndex=KPIFields.findIndex(i=>i.KPIFieldName=='HeaderImageAllow') + let isHdrImgKPIObj=isHdrImgIndex>=0?KPIFields[isHdrImgIndex]:{}; + let isHdrImgEnable=isHdrImgIndex>=0?isHdrImgKPIObj['KPIFieldEnable']:false; + + let isListedSKUIndex=KPIFields.findIndex(i=>i.KPIFieldName=='ListedSKU') + let isListedSKUKPIObj=isListedSKUIndex>=0?KPIFields[isListedSKUIndex]:{}; + let isListedSKUEnable=isListedSKUIndex>=0?isListedSKUKPIObj['KPIFieldEnable']:false; + + let isStockIndex=KPIFields.findIndex(i=>i.KPIFieldName=='Stock') + let isStockKPIObj=isStockIndex>=0?KPIFields[isStockIndex]:{}; + let isStockEnable=isStockIndex>=0?isStockKPIObj['KPIFieldEnable']:true; + let isStockDis_Name=isStockIndex>=0?isStockKPIObj['KPIFieldDisplayName']:'Stock'; + + let isBRStockIndex=KPIFields.findIndex(i=>i.KPIFieldName=='BackRoomStock') + let isBRStockKPIObj=isBRStockIndex>=0?KPIFields[isBRStockIndex]:{}; + let isBRStockEnable=isBRStockIndex>=0?isBRStockKPIObj['KPIFieldEnable']:false; + let isBRStockDis_Name=isBRStockIndex>=0?isBRStockKPIObj['KPIFieldDisplayName']:'Back Room Stock'; + + let isDStockIndex=KPIFields.findIndex(i=>i.KPIFieldName=='DamageStock') + let isDStockKPIObj=isDStockIndex>=0?KPIFields[isDStockIndex]:{}; + let isDStockEnable=isDStockIndex>=0?isDStockKPIObj['KPIFieldEnable']:false; + let isDStockDis_Name=isDStockIndex>=0?isDStockKPIObj['KPIFieldDisplayName']:''; + console.log('isDStockIndex:',isDStockIndex,isDStockEnable,isDStockDis_Name); + + let isLStockIndex=KPIFields.findIndex(i=>i.KPIFieldName=='LostStock') + let isLStockKPIObj=isLStockIndex>=0?KPIFields[isLStockIndex]:{}; + let isLStockEnable=isLStockIndex>=0?isLStockKPIObj['KPIFieldEnable']:false; + let isLStockDis_Name=isLStockIndex>=0?isLStockKPIObj['KPIFieldDisplayName']:''; + + let isExStockIndex=KPIFields.findIndex(i=>i.KPIFieldName=='ExpiredStock') + let isExStockKPIObj=isExStockIndex>=0?KPIFields[isExStockIndex]:{}; + let isExStockEnable=isExStockIndex>=0?isExStockKPIObj['KPIFieldEnable']:false; + let isExStockDis_Name=isExStockIndex>=0?isExStockKPIObj['KPIFieldDisplayName']:''; + + let isMFDIndex=KPIFields.findIndex(i=>i.KPIFieldName=='MFD') + let isMFD_KPIObj=isMFDIndex>=0?KPIFields[isMFDIndex]:{}; + let isMFDEnable=isMFDIndex>=0?isMFD_KPIObj['KPIFieldEnable']:true; + let isMFDDis_Name=isMFDIndex>=0?isMFD_KPIObj['KPIFieldDisplayName']:''; + + let NrExpiry1Index=KPIFields.findIndex(i=>i.KPIFieldName=='NrExpiry1') + let NrExpiry1KPIObj=NrExpiry1Index>=0?KPIFields[NrExpiry1Index]:{}; + let NrExpiry1Enable=NrExpiry1Index>=0?NrExpiry1KPIObj['KPIFieldEnable']:false; + let NrExpiry1_Dis_Name=NrExpiry1Index>=0?NrExpiry1KPIObj['KPIFieldDisplayName']:''; + + let NrExpiry2Index=KPIFields.findIndex(i=>i.KPIFieldName=='NrExpiry2') + let NrExpiry2KPIObj=NrExpiry2Index>=0?KPIFields[NrExpiry2Index]:{}; + let NrExpiry2Enable=NrExpiry2Index>=0?NrExpiry2KPIObj['KPIFieldEnable']:false; + let NrExpiry2_Dis_Name=NrExpiry2Index>=0?NrExpiry2KPIObj['KPIFieldDisplayName']:''; + + let NrExpiry3Index=KPIFields.findIndex(i=>i.KPIFieldName=='NrExpiry3') + let NrExpiry3KPIObj=NrExpiry1Index>=0?KPIFields[NrExpiry3Index]:{}; + let NrExpiry3Enable=NrExpiry1Index>=0?NrExpiry3KPIObj['KPIFieldEnable']:false; + let NrExpiry3_Dis_Name=NrExpiry1Index>=0?NrExpiry3KPIObj['KPIFieldDisplayName']:''; + + let MSLIndex=KPIFields.findIndex(i=>i.KPIFieldName=='MSL'); + let MSLObj=MSLIndex>=0?KPIFields[MSLIndex]:{}; + let isMSLAllow=MSLIndex>=0?MSLObj['KPIFieldEnable']:true; + + let NONMSL_Index=KPIFields.findIndex(i=>i.KPIFieldName=='ChildImageAllow'); + let NONMSL_Obj=NONMSL_Index>=0?KPIFields[NONMSL_Index]:{}; + let isNONMSL_Allow=NONMSL_Index>=0?NONMSL_Obj['KPIFieldEnable']:true; + + const cimgName=catData.ImageName!=null?catData.ImageName:''; + const cimgPath=catData.ImagePath!=null?catData.ImagePath:''; + const showIMg=cimgPath!='' && cimgPath!=null; + + + + return ( + + + + { + ( isHdrImgEnable==true) && + + + { !showIMg && + {openCamera(item)}}> + + + } + { showIMg && + + + {openCamera(Category)}}> + + + + } + + + } + { (rerenderdata==rerenderdata) && + subCatData.map((item,index)=>{ + const subcat=item; + const subcat_index=index; + let isSubCatCollapsed=subcat.isSubCatCollapsed!=null?subcat.isSubCatCollapsed:false; + + return( + + + {toggleCollapse(subcat,index)}}> + + {item.SubCategoryName} + + {isSubCatCollapsed==true && } + {isSubCatCollapsed==false && } + + + { !isSubCatCollapsed && + + {(rerenderdata2==rerenderdata2) && + subcat.skulist.map((item,index)=>{ + + const skus=item; + const sku_index=index; + let thisCatSkuData_i=SKUStockData.findIndex(i=>i.ProductId==skus.ProductId); + let thisCatSkuData=thisCatSkuData_i>=0?(SKUStockData[thisCatSkuData_i] || {}):{}; + let stock=thisCatSkuData.Stock!=null?thisCatSkuData.Stock:''; + let br_stock=thisCatSkuData.BackRoomStock!=null?thisCatSkuData.BackRoomStock:''; + + // let Old_Stock=thisCatSkuData.Old_Stock!=null?thisCatSkuData.Old_Stock:''; + // let OldDamagedStock=thisCatSkuData.OldDamagedStock!=null?thisCatSkuData.OldDamagedStock:''; + // let OldLostStock=thisCatSkuData.OldLostStock!=null?thisCatSkuData.OldLostStock:''; + // let OldExStock=thisCatSkuData.OldExStock!=null?thisCatSkuData.OldExStock:''; + + let isSKUPresent=thisCatSkuData.isSKUPresent!=null?thisCatSkuData.isSKUPresent:0; + let showAllSKU_Fields=thisCatSkuData.showAllSKU_Fields!=null?thisCatSkuData.showAllSKU_Fields:false; + let ex_stock=thisCatSkuData.ExpiryStock!=null?thisCatSkuData.ExpiryStock:''; + let damage_stock=thisCatSkuData.DamagedStock!=null?thisCatSkuData.DamagedStock:''; + let lost_stock=thisCatSkuData.LostStock!=null?thisCatSkuData.LostStock:''; + let mfdStocks=thisCatSkuData.mfdStocks || []; + let NearExpiry_stock1=thisCatSkuData.NearExpiry1!=null?thisCatSkuData.NearExpiry1:''; + let NearExpiry_stock2=thisCatSkuData.NearExpiry2!=null?thisCatSkuData.NearExpiry2:''; + let NearExpiry_stock3=thisCatSkuData.NearExpiry3!=null?thisCatSkuData.NearExpiry3:''; + + let isMandatory=((isMSLAllow==1 || isMSLAllow=='true') && (skus.MSL==1 || skus.MSL=='true') ) || ((isNONMSL_Allow==1 || isNONMSL_Allow=='true') && (skus.MSL!=1 && skus.MSL!='true') ) + + + return( + + {isListedSKUEnable==true && + + + {console.log('valchange:',val); let val1=(val==true)?1:0; onStockValChange(skus,val1,'isSKUPresent') }} + style={[customStyle.openStkP_checkbox,(Platform.OS=='ios'?{height:20,width:20,marginTop:8,marginLeft:8,}:{})]} + + tintColors={{ true:PageTheme.$primary_color, false:PageTheme.$text_color_light }} + /> + + {skus.ProductName} + + } + + {isListedSKUEnable!=true && {skus.ProductName}} + {((isListedSKUEnable==true && showAllSKU_Fields==true) || isListedSKUEnable==false) && + + {(isStockEnable==true) && + + + {isStockDis_Name} + {inputRefs.current['input1_'+item.ProductId]=reff;}} + placeholderTextColor={PageTheme.$placeholder_color} + value={(stock+'' || '')} + keyboardType='number-pad' + returnKeyType={(Platform.OS==='ios')?'done':'next'} + onFocus={()=>{setOnFocus(item,'1')}} + onSubmitEditing={()=>{focusToNext()}} + onChangeText={(val)=>{ onStockValChange(skus,val,'Stock','numeric')}} + /> + + + } + {(isBRStockEnable==true) && + + + {isBRStockDis_Name} + {inputRefs.current['input2_'+item.ProductId]=reff;}} + placeholderTextColor={PageTheme.$placeholder_color} + value={(br_stock+'')} + keyboardType='number-pad' + returnKeyType={(Platform.OS==='ios')?'done':'next'} + onFocus={()=>{setOnFocus(item,'2')}} + onSubmitEditing={()=>{focusToNext()}} + onChangeText={(val)=>{ onStockValChange(skus,val,'BackRoomStock','numeric')}} + /> + + + } + {(isDStockEnable==true) && + + + {isDStockDis_Name} + {inputRefs.current['input3_'+item.ProductId]=reff;}} + placeholderTextColor={PageTheme.$placeholder_color} + value={(damage_stock+'')} + keyboardType='number-pad' + returnKeyType={(Platform.OS==='ios')?'done':'next'} + onFocus={()=>{setOnFocus(item,'3')}} + onSubmitEditing={()=>{focusToNext()}} + onChangeText={(val)=>{ onStockValChange(skus,val,'DamagedStock','numeric')}} + /> + + + } + {(isLStockEnable==true) && + + + {isLStockDis_Name} + {inputRefs.current['input4_'+item.ProductId]=reff;}} + placeholderTextColor={PageTheme.$placeholder_color} + value={(lost_stock+'')} + keyboardType='number-pad' + returnKeyType={(Platform.OS==='ios')?'done':'next'} + onFocus={()=>{setOnFocus(item,'4')}} + onSubmitEditing={()=>{focusToNext()}} + onChangeText={(val)=>{ onStockValChange(skus,val,'LostStock','numeric')}} + /> + + + } + {(isExStockEnable==true ) && + + + + {isExStockDis_Name} + {inputRefs.current['input5_'+item.ProductId]=reff;}} + placeholderTextColor={PageTheme.$placeholder_color} + value={(ex_stock+'')} + keyboardType='number-pad' + returnKeyType={(Platform.OS==='ios')?'done':'next'} + onFocus={()=>{setOnFocus(item,'5')}} + onSubmitEditing={()=>{focusToNext()}} + onChangeText={(val)=>{ onStockValChange(skus,val,'ExpiryStock','numeric')}} + /> + + + } + + {(NrExpiry1Enable==true ) && + + + {NrExpiry1_Dis_Name} + {inputRefs.current['input6_'+item.ProductId]=reff;}} + placeholderTextColor={PageTheme.$placeholder_color} + value={(NearExpiry_stock1+'')} + keyboardType='number-pad' + returnKeyType={(Platform.OS==='ios')?'done':'next'} + onFocus={()=>{setOnFocus(item,'6')}} + onSubmitEditing={()=>{focusToNext()}} + onChangeText={(val)=>{ onStockValChange(skus,val,'NearExpiry1','numeric')}} + /> + + + } + {(NrExpiry2Enable==true ) && + + + {NrExpiry2_Dis_Name} + {inputRefs.current['input7_'+item.ProductId]=reff;}} + placeholderTextColor={PageTheme.$placeholder_color} + value={(NearExpiry_stock2+'')} + keyboardType='number-pad' + returnKeyType={(Platform.OS==='ios')?'done':'next'} + onFocus={()=>{setOnFocus(item,'7')}} + onSubmitEditing={()=>{focusToNext()}} + onChangeText={(val)=>{ onStockValChange(skus,val,'NearExpiry2','numeric')}} + /> + + + } + {(NrExpiry3Enable==true ) && + + + {NrExpiry3_Dis_Name} + {inputRefs.current['input8_'+item.ProductId]=reff;}} + placeholderTextColor={PageTheme.$placeholder_color} + value={(NearExpiry_stock3+'')} + keyboardType='number-pad' + returnKeyType={(Platform.OS==='ios')?'done':'next'} + onSubmitEditing={()=>{focusToNext()}} + onChangeText={(val)=>{ onStockValChange(skus,val,'NearExpiry3','numeric')}} + /> + + + } + {(isMFDEnable==true) && + + {isMFDDis_Name} + {openAddStkModal(skus)}}> + Add + + + + Date + + + Stock + + + Lot No. + + + Actions + + + + + { + mfdStocks.map((mfd_Item,mfd_index)=>{ + let mfd=mfd_Item.mfd || ''; + let stock=mfd_Item.stock || ''; + let lotno=mfd_Item.lotno || ''; + + return( + + + {mfd} + + + {stock} + + + {lotno} + + + {showRemoveConfirm(skus,mfd_Item,mfd_index)}}> + + + + + ) + }) + } + + + } + + } + + ) + }) + } + + } + + ); + }) + } + + + ) + } + + + + + + return ( + + {processing && } + + {ConfirmSaveAlert(props,showRemoveConfirm_M,()=>{setShowRemoveConfirm_M(false)},removeMFDStock,'Do you really want to remove this stock?')} + {ConfirmSaveAlert(props,showAlert,onSaveCancel,saveData)} + {rerendermodal==rerendermodal && _render_StockModal()} + {setShowCamera(false);getImage(imgData)}} showCamera={showCamera} onHideCamera={()=>{setShowCamera(false);}}/> + + {`Category: ${(Category.CategoryName!=null?(Category.CategoryName.length>40?Category.CategoryName.substring(0,40)+'...':Category.CategoryName):'')}`} + + + + + + {setSearchedItem(val); FilterStores(val)}} + /> + {FilterStores(searchedItem)}}> + + + + + + + MSL (Mandatory) + + + + Non-MSL (Non-Mandatory) + + + { Object.keys(storeData).length>0 && + _renderStocks() + } + + + {submitOpeningStock()}}/> + + + + + ); +} + + + +export default connect(mapStateToProps, mapDispatchToProps)(StockWithCat); \ No newline at end of file diff --git a/PerformicsSrc/src/screens/StoreChecklist.js b/PerformicsSrc/src/screens/StoreChecklist.js new file mode 100644 index 0000000..9ebc66c --- /dev/null +++ b/PerformicsSrc/src/screens/StoreChecklist.js @@ -0,0 +1,1784 @@ +import React, { useState, useEffect, useRef } from 'react'; +import Container from '../components/container'; +import { useRoute } from '@react-navigation/native'; +import { customStyles, GetPageTheme, STATUSBAR_HEIGHT } from "../styles/Global"; +import { Image, TextInput, View, Text, ScrollView, TouchableOpacity, Platform, FlatList, Alert, Dimensions, Animated, Easing, Keyboard } from 'react-native'; +import { connect } from 'react-redux'; +import { mapStateToProps, mapDispatchToProps } from '../reducers/contextProvider'; +import { notify } from '../components/notify'; +import moment from 'moment'; +import { getKPIFields, marktext1, marktext2, resizeImage, restore_ImageWithMetaData, validateNumber } from '../controller/functions'; +import { db, common_ImagePath, StoreCheckListImagePath } from '../constants/constants'; +import CustomHeader from '../components/customHeader'; +import { AntDesign, Entypo, FontAwesome, FontAwesome5, Fontisto, MaterialCommunityIcons } from '../components/icons'; +import CustomLoader from '../components/CustomLoader'; +import LinearGradient from 'react-native-linear-gradient'; +import { AppTables } from '../constants/tableConstants'; +import * as RNFS from 'react-native-fs'; +import GradientButton from '../components/gradientButton'; +import { ConfirmSaveAlert } from '../components/alert'; +import ModalSelector from 'react-native-modal-selector'; +import MultiSelect from 'react-native-multiple-select'; +import DateTimePicker from '@react-native-community/datetimepicker'; +import DraggableFlatList, { ScaleDecorator } from 'react-native-draggable-flatlist' +import AudioRecorderPlayer, { AudioEncoderAndroidType, AudioSourceAndroidType, AVEncoderAudioQualityIOSType, AVEncodingOption, AVModeIOSOption } from 'react-native-audio-recorder-player'; +import CustomCamera from '../components/Camera'; +import CameraImg5 from '../assets/image/astrickcamera.svg'; +import { KeyboardAwareScrollView } from 'react-native-keyboard-aware-scroll-view'; + +const { height, width } = Dimensions.get('window'); +const topbarht = STATUSBAR_HEIGHT + 50; +const actualWindowHt = parseInt((height - topbarht) + 10); + + + +function StoreChecklist(props) { + const route = useRoute(); + const ST = props.StaticText || {}; + const audioRecorderPlayer = new AudioRecorderPlayer(); + const AudioSet = { + AudioEncoderAndroid: AudioEncoderAndroidType.AAC, + AudioSourceAndroid: AudioSourceAndroidType.MIC, + AVModeIOS: AVModeIOSOption.measurement, + AVEncoderAudioQualityKeyIOS: AVEncoderAudioQualityIOSType.high, + AVNumberOfChannelsKeyIOS: 2, + AVFormatIDKeyIOS: AVEncodingOption.aac, + }; + // get all theme styles acc to current theme set + const PageTheme = GetPageTheme(props.DarkMode, route.name); + const customStyle = customStyles(props.DarkMode, route.name); + + const [processing, setProcessing] = useState(true); + const [loaderTitle, setLoaderTitle] = useState(); + const [isAdhocScreen, setIsAdhocScreen] = useState(false); + const [isBeatPlan, setIsBeatPlan] = useState(false); + const [showRating, setShowRating] = useState(false); + const [RatingQtn, setRatingQtn] = useState({}); + const [RatingOrder, setRatingOrder] = useState([]); + const [showRecorder, setShowRecorder] = useState(false); + const [VRS, setVRS] = useState({}); + const [RecorderTimer, setRecorderTimer] = useState({}); + const [playerTimer, setPlayerTimer] = useState({}); + const [rerenderView, setRerenderView] = useState(0); + const [hasUnsavedChanges, setHasUnsavedChanges] = useState(false); + const [VoiceRecorderStatus, setVoiceRecorderStatus] = useState(ST.Pressmictostartrecordingvoice); + const [RecFilePath, setRecFilePath] = useState({}); + const [dateValue, setDateValue] = useState(''); + const [openDatePicker, setOpenDatePicker] = useState(0); + const [storeData, setStoreData] = useState({}); + const [rerenderdata, setrerenderdata] = useState(0); + const [SurveyCats, setSurveyCats] = useState([]); + const [SurveyQuestions, setSurveyQuestions] = useState([]); + const [QuestionsData, setQuestionsData] = useState({}); + const [showAlert, setShowAlert] = useState(false); + const [showCamera, setShowCamera] = useState(false); + const [getImageProps, setGetImageProps] = useState({}); + const [KPIFields, setKPIFields] = useState([]); + const [isDataExists, setIsDataExists] = useState(false); + + const [isNonMerchan, setIsNonMerchan] = useState(false); + const [isNonProg, setIsNonProg] = useState(false); + const [isStoreSearch, setIsStoreSearch] = useState(false); + const [isStoreChecklistOnce, setIsStoreChecklistOnce] = useState(false); + + const animatedRipple = useRef(new Animated.Value(0)).current; + const animatedRipple2 = useRef(new Animated.Value(0.5)).current; + + const d1 = new Date(); + const d2 = moment(d1).format('MM/DD/YYYY'); + + useEffect(() => { + setLoaderTitle(ST.Loading + '...') + let params = props.route.params ? props.route.params : {}; + console.log("params----: " + params); + let storeData1 = params.storeData || {}; + let isAdhoc = params.isAdhoc || false; + let isBeat = params.isBeat != null ? params.isBeat : false; + let isNonMerchan1 = params.isNonMerchans != null ? params.isNonMerchans : false; + let isNonProgam = params.isNonProgs != null ? params.isNonProgs : false; + let isStoreSearch = params.isStoreSearch != null ? params.isStoreSearch : false; + + let StoreChecklistOnce = props.StoreChecklistOnce; + + console.log("StoreChecklistOnce--", StoreChecklistOnce) + + setIsStoreChecklistOnce(StoreChecklistOnce) + setIsAdhocScreen(isAdhoc); + setIsBeatPlan(isBeat); + setIsNonMerchan(isNonMerchan1); + setIsNonProg(isNonProgam) + setIsStoreSearch(isStoreSearch) + setStoreData(storeData1); + + getSurveyData(storeData1); + const unsubscribe = props.navigation.addListener('beforeRemove', onBeforeRemove); + return (() => { + audioRecorderPlayer.removePlayBackListener(); + audioRecorderPlayer.removeRecordBackListener(); + return unsubscribe; + }); + }, []); + + useEffect(() => { + const unsubscribe = props.navigation.addListener('beforeRemove', onBeforeRemove); + return unsubscribe; + }, [hasUnsavedChanges]); + + useEffect(() => { + const unsubscribe = props.navigation.addListener('beforeRemove', onBeforeRemove); + return unsubscribe; + }, [showCamera]); + + + function onBeforeRemove(e) { + if (showCamera == true) { + e.preventDefault(); + setShowCamera(false); + } + else { + if (hasUnsavedChanges == true) { + e.preventDefault(); // Prevent default behavior of leaving the screen + onRemoveScreen(e); + } + else { + return; + } + } + } + + function onRemoveScreen(e) { + Alert.alert( + "", + ST.Doyoureallywanttoexitthescreen, + [ + { + text: ST.Cancel, + onPress: () => { }, + style: "cancel" + }, + { text: ST.OK, onPress: () => { setHasUnsavedChanges(false); props.navigation.dispatch(e.data.action); } } + ] + ); + } + + async function getSurveyData(storeData1) { + try { + let { StoreId } = storeData1; + + await db.transaction(async function (txn) { + // let q=`Delete from ${AppTables.STORE_CHECKLIST}`; + // await txn.executeSql(q,[],async function (txn2, txnres) { + // console.log('delete all data'); + // },function (txnE,txnerr) { console.log(txnerr); },); + + let q2 = `SELECT DISTINCT T.Category,T.CategoryId FROM Master_StoreChecklist T order by T.CategorySequence`; + await txn.executeSql(q2, [], async function (txn2, txnres) { + console.log('survey all cats:', txnres.rows.length); + if (txnres.rows.length > 0) { + let arr = [], allQtns = []; + for (var i = 0; i < txnres.rows.length; i++) { + let data = txnres.rows.item(i); + let all_scat_qtns = await getSurveyQtns(storeData1, data) + console.log('all_scat_qtns:', all_scat_qtns.length) + data['Questions'] = all_scat_qtns; + allQtns = allQtns.concat(all_scat_qtns); + arr.push(data); + if (i == txnres.rows.length - 1) { + setSurveyCats(arr); + setSurveyQuestions(allQtns); + setProcessing(false); + } + } + } + }, function (txnE, txnerr) { console.log(txnerr); },); + + }); + } catch (err) { + console.log(err); + } + } + + + async function getSurveyQtns(storeData1, cat) { + return new Promise((resolve, reject) => { + try { + let { StoreId } = storeData1; + let { CategoryId } = cat; + + db.transaction(async function (txn) { + + // get inserted audit + let selectlist = ` DISTINCT T.MaxLength as MaxLength,T.Image1Mandatory, T.Image2Mandatory,T.MinLength as MinLength,T.CategoryId,T.Category,T.LengthValidation as LengthValidation,T.QuestionImageMandatory,T.QuestionImageAllow as QuestionImageAllow,T.DateRange as DateRange,T.Question as Question,T.QuestionId as QuestionId,T.QuestionType as QuestionType,T.OTP as OTP,T1.ANSWER As Answer, T1.ANSWER_ID as AnswerId,T1.IMAGE_ALLOW1 as ImageAllow1,T1.IMAGE1 as Image1,T1.IMAGE_ALLOW2 as ImageAllow2,T1.IMAGE2 as Image2,T1.MULTI_OPTIONS_IDS as multi_op_ids,T1.IS_DISABLED as isDisabled `; + let join = ` INNER JOIN ${AppTables.STORE_CHECKLIST} T1 on T.CategoryId=T1.CATEGORY_ID and T.QuestionId=T1.QUESTION_ID`; + let q2 = `Select ${selectlist} FROM Master_StoreChecklist T ${join} WHERE T1.STORE_ID='${StoreId}' AND T1.VISIT_DATE= '${d2}' AND T1.CATEGORY_ID='${CategoryId}' ORDER BY T.QuestionSequence `; + + console.log("checkchecklist: " + q2); + // else get questions from masters + // QuestionId,Question,QuestionType,QEnable,QuestionImageAllow,LengthValidation,MinLength,MaxLength,OTP,DateRange,QuestionSequence,AnswerId,Answer,AnswerSequence,ImageAllow1,ImageAllow2,EnableQuestion,DisableQuestion,CategoryId,Category,CategorySequence,ShowCat + let sl = ` DISTINCT T.CategoryId,T.Category,T.MaxLength,T.Image1Mandatory, T.Image2Mandatory,T.QuestionImageMandatory,T.MinLength,T.LengthValidation,T.Question,T.QuestionId,T.QuestionType,T.OTP,T.QuestionImageAllow,T.DateRange`; + let q = ` SELECT ${sl} FROM Master_StoreChecklist T WHERE T.CategoryId='${CategoryId}' order by T.QuestionSequence `; + + await txn.executeSql(q2, [], async function (txn2, txnres) { + console.log('getSurveyData len', txnres.rows.length); + if (txnres.rows.length > 0) { + let arr = []; + var QD = QuestionsData; + for (var i = 0; i < txnres.rows.length; i++) { + let data = txnres.rows.item(i); + + + + let answers = []; + let qtn = data; + qtn.isDisabled = qtn.isDisabled == 1 || qtn.isDisabled == '1' ? true : false + + if (data.QuestionType == 'List_Multi_Choice' || data.QuestionType == 'List_Single_Choice' || data.QuestionType == 'Rating') { + let allanswers = await getAnswers(data, storeData1, true); + + answers = allanswers.Answers || []; + if (data.QuestionType == 'Rating') { + data.showRating = false; + } + } + else if (data.QuestionType == 'Date') { + data.showDatePicker = false; + } + data.Answers = answers; + + let id_key = qtn.QuestionId + '_AnswerId'; + let ans_key = qtn.QuestionId + '_Answer'; + let multi_key = qtn.QuestionId + '_MultiOption'; + let date_key = qtn.QuestionId + '_Date'; + let img_key = qtn.QuestionId + '_ImagePath1'; + let imgname_key = qtn.QuestionId + '_ImageName1'; + let img_key2 = qtn.QuestionId + '_ImagePath2'; + let imgname_key2 = qtn.QuestionId + '_ImageName2'; + let rating_key = qtn.QuestionId + '_Rating'; + let voiceClip_key = qtn.QuestionId + '_VoiceClip'; + + let showImageTag = (data.QuestionImageAllow == true || data.QuestionImageAllow == 'true' || data.QuestionImageAllow == 1) || (data.QuestionType == "Image"); + let showImageTag2 = false; + + QD[id_key] = data.AnswerId; + QD[ans_key] = data.Answer; + + let isQtnPresent = data.Answer == 'Yes' ? 1 : 0; + + + + let selansid = data.AnswerId; + if (qtn.QuestionType == 'List_Multi_Choice') { + selansid = data.multi_op_ids ? data.multi_op_ids.split(',') : []; + QD[multi_key] = data.multi_op_ids; + } else if (qtn.QuestionType == 'Toggle') { + let animatedChoice = new Animated.Value(isQtnPresent); + data.animatedChoice = animatedChoice; + } + + if ((qtn.QuestionType == 'List_Single_Choice' || qtn.QuestionType == 'List_Multi_Choice')) { + if (qtn.Answers && qtn.Answers.length > 0) { + for (var k = 0; k < qtn.Answers.length; k++) { + let ansss = qtn.Answers[k]; + let isandImgAl = (ansss.ImageAllow1 == true || ansss.ImageAllow1 == 'true' || ansss.ImageAllow1 == 1); + let isandImgAl2 = (ansss.ImageAllow2 == true || ansss.ImageAllow2 == 'true' || ansss.ImageAllow2 == 1); + if (qtn.QuestionType == 'List_Single_Choice' && (isandImgAl && ansss.AnswerId == selansid)) { + showImageTag = true; + } + else if (qtn.QuestionType == 'List_Multi_Choice' && (isandImgAl && selansid.indexOf(ansss.AnswerId) >= 0)) { + showImageTag = true; + } + + if (qtn.QuestionType == 'List_Single_Choice' && (isandImgAl2 && ansss.AnswerId == selansid)) { + showImageTag2 = true; + } + else if (qtn.QuestionType == 'List_Multi_Choice' && (isandImgAl2 && selansid.indexOf(ansss.AnswerId) >= 0)) { + showImageTag2 = true; + } + + } + } + } + + if (showImageTag) { + let imgPath = data.Image1 != '' ? ((Platform.OS == 'ios' ? 'file://' : '') + StoreCheckListImagePath + data.Image1) : ''; + QD[imgname_key] = data.Image1; + QD[img_key] = imgPath; + } + + if (showImageTag2) { + let imgPath = data.Image2 != '' ? ((Platform.OS == 'ios' ? 'file://' : '') + StoreCheckListImagePath + data.Image2) : ''; + QD[imgname_key2] = data.Image2; + QD[img_key2] = imgPath; + } + + if (qtn.QuestionType == 'Audio') { + let voicefile_path = (Platform.OS == 'ios' ? 'file://' : '') + StoreCheckListImagePath + 'Recordings/' + data.Answer; + QD[voiceClip_key] = { 'path': voicefile_path, 'filename': data.Answer }; + } + + if (qtn.QuestionType == 'Date') { + let dayonly = moment().format('DD'); + let actual_date = data.Answer ? data.Answer.split('/') : []; + let month = actual_date[0], year = actual_date[1]; + let fulldate = month + '/' + dayonly + '/' + year; + QD[date_key] = fulldate; + + } + arr.push(data); + if (i == txnres.rows.length - 1) { + setQuestionsData(QD); + setIsDataExists(true); + resolve(arr); + } + } + } + else { + await txn.executeSql(q, [], async function (txn2, txnres2) { + console.log('Surveys Qtns:', txnres2.rows.length) + let arr = []; + let QD = QuestionsData; + if (txnres2.rows.length > 0) { + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + let answers = []; + let qtn = data; + + let id_key = qtn.QuestionId + '_AnswerId'; + let ans_key = qtn.QuestionId + '_Answer'; + + if (data.QuestionType == 'List_Multi_Choice' || data.QuestionType == 'List_Single_Choice' || data.QuestionType == 'Rating') { + let allanswers = await getAnswers(data, storeData1, false); + answers = allanswers.Answers || []; + if (data.QuestionType == 'Rating') { + data.showRating = false; + } + } + else if (data.QuestionType == 'Date') { + data.showDatePicker = false; + } + else if (data.QuestionType == 'Toggle') { + let animatedChoice = new Animated.Value(0); + data.animatedChoice = animatedChoice; + // Add default values for toggle type question only + QD[id_key] = 0; + QD[ans_key] = 'No'; + } + + + + data.Answers = answers; + arr.push(data); + + if (i == txnres2.rows.length - 1) { + setQuestionsData(QD); + setIsDataExists(false); + resolve(arr); + } + } + } + else { + resolve([]); + } + + }, function (txnE, txnerr) { console.log(txnerr); resolve([]); },); + } + + }, function (txnE, txnerr) { console.log(txnerr); resolve([]); },); + + }); + } catch (err) { + console.log(err); + } + }) + } + + async function getAnswers(qtn, storeData1, isInserted) { + let { StoreId, ChainId, StateId, StoreTypeId } = storeData1; + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + // get inserted audit + let selectlist = ` DISTINCT T.Answer,T.AnswerId,T.ImageAllow1,T.ImageAllow2,T.EnableQuestion,T.DisableQuestion`; + let q2 = `Select ${selectlist} FROM Master_StoreChecklist T WHERE T.QuestionId='${qtn.QuestionId}' AND T.CategoryId='${qtn.CategoryId}' ORDER BY T.AnswerSequence `; + + await txn.executeSql(q2, [], async function (txn2, txnres) { + // console.log('answers len',txnres.rows.length); + if (txnres.rows.length > 0) { + let arr = []; + for (var i = 0; i < txnres.rows.length; i++) { + let data = txnres.rows.item(i); + arr.push(data); + if (i == txnres.rows.length - 1) { + setSurveyQuestions(arr); + resolve(arr); + } + } + } + else { + resolve([]); + } + }, function (txnE, txnerr) { console.log(txnerr); resolve([]); },); + + }); + }).then((val) => { + return { 'Answers': val, 'Success': true }; + }).catch((err) => { + console.log(err); + return { 'Success': false, 'Error': err } + }); + } + + async function getImage(imgdata) { + let qtn = getImageProps.qtn || ''; + let type = getImageProps.type || '1'; + if (typeof imgdata == 'object' && imgdata.errorCode == 'camera_unavailable') { + notify(ST.Cameraunavailable); + } + else if (typeof imgdata == 'object' && imgdata.uri != null) { + const img = imgdata; + const imgurl = img.uri, imgWidth = img.width, imgHeight = img.ExtendedHeight; + let isImgFromGallery = img.fromGallery != null ? img.fromGallery : false; + let picture_clickedd = isImgFromGallery == true ? img.datetime : new Date(); + + let picture_clicked_time = moment(picture_clickedd).format('MM-DD-YYYY HH:mm:ss') + let picture_clicked_time_for_pic_name = moment(picture_clickedd).format('MMDDYYYY_HHmmss') + + console.log("time", picture_clicked_time); + console.log("time1", picture_clicked_time_for_pic_name); + let calculate_tym_date_for_filename = picture_clicked_time_for_pic_name; + let calculate_tym_date_over_img = picture_clicked_time; + + let filename = storeData.StoreId + '_' + qtn.QuestionId + '_StoreChecklistImg_' + calculate_tym_date_for_filename + '.jpg'; + + const mark_text1 = calculate_tym_date_over_img; + const mark_text2 = 'Store Name:' + storeData.StoreName + ' | Store Id:' + storeData.StoreId + ' | Question Id :' + qtn.QuestionId + ' | Image Type: Store Checklist' + ' | Date:' + calculate_tym_date_over_img; + + let qd = QuestionsData; + let img_key = type == '1' ? qtn.QuestionId + '_ImagePath1' : qtn.QuestionId + '_ImagePath2'; + let imgname_key = type == '1' ? qtn.QuestionId + '_ImageName1' : qtn.QuestionId + '_ImageName2'; + qd[imgname_key] = filename; + + let imagePath = StoreCheckListImagePath + filename; + RNFS.copyFile(imgurl, imagePath) + .then(async (resn) => { + // render data with clicked image + let uri = 'file://' + imagePath; + console.log('image marker', uri); + qd[img_key] = uri; + if (qtn.QuestionType == "Image") { + //set answid - 0 and answer to filename if qtnType is Image + let id_key = qtn.QuestionId + '_AnswerId'; + let ans_key = qtn.QuestionId + '_Answer'; + qd[id_key] = 0; + qd[ans_key] = ""; + } + + setQuestionsData(qd); + setHasUnsavedChanges(true); + setrerenderdata(!rerenderdata); + + // add metdata then resize image and restored back to the imagePath + let restore_data = { "destFilePath": imagePath, "imgurl": imgurl, imgWidth, imgHeight, mark_text1, mark_text2 } + let is_restored = await restore_ImageWithMetaData(restore_data, imgdata); + console.log("image restored:", is_restored); + }) + .catch(err => { + console.log('ERROR: image file write failed!!!'); + console.log(err.message, err.code); + }); + + } + } + + async function openCamera(qtn, type) { + setGetImageProps({ 'qtn': qtn, 'type': type }); + setShowCamera(true); + } + + async function disableQtns(sqtns, DQtns, data, isreturn = false) { + + if (DQtns.length > 0) { + new Promise.all( + DQtns.map((qid, q_index) => { + let s_qtnindex = sqtns.findIndex(i => i.QuestionId == qid) || {}; + console.log('sqtns qid', qid, s_qtnindex) + let s_qtn = sqtns[s_qtnindex]; + if (s_qtn != null) { + s_qtn['isDisabled'] = true + sqtns[s_qtnindex] = s_qtn; + let id_key = s_qtn.QuestionId + '_AnswerId'; + let ans_key = s_qtn.QuestionId + '_Answer'; + data[id_key] = 0; + data[ans_key] = ''; + return false + } else { + return false + } + }) + ).then(async (val) => { + setSurveyQuestions(sqtns); + setQuestionsData(data); + setHasUnsavedChanges(true); + setrerenderdata(!rerenderdata); + }) + } + } + + async function enableQtns(sqtns, EQtns, DQtns, data) { + new Promise.all( + EQtns.map((qid, q_index) => { + let s_qtnindex = sqtns.findIndex(i => i.QuestionId == qid) || {}; + let s_qtn = sqtns[s_qtnindex]; + if (s_qtn != null) { + s_qtn['isDisabled'] = false + sqtns[s_qtnindex] = s_qtn; + return false + } else { + return false + } + }) + ).then(async (val) => { + if (DQtns.length > 0) { + disableQtns(sqtns, DQtns, data) + } + else { + setSurveyQuestions(sqtns); + setHasUnsavedChanges(true); + setrerenderdata(!rerenderdata); + } + }) + } + + function onselectionChange(option, qtn) { + let data = QuestionsData; + let id_key = qtn.QuestionId + '_AnswerId'; + let ans_key = qtn.QuestionId + '_Answer'; + data[id_key] = option.value; + data[ans_key] = option.label; + + setQuestionsData(data); + + let aq_ans = qtn.Answers != null ? qtn.Answers : []; + let ans_obj = aq_ans.find(i => i.AnswerId == option.value) || {}; + let EQtns = ans_obj.EnableQuestion != null && ans_obj.EnableQuestion != '' ? ans_obj.EnableQuestion.replace(' ', '').split(',') : []; + let DQtns = ans_obj.DisableQuestion != null && ans_obj.DisableQuestion != '' ? ans_obj.DisableQuestion.replace(' ', '').split(',') : []; + + console.log('EQtns:', EQtns, DQtns); + let sqtns = SurveyQuestions + if (EQtns.length > 0) { + enableQtns(sqtns, EQtns, DQtns, data) + } + else if (DQtns.length > 0) { + disableQtns(sqtns, DQtns, data) + } + else { + setHasUnsavedChanges(true); + setrerenderdata(!rerenderdata); + } + + + + } + + function setTextValue(value, qtn, type = '') { + if (value != '') { + let isValid = validateNumber(value, type); + if (!isValid) { + return; + } + } + + let id_key = qtn.QuestionId + '_AnswerId'; + let ans_key = qtn.QuestionId + '_Answer'; + + let obj = QuestionsData; + if (qtn.QuestionType == 'Date') { + let date_key = qtn.QuestionId + '_Date'; + let d = value != null ? new Date(value) : new Date(); + let mfdate = moment(d).format('MM/YYYY'); + showQtnDatePicker(qtn, false); + obj[id_key] = 0; + obj[ans_key] = mfdate; + obj[date_key] = moment(d).format('MM/DD/YYYY'); + } + else { + obj[id_key] = 0; + obj[ans_key] = value; + } + console.log(value, obj); + setQuestionsData(obj); + setHasUnsavedChanges(true); + setrerenderdata(!rerenderdata); + } + + function onChoiceSelect(qtn, val, animatedChoice) { + + var val1 = 0; + val == 'Yes' ? val1 = 1 : ''; + + if (animatedChoice != null) { + Animated.timing(animatedChoice, { + toValue: val1, + duration: 400, + useNativeDriver: false, + }).start(); + } + let id_key = qtn.QuestionId + '_AnswerId'; + let ans_key = qtn.QuestionId + '_Answer'; + + let obj = QuestionsData; + obj[id_key] = 0; + obj[ans_key] = val; + + console.log(obj); + setQuestionsData(obj); + setHasUnsavedChanges(true); + setrerenderdata(!rerenderdata); + } + + function setRatingValue(data) { + // let ids=[]; + // data.map((item,index)=>{ + // ids.push(item.AnswerId); + // }) + setRatingOrder(data); + } + + + async function setMultiSelectValue(selectedItems = [], qtn) { + console.log('setMultiSelectValue', selectedItems); + let id_key = qtn.QuestionId + '_AnswerId'; + let ans_key = qtn.QuestionId + '_Answer'; + let multi_key = qtn.QuestionId + '_MultiOption'; + let obj = QuestionsData; + obj[id_key] = 0; + obj[multi_key] = selectedItems.join(','); + let anss = []; + selectedItems.map((itemValue) => { + let ans = qtn.Answers.find(c1 => c1.AnswerId == itemValue); + if (ans.Answer) { anss.push(ans.Answer) } + }); + obj[ans_key] = anss.join(','); + console.log('obj:', obj); + setQuestionsData(obj); + setHasUnsavedChanges(true); + setrerenderdata(!rerenderdata); + } + + + function showQtnDatePicker(qtn, show = false) { + let newqtnIndex = SurveyQuestions.findIndex(q => q.QuestionId == qtn.QuestionId); + console.log('showQtnDatePicker:', newqtnIndex); + if (newqtnIndex >= 0) { + let sq = SurveyQuestions; + let newqtn = sq[newqtnIndex]; + newqtn.showDatePicker = show; + sq[newqtnIndex] = newqtn; + setSurveyQuestions(sq); + if (show == true) setrerenderdata(!rerenderdata); + } + } + + + function setShowQtnKey(qtn, key, show = false) { + if (key != null && key != '') { + let newqtnIndex = SurveyQuestions.findIndex(q => q.QuestionId == qtn.QuestionId); + console.log('setShowQtnKey:', newqtnIndex); + if (newqtnIndex >= 0) { + let sq = SurveyQuestions; + let newqtn = sq[newqtnIndex]; + newqtn[key] = show; + sq[newqtnIndex] = newqtn; + setSurveyQuestions(sq); + if (show == true) setrerenderdata(!rerenderdata); + } + } + } + + function onRatingCancel() { + setShowRating(false); + + } + + function onRatingSave() { + setShowRating(false); + + let qtn = RatingQtn; + let id_key = qtn.QuestionId + '_AnswerId'; + let ans_key = qtn.QuestionId + '_Answer'; + let rating_key = qtn.QuestionId + '_Rating'; + let ids = [], anss = []; + RatingOrder.map((item, index) => { + ids.push(item.AnswerId); + anss.push(item.Answer); + }) + let obj = QuestionsData; + obj[rating_key] = ids.join(','); + obj[id_key] = 0; + obj[ans_key] = anss.join(','); + + console.log(obj); + setQuestionsData(obj); + setHasUnsavedChanges(true); + setrerenderdata(!rerenderdata); + } + + function onRecordCancel() { + setShowRecorder(false); + } + + function onRecordSave() { + + let isRecorderPlaying = VRS.RecorderPlayStatus != null && VRS.RecorderPlayStatus == true; + let isPlayerPlaying = VRS.PlayerPlayStatus != null && VRS.PlayerPlayStatus == true; + + if (isRecorderPlaying) { + notify(ST.Pleasestoprecordingfirst); + return; + } + else if (isPlayerPlaying) { + stopPlayer(VRS); + // notify('Please stop playing audio first'); + // return; + } + + setShowRecorder(false); + let qtn = RatingQtn; + let id_key = qtn.QuestionId + '_AnswerId'; + let ans_key = qtn.QuestionId + '_Answer'; + let voiceClip_key = qtn.QuestionId + '_VoiceClip'; + + let obj = QuestionsData; + obj[ans_key] = RecFilePath.filename || ''; + obj[id_key] = 0; + obj[voiceClip_key] = RecFilePath; + + setQuestionsData(obj); + setHasUnsavedChanges(true); + setrerenderdata(!rerenderdata); + } + + const RippleAnimation = (value, minValue, maxValue, delay) => + Animated.loop( + Animated.sequence([ + Animated.timing(value, { + toValue: maxValue, + duration: 1000, + delay: delay, + useNativeDriver: (Platform.OS == 'ios' ? false : true), + }), + Animated.timing(value, { + toValue: minValue, + duration: 1000, + delay: delay, + useNativeDriver: (Platform.OS == 'ios' ? false : true), + }), + ]), + + ).start(); + + const startRecorder = React.useCallback(async (storeData1, qtn, vrStatus) => { + try { + console.log('startRecorder') + if (audioRecorderPlayer != null) { + + if (vrStatus['RecorderPlayStatus'] == true) { + notify(ST.AlreadyRecording + '...') + return; + } + else if (vrStatus['PlayerPlayStatus'] == true) { + notify(ST.Pleasestopplayerfirst) + return; + } + + stopPlayer(vrStatus); + + let picture_clickedd = new Date(); + let picture_clicked_date = moment(picture_clickedd).format('YYYYMMDD'); + let picture_clicked_time = moment(picture_clickedd).format('HHmmss'); + let commname = storeData1.StoreId + '_' + qtn.QuestionId + '_SurveyRecording_' + picture_clicked_date + '_' + picture_clicked_time; + let filename = Platform.OS == 'ios' ? commname + '.m4a' : commname + '.mp3'; + + const url = Platform.OS == 'ios' ? 'file://' + StoreCheckListImagePath + 'Recordings/' + filename : +StoreCheckListImagePath + 'Recordings/' + filename; + const url_dir = StoreCheckListImagePath + 'Recordings/'; + console.log('write file url:', url); + RNFS.mkdir(url_dir).then((res) => { + + RNFS.writeFile(url, '') + .then(async (success) => { + // if(success!=null){ + const path = Platform.select({ + ios: url, + android: url, + }); + + const result = await audioRecorderPlayer.startRecorder(path, AudioSet); + + if (result != null && result != '') { + console.log('start recording now'); + vrStatus['RecorderPlayStatus'] = true; + setVRS(vrStatus); + setRecFilePath({ 'path': url, 'filename': filename }); + // animate + RippleAnimation(animatedRipple, 0, 1, 0); + RippleAnimation(animatedRipple2, 0, 1, 100); + + audioRecorderPlayer.addRecordBackListener((e) => { + let recordsec = e.currentPosition; + let data = { 'recordSecs': recordsec, 'recordTime': audioRecorderPlayer.mmssss(Math.floor(recordsec)) }; + if (vrStatus['RecorderPlayStatus'] == true) { + setRecorderTimer(data); + setHasUnsavedChanges(true); + setVoiceRecorderStatus(ST.RecordingPressmictostoprecording); + } + + console.log('recordsec:', recordsec); + if (recordsec >= 60 * 1000) { + stopRecorder(vrStatus); + notify(ST.Maximumrecordtimelimitreached, 'LONG'); + } + return; + }); + } + console.log('start recorder:', result); + }) + .catch((err) => { + console.log('eerriur1', err.message); + notify(ST.Somethingwentwrong + ' ' + ST.Cannotopenfileforrecording); + }); + }) + .catch((err) => { + console.log('eerriur2', err.message); + notify(ST.Somethingwentwrong + ' ' + ST.Cannotopenfileforrecording); + }); + + } + } + catch (e) { + console.log('error:', e); + } + + }, []); + + + + const stopRecorder = React.useCallback(async (vrStatus) => { + try { + console.log('stopRecorder'); + if (audioRecorderPlayer != null) { + + animatedRipple.setValue(0); + animatedRipple2.setValue(0.5); + const uri = await audioRecorderPlayer.stopRecorder(); + audioRecorderPlayer.removeRecordBackListener(); + + vrStatus['RecorderPlayStatus'] = false; + vrStatus['PlayerPlayStatus'] = false; + setPlayerTimer({}); + setVRS({ ...VRS, vrStatus }); + setVoiceRecorderStatus(ST.Pressmictostartrecordingvoice); + } + } + catch (e) { + console.log('error:', e); + } + + }, []); + + const startPlayer = React.useCallback(async (url, vrStatus1, type = '0') => { + try { + let vrStatus = VRS; + let qtn = RatingQtn; + if (audioRecorderPlayer != null) { + console.log('startPlayer1', url); + if (vrStatus['PlayerPlayStatus'] == true) { + notify(ST.AlreadyPlaying + '...') + return; + } + else if (vrStatus['RecorderPlayStatus'] == true) { + notify(ST.Pleasestoprecordingfirst) + return; + } + else if (url == '' || url == null) { + notify(ST.Filenotfound) + return; + } + + const result = await audioRecorderPlayer.startPlayer(url); + if (result != null) { + vrStatus['PlayerPlayStatus'] = true; + setVRS(vrStatus); + + audioRecorderPlayer.addPlayBackListener((e) => { + let playDuration = audioRecorderPlayer.mmssss(Math.floor(e.duration)); + let vrs = VRS; + let data = { 'playerSecs': e.currentPosition, 'totalDuration': e.duration, 'playDuration': playDuration, 'playTime': audioRecorderPlayer.mmssss(Math.floor(e.currentPosition),) }; + let data2 = { 'playerSecs': '0000', 'totalDuration': e.duration, 'playDuration': playDuration, 'playTime': "00:00:00" }; + if (vrs['PlayerPlayStatus'] == true) { + setPlayerTimer(e.currentPosition < 0 ? data2 : data); + } + if (e.currentPosition < 0) { + return; + } + let wp = e.duration != null ? Math.floor((e.currentPosition / e.duration) * 100) : 0; + console.log('wp:', wp); + if (wp >= 100 || isNaN(wp)) { + stopPlayer(vrs); + } + else if (type == '1' && wp < 1) { + pausePlayer(); + } + setProcessing(false); + return; + }); + } + else { + setProcessing(false); + } + } + } + catch (e) { + console.log('error:', e); + setProcessing(false); + } + + }, []); + + const resumePlayer = React.useCallback(async (url) => { + console.log('resume player') + let vrStatus = VRS; + const res = await audioRecorderPlayer.resumePlayer(); + console.log('res:', res); + if (res == 'No audio playing') { + startPlayer(url, vrStatus); + } + vrStatus['PlayerPlayStatus'] = true; + setVRS({ ...VRS, vrStatus }); + }, []); + + + const pausePlayer = React.useCallback(() => { + console.log('pause player') + let vrStatus = VRS; + audioRecorderPlayer.pausePlayer(); + vrStatus['PlayerPlayStatus'] = false; + setVRS({ ...VRS, vrStatus }); + }, []); + + const stopPlayer = React.useCallback(async (vrStatus) => { + try { + console.log('stop player now'); + + if (audioRecorderPlayer != null) { + const uri = await audioRecorderPlayer.stopPlayer(); + audioRecorderPlayer.removePlayBackListener(); + vrStatus['PlayerPlayStatus'] = false; + setVRS({ ...VRS, vrStatus }); + } + } + catch (e) { + console.log('error:', e); + } + + }, []); + + async function show_recorder(qtn) { + let voiceClip_key = qtn.QuestionId + '_VoiceClip'; + let url = QuestionsData[voiceClip_key] ? QuestionsData[voiceClip_key].path : ''; + setRatingQtn(qtn); + if ((RecorderTimer == null || Object.keys(RecorderTimer).length <= 0) && (playerTimer == null || Object.keys(playerTimer).length <= 0) && url != null && url != '') { + setLoaderTitle(ST.Loading + '...'); + setProcessing(true); + await startPlayer(url, VRS, '1'); + } + setRecFilePath((QuestionsData[voiceClip_key] || {})); + setShowRecorder(true); + } + + async function onSubmitData() { + let isvalid = await validate(); + if (isvalid) { + Keyboard.dismiss(); + setShowAlert(true); + } + } + + async function onSkip() { + let s_screen = "StoreDailyMenu" + if (props.ShowReportAfterCheckIn == true) { + s_screen = "ReportsMenu"; + } + props.navigation.replace(s_screen, { storeData: storeData, 'isAdhoc': isAdhocScreen, 'isBeat': isBeatPlan, "isNonMerchans": isNonMerchan, isNonProgs: isNonProg, isStoreSearch: isStoreSearch, '_fromStoreWise': true }); + } + + function onSaveCancel() { + setShowAlert(false); + } + + async function saveData() { + setHasUnsavedChanges(false); + setShowAlert(false); + setLoaderTitle(ST.SavingData + '...'); + setProcessing(true); + try { + let { StoreId, ChainId, StateId, StoreTypeId } = storeData; + await db.transaction(async function (txn) { + + let q = `DELETE FROM ${AppTables.STORE_CHECKLIST} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' `; + // remove old data + await txn.executeSql(q, [], async function (txn2, txnres) { + console.log('store checklist data deleted'); + }, function (txnE, txnerr) { console.log(txnerr); },); + + + var values = ''; + for (var i = 0; i < SurveyQuestions.length; i++) { + values += values != '' ? ' , ' : ''; + let qtn = SurveyQuestions[i]; + let id_key = qtn.QuestionId + '_AnswerId'; + let ans_key = qtn.QuestionId + '_Answer'; + let multi_key = qtn.QuestionId + '_MultiOption'; + let date_key = qtn.QuestionId + '_Date'; + let img_key1 = qtn.QuestionId + '_ImagePath1'; + let imgname_key1 = qtn.QuestionId + '_ImageName1'; + let img_key2 = qtn.QuestionId + '_ImagePath2'; + let imgname_key2 = qtn.QuestionId + '_ImageName2'; + let rating_key = qtn.QuestionId + '_Rating'; + let voiceClip_key = qtn.QuestionId + '_VoiceClip'; + + let { CategoryId, Category, DateRange, LengthValidation, MaxLength, MinLength, OTP, Question, QuestionId, QuestionImageAllow, QuestionType } = qtn; + + let selansid = QuestionsData[id_key] || 0; + let selans = QuestionsData[ans_key] || ''; + let imgName1 = QuestionsData[imgname_key1] || ''; + let imgName2 = QuestionsData[imgname_key2] || ''; + let multiops = QuestionsData[multi_key] || ''; + let isQtnDisabled = qtn.isDisabled != null && qtn.isDisabled != '' ? qtn.isDisabled ? 1 : 0 : 0; + let allanss = qtn.Answers || {}; + let ans_obj = allanss.find(i => i.AnswerId == selansid) + let imgallow1 = ans_obj != null && ans_obj['ImageAllow1'] != null ? ans_obj.ImageAllow1 : false; + let imgallow2 = ans_obj != null && ans_obj['ImageAllow2'] != null ? ans_obj.ImageAllow2 : false; + let f_imgalloq1 = (QuestionImageAllow == 'true' || QuestionImageAllow == 1) || (imgallow1 == 'true' || imgallow1 == 1) + + values += ` ('${StoreId}','${d2}','${CategoryId}','${Question}','${QuestionId}','${QuestionType}','${selans}','${selansid}','${f_imgalloq1}','${(imgName1 || '')}','${imgallow2}','${(imgName2 || '')}','${multiops}','${isQtnDisabled}','${d2}','${isStoreChecklistOnce}') `; + } + + let add_data = `INSERT INTO ${AppTables.STORE_CHECKLIST} (STORE_ID,VISIT_DATE,CATEGORY_ID,QUESTION,QUESTION_ID,QUESTION_TYPE,ANSWER,ANSWER_ID,IMAGE_ALLOW1,IMAGE1,IMAGE_ALLOW2,IMAGE2,MULTI_OPTIONS_IDS,IS_DISABLED,ADDED_DATE,STORE_CHECKLIST_ONCE ) VALUES ${values} `; + + await txn.executeSql(add_data, [], async function (txn2, txnres) { + console.log('store checklist added'); + // props.set_autoback({'AutoGoToPrev':true}); + notify('Store Checklist updated successfully!', 'SHORT'); + setProcessing(false); + let s_screen = "StoreDailyMenu" + if (props.ShowReportAfterCheckIn == true) { + s_screen = "ReportsMenu"; + } + props.navigation.replace(s_screen, { storeData: storeData, 'isAdhoc': isAdhocScreen, 'isBeat': isBeatPlan, "isNonMerchans": isNonMerchan, isNonProgs: isNonProg, isStoreSearch: isStoreSearch, '_fromStoreWise': true }); + }, function (txnE, txnerr) { console.log(txnerr); setProcessing(false); notify('Cannot update Store Checklist!') },); + + + }); + } catch (err) { + console.log(err); + } + } + + async function validate() { + let Image1MandIndex = KPIFields.findIndex(i => i.KPIFieldName == 'Image1Mandatory'); + let Image1MandObj = Image1MandIndex >= 0 ? KPIFields[Image1MandIndex] : {}; + let isImage1Mand = Image1MandIndex >= 0 ? Image1MandObj['KPIFieldEnable'] : true; + + let Image2MandIndex = KPIFields.findIndex(i => i.KPIFieldName == 'Image2Mandatory'); + let Image2MandObj = Image2MandIndex >= 0 ? KPIFields[Image2MandIndex] : {}; + let isImage2Mand = Image2MandIndex >= 0 ? Image2MandObj['KPIFieldEnable'] : false; + + var isvalid = true; + const QD = QuestionsData; + console.log(SurveyQuestions.length); + for (var i = 0; i < SurveyQuestions.length; i++) { + let qtn = SurveyQuestions[i]; + let selansid = '', selanswer = '', selimg = '', showImageTag = false, showImageTag2 = false; + let id_key = qtn.QuestionId + '_AnswerId'; + let ans_key = qtn.QuestionId + '_Answer'; + let multi_key = qtn.QuestionId + '_MultiOption'; + let date_key = qtn.QuestionId + '_Date'; + let img_key = qtn.QuestionId + '_ImagePath1'; + let imgname_key = qtn.QuestionId + '_ImageName1'; + let img_key2 = qtn.QuestionId + '_ImagePath2'; + let imgname_key2 = qtn.QuestionId + '_ImageName2'; + let rating_key = qtn.QuestionId + '_Rating'; + let voiceClip_key = qtn.QuestionId + '_VoiceClip'; + let list_mcdata = []; + let isDisabled = qtn.isDisabled != null ? qtn.isDisabled : false + if (isDisabled == true) { + + } + else { + let isImgAllowed = (qtn.QuestionImageAllow == true || qtn.QuestionImageAllow == 'true' || qtn.QuestionImageAllow == 1) || (qtn.QuestionType == "Image"); + let checkForAnsKey = (qtn.QuestionType == 'Decimal' || qtn.QuestionType == 'Number' || qtn.QuestionType == 'Text' || qtn.QuestionType == 'Date' || qtn.QuestionType == 'Rating'); + let isImg1mandatory = (qtn?.Image1Mandatory == "true" || qtn?.Image1Mandatory == 'true' || qtn?.Image1Mandatory == 1 || qtn?.Image1Mandatory); + let isImg2mandatory = (qtn?.Image2Mandatory == "true" || qtn?.Image2Mandatory == 'true' || qtn?.Image2Mandatory == 1 || qtn?.Image2Mandatory); + if (qtn.QuestionType == 'List_Single_Choice') { + selansid = QD[id_key]; + } + else if (qtn.QuestionType == 'List_Multi_Choice') { + selansid = QD[multi_key] != null && QD[multi_key] != '' ? QD[multi_key].split(',') : []; + } + if (qtn.QuestionType == 'List_Multi_Choice' && selansid.length <= 0) { + isvalid = false; + notify(ST.Pleaseselectoptionsfortherequiredfield, 'SHORT'); + break; + } + else if (checkForAnsKey && (Object.keys(QD).indexOf(ans_key) < 0 || (Object.keys(QD).indexOf(ans_key) >= 0 && QD[ans_key] === ''))) { + isvalid = false; + let msg = (qtn.QuestionType == 'Date' ? ST.Pleasepickadate : (qtn.QuestionType == 'Rating' ? ST.Pleaseselectrating : ST.Pleasefillalldetails)); + notify(msg, 'SHORT'); + break; + }else if((qtn.QuestionType=='Number'|| qtn.QuestionType=='Text') && (qtn?.LengthValidation || qtn?.LengthValidation==1) && QD[ans_key]!='' && (QD[ans_key]?.lengthqtn?.MaxLength)){ + isvalid = false; + let msg = `Entered value is not valid. Minimum length is ${qtn?.MinLength} and Maximum length is ${qtn?.MaxLength}`; + notify(msg, 'SHORT'); + break; + } + else if (qtn.QuestionType == 'Audio' && (Object.keys(QD).indexOf(voiceClip_key) < 0 || (Object.keys(QD).indexOf(voiceClip_key) >= 0 && (QD[voiceClip_key] == null || QD[voiceClip_key].filename == null || QD[voiceClip_key].filename == '')))) { + isvalid = false; + notify(ST.Pleaserecordaudioclipfortherequiredfield, 'SHORT'); + break; + } + else if ((qtn.QuestionType == 'Image' ? (qtn.QuestionImageMandatory == "true" || qtn.QuestionImageMandatory == true) : true) && Object.keys(QD).indexOf(id_key) < 0 || (Object.keys(QD).indexOf(id_key) >= 0 && (QD[id_key] === ''))) { + isvalid = false; + notify(ST.Pleasefillalldetails, 'SHORT'); + console.log(QD[id_key], QD, id_key) + break; + } + else if (isImgAllowed && isImg1mandatory && (Object.keys(QD).indexOf(img_key) < 0 || (Object.keys(QD).indexOf(img_key) >= 0 && QD[img_key] === ''))) { + isvalid = false; + notify(ST.Pleaseaddimages, 'SHORT'); + break; + } else { + console.log('no condition found'); + } + + if ((qtn.QuestionType == 'List_Single_Choice' || qtn.QuestionType == 'List_Multi_Choice')) { + if (qtn.Answers && qtn.Answers.length > 0) { + for (var j = 0; j < qtn.Answers.length; j++) { + let ansss = qtn.Answers[j]; + let isandImgAl = (ansss.ImageAllow1 == true || ansss.ImageAllow1 == 'true' || ansss.ImageAllow1 == 1); + if (qtn.QuestionType == 'List_Single_Choice' && (isandImgAl && ansss.AnswerId == selansid)) { + showImageTag = true; + } + else if (qtn.QuestionType == 'List_Multi_Choice' && (isandImgAl && selansid.indexOf(ansss.AnswerId) >= 0)) { + showImageTag = true; + } + + let isandImgAl2 = (ansss.ImageAllow2 == true || ansss.ImageAllow2 == 'true' || ansss.ImageAllow2 == 1); + if (qtn.QuestionType == 'List_Single_Choice' && (isandImgAl2 && ansss.AnswerId == selansid)) { + showImageTag2 = true; + } + else if (qtn.QuestionType == 'List_Multi_Choice' && (isandImgAl2 && selansid.indexOf(ansss.AnswerId) >= 0)) { + showImageTag2 = true; + } + } + } + } + if (isImg1mandatory && showImageTag && (Object.keys(QD).indexOf(img_key) < 0 || (Object.keys(QD).indexOf(img_key) >= 0 && QD[img_key] === ''))) { + isvalid = false; + notify(ST.Pleaseaddimages, 'SHORT'); + break; + } + if (isImg2mandatory && showImageTag2 && (Object.keys(QD).indexOf(img_key2) < 0 || (Object.keys(QD).indexOf(img_key2) >= 0 && QD[img_key2] === ''))) { + isvalid = false; + notify(ST.Pleaseaddimages, 'SHORT'); + break; + } + + } + } + + return isvalid; + } + + function render_Picker(label_key, value_key, onChange = () => { }, selected_data = {}) { + var data = []; + let qtn = selected_data.qtn || {}; + let isQtnDisabled = qtn.isDisabled != null && qtn.isDisabled != '' ? qtn.isDisabled : false; + let allAnswers = qtn.Answers || []; + + allAnswers.map((item, index) => { + let obj = { key: index, label: item[label_key], value: item[value_key] }; + if (selected_data.value == item[label_key]) + obj['component'] = {item[label_key]}; + data.push(obj); + }); + + return ( + { onChange(option, qtn) }} + overlayStyle={customStyle.addVisPickerOverlay} + cancelContainerStyle={customStyle.addVisPicker_OptionContainerStyle} + optionStyle={customStyle.addvis_opStyle} + optionTextStyle={customStyle.addvis_opTextStyle} + optionContainerStyle={customStyle.addVisPicker_OptionContainerStyle} + selectedKey={'1'} + disabled={isQtnDisabled} + cancelText={ST.Cancel} + > + {(selected_data.value != null && selected_data.value != '' ? selected_data.value : '-select-')} + + ) + } + + function renderDatePicker(qtn) { + let qtnn = qtn; + let DateRange = qtn.DateRange; + let maxDate = moment().add(10, 'years').format('MM/DD/YYYY'); + let minDate = moment().subtract(10, 'years').format('MM/DD/YYYY'); + if (DateRange == 'RFD') { + maxDate = moment().format('MM/DD/YYYY'); + } + else if (DateRange == 'RPD') { + minDate = moment().format('MM/DD/YYYY'); + } + + return ( + { setTextValue(selectedDate, qtnn) }} + maximumDate={new Date(maxDate)} + minimumDate={new Date(minDate)} + /> + ); + } + + function renderItem({ item, drag, isActive }) { + return ( + + + {item.Answer} + + + ); + }; + + function renderRatingView() { + let qtn = RatingQtn; + let Answers = qtn.Answers; + let id_key = qtn.QuestionId + '_AnswerId'; + let ans_key = qtn.QuestionId + '_Answer'; + let rating_key = qtn.QuestionId + '_Rating'; + // let ratings=QuestionsData[rating_key]!=null?QuestionsData[rating_key].split(','):[]; + + let newarr = RatingOrder; + if (RatingOrder.length <= 0) { + newarr = Answers; + } + + return ( + + + {ST.DragItemsInOrder} + {ST.Pressandholdtodrag} + { setRatingValue(data) }} + keyExtractor={(item) => item.AnswerId} + renderItem={renderItem} + /> + + { onRatingCancel() }}> + {ST.Cancel} + + { onRatingSave() }}> + {ST.Save} + + + + + ) + } + + function renderRecorderView() { + let qtn = RatingQtn; + let isRecorderPlaying = VRS.RecorderPlayStatus != null && VRS.RecorderPlayStatus == true; + let isPlayerPlaying = VRS.PlayerPlayStatus != null && VRS.PlayerPlayStatus == true; + const scale = animatedRipple.interpolate({ + inputRange: [0, 1], + outputRange: [1, 1.3], + }); + + const borderColor = animatedRipple.interpolate({ + inputRange: [0, 1], + outputRange: ['#f5acb4c2', '#fce6e9e3'], + }); + + const scale2 = animatedRipple2.interpolate({ + inputRange: [0, 1], + outputRange: [1, 1.5], + }); + + const borderColor2 = animatedRipple2.interpolate({ + inputRange: [0, 1], + outputRange: ['#f5acb4c2', '#fce6e9e3'], + }); + + let totalDuration = RecorderTimer.recordSecs != null ? RecorderTimer.recordSecs : playerTimer.totalDuration; + let wp = totalDuration != null ? Math.floor((playerTimer.playerSecs / totalDuration) * 100) : 0; + let width1 = wp <= 100 ? (wp > 0 ? wp + '%' : '0%') : '100%'; + if (isNaN(wp)) width1 = '0%'; + + return ( + + {rerenderView == rerenderView && + + {ST.RecordVoiceClip} + {ST.Youcanrecordmaxfor60secs} + {VoiceRecorderStatus} + + + + + + { startRecorder(storeData, qtn, VRS); }}> + + + {isRecorderPlaying && + { stopRecorder(VRS); }}> + + + } + + + + {RecorderTimer.recordTime} + { + (!isRecorderPlaying && RecFilePath.filename != null && RecFilePath.filename != '') && + + + + + + + {`${(playerTimer.playTime || '00:00:00')} / ${playerTimer.playDuration || RecorderTimer.recordTime}`} + + + + { let url = (Platform.OS == 'ios' ? 'file://' : '') + StoreCheckListImagePath + 'Recordings/' + RecFilePath.filename; (wp < 100 && wp > 0) ? resumePlayer(url) : startPlayer(url, VRS); }}> + + + {isPlayerPlaying && { wp < 100 ? pausePlayer() : stopPlayer(VRS); }}> + + } + + + } + + + + { onRecordCancel() }}> + {ST.Cancel} + + { onRecordSave() }}> + {ST.Save} + + + } + + ) + } + + function _renderSurveyQtns(cat) { + const SurveyQuestions = cat.Questions; + return ( + + { + SurveyQuestions.length > 0 && + SurveyQuestions.map((item, index) => { + console.log("item0000", item) + let qtn = item; + let selansid = '', selanswer = '', selimg = '', selimg2 = '', showImageTag = false, showImageTag2 = false, isQtnPresent = false, xpos = 0; + let id_key = qtn.QuestionId + '_AnswerId'; + let ans_key = qtn.QuestionId + '_Answer'; + let multi_key = qtn.QuestionId + '_MultiOption'; + let date_key = qtn.QuestionId + '_Date'; + let img_key = qtn.QuestionId + '_ImagePath1'; + let imgname_key = qtn.QuestionId + '_ImageName1'; + let img_key2 = qtn.QuestionId + '_ImagePath2'; + let imgname_key2 = qtn.QuestionId + '_ImageName2'; + let rating_key = qtn.QuestionId + '_Rating'; + let voiceClip_key = qtn.QuestionId + '_VoiceClip'; + let list_mcdata = []; + + + + if (qtn.QuestionType == 'List_Single_Choice') { + selansid = QuestionsData[id_key] != null ? QuestionsData[id_key] : ''; + selanswer = QuestionsData[ans_key] != null ? QuestionsData[ans_key] : ''; + } + else if (qtn.QuestionType == 'List_Multi_Choice') { + + if (qtn.Answers != null) { + console.log('qtn.Answers:', qtn.Answers.length); + for (var i = 0; i < qtn.Answers.length; i++) { + let obj = { 'AnswerId': parseInt(qtn.Answers[i].AnswerId), 'Answer': qtn.Answers[i].Answer }; + list_mcdata.push(obj); + } + } + selansid = QuestionsData[multi_key] != null && QuestionsData[multi_key] != '' ? QuestionsData[multi_key].split(',') : []; + if (selansid != null && selansid.length > 0) { + let arr = []; + for (var i = 0; i < selansid.length; i++) { + arr.push(parseInt(selansid[i])); + } + selansid = arr; + } + } else if (qtn.QuestionType == 'Image') { + selansid = QuestionsData[id_key] != null ? QuestionsData[id_key] : ''; + selanswer = QuestionsData[ans_key] != null ? QuestionsData[ans_key] : ''; // this is the image file name + {/* filePath=`${ImageFolderPath+currentMenu.ScreenName}/${selanswer}`; */ } + showImageTag = true; + } + else if (qtn.QuestionType == 'Number' || qtn.QuestionType == 'Text' || qtn.QuestionType == 'Decimal' || qtn.QuestionType == 'Date') { + selansid = QuestionsData[ans_key]; + selanswer = (qtn.QuestionType == 'Date') ? (QuestionsData[date_key] || moment().format('MM/DD/YYYY')) : ''; + showImageTag = (qtn.QuestionImageAllow == true || qtn.QuestionImageAllow == 'true' || qtn.QuestionImageAllow == 1); + showImageTag2 = false; + } + else if (qtn.QuestionType == 'Rating') { + selanswer = QuestionsData[ans_key] ? QuestionsData[ans_key] : ''; + } + else if (qtn.QuestionType == 'Audio') { + selansid = QuestionsData[ans_key] ? QuestionsData[ans_key] : ''; + selanswer = QuestionsData[voiceClip_key] ? (QuestionsData[voiceClip_key].filename || '') : ''; + } + else if (qtn.QuestionType == 'Toggle') { + selansid = QuestionsData[id_key] ? QuestionsData[id_key] : ''; + selanswer = QuestionsData[ans_key] ? QuestionsData[ans_key] : ''; + isQtnPresent = selanswer == 'Yes' ? 1 : 0; + + xpos = isQtnPresent == 1 ? -75 : 0; + if (qtn.animatedChoice != null) { + xpos = qtn.animatedChoice.interpolate({ + inputRange: [0, 1], + outputRange: [0, -75], + }); + } + + } + + if ((qtn.QuestionType == 'List_Single_Choice' || qtn.QuestionType == 'List_Multi_Choice')) { + if (qtn.Answers && qtn.Answers.length > 0) { + for (var i = 0; i < qtn.Answers.length; i++) { + let ansss = qtn.Answers[i]; + + let isandImgAl = (ansss.ImageAllow1 == true || ansss.ImageAllow1 == 'true' || ansss.ImageAllow1 == 1); + let isandImgAl2 = (ansss.ImageAllow2 == true || ansss.ImageAllow2 == 'true' || ansss.ImageAllow2 == 1); + + if (qtn.QuestionType == 'List_Single_Choice' && (isandImgAl && ansss.AnswerId == selansid)) { + showImageTag = true; + } + else if (qtn.QuestionType == 'List_Multi_Choice' && (isandImgAl && selansid.indexOf(ansss.AnswerId) >= 0)) { + showImageTag = true; + } + + if (qtn.QuestionType == 'List_Single_Choice' && (isandImgAl2 && ansss.AnswerId == selansid)) { + showImageTag2 = true; + } + else if (qtn.QuestionType == 'List_Multi_Choice' && (isandImgAl2 && selansid.indexOf(ansss.AnswerId) >= 0)) { + showImageTag2 = true; + } + } + } + } + + if (showImageTag) { + selimg = QuestionsData[img_key] != null && QuestionsData[img_key] != '' ? 'file://' + QuestionsData[img_key] : ''; + } + + if (showImageTag2) { + selimg2 = QuestionsData[img_key2] != null && QuestionsData[img_key2] != '' ? 'file://' + QuestionsData[img_key2] : ''; + } + + let isDisabled = qtn.isDisabled != null ? qtn.isDisabled : false + console.log('isDisabled', qtn.QuestionId, qtn.isDisabled, isDisabled) + let Image1Mandatory = (qtn.Image1Mandatory == "true") || (qtn.Image1Mandatory == true) || (qtn.QuestionImageMandatory == "true") || (qtn.QuestionImageMandatory == true) + let Image2Mandatory = (qtn.Image2Mandatory == "true") || (qtn.Image2Mandatory == true) + + if (isDisabled == true) { + return ( + + ) + } + else { + return ( + + + {qtn.Question} + {qtn.QuestionType == 'List_Single_Choice' && qtn.Answers && + render_Picker('Answer', 'AnswerId', onselectionChange, { value: selanswer, qtn: qtn }) + } + {qtn.QuestionType == 'List_Multi_Choice' && qtn.Answers && + { console.log('onSelectedItemsChange'); setMultiSelectValue(selectedItems, qtn) }} + selectedItems={selansid} + selectText="Pick Items" + searchInputPlaceholderText="Search Items..." + // onChangeInput={ (text)=> console.log(text)} + tagRemoveIconColor={PageTheme.$primary_color} + tagBorderColor={PageTheme.$primary_color} + tagTextColor={PageTheme.$primary_color} + selectedItemTextColor={PageTheme.$primary_color} + selectedItemIconColor={PageTheme.$primary_color} + tagContainerStyle={{ height: 30, width: '100%', paddingVertical: 5 }} + styleTextTag={{ fontSize: 14 }} + itemTextColor={PageTheme.$text_color} + displayKey="Answer" + searchInputStyle={{ color: '#CCC' }} + submitButtonColor={PageTheme.$primary_color} + submitButtonText="Submit" + /> + } + {(qtn.QuestionType == 'Number' || qtn.QuestionType == 'Decimal' || qtn.QuestionType == 'Text') && + { setTextValue(val, qtn, (qtn.QuestionType == 'Decimal' ? 'decimal' : (qtn.QuestionType == 'Text' ? 'text' : 'numeric'))) }} + /> + } + { + (qtn.QuestionType == 'Toggle') && + + + + + { onChoiceSelect(qtn, 'Yes', qtn.animatedChoice) }}> + {ST.Yes} + + { onChoiceSelect(qtn, 'No', qtn.animatedChoice) }}> + {ST.No} + + + + + } + { + (qtn.QuestionType == 'Date') && + + {selansid != '' ? selansid : 'MM/YYYY'} + { setDateValue(selanswer); showQtnDatePicker(qtn, true) }}> + + + + } + {((qtn.showDatePicker == true || qtn.showDatePicker == 'true') && (qtn.QuestionType == 'Date')) && + renderDatePicker(qtn) + } + { + (qtn.QuestionType == 'Rating') && + + {selanswer} + { setRatingQtn(qtn); setShowRating(true); }}> + + + + } + + { + (qtn.QuestionType == 'Audio') && + + {selanswer} + { show_recorder(qtn); }}> + + + + } + + { + showImageTag && + + + {Image1Mandatory ? + { openCamera(qtn, '1') }}> + + : + { openCamera(qtn, '1') }}> + + } + {/* {openCamera(qtn,'1')}}> + + */} + + } + + { + showImageTag2 && + + + {/* {openCamera(qtn,'2')}}> + + */} + {Image2Mandatory ? + { openCamera(qtn, '2') }}> + + : + { openCamera(qtn, '2') }}> + + } + + } + + ) + } + + }) + } + + + ); + } + + + + function _renderSurveyView() { + return ( + + {rerenderdata == rerenderdata && SurveyCats.length > 0 && + SurveyCats.map((item, index) => { + let cat = item; + + return ( + + + + {cat.Category} + + {_renderSurveyQtns(cat)} + + + ) + }) + } + + ); + } + + + + return ( + + {processing && } + + {ConfirmSaveAlert(props, showAlert, onSaveCancel, saveData)} + { setShowCamera(false); getImage(imgData) }} showCamera={showCamera} onHideCamera={() => { setShowCamera(false); }} /> + + + + + + Store Checklist + + + + + + + + {storeData.StoreName} + + {storeData.StoreType} + + + + + + + {ST.StoreId + ':'} + {storeData.StoreId} + + + {ST.StoreCode + ':'} + {storeData.StoreCode} + + + + + + + {Object.keys(SurveyQuestions).length > 0 && + _renderSurveyView() + } + + {isDataExists && + + + + { onSkip() }} style={customStyle.SChk_BtnSave} + // colors={[PageTheme.$tertiary_color,PageTheme.$tertiary_color]} + /> + + + + + { onSubmitData() }} style={customStyle.SChk_BtnSave} /> + + + + } + {!isDataExists && + + { onSubmitData() }} /> + + } + + + {showRating == true && + renderRatingView() + } + {showRecorder == true && + renderRecorderView() + } + + ); +} + + +export default connect(mapStateToProps, mapDispatchToProps)(StoreChecklist); \ No newline at end of file diff --git a/PerformicsSrc/src/screens/StoreDailyMenu.js b/PerformicsSrc/src/screens/StoreDailyMenu.js new file mode 100644 index 0000000..bfd343f --- /dev/null +++ b/PerformicsSrc/src/screens/StoreDailyMenu.js @@ -0,0 +1,1207 @@ +import React, { useState, useEffect, useCallback } from 'react'; +import Container from '../components/container'; +import { useRoute, useFocusEffect } from '@react-navigation/native'; +import { globalStyles, customStyles, GetPageTheme } from "../styles/Global"; +import { StatusBar, Image, TextInput, View, Text, ScrollView, TouchableOpacity, Platform, PermissionsAndroid, FlatList, Alert } from 'react-native'; +import { ReactReduxContext, connect, useSelector, useDispatch } from 'react-redux'; +import { mapStateToProps, mapDispatchToProps } from '../reducers/contextProvider'; +import { notify } from '../components/notify'; +import moment from 'moment'; +import { getDownloadJson, getKPIFields, goToMenuPage } from '../controller/functions'; +import { get_item, set_item, clear_item } from '../components/localStorage'; +import { version, sloganline, appname, testurl, db, colors_Arr, HierarchyTbls } from '../constants/constants'; +import CustomHeader from '../components/customHeader'; +import { AntDesign, FontAwesome } from '../components/icons'; +import CustomLoader from '../components/CustomLoader'; +import LinearGradient from 'react-native-linear-gradient'; +import { AppTables } from '../constants/tableConstants'; +import { checkFilledSurveys, getAvailblQuery, getIfAvlbl, getIfKPIDone, getQuery, Q_GetAvailabityDefaultData, Q_GetAvailablePrds, Q_getCategoryforAdditional, Q_getdefaltShareofSelf, Q_getMyStoresMenuList, Q_getpaidvisibility, Q_getpromotionmappingList, Q_getSamplingData, Q_getSurveys, Q_MenuList } from '../constants/ConstantQueries'; + +import grey_bg_image from '../assets/performics/circle_grey.svg'; +import CustomModal from '../components/CustomModal'; + +function StoreDailyMenu(props) { + const route = useRoute(); + const ST = props.StaticText || {}; + // get all theme styles acc to current theme set + const PageTheme = GetPageTheme(props.DarkMode, route.name); + const customStyle = customStyles(props.DarkMode, route.name); + + const [processing, setProcessing] = useState(true); + const [loaderTitle, setLoaderTitle] = useState(); + const [isAdhocScreen, setIsAdhocScreen] = useState(false); + const [isNonMerchan, setIsNonMerchan] = useState(false); + const [isNonProg, setIsNonProg] = useState(false); + const [isStoreSearch, setIsStoreSearch] = useState(false); + const [isBeatPlan, setIsBeatPlan] = useState(false); + const [storeData, setStoreData] = useState({}); + const [dailyMenu, setDailyMenu] = useState([]); + + const [refreshMenuRender, setRefreshMenuRender] = useState(0); + const [isLoaded, setIsLoaded] = useState(false); + const [showAlert, setShowAlert] = useState(false); + const [BgNavigateData, setBgNavigateData] = useState({}); + const [BgScreenName, setBgScreenName] = useState(''); + const [BgScreenMenu, setBgScreenMenu] = useState({}); + const [IsBackstate, setIsBackstate] = useState(false); + ///grooming + const [showGroomingPicModal, setShowGroomingPicModal] = useState(false); + + useEffect(() => { + setLoaderTitle(ST.Loading + '...') + let params = props.route.params ? props.route.params : {}; + let storeData1 = params.storeData || {}; + let isAdhoc = params.isAdhoc || false; + let isBeat = params.isBeat != null ? params.isBeat : false; + let isNonMerchan1 = params.isNonMerchans != null ? params.isNonMerchans : false; + let isNonProgam = params.isNonProgs != null ? params.isNonProgs : false; + let isStoreSearch = params.isStoreSearch != null ? params.isStoreSearch : false; + console.log('isAdhoc in sdmenu:', isAdhoc) + setIsAdhocScreen(isAdhoc); + setIsBeatPlan(isBeat); + setIsNonMerchan(isNonMerchan1) + setIsNonProg(isNonProgam) + setIsStoreSearch(isStoreSearch) + setStoreData(storeData1); + getDailyMenu(storeData1, false, isAdhoc, isBeat, isNonMerchan1, isNonProgam, isStoreSearch); + const willFocusSubscription = props.navigation.addListener('focus', () => { + console.log('storedailymenu onfocus'); + setIsBackstate(true) + getDailyMenu(storeData1, false, isAdhoc, isBeat, isNonMerchan1, isNonProgam, isStoreSearch, true); + }); + return willFocusSubscription; + }, []); + + useFocusEffect(useCallback( + () => { + getGroomingPicsData(); + }, [])); + + + useEffect(() => { + console.log('AutoGoToPrev dailmenu onchange', props.AutoGoToPrev); + if (props.AutoGoToPrev == true) { + getDailyMenu(storeData, true, isAdhocScreen, isBeatPlan, isNonMerchan, isNonProg, isStoreSearch); + } + }, [props.AutoGoToPrev]); + + function _render_Alert() { + let BgNavScreenName = (BgScreenName && BgScreenName.ScreenName) || ''; + let BgNavFlag = false + if (BgNavScreenName == 'SURVEY') { + BgNavFlag = true + } else if (BgNavScreenName == 'STOREIMG') { + BgNavFlag = true + } else if (BgNavScreenName == 'ORDERSTATUS') { + BgNavFlag = true + } + + + console.log("test000000000", BgNavFlag, BgNavigateData) + let sname = Object.keys(BgScreenMenu).length > 0 && BgScreenMenu.MenuId != "" ? BgScreenMenu.MenuName : (BgScreenName.ScreenName != null ? BgScreenName.ScreenName : ''); + return ( + + + {/* {setShowAlert(false)}}> + Cancel + */} + { setShowAlert(false); gotoKPITaskScreen(BgScreenName, BgNavFlag, BgNavigateData, BgScreenMenu); }}> + Ok + + + + ) + } + + + async function getGroomingPicsData() { + try { + db.transaction((txn) => { + const menuQuery = `SELECT * FROM Master_GroomingImages `; + // First: Fetch Menu + txn.executeSql(menuQuery, [], (txn2, txnres) => { + const len = txnres.rows.length; + const groomingArr = []; + for (let i = 0; i < len; i++) { + let data = txnres.rows.item(i); + console.log("data--------", data) + if (data.GroomingImages) { + data['GroomingImages'] = JSON.parse(data?.GroomingImages || []) + } + groomingArr.push(data); + } + const now = new Date(); + const currentTime = now.toTimeString().slice(0, 8); + const isTimeBetween = (current, start, end) => + current >= start && current <= end; + const filtered = groomingArr.filter(item => { + const hasImages = item?.GroomingImages && item?.GroomingImages?.length > 0; + const inTime = isTimeBetween(currentTime, item.StartTime, item.EndTime); + return inTime && !hasImages; // ✅ include if time matches OR images exist + }); + console.log("filtered-----", filtered) + ///need to check grooming images popup + if (filtered && filtered.length > 0 && props.GroomingObj && Object.keys(props.GroomingObj || {}).length > 0 && props.GroomingObj !== undefined) { + setShowGroomingPicModal(true) + } + }, (txn2, err2) => { + console.error("Menu fetch error:", err2); + }); + }); + } catch (err) { + console.error("getData error:", err); + } + } + + function _render_GroomingPicturesModal(item) { + return ( + + {props.GroomingObj?.GroomingTitle || 'Grooming Picture'} + + } + + titleStyle={customStyle.storelVisitM_titleStyle} + showModal={!processing && showGroomingPicModal} + > + + + {props.GroomingObj?.GroomingMsg || 'Please click your full-length photograph.'} + + + + {/* Proceed Button at bottom center */} + + { + // 👉 Handle Proceed Action + props.navigation.navigate('GroomingPictures', { storeData: storeData, 'isAdhoc': isAdhocScreen, 'isBeat': isBeatPlan, "isNonMerchans": isNonMerchan, isNonProgs: isNonProg, 'isStoreSearch': isStoreSearch, '_fromStoreWise': true }); + setShowGroomingPicModal(false); // or your handler + }} + > + + Proceed + + + + + + ) + } + + + async function getDailyMenu(storeData1, isAutoBack = false, isAdhoc, isBeat, isNonMerchan1, isNonProgam, isStoreSearch, IsBacksta = false) { + setProcessing(true); + console.log('getDailyMenu'); + try { + let d1 = new Date(); + let d2 = moment(d1).format('MM/DD/YYYY'); + let { StoreId } = storeData1; + //Check If Restore Last Visit Closing stock reuired or not + let isInsertLastVisitValid = await checkInsertLastVisitValid(storeData1); + if (isInsertLastVisitValid) { + //If Last Visit cLosing stock is available and OPS is not already filled then Restore values from LVStock to OPS + let isInserted = await InsertLastClosingStock(storeData1); + } + let q = await Q_getMyStoresMenuList(isAdhoc, storeData1, null, isBeat, isNonMerchan1, isNonProgam, isStoreSearch, props); + console.log('My menu q:', q); + await db.transaction(async function (txn) { + await txn.executeSql(q, [], async function (txn2, txnres) { + if (txnres.rows.length > 0) { + let arr = []; + let allDone = true; + for (var i = 0; i < txnres.rows.length; i++) { + let data = txnres.rows.item(i); + console.log("data---------1", data) + data.PSAllow = data.PSAllow == true || data.PSAllow == 'true' || data.PSAllow == 1 ? true : false; + let { KPIAVBL, DataRowCount, PSAllow, PSTableName, ScreenName, DataDoneCount, DataRowAvlblCount } = data; + DataRowAvlblCount = DataRowAvlblCount == null ? 0 : DataRowAvlblCount; + + // console.log("Menu PSAllow:",ScreenName,PSAllow,PSTableName); + console.log("ScreenName KPIAVBL:", PSAllow, ScreenName, KPIAVBL, DataRowCount, DataDoneCount, DataRowAvlblCount) + let isAvlbl = parseInt(KPIAVBL) > 0; + let isDone = false; + let hasSomeData = false; + if (props.PartialSaveAllow == true && PSAllow != null && PSAllow == true) { + isDone = parseInt(KPIAVBL) > 0 && parseInt(DataRowCount) > 0 && DataDoneCount >= DataRowAvlblCount; + hasSomeData = parseInt(KPIAVBL) > 0 && parseInt(DataRowCount) > 0; + } + else { + isDone = parseInt(KPIAVBL) > 0 && parseInt(DataRowCount) > 0; + hasSomeData = isDone; + } + + data['isAvlbl'] = isAvlbl; + data['isKPI_Done'] = isDone; + data['hasSomeData'] = hasSomeData; + arr.push(data); + if (isAvlbl && !isDone) { + allDone = false; + } + if (i == (txnres.rows.length - 1)) { + // Background Window Functionality + let windData = await get_item('storeData') + if (windData != null && windData != '') { + let StoreJson = JSON.parse(windData) + let { storeBGData, menuName, StoreId1, BgMenuID, NavData, visiteDate } = StoreJson + if (StoreId1 == StoreId && IsBacksta == false && visiteDate == d2) { + let bgMenuData = arr.find((val) => val.ScreenName == menuName); + // setBgScreenName(bgMenuData) + setBgNavigateData(NavData) + console.log("StoreJson-----S", StoreJson) + if (BgMenuID != null && BgMenuID != "") { + let bgMenuIndex = arr.findIndex(i => i.MenuId == BgMenuID); + if (bgMenuIndex >= 0) { + let bgMenu = arr[bgMenuIndex]; + setBgScreenName(bgMenu) + setBgScreenMenu(bgMenu); + } + } + else { + let bgMenuIndex = arr.findIndex(i => i.ScreenName == menuName); + if (bgMenuIndex >= 0) { + let bgMenu = arr[bgMenuIndex]; + setBgScreenName(bgMenu) + setBgScreenMenu(bgMenu); + } + } + + setShowAlert(true); + } + } + setDailyMenu(arr); + setIsLoaded(true); + setProcessing(false); + console.log('isAllKPIDone dailymenu :', allDone, props.AutoGoToPrev, isAutoBack) + if (allDone == true && props.AutoGoToPrev == true && isAutoBack == true) { + // props.set_autoback({'AutoGoToPrev':true}); + setTimeout(() => { + props.navigation.goBack(); + }, 3000); + } + } + } + } + else { + setProcessing(false); + } + }, function (txnE, txnerr) { console.log(txnerr); setProcessing(false); },); + + }); + } catch (err) { + console.log(err); + } + } + + + async function checkInsertLastVisitValid(storeData1) { + let { StoreId } = storeData1; + let d1 = new Date(); + let d2 = moment(d1).format('MM/DD/YYYY'); + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + //check if already stock exists or not + let chk_q = `Select * from ${AppTables.STOCK_DATA} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}'`; + //check if last visit stock exists or not + let chk_q2 = `Select * from LastVisit_ClosingStock WHERE StoreId='${StoreId}'`; + txn.executeSql(chk_q, [], async function (txn2, txnres) { + console.log('stock count:', txnres.rows.length); + //If data does not already exists + if (txnres.rows.length <= 0) { + //check if last visit stock exists or not + txn.executeSql(chk_q2, [], async function (txn2, txnres2) { + console.log('last visit stock count:', txnres2.rows.length); + //If last visit ops exists + if (txnres2.rows.length > 0) { + resolve(true); + } + else { + resolve(false); + } + }, function (txnE, txnerr) { console.log(txnerr); resolve(false) },); + } + else { + resolve(false); + } + }, function (txnE, txnerr) { console.log(txnerr); resolve(false) },); + }); + }).catch((e) => { + console.log(e); + return false; + }) + } + + async function getSeq() { + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + // select autogenerated seq from Header Table. + let seq_q = `select seq from sqlite_sequence where name="${AppTables.INSERT_OPENINGHEADER_DATA}" `; + await txn.executeSql(seq_q, [], async function (txn2, txnres) { + if (txnres.rows.length > 0) { + let data = txnres.rows.item(0); + let seq = data.seq; + resolve(seq); + } + else { + resolve(0); + } + }, function (txnE, txnerr) { console.log(txnerr); resolve(0); },); + }); + }).catch((e) => { + console.log(e); + return 0; + }); + } + + + async function InsertLastClosingStock(storeData1) { + let { StoreId, StateId, ChainId, StoreCategoryId, StoreClassId, StoreTypeId } = storeData1; + let d1 = new Date(); + let d2 = moment(d1).format('MM/DD/YYYY'); + + let seq = await getSeq(); + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + + let q = `DELETE FROM ${AppTables.STOCK_DATA} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' `; + let q2 = `DELETE FROM ${AppTables.INSERT_OPENINGHEADER_DATA} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' `; + + // remove old data + await txn.executeSql(q, [], async function (txn2, txnres) { + console.log('ops stock data deleted'); + }, function (txnE, txnerr) { console.log(txnerr); },); + + await txn.executeSql(q2, [], async function (txn2, txnres) { + console.log('ops stock header data deleted'); + }, function (txnE, txnerr) { console.log(txnerr); },); + + + function insertValues(hdrValues, OpsValues) { + let add_StockHdr = `INSERT INTO ${AppTables.INSERT_OPENINGHEADER_DATA} (STORE_ID,VISIT_DATE,CATEGORY,CATEGORY_ID,MSL,IMAGE,IMAGEPATH,ADDED_DATE) VALUES ${hdrValues} `; + let add_Stock = `INSERT INTO ${AppTables.STOCK_DATA} (COMMON_ID,STORE_ID,VISIT_DATE,CATEGORY_ID,CATEGORY,BRAND_ID,BRAND,PRODUCT_ID,PRODUCT,MSL,OPENING_STOCK,MIDDAY_STOCK,CLOSING_STOCK,EXPIRY_ISOPEN,EXPIRY_STK,EXPIRYSTOCK1,EXPIRYSTOCK2,EXPIRYSTOCK3,EXPIRYSTOCK4,ADDED_DATE) VALUES ${OpsValues} `; + + txn.executeSql(add_StockHdr, [], async function (txn2, txnres) { + console.log('last visit OPs hdr inserted successfully'); + txn.executeSql(add_Stock, [], async function (txn2, txnres) { + console.log('last visit OPs inserted successfully'); + resolve(true); + }, function (txnE, txnerr) { console.log(txnerr); resolve(false) },); + }, function (txnE, txnerr) { console.log(txnerr); resolve(false) },); + + } + + let join = ' INNER join Product_Master p on c.CategoryId=p.CategoryId '; + let join2 = ` INNER join Mapping_ProductAssortmentStorewise mp on p.ProductId=mp.ProductId `; + let skuq = `SELECT DISTINCT c.CategoryId,c.CategoryName,'' as MSL from Master_Category c ${join} ${join2} where mp.StoreId='${StoreId}' order by p.CategorySequence`; + + txn.executeSql(skuq, [], async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + let stock_values = '', values = '', insertCouunt = 0, prdLoadedForCatCount = 0; + for (let i = 0; i < txnres2.rows.length; i++) { + let catdata = txnres2.rows.item(i); + + seq++; + //build insert values for hdr(Categories) + values += values != '' ? ' , ' : ''; + values += ` ('${StoreId}','${d2}','${catdata.CategoryName}','${catdata.CategoryId}','${catdata.MSL}','','','${d2}') `; + + + + // get all product with Last Visit Stock values if available + let join6 = '', selectl_lv = ''; + selectl_lv = ` ,lv.ClosingStock as LV_ClosingStock,lv.CLS_ExpiryStock1 as LV_CLS_ExpiryStock1,lv.CLS_ExpiryStock2 as LV_CLS_ExpiryStock2,lv.CLS_ExpiryStock3 as LV_CLS_ExpiryStock3,lv.CLS_ExpiryStock4 as LV_CLS_ExpiryStock4`; + join6 = ` Left Outer join LastVisit_ClosingStock lv on lv.ProductId=p.ProductId and lv.StoreId='${StoreId}' `; + let join = ` inner join Mapping_ProductAssortmentStorewise m on p.ProductId=m.ProductId `; + let join2 = ` inner join Master_Category mc on mc.CategoryId=p.CategoryId `; + let sku_q2 = `select distinct p.ProductName,p.ProductId,p.BrandName,p.BrandId,m.MSL,p.SubCategoryName, p.SubCategoryId,p.BrandName,p.BrandId ${selectl_lv} from Product_Master p ${join} ${join2} ${join6} where m.StoreId='${StoreId}' and (p.CategoryId='${catdata.CategoryId}' or p.CategoryId= ${catdata.CategoryId}) and (CompanyId='1' or CompanyId= 1) order by p.ProductSequence`; + + txn.executeSql(sku_q2, [], async function (txn2, txnres3) { + if (txnres3.rows.length > 0) { + let hdrseq = seq; + for (var i = 0; i < txnres3.rows.length; i++) { + let data = txnres3.rows.item(i); + + //prefil values + let stock = data.LV_ClosingStock != null && data.LV_ClosingStock != 'undefined' ? data.LV_ClosingStock : '0'; + let lvCLS1 = data.LV_CLS_ExpiryStock1 != null && data.LV_CLS_ExpiryStock1 != 'undefined' ? data.LV_CLS_ExpiryStock1 : '0'; + let lvCLS2 = data.LV_CLS_ExpiryStock2 != null && data.LV_CLS_ExpiryStock2 != 'undefined' ? data.LV_CLS_ExpiryStock2 : '0'; + let lvCLS3 = data.LV_CLS_ExpiryStock3 != null && data.LV_CLS_ExpiryStock3 != 'undefined' ? data.LV_CLS_ExpiryStock3 : '0'; + let lvCLS4 = data.LV_CLS_ExpiryStock4 != null && data.LV_CLS_ExpiryStock4 != 'undefined' ? data.LV_CLS_ExpiryStock4 : '0'; + //build insert values for products + + stock_values += stock_values != '' ? ' , ' : ''; + stock_values += ` ('${hdrseq}','${StoreId}','${d2}','${catdata.CategoryId}','${catdata.CategoryName}','${data.BrandId}','${data.BrandName}','${data.ProductId}','${data.ProductName}','${data.MSL}','${stock}','','','0','0','${lvCLS1}','${lvCLS2}','${lvCLS3}','${lvCLS4}','${d2}') `; + insertCouunt++; + if (i == txnres3.rows.length - 1) { + prdLoadedForCatCount++; + if (prdLoadedForCatCount == txnres2.rows.length) { + console.log("insertCouunt:", insertCouunt); + insertValues(values, stock_values); + } + } + } + + } else { + resolve(false); + } + }, function (Etxn, txnerr) { console.log(txnerr); resolve(false) }); + } + } + else { + resolve(false); + } + }, function (Etxn, txnerr) { console.log(txnerr); resolve(false) }); + }); + }).then((val) => { + return val; + }).catch((err) => { + console.log(err); + return false; + }); + } + + + async function checkAvailability(storeData1, data) { + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + let q2 = getAvailblQuery(data.ScreenName, storeData1); + if (data.ScreenName == 'ADDITIONALVISI') { + console.log('POSM query:', q2); + } + if (q2 != '' && q2 != null) { + await txn.executeSql(q2, [], async function (txn2, txnres2) { + if (data.ScreenName == 'ADDITIONALVISI') { + console.log('POSM count:', txnres2.rows.length); + for (var n = 0; n < txnres2.rows.length; n++) { + let dkeh = txnres2.rows.item(n); + console.log(dkeh); + } + } + let isAvlbl = getIfAvlbl(data.ScreenName, txnres2, storeData1); + + resolve(isAvlbl); + }, function (txnE, txnerr) { console.log(txnerr); resolve(false); },); + } + else { + let isAvlbl = getIfAvlbl(data.ScreenName, {}, storeData1); + resolve(isAvlbl); + } + }); + }).then((val) => { + return val; + }).catch((err) => { + console.log(err); + return false; + }); + } + + async function updateStatus(storeData1, data, isAvlbl) { + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + let q2 = getQuery(data.ScreenName, storeData1); + if (q2 != '' && q2 != null && isAvlbl == true) { + await txn.executeSql(q2, [], async function (txn2, txnres2) { + let isDone = await getIfKPIDone(data.ScreenName, txnres2, storeData1); + resolve(isDone); + }, function (txnE, txnerr) { console.log(txnerr); resolve(false); },); + } + else { + resolve(false); + } + }); + }).then((val) => { + return val; + }).catch((err) => { + console.log(err); + return false; + }); + + } + + + function getQuery2(ScreenName, extraData, AllKPIFields = []) { + let d1 = new Date(); + let d2 = moment(d1).format('MM/DD/YYYY'); + let q = ``; + let cols = '', condition = ''; + switch (ScreenName) { + case 'OPSTOCK': + //pick row where either MDS is filled or CLS is filled + // q=`SELECT DISTINCT MIDDAY_STOCK FROM ${AppTables.STOCK_DATA} WHERE STORE_ID='${storeData.StoreId}' and VISIT_DATE='${d2}'`; + cols = ' ,s.MIDDAY_STOCK ', condition = ` and ((s.MIDDAY_STOCK is not null and s.MIDDAY_STOCK!='') or (s.CLOSING_STOCK is not null and s.CLOSING_STOCK!=''))`; + q = Q_GetAvailablePrds(ScreenName, storeData, AllKPIFields, cols, condition, AppTables.STOCK_DATA); + return q; + case 'MDSTOCK': + if (extraData.checkOpeningStock == '1') { + // q=`SELECT DISTINCT OPENING_STOCK FROM ${AppTables.STOCK_DATA} WHERE STORE_ID='${storeData.StoreId}' and VISIT_DATE='${d2}'`; + cols = ' ,s.OPENING_STOCK ', condition = ` and (s.OPENING_STOCK is null or s.OPENING_STOCK='undefined' or s.OPENING_STOCK='')`; + } + else { + // q=`SELECT DISTINCT CLOSING_STOCK FROM ${AppTables.STOCK_DATA} WHERE STORE_ID='${storeData.StoreId}' and VISIT_DATE='${d2}'`; + cols = ' ,s.CLOSING_STOCK ', condition = ` and (s.CLOSING_STOCK is not null and s.CLOSING_STOCK!='')`; + } + q = Q_GetAvailablePrds(ScreenName, storeData, AllKPIFields, cols, condition, AppTables.STOCK_DATA); + console.log("MDS check CLOSING_STOCK q:", q) + return q; + case 'CLSSTOCK': + if (extraData.checkOpeningStock == '1') { + // q=`SELECT DISTINCT OPENING_STOCK FROM ${AppTables.STOCK_DATA} WHERE STORE_ID='${storeData.StoreId}' and VISIT_DATE='${d2}'`; + cols = ' ,s.OPENING_STOCK ', condition = ` and (s.OPENING_STOCK is null or s.OPENING_STOCK='undefined' or s.OPENING_STOCK='')`; + } + else { + // q=`SELECT DISTINCT MIDDAY_STOCK FROM ${AppTables.STOCK_DATA} WHERE STORE_ID='${storeData.StoreId}' and VISIT_DATE='${d2}'`; + cols = ' ,s.MIDDAY_STOCK ', condition = ` and (s.MIDDAY_STOCK is null or s.MIDDAY_STOCK='undefined' or s.MIDDAY_STOCK='')`; + } + q = Q_GetAvailablePrds(ScreenName, storeData, AllKPIFields, cols, condition, AppTables.STOCK_DATA); + + return q; + case 'SALE': + console.log("extraData------------", extraData) + if (extraData.checkOpeningStock == '1') { + cols = ' ,s.OPENING_STOCK ', condition = ` and (s.OPENING_STOCK is null or s.OPENING_STOCK='undefined' or s.OPENING_STOCK='')`; + q = Q_GetAvailablePrds(ScreenName, storeData, AllKPIFields, cols, condition, AppTables.STOCK_DATA); + } + else if (extraData.checkStock == '1') { + cols = ' ,s.STOCK ', condition = ` and (s.STOCK is null or s.STOCK='undefined')`; + q = Q_GetAvailablePrds(ScreenName, storeData, AllKPIFields, cols, condition, AppTables.STOCK2_DATA); + console.log("SALW", q) + } + else { + cols = ' ,s.MIDDAY_STOCK ', condition = ` and (s.MIDDAY_STOCK is null or s.MIDDAY_STOCK='undefined' or s.MIDDAY_STOCK='')`; + q = Q_GetAvailablePrds(ScreenName, storeData, AllKPIFields, cols, condition, AppTables.STOCK_DATA); + } + return q; + + case 'PROMOTIONONEAPP': + if (extraData.checkOpeningStock == '1') { + q = `SELECT DISTINCT OPENING_STOCK FROM ${AppTables.STOCK_DATA} WHERE STORE_ID='${storeData.StoreId}' and VISIT_DATE='${d2}'`; + } + return q; + case 'PROMOTIONONEAPP_IR': + if (extraData.checkOpeningStock == '1') { + q = `SELECT DISTINCT OPENING_STOCK FROM ${AppTables.STOCK_DATA} WHERE STORE_ID='${storeData.StoreId}' and VISIT_DATE='${d2}'`; + } + return q; + default: return ''; + } + } + + async function checkForData(ScreenName, callback = () => { }, extraData = {}, AllKPIFields = []) { + try { + await db.transaction(async function (txn) { + let q2 = getQuery2(ScreenName, extraData, AllKPIFields); + if (q2 != '' && q2 != null) { + await txn.executeSql(q2, [], async function (txn2, txnres2) { + callback(txnres2); + }, function (txnE, txnerr) { console.log(txnerr); },); + } + }); + } catch (err) { + console.log(err); + } + } + + async function gotoKPITaskScreen(item, BgNav = false, BgNavData = {}, BgMenu = "") { + + let AllKPIFields = await getKPIFields(item); + console.log("BgNavData------", BgNavData) + + let isOPStockEnable = AllKPIFields.findIndex(i => i.KPIFieldName == 'PromoStock_ShowOPStockProduct') + let isOPStockEnableKPIObj = isOPStockEnable >= 0 ? AllKPIFields[isOPStockEnable] : {}; + let isOPStockEnableFlag = isOPStockEnable >= 0 ? isOPStockEnableKPIObj['KPIFieldEnable'] : false; + + switch (item.ScreenName) { + case 'STOCK': { + gotoPage('Stock', item); + } + return; + case 'STOCKWITHCATEGORY': { + gotoPage('StockCat', item); + } + return; + case 'STOCKWITHPROMO': { + gotoPage('StockPromo', item); + } + return; + + case 'ONEAPPSTOCKQRSCAN': { + + gotoPage('StockUniqueQRCode', item); + } + return; + + case 'ONEAPPSALEQRSCAN': { + gotoPage('SaleQRCode', item); + } + return; + + case 'KYCONEAPP': { + gotoPage('StoreKycForm', item); + } + return; + + case 'OPSTOCK': { + async function OPScb_middayfilledCheck(txnres2) { + let isFilled = false; + //pick row where either MDS is filled or CLS is filled + if (txnres2.rows.length > 0) { + isFilled = true; + } + + if (isFilled) { + notify("Midday Stock or Closing Stock has been updated, Opening stock cannot be changed now!", 'SHORT'); + } + else { + gotoPage('OpeningStock', item); + } + } + + let middayKpiIndex = dailyMenu.findIndex(i => i.ScreenName == 'MDSTOCK'); + let clsKpiIndex = dailyMenu.findIndex(i => i.ScreenName == 'CLSSTOCK'); + if (middayKpiIndex >= 0 || clsKpiIndex >= 0) { await checkForData(item.ScreenName, OPScb_middayfilledCheck, {}, AllKPIFields); } + else { gotoPage('OpeningStock', item); } + + } + return; + case 'BACKSTOCK': { + gotoPage('BackroomStock', item); + } + return; + case 'MDSTOCK': { + // gotoPage('MiddayStock',item);return; + let extraData = { checkOpeningStock: '1' }; + let clsKpiIndex = dailyMenu.findIndex(i => i.ScreenName == 'CLSSTOCK'); + async function MDScb_closings_filledCheck(txnres2) { + let isCSFilled = false; + if (txnres2.rows.length > 0) { + isCSFilled = true; + } + + if (isCSFilled == true) { + notify(ST.ClosingStockhasbeenupdatedMiddayStockDatacannotbechangednow, 'LONG'); + } else { + gotoPage('MiddayStock', item); + } + } + + async function MDScb_osfilledCheck(txnres2) { + let isOSFilled = true; + if (txnres2.rows.length > 0) { + isOSFilled = false; + } + + if (isOSFilled == false) { + notify(ST.FillOpenningStockfirst, 'SHORT'); + } else { + clsKpiIndex >= 0 ? await checkForData(item.ScreenName, MDScb_closings_filledCheck, {}, AllKPIFields) : gotoPage('MiddayStock', item); + } + } + + await checkForData(item.ScreenName, MDScb_osfilledCheck, extraData, AllKPIFields); + + } + return; + case 'CLSSTOCK': { + // gotoPage('ClosingStock',item);return; + let OPSTOCKKpiIndex = dailyMenu.findIndex(i => i.ScreenName == 'OPSTOCK'); + let middayKpiIndex = dailyMenu.findIndex(i => i.ScreenName == 'MDSTOCK'); + let extraData = { checkOpeningStock: '1' }; + + async function CLScb_middays_filledCheck(txnres2) { + let isCSFilled = true; + if (txnres2.rows.length > 0) { + isCSFilled = false; + } + if (isCSFilled == false) { + notify(ST.FillMiddayStockfirst, 'SHORT'); + } else { + gotoPage('ClosingStock', item); + } + } + + async function CLScb_osfilledCheck(txnres2) { + let isOSFilled = true; + if (txnres2.rows.length > 0) { + isOSFilled = false; + } + + if (isOSFilled == false) { + notify(ST.FillOpenningStockfirst, 'SHORT'); + } else { + + if (middayKpiIndex >= 0) { await checkForData(item.ScreenName, CLScb_middays_filledCheck, {}, AllKPIFields); } + else { + gotoPage('ClosingStock', item); + } + } + } + + + + if (OPSTOCKKpiIndex >= 0) { + await checkForData(item.ScreenName, CLScb_osfilledCheck, extraData, AllKPIFields); + } + else if (middayKpiIndex >= 0) { + await checkForData(item.ScreenName, CLScb_middays_filledCheck, {}, AllKPIFields); + } + else { + gotoPage('ClosingStock', item); + } + + + } + return; + case 'SOS': { + gotoPage('ShareOfShelf', item); + } + return; + case 'PAIDVISI': { + gotoPage('PaidVisibility', item); + } + return; + + case 'WAREHOUSEDEPLOY': { + gotoPage('WarehousePaidVi', item); + } + return; + + case 'WAREHOUSECAMPAIGN': { + gotoPage('WareHouseCampaignWise', item); + } + return; + case 'ADDITIONALVISI': { + gotoPage('AdditionalVisibility', item); + } + return; + case 'ADDITIONALVISI_IR': { + gotoPage('AdditionalVisibilityIR', item); + } + return; + case 'ADDITIONALVISI_IR_ONLY': { + gotoPage('AdditionalVisibilityIR_Only', item); + } + return; + case 'COMPVISI': { + gotoPage('CompetitionVisibility', item); + } + return; + case 'COMPVISI_IR': { + gotoPage('CompetitionVisibilityIR', item); + } + return; + case 'PROMOTION': { + gotoPage('Promotion', item); + } + return; + case 'COMPROMO': { + gotoPage('CompetitionPromotion', item); + } + return; + case 'CONCOV': { + gotoPage('ContactConversion', item); + } + return; + case 'SALE': { + let OPSTOCKKpiIndex = dailyMenu.findIndex(i => i.ScreenName == 'OPSTOCK'); + let middayKpiIndex = dailyMenu.findIndex(i => i.ScreenName == 'MDSTOCK'); + let StockKpiIndex = dailyMenu.findIndex(i => i.ScreenName == 'STOCK'); + let extraData = { checkOpeningStock: '1' }; + + async function SALEcb_middays_filledCheck(txnres2) { + let isCSFilled = true; + if (txnres2.rows.length > 0) { // get data if there is any row of stock having values null / undefined / blank + isCSFilled = false; + } + + if (isCSFilled == false) { + notify(ST.FillMiddayStockfirst, 'SHORT'); + } else { + gotoPage('Sale', item); + } + } + + async function SALEcb_osfilledCheck(txnres2) { + let isOSFilled = true; + if (txnres2.rows.length > 0) { // get data if there is any row of stock having values null / undefined / blank + isOSFilled = false; + } + + if (isOSFilled == false) { + notify(ST.FillOpenningStockfirst, 'SHORT'); + } else { + if (middayKpiIndex >= 0) { await checkForData(item.ScreenName, SALEcb_middays_filledCheck, {}, AllKPIFields); } + else { gotoPage('Sale', item); } + } + } + + async function SALEcb_StockfilledCheck(txnres2) { + let isStockFilled = true; + if (txnres2.rows.length > 0) { // get data if there is any row of stock having values null / undefined / blank + isStockFilled = false; + } + + if (isStockFilled == false) { + notify('Fill Stock first!', 'SHORT'); + } + else { + gotoPage('Sale', item); + } + } + + if (OPSTOCKKpiIndex >= 0) { + await checkForData(item.ScreenName, SALEcb_osfilledCheck, extraData, AllKPIFields); + } + else if (middayKpiIndex >= 0) { + await checkForData(item.ScreenName, SALEcb_middays_filledCheck, {}, AllKPIFields); + } + else if (StockKpiIndex >= 0) { + extraData = { checkStock: '1' }; + await checkForData(item.ScreenName, SALEcb_StockfilledCheck, extraData, AllKPIFields); + } + else { + gotoPage('Sale', item); + } + } + return; + case 'SURVEY': { + gotoPage('SurveyList', item, BgNav, BgNavData, BgMenu); + } + return; + case 'POSSALEONEAPP': { + gotoPage('POSSale', item); + } + return; + + case 'WINDOW': { + gotoPage('Window', item, false, {}, BgMenu); + } + return; + case 'WINDOW_IR': { + gotoPage('WindowIR', item, false, {}, BgMenu); + } + return; + case 'POSM': { + gotoPage('POSM', item); + } + return; + case 'FEEDBACK': { + gotoPage('Feedback', item); + } + return; + case 'PROMOTION2': { + gotoPage('SimplePromotion', item); + } + return; + case 'STOREIMG': { + gotoPage('StoreImages', item, BgNav, BgNavData); + } + return; + case 'SHELFTALKER': { + gotoPage('ShelfTalker', item); + } + return; + case 'PROMOTIONONEAPP': { + let extraData = { checkOpeningStock: '1' }; + async function cb_OPStock_filledCheck(txnres2) { + let isFilled = true; + if (txnres2.rows.length > 0) { + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + if (data.OPENING_STOCK !== 0 && (data.OPENING_STOCK == null || data.OPENING_STOCK == '')) { + isFilled = false; + } + if (i == txnres2.rows.length - 1) { + if (isFilled) { + gotoPage('PromotionOneApp', item); + } + else { + notify(ST.FillOpenningStockfirst, 'SHORT'); + } + } + } + } + else { + gotoPage('PromotionOneApp', item); + } + } + + if (isOPStockEnableFlag == true || isOPStockEnableFlag == "true" || isOPStockEnableFlag == 1) { + await checkForData(item.ScreenName, cb_OPStock_filledCheck, extraData, AllKPIFields); + } else { + gotoPage('PromotionOneApp', item); + } + } + return; + + case 'PAIDVISIONEAPP': { + gotoPage('PaidVisibilityOneApp', item, false, {}, BgMenu); + } + return; + case 'PAIDVISIONEAPP_IR': { + gotoPage('PaidVisibilityOneAppIR', item, false, {}, BgMenu); + } + return; + case 'PAIDVISIONEAPP_IR_ONLY': { + gotoPage('PaidVisibilityOneAppIR_Only', item, false, {}, BgMenu); + } + return; + case 'SOSONEAPP': { + gotoPage('ShareOfShelfOneApp', item); + } + return; + case 'SOSONEAPP_IR': { + gotoPage('ShareOfShelfOneAppIR', item); + } + return; + case 'SOSONEAPP_IR_ONLY': { + gotoPage('ShareOfShelfOneAppIR_Only', item); + } + return; + case 'CATEXEONEAPP': { + gotoPage('CategoryExec', item); + } + return; + case 'STORESCORE': { + gotoPage('StoreScore', item); + } + return; + case 'ORDER': { + gotoPage('Order', item); + } + return; + case 'ORDERSTATUS': { + gotoPage('OrderStatus', item, BgNav, BgNavData); + } + return; + case 'TRAININGONEAPP': { + gotoPage('Training', item); + } + return; + case 'SAMPLINGONEAPP': { + gotoPage('SamplingList', item); + } + return; + case 'PROGRAMONEAPP': { + gotoPage('ProgramQuestions', item, false, {}, BgMenu); + } + return; + case 'TGBASEDONEAPP': { + gotoPage('TGBaseVisiCooler', item, false, {}, BgMenu); + } + return; + case 'STOREDYNAMICSCORE': { + gotoPage('DynamicStoreScore', item, false, {}, BgMenu); + } + return; + case 'ONEAPPMISSEDCALL': { + gotoPage('MissedCallView', item); + // gotoPage('MissedCallList',item); + } + return; + case 'SOSEYELEVELONEAPP': { + gotoPage('SOSEyeLevel', item); + } + return; + case 'BREAKTIME': { + gotoPage('BreakTime', item); + } + return + + + case 'RETURNSTOCKONEAPP': { + gotoPage('ReturnStock', item); + } + return + + case 'ORDERSIMPLIFYONEAPP': { + gotoPage('OrderSimplify', item); + } + return + + + default: return; + } + } + + function gotoPage(screenname = '', item, BgNav = false, BgNavData = {}, BgMenu = "") { + props.set_autoback({ 'AutoGoToPrev': false }); + console.log("gotoPage in storeDailyMenu", BgNav, BgNavData); + let MenuItem = ((showAlert == true && BgMenu != null && BgMenu != "" && BgMenu.MenuId != null && BgMenu.MenuId != "") ? BgMenu : item); + console.log("gotoPage item.PSAllow:", props.PartialSaveAllow, typeof (item.PSAllow), item.PSAllow, screenname); + if (props.PartialSaveAllow == true && item.PSAllow != null && item.PSAllow == true) { + props.navigation.navigate("KPICategories", { screenname: screenname, storeData: storeData, menu: MenuItem, 'isAdhoc': isAdhocScreen, 'isBeat': isBeatPlan, 'isNonMerchans': isNonMerchan, isNonProgs: isNonProg, isStoreSearch: isStoreSearch, 'redirect': BgNav, 'BgNavData': BgNavData, ExtraData: item }) + } + else { + let obj = { props, 'storeData': storeData, 'screenname': screenname, 'MenuItem': MenuItem, 'BgNav': BgNav, 'BgNavData': BgNavData, 'isAdhocScreen': isAdhocScreen, 'isBeatPlan': isBeatPlan, 'isNonMerchan': isNonMerchan, 'isNonProg': isNonProg, 'isStoreSearch': isStoreSearch, ExtraData: item }; + goToMenuPage(obj); + } + } + + + function _renderLeftMenuItem(index, RowContent) { + return ( + + {RowContent[0]} + + ) + } + + + function _renderRightMenuItem(item, index, RowContent) { + return ( + + {RowContent[0]} + {_renderMenuItem(item, index)} + + ) + + } + + function _renderMenuItem(item, index) { + let newi = index > 2 ? ((index % 3)) : index; + let firstitem = (index % 2 == 0) ? true : false; + let arr = colors_Arr[newi] ? colors_Arr[newi].bg : colors_Arr["0"].bg; + let unavlbl_bg = ['#bfbfbf', '#bfbfbf']; + let arr_new = item.isAvlbl == false ? unavlbl_bg : arr; + let iconColor = colors_Arr[newi] ? colors_Arr[newi].color : colors_Arr["0"].color; + const imgPath = item.MenuPath + (item.isAvlbl == false ? item.GreyIcon : item.NormalIcon); + + let MBgimage = colors_Arr[newi] ? colors_Arr[newi].bgImage : colors_Arr["0"].bgImage; + MBgimage = item.isAvlbl == false ? grey_bg_image : MBgimage; + + + let hasSomeData = item.hasSomeData + return ( + { if (item.isAvlbl != false) { gotoKPITaskScreen(item) } }}> + + + + + + + + {(imgPath != null && imgPath != '') && } + + + {item.MenuName} + {item.isKPI_Done == true && + + } + {item.hasSomeData == true && !item.isKPI_Done && + + } + {props.PartialSaveAllow == true && item.PSAllow != null && item.PSAllow == true && + {`(${item.DataDoneCount}/${item.DataRowAvlblCount})`} + } + + + + ) + } + + + function _renderDailyMenu() { + var RowContent = []; + return ( + + + {refreshMenuRender == refreshMenuRender && dailyMenu.length > 0 && + dailyMenu.map((item, index) => { + let firstitem = (index % 2 == 0) ? true : false; + + if (firstitem) { + var content = _renderMenuItem(item, index); + RowContent = [content]; + if (index == dailyMenu.length - 1) { + return _renderLeftMenuItem(index, RowContent); + } + } + else { + return _renderRightMenuItem(item, index, RowContent); + } + + }) + } + + + + ); + } + + + + return ( + + {processing && } + + {_render_Alert()} + {_render_GroomingPicturesModal()} + + + {Object.keys(storeData).length > 0 && + + + + + + + + {storeData.StoreName} + + {storeData.StoreType} + + + + + + + {ST.StoreId + ':'} + {storeData.StoreId} + + + {ST.StoreCode + ':'} + {storeData.StoreCode} + + + + + + + {isLoaded == true && _renderDailyMenu()} + + } + + + + ); +} + + + +export default connect(mapStateToProps, mapDispatchToProps)(StoreDailyMenu); \ No newline at end of file diff --git a/PerformicsSrc/src/screens/StoreDailyMenuCat.js b/PerformicsSrc/src/screens/StoreDailyMenuCat.js new file mode 100644 index 0000000..90eb14f --- /dev/null +++ b/PerformicsSrc/src/screens/StoreDailyMenuCat.js @@ -0,0 +1,221 @@ +import React,{useState,useEffect} from 'react'; +import Container from '../components/container'; +import { useRoute } from '@react-navigation/native'; +import { globalStyles,customStyles,GetPageTheme } from "../styles/Global"; +import {StatusBar,Image,TextInput,View,Text,ScrollView,TouchableOpacity,Platform,PermissionsAndroid,FlatList} from 'react-native'; +import { ReactReduxContext,connect,useSelector, useDispatch } from 'react-redux'; +import { mapStateToProps,mapDispatchToProps } from '../reducers/contextProvider'; +import SQLite from 'react-native-sqlite-2'; +import {notify} from '../components/notify'; +import moment from 'moment'; +import {getDownloadJson} from '../controller/functions'; +import {get_item,set_item,clear_item} from '../components/localStorage'; +import {version,sloganline,appname,testurl,db, colors_Arr} from '../constants/constants'; +import CustomHeader from '../components/customHeader'; +import {Card, Menu, Switch} from 'react-native-paper'; +import {AntDesign} from '../components/icons'; +import { stat } from 'react-native-fs'; +import CustomLoader from '../components/CustomLoader'; +import LinearGradient from 'react-native-linear-gradient'; +import { AppTables } from '../constants/tableConstants'; +import {checkFilledSurveys, getAvailblQuery, getIfAvlbl, getIfKPIDone, getQuery, Q_GetAvailabityDefaultData, Q_getCategoryforAdditional, Q_getdefaltShareofSelf, Q_getpaidvisibility, Q_getpromotionmappingList, Q_getSamplingData, Q_getSurveys} from '../constants/ConstantQueries'; + +import grey_bg_image from '../assets/performics/circle_grey.svg'; +import { SvgXml } from 'react-native-svg'; +import CheckBox from '@react-native-community/checkbox'; + +function StoreDailyMenuCat(props) { + const route = useRoute(); + + // get all theme styles acc to current theme set + const PageTheme=GetPageTheme(props.DarkMode,route.name); + const customStyle=customStyles(props.DarkMode,route.name); + + + const [processing, setProcessing] = useState(true); + const [loaderTitle, setLoaderTitle] = useState('loading...'); + const [isAdhocScreen, setIsAdhocScreen] = useState(false); + const [storeData, setStoreData] = useState({}); + const [StoreCategories, setStoreCategories] = useState([]); + + const [refreshMenuRender, setRefreshMenuRender] = useState(0); + + + + useEffect(() => { + let params=props.route.params? props.route.params:{}; + let storeData1=params.storeData || {}; + let isAdhoc=params.isAdhoc || false; + setIsAdhocScreen(isAdhoc); + setStoreData(storeData1); + + getStoreCategories(storeData1); + const willFocusSubscription = props.navigation.addListener('focus', () => { + getStoreCategories(storeData1); + }); + + return willFocusSubscription; + }, []); + + + + // useEffect(() => { + // console.log('AutoGoToPrev dailmenu onchange',props.AutoGoToPrev); + // if(props.AutoGoToPrev==true){ + // let params=props.route.params? props.route.params:{}; + // let storeData1=params.storeData || {}; + // getDailyMenu(storeData1,true); + // } + // }, [props.AutoGoToPrev]); + + + async function getStoreCategories(storeData1){ + try { + let {StoreId,ChainId,StateId,StoreTypeId,StoreClassId,StoreCategoryId}=storeData1; + + await db.transaction(async function (txn) { + + let join=' INNER join Product_Master p on c.CategoryId=p.CategoryId '; + let join2=` INNER join Mapping_ProductAssortmentStorewise mp on p.ProductId=mp.ProductId `; + let q=`SELECT DISTINCT c.CategoryId,c.CategoryName from Master_Category c ${join} ${join2} where mp.StoreId='${StoreId}' order by p.CategorySequence`; + + await txn.executeSql(q,[],async function (txn2, txnres2) { + console.log('cats len:',txnres2.rows.length) + if(txnres2.rows.length>0){ + let arr=[]; + for(var i=0;i{ + db.transaction(async function (txn) { + let seletlist=`STOCK_UID,PRODUCT as ProductName,PRODUCT_ID as ProductId,BRAND as BrandName,BRAND_ID as BrandId,SUB_CATEGORY as SubCategoryName,SUB_CATEGORY_ID as SubCategoryId,MSL,STOCK,BACKROOM_STOCK,DAMAGED_STOCK,LOST_STOCK,EXPIRY_STOCK,IS_SKU_STOCK_PRESENT,NREXPIRY1_STOCK,NREXPIRY2_STOCK,NREXPIRY3_STOCK`; + let sku_q=`SELECT ${seletlist} FROM ${AppTables.STOCKWITHCAT_DATA} WHERE STORE_ID='${StoreId}' and CATEGORY_ID='${cat.CategoryId}' `; + await txn.executeSql(sku_q,[],async function (txn2, txnres2) { + if(txnres2.rows.length>0){ + resolve(true); + }else{ + resolve(false); + } + },function (txnE,txnerr) { console.log(txnerr);resolve(false); },); + + }); + }).catch((err)=>{ + console.log(err); + return false; + }) + } + + + function gotoPage(item){ + props.set_autoback({'AutoGoToPrev':false}); + props.navigation.navigate('StoreDailyMenu',{'storeData':storeData,'isAdhoc':isAdhocScreen,'category':item,'CategoryWiseMenu':true}); + } + + async function setCatSelected(item,index,val){ + let allData=StoreCategories; + let data=allData[index]!=null?allData[index]:{}; + data['isCatPresent']=val; + setStoreCategories(allData); + setRefreshMenuRender(!refreshMenuRender); + } + + + + + function _renderCats(){ + + return( + + + {refreshMenuRender==refreshMenuRender && StoreCategories.length>0 && + StoreCategories.map((item,index)=>{ + let isCatPresent=item.isCatPresent!=null?item.isCatPresent:false; + return ( + {gotoPage(item);}}> + + {console.log('valchange:',val); let val1=(val==true)?1:0; setCatSelected(item,index,val1); }} + style={[customStyle.catDMenuI_CheckBox,(Platform.OS=='ios'?{height:20,width:20,marginTop:8,marginLeft:8,}:{})]} + tintColors={{ true:PageTheme.$primary_color, false:PageTheme.$text_color_light }} + /> + + {item.CategoryName} + + ) + }) + } + + + + ); + } + + return ( + + {processing && } + + + + { Object.keys(storeData).length>0 && + + + + + + + + {storeData.StoreName} + + + + + + Store Id: + {storeData.StoreId} + + + Store Code: + {storeData.StoreCode} + + + + + + + {_renderCats()} + + } + + + + ); + } + + + +export default connect(mapStateToProps, mapDispatchToProps)(StoreDailyMenuCat); \ No newline at end of file diff --git a/PerformicsSrc/src/screens/StoreImages.js b/PerformicsSrc/src/screens/StoreImages.js new file mode 100644 index 0000000..7e08005 --- /dev/null +++ b/PerformicsSrc/src/screens/StoreImages.js @@ -0,0 +1,203 @@ +import React,{useState,useEffect,useRef} from 'react'; +import Container from '../components/container'; +import { useRoute } from '@react-navigation/native'; +import { globalStyles,customStyles,GetPageTheme } from "../styles/Global"; +import {StatusBar,Image,TextInput,View,Text,ScrollView,TouchableOpacity,Platform,PermissionsAndroid,FlatList, Alert,BackHandler, Animated} from 'react-native'; +import { ReactReduxContext,connect,useSelector, useDispatch } from 'react-redux'; +import { mapStateToProps,mapDispatchToProps } from '../reducers/contextProvider'; +import {notify} from '../components/notify'; +import moment from 'moment'; +import {version,sloganline,appname,testurl,db, colors_Arr, common_ImagePath} from '../constants/constants'; +import CustomHeader from '../components/customHeader'; +import CustomLoader from '../components/CustomLoader'; +import LinearGradient from 'react-native-linear-gradient'; +import { AppTables } from '../constants/tableConstants'; + + +function StoreImages(props) { + const route = useRoute(); + const ST=props.StaticText || {}; + // get all theme styles acc to current theme set + const PageTheme=GetPageTheme(props.DarkMode,route.name); + const customStyle=customStyles(props.DarkMode,route.name); + + + const [processing, setProcessing] = useState(true); + const [loaderTitle, setLoaderTitle] = useState(); + const [isAdhocScreen, setIsAdhocScreen] = useState(false); + const [isBeatPlan, setIsBeatPlan] = useState(false); + const [storeData, setStoreData] = useState({}); + const [currentMenu, setCurrentMenu] = useState({}); + const [ImageTypes, setImageTypes] = useState([]); + const [rerenderdata, setrerenderdata]= useState(0); + const [hasUnsavedChanges,setHasUnsavedChanges] = useState(false); + + const d1=new Date(); + const d2=moment(d1).format('MM/DD/YYYY'); + + useEffect(() => { + setLoaderTitle(ST.Loading+'...') + let params=props.route.params? props.route.params:{}; + let storeData1=params.storeData || {}; + let menu1=params.menu || {}; + + let isAdhoc=params.isAdhoc || false; + let isBeat=params.isBeat!=null? params.isBeat : false; + let bgRedirFlag=params.redirect || false; + let BgNavData=params.BgNavData || {}; + + setIsAdhocScreen(isAdhoc); + setIsBeatPlan(isBeat); + setStoreData(storeData1); + setCurrentMenu(menu1); + + getData(storeData1,menu1); + const unsubscribe=props.navigation.addListener('beforeRemove', onBeforeRemove); + const unsubscribeFocus= props.navigation.addListener('focus', () => {getData(storeData1,menu1);}); + if(bgRedirFlag==true && Object.keys(BgNavData).length>0){ + BgNavToStoreImageCap(BgNavData) + } + + return function cleanup() { + unsubscribeFocus(); + return unsubscribe; + }; + }, []); + + function BgNavToStoreImageCap(BgNavData){ + let { + storeData, + menu, + isAdhocScreen, + isBeat, + imageType}=BgNavData + props.navigation.navigate('StoreImagesCap',{'storeData':storeData,'menu':menu,'isAdhoc':isAdhocScreen,'isBeat':isBeat,'imageType':imageType}) + // props.navigation.navigate('SurveyView',{'surveyData':surveyData,'storeData':storeData,'menu':menu,'isAdhocScreen':isAdhocScreen,'isBeat':isBeat,'ShowCat':ShowCat}); + } + + useEffect(() => { + const unsubscribe=props.navigation.addListener('beforeRemove', onBeforeRemove); + return unsubscribe; + }, [hasUnsavedChanges]); + + function onBeforeRemove(e){ + if (hasUnsavedChanges==true) { + e.preventDefault(); // Prevent default behavior of leaving the screen + onRemoveScreen(e); + } + else{ + return; + } + } + function onRemoveScreen(e){ + Alert.alert( + "", + ST.Doyoureallywanttoexitthescreen, + [ + { + text: ST.Cancel, + onPress: () => {}, + style: "cancel" + }, + { text: ST.OK, onPress: () => {setHasUnsavedChanges(false);props.navigation.dispatch(e.data.action);} } + ] + ); + } + + + async function getData(storeData1,menu1){ + try { + let {StoreId,ChainId,StateId,StoreTypeId}=storeData1; + + await db.transaction(async function (txn) { + + let q=`Select * From Master_ImageType order by ImageSequence`; + await txn.executeSql(q,[],async function (txn2, txnres2) { + if(txnres2.rows.length>0){ + let arr=[]; + for(var i=0;i{ + let {StoreId}=storeData1; + db.transaction(async function (txn) { + + let q=`Select count(*) as ImageCount From ${AppTables.STORE_IMAGES} where STORE_ID='${StoreId}' and VISIT_DATE='${d2}' and IMAGE_TYPE_ID='${imageType.ImageTypeId}'`; + await txn.executeSql(q,[],async function (txn2, txnres2) { + if(txnres2.rows.length>0){ + let data =txnres2.rows.item(0); + let count=data.ImageCount; + + resolve(count); + } + else{ + resolve(0); + } + },function (txnE,txnerr) { console.log(txnerr);resolve(0); },); + + }); + }).catch((err)=>{ + console.log(err); + return 0; + }) + } + + + return ( + + {processing && } + + + + + {ST.ImageTypes} + + { Object.keys(storeData).length>0 && + { + let ImageCount=item.ImageCount!=null?item.ImageCount:0; + return( + {props.navigation.navigate('StoreImagesCap',{storeData:storeData,menu:currentMenu,'isAdhoc':isAdhocScreen,'isBeat':isBeatPlan,imageType:item})}}> + {item.ImageType} + {ImageCount>0 && + + {ImageCount} + + } + + ); + }} + /> + } + + + + + + ); +} + + + +export default connect(mapStateToProps, mapDispatchToProps)(StoreImages); \ No newline at end of file diff --git a/PerformicsSrc/src/screens/StoreImagesCap.js b/PerformicsSrc/src/screens/StoreImagesCap.js new file mode 100644 index 0000000..a35dd47 --- /dev/null +++ b/PerformicsSrc/src/screens/StoreImagesCap.js @@ -0,0 +1,611 @@ +import React,{useState,useEffect,useRef} from 'react'; +import Container from '../components/container'; +import { useRoute } from '@react-navigation/native'; +import { globalStyles,customStyles,GetPageTheme } from "../styles/Global"; +import {StatusBar,Image,TextInput,View,Text,ScrollView,TouchableOpacity,Platform,PermissionsAndroid,FlatList, Alert,BackHandler, Animated, AppState, Keyboard} from 'react-native'; +import { ReactReduxContext,connect,useSelector, useDispatch } from 'react-redux'; +import { mapStateToProps,mapDispatchToProps } from '../reducers/contextProvider'; + +import {notify} from '../components/notify'; +import Geolocation from 'react-native-geolocation-service'; +import moment from 'moment'; +import {getDownloadJson,getKPIFields,markAlltexts,marktext1,marktext2, resizeImage, restore_ImageWithMetaData} from '../controller/functions'; +import {get_item,set_item,clear_item} from '../components/localStorage'; +import {version,sloganline,appname,testurl,db, colors_Arr, common_ImagePath,ImageFolderPath} from '../constants/constants'; +import CustomHeader from '../components/customHeader'; +import {Card, Menu, Switch} from 'react-native-paper'; +import {AntDesign, Entypo, FontAwesome, Ionicons, MaterialCommunityIcons} from '../components/icons'; +import { stat } from 'react-native-fs'; +import CustomLoader from '../components/CustomLoader'; +import LinearGradient from 'react-native-linear-gradient'; +import { AppTables } from '../constants/tableConstants'; + +import * as RNFS from 'react-native-fs'; +import GradientButton from '../components/gradientButton'; + +import CameraImg from '../assets/performics/add_image.svg' + +import { ConfirmSaveAlert, ExitScreenAlert } from '../components/alert'; +import CustomCamera from '../components/Camera'; +import ImageViewer from 'react-native-image-zoom-viewer'; + +function StoreImagesCap(props) { + const route = useRoute(); + const ST=props.StaticText || {}; + + // get all theme styles acc to current theme set + const PageTheme=GetPageTheme(props.DarkMode,route.name); + const customStyle=customStyles(props.DarkMode,route.name); + + + const [processing, setProcessing] = useState(true); + const [loaderTitle, setLoaderTitle] = useState(); + const [isAdhocScreen, setIsAdhocScreen] = useState(false); + const [storeData, setStoreData] = useState({}); + const [currentMenu, setCurrentMenu] = useState({}); + const [ImageType, setImageType] = useState({}); + const [AllImagesData, setAllImagesData] = useState([]); + const [rerenderdata, setrerenderdata]= useState(0); + + const [showAlert, setShowAlert] = useState(false); + const [showRemoveAlert, setShowRemoveAlert] = useState(false); + const [toRemoveIndex, setToRemoveIndex] = useState(0); + const [hasUnsavedChanges,setHasUnsavedChanges] = useState(false); + const [showCamera, setShowCamera] = useState(false); + const showCameraRef = useRef(false); + const [getImageProps,setGetImageProps]= useState({}); + const [show_zoomImage, setShow_zoomImage] = useState(false); + const show_zoomImageRef = React.useRef(false); + const [refImageIndex, setrefImageIndex] = useState(0); + const [zoomImageUrl, setZoomImageUrl] = useState([]); + const [ImgCount, setImgCount] = useState(0); + + const [KPIFields, setKPIFields] = useState([]); + const [showSwitchCamera,setShowSwitchCamera]= useState(true); + + + const hasUnsavedChangesRef = React.useRef(hasUnsavedChanges); + const WindowDataRef=React.useRef(AllImagesData); + const StoreIdRef=React.useRef(null); + const ScreenNameRef=React.useRef(''); + const NavigationRef=React.useRef({}); + + const zoomView=useRef(null); + const d1=new Date(); + const d2=moment(d1).format('MM/DD/YYYY'); + + useEffect(() => { + setLoaderTitle(ST.Loading+'...') + let params=props.route.params? props.route.params:{}; + let storeData1=params.storeData || {}; + let menu1=params.menu || {}; + let imageType=params.imageType || {}; + let isBeat=params.isBeat || false; + let isAdhoc=params.isAdhoc || false; + setIsAdhocScreen(isAdhoc); + setStoreData(storeData1); + setCurrentMenu(menu1); + setImageType(imageType); + + let navData={ + 'storeData':storeData1, + 'menu':menu1, + 'isAdhocScreen':isAdhoc, + 'isBeat':isBeat, + 'imageType':imageType} + + NavigationRef.current=navData + StoreIdRef.current=storeData1.StoreId + ScreenNameRef.current=menu1.ScreenName + getData(storeData1,menu1,imageType); + + // let t={"Uploadxml":"4521testpromo06/27/2022U"} + + // console.log(JSON.stringify(t)); + const AppStateSubscription = AppState.addEventListener('change', (pro)=>{ _handleAppStateChange(pro)}); + const unsubscribe=props.navigation.addListener('beforeRemove', onBeforeRemove); + + return function cleanup() { + AppStateSubscription.remove(); + return unsubscribe; + }; + }, []); + + + + const _handleAppStateChange = async (nextAppState) => { + + if(nextAppState =='background' && hasUnsavedChangesRef.current==true){ + let newData = { + storeBGData:WindowDataRef.current, + menuName:ScreenNameRef.current, + StoreId1:StoreIdRef.current, + NavData:NavigationRef.current, + visiteDate:d2 + } + let WindowsStr= JSON.stringify(newData) + await set_item('storeData',WindowsStr); + + } + } + + // useEffect(() => { + // const unsubscribe=props.navigation.addListener('beforeRemove', onBeforeRemove); + // return unsubscribe; + // }, [hasUnsavedChanges]); + + // useEffect(() => { + // const unsubscribe=props.navigation.addListener('beforeRemove', onBeforeRemove); + // return unsubscribe; + // }, [showCamera]); + + // useEffect(() => { + // const unsubscribe=props.navigation.addListener('beforeRemove', onBeforeRemove); + // return unsubscribe; + // }, [show_zoomImage]); + + function onBeforeRemove(e){ + + if(showCameraRef.current==true){ + e.preventDefault(); + setShowCamera(false); + } + else if(show_zoomImageRef.current==true){ + e.preventDefault(); + BgShow_zoomImage(false); + } + else{ + if (hasUnsavedChangesRef.current==true) { + e.preventDefault(); // Prevent default behavior of leaving the screen + onRemoveScreen(e); + } + else{ + return; + } + } + } + + function BgUnsavedChanges(val){ + hasUnsavedChangesRef.current=val + setHasUnsavedChanges(val); + } + + function BgShowCamera(val){ + showCameraRef.current=val + setShowCamera(val); + } + + function BgShow_zoomImage(val){ + show_zoomImageRef.current=val + setShow_zoomImage(val); + } + + + + + + function BgWindowData(val){ + WindowDataRef.current=val + setAllImagesData(val); + } + + function onRemoveScreen(e){ + Alert.alert( + "", + ST.Doyoureallywanttoexitthescreen, + [ + { + text: ST.Cancel, + onPress: () => {}, + style: "cancel" + }, + { text: ST.OK, onPress: async () => { + // setHasUnsavedChanges(false); + BgUnsavedChanges(false) + await clear_item('storeData') + props.navigation.dispatch(e.data.action);} } + ] + ); + } + + + async function getData(storeData1,menu1,imageType){ + try { + let {StoreId,ChainId,StateId,StoreTypeId}=storeData1; + + let AllKPIFields=await getKPIFields(menu1); + setKPIFields(AllKPIFields); + // set switch camera flag as defined in mapping menu flag (if exists) + let SwitchingCameraI=AllKPIFields.findIndex(i=>i.KPIFieldName=='SwitchingCamera'); + let SwitchingCameraObj=SwitchingCameraI>=0?AllKPIFields[SwitchingCameraI]:{}; + let SwitchingCamera=SwitchingCameraI>=0?SwitchingCameraObj['KPIFieldEnable']:true; + setShowSwitchCamera(SwitchingCamera); + + + let windData = await get_item('storeData'); + let isBgDataExists=false; + if(windData!=null && windData!=''){ + let StoreJson = JSON.parse(windData) + let { storeBGData,menuName,StoreId1,visiteDate }= StoreJson + if(storeBGData.length>0 && menuName == menu1.ScreenName && StoreId1== StoreId && visiteDate==d2){ + isBgDataExists=true; + BgUnsavedChanges(true) + BgWindowData(storeBGData); + } + } + + await db.transaction(async function (txn) { + + + let q=`Select * From ${AppTables.STORE_IMAGES} where STORE_ID='${StoreId}' and VISIT_DATE='${d2}' and IMAGE_TYPE_ID='${imageType.ImageTypeId}'`; + await txn.executeSql(q,[],async function (txn2, txnres2) { + if(txnres2.rows.length>0){ + let arr=[]; + for(var i=0;i { + let latitude=position.coords.latitude; + let longitude=position.coords.longitude; + latitude=parseFloat(parseFloat(latitude).toFixed(8).replace("-e","")); + longitude=parseFloat(parseFloat(longitude).toFixed(8).replace("-e","")); + + let loc={lat:latitude,lng:longitude}; + + console.log("location------",loc) + successCallback(loc); + }, + (error) => { + notify(ST.Cannotgetuserposition); + }, + { enableHighAccuracy: true, distanceFilter: 0, interval: 1000, fastestInterval: 2000 } + ); + + } + + + async function getImage(imgdata,Imglocation){ + let imageTypeName=ImageType.ImageType; + let imageTypeId=ImageType.ImageTypeId; + if(typeof imgdata =='object' && imgdata.errorCode=='camera_unavailable'){ + notify(ST.Cameraunavailable); + } + else if(typeof imgdata =='object' && imgdata.uri!=null){ + const img=imgdata; + const imgurl=img.uri, imgWidth=img.width, imgHeight=img.ExtendedHeight; + let isImgFromGallery=img.fromGallery!=null?img.fromGallery:false; + let picture_clickedd=isImgFromGallery==true?img.datetime:new Date(); + + let picture_clicked_time=moment(picture_clickedd).format('MM-DD-YYYY HH:mm:ss') + let picture_clicked_time_for_pic_name=moment(picture_clickedd).format('MMDDYYYY_HHmmss') + + console.log("time", picture_clicked_time); + console.log("time1", picture_clicked_time_for_pic_name); + let calculate_tym_date_for_filename = picture_clicked_time_for_pic_name; + let calculate_tym_date_over_img = picture_clicked_time; + + const mark_text1=calculate_tym_date_over_img; + const mark_text2='Store Name:'+storeData.StoreName+' | Store Id:'+storeData.StoreId+' | User Id:'+storeData.EmpId+' | Image Type: '+currentMenu.MenuName+' - '+imageTypeName+' | Date:'+calculate_tym_date_over_img; + let filename=storeData.StoreId+'_'+(props.UserId || '')+'_'+imageTypeId+'Img-'+calculate_tym_date_for_filename+'.jpg'; + + let allData=AllImagesData; + let imgData={} + let image_key='ImageName'; + let image_path_key='ImagePath'; + imgData[image_key]=filename; + + imgData['lat']=Imglocation.lat||0; + imgData['lng']=Imglocation.lng||0; + + + let imagePath='file://'+ImageFolderPath+currentMenu.ScreenName+"/"+filename; + // if(resize_res.success){ + // file resized now rename file + RNFS.copyFile(imgurl, imagePath) + .then(async(resn) => { + let uri=imagePath; + console.log('image marker',uri); + imgData[image_path_key]=uri; + allData.push(imgData); + setImgCount(ImgCount+1) + + // setAllImagesData(allData); + // setHasUnsavedChanges(true); + BgWindowData(allData); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + + + // add metdata then resize image and restored back to the imagePath + let restore_data={"destFilePath":imagePath,"imgurl":imgurl,imgWidth,imgHeight,mark_text1,mark_text2} + let is_restored=await restore_ImageWithMetaData(restore_data,imgdata); + console.log("image restored:",is_restored); + }) + .catch(err => { + console.log('ERROR: image file write failed!!!'); + console.log(err.message, err.code); + }); + } + } + + async function getImageLocation(imgdata){ + await getPosition_global((res)=>getImage(imgdata,res)) + } + async function openCamera(){ + BgShowCamera(true); + } + + async function removeImage(){ + let index=toRemoveIndex; + let allData=AllImagesData; + let imgData=allData[index]; + let imgPath=imgData.ImagePath || ''; + if(imgPath!=''){ + let imgPath1='file://'+imgPath; + RNFS.unlink(imgPath1); + if(ImgCount>0){ + setImgCount(ImgCount-1) + } + } + allData.splice(index,1); + // setAllImagesData(allData); + BgWindowData(allData) + setShowRemoveAlert(false); + setrerenderdata(!rerenderdata); + } + + async function onRemoveImage(imgName,index){ + setToRemoveIndex(index); + setShowRemoveAlert(true); + } + + async function submit(){ + let isvalid=await validate(); + if(isvalid){ + Keyboard.dismiss(); + setShowAlert(true); + } + } + + async function validate(){ + let isValid=true; + let {MaxImage}=ImageType; + console.log('ImageType.MinImage:',ImgCount,"<",ImageType.MinImage,ImgCountMaxImage){ + isValid=false; + notify(`You can add maximum of ${MaxImage} Images.`); + } + return isValid; + } + + + async function saveData(){ + // setHasUnsavedChanges(false); + BgUnsavedChanges(false) + setShowAlert(false); + setLoaderTitle(ST.SavingData+'...'); + setProcessing(true); + try { + let {StoreId,ChainId,StateId,StoreTypeId}=storeData; + let imgType=ImageType.ImageType; + let imgTypeId=ImageType.ImageTypeId; + + await db.transaction(async function (txn) { + + let q=`DELETE FROM ${AppTables.STORE_IMAGES} where STORE_ID='${StoreId}' and VISIT_DATE='${d2}' and IMAGE_TYPE_ID='${ImageType.ImageTypeId}' `; + // remove old data + + await txn.executeSql(q,[],async function (txn2, txnres) { + console.log('Images data deleted'); + let values=''; + if(AllImagesData.length>0){ + + + for(var i=0;i{ + console.log('response',response); + if(response.status === 404) {}else { return response.json()} + + }).then((response)=>{ + console.log(response); + + }).catch((error)=>{ + console.log('error:',error); + }) + + + } + + async function showImage(item,index){ + let ImagePath=item.ImagePath; + let imgObj={imgIndex:1,url: ImagePath, props: {}} + let arr=[imgObj]; + setZoomImageUrl(arr); + BgShow_zoomImage(true); + } + + function _renderHeader(currentIndex){ + return( + + {/* {`${(currentIndex+1)}/${zoomImageUrl.length}`} */} + {BgShow_zoomImage(false) }}> + + + + ) + } + + function _renderTopEl(){ + let isMaxCountAvlbl=ImageType!=null && ImageType.MaxImage!=null && ImageType.MaxImage!=''; + let CamDisabled=isMaxCountAvlbl && AllImagesData.length>=ImageType.MaxImage ; + return ( + + { + isMaxCountAvlbl && + + {`You can capture maximum ${ImageType.MaxImage} images.`} + + + } + + + {openCamera()}}> + + + + + + ) + } + + + return ( + + {processing && } + + {ConfirmSaveAlert(props,showAlert,onSaveCancel,saveData)} + {ConfirmSaveAlert(props,showRemoveAlert,onRemoveCancel,removeImage,ST.DoyoureallywanttoremovethisImage)} + {BgShowCamera(false);getImageLocation(imgData)}} showCamera={showCamera} onHideCamera={()=>{BgShowCamera(false);}}/> + + + + {(ImageType.ImageType!=null?`${ST.Add} ${ImageType.ImageType}`:'')} + + {/* + {sendEmail()}}/> + */} + {_renderTopEl()} + + + {AllImagesData.length>0 && + AllImagesData.map((item,index)=>{ + let ImagePath=item.ImagePath; + let ImageName=item.ImageName; + if(ImagePath!=null && ImagePath!=''){ + return ( + + {showImage(item,index)}}> + + {onRemoveImage(ImageName,index)}}> + + + + + ) + } + else{ + return null + } + + }) + } + + + + {submit()}}/> + + + + + {show_zoomImage && + + null} + /> + + } + + ); +} + +export default connect(mapStateToProps, mapDispatchToProps)(StoreImagesCap); \ No newline at end of file diff --git a/PerformicsSrc/src/screens/StoreInfoList.js b/PerformicsSrc/src/screens/StoreInfoList.js new file mode 100644 index 0000000..d50aaa9 --- /dev/null +++ b/PerformicsSrc/src/screens/StoreInfoList.js @@ -0,0 +1,176 @@ +import React,{useState,useEffect,useRef} from 'react'; +import Container from '../components/container'; +import { useFocusEffect, useRoute } from '@react-navigation/native'; +import { globalStyles,customStyles,GetPageTheme } from "../styles/Global"; +import {Image,TextInput,View,Text,ScrollView,TouchableOpacity,Platform, DeviceEventEmitter, PermissionsAndroid, Keyboard} from 'react-native'; +import { connect } from 'react-redux'; +import { mapStateToProps,mapDispatchToProps } from '../reducers/contextProvider'; +import {notify} from '../components/notify'; +import moment from 'moment'; +import {clear_item, get_item} from '../components/localStorage'; +import CustomHeader from '../components/customHeader'; +import { Ionicons, MaterialCommunityIcons} from '../components/icons'; +import {UploadData2, checkRange, getAllFileForAFolder, getDownloadJson1, restore_ImageWithMetaData, uploadContractFormFiles, validateNumber} from '../controller/functions'; +import CustomLoader from '../components/CustomLoader'; +import { AppTables } from '../constants/tableConstants'; +import { SvgXml } from 'react-native-svg'; +import * as RNFS from 'react-native-fs'; +import GradientButton from '../components/gradientButton'; +import MapIcon from '../assets/performics/map_icon.svg'; +import Geolocation from 'react-native-geolocation-service'; +import { db, CoverageImagePath, AppVersion , AddStoreImagePath, URL_IMAGE} from '../constants/constants'; +import CameraImg3 from '../assets/performics/camera_tick.svg'; +import cameraImg from '../assets/performics/camera_front_image.svg' +import CustomModal from '../components/CustomModal'; +import ModalSelector from 'react-native-modal-selector'; +import MapView, { AnimatedRegion, Marker, Polyline, PROVIDER_GOOGLE } from 'react-native-maps'; +import { _checkLocationPermission } from '../components/geolocation'; +import { CustomPicker } from '../components/CustomPicker'; +import { ConfirmSaveAlert } from '../components/alert'; +import { METHODS, getMethodName } from '../constants/methodNames'; +import { UploadImagesWithoutWait } from '../constants/uploadData'; + +function StoreInfoList(props) { + const route = useRoute(); + const ST=props.StaticText || {}; + // get all theme styles acc to current theme set + const PageTheme = GetPageTheme(props.DarkMode, route.name); + const customStyle = customStyles(props.DarkMode, route.name); + const globalStyle = globalStyles(props.DarkMode, route.name); + + const [processing, setProcessing] = useState(false); + const [loaderTitle, setLoaderTitle] = useState(); + const [isDataFound, setisDataFound] = useState(false); + + const [addstoreinfo, setAddStoreInfo] = useState([]); + + const d1=new Date(); + const d2=moment(d1).format('MM/DD/YYYY'); + + useEffect(()=>{ + getData(); + setLoaderTitle(ST.Loading+'...'); + },[]) + + + async function getData(){ + setProcessing(true) + try { + + let allReportData= await DownloadReport(); + console.log('allReportData',allReportData); + if(allReportData.length>0){ + setAddStoreInfo(allReportData); + setProcessing(false); + setisDataFound(true); + } + else{ + notify(ST.Nodatafound); + setProcessing(false); + } + + } catch (err) { + setProcessing(false); + console.log(err); + } + } + + async function DownloadReport(){ + let downloadKey="Master_StoreAdded"; + let loginInfo = await get_item('loginInfo'); + const loginDetails = JSON.parse(loginInfo); + const url=props.baseurl+getMethodName(METHODS.DOWNLOADJSON_METHOD); + let data={ + Downloadtype:downloadKey, + Username: loginDetails.UserId, + Param1: '', + Param2: Platform.OS=="ios"?"iOS":"Android", + }; + + console.log(url,data); + return await getDownloadJson1(url,data) + .then(async(res)=>{ + if (res[downloadKey]) { + let data_arr = res[downloadKey] || []; + return data_arr; + } + else{ + return []; + } + }) + .catch((err)=>{ + console.log('onPage Team error',err); + return []; + }); + } + + return ( + + {processing && } + + + { /* + + {ST.StoreProfile} + + */} + + + + + { isDataFound==false && + + {ST.NoDataAvailable} + + } + + {addstoreinfo.length> 0 &&{ST.Storeaddedinlastsevendays}} + + { + addstoreinfo.length> 0 && + addstoreinfo.map((item,index)=>{ + return ( + + + + + {ST.DistributorName+' :'} + {item.Distributor} + + + {ST.StoreName+' :'} + {item.StoreName} + + + {ST.StoreAddress+' :'} + {item.StoreAddress} + + + {ST.CityName+' :'} + {item.City} + + + {ST.StoreType+' :'} + {item.StoreType} + + + + + + + ); + }) + } + + + + + + + + ); +} + +export default connect(mapStateToProps, mapDispatchToProps)(StoreInfoList); + + diff --git a/PerformicsSrc/src/screens/StoreKycForm.js b/PerformicsSrc/src/screens/StoreKycForm.js new file mode 100644 index 0000000..d943326 --- /dev/null +++ b/PerformicsSrc/src/screens/StoreKycForm.js @@ -0,0 +1,956 @@ +import React, { useState, useEffect, useRef } from 'react'; +import Container from '../components/container'; +import { useFocusEffect, useRoute } from '@react-navigation/native'; +import { globalStyles, customStyles, GetPageTheme } from "../styles/Global"; +import { Image, TextInput, View, Text, ScrollView, TouchableOpacity, Platform, DeviceEventEmitter, PermissionsAndroid, Keyboard, SectionList } from 'react-native'; +import { connect } from 'react-redux'; +import { mapStateToProps, mapDispatchToProps } from '../reducers/contextProvider'; +import { notify } from '../components/notify'; +import moment from 'moment'; +import { clear_item, get_item } from '../components/localStorage'; +import CustomHeader from '../components/customHeader'; +import { Entypo, Ionicons, MaterialCommunityIcons } from '../components/icons'; +import { UploadData2, ValidateEmail, checkRange, getAllFileForAFolder, getServerDT, restore_ImageWithMetaData, uploadContractFormFiles, validateNumber, validateNumber12, validateStoreAddStoreInfoText } from '../controller/functions'; +import CustomLoader from '../components/CustomLoader'; +import * as RNFS from 'react-native-fs'; +import { db, CoverageImagePath, AppVersion, AddStoreImagePath, ImageFolderPath, URL_IMAGE } from '../constants/constants'; +import MultiSelect from 'react-native-multiple-select'; +import ModalSelector from 'react-native-modal-selector' +import CustomModal from '../components/CustomModal'; +import { _checkLocationPermission } from '../components/geolocation'; + +import LinearGradient from 'react-native-linear-gradient'; + +import CameraImg3 from '../assets/performics/camera_tick.svg'; +import CameraImg2 from '../assets/performics/camera_icon.svg'; +import CameraImg from '../assets/performics/camera_front_image.svg' +import GradientButton from '../components/gradientButton'; +import { ConfirmSaveAlert } from '../components/alert'; + + +function StoreKycForm(props) { + const route = useRoute(); + const ST = props.StaticText || {}; + // get all theme styles acc to current theme set + const PageTheme = GetPageTheme(props.DarkMode, route.name); + const customStyle = customStyles(props.DarkMode, route.name); + const globalStyle = globalStyles(props.DarkMode, route.name); + const [currentMenu, setCurrentMenu] = useState({}); + + const [processing, setProcessing] = useState(false); + const [loaderTitle, setLoaderTitle] = useState(); + const [rerenderdata, setrerenderdata] = useState([]); + // New + const [StoreImage, setStoreImage] = useState(''); + const [SelectedImg, setSelectedImg] = useState(''); + const [StoreImgPath, setStoreImgPath] = useState(''); + const [showCamera, setShowCamera] = useState(false); + const [addstoreconfigdata, setAddStoreConfigData] = useState([]) + const [storeData, setStoreData] = useState({}); + const [showModal, setShowModal] = useState(false); + const [showModalAlert, setShowModalAlert] = useState(false); + const selectimages = useRef({}) + const addstoreconfigCurr = useRef([]) + const [glb_gst, setglb_gst] = useState(''); + const [reCapImgModalObj, setReCapImgModalObj] = useState({}); + const [showImageSaveOp, setShowImageSaveOp] = useState(true); + + let params = props.route.params ? props.route.params : {}; + let storeData1 = params.storeData || {}; + let menu1 = params.menu || {}; + console.log('storeData1:', storeData1.StoreId, menu1); + + + const d1 = new Date(); + const d2 = moment(d1).format('MM/DD/YYYY'); + const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; + const btnSave = () => { + console.log("alerttt", validate()) + let rse = validate(); // Run validation + if (!rse) return; + console.log("Setting showModal to true"); // Debugging + setShowModalAlert(true); // Show the confirmation modal + }; + + function onSaveCancel() { + setShowModalAlert(false); + } + useEffect(() => { + getdata(); + const onImageCapturedSubs = DeviceEventEmitter.addListener('onImageCaptured', (imgData) => { getImage(imgData) }); + return function cleanup() { + onImageCapturedSubs.remove(); + }; + }, []) + + + const validate = () => { + let isValid = true; + let rs = addstoreconfigdata + .map(section => section.data) + .flat() + for (let i = 0; i < rs.length; i++) { + const item = rs[i]; + console.log("checksalef-->", item.answer) + if (item.answer === "" && item.IsMandatory === "true" && item.IsFieldShow == "true" && item.QuestionType != 'Image' && (item.FieldName != 'GSTNo' || item.FieldName != 'AadharNo')) { + isValid = false; + notify(`Please ${item.QuestionType == 'Text' || item.QuestionType == 'Number' || item.QuestionType == 'OTP' ? 'Fill ' : 'Select'} ${item.DisplayName}`) + break; // Exit loop early + } if (item.answer === "" && item.IsMandatory === "true" && item.IsFieldShow == "true" && item.QuestionType == 'Image' && (item.FieldName != 'GSTImage' || item.FieldName != 'AadharFrontImage' || item.FieldName != 'AadharBackImage')) { + isValid = false; + notify(`Please Capture ${item.DisplayName}`) + break; // Exit loop early + } + else if (item.answer != null && item.answer != '' && item.IsFieldShow == "true" && (item.QuestionType == 'Text' || item.QuestionType == 'Number' || item.QuestionType == 'OTP') && item.answer.length < 6) { + isValid = false; + notify(`Please fill minimum 6 ${item.QuestionType == 'Text' ? 'Character ' : 'Digit'} ${item.DisplayName}`) + break; + } else if (item.answer != null && item.answer != '' && item.IsFieldShow == "true" && (item.QuestionType == 'Text' || item.QuestionType == 'Number' || item.QuestionType == 'OTP') && (item.FieldName == 'Phone' || item.FieldName == 'Mobile') && item.answer.length < 10) { + isValid = false; + notify(`Please fill correct ${item.DisplayName}`) + break; + } + else if (item.answer != null && item.answer != '' && item.IsFieldShow == "true" && (item.QuestionType == 'Text' || item.QuestionType == 'Email') && item.FieldName == 'Email' && !emailRegex.test(item.answer)) { + isValid = false; + notify(`Please fill correct ${item.DisplayName}`) + break; + } + else if (item.answer === "" && item.IsMandatory === "true" && item.IsFieldShow == "true" && item.FieldName == 'TaxType' && (item.FieldName != 'GSTNo')) { + isValid = false; + notify(`Please Select ${item.DisplayName}`) + break; // Exit loop early + } + + else if (item.IsMandatory === "true" && item.IsFieldShow == "true" && (item.FieldName == 'GSTNo' || item.FieldName == 'GSTImage' || item.FieldName == 'AadharNo' || item.FieldName == 'AadharFrontImage' || item.FieldName == 'AadharBackImage') && !validatespecific()) { + isValid = false; + break; // Exit loop early + } + + else if (item.answer != null && item.answer != '' && item.IsFieldShow == "true" && (item.QuestionType == 'Text' || item.QuestionType == 'Number') && item.FieldName == 'Pan' && item.answer.length < 10) { + isValid = false; + notify(`Please fill correct ${item.DisplayName}`) + break; + } + else if (item.answer != null && item.answer != '' && item.IsFieldShow == "true" && (item.QuestionType == 'Text' || item.QuestionType == 'Number') && (item.FieldName == 'AccountNo' || item.FieldName == 'IFSC') && item.answer.length < 11) { + isValid = false; + notify(`Please fill correct ${item.DisplayName}`) + break; + } + } + + return isValid; + }; + + + const validatespecific = () => { + let isValid = true; + let rs = addstoreconfigdata + .map(section => section.data) + .flat() + for (let i = 0; i < rs.length; i++) { + const item = rs[i]; + //console.log("dattttt",item) + if (glb_gst == 'GST') { + if (item.answer === "" && item.IsMandatory === "true" && item.IsFieldShow == "true" && item.FieldName == 'GSTNo') { + notify(`Please fill ${item.DisplayName}`) + isValid = false; + break; + } else if (item.answer != null && item.answer != "" && item.IsFieldShow == "true" && item.FieldName == 'GSTNo' && item.answer.length < 15) { + notify(`Please fill correct ${item.DisplayName}`) + isValid = false; + break; + } else if (item.answer === "" && item.IsMandatory === "true" && item.IsFieldShow == "true" && item.FieldName == 'GSTImage') { + notify(`Please Capture ${item.DisplayName}`) + isValid = false; + break; + } + } else if (glb_gst == 'Non GST') { + if (item.answer === "" && item.IsMandatory === "true" && item.IsFieldShow == "true" && item.FieldName == 'AadharNo') { + notify(`Please fill ${item.DisplayName}`) + isValid = false; + break; + } else if (item.answer != null && item.answer != "" && item.IsFieldShow == "true" && item.FieldName == 'AadharNo' && item.answer.length < 12) { + notify(`Please fill correct ${item.DisplayName}`) + isValid = false; + break; + } else if (item.answer === "" && item.IsMandatory === "true" && item.IsFieldShow == "true" && (item.FieldName == 'AadharFrontImage' || item.FieldName == 'AadharBackImage')) { + notify(`Please Capture ${item.DisplayName}`) + isValid = false; + break; + } + } + + } + + return isValid; + }; + + async function getdata() { + try { + // console.log("Fetching data for storeId:", storeId); + let token = await get_item('loginToken'); + let loginInfo = await get_item('loginInfo'); + const loginDetails = JSON.parse(loginInfo); + let desg = loginDetails.Designation || ''; + let d1 = new Date(); + let d2 = moment(d1).format('MM/DD/YYYY'); + db.transaction((txn) => { + // Step 1: Check if data exists in STORE_KYC_INFO for the given storeId and visitDate + txn.executeSql( + `SELECT KYC_DATA FROM STORE_KYC_INFO WHERE STORE_ID = ? AND VISIT_DATE = ?`, + [storeData1.StoreId, d2], + (tx, result) => { + if (result.rows.length > 0) { + const row = result.rows.item(0); + const savedData = JSON.parse(row.KYC_DATA); + console.log("Saved data from STORE_KYC_INFO:", savedData); + + // Step 2: Fetch the structure (BlockName, FieldName, etc.) from Mapping_KYCConfiguration to rebuild sections + db.transaction((txn2) => { + txn2.executeSql( + `SELECT DISTINCT BlockName, DisplayName, DefaultValue, QuestionType, ListJson, + CASE WHEN IsMandatory = 1 THEN 'true' ELSE 'false' END AS IsMandatory, + CASE WHEN IsFieldShow = 1 THEN 'true' ELSE 'false' END AS IsFieldShow, + FieldName, + CASE + WHEN FieldName = 'Pincode' THEN 6 + WHEN FieldName = 'Phone' THEN 10 + WHEN FieldName = 'GSTNo' THEN 15 + WHEN FieldName = 'AadharNo' THEN 12 + WHEN FieldName = 'Pan' THEN 10 + WHEN FieldName = 'IFSC' THEN 11 + WHEN FieldName = 'AccountNo' THEN 20 + ELSE 50 + END AS MaxLength + FROM Mapping_KYCConfiguration`, + [], + (tx2, configRes) => { + let groupedData = []; + if (configRes.rows.length > 0) { + let configData = []; + for (let i = 0; i < configRes.rows.length; i++) { + let row = configRes.rows.item(i); + console.log("kyc_rows", row) + // Merge the saved answer with the configuration + configData.push({ + ...row, + answer: savedData[row.FieldName] || '', + answerid: savedData[row.FieldName] ? '0' : '', + }); + } + + // Group the data into sections + groupedData = configData.reduce((acc, item) => { + let section = acc.find((sec) => sec?.title === item?.BlockName); + if (section) { + section.data.push(item); + } else { + acc.push({ title: item?.BlockName, isShow: item?.IsFieldShow, data: [item] }); + } + return acc; + }, []); + + // console.log("Grouped data from KYC_INFO:", groupedData); + // setAddStoreConfigData(groupedData); + + const taxTypeItem = configData.find((item) => item.FieldName === 'TaxType'); + if (taxTypeItem && taxTypeItem.answer === 'GST') { + setglb_gst('GST'); + groupedData = groupedData.map((section) => { + const updatedSection = { ...section, data: [...section.data] }; + updatedSection.data = updatedSection.data.map((item) => { + if (["AadharNo", "AadharFrontImage", "AadharBackImage"].includes(item.FieldName)) { + return { ...item, IsFieldShow: "false", answer: "", answerid: 0 }; + } + if (["GSTNo", "GSTImage"].includes(item.FieldName)) { + return { ...item, IsFieldShow: "true" }; + } + return item; + }); + return updatedSection; + }); + } + + else if (taxTypeItem && taxTypeItem.answer === 'Non GST') { + setglb_gst('Non GST'); + groupedData = groupedData.map((section) => { + const updatedSection = { ...section, data: [...section.data] }; + updatedSection.data = updatedSection.data.map((item) => { + if (["GSTNo", "GSTImage"].includes(item.FieldName)) { + return { ...item, IsFieldShow: "false", answer: "", answerid: 0 }; + } + if (["AadharNo", "AadharFrontImage", "AadharBackImage"].includes(item.FieldName)) { + return { ...item, IsFieldShow: "true" }; + } + return item; + }); + return updatedSection; + }); + } + console.log("data------", JSON.stringify(groupedData)) + setAddStoreConfigData(groupedData); + + } else { + console.warn("No data in Mapping_KYCConfiguration to map STORE_KYC_INFO data"); + } + }, + (tx2, err) => { + console.error("Error loading Mapping_KYCConfiguration:", err); + } + ); + }); + } else { + // Step 3: Fallback to default KYC config (Mapping_KYCConfiguration) + console.log("⏬ No KYC saved data found, loading from Mapping_KYCConfiguration..."); + + txn.executeSql( + `SELECT DISTINCT BlockName, DisplayName, DefaultValue, QuestionType, ListJson, + CASE WHEN IsMandatory = 1 THEN 'true' ELSE 'false' END AS IsMandatory, + CASE WHEN IsFieldShow = 1 THEN 'true' ELSE 'false' END AS IsFieldShow, + FieldName, + CASE + WHEN FieldName = 'Pincode' THEN 6 + WHEN FieldName = 'Phone' THEN 10 + WHEN FieldName = 'GSTNo' THEN 15 + WHEN FieldName = 'AadharNo' THEN 12 + WHEN FieldName = 'Pan' THEN 10 + WHEN FieldName = 'IFSC' THEN 11 + WHEN FieldName = 'AccountNo' THEN 20 + ELSE 50 + END AS MaxLength + FROM Mapping_KYCConfiguration`, + [], + (txn2, txnres) => { + if (txnres.rows.length > 0) { + let arr = []; + for (let i = 0; i < txnres.rows.length; i++) { + let data = txnres.rows.item(i); + arr.push({ ...data, answer: '', answerid: '' }); + } + + const groupedData = arr.reduce((acc, item) => { + let section = acc.find((sec) => sec?.title === item?.BlockName); + if (section) { + section.data.push(item); + } else { + acc.push({ title: item?.BlockName, isShow: item?.IsFieldShow, data: [item] }); + } + return acc; + }, []); + + console.log("Grouped data from Mapping_KYCConfiguration:", groupedData); + setAddStoreConfigData([...groupedData]); + } else { + console.warn("No data in Mapping_KYCConfiguration"); + } + }, + (txnErr, err) => { + console.error("Error loading Mapping_KYCConfiguration:", err); + } + ); + } + }, + (tx, error) => { + console.error("Error querying STORE_KYC_INFO:", error); + } + ); + }); + } catch (err) { + console.error("Error in getdata:", err); + } + } + + + async function savedData() { + setShowModalAlert(false); + console.log("KYCConfigurationdata", addstoreconfigdata); + + let d1 = new Date(); + let d2 = moment(d1).format('MM/DD/YYYY'); + let fpath = Platform.OS === 'ios' ? StoreImgPath.replace('file://', '') : StoreImgPath; + console.log(fpath, 'path of image'); + + setProcessing(true); + setLoaderTitle('Saving Data Locally...'); + + let rs = addstoreconfigdata + .map(section => section.data) + .flat() + .reduce((acc, curr) => { + const value = + (curr.answerid === "" || curr.answerid === "0" || curr.QuestionType === "Image") && curr.IsFieldShow === "true" + ? (curr.answer === "0" ? "" : curr.answer) + : (curr.IsFieldShow === "false" && curr?.DefaultValue !== "") + ? curr?.DefaultValue + : (curr.answerid === 0 || curr.answerid === '0') + ? "" + : curr.answerid; + + return { + ...acc, + [curr.FieldName]: value, + "verificationReq": "0", + UserId: props.UserId, + }; + }, {}); + + // Add storeId to the data + rs.StoreId = storeData1.StoreId; // Since you're hardcoding storeId as 0 in the insert query, we reflect that here + + const storeInfoStr = JSON.stringify(rs); + + db.transaction((txn) => { + // Step 1: Delete existing data for the given STORE_ID and VISIT_DATE + txn.executeSql( + `DELETE FROM STORE_KYC_INFO WHERE STORE_ID = ? AND VISIT_DATE = ?`, + [storeData1.StoreId, d2], // Using the same storeId and visitDate as in the insert query + (tx, deleteRes) => { + console.log(`✅ Deleted ${deleteRes.rowsAffected} rows from STORE_KYC_INFO for STORE_ID: 0, VISIT_DATE: ${d2}`); + + // Step 2: Insert the new data + const insertQuery = `INSERT INTO STORE_KYC_INFO (STORE_ID, VISIT_DATE, KYC_DATA) VALUES (?, ?, ?)`; + txn.executeSql( + insertQuery, + [storeData1.StoreId, d2, storeInfoStr], + (tx, insertRes) => { + console.log('✅ Data inserted into STORE_KYC_INFO:', insertRes); + notify("Data saved locally."); + setProcessing(false); + props.navigation.navigate('StoreList'); + }, + (tx, insertError) => { + console.log('❌ Error inserting into STORE_KYC_INFO:', insertError); + notify("Error saving data locally."); + setProcessing(false); + } + ); + }, + (tx, deleteError) => { + console.error('❌ Error deleting from STORE_KYC_INFO:', deleteError); + notify("Error deleting old data."); + setProcessing(false); + } + ); + }); + } + + function render_Picker(label_key, value_key, onChange = () => { }, selected_data = {}) { + let data = []; + let qtn = selected_data.qtn || {}; + let index = selected_data.index; + let sectionIndex = selected_data.sectionIndex + + // Ensure ListJson is parsed correctly + let allAnswers = []; + if (typeof qtn.ListJson === "string") { + try { + allAnswers = JSON.parse(qtn.ListJson); + } catch (error) { + console.error("Error parsing ListJson:", error); + } + } else if (Array.isArray(qtn.ListJson)) { + allAnswers = qtn.ListJson; + } + + let isQtnDisabled = qtn.isDisabled ? true : false; + + // Dynamically populate dropdown options + data = allAnswers.map((item, index) => { + return { + key: index, + label: item[label_key], + value: item[value_key], + component: selected_data.value == item[value_key] ? ( + + + {item[label_key]} + + ) : null + }; + }); + + // console.log("data",data) + + return ( + onChange(option, qtn, index, sectionIndex)} + overlayStyle={customStyle.addVisPickerOverlay} + cancelContainerStyle={customStyle.addVisPicker_OptionContainerStyle} + optionStyle={customStyle.addvis_opStyle} + optionTextStyle={customStyle.addvis_opTextStyle} + selectedKey={selected_data.value} + disabled={isQtnDisabled} + > + + {selected_data.value ? selected_data.value : '-' + ST.select + '-'} + + + ); + } + + + + function onselectionChange(option, qtn, index, sectionIndex) { + console.log(option, qtn, sectionIndex, index, "confirmmmmmm----------11111111111"); + let updatedData = addstoreconfigdata.map((section, secIndex) => { + if (secIndex === sectionIndex) { + // Clone the section and its data to ensure immutability + const updatedSection = { ...section, data: [...section.data] }; + + // Update the specific item in the section's data + const updatedItem = { ...updatedSection.data[index] }; + updatedItem.answerid = option.value || "0"; + updatedItem.answer = option.label; + // Replace the item in the section's data + updatedSection.data[index] = updatedItem; + const updatedItem2 = [...updatedSection.data]; + + if (updatedItem?.FieldName === 'TaxType' && updatedItem?.answer === "GST") { + setglb_gst("GST"); + for (let i = 0; i < updatedItem2.length; i++) { + if (["AadharNo", "AadharFrontImage", "AadharBackImage"].includes(updatedItem2[i].FieldName)) { + updatedItem2[i].IsFieldShow = "false"; + updatedItem2[i].answer = ""; + updatedItem2[i].answerid = 0; + } + + if (["GSTNo", "GSTImage"].includes(updatedItem2[i].FieldName)) { + updatedItem2[i].IsFieldShow = "true"; + } + } + } else if (updatedItem?.FieldName === 'TaxType' && updatedItem?.answer === "Non GST") { + setglb_gst("Non GST") + for (let i = 0; i < updatedItem2.length; i++) { + if (["GSTNo", "GSTImage"].includes(updatedItem2[i].FieldName)) { + updatedItem2[i].IsFieldShow = "false"; + updatedItem2[i].answer = ""; + updatedItem2[i].answerid = 0; + } + + if (["AadharNo", "AadharFrontImage", "AadharBackImage"].includes(updatedItem2[i].FieldName)) { + updatedItem2[i].IsFieldShow = "true"; + } + } + } + + updatedSection.data = updatedItem2 + return updatedSection; + } + return section; // Return unchanged sections + }); + + console.log("finalData==========", JSON.stringify(updatedData)); + setAddStoreConfigData([...updatedData]) // Update state in a single call + } + + + + + function setTextValue(value, qtn, sectionIndex, index, type = "") { + + console.log(value, qtn, sectionIndex, index, type = "") + if (value != '') { + let isValid = validateNumber(value, type); + console.log("type:", type, isValid); + if (!isValid) { + return; + } + } + + let updatedData = addstoreconfigdata.map((section, secIndex) => { + if (secIndex === sectionIndex) { + + const updatedSection = { ...section, data: [...section.data] }; + + const updatedItem = { ...updatedSection.data[index] }; + updatedItem.answerid = "0"; + updatedItem.answer = value; + + updatedSection.data[index] = updatedItem; + + return updatedSection; + } + return section; + }); + + setAddStoreConfigData(updatedData); + + } + + async function openCamera(dataindex) { + console.log("dataindex", dataindex) + // setSelectImages(dataindex) + selectimages.current = dataindex + addstoreconfigCurr.current = addstoreconfigdata + // setShowCamera(true); + props.navigation.navigate('CameraScreen', { 'getImage': getImage, 'cameraType': ('back'), 'CheckInCameraGallery': props.CheckInCameraGallery, storeData: storeData, enableCameraFlip: (props.CheckInSwitchingCamera ? true : false) }) + } + + async function getImage(imgdata) { + if (typeof imgdata == 'object' && imgdata.errorCode == 'camera_unavailable') { + notify(ST.Cameraunavailable); + } + + else if (typeof imgdata == 'object' && imgdata.uri != null) { + const img = imgdata; + const storeDataDetail = imgdata.storeData || {} + const imgurl = img.uri, imgWidth = img.width, imgHeight = img.ExtendedHeight; + let isImgFromGallery = img.fromGallery != null ? img.fromGallery : false; + let picture_clickedd = isImgFromGallery == true ? img.datetime : new Date(); + ////change by jeevanp + let picture_clicked_time = moment(picture_clickedd).format('MM-DD-YYYY HH:mm:ss') + let picture_clicked_time_for_pic_name = moment(picture_clickedd).format('MMDDYYYY_HHmmss') + + console.log("time", picture_clicked_time); + console.log("time1", picture_clicked_time_for_pic_name); + let calculate_tym_date_for_filename = picture_clicked_time_for_pic_name; + let calculate_tym_date_over_img = picture_clicked_time; + + let filename = storeData1.StoreId + "_" + (props.UserId || '') + '_KycImage-' + calculate_tym_date_for_filename + '.jpg'; + console.log(filename, "file_name"); + + const mark_text1 = calculate_tym_date_over_img; + const mark_text2 = 'User Id:' + props.UserId + ' | Image Type: kyc Store Info' + ' | Date:' + calculate_tym_date_over_img; + console.log(mark_text1 + "\n" + mark_text2, "mark_text2"); + + setStoreImage(filename); + console.log("selectimages========", selectimages.current) + + let sectionIndex = selectimages.current?.sectionIndex; + let index = selectimages.current?.index; + + let imagePath = `${ImageFolderPath + menu1.ScreenName}/${filename}`; + + console.log("checkin imgurl:", imagePath); + RNFS.copyFile(imgurl, imagePath) + .then(async (resn) => { + // render data with clicked image + let uri = 'file://' + imagePath; + setStoreImgPath(uri); + setSelectedImg(uri) + + let updatedData = addstoreconfigCurr.current.map((section, secIndex) => { + console.log("secIndex", secIndex, "sectionIndex", sectionIndex) + if (secIndex == sectionIndex) { + // Clone the section and its data to ensure immutability + const updatedSection = { ...section, data: [...section.data] }; + + // Update the specific item in the section's data + const updatedItem = { ...updatedSection.data[index] }; + const getMimeType = (uri) => { + const extension = uri.split('.').pop().toLowerCase(); + + const mimeTypes = { + jpg: 'image/jpeg', + jpeg: 'image/jpeg', + png: 'image/png', + gif: 'image/gif', + webp: 'image/webp', + }; + + return mimeTypes[extension] || 'application/octet-stream'; // Fallback + }; + + const mimeType = getMimeType(img.uri); + console.log(mimeType); + console.log(mimeType, "img===========", img) + updatedItem.answerid = mimeType; + updatedItem.answer = filename; + // Replace the item in the section's data + updatedSection.data[index] = updatedItem; + + return updatedSection; + } + return section; // Return unchanged sections + }); + + setAddStoreConfigData(updatedData) + console.log("updatedData========", JSON.stringify(updatedData)) + selectimages.current = {} + // add metdata then resize image and restored back to the imagePath + let restore_data = { "destFilePath": imagePath, "imgurl": imgurl, imgWidth, imgHeight, mark_text1, mark_text2 } + let is_restored = await restore_ImageWithMetaData(restore_data, imgdata); + console.log("image restored:", is_restored); + }).catch(err => { + console.log('ERROR: image file write failed!!!', err); + console.log(err.message, err.code); + }); + + + } + } + + + function _OpenCaptureImage_Modal(img) { + console.log("checkmodal--", img) + const isImageCap = (img != '' || img != null) ? true : false; + let camera2Label = 'test'; + return ( + + { + + + + + + { openCamera() }}> + + + + {!showImageSaveOp && + { cancelImage() }}> + {ST.Close} + + } + + + + } + + ) + } + + async function OpenImgModal(imgPath, window, splitItem, splitItemIndex, cameraType) { + console.log("imagepath-->", imgPath) + let imagePath = `${ImageFolderPath}${imgPath}`; + let uri = 'file://' + imagePath; + setSelectedImg(uri) + setShowModal(true); + if ((imgPath != '' && imgPath != null)) { + setShowImageSaveOp(false); + } + else { + setShowImageSaveOp(true); + } + setReCapImgModalObj({ window, splitItem, splitItemIndex, cameraType }) + console.log("imgeree--", reCapImgModalObj, "--", window) + // _OpenCaptureImage_Modal(imgPath,window,splitItem,splitItemIndex,cameraType) + + } + + function cancelImage() { + // setImage1(''); + setSelectedImg(''); + setShowModal(false); + } + + function _render_captureImage() { + const isImageAvlbl = StoreImage != '' && StoreImage != null && StoreImgPath != '' && StoreImgPath != null; + + return ( + + + { isImageAvlbl ? OpenImgModal(StoreImgPath) : openCamera() }}> + {!isImageAvlbl && } + {isImageAvlbl && } + + {/* {isImageAvlbl && } */} + {ST.ClickSelfieinfrontofStore} + + + + ); + } + + // console.log("addstoreconfigdata", JSON.stringify(addstoreconfigdata)) + + return ( + + {processing && } + + {ConfirmSaveAlert(props, showModalAlert, onSaveCancel, savedData, "Do you really want to save Kyc data ?")} + {_OpenCaptureImage_Modal()} + {_render_captureImage()} + + + + `${item.FieldName}_${index}`} // Ensure unique keys for items + + renderSectionHeader={({ section }) => { + // Find the index of the current section + console.log("section_header...", section) + if ((section?.isShow == "true" || section?.isShow == true)) { + return ( + + + + + + {section?.title ? section?.title : ''} + + + + + + ); + } + + }} + + renderItem={({ item, index, section }) => { + + const sectionIndex = addstoreconfigdata.findIndex(sec => sec.title === section.title); + + // console.log(section,"sectionIndex=======",sectionIndex) + let qtn = item; + + let qtnIndex = index; + let selansid = "", selanswer = "", showImageTag1 = false, showImageTag2 = false; + let id_key = `${qtn.FieldName}_AnswerId`; + let ans_key = `${qtn.FieldName}_Answer`; + let multi_key = `${qtn.FieldName}_MultiOption`; + + let list_mcdata = []; + + // let isNAImageAvl=item.CategoryNotExistCamera=='true' || data.CategoryNotExistCamera==1?1:0; + // let NAImage1=isNAImageAvl==1 && data.CatNAImage!=null?data.CatNAImage:''; + // let NAImage1Path=NAImage1!=''?`file://${ImageFolderPath+menu1.ScreenName}/`+'':''; + + let NAImage1Path = '' + + if (qtn.IsFieldShow == "false") { + return null + } + + return ( + + {qtn.DisplayName} + + {qtn.QuestionType === "Single choice list" && + render_Picker("Name", "Id", onselectionChange, { value: qtn.answer, qtn, sectionIndex, index }) + } + + {qtn.QuestionType === "Multi choice list" && + setMultiSelectValue(selectedItems, qtn, window)} + selectedItems={selansid} + selectText="Pick Items" + searchInputPlaceholderText={`${ST.SearchItems}...`} + tagRemoveIconColor={PageTheme.$primary_color} + tagBorderColor={PageTheme.$primary_color} + tagTextColor={PageTheme.$primary_color} + selectedItemTextColor={PageTheme.$primary_color} + selectedItemIconColor={PageTheme.$primary_color} + itemTextColor={PageTheme.$text_color} + displayKey="Answer" + searchInputStyle={EStyle_Qtn_MultiChoice} + submitButtonColor={PageTheme.$primary_color} + submitButtonText={ST.Submit} + /> + } + + {["Number", "Decimal", "Text", "TextSpc", "Number", "Email","OTP"].includes(qtn.QuestionType) && + { + let sanitizedValue = val; + + if (qtn.QuestionType === "Number" || qtn.QuestionType === "OTP") { + // Allow only whole numbers (no decimals, no special chars) + sanitizedValue = val.replace(/[^0-9]/g, ""); + } else if (qtn.QuestionType === "Decimal") { + // Allow only valid decimal numbers + sanitizedValue = val.replace(/[^0-9.]/g, ""); // Remove non-numeric & non-dot + if ((sanitizedValue.match(/\./g) || []).length > 1) { + sanitizedValue = sanitizedValue.replace(/\.+$/, ""); // Remove extra dots + } + } else if (qtn.QuestionType === "Text") { + sanitizedValue = val.replace(/[^a-zA-Z0-9 ]/g, ""); + } + + setTextValue(sanitizedValue, qtn, sectionIndex, index); + }} + /> + } + {qtn.QuestionType === "Image" && + + {/* + {(qtn.answer == '' || qtn.answer == null) ? + { openCamera({sectionIndex,index}, {}, 0, '1', '3') }}> + + : (qtn.answer != '' && qtn.answer != null) ? + { + OpenImgModal(qtn.answer,index) + console.log("checkopt--",qtn.answer) + }}> + + : null + } */} + + { openCamera({ sectionIndex, index }, {}, 0, '1', '3') }}> + {qtn.answer ? : + } + + + + {qtn.answer && ( + + + )} + + + } + + ); + }} + /> + + + { btnSave() }} /> + + + + + + + ); +} + +export default connect(mapStateToProps, mapDispatchToProps)(StoreKycForm); + + diff --git a/PerformicsSrc/src/screens/StoreList.js b/PerformicsSrc/src/screens/StoreList.js new file mode 100644 index 0000000..4ff3c02 --- /dev/null +++ b/PerformicsSrc/src/screens/StoreList.js @@ -0,0 +1,2513 @@ +import React, { useState, useEffect, memo, useRef } from 'react'; +import Container from '../components/container'; +import { useRoute } from '@react-navigation/native'; +import { globalStyles, customStyles, GetPageTheme } from "../styles/Global"; +import { StatusBar, Image, TextInput, View, Text, ScrollView, TouchableOpacity, TouchableHighlight, Platform, PermissionsAndroid, FlatList, DeviceEventEmitter, Alert, StyleSheet } from 'react-native'; +import { ReactReduxContext, connect, useSelector, useDispatch } from 'react-redux'; +import { mapStateToProps, mapDispatchToProps } from '../reducers/contextProvider'; +import { notify } from '../components/notify'; +import moment from 'moment'; +import { getDownloadJson, getDownloadJson1, checkRange, UploadData2, UpdateStoreStatus, getKPIS, marktext1, marktext2, UploadFormData, resizeImage, restore_ImageWithMetaData, getKPIFieldsForKyc, getValidStores, fetchDistanceMatrix, mergeStoreDistances } from '../controller/functions'; +import { get_item } from '../components/localStorage'; +import { db, AppVersion, CoverageImagePath } from '../constants/constants'; +import CustomHeader from '../components/customHeader'; +import { AntDesign, Entypo, Feather, FontAwesome, Fontisto, Ionicons, MaterialCommunityIcons } from '../components/icons'; +import CustomLoader from '../components/CustomLoader'; +import LinearGradient from 'react-native-linear-gradient'; +import NoDataComponent from '../components/NoDataComponent'; +import MapIcon from '../assets/performics/map_icon.svg'; +import CustomModal from '../components/CustomModal'; +import { AppTables } from '../constants/tableConstants'; +import { _checkLocationPermission } from '../components/geolocation'; +import Geolocation from 'react-native-geolocation-service'; +import { getAvailblQuery, getIfAvlbl, getIfKPIDone, getQuery, Q_getMyStoresList, Q_MenuList } from '../constants/ConstantQueries'; +import { ConfirmSaveAlert } from '../components/alert'; +import { getFolderName, getMethodName, METHODS } from '../constants/methodNames'; +import { SyncIRsessions, UpdateIRUploadStatus_G, getIRTables, uploadAllData, uploadAllImages, uploadStoreStatus } from '../constants/uploadData'; +import * as RNFS from 'react-native-fs'; + +import CameraImg2 from '../assets/performics/camera_icon.svg'; +import CustomCamera from '../components/Camera'; +import HeaderTabs from '../components/HeaderTabs'; +import StoreGeoIcon from '../assets/image/storegeoicon.svg' +import DownloadDataModal from '../components/downloadDataModal'; +import IRLogin from '../components/IRLogin'; +import RouteIcon from '../assets/image/routeicon.svg'; +import { AppName, PerformicsIRAppName } from '../../../AppSpecificContant'; +import AsyncStorage from "@react-native-async-storage/async-storage"; + +const StoreItem = memo((props) => { + const route = useRoute(); + const PageTheme = GetPageTheme(props.DarkMode, route.name); + const customStyle = customStyles(props.DarkMode, route.name); + const [KPIFields, setKPIFields] = useState([]); + const [designation, setDesignation] = useState(''); + const item = props.item; + //console.log("itemmm:",item); + const ST = props.StaticText || {}; + let flags = true + async function getStatus(data) { + return await props.executeSelQuery(`select * from ${AppTables.COVERAGE_DATA} Where VISIT_DATE='${data.VisitDate}' and STORE_ID = ${data.StoreId}`); + } + + async function get_to_store_details(data, flag) { + let AllKPIFields = await getKPIFieldsForKyc(); + setKPIFields(AllKPIFields); + console.log("AllKPIFields", AllKPIFields) + let token = await get_item('loginToken'); + let loginInfo = await get_item('loginInfo'); + const loginDetails = JSON.parse(loginInfo); + let desg = loginDetails.Designation || ''; + setDesignation(desg); + let ShowCompactStoreProfileRestrict = AllKPIFields?.findIndex((i) => i.KPIFieldName == "CompactStoreProfileRestrict"); + let ShowCompactStoreProfileRestrictObj = ShowCompactStoreProfileRestrict >= 0 ? AllKPIFields[ShowCompactStoreProfileRestrict] : {}; + let ShowCompactStoreSplitArr = ShowCompactStoreProfileRestrictObj?.KPIFieldDisplayName?.split(",") || [] + const isCompactStoreData = ShowCompactStoreSplitArr; + console.log('iscompetitorValues', isCompactStoreData, designation) + let checkPJPData = await props.executeSelQuery(`select * from ${AppTables.COVERAGE_DATA} Where VISIT_DATE='${data.VisitDate}' and STORE_ID = ${data.StoreId}`); + console.log("checkPJPData", checkPJPData.IsAvlbl) + if (data.UploadStatus == 'U') { + notify(ST.AllDataalreadyuploadedforthisstore); + } + else if (data.UploadStatus == 'L') { + notify(ST.Alreadymarkedasnotworkingstatusforthisstore); + } + else if (data.UploadStatus == 'I' && checkPJPData.IsAvlbl == true) { + let MenuListLen = data.MenuListLen; + let MenuListLenWithNonAvlbl = data.MenuCountWithNonAvlbl; + console.log('menuList length MenuListLenWithNonAvlbl:', MenuListLen, MenuListLenWithNonAvlbl); + let s_screen = "StoreDailyMenu"; + if (props.ShowStoreProfile == true && data.Deviation != 6) { + s_screen = "StoreProfile"; + } else if (props.ShowCompactStoreProfile == true) { + if (!isCompactStoreData.includes(desg)) { + s_screen = "StoreProfileKyc"; + } + else { + s_screen = "StoreDailyMenu"; + } + } + else if (props.ShowStoreChecklist == true || props.StoreChecklistOnce == true) { + s_screen = "StoreChecklist"; + } else if (props.ShowReportAfterCheckIn == true) { + s_screen = "StoreReport"; + } + + console.log('s_screen:', s_screen); + if (MenuListLenWithNonAvlbl > 0) { + props.set_autoback({ 'AutoGoToPrev': false }); + props.navigation.navigate(s_screen, { storeData: data, 'isAdhoc': props.isAdhocScreen, 'isBeat': props.isBeatPlan, 'isNonMerchans': props.isNonMerchan, 'isNonProgs': props.isNonProg, 'isStoreSearch': props.isStoreSearch, '_fromStoreWise': true }); + } + else { + notify("No menu map for this store!"); + } + } + else if (data.UploadStatus == 'C') { + notify(ST.Alreadycheckedout); + + } + else if (data.UploadStatus == 'D') { + notify(ST.Dataalreadyuploaded); + } + else if (data.UploadStatus == 'P') { + notify(ST.Datapartiallyuploaded); + } + else if (data.UploadStatus == 'N' || (data.UploadStatus == 'I' && checkPJPData.IsAvlbl == false) || data.UploadStatus == '') { + let isAdhocActive = await checkisAdhocActive(); + console.log("checkadhocactiv--", isAdhocActive) + let isChcekedIn = await checkIfAlreadyCheckdIn(); + let isChcekedInjcp = await checkIfAlreadyCheckdInjcp(); + console.log('ischekin==', isChcekedInjcp) + let pjpuploadstatus = true; + + if (isChcekedInjcp.IsAvlbl == true) { + pjpuploadstatus = getcurrentstatus(data.StoreId, isChcekedInjcp.data) + } + console.log('isChcekedIn', pjpuploadstatus); + if (pjpuploadstatus == false || isChcekedIn.IsAvlbl == true) { + notify(ST.Youarealreadycheckedintotheotherstore, 'LONG'); + } else if (isAdhocActive) { + notify('Please fill the No working reason', 'LONG'); + } + else { + props.setShowStoreVisitModal(true); + props.setCurrentStore(data); + } + } + } + + async function AskForCancelCheckin(data) { + props.setCancelCheckOutStore(data); + props.setShowCancelCIModal(true); + } + + async function checkisAdhocActive() { + let d1 = new Date(); + let d2 = moment(d1).format('MM/DD/YYYY'); + let AdhocActivated = props.AdhocActivated || "" + let AdhocActivatedFlag = AdhocActivated.split(",") + let checkPjpSize = `SELECT COUNT(*) as count FROM Mapping_JourneyPlan WHERE VisitDate='${d2}'`; + let result = await props.executeSelQuery(checkPjpSize, '4'); + + let join = `INNER JOIN ${AppTables.COVERAGE_DATA} t2 on t2.STORE_ID=t1.StoreId and t2.JCP_TYPE='Mapping_JourneyPlan' `; + let q = `Select t1.* from Mapping_JourneyPlan t1 ${join} where t1.VisitDate='${d2}' and t1.UploadStatus='U' ${(props.isAdhocScreen && AdhocActivatedFlag > 0) ? `and t2.REASON_ID IN (${props.AdhocActivated})` : ""}` + let AdhocActive = false; + let checkPJPData = await props.executeSelQuery(q, '1'); + if ((props.isAdhocScreen && AdhocActivatedFlag > 0) && !checkPJPData.IsAvlbl && result?.data?.count > 0) { + AdhocActive = true; + } + + return AdhocActive; + + } + + + async function checkIfAlreadyCheckdIn() { + let d1 = new Date(); + let d2 = moment(d1).format('MM/DD/YYYY'); + let AdhocActivated = props.AdhocActivated || "" + let AdhocActivatedFlag = AdhocActivated.split(",") + let join = `INNER JOIN ${AppTables.COVERAGE_DATA} t2 on t2.STORE_ID=t1.StoreId and t2.JCP_TYPE='Mapping_JourneyPlan' `; + let q = `Select t1.* from Mapping_JourneyPlan t1 ${join} where t1.VisitDate='${d2}' and t1.UploadStatus='I' ` + let join2 = `INNER JOIN ${AppTables.COVERAGE_DATA} t2 on t2.STORE_ID=t1.StoreId and t2.JCP_TYPE='Adhoc_JourneyPlan' `; + let q2 = `Select t1.* from Adhoc_JourneyPlan t1 ${join2} where t1.VisitDate='${d2}' and t1.UploadStatus='I' ` + let join3 = `INNER JOIN ${AppTables.COVERAGE_DATA} t2 on t2.STORE_ID=t1.StoreId and t2.JCP_TYPE='JourneyPlan_RouteWise' `; + let q3 = `Select t1.* from JourneyPlan_RouteWise t1 ${join3} where t1.VisitDate='${d2}' and t1.UploadStatus='I'` + let join4 = `INNER JOIN ${AppTables.COVERAGE_DATA} t2 on t2.STORE_ID=t1.StoreId and t2.JCP_TYPE='NonMerchandising_JourneyPlan' `; + let q4 = `Select t1.* from NonMerchandising_JourneyPlan t1 ${join4} where t1.VisitDate='${d2}' and t1.UploadStatus='I'` + let join5 = `INNER JOIN ${AppTables.COVERAGE_DATA} t2 on t2.STORE_ID=t1.StoreId and t2.JCP_TYPE='NonProgram_JourneyPlan' `; + let q5 = `Select t1.* from NonProgram_JourneyPlan t1 ${join5} where t1.VisitDate='${d2}' and t1.UploadStatus='I'` + let join6 = `INNER JOIN ${AppTables.COVERAGE_DATA} t2 on t2.STORE_ID=t1.StoreId and t2.JCP_TYPE='StoreSearch_JourneyPlan' `; + let q6 = `Select t1.* from StoreSearch_JourneyPlan t1 ${join6} where t1.VisitDate='${d2}' and t1.UploadStatus='I'` + + let checkPJPData = await props.executeSelQuery(q, '1'); + console.log('checkPJPData:', checkPJPData); + if (!checkPJPData.IsAvlbl) { + let checkAdhocData = await props.executeSelQuery(q2, '1'); + console.log('checkAdhocData:', checkAdhocData); + if (!checkAdhocData.IsAvlbl) { + let checkRouteData = await props.executeSelQuery(q3, '1', props.ShowBeatPlanList == true); + console.log('checkRouteData:', checkRouteData); + if (!checkRouteData.IsAvlbl) { + let checkNonMerData = await props.executeSelQuery(q4, '1', props.ShowNonMerList == true); + console.log('checkNonMerData:', checkNonMerData); + if (!checkNonMerData.IsAvlbl) { + let checkNonProgData = await props.executeSelQuery(q5, '1', props.ShowNonProgram == true); + if (!checkNonProgData.IsAvlbl) { + let checkStoreSearchData = await props.executeSelQuery(q6, '1', props.ShowStoreSearch == true); + console.log('checkStoreSearchData:', checkStoreSearchData); + return checkStoreSearchData; + } else { + return checkNonProgData; + } + } else { + return checkNonMerData; + } + } + else { + return checkRouteData; + } + } + else { + return checkAdhocData; + } + } + else { + return checkPJPData; + } + } + + function getcurrentstatus(storeid, item) { + let status = true; + // Check if the 'UploadStatus' is 'I' and if the 'StoreId' does not match + if (item.UploadStatus === 'I') { + if (storeid !== item.StoreId) { + status = false; + } + } + + return status; + } + + async function checkIfAlreadyCheckdInjcp() { + let d1 = new Date(); + let d2 = moment(d1).format('MM/DD/YYYY'); + let AdhocActivated = props.AdhocActivated || ''; + let AdhocActivatedFlag = AdhocActivated.split(','); + // Define the table names and queries + let tables = [ + { name: 'Mapping_JourneyPlan', query: `SELECT t1.* FROM Mapping_JourneyPlan t1 WHERE t1.VisitDate='${d2}' AND t1.UploadStatus='I'` }, + { name: 'Adhoc_JourneyPlan', query: `SELECT t1.* FROM Adhoc_JourneyPlan t1 WHERE t1.VisitDate='${d2}' AND t1.UploadStatus='I'` }, + { name: 'JourneyPlan_RouteWise', query: `SELECT t1.* FROM JourneyPlan_RouteWise t1 WHERE t1.VisitDate='${d2}' AND t1.UploadStatus='I'` }, + { name: 'NonMerchandising_JourneyPlan', query: `SELECT t1.* FROM NonMerchandising_JourneyPlan t1 WHERE t1.VisitDate='${d2}' AND t1.UploadStatus='I'` }, + { name: 'NonProgram_JourneyPlan', query: `SELECT t1.* FROM NonProgram_JourneyPlan t1 WHERE t1.VisitDate='${d2}' AND t1.UploadStatus='I'` }, + { name: 'StoreSearch_JourneyPlan', query: `SELECT t1.* FROM StoreSearch_JourneyPlan t1 WHERE t1.VisitDate='${d2}' AND t1.UploadStatus='I'` } + ]; + + // Check if a table exists before querying + for (let table of tables) { + try { + // Check if the table exists in the database + let checkTableExistsQuery = `SELECT name FROM sqlite_master WHERE type='table' AND name='${table.name}'`; + let tableExists = await props.executeSelQuery(checkTableExistsQuery, '1'); + // If the table exists, execute the query + if (tableExists) { + let result = await props.executeSelQuery(table.query, '1'); + console.log(`Result from ${table.name}:`, result); + // If data is found, return the result and stop further execution + if (result) { + return result; // Stop further queries if data is found + } + } else { + console.log(`Table '${table.name}' does not exist, skipping...`); + } + } catch (error) { + console.log(`Error querying table '${table.name}':`, error.message); + // Continue to the next table if error occurs + continue; + } + } + // If no matching data was found in any table, return null + console.log('No matching data found in any table.'); + return null; + } + + return ( + { get_to_store_details(item, flags) }}> + {/* {console.log('store--', item, flags)} */} + + + + {item.StoreName} + + + + + + {ST.StoreId + ':'} + {item.StoreId} + + + {ST.StoreType + ':'} + {item.StoreType} + + + + + {'Store Category:'} + {item.StoreCategory} + + + + + {ST.StoreCode + ':'} + {item.StoreCode} + + + {item.DistributorName != null && item.DistributorId != null && item.DistributorName != '' && item.DistributorId != '' && + + + {'Distributor:'} + {item.DistributorName} + + + } + + + {ST.Address + ':'} + {item.Address} + + + {((item.LastVisitDate != null && item.LastVisitDate != '' && item.LastVisitDate != 'undefined') || (item.Score != null && item.Score != '' && item.Score != 'undefined')) && + + {(item.LastVisitDate != null && item.LastVisitDate != '' && item.LastVisitDate != 'undefined') && + + {'Last Visit Date:'} + {item.LastVisitDate} + } + {(item.Score != null && item.Score != '' && item.Score != 'undefined') && + + {'Store Score:'} + {item.Score} + } + + } + + {(props.StoreRouteView && item.GeoTag !== "N" && item.UploadStatus === "N" && item?.Distance != undefined && item?.Distance) && + + + + {item?.Distance === "Very close to your store!" + ? "Very close to your store!" + : `${item?.Distance} away, approx. ${item?.Duration}`} + + + { props.navigation.navigate('NavigationRouteScreen', { storeData: item, 'isAdhoc': props.isAdhocScreen, 'isBeat': props.isBeatPlan, 'isNonMerchans': props.isNonMerchan, isNonProgs: props.isNonProg, isStoreSearch: props.isStoreSearch }) }}> + + + + } + + {(item.MTDMerchandised != null && item.MTDMerchandised != '' && item.MTDMerchandised != 'undefined') && + + + {'MTD Merchandised Count:'} + {item.MTDMerchandised} + + + } + + { + + (item.CheckInTime != null && item.CheckInTime != '') && + + + + {ST.CheckIn + ':'} + {item.CheckInTime} + + {(item.CheckOutTime != null && item.CheckOutTime != '') && + + {ST.CheckOut + ':'} + {item.CheckOutTime} + + } + + } + + { + + (item.UploadStatus != null && item.UploadStatus != '' && item.UploadStatus != 'N') && + + + {item.UploadStatus != null && (item.UploadStatus == 'I' || item.UploadStatus == 'L') && + { AskForCancelCheckin(item) }}> + {item.UploadStatus == 'L' ? + : } + {item.UploadStatus == 'L' ? {ST.NotWorking} + : {ST.CheckedIn}} + + + + + } + {item.UploadStatus != null && item.UploadStatus == 'C' && + + + {ST.CheckedOut} + } + {item.UploadStatus != null && item.UploadStatus == 'P' && + + + {ST.PartiallyUploaded} + } + {item.UploadStatus != null && item.UploadStatus == 'D' && + + + {ST.DataUploaded} + } + {item.UploadStatus != null && item.UploadStatus == 'U' && + + + {ST.Uploaded} + } + {item.allDone == true && (item.UploadStatus == 'I') && + { props.onCheckOut ? props.onCheckOut(item) : ''; }}> + {ST.CheckOut} + + } + + } + + + {item.GeoTag == 'Y' && + { props.navigation.navigate('ShowMap', { storeData: item }) }} > + + + } + {item.GeoTag == 'N' && + { }} > + + + } + + + ); +}); + +function StoreList(props) { + const route = useRoute(); + const ST = props.StaticText || {}; + // get all theme styles acc to current theme set + const PageTheme = GetPageTheme(props.DarkMode, route.name); + const customStyle = customStyles(props.DarkMode, route.name); + const [loaderTitle, setLoaderTitle] = useState(); + const [processing, setProcessing] = useState((props.isDataDownloaded ? true : false)); + const [isAdhocScreen, setIsAdhocScreen] = useState(false); + const [isBeatPlan, setIsBeatPlan] = useState(false); + const [isNonMerchan, setIsNonMerchan] = useState(false); + const [isNonProg, setIsNonProg] = useState(false); + const [isStoreSearch, setIsStoreSearch] = useState(false); + const [nodataFound, setNodataFound] = useState(false); + const [showStoreVisitModal, setShowStoreVisitModal] = useState(false); + const [showGeoTagModal, setShowGeoTagModal] = useState(false); + const [showDistanceModal, setShowDistanceModal] = useState(false); + const [currentStore, setCurrentStore] = useState({}); + const [storeDistance, setStoreDistance] = useState('0 M'); + const [storeDistanceinM, setStoreDistanceinM] = useState(0); + const [geoFenceData, setGeoFenceData] = useState({}); + const [showAlert, setShowAlert] = useState(false); + const [checkOutStore, setCheckOutStore] = useState({}); + const [rerenderdata, setrerenderdata] = useState(false); + let [state, setState] = useState({ storeList: [] }); + let [stateForSearch, setStateforSearch] = useState({ storeList: [] }); + const [globalStorelist, setGlobalStorelist] = useState([]); + const [cancelCheckOutStore, setCancelCheckOutStore] = useState({}); + const [showCancelCIModal, setShowCancelCIModal] = useState(false); + const [searchedItem, setSearchedItem] = useState(''); + const [CheckOutImage, setCheckOutImage] = useState(''); + const [CheckOutImagePath, setCheckOutImagePath] = useState(''); + const [CheckOutImageModal, setCheckOutImageModal] = useState(false); + const [showImageSaveOp, setShowImageSaveOp] = useState(true); + const [showCamera, setShowCamera] = useState(false); + const showCameraRef = useRef(false); + const [GeoFenceEnable_Checkout, setGeoFenceEnable_Checkout] = useState(false); + const [GeoFenceRadius_Checkout, setGeoFenceRadius_Checkout] = useState(''); + const [uploadedCount, setUploadedCount] = useState(0); + const [TotalUpCount, setTotalUpCount] = useState(0); + const [startUploading, setStartUploading] = useState(false); + const [UploadingSubText, setUploadingSubText] = useState(""); + const [UploadingText, setUploadingText] = useState("Uploading Data..."); + const [showProgresssBar, setshowProgresssBar] = useState(false); + const [designation, setDesignation] = useState(''); + const sessionsToUpload = useRef([]); + const sessionsUploadedCount = useRef(0); + const sessionsReceived = useRef(0); + const d1 = new Date(); + const d2 = moment(d1).format('MM/DD/YYYY'); + + useEffect(() => { + setLoaderTitle(ST.Loading + '...'); + console.log('props.isDataDownloaded in storelist:', props.isDataDownloaded); + let CO_GeoFenceEnable = props.GFEnable_checkout != null ? props.GFEnable_checkout : false; + let CO_GeoFenceRadius = props.GFRadius_checkout != null ? props.GFRadius_checkout : ''; + setGeoFenceEnable_Checkout(CO_GeoFenceEnable); + setGeoFenceRadius_Checkout(CO_GeoFenceRadius); + getData(); + console.log('tettving_some:',"jeeevanp"); + + const unsubscribe = props.navigation.addListener('beforeRemove', onBeforeRemove); + const unsubscribeFocus = props.navigation.addListener('focus', () => { + checkLocalData(); + }); + const removeIRListener = DeviceEventEmitter.addListener('onGlobalIRImageUpload', (data) => { onIRImageUpload(data) }); + return function cleanup() { + unsubscribeFocus() + if (AppName == PerformicsIRAppName && props.IR_CameraEnableOnApp == true) { + IRLogin.deRegisterReceiver(); + } + removeIRListener.remove(); + return unsubscribe; + }; + }, []); + + function onBeforeRemove(e) { + if (showCameraRef.current == true) { + e.preventDefault(); + BGUpdateShowCamera(false); + } + else { + return; + } + } + + function BGUpdateShowCamera(val) { + showCameraRef.current = val; + setShowCamera(val); + } + + + async function calLocatDistance() { + if (currentStore.Latitude != '' && currentStore.Latitude != null) { + const hasPermission = await _checkLocationPermission(); + if (hasPermission == true) { + Geolocation.getCurrentPosition( + async (position) => { + let loc = { lat: position.coords.latitude, lng: position.coords.longitude }; + var distance = checkRange(loc.lat, loc.lng, currentStore.Latitude, currentStore.Longitude); + // console.log('distance=====:',currentStore.Latitude, currentStore.Longitude,loc.lat, loc.lng); + let dinKM = (distance / 1000); + let distanceinM = (distance == '' || distance == null || isNaN(distance)) ? ' 0 m' : (dinKM > 1 ? dinKM.toFixed(1) + ' Km' : distance + ' m'); + setStoreDistance(distanceinM); + setStoreDistanceinM(distance); + setGeoFenceData({locLat: loc.lat, locLng: loc.lng, storeLat: currentStore.Latitude, storeLng: currentStore.Longitude, distance: distance ,storeId: currentStore.StoreId,VisitDate: d2}); + console.log("GeoFenceEnable", props.GeoFenceEnable, "GeoFenceRadius", props.GeoFenceRadius, "distance", distance); + if (props.GeoFenceEnable == true && distance > props.GeoFenceRadius) { + setShowDistanceModal(true); + } + else { + props.navigation.navigate('StoreCheckin', { storeData: currentStore, 'isAdhoc': isAdhocScreen, 'isBeat': isBeatPlan, "isNonMerchans": isNonMerchan, isNonProgs: isNonProg, 'isStoreSearch': isStoreSearch, '_fromStoreWise': true }); + } + }, + (error) => { + notify(ST.Cannotgetuserposition); + }, + { enableHighAccuracy: false, distanceFilter: 0, interval: 1000, fastestInterval: 2000 } + ); + } + else { + notify(ST.Pleaseallowlocationpermission); + } + } + else { + notify(ST.Storelocationnotavailable); + } + + } + + async function getData() { + let d1 = new Date(); + let d2 = moment(d1).format('MM/DD/YYYY'); + let token = await get_item('loginToken'); + let loginInfo = await get_item('loginInfo'); + const loginDetails = JSON.parse(loginInfo); + let desg = loginDetails.Designation || ''; + setDesignation(desg); + let checkInAvlbl = await checkIfCheckInAvlbl(); + console.log('Store checkInAvlbl: ', checkInAvlbl); + if (checkInAvlbl.IsAvlbl && checkInAvlbl.IsDataInCoverage == false) { + await restoreCheckIn(checkInAvlbl.data); + } + + checkLocalData(); + } + + async function checkIfCheckInAvlbl() { + let d1 = new Date(); + let d2 = moment(d1).format('MM/DD/YYYY'); + let join = `LEFT OUTER JOIN ${AppTables.COVERAGE_DATA} t2 on t2.STORE_ID=t1.StoreId and t2.JCP_TYPE='Mapping_JourneyPlan' `; + let q = `Select t1.*,'Mapping_JourneyPlan' as JCP_TYPE,(CASE WHEN t2.STORE_ID is null THEN 0 ELSE 1 END ) as IsCheckInAvlbl from Mapping_JourneyPlan t1 ${join} where t1.VisitDate='${d2}' and t1.UploadStatus='I'` + let join2 = `LEFT OUTER JOIN ${AppTables.COVERAGE_DATA} t2 on t2.STORE_ID=t1.StoreId and t2.JCP_TYPE='Adhoc_JourneyPlan' `; + let q2 = `Select t1.*,'Adhoc_JourneyPlan' as JCP_TYPE,(CASE WHEN t2.STORE_ID is null THEN 0 ELSE 1 END ) as IsCheckInAvlbl from Adhoc_JourneyPlan t1 ${join2} where t1.VisitDate='${d2}' and t1.UploadStatus='I'` + let join3 = `LEFT OUTER JOIN ${AppTables.COVERAGE_DATA} t2 on t2.STORE_ID=t1.StoreId and t2.JCP_TYPE='JourneyPlan_RouteWise' `; + let q3 = `Select t1.*,'JourneyPlan_RouteWise' as JCP_TYPE,(CASE WHEN t2.STORE_ID is null THEN 0 ELSE 1 END ) as IsCheckInAvlbl from JourneyPlan_RouteWise t1 ${join3} where t1.VisitDate='${d2}' and t1.UploadStatus='I'` + let join4 = `LEFT OUTER JOIN ${AppTables.COVERAGE_DATA} t2 on t2.STORE_ID=t1.StoreId and t2.JCP_TYPE='NonMerchandising_JourneyPlan' `; + let q4 = `Select t1.*,'NonMerchandising_JourneyPlan' as JCP_TYPE,(CASE WHEN t2.STORE_ID is null THEN 0 ELSE 1 END ) as IsCheckInAvlbl from NonMerchandising_JourneyPlan t1 ${join4} where t1.VisitDate='${d2}' and t1.UploadStatus='I'` + let join5 = `LEFT OUTER JOIN ${AppTables.COVERAGE_DATA} t2 on t2.STORE_ID=t1.StoreId and t2.JCP_TYPE='NonProgram_JourneyPlan' `; + let q5 = `Select t1.*,'NonProgram_JourneyPlan' as JCP_TYPE,(CASE WHEN t2.STORE_ID is null THEN 0 ELSE 1 END ) as IsCheckInAvlbl from NonProgram_JourneyPlan t1 ${join5} where t1.VisitDate='${d2}' and t1.UploadStatus='I'` + let join6 = `LEFT OUTER JOIN ${AppTables.COVERAGE_DATA} t2 on t2.STORE_ID=t1.StoreId and t2.JCP_TYPE='StoreSearch_JourneyPlan' `; + let q6 = `Select t1.*,'StoreSearch_JourneyPlan' as JCP_TYPE,(CASE WHEN t2.STORE_ID is null THEN 0 ELSE 1 END ) as IsCheckInAvlbl from StoreSearch_JourneyPlan t1 ${join6} where t1.VisitDate='${d2}' and t1.UploadStatus='I'` + + let checkPJPData = await props.executeSelQuery(q, '2'); + if (!checkPJPData.IsAvlbl) { + let checkAdhocData = await props.executeSelQuery(q2, '2'); + if (!checkAdhocData.IsAvlbl) { + let checkRouteData = await props.executeSelQuery(q3, '2', props.ShowBeatPlanList == true); + if (!checkRouteData.IsAvlbl) { + let checkNonMerData = await props.executeSelQuery(q4, '2', props.ShowNonMerList == true); + if (!checkNonMerData.IsAvlbl) { + let checkNonProgData = await props.executeSelQuery(q5, '1', props.ShowNonProgram == true); + if (!checkNonProgData.IsAvlbl) { + let checkShowStoreSearchData = await props.executeSelQuery(q6, '1', props.ShowStoreSearch == true); + return checkShowStoreSearchData; + } else { + return checkNonProgData; + } + } else { + return checkNonMerData; + } + } + else { + return checkRouteData; + } + } + else { + return checkAdhocData; + } + } + else { + return checkPJPData; + } + + } + + async function executeSelQuery(q = '', type = '1', isTableAvlbl = true) { + let d1 = new Date(); + let d2 = moment(d1).format('MM/DD/YYYY'); + let obj = { IsAvlbl: false, data: {} }; + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + if (isTableAvlbl) { + await txn.executeSql(q, [], async function (txn2, txnres2) { + // console.log('Data in covergae len:',txnres2.rows.length); + if (txnres2.rows.length > 0) { + // show from local + let data = txnres2.rows.item(0); + let IsDataInCoverage1 = data.IsCheckInAvlbl == '1' || data.IsCheckInAvlbl == 1 ? true : false; + obj.IsAvlbl = true; + obj.data = data; + if (type == '2') { + obj.IsDataInCoverage = IsDataInCoverage1; + } + resolve(obj); + } + else { + resolve(obj); + } + }, function (Etxn, txnerr) { console.log(txnerr); resolve(obj); }); + } + else { + resolve(obj); + } + }); + + }).then((val) => { + return val; + }).catch((err) => { + return obj; + }); + } + + async function restoreCheckIn(item) { + console.log('restoreCheckIn'); + let d1 = new Date(); + let d2 = moment(d1).format('MM/DD/YYYY'); + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + let { StoreId, VisitDate, MID, Latitude, Longitude, UploadStatus, InTime, OutTime, JCP_TYPE } = item; + let JcpType = JCP_TYPE; + let In_Time = (InTime != '' && InTime != null && InTime != '00:00:00' && InTime != '00:00') ? moment(InTime, "HH:mm:ss").format('MM/DD/YYYY HH:mm:ss') : ''; + let Out_Time = (OutTime != '' && OutTime != null && OutTime != '00:00:00' && OutTime != '00:00') ? moment(OutTime, "HH:mm:ss").format('MM/DD/YYYY HH:mm:ss') : ''; + let CHECKOUT_TIME = (Out_Time != '' && Out_Time != null) ? Out_Time : In_Time; + // add store Coverage data + let q = `delete from ${AppTables.COVERAGE_DATA} where STORE_ID='${StoreId}' and VISIT_DATE='${VisitDate}' `; + let values = ` ('${StoreId}','${VisitDate}','${Latitude}','${Longitude}','','${CHECKOUT_TIME}','','0','','','','${MID}','${JcpType}','${d2}')`; + let insert_q = ` insert into ${AppTables.COVERAGE_DATA}(STORE_ID,VISIT_DATE ,LATITUDE,LONGITUDE,IMAGE,CHECKOUT_TIME,CHECKOUT_IMAGE,REASON_ID,REASON,REMARK,STORE_FLAG,MID,JCP_TYPE,ADDED_DATE) values ${values}`; + + console.log('insert_q:', insert_q); + await txn.executeSql(q, [], async function (txn2, txnres2) { + console.log('store coverage deleted'); + await txn.executeSql(insert_q, [], async function (txn2, txnres3) { + console.log('InsertCoverageData done'); + // add storeCheckin data + let q2 = `delete from ${AppTables.CHECKIN_DATA} where STORE_ID='${StoreId}' and VISIT_DATE='${VisitDate}' `; + let values2 = ` ('${StoreId}','${VisitDate}','${Latitude}','${Longitude}','${In_Time}','','${Out_Time}','','','${JcpType}','${d2}')`; + let insert_q2 = ` INSERT INTO ${AppTables.CHECKIN_DATA}(STORE_ID,VISIT_DATE,LATITUDE,LONGITUDE,CHECKIN_TIME,CHECKIN_IMAGE,CHECKOUT_TIME,CHECKOUT_IMAGE,REMARK,JCP_TYPE,ADDED_DATE) values ${values2}`; + console.log('insert_q2:', insert_q2); + await txn.executeSql(q2, [], async function (txn2, txnres4) { + console.log('removed'); + await txn.executeSql(insert_q2, [], async function (txn2, txnres5) { + console.log('checkin data added'); + resolve(true); + }, function (Etxn, txnerr) { console.log(txnerr); resolve(false); }); + }, function (Etxn, txnerr) { console.log(txnerr); resolve(false); }); + + }, function (Etxn, txnerr) { console.log(txnerr); resolve(false); }); + }, function (Etxn, txnerr) { console.log(txnerr); resolve(false); }); + + }); + + }).then((val) => { + return val; + }).catch((err) => { + return false; + }); + } + + + // 📌 Function to filter stores + const getFilteredStores = (stores) => { + return stores + .filter(store => { + const hasValidLatLng = + store.GeoTag !== "N" && + store.Latitude && + store.Longitude && + store.Latitude !== "0" && + store.Longitude !== "0"; + return store.UploadStatus === "N" && hasValidLatLng; + }) + .map(store => ({ + StoreId: store.StoreId, + latitude: parseFloat(store.Latitude), + longitude: parseFloat(store.Longitude), + })); + }; + async function checkLocalData() { + let d1 = new Date(); + let d2 = moment(d1).format('MM/DD/YYYY'); + let token = await get_item('loginToken'); + let loginInfo = await get_item('loginInfo'); + const loginDetails = JSON.parse(loginInfo); + let params = props.route.params ? props.route.params : {}; + let isAdhoc = params.isAdhoc || false; + let isBeat = params.isBeat != null ? params.isBeat : false; + let isNonMerchan1 = params.isNonMerchans != null ? params.isNonMerchans : false; + let isNonProgam = params.isNonProgs != null ? params.isNonProgs : false; + let isStoreSearch1 = params.isStoreSearch != null ? params.isStoreSearch : false; + setIsAdhocScreen(isAdhoc); + setIsBeatPlan(isBeat); + setIsNonMerchan(isNonMerchan1); + setIsNonProg(isNonProgam) + setIsStoreSearch(isStoreSearch1) + console.log("check_flag", isAdhoc, isBeat, isNonMerchan1, isNonProgam, isStoreSearch1) + let myStoreWithAllFieldsQuery = await Q_getMyStoresList(isAdhoc, isBeat, isNonMerchan1, isNonProgam, isStoreSearch1); + console.log('myStoreWithAllFieldsQuery:', myStoreWithAllFieldsQuery); + let CheckInRunning = false + await db.transaction(async function (txn) { + await txn.executeSql(myStoreWithAllFieldsQuery, [], async function (txn2, txnres2) { + console.log("size", txnres2.rows.length) + if (txnres2.rows.length > 0) { + // show from local + var storeArr = []; + for (var i = 0; i < txnres2.rows.length; i++) { + let sdata = txnres2.rows.item(i); + let { InTime, OutTime, UploadStatus, StoreId, MID, MenuCount, MenuDoneCount, StoreName, PS_MenuDoneCount } = sdata; + console.log("upload_status_new", UploadStatus, StoreId, InTime) + if (UploadStatus === "I") { + CheckInRunning = true + } + if (InTime != null && InTime != "" && InTime != "00:00:00") { + sdata.CheckInTime = InTime; + } else { + let time = sdata.CheckInTime != null && sdata.CheckInTime != '' ? moment(sdata.CheckInTime, "MM/DD/YYYY HH:mm:ss").format('HH:mm:ss') : ''; + let time2 = sdata.CheckOutTime != null && sdata.CheckOutTime != '' ? moment(sdata.CheckOutTime, "MM/DD/YYYY HH:mm:ss").format('HH:mm:ss') : ''; //new Date(sdata.CheckOutTime) + let In_Time = (time == '' && UploadStatus != '' && UploadStatus != 'N') ? InTime : time; + sdata.CheckInTime = In_Time; + } + + if (OutTime != null && OutTime != "" && OutTime != "00:00:00") { + sdata.CheckOutTime = OutTime; + } else { + let time2 = sdata.CheckOutTime != null && sdata.CheckOutTime != '' ? moment(sdata.CheckOutTime, "MM/DD/YYYY HH:mm:ss").format('HH:mm:ss') : ''; //new Date(sdata.CheckOutTime) + let Out_Time = (time2 == '' && UploadStatus != '' && UploadStatus != 'N' && UploadStatus != 'I') ? OutTime : time2; + sdata.CheckOutTime = Out_Time; + } + + let allDone = false; + // console.log("props.PartialSaveAllow",props.PartialSaveAllow) + // Menu wil be counted as done if and only if all available data row is filled - (This Will work only if partial save is allowed) + if (props.PartialSaveAllow == true) { + allDone = PS_MenuDoneCount != null && PS_MenuDoneCount != null && MenuCount == PS_MenuDoneCount; + } + else { // Menu wil be counted as done if any available data row is filled + allDone = MenuCount != null && MenuDoneCount != null && MenuCount == MenuDoneCount; + } + sdata.allDone = allDone; + sdata.MenuListLen = MenuCount; + storeArr.push(sdata); + // console.log("sdata------", sdata) + if (i == (txnres2.rows.length - 1)) { + console.log("test1") + if (props.StoreRouteView && !isAdhoc && !isBeat && !isNonMerchan1 && !isNonProgam && !isStoreSearch1) { + if (CheckInRunning == false) { + console.log("test2") + ///filter stores if have UploadStatus N and Lat,longt both or not zero + let mergedData = storeArr + const filteredStores = getFilteredStores(storeArr); + const distancesStores = await fetchDistanceMatrix(filteredStores) + console.log("distancesStores-----", distancesStores) + if (distancesStores?.status === "SUCCESS") { + //fetch distances for same + mergedData = await mergeStoreDistances(storeArr, distancesStores?.data) + // Save mergedAll + await AsyncStorage.setItem("storeArr", JSON.stringify(mergedData?.mergedAll || [])); + console.log("Filtered Stores:", mergedData); + } + storeArr = mergedData?.mergedAll || storeArr + } else { + // Get mergedAll + const savedStores = await AsyncStorage.getItem("storeArr"); + const parsedStores = savedStores ? JSON.parse(savedStores) : []; + storeArr = storeArr || parsedStores + } + } + //console.log("storeList-------", storeArr) + setState({ storeList: storeArr }); + setGlobalStorelist(storeArr); + setProcessing(false); + } + } + } + else { + if (isStoreSearch1 == true) { + setState({ storeList: [] }); + setProcessing(false); + } + else { + setProcessing(false); notify(ST.Nodatafound); setNodataFound(true); + } + } + }, function (Etxn, txnerr) { console.log("Errorrr",txnerr); setProcessing(false); notify(ST.Nodatafound); setNodataFound(true); }); + }); + } + + async function getDailyMenu(storeData1) { + let d1 = new Date(); + let d2 = moment(d1).format('MM/DD/YYYY'); + let { StoreId, ChannelId, RegionId, StoreTypeId } = storeData1; + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + let q = Q_MenuList(storeData1); + await txn.executeSql(q, [], async function (txn2, txnres) { + + if (txnres.rows.length > 0) { + let allDone = true; + for (var i = 0; i < txnres.rows.length; i++) { + let data = txnres.rows.item(i); + let isAvlbl = await checkAvailability(storeData1, data); + let isDone = await updateStatus(storeData1, data, isAvlbl); + + if (isAvlbl && !isDone) { + allDone = false; + resolve(allDone); + break; + } + if (i == (txnres.rows.length - 1)) { + resolve(allDone); + } + } + } + else { + resolve(true); + } + }, function (txnE, txnerr) { console.log(txnerr); resolve(false); },); + + }); + }).then((val) => { + return val; + }).catch((err) => { + console.log(err); + return false; + }); + + } + + async function getMenuList(storeData1) { + let { StoreId, ChannelId, RegionId, StoreTypeId } = storeData1; + return new Promise((resolve, reject) => { + + db.transaction(async function (txn) { + let q = Q_MenuList(storeData1); + + await txn.executeSql(q, [], async function (txn2, txnres) { + + if (txnres.rows.length > 0) { + let arr = [];//txnres.rows.raw(); + // resolve(arr); + for (var i = 0; i < txnres.rows.length; i++) { + let data = txnres.rows.item(i); + arr.push(data); + if (i == (txnres.rows.length - 1)) { + resolve(arr); + } + } + } + else { + resolve([]) + } + }, function (txnE, txnerr) { console.log(txnerr); resolve([]); },); + }); + }).then((val) => { + return val; + }).catch((err) => { + console.log('') + return [] + }) + } + + async function checkAvailability(storeData1, data) { + + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + let q2 = getAvailblQuery(data.ScreenName, storeData1); + if (q2 != '' && q2 != null) { + + await txn.executeSql(q2, [], async function (txn2, txnres2) { + let isAvlbl = getIfAvlbl(data.ScreenName, txnres2, storeData1); + resolve(isAvlbl); + }, function (txnE, txnerr) { console.log(txnerr); resolve(false); },); + } + else { + let isAvlbl = getIfAvlbl(data.ScreenName, {}, storeData1); + resolve(isAvlbl); + } + }); + }).then((val) => { + return val; + }).catch((err) => { + console.log(err); + return false; + }); + } + + + async function updateStatus(storeData1, data, isAvlbl) { + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + let q2 = getQuery(data.ScreenName, storeData1); + if (q2 != '' && q2 != null && isAvlbl == true) { + await txn.executeSql(q2, [], async function (txn2, txnres2) { + let isDone = await getIfKPIDone(data.ScreenName, txnres2, storeData1); + resolve(isDone); + + }, function (txnE, txnerr) { console.log(txnerr); resolve(false); },); + } + else { + resolve(false); + } + }); + }).then((val) => { + return val; + }).catch((err) => { + console.log(err); + return false; + }); + + } + + async function onCheckOut(storeData1) { + // let isAlldone=await getDailyMenu(storeData1); + let { MinTimeTaken, CheckInTime } = storeData1; + if (MinTimeTaken != null && MinTimeTaken != '' && parseInt(MinTimeTaken) > 0) { + let checkin_t = moment(new Date()).format('MM/DD/YYYY') + ' ' + CheckInTime; + let checkin_t_m = moment(checkin_t).format('MM/DD/YYYY HH:mm:ss'); + let CalTime = moment().diff(checkin_t, 'minutes'); + if (CalTime < parseInt(MinTimeTaken)) { + notify('You are not allowed to Check-out before ' + MinTimeTaken + ' Minutes from Check-in time. Your Current Duration is ' + CalTime + ' Minutes.'); + return; + } + } + + if (storeData1.allDone == true) { + setCheckOutStore(storeData1); + if (props.isInternetAvailable == true) { + setShowAlert(true); + } + } + else { + notify(ST.PleasefillallKPI, false); + } + } + + function onSaveCancel() { + setShowAlert(false); + } + + async function getLocOnCheckout(type = "1") { + if (props.isInternetAvailable == false) { + return; + } + setShowAlert(false); + setLoaderTitle(ST.Gettinglocation + '...'); + setProcessing(true); + + Geolocation.getCurrentPosition( + async (position) => { + let { latitude, longitude } = position.coords; + let loc = { lat: latitude, lng: longitude }; + var distance = checkRange(loc.lat, loc.lng, checkOutStore.Latitude, checkOutStore.Longitude); + console.log('COut distance:', distance); + if (GeoFenceEnable_Checkout == true) { + if (GeoFenceRadius_Checkout != '' && distance > GeoFenceRadius_Checkout) { + let locData = { "UserId": props.UserId, 'MID': checkOutStore.MID, "StoreId": checkOutStore.StoreId, "StoreLatitude": checkOutStore.Latitude, 'StoreLongitude': checkOutStore.Longitude, 'currentLatitude': latitude, 'currentLongitude': longitude } + await sendUserLocation(locData); + setProcessing(false); + notify(ST.Youcannotcheckout + ' ' + ST.Youarenotwithinthealloweddistancefromthestore + ' ' + GeoFenceRadius_Checkout + ' m', 'LONG') + } + else { + setProcessing(false); + checkOutAfterLoc(loc, type); + } + } + else { + setProcessing(false); + checkOutAfterLoc(loc, type); + } + }, + (error) => { + notify(ST.Cannotgetuserposition); + setProcessing(false); + }, + { enableHighAccuracy: true, distanceFilter: 0, interval: 1000, fastestInterval: 2000 } + ); + } + + async function checkOutAfterLoc(loc, type = '1') { + let CheckOut_PhotoReq = props.CheckOut_PhotoReq != null ? props.CheckOut_PhotoReq : false; + // type='2' means checkout image has been captured already and now we are again checking the user location + if (type != '2' && CheckOut_PhotoReq) { + setShowAlert(false); + setCheckOutImageModal(true); + } + else { + if (props.isInternetAvailable == true) { + UpdateCheckOutStatus(loc); + } + } + } + + async function sendUserLocation(data = {}) { + console.log("sendUserLocation"); + const url = props.baseurl + getMethodName(METHODS.UPLOADJSON_METHOD); + let postData = { + 'MID': checkOutStore.MID, + 'Keys': "GeoFenceDataStoreList", + 'JsonData': JSON.stringify(data), + 'UserId': props.UserId, + } + console.log(url, postData); + return await UploadData2(url, postData) + .then(async (res) => { + if (res.UploadJsonResult != null && res.UploadJsonResult == 'Success') { + // console.log(KPIdata+' uploaded'); + return true; + } + return false; + }) + .catch(async (err) => { + return false; + }); + } + + //======================================================== + function getEmpStoreCheckIn(tbname, VisitDate, stored) { + return new Promise((resolve, reject) => { + var query = "SELECT * FROM EMPSTORE_CHECKIN WHERE JCP_TYPE = ? AND VISIT_DATE = ? AND STORE_ID = ?"; + db.transaction((tx) => { + tx.executeSql(query, [tbname, VisitDate, stored], (tx, results) => { + if (results.rows.length > 0) { + resolve(results.rows._array || results.rows); // Resolving with fetched data + } else { + resolve([]); // Resolving with empty array if no records found + } + }, (error) => { + console.log("Error executing query:", error); + reject(error); // Rejecting in case of an error + }); + }); + }); + } + + async function UpdateCheckOutStatus(loc) { + try { + setTotalUpCount(0); + setshowProgresssBar(false); + setUploadingText(ST.UpdatingCheckoutStatus + '...'); + setStartUploading(true); + let { StoreId, MID } = checkOutStore; + let CheckOut_PhotoReq = props.CheckOut_PhotoReq != null ? props.CheckOut_PhotoReq : false; + let d = new Date(); + let d2 = moment(d).format('MM/DD/YYYY'); + let d3 = moment(d).format('MM/DD/YYYY HH:mm:ss'); + let loginInfo = await get_item('loginInfo'); + const loginDetails = JSON.parse(loginInfo); + let data1 = { + UserId: loginDetails.UserId, + StoreId: StoreId, + Latitude: loc.lat, + Longitude: loc.lng, + Checkout_Date: d2, + CheckOutImage: CheckOutImage, + }; + + const url = props.baseurl + getMethodName(METHODS.CHECKOUTDETAIL_METHOD); + const url1 = (props.imageUploadUrl || URL_IMAGE) + getMethodName(METHODS.UPLOADIMAGES_METHOD); + console.log(url, data1); + // Await the result of the upload + let res = await UploadData2(url, data1); + console.log('StoreCheckOutSup1:', res, 'MID:', MID); + if (!res.error) { + if (res == 1) { + setCheckOutImage(''); + setCheckOutImagePath(''); + let data = { checkout_image: '' }; + console.log("jeevanp", data); + const isCheckOutUpdated = await UpdateStoreCheckOut(data); + if (props.isInternetAvailable == false) { + return + } + + if (isCheckOutUpdated == true) { + let datan = { + StoreId: StoreId, + UploadStatus: 'C', + tbname: isBeatPlan + ? 'JourneyPlan_RouteWise' + : isAdhocScreen + ? 'Adhoc_JourneyPlan' + : isNonMerchan + ? 'NonMerchandising_JourneyPlan' + : isNonProg + ? 'NonProgram_JourneyPlan' + : isStoreSearch + ? 'StoreSearch_JourneyPlan' + : 'Mapping_JourneyPlan', + }; + + var InTime = moment(d).format('HH:mm:ss'); + InTime = await getEmpStoreCheckIn(datan.tbname, d2, datan.StoreId) + .then((data) => { + console.log("Fetched Data:", data[0], data[0].CHECKIN_TIME); + console.log(moment(data[0].CHECKIN_TIME).format()); + InTime = moment(data[0].CHECKIN_TIME, "MM/DD/YYYY HH:mm:ss").format("HH:mm:ss") + console.log('datan:', InTime); + return InTime; // Return the formatted time + }) + .catch((error) => { + console.error("Error fetching data:", error); + }); + + // Adding extra fields dynamically + let outtime = moment(d).format('HH:mm:ss'); + datan.InTime = InTime; + datan.outtime = outtime; + console.log('datan:', datan); + const isUpdated = await UpdateStoreStatus(props, datan); + if (isUpdated == true) { + let outtime = moment(d).format('HH:mm:ss'); + await updateStoreStatuslocal('C', checkOutStore, false, true, outtime); + UploadOnCheckOut(loc); + } else { + setStartUploading(false); //setProcessing(false); + notify(ST.Erroroccurwhilecheckout, 'LONG'); + } + } else { + setStartUploading(false); + notify(ST.Erroroccurwhilecheckout, 'LONG'); + } + } else { + if (CheckOutImagePath != '') { + await RNFS.unlink(CheckOutImagePath); + } + setCheckOutImage(''); + setCheckOutImagePath(''); + notify(ST.Somethingwentwrong, 'SHORT'); + setStartUploading(false); //setProcessing(false); + } + } else { + if (res.error == true) { + setStartUploading(false); + return; + // Stop the execution and exit the function + } + if (CheckOutImagePath != '') { + await RNFS.unlink(CheckOutImagePath); + notify(res.errorMsg, 'SHORT'); + } + setCheckOutImage(''); + setCheckOutImagePath(''); + notify(res.errorMsg, 'SHORT'); + setStartUploading(false); //setProcessing(false); + } + } catch (err) { + if (CheckOutImagePath != '') { + await RNFS.unlink(CheckOutImagePath); + } + setCheckOutImage(''); + setCheckOutImagePath(''); + notify('Error occurred while updating checkout status', 'SHORT'); + setStartUploading(false); //setProcessing(false); + } + } + async function updateStoreStatuslocal(status, storeData1, updateCheckin = false, uCOut = false, cout_time = '') { + let storeArr = state.storeList; + let sdata_index = storeArr.findIndex(i => i.StoreId == storeData1.StoreId); + if (sdata_index >= 0) { + let sdata = storeArr[sdata_index]; + sdata['UploadStatus'] = status; + if (updateCheckin == true) { + sdata['CheckInTime'] = ''; + } + if (uCOut == true) { + sdata['CheckOutTime'] = cout_time; + } + storeArr[sdata_index] = sdata; + setState({ ...state, storeArr }); + setGlobalStorelist(storeArr); + setrerenderdata(!rerenderdata); + } + } + + async function UpdateStoreCheckOut(data) { + if (props.isInternetAvailable == true) { + console.log("jeevanp", data); + let calculateDate = moment(new Date()).format('MM/DD/YYYY'); + let calculateTym = moment(new Date()).format('HH:mm:ss'); + console.log("dateandtime--", calculateDate + "\n" + calculateTym) + let CheckOut_PhotoReq = props.CheckOut_PhotoReq != null ? props.CheckOut_PhotoReq : false; + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + let q2 = `UPDATE ${AppTables.COVERAGE_DATA} SET CHECKOUT_TIME='${calculateTym}', CHECKOUT_IMAGE='${CheckOut_PhotoReq ? CheckOutImage : ''}' WHERE STORE_ID='${checkOutStore.StoreId}' and VISIT_DATE='${calculateDate}' `; + await txn.executeSql(q2, [], async function (txn2, txnres2) { + console.log('store coverage updated'); + }, function (Etxn, txnerr) { console.log(txnerr); resolve(false); }); + + let q = `UPDATE ${AppTables.CHECKIN_DATA} SET CHECKOUT_TIME='${calculateTym}', CHECKOUT_IMAGE='${CheckOut_PhotoReq ? CheckOutImage : ''}' WHERE STORE_ID='${checkOutStore.StoreId}' and VISIT_DATE='${calculateDate}' `; + await txn.executeSql(q, [], async function (txn2, txnres2) { + console.log('store checkout updated'); + resolve(true); + }, function (Etxn, txnerr) { console.log(txnerr); resolve(false); }); + + }); + }).then((val) => { + return val; + }).catch((err) => { + console.log(err); + return false; + }); + } else { + return; + } + } + + + async function UpdateUploadCountLocal(upCount) { + // keep 1 less to actual count as DownloadDataModal shows it as provided_value+1 + setUploadedCount(upCount - 1); + + } + + async function UploadCheckoutImageWithP(loc, tbname, storeData) { + let d1 = new Date(); + let d2 = moment(d1).format('MM/DD/YYYY'); + let pdata = { + "Mid": storeData.MID, + "StoreId": storeData.StoreId, + "VisitDate": d2, + "Latitude": (loc.lat || ''), + "Longitude": (loc.lng || ''), + "ReasonId": 0, + "Remark": "", + "Appversion": AppVersion, + "UploadStatus": "P", + "UserName": (props.UserId || ''), + "ImageName": storeData.IMAGE != null ? storeData.IMAGE : '', + "CheckoutImage": storeData.CHECKOUT_IMAGE != null && storeData.CHECKOUT_IMAGE != 'undefined' ? storeData.CHECKOUT_IMAGE : '', + } + + const url = props.baseurl + getMethodName(METHODS.GETCOVERAGE_METHOD); + console.log(url, pdata); + return await UploadData2(url, pdata) + .then(async (res) => { + console.log('status uploadres:', res); + if (parseInt(res) > 0) { + let datan1 = { StoreId: storeData.StoreId, UploadStatus: 'P', tbname: tbname }; + let isUpdated = await UpdateStoreStatus(props, datan1); + return isUpdated; + } + else { + return false; + } + + }) + .catch((err) => { + console.log(err); + return false; + }); + } + + async function UploadOnCheckOut(loc) { + try { + console.log('UploadOnCheckOut'); + let d1 = new Date(); + let d2 = moment(d1).format('MM/DD/YYYY'); + let token = await get_item('loginToken'); + let loginInfo = await get_item('loginInfo'); + const loginDetails = JSON.parse(loginInfo); + let PJPStores = await getPJPStoresData('Mapping_JourneyPlan', [], d2); + let AdhocSTores = await getPJPStoresData('Adhoc_JourneyPlan', PJPStores, d2); + let routeWise = await getPJPStoresData('JourneyPlan_RouteWise', AdhocSTores, d2); + let nonProgJau = await getPJPStoresData('NonProgram_JourneyPlan', routeWise, d2); + let storeSearchJP = await getPJPStoresData('StoreSearch_JourneyPlan', nonProgJau, d2); + let AllStores = await getPJPStoresData('NonMerchandising_JourneyPlan', storeSearchJP, d2); + console.log('stores to upload:', AllStores.length); + + await db.transaction(async function (txn) { + console.log('stores to upload:', AllStores.length); + if (AllStores.length > 0) { + for (var i = 0; i < AllStores.length; i++) { + let data = AllStores[i]; + const index = i; + let { StoreId, StoreName, EmpId, MID, UploadStatus, Status, VisitDate, REASON_ID, IMAGE, JCP_TYPE } = data; + let MenuList = await getMenuList(data); + let allKPIs = await getKPIS(MenuList, props); + let totalUpC = MenuList.length - 1; // keep 1 less to actual count as DownloadDataModal shows it as provided_value+1 + // get all checkout ids data + console.log('UploadStatus before Start Uploading Data :', UploadStatus); + setTotalUpCount(totalUpC); + setshowProgresssBar(false); + setUploadingSubText("Uploading Data for Store:" + StoreId); + if (UploadStatus == 'C') { + let isUploaded_P_Status = await uploadStoreStatus(props, data, 'P', JCP_TYPE); + // let isUploaded_P_Status=await UploadCheckoutImageWithP(loc,JCP_TYPE,data); + console.log('isUploaded_P_Status:', isUploaded_P_Status); + + if (isUploaded_P_Status) { + await updateStoreStatuslocal('P', data); + setTotalUpCount(totalUpC); + setshowProgresssBar(true); + setUploadingText(ST.UploadingData + '...'); + await uploadAfter_P_status(index, AllStores, data, MenuList, allKPIs, JCP_TYPE); + } + else { + // Stop processing if all stores uploaded + if (index == AllStores.length - 1) { + // setProcessing(false); + setStartUploading(false); + notify(ST.Erroroccurwhileuploadingdata, 'LONG'); + } + } + } + else if (UploadStatus == 'D') { + setTotalUpCount(totalUpC); + setshowProgresssBar(true); + setUploadingText(ST.UploadingData + '...'); + // this never be called if there is no KPI + let allFilesToUpload = await uploadAllData(props, data, allKPIs, props.UserId, JCP_TYPE, false, UpdateUploadCountLocal); + + if (allFilesToUpload.length > 0) { + await UploadDataWithImages(index, AllStores, data, MenuList, allKPIs, JCP_TYPE, allFilesToUpload); + } + else { + notify(ST.Alldatauploadedfor + ' ' + StoreName, 'SHORT'); + if (index == AllStores.length - 1) { + // setProcessing(false); + setStartUploading(false); + } + } + } + else if (UploadStatus == 'P') { + setTotalUpCount(totalUpC); + setshowProgresssBar(true); + setUploadingText(ST.UploadingData + '...'); + await uploadAfter_P_status(index, AllStores, data, MenuList, allKPIs, JCP_TYPE); + } + else if (UploadStatus == 'L') { + setshowProgresssBar(false); + setUploadingText(ST.UploadingData + '...'); + let isAllUploaded_S = await uploadStoreStatus(props, data, 'U', JCP_TYPE); + if (isAllUploaded_S == true) { + await updateStoreStatuslocal('U', data); + notify(ST.Alldatauploadedfor + ' ' + StoreName, 'SHORT'); + if (index == AllStores.length - 1) { + // setProcessing(false); + // setStartUploading(false); + await onUploadComplete(); + console.log('upload U deleteStore 2', props.StoreRouteView) + await deleteStore(data, "U"); + if (props.StoreRouteView == true || props.StoreRouteView == 1) checkLocalData(); + + } + } + else { + if (index == AllStores.length - 1) { + // setProcessing(false); + setStartUploading(false); + notify(ST.Erroroccurwhileuploadingdata, 'LONG'); + if (props.StoreRouteView == true || props.StoreRouteView == 1) checkLocalData(); + } + } + } + else { + console.log("No UploadStatus case found while uploading"); + } + } + + } + }); + } catch (err) { + console.log(err); + } + } + + async function uploadAfter_P_status(index, AllStores, data, MenuList, allKPIs, JCP_TYPE) { + let { StoreName } = data; + if (MenuList.length > 0) { + // Upload data with Images + let allFilesToUpload = await uploadAllData(props, data, allKPIs, props.UserId, JCP_TYPE, true, UpdateUploadCountLocal); + await updateStoreStatuslocal('D', data); + await UploadDataWithImages(index, AllStores, data, MenuList, allKPIs, JCP_TYPE, allFilesToUpload); + } + else if (MenuList.length == 0) { + let allFilesToUpload = await uploadAllData(props, data, allKPIs, props.UserId, JCP_TYPE, true, UpdateUploadCountLocal); + await updateStoreStatuslocal('D', data); + await UploadDataWithImages(index, AllStores, data, MenuList, allKPIs, JCP_TYPE, allFilesToUpload); + + } + else { + // Upload statua u if no data exists + let allfiles = await getAllFolderImages(); + console.log('allFiles => ', allfiles) + if (allfiles.length > 0) { + console.log('upload allFiles data => ') + await UploadDataWithImages(index, AllStores, data, MenuList, allKPIs, JCP_TYPE, allfiles); + } + let isAllUploaded_S = await uploadStoreStatus(props, data, 'U', JCP_TYPE); + if (isAllUploaded_S == true) { + await updateStoreStatuslocal('U', data); + notify(ST.Alldatauploadedfor + ' ' + StoreName, 'SHORT'); + if (index == AllStores.length - 1) { + // setProcessing(false); + await onUploadComplete(); + console.log('upload U deleteStore 3', props.StoreRouteView) + await deleteStore(data, "U"); + if (props.StoreRouteView == true || props.StoreRouteView == 1) checkLocalData(); + } + } + else { + if (index == AllStores.length - 1) { + // setProcessing(false); + setStartUploading(false); + notify(ST.Erroroccurwhileuploadingdata, 'LONG'); + if (props.StoreRouteView == true || props.StoreRouteView == 1) checkLocalData(); + } + } + } + } + + async function UploadDataWithImages(index, AllStores, data, MenuList, allKPIs, JCP_TYPE, allFilesToUpload) { + let { StoreName } = data; + if (allFilesToUpload.length > 0) { + // setLoaderTitle(ST.UploadingImages+'...'); + // keep 1 less to actual count as DownloadDataModal shows it as provided_value+1 + setUploadedCount(0); + setTotalUpCount(allFilesToUpload.length - 1); + setshowProgresssBar(true); + setUploadingText(ST.UploadingImages + '...'); + console.log('set loader title'); + let isAllUploaded = await uploadAllImages(props, data, allFilesToUpload, JCP_TYPE, {}, UpdateUploadCountLocal); + if (isAllUploaded == true) { + await updateStoreStatuslocal('U', data); + notify(ST.Alldataandimagesuploadedfor + ' ' + StoreName, 'SHORT'); + if (index == AllStores.length - 1) { + // setProcessing(false); + await onUploadComplete(); + console.log('upload U deleteStore 4', props.StoreRouteView) + await deleteStore(data, "U"); + if (props.StoreRouteView == true || props.StoreRouteView == 1) checkLocalData(); + } + } else { + notify(ST.Cannotuploadimagesfor + ' ' + StoreName, 'SHORT'); + if (index == AllStores.length - 1) { + // setProcessing(false); + setStartUploading(false); + if (props.StoreRouteView == true || props.StoreRouteView == 1) checkLocalData(); + } + } + } + else { + let isupdatedU = await uploadStoreStatus(props, data, 'U', JCP_TYPE); + console.log('on no files found to upload , isupdated::', isupdatedU); + if (isupdatedU) { + await updateStoreStatuslocal('U', data); + notify(ST.Alldatauploadedfor + ' ' + StoreName, 'SHORT'); + if (index == AllStores.length - 1) { + await onUploadComplete(); + console.log('upload U deleteStore 5', props.StoreRouteView) + await deleteStore(data, "U"); + if (props.StoreRouteView == true || props.StoreRouteView == 1) checkLocalData(); + + } + } + else if (index == AllStores.length - 1) { + // setProcessing(false); + setStartUploading(false); + if (props.StoreRouteView == true || props.StoreRouteView == 1) checkLocalData(); + } + } + } + + async function onUploadComplete() { + // Sync all IR sessionsfor all stores at onces when all data and images fully uploaded + // setLoaderTitle('Syncing IR Sessions Status...'); + UpdateUploadCountLocal(0); // set uploaded count in progress bar to zero as IR session upload is just started + setTotalUpCount(0);// set Total uploaded count to 0 + setshowProgresssBar(false); + setUploadingSubText(''); + setUploadingText('Syncing IR Sessions Status...'); + sessionsToUpload.current = []; + sessionsReceived.current = 0; + sessionsUploadedCount.current = 0; + let sync_result = await SyncIRsessions(props); + let { isUploadStarted, noDataFound, AllDataUploaded, success, sessionList, sessionListWithDetails } = sync_result; + + if (!success) { + notify('Cannot Upload Data! Something went wrong.'); + setStartUploading(false); + } + else { + if (noDataFound) { + notify('No session to upload!'); + setStartUploading(false); + } + else { + if (!isUploadStarted && AllDataUploaded) { + notify('All images synced! No session to upload.'); + setStartUploading(false); + } else if (isUploadStarted) { + sessionsToUpload.current = sessionListWithDetails; + console.log("UploadStarted", sessionsToUpload.current.length); + UpdateUploadCountLocal(0); // set uploaded count in progress bar to zero as IR session upload is just started + setTotalUpCount(sessionsToUpload.current.length); // set Total Upload Count to IR Session Counts + setshowProgresssBar(true); + setUploadingSubText('Uploading IR Sessions'); + setUploadingText('Uploading IR Sessions Data...'); + + //set a timeout for session uploading: if no response get from receiver for particular session + for (let i = 0; i < sessionListWithDetails.length; i++) { + let { TEMP_SESSION_ID } = sessionListWithDetails[i]; + await setTimeout(async () => { + + let timerSessI = sessionsToUpload.current.findIndex(i => i.TEMP_SESSION_ID == TEMP_SESSION_ID); + let timerSessObj = timerSessI >= 0 ? sessionsToUpload.current[timerSessI] : {}; + + if (timerSessObj.IRStatusReceived != null && timerSessObj.IRStatusReceived === true) { + console.log("Session is already uploaded") + } + else { // upload local timout message and move loading to next step after 60 sec if no response received from server + let udata = { "message": "Session Upload Timeout", "sessionId": TEMP_SESSION_ID, "status": "local" } + await onIRImageUpload(udata); + } + }, 60 * 1000); + } + } + } + } + } + + + async function onIRImageUpload(data) { + console.log('onGlobalIRImageUpload on receive in STorelist', data); + let { message, sessionId, status } = data; + let snum = sessionsReceived.current + 1; + let su_num = sessionsUploadedCount.current; + sessionsReceived.current = snum; + let sessionIndex = sessionsToUpload.current.findIndex(i => i.TEMP_SESSION_ID == sessionId); + let sessionObj = sessionIndex >= 0 ? sessionsToUpload.current[sessionIndex] : {}; + let TableName1 = sessionObj['TableName1'] || ''; + let TableName2 = sessionObj['TableName2'] || ''; + let StoreId = sessionObj['StoreId'] || ''; + let StoreName = sessionObj['StoreName'] || ''; + let IRCategoryName = sessionObj["IRCategoryName"] || ''; + let IRTaskName = sessionObj["IRTaskName"] || ''; + let IRPhotoType = sessionObj["IRPhotoType"] || ''; + let IRStoreCode = sessionObj["IRStoreCode"] || ''; + let ScreenName = sessionObj["ScreenName"] || ''; + let IRDetails = { IRCategoryName, IRTaskName, IRPhotoType, IRStoreCode, ScreenName } + console.log('onGlobalIRImageUpload sessionObj:', sessionObj); + // if any status for the given session is recieved then we don't need to run timer and send local timout for that session + // so update its IRStatusReceived to true + sessionObj.IRStatusReceived = true; + sessionsToUpload.current[sessionIndex] = sessionObj; + // check if session is uploaded then upload its logs + if (status != null && status == '200' && sessionId != null && sessionId != '') { + + let UnSessionId = await IRLogin.getDataIRSession(sessionId); + if (UnSessionId != null && UnSessionId != '') { + sessionsUploadedCount.current = ++su_num; + UpdateUploadCountLocal(su_num); + + let isUpdated = await UpdateIRUploadStatus(sessionId, UnSessionId, TableName1, TableName2, StoreId); + let isUploaded = await LogImageUpload(sessionId, UnSessionId, message, status, StoreId, StoreName, TableName1, TableName2, IRDetails); + if (isUploaded) { + console.log('Images Log Uploaded1'); + notify("Images Log uploaded for session:" + sessionId); + } + else { + console.log('cannot Uploaded image'); + notify("cannot upload log for session:" + sessionId); + } + } + else { + notify("Cannot upload images for session:" + sessionId + ". Universal Id not found"); + let isUploaded = await LogImageUpload(sessionId, "", message, status, StoreId, StoreName, TableName1, TableName2, IRDetails); + if (isUploaded) { + console.log('Images Log Uploaded2'); + notify("Images Log uploaded for session:" + sessionId); + } + else { + console.log('cannot Uploaded image'); + notify("cannot upload log for session:" + sessionId); + } + } + + } + else { + notify((message != null && message != "" ? message + ". " : "") + "Cannot upload images for session:" + sessionId); + let isUploaded = await LogImageUpload(sessionId, "", message, status, StoreId, StoreName, TableName1, TableName2, IRDetails); + if (isUploaded) { + console.log('Images Log Uploaded3'); + notify("Images Log uploaded for session:" + sessionId); + } + else { + console.log('cannot Uploaded image'); + notify("cannot upload log for session:" + sessionId); + } + + } + + console.log("check snum and su_num:", snum, su_num, sessionsToUpload.current.length); + // if last broadcast received either uploaded or not, update the processing status to false + if (snum == sessionsToUpload.current.length) { + setProcessing(false); + setStartUploading(false); + console.log('Deregister event when last received'); + IRLogin.deRegisterReceiver(); + } + + // All IR Sessions with Images Uploaded : set DataUploaded Status to U (Fully Upload) + if (su_num == sessionsToUpload.current.length) { + setProcessing(false); + setStartUploading(false); + notify("All IR images uploaded!"); + console.log('set all uploaded true to U'); + } + // Some Of IR Sessions with Images Uploaded but some are yet pending : set DataUploaded Status to P (Partial Upload) + else if (su_num > 0 && su_num != sessionsToUpload.current.length) { + // setProcessing(false); + notify("Uploading IR Sessions!"); + console.log('set all uploaded true to P'); + } + } + + async function UpdateIRUploadStatus(TempSessionId, UnSessionId, TableName1, TableName2, StoreId) { + console.log("UpdateIRUploadStatus"); + // TableName1: IR Upload Table for KPI + // TableName2: IR Images Table for KPI + return new Promise((resolve, reject) => { + if (TableName1 != null && TableName2 != null && TableName1 != '' && TableName2 != '') { + db.transaction(async function (txn) { + + let q = `Update ${TableName1} set UN_SESSION_ID='${UnSessionId}',UPLOAD_STATUS='1',SYNC_STATUS='Synced' where TEMP_SESSION_ID='${TempSessionId}' and STORE_ID='${StoreId}' `;//VISIT_DATE='${d2}' + await txn.executeSql(q, [], async function (txn2, txnres) { + console.log('Updated IR Upload Status'); + + let q2 = `Update ${TableName2} set UN_SESSION_ID='${UnSessionId}' where TEMP_SESSION_ID='${TempSessionId}' and STORE_ID='${StoreId}' `;//VISIT_DATE='${d2}' and + await txn.executeSql(q2, [], async function (txn2, txnres2) { + console.log('Updated IR Upload Status'); + resolve(true); + }, function (txnE, txnerr) { console.log(txnerr); resolve(false); },); + + }, function (txnE, txnerr) { console.log(txnerr); resolve(false); },); + }); + } + else { + resolve(false); + } + }).catch((Err) => { + console.log('Error in UpdateIRUploadStatus:', Err); + return false; + }) + } + + async function LogImageUpload(TempSessionId, UnSessionId, message, status, StoreId, StoreName, TableName1, TableName2, IRDetails = {}) { + console.log("LogImageUpload"); + let { IRCategoryName, IRTaskName, IRPhotoType, IRStoreCode, ScreenName } = IRDetails + const url = props.baseurl + getMethodName(METHODS.UPLOADJSON_METHOD); + const nowTime = moment().format('HH:mm:ss'); + let ImageCount = await getImageCount(TempSessionId, TableName2); + + ////Replaced special charecter and white space + let storeTittle = StoreName.replace(`@!%&`, '').replace(' ', '-'); + console.log("storeTittle:", storeTittle, StoreName); + + let obj = {}; + obj['StoreId'] = StoreId; + obj['Username'] = props.UserId; + obj['VisitDate'] = d2; + obj['InTime'] = nowTime; + obj['TempSessionId'] = TempSessionId; + obj['UnSessionId'] = UnSessionId; + obj['Status'] = status; + obj['Message'] = message; + obj['ImageCount'] = ImageCount; + obj['StoreTitle'] = storeTittle; + obj['StoreCode'] = IRStoreCode; + obj['TaskName'] = IRTaskName; + obj['CategoryName'] = IRCategoryName; + obj['PhotoType'] = IRPhotoType; + obj['KPIType'] = ""; + obj['ScreenName'] = ScreenName; + obj['UploadType'] = "New"; + + + let postData = {}; + postData['MID'] = 0; + postData['Keys'] = 'IR_UPLOAD_LOG_MSG'; + postData['JsonData'] = JSON.stringify(obj); + postData['UserId'] = props.UserId; + + console.log('postData', postData); + + return await UploadData2(url, postData) + .then((res) => { + if (res.UploadJsonResult != null && res.UploadJsonResult == 'Success') { + return true; + } + return false; + }) + .catch((err) => { + console.log(err); + return false; + }); + } + + async function getImageCount(TempSessionId, TableName2) { + console.log('getImageCount'); + return new Promise((resolve, reject) => { + + if (TableName2 != null && TableName2 != '') { + db.transaction(async function (txn) { + + let q = `select DISTINCT TEMP_SESSION_ID,count(IMAGE1) as ImageCount from ${TableName2} where TEMP_SESSION_ID='${TempSessionId}' group by TEMP_SESSION_ID `;//VISIT_DATE='${d2}' and + + await txn.executeSql(q, [], async function (txn2, txnres) { + console.log('ImageCount rows:', txnres.rows.length); + if (txnres.rows.length > 0) { + let data = txnres.rows.item(0); + console.log('data:', data) + console.log('Image Count for TempSessionId:', data.ImageCount); + resolve(data.ImageCount); + } + else { + resolve(0); + } + + }, function (txnE, txnerr) { console.log(txnerr); resolve(0); },); + }); + } + else { + resolve(false); + } + }).catch((Err) => { + console.log('Error in getImageCount:', Err); + return 0; + }) + + + + } + + + + + async function getPJPStoresData(tbname, Stores = [], d2) { + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + + let join = `INNER JOIN ${AppTables.COVERAGE_DATA} t2 on t2.STORE_ID=t1.StoreId and t2.JCP_TYPE='${tbname}' `; + let qt = `Select t1.*,t2.REASON_ID,t2.IMAGE,t2.CHECKOUT_IMAGE,t2.JCP_TYPE from ${tbname} t1 ${join} where t1.VisitDate='${d2}' and t1.UploadStatus in ('C','P','D','L')` + + console.log("queryyyyy", qt); + await txn.executeSql(qt, [], async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + console.log("queryyyyy", data); + Stores.push(data); + } + resolve(Stores); + } + else { + resolve(Stores); + } + }, function (txnE, txnerr) { console.log(txnerr); resolve(Stores) },); + + }); + }).then((val) => { + return val; + }) + .catch((err) => { + console.log(err); + return Stores; + }) + } + + + async function storeVisited() { + let checkPJPData = await executeSelQuery(`select * from ${AppTables.COVERAGE_DATA} Where VISIT_DATE='${currentStore.VisitDate}' and STORE_ID = ${currentStore.StoreId}`); + setShowStoreVisitModal(false); + if (currentStore.GeoTag == 'N') { + setShowGeoTagModal(true); + } else if (currentStore.UploadStatus == 'N' || (currentStore.UploadStatus == 'I' && checkPJPData.IsAvlbl == false) || currentStore.UploadStatus == '') { + calLocatDistance(); + } + } + + async function storeNotVisited() { + setShowStoreVisitModal(false); + props.navigation.navigate('StoreNonWorkingReasons', { storeData: currentStore, 'isAdhoc': isAdhocScreen, 'isBeat': isBeatPlan, 'isNonMerchans': isNonMerchan, isNonProgs: isNonProg, isStoreSearch: isStoreSearch }); + } + + async function onVisitCancel() { + setLoaderTitle(ST.DeletingCheckInData + '...') + setShowCancelCIModal(false); + setProcessing(true); + let { MID, StoreId } = cancelCheckOutStore; + let postdata = { 'Mid': MID, "UserName": props.UserId, } + + const url = props.baseurl + getMethodName(METHODS.DELETECOVERAGE_METHOD); + console.log(url, postdata); + await UploadData2(url, postdata) + .then(async (res) => { + console.log('delete coverage res:', res); + if (res == '1') { + console.log('upload U deleteStore 1') + let isdeleted = await deleteStore(cancelCheckOutStore, "Cancel"); + if (isdeleted == true) { + let data = { "StoreId": StoreId, UploadStatus: "N", tbname: (isBeatPlan == true ? 'JourneyPlan_RouteWise' : (isAdhocScreen == true ? 'Adhoc_JourneyPlan' : (isNonMerchan == true ? 'NonMerchandising_JourneyPlan' : isNonProg == true ? 'NonProgram_JourneyPlan' : isStoreSearch == true ? 'StoreSearch_JourneyPlan' : 'Mapping_JourneyPlan'))) }; + let isUpdated = await UpdateStoreStatus(props, data); + if (isUpdated == true) { + await updateStoreStatuslocal('N', cancelCheckOutStore, true); + setProcessing(false); + notify(ST.CheckInRemoved); + } + else { + setProcessing(false); + notify(ST.CheckInremovedsuccessfullybutcannotupdatestatus); + } + } + else { + setProcessing(false); + notify(ST.CheckInremovedsuccessfullybutcannotupdatestatus); + } + } + else { + setProcessing(false); + notify(ST.CannotRemoveCheckIn); + } + + }).catch(err => { + console.log('onPage Team error', err); + setProcessing(false); + notify(ST.CannotRemoveCheckIn); + }); + + } + + async function deleteStore(storeData1, Status = null) { + let { StoreId } = storeData1; + let allQueries = [ + `Delete from ${AppTables.COVERAGE_DATA} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.GEOTAG} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.STORE_PROFILE} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.STORE_CHECKLIST} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.STORE_PROFILE_KYC} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.HEADER_BACK_OF_STORE} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.CHILD_BACK_OF_STORE} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.SALES} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.INSERT_OPENINGHEADER_DATA} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.STOCK_DATA} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.SHARE_OF_SHELF_IMAGE} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.SHARE_OF_SHELF_FACING_DATA} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.INSERT_SAMPLED_DATA} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.CONTACT_CONVERSION} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.INSERT_ERROR_TRACKING} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.GROOMING_IMAGE_DATA} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.ADDITIONAL_VISIBILITY} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.ADDITIONAL_VISIBILITY_STOCK} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.COMPETITION_VISIBILITY} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.COMPETITION_PROMOTION} where STORE_ID='${StoreId}' `, + // `Delete from ${AppTables.CHECKIN_DATA} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.PROMOTION_HEADER_DATA} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.PROMOTION_DATA} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.PAID_VISIBILITY_HEADER_DATA} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.PAID_VISIBILITY_CHILD_DATA} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.PAID_VIS_CHECKLIST} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.SURVEY} where STORE_ID='${StoreId}' `, + + + `Delete from ${AppTables.SAMPLING_INVENTORY} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.SAMPLING_CUST_TRACK} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.SAMPLING_STOCK_DATA} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.SAMPLING_SALE_DATA} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.SAMPLING_LIST} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.PROGRAM_HDR_DATA} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.PROGRAM_CHILD_DATA} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.PROGRAM_IMAGES} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.PROGRAM_STOCK_DATA} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.PROMO_HDR_DATA} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.PROMO_CHILD_DATA} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.PROMO_IMAGES} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.PROMO_STOCK_DATA} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.ST_HDR_DATA} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.ST_CHILD_DATA} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.ST_IMAGES} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.ST_STOCK_DATA} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.WINDOW_HDR_DATA} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.WINDOW_CHILD_DATA} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.WINDOW_IMAGES} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.WINDOW_STOCK_DATA} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.WINDOW_IR_IMAGES} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.WINDOW_IRUPLOAD} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.STORE_IMAGES} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.POSM_HDR_DATA} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.POSM_CHILD_DATA} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.SOS_HDR_DATA} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.SOS_CHILD_DATA} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.SOS_CHILD_QUES_DATA} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.SOS_IMAGES} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.SOS_IR_IMAGES} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.SOS_IRUPLOAD} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.CATEXE_HDR_DATA} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.CATEXE_CHILD_DATA} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.CATEXE_IMAGES} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.CATEXE_STOCK_DATA} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.WAREHOUSE_CAMPAIGN_HDR_DATA} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.WAREHOUSE_CAMPAIGN_CHILD_DATA} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.WAREHOUSE_CAMPAIGN_IMAGES} where STORE_ID='${StoreId}' `, + + `Delete from ${AppTables.WAREHOUSE_HDR_DATA} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.WAREHOUSE_CHILD_DATA} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.WAREHOUSE_IMAGES} where STORE_ID='${StoreId}' `, + + + // `Delete from ${AppTables.STORE_PROFILE} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.ORDERSTATUS} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.VISICO_HDR_DATA} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.VISICO_CHILD_DATA} where STORE_ID='${StoreId}' `, + // `Delete from ${AppTables.CONTRACT_FORM} where STORE_ID='${StoreId}' `, + // `Delete from ${AppTables.CONTRACT_FORM_DATA} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.POSSALE_DATA} where STORE_ID='${StoreId}' `, + // `Delete from ${AppTables.VISICO_CHILD_DATA} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.CASHTILL_SURVEY} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.SIMPLE_PROMOTION_DATA} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.SIMPLE_PROMOHDR_DATA} where STORE_ID='${StoreId}' `, + + `Delete from ${AppTables.STOCK2HDR_DATA} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.STOCK2_DATA} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.STOCK2_MFD_DATA} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.PAIDVIS_HDR_DATA} where STORE_ID='${StoreId}' `, + + `Delete from ${AppTables.STOCKPOMO_HDR_DATA} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.STOCKPROMO_DATA} where STORE_ID='${StoreId}' `, + + `Delete from ${AppTables.QRCODE_SCANNER} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.QRCODE_SALE} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.STORE_KYC_INFO} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.RETURN_STOCK} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.ORDER_SIMPLIFY} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.ORDER} where STORE_ID='${StoreId}' `, + + ] + + if (Status != "U") { + // if(Status=="U"|| Status=="Cancel"){ + allQueries.push(`Delete from ${AppTables.CHECKIN_DATA} where STORE_ID='${StoreId}' `) + } + return await Promise.all( + allQueries.map(async (q, index) => { + let isDeleted = await executeQuery(q); + return isDeleted == true; + }) + ) + .then((val) => { + // if(val.indexOf(false)<0){} + return true; + }).catch((err) => { + console.log(err); + return false; + }) + } + + async function executeQuery(q, type = '1') { + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + await txn.executeSql(q, [], async function (txn2, txnres2) { + if (type == '1') { + resolve(true); + } + else { + + if (txnres2.rows.length > 0) { + let arr = [];//txnres2.rows.raw(); + // resolve(arr); + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + arr.push(data); + if (i == (txnres2.rows.length - 1)) { + resolve(arr); + } + } + } + else { + resolve([]); + } + } + }, function (Etxn, txnerr) { console.log(txnerr); type == '1' ? resolve(false) : resolve([]); }); + }); + }).then((val) => { + return val; + }).catch((err) => { + console.log(err); + let d = type == '1' ? false : []; + return d; + }) + } + + function FilterStores(searchedQry) { + searchedQry = searchedQry.toLowerCase(); + console.log('searchedQry', searchedQry); + let { storeList } = state; + let arr = [] + if (searchedQry != null && searchedQry != '') { + globalStorelist.map((item, index) => { + let { StoreName, StoreId, StoreCode } = item; + StoreId = StoreId + ''; + console.log("itemessss", StoreName + "---------------" + StoreCode) + if (StoreName?.toLowerCase().includes(searchedQry) || StoreCode?.toLowerCase().includes(searchedQry) || StoreId?.includes(searchedQry)) { + arr.push(item); + } + }); + } + else { + arr = globalStorelist; + } + setState({ storeList: arr }); + setrerenderdata(!rerenderdata) + } + + async function fetchStoreSearchData(searchedItem) { + let loginInfo = await get_item('loginInfo'); + const loginDetails = JSON.parse(loginInfo); + if (searchedItem != null && searchedItem != '' && searchedItem.length > 4) { + let postdata = { + Downloadtype: "StoreSearch_JourneyPlan", + Username: loginDetails.UserId, + Param1: searchedItem, + Param2: Platform.OS == "ios" ? "iOS" : "Android", + }; + var url = props.baseurl + getMethodName(METHODS.DOWNLOADJSON_METHOD); + console.log(url, postdata); + return await getDownloadJson1(url, postdata) + .then(async (res) => { + if (res != null && typeof res == 'object' && res.StoreSearch_JourneyPlan != null && res.StoreSearch_JourneyPlan != '') { + let searchResults = res.StoreSearch_JourneyPlan || []; + // Get existing store list + let currentStoreList = state.storeList || []; + // Merge new search results with existing data + let combinedStoreList = [...currentStoreList, ...searchResults]; + setState({ storeList: combinedStoreList }); + setrerenderdata(!rerenderdata); + } else if (res != null && typeof (res) == 'object' && (res[0] != null && res[0].Result != null && res[0].Result == "No Data")) { + console.log('No data found'); + notify("There is no store exists of this name"); + } + }).catch((err) => { + notify("Please retry! There is some error while fetching data"); + console.log('onDownload report error', err); + }); + } else { + notify("Store name should not be less than 5 characters"); + } + } + + function _render_StoreVisitModal() { + return ( + + + { storeVisited() }}> + {ST.Yes} + + { storeNotVisited() }}> + {ST.No} + + + + ) + } + + function _render_GeoTagModal() { + return ( + + + { setShowGeoTagModal(false) }}> + {ST.Cancel} + + { setShowGeoTagModal(false); props.navigation.navigate('GeoTag', { storeData: currentStore, 'isAdhoc': isAdhocScreen, 'isBeat': isBeatPlan, 'isNonMerchans': isNonMerchan, 'isNonProgs': isNonProg, 'isStoreSearch': isStoreSearch }); }}> + {ST.OK} + + + + ) + } + + function _render_CancelCheckinModal() { + let storename = cancelCheckOutStore.StoreName || ''; + return ( + + + + {ST.Yourallcheckindatawillbelost} + + + + + { setShowCancelCIModal(false); }}> + {ST.Cancel} + + { onVisitCancel() }}> + {ST.OK} + + + + ) + } + + //upload GeoFence data + async function uploadGeoFenceData(geoFenceData) { + let d1 = new Date(); + let d2 = moment(d1).format('MM/DD/YYYY'); + setShowAlert(false); + setProcessing(true); + setLoaderTitle('Uploading Data...'); + + + let postData = { + "MID": 0, + "Keys": "GeoFenceDataStoreList", + "JsonData": JSON.stringify(geoFenceData), + "UserId": props.UserId, + }; + + // console.log("GeoFenceDataStoreList:", postData) + console.log("GeoFenceDataStoreList--",JSON.stringify(postData, null, 2)); + + + const url = props.baseurl + getMethodName(METHODS.UPLOADJSON_METHOD); + await UploadData2(url, postData) + .then(async (res) => { + console.log('res: 123', res); + if (res?.UploadJsonResult == "Success") { + notify('GeoFenceData Uploaded Succesfully', 'SHORT'); + setShowAlert(false); + setProcessing(false); + } + else { + setShowAlert(false) + setProcessing(false); + } + }) + .catch((err) => { + console.log(err); setProcessing(false); + }); + + } + + async function onDistanceM_OK() { + // console.log("Hello shaikh", geoFenceData); + if (props.GeoFenceEnable) { + if (storeDistanceinM > props.GeoFenceRadius) { + uploadGeoFenceData(geoFenceData); + setShowDistanceModal(false); + notify(ST.Youcannotcheckin + ' ' + ST.Youarenotwithinthealloweddistancefromthestore + ' ' + props.GeoFenceRadius + ' m', 'LONG') + } + else { + setShowDistanceModal(false); + props.navigation.navigate('StoreCheckin', { storeData: currentStore, 'isAdhoc': isAdhocScreen, 'isBeat': isBeatPlan, 'isNonMerchans': isNonMerchan, 'isNonProgs': isNonProg, 'isStoreSearch': isStoreSearch, '_fromStoreWise': true }); + } + } else { + setShowDistanceModal(false); + props.navigation.navigate('StoreCheckin', { storeData: currentStore, 'isAdhoc': isAdhocScreen, 'isBeat': isBeatPlan, 'isNonMerchans': isNonMerchan, 'isNonProgs': isNonProg, 'isStoreSearch': isStoreSearch, '_fromStoreWise': true }); + } + } + + + function closeImageModal() { + setCheckOutImageModal(false); + } + + function cancelImage() { + if (CheckOutImagePath != '') { + RNFS.unlink(CheckOutImagePath); + } + setCheckOutImage(''); + setCheckOutImagePath(''); + closeImageModal(); + } + + async function openCamera() { + BGUpdateShowCamera(true); + } + + async function getImage(imgdata) { + let storeData = checkOutStore + if (typeof imgdata == 'object' && imgdata.errorCode == 'camera_unavailable') { + notify(ST.Cameraunavailable); + } + else if (typeof imgdata == 'object' && imgdata.uri != null) { + const img = imgdata; + const imgurl = img.uri, imgWidth = img.width, imgHeight = img.ExtendedHeight; + let isImgFromGallery = img.fromGallery != null ? img.fromGallery : false; + let picture_clickedd = isImgFromGallery == true ? img.datetime : new Date(); + + let picture_clicked_time = moment(picture_clickedd).format('MM-DD-YYYY HH:mm:ss') + let picture_clicked_time_for_pic_name = moment(picture_clickedd).format('MMDDYYYY_HHmmss') + + console.log("time", picture_clicked_time); + console.log("time1", picture_clicked_time_for_pic_name); + let calculate_tym_date_for_filename = picture_clicked_time_for_pic_name; + let calculate_tym_date_over_img = picture_clicked_time; + + let filename = storeData.StoreId + '_CheckoutImg-' + calculate_tym_date_for_filename + '.jpg'; + + const mark_text1 = calculate_tym_date_over_img; + const mark_text2 = 'Store Name:' + storeData.StoreName + ' | Store Id:' + storeData.StoreId + ' | User Id:' + storeData.EmpId + ' | Image Type: Check Out' + ' | Date:' + calculate_tym_date_over_img; + + setCheckOutImage(filename); + let imagePath = `${CoverageImagePath}${filename}`; + RNFS.copyFile(imgurl, imagePath) + .then(async (resn) => { + // render data with clicked image + let uri = 'file://' + imagePath; + console.log('image marker', uri); + setCheckOutImagePath(uri); + // add metdata then resize image and restored back to the imagePath + let restore_data = { "destFilePath": imagePath, "imgurl": imgurl, imgWidth, imgHeight, mark_text1, mark_text2 } + let is_restored = await restore_ImageWithMetaData(restore_data, imgdata); + console.log("image restored:", is_restored); + }) + .catch(err => { + console.log(ST.Errorimagefilewritefailed + '!!!'); + console.log(err.message, err.code); + }); + } + } + + + function _OpenCaptureImage_Modal() { + const isImageCap = (CheckOutImagePath == '' || CheckOutImagePath == null) ? false : true; + return ( + + { + !isImageCap && + + { openCamera() }}> + + + { closeImageModal() }}> + {ST.Cancel} + + + } + { + isImageCap && + + + + + { openCamera() }}> + + + {showImageSaveOp && + + { cancelImage() }}> + {ST.Cancel} + + {/* call checkout functionality with type : 2 , which means we have captured the image and again checking the location */} + { closeImageModal(); getLocOnCheckout('2'); }}> + {ST.Save} + + } + {!showImageSaveOp && + { closeImageModal() }}> + {ST.Close} + + } + + + + } + + ) + } + + function _render_DistanceModal() { + return ( + + + {ST.Youneedtobeinthestore} + {ST.toCheckInCheckOut} + {`${ST.Alloweddistancefromstore}: ${(props.GeoFenceEnable == true ? props.GeoFenceRadius : '500')} m`} + {`${ST.Yourdistancefromstore}: ${storeDistance}`} + { onDistanceM_OK() }}> + Ok + + + + ) + + } + + + return ( + + {processing && } + {(startUploading) && } + + + + {_render_StoreVisitModal()} + {_render_GeoTagModal()} + {_render_DistanceModal()} + {_render_CancelCheckinModal()} + {_OpenCaptureImage_Modal()} + {ConfirmSaveAlert(props, showAlert, onSaveCancel, getLocOnCheckout, ST.Doyoureallywanttocheckout)} + { BGUpdateShowCamera(false); getImage(imgData) }} showCamera={showCamera} onHideCamera={() => { BGUpdateShowCamera(false); }} /> + + + + {!props.isDataDownloaded && } + + + {!isStoreSearch && + + { setSearchedItem(val); FilterStores(val) }} + /> + { FilterStores(searchedItem) }}> + + + + } + {isStoreSearch && + + { setSearchedItem(val) }} + /> + { fetchStoreSearchData(searchedItem) }}> + + + + } + + {getValidStores(state?.storeList) && getValidStores(state?.storeList).length > 0 && !isAdhocScreen && !isBeatPlan && !isNonMerchan && !isNonProg && !isStoreSearch && (props.StoreMapView || props.StoreMapView == 1) ? + { + let filtered_store = getValidStores(state?.storeList); + if (filtered_store?.length > 0) { + props.navigation.navigate("StoreListMappView", { + storeData: filtered_store, + }) + } else { + notify("Valid store list not found for MapView.") + } + } + } + > + + {/* Replace CameraImg with your Map SVG */} + + + Store List Map View + + + + : <>} + + {nodataFound && + + {ST.NoDataAvailable} + + } + {(props.isDataDownloaded == true && !nodataFound) && + 0 && { paddingBottom: 270 })]}> + { + return ( + + ); + }} + /> + + } + + + + + + ); +} + + + + + +export default connect(mapStateToProps, mapDispatchToProps)(StoreList); + +const styles = StyleSheet.create({ + container: { + alignItems: "center", + justifyContent: "center", + marginTop: 10, + }, + button: { + backgroundColor: "#4a90e2", // nice blue + paddingVertical: 14, + paddingHorizontal: 27, + borderRadius: 30, // pill-shaped + elevation: 2, // shadow (Android) + shadowColor: "#000", // shadow (iOS) + shadowOpacity: 0.2, + shadowOffset: { width: 0, height: 2 }, + shadowRadius: 4, + }, + buttonText: { + color: "#fff", + fontSize: 16, + fontWeight: "500", + textAlign: "center", + }, +}); diff --git a/PerformicsSrc/src/screens/StoreListMappView.js b/PerformicsSrc/src/screens/StoreListMappView.js new file mode 100644 index 0000000..8b18753 --- /dev/null +++ b/PerformicsSrc/src/screens/StoreListMappView.js @@ -0,0 +1,1657 @@ +import React, { useState, useEffect, memo, useRef } from 'react'; +import Container from '../components/container'; +import { useRoute } from '@react-navigation/native'; +import { customStyles, GetPageTheme } from "../styles/Global"; +import { Image, View, Text, TouchableOpacity, Platform, DeviceEventEmitter, StyleSheet, ActivityIndicator } from 'react-native'; +import { connect } from 'react-redux'; +import { mapStateToProps, mapDispatchToProps } from '../reducers/contextProvider'; +import { notify } from '../components/notify'; +import moment from 'moment'; +import { checkRange, UploadData2, UpdateStoreStatus, getKPIS, restore_ImageWithMetaData } from '../controller/functions'; +import { get_item } from '../components/localStorage'; +import { db, AppVersion, CoverageImagePath } from '../constants/constants'; +import CustomHeader from '../components/customHeader'; +import { Feather, MaterialCommunityIcons } from '../components/icons'; +import CustomLoader from '../components/CustomLoader'; +import LinearGradient from 'react-native-linear-gradient'; +import CustomModal from '../components/CustomModal'; +import { AppTables } from '../constants/tableConstants'; +import { _checkLocationPermission } from '../components/geolocation'; +import Geolocation from 'react-native-geolocation-service'; +import { getAvailblQuery, getIfAvlbl, Q_MenuList } from '../constants/ConstantQueries'; +import { ConfirmSaveAlert } from '../components/alert'; +import { getMethodName, METHODS } from '../constants/methodNames'; +import { SyncIRsessions, uploadAllData, uploadAllImages, uploadStoreStatus } from '../constants/uploadData'; +import CameraImg2 from '../assets/performics/camera_icon.svg'; +import CustomCamera from '../components/Camera'; +import DownloadDataModal from '../components/downloadDataModal'; +import IRLogin from '../components/IRLogin'; +import { AppName, PerformicsIRAppName } from '../../../AppSpecificContant'; +import MapView, { Marker } from "react-native-maps"; +import MoreInfoCheckbox from "../components/MoreInfoCheckbox"; // path to component above + +function StoreListMappView(props) { + const route = useRoute(); + const ST = props.StaticText || {}; + // get all theme styles acc to current theme set + const PageTheme = GetPageTheme(props.DarkMode, route.name); + const customStyle = customStyles(props.DarkMode, route.name); + const [loaderTitle, setLoaderTitle] = useState(); + const [processing, setProcessing] = useState(true); + const [isAdhocScreen, setIsAdhocScreen] = useState(false); + const [isBeatPlan, setIsBeatPlan] = useState(false); + const [isNonMerchan, setIsNonMerchan] = useState(false); + const [isNonProg, setIsNonProg] = useState(false); + const [isStoreSearch, setIsStoreSearch] = useState(false); + const [nodataFound, setNodataFound] = useState(false); + const [showStoreVisitModal, setShowStoreVisitModal] = useState(false); + const [showGeoTagModal, setShowGeoTagModal] = useState(false); + const [showDistanceModal, setShowDistanceModal] = useState(false); + const [currentStore, setCurrentStore] = useState({}); + const [storeDistance, setStoreDistance] = useState('0 M'); + const [storeDistanceinM, setStoreDistanceinM] = useState(0); + const [showAlert, setShowAlert] = useState(false); + const [checkOutStore, setCheckOutStore] = useState({}); + const [rerenderdata, setrerenderdata] = useState(false); + let [state, setState] = useState({ storeList: [] }); + let [stateForSearch, setStateforSearch] = useState({ storeList: [] }); + const [globalStorelist, setGlobalStorelist] = useState([]); + const [cancelCheckOutStore, setCancelCheckOutStore] = useState({}); + const [showCancelCIModal, setShowCancelCIModal] = useState(false); + const [CheckOutImage, setCheckOutImage] = useState(''); + const [CheckOutImagePath, setCheckOutImagePath] = useState(''); + const [CheckOutImageModal, setCheckOutImageModal] = useState(false); + const [showImageSaveOp, setShowImageSaveOp] = useState(true); + const [showCamera, setShowCamera] = useState(false); + const showCameraRef = useRef(false); + const [GeoFenceEnable_Checkout, setGeoFenceEnable_Checkout] = useState(false); + const [GeoFenceRadius_Checkout, setGeoFenceRadius_Checkout] = useState(''); + const [uploadedCount, setUploadedCount] = useState(0); + const [TotalUpCount, setTotalUpCount] = useState(0); + const [startUploading, setStartUploading] = useState(false); + const [UploadingSubText, setUploadingSubText] = useState(""); + const [UploadingText, setUploadingText] = useState("Uploading Data..."); + const [showProgresssBar, setshowProgresssBar] = useState(false); + const sessionsToUpload = useRef([]); + const sessionsUploadedCount = useRef(0); + const sessionsReceived = useRef(0); + const [_storeList, SetStoreList] = useState([]); + const [location, setLocation] = useState(null); + const [address, setAddress] = useState(""); + const [sortedStores, setSortedStores] = useState([]); + const mapRef = useRef(null); + const [mapReady, setMapReady] = useState(false); + const [checked, setChecked] = useState(false); + const d1 = new Date(); + const d2 = moment(d1).format('MM/DD/YYYY'); + + const getAddressFromLatLong = async (lat, lon) => { + try { + setProcessing(true) + const response = await fetch( + `https://nominatim.openstreetmap.org/reverse?format=json&lat=${lat}&lon=${lon}&zoom=10&addressdetails=1`, + { + headers: { + "User-Agent": "MyReactNativeApp/1.0", + Accept: "application/json", + }, + } + ); + + const text = await response.text(); // get raw response + // check if it is valid JSON + let data; + try { + data = JSON.parse(text); + } catch (e) { + console.log("Invalid JSON response:", text); + return; + } + console.log("data", data); + const loc = + `${data?.address?.city_district || ""}, ${data?.address?.city || ""}, ${data?.address?.country || ""}` || + "Unknown"; + + setProcessing(false); + setAddress(loc); + + console.log("Locality:", loc); + } catch (error) { + console.error("Nominatim error:", error); + } + }; + useEffect(() => { + // Fetch user location + Geolocation.getCurrentPosition( + (position) => { + const myLat = position.coords.latitude; + const myLng = position.coords.longitude; + setLocation({ latitude: myLat, longitude: myLng }); + // Example: get store list from route + const _storeList = route?.params?.storeData || []; + console.log("_storeList", _storeList) + // Sort nearest first + _storeList.sort((a, b) => a.DistanceInMeters - b.DistanceInMeters); + console.log("withDistance", _storeList) + setSortedStores(_storeList); + // Zoom map to fit all points + if (mapRef.current && _storeList.length > 0) { + const coords = [ + ..._storeList.map((s) => ({ + latitude: parseFloat(s.Latitude), + longitude: parseFloat(s.Longitude), + })), + { latitude: myLat, longitude: myLng }, + ]; + mapRef.current.fitToCoordinates(coords, { + edgePadding: { top: 50, right: 50, bottom: 50, left: 50 }, + animated: true, + }); + } + }, + (error) => { + console.log("Location error:", error); + }, + { enableHighAccuracy: true, timeout: 30000, maximumAge: 10000, distanceFilter: 0, fastestInterval: 2000, } + ); + }, []); + + useEffect(() => { + if (location) { + getAddressFromLatLong(location.latitude, location.longitude); + } + }, [location]); + + useEffect(() => { + setLoaderTitle(ST.Loading +"/Refreshing" + '...'); + let CO_GeoFenceEnable = props.GFEnable_checkout != null ? props.GFEnable_checkout : false; + let CO_GeoFenceRadius = props.GFRadius_checkout != null ? props.GFRadius_checkout : ''; + setGeoFenceEnable_Checkout(CO_GeoFenceEnable); + setGeoFenceRadius_Checkout(CO_GeoFenceRadius); + const unsubscribe = props.navigation.addListener('beforeRemove', onBeforeRemove); + const unsubscribeFocus = props.navigation.addListener('focus', () => { + }); + const removeIRListener = DeviceEventEmitter.addListener('onGlobalIRImageUpload', (data) => { onIRImageUpload(data) }); + return function cleanup() { + unsubscribeFocus() + if (AppName == PerformicsIRAppName && props.IR_CameraEnableOnApp == true) { + IRLogin.deRegisterReceiver(); + } + removeIRListener.remove(); + return unsubscribe; + }; + }, []); + + useEffect(() => { + if (mapRef.current && _storeList?.length > 0 && location) { + const coords = [ + ..._storeList.map((loc) => ({ + latitude: parseFloat(loc.Latitude), + longitude: parseFloat(loc.Longitude), + })), + { + latitude: location.latitude, + longitude: location.longitude, + }, + ]; + + mapRef.current.fitToCoordinates(coords, { + edgePadding: { top: 50, right: 50, bottom: 50, left: 50 }, + animated: true, + }); + } + }, [_storeList, location]); + + function onBeforeRemove(e) { + if (showCameraRef.current == true) { + e.preventDefault(); + BGUpdateShowCamera(false); + } + else { + return; + } + } + + function BGUpdateShowCamera(val) { + showCameraRef.current = val; + setShowCamera(val); + } + + async function getMenuList(storeData1) { + let { StoreId, ChannelId, RegionId, StoreTypeId } = storeData1; + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + let q = Q_MenuList(storeData1); + await txn.executeSql(q, [], async function (txn2, txnres) { + if (txnres.rows.length > 0) { + let arr = [];//txnres.rows.raw(); + // resolve(arr); + for (var i = 0; i < txnres.rows.length; i++) { + let data = txnres.rows.item(i); + arr.push(data); + if (i == (txnres.rows.length - 1)) { + resolve(arr); + } + } + } + else { + resolve([]) + } + }, function (txnE, txnerr) { console.log(txnerr); resolve([]); },); + }); + }).then((val) => { + return val; + }).catch((err) => { + console.log('') + return [] + }) + } + + function onSaveCancel() { + setShowAlert(false); + } + + async function getLocOnCheckout(type = "1") { + if (props.isInternetAvailable == false) { + return; + } + setShowAlert(false); + setLoaderTitle(ST.Gettinglocation + '...'); + setProcessing(true); + + Geolocation.getCurrentPosition( + async (position) => { + let { latitude, longitude } = position.coords; + let loc = { lat: latitude, lng: longitude }; + var distance = checkRange(loc.lat, loc.lng, checkOutStore.Latitude, checkOutStore.Longitude); + console.log('COut distance:', distance); + + // let dinKM=(distance / 1000); + // let distanceinM=(distance=='' || distance==null || isNaN(distance))?' 0 m':( dinKM > 1 ? dinKM.toFixed(1) + ' Km' : distance + ' m'); + if (GeoFenceEnable_Checkout == true) { + if (GeoFenceRadius_Checkout != '' && distance > GeoFenceRadius_Checkout) { + let locData = { "UserId": props.UserId, 'MID': checkOutStore.MID, "StoreId": checkOutStore.StoreId, "StoreLatitude": checkOutStore.Latitude, 'StoreLongitude': checkOutStore.Longitude, 'currentLatitude': latitude, 'currentLongitude': longitude } + await sendUserLocation(locData); + setProcessing(false); + notify(ST.Youcannotcheckout + ' ' + ST.Youarenotwithinthealloweddistancefromthestore + ' ' + GeoFenceRadius_Checkout + ' m', 'LONG') + } + else { + setProcessing(false); + checkOutAfterLoc(loc, type); + } + } + else { + setProcessing(false); + checkOutAfterLoc(loc, type); + } + + }, + (error) => { + notify(ST.Cannotgetuserposition); + setProcessing(false); + }, + { enableHighAccuracy: true, distanceFilter: 0, interval: 1000, fastestInterval: 2000 } + ); + } + + async function checkOutAfterLoc(loc, type = '1') { + let CheckOut_PhotoReq = props.CheckOut_PhotoReq != null ? props.CheckOut_PhotoReq : false; + // type='2' means checkout image has been captured already and now we are again checking the user location + if (type != '2' && CheckOut_PhotoReq) { + setShowAlert(false); + setCheckOutImageModal(true); + } + else { + if (props.isInternetAvailable == true) { + UpdateCheckOutStatus(loc); + } + } + } + + async function sendUserLocation(data = {}) { + console.log("sendUserLocation"); + const url = props.baseurl + getMethodName(METHODS.UPLOADJSON_METHOD); + + let postData = { + 'MID': checkOutStore.MID, + 'Keys': "UserCurrentLocation", + 'JsonData': JSON.stringify(data), + 'UserId': props.UserId, + } + + console.log(url, postData); + return await UploadData2(url, postData) + .then(async (res) => { + if (res.UploadJsonResult != null && res.UploadJsonResult == 'Success') { + // console.log(KPIdata+' uploaded'); + return true; + } + return false; + }) + .catch(async (err) => { + return false; + }); + } + + //======================================================== + function getEmpStoreCheckIn(tbname, VisitDate, stored) { + return new Promise((resolve, reject) => { + var query = "SELECT * FROM EMPSTORE_CHECKIN WHERE JCP_TYPE = ? AND VISIT_DATE = ? AND STORE_ID = ?"; + + db.transaction((tx) => { + tx.executeSql(query, [tbname, VisitDate, stored], (tx, results) => { + if (results.rows.length > 0) { + resolve(results.rows._array || results.rows); // Resolving with fetched data + } else { + resolve([]); // Resolving with empty array if no records found + } + }, (error) => { + console.log("Error executing query:", error); + reject(error); // Rejecting in case of an error + }); + }); + }); + } + + async function UpdateCheckOutStatus(loc) { + try { + setTotalUpCount(0); + setshowProgresssBar(false); + setUploadingText(ST.UpdatingCheckoutStatus + '...'); + setStartUploading(true); + + let { StoreId, MID } = checkOutStore; + let CheckOut_PhotoReq = props.CheckOut_PhotoReq != null ? props.CheckOut_PhotoReq : false; + let d = new Date(); + let d2 = moment(d).format('MM/DD/YYYY'); + let d3 = moment(d).format('MM/DD/YYYY HH:mm:ss'); + + let loginInfo = await get_item('loginInfo'); + const loginDetails = JSON.parse(loginInfo); + + let data1 = { + UserId: loginDetails.UserId, + StoreId: StoreId, + Latitude: loc.lat, + Longitude: loc.lng, + Checkout_Date: d2, + CheckOutImage: CheckOutImage, + }; + + const url = props.baseurl + getMethodName(METHODS.CHECKOUTDETAIL_METHOD); + const url1 = (props.imageUploadUrl || URL_IMAGE) + getMethodName(METHODS.UPLOADIMAGES_METHOD); + + console.log(url, data1); + + // Await the result of the upload + let res = await UploadData2(url, data1); + console.log('StoreCheckOutSup1:', res, 'MID:', MID); + + if (!res.error) { + if (res == 1) { + setCheckOutImage(''); + setCheckOutImagePath(''); + + let data = { checkout_image: '' }; + console.log("jeevanp", data); + const isCheckOutUpdated = await UpdateStoreCheckOut(data); + if (props.isInternetAvailable == false) { + return + } + + if (isCheckOutUpdated == true) { + let datan = { + StoreId: StoreId, + UploadStatus: 'C', + tbname: isBeatPlan + ? 'JourneyPlan_RouteWise' + : isAdhocScreen + ? 'Adhoc_JourneyPlan' + : isNonMerchan + ? 'NonMerchandising_JourneyPlan' + : isNonProg + ? 'NonProgram_JourneyPlan' + : isStoreSearch + ? 'StoreSearch_JourneyPlan' + : 'Mapping_JourneyPlan', + }; + + var InTime = moment(d).format('HH:mm:ss'); + InTime = await getEmpStoreCheckIn(datan.tbname, d2, datan.StoreId) + .then((data) => { + console.log("Fetched Data:", data[0], data[0].CHECKIN_TIME); + console.log(moment(data[0].CHECKIN_TIME).format()); + InTime = moment(data[0].CHECKIN_TIME, "MM/DD/YYYY HH:mm:ss").format("HH:mm:ss") + console.log('datan:', InTime); + return InTime; // Return the formatted time + }) + .catch((error) => { + console.error("Error fetching data:", error); + }); + + // Adding extra fields dynamically + let outtime = moment(d).format('HH:mm:ss'); + datan.InTime = InTime; + datan.outtime = outtime; + console.log('datan:', datan); + const isUpdated = await UpdateStoreStatus(props, datan); + if (isUpdated == true) { + let outtime = moment(d).format('HH:mm:ss'); + await updateStoreStatuslocal('C', checkOutStore, false, true, outtime); + UploadOnCheckOut(loc); + } else { + setStartUploading(false); //setProcessing(false); + notify(ST.Erroroccurwhilecheckout, 'LONG'); + } + } else { + setStartUploading(false); + notify(ST.Erroroccurwhilecheckout, 'LONG'); + } + } else { + if (CheckOutImagePath != '') { + await RNFS.unlink(CheckOutImagePath); + } + setCheckOutImage(''); + setCheckOutImagePath(''); + notify(ST.Somethingwentwrong, 'SHORT'); + setStartUploading(false); //setProcessing(false); + } + } else { + if (res.error == true) { + setStartUploading(false); + return; + // Stop the execution and exit the function + } + + if (CheckOutImagePath != '') { + await RNFS.unlink(CheckOutImagePath); + notify(res.errorMsg, 'SHORT'); + } + setCheckOutImage(''); + setCheckOutImagePath(''); + notify(res.errorMsg, 'SHORT'); + setStartUploading(false); //setProcessing(false); + } + } catch (err) { + + if (CheckOutImagePath != '') { + await RNFS.unlink(CheckOutImagePath); + } + setCheckOutImage(''); + setCheckOutImagePath(''); + notify('Error occurred while updating checkout status', 'SHORT'); + setStartUploading(false); //setProcessing(false); + } + } + async function updateStoreStatuslocal(status, storeData1, updateCheckin = false, uCOut = false, cout_time = '') { + + let storeArr = state.storeList; + let sdata_index = storeArr.findIndex(i => i.StoreId == storeData1.StoreId); + if (sdata_index >= 0) { + let sdata = storeArr[sdata_index]; + sdata['UploadStatus'] = status; + if (updateCheckin == true) { + sdata['CheckInTime'] = ''; + } + if (uCOut == true) { + sdata['CheckOutTime'] = cout_time; + } + storeArr[sdata_index] = sdata; + setState({ ...state, storeArr }); + setGlobalStorelist(storeArr); + setrerenderdata(!rerenderdata); + } + } + + async function UpdateStoreCheckOut(data) { + if (props.isInternetAvailable == true) { + console.log("jeevanp", data); + let calculateDate = moment(new Date()).format('MM/DD/YYYY'); + let calculateTym = moment(new Date()).format('HH:mm:ss'); + console.log("dateandtime--", calculateDate + "\n" + calculateTym) + + let CheckOut_PhotoReq = props.CheckOut_PhotoReq != null ? props.CheckOut_PhotoReq : false; + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + let q2 = `UPDATE ${AppTables.COVERAGE_DATA} SET CHECKOUT_TIME='${calculateTym}', CHECKOUT_IMAGE='${CheckOut_PhotoReq ? CheckOutImage : ''}' WHERE STORE_ID='${checkOutStore.StoreId}' and VISIT_DATE='${calculateDate}' `; + + await txn.executeSql(q2, [], async function (txn2, txnres2) { + console.log('store coverage updated'); + }, function (Etxn, txnerr) { console.log(txnerr); resolve(false); }); + + let q = `UPDATE ${AppTables.CHECKIN_DATA} SET CHECKOUT_TIME='${calculateTym}', CHECKOUT_IMAGE='${CheckOut_PhotoReq ? CheckOutImage : ''}' WHERE STORE_ID='${checkOutStore.StoreId}' and VISIT_DATE='${calculateDate}' `; + + await txn.executeSql(q, [], async function (txn2, txnres2) { + console.log('store checkout updated'); + resolve(true); + }, function (Etxn, txnerr) { console.log(txnerr); resolve(false); }); + + }); + }).then((val) => { + return val; + }).catch((err) => { + console.log(err); + return false; + }); + } else { + return; + } + } + + + async function UpdateUploadCountLocal(upCount) { + // keep 1 less to actual count as DownloadDataModal shows it as provided_value+1 + setUploadedCount(upCount - 1); + } + + async function UploadOnCheckOut(loc) { + try { + console.log('UploadOnCheckOut'); + let d1 = new Date(); + let d2 = moment(d1).format('MM/DD/YYYY'); + let token = await get_item('loginToken'); + let loginInfo = await get_item('loginInfo'); + const loginDetails = JSON.parse(loginInfo); + + let PJPStores = await getPJPStoresData('Mapping_JourneyPlan', [], d2); + let AdhocSTores = await getPJPStoresData('Adhoc_JourneyPlan', PJPStores, d2); + let routeWise = await getPJPStoresData('JourneyPlan_RouteWise', AdhocSTores, d2); + let nonProgJau = await getPJPStoresData('NonProgram_JourneyPlan', routeWise, d2); + let storeSearchJP = await getPJPStoresData('StoreSearch_JourneyPlan', nonProgJau, d2); + let AllStores = await getPJPStoresData('NonMerchandising_JourneyPlan', storeSearchJP, d2); + console.log('stores to upload:', AllStores.length); + + await db.transaction(async function (txn) { + console.log('stores to upload:', AllStores.length); + if (AllStores.length > 0) { + for (var i = 0; i < AllStores.length; i++) { + let data = AllStores[i]; + const index = i; + let { StoreId, StoreName, EmpId, MID, UploadStatus, Status, VisitDate, REASON_ID, IMAGE, JCP_TYPE } = data; + let MenuList = await getMenuList(data); + let allKPIs = await getKPIS(MenuList, props); + let totalUpC = MenuList.length - 1; // keep 1 less to actual count as DownloadDataModal shows it as provided_value+1 + // get all checkout ids data + console.log('UploadStatus before Start Uploading Data :', UploadStatus); + setTotalUpCount(totalUpC); + setshowProgresssBar(false); + setUploadingSubText("Uploading Data for Store:" + StoreId); + if (UploadStatus == 'C') { + let isUploaded_P_Status = await uploadStoreStatus(props, data, 'P', JCP_TYPE); + // let isUploaded_P_Status=await UploadCheckoutImageWithP(loc,JCP_TYPE,data); + console.log('isUploaded_P_Status:', isUploaded_P_Status); + + if (isUploaded_P_Status) { + await updateStoreStatuslocal('P', data); + setTotalUpCount(totalUpC); + setshowProgresssBar(true); + setUploadingText(ST.UploadingData + '...'); + await uploadAfter_P_status(index, AllStores, data, MenuList, allKPIs, JCP_TYPE); + } + else { + // Stop processing if all stores uploaded + if (index == AllStores.length - 1) { + // setProcessing(false); + setStartUploading(false); + notify(ST.Erroroccurwhileuploadingdata, 'LONG'); + } + } + } + else if (UploadStatus == 'D') { + setTotalUpCount(totalUpC); + setshowProgresssBar(true); + setUploadingText(ST.UploadingData + '...'); + // this never be called if there is no KPI + let allFilesToUpload = await uploadAllData(props, data, allKPIs, props.UserId, JCP_TYPE, false, UpdateUploadCountLocal); + if (allFilesToUpload.length > 0) { + await UploadDataWithImages(index, AllStores, data, MenuList, allKPIs, JCP_TYPE, allFilesToUpload); + } + else { + notify(ST.Alldatauploadedfor + ' ' + StoreName, 'SHORT'); + if (index == AllStores.length - 1) { + // setProcessing(false); + setStartUploading(false); + } + } + } + else if (UploadStatus == 'P') { + setTotalUpCount(totalUpC); + setshowProgresssBar(true); + setUploadingText(ST.UploadingData + '...'); + await uploadAfter_P_status(index, AllStores, data, MenuList, allKPIs, JCP_TYPE); + } + else if (UploadStatus == 'L') { + setshowProgresssBar(false); + setUploadingText(ST.UploadingData + '...'); + let isAllUploaded_S = await uploadStoreStatus(props, data, 'U', JCP_TYPE); + if (isAllUploaded_S == true) { + await updateStoreStatuslocal('U', data); + notify(ST.Alldatauploadedfor + ' ' + StoreName, 'SHORT'); + if (index == AllStores.length - 1) { + // setProcessing(false); + // setStartUploading(false); + await onUploadComplete(); + console.log('upload U deleteStore 2') + await deleteStore(data, "U"); + } + } + else { + if (index == AllStores.length - 1) { + // setProcessing(false); + setStartUploading(false); + notify(ST.Erroroccurwhileuploadingdata, 'LONG'); + } + } + } + else { + console.log("No UploadStatus case found while uploading"); + } + } + + } + }); + + } catch (err) { + console.log(err); + } + } + + async function uploadAfter_P_status(index, AllStores, data, MenuList, allKPIs, JCP_TYPE) { + let { StoreName } = data; + if (MenuList.length > 0) { + // Upload data with Images + let allFilesToUpload = await uploadAllData(props, data, allKPIs, props.UserId, JCP_TYPE, true, UpdateUploadCountLocal); + await updateStoreStatuslocal('D', data); + await UploadDataWithImages(index, AllStores, data, MenuList, allKPIs, JCP_TYPE, allFilesToUpload); + } + else if (MenuList.length == 0) { + let allFilesToUpload = await uploadAllData(props, data, allKPIs, props.UserId, JCP_TYPE, true, UpdateUploadCountLocal); + await updateStoreStatuslocal('D', data); + await UploadDataWithImages(index, AllStores, data, MenuList, allKPIs, JCP_TYPE, allFilesToUpload); + + } + else { + // Upload statua u if no data exists + let allfiles = await getAllFolderImages(); + console.log('allFiles => ', allfiles) + if (allfiles.length > 0) { + console.log('upload allFiles data => ') + await UploadDataWithImages(index, AllStores, data, MenuList, allKPIs, JCP_TYPE, allfiles); + } + let isAllUploaded_S = await uploadStoreStatus(props, data, 'U', JCP_TYPE); + if (isAllUploaded_S == true) { + await updateStoreStatuslocal('U', data); + notify(ST.Alldatauploadedfor + ' ' + StoreName, 'SHORT'); + if (index == AllStores.length - 1) { + // setProcessing(false); + await onUploadComplete(); + console.log('upload U deleteStore 3') + await deleteStore(data, "U"); + } + } + else { + if (index == AllStores.length - 1) { + // setProcessing(false); + setStartUploading(false); + notify(ST.Erroroccurwhileuploadingdata, 'LONG'); + } + } + } + } + + async function UploadDataWithImages(index, AllStores, data, MenuList, allKPIs, JCP_TYPE, allFilesToUpload) { + let { StoreName } = data; + if (allFilesToUpload.length > 0) { + // setLoaderTitle(ST.UploadingImages+'...'); + // keep 1 less to actual count as DownloadDataModal shows it as provided_value+1 + setUploadedCount(0); + setTotalUpCount(allFilesToUpload.length - 1); + setshowProgresssBar(true); + setUploadingText(ST.UploadingImages + '...'); + console.log('set loader title'); + let isAllUploaded = await uploadAllImages(props, data, allFilesToUpload, JCP_TYPE, {}, UpdateUploadCountLocal); + + if (isAllUploaded == true) { + await updateStoreStatuslocal('U', data); + notify(ST.Alldataandimagesuploadedfor + ' ' + StoreName, 'SHORT'); + if (index == AllStores.length - 1) { + // setProcessing(false); + await onUploadComplete(); + console.log('upload U deleteStore 4') + await deleteStore(data, "U"); + } + } else { + notify(ST.Cannotuploadimagesfor + ' ' + StoreName, 'SHORT'); + if (index == AllStores.length - 1) { + // setProcessing(false); + setStartUploading(false); + } + } + } + else { + let isupdatedU = await uploadStoreStatus(props, data, 'U', JCP_TYPE); + console.log('on no files found to upload , isupdated::', isupdatedU); + if (isupdatedU) { + await updateStoreStatuslocal('U', data); + notify(ST.Alldatauploadedfor + ' ' + StoreName, 'SHORT'); + if (index == AllStores.length - 1) { + await onUploadComplete(); + console.log('upload U deleteStore 5') + await deleteStore(data, "U"); + } + + } + else if (index == AllStores.length - 1) { + // setProcessing(false); + setStartUploading(false); + } + else { + + } + } + } + + async function onUploadComplete() { + // Sync all IR sessionsfor all stores at onces when all data and images fully uploaded + // setLoaderTitle('Syncing IR Sessions Status...'); + UpdateUploadCountLocal(0); // set uploaded count in progress bar to zero as IR session upload is just started + setTotalUpCount(0);// set Total uploaded count to 0 + setshowProgresssBar(false); + setUploadingSubText(''); + setUploadingText('Syncing IR Sessions Status...'); + + sessionsToUpload.current = []; + sessionsReceived.current = 0; + sessionsUploadedCount.current = 0; + let sync_result = await SyncIRsessions(props); + let { isUploadStarted, noDataFound, AllDataUploaded, success, sessionList, sessionListWithDetails } = sync_result; + + if (!success) { + notify('Cannot Upload Data! Something went wrong.'); + setStartUploading(false); + } + else { + if (noDataFound) { + notify('No session to upload!'); + setStartUploading(false); + } + else { + if (!isUploadStarted && AllDataUploaded) { + notify('All images synced! No session to upload.'); + setStartUploading(false); + } else if (isUploadStarted) { + sessionsToUpload.current = sessionListWithDetails; + console.log("UploadStarted", sessionsToUpload.current.length); + + UpdateUploadCountLocal(0); // set uploaded count in progress bar to zero as IR session upload is just started + setTotalUpCount(sessionsToUpload.current.length); // set Total Upload Count to IR Session Counts + setshowProgresssBar(true); + setUploadingSubText('Uploading IR Sessions'); + setUploadingText('Uploading IR Sessions Data...'); + + //set a timeout for session uploading: if no response get from receiver for particular session + for (let i = 0; i < sessionListWithDetails.length; i++) { + let { TEMP_SESSION_ID } = sessionListWithDetails[i]; + await setTimeout(async () => { + + let timerSessI = sessionsToUpload.current.findIndex(i => i.TEMP_SESSION_ID == TEMP_SESSION_ID); + let timerSessObj = timerSessI >= 0 ? sessionsToUpload.current[timerSessI] : {}; + + if (timerSessObj.IRStatusReceived != null && timerSessObj.IRStatusReceived === true) { + console.log("Session is already uploaded") + } + else { // upload local timout message and move loading to next step after 60 sec if no response received from server + let udata = { "message": "Session Upload Timeout", "sessionId": TEMP_SESSION_ID, "status": "local" } + await onIRImageUpload(udata); + } + }, 60 * 1000); + } + } + } + } + } + + + async function onIRImageUpload(data) { + console.log('onGlobalIRImageUpload on receive in STorelist', data); + let { message, sessionId, status } = data; + let snum = sessionsReceived.current + 1; + let su_num = sessionsUploadedCount.current; + sessionsReceived.current = snum; + + + let sessionIndex = sessionsToUpload.current.findIndex(i => i.TEMP_SESSION_ID == sessionId); + let sessionObj = sessionIndex >= 0 ? sessionsToUpload.current[sessionIndex] : {}; + let TableName1 = sessionObj['TableName1'] || ''; + let TableName2 = sessionObj['TableName2'] || ''; + let StoreId = sessionObj['StoreId'] || ''; + let StoreName = sessionObj['StoreName'] || ''; + + let IRCategoryName = sessionObj["IRCategoryName"] || ''; + let IRTaskName = sessionObj["IRTaskName"] || ''; + let IRPhotoType = sessionObj["IRPhotoType"] || ''; + let IRStoreCode = sessionObj["IRStoreCode"] || ''; + let ScreenName = sessionObj["ScreenName"] || ''; + let IRDetails = { IRCategoryName, IRTaskName, IRPhotoType, IRStoreCode, ScreenName } + console.log('onGlobalIRImageUpload sessionObj:', sessionObj); + + // if any status for the given session is recieved then we don't need to run timer and send local timout for that session + // so update its IRStatusReceived to true + sessionObj.IRStatusReceived = true; + sessionsToUpload.current[sessionIndex] = sessionObj; + + // check if session is uploaded then upload its logs + if (status != null && status == '200' && sessionId != null && sessionId != '') { + + let UnSessionId = await IRLogin.getDataIRSession(sessionId); + if (UnSessionId != null && UnSessionId != '') { + sessionsUploadedCount.current = ++su_num; + UpdateUploadCountLocal(su_num); + + let isUpdated = await UpdateIRUploadStatus(sessionId, UnSessionId, TableName1, TableName2, StoreId); + let isUploaded = await LogImageUpload(sessionId, UnSessionId, message, status, StoreId, StoreName, TableName1, TableName2, IRDetails); + if (isUploaded) { + console.log('Images Log Uploaded1'); + notify("Images Log uploaded for session:" + sessionId); + } + else { + console.log('cannot Uploaded image'); + notify("cannot upload log for session:" + sessionId); + } + } + else { + notify("Cannot upload images for session:" + sessionId + ". Universal Id not found"); + let isUploaded = await LogImageUpload(sessionId, "", message, status, StoreId, StoreName, TableName1, TableName2, IRDetails); + if (isUploaded) { + console.log('Images Log Uploaded2'); + notify("Images Log uploaded for session:" + sessionId); + } + else { + console.log('cannot Uploaded image'); + notify("cannot upload log for session:" + sessionId); + } + } + + } + else { + notify((message != null && message != "" ? message + ". " : "") + "Cannot upload images for session:" + sessionId); + let isUploaded = await LogImageUpload(sessionId, "", message, status, StoreId, StoreName, TableName1, TableName2, IRDetails); + if (isUploaded) { + console.log('Images Log Uploaded3'); + notify("Images Log uploaded for session:" + sessionId); + } + else { + console.log('cannot Uploaded image'); + notify("cannot upload log for session:" + sessionId); + } + + } + + console.log("check snum and su_num:", snum, su_num, sessionsToUpload.current.length); + // if last broadcast received either uploaded or not, update the processing status to false + if (snum == sessionsToUpload.current.length) { + setProcessing(false); + setStartUploading(false); + console.log('Deregister event when last received'); + IRLogin.deRegisterReceiver(); + } + + // All IR Sessions with Images Uploaded : set DataUploaded Status to U (Fully Upload) + if (su_num == sessionsToUpload.current.length) { + setProcessing(false); + setStartUploading(false); + notify("All IR images uploaded!"); + console.log('set all uploaded true to U'); + } + // Some Of IR Sessions with Images Uploaded but some are yet pending : set DataUploaded Status to P (Partial Upload) + else if (su_num > 0 && su_num != sessionsToUpload.current.length) { + // setProcessing(false); + notify("Uploading IR Sessions!"); + console.log('set all uploaded true to P'); + } + } + + async function UpdateIRUploadStatus(TempSessionId, UnSessionId, TableName1, TableName2, StoreId) { + console.log("UpdateIRUploadStatus"); + // TableName1: IR Upload Table for KPI + // TableName2: IR Images Table for KPI + return new Promise((resolve, reject) => { + if (TableName1 != null && TableName2 != null && TableName1 != '' && TableName2 != '') { + db.transaction(async function (txn) { + let q = `Update ${TableName1} set UN_SESSION_ID='${UnSessionId}',UPLOAD_STATUS='1',SYNC_STATUS='Synced' where TEMP_SESSION_ID='${TempSessionId}' and STORE_ID='${StoreId}' `;//VISIT_DATE='${d2}' + await txn.executeSql(q, [], async function (txn2, txnres) { + console.log('Updated IR Upload Status'); + + let q2 = `Update ${TableName2} set UN_SESSION_ID='${UnSessionId}' where TEMP_SESSION_ID='${TempSessionId}' and STORE_ID='${StoreId}' `;//VISIT_DATE='${d2}' and + await txn.executeSql(q2, [], async function (txn2, txnres2) { + console.log('Updated IR Upload Status'); + resolve(true); + }, function (txnE, txnerr) { console.log(txnerr); resolve(false); },); + + }, function (txnE, txnerr) { console.log(txnerr); resolve(false); },); + }); + } + else { + resolve(false); + } + }).catch((Err) => { + console.log('Error in UpdateIRUploadStatus:', Err); + return false; + }) + } + + async function LogImageUpload(TempSessionId, UnSessionId, message, status, StoreId, StoreName, TableName1, TableName2, IRDetails = {}) { + console.log("LogImageUpload"); + let { IRCategoryName, IRTaskName, IRPhotoType, IRStoreCode, ScreenName } = IRDetails + const url = props.baseurl + getMethodName(METHODS.UPLOADJSON_METHOD); + const nowTime = moment().format('HH:mm:ss'); + let ImageCount = await getImageCount(TempSessionId, TableName2); + ////Replaced special charecter and white space + let storeTittle = StoreName.replace(`@!%&`, '').replace(' ', '-'); + console.log("storeTittle:", storeTittle, StoreName); + let obj = {}; + obj['StoreId'] = StoreId; + obj['Username'] = props.UserId; + obj['VisitDate'] = d2; + obj['InTime'] = nowTime; + obj['TempSessionId'] = TempSessionId; + obj['UnSessionId'] = UnSessionId; + obj['Status'] = status; + obj['Message'] = message; + obj['ImageCount'] = ImageCount; + obj['StoreTitle'] = storeTittle; + obj['StoreCode'] = IRStoreCode; + obj['TaskName'] = IRTaskName; + obj['CategoryName'] = IRCategoryName; + obj['PhotoType'] = IRPhotoType; + obj['KPIType'] = ""; + obj['ScreenName'] = ScreenName; + obj['UploadType'] = "New"; + let postData = {}; + postData['MID'] = 0; + postData['Keys'] = 'IR_UPLOAD_LOG_MSG'; + postData['JsonData'] = JSON.stringify(obj); + postData['UserId'] = props.UserId; + console.log('postData', postData); + return await UploadData2(url, postData) + .then((res) => { + if (res.UploadJsonResult != null && res.UploadJsonResult == 'Success') { + return true; + } + return false; + }) + .catch((err) => { + console.log(err); + return false; + }); + } + + async function getImageCount(TempSessionId, TableName2) { + console.log('getImageCount'); + return new Promise((resolve, reject) => { + if (TableName2 != null && TableName2 != '') { + db.transaction(async function (txn) { + let q = `select DISTINCT TEMP_SESSION_ID,count(IMAGE1) as ImageCount from ${TableName2} where TEMP_SESSION_ID='${TempSessionId}' group by TEMP_SESSION_ID `;//VISIT_DATE='${d2}' and + await txn.executeSql(q, [], async function (txn2, txnres) { + console.log('ImageCount rows:', txnres.rows.length); + if (txnres.rows.length > 0) { + let data = txnres.rows.item(0); + console.log('data:', data) + console.log('Image Count for TempSessionId:', data.ImageCount); + resolve(data.ImageCount); + } + else { + resolve(0); + } + }, function (txnE, txnerr) { console.log(txnerr); resolve(0); },); + }); + } + else { + resolve(false); + } + }).catch((Err) => { + console.log('Error in getImageCount:', Err); + return 0; + }) + + + + } + + async function getPJPStoresData(tbname, Stores = [], d2) { + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + let join = `INNER JOIN ${AppTables.COVERAGE_DATA} t2 on t2.STORE_ID=t1.StoreId and t2.JCP_TYPE='${tbname}' `; + let qt = `Select t1.*,t2.REASON_ID,t2.IMAGE,t2.CHECKOUT_IMAGE,t2.JCP_TYPE from ${tbname} t1 ${join} where t1.VisitDate='${d2}' and t1.UploadStatus in ('C','P','D','L')` + console.log("queryyyyy", qt); + await txn.executeSql(qt, [], async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + console.log("queryyyyy", data); + Stores.push(data); + } + resolve(Stores); + } + else { + resolve(Stores); + } + }, function (txnE, txnerr) { console.log(txnerr); resolve(Stores) },); + + }); + }).then((val) => { + return val; + }) + .catch((err) => { + console.log(err); + return Stores; + }) + } + + + async function storeNotVisited() { + setShowStoreVisitModal(false); + props.navigation.navigate('StoreNonWorkingReasons', { storeData: currentStore, 'isAdhoc': isAdhocScreen, 'isBeat': isBeatPlan, 'isNonMerchans': isNonMerchan, isNonProgs: isNonProg, isStoreSearch: isStoreSearch }); + } + + async function onVisitCancel() { + setLoaderTitle(ST.DeletingCheckInData + '...') + setShowCancelCIModal(false); + setProcessing(true); + let { MID, StoreId } = cancelCheckOutStore; + let postdata = { 'Mid': MID, "UserName": props.UserId, } + + const url = props.baseurl + getMethodName(METHODS.DELETECOVERAGE_METHOD); + console.log(url, postdata); + await UploadData2(url, postdata) + .then(async (res) => { + console.log('delete coverage res:', res); + if (res == '1') { + console.log('upload U deleteStore 1') + let isdeleted = await deleteStore(cancelCheckOutStore, "Cancel"); + if (isdeleted == true) { + let data = { "StoreId": StoreId, UploadStatus: "N", tbname: (isBeatPlan == true ? 'JourneyPlan_RouteWise' : (isAdhocScreen == true ? 'Adhoc_JourneyPlan' : (isNonMerchan == true ? 'NonMerchandising_JourneyPlan' : isNonProg == true ? 'NonProgram_JourneyPlan' : isStoreSearch == true ? 'StoreSearch_JourneyPlan' : 'Mapping_JourneyPlan'))) }; + let isUpdated = await UpdateStoreStatus(props, data); + if (isUpdated == true) { + await updateStoreStatuslocal('N', cancelCheckOutStore, true); + setProcessing(false); + notify(ST.CheckInRemoved); + } + else { + setProcessing(false); + notify(ST.CheckInremovedsuccessfullybutcannotupdatestatus); + } + } + else { + setProcessing(false); + notify(ST.CheckInremovedsuccessfullybutcannotupdatestatus); + } + } + else { + setProcessing(false); + notify(ST.CannotRemoveCheckIn); + } + + }).catch(err => { + console.log('onPage Team error', err); + setProcessing(false); + notify(ST.CannotRemoveCheckIn); + }); + + } + + async function deleteStore(storeData1, Status = null) { + let { StoreId } = storeData1; + let allQueries = [ + `Delete from ${AppTables.COVERAGE_DATA} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.GEOTAG} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.STORE_PROFILE} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.STORE_CHECKLIST} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.STORE_PROFILE_KYC} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.HEADER_BACK_OF_STORE} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.CHILD_BACK_OF_STORE} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.SALES} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.INSERT_OPENINGHEADER_DATA} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.STOCK_DATA} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.SHARE_OF_SHELF_IMAGE} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.SHARE_OF_SHELF_FACING_DATA} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.INSERT_SAMPLED_DATA} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.CONTACT_CONVERSION} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.INSERT_ERROR_TRACKING} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.GROOMING_IMAGE_DATA} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.ADDITIONAL_VISIBILITY} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.ADDITIONAL_VISIBILITY_STOCK} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.COMPETITION_VISIBILITY} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.COMPETITION_PROMOTION} where STORE_ID='${StoreId}' `, + // `Delete from ${AppTables.CHECKIN_DATA} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.PROMOTION_HEADER_DATA} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.PROMOTION_DATA} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.PAID_VISIBILITY_HEADER_DATA} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.PAID_VISIBILITY_CHILD_DATA} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.PAID_VIS_CHECKLIST} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.SURVEY} where STORE_ID='${StoreId}' `, + + `Delete from ${AppTables.SAMPLING_INVENTORY} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.SAMPLING_CUST_TRACK} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.SAMPLING_STOCK_DATA} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.SAMPLING_SALE_DATA} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.SAMPLING_LIST} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.PROGRAM_HDR_DATA} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.PROGRAM_CHILD_DATA} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.PROGRAM_IMAGES} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.PROGRAM_STOCK_DATA} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.PROMO_HDR_DATA} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.PROMO_CHILD_DATA} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.PROMO_IMAGES} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.PROMO_STOCK_DATA} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.ST_HDR_DATA} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.ST_CHILD_DATA} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.ST_IMAGES} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.ST_STOCK_DATA} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.WINDOW_HDR_DATA} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.WINDOW_CHILD_DATA} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.WINDOW_IMAGES} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.WINDOW_STOCK_DATA} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.WINDOW_IR_IMAGES} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.WINDOW_IRUPLOAD} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.STORE_IMAGES} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.POSM_HDR_DATA} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.POSM_CHILD_DATA} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.SOS_HDR_DATA} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.SOS_CHILD_DATA} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.SOS_CHILD_QUES_DATA} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.SOS_IMAGES} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.SOS_IR_IMAGES} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.SOS_IRUPLOAD} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.CATEXE_HDR_DATA} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.CATEXE_CHILD_DATA} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.CATEXE_IMAGES} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.CATEXE_STOCK_DATA} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.WAREHOUSE_CAMPAIGN_HDR_DATA} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.WAREHOUSE_CAMPAIGN_CHILD_DATA} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.WAREHOUSE_CAMPAIGN_IMAGES} where STORE_ID='${StoreId}' `, + + `Delete from ${AppTables.WAREHOUSE_HDR_DATA} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.WAREHOUSE_CHILD_DATA} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.WAREHOUSE_IMAGES} where STORE_ID='${StoreId}' `, + + + // `Delete from ${AppTables.STORE_PROFILE} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.ORDERSTATUS} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.VISICO_HDR_DATA} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.VISICO_CHILD_DATA} where STORE_ID='${StoreId}' `, + // `Delete from ${AppTables.CONTRACT_FORM} where STORE_ID='${StoreId}' `, + // `Delete from ${AppTables.CONTRACT_FORM_DATA} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.POSSALE_DATA} where STORE_ID='${StoreId}' `, + // `Delete from ${AppTables.VISICO_CHILD_DATA} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.CASHTILL_SURVEY} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.SIMPLE_PROMOTION_DATA} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.SIMPLE_PROMOHDR_DATA} where STORE_ID='${StoreId}' `, + + `Delete from ${AppTables.STOCK2HDR_DATA} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.STOCK2_DATA} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.STOCK2_MFD_DATA} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.PAIDVIS_HDR_DATA} where STORE_ID='${StoreId}' `, + + `Delete from ${AppTables.STOCKPOMO_HDR_DATA} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.STOCKPROMO_DATA} where STORE_ID='${StoreId}' `, + + `Delete from ${AppTables.QRCODE_SCANNER} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.QRCODE_SALE} where STORE_ID='${StoreId}' `, + `Delete from ${AppTables.STORE_KYC_INFO} where STORE_ID='${StoreId}' `, + + ] + + if (Status != "U") { + // if(Status=="U"|| Status=="Cancel"){ + allQueries.push(`Delete from ${AppTables.CHECKIN_DATA} where STORE_ID='${StoreId}' `) + } + return await Promise.all( + allQueries.map(async (q, index) => { + let isDeleted = await executeQuery(q); + return isDeleted == true; + }) + ) + .then((val) => { + // if(val.indexOf(false)<0){} + return true; + }).catch((err) => { + console.log(err); + return false; + }) + } + + async function executeQuery(q, type = '1') { + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + await txn.executeSql(q, [], async function (txn2, txnres2) { + if (type == '1') { + resolve(true); + } + else { + + if (txnres2.rows.length > 0) { + let arr = [];//txnres2.rows.raw(); + // resolve(arr); + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + arr.push(data); + if (i == (txnres2.rows.length - 1)) { + resolve(arr); + } + } + } + else { + resolve([]); + } + } + }, function (Etxn, txnerr) { console.log(txnerr); type == '1' ? resolve(false) : resolve([]); }); + }); + }).then((val) => { + return val; + }).catch((err) => { + console.log(err); + let d = type == '1' ? false : []; + return d; + }) + } + + function _render_StoreVisitModal() { + return ( + + + { }}> + {ST.Yes} + + { storeNotVisited() }}> + {ST.No} + + + + ) + } + + function _render_GeoTagModal() { + return ( + + + { setShowGeoTagModal(false) }}> + {ST.Cancel} + + { setShowGeoTagModal(false); props.navigation.navigate('GeoTag', { storeData: currentStore, 'isAdhoc': isAdhocScreen, 'isBeat': isBeatPlan, 'isNonMerchans': isNonMerchan, 'isNonProgs': isNonProg, 'isStoreSearch': isStoreSearch }); }}> + {ST.OK} + + + + ) + } + + function _render_CancelCheckinModal() { + let storename = cancelCheckOutStore.StoreName || ''; + return ( + + + + {ST.Yourallcheckindatawillbelost} + + + + + { setShowCancelCIModal(false); }}> + {ST.Cancel} + + { onVisitCancel() }}> + {ST.OK} + + + + ) + } + + async function onDistanceM_OK() { + if (props.GeoFenceEnable) { + if (storeDistanceinM > props.GeoFenceRadius) { + setShowDistanceModal(false); + notify(ST.Youcannotcheckin + ' ' + ST.Youarenotwithinthealloweddistancefromthestore + ' ' + props.GeoFenceRadius + ' m', 'LONG') + } + else { + setShowDistanceModal(false); props.navigation.navigate('StoreCheckin', { storeData: currentStore, 'isAdhoc': isAdhocScreen, 'isBeat': isBeatPlan, 'isNonMerchans': isNonMerchan, 'isNonProgs': isNonProg, 'isStoreSearch': isStoreSearch }); + } + } + else { + setShowDistanceModal(false); props.navigation.navigate('StoreCheckin', { storeData: currentStore, 'isAdhoc': isAdhocScreen, 'isBeat': isBeatPlan, 'isNonMerchans': isNonMerchan, 'isNonProgs': isNonProg, 'isStoreSearch': isStoreSearch }); + } + } + + + function closeImageModal() { + setCheckOutImageModal(false); + } + + function cancelImage() { + if (CheckOutImagePath != '') { + RNFS.unlink(CheckOutImagePath); + } + setCheckOutImage(''); + setCheckOutImagePath(''); + closeImageModal(); + } + + async function openCamera() { + BGUpdateShowCamera(true); + } + + async function getImage(imgdata) { + let storeData = checkOutStore + if (typeof imgdata == 'object' && imgdata.errorCode == 'camera_unavailable') { + notify(ST.Cameraunavailable); + } + else if (typeof imgdata == 'object' && imgdata.uri != null) { + const img = imgdata; + const imgurl = img.uri, imgWidth = img.width, imgHeight = img.ExtendedHeight; + let isImgFromGallery = img.fromGallery != null ? img.fromGallery : false; + let picture_clickedd = isImgFromGallery == true ? img.datetime : new Date(); + + let picture_clicked_time = moment(picture_clickedd).format('MM-DD-YYYY HH:mm:ss') + let picture_clicked_time_for_pic_name = moment(picture_clickedd).format('MMDDYYYY_HHmmss') + + console.log("time", picture_clicked_time); + console.log("time1", picture_clicked_time_for_pic_name); + let calculate_tym_date_for_filename = picture_clicked_time_for_pic_name; + let calculate_tym_date_over_img = picture_clicked_time; + + let filename = storeData.StoreId + '_CheckoutImg-' + calculate_tym_date_for_filename + '.jpg'; + + const mark_text1 = calculate_tym_date_over_img; + const mark_text2 = 'Store Name:' + storeData.StoreName + ' | Store Id:' + storeData.StoreId + ' | User Id:' + storeData.EmpId + ' | Image Type: Check Out' + ' | Date:' + calculate_tym_date_over_img; + + setCheckOutImage(filename); + let imagePath = `${CoverageImagePath}${filename}`; + RNFS.copyFile(imgurl, imagePath) + .then(async (resn) => { + // render data with clicked image + let uri = 'file://' + imagePath; + console.log('image marker', uri); + setCheckOutImagePath(uri); + // add metdata then resize image and restored back to the imagePath + let restore_data = { "destFilePath": imagePath, "imgurl": imgurl, imgWidth, imgHeight, mark_text1, mark_text2 } + let is_restored = await restore_ImageWithMetaData(restore_data, imgdata); + console.log("image restored:", is_restored); + }) + .catch(err => { + console.log(ST.Errorimagefilewritefailed + '!!!'); + console.log(err.message, err.code); + }); + } + } + + + function _OpenCaptureImage_Modal() { + const isImageCap = (CheckOutImagePath == '' || CheckOutImagePath == null) ? false : true; + return ( + + { + !isImageCap && + + { openCamera() }}> + + + { closeImageModal() }}> + {ST.Cancel} + + + } + { + isImageCap && + + + + + { openCamera() }}> + + + {showImageSaveOp && + + { cancelImage() }}> + {ST.Cancel} + + {/* call checkout functionality with type : 2 , which means we have captured the image and again checking the location */} + { closeImageModal(); getLocOnCheckout('2'); }}> + {ST.Save} + + } + {!showImageSaveOp && + { closeImageModal() }}> + {ST.Close} + + } + + + + } + + ) + } + + function _render_DistanceModal() { + return ( + + + {ST.Youneedtobeinthestore} + {ST.toCheckInCheckOut} + {`${ST.Alloweddistancefromstore}: ${(props.GeoFenceEnable == true ? props.GeoFenceRadius : '500')} m`} + {`${ST.Yourdistancefromstore}: ${storeDistance}`} + { onDistanceM_OK() }}> + Ok + + + + ) + + } + + + return ( + + {processing && } + {(startUploading) && } + + + + {_render_StoreVisitModal()} + {_render_GeoTagModal()} + {_render_DistanceModal()} + {_render_CancelCheckinModal()} + {_OpenCaptureImage_Modal()} + {ConfirmSaveAlert(props, showAlert, onSaveCancel, getLocOnCheckout, ST.Doyoureallywanttocheckout)} + { BGUpdateShowCamera(false); getImage(imgData) }} showCamera={showCamera} onHideCamera={() => { BGUpdateShowCamera(false); }} /> + + {!processing ? ( + + {/* More Info checkbox */} + + setChecked(prev => !prev)} + label="Store Info" + /> + + + + + {/* Loader */} + {!mapReady && processing && ( + + + + )} + {/* Map */} + {!processing && ( + setMapReady(true)} + initialRegion={{ + latitude: location?.latitude || 22.9734, // fallback India center + longitude: location?.longitude || 78.6569, + latitudeDelta: 0.5, + longitudeDelta: 0.5, + }} + > + {/* 📍 Current Location */} + {location && ( + + )} + + {/* 🏬 Store Markers */} + {sortedStores?.length > 0 && + sortedStores.map((store) => ( + + {/* 📌 Custom Pin with Label */} + + {console.log("tedfdffd", store)} + {checked ? + + {store.StoreName} - {store.StoreId} + + + Address: {store.Address} + + + Distance:{" "} + {store?.Distance ? store.Distance : "0 m."} + + + : <>} + + + + + ))} + + )} + + + + ) : + {/* + Refreshing................ + */} + } + + + ); +} + + + +export default connect(mapStateToProps, mapDispatchToProps)(StoreListMappView); +const styles = StyleSheet.create({ + container: { flex: 1 }, + map: { flex: 1 }, + overlay: { + position: "absolute", + top: 50, + alignSelf: "center", + backgroundColor: "white", + padding: 10, + borderRadius: 8, + elevation: 5, + }, + loaderContainer: { + ...StyleSheet.absoluteFillObject, // fill entire screen + backgroundColor: "rgba(255,255,255,0.9)", + alignItems: "center", + justifyContent: "center", + zIndex: 2, // sit above the map + }, + callout: { + backgroundColor: "white", + padding: 10, + borderRadius: 8, + minWidth: 180, + elevation: 5, + }, + description: { fontSize: 14, marginBottom: 4 }, + coords: { fontSize: 12, color: "gray" }, + + callout: { + flexDirection: "column", + flexShrink: 1, + maxWidth: 250, // 🔑 prevents cutoff + padding: 8, + }, + title: { + fontWeight: "bold", + fontSize: 14, + marginBottom: 2, + }, + text: { + fontSize: 13, + flexShrink: 1, + flexWrap: "wrap", // 🔑 wraps text + }, +}); \ No newline at end of file diff --git a/PerformicsSrc/src/screens/StoreNonWorkingReasons.js b/PerformicsSrc/src/screens/StoreNonWorkingReasons.js new file mode 100644 index 0000000..61b11d9 --- /dev/null +++ b/PerformicsSrc/src/screens/StoreNonWorkingReasons.js @@ -0,0 +1,948 @@ +import React,{useState,useEffect} from 'react'; +import Container from '../components/container'; +import { useRoute } from '@react-navigation/native'; +import { customStyles,GetPageTheme } from "../styles/Global"; +import {Image,View,Text,ScrollView,TouchableOpacity,FlatList} from 'react-native'; +import { connect } from 'react-redux'; +import { mapStateToProps,mapDispatchToProps } from '../reducers/contextProvider'; +import {notify} from '../components/notify'; +import moment from 'moment'; +import {checkRange, marktext1,marktext2, resizeImage, restore_ImageWithMetaData, UpdateStoreStatus, UploadData, UploadData2, UploadFormData} from '../controller/functions'; +import {get_item,set_item,clear_item} from '../components/localStorage'; +import {AppVersion, CoverageImagePath, db, URL_IMAGE, version} from '../constants/constants'; +import CustomHeader from '../components/customHeader'; +import {AntDesign, Entypo, MaterialCommunityIcons,} from '../components/icons'; +import CustomLoader from '../components/CustomLoader'; +import LinearGradient from 'react-native-linear-gradient'; +import NoDataComponent from '../components/NoDataComponent'; +import CustomModal from '../components/CustomModal'; +import GradientButton from '../components/gradientButton'; +import * as RNFS from 'react-native-fs'; +import Geolocation from 'react-native-geolocation-service'; +import {_checkLocationPermission} from '../components/geolocation'; +import CustomCamera from '../components/Camera'; + +import CameraImg2 from '../assets/performics/camera_icon.svg'; +import CameraImg3 from '../assets/performics/camera_tick.svg'; +import { getFolderName, getMethodName, METHODS } from '../constants/methodNames'; +import { AppTables } from '../constants/tableConstants'; +import { uploadStoreStatus } from '../constants/uploadData'; +import { ConfirmSaveAlert } from '../components/alert'; + + +function StoreNonWorkingReasons(props) { + const route = useRoute(); + const ST=props.StaticText || {}; + // get all theme styles acc to current theme set + const PageTheme=GetPageTheme(props.DarkMode,route.name); + const customStyle=customStyles(props.DarkMode,route.name); + const [processing, setProcessing] = useState((props.isDataDownloaded?true:false)); + + const [storeData, setStoreData] = useState({}); + const [nonWorkingRsns, setNonWorkingRsns] = useState([]); + const [selectedReason, setSelectedReason] = useState({}); + const [reason, setReason] = useState(''); + const [reasonId, setReasonId] = useState(''); + const [Image1, setImage1] = useState(''); + const [Image1Path, setImage1Path] = useState(''); + const [showModal, setShowModal] = useState(false); + const [showImageSaveOp, setShowImageSaveOp] = useState(true); + const [rerenderdata, setrerenderdata]= useState(0); + const [loaderTitle, setLoaderTitle] = useState(); + const [isAdhocScreen, setIsAdhocScreen] = useState(false); + const [isBeatPlan, setIsBeatPlan] = useState(false); + const [isAnyStoreUploaded, setIsAnyStoreUploaded] = useState(false); + const [isNonMerchan, setIsNonMerchan] = useState(false); + const [isNonProg, setIsNonProg] = useState(false); + const [isStoreSearch, setIsStoreSearch] = useState(false); + const [showAlert, setShowAlert] = useState(false); + + const [showCamera, setShowCamera] = useState(false); + const [getImageProps,setGetImageProps]= useState({}); + + const [GeoFenceEnable_Checkout, setGeoFenceEnable_Checkout] = useState(false); + const [GeoFenceRadius_Checkout, setGeoFenceRadius_Checkout] = useState(''); + + + useEffect(() => { + setLoaderTitle(ST.Loading+'...') + + let CO_GeoFenceEnable=props.GFEnable_checkout!=null?props.GFEnable_checkout:false; + let CO_GeoFenceRadius=props.GFRadius_checkout!=null?props.GFRadius_checkout:''; + console.log("GeoFenceEnable_Checkout",CO_GeoFenceEnable) + setGeoFenceEnable_Checkout(CO_GeoFenceEnable); + setGeoFenceRadius_Checkout(CO_GeoFenceRadius); + + + getNonWorkingRsns(); + getData(); + + const unsubscribe=props.navigation.addListener('beforeRemove', onBeforeRemove); + + return function cleanup() { + return unsubscribe; + }; + }, []); + + useEffect(() => { + const unsubscribe=props.navigation.addListener('beforeRemove', onBeforeRemove); + return unsubscribe; + }, [showCamera]); + + function onBeforeRemove(e){ + if(showCamera==true){ + e.preventDefault(); + setShowCamera(false); + } + else{ + return; + } + } + + + + async function getNonWorkingRsns(){ + let d1=new Date(); + let d2=moment(d1).format('MM/DD/YYYY'); + + // set store type: adhoc or planned + let params=props.route.params? props.route.params:{}; + let storeData1=params.storeData || {}; + let isAdhoc=params.isAdhoc || false; + let isBeat=params.isBeat!=null? params.isBeat : false; + let isNonMerchan1=params.isNonMerchans!=null? params.isNonMerchans : false; + let isNonProgam=params.isNonProgs!=null? params.isNonProgs : false; + let isStoreSearch1=params.isStoreSearch!=null? params.isStoreSearch : false; + + setIsAdhocScreen(isAdhoc); + setIsBeatPlan(isBeat); + setIsNonMerchan(isNonMerchan1); + setIsNonProg(isNonProgam) + setIsStoreSearch(isStoreSearch1) + setStoreData(storeData1); + + + let token=await get_item('loginToken'); + let loginInfo=await get_item('loginInfo'); + const loginDetails=JSON.parse(loginInfo); + + + // let q=`SELECT * FROM Non_Working_Reason WHERE EntryAllow=1`; + + let q=`SELECT * FROM Non_Working_Reason where ChannelId='${storeData1.ChannelId}'`; + console.log("Non_Working_Reason---q:",q) + await db.transaction(async function (txn) { + + await txn.executeSql(q,[],async function (txn2, txnres2) { + if(txnres2.rows.length>0){ + // show from local + var storeArr=[]; + for(var i=0;i{ + db.transaction(async function (txn) { + + // let join=`INNER JOIN ${AppTables.COVERAGE_DATA} t2 on t2.STORE_ID=t1.StoreId and t2.JCP_TYPE='Mapping_JourneyPlan' `; + let q=`Select t1.* from Mapping_JourneyPlan t1 where t1.VisitDate='${d2}' and t1.UploadStatus!='N' and t1.UploadStatus!='' ` + + // let join2=`INNER JOIN ${AppTables.COVERAGE_DATA} t2 on t2.STORE_ID=t1.StoreId and t2.JCP_TYPE='Adhoc_JourneyPlan' `; + let q2=`Select t1.* from Adhoc_JourneyPlan t1 where t1.VisitDate='${d2}' and t1.UploadStatus!='N' and t1.UploadStatus!='' ` + + await txn.executeSql(q,[],async function (txn2, txnres2) { + if(txnres2.rows.length>0){ + // show from local + resolve(true); + } + else{ + await txn.executeSql(q2,[],async function (txn2, txnres3) { + if(txnres3.rows.length>0){ + // show from local + resolve(true); + } + else{ + resolve(false); + } + },function(Etxn,txnerr){console.log(txnerr);resolve(false); }); + } + },function(Etxn,txnerr){console.log(txnerr);resolve(false); }); + + }); + + }).then((val)=>{ + return val; + }).catch((err)=>{ + return false; + }); + } + + //user loction upload function + async function sendUserLocation(data = {}) { + console.log("sendUserLocation"); + const url = props.baseurl + getMethodName(METHODS.UPLOADJSON_METHOD); + let postData = { + 'MID': storeData.MID, + 'Keys': "GeoFenceDataNonWorkingReason", + 'JsonData': JSON.stringify(data), + 'UserId': props.UserId, + } + console.log("urlllllllllll",url, postData); + return await UploadData2(url, postData) + .then(async (res) => { + if (res.UploadJsonResult != null && res.UploadJsonResult == 'Success') { + notify('GeoFenceData Uploaded Succesfully', 'SHORT'); + // console.log(KPIdata+' uploaded'); + return true; + } + return false; + }) + .catch(async (err) => { + return false; + }); + } + + async function _getCurrentLocation() { + setProcessing(true); + setLoaderTitle('Getting location...'); + const hasPermission=await _checkLocationPermission(); + if(hasPermission==true) + { + + Geolocation.getCurrentPosition( + async (position) => { + let loc={lat:position.coords.latitude,lng:position.coords.longitude}; + var distance = checkRange(loc.lat,loc.lng,storeData.Latitude,storeData.Longitude); + console.log('COut distance NW:',distance + "--Store lat,longt"+storeData.Latitude,storeData.Longitude + "----current_lat_lot"+loc.lat,loc.lng); + + let EntryAllow=(selectedReason.EntryAllow=='true' || selectedReason.EntryAllow==true || selectedReason.EntryAllow==1); + let GPSMandatory=(selectedReason.GPSMandatory=='true' || selectedReason.GPSMandatory==true || selectedReason.GPSMandatory==1); + + + console.log("GeoFenceEnable_Checkout",GeoFenceEnable_Checkout, "GPSMandatory",GPSMandatory,"EntryAllow",EntryAllow); + if(GPSMandatory && GeoFenceEnable_Checkout==true){ + if(GeoFenceRadius_Checkout!='' && distance>GeoFenceRadius_Checkout){ + let locData = { "UserId": props.UserId, "StoreId": storeData.StoreId, "StoreLatitude": storeData.Latitude, 'StoreLongitude': storeData.Longitude, 'currentLatitude': loc.lat, 'currentLongitude': loc.lng ,'VisitDate':storeData.VisitDate}; + await sendUserLocation(locData); + notify(ST.Youcannotcheckout+' '+ST.Youarenotwithinthealloweddistancefromthestore+' '+GeoFenceRadius_Checkout+' m','LONG') + setProcessing(false); + props.navigation.goBack(); + } + else{ + checkOutAfterLoc(loc); + } + } + else{ + checkOutAfterLoc(loc); + } + + }, + (error) => { + notify(ST.Cannotgetuserposition); + setProcessing(false); + }, + { enableHighAccuracy: true, distanceFilter: 0, interval: 1000, fastestInterval: 2000 } + ); + } + else{ + notify(ST.Pleaseallowlocationpermission); + } + } + + async function checkOutAfterLoc(loc){ + setLoaderTitle(ST.UploadingData+'...'); + let EntryAllow=(selectedReason.EntryAllow=='true' || selectedReason.EntryAllow==true || selectedReason.EntryAllow==1); + let createJourneyPlan=(isAdhocScreen==true || isBeatPlan==true || isNonMerchan==true || isNonProg==true || isStoreSearch==true ); + createJourneyPlan? await createJCP(loc,EntryAllow): (EntryAllow?await uploadNonWRsnWithImage(loc,'L'):await uploadNonWRsn(loc,'U',storeData)); + } + + async function uploadNonWRsn(loc,UploadStatus='U',storeData1){ + let d1=new Date(); + let d2=moment(d1).format('MM/DD/YYYY'); + let data={ + "Mid":storeData1.MID, + "StoreId":storeData1.StoreId, + "VisitDate":d2, + "Latitude":(loc.lat || ''), + "Longitude":(loc.lng || ''), + "ReasonId":reasonId, + "Remark":"", + "Appversion":AppVersion, + "UploadStatus":UploadStatus, + "UserName":(props.UserId || ''), + } + + const url=props.baseurl+getMethodName(METHODS.COVERAGENOTALLOW_METHOD); + console.log(url,data); + await UploadData(url,data) + .then(async(res)=>{ + console.log('COVERAGENOTALLOW_METHOD',res); + if(res=='1'){ + let isupdated=await InsertCoverageData(loc,false,UploadStatus); + console.log("isupdated:",isupdated); + // let isupdated=await update_Store_UploadStatus(false); + if(isupdated==true){ + notify(ST.AllDataUploaded+'!','SHORT'); + setProcessing(false); + goBack(); + } + else{ + notify(ST.DataUploadedButcouldnotupdatestorestatus,'SHORT'); + setProcessing(false); + } + } + else{ + setProcessing(false); + notify(ST.Cannotuploaddata,'SHORT'); + } + }) + .catch((err)=>{ + console.log(err); + }); + } + + async function uploadNonWRsnWithImage(loc,UploadStatus='L'){ + let d1=new Date(); + let d2=moment(d1).format('MM/DD/YYYY'); + + var data1 = new FormData(); + if(Image1Path!='' && Image1Path!=null){ + + data1.append('file', { + uri: Image1Path, + type: 'image/jpg', + name: Image1, + }); + + let foldername=getFolderName(Image1); + data1.append('Foldername',foldername); + data1.append('Path', d2); + } + + // data1.append('UserName', (props.UserId || '')); + + let data={ + "Mid":storeData.MID, + "StoreId":storeData.StoreId, + "VisitDate":d2, + "Latitude":(loc.lat || ''), + "Longitude":(loc.lng || ''), + "ReasonId":reasonId, + "Remark":"", + "Appversion":AppVersion, + "UploadStatus":UploadStatus, + "UserName":(props.UserId || ''), + "ImageName":Image1, + "CheckoutImage":"", + } + + const url=props.baseurl+getMethodName(METHODS.GETCOVERAGE_METHOD); + const url1=(props.imageUploadUrl || URL_IMAGE)+getMethodName(METHODS.UPLOADIMAGES_METHOD); + console.log(url,data); + + await UploadData2(url,data) + .then(async(res)=>{ + console.log('res:',res); + if(parseInt(res)>0){ + let isUpdated=await InsertCoverageData(loc,true,UploadStatus); + console.log("isUpdated:",isUpdated); + if(isUpdated==true){ + // Upload Image + console.log("isUpdated:",isUpdated); + if((selectedReason.ImageAllow=='true' || selectedReason.ImageAllow==true || selectedReason.ImageAllow=='1') && Image1Path!='' && Image1Path!=null){ + await UploadFormData(url1,data1) + .then(async(res1)=>{ + console.log('res1:',res1); + // let tbname=isBeatPlan==true?'JourneyPlan_RouteWise':(isAdhocScreen==true?'Adhoc_JourneyPlan':(isNonMerchan==true?'NonMerchandising_JourneyPlan':(isNonProg==true? 'NonProgram_JourneyPlan':'Mapping_JourneyPlan'))); + + let tbname = isStoreSearch == true ?'StoreSearch_JourneyPlan':(isBeatPlan == true ? 'JourneyPlan_RouteWise' : (isAdhocScreen == true ? 'Adhoc_JourneyPlan' : (isNonMerchan == true ? 'NonMerchandising_JourneyPlan':(isNonProg == true? 'NonProgram_JourneyPlan':'Mapping_JourneyPlan')))); + + let isuploaded=await uploadStoreStatus(props,storeData,'U',tbname); + console.log("isUpdated:",isUpdated); + if(isuploaded==true){ + notify(ST.DataUploaded+'!'); + setProcessing(false); + goBack(); + } + else{ + notify(ST.Cannotuploaddata); + setProcessing(false); + } + + }) + .catch((err)=>{ + console.log(err); + }); + } + else{ + // let tbname=isBeatPlan==true?'JourneyPlan_RouteWise':(isAdhocScreen==true?'Adhoc_JourneyPlan':(isNonMerchan==true?'NonMerchandising_JourneyPlan':(isNonProg==true? 'NonProgram_JourneyPlan':'Mapping_JourneyPlan'))); + let tbname = isStoreSearch == true ? 'StoreSearch_JourneyPlan':(isBeatPlan == true ? 'JourneyPlan_RouteWise' : (isAdhocScreen == true?'Adhoc_JourneyPlan': (isNonMerchan == true? 'NonMerchandising_JourneyPlan':(isNonProg == true? 'NonProgram_JourneyPlan':'Mapping_JourneyPlan')))); + let isuploaded=await uploadStoreStatus(props,storeData,'U',tbname); + console.log("isuploaded status :",isuploaded); + if(isuploaded==true){ + notify(ST.DataUploaded+'!'); + setProcessing(false); + goBack(); + } + else{ + notify(ST.Cannotuploaddata); + setProcessing(false); + } + + } + } + else{ + setProcessing(false); + notify(ST.Cannotuploaddata); + } + } + else{ + setProcessing(false); + notify(ST.Cannotuploaddata); + } + }) + .catch((err)=>{ + console.log(err);setProcessing(false);notify(ST.Cannotuploaddata); + }); + } + + async function InsertCoverageData(loc,entryAllowed=true,UploadStatus){ + let d1=new Date(); + let d2=moment(d1).format('MM/DD/YYYY'); + let now=moment(d1).format('MM/DD/YYYY HH:mm:ss'); + + return new Promise((resolve,reject)=>{ + db.transaction(async function (txn) { + + let {StoreId,MID}=storeData; + let {lat,lng}=loc; + let q=`delete from ${AppTables.COVERAGE_DATA} where STORE_ID='${StoreId}' and VISIT_DATE='${d2}' `; + // let JcpType=isBeatPlan==true?'JourneyPlan_RouteWise':(isAdhocScreen==true?'Adhoc_JourneyPlan':(isNonMerchan==true?'NonMerchandising_JourneyPlan':(isNonProg==true? 'NonProgram_JourneyPlan':'Mapping_JourneyPlan'))); + let JcpType = isStoreSearch == true ? 'StoreSearch_JourneyPlan':(isBeatPlan == true ? 'JourneyPlan_RouteWise' : (isAdhocScreen == true ? 'Adhoc_JourneyPlan': (isNonMerchan == true? 'NonMerchandising_JourneyPlan':(isNonProg == true? 'NonProgram_JourneyPlan':'Mapping_JourneyPlan')))); + + let values=` ('${StoreId}','${d2}','${lat}','${lng}','${Image1}','${now}','${Image1Path}','${reasonId}','${reason}','','','${MID}','${JcpType}','${d2}')`; + let insert_q=` insert into ${AppTables.COVERAGE_DATA}(STORE_ID,VISIT_DATE ,LATITUDE,LONGITUDE,IMAGE,CHECKOUT_TIME,CHECKOUT_IMAGE,REASON_ID,REASON,REMARK,STORE_FLAG,MID,JCP_TYPE,ADDED_DATE) values ${values}`; + + + let values2=` ('${StoreId}','${d2}','${lat}','${lng}','${now}','${Image1Path}','${now}','${Image1Path}','','${JcpType}','${d2}')`; + let insert_q2=` INSERT INTO ${AppTables.CHECKIN_DATA}(STORE_ID,VISIT_DATE,LATITUDE,LONGITUDE,CHECKIN_TIME,CHECKIN_IMAGE,CHECKOUT_TIME,CHECKOUT_IMAGE,REMARK,JCP_TYPE,ADDED_DATE) values ${values2}`; + + // if entry not allowed for the uploaded reason + // i.e. if user selects week off type non working reason then add coverage for all store with U status + if(!entryAllowed){ + // insert coverage for all stores + function getQ(tbname){ + return `select jp.StoreId,'${d2}','${lat}','${lng}','${Image1}','${now}','${Image1Path}','${reasonId}','${reason}','','',jp.MID,'${tbname}','${d2}' from ${tbname} jp`; + } + + // insert coverage data in table 2 for all stores + function getQ2(tbname){ + return `select jp.StoreId,'${d2}','${lat}','${lng}','${now}','${Image1Path}','${now}','${Image1Path}','','${tbname}','${d2}' from ${tbname} jp`; + } + + let MappingJP=getQ('Mapping_JourneyPlan'); + let AdhocJP=getQ('Adhoc_JourneyPlan'); + + let storesq=MappingJP+' UNION '+AdhocJP; + let storesq2=getQ2('Mapping_JourneyPlan')+' UNION '+getQ2('Adhoc_JourneyPlan'); + + if(props.ShowNonMerList==true){ + let NonMerchJP=getQ('NonMerchandising_JourneyPlan'); + storesq+=` UNION ${NonMerchJP} `; + storesq2+=` UNION ${getQ2('NonMerchandising_JourneyPlan')} `; + } + if(props.ShowNonProgram==true){ + let NonProgJP=getQ('NonProgram_JourneyPlan'); + storesq+=` UNION ${NonProgJP} `; + storesq2+=` UNION ${getQ2('NonProgram_JourneyPlan')} `; + } + + if(props.ShowStoreSearch==true){ + let StoreSearchJP=getQ('StoreSearch_JourneyPlan'); + storesq+=` UNION ${StoreSearchJP} `; + storesq2+=` UNION ${getQ2('StoreSearch_JourneyPlan')} `; + } + + if(props.ShowBeatPlanList==true){ + let RouteJP=getQ('JourneyPlan_RouteWise'); + storesq+=` UNION ${RouteJP} `; + storesq2+=` UNION ${getQ2('JourneyPlan_RouteWise')} `; + } + + insert_q=` insert into ${AppTables.COVERAGE_DATA}(STORE_ID,VISIT_DATE ,LATITUDE,LONGITUDE,IMAGE,CHECKOUT_TIME,CHECKOUT_IMAGE,REASON_ID,REASON,REMARK,STORE_FLAG,MID,JCP_TYPE,ADDED_DATE) ${storesq} `; + + insert_q2=` INSERT INTO ${AppTables.CHECKIN_DATA}(STORE_ID,VISIT_DATE,LATITUDE,LONGITUDE,CHECKIN_TIME,CHECKIN_IMAGE,CHECKOUT_TIME,CHECKOUT_IMAGE,REMARK,JCP_TYPE,ADDED_DATE) ${storesq2} `; + } + + console.log("insert_q:",insert_q); + + await txn.executeSql(q,[],async function (txn2, txnres2) { + console.log('store coverage deleted'); + await txn.executeSql(insert_q,[],async function (txn2, txnres3) { + console.log('InsertCoverageData done'); + },function(Etxn,txnerr){console.log(txnerr);}); + },function(Etxn,txnerr){console.log(txnerr);}); + + + await txn.executeSql(`delete from ${AppTables.CHECKIN_DATA} where STORE_ID='${StoreId}' and VISIT_DATE='${d2}'`,[],async function (txn2, txnres2) { + console.log('store checkin deleted'); + await txn.executeSql(insert_q2,[],async function (txn2, txnres3) { + + console.log('store checkin added as leave'); + let issup=await update_Store_UploadStatus(entryAllowed); + console.log("issup:",issup); + resolve(issup); + + },function(Etxn,txnerr){console.log(txnerr);resolve(false);}); + },function(Etxn,txnerr){console.log(txnerr);resolve(false);}); + + }); + }).then((val)=>{ + console.log('on InsertCoverageData complete:',val); + return val; + }).catch((err)=>{ + console.log(err); + return false; + }); + + } + + async function createJCP(loc,EntryAllow=true){ + let d1=new Date(); + let d2=moment(d1).format('MM/DD/YYYY'); + // let data={"UserId":(props.UserId || ''),"JcpType":1,"StoreId":storeData.StoreId,"VisitDate":d2} + let data = {"UserId": props.UserId || '',"JcpType": isStoreSearch == true ? 6 : (isBeatPlan == true ? 2 : (isNonMerchan == true ? 3 : (isNonProg == true ? 5 : 1))), "StoreId": storeData.StoreId, "VisitDate": d2 }; + const url=props.baseurl+getMethodName(METHODS.CREATEJP_METHOD); + console.log(url,data); + await UploadData(url,data) + .then(async(res)=>{ + console.log(res); + if(res!=null && res!='' && res!='0' && parseInt(res)>0){ + updateMID(res,loc,EntryAllow);// update mid in db + } + else{ + setProcessing(false);notify(ST.OopsSomethingwentwrongcannotcreateJCP,'SHORT'); + } + + }) + .catch((err)=>{ + setProcessing(false);console.log(err); + }); + + } + + const goBack=()=>{ + props.navigation.goBack(); + } + + async function updateMID(MID=0,loc,EntryAllow=true){ + try{ + await db.transaction(async function (txn) { + let JcpType=isBeatPlan==true?'JourneyPlan_RouteWise':(isNonMerchan==true?'NonMerchandising_JourneyPlan':(isNonProg==true?'NonProgram_JourneyPlan':(isStoreSearch==true?'StoreSearch_JourneyPlan':'Adhoc_JourneyPlan'))); + //let q=`UPDATE Adhoc_JourneyPlan SET MID='${MID}' WHERE StoreId='${storeData.StoreId}' `; + let q=`UPDATE ${JcpType} SET MID='${MID}' WHERE StoreId='${storeData.StoreId}' `; + await txn.executeSql(q,[],async function (txn2, txnres2) { + console.log('mid updated',storeData.StoreId,MID); + let new_st=storeData; + new_st['MID']=MID; + setStoreData(new_st); + EntryAllow?uploadNonWRsnWithImage(loc,'L'):await uploadNonWRsn(loc,'U',new_st); + },function(Etxn,txnerr){console.log(txnerr);}); + }); + } + catch(e){ + setProcessing(false); + notify(ST.CouldnotcreateJCP,'SHORT'); + } + } + + // async function updateMID(MID=0,loc){ + // try{ + // let JcpType=isBeatPlan==true?'JourneyPlan_RouteWise':(isNonMerchan==true?'NonMerchandising_JourneyPlan':(isNonProg==true?'NonProgram_JourneyPlan':(isStoreSearch==true?'StoreSearch_JourneyPlan':'Adhoc_JourneyPlan'))); + + // await db.transaction(async function (txn) { + // let q=`UPDATE ${JcpType} SET MID='${MID}' WHERE StoreId='${storeData.StoreId}' `; + // await txn.executeSql(q,[],async function (txn2, txnres2) { + // console.log('mid updated',storeData.StoreId,MID); + // let new_st=storeData; + // new_st['MID']=MID; + // setStoreData(new_st); + // uploadCheckIn(loc); + + // },function(Etxn,txnerr){ setProcessing(false);console.log(txnerr);}); + // }); + // } + // catch(e){ + // setProcessing(false); + // notify(ST.CouldnotcreateJCP,'SHORT'); + // } + // } + + async function update_Store_UploadStatus(entryAllowed=true){ + + return new Promise(async(resolve,reject)=>{ + + //Upload U status for all stores and add coverage with checking and chcekout time in local + if(entryAllowed==false){ + + if(props.ShowNonMerList==true){ + console.log("exec isupdated uss1"); + let q3=`UPDATE NonMerchandising_JourneyPlan SET UploadStatus='U' `; + let isupdated1=await executeQuery(q3); + console.log("isupdated uss1:",isupdated1); + } + if(props.ShowNonProgram==true){ + console.log("exec isupdated uss2"); + let q3=`UPDATE NonProgram_JourneyPlan SET UploadStatus='U' `; + let isupdated1=await executeQuery(q3); + console.log("isupdated uss2:",isupdated1); + } + if(props.ShowStoreSearch==true){ + console.log("exec isupdated uss4"); + let q3=`UPDATE StoreSearch_JourneyPlan SET UploadStatus='U' `; + let isupdated1=await executeQuery(q3); + console.log("isupdated uss4:",isupdated1); + } + if(props.ShowBeatPlanList==true){ + console.log("exec isupdated uss3"); + let q3=`UPDATE JourneyPlan_RouteWise SET UploadStatus='U' `; + let isupdated1=await executeQuery(q3); + console.log("isupdated uss3:",isupdated1); + } + let q=`UPDATE Mapping_JourneyPlan SET UploadStatus='U' `; + + db.transaction(async function (txn) { + await txn.executeSql(q,[],async function (txn2, txnres1) { + console.log('store status updated') + + let q2=`UPDATE Adhoc_JourneyPlan SET UploadStatus='U' `; + // let isupdated=await executeQuery(q2); + + await txn.executeSql(q2,[],async function (txn2, txnres1) { + console.log('store status updated2') + console.log("resolve true "); + resolve(true); + },function(Etxn,txnerr){console.log(txnerr);resolve(false);}); + + },function(Etxn,txnerr){console.log(txnerr);resolve(false);}); + }); + } + else{ + // let tbname=isBeatPlan==true?'JourneyPlan_RouteWise':(isAdhocScreen==true?'Adhoc_JourneyPlan':(isNonMerchan==true?'NonMerchandising_JourneyPlan':(isNonProg==true? 'NonProgram_JourneyPlan':'Mapping_JourneyPlan'))); + let tbname = isStoreSearch == true ? 'StoreSearch_JourneyPlan':(isBeatPlan == true ? 'JourneyPlan_RouteWise' : (isAdhocScreen == true ? 'Adhoc_JourneyPlan': (isNonMerchan == true? 'NonMerchandising_JourneyPlan':(isNonProg == true? 'NonProgram_JourneyPlan':'Mapping_JourneyPlan')))); + let datan={StoreId:storeData.StoreId,UploadStatus:'L',tbname:tbname} ; + const isUpdated=await UpdateStoreStatus(props,datan); + resolve(isUpdated); + + } + + }).then((val)=>{ + return val; + }).catch((err)=>{ + console.log(err); + return false; + }) + } + + async function executeQuery(q,txn){ + return new Promise((resolve,reject)=>{ + db.transaction(async function (txn) { + txn.executeSql(q,[],async function (txn2, txnres2) { + resolve(true); + },function(Etxn,txnerr){console.log(txnerr);resolve(false) }); + }); + }).then((val)=>{ + return val; + }).catch((err)=>{ + console.log(err); + return false; + }) + } + + async function submitNonWorkingRsns(){ + if(validate()){ + setShowAlert(true); + } + } + + async function saveData(){ + setShowAlert(false); + _getCurrentLocation(); + } + + function validate(){ + if(reasonId=='' || reasonId==null || reason=='' || reason==null){ + notify(ST.Pleaseselectreasonfornotworking,'SHORT'); + return false; + } + if( (selectedReason.ImageAllow=='true' || selectedReason.ImageAllow=='1' || selectedReason.ImageAllow==true) && (Image1Path=='' || Image1Path==null)){ + notify(ST.Pleaseclickselfieinfrontofstore,'SHORT'); + return false; + } + return true; + } + + async function selectReason(item){ + if(isAnyStoreUploaded==true && (item.EntryAllow=='false' || item.EntryAllow==false)){ + notify(ST.Youcannotselectthisreasonasthereisalreadyastore); + return; + } + + setSelectedReason(item); + setReason(item.Reason); + setReasonId(item.ReasonId); + setrerenderdata(!rerenderdata); + + if(item.ImageAllow=='true' || item.ImageAllow=='1' || item.ImageAllow==true){ + if((Image1Path!='' && Image1Path!=null)){ + setShowImageSaveOp(false); + } + else{ + setShowImageSaveOp(true); + } + openImageModal(); + } + } + + function openImageModal(){ + setShowModal(true); + } + + function closeImageModal(){ + setShowModal(false); + } + + function cancelImage(){ + setImage1(''); + setImage1Path(''); + closeImageModal(); + } + + async function getImage(imgdata){ + setLoaderTitle('Processing Image...') + setProcessing(true); + if(typeof imgdata =='object' && imgdata.errorCode=='camera_unavailable'){ + notify(ST.Cameraunavailable); + } + else if(typeof imgdata =='object' && imgdata.uri!=null){ + const img=imgdata; + const imgurl=img.uri, imgWidth=img.width, imgHeight=img.ExtendedHeight; + let isImgFromGallery=img.fromGallery!=null?img.fromGallery:false; + let picture_clickedd=isImgFromGallery==true?img.datetime:new Date(); + let picture_clicked_time=moment(picture_clickedd).format('MM-DD-YYYY HH:mm:ss') + let picture_clicked_time_for_pic_name=moment(picture_clickedd).format('MMDDYYYY_HHmmss') + + console.log("time", picture_clicked_time); + console.log("time1", picture_clicked_time_for_pic_name); + let calculate_tym_date_for_filename = picture_clicked_time_for_pic_name; + let calculate_tym_date_over_img = picture_clicked_time; + + let filename=storeData.StoreId+'_NonworkImg-'+calculate_tym_date_for_filename+'.jpg'; + const mark_text1=calculate_tym_date_over_img; + const mark_text2='Store Name:'+storeData.StoreName+' | Store Id:'+storeData.StoreId+' | User Id:'+storeData.EmpId+' | Image Type: Not Working'+' | Date:'+calculate_tym_date_over_img; + + setImage1(filename); + + let imagePath=`${CoverageImagePath}${filename}`; + // if(resize_res.success){ + // file resized now rename file + RNFS.copyFile(imgurl, imagePath) + .then(async(resn) => { + // render data with clicked image + let uri='file://'+imagePath; + console.log('image marker',uri); + setImage1Path(uri); + + // add metdata then resize image and restored back to the imagePath + let restore_data={"destFilePath":imagePath,"imgurl":imgurl,imgWidth,imgHeight,mark_text1,mark_text2} + let is_restored=await restore_ImageWithMetaData(restore_data,imgdata); + console.log("image restored:",is_restored); + }) + .catch(err => { + console.log(ST.Errorimagefilewritefailed+'!!!'); + console.log(err.message, err.code); + }); + + } + setProcessing(false); + } + + async function openCamera(){ + setShowCamera(true); + // props.navigation.navigate('CameraScreen',{'getImage':getImage,'cameraType':'front'}) + } + + function onSaveCancel(){ + setShowAlert(false); + } + + function _OpenCaptureImage_Modal(){ + const isImageCap=(Image1Path=='' || Image1Path==null)?false:true; + return ( + + { + !isImageCap && + + {openCamera()}}> + + + {closeImageModal()}}> + {ST.Cancel} + + + } + { + isImageCap && + + + + + {openCamera()}}> + + + { showImageSaveOp && + + {cancelImage()}}> + {ST.Cancel} + + {closeImageModal()}}> + {ST.Save} + + } + {!showImageSaveOp && + {closeImageModal()}}> + {ST.Close} + + } + + + + } + + ) + } + + + return ( + + {processing && } + + + + {ConfirmSaveAlert(props,showAlert,onSaveCancel,saveData)} + {_OpenCaptureImage_Modal()} + {setShowCamera(false);getImage(imgData)}} showCamera={showCamera} onHideCamera={()=>{setShowCamera(false);}}/> + + + + { !props.isDataDownloaded && } + {props.isDataDownloaded && Object.keys(storeData).length>0 && + + + + + + + + {storeData.StoreName} + + + + + + {ST.StoreId+':'} + {storeData.StoreId} + + + {ST.StoreCode+':'} + {storeData.StoreCode} + + + + + {ST.Address+':'} + {storeData.Address} + + + + + + + + + + + {ST.Reasonfornotworkinginstore} + { + + const nWselStyle=reasonId==item.ReasonId?customStyle.nWselStyle:{}; + const nWselStyleText=reasonId==item.ReasonId?customStyle.nWselStyleText:{}; + const CapImageShow=(Image1Path!='' && Image1Path!=null) && reasonId==item.ReasonId?true:false; + let isDisabled=(isAnyStoreUploaded==true && (item.EntryAllow=='false' || item.EntryAllow==false)); + return ( + {selectReason(item)}}> + {item.Reason} + { (item.ImageAllow=='true' || item.ImageAllow=='1' || item.ImageAllow==true) && + {selectReason(item)}}> + {!CapImageShow && } + {CapImageShow && } + + } + + ); + }} + /> + + + + + {submitNonWorkingRsns();}}/> + + + + + } + + + + + ); + } + + + +export default connect(mapStateToProps, mapDispatchToProps)(StoreNonWorkingReasons); \ No newline at end of file diff --git a/PerformicsSrc/src/screens/StoreProfile.js b/PerformicsSrc/src/screens/StoreProfile.js new file mode 100644 index 0000000..9bac8eb --- /dev/null +++ b/PerformicsSrc/src/screens/StoreProfile.js @@ -0,0 +1,497 @@ +import React, { useState, useEffect, memo } from 'react'; +import Container from '../components/container'; +import { useRoute } from '@react-navigation/native'; +import { globalStyles, customStyles, GetPageTheme } from "../styles/Global"; +import { StatusBar, Image, TextInput, View, Text, ScrollView, TouchableOpacity, TouchableHighlight, Platform, PermissionsAndroid, FlatList } from 'react-native'; +import { ReactReduxContext, connect, useSelector, useDispatch } from 'react-redux'; +import { mapStateToProps, mapDispatchToProps } from '../reducers/contextProvider'; +import SQLite from 'react-native-sqlite-2'; +import { notify } from '../components/notify'; +import moment from 'moment'; +import { getDownloadJson, AddStore, checkRange, UploadData2, UploadData, UpdateStoreStatus, getKPIS, marktext1, marktext2, UploadFormData, validateNumber, ValidateEmail } from '../controller/functions'; +import { get_item, set_item, clear_item } from '../components/localStorage'; +import { version, sloganline, appname, testurl, db, AppVersion, common_ImagePath } from '../constants/constants'; +import CustomHeader from '../components/customHeader'; +import { Card } from 'react-native-paper'; +import { AntDesign, Entypo, EvilIcons, Feather, FontAwesome, Fontisto, Ionicons, MaterialCommunityIcons } from '../components/icons'; +import CustomLoader from '../components/CustomLoader'; +import LinearGradient from 'react-native-linear-gradient'; +import NoDataComponent from '../components/NoDataComponent'; +import { SvgXml } from 'react-native-svg'; +import MapIcon from '../assets/performics/map_icon.svg'; +import CustomModal from '../components/CustomModal'; +import { AppTables } from '../constants/tableConstants'; +import { _checkLocationPermission } from '../components/geolocation'; +import Geolocation from 'react-native-geolocation-service'; +import { getAvailblQuery, getIfAvlbl, getIfKPIDone, getQuery, Q_getMyStoresList, Q_MenuList } from '../constants/ConstantQueries'; +import { ConfirmSaveAlert } from '../components/alert'; +import { getFolderName, getMethodName, METHODS } from '../constants/methodNames'; +import { uploadAllData, uploadAllImages, uploadStoreStatus } from '../constants/uploadData'; +import { PrimaryTheme } from '../styles/Themes'; +import NetworkStatusBar from '../components/NetworkStatusBar'; +import * as RNFS from 'react-native-fs'; +import ModalSelector from 'react-native-modal-selector'; + +import CameraImg2 from '../assets/performics/camera_icon.svg'; +import CustomCamera from '../components/Camera'; +import GradientButton from '../components/gradientButton'; +import { CustomPicker, CustomPicker2 } from '../components/CustomPicker'; +import cameraImg from '../assets/performics/camera_front_image.svg' + + +function StoreProfileScreen(props) { + const route = useRoute(); + const ST = props.StaticText || {}; + // get all theme styles acc to current theme set + const PageTheme = GetPageTheme(props.DarkMode, route.name); + const customStyle = customStyles(props.DarkMode, route.name); + + const [loaderTitle, setLoaderTitle] = useState("Loading..."); + const [processing, setProcessing] = useState(false); + const [rerenderdata, setrerenderdata] = useState(0); + const [isAdhocScreen, setIsAdhocScreen] = useState(false); + const [isBeatPlan, setIsBeatPlan] = useState(false); + const [storeData, setStoreData] = useState({}); + + + const [cityList, setCityList] = useState([]); + const [storeTypeList, setStoreTypeList] = useState([]); + const [ChainList, setChainList] = useState([]); + const [StoreCategory, setStoreCategory] = useState([]); + const [StoreClassList, setStoreClassList] = useState([]); + const [DistributorList, setDistributorList] = useState([]); + const [ChannelList, setChannelList] = useState([]); + + const [AllFormData, setAllFormData] = useState({}); + const [showCamera, setShowCamera] = useState(false); + const [showImg, setShowImg] = useState(false); + const [ImgURI, setImgURI] = useState(""); + const [StoreImage, setStoreImage] = useState(''); + const [hasUnsavedChanges, setHasUnsavedChanges] = useState(false); + + const [IsEnableSubmit, setIsEnableSubmit] = useState(false); + + const [isNonMerchan, setIsNonMerchan] = useState(false); + const [isNonProg, setIsNonProg] = useState(false); + + let d1 = new Date(); + let today = moment(d1).format('MM/DD/YYYY'); + + useEffect(() => { + setLoaderTitle(ST.Loading + '...') + let params = props.route.params ? props.route.params : {}; + let storeData1 = params.storeData || {}; + // console.log('storeData1:',storeData1); + let isAdhoc = params.isAdhoc || false; + let isBeat = params.isBeat != null ? params.isBeat : false; + let isNonMerchan1 = params.isNonMerchans != null ? params.isNonMerchans : false; + let isNonProgam = params.isNonProgs != null ? params.isNonProgs : false; + setIsAdhocScreen(isAdhoc); + setIsBeatPlan(isBeat); + setIsNonMerchan(isNonMerchan1); + setIsNonProg(isNonProgam) + setStoreData(storeData1); + + let st2 = Object.assign({ 'test': '1' }, storeData1); + setAllFormData(st2); //Assigning current Store Data to FormData to be filled or changed + + validateForm(true, storeData1); + }, []) + + + async function validateForm(isCheck = false, storeData1 = {}) { + let isValid = true; + let data = isCheck == true ? storeData1 : AllFormData; + let { StoreName, Address, Location, Pincode, ContactPerson, Phone, Mobile, GSTno, Email } = data; + + if (StoreName == '' || StoreName == null) { + isValid = false; + notify('Please enter Store Name', 'SHORT'); + } + else if (Address == '' || Address == null) { + isValid = false; + notify('Please enter Address ', 'SHORT'); + } + else if(GSTno!=null && GSTno!='' && GSTno.length<15){ + isValid=false; + notify('Please Fill correct GST No.','SHORT'); + } + else if (Location == '' || Location == null) { + isValid = false; + notify('Please enter Location ', 'SHORT'); + } + else if (Pincode == '' || Pincode == null) { + isValid = false; + notify('Please enter Pincode ', 'SHORT'); + } + else if (Pincode.length != 6) { + isValid = false; + notify('Please enter valid Pincode ', 'SHORT'); + } + else if ((Phone != null && Phone != '') && Phone.length != 10) { + isValid = false; + notify('Please enter valid Contact Number | Mobile Number', 'SHORT'); + } + // else if((Mobile!=null && Mobile!='') && Mobile.length!=10 ){ + // isValid=false; + // notify('Please enter valid Mobile Number','SHORT'); + // } + else if ((Email != '' && Email != null) && !ValidateEmail(Email)) { + isValid = false; + notify('Please enter valid Email', 'SHORT'); + } + console.log('isValid:', Pincode, isValid); + + if (isCheck == true && isValid == false) { + setIsEnableSubmit(true); + } + return isValid; + } + + + function onStoreDataChange(val, key, type = '') { + + if (val != '') { + let isValid = validateNumber(val, type); + if (!isValid) { + return; + } + } + + let allData = AllFormData; + allData[key] = val; + console.log('onStoreDataChange:', Object.keys(storeData).length) + + if (storeData[key] != val) { + setIsEnableSubmit(true); + } + else { + let i = 0; + for (let key1 in storeData) { + console.log('key1', key1, storeData[key1], allData[key1], storeData[key1] != allData[key1]) + if (storeData[key1] != allData[key1]) { + console.log('enableSUbmitBtn') + setIsEnableSubmit(true); + break; + } + if (i == Object.keys(storeData).length - 1) { + console.log('disableSUbmitBtn') + setIsEnableSubmit(false); + } + i++; + } + } + + setAllFormData(allData); + setHasUnsavedChanges(true); + setrerenderdata(!rerenderdata); + } + + const onSubmitData = async () => { + if (IsEnableSubmit) { + let isValid = await validateForm(); + if (isValid) { + setLoaderTitle('Updating Store Profile!...'); + setProcessing(true); + + + let val = ` ('${storeData.StoreId}', '${AllFormData.StoreName}','${AllFormData.Address}','${AllFormData.GSTno}','${AllFormData.ContactPerson}','${AllFormData.Phone}', '','${AllFormData.Location}','${AllFormData.Pincode}','${AllFormData.Email}','${today}', '${today}')`; + let q = `INSERT INTO ${AppTables.STORE_PROFILE}(STORE_ID ,STORE_NAME ,ADDRESS ,GSTNO ,CONTACT_PERSON ,PHONE ,MOBILE ,LOCATION ,PINCODE , EMAIL ,VISIT_DATE ,ADDED_DATE) + values ${val}`; + db.transaction(function (txn) { + txn.executeSql(`Delete from ${AppTables.STORE_PROFILE} where STORE_ID='${storeData.StoreId}' and VISIT_DATE='${today}'`, [], function (txn1, txnres) { + + txn.executeSql(q, [], function (txn1, txnres) { + console.log('Store Profile is added'); + + + // update data in storeList + let tbname = (isBeatPlan == true ? 'JourneyPlan_RouteWise' : (isAdhocScreen == true ? 'Adhoc_JourneyPlan' : (isNonMerchan == true ? 'NonMerchandising_JourneyPlan' : isNonProg == true ? 'NonProgram_JourneyPlan' : 'Mapping_JourneyPlan'))) + let update_val = `StoreName='${AllFormData.StoreName}',Address='${AllFormData.Address}',GSTno='${AllFormData.GSTno}',ContactPerson='${AllFormData.ContactPerson}',Phone='${AllFormData.Phone}',Mobile='${AllFormData.Mobile}',Location='${AllFormData.Location}',Pincode='${AllFormData.Pincode}',Email='${AllFormData.Email}' `; + let q2 = `Update ${tbname} set ${update_val} where StoreId='${storeData.StoreId}' and VisitDate='${today}' `; + txn.executeSql(q2, [], function (txn1, txnres) { + + console.log('Store Profile is updated'); + setProcessing(false); + gotoDailyMenu(true); + }, function (Etxn, err) { + console.log('err:', err); + notify('Cannot Add Store Profile!'); + setProcessing(false); + }); + }, function (Etxn, err) { + console.log('err:', err); + notify('Cannot Add Store Profile!'); + setProcessing(false); + }); + }, function (Etxn, err) { + console.log('err:', err); + notify('Cannot Add Store Profile!'); + setProcessing(false); + }); + + }); + + } + } + else { + gotoDailyMenu(); + } + } + + const gotoDailyMenu = (updated = false) => { + let data = updated ? AllFormData : storeData; + let s_screen = "StoreDailyMenu" + if (props.ShowStoreChecklist == true) { + s_screen = "StoreChecklist"; + } else if (props.ShowReportAfterCheckIn == true) { + s_screen = "ReportsMenu"; + } + + props.navigation.replace(s_screen, { storeData: data, 'isAdhoc': isAdhocScreen, 'isBeat': isBeatPlan, "isNonMerchans": isNonMerchan, isNonProgs: isNonProg, '_fromStoreWise': true }); + } + + return ( + + {processing && } + + + { setShowCamera(false); getImage(imgData) }} showCamera={showCamera} onHideCamera={() => { setShowCamera(false); }} /> + + + + + Store Profile + + + + {rerenderdata == rerenderdata && + + + + + + {ST.StoreId + ':'} + {storeData.StoreId} + + + {ST.StoreType + ':'} + {storeData.StoreType} + + + + + {ST.StoreCode + ':'} + {storeData.StoreCode == "undefined" ? "" : storeData.StoreCode} + + + + + {'City Name:'} + {storeData.CityName} + + + + + {'Tax Type:'} + {AllFormData.TaxType} + + + + + {'Chain Name:'} + {AllFormData.ChainName} + + + + + {'Channel Id:'} + {AllFormData.ChannelId} + + + + + {'Store Category:'} + {AllFormData.StoreCategory} + + + + + {'Store Class:'} + {AllFormData.StoreClass} + + + + + + + {"Name"} + + { onStoreDataChange(val, 'StoreName', 'text') }} + /> + + + + {"Address"} + + { onStoreDataChange(val, 'Address', 'text') }} + /> + + + + {"GST No"} + + { + // Remove all non-alphanumeric characters + const cleaned = val.replace(/[^a-zA-Z0-9]/g, ''); + onStoreDataChange(cleaned, 'GSTno', 'text'); + }} + maxLength={15} + /> + + + + {"Location"} + + { onStoreDataChange(val, 'Location', 'text') }} + /> + + + + {"Pin Code"} + + { onStoreDataChange(val, 'Pincode', 'numeric') }} + /> + + + + {"Contact Person"} + + { onStoreDataChange(val, 'ContactPerson', 'text') }} + /> + + + + {"Contact Number | Mobile Number"} + + { onStoreDataChange(val, 'Phone', 'numeric') }} + /> + + + {/* + {"Mobile Number"} + + {onStoreDataChange(val,'Mobile','numeric')}} + /> + + */} + + {"Email"} + + { onStoreDataChange(val, 'Email', 'text') }} + /> + + + + + + } + + + + + {!IsEnableSubmit && + + { gotoDailyMenu() }} style={customStyle.SChk_BtnSave} /> + + } + {IsEnableSubmit && + + { gotoDailyMenu() }} style={customStyle.SChk_BtnSave} disabled={true} colors={[PageTheme.$tertiary_color, PageTheme.$tertiary_color]} /> + + } + + + {/* {!IsEnableSubmit && + + {onSubmitData()}} style={customStyle.SChk_BtnSave} disabled={true} colors={[PageTheme.$tertiary_color,PageTheme.$tertiary_color]}/> + + } + */} + + { onSubmitData() }} style={customStyle.SChk_BtnSave} /> + + + + + + + ); +} + + + +export default connect(mapStateToProps, mapDispatchToProps)(StoreProfileScreen); \ No newline at end of file diff --git a/PerformicsSrc/src/screens/StoreProfileKyc.js b/PerformicsSrc/src/screens/StoreProfileKyc.js new file mode 100644 index 0000000..7ebf6f7 --- /dev/null +++ b/PerformicsSrc/src/screens/StoreProfileKyc.js @@ -0,0 +1,566 @@ +import React, { useState, useEffect, memo } from 'react'; +import Container from '../components/container'; +import { useRoute } from '@react-navigation/native'; +import { globalStyles, customStyles, GetPageTheme } from "../styles/Global"; +import { StatusBar, Image, TextInput, View, Text, ScrollView, TouchableOpacity, TouchableHighlight, Platform, DeviceEventEmitter, PermissionsAndroid, FlatList, Keyboard, StyleSheet, Modal } from 'react-native'; +import { ReactReduxContext, connect, useSelector, useDispatch } from 'react-redux'; +import { mapStateToProps, mapDispatchToProps } from '../reducers/contextProvider'; +import SQLite from 'react-native-sqlite-2'; +import { notify } from '../components/notify'; +import moment from 'moment'; +import { getDownloadJson, AddStore, checkRange, UploadData2, UploadData, UpdateStoreStatus, getKPIS, marktext1, marktext2, UploadFormData, validateNumber, ValidateEmail, restore_ImageWithMetaDataGst } from '../controller/functions'; +import { get_item, set_item, clear_item } from '../components/localStorage'; +import { version, sloganline, appname, testurl, db, AppVersion, common_ImagePath, kycImagePath } from '../constants/constants'; +import CustomHeader from '../components/customHeader'; +import { Card } from 'react-native-paper'; +import { AntDesign, Entypo, EvilIcons, Feather, FontAwesome, Fontisto, Ionicons, MaterialCommunityIcons } from '../components/icons'; +import CustomLoader from '../components/CustomLoader'; +import LinearGradient from 'react-native-linear-gradient'; +import CustomModal from '../components/CustomModal'; +import { AppTables } from '../constants/tableConstants'; +import { _checkLocationPermission } from '../components/geolocation'; +import * as RNFS from 'react-native-fs'; + +import CameraImg2 from '../assets/performics/camera_icon.svg'; +import CameraImg3 from '../assets/performics/camera_tick.svg'; +import CustomCamera from '../components/Camera'; +import GradientButton from '../components/gradientButton'; +import CameraImg from '../assets/performics/camera_front_image.svg' +import ImageViewer from 'react-native-image-zoom-viewer'; + + + +function StoreProfileKyc(props) { + const route = useRoute(); + const ST = props.StaticText || {}; + // get all theme styles acc to current theme set + const PageTheme = GetPageTheme(props.DarkMode, route.name); + const customStyle = customStyles(props.DarkMode, route.name); + + const [loaderTitle, setLoaderTitle] = useState("Loading..."); + const [processing, setProcessing] = useState(false); + const [rerenderdata, setrerenderdata] = useState(0); + const [isAdhocScreen, setIsAdhocScreen] = useState(false); + const [isBeatPlan, setIsBeatPlan] = useState(false); + const [storeData, setStoreData] = useState({}); + + + + const [AllFormData, setAllFormData] = useState({}); + const [showCamera, setShowCamera] = useState(false); + const [showImg, setShowImg] = useState(false); + const [ImgURI, setImgURI] = useState(""); + const [StoreImage, setStoreImage] = useState(''); + const [hasUnsavedChanges, setHasUnsavedChanges] = useState(false); + + const [IsEnableSubmit, setIsEnableSubmit] = useState(false); + + const [isNonMerchan, setIsNonMerchan] = useState(false); + const [isNonProg, setIsNonProg] = useState(false); + const [StoreImgPath, setStoreImgPath] = useState(''); + const [SelectedImg, setSelectedImg] = useState(''); + const [rerenderdata2, setrerenderdata2] = useState(0); + const [showModal, setShowModal] = useState(false); + const [modalVisible, setModalVisible] = useState(false); + + let d1 = new Date(); + let today = moment(d1).format('MM/DD/YYYY'); + + useEffect(() => { + setLoaderTitle(ST.Loading + '...') + + + let params = props.route.params ? props.route.params : {}; + let storeData1 = params.storeData || {}; + // console.log('storeData1:',storeData1); + let isAdhoc = params.isAdhoc || false; + let isBeat = params.isBeat != null ? params.isBeat : false; + let isNonMerchan1 = params.isNonMerchans != null ? params.isNonMerchans : false; + let isNonProgam = params.isNonProgs != null ? params.isNonProgs : false; + setIsAdhocScreen(isAdhoc); + setIsBeatPlan(isBeat); + setIsNonMerchan(isNonMerchan1); + setIsNonProg(isNonProgam) + setStoreData(storeData1); + + let st2 = Object.assign({ 'test': '1' }, storeData1); + console.log("gstdetails:", st2) + setAllFormData(st2); //Assigning current Store Data to FormData to be filled or changed + + // validateForm(true,storeData1); + + + const onImageCapturedSubs = DeviceEventEmitter.addListener('onImageCaptured', (imgData) => { getImage(imgData) }); + return function cleanup() { + onImageCapturedSubs.remove(); + }; + + + }, []) + + + async function validateForm(isCheck = false, storeData1 = {}) { + let isValid = true; + let data = isCheck == true ? storeData1 : AllFormData; + let { StoreName, Address, Location, Pincode, ContactPerson, Phone, Mobile, GSTno, GSTImage, Email } = data; + + + if ((GSTno == '' || GSTno == null) && (GSTImage == '' || GSTImage == null)) { + console.log("gstnumberai--", GSTno) + isValid = false; + notify('Please provide either GST No. or GST Image.', 'SHORT'); + } + + else if (GSTno && GSTno.trim().length < 15) { + isValid = false; + notify('GST No. must be at least 15 characters long.', 'SHORT') + + } + + else if (GSTno) { + const trimmedGST = GSTno.trim().toUpperCase(); + const gstRegex = /^[0-9]{2}[A-Z]{5}[0-9]{4}[A-Z]{1}[1-9A-Z]{1}Z[0-9A-Z]{1}$/; + + if (trimmedGST.length !== 15) { + isValid = false; + notify('GST No. must be exactly 15 characters long.', 'SHORT'); + } + } + else { + isValid = true; // Valid if either GSTno or ImageName is present + } + + if (isCheck == true && isValid == false) { + setIsEnableSubmit(true); + } + return isValid; + } + + + const onStoreDataChange = (value, key, type) => { + setAllFormData((prevState) => { + console.log(`onStoreDataChange - Updating ${key} with value:`, value); + console.log("Previous AllFormData in onStoreDataChange:", prevState); + const updatedState = { + ...prevState, + [key]: value, + }; + console.log("Updated AllFormData in onStoreDataChange:", updatedState); + return updatedState; + }); + }; + + + const onSubmitData = async () => { + Keyboard.dismiss(); + console.log("Allformdataa:", AllFormData) + console.log("IsEnableSubmit:", IsEnableSubmit) + // if(IsEnableSubmit){ + let isValid = await validateForm(); + if (!isValid) { + return; + } + if (isValid) { + + setLoaderTitle('Updating Store Profile!...'); + setProcessing(true); + + + let val = ` ('${storeData.StoreId}', '${AllFormData.StoreName}','${AllFormData.Address}','${AllFormData.GSTno}','${AllFormData.GSTImage}','${AllFormData.ContactPerson}','${AllFormData.Phone}', '${AllFormData.Mobile}','${AllFormData.Location}','${AllFormData.Pincode}','${AllFormData.Email}','${today}', '${today}')`; + let q = `INSERT INTO ${AppTables.STORE_PROFILE_KYC}(STORE_ID ,STORE_NAME ,ADDRESS ,GSTNO,IMAGE,CONTACT_PERSON ,PHONE ,MOBILE ,LOCATION ,PINCODE , EMAIL ,VISIT_DATE ,ADDED_DATE) + values ${val}`; + db.transaction(function (txn) { + txn.executeSql(`Delete from ${AppTables.STORE_PROFILE_KYC} where STORE_ID='${storeData.StoreId}' and VISIT_DATE='${today}'`, [], function (txn1, txnres) { + + txn.executeSql(q, [], function (txn1, txnres) { + console.log('Store Profile is added'); + + + // update data in storeList + let tbname = (isBeatPlan == true ? 'JourneyPlan_RouteWise' : (isAdhocScreen == true ? 'Adhoc_JourneyPlan' : (isNonMerchan == true ? 'NonMerchandising_JourneyPlan' : isNonProg == true ? 'NonProgram_JourneyPlan' : 'Mapping_JourneyPlan'))) + let update_val = `StoreName='${AllFormData.StoreName}',Address='${AllFormData.Address}',GSTno='${AllFormData.GSTno}',GSTImage='${AllFormData.GSTImage}',ContactPerson='${AllFormData.ContactPerson}',Phone='${AllFormData.Phone}',Mobile='${AllFormData.Mobile}',Location='${AllFormData.Location}',Pincode='${AllFormData.Pincode}',Email='${AllFormData.Email}' `; + let q2 = `Update ${tbname} set ${update_val} where StoreId='${storeData.StoreId}' and VisitDate='${today}' `; + txn.executeSql(q2, [], function (txn1, txnres) { + + console.log('Store Profile Kyc is updated'); + setProcessing(false); + gotoDailyMenu(true); + + }, function (Etxn, err) { + console.log('err:', err); + notify('Cannot Add Store Profile Kyc!'); + setProcessing(false); + }); + }, function (Etxn, err) { + console.log('err:', err); + notify('Cannot Add Store Profile Kyc!'); + setProcessing(false); + }); + }, function (Etxn, err) { + console.log('err:', err); + notify('Cannot Add Store Profile!'); + setProcessing(false); + }); + + }); + + } + // } + else { + gotoDailyMenu(); + + } + } + + async function openCamera() { + // setShowCamera(true); + props.navigation.navigate('CameraScreen', { 'getImage': getImage, 'cameraType': (props.CheckinOpenBackCamera ? 'back' : 'back'), 'CheckInCameraGallery': props.CheckInCameraGallery, storeData: storeData, enableCameraFlip: (props.CheckInSwitchingCamera ? true : false) }) + } + + async function getImage(imgdata) { + try { + if (typeof imgdata === 'object' && imgdata.errorCode === 'camera_unavailable') { + notify(ST.Cameraunavailable); + return; + } + + if (typeof imgdata === 'object' && imgdata.uri != null) { + const img = imgdata; + const storeDataDetail = imgdata.storeData || {}; + const imgurl = img.uri, + imgWidth = img.width, + imgHeight = img.ExtendedHeight; + const isImgFromGallery = img.fromGallery != null ? img.fromGallery : false; + const picture_clickedd = isImgFromGallery ? img.datetime : new Date(); + const picture_clicked_time = moment(picture_clickedd).format('MM-DD-YYYY HH:mm:ss'); + const picture_clicked_time_for_pic_name = moment(picture_clickedd).format('MMDDYYYY_HHmmss'); + + console.log("time", picture_clicked_time); + console.log("time1", picture_clicked_time_for_pic_name); + let calculate_tym_date_for_filename = picture_clicked_time_for_pic_name; + let calculate_tym_date_over_img = picture_clicked_time; + + const filename = storeDataDetail.StoreId + "_" + (props.UserId || '') + '_KycStoreImg-' + calculate_tym_date_for_filename + '.jpg'; + console.log(filename, "file_name", "Store_data", storeDataDetail); + + const mark_text1 = calculate_tym_date_over_img; + const mark_text2 = + 'Store Id : ' + storeDataDetail?.StoreId + + ' User Id:' + props.UserId + ' | Image Type: Kyc Store Img' + ' | Date:' + calculate_tym_date_over_img; + console.log(mark_text1 + "\n" + mark_text2, "mark_text2"); + + setStoreImage(filename); + + const imagePath = `${kycImagePath}${filename}`; + console.log("checkin imgurl:", imagePath, imgurl); + + await RNFS.copyFile(imgurl, imagePath); + + // Render data with clicked image + const uri = 'file://' + imagePath; + setStoreImgPath(uri); + setSelectedImg(uri); + + // Update AllFormData while preserving GSTno + setAllFormData((prevState) => { + console.log("Previous AllFormData:", prevState); // Debug previous state + return { + ...prevState, + GSTImage: filename, + GSTImagePath: uri, + GSTno: prevState.GSTno || '', // Ensure GSTno is preserved + }; + }); + + // onStoreDataChange(uri, 'GSTImage'); // Call after updating AllFormData + + // Add metadata, resize image, and restore to imagePath + const restore_data = { + destFilePath: imagePath, + imgurl: imgurl, + imgWidth, + imgHeight, + mark_text1, + mark_text2, + }; + const is_restored = await restore_ImageWithMetaDataGst(restore_data, imgdata); + console.log("image restored:", is_restored); + + setrerenderdata2(!rerenderdata2); + } + } catch (err) { + console.log('ERROR: image file write failed!!!', err); + console.log(err.message, err.code); + notify("Error processing image!"); + } + } + + const gotoDailyMenu = (updated = false) => { + let data = updated ? AllFormData : storeData; + + let s_screen = "StoreDailyMenu" + if (props.ShowStoreChecklist == true) { + s_screen = "StoreChecklist"; + } else if (props.ShowReportAfterCheckIn == true) { + s_screen = "ReportsMenu"; + } + props.navigation.replace(s_screen, { storeData: data, 'isAdhoc': isAdhocScreen, 'isBeat': isBeatPlan, "isNonMerchans": isNonMerchan, isNonProgs: isNonProg , '_fromStoreWise': true}); + } + + function _OpenCaptureImage_Modal(img) { + const isImageCap = (img != '' || img != null) ? true : false; + let camera2Label = 'test'; + return ( + + { + isImageCap && + + + + + { openCamera() }}> + + + + { + { cancelImage(false) }}> + {ST.Close} + + } + + } + + ) + } + + function _render_captureImage() { + + const isImageAvlbl = StoreImage != '' && StoreImage != null && StoreImgPath != '' && StoreImgPath != null; + + return ( + + + { isImageAvlbl ? OpenImgModal(StoreImgPath) : openCamera() }}> + {!isImageAvlbl && } + {isImageAvlbl && } + + {/* {isImageAvlbl && } */} + {ST.ClickStoreFrontImage} + + + + ); + } + + return ( + + {processing && } + + {_OpenCaptureImage_Modal()} + {_render_captureImage()} + { setShowCamera(false); getImage(imgData); onStoreDataChange(imgData, 'GSTImage', 'image'); }} showCamera={showCamera} onHideCamera={() => { setShowCamera(false); }} /> + + + + + Store Profile KYC + + + + {rerenderdata == rerenderdata && + + + + + + {ST.StoreId + ':'} + {storeData.StoreId} + + + {ST.StoreType + ':'} + {storeData.StoreType} + + + + + {ST.StoreCode + ':'} + {storeData.StoreCode == "undefined" ? "" : storeData.StoreCode} + + + + + {'City Name:'} + {storeData.CityName} + + + + + {'Tax Type:'} + {AllFormData.TaxType} + + + + + {'Chain Name:'} + {AllFormData.ChainName} + + + + + {'Channel Id:'} + {AllFormData.ChannelId} + + + + + {'Store Category:'} + {AllFormData.StoreCategory} + + + + + {'Store Class:'} + {AllFormData.StoreClass} + + + + + + + + {"GST No"} + + { + const cleanVal = val.replace(/[^a-zA-Z0-9]/g, '').toUpperCase(); + onStoreDataChange(cleanVal, 'GSTno', 'text') + }} + autoCapitalize="characters" + maxLength={15} + /> + + + + + + {"GST Image"} + { openCamera() }}> + + {AllFormData.GSTImage ? : +} + + + + {/* ✅ Show selected image if available */} + {console.log("allformdataaaa:", AllFormData)} + {AllFormData.GSTImage && ( + setModalVisible(true)}> + + + )} + + + + + + + + } + + + + + + + { onSubmitData() }} style={customStyle.SChk_BtnSave} /> + + + + + + setModalVisible(false)}> + + {AllFormData.GSTImage ? ( + setModalVisible(false)} + enableImageZoom + backgroundColor="transparent" + // loadingRender={() => } + onError={(error) => console.log("ImageViewer error:", error)} + /> + ) : ( + + Image not available + + )} + setModalVisible(false)} + > + + Close + + + + + ); +} + + +const styles = StyleSheet.create({ + modalContainer: { + flex: 1, + backgroundColor: 'rgba(0, 0, 0, 0.8)', // Semi-transparent black background + }, + closeButton: { + position: 'absolute', + top: 40, + right: 20, + backgroundColor: '#fff', + padding: 10, + borderRadius: 20, + zIndex: 10, // Ensure button is above ImageViewer + }, + closeButtonText: { + fontSize: 16, + color: '#000', + fontWeight: 'bold', + }, +}); + +export default connect(mapStateToProps, mapDispatchToProps)(StoreProfileKyc); \ No newline at end of file diff --git a/PerformicsSrc/src/screens/StoreReport.js b/PerformicsSrc/src/screens/StoreReport.js new file mode 100644 index 0000000..ba6be6c --- /dev/null +++ b/PerformicsSrc/src/screens/StoreReport.js @@ -0,0 +1,313 @@ +import React,{useState,useEffect} from 'react'; +import Container from '../components/container'; +import { useRoute } from '@react-navigation/native'; +import { globalStyles,customStyles,GetPageTheme } from "../styles/Global"; +import {StatusBar,Image,TextInput,View,Text,ScrollView,TouchableOpacity,Platform,PermissionsAndroid,FlatList} from 'react-native'; +import { ReactReduxContext,connect,useSelector, useDispatch } from 'react-redux'; +import { mapStateToProps,mapDispatchToProps } from '../reducers/contextProvider'; +import SQLite from 'react-native-sqlite-2'; +import {notify} from '../components/notify'; +import moment from 'moment'; +import {getDownloadJson,DownloadData, getDownloadJson1} from '../controller/functions'; +import {get_item,set_item,clear_item} from '../components/localStorage'; +import {version,sloganline,appname,testurl, db} from '../constants/constants'; +import CustomHeader from '../components/customHeader'; +import {Card} from 'react-native-paper'; +import {AntDesign} from '../components/icons'; +import { WebView } from 'react-native-webview'; +import CustomLoader from '../components/CustomLoader'; +import NoDataComponent from '../components/NoDataComponent'; +import LinearGradient from 'react-native-linear-gradient'; +import { getFolderName, getMethodName, METHODS } from '../constants/methodNames'; +import GradientButton from '../components/gradientButton'; + +function StoreReport(props) { + const route = useRoute(); + const ST=props.StaticText || {}; + // get all theme styles acc to current theme set + const PageTheme=GetPageTheme(props.DarkMode,route.name); + const customStyle=customStyles(props.DarkMode,route.name); + + + const [processing, setProcessing] = useState(true); + const [isDataFound, setisDataFound] = useState(false); + const [reportData, setReportData] = useState([]); + const [aggrData, setAggrData] = useState({}); + const [cols, setcols] = useState([]); + const [colWidth, setColWidth] = useState('100%'); + const [currentReportMenu, setCurrentReportMenu] = useState({}); + const [designation, setDesignation] = useState(''); + const d1=new Date(); + const d2=moment(d1).format('MM/DD/YYYY'); + + + const [isAdhocScreen, setIsAdhocScreen] = useState(false); + const [isBeatPlan, setIsBeatPlan] = useState(false); + const [storeData, setStoreData] = useState({}); + const [isNonMerchan, setIsNonMerchan] = useState(false); + const [isNonProg, setIsNonProg] = useState(false); + + useEffect(() => { + let params=props.route.params? props.route.params:{}; + let ReportMenu=params.ReportData || {}; + + let storeData1=params.storeData || {}; + let isAdhoc=params.isAdhoc || false; + let isBeat=params.isBeat!=null? params.isBeat : false; + let isNonMerchan1=params.isNonMerchans!=null? params.isNonMerchans : false; + let isNonProgam=params.isNonProgs!=null? params.isNonProgs : false; + setIsAdhocScreen(isAdhoc); + setIsBeatPlan(isBeat); + setIsNonMerchan(isNonMerchan1); + setIsNonProg(isNonProgam) + setStoreData(storeData1); + console.log("storeData-------",storeData.StoreName) + setCurrentReportMenu(ReportMenu); + getData(storeData1); + }, []); + + + async function getData(storeData1){ + try { + + let ReportDataStr= await get_item('Report_AferCheckIn'); + let ReportDataJson= (ReportDataStr && ReportDataStr && await JSON.parse(ReportDataStr))||[]; + // let allReportData= await DownloadReport(ReportMenu); + let allReportData = ReportDataJson.filter((item)=>item.StoreId==storeData1.StoreId); + console.log('allReportData',allReportData,storeData1.StoreId); + if(allReportData.length>0){ + let data=allReportData[0]; + console.log('data',data); + if(data && data){ + let ConfigStr=data?.Config + let config=ConfigStr && ConfigStr && JSON.parse(ConfigStr) + setCurrentReportMenu(config) + } + if(data.ReportValue!=null && data.ReportValue!=''){ + let TotalIndex=allReportData.findIndex(i=>i.ReportValue=='Total'); + console.log('TotalIndex:',TotalIndex) + if(TotalIndex>=0){ + let aggrgateData=allReportData[TotalIndex]; + console.log('aggrgateData',aggrgateData); + setAggrData(aggrgateData); + let newReports=allReportData + newReports.splice(TotalIndex,1); + console.log('newReports',newReports); + setReportData(newReports); + } + else{ + setReportData(allReportData); + } + } + else{ + setReportData(allReportData); + } + + + let allCols=[]; + let i=0; + let keylen=Object.keys(data).length; + + + for(let key in data){ + let obj={'actual_colname':key}; + let colname=key.replace(/[$$]/g,' ').replace(/Percent/g,'%'); + obj['colname']=colname; + let dontShowCol=(colname=='Srno' || colname=='ReportValue'); + if(!dontShowCol){ + allCols.push(obj); + } + + if(i==keylen-1){ + console.log('allCols:',allCols); + setcols(allCols); + let colLen=allCols.length; + let width=94/colLen; + setColWidth(width+'%'); + } + i++; + } + + + + setProcessing(false); + setisDataFound(true); + } + else{ + notify('No data found'); + setProcessing(false); + } + + } catch (err) { + setProcessing(false); + console.log(err); + } + } + + async function DownloadReport(ReportMenu){ + let downloadKey=ReportMenu.DownloadKey; + let loginInfo = await get_item('loginInfo'); + const loginDetails = JSON.parse(loginInfo); + const url=props.baseurl+getMethodName(METHODS.DOWNLOADJSON_METHOD); + let data={ + Downloadtype:downloadKey, + Username: loginDetails.UserId, + Param1: '', + Param2: Platform.OS=="ios"?"iOS":"Android", + }; + + console.log(url,data); + return await getDownloadJson1(url,data) + .then(async(res)=>{ + if (res[downloadKey]) { + let data_arr = res[downloadKey] || []; + return data_arr; + } + else{ + return []; + } + }) + .catch((err)=>{ + console.log('onPage Team error',err); + return []; + }); + } + + + const gotoDailyMenu = ()=>{ + props.navigation.replace('StoreDailyMenu',{storeData:storeData,'isAdhoc':isAdhocScreen,'isBeat':isBeatPlan,"isNonMerchans":isNonMerchan,isNonProgs:isNonProg}); + } + + return ( + + {processing && } + + + + + {`Store Name: ${storeData.StoreName}`} + + { !props.isDataDownloaded && } + { props.isDataDownloaded==true && + + + { isDataFound==false && + + {ST.NoDataAvailable} + + } + + { + isDataFound==true && + + + {currentReportMenu.ReportType=='Tabular' && + + + + + {cols?.map((col,colindex)=>{ + if(col.actual_colname=="Config" || col.actual_colname=="StoreId"){ + return + } + return ( + + {col.actual_colname} + + ) + }) + } + + + { + reportData?.length>0 && + reportData?.map((item,index)=>{ + return( + + {cols.map((col,colindex)=>{ + if(col.actual_colname=="Config" || col.actual_colname=="StoreId"){ + return + } + return ( + + {col.actual_colname!=null?item[col.actual_colname]:''} + + ) + }) + } + + ) + }) + } + + + } + + { + currentReportMenu.ReportType=='Card' && + + + {Object.keys(aggrData).length>0 && + + + {'Total'} + + + {cols.map((col,colindex)=>{ + let colindex1=colindex; + return ( + + {col.colname+' :'} + {col.colname!=null?aggrData[col.actual_colname]:''} + + ) + }) + } + + + } + { + reportData.length>0 && + reportData.map((item,index)=>{ + let isEvenRow=index%2!=0; + return( + + {cols.map((col,colindex)=>{ + let colindex1=colindex; + return ( + + {col.colname+' :'} + {col.colname!=null?item[col.actual_colname]:''} + + ) + }) + } + + ) + }) + } + + + } + + } + + {gotoDailyMenu()}} style={customStyle.SChk_BtnSave } /> + + + } + + + + + ); + } + + + +export default connect(mapStateToProps, mapDispatchToProps)(StoreReport); \ No newline at end of file diff --git a/PerformicsSrc/src/screens/StoreScore.js b/PerformicsSrc/src/screens/StoreScore.js new file mode 100644 index 0000000..dc02e65 --- /dev/null +++ b/PerformicsSrc/src/screens/StoreScore.js @@ -0,0 +1,191 @@ +import React,{useState,useEffect} from 'react'; +import Container from '../components/container'; +import { useRoute } from '@react-navigation/native'; +import { globalStyles,customStyles,GetPageTheme } from "../styles/Global"; +import {StatusBar,Image,TextInput,View,Text,ScrollView,TouchableOpacity,Platform,PermissionsAndroid,FlatList} from 'react-native'; +import { ReactReduxContext,connect,useSelector, useDispatch } from 'react-redux'; +import { mapStateToProps,mapDispatchToProps } from '../reducers/contextProvider'; +import SQLite from 'react-native-sqlite-2'; +import {notify} from '../components/notify'; +import moment from 'moment'; +import {getDownloadJson,DownloadData} from '../controller/functions'; +import {get_item,set_item,clear_item} from '../components/localStorage'; +import {version,sloganline,appname,testurl, db} from '../constants/constants'; +import CustomHeader from '../components/customHeader'; +import {Card} from 'react-native-paper'; +import {AntDesign} from '../components/icons'; +import { WebView } from 'react-native-webview'; +import CustomLoader from '../components/CustomLoader'; +import NoDataComponent from '../components/NoDataComponent'; +import LinearGradient from 'react-native-linear-gradient'; + +function StoreScore(props) { + const route = useRoute(); + const ST=props.StaticText || {}; + // get all theme styles acc to current theme set + const PageTheme=GetPageTheme(props.DarkMode,route.name); + const customStyle=customStyles(props.DarkMode,route.name); + + + const [processing, setProcessing] = useState(true); + const [loaderTitle, setLoaderTitle] = useState(); + const [isAdhocScreen, setIsAdhocScreen] = useState(false); + const [storeData, setStoreData] = useState({}); + const [StoreCameraAllow, setStoreCameraAllow] = useState(true); + const [CalculatedPercent, setCalculatedPercent] = useState(0); + const [TotalScore, setTotalScore] = useState(0); + const [currentMenu, setCurrentMenu] = useState({}); + + + const [reportData, setReportData] = useState([]); + const [designation, setDesignation] = useState(''); + + const d1=new Date(); + const d2=moment(d1).format('MM/DD/YYYY'); + + + useEffect(() => { + console.log('CategoryExec:'); + setLoaderTitle(ST.Loading+'...') + let params=props.route.params? props.route.params:{}; + let storeData1=params.storeData || {}; + let menu1=params.menu || {}; + let cameraAllow=storeData1.CameraAllow=='true' || storeData1.CameraAllow==1?true:false; + setStoreCameraAllow(cameraAllow); + + let isAdhoc=params.isAdhoc || false; + setIsAdhocScreen(isAdhoc); + setStoreData(storeData1); + setCurrentMenu(menu1); + + getData(storeData1,menu1); + + }, []); + + + async function getData(storeData1,menu1){ + try { + console.log('reportData:1'); + let loginInfo=await get_item('loginInfo'); + const loginDetails=JSON.parse(loginInfo); + let desg=loginDetails.Designation || ''; + setDesignation(desg); + await db.transaction(async function (txn) { + let q=`SELECT * from Report_ComplianceScore where StoreId='${storeData1.StoreId}'`;//54975 + await txn.executeSql(q,[],async function (txn2, txnres) { + if(txnres.rows.length>0){ + let arr=[],totalScore=0,maxScorePerRow=10; + for(var i=0;i + {processing && } + + + + + + {'Previous Audit Score'} + + + { !props.isDataDownloaded && } + { true && + + + + {ST.Kpi} + + + {'Question Category'} + + + {'Obtain Score'} + + + + + + { + reportData.length>0 && + reportData.map((item,index)=>{ + let imgPath=item.WindowIcon!=null && item.WindowIcon!=''?item.IconPath+item.WindowIcon:''; + let colorCode=item ? ( item.Score==5? "#FFBF00":item.Score==0?"#ff0000":item.Score==10?"#32CD32":"") :"" + return( + + + {imgPath!='' && } + {item.KPI} + + + {item.Name} + + + {item.Score} + + + ) + }) + } + + + + + + + + {'Calculated :'} + 75? "#32CD32":"red"}]}>{CalculatedPercent+'%'} + + + {'Total Score :'} + {TotalScore} + + + + + } + + + + + ); +} + + + +export default connect(mapStateToProps, mapDispatchToProps)(StoreScore); \ No newline at end of file diff --git a/PerformicsSrc/src/screens/SurveyCat.js b/PerformicsSrc/src/screens/SurveyCat.js new file mode 100644 index 0000000..751f023 --- /dev/null +++ b/PerformicsSrc/src/screens/SurveyCat.js @@ -0,0 +1,181 @@ +import React, { useState, useEffect, useRef } from 'react'; +import Container from '../components/container'; +import { useRoute } from '@react-navigation/native'; +import { customStyles, GetPageTheme, STATUSBAR_HEIGHT } from "../styles/Global"; +import { Image, TextInput, View, Text, ScrollView, TouchableOpacity, Platform, FlatList, Alert, Animated } from 'react-native'; +import { connect } from 'react-redux'; +import { mapStateToProps, mapDispatchToProps } from '../reducers/contextProvider'; +import { notify } from '../components/notify'; +import moment from 'moment'; +import { get_item, set_item, clear_item } from '../components/localStorage'; +import { db, } from '../constants/constants'; +import CustomHeader from '../components/customHeader'; +import CustomLoader from '../components/CustomLoader'; +import LinearGradient from 'react-native-linear-gradient'; +import { AppTables } from '../constants/tableConstants'; +import { AntDesign } from '../components/icons'; +import { checkIf_surveyCatDone } from '../constants/ConstantQueries'; + +function SurveyCat(props) { + const route = useRoute(); + const ST = props.StaticText || {}; + // get all theme styles acc to current theme set + const PageTheme = GetPageTheme(props.DarkMode, route.name); + const customStyle = customStyles(props.DarkMode, route.name); + const [processing, setProcessing] = useState(true); + const [loaderTitle, setLoaderTitle] = useState(); + const [isAdhocScreen, setIsAdhocScreen] = useState(false); + const [isBeatPlan, setIsBeatPlan] = useState(false); + const [storeData, setStoreData] = useState({}); + const [currentMenu, setCurrentMenu] = useState({}); + const [surveys, setSurveys] = useState([]); + const [ActiveSurvey, setActiveSurvey] = useState({}); + const d1 = new Date(); + const d2 = moment(d1).format('MM/DD/YYYY'); + const delay = (ms) => new Promise(resolve => setTimeout(resolve, ms)); + + useEffect(() => { + setLoaderTitle(ST.Loading + '...') + let params = props.route.params ? props.route.params : {}; + let storeData1 = params.storeData || {}; + let surveydata = params.surveyData || {}; + let menu1 = params.menu || {}; + let isAdhoc = params.isAdhocScreen || false; + let isBeat = params.isBeat != null ? params.isBeat : false; + let bgRedirFlag = params.redirect || false; + let BgNavData = params.BgNavData || {}; + setIsAdhocScreen(isAdhoc); + setIsBeatPlan(isBeat); + setStoreData(storeData1); + setActiveSurvey(surveydata) + setCurrentMenu(menu1); + getData(surveydata, storeData1); + navigateautoSurveyView(props, params) + + const willFocusSubscription = props.navigation.addListener('focus', () => { + getData(surveydata, storeData1); + }); + + return willFocusSubscription; + + }, []); + + + useEffect(() => { + console.log('on AutoGoToPrev change', props.AutoGoToPrev); + if (props.AutoGoToPrev == true) { + let params = props.route.params ? props.route.params : {}; + let storeData1 = params.storeData || {}; + let surveydata = params.surveyData || {}; + getData(surveydata, storeData1, true); + } + }, [props.AutoGoToPrev]); + + + async function navigateautoSurveyView(props, params) { + let storeData1 = params.storeData || {}; + let surveydata = params.surveyData || {}; + let menu1 = params.menu || {}; + let isAdhoc = params.isAdhocScreen || false; + let isBeat = params.isBeat != null ? params.isBeat : false; + let windData = await get_item('storeData') + if (windData != null && windData != '') { + let StoreJson = JSON.parse(windData) + let { CategoryInfo } = StoreJson + console.log("windData in promooo1111:", CategoryInfo); + await delay(400); // 1 second delay + props.navigation.navigate('SurveyView', { + 'surveyData': surveydata, 'catData': CategoryInfo, 'storeData': storeData1, + 'menu': menu1, 'isAdhocScreen': isAdhoc, 'isBeat': isBeat, 'ShowCat': true + }); + } + } + + async function getData(surveydata, storeData1, isAutoBack = false) { + try { + + let { StoreId, ChainId, StateId, StoreTypeId } = storeData1; + + await db.transaction(async function (txn) { + let q2 = `SELECT DISTINCT T.Category,T.CategoryId , T.CategorySequence FROM Master_SurveyQuestion T INNER JOIN Mapping_Survey M ON T.SurveyId=M.SurveyId WHERE M.StoreId='${StoreId}' and T.SurveyId='${surveydata.SurveyId}' order by T.CategorySequence`; + await txn.executeSql(q2, [], async function (txn2, txnres) { + console.log('survey cats:', txnres.rows.length); + if (txnres.rows.length > 0) { + let arr = [], isAllSurveyDone = true; + for (var i = 0; i < txnres.rows.length; i++) { + let data = txnres.rows.item(i); + let isDone = await checkIf_surveyCatDone(storeData1, surveydata.SurveyId, data.CategoryId, true) + data['isDone'] = isDone; + arr.push(data); + if (!isDone) { + isAllSurveyDone = false; + } + if (i == txnres.rows.length - 1) { + setSurveys(arr); + setProcessing(false); + //console.log('isAllSurveyDone cat :',isAllSurveyDone,props.AutoGoToPrev,isAutoBack) + if (isAllSurveyDone == true && props.AutoGoToPrev == true && isAutoBack == true) { + props.navigation.goBack(); + } + } + } + } + + }, function (txnE, txnerr) { console.log(txnerr); },); + + }); + } catch (err) { + console.log(err); + } + } + + + + function openSurveyView(item) { + props.set_autoback({ 'AutoGoToPrev': false }); + console.log("item00000", item); + props.navigation.navigate('SurveyView', { 'surveyData': ActiveSurvey, 'catData': item, 'storeData': storeData, 'menu': currentMenu, 'isAdhocScreen': isAdhocScreen, 'isBeat': isBeatPlan, 'ShowCat': true }); + } + + + return ( + + {processing && } + + + + + + {(ActiveSurvey.SurveyName != null ? (ActiveSurvey.SurveyName.length > 26 ? ActiveSurvey.SurveyName.substring(0, 26) + '...' : ActiveSurvey.SurveyName) : '')} + + + {Object.keys(storeData).length > 0 && + { + { console.log("Item---", item) } + return ( + { openSurveyView(item) }}> + + + {item.Category.substring(0, 1)} + + {item.Category} + {(item.isDone != null && item.isDone == true) && } + + + ); + }} + /> + } + + + + ); +} + + + +export default connect(mapStateToProps, mapDispatchToProps)(SurveyCat); \ No newline at end of file diff --git a/PerformicsSrc/src/screens/SurveyList.js b/PerformicsSrc/src/screens/SurveyList.js new file mode 100644 index 0000000..f064db2 --- /dev/null +++ b/PerformicsSrc/src/screens/SurveyList.js @@ -0,0 +1,192 @@ +import React, { useState, useEffect, useRef } from 'react'; +import Container from '../components/container'; +import { useRoute } from '@react-navigation/native'; +import { customStyles, GetPageTheme, STATUSBAR_HEIGHT } from "../styles/Global"; +import { Image, TextInput, View, Text, ScrollView, TouchableOpacity, Platform, FlatList, Alert, Animated } from 'react-native'; +import { connect } from 'react-redux'; +import { mapStateToProps, mapDispatchToProps } from '../reducers/contextProvider'; +import { notify } from '../components/notify'; +import moment from 'moment'; +import { get_item, set_item, clear_item } from '../components/localStorage'; +import { db, } from '../constants/constants'; +import CustomHeader from '../components/customHeader'; +import CustomLoader from '../components/CustomLoader'; +import LinearGradient from 'react-native-linear-gradient'; +import { checkIf_surveyDone } from '../constants/ConstantQueries'; +import { AntDesign } from '../components/icons'; + + +function SurveyList(props) { + const route = useRoute(); + const ST = props.StaticText || {}; + // get all theme styles acc to current theme set + const PageTheme = GetPageTheme(props.DarkMode, route.name); + const customStyle = customStyles(props.DarkMode, route.name); + + const [processing, setProcessing] = useState(true); + const [loaderTitle, setLoaderTitle] = useState(); + const [isAdhocScreen, setIsAdhocScreen] = useState(false); + const [isBeatPlan, setIsBeatPlan] = useState(false); + const [storeData, setStoreData] = useState({}); + const [currentMenu, setCurrentMenu] = useState({}); + const [surveys, setSurveys] = useState([]); + + const d1 = new Date(); + const d2 = moment(d1).format('MM/DD/YYYY'); + + useEffect(() => { + setLoaderTitle(ST.Loading + '...') + let params = props.route.params ? props.route.params : {}; + let storeData1 = params.storeData || {}; + let menu1 = params.menu || {}; + let isAdhoc = params.isAdhocScreen || false; + let isBeat = params.isBeat != null ? params.isBeat : false; + let bgRedirFlag = params.redirect || false; + let BgNavData = params.BgNavData || {}; + + setIsAdhocScreen(isAdhoc); + setIsBeatPlan(isBeat); + setStoreData(storeData1); + setCurrentMenu(menu1); + getData(storeData1, menu1); + console.log("testing66666",bgRedirFlag,BgNavData) + if (bgRedirFlag == true && Object.keys(BgNavData).length > 0) { + BgNavToSurveyView(BgNavData) + + } + const willFocusSubscription = props.navigation.addListener('focus', () => { + console.log('onfocus'); + getData(storeData1, menu1); + }); + + return willFocusSubscription; + }, []); + + + useEffect(() => { + console.log('on AutoGoToPrev change (in list view)', props.AutoGoToPrev); + if (props.AutoGoToPrev == true) { + let params = props.route.params ? props.route.params : {}; + let storeData1 = params.storeData || {}; + console.log("survey list currentMenu:", currentMenu) + getData(storeData1, currentMenu, true); + } + }, [props.AutoGoToPrev]); + + function BgNavToSurveyView(BgNavData) { + let { + surveyData, + storeData, + menu, + isAdhocScreen, + isBeat, + ShowCat } = BgNavData + + // console.log('go to SurveyCat',ShowCat); + if (ShowCat == 1 || ShowCat == 'true' || ShowCat == true) { + console.log('go to SurveyCat', ShowCat); + props.navigation.navigate('SurveyCat', { 'surveyData': surveyData, 'storeData': storeData, 'menu': menu, 'isAdhocScreen': isAdhocScreen, 'isBeat': isBeat, 'ShowCat': ShowCat }); + } + else { + props.navigation.navigate('SurveyView', { 'surveyData': surveyData, 'storeData': storeData, 'menu': menu, 'isAdhocScreen': isAdhocScreen, 'isBeat': isBeat, 'ShowCat': ShowCat }); + } + } + + + async function getData(storeData1, menu1 = {}, isAutoBack = false) { + try { + let { StoreId, ChainId, StateId, StoreTypeId } = storeData1; + + await db.transaction(async function (txn) { + let q2 = `SELECT DISTINCT T.SurveyName as SurveyName,T.SurveyId as SurveyId,T.ShowCat FROM Master_SurveyQuestion T INNER JOIN Mapping_Survey M ON T.SurveyId=M.SurveyId WHERE M.StoreId='${StoreId}' and T.MenuId='${menu1.MenuId}'`; + console.log("survey list q2222:", q2, menu1) + await txn.executeSql(q2, [], async function (txn2, txnres) { + if (txnres.rows.length > 0) { + + let arr = [], isAllSurveyDone = true; + for (var i = 0; i < txnres.rows.length; i++) { + let data = txnres.rows.item(i); + console.log("data---------",data) + let ShowCat = data.ShowCat; + let isshowcat = (ShowCat == 1 || ShowCat == 'true' || ShowCat == true); + let isDone = await checkIf_surveyDone(storeData1, data.SurveyId, isshowcat) + data['isDone'] = isDone; + arr.push(data); + if (!isDone) { + isAllSurveyDone = false; + } + if (i == txnres.rows.length - 1) { + setSurveys(arr); + setProcessing(false); + console.log('isAllSurveyDone surveylist :', isAllSurveyDone, props.AutoGoToPrev, isAutoBack) + if (isAllSurveyDone == true && props.AutoGoToPrev == true && isAutoBack == true) { + // props.set_autoback({'AutoGoToPrev':true}); + setTimeout(() => { + props.navigation.goBack(); + }, 1500); + } + } + } + + } + else { + setProcessing(false); + notify('No Data Found!') + } + }, function (txnE, txnerr) { setProcessing(false); console.log(txnerr); },); + + }); + } catch (err) { + console.log(err); + } + } + + + function openSurveyView(item) { + let { ShowCat } = item + console.log('ShowCat:', ShowCat); + props.set_autoback({ 'AutoGoToPrev': false }); + if (ShowCat == 1 || ShowCat == 'true' || ShowCat == true) { + console.log('go to SurveyCat'); + props.navigation.navigate('SurveyCat', { 'surveyData': item, 'storeData': storeData, 'menu': currentMenu, 'isAdhocScreen': isAdhocScreen, 'isBeat': isBeatPlan, 'ShowCat': true }); + } + else { + props.navigation.navigate('SurveyView', { 'surveyData': item, 'storeData': storeData, 'menu': currentMenu, 'isAdhocScreen': isAdhocScreen, 'isBeat': isBeatPlan, 'ShowCat': false }); + } + } + return ( + + {processing && } + + + + + {Object.keys(storeData).length > 0 && + { + return ( + { openSurveyView(item) }}> + + + {item.SurveyName.substring(0, 1)} + + {item.SurveyName} + {(item.isDone != null && item.isDone == true) && } + + + ); + }} + /> + } + + + + ); +} + + + +export default connect(mapStateToProps, mapDispatchToProps)(SurveyList) \ No newline at end of file diff --git a/PerformicsSrc/src/screens/SurveyView copy.js b/PerformicsSrc/src/screens/SurveyView copy.js new file mode 100644 index 0000000..f86f0c1 --- /dev/null +++ b/PerformicsSrc/src/screens/SurveyView copy.js @@ -0,0 +1,2434 @@ +import React, { useState, useEffect, useRef } from 'react'; +import Container from '../components/container'; +import { useRoute } from '@react-navigation/native'; +import { customStyles, GetPageTheme, STATUSBAR_HEIGHT } from "../styles/Global"; +import { Image, TextInput, View, Text, ScrollView, TouchableOpacity, Platform, FlatList, Alert, Dimensions, Animated, Easing, AppState, Keyboard } from 'react-native'; +import { connect } from 'react-redux'; +import { mapStateToProps, mapDispatchToProps } from '../reducers/contextProvider'; +import { notify } from '../components/notify'; +import moment from 'moment'; +import { getAllFolderImages, getforgotpasswordotp, getKPIFields, getmobileverifyotp, marktext1, marktext2, resizeImage, restore_ImageWithMetaData, validateNumber, verifymobileotp } from '../controller/functions'; +import { db, common_ImagePath, ImageFolderPath } from '../constants/constants'; +import CustomHeader from '../components/customHeader'; +import { AntDesign, Entypo, FontAwesome, FontAwesome5, Fontisto, MaterialCommunityIcons } from '../components/icons'; +import CustomLoader from '../components/CustomLoader'; +import LinearGradient from 'react-native-linear-gradient'; +import { AppTables } from '../constants/tableConstants'; +import * as RNFS from 'react-native-fs'; +import GradientButton from '../components/gradientButton'; +import { ConfirmSaveAlert } from '../components/alert'; +import ModalSelector from 'react-native-modal-selector'; +import MultiSelect from 'react-native-multiple-select'; +import { PageTheme } from '../styles/Themes'; +import DateTimePicker from '@react-native-community/datetimepicker'; +import DraggableFlatList, { ScaleDecorator } from 'react-native-draggable-flatlist' +import AudioRecorderPlayer, { AudioEncoderAndroidType, AudioSourceAndroidType, AVEncoderAudioQualityIOSType, AVEncodingOption, AVModeIOSOption } from 'react-native-audio-recorder-player'; +import CustomCamera from '../components/Camera'; +import { clear_item, get_item, set_item } from '../components/localStorage'; +import CameraImg5 from '../assets/image/astrickcamera.svg'; +import ImageViewer from 'react-native-image-zoom-viewer'; + +import OtpInputs from 'react-native-otp-inputs'; + +const { height, width } = Dimensions.get('window'); +const topbarht = STATUSBAR_HEIGHT + 50; +const actualWindowHt = parseInt((height - topbarht) + 10); + + +function SurveyView(props) { + const route = useRoute(); + const ST = props.StaticText || {}; + const audioRecorderPlayer = new AudioRecorderPlayer(); + const AudioSet = { + AudioEncoderAndroid: AudioEncoderAndroidType.AAC, + AudioSourceAndroid: AudioSourceAndroidType.MIC, + AVModeIOS: AVModeIOSOption.measurement, + AVEncoderAudioQualityKeyIOS: AVEncoderAudioQualityIOSType.high, + AVNumberOfChannelsKeyIOS: 2, + AVFormatIDKeyIOS: AVEncodingOption.aac, + }; + // get all theme styles acc to current theme set + const PageTheme = GetPageTheme(props.DarkMode, route.name); + const customStyle = customStyles(props.DarkMode, route.name); + + const [processing, setProcessing] = useState(true); + const [loaderTitle, setLoaderTitle] = useState(); + const [isAdhocScreen, setIsAdhocScreen] = useState(false); + const [showRating, setShowRating] = useState(false); + const [RatingQtn, setRatingQtn] = useState({}); + const [RatingOrder, setRatingOrder] = useState([]); + const [showRecorder, setShowRecorder] = useState(false); + const [VRS, setVRS] = useState({}); + const [RecorderTimer, setRecorderTimer] = useState({}); + const [playerTimer, setPlayerTimer] = useState({}); + const [rerenderView, setRerenderView] = useState(0); + const [hasUnsavedChanges, setHasUnsavedChanges] = useState(false); + const [VoiceRecorderStatus, setVoiceRecorderStatus] = useState(ST.Pressmictostartrecordingvoice); + const [RecFilePath, setRecFilePath] = useState({}); + const [dateValue, setDateValue] = useState(''); + const [openDatePicker, setOpenDatePicker] = useState(0); + const [storeData, setStoreData] = useState({}); + const [ShowCat, setShowCat] = useState(false); + const [ActiveSurvey, setActiveSurvey] = useState({}); + const [ActiveCategory, setActiveCategory] = useState({}); + const [currentMenu, setCurrentMenu] = useState({}); + const [rerenderdata, setrerenderdata] = useState(0); + const [SurveySubCats, setSurveySubCats] = useState([]); + const [SurveyQuestions, setSurveyQuestions] = useState([]); + const [QuestionsData, setQuestionsData] = useState({}); + const [showAlert, setShowAlert] = useState(false); + const [showCamera, setShowCamera] = useState(false); + const [getImageProps, setGetImageProps] = useState({}); + const [KPIFields, setKPIFields] = useState([]); + const [showSwitchCamera, setShowSwitchCamera] = useState(false); + const [show_zoomImage, setShow_zoomImage] = useState(false); + const [refImageIndex, setrefImageIndex] = useState(0); + const [zoomImageUrl, setZoomImageUrl] = useState([]); + const zoomView = useRef(null); + + const inputRefs = useRef({}); + const otpRef = useRef(); + + const animatedRipple = useRef(new Animated.Value(0)).current; + const animatedRipple2 = useRef(new Animated.Value(0.5)).current; + + const hasUnsavedChangesRef = React.useRef(hasUnsavedChanges); + const WindowDataRef = React.useRef(QuestionsData); + const SurveyQuestionsRef = React.useRef(SurveyQuestions); + const SurveySubCatsRef = React.useRef(SurveySubCats); + + + function bgSurveyQuestions(val) { + SurveyQuestionsRef.current = val + setSurveyQuestions(val); + } + + const StoreIdRef = React.useRef(null); + const ScreenNameRef = React.useRef({}); + const NavigationRef = React.useRef({}); + + // error field states + const [errorfield, setErrorField] = useState({}); + const [error, setError] = useState(false); + + const d1 = new Date(); + const d2 = moment(d1).format('MM/DD/YYYY'); + + useEffect(() => { + setLoaderTitle(ST.Loading + '...') + let params = props.route.params ? props.route.params : {}; + let storeData1 = params.storeData || {}; + let surveydata = params.surveyData || {}; + let catData = params.catData || {}; + console.log("surveyandcatdata:", surveydata + " ", catData); + let menu1 = params.menu || {}; + let ShowCat1 = params.ShowCat || false; + let isAdhoc = params.isAdhocScreen || false; + let isBeat = params.isBeat || false; + setShowCat(ShowCat1); + setIsAdhocScreen(isAdhoc); + setStoreData(storeData1); + setActiveSurvey(surveydata) + setCurrentMenu(menu1); + setActiveCategory(catData) + + StoreIdRef.current = storeData1.StoreId + ScreenNameRef.current = { BgscreenName: menu1.ScreenName, BgMenuId: menu1.MenuId } + let navData = { + 'surveyData': surveydata, + 'storeData': storeData1, + 'menu': menu1, + 'isAdhocScreen': isAdhoc, + 'isBeat': isBeat, + 'ShowCat': ShowCat1 + } + NavigationRef.current = navData + getSurveyData(surveydata, catData, storeData1, ShowCat1, menu1); + console.log("chechsda:", surveydata, "---", catData) + + const AppStateSubscription = AppState.addEventListener('change', (pro) => { _handleAppStateChange(pro) }); + const unsubscribe = props.navigation.addListener('beforeRemove', onBeforeRemove); + return (() => { + audioRecorderPlayer.removePlayBackListener(); + audioRecorderPlayer.removeRecordBackListener(); + AppStateSubscription.remove(); + // AppState.removeEventListener('change', (pro)=>{ _handleAppStateChange(QuestionsData,pro)}); + return unsubscribe; + }); + }, []); + + const _handleAppStateChange = async (nextAppState) => { + if (nextAppState == 'background' && hasUnsavedChangesRef.current == true) { + let newData = { + storeBGData: WindowDataRef.current, + menuName: ScreenNameRef.current && ScreenNameRef.current.BgscreenName, + StoreId1: StoreIdRef.current, + NavData: NavigationRef.current, + SurveyQuestionsData: SurveyQuestionsRef.current, + SurveySubCats: SurveySubCatsRef.current, + BgMenuID: ScreenNameRef.current && ScreenNameRef.current.BgMenuId, + visiteDate: d2 + } + let WindowsStr = JSON.stringify(newData) + await set_item('storeData', WindowsStr); + } + } + + useEffect(() => { + const unsubscribe = props.navigation.addListener('beforeRemove', onBeforeRemove); + return unsubscribe; + // AppState.removeEventListener('change',(pro)=>{ _handleAppStateChange(QuestionsData,pro)}); + // AppState.addEventListener('change',(pro)=>{ _handleAppStateChange(QuestionsData,pro)}); + }, [hasUnsavedChanges]); + + // useEffect(() => { + // // AppState.removeEventListener('change',(pro)=>{ _handleAppStateChange(QuestionsData,pro)}); + // // AppState.addEventListener('change',(pro)=>{ _handleAppStateChange(QuestionsData,pro)}); + // }, [QuestionsData]); + + useEffect(() => { + const unsubscribe = props.navigation.addListener('beforeRemove', onBeforeRemove); + return unsubscribe; + }, [showCamera]); + + useEffect(() => { + const unsubscribe = props.navigation.addListener('beforeRemove', onBeforeRemove); + return unsubscribe; + }, [show_zoomImage]); + + function onBeforeRemove(e) { + if (showCamera == true) { + e.preventDefault(); + setShowCamera(false); + } + else if (show_zoomImage == true) { + e.preventDefault(); + setShow_zoomImage(false); + } + else { + if (hasUnsavedChanges == true) { + e.preventDefault(); // Prevent default behavior of leaving the screen + onRemoveScreen(e); + } + else { + return; + } + } + } + + function BgUnsavedChanges(val) { + hasUnsavedChangesRef.current = val + setHasUnsavedChanges(val); + } + + function BgWindowData(val) { + WindowDataRef.current = val + setQuestionsData(val); + } + + function BgSurveySubCats(val) { + SurveySubCatsRef.current = val + setSurveySubCats(val); + } + + function onRemoveScreen(e) { + Alert.alert( + "", + ST.Doyoureallywanttoexitthescreen, + [ + { + text: ST.Cancel, + onPress: () => { }, + style: "cancel" + }, + { + text: ST.OK, onPress: async () => { + // setHasUnsavedChanges(false); + BgUnsavedChanges(false) + await clear_item('storeData') + props.navigation.dispatch(e.data.action); + } + } + ] + ); + } + + // async function getData(surveydata,catData={},storeData1){ + + // try { + // let {StoreId,ChainId,StateId,StoreTypeId}=storeData1; + // let surveyQtns=require('../constants/s_qtns.json'); + // let subcats=[],qtns=[]; + // for(const i in surveyQtns){ + // let item=surveyQtns[i] + // let {ShowCat,AnswerId,Answer,AnswerSequence,ImageAllow,EnableQuestion,DisableQuestion,SubCategoryId,SubCategory,SubCategorySequence}=item; + // let addqtn=false; + + // // let obj={MaxLength,MinLength,SubCategoryId,SubCategory,LengthValidation,QuestionImageAllow,DateRange,Question,QuestionId,QuestionType,OTP,Answer,AnswerId,ImageAllow,MULTI_OPTIONS_IDS:[]} + // if(ShowCat==0 && item.SurveyId==surveydata.SurveyId && qtns.findIndex(a=>a.QuestionId==item.QuestionId)<0) + // { + // qtns.push(item); + // } + // else if(ShowCat==1 && Object.keys(catData).length>0 && item.SurveyId==surveydata.SurveyId && item.CategoryId==catData.CategoryId && qtns.findIndex(a=>a.QuestionId==item.QuestionId)<0) + // { + // qtns.push(item); + // } + + // let s_obj={SubCategory,SubCategoryId,SubCategorySequence}; + // if(ShowCat==0 && item.SurveyId==surveydata.SurveyId && subcats.findIndex(a=>a.SubCategoryId==item.SubCategoryId)<0){ + // subcats.push(s_obj); + // } + // else if(ShowCat==1 && Object.keys(catData).length>0 && item.SurveyId==surveydata.SurveyId && item.CategoryId==catData.CategoryId && subcats.findIndex(a=>a.SubCategoryId==item.SubCategoryId)<0){ + // subcats.push(s_obj); + // } + + + // let sc_index=subcats.findIndex(a=>a.SubCategoryId==item.SubCategoryId); + // if(sc_index>=0){ + // let sc=subcats[sc_index]; + // let Questions=sc['Questions'] || []; + // if(ShowCat==0 && item.SurveyId==surveydata.SurveyId && Questions.findIndex(a=>a.QuestionId==item.QuestionId)<0) + // { + // Questions.push(item); + // } + // else if(ShowCat==1 && Object.keys(catData).length>0 && item.SurveyId==surveydata.SurveyId && item.CategoryId==catData.CategoryId && Questions.findIndex(a=>a.QuestionId==item.QuestionId)<0) + // { + // Questions.push(item); + // } + + // sc['Questions']=Questions; + // subcats[sc_index]=sc; + // let q_index=Questions.findIndex(a=>a.QuestionId==item.QuestionId); + // let q_index2=qtns.findIndex(a=>a.QuestionId==item.QuestionId); + + // // if(q_index>=0){ + // // let data=item; + // // let qn=Questions[q_index]; + // // if(data.QuestionType=='Multi choice list' || data.QuestionType=='Single choice list' || data.QuestionType=='Rating'){ + // // let allanswers=qn['Answers'] || []; + // // let ansobj={AnswerId,Answer,AnswerSequence,ImageAllow,EnableQuestion,DisableQuestion} + // // allanswers.push(ansobj); + // // qn['Answers']=allanswers; + // // } + // // else if(data.QuestionType=='Date'){ + // // qn.showDatePicker=false; + // // } + // // Questions[q_index]=qn; + // // } + + + // if(q_index2>=0){ + // let data=item; + // let qn=qtns[q_index2]; + // if(data.QuestionType=='Multi choice list' || data.QuestionType=='Single choice list' || data.QuestionType=='Rating'){ + // let allanswers=qn['Answers'] || []; + // let ansobj={AnswerId,Answer,AnswerSequence,ImageAllow,EnableQuestion,DisableQuestion} + // if(allanswers.findIndex(a=>a.AnswerId==data.AnswerId)<0) + // allanswers.push(ansobj); + + // console.log('allanswers:',allanswers.length) + // qn['Answers']=allanswers; + // } + // else if(data.QuestionType=='Date'){ + // qn.showDatePicker=false; + // } + // qtns[q_index]=qn; + // } + + // } + // } + // setSurveySubCats(subcats); + // setSurveyQuestions(qtns); + // setProcessing(false); + + // } catch (err) { + // console.log(err); + // } + // } + + async function getSurveyData(item, catData = {}, storeData1, ShowCat1, menu1) { + try { + let { StoreId } = storeData1; + let { CategoryId } = catData; + let { SurveyId } = item; + + console.log("catdataa:", catData); + + let AllKPIFields = await getKPIFields(menu1); + setKPIFields(AllKPIFields); + + // set switch camera flag as defined in mapping menu flag (if exists) + let SwitchingCameraI = AllKPIFields.findIndex(i => i.KPIFieldName == 'SwitchingCamera'); + let SwitchingCameraObj = SwitchingCameraI >= 0 ? AllKPIFields[SwitchingCameraI] : {}; + let SwitchingCamera = SwitchingCameraI >= 0 ? SwitchingCameraObj['KPIFieldEnable'] : false; + setShowSwitchCamera(SwitchingCamera); + + let storeBGData1 = [], bgStoreJson = {}, isBgDataExists = false; + let windData = await get_item('storeData') + console.log("windData in promooo:", windData); + if (windData != null && windData != '') { + let StoreJson = JSON.parse(windData) + let { storeBGData, menuName, StoreId1, BgMenuID, visiteDate, SurveyQuestionsData, SurveySubCats } = StoreJson + if (Object.keys(storeBGData).length > 0 && menuName == menu1.ScreenName && menu1.MenuId == BgMenuID && StoreId1 == StoreId && visiteDate == d2) { + isBgDataExists = true; + storeBGData1 = storeBGData; + bgStoreJson = StoreJson + BgUnsavedChanges(true) + BgSurveySubCats(SurveySubCats) + BgWindowData(storeBGData) + bgSurveyQuestions(SurveyQuestionsData) + } + } + + await db.transaction(async function (txn) { + + + let q2 = `SELECT DISTINCT T.SubCategory,T.SubCategoryId,T.SubCategorySequence,T.RefImage FROM Master_SurveyQuestion T INNER JOIN Mapping_Survey M ON T.SurveyId=M.SurveyId WHERE M.StoreId='${StoreId}' and T.SurveyId='${SurveyId}' `; + if (ShowCat1 == true) { + q2 += ` and T.CategoryId='${CategoryId}' `; + } + q2 += ` order by T.QuestionSequence`; + // q2+=` order by T.CategorySequence`; + + await txn.executeSql(q2, [], async function (txn2, txnres) { + console.log('survey subcats:', txnres.rows.length); + if (txnres.rows.length > 0) { + let arr = [], images = [], allQtns = []; + + for (var i = 0; i < txnres.rows.length; i++) { + let data = txnres.rows.item(i); + console.log("dataaaa:", data) + // let imgObj={imgIndex:(i+1),url: data.RefImage, props: {}} + // images.push(imgObj); + + let all_scat_qtns = await getSurveyQtns(item, catData, storeData1, ShowCat1, data, menu1, bgStoreJson, isBgDataExists) + console.log('all_scat_qtns:', all_scat_qtns.length) + console.log('all_scat_qtnssss:', all_scat_qtns) + data['Questions'] = all_scat_qtns; + allQtns = allQtns.concat(all_scat_qtns); + arr.push(data); + if (i == txnres.rows.length - 1) { + // setSurveySubCats(arr); + // setSurveyQuestions(allQtns); + if (!isBgDataExists) { + BgSurveySubCats(arr) + bgSurveyQuestions(allQtns) + } + + // images.push(imgObj); + // setZoomImageUrl(images); + setProcessing(false); + } + } + } + + }, function (txnE, txnerr) { console.log(txnerr); },); + + }); + } catch (err) { + console.log(err); + } + } + + const [verifiedOTP, setVerifiedOTP] = useState(false); + + async function getSurveyQtns(item, catData, storeData1, ShowCat1, subCat, menu1, bgStoreJson = {}, isBgDataExists = false) { + return new Promise((resolve, reject) => { + try { + let { StoreId } = storeData1; + let { CategoryId } = catData; + let { SurveyId } = item; + let { SubCategoryId } = subCat; + + db.transaction(async function (txn) { + + // get inserted audit + let selectlist = ` DISTINCT ifnull(T1.VerifyOTP,0)as VerifyOTP,T.MaxLength as MaxLength,T.CalFormula,T.RefImage,T.MinLength as MinLength,T.CategoryId,T.Category,T.SubCategoryId,T.SubCategory, T.Image1Mandatory, T.Image2Mandatory,T.QuestionImageMandatory,T.LengthValidation as LengthValidation,T.QuestionImageAllow as QuestionImageAllow,T.DateRange as DateRange,T.QEnable,T.Question as Question,T.QuestionId as QuestionId,T.QuestionTypeNew as QuestionType,T.OTP as OTP,T1.ANSWER As Answer, T1.ANSWER_ID as AnswerId,T1.IMAGE_ALLOW1 as ImageAllow1,T1.IMAGE1 as Image1,T1.IMAGE_ALLOW2 as ImageAllow2,T1.IMAGE2 as Image2,T1.MULTI_OPTIONS_IDS as multi_op_ids,T1.IS_DISABLED as isDisabled `; + let join = ` INNER JOIN Mapping_Survey M on T.SurveyId=M.SurveyId`; + let join2 = ` INNER JOIN ${AppTables.SURVEY} T1 on T.SurveyId=T1.SURVEY_ID and T.CategoryId=T1.CATEGORY_ID and T.SubCategoryId=T1.SUB_CATEGORY_ID And T.QuestionId=T1.QUESTION_ID`; + let q2 = `Select ${selectlist} FROM Master_SurveyQuestion T ${join} ${join2} WHERE T1.STORE_ID='${StoreId}' AND T1.MENU_ID=${menu1.MenuId} AND T1.VISIT_DATE= '${d2}' AND T1.SURVEY_ID=${SurveyId} AND T1.SUB_CATEGORY_ID='${SubCategoryId}' `; + if (ShowCat1 == true) { + q2 += ` AND T1.CATEGORY_ID=${CategoryId} `; + } + q2 += ` GROUP BY T.QuestionId ORDER BY T.QuestionSequence `; + // q2+=` ORDER BY T.SubCategorySequence `; + + await txn.executeSql(q2, [], async function (txn2, txnres) { + console.log('getSurveyData len', txnres.rows.length); + if (txnres.rows.length > 0) { + let arr = [], images = []; + var QD = QuestionsData; + for (var i = 0; i < txnres.rows.length; i++) { + let data = txnres.rows.item(i); + console.log("data---------", data) + // let imgObj={imgIndex:(i+1),url: data.QuestionRefImage, props: {}} + // console.log("IMAGEDDD--",imgObj) + // images.push(imgObj); + // setZoomImageUrl(images); + data.QEnable = data.QEnable == 1 || data.QEnable == 'true' ? true : false; + + + let answers = []; + let qtn = data; + qtn.isDisabled = qtn.isDisabled == 1 || qtn.isDisabled == '1' ? true : false + if (qtn.QuestionType == 'Decimal' || qtn.QuestionType == 'Number' || qtn.QuestionType == 'Text' || qtn.QuestionType == 'Image') { + inputRefs.current['input1_' + qtn.QuestionId] = ''; + } + + if (data.QuestionType == 'Multi choice list' || data.QuestionType == 'Single choice list' || data.QuestionType == 'Rating') { + let allanswers = await getAnswers(data, item.SurveyId, storeData1, true); + + answers = allanswers.Answers || []; + if (data.QuestionType == 'Rating') { + data.showRating = false; + } + } + else if (data.QuestionType == 'Date') { + data.showDatePicker = false; + } + data.Answers = answers; + + let id_key = qtn.QuestionId + '_AnswerId'; + let ans_key = qtn.QuestionId + '_Answer'; + let multi_key = qtn.QuestionId + '_MultiOption'; + let date_key = qtn.QuestionId + '_Date'; + let img_key = qtn.QuestionId + '_ImagePath1'; + let imgname_key = qtn.QuestionId + '_ImageName1'; + let img_key2 = qtn.QuestionId + '_ImagePath2'; + let imgname_key2 = qtn.QuestionId + '_ImageName2'; + let rating_key = qtn.QuestionId + '_Rating'; + let voiceClip_key = qtn.QuestionId + '_VoiceClip'; + + let showImageTag = (data.QuestionImageAllow == true || data.QuestionImageAllow == 'true' || data.QuestionImageAllow == 1); + let showImageTag2 = false; + + QD[id_key] = data.AnswerId; + QD[ans_key] = data.Answer; + + + let selansid = data.AnswerId; + if (qtn.QuestionType == 'Multi choice list') { + selansid = data.multi_op_ids ? data.multi_op_ids.split(',') : []; + QD[multi_key] = data.multi_op_ids; + } + + if ((qtn.QuestionType == 'Single choice list' || qtn.QuestionType == 'Multi choice list')) { + if (qtn.Answers && qtn.Answers.length > 0) { + for (var k = 0; k < qtn.Answers.length; k++) { + let ansss = qtn.Answers[k]; + let isandImgAl = (ansss.ImageAllow1 == true || ansss.ImageAllow1 == 'true' || ansss.ImageAllow1 == 1); + let isandImgAl2 = (ansss.ImageAllow2 == true || ansss.ImageAllow2 == 'true' || ansss.ImageAllow2 == 1); + if (qtn.QuestionType == 'Single choice list' && (isandImgAl && ansss.AnswerId == selansid)) { + showImageTag = true; + } + else if (qtn.QuestionType == 'Multi choice list' && (isandImgAl && selansid.indexOf(ansss.AnswerId) >= 0)) { + showImageTag = true; + } + + if (qtn.QuestionType == 'Single choice list' && (isandImgAl2 && ansss.AnswerId == selansid)) { + showImageTag2 = true; + } + else if (qtn.QuestionType == 'Multi choice list' && (isandImgAl2 && selansid.indexOf(ansss.AnswerId) >= 0)) { + showImageTag2 = true; + } + + } + } + } + + if (showImageTag) { + let imgPath = data.Image1 != '' ? ((Platform.OS == 'ios' ? 'file://' : '') + `${ImageFolderPath + menu1.ScreenName}/` + data.Image1) : ''; + QD[imgname_key] = data.Image1; + QD[img_key] = imgPath; + } + + if (showImageTag2) { + let imgPath = data.Image2 != '' ? ((Platform.OS == 'ios' ? 'file://' : '') + `${ImageFolderPath + menu1.ScreenName}/` + data.Image2) : ''; + QD[imgname_key2] = data.Image2; + QD[img_key2] = imgPath; + } + + if (qtn.QuestionType == 'Audio') { + let voicefile_path = (Platform.OS == 'ios' ? 'file://' : '') + `${ImageFolderPath + menu1.ScreenName}/` + 'Recordings/' + data.Answer; + QD[voiceClip_key] = { 'path': voicefile_path, 'filename': data.Answer }; + } + + if (qtn.QuestionType == 'Date') { + let dayonly = moment().format('DD'); + let actual_date = data.Answer ? data.Answer.split('/') : []; + let month = actual_date[0], year = actual_date[1]; + let fulldate = month + '/' + dayonly + '/' + year; + QD[date_key] = fulldate; + + } + arr.push(data); + if (i == txnres.rows.length - 1) { + if (!isBgDataExists) { + BgWindowData(QD) + } + resolve(arr); + } + } + } + else { + let sl = ` DISTINCT T.CategoryId,T.Category,T.CalFormula,T.RefImage,T.QuestionRefImage,T.Image1Mandatory, T.Image2Mandatory,T.QuestionImageMandatory,T.SubCategoryId,T.SubCategory,T.MaxLength,T.MinLength,T.LengthValidation,T.Question,T.QuestionId,T.QuestionTypeNew as QuestionType,T.OTP,T.QuestionImageAllow,T.DateRange,T.QEnable`; + let q = ` SELECT ${sl} FROM Master_SurveyQuestion T INNER JOIN Mapping_Survey M on T.SurveyId=M.SurveyId WHERE M.StoreId='${StoreId}' and T.SurveyId='${SurveyId}' and T.SubCategoryId='${SubCategoryId}' `; + if (ShowCat1 == true) { + q += ` and T.CategoryId='${CategoryId}' `; + } + q += `group by T.QuestionId ORDER BY T.QuestionSequence `; + // q+=` order by T.SubCategorySequence `; + + await txn.executeSql(q, [], async function (txn2, txnres2) { + console.log('Surveys:', txnres2.rows.length) + let arr = []; + if (txnres2.rows.length > 0) { + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + data.QEnable = data.QEnable == 1 || data.QEnable == 'true' ? true : false; + data['isDisabled'] = !data.QEnable; + data['VerifyOTP'] = 0 + + let qtn = data; + qtn.isDisabled = qtn.isDisabled == 1 || qtn.isDisabled == '1' ? true : false + if (qtn.QuestionType == 'Decimal' || qtn.QuestionType == 'Number' || qtn.QuestionType == 'Text' || qtn.QuestionType == 'Image') { + inputRefs.current['input1_' + qtn.QuestionId] = ''; + } + + let answers = []; + if (data.QuestionType == 'Multi choice list' || data.QuestionType == 'Single choice list' || data.QuestionType == 'Rating') { + let allanswers = await getAnswers(data, item.SurveyId, storeData1, false); + answers = allanswers.Answers || []; + if (data.QuestionType == 'Rating') { + data.showRating = false; + } + } + else if (data.QuestionType == 'Date') { + data.showDatePicker = false; + } + + data.Answers = answers; + + arr.push(data); + + if (i == txnres2.rows.length - 1) { + resolve(arr); + } + } + } + else { + resolve([]); + } + + }, function (txnE, txnerr) { console.log(txnerr); resolve([]); },); + } + + }, function (txnE, txnerr) { console.log(txnerr); resolve([]); },); + + }); + } catch (err) { + console.log(err); + } + }) + } + + async function getAnswers(qtn, SurveyId, storeData1, isInserted) { + let { StoreId, ChainId, StateId, StoreTypeId } = storeData1; + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + // get inserted audit + let selectlist = ` DISTINCT T.Answer,T.AnswerId,T.ImageAllow1,T.ImageAllow2,T.EnableQuestion,T.DisableQuestion`; + let join = ` INNER JOIN Mapping_Survey M on T.SurveyId=M.SurveyId`; + let q2 = `Select ${selectlist} FROM Master_SurveyQuestion T ${join} WHERE T.QuestionId='${qtn.QuestionId}' AND M.StoreId = '${StoreId}' AND T.SurveyId==${SurveyId} AND T.SubCategoryId='${qtn.SubCategoryId}' ORDER BY T.AnswerSequence `; + + await txn.executeSql(q2, [], async function (txn2, txnres) { + // console.log('answers len',txnres.rows.length); + if (txnres.rows.length > 0) { + let arr = []; + for (var i = 0; i < txnres.rows.length; i++) { + let data = txnres.rows.item(i); + arr.push(data); + if (i == txnres.rows.length - 1) { + // setSurveyQuestions(arr); + // bgSurveyQuestions(arr) + resolve(arr); + } + } + } + else { + resolve([]); + } + }, function (txnE, txnerr) { console.log(txnerr); resolve([]); },); + + }); + }).then((val) => { + return { 'Answers': val, 'Success': true }; + }).catch((err) => { + console.log(err); + return { 'Success': false, 'Error': err } + }); + } + + async function getImage(imgdata) { + let qtn = getImageProps.qtn || ''; + let type = getImageProps.type || '1'; + if (typeof imgdata == 'object' && imgdata.errorCode == 'camera_unavailable') { + notify(ST.Cameraunavailable); + } + else if (typeof imgdata == 'object' && imgdata.uri != null) { + const img = imgdata; + const imgurl = img.uri, imgWidth = img.width, imgHeight = img.ExtendedHeight; + let isImgFromGallery = img.fromGallery != null ? img.fromGallery : false; + let picture_clickedd = isImgFromGallery == true ? img.datetime : new Date(); + let picture_clicked_time = moment(picture_clickedd).format('MM-DD-YYYY HH:mm:ss') + let picture_clicked_time_for_pic_name = moment(picture_clickedd).format('MMDDYYYY_HHmmss') + + console.log("time", picture_clicked_time); + console.log("time1", picture_clicked_time_for_pic_name); + let calculate_tym_date_for_filename = picture_clicked_time_for_pic_name; + let calculate_tym_date_over_img = picture_clicked_time; + + + const mark_text1 = calculate_tym_date_over_img; + const mark_text2 = 'Store Name:' + storeData.StoreName + ' | Store Id:' + storeData.StoreId + ' | Survey Id:' + ActiveSurvey.SurveyId + ' | Question Id :' + qtn.QuestionId + ' | Image Type: ' + currentMenu.MenuName + ' | Date:' + calculate_tym_date_over_img; + + let filename = storeData.StoreId + '_' + ActiveSurvey.SurveyId + '_' + qtn.QuestionId + '_SurveyImg_' + calculate_tym_date_for_filename + '.jpg'; + + let qd = QuestionsData; + let img_key = type == '1' ? qtn.QuestionId + '_ImagePath1' : qtn.QuestionId + '_ImagePath2'; + let imgname_key = type == '1' ? qtn.QuestionId + '_ImageName1' : qtn.QuestionId + '_ImageName2'; + qd[imgname_key] = filename; + + let imagePath = `${ImageFolderPath + currentMenu.ScreenName}/${filename}`; + await RNFS.copyFile(imgurl, imagePath) + .then(async (resn) => { + let uri = 'file://' + imagePath; + console.log('image marker', uri); + qd[img_key] = uri; + if (qtn.QuestionType == "Image") { + //set answid - 0 and answer to filename if qtnType is Image + let id_key = qtn.QuestionId + '_AnswerId'; + let ans_key = qtn.QuestionId + '_Answer'; + qd[id_key] = 0; + qd[ans_key] = ""; + // qd[ans_key]=filename; + } + + // add metdata then resize image and restored back to the imagePath + let restore_data = { "destFilePath": imagePath, "imgurl": imgurl, imgWidth, imgHeight, mark_text1, mark_text2 } + let is_restored = await restore_ImageWithMetaData(restore_data, imgdata); + console.log("image restored:", is_restored); + + // setQuestionsData(qd); + BgWindowData(qd) + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + }) + .catch(err => { + console.log('ERROR: image file write failed!!!'); + console.log(err.message, err.code); + }); + + // resize file + // let resize_res=await resizeImage(imgurl,imgWidth,imgHeight) + + + // if(resize_res.success){ + // file resized now rename file + + // } + // else{ + // if(resize_res.error){ + // notify("Error in image: ",resize_res.error); + // }else if (resize_res.imagenotfound){ + // notify("Cannot find image!"); + // }else{ + // notify("Something went wrong while capturing image!"); + // } + // } + + } + } + + async function openCamera(qtn, type) { + setGetImageProps({ 'qtn': qtn, 'type': type }); + setShowCamera(true); + // props.navigation.navigate('CameraScreen',{'getImage':getImage,'cameraType':'back'}) + } + + async function disableQtns(sqtns, DQtns, data, isreturn = false) { + console.log('disableQtns'); + if (DQtns.length > 0) { + new Promise.all( + DQtns.map((qid, q_index) => { + let s_qtnindex = sqtns.findIndex(i => i.QuestionId == qid) || {}; + console.log('sqtns qid', qid, s_qtnindex) + let s_qtn = s_qtnindex >= 0 ? sqtns[s_qtnindex] : {}; + if (s_qtnindex >= 0) { + console.log('sqtns not found', s_qtnindex) + s_qtn['isDisabled'] = true + sqtns[s_qtnindex] = s_qtn; + let id_key = s_qtn.QuestionId + '_AnswerId'; + let ans_key = s_qtn.QuestionId + '_Answer'; + data[id_key] = 0; + data[ans_key] = ''; + } + return false + }) + ).then(async (val) => { + setSurveyQuestions(sqtns); + // setQuestionsData(data); + BgWindowData(data) + bgSurveyQuestions(sqtns) + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + }) + } + } + + async function enableQtns(sqtns, EQtns, DQtns, data) { + console.log('enableQtns'); + new Promise.all( + EQtns.map((qid, q_index) => { + let s_qtnindex = sqtns.findIndex(i => i.QuestionId == qid) || {}; + let s_qtn = s_qtnindex >= 0 ? sqtns[s_qtnindex] : {}; + if (s_qtnindex >= 0) { + s_qtn['isDisabled'] = false + sqtns[s_qtnindex] = s_qtn; + } + return false + }) + ).then(async (val) => { + if (DQtns.length > 0) { + disableQtns(sqtns, DQtns, data) + } + else { + setSurveyQuestions(sqtns); + bgSurveyQuestions(sqtns) + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + }) + } + + async function onselectionChange(option, qtn) { + let data = QuestionsData; + let id_key = qtn.QuestionId + '_AnswerId'; + let ans_key = qtn.QuestionId + '_Answer'; + data[id_key] = option.value; + data[ans_key] = option.label; + + // setQuestionsData(data); + BgWindowData(data) + + let aq_ans = qtn.Answers != null ? qtn.Answers : []; + let ans_obj = aq_ans.find(i => i.AnswerId == option.value) || {}; + let EQtns = ans_obj.EnableQuestion != null && ans_obj.EnableQuestion != '' ? ans_obj.EnableQuestion.replace(' ', '').split(',') : []; + let DQtns = ans_obj.DisableQuestion != null && ans_obj.DisableQuestion != '' ? ans_obj.DisableQuestion.replace(' ', '').split(',') : []; + + console.log('EQtns:', EQtns, DQtns); + let sqtns = SurveyQuestions + if (EQtns.length > 0) { + await enableQtns(sqtns, EQtns, DQtns, data) + } + else if (DQtns.length > 0) { + await disableQtns(sqtns, DQtns, data) + } + else { + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + setrerenderdata(!rerenderdata); + BgUnsavedChanges(true) + setTimeout(() => { + SurveySubCatsRef.current = SurveySubCats + setSurveySubCats((prev) => prev); + }, 1000) + + + } + + function setTextValue(value, qtn, type = '') { + if (value != '') { + let isValid = validateNumber(value, type); + if (!isValid) { + return; + } + } + + let id_key = qtn.QuestionId + '_AnswerId'; + let ans_key = qtn.QuestionId + '_Answer'; + + let obj = QuestionsData; + if (qtn.QuestionType == 'Date') { + let date_key = qtn.QuestionId + '_Date'; + let d = value != null ? new Date(value) : new Date(); + let mfdate = moment(d).format('MM/YYYY'); + showQtnDatePicker(qtn, false); + obj[id_key] = 0; + obj[ans_key] = mfdate; + obj[date_key] = moment(d).format('MM/DD/YYYY'); + } + else { + + console.log("qtn.Quest------", qtn) + if (qtn.QuestionType == 'Decimal' && qtn.LengthValidation == "true") { + // if(qtn.MaxLength!="0" && qtn.MinLength!="0"){ + // } + + let valSplitLen = value.split(".")[1]?.length + + if (valSplitLen == undefined || valSplitLen < 2) { + obj[id_key] = 0; + obj[ans_key] = value; + } else if (/^\d+\.\d{2}$/.test(value)) { + obj[id_key] = 0; + obj[ans_key] = Number(value).toFixed(2); + } + // obj[id_key]=0; + // obj[ans_key]=String(val % 1 == 0 ? val+".00" : val.toFixed(2)); + + + } else { + obj[id_key] = 0; + obj[ans_key] = value; + } + + } + console.log(value, obj); + // setQuestionsData(obj); + BgWindowData(obj) + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + + function setRatingValue(data) { + // let ids=[]; + // data.map((item,index)=>{ + // ids.push(item.AnswerId); + // }) + setRatingOrder(data); + } + + + async function setMultiSelectValue(selectedItems = [], qtn) { + console.log('setMultiSelectValue', selectedItems); + let id_key = qtn.QuestionId + '_AnswerId'; + let ans_key = qtn.QuestionId + '_Answer'; + let multi_key = qtn.QuestionId + '_MultiOption'; + let obj = QuestionsData; + obj[id_key] = 0; + obj[multi_key] = selectedItems.join(','); + let anss = []; + selectedItems.map((itemValue) => { + let ans = qtn.Answers.find(c1 => c1.AnswerId == itemValue); + if (ans.Answer) { anss.push(ans.Answer) } + }); + obj[ans_key] = anss.join(','); + console.log('obj:', obj); + // setQuestionsData(obj); + BgWindowData(obj) + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + + + function showQtnDatePicker(qtn, show = false) { + let newqtnIndex = SurveyQuestions.findIndex(q => q.QuestionId == qtn.QuestionId); + console.log('showQtnDatePicker:', newqtnIndex); + if (newqtnIndex >= 0) { + let sq = SurveyQuestions; + let newqtn = sq[newqtnIndex]; + newqtn.showDatePicker = show; + sq[newqtnIndex] = newqtn; + setSurveyQuestions(sq); + bgSurveyQuestions(sq) + if (show == true) setrerenderdata(!rerenderdata); + } + } + + + function setShowQtnKey(qtn, key, show = false) { + if (key != null && key != '') { + let newqtnIndex = SurveyQuestions.findIndex(q => q.QuestionId == qtn.QuestionId); + console.log('setShowQtnKey:', newqtnIndex); + if (newqtnIndex >= 0) { + let sq = SurveyQuestions; + let newqtn = sq[newqtnIndex]; + newqtn[key] = show; + sq[newqtnIndex] = newqtn; + setSurveyQuestions(sq); + bgSurveyQuestions(sq) + if (show == true) setrerenderdata(!rerenderdata); + } + } + } + + function onRatingCancel() { + setShowRating(false); + + } + + function onRatingSave() { + setShowRating(false); + + let qtn = RatingQtn; + let id_key = qtn.QuestionId + '_AnswerId'; + let ans_key = qtn.QuestionId + '_Answer'; + let rating_key = qtn.QuestionId + '_Rating'; + let ids = [], anss = []; + RatingOrder.map((item, index) => { + ids.push(item.AnswerId); + anss.push(item.Answer); + }) + let obj = QuestionsData; + obj[rating_key] = ids.join(','); + obj[id_key] = 0; + obj[ans_key] = anss.join(','); + + console.log(obj); + // setQuestionsData(obj); + BgWindowData(obj) + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + + function onRecordCancel() { + setShowRecorder(false); + } + + async function focusToNext(qtn, type = '1') { + + let activeKey = ''; + let arr = Object.keys(inputRefs.current); + + activeKey = 'input' + type + '_' + qtn.QuestionId; + + let activeIndex = arr.indexOf(activeKey); + if (activeIndex < arr.length - 1) { + let nextKey = arr[++activeIndex] + let nextRef = inputRefs.current[nextKey]; + console.log("nextKey", nextKey, nextRef, inputRefs.current[nextKey]) + nextRef.focus(); + } + else { + return + } + } + + function onRecordSave() { + + let isRecorderPlaying = VRS.RecorderPlayStatus != null && VRS.RecorderPlayStatus == true; + let isPlayerPlaying = VRS.PlayerPlayStatus != null && VRS.PlayerPlayStatus == true; + + if (isRecorderPlaying) { + notify(ST.Pleasestoprecordingfirst); + return; + } + else if (isPlayerPlaying) { + stopPlayer(VRS); + // notify('Please stop playing audio first'); + // return; + } + + setShowRecorder(false); + let qtn = RatingQtn; + let id_key = qtn.QuestionId + '_AnswerId'; + let ans_key = qtn.QuestionId + '_Answer'; + let voiceClip_key = qtn.QuestionId + '_VoiceClip'; + + let obj = QuestionsData; + obj[ans_key] = RecFilePath.filename || ''; + obj[id_key] = 0; + obj[voiceClip_key] = RecFilePath; + + // setQuestionsData(obj); + BgWindowData(obj) + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + + const RippleAnimation = (value, minValue, maxValue, delay) => + Animated.loop( + Animated.sequence([ + Animated.timing(value, { + toValue: maxValue, + duration: 1000, + delay: delay, + useNativeDriver: (Platform.OS == 'ios' ? false : true), + }), + Animated.timing(value, { + toValue: minValue, + duration: 1000, + delay: delay, + useNativeDriver: (Platform.OS == 'ios' ? false : true), + }), + ]), + + ).start(); + + const startRecorder = React.useCallback(async (storeData1, qtn, ActiveSurvey1, vrStatus) => { + try { + console.log('startRecorder') + if (audioRecorderPlayer != null) { + + if (vrStatus['RecorderPlayStatus'] == true) { + notify(ST.AlreadyRecording + '...') + return; + } + else if (vrStatus['PlayerPlayStatus'] == true) { + notify(ST.Pleasestopplayerfirst) + return; + } + + stopPlayer(vrStatus); + + let picture_clickedd = new Date(); + let picture_clicked_date = moment(picture_clickedd).format('YYYYMMDD'); + let picture_clicked_time = moment(picture_clickedd).format('HHmmss'); + let commname = storeData1.StoreId + '_' + ActiveSurvey1.SurveyId + '_' + qtn.QuestionId + '_SurveyRecording_' + picture_clicked_date + '_' + picture_clicked_time; + let filename = Platform.OS == 'ios' ? commname + '.m4a' : commname + '.mp3'; + + const url = Platform.OS == 'ios' ? `file://${ImageFolderPath + currentMenu.ScreenName}/` + 'Recordings/' + filename : `${ImageFolderPath + currentMenu.ScreenName}/` + 'Recordings/' + filename; + const url_dir = `${ImageFolderPath + currentMenu.ScreenName}/` + 'Recordings/'; + console.log('write file url:', url); + RNFS.mkdir(url_dir).then((res) => { + + RNFS.writeFile(url, '') + .then(async (success) => { + // if(success!=null){ + const path = Platform.select({ + ios: url, + android: url, + }); + + const result = await audioRecorderPlayer.startRecorder(path, AudioSet); + + if (result != null && result != '') { + console.log('start recording now'); + vrStatus['RecorderPlayStatus'] = true; + setVRS(vrStatus); + setRecFilePath({ 'path': url, 'filename': filename }); + // animate + RippleAnimation(animatedRipple, 0, 1, 0); + RippleAnimation(animatedRipple2, 0, 1, 100); + + audioRecorderPlayer.addRecordBackListener((e) => { + let recordsec = e.currentPosition; + let data = { 'recordSecs': recordsec, 'recordTime': audioRecorderPlayer.mmssss(Math.floor(recordsec)) }; + if (vrStatus['RecorderPlayStatus'] == true) { + setRecorderTimer(data); + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setVoiceRecorderStatus(ST.RecordingPressmictostoprecording); + } + + console.log('recordsec:', recordsec); + if (recordsec >= 60 * 1000) { + stopRecorder(vrStatus); + notify(ST.Maximumrecordtimelimitreached, 'LONG'); + } + return; + }); + } + console.log('start recorder:', result); + // } + // else{ + // notify('Something Went Wrong! Cannot open file for recording!'); + // } + + }) + .catch((err) => { + console.log('eerriur1', err.message); + notify(ST.Somethingwentwrong + ' ' + ST.Cannotopenfileforrecording); + }); + }) + .catch((err) => { + console.log('eerriur2', err.message); + notify(ST.Somethingwentwrong + ' ' + ST.Cannotopenfileforrecording); + }); + + } + } + catch (e) { + console.log('error:', e); + } + + }, []); + + + + + + + const stopRecorder = React.useCallback(async (vrStatus) => { + try { + console.log('stopRecorder'); + if (audioRecorderPlayer != null) { + + animatedRipple.setValue(0); + animatedRipple2.setValue(0.5); + const uri = await audioRecorderPlayer.stopRecorder(); + audioRecorderPlayer.removeRecordBackListener(); + + vrStatus['RecorderPlayStatus'] = false; + vrStatus['PlayerPlayStatus'] = false; + setPlayerTimer({}); + setVRS({ ...VRS, vrStatus }); + setVoiceRecorderStatus(ST.Pressmictostartrecordingvoice); + } + } + catch (e) { + console.log('error:', e); + } + + }, []); + + const startPlayer = React.useCallback(async (url, vrStatus1, type = '0') => { + try { + let vrStatus = VRS; + let qtn = RatingQtn; + if (audioRecorderPlayer != null) { + console.log('startPlayer1', url); + if (vrStatus['PlayerPlayStatus'] == true) { + notify(ST.AlreadyPlaying + '...') + return; + } + else if (vrStatus['RecorderPlayStatus'] == true) { + notify(ST.Pleasestoprecordingfirst) + return; + } + else if (url == '' || url == null) { + notify(ST.Filenotfound) + return; + } + + const result = await audioRecorderPlayer.startPlayer(url); + if (result != null) { + vrStatus['PlayerPlayStatus'] = true; + setVRS(vrStatus); + + audioRecorderPlayer.addPlayBackListener((e) => { + let playDuration = audioRecorderPlayer.mmssss(Math.floor(e.duration)); + let vrs = VRS; + let data = { 'playerSecs': e.currentPosition, 'totalDuration': e.duration, 'playDuration': playDuration, 'playTime': audioRecorderPlayer.mmssss(Math.floor(e.currentPosition),) }; + let data2 = { 'playerSecs': '0000', 'totalDuration': e.duration, 'playDuration': playDuration, 'playTime': "00:00:00" }; + if (vrs['PlayerPlayStatus'] == true) { + setPlayerTimer(e.currentPosition < 0 ? data2 : data); + } + if (e.currentPosition < 0) { + return; + } + let wp = e.duration != null ? Math.floor((e.currentPosition / e.duration) * 100) : 0; + console.log('wp:', wp); + if (wp >= 100 || isNaN(wp)) { + stopPlayer(vrs); + } + else if (type == '1' && wp < 1) { + pausePlayer(); + } + setProcessing(false); + return; + }); + } + else { + setProcessing(false); + } + } + } + catch (e) { + console.log('error:', e); + setProcessing(false); + } + + }, []); + + const resumePlayer = React.useCallback(async (url) => { + console.log('resume player') + let vrStatus = VRS; + const res = await audioRecorderPlayer.resumePlayer(); + console.log('res:', res); + if (res == 'No audio playing') { + startPlayer(url, vrStatus); + } + vrStatus['PlayerPlayStatus'] = true; + setVRS({ ...VRS, vrStatus }); + }, []); + + + const pausePlayer = React.useCallback(() => { + console.log('pause player') + let vrStatus = VRS; + audioRecorderPlayer.pausePlayer(); + vrStatus['PlayerPlayStatus'] = false; + setVRS({ ...VRS, vrStatus }); + }, []); + + const stopPlayer = React.useCallback(async (vrStatus) => { + try { + console.log('stop player now'); + + if (audioRecorderPlayer != null) { + const uri = await audioRecorderPlayer.stopPlayer(); + audioRecorderPlayer.removePlayBackListener(); + vrStatus['PlayerPlayStatus'] = false; + setVRS({ ...VRS, vrStatus }); + } + } + catch (e) { + console.log('error:', e); + } + + }, []); + + async function show_recorder(qtn) { + let voiceClip_key = qtn.QuestionId + '_VoiceClip'; + let url = QuestionsData[voiceClip_key] ? QuestionsData[voiceClip_key].path : ''; + setRatingQtn(qtn); + if ((RecorderTimer == null || Object.keys(RecorderTimer).length <= 0) && (playerTimer == null || Object.keys(playerTimer).length <= 0) && url != null && url != '') { + setLoaderTitle(ST.Loading + '...'); + setProcessing(true); + await startPlayer(url, VRS, '1'); + } + setRecFilePath((QuestionsData[voiceClip_key] || {})); + setShowRecorder(true); + } + + // async function onSubmitData() { + // let isvalid = await validate(); + + // if (isvalid) { + // Keyboard.dismiss(); + // setShowAlert(true); + // // if (SurveyQuestions.length > 0) { + // // SurveyQuestions.map(async (item) => { + // // let qtn = item; + + // // let OTPVerify = qtn.OTP != null && qtn.OTP !== '' ? qtn.OTP : false; + // // // let OTPVerify = qtn.OTP==true || qtn.OTP=="true" || qtn.OTP==1 + + // // let selansid = ''; + // // let ans_key = qtn.QuestionId + '_Answer'; + // // let minlen = (qtn.LengthValidation === true || qtn.LengthValidation === 'true') + // // && qtn.MinLength != null + // // && qtn.MinLength !== '' + // // ? qtn.MinLength + // // : undefined; + + // // // Check if the question has OTP and is of type 'Number' + // // if ((qtn.OTP === "true" || qtn.OTP === true) && qtn.QuestionType === 'Number') { + // // selansid = QuestionsData[ans_key]; + // // } + + + // // // if (OTPVerify && !hasNoAnswer) { + // // // console.log("caled 1") + // // // selansid = String(selansid || "").length === minlen ? selansid : ''; + // // // await handleVerify(selansid , minlen); + + + // // // } else if(OTPVerify == 'false' && hasNoAnswer) { + // // // console.log("caled 2") + // // // setShowAlert(true); + // // // } + + + // // }); + // // } + + // } else { + // setShowAlert(true); + // } + // } + + + async function onSubmitData() { + let isvalid = await validate(); + if (isvalid) { + Keyboard.dismiss(); + setShowAlert(true); + } + } + + + function onSaveCancel() { + setShowAlert(false); + } + + function openImageRefView(QuestionRefImage, windowIndex = 0) { + console.log("indexxxx--", windowIndex) + setZoomImageUrl(QuestionRefImage); + setrefImageIndex(0); + setShow_zoomImage(true); + } + + async function saveData() { + // setHasUnsavedChanges(false); + BgUnsavedChanges(false) + setShowAlert(false); + setLoaderTitle(ST.SavingData + '...'); + setProcessing(true); + try { + let { StoreId, ChainId, StateId, StoreTypeId } = storeData; + await db.transaction(async function (txn) { + + let { MenuId } = currentMenu; + let q = `DELETE FROM ${AppTables.SURVEY} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' and MENU_ID='${MenuId}' and SURVEY_ID='${ActiveSurvey.SurveyId}' `; + if (ShowCat == true) { + q += ` and CATEGORY_ID='${ActiveCategory.CategoryId}' `; + } + + // remove old data + await txn.executeSql(q, [], async function (txn2, txnres) { + console.log('survey data deleted'); + }, function (txnE, txnerr) { console.log(txnerr); },); + + + var values = ''; + let { SurveyId, SurveyName } = ActiveSurvey; + for (var i = 0; i < SurveyQuestions.length; i++) { + values += values != '' ? ' , ' : ''; + + let qtn = SurveyQuestions[i]; + + let id_key = qtn.QuestionId + '_AnswerId'; + let ans_key = qtn.QuestionId + '_Answer'; + let multi_key = qtn.QuestionId + '_MultiOption'; + let date_key = qtn.QuestionId + '_Date'; + let img_key1 = qtn.QuestionId + '_ImagePath1'; + let imgname_key1 = qtn.QuestionId + '_ImageName1'; + let img_key2 = qtn.QuestionId + '_ImagePath2'; + let imgname_key2 = qtn.QuestionId + '_ImageName2'; + let rating_key = qtn.QuestionId + '_Rating'; + let voiceClip_key = qtn.QuestionId + '_VoiceClip'; + + let { CategoryId, Category, SubCategory, SubCategoryId, DateRange, LengthValidation, MaxLength, MinLength, OTP, Question, QuestionId, QuestionImageAllow, QuestionType } = qtn; + + let selansid = QuestionsData[id_key] || 0; + let selans = QuestionsData[ans_key] || ''; + let imgName1 = QuestionsData[imgname_key1] || ''; + let imgName2 = QuestionsData[imgname_key2] || ''; + let multiops = QuestionsData[multi_key] || ''; + let isQtnDisabled = qtn.isDisabled != null && qtn.isDisabled != '' ? qtn.isDisabled ? 1 : 0 : 0; + let allanss = qtn.Answers || {}; + let ans_obj = allanss.find(i => i.AnswerId == selansid) + let imgallow1 = ans_obj != null && ans_obj['ImageAllow1'] != null ? ans_obj.ImageAllow1 : false; + let imgallow2 = ans_obj != null && ans_obj['ImageAllow2'] != null ? ans_obj.ImageAllow2 : false; + let f_imgalloq1 = (QuestionImageAllow == 'true' || QuestionImageAllow == 1) || (imgallow1 == 'true' || imgallow1 == 1) + let VerifyOTP = qtn?.VerifyOTP; + values += ` ('${StoreId}','${d2}','${SurveyId}','${MenuId}','${CategoryId}','${SubCategoryId}','${Question}','${QuestionId}','${QuestionType}','${selans}','${selansid}','${f_imgalloq1}','${(imgName1 || '')}','${imgallow2}','${(imgName2 || '')}','${multiops}','${isQtnDisabled}','${d2}', ${VerifyOTP}) `; + } + console.log("values", values) + let add_data = `INSERT INTO ${AppTables.SURVEY} (STORE_ID,VISIT_DATE,SURVEY_ID,MENU_ID,CATEGORY_ID,SUB_CATEGORY_ID,QUESTION,QUESTION_ID,QUESTION_TYPE,ANSWER,ANSWER_ID,IMAGE_ALLOW1,IMAGE1,IMAGE_ALLOW2,IMAGE2,MULTI_OPTIONS_IDS,IS_DISABLED,ADDED_DATE , VerifyOTP) VALUES ${values} `; + + await txn.executeSql(add_data, [], async function (txn2, txnres) { + console.log('surveys added'); + await clear_item('storeData'); + BgUnsavedChanges(false); + // props.set_autoback({'AutoGoToPrev':true}); + notify(ST.Surveyupdatedsuccessfully, 'SHORT'); + setProcessing(false); + props.navigation.goBack(); + + }, function (txnE, txnerr) { console.log(txnerr); setProcessing(false); notify(ST.Cannotupdatesurvey) },); + + + }); + } catch (err) { + console.log(err); + } + } + + + // send otp + + const [showotpfeild, setShowOTPFeild] = useState(false); + const [isSendOtpEnabled, setSendOtpEnabled] = useState(false); + const [otp, setOtp] = useState(''); + + const handleVerify = async (selansid, minlen) => { + console.log(minlen, "selansid----------", selansid) + if (!showotpfeild) { + notify('Please click on Send OTP Button', 'SHORT'); + return false + } + else if (otp.length !== 6) { + notify('Please enter 6-digit OTP', 'SHORT'); + return false + } else if (selansid.length == minlen) { + return await Verify_OTP(selansid); + } + + }; + + const Send_OTP = async (value) => { + console.log("OTP called-------Send", value); + + const phoneNumber = `${'91'}${value}`; + + let projectCode = await get_item('projectCode'); + const projectcode = JSON.parse(projectCode); + + console.log("projectDetails----", projectCode) + + const url = "https://api1.parinaam.in/api/generic/CheckUserAndSendOTP"; + const data = { mobileno: phoneNumber, projectcode: projectcode }; + + console.log(url, data); + + await getmobileverifyotp(url, data) + .then(async (res) => { + console.log(res, "response..."); + + if (!res[0]?.OTP) { + notify(res[0]?.Messages, "SHORT"); // Invalid phone + } else if (res[0]?.OTP) { + notify(res[0]?.Messages, "SHORT"); + setShowOTPFeild(true); + // return true; + } else if (res.networkErr && res.error) { + notify("Please connect to internet - " + res.error, "SHORT"); + } else if (!res.false && res.error) { + notify(res.error, "SHORT"); + } + }) + .catch((err) => { + console.log("onPage OTP send error1", err); + }); + }; + + + const Verify_OTP = async (value) => { + console.log("OTP called-------verify otpppppp", value.length); + + const phoneNumber = `${'91'}${value}`; + + const url = "https://api1.parinaam.in/api/generic/otpauthentication"; + const data = { + otp: otp, + mobileno: phoneNumber + }; + + console.log(url, data); + + return await verifymobileotp(url, data) + .then(async (res) => { + console.log(res, "response..vwrify."); + + if (res[0]?.Message == 'OTP is matched') { + notify(res[0]?.Message, "SHORT"); + setVerifiedOTP(true); + return true; + // setShowAlert(true); // show save alert . popup + } else if (res[0]?.Message != 'OTP is matched') { + notify(res[0]?.Message, "SHORT"); + } else if (res.networkErr && res.error) { + notify("Please connect to internet - " + res.error, "SHORT"); + } else if (!res.false && res.error) { + notify(res.error, "SHORT"); + } + return false + }) + .catch((err) => { + console.log("onPage OTP send error1", err); + return false + }); + }; + + + async function validate() { + function showError(obj, isErr) { + setErrorField(obj); + setError(isErr); + } + + + let Image1MandIndex = KPIFields.findIndex(i => i.KPIFieldName == 'Image1Mandatory'); + let Image1MandObj = Image1MandIndex >= 0 ? KPIFields[Image1MandIndex] : {}; + let isImage1Mand = Image1MandIndex >= 0 ? Image1MandObj['KPIFieldEnable'] : true; + + let Image2MandIndex = KPIFields.findIndex(i => i.KPIFieldName == 'Image2Mandatory'); + let Image2MandObj = Image2MandIndex >= 0 ? KPIFields[Image2MandIndex] : {}; + let isImage2Mand = Image2MandIndex >= 0 ? Image2MandObj['KPIFieldEnable'] : false; + + + var isvalid = true; + const QD = QuestionsData; + console.log(SurveyQuestions.length); + for (var i = 0; i < SurveyQuestions.length; i++) { + let qtn = SurveyQuestions[i]; + let selansid = '', selanswer = '', selimg = '', showImageTag = false, showImageTag2 = false, isImageMandateforAns = false; + let id_key = qtn.QuestionId + '_AnswerId'; + let ans_key = qtn.QuestionId + '_Answer'; + let multi_key = qtn.QuestionId + '_MultiOption'; + let date_key = qtn.QuestionId + '_Date'; + let img_key = qtn.QuestionId + '_ImagePath1'; + let imgname_key = qtn.QuestionId + '_ImageName1'; + let img_key2 = qtn.QuestionId + '_ImagePath2'; + let imgname_key2 = qtn.QuestionId + '_ImageName2'; + let rating_key = qtn.QuestionId + '_Rating'; + let voiceClip_key = qtn.QuestionId + '_VoiceClip'; + let list_mcdata = []; + + let isDisabled = qtn.isDisabled != null ? qtn.isDisabled : false + let LengthValidation = qtn.LengthValidation == 'true' || qtn.LengthValidation == 1 ? true : false; + + let isLengthValidationReq = LengthValidation; + + let minL = qtn.MinLength != null && qtn.MinLength != '' ? qtn.MinLength : 0; + let maxL = qtn.MaxLength != null && qtn.MaxLength != '' ? qtn.MaxLength : 10; + + + + let enableOTP = qtn.OTP != null && qtn.OTP != '' ? qtn.OTP : false; + let verify_OTP = qtn.VerifyOTP; + + console.log(verify_OTP, "OTPVerify---11111", enableOTP); + // console.log("qtn---",qtn , verify_OTP) + + let ansVal = QD[ans_key]; + console.log("ansVal", ansVal) + let errorobj = { 'EF_Qtn': qtn }; + + // LengthValidation is required for number type input only + if (qtn.QuestionType == 'Number') { + isLengthValidationReq = LengthValidation; + // ansVal=parseInt(ansVal); + } + + + // console.log('isLengthValidationReq' ,isLengthValidationReq,ansVal,minL,maxL,ansVal.length); + + if (isDisabled == true) { + + } + else { + // let isImgAllowed=((qtn.QuestionImageAllow==true || qtn.QuestionImageAllow=='true' || qtn.QuestionImageAllow==1)|| (qtn.QuestionType=="Image") && (qtn?.Image1Mandatory=="true"|| qtn?.Image1Mandatory==true)); + let isImgAllowed = ((qtn.QuestionImageAllow == true || qtn.QuestionImageAllow == 'true' || qtn.QuestionImageAllow == 1) || (qtn.QuestionType == "Image")); + // let isImg1mandatory=(qtn?.Image1Mandatory=="true" || qtn?.Image1Mandatory=='true'); + + let isImg1mandatory = (qtn.Image1Mandatory == "true") || (qtn.Image1Mandatory == true) || (qtn.QuestionImageMandatory == "true") || (qtn.QuestionImageMandatory == true) + + let isImg2mandatory = (qtn?.Image2Mandatory == "true" || qtn?.Image2Mandatory == 'true'); + let isQuestionImageMandatory = qtn.QuestionType == "Image" ? (qtn?.QuestionImageMandatory == "true" || qtn?.QuestionImageMandatory == true) : true; + let checkForAnsKey = (qtn.QuestionType == 'Decimal' || qtn.QuestionType == 'Number' || qtn.QuestionType == 'Text' || qtn.QuestionType == 'Date' || qtn.QuestionType == 'Rating'); + + console.log("qtn--------------", qtn) + + if (qtn.QuestionType == 'Single choice list') { + selansid = QD[id_key]; + } + else if (qtn.QuestionType == 'Multi choice list') { + selansid = QD[multi_key] != null && QD[multi_key] != '' ? QD[multi_key].split(',') : []; + } + + if (qtn.QuestionType == 'Multi choice list' && selansid.length <= 0) { + errorobj["EF_Input"] = 'Input'; + showError(errorobj, true); + // let refIn1=inputRefs.current['input1_'+qtn.QuestionId] + // refIn1.focus(); + isvalid = false; + notify(ST.Pleaseselectoptionsfortherequiredfield, 'SHORT'); + break; + } + else if (checkForAnsKey && (Object.keys(QD).indexOf(ans_key) < 0 || (Object.keys(QD).indexOf(ans_key) >= 0 && QD[ans_key] === ''))) { + errorobj["EF_Input"] = 'Input'; + showError(errorobj, true); + // let refIn1=inputRefs.current['input1_'+qtn.QuestionId] + // refIn1.focus(); + isvalid = false; + + let msg = (qtn.QuestionType == 'Date' ? ST.Pleasepickadate : (qtn.QuestionType == 'Rating' ? ST.Pleaseselectrating : ST.Pleasefillalldetails)); + notify(msg, 'SHORT'); + break; + } + + else if (qtn.QuestionType == 'Audio' && (Object.keys(QD).indexOf(voiceClip_key) < 0 || (Object.keys(QD).indexOf(voiceClip_key) >= 0 && (QD[voiceClip_key] == null || QD[voiceClip_key].filename == null || QD[voiceClip_key].filename == '')))) { + errorobj["EF_Input"] = 'Input'; + showError(errorobj, true); + // let refIn1=inputRefs.current['input1_'+qtn.QuestionId] + // refIn1.focus(); + isvalid = false; + notify(ST.Pleaserecordaudioclipfortherequiredfield, 'SHORT'); + break; + } + else if (isQuestionImageMandatory && Object.keys(QD).indexOf(id_key) < 0 || (Object.keys(QD).indexOf(id_key) >= 0 && (QD[id_key] === ''))) { + errorobj["EF_Input"] = 'Input'; + showError(errorobj, true); + console.log("Pleasefillalldetails--------1", 'input1_' + qtn.QuestionId, qtn) + // let refIn1=inputRefs.current['input1_'+qtn.QuestionId] + // refIn1.focus(); + isvalid = false; + + notify(`${ST.Pleasefillalltherequiredfield} ${ST.In} ${qtn.Question}`, 'SHORT'); + break; + } + else if (isImgAllowed && isImg1mandatory && (Object.keys(QD).indexOf(img_key) < 0 || (Object.keys(QD).indexOf(img_key) >= 0 && QD[img_key] === ''))) { + errorobj["EF_Image"] = 'Image'; + showError(errorobj, true); + // let refIn1=inputRefs.current['input1_'+qtn.QuestionId] + // refIn1.focus(); + isvalid = false; + notify(ST.Pleaseaddimages, 'SHORT'); + break; + } else if (isLengthValidationReq && ansVal.length < minL) { + errorobj["EF_Input"] = 'Input'; + showError(errorobj, true); + // let refIn1=inputRefs.current['input1_'+qtn.QuestionId] + // refIn1.focus(); + isvalid = false; + notify("Minimum digits allowed is " + minL + " in " + qtn.Question, 'SHORT'); + break; + + } + else if (isLengthValidationReq && ansVal.length > maxL) { + errorobj["EF_Input"] = 'Input'; + showError(errorobj, true); + + isvalid = false; + notify("Maximum digits allowed is " + maxL + " in " + qtn.Question, 'SHORT'); + break; + } + + else { + console.log('no condition found'); + } + + if ((qtn.QuestionType == 'Single choice list' || qtn.QuestionType == 'Multi choice list')) { + if (qtn.Answers && qtn.Answers.length > 0) { + for (var j = 0; j < qtn.Answers.length; j++) { + let ansss = qtn.Answers[j]; + let isandImgAl = (ansss.ImageAllow1 == true || ansss.ImageAllow1 == 'true' || ansss.ImageAllow1 == 1); + if (qtn.QuestionType == 'Single choice list' && (isandImgAl && ansss.AnswerId == selansid)) { + showImageTag = true; + isImageMandateforAns = qtn.Image1Mandatory; + console.log("isImageMandateforAns1---", isImageMandateforAns) + } + else if (qtn.QuestionType == 'Multi choice list' && (isandImgAl && selansid.indexOf(ansss.AnswerId) >= 0)) { + showImageTag = true; + isImageMandateforAns = qtn.Image1Mandatory; + } + + let isandImgAl2 = (ansss.ImageAllow2 == true || ansss.ImageAllow2 == 'true' || ansss.ImageAllow2 == 1); + if (qtn.QuestionType == 'Single choice list' && (isandImgAl2 && ansss.AnswerId == selansid)) { + showImageTag2 = true; + } + else if (qtn.QuestionType == 'Multi choice list' && (isandImgAl2 && selansid.indexOf(ansss.AnswerId) >= 0)) { + showImageTag2 = true; + } + } + } + } + + if (isImg1mandatory && showImageTag && (Object.keys(QD).indexOf(img_key) < 0 || (Object.keys(QD).indexOf(img_key) >= 0 && QD[img_key] === ''))) { + errorobj["EF_Image"] = 'Image'; + showError(errorobj, true); + // let refIn1=inputRefs.current['input1_'+qtn.QuestionId] + // refIn1.focus(); + isvalid = false; + notify(ST.Pleaseaddimages, 'SHORT'); + break; + } + + if (isImg2mandatory && showImageTag2 && (Object.keys(QD).indexOf(img_key2) < 0 || (Object.keys(QD).indexOf(img_key2) >= 0 && QD[img_key2] === ''))) { + errorobj["EF_Image"] = 'Image'; + showError(errorobj, true); + // let refIn1=inputRefs.current['input1_'+qtn.QuestionId] + // refIn1.focus(); + isvalid = false; + notify(ST.Pleaseaddimages, 'SHORT'); + break; + } + + if ((enableOTP == "true" || enableOTP == true) && verify_OTP != 1) { + let minlen = (qtn.LengthValidation === true || qtn.LengthValidation === 'true') + && qtn.MinLength != null + && qtn.MinLength !== '' + ? qtn.MinLength + : undefined; + + console.log("ans_key---------------", enableOTP, typeof (enableOTP), ans_key, QD) + selansid = QD[ans_key]; + console.log(selansid, "Helooooooo-----------") + let resultOTp = await handleVerify(selansid, minlen); + console.log(resultOTp, "resultOTp-----------") + qtn.VerifyOTP = resultOTp ? 1 : 0 + isvalid = resultOTp || false; + break; + } + } + } + + return isvalid; + } + + function render_Picker(label_key, value_key, onChange = () => { }, selected_data = {}) { + var data = []; + let qtn = selected_data.qtn || {}; + let EStyle_Qtn_Input = selected_data.EStyle_Qtn_Input || {}; + let isQtnDisabled = qtn.isDisabled != null && qtn.isDisabled != '' ? qtn.isDisabled : false; + let allAnswers = qtn.Answers || []; + + allAnswers.map((item, index) => { + let obj = { key: index, label: item[label_key], value: item[value_key] }; + if (selected_data.value == item[label_key]) + obj['component'] = {item[label_key]}; + data.push(obj); + }); + + return ( + { onChange(option, qtn) }} + overlayStyle={customStyle.addVisPickerOverlay} + cancelContainerStyle={customStyle.addVisPicker_OptionContainerStyle} + optionStyle={customStyle.addvis_opStyle} + optionTextStyle={customStyle.addvis_opTextStyle} + optionContainerStyle={customStyle.addVisPicker_OptionContainerStyle} + selectedKey={'1'} + disabled={isQtnDisabled} + cancelText={ST.Cancel} + > + {(selected_data.value != null && selected_data.value != '' ? selected_data.value : '-select-')} + + ) + } + + function renderDatePicker(qtn) { + let qtnn = qtn; + let DateRange = qtn.DateRange; + let maxDate = moment().add(10, 'years').format('MM/DD/YYYY'); + let minDate = moment().subtract(10, 'years').format('MM/DD/YYYY'); + + const currentDate = new Date(); + const maxDateIOS = currentDate; + const minDateIOS = new Date(); + minDateIOS.setFullYear(minDateIOS.getFullYear() - 10); + + if (DateRange == 'RFD') { + maxDate = moment().format('MM/DD/YYYY'); + } + else if (DateRange == 'RPD') { + minDate = moment().format('MM/DD/YYYY'); + } + + return ( + { setTextValue(selectedDate, qtnn) }} + maximumDate={Platform.OS === 'ios' ? new Date(maxDateIOS) : new Date(maxDate)} + minimumDate={Platform.OS === 'ios' ? new Date(minDateIOS) : new Date(minDate)} + /> + ); + } + + function renderItem({ item, drag, isActive }) { + return ( + + + {item.Answer} + + + ); + }; + + function renderRatingView() { + let qtn = RatingQtn; + let Answers = qtn.Answers; + let id_key = qtn.QuestionId + '_AnswerId'; + let ans_key = qtn.QuestionId + '_Answer'; + let rating_key = qtn.QuestionId + '_Rating'; + // let ratings=QuestionsData[rating_key]!=null?QuestionsData[rating_key].split(','):[]; + + let newarr = RatingOrder; + if (RatingOrder.length <= 0) { + newarr = Answers; + } + + return ( + + + {ST.DragItemsInOrder} + {ST.Pressandholdtodrag} + { setRatingValue(data) }} + keyExtractor={(item) => item.AnswerId} + renderItem={renderItem} + /> + + { onRatingCancel() }}> + {ST.Cancel} + + { onRatingSave() }}> + {ST.Save} + + + + + ) + } + + function renderRecorderView() { + + let qtn = RatingQtn; + let isRecorderPlaying = VRS.RecorderPlayStatus != null && VRS.RecorderPlayStatus == true; + let isPlayerPlaying = VRS.PlayerPlayStatus != null && VRS.PlayerPlayStatus == true; + const scale = animatedRipple.interpolate({ + inputRange: [0, 1], + outputRange: [1, 1.3], + }); + + const borderColor = animatedRipple.interpolate({ + inputRange: [0, 1], + outputRange: ['#f5acb4c2', '#fce6e9e3'], + }); + + const scale2 = animatedRipple2.interpolate({ + inputRange: [0, 1], + outputRange: [1, 1.5], + }); + + const borderColor2 = animatedRipple2.interpolate({ + inputRange: [0, 1], + outputRange: ['#f5acb4c2', '#fce6e9e3'], + }); + + let totalDuration = RecorderTimer.recordSecs != null ? RecorderTimer.recordSecs : playerTimer.totalDuration; + let wp = totalDuration != null ? Math.floor((playerTimer.playerSecs / totalDuration) * 100) : 0; + let width1 = wp <= 100 ? (wp > 0 ? wp + '%' : '0%') : '100%'; + if (isNaN(wp)) width1 = '0%'; + + return ( + + {rerenderView == rerenderView && + + {ST.RecordVoiceClip} + {ST.Youcanrecordmaxfor60secs} + {VoiceRecorderStatus} + + + + + + { startRecorder(storeData, qtn, ActiveSurvey, VRS); }}> + + + {isRecorderPlaying && + { stopRecorder(VRS); }}> + + + } + + + + {RecorderTimer.recordTime} + { + (!isRecorderPlaying && RecFilePath.filename != null && RecFilePath.filename != '') && + + + + + + + {`${(playerTimer.playTime || '00:00:00')} / ${playerTimer.playDuration || RecorderTimer.recordTime}`} + + + + { let url = (Platform.OS == 'ios' ? 'file://' : '') + `${ImageFolderPath + currentMenu.ScreenName}/` + 'Recordings/' + RecFilePath.filename; (wp < 100 && wp > 0) ? resumePlayer(url) : startPlayer(url, VRS); }}> + + + {isPlayerPlaying && { wp < 100 ? pausePlayer() : stopPlayer(VRS); }}> + + } + + + } + + + + { onRecordCancel() }}> + {ST.Cancel} + + { onRecordSave() }}> + {ST.Save} + + + } + + ) + } + + function _renderSurveyQtns(subcat) { + const SurveyQuestions = subcat.Questions; + console.log("surveyQuestions---", SurveyQuestions) + + + return ( + + { + SurveyQuestions.length > 0 && + SurveyQuestions.map((item, index) => { + + let qtn = item; + let selansid = '', selanswer = '', selimg = '', selimg2 = '', showImageTag = false, showImageTag2 = false; + let id_key = qtn.QuestionId + '_AnswerId'; + let ans_key = qtn.QuestionId + '_Answer'; + let multi_key = qtn.QuestionId + '_MultiOption'; + let date_key = qtn.QuestionId + '_Date'; + let img_key = qtn.QuestionId + '_ImagePath1'; + let imgname_key = qtn.QuestionId + '_ImageName1'; + let img_key2 = qtn.QuestionId + '_ImagePath2'; + let imgname_key2 = qtn.QuestionId + '_ImageName2'; + let rating_key = qtn.QuestionId + '_Rating'; + let voiceClip_key = qtn.QuestionId + '_VoiceClip'; + let list_mcdata = []; + let maxlen = (qtn.LengthValidation == true || qtn.LengthValidation == 'true') && qtn.MaxLength != null && qtn.MaxLength != '' ? qtn.MaxLength : undefined; + let minlen = (qtn.LengthValidation == true || qtn.LengthValidation == 'true') && qtn.MinLength != null && qtn.MinLength != '' ? qtn.MinLength : undefined; + + if (qtn.QuestionType == 'Single choice list') { + selansid = QuestionsData[id_key] != null ? QuestionsData[id_key] : ''; + selanswer = QuestionsData[ans_key] != null ? QuestionsData[ans_key] : ''; + } + else if (qtn.QuestionType == 'Multi choice list') { + + if (qtn.Answers != null) { + console.log('qtn.Answers:', qtn.Answers.length); + for (var i = 0; i < qtn.Answers.length; i++) { + let obj = { 'AnswerId': parseInt(qtn.Answers[i].AnswerId), 'Answer': qtn.Answers[i].Answer }; + list_mcdata.push(obj); + } + } + selansid = QuestionsData[multi_key] != null && QuestionsData[multi_key] != '' ? QuestionsData[multi_key].split(',') : []; + if (selansid != null && selansid.length > 0) { + let arr = []; + for (var i = 0; i < selansid.length; i++) { + arr.push(parseInt(selansid[i])); + } + selansid = arr; + } + } + else if (qtn.QuestionType == 'Number' || qtn.QuestionType == 'Text' || qtn.QuestionType == 'Decimal' || qtn.QuestionType == 'Date') { + selansid = QuestionsData[ans_key]; + selanswer = (qtn.QuestionType == 'Date') ? (QuestionsData[date_key] || moment().format('MM/DD/YYYY')) : ''; + showImageTag = (qtn.QuestionImageAllow == true || qtn.QuestionImageAllow == 'true' || qtn.QuestionImageAllow == 1); + showImageTag2 = false; + } else if (qtn.QuestionType == 'Image') { + selansid = QuestionsData[id_key] != null ? QuestionsData[id_key] : ''; + selanswer = QuestionsData[ans_key] != null ? QuestionsData[ans_key] : ''; // this is the image file name + {/* filePath=`${ImageFolderPath+currentMenu.ScreenName}/${selanswer}`; */ } + showImageTag = true; + } + else if (qtn.QuestionType == 'Rating') { + selanswer = QuestionsData[ans_key] ? QuestionsData[ans_key] : ''; + } + else if (qtn.QuestionType == 'Audio') { + selansid = QuestionsData[ans_key] ? QuestionsData[ans_key] : ''; + selanswer = QuestionsData[voiceClip_key] ? (QuestionsData[voiceClip_key].filename || '') : ''; + } + + if ((qtn.QuestionType == 'Single choice list' || qtn.QuestionType == 'Multi choice list')) { + if (qtn.Answers && qtn.Answers.length > 0) { + for (var i = 0; i < qtn.Answers.length; i++) { + let ansss = qtn.Answers[i]; + + let isandImgAl = (ansss.ImageAllow1 == true || ansss.ImageAllow1 == 'true' || ansss.ImageAllow1 == 1); + let isandImgAl2 = (ansss.ImageAllow2 == true || ansss.ImageAllow2 == 'true' || ansss.ImageAllow2 == 1); + + if (qtn.QuestionType == 'Single choice list' && (isandImgAl && ansss.AnswerId == selansid)) { + showImageTag = true; + } + else if (qtn.QuestionType == 'Multi choice list' && (isandImgAl && selansid.indexOf(ansss.AnswerId) >= 0)) { + showImageTag = true; + } + + if (qtn.QuestionType == 'Single choice list' && (isandImgAl2 && ansss.AnswerId == selansid)) { + showImageTag2 = true; + } + else if (qtn.QuestionType == 'Multi choice list' && (isandImgAl2 && selansid.indexOf(ansss.AnswerId) >= 0)) { + showImageTag2 = true; + } + } + } + } + + if (showImageTag) { + selimg = QuestionsData[img_key] != null && QuestionsData[img_key] != '' ? 'file://' + QuestionsData[img_key] : ''; + } + + if (showImageTag2) { + selimg2 = QuestionsData[img_key2] != null && QuestionsData[img_key2] != '' ? 'file://' + QuestionsData[img_key2] : ''; + } + + let isDisabled = qtn.isDisabled != null ? qtn.isDisabled : false + + + let rs = qtn?.CalFormula || ""; + + Object.keys(QuestionsData).forEach((item) => { + const regex = new RegExp(item, 'g'); + rs = rs.replace(regex, QuestionsData[item]); + }); + + if (qtn.QuestionType == "Calculate") { + try { + let selansidVal = /_Anser/.test(rs) ? selansid : eval(rs) + selansidVal = typeof (selansidVal) == "number" ? selansidVal.toFixed(2) : selansidVal; + selansidVal = String(selansidVal) + selansid = /_Anser/.test(rs) ? selansid : String(eval(selansidVal)) + + if (QuestionsData[ans_key] != selansid) { + setQuestionsData((prev) => ({ + ...prev, + [id_key]: 0, + [ans_key]: selansid, + })); + setrerenderdata(!rerenderdata); + } + } catch (e) { + console.log("selansid------e", e) + selansid = /_Anser/.test(selansid) ? "" : selansid + } + } + + // Error Field highlight styles + let EF_Qtn = errorfield.EF_Qtn != null ? errorfield.EF_Qtn : {}; + let show_errorhere = error == true && EF_Qtn.QuestionId == qtn.QuestionId; + + // this will show error field in red (if window is present and exist reason is enabled and not filled ) or (if window is not present and Not exist reason is enabled and not filled ) + let EF_Input = errorfield.EF_Input || ''; + let EF_Image = errorfield.EF_Image || ''; + let EStyle_Qtn_Input = show_errorhere && EF_Input == 'Input' ? customStyle.stk_inptSTyle_error : {}; + let EStyle_Qtn_MultiChoice = show_errorhere && EF_Input == 'Input' ? customStyle.stk_MultiSSTyle_error : {}; + let EStyle_Qtn_Image = show_errorhere && EF_Image == 'Image' ? customStyle.stk_inptSTyle_error : {}; + let Image1Mandatory = (qtn.Image1Mandatory == "true") || (qtn.Image1Mandatory == true) || (qtn.QuestionImageMandatory == "true") || (qtn.QuestionImageMandatory == true) + let Image2Mandatory = (qtn.Image2Mandatory == "true") || (qtn.Image2Mandatory == true) + + // console.log("Image1Mandatoryy---",Image1Mandatory+ "----"+qtn.Question) + + + // let OTPVerify = qtn.OTP != null && qtn.OTP != "" ? qtn.OTP : false ; + + let OTPVerify = qtn.OTP == 'true' || qtn.OTP == 1 ? true : false; + + console.log("qtn.VerifyOTP", qtn.VerifyOTP) + + + if (isDisabled == true) { + return ( + + ) + } + else { + + return ( + + {qtn.Question} + {console.log("chekqtnn:", qtn.Question, "-----", qtn)} + {qtn.QuestionRefImage != null && qtn.QuestionRefImage != "" && + { openImageRefView(qtn.QuestionRefImage, index) }}> + + + } + {qtn.QuestionType == 'Single choice list' && qtn.Answers && + render_Picker('Answer', 'AnswerId', onselectionChange, { value: selanswer, qtn: qtn, EStyle_Qtn_Input }) + } + {qtn.QuestionType == 'Multi choice list' && qtn.Answers && + { console.log('onSelectedItemsChange'); setMultiSelectValue(selectedItems, qtn) }} + selectedItems={selansid} + selectText="Pick Items" + searchInputPlaceholderText="Search Items..." + // onChangeInput={ (text)=> console.log(text)} + tagRemoveIconColor={PageTheme.$primary_color} + tagBorderColor={PageTheme.$primary_color} + tagTextColor={PageTheme.$primary_color} + selectedItemTextColor={PageTheme.$primary_color} + selectedItemIconColor={PageTheme.$primary_color} + tagContainerStyle={{ height: 30, width: '100%', paddingVertical: 5 }} + styleTextTag={{ fontSize: 14 }} + itemTextColor={PageTheme.$text_color} + displayKey="Answer" + searchInputStyle={customStyle.wind_MultiSearchInputStyle} + styleMainWrapper={EStyle_Qtn_MultiChoice} + submitButtonColor={PageTheme.$primary_color} + submitButtonText="Submit" + /> + } + {(qtn.QuestionType == 'Number' || qtn.QuestionType == 'Decimal' || qtn.QuestionType == 'Text' || qtn.QuestionType == "Calculate") && + <> + + + { inputRefs.current['input1_' + qtn.QuestionId] = reff; }} + style={[customStyle.surveyQtn_InputStyle, OTPVerify ? { width: '65%' } : { width: '100%' }, EStyle_Qtn_Input, ((qtn.QuestionType == "Calculate") && { fontWeight: "700", })]} + placeholder="" + autoComplete='off' + // editable={qtn.QuestionType!="Calculate" && (verifiedOTP && OTPVerify) } + editable={OTPVerify ? !qtn.VerifyOTP == 1 : qtn.QuestionType != "Calculate"} + placeholderTextColor={PageTheme.$placeholder_color} + // keyboardType={'ascii-capable'} + returnKeyType={(Platform.OS === 'ios') ? 'done' : 'next'} + blurOnSubmit={false} + keyboardType={(qtn.QuestionType == 'Decimal' ? 'decimal-pad' : (qtn.QuestionType == 'Text' ? 'default' : 'number-pad'))} + value={selansid} + minLength={minlen} + maxLength={maxlen} + onSubmitEditing={() => { focusToNext(qtn, '1') }} + onChangeText={(val) => { setTextValue(val, qtn, (qtn.QuestionType == 'Decimal' ? 'decimal' : (qtn.QuestionType == 'Text' ? 'text' : 'numeric'))) }} + /> + + {console.log("minlen------------", String(selansid || "")?.length, minlen)} + + {OTPVerify && String(selansid || "")?.length == minlen && <> + { qtn.VerifyOTP ? '' : Send_OTP(selansid) }} + > + {qtn.VerifyOTP ? "Verified" : "Send OTP"} + + } + + + + {showotpfeild && OTPVerify && + + { setOtp(code); }} + numberOfInputs={6} + secureTextEntry={true} + defaultValue='' + keyboardType={"numeric"} + // autofillFromClipboard={false} + inputStyles={customStyle.verify_otp_inputStyle} + style={customStyle.otp_field} + /> + + } + + } + + + { + (qtn.QuestionType == 'Date') && + + {selansid != '' ? selansid : 'MM/YYYY'} + { setDateValue(selanswer); showQtnDatePicker(qtn, true) }}> + + + + } + {((qtn.showDatePicker == true || qtn.showDatePicker == 'true') && (qtn.QuestionType == 'Date')) && + renderDatePicker(qtn) + } + { + (qtn.QuestionType == 'Rating') && + + {selanswer} + { setRatingQtn(qtn); setShowRating(true); }}> + + + + } + + { + (qtn.QuestionType == 'Audio') && + + {selanswer} + { show_recorder(qtn); }}> + + + + } + + { + showImageTag && + + + {console.log("checkimgmandate:", Image1Mandatory)} + {Image1Mandatory ? + { openCamera(qtn, '1') }}> + + : + { openCamera(qtn, '1') }}> + + } + + } + + { + showImageTag2 && + + + {Image2Mandatory ? + { openCamera(qtn, '2') }}> + + : + { openCamera(qtn, '2') }}> + + } + + } + + ) + } + + }) + } + + + ); + } + + + function _renderHeader(currentIndex) { + return ( + + {`${(currentIndex + 1)}/${zoomImageUrl.length}`} + { setShow_zoomImage(false) }}> + + + + ) + } + // function _renderSurveyQtns(subcatItem){ + // return ( + // { + + // }} + // /> + // ) + // } + + function _renderSurveyView() { + return ( + + { + let subcat = item, s_index = index; + let RefImage = item.RefImage; + console.log("refimg--", RefImage) + + return ( + + + {subcat.SubCategory} + {/* {console.log("subsssss---:",subcat.SubCategoryId)} + {RefImage!=null && RefImage!="" && + {openImageRefView(index)}}> + + + } */} + + + + {_renderSurveyQtns(subcat)} + + + ) + }} + > + + + + ); + } + + + + return ( + + {processing && } + + {ConfirmSaveAlert(props, showAlert, onSaveCancel, saveData)} + { setShowCamera(false); getImage(imgData) }} showCamera={showCamera} onHideCamera={() => { setShowCamera(false); }} /> + + + + + + {/* {(ActiveSurvey.SurveyName!=null?(ActiveSurvey.SurveyName.length>26?ActiveSurvey.SurveyName.substring(0,26)+'...':ActiveSurvey.SurveyName) : '')} */} + {(`${(ST.SurveyId != null ? ST.SurveyId : 'Survey Id')} : ` + (ActiveSurvey.SurveyId || '') + (ShowCat == true ? ' | ' + `${(ST.CategoryId != null ? ST.CategoryId : 'Category Id')} : ` + (ActiveCategory.CategoryId || '') : ''))} + + + {Object.keys(ActiveSurvey).length > 0 && + _renderSurveyView() + } + + { + // getAllFolderImages() + onSubmitData() + }} /> + + + + {showRating == true && + renderRatingView() + } + + {show_zoomImage && + + null} + /> + + } + + {showRecorder == true && + renderRecorderView() + } + + ); +} + + +export default connect(mapStateToProps, mapDispatchToProps)(SurveyView); \ No newline at end of file diff --git a/PerformicsSrc/src/screens/SurveyView.js b/PerformicsSrc/src/screens/SurveyView.js new file mode 100644 index 0000000..9ccfef7 --- /dev/null +++ b/PerformicsSrc/src/screens/SurveyView.js @@ -0,0 +1,2401 @@ +import React, { useState, useEffect, useRef } from 'react'; +import Container from '../components/container'; +import { useRoute } from '@react-navigation/native'; +import { customStyles, GetPageTheme, STATUSBAR_HEIGHT } from "../styles/Global"; +import { Image, TextInput, View, Text, ScrollView, TouchableOpacity, Platform, FlatList, Alert, Dimensions, Animated, Easing, AppState, Keyboard, KeyboardAvoidingView } from 'react-native'; +import { connect } from 'react-redux'; +import { mapStateToProps, mapDispatchToProps } from '../reducers/contextProvider'; +import { notify } from '../components/notify'; +import moment from 'moment'; +import { getAllFolderImages, getforgotpasswordotp, getKPIFields, getmobileverifyotp, marktext1, marktext2, resizeImage, restore_ImageWithMetaData, validateNumber, verifymobileotp } from '../controller/functions'; +import { db, common_ImagePath, ImageFolderPath } from '../constants/constants'; +import CustomHeader from '../components/customHeader'; +import { AntDesign, Entypo, FontAwesome, FontAwesome5, Fontisto, MaterialCommunityIcons } from '../components/icons'; +import CustomLoader from '../components/CustomLoader'; +import LinearGradient from 'react-native-linear-gradient'; +import { AppTables } from '../constants/tableConstants'; +import * as RNFS from 'react-native-fs'; +import GradientButton from '../components/gradientButton'; +import { ConfirmSaveAlert } from '../components/alert'; +import ModalSelector from 'react-native-modal-selector'; +import MultiSelect from 'react-native-multiple-select'; +import DateTimePicker from '@react-native-community/datetimepicker'; +import DraggableFlatList, { ScaleDecorator } from 'react-native-draggable-flatlist' +import AudioRecorderPlayer, { AudioEncoderAndroidType, AudioSourceAndroidType, AVEncoderAudioQualityIOSType, AVEncodingOption, AVModeIOSOption } from 'react-native-audio-recorder-player'; +import CustomCamera from '../components/Camera'; +import { clear_item, get_item, set_item } from '../components/localStorage'; +import CameraImg5 from '../assets/image/astrickcamera.svg'; +import ImageViewer from 'react-native-image-zoom-viewer'; + +import OtpInputs from 'react-native-otp-inputs'; +import { KeyboardAwareFlatList, KeyboardAwareScrollView } from 'react-native-keyboard-aware-scroll-view'; + + +const { height, width } = Dimensions.get('window'); +const topbarht = STATUSBAR_HEIGHT + 50; +const actualWindowHt = parseInt((height - topbarht) + 10); + + +function SurveyView(props) { + const route = useRoute(); + const ST = props.StaticText || {}; + const audioRecorderPlayer = new AudioRecorderPlayer(); + const AudioSet = { + AudioEncoderAndroid: AudioEncoderAndroidType.AAC, + AudioSourceAndroid: AudioSourceAndroidType.MIC, + AVModeIOS: AVModeIOSOption.measurement, + AVEncoderAudioQualityKeyIOS: AVEncoderAudioQualityIOSType.high, + AVNumberOfChannelsKeyIOS: 2, + AVFormatIDKeyIOS: AVEncodingOption.aac, + }; + // get all theme styles acc to current theme set + const PageTheme = GetPageTheme(props.DarkMode, route.name); + const customStyle = customStyles(props.DarkMode, route.name); + + const [processing, setProcessing] = useState(true); + const [loaderTitle, setLoaderTitle] = useState(); + const [isAdhocScreen, setIsAdhocScreen] = useState(false); + const [showRating, setShowRating] = useState(false); + const [RatingQtn, setRatingQtn] = useState({}); + const [RatingOrder, setRatingOrder] = useState([]); + const [showRecorder, setShowRecorder] = useState(false); + const [VRS, setVRS] = useState({}); + const [RecorderTimer, setRecorderTimer] = useState({}); + const [playerTimer, setPlayerTimer] = useState({}); + const [rerenderView, setRerenderView] = useState(0); + const [hasUnsavedChanges, setHasUnsavedChanges] = useState(false); + const [VoiceRecorderStatus, setVoiceRecorderStatus] = useState(ST.Pressmictostartrecordingvoice); + const [RecFilePath, setRecFilePath] = useState({}); + const [dateValue, setDateValue] = useState(''); + const [openDatePicker, setOpenDatePicker] = useState(0); + const [storeData, setStoreData] = useState({}); + const [ShowCat, setShowCat] = useState(false); + const [ActiveSurvey, setActiveSurvey] = useState({}); + const [ActiveCategory, setActiveCategory] = useState({}); + const [currentMenu, setCurrentMenu] = useState({}); + const [rerenderdata, setrerenderdata] = useState(0); + const [SurveySubCats, setSurveySubCats] = useState([]); + const [SurveyQuestions, setSurveyQuestions] = useState([]); + const [QuestionsData, setQuestionsData] = useState({}); + const [showAlert, setShowAlert] = useState(false); + const [showCamera, setShowCamera] = useState(false); + const [getImageProps, setGetImageProps] = useState({}); + const [KPIFields, setKPIFields] = useState([]); + const [showSwitchCamera, setShowSwitchCamera] = useState(false); + const [show_zoomImage, setShow_zoomImage] = useState(false); + const [refImageIndex, setrefImageIndex] = useState(0); + const [zoomImageUrl, setZoomImageUrl] = useState([]); + const [showDatePickerId, setShowDatePickerId] = useState({}); + const zoomView = useRef(null); + const inputRefs = useRef({}); + const otpRef = useRef(); + + const animatedRipple = useRef(new Animated.Value(0)).current; + const animatedRipple2 = useRef(new Animated.Value(0.5)).current; + + const hasUnsavedChangesRef = React.useRef(hasUnsavedChanges); + const WindowDataRef = React.useRef(QuestionsData); + const SurveyQuestionsRef = React.useRef(SurveyQuestions); + const SurveySubCatsRef = React.useRef(SurveySubCats); + + + function bgSurveyQuestions(val) { + SurveyQuestionsRef.current = val + setSurveyQuestions(val); + } + + const StoreIdRef = React.useRef(null); + const ScreenNameRef = React.useRef({}); + const NavigationRef = React.useRef({}); + const CateRef = React.useRef({}); + + // error field states + const [errorfield, setErrorField] = useState({}); + const [error, setError] = useState(false); + + const d1 = new Date(); + const d2 = moment(d1).format('MM/DD/YYYY'); + + useEffect(() => { + setLoaderTitle(ST.Loading + '...') + let params = props.route.params ? props.route.params : {}; + let storeData1 = params.storeData || {}; + let surveydata = params.surveyData || {}; + let catData = params.catData || {}; + // console.log("surveyandcatdata1111:", JSON.stringify(surveydata) + " ", catData); + let menu1 = params.menu || {}; + let ShowCat1 = params.ShowCat || false; + let isAdhoc = params.isAdhocScreen || false; + let isBeat = params.isBeat || false; + CateRef.current = catData; + setShowCat(ShowCat1); + setIsAdhocScreen(isAdhoc); + setStoreData(storeData1); + setActiveSurvey(surveydata) + setCurrentMenu(menu1); + setActiveCategory(catData) + + StoreIdRef.current = storeData1.StoreId + ScreenNameRef.current = { BgscreenName: menu1.ScreenName, BgMenuId: menu1.MenuId } + let navData = { + 'surveyData': surveydata, + 'storeData': storeData1, + 'menu': menu1, + 'isAdhocScreen': isAdhoc, + 'isBeat': isBeat, + 'ShowCat': ShowCat1 + } + NavigationRef.current = navData + getSurveyData(surveydata, catData, storeData1, ShowCat1, menu1); + const AppStateSubscription = AppState.addEventListener('change', (pro) => { _handleAppStateChange(pro) }); + const unsubscribe = props.navigation.addListener('beforeRemove', onBeforeRemove); + return (() => { + audioRecorderPlayer.removePlayBackListener(); + audioRecorderPlayer.removeRecordBackListener(); + AppStateSubscription.remove(); + return unsubscribe; + }); + }, []); + + const _handleAppStateChange = async (nextAppState) => { + if (nextAppState == 'background' && hasUnsavedChangesRef.current == true) { + // ✅ include this + //console.log("Saving WindowDataRef:", WindowDataRef.current); + console.log("Saving SurveySubCatsRef", SurveySubCatsRef.current) + let newData = { + storeBGData: WindowDataRef.current, + menuName: ScreenNameRef.current && ScreenNameRef.current.BgscreenName, + StoreId1: StoreIdRef.current, + NavData: NavigationRef.current, + SurveyQuestionsData: SurveyQuestionsRef.current, + SurveySubCats: SurveySubCatsRef.current, + BgMenuID: ScreenNameRef.current && ScreenNameRef.current.BgMenuId, + CategoryInfo: CateRef.current, + visiteDate: d2 + } + let WindowsStr = JSON.stringify(newData) + console.log("jsonnnn", WindowsStr) + await set_item('storeData', WindowsStr); + } + } + + useEffect(() => { + const unsubscribe = props.navigation.addListener('beforeRemove', onBeforeRemove); + return unsubscribe; + }, [hasUnsavedChanges]); + + useEffect(() => { + const unsubscribe = props.navigation.addListener('beforeRemove', onBeforeRemove); + return unsubscribe; + }, [showCamera]); + + useEffect(() => { + const unsubscribe = props.navigation.addListener('beforeRemove', onBeforeRemove); + return unsubscribe; + }, [show_zoomImage]); + + function onBeforeRemove(e) { + if (showCamera == true) { + e.preventDefault(); + setShowCamera(false); + } + else if (show_zoomImage == true) { + e.preventDefault(); + setShow_zoomImage(false); + } + else { + if (hasUnsavedChanges == true) { + e.preventDefault(); // Prevent default behavior of leaving the screen + onRemoveScreen(e); + } + else { + return; + } + } + } + + function BgUnsavedChanges(val) { + hasUnsavedChangesRef.current = val + setHasUnsavedChanges(val); + } + + function BgWindowData(val) { + WindowDataRef.current = val + setQuestionsData(val); + } + + function BgSurveySubCats(val) { + SurveySubCatsRef.current = val + setSurveySubCats(val); + } + + function onRemoveScreen(e) { + Alert.alert( + "", + ST.Doyoureallywanttoexitthescreen, + [ + { + text: ST.Cancel, + onPress: () => { }, + style: "cancel" + }, + { + text: ST.OK, onPress: async () => { + // setHasUnsavedChanges(false); + BgUnsavedChanges(false) + await clear_item('storeData') + props.navigation.dispatch(e.data.action); + } + } + ] + ); + } + + + async function getSurveyData(item, catData = {}, storeData1, ShowCat1, menu1) { + try { + let { StoreId } = storeData1; + let { CategoryId } = catData; + let { SurveyId } = item; + let AllKPIFields = await getKPIFields(menu1); + setKPIFields(AllKPIFields); + // set switch camera flag as defined in mapping menu flag (if exists) + let SwitchingCameraI = AllKPIFields.findIndex(i => i.KPIFieldName == 'SwitchingCamera'); + let SwitchingCameraObj = SwitchingCameraI >= 0 ? AllKPIFields[SwitchingCameraI] : {}; + let SwitchingCamera = SwitchingCameraI >= 0 ? SwitchingCameraObj['KPIFieldEnable'] : false; + setShowSwitchCamera(SwitchingCamera); + let storeBGData1 = [], bgStoreJson = {}, isBgDataExists = false; + let windData = await get_item('storeData') + // console.log("windData in promooo:", windData); + if (windData != null && windData != '') { + let StoreJson = JSON.parse(windData) + let { storeBGData, menuName, StoreId1, BgMenuID, visiteDate, SurveyQuestionsData, SurveySubCats } = StoreJson + if (Object.keys(storeBGData).length > 0 && menuName == menu1.ScreenName && menu1.MenuId == BgMenuID && StoreId1 == StoreId && visiteDate == d2) { + isBgDataExists = true; + storeBGData1 = storeBGData; + bgStoreJson = StoreJson + BgUnsavedChanges(true) + BgSurveySubCats(SurveySubCats) + BgWindowData(storeBGData) + bgSurveyQuestions(SurveyQuestionsData) + } + } + + await db.transaction(async function (txn) { + let q2 = `SELECT DISTINCT T.SubCategory,T.SubCategoryId,T.SubCategorySequence,T.RefImage FROM Master_SurveyQuestion T INNER JOIN Mapping_Survey M ON T.SurveyId=M.SurveyId WHERE M.StoreId='${StoreId}' and T.SurveyId='${SurveyId}' `; + + if (ShowCat1 == true) { + q2 += ` and T.CategoryId='${CategoryId}' `; + } + q2 += ` order by T.QuestionSequence`; + + // console.log("surbeysize:", q2) + await txn.executeSql(q2, [], async function (txn2, txnres) { + console.log('survey subcats:', txnres.rows.length); + if (txnres.rows.length > 0) { + let arr = [], images = [], allQtns = []; + for (var i = 0; i < txnres.rows.length; i++) { + let data = txnres.rows.item(i); + // console.log("dataaaa:", data) + let all_scat_qtns = await getSurveyQtns(item, catData, storeData1, ShowCat1, data, menu1, bgStoreJson, isBgDataExists) + data['Questions'] = all_scat_qtns; + //console.log("question,,,", data); + allQtns = allQtns.concat(all_scat_qtns); + arr.push(data); + if (i == txnres.rows.length - 1) { + // if (!isBgDataExists) { + BgSurveySubCats(arr) + bgSurveyQuestions(allQtns) + // } + setProcessing(false); + } + } + } + + }, function (txnE, txnerr) { console.log(txnerr); },); + + }); + } catch (err) { + console.log(err); + } + } + + const [verifiedOTP, setVerifiedOTP] = useState(false); + + ///jp fixed queation enable disable on app kill + const getWindowQuestionsById = (bgJsonDta, CategoryId, SubCategoryId) => { + const item = bgJsonDta?.SurveyQuestionsData?.find( + i => i.CategoryId == CategoryId && i.SubCategoryId == SubCategoryId + ); + + const values = item?.WindowQuestions; + + if (Array.isArray(values) && values.length > 0) { + return values; + } else { + return bgJsonDta?.SurveyQuestionsData || []; + } + }; + + + async function getSurveyQtns(item, catData, storeData1, ShowCat1, subCat, menu1, bgStoreJson = {}, isBgDataExists = false) { + let questionsBg = [] + let { StoreId } = storeData1; + let { CategoryId } = catData; + let { SurveyId } = item; + let { SubCategoryId } = subCat; + ///jp fixed queation enable disable on app kill + console.log("bgStoreJson_new", bgStoreJson); + if (isBgDataExists) { + questionsBg = getWindowQuestionsById(bgStoreJson, CategoryId, SubCategoryId); + console.log("bgStoreJson_new", CategoryId, SubCategoryId, questionsBg); + } + + return new Promise((resolve, reject) => { + try { + + db.transaction(async function (txn) { + // get inserted audit + let selectlist = ` DISTINCT ifnull(T1.VerifyOTP,0)as VerifyOTP,T.MaxLength as MaxLength,T.QuestionRefImage,T.CalFormula,T.RefImage,T.MinLength as MinLength,T.CategoryId,T.Category,T.SubCategoryId,T.SubCategory, T.Image1Mandatory, T.Image2Mandatory,T.QuestionImageMandatory,T.LengthValidation as LengthValidation,T.QuestionImageAllow as QuestionImageAllow,T.DateRange as DateRange,T.QEnable,T.Question as Question,T.QuestionId as QuestionId,T.QuestionTypeNew as QuestionType,T.OTP as OTP,T1.ANSWER As Answer, T1.ANSWER_ID as AnswerId,T1.IMAGE_ALLOW1 as ImageAllow1,T1.IMAGE1 as Image1,T1.IMAGE_ALLOW2 as ImageAllow2,T1.IMAGE2 as Image2,T1.MULTI_OPTIONS_IDS as multi_op_ids,T1.IS_DISABLED as isDisabled `; + let join = ` INNER JOIN Mapping_Survey M on T.SurveyId=M.SurveyId`; + let join2 = ` INNER JOIN ${AppTables.SURVEY} T1 on T.SurveyId=T1.SURVEY_ID and T.CategoryId=T1.CATEGORY_ID and T.SubCategoryId=T1.SUB_CATEGORY_ID And T.QuestionId=T1.QUESTION_ID`; + let q2 = `Select ${selectlist} FROM Master_SurveyQuestion T ${join} ${join2} WHERE T1.STORE_ID='${StoreId}' AND T1.MENU_ID=${menu1.MenuId} AND T1.VISIT_DATE= '${d2}' AND T1.SURVEY_ID=${SurveyId} AND T1.SUB_CATEGORY_ID='${SubCategoryId}' `; + if (ShowCat1 == true) { + q2 += ` AND T1.CATEGORY_ID=${CategoryId} `; + } + q2 += ` GROUP BY T.QuestionId ORDER BY T.QuestionSequence`; + + + await txn.executeSql(q2, [], async function (txn2, txnres) { + console.log('getSurveyData len', txnres.rows.length); + if (txnres.rows.length > 0) { + let arr = [], images = []; + var QD = QuestionsData; + for (var i = 0; i < txnres.rows.length; i++) { + let data = txnres.rows.item(i); + ////console.log("data---------", data) + data.QEnable = data.QEnable == 1 || data.QEnable == 'true' ? true : false; + let answers = []; + let qtn = data; + // console.log("dataaaaaaaa", isBgDataExists, qtn) + qtn.isDisabled = qtn.isDisabled == 1 || qtn.isDisabled == '1' ? true : false + ///jp fixed queation enable disable on app kill + if (isBgDataExists) { + if (questionsBg != null && questionsBg != undefined && Array.isArray(questionsBg) && questionsBg.length > 0) { + const isEnabled = questionsBg.some(q => + q.QuestionId === data.QuestionId && q.isDisabled === false + ); + if (isEnabled) { + data['isDisabled'] = false; + console.log("Matched Question:", data.QuestionId); + } else { + data['isDisabled'] = true; + } + } + } + if (qtn.QuestionType == 'Decimal' || qtn.QuestionType == 'Number' || qtn.QuestionType == 'Text' || qtn.QuestionType == 'OnlyText' || qtn.QuestionType == 'Image') { + inputRefs.current['input1_' + qtn.QuestionId] = ''; + } + + if (data.QuestionType == 'Multi choice list' || data.QuestionType == 'Single choice list' || data.QuestionType == 'Rating') { + let allanswers = await getAnswers(data, item.SurveyId, storeData1, true); + + answers = allanswers.Answers || []; + if (data.QuestionType == 'Rating') { + data.showRating = false; + } + } + else if (data.QuestionType == 'Date') { + data.showDatePicker = false; + } + data.Answers = answers; + + let id_key = qtn.QuestionId + '_AnswerId'; + let ans_key = qtn.QuestionId + '_Answer'; + let multi_key = qtn.QuestionId + '_MultiOption'; + let date_key = qtn.QuestionId + '_Date'; + let img_key = qtn.QuestionId + '_ImagePath1'; + let imgname_key = qtn.QuestionId + '_ImageName1'; + let img_key2 = qtn.QuestionId + '_ImagePath2'; + let imgname_key2 = qtn.QuestionId + '_ImageName2'; + let rating_key = qtn.QuestionId + '_Rating'; + let voiceClip_key = qtn.QuestionId + '_VoiceClip'; + + let showImageTag = (data.QuestionImageAllow == true || data.QuestionImageAllow == 'true' || data.QuestionImageAllow == 1); + let showImageTag2 = false; + + QD[id_key] = data.AnswerId; + QD[ans_key] = data.Answer; + + + let selansid = data.AnswerId; + if (qtn.QuestionType == 'Multi choice list') { + console.log("data-----", data) + selansid = data.multi_op_ids ? data.multi_op_ids.split(',') : []; + QD[multi_key] = data.multi_op_ids; + } + + if ((qtn.QuestionType == 'Single choice list' || qtn.QuestionType == 'Multi choice list')) { + if (qtn.Answers && qtn.Answers.length > 0) { + for (var k = 0; k < qtn.Answers.length; k++) { + let ansss = qtn.Answers[k]; + let isandImgAl = (ansss.ImageAllow1 == true || ansss.ImageAllow1 == 'true' || ansss.ImageAllow1 == 1); + let isandImgAl2 = (ansss.ImageAllow2 == true || ansss.ImageAllow2 == 'true' || ansss.ImageAllow2 == 1); + + if (qtn.QuestionType == 'Single choice list' && (isandImgAl && ansss.AnswerId == selansid)) { + showImageTag = true; + } + else if (qtn.QuestionType == 'Multi choice list' && (isandImgAl && selansid.indexOf(ansss.AnswerId.toString()) >= 0)) { + showImageTag = true; + } + + if (qtn.QuestionType == 'Single choice list' && (isandImgAl2 && ansss.AnswerId == selansid)) { + showImageTag2 = true; + } + else if (qtn.QuestionType == 'Multi choice list' && (isandImgAl2 && selansid.indexOf(ansss.AnswerId.toString()) >= 0)) { + showImageTag2 = true; + } + + } + } + } + + if (showImageTag) { + let imgPath = data.Image1 != '' ? ((Platform.OS == 'ios' ? 'file://' : '') + `${ImageFolderPath + menu1.ScreenName}/` + data.Image1) : ''; + QD[imgname_key] = data.Image1; + QD[img_key] = imgPath; + } + + if (showImageTag2) { + let imgPath = data.Image2 != '' ? ((Platform.OS == 'ios' ? 'file://' : '') + `${ImageFolderPath + menu1.ScreenName}/` + data.Image2) : ''; + QD[imgname_key2] = data.Image2; + QD[img_key2] = imgPath; + } + + if (qtn.QuestionType == 'Audio') { + let voicefile_path = (Platform.OS == 'ios' ? 'file://' : '') + `${ImageFolderPath + menu1.ScreenName}/` + 'Recordings/' + data.Answer; + QD[voiceClip_key] = { 'path': voicefile_path, 'filename': data.Answer }; + } + + if (qtn.QuestionType == 'Date') { + let dayonly = moment().format('DD'); + let actual_date = data.Answer ? data.Answer.split('/') : []; + let month = actual_date[0], year = actual_date[1]; + let fulldate = month + '/' + dayonly + '/' + year; + QD[date_key] = fulldate; + + } + arr.push(data); + if (i == txnres.rows.length - 1) { + if (!isBgDataExists) { + BgWindowData(QD) + } + resolve(arr); + } + } + } + else { + let sl = ` DISTINCT T.CategoryId,T.Category,T.CalFormula,T.RefImage,T.QuestionRefImage,T.Image1Mandatory, T.Image2Mandatory,T.QuestionImageMandatory,T.SubCategoryId,T.SubCategory,T.MaxLength,T.MinLength,T.LengthValidation,T.Question,T.QuestionId,T.QuestionTypeNew as QuestionType,T.OTP,T.QuestionImageAllow,T.DateRange,T.QEnable`; + let q = ` SELECT ${sl} FROM Master_SurveyQuestion T INNER JOIN Mapping_Survey M on T.SurveyId=M.SurveyId WHERE M.StoreId='${StoreId}' and T.SurveyId='${SurveyId}' and T.SubCategoryId='${SubCategoryId}' `; + if (ShowCat1 == true) { + q += ` and T.CategoryId='${CategoryId}' `; + } + q += `group by T.QuestionId ORDER BY T.QuestionSequence`; + + await txn.executeSql(q, [], async function (txn2, txnres2) { + console.log('Surveys:', txnres2.rows.length) + let arr = []; + if (txnres2.rows.length > 0) { + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + data.QEnable = data.QEnable == 1 || data.QEnable == 'true' ? true : false; + data['isDisabled'] = !data.QEnable; + data['VerifyOTP'] = 0 + let qtn = data; + + qtn.isDisabled = qtn.isDisabled == 1 || qtn.isDisabled == '1' ? true : false + + ///jp fixed queation enable disable on app kill + if (isBgDataExists) { + //console.log("isBgDataExists",isBgDataExists); + + if (questionsBg != null && questionsBg != undefined && Array.isArray(questionsBg) && questionsBg.length > 0) { + const isEnabled = questionsBg.some(q => + q.QuestionId === data.QuestionId && q.isDisabled === false + ); + //console.log("isEnabled", isEnabled); + + if (isEnabled) { + data['isDisabled'] = false; + // console.log("Matched Question:", data.QuestionId); + } else { + data['isDisabled'] = true; + } + } + } + + if (qtn.QuestionType == 'Decimal' || qtn.QuestionType == 'Number' || qtn.QuestionType == 'Text' || qtn.QuestionType == 'OnlyText' || qtn.QuestionType == 'Image') { + inputRefs.current['input1_' + qtn.QuestionId] = ''; + } + + let answers = []; + if (data.QuestionType == 'Multi choice list' || data.QuestionType == 'Single choice list' || data.QuestionType == 'Rating') { + let allanswers = await getAnswers(data, item.SurveyId, storeData1, false); + answers = allanswers.Answers || []; + if (data.QuestionType == 'Rating') { + data.showRating = false; + } + } + else if (data.QuestionType == 'Date') { + data.showDatePicker = false; + } + + data.Answers = answers; + + arr.push(data); + //console.log("arrrrr",arr) + + if (i == txnres2.rows.length - 1) { + resolve(arr); + } + } + } + else { + resolve([]); + } + + }, function (txnE, txnerr) { console.log(txnerr); resolve([]); },); + } + + }, function (txnE, txnerr) { console.log(txnerr); resolve([]); },); + + }); + } catch (err) { + console.log(err); + } + }) + } + + async function getAnswers(qtn, SurveyId, storeData1, isInserted) { + let { StoreId, ChainId, StateId, StoreTypeId } = storeData1; + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + // get inserted audit + let selectlist = ` DISTINCT T.Answer,T.AnswerId,T.ImageAllow1,T.ImageAllow2,T.Image1Mandatory,T.Image2Mandatory,T.EnableQuestion,T.DisableQuestion`; + let join = ` INNER JOIN Mapping_Survey M on T.SurveyId=M.SurveyId`; + let q2 = `Select ${selectlist} FROM Master_SurveyQuestion T ${join} WHERE T.QuestionId='${qtn.QuestionId}' AND M.StoreId = '${StoreId}' AND T.SurveyId==${SurveyId} AND T.SubCategoryId='${qtn.SubCategoryId}' ORDER BY T.AnswerSequence `; + + await txn.executeSql(q2, [], async function (txn2, txnres) { + // console.log('answers len',txnres.rows.length); + if (txnres.rows.length > 0) { + let arr = []; + for (var i = 0; i < txnres.rows.length; i++) { + let data = txnres.rows.item(i); + arr.push(data); + if (i == txnres.rows.length - 1) { + resolve(arr); + } + } + } + else { + resolve([]); + } + }, function (txnE, txnerr) { console.log(txnerr); resolve([]); },); + + }); + }).then((val) => { + return { 'Answers': val, 'Success': true }; + }).catch((err) => { + console.log(err); + return { 'Success': false, 'Error': err } + }); + } + + async function getImage(imgdata) { + let qtn = getImageProps.qtn || ''; + let type = getImageProps.type || '1'; + if (typeof imgdata == 'object' && imgdata.errorCode == 'camera_unavailable') { + notify(ST.Cameraunavailable); + } + else if (typeof imgdata == 'object' && imgdata.uri != null) { + const img = imgdata; + const imgurl = img.uri, imgWidth = img.width, imgHeight = img.ExtendedHeight; + let isImgFromGallery = img.fromGallery != null ? img.fromGallery : false; + let picture_clickedd = isImgFromGallery == true ? img.datetime : new Date(); + + let picture_clicked_time = moment(picture_clickedd).format('MM-DD-YYYY HH:mm:ss') + let picture_clicked_time_for_pic_name = moment(picture_clickedd).format('MMDDYYYY_HHmmss') + + console.log("time", picture_clicked_time); + console.log("time1", picture_clicked_time_for_pic_name); + let calculate_tym_date_for_filename = picture_clicked_time_for_pic_name; + let calculate_tym_date_over_img = picture_clicked_time; + + let filename = storeData.StoreId + '_' + ActiveSurvey.SurveyId + '_' + qtn.QuestionId + '_SurveyImg_' + calculate_tym_date_for_filename + '.jpg'; + + const mark_text1 = calculate_tym_date_over_img; + const mark_text2 = 'Store Name:' + storeData.StoreName + ' | Store Id:' + storeData.StoreId + ' | Survey Id:' + ActiveSurvey.SurveyId + ' | Question Id :' + qtn.QuestionId + ' | Image Type: ' + currentMenu.MenuName + ' | Date:' + calculate_tym_date_over_img; + + let qd = QuestionsData; + let img_key = type == '1' ? qtn.QuestionId + '_ImagePath1' : qtn.QuestionId + '_ImagePath2'; + let imgname_key = type == '1' ? qtn.QuestionId + '_ImageName1' : qtn.QuestionId + '_ImageName2'; + qd[imgname_key] = filename; + + let imagePath = `${ImageFolderPath + currentMenu.ScreenName}/${filename}`; + await RNFS.copyFile(imgurl, imagePath) + .then(async (resn) => { + let uri = 'file://' + imagePath; + console.log('image marker', uri); + qd[img_key] = uri; + if (qtn.QuestionType == "Image") { + //set answid - 0 and answer to filename if qtnType is Image + let id_key = qtn.QuestionId + '_AnswerId'; + let ans_key = qtn.QuestionId + '_Answer'; + qd[id_key] = 0; + qd[ans_key] = ""; + // qd[ans_key]=filename; + } + + // add metdata then resize image and restored back to the imagePath + let restore_data = { "destFilePath": imagePath, "imgurl": imgurl, imgWidth, imgHeight, mark_text1, mark_text2 } + let is_restored = await restore_ImageWithMetaData(restore_data, imgdata); + BgWindowData(qd) + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + }) + .catch(err => { + console.log('ERROR: image file write failed!!!'); + console.log(err.message, err.code); + }); + + } + } + + async function openCamera(qtn, type) { + setGetImageProps({ 'qtn': qtn, 'type': type }); + setShowCamera(true); + } + + /** Comma-separated ids from survey config: "1, 2, 3" → ["1","2","3"] */ + function parseEnableDisableQuestionIds(raw) { + if (raw == null || raw === '') return []; + return String(raw) + .split(',') + .map((s) => s.trim()) + .filter((s) => s.length > 0); + } + + function questionIdsMatch(a, b) { + return String(a).trim() === String(b).trim(); + } + + /** Clear all stored answer fields for a question (keep in sync with load/saveData keys). */ + function clearQuestionAnswersData(qtn, target) { + if (!target || typeof target !== 'object') return; + if (qtn == null || qtn.QuestionId == null || qtn.QuestionId === '') return; + + const p = String(qtn.QuestionId); + target[`${p}_AnswerId`] = 0; + target[`${p}_Answer`] = ''; + target[`${p}_ImagePath1`] = ''; + target[`${p}_ImagePath2`] = ''; + target[`${p}_ImageName1`] = ''; + target[`${p}_ImageName2`] = ''; + target[`${p}_MultiOption`] = ''; + target[`${p}_Date`] = ''; + target[`${p}_Rating`] = ''; + delete target[`${p}_VoiceClip`]; + } + + async function disableQtns(sqtns, DQtns, data) { + const ids = (DQtns || []).map((id) => String(id).trim()).filter((s) => s.length > 0); + if (ids.length === 0) return sqtns; + const sqtnsCopy = (sqtns || []).map((q) => ({ ...q })); + + for (const qid of ids) { + const s_qtnindex = sqtnsCopy.findIndex((i) => questionIdsMatch(i.QuestionId, qid)); + if (s_qtnindex < 0) continue; + const s_qtn = sqtnsCopy[s_qtnindex]; + sqtnsCopy[s_qtnindex] = { ...s_qtn, isDisabled: true, VerifyOTP: 0 }; + clearQuestionAnswersData(s_qtn, data); + } + + setQuestionsData((prev) => { + const next = { ...(prev && typeof prev === 'object' ? prev : {}) }; + for (const qid of ids) { + const idx = sqtnsCopy.findIndex((i) => questionIdsMatch(i.QuestionId, qid)); + if (idx < 0) continue; + const s_qtn = sqtnsCopy[idx]; + clearQuestionAnswersData(s_qtn, next); + } + WindowDataRef.current = next; + return next; + }); + + setSurveyQuestions(sqtnsCopy); + BgUnsavedChanges(true); + bgSurveyQuestions(sqtnsCopy); + setrerenderdata((prev) => !prev); + return sqtnsCopy; + } + + async function enableQtns(sqtns, EQtns, DQtns, data) { + const enableIds = (EQtns || []).map((id) => String(id).trim()).filter((s) => s.length > 0); + const sqtnsCopy = (sqtns || []).map((q) => ({ ...q })); + + for (const qid of enableIds) { + const s_qtnindex = sqtnsCopy.findIndex((i) => questionIdsMatch(i.QuestionId, qid)); + if (s_qtnindex < 0) continue; + const s_qtn = sqtnsCopy[s_qtnindex]; + sqtnsCopy[s_qtnindex] = { ...s_qtn, isDisabled: false }; + } + + const disableIds = (DQtns || []).map((id) => String(id).trim()).filter((s) => s.length > 0); + if (disableIds.length > 0) { + const updated = await disableQtns(sqtnsCopy, disableIds, data); + return updated != null ? updated : sqtnsCopy; + } + setSurveyQuestions(sqtnsCopy); + bgSurveyQuestions(sqtnsCopy); + BgUnsavedChanges(true); + setrerenderdata((prev) => !prev); + return sqtnsCopy; + } + + // ✅ Function to get questions by SubCategoryId + const getQuestionsBySubCategoryId = (data, subCategoryId) => { + if (!Array.isArray(data) || data.length === 0) { + console.warn("Data is missing or not an array."); + return []; + } + + return data.filter(item => item.SubCategoryId === subCategoryId); + }; + + const getQuestions = (data, subCategoryId) => { + const subCat = data.find(item => item.SubCategoryId === subCategoryId); + return subCat ? subCat.Questions : []; + }; + + const updateQEnableFromFilteredData = (subCategoryId, filteredData) => { + const updatedSubCats = SurveySubCats.map(subCat => { + if (subCat.SubCategoryId === subCategoryId) { + const updatedQs = subCat.Questions.map(q => { + // Find matching question in filteredData + const match = filteredData.find(uq => uq.QuestionId === q.QuestionId); + // If found, update QEnable, else keep existing + return match ? { ...q, isDisabled: match.isDisabled } : q; + }); + return { + ...subCat, + Questions: updatedQs, + }; + } + return subCat; + }); + + setSurveySubCats(updatedSubCats); + }; + + // Sync enable/disable state from flat question list to ALL subcategories (so EnableQuestion in other subcats works) + const syncAllSubCatsFromFlatQuestions = (flatQuestions) => { + if (!flatQuestions || flatQuestions.length === 0) return; + const updatedSubCats = SurveySubCats.map(subCat => { + const filteredData = getQuestionsBySubCategoryId(flatQuestions, subCat.SubCategoryId); + const updatedQs = (subCat.Questions || []).map(q => { + const match = filteredData.find(uq => uq.QuestionId === q.QuestionId); + return match ? { ...q, isDisabled: match.isDisabled } : q; + }); + return { ...subCat, Questions: updatedQs }; + }); + setSurveySubCats(updatedSubCats); + SurveySubCatsRef.current = updatedSubCats; + }; + + async function onselectionChange(option, qtn) { + let data = QuestionsData; + let ans_obj_byQuestionId = qtn?.Answers?.find(i => i.AnswerId == option.value) || {}; + if (ans_obj_byQuestionId != null) { + let ImageName1 = qtn?.QuestionId + '_ImageName1'; + let ImagePath1 = qtn?.QuestionId + '_ImagePath1'; + let ImageName2 = qtn?.QuestionId + '_ImageName2'; + let ImagePath2 = qtn?.QuestionId + '_ImagePath2'; + if (ans_obj_byQuestionId?.ImageAllow1 == 1 || ans_obj_byQuestionId?.ImageAllow1 == '1' || ans_obj_byQuestionId?.ImageAllow1 === 'false' || ans_obj_byQuestionId?.ImageAllow1 === false) { + data[ImageName1] = ""; + data[ImagePath1] = "" + } + if (ans_obj_byQuestionId?.ImageAllow2 === 'false' || ans_obj_byQuestionId?.ImageAllow2 === false) { + data[ImageName2] = ""; + data[ImagePath2] = ""; + } + + //console.log("temp--", ans_obj_byQuestionId?.ImageAllow1 + "\n" + JSON.stringify(data)); + } + + let id_key = qtn.QuestionId + '_AnswerId'; + let ans_key = qtn.QuestionId + '_Answer'; + data[id_key] = option.value; + data[ans_key] = option.label; + BgWindowData(data) + let aq_ans = qtn.Answers != null ? qtn.Answers : []; + let ans_obj = qtn?.Answers?.find(i => i.AnswerId == option.value) || {}; + let EQtns = ans_obj.EnableQuestion != null && ans_obj.EnableQuestion != '' ? parseEnableDisableQuestionIds(ans_obj.EnableQuestion) : []; + let DQtns = ans_obj.DisableQuestion != null && ans_obj.DisableQuestion != '' ? parseEnableDisableQuestionIds(ans_obj.DisableQuestion) : []; + //console.log('EQtns:', EQtns, DQtns); + let sqtns = SurveyQuestions; + let updatedSqtns = null; + if (EQtns.length > 0) { + updatedSqtns = await enableQtns(sqtns, EQtns, DQtns, data); + } + else if (DQtns.length > 0) { + //console.log("option----", option, qtn); + let qId = qtn?.QuestionId; + if (qId != null && qId != undefined) { + let img_1 = qId + '_ImageName1'; + let img_2 = qId + '_ImageName2'; + let img_key1 = qId + '_ImagePath1'; + let img_key2 = qId + '_ImagePath2'; + data[img_1] = ""; + data[img_2] = ""; + data[img_key1] = ""; + data[img_key2] = ""; + } + + console.log("DQtns:",sqtns, DQtns, data); + updatedSqtns = await disableQtns(sqtns, DQtns, data); + } else { + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + setrerenderdata(!rerenderdata); + BgUnsavedChanges(true) + if (updatedSqtns != null) { + syncAllSubCatsFromFlatQuestions(updatedSqtns); + } else if (qtn?.SubCategoryId != null && qtn?.SubCategoryId != undefined) { + let questionsForSubCat = sqtns; + let filteredData = getQuestionsBySubCategoryId(questionsForSubCat, qtn?.SubCategoryId); + updateQEnableFromFilteredData(qtn?.SubCategoryId, filteredData); + } + + setTimeout(() => { + //console.log("final_qtn", JSON.stringify(SurveySubCats)); + SurveySubCatsRef.current = SurveySubCats; + }, 1000); + } + + function setTextValue(value, qtn, type = '') { + //console.log("type0000", type) + if (value != '') { + let isValid = validateNumber(value, type); + //console.log("isValid====", isValid) + if (!isValid) { + return; + } + } + + let id_key = qtn.QuestionId + '_AnswerId'; + let ans_key = qtn.QuestionId + '_Answer'; + + let obj = QuestionsData; + if (qtn.QuestionType == 'Date') { + let date_key = qtn.QuestionId + '_Date'; + let d = value != null ? new Date(value) : new Date(); + let mfdate = moment(d).format('DD/MM/YYYY'); + //showQtnDatePicker(qtn, false); + obj[id_key] = 0; + obj[ans_key] = mfdate; + obj[date_key] = moment(d).format('MM/DD/YYYY'); + } else { + //console.log("qtn.Quest------", qtn) + if (qtn.QuestionType == 'Decimal' && (qtn.LengthValidation == "true" || qtn.LengthValidation || qtn.LengthValidation == 1)) { + // if(qtn.MaxLength!="0" && qtn.MinLength!="0"){ + // } + let valSplitLen = value.split(".")[1]?.length + if (valSplitLen == undefined || valSplitLen < 2) { + obj[id_key] = 0; + obj[ans_key] = value; + } else if (/^\d+\.\d{2}$/.test(value)) { + obj[id_key] = 0; + obj[ans_key] = Number(value).toFixed(2); + } + + } else { + obj[id_key] = 0; + obj[ans_key] = value; + } + + } + console.log(value, obj); + // setQuestionsData(obj); + BgWindowData(obj) + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + + function setRatingValue(data) { + setRatingOrder(data); + } + + + async function setMultiSelectValue(selectedItems = [], qtn) { + //console.log('setMultiSelectValue', selectedItems); + let id_key = qtn.QuestionId + '_AnswerId'; + let ans_key = qtn.QuestionId + '_Answer'; + let multi_key = qtn.QuestionId + '_MultiOption'; + let obj = QuestionsData; + obj[id_key] = 0; + obj[multi_key] = selectedItems.join(','); + let anss = []; + selectedItems.map((itemValue) => { + let ans = qtn.Answers.find(c1 => c1.AnswerId == itemValue); + if (ans.Answer) { anss.push(ans.Answer) } + }); + obj[ans_key] = anss.join(','); + console.log('obj:', obj); + // setQuestionsData(obj); + BgWindowData(obj) + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + + + function showQtnDatePicker(qtn, show = false) { + let newqtnIndex = SurveyQuestions?.findIndex(q => q.QuestionId == qtn.QuestionId); + console.log('showQtnDatePicker:', newqtnIndex,); + if (newqtnIndex >= 0) { + let sq = SurveyQuestions; + let newqtn = sq[newqtnIndex]; + newqtn.showDatePicker = show; + sq[newqtnIndex] = newqtn; + console.log("sq----------", sq) + setSurveyQuestions(sq); + bgSurveyQuestions(sq) + if (show === true) { + setrerenderdata(prev => !prev); + } + } + } + + + + + function setShowQtnKey(qtn, key, show = false) { + if (key != null && key != '') { + let newqtnIndex = SurveyQuestions.findIndex(q => q.QuestionId == qtn.QuestionId); + // console.log('setShowQtnKey:', newqtnIndex); + if (newqtnIndex >= 0) { + let sq = SurveyQuestions; + let newqtn = sq[newqtnIndex]; + newqtn[key] = show; + sq[newqtnIndex] = newqtn; + setSurveyQuestions(sq); + bgSurveyQuestions(sq) + if (show == true) setrerenderdata(!rerenderdata); + } + } + } + + function onRatingCancel() { + setShowRating(false); + + } + + function onRatingSave() { + setShowRating(false); + + let qtn = RatingQtn; + let id_key = qtn.QuestionId + '_AnswerId'; + let ans_key = qtn.QuestionId + '_Answer'; + let rating_key = qtn.QuestionId + '_Rating'; + let ids = [], anss = []; + RatingOrder.map((item, index) => { + ids.push(item.AnswerId); + anss.push(item.Answer); + }) + let obj = QuestionsData; + obj[rating_key] = ids.join(','); + obj[id_key] = 0; + obj[ans_key] = anss.join(','); + + console.log(obj); + // setQuestionsData(obj); + BgWindowData(obj) + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + + function onRecordCancel() { + setShowRecorder(false); + } + + async function focusToNext(qtn, type = '1') { + let activeKey = ''; + let arr = Object.keys(inputRefs.current); + activeKey = 'input' + type + '_' + qtn.QuestionId; + let activeIndex = arr.indexOf(activeKey); + if (activeIndex < arr.length - 1) { + let nextKey = arr[++activeIndex] + let nextRef = inputRefs.current[nextKey]; + nextRef.focus(); + } + else { + return + } + } + + function onRecordSave() { + let isRecorderPlaying = VRS.RecorderPlayStatus != null && VRS.RecorderPlayStatus == true; + let isPlayerPlaying = VRS.PlayerPlayStatus != null && VRS.PlayerPlayStatus == true; + if (isRecorderPlaying) { + notify(ST.Pleasestoprecordingfirst); + return; + } + + else if (isPlayerPlaying) { + stopPlayer(VRS); + } + + setShowRecorder(false); + let qtn = RatingQtn; + let id_key = qtn.QuestionId + '_AnswerId'; + let ans_key = qtn.QuestionId + '_Answer'; + let voiceClip_key = qtn.QuestionId + '_VoiceClip'; + + let obj = QuestionsData; + obj[ans_key] = RecFilePath.filename || ''; + obj[id_key] = 0; + obj[voiceClip_key] = RecFilePath; + // setQuestionsData(obj); + BgWindowData(obj) + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + + const RippleAnimation = (value, minValue, maxValue, delay) => + Animated.loop( + Animated.sequence([ + Animated.timing(value, { + toValue: maxValue, + duration: 1000, + delay: delay, + useNativeDriver: (Platform.OS == 'ios' ? false : true), + }), + Animated.timing(value, { + toValue: minValue, + duration: 1000, + delay: delay, + useNativeDriver: (Platform.OS == 'ios' ? false : true), + }), + ]), + + ).start(); + + const startRecorder = React.useCallback(async (storeData1, qtn, ActiveSurvey1, vrStatus) => { + try { + console.log('startRecorder') + if (audioRecorderPlayer != null) { + if (vrStatus['RecorderPlayStatus'] == true) { + notify(ST.AlreadyRecording + '...') + return; + } + else if (vrStatus['PlayerPlayStatus'] == true) { + notify(ST.Pleasestopplayerfirst) + return; + } + + stopPlayer(vrStatus); + + let picture_clickedd = new Date(); + let picture_clicked_date = moment(picture_clickedd).format('YYYYMMDD'); + let picture_clicked_time = moment(picture_clickedd).format('HHmmss'); + let commname = storeData1.StoreId + '_' + ActiveSurvey1.SurveyId + '_' + qtn.QuestionId + '_SurveyRecording_' + picture_clicked_date + '_' + picture_clicked_time; + let filename = Platform.OS == 'ios' ? commname + '.m4a' : commname + '.mp3'; + + const url = Platform.OS == 'ios' ? `file://${ImageFolderPath + currentMenu.ScreenName}/` + 'Recordings/' + filename : `${ImageFolderPath + currentMenu.ScreenName}/` + 'Recordings/' + filename; + const url_dir = `${ImageFolderPath + currentMenu.ScreenName}/` + 'Recordings/'; + console.log('write file url:', url); + RNFS.mkdir(url_dir).then((res) => { + + RNFS.writeFile(url, '') + .then(async (success) => { + // if(success!=null){ + const path = Platform.select({ + ios: url, + android: url, + }); + + const result = await audioRecorderPlayer.startRecorder(path, AudioSet); + if (result != null && result != '') { + console.log('start recording now'); + vrStatus['RecorderPlayStatus'] = true; + setVRS(vrStatus); + setRecFilePath({ 'path': url, 'filename': filename }); + // animate + RippleAnimation(animatedRipple, 0, 1, 0); + RippleAnimation(animatedRipple2, 0, 1, 100); + + audioRecorderPlayer.addRecordBackListener((e) => { + let recordsec = e.currentPosition; + let data = { 'recordSecs': recordsec, 'recordTime': audioRecorderPlayer.mmssss(Math.floor(recordsec)) }; + if (vrStatus['RecorderPlayStatus'] == true) { + setRecorderTimer(data); + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setVoiceRecorderStatus(ST.RecordingPressmictostoprecording); + } + + console.log('recordsec:', recordsec); + if (recordsec >= 60 * 1000) { + stopRecorder(vrStatus); + notify(ST.Maximumrecordtimelimitreached, 'LONG'); + } + return; + }); + } + console.log('start recorder:', result); + }) + .catch((err) => { + console.log('eerriur1', err.message); + notify(ST.Somethingwentwrong + ' ' + ST.Cannotopenfileforrecording); + }); + }) + .catch((err) => { + console.log('eerriur2', err.message); + notify(ST.Somethingwentwrong + ' ' + ST.Cannotopenfileforrecording); + }); + + } + } + catch (e) { + console.log('error:', e); + } + + }, []); + + + + + + + const stopRecorder = React.useCallback(async (vrStatus) => { + try { + console.log('stopRecorder'); + if (audioRecorderPlayer != null) { + + animatedRipple.setValue(0); + animatedRipple2.setValue(0.5); + const uri = await audioRecorderPlayer.stopRecorder(); + audioRecorderPlayer.removeRecordBackListener(); + + vrStatus['RecorderPlayStatus'] = false; + vrStatus['PlayerPlayStatus'] = false; + setPlayerTimer({}); + setVRS({ ...VRS, vrStatus }); + setVoiceRecorderStatus(ST.Pressmictostartrecordingvoice); + } + } + catch (e) { + console.log('error:', e); + } + + }, []); + + const startPlayer = React.useCallback(async (url, vrStatus1, type = '0') => { + try { + let vrStatus = VRS; + let qtn = RatingQtn; + if (audioRecorderPlayer != null) { + console.log('startPlayer1', url); + if (vrStatus['PlayerPlayStatus'] == true) { + notify(ST.AlreadyPlaying + '...') + return; + } + else if (vrStatus['RecorderPlayStatus'] == true) { + notify(ST.Pleasestoprecordingfirst) + return; + } + else if (url == '' || url == null) { + notify(ST.Filenotfound) + return; + } + + const result = await audioRecorderPlayer.startPlayer(url); + if (result != null) { + vrStatus['PlayerPlayStatus'] = true; + setVRS(vrStatus); + + audioRecorderPlayer.addPlayBackListener((e) => { + let playDuration = audioRecorderPlayer.mmssss(Math.floor(e.duration)); + let vrs = VRS; + let data = { 'playerSecs': e.currentPosition, 'totalDuration': e.duration, 'playDuration': playDuration, 'playTime': audioRecorderPlayer.mmssss(Math.floor(e.currentPosition),) }; + let data2 = { 'playerSecs': '0000', 'totalDuration': e.duration, 'playDuration': playDuration, 'playTime': "00:00:00" }; + if (vrs['PlayerPlayStatus'] == true) { + setPlayerTimer(e.currentPosition < 0 ? data2 : data); + } + if (e.currentPosition < 0) { + return; + } + let wp = e.duration != null ? Math.floor((e.currentPosition / e.duration) * 100) : 0; + console.log('wp:', wp); + if (wp >= 100 || isNaN(wp)) { + stopPlayer(vrs); + } + else if (type == '1' && wp < 1) { + pausePlayer(); + } + setProcessing(false); + return; + }); + } + else { + setProcessing(false); + } + } + } + catch (e) { + console.log('error:', e); + setProcessing(false); + } + + }, []); + + const resumePlayer = React.useCallback(async (url) => { + console.log('resume player') + let vrStatus = VRS; + const res = await audioRecorderPlayer.resumePlayer(); + console.log('res:', res); + if (res == 'No audio playing') { + startPlayer(url, vrStatus); + } + vrStatus['PlayerPlayStatus'] = true; + setVRS({ ...VRS, vrStatus }); + }, []); + + + const pausePlayer = React.useCallback(() => { + console.log('pause player') + let vrStatus = VRS; + audioRecorderPlayer.pausePlayer(); + vrStatus['PlayerPlayStatus'] = false; + setVRS({ ...VRS, vrStatus }); + }, []); + + const stopPlayer = React.useCallback(async (vrStatus) => { + try { + console.log('stop player now'); + + if (audioRecorderPlayer != null) { + const uri = await audioRecorderPlayer.stopPlayer(); + audioRecorderPlayer.removePlayBackListener(); + vrStatus['PlayerPlayStatus'] = false; + setVRS({ ...VRS, vrStatus }); + } + } + catch (e) { + console.log('error:', e); + } + + }, []); + + async function show_recorder(qtn) { + let voiceClip_key = qtn.QuestionId + '_VoiceClip'; + let url = QuestionsData[voiceClip_key] ? QuestionsData[voiceClip_key].path : ''; + setRatingQtn(qtn); + if ((RecorderTimer == null || Object.keys(RecorderTimer).length <= 0) && (playerTimer == null || Object.keys(playerTimer).length <= 0) && url != null && url != '') { + setLoaderTitle(ST.Loading + '...'); + setProcessing(true); + await startPlayer(url, VRS, '1'); + } + setRecFilePath((QuestionsData[voiceClip_key] || {})); + setShowRecorder(true); + } + + + async function onSubmitData() { + let isvalid = await validate(); + if (isvalid) { + Keyboard.dismiss(); + setShowAlert(true); + } + } + + + function onSaveCancel() { + setShowAlert(false); + } + + function openImageRefView(QuestionRefImage, windowIndex = 0) { + //console.log("indexxxx--", windowIndex) + setZoomImageUrl(QuestionRefImage); + setrefImageIndex(0); + setShow_zoomImage(true); + } + + async function saveData() { + // setHasUnsavedChanges(false); + BgUnsavedChanges(false) + setShowAlert(false); + setLoaderTitle(ST.SavingData + '...'); + setProcessing(true); + try { + let { StoreId, ChainId, StateId, StoreTypeId } = storeData; + await db.transaction(async function (txn) { + + let { MenuId } = currentMenu; + let q = `DELETE FROM ${AppTables.SURVEY} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' and MENU_ID='${MenuId}' and SURVEY_ID='${ActiveSurvey.SurveyId}' `; + if (ShowCat == true) { + q += ` and CATEGORY_ID='${ActiveCategory.CategoryId}' `; + } + + // remove old data + await txn.executeSql(q, [], async function (txn2, txnres) { + console.log('survey data deleted'); + }, function (txnE, txnerr) { console.log(txnerr); },); + + + var values = ''; + let { SurveyId, SurveyName } = ActiveSurvey; + for (var i = 0; i < SurveyQuestions.length; i++) { + values += values != '' ? ' , ' : ''; + let qtn = SurveyQuestions[i]; + let id_key = qtn.QuestionId + '_AnswerId'; + let ans_key = qtn.QuestionId + '_Answer'; + let multi_key = qtn.QuestionId + '_MultiOption'; + let date_key = qtn.QuestionId + '_Date'; + let img_key1 = qtn.QuestionId + '_ImagePath1'; + let imgname_key1 = qtn.QuestionId + '_ImageName1'; + let img_key2 = qtn.QuestionId + '_ImagePath2'; + let imgname_key2 = qtn.QuestionId + '_ImageName2'; + let rating_key = qtn.QuestionId + '_Rating'; + let voiceClip_key = qtn.QuestionId + '_VoiceClip'; + + let { CategoryId, Category, SubCategory, SubCategoryId, DateRange, LengthValidation, MaxLength, MinLength, OTP, Question, QuestionId, QuestionImageAllow, QuestionType } = qtn; + + let selansid = QuestionsData[id_key] || 0; + let selans = QuestionsData[ans_key] || ''; + let imgName1 = QuestionsData[imgname_key1] || ''; + let imgName2 = QuestionsData[imgname_key2] || ''; + let multiops = QuestionsData[multi_key] || ''; + let isQtnDisabled = qtn.isDisabled != null && qtn.isDisabled != '' ? qtn.isDisabled ? 1 : 0 : 0; + let allanss = qtn.Answers || {}; + let ans_obj = allanss.find(i => i.AnswerId == selansid) + let imgallow1 = ans_obj != null && ans_obj['ImageAllow1'] != null ? ans_obj.ImageAllow1 : false; + let imgallow2 = ans_obj != null && ans_obj['ImageAllow2'] != null ? ans_obj.ImageAllow2 : false; + let f_imgalloq1 = (QuestionImageAllow == 'true' || QuestionImageAllow == 1) || (imgallow1 == 'true' || imgallow1 == 1) + let VerifyOTP = qtn?.VerifyOTP; + values += ` ('${StoreId}','${d2}','${SurveyId}','${MenuId}','${CategoryId}','${SubCategoryId}','${Question}','${QuestionId}','${QuestionType}','${selans}','${selansid}','${f_imgalloq1}','${(imgName1 || '')}','${imgallow2}','${(imgName2 || '')}','${multiops}','${isQtnDisabled}','${d2}', ${VerifyOTP}) `; + } + console.log("values------------", values) + let add_data = `INSERT INTO ${AppTables.SURVEY} (STORE_ID,VISIT_DATE,SURVEY_ID,MENU_ID,CATEGORY_ID,SUB_CATEGORY_ID,QUESTION,QUESTION_ID,QUESTION_TYPE,ANSWER,ANSWER_ID,IMAGE_ALLOW1,IMAGE1,IMAGE_ALLOW2,IMAGE2,MULTI_OPTIONS_IDS,IS_DISABLED,ADDED_DATE , VerifyOTP) VALUES ${values} `; + + await txn.executeSql(add_data, [], async function (txn2, txnres) { + console.log('surveys added'); + await clear_item('storeData'); + BgUnsavedChanges(false); + // props.set_autoback({'AutoGoToPrev':true}); + notify(ST.Surveyupdatedsuccessfully, 'SHORT'); + setProcessing(false); + props.navigation.goBack(); + + }, function (txnE, txnerr) { console.log(txnerr); setProcessing(false); notify(ST.Cannotupdatesurvey) },); + + + }); + } catch (err) { + console.log(err); + } + } + + + // send otp + + const [showotpfeild, setShowOTPFeild] = useState(false); + const [isSendOtpEnabled, setSendOtpEnabled] = useState(false); + const [otp, setOtp] = useState(''); + + const handleVerify = async (selansid, minlen) => { + console.log(minlen, "selansid----------", selansid) + if (!showotpfeild) { + notify('Please click on Send OTP Button', 'SHORT'); + return false + } + else if (otp.length !== 6) { + notify('Please enter 6-digit OTP', 'SHORT'); + return false + } else if (selansid.length == minlen) { + return await Verify_OTP(selansid); + } + + }; + + const Send_OTP = async (value) => { + //console.log("OTP called-------Send", value); + + const phoneNumber = `${'91'}${value}`; + + let projectCode = await get_item('projectCode'); + const projectcode = JSON.parse(projectCode); + + //console.log("projectDetails----", projectCode) + + const url = "https://api1.parinaam.in/api/generic/CheckUserAndSendOTP"; + const data = { mobileno: phoneNumber, projectcode: projectcode }; + + console.log(url, data); + + await getmobileverifyotp(url, data) + .then(async (res) => { + console.log(res, "response..."); + + if (!res[0]?.OTP) { + notify(res[0]?.Messages, "SHORT"); // Invalid phone + } else if (res[0]?.OTP) { + notify(res[0]?.Messages, "SHORT"); + setShowOTPFeild(true); + // return true; + } else if (res.networkErr && res.error) { + notify("Please connect to internet - " + res.error, "SHORT"); + } else if (!res.false && res.error) { + notify(res.error, "SHORT"); + } + }) + .catch((err) => { + //console.log("onPage OTP send error1", err); + }); + }; + + + const Verify_OTP = async (value) => { + //console.log("OTP called-------verify otpppppp", value.length); + + const phoneNumber = `${'91'}${value}`; + + const url = "https://api1.parinaam.in/api/generic/otpauthentication"; + const data = { + otp: otp, + mobileno: phoneNumber + }; + + console.log(url, data); + + return await verifymobileotp(url, data) + .then(async (res) => { + console.log(res, "response..vwrify."); + + if (res[0]?.Message == 'OTP is matched') { + notify(res[0]?.Message, "SHORT"); + setVerifiedOTP(true); + return true; + // setShowAlert(true); // show save alert . popup + } else if (res[0]?.Message != 'OTP is matched') { + notify(res[0]?.Message, "SHORT"); + } else if (res.networkErr && res.error) { + notify("Please connect to internet - " + res.error, "SHORT"); + } else if (!res.false && res.error) { + notify(res.error, "SHORT"); + } + return false + }) + .catch((err) => { + //console.log("onPage OTP send error1", err); + return false + }); + }; + + + async function validate() { + function showError(obj, isErr) { + setErrorField(obj); + setError(isErr); + } + let Image1MandIndex = KPIFields.findIndex(i => i.KPIFieldName == 'Image1Mandatory'); + let Image1MandObj = Image1MandIndex >= 0 ? KPIFields[Image1MandIndex] : {}; + let isImage1Mand = Image1MandIndex >= 0 ? Image1MandObj['KPIFieldEnable'] : true; + let Image2MandIndex = KPIFields.findIndex(i => i.KPIFieldName == 'Image2Mandatory'); + let Image2MandObj = Image2MandIndex >= 0 ? KPIFields[Image2MandIndex] : {}; + let isImage2Mand = Image2MandIndex >= 0 ? Image2MandObj['KPIFieldEnable'] : false; + var isvalid = true; + const QD = QuestionsData; + // console.log("SurveyQuestions",JSON.stringify(QuestionsData)); + for (var i = 0; i < SurveyQuestions.length; i++) { + let qtn = SurveyQuestions[i]; + let selansid = '', selanswer = '', selimg = '', showImageTag = false, showImageTag2 = false, isImageMandateforAns = false, isImageMandate2forAns = false, imgChild = false, imgChild2 = false; + let id_key = qtn.QuestionId + '_AnswerId'; + let ans_key = qtn.QuestionId + '_Answer'; + let multi_key = qtn.QuestionId + '_MultiOption'; + let date_key = qtn.QuestionId + '_Date'; + let img_key = qtn.QuestionId + '_ImagePath1'; + let imgname_key = qtn.QuestionId + '_ImageName1'; + let img_key2 = qtn.QuestionId + '_ImagePath2'; + let imgname_key2 = qtn.QuestionId + '_ImageName2'; + let rating_key = qtn.QuestionId + '_Rating'; + let voiceClip_key = qtn.QuestionId + '_VoiceClip'; + let list_mcdata = []; + + let isDisabled = qtn.isDisabled != null ? qtn.isDisabled : false + let LengthValidation = qtn.LengthValidation == 'true' || qtn.LengthValidation == 1 ? true : false; + let isLengthValidationReq = false; + let minL = qtn.MinLength != null && qtn.MinLength != '' ? qtn.MinLength : 0; + let maxL = qtn.MaxLength != null && qtn.MaxLength != '' ? qtn.MaxLength : 10; + let enableOTP = qtn.OTP != null && qtn.OTP != '' ? qtn.OTP : false; + let verify_OTP = qtn.VerifyOTP; + let ansVal = QD[ans_key]; + //console.log("ansVal", ansVal) + let errorobj = { 'EF_Qtn': qtn }; + // LengthValidation is required for number type input only + if (qtn.QuestionType == 'Number') { + isLengthValidationReq = LengthValidation; + } + + if (!isDisabled || isDisabled != 1) { + let isImgAllowed = ((qtn.QuestionImageAllow == true || qtn.QuestionImageAllow == 'true' || qtn.QuestionImageAllow == 1) || (qtn.QuestionType == "Image")); + let isImg1mandatory = (qtn.Image1Mandatory == "true") || (qtn.Image1Mandatory == true) || (qtn.Image1Mandatory == 1) || (qtn.QuestionImageMandatory == "true") || (qtn.QuestionImageMandatory == true) || (qtn.QuestionImageMandatory == 1) + let isImg2mandatory = (qtn?.Image2Mandatory == "true" || qtn?.Image2Mandatory == '1' || qtn?.Image2Mandatory == 1); + let isQuestionImageMandatory = qtn.QuestionType == "Image" ? (qtn?.QuestionImageMandatory == "true" || qtn?.QuestionImageMandatory == true || qtn?.QuestionImageMandatory == 1) : (qtn?.QuestionImageMandatory == "true" || qtn?.QuestionImageMandatory == true || qtn?.QuestionImageMandatory == 1) ? true : false; + let checkForAnsKey = (qtn.QuestionType == 'Decimal' || qtn.QuestionType == 'Number' || qtn.QuestionType == 'Text' || qtn.QuestionType == 'OnlyText' || qtn.QuestionType == 'Date' || qtn.QuestionType == 'Rating'); + + console.log("qtn", qtn) + if (qtn.QuestionType == 'Single choice list') { + selansid = QD[id_key]; + } else if (qtn.QuestionType == 'Multi choice list') { + selansid = QD[multi_key] != null && QD[multi_key] != '' ? QD[multi_key].split(',') : []; + } + console.log("testing2-----", selansid) + if (qtn.QuestionType == 'Multi choice list' && selansid.length <= 0 || qtn.QuestionType == 'Single choice list' && (selansid === undefined || selansid === '' || selansid == 0 || selansid == '0')) { + errorobj["EF_Input"] = 'Input'; + showError(errorobj, true); + isvalid = false; + notify(ST.Pleaseselectoptionsfortherequiredfield, 'SHORT'); + break; + } else if (checkForAnsKey && (Object.keys(QD).indexOf(ans_key) < 0 || (Object.keys(QD).indexOf(ans_key) >= 0 && QD[ans_key] === ''))) { + errorobj["EF_Input"] = 'Input'; + showError(errorobj, true); + isvalid = false; + let msg = (qtn.QuestionType == 'Date' ? ST.Pleasepickadate : (qtn.QuestionType == 'Rating' ? ST.Pleaseselectrating : ST.Pleasefillalldetails)); + notify(msg, 'SHORT'); + break; + } else if (qtn.QuestionType == 'Audio' && (Object.keys(QD).indexOf(voiceClip_key) < 0 || (Object.keys(QD).indexOf(voiceClip_key) >= 0 && (QD[voiceClip_key] == null || QD[voiceClip_key].filename == null || QD[voiceClip_key].filename == '')))) { + errorobj["EF_Input"] = 'Input'; + showError(errorobj, true); + isvalid = false; + notify(ST.Pleaserecordaudioclipfortherequiredfield, 'SHORT'); + break; + } + else if (isQuestionImageMandatory && (QD[img_key] == undefined || QD[img_key] === '')) { + errorobj["EF_Input"] = 'Input'; + showError(errorobj, true); + isvalid = false; + notify(`Please capture image ${ST.In} ${qtn.Question}`, 'SHORT'); + break; + } + else if (isImgAllowed && + (isImg1mandatory || imgChild || isImg2mandatory) && + showImageTag && + ( + !QD.hasOwnProperty(img_key) || + QD[img_key] === '' + )) { + errorobj["EF_Image"] = 'Image'; + showError(errorobj, true); + isvalid = false; + notify(ST.Pleaseaddimages, 'SHORT'); + break; + } else if (isLengthValidationReq && ansVal.length < minL) { + errorobj["EF_Input"] = 'Input'; + showError(errorobj, true); + isvalid = false; + notify("Minimum digits allowed is " + minL + " in " + qtn.Question, 'SHORT'); + break; + } else if (isLengthValidationReq && ansVal.length > maxL) { + errorobj["EF_Input"] = 'Input'; + showError(errorobj, true); + isvalid = false; + notify("Maximum digits allowed is " + maxL + " in " + qtn.Question, 'SHORT'); + break; + } else { + console.log('no condition found'); + } + + if ((qtn.QuestionType == 'Single choice list' || qtn.QuestionType == 'Multi choice list')) { + if (qtn.Answers && qtn.Answers.length > 0) { + for (var j = 0; j < qtn.Answers.length; j++) { + let ansss = qtn.Answers[j]; + let isandImgAl = (ansss.ImageAllow1 == true || ansss.ImageAllow1 == 'true' || ansss.ImageAllow1 == 1); + if (qtn.QuestionType == 'Single choice list' && (isandImgAl && ansss.AnswerId == selansid)) { + showImageTag = true; + isImageMandateforAns = qtn.Image1Mandatory; + imgChild = ansss.Image1Mandatory + } else if (qtn.QuestionType == 'Multi choice list' && (isandImgAl && selansid.indexOf(ansss.AnswerId.toString()) >= 0)) { + showImageTag = true; + isImageMandateforAns = qtn.Image1Mandatory; + imgChild = ansss.Image1Mandatory + } + let isandImgAl2 = (ansss.ImageAllow2 == true || ansss.ImageAllow2 == 'true' || ansss.ImageAllow2 == 1); + if (qtn.QuestionType == 'Single choice list' && (isandImgAl2 && ansss.AnswerId == selansid)) { + showImageTag2 = true; + isImageMandate2forAns = qtn.Image2Mandatory; + imgChild2 = ansss.Image2Mandatory + } + else if (qtn.QuestionType == 'Multi choice list' && (isandImgAl2 && selansid.indexOf(ansss.AnswerId.toString()) >= 0)) { + showImageTag2 = true; + isImageMandate2forAns = qtn.Image2Mandatory; + imgChild2 = ansss.Image2Mandatory + } + } + } + } + + console.log("imgChild--", imgChild) + if ((isImg1mandatory || imgChild) && showImageTag && (Object.keys(QD).indexOf(img_key) < 0 || (Object.keys(QD).indexOf(img_key) >= 0 && QD[img_key] === ''))) { + errorobj["EF_Image"] = 'Image'; + showError(errorobj, true); + isvalid = false; + notify(ST.Pleaseaddimages, 'SHORT'); + break; + } + + if ((isImg1mandatory || imgChild2) && showImageTag2 && (Object.keys(QD).indexOf(img_key2) < 0 || (Object.keys(QD).indexOf(img_key2) >= 0 && QD[img_key2] === ''))) { + errorobj["EF_Image"] = 'Image'; + showError(errorobj, true); + isvalid = false; + notify(ST.Pleaseaddimages, 'SHORT'); + break; + } + + if ((enableOTP == "true" || enableOTP == true || enableOTP == 1) && verify_OTP != 1) { + let minlen = (qtn.LengthValidation === true || qtn.LengthValidation == 1 || qtn.LengthValidation === 'true') + && qtn.MinLength != null + && qtn.MinLength !== '' + ? qtn.MinLength + : undefined; + selansid = QD[ans_key]; + let resultOTp = await handleVerify(selansid, minlen); + qtn.VerifyOTP = resultOTp ? 1 : 0 + isvalid = false; + break; + } + + } + } + + return isvalid; + } + + function render_Picker(label_key, value_key, onChange = () => { }, selected_data = {}) { + var data = []; + let qtn = selected_data.qtn || {}; + let EStyle_Qtn_Input = selected_data.EStyle_Qtn_Input || {}; + let isQtnDisabled = qtn.isDisabled != null && qtn.isDisabled != '' ? qtn.isDisabled : false; + let allAnswers = qtn.Answers || []; + + allAnswers.map((item, index) => { + let obj = { key: index, label: item[label_key], value: item[value_key] }; + if (selected_data.value == item[label_key]) + obj['component'] = {item[label_key]}; + data.push(obj); + }); + + return ( + { onChange(option, qtn) }} + overlayStyle={customStyle.addVisPickerOverlay} + cancelContainerStyle={customStyle.addVisPicker_OptionContainerStyle} + optionStyle={customStyle.addvis_opStyle} + optionTextStyle={customStyle.addvis_opTextStyle} + optionContainerStyle={customStyle.addVisPicker_OptionContainerStyle} + selectedKey={'1'} + disabled={isQtnDisabled} + cancelText={ST.Cancel} + > + {(selected_data.value != null && selected_data.value != '' ? + selected_data.value : '-select-')} + + ) + } + + // function renderDatePicker(qtn) { + // let qtnn = qtn; + // let DateRange = qtn.DateRange; + // let maxDate = moment().add(10, 'years').format('MM/DD/YYYY'); + // let minDate = moment().subtract(10, 'years').format('MM/DD/YYYY'); + + // const currentDate = new Date(); + // const maxDateIOS = currentDate; + // const minDateIOS = new Date(); + // minDateIOS.setFullYear(minDateIOS.getFullYear() - 10); + + // if (DateRange == 'RFD') { + // maxDate = moment().format('MM/DD/YYYY'); + // } + // else if (DateRange == 'RPD') { + // minDate = moment().format('MM/DD/YYYY'); + // } + + // return ( + // { setTextValue(selectedDate, qtnn) }} + // maximumDate={Platform.OS === 'ios' ? new Date(maxDateIOS) : new Date(maxDate)} + // minimumDate={Platform.OS === 'ios' ? new Date(minDateIOS) : new Date(minDate)} + // /> + // ); + // } + function renderDatePicker(qtn) { + let qtnn = qtn; + let DateRange = qtn.DateRange; + let maxDate = moment().add(10, 'years').format('MM/DD/YYYY'); + let minDate = moment().subtract(10, 'years').format('MM/DD/YYYY'); + + const currentDate = new Date(); + const maxDateIOS = currentDate; + const minDateIOS = new Date(); + minDateIOS.setFullYear(minDateIOS.getFullYear() - 10); + + if (DateRange == 'RFD') { + maxDate = moment().format('MM/DD/YYYY'); + } + else if (DateRange == 'RPD') { + minDate = moment().format('MM/DD/YYYY'); + } + + const today = new Date(); + const oneMonthAgo = new Date(); + oneMonthAgo.setMonth(oneMonthAgo.getMonth() - 1); + console.log("ererre", qtn) + + return ( + { setTextValue(selectedDate, qtnn) }} + onChange={(event, selectedDate) => { + if (event.type === 'dismissed' || event.type === 'cancel') { + // ❌ Cancel pressed + setShowDatePickerId({}); // hide picker + return; + } + + if (event.type === 'set' || event.type === 'ok') { + // ✅ OK pressed + setShowDatePickerId({}); // hide picker + setTextValue(selectedDate, qtnn); + } + }} + maximumDate={Platform.OS === 'ios' ? new Date(maxDateIOS) : today} + minimumDate={Platform.OS === 'ios' ? new Date(minDateIOS) : oneMonthAgo} + /> + ); + } + + function renderItem({ item, drag, isActive }) { + return ( + + + {item.Answer} + + + ); + }; + + function renderRatingView() { + let qtn = RatingQtn; + let Answers = qtn.Answers; + let id_key = qtn.QuestionId + '_AnswerId'; + let ans_key = qtn.QuestionId + '_Answer'; + let rating_key = qtn.QuestionId + '_Rating'; + + let newarr = RatingOrder; + if (RatingOrder.length <= 0) { + newarr = Answers; + } + + return ( + + + {ST.DragItemsInOrder} + {ST.Pressandholdtodrag} + { setRatingValue(data) }} + keyExtractor={(item) => item.AnswerId} + renderItem={renderItem} + /> + + { onRatingCancel() }}> + {ST.Cancel} + + { onRatingSave() }}> + {ST.Save} + + + + + ) + } + + function renderRecorderView() { + + let qtn = RatingQtn; + let isRecorderPlaying = VRS.RecorderPlayStatus != null && VRS.RecorderPlayStatus == true; + let isPlayerPlaying = VRS.PlayerPlayStatus != null && VRS.PlayerPlayStatus == true; + const scale = animatedRipple.interpolate({ + inputRange: [0, 1], + outputRange: [1, 1.3], + }); + + const borderColor = animatedRipple.interpolate({ + inputRange: [0, 1], + outputRange: ['#f5acb4c2', '#fce6e9e3'], + }); + + const scale2 = animatedRipple2.interpolate({ + inputRange: [0, 1], + outputRange: [1, 1.5], + }); + + const borderColor2 = animatedRipple2.interpolate({ + inputRange: [0, 1], + outputRange: ['#f5acb4c2', '#fce6e9e3'], + }); + + let totalDuration = RecorderTimer.recordSecs != null ? RecorderTimer.recordSecs : playerTimer.totalDuration; + let wp = totalDuration != null ? Math.floor((playerTimer.playerSecs / totalDuration) * 100) : 0; + let width1 = wp <= 100 ? (wp > 0 ? wp + '%' : '0%') : '100%'; + if (isNaN(wp)) width1 = '0%'; + + return ( + + {rerenderView == rerenderView && + + {ST.RecordVoiceClip} + {ST.Youcanrecordmaxfor60secs} + {VoiceRecorderStatus} + + + + + + { startRecorder(storeData, qtn, ActiveSurvey, VRS); }}> + + + {isRecorderPlaying && + { stopRecorder(VRS); }}> + + + } + + + + {RecorderTimer.recordTime} + { + (!isRecorderPlaying && RecFilePath.filename != null && RecFilePath.filename != '') && + + + + + + + {`${(playerTimer.playTime || '00:00:00')} / ${playerTimer.playDuration || RecorderTimer.recordTime}`} + + + + { let url = (Platform.OS == 'ios' ? 'file://' : '') + `${ImageFolderPath + currentMenu.ScreenName}/` + 'Recordings/' + RecFilePath.filename; (wp < 100 && wp > 0) ? resumePlayer(url) : startPlayer(url, VRS); }}> + + + {isPlayerPlaying && { wp < 100 ? pausePlayer() : stopPlayer(VRS); }}> + + } + + + } + + + + { onRecordCancel() }}> + {ST.Cancel} + + { onRecordSave() }}> + {ST.Save} + + + } + + ) + } + + function _renderSurveyQtns(subcat) { + const SurveyQuestions = subcat?.Questions; + // console.log("FlatList Rendering:", JSON.stringify(SurveyQuestions)); + return ( + + { + SurveyQuestions != null && SurveyQuestions != undefined && SurveyQuestions?.length > 0 && + SurveyQuestions?.map((item, index) => { + // for debugging + let qtn = item; + let selansid = '', selanswer = '', selimg = '', selimg2 = '', showImageTag = false, showImageTag2 = false, isImageMandateforAns = false, isImageMandate2forAns = false; + let id_key = qtn.QuestionId + '_AnswerId'; + let ans_key = qtn.QuestionId + '_Answer'; + let multi_key = qtn.QuestionId + '_MultiOption'; + let date_key = qtn.QuestionId + '_Date'; + let img_key = qtn.QuestionId + '_ImagePath1'; + let imgname_key = qtn.QuestionId + '_ImageName1'; + let img_key2 = qtn.QuestionId + '_ImagePath2'; + let imgname_key2 = qtn.QuestionId + '_ImageName2'; + let rating_key = qtn.QuestionId + '_Rating'; + let voiceClip_key = qtn.QuestionId + '_VoiceClip'; + let list_mcdata = []; + let maxlen = (qtn.LengthValidation == true || qtn.LengthValidation == 'true') && qtn.MaxLength != null && qtn.MaxLength != '' ? qtn.MaxLength : undefined; + let minlen = (qtn.LengthValidation == true || qtn.LengthValidation == 'true') && qtn.MinLength != null && qtn.MinLength != '' ? qtn.MinLength : undefined; + + if (qtn.QuestionType == 'Single choice list') { + selansid = QuestionsData[id_key] != null ? QuestionsData[id_key] : ''; + selanswer = QuestionsData[ans_key] != null ? QuestionsData[ans_key] : ''; + } + else if (qtn.QuestionType == 'Multi choice list') { + + if (qtn.Answers != null) { + console.log('qtn.Answers:', qtn.Answers.length); + for (var i = 0; i < qtn.Answers.length; i++) { + let obj = { 'AnswerId': parseInt(qtn.Answers[i].AnswerId), 'Answer': qtn.Answers[i].Answer }; + list_mcdata.push(obj); + } + } + selansid = QuestionsData[multi_key] != null && QuestionsData[multi_key] != '' ? QuestionsData[multi_key].split(',') : []; + if (selansid != null && selansid.length > 0) { + let arr = []; + for (var i = 0; i < selansid.length; i++) { + arr.push(parseInt(selansid[i])); + } + selansid = arr; + } + } + else if (qtn.QuestionType == 'Number' || qtn.QuestionType == 'Text' || qtn.QuestionType == 'OnlyText' || qtn.QuestionType == 'Decimal' || qtn.QuestionType == 'Date') { + selansid = QuestionsData[ans_key]; + selanswer = (qtn.QuestionType == 'Date') ? (QuestionsData[date_key] || moment().format('MM/DD/YYYY')) : ''; + showImageTag = (qtn.QuestionImageAllow == true || qtn.QuestionImageAllow == 'true' || qtn.QuestionImageAllow == 1); + showImageTag2 = false; + } else if (qtn.QuestionType == 'Image') { + selansid = QuestionsData[id_key] != null ? QuestionsData[id_key] : ''; + selanswer = QuestionsData[ans_key] != null ? QuestionsData[ans_key] : ''; // this is the image file name + {/* filePath=`${ImageFolderPath+currentMenu.ScreenName}/${selanswer}`; */ } + showImageTag = true; + } + else if (qtn.QuestionType == 'Rating') { + selanswer = QuestionsData[ans_key] ? QuestionsData[ans_key] : ''; + } + else if (qtn.QuestionType == 'Audio') { + selansid = QuestionsData[ans_key] ? QuestionsData[ans_key] : ''; + selanswer = QuestionsData[voiceClip_key] ? (QuestionsData[voiceClip_key].filename || '') : ''; + } + + if ((qtn.QuestionType == 'Single choice list' || qtn.QuestionType == 'Multi choice list')) { + if (qtn.Answers && qtn.Answers.length > 0) { + for (var i = 0; i < qtn.Answers.length; i++) { + let ansss = qtn.Answers[i]; + + let isandImgAl = (ansss.ImageAllow1 == true || ansss.ImageAllow1 == 'true' || ansss.ImageAllow1 == 1); + let isandImgAl2 = (ansss.ImageAllow2 == true || ansss.ImageAllow2 == 'true' || ansss.ImageAllow2 == 1); + let isImage1Mand = (ansss.Image1Mandatory == true || ansss.Image1Mandatory == 'true' || ansss.Image1Mandatory == 1); + let isImage2Mand = (ansss.Image2Mandatory == true || ansss.Image2Mandatory == 'true' || ansss.Image2Mandatory == 1); + + if (qtn.QuestionType == 'Single choice list' && (isandImgAl && ansss.AnswerId == selansid)) { + showImageTag = true; + if (isImage1Mand) { + isImageMandateforAns = true; + } + } + else if (qtn.QuestionType == 'Multi choice list' && (isandImgAl && selansid.indexOf(ansss.AnswerId) >= 0)) { + showImageTag = true; + if (isImage1Mand) { + isImageMandateforAns = true; + } + } + + if (qtn.QuestionType == 'Single choice list' && (isandImgAl2 && ansss.AnswerId == selansid)) { + showImageTag2 = true; + if (isImage2Mand) { + isImageMandate2forAns = true; + } + } + else if (qtn.QuestionType == 'Multi choice list' && (isandImgAl2 && selansid.indexOf(ansss.AnswerId) >= 0)) { + showImageTag2 = true; + if (isImage2Mand) { + isImageMandate2forAns = true; + } + } + } + } + } + + if (showImageTag) { + selimg = QuestionsData[img_key] != null && QuestionsData[img_key] != '' ? 'file://' + QuestionsData[img_key] : ''; + } + + if (showImageTag2) { + selimg2 = QuestionsData[img_key2] != null && QuestionsData[img_key2] != '' ? 'file://' + QuestionsData[img_key2] : ''; + } + + let isDisabled = qtn.isDisabled != null ? qtn.isDisabled : false + + // console.log("isDisabled---", isDisabled) + + let rs = qtn?.CalFormula || ""; + + Object.keys(QuestionsData).forEach((item) => { + const regex = new RegExp(item, 'g'); + rs = rs.replace(regex, QuestionsData[item]); + }); + + if (qtn.QuestionType == "Calculate") { + try { + let selansidVal = /_Anser/.test(rs) ? selansid : eval(rs) + selansidVal = typeof (selansidVal) == "number" ? selansidVal.toFixed(2) : selansidVal; + selansidVal = String(selansidVal) + selansid = /_Anser/.test(rs) ? selansid : String(eval(selansidVal)) + + if (QuestionsData[ans_key] != selansid) { + setQuestionsData((prev) => ({ + ...prev, + [id_key]: 0, + [ans_key]: selansid, + })); + setrerenderdata(!rerenderdata); + } + } catch (e) { + //console.log("selansid------e", e) + selansid = /_Anser/.test(selansid) ? "" : selansid + } + } + + // Error Field highlight styles + let EF_Qtn = errorfield.EF_Qtn != null ? errorfield.EF_Qtn : {}; + let show_errorhere = error == true && EF_Qtn.QuestionId == qtn.QuestionId; + + // this will show error field in red (if window is present and exist reason is enabled and not filled ) or (if window is not present and Not exist reason is enabled and not filled ) + let EF_Input = errorfield.EF_Input || ''; + let EF_Image = errorfield.EF_Image || ''; + let EStyle_Qtn_Input = show_errorhere && EF_Input == 'Input' ? customStyle.stk_inptSTyle_error : {}; + let EStyle_Qtn_MultiChoice = show_errorhere && EF_Input == 'Input' ? customStyle.stk_MultiSSTyle_error : {}; + let EStyle_Qtn_Image = show_errorhere && EF_Image == 'Image' ? customStyle.stk_inptSTyle_error : {}; + let Image1Mandatory = (qtn.Image1Mandatory == "true") || (qtn.Image1Mandatory == true) || (qtn.QuestionImageMandatory == "true") || (qtn.QuestionImageMandatory == true) + let Image2Mandatory = (qtn.Image2Mandatory == "true") || (qtn.Image2Mandatory == true) + + let OTPVerify = qtn.OTP == 'true' || qtn.OTP == 1 ? true : false; + + if (isDisabled == true || isDisabled == 'true') { + return ( + + ) + } else { + return ( + <> + {index == 0 && ( + + {subcat.SubCategory} + + )} + + {qtn.Question} + {/* {//console.log("chekqtnn:", qtn.Question, "-----", qtn)} */} + {qtn.QuestionRefImage != null && qtn.QuestionRefImage != "" && + { openImageRefView(qtn.QuestionRefImage, index) }}> + + + } + {qtn.QuestionType == 'Single choice list' && qtn.Answers && + render_Picker('Answer', 'AnswerId', onselectionChange, { value: selanswer, qtn: qtn, EStyle_Qtn_Input }) + } + {qtn.QuestionType == 'Multi choice list' && qtn.Answers && + { console.log('onSelectedItemsChange'); setMultiSelectValue(selectedItems, qtn) }} + selectedItems={selansid} + selectText="Pick Items" + searchInputPlaceholderText="Search Items..." + // onChangeInput={ (text)=> console.log(text)} + tagRemoveIconColor={PageTheme.$primary_color} + tagBorderColor={PageTheme.$primary_color} + tagTextColor={PageTheme.$primary_color} + selectedItemTextColor={PageTheme.$primary_color} + selectedItemIconColor={PageTheme.$primary_color} + tagContainerStyle={{ height: 30, width: '100%', paddingVertical: 5 }} + styleTextTag={{ fontSize: 14 }} + itemTextColor={PageTheme.$text_color} + displayKey="Answer" + searchInputStyle={customStyle.wind_MultiSearchInputStyle} + styleMainWrapper={EStyle_Qtn_MultiChoice} + submitButtonColor={PageTheme.$primary_color} + submitButtonText="Submit" + /> + } + {(qtn.QuestionType == 'Number' || qtn.QuestionType == 'Decimal' || qtn.QuestionType == 'Text' || qtn.QuestionType == 'OnlyText' || qtn.QuestionType == "Calculate") && + <> + + + { inputRefs.current['input1_' + qtn.QuestionId] = reff; }} + style={[customStyle.surveyQtn_InputStyle, OTPVerify ? { width: '65%' } : { width: '100%' }, EStyle_Qtn_Input, ((qtn.QuestionType == "Calculate") && { fontWeight: "700", })]} + placeholder="" + autoComplete='off' + // editable={qtn.QuestionType!="Calculate" && (verifiedOTP && OTPVerify) } + editable={OTPVerify ? !qtn.VerifyOTP == 1 : qtn.QuestionType != "Calculate"} + placeholderTextColor={PageTheme.$placeholder_color} + // keyboardType={'ascii-capable'} + returnKeyType={(Platform.OS === 'ios') ? 'done' : 'next'} + blurOnSubmit={false} + keyboardType={(qtn.QuestionType == 'Decimal' ? 'decimal-pad' : (qtn.QuestionType == 'Text' || qtn.QuestionType == 'OnlyText' ? 'default' : 'number-pad'))} + value={selansid} + minLength={minlen} + maxLength={maxlen} + onSubmitEditing={() => { focusToNext(qtn, '1') }} + // onChangeText={(val)=>{setTextValue(val,qtn,(qtn.QuestionType=='Decimal'?'decimal':(qtn.QuestionType=='Text'?'text':'numeric')))}} + onChangeText={(val) => { setTextValue(val, qtn, qtn.QuestionType == 'Decimal' ? 'decimal' : qtn.QuestionType == 'Text' ? 'text' : qtn.QuestionType == 'OnlyText' ? 'onlytext' : 'numeric') }} + /> + + {/* {console.log("minlen------------", String(selansid || "")?.length, minlen)} */} + + {OTPVerify && String(selansid || "")?.length == minlen && <> + { qtn.VerifyOTP ? '' : Send_OTP(selansid) }} + > + {qtn.VerifyOTP ? "Verified" : "Send OTP"} + + } + + + + {showotpfeild && OTPVerify && + + { setOtp(code); }} + numberOfInputs={6} + secureTextEntry={true} + defaultValue='' + keyboardType={"numeric"} + // autofillFromClipboard={false} + inputStyles={customStyle.verify_otp_inputStyle} + style={customStyle.otp_field} + /> + + } + + } + + + + { + (qtn.QuestionType == 'Date') && + + {selansid != '' ? selansid : 'DD/MM/YYYY'} + { + { console.log("qtn_nnnnn", qtn) } + setDateValue(selanswer); + //showQtnDatePicker(qtn, true) + setShowDatePickerId({ showDatePicker: true, QuestionId: qtn.QuestionId }) + }}> + + + + } + + {(showDatePickerId && showDatePickerId?.showDatePicker == true + && showDatePickerId?.QuestionId == qtn.QuestionId + && qtn.QuestionType == 'Date') + && renderDatePicker(qtn)} + + { + (qtn.QuestionType == 'Rating') && + + {selanswer} + { setRatingQtn(qtn); setShowRating(true); }}> + + + + } + + { + (qtn.QuestionType == 'Audio') && + + {selanswer} + { show_recorder(qtn); }}> + + + + } + + { + showImageTag && + + + {console.log("checkimgmandate:", Image1Mandatory)} + {Image1Mandatory || isImageMandateforAns ? + { openCamera(qtn, '1') }}> + + : + { openCamera(qtn, '1') }}> + + } + + } + + { + showImageTag2 && + + + {Image2Mandatory || isImageMandate2forAns ? + { openCamera(qtn, '2') }}> + + : + { openCamera(qtn, '2') }}> + + } + + } + + + ) + } + + }) + } + + + ); + } + + + function _renderHeader(currentIndex) { + return ( + + {`${(currentIndex + 1)}/${zoomImageUrl.length}`} + { setShow_zoomImage(false) }}> + + + + ) + } + + + function _renderSurveyView() { + return ( + + { + let subcat = item, s_index = index; + let RefImage = item.RefImage; + return ( + + + {_renderSurveyQtns(subcat)} + + + ) + }} + > + + + + ); + } + + + + return ( + + {processing && } + + + + + + {ConfirmSaveAlert(props, showAlert, onSaveCancel, saveData)} + { setShowCamera(false); getImage(imgData) }} showCamera={showCamera} onHideCamera={() => { setShowCamera(false); }} /> + + + + + + + {/* {(ActiveSurvey.SurveyName!=null?(ActiveSurvey.SurveyName.length>26?ActiveSurvey.SurveyName.substring(0,26)+'...':ActiveSurvey.SurveyName) : '')} */} + {(`${(ST.SurveyId != null ? ST.SurveyId : 'Survey Id')} : ` + (ActiveSurvey.SurveyId || '') + (ShowCat == true ? ' | ' + `${(ST.CategoryId != null ? ST.CategoryId : 'Category Id')} : ` + (ActiveCategory.CategoryId || '') : ''))} + + + {Object.keys(ActiveSurvey).length > 0 && + _renderSurveyView() + } + + { + // getAllFolderImages() + onSubmitData() + }} /> + + + + {showRating == true && + renderRatingView() + } + + {show_zoomImage && + + null} + /> + + } + + {showRecorder == true && + renderRecorderView() + } + + ); +} + + +export default connect(mapStateToProps, mapDispatchToProps)(SurveyView); \ No newline at end of file diff --git a/PerformicsSrc/src/screens/TGBaseVisiCooler.js b/PerformicsSrc/src/screens/TGBaseVisiCooler.js new file mode 100644 index 0000000..d6670ed --- /dev/null +++ b/PerformicsSrc/src/screens/TGBaseVisiCooler.js @@ -0,0 +1,2126 @@ +import React,{useState,useEffect,useRef} from 'react'; +import Container from '../components/container'; +import { useRoute } from '@react-navigation/native'; +import { globalStyles,customStyles,GetPageTheme } from "../styles/Global"; +import { AppState, StatusBar,Image,TextInput,View,Text,ScrollView,TouchableOpacity,Platform,PermissionsAndroid,FlatList, Alert, Animated,KeyboardAvoidingView, Keyboard} from 'react-native'; +import { ReactReduxContext,connect,useSelector, useDispatch } from 'react-redux'; +import { mapStateToProps,mapDispatchToProps } from '../reducers/contextProvider'; +import SQLite from 'react-native-sqlite-2'; +import {notify} from '../components/notify'; +import moment from 'moment'; +import {getDownloadJson,getKPIFields,marktext1,marktext2, resizeImage, restore_ImageWithMetaData, validateNumber} from '../controller/functions'; +import {get_item,set_item,clear_item} from '../components/localStorage'; +import {version,sloganline,appname,testurl,db, colors_Arr, common_ImagePath,ImageFolderPath, HierarchyTbls} from '../constants/constants'; +import CustomHeader from '../components/customHeader'; +import {Card, Menu, Switch} from 'react-native-paper'; +import {AntDesign, Entypo, FontAwesome, Fontisto, Ionicons, MaterialCommunityIcons} from '../components/icons'; +import { stat } from 'react-native-fs'; +import CustomLoader from '../components/CustomLoader'; +import LinearGradient from 'react-native-linear-gradient'; +import { AppTables } from '../constants/tableConstants'; +import { SvgXml } from 'react-native-svg'; +import {launchCamera, launchImageLibrary,CameraOptions} from 'react-native-image-picker'; +import * as RNFS from 'react-native-fs'; +import GradientButton from '../components/gradientButton'; +import addImg from '../assets/performics/add_image.svg'; +import CustomModal from '../components/CustomModal'; +import { Q_getpaidvisibility } from '../constants/ConstantQueries'; +import { Picker } from '@react-native-picker/picker'; +import { ConfirmSaveAlert } from '../components/alert'; +import ModalSelector from 'react-native-modal-selector' +import { CustomPicker, CustomPicker2 } from '../components/CustomPicker'; +import CustomCamera from '../components/Camera'; +import ImageViewer from 'react-native-image-zoom-viewer'; +import DateTimePicker from '@react-native-community/datetimepicker'; +import CheckBox from '@react-native-community/checkbox'; + +import cameraImg from '../assets/performics/camera_front_image.svg' +import MultiSelect from 'react-native-multiple-select'; +import CameraImg3 from '../assets/performics/camera_tick.svg'; +import CameraImg2 from '../assets/performics/camera_icon.svg'; +import CameraImg4 from '../assets/performics/camera_asterisk.svg'; +import CameraImg5 from '../assets/image/astrickcamera.svg'; +import { PageTheme } from '../styles/Themes'; + +function TGBaseVisiCooler(props) { + const route = useRoute(); + const ST=props.StaticText || {}; + + // get all theme styles acc to current theme set + const PageTheme=GetPageTheme(props.DarkMode,route.name); + const customStyle=customStyles(props.DarkMode,route.name); + const animatedChoice=useRef(new Animated.Value(0)).current; + + const [processing, setProcessing] = useState(true); + const [loaderTitle, setLoaderTitle] = useState(); + const [isAdhocScreen, setIsAdhocScreen] = useState(false); + const [storeData, setStoreData] = useState({}); + const [StoreCameraAllow, setStoreCameraAllow] = useState(true); + const [currentMenu, setCurrentMenu] = useState({}); + const [rerenderdata, setrerenderdata]= useState(0); + const [rerenderdata2, setrerenderdata2]= useState(0); + const [rerenderdata3, setrerenderdata3]= useState(0); + const [rerenderdata4, setrerenderdata4]= useState(0); + + const [hasUnsavedChanges,setHasUnsavedChanges] = useState(false); + + const [WindowData, setWindowData] = useState([]); + // const [reasons_list, setReasons_list] = useState([]); + const [Windows, setWindows] = useState([]); + const [show_zoomImage, setShow_zoomImage] = useState(false); + const Show_zoomImageRef=useRef(false); + const [refImageIndex, setrefImageIndex] = useState(0); + const [zoomImageIndex, setzoomImageIndex] = useState(0); + const [showAlert, setShowAlert] = useState(false); + const [zoomImageUrl, setZoomImageUrl] = useState([]); + const [showCamera, setShowCamera] = useState(false); + const [showQRCamera, setShowQRCamera] = useState(false); + const [getImageProps,setGetImageProps]= useState({}); + const zoomView=useRef(null); + const [showRating, setShowRating] = useState(false); + const [RatingQtn, setRatingQtn] = useState({}); + const [RatingWindow, setRatingWindow] = useState({}); + const [RatingOrder, setRatingOrder] = useState([]); + + const [Products, setProducts] = useState([]); + const [DisplayList, setDisplayList] = useState([]); + const [toRemoveId,setToRemoveId]= useState(''); + const [toRemoveItem,setToRemoveItem]= useState({}); + const [showRemoveConfirm_M,setshowRemoveConfirm_M]= useState(false); + const [showRAllC_M,setShowRAllC_M]= useState(false); + const [searchedItem, setSearchedItem]= useState(''); + const [globalWindows, setGlobalWindows] = useState([]); + const [KPIFields, setKPIFields] = useState([]); + const [showSwitchCamera,setShowSwitchCamera]= useState(false); + const [GridValue, setGridValue] = useState(false); + const [QREnable, setQREnable] = useState(false); + + + const [DataCleanModal, setDataCleanModal] = useState(false); + const [DataCleanAnim, setDataCleanAnim] = useState(""); + const [DataCleanItem, setDataCleanItem] = useState({}); + const [isPresentClean, setIsPresentClean] = useState(0); + + const [InputChange, setInputChange] = useState([]); + + const [SelectedImg, setSelectedImg] = useState(''); + const [showModal, setShowModal] = useState(false); + const [reCapImgModalObj, setReCapImgModalObj] = useState({}); + const [showImageSaveOp, setShowImageSaveOp] = useState(true); + const [ImgMadCount, setImgMadCount] = useState({img1:0,img2:0}); + const [AppStatus, setAppStatus] = useState(AppState.currentState); + const [QRqtnData, setQRqtnData] = useState({}); + //for Partial save + const [FilteredPromoValues,setFilteredPromoValues]= useState([]); + const [ShowCatWise,setShowCatWise]= useState(false); + const [CatData,setCatData]= useState(false); + const [ColId, setColId] = useState(""); + const [ColName, setColName] = useState(""); + + const hasUnsavedChangesRef = React.useRef(hasUnsavedChanges); + const WindowDataRef=React.useRef(WindowData); + const StoreIdRef=React.useRef(null); + const ScreenNameRef=React.useRef({}); + const PSGroupData=React.useRef(''); // Grouping data (Category/ SubCategory/ Brand ) for BG save fuunctionality with Partial Save Scenario + const BGPSAllow=React.useRef(false); + + // error field states + const [errorfield, setErrorField] = useState({}); + const [error, setError] = useState(false); + + + // ****************************************************************** + const [header_list, setHeader_list] = useState([]); + // const WindowDataRef=React.useRef(header_list); + + + + const inputRefs = useRef({}); + + const d1=new Date(); + const d2=moment(d1).format('MM/DD/YYYY'); + + + useEffect(() => { + setLoaderTitle(ST.Loading+'...') + let params=props.route.params? props.route.params:{}; + let storeData1=params.storeData || {}; + let menu1=params.menu || {}; + let ShowCatWise1=params.ShowCatWise!=null?params.ShowCatWise:false; + let CatData1=params.CatData!=null?params.CatData:{}; + let isAdhoc=params.isAdhoc || false; + + + setIsAdhocScreen(isAdhoc); + setShowCatWise(ShowCatWise1); + setCatData(CatData1); + setStoreData(storeData1); + setCurrentMenu(menu1); + + let cameraAllow=storeData1.CameraAllow=='true' || storeData1.CameraAllow==1?true:false; + setStoreCameraAllow(cameraAllow); + + StoreIdRef.current=storeData1.StoreId + ScreenNameRef.current={BgscreenName:menu1.ScreenName,BgMenuId:menu1.MenuId } + + + getData(storeData1,menu1,CatData1,ShowCatWise1); + + const AppStateSubscription = AppState.addEventListener('change', (pro)=>{ _handleAppStateChange(pro)}); + const unsubscribe=props.navigation.addListener('beforeRemove', onBeforeRemove); + + return function cleanup() { + AppStateSubscription.remove(); + // AppState.removeEventListener('change', (pro)=>{ _handleAppStateChange(WindowData,pro)}); + return unsubscribe; + }; + }, []); + + + + const _handleAppStateChange = async (nextAppState) => { + + if(nextAppState =='background' && hasUnsavedChangesRef.current==true){ + + let newData = { + storeBGData:WindowDataRef.current, + menuName:ScreenNameRef.current && ScreenNameRef.current.BgscreenName, + StoreId1:StoreIdRef.current, + BgMenuID: ScreenNameRef.current && ScreenNameRef.current.BgMenuId, + visiteDate:d2, + BGPSAllow:BGPSAllow.current, + PSGroupData:PSGroupData.current, + } + let WindowsStr= JSON.stringify(newData) + + await set_item('storeData',WindowsStr); + } + } + + + + useEffect(() => { + const unsubscribe=props.navigation.addListener('beforeRemove', onBeforeRemove); + return unsubscribe; + }, [hasUnsavedChanges]); + + + useEffect(() => { + const unsubscribe=props.navigation.addListener('beforeRemove', onBeforeRemove); + return unsubscribe; + }, [showCamera]); + + useEffect(() => { + const unsubscribe=props.navigation.addListener('beforeRemove', onBeforeRemove); + return unsubscribe; + }, [showQRCamera]); + + useEffect(() => { + const unsubscribe=props.navigation.addListener('beforeRemove', onBeforeRemove); + return unsubscribe; + }, [show_zoomImage]); + + function onBeforeRemove(e){ + + if(showCamera==true || showQRCamera==true ){ + e.preventDefault(); + setShowCamera(false); + setShowQRCamera(false) + } + else if(Show_zoomImageRef.current==true){ + e.preventDefault(); + UpdateShow_zoomImageRef(false); + } + else{ + if (hasUnsavedChanges==true) { + e.preventDefault(); // Prevent default behavior of leaving the screen + onRemoveScreen(e); + } + else{ + return; + } + } + } + + function BgUnsavedChanges(val){ + hasUnsavedChangesRef.current=val + setHasUnsavedChanges(val); + } + + function BgWindowData(val){ + WindowDataRef.current=val + setWindowData(val); + } + + function UpdateShow_zoomImageRef(val){ + Show_zoomImageRef.current=val + setShow_zoomImage(val); + } + + function onRemoveScreen(e){ + Alert.alert( + "", + ST.Doyoureallywanttoexitthescreen, + [ + { + text: ST.Cancel, + onPress: () => {}, + style: "cancel" + }, + { text: ST.OK, onPress: async () => { + // setHasUnsavedChanges(false); + BgUnsavedChanges(false) + await clear_item('storeData') + props.navigation.dispatch(e.data.action);} } + ] + ); + } + + + function _OpenCaptureImage_Modal(img){ + + const isImageCap=(img!='' || img!=null)?true:false; + let {window,splitItem,splitItemIndex,type,cameraType,qtn}=reCapImgModalObj + let camera2Label=(window && window.PromoImage2Lable) || ''; + return ( + + { + isImageCap && + + + + + + {openCamera(window,splitItem,splitItemIndex,type,cameraType,qtn)}}> + + + + {!showImageSaveOp && + {cancelImage(false)}}> + + {ST.Close} + + } + + } + + ) + } + + + async function getData(storeData1,menu1,CatData1={},ShowCatWise1=false){ + try { + let {StoreId,ChainId,StateId,StoreTypeId}=storeData1; + let AllKPIFields=await getKPIFields(menu1); + setKPIFields(AllKPIFields); + + // set switch camera flag as defined in mapping menu flag (if exists) + let SwitchingCameraI=AllKPIFields.findIndex(i=>i.KPIFieldName=='SwitchingCamera'); + let SwitchingCameraObj=SwitchingCameraI>=0?AllKPIFields[SwitchingCameraI]:{}; + let SwitchingCamera=SwitchingCameraI>=0?SwitchingCameraObj['KPIFieldEnable']:false; + setShowSwitchCamera(SwitchingCamera); + + let inputChangeFlag=[],storeBGData1=[],bgStoreJson={},isBgDataExists=false; + + //storeBGData check + let windData = await get_item('storeData') + if(windData!=null && windData!=''){ + let StoreJson = JSON.parse(windData) + let { storeBGData,menuName,StoreId1,BgMenuID,visiteDate }= StoreJson + if(storeBGData.length>0 && menuName == menu1.ScreenName && StoreId1== StoreId && menu1.MenuId==BgMenuID && visiteDate==d2){ + isBgDataExists=true; + storeBGData1=storeBGData; + bgStoreJson=StoreJson + WindowDataRef.current=storeBGData + setWindowData(storeBGData); + BgUnsavedChanges(true) + } + } + + + + await db.transaction(async function (txn) { + + + // ****************************************************************************************** + + let q4=`SELECT * FROM Mapping_StoreTargetBased WHERE MenuId='${menu1.MenuId}' AND StoreId='${StoreId}'`; + + await txn.executeSql(q4,[],async function (txn2, txnres2) { + if(txnres2.rows.length>0){ + let arr=[],allWindowsData=[]; + for(var i=0;i{ + + db.transaction(async function (txn) { + var q='',selectlist='',join='',join2=''; + + + //get data from masters with saved data if any + + selectlist=` DISTINCT wq.TgQuestionId,wq.TgQuestionCode,wq.TgQuestionName,wq.QuestionType,wq.TgqShowCamera1,wq.TgqShowCamera2,wq.TgqShowCamera1Grid,wq.TgqShowCamera2Grid,wq.TgqCamera1Mandatory,wq.TgqCamera2Mandatory,wq.TgqLengthValidationRequired,wq.TgqMinimumChar,wq.TgqMaximumChar,wq.TgqDecimalPoint,wq.TgqDateRangeMin,wq.TgqDateRangeMax,wq.TgqVoiceLengthInMinutes,wq.TgqDefaultQuestionEnable,(CASE WHEN q.TQQUESTIONID is not null THEN 1 ELSE 0 END) isInserted,q.TQA_QUESTION_DISABLE,q.ANSWER as Answer,q.ANSWER_ID as AnswerId,q.MULTI_OPTIONS_IDS as multi_op_ids,q.IMAGE_ALLOW1 as TgaShowCamera1,q.IMAGE_ALLOW2 as TgaShowCamera2,q.IMAGE1 as Image1,q.IMAGE2 as Image2 `; + join2=` Left Outer Join ${AppTables.VISICO_CHILD_DATA} q on wq.TgQuestionId=q.TQQUESTIONID and q.STORE_ID='${storeData1.StoreId}' and q.TARGETTYPEID='${window.TargetTypeId}' and q.VISIT_DATE='${d2}'`; + join=` inner join Mapping_TargetBasedQuestion mq on mq.TgQuestionId=wq.TgQuestionId `; + q=`select ${selectlist} from Master_TargetBasedQuestion wq ${join} ${join2} order by wq.TgQuestionSequence `; + + + await txn.executeSql(q,[],async function (txn2, txnres2) { + if(txnres2.rows.length>0){ + let arr=[],allWindowsData=[]; + // let wqa_obj={}; + for(var i=0;i0){ + for(var k=0;k=0)){ + showImageTag1=true; + } + + if(data.QuestionType=='Single choice list' && (isandImgAl2 && ansss.AnswerId==selansid)){ + showImageTag2=true; + } + else if(data.QuestionType=='Multi choice list' && (isandImgAl2 && selansid.indexOf(ansss.AnswerId)>=0)){ + showImageTag2=true; + } + } + } + } + + + if(showImageTag1 && data.Image1!=null && data.Image1!="" ){ + let imgPath=(Platform.OS=='ios'?'file://':'')+ImageFolderPath+menu1.ScreenName+"/"+data.Image1; + wqa_obj[imgname_key1]=data.Image1; + wqa_obj[img_key1]=imgPath; + wqa_obj["TgaShowCamera1"]=showImageTag1 + } + + + if(showImageTag2 && data.Image2!=null && data.Image2!="" ){ + let imgPath=(Platform.OS=='ios'?'file://':'')+ImageFolderPath+menu1.ScreenName+"/"+data.Image2; + wqa_obj[imgname_key2]=data.Image2; + wqa_obj[img_key2]=imgPath; + wqa_obj["TgaShowCamera2"]=showImageTag2 + } + + + if(data.QuestionType=='Date' && data.Answer!=null){ + let dayonly=moment().format('DD'); + let actual_date=data.Answer?data.Answer.split('/'):[]; + let month=actual_date[0],year=actual_date[1]; + let fulldate=month+'/'+dayonly+'/'+year; + wqa_obj[date_key]=fulldate; + + } + + arr.push(data); + + let windowDataObj={'TargetTypeId':data.TargetTypeId,'TgQA':wqa_obj,'TgQuestionId':data.TgQuestionId , 'TargetId' : data.TargetId}; + allWindowsData.push(windowDataObj); + + if(i==txnres2.rows.length-1){ + obj['TgQuestions']=arr; + obj['TgQA']=wqa_obj; + obj["allWindowsData"]=allWindowsData + resolve(obj) + } + } + } + else{ + resolve(obj) + } + },function (txnE,txnerr) { console.log(txnerr); resolve(obj) },); + }); + }).then((val)=>{ + return val + }).catch((err)=>{ + console.log(err); + return obj; + }); + } + + + async function getAnswers(qtn){ + + return new Promise((resolve,reject)=>{ + + db.transaction(async function (txn) { + var q='',selectlist=''; + selectlist=` DISTINCT TgAnswerId as AnswerId,TgAnswerName as Answer,TgaShowCamera1,TgaShowCamera2,TgaCamera1Mandatory,TgaCamera2Mandatory,TgaQuestionEnable,TgaQuestionDisable `; + q=`select ${selectlist} from Master_TargetBasedQuestion where TgQuestionId='${qtn.TgQuestionId}' order by TgaSequence `; + + await txn.executeSql(q,[],async function (txn2, txnres2) { + if(txnres2.rows.length>0){ + let arr=[]; + for(var i=0;i{ + return val + }).catch((err)=>{ + console.log(err); + return []; + }); + } + + // ************************************************************************** + + + async function focusToNext(WindowStocks,windowIndex,stockProd,index) + { + console.log('focusToNext is call'); + console.log('WindowStocks',index+1) + + if(index==WindowStocks.length-1){ + return; + } + + try{ + // inputRefs.current['input1_'+data.VisibilityDefinitionId+"_"+data.VisibilityStockDefinitionId]=''; + // use (index+1) instead of WindowStocks[index+1].VisibilityStockDefinitionId as the condition does not work in case of isSpecificMappingEnable is true ( because all VisibilityStockDefinitionId are 0) + console.log('next 1 call','input1_'+WindowStocks[index+1].VisibilityDefinitionId+'_'+(index+1)) + let refIn2=inputRefs.current['input1_'+WindowStocks[index+1].VisibilityDefinitionId+'_'+(index+1)]; + // let refIn2=inputRefs.current['input1_'+stockProd.WindowDefinitionId+'_'+stockProd.WindowStockDefinitionId]; + + if(refIn2!=null){ + refIn2.focus(); + } + } + catch(err){ + console.log(err); + } + } + + + async function getImage(imgdata){ + let type=getImageProps.type || ''; + let window=getImageProps.window || {}; + let splitItem=getImageProps.splitItem || {}; + let splitItemIndex=getImageProps.splitItemIndex || 0; + let qtn=getImageProps.qtn || {}; + let cameraType=getImageProps.cameraType!=null?getImageProps.cameraType:'1'; + + if(typeof imgdata=='object' && imgdata.errorCode=='camera_unavailable'){ + notify(ST.Cameraunavailable); + } + else if(typeof imgdata =='object' && imgdata.uri!=null){ + const img=imgdata; + const imgurl=img.uri, imgWidth=img.width, imgHeight=img.ExtendedHeight; + + let isImgFromGallery=img.fromGallery!=null?img.fromGallery:false; + let picture_clickedd=isImgFromGallery==true?img.datetime:new Date(); + + let picture_clicked_time=moment(picture_clickedd).format('MM-DD-YYYY HH:mm:ss') + let picture_clicked_time_for_pic_name=moment(picture_clickedd).format('MMDDYYYY_HHmmss') + + console.log("time", picture_clicked_time); + console.log("time1", picture_clicked_time_for_pic_name); + let calculate_tym_date_for_filename = picture_clicked_time_for_pic_name; + let calculate_tym_date_over_img = picture_clicked_time; + + let filename=storeData.StoreId+'_'+qtn.TargetTypeId+'_'+qtn.TargetId+'_'+qtn.TgQuestionId+'_'+(props.UserId || '')+'_STImg-'+calculate_tym_date_for_filename+'.jpg'; + + let allData=WindowData; + let defData={'TgQuestionId':qtn.TgQuestionId,'TargetTypeId':qtn.TargetTypeId , 'TargetId':qtn.TargetId }; + + const wind_index=allData.findIndex(i=>i.TgQuestionId==qtn.TgQuestionId && i.TargetTypeId==qtn.TargetTypeId && i.TargetId==qtn.TargetId) ; + let wind=wind_index>=0?allData[wind_index]:defData; + + let extraLabel=''; + if(cameraType=='2'){ + var QD=wind.TgQA || {}; + var image_key=qtn.TgQuestionId+(type=='1'?`_ImageName1`:`_ImageName2`); + var image_key_path=qtn.TgQuestionId+(type=='1'?`_ImagePath1`:`_ImagePath2`); + QD[image_key]=filename; + extraLabel='Qtn Id: '+qtn.TgQuestionId; + } + else if(cameraType=='3'){ + var image_key='NAImage1'; + var image_key_path='NAImage1Path'; + wind[image_key]=filename; + extraLabel='Not Exist'; + } + else{ + var WindowSplits=wind.WindowSplits || []; + var image_key=type=='1'?'Image1Name':'Image2Name'; + var image_key_path=type=='1'?'Image1':'Image2'; + splitItem[image_key]=filename; + } + + const mark_text1=calculate_tym_date_over_img; + const mark_text2='Store Name:'+storeData.StoreName+' | Store Id:'+storeData.StoreId+' | User Id:'+storeData.EmpId+' | TargetType Id:'+qtn.TargetTypeId+(extraLabel!=''?' ('+extraLabel+')':'')+' | Image Type: '+currentMenu.MenuName+' | Date:'+calculate_tym_date_over_img; + + let imagePath=`${ImageFolderPath+currentMenu.ScreenName}/${filename}`; + RNFS.copyFile(imgurl, imagePath) + .then(async(resn) => { + // render data with clicked image + let uri='file://'+imagePath; + if(cameraType=='2'){ + QD[image_key_path]=uri; + wind.TgQA=QD; + + wind_index>=0?allData[wind_index]=wind:allData.push(wind); + WindowDataRef.current=allData + setWindowData(allData); + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata3(!rerenderdata3); + } + else if(cameraType=='3'){ + wind[image_key_path]=uri; + wind_index>=0?allData[wind_index]=wind:allData.push(wind); + WindowDataRef.current=allData + setWindowData(allData); + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + else{ + splitItem[image_key_path]=uri; + splitItemIndex>=0?WindowSplits[splitItemIndex]=splitItem:WindowSplits.push(splitItem); + wind.WindowSplits=WindowSplits; + wind_index>=0?allData[wind_index]=wind:allData.push(wind); + WindowDataRef.current=allData + setWindowData(allData); + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata2(!rerenderdata2); + } + setSelectedImg(uri) + + // add metdata then resize image and restored back to the imagePath + let restore_data={"destFilePath":imagePath,"imgurl":imgurl,imgWidth,imgHeight,mark_text1,mark_text2} + let is_restored=await restore_ImageWithMetaData(restore_data,imgdata); + console.log("image restored:",is_restored); + }) + .catch(err => { + console.log('ERROR: image file write failed!!!'); + console.log(err.message, err.code); + }); + + } + + } + + + async function onQRScanned(imgdata){ + let qtn=QRqtnData.qtn || {}; + let window=QRqtnData.window || {}; + let QR_withValidChars=imgdata!=null && imgdata!=''?imgdata.replace(/["']/g,''):''; + let value=QR_withValidChars;//imgdata && imgdata[0] && imgdata[0].displayValue ? imgdata[0].displayValue :"" + setTextValue(value,qtn,window) + } + + + function showQtnDatePicker(qtn,window,show=false){ + let allQtns=window.WindowQuestions || []; + let newqtnIndex=allQtns.findIndex(q=>q.TgQuestionId==qtn.TgQuestionId); + + if(newqtnIndex>=0){ + let newqtn=allQtns[newqtnIndex]; + newqtn.showDatePicker=show; + allQtns[newqtnIndex]=newqtn; + window['TgQuestions']=allQtns; + let allWindows=Windows; + const winIndex=allWindows.findIndex(i=>i.TgQuestionId==window.TgQuestionId) || {}; + allWindows[winIndex]=window; + setWindows(allWindows); + setGlobalWindows(allWindows); + if(show==true) setrerenderdata(!rerenderdata); + } + } + + async function openCamera(window,splitItem,splitItemIndex,type='1',cameraType='1',qtn={}){ + setErrorField({}); + setError(false); + let GridAllow=false; + if(type=='1'){ + GridAllow = cameraType=='2' ?( type==='1' ? (qtn.TgqShowCamera1Grid === 'true' || qtn.TgqShowCamera1Grid==true): true):false + }else{ + GridAllow = cameraType=='2' ?( type==='2' ? (qtn.TgqShowCamera2Grid === 'true' || qtn.TgqShowCamera2Grid==true): true):false + } + setGridValue(GridAllow); + setGetImageProps({'window':window,'splitItem':splitItem,'splitItemIndex':splitItemIndex,'type':type,'cameraType':cameraType,'qtn':qtn}); + setShowCamera(true); + // props.navigation.navigate('CameraScreen',{'getImage':getImage,'cameraType':'back'}) + } + + async function onSubmitData(){ + + let isvalid=await validate(); + + if(isvalid){ + Keyboard.dismiss(); + setShowAlert(true); + } + } + + async function saveData(){ + // setHasUnsavedChanges(false); + BgUnsavedChanges(false) + setShowAlert(false); + setLoaderTitle(ST.SavingData+'...'); + setProcessing(true); + let d1n=new Date(); + let d3=moment(d1n).format('MM/DD/YYYY'); + try { + let {StoreId,ChainId,StateId,StoreTypeId}=storeData; + + + // remove old data + let isDeleted = await removePreviousData(); + console.log("isDeleted:",isDeleted); + + await db.transaction(async function (txn) { + + // add data + var values='',childV='',imageV='',stockV=''; + + for (const wi in header_list){ + const window=header_list[wi]; + let TgQuestions=window.TgQuestions || []; + + let VISICO_HEADER_ID='VISICOOL'+wi+(Math.floor(Math.random()*1000)+1); + let {TargetId,TargetTypeId,MenuId,TargetTypeName,ChildName}=window; + + + values+=values!=''?' , ':''; + values+=` ('${VISICO_HEADER_ID}','${MenuId}','${StoreId}','${d3}','${TargetId}','${TargetTypeName}','${TargetTypeId}','${ChildName}','1','1','${d3}') `; + + + for(const qtnIndex in TgQuestions){ + const qtn=TgQuestions[qtnIndex]; + + let selansid='',selanswer='',selimg='',showImageTag1=false,showImageTag2=false; + let id_key=qtn.TgQuestionId+'_AnswerId'; + let ans_key=qtn.TgQuestionId+'_Answer'; + let multi_key=qtn.TgQuestionId+'_MultiOption'; + let date_key=qtn.TgQuestionId+'_Date'; + let img_key=qtn.TgQuestionId+'_ImagePath1'; + let img_key2=qtn.TgQuestionId+'_ImagePath2'; + let imgname_key1=qtn.TgQuestionId+'_ImageName1'; + let imgname_key2=qtn.TgQuestionId+'_ImageName2'; + + let rating_key=qtn.TgQuestionId+'_Rating'; + let list_mcdata=[]; + let isDisabled=qtn.isDisabled || false; + + const wind = Object.keys(WindowData).length > 0 ? WindowData.find(i => i.TgQuestionId == qtn.TgQuestionId && i.TargetTypeId == qtn.TargetTypeId && i.TargetId==qtn.TargetId) : {}; + let QD=(wind && wind.TgQA) || {}; + + let {TgQuestionId,TgQuestionCode,QuestionType,TgqShowCamera1,TgqShowCamera2}=qtn + let answer=QD[ans_key] || ''; + let answerId=QD[id_key]===0? 0 :(QD[id_key]|| ''); + let multi_options_ids=QD[multi_key] || ''; + + + if(qtn.QuestionType=='Number' || qtn.QuestionType=='Text' || qtn.QuestionType=='Decimal' || qtn.QuestionType=='Date' || qtn.QuestionType=='TextSpc') + { + showImageTag1=(qtn.TgqShowCamera1==1 || qtn.TgqShowCamera1=='true'); + showImageTag2=(qtn.TgqShowCamera2==1 || qtn.TgqShowCamera2=='true'); + } + else if((qtn.QuestionType=='Single choice list' || qtn.QuestionType=='Multi choice list' )){ + if (qtn.Answers && qtn.Answers.length>0){ + for(var i=0;i=0)){ + showImageTag1=true; + } + + if(qtn.QuestionType=='Single choice list' && (isandImgAl2 && ansss.AnswerId==answerId)){ + showImageTag2=true; + } + else if(qtn.QuestionType=='Multi choice list' && (isandImgAl2 && answerId.indexOf(ansss.AnswerId)>=0)){ + showImageTag2=true; + } + + } + } + } + + let Image1=(showImageTag1==1 || showImageTag1==true) && QD[imgname_key1]!=null?QD[imgname_key1]:''; + let Image2=(showImageTag2==1 || showImageTag2==true) && QD[imgname_key2]!=null?QD[imgname_key2]:''; + + childV+=childV!=''?' , ':''; + childV+=` ('${VISICO_HEADER_ID}','${StoreId}','${MenuId}','${d3}','${TargetTypeId}','${TgQuestionId}','${TgQuestionCode}','${QuestionType}','${answer}','${answerId||0}','${multi_options_ids}','${Image1}','${Image2}','${showImageTag1}','${showImageTag2}','${isDisabled}','${d3}') `; + } + } + + + let add_hdr_data=`INSERT INTO ${AppTables.VISICO_HDR_DATA} (VISICO_HEADER_ID ,MENU_ID ,STORE_ID ,VISIT_DATE ,TARGETID,TARGETTYPENAME ,TARGETTYPEID ,CHILD_NAME ,IS_PRESENT ,IS_UPDATED ,ADDED_DATE) VALUES ${values} `; + let add_child_data=`INSERT INTO ${AppTables.VISICO_CHILD_DATA} (VISICO_HEADER_ID ,STORE_ID ,MENU_ID ,VISIT_DATE ,TARGETTYPEID ,TQQUESTIONID ,TQQUESTIONID_CODE ,QUESTION_TYPE ,ANSWER ,ANSWER_ID ,MULTI_OPTIONS_IDS ,IMAGE1 ,IMAGE2,IMAGE_ALLOW1,IMAGE_ALLOW2,TQA_QUESTION_DISABLE ,ADDED_DATE) VALUES ${childV} `; + + // setProcessing(false) + + await txn.executeSql(add_hdr_data,[],async function (txn2, txnres) { + var isChildAdded=true; + + if(childV!=''){ + isChildAdded=await executeQuery(add_child_data); + } + + if(!isChildAdded){ + setProcessing(false);notify('Cannot add visicooler questions data'); + } + else{ + // clear store data in local storage to avoiding re-set data for the store + clear_item('storeData') + setProcessing(false);notify('Visicooler updated successfully'); + props.navigation.goBack(); + } + + + },function (txnE,txnerr) { console.log(txnerr);setProcessing(false);notify('Cannot add visicooler data'); },); + }); + } catch (err) { + console.log(err); + } + } + + async function removePreviousData(){ + let {StoreId,ChainId,StateId,StoreTypeId}=storeData; + + let {PSAllow}=currentMenu + let deleteOnlyCatData=ShowCatWise && PSAllow && FilteredPromoValues.length>0; + + + return new Promise((resolve,reject)=>{ + + db.transaction(async function (txn) { + + let sq=`Select * FROM ${AppTables.VISICO_HDR_DATA} WHERE STORE_ID='${StoreId}' and MENU_ID='${currentMenu.MenuId}' and VISIT_DATE='${d2}' `; + + await txn.executeSql(sq,[],async function (txn2, txnres) { + if(txnres.rows.length>0){ + let arr=[]; + let isHdrDel=false,isQtnsDel=false,isImagesDel=false,isStockDel=false; + for(let i=0;i{ + return val; + }).catch((err)=>{ + console.log('error:',err); + return false; + }) + } + + async function executeQuery(q){ + return new Promise((resolve,reject)=>{ + db.transaction(async function (txn) { + await txn.executeSql(q,[],async function (txn2, txnres2) { + resolve(true); + },function(Etxn,txnerr){console.log(txnerr);resolve(false) }); + }); + }).then((val)=>{ + return val; + }).catch((err)=>{ + console.log(err); + return false; + }) + } + + async function validate(){ + let isValid=true; + + function showError(obj,isErr){ + setErrorField(obj); + setError(isErr); + } + + return new Promise((resolve,reject)=>{ + for (const wi in header_list){ + const window=header_list[wi]; + let TgQuestions=window.TgQuestions || []; + let errorobj = {'EF_Window':window}; + + if(TgQuestions.length>0){ + for(const qtnIndex in TgQuestions){ + const qtn=TgQuestions[qtnIndex]; + + let selansid='',selanswer='',selimg1='',selimg2='',selimg3='',selimg4='',showImageTag1=false,showImageTag2=false,showImageTag3=false,showImageTag4=false; + let id_key=qtn.TgQuestionId+'_AnswerId'; + let ans_key=qtn.TgQuestionId+'_Answer'; + let multi_key=qtn.TgQuestionId+'_MultiOption'; + let date_key=qtn.TgQuestionId+'_Date'; + let img_key1=qtn.TgQuestionId+'_ImagePath1'; + let img_key2=qtn.TgQuestionId+'_ImagePath2'; + // let img_key3=qtn.TgQuestionId+'_ImagePath3'; + // let img_key4=qtn.TgQuestionId+'_ImagePath4'; + let imgname_key=qtn.TgQuestionId+'_ImageName1'; + let rating_key=qtn.TgQuestionId+'_Rating'; + + let isDisabled=qtn.isDisabled; + + + const wind=Object.keys(WindowData).length>0 ? WindowData.find(i=>i.TgQuestionId==qtn.TgQuestionId && i.TargetTypeId==qtn.TargetTypeId ):{}; + let QD=(wind && wind.TgQA) || {}; + + + let list_mcdata=[]; + errorobj['EF_qtn']=qtn; + + let isImgAllowed=(qtn.TgqShowCamera=='true' || qtn.TgqShowCamera==1); + + + let isImgAllowed1=(qtn.TgqShowCamera1==1 || qtn.TgqShowCamera1=='true')? true:false; + let isImgAllowed2=(qtn.TgqShowCamera2==1 || qtn.TgqShowCamera2=='true')? true:false; + let checkForAnsKey=(qtn.QuestionType=='Decimal' || qtn.QuestionType=='Number' || qtn.QuestionType=='Text' || qtn.QuestionType=='Date' || qtn.QuestionType=='Rating' || qtn.QuestionType=='QR' || qtn.QuestionType=='TextSpc') ; + + + if(qtn.QuestionType=='Single choice list') + { + console.log("Single choice----",id_key,QD[id_key],qtn,"----",QD) + selansid=QD[id_key]; + } + else if(qtn.QuestionType=='Multi choice list') + { + selansid=QD[multi_key]!=null && QD[multi_key]!=''?QD[multi_key].split(','):[]; + } + + if(!isDisabled){ + + if(qtn.QuestionType=='Multi choice list' && selansid.length<=0){ + errorobj['EF_Qtn_MultiChoice']='Qtn_MultiChoice'; + showError(errorobj,true); + notify(`${Pleaseselectoptionsfortherequiredfield} ${ST.In} ${qtn.TgQuestionName}`,'SHORT'); + resolve(false);return; + } + else if( checkForAnsKey && (Object.keys(QD).indexOf(ans_key)<0 || (Object.keys(QD).indexOf(ans_key)>=0 && QD[ans_key]===''))){ + errorobj['EF_Qtn_Date']='Qtn_Date'; + showError(errorobj,true); + let msg=( qtn.QuestionType=='Date'?`${ST.Pleasepickadatefortherequiredfield} ${ST.In} ${qtn.TgQuestionName}`:(qtn.QuestionType=='Rating'?`${Pleaseselectratingfortherequiredfield} ${ST.In} ${qtn.TgQuestionName}`:`${ST.Pleasefillalltherequiredfield} ${ST.In} ${qtn.TgQuestionName}`)); + notify(msg,'SHORT'); + resolve(false);return; + } + else if(Object.keys(QD).indexOf(id_key)<0 || (Object.keys(QD).indexOf(id_key)>=0 && (QD[id_key]===''))){ + errorobj['EF_Qtn_Input']='Qtn_Input'; + showError(errorobj,true); + notify(`${ST.Pleasefillalltherequiredfield} ${ST.In} ${qtn.TgQuestionName}`,'SHORT'); + resolve(false);return; + } + else if(isImgAllowed1 && (Object.keys(QD).indexOf(img_key1)<0 || (Object.keys(QD).indexOf(img_key1)>=0 && QD[img_key1]===''))){ + errorobj['EF_Qtn_Image']='Qtn_Image'; + showError(errorobj,true); + notify(`${ST.Pleaseaddimages} ${ST.In} ${qtn.TgQuestionName}`,'SHORT'); + resolve(false);return; + }else if(isImgAllowed2 && (Object.keys(QD).indexOf(img_key2)<0 || (Object.keys(QD).indexOf(img_key2)>=0 && QD[img_key2]===''))){ + errorobj['EF_Qtn_Image']='Qtn_Image'; + showError(errorobj,true); + notify(`${ST.Pleaseaddimages} ${ST.In} ${window.TgQuestionName}`,'SHORT'); + resolve(false);return; + } + else{ + console.log('no condition found'); + } + + if((qtn.QuestionType=='Single choice list' || qtn.QuestionType=='Multi choice list' )){ + if (qtn.Answers && qtn.Answers.length>0){ + for(var j=0;j=0)){ + showImageTag1=true; + } + + if(qtn.QuestionType=='Single choice list' && (isandImgAl2 && ansss.AnswerId==selansid)){ + showImageTag2=true; + } + else if(qtn.QuestionType=='Multi choice list' && (isandImgAl2 && selansid.indexOf(ansss.AnswerId)>=0)){ + showImageTag2=true; + } + } + } + } + + + if(showImageTag1 && (Object.keys(QD).indexOf(img_key1)<0 || (Object.keys(QD).indexOf(img_key1)>=0 && QD[img_key1]===''))){ + + errorobj['EF_Qtn_Image']='Qtn_Image'; + showError(errorobj,true); + notify(`${ST.Pleaseaddimages} ${ST.In} ${qtn.TgQuestionName}`,'SHORT'); + resolve(false);return; + } + if(showImageTag2 && (Object.keys(QD).indexOf(img_key2)<0 || (Object.keys(QD).indexOf(img_key2)>=0 && QD[img_key2]===''))){ + errorobj['EF_Qtn_Image2']='Qtn_Image2'; + showError(errorobj,true); + notify(`${ST.Pleaseaddimages} ${ST.In} ${qtn.TgQuestionName}`,'SHORT'); + resolve(false);return; + } + + } + + } + } + + + if(wi==(header_list.length-1)){ + resolve(true);return; + } + + } + + }).then((val)=>{ + return val + }) + .catch((err)=>{console.log(err); return false}); + + } + + + + async function onselectionChange(option,qtn,window){ + setErrorField({}); + setError(false); + let allData=WindowData; + + let defData={'TgQuestionId':qtn.TgQuestionId,'TargetTypeId':qtn.TargetTypeId , 'TargetId':qtn.TargetId}; + + // return + const wind_index=allData.findIndex(i=>((i.TgQuestionId==qtn.TgQuestionId) && (i.TargetTypeId==qtn.TargetTypeId) && (i.TargetId==qtn.TargetId) )); + let wind=wind_index>=0?allData[wind_index]:defData; + + + let data=wind.TgQA || {}; + let data2={...wind?.TgQA} || {}; + let id_key=qtn.TgQuestionId+'_AnswerId'; + let ans_key=qtn.TgQuestionId+'_Answer'; + data2[id_key]=option.value; + data2[ans_key]=option.label; + data2["TgaShowCamera1"]=option.TgaShowCamera1 + data2["TgaShowCamera2"]=option.TgaShowCamera2 + + + wind['TgQA']={...data2}; + wind_index>=0?(allData[wind_index]=wind):allData.push(wind); + let objIndex = InputChange.findIndex(i=>i.TgQuestionId==window.TgQuestionId ); + let winArr=[...InputChange] + winArr[objIndex].Flag=true + + setInputChange(winArr) + WindowDataRef.current=allData + setWindowData(allData); + + let aq_ans=qtn.Answers!=null?qtn.Answers:[]; + let ans_obj=aq_ans.find(i=>i.AnswerId==option.value) || {}; + let EQtns=ans_obj.TgaQuestionEnable!=null && ans_obj.TgaQuestionEnable!=''?ans_obj.TgaQuestionEnable.replace(' ','').split(','):[]; + let DQtns=ans_obj.TgaQuestionDisable!=null && ans_obj.TgaQuestionDisable!=''?ans_obj.TgaQuestionDisable.replace(' ','').split(','):[]; + + let sqtns=window.TgQuestions || [] + + if(EQtns.length>0){ + await enableQtns(sqtns,EQtns,DQtns,data,wind,wind_index,allData,window) + setrerenderdata(!rerenderdata); + } + else if(DQtns.length>0){ + await disableQtns(sqtns,DQtns,data,wind,wind_index,allData,window) + setrerenderdata(!rerenderdata); + } + else{ + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + BgUnsavedChanges(true) + + } + + async function disableQtns(sqtns,DQtns,data,wind={},wind_index=-1,allData=[],window={}){ + + if(DQtns.length>0){ + await Promise.all( + DQtns.map((qid,q_index)=>{ + let s_qtnindex=sqtns.findIndex(i=>i.TgQuestionId==qid) || {}; + let s_qtn=sqtns[s_qtnindex]; + if(s_qtn!=null){ + s_qtn['isDisabled']=true + sqtns[s_qtnindex]=s_qtn; + let id_key=s_qtn.TgQuestionId+'_AnswerId'; + let ans_key=s_qtn.TgQuestionId+'_Answer'; + // data[id_key]=0; + // data[ans_key]=''; + + // wind['TgQA']=data; + wind_index>=0?allData[wind_index]=wind:allData.push(wind); + return false + }else{ + return false + } + }) + ).then(async (val)=>{ + + let allwindows=Windows; + let windowIndex=allwindows.findIndex(i=>i.TgQuestionId==window.TgQuestionId ); + if(windowIndex>=0){ + window['WindowQuestions']=sqtns; + allwindows[windowIndex]=window; + WindowDataRef.current=allData + setWindowData(allData); + setWindows(allwindows); + setGlobalWindows(allwindows); + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + + }) + } + } + + async function enableQtns(sqtns,EQtns,DQtns,data,wind={},wind_index=-1,allData=[],window={}){ + await Promise.all( + EQtns.map((qid,q_index)=>{ + let s_qtnindex=sqtns.findIndex(i=>i.TgQuestionId==qid) || {}; + let s_qtn=sqtns[s_qtnindex]; + if(s_qtn!=null){ + s_qtn['isDisabled']=false + sqtns[s_qtnindex]=s_qtn; + return false + } + else{ + return false + } + }) + ).then(async (val)=>{ + if(DQtns.length>0){ + await disableQtns(sqtns,DQtns,data,wind,wind_index,allData,window) + } + else{ + let allwindows=Windows; + + let windowIndex=allwindows.findIndex(i=>i.TgQuestionId==window.TgQuestionId) + if(windowIndex>0){ + window['TgQuestions']=sqtns; + allwindows[windowIndex]=window; + setWindows(allwindows); + setGlobalWindows(allwindows); + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + } + }) + } + + async function setMultiSelectValue(selectedItems=[],qtn={},window={}) { + setErrorField({}); + setError(false); + + let id_key=qtn.TgQuestionId+'_AnswerId'; + let ans_key=qtn.TgQuestionId+'_Answer'; + let multi_key=qtn.TgQuestionId+'_MultiOption'; + + let allData=WindowData; + let defData={'TgQuestionId':window.TgQuestionId}; + const wind_index=allData.findIndex(i=>i.TgQuestionId==window.TgQuestionId); + let wind=wind_index>=0?allData[wind_index]:defData; + let obj=wind.TgQA || {}; + obj[id_key]=0; + obj[multi_key]=selectedItems.join(','); + let anss=[]; + selectedItems.map((itemValue)=>{ + let ans = qtn.Answers.find(c1 => c1.AnswerId == itemValue); + if(ans.Answer){anss.push(ans.Answer)} + }); + obj[ans_key]=anss.join(','); + console.log('obj:',obj); + + wind['TgQA']=obj; + wind_index>=0?allData[wind_index]=wind:allData.push(wind); + + let objIndex = InputChange.findIndex(i=>i.TgQuestionId==window.TgQuestionId ); + + let winArr=[...InputChange] + winArr[objIndex].Flag=true + + setInputChange(winArr) + WindowDataRef.current=allData + setWindowData(allData); + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + + function setTextValue(value,qtn,window,type="") { + if(value!=''){ + let isValid=validateNumber(value,type); + console.log("type:",type,isValid); + if(!isValid){ + return; + } + } + + setErrorField({}); + setError(false); + let id_key=qtn.TgQuestionId+'_AnswerId'; + let ans_key=qtn.TgQuestionId+'_Answer'; + + let allData=WindowData; + let defData={'TgQuestionId':qtn.TgQuestionId, 'TargetTypeId':qtn.TargetTypeId}; + const wind_index=allData.findIndex(i=>i.TgQuestionId==qtn.TgQuestionId && i.TargetTypeId==qtn.TargetTypeId && i.TargetId==qtn.TargetId); + let wind=wind_index>=0?allData[wind_index]:defData; + let obj=wind.TgQA || {}; + + if(qtn.QuestionType=='Date' ){ + let date_key=qtn.TgQuestionId+'_Date'; + let d=value!=null?new Date(value):new Date(); + let mfdate=moment(d).format('MM/YYYY'); + showQtnDatePicker(qtn,window,false); + obj[id_key]=0; + obj[ans_key]=mfdate; + obj[date_key]=moment(d).format('MM/DD/YYYY'); + } + else{ + obj[id_key]=0; + obj[ans_key]=value; + } + + console.log(value,obj); + wind['TgQA']=obj; + wind_index>=0?allData[wind_index]=wind:allData.push(wind); + + let objIndex = InputChange.findIndex(i=>i.TgQuestionId==window.TgQuestionId); + let winArr=[...InputChange] + winArr[objIndex].Flag=true + + setInputChange(winArr) + WindowDataRef.current=allData + setWindowData(allData); + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + + function showQtnDatePicker(qtn,window,show=false){ + let allQtns=window.WindowQuestions || []; + let newqtnIndex=allQtns.findIndex(q=>q.TgQuestionId==qtn.TgQuestionId); + + if(newqtnIndex>=0){ + let newqtn=allQtns[newqtnIndex]; + newqtn.showDatePicker=show; + allQtns[newqtnIndex]=newqtn; + window['WindowQuestions']=allQtns; + let allWindows=Windows; + const winIndex=allWindows.findIndex(i=>i.VisibilityId==window.VisibilityId && i.VisibilityDefinitionId==window.VisibilityDefinitionId) || {}; + allWindows[winIndex]=window; + setWindows(allWindows); + setGlobalWindows(allwindows); + if(show==true) setrerenderdata(!rerenderdata); + } + } + + function setRatingValue(data){ + setRatingOrder(data); + } + + function onRatingCancel(){ + setShowRating(false); + } + + function onRatingSave(){ + setShowRating(false); + let qtn=RatingQtn; + let window=RatingWindow; + let id_key=qtn.TgQuestionId+'_AnswerId'; + let ans_key=qtn.TgQuestionId+'_Answer'; + let rating_key=qtn.TgQuestionId+'_Rating'; + let ids=[],anss=[]; + RatingOrder.map((item,index)=>{ + ids.push(item.AnswerId); + anss.push(item.Answer); + }) + + let allData=WindowData; + let defData={'VisibilityId':window.VisibilityId,'VisibilityDefinitionId':window.VisibilityDefinitionId}; + const wind_index=allData.findIndex(i=>i.VisibilityId==window.VisibilityId && i.VisibilityDefinitionId==window.VisibilityDefinitionId); + let wind=wind_index>=0?allData[wind_index]:defData; + let obj=wind.TgQA || {}; + + obj[rating_key]=ids.join(','); + obj[id_key]=0; + obj[ans_key]=anss.join(','); + + wind['TgQA']=obj; + wind_index>=0?allData[wind_index]=wind:allData.push(wind); + + let objIndex = InputChange.findIndex(i=>i.VisibilityId==window.VisibilityId && i.VisibilityDefinitionId==window.VisibilityDefinitionId); + let winArr=[...InputChange] + winArr[objIndex].Flag=true + + setInputChange(winArr) + WindowDataRef.current=allData + setWindowData(allData); + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + + + function onChoiceSelect(item,val,key,animatedChoice){ + let win_index=InputChange.find(i=>i.VisibilityId==item.VisibilityId && i.VisibilityDefinitionId==item.VisibilityDefinitionId) + let changeValue=win_index.Flag; + + if(changeValue){ + setIsPresentClean(val) + setDataCleanAnim(animatedChoice) + setDataCleanItem(item) + setDataCleanModal(true) + return + } + + var val1=0; + val==1?val1=1:''; + + if(animatedChoice!=null){ + Animated.timing(animatedChoice, { + toValue: val1, + duration:400, + useNativeDriver:false, + }).start(); + } + onWindowDataChange(item,val,key) + } + + function onWindowDataChange(item,val,key){ + let allData=WindowData; + let defData={'VisibilityId':item.VisibilityId,'VisibilityDefinitionId':item.VisibilityDefinitionId}; + const win_index=allData.findIndex(i=>i.VisibilityId==item.VisibilityId && i.VisibilityDefinitionId==item.VisibilityDefinitionId); + let wind=win_index>=0?(allData[win_index] || defData) : defData; + wind[key]=val; + + + win_index>=0?allData[win_index]=wind:allData.push(wind); + + if(key!="isPresent"){ + let objIndex = InputChange.findIndex(i=>i.VisibilityId==item.VisibilityId && i.VisibilityDefinitionId==item.VisibilityDefinitionId); + let winArr=[...InputChange] + winArr[objIndex].Flag=true + setInputChange(winArr) + } + + WindowDataRef.current=allData + setWindowData(allData); + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + + + async function setWindowStockVal(val,window,stockProd,key,type=''){ + setErrorField({}); + setError(false); + if(type=='numeric' && val!=''){ + const regex = new RegExp(/^\d+$/); + let isNUmeric=regex.test(val); + if(!isNUmeric){ + notify(ST.Pleaseenterwholenumbersonly,'SHORT'); + return; + } + } + + let allData=WindowData; + let defData={'VisibilityId':window.VisibilityId,'VisibilityDefinitionId':window.VisibilityDefinitionId}; + const win_index=allData.findIndex(i=>i.VisibilityId==window.VisibilityId && i.VisibilityDefinitionId==window.VisibilityDefinitionId); + let wind=win_index>=0?(allData[win_index] || defData) : defData; + let WStocksData=wind['WStocksData'] || []; + let sdIndex=WStocksData.findIndex(i=> i.ProductId==stockProd.VisibilityStockValue); + let sd=sdIndex>=0?WStocksData[sdIndex]:{'ProductId':stockProd.VisibilityStockValue,'Stock':''}; + sd[key]=val; + sdIndex>=0?WStocksData[sdIndex]=sd:WStocksData.push(sd); + wind['WStocksData']=WStocksData; + win_index>=0?allData[win_index]=wind:allData.push(wind); + if(key=='isPVisPresent'){ + let isAllChecked = await verifyAllChecked(val,window,stockProd,key); + wind['isAllSKUChecked']=isAllChecked; + } + + WindowDataRef.current=allData + setWindowData(allData); + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata4(!rerenderdata4); + } + + + async function verifyAllChecked(val,window,stockProd,key){ + return await new Promise((resolve,reject)=>{ + let WindowStocks=window.WindowStocks || []; + let allData=WindowData; + const win_index=allData.findIndex(i=>i.VisibilityId==window.VisibilityId && i.VisibilityDefinitionId==window.VisibilityDefinitionId); + let wind=win_index>=0?(allData[win_index] || defData) : defData; + let WStocksData=wind['WStocksData'] || []; + if(WindowStocks.length>0){ + let isAllChecked=1; + for(var i=0;i a.ProductId==stockProd.VisibilityStockValue); + let sd1=sdIndex1>=0?WStocksData[sdIndex1]:{}; + let isPVisPresent=sd1.isPVisPresent; + if(isPVisPresent==null || isPVisPresent=='' || isPVisPresent==0 || isPVisPresent=='0'){ + isAllChecked=0 + } + + if(i==WindowStocks.length-1){ + resolve(isAllChecked); + } + } + } + else{ + resolve(0); + } + + }).catch((err)=>{ + console.log(err); + return 0; + }); + } + + function onWindowDataClean(){ + if(DataCleanAnim!=null){ + let anim=isPresentClean==1?1:''; + Animated.timing(DataCleanAnim, { + toValue:anim, + duration:400, + useNativeDriver:false, + }).start(); + } + let allData=WindowData; + let WindowSplits = []; + for(var s=0;si.VisibilityId==window.VisibilityId && i.VisibilityDefinitionId==window.VisibilityDefinitionId + let defData={'VisibilityId':DataCleanItem.VisibilityId,'VisibilityDefinitionId':DataCleanItem.VisibilityDefinitionId,'isAllSKUChecked':0,'WindowSplits':WindowSplits,'TgQA':{},'WStocksData':[],isPresent:isPresentClean}; + const win_index=allData.findIndex(i=>i.VisibilityId==DataCleanItem.VisibilityId && i.VisibilityDefinitionId==DataCleanItem.VisibilityDefinitionId); + allData[win_index]=defData + + let objIndex = InputChange.findIndex((obj => obj.VisibilityId == DataCleanItem.VisibilityId && obj.VisibilityDefinitionId==DataCleanItem.VisibilityDefinitionId)); + let winArr=[...InputChange] + winArr[objIndex].Flag=false + + setInputChange(winArr) + WindowDataRef.current=allData + setWindowData(allData); + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setDataCleanModal(false) + setrerenderdata(!rerenderdata); + } + + + function onSaveCancel(){ + setShowAlert(false); + } + + + + function openImageRefView(windowIndex=0){ + setrefImageIndex(windowIndex); + UpdateShow_zoomImageRef(true); + } + + function FilterStores(searchedQry){ + searchedQry=searchedQry.toLowerCase(); + let arr=[]; + let newWindows=[]; + if(searchedQry!=null && searchedQry!=''){ + + for(let i=0;i + + {ST.DragItemsInOrder} + {ST.Pressandholdtodrag} + {setRatingValue(data)}} + keyExtractor={(item) => item.AnswerId} + renderItem={renderItem} + /> + + {onRatingCancel()}}> + {ST.Cancel} + + {onRatingSave()}}> + {ST.Save} + + + + + ) + } + + function render_Picker(label_key,value_key,onChange=()=>{},selected_data={}){ + var data=[]; + let qtn=selected_data.qtn || {}; + let window=selected_data.window || {}; + let isQtnDisabled=qtn.isDisabled!=null || qtn.isDisabled!=''?false:true; + let allAnswers=qtn.Answers || []; + + allAnswers.map((item,index)=>{ + let obj={ key: index, label: item[label_key],value:item[value_key],TgaShowCamera1:item["TgaShowCamera1"],TgaShowCamera2:item["TgaShowCamera2"] }; + if(selected_data.value==item[label_key]) + obj['component']= {item[label_key]}; + data.push(obj); + }); + + return ( + {onChange(option,qtn,window) }} + overlayStyle={customStyle.addVisPickerOverlay} + cancelContainerStyle={customStyle.addVisPicker_OptionContainerStyle} + optionStyle={customStyle.addvis_opStyle} + optionTextStyle={customStyle.addvis_opTextStyle} + optionContainerStyle={customStyle.addVisPicker_OptionContainerStyle} + selectedKey={'1'} + disabled={isQtnDisabled} + > + {(selected_data.value!=null && selected_data.value!=''?selected_data.value: '-'+ST.select+'-')} + + ) + } + + function renderDatePicker(qtn,window){ + let qtnn=qtn; + let DateRange=qtn.DateRange; + let maxDate=moment().add(10,'years').format('MM/DD/YYYY'); + let minDate=moment().subtract(10,'years').format('MM/DD/YYYY'); + if(DateRange=='RFD'){ + maxDate=moment().format('MM/DD/YYYY'); + } + else if(DateRange=='RPD'){ + minDate=moment().format('MM/DD/YYYY'); + } + + return ( + {setTextValue(selectedDate,qtnn,window)}} + maximumDate={new Date(maxDate)} + minimumDate={new Date(minDate)} + /> + ); + } + + async function OpenImgModal(imgPath,window,splitItem,splitItemIndex,cameraType){ + setSelectedImg(imgPath) + setShowModal(true); + if((imgPath!='' && imgPath!=null)){ + setShowImageSaveOp(false); + } + else{ + setShowImageSaveOp(true); + } + setReCapImgModalObj({window,splitItem,splitItemIndex,cameraType}) + // _OpenCaptureImage_Modal(imgPath,window,splitItem,splitItemIndex,cameraType) + + } + + function cancelImage(){ + // setImage1(''); + setSelectedImg(''); + setReCapImgModalObj({}) + setShowModal(false); + } + + function _renderWindow(){ + + + return ( + + + `window_${index.toString()}`} + renderItem={({item,index})=>{ + const window=item; + + const windowIndex=index; + + let isImage1=window.VisibilityImage1=='true' || window.VisibilityImage1==1?1:0; + let isImage2=window.VisibilityImage2=='true' || window.VisibilityImage2==1?1:0; + let isNAImageAvl=window.VisibilityNotExistCamera=='true' || window.VisibilityNotExistCamera==1?1:0; + let isNAReasonEnable=window.VisibilityNotExistReasonEnable=='true' || window.VisibilityNotExistReasonEnable==1? 1:0; + let isReasonEnable=window.VisibilityExistReasonEnable=='true' || window.VisibilityExistReasonEnable==1? 1:0; + let isStockReq=window.VisibilityElementStockRequired=='true' || window.VisibilityElementStockRequired==1?1:0; + let StockQtyRequired=window.StockQtyRequired=='true' || window.StockQtyRequired==1?1:0; + let PromoTitleEnable=window.PromoDefinitionTitleEnable=='true' || window.PromoDefinitionTitleEnable==1? 1:0; + let PromoTitle=window.PromoDefinitionTitle!=null && window.PromoDefinitionTitle!='undefined'? window.PromoDefinitionTitle:""; + + // let isStock_CheckAssrt=window.VisibilityElementCheckAssortment=='true' || window.VisibilityElementCheckAssortment==1?1:0; + let TgQuestions=window.TgQuestions || []; + + + let EF_Window=errorfield.EF_Window!=null ?errorfield.EF_Window:{}; + let show_errorhere=error==true && EF_Window.VisibilityId==window.VisibilityId && EF_Window.VisibilityDefinitionId==window.VisibilityDefinitionId; + + // if not Present fields + + // this will show error field in red (if window is present and exist reason is enabled and not filled ) or (if window is not present and Not exist reason is enabled and not filled ) + let EF_NExistReason=errorfield.EF_NExistReason || ''; + let EStyle_NExistReason=show_errorhere && EF_NExistReason=='NExistReason'?customStyle.stk_inptSTyle_error:{}; + + let EF_NExistRemark=errorfield.EF_NExistRemark || ''; + let EStyle_NExistRemark=show_errorhere && EF_NExistRemark=='NExistRemark'?customStyle.stk_inptSTyle_error:{}; + + let EF_NExistImage=errorfield.EF_NExistImage || ''; + let EStyle_NExistImage=show_errorhere && EF_NExistImage=='NExistImage'?customStyle.error_CatImage2:{}; + + + + return( + + + + {window.TargetTypeName} + { + window && window.ChildName !="" && {window.ChildName} + } + + {openImageRefView(index)}}> + + + + + + + + + {(TgQuestions.length>0) && + + + {currentMenu.MenuName+' Questions'} + + { TgQuestions.map((item,index)=>{ + + let qtn=item; + let qtnIndex=index; + let selansid='',selanswer='',selimg1='',selimg2='',selimg3='',selimg4='',showImageTag1=false,showImageTag2=false,showImageTag3=false,showImageTag4=false; + let id_key=qtn.TgQuestionId+'_AnswerId'; + let ans_key=qtn.TgQuestionId+'_Answer'; + let multi_key=qtn.TgQuestionId+'_MultiOption'; + let date_key=qtn.TgQuestionId+'_Date'; + let img_key=qtn.TgQuestionId+'_ImagePath1'; + let img_key2=qtn.TgQuestionId+'_ImagePath2'; + + let imgname_key=qtn.TgQuestionId+'_ImageName1'; + let rating_key=qtn.TgQuestionId+'_Rating'; + + let list_mcdata=[]; + let TgqDefaultQuestionEnable=qtn.TgqDefaultQuestionEnable=='true' || qtn.TgqDefaultQuestionEnable==1 || qtn.TgqDefaultQuestionEnable=='1'?true:false; + let isDisabled=qtn.isDisabled; + + + // =>i.TgQuestionId==qtn.TgQuestionId && i.TargetTypeId==window.TargetTypeId + const wind=Object.keys(WindowData).length>0 ? WindowData.find(i=>(i.TgQuestionId==qtn.TgQuestionId && i.TargetTypeId==qtn.TargetTypeId && i.TargetId==qtn.TargetId)):{}; + let QuestionsData=(wind && wind.TgQA) || {}; + + + if(qtn.QuestionType=='Single choice list') + { + + selansid=QuestionsData[id_key]!=null ?QuestionsData[id_key] :''; + selanswer=QuestionsData[ans_key]!=null ?QuestionsData[ans_key] :''; + + showImageTag1=((QuestionsData.TgaShowCamera1==1) || (QuestionsData.TgaShowCamera1=='true'))? true:false; + showImageTag2=(QuestionsData.TgaShowCamera2==1 || QuestionsData.TgaShowCamera2=='true')? true:false; + } + else if(qtn.QuestionType=='Multi choice list') + { + if(qtn.Answers!=null){ + for(var i=0;i0){ + let arr=[]; + for(var i=0;i0){ + for(var i=0;i=0)){ + {/* showImageTag=true; */} + } + + } + } + } + + + if(showImageTag1){ + selimg1=QuestionsData[img_key]!=null && QuestionsData[img_key]!=''?'file://'+QuestionsData[img_key]:''; + } + + if(showImageTag2){ + selimg2=QuestionsData[img_key2]!=null && QuestionsData[img_key2]!=''?'file://'+QuestionsData[img_key2]:''; + } + + + let EF_qtn=errorfield.EF_qtn!=null?errorfield.EF_qtn:{}; + let showQtnErrHere=EF_qtn.TgQuestionId==qtn.TgQuestionId; + //Qtn_MultiChoice + let EF_Qtn_MultiChoice=errorfield.EF_Qtn_MultiChoice || ''; + let EStyle_Qtn_MultiChoice=show_errorhere && showQtnErrHere && EF_Qtn_MultiChoice=='Qtn_MultiChoice'?customStyle.stk_MultiSSTyle_error:customStyle.wind_MultiSearchInputStyle; + + + let EF_Qtn_Date=errorfield.EF_Qtn_Date || ''; + let EStyle_Qtn_Date=show_errorhere && showQtnErrHere && EF_Qtn_Date=='Qtn_Date'?customStyle.stk_inptSTyle_error:{}; + + let EF_Qtn_Input=errorfield.EF_Qtn_Input || ''; + let EStyle_Qtn_Input=show_errorhere && showQtnErrHere && EF_Qtn_Input=='Qtn_Input'?customStyle.stk_inptSTyle_error:{}; + + let EF_Qtn_Image=errorfield.EF_Qtn_Image || ''; + let EStyle_Qtn_Image=show_errorhere && showQtnErrHere && EF_Qtn_Image=='Qtn_Image'?customStyle.stk_inptSTyle_error:{}; + + let EF_Qtn_Image2=errorfield.EF_Qtn_Image2 || ''; + let EStyle_Qtn_Image2=show_errorhere && showQtnErrHere && EF_Qtn_Image2=='Qtn_Image2'?customStyle.stk_inptSTyle_error:{}; + + if(!isDisabled){ + return( + + {qtn.TgQuestionName} + {qtn.QuestionType=='Single choice list' && qtn.Answers && + render_Picker('Answer','AnswerId',onselectionChange,{value:selanswer,qtn:qtn,window:window}) + } + {qtn.QuestionType=='Multi choice list' && qtn.Answers && + { setMultiSelectValue(selectedItems,qtn,window) }} //setMultiSelectValue(selectedItems,qtn) + selectedItems={selansid} + selectText="Pick Items" + searchInputPlaceholderText={ST.SearchItems+"..."} + // onChangeInput={ (text)=> console.log(text)} + tagRemoveIconColor={PageTheme.$primary_color} + tagBorderColor={PageTheme.$primary_color} + tagTextColor={PageTheme.$primary_color} + selectedItemTextColor={PageTheme.$primary_color} + selectedItemIconColor={PageTheme.$primary_color} + itemTextColor={PageTheme.$text_color} + displayKey="Answer" + searchInputStyle={EStyle_Qtn_MultiChoice} + submitButtonColor={PageTheme.$primary_color} + submitButtonText={ST.Submit} + /> + } + + { (qtn.QuestionType=='Number' || qtn.QuestionType=='Decimal' || qtn.QuestionType=='Text' || qtn.QuestionType=='TextSpc') && + console.log("onchangeVal--",e.value)} + onChangeText={(val)=>{setTextValue(val,qtn,window,(qtn.QuestionType=='Decimal'?'decimal':(qtn.QuestionType=='Text'?'text':qtn.QuestionType=='TextSpc'? 'TextSpc':'numeric')))}} + /> + } + + { + (qtn.QuestionType=='Date') && + + {selansid!=''?selansid:'MM/YYYY'} + {setDateValue(selanswer);showQtnDatePicker(qtn,window,true)}}> + + + + } + { + (qtn.QuestionType=='QR') && + + {/* {selanswer!=''?selanswer:''} */} + console.log("onchangeVal--",e.value)} + onChangeText={(val)=>{setTextValue(val,qtn,window,'qrtext')}} + /> + {setQREnable(true);setQRqtnData({qtn,window});setShowQRCamera(true);}}> + + + + } + { ((qtn.showDatePicker==true || qtn.showDatePicker=='true') && (qtn.QuestionType=='Date') ) && + renderDatePicker(qtn,window) + } + { + (qtn.QuestionType=='Rating') && + + {selanswer} + {setRatingQtn(qtn);setRatingWindow(window);setShowRating(true);}}> + + + + } + { + showImageTag1==true && + + + {openCamera(window,{},0,'1','2',qtn)}}> + + + + } + { + showImageTag2==true && + + + {openCamera(window,{},0,'2','2',qtn)}}> + + + + } + + + ) + } + else{ + return null; + } + })} + + } + + + + + + ); + }} + /> + + + ) + } + + function _renderHeader(currentIndex){ + return( + + {`${(currentIndex+1)}/${zoomImageUrl.length}`} + {UpdateShow_zoomImageRef(false) }}> + + + + ) + } + + const onCancelClean = () =>{ + setDataCleanModal(false) + } + const onclear = () => { + onWindowDataClean(DataCleanItem) + } + + return ( + + {processing && } + + {_OpenCaptureImage_Modal()} + {ConfirmSaveAlert(props,showAlert,onSaveCancel,saveData)} + {ConfirmSaveAlert(props,DataCleanModal,onCancelClean,onclear,'Your data will be clean',)} + {setShowQRCamera(false);onQRScanned(imgData)}} showCamera={showQRCamera} onHideCamera={()=>{setShowQRCamera(false);}}/> + {setShowCamera(false);getImage(imgData)}} showCamera={showCamera} onHideCamera={()=>{setShowCamera(false);}}/> + + + + + {setSearchedItem(val); FilterStores(val)}} + /> + {FilterStores(searchedItem)}}> + + + + { Object.keys(storeData).length>0 && + + {_renderWindow()} + + } + + {onSubmitData()}}/> + + + + + { showRating==true && + renderRatingView() + } + {show_zoomImage && + + null} + /> + + } + + ); +} + + +export default connect(mapStateToProps, mapDispatchToProps)(TGBaseVisiCooler); \ No newline at end of file diff --git a/PerformicsSrc/src/screens/Training.js b/PerformicsSrc/src/screens/Training.js new file mode 100644 index 0000000..96c7779 --- /dev/null +++ b/PerformicsSrc/src/screens/Training.js @@ -0,0 +1,256 @@ +import React, { useState, useEffect, useRef } from 'react'; +import Container from '../components/container'; +import { useRoute } from '@react-navigation/native'; +import { globalStyles, customStyles, GetPageTheme } from '../styles/Global'; +import { StatusBar, Image, TextInput, View, Text, ScrollView, TouchableOpacity, Platform, PermissionsAndroid, FlatList, } from 'react-native'; +import { ReactReduxContext, connect, useSelector, useDispatch, } from 'react-redux'; +import { mapStateToProps, mapDispatchToProps } from '../reducers/contextProvider'; +import SQLite from 'react-native-sqlite-2'; +import { notify } from '../components/notify'; +import moment from 'moment'; +import { getDownloadJson, DownloadData } from '../controller/functions'; +import { get_item, set_item, clear_item } from '../components/localStorage'; +import { version, sloganline, appname, testurl, db, TrainingContentFolderPath, } from '../constants/constants'; +import CustomHeader from '../components/customHeader'; +import CustomLoader from '../components/CustomLoader'; +import LinearGradient from 'react-native-linear-gradient'; +import { FontAwesome, Fontisto, Ionicons, MaterialCommunityIcons } from '../components/icons'; +import NoDataComponent from '../components/NoDataComponent'; +import WebView from 'react-native-webview'; +import { AntDesign, Entypo } from "../components/icons"; +import * as RNFS from "react-native-fs"; +import FileViewer from "react-native-file-viewer"; +import ImageViewer from 'react-native-image-zoom-viewer'; +import base64 from 'base-64'; +import { updatePartiallyEmittedExpression } from 'typescript'; + + +function Training(props) { + const route = useRoute(); + const ST = props.StaticText || {}; + // get all theme styles acc to current theme set + const PageTheme = GetPageTheme(props.DarkMode, route.name); + const customStyle = customStyles(props.DarkMode, route.name); + const globalStyle = globalStyles(props.DarkMode, route.name); + const [processing, setProcessing] = useState(false); + const [webviewurl, setWebviewurl] = useState(''); + const [TrainingData, setTrainingData] = useState([]); + const [showwebview, setShowWebview] = useState(false); + const [webviewurlT, setWebviewurlT] = useState(''); + const [isAdhocScreen, setIsAdhocScreen] = useState(false); + const [storeData, setStoreData] = useState({}); + const [currentMenu, setCurrentMenu] = useState({}); + const [show_zoomImage, setShow_zoomImage] = useState(false); + const [contentIdParam, setcontentIdParam] = useState(false); + const [currentReportMenu, setCurrentReportMenu] = useState({}); + const zoomView = useRef(null); + + useEffect(() => { + let params = props.route.params ? props.route.params : {}; + let storeData1 = params.storeData || {}; + let menu1 = params.menu || {}; + let contentid = props.route.params.Contentid + let TrainingData = props.route.params.TrainingData + // console.log('vcontentid',contentid) + let isAdhoc = params.isAdhoc || false; + setCurrentReportMenu(TrainingData) + setIsAdhocScreen(isAdhoc); + setStoreData(storeData1); + setcontentIdParam(contentid); + setCurrentMenu(menu1); + getData(contentid); + + const unsubscribe = props.navigation.addListener('beforeRemove', onBeforeRemove); + return function cleanup() { + return unsubscribe; + }; + + }, []); + + useEffect(() => { + const unsubscribe = props.navigation.addListener('beforeRemove', onBeforeRemove); + return unsubscribe; + }, [show_zoomImage]); + + function onBeforeRemove(e) { + if (show_zoomImage == true) { + e.preventDefault(); + setShow_zoomImage(false); + } + else { + return; + } + } + + function _renderHeader(currentIndex) { + return ( + + { console.log('tsth'); setShow_zoomImage(false) }}> + + + + ) + } + + async function getData(content_id) { + try { + content_id = props.route.params.Contentid + console.log('params', content_id) + let List = []; + await db.transaction(async function (txn) { + let q = `Select * from Master_DetailerContent where ContentTypeId='${content_id}'`; + await txn.executeSql(q, [], async function (txn2, txnres2) { + console.log('txnres2.rows.length:', txnres2.rows.length) + if (txnres2.rows.length > 0) { + for (let i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + List.push(data) + } + setTrainingData(List) + } + + }, function (txnE, txnerr) { console.log(txnerr); },); + }); + } catch (err) { + console.log(err); + } + } + + const DownloadContent = async (item) => { + let filename = item.FName + let path = (item && item.MediaType && item.MediaType.toLowerCase() == "pdf") ? "/pdf/" : (item && item.MediaType && item.MediaType.toLowerCase() == "image") ? "/images/" : (item && item.MediaType && item.MediaType.toLowerCase() == "html") ? "html" : "/video/" + if (path == 'html') { + let contentURL = item.FilePath ? item.FilePath + item.FName : ''; + props.navigation.navigate('WebViewScreen', { 'url': contentURL, storeData: storeData }) + } else { + const fileDir = TrainingContentFolderPath + path; + const filePath = TrainingContentFolderPath + path + filename; + let contentURL = item.FilePath ? item.FilePath + item.FName : ''; + let contentFileExist = await RNFS.exists(filePath) + if (contentFileExist) { + setWebviewurlT(filePath) + if (path == "/pdf/") { + FileViewer.open(filePath) + } else if (path == "/video/") { + props.navigation.navigate('VideoScreen', { filePath: filePath }) + } else { + setShow_zoomImage(true) + } + } else { + setProcessing(true) + let fileExist = await RNFS.exists(fileDir) + if (fileExist) { + console.log("file is exists", fileDir) + } else { + await RNFS.mkdir(fileDir).then(() => console.log("Dir is created- ", fileDir)) + } + + RNFS.writeFile(filePath, '').then(async (create_res) => { + console.log('filecreated') + const download = await RNFS.downloadFile({ + fromUrl: contentURL, + toFile: filePath, + progress: (res) => { + let bytes = res.bytesWritten; + let dataDownloadedinMB = (bytes / (1024 * 1024)).toFixed(2); + }, + begin: (res) => { + console.log('on download begin'); + }, + + }); + + download.promise.then(async (result) => { + setProcessing(false); + setWebviewurlT(filePath) + if (result.statusCode == 404) { + notify('Sorry! Cannot download file as file does not exists on server!'); + await RNFS.unlink(filePath); + } else { + notify('File is downloaded!'); + if (path == "/pdf/") { + FileViewer.open(filePath) + } else if (path == "/video/") { + props.navigation.navigate('VideoScreen', { filePath: filePath }) + } else { + setShow_zoomImage(true) + } + } + }); + }).catch((err) => { + console.log('Error while creating:', err); + setProcessing(false); + setDownloading(false); + RNFS.unlink(filePath); + notify('Sorry! Cannot download file'); + }) + } + } + } + + return ( + + {processing && } + 0 ? `${storeData.StoreId}: ${storeData.StoreName}` : props.projectCode} /> + + + {!props.isDataDownloaded && } + + {contentIdParam == 2 ? Consumer Section Content : + {currentReportMenu?.ContentType || 'Training Content'} + } + + {!showwebview && + + {TrainingData && TrainingData.map((item, i) => ( + DownloadContent(item)} + key={i}> + + + {item.Topic} + + + + Description + {item.Description} + + + + + Content Type + + { + item.MediaType != null && item.MediaType.toLowerCase() == "pdf" ? : item.MediaType != null && item.MediaType.toLowerCase() == "Image" ? + console.log("click")} /> : item.MediaType != null && item.MediaType.toLowerCase() == "html" ? + : + + } + {item.MediaType} + + + + + + + ))} + + } + + + {show_zoomImage && + + null} + /> + + } + + ); +} + +export default connect(mapStateToProps, mapDispatchToProps)(Training); diff --git a/PerformicsSrc/src/screens/TrainingMenu.js b/PerformicsSrc/src/screens/TrainingMenu.js new file mode 100644 index 0000000..f14eae5 --- /dev/null +++ b/PerformicsSrc/src/screens/TrainingMenu.js @@ -0,0 +1,372 @@ +import React, {useState, useEffect, useRef} from 'react'; +import Container from '../components/container'; +import {useRoute} from '@react-navigation/native'; +import {globalStyles, customStyles, GetPageTheme} from '../styles/Global'; +import styles from '../styles/TrainingMenu.style'; +import {Image, View, Text, ScrollView, TouchableOpacity, Platform, Dimensions} from 'react-native'; +import {connect} from 'react-redux'; +import {mapStateToProps, mapDispatchToProps} from '../reducers/contextProvider'; +import moment from 'moment'; +import {get_item} from '../components/localStorage'; +import {db, colors_Arr} from '../constants/constants'; +import CustomHeader from '../components/customHeader'; +import {AntDesign} from '../components/icons'; +import CustomLoader from '../components/CustomLoader'; +import NoDataComponent from '../components/NoDataComponent'; +import LinearGradient from 'react-native-linear-gradient'; +import grey_bg_image from '../assets/performics/circle_grey.svg'; + +function TrainingMenu(props) { + const route = useRoute(); + const ST = props.StaticText || {}; + // get all theme styles acc to current theme set + const PageTheme = GetPageTheme(props.DarkMode, route.name); + const customStyle = customStyles(props.DarkMode, route.name); + + const [webviewurl, setWebviewurl] = useState(false); + const [processing, setProcessing] = useState(true); + const [isDataFound, setisDataFound] = useState(false); + const [reportData, setReportData] = useState([]); + const [designation, setDesignation] = useState(''); + const [CardViewEnable, setCardViewEnable] = useState(false); + const [CardViewConfig, setCardViewConfig] = useState({}); + + const d1 = new Date(); + const d2 = moment(d1).format('MM/DD/YYYY'); + + useEffect(() => { + getData(); + }, []); + + const [activeTab, setActiveTab] = useState(0); + + const [userhomelocationdata , setUserHomeLocationData] = useState([]); + + const scrollViewRef = useRef(null); + const tabWidth = Dimensions.get('window').width / 2; // Assuming 2 tabs, adjust this accordingly + + const tabs = [ + {title: 'Documents', content: _renderMenuList()}, + {title: 'Home', content: _renderMenuList('home')}, + ]; + + const handleScroll = event => { + const offsetX = event.nativeEvent.contentOffset.x; + const index = Math.floor(offsetX / tabWidth); + setActiveTab(index); + }; + + const scrollToTab = index => { + scrollViewRef.current.scrollTo({x: index * tabWidth * 2, animated: true}); + }; + + async function getData() { + try { + let loginInfo = await get_item('loginInfo'); + const loginDetails = JSON.parse(loginInfo); + let desg = loginDetails.Designation || ''; + setDesignation(desg); + await db.transaction(async function (txn) { + let q = `Select distinct ContentTypeId, ContentType, IconPath, Icon, MediaType, DownloadKey, ReportView as ReportType, InnerScreenView from Master_DetailerContent group by ContentTypeId`; + // let q=`SELECT * from Master_MenuReports`; + + await txn.executeSql( + q, + [], + async function (txn2, txnres) { + console.log('txnres.rows.length:', txnres.rows.length); + if (txnres.rows.length > 0) { + let arr = []; + let carView = true; + for (var i = 0; i < txnres.rows.length; i++) { + let data = txnres.rows.item(i); + carView = data?.InnerScreenView == 'Tile'; + arr.push(data); + if (i == txnres.rows.length - 1) { + setCardViewConfig(data); + setCardViewEnable(carView); + setReportData(arr); + setisDataFound(true); + setProcessing(false); + } + } + } else { + setProcessing(false); + } + }, + function (txn2, txnerr) { + console.log(txnerr); + setProcessing(false); + }, + ); + + let q1=`SELECT * from Master_UserHomeLocation`; + await txn.executeSql(q1,[],async function (txn2, txnres) { + if(txnres.rows.length>0){ + let arr=[]; + for(var i=0;i + {RowContent[0]} + + ); + } + + function _renderMenuItem(item, index) { + let newi; + if (index == 1) { + newi = '2'; + } else { + newi = index > 2 ? index % 3 : index; + } + + // let newi=index>2?((index%3)):index; + let firstitem = index % 2 == 0 ? true : false; + + let arr = ['#bed3ea', '#bed3ea']; + // let arr = ["#dcf2ee", "#30cfb0"]; + // let arr = colors_Arr[newi] ? colors_Arr[newi].bg : colors_Arr["0"].bg; + let unavlbl_bg = ['#bfbfbf', '#bfbfbf']; + let arr_new = item?.isAvlbl == false ? unavlbl_bg : arr; + // let iconColor=colors_Arr[newi]?colors_Arr[newi].color:colors_Arr["0"].color; + const imgPath = CardViewConfig?.IconPath + CardViewConfig?.Icon; + + let MbgImage = colors_Arr[newi] + ? colors_Arr[newi]?.bgImage + : colors_Arr['0']?.bgImage; + MbgImage = item?.isAvlbl == false ? grey_bg_image : MbgImage; + + let hasSomeData = item?.hasSomeData; + return ( + gotoTraingPage(item)}> + + + + + + + {imgPath != null && imgPath != '' && ( + + )} + + + {item.ContentType} + {item.isDone == true && ( + + + + )} + {/* {item.hasSomeData==true && !item.isKPI_Done && + + } + {props.PartialSaveAllow==true && item.PSAllow!=null && item.PSAllow==true && + {`(${item.DataDoneCount}/${item.DataRowAvlblCount})`} + } */} + + + ); + } + + function _renderRightMenuItem(item, index, RowContent) { + return ( + + {RowContent[0]} + {_renderMenuItem(item, index)} + + ); + } + + function _renderMenuList(home) { + var RowContent = []; + let firstArr = [ + { + ContentType: 'Home Location', + ContentTypeId: 1, + DownloadKey: '', + Icon: 'Paid-Visibility.png', + IconPath: 'https://di1.parinaam.in/Download/Icon/', + InnerScreenView: 'Tile', + MediaType: 'PDF', + ReportType: '', + }, + ]; + + let isHome = userhomelocationdata[0]?.OptionShow == 1 && home === 'home' ? firstArr : reportData; + return ( + isHome.length > 0 && + isHome.map((item, index) => { + // let RowContent=[] + if (CardViewEnable) { + let firstitem = index % 2 == 0 ? true : false; + + if (firstitem) { + var content = _renderMenuItem(item, index); + RowContent = [content]; + if (index == isHome.length - 1) { + return _renderLeftMenuItem(index, RowContent); + } + } else { + return _renderRightMenuItem(item, index, RowContent); + } + } else { + return ( + { + gotoTraingPage(item); + }}> + + {item.ContentType} + + + ); + } + }) + ); + } + + + console.log(userhomelocationdata[0]?.OptionShow, 'user datta') + + return ( + + {processing && } + + + + {!props.isDataDownloaded && } + {props.isDataDownloaded == true && ( + + {isDataFound == false && ( + + + {ST.NoDataAvailable} + + + )} + + {isDataFound == true && ( + + + + + {ST.Username + ' :'} + + + {props.UserId} + + + + + {ST.Designation + ' :'} + + + {designation} + + + + + {userhomelocationdata[0]?.OptionShow == 1 && + + {tabs.map((tab, index) => ( + scrollToTab(index)}> + {tab.title} + + ))} + + + } + + + + {tabs.map((tab, index) => { + let tabContent=null; + if(userhomelocationdata[0]?.OptionShow == 1 && tab.title=="Home"){ + tabContent=tab.content + }else if(tab.title!="Home"){ + tabContent=tab.content + } + return ( + + {tabContent} + + )})} + + + )} + + )} + + + + ); +} + +export default connect(mapStateToProps, mapDispatchToProps)(TrainingMenu); diff --git a/PerformicsSrc/src/screens/TrainingOld.js b/PerformicsSrc/src/screens/TrainingOld.js new file mode 100644 index 0000000..5b6709b --- /dev/null +++ b/PerformicsSrc/src/screens/TrainingOld.js @@ -0,0 +1,77 @@ +import React, {useState, useEffect} from 'react'; +import Container from '../components/container'; +import {useRoute} from '@react-navigation/native'; +import {globalStyles, customStyles, GetPageTheme} from '../styles/Global'; +import { StatusBar,Image,TextInput,View,Text,ScrollView,TouchableOpacity,Platform,PermissionsAndroid,FlatList,} from 'react-native'; +import {ReactReduxContext,connect,useSelector,useDispatch,} from 'react-redux'; +import {mapStateToProps, mapDispatchToProps} from '../reducers/contextProvider'; +import SQLite from 'react-native-sqlite-2'; +import {notify} from '../components/notify'; +import moment from 'moment'; +import {getDownloadJson,DownloadData} from '../controller/functions'; +import {get_item, set_item, clear_item} from '../components/localStorage'; +import {version,sloganline,appname,testurl,db,} from '../constants/constants'; +import CustomHeader from '../components/customHeader'; +import CustomLoader from '../components/CustomLoader'; +import LinearGradient from 'react-native-linear-gradient'; +import { FontAwesome, Fontisto, Ionicons, MaterialCommunityIcons } from '../components/icons'; +import NoDataComponent from '../components/NoDataComponent'; +import WebView from 'react-native-webview'; + +function Training(props) { + const route = useRoute(); + const ST=props.StaticText || {}; + // get all theme styles acc to current theme set + const PageTheme = GetPageTheme(props.DarkMode, route.name); + const customStyle = customStyles(props.DarkMode, route.name); + const globalStyle = globalStyles(props.DarkMode, route.name); + + + const [processing, setProcessing] = useState(false); + const [webviewurl, setWebviewurl] = useState(''); + + + useEffect(() => { + getData(); + }, []); + + + async function getData(){ + try { + + await db.transaction(async function (txn) { + + let q=`Select * from Training_Document `; + await txn.executeSql(q,[],async function (txn2, txnres2) { + console.log('Training_Document:',txnres2.rows.length); + if(txnres2.rows.length>0){ + let data =txnres2.rows.item(0); + console.log('Training_Document:',data); + setWebviewurl(data.TraningLink); + } + },function (txnE,txnerr) { console.log(txnerr); },); + }); + } catch (err) { + console.log(err); + } +} + + + return ( + + {processing && } + + + + { !props.isDataDownloaded && } + { props.isDataDownloaded==true && webviewurl!='' && webviewurl!=null && + + } + + + + + ); +} + +export default connect(mapStateToProps, mapDispatchToProps)(Training); diff --git a/PerformicsSrc/src/screens/UploadData.js b/PerformicsSrc/src/screens/UploadData.js new file mode 100644 index 0000000..9add434 --- /dev/null +++ b/PerformicsSrc/src/screens/UploadData.js @@ -0,0 +1,392 @@ +import React,{useState,useEffect} from 'react'; +import Container from '../components/container'; +import { useRoute } from '@react-navigation/native'; +import { globalStyles,customStyles,GetPageTheme } from "../styles/Global"; +import {StatusBar,Image,TextInput,View,Text,ScrollView,TouchableOpacity,Platform,PermissionsAndroid,FlatList} from 'react-native'; +import { ReactReduxContext,connect,useSelector, useDispatch } from 'react-redux'; +import { mapStateToProps,mapDispatchToProps } from '../reducers/contextProvider'; +import SQLite from 'react-native-sqlite-2'; +import {notify} from '../components/notify'; +import moment from 'moment'; +import {UploadData,UploadData2,UploadFormData,UpdateStoreStatus,UpdateImageStatus} from '../controller/functions'; +import {get_item,set_item,clear_item} from '../components/localStorage'; +import {version,sloganline,appname,testurl,testurl_upload,db,testurl_image} from '../constants/constants'; +import CustomHeader from '../components/customHeader'; +import {Card} from 'react-native-paper'; +import {AntDesign} from '../components/icons'; +import CustomLoader from '../components/CustomLoader'; +import * as RNFS from 'react-native-fs'; + + +function UploadDataScreen(props) { + const route = useRoute(); + + // get all theme styles acc to current theme set + const PageTheme=GetPageTheme(props.DarkMode,route.name); + const customStyle=customStyles(props.DarkMode,route.name); + const [processing, setProcessing] = useState(false); + const [loaderTitle, setLoaderTitle] = useState('loading...'); + + let [StoreQuestions, setStoreQuestions] = useState({}); + let [StorePhotosData, setStorePhotosData] = useState({}); + let [StoreSKUPhotosData, setStoreSKUPhotosData] = useState({}); + let [StoreActPhotosData, setStoreActPhotosData] = useState({}); + let [UploadImages, setUploadImages] = useState([]); + let [UploadImages2, setUploadImages2] = useState([]); + let [UploadImages3, setUploadImages3] = useState([]); + let [MDetails, setMDetails] = useState([]); + + const [state, setState] = useState({teamList: [], isDataDownloaded: false}); + + useEffect(() => { + // getLocalData(); + }, []); + + + async function getLocalData(){ + try { + let d1=new Date(); + let d2=moment(d1).format('MM/DD/YYYY'); + let token = await get_item('loginToken'); + let loginInfo = await get_item('loginInfo'); + const loginDetails = JSON.parse(loginInfo); + MDetails=[];StorePhotosData={};StoreSKUPhotosData={};StoreActPhotosData={},UploadImages=[],UploadImages2=[],UploadImages3=[]; + setMDetails(MDetails);setStorePhotosData(StorePhotosData);setStoreSKUPhotosData(StoreSKUPhotosData);setStoreActPhotosData(StoreActPhotosData); + setUploadImages(UploadImages);setUploadImages2(UploadImages2);setUploadImages3(UploadImages3); + + await db.transaction(async function (txn) { + + await txn.executeSql(`Select * from Stores where VisitDate='${d2}' and (UploadStatus='C' or UploadStatus='D') `,[],async function (txn2, txnres2) { + if(txnres2.rows.length>0){ + console.log('checkout ids',txnres2.rows.length); + // let mstatus_data=[],storePhotos=[],storeSKUPhotos=[],storeActPhotos=[]; + for (var i=0;i0){ + for (var i=0;i0){ + for (var i=0;i0){ + for (var i=0;i0){ + for (var i=0;i0?1:0); + let objdata={ + "MID": MID, + "UserId": loginDetails.UserId, + "Present": Type==''?'0':'1', + "ActivationTypeId": TypeId, + "CompBrandId": BrandId, + "Remark": "", + "ShowContactsFlag": ShowContactsFlag, + "NoofContacts": NoOfContacts, + "Image": imgName1, + "ImageTwo": imgName2, + "ImageThree": imgName3 + }; + console.log('datae tu:',objdata); + let spd_Arr=StoreActPhotosData[MID]!=null?StoreActPhotosData[MID]:[]; + spd_Arr.push(objdata); + StoreActPhotosData[MID]=spd_Arr; + setStoreActPhotosData(StoreActPhotosData); + + + } + } + }); + } + + let q3=`Select * from imageUploadStatus where MID='${MID}' and status='0'`; + console.log(q3); + await txn.executeSql(q3,[],async function (txn2, txnres3) { + console.log('images to upload:',txnres3.rows.length) + if(txnres3.rows.length>0){ + for(var i=0;i{ + const MID=item.MID; + let sQtns=StoreQuestions[MID]; + let spdArr=StorePhotosData[MID]; + let sSKUpdArr=StoreSKUPhotosData[MID]; + let sACTpdArr=StoreActPhotosData[MID]; + console.log(MID,sACTpdArr); + // upload store photos data data + if(item.UploadStatus=='D') + { + uploadImages(loginDetails,token,MID); + } + else{ + var data = {"MID": MID,"Keys":"Sup_StoreCatPics","SecurityToken":token,"JsonData":JSON.stringify(spdArr),"UserName":loginDetails.UserId} + await UploadData2(testurl_upload, data) + .then(async(res) => { + console.log('storephotos data uploaded:',res); + + // upload store sku photos data + data = {"MID": MID,"Keys":"Sup_Competition_SKU","SecurityToken":token,"JsonData":JSON.stringify(sSKUpdArr),"UserName":loginDetails.UserId} + await UploadData2(testurl_upload, data) + .then(async(res) => { + console.log('compSKU data uploaded:',res); + + // upload store Act photos data + data = {"MID": MID,"Keys":"Sup_Competition_Activation","SecurityToken":token,"JsonData":JSON.stringify(sACTpdArr),"UserName":loginDetails.UserId} + await UploadData2(testurl_upload, data) + .then(async(res) => { + console.log('compACT data uploaded:',res); + + // upload store qtns data + data = {"MID": MID,"Keys":"Sup_StoreAudit","SecurityToken":token,"JsonData":JSON.stringify(sQtns),"UserName":loginDetails.UserId} + console.log(data); + await UploadData2(testurl_upload, data) + .then(async(res) => { + console.log('Store Qtns data uploaded:',res); + + data_uploadStatus(loginDetails,token,MID); + + }).catch(err => { + console.log('onPage Team error', err); + setProcessing(false); + notify('Cannot Upload Data!'); + }); + + }).catch(err => { + console.log('onPage Team error', err); + setProcessing(false); + notify('Cannot Upload Data!'); + }); + + }).catch(err => { + console.log('onPage Team error', err); + setProcessing(false); + notify('Cannot Upload Data!'); + }); + + }).catch(err => { + console.log('onPage Team error', err); + setProcessing(false); + notify('Cannot Upload Data!'); + }); + } + }); + + if(MDetails.length<=0){ + setProcessing(false); + notify('All Data and images already uploaded!','SHORT'); + props.navigation.goBack(); + } + } + + async function data_uploadStatus(loginDetails,token,MID){ + // update upload status + const url='https://anitemp.parinaam.in/Webservice/Abbott_MnancService.svc/'; + let data2={'Mid':MID,'Status':'D'} + await UploadData(url+'StoreCoverageStatusSup',data2) + .then(async(res)=>{ + console.log('StoreCoverageStatusSup res:',res); + if(res==1){ + let datan={Mid:MID,Status:'D'} ; + UpdateStoreStatus(props,datan); + setLoaderTitle('Uploading Images...'); + uploadImages(loginDetails,token,MID); + } + }).catch(err => { + console.log('onPage Team error', err); + setProcessing(false); + notify('Cannot Upload Data!'); + }); + } + + async function uploadImages(loginDetails,token,MID){ + let allimages=UploadImages[MID]!=null?UploadImages[MID]:[]; + if(allimages.length>0){ + allimages.map(async(file,index)=>{ + const data1 = new FormData(); + let {uniqueID,MID,StorePhotosId,imgType,imgPath,imgName,Status,AddedDate}=file; + let Foldername=imgType=='sku'?'Sup_Competition_SKUImages':(imgType=='act'?'Sup_Competition_ActivationImages':(imgType='audit'?'Sup_AuditImages':'Sup_StoreCategoryImages')); + + data1.append('file', { + uri: 'file://'+file.imgPath, + type: 'image/jpg', + name: file.imgName + }); + data1.append('Foldername', Foldername); + data1.append('Path', ''); + data1.append('UserName', loginDetails.UserId); + data1.append('SecurityToken', token); + + await UploadFormData(testurl_image, data1) + .then(async(res) => { + console.log('image uploaded:',imgType); + UpdateImageStatus(props,{uniqueID:uniqueID}) + if(index==(allimages.length-1)){ + // update upload status + console.log('lastimage update status u'); + const url='https://anitemp.parinaam.in/Webservice/Abbott_MnancService.svc/'; + let data2={'Mid':MID,'Status':'U'} + await UploadData(url+'StoreCoverageStatusSup',data2) + .then(async(res)=>{ + console.log('StoreCoverageStatusSup res:',res); + if(res==1){ + UpdateStoreStatus(props,data2); + setProcessing(false); + notify('Uploaded successfully','SHORT'); + } + }).catch(err => { + console.log('onPage Team error', err); + setProcessing(false); + notify('Cannot Upload Data!'); + }); + } + }).catch(err => { + console.log('onPage Team error', err); + setProcessing(false); + notify('Cannot Upload Image!'); + }); + }); + } + else{ + setProcessing(false); + } + + } + + + return ( + + {processing && } + + + {/* {uploadAllData()}}> + Upload Data + */} + + + + ); + } + + + +export default connect(mapStateToProps, mapDispatchToProps)(UploadDataScreen); \ No newline at end of file diff --git a/PerformicsSrc/src/screens/VideoScreen.js b/PerformicsSrc/src/screens/VideoScreen.js new file mode 100644 index 0000000..7041d41 --- /dev/null +++ b/PerformicsSrc/src/screens/VideoScreen.js @@ -0,0 +1,57 @@ +import React, {useState, useEffect} from 'react'; +import Container from '../components/container'; +import {useNavigation, useRoute} from '@react-navigation/native'; +import {globalStyles, customStyles, GetPageTheme} from '../styles/Global'; +import { StatusBar,Image,TextInput,View,Text,ScrollView,TouchableOpacity,Platform,PermissionsAndroid,FlatList,} from 'react-native'; +import {ReactReduxContext,connect,useSelector,useDispatch,} from 'react-redux'; +import {mapStateToProps, mapDispatchToProps} from '../reducers/contextProvider'; +import SQLite from 'react-native-sqlite-2'; +import {notify} from '../components/notify'; +import moment from 'moment'; +import {getDownloadJson,DownloadData} from '../controller/functions'; +import {get_item, set_item, clear_item} from '../components/localStorage'; +import {version,sloganline,appname,testurl,db,} from '../constants/constants'; +import CustomHeader from '../components/customHeader'; +import CustomLoader from '../components/CustomLoader'; +import LinearGradient from 'react-native-linear-gradient'; +import { FontAwesome, Fontisto, Ionicons, MaterialCommunityIcons } from '../components/icons'; +import NoDataComponent from '../components/NoDataComponent'; +import WebView from 'react-native-webview'; +import { AntDesign, Entypo } from "../components/icons"; +import * as RNFS from "react-native-fs"; +import FileViewer from "react-native-file-viewer"; +import VideoPlayer from 'react-native-video-controls'; + + +function VideoScreen(props) { + const route = useRoute(); + const ST=props.StaticText || {}; + const navigation = props.navigation +// const navigation = useNavigation() + const filePath = props.route.params.filePath; + // get all theme styles acc to current theme set + const PageTheme = GetPageTheme(props.DarkMode, route.name); + const customStyle = customStyles(props.DarkMode, route.name); + const globalStyle = globalStyles(props.DarkMode, route.name); + + + const [processing, setProcessing] = useState(false); + + const [webviewurlT, setWebviewurlT] = useState(''); + +useEffect(()=>{ + setWebviewurlT(filePath) +},[filePath]) + + return ( + + {processing && } + + + ); +} + +export default VideoScreen; diff --git a/PerformicsSrc/src/screens/VisitorFeedback.js b/PerformicsSrc/src/screens/VisitorFeedback.js new file mode 100644 index 0000000..7381b6d --- /dev/null +++ b/PerformicsSrc/src/screens/VisitorFeedback.js @@ -0,0 +1,1601 @@ +import { View, Text, TouchableOpacity, Image, FlatList, TextInput, Alert, ScrollView, Keyboard } from 'react-native' +import React, { useState, useEffect } from 'react'; +import { useRoute } from '@react-navigation/native'; +import { globalStyles, customStyles, GetPageTheme } from "../styles/Global"; +import moment from 'moment'; +import { AntDesign, Entypo, FontAwesome, FontAwesome5, Fontisto, Ionicons, MaterialCommunityIcons } from '../components/icons'; + +import Container from '../components/container'; +import CustomLoader from '../components/CustomLoader'; +import DrawerHeader from '../components/drawerHeader'; +import { db, common_ImagePath, ImageFolderPath, URL_IMAGE, VisitorImageFolderPath } from '../constants/constants'; +import { getAllFolderImages, getDownloadJson, marktext1, marktext2, resizeImage, restore_ImageWithMetaData, UploadData2, validateNumber } from '../controller/functions'; +import LinearGradient from 'react-native-linear-gradient'; +import { SvgXml } from 'react-native-svg'; +import cameraImg from '../assets/performics/camera_front_image.svg' +import * as RNFS from 'react-native-fs'; +import { notify } from '../components/notify'; +import { connect } from 'react-redux'; +import CustomCamera from '../components/Camera'; +import { mapStateToProps, mapDispatchToProps } from '../reducers/contextProvider'; +import { empdata } from '../screens/VisitorLogin' +import CustomHeader from '../components/customHeader'; +import { AppTables } from '../constants/tableConstants'; +import { ConfirmSaveAlert } from '../components/alert'; +import GradientButton from '../components/gradientButton'; +import ModalSelector from 'react-native-modal-selector'; +import MultiSelect from 'react-native-multiple-select'; +import { PageTheme } from '../styles/Themes'; +import DateTimePicker from '@react-native-community/datetimepicker'; +import DraggableFlatList, { ScaleDecorator } from 'react-native-draggable-flatlist' +import { getMethodName, METHODS } from '../constants/methodNames'; +import { getImagePOSTData, uploadAll_VisImages, UploadImagesWithoutWait } from '../constants/uploadData'; +import { Props } from 'react-native-image-zoom-viewer/built/image-viewer.type'; +import CustomModal from '../components/CustomModal'; +// import AudioRecorderPlayer, { AudioEncoderAndroidType, AudioSourceAndroidType, AVEncoderAudioQualityIOSType, AVEncodingOption, AVModeIOSOption } from 'react-native-audio-recorder-player'; + + +function VisitorFeedback(props) { + const route = useRoute(); + + const ST = props.StaticText || {}; + const projectCode = props.projectCode; + const PageTheme = GetPageTheme(props.DarkMode, route.name); + const customStyle = customStyles(props.DarkMode, route.name); + const d1 = new Date(); + const d2 = moment(d1).format('MM/DD/YYYY'); + const [visitorFeedback, setvisitorFeedback] = useState([]); + const [visitorFeedbackdata, setvisitorFeedbackdata] = useState([]); + const [processing, setProcessing] = useState(true); + const [loaderTitle, setLoaderTitle] = useState(); + const [getImageProps, setGetImageProps] = useState({}); + const [getEditData, setEditData] = useState({}); + + const [showCamera, setShowCamera] = useState(false); + const [image, setImage] = useState({}); + const [rerenderdata, setrerenderdata] = useState(0); + const [showAlert, setShowAlert] = useState(false); + const [SurveyQuestions, setSurveyQuestions] = useState([]); + + const [SurveySubCats, setSurveySubCats] = useState([]); + const [QuestionsData, setQuestionsData] = useState({}); + const [hasUnsavedChanges, setHasUnsavedChanges] = useState(false); + const [ShowCat, setShowCat] = useState(false); + const [removedVisitor, setRemovedVisitor] = useState({}); + const [showRemoveVistor, setShowRemoveVistor] = useState(false); + const [starCalQtns, setstarCalQtns] = useState([]); + + // const [visitors, setVisitors] = useState([]); + + + + useEffect(() => { + setLoaderTitle(ST.Loading + '...') + let params = props.route.params ? props.route.params : {}; + console.log('params', params) + getSurveyData(); + const willFocusSubscription = props.navigation.addListener('focus', () => { + console.log('getSurveyData onfocus'); + getSurveyData(); + }); + + return willFocusSubscription; + }, []); + + useEffect(() => { + const unsubscribe = props.navigation.addListener('beforeRemove', onBeforeRemove); + return unsubscribe; + }, [hasUnsavedChanges]); + + useEffect(() => { + const unsubscribe = props.navigation.addListener('beforeRemove', onBeforeRemove); + return unsubscribe; + }, [showCamera]); + + function onBeforeRemove(e) { + if (showCamera == true) { + e.preventDefault(); + setShowCamera(false); + } + else { + if (hasUnsavedChanges == true) { + e.preventDefault(); // Prevent default behavior of leaving the screen + onRemoveScreen(e); + } + else { + return; + } + } + } + + function onRemoveScreen(e) { + Alert.alert( + "", + ST.Doyoureallywanttoexitthescreen, + [ + { + text: ST.Cancel, + onPress: () => { }, + style: "cancel" + }, + { text: ST.OK, onPress: () => { setHasUnsavedChanges(false); props.navigation.dispatch(e.data.action); } } + ] + ); + } + + + + async function onSubmitData() { + let isvalid = await validate(); + if (isvalid) { + Keyboard.dismiss(); + setShowAlert(true); + } + } + + function onSaveCancel() { + setShowAlert(false); + } + + async function getSurveyData() { + console.log('getSurveyData') + try { + + await db.transaction(async function (txn) { + + + let q2 = `SELECT DISTINCT NAME,DESIGNATION,UPLOADSTATUS,IMAGE FROM ${AppTables.VISITOR_FEEDBACK} where VISIT_DATE='${d2}'`; + + console.log('q2', q2) + await txn.executeSql(q2, [], async function (txn2, txnres) { + console.log('feedback survey:', txnres.rows.length); + if (txnres.rows.length > 0) { + let arr = [], allQtns = [], allavgquest = []; + for (var i = 0; i < txnres.rows.length; i++) { + let data = txnres.rows.item(i); + + let all_scat_objet = await getSurveyQtns(); + + let all_scat_qtns = all_scat_objet.qtns != null ? all_scat_objet.qtns : [] + let all_scat_qtnsavg = all_scat_objet.avgqtns != null ? all_scat_objet.avgqtns : [] + + data['Questions'] = all_scat_qtns; + allQtns = allQtns.concat(all_scat_qtns); + allavgquest = allavgquest.concat(all_scat_qtnsavg); + + arr.push(data); + if (i == txnres.rows.length - 1) { + setSurveySubCats(arr); + setSurveyQuestions(allQtns); + setstarCalQtns(allavgquest); + + setProcessing(false); + } + } + } + + }, function (txnE, txnerr) { console.log(txnerr); },); + + }); + } catch (err) { + console.log(err); + } + } + + + + async function removeVisitor() { + let item = removedVisitor; + setShowRemoveVistor(false) + setLoaderTitle(ST.RemovingEmployee + '...'); + setProcessing(true); + + try { + await db.transaction(async function (txn) { + let data = visitorFeedbackdata; + var values = ''; + console.log('visitdata', data) + let selectlist = ` DISTINCT T.MaxLength as MaxLength,T.MinLength as MinLength,T.CategoryId,T.Category,T.LengthValidation as LengthValidation,T.QuestionImageAllow as QuestionImageAllow,T.DateRange as DateRange,T.Question as Question,T.QuestionId as QuestionId,T.QuestionType as QuestionType,T.OTP as OTP,T1.ANSWER As Answer, T1.ANSWER_ID as AnswerId,T1.IMAGE_ALLOW1 as ImageAllow1,T1.IMAGE1 as Image1,T1.IMAGE_ALLOW2 as ImageAllow2,T1.IMAGE2 as Image2,T1.MULTI_OPTIONS_IDS as multi_op_ids,T1.IS_DISABLED as isDisabled `; + //let sl=` DISTINCT mvf.MaxLength,mvf.MinLength,mvf.LengthValidation,Question,QuestionId,QuestionType,OTP,QuestionImageAllow,DateRange,QuestionCalculate`; + let join = `Inner join Master_VisitorFeedbackQuestion T on T1.QUESTION_ID=T.QuestionId`; + let q = ` DELETE FROM ${AppTables.VISITOR_FEEDBACK} where NAME='${item.NAME}' and DESIGNATION='${item.DESIGNATION}' and VISIT_DATE='${d2}' `; + await txn.executeSql(q, [], async function (txn2, txnres) { + let feedbackData = []; + let AllVisitorImages = []; + let questionData = []; + + if (txnres.rows.length > 0) { + feedbackData['Name'] = item.NAME; + feedbackData['Designation'] = item.DESIGNATION; + feedbackData['Image'] = item.IMAGE; + feedbackData['Date'] = d2; + feedbackData['UserId'] = props.UserId; + for (var i = 0; i < txnres.rows.length; i++) { + + let data = txnres.rows.item(i); + console.log('dataqtn', data) + // feedbackData.push(data) + + let id_key = data.QuestionId + '_AnswerId'; + let ans_key = data.QuestionId + '_Answer'; + let multi_key = data.QuestionId + '_MultiOption'; + let img_key1 = data.QuestionId + '_ImagePath1'; + let imgname_key1 = data.QuestionId + '_ImageName1'; + let img_key2 = data.QuestionId + '_ImagePath2'; + let imgname_key2 = data.QuestionId + '_ImageName2'; + + let { CategoryId, Category, DateRange, LengthValidation, MaxLength, MinLength, OTP, Question, QuestionId, QuestionImageAllow, QuestionType, imgallow1, imgallow2, imgName1, imgName2 } = data; + console.log('qtncategorys', data) + + let selansid = QuestionsData[id_key] || 0; + let selans = QuestionsData[ans_key] || ''; + imgName1 = QuestionsData[imgname_key1] || ''; + imgName2 = QuestionsData[imgname_key2] || ''; + let multiops = QuestionsData[multi_key] || ''; + // let isQtnDisabled=data.isDisabled!=null && data.isDisabled!=''?data.isDisabled?1:0:0; + // let allanss=qtn.Answers || {}; + // let ans_obj=allanss.find(i=>i.AnswerId==selansid) + // imgallow1=ans_obj!=null && ans_obj['ImageAllow1']!=null?ans_obj.ImageAllow1:false; + // imgallow2=ans_obj!=null && ans_obj['ImageAllow2']!=null?ans_obj.ImageAllow2:false; + // let f_imgalloq1=(QuestionImageAllow=='true' || QuestionImageAllow==1) || (imgallow1=='true' || imgallow1==1) + + // values+=` ('${d2}','${item.name}','${vfQuestion.designation}','${image.Visitor_Image}','${'I'}','${CategoryId}','${Question}','${QuestionId}','${QuestionType}','${selans}','${selansid}','${f_imgalloq1}','${(imgName1 || '')}','${imgallow2}','${(imgName2 || '')}','${multiops}','${isQtnDisabled}') `; + + + // let {EmpId, UserId,Answer,AnswerId,ImageAllow1,Image1,ImageAllow2,Image2,MultiOptionsIds} = '' + let obj1 = {}; + + obj1['CategoryId'] = CategoryId; + obj1['QuestionId'] = QuestionId; + obj1['QuestionType'] = QuestionType; + obj1['Answer'] = selans; + obj1['AnswerId'] = selansid; + obj1['MultiAnswerId'] = multiops != null && multiops != 'undefined' ? multiops : ''; + obj1['AnswerImage1'] = imgName1; + obj1['AnswerImage2'] = imgName2; + + + if (((QuestionImageAllow == 1 || QuestionImageAllow == 'true') || (imgallow1 == 1 | imgallow1 == 'true')) && imgName1 != '') { + let imgPath = VisitorImageFolderPath + imgName1; + let file = { + uri: imgPath, + type: 'image/jpeg', + name: imgName1, + filetype: 'image', + folderName: 'VisitorFeedbackImages', + } + AllVisitorImages.push(file); + } + + if ((imgallow2 == 1 || imgallow2 == 'true') && imgName2 != '') { + let imgPath = VisitorImageFolderPath + imgName2; + let file = { + uri: imgPath, + type: 'image/jpeg', + name: imgName2, + filetype: 'image', + folderName: 'VisitorFeedbackImages', + } + AllVisitorImages.push(file); + } + console.log('obj', feedbackData.push(obj)) + console.log('image', AllVisitorImages.push(obj)) + + questionData.push(obj1) + + if (i == txnres.rows.length - 1) { + feedbackData['feedbackData'] = questionData; + let tempData = visitorFeedbackdata; + let imgData = AllVisitorImages; + delete tempData.length; + delete imgData.length; + } + + } + + + } + + getSurveyData(); + + + + + }, function (txnE, txnerr) { console.log(txnerr); },); + + + + }); + } + catch (err) { + console.log('err', err); + setProcessing(false); + notify(ST.Errorwhileaddingemployee); + } + } + + + async function getSurveyQtns() { + let obj = { 'qtns': [], 'avgqtns': [] }; + // let {CategoryId}= catData; + // let {NAME,DESIGNATION}=vfData; + + return new Promise((resolve, reject) => { + try { + + db.transaction(async function (txn) { + + let sl = ` DISTINCT MaxLength,MinLength,LengthValidation,CategoryId,Category,Question,QuestionId,QuestionType,OTP,QuestionImageAllow,DateRange,QuestionCalculate`; + let q = ` SELECT ${sl} FROM Master_VisitorFeedbackQuestion `; + // console.log('catData',catData.CategoryId) + await txn.executeSql(q, [], async function (txn2, txnres2) { + + let arr = []; + let arr2 = []; + var QD = QuestionsData; + if (txnres2.rows.length > 0) { + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + + let answers = []; + if (data.QuestionType == 'List_Multi_Choice' || data.QuestionType == 'List_Single_Choice' || data.QuestionType == 'Rating') { + let allanswers = await getAnswers(data); + + answers = allanswers.Answers || []; + if (data.QuestionType == 'Rating') { + data.showRating = false; + } + } + else if (data.QuestionType == 'Date') { + data.showDatePicker = false; + } + + data.Answers = answers; + arr.push(data); + if (data.QuestionType == 'RatingStarCal') { + arr2.push(data) + } + if (i == txnres2.rows.length - 1) { + obj['qtns'] = arr; + obj['avgqtns'] = arr2; + setQuestionsData(arr); + resolve(obj); + } + } + } + else { + resolve(obj); + } + + }, function (txnE, txnerr) { console.log(txnerr); resolve(obj); },); + + + }); + } catch (err) { + console.log(err); + return obj; + } + }) + } + async function getAnswers(qtn) { + + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + // get inserted audits + let selectlist = ` DISTINCT Answer,AnswerId,ImageAllow1,ImageAllow2,EnableQuestion,DisableQuestion`; + // let join=` INNER JOIN Mapping_Survey M on T.SurveyId=M.SurveyId`; + let q2 = `Select ${selectlist} FROM Master_VisitorFeedbackQuestion WHERE QuestionId='${qtn.QuestionId}' ORDER BY AnswerSequence `; + console.log('q', q2) + + await txn.executeSql(q2, [], async function (txn2, txnres) { + // console.log('answers len',txnres.rows.length); + if (txnres.rows.length > 0) { + let arr = []; + for (var i = 0; i < txnres.rows.length; i++) { + let data = txnres.rows.item(i); + arr.push(data); + if (i == txnres.rows.length - 1) { + setSurveyQuestions(arr); + resolve(arr); + } + } + } + else { + resolve([]); + } + }, function (txnE, txnerr) { console.log(txnerr); resolve([]); },); + + }); + }).then((val) => { + return { 'Answers': val, 'Success': true }; + }).catch((err) => { + console.log(err); + return { 'Success': false, 'Error': err } + }); + } + + + + async function getImage(imgdata) { + let qtn = getImageProps.qtn || ''; + let type = getImageProps.type || '1'; + let imagetype = getImageProps.imagetype || '1'; + console.log('qtnGetImage in getImage', qtn) + console.log('typeGetImage', type) + console.log('imagetypeGetImage', imagetype) + if (typeof imgdata == 'object' && imgdata.errorCode == 'camera_unavailable') { + notify(ST.Cameraunavailable); + } + else if (typeof imgdata == 'object' && imgdata.uri != null) { + const img = imgdata; + const imgurl = img.uri, imgWidth = img.width, imgHeight = img.ExtendedHeight; + let isImgFromGallery = img.fromGallery != null ? img.fromGallery : false; + let picture_clickedd = isImgFromGallery == true ? img.datetime : new Date(); + + let picture_clicked_time = moment(picture_clickedd).format('MM-DD-YYYY HH:mm:ss') + let picture_clicked_time_for_pic_name = moment(picture_clickedd).format('MMDDYYYY_HHmmss') + + + console.log("time", picture_clicked_time); + console.log("time1", picture_clicked_time_for_pic_name); + let calculate_tym_date_for_filename = picture_clicked_time_for_pic_name; + let calculate_tym_date_over_img = picture_clicked_time; + + const mark_text1 = calculate_tym_date_over_img; + let mark_text2 = ''; + if (imagetype == 1) { + mark_text2 = 'User Name:' + props.UserId + ' | Employee Code:' + visitorFeedback.EMP_CODE + ' | Image Type: Visitor Logout' + ' | Date:' + calculate_tym_date_over_img; + } + else { + mark_text2 = 'User Name:' + props.UserId + ' | Employee Code:' + visitorFeedback.EMP_CODE + ' | Image Type: Visitor Feedback' + ' | Date:' + calculate_tym_date_over_img; + } + + + let filename = ''; + let image_key = ''; + let image_path_key = ''; + let allData = ''; + let qd = ''; + + if (imagetype == 1) { + filename = (props.UserId || '') + '_' + visitorFeedback.EMP_ID + '_VisitorLogoutImg-' + calculate_tym_date_for_filename + '.jpg'; + allData = image; + image_key = 'Visitor_Image'; + image_path_key = 'Visitor_ImagePath'; + allData[image_key] = filename; + + } + else { + qd = QuestionsData; + filename = (props.UserId || '') + '_' + visitorFeedback.EMP_ID + '_' + qtn.QuestionId + '_VisitorFeedbackImg_' + calculate_tym_date_for_filename + '.jpg'; + + image_key = type == '1' ? qtn.QuestionId + '_ImageName1' : qtn.QuestionId + '_ImageName2'; + image_path_key = type == '1' ? qtn.QuestionId + '_ImagePath1' : qtn.QuestionId + '_ImagePath2'; + + qd[image_key] = filename; + console.log('questiondata', qd) + + } + + + let imagePath = 'file://' + VisitorImageFolderPath + filename; + + RNFS.copyFile(imgurl, imagePath) + .then(async (resn) => { + // render data with clicked image + let uri = imagePath; + console.log('image marker', uri); + if (imagetype == 1) { + allData[image_path_key] = uri; + console.log('allDatavisitor', allData) + setImage(allData); + } + else { + qd[image_path_key] = uri; + setQuestionsData(qd); + } + + setHasUnsavedChanges(true); + setrerenderdata(!rerenderdata); + + // add metdata then resize image and restored back to the imagePath + let restore_data = { "destFilePath": imagePath, "imgurl": imgurl, imgWidth, imgHeight, mark_text1, mark_text2 } + let is_restored = await restore_ImageWithMetaData(restore_data, imgdata); + console.log("image restored:", is_restored); + }) + .catch(err => { + console.log('ERROR: image file write failed!!!'); + console.log(err.message, err.code); + }); + + } + + } + + + function getBottomText() { + let imagetype = getImageProps.imagetype || '1'; + if (imagetype == 1) { + return 'User Name:' + props.UserId + ' | Employee Code:' + visitorFeedback.EMP_CODE + ' | Image Type: Visitor Logout'; + } + else { + return 'User Name:' + props.UserId + ' | Employee Code:' + visitorFeedback.EMP_CODE + ' | Image Type: Visitor Feedback'; + } + } + + async function disableQtns() { + + if (DQtns.length > 0) { + new Promise.all( + DQtns.map((qid, q_index) => { + let s_qtnindex = sqtns.findIndex(i => i.QuestionId == qid) || {}; + console.log('sqtns qid', qid, s_qtnindex) + let s_qtn = sqtns[s_qtnindex]; + s_qtn['isDisabled'] = true + sqtns[s_qtnindex] = s_qtn; + let id_key = s_qtn.QuestionId + '_AnswerId'; + let ans_key = s_qtn.QuestionId + '_Answer'; + data[id_key] = 0; + data[ans_key] = ''; + return false + }) + ).then(async (val) => { + setSurveyQuestions(sqtns); + setQuestionsData(data); + setHasUnsavedChanges(true); + setrerenderdata(!rerenderdata); + }) + } + } + + async function enableQtns() { + new Promise.all( + EQtns.map((qid, q_index) => { + let s_qtnindex = sqtns.findIndex(i => i.QuestionId == qid) || {}; + let s_qtn = sqtns[s_qtnindex]; + s_qtn['isDisabled'] = false + sqtns[s_qtnindex] = s_qtn; + return false + }) + ).then(async (val) => { + if (DQtns.length > 0) { + disableQtns() + } + else { + setSurveyQuestions(sqtns); + setHasUnsavedChanges(true); + setrerenderdata(!rerenderdata); + } + }) + } + + function onselectionChange(option, qtn) { + let data = QuestionsData; + let id_key = qtn.QuestionId + '_AnswerId'; + let ans_key = qtn.QuestionId + '_Answer'; + data[id_key] = option.value; + data[ans_key] = option.label; + + setQuestionsData(data); + + let aq_ans = qtn.Answers != null ? qtn.Answers : []; + let ans_obj = aq_ans.find(i => i.AnswerId == option.value) || {}; + let EQtns = ans_obj.EnableQuestion != null && ans_obj.EnableQuestion != '' ? ans_obj.EnableQuestion.replace(' ', '').split(',') : []; + let DQtns = ans_obj.DisableQuestion != null && ans_obj.DisableQuestion != '' ? ans_obj.DisableQuestion.replace(' ', '').split(',') : []; + + console.log('EQtns:', EQtns, DQtns); + let sqtns = SurveyQuestions + if (EQtns.length > 0) { + enableQtns() + } + else if (DQtns.length > 0) { + disableQtns() + } + else { + setHasUnsavedChanges(true); + setrerenderdata(!rerenderdata); + } + } + + function setTextValue(value, qtn, type = '') { + if (value != '') { + let isValid = validateNumber(value, type); + if (!isValid) { + return; + } + } + + let id_key = qtn.QuestionId + '_AnswerId'; + let ans_key = qtn.QuestionId + '_Answer'; + + let obj = QuestionsData; + if (qtn.QuestionType == 'Date') { + let date_key = qtn.QuestionId + '_Date'; + let d = value != null ? new Date(value) : new Date(); + let mfdate = moment(d).format('MM/YYYY'); + showQtnDatePicker(qtn, false); + obj[id_key] = 0; + obj[ans_key] = mfdate; + obj[date_key] = moment(d).format('MM/DD/YYYY'); + } + else { + obj[id_key] = 0; + obj[ans_key] = value; + } + console.log(value, obj); + setQuestionsData(obj); + setHasUnsavedChanges(true); + setrerenderdata(!rerenderdata); + } + + function setRatingValue(data) { + // let ids=[]; + // data.map((item,index)=>{ + // ids.push(item.AnswerId); + // }) + setRatingOrder(data); + } + + function openVisitorFeedback() { + props.navigation.navigate('VisitorFeedbackQA'); + } + + function openVisitorFeedbackedit(item) { + console.log('itemvisitor', item) + props.navigation.navigate('VisitorFeedbackQA', { 'EditMode': true, 'visitoreditdata': item }); + setEditData({ 'visitoreditdata': item }) + } + + + + async function uploadVisitorFeedback(feedbackData, AllVisitorImages = []) { + const url = props.baseurl + getMethodName(METHODS.UPLOADJSON_METHOD); + console.log('pdurl', url) + + + let postData = { + 'MID': 0, + 'Keys': 'VisitorFeedbackQA', + 'JsonData': JSON.stringify(feedbackData), + 'UserId': props.UserId, + }; + + console.log('postData', postData) + UploadData2(url, postData) + .then(async (res) => { + console.log('res:', res); + if (res.UploadJsonResult != null && res.UploadJsonResult == 'Success') { + const url2 = (props.imageUploadUrl || URL_IMAGE) + getMethodName(METHODS.UPLOADIMAGES_METHOD); + console.log('url2', url2) + let allImageUploaded = await uploadAll_VisImages(props, AllVisitorImages); + + if (allImageUploaded == true) { + console.log('all Visitor image uploaded'); + + let isUpdated = await updateVLUploadStatus(); + if (isUpdated) { + notify('Uploaded successully'); + } + getSurveyData(); + setProcessing(false); + + } + else { + setProcessing(false); + notify('CannotuploadvisitorfeedbackQAdata'); + } + + } else { + setProcessing(false); + notify('CannotuploadvisitorfeedbackQAdata'); + } + }) + .catch((err) => { + console.log(err); + setProcessing(false); + notify('CannotuploadvisitorfeedbackQAdata'); + }); + + } + + + + async function openCamera(qtn, type, imagetype) { + console.log('qtnsetImage', qtn) + console.log('typesetImage', type) + console.log('imagetypesetImage', imagetype) + setGetImageProps({ 'qtn': qtn, 'type': type, 'imagetype': imagetype }); + setShowCamera(true); + // props.navigation.navigate('CameraScreen',{'getImage':getImage,'cameraType':'front'}) + } + + function render_Picker(label_key, value_key, onChange = () => { }, selected_data = {}) { + var data = []; + let qtn = selected_data.qtn || {}; + let isQtnDisabled = qtn.isDisabled != null && qtn.isDisabled != '' ? qtn.isDisabled : false; + let allAnswers = qtn.Answers || []; + + allAnswers.map((item, index) => { + let obj = { key: index, label: item[label_key], value: item[value_key] }; + if (selected_data.value == item[label_key]) + obj['component'] = {item[label_key]}; + data.push(obj); + }); + + return ( + { onChange(option, qtn) }} + overlayStyle={customStyle.addVisPickerOverlay} + cancelContainerStyle={customStyle.addVisPicker_OptionContainerStyle} + optionStyle={customStyle.addvis_opStyle} + optionTextStyle={customStyle.addvis_opTextStyle} + optionContainerStyle={customStyle.addVisPicker_OptionContainerStyle} + selectedKey={'1'} + disabled={isQtnDisabled} + cancelText={ST.Cancel} + > + {(selected_data.value != null && selected_data.value != '' ? selected_data.value : '-select-')} + + ) + } + + + async function uploadData(item) { + setHasUnsavedChanges(false); + setShowAlert(false); + setLoaderTitle(ST.SavingData + '...'); + setProcessing(true); + + try { + let AllVisitorImages = await getAllFolderImages(); + await db.transaction(async function (txn) { + let data = visitorFeedbackdata; + var values = ''; + console.log('visitdata', item.NAME) + let selectlist = ` DISTINCT T.MaxLength as MaxLength,T.MinLength as MinLength,T.CategoryId,T.Category,T.LengthValidation as LengthValidation,T.QuestionImageAllow as QuestionImageAllow,T.DateRange as DateRange,T.Question as Question,T.QuestionId as QuestionId,T.QuestionType as QuestionType,T.OTP as OTP,T1.ANSWER As Answer, T1.ANSWER_ID as AnswerId,T1.IMAGE_ALLOW1 as ImageAllow1,T1.IMAGE1 as Image1,T1.IMAGE_ALLOW2 as ImageAllow2,T1.IMAGE2 as Image2,T1.MULTI_OPTIONS_IDS as multi_op_ids,T1.IS_DISABLED as isDisabled `; + //let sl=` DISTINCT mvf.MaxLength,mvf.MinLength,mvf.LengthValidation,Question,QuestionId,QuestionType,OTP,QuestionImageAllow,DateRange,QuestionCalculate`; + let join = `Inner join Master_VisitorFeedbackQuestion T on T1.QUESTION_ID=T.QuestionId`; + let q = ` SELECT ${selectlist} FROM ${AppTables.VISITOR_FEEDBACK} T1 ${join} where T1.NAME='${item.NAME}' and T1.DESIGNATION='${item.DESIGNATION}' and T1.VISIT_DATE='${d2}' `; + + await txn.executeSql(q, [], async function (txn2, txnres) { + var values = ''; + let feedbackData = {}; + let questionData = []; + + + if (txnres.rows.length > 0) { + feedbackData['Name'] = item.NAME; + feedbackData['Designation'] = item.DESIGNATION; + feedbackData['Image'] = item.IMAGE; + feedbackData['VisitDate'] = d2; + feedbackData['UserId'] = props.UserId; + for (var i = 0; i < txnres.rows.length; i++) { + let obj1 = {}; + let data = txnres.rows.item(i); + console.log('dataqtn', data) + // feedbackData.push(data) + + + let id_key = data.QuestionId + '_AnswerId'; + let ans_key = data.QuestionId + '_Answer'; + let multi_key = data.QuestionId + '_MultiOption'; + let img_key1 = data.QuestionId + '_ImagePath1'; + let imgname_key1 = data.QuestionId + '_ImageName1'; + let img_key2 = data.QuestionId + '_ImagePath2'; + let imgname_key2 = data.QuestionId + '_ImageName2'; + + let { CategoryId, Category, DateRange, LengthValidation, MaxLength, MinLength, OTP, Question, QuestionId, QuestionImageAllow, QuestionType, imgallow1, imgallow2, imgName1, imgName2 } = data; + console.log('qtncategorys', data) + + let selansid = QuestionsData[id_key] || 0; + let selans = QuestionsData[ans_key] || ''; + imgName1 = QuestionsData[imgname_key1] || ''; + imgName2 = QuestionsData[imgname_key2] || ''; + let multiops = QuestionsData[multi_key] || ''; + // let isQtnDisabled=data.isDisabled!=null && data.isDisabled!=''?data.isDisabled?1:0:0; + // let allanss=qtn.Answers || {}; + // let ans_obj=allanss.find(i=>i.AnswerId==selansid) + // imgallow1=ans_obj!=null && ans_obj['ImageAllow1']!=null?ans_obj.ImageAllow1:false; + // imgallow2=ans_obj!=null && ans_obj['ImageAllow2']!=null?ans_obj.ImageAllow2:false; + // let f_imgalloq1=(QuestionImageAllow=='true' || QuestionImageAllow==1) || (imgallow1=='true' || imgallow1==1) + + // values+=` ('${d2}','${item.name}','${vfQuestion.designation}','${image.Visitor_Image}','${'I'}','${CategoryId}','${Question}','${QuestionId}','${QuestionType}','${selans}','${selansid}','${f_imgalloq1}','${(imgName1 || '')}','${imgallow2}','${(imgName2 || '')}','${multiops}','${isQtnDisabled}') `; + + + // let {EmpId, UserId,Answer,AnswerId,ImageAllow1,Image1,ImageAllow2,Image2,MultiOptionsIds} = '' + obj1['CategoryId'] = CategoryId; + obj1['QuestionId'] = QuestionId; + obj1['QuestionType'] = QuestionType; + obj1['Answer'] = item.ANSWER; + obj1['AnswerId'] = selansid; + obj1['MultiAnswerId'] = multiops != null && multiops != 'undefined' ? multiops : ''; + obj1['AnswerImage1'] = imgName1; + obj1['AnswerImage2'] = imgName2; + obj1['UserId'] = props.UserId; + + // if(((QuestionImageAllow==1 || QuestionImageAllow=='true') || (imgallow1==1 | imgallow1=='true')) && imgName1!=''){ + // let imgPath=VisitorImageFolderPath+imgName1; + // let file={ + // uri: imgPath, + // type: 'image/jpeg', + // name: imgName1, + // filetype:'image', + // folderName:'VisitorFeedbackImages', + // } + // AllVisitorImages.push(file); + // } + + // if((imgallow2==1 || imgallow2=='true') && imgName2!='' ){ + // let imgPath=VisitorImageFolderPath+imgName2; + // let file={ + // uri: imgPath, + // type: 'image/jpeg', + // name: imgName2, + // filetype:'image', + // folderName:'VisitorFeedbackImages', + // } + // AllVisitorImages.push(file); + // } + // console.log('obj',feedbackData.push(obj)) + // console.log('image',AllVisitorImages.push(obj)) + + questionData.push(obj1) + + if (i == txnres.rows.length - 1) { + feedbackData['feedbackData'] = questionData; + uploadVisitorFeedback(feedbackData, AllVisitorImages); + notify('visitor feedback updated successfully'); + notify('Data and Images Uploaded') + // props.set_autoback({'AutoGoToPrev':true}); + setProcessing(true); + } + + } + + } + + + + + }, function (txnE, txnerr) { console.log(txnerr); },); + + }); + } + catch (err) { + console.log('err', err); + setProcessing(false); + notify(ST.Errorwhileaddingemployee); + } + + } + + + + + + async function updateVLUploadStatus() { + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + + let q = `Update ${AppTables.VISITOR_FEEDBACK} SET UPLOADSTATUS='U' WHERE VISIT_DATE='${d2}'`; + console.log('q', q) + await txn.executeSql(q, [], async function (txn2, txnres) { + console.log('Visitor Updated'); + let allVisitors = SurveySubCats; + // let thisVisIndex=SurveySubCats.findIndex(i=>i.NAME==item.NAME); + // if(thisVisIndex>=0){ + let thisVis = allVisitors || {}; + thisVis['UPLOADSTATUS'] = 'U'; + // allVisitors[thisVisIndex]=thisVis; + setSurveySubCats(allVisitors); + setrerenderdata(!rerenderdata); + resolve(true); + // } + }, function (txnE, txnerr) { console.log(txnerr); resolve(false); },); + + }); + }).then((val) => { + return val; + }).catch((err) => { + console.log(err); + return false; + }); + } + + + + + + async function validate() { + // let Image1MandIndex='Image1Mandatory'; + // let Image1MandObj=Image1MandIndex>=0?KPIFields[Image1MandIndex]:{}; + let isImage1Mand = true; + + // let Image2MandIndex=KPIFields.findIndex(i=>i.KPIFieldName=='Image2Mandatory'); + // let Image2MandObj=Image2MandIndex>=0?KPIFields[Image2MandIndex]:{}; + let isImage2Mand = false; + + + + var isvalid = true; + const QD = QuestionsData; + + if (image.Visitor_ImagePath == '' && image.Visitor_ImagePath == null) { + isvalid = false; + notify(ST.Pleaseaddimages, 'SHORT'); + } + else { + for (var i = 0; i < SurveyQuestions.length; i++) { + let qtn = SurveyQuestions[i]; + let selansid = '', selanswer = '', selimg = '', showImageTag = false, showImageTag2 = false; + let id_key = qtn.QuestionId + '_AnswerId'; + let ans_key = qtn.QuestionId + '_Answer'; + let multi_key = qtn.QuestionId + '_MultiOption'; + let date_key = qtn.QuestionId + '_Date'; + let img_key = qtn.QuestionId + '_ImagePath1'; + let imgname_key = qtn.QuestionId + '_ImageName1'; + // console.log('imgname_key',imgname_key) + let img_key2 = qtn.QuestionId + '_ImagePath2'; + let imgname_key2 = qtn.QuestionId + '_ImageName2'; + let rating_key = qtn.QuestionId + '_Rating'; + let voiceClip_key = qtn.QuestionId + '_VoiceClip'; + let list_mcdata = []; + + let isDisabled = qtn.isDisabled != null ? qtn.isDisabled : false + // let img_keyfeedback=qtn.QuestionId+'_ImagePath1':qtn.QuestionId+'_ImagePath2'; + // let imgname_keyfeedback=qtn.QuestionId+'_ImageName1':qtn.QuestionId+'_ImageName2'; + + // let Image1=image[image_path_key] || ''; + // let Image2=QD[imgname_keyfeedback] || ''; + + if (isDisabled == true) { + + } + else { + let isImgAllowed = (qtn.QuestionImageAllow == true || qtn.QuestionImageAllow == 'true' || qtn.QuestionImageAllow == 1); + let checkForAnsKey = (qtn.QuestionType == 'Decimal' || qtn.QuestionType == 'Number' || qtn.QuestionType == 'Text' || qtn.QuestionType == 'Date' || qtn.QuestionType == 'Rating'); + if (qtn.QuestionType == 'List_Single_Choice') { + selansid = QD[id_key]; + } + else if (qtn.QuestionType == 'List_Multi_Choice') { + selansid = QD[multi_key] != null && QD[multi_key] != '' ? QD[multi_key].split(',') : []; + } + + + if (qtn.QuestionType == 'List_Multi_Choice' && selansid.length <= 0) { + isvalid = false; + notify(ST.Pleaseselectoptionsfortherequiredfield, 'SHORT'); + break; + } + + else if (checkForAnsKey && (Object.keys(QD).indexOf(ans_key) < 0 || (Object.keys(QD).indexOf(ans_key) >= 0 && QD[ans_key] === ''))) { + isvalid = false; + let msg = (qtn.QuestionType == 'Date' ? ST.Pleasepickadate : (qtn.QuestionType == 'Rating' ? ST.Pleaseselectrating : ST.Pleasefillalldetails)); + notify(msg, 'SHORT'); + break; + } + else if (qtn.QuestionType == 'Audio' && (Object.keys(QD).indexOf(voiceClip_key) < 0 || (Object.keys(QD).indexOf(voiceClip_key) >= 0 && (QD[voiceClip_key] == null || QD[voiceClip_key].filename == null || QD[voiceClip_key].filename == '')))) { + isvalid = false; + notify(ST.Pleaserecordaudioclipfortherequiredfield, 'SHORT'); + break; + } + else if (Object.keys(QD).indexOf(id_key) < 0 || (Object.keys(QD).indexOf(id_key) >= 0 && (QD[id_key] === ''))) { + isvalid = false; + notify(ST.Pleasefillalldetails, 'SHORT'); + console.log(QD[id_key], QD, id_key) + break; + } + else if (isImgAllowed && (Object.keys(QD).indexOf(img_key) < 0 || (Object.keys(QD).indexOf(img_key) >= 0 && QD[img_key] === ''))) { + isvalid = false; + notify(ST.Pleaseaddimages, 'SHORT'); + break; + } + + // else if(imgname_key=='' || imgname_key==null){ + // isvalid=false; + // notify(ST.Pleaseaddimages,'SHORT'); + else { + console.log('no condition found'); + } + + if ((qtn.QuestionType == 'List_Single_Choice' || qtn.QuestionType == 'List_Multi_Choice')) { + if (qtn.Answers && qtn.Answers.length > 0) { + for (var j = 0; j < qtn.Answers.length; j++) { + let ansss = qtn.Answers[j]; + let isandImgAl = (ansss.ImageAllow1 == true || ansss.ImageAllow1 == 'true' || ansss.ImageAllow1 == 1); + if (qtn.QuestionType == 'List_Single_Choice' && (isandImgAl && ansss.AnswerId == selansid)) { + showImageTag = true; + } + else if (qtn.QuestionType == 'List_Multi_Choice' && (isandImgAl && selansid.indexOf(ansss.AnswerId) >= 0)) { + showImageTag = true; + } + + let isandImgAl2 = (ansss.ImageAllow2 == true || ansss.ImageAllow2 == 'true' || ansss.ImageAllow2 == 1); + if (qtn.QuestionType == 'List_Single_Choice' && (isandImgAl2 && ansss.AnswerId == selansid)) { + showImageTag2 = true; + } + else if (qtn.QuestionType == 'List_Multi_Choice' && (isandImgAl2 && selansid.indexOf(ansss.AnswerId) >= 0)) { + showImageTag2 = true; + } + } + + } + + + } + if ((isImage1Mand == '1' || isImage1Mand == true) && showImageTag && (Object.keys(QD).indexOf(img_key) < 0 || (Object.keys(QD).indexOf(img_key) >= 0 && QD[img_key] === ''))) { + isvalid = false; + notify(ST.Pleaseaddimages, 'SHORT'); + break; + } + + if ((isImage2Mand == '1' || isImage2Mand == true) && showImageTag2 && (Object.keys(QD).indexOf(img_key2) < 0 || (Object.keys(QD).indexOf(img_key2) >= 0 && QD[img_key2] === ''))) { + isvalid = false; + notify(ST.Pleaseaddimages, 'SHORT'); + break; + } + + } + + } + } + + return isvalid; + } + + + function _render_RemoveAlert() { + let data = removedVisitor; + return ( + + + { setShowRemoveVistor(false) }}> + {ST.Cancel} + + { removeVisitor(removedVisitor) }}> + {ST.Yes} + + + + ) + } + + function renderDatePicker(qtn) { + let qtnn = qtn; + let DateRange = qtn.DateRange; + let maxDate = moment().add(10, 'years').format('MM/DD/YYYY'); + let minDate = moment().subtract(10, 'years').format('MM/DD/YYYY'); + if (DateRange == 'RFD') { + maxDate = moment().format('MM/DD/YYYY'); + } + else if (DateRange == 'RPD') { + minDate = moment().format('MM/DD/YYYY'); + } + + return ( + { setTextValue(selectedDate, qtnn) }} + maximumDate={new Date(maxDate)} + minimumDate={new Date(minDate)} + /> + ); + } + + function renderItem({ }) { + return ( + + + {item.Answer} + + + ); + }; + + + function renderRatingView() { + let qtn = RatingQtn; + let Answers = qtn.Answers; + let id_key = qtn.QuestionId + '_AnswerId'; + let ans_key = qtn.QuestionId + '_Answer'; + let rating_key = qtn.QuestionId + '_Rating'; + // let ratings=QuestionsData[rating_key]!=null?QuestionsData[rating_key].split(','):[]; + + let newarr = RatingOrder; + if (RatingOrder.length <= 0) { + newarr = Answers; + } + + return ( + + + {ST.DragItemsInOrder} + {ST.Pressandholdtodrag} + {setRatingValue(data)}} + // keyExtractor={(item) => item.AnswerId} + // renderItem={renderItem} + /> + + { onRatingCancel() }}> + {ST.Cancel} + + { onRatingSave() }}> + {ST.Save} + + + + + ) + } + + function _renderSurveyQtns(subcat) { + const SurveyQuestions = subcat.Questions; + console.log('SurveyQuestions123', SurveyQuestions) + return ( + + { + + SurveyQuestions.map((item, index) => { + + let qtn = item; + console.log('rendersurveyqtn', qtn) + let selansid = '', selanswer = '', selimg = '', selimg2 = '', showImageTag = false, showImageTag2 = false; + let id_key = qtn.QuestionId + '_AnswerId'; + let ans_key = qtn.QuestionId + '_Answer'; + let multi_key = qtn.QuestionId + '_MultiOption'; + let date_key = qtn.QuestionId + '_Date'; + let img_key = qtn.QuestionId + '_ImagePath1'; + let imgname_key = qtn.QuestionId + '_ImageName1'; + let img_key2 = qtn.QuestionId + '_ImagePath2'; + let imgname_key2 = qtn.QuestionId + '_ImageName2'; + let rating_key = qtn.QuestionId + '_Rating'; + let voiceClip_key = qtn.QuestionId + '_VoiceClip'; + let list_mcdata = []; + + if (qtn.QuestionType == 'List_Single_Choice') { + selansid = QuestionsData[id_key] != null ? QuestionsData[id_key] : ''; + selanswer = QuestionsData[ans_key] != null ? QuestionsData[ans_key] : ''; + } + else if (qtn.QuestionType == 'List_Multi_Choice') { + + if (qtn.Answers != null) { + console.log('qtn.Answers:', qtn.Answers.length); + for (var i = 0; i < qtn.Answers.length; i++) { + let obj = { 'AnswerId': parseInt(qtn.Answers[i].AnswerId), 'Answer': qtn.Answers[i].Answer }; + list_mcdata.push(obj); + } + } + selansid = QuestionsData[multi_key] != null && QuestionsData[multi_key] != '' ? QuestionsData[multi_key].split(',') : []; + if (selansid != null && selansid.length > 0) { + let arr = []; + for (var i = 0; i < selansid.length; i++) { + arr.push(parseInt(selansid[i])); + } + selansid = arr; + } + } + else if (qtn.QuestionType == 'Number' || qtn.QuestionType == 'Text' || qtn.QuestionType == 'Decimal' || qtn.QuestionType == 'Date') { + selansid = QuestionsData[ans_key]; + selanswer = (qtn.QuestionType == 'Date') ? (QuestionsData[date_key] || moment().format('MM/DD/YYYY')) : ''; + showImageTag = (qtn.QuestionImageAllow == true || qtn.QuestionImageAllow == 'true' || qtn.QuestionImageAllow == 1); + showImageTag2 = false; + } + else if (qtn.QuestionType == 'Rating') { + selanswer = QuestionsData[ans_key] ? QuestionsData[ans_key] : ''; + } + else if (qtn.QuestionType == 'Audio') { + selansid = QuestionsData[ans_key] ? QuestionsData[ans_key] : ''; + selanswer = QuestionsData[voiceClip_key] ? (QuestionsData[voiceClip_key].filename || '') : ''; + } + + if ((qtn.QuestionType == 'List_Single_Choice' || qtn.QuestionType == 'List_Multi_Choice')) { + if (qtn.Answers && qtn.Answers.length > 0) { + for (var i = 0; i < qtn.Answers.length; i++) { + let ansss = qtn.Answers[i]; + + let isandImgAl = (ansss.ImageAllow1 == true || ansss.ImageAllow1 == 'true' || ansss.ImageAllow1 == 1); + let isandImgAl2 = (ansss.ImageAllow2 == true || ansss.ImageAllow2 == 'true' || ansss.ImageAllow2 == 1); + + if (qtn.QuestionType == 'List_Single_Choice' && (isandImgAl && ansss.AnswerId == selansid)) { + showImageTag = true; + } + else if (qtn.QuestionType == 'List_Multi_Choice' && (isandImgAl && selansid.indexOf(ansss.AnswerId) >= 0)) { + showImageTag = true; + } + + if (qtn.QuestionType == 'List_Single_Choice' && (isandImgAl2 && ansss.AnswerId == selansid)) { + showImageTag2 = true; + } + else if (qtn.QuestionType == 'List_Multi_Choice' && (isandImgAl2 && selansid.indexOf(ansss.AnswerId) >= 0)) { + showImageTag2 = true; + } + } + } + } + + if (showImageTag) { + selimg = QuestionsData[img_key] != null && QuestionsData[img_key] != '' ? 'file://' + QuestionsData[img_key] : ''; + } + + if (showImageTag2) { + selimg2 = QuestionsData[img_key2] != null && QuestionsData[img_key2] != '' ? 'file://' + QuestionsData[img_key2] : ''; + } + + let isDisabled = qtn.isDisabled != null ? qtn.isDisabled : false + console.log('isDisabled', qtn.QuestionId, qtn.isDisabled, isDisabled) + if (isDisabled == true) { + return ( + + ) + } + else { + return ( + + {qtn.Question} + {qtn.QuestionType == 'List_Single_Choice' && qtn.Answers && + render_Picker('Answer', 'AnswerId', onselectionChange, { value: selanswer, qtn: qtn }) + } + {qtn.QuestionType == 'List_Multi_Choice' && qtn.Answers && + { console.log('onSelectedItemsChange'); setMultiSelectValue(selectedItems, qtn) }} + selectedItems={selansid} + selectText="Pick Items" + searchInputPlaceholderText="Search Items..." + // onChangeInput={ (text)=> console.log(text)} + tagRemoveIconColor={PageTheme.$primary_color} + tagBorderColor={PageTheme.$primary_color} + tagTextColor={PageTheme.$primary_color} + selectedItemTextColor={PageTheme.$primary_color} + selectedItemIconColor={PageTheme.$primary_color} + tagContainerStyle={{ height: 30, width: '100%', paddingVertical: 5 }} + styleTextTag={{ fontSize: 14 }} + itemTextColor={PageTheme.$text_color} + displayKey="Answer" + searchInputStyle={{ color: '#CCC' }} + submitButtonColor={PageTheme.$primary_color} + submitButtonText="Submit" + /> + } + {(qtn.QuestionType == 'Number' || qtn.QuestionType == 'Decimal' || qtn.QuestionType == 'Text') && + { setTextValue(val, qtn, (qtn.QuestionType == 'Decimal' ? 'decimal' : (qtn.QuestionType == 'Text' ? 'text' : 'numeric'))) }} + /> + } + { + (qtn.QuestionType == 'Date') && + + {selansid != '' ? selansid : 'MM/YYYY'} + { setDateValue(selanswer); showQtnDatePicker(qtn, true) }}> + + + + } + {((qtn.showDatePicker == true || qtn.showDatePicker == 'true') && (qtn.QuestionType == 'Date')) && + renderDatePicker(qtn) + } + { + (qtn.QuestionType == 'Rating') && + + {selanswer} + { setRatingQtn(qtn); setShowRating(true); }}> + + + + } + + { + (qtn.QuestionType == 'Audio') && + + {selanswer} + { show_recorder(qtn); }}> + + + + } + + { + showImageTag && + + + { openCamera(qtn, '1', '2') }}> + + + + } + + { + showImageTag2 && + + + { openCamera(qtn, '2', '2') }}> + + + + } + + ) + } + + }) + } + + + ); + } + + function renderRecorderView() { + + let qtn = RatingQtn; + let isRecorderPlaying = VRS.RecorderPlayStatus != null && VRS.RecorderPlayStatus == true; + let isPlayerPlaying = VRS.PlayerPlayStatus != null && VRS.PlayerPlayStatus == true; + const scale = animatedRipple.interpolate({ + inputRange: [0, 1], + outputRange: [1, 1.3], + }); + + const borderColor = animatedRipple.interpolate({ + inputRange: [0, 1], + outputRange: ['#f5acb4c2', '#fce6e9e3'], + }); + + const scale2 = animatedRipple2.interpolate({ + inputRange: [0, 1], + outputRange: [1, 1.5], + }); + + const borderColor2 = animatedRipple2.interpolate({ + inputRange: [0, 1], + outputRange: ['#f5acb4c2', '#fce6e9e3'], + }); + + let totalDuration = RecorderTimer.recordSecs != null ? RecorderTimer.recordSecs : playerTimer.totalDuration; + let wp = totalDuration != null ? Math.floor((playerTimer.playerSecs / totalDuration) * 100) : 0; + let width1 = wp <= 100 ? (wp > 0 ? wp + '%' : '0%') : '100%'; + if (isNaN(wp)) width1 = '0%'; + + return ( + + {rerenderView == rerenderView && + + {ST.RecordVoiceClip} + {ST.Youcanrecordmaxfor60secs} + {VoiceRecorderStatus} + + + + + + { startRecorder(storeData, qtn, ActiveSurvey, VRS); }}> + + + {isRecorderPlaying && + { stopRecorder(VRS); }}> + + + } + + + + {RecorderTimer.recordTime} + { + (!isRecorderPlaying && RecFilePath.filename != null && RecFilePath.filename != '') && + + + + + + + {`${(playerTimer.playTime || '00:00:00')} / ${playerTimer.playDuration || RecorderTimer.recordTime}`} + + + + { let url = (Platform.OS == 'ios' ? 'file://' : '') + VisitorImageFolderPath + 'Recordings/' + RecFilePath.filename; (wp < 100 && wp > 0) ? resumePlayer(url) : startPlayer(url, VRS); }}> + + + {isPlayerPlaying && { wp < 100 ? pausePlayer() : stopPlayer(VRS); }}> + + } + + + } + + + + { onRecordCancel() }}> + {ST.Cancel} + + { onRecordSave() }}> + {ST.Save} + + + } + + ) + } + + async function onDelete(item) { + + if (item.UPLOADSTATUS == 'U') { + setProcessing(false); + notify(ST.Dataalreadyuploaded + ' ' + ST.Cannotdeletevisitornow); + } + + else { + console.log('delete emp') + setRemovedVisitor(item); + setShowRemoveVistor(true); + } + } + + + function _renderSurveyView() { + return ( + + { + let subcat = item, s_index = index; + console.log('subcat', subcat) + + return ( + + + {subcat.Category} + + + {_renderSurveyQtns(subcat)} + + + ) + }} + > + + + + ); + } + + return ( + + + + {/* {processing && } */} + + + {_render_RemoveAlert()} + + { setShowCamera(false); getImage(imgData) }} showCamera={showCamera} onHideCamera={() => { setShowCamera(false); }} /> + + {/* */} + + + + {/* */} + + {'Feedback'} + {/* {openVisitorFeedback(item)}}> + {'Edit'} + */} + { openVisitorFeedback() }}> + {'Add'} + + {/* {visitorFeedback.NAME} */} + + + + + + {ST.Name} + + + {ST.Designation} + + + {ST.Actions} + + + + { + SurveySubCats.length > 0 && + SurveySubCats.map((item, index) => { + // console.log('visiteor item:',item) + return ( + + + {item.NAME} + + + {item.DESIGNATION} + + + {item.UPLOADSTATUS == 'I' && + // {openVisitorFeedbackedit(item)}}> + // {'Edit'} + // + + { onDelete(item) }}> + + + } + + {item.UPLOADSTATUS == 'I' && + { uploadData(item) }}> + {'Upload'} + + + + + } + + {item.UPLOADSTATUS == 'U' && + + + {ST.Uploaded} + + } + + + + ) + }) + } + + + + + + + + ) + +} +export default connect(mapStateToProps, mapDispatchToProps)(VisitorFeedback); \ No newline at end of file diff --git a/PerformicsSrc/src/screens/VisitorFeedbackQA.js b/PerformicsSrc/src/screens/VisitorFeedbackQA.js new file mode 100644 index 0000000..f09bda6 --- /dev/null +++ b/PerformicsSrc/src/screens/VisitorFeedbackQA.js @@ -0,0 +1,1645 @@ +import { View, Text,TouchableOpacity,Image,FlatList,TextInput,Alert, ScrollView, Keyboard} from 'react-native' +import React,{useState,useEffect} from 'react'; +import {useRoute} from '@react-navigation/native'; +import { globalStyles,customStyles,GetPageTheme } from "../styles/Global"; +import moment from 'moment'; +import {AntDesign, Entypo, FontAwesome, FontAwesome5, Fontisto, MaterialCommunityIcons} from '../components/icons'; + +import Container from '../components/container'; +import CustomLoader from '../components/CustomLoader'; +import {db, ImageFolderPath, URL_IMAGE, VisitorImageFolderPath} from '../constants/constants'; +import {getAllFileForAFolder, getAllFolderImages, getDownloadJson,marktext1,marktext2, resizeImage, restore_ImageWithMetaData, UploadData2, validateNumber} from '../controller/functions'; +import LinearGradient from 'react-native-linear-gradient'; +import CameraImg from '../assets/performics/camera_front_image.svg' +import * as RNFS from 'react-native-fs'; +import {notify} from '../components/notify'; +import { connect } from 'react-redux'; +import CustomCamera from '../components/Camera'; +import { mapStateToProps,mapDispatchToProps } from '../reducers/contextProvider'; +import {empdata} from './VisitorLogin' +import CustomHeader from '../components/customHeader'; +import { AppTables } from '../constants/tableConstants'; +import { ConfirmSaveAlert } from '../components/alert'; +import GradientButton from '../components/gradientButton'; +import ModalSelector from 'react-native-modal-selector'; +import MultiSelect from 'react-native-multiple-select'; +import DateTimePicker from '@react-native-community/datetimepicker'; +import DraggableFlatList,{ScaleDecorator} from 'react-native-draggable-flatlist' +import { getMethodName, METHODS } from '../constants/methodNames'; +import { getImagePOSTData, uploadAll_VisImages, UploadImagesWithoutWait } from '../constants/uploadData'; +// import AudioRecorderPlayer, { AudioEncoderAndroidType, AudioSourceAndroidType, AVEncoderAudioQualityIOSType, AVEncodingOption, AVModeIOSOption } from 'react-native-audio-recorder-player'; + + +function VisitorFeedbackQA(props){ + const route = useRoute(); + + const ST=props.StaticText || {}; + const projectCode=props.projectCode; + const PageTheme=GetPageTheme(props.DarkMode,route.name); + const customStyle=customStyles(props.DarkMode,route.name); + const d1=new Date(); + const d2=moment(d1).format('MM/DD/YYYY'); + const [visitorFeedback, setvisitorFeedback] = useState([]); + const [processing, setProcessing] = useState(true); + const [loaderTitle, setLoaderTitle] = useState(); + const [getImageProps,setGetImageProps]= useState({}); + const [showCamera, setShowCamera] = useState(false); + const [image, setImage]= useState({}); + const [rerenderdata, setrerenderdata]= useState(0); + const [showAlert, setShowAlert] = useState(false); + const [SurveyQuestions, setSurveyQuestions]= useState([]); + + const [SurveySubCats, setSurveySubCats]= useState([]); + const [QuestionsData,setQuestionsData]=useState({}); + const [hasUnsavedChanges,setHasUnsavedChanges] = useState(false); + const [EditMode, setEditMode] = useState(false); + const [vfQuestion, setvfQuestion] = useState({}); + const [defaultRating, setDefaultRating] = useState(2); + const [starCalQtns, setstarCalQtns] = useState([]); + + const StartCount= 5; + const [maxRating, setMaxRating] = useState([]); + + +// const [visitors, setVisitors] = useState([]); + + + useEffect(() => { + setLoaderTitle(ST.Loading+'...') + let params=props.route.params? props.route.params:{}; + console.log('params',params) + let visitorfeedbackData=params.visitoreditdata || {}; + let editMode1=params.EditMode || false; + setEditMode(editMode1); + console.log('visitorfeedbackData',visitorfeedbackData.NAME) + setvisitorFeedback(visitorfeedbackData); + getData(editMode1,visitorfeedbackData); + console.log('props',props.UserId) + // addEmpl(); + return function cleanup() { + props.navigation.removeListener('beforeRemove', onBeforeRemove); + }; + + },[]); + + useEffect(() => { + const unsubscribe=props.navigation.addListener('beforeRemove', onBeforeRemove); + return unsubscribe; + }, [hasUnsavedChanges]); + + useEffect(() => { + const unsubscribe=props.navigation.addListener('beforeRemove', onBeforeRemove); + return unsubscribe; + }, [showCamera]); + + function onBeforeRemove(e){ + if(showCamera==true){ + e.preventDefault(); + setShowCamera(false); + } + else{ + if (hasUnsavedChanges==true) { + e.preventDefault(); // Prevent default behavior of leaving the screen + onRemoveScreen(e); + } + else{ + return; + } + } + } + + function onRemoveScreen(e){ + Alert.alert( + "", + ST.Doyoureallywanttoexitthescreen, + [ + { + text: ST.Cancel, + onPress: () => {}, + style: "cancel" + }, + { text: ST.OK, onPress: () => {setHasUnsavedChanges(false);props.navigation.dispatch(e.data.action);} } + ] + ); + } + + + async function onSubmitData(){ + let isvalid=await validate(); + if(isvalid){ + Keyboard.dismiss(); + setShowAlert(true); + } + } + + function onSaveCancel(){ + setShowAlert(false); + } + + + async function getData(editMode1=false,vfData={}){ + try { + console.log("editMode1",editMode1); + let arr=[]; + for(let sIndex=1;sIndex<=StartCount;sIndex++){ + arr.push(sIndex); + if(sIndex==StartCount){ + setMaxRating(arr); + } + } + + if(editMode1){ + // designation + let obj = {'name':vfData.NAME,'designation':vfData.DESIGNATION} + setvfQuestion(obj); + + let imagePath='file://'+VisitorImageFolderPath+vfData.IMAGE; + + let objimg = {'Visitor_Image':vfData.IMAGE,'Visitor_ImagePath':imagePath} + setImage(objimg); + + } + + await db.transaction(async function (txn) { + + + let q2='SELECT Distinct CategoryId,Category,CategorySequence FROM Master_VisitorFeedbackQuestion'; + await txn.executeSql(q2,[],async function (txn2, txnres) { + console.log('feedback survey:',txnres.rows.length); + if(txnres.rows.length>0){ + let arr=[],allQtns=[],allavgquest=[]; + for(var i=0;i{ + try { + + db.transaction(async function (txn) { + + if(editMode1){ + let selectlist=` DISTINCT T.MaxLength as MaxLength,T.MinLength as MinLength,T.CategoryId,T.Category,T.LengthValidation as LengthValidation,T.QuestionImageAllow as QuestionImageAllow,T.DateRange as DateRange,T.Question as Question,T.QuestionId as QuestionId,T.QuestionType as QuestionType,T.OTP as OTP,T1.ANSWER As Answer, T1.ANSWER_ID as AnswerId,T1.IMAGE_ALLOW1 as ImageAllow1,T1.IMAGE1 as Image1,T1.IMAGE_ALLOW2 as ImageAllow2,T1.IMAGE2 as Image2,T1.MULTI_OPTIONS_IDS as multi_op_ids,T1.IS_DISABLED as isDisabled `; + //let sl=` DISTINCT mvf.MaxLength,mvf.MinLength,mvf.LengthValidation,Question,QuestionId,QuestionType,OTP,QuestionImageAllow,DateRange,QuestionCalculate`; + let join=`Inner join Master_VisitorFeedbackQuestion T on T1.QUESTION_ID=T.QuestionId and T1.CATEGORY_ID=T.CategoryId`; + let q=` SELECT ${selectlist} FROM ${AppTables.VISITOR_FEEDBACK} T1 ${join} where T1.CATEGORY_ID='${catData.CategoryId}' and T1.NAME='${NAME}' and T1.DESIGNATION='${DESIGNATION}' and T1.VISIT_DATE='${d2}' `; + // let q3=` SELECT * FROM ${AppTables.VISITOR_FEEDBACK} T1 where T1.CATEGORY_ID='${catData.CategoryId}' and T1.VISIT_DATE='${d2}' `; + + console.log('querydata',catData.CategoryId) + await txn.executeSql(q,[],async function (txn2, txnres2) { + console.log('Surveys:',txnres2.rows.length) + let arr=[]; + let arr2=[]; + var QD=QuestionsData; + if(txnres2.rows.length>0){ + for(var i=0;i0){ + for(var k=0;k=0)){ + showImageTag=true; + } + + if(qtn.QuestionType=='List_Single_Choice' && (isandImgAl2 && ansss.AnswerId==selansid)){ + showImageTag2=true; + } + else if(qtn.QuestionType=='List_Multi_Choice' && (isandImgAl2 && selansid.indexOf(ansss.AnswerId)>=0)){ + showImageTag2=true; + } + + } + } + } + + if(showImageTag){ + let imgPath=data.Image1!=''?((Platform.OS=='ios'?'file://':'')+VisitorImageFolderPath+data.Image1):''; + QD[imgname_key]=data.Image1; + QD[img_key]=imgPath; + } + + if(showImageTag2){ + let imgPath=data.Image2!=''?((Platform.OS=='ios'?'file://':'')+VisitorImageFolderPath+data.Image2):''; + QD[imgname_key2]=data.Image2; + QD[img_key2]=imgPath; + } + + if(qtn.QuestionType=='Audio'){ + let voicefile_path=(Platform.OS=='ios'?'file://':'')+VisitorImageFolderPath+'Recordings/'+data.Answer; + QD[voiceClip_key]={'path':voicefile_path,'filename':data.Answer}; + } + + if(qtn.QuestionType=='Date'){ + let dayonly=moment().format('DD'); + let actual_date=data.Answer?data.Answer.split('/'):[]; + let month=actual_date[0],year=actual_date[1]; + let fulldate=month+'/'+dayonly+'/'+year; + QD[date_key]=fulldate; + + } + arr.push(data); + + if(data.QuestionType=='RatingStarCal'){ + arr2.push(data) + } + if(i==txnres2.rows.length-1){ + obj['qtns']= arr; + obj['avgqtns']= arr2; + setQuestionsData(arr); + resolve(obj); + } + } + } + else{ + resolve(obj); + } + },function (txnE,txnerr) { console.log(txnerr);resolve(obj); },); + } + else{ + let sl=` DISTINCT MaxLength,MinLength,LengthValidation,CategoryId,Category,Question,QuestionId,QuestionType,OTP,QuestionImageAllow,DateRange,QuestionCalculate`; + let q=` SELECT ${sl} FROM Master_VisitorFeedbackQuestion where CategoryId='${catData.CategoryId}' `; + console.log('catData',catData.CategoryId) + await txn.executeSql(q,[],async function (txn2, txnres2) { + console.log('Surveys:',txnres2.rows.length) + let arr=[]; + let arr2=[]; + var QD=QuestionsData; + if(txnres2.rows.length>0){ + for(var i=0;i{ + db.transaction(async function (txn) { + // get inserted audits + let selectlist=` DISTINCT Answer,AnswerId,ImageAllow1,ImageAllow2,EnableQuestion,DisableQuestion`; + // let join=` INNER JOIN Mapping_Survey M on T.SurveyId=M.SurveyId`; + let q2=`Select ${selectlist} FROM Master_VisitorFeedbackQuestion WHERE QuestionId='${qtn.QuestionId}' ORDER BY AnswerSequence `; + // console.log('q',q2) + + await txn.executeSql(q2,[],async function (txn2, txnres) { + // console.log('answers len',txnres.rows.length); + if(txnres.rows.length>0){ + let arr=[]; + for(var i=0;i{ + return {'Answers':val,'Success':true}; + }).catch((err)=>{ + console.log(err); + return {'Success':false,'Error':err} + }); +} + + + + async function getImage(imgdata){ + let qtn=getImageProps.qtn || ''; + let type=getImageProps.type || '1'; + let imagetype = getImageProps.imagetype|| '1'; + console.log('qtnGetImage in getImage',qtn) + console.log('typeGetImage',type) + console.log('imagetypeGetImage',imagetype) + if(typeof imgdata =='object' && imgdata.errorCode=='camera_unavailable'){ + notify(ST.Cameraunavailable); + } + else if(typeof imgdata =='object' && imgdata.uri!=null){ + const img=imgdata; + const imgurl=img.uri, imgWidth=img.width, imgHeight=img.ExtendedHeight; + let isImgFromGallery=img.fromGallery!=null?img.fromGallery:false; + let picture_clickedd=isImgFromGallery==true?img.datetime:new Date(); + + let picture_clicked_time=moment(picture_clickedd).format('MM-DD-YYYY HH:mm:ss') + let picture_clicked_time_for_pic_name=moment(picture_clickedd).format('MMDDYYYY_HHmmss') + + console.log("time", picture_clicked_time); + console.log("time1", picture_clicked_time_for_pic_name); + let calculate_tym_date_for_filename = picture_clicked_time_for_pic_name; + let calculate_tym_date_over_img = picture_clicked_time; + + + const mark_text1=calculate_tym_date_over_img; + const mark_text2='User Name:'+props.UserId+' | Image Type: Visitor Feedback'+' | Date:'+calculate_tym_date_over_img; + const str = vfQuestion.name; + const removespace = str.replace(/ /g, '') + + let filename = ''; + let image_key = ''; + let image_path_key = ''; + let allData = ''; + let qd = ''; + + if(imagetype==1){ + filename=(props.UserId || '')+'_'+removespace+'_'+vfQuestion.designation+'_VisitorImg-'+calculate_tym_date_for_filename+'.jpg'; + allData=image; + console.log('allData',allData=image) + image_key='Visitor_Image'; + image_path_key='Visitor_ImagePath'; + allData[image_key]=filename; + console.log('image_key',allData[image_key]=filename) + + } + else{ + qd=QuestionsData; + filename=(props.UserId || '')+'_'+removespace+'_'+vfQuestion.designation+'_'+qtn.QuestionId+'_VisitorFeedbackImg_'+calculate_tym_date_for_filename+'.jpg'; + + image_key=type=='1'?qtn.QuestionId+'_ImageName1':qtn.QuestionId+'_ImageName2'; + image_path_key=type=='1'?qtn.QuestionId+'_ImagePath1':qtn.QuestionId+'_ImagePath2'; + + qd[image_key]=filename; + console.log('questiondata',qd) + + } + + + let imagePath=VisitorImageFolderPath+filename; + RNFS.copyFile(imgurl, imagePath) + .then(async(resn) => { + // render data with clicked image + let uri='file://'+imagePath; + if(imagetype==1){ + console.log('image_path_key',allData[image_path_key]=uri) + allData[image_path_key]=uri; + console.log('allDatavisitor',allData) + setImage(allData); + } + else{ + qd[image_path_key]=uri; + setQuestionsData(qd); + } + + setHasUnsavedChanges(true); + setrerenderdata(!rerenderdata); + + // add metdata then resize image and restored back to the imagePath + let restore_data={"destFilePath":imagePath,"imgurl":imgurl,imgWidth,imgHeight,mark_text1,mark_text2} + let is_restored=await restore_ImageWithMetaData(restore_data,imgdata); + console.log("image restored:",is_restored); + }) + .catch(err => { + console.log('ERROR: image file write failed!!!'); + console.log(err.message, err.code); + }); + + } + + } + + + + + + async function disableQtns(){ + + if(DQtns.length>0){ + new Promise.all( + DQtns.map((qid,q_index)=>{ + let s_qtnindex=sqtns.findIndex(i=>i.QuestionId==qid) || {}; + console.log('sqtns qid',qid,s_qtnindex) + let s_qtn=sqtns[s_qtnindex]; + s_qtn['isDisabled']=true + sqtns[s_qtnindex]=s_qtn; + let id_key=s_qtn.QuestionId+'_AnswerId'; + let ans_key=s_qtn.QuestionId+'_Answer'; + data[id_key]=0; + data[ans_key]=''; + return false + }) + ).then(async (val)=>{ + setSurveyQuestions(sqtns); + setQuestionsData(data); + setHasUnsavedChanges(true); + setrerenderdata(!rerenderdata); + }) + } + } + + async function enableQtns(){ + new Promise.all( + EQtns.map((qid,q_index)=>{ + let s_qtnindex=sqtns.findIndex(i=>i.QuestionId==qid) || {}; + let s_qtn=sqtns[s_qtnindex]; + s_qtn['isDisabled']=false + sqtns[s_qtnindex]=s_qtn; + return false + }) + ).then(async (val)=>{ + if(DQtns.length>0){ + disableQtns() + } + else{ + setSurveyQuestions(sqtns); + setHasUnsavedChanges(true); + setrerenderdata(!rerenderdata); + } + }) + } + + function onselectionChange(option,qtn){ + let data=QuestionsData; + let id_key=qtn.QuestionId+'_AnswerId'; + let ans_key=qtn.QuestionId+'_Answer'; + data[id_key]=option.value; + data[ans_key]=option.label; + + setQuestionsData(data); + + let aq_ans=qtn.Answers!=null?qtn.Answers:[]; + let ans_obj=aq_ans.find(i=>i.AnswerId==option.value) || {}; + let EQtns=ans_obj.EnableQuestion!=null && ans_obj.EnableQuestion!=''?ans_obj.EnableQuestion.replace(' ','').split(','):[]; + let DQtns=ans_obj.DisableQuestion!=null && ans_obj.DisableQuestion!=''?ans_obj.DisableQuestion.replace(' ','').split(','):[]; + + console.log('EQtns:',EQtns,DQtns); + let sqtns=SurveyQuestions + if(EQtns.length>0){ + enableQtns() + } + else if(DQtns.length>0){ + disableQtns() + } + else{ + setHasUnsavedChanges(true); + setrerenderdata(!rerenderdata); + } + } + + async function setTextValue(value,qtn,type='') { + if(value!=''){ + let isValid=validateNumber(value,type); + if(!isValid){ + return; + } + + } + + let id_key=qtn.QuestionId+'_AnswerId'; + let ans_key=qtn.QuestionId+'_Answer'; + + let obj=QuestionsData; + if(qtn.QuestionType=='Date' ){ + let date_key=qtn.QuestionId+'_Date'; + let d=value!=null?new Date(value):new Date(); + let mfdate=moment(d).format('MM/YYYY'); + showQtnDatePicker(qtn,false); + obj[id_key]=0; + obj[ans_key]=mfdate; + obj[date_key]=moment(d).format('MM/DD/YYYY'); + } + else if(qtn.QuestionType=='RatingStar'){ + obj[id_key]=0; + obj[ans_key]=value; + + + let averagequestions = starCalQtns; + console.log('averagequestions',averagequestions) + + + for(let i=0;i{ + + for (let i = 0; i{ + // ids.push(item.AnswerId); + // }) + setRatingOrder(data); + } + + + async function openCamera(qtn,type,imagetype){ + console.log('qtnsetImage',qtn) + console.log('typesetImage',type) + console.log('imagetypesetImage',imagetype) + setGetImageProps({'qtn':qtn,'type':type,'imagetype':imagetype}); + setShowCamera(true); + // props.navigation.navigate('CameraScreen',{'getImage':getImage,'cameraType':'front'}) + } + + function render_Picker(label_key,value_key,onChange=()=>{},selected_data={}){ + var data=[]; + let qtn=selected_data.qtn || {}; + let isQtnDisabled=qtn.isDisabled!=null && qtn.isDisabled!=''?qtn.isDisabled:false; + let allAnswers=qtn.Answers || []; + + allAnswers.map((item,index)=>{ + let obj={ key: index, label: item[label_key],value:item[value_key] }; + if(selected_data.value==item[label_key]) + obj['component']= {item[label_key]}; + data.push(obj); + }); + + return ( + {onChange(option,qtn) }} + overlayStyle={customStyle.addVisPickerOverlay} + cancelContainerStyle={customStyle.addVisPicker_OptionContainerStyle} + optionStyle={customStyle.addvis_opStyle} + optionTextStyle={customStyle.addvis_opTextStyle} + optionContainerStyle={customStyle.addVisPicker_OptionContainerStyle} + selectedKey={'1'} + disabled={isQtnDisabled} + cancelText={ST.Cancel} + > + {(selected_data.value!=null && selected_data.value!=''?selected_data.value: '-select-')} + + ) + } + + + async function saveData(){ + setHasUnsavedChanges(false); + setShowAlert(false); + setLoaderTitle(ST.SavingData+'...'); + setProcessing(true); + + let currentTime=moment().format('HH:mm:ss'); + let d3=moment().format('MM/DD/YYYY'); + let image_key='Visitor_Image'; + let image_path_key='Visitor_ImagePath'; + let image1=image[image_key] || ''; + let AllVisitorImages=await getAllFileForAFolder(VisitorImageFolderPath,"VisitorFeedbackImages","VisitorFeedback"); + console.log("AllVisitorImages:",AllVisitorImages.length); + + + try{ + await db.transaction(async function (txn) { + + let q=`select * from ${AppTables.VISITOR_FEEDBACK} WHERE NAME='${vfQuestion.name}'and DESIGNATION='${vfQuestion.designation}' AND VISIT_DATE='${d3}'`; + console.log('query:',q) + await txn.executeSql(q,[],async function (txn2, txnres) { + console.log('query count:',txnres.rows.length); + if(txnres.rows.length>0){ + notify('Visitor Feedback Data with this name and designation already exists!') + setProcessing(false); + } + else{ + + let q=`DELETE FROM ${AppTables.VISITOR_FEEDBACK} WHERE NAME='${vfQuestion.name}'and DESIGNATION='${vfQuestion.designation}' AND VISIT_DATE='${d3}'`; + // remove old data + await txn.executeSql(q,[],async function (txn2, txnres) { + console.log('survey data deleted'); + },function (txnE,txnerr) { console.log(txnerr); },); + + var values=''; + let feedbackData = {}; + let questionData=[]; + + + + feedbackData['Name']=vfQuestion.name; + feedbackData['Designation']= vfQuestion.designation; + feedbackData['Image']=image.Visitor_Image; + feedbackData['UserId']=props.UserId; + feedbackData['VisitDate']=d2; + + + for(var i=0;ii.AnswerId==selansid) + imgallow1=ans_obj!=null && ans_obj['ImageAllow1']!=null?ans_obj.ImageAllow1:false; + imgallow2=ans_obj!=null && ans_obj['ImageAllow2']!=null?ans_obj.ImageAllow2:false; + let f_imgalloq1=(QuestionImageAllow=='true' || QuestionImageAllow==1) || (imgallow1=='true' || imgallow1==1) + + values+=` ('${d2}','${vfQuestion.name}','${vfQuestion.designation}','${image.Visitor_Image}','${'I'}','${CategoryId}','${Question}','${QuestionId}','${QuestionType}','${selans}','${selansid}','${f_imgalloq1}','${(imgName1 || '')}','${imgallow2}','${(imgName2 || '')}','${multiops}','${isQtnDisabled}') `; + + + // let {EmpId, UserId,Answer,AnswerId,ImageAllow1,Image1,ImageAllow2,Image2,MultiOptionsIds} = '' + + obj1['CategoryId']=CategoryId; + obj1['QuestionId']=QuestionId; + obj1['QuestionType']=QuestionType; + obj1['Answer']=selans; + obj1['AnswerId']=selansid; + obj1['MultiAnswerId']=multiops!=null && multiops!='undefined'?multiops:''; + obj1['AnswerImage1']=imgName1; + obj1['AnswerImage2']=imgName2; + obj1['UserId']=props.UserId; + + + + + questionData.push(obj1) + + // console.log('feedbackdata data:',obj1); + } + + feedbackData['feedbackData']=questionData; + + let add_data=`INSERT INTO ${AppTables.VISITOR_FEEDBACK} (VISIT_DATE,NAME,DESIGNATION,IMAGE,UPLOADSTATUS,CATEGORY_ID,QUESTION,QUESTION_ID,QUESTION_TYPE,ANSWER,ANSWER_ID,IMAGE_ALLOW1,IMAGE1,IMAGE_ALLOW2,IMAGE2,MULTI_OPTIONS_IDS,IS_DISABLED) VALUES ${values} `; + + await txn.executeSql(add_data,[],async function (txn2, txnres) { + console.log('visitor feedback added'); + notify('visitor feedback added successfully'); + setLoaderTitle("Uploading Data...") + uploadVisitorFeedback(feedbackData,AllVisitorImages); + setProcessing(false); + },function (txnE,txnerr) { console.log(txnerr);setProcessing(false);notify('Cannot update feedback') },); + + } + },function (txnE,txnerr) { + console.log("error:",txnE,txnerr); + console.log(txnerr);setProcessing(false);notify(ST.Cannotupdatevisitor); + }); + }); + } + catch(err){ + console.log('err',err); + setProcessing(false); + + } + + } + + async function updateVLUploadStatus(){ + return new Promise((resolve,reject)=>{ + db.transaction(async function (txn) { + + let q=`Update ${AppTables.VISITOR_FEEDBACK} SET UPLOADSTATUS='U' WHERE NAME='${vfQuestion.name}' AND DESIGNATION='${vfQuestion.designation}' AND VISIT_DATE='${d2}'`; + await txn.executeSql(q,[],async function (txn2, txnres) { + resolve(true); + + },function (txnE,txnerr) { console.log(txnerr);resolve(false); },); + + }); + }).then((val)=>{ + return val; + }).catch((err)=>{ + console.log(err); + return false; + }); + } + + + + async function uploadVisitorFeedback(feedbackData,AllVisitorImages=[]){ + const url=props.baseurl+getMethodName(METHODS.UPLOADJSON_METHOD); + console.log('pdurl',url) + + + let postData={ + 'MID':0, + 'Keys':'VisitorFeedbackQA', + 'JsonData':JSON.stringify(feedbackData), + 'UserId':props.UserId,}; + + console.log('postData',postData) + UploadData2(url,postData) + .then(async(res)=>{ + console.log('res:',res); + if(res.UploadJsonResult!=null && res.UploadJsonResult=='Success'){ + const url2=(props.imageUploadUrl || URL_IMAGE)+getMethodName(METHODS.UPLOADIMAGES_METHOD); + console.log('url2',url2) + let allImageUploaded=await uploadAll_VisImages(props,AllVisitorImages); + console.log('allImageUploaded',allImageUploaded) + if(allImageUploaded==true){ + console.log('all Visitor image uploaded'); + let isUpdated=await updateVLUploadStatus(); + if(isUpdated){ + notify('Uploaded successully'); + } + setProcessing(false); + props.navigation.goBack(); + } + else{ + notify(ST.CannotuploadvisitorfeedbackQAdata); + setProcessing(false); + props.navigation.goBack(); + } + + }else{ + notify(ST.CannotuploadvisitorfeedbackQAdata); + setProcessing(false); + props.navigation.goBack(); + } + }) + .catch((err)=>{ + console.log(err); + notify(ST.CannotuploadvisitorfeedbackQAdata); + setProcessing(false); + props.navigation.goBack(); + }); + + } + +// async function updateVLUploadStatus(){ +// return new Promise((resolve,reject)=>{ +// db.transaction(async function (txn) { + +// let q=`Update ${AppTables.VISITOR_LOGIN} SET UPLOADSTATUS='U' WHERE EMP_CODE='${visitorFeedback.EMP_CODE}' AND VISIT_DATE='${d2}'`; +// await txn.executeSql(q,[],async function (txn2, txnres) { +// resolve(true); + +// },function (txnE,txnerr) { console.log(txnerr);resolve(false); },); + +// }); +// }).then((val)=>{ +// return val; +// }).catch((err)=>{ +// console.log(err); +// return false; +// }); +// } + + + + + + async function validate(){ + // let Image1MandIndex='Image1Mandatory'; + // let Image1MandObj=Image1MandIndex>=0?KPIFields[Image1MandIndex]:{}; + let isImage1Mand=true; + + // let Image2MandIndex=KPIFields.findIndex(i=>i.KPIFieldName=='Image2Mandatory'); + // let Image2MandObj=Image2MandIndex>=0?KPIFields[Image2MandIndex]:{}; + let isImage2Mand=false; + + + + var isvalid=true; + const QD=QuestionsData; + console.log('image.Visitor_ImagePath',image.Visitor_ImagePath) + + + + if (!vfQuestion.name) { + alert('Please enter Name'); + isvalid=false; + } + else if (!vfQuestion.designation) { + alert('Please enter Designation'); + isvalid=false; + } + else if(!image.Visitor_ImagePath){ + isvalid=false; + notify(ST.Pleaseaddimages,'SHORT'); + } + + else{ + for(var i=0;i=0 && QD[ans_key]===''))){ + isvalid=false; + let msg=( qtn.QuestionType=='Date'?ST.Pleasepickadate:(qtn.QuestionType=='RatingStar'?'Please select rating':ST.Pleasefillalldetails)); + notify(msg,'SHORT'); + break; + } + else if( qtn.QuestionType=='Audio' && (Object.keys(QD).indexOf(voiceClip_key)<0 || (Object.keys(QD).indexOf(voiceClip_key)>=0 && (QD[voiceClip_key]==null || QD[voiceClip_key].filename==null || QD[voiceClip_key].filename=='')))){ + isvalid=false; + notify(ST.Pleaserecordaudioclipfortherequiredfield,'SHORT'); + break; + } + else if(Object.keys(QD).indexOf(id_key)<0 || (Object.keys(QD).indexOf(id_key)>=0 && (QD[id_key]===''))){ + isvalid=false; + notify(ST.Pleasefillalldetails,'SHORT'); + console.log(QD[id_key],QD,id_key) + break; + } + else if(isImgAllowed && (Object.keys(QD).indexOf(img_key)<0 || (Object.keys(QD).indexOf(img_key)>=0 && QD[img_key]===''))){ + isvalid=false; + notify(ST.Pleaseaddimages,'SHORT'); + break; + } + + // else if(imgname_key=='' || imgname_key==null){ + // isvalid=false; + // notify(ST.Pleaseaddimages,'SHORT'); + else{ + console.log('no condition found'); + } + + if((qtn.QuestionType=='List_Single_Choice' || qtn.QuestionType=='List_Multi_Choice' )){ + if (qtn.Answers && qtn.Answers.length>0){ + for(var j=0;j=0)){ + showImageTag=true; + } + + let isandImgAl2=(ansss.ImageAllow2==true || ansss.ImageAllow2=='true' || ansss.ImageAllow2==1); + if(qtn.QuestionType=='List_Single_Choice' && (isandImgAl2 && ansss.AnswerId==selansid)){ + showImageTag2=true; + } + else if(qtn.QuestionType=='List_Multi_Choice' && (isandImgAl2 && selansid.indexOf(ansss.AnswerId)>=0)){ + showImageTag2=true; + } + } + + } + + + } + if((isImage1Mand=='1' || isImage1Mand==true) && showImageTag && (Object.keys(QD).indexOf(img_key)<0 || (Object.keys(QD).indexOf(img_key)>=0 && QD[img_key]===''))){ + isvalid=false; + notify(ST.Pleaseaddimages,'SHORT'); + break; + } + + if((isImage2Mand=='1' || isImage2Mand==true) && showImageTag2 && (Object.keys(QD).indexOf(img_key2)<0 || (Object.keys(QD).indexOf(img_key2)>=0 && QD[img_key2]===''))){ + isvalid=false; + notify(ST.Pleaseaddimages,'SHORT'); + break; + } + + } + + } + } + + return isvalid; +} + + function onTextChange(key, val,type=''){ + if(val!=''){ + let isValid=validateNumber(val,type); + if(!isValid){ + return; + } + + } + let data=vfQuestion; + data[key]=val; + // setHasUnsavedChanges(true); + setvfQuestion(data); + setrerenderdata(!rerenderdata); + +} + + + + function renderDatePicker(qtn){ + let qtnn=qtn; + let DateRange=qtn.DateRange; + let maxDate=moment().add(10,'years').format('MM/DD/YYYY'); + let minDate=moment().subtract(10,'years').format('MM/DD/YYYY'); + if(DateRange=='RFD'){ + maxDate=moment().format('MM/DD/YYYY'); + } + else if(DateRange=='RPD'){ + minDate=moment().format('MM/DD/YYYY'); + } + + return ( + {setTextValue(selectedDate,qtnn)}} + maximumDate={new Date(maxDate)} + minimumDate={new Date(minDate)} + /> + ); + } + + function renderItem({ }){ + return ( + + + {item.Answer} + + + ); + }; + + + function renderRatingView(){ + let qtn=RatingQtn; + let Answers=qtn.Answers; + let id_key=qtn.QuestionId+'_AnswerId'; + let ans_key=qtn.QuestionId+'_Answer'; + let rating_key=qtn.QuestionId+'_Rating'; + // let ratings=QuestionsData[rating_key]!=null?QuestionsData[rating_key].split(','):[]; + + + return ( + + + {console.log('tsth');setShow_zoomImage(false) }}> + + + + + ) + } + + function _renderSurveyQtns(subcat){ + const SurveyQuestions=subcat.Questions; + console.log('SurveyQuestions123',SurveyQuestions) + return ( + + { + + SurveyQuestions.map((item,index)=>{ + + let qtn=item; + console.log('questionsfeedback',qtn) + console.log('rendersurveyqtn',qtn) + let selansid='',selanswer='',selimg='',selimg2='',showImageTag=false,showImageTag2=false; + let id_key=qtn.QuestionId+'_AnswerId'; + let ans_key=qtn.QuestionId+'_Answer'; + let multi_key=qtn.QuestionId+'_MultiOption'; + let date_key=qtn.QuestionId+'_Date'; + let img_key=qtn.QuestionId+'_ImagePath1'; + let imgname_key=qtn.QuestionId+'_ImageName1'; + let img_key2=qtn.QuestionId+'_ImagePath2'; + let imgname_key2=qtn.QuestionId+'_ImageName2'; + let rating_key=qtn.QuestionId+'_Rating'; + let voiceClip_key=qtn.QuestionId+'_VoiceClip'; + let list_mcdata=[]; + + if(qtn.QuestionType=='List_Single_Choice') + { + selansid=QuestionsData[id_key]!=null ?QuestionsData[id_key] :''; + selanswer=QuestionsData[ans_key]!=null ?QuestionsData[ans_key] :''; + } + else if(qtn.QuestionType=='List_Multi_Choice') + { + + if(qtn.Answers!=null){ + console.log('qtn.Answers:',qtn.Answers.length); + for(var i=0;i0){ + let arr=[]; + for(var i=0;i0){ + for(var i=0;i=0)){ + showImageTag=true; + } + + if(qtn.QuestionType=='List_Single_Choice' && (isandImgAl2 && ansss.AnswerId==selansid)){ + showImageTag2=true; + } + else if(qtn.QuestionType=='List_Multi_Choice' && (isandImgAl2 && selansid.indexOf(ansss.AnswerId)>=0)){ + showImageTag2=true; + } + } + } + } + + if(showImageTag){ + selimg=QuestionsData[img_key]!=null && QuestionsData[img_key]!=''?'file://'+QuestionsData[img_key]:''; + } + + if(showImageTag2){ + selimg2=QuestionsData[img_key2]!=null && QuestionsData[img_key2]!=''?'file://'+QuestionsData[img_key2]:''; + } + + let isDisabled=qtn.isDisabled!=null?qtn.isDisabled:false + console.log('isDisabled',qtn.QuestionId,qtn.isDisabled,isDisabled) + if(isDisabled==true){ + return ( + + ) + } + else{ + return( + + {qtn.Question} + {qtn.QuestionType=='List_Single_Choice' && qtn.Answers && + render_Picker('Answer','AnswerId',onselectionChange,{value:selanswer,qtn:qtn}) + } + {qtn.QuestionType=='List_Multi_Choice' && qtn.Answers && + {console.log('onSelectedItemsChange');setMultiSelectValue(selectedItems,qtn) }} + selectedItems={selansid} + selectText="Pick Items" + searchInputPlaceholderText="Search Items..." + // onChangeInput={ (text)=> console.log(text)} + tagRemoveIconColor={PageTheme.$primary_color} + tagBorderColor={PageTheme.$primary_color} + tagTextColor={PageTheme.$primary_color} + selectedItemTextColor={PageTheme.$primary_color} + selectedItemIconColor={PageTheme.$primary_color} + tagContainerStyle={{height:30,width:'100%',paddingVertical:5}} + styleTextTag={{fontSize:14}} + itemTextColor={PageTheme.$text_color} + displayKey="Answer" + searchInputStyle={{ color: '#CCC' }} + submitButtonColor={PageTheme.$primary_color} + submitButtonText="Submit" + /> + } + { (qtn.QuestionType=='Number' || qtn.QuestionType=='Decimal' || qtn.QuestionType=='Text') && + {setTextValue(val,qtn,(qtn.QuestionType=='Decimal'?'decimal':(qtn.QuestionType=='Text'?'text':'numeric')))}} + /> + } + { + (qtn.QuestionType=='Date') && + + {selansid!=''?selansid:'MM/YYYY'} + {setDateValue(selanswer);showQtnDatePicker(qtn,true)}}> + + + + } + { ((qtn.showDatePicker==true || qtn.showDatePicker=='true') && (qtn.QuestionType=='Date') ) && + renderDatePicker(qtn) + } + { + (qtn.QuestionType=='RatingStar') && + + { maxRating.map((item,index)=>{ + let isStarSelected=parseInt(item)<=parseInt(selansid); + + return ( + {setTextValue(item,qtn,'numeric')}}> + {!isStarSelected && } + {isStarSelected && } + + ) + }) + } + + } + { + (qtn.QuestionType=='RatingStarCal') && + + { maxRating.map((item,index)=>{ + let isStarSelected=parseInt(item)<=parseInt(selansid); + + return ( + + {!isStarSelected && } + {isStarSelected && } + + ) + }) + } + + } + + + { + (qtn.QuestionType=='Audio') && + + {selanswer} + {show_recorder(qtn);}}> + + + + } + + { + showImageTag && + + + {openCamera(qtn,'1','2')}}> + + + + } + + { + showImageTag2 && + + + {openCamera(qtn,'2','2')}}> + + + + } + + ) + } + + }) + } + + + ); + } + + function renderRecorderView(){ + + let qtn=RatingQtn; + let isRecorderPlaying=VRS.RecorderPlayStatus!=null && VRS.RecorderPlayStatus==true; + let isPlayerPlaying=VRS.PlayerPlayStatus!=null && VRS.PlayerPlayStatus==true; + const scale=animatedRipple.interpolate({ + inputRange:[0,1], + outputRange:[1,1.3], + }); + + const borderColor=animatedRipple.interpolate({ + inputRange:[0,1], + outputRange:['#f5acb4c2','#fce6e9e3'], + }); + + const scale2=animatedRipple2.interpolate({ + inputRange:[0,1], + outputRange:[1,1.5], + }); + + const borderColor2=animatedRipple2.interpolate({ + inputRange:[0,1], + outputRange:['#f5acb4c2','#fce6e9e3'], + }); + + + + let totalDuration=RecorderTimer.recordSecs!=null?RecorderTimer.recordSecs:playerTimer.totalDuration; + let wp=totalDuration!=null?Math.floor((playerTimer.playerSecs/totalDuration)* 100):0; + let width1=wp<=100?(wp>0?wp+'%':'0%'):'100%'; + if(isNaN(wp)) width1='0%'; + + return ( + + {rerenderView==rerenderView && + + {ST.RecordVoiceClip} + {ST.Youcanrecordmaxfor60secs} + {VoiceRecorderStatus} + + + + + + {startRecorder(storeData,qtn,ActiveSurvey,VRS); }}> + + + {isRecorderPlaying && + {stopRecorder(VRS); }}> + + + } + + + + {RecorderTimer.recordTime} + { + (!isRecorderPlaying && RecFilePath.filename!=null && RecFilePath.filename!='') && + + + + + + + {`${(playerTimer.playTime || '00:00:00')} / ${playerTimer.playDuration || RecorderTimer.recordTime}`} + + + + {let url=(Platform.OS=='ios'?'file://':'')+VisitorImageFolderPath+'Recordings/'+RecFilePath.filename; (wp<100 && wp>0)? resumePlayer(url):startPlayer(url,VRS); }}> + + + {isPlayerPlaying && { wp<100?pausePlayer():stopPlayer(VRS); }}> + + } + + + } + + + + {onRecordCancel()}}> + {ST.Cancel} + + {onRecordSave()}}> + {ST.Save} + + + } + + ) + } + + + function _renderSurveyView(){ + return ( + + { + let subcat=item,s_index=index; + console.log('subcat',subcat) + + return ( + + + {subcat.Category} + + + { _renderSurveyQtns(subcat)} + + + + ) + }} + > + + + + ); + } + + return ( + + + {/* {processing && } */} + {processing && } + + + {ConfirmSaveAlert(props,showAlert,onSaveCancel,saveData)} + {setShowCamera(false);getImage(imgData)}} showCamera={showCamera} onHideCamera={()=>{setShowCamera(false);}}/> + + {/* */} + + + + + Name + {onTextChange('name',val,'text')}} + /> + + Designation + {onTextChange('designation',val,'text')}} + /> + + Click Selfie Image + { (image.Visitor_ImagePath==null || image.Visitor_ImagePath=='') && + {openCamera('','','1')}}> + + + } + { (image.Visitor_ImagePath!='' && image.Visitor_ImagePath!=null) && + + + {openCamera('','','1')}}> + + + + } + + + Feedback Questions + + { + _renderSurveyView() + + } + + + + + + + {onSubmitData()}}/> + + + + ) + +} +export default connect(mapStateToProps, mapDispatchToProps)(VisitorFeedbackQA); \ No newline at end of file diff --git a/PerformicsSrc/src/screens/VisitorLogin.js b/PerformicsSrc/src/screens/VisitorLogin.js new file mode 100644 index 0000000..2f6906d --- /dev/null +++ b/PerformicsSrc/src/screens/VisitorLogin.js @@ -0,0 +1,696 @@ +import React,{useState,useEffect,useRef} from 'react'; +import Container from '../components/container'; +import { useFocusEffect, useRoute } from '@react-navigation/native'; +import { globalStyles,customStyles,GetPageTheme } from "../styles/Global"; +import {StatusBar,Image,TextInput,View,Text,ScrollView,TouchableOpacity,Platform,PermissionsAndroid,FlatList, Alert, Animated} from 'react-native'; +import { connect } from 'react-redux'; +import { mapStateToProps,mapDispatchToProps } from '../reducers/contextProvider'; +import {notify} from '../components/notify'; +import moment from 'moment'; +import {getDownloadJson,marktext1,marktext2, resizeImage, restore_ImageWithMetaData, UploadData2} from '../controller/functions'; +import {get_item,set_item,clear_item} from '../components/localStorage'; +import {db, common_ImagePath,ImageFolderPath, URL_IMAGE, VisitorLoginImageFolderPath} from '../constants/constants'; +import CustomHeader from '../components/customHeader'; +import { Ionicons, MaterialCommunityIcons} from '../components/icons'; +import CustomLoader from '../components/CustomLoader'; +import LinearGradient from 'react-native-linear-gradient'; +import { AppTables } from '../constants/tableConstants'; +import * as RNFS from 'react-native-fs'; +import NoDataComponent from '../components/NoDataComponent'; +import { getMethodName, METHODS } from '../constants/methodNames'; + +import CustomCamera from '../components/Camera'; + + + +import CameraImg from '../assets/performics/camera_front_image.svg' +import CustomModal from '../components/CustomModal'; +import { getImagePOSTData, UploadImagesWithoutWait } from '../constants/uploadData'; + +function VisitorLogin(props) { + const route = useRoute(); + const ST=props.StaticText || {}; + // get all theme styles acc to current theme set + const PageTheme = GetPageTheme(props.DarkMode, route.name); + const customStyle = customStyles(props.DarkMode, route.name); + const globalStyle = globalStyles(props.DarkMode, route.name); + + + const [processing, setProcessing] = useState(true); + const [loaderTitle, setLoaderTitle] = useState(); + const [designation, setDesignation] = useState(''); + const [visitors, setVisitors] = useState([]); + const [searchedEmployees, setSearchedEmployees] = useState([]); + const [rerenderdata, setrerenderdata]= useState(0); + const [employeeCode, setEmployeeCode]= useState(''); + const [EmpData, setEmpData]= useState({}); + const [currentCheckOutItem, setCurrentCheckOutItem]= useState({}); + const [removedVisitor, setRemovedVisitor]= useState({}); + + const [showCheckOutModal, setShowCheckOutModal]= useState(false); + const [showRemoveVistor, setShowRemoveVistor]= useState(false); + + const [showCamera, setShowCamera] = useState(false); + const [getImageProps,setGetImageProps]= useState({}); + + const d1=new Date(); + const d2=moment(d1).format('MM/DD/YYYY'); + + useEffect(() => { + setLoaderTitle(ST.Loading+'...') + getData(); + + const unsubscribe=props.navigation.addListener('beforeRemove', onBeforeRemove); + + return function cleanup() { + return unsubscribe; + }; + }, []); + + useEffect(() => { + const unsubscribe=props.navigation.addListener('beforeRemove', onBeforeRemove); + return unsubscribe; + }, [showCamera]); + + useFocusEffect( + React.useCallback(() => { + getData(); + }, []) + ); + + function onBeforeRemove(e){ + if(showCamera==true){ + e.preventDefault(); + setShowCamera(false); + } + else{ + return; + } + } + + async function getData(){ + try { + + let token=await get_item('loginToken'); + let loginInfo=await get_item('loginInfo'); + const loginDetails=JSON.parse(loginInfo); + let desg=loginDetails.Designation || ''; + setDesignation(desg); + + await db.transaction(async function (txn) { + + // let q1=`DELETE from ${AppTables.VISITOR_LOGIN} where EMP_CODE='C000363'`; + // await txn.executeSql(q1,[],async function (txn2, txnres) { + // console.log('deleted'); + // },function (txnE,txnerr) { console.log(txnerr); },); + + let q=`SELECT * from ${AppTables.VISITOR_LOGIN} where VISIT_DATE='${d2}'`; + await txn.executeSql(q,[],async function (txn2, txnres) { + if(txnres.rows.length>0){ + let arr=[]; + for(var i=0;i { + // render data with clicked image + let uri='file://'+imagePath; + allData[image_path_key]=uri; + setEmpData(allData); + setrerenderdata(!rerenderdata); + + // add metdata then resize image and restored back to the imagePath + let restore_data={"destFilePath":imagePath,"imgurl":imgurl,imgWidth,imgHeight,mark_text1,mark_text2} + let is_restored=await restore_ImageWithMetaData(restore_data,imgdata); + console.log("image restored:",is_restored); + }) + .catch(err => { + console.log(ST.Errorimagefilewritefailed+'!!!'); + console.log(err.message, err.code); + notify(ST.CannotProcessImage); + }); + } + setProcessing(false); + } + + function getBottomText(){ + let item=getImageProps.item || {}; + return 'User Name:'+props.UserId+' | Employee Code:'+item.LegacyCode+' | Image Type: Visitor Login'; + } + + async function openCamera(item,type='In'){ + setGetImageProps({'item':item,'type':type}); + setShowCamera(true); + // props.navigation.navigate('CameraScreen',{'getImage':getImage,'cameraType':'front'}) + } + + async function onCheckOut(item){ + setCurrentCheckOutItem(item); + setShowCheckOutModal(true); + } + + async function onDelete(item){ + + if(item.UPLOADSTATUS=='U'){ + setProcessing(false); + notify(ST.Dataalreadyuploaded+' '+ST.Cannotdeletevisitornow); + } + else if(item.OUT_TIME!='' && item.OUT_TIME!=null){ + setProcessing(false); + notify(ST.Visitoralreadyhadcheckedout+' '+ST.Cannotdeletevisitornow); + } + else{ + console.log('delete emp') + setRemovedVisitor(item); + setShowRemoveVistor(true); + } + } + + async function removeVisitor(){ + let item=removedVisitor; + setShowRemoveVistor(false) + setLoaderTitle(ST.RemovingEmployee+'...'); + setProcessing(true); + try{ + await db.transaction(async function (txn) { + let {EMP_CODE,EMP_ID}=item; + let q2=`DELETE FROM ${AppTables.VISITOR_LOGIN} WHERE VISIT_DATE='${d2}' AND EMP_CODE='${EMP_CODE}'`; + let q=`SELECT * FROM ${AppTables.VISITOR_LOGIN} WHERE VISIT_DATE='${d2}' `; + await txn.executeSql(q2,[],async function (txn2, txnres3) { + await txn.executeSql(q,[],async function (txn2, txnres2) { + console.log('Visitors',txnres2.rows.length); + let arr=[]; + if(txnres2.rows.length>0){ + + + for(var i=0;i0){ + for(var i=0;i{ + console.log('res:',res); + if(res.UploadJsonResult!=null && res.UploadJsonResult=='Success'){ + const url2=(props.imageUploadUrl || URL_IMAGE)+getMethodName(METHODS.UPLOADIMAGES_METHOD); + let allImageUploaded=true; + if(INIMAGE!=''){ + let isExists=await RNFS.exists(INIMAGE.uri).then((res)=>{return res;}); + console.log('isExists file',isExists); + if(isExists==true){ + let fileData=getImagePOSTData(INIMAGE,d2); + let isImageUploaded=await UploadImagesWithoutWait(fileData,url2); + if(isImageUploaded==false){ + allImageUploaded=false; + } + } + } + if(OUTIMAGE!=''){ + let isExists=await RNFS.exists(OUTIMAGE.uri).then((res)=>{return res;}); + console.log('isExists file',isExists); + if(isExists==true){ + let fileData=getImagePOSTData(OUTIMAGE,d2); + let isImageUploaded=await UploadImagesWithoutWait(fileData,url2); + if(isImageUploaded==false){ + allImageUploaded=false; + } + } + } + if(allImageUploaded==true){ + console.log('all Visitor image uploaded'); + let isupdated=await updateVLUploadStatus(item); + if(isupdated==true){ + setProcessing(false); + notify(ST.Visitordatauploaded); + } + else{ + setProcessing(false); + notify(ST.Cannotuploadvisitordata); + } + setCurrentCheckOutItem({}); + + } + else{ + setProcessing(false); + notify(ST.Cannotuploadvisitordata); + setCurrentCheckOutItem({}); + } + + }else{ + setProcessing(false); + notify(ST.Cannotuploadvisitordata); + setCurrentCheckOutItem({}); + } + }) + .catch((err)=>{ + console.log(err); + setProcessing(false); + notify(ST.Cannotuploadvisitordata); + setCurrentCheckOutItem({}); + }); + + } + + async function updateVLUploadStatus(item){ + return new Promise((resolve,reject)=>{ + db.transaction(async function (txn) { + + let q=`Update ${AppTables.VISITOR_LOGIN} SET UPLOADSTATUS='U' WHERE EMP_CODE='${item.EMP_CODE}' AND VISIT_DATE='${d2}'`; + await txn.executeSql(q,[],async function (txn2, txnres) { + console.log('Visitor Updated'); + let allVisitors=visitors; + let thisVisIndex=allVisitors.findIndex(i=>i.EMP_CODE==item.EMP_CODE); + if(thisVisIndex>=0){ + let thisVis=allVisitors[thisVisIndex] || {}; + thisVis['UPLOADSTATUS']='U'; + allVisitors[thisVisIndex]=thisVis; + setVisitors(allVisitors); + setrerenderdata(!rerenderdata); + resolve(true); + } + else{ + resolve(false); + } + },function (txnE,txnerr) { console.log(txnerr);resolve(false); },); + + }); + }).then((val)=>{ + return val; + }).catch((err)=>{ + console.log(err); + return false; + }); + } + + function _render_CheckOutModal(){ + + let data=currentCheckOutItem; + let item={"EmpId":data.EMP_ID,"EmployeeName":data.NAME,"DesignationName":data.DESIGNATION,"LegacyCode":data.EMP_CODE}; + let image_key=item.EmpId+'Out_Image'; + let image_path_key=item.EmpId+'Out_ImagePath'; + let Image1=EmpData[image_path_key] || ''; + return ( + + + + + { (Image1=='' || Image1==null) && + {openCamera(item,'Out')}}> + + + } + { (Image1!='' && Image1!=null) && + + + {openCamera(item,'Out')}}> + + + + } + + + + {cancelCehckout()}}> + {ST.Cancel} + + {checkOutEmpl(item)}}> + {ST.Save} + + + + + + ) + } + + function _render_RemoveAlert(){ + let data=removedVisitor; + return ( + + + {setShowRemoveVistor(false)}}> + {ST.Cancel} + + {removeVisitor(removedVisitor)}}> + {ST.Yes} + + + + ) + } + + return ( + + {processing && } + + {_render_CheckOutModal()} + {_render_RemoveAlert()} + {setShowCamera(false);getImage(imgData)}} showCamera={showCamera} onHideCamera={()=>{setShowCamera(false);}}/> + + + + { !props.isDataDownloaded && } + { props.isDataDownloaded==true && + + + + {ST.Username+' :'} + {props.UserId} + + + {ST.Designation+' :'} + {designation} + + + + + + {ST.Visitors} + props.navigation.navigate('VisitorLoginQA')}> + {"Add Visitors"} + + + + + {ST.Name} + + + {ST.Designation} + + + {ST.Actions} + + + + { + visitors.length>0 && + visitors.map((item,index)=>{ + return( + + + {item.NAME} + + + {item.DESIGNATION} + + {item.UPLOADSTATUS!='U' && (item.OUT_TIME=='' || item.OUT_TIME==null) && + + {onCheckOut(item)}}> + {ST.CheckOut} + + {onDelete(item)}}> + + + + } + {item.UPLOADSTATUS!='U' && (item.OUT_TIME!='' && item.OUT_TIME!=null) && + + + {ST.CheckedOut} + + } + + {item.UPLOADSTATUS=='U' && + + + {ST.Uploaded} + + } + + + ) + }) + } + + + + + } + + + + ); +} + +export default connect(mapStateToProps, mapDispatchToProps)(VisitorLogin); diff --git a/PerformicsSrc/src/screens/VisitorLoginQA.js b/PerformicsSrc/src/screens/VisitorLoginQA.js new file mode 100644 index 0000000..a078c60 --- /dev/null +++ b/PerformicsSrc/src/screens/VisitorLoginQA.js @@ -0,0 +1,1854 @@ +import { View, Text,TouchableOpacity,Image,FlatList,TextInput,Alert, ScrollView, Keyboard} from 'react-native' +import React,{useState,useEffect} from 'react'; +import {useRoute} from '@react-navigation/native'; +import { globalStyles,customStyles,GetPageTheme } from "../styles/Global"; +import moment from 'moment'; +import {AntDesign, Entypo, FontAwesome, FontAwesome5, Fontisto, MaterialCommunityIcons} from '../components/icons'; + +import Container from '../components/container'; +import CustomLoader from '../components/CustomLoader'; +import {db, ImageFolderPath, URL_IMAGE, VisitorLoginImageFolderPath} from '../constants/constants'; +import {getAllFileForAFolder, getAllFolderImages, getDownloadJson,marktext1,marktext2, resizeImage, restore_ImageWithMetaData, UploadData2, validateNumber} from '../controller/functions'; +import LinearGradient from 'react-native-linear-gradient'; +import CameraImg from '../assets/performics/camera_front_image.svg' +import * as RNFS from 'react-native-fs'; +import {notify} from '../components/notify'; +import { connect } from 'react-redux'; +import CustomCamera from '../components/Camera'; +import { mapStateToProps,mapDispatchToProps } from '../reducers/contextProvider'; +import {empdata} from './VisitorLogin' +import CustomHeader from '../components/customHeader'; +import { AppTables } from '../constants/tableConstants'; +import { ConfirmSaveAlert } from '../components/alert'; +import GradientButton from '../components/gradientButton'; +import ModalSelector from 'react-native-modal-selector'; +import MultiSelect from 'react-native-multiple-select'; +import { PageTheme } from '../styles/Themes'; +import DateTimePicker from '@react-native-community/datetimepicker'; +import DraggableFlatList,{ScaleDecorator} from 'react-native-draggable-flatlist' +import { getMethodName, METHODS } from '../constants/methodNames'; +import { getImagePOSTData, uploadAll_VisImages, UploadImagesWithoutWait } from '../constants/uploadData'; +// import AudioRecorderPlayer, { AudioEncoderAndroidType, AudioSourceAndroidType, AVEncoderAudioQualityIOSType, AVEncodingOption, AVModeIOSOption } from 'react-native-audio-recorder-player'; + + +function VisitorLoginQA(props){ + const route = useRoute(); + + const ST=props.StaticText || {}; + const projectCode=props.projectCode; + const PageTheme=GetPageTheme(props.DarkMode,route.name); + const customStyle=customStyles(props.DarkMode,route.name); + const d1=new Date(); + const d2=moment(d1).format('MM/DD/YYYY'); + const [visitorFeedback, setvisitorFeedback] = useState([]); + const [processing, setProcessing] = useState(false); + const [loaderTitle, setLoaderTitle] = useState(); + const [getImageProps,setGetImageProps]= useState({}); + const [showCamera, setShowCamera] = useState(false); + const [image, setImage]= useState({}); + const [rerenderdata, setrerenderdata]= useState(0); + const [showAlert, setShowAlert] = useState(false); + const [SurveyQuestions, setSurveyQuestions]= useState([]); + + const [SurveySubCats, setSurveySubCats]= useState([]); + const [QuestionsData,setQuestionsData]=useState({}); + const [hasUnsavedChanges,setHasUnsavedChanges] = useState(false); + const [EditMode, setEditMode] = useState(false); + const [vfQuestion, setvfQuestion] = useState({}); + const [defaultRating, setDefaultRating] = useState(2); + const [starCalQtns, setstarCalQtns] = useState([]); + + const StartCount= 5; + const [maxRating, setMaxRating] = useState([]); + const [employeeCode, setEmployeeCode]= useState(''); + const [searchedEmployees, setSearchedEmployees] = useState([]); + + const [EmpData, setEmpData]= useState({}); +// const [visitors, setVisitors] = useState([]); + +useEffect(()=>{ + console.log("vfQuestion---------",vfQuestion) +},[vfQuestion]) + + useEffect(() => { + setLoaderTitle(ST.Loading+'...') + let params=props.route.params? props.route.params:{}; + console.log('params',params) + let visitorfeedbackData=params.visitoreditdata || {}; + let editMode1=params.EditMode || false; + setEditMode(editMode1); + console.log('visitorfeedbackData',visitorfeedbackData.NAME) + setvisitorFeedback(visitorfeedbackData); + getData(editMode1,visitorfeedbackData); + console.log('props',props.UserId) + // addEmpl(); + return function cleanup() { + props.navigation.removeListener('beforeRemove', onBeforeRemove); + }; + + },[]); + + useEffect(() => { + const unsubscribe=props.navigation.addListener('beforeRemove', onBeforeRemove); + return unsubscribe; + }, [hasUnsavedChanges]); + + useEffect(() => { + const unsubscribe=props.navigation.addListener('beforeRemove', onBeforeRemove); + return unsubscribe; + }, [showCamera]); + + function onBeforeRemove(e){ + if(showCamera==true){ + e.preventDefault(); + setShowCamera(false); + } + else{ + if (hasUnsavedChanges==true) { + e.preventDefault(); // Prevent default behavior of leaving the screen + onRemoveScreen(e); + } + else{ + return; + } + } + } + + function onRemoveScreen(e){ + Alert.alert( + "", + ST.Doyoureallywanttoexitthescreen, + [ + { + text: ST.Cancel, + onPress: () => {}, + style: "cancel" + }, + { text: ST.OK, onPress: () => {setHasUnsavedChanges(false);props.navigation.dispatch(e.data.action);} } + ] + ); + } + + + async function onSubmitData(){ + let isvalid=await validate(); + if(isvalid){ + Keyboard.dismiss(); + setShowAlert(true); + } + } + + function onSaveCancel(){ + setShowAlert(false); + } + + + async function getData(editMode1=false,vfData={}){ + try { + console.log("editMode1",editMode1); + let arr=[]; + for(let sIndex=1;sIndex<=StartCount;sIndex++){ + arr.push(sIndex); + if(sIndex==StartCount){ + setMaxRating(arr); + } + } + + if(editMode1){ + // designation + let obj = {'name':vfData.NAME,'designation':vfData.DESIGNATION} + setvfQuestion(obj); + + let imagePath='file://'+VisitorLoginImageFolderPath+vfData.IMAGE; + + let objimg = {'Visitor_Image':vfData.IMAGE,'Visitor_ImagePath':imagePath} + setImage(objimg); + + } + + await db.transaction(async function (txn) { + + + let q2='SELECT Distinct CategoryId,Category,CategorySequence FROM Master_VisitorLoginQuestion'; + await txn.executeSql(q2,[],async function (txn2, txnres) { + console.log('feedback survey:',txnres.rows.length); + if(txnres.rows.length>0){ + let arr=[],allQtns=[],allavgquest=[]; + for(var i=0;i{ + try { + + db.transaction(async function (txn) { + + if(editMode1){ + let selectlist=` DISTINCT T.MaxLength as MaxLength,T.MinLength as MinLength,T.CategoryId,T.Category,T.LengthValidation as LengthValidation,T.QuestionImageAllow as QuestionImageAllow,T.DateRange as DateRange,T.Question as Question,T.QuestionId as QuestionId,T.QuestionType as QuestionType,T.OTP as OTP,T1.ANSWER As Answer, T1.ANSWER_ID as AnswerId,T1.IMAGE_ALLOW1 as ImageAllow1,T1.IMAGE1 as Image1,T1.IMAGE_ALLOW2 as ImageAllow2,T1.IMAGE2 as Image2,T1.MULTI_OPTIONS_IDS as multi_op_ids,T1.IS_DISABLED as isDisabled `; + //let sl=` DISTINCT mvf.MaxLength,mvf.MinLength,mvf.LengthValidation,Question,QuestionId,QuestionType,OTP,QuestionImageAllow,DateRange,QuestionCalculate`; + let join=`Inner join Master_VisitorLoginQuestion T on T1.QUESTION_ID=T.QuestionId and T1.CATEGORY_ID=T.CategoryId`; + let q=` SELECT ${selectlist} FROM ${AppTables.VISITOR_LOGIN_FEEDBACK} T1 ${join} where T1.CATEGORY_ID='${catData.CategoryId}' and T1.NAME='${NAME}' and T1.DESIGNATION='${DESIGNATION}' and T1.VISIT_DATE='${d2}' `; + // let q3=` SELECT * FROM ${AppTables.VISITOR_LOGIN_FEEDBACK} T1 where T1.CATEGORY_ID='${catData.CategoryId}' and T1.VISIT_DATE='${d2}' `; + + console.log('querydata',catData.CategoryId) + await txn.executeSql(q,[],async function (txn2, txnres2) { + console.log('Surveys:',txnres2.rows.length) + let arr=[]; + let arr2=[]; + var QD=QuestionsData; + if(txnres2.rows.length>0){ + for(var i=0;i0){ + for(var k=0;k=0)){ + showImageTag=true; + } + + if(qtn.QuestionType=='List_Single_Choice' && (isandImgAl2 && ansss.AnswerId==selansid)){ + showImageTag2=true; + } + else if(qtn.QuestionType=='List_Multi_Choice' && (isandImgAl2 && selansid.indexOf(ansss.AnswerId)>=0)){ + showImageTag2=true; + } + + } + } + } + + if(showImageTag){ + let imgPath=data.Image1!=''?((Platform.OS=='ios'?'file://':'')+VisitorLoginImageFolderPath+data.Image1):''; + QD[imgname_key]=data.Image1; + QD[img_key]=imgPath; + } + + if(showImageTag2){ + let imgPath=data.Image2!=''?((Platform.OS=='ios'?'file://':'')+VisitorLoginImageFolderPath+data.Image2):''; + QD[imgname_key2]=data.Image2; + QD[img_key2]=imgPath; + } + + if(qtn.QuestionType=='Audio'){ + let voicefile_path=(Platform.OS=='ios'?'file://':'')+VisitorLoginImageFolderPath+'Recordings/'+data.Answer; + QD[voiceClip_key]={'path':voicefile_path,'filename':data.Answer}; + } + + if(qtn.QuestionType=='Date'){ + let dayonly=moment().format('DD'); + let actual_date=data.Answer?data.Answer.split('/'):[]; + let month=actual_date[0],year=actual_date[1]; + let fulldate=month+'/'+dayonly+'/'+year; + QD[date_key]=fulldate; + + } + arr.push(data); + + if(data.QuestionType=='RatingStarCal'){ + arr2.push(data) + } + if(i==txnres2.rows.length-1){ + obj['qtns']= arr; + obj['avgqtns']= arr2; + setQuestionsData(arr); + resolve(obj); + } + } + } + else{ + resolve(obj); + } + },function (txnE,txnerr) { console.log(txnerr);resolve(obj); },); + } + else{ + let sl=` DISTINCT MaxLength,MinLength,LengthValidation,CategoryId,Category,Question,QuestionId,QuestionType,OTP,QuestionImageAllow,DateRange,QuestionCalculate`; + let q=` SELECT ${sl} FROM Master_VisitorLoginQuestion where CategoryId='${catData.CategoryId}' `; + console.log('catData',catData.CategoryId) + await txn.executeSql(q,[],async function (txn2, txnres2) { + console.log('Surveys:',txnres2.rows.length) + let arr=[]; + let arr2=[]; + var QD=QuestionsData; + if(txnres2.rows.length>0){ + for(var i=0;i { + let isAlreadyExist=false; + + await db.transaction(async function (txn) { + let currentTime=moment().format('HH:mm:ss'); + let d3=moment().format('MM/DD/YYYY'); + let image_key=item.EmpId+'In_Image'; + let image_path_key=item.EmpId+'In_ImagePath'; + let image1=EmpData[image_key] || ''; + let values=`('${EmpId}','${LegacyCode}','${EmployeeName}','${DesignationName}','I','${d3}','${currentTime}','','${image.Visitor_Image}','','${d3}')`; + let q=`INSERT INTO ${AppTables.VISITOR_LOGIN}(EMP_ID,EMP_CODE,NAME,DESIGNATION,UPLOADSTATUS,VISIT_DATE,IN_TIME,OUT_TIME,IN_TIME_IMAGE,OUT_TIME_IMAGE,ADDED_DATE) VALUES ${values}`; + let q2=`SELECT * FROM ${AppTables.VISITOR_LOGIN} WHERE VISIT_DATE='${d3}'`; + + let q3=`SELECT * FROM ${AppTables.VISITOR_LOGIN} WHERE VISIT_DATE='${d3}' and EMP_CODE='${LegacyCode}'`; + await txn.executeSql(q3,[],async function (txn2, txnres3) { + if(txnres3.rows.length>0){ + setProcessing(false); + notify(ST.Visitor+' '+LegacyCode+' '+ST.Alreadyexists); + console.log("isAlreadyExist-----",true) + isAlreadyExist=true; + resolve(true); + // return true + } + else{ + await txn.executeSql(q,[],async function (txn2, txnres) { + console.log('Visitor added'); + + await txn.executeSql(q2,[],async function (txn2, txnres2) { + console.log('Visitors',txnres2.rows.length); + if(txnres2.rows.length>0){ + + let arr=[]; + for(var i=0;i{ + db.transaction(async function (txn) { + // get inserted audits + let selectlist=` DISTINCT Answer,AnswerId,ImageAllow1,ImageAllow2,EnableQuestion,DisableQuestion`; + // let join=` INNER JOIN Mapping_Survey M on T.SurveyId=M.SurveyId`; + let q2=`Select ${selectlist} FROM Master_VisitorLoginQuestion WHERE QuestionId='${qtn.QuestionId}' ORDER BY AnswerSequence `; + // console.log('q',q2) + + await txn.executeSql(q2,[],async function (txn2, txnres) { + // console.log('answers len',txnres.rows.length); + if(txnres.rows.length>0){ + let arr=[]; + for(var i=0;i{ + return {'Answers':val,'Success':true}; + }).catch((err)=>{ + console.log(err); + return {'Success':false,'Error':err} + }); +} + + + + async function getImage(imgdata){ + let qtn=getImageProps.qtn || ''; + let type=getImageProps.type || '1'; + let imagetype = getImageProps.imagetype|| '1'; + console.log('qtnGetImage in getImage',qtn) + console.log('typeGetImage',type) + console.log('imagetypeGetImage',imagetype) + if(typeof imgdata =='object' && imgdata.errorCode=='camera_unavailable'){ + notify(ST.Cameraunavailable); + } + else if(typeof imgdata =='object' && imgdata.uri!=null){ + const img=imgdata; + const imgurl=img.uri, imgWidth=img.width, imgHeight=img.ExtendedHeight; + let isImgFromGallery=img.fromGallery!=null?img.fromGallery:false; + let picture_clickedd=isImgFromGallery==true?img.datetime:new Date(); + + let picture_clicked_time=moment(picture_clickedd).format('MM-DD-YYYY HH:mm:ss') + let picture_clicked_time_for_pic_name=moment(picture_clickedd).format('MMDDYYYY_HHmmss') + + console.log("time", picture_clicked_time); + console.log("time1", picture_clicked_time_for_pic_name); + let calculate_tym_date_for_filename = picture_clicked_time_for_pic_name; + let calculate_tym_date_over_img = picture_clicked_time; + + const mark_text1=calculate_tym_date_over_img; + const mark_text2='User Name:'+props.UserId+' | Image Type: Visitor Login QA'+' | Date:'+calculate_tym_date_over_img; + + const removespace = vfQuestion.EmpId + + let filename = ''; + let image_key = ''; + let image_path_key = ''; + let allData = ''; + let qd = ''; + + if(imagetype==1){ + filename=(props.UserId || '')+'_'+removespace+'_'+vfQuestion.designation+'_VisitorImg-'+calculate_tym_date_for_filename+'.jpg'; + allData=image; + console.log('allData',allData=image) + image_key='Visitor_Image'; + image_path_key='Visitor_ImagePath'; + allData[image_key]=filename; + console.log('image_key',allData[image_key]=filename) + + } + else{ + qd=QuestionsData; + filename=(props.UserId || '')+'_'+removespace+'_'+vfQuestion.designation+'_'+qtn.QuestionId+'_VisitorFeedbackImg_'+calculate_tym_date_for_filename+'.jpg'; + + image_key=type=='1'?qtn.QuestionId+'_ImageName1':qtn.QuestionId+'_ImageName2'; + image_path_key=type=='1'?qtn.QuestionId+'_ImagePath1':qtn.QuestionId+'_ImagePath2'; + + qd[image_key]=filename; + console.log('questiondata',qd) + + } + + + let imagePath=VisitorLoginImageFolderPath+filename; + RNFS.copyFile(imgurl, imagePath) + .then(async(resn) => { + // render data with clicked image + let uri='file://'+imagePath; + if(imagetype==1){ + console.log('image_path_key',allData[image_path_key]=uri) + allData[image_path_key]=uri; + console.log('allDatavisitor',allData) + setImage(allData); + } + else{ + qd[image_path_key]=uri; + setQuestionsData(qd); + } + + setHasUnsavedChanges(true); + setrerenderdata(!rerenderdata); + + // add metdata then resize image and restored back to the imagePath + let restore_data={"destFilePath":imagePath,"imgurl":imgurl,imgWidth,imgHeight,mark_text1,mark_text2} + let is_restored=await restore_ImageWithMetaData(restore_data,imgdata); + console.log("image restored:",is_restored); + }) + .catch(err => { + console.log('ERROR: image file write failed!!!'); + console.log(err.message, err.code); + }); + + } + + } + + + + + + async function disableQtns(){ + + if(DQtns.length>0){ + new Promise.all( + DQtns.map((qid,q_index)=>{ + let s_qtnindex=sqtns.findIndex(i=>i.QuestionId==qid) || {}; + console.log('sqtns qid',qid,s_qtnindex) + let s_qtn=sqtns[s_qtnindex]; + s_qtn['isDisabled']=true + sqtns[s_qtnindex]=s_qtn; + let id_key=s_qtn.QuestionId+'_AnswerId'; + let ans_key=s_qtn.QuestionId+'_Answer'; + data[id_key]=0; + data[ans_key]=''; + return false + }) + ).then(async (val)=>{ + setSurveyQuestions(sqtns); + setQuestionsData(data); + setHasUnsavedChanges(true); + setrerenderdata(!rerenderdata); + }) + } + } + + async function enableQtns(){ + new Promise.all( + EQtns.map((qid,q_index)=>{ + let s_qtnindex=sqtns.findIndex(i=>i.QuestionId==qid) || {}; + let s_qtn=sqtns[s_qtnindex]; + s_qtn['isDisabled']=false + sqtns[s_qtnindex]=s_qtn; + return false + }) + ).then(async (val)=>{ + if(DQtns.length>0){ + disableQtns() + } + else{ + setSurveyQuestions(sqtns); + setHasUnsavedChanges(true); + setrerenderdata(!rerenderdata); + } + }) + } + + function onselectionChange(option,qtn){ + let data=QuestionsData; + let id_key=qtn.QuestionId+'_AnswerId'; + let ans_key=qtn.QuestionId+'_Answer'; + data[id_key]=option.value; + data[ans_key]=option.label; + + setQuestionsData(data); + + let aq_ans=qtn.Answers!=null?qtn.Answers:[]; + let ans_obj=aq_ans.find(i=>i.AnswerId==option.value) || {}; + let EQtns=ans_obj.EnableQuestion!=null && ans_obj.EnableQuestion!=''?ans_obj.EnableQuestion.replace(' ','').split(','):[]; + let DQtns=ans_obj.DisableQuestion!=null && ans_obj.DisableQuestion!=''?ans_obj.DisableQuestion.replace(' ','').split(','):[]; + + console.log('EQtns:',EQtns,DQtns); + let sqtns=SurveyQuestions + if(EQtns.length>0){ + enableQtns() + } + else if(DQtns.length>0){ + disableQtns() + } + else{ + setHasUnsavedChanges(true); + setrerenderdata(!rerenderdata); + } + } + + async function setTextValue(value,qtn,type='') { + if(value!=''){ + let isValid=validateNumber(value,type); + if(!isValid){ + return; + } + + } + + let id_key=qtn.QuestionId+'_AnswerId'; + let ans_key=qtn.QuestionId+'_Answer'; + + let obj=QuestionsData; + if(qtn.QuestionType=='Date' ){ + let date_key=qtn.QuestionId+'_Date'; + let d=value!=null?new Date(value):new Date(); + let mfdate=moment(d).format('MM/YYYY'); + showQtnDatePicker(qtn,false); + obj[id_key]=0; + obj[ans_key]=mfdate; + obj[date_key]=moment(d).format('MM/DD/YYYY'); + } + else if(qtn.QuestionType=='RatingStar'){ + obj[id_key]=0; + obj[ans_key]=value; + + + let averagequestions = starCalQtns; + console.log('averagequestions',averagequestions) + + + for(let i=0;i{ + + for (let i = 0; i{ + // ids.push(item.AnswerId); + // }) + setRatingOrder(data); + } + + + async function openCamera(qtn,type,imagetype){ + console.log('qtnsetImage',qtn) + console.log('typesetImage',type) + console.log('imagetypesetImage',imagetype) + setGetImageProps({'qtn':qtn,'type':type,'imagetype':imagetype}); + setShowCamera(true); + // props.navigation.navigate('CameraScreen',{'getImage':getImage,'cameraType':'front'}) + } + + function render_Picker(label_key,value_key,onChange=()=>{},selected_data={}){ + var data=[]; + let qtn=selected_data.qtn || {}; + let isQtnDisabled=qtn.isDisabled!=null && qtn.isDisabled!=''?qtn.isDisabled:false; + let allAnswers=qtn.Answers || []; + + allAnswers.map((item,index)=>{ + let obj={ key: index, label: item[label_key],value:item[value_key] }; + if(selected_data.value==item[label_key]) + obj['component']= {item[label_key]}; + data.push(obj); + }); + + return ( + {onChange(option,qtn) }} + overlayStyle={customStyle.addVisPickerOverlay} + cancelContainerStyle={customStyle.addVisPicker_OptionContainerStyle} + optionStyle={customStyle.addvis_opStyle} + optionTextStyle={customStyle.addvis_opTextStyle} + optionContainerStyle={customStyle.addVisPicker_OptionContainerStyle} + selectedKey={'1'} + disabled={isQtnDisabled} + cancelText={ST.Cancel} + > + {(selected_data.value!=null && selected_data.value!=''?selected_data.value: '-select-')} + + ) + } + + + async function saveData(){ + setHasUnsavedChanges(false); + setShowAlert(false); + setLoaderTitle(ST.SavingData+'...'); + setProcessing(true); + if(SurveyQuestions.length>0){ + if(!Boolean(searchedEmployees && searchedEmployees[0])){ + notify('Employee data is missing..'); + return + } + let userAlreadyexists=await addEmpl(searchedEmployees[0]); + if(userAlreadyexists){ + return + } + let currentTime=moment().format('HH:mm:ss'); + let d3=moment().format('MM/DD/YYYY'); + let image_key='Visitor_Image'; + let image_path_key='Visitor_ImagePath'; + let image1=image[image_key] || ''; + let AllVisitorImages=await getAllFileForAFolder(VisitorLoginImageFolderPath,"VisitorLoginFeedbackImages","VisitorLoginFeedback"); + console.log("AllVisitorImages:",AllVisitorImages.length); + + + try{ + await db.transaction(async function (txn) { + + let q=`select * from ${AppTables.VISITOR_LOGIN_FEEDBACK} WHERE NAME='${vfQuestion.name}'and DESIGNATION='${vfQuestion.designation}' AND VISIT_DATE='${d3}'`; + console.log('query:',q) + await txn.executeSql(q,[],async function (txn2, txnres) { + console.log('query count:',txnres.rows.length); + // if(txnres.rows.length>0){ + // notify('Visitor Feedback Data with this name and designation already exists!') + // setProcessing(false); + // } + // else{ + + let q=`DELETE FROM ${AppTables.VISITOR_LOGIN_FEEDBACK} WHERE NAME='${vfQuestion.name}'and DESIGNATION='${vfQuestion.designation}' AND VISIT_DATE='${d3}'`; + // remove old data + await txn.executeSql(q,[],async function (txn2, txnres) { + console.log('survey data deleted'); + },function (txnE,txnerr) { console.log(txnerr); },); + + var values=''; + let feedbackData = {}; + let questionData=[]; + + + + feedbackData['Name']=vfQuestion.name; + feedbackData['Designation']= vfQuestion.designation; + feedbackData['Image']=image.Visitor_Image; + feedbackData['UserId']=props.UserId; + feedbackData['VisitDate']=d2; + + + for(var i=0;ii.AnswerId==selansid) + imgallow1=ans_obj!=null && ans_obj['ImageAllow1']!=null?ans_obj.ImageAllow1:false; + imgallow2=ans_obj!=null && ans_obj['ImageAllow2']!=null?ans_obj.ImageAllow2:false; + let f_imgalloq1=(QuestionImageAllow=='true' || QuestionImageAllow==1) || (imgallow1=='true' || imgallow1==1) + + values+=` ('${d2}','${vfQuestion.legacyCode}','${vfQuestion.name}','${vfQuestion.designation}','${image.Visitor_Image}','${'I'}','${CategoryId}','${Question}','${QuestionId}','${QuestionType}','${selans}','${selansid}','${f_imgalloq1}','${(imgName1 || '')}','${imgallow2}','${(imgName2 || '')}','${multiops}','${isQtnDisabled}') `; + + + // let {EmpId, UserId,Answer,AnswerId,ImageAllow1,Image1,ImageAllow2,Image2,MultiOptionsIds} = '' + + obj1['CategoryId']=CategoryId; + obj1['QuestionId']=QuestionId; + obj1['QuestionType']=QuestionType; + obj1['Answer']=selans; + obj1['AnswerId']=selansid; + obj1['MultiAnswerId']=multiops!=null && multiops!='undefined'?multiops:''; + obj1['AnswerImage1']=imgName1; + obj1['AnswerImage2']=imgName2; + obj1['UserId']=props.UserId; + + + + + questionData.push(obj1) + + // console.log('feedbackdata data:',obj1); + } + + feedbackData['feedbackData']=questionData; + + let add_data=`INSERT INTO ${AppTables.VISITOR_LOGIN_FEEDBACK} (VISIT_DATE,EMP_CODE,NAME,DESIGNATION,IMAGE,UPLOADSTATUS,CATEGORY_ID,QUESTION,QUESTION_ID,QUESTION_TYPE,ANSWER,ANSWER_ID,IMAGE_ALLOW1,IMAGE1,IMAGE_ALLOW2,IMAGE2,MULTI_OPTIONS_IDS,IS_DISABLED) VALUES ${values} `; + + await txn.executeSql(add_data,[],async function (txn2, txnres) { + console.log('visitor feedback added'); + notify('visitor feedback added successfully'); + setLoaderTitle("Uploading Data...") + // uploadVisitorFeedback(feedbackData,AllVisitorImages); + setProcessing(false); + props.navigation.goBack(); + },function (txnE,txnerr) { console.log(txnerr);setProcessing(false);notify('Cannot update feedback') },); + + // } + },function (txnE,txnerr) { + console.log("error:",txnE,txnerr); + console.log(txnerr);setProcessing(false);notify(ST.Cannotupdatevisitor); + }); + }); + } + catch(err){ + console.log('err',err); + setProcessing(false); + } + + }else{ + // await addEmpl(searchedEmployees[0]); + let userAlreadyexists=await addEmpl(searchedEmployees[0]); + console.log("userAlreadyexists---",userAlreadyexists) + if(userAlreadyexists){ + return + } + props.navigation.goBack(); + setProcessing(false); + } + + } + + async function updateVLUploadStatus(){ + return new Promise((resolve,reject)=>{ + db.transaction(async function (txn) { + + let q=`Update ${AppTables.VISITOR_LOGIN_FEEDBACK} SET UPLOADSTATUS='U' WHERE NAME='${vfQuestion.name}' AND DESIGNATION='${vfQuestion.designation}' AND VISIT_DATE='${d2}'`; + await txn.executeSql(q,[],async function (txn2, txnres) { + resolve(true); + + },function (txnE,txnerr) { console.log(txnerr);resolve(false); },); + + }); + }).then((val)=>{ + return val; + }).catch((err)=>{ + console.log(err); + return false; + }); + } + + + + async function uploadVisitorFeedback(feedbackData,AllVisitorImages=[]){ + const url=props.baseurl+getMethodName(METHODS.UPLOADJSON_METHOD); + console.log('pdurl',url) + + + let postData={ + 'MID':0, + 'Keys':'VisitorLoginFeedbackQA', + 'JsonData':JSON.stringify(feedbackData), + 'UserId':props.UserId,}; + + console.log('postData',postData) + UploadData2(url,postData) + .then(async(res)=>{ + console.log('res:',res); + if(res.UploadJsonResult!=null && res.UploadJsonResult=='Success'){ + const url2=(props.imageUploadUrl || URL_IMAGE)+getMethodName(METHODS.UPLOADIMAGES_METHOD); + console.log('url2',url2) + let allImageUploaded=await uploadAll_VisImages(props,AllVisitorImages); + console.log('allImageUploaded',allImageUploaded) + if(allImageUploaded==true){ + console.log('all Visitor image uploaded'); + let isUpdated=await updateVLUploadStatus(); + if(isUpdated){ + notify('Uploaded successully'); + } + setProcessing(false); + props.navigation.goBack(); + } + else{ + notify(ST.CannotuploadvisitorfeedbackQAdata); + setProcessing(false); + props.navigation.goBack(); + } + + }else{ + notify(ST.CannotuploadvisitorfeedbackQAdata); + setProcessing(false); + props.navigation.goBack(); + } + }) + .catch((err)=>{ + console.log(err); + notify(ST.CannotuploadvisitorfeedbackQAdata); + setProcessing(false); + props.navigation.goBack(); + }); + + } + +// async function updateVLUploadStatus(){ +// return new Promise((resolve,reject)=>{ +// db.transaction(async function (txn) { + +// let q=`Update ${AppTables.VISITOR_LOGIN} SET UPLOADSTATUS='U' WHERE EMP_CODE='${visitorFeedback.EMP_CODE}' AND VISIT_DATE='${d2}'`; +// await txn.executeSql(q,[],async function (txn2, txnres) { +// resolve(true); + +// },function (txnE,txnerr) { console.log(txnerr);resolve(false); },); + +// }); +// }).then((val)=>{ +// return val; +// }).catch((err)=>{ +// console.log(err); +// return false; +// }); +// } + + + + + + async function validate(){ + // let Image1MandIndex='Image1Mandatory'; + // let Image1MandObj=Image1MandIndex>=0?KPIFields[Image1MandIndex]:{}; + let isImage1Mand=true; + + // let Image2MandIndex=KPIFields.findIndex(i=>i.KPIFieldName=='Image2Mandatory'); + // let Image2MandObj=Image2MandIndex>=0?KPIFields[Image2MandIndex]:{}; + let isImage2Mand=false; + + + + var isvalid=true; + const QD=QuestionsData; + console.log('image.Visitor_ImagePath',image.Visitor_ImagePath) + + + + if (!vfQuestion.name) { + // alert('Please enter Name'); + notify("Please search employee",'SHORT'); + isvalid=false; + } + else if (!vfQuestion.designation) { + // alert('Please enter Designation'); + notify("Please search employee",'SHORT'); + isvalid=false; + } + else + if(!image.Visitor_ImagePath){ + isvalid=false; + notify(ST.Pleaseaddimages,'SHORT'); + } + + else{ + for(var i=0;i=0 && QD[ans_key]===''))){ + isvalid=false; + let msg=( qtn.QuestionType=='Date'?ST.Pleasepickadate:(qtn.QuestionType=='RatingStar'?'Please select rating':ST.Pleasefillalldetails)); + notify(msg,'SHORT'); + break; + } + else if( qtn.QuestionType=='Audio' && (Object.keys(QD).indexOf(voiceClip_key)<0 || (Object.keys(QD).indexOf(voiceClip_key)>=0 && (QD[voiceClip_key]==null || QD[voiceClip_key].filename==null || QD[voiceClip_key].filename=='')))){ + isvalid=false; + notify(ST.Pleaserecordaudioclipfortherequiredfield,'SHORT'); + break; + } + else if(Object.keys(QD).indexOf(id_key)<0 || (Object.keys(QD).indexOf(id_key)>=0 && (QD[id_key]===''))){ + isvalid=false; + notify(ST.Pleasefillalldetails,'SHORT'); + console.log(QD[id_key],QD,id_key) + break; + } + else if(isImgAllowed && (Object.keys(QD).indexOf(img_key)<0 || (Object.keys(QD).indexOf(img_key)>=0 && QD[img_key]===''))){ + isvalid=false; + notify(ST.Pleaseaddimages,'SHORT'); + break; + } + + // else if(imgname_key=='' || imgname_key==null){ + // isvalid=false; + // notify(ST.Pleaseaddimages,'SHORT'); + else{ + console.log('no condition found'); + } + + if((qtn.QuestionType=='List_Single_Choice' || qtn.QuestionType=='List_Multi_Choice' )){ + if (qtn.Answers && qtn.Answers.length>0){ + for(var j=0;j=0)){ + showImageTag=true; + } + + let isandImgAl2=(ansss.ImageAllow2==true || ansss.ImageAllow2=='true' || ansss.ImageAllow2==1); + if(qtn.QuestionType=='List_Single_Choice' && (isandImgAl2 && ansss.AnswerId==selansid)){ + showImageTag2=true; + } + else if(qtn.QuestionType=='List_Multi_Choice' && (isandImgAl2 && selansid.indexOf(ansss.AnswerId)>=0)){ + showImageTag2=true; + } + } + + } + + + } + if((isImage1Mand=='1' || isImage1Mand==true) && showImageTag && (Object.keys(QD).indexOf(img_key)<0 || (Object.keys(QD).indexOf(img_key)>=0 && QD[img_key]===''))){ + isvalid=false; + notify(ST.Pleaseaddimages,'SHORT'); + break; + } + + if((isImage2Mand=='1' || isImage2Mand==true) && showImageTag2 && (Object.keys(QD).indexOf(img_key2)<0 || (Object.keys(QD).indexOf(img_key2)>=0 && QD[img_key2]===''))){ + isvalid=false; + notify(ST.Pleaseaddimages,'SHORT'); + break; + } + + } + + } + } + + return isvalid; +} + + function onTextChange(key, val,type=''){ + + let data=vfQuestion; + data[key]=val; + // setHasUnsavedChanges(true); + setvfQuestion(data); + setrerenderdata(!rerenderdata); + +} + + + + function renderDatePicker(qtn){ + let qtnn=qtn; + let DateRange=qtn.DateRange; + let maxDate=moment().add(10,'years').format('MM/DD/YYYY'); + let minDate=moment().subtract(10,'years').format('MM/DD/YYYY'); + if(DateRange=='RFD'){ + maxDate=moment().format('MM/DD/YYYY'); + } + else if(DateRange=='RPD'){ + minDate=moment().format('MM/DD/YYYY'); + } + + return ( + {setTextValue(selectedDate,qtnn)}} + maximumDate={new Date(maxDate)} + minimumDate={new Date(minDate)} + /> + ); + } + + function renderItem({ }){ + return ( + + + {item.Answer} + + + ); + }; + + + function renderRatingView(){ + let qtn=RatingQtn; + let Answers=qtn.Answers; + let id_key=qtn.QuestionId+'_AnswerId'; + let ans_key=qtn.QuestionId+'_Answer'; + let rating_key=qtn.QuestionId+'_Rating'; + // let ratings=QuestionsData[rating_key]!=null?QuestionsData[rating_key].split(','):[]; + + + return ( + + + {console.log('tsth');setShow_zoomImage(false) }}> + + + + + ) + } + + function _renderSurveyQtns(subcat){ + const SurveyQuestions=subcat.Questions; + console.log('SurveyQuestions123',SurveyQuestions) + return ( + + { + + SurveyQuestions.map((item,index)=>{ + + let qtn=item; + console.log('questionsfeedback',qtn) + console.log('rendersurveyqtn',qtn) + let selansid='',selanswer='',selimg='',selimg2='',showImageTag=false,showImageTag2=false; + let id_key=qtn.QuestionId+'_AnswerId'; + let ans_key=qtn.QuestionId+'_Answer'; + let multi_key=qtn.QuestionId+'_MultiOption'; + let date_key=qtn.QuestionId+'_Date'; + let img_key=qtn.QuestionId+'_ImagePath1'; + let imgname_key=qtn.QuestionId+'_ImageName1'; + let img_key2=qtn.QuestionId+'_ImagePath2'; + let imgname_key2=qtn.QuestionId+'_ImageName2'; + let rating_key=qtn.QuestionId+'_Rating'; + let voiceClip_key=qtn.QuestionId+'_VoiceClip'; + let list_mcdata=[]; + + showImageTag=(qtn.QuestionImageAllow==true || qtn.QuestionImageAllow=='true' || qtn.QuestionImageAllow==1) ; + + if(qtn.QuestionType=='List_Single_Choice') + { + selansid=QuestionsData[id_key]!=null ?QuestionsData[id_key] :''; + selanswer=QuestionsData[ans_key]!=null ?QuestionsData[ans_key] :''; + } + else if(qtn.QuestionType=='List_Multi_Choice') + { + + if(qtn.Answers!=null){ + console.log('qtn.Answers:',qtn.Answers.length); + for(var i=0;i0){ + let arr=[]; + for(var i=0;i0){ + for(var i=0;i=0)){ + showImageTag=true; + } + + if(qtn.QuestionType=='List_Single_Choice' && (isandImgAl2 && ansss.AnswerId==selansid)){ + showImageTag2=true; + } + else if(qtn.QuestionType=='List_Multi_Choice' && (isandImgAl2 && selansid.indexOf(ansss.AnswerId)>=0)){ + showImageTag2=true; + } + } + } + } + + if(showImageTag){ + selimg=QuestionsData[img_key]!=null && QuestionsData[img_key]!=''?'file://'+QuestionsData[img_key]:''; + } + + if(showImageTag2){ + selimg2=QuestionsData[img_key2]!=null && QuestionsData[img_key2]!=''?'file://'+QuestionsData[img_key2]:''; + } + + let isDisabled=qtn.isDisabled!=null?qtn.isDisabled:false + console.log('isDisabled',qtn.QuestionId,qtn.isDisabled,isDisabled) + if(isDisabled==true){ + return ( + + ) + } + else{ + return( + + {qtn.Question} + {qtn.QuestionType=='List_Single_Choice' && qtn.Answers && + render_Picker('Answer','AnswerId',onselectionChange,{value:selanswer,qtn:qtn}) + } + {qtn.QuestionType=='List_Multi_Choice' && qtn.Answers && + {console.log('onSelectedItemsChange');setMultiSelectValue(selectedItems,qtn) }} + selectedItems={selansid} + selectText="Pick Items" + searchInputPlaceholderText="Search Items..." + // onChangeInput={ (text)=> console.log(text)} + tagRemoveIconColor={PageTheme.$primary_color} + tagBorderColor={PageTheme.$primary_color} + tagTextColor={PageTheme.$primary_color} + selectedItemTextColor={PageTheme.$primary_color} + selectedItemIconColor={PageTheme.$primary_color} + tagContainerStyle={{height:30,width:'100%',paddingVertical:5}} + styleTextTag={{fontSize:14}} + itemTextColor={PageTheme.$text_color} + displayKey="Answer" + searchInputStyle={{ color: '#CCC' }} + submitButtonColor={PageTheme.$primary_color} + submitButtonText="Submit" + /> + } + { (qtn.QuestionType=='Number' || qtn.QuestionType=='Decimal' || qtn.QuestionType=='Text') && + {setTextValue(val,qtn,(qtn.QuestionType=='Decimal'?'decimal':(qtn.QuestionType=='Text'?'text':'numeric')))}} + /> + } + { + (qtn.QuestionType=='Date') && + + {selansid!=''?selansid:'MM/YYYY'} + {setDateValue(selanswer);showQtnDatePicker(qtn,true)}}> + + + + } + { ((qtn.showDatePicker==true || qtn.showDatePicker=='true') && (qtn.QuestionType=='Date') ) && + renderDatePicker(qtn) + } + { + (qtn.QuestionType=='RatingStar') && + + { maxRating.map((item,index)=>{ + let isStarSelected=parseInt(item)<=parseInt(selansid); + + return ( + {setTextValue(item,qtn,'numeric')}}> + {!isStarSelected && } + {isStarSelected && } + + ) + }) + } + + } + { + (qtn.QuestionType=='RatingStarCal') && + + { maxRating.map((item,index)=>{ + let isStarSelected=parseInt(item)<=parseInt(selansid); + + return ( + + {!isStarSelected && } + {isStarSelected && } + + ) + }) + } + + } + + + { + (qtn.QuestionType=='Audio') && + + {selanswer} + {show_recorder(qtn);}}> + + + + } + + { + showImageTag && + + + {openCamera(qtn,'1','2')}}> + + + + } + + { + showImageTag2 && + + + {openCamera(qtn,'2','2')}}> + + + + } + + ) + } + + }) + } + + + ); + } + + function renderRecorderView(){ + + let qtn=RatingQtn; + let isRecorderPlaying=VRS.RecorderPlayStatus!=null && VRS.RecorderPlayStatus==true; + let isPlayerPlaying=VRS.PlayerPlayStatus!=null && VRS.PlayerPlayStatus==true; + const scale=animatedRipple.interpolate({ + inputRange:[0,1], + outputRange:[1,1.3], + }); + + const borderColor=animatedRipple.interpolate({ + inputRange:[0,1], + outputRange:['#f5acb4c2','#fce6e9e3'], + }); + + const scale2=animatedRipple2.interpolate({ + inputRange:[0,1], + outputRange:[1,1.5], + }); + + const borderColor2=animatedRipple2.interpolate({ + inputRange:[0,1], + outputRange:['#f5acb4c2','#fce6e9e3'], + }); + + + + let totalDuration=RecorderTimer.recordSecs!=null?RecorderTimer.recordSecs:playerTimer.totalDuration; + let wp=totalDuration!=null?Math.floor((playerTimer.playerSecs/totalDuration)* 100):0; + let width1=wp<=100?(wp>0?wp+'%':'0%'):'100%'; + if(isNaN(wp)) width1='0%'; + + return ( + + {rerenderView==rerenderView && + + {ST.RecordVoiceClip} + {ST.Youcanrecordmaxfor60secs} + {VoiceRecorderStatus} + + + + + + {startRecorder(storeData,qtn,ActiveSurvey,VRS); }}> + + + {isRecorderPlaying && + {stopRecorder(VRS); }}> + + + } + + + + {RecorderTimer.recordTime} + { + (!isRecorderPlaying && RecFilePath.filename!=null && RecFilePath.filename!='') && + + + + + + + {`${(playerTimer.playTime || '00:00:00')} / ${playerTimer.playDuration || RecorderTimer.recordTime}`} + + + + {let url=(Platform.OS=='ios'?'file://':'')+VisitorLoginImageFolderPath+'Recordings/'+RecFilePath.filename; (wp<100 && wp>0)? resumePlayer(url):startPlayer(url,VRS); }}> + + + {isPlayerPlaying && { wp<100?pausePlayer():stopPlayer(VRS); }}> + + } + + + } + + + + {onRecordCancel()}}> + {ST.Cancel} + + {onRecordSave()}}> + {ST.Save} + + + } + + ) + } + + + function _renderSurveyView(){ + return ( + + { + let subcat=item,s_index=index; + console.log('subcat',subcat) + + return ( + + + {subcat.Category} + + + { _renderSurveyQtns(subcat)} + + + + ) + }} + > + + + + ); + } + + + async function getEmplDetails(){ + if(employeeCode=='' || employeeCode==null){ + notify(ST.Pleaseenteremployeecode,'SHORT'); + } + else{ + setLoaderTitle(ST.GettingEmployeeDetails+'...'); + setProcessing(true); + // download employee details + const url=props.baseurl+getMethodName(METHODS.DOWNLOADJSON_METHOD); + + + let data={'Downloadtype':'Visitor_Search','username':props.UserId,'empid':employeeCode} + console.log(url,data); + await getDownloadJson(url, data) + .then(async(res) => { + console.log('Visitor_Search:',res); + let emp=[]; + if(res.Visitor_Search!=null){ + emp=res.Visitor_Search || []; + console.log("name-------1",res?.Visitor_Search[0]) + if(res?.Visitor_Search?.length>0){ + let name=res?.Visitor_Search[0]?.EmployeeName + let designationName=res?.Visitor_Search[0]?.DesignationName + let LegacyCode=res?.Visitor_Search[0]?.LegacyCode + let EmpId=res?.Visitor_Search[0]?.EmpId + + console.log("name-------2",name,designationName) + setvfQuestion({...vfQuestion,designation:designationName,name:name,legacyCode:LegacyCode,EmpId:EmpId}) + } + } + else{ + notify(ST.Nodatafound); + } + setSearchedEmployees(emp); + setProcessing(false); + }) + .catch(err => { + console.log('onPage Team error', err); + setProcessing(false); + }); + } + } + + return ( + + + {/* {processing && } */} + {processing && } + + + {ConfirmSaveAlert(props,showAlert,onSaveCancel,saveData)} + {setShowCamera(false);getImage(imgData)}} showCamera={showCamera} onHideCamera={()=>{setShowCamera(false);}}/> + + {/* */} + + + + + + {/* {'Employee Code'} */} + props.navigation.navigate('VisitorLoginQA')} + onChangeText={(val)=>{setEmployeeCode(val)}} + /> + + {getEmplDetails()}}> + {ST.Go} + + + + { + Object.keys(vfQuestion).length>0 && + + + + { + searchedEmployees.length>0 && + searchedEmployees.map((item,index)=>{ + let image_key=item.EmpId+'In_Image'; + let image_path_key=item.EmpId+'In_ImagePath'; + let Image1=EmpData[image_path_key] || ''; + + return( + + + {ST.Name+':'} + {(item.EmployeeName || '')} + + + {ST.Designation+':'} + {(item.DesignationName || '')} + + + + ) + }) + } + + {/* Name + {onTextChange('name',val)}} + /> */} + + {/* Designation + {onTextChange('designation',val)}} + /> */} + + Click Selfie Image + { (image.Visitor_ImagePath==null || image.Visitor_ImagePath=='') && + {openCamera('','','1')}}> + + + } + { (image.Visitor_ImagePath!='' && image.Visitor_ImagePath!=null) && + + + {openCamera('','','1')}}> + + + + } + + + Feedback Questions + + { SurveySubCats?.length>0 && _renderSurveyView() } + + + } + + + + + {onSubmitData()}}/> + + + + ) + +} +export default connect(mapStateToProps, mapDispatchToProps)(VisitorLoginQA); \ No newline at end of file diff --git a/PerformicsSrc/src/screens/WareHouseCampaignWise.js b/PerformicsSrc/src/screens/WareHouseCampaignWise.js new file mode 100644 index 0000000..8390dcc --- /dev/null +++ b/PerformicsSrc/src/screens/WareHouseCampaignWise.js @@ -0,0 +1,3076 @@ +import React, { useState, useEffect, useRef } from "react"; +import Container from "../components/container"; +import { useRoute } from "@react-navigation/native"; +import { globalStyles, customStyles, GetPageTheme } from "../styles/Global"; +import { AppState, StatusBar, Image, TextInput, View, Text, ScrollView, TouchableOpacity, Platform, PermissionsAndroid, FlatList, Alert, Animated, KeyboardAvoidingView, Keyboard } from "react-native"; +import { ReactReduxContext, connect, useSelector, useDispatch } from "react-redux"; +import { mapStateToProps, mapDispatchToProps } from "../reducers/contextProvider"; +import SQLite from "react-native-sqlite-2"; +import { notify } from "../components/notify"; +import moment from "moment"; +import { getDownloadJson, getKPIFields, marktext1, marktext2, resizeImage, restore_ImageWithMetaData, validateNumber } from "../controller/functions"; +import { get_item, set_item, clear_item } from "../components/localStorage"; +import { version, sloganline, appname, testurl, db, colors_Arr, common_ImagePath, ImageFolderPath, HierarchyTbls } from "../constants/constants"; +import CustomHeader from "../components/customHeader"; +import { Card, Menu, Switch } from "react-native-paper"; +import { AntDesign, Entypo, FontAwesome, Fontisto, Ionicons, MaterialCommunityIcons } from "../components/icons"; +import CustomLoader from "../components/CustomLoader"; +import LinearGradient from "react-native-linear-gradient"; +import { AppTables } from "../constants/tableConstants"; +import * as RNFS from "react-native-fs"; +import GradientButton from "../components/gradientButton"; +import addImg from "../assets/performics/add_image.svg"; +import CustomModal from "../components/CustomModal"; +import { ConfirmSaveAlert } from "../components/alert"; +import ModalSelector from "react-native-modal-selector"; +import { CustomPicker, CustomPicker2 } from "../components/CustomPicker"; +import CustomCamera from "../components/Camera"; +import ImageViewer from "react-native-image-zoom-viewer"; +import DateTimePicker from "@react-native-community/datetimepicker"; +import CheckBox from "@react-native-community/checkbox"; + +import CameraImg from "../assets/performics/camera_front_image.svg"; +import MultiSelect from "react-native-multiple-select"; +import CameraImg3 from "../assets/performics/camera_tick.svg"; +import CameraImg2 from "../assets/performics/camera_icon.svg"; +import CameraImg4 from "../assets/performics/camera_asterisk.svg"; +import CameraImg5 from '../assets/image/astrickcamera.svg' +import { PageTheme } from "../styles/Themes"; +import { useAnimatedStyle, useSharedValue } from "react-native-reanimated"; +import { collapseTextChangeRangesAcrossMultipleVersions } from "typescript"; + +function WareHouseCampaignWise(props) { + const route = useRoute(); + const ST = props.StaticText || {}; + + // get all theme styles acc to current theme set + const PageTheme = GetPageTheme(props.DarkMode, route.name); + const customStyle = customStyles(props.DarkMode, route.name); + const animatedChoice = useRef(new Animated.Value(0)).current; + + const [processing, setProcessing] = useState(true); + const [loaderTitle, setLoaderTitle] = useState(); + const [isAdhocScreen, setIsAdhocScreen] = useState(false); + const [storeData, setStoreData] = useState({}); + const [StoreCameraAllow, setStoreCameraAllow] = useState(true); + const [currentMenu, setCurrentMenu] = useState({}); + const [rerenderdata, setrerenderdata] = useState(0); + const [rerenderdata2, setrerenderdata2] = useState(0); + const [rerenderdata3, setrerenderdata3] = useState(0); + const [rerenderdata4, setrerenderdata4] = useState(0); + + const [hasUnsavedChanges, setHasUnsavedChanges] = useState(false); + + const [WindowData, setWindowData] = useState([]); + const [reasons_list, setReasons_list] = useState([]); + const [Windows, setWindows] = useState([]); + const [show_zoomImage, setShow_zoomImage] = useState(false); + const Show_zoomImageRef = useRef(false); + const [refImageIndex, setrefImageIndex] = useState(0); + const [zoomImageIndex, setzoomImageIndex] = useState(0); + const [showAlert, setShowAlert] = useState(false); + const [zoomImageUrl, setZoomImageUrl] = useState([]); + const [showCamera, setShowCamera] = useState(false); + const [showQRCamera, setShowQRCamera] = useState(false); + const [getImageProps, setGetImageProps] = useState({}); + const zoomView = useRef(null); + const [showRating, setShowRating] = useState(false); + const [RatingQtn, setRatingQtn] = useState({}); + const [RatingWindow, setRatingWindow] = useState({}); + const [RatingOrder, setRatingOrder] = useState([]); + + const [Products, setProducts] = useState([]); + const [DisplayList, setDisplayList] = useState([]); + const [toRemoveId, setToRemoveId] = useState(""); + const [toRemoveItem, setToRemoveItem] = useState({}); + const [showRemoveConfirm_M, setshowRemoveConfirm_M] = useState(false); + const [showRAllC_M, setShowRAllC_M] = useState(false); + const [searchedItem, setSearchedItem] = useState(""); + const [globalWindows, setGlobalWindows] = useState([]); + const [KPIFields, setKPIFields] = useState([]); + const [showSwitchCamera, setShowSwitchCamera] = useState(false); + const [ImageAllow, setImageAllow] = useState(false); + const [GridValue, setGridValue] = useState(false); + const [QREnable, setQREnable] = useState(false); + const [isOpen, setIsOpen] = useState(false); + + const [DataCleanModal, setDataCleanModal] = useState(false); + const [DataCleanAnim, setDataCleanAnim] = useState(""); + const [DataCleanItem, setDataCleanItem] = useState({}); + const [isPresentClean, setIsPresentClean] = useState(0); + + const [InputChange, setInputChange] = useState([]); + + const [SelectedImg, setSelectedImg] = useState(""); + const [showModal, setShowModal] = useState(false); + const [reCapImgModalObj, setReCapImgModalObj] = useState({}); + const [showImageSaveOp, setShowImageSaveOp] = useState(true); + const [ImgMadCount, setImgMadCount] = useState({ img1: 0, img2: 0 }); + const [AppStatus, setAppStatus] = useState(AppState.currentState); + const [QRqtnData, setQRqtnData] = useState({}); + //for Partial save + const [FilteredPromoValues, setFilteredPromoValues] = useState([]); + const [ShowCatWise, setShowCatWise] = useState(false); + const [CatData, setCatData] = useState(false); + const [ColId, setColId] = useState(""); + const [ColName, setColName] = useState(""); + const [ImageLabel, setImageLabel] = useState([]); + const [ImageMandtory, setImageMandtory] = useState(false); + const [ImageMandatoryNo, setImageMandatoryNo] = useState(); + + const hasUnsavedChangesRef = React.useRef(hasUnsavedChanges); + const WindowDataRef = React.useRef(WindowData); + const StoreIdRef = React.useRef(null); + const ScreenNameRef = React.useRef({}); + const PSGroupData = React.useRef(""); // Grouping data (Category/ SubCategory/ Brand ) for BG save fuunctionality with Partial Save Scenario + const BGPSAllow = React.useRef(false); + + + + // error field states + const [errorfield, setErrorField] = useState({}); + const [error, setError] = useState(false); + + const inputRefs = useRef({}); + + const d1 = new Date(); + const d2 = moment(d1).format("MM/DD/YYYY"); + + const [ItemsInView, setItemsInView] = useState([]); + + const onViewableItemsChanged = ({ viewableItems }) => { + // Do stuff + setItemsInView(viewableItems); + }; + + // { + // viewabilityConfig: { + // // minimumViewTime: (props.RefImagePopUpTime||0)*1000, + // viewAreaCoveragePercentThreshold: 50 + // } + const FlatLConfCallbackPairs = useRef([ + { + viewabilityConfig: { itemVisiblePercentThreshold: 50 }, + onViewableItemsChanged, + }, + ]); + + useEffect(() => { + setLoaderTitle(ST.Loading + "..."); + let params = props.route.params ? props.route.params : {}; + let storeData1 = params.storeData || {}; + let menu1 = params.menu || {}; + let ShowCatWise1 = params.ShowCatWise != null ? params.ShowCatWise : false; + let CatData1 = params.CatData != null ? params.CatData : {}; + let isAdhoc = params.isAdhoc || false; + + setIsAdhocScreen(isAdhoc); + setShowCatWise(ShowCatWise1); + setCatData(CatData1); + setStoreData(storeData1); + setCurrentMenu(menu1); + + let cameraAllow = storeData1.CameraAllow == "true" || storeData1.CameraAllow == 1 ? true : false; + setStoreCameraAllow(cameraAllow); + + StoreIdRef.current = storeData1.StoreId; + ScreenNameRef.current = { + BgscreenName: menu1.ScreenName, + BgMenuId: menu1.MenuId, + }; + + getData(storeData1, menu1, CatData1, ShowCatWise1); + + const AppStateSubscription = AppState.addEventListener("change", (pro) => { + _handleAppStateChange(pro); + }); + const unsubscribe = props.navigation.addListener("beforeRemove", onBeforeRemove); + + return function cleanup() { + AppStateSubscription.remove(); + // AppState.removeEventListener('change', (pro)=>{ _handleAppStateChange(WindowData,pro)}); + return unsubscribe; + }; + }, []); + + const _handleAppStateChange = async (nextAppState) => { + if (nextAppState == "background" && hasUnsavedChangesRef.current == true) { + let newData = { + storeBGData: WindowDataRef.current, + menuName: ScreenNameRef.current && ScreenNameRef.current.BgscreenName, + StoreId1: StoreIdRef.current, + BgMenuID: ScreenNameRef.current && ScreenNameRef.current.BgMenuId, + visiteDate: d2, + BGPSAllow: BGPSAllow.current, + PSGroupData: PSGroupData.current, + }; + let WindowsStr = JSON.stringify(newData); + + await set_item("storeData", WindowsStr); + } + }; + + useEffect(() => { + const unsubscribe = props.navigation.addListener("beforeRemove", onBeforeRemove); + return unsubscribe; + }, [hasUnsavedChanges]); + + useEffect(() => { + const unsubscribe = props.navigation.addListener("beforeRemove", onBeforeRemove); + return unsubscribe; + }, [showCamera]); + + useEffect(() => { + const unsubscribe = props.navigation.addListener("beforeRemove", onBeforeRemove); + return unsubscribe; + }, [showQRCamera]); + + useEffect(() => { + const unsubscribe = props.navigation.addListener("beforeRemove", onBeforeRemove); + return unsubscribe; + }, [show_zoomImage]); + + function onBeforeRemove(e) { + if (showCamera == true || showQRCamera == true) { + e.preventDefault(); + setShowCamera(false); + setShowQRCamera(false); + } else if (Show_zoomImageRef.current == true) { + e.preventDefault(); + UpdateShow_zoomImageRef(false); + } else { + if (hasUnsavedChanges == true) { + e.preventDefault(); // Prevent default behavior of leaving the screen + onRemoveScreen(e); + } else { + return; + } + } + } + + function BgUnsavedChanges(val) { + hasUnsavedChangesRef.current = val; + setHasUnsavedChanges(val); + } + + function BgWindowData(val) { + WindowDataRef.current = val; + setWindowData(val); + } + + function UpdateShow_zoomImageRef(val) { + Show_zoomImageRef.current = val; + setShow_zoomImage(val); + } + + function onRemoveScreen(e) { + Alert.alert("", ST.Doyoureallywanttoexitthescreen, [ + { + text: ST.Cancel, + onPress: () => { }, + style: "cancel", + }, + { + text: ST.OK, + onPress: async () => { + // setHasUnsavedChanges(false); + BgUnsavedChanges(false); + await clear_item("storeData"); + props.navigation.dispatch(e.data.action); + }, + }, + ]); + } + + function _OpenCaptureImage_Modal(img) { + const isImageCap = img != "" || img != null ? true : false; + let { window, splitItem, splitItemIndex, cameraType } = reCapImgModalObj; + let camera2Label = (window && window.PromoImage2Lable) || ""; + return ( + + {isImageCap && ( + + + + + { + openCamera(window, splitItem, splitItemIndex,null ,cameraType); + }} + > + + + + {!showImageSaveOp && ( + { + cancelImage(false); + }} + > + {ST.Close} + + )} + + )} + + ); + } + + async function getData(storeData1, menu1, CatData1 = {}, ShowCatWise1 = false) { + try { + let { StoreId, ChainId, StateId, StoreTypeId } = storeData1; + + let AllKPIFields = await getKPIFields(menu1); + setKPIFields(AllKPIFields); + + // set switch camera flag as defined in mapping menu flag (if exists) + let SwitchingCameraI = AllKPIFields?.findIndex((i) => i.KPIFieldName == "SwitchingCamera"); + let SwitchingCameraObj = SwitchingCameraI >= 0 ? AllKPIFields[SwitchingCameraI] : {}; + let SwitchingCamera = SwitchingCameraI >= 0 ? SwitchingCameraObj["KPIFieldEnable"] : false; + setShowSwitchCamera(SwitchingCamera); + + let CameraAllow = AllKPIFields?.findIndex((i) => i.KPIFieldName == "ImageAllow"); + let CameraAllowObj = CameraAllow >= 0 ? AllKPIFields[CameraAllow] : {}; + let CameraSplitNo=CameraAllowObj?.KPIFieldDisplayName || 0 + let CameraSplitArr=CameraAllowObj?.KPIType?.split(",") || [] + let CameraAllowI = CameraAllow >= 0 ? CameraAllowObj["KPIFieldEnable"] : false; + setImageLabel(CameraSplitArr) + setImageAllow(CameraAllowI); + + let DeploymentType = AllKPIFields?.find((i) => i.KPIFieldName == "DeploymentType"); + let DeploymentTypeArr = DeploymentType?.KPIType?.split(","); + let DeploymentTypeArrObj=DeploymentTypeArr.map(item =>{return({"KPIType":item})}) + setReasons_list(DeploymentTypeArrObj||[]); + + + let ImageMandatory = AllKPIFields?.find((i) => i.KPIFieldName == "ImageMandatory"); + let ImageMandatoryFlage = ImageMandatory?.KPIFieldEnable || false + let ImageMandatoryNo = ImageMandatoryFlage ? ImageMandatory?.KPIFieldDisplayName : 0 + setImageMandtory(ImageMandatoryFlage); + setImageMandatoryNo(ImageMandatoryNo); + + // let DeploymentTypeArr = DeploymentType?.KPIFieldEnable || + // let DeploymentTypeArrObj=DeploymentTypeArr.map(item =>{return({"KPIType":item})}) + // setReasons_list(DeploymentTypeArrObj||[]); + + + let { PSAllow, PSTableName } = menu1; + PSTableName = PSTableName != null ? PSTableName : ""; + PSAllow = PSAllow != null ? PSAllow : false; + + let idCol = "", + nameCol = ""; + + if (PSTableName.toLowerCase() == HierarchyTbls.Master_Category.toLowerCase()) { + (idCol = "CategoryId"), (nameCol = "CategoryName"); + } else if (PSTableName.toLowerCase() == HierarchyTbls.Master_Brand.toLowerCase()) { + (idCol = "BrandId"), (nameCol = "BrandName"); + } else { + (idCol = "SubCategoryId"), (nameCol = "SubCategoryName"); + } + let IdVal = CatData1[idCol]; + let NameVal = CatData1[nameCol]; + + + let inputChangeFlag = [], + storeBGData1 = [], + bgStoreJson = {}, + isBgDataExists = false; + + //storeBGData check + let windData = await get_item("storeData"); + if (windData != null && windData != "") { + let StoreJson = JSON.parse(windData); + let { storeBGData, menuName, StoreId1, BgMenuID, visiteDate } = StoreJson; + if (storeBGData.length > 0 && menuName == menu1.ScreenName && StoreId1 == StoreId && menu1.MenuId == BgMenuID && visiteDate == d2) { + isBgDataExists = true; + storeBGData1 = storeBGData; + bgStoreJson = StoreJson; + WindowDataRef.current = storeBGData; + setWindowData(storeBGData); + BgUnsavedChanges(true); + } + } + + // call this after storeBGData check + if (PSAllow) { + // if Partial save is allowed then add the currently active category or group in BG var + BGPSAllow.current = true; + PSGroupData.current = CatData1; + } + + await db.transaction(async function (txn) { + + let selectlist2 = `Distinct wd.WAREHS_HEADER_ID as WHRESHeaderId,w.MeasureUnit,w.ItemId,w.ItemName,wh.CampaignId,w.ItemCode,w.ItemCategoryId,w.ItemCategory,IFNULL(wd.IS_PRESENT,'') as IsPresent,IFNULL(wd.KPITYPE_ID,'') as KpiTypId,IFNULL(wd.KPITYPE,'') as KPIType, IFNULL(wd.ITEM_QTY,'') as PosQty, wm.Present as WhDisable,rh.StockInHand,rh.TodayDeploy`; + let join3 = ` Left Outer Join ${AppTables.WAREHOUSE_CAMPAIGN_HDR_DATA} wd on w.ItemId=wd.ITEM_ID and wd.STORE_ID='${StoreId}' and wd.VISIT_DATE='${d2}'`; + let join4 = ` Left Outer Join Mapping_WarehouseCampaignDeployment wm on w.ItemId=wm.ItemId and wm.StoreId='${StoreId}' and wh.CampaignId=wm.CampaignId`; + let join2 = `INNER JOIN Mapping_WarehouseCampaignItem wh ON wh.ItemId = w.ItemId `; + let join5 = `Left Outer Join Report_WarehouseStockInHand rh ON rh.ItemId=w.ItemId `; + let q2 = `SELECT ${selectlist2} FROM Master_WarehouseItem w ${join3} ${join2} ${join4} ${join5} `; + + + await txn.executeSql( + q2, + [], + async function (txn2, txnres2) { + console.log("Warehouse Visi added count", txnres2.rows.length); + if (txnres2.rows.length > 0) { + let arr = []; + let images = [], + allWindowsData = []; + + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + let isPresent = (data.IsPresent == "1" || data.IsPresent == 1 || data.WhDisable== "true" ||data.WhDisable==1) ? 1 : 0; + let WhDisable = ( data.WhDisable== "true" ||data.WhDisable==1) ? 1 : 0; + + if (isBgDataExists) { + let storeBgIndex = storeBGData1.findIndex((i) => i.ItemId == data.ItemId); + let storeBgObj = storeBgIndex >= 0 ? storeBGData1[storeBgIndex] : {}; + isPresent = storeBgObj.isPresent == "1" || storeBgObj.isPresent == 1 ? 1 : 0; + } + + let animatedChoice = new Animated.Value(isPresent); + let animatedHeight = new Animated.Value(450); + data.animatedChoice = animatedChoice; + data.animatedHeight = animatedHeight; + + + // data.NoOfSplit = parseInt(data.NoOfSplit); + data.NoOfSplit = parseInt(CameraSplitNo); + let NoOfSplit = Number(CameraSplitNo); + + let isStockReq = data.VisibilityElementStockRequired == "true" || data.VisibilityElementStockRequired == 1 ? 1 : 0; + + let imgObj = { + imgIndex: i + 1, + url: data.VisibilityRefImage, + props: {}, + }; + images.push(imgObj); + + + let WindowSplits = CameraAllowI ? await getWindowSplits(CameraSplitArr, data, storeData1, menu1,ImageMandatoryNo) :[]; + + // let WQr = { WindowQA: {}, WindowQuestions: [] }; + let WQr = await getWindowQuestions(data, storeData1, menu1); + + let WindowQuestions = WQr["WindowQuestions"] || []; + let WindowQA = WQr["WindowQA"] || {}; + let WSd = { WStocks: [], WStocksData: [] }; + let WStocks = WSd["WStocks"] || []; + let WStocksData = WSd["WStocksData"] || []; + let isAllChecked = WSd["isAllChecked"] != null ? WSd["isAllChecked"] : 0; + + let isNAImageAvl = data.VisibilityNotExistCamera == "true" || data.VisibilityNotExistCamera == 1 ? 1 : 0; + let NAImage1 = isNAImageAvl == 1 && data.PVisNAImage != null ? data.PVisNAImage : ""; + let NAImage1Path = NAImage1 != "" ? "file://" + ImageFolderPath + menu1.ScreenName + "/" + NAImage1 : ""; + let showRsnRemark = data.SHOW_RSN_REMARK == "1" || data.SHOW_RSN_REMARK == 1 ? true : false; + + let windowDataObj = { + ItemId: data.ItemId, + ItemQuestionId: data.ItemQuestionId, + WindowSplits: WindowSplits, + WindowQA: WindowQA, + WStocksData: WStocksData, + NAImage1: NAImage1, + NAImage1Path: NAImage1Path, + KpiTypId: data.Id, + KPIType: data.KPIType, + StockInHand:data?.StockInHand||0, + TodayDeploy:data?.TodayDeploy||0, + isPresent: isPresent, + WhDisable:WhDisable, + isAllSKUChecked: isAllChecked, + remark: data.Remark != null ? data.Remark : "", + showOtherText: showRsnRemark, + PosQty: data.PosQty || "" + }; + data["WindowQuestions"] = WindowQuestions; + data["WindowStocks"] = WStocks; + let changesFlag = { + ItemId: data.ItemId, + ItemQuestionId: data.QuestionCategoryId, + Flag: data.WHRESHeaderId != null ? true : false, + }; + inputChangeFlag.push(changesFlag); + arr.push(data); + + allWindowsData.push(windowDataObj); + + if (i == txnres2.rows.length - 1) { + if (!isBgDataExists) { + BgWindowData(allWindowsData); + } + setInputChange(inputChangeFlag); + setWindows(arr); + setGlobalWindows(arr); + setZoomImageUrl(images); + setProcessing(false); + } + } + } else { + setProcessing(false); + notify("No data found!"); + } + }, + function (txnE, txnerr) { + console.log(txnerr); + setProcessing(false); + } + ); + }); + } catch (err) { + console.log(err); + } + } + + async function getWindowFilterIds(idCol, IdVal, storeData1, isSpecificMappingEnable, menu1 = {}) { + let AllIds = []; + let { StoreId } = storeData1; + let { MenuId } = menu1; + + let tbname2 = isSpecificMappingEnable ? "Mapping_StoreVisibilitySpecific" : "Mapping_StoreVisibility"; + + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + let join = ` inner join ${tbname2} s on w.VisibilityDefinitionId=s.VisibilityDefinitionId `; + let q = `Select w.* from Master_VisibilityDefinition w ${join} where s.StoreId='${StoreId}' and w.MenuId='${MenuId}' `; + await txn.executeSql( + q, + [], + async function (txn2, txnres) { + if (txnres.rows.length > 0) { + let Wind_data = txnres.rows.item(0); + let { VisibilityTable } = Wind_data; + VisibilityTable = VisibilityTable != null ? VisibilityTable : ""; + + let filterIdsCol = "", + filterNamesCol = ""; + if (VisibilityTable.toLowerCase() == HierarchyTbls.Master_Category.toLowerCase()) { + (filterIdsCol = "CategoryId"), (filterNamesCol = "CategoryName"); + } else if (VisibilityTable.toLowerCase() == HierarchyTbls.Master_Brand.toLowerCase()) { + (filterIdsCol = "BrandId"), (filterNamesCol = "BrandName"); + } else if (VisibilityTable.toLowerCase() == HierarchyTbls.Master_Product.toLowerCase()) { + (filterIdsCol = "ProductId"), (filterNamesCol = "ProductName"); + } else { + (filterIdsCol = "SubCategoryId"), (filterNamesCol = "SubCategoryName"); + } + + let FIdsQ = `Select distinct p.${filterIdsCol},p.${filterNamesCol} from Product_Master p where (p.${idCol}='${IdVal}' or p.${idCol}= ${IdVal}) `; + + await txn.executeSql( + FIdsQ, + [], + async function (txn2, txnres2) { + if (txnres.rows.length > 0) { + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + let id_value = data[filterIdsCol]; + AllIds.push(id_value); + if (i == txnres2.rows.length - 1) { + resolve(AllIds); + } + } + } else { + resolve([]); + } + }, + function (txnE, txnerr) { + console.log(txnerr); + resolve(AllIds); + } + ); + } else { + resolve(AllIds); + } + }, + function (txnE, txnerr) { + console.log(txnerr); + resolve(AllIds); + } + ); + }); + }) + .then((val) => { + return val; + }) + .catch((err) => { + console.log(err); + return AllIds; + }); + } + + async function getWindowSplits(NoOfSplit, window, storeData1, menu1,ImageMandatoryNo) { + let WindowSplits_def = []; + for (var s=0; s { + db.transaction(async function (txn) { + let q = `select * from ${AppTables.WAREHOUSE_CAMPAIGN_IMAGES} where WAREHS_HEADER_ID='${window.WHRESHeaderId}' and STORE_ID='${storeData1.StoreId}' `; + + await txn.executeSql( + q, + [], + async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + let arr = []; + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + console.log(data.PVIS_HEADER_ID); + let isImage1 = window.VisibilityImage1 == "true" || window.VisibilityImage1 == 1 ? 1 : 0; + let isImage2 = window.VisibilityImage2 == "true" || window.VisibilityImage2 == 1 ? 1 : 0; + + let Image1 = data.IMAGE1 != null && data.IMAGE1 != "" ? "file://" + ImageFolderPath + menu1.ScreenName + "/" + data.IMAGE1 : ""; + let Image2 = isImage2 == 1 && data.IMAGE2 != null && data.IMAGE2 != "" ? "file://" + ImageFolderPath + menu1.ScreenName + "/" + data.IMAGE2 : ""; + // let obj = { + // Image1Name: data.IMAGE1, + // Image1: Image1, + // Image2Name: data.IMAGE2, + // Image2: Image2, + // img1Required: true, + // img2Required: true, + // }; + let obj = { + ImageName: data.IMAGE1, + Image: Image1, + ImageLable: "", + ImageLable: NoOfSplit[i], + // imgRequired: s < ImageMandatoryNo + imgRequired: false + }; + arr.push(obj); + + if (i == txnres2.rows.length - 1) { + resolve(arr); + } + } + } else { + resolve(WindowSplits_def); + } + }, + function (txnE, txnerr) { + console.log(txnerr); + resolve(WindowSplits_def); + } + ); + }); + }) + .then((val) => { + return val; + }) + .catch((err) => { + console.log(err); + return WindowSplits_def; + }); + } + + async function getWindowQuestions(window, storeData1, menu1) { + // console.log("windowww", window) + let obj = { WindowQA: {}, WindowQuestions: [] }; + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + var q = "", + selectlist = "", + join = "", + join2 = ""; + + + selectlist = ` DISTINCT wq.ItemQuestionId,wq.ItemQuestionCode,wq.ItemQuestionName,wq.QuestionType,wq.ItemAnswerShowCamera,wq.ItemAnswerCameraMandatory,wq.ItemLengthValidationRequired,wq.ItemMinimumChar,wq.ItemMaximumChar,wq.ItemDecimalPoint,wq.ItemDateRangeMin,wq.ItemDateRangeMax,wq.ItemVoiceLengthInMinutes,wq.ItemDefaultQuestionEnable,(CASE WHEN q.QUESTION_ID is not null THEN 1 ELSE 0 END) isInserted,q.IS_DISABLED,q.ANSWER as Answer,q.ANSWER_ID as AnswerId,q.MULTI_OPTIONS_IDS as multi_op_ids,q.IMAGE_ALLOW1 as ItemAnswerShowCamera,q.IMAGE1 as Image1 `; + join2 = ` Left Outer Join ${AppTables.WAREHOUSE_CAMPAIGN_CHILD_DATA} q on wq.ItemQuestionId=q.QUESTION_ID and q.STORE_ID='${storeData1.StoreId}' and q.ITEM_ID='${window.ItemId}' and q.VISIT_DATE='${d2}'`; + join = ` inner join Mapping_WarehouseCampaignItemQuestion mq on mq.ItemQuestionId=wq.ItemQuestionId `; + q = `select ${selectlist} from Master_WarehouseItemQuestion wq ${join} ${join2} where mq.CampaignId='${window.CampaignId}' and mq.ItemId='${window.ItemId}' `; + + await txn.executeSql( + q, + [], + async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + let arr = []; + let wqa_obj = {}; + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + let { isInserted } = data; + let answers = []; + data.ItemDefaultQuestionEnable = data.ItemDefaultQuestionEnable == 1 || data.ItemDefaultQuestionEnable == "true" ? true : false; + // data['isDisabled']=!data.ItemDefaultQuestionEnable; + if (isInserted) { + data["isDisabled"] = data.IS_DISABLED == true || data.IS_DISABLED == "true" ? true : false; + } else { + data["isDisabled"] = !data.ItemDefaultQuestionEnable; + } + if (data.QuestionType == "Multi choice list" || data.QuestionType == "Single choice list" || data.QuestionType == "Rating") { + answers = await getWindowAnswers(data); + if (data.QuestionType == "Rating") { + data.showRating = false; + } + } else if (data.QuestionType == "Date") { + data.showDatePicker = false; + } + data["Answers"] = answers; + + let id_key = data.ItemQuestionId + "_AnswerId"; + let ans_key = data.ItemQuestionId + "_Answer"; + let multi_key = data.ItemQuestionId + "_MultiOption"; + let date_key = data.ItemQuestionId + "_Date"; + let img_key = data.ItemQuestionId + "_ImagePath1"; + let imgname_key = data.ItemQuestionId + "_ImageName1"; + let rating_key = data.ItemQuestionId + "_Rating"; + + let showImageTag = data.ItemShowCamera == "true" || data.ItemShowCamera == 1; + + data.AnswerId != null ? (wqa_obj[id_key] = data.AnswerId) : ""; + data.Answer != null ? (wqa_obj[ans_key] = data.Answer) : ""; + + let selansid = data.AnswerId != null ? data.AnswerId : ""; + + if (data.QuestionType == "Multi choice list" && (selansid != "" || selansid === 0) && data.multi_op_ids != null) { + selansid = data.multi_op_ids ? data.multi_op_ids.split(",") : []; + wqa_obj[multi_key] = data.multi_op_ids; + } + + if ((data.QuestionType == "Single choice list" || data.QuestionType == "Multi choice list") && selansid != "" && selansid != null) { + if (data.Answers && data.Answers.length > 0) { + for (var k = 0; k < data.Answers.length; k++) { + let ansss = data.Answers[k]; + let isandImgAl = ansss.ItemAnswerShowCamera == 1 || ansss.ItemAnswerShowCamera == "true"; + if (data.QuestionType == "Single choice list" && isandImgAl && ansss.AnswerId == selansid) { + showImageTag = true; + } else if (data.QuestionType == "Multi choice list" && isandImgAl && selansid.indexOf(ansss.AnswerId) >= 0) { + showImageTag = true; + } + } + } + } + + if (showImageTag && data.Answer != null) { + let imgPath = (Platform.OS == "ios" ? "file://" : "") + ImageFolderPath + menu1.ScreenName + "/" + data.Image1; + wqa_obj[imgname_key] = data.Image1; + wqa_obj[img_key] = imgPath; + } + + if (data.QuestionType == "Date" && data.Answer != null) { + let dayonly = moment().format("DD"); + let actual_date = data.Answer ? data.Answer.split("/") : []; + let month = actual_date[0], + year = actual_date[1]; + let fulldate = month + "/" + dayonly + "/" + year; + wqa_obj[date_key] = fulldate; + } + + arr.push(data); + if (i == txnres2.rows.length - 1) { + obj["WindowQuestions"] = arr; + obj["WindowQA"] = wqa_obj; + resolve(obj); + } + } + } else { + resolve(obj); + } + }, + function (txnE, txnerr) { + console.log(txnerr); + resolve(obj); + } + ); + }); + }) + .then((val) => { + return val; + }) + .catch((err) => { + console.log(err); + return obj; + }); + } + + async function getWindowAnswers(qtn) { + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + var q = "", + selectlist = ""; + selectlist = ` DISTINCT ItemAnswerId as AnswerId,ItemAnswerName as Answer,ItemAnswerShowCamera,ItemAnswerCameraMandatory,ItemQuestionEnable,ItemQuestionDisable `; + q = `select ${selectlist} from Master_WarehouseItemQuestion where ItemQuestionId='${qtn.ItemQuestionId}' order by ItemAnswerSequence `; + + await txn.executeSql( + q, + [], + async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + let arr = []; + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + arr.push(data); + if (i == txnres2.rows.length - 1) { + resolve(arr); + } + } + } else { + resolve([]); + } + }, + function (txnE, txnerr) { + console.log(txnerr); + resolve([]); + } + ); + }); + }) + .then((val) => { + return val; + }) + .catch((err) => { + console.log(err); + return []; + }); + } + + + async function focusToNext(WindowStocks, windowIndex, stockProd, index) { + console.log("focusToNext is call"); + console.log("WindowStocks", index + 1); + + if (index == WindowStocks.length - 1) { + return; + } + + try { + // inputRefs.current['input1_'+data.VisibilityDefinitionId+"_"+data.VisibilityStockDefinitionId]=''; + // use (index+1) instead of WindowStocks[index+1].VisibilityStockDefinitionId as the condition does not work in case of isSpecificMappingEnable is true ( because all VisibilityStockDefinitionId are 0) + console.log("next 1 call", "input1_" + WindowStocks[index + 1].VisibilityDefinitionId + "_" + (index + 1)); + let refIn2 = inputRefs.current["input1_" + WindowStocks[index + 1].VisibilityDefinitionId + "_" + (index + 1)]; + // let refIn2=inputRefs.current['input1_'+stockProd.WindowDefinitionId+'_'+stockProd.WindowStockDefinitionId]; + + if (refIn2 != null) { + refIn2.focus(); + } + } catch (err) { + console.log(err); + } + } + + async function getImage(imgdata) { + let type = getImageProps.type || ''; + let window = getImageProps.window || {}; + let splitItem = getImageProps.splitItem || {}; + let splitItemIndex = getImageProps.splitItemIndex || 0; + let qtn = getImageProps.qtn || {}; + let cameraType = getImageProps.cameraType != null ? getImageProps.cameraType : '1'; + + if (typeof imgdata == 'object' && imgdata.errorCode == 'camera_unavailable') { + notify(ST.Cameraunavailable); + } + else if (typeof imgdata == 'object' && imgdata.uri != null) { + const img = imgdata; + const imgurl = img.uri, imgWidth = img.width, imgHeight = img.ExtendedHeight; + let isImgFromGallery = img.fromGallery != null ? img.fromGallery : false; + let picture_clickedd = isImgFromGallery == true ? img.datetime : new Date(); + + let picture_clicked_time=moment(picture_clickedd).format('MM-DD-YYYY HH:mm:ss') + let picture_clicked_time_for_pic_name=moment(picture_clickedd).format('MMDDYYYY_HHmmss') + + console.log("time", picture_clicked_time); + console.log("time1", picture_clicked_time_for_pic_name); + let calculate_tym_date_for_filename = picture_clicked_time_for_pic_name; + let calculate_tym_date_over_img = picture_clicked_time; + + let filename = storeData.StoreId + '_' + window.ItemName + '_' + window.ItemId + '_' + (props.UserId || '') + '_STImg-' +calculate_tym_date_for_filename+ '.jpg'; + + let allData = WindowData; + let defData = { 'ItemId': window.ItemId, 'QuestionCategoryId': window.ItemQuestionId }; + const wind_index = allData.findIndex((i) => i.ItemId == window.ItemId && i.QuestionCategoryId == window.ItemQuestionId); + let wind = wind_index >= 0 ? allData[wind_index] : defData; + + let camera1Label = window.VisibilityImage1Lable || ''; + let camera2Label = window.VisibilityImage2Lable || ''; + let extraLabel = ''; + + if (cameraType == '2') { + var QD = wind.WindowQA || {}; + var image_key = qtn.ItemQuestionId + '_ImageName1'; + var image_key_path = qtn.ItemQuestionId + '_ImagePath1'; + QD[image_key] = filename; + extraLabel = 'Qtn Id: ' + qtn.ItemQuestionId; + } + else if (cameraType == '3') { + var image_key = 'NAImage1'; + var image_key_path = 'NAImage1Path'; + wind[image_key] = filename; + extraLabel = 'Not Exist'; + } else if (cameraType == '4') { + var WindowSplits = wind.WindowSplits || []; + var image_key = 'ImageName' + var image_key_path = 'Image' + splitItem[image_key] = filename; + extraLabel = splitItem?.ImageLable; + } + else { + var WindowSplits = wind.WindowSplits || []; + var image_key = type == '1' ? 'Image1Name' : 'Image2Name'; + var image_key_path = type == '1' ? 'Image1' : 'Image2'; + splitItem[image_key] = filename; + extraLabel = type == '1' ? camera1Label : camera2Label; + } + + + + const mark_text1 = calculate_tym_date_over_img; + const mark_text2 = 'Store Name:' + storeData.StoreName + ' | Store Id:' + storeData.StoreId + ' | User Id:' + storeData.EmpId + ' | ItemId :' + window.ItemId + (extraLabel != '' ? ' (' + extraLabel + ')' : '') + ' | Image Type: ' + currentMenu.MenuName + ' | Date:' +calculate_tym_date_over_img; + + let imagePath = `${ImageFolderPath + currentMenu.ScreenName}/${filename}`; + RNFS.copyFile(imgurl, imagePath) + .then(async (resn) => { + // render data with clicked image + let uri = 'file://' + imagePath; + console.log('image marker:', imgWidth, imgHeight, uri); + + if (cameraType == '2') { + QD[image_key_path] = uri; + wind.WindowQA = QD; + wind_index >= 0 ? allData[wind_index] = wind : allData.push(wind); + WindowDataRef.current = allData + setWindowData(allData); + BgUnsavedChanges(true) + setrerenderdata3(!rerenderdata3); + } + else if (cameraType == '3') { + wind[image_key_path] = uri; + wind_index >= 0 ? allData[wind_index] = wind : allData.push(wind); + WindowDataRef.current = allData + setWindowData(allData); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + else { + console.log('split image updated'); + splitItem[image_key_path] = uri; + splitItemIndex >= 0 ? WindowSplits[splitItemIndex] = splitItem : WindowSplits.push(splitItem); + wind.WindowSplits = WindowSplits; + wind_index >= 0 ? allData[wind_index] = wind : allData.push(wind); + WindowDataRef.current = allData + setWindowData(allData); + BgUnsavedChanges(true) + setrerenderdata2(!rerenderdata2); + } + + let objIndex = InputChange.findIndex(i => i.ItemId == window.ItemId && i.QuestionCategoryId == window.ItemQuestionId); + let winArr = [...InputChange] + winArr[objIndex].Flag = true + setSelectedImg(uri) + setInputChange(winArr) + + // add metdata then resize image and restored back to the imagePath + let restore_data = { "destFilePath": imagePath, "imgurl": imgurl, imgWidth, imgHeight, mark_text1, mark_text2 } + let is_restored = await restore_ImageWithMetaData(restore_data, imgdata); + console.log("image restored:", is_restored); + + }) + .catch(err => { + console.log('ERROR: image file write failed!!!'); + console.log(err.message, err.code); + }); + } + + } + + async function onQRScanned(imgdata) { + let qtn = QRqtnData.qtn || {}; + let window = QRqtnData.window || {}; + let QR_withValidChars = imgdata != null && imgdata != "" ? imgdata.replace(/["']/g, "") : ""; + let value = QR_withValidChars; //imgdata && imgdata[0] && imgdata[0].displayValue ? imgdata[0].displayValue :"" + setTextValue(value, qtn, window); + } + + function showQtnDatePicker(qtn, window, show = false) { + let allQtns = window.WindowQuestions || []; + let newqtnIndex = allQtns.findIndex((q) => q.ItemQuestionId == qtn.ItemQuestionId); + + if (newqtnIndex >= 0) { + let newqtn = allQtns[newqtnIndex]; + newqtn.showDatePicker = show; + allQtns[newqtnIndex] = newqtn; + window["WindowQuestions"] = allQtns; + let allWindows = Windows; + const winIndex = allWindows.findIndex((i) => i.ItemId == window.ItemId && i.ItemQuestionId == window.QuestionCategoryId) || {}; + allWindows[winIndex] = window; + setWindows(allWindows); + setGlobalWindows(allwindows); + if (show == true) setrerenderdata(!rerenderdata); + } + } + + async function openCamera(window, splitItem, splitItemIndex, type = "1", cameraType = "1", qtn = {}) { + setErrorField({}); + setError(false); + let GridAllow = false; + if (type == "1") { + // console.log("texxxt2..",window) + GridAllow = cameraType == "1" ? (type === "1" ? window.VisibilityImage1CameraGrid === "true" || window.VisibilityImage1CameraGrid == true : window.VisibilityImage1CameraGrid === "true" || window.VisibilityImage1CameraGrid == true) : false; + } else { + GridAllow = cameraType == "1" ? (type === "2" ? window.VisibilityImage2CameraGrid === "true" || window.VisibilityImage2CameraGrid == true : window.VisibilityImage2CameraGrid === "true" || window.VisibilityImage2CameraGrid == true) : false; + } + setGridValue(GridAllow); + setGetImageProps({ + window: window, + splitItem: splitItem, + splitItemIndex: splitItemIndex, + type: type, + cameraType: cameraType, + qtn: qtn, + }); + setShowCamera(true); + // props.navigation.navigate('CameraScreen',{'getImage':getImage,'cameraType':'back'}) + } + + async function onSubmitData() { + let isvalid = await validate(); + + if (isvalid) { + Keyboard.dismiss(); + setShowAlert(true); + } + } + + async function saveData() { + // setHasUnsavedChanges(false); + BgUnsavedChanges(false); + setShowAlert(false); + setLoaderTitle(ST.SavingData + "..."); + setProcessing(true); + let d1n = new Date(); + let d3 = moment(d1n).format("MM/DD/YYYY"); + try { + let { StoreId,MenuId, ChainId, StateId, StoreTypeId } = storeData; + + // remove old data + let isDeleted = await removePreviousData(); + console.log("isDeleted:", isDeleted); + + await db.transaction(async function (txn) { + // add data + var values = "", + childV = "", + imageV = ""; + let updateQueries = []; + + + for (const wi in globalWindows) { + const window = globalWindows[wi]; + let isImage1 = window.VisibilityImage1 == "true" || window.VisibilityImage1 == 1 ? 1 : 0; + let isImage2 = window.VisibilityImage2 == "true" || window.VisibilityImage2 == 1 ? 1 : 0; + let isNAImageAvl = window.VisibilityNotExistCamera == "true" || window.VisibilityNotExistCamera == 1 ? 1 : 0; + let isNAReasonEnable = window.VisibilityNotExistReasonEnable == "true" || window.VisibilityNotExistReasonEnable == 1 ? 1 : 0; + let isReasonEnable = window.VisibilityExistReasonEnable == "true" || window.VisibilityExistReasonEnable == 1 ? 1 : 0; + let isStockReq = window.VisibilityElementStockRequired == "true" || window.VisibilityElementStockRequired == 1 ? 1 : 0; + let WindowQuestions = window.WindowQuestions || []; + let WindowStocks = window.WindowStocks || []; + let CampaignId = window.CampaignId + + const wind = WindowData.find( + (i) => i.ItemId == window.ItemId + && + i.QuestionCategoryId == window.ItemQuestionId, + ); + let isPresent = wind.isPresent != null && wind.isPresent != "" ? wind.isPresent : "0"; + let WhDisable = wind.WhDisable != null && wind.WhDisable != "" ? wind.WhDisable : "0"; + let KpiTypId = wind.Id != null ? wind.Id : 0; + let KPIType = wind.KPIType != null ? wind.KPIType : ""; + + // let PosmQty = wind.PosQty != null ? wind.PosQty : ""; + // console.log("posmq..",PosmQty) + let NAImage1 = wind.NAImage1 != null ? wind.NAImage1 : ""; + let NAImage1Path = wind.NAImage1Path != null ? wind.NAImage1Path : ""; + let remark = wind.remark != null ? wind.remark : ""; + let WindowSplits = wind.WindowSplits || []; + let QD = wind.WindowQA || {}; + let WStocksData = wind.WStocksData || []; + + let WAREHS_HEADER_ID = "WIND" + wi + (Math.floor(Math.random() * 1000) + 1); + let { ItemId, ItemCode, ItemName, ItemCategoryId, ItemCategory } = window; + let showOtherText = wind.showOtherText == true || wind.showOtherText == "1" ? 1 : 0; + let PosQty = wind.PosQty != null ? wind.PosQty : ""; + + console.log("window in savedata:", window); + + if(WhDisable!=1){ + values += values != "" ? " , " : ""; + values += `('${WAREHS_HEADER_ID}','${StoreId}','${d3}','${ItemId}','${ItemName}','${ItemCode}','${ItemCategoryId}','${ItemCategory}','${PosQty||0}','${isPresent}','${KpiTypId}','${KPIType}','${currentMenu.MenuId}','${CampaignId}')`; + + if (isPresent == 1) { + updateQueries.push(`UPDATE Report_WarehouseStockInHand SET TodayDeploy='${PosQty || 0}' WHERE ItemId='${ItemId}'`); + + for (const qtnIndex in WindowQuestions) { + const qtn = WindowQuestions[qtnIndex]; + + let selansid = "", selanswer = "", selimg = "", showImageTag = false; + let id_key = qtn.ItemQuestionId + "_AnswerId"; + let ans_key = qtn.ItemQuestionId + "_Answer"; + let multi_key = qtn.ItemQuestionId + "_MultiOption"; + let date_key = qtn.ItemQuestionId + "_Date"; + let img_key = qtn.ItemQuestionId + "_ImagePath1"; + let imgname_key = qtn.ItemQuestionId + "_ImageName1"; + let rating_key = qtn.ItemQuestionId + "_Rating"; + let list_mcdata = []; + let isDisabled = qtn.isDisabled; + + let { ItemQuestionId, ItemQuestionCode, QuestionType, ItemAnswerShowCamera } = qtn; + let answer = QD[ans_key] || 0; + let answerId = QD[id_key] === 0 ? 0 : QD[id_key] || ""; + let multi_options_ids = QD[multi_key] || ""; + + if (qtn.QuestionType == "Number" || qtn.QuestionType == "Text" || qtn.QuestionType == "Decimal" || qtn.QuestionType == "Date") { + showImageTag = qtn.ItemAnswerShowCamera == 1 || qtn.ItemAnswerShowCamera == "true"; + } else if (qtn.QuestionType == "Single choice list" || qtn.QuestionType == "Multi choice list") { + if (qtn.Answers && qtn.Answers.length > 0) { + for (var i = 0; i < qtn.Answers.length; i++) { + let ansss = qtn.Answers[i]; + let isandImgAl = ansss.ItemAnswerShowCamera == "true" || ansss.ItemAnswerShowCamera == 1; + if (qtn.QuestionType == "Single choice list" && isandImgAl && ansss.AnswerId == answerId) { + showImageTag = true; + } else if (qtn.QuestionType == "Multi choice list" && isandImgAl && answerId.indexOf(ansss.AnswerId) >= 0) { + showImageTag = true; + } + } + } + } + + let Image1 = showImageTag == 1 ? QD[imgname_key] : ""; + + childV += childV != "" ? " , " : ""; + childV += ` ('${WAREHS_HEADER_ID}','${StoreId}','${d3}','${ItemId}','${ItemQuestionId}','${ItemQuestionCode}','${QuestionType}','${answer}','${answerId}','${multi_options_ids}','${Image1}','${showImageTag}','${d3}','${isDisabled}') `; + } + for (const splitItemIndex in WindowSplits) { + const splitItem = WindowSplits[splitItemIndex]; + let ImageName = splitItem["ImageName"] != null && splitItem["ImageName"] != "" ? splitItem["ImageName"] : ""; + let ImageLabel = splitItem["ImageLable"] != null && splitItem["ImageLable"] != "" ? splitItem["ImageLable"] : ""; + let Image2Name = splitItem["Image2Name"] != null && splitItem["Image2Name"] != "" ? splitItem["Image2Name"] : ""; + + Image2Name = isImage2 == 1 ? Image2Name : ""; + + imageV += imageV != "" ? " , " : ""; + imageV += ` ('${WAREHS_HEADER_ID}','${StoreId}','${d3}','${ItemId}','${ImageName}','${Image2Name}','${ImageLabel}','${d3}') `; + } + + } + } + } + + console.log("values:", values); + + let add_hdr_data = `INSERT INTO ${AppTables.WAREHOUSE_CAMPAIGN_HDR_DATA} (WAREHS_HEADER_ID,STORE_ID,VISIT_DATE,ITEM_ID,ITEM_NAME,ITEM_CODE,ITEM_CATEGORY_ID,ITEM_CATEGORY,ITEM_QTY,IS_PRESENT,KPITYPE_ID,KPITYPE,MENU_ID,CAMPAIGN_ID) VALUES ${values} `; + let add_child_data = `INSERT INTO ${AppTables.WAREHOUSE_CAMPAIGN_CHILD_DATA} (WAREHS_HEADER_ID,STORE_ID,VISIT_DATE,ITEM_ID,QUESTION_ID,QUESTION_CODE,QUESTION_TYPE,ANSWER,ANSWER_ID,MULTI_OPTIONS_IDS,IMAGE1,IMAGE_ALLOW1,ADDED_DATE,IS_DISABLED) VALUES ${childV} `; + let add_images_data = `INSERT INTO ${AppTables.WAREHOUSE_CAMPAIGN_IMAGES} (WAREHS_HEADER_ID,STORE_ID,VISIT_DATE,ITEM_ID,IMAGE1,IMAGE2,IMAGE_LABEL,ADDED_DATE) VALUES ${imageV} `; + let combinedUpdateQuery = updateQueries.join('; '); + + await txn.executeSql( + add_hdr_data, + [], + async function (txn2, txnres) { + console.log("st header data added"); + var isSplitImageAdded = true, + isStockAdded = true, + isChildAdded = true, + updatQ=true; + if (imageV != "") { + isSplitImageAdded = await executeQuery(add_images_data); + } + + if (childV != "") { + isChildAdded = await executeQuery(add_child_data); + } + + if (combinedUpdateQuery != "") { + updatQ = await executeQuery(combinedUpdateQuery); + } + + if (!isSplitImageAdded) { + setProcessing(false); + notify("Cannot add Campaign images"); + } else if (!isChildAdded) { + setProcessing(false); + notify("Cannot add Campaign questions data"); + } else { + // clear store data in local storage to avoiding re-set data for the store + clear_item("storeData"); + setProcessing(false); + notify("Campaign updated successfully"); + props.navigation.goBack(); + } + }, + function (txnE, txnerr) { + console.log(txnerr); + setProcessing(false); + notify("Cannot add Campaign data"); + } + ); + }); + } catch (err) { + console.log(err); + } + } + + async function removePreviousData() { + let { StoreId, ChainId, StateId, StoreTypeId } = storeData; + + let { PSAllow } = currentMenu; + let deleteOnlyCatData = ShowCatWise && PSAllow && FilteredPromoValues.length > 0; + + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + let sq = `Select * FROM ${AppTables.WAREHOUSE_CAMPAIGN_HDR_DATA} WHERE STORE_ID='${StoreId}' and MENU_ID='${currentMenu.MenuId}' and VISIT_DATE='${d2}' `; + if (deleteOnlyCatData) { + let FilterIdsJoin = FilteredPromoValues.join(","); + sq += ` and PVIS_VALUE in (${FilterIdsJoin}) `; + } + await txn.executeSql( + sq, + [], + async function (txn2, txnres) { + if (txnres.rows.length > 0) { + let arr = []; + let isHdrDel = false, + isQtnsDel = false, + isImagesDel = false + + for (let i = 0; i < txnres.rows.length; i++) { + let data = txnres.rows.item(i); + let { WAREHS_HEADER_ID } = data; + arr.push(WAREHS_HEADER_ID); + if (i == txnres.rows.length - 1) { + let AllHdrIds = `'${arr.join("','")}'`; + + await txn.executeSql( + `DELETE FROM ${AppTables.WAREHOUSE_CAMPAIGN_HDR_DATA} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' and WAREHS_HEADER_ID in (${AllHdrIds}) `, + [], + async function (txn2, txnres) { + console.log("window hdr data deleted"); + isHdrDel = true; + if (isHdrDel && isHdrDel && isImagesDel ) { + resolve(true); + } + }, + function (txnE, txnerr) { + console.log(txnerr); + } + ); + await txn.executeSql( + `DELETE FROM ${AppTables.WAREHOUSE_CAMPAIGN_CHILD_DATA} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' and WAREHS_HEADER_ID in (${AllHdrIds}) `, + [], + async function (txn2, txnres) { + console.log("window child data deleted"); + isQtnsDel = true; + if (isHdrDel && isHdrDel && isImagesDel ) { + resolve(true); + } + }, + function (txnE, txnerr) { + console.log(txnerr); + } + ); + await txn.executeSql( + `DELETE FROM ${AppTables.WAREHOUSE_CAMPAIGN_IMAGES} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' and WAREHS_HEADER_ID in (${AllHdrIds}) `, + [], + async function (txn2, txnres) { + console.log("window images data deleted"); + isImagesDel = true; + if (isHdrDel && isHdrDel && isImagesDel ) { + resolve(true); + } + }, + function (txnE, txnerr) { + console.log(txnerr); + } + ); + + } + } + } else { + resolve(true); + } + }, + function (txnE, txnerr) { + console.log(txnerr); + resolve(false); + } + ); + }); + }) + .then((val) => { + return val; + }) + .catch((err) => { + console.log("error:", err); + return false; + }); + } + + async function executeQuery(q) { + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + await txn.executeSql( + q, + [], + async function (txn2, txnres2) { + resolve(true); + }, + function (Etxn, txnerr) { + console.log(txnerr); + resolve(false); + } + ); + }); + }) + .then((val) => { + return val; + }) + .catch((err) => { + console.log(err); + return false; + }); + } + + async function validate() { + let isValid = true; + + let isListedSKUIndex = KPIFields.findIndex((i) => i.KPIFieldName == "ListedSKUCheckbox"); + let isListedSKUKPIObj = isListedSKUIndex >= 0 ? KPIFields[isListedSKUIndex] : {}; + let isListedSKUEnable = isListedSKUIndex >= 0 ? isListedSKUKPIObj["KPIFieldEnable"] : true; + + let DeploymentTypEnableIndex = KPIFields.findIndex((i) => i.ScreenName == "WAREHOUSECAMPAIGN" && i.KPIFieldName == "DeploymentType"); + let DeploymentTypKPIObj = DeploymentTypEnableIndex >= 0 ? KPIFields[DeploymentTypEnableIndex] : {}; + let DeploymentTypEnable = DeploymentTypEnableIndex >= 0 ? DeploymentTypKPIObj["KPIFieldEnable"] : false; + + function showError(obj, isErr) { + setErrorField(obj); + setError(isErr); + } + + return new Promise((resolve, reject) => { + for (const wi in globalWindows) { + const window = globalWindows[wi]; + let isImage1 = window.VisibilityImage1 == "true" || window.VisibilityImage1 == 1 ? 1 : 0; + let isImage2 = window.VisibilityImage2 == "true" || window.VisibilityImage2 == 1 ? 1 : 0; + let isNAImageAvl = window.VisibilityNotExistCamera == "true" || window.VisibilityNotExistCamera == 1 ? 1 : 0; + let isNAReasonEnable = window.VisibilityNotExistReasonEnable == "true" || window.VisibilityNotExistReasonEnable == 1 ? 1 : 0; + let isReasonEnable = window.VisibilityExistReasonEnable == "true" || window.VisibilityExistReasonEnable == 1 ? 1 : 0; + let isStockReq = window.VisibilityElementStockRequired == "true" || window.VisibilityElementStockRequired == 1 ? 1 : 0; + let StockQtyRequired = window.StockQtyRequired == "true" || window.StockQtyRequired == 1 ? 1 : 0; + let WindowQuestions = window.WindowQuestions || []; + let WindowStocks = window.WindowStocks || []; + + const wind = WindowData.find((i) => i.ItemId == window.ItemId && i.QuestionCategoryId == window.ItemQuestionId); + let isPresent = wind.isPresent != null && wind.isPresent != "" ? wind.isPresent : "0"; + let WhDisable = wind.WhDisable != null && wind.WhDisable != "" ? wind.WhDisable : "0"; + let KpiTypId = wind.Id != null ? wind.Id : ""; + let KPIType = wind.KPIType != null ? wind.KPIType : ""; + let PosQty = wind.PosQty != null ? wind.PosQty :"" + let NAImage1 = wind.NAImage1 != null ? wind.NAImage1 : ""; + let NAImage1Path = wind.NAImage1Path != null ? wind.NAImage1Path : ""; + let remark = wind.remark != null ? wind.remark : ""; + let WindowSplits = wind.WindowSplits || []; + let QD = wind.WindowQA || {}; + let WStocksData = wind.WStocksData || []; + let showOtherText = wind.showOtherText != null ? wind.showOtherText : false; + + let errorobj = { EF_Window: window }; + + if(WhDisable!=1){ + if (isPresent == "1") { + // if (isReasonEnable == true && KpiTypId == "") { + // errorobj["EF_NExistReason"] = "NExistReason"; + // showError(errorobj, true); + // notify(`${ST.Pleaseselectreasonfor} ${window.ItemName} `, "LONG"); + // resolve(false); + // return; + // } + + + if (DeploymentTypEnable== true && KPIType == "") { + errorobj["EF_NExistReason"] = "NExistReason"; + showError(errorobj, true); + notify(`${ST.Pleaseselectdeploymenttypefor} ${window.ItemName} `, "LONG"); + resolve(false); + return; + } + // else if(remark==''){ + // notify(`Please enter remark for ${window.VisibilityName} `,'LONG'); + // resolve(false);return; + // } + + else if(PosQty==''){ + errorobj["EF_NExistRemark"] = "NExistRemark"; + showError(errorobj, true); + notify(`Please enter Deploy Qty for ${window.ItemName} `,'LONG'); + resolve(false);return; + + + } + + else { + if (StoreCameraAllow && window.NoOfSplit > 0 && WindowSplits.length > 0) { + + for (const splitItemIndex in WindowSplits) { + const splitItem = WindowSplits[splitItemIndex]; + + let Image1Name = splitItem["Image"] != null && splitItem["Image"] != "" ? splitItem["Image"] : ""; + let imgRequired = splitItem["imgRequired"] || false; + // console.log("Image2Name", Image2Name, isImage2); + if ( Image1Name == "" && imgRequired) { + errorobj["EF_splitImage1"] = "splitImage1"; + errorobj["EF_splitItemIndex"] = splitItemIndex; + showError(errorobj, true); + notify(`${ST.Pleaseclickallimagesfor} ${window.ItemName}`, "LONG"); + resolve(false); + return; + } + } + } + + + if (WindowQuestions.length > 0) { + for (const qtnIndex in WindowQuestions) { + const qtn = WindowQuestions[qtnIndex]; + + let selansid = "", + selanswer = "", + selimg = "", + showImageTag = false; + let id_key = qtn.ItemQuestionId + "_AnswerId"; + let ans_key = qtn.ItemQuestionId + "_Answer"; + let multi_key = qtn.ItemQuestionId + "_MultiOption"; + let date_key = qtn.ItemQuestionId + "_Date"; + let img_key = qtn.ItemQuestionId + "_ImagePath1"; + let imgname_key = qtn.ItemQuestionId + "_ImageName1"; + let rating_key = qtn.ItemQuestionId + "_Rating"; + + let isDisabled = qtn.isDisabled; + + if (!isDisabled) { + let list_mcdata = []; + errorobj["EF_qtn"] = qtn; + + let isImgAllowed = qtn.ItemAnswerShowCamera == "true" || qtn.ItemAnswerShowCamera == 1; + let checkForAnsKey = qtn.QuestionType == "Decimal" || qtn.QuestionType == "Number" || qtn.QuestionType == "Text" || qtn.QuestionType == "Date" || qtn.QuestionType == "Rating" || qtn.QuestionType == "QR"; + + if (qtn.QuestionType == "Single choice list") { + selansid = QD[id_key]; + } else if (qtn.QuestionType == "Multi choice list") { + selansid = QD[multi_key] != null && QD[multi_key] != "" ? QD[multi_key].split(",") : []; + } + + if (qtn.QuestionType == "Multi choice list" && selansid.length <= 0) { + errorobj["EF_Qtn_MultiChoice"] = "Qtn_MultiChoice"; + showError(errorobj, true); + notify(`${ST.Pleaseselectoptionsfortherequiredfield} ${ST.In} ${window.ItemName}`, "SHORT"); + resolve(false); + return; + } else if (checkForAnsKey && (Object.keys(QD).indexOf(ans_key) < 0 || (Object.keys(QD).indexOf(ans_key) >= 0 && QD[ans_key] === ""))) { + errorobj["EF_Qtn_Date"] = "Qtn_Date"; + showError(errorobj, true); + let msg = + qtn.QuestionType == "Date" + ? `${ST.Pleasepickadatefortherequiredfield} ${ST.In} ${window.ItemName}` + : qtn.QuestionType == "Rating" + ? `${ST.Pleaseselectratingfortherequiredfield} ${ST.In} ${window.ItemName}` + : `${ST.Pleasefillalltherequiredfield} ${ST.In} ${window.ItemName}`; + notify(msg, "SHORT"); + resolve(false); + return; + } else if (Object.keys(QD).indexOf(id_key) < 0 || (Object.keys(QD).indexOf(id_key) >= 0 && QD[id_key] === "")) { + errorobj["EF_Qtn_Input"] = "Qtn_Input"; + showError(errorobj, true); + notify(`${ST.Pleasefillalltherequiredfield} ${ST.In} ${window.ItemName}`, "SHORT"); + resolve(false); + return; + } else if (isImgAllowed && (Object.keys(QD).indexOf(img_key) < 0 || (Object.keys(QD).indexOf(img_key) >= 0 && QD[img_key] === ""))) { + errorobj["EF_Qtn_Image"] = "Qtn_Image"; + showError(errorobj, true); + notify(`${ST.Pleaseaddimages} ${ST.In} ${window.ItemName}`, "SHORT"); + resolve(false); + return; + } else { + console.log("no condition found"); + } + + if (qtn.QuestionType == "Single choice list" || qtn.QuestionType == "Multi choice list") { + if (qtn.Answers && qtn.Answers.length > 0) { + for (var j = 0; j < qtn.Answers.length; j++) { + let ansss = qtn.Answers[j]; + let isandImgAl = ansss.ItemAnswerShowCamera == "true" || ansss.ItemAnswerShowCamera == 1; + if (qtn.QuestionType == "Single choice list" && isandImgAl && ansss.AnswerId == selansid) { + showImageTag = true; + } else if (qtn.QuestionType == "Multi choice list" && isandImgAl && selansid.indexOf(ansss.AnswerId) >= 0) { + showImageTag = true; + } + } + } + } + + if (showImageTag && (Object.keys(QD).indexOf(img_key) < 0 || (Object.keys(QD).indexOf(img_key) >= 0 && QD[img_key] === ""))) { + errorobj["EF_Qtn_Image"] = "Qtn_Image"; + showError(errorobj, true); + notify(`${ST.Pleaseaddimages} ${ST.In} ${window.ItemName}`, "SHORT"); + resolve(false); + return; + } + } + } + } + } + } else { + if (isNAReasonEnable == true && KpiTypId == "") { + errorobj["EF_NExistReason"] = "NExistReason"; + showError(errorobj, true); + notify(`${ST.Pleaseselectreasonfor} ${window.ItemName} `, "LONG"); + resolve(false); + return; + } else if (isNAReasonEnable == true && showOtherText == true && (wind.PosQty == null || wind.PosQty == "")) { + errorobj["EF_NExistRemark"] = "NExistRemark"; + showError(errorobj, true); + notify(`${ST.PleaseEnterRemarkFor} ${window.ItemName} `, "LONG"); + resolve(false); + return; + } else if (StoreCameraAllow && isNAImageAvl == true && NAImage1 == "") { + errorobj["EF_NExistImage"] = "NExistImage"; + showError(errorobj, true); + notify(`${ST.Pleaseclickimagefor} ${window.ItemName}`, "LONG"); + resolve(false); + return; + } + } + } + + if (wi == Windows.length - 1) { + resolve(true); + return; + } + } + }) + .then((val) => { + return val; + }) + .catch((err) => { + console.log(err); + return false; + }); + } + + function onselectionChange3(option, keyLbl, keyVal, otherData) { + setErrorField({}); + setError(false); + let item = otherData.window; + let allData = WindowData; + let defData = { + ItemId: item.ItemId, + QuestionCategoryId: item.ItemQuestionId, + }; + const win_index = allData.findIndex((i) => i.ItemId == item.ItemId && i.QuestionCategoryId == item.ItemQuestionId); + let wind = win_index >= 0 ? allData[win_index] || defData : defData; + wind[keyVal] = option.value; + wind[keyLbl] = option.label; + + if (keyLbl == "KPIType") { + let rsn_Index = reasons_list.findIndex((i) => i.Id == option.value); + + if (rsn_Index >= 0) { + let rsn = reasons_list[rsn_Index]; + let IsRemarkTaken = rsn.IsRemarkTaken == 1 || rsn.IsRemarkTaken == "1" ? true : false; + + if (IsRemarkTaken == true) { + wind["showOtherText"] = true; + } else { + wind["showOtherText"] = false; + } + } + } + + win_index >= 0 ? (allData[win_index] = wind) : allData.push(wind); + // console.log("allData:", allData); + let objIndex = InputChange.findIndex((i) => i.ItemId == item.ItemId && i.QuestionCategoryId == item.ItemQuestionId); + let winArr = [...InputChange]; + winArr[objIndex].Flag = true; + + setInputChange(winArr); + WindowDataRef.current = allData; + setWindowData(allData); + // setHasUnsavedChanges(true); + BgUnsavedChanges(true); + setrerenderdata(!rerenderdata); + } + + function onselectionChange(option, qtn, window) { + setErrorField({}); + setError(false); + let allData = WindowData; + let defData = { + ItemId: window.ItemId, + QuestionCategoryId: window.ItemQuestionId, + }; + const wind_index = allData.findIndex((i) => i.ItemId == window.ItemId && i.QuestionCategoryId == window.ItemQuestionId); + let wind = wind_index >= 0 ? allData[wind_index] : defData; + let data = wind.WindowQA || {}; + let id_key = qtn.ItemQuestionId + "_AnswerId"; + let ans_key = qtn.ItemQuestionId + "_Answer"; + data[id_key] = option.value; + data[ans_key] = option.label; + + wind["WindowQA"] = data; + wind_index >= 0 ? (allData[wind_index] = wind) : allData.push(wind); + let objIndex = InputChange.findIndex((i) => i.ItemId == window.ItemId && i.QuestionCategoryId == window.ItemQuestionId); + let winArr = [...InputChange]; + winArr[objIndex].Flag = true; + + setInputChange(winArr); + WindowDataRef.current = allData; + setWindowData(allData); + + let aq_ans = qtn.Answers != null ? qtn.Answers : []; + let ans_obj = aq_ans.find((i) => i.AnswerId == option.value) || {}; + let EQtns = ans_obj.VAQuestionEnable != null && ans_obj.VAQuestionEnable != "" ? ans_obj.VAQuestionEnable.replace(" ", "").split(",") : []; + let DQtns = ans_obj.VAQuestionDisable != null && ans_obj.VAQuestionDisable != "" ? ans_obj.VAQuestionDisable.replace(" ", "").split(",") : []; + + let sqtns = window.WindowQuestions || []; + + if (EQtns.length > 0) { + enableQtns(sqtns, EQtns, DQtns, data, wind, wind_index, allData, window); + } else if (DQtns.length > 0) { + disableQtns(sqtns, DQtns, data, wind, wind_index, allData, window); + } else { + // setHasUnsavedChanges(true); + BgUnsavedChanges(true); + setrerenderdata(!rerenderdata); + } + BgUnsavedChanges(true); + } + + async function disableQtns(sqtns, DQtns, data, wind = {}, wind_index = -1, allData = [], window = {}) { + if (DQtns.length > 0) { + new Promise.all( + DQtns.map((qid, q_index) => { + let s_qtnindex = sqtns.findIndex((i) => i.ItemQuestionId == qid) || {}; + let s_qtn = sqtns[s_qtnindex]; + if (s_qtn != null) { + s_qtn["isDisabled"] = true; + sqtns[s_qtnindex] = s_qtn; + let id_key = s_qtn.ItemQuestionId + "_AnswerId"; + let ans_key = s_qtn.ItemQuestionId + "_Answer"; + data[id_key] = 0; + data[ans_key] = ""; + + wind["WindowQA"] = data; + wind_index >= 0 ? (allData[wind_index] = wind) : allData.push(wind); + return false; + } else { + return false; + } + }) + ).then(async (val) => { + let allwindows = Windows; + let windowIndex = allwindows.findIndex((i) => i.QuestionCategoryId == window.ItemQuestionId && i.ItemId == window.ItemId); + if (windowIndex >= 0) { + window["WindowQuestions"] = sqtns; + allwindows[windowIndex] = window; + WindowDataRef.current = allData; + setWindowData(allData); + setWindows(allwindows); + setGlobalWindows(allwindows); + // setHasUnsavedChanges(true); + BgUnsavedChanges(true); + setrerenderdata(!rerenderdata); + } + }); + } + } + + async function enableQtns(sqtns, EQtns, DQtns, data, wind = {}, wind_index = -1, allData = [], window = {}) { + new Promise.all( + EQtns.map((qid, q_index) => { + let s_qtnindex = sqtns.findIndex((i) => i.ItemQuestionId == qid) || {}; + let s_qtn = sqtns[s_qtnindex]; + if (s_qtn != null) { + s_qtn["isDisabled"] = false; + sqtns[s_qtnindex] = s_qtn; + return false; + } else { + return false; + } + }) + ).then(async (val) => { + if (DQtns.length > 0) { + await disableQtns(sqtns, DQtns, data, wind, wind_index, allData, window); + } else { + let allwindows = Windows; + let windowIndex = allwindows.findIndex((i) => i.QuestionCategoryId == window.ItemQuestionId && i.ItemId == window.ItemId); + if (windowIndex > 0) { + window["WindowQuestions"] = sqtns; + allwindows[windowIndex] = window; + setWindows(allwindows); + setGlobalWindows(allwindows); + // setHasUnsavedChanges(true); + BgUnsavedChanges(true); + setrerenderdata(!rerenderdata); + } + } + }); + } + + async function setMultiSelectValue(selectedItems = [], qtn = {}, window = {}) { + setErrorField({}); + setError(false); + // console.log("setMultiSelectValue", selectedItems); + let id_key = qtn.ItemQuestionId + "_AnswerId"; + let ans_key = qtn.ItemQuestionId + "_Answer"; + let multi_key = qtn.ItemQuestionId + "_MultiOption"; + + let allData = WindowData; + let defData = { + ItemId: window.ItemId, + QuestionCategoryId: window.ItemQuestionId, + }; + const wind_index = allData.findIndex((i) => i.ItemId == window.ItemId && i.QuestionCategoryId == window.ItemQuestionId); + let wind = wind_index >= 0 ? allData[wind_index] : defData; + let obj = wind.WindowQA || {}; + obj[id_key] = 0; + obj[multi_key] = selectedItems.join(","); + let anss = []; + selectedItems.map((itemValue) => { + let ans = qtn.Answers.find((c1) => c1.AnswerId == itemValue); + if (ans.Answer) { + anss.push(ans.Answer); + } + }); + obj[ans_key] = anss.join(","); + // console.log("obj:", obj); + + wind["WindowQA"] = obj; + wind_index >= 0 ? (allData[wind_index] = wind) : allData.push(wind); + + let objIndex = InputChange.findIndex((i) => i.ItemId == window.ItemId && i.QuestionCategoryId == window.ItemQuestionId); + let winArr = [...InputChange]; + winArr[objIndex].Flag = true; + + setInputChange(winArr); + WindowDataRef.current = allData; + setWindowData(allData); + // setHasUnsavedChanges(true); + BgUnsavedChanges(true); + setrerenderdata(!rerenderdata); + } + + function setTextValue(value, qtn, window, type = "") { + if (value != "") { + let isValid = validateNumber(value, type); + if (!isValid) { + return; + } + } + + setErrorField({}); + setError(false); + let id_key = qtn.ItemQuestionId + "_AnswerId"; + let ans_key = qtn.ItemQuestionId + "_Answer"; + + let allData = WindowData; + let defData = { + ItemId: window.ItemId, + QuestionCategoryId: window.ItemQuestionId, + }; + const wind_index = allData.findIndex((i) => i.ItemId == window.ItemId && i.QuestionCategoryId == window.ItemQuestionId); + let wind = wind_index >= 0 ? allData[wind_index] : defData; + let obj = wind.WindowQA || {}; + + if (qtn.QuestionType == "Date") { + let date_key = qtn.ItemQuestionId + "_Date"; + let d = value != null ? new Date(value) : new Date(); + let mfdate = moment(d).format("MM/YYYY"); + showQtnDatePicker(qtn, window, false); + obj[id_key] = 0; + obj[ans_key] = mfdate; + obj[date_key] = moment(d).format("MM/DD/YYYY"); + } else { + obj[id_key] = 0; + obj[ans_key] = value; + } + + // console.log(value, obj); + wind["WindowQA"] = obj; + wind_index >= 0 ? (allData[wind_index] = wind) : allData.push(wind); + + let objIndex = InputChange.findIndex((i) => i.ItemId == window.ItemId && i.QuestionCategoryId == window.ItemQuestionId); + let winArr = [...InputChange]; + winArr[objIndex].Flag = true; + + setInputChange(winArr); + WindowDataRef.current = allData; + setWindowData(allData); + // setHasUnsavedChanges(true); + BgUnsavedChanges(true); + console.log("tyeop-14"); + setrerenderdata(!rerenderdata); + } + + function showQtnDatePicker(qtn, window, show = false) { + let allQtns = window.WindowQuestions || []; + let newqtnIndex = allQtns.findIndex((q) => q.ItemQuestionId == qtn.ItemQuestionId); + + if (newqtnIndex >= 0) { + let newqtn = allQtns[newqtnIndex]; + newqtn.showDatePicker = show; + allQtns[newqtnIndex] = newqtn; + window["WindowQuestions"] = allQtns; + let allWindows = Windows; + const winIndex = allWindows.findIndex((i) => i.ItemId == window.ItemId && i.QuestionCategoryId == window.ItemQuestionId) || {}; + allWindows[winIndex] = window; + setWindows(allWindows); + setGlobalWindows(allwindows); + if (show == true) setrerenderdata(!rerenderdata); + } + } + + function setRatingValue(data) { + setRatingOrder(data); + } + + function onRatingCancel() { + setShowRating(false); + } + + function onRatingSave() { + setShowRating(false); + let qtn = RatingQtn; + let window = RatingWindow; + let id_key = qtn.ItemQuestionId + "_AnswerId"; + let ans_key = qtn.ItemQuestionId + "_Answer"; + let rating_key = qtn.ItemQuestionId + "_Rating"; + let ids = [], + anss = []; + RatingOrder.map((item, index) => { + ids.push(item.AnswerId); + anss.push(item.Answer); + }); + + let allData = WindowData; + let defData = { + ItemId: window.ItemId, + QuestionCategoryId: window.ItemQuestionId, + }; + + const wind_index = allData.findIndex((i) => i.ItemId == window.ItemId && i.QuestionCategoryId == window.ItemQuestionId); + let wind = wind_index >= 0 ? allData[wind_index] : defData; + let obj = wind.WindowQA || {}; + + obj[rating_key] = ids.join(","); + obj[id_key] = 0; + obj[ans_key] = anss.join(","); + + wind["WindowQA"] = obj; + wind_index >= 0 ? (allData[wind_index] = wind) : allData.push(wind); + + let objIndex = InputChange.findIndex((i) => i.ItemId == window.ItemId && i.QuestionCategoryId == window.ItemQuestionId); + let winArr = [...InputChange]; + winArr[objIndex].Flag = true; + + setInputChange(winArr); + WindowDataRef.current = allData; + setWindowData(allData); + // setHasUnsavedChanges(true); + BgUnsavedChanges(true); + setrerenderdata(!rerenderdata); + } + + function onChoiceSelect(item, val, key, animatedChoice) { + let win_index = InputChange.find((i) => i.ItemId == item.ItemId && i.QuestionCategoryId == item.ItemQuestionId); + let changeValue = win_index.Flag; + + if (changeValue) { + setIsPresentClean(val); + setDataCleanAnim(animatedChoice); + setDataCleanItem(item); + setDataCleanModal(true); + return; + } + + var val1 = 0; + val == 1 ? (val1 = 1) : ""; + + if (animatedChoice != null) { + Animated.timing(animatedChoice, { + toValue: val1, + duration: 400, + useNativeDriver: false, + }).start(); + } + onWindowDataChange(item, val, key); + } + + function onWindowDataChange(item, val, key) { + let allData = WindowData; + + let defData = { + ItemId: item.ItemId, + QuestionCategoryId: item.ItemQuestionId, + }; + const win_index = allData.findIndex((i) => i.ItemId == item.ItemId && i.QuestionCategoryId == item.ItemQuestionId); + let wind = win_index >= 0 ? allData[win_index] || defData : defData; + wind[key] = val; + + if (key == "Id") { + let rsn = reasons_list.find((r) => r.Id == val) || {}; + wind["KPIType"] = rsn.KPIType || ""; + } + + win_index >= 0 ? (allData[win_index] = wind) : allData.push(wind); + + if (key != "isPresent") { + let objIndex = InputChange.findIndex((i) => i.ItemId == item.ItemId && i.QuestionCategoryId == item.ItemQuestionId); + let winArr = [...InputChange]; + winArr[objIndex].Flag = true; + setInputChange(winArr); + } + + WindowDataRef.current = allData; + setWindowData(allData); + // setHasUnsavedChanges(true); + BgUnsavedChanges(true); + setrerenderdata(!rerenderdata); + } + + async function setWindowStockVal(val, window, stockProd, key, type = "") { + setErrorField({}); + setError(false); + if (type == "numeric" && val != "") { + const regex = new RegExp(/^\d+$/); + let isNUmeric = regex.test(val); + if (!isNUmeric) { + notify(ST.Pleaseenterwholenumbersonly, "SHORT"); + return; + } + } + + let allData = WindowData; + let defData = { + ItemId: window.ItemId, + QuestionCategoryId: window.ItemQuestionId, + }; + const win_index = allData.findIndex((i) => i.ItemId == window.ItemId && i.QuestionCategoryId == item.ItemQuestionId); + let wind = win_index >= 0 ? allData[win_index] || defData : defData; + let WStocksData = wind["WStocksData"] || []; + let sdIndex = WStocksData.findIndex((i) => i.ProductId == stockProd.VisibilityStockValue); + let sd = sdIndex >= 0 ? WStocksData[sdIndex] : { ProductId: stockProd.VisibilityStockValue, Stock: "" }; + sd[key] = val; + sdIndex >= 0 ? (WStocksData[sdIndex] = sd) : WStocksData.push(sd); + wind["WStocksData"] = WStocksData; + win_index >= 0 ? (allData[win_index] = wind) : allData.push(wind); + if (key == "isPVisPresent") { + let isAllChecked = await verifyAllChecked(val, window, stockProd, key); + wind["isAllSKUChecked"] = isAllChecked; + } + + WindowDataRef.current = allData; + setWindowData(allData); + // setHasUnsavedChanges(true); + BgUnsavedChanges(true); + setrerenderdata4(!rerenderdata4); + } + + async function onCatTextChange(window, key, val,type="") { + if (val != "") { + let isValid = validateNumber(val, type); + if (!isValid) { + return; + } + } + + setErrorField({}); + setError(false); + let item = window; + let allData = WindowData; + let defData = { + ItemId: item.ItemId, + QuestionCategoryId: item.ItemQuestionId, + }; + const win_index = allData.findIndex((i) => i.ItemId == item.ItemId && i.QuestionCategoryId == item.ItemQuestionId); + let wind = win_index >= 0 ? allData[win_index] || defData : defData; + wind[key] = val; + + win_index >= 0 ? (allData[win_index] = wind) : allData.push(wind); + + WindowDataRef.current = allData; + setWindowData(allData); + + // setHasUnsavedChanges(true); + BgUnsavedChanges(true); + setrerenderdata(!rerenderdata); + } + + async function verifyAllChecked(val, window, stockProd, key) { + return await new Promise((resolve, reject) => { + let WindowStocks = window.WindowStocks || []; + let allData = WindowData; + const win_index = allData.findIndex((i) => i.ItemId == window.ItemId && i.QuestionCategoryId == item.ItemQuestionId); + let wind = win_index >= 0 ? allData[win_index] || defData : defData; + let WStocksData = wind["WStocksData"] || []; + if (WindowStocks.length > 0) { + let isAllChecked = 1; + for (var i = 0; i < WindowStocks.length; i++) { + let stockProd = WindowStocks[i]; + + let sdIndex1 = WStocksData.findIndex((a) => a.ProductId == stockProd.VisibilityStockValue); + let sd1 = sdIndex1 >= 0 ? WStocksData[sdIndex1] : {}; + let isPVisPresent = sd1.isPVisPresent; + if (isPVisPresent == null || isPVisPresent == "" || isPVisPresent == 0 || isPVisPresent == "0") { + isAllChecked = 0; + } + + if (i == WindowStocks.length - 1) { + resolve(isAllChecked); + } + } + } else { + resolve(0); + } + }).catch((err) => { + console.log(err); + return 0; + }); + } + + function onWindowDataClean() { + if (DataCleanAnim != null) { + let anim = isPresentClean == 1 ? 1 : ""; + Animated.timing(DataCleanAnim, { + toValue: anim, + duration: 400, + useNativeDriver: false, + }).start(); + } + + let ImageMandatory = KPIFields?.find((i) => i.KPIFieldName == "ImageMandatory"); + let ImageMandatoryFlage = ImageMandatory?.KPIFieldEnable || false + let ImageMandatoryNo = ImageMandatoryFlage ? ImageMandatory?.KPIFieldDisplayName : 0 + + let allData = WindowData; + let WindowSplits = []; + for (var s = 0; s < DataCleanItem.NoOfSplit; s++) { + let obj = { + ImageName: "", + Image: "", + ImageLable: ImageLabel[s], + imgRequired: s < ImageMandatoryNo + }; + WindowSplits.push(obj); + } + + let defData = { + ...DataCleanItem, + ItemId: DataCleanItem.ItemId, + ItemQuestionId: DataCleanItem.ItemQuestionId, + isAllSKUChecked: 0, + WindowSplits: WindowSplits, + KPIType: "", + PosQty: "", + TodayDeploy:0, + WindowQA: {}, + WStocksData: [], + isPresent: isPresentClean, + }; + const win_index = allData.findIndex((i) => i.ItemId == DataCleanItem.ItemId && i.QuestionCategoryId == DataCleanItem.ItemQuestionId); + allData[win_index] = defData; + + + + let objIndex = InputChange.findIndex((obj) => obj.ItemId == DataCleanItem.ItemId && obj.QuestionCategoryId == DataCleanItem.ItemQuestionId); + let winArr = [...InputChange]; + winArr[objIndex].Flag = false; + + setInputChange(winArr); + WindowDataRef.current = allData; + setWindowData(allData); + // setHasUnsavedChanges(true); + BgUnsavedChanges(true); + setDataCleanModal(false); + setrerenderdata(!rerenderdata); + } + + function checkAllSKUs(val, window) { + let WindowStocks = window.WindowStocks || []; + let allData = WindowData; + let defData = { + ItemId: window.ItemId, + QuestionCategoryId: window.ItemQuestionId, + }; + const win_index = allData.findIndex((i) => i.ItemId == window.ItemId && i.QuestionCategoryId == window.ItemQuestionId); + let wind = win_index >= 0 ? allData[win_index] || defData : defData; + let WStocksData = wind["WStocksData"] || []; + console.log("WStocksData before:", WStocksData); + for (var i = 0; i < WindowStocks.length; i++) { + let stockProd = WindowStocks[i]; + + let sdIndex = WStocksData.findIndex((a) => a.ProductId == stockProd.VisibilityStockValue); + let sd = sdIndex >= 0 ? WStocksData[sdIndex] : { ProductId: stockProd.VisibilityStockValue, Stock: "" }; + let isPVisPresent = val == 1 || val == "1" ? 1 : 0; + sd["isPVisPresent"] = isPVisPresent; + + sdIndex >= 0 ? (WStocksData[sdIndex] = sd) : WStocksData.push(sd); + } + + wind["WStocksData"] = WStocksData; + wind["isAllSKUChecked"] = val == 1 ? 1 : 0; + console.log("wind updated"); + win_index >= 0 ? (allData[win_index] = wind) : allData.push(wind); + + WindowDataRef.current = allData; + setWindowData(allData); + // setHasUnsavedChanges(true); + BgUnsavedChanges(true); + setrerenderdata(!rerenderdata); + } + + function onSaveCancel() { + setShowAlert(false); + } + + function openImageRefView(windowIndex = 0) { + setrefImageIndex(windowIndex); + UpdateShow_zoomImageRef(true); + } + + function FilterStores(searchedQry) { + searchedQry = searchedQry.toLowerCase(); + console.log("searchedQry", searchedQry); + let arr = []; + let newWindows = []; + if (searchedQry != null && searchedQry != "") { + for (let i = 0; i < globalWindows.length; i++) { + let item = globalWindows[i]; + let { ItemName } = item; + if (ItemName.toLowerCase().includes(searchedQry)) { + newWindows.push(item); + } + + if (i == globalWindows.length - 1) { + arr = newWindows; + } + } + } else { + arr = globalWindows; + } + + setWindows(arr); + setrerenderdata(!rerenderdata); + setrerenderdata2(!rerenderdata2); + } + + function renderRatingView() { + let qtn = RatingQtn; + let Answers = qtn.Answers; + let id_key = qtn.ItemQuestionId + "_AnswerId"; + let ans_key = qtn.ItemQuestionId + "_Answer"; + let rating_key = qtn.ItemQuestionId + "_Rating"; + + let newarr = RatingOrder; + if (RatingOrder.length <= 0) { + newarr = Answers; + } + + return ( + + + {ST.DragItemsInOrder} + {ST.Pressandholdtodrag} + { + setRatingValue(data); + }} + keyExtractor={(item) => item.AnswerId} + renderItem={renderItem} + /> + + { + onRatingCancel(); + }} + > + {ST.Cancel} + + { + onRatingSave(); + }} + > + {ST.Save} + + + + + ); + } + + function render_Picker(label_key, value_key, onChange = () => { }, selected_data = {}) { + var data = []; + let qtn = selected_data.qtn || {}; + let window = selected_data.window || {}; + let isQtnDisabled = qtn.isDisabled != null || qtn.isDisabled != "" ? false : true; + let allAnswers = qtn.Answers || []; + + allAnswers.map((item, index) => { + let obj = { key: index, label: item[label_key], value: item[value_key] }; + if (selected_data.value == item[label_key]) + obj["component"] = ( + + {item[label_key]} + + ); + data.push(obj); + }); + + return ( + { + onChange(option, qtn, window); + }} + overlayStyle={customStyle.addVisPickerOverlay} + cancelContainerStyle={customStyle.addVisPicker_OptionContainerStyle} + optionStyle={customStyle.addvis_opStyle} + optionTextStyle={customStyle.addvis_opTextStyle} + optionContainerStyle={customStyle.addVisPicker_OptionContainerStyle} + selectedKey={"1"} + disabled={isQtnDisabled} + > + {selected_data.value != null && selected_data.value != "" ? selected_data.value : "-" + ST.select + "-"} + + ); + } + + function renderDatePicker(qtn, window) { + let qtnn = qtn; + let DateRange = qtn.DateRange; + let maxDate = moment().add(10, "years").format("MM/DD/YYYY"); + let minDate = moment().subtract(10, "years").format("MM/DD/YYYY"); + if (DateRange == "RFD") { + maxDate = moment().format("MM/DD/YYYY"); + } else if (DateRange == "RPD") { + minDate = moment().format("MM/DD/YYYY"); + } + + return ( + { + setTextValue(selectedDate, qtnn, window); + }} + maximumDate={new Date(maxDate)} + minimumDate={new Date(minDate)} + /> + ); + } + + async function OpenImgModal(imgPath, window, splitItem, splitItemIndex, cameraType) { + setSelectedImg(imgPath); + setShowModal(true); + if (imgPath != "" && imgPath != null) { + setShowImageSaveOp(false); + } else { + setShowImageSaveOp(true); + } + setReCapImgModalObj({ window, splitItem, splitItemIndex, cameraType }); + // _OpenCaptureImage_Modal(imgPath,window,splitItem,splitItemIndex,cameraType) + } + + function cancelImage() { + // setImage1(''); + setSelectedImg(""); + setReCapImgModalObj({}); + setShowModal(false); + } + + function _renderWindow() { + let RemarkEnableIndex = KPIFields.findIndex((i) => i.ScreenName == "WAREHOUSECAMPAIGN" && i.KPIFieldName == "DeployQty"); + let RemarkEnableKPIObj = RemarkEnableIndex >= 0 ? KPIFields[RemarkEnableIndex] : {}; + let RemarkEnable = RemarkEnableIndex >= 0 ? RemarkEnableKPIObj["KPIFieldEnable"] : false; + let DeployQtyTextLength = RemarkEnableIndex >= 0 ? Number(RemarkEnableKPIObj["KPIType"]) : null; + + let DeploymentTypEnableIndex = KPIFields.findIndex((i) => i.ScreenName == "WAREHOUSECAMPAIGN" && i.KPIFieldName == "DeploymentType"); + let DeploymentTypKPIObj = DeploymentTypEnableIndex >= 0 ? KPIFields[DeploymentTypEnableIndex] : {}; + let DeploymentTypEnable = DeploymentTypEnableIndex >= 0 ? DeploymentTypKPIObj["KPIFieldEnable"] : false; + + let isListedSKUIndex = KPIFields.findIndex((i) => i.KPIFieldName == "ListedSKUCheckbox"); + let isListedSKUKPIObj = isListedSKUIndex >= 0 ? KPIFields[isListedSKUIndex] : {}; + let isListedSKUEnable = isListedSKUIndex >= 0 ? isListedSKUKPIObj["KPIFieldEnable"] : true; + + return ( + + `window_${index.toString()}`} + renderItem={({ item, index }) => { + const window = item; + const windowIndex = index; + let isVisible = Boolean(ItemsInView.find(({ item: i, isViewable }) => i.ItemId == window.ItemId && i.ItemQuestionId == window.QuestionCategoryId && isViewable)); + // console.log("RenderItemList ItemsInView2:",index,isVisible) + + let isImage1 = window.VisibilityImage1 == "true" || window.VisibilityImage1 == 1 ? 1 : 0; + let isImage2 = window.VisibilityImage2 == "true" || window.VisibilityImage2 == 1 ? 1 : 0; + let isNAImageAvl = window.VisibilityNotExistCamera == "true" || window.VisibilityNotExistCamera == 1 ? 1 : 0; + let isNAReasonEnable = window.VisibilityNotExistReasonEnable == "true" || window.VisibilityNotExistReasonEnable == 1 ? 1 : 0; + let VisibilityRefImagePopUp = window.VisibilityRefImagePopUp == "true" || window.VisibilityRefImagePopUp == true ? true : false; + let isReasonEnable = window.VisibilityExistReasonEnable == "true" || window.VisibilityExistReasonEnable == 1 ? 1 : 0; + let isStockReq = window.VisibilityElementStockRequired == "true" || window.VisibilityElementStockRequired == 1 ? 1 : 0; + let StockQtyRequired = window.StockQtyRequired == "true" || window.StockQtyRequired == 1 ? 1 : 0; + let PromoTitleEnable = window.PromoDefinitionTitleEnable == "true" || window.PromoDefinitionTitleEnable == 1 ? 1 : 0; + let PromoTitle = window.PromoDefinitionTitle != null && window.PromoDefinitionTitle != "undefined" ? window.PromoDefinitionTitle : ""; + + // let isStock_CheckAssrt=window.VisibilityElementCheckAssortment=='true' || window.VisibilityElementCheckAssortment==1?1:0; + let RefImage = window.VisibilityRefImage; + let camera1Label = window.VisibilityImage1Lable || ""; + let camera2Label = window.VisibilityImage2Lable || ""; + let WindowQuestions = window.WindowQuestions || []; + let WindowStocks = window.WindowStocks || []; + + const wind = WindowData.find((i) => i.ItemId == window.ItemId && i.QuestionCategoryId == window.ItemQuestionId); + let StockInHand = wind.StockInHand != null && wind.StockInHand != "" ? wind.StockInHand : 0; + let isPresent = wind.isPresent != null && wind.isPresent != "" ? wind.isPresent : "0"; + let WhDisable = wind.WhDisable != null && wind.WhDisable != "" ? (StockInHand=="0"? "1": wind.WhDisable ) : (StockInHand=="0"? "1": "0"); + + + let TodayDeploy = wind.TodayDeploy != null && wind.TodayDeploy != "" ? wind.TodayDeploy : 0; + let FinalStock = Number(StockInHand)-Number(TodayDeploy) + + let KpiTypId = wind.Id != null ? wind.Id : ""; + // let Reason = wind.Reason != null ? wind.Reason : ''; + let KPIType = wind.KPIType != null ? wind.KPIType : ""; + let NAImage1 = wind.NAImage1 != null ? wind.NAImage1 : ""; + let NAImage1Path = wind.NAImage1Path != null ? wind.NAImage1Path : ""; + let remark = wind.remark != null ? wind.remark : ""; + // let PosQty = wind && wind.PosQty != null ? wind.PosQty : ""; + let PosQty = wind && wind.PosQty != null ? wind.PosQty.toString() : ""; + + + let showOtherText = wind.showOtherText != null ? wind.showOtherText : false; + let WindowSplits = wind.WindowSplits || []; + let QuestionsData = wind.WindowQA || {}; + let WStocksData = wind.WStocksData || []; + let isAllSKUChecked = wind.isAllSKUChecked == 1 || wind.isAllSKUChecked == "1"; + + // console.log('RefImage:',RefImage); + + var xpos = isPresent == "1" || isPresent == 1 ? -75 : 0; + if (window.animatedChoice != null) { + xpos = window.animatedChoice.interpolate({ + inputRange: [0, 1], + outputRange: [0, -75], + }); + } + + if (isVisible && window.animatedHeight != null) { + setTimeout(() => { + Animated.timing(window.animatedHeight, { + toValue: 0, + duration: 800, + useNativeDriver: false, + }).start(); + // animHight=window.animatedHeight.interpolate({ + // inputRange:[100,0], + // outputRange:["100%","0%"], + // }); + }, (props.RefImagePopUpTime || 0) * 1000); + } + + let EF_Window = errorfield.EF_Window != null ? errorfield.EF_Window : {}; + let show_errorhere = error == true && EF_Window.ItemId == window.ItemId && EF_Window.QuestionCategoryId == window.ItemQuestionId; + + // if not Present fields + + // this will show error field in red (if window is present and exist reason is enabled and not filled ) or (if window is not present and Not exist reason is enabled and not filled ) + let EF_NExistReason = errorfield.EF_NExistReason || ""; + let EStyle_NExistReason = show_errorhere && EF_NExistReason == "NExistReason" ? customStyle.stk_inptSTyle_error : {}; + + let EF_NExisStockQty = errorfield.EF_NExisStockQty || ""; + let EStyle_NExisStockQty = show_errorhere && EF_NExisStockQty == "NExisStockQty" ? customStyle.stk_inptSTyle_error : {}; + + let EF_NExistRemark = errorfield.EF_NExistRemark || ""; + let EStyle_NExistRemark = show_errorhere && EF_NExistRemark == "NExistRemark" ? customStyle.stk_inptSTyle_error : {}; + + let EF_NExistImage = errorfield.EF_NExistImage || ""; + let EStyle_NExistImage = show_errorhere && EF_NExistImage == "NExistImage" ? customStyle.error_CatImage2 : {}; + + return ( + + + + {window.ItemCategory} + {window && window.ChildName != "" && {window.ItemName}} + {PromoTitleEnable == 1 && PromoTitle != null && PromoTitle != "" && {PromoTitle}} + { + openImageRefView(index); + }} + > + + + + + {VisibilityRefImagePopUp && ( + + + + )} + + + + + + {`${ST.IsPresent}\n`} + {`${WhDisable == 1 && isPresent == 1 ? "(Status :Deployed)" : (StockInHand == "0" ? `(Stock Qty ${StockInHand})` : '')}`} + + + + + { + if(WhDisable==1){ + notify(`You have already Deployed`, "LONG"); + return + } + onChoiceSelect(window, 1, "isPresent", window.animatedChoice); + }} + > + {ST.Yes} + + { + if(WhDisable==1){ + notify(`You have already Deployed`, "LONG"); + return + } + onChoiceSelect(window, 0, "isPresent", window.animatedChoice); + }} + > + {ST.No} + + + + + {((isPresent != "1" && isNAReasonEnable == true) || (isPresent == "1" && isReasonEnable == true)) && WhDisable=="0" && ( + + {ST.SelectReason} + { + + } + + )} + + {isPresent != "1" && isNAImageAvl == true && WhDisable=="0" && ( + + + + {ST.CaptureImage} + + + + + {(NAImage1Path == "" || NAImage1Path == null) && ( + { + openCamera(window, {}, 0, "1", "3"); + }} + > + + + )} + {NAImage1Path != "" && NAImage1Path != null && ( + + + { + openCamera(window, {}, 0, "1", "3"); + }} + > + + + + )} + + + + + )} + + {/* {isPresent == "1" && RemarkEnable == true && WhDisable=="0" && */} + + {isPresent == "1" && DeploymentTypEnable == true && WhDisable=="0" && + ( + + {"Deployment Type"} + { + + } + + )} + {isPresent == "1" && RemarkEnable == true && WhDisable=="0" && ( + + {`Deploy Qty ${item?.MeasureUnit?`(${item?.MeasureUnit})`:""} \n( Stock Avbl. ${StockInHand} )`} + { + + let stockEnt=KPIType=="Already Deployed" ? true :(val<=FinalStock && (val===""? true :val>0) ) + if(stockEnt){ + onCatTextChange(window, "PosQty", val, "numeric"); + }else{ + notify(`Please fill the value less than Stock In Hand and Greater than 0 `, "LONG"); + } + }} + /> + + )} + + {isPresent == "1" && WhDisable=="0" && ( + + {isStockReq == true && WindowStocks.length > 0 && ( + + + {isListedSKUEnable == true ? ST.SelectProducts : "Enter Stocks"} + + {isListedSKUEnable == true && ( + + { + checkAllSKUs(isAllSKUChecked == 1 ? 0 : 1, window); + }} + > + { + let val1 = val == true ? 1 : 0; + checkAllSKUs(val1, window); + }} + style={[customStyle.WStkHdr_checkbox, Platform.OS == "ios" ? { height: 20, width: 20, marginLeft: 5 } : {}]} + tintColors={{ + true: PageTheme.$primary_color, + false: PageTheme.$text_color_light, + }} + /> + {ST.SelectAll} + + + )} + + + )} + + {WindowSplits?.length > 0 && ( + + + {currentMenu.MenuName + " Images"} + + `spliItem_${index.toString()}`} + style={{flexWrap:"wrap", flexDirection:"row", justifyContent:"space-between",marginLeft:"30%",marginRight:"20%"}} + renderItem={({ item, index }) => { + let splitItem = item; + let splitItemIndex = index; + let Img = item?.Image + let imgRequired = item?.imgRequired + let ImageLable = item?.ImageLable + let Image1Name = splitItem["Image1Name"] != null && splitItem["Image1Name"] != "" ? splitItem["Image1Name"] : ""; + let Image2Name = splitItem["Image2Name"] != null && splitItem["Image2Name"] != "" ? splitItem["Image2Name"] : ""; + let Image1 = splitItem["Image1"] != null && splitItem["Image1"] != "" ? splitItem["Image1"] : ""; + let Image2 = splitItem["Image2"] != null && splitItem["Image2"] != "" ? splitItem["Image2"] : ""; + let isImg1mad = splitItem["img1Required"] || false; + let isImg2mad = splitItem["img2Required"] || false; + + // highlight slit image box + let EF_splitItemIndex = errorfield.EF_splitItemIndex || ""; + let showSplitItemErrHere = EF_splitItemIndex == splitItemIndex; + + let EF_splitImage1 = errorfield.EF_splitImage1 || ""; + let EStyle_splitImage1 = show_errorhere && showSplitItemErrHere && EF_splitImage1 == "splitImage1" ? customStyle.error_CatImage2 : {}; + + let EF_splitImage2 = errorfield.EF_splitImage2 || ""; + let EStyle_splitImage2 = show_errorhere && showSplitItemErrHere && EF_splitImage2 == "splitImage2" ? customStyle.error_CatImage2 : {}; + + + return ( + + + + {!Img && imgRequired ? ( + { + openCamera(window, splitItem, splitItemIndex, "4","4"); + }} + > + + + ) : !Img ? ( + { + openCamera(window, splitItem, splitItemIndex, "4","4"); + }} + > + + + ) : Img && ( + { + OpenImgModal(Img, window, splitItem, splitItemIndex, "4","4"); + }} + > + + + ) } + {ImageLable} + + + + ); + }} + /> + + )} + + {WindowQuestions.length > 0 && ( + + + {currentMenu.MenuName + " Questions"} + + {WindowQuestions.map((item, index) => { + {/* console.log("Question...:", item, "Index:", index); */ } + let qtn = item; + let qtnIndex = index; + let selansid = "", + selanswer = "", + selimg = "", + showImageTag = false; + let id_key = qtn.ItemQuestionId + "_AnswerId"; + let ans_key = qtn.ItemQuestionId + "_Answer"; + let multi_key = qtn.ItemQuestionId + "_MultiOption"; + let date_key = qtn.ItemQuestionId + "_Date"; + let img_key = qtn.ItemQuestionId + "_ImagePath1"; + let imgname_key = qtn.ItemQuestionId + "_ImageName1"; + let rating_key = qtn.ItemQuestionId + "_Rating"; + + let list_mcdata = []; + let ItemDefaultQuestionEnable = qtn.ItemDefaultQuestionEnable == "true" || qtn.ItemDefaultQuestionEnable == 1 || qtn.ItemDefaultQuestionEnable == "1" ? true : false; + let isDisabled = qtn.isDisabled; + if (qtn.QuestionType == "Single choice list") { + selansid = QuestionsData[id_key] != null ? QuestionsData[id_key] : ""; + selanswer = QuestionsData[ans_key] != null ? QuestionsData[ans_key] : ""; + } else if (qtn.QuestionType == "Multi choice list") { + if (qtn.Answers != null) { + for (var i = 0; i < qtn.Answers.length; i++) { + let obj = { + AnswerId: parseInt(qtn.Answers[i].AnswerId), + Answer: qtn.Answers[i].Answer, + }; + list_mcdata.push(obj); + } + } + selansid = QuestionsData[multi_key] != null && QuestionsData[multi_key] != "" ? QuestionsData[multi_key].split(",") : []; + if (selansid != null && selansid.length > 0) { + let arr = []; + for (var i = 0; i < selansid.length; i++) { + arr.push(parseInt(selansid[i])); + } + selansid = arr; + } + + } else if (qtn.QuestionType == "Number" || qtn.QuestionType == "Text" || qtn.QuestionType == "Decimal" || qtn.QuestionType == "Date") { + selansid = QuestionsData[ans_key] != null && QuestionsData[ans_key] != undefined ? QuestionsData[ans_key] : ""; + selanswer = qtn.QuestionType == "Date" ? QuestionsData[date_key] || moment().format("MM/DD/YYYY") : ""; + showImageTag = qtn.ItemAnswerShowCamera == 1 || qtn.ItemAnswerShowCamera == "true"; + } else if (qtn.QuestionType == "Rating" || qtn.QuestionType == "QR") { + selanswer = QuestionsData[ans_key] ? QuestionsData[ans_key] : ""; + } + + if (qtn.QuestionType == "Single choice list" || qtn.QuestionType == "Multi choice list") { + if (qtn.Answers && qtn.Answers.length > 0) { + for (var i = 0; i < qtn.Answers.length; i++) { + let ansss = qtn.Answers[i]; + let isandImgAl = ansss.ItemAnswerShowCamera == "true" || ansss.ItemAnswerShowCamera == 1; + + if (qtn.QuestionType == "Single choice list" && isandImgAl && ansss.AnswerId == selansid) { + showImageTag = true; + } else if (qtn.QuestionType == "Multi choice list" && isandImgAl && selansid.indexOf(ansss.AnswerId) >= 0) { + showImageTag = true; + } + } + } + } + + if (showImageTag) { + {/* selimg = QuestionsData[img_key] != null && QuestionsData[img_key] != "" ? "file://" + QuestionsData[img_key] : ""; */ } + + selimg = QuestionsData[img_key] != null && QuestionsData[img_key] !== "" ? "file://" + QuestionsData[img_key] : ""; + } + + let EF_qtn = errorfield.EF_qtn != null ? errorfield.EF_qtn : {}; + let showQtnErrHere = EF_qtn.ItemQuestionId == qtn.ItemQuestionId; + //Qtn_MultiChoice + let EF_Qtn_MultiChoice = errorfield.EF_Qtn_MultiChoice || ""; + let EStyle_Qtn_MultiChoice = show_errorhere && showQtnErrHere && EF_Qtn_MultiChoice == "Qtn_MultiChoice" ? customStyle.stk_MultiSSTyle_error : {}; + + let EF_Qtn_Date = errorfield.EF_Qtn_Date || ""; + let EStyle_Qtn_Date = show_errorhere && showQtnErrHere && EF_Qtn_Date == "Qtn_Date" ? customStyle.stk_inptSTyle_error : {}; + + let EF_Qtn_Input = errorfield.EF_Qtn_Input || ""; + let EStyle_Qtn_Input = show_errorhere && showQtnErrHere && EF_Qtn_Input == "Qtn_Input" ? customStyle.stk_inptSTyle_error : {}; + + let EF_Qtn_Image = errorfield.EF_Qtn_Image || ""; + let EStyle_Qtn_Image = show_errorhere && showQtnErrHere && EF_Qtn_Image == "Qtn_Image" ? customStyle.stk_inptSTyle_error : {}; + + if (!isDisabled) { + return ( + + {qtn.ItemQuestionName} + {qtn.QuestionType == "Single choice list" && + qtn.Answers && + render_Picker("Answer", "AnswerId", onselectionChange, { + value: selanswer, + qtn: qtn, + window: window, + })} + {qtn.QuestionType == "Multi choice list" && qtn.Answers && ( + { + setMultiSelectValue(selectedItems, qtn, window); + }} //setMultiSelectValue(selectedItems,qtn) + selectedItems={selansid} + selectText="Pick Items" + searchInputPlaceholderText={ST.SearchItems + "..."} + // onChangeInput={ (text)=> console.log(text)} + tagRemoveIconColor={PageTheme.$primary_color} + tagBorderColor={PageTheme.$primary_color} + tagTextColor={PageTheme.$primary_color} + selectedItemTextColor={PageTheme.$primary_color} + selectedItemIconColor={PageTheme.$primary_color} + itemTextColor={PageTheme.$text_color} + displayKey="Answer" + searchInputStyle={customStyle.wind_MultiSearchInputStyle} + styleMainWrapper={EStyle_Qtn_MultiChoice} + submitButtonColor={PageTheme.$primary_color} + submitButtonText={ST.Submit} + /> + )} + {(qtn.QuestionType == "Number" || qtn.QuestionType == "Decimal" || qtn.QuestionType == "Text") && ( + console.log("onchangeVal--", e.value)} + onChangeText={(val) => { + setTextValue(val, qtn, window, qtn.QuestionType == "Decimal" ? "decimal" : qtn.QuestionType == "Text" ? "text" : "numeric"); + }} + /> + )} + {qtn.QuestionType == "Date" && ( + + {selansid != "" ? selansid : "MM/YYYY"} + { + setDateValue(selanswer); + showQtnDatePicker(qtn, window, true); + }} + > + + + + )} + {qtn.QuestionType == "QR" && ( + + {selanswer != "" ? selanswer : ""} + { + setQREnable(true); + setQRqtnData({ qtn, window }); + setShowQRCamera(true); + }} + > + {/* */} + + + + )} + {(qtn.showDatePicker == true || qtn.showDatePicker == "true") && qtn.QuestionType == "Date" && renderDatePicker(qtn, window)} + {qtn.QuestionType == "Rating" && ( + + {selanswer} + { + setRatingQtn(qtn); + setRatingWindow(window); + setShowRating(true); + }} + > + + + + )} + + { + // (qtn.QuestionType=='Audio') && + // + // {selanswer} + // {show_recorder(qtn);}}> + // + // + // + } + + {showImageTag && ( + + + { + openCamera(window, {}, 0, "1", "2", qtn); + }} + > + + + + )} + + ); + } else { + return null; + } + })} + + )} + + + )} + + + + ); + }} + /> + + ); + } + + function _renderHeader(currentIndex) { + return ( + + {`${currentIndex + 1}/${zoomImageUrl.length}`} + { + UpdateShow_zoomImageRef(false); + }} + > + + + + ); + } + + const onCancelClean = () => { + setDataCleanModal(false); + }; + const onclear = () => { + onWindowDataClean(DataCleanItem); + }; + + return ( + + {processing && } + + {_OpenCaptureImage_Modal()} + {ConfirmSaveAlert(props, showAlert, onSaveCancel, saveData)} + {ConfirmSaveAlert(props, DataCleanModal, onCancelClean, onclear, "Your data will be clean")} + { + console.log("QRRec:", imgData); + setShowQRCamera(false); + onQRScanned(imgData); + }} + showCamera={showQRCamera} + onHideCamera={() => { + setShowQRCamera(false); + }} + /> + { + setShowCamera(false); + getImage(imgData); + }} + showCamera={showCamera} + onHideCamera={() => { + setShowCamera(false); + }} + /> + + + + + { + setSearchedItem(val); + FilterStores(val); + }} + /> + { + FilterStores(searchedItem); + }} + > + + + + + {Object.keys(storeData).length > 0 && {_renderWindow()}} + + { + onSubmitData(); + }} + /> + + + + {showRating == true && renderRatingView()} + {show_zoomImage && ( + + null} /> + + )} + + ); +} + +export default connect(mapStateToProps, mapDispatchToProps)(WareHouseCampaignWise); diff --git a/PerformicsSrc/src/screens/WareHousePaidVi.js b/PerformicsSrc/src/screens/WareHousePaidVi.js new file mode 100644 index 0000000..b93e6e5 --- /dev/null +++ b/PerformicsSrc/src/screens/WareHousePaidVi.js @@ -0,0 +1,3294 @@ +import React, { useState, useEffect, useRef } from "react"; +import Container from "../components/container"; +import { useRoute } from "@react-navigation/native"; +import { globalStyles, customStyles, GetPageTheme } from "../styles/Global"; +import { AppState, StatusBar, Image, TextInput, View, Text, ScrollView, TouchableOpacity, Platform, PermissionsAndroid, FlatList, Alert, Animated, KeyboardAvoidingView, Keyboard } from "react-native"; +import { ReactReduxContext, connect, useSelector, useDispatch } from "react-redux"; +import { mapStateToProps, mapDispatchToProps } from "../reducers/contextProvider"; +import SQLite from "react-native-sqlite-2"; +import { notify } from "../components/notify"; +import moment from "moment"; +import { getDownloadJson, getKPIFields, marktext1, marktext2, resizeImage, restore_ImageWithMetaData, validateNumber } from "../controller/functions"; +import { get_item, set_item, clear_item } from "../components/localStorage"; +import { version, sloganline, appname, testurl, db, colors_Arr, common_ImagePath, ImageFolderPath, HierarchyTbls } from "../constants/constants"; +import CustomHeader from "../components/customHeader"; +import { AntDesign, Entypo, FontAwesome, Fontisto, Ionicons, MaterialCommunityIcons } from "../components/icons"; +import CustomLoader from "../components/CustomLoader"; +import LinearGradient from "react-native-linear-gradient"; +import { AppTables } from "../constants/tableConstants"; + +import * as RNFS from "react-native-fs"; +import GradientButton from "../components/gradientButton"; +import addImg from "../assets/performics/add_image.svg"; +import CustomModal from "../components/CustomModal"; +import { Q_getpaidvisibility } from "../constants/ConstantQueries"; +import { Picker } from "@react-native-picker/picker"; +import { ConfirmSaveAlert } from "../components/alert"; +import ModalSelector from "react-native-modal-selector"; +import { CustomPicker, CustomPicker2 } from "../components/CustomPicker"; +import CustomCamera from "../components/Camera"; +import ImageViewer from "react-native-image-zoom-viewer"; +import DateTimePicker from "@react-native-community/datetimepicker"; +import CheckBox from "@react-native-community/checkbox"; + +import cameraImg from "../assets/performics/camera_front_image.svg"; +import MultiSelect from "react-native-multiple-select"; +import CameraImg3 from "../assets/performics/camera_tick.svg"; +import CameraImg2 from "../assets/performics/camera_icon.svg"; +import CameraImg4 from "../assets/performics/camera_asterisk.svg"; +import CameraImg5 from '../assets/image/astrickcamera.svg' + +function WareHousePaidVi(props) { + const route = useRoute(); + const ST = props.StaticText || {}; + + // get all theme styles acc to current theme set + const PageTheme = GetPageTheme(props.DarkMode, route.name); + const customStyle = customStyles(props.DarkMode, route.name); + const animatedChoice = useRef(new Animated.Value(0)).current; + + const [processing, setProcessing] = useState(true); + const [loaderTitle, setLoaderTitle] = useState(); + const [isAdhocScreen, setIsAdhocScreen] = useState(false); + const [storeData, setStoreData] = useState({}); + const [StoreCameraAllow, setStoreCameraAllow] = useState(true); + const [currentMenu, setCurrentMenu] = useState({}); + const [rerenderdata, setrerenderdata] = useState(0); + const [rerenderdata2, setrerenderdata2] = useState(0); + const [rerenderdata3, setrerenderdata3] = useState(0); + const [rerenderdata4, setrerenderdata4] = useState(0); + + const [hasUnsavedChanges, setHasUnsavedChanges] = useState(false); + + const [WindowData, setWindowData] = useState([]); + const [reasons_list, setReasons_list] = useState([]); + + const [nonDeploymentReasonlist, setnonDeploymentReasonlist] = useState([]); + + const [DeploymentTypeHide, setDeploymentTypeHide] = useState(null); + const [NoCameraHide, setNoCameraHide] = useState(null); + + const [Windows, setWindows] = useState([]); + const [show_zoomImage, setShow_zoomImage] = useState(false); + const Show_zoomImageRef = useRef(false); + const [refImageIndex, setrefImageIndex] = useState(0); + const [zoomImageIndex, setzoomImageIndex] = useState(0); + const [showAlert, setShowAlert] = useState(false); + const [zoomImageUrl, setZoomImageUrl] = useState([]); + const [showCamera, setShowCamera] = useState(false); + const [showQRCamera, setShowQRCamera] = useState(false); + const [getImageProps, setGetImageProps] = useState({}); + const zoomView = useRef(null); + const [showRating, setShowRating] = useState(false); + const [RatingQtn, setRatingQtn] = useState({}); + const [RatingWindow, setRatingWindow] = useState({}); + const [RatingOrder, setRatingOrder] = useState([]); + + const [Products, setProducts] = useState([]); + const [DisplayList, setDisplayList] = useState([]); + const [toRemoveId, setToRemoveId] = useState(""); + const [toRemoveItem, setToRemoveItem] = useState({}); + const [showRemoveConfirm_M, setshowRemoveConfirm_M] = useState(false); + const [showRAllC_M, setShowRAllC_M] = useState(false); + const [searchedItem, setSearchedItem] = useState(""); + const [globalWindows, setGlobalWindows] = useState([]); + const [KPIFields, setKPIFields] = useState([]); + const [showSwitchCamera, setShowSwitchCamera] = useState(false); + const [ImageAllow, setImageAllow] = useState(false); + const [GridValue, setGridValue] = useState(false); + const [QREnable, setQREnable] = useState(false); + const [isOpen, setIsOpen] = useState(false); + + const [DataCleanModal, setDataCleanModal] = useState(false); + const [DataCleanAnim, setDataCleanAnim] = useState(""); + const [DataCleanItem, setDataCleanItem] = useState({}); + const [isPresentClean, setIsPresentClean] = useState(0); + + const [InputChange, setInputChange] = useState([]); + + const [SelectedImg, setSelectedImg] = useState(""); + const [showModal, setShowModal] = useState(false); + const [reCapImgModalObj, setReCapImgModalObj] = useState({}); + const [showImageSaveOp, setShowImageSaveOp] = useState(true); + const [ImgMadCount, setImgMadCount] = useState({ img1: 0, img2: 0 }); + const [AppStatus, setAppStatus] = useState(AppState.currentState); + const [QRqtnData, setQRqtnData] = useState({}); + //for Partial save + const [FilteredPromoValues, setFilteredPromoValues] = useState([]); + const [ShowCatWise, setShowCatWise] = useState(false); + const [CatData, setCatData] = useState(false); + const [ColId, setColId] = useState(""); + const [ColName, setColName] = useState(""); + + const hasUnsavedChangesRef = React.useRef(hasUnsavedChanges); + const WindowDataRef = React.useRef(WindowData); + const StoreIdRef = React.useRef(null); + const ScreenNameRef = React.useRef({}); + const PSGroupData = React.useRef(""); // Grouping data (Category/ SubCategory/ Brand ) for BG save fuunctionality with Partial Save Scenario + const BGPSAllow = React.useRef(false); + + + + // error field states + const [errorfield, setErrorField] = useState({}); + const [error, setError] = useState(false); + const [ImageLabel, setImageLabel] = useState([]); + const [ImageMandtory, setImageMandtory] = useState(false); + const [ImageMandatoryNo, setImageMandatoryNo] = useState(); + const [KPIConfig, setKPIConfig] = useState({}); + + + const inputRefs = useRef({}); + + const d1 = new Date(); + const d2 = moment(d1).format("MM/DD/YYYY"); + + const [ItemsInView, setItemsInView] = useState([]); + + const onViewableItemsChanged = ({ viewableItems }) => { + // Do stuff + setItemsInView(viewableItems); + }; + + // { + // viewabilityConfig: { + // // minimumViewTime: (props.RefImagePopUpTime||0)*1000, + // viewAreaCoveragePercentThreshold: 50 + // } + const FlatLConfCallbackPairs = useRef([ + { + viewabilityConfig: { itemVisiblePercentThreshold: 50 }, + onViewableItemsChanged, + }, + ]); + + useEffect(() => { + setLoaderTitle(ST.Loading + "..."); + let params = props.route.params ? props.route.params : {}; + let storeData1 = params.storeData || {}; + let menu1 = params.menu || {}; + let ShowCatWise1 = params.ShowCatWise != null ? params.ShowCatWise : false; + let CatData1 = params.CatData != null ? params.CatData : {}; + let isAdhoc = params.isAdhoc || false; + let InnerScreenConfig=params?.menu?.InnerScreenConfig || "" + + const obj = {}; + InnerScreenConfig && InnerScreenConfig?.split(",")?.forEach((value, index) => { + obj[value] = false; + }); + + + setKPIConfig(obj) + setIsAdhocScreen(isAdhoc); + setShowCatWise(ShowCatWise1); + setCatData(CatData1); + setStoreData(storeData1); + setCurrentMenu(menu1); + + let cameraAllow = storeData1.CameraAllow == "true" || storeData1.CameraAllow == 1 ? true : false; + setStoreCameraAllow(cameraAllow); + + StoreIdRef.current = storeData1.StoreId; + ScreenNameRef.current = { + BgscreenName: menu1.ScreenName, + BgMenuId: menu1.MenuId, + }; + + getData(storeData1, menu1, CatData1, ShowCatWise1,obj); + + const AppStateSubscription = AppState.addEventListener("change", (pro) => { + _handleAppStateChange(pro); + }); + const unsubscribe = props.navigation.addListener("beforeRemove", onBeforeRemove); + + return function cleanup() { + AppStateSubscription.remove(); + // AppState.removeEventListener('change', (pro)=>{ _handleAppStateChange(WindowData,pro)}); + return unsubscribe; + }; + }, []); + + const _handleAppStateChange = async (nextAppState) => { + if (nextAppState == "background" && hasUnsavedChangesRef.current == true) { + let newData = { + storeBGData: WindowDataRef.current, + menuName: ScreenNameRef.current && ScreenNameRef.current.BgscreenName, + StoreId1: StoreIdRef.current, + BgMenuID: ScreenNameRef.current && ScreenNameRef.current.BgMenuId, + visiteDate: d2, + BGPSAllow: BGPSAllow.current, + PSGroupData: PSGroupData.current, + }; + let WindowsStr = JSON.stringify(newData); + + await set_item("storeData", WindowsStr); + } + }; + + useEffect(() => { + const unsubscribe = props.navigation.addListener("beforeRemove", onBeforeRemove); + return unsubscribe; + }, [hasUnsavedChanges]); + + useEffect(() => { + const unsubscribe = props.navigation.addListener("beforeRemove", onBeforeRemove); + return unsubscribe; + }, [showCamera]); + + useEffect(() => { + const unsubscribe = props.navigation.addListener("beforeRemove", onBeforeRemove); + return unsubscribe; + }, [showQRCamera]); + + useEffect(() => { + const unsubscribe = props.navigation.addListener("beforeRemove", onBeforeRemove); + return unsubscribe; + }, [show_zoomImage]); + + function onBeforeRemove(e) { + if (showCamera == true || showQRCamera == true) { + e.preventDefault(); + setShowCamera(false); + setShowQRCamera(false); + } else if (Show_zoomImageRef.current == true) { + e.preventDefault(); + UpdateShow_zoomImageRef(false); + } else { + if (hasUnsavedChanges == true) { + e.preventDefault(); // Prevent default behavior of leaving the screen + onRemoveScreen(e); + } else { + return; + } + } + } + + function BgUnsavedChanges(val) { + hasUnsavedChangesRef.current = val; + setHasUnsavedChanges(val); + } + + function BgWindowData(val) { + WindowDataRef.current = val; + setWindowData(val); + } + + function UpdateShow_zoomImageRef(val) { + Show_zoomImageRef.current = val; + setShow_zoomImage(val); + } + + function onRemoveScreen(e) { + Alert.alert("", ST.Doyoureallywanttoexitthescreen, [ + { + text: ST.Cancel, + onPress: () => { }, + style: "cancel", + }, + { + text: ST.OK, + onPress: async () => { + // setHasUnsavedChanges(false); + BgUnsavedChanges(false); + await clear_item("storeData"); + props.navigation.dispatch(e.data.action); + }, + }, + ]); + } + + function _OpenCaptureImage_Modal(img) { + const isImageCap = img != "" || img != null ? true : false; + let { window, splitItem, splitItemIndex, cameraType } = reCapImgModalObj; + let camera2Label = (window && window.PromoImage2Lable) || ""; + return ( + + {isImageCap && ( + + + + + { + openCamera(window, splitItem, splitItemIndex, null,cameraType); + }} + > + + + + {!showImageSaveOp && ( + { + cancelImage(false); + }} + > + {ST.Close} + + )} + + )} + + ); + } + + async function getData(storeData1, menu1, CatData1 = {}, ShowCatWise1 = false,objConfig={}) { + try { + let { StoreId, ChainId, StateId, StoreTypeId } = storeData1; + + let AllKPIFields = await getKPIFields(menu1); + setKPIFields(AllKPIFields); + + // set switch camera flag as defined in mapping menu flag (if exists) + let SwitchingCameraI = AllKPIFields?.findIndex((i) => i.KPIFieldName == "SwitchingCamera"); + let SwitchingCameraObj = SwitchingCameraI >= 0 ? AllKPIFields[SwitchingCameraI] : {}; + let SwitchingCamera = SwitchingCameraI >= 0 ? SwitchingCameraObj["KPIFieldEnable"] : false; + setShowSwitchCamera(SwitchingCamera); + + + let CameraAllow = AllKPIFields?.findIndex((i) => i.KPIFieldName == (objConfig?.ImageAllow==false? "PrimaryImageAllow":"ImageAllow")); + let CameraAllowObj = CameraAllow >= 0 ? AllKPIFields[CameraAllow] : {}; + let CameraSplitNo=CameraAllowObj?.KPIFieldDisplayName || 0 + let CameraSplitArr=CameraAllowObj?.KPIType?.split(",") || [] + let CameraAllowI = CameraAllow >= 0 ? CameraAllowObj["KPIFieldEnable"] : false; + setImageLabel(CameraSplitArr) + setImageAllow(CameraAllowI); + + let DeploymentTypeH = AllKPIFields?.find((i) => i.KPIFieldName == "DeploymentTypeHide"); + + let DeploymentTypeHArr = DeploymentTypeH?.KPIType?.split(":"); + let DeploymentTypeHMenu = DeploymentTypeHArr?.length >0? DeploymentTypeHArr[DeploymentTypeHArr?.length-1]:null; + setDeploymentTypeHide(DeploymentTypeHMenu||null); + + let NoCameraHideH = AllKPIFields?.find((i) => i.KPIFieldName == "NoCameraHide"); + let NoCameraHideHArr = NoCameraHideH?.KPIType?.split(":"); + let NoCameraHideHMenu = NoCameraHideHArr?.length >0? NoCameraHideHArr[NoCameraHideHArr?.length-1]:null; + setNoCameraHide(NoCameraHideHMenu||null); + + let DeploymentType = AllKPIFields?.find((i) => i.KPIFieldName == "DeploymentType"); + let DeploymentTypeArr = DeploymentType?.KPIType?.split(","); + let DeploymentTypeArrObj=DeploymentTypeArr.map(item =>{return({"KPIType":item})}) + setReasons_list(DeploymentTypeArrObj||[]); + + + let ImageMandatory = AllKPIFields?.find((i) => i.KPIFieldName == (objConfig?.ImageMandatory==false? "PrimaryImageMandatory" :"ImageMandatory")); + let ImageMandatoryFlage = ImageMandatory?.KPIFieldEnable || false + let ImageMandatoryNo = ImageMandatoryFlage ? ImageMandatory?.KPIFieldDisplayName : 0 + setImageMandtory(ImageMandatoryFlage); + setImageMandatoryNo(ImageMandatoryNo) + + // let DeploymentTypeArr = DeploymentType?.KPIFieldEnable || + // let DeploymentTypeArrObj=DeploymentTypeArr.map(item =>{return({"KPIType":item})}) + // setReasons_list(DeploymentTypeArrObj||[]); + + let isSpecificMapIndex=AllKPIFields.findIndex(i=>i.KPIFieldName=='SpecificMapping') + let isSpecificMapKPIObj=isSpecificMapIndex>=0?AllKPIFields[isSpecificMapIndex]:{}; + let isSpecificMappingEnable=isSpecificMapIndex>=0?isSpecificMapKPIObj['KPIFieldEnable']:false; + + + let { PSAllow, PSTableName } = menu1; + PSTableName = PSTableName != null ? PSTableName : ""; + PSAllow = PSAllow != null ? PSAllow : false; + + let idCol = "", + nameCol = ""; + + if (PSTableName.toLowerCase() == HierarchyTbls.Master_Category.toLowerCase()) { + (idCol = "CategoryId"), (nameCol = "CategoryName"); + } else if (PSTableName.toLowerCase() == HierarchyTbls.Master_Brand.toLowerCase()) { + (idCol = "BrandId"), (nameCol = "BrandName"); + } else { + (idCol = "SubCategoryId"), (nameCol = "SubCategoryName"); + } + let IdVal = CatData1[idCol]; + let NameVal = CatData1[nameCol]; + + let FilteredIds=[]; + if(ShowCatWise1){ + FilteredIds=await getWindowFilterIds(idCol,IdVal,storeData1,false,menu1); + } + setFilteredPromoValues(FilteredIds); + + + let inputChangeFlag = [], + storeBGData1 = [], + bgStoreJson = {}, + isBgDataExists = false; + + //storeBGData check + let windData = await get_item("storeData"); + if (windData != null && windData != "") { + let StoreJson = JSON.parse(windData); + let { storeBGData, menuName, StoreId1, BgMenuID, visiteDate } = StoreJson; + if (storeBGData.length > 0 && menuName == menu1.ScreenName && StoreId1 == StoreId && menu1.MenuId == BgMenuID && visiteDate == d2) { + isBgDataExists = true; + storeBGData1 = storeBGData; + bgStoreJson = StoreJson; + WindowDataRef.current = storeBGData; + setWindowData(storeBGData); + BgUnsavedChanges(true); + } + } + + // call this after storeBGData check + if (PSAllow) { + // if Partial save is allowed then add the currently active category or group in BG var + BGPSAllow.current = true; + PSGroupData.current = CatData1; + } + + await db.transaction(async function (txn) { + let q3=`Select ReasonId,Reason,IsRemarkTaken From Master_WarehouseNonDeployReason WHERE MenuId='${menu1.MenuId}' `; + console.log("reasoncheck---",q3) + await txn.executeSql(q3,[],async function (txn2, txnres2) { + if(txnres2.rows.length>0){ + let arr=[]; + for(var i=0;i 0) { + let arr = []; + let images = [], + allWindowsData = []; + + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + let isPresent = (data.IsPresent == "1" || data.IsPresent == 1 || data.WhDisable== "true" ||data.WhDisable==1)? 1 : 0; + let WhDisable = ( data.WhDisable== "true" ||data.WhDisable==1) ? 1 : 0; + + if (isBgDataExists) { + let storeBgIndex = storeBGData1.findIndex((i) => i.ItemId == data.ItemId ); + // && i.QuestionCategoryId == data.ItemCategoryId + let storeBgObj = storeBgIndex >= 0 ? storeBGData1[storeBgIndex] : {}; + isPresent = storeBgObj.isPresent == "1" || storeBgObj.isPresent == 1 ? 1 : 0; + } + + let animatedChoice = new Animated.Value(isPresent); + let animatedHeight = new Animated.Value(450); + data.animatedChoice = animatedChoice; + data.animatedHeight = animatedHeight; + + + // data.NoOfSplit = parseInt(data.NoOfSplit); + data.NoOfSplit = parseInt(CameraSplitNo); + let NoOfSplit = Number(CameraSplitNo); + + let isStockReq = data.VisibilityElementStockRequired == "true" || data.VisibilityElementStockRequired == 1 ? 1 : 0; + + let imgObj = { + imgIndex: i + 1, + url: data.VisibilityRefImage, + props: {}, + }; + images.push(imgObj); + + + let WindowSplits = CameraAllowI ? await getWindowSplits(CameraSplitArr, data, storeData1, menu1,ImageMandatoryNo) :[]; + + let WQr = await getWindowQuestions(data, storeData1, menu1); + let WindowQuestions = WQr["WindowQuestions"] || []; + console.log("WindowQuestions----",WindowQuestions) + let WindowQA = WQr["WindowQA"] || {}; + let WSd = { WStocks: [], WStocksData: [] }; + let WStocks = WSd["WStocks"] || []; + let WStocksData = WSd["WStocksData"] || []; + let isAllChecked = WSd["isAllChecked"] != null ? WSd["isAllChecked"] : 0; + + let isNAImageAvl = data.VisibilityNotExistCamera == "true" || data.VisibilityNotExistCamera == 1 ? 1 : 0; + let NAImage1 = data.PVisNAImage != null ? data.PVisNAImage : ""; + let NAImage1Path = NAImage1 != "" ? "file://" + ImageFolderPath + menu1.ScreenName + "/" + NAImage1 : ""; + let showRsnRemark = data.SHOW_RSN_REMARK == "1" || data.SHOW_RSN_REMARK == 1 ? true : false; + let windowDataObj = { + ItemId: data.ItemId, + ItemQuestionId: data.ItemQuestionId, + WindowSplits: WindowSplits, + WindowQA: WindowQA, + WStocksData: WStocksData, + NAImage1: NAImage1, + NAImage1Path: NAImage1Path, + KpiTypId: data.Id, + KPIType: data.KPIType, + ReasonId: data.ReasonId, + Reason: data.Reason, + PosQty: data.PosQty || "", + isPresent: isPresent, + WhDisable:WhDisable, + StockInHand:data?.StockInHand||0, + TodayDeploy:data?.TodayDeploy||0, + isAllSKUChecked: isAllChecked, + remark: data.Remark != null ? data.Remark : "", + showOtherText: showRsnRemark + }; + data["WindowQuestions"] = WindowQuestions; + data["WindowStocks"] = WStocks; + let changesFlag = { + ItemId: data.ItemId, + ItemQuestionId: data.QuestionCategoryId, + Flag: data.WHRESHeaderId != null ? true : false, + }; + inputChangeFlag.push(changesFlag); + arr.push(data); + + allWindowsData.push(windowDataObj); + + if (i == txnres2.rows.length - 1) { + if (!isBgDataExists) { + BgWindowData(allWindowsData); + } + setInputChange(inputChangeFlag); + setWindows(arr); + setGlobalWindows(arr); + setZoomImageUrl(images); + setProcessing(false); + } + } + } else { + setProcessing(false); + notify("No data found!"); + } + }, + function (txnE, txnerr) { + console.log(txnerr); + setProcessing(false); + } + ); + }); + } catch (err) { + console.log(err); + } + } + + async function getWindowFilterIds(idCol, IdVal, storeData1, isSpecificMappingEnable, menu1 = {}) { + let AllIds = []; + let { StoreId } = storeData1; + let { MenuId } = menu1; + + let tbname2 = isSpecificMappingEnable ? "Mapping_StoreVisibilitySpecific" : "Mapping_StoreVisibility"; + + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + let join = ` inner join ${tbname2} s on w.VisibilityDefinitionId=s.VisibilityDefinitionId `; + let q = `Select w.* from Master_VisibilityDefinition w ${join} where s.StoreId='${StoreId}' and w.MenuId='${MenuId}' `; + await txn.executeSql( + q, + [], + async function (txn2, txnres) { + if (txnres.rows.length > 0) { + let Wind_data = txnres.rows.item(0); + let { VisibilityTable } = Wind_data; + VisibilityTable = VisibilityTable != null ? VisibilityTable : ""; + + let filterIdsCol = "", + filterNamesCol = ""; + if (VisibilityTable.toLowerCase() == HierarchyTbls.Master_Category.toLowerCase()) { + (filterIdsCol = "CategoryId"), (filterNamesCol = "CategoryName"); + } else if (VisibilityTable.toLowerCase() == HierarchyTbls.Master_Brand.toLowerCase()) { + (filterIdsCol = "BrandId"), (filterNamesCol = "BrandName"); + } else if (VisibilityTable.toLowerCase() == HierarchyTbls.Master_Product.toLowerCase()) { + (filterIdsCol = "ProductId"), (filterNamesCol = "ProductName"); + } else { + (filterIdsCol = "SubCategoryId"), (filterNamesCol = "SubCategoryName"); + } + + let FIdsQ = `Select distinct p.${filterIdsCol},p.${filterNamesCol} from Product_Master p where (p.${idCol}='${IdVal}' or p.${idCol}= ${IdVal}) `; + + await txn.executeSql( + FIdsQ, + [], + async function (txn2, txnres2) { + if (txnres.rows.length > 0) { + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + let id_value = data[filterIdsCol]; + AllIds.push(id_value); + if (i == txnres2.rows.length - 1) { + resolve(AllIds); + } + } + } else { + resolve([]); + } + }, + function (txnE, txnerr) { + console.log(txnerr); + resolve(AllIds); + } + ); + } else { + resolve(AllIds); + } + }, + function (txnE, txnerr) { + console.log(txnerr); + resolve(AllIds); + } + ); + }); + }) + .then((val) => { + return val; + }) + .catch((err) => { + console.log(err); + return AllIds; + }); + } + + async function getWindowSplits(NoOfSplit, window, storeData1, menu1,ImageMandatoryNo) { + let WindowSplits_def = []; + for (var s=0; s { + db.transaction(async function (txn) { + let q = `select * from ${AppTables.WAREHOUSE_IMAGES} where WAREHS_HEADER_ID='${window.WHRESHeaderId}' and STORE_ID='${storeData1.StoreId}' `; + + await txn.executeSql( + q, + [], + async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + let arr = []; + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + let isImage1 = window.VisibilityImage1 == "true" || window.VisibilityImage1 == 1 ? 1 : 0; + let isImage2 = window.VisibilityImage2 == "true" || window.VisibilityImage2 == 1 ? 1 : 0; + + let Image1 = data.IMAGE1 != null && data.IMAGE1 != "" ? "file://" + ImageFolderPath + menu1.ScreenName + "/" + data.IMAGE1 : ""; + let Image2 = isImage2 == 1 && data.IMAGE2 != null && data.IMAGE2 != "" ? "file://" + ImageFolderPath + menu1.ScreenName + "/" + data.IMAGE2 : ""; + // let obj = { + // Image1Name: data.IMAGE1, + // Image1: Image1, + // Image2Name: data.IMAGE2, + // Image2: Image2, + // img1Required: true, + // img2Required: true, + // }; + let obj = { + ImageName: data.IMAGE1, + Image: Image1, + ImageLable: "", + ImageLable: NoOfSplit[i], + // imgRequired: s < ImageMandatoryNo + imgRequired: false + }; + arr.push(obj); + + if (i == txnres2.rows.length - 1) { + resolve(arr); + } + } + } else { + resolve(WindowSplits_def); + } + }, + function (txnE, txnerr) { + console.log(txnerr); + resolve(WindowSplits_def); + } + ); + }); + }) + .then((val) => { + return val; + }) + .catch((err) => { + console.log(err); + return WindowSplits_def; + }); + } + + async function getWindowQuestions(window, storeData1, menu1) { + // console.log("windowww", window) + let obj = { WindowQA: {}, WindowQuestions: [] }; + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + var q = "", + selectlist = "", + join = "", + join2 = ""; + + //get data from masters with saved data if any + // selectlist=` DISTINCT q.QUESTION_ID as ItemQuestionId,q.QUESTION_CODE as VisibilityQuestionCode,wq.VisibilityQuestionName,wq.QuestionType,wq.ItemShowCamera,wq.VQCameraMandatory,wq.VQLengthValidationRequired,wq.VQMinimumChar,wq.VQMaximumChar,wq.VQDecimalPoint,wq.VQDateRangeMin,wq.VQDateRangeMax,wq.VQVoiceLengthInMinutes,wq.VQDefaultQuestionEnable,q.ANSWER as Answer,q.ANSWER_ID as AnswerId,q.MULTI_OPTIONS_IDS as multi_op_ids,q.IMAGE_ALLOW1 as VAShowCamera,q.IMAGE1 as Image1 `; + // selectlist = ` DISTINCT wq.ItemQuestionId,wq.ItemQuestionCode,wq.ItemQuestionName,wq.QuestionType,wq.ItemShowCamera,wq.ItemCameraMandatory,wq.ItemLengthValidationRequired,wq.ItemMinimumChar,wq.ItemMaximumChar,wq.ItemDecimalPoint,wq.ItemDateRangeMin,wq.ItemDateRangeMax,wq.ItemVoiceLengthInMinutes,wq.ItemDefaultQuestionEnable,(CASE WHEN q.QUESTION_ID is not null THEN 1 ELSE 0 END) isInserted,q.IS_DISABLED,q.ANSWER as Answer,q.ANSWER_ID as AnswerId,q.MULTI_OPTIONS_IDS as multi_op_ids,q.IMAGE_ALLOW1 as VAShowCamera,q.IMAGE1 as Image1 `; + + // selectlist = ` DISTINCT wq.ItemQuestionId,wq.ItemQuestionCode,wq.ItemQuestionName,wq.QuestionType,wq.ItemShowCamera,wq.ItemCameraMandatory,wq.ItemLengthValidationRequired,wq.ItemMinimumChar,wq.ItemMaximumChar,wq.ItemDecimalPoint,wq.ItemDateRangeMin,wq.ItemDateRangeMax,wq.ItemVoiceLengthInMinutes,wq.ItemDefaultQuestionEnable `; + // // join2=` Left Outer Join ${AppTables.PAIDVIS_CHILD_DATA} q on wq.ItemQuestionId=q.QUESTION_ID and q.STORE_ID='${storeData1.StoreId}' and q.PVIS_DEFINITION_ID='${window.VisibilityDefinitionId}' and q.PVIS_ID='${window.VisibilityId}' and q.VISIT_DATE='${d2}'`; + // join = ` inner join Mapping_WarehouseItemQuestion mq on mq.ItemQuestionId = wq.ItemQuestionId `; + // q = `select ${selectlist} from Master_WarehouseItemQuestion wq ${join} where wq.QuestionCategoryId='${window.ItemCategoryId}'`; + // console.log("nnn", q) + // q=`select ${selectlist} from Master_WarehouseItemQuestion wq ${join} where mq.VisibilityDefinitionId='${window.VisibilityDefinitionId}' order by wq.VisibilityQuestionSequence`; + + selectlist = ` DISTINCT wq.ItemQuestionId,wq.ItemQuestionCode,wq.ItemQuestionName,wq.QuestionType,wq.ItemAnswerShowCamera,wq.ItemAnswerCameraMandatory,wq.ItemLengthValidationRequired,wq.ItemMinimumChar,wq.ItemMaximumChar,wq.ItemDecimalPoint,wq.ItemDateRangeMin,wq.ItemDateRangeMax,wq.ItemVoiceLengthInMinutes,wq.ItemDefaultQuestionEnable,(CASE WHEN q.QUESTION_ID is not null THEN 1 ELSE 0 END) isInserted,q.IS_DISABLED,q.ANSWER as Answer,q.ANSWER_ID as AnswerId,q.MULTI_OPTIONS_IDS as multi_op_ids,q.IMAGE_ALLOW1 as ItemAnswerShowCamera,q.IMAGE1 as Image1 `; + join2 = ` Left Outer Join ${AppTables.WAREHOUSE_CHILD_DATA} q on wq.ItemQuestionId=q.QUESTION_ID and q.STORE_ID='${storeData1.StoreId}' and q.ITEM_ID='${window.ItemId}' and q.VISIT_DATE='${d2}'`; + join = ` inner join Mapping_WarehouseItemQuestion mq on mq.ItemQuestionId=wq.ItemQuestionId and mq.StoreTypeId='${storeData1.StoreTypeId}' and mq.ItemId='${window.ItemId}' `; + q = `select ${selectlist} from Master_WarehouseItemQuestion wq ${join} ${join2} where wq.ItemQuestionId=mq.ItemQuestionId `; + + await txn.executeSql( + q, + [], + async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + let arr = []; + let wqa_obj = {}; + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + let { isInserted } = data; + let answers = []; + data.ItemDefaultQuestionEnable = data.ItemDefaultQuestionEnable == 1 || data.ItemDefaultQuestionEnable == "true" ? true : false; + // data['isDisabled']=!data.ItemDefaultQuestionEnable; + if (isInserted) { + data["isDisabled"] = data.IS_DISABLED == true || data.IS_DISABLED == "true" ? true : false; + } else { + data["isDisabled"] = !data.ItemDefaultQuestionEnable; + } + if (data.QuestionType == "Multi choice list" || data.QuestionType == "Single choice list" || data.QuestionType == "Rating") { + answers = await getWindowAnswers(data); + if (data.QuestionType == "Rating") { + data.showRating = false; + } + } else if (data.QuestionType == "Date") { + data.showDatePicker = false; + } + data["Answers"] = answers; + + let id_key = data.ItemQuestionId + "_AnswerId"; + let ans_key = data.ItemQuestionId + "_Answer"; + let multi_key = data.ItemQuestionId + "_MultiOption"; + let date_key = data.ItemQuestionId + "_Date"; + let img_key = data.ItemQuestionId + "_ImagePath1"; + let imgname_key = data.ItemQuestionId + "_ImageName1"; + let rating_key = data.ItemQuestionId + "_Rating"; + + let showImageTag = data.ItemShowCamera == "true" || data.ItemShowCamera == 1; + + data.AnswerId != null ? (wqa_obj[id_key] = data.AnswerId) : ""; + data.Answer != null ? (wqa_obj[ans_key] = data.Answer) : ""; + + let selansid = data.AnswerId != null ? data.AnswerId : ""; + + if (data.QuestionType == "Multi choice list" && (selansid != "" || selansid === 0) && data.multi_op_ids != null) { + selansid = data.multi_op_ids ? data.multi_op_ids.split(",") : []; + wqa_obj[multi_key] = data.multi_op_ids; + } + + if ((data.QuestionType == "Single choice list" || data.QuestionType == "Multi choice list") && selansid != "" && selansid != null) { + if (data.Answers && data.Answers.length > 0) { + for (var k = 0; k < data.Answers.length; k++) { + let ansss = data.Answers[k]; + let isandImgAl = ansss.ItemAnswerShowCamera == 1 || ansss.ItemAnswerShowCamera == "true"; + if (data.QuestionType == "Single choice list" && isandImgAl && ansss.AnswerId == selansid) { + showImageTag = true; + } else if (data.QuestionType == "Multi choice list" && isandImgAl && selansid.indexOf(ansss.AnswerId) >= 0) { + showImageTag = true; + } + } + } + } + + if (showImageTag && data.Answer != null) { + let imgPath = (Platform.OS == "ios" ? "file://" : "") + ImageFolderPath + menu1.ScreenName + "/" + data.Image1; + wqa_obj[imgname_key] = data.Image1; + wqa_obj[img_key] = imgPath; + } + + if (data.QuestionType == "Date" && data.Answer != null) { + let dayonly = moment().format("DD"); + let actual_date = data.Answer ? data.Answer.split("/") : []; + let month = actual_date[0], + year = actual_date[1]; + let fulldate = month + "/" + dayonly + "/" + year; + wqa_obj[date_key] = fulldate; + } + + arr.push(data); + if (i == txnres2.rows.length - 1) { + obj["WindowQuestions"] = arr; + obj["WindowQA"] = wqa_obj; + resolve(obj); + } + } + } else { + resolve(obj); + } + }, + function (txnE, txnerr) { + console.log(txnerr); + resolve(obj); + } + ); + }); + }) + .then((val) => { + return val; + }) + .catch((err) => { + console.log(err); + return obj; + }); + } + + async function getWindowAnswers(qtn) { + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + var q = "", + selectlist = ""; + selectlist = ` DISTINCT ItemAnswerId as AnswerId,ItemAnswerName as Answer,ItemAnswerShowCamera,ItemAnswerCameraMandatory,ItemQuestionEnable,ItemQuestionDisable `; + q = `select ${selectlist} from Master_WarehouseItemQuestion where ItemQuestionId='${qtn.ItemQuestionId}' order by ItemAnswerSequence `; + + await txn.executeSql( + q, + [], + async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + let arr = []; + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + arr.push(data); + if (i == txnres2.rows.length - 1) { + resolve(arr); + } + } + } else { + resolve([]); + } + }, + function (txnE, txnerr) { + console.log(txnerr); + resolve([]); + } + ); + }); + }) + .then((val) => { + return val; + }) + .catch((err) => { + console.log(err); + return []; + }); + } + + async function getWindowStockData(window, storeData1, isInserted = false, AllKPIFields = []) { + let obj = { WStocks: [], WStocksData: [], isAllChecked: 0 }; + let { StateId, ChainId, StoreTypeId, StoreId } = storeData1; + + let isSpecificMapIndex = AllKPIFields?.findIndex((i) => i.KPIFieldName == "SpecificMapping"); + let isSpecificMapKPIObj = isSpecificMapIndex >= 0 ? AllKPIFields[isSpecificMapIndex] : {}; + let isSpecificMappingEnable = isSpecificMapIndex >= 0 ? isSpecificMapKPIObj["KPIFieldEnable"] : false; + + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + let checkassrt = window.VisibilityElementCheckAssortment == "true" || window.VisibilityElementCheckAssortment == 1 ? true : false; + let join = "", + join2 = "", + selectlist2 = "", + q2 = ""; + + //get data from masters with saved data if any + if (checkassrt) { + join2 = ` inner join Mapping_ProductAssortmentStorewise a on a.ProductId=s.VisibilityStockValue and a.StoreId='${StoreId}' `; + } + let join3 = ""; + if (isSpecificMappingEnable == true) { + join3 = ` Left Outer Join ${AppTables.PAIDVIS_STOCK_DATA} ps on s.VisibilityValue=ps.PVIS_STOCK_VALUE and ps.PVIS_DEFINITION_ID='${window.VisibilityDefinitionId}' and ps.STORE_ID='${storeData1.StoreId}' `; + selectlist2 = ` '0' as VisibilityStockDefinitionId, s.VisibilityDefinitionId,s.VisibilityTable as VisibilityStockTable,s.VisibilityField as VisibilityStockField,s.VisibilityValue as VisibilityStockValue,'' as VisibilityStockMBQ,s.ChildName as ProductName, ps.STOCK as Stock,IFNULL(ps.IS_PVIS_PRESENT,'') as isPVisPresent `; + q2 = `select ${selectlist2} from Mapping_StoreVisibilitySpecific s ${join2} ${join3} where s.VisibilityDefinitionId='${window.VisibilityDefinitionId}' and s.StoreId='${StoreId}' order by s.ChildName `; + } else { + join3 = ` Left Outer Join ${AppTables.PAIDVIS_STOCK_DATA} ps on s.VisibilityStockDefinitionId=ps.PVIS_STOCK_DEFINITION_ID and s.VisibilityStockValue=ps.PVIS_STOCK_VALUE and ps.PVIS_DEFINITION_ID='${window.VisibilityDefinitionId}' and ps.STORE_ID='${storeData1.StoreId}' `; + selectlist2 = ` s.VisibilityStockDefinitionId, s.VisibilityDefinitionId,s.VisibilityStockTable,s.VisibilityStockField,s.VisibilityStockValue,s.VisibilityStockMBQ,s.ProductName, ps.STOCK as Stock,IFNULL(ps.IS_PVIS_PRESENT,'') as isPVisPresent `; + q2 = `select ${selectlist2} from Master_VisibilityStockDefinition s ${join2} ${join3} where s.VisibilityDefinitionId='${window.VisibilityDefinitionId}' order by s.ProductName `; + } + + // console.log("isSpecificMappingEnable---",isSpecificMappingEnable,q2) + await txn.executeSql( + q2, + [], + async function (txn2, txnres2) { + console.log("Stock qty added:", txnres2.rows.length); + if (txnres2.rows.length > 0) { + let arr = [], + WStocksData = []; + let isAllChecked = 1; + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + // use index for refId instead of VisibilityStockDefinitionId as the condition does not work in case of isSpecificMappingEnable is true ( because all VisibilityStockDefinitionId are 0) + let refId = "input1_" + data.VisibilityDefinitionId + "_" + i; + + inputRefs.current[refId] = ""; + if (data.Stock != null) { + let stockData_obj = { + ProductId: data.VisibilityStockValue, + Stock: data.Stock, + isPVisPresent: data.isPVisPresent != null ? data.isPVisPresent : 0, + }; + WStocksData.push(stockData_obj); + } + if (data.isPVisPresent == null || data.isPVisPresent == 0 || data.isPVisPresent == "0" || data.isPVisPresent == "") { + isAllChecked = 0; + } + arr.push(data); + if (i == txnres2.rows.length - 1) { + obj["WStocks"] = arr; + obj["WStocksData"] = WStocksData; + obj["isAllChecked"] = isAllChecked; + resolve(obj); + } + } + } else { + resolve(obj); + } + + }, + function (txnE, txnerr) { + console.log(txnerr); + resolve(obj); + } + ); + }); + }) + .then((val) => { + return val; + }) + .catch((err) => { + console.log(err); + return obj; + }); + } + + async function focusToNext(WindowStocks, windowIndex, stockProd, index) { + console.log("focusToNext is call"); + console.log("WindowStocks", index + 1); + + if (index == WindowStocks.length - 1) { + return; + } + + try { + // inputRefs.current['input1_'+data.VisibilityDefinitionId+"_"+data.VisibilityStockDefinitionId]=''; + // use (index+1) instead of WindowStocks[index+1].VisibilityStockDefinitionId as the condition does not work in case of isSpecificMappingEnable is true ( because all VisibilityStockDefinitionId are 0) + console.log("next 1 call", "input1_" + WindowStocks[index + 1].VisibilityDefinitionId + "_" + (index + 1)); + let refIn2 = inputRefs.current["input1_" + WindowStocks[index + 1].VisibilityDefinitionId + "_" + (index + 1)]; + // let refIn2=inputRefs.current['input1_'+stockProd.WindowDefinitionId+'_'+stockProd.WindowStockDefinitionId]; + + if (refIn2 != null) { + refIn2.focus(); + } + } catch (err) { + console.log(err); + } + } + + async function getImage(imgdata) { + let type = getImageProps.type || ''; + let window = getImageProps.window || {}; + let splitItem = getImageProps.splitItem || {}; + let splitItemIndex = getImageProps.splitItemIndex || 0; + let qtn = getImageProps.qtn || {}; + let cameraType = getImageProps.cameraType != null ? getImageProps.cameraType : '1'; + + if (typeof imgdata == 'object' && imgdata.errorCode == 'camera_unavailable') { + notify(ST.Cameraunavailable); + } + else if (typeof imgdata == 'object' && imgdata.uri != null) { + const img = imgdata; + const imgurl = img.uri, imgWidth = img.width, imgHeight = img.ExtendedHeight; + let isImgFromGallery = img.fromGallery != null ? img.fromGallery : false; + let picture_clickedd = isImgFromGallery == true ? img.datetime : new Date(); + + let picture_clicked_time=moment(picture_clickedd).format('MM-DD-YYYY HH:mm:ss') + let picture_clicked_time_for_pic_name=moment(picture_clickedd).format('MMDDYYYY_HHmmss') + + console.log("time", picture_clicked_time); + console.log("time1", picture_clicked_time_for_pic_name); + let calculate_tym_date_for_filename = picture_clicked_time_for_pic_name; + let calculate_tym_date_over_img = picture_clicked_time; + + let filename = storeData.StoreId + '_' + window.ItemName + '_' + window.ItemId + '_' + (props.UserId || '') + '_STImg-' +calculate_tym_date_for_filename+ '.jpg'; + + let allData = WindowData; + let defData = { 'ItemId': window.ItemId, 'QuestionCategoryId': window.ItemQuestionId }; + const wind_index = allData.findIndex((i) => i.ItemId == window.ItemId && i.QuestionCategoryId == window.ItemQuestionId); + let wind = wind_index >= 0 ? allData[wind_index] : defData; + + + let camera1Label = window.VisibilityImage1Lable || ''; + let camera2Label = window.VisibilityImage2Lable || ''; + let extraLabel = ''; + if (cameraType == '2') { + var QD = wind.WindowQA || {}; + var image_key = qtn.ItemQuestionId + '_ImageName1'; + var image_key_path = qtn.ItemQuestionId + '_ImagePath1'; + QD[image_key] = filename; + extraLabel = 'Qtn Id: ' + qtn.ItemQuestionId; + } + else if (cameraType == '3') { + var image_key = 'NAImage1'; + var image_key_path = 'NAImage1Path'; + wind[image_key] = filename; + extraLabel = 'Not Exist'; + } else if (cameraType == '4') { + var WindowSplits = wind.WindowSplits || []; + var image_key = 'ImageName' + var image_key_path = 'Image' + splitItem[image_key] = filename; + extraLabel = splitItem?.ImageLable; + } + else { + var WindowSplits = wind.WindowSplits || []; + var image_key = type == '1' ? 'Image1Name' : 'Image2Name'; + var image_key_path = type == '1' ? 'Image1' : 'Image2'; + splitItem[image_key] = filename; + extraLabel = type == '1' ? camera1Label : camera2Label; + } + + const mark_text1 = calculate_tym_date_over_img; + const mark_text2 = 'Store Name:' + storeData.StoreName + ' | Store Id:' + storeData.StoreId + ' | User Id:' + storeData.EmpId + ' | ItemId :' + window.ItemId + (extraLabel != '' ? ' (' + extraLabel + ')' : '') + ' | Image Type: ' + currentMenu.MenuName + ' | Date:' +calculate_tym_date_over_img; + + let imagePath = `${ImageFolderPath + currentMenu.ScreenName}/${filename}`; + RNFS.copyFile(imgurl, imagePath) + .then(async (resn) => { + // render data with clicked image + let uri = 'file://' + imagePath; + console.log('image marker:', imgWidth, imgHeight, uri); + + if (cameraType == '2') { + QD[image_key_path] = uri; + wind.WindowQA = QD; + wind_index >= 0 ? allData[wind_index] = wind : allData.push(wind); + WindowDataRef.current = allData + setWindowData(allData); + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata3(!rerenderdata3); + } + else if (cameraType == '3') { + wind[image_key_path] = uri; + wind_index >= 0 ? allData[wind_index] = wind : allData.push(wind); + WindowDataRef.current = allData + setWindowData(allData); + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + else { + console.log('split image updated',splitItemIndex >= 0); + splitItem[image_key_path] = uri; + splitItemIndex >= 0 ? WindowSplits[splitItemIndex] = splitItem : WindowSplits.push(splitItem); + wind.WindowSplits = WindowSplits; + wind_index >= 0 ? allData[wind_index] = wind : allData.push(wind); + WindowDataRef.current = allData + setWindowData(allData); + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata2(!rerenderdata2); + } + + let objIndex = InputChange.findIndex(i => i.ItemId == window.ItemId && i.QuestionCategoryId == window.ItemQuestionId); + let winArr = [...InputChange] + winArr[objIndex].Flag = true + setSelectedImg(uri) + setInputChange(winArr) + + // add metdata then resize image and restored back to the imagePath + let restore_data = { "destFilePath": imagePath, "imgurl": imgurl, imgWidth, imgHeight, mark_text1, mark_text2 } + let is_restored = await restore_ImageWithMetaData(restore_data, imgdata); + console.log("image restored:", is_restored); + + }) + .catch(err => { + console.log('ERROR: image file write failed!!!'); + console.log(err.message, err.code); + }); + } + + } + + async function onQRScanned(imgdata) { + let qtn = QRqtnData.qtn || {}; + let window = QRqtnData.window || {}; + let QR_withValidChars = imgdata != null && imgdata != "" ? imgdata.replace(/["']/g, "") : ""; + let value = QR_withValidChars; //imgdata && imgdata[0] && imgdata[0].displayValue ? imgdata[0].displayValue :"" + setTextValue(value, qtn, window); + } + + function showQtnDatePicker(qtn, window, show = false) { + let allQtns = window.WindowQuestions || []; + let newqtnIndex = allQtns.findIndex((q) => q.ItemQuestionId == qtn.ItemQuestionId); + + if (newqtnIndex >= 0) { + let newqtn = allQtns[newqtnIndex]; + newqtn.showDatePicker = show; + allQtns[newqtnIndex] = newqtn; + window["WindowQuestions"] = allQtns; + let allWindows = Windows; + const winIndex = allWindows.findIndex((i) => i.ItemId == window.ItemId && i.ItemQuestionId == window.QuestionCategoryId) || {}; + allWindows[winIndex] = window; + setWindows(allWindows); + setGlobalWindows(allwindows); + if (show == true) setrerenderdata(!rerenderdata); + } + } + + async function openCamera(window, splitItem, splitItemIndex, type = "1", cameraType = "1", qtn = {}) { + setErrorField({}); + setError(false); + let GridAllow = false; + if (type == "1") { + // console.log("texxxt2..",window) + GridAllow = cameraType == "1" ? (type === "1" ? window.VisibilityImage1CameraGrid === "true" || window.VisibilityImage1CameraGrid == true : window.VisibilityImage1CameraGrid === "true" || window.VisibilityImage1CameraGrid == true) : false; + } else { + GridAllow = cameraType == "1" ? (type === "2" ? window.VisibilityImage2CameraGrid === "true" || window.VisibilityImage2CameraGrid == true : window.VisibilityImage2CameraGrid === "true" || window.VisibilityImage2CameraGrid == true) : false; + } + setGridValue(GridAllow); + setGetImageProps({ + window: window, + splitItem: splitItem, + splitItemIndex: splitItemIndex, + type: type, + cameraType: cameraType, + qtn: qtn, + }); + setShowCamera(true); + // props.navigation.navigate('CameraScreen',{'getImage':getImage,'cameraType':'back'}) + } + + async function onSubmitData() { + let isvalid = await validate(currentMenu); + + if (isvalid) { + Keyboard.dismiss(); + setShowAlert(true); + } + } + + async function saveData() { + // setHasUnsavedChanges(false); + BgUnsavedChanges(false); + setShowAlert(false); + setLoaderTitle(ST.SavingData + "..."); + setProcessing(true); + let d1n = new Date(); + let d3 = moment(d1n).format("MM/DD/YYYY"); + try { + let { StoreId,MenuId, ChainId, StateId, StoreTypeId } = storeData; + + // remove old data + let isDeleted = await removePreviousData(); + console.log("isDeleted:", isDeleted); + + await db.transaction(async function (txn) { + // add data + var values = "", + childV = "", + imageV = ""; + let updateQueries = []; + + for (const wi in globalWindows) { + const window = globalWindows[wi]; + let isImage1 = window.VisibilityImage1 == "true" || window.VisibilityImage1 == 1 ? 1 : 0; + let isImage2 = window.VisibilityImage2 == "true" || window.VisibilityImage2 == 1 ? 1 : 0; + let isNAImageAvl = window.VisibilityNotExistCamera == "true" || window.VisibilityNotExistCamera == 1 ? 1 : 0; + let isNAReasonEnable = window.VisibilityNotExistReasonEnable == "true" || window.VisibilityNotExistReasonEnable == 1 ? 1 : 0; + let isReasonEnable = window.VisibilityExistReasonEnable == "true" || window.VisibilityExistReasonEnable == 1 ? 1 : 0; + let isStockReq = window.VisibilityElementStockRequired == "true" || window.VisibilityElementStockRequired == 1 ? 1 : 0; + let WindowQuestions = window.WindowQuestions || []; + let WindowStocks = window.WindowStocks || []; + let CampaignId = window.CampaignId + + const wind = WindowData.find( + (i) => i.ItemId == window.ItemId + && + i.QuestionCategoryId == window.ItemQuestionId, + ); + let isPresent = wind.isPresent != null && wind.isPresent != "" ? wind.isPresent : "0"; + let WhDisable = wind.WhDisable != null && wind.WhDisable != "" ? wind.WhDisable : "0"; + let KpiTypId = wind.Id != null ? wind.Id : 0; + let KPIType = wind.KPIType != null ? wind.KPIType : ""; + let ReasonId = wind.ReasonId != null ? wind.ReasonId : 0; + let Reason = wind.Reason != null ? wind.Reason : ""; + let NAImage1 = wind.NAImage1 != null ? wind.NAImage1 : ""; + let NAImage1Path = wind.NAImage1Path != null ? wind.NAImage1Path : ""; + let remark = wind.remark != null ? wind.remark : ""; + let WindowSplits = wind.WindowSplits || []; + let QD = wind.WindowQA || {}; + let WStocksData = wind.WStocksData || []; + + let WAREHS_HEADER_ID = "WIND" + wi + (Math.floor(Math.random() * 1000) + 1); + let { ItemId, ItemCode, ItemName, ItemCategoryId, ItemCategory,MappingType } = window; + let showOtherText = wind.showOtherText == true || wind.showOtherText == "1" ? 1 : 0; + let PosQty = wind.PosQty != null ? wind.PosQty : ""; + let TodayDeploy = wind.TodayDeploy != null && wind.TodayDeploy != "" ? wind.TodayDeploy : 0; + + console.log("CampaignId in savedata:", window); + + if(WhDisable!=1){ + values += values != "" ? " , " : ""; + values += `('${WAREHS_HEADER_ID}','${StoreId}','${d3}','${ItemId}','${ItemName}','${MappingType}','${ItemCode}','${ItemCategoryId}','${ItemCategory}','${PosQty||0}','${isPresent}','${KpiTypId}','${KPIType}','${ReasonId||0}','${Reason}','${currentMenu.MenuId}','${CampaignId}','${NAImage1}','${TodayDeploy}')`; + + if ( KPIConfig?.HidePresentYesNo==false ? true : isPresent == 1) { + // updateQueries.push(`UPDATE Report_WarehouseStockInHand SET TodayDeploy='${PosQty || 0}' WHERE ItemId='${ItemId}'`); + + for (const qtnIndex in WindowQuestions) { + const qtn = WindowQuestions[qtnIndex]; + + let selansid = "", selanswer = "", selimg = "", showImageTag = false; + let id_key = qtn.ItemQuestionId + "_AnswerId"; + let ans_key = qtn.ItemQuestionId + "_Answer"; + let multi_key = qtn.ItemQuestionId + "_MultiOption"; + let date_key = qtn.ItemQuestionId + "_Date"; + let img_key = qtn.ItemQuestionId + "_ImagePath1"; + let imgname_key = qtn.ItemQuestionId + "_ImageName1"; + let rating_key = qtn.ItemQuestionId + "_Rating"; + let list_mcdata = []; + let isDisabled = qtn.isDisabled; + + let { ItemQuestionId, ItemQuestionCode, QuestionType, ItemAnswerShowCamera } = qtn; + let answer = QD[ans_key] || 0; + let answerId = QD[id_key] === 0 ? 0 : QD[id_key] || ""; + let multi_options_ids = QD[multi_key] || ""; + + if (qtn.QuestionType == "Number" || qtn.QuestionType == "Text" || qtn.QuestionType == "Decimal" || qtn.QuestionType == "Date") { + showImageTag = qtn.ItemAnswerShowCamera == 1 || qtn.ItemAnswerShowCamera == "true"; + } else if (qtn.QuestionType == "Single choice list" || qtn.QuestionType == "Multi choice list") { + if (qtn.Answers && qtn.Answers.length > 0) { + for (var i = 0; i < qtn.Answers.length; i++) { + let ansss = qtn.Answers[i]; + let isandImgAl = ansss.ItemAnswerShowCamera == "true" || ansss.ItemAnswerShowCamera == 1; + if (qtn.QuestionType == "Single choice list" && isandImgAl && ansss.AnswerId == answerId) { + showImageTag = true; + } else if (qtn.QuestionType == "Multi choice list" && isandImgAl && answerId.indexOf(ansss.AnswerId) >= 0) { + showImageTag = true; + } + } + } + } + + let Image1 = showImageTag == 1 ? QD[imgname_key] : ""; + + childV += childV != "" ? " , " : ""; + childV += ` ('${WAREHS_HEADER_ID}','${StoreId}','${d3}','${ItemId}','${ItemQuestionId}','${ItemQuestionCode}','${QuestionType}','${answer}','${answerId}','${multi_options_ids}','${Image1}','${showImageTag}','${d3}','${isDisabled}') `; + } + for (const splitItemIndex in WindowSplits) { + const splitItem = WindowSplits[splitItemIndex]; + let ImageName = splitItem["ImageName"] != null && splitItem["ImageName"] != "" ? splitItem["ImageName"] : ""; + let ImageLabel = splitItem["ImageLable"] != null && splitItem["ImageLable"] != "" ? splitItem["ImageLable"] : ""; + let Image2Name = splitItem["Image2Name"] != null && splitItem["Image2Name"] != "" ? splitItem["Image2Name"] : ""; + + Image2Name = isImage2 == 1 ? Image2Name : ""; + + imageV += imageV != "" ? " , " : ""; + imageV += ` ('${WAREHS_HEADER_ID}','${StoreId}','${d3}','${ItemId}','${ImageName}','${Image2Name}','${ImageLabel}','${d3}') `; + } + + }else if(NoCameraHide==currentMenu?.MenuId){ + for (const splitItemIndex in WindowSplits) { + const splitItem = WindowSplits[splitItemIndex]; + let ImageName = splitItem["ImageName"] != null && splitItem["ImageName"] != "" ? splitItem["ImageName"] : ""; + let ImageLabel = splitItem["ImageLable"] != null && splitItem["ImageLable"] != "" ? splitItem["ImageLable"] : ""; + let Image2Name = splitItem["Image2Name"] != null && splitItem["Image2Name"] != "" ? splitItem["Image2Name"] : ""; + + Image2Name = isImage2 == 1 ? Image2Name : ""; + + imageV += imageV != "" ? " , " : ""; + imageV += ` ('${WAREHS_HEADER_ID}','${StoreId}','${d3}','${ItemId}','${ImageName}','${Image2Name}','${ImageLabel}','${d3}') `; + } + } + } + } + + console.log("values:", values); + + let add_hdr_data = `INSERT INTO ${AppTables.WAREHOUSE_HDR_DATA} (WAREHS_HEADER_ID,STORE_ID,VISIT_DATE,ITEM_ID,ITEM_NAME,MAPPING_TYPE,ITEM_CODE,ITEM_CATEGORY_ID,ITEM_CATEGORY,ITEM_QTY,IS_PRESENT,KPITYPE_ID,KPITYPE,REASON_ID,REASON,MENU_ID,CAMPAIGN_ID,PVIS_NA_IMAGE,TODAY_DEPLOY) VALUES ${values} `; + let add_child_data = `INSERT INTO ${AppTables.WAREHOUSE_CHILD_DATA} (WAREHS_HEADER_ID,STORE_ID,VISIT_DATE,ITEM_ID,QUESTION_ID,QUESTION_CODE,QUESTION_TYPE,ANSWER,ANSWER_ID,MULTI_OPTIONS_IDS,IMAGE1,IMAGE_ALLOW1,ADDED_DATE,IS_DISABLED) VALUES ${childV} `; + let add_images_data = `INSERT INTO ${AppTables.WAREHOUSE_IMAGES} (WAREHS_HEADER_ID,STORE_ID,VISIT_DATE,ITEM_ID,IMAGE1,IMAGE2,IMAGE_LABEL,ADDED_DATE) VALUES ${imageV} `; + + let combinedUpdateQuery = updateQueries.join('; '); + // let updateReport=`Update Report_WarehouseStockInHand set TodayDeploy='${PosQty||0}' where ItemId='${StoreId}' `; + await txn.executeSql( + add_hdr_data, + [], + async function (txn2, txnres) { + console.log("st header data added"); + var isSplitImageAdded = true, + isStockAdded = true, + isChildAdded = true, + updatQ=true; + + if (imageV != "") { + isSplitImageAdded = await executeQuery(add_images_data); + } + + if (childV != "") { + isChildAdded = await executeQuery(add_child_data); + } + + if (combinedUpdateQuery != "") { + updatQ = await executeQuery(combinedUpdateQuery); + } + + if (!isSplitImageAdded) { + setProcessing(false); + notify("Cannot add warehouse images"); + } else if (!isChildAdded) { + setProcessing(false); + notify("Cannot add warehouse questions data"); + } else { + // clear store data in local storage to avoiding re-set data for the store + clear_item("storeData"); + setProcessing(false); + notify(`${currentMenu.MenuName} updated successfully`); + props.navigation.goBack(); + } + }, + function (txnE, txnerr) { + console.log(txnerr); + setProcessing(false); + notify("Cannot add warehouse data"); + } + ); + }); + } catch (err) { + console.log(err); + } + } + + async function removePreviousData() { + let { StoreId, ChainId, StateId, StoreTypeId } = storeData; + + let { PSAllow } = currentMenu; + let deleteOnlyCatData = ShowCatWise && PSAllow && FilteredPromoValues.length > 0; + + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + let sq = `Select * FROM ${AppTables.WAREHOUSE_HDR_DATA} WHERE STORE_ID='${StoreId}' and MENU_ID='${currentMenu.MenuId}' and VISIT_DATE='${d2}' `; + if (deleteOnlyCatData) { + let FilterIdsJoin = FilteredPromoValues.join(","); + sq += ` and PVIS_VALUE in (${FilterIdsJoin}) `; + } + await txn.executeSql( + sq, + [], + async function (txn2, txnres) { + if (txnres.rows.length > 0) { + let arr = []; + let isHdrDel = false, + isQtnsDel = false, + isImagesDel = false + + for (let i = 0; i < txnres.rows.length; i++) { + let data = txnres.rows.item(i); + let { WAREHS_HEADER_ID } = data; + arr.push(WAREHS_HEADER_ID); + if (i == txnres.rows.length - 1) { + let AllHdrIds = `'${arr.join("','")}'`; + + await txn.executeSql( + `DELETE FROM ${AppTables.WAREHOUSE_HDR_DATA} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' and WAREHS_HEADER_ID in (${AllHdrIds}) `, + [], + async function (txn2, txnres) { + console.log("window hdr data deleted"); + isHdrDel = true; + if (isHdrDel && isHdrDel && isImagesDel ) { + resolve(true); + } + }, + function (txnE, txnerr) { + console.log(txnerr); + } + ); + await txn.executeSql( + `DELETE FROM ${AppTables.WAREHOUSE_CHILD_DATA} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' and WAREHS_HEADER_ID in (${AllHdrIds}) `, + [], + async function (txn2, txnres) { + console.log("window child data deleted"); + isQtnsDel = true; + if (isHdrDel && isHdrDel && isImagesDel ) { + resolve(true); + } + }, + function (txnE, txnerr) { + console.log(txnerr); + } + ); + await txn.executeSql( + `DELETE FROM ${AppTables.WAREHOUSE_IMAGES} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' and WAREHS_HEADER_ID in (${AllHdrIds}) `, + [], + async function (txn2, txnres) { + console.log("window images data deleted"); + isImagesDel = true; + if (isHdrDel && isHdrDel && isImagesDel ) { + resolve(true); + } + }, + function (txnE, txnerr) { + console.log(txnerr); + } + ); + + } + } + } else { + resolve(true); + } + }, + function (txnE, txnerr) { + console.log(txnerr); + resolve(false); + } + ); + }); + }) + .then((val) => { + return val; + }) + .catch((err) => { + console.log("error:", err); + return false; + }); + } + + async function executeQuery(q) { + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + await txn.executeSql( + q, + [], + async function (txn2, txnres2) { + resolve(true); + }, + function (Etxn, txnerr) { + console.log(txnerr); + resolve(false); + } + ); + }); + }) + .then((val) => { + return val; + }) + .catch((err) => { + console.log(err); + return false; + }); + } + + async function validate(currentMenu) { + let isValid = true; + + let isListedSKUIndex = KPIFields.findIndex((i) => i.KPIFieldName == "ListedSKUCheckbox"); + let isListedSKUKPIObj = isListedSKUIndex >= 0 ? KPIFields[isListedSKUIndex] : {}; + let isListedSKUEnable = isListedSKUIndex >= 0 ? isListedSKUKPIObj["KPIFieldEnable"] : true; + + let ReasonEnableIndex = KPIFields.findIndex((i) => i.ScreenName == "WAREHOUSEDEPLOY" && i.KPIFieldName == "ReasonEnable"); + let ReasonEnableKPIObj = ReasonEnableIndex >= 0 ? KPIFields[ReasonEnableIndex] : {}; + let ReasonEnable = ReasonEnableIndex >= 0 ? ReasonEnableKPIObj["KPIFieldEnable"] : false; + + let MenuIdFromConfig = ReasonEnableIndex >= 0 ? ReasonEnableKPIObj["KPIType"] : null; + let menuId = MenuIdFromConfig && MenuIdFromConfig.split(":")[1]?.trim(); + + + function showError(obj, isErr) { + setErrorField(obj); + setError(isErr); + } + + return new Promise((resolve, reject) => { + for (const wi in globalWindows) { + const window = globalWindows[wi]; + let isImage1 = window.VisibilityImage1 == "true" || window.VisibilityImage1 == 1 ? 1 : 0; + let isImage2 = window.VisibilityImage2 == "true" || window.VisibilityImage2 == 1 ? 1 : 0; + let isNAImageAvl = window.VisibilityNotExistCamera == "true" || window.VisibilityNotExistCamera == 1 ? 1 : 0; + let isNAReasonEnable = window.VisibilityNotExistReasonEnable == "true" || window.VisibilityNotExistReasonEnable == 1 ? 1 : 0; + let isReasonEnable = window.VisibilityExistReasonEnable == "true" || window.VisibilityExistReasonEnable == 1 ? 1 : 0; + let isStockReq = window.VisibilityElementStockRequired == "true" || window.VisibilityElementStockRequired == 1 ? 1 : 0; + let StockQtyRequired = window.StockQtyRequired == "true" || window.StockQtyRequired == 1 ? 1 : 0; + let WindowQuestions = window.WindowQuestions || []; + let WindowStocks = window.WindowStocks || []; + + const wind = WindowData.find((i) => i.ItemId == window.ItemId && i.QuestionCategoryId == window.ItemQuestionId); + let isPresent = KPIConfig?.HidePresentYesNo==false ? true : (wind.isPresent != null && wind.isPresent != "" ? wind.isPresent : "0"); + let WhDisable = wind.WhDisable != null && wind.WhDisable != "" ? wind.WhDisable : "0"; + let KpiTypId = wind.Id != null ? wind.Id : ""; + let KPIType = wind.KPIType != null ? wind.KPIType : ""; + + let ReasonId = wind.ReasonId != null ? wind.ReasonId : ""; + let Reason = wind.Reason != null ? wind.Reason : ""; + + let PosQty = wind.PosQty != null ? wind.PosQty : ""; + let NAImage1 = wind.NAImage1 != null ? wind.NAImage1 : ""; + let NAImage1Path = wind.NAImage1Path != null ? wind.NAImage1Path : ""; + let remark = wind.remark != null ? wind.remark : ""; + let WindowSplits = wind.WindowSplits || []; + let QD = wind.WindowQA || {}; + let WStocksData = wind.WStocksData || []; + let showOtherText = wind.showOtherText != null ? wind.showOtherText : false; + let StockInHand = wind.StockInHand != null && wind.StockInHand != "" ? wind.StockInHand : 0; + + let errorobj = { EF_Window: window }; + if(WhDisable!=1){ + if (isPresent == "1") { + if (isReasonEnable == true && KpiTypId == "") { + errorobj["EF_NExistReason"] = "NExistReason"; + showError(errorobj, true); + notify(`${ST.Pleaseselectreasonfor} ${window.ItemName} `, "LONG"); + resolve(false); + return; + } + else if(KPIConfig?.DeploymentType==false ? false : KPIType==''){ + notify(`Please enter Deployment type for ${window.ItemName} `,'LONG'); + resolve(false);return; + } + else if(StockInHand!=0 && PosQty=='' && KPIType!="Already Deployed"){ + notify(`Please enter Deploy Qty for ${window.ItemName} `,'LONG'); + resolve(false);return; + } + else { + if (StoreCameraAllow && window.NoOfSplit > 0 && WindowSplits.length > 0) { + + for (const splitItemIndex in WindowSplits) { + const splitItem = WindowSplits[splitItemIndex]; + + let Image1Name = splitItem["Image"] != null && splitItem["Image"] != "" ? splitItem["Image"] : ""; + let imgRequired = splitItem["imgRequired"] || false; + // console.log("Image2Name", Image2Name, isImage2); + if ( Image1Name == "" && imgRequired) { + errorobj["EF_splitImage1"] = "splitImage1"; + errorobj["EF_splitItemIndex"] = splitItemIndex; + showError(errorobj, true); + notify(`${ST.Pleaseclickallimagesfor} ${window.ItemName}`, "LONG"); + resolve(false); + return; + } + } + } + + + if (WindowQuestions.length > 0) { + for (const qtnIndex in WindowQuestions) { + const qtn = WindowQuestions[qtnIndex]; + + let selansid = "", + selanswer = "", + selimg = "", + showImageTag = false; + let id_key = qtn.ItemQuestionId + "_AnswerId"; + let ans_key = qtn.ItemQuestionId + "_Answer"; + let multi_key = qtn.ItemQuestionId + "_MultiOption"; + let date_key = qtn.ItemQuestionId + "_Date"; + let img_key = qtn.ItemQuestionId + "_ImagePath1"; + let imgname_key = qtn.ItemQuestionId + "_ImageName1"; + let rating_key = qtn.ItemQuestionId + "_Rating"; + + let isDisabled = qtn.isDisabled; + + if (!isDisabled) { + let list_mcdata = []; + errorobj["EF_qtn"] = qtn; + + let isImgAllowed = qtn.ItemAnswerShowCamera == "true" || qtn.ItemAnswerShowCamera == 1; + let checkForAnsKey = qtn.QuestionType == "Decimal" || qtn.QuestionType == "Number" || qtn.QuestionType == "Text" || qtn.QuestionType == "Date" || qtn.QuestionType == "Rating" || qtn.QuestionType == "QR"; + + if (qtn.QuestionType == "Single choice list") { + selansid = QD[id_key]; + } else if (qtn.QuestionType == "Multi choice list") { + selansid = QD[multi_key] != null && QD[multi_key] != "" ? QD[multi_key].split(",") : []; + } + + if (qtn.QuestionType == "Multi choice list" && selansid.length <= 0) { + errorobj["EF_Qtn_MultiChoice"] = "Qtn_MultiChoice"; + showError(errorobj, true); + notify(`${ST.Pleaseselectoptionsfortherequiredfield} ${ST.In} ${window.ItemName}`, "SHORT"); + resolve(false); + return; + } else if (checkForAnsKey && (Object.keys(QD).indexOf(ans_key) < 0 || (Object.keys(QD).indexOf(ans_key) >= 0 && QD[ans_key] === ""))) { + errorobj["EF_Qtn_Date"] = "Qtn_Date"; + showError(errorobj, true); + let msg = + qtn.QuestionType == "Date" + ? `${ST.Pleasepickadatefortherequiredfield} ${ST.In} ${window.VisibilityName}` + : qtn.QuestionType == "Rating" + ? `${ST.Pleaseselectratingfortherequiredfield} ${ST.In} ${window.VisibilityName}` + : `${ST.Pleasefillalltherequiredfield} ${ST.In} ${window.VisibilityName}`; + notify(msg, "SHORT"); + resolve(false); + return; + } else if (Object.keys(QD).indexOf(id_key) < 0 || (Object.keys(QD).indexOf(id_key) >= 0 && QD[id_key] === "")) { + errorobj["EF_Qtn_Input"] = "Qtn_Input"; + showError(errorobj, true); + notify(`${ST.Pleasefillalltherequiredfield} ${ST.In} ${window.VisibilityName}`, "SHORT"); + resolve(false); + return; + } else if (isImgAllowed && (Object.keys(QD).indexOf(img_key) < 0 || (Object.keys(QD).indexOf(img_key) >= 0 && QD[img_key] === ""))) { + errorobj["EF_Qtn_Image"] = "Qtn_Image"; + showError(errorobj, true); + notify(`${ST.Pleaseaddimages} ${ST.In} ${window.ItemName}`, "SHORT"); + resolve(false); + return; + } else { + console.log("no condition found"); + } + + if (qtn.QuestionType == "Single choice list" || qtn.QuestionType == "Multi choice list") { + if (qtn.Answers && qtn.Answers.length > 0) { + for (var j = 0; j < qtn.Answers.length; j++) { + let ansss = qtn.Answers[j]; + let isandImgAl = ansss.ItemAnswerShowCamera == "true" || ansss.ItemAnswerShowCamera == 1; + if (qtn.QuestionType == "Single choice list" && isandImgAl && ansss.AnswerId == selansid) { + showImageTag = true; + } else if (qtn.QuestionType == "Multi choice list" && isandImgAl && selansid.indexOf(ansss.AnswerId) >= 0) { + showImageTag = true; + } + } + } + } + + if (showImageTag && (Object.keys(QD).indexOf(img_key) < 0 || (Object.keys(QD).indexOf(img_key) >= 0 && QD[img_key] === ""))) { + errorobj["EF_Qtn_Image"] = "Qtn_Image"; + showError(errorobj, true); + notify(`${ST.Pleaseaddimages} ${ST.In} ${window.ItemName}`, "SHORT"); + resolve(false); + return; + } + } + } + } + } + } else { + if (isNAReasonEnable == true && KpiTypId == "") { + errorobj["EF_NExistReason"] = "NExistReason"; + showError(errorobj, true); + notify(`${ST.Pleaseselectreasonfor} ${window.ItemName} `, "LONG"); + resolve(false); + return; + } + if (ReasonEnable == true && Reason == "" && menuId==currentMenu.MenuId) { + errorobj["EF_NExistReason"] = "NExistReason"; + showError(errorobj, true); + notify(`${ST.Pleaseselectreasonfor} ${window.ItemName} `, "LONG"); + resolve(false); + return; + } + else if (isNAReasonEnable == true && showOtherText == true && (wind.PosQty == null || wind.PosQty == "")) { + errorobj["EF_NExistRemark"] = "NExistRemark"; + showError(errorobj, true); + notify(`${ST.PleaseEnterRemarkFor} ${window.ItemName} `, "LONG"); + resolve(false); + return; + } else if (StoreCameraAllow && isNAImageAvl == true && NAImage1 == "") { + errorobj["EF_NExistImage"] = "NExistImage"; + showError(errorobj, true); + notify(`${ST.Pleaseclickimagefor} ${window.VisibilityName}`, "LONG"); + resolve(false); + return; + } + } + + if(NoCameraHide==currentMenu?.MenuId){ + if (StoreCameraAllow && window.NoOfSplit > 0 && WindowSplits.length > 0) { + + for (const splitItemIndex in WindowSplits) { + const splitItem = WindowSplits[splitItemIndex]; + + let Image1Name = splitItem["Image"] != null && splitItem["Image"] != "" ? splitItem["Image"] : ""; + let imgRequired = splitItem["imgRequired"] || false; + // console.log("Image2Name", Image2Name, isImage2); + if ( Image1Name == "" && imgRequired) { + errorobj["EF_splitImage1"] = "splitImage1"; + errorobj["EF_splitItemIndex"] = splitItemIndex; + showError(errorobj, true); + notify(`${ST.Pleaseclickallimagesfor} ${window.ItemName}`, "LONG"); + resolve(false); + return; + } + } + } + } + } + + if (wi == Windows.length - 1) { + resolve(true); + return; + } + } + }) + .then((val) => { + return val; + }) + .catch((err) => { + console.log(err); + return false; + }); + } + + function onselectionChange3(option, keyLbl, keyVal, otherData) { + setErrorField({}); + setError(false); + let item = otherData.window; + let allData = WindowData; + let defData = { + ItemId: item.ItemId, + QuestionCategoryId: item.ItemQuestionId, + }; + const win_index = allData.findIndex((i) => i.ItemId == item.ItemId && i.QuestionCategoryId == item.ItemQuestionId); + let wind = win_index >= 0 ? allData[win_index] || defData : defData; + wind[keyVal] = option.value; + wind[keyLbl] = option.label; + + if (keyLbl == "KPIType") { + let rsn_Index = reasons_list.findIndex((i) => i.Id == option.value); + + if (rsn_Index >= 0) { + let rsn = reasons_list[rsn_Index]; + let IsRemarkTaken = rsn.IsRemarkTaken == 1 || rsn.IsRemarkTaken == "1" ? true : false; + + if (IsRemarkTaken == true) { + wind["showOtherText"] = true; + } else { + wind["showOtherText"] = false; + } + } + wind["PosQty"] = ""; + } + else{ + if(keyLbl=='Reason'){ + let rsn_Index=nonDeploymentReasonlist.findIndex(i=>i.ReasonId==option.value); + + if(rsn_Index>=0){ + let rsn=nonDeploymentReasonlist[rsn_Index]; + let IsRemarkTaken=rsn.IsRemarkTaken==1 || rsn.IsRemarkTaken=='1' ?true:false; + + if(IsRemarkTaken==true){ + wind['showOtherText']=true; + } + else{ + wind['showOtherText']=false; + } + } + } + } + + win_index >= 0 ? (allData[win_index] = wind) : allData.push(wind); + // console.log("allData:", allData); + let objIndex = InputChange.findIndex((i) => i.ItemId == item.ItemId && i.QuestionCategoryId == item.ItemQuestionId); + let winArr = [...InputChange]; + winArr[objIndex].Flag = true; + + setInputChange(winArr); + WindowDataRef.current = allData; + setWindowData(allData); + // setHasUnsavedChanges(true); + BgUnsavedChanges(true); + setrerenderdata(!rerenderdata); + } + + async function onselectionChange(option, qtn, window) { + setErrorField({}); + setError(false); + let allData = WindowData; + let defData = { + ItemId: window.ItemId, + QuestionCategoryId: window.ItemQuestionId, + }; + const wind_index = allData.findIndex((i) => i.ItemId == window.ItemId && i.QuestionCategoryId == window.ItemQuestionId); + let wind = wind_index >= 0 ? allData[wind_index] : defData; + let data = wind.WindowQA || {}; + let id_key = qtn.ItemQuestionId + "_AnswerId"; + let ans_key = qtn.ItemQuestionId + "_Answer"; + data[id_key] = option.value; + data[ans_key] = option.label; + + wind["WindowQA"] = data; + wind_index >= 0 ? (allData[wind_index] = wind) : allData.push(wind); + let objIndex = InputChange.findIndex((i) => i.ItemId == window.ItemId && i.QuestionCategoryId == window.ItemQuestionId); + let winArr = [...InputChange]; + winArr[objIndex].Flag = true; + + setInputChange(winArr); + WindowDataRef.current = allData; + setWindowData(allData); + + let aq_ans = qtn.Answers != null ? qtn.Answers : []; + let ans_obj = aq_ans.find((i) => i.AnswerId == option.value) || {}; + let EQtns = ans_obj.ItemQuestionEnable != null && ans_obj.ItemQuestionEnable != "" ? ans_obj.ItemQuestionEnable.replace(" ", "").split(",") : []; + let DQtns = ans_obj.ItemQuestionDisable != null && ans_obj.ItemQuestionDisable != "" ? ans_obj.ItemQuestionDisable.replace(" ", "").split(",") : []; + + let sqtns = window.WindowQuestions || []; + + if (EQtns.length > 0) { + await enableQtns(sqtns, EQtns, DQtns, data, wind, wind_index, allData, window); + setrerenderdata(!rerenderdata); + } else if (DQtns.length > 0) { + await disableQtns(sqtns, DQtns, data, wind, wind_index, allData, window); + setrerenderdata(!rerenderdata); + } else { + // setHasUnsavedChanges(true); + BgUnsavedChanges(true); + setrerenderdata(!rerenderdata); + } + BgUnsavedChanges(true); + } + + async function disableQtns(sqtns, DQtns, data, wind = {}, wind_index = -1, allData = [], window = {}) { + if (DQtns.length > 0) { + new Promise.all( + DQtns.map((qid, q_index) => { + let s_qtnindex = sqtns.findIndex((i) => i.ItemQuestionId == qid) || {}; + let s_qtn = sqtns[s_qtnindex]; + if (s_qtn != null) { + s_qtn["isDisabled"] = true; + sqtns[s_qtnindex] = s_qtn; + let id_key = s_qtn.ItemQuestionId + "_AnswerId"; + let ans_key = s_qtn.ItemQuestionId + "_Answer"; + data[id_key] = 0; + data[ans_key] = ""; + + wind["WindowQA"] = data; + wind_index >= 0 ? (allData[wind_index] = wind) : allData.push(wind); + return false; + } else { + return false; + } + }) + ).then(async (val) => { + let allwindows = Windows; + let windowIndex = allwindows.findIndex((i) => i.QuestionCategoryId == window.ItemQuestionId && i.ItemId == window.ItemId); + if (windowIndex >= 0) { + window["WindowQuestions"] = sqtns; + allwindows[windowIndex] = window; + WindowDataRef.current = allData; + setWindowData(allData); + setWindows(allwindows); + setGlobalWindows(allwindows); + // setHasUnsavedChanges(true); + BgUnsavedChanges(true); + setrerenderdata(!rerenderdata); + } + }); + } + } + + async function enableQtns(sqtns, EQtns, DQtns, data, wind = {}, wind_index = -1, allData = [], window = {}) { + new Promise.all( + EQtns.map((qid, q_index) => { + let s_qtnindex = sqtns.findIndex((i) => i.ItemQuestionId == qid) || {}; + let s_qtn = sqtns[s_qtnindex]; + if (s_qtn != null) { + s_qtn["isDisabled"] = false; + sqtns[s_qtnindex] = s_qtn; + return false; + } else { + return false; + } + }) + ).then(async (val) => { + if (DQtns.length > 0) { + await disableQtns(sqtns, DQtns, data, wind, wind_index, allData, window); + } else { + let allwindows = Windows; + let windowIndex = allwindows.findIndex((i) => i.QuestionCategoryId == window.ItemQuestionId && i.ItemId == window.ItemId); + if (windowIndex > 0) { + window["WindowQuestions"] = sqtns; + allwindows[windowIndex] = window; + setWindows(allwindows); + setGlobalWindows(allwindows); + // setHasUnsavedChanges(true); + BgUnsavedChanges(true); + setrerenderdata(!rerenderdata); + } + } + }); + } + + async function setMultiSelectValue(selectedItems = [], qtn = {}, window = {}) { + setErrorField({}); + setError(false); + // console.log("setMultiSelectValue", selectedItems); + let id_key = qtn.ItemQuestionId + "_AnswerId"; + let ans_key = qtn.ItemQuestionId + "_Answer"; + let multi_key = qtn.ItemQuestionId + "_MultiOption"; + + let allData = WindowData; + let defData = { + ItemId: window.ItemId, + QuestionCategoryId: window.ItemQuestionId, + }; + const wind_index = allData.findIndex((i) => i.ItemId == window.ItemId && i.QuestionCategoryId == window.ItemQuestionId); + let wind = wind_index >= 0 ? allData[wind_index] : defData; + let obj = wind.WindowQA || {}; + obj[id_key] = 0; + obj[multi_key] = selectedItems.join(","); + let anss = []; + selectedItems.map((itemValue) => { + let ans = qtn.Answers.find((c1) => c1.AnswerId == itemValue); + if (ans.Answer) { + anss.push(ans.Answer); + } + }); + obj[ans_key] = anss.join(","); + // console.log("obj:", obj); + + wind["WindowQA"] = obj; + wind_index >= 0 ? (allData[wind_index] = wind) : allData.push(wind); + + let objIndex = InputChange.findIndex((i) => i.ItemId == window.ItemId && i.QuestionCategoryId == window.ItemQuestionId); + let winArr = [...InputChange]; + winArr[objIndex].Flag = true; + + setInputChange(winArr); + WindowDataRef.current = allData; + setWindowData(allData); + // setHasUnsavedChanges(true); + BgUnsavedChanges(true); + setrerenderdata(!rerenderdata); + } + + function setTextValue(value, qtn, window, type = "") { + if (value != "") { + let isValid = validateNumber(value, type); + if (!isValid) { + return; + } + } + + setErrorField({}); + setError(false); + let id_key = qtn.ItemQuestionId + "_AnswerId"; + let ans_key = qtn.ItemQuestionId + "_Answer"; + + let allData = WindowData; + let defData = { + ItemId: window.ItemId, + QuestionCategoryId: window.ItemQuestionId, + }; + const wind_index = allData.findIndex((i) => i.ItemId == window.ItemId && i.QuestionCategoryId == window.ItemQuestionId); + let wind = wind_index >= 0 ? allData[wind_index] : defData; + let obj = wind.WindowQA || {}; + + if (qtn.QuestionType == "Date") { + let date_key = qtn.ItemQuestionId + "_Date"; + let d = value != null ? new Date(value) : new Date(); + let mfdate = moment(d).format("MM/YYYY"); + showQtnDatePicker(qtn, window, false); + obj[id_key] = 0; + obj[ans_key] = mfdate; + obj[date_key] = moment(d).format("MM/DD/YYYY"); + } else { + obj[id_key] = 0; + obj[ans_key] = value; + } + + // console.log(value, obj); + wind["WindowQA"] = obj; + wind_index >= 0 ? (allData[wind_index] = wind) : allData.push(wind); + + let objIndex = InputChange.findIndex((i) => i.ItemId == window.ItemId && i.QuestionCategoryId == window.ItemQuestionId); + let winArr = [...InputChange]; + winArr[objIndex].Flag = true; + + setInputChange(winArr); + WindowDataRef.current = allData; + setWindowData(allData); + // setHasUnsavedChanges(true); + BgUnsavedChanges(true); + console.log("tyeop-14"); + setrerenderdata(!rerenderdata); + } + + function showQtnDatePicker(qtn, window, show = false) { + let allQtns = window.WindowQuestions || []; + let newqtnIndex = allQtns.findIndex((q) => q.ItemQuestionId == qtn.ItemQuestionId); + + if (newqtnIndex >= 0) { + let newqtn = allQtns[newqtnIndex]; + newqtn.showDatePicker = show; + allQtns[newqtnIndex] = newqtn; + window["WindowQuestions"] = allQtns; + let allWindows = Windows; + const winIndex = allWindows.findIndex((i) => i.ItemId == window.ItemId && i.QuestionCategoryId == window.ItemQuestionId) || {}; + allWindows[winIndex] = window; + setWindows(allWindows); + setGlobalWindows(allWindows); + if (show == true) setrerenderdata(!rerenderdata); + } + } + + function setRatingValue(data) { + setRatingOrder(data); + } + + function onRatingCancel() { + setShowRating(false); + } + + function onRatingSave() { + setShowRating(false); + let qtn = RatingQtn; + let window = RatingWindow; + let id_key = qtn.ItemQuestionId + "_AnswerId"; + let ans_key = qtn.ItemQuestionId + "_Answer"; + let rating_key = qtn.ItemQuestionId + "_Rating"; + let ids = [], + anss = []; + RatingOrder.map((item, index) => { + ids.push(item.AnswerId); + anss.push(item.Answer); + }); + + let allData = WindowData; + let defData = { + ItemId: window.ItemId, + QuestionCategoryId: window.ItemQuestionId, + }; + + const wind_index = allData.findIndex((i) => i.ItemId == window.ItemId && i.QuestionCategoryId == window.ItemQuestionId); + let wind = wind_index >= 0 ? allData[wind_index] : defData; + let obj = wind.WindowQA || {}; + + obj[rating_key] = ids.join(","); + obj[id_key] = 0; + obj[ans_key] = anss.join(","); + + wind["WindowQA"] = obj; + wind_index >= 0 ? (allData[wind_index] = wind) : allData.push(wind); + + let objIndex = InputChange.findIndex((i) => i.ItemId == window.ItemId && i.QuestionCategoryId == window.ItemQuestionId); + let winArr = [...InputChange]; + winArr[objIndex].Flag = true; + + setInputChange(winArr); + WindowDataRef.current = allData; + setWindowData(allData); + // setHasUnsavedChanges(true); + BgUnsavedChanges(true); + setrerenderdata(!rerenderdata); + } + + function onChoiceSelect(item, val, key, animatedChoice) { + let win_index = InputChange.find((i) => i.ItemId == item.ItemId && i.QuestionCategoryId == item.ItemQuestionId); + let changeValue = win_index.Flag; + + if (changeValue) { + setIsPresentClean(val); + setDataCleanAnim(animatedChoice); + setDataCleanItem(item); + setDataCleanModal(true); + return; + } + + var val1 = 0; + val == 1 ? (val1 = 1) : ""; + + if (animatedChoice != null) { + Animated.timing(animatedChoice, { + toValue: val1, + duration: 400, + useNativeDriver: false, + }).start(); + } + onWindowDataChange(item, val, key); + } + + function onWindowDataChange(item, val, key) { + let allData = WindowData; + + let defData = { + ItemId: item.ItemId, + QuestionCategoryId: item.ItemQuestionId, + }; + const win_index = allData.findIndex((i) => i.ItemId == item.ItemId && i.QuestionCategoryId == item.ItemQuestionId); + let wind = win_index >= 0 ? allData[win_index] || defData : defData; + wind[key] = val; + + if (key == "Id") { + let rsn = reasons_list.find((r) => r.Id == val) || {}; + wind["KPIType"] = rsn.KPIType || ""; + } + + win_index >= 0 ? (allData[win_index] = wind) : allData.push(wind); + + if (key != "isPresent") { + let objIndex = InputChange.findIndex((i) => i.ItemId == item.ItemId && i.QuestionCategoryId == item.ItemQuestionId); + let winArr = [...InputChange]; + winArr[objIndex].Flag = true; + setInputChange(winArr); + } + + WindowDataRef.current = allData; + setWindowData(allData); + // setHasUnsavedChanges(true); + BgUnsavedChanges(true); + setrerenderdata(!rerenderdata); + } + + async function setWindowStockVal(val, window, stockProd, key, type = "") { + setErrorField({}); + setError(false); + if (type == "numeric" && val != "") { + const regex = new RegExp(/^\d+$/); + let isNUmeric = regex.test(val); + if (!isNUmeric) { + notify(ST.Pleaseenterwholenumbersonly, "SHORT"); + return; + } + } + + let allData = WindowData; + let defData = { + ItemId: window.ItemId, + QuestionCategoryId: window.ItemQuestionId, + }; + const win_index = allData.findIndex((i) => i.ItemId == window.ItemId && i.QuestionCategoryId == item.ItemQuestionId); + let wind = win_index >= 0 ? allData[win_index] || defData : defData; + let WStocksData = wind["WStocksData"] || []; + let sdIndex = WStocksData.findIndex((i) => i.ProductId == stockProd.VisibilityStockValue); + let sd = sdIndex >= 0 ? WStocksData[sdIndex] : { ProductId: stockProd.VisibilityStockValue, Stock: "" }; + sd[key] = val; + sdIndex >= 0 ? (WStocksData[sdIndex] = sd) : WStocksData.push(sd); + wind["WStocksData"] = WStocksData; + win_index >= 0 ? (allData[win_index] = wind) : allData.push(wind); + if (key == "isPVisPresent") { + let isAllChecked = await verifyAllChecked(val, window, stockProd, key); + wind["isAllSKUChecked"] = isAllChecked; + } + + WindowDataRef.current = allData; + setWindowData(allData); + // setHasUnsavedChanges(true); + BgUnsavedChanges(true); + setrerenderdata4(!rerenderdata4); + } + + async function onCatTextChange(window, key, val,type="") { + if (val != "") { + let isValid = validateNumber(val, type); + if (!isValid) { + return; + } + } + + setErrorField({}); + setError(false); + let item = window; + let allData = WindowData; + let defData = { + ItemId: item.ItemId, + QuestionCategoryId: item.ItemQuestionId, + }; + const win_index = allData.findIndex((i) => i.ItemId == item.ItemId && i.QuestionCategoryId == item.ItemQuestionId); + let wind = win_index >= 0 ? allData[win_index] || defData : defData; + wind[key] = val; + + win_index >= 0 ? (allData[win_index] = wind) : allData.push(wind); + + WindowDataRef.current = allData; + setWindowData(allData); + + // setHasUnsavedChanges(true); + BgUnsavedChanges(true); + setrerenderdata(!rerenderdata); + } + + async function verifyAllChecked(val, window, stockProd, key) { + return await new Promise((resolve, reject) => { + let WindowStocks = window.WindowStocks || []; + let allData = WindowData; + const win_index = allData.findIndex((i) => i.ItemId == window.ItemId && i.QuestionCategoryId == item.ItemQuestionId); + let wind = win_index >= 0 ? allData[win_index] || defData : defData; + let WStocksData = wind["WStocksData"] || []; + if (WindowStocks.length > 0) { + let isAllChecked = 1; + for (var i = 0; i < WindowStocks.length; i++) { + let stockProd = WindowStocks[i]; + + let sdIndex1 = WStocksData.findIndex((a) => a.ProductId == stockProd.VisibilityStockValue); + let sd1 = sdIndex1 >= 0 ? WStocksData[sdIndex1] : {}; + let isPVisPresent = sd1.isPVisPresent; + if (isPVisPresent == null || isPVisPresent == "" || isPVisPresent == 0 || isPVisPresent == "0") { + isAllChecked = 0; + } + + if (i == WindowStocks.length - 1) { + resolve(isAllChecked); + } + } + } else { + resolve(0); + } + }).catch((err) => { + console.log(err); + return 0; + }); + } + + function onWindowDataClean() { + if (DataCleanAnim != null) { + // console.log("anim---") + let anim = isPresentClean == 1 ? 1 : ""; + Animated.timing(DataCleanAnim, { + toValue: anim, + duration: 400, + useNativeDriver: false, + }).start(); + } + let ImageMandatory = KPIFields?.find((i) => i.KPIFieldName == (KPIConfig?.ImageMandatory==false? "PrimaryImageMandatory" :"ImageMandatory")); + let ImageMandatoryFlage = ImageMandatory?.KPIFieldEnable || false + let ImageMandatoryNo = ImageMandatoryFlage ? ImageMandatory?.KPIFieldDisplayName : 0 + + let allData = WindowData; + let WindowSplits = []; + for (var s = 0; s < DataCleanItem.NoOfSplit; s++) { + let obj = { + ImageName: "", + Image: "", + ImageLable: ImageLabel[s], + imgRequired: s < ImageMandatoryNo + }; + WindowSplits.push(obj); + } + + + let defData = { + ...DataCleanItem, + ItemId: DataCleanItem.ItemId, + ItemQuestionId: DataCleanItem.ItemQuestionId, + isAllSKUChecked: 0, + WindowSplits: WindowSplits, + KPIType: "", + PosQty: "", + Reason:"", + ReasonId:"", + TodayDeploy:0, + WindowQA: {}, + WStocksData: [], + isPresent: isPresentClean, + }; + const win_index = allData.findIndex((i) => i.ItemId == DataCleanItem.ItemId && i.QuestionCategoryId == DataCleanItem.ItemQuestionId); + allData[win_index] = defData; + + + + let objIndex = InputChange.findIndex((obj) => obj.ItemId == DataCleanItem.ItemId && obj.QuestionCategoryId == DataCleanItem.ItemQuestionId); + let winArr = [...InputChange]; + winArr[objIndex].Flag = false; + + setInputChange(winArr); + WindowDataRef.current = allData; + setWindowData(allData); + // setHasUnsavedChanges(true); + BgUnsavedChanges(true); + setDataCleanModal(false); + setrerenderdata(!rerenderdata); + } + + function checkAllSKUs(val, window) { + let WindowStocks = window.WindowStocks || []; + let allData = WindowData; + let defData = { + ItemId: window.ItemId, + QuestionCategoryId: window.ItemQuestionId, + }; + const win_index = allData.findIndex((i) => i.ItemId == window.ItemId && i.QuestionCategoryId == window.ItemQuestionId); + let wind = win_index >= 0 ? allData[win_index] || defData : defData; + let WStocksData = wind["WStocksData"] || []; + console.log("WStocksData before:", WStocksData); + for (var i = 0; i < WindowStocks.length; i++) { + let stockProd = WindowStocks[i]; + + let sdIndex = WStocksData.findIndex((a) => a.ProductId == stockProd.VisibilityStockValue); + let sd = sdIndex >= 0 ? WStocksData[sdIndex] : { ProductId: stockProd.VisibilityStockValue, Stock: "" }; + let isPVisPresent = val == 1 || val == "1" ? 1 : 0; + sd["isPVisPresent"] = isPVisPresent; + + sdIndex >= 0 ? (WStocksData[sdIndex] = sd) : WStocksData.push(sd); + } + + wind["WStocksData"] = WStocksData; + wind["isAllSKUChecked"] = val == 1 ? 1 : 0; + console.log("wind updated"); + win_index >= 0 ? (allData[win_index] = wind) : allData.push(wind); + + WindowDataRef.current = allData; + setWindowData(allData); + // setHasUnsavedChanges(true); + BgUnsavedChanges(true); + setrerenderdata(!rerenderdata); + } + + function onSaveCancel() { + setShowAlert(false); + } + + function openImageRefView(windowIndex = 0) { + setrefImageIndex(windowIndex); + UpdateShow_zoomImageRef(true); + } + + function FilterStores(searchedQry) { + searchedQry = searchedQry.toLowerCase(); + console.log("searchedQry", searchedQry); + let arr = []; + let newWindows = []; + if (searchedQry != null && searchedQry != "") { + for (let i = 0; i < globalWindows.length; i++) { + let item = globalWindows[i]; + let { ItemName } = item; + if (ItemName.toLowerCase().includes(searchedQry)) { + newWindows.push(item); + } + + if (i == globalWindows.length - 1) { + arr = newWindows; + } + } + } else { + arr = globalWindows; + } + + setWindows(arr); + setrerenderdata(!rerenderdata); + setrerenderdata2(!rerenderdata2); + } + + function renderRatingView() { + let qtn = RatingQtn; + let Answers = qtn.Answers; + let id_key = qtn.ItemQuestionId + "_AnswerId"; + let ans_key = qtn.ItemQuestionId + "_Answer"; + let rating_key = qtn.ItemQuestionId + "_Rating"; + + let newarr = RatingOrder; + if (RatingOrder.length <= 0) { + newarr = Answers; + } + + return ( + + + {ST.DragItemsInOrder} + {ST.Pressandholdtodrag} + { + setRatingValue(data); + }} + keyExtractor={(item) => item.AnswerId} + renderItem={renderItem} + /> + + { + onRatingCancel(); + }} + > + {ST.Cancel} + + { + onRatingSave(); + }} + > + {ST.Save} + + + + + ); + } + + function render_Picker(label_key, value_key, onChange = () => { }, selected_data = {}) { + var data = []; + let qtn = selected_data.qtn || {}; + let window = selected_data.window || {}; + let isQtnDisabled = qtn.isDisabled != null || qtn.isDisabled != "" ? false : true; + let allAnswers = qtn.Answers || []; + + allAnswers.map((item, index) => { + let obj = { key: index, label: item[label_key], value: item[value_key] }; + if (selected_data.value == item[label_key]) + obj["component"] = ( + + {item[label_key]} + + ); + data.push(obj); + }); + + return ( + { + onChange(option, qtn, window); + }} + overlayStyle={customStyle.addVisPickerOverlay} + cancelContainerStyle={customStyle.addVisPicker_OptionContainerStyle} + optionStyle={customStyle.addvis_opStyle} + optionTextStyle={customStyle.addvis_opTextStyle} + optionContainerStyle={customStyle.addVisPicker_OptionContainerStyle} + selectedKey={"1"} + disabled={isQtnDisabled} + > + {selected_data.value != null && selected_data.value != "" ? selected_data.value : "-" + ST.select + "-"} + + ); + } + + function renderDatePicker(qtn, window) { + let qtnn = qtn; + let DateRange = qtn.DateRange; + let maxDate = moment().add(10, "years").format("MM/DD/YYYY"); + let minDate = moment().subtract(10, "years").format("MM/DD/YYYY"); + if (DateRange == "RFD") { + maxDate = moment().format("MM/DD/YYYY"); + } else if (DateRange == "RPD") { + minDate = moment().format("MM/DD/YYYY"); + } + + return ( + { + setTextValue(selectedDate, qtnn, window); + }} + maximumDate={new Date(maxDate)} + minimumDate={new Date(minDate)} + /> + ); + } + + async function OpenImgModal(imgPath, window, splitItem, splitItemIndex, cameraType) { + setSelectedImg(imgPath); + setShowModal(true); + if (imgPath != "" && imgPath != null) { + setShowImageSaveOp(false); + } else { + setShowImageSaveOp(true); + } + setReCapImgModalObj({ window, splitItem, splitItemIndex, cameraType }); + // _OpenCaptureImage_Modal(imgPath,window,splitItem,splitItemIndex,cameraType) + } + + function cancelImage() { + // setImage1(''); + setSelectedImg(""); + setReCapImgModalObj({}); + setShowModal(false); + } + + function _renderWindow(currentMenu) { + let RemarkEnableIndex = KPIFields.findIndex((i) => i.ScreenName == "WAREHOUSEDEPLOY" && i.KPIFieldName == "DeployQty"); + let RemarkEnableKPIObj = RemarkEnableIndex >= 0 ? KPIFields[RemarkEnableIndex] : {}; + let RemarkEnable = RemarkEnableIndex >= 0 ? RemarkEnableKPIObj["KPIFieldEnable"] : false; + let DeployQtyTextLength = RemarkEnableIndex >= 0 ? Number(RemarkEnableKPIObj["KPIType"]) : null; + + let DeploymentTypEnableIndex = KPIFields.findIndex((i) => i.ScreenName == "WAREHOUSEDEPLOY" && i.KPIFieldName == "DeploymentType"); + let DeploymentTypKPIObj = DeploymentTypEnableIndex >= 0 ? KPIFields[DeploymentTypEnableIndex] : {}; + let DeploymentTypEnable = DeploymentTypEnableIndex >= 0 ? DeploymentTypKPIObj["KPIFieldEnable"] : false; + + let isListedSKUIndex = KPIFields.findIndex((i) => i.KPIFieldName == "ListedSKUCheckbox"); + let isListedSKUKPIObj = isListedSKUIndex >= 0 ? KPIFields[isListedSKUIndex] : {}; + let isListedSKUEnable = isListedSKUIndex >= 0 ? isListedSKUKPIObj["KPIFieldEnable"] : true; + + let ReasonEnableIndex = KPIFields.findIndex((i) => i.ScreenName == "WAREHOUSEDEPLOY" && i.KPIFieldName == "ReasonEnable"); + let ReasonEnableKPIObj = ReasonEnableIndex >= 0 ? KPIFields[ReasonEnableIndex] : {}; + let ReasonEnable = ReasonEnableIndex >= 0 ? ReasonEnableKPIObj["KPIFieldEnable"] : false; + let MenuIdFromConfig = ReasonEnableIndex >= 0 ? ReasonEnableKPIObj["KPIType"] : null; + let menuId = MenuIdFromConfig && MenuIdFromConfig.split(":")[1]?.trim(); + + return ( + + `window_${index.toString()}`} + renderItem={({ item, index }) => { + const window = item; + const windowIndex = index; + let isVisible = Boolean(ItemsInView.find(({ item: i, isViewable }) => i.ItemId == window.ItemId && i.ItemQuestionId == window.QuestionCategoryId && isViewable)); + // console.log("RenderItemList ItemsInView2:",index,isVisible) + + let isImage1 = window.VisibilityImage1 == "true" || window.VisibilityImage1 == 1 ? 1 : 0; + let isImage2 = window.VisibilityImage2 == "true" || window.VisibilityImage2 == 1 ? 1 : 0; + let isNAImageAvl = window.VisibilityNotExistCamera == "true" || window.VisibilityNotExistCamera == 1 ? 1 : 0; + let isNAReasonEnable = window.VisibilityNotExistReasonEnable == "true" || window.VisibilityNotExistReasonEnable == 1 ? 1 : 0; + let VisibilityRefImagePopUp = window.VisibilityRefImagePopUp == "true" || window.VisibilityRefImagePopUp == true ? true : false; + let isReasonEnable = window.VisibilityExistReasonEnable == "true" || window.VisibilityExistReasonEnable == 1 ? 1 : 0; + let isStockReq = window.VisibilityElementStockRequired == "true" || window.VisibilityElementStockRequired == 1 ? 1 : 0; + let StockQtyRequired = window.StockQtyRequired == "true" || window.StockQtyRequired == 1 ? 1 : 0; + let PromoTitleEnable = window.PromoDefinitionTitleEnable == "true" || window.PromoDefinitionTitleEnable == 1 ? 1 : 0; + let PromoTitle = window.PromoDefinitionTitle != null && window.PromoDefinitionTitle != "undefined" ? window.PromoDefinitionTitle : ""; + + // let isStock_CheckAssrt=window.VisibilityElementCheckAssortment=='true' || window.VisibilityElementCheckAssortment==1?1:0; + let RefImage = window.VisibilityRefImage; + let camera1Label = window.VisibilityImage1Lable || ""; + let camera2Label = window.VisibilityImage2Lable || ""; + let WindowQuestions = window.WindowQuestions || []; + let WindowStocks = window.WindowStocks || []; + + const wind = WindowData.find((i) => i.ItemId == window.ItemId && i.QuestionCategoryId == window.ItemQuestionId); + let isPresent = KPIConfig?.HidePresentYesNo==false ? true : (wind.isPresent != null && wind.isPresent != "" ? wind.isPresent : "0"); + let WhDisable = wind.WhDisable != null && wind.WhDisable != "" ? wind.WhDisable : "0"; + + let StockInHand = wind.StockInHand != null && wind.StockInHand != "" ? wind.StockInHand : 0; + let TodayDeploy = wind.TodayDeploy != null && wind.TodayDeploy != "" ? wind.TodayDeploy : 0; + let FinalStock = Number(StockInHand)-Number(TodayDeploy) + let KpiTypId = wind.Id != null ? wind.Id : ""; + let Reason = wind.Reason != null ? wind.Reason : ''; + let ReasonId=wind.ReasonId!=null?wind.ReasonId:''; + let KPIType = wind.KPIType != null ? wind.KPIType : ""; + let NAImage1 = wind.NAImage1 != null ? wind.NAImage1 : ""; + let NAImage1Path = wind.NAImage1Path != null ? wind.NAImage1Path : ""; + let remark = wind.remark != null ? wind.remark : ""; + // let PosQty = wind && wind.PosQty != null ? wind.PosQty : ""; + let PosQty = wind.PosQty != null ? wind.PosQty.toString() : "0"; + + + + let showOtherText = wind.showOtherText != null ? wind.showOtherText : false; + let WindowSplits = wind.WindowSplits || []; + let QuestionsData = wind.WindowQA || {}; + let WStocksData = wind.WStocksData || []; + let isAllSKUChecked = wind.isAllSKUChecked == 1 || wind.isAllSKUChecked == "1"; + + // console.log('RefImage:',RefImage); + + var xpos = isPresent == "1" || isPresent == 1 ? -75 : 0; + if (window.animatedChoice != null) { + xpos = window.animatedChoice.interpolate({ + inputRange: [0, 1], + outputRange: [0, -75], + }); + } + + if (isVisible && window.animatedHeight != null) { + setTimeout(() => { + Animated.timing(window.animatedHeight, { + toValue: 0, + duration: 800, + useNativeDriver: false, + }).start(); + // animHight=window.animatedHeight.interpolate({ + // inputRange:[100,0], + // outputRange:["100%","0%"], + // }); + }, (props.RefImagePopUpTime || 0) * 1000); + } + + let EF_Window = errorfield.EF_Window != null ? errorfield.EF_Window : {}; + let show_errorhere = error == true && EF_Window.ItemId == window.ItemId && EF_Window.QuestionCategoryId == window.ItemQuestionId; + + // if not Present fields + + // this will show error field in red (if window is present and exist reason is enabled and not filled ) or (if window is not present and Not exist reason is enabled and not filled ) + let EF_NExistReason = errorfield.EF_NExistReason || ""; + let EStyle_NExistReason = show_errorhere && EF_NExistReason == "NExistReason" ? customStyle.stk_inptSTyle_error : {}; + + let EF_NExistRemark = errorfield.EF_NExistRemark || ""; + let EStyle_NExistRemark = show_errorhere && EF_NExistRemark == "NExistRemark" ? customStyle.stk_inptSTyle_error : {}; + + let EF_NExistImage = errorfield.EF_NExistImage || ""; + let EStyle_NExistImage = show_errorhere && EF_NExistImage == "NExistImage" ? customStyle.error_CatImage2 : {}; + + return ( + + + + {window.ItemCategory} + {/* {window && window.ChildName != "" && {window.ItemName+" - "+window.MappingType}} */} + { window && window.ChildName !== "" && ( + {window.ItemName + (menuId == currentMenu.MenuId ? " - " + window.MappingType : "")} )} + {PromoTitleEnable == 1 && PromoTitle != null && PromoTitle != "" && {PromoTitle}} + { + openImageRefView(index); + }} + > + + + + + {VisibilityRefImagePopUp && ( + + + + )} + + + + { (KPIConfig?.HidePresentYesNo==false ? false : true ) && + + {ST.IsPresent} + + + + { + if(WhDisable==1){ + notify(`You have already Deployed`, "LONG"); + return + } + onChoiceSelect(window, 1, "isPresent", window.animatedChoice); + }} + > + {ST.Yes} + + { + if(WhDisable==1){ + notify(`You have already Deployed`, "LONG"); + return + } + onChoiceSelect(window, 0, "isPresent", window.animatedChoice); + }} + > + {ST.No} + + + + + } + {/* {((isPresent != "1" && isNAReasonEnable == true) || (isPresent == "1" && isReasonEnable == true)) && WhDisable=="0" && ( */} + {((isPresent != "1" && ReasonEnable == true && menuId==currentMenu.MenuId)) && WhDisable=="0" && ( + + {ST.SelectReason} + { + + } + + )} + + {/* {(NoCameraHide==currentMenu?.MenuId ?true:(isPresent != "1")) && isNAImageAvl == true && WhDisable=="0" && ( */} + {/* {(NoCameraHide==currentMenu?.MenuId) && WhDisable=="0" && ( + + + + {ST.CaptureImage} + + + + + {(NAImage1Path == "" || NAImage1Path == null) && ( + { + openCamera(window, {}, 0, "1", "3"); + }} + > + + + )} + {NAImage1Path != "" && NAImage1Path != null && ( + + + { + openCamera(window, {}, 0, "1", "3"); + }} + > + + + + )} + + + + + )} */} + + {isPresent == "1" && RemarkEnable == true && WhDisable=="0" && (KPIConfig?.DeploymentType==false ? false : true ) && ( + + {"Deployment Type"} + { + + } + + )} + {isPresent == "1" && RemarkEnable == true && WhDisable=="0" && (KPIConfig?.DeployQty==false ? false : true ) && ( + + {`Deploy Qty ${item?.MeasureUnit?`(${item?.MeasureUnit})`:""} \n( Stock Avbl. ${StockInHand} )`} + { + // onCatTextChange(window, 'RemarkText', val, 'text'); + // let stockEnt=KPIType=="Already Deployed" ? true :val<=FinalStock + let stockEnt=KPIType=="Already Deployed" ? true :(val<=FinalStock && (val===""? true :val>0) ) + if(stockEnt){ + onCatTextChange(window, "PosQty", val, "numeric"); + }else{ + notify(`Please fill the value less than Stock In Hand and Greater than 0 `, "LONG"); + } + }} + /> + + )} + + + + {isPresent == "1" && WhDisable=="0" && isStockReq == true && WindowStocks.length > 0 && ( + + + {isListedSKUEnable == true ? ST.SelectProducts : "Enter Stocks"} + + {isListedSKUEnable == true && ( + + { + checkAllSKUs(isAllSKUChecked == 1 ? 0 : 1, window); + }} + > + { + let val1 = val == true ? 1 : 0; + checkAllSKUs(val1, window); + }} + style={[customStyle.WStkHdr_checkbox, Platform.OS == "ios" ? { height: 20, width: 20, marginLeft: 5 } : {}]} + tintColors={{ + true: PageTheme.$primary_color, + false: PageTheme.$text_color_light, + }} + /> + {ST.SelectAll} + + + )} + + + )} + + + + + {((NoCameraHide==currentMenu?.MenuId) ? true :(isPresent == "1" && WhDisable=="0")) && WindowSplits?.length > 0 && ( + + + {currentMenu.MenuName + " Images"} + + `spliItem_${index.toString()}`} + style={{flexWrap:"wrap", flexDirection:"row", justifyContent:"space-between",marginHorizontal:"25%"}} + renderItem={({ item, index }) => { + let splitItem = item; + let splitItemIndex = index; + let Img = item?.Image + let imgRequired = item?.imgRequired + let ImageLable = item?.ImageLable + let Image1Name = splitItem["Image1Name"] != null && splitItem["Image1Name"] != "" ? splitItem["Image1Name"] : ""; + let Image2Name = splitItem["Image2Name"] != null && splitItem["Image2Name"] != "" ? splitItem["Image2Name"] : ""; + let Image1 = splitItem["Image1"] != null && splitItem["Image1"] != "" ? splitItem["Image1"] : ""; + let Image2 = splitItem["Image2"] != null && splitItem["Image2"] != "" ? splitItem["Image2"] : ""; + let isImg1mad = splitItem["img1Required"] || false; + let isImg2mad = splitItem["img2Required"] || false; + + // highlight slit image box + let EF_splitItemIndex = errorfield.EF_splitItemIndex || ""; + let showSplitItemErrHere = EF_splitItemIndex == splitItemIndex; + + let EF_splitImage1 = errorfield.EF_splitImage1 || ""; + let EStyle_splitImage1 = show_errorhere && showSplitItemErrHere && EF_splitImage1 == "splitImage1" ? customStyle.error_CatImage2 : {}; + + let EF_splitImage2 = errorfield.EF_splitImage2 || ""; + let EStyle_splitImage2 = show_errorhere && showSplitItemErrHere && EF_splitImage2 == "splitImage2" ? customStyle.error_CatImage2 : {}; + + + return ( + + + + {!Img && imgRequired ? ( + { + openCamera(window, splitItem, splitItemIndex, "4","4"); + }} + > + + + ) : !Img ? ( + { + openCamera(window, splitItem, splitItemIndex, "4","4"); + }} + > + + + ) : Img && ( + { + OpenImgModal(Img, window, splitItem, splitItemIndex, "4","4"); + }} + > + + + ) } + {ImageLable} + + + + ); + }} + /> + + )} + + {WindowQuestions.length > 0 && ( + + + {currentMenu.MenuName + " Questions"} + + {WindowQuestions.map((item, index) => { + {/* console.log("Question...:", item, "Index:", index); */ } + let qtn = item; + let qtnIndex = index; + let selansid = "", + selanswer = "", + selimg = "", + showImageTag = false; + let id_key = qtn.ItemQuestionId + "_AnswerId"; + let ans_key = qtn.ItemQuestionId + "_Answer"; + let multi_key = qtn.ItemQuestionId + "_MultiOption"; + let date_key = qtn.ItemQuestionId + "_Date"; + let img_key = qtn.ItemQuestionId + "_ImagePath1"; + let imgname_key = qtn.ItemQuestionId + "_ImageName1"; + let rating_key = qtn.ItemQuestionId + "_Rating"; + + let list_mcdata = []; + let ItemDefaultQuestionEnable = qtn.ItemDefaultQuestionEnable == "true" || qtn.ItemDefaultQuestionEnable == 1 || qtn.ItemDefaultQuestionEnable == "1" ? true : false; + let isDisabled = qtn.isDisabled; + if (qtn.QuestionType == "Single choice list") { + selansid = QuestionsData[id_key] != null ? QuestionsData[id_key] : ""; + selanswer = QuestionsData[ans_key] != null ? QuestionsData[ans_key] : ""; + } else if (qtn.QuestionType == "Multi choice list") { + if (qtn.Answers != null) { + for (var i = 0; i < qtn.Answers.length; i++) { + let obj = { + AnswerId: parseInt(qtn.Answers[i].AnswerId), + Answer: qtn.Answers[i].Answer, + }; + list_mcdata.push(obj); + } + } + selansid = QuestionsData[multi_key] != null && QuestionsData[multi_key] != "" ? QuestionsData[multi_key].split(",") : []; + + if (selansid != null && selansid.length > 0) { + let arr = []; + for (var i = 0; i < selansid.length; i++) { + arr.push(parseInt(selansid[i])); + } + selansid = arr; + } + + } else if (qtn.QuestionType == "Number" || qtn.QuestionType == "Text" || qtn.QuestionType == "Decimal" || qtn.QuestionType == "Date") { + selansid = QuestionsData[ans_key] != null && QuestionsData[ans_key] != undefined ? QuestionsData[ans_key] : ""; + selanswer = qtn.QuestionType == "Date" ? QuestionsData[date_key] || moment().format("MM/DD/YYYY") : ""; + showImageTag = qtn.ItemAnswerShowCamera == 1 || qtn.ItemAnswerShowCamera == "true"; + } else if (qtn.QuestionType == "Rating" || qtn.QuestionType == "QR") { + selanswer = QuestionsData[ans_key] ? QuestionsData[ans_key] : ""; + } + + if (qtn.QuestionType == "Single choice list" || qtn.QuestionType == "Multi choice list") { + if (qtn.Answers && qtn.Answers.length > 0) { + for (var i = 0; i < qtn.Answers.length; i++) { + let ansss = qtn.Answers[i]; + let isandImgAl = ansss.ItemAnswerShowCamera == "true" || ansss.ItemAnswerShowCamera == 1; + + if (qtn.QuestionType == "Single choice list" && isandImgAl && ansss.AnswerId == selansid) { + showImageTag = true; + } else if (qtn.QuestionType == "Multi choice list" && isandImgAl && selansid.indexOf(ansss.AnswerId) >= 0) { + showImageTag = true; + } + } + } + } + + if (showImageTag) { + {/* selimg = QuestionsData[img_key] != null && QuestionsData[img_key] != "" ? "file://" + QuestionsData[img_key] : ""; */ } + + selimg = QuestionsData[img_key] != null && QuestionsData[img_key] !== "" ? "file://" + QuestionsData[img_key] : ""; + } + + let EF_qtn = errorfield.EF_qtn != null ? errorfield.EF_qtn : {}; + let showQtnErrHere = EF_qtn.ItemQuestionId == qtn.ItemQuestionId; + //Qtn_MultiChoice + let EF_Qtn_MultiChoice = errorfield.EF_Qtn_MultiChoice || ""; + let EStyle_Qtn_MultiChoice = show_errorhere && showQtnErrHere && EF_Qtn_MultiChoice == "Qtn_MultiChoice" ? customStyle.stk_MultiSSTyle_error : {}; + + let EF_Qtn_Date = errorfield.EF_Qtn_Date || ""; + let EStyle_Qtn_Date = show_errorhere && showQtnErrHere && EF_Qtn_Date == "Qtn_Date" ? customStyle.stk_inptSTyle_error : {}; + + let EF_Qtn_Input = errorfield.EF_Qtn_Input || ""; + let EStyle_Qtn_Input = show_errorhere && showQtnErrHere && EF_Qtn_Input == "Qtn_Input" ? customStyle.stk_inptSTyle_error : {}; + + let EF_Qtn_Image = errorfield.EF_Qtn_Image || ""; + let EStyle_Qtn_Image = show_errorhere && showQtnErrHere && EF_Qtn_Image == "Qtn_Image" ? customStyle.stk_inptSTyle_error : {}; + + if (!isDisabled) { + return ( + + {qtn.ItemQuestionName} + {qtn.QuestionType == "Single choice list" && + qtn.Answers && + render_Picker("Answer", "AnswerId", onselectionChange, { + value: selanswer, + qtn: qtn, + window: window, + })} + {qtn.QuestionType == "Multi choice list" && qtn.Answers && ( + { + setMultiSelectValue(selectedItems, qtn, window); + }} //setMultiSelectValue(selectedItems,qtn) + selectedItems={selansid} + selectText="Pick Items" + searchInputPlaceholderText={ST.SearchItems + "..."} + // onChangeInput={ (text)=> console.log(text)} + tagRemoveIconColor={PageTheme.$primary_color} + tagBorderColor={PageTheme.$primary_color} + tagTextColor={PageTheme.$primary_color} + selectedItemTextColor={PageTheme.$primary_color} + selectedItemIconColor={PageTheme.$primary_color} + itemTextColor={PageTheme.$text_color} + displayKey="Answer" + searchInputStyle={customStyle.wind_MultiSearchInputStyle} + styleMainWrapper={EStyle_Qtn_MultiChoice} + submitButtonColor={PageTheme.$primary_color} + submitButtonText={ST.Submit} + /> + )} + {(qtn.QuestionType == "Number" || qtn.QuestionType == "Decimal" || qtn.QuestionType == "Text") && ( + console.log("onchangeVal--", e.value)} + onChangeText={(val) => { + setTextValue(val, qtn, window, qtn.QuestionType == "Decimal" ? "decimal" : qtn.QuestionType == "Text" ? "text" : "numeric"); + }} + /> + )} + {qtn.QuestionType == "Date" && ( + + {selansid != "" ? selansid : "MM/YYYY"} + { + setDateValue(selanswer); + showQtnDatePicker(qtn, window, true); + }} + > + + + + )} + {qtn.QuestionType == "QR" && ( + + {selanswer != "" ? selanswer : ""} + { + setQREnable(true); + setQRqtnData({ qtn, window }); + setShowQRCamera(true); + }} + > + {/* */} + + + + )} + {(qtn.showDatePicker == true || qtn.showDatePicker == "true") && qtn.QuestionType == "Date" && renderDatePicker(qtn, window)} + {qtn.QuestionType == "Rating" && ( + + {selanswer} + { + setRatingQtn(qtn); + setRatingWindow(window); + setShowRating(true); + }} + > + + + + )} + + { + // (qtn.QuestionType=='Audio') && + // + // {selanswer} + // {show_recorder(qtn);}}> + // + // + // + } + + {showImageTag && ( + + + { + openCamera(window, {}, 0, "1", "2", qtn); + }} + > + + + + )} + + ); + } else { + return null; + } + })} + + )} + + + + + + + ); + }} + /> + + ); + } + + function _renderHeader(currentIndex) { + return ( + + {`${currentIndex + 1}/${zoomImageUrl.length}`} + { + UpdateShow_zoomImageRef(false); + }} + > + + + + ); + } + + const onCancelClean = () => { + setDataCleanModal(false); + }; + const onclear = () => { + onWindowDataClean(DataCleanItem); + }; + + return ( + + {processing && } + + {_OpenCaptureImage_Modal()} + {ConfirmSaveAlert(props, showAlert, onSaveCancel, saveData)} + {ConfirmSaveAlert(props, DataCleanModal, onCancelClean, onclear, "Your data will be clean")} + { + console.log("QRRec:", imgData); + setShowQRCamera(false); + onQRScanned(imgData); + }} + showCamera={showQRCamera} + onHideCamera={() => { + setShowQRCamera(false); + }} + /> + { + setShowCamera(false); + getImage(imgData); + }} + showCamera={showCamera} + onHideCamera={() => { + setShowCamera(false); + }} + /> + + + + + { + setSearchedItem(val); + FilterStores(val); + }} + /> + { + FilterStores(searchedItem); + }} + > + + + + + {Object.keys(storeData).length > 0 && {_renderWindow(currentMenu)}} + + { + onSubmitData(); + }} + /> + + + + {showRating == true && renderRatingView()} + {show_zoomImage && ( + + null} /> + + )} + + ); +} + +export default connect(mapStateToProps, mapDispatchToProps)(WareHousePaidVi); diff --git a/PerformicsSrc/src/screens/Warehouse.js b/PerformicsSrc/src/screens/Warehouse.js new file mode 100644 index 0000000..5ca9f9b --- /dev/null +++ b/PerformicsSrc/src/screens/Warehouse.js @@ -0,0 +1,357 @@ +import React,{useState,useEffect} from 'react'; +import Container from '../components/container'; +import { useRoute } from '@react-navigation/native'; +import { globalStyles,customStyles,GetPageTheme } from "../styles/Global"; +import {StatusBar,Image,TextInput,View,Text,ScrollView,TouchableOpacity,Platform,PermissionsAndroid,FlatList,KeyboardAvoidingView, Alert} from 'react-native'; +import { ReactReduxContext,connect,useSelector, useDispatch } from 'react-redux'; +import { mapStateToProps,mapDispatchToProps } from '../reducers/contextProvider'; +import SQLite from 'react-native-sqlite-2'; +import {notify} from '../components/notify'; +import moment from 'moment'; +import {getDownloadJson,marktext1,marktext2} from '../controller/functions'; +import {get_item,set_item,clear_item} from '../components/localStorage'; +import {version,sloganline,appname,testurl,db, colors_Arr} from '../constants/constants'; +import CustomHeader from '../components/customHeader'; +import {Card, Menu, Switch} from 'react-native-paper'; +import {AntDesign, MaterialCommunityIcons} from '../components/icons'; +import { stat } from 'react-native-fs'; +import CustomLoader from '../components/CustomLoader'; +import LinearGradient from 'react-native-linear-gradient'; +import { AppTables } from '../constants/tableConstants'; +import { SvgXml } from 'react-native-svg'; +import {launchCamera, launchImageLibrary,CameraOptions} from 'react-native-image-picker'; +import * as RNFS from 'react-native-fs'; +import GradientButton from '../components/gradientButton'; + +import cameraImg from '../assets/performics/camera_front_image.svg' +import addImg from '../assets/performics/add_image.svg'; +import CustomModal from '../components/CustomModal'; +import { getMethodName, METHODS } from '../constants/methodNames'; +import { getPostData, getPostData2 } from '../components/downloadTasks'; + +function Warehouse(props) { + const route = useRoute(); + + // get all theme styles acc to current theme set + const PageTheme=GetPageTheme(props.DarkMode,route.name); + const customStyle=customStyles(props.DarkMode,route.name); + + const [processing, setProcessing] = useState(true); + const [loaderTitle, setLoaderTitle] = useState('loading...'); + const [AllWarehouses, setAllWarehouses] = useState([]); + const [rerenderdata, setrerenderdata]= useState(0); + + const [NodataFound, setNodataFound] = useState(false); + const [hasUnsavedChanges,setHasUnsavedChanges] = useState(false); + + const d1=new Date(); + const d2=moment(d1).format('MM/DD/YYYY'); + + useEffect(() => { + + getData(); + const unsubscribe = props.navigation.addListener('beforeRemove', onBeforeRemove); + const willFocusSubscription = props.navigation.addListener('focus', () => { + getData(); + }); + + return function cleanup() { + willFocusSubscription(); + return unsubscribe; + }; + }, []); + + useEffect(() => { + const unsubscribe = props.navigation.addListener('beforeRemove', onBeforeRemove); + return unsubscribe; + }, [hasUnsavedChanges]); + + function onBeforeRemove(e){ + if (hasUnsavedChanges==true) { + e.preventDefault(); // Prevent default behavior of leaving the screen + onRemoveScreen(e); + } + else{ + return; + } + } + function onRemoveScreen(e){ + Alert.alert( + "", + "Do you really want to exit the screen?", + [ + { + text: "Cancel", + onPress: () => {}, + style: "cancel" + }, + { text: "OK", onPress: () => {setHasUnsavedChanges(false);props.navigation.dispatch(e.data.action);} } + ] + ); + } + + async function getData(){ + + let pdata = await getPostData2('Mapping_WarehouseCurrentPosmStock'); + let url=props.baseurl+getMethodName(METHODS.DOWNLOADJSON_METHOD); + console.log(url,pdata); + await fetch(url, { + method: 'post', + headers: { + Accept: 'application/json', + 'Content-Type': 'application/json', + }, + body: JSON.stringify(pdata), + }) + .then(response => { + return response.json(); + }) + .then(async(res) => { + res = JSON.parse(res); + if (res.Mapping_WarehouseCurrentPosmStock) { + // let data_arr = res.Mapping_WarehouseCurrentPosmStock || []; + // let arr=[]; + // for(let i=0;ii.WarehouseId==data.WarehouseId); + // if(windex<0){ + // let wh_data=await getWarehouseStatus(data); + // console.log('wh_data:',wh_data); + // data.isUploaded=wh_data.STATUS=='U'?true:false; + // data.TotalPOSMQty=wh_data.total_posm_qty!=null?wh_data.total_posm_qty:0; + // arr.push(data); + // } + + // if(i==data_arr.length-1){ + // arr.sort((a,b)=> a.WarehouseName-b.WarehouseName); + // setAllWarehouses(arr); + // setNodataFound(false); + // setProcessing(false); + // console.log('allwarehouses',arr); + // } + // } + + let isInserted= await insertWarehousePOSM(res); + if(isInserted){ + let arr=await getWarehouses(); + if(arr.length>0){ + let narr=[]; + for(let i=0;i { + console.log('set blank'); + console.log('getProjectData error', err); + setProcessing(false); + }); + } + + async function insertWarehousePOSM(res){ + console.log('insertWarehousePOSM'); + return new Promise((resolve,reject)=>{ + let data_arr = res.Mapping_WarehouseCurrentPosmStock || []; + var values=[]; + data_arr.map((data_obj)=>{ + let {WarehouseId, WarehouseName, POSMId, CurrentPosmStock}=data_obj; + values.push(` ('${WarehouseId}','${WarehouseName}','${POSMId}','${CurrentPosmStock}')`); + }); + + console.log('insertWarehousePOSM len:',data_arr.length); + + var all_vals=values.join(','); + var sql_stmnt=`INSERT INTO Mapping_WarehouseCurrentPosmStock(WarehouseId, WarehouseName,POSMId,CurrentPosmStock) + values ${all_vals}`; + db.transaction(async function(txn) { + await txn.executeSql(`delete from Mapping_WarehouseCurrentPosmStock where 1=1`,[],function(txn1,txnres){ + // insert or refresh all today data + txn.executeSql(sql_stmnt,[],function(txn1,txnres){ + resolve(true); + + },function(txn1,txnerr1){ console.log(txnerr1); resolve(false);}); + },function(txn1,txnerr1){ console.log(txnerr1); resolve(false);}); + }); + + }).then((res)=>{return res}) + .catch((err)=>{ + console.log(err); + return false; + }) + + } + + async function getWarehouses(){ + return new Promise((resolve,reject)=>{ + db.transaction(async function (txn) { + + + let join=' INNER join Mapping_WarehouseCurrentPosmStock wh on wh.POSMId=p.PosmId '; + let q=`SELECT Distinct wh.WarehouseId,wh.WarehouseName from Master_POSMDefinition p ${join} order by wh.WarehouseName`; + await txn.executeSql(q,[],async function (txn2, txnres3) { + console.log('data loaded warehouses:',txnres3.rows.length); + if(txnres3.rows.length>0){ + let arr=[]; + for(var i=0;i{return res}) + .catch((err)=>{ + console.log(err); + return []; + }) + + } + + async function getWarehouseStatus(item){ + return new Promise((resolve,reject)=>{ + db.transaction(async function (txn) { + let q=`SELECT STATUS,SUM(POSM_QTY) as total_posm_qty from ${AppTables.POSM_WAREHOUSE} where WAREHOUSE_ID='${item.WarehouseId}' `; + + await txn.executeSql(q,[],async function (txn2, txnres2) { + console.log('data added posm:',txnres2.rows.length); + if(txnres2.rows.length>0){ + let data =txnres2.rows.item(0); + // let status=data.STATUS; + // let total_posm_qty=data.TOTAL_POSM_QTY; + resolve(data); + } + else{ + resolve({}); + } + },function (txnE,txnerr) { console.log(txnerr); resolve({}); },); + + }); + }).then((res)=>{return res}) + .catch((err)=>{ + console.log(err); + return {}; + }); + } + + function gotoPage(item){ + // if(item.isUploaded==true){ + // // notify('Data already uploaded for this warehouse!','LONG'); + + // } + // else{ + + props.navigation.navigate('WarehousePOSM',{'warehouse':item,'isUploaded':item.isUploaded}); + // } + } + + function _renderWarehouses(){ + return( + + + {rerenderdata==rerenderdata && AllWarehouses.length>0 && + AllWarehouses.map((item,index)=>{ + + return ( + {gotoPage(item);}}> + + {item.WarehouseName} + + + + Warehouse Id: + {item.WarehouseId} + + { (item.isUploaded!=null && item.isUploaded==true) && + + {/* + Warehouse Stock: + {item.CurrentPosmStock} + */} + + Taken POSM Qty: + {item.TotalPOSMQty} + + + } + + {(item.isUploaded!=null && item.isUploaded==true) && } + + ) + }) + } + + + ) + } + + + return ( + + {processing && } + + + + + + Warehouses + + { Object.keys(AllWarehouses).length>0 && + + {_renderWarehouses()} + + } + + + + ); +} + + + +export default connect(mapStateToProps, mapDispatchToProps)(Warehouse); \ No newline at end of file diff --git a/PerformicsSrc/src/screens/WarehousePOSM.js b/PerformicsSrc/src/screens/WarehousePOSM.js new file mode 100644 index 0000000..f6cb903 --- /dev/null +++ b/PerformicsSrc/src/screens/WarehousePOSM.js @@ -0,0 +1,566 @@ +import React,{useState,useEffect} from 'react'; +import Container from '../components/container'; +import { useRoute } from '@react-navigation/native'; +import { globalStyles,customStyles,GetPageTheme } from "../styles/Global"; +import {StatusBar,Image,TextInput,View,Text,ScrollView,TouchableOpacity,Platform,PermissionsAndroid,FlatList,KeyboardAvoidingView, Alert, Keyboard} from 'react-native'; +import { ReactReduxContext,connect,useSelector, useDispatch } from 'react-redux'; +import { mapStateToProps,mapDispatchToProps } from '../reducers/contextProvider'; +import SQLite from 'react-native-sqlite-2'; +import {notify} from '../components/notify'; +import moment from 'moment'; +import {getDownloadJson,marktext1,marktext2, UploadData2} from '../controller/functions'; +import {get_item,set_item,clear_item} from '../components/localStorage'; +import {version,sloganline,appname,testurl,db, colors_Arr} from '../constants/constants'; +import CustomHeader from '../components/customHeader'; +import {Card, Menu, Switch} from 'react-native-paper'; +import {AntDesign, MaterialCommunityIcons} from '../components/icons'; +import { stat } from 'react-native-fs'; +import CustomLoader from '../components/CustomLoader'; +import LinearGradient from 'react-native-linear-gradient'; +import { AppTables } from '../constants/tableConstants'; +import { SvgXml } from 'react-native-svg'; +import {launchCamera, launchImageLibrary,CameraOptions} from 'react-native-image-picker'; +import * as RNFS from 'react-native-fs'; +import GradientButton from '../components/gradientButton'; + +import cameraImg from '../assets/performics/camera_front_image.svg' +import addImg from '../assets/performics/add_image.svg'; +import CustomModal from '../components/CustomModal'; +import { getPostData2 } from '../components/downloadTasks'; +import { getMethodName, METHODS, METHOD_KEYS } from '../constants/methodNames'; + +function WarehousePOSM(props) { + const route = useRoute(); + + // get all theme styles acc to current theme set + const PageTheme=GetPageTheme(props.DarkMode,route.name); + const customStyle=customStyles(props.DarkMode,route.name); + + const [processing, setProcessing] = useState(true); + const [loaderTitle, setLoaderTitle] = useState('loading...'); + const [currentWarehouse, setCurrentWarehouse] = useState({}); + const [isDataUploaded, setIsDataUploaded] = useState(false); + const [AllWarehouses, setAllWarehouses] = useState([]); + const [rerenderdata, setrerenderdata]= useState(0); + const [rerenderdata2, setrerenderdata2]= useState(0); + + const [POSMStock, setPOSMStock] = useState([]); + const [showAlert, setShowAlert] = useState(false); + const [NodataFound, setNodataFound] = useState(false); + const [hasUnsavedChanges,setHasUnsavedChanges] = useState(false); + + const d1=new Date(); + const d2=moment(d1).format('MM/DD/YYYY'); + + useEffect(() => { + let params=props.route.params? props.route.params:{}; + let wh=params.warehouse!=null?params.warehouse:{}; + let isUploaded=params.isUploaded!=null?params.isUploaded:false; + setCurrentWarehouse(wh); + setIsDataUploaded(isUploaded); + + getData(wh); + const unsubscribe = props.navigation.addListener('beforeRemove', onBeforeRemove); + + return function cleanup() { + return unsubscribe; + }; + }, []); + + useEffect(() => { + const unsubscribe = props.navigation.addListener('beforeRemove', onBeforeRemove); + return unsubscribe; + }, [hasUnsavedChanges]); + + function onBeforeRemove(e){ + if (hasUnsavedChanges==true) { + e.preventDefault(); // Prevent default behavior of leaving the screen + onRemoveScreen(e); + } + else{ + return; + } + } + function onRemoveScreen(e){ + Alert.alert( + "", + "Do you really want to exit the screen?", + [ + { + text: "Cancel", + onPress: () => {}, + style: "cancel" + }, + { text: "OK", onPress: () => {setHasUnsavedChanges(false);props.navigation.dispatch(e.data.action);} } + ] + ); + } + + async function getData(warehouse){ + + let pdata = await getPostData2('Mapping_WarehouseCurrentPosmStock'); + let url=props.baseurl+getMethodName(METHODS.DOWNLOADJSON_METHOD); + console.log(url,pdata); + await fetch(url, { + method: 'post', + headers: { + Accept: 'application/json', + 'Content-Type': 'application/json', + }, + body: JSON.stringify(pdata), + }) + .then(response => { + return response.json(); + }) + .then(async(res) => { + res = JSON.parse(res); + if (res.Mapping_WarehouseCurrentPosmStock) { + + let isInserted= await insertWarehousePOSM(res); + if(isInserted){ + let arr=await getWarehousePOSM(warehouse); + if(arr.length>0){ + setAllWarehouses(arr); + setNodataFound(false); + // console.log('allwarehouses',arr); + } + else{ + setAllWarehouses(arr); + setNodataFound(true); + // console.log('allwarehouses',arr); + } + setProcessing(false); + } + else{ + notify('Something went wrong! Cannot load warehouse POSM'); + setAllWarehouses([]); + setNodataFound(false); + setProcessing(false); + } + + } + else{ + setAllWarehouses([]); + setNodataFound(true); + setProcessing(false); + console.log('allwarehouses no found'); + } + + + }) + .catch(err => { + console.log('getProjectData error', err); + setProcessing(false); + }); + } + + + async function insertWarehousePOSM(res){ + console.log('insertWarehousePOSM'); + return new Promise((resolve,reject)=>{ + let data_arr = res.Mapping_WarehouseCurrentPosmStock || []; + var values=[]; + data_arr.map((data_obj)=>{ + let {WarehouseId, WarehouseName, POSMId, CurrentPosmStock}=data_obj; + values.push(` ('${WarehouseId}','${WarehouseName}','${POSMId}','${CurrentPosmStock}')`); + }); + + console.log('insertWarehousePOSM len:',data_arr.length); + + + + var all_vals=values.join(','); + var sql_stmnt=`INSERT INTO Mapping_WarehouseCurrentPosmStock(WarehouseId, WarehouseName,POSMId,CurrentPosmStock) + values ${all_vals}`; + db.transaction(async function(txn) { + + + await txn.executeSql(`delete from Mapping_WarehouseCurrentPosmStock where 1=1`,[],function(txn1,txnres){ + // insert or refresh all today data + txn.executeSql(sql_stmnt,[],function(txn1,txnres){ + resolve(true); + + },function(txn1,txnerr1){ console.log(txnerr1); resolve(false);}); + },function(txn1,txnerr1){ console.log(txnerr1); resolve(false);}); + }); + + }).then((res)=>{return res}) + .catch((err)=>{ + console.log(err); + return false; + }) + + } + + async function getWarehousePOSM(warehouse){ + return new Promise((resolve,reject)=>{ + db.transaction(async function (txn) { + let join_ustk2=' LEFT JOIN User_CurrentPosmStock u on pw.POSM_ID=u.PosmId '; + let join2=' INNER join Mapping_WarehouseCurrentPosmStock wh on wh.POSMId=pw.POSM_ID and wh.WarehouseId=pw.WAREHOUSE_ID '; + let join3=' INNER join Master_POSMDefinition p on p.PosmId=pw.POSM_ID '; + let sellist2=` IFNULL(( select SUM(IFNULL(u2.POSM_QTY,0)) from ${AppTables.POSM_WAREHOUSE} u2 where u2.POSM_ID=pw.POSM_ID and u2.VISIT_DATE='${d2}' ),0) as TodayPOSMQty,IFNULL(( select SUM(IFNULL(u3.POSM_QTY,0)) from ${AppTables.POSM_HDR_DATA} u3 where u3.POSM_ID=pw.POSM_ID and u3.VISIT_DATE='${d2}' ),0) as TodayUsedPOSMQty,IFNULL(u.TotalPosmIn,0) as TotalPosmIn,IFNULL(u.TotalPosmOut,0) as TotalPosmOut`; + let q2=`SELECT Distinct pw.POSM_ID as POSMId,p.POSMName,wh.CurrentPosmStock,pw.POSM_QTY as POSMQty,${sellist2} from ${AppTables.POSM_WAREHOUSE} pw ${join2} ${join3} ${join_ustk2} where pw.WAREHOUSE_ID='${warehouse.WarehouseId}' and pw.VISIT_DATE='${d2}' order by p.POSMName`; + + let join=' INNER join Mapping_WarehouseCurrentPosmStock wh on wh.POSMId=p.PosmId '; + let join_ustk1=' LEFT JOIN User_CurrentPosmStock u on p.PosmId=u.PosmId '; + // let join_ustk2=` LEFT JOIN ${AppTables.POSM_WAREHOUSE} u2 on p.PosmId=u2.POSM_ID and u2.VISIT_DATE='${d2}'`; + // let join_ustk3=` LEFT JOIN ${AppTables.POSM_HDR_DATA} u3 on p.PosmId=u3.POSM_ID and u3.VISIT_DATE='${d2}'`; + let sellist=` IFNULL(( select SUM(IFNULL(u2.POSM_QTY,0)) from ${AppTables.POSM_WAREHOUSE} u2 where u2.POSM_ID=p.PosmId and u2.VISIT_DATE='${d2}' ),0) as TodayPOSMQty,IFNULL(( select SUM(IFNULL(u3.POSM_QTY,0)) from ${AppTables.POSM_HDR_DATA} u3 where u3.POSM_ID=p.PosmId and u3.VISIT_DATE='${d2}' ),0) as TodayUsedPOSMQty,IFNULL(u.TotalPosmIn,0) as TotalPosmIn,IFNULL(u.TotalPosmOut,0) as TotalPosmOut`; + let q=`SELECT Distinct p.PosmId as POSMId,p.POSMName,wh.CurrentPosmStock,${sellist} from Master_POSMDefinition p ${join} ${join_ustk1} where wh.WarehouseId='${warehouse.WarehouseId}' order by p.POSMName`; + + + console.log(q2); + + await txn.executeSql(q2,[],async function (txn2, txnres2) { + console.log('data added posm:',txnres2.rows.length); + + if(txnres2.rows.length>0){ + let arr=[],arr2=[]; + for(var i=0;i0){ + let arr=[],arr2=[]; + for(var i=0;i{return res}) + .catch((err)=>{ + console.log(err); + return []; + }) + + } + + + async function submitOpeningStock(){ + let isvalid=await validate(); + if(isvalid){ + Keyboard.dismiss(); + setShowAlert(true); + } + } + + async function saveData(){ + setHasUnsavedChanges(false); + setShowAlert(false); + setLoaderTitle('Saving Data...'); + setProcessing(true); + + let obj=await insertPOSMData(); + if(obj.isInserted==true){ + setLoaderTitle('Uploading Data...'); + uploadPOSMData(obj.uploadData); + } + else{ + notify('Something went wrong while saving data!'); + setProcessing(false); + } + } + + async function uploadPOSMData(uploadData=[]){ + const url=props.ApiUrl+METHOD_KEYS.WAREHOUSE_POSM_OUTWARD; + + let postData={}; + postData['OutwardPosmJson']=uploadData; + postData['UserId']=props.UserId; + + console.log(url,postData) + await UploadData2(url,postData) + .then(async(res)=>{ + console.log('res:',res); + if(res.WarehousePosmOutward!=null){ + notify('Data uploaded successfuly!'); + let isStatusUpdated=await updatePOSMDatauploaded(); + if(!isStatusUpdated){ notify('Cannot update status!'); } + setProcessing(false); + props.navigation.goBack(); + } + else{ + notify('Cannot upload data!'); + setProcessing(false); + } + + }) + .catch((err)=>{ + console.log(err); + notify('Cannot upload data!'); + setProcessing(false); + }); + + } + + async function insertPOSMData(){ + let defData={isInserted:false,uploadData:[]} + return new Promise((resolve,reject)=>{ + db.transaction(async function (txn) { + var values='',data=[]; + + for(let i=0;ici.POSMId==item.POSMId); + const skud=skud_index>=0?(allData[skud_index] || {}) : {}; + let POSMQty=skud['POSMQty']!=null && skud['POSMQty']!=''?skud['POSMQty']:'0'; + + + values+=` ('${transId}','${d2}','${currentWarehouse.WarehouseId}','${POSMId}','${CurrentPosmStock}','${POSMQty}','S','${d2}') `; + + + + // upload data : + let obj={}; + obj['UserId']=props.UserId; + obj['WarehouseId']=currentWarehouse.WarehouseId; + obj['VisitDate']=d2; + obj['POSMId']=POSMId; + obj['OutwardQty']=POSMQty; + obj['TranId']=transId; + + data.push(obj); + + } + + console.log('values:',values); + + + let q=`INSERT INTO ${AppTables.POSM_WAREHOUSE } (TRANSACTION_ID,VISIT_DATE,WAREHOUSE_ID,POSM_ID,WAREHOUSE_STOCK,POSM_QTY,STATUS,ADDED_DATE) VALUES ${values}` + + await txn.executeSql(`Delete from ${AppTables.POSM_WAREHOUSE } where WAREHOUSE_ID='${currentWarehouse.WarehouseId}' `,[],async function (txn2, txnres2) { + console.log('POSM warehouse data deleted') + await txn.executeSql(q,[],async function (txn2, txnres) { + defData['uploadData']=data; + defData['isInserted']=true; + resolve(defData); + },function (txnE,txnerr) { console.log(txnerr); resolve(defData); },); + },function (txnE,txnerr) { console.log(txnerr); resolve(defData); },); + + + }); + + }).then((res)=>{return res}) + .catch((err)=>{ + console.log(err); + return defData; + }) + } + + async function updatePOSMDatauploaded(){ + return new Promise((resolve,reject)=>{ + db.transaction(async function (txn) { + let q=`update ${AppTables.POSM_WAREHOUSE } set STATUS='U' where WAREHOUSE_ID='${currentWarehouse.WarehouseId}' ` + await txn.executeSql(q,[],async function (txn2, txnres) { + resolve(true); + },function (txnE,txnerr) { console.log(txnerr); resolve(false); },); + }); + + }).then((res)=>{return res}) + .catch((err)=>{ + console.log(err); + return false; + }) + } + + async function afterUpdate(){ + setProcessing(false); + notify('Midday-Stock updated successfully'); + props.navigation.goBack(); + } + + + async function validate(){ + let isValid=true; + var i=0,j=0; + await Promise.all( + AllWarehouses.map(async (item,index) => { + if(isValid){ + let skuData=POSMStock.find(ci=>ci.POSMId==item.POSMId) || {}; + let POSMQty1=skuData['POSMQty']!=null && skuData['POSMQty']!=''?skuData['POSMQty']:'0'; + + // if(skuData.POSMQty!==0 && (skuData.POSMQty==null)){ + // notify('Please enter POSM quantity for '+item.POSMName,'SHORT'); + // isValid=false; + // }else + if(parseInt(POSMQty1)>parseInt(item.CurrentPosmStock)){ + notify('POSM quantity should not be greater than the current warehouse POSM Stock for '+item.POSMName,'LONG'); + isValid=false; + }else{ + + } + } + }) + ); + + console.log('isValid:',isValid); + return isValid; + } + + function onStockValChange(item,val,key,type=''){ + if(type=='numeric' && val!=''){ + const regex = new RegExp(/^\d+$/); + let isNUmeric=regex.test(val); + if(!isNUmeric){ + notify('Please enter whole numbers only','SHORT'); + return; + } + } + let allData=POSMStock; + let defData={'POSMId':item.POSMId}; + const skud_index=allData.findIndex(i=>i.POSMId==item.POSMId); + const skud=skud_index>=0?(allData[skud_index] || defData) : defData; + skud[key]=val; + + skud_index>=0?allData[skud_index]=skud:allData.push(skud); + setPOSMStock(allData); + setHasUnsavedChanges(true); + setrerenderdata(!rerenderdata); + } + + function _render_Alert(){ + return ( + + + {setShowAlert(false)}}> + Cancel + + {saveData()}}> + Yes + + + + ) + } + + return ( + + {processing && } + + {_render_Alert()} + + + + {`Warehouse : ${currentWarehouse.WarehouseName}`} + + { Object.keys(AllWarehouses).length>0 && + + + {/* */} + { + + let thisDataIndex=POSMStock.findIndex(i=>i.POSMId==item.POSMId); + let thisData=thisDataIndex>=0?(POSMStock[thisDataIndex] || {}):{}; + let POSMQty=thisData.POSMQty!=null?thisData.POSMQty:''; + let UserPOSMQtyAvl=thisData.UserPOSMQtyAvl!=null?thisData.UserPOSMQtyAvl:'0'; + + + return( + + {item.POSMName} + + + {`Warehouse POSM Stock : ${item.CurrentPosmStock}`} + + + + + {`User POSM Stock Available : ${UserPOSMQtyAvl}`} + + + + + + + {`POSM Quantity ${(isDataUploaded?' : ':'')}`} + {!isDataUploaded && + { onStockValChange(item,val,'POSMQty','numeric')}} + /> + } + {isDataUploaded && + {POSMQty} + } + + + + + ) + }}/> + {/* */} + + + } + {!isDataUploaded && + + {/* {(isDataUploaded?()=>{}:submitOpeningStock())}}/> */} + {submitOpeningStock()}}/> + + } + + + + ); +} + + + +export default connect(mapStateToProps, mapDispatchToProps)(WarehousePOSM); \ No newline at end of file diff --git a/PerformicsSrc/src/screens/Warehouseinward.js b/PerformicsSrc/src/screens/Warehouseinward.js new file mode 100644 index 0000000..1a05db5 --- /dev/null +++ b/PerformicsSrc/src/screens/Warehouseinward.js @@ -0,0 +1,299 @@ +import React,{useState,useEffect} from 'react'; +import Container from '../components/container'; +import { useRoute } from '@react-navigation/native'; +import { globalStyles,customStyles,GetPageTheme } from "../styles/Global"; +import {StatusBar,Image,TextInput,View,Text,ScrollView,TouchableOpacity,Platform,PermissionsAndroid,FlatList,KeyboardAvoidingView, Alert, StyleSheet, Dimensions} from 'react-native'; +import { ReactReduxContext,connect,useSelector, useDispatch } from 'react-redux'; +import { mapStateToProps,mapDispatchToProps } from '../reducers/contextProvider'; +import SQLite from 'react-native-sqlite-2'; +import {notify} from '../components/notify'; +import moment from 'moment'; +import {getDownloadJson,marktext1,marktext2} from '../controller/functions'; +import {get_item,set_item,clear_item} from '../components/localStorage'; +import {version,sloganline,appname,testurl,db, colors_Arr} from '../constants/constants'; +import CustomHeader from '../components/customHeader'; +import {Card, DataTable, Menu, Switch} from 'react-native-paper'; +import {AntDesign, Ionicons, MaterialCommunityIcons} from '../components/icons'; +import { stat } from 'react-native-fs'; +import CustomLoader from '../components/CustomLoader'; +import LinearGradient from 'react-native-linear-gradient'; +import { AppTables } from '../constants/tableConstants'; +import { SvgXml } from 'react-native-svg'; +import {launchCamera, launchImageLibrary,CameraOptions} from 'react-native-image-picker'; +import * as RNFS from 'react-native-fs'; +import GradientButton from '../components/gradientButton'; + +import cameraImg from '../assets/performics/camera_front_image.svg' +import addImg from '../assets/performics/add_image.svg'; +import CustomModal from '../components/CustomModal'; +import { getMethodName, METHODS } from '../constants/methodNames'; +import { getPostData, getPostData2 } from '../components/downloadTasks'; +import NoDataComponent from '../components/NoDataComponent'; + +function Warehouseinward(props) { + const route = useRoute(); + + // get all theme styles acc to current theme set + const PageTheme=GetPageTheme(props.DarkMode,route.name); + const customStyle=customStyles(props.DarkMode,route.name); + + const [processing, setProcessing] = useState(true); + const [loaderTitle, setLoaderTitle] = useState('loading...'); + const [AllWarehouses, setAllWarehouses] = useState([]); + const [WarehouseInwardData, setWarehouseInwardData] = useState([]); + + const [rerenderdata, setrerenderdata]= useState(0); + + const [NodataFound, setNodataFound] = useState(false); + const [hasUnsavedChanges,setHasUnsavedChanges] = useState(false); + + const d1=new Date(); + const d2=moment(d1).format('MM/DD/YYYY'); + + useEffect(() => { + + getData(); + const unsubscribe = props.navigation.addListener('beforeRemove', onBeforeRemove); + const willFocusSubscription = props.navigation.addListener('focus', () => { + getData(); + }); + + return function cleanup() { + willFocusSubscription(); + return unsubscribe; + }; + }, []); + + useEffect(() => { + const unsubscribe = props.navigation.addListener('beforeRemove', onBeforeRemove); + return unsubscribe; + }, [hasUnsavedChanges]); + + function onBeforeRemove(e){ + if (hasUnsavedChanges==true) { + e.preventDefault(); // Prevent default behavior of leaving the screen + onRemoveScreen(e); + } + else{ + return; + } + } + function onRemoveScreen(e){ + Alert.alert( + "", + "Do you really want to exit the screen?", + [ + { + text: "Cancel", + onPress: () => {}, + style: "cancel" + }, + { text: "OK", onPress: () => {setHasUnsavedChanges(false);props.navigation.dispatch(e.data.action);} } + ] + ); + } + + async function getData() { + try { + let token = await get_item('loginToken'); + let loginInfo = await get_item('loginInfo'); + const loginDetails = JSON.parse(loginInfo); + let desg = loginDetails.Designation || ''; + + await db.transaction(async function (txn) { + let join=` Left Outer Join ${AppTables.WARE_HOUSE_INWARD} st on st.ITEMID=wi.ItemId and st.CHALLAN_TYPE_ID=wi.ChallanTypeId and st.VISIT_DATE='${d2}'` + let query = `SELECT DISTINCT wi.ChallanTypeId, wi.ChallanNo, wi.ChallanType, wi.ChallanDate, SUM(wi.InwardQty) AS InwardQty, wi.ConfirmQty, COUNT(st.ITEM_CODE) As CONFIRM_QTY, COUNT(*) AS TotalLines FROM Warehouse_InwardData wi ${join} GROUP BY ChallanTypeId`; + await txn.executeSql(query, [], async function (txn2, txnres) { + if (txnres.rows.length > 0) { + let arr = []; + for (let i = 0; i < txnres.rows.length; i++) { + let data = txnres.rows.item(i); + arr.push(data); + } + setLoaderTitle(false); + setProcessing(false); + setWarehouseInwardData(arr); + setrerenderdata(!rerenderdata); + } else { + setNodataFound(true); + setLoaderTitle(false); + setProcessing(false); + } + }, function (txnE, txnerr) { + console.log(txnerr); + setLoaderTitle(false); + setProcessing(false); + }); + }); + } catch (err) { + console.log(err); + setLoaderTitle(false); + setProcessing(false); + } + } + + + function gotoPage(item){ + + } + + function _renderWarehouses() { + const screenWidth = Dimensions.get('window').width; + // Define which keys should appear in each row + const firstRowKeys = ["ChallanNo"]; + const secondRowKeys = ["ChallanType", "ChallanDate"]; + const thirdRowKeys = ["InwardQty", "ConfirmQty", "TotalLines"]; + + return ( + + + {WarehouseInwardData.length > 0 && WarehouseInwardData.map((item, index) => ( + props.navigation.navigate('WareHouseInwardDetail', { ...item, ChallanTypeId: item.ChallanTypeId, isDisable: item.CONFIRM_QTY == item.TotalLines })} // Pass the entire item object including ChallanTypeId + > + + + + {firstRowKeys.map((key, keyIndex) => ( + + + {key} + + + {item[key]} + + + ))} + + + {/* Second row */} + + {secondRowKeys.map((key, keyIndex) => ( + + + {key} + {item[key]} + + + ))} + + + + {thirdRowKeys.map((key, keyIndex) => ( + + + {key} + {item[key=="ConfirmQty"?"CONFIRM_QTY" :key]} + + + ))} + + {item.CONFIRM_QTY == item.TotalLines && + + + {"Uploaded"} + + } + + + + ))} + + + ); + } + + + return ( + + {processing && } + + + + + {/* + Warehouses + */} + { WarehouseInwardData.length==0 && } + { Object.keys(WarehouseInwardData).length>0 && + _renderWarehouses(WarehouseInwardData) + } + + + + ); +} + + + +const style = StyleSheet.create({ + reportCon: { + padding: 10, + }, + cardContainer: { + marginBottom: 10, + }, + card: { + backgroundColor: '#fff', + borderRadius: 10, + // borderWidth:0.5, + // borderColor:"grey", + shadowColor: '#000', + shadowOffset: { width: 0, height: 2 }, + shadowOpacity: 0.2, + shadowRadius: 2, + elevation: 2, + marginBottom: 10, + padding: 15, + }, + cardRow: { + paddingVertical: 5, + }, + cardRow2:{ + flexDirection: 'row', + paddingVertical: 5, + justifyContent:'space-between', + }, + cardRow3:{ + flexDirection: 'row', + paddingVertical: 5, + justifyContent:'space-between', + + }, + cardKey: { + // flex: 1, + // width:'120%' + }, + cardKey2: { + flex: 1, + // width:'120%' + }, + cardKeyText: { + color :'#707070', + // fontWeight: '500', + }, + cardValue: { + flex: 1, + }, + cardValueText: { + color: '#141414', + fontWeight: '500', + }, + reportItemBg: { + backgroundColor: '#f1f1f1', + }, + horizontalLine: { + height: 1, + backgroundColor: '#D3D3d3', + width: '100%', + }, +}); + + + +export default connect(mapStateToProps, mapDispatchToProps)(Warehouseinward); + + + \ No newline at end of file diff --git a/PerformicsSrc/src/screens/WarehouseinwardDetail.js b/PerformicsSrc/src/screens/WarehouseinwardDetail.js new file mode 100644 index 0000000..c08ce3f --- /dev/null +++ b/PerformicsSrc/src/screens/WarehouseinwardDetail.js @@ -0,0 +1,553 @@ +import React,{useState,useEffect} from 'react'; +import Container from '../components/container'; +import { useRoute } from '@react-navigation/native'; +import { globalStyles,customStyles,GetPageTheme } from "../styles/Global"; +import {StatusBar,Image,TextInput,View,Text,ScrollView,TouchableOpacity,Platform,PermissionsAndroid,FlatList,KeyboardAvoidingView, Alert, StyleSheet, Dimensions, Keyboard} from 'react-native'; +import { ReactReduxContext,connect,useSelector, useDispatch } from 'react-redux'; +import { mapStateToProps,mapDispatchToProps } from '../reducers/contextProvider'; +import SQLite from 'react-native-sqlite-2'; +import {notify} from '../components/notify'; +import moment from 'moment'; +import {getDownloadJson,marktext1,marktext2, UploadData2, validateNumber} from '../controller/functions'; +import {get_item,set_item,clear_item} from '../components/localStorage'; +import {version,sloganline,appname,testurl,db, colors_Arr} from '../constants/constants'; +import CustomHeader from '../components/customHeader'; +import {Card, DataTable, Menu, Switch} from 'react-native-paper'; +import {AntDesign, MaterialCommunityIcons} from '../components/icons'; +import { stat } from 'react-native-fs'; +import CustomLoader from '../components/CustomLoader'; +import LinearGradient from 'react-native-linear-gradient'; +import { AppTables } from '../constants/tableConstants'; +import { SvgXml } from 'react-native-svg'; +import {launchCamera, launchImageLibrary,CameraOptions} from 'react-native-image-picker'; +import * as RNFS from 'react-native-fs'; +import GradientButton from '../components/gradientButton'; + +import cameraImg from '../assets/performics/camera_front_image.svg' +import addImg from '../assets/performics/add_image.svg'; +import CustomModal from '../components/CustomModal'; +import { getMethodName, METHODS } from '../constants/methodNames'; +import { getPostData, getPostData2 } from '../components/downloadTasks'; +import { CustomPicker2 } from '../components/CustomPicker'; +import { ConfirmSaveAlert } from '../components/alert'; + +function WarehouseinwardDetail(props) { + const route = useRoute(); + const ST=props.StaticText || {}; + + const { item,ChallanTypeId,isDisable } = route.params; + const screenWidth = Dimensions.get('window').width; + + // get all theme styles acc to current theme set + const PageTheme=GetPageTheme(props.DarkMode,route.name); + const customStyle=customStyles(props.DarkMode,route.name); + + const [processing, setProcessing] = useState(true); + const [loaderTitle, setLoaderTitle] = useState('loading...'); + const [AllWarehouses, setAllWarehouses] = useState([]); + const [WarehouseInwardData, setWarehouseInwardData] = useState([]); + const [keysList, setKeysList] = useState([]); + + const [rerenderdata, setrerenderdata]= useState(0); + + const [NodataFound, setNodataFound] = useState(false); + const [hasUnsavedChanges,setHasUnsavedChanges] = useState(false); + const [reasons_list, setReasons_list] = useState([]); + const [showAlert, setShowAlert] = useState(false); + const [InwardQuantity, setInwardQuantity] = useState(0); + const [ActualQuantity, setActualQuantity] = useState(0); + + const d1=new Date(); + const d2=moment(d1).format('MM/DD/YYYY'); + + useEffect(() => { + + getData(); + const unsubscribe = props.navigation.addListener('beforeRemove', onBeforeRemove); + const willFocusSubscription = props.navigation.addListener('focus', () => { + getData(); + }); + + return function cleanup() { + willFocusSubscription(); + return unsubscribe; + }; + }, []); + + useEffect(() => { + const unsubscribe = props.navigation.addListener('beforeRemove', onBeforeRemove); + return unsubscribe; + }, [hasUnsavedChanges]); + + function onBeforeRemove(e){ + if (hasUnsavedChanges==true) { + e.preventDefault(); // Prevent default behavior of leaving the screen + onRemoveScreen(e); + } + else{ + return; + } + } + function onRemoveScreen(e){ + Alert.alert( + "", + "Do you really want to exit the screen?", + [ + { + text: "Cancel", + onPress: () => {}, + style: "cancel" + }, + { text: "OK", onPress: () => {setHasUnsavedChanges(false);props.navigation.dispatch(e.data.action);} } + ] + ); + } + + async function getData() { + try { + let token = await get_item('loginToken'); + let loginInfo = await get_item('loginInfo'); + const loginDetails = JSON.parse(loginInfo); + let desg = loginDetails.Designation || ''; + + await db.transaction(async function (txn) { + + let q3=`Select * From Master_WarehouseReason `; + await txn.executeSql(q3,[],async function (txn2, txnres2) { + if(txnres2.rows.length>0){ + let arr=[]; + for(var i=0;i 0) { + let arr = []; + let InwardQtyVal=0; + let ActualQty=0; + for (let i = 0; i < txnres.rows.length; i++) { + let data = txnres.rows.item(i); + + data["ConfirmQuantity"]=data?.ConfirmQuantity || data?.InwardQty ||"0" + data["DamageQuantity"]=(data?.DamageQuantity===0||data?.DamageQuantity==="0")?"0":data?.DamageQuantity + arr.push(data); + InwardQtyVal=InwardQtyVal+(data?.InwardQty||0) + ActualQty=ActualQty+Number(data?.ConfirmQuantity||0)+Number(data?.DamageQuantity||0) + } + setInwardQuantity(InwardQtyVal) + setActualQuantity(ActualQty) + + const keys = arr.length > 0 ? Object.keys(arr[0]).filter(key => ((key !== 'ItemId')&& (key !=='DamageQuantity') && (key !== 'ConfirmQuantity') && (key !== 'Reason') && (key !=='Id') && (key !=="ReasonId") && (key !=="Remark"))) : []; + + setKeysList(keys) + setLoaderTitle(false); + setProcessing(false); + setWarehouseInwardData(arr); + setrerenderdata(!rerenderdata); + } else { + setNodataFound(true); + setLoaderTitle(false); + setProcessing(false); + } + }, function (txnE, txnerr) { + console.log(txnerr); + setLoaderTitle(false); + setProcessing(false); + }); + }); + } catch (err) { + console.log(err); + setLoaderTitle(false); + setProcessing(false); + } + } + + + function gotoPage(item){ + + } + + + function onChange(val,key,type="",index){ + if(val!=''){ + let isValid=validateNumber(val,type); + if(!isValid){ + return; + } + } + let wareHList= WarehouseInwardData + let wareHobj=wareHList[index] + wareHobj[key]=val; + wareHList[index]=wareHobj + setWarehouseInwardData([...wareHList]); + // setrerenderdata(!rerenderdata); + } + + function onselectionChange3(option, keyLbl, keyVal, otherData){ + let wareHList= WarehouseInwardData + let wareHobj=wareHList[otherData?.index] + wareHobj[keyLbl]=option?.label; + wareHobj[keyVal]=option?.value; + wareHList[otherData?.index]=wareHobj + setWarehouseInwardData([...wareHList]); + // setrerenderdata(!rerenderdata); + } + + + async function validate() { + let isValid = true; + + // function showError(obj, isErr) { + // setErrorField(obj); + // setError(isErr); + // } + + return new Promise((resolve, reject) => { + for (const wObj of WarehouseInwardData) { + + // let errorobj = { EF_Window: window }; + if (!wObj?.ConfirmQuantity) { + // errorobj["EF_NExistReason"] = "NExistReason"; + // showError(errorobj, true); + notify(`Please fill Confirm Quantity of ${wObj?.ItemName}`, "LONG"); + resolve(false); + return; + } + else if(!wObj?.DamageQuantity){ + notify(`Please fill Damage Quantity of ${wObj?.ItemName}`,'LONG'); + resolve(false);return; + }else if((((Number(wObj?.ConfirmQuantity) || 0)+(Number(wObj?.DamageQuantity) || 0)) < Number(wObj.InwardQty)) && !wObj?.Reason ){ + notify(`Please select Reason of ${wObj?.ItemName}`,'LONG'); + resolve(false);return; + } + + } + + resolve(true); + return; + + }) + .then((val) => { + return val; + }) + .catch((err) => { + console.log(err); + return false; + }); + } + + function onSaveCancel() { + setShowAlert(false); + } + + async function onSubmitData() { + let isvalid = await validate(); + + if (isvalid) { + Keyboard.dismiss(); + setShowAlert(true); + } + } + + async function uploadData(){ + + setShowAlert(false); + setLoaderTitle(ST.SavingData + "..."); + setProcessing(true); + + const url=props.baseurl+getMethodName(METHODS.UPLOADJSON_METHOD); + console.log('pdurl',url) + + let payload = WarehouseInwardData.map((item)=>{ + let obj= { + ...item, + Reason: item?.Reason ||"", + ChallanTypeId: ChallanTypeId, + ReasonId: item?.ReasonId || 0, + Remark: item.Remark||"", + UserId: props.UserId + } + delete obj['ItemName'] + return obj; + }) + + let postData={ + 'MID':0, + 'Keys':'WareHouseInWard', + 'JsonData':JSON.stringify(payload), + 'UserId':props.UserId,}; + + console.log('postData',postData) + UploadData2(url,postData) + .then(async(res)=>{ + console.log('res:',res); + if(res.UploadJsonResult!=null && res.UploadJsonResult=='Success'){ + + saveData() + // let isUpdated=await updateVLUploadStatus(); + // if(isUpdated){ + // notify('Uploaded successfully'); + // } + + + }else{ + setProcessing(false); + notify('Cannot upload Ware House Inward data'); + } + }) + .catch((err)=>{ + console.log(err); + setProcessing(false); + notify('Cannot upload Ware House Inward data'); + }); + + } + + async function saveData() { + // setHasUnsavedChanges(false); + // BgUnsavedChanges(false); + setShowAlert(false); + setLoaderTitle(ST.SavingData + "..."); + setProcessing(true); + let d1n = new Date(); + let d3 = moment(d1n).format("MM/DD/YYYY"); + try { + + let q3=`DELETE FROM ${AppTables.WARE_HOUSE_INWARD} WHERE CHALLAN_TYPE_ID='${ChallanTypeId}' and VISIT_DATE='${d2}' `; + + + await db.transaction(async function (txn) { + // add data + var values = ""; + + await txn.executeSql(q3,[],async function (txn2, txnres) { + console.log('WARE_HOUSE_INWARD data deleted'); + },function (txnE,txnerr) { console.log(txnerr); }); + + + for (const warObj of WarehouseInwardData) { + const {ItemId,ItemName,ItemCode,InwardQty,ConfirmQuantity,DamageQuantity,Reason,ReasonId, Remark }=warObj; + + values += values != "" ? " , " : ""; + values += `('${ItemId}','${ItemName}','${ItemCode}','${InwardQty}','${ConfirmQuantity}','${DamageQuantity}','${Reason||""}','${ReasonId||""}','${ChallanTypeId}','${d2}','${Remark||""}')`; + } + + console.log("values:", values); + + let add_hdr_data = `INSERT INTO ${AppTables.WARE_HOUSE_INWARD} (ITEMID , ITEMNAME, ITEM_CODE, IN_WARD_QTY , CONFIRM_QTY, DAMAGE_QTY , REASON, REASON_ID, CHALLAN_TYPE_ID,VISIT_DATE,REMARK) VALUES ${values} `; + + await txn.executeSql( + add_hdr_data, + [], + async function (txn2, txnres) { + console.log("WARE_HOUSE_INWARD data added"); + + // clear_item("storeData"); + setProcessing(false); + notify("warehouse updated successfully"); + props.navigation.goBack(); + + }, + function (txnE, txnerr) { + console.log(txnerr); + setProcessing(false); + notify("Cannot add warehouse data"); + } + ); + }); + } catch (err) { + console.log(err); + } + } + + + return ( + + {processing && } + + {ConfirmSaveAlert(props, showAlert, onSaveCancel, uploadData)} + + + + + + + Actual Qty : {ActualQuantity} + + + + + + Inward Qty : {InwardQuantity} + + + + + + + { + return( + + + {keysList.map((key, keyIndex) => ( + + + {key} + + + {item[key]} + + + ))} + + + + {"Received Qty"} + {((Number(item.DamageQuantity||0)+Number(val))<= item.InwardQty) && onChange(val,'ConfirmQuantity','numeric',index)}} + /> + + + + + {"Damage Qty"} + {((Number(item.ConfirmQuantity||0)+Number(val))<= item.InwardQty) && onChange(val,'DamageQuantity','text',index);}} + /> + + + { item?.ConfirmQuantity && (item?.DamageQuantity!="") && ((Number(item?.ConfirmQuantity) || 0)+(Number(item?.DamageQuantity) || 0)!=0) && (Number(item?.ConfirmQuantity) || 0)+(Number(item?.DamageQuantity) || 0) < item.InwardQty && + + {"Select Reason"} + + { + + } + + } + + + {"Remark"} + {onChange(val,'Remark','text',index);}} + /> + + + + + + )}} + /> + + + + + + + + + + ); +} + + + +const style = StyleSheet.create({ + reportCon: { + padding: 10, + }, + cardContainer: { + marginBottom: 10, + }, + card: { + backgroundColor: '#fff', + borderRadius: 10, + shadowColor: '#000', + shadowOffset: { width: 0, height: 2 }, + shadowOpacity: 0.2, + shadowRadius: 2, + elevation: 2, + marginBottom: 10, + padding: 10, + }, + cardRow: { + flexDirection: 'row', + paddingVertical: 3, + // backgroundColor:'red' + }, + cardKey: { + flex: 0.4, + // width:'40%' + }, + cardKeyText: { + color :'#333333' + }, + cardValue: { + flex: 0.90, + // width:'60%' + }, + cardValueText: { + color: '#000', + fontWeight:'500' + }, + reportItemBg: { + backgroundColor: '#f1f1f1', + }, +}); + + + +export default connect(mapStateToProps, mapDispatchToProps)(WarehouseinwardDetail); + + + \ No newline at end of file diff --git a/PerformicsSrc/src/screens/WebViewScreen.js b/PerformicsSrc/src/screens/WebViewScreen.js new file mode 100644 index 0000000..ea2c45a --- /dev/null +++ b/PerformicsSrc/src/screens/WebViewScreen.js @@ -0,0 +1,66 @@ +import React, { useState, useEffect } from 'react'; +import Container from '../components/container'; +import { useRoute } from '@react-navigation/native'; +import { globalStyles, customStyles, GetPageTheme } from "../styles/Global"; +import { StatusBar, Image, TextInput, View, Text, ScrollView, TouchableOpacity, Platform, PermissionsAndroid, Modal, Animated } from 'react-native'; +import { connect } from 'react-redux'; +import { mapStateToProps, mapDispatchToProps } from '../reducers/contextProvider'; +import { notify } from '../components/notify'; +import { WebView } from 'react-native-webview'; +import CustomLoader from '../components/CustomLoader'; +import LinearGradient from 'react-native-linear-gradient'; +import CustomHeader from '../components/customHeader'; + +function WebViewScreen(props) { + + const route = useRoute(); + + const ST = props.StaticText || {}; + // get all theme styles acc to current theme set + const PageTheme = GetPageTheme(props.DarkMode, route.name); + const customStyle = customStyles(props.DarkMode, route.name); + + const [state, setState] = useState({ webviewurl: '' }); + const [processing, setProcessing] = useState(true); + const [loaderTitle, setLoaderTitle] = useState(); + const [storeData, setStoreData] = useState({}); + + const projectCode = props.projectCode; + + useEffect(() => { + setLoaderTitle(ST.Loading + '...') + let params = props.route.params ? props.route.params : {}; + let WebURL = params.url || {}; + let storeData1 = params.storeData || {}; + + setStoreData(storeData1); + console.log("checkurl-------", WebURL) + setState({ webviewurl: WebURL }) + setProcessing(false) + }, []); + + + return ( + + {processing && } + 0 ? `${storeData.StoreId}: ${storeData.StoreName}` : props.projectCode} /> + + + {/* + Training Content + */} + + {(state.webviewurl != '' && state.webviewurl != null) && } + + + + + + ); +} + +export default connect(mapStateToProps, mapDispatchToProps)(WebViewScreen); \ No newline at end of file diff --git a/PerformicsSrc/src/screens/Window.js b/PerformicsSrc/src/screens/Window.js new file mode 100644 index 0000000..86c0233 --- /dev/null +++ b/PerformicsSrc/src/screens/Window.js @@ -0,0 +1,2587 @@ +import React, { useState, useEffect, useRef } from 'react'; +import Container from '../components/container'; +import { useRoute } from '@react-navigation/native'; +import { globalStyles, customStyles, GetPageTheme } from "../styles/Global"; +import { StatusBar, Image, TextInput, View, Text, ScrollView, TouchableOpacity, Platform, PermissionsAndroid, FlatList, Alert, Animated, AppState, Keyboard } from 'react-native'; +import { ReactReduxContext, connect, useSelector, useDispatch } from 'react-redux'; +import { mapStateToProps, mapDispatchToProps } from '../reducers/contextProvider'; +import SQLite from 'react-native-sqlite-2'; +import { notify } from '../components/notify'; +import moment from 'moment'; +import { getDownloadJson, getKPIFields, marktext1, marktext2, resizeImage, restore_ImageWithMetaData, validateNumber } from '../controller/functions'; +import { get_item, set_item, clear_item } from '../components/localStorage'; +import { version, sloganline, appname, testurl, db, colors_Arr, common_ImagePath, ImageFolderPath } from '../constants/constants'; +import CustomHeader from '../components/customHeader'; +import { AntDesign, Entypo, FontAwesome, Fontisto, MaterialCommunityIcons } from '../components/icons'; +import CustomLoader from '../components/CustomLoader'; +import LinearGradient from 'react-native-linear-gradient'; +import { AppTables } from '../constants/tableConstants'; + +import * as RNFS from 'react-native-fs'; +import GradientButton from '../components/gradientButton'; +import addImg from '../assets/performics/add_image.svg'; +import CustomModal from '../components/CustomModal'; +import { Q_getpaidvisibility } from '../constants/ConstantQueries'; +import { Picker } from '@react-native-picker/picker'; +import { ConfirmSaveAlert } from '../components/alert'; +import ModalSelector from 'react-native-modal-selector' +import { CustomPicker, CustomPicker2 } from '../components/CustomPicker'; +import CustomCamera from '../components/Camera'; +import ImageViewer from 'react-native-image-zoom-viewer'; +import DateTimePicker from '@react-native-community/datetimepicker'; +import CameraImg from '../assets/performics/camera_front_image.svg' +import MultiSelect from 'react-native-multiple-select'; +import CheckBox from '@react-native-community/checkbox'; +import CameraImg3 from '../assets/performics/camera_tick.svg'; +import CameraImg2 from '../assets/performics/camera_icon.svg'; +import CameraImg4 from '../assets/performics/camera_asterisk.svg'; +import CameraImg5 from '../assets/image/astrickcamera.svg'; +import { PageTheme } from '../styles/Themes'; + +function Window(props) { + const route = useRoute(); + const ST = props.StaticText || {}; + + + // get all theme styles acc to current theme set + const PageTheme = GetPageTheme(props.DarkMode, route.name); + const customStyle = customStyles(props.DarkMode, route.name); + const animatedChoice = useRef(new Animated.Value(0)).current; + + const [processing, setProcessing] = useState(true); + const [loaderTitle, setLoaderTitle] = useState('loading...'); + const [isAdhocScreen, setIsAdhocScreen] = useState(false); + const [storeData, setStoreData] = useState({}); + const [currentMenu, setCurrentMenu] = useState({}); + const [rerenderdata, setrerenderdata] = useState(0); + const [rerenderdata2, setrerenderdata2] = useState(0); + const [rerenderdata3, setrerenderdata3] = useState(0); + const [rerenderdata4, setrerenderdata4] = useState(0); + + const [hasUnsavedChanges, setHasUnsavedChanges] = useState(false); + + const [WindowData, setWindowData] = useState([]); + const [reasons_list, setReasons_list] = useState([]); + const [Windows, setWindows] = useState([]); + const [show_zoomImage, setShow_zoomImage] = useState(false); + const Show_zoomImageRef = useRef(false); + const [refImageIndex, setrefImageIndex] = useState(0); + const [showAlert, setShowAlert] = useState(false); + const [zoomImageUrl, setZoomImageUrl] = useState([]); + const [showCamera, setShowCamera] = useState(false); + const [getImageProps, setGetImageProps] = useState({}); + const zoomView = useRef(null); + const [showRating, setShowRating] = useState(false); + const [RatingQtn, setRatingQtn] = useState({}); + const [RatingWindow, setRatingWindow] = useState({}); + const [RatingOrder, setRatingOrder] = useState([]); + + const [DisplayList, setDisplayList] = useState([]); + const [toRemoveId, setToRemoveId] = useState(''); + const [toRemoveItem, setToRemoveItem] = useState({}); + const [showRemoveConfirm_M, setshowRemoveConfirm_M] = useState(false); + const [showRAllC_M, setShowRAllC_M] = useState(false); + const [KPIFields, setKPIFields] = useState([]); + const [showSwitchCamera, setShowSwitchCamera] = useState(false); + + const [GridValue, setGridValue] = useState(false); + + const [DataCleanModal, setDataCleanModal] = useState(false); + const [DataCleanAnim, setDataCleanAnim] = useState(""); + const [DataCleanItem, setDataCleanItem] = useState({}); + const [isPresentClean, setIsPresentClean] = useState(0); + + const [InputChange, setInputChange] = useState([]); + const [ItemsInView, setItemsInView] = useState([]); + + const [SelectedImg, setSelectedImg] = useState(''); + const [showModal, setShowModal] = useState(false); + const [reCapImgModalObj, setReCapImgModalObj] = useState({}); + const [showImageSaveOp, setShowImageSaveOp] = useState(true); + const [StoreCameraAllow, setStoreCameraAllow] = useState(true); + const isBgDataExistsRef = useRef(false); + const [windData, setWindData] = useState(null); + + + const hasUnsavedChangesRef = React.useRef(hasUnsavedChanges); + const WindowDataRef = React.useRef(WindowData); + const StoreIdRef = React.useRef(null); + const ScreenNameRef = React.useRef(''); + + const onViewableItemsChanged = ({ viewableItems, }) => { + // Do stuff + //console.log("onViewableItemsChanged called:") + setItemsInView(viewableItems); + }; + + // error field states + const [errorfield, setErrorField] = useState({}); + const [error, setError] = useState(false); + + const FlatLConfCallbackPairs = useRef([{ viewabilityConfig: { itemVisiblePercentThreshold: 50 }, onViewableItemsChanged }]); + + const inputRefs = useRef({}); + + const d1 = new Date(); + const d2 = moment(d1).format('MM/DD/YYYY'); + + + useEffect(() => { + let params = props.route.params ? props.route.params : {}; + let storeData1 = params.storeData || {}; + let menu1 = params.menu || {}; + + let cameraAllow = storeData1.CameraAllow == 'true' || storeData1.CameraAllow == 1 ? true : false; + setStoreCameraAllow(cameraAllow); + + let isAdhoc = params.isAdhoc || false; + setIsAdhocScreen(isAdhoc); + setStoreData(storeData1); + setCurrentMenu(menu1); + + StoreIdRef.current = storeData1.StoreId + ScreenNameRef.current = { BgscreenName: menu1.ScreenName, BgMenuId: menu1.MenuId } + getData(storeData1, menu1); + + const AppStateSubscription = AppState.addEventListener('change', (pro) => { _handleAppStateChange(pro) }); + const unsubscribe = props.navigation.addListener('beforeRemove', onBeforeRemove); + + return function cleanup() { + AppStateSubscription.remove(); + return unsubscribe; + }; + }, []); + + const _handleAppStateChange = async (nextAppState) => { + if (nextAppState == 'background' && hasUnsavedChangesRef.current == true) { + // ✅ include this + let newData = { + storeBGData: WindowDataRef.current, + menuName: ScreenNameRef.current && ScreenNameRef.current.BgscreenName, + StoreId1: StoreIdRef.current, + BgMenuID: ScreenNameRef.current && ScreenNameRef.current.BgMenuId, + visiteDate: d2 + } + let WindowsStr = JSON.stringify(newData) + console.log("Saving WindowDataRef:", WindowsStr); + await set_item('storeData', WindowsStr); + } + } + + useEffect(() => { + const unsubscribe = props.navigation.addListener('beforeRemove', onBeforeRemove); + return unsubscribe; + }, [hasUnsavedChanges]); + + useEffect(() => { + const unsubscribe = props.navigation.addListener('beforeRemove', onBeforeRemove); + return unsubscribe; + }, [showCamera]); + + useEffect(() => { + const unsubscribe = props.navigation.addListener('beforeRemove', onBeforeRemove); + return unsubscribe; + }, [show_zoomImage]); + + + function onBeforeRemove(e) { + if (showCamera == true) { + e.preventDefault(); + setShowCamera(false); + } + else if (Show_zoomImageRef.current == true) { + e.preventDefault(); + UpdateShow_zoomImageRef(false); + } + else { + if (hasUnsavedChanges == true) { + e.preventDefault(); // Prevent default behavior of leaving the screen + onRemoveScreen(e); + } + else { + return; + } + } + } + + function BgUnsavedChanges(val) { + hasUnsavedChangesRef.current = val + setHasUnsavedChanges(val); + } + + function BgWindowData(val) { + WindowDataRef.current = val + setWindowData(val); + } + + function UpdateShow_zoomImageRef(val) { + Show_zoomImageRef.current = val + setShow_zoomImage(val); + } + + function onRemoveScreen(e) { + Alert.alert( + "", + "Do you really want to exit the screen?", + [ + { + text: "Cancel", + onPress: () => { }, + style: "cancel" + }, + { + text: "OK", onPress: async () => { + // setHasUnsavedChanges(false); + BgUnsavedChanges(false) + await clear_item('storeData') + props.navigation.dispatch(e.data.action); + } + } + ] + ); + } + + + async function getData(storeData1, menu1) { + try { + let { StoreId, ChainId, StateId, StoreTypeId } = storeData1; + + let AllKPIFields = await getKPIFields(menu1); + setKPIFields(AllKPIFields); + // set switch camera flag as defined in mapping menu flag (if exists) + let SwitchingCameraI = AllKPIFields.findIndex(i => i.KPIFieldName == 'SwitchingCamera'); + let SwitchingCameraObj = SwitchingCameraI >= 0 ? AllKPIFields[SwitchingCameraI] : {}; + let SwitchingCamera = SwitchingCameraI >= 0 ? SwitchingCameraObj['KPIFieldEnable'] : false; + setShowSwitchCamera(SwitchingCamera); + + let storeBGData1 = [], bgStoreJson = {}, isBgDataExists = false; + let windData = await get_item('storeData') + console.log("backKillData", windData); + if (windData != null && windData != '' && windData != undefined) { + setWindData(windData) + let StoreJson = JSON.parse(windData) + let { storeBGData, menuName, StoreId1, BgMenuID, visiteDate } = StoreJson + if (storeBGData.length > 0 && menuName == menu1.ScreenName && StoreId1 == StoreId && menu1.MenuId == BgMenuID && visiteDate == d2) { + isBgDataExists = true; + storeBGData1 = storeBGData; + isBgDataExistsRef.current = true; + + bgStoreJson = StoreJson + BgUnsavedChanges(true) + BgWindowData(storeBGData) + } + } + + await db.transaction(async function (txn) { + let q3 = `Select distinct WindowReasonId as ReasonId,WindowReason as Reason From Master_WindowReason where MenuId='${menu1.MenuId}' `; + await txn.executeSql(q3, [], async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + let arr = []; + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + arr.push(data); + if (i == txnres2.rows.length - 1) { + setReasons_list(arr); + } + } + } + }, function (txnE, txnerr) { console.log(txnerr); },); + + // check if data exists + let selectlist = ` distinct w.STORE_ID as StoreId,w.WINDOW_HEADER_ID as windowHeaderId,wd.WindowDefinitionId,wd.WindowId,wd.WindowName,wd.WindowTable,wd.WindowField,wd.WindowValue,wd.ChildName,wd.WindowRefImage,wd.WindowRefImagePopUp,wd.WindowElementCheckAssortment,wd.WindowElementStockRequired,w.IS_PRESENT as IsPresent,wd.WindowNotExistCamera,w.WINDOW_NA_IMAGE as WindowNAImage,wd.WindowExistReasonEnable,wd.WindowNotExistReasonEnable,w.REASON_ID as ReasonId,w.REASON as Reason,wd.NoOfSplit,wd.WindowImage1,wd.WindowImage2,wd.WindowImage1Lable,wd.WindowImage2Lable,wd.WindowImage1CameraGrid,wd.WindowImage2CameraGrid,wd.StockQtyRequired`; + let join = ` inner join Master_WindowDefinition wd on w.WINDOW_DEFINITION_ID=wd.WindowDefinitionId `; + let q = ` Select ${selectlist} from ${AppTables.WINDOW_HDR_DATA} w ${join} where w.STORE_ID='${StoreId}' and w.MENU_ID='${menu1.MenuId}' order by wd.WinDefSequence `; + + // else pick data from masters + let selectlist2 = ` distinct s.StoreId,w.WindowDefinitionId,w.WindowId,w.WindowName,w.WindowTable,w.WindowField,w.WindowValue,w.ChildName,w.WindowRefImage,w.WindowRefImagePopUp,w.WindowElementCheckAssortment,w.WindowElementStockRequired,'' as IsPresent,w.WindowNotExistCamera,'' as WindowNAImage,w.WindowExistReasonEnable,w.WindowNotExistReasonEnable,'' as ReasonId,'' as Reason,w.NoOfSplit,w.WindowImage1,w.WindowImage2,w.WindowImage1Lable,w.WindowImage2Lable,w.WindowImage1CameraGrid,w.WindowImage2CameraGrid,w.StockQtyRequired`; + let join2 = ` inner join Mapping_StoreWindow s on w.WindowDefinitionId=s.WindowDefinitionId `; + let q2 = ` Select ${selectlist2} from Master_WindowDefinition w ${join2} where s.StoreId='${StoreId}' and w.MenuId='${menu1.MenuId}' order by w.WinDefSequence `; + + await txn.executeSql(q, [], async function (txn2, txnres2) { + console.log("added count local:", txnres2.rows.length); + if (txnres2.rows.length > 0) { + let arr = []; let images = [], allWindowsData = [], inputChangeFlag = []; + for (let i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + let isPresent = data.IsPresent == '1' || data.IsPresent == 1 ? 1 : 0; + if (isBgDataExists) { + let storeBgIndex = storeBGData1.findIndex(i => i.WindowId == data.WindowId && i.WindowDefinitionId == data.WindowDefinitionId) + let storeBgObj = storeBgIndex >= 0 ? storeBGData1[storeBgIndex] : {}; + isPresent = storeBgObj.isPresent == '1' || storeBgObj.isPresent == 1 ? 1 : 0; + } + let animatedChoice = new Animated.Value(isPresent); + let animatedHeight = new Animated.Value(450); + data.animatedHeight = animatedHeight + data.animatedChoice = animatedChoice; + data.NoOfSplit = parseInt(data.NoOfSplit); + let NoOfSplit = data.NoOfSplit; + let isStockReq = data.WindowElementStockRequired == 'true' || data.WindowElementStockRequired == 1 ? 1 : 0; + + let imgObj = { imgIndex: (i + 1), url: data.WindowRefImage, props: {} } + images.push(imgObj); + + let WindowSplits = await getWindowSplits(NoOfSplit, data, storeData1, menu1); + let WQr = await getWindowQuestions(data, storeData1, isPresent, menu1, isBgDataExists, bgStoreJson); + console.log("called--",i,WQr); + + let WindowQuestions = WQr['WindowQuestions'] || []; + let WindowQA = WQr['WindowQA'] || {}; + let WSd = isStockReq == true ? await getWindowStockData(data, storeData1, isPresent, menu1) : { 'WStocks': [], 'WStocksData': [] }; + let WStocks = WSd['WStocks'] || []; + let WStocksData = WSd['WStocksData'] || []; + let isAllChecked = WSd['isAllChecked'] != null ? WSd['isAllChecked'] : 0; + + let isNAImageAvl = data.WindowNotExistCamera == 'true' || data.WindowNotExistCamera == 1 ? 1 : 0; + let NAImage1 = isNAImageAvl == 1 && data.WindowNAImage != null ? data.WindowNAImage : ''; + let NAImage1Path = NAImage1 != '' ? 'file://' + ImageFolderPath + menu1.ScreenName + "/" + NAImage1 : ''; + + let windowDataObj = { 'WindowId': data.WindowId, 'WindowDefinitionId': data.WindowDefinitionId, 'WindowSplits': WindowSplits, 'WindowQA': WindowQA, 'WStocksData': WStocksData, 'NAImage1': NAImage1, 'NAImage1Path': NAImage1Path, 'ReasonId': data.ReasonId, 'Reason': data.Reason, 'isPresent': isPresent, 'isAllSKUChecked': isAllChecked }; + data['WindowQuestions'] = WindowQuestions; + data['WindowStocks'] = WStocks; + + let changesFlag = { WindowId: data.WindowId, WindowDefinitionId: data.WindowDefinitionId, Flag: true } + inputChangeFlag.push(changesFlag) + + arr.push(data); + allWindowsData.push(windowDataObj); + if (i == txnres2.rows.length - 1) { + let { menuName, StoreId1, BgMenuID } = bgStoreJson + if (!isBgDataExists) { + BgWindowData(allWindowsData) + } + console.log("arrr_data---", JSON.stringify(allWindowsData)); + setInputChange(inputChangeFlag) + setWindows(arr); + setZoomImageUrl(images); + setProcessing(false); + } + } + } + else { + await txn.executeSql(q2, [], async function (txn2, txnres2) { + console.log("load count:", txnres2.rows.length); + if (txnres2.rows.length > 0) { + let arr = [], images = [], allWindowsData = [], inputChangeFlag = []; + for (let i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + let isPresent = 0; + if (isBgDataExists) { + let storeBgIndex = storeBGData1.findIndex(i => i.WindowId == data.WindowId && i.WindowDefinitionId == data.WindowDefinitionId) + let storeBgObj = storeBgIndex >= 0 ? storeBGData1[storeBgIndex] : {}; + isPresent = storeBgObj.isPresent == '1' || storeBgObj.isPresent == 1 ? 1 : 0; + } + let animatedChoice = new Animated.Value(isPresent); + let animatedHeight = new Animated.Value(450); + data.animatedHeight = animatedHeight + data.animatedChoice = animatedChoice; + + data.NoOfSplit = parseInt(data.NoOfSplit); + + let imgObj = { imgIndex: (i + 1), url: data.WindowRefImage, props: {} } + images.push(imgObj); + + let WindowSplits = []; + for (var s = 0; s < data.NoOfSplit; s++) { + let obj = { 'Image1Name': '', 'Image1': '', 'Image2Name': '', 'Image2': '', img1Required: true, img2Required: true }; + WindowSplits.push(obj); + } + let WQr = await getWindowQuestions(data, storeData1,isPresent, menu1,isBgDataExists,bgStoreJson); + let WindowQuestions = WQr['WindowQuestions'] || []; + let WindowQA = WQr['WindowQA'] || {}; + let WSd = await getWindowStockData(data, storeData1, false, menu1); + let WStocks = WSd['WStocks'] || []; + let WStocksData = WSd['WStocksData'] || []; + let isAllChecked = WSd['isAllChecked'] != null ? WSd['isAllChecked'] : 0; + + + let windowDataObj = { 'WindowId': data.WindowId, 'WindowDefinitionId': data.WindowDefinitionId, 'WindowSplits': WindowSplits, 'WindowQA': WindowQA, 'WStocksData': WStocksData, 'isAllSKUChecked': isAllChecked }; + data['WindowQuestions'] = WindowQuestions; + data['WindowStocks'] = WStocks; + + let changesFlag = { WindowId: data.WindowId, WindowDefinitionId: data.WindowDefinitionId, Flag: false } + inputChangeFlag.push(changesFlag) + arr.push(data); + allWindowsData.push(windowDataObj); + if (i == txnres2.rows.length - 1) { + let { menuName, StoreId1, BgMenuID, visiteDate } = bgStoreJson + if (!isBgDataExists) { + BgWindowData(allWindowsData) + } + console.log('arrr----:', JSON.stringify(allWindowsData)); + setInputChange(inputChangeFlag) + setWindows(arr); + setZoomImageUrl(images); + setProcessing(false); + } + } + } + else { + setProcessing(false); + } + }, function (txnE, txnerr) { console.log(txnerr); setProcessing(false); },); + } + }, function (txnE, txnerr) { console.log(txnerr); setProcessing(false); },); + + }); + } catch (err) { + console.log(err); + } + } + + + async function focusToNext(WindowStocks, windowIndex, stockProd, index) { + if (index == WindowStocks.length - 1) { + return; + } + try { + let refIn2 = inputRefs.current['input1_' + WindowStocks[index + 1].WindowDefinitionId + '_' + WindowStocks[index + 1].WindowStockDefinitionId]; + if (refIn2 != null) { + refIn2.focus(); + } + } + catch (err) { + console.log(err); + } + + } + + async function getWindowSplits(NoOfSplit, window, storeData1, menu1) { + let WindowSplits_def = []; + for (let s = 0; s < NoOfSplit; s++) { + let obj = { 'Image1Name': '', 'Image1': '', 'Image2Name': '', 'Image2': '', img1Required: true, img2Required: true }; + WindowSplits_def.push(obj); + } + return new Promise((resolve, reject) => { + + db.transaction(async function (txn) { + + let q = `select * from ${AppTables.WINDOW_IMAGES} where WINDOW_HEADER_ID='${window.windowHeaderId}' and STORE_ID='${storeData1.StoreId}' and MENU_ID='${menu1.MenuId}' `; + + await txn.executeSql(q, [], async function (txn2, txnres2) { + + if (txnres2.rows.length > 0) { + let arr = []; + for (let i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + // console.log(data.WINDOW_HEADER_ID) + let isImage1 = window.WindowImage1 == 'true' || window.WindowImage1 == 1 ? 1 : 0; + let isImage2 = window.WindowImage2 == 'true' || window.WindowImage2 == 1 ? 1 : 0; + + let Image1 = isImage1 == 1 && data.IMAGE1 != null && data.IMAGE1 != '' ? 'file://' + ImageFolderPath + menu1.ScreenName + "/" + data.IMAGE1 : ''; + let Image2 = isImage2 == 1 && data.IMAGE2 != null && data.IMAGE2 != '' ? 'file://' + ImageFolderPath + menu1.ScreenName + "/" + data.IMAGE2 : ''; + let obj = { 'Image1Name': data.IMAGE1, 'Image1': Image1, 'Image2Name': data.IMAGE2, 'Image2': Image2 }; + arr.push(obj); + + if (i == txnres2.rows.length - 1) { + resolve(arr) + } + } + } + else { + resolve(WindowSplits_def) + } + }, function (txnE, txnerr) { console.log(txnerr); resolve(WindowSplits_def) },); + }); + }).then((val) => { + return val + }).catch((err) => { + console.log(err); + return WindowSplits_def; + }); + } + + // ///jp fixed queation enable disable on app kill + // const getWindowQuestionsById = (bgJsonDta, WindowId, WindowDefinitionId) => { + // const item = bgJsonDta?.storeBGData?.find( + // i => i.WindowId == WindowId && i.WindowDefinitionId == WindowDefinitionId + // ); + + // const values = item?.WindowQuestions; + + // if (Array.isArray(values) && values.length > 0) { + // return values; + // } else { + // return bgJsonDta?.storeBGData || []; + // } + // }; + + ///jp fixed queation enable disable on app kill + const getWindowQuestionsById = (bgJsonDta, WindowId, WindowDefinitionId) => { + const item = bgJsonDta?.storeBGData?.find(i => i.WindowId == WindowId && i.WindowDefinitionId == WindowDefinitionId); + return item?.WindowQuestions || [] + }; + + ///jp fixed queation enable disable on app kill + const getWindowQA = (bgJsonDta, WindowId, WindowDefinitionId) => { + const item = bgJsonDta?.storeBGData?.find(i => i.WindowId == WindowId && i.WindowDefinitionId == WindowDefinitionId); + return item?.WindowQA || null + }; + + async function getWindowQuestions(window, storeData1, isInserted = false, menu1, isBgDataExists, bgStoreJson) { + let obj = { 'WindowQA': {}, 'WindowQuestions': [] } + let questionsBg = [] + ///jp fixed queation enable disable on app kill + console.log("bgStoreJson", bgStoreJson); + + if (isBgDataExists) { + questionsBg = await getWindowQuestionsById(bgStoreJson, window?.WindowId, window?.WindowDefinitionId); + console.log("bgStoreJson_new", questionsBg); + } + + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + var q = '', selectlist = '', join = '', join2 = ''; + if ((isInserted == true || isInserted == 1) && !isBgDataExists) { + selectlist = ` DISTINCT q.QUESTION_ID as WindowQuestionId,q.QUESTION_CODE as WindowQuestionCode,wq.WindowQuestionName,wq.QuestionType,wq.WQShowCamera,wq.WQCameraMandatory,wq.WQLengthValidationRequired,wq.WQMinimumChar,wq.WQMaximumChar,wq.WQDecimalPoint,wq.WQDateRangeMin,wq.WQDateRangeMax,wq.WQVoiceLengthInMinutes,wq.WQDefaultQuestionEnable,q.IS_DISABLED,q.ANSWER as Answer,q.ANSWER_ID as AnswerId,q.MULTI_OPTIONS_IDS as multi_op_ids,q.IMAGE_ALLOW1 as WAShowCamera,q.IMAGE1 as Image1 `; + join2 = ` inner join Mapping_WindowQuestion mq on mq.WindowQuestionId=wq.WindowQuestionId `; + join = ` inner join Master_WindowQuestion wq on wq.WindowQuestionId=q.QUESTION_ID `; + q = `select ${selectlist} from ${AppTables.WINDOW_CHILD_DATA} q ${join} ${join2} where q.STORE_ID='${storeData1.StoreId}' and MENU_ID='${menu1.MenuId}' and q.WINDOW_DEFINITION_ID='${window.WindowDefinitionId}' and q.WINDOW_ID='${window.WindowId}' order by wq.WindowQuestionSequence `; + } + else { + selectlist = ` DISTINCT wq.WindowQuestionId,wq.WindowQuestionCode,wq.WindowQuestionName,wq.QuestionType,wq.WQShowCamera,wq.WQCameraMandatory,wq.WQLengthValidationRequired,wq.WQMinimumChar,wq.WQMaximumChar,wq.WQDecimalPoint,wq.WQDateRangeMin,wq.WQDateRangeMax,wq.WQVoiceLengthInMinutes,wq.WQDefaultQuestionEnable `; + join = ` inner join Mapping_WindowQuestion mq on mq.WindowQuestionId=wq.WindowQuestionId `; + q = `select ${selectlist} from Master_WindowQuestion wq ${join} where mq.WindowDefinitionId='${window.WindowDefinitionId}' order by wq.WindowQuestionSequence `; + } + + console.log("qqqqqqqqqq------",); + + await txn.executeSql(q, [], async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + let arr = []; + let wqa_obj = {}; + for (let i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + let answers = []; + data.WQDefaultQuestionEnable = data.WQDefaultQuestionEnable == 1 || data.WQDefaultQuestionEnable == 'true' ? true : false; + + if (isInserted == true || isInserted == 1) { + console.log("dataInserted---", data); + data['isDisabled'] = data.IS_DISABLED == true || data.IS_DISABLED == "true" ? true : false; + ///jp fixed queation enable disable on app kill + if (isBgDataExists && questionsBg != null && questionsBg != undefined && Array.isArray(questionsBg) && questionsBg.length > 0) { + const isEnabled = questionsBg.some(q => + q.WindowQuestionId === data.WindowQuestionId && q.isDisabled === false + ); + console.log("isEnabled", isEnabled); + if (isEnabled) { + data['isDisabled'] = false; + } else { + data['isDisabled'] = true; + } + } else { + data['isDisabled'] = !data.WQDefaultQuestionEnable; + } + } + ///jp fixed queation enable disable on app kill + else if (isBgDataExists) { + data['isDisabled'] = !data.WQDefaultQuestionEnable; + if (questionsBg != null && questionsBg != undefined && Array.isArray(questionsBg) && questionsBg.length > 0) { + const isEnabled = questionsBg.some(q => + q.WindowQuestionId === data.WindowQuestionId && q.isDisabled === false + ); + if (isEnabled) { + data['isDisabled'] = false; + } else { + data['isDisabled'] = true; + } + } + } else { + data['isDisabled'] = !data.WQDefaultQuestionEnable; + } + + if (data.QuestionType == 'Multi choice list' || data.QuestionType == 'Single choice list' || data.QuestionType == 'Rating') { + answers = await getWindowAnswers(data); + if (data.QuestionType == 'Rating') { + data.showRating = false; + } + } + else if (data.QuestionType == 'Date') { + data.showDatePicker = false; + } + data['Answers'] = answers; + let id_key = data.WindowQuestionId + '_AnswerId'; + let ans_key = data.WindowQuestionId + '_Answer'; + let multi_key = data.WindowQuestionId + '_MultiOption'; + let date_key = data.WindowQuestionId + '_Date'; + let img_key = data.WindowQuestionId + '_ImagePath1'; + let imgname_key = data.WindowQuestionId + '_ImageName1'; + let rating_key = data.WindowQuestionId + '_Rating'; + + + let showImageTag = (data.WQShowCamera == 'true' || data.WQShowCamera == 1); + + data.AnswerId != null ? wqa_obj[id_key] = data.AnswerId : ''; + data.Answer != null ? wqa_obj[ans_key] = data.Answer : ''; + + + let selansid = data.AnswerId != null ? data.AnswerId : ''; + if (data.QuestionType == 'Multi choice list' && selansid != '' && data.multi_op_ids != null) { + selansid = data.multi_op_ids ? data.multi_op_ids.split(',') : []; + wqa_obj[multi_key] = data.multi_op_ids; + } + + if ((data.QuestionType == 'Single choice list' || data.QuestionType == 'Multi choice list') && selansid != '' && selansid != null) { + if (data.Answers && data.Answers.length > 0) { + for (var k = 0; k < data.Answers.length; k++) { + let ansss = data.Answers[k]; + let isandImgAl = (ansss.WAShowCamera == 1 || ansss.WAShowCamera == 'true'); + if (data.QuestionType == 'Single choice list' && (isandImgAl && ansss.AnswerId == selansid)) { + showImageTag = true; + } + else if (data.QuestionType == 'Multi choice list' && (isandImgAl && selansid.indexOf(ansss.AnswerId) >= 0)) { + showImageTag = true; + } + } + } + } + + if (showImageTag && data.Answer != null) { + let imgPath = (Platform.OS == 'ios' ? 'file://' : '') + ImageFolderPath + menu1.ScreenName + "/" + data.Image1; + wqa_obj[imgname_key] = data.Image1; + wqa_obj[img_key] = imgPath; + } + + + + if (data.QuestionType == 'Date' && data.Answer != null) { + let dayonly = moment().format('DD'); + let actual_date = data.Answer ? data.Answer.split('/') : []; + let month = actual_date[0], year = actual_date[1]; + let fulldate = month + '/' + dayonly + '/' + year; + wqa_obj[date_key] = fulldate; + + } + + arr.push(data); + if (i == txnres2.rows.length - 1) { + obj['WindowQuestions'] = arr; + obj['WindowQA'] = wqa_obj; + console.log("test--------",obj); + + resolve(obj) + } + } + } + else { + resolve(obj) + } + }, function (txnE, txnerr) { console.log(txnerr); resolve(obj) },); + }); + }).then((val) => { + return val + }).catch((err) => { + console.log(err); + return obj; + }); + } + + + async function getWindowAnswers(qtn) { + + return new Promise((resolve, reject) => { + + db.transaction(async function (txn) { + var q = '', selectlist = ''; + selectlist = ` DISTINCT WindowAnswerId as AnswerId,WindowAnswerName as Answer,WAShowCamera,WACameraMandatory,WAQuestionEnable,WAQuestionDisable `; + q = `select ${selectlist} from Master_WindowQuestion where WindowQuestionId='${qtn.WindowQuestionId}' order by WASequence `; + + await txn.executeSql(q, [], async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + let arr = []; + for (let i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + arr.push(data); + if (i == txnres2.rows.length - 1) { + resolve(arr) + } + } + } + else { + resolve([]) + } + }, function (txnE, txnerr) { console.log(txnerr); resolve([]) },); + }); + }).then((val) => { + return val + }).catch((err) => { + console.log(err); + return []; + }); + } + + async function getWindowStockData(window, storeData1, isInserted = false, menu1 = {}) { + let obj = { 'WStocks': [], 'WStocksData': [] } + let { StoreId, StateId, ChainId, StoreTypeId, StoreClassId, StoreCategoryId } = storeData1; + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + var q = '', selectlist = '', join = ''; + let checkassrt = window.WindowElementCheckAssortment == 'true' || window.WindowElementCheckAssortment == 1 ? true : false; + + if (isInserted == true) { + if (checkassrt) { + join = ` inner join Mapping_ProductAssortmentStorewise a on a.ProductId=s.WINDOW_STOCK_VALUE and a.StoreId='${StoreId}'`; + } + selectlist = ` distinct s.WINDOW_STOCK_DEFINITION_ID as WindowStockDefinitionId, s.WINDOW_DEFINITION_ID as WindowDefinitionId,s.WINDOW_STOCK_TABLE as WindowStockTable,s.WINDOW_STOCK_FIELD as WindowStockField,s.WINDOW_STOCK_VALUE as WindowStockValue,s.WINDOW_STOCK_MBQ as WindowStockMBQ,s.PRODUCT_NAME as ProductName, s.STOCK as Stock,s.IS_WIND_PRESENT as isWindPresent `; + q = `select ${selectlist} from ${AppTables.WINDOW_STOCK_DATA} s ${join} where s.WINDOW_DEFINITION_ID='${window.WindowDefinitionId}' and s.STORE_ID='${storeData1.StoreId}' and MENU_ID='${menu1.MenuId}' `; + } else { + if (checkassrt) { + join = ` inner join Mapping_ProductAssortmentStorewise a on a.ProductId=s.WindowStockValue and a.StoreId='${StoreId}' `; + } + selectlist = ` distinct s.WindowStockDefinitionId, s.WindowDefinitionId,s.WindowStockTable,s.WindowStockField,s.WindowStockValue,s.WindowStockMBQ,s.ProductName `; + q = `select ${selectlist} from Master_WindowStockDefinition s ${join} where s.WindowDefinitionId='${window.WindowDefinitionId}' `; + } + if (checkassrt) { + q += ` and a.StoreId='${storeData1.StoreId}' `; + } + q += isInserted ? ` order by s.PRODUCT_NAME ` : ` order by s.ProductName `; + + + + await txn.executeSql(q, [], async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + let arr = [], WStocksData = []; + let isAllChecked = 1; + for (let i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + if (isInserted == true && data.Stock != null) { + inputRefs.current['input1_' + data.WindowDefinitionId + "_" + data.WindowStockDefinitionId] = ''; + let stockData_obj = { 'ProductId': data.WindowStockValue, 'Stock': data.Stock, 'isWindPresent': (data.isWindPresent != null ? data.isWindPresent : 0) } + WStocksData.push(stockData_obj); + } + if (data.isWindPresent == null || data.isWindPresent == 0 || data.isWindPresent == '0' || data.isWindPresent == '') { + isAllChecked = 0; + } + arr.push(data); + if (i == txnres2.rows.length - 1) { + obj['WStocks'] = arr; + obj['WStocksData'] = WStocksData; + obj['isAllChecked'] = isAllChecked; + resolve(obj) + } + } + } + else { + resolve(obj) + } + }, function (txnE, txnerr) { console.log(txnerr); resolve(obj) },); + }); + }).then((val) => { + return val + }).catch((err) => { + console.log(err); + return obj; + }); + } + + + async function getImage(imgdata) { + let type = getImageProps.type || ''; + let window = getImageProps.window || {}; + let splitItem = getImageProps.splitItem || {}; + let splitItemIndex = getImageProps.splitItemIndex || 0; + let qtn = getImageProps.qtn || {}; + let cameraType = getImageProps.cameraType != null ? getImageProps.cameraType : '1'; + + if (typeof imgdata == 'object' && imgdata.errorCode == 'camera_unavailable') { + notify('Camera unavailable'); + } + else if (typeof imgdata == 'object' && imgdata.uri != null) { + const img = imgdata; + const imgurl = img.uri, imgWidth = img.width, imgHeight = img.ExtendedHeight; + let isImgFromGallery = img.fromGallery != null ? img.fromGallery : false; + let picture_clickedd = isImgFromGallery == true ? img.datetime : new Date(); + + let picture_clicked_time = moment(picture_clickedd).format('MM-DD-YYYY HH:mm:ss') + let picture_clicked_time_for_pic_name = moment(picture_clickedd).format('MMDDYYYY_HHmmss') + + + console.log("time", picture_clicked_time); + console.log("time1", picture_clicked_time_for_pic_name); + let calculate_tym_date_for_filename = picture_clicked_time_for_pic_name; + let calculate_tym_date_over_img = picture_clicked_time; + + let filename = storeData.StoreId + '_' + window.WindowDefinitionId + '_' + window.WindowId + '_' + (props.UserId || '') + '_WindowImg-' + calculate_tym_date_for_filename + '.jpg'; + + let allData = WindowData; + let defData = { 'WindowId': window.WindowId, 'WindowDefinitionId': window.WindowDefinitionId }; + const wind_index = allData.findIndex(i => i.WindowId == window.WindowId && i.WindowDefinitionId == window.WindowDefinitionId); + let wind = wind_index >= 0 ? allData[wind_index] : defData; + + let camera1Label = window.WindowImage1Lable || ''; + let camera2Label = window.WindowImage2Lable || ''; + let extraLabel = ''; + + if (cameraType == '2') { + var QD = wind.WindowQA || {}; + var image_key = qtn.WindowQuestionId + '_ImageName1'; + var image_key_path = qtn.WindowQuestionId + '_ImagePath1'; + QD[image_key] = filename; + extraLabel = 'Qtn Id: ' + qtn.WindowQuestionId; + } + else if (cameraType == '3') { + var image_key = 'NAImage1'; + var image_key_path = 'NAImage1Path'; + wind[image_key] = filename; + extraLabel = 'Not Exist'; + } + else { + var WindowSplits = wind.WindowSplits || []; + var image_key = type == '1' ? 'Image1Name' : 'Image2Name'; + var image_key_path = type == '1' ? 'Image1' : 'Image2'; + splitItem[image_key] = filename; + extraLabel = type == '1' ? camera1Label : camera2Label; + } + + const mark_text1 = calculate_tym_date_over_img; + const mark_text2 = 'Store Name:' + storeData.StoreName + ' | Store Id:' + storeData.StoreId + ' | User Id:' + storeData.EmpId + ' | WindowDef Id:' + window.WindowDefinitionId + (extraLabel != '' ? ' (' + extraLabel + ')' : '') + ' | Image Type: ' + currentMenu.MenuName + ' | Date:' + calculate_tym_date_over_img; + + let imagePath = `${ImageFolderPath + currentMenu.ScreenName}/${filename}`; + await RNFS.copyFile(imgurl, imagePath) + .then(async (resn) => { + // render data with clicked image + let uri = 'file://' + imagePath; + // console.log('image marker:', uri); + + if (cameraType == '2') { + QD[image_key_path] = uri; + wind.WindowQA = QD; + wind_index >= 0 ? allData[wind_index] = wind : allData.push(wind); + // setWindowData(allData); + BgWindowData(allData) + BgUnsavedChanges(true) + // setHasUnsavedChanges(true); + setrerenderdata3(!rerenderdata3); + } + else if (cameraType == '3') { + wind[image_key_path] = uri; + wind_index >= 0 ? allData[wind_index] = wind : allData.push(wind); + // setWindowData(allData); + BgWindowData(allData) + BgUnsavedChanges(true) + // setHasUnsavedChanges(true); + setrerenderdata(!rerenderdata); + } + else { + //console.log('split image updated'); + splitItem[image_key_path] = uri; + splitItemIndex >= 0 ? WindowSplits[splitItemIndex] = splitItem : WindowSplits.push(splitItem); + wind.WindowSplits = WindowSplits; + wind_index >= 0 ? allData[wind_index] = wind : allData.push(wind); + // setWindowData(allData); + BgWindowData(allData) + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata2(!rerenderdata2); + } + + let objIndex = InputChange.findIndex(obj => obj.WindowId == window.WindowId && obj.WindowDefinitionId == window.WindowDefinitionId); + let winArr = [...InputChange] + winArr[objIndex].Flag = true + // console.log("changeValue---------1", winArr) + setSelectedImg(uri) + setInputChange(winArr) + + // add metdata then resize image and restored back to the imagePath + let restore_data = { "destFilePath": imagePath, "imgurl": imgurl, imgWidth, imgHeight, mark_text1, mark_text2 } + let is_restored = await restore_ImageWithMetaData(restore_data, imgdata); + // console.log("image restored:", is_restored); + }) + .catch(err => { + console.log(err.message, err.code); + }); + + } + } + + async function openCamera(window, splitItem, splitItemIndex, type = '1', cameraType = '1', qtn = {}) { + setErrorField({}); + setError(false); + let GridAllow = cameraType == '1' ? (type === '1' ? (window.WindowImage1CameraGrid === 'true' || window.WindowImage1CameraGrid == true) : (window.WindowImage2CameraGrid === 'true' || window.WindowImage2CameraGrid == true)) : false + setGridValue(GridAllow); + setGetImageProps({ 'window': window, 'splitItem': splitItem, 'splitItemIndex': splitItemIndex, 'type': type, 'cameraType': cameraType, 'qtn': qtn }); + setShowCamera(true); + } + + + async function onSubmitData() { + let isvalid = await validate(); + if (isvalid) { + Keyboard.dismiss(); + setShowAlert(true); + } + } + + async function saveData() { + // setHasUnsavedChanges(false); + BgUnsavedChanges(false) + setShowAlert(false); + setLoaderTitle('Saving Data...'); + setProcessing(true); + let d1n = new Date(); + let d3 = moment(d1n).format('MM/DD/YYYY'); + try { + let { StoreId, ChainId, StateId, StoreTypeId } = storeData; + await db.transaction(async function (txn) { + + // remove old data + await txn.executeSql(`DELETE FROM ${AppTables.WINDOW_HDR_DATA} WHERE STORE_ID='${StoreId}' and MENU_ID='${currentMenu.MenuId}' and VISIT_DATE='${d2}' `, [], async function (txn2, txnres) { + console.log('window hdr data deleted'); + }, function (txnE, txnerr) { console.log(txnerr); },); + await txn.executeSql(`DELETE FROM ${AppTables.WINDOW_CHILD_DATA} WHERE STORE_ID='${StoreId}' and MENU_ID='${currentMenu.MenuId}' and VISIT_DATE='${d2}' `, [], async function (txn2, txnres) { + console.log('window child data deleted'); + }, function (txnE, txnerr) { console.log(txnerr); },); + await txn.executeSql(`DELETE FROM ${AppTables.WINDOW_IMAGES} WHERE STORE_ID='${StoreId}' and MENU_ID='${currentMenu.MenuId}' and VISIT_DATE='${d2}' `, [], async function (txn2, txnres) { + console.log('window images data deleted'); + }, function (txnE, txnerr) { console.log(txnerr); },); + await txn.executeSql(`DELETE FROM ${AppTables.WINDOW_STOCK_DATA} WHERE STORE_ID='${StoreId}' and MENU_ID='${currentMenu.MenuId}' and VISIT_DATE='${d2}' `, [], async function (txn2, txnres) { + console.log('window stock data deleted'); + }, function (txnE, txnerr) { console.log(txnerr); },); + + // add data + var values = '', childV = '', imageV = '', stockV = ''; + + for (const wi in Windows) { + const window = Windows[wi]; + let isImage1 = window.WindowImage1 == 'true' || window.WindowImage1 == 1 ? 1 : 0; + let isImage2 = window.WindowImage2 == 'true' || window.WindowImage2 == 1 ? 1 : 0; + let isNAImageAvl = window.WindowNotExistCamera == 'true' || window.WindowNotExistCamera == 1 ? 1 : 0; + let isNAReasonEnable = window.WindowNotExistReasonEnable == 'true' || window.WindowNotExistReasonEnable == 1 ? 1 : 0; + let isReasonEnable = window.WindowExistReasonEnable == 'true' || window.WindowExistReasonEnable == 1 ? 1 : 0; + let isStockReq = window.WindowElementStockRequired == 'true' || window.WindowElementStockRequired == 1 ? 1 : 0; + let WindowQuestions = window.WindowQuestions || []; + let WindowStocks = window.WindowStocks || []; + + + const wind = WindowData.find(i => i.WindowId == window.WindowId && i.WindowDefinitionId == window.WindowDefinitionId); + let isPresent = wind.isPresent != null && wind.isPresent != '' ? wind.isPresent : '0'; + let ReasonId = wind.ReasonId != null ? wind.ReasonId : 0; + let Reason = wind.Reason != null ? wind.Reason : ''; + let NAImage1 = wind.NAImage1 != null ? wind.NAImage1 : ''; + let NAImage1Path = wind.NAImage1Path != null ? wind.NAImage1Path : ''; + let WindowSplits = wind.WindowSplits || []; + let QD = wind.WindowQA || {}; + let WStocksData = wind.WStocksData || []; + + let WINDOW_HEADER_ID = 'WIND' + wi + (Math.floor(Math.random() * 1000) + 1); + let { WindowDefinitionId, WindowId, WindowName, WindowTable, WindowField, WindowValue, ChildName } = window; + + + values += values != '' ? ' , ' : ''; + values += ` ('${WINDOW_HEADER_ID}','${StoreId}','${d3}','${WindowDefinitionId}','${WindowId}','${WindowName}','${WindowTable}','${WindowField}','${WindowValue}','${ChildName}','${isPresent}','${NAImage1}','${ReasonId}','${Reason}','${currentMenu.MenuId}','${d3}') `; + + if (isPresent == 1) { + for (const qtnIndex in WindowQuestions) { + const qtn = WindowQuestions[qtnIndex]; + + let selansid = '', selanswer = '', selimg = '', showImageTag = false; + let id_key = qtn.WindowQuestionId + '_AnswerId'; + let ans_key = qtn.WindowQuestionId + '_Answer'; + let multi_key = qtn.WindowQuestionId + '_MultiOption'; + let date_key = qtn.WindowQuestionId + '_Date'; + let img_key = qtn.WindowQuestionId + '_ImagePath1'; + let imgname_key = qtn.WindowQuestionId + '_ImageName1'; + let rating_key = qtn.WindowQuestionId + '_Rating'; + let list_mcdata = []; + + let { WindowQuestionId, WindowQuestionCode, QuestionType, WAShowCamera } = qtn + let answer = QD[ans_key] || 0; + let answerId = QD[id_key] || ''; + let multi_options_ids = QD[multi_key] || ''; + let isImage1All = WAShowCamera == 'true' || WAShowCamera == 1 ? 1 : 0; + let Image1 = isImage1All == 1 ? QD[imgname_key] : ''; + let isDisabled = qtn.isDisabled; + + childV += childV != '' ? ' , ' : ''; + childV += ` ('${WINDOW_HEADER_ID}','${StoreId}','${d3}','${WindowDefinitionId}','${WindowId}','${WindowQuestionId}','${WindowQuestionCode}','${QuestionType}','${answer}','${answerId}','${multi_options_ids}','${Image1}','${isImage1All}','${currentMenu.MenuId}','${d3}','${isDisabled}') `; + } + for (const splitItemIndex in WindowSplits) { + const splitItem = WindowSplits[splitItemIndex]; + let Image1Name = splitItem['Image1Name'] != null && splitItem['Image1Name'] != '' ? splitItem['Image1Name'] : ''; + let Image2Name = splitItem['Image2Name'] != null && splitItem['Image2Name'] != '' ? splitItem['Image2Name'] : ''; + Image1Name = isImage1 == 1 ? Image1Name : ''; + Image2Name = isImage2 == 1 ? Image2Name : ''; + + imageV += imageV != '' ? ' , ' : ''; + imageV += ` ('${WINDOW_HEADER_ID}','${StoreId}','${d3}','${WindowDefinitionId}','${WindowId}','${Image1Name}','${Image2Name}','${currentMenu.MenuId}','${d3}') `; + } + for (const stockProdIndex in WindowStocks) { + const stockProd = WindowStocks[stockProdIndex]; + let sd = WStocksData.find(i => i.ProductId == stockProd.WindowStockValue) || {}; + let stock = sd.Stock != null ? sd.Stock : (sd.Stock == 0 ? sd.Stock : ''); + let isWindPresent = sd.isWindPresent != null ? sd.isWindPresent : 0; + let { WindowStockDefinitionId, WindowDefinitionId, WindowStockTable, WindowStockField, WindowStockValue, WindowStockMBQ, ProductName } = stockProd + stockV += stockV != '' ? ' , ' : ''; + stockV += ` ('${WINDOW_HEADER_ID}','${StoreId}','${d3}','${WindowDefinitionId}','${WindowId}','${WindowStockDefinitionId}','${WindowStockTable}','${WindowStockField}','${WindowStockValue}','${WindowStockMBQ}','${ProductName}','${stock}','${isWindPresent}','${currentMenu.MenuId}','${d3}') `; + } + + } + } + + console.log('values:', values); + + + let add_hdr_data = `INSERT INTO ${AppTables.WINDOW_HDR_DATA} (WINDOW_HEADER_ID,STORE_ID,VISIT_DATE,WINDOW_DEFINITION_ID,WINDOW_ID,WINDOW_NAME,WINDOW_TABLE,WINDOW_FIELD,WINDOW_VALUE,CHILD_NAME,IS_PRESENT,WINDOW_NA_IMAGE,REASON_ID,REASON,MENU_ID,ADDED_DATE) VALUES ${values} `; + let add_child_data = `INSERT INTO ${AppTables.WINDOW_CHILD_DATA} (WINDOW_HEADER_ID,STORE_ID,VISIT_DATE,WINDOW_DEFINITION_ID,WINDOW_ID,QUESTION_ID,QUESTION_CODE,QUESTION_TYPE,ANSWER,ANSWER_ID,MULTI_OPTIONS_IDS,IMAGE1,IMAGE_ALLOW1,MENU_ID,ADDED_DATE,IS_DISABLED) VALUES ${childV} `; + let add_images_data = `INSERT INTO ${AppTables.WINDOW_IMAGES} (WINDOW_HEADER_ID,STORE_ID,VISIT_DATE,WINDOW_DEFINITION_ID,WINDOW_ID,IMAGE1,IMAGE2,MENU_ID,ADDED_DATE) VALUES ${imageV} `; + let add_stock_data = `INSERT INTO ${AppTables.WINDOW_STOCK_DATA} (WINDOW_HEADER_ID,STORE_ID,VISIT_DATE,WINDOW_DEFINITION_ID,WINDOW_ID,WINDOW_STOCK_DEFINITION_ID,WINDOW_STOCK_TABLE,WINDOW_STOCK_FIELD,WINDOW_STOCK_VALUE,WINDOW_STOCK_MBQ,PRODUCT_NAME,STOCK,IS_WIND_PRESENT,MENU_ID,ADDED_DATE) VALUES ${stockV} `; + + await txn.executeSql(add_hdr_data, [], async function (txn2, txnres) { + console.log('window header data added'); + var isSplitImageAdded = true, isStockAdded = true, isChildAdded = true; + if (imageV != '') { + isSplitImageAdded = await executeQuery(add_images_data); + } + if (stockV != '') { + isStockAdded = await executeQuery(add_stock_data); + } + if (childV != '') { + isChildAdded = await executeQuery(add_child_data); + } + + if (!isSplitImageAdded) { + setProcessing(false); notify('Cannot add split window images'); + } + else if (!isStockAdded) { + setProcessing(false); notify('Cannot add window stock data'); + } + else if (!isChildAdded) { + setProcessing(false); notify('Cannot add window questions data'); + } + else { + setProcessing(false); notify('Window data updated successfully'); + // clear store data in local storage to avoiding re-set data for the store + clear_item('storeData') + props.navigation.goBack(); + } + + }, function (txnE, txnerr) { console.log(txnerr); setProcessing(false); notify('Cannot add window data'); },); + }); + } catch (err) { + console.log(err); + } + } + + async function executeQuery(q) { + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + await txn.executeSql(q, [], async function (txn2, txnres2) { + resolve(true); + }, function (Etxn, txnerr) { console.log(txnerr); resolve(false) }); + }); + }).then((val) => { + return val; + }).catch((err) => { + console.log(err); + return false; + }) + } + + + + async function validate() { + let isValid = true; + + let isListedSKUIndex = KPIFields.findIndex(i => i.KPIFieldName == 'ListedSKUCheckbox'); + let isListedSKUKPIObj = isListedSKUIndex >= 0 ? KPIFields[isListedSKUIndex] : {}; + let isListedSKUEnable = isListedSKUIndex >= 0 ? isListedSKUKPIObj['KPIFieldEnable'] : true; + + function showError(obj, isErr) { + setErrorField(obj); + setError(isErr); + } + + return new Promise((resolve, reject) => { + for (const wi in Windows) { + const window = Windows[wi]; + let isImage1 = window.WindowImage1 == 'true' || window.WindowImage1 == 1 ? 1 : 0; + let isImage2 = window.WindowImage2 == 'true' || window.WindowImage2 == 1 ? 1 : 0; + let isNAImageAvl = window.WindowNotExistCamera == 'true' || window.WindowNotExistCamera == 1 ? 1 : 0; + let isNAReasonEnable = window.WindowNotExistReasonEnable == 'true' || window.WindowNotExistReasonEnable == 1 ? 1 : 0; + let isReasonEnable = window.WindowExistReasonEnable == 'true' || window.WindowExistReasonEnable == 1 ? 1 : 0; + let isStockReq = window.WindowElementStockRequired == 'true' || window.WindowElementStockRequired == 1 ? 1 : 0; + let StockQtyRequired = window.StockQtyRequired == 'true' || window.StockQtyRequired == 1 ? 1 : 0; + let WindowQuestions = window.WindowQuestions || []; + let WindowStocks = window.WindowStocks || []; + + + const wind = WindowData.find(i => i.WindowId == window.WindowId && i.WindowDefinitionId == window.WindowDefinitionId); + let isPresent = wind.isPresent != null && wind.isPresent != '' ? wind.isPresent : '0'; + let ReasonId = wind.ReasonId != null ? wind.ReasonId : ''; + let Reason = wind.Reason != null ? wind.Reason : ''; + let NAImage1 = wind.NAImage1 != null ? wind.NAImage1 : ''; + let NAImage1Path = wind.NAImage1Path != null ? wind.NAImage1Path : ''; + let WindowSplits = wind.WindowSplits || []; + let QD = wind.WindowQA || {}; + let WStocksData = wind.WStocksData || []; + + let errorobj = { 'EF_Window': window }; + + if (isPresent == '1') { + if (isReasonEnable == true && ReasonId == '') { + errorobj['EF_NExistReason'] = "NExistReason"; + showError(errorobj, true); + notify(`Please select reason for ${window.WindowName} `, 'LONG'); + resolve(false); return; + } + else { + if (window.NoOfSplit > 0 && WindowSplits.length > 0 && (isImage1 == 1 || isImage2 == 1)) { + for (const splitItemIndex in WindowSplits) { + const splitItem = WindowSplits[splitItemIndex]; + let Image1Name = splitItem['Image1Name'] != null && splitItem['Image1Name'] != '' ? splitItem['Image1Name'] : ''; + let Image2Name = splitItem['Image2Name'] != null && splitItem['Image2Name'] != '' ? splitItem['Image2Name'] : ''; + // console.log('Image2Name', Image2Name, isImage2); + if (StoreCameraAllow && isImage1 == 1 && Image1Name == '') { + errorobj['EF_splitImage1'] = "splitImage1"; + errorobj['EF_splitItemIndex'] = splitItemIndex; + showError(errorobj, true); + notify(`Please click all images for ${window.WindowName}`, 'LONG'); + resolve(false); return; + } + else if (StoreCameraAllow && isImage2 == 1 && Image2Name == '') { + errorobj['EF_splitImage2'] = "splitImage2"; + errorobj['EF_splitItemIndex'] = splitItemIndex; + showError(errorobj, true); + notify(`Please click all images for ${window.WindowName}`, 'LONG'); + resolve(false); return; + } + } + } + + if (isStockReq == 1) { + let isProductSelected = false; + for (const stockProdIndex in WindowStocks) { + const stockProd = WindowStocks[stockProdIndex]; + let sd = WStocksData.find(i => i.ProductId == stockProd.WindowStockValue) || {}; + let stock = sd.Stock != null ? sd.Stock : (sd.Stock == 0 ? sd.Stock : ''); + let isWindPresent = sd.isWindPresent != null ? sd.isWindPresent : 0; + + if (isWindPresent == 1) { + isProductSelected = true; + } + + + if ((isListedSKUEnable == true && isWindPresent == 1 && StockQtyRequired == 1 && stock == '') || (isListedSKUEnable != true && (stock == null || stock == ''))) { + errorobj['EF_stock'] = "input1_"; + errorobj['EF_stockProd'] = stockProd; + let refIn1 = inputRefs.current['input1_' + window.WindowDefinitionId + '_' + stockProd.WindowStockDefinitionId]; + if (refIn1 != null) { + refIn1.focus(); + } + showError(errorobj, true); + notify(`${ST.Pleaseenterstockfor} ${window.WindowName} ( ${stockProd.ProductName} ) `, 'LONG'); + resolve(false); return; + } + + if (isListedSKUEnable == true && stockProdIndex == WindowStocks.length - 1) { + if (!isProductSelected) { + errorobj['EF_isProductSelected'] = "isProductSelected"; + showError(errorobj, true); + notify(`${ST.PleaseselectatleastoneSKUfor} ${window.WindowName} `, 'LONG'); + resolve(false); return; + } + } + } + } + + if (WindowQuestions.length > 0) { + for (const qtnIndex in WindowQuestions) { + const qtn = WindowQuestions[qtnIndex]; + + let selansid = '', selanswer = '', selimg = '', showImageTag = false; + let id_key = qtn.WindowQuestionId + '_AnswerId'; + let ans_key = qtn.WindowQuestionId + '_Answer'; + let multi_key = qtn.WindowQuestionId + '_MultiOption'; + let date_key = qtn.WindowQuestionId + '_Date'; + let img_key = qtn.WindowQuestionId + '_ImagePath1'; + let imgname_key = qtn.WindowQuestionId + '_ImageName1'; + let rating_key = qtn.WindowQuestionId + '_Rating'; + let list_mcdata = []; + + let isImgAllowed = (qtn.WQShowCamera == 'true' || qtn.WQShowCamera == 1); + let checkForAnsKey = (qtn.QuestionType == 'Decimal' || qtn.QuestionType == 'Number' || qtn.QuestionType == 'Text' || qtn.QuestionType == 'Date' || qtn.QuestionType == 'Rating'); + errorobj['EF_qtn'] = qtn; + + if (qtn.QuestionType == 'Single choice list') { + selansid = QD[id_key]; + } + else if (qtn.QuestionType == 'Multi choice list') { + selansid = QD[multi_key] != null && QD[multi_key] != '' ? QD[multi_key].split(',') : []; + } + let isDisabled = qtn.isDisabled; + if (!isDisabled) { + if (qtn.QuestionType == 'Multi choice list' && selansid.length <= 0) { + errorobj['EF_Qtn_MultiChoice'] = 'Qtn_MultiChoice'; + showError(errorobj, true); + notify(`Please select options for the required field in ${window.WindowName}`, 'SHORT'); + resolve(false); return; + } + else if (checkForAnsKey && (Object.keys(QD).indexOf(ans_key) < 0 || (Object.keys(QD).indexOf(ans_key) >= 0 && QD[ans_key] === ''))) { + errorobj['EF_Qtn_Date'] = 'Qtn_Date'; + showError(errorobj, true); + let msg = (qtn.QuestionType == 'Date' ? `Please pick a date for the required field in ${window.WindowName}` : (qtn.QuestionType == 'Rating' ? `Please select rating for the required field in ${window.WindowName}` : `Please fill all the required field in ${window.WindowName}`)); + notify(msg, 'SHORT'); + resolve(false); return; + } + + if (Object.keys(QD).indexOf(id_key) < 0 || (QD[id_key] === undefined)) { + errorobj['EF_Qtn_Input'] = 'Qtn_Input'; + showError(errorobj, true); + notify(`Please fill all the required field in ${window.WindowName}`, 'SHORT'); + resolve(false); + return; + } + + else if (isImgAllowed && (Object.keys(QD).indexOf(img_key) < 0 || (Object.keys(QD).indexOf(img_key) >= 0 && QD[img_key] === ''))) { + errorobj['EF_Qtn_Image'] = 'Qtn_Image'; + showError(errorobj, true); + notify(`Please add images in ${window.WindowName}`, 'SHORT'); + resolve(false); return; + } else { + console.log('no condition found'); + } + + if ((qtn.QuestionType == 'Single choice list' || qtn.QuestionType == 'Multi choice list')) { + if (qtn.Answers && qtn.Answers.length > 0) { + for (var j = 0; j < qtn.Answers.length; j++) { + let ansss = qtn.Answers[j]; + let isandImgAl = (ansss.WAShowCamera == 'true' || ansss.WAShowCamera == 1); + if (qtn.QuestionType == 'Single choice list' && (isandImgAl && ansss.AnswerId == selansid)) { + showImageTag = true; + } + else if (qtn.QuestionType == 'Multi choice list' && (isandImgAl && selansid.indexOf(ansss.AnswerId) >= 0)) { + showImageTag = true; + } + } + } + } + } + else { + console.log("qtn is Disabled") + } + + if (showImageTag && (Object.keys(QD).indexOf(img_key) < 0 || (Object.keys(QD).indexOf(img_key) >= 0 && QD[img_key] === ''))) { + errorobj['EF_Qtn_Image'] = 'Qtn_Image'; + showError(errorobj, true); + notify(`Please add images in ${window.WindowName}`, 'SHORT'); + resolve(false); return; + } + } + } + + } + } + else { + if (isNAReasonEnable == true && ReasonId == '') { + errorobj['EF_NExistReason'] = "NExistReason"; + showError(errorobj, true); + notify(`Please select reason for ${window.WindowName} `, 'LONG'); + resolve(false); return; + } + else if (StoreCameraAllow && isNAImageAvl == true && NAImage1 == '') { + errorobj['EF_NExistImage'] = "NExistImage"; + showError(errorobj, true); + notify(`Please click image for ${window.WindowName}`, 'LONG'); + resolve(false); return; + } + } + + if (wi == (Windows.length - 1)) { + resolve(true); return; + } + + } + + }).then((val) => { return val }) + .catch((err) => { console.log(err); return false }); + + } + + + function onselectionChange(option, keyLbl, keyVal, otherData) { + setErrorField({}); + setError(false); + let item = otherData.window; + let allData = WindowData; + let defData = { 'WindowId': item.WindowId, 'WindowDefinitionId': item.WindowDefinitionId }; + const win_index = allData.findIndex(i => i.WindowId == item.WindowId && i.WindowDefinitionId == item.WindowDefinitionId); + let wind = win_index >= 0 ? (allData[win_index] || defData) : defData; + wind[keyVal] = option.value; + wind[keyLbl] = option.label; + + win_index >= 0 ? allData[win_index] = wind : allData.push(wind); + //console.log('allData:', allData); + + let objIndex = InputChange.findIndex(i => i.WindowId == item.WindowId && i.WindowDefinitionId == item.WindowDefinitionId); + let winArr = [...InputChange] + winArr[objIndex].Flag = true + // console.log("changeValue---------1", winArr) + setInputChange(winArr) + // setWindowData(allData); + BgWindowData(allData) + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + + function onselectionChange2(option, qtn, window) { + setErrorField({}); + setError(false); + let allData = WindowData; + let defData = { 'WindowId': window.WindowId, 'WindowDefinitionId': window.WindowDefinitionId }; + const wind_index = allData.findIndex(i => i.WindowId == window.WindowId && i.WindowDefinitionId == window.WindowDefinitionId); + let wind = wind_index >= 0 ? allData[wind_index] : defData; + let data = wind.WindowQA || {}; + let id_key = qtn.WindowQuestionId + '_AnswerId'; + let ans_key = qtn.WindowQuestionId + '_Answer'; + data[id_key] = option.value; + data[ans_key] = option.label; + + + wind['WindowQA'] = data; + wind_index >= 0 ? allData[wind_index] = wind : allData.push(wind); + + let objIndex = InputChange.findIndex(i => i.WindowId == window.WindowId && i.WindowDefinitionId == window.WindowDefinitionId); + let winArr = [...InputChange] + winArr[objIndex].Flag = true + //console.log("changeValue---------1", winArr) + setInputChange(winArr) + // setWindowData(allData); + BgWindowData(allData) + + let aq_ans = qtn.Answers != null ? qtn.Answers : []; + let ans_obj = aq_ans.find(i => i.AnswerId == option.value) || {}; + let EQtns = ans_obj.WAQuestionEnable != null && ans_obj.WAQuestionEnable != '' ? ans_obj.WAQuestionEnable.replace(' ', '').split(',') : []; + let DQtns = ans_obj.WAQuestionDisable != null && ans_obj.WAQuestionDisable != '' ? ans_obj.WAQuestionDisable.replace(' ', '').split(',') : []; + + let sqtns = window.WindowQuestions || [] + + if (EQtns.length > 0) { + enableQtns(sqtns, EQtns, DQtns, data, wind, wind_index, allData, window) + } + else if (DQtns.length > 0) { + disableQtns(sqtns, DQtns, data, wind, wind_index, allData, window) + } + else { + ///jp fixed queation enable disable on app kill + let allwindows = Windows; + let windowIndex = allwindows.findIndex(i => i.WindowDefinitionId == window.WindowDefinitionId && i.WindowId == window.WindowId) + let dataIndex = allData.findIndex(i => i.WindowDefinitionId == window.WindowDefinitionId && i.WindowId == window.WindowId); + + if (windowIndex >= 0) { + window['WindowQuestions'] = sqtns; + allwindows[windowIndex] = window; + // ✅ Update in allData too + if (dataIndex >= 0) { + allData[dataIndex]['WindowQuestions'] = sqtns; + } + + // ✅ Set final updated refs and states + WindowDataRef.current = allData; + BgWindowData(allData) + setWindows(allwindows); + console.log("allwindows", allwindows); + + + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + } + } + + async function disableQtns(sqtns, DQtns, data, wind = {}, wind_index = -1, allData = [], window = {}) { + console.log("data--", data); + + if (DQtns.length > 0) { + new Promise.all( + DQtns.map((qid, q_index) => { + let s_qtnindex = sqtns.findIndex(i => i.WindowQuestionId == qid) || {}; + let s_qtn = sqtns[s_qtnindex]; + if (s_qtn != null) { + s_qtn['isDisabled'] = true + sqtns[s_qtnindex] = s_qtn; + let id_key = s_qtn.WindowQuestionId + '_AnswerId'; + let ans_key = s_qtn.WindowQuestionId + '_Answer'; + data[id_key] = 0; + data[ans_key] = ''; + wind['WindowQA'] = data; + wind_index >= 0 ? allData[wind_index] = wind : allData.push(wind); + return false + } else { + return false + } + }) + ).then(async (val) => { + ///jp fixed queation enable disable on app kill + let allwindows = Windows; + let windowIndex = allwindows.findIndex(i => i.WindowDefinitionId == window.WindowDefinitionId && i.WindowId == window.WindowId) + let dataIndex = allData.findIndex(i => i.WindowDefinitionId == window.WindowDefinitionId && i.WindowId == window.WindowId); + + if (windowIndex >= 0) { + window['WindowQuestions'] = sqtns; + allwindows[windowIndex] = window; + // ✅ Update in allData too + if (dataIndex >= 0) { + allData[dataIndex]['WindowQuestions'] = sqtns; + } + //clear images + const activeQuestions = wind?.WindowQuestions?.filter(q => q.isDisabled === false) || []; + const WindowQuestionId = activeQuestions?.map(q => q.WindowQuestionId); + if (WindowQuestionId != null && WindowQuestionId != undefined) { + let id_key = WindowQuestionId + '_ImageName1'; + let id_key_path = WindowQuestionId + '_ImagePath1'; + data[id_key] = ''; + data[id_key_path] = ''; + } + // ✅ Set final updated refs and states + WindowDataRef.current = allData; + BgWindowData(allData) + setWindows(allwindows); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + + }) + } + } + + async function enableQtns(sqtns, EQtns, DQtns, data, wind = {}, wind_index = -1, allData = [], window = {}) { + new Promise.all( + EQtns.map((qid, q_index) => { + let s_qtnindex = sqtns.findIndex(i => i.WindowQuestionId == qid) || {}; + let s_qtn = sqtns[s_qtnindex]; + if (s_qtn != null) { + s_qtn['isDisabled'] = false + sqtns[s_qtnindex] = s_qtn; + return false + } else { + return false + } + }) + ).then(async (val) => { + if (DQtns.length > 0) { + disableQtns(sqtns, DQtns, data, wind, wind_index, allData, window) + } + else { + ///jp fixed queation enable disable on app kill + let allwindows = Windows; + let windowIndex = allwindows.findIndex(i => i.WindowDefinitionId == window.WindowDefinitionId && i.WindowId == window.WindowId) + let dataIndex = allData.findIndex(i => + i.WindowDefinitionId == window.WindowDefinitionId && + i.WindowId == window.WindowId + ); + + if (windowIndex >= 0) { + window['WindowQuestions'] = sqtns; + allwindows[windowIndex] = window; + // ✅ Update in allData too + if (dataIndex >= 0) { + allData[dataIndex]['WindowQuestions'] = sqtns; + } + + // ✅ Set final updated refs and states + WindowDataRef.current = allData; + setWindows(allwindows); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + } + }) + } + + async function setMultiSelectValue(selectedItems = [], qtn = {}, window = {}) { + setErrorField({}); + setError(false); + //console.log('setMultiSelectValue', selectedItems); + let id_key = qtn.WindowQuestionId + '_AnswerId'; + let ans_key = qtn.WindowQuestionId + '_Answer'; + let multi_key = qtn.WindowQuestionId + '_MultiOption'; + + let allData = WindowData; + let defData = { 'WindowId': window.WindowId, 'WindowDefinitionId': window.WindowDefinitionId }; + const wind_index = allData.findIndex(i => i.WindowId == window.WindowId && i.WindowDefinitionId == window.WindowDefinitionId); + let wind = wind_index >= 0 ? allData[wind_index] : defData; + let obj = wind.WindowQA || {}; + obj[id_key] = 0; + obj[multi_key] = selectedItems.join(','); + let anss = []; + selectedItems.map((itemValue) => { + let ans = qtn.Answers.find(c1 => c1.AnswerId == itemValue); + if (ans.Answer) { anss.push(ans.Answer) } + }); + obj[ans_key] = anss.join(','); + //console.log('obj:', obj); + + wind['WindowQA'] = obj; + wind_index >= 0 ? allData[wind_index] = wind : allData.push(wind); + + let objIndex = InputChange.findIndex(i => i.WindowId == window.WindowId && i.WindowDefinitionId == window.WindowDefinitionId); + let winArr = [...InputChange] + winArr[objIndex].Flag = true + + setInputChange(winArr) + BgWindowData(allData) + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + + function setTextValue(value, qtn, window, type = '') { + setErrorField({}); + setError(false); + if (value != '') { + let isValid = validateNumber(value, type); + if (!isValid) { + return; + } + } + let id_key = qtn.WindowQuestionId + '_AnswerId'; + let ans_key = qtn.WindowQuestionId + '_Answer'; + + let allData = WindowData; + let defData = { 'WindowId': window.WindowId, 'WindowDefinitionId': window.WindowDefinitionId }; + const wind_index = allData.findIndex(i => i.WindowId == window.WindowId && i.WindowDefinitionId == window.WindowDefinitionId); + let wind = wind_index >= 0 ? allData[wind_index] : defData; + let obj = wind.WindowQA || {}; + + if (qtn.QuestionType == 'Date') { + let date_key = qtn.WindowQuestionId + '_Date'; + let d = value != null ? new Date(value) : new Date(); + let mfdate = moment(d).format('MM/YYYY'); + showQtnDatePicker(qtn, window, false); + obj[id_key] = 0; + obj[ans_key] = mfdate; + obj[date_key] = moment(d).format('MM/DD/YYYY'); + } + else { + obj[id_key] = "0"; + obj[ans_key] = value; + } + + //console.log(value, obj); + wind['WindowQA'] = obj; + wind_index >= 0 ? allData[wind_index] = wind : allData.push(wind); + + let objIndex = InputChange.findIndex(i => i.WindowId == window.WindowId && i.WindowDefinitionId == window.WindowDefinitionId); + let winArr = [...InputChange] + winArr[objIndex].Flag = true + //console.log("changeValue---------1", winArr) + setInputChange(winArr) + // setWindowData(allData); + BgWindowData(allData) + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + + function showQtnDatePicker(qtn, window, show = false) { + let allQtns = window.WindowQuestions || []; + let newqtnIndex = allQtns.findIndex(q => q.WindowQuestionId == qtn.WindowQuestionId); + + if (newqtnIndex >= 0) { + let newqtn = allQtns[newqtnIndex]; + newqtn.showDatePicker = show; + allQtns[newqtnIndex] = newqtn; + window['WindowQuestions'] = allQtns; + let allWindows = Windows; + const winIndex = allWindows.findIndex(i => i.WindowId == window.WindowId && i.WindowDefinitionId == window.WindowDefinitionId) || {}; + allWindows[winIndex] = window; + setWindows(allWindows); + + if (show == true) setrerenderdata(!rerenderdata); + } + } + + function setRatingValue(data) { + setRatingOrder(data); + } + + function onRatingCancel() { + setShowRating(false); + } + + function onRatingSave() { + setShowRating(false); + let qtn = RatingQtn; + let window = RatingWindow; + let id_key = qtn.WindowQuestionId + '_AnswerId'; + let ans_key = qtn.WindowQuestionId + '_Answer'; + let rating_key = qtn.WindowQuestionId + '_Rating'; + let ids = [], anss = []; + RatingOrder.map((item, index) => { + ids.push(item.AnswerId); + anss.push(item.Answer); + }) + + let allData = WindowData; + let defData = { 'WindowId': window.WindowId, 'WindowDefinitionId': window.WindowDefinitionId }; + const wind_index = allData.findIndex(i => i.WindowId == window.WindowId && i.WindowDefinitionId == window.WindowDefinitionId); + let wind = wind_index >= 0 ? allData[wind_index] : defData; + let obj = wind.WindowQA || {}; + + obj[rating_key] = ids.join(','); + obj[id_key] = 0; + obj[ans_key] = anss.join(','); + + wind['WindowQA'] = obj; + wind_index >= 0 ? allData[wind_index] = wind : allData.push(wind); + + + let objIndex = InputChange.findIndex(i => i.WindowId == window.WindowId && i.WindowDefinitionId == window.WindowDefinitionId); + let winArr = [...InputChange] + winArr[objIndex].Flag = true + //console.log("changeValue---------7", winArr) + + setInputChange(winArr) + // setWindowData(allData); + BgWindowData(allData) + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + + + function onChoiceSelect(item, val, key, animatedChoice) { + console.log('onChoiceSelect---1', val, "---------" + key) + let win_index = InputChange.find(i => i.WindowId == item.WindowId && i.WindowDefinitionId == item.WindowDefinitionId) + let changeValue = win_index.Flag; + ///jp change for clear data when data in background state + console.log("questionsBg--", isBgDataExistsRef.current, changeValue, "----" + windData); + if (!changeValue && isBgDataExistsRef.current && windData != null && windData != '' && windData != undefined) { + let StoreJson = JSON.parse(windData) + let questionsBg = getWindowQA(StoreJson, item.WindowId, item.WindowDefinitionId) + if (questionsBg != null && questionsBg != undefined && questionsBg != '') { + setIsPresentClean(val) + setDataCleanAnim(animatedChoice) + setDataCleanItem(item) + setDataCleanModal(true) + isBgDataExistsRef.current = false; + return + } + } else if (changeValue) { + setIsPresentClean(val) + setDataCleanAnim(animatedChoice) + setDataCleanItem(item) + setDataCleanModal(true) + return + } + + var val1 = 0; + val == 1 ? val1 = 1 : ''; + + if (animatedChoice != null) { + Animated.timing(animatedChoice, { + toValue: val1, + duration: 400, + useNativeDriver: false, + }).start(); + } + onWindowDataChange(item, val, key) + } + + function onWindowDataChange(item, val, key) { + let allData = WindowData; + let defData = { 'WindowId': item.WindowId, 'WindowDefinitionId': item.WindowDefinitionId }; + const win_index = allData.findIndex(i => i.WindowId == item.WindowId && i.WindowDefinitionId == item.WindowDefinitionId); + let wind = win_index >= 0 ? (allData[win_index] || defData) : defData; + wind[key] = val; + + if (key == 'ReasonId') { + let rsn = reasons_list.find(r => r.ReasonId == val) || {}; + wind['Reason'] = rsn.Reason || ''; + } + + win_index >= 0 ? allData[win_index] = wind : allData.push(wind); + + + if (key != "isPresent") { + let objIndex = InputChange.findIndex(i => i.WindowId == item.WindowId && i.WindowDefinitionId == item.WindowDefinitionId); + let winArr = [...InputChange] + winArr[objIndex].Flag = true + setInputChange(winArr) + } + // setWindowData(allData); + BgWindowData(allData) + // setHasUnsavedChanges(true); + BgUnsavedChanges(true); + setrerenderdata(!rerenderdata); + } + + function onWindowDataClean() { + + if (DataCleanAnim != null) { + let anim = isPresentClean == 1 ? 1 : ''; + Animated.timing(DataCleanAnim, { + toValue: anim, + duration: 400, + useNativeDriver: false, + }).start(); + } + let allData = WindowData; + + let WindowSplits = []; + for (var s = 0; s < DataCleanItem.NoOfSplit; s++) { + let obj = { 'Image1Name': '', 'Image1': '', 'Image2Name': '', 'Image2': '', img1Required: true, img2Required: true }; + WindowSplits.push(obj); + } + + let defData = { 'WindowId': DataCleanItem.WindowId, 'WindowDefinitionId': DataCleanItem.WindowDefinitionId, 'WindowSplits': WindowSplits, 'WindowQA': {}, 'WStocksData': [], 'isAllSKUChecked': 0, isPresent: isPresentClean }; + const win_index = allData.findIndex(i => i.WindowId == DataCleanItem.WindowId && i.WindowDefinitionId == DataCleanItem.WindowDefinitionId); + + allData[win_index] = defData + + let objIndex = InputChange.findIndex(i => i.WindowId == DataCleanItem.WindowId && i.WindowDefinitionId == DataCleanItem.WindowDefinitionId); + let winArr = [...InputChange] + winArr[objIndex].Flag = false + //console.log("changeValue---------7", winArr) + setInputChange(winArr) + // setWindowData(allData); + BgWindowData(allData) + // setHasUnsavedChanges(true); + BgUnsavedChanges(true); + setDataCleanModal(false) + setrerenderdata(!rerenderdata); + } + + + async function setWindowStockVal(val, window, stockProd, key, type = '') { + setErrorField({}); + setError(false); + if (val != '') { + let isValid = validateNumber(val, type); + if (!isValid) { + return; + } + } + + let allData = WindowData; + let defData = { 'WindowId': window.WindowId, 'WindowDefinitionId': window.WindowDefinitionId }; + const win_index = allData.findIndex(i => i.WindowId == window.WindowId && i.WindowDefinitionId == window.WindowDefinitionId); + let wind = win_index >= 0 ? (allData[win_index] || defData) : defData; + let WStocksData = wind['WStocksData'] || []; + let sdIndex = WStocksData.findIndex(i => i.ProductId == stockProd.WindowStockValue); + let sd = sdIndex >= 0 ? WStocksData[sdIndex] : { 'ProductId': stockProd.WindowStockValue, 'Stock': '' }; + sd[key] = val; + sdIndex >= 0 ? WStocksData[sdIndex] = sd : WStocksData.push(sd); + wind['WStocksData'] = WStocksData; + win_index >= 0 ? allData[win_index] = wind : allData.push(wind); + if (key == 'isWindPresent') { + let isAllChecked = await verifyAllChecked(val, window, stockProd, key); + wind['isAllSKUChecked'] = isAllChecked; + } + + + // setWindowData(allData); + BgWindowData(allData) + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata4(!rerenderdata4); + } + + async function verifyAllChecked(val, window, stockProd, key) { + return await new Promise((resolve, reject) => { + let WindowStocks = window.WindowStocks || []; + let allData = WindowData; + const win_index = allData.findIndex(i => i.WindowId == window.WindowId && i.WindowDefinitionId == window.WindowDefinitionId); + let wind = win_index >= 0 ? (allData[win_index] || defData) : defData; + let WStocksData = wind['WStocksData'] || []; + if (WindowStocks.length > 0) { + let isAllChecked = 1; + for (var i = 0; i < WindowStocks.length; i++) { + let stockProd = WindowStocks[i]; + + let sdIndex1 = WStocksData.findIndex(a => a.ProductId == stockProd.WindowStockValue); + let sd1 = sdIndex1 >= 0 ? WStocksData[sdIndex1] : {}; + let isWindPresent = sd1.isWindPresent; + if (isWindPresent == null || isWindPresent == '' || isWindPresent == 0 || isWindPresent == '0') { + isAllChecked = 0 + } + + if (i == WindowStocks.length - 1) { + resolve(isAllChecked); + } + } + } + else { + resolve(0); + } + + }).catch((err) => { + //console.log(err); + return 0; + }); + } + + function checkAllSKUs(val, window) { + + let WindowStocks = window.WindowStocks || []; + let allData = WindowData; + let defData = { 'WindowId': window.WindowId, 'WindowDefinitionId': window.WindowDefinitionId }; + const win_index = allData.findIndex(i => i.WindowId == window.WindowId && i.WindowDefinitionId == window.WindowDefinitionId); + let wind = win_index >= 0 ? (allData[win_index] || defData) : defData; + let WStocksData = wind['WStocksData'] || []; + //console.log('WStocksData before:', WStocksData) + for (var i = 0; i < WindowStocks.length; i++) { + let stockProd = WindowStocks[i]; + + let sdIndex = WStocksData.findIndex(a => a.ProductId == stockProd.WindowStockValue); + let sd = sdIndex >= 0 ? WStocksData[sdIndex] : { 'ProductId': stockProd.WindowStockValue, 'Stock': '' }; + let isWindPresent = (val == 1 || val == '1') ? 1 : 0; + sd['isWindPresent'] = isWindPresent; + + sdIndex >= 0 ? (WStocksData[sdIndex] = sd) : (WStocksData.push(sd)); + } + + + wind['WStocksData'] = WStocksData; + wind['isAllSKUChecked'] = val == 1 ? 1 : 0; + //console.log('wind updated'); + win_index >= 0 ? allData[win_index] = wind : allData.push(wind); + + BgWindowData(allData) + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + + function onSaveCancel() { + setShowAlert(false); + } + + + + function openImageRefView(windowIndex = 0) { + setrefImageIndex(windowIndex); + UpdateShow_zoomImageRef(true); + } + + function renderRatingView() { + let qtn = RatingQtn; + let Answers = qtn.Answers; + let id_key = qtn.WindowQuestionId + '_AnswerId'; + let ans_key = qtn.WindowQuestionId + '_Answer'; + let rating_key = qtn.WindowQuestionId + '_Rating'; + + let newarr = RatingOrder; + if (RatingOrder.length <= 0) { + newarr = Answers; + } + + return ( + + + Drag Items In Order + Press and hold to drag + { setRatingValue(data) }} + keyExtractor={(item) => item.AnswerId} + renderItem={renderItem} + /> + + { onRatingCancel() }}> + Cancel + + { onRatingSave() }}> + Save + + + + + ) + } + + function render_Picker(label_key, value_key, onChange = () => { }, selected_data = {}) { + var data = []; + let qtn = selected_data.qtn || {}; + let window = selected_data.window || {}; + let isQtnDisabled = qtn.isDisabled != null || qtn.isDisabled != '' ? false : true; + let allAnswers = qtn.Answers || []; + + allAnswers.map((item, index) => { + let obj = { key: index, label: item[label_key], value: item[value_key] }; + if (selected_data.value == item[label_key]) + obj['component'] = {item[label_key]}; + data.push(obj); + }); + + return ( + { onChange(option, qtn, window) }} + overlayStyle={customStyle.addVisPickerOverlay} + cancelContainerStyle={customStyle.addVisPicker_OptionContainerStyle} + optionStyle={customStyle.addvis_opStyle} + optionTextStyle={customStyle.addvis_opTextStyle} + optionContainerStyle={customStyle.addVisPicker_OptionContainerStyle} + selectedKey={'1'} + disabled={isQtnDisabled} + > + {(selected_data.value != null && selected_data.value != '' ? selected_data.value : '-select-')} + + ) + } + + function renderDatePicker(qtn, window) { + let qtnn = qtn; + let DateRange = qtn.DateRange; + let maxDate = moment().add(10, 'years').format('MM/DD/YYYY'); + let minDate = moment().subtract(10, 'years').format('MM/DD/YYYY'); + if (DateRange == 'RFD') { + maxDate = moment().format('MM/DD/YYYY'); + } + else if (DateRange == 'RPD') { + minDate = moment().format('MM/DD/YYYY'); + } + + return ( + { setTextValue(selectedDate, qtnn, window) }} + maximumDate={new Date(maxDate)} + minimumDate={new Date(minDate)} + /> + ); + } + + function _OpenCaptureImage_Modal(img) { + + const isImageCap = (img != '' || img != null) ? true : false; + + let { window, splitItem, splitItemIndex, cameraType } = reCapImgModalObj + let camera2Label = (window && window.PromoImage2Lable) || ''; + return ( + + { + isImageCap && + + + + + + { openCamera(window, splitItem, splitItemIndex, cameraType) }}> + + + + {!showImageSaveOp && + { cancelImage(false) }}> + + {ST.Close} + + } + + } + + ) + } + + async function OpenImgModal(imgPath, window, splitItem, splitItemIndex, cameraType) { + setSelectedImg(imgPath) + setShowModal(true); + if ((imgPath != '' && imgPath != null)) { + setShowImageSaveOp(false); + } + else { + setShowImageSaveOp(true); + } + setReCapImgModalObj({ window, splitItem, splitItemIndex, cameraType }) + + } + + function cancelImage() { + // setImage1(''); + setSelectedImg(''); + setReCapImgModalObj({}) + setShowModal(false); + } + + + function _renderWindow() { + + let isListedSKUIndex = KPIFields.findIndex(i => i.KPIFieldName == 'ListedSKUCheckbox'); + let isListedSKUKPIObj = isListedSKUIndex >= 0 ? KPIFields[isListedSKUIndex] : {}; + let isListedSKUEnable = isListedSKUIndex >= 0 ? isListedSKUKPIObj['KPIFieldEnable'] : true; + + return ( + `window_${index.toString()}`} + renderItem={({ item, index }) => { + const window = item; + let windowIndex = index; + + let isImage1 = window.WindowImage1 == 'true' || window.WindowImage1 == 1 ? 1 : 0; + let isImage2 = window.WindowImage2 == 'true' || window.WindowImage2 == 1 ? 1 : 0; + let isNAImageAvl = window.WindowNotExistCamera == 'true' || window.WindowNotExistCamera == 1 ? 1 : 0; + let isNAReasonEnable = window.WindowNotExistReasonEnable == 'true' || window.WindowNotExistReasonEnable == 1 ? 1 : 0; + let isReasonEnable = window.WindowExistReasonEnable == 'true' || window.WindowExistReasonEnable == 1 ? 1 : 0; + let isStockReq = window.WindowElementStockRequired == 'true' || window.WindowElementStockRequired == 1 ? 1 : 0; + let StockQtyRequired = window.StockQtyRequired == 'true' || window.StockQtyRequired == 1 ? 1 : 0; + let WindowRefImagePopUp = window.WindowRefImagePopUp == 'true' || window.WindowRefImagePopUp == true ? true : false; + + let isVisible = Boolean(ItemsInView.find(({ item: i, isViewable }) => i.WindowId == window.WindowId && i.WindowDefinitionId == window.WindowDefinitionId && isViewable)) + + let RefImage = window.WindowRefImage; + let camera1Label = window.WindowImage1Lable || ''; + let camera2Label = window.WindowImage2Lable || ''; + let WindowQuestions = window.WindowQuestions || []; + let WindowStocks = window.WindowStocks || []; + + const wind = WindowData.find(i => i.WindowId == window.WindowId && i.WindowDefinitionId == window.WindowDefinitionId); + let isPresent = wind.isPresent != null && wind.isPresent != '' ? wind.isPresent : '0'; + let ReasonId = wind.ReasonId != null ? wind.ReasonId : ''; + let Reason = wind.Reason != null ? wind.Reason : ''; + let NAImage1 = wind.NAImage1 != null ? wind.NAImage1 : ''; + let NAImage1Path = wind.NAImage1Path != null ? wind.NAImage1Path : ''; + let WindowSplits = wind.WindowSplits || []; + let QuestionsData = wind.WindowQA || {}; + let WStocksData = wind.WStocksData || []; + let isAllSKUChecked = wind.isAllSKUChecked == 1 || wind.isAllSKUChecked == "1"; + + + var xpos = isPresent == '1' ? -75 : 0; + if (window.animatedChoice != null) { + xpos = window.animatedChoice.interpolate({ + inputRange: [0, 1], + outputRange: [0, -75], + }); + } + + if (isVisible && window.animatedHeight != null) { + setTimeout(() => { + Animated.timing(window.animatedHeight, { + toValue: 0, + duration: 800, + useNativeDriver: false, + }).start(); + }, (props.RefImagePopUpTime || 0) * 1000) + } + + let EF_Window = errorfield.EF_Window != null ? errorfield.EF_Window : {}; + let show_errorhere = error == true && EF_Window.WindowId == window.WindowId && EF_Window.WindowDefinitionId == window.WindowDefinitionId; + // if not Present fields + + // this will show error field in red (if window is present and exist reason is enabled and not filled ) or (if window is not present and Not exist reason is enabled and not filled ) + let EF_NExistReason = errorfield.EF_NExistReason || ''; + let EStyle_NExistReason = show_errorhere && EF_NExistReason == 'NExistReason' ? customStyle.stk_inptSTyle_error : {}; + + let EF_NExistImage = errorfield.EF_NExistImage || ''; + let EStyle_NExistImage = show_errorhere && EF_NExistImage == 'NExistImage' ? customStyle.error_CatImage2 : {}; + + + return ( + + + + {window.WindowName} + {window.ChildName} + + { openImageRefView(index) }}> + + + + + {WindowRefImagePopUp && + + + } + + + + {'Is Present'} + + + + { onChoiceSelect(window, 1, 'isPresent', window.animatedChoice) }}> + Yes + + { onChoiceSelect(window, 0, 'isPresent', window.animatedChoice) }}> + No + + + + + {((isPresent != '1' && isNAReasonEnable == true) || (isPresent == '1' && isReasonEnable == true)) && + + Select Reason + {} + + } + + + {(isPresent != '1' && isNAImageAvl == true) && + + + + {'Capture Image'} + + + + + + {(NAImage1Path == '' || NAImage1Path == null) && + { openCamera(window, {}, 0, '1', '3') }}> + + + } + {(NAImage1Path != '' && NAImage1Path != null) && + + + { openCamera(window, {}, 0, '1', '3') }}> + + + + } + + + + + } + + + + {(isPresent == '1') && + + + {(isStockReq == true && WindowStocks.length > 0) && + + + {'Enter Stocks'} + + {isListedSKUEnable == true && + + { checkAllSKUs((isAllSKUChecked == 1 ? 0 : 1), window) }}> + { let val1 = (val == true) ? 1 : 0; checkAllSKUs(val1, window) }} + style={[customStyle.WStkHdr_checkbox, (Platform.OS == 'ios' ? { height: 20, width: 20, marginLeft: 5 } : {})]} + tintColors={{ true: PageTheme.$primary_color, false: PageTheme.$text_color_light }} + /> + {ST.SelectAll} + + } + `wstock_${index.toString()}`} + renderItem={({ item, index }) => { + let stockProd = item; + let stockProdIndex = index; + let sd = WStocksData.find(i => i.ProductId == stockProd.WindowStockValue) || {}; + let stock = sd.Stock != null ? sd.Stock : ''; + let isWindPresent = sd.isWindPresent != null ? sd.isWindPresent : 0; + + // highlight prd errors + let EF_stockProd = errorfield.EF_stockProd != null ? errorfield.EF_stockProd : {}; + let showPrdErrHere = EF_stockProd.WindowStockDefinitionId == stockProd.WindowStockDefinitionId; + + let EF_stock = errorfield.EF_stock || ''; + let EStyle_StockInput = show_errorhere && showPrdErrHere && EF_stock == 'input1_' ? customStyle.stk_inptSTyle_error : {}; + + return ( + + {isListedSKUEnable != true && {stockProd.ProductName}} + {isListedSKUEnable == true && + + + { let val1 = (val == true) ? 1 : 0; setWindowStockVal(val1, window, stockProd, 'isWindPresent') }} + style={[customStyle.WStkHdr_checkbox, (Platform.OS == 'ios' ? { height: 20, width: 20, marginTop: 5, marginLeft: 5, } : {})]} + tintColors={{ true: PageTheme.$primary_color, false: PageTheme.$text_color_light }} + /> + + {stockProd.ProductName} + } + {((isListedSKUEnable == true && StockQtyRequired == 1 && isWindPresent == 1) || isListedSKUEnable != true) && + + + Stock + + + { inputRefs.current['input1_' + stockProd.WindowDefinitionId + '_' + stockProd.WindowStockDefinitionId] = reff; }} + placeholder="" + autoComplete='off' + placeholderTextColor={PageTheme.$placeholder_color} + keyboardType={'number-pad'} + returnKeyType={(Platform.OS === 'ios') ? 'done' : 'next'} + blurOnSubmit={false} + value={stock + ''} + onSubmitEditing={() => { focusToNext(WindowStocks, windowIndex, stockProd, index) }} + onChangeText={(val) => { setWindowStockVal(val, window, stockProd, 'Stock', 'numeric') }} + /> + + } + + ); + }} + /> + + } + {(window.NoOfSplit > 0 && WindowSplits.length > 0 && (isImage1 == 1 || isImage2 == 1)) && + + + {'Capture Window Images'} + + `spliItem_${index.toString()}`} + renderItem={({ item, index }) => { + let splitItem = item; + let splitItemIndex = index; + let Image1Name = splitItem['Image1Name'] != null && splitItem['Image1Name'] != '' ? splitItem['Image1Name'] : ''; + let Image2Name = splitItem['Image2Name'] != null && splitItem['Image2Name'] != '' ? splitItem['Image2Name'] : ''; + let Image1 = splitItem['Image1'] != null && splitItem['Image1'] != '' ? splitItem['Image1'] : ''; + let Image2 = splitItem['Image2'] != null && splitItem['Image2'] != '' ? splitItem['Image2'] : ''; + let isImg1mad = splitItem['img1Required'] || false; + let isImg2mad = splitItem['img2Required'] || false; + + + // highlight split image box + let EF_splitItemIndex = errorfield.EF_splitItemIndex || ''; + let showSplitItemErrHere = EF_splitItemIndex == splitItemIndex; + + let EF_splitImage1 = errorfield.EF_splitImage1 || ''; + let EStyle_splitImage1 = show_errorhere && showSplitItemErrHere && EF_splitImage1 == 'splitImage1' ? customStyle.error_CatImage2 : {}; + + let EF_splitImage2 = errorfield.EF_splitImage2 || ''; + let EStyle_splitImage2 = show_errorhere && showSplitItemErrHere && EF_splitImage2 == 'splitImage2' ? customStyle.error_CatImage2 : {}; + + + + return ( + + {isImage1 == 1 && + + {/* { (Image1=='' || Image1==null) && + {openCamera(window,splitItem,splitItemIndex,'1')}}> + + + } + { (Image1!='' && Image1!=null) && + + + {openCamera(window,splitItem,splitItemIndex,'1')}}> + + + + } */} + + {((Image1 == '' || Image1 == null) && isImg1mad) ? + { openCamera(window, splitItem, splitItemIndex, '1') }}> + + : (Image1 == '' || Image1 == null) ? + { openCamera(window, splitItem, splitItemIndex, '1') }}> + + : (Image1 != '' || Image1 != null) ? + { OpenImgModal(Image1, window, splitItem, splitItemIndex, '1') }}> + + : null + } + {camera1Label} + + } + {isImage2 == 1 && + + + {((Image2 == '' || Image2 == null) && isImg2mad) ? + { openCamera(window, splitItem, splitItemIndex, '2') }}> + + : (Image2 == '' || Image2 == null) ? + { openCamera(window, splitItem, splitItemIndex, '2') }}> + + : (Image2 != '' || Image2 != null) ? + { OpenImgModal(Image2, window, splitItem, splitItemIndex, '2') }}> + + : null + } + {/* {console.log('camera2Label 2:', camera2Label)} */} + {camera2Label} + + } + + ); + }} + /> + + } + + {(WindowQuestions.length > 0) && + + + {'Window Questions'} + + {WindowQuestions.map((item, index) => { + + let qtn = item; + let qtnIndex = index; + let selansid = '', selanswer = '', selimg = '', showImageTag = false; + let id_key = qtn.WindowQuestionId + '_AnswerId'; + let ans_key = qtn.WindowQuestionId + '_Answer'; + let multi_key = qtn.WindowQuestionId + '_MultiOption'; + let date_key = qtn.WindowQuestionId + '_Date'; + let img_key = qtn.WindowQuestionId + '_ImagePath1'; + let imgname_key = qtn.WindowQuestionId + '_ImageName1'; + let rating_key = qtn.WindowQuestionId + '_Rating'; + + let list_mcdata = []; + let isDisabled = qtn.isDisabled; + + if (qtn.QuestionType == 'Single choice list') { + selansid = QuestionsData[id_key] != null ? QuestionsData[id_key] : ''; + selanswer = QuestionsData[ans_key] != null ? QuestionsData[ans_key] : ''; + } + else if (qtn.QuestionType == 'Multi choice list') { + if (qtn.Answers != null) { + for (var i = 0; i < qtn.Answers.length; i++) { + let obj = { 'AnswerId': parseInt(qtn.Answers[i].AnswerId), 'Answer': qtn.Answers[i].Answer }; + list_mcdata.push(obj); + } + } + + selansid = QuestionsData[multi_key] != null && QuestionsData[multi_key] != '' ? QuestionsData[multi_key].split(',') : []; + + } + else if (qtn.QuestionType == 'Number' || qtn.QuestionType == 'Text' || qtn.QuestionType == 'Decimal' || qtn.QuestionType == 'Date') { + selansid = QuestionsData[ans_key]; + selanswer = (qtn.QuestionType == 'Date') ? (QuestionsData[date_key] || moment().format('MM/DD/YYYY')) : ''; + showImageTag = (qtn.WQShowCamera == 1 || qtn.WQShowCamera == 'true'); + } + else if (qtn.QuestionType == 'Rating') { + selanswer = QuestionsData[ans_key] ? QuestionsData[ans_key] : ''; + } + + + if ((qtn.QuestionType == 'Single choice list' || qtn.QuestionType == 'Multi choice list')) { + if (qtn.Answers && qtn.Answers.length > 0) { + for (var i = 0; i < qtn.Answers.length; i++) { + let ansss = qtn.Answers[i]; + let isandImgAl = (ansss.WAShowCamera == 'true' || ansss.WAShowCamera == 1); + + if (qtn.QuestionType == 'Single choice list' && (isandImgAl && ansss.AnswerId == selansid)) { + showImageTag = true; + } + else if (qtn.QuestionType == 'Multi choice list' && (isandImgAl && selansid.indexOf(ansss.AnswerId) >= 0)) { + showImageTag = true; + } + + } + } + } + + + if (showImageTag) { + selimg = QuestionsData[img_key] != null && QuestionsData[img_key] != '' ? 'file://' + QuestionsData[img_key] : ''; + } + + let EF_qtn = errorfield.EF_qtn != null ? errorfield.EF_qtn : {}; + let showQtnErrHere = EF_qtn.WindowQuestionId == qtn.WindowQuestionId; + + let EF_Qtn_MultiChoice = errorfield.EF_Qtn_MultiChoice || ''; + let EStyle_Qtn_MultiChoice = show_errorhere && showQtnErrHere && EF_Qtn_MultiChoice == 'Qtn_MultiChoice' ? customStyle.stk_MultiSSTyle_error : customStyle.wind_MultiSearchInputStyle; + + + let EF_Qtn_Date = errorfield.EF_Qtn_Date || ''; + let EStyle_Qtn_Date = show_errorhere && showQtnErrHere && EF_Qtn_Date == 'Qtn_Date' ? customStyle.stk_inptSTyle_error : {}; + + let EF_Qtn_Input = errorfield.EF_Qtn_Input || ''; + let EStyle_Qtn_Input = show_errorhere && showQtnErrHere && EF_Qtn_Input == 'Qtn_Input' ? customStyle.stk_inptSTyle_error : {}; + + let EF_Qtn_Image = errorfield.EF_Qtn_Image || ''; + let EStyle_Qtn_Image = show_errorhere && showQtnErrHere && EF_Qtn_Image == 'Qtn_Image' ? customStyle.stk_inptSTyle_error : {}; + + + if (!isDisabled) { + return ( + + {qtn.WindowQuestionName} + {qtn.QuestionType == 'Single choice list' && qtn.Answers && + render_Picker('Answer', 'AnswerId', onselectionChange2, { value: selanswer, qtn: qtn, window: window }) + } + {qtn.QuestionType == 'Multi choice list' && qtn.Answers && + { setMultiSelectValue(selectedItems, qtn, window) }} //setMultiSelectValue(selectedItems,qtn) + selectedItems={selansid} + selectText="Pick Items" + searchInputPlaceholderText="Search Items..." + // onChangeInput={ (text)=> console.log(text)} + tagRemoveIconColor={PageTheme.$primary_color} + tagBorderColor={PageTheme.$primary_color} + tagTextColor={PageTheme.$primary_color} + selectedItemTextColor={PageTheme.$primary_color} + selectedItemIconColor={PageTheme.$primary_color} + itemTextColor={PageTheme.$text_color} + displayKey="Answer" + searchInputStyle={EStyle_Qtn_MultiChoice} + submitButtonColor={PageTheme.$primary_color} + submitButtonText="Submit" + /> + } + {(qtn.QuestionType == 'Number' || qtn.QuestionType == 'Decimal' || qtn.QuestionType == 'Text') && + { setTextValue(val, qtn, window, (qtn.QuestionType == 'Decimal' ? 'decimal' : (qtn.QuestionType == 'Text' ? 'text' : 'numeric'))) }} + /> + } + { + (qtn.QuestionType == 'Date') && + + {selansid != '' ? selansid : 'MM/YYYY'} + { setDateValue(selanswer); showQtnDatePicker(qtn, window, true) }}> + + + + } + {((qtn.showDatePicker == true || qtn.showDatePicker == 'true') && (qtn.QuestionType == 'Date')) && + renderDatePicker(qtn, window) + } + { + (qtn.QuestionType == 'Rating') && + + {selanswer} + { setRatingQtn(qtn); setRatingWindow(window); setShowRating(true); }}> + + + + } + + + + { + showImageTag && + + + { openCamera(window, {}, 0, '1', '2', qtn) }}> + + + + } + + + + ) + } + else { + return null; + } + })} + + } + + + + } + + + + + + + ); + }} + /> + ) + } + + function _renderHeader(currentIndex) { + return ( + + {`${(currentIndex + 1)}/${zoomImageUrl.length}`} + { UpdateShow_zoomImageRef(false) }}> + + + + ) + } + + const onCancelClean = () => { + setDataCleanModal(false) + } + const onclear = () => { + onWindowDataClean(DataCleanItem) + } + + return ( + + {processing && } + + + + {_OpenCaptureImage_Modal()} + {ConfirmSaveAlert(props, showAlert, onSaveCancel, saveData)} + {ConfirmSaveAlert(props, DataCleanModal, onCancelClean, onclear, 'Your data will be clean',)} + { setShowCamera(false); getImage(imgData) }} showCamera={showCamera} onHideCamera={() => { setShowCamera(false); }} /> + + + + {Object.keys(storeData).length > 0 && + + {_renderWindow()} + + } + + { onSubmitData() }} /> + + + + + {showRating == true && + renderRatingView() + } + {show_zoomImage && + + null} + /> + + } + + ); +} + + +export default connect(mapStateToProps, mapDispatchToProps)(Window); \ No newline at end of file diff --git a/PerformicsSrc/src/screens/WindowIR.js b/PerformicsSrc/src/screens/WindowIR.js new file mode 100644 index 0000000..6480294 --- /dev/null +++ b/PerformicsSrc/src/screens/WindowIR.js @@ -0,0 +1,3400 @@ +import React, { useState, useEffect, useRef } from 'react'; +import Container from '../components/container'; +import { useRoute } from '@react-navigation/native'; +import { globalStyles, customStyles, GetPageTheme } from "../styles/Global"; +import { StatusBar, Image, TextInput, View, Text, ScrollView, TouchableOpacity, Platform, PermissionsAndroid, FlatList, Alert, Animated, AppState, DeviceEventEmitter, Keyboard } from 'react-native'; +import { ReactReduxContext, connect, useSelector, useDispatch } from 'react-redux'; +import { mapStateToProps, mapDispatchToProps } from '../reducers/contextProvider'; +import SQLite from 'react-native-sqlite-2'; +import { notify } from '../components/notify'; +import moment from 'moment'; +import { UploadData2, getDownloadJson, getKPIFields, marktext1, marktext2, restore_ImageWithMetaData, validateNumber } from '../controller/functions'; +import { get_item, set_item, clear_item } from '../components/localStorage'; +import { version, sloganline, appname, testurl, db, colors_Arr, common_ImagePath, ImageFolderPath } from '../constants/constants'; +import CustomHeader from '../components/customHeader'; + +import { AntDesign, Entypo, FontAwesome, Fontisto, MaterialCommunityIcons } from '../components/icons'; + +import CustomLoader from '../components/CustomLoader'; +import LinearGradient from 'react-native-linear-gradient'; +import { AppTables } from '../constants/tableConstants'; +import * as RNFS from 'react-native-fs'; +import GradientButton from '../components/gradientButton'; +import CustomModal from '../components/CustomModal'; + +import { ConfirmSaveAlert } from '../components/alert'; +import ModalSelector from 'react-native-modal-selector' +import { CustomPicker, CustomPicker2 } from '../components/CustomPicker'; +import CustomCamera from '../components/Camera'; +import ImageViewer from 'react-native-image-zoom-viewer'; +import DateTimePicker from '@react-native-community/datetimepicker'; +import CameraImg from '../assets/performics/camera_front_image.svg' +import MultiSelect from 'react-native-multiple-select'; +import CheckBox from '@react-native-community/checkbox'; +import CameraImg3 from '../assets/performics/camera_tick.svg'; +import CameraImg2 from '../assets/performics/camera_icon.svg'; +import CameraImg4 from '../assets/performics/camera_asterisk.svg'; +import CameraImg5 from '../assets/image/astrickcamera.svg'; +import IRLogin from '../components/IRLogin'; +import { METHODS, getMethodName } from '../constants/methodNames'; +import { SyncIRsessionsInKPI } from '../constants/uploadData'; + + +function WindowIR(props) { + const route = useRoute(); + const ST = props.StaticText || {}; + + // get all theme styles acc to current theme set + const PageTheme = GetPageTheme(props.DarkMode, route.name); + const customStyle = customStyles(props.DarkMode, route.name); + const animatedChoice = useRef(new Animated.Value(0)).current; + + const [processing, setProcessing] = useState(true); + const [loaderTitle, setLoaderTitle] = useState('loading...'); + const [isAdhocScreen, setIsAdhocScreen] = useState(false); + const [storeData, setStoreData] = useState({}); + const [currentMenu, setCurrentMenu] = useState({}); + const [rerenderdata, setrerenderdata] = useState(0); + const [rerenderdata2, setrerenderdata2] = useState(0); + const [rerenderdata3, setrerenderdata3] = useState(0); + const [rerenderdata4, setrerenderdata4] = useState(0); + + const [hasUnsavedChanges, setHasUnsavedChanges] = useState(false); + + const [WindowData, setWindowData] = useState([]); + const [reasons_list, setReasons_list] = useState([]); + const [Windows, setWindows] = useState([]); + const [show_zoomImage, setShow_zoomImage] = useState(false); + const [show_zoomImage2, setShow_zoomImage2] = useState(false); + const Show_zoomImageRef = useRef(false); + const Show_zoomImageRef2 = useRef(false); + const [refImageIndex, setrefImageIndex] = useState(0); + const [refImageIndex2, setrefImageIndex2] = useState(0); + const [showAlert, setShowAlert] = useState(false); + const [zoomImageUrl, setZoomImageUrl] = useState([]); + const [zoomImageUrl2, setZoomImageUrl2] = useState([]); + const [showCamera, setShowCamera] = useState(false); + const showCameraRef = useRef(false); + const [getImageProps, setGetImageProps] = useState({}); + const zoomView = useRef(null); + const zoomView2 = useRef(null); + const [showRating, setShowRating] = useState(false); + const [RatingQtn, setRatingQtn] = useState({}); + const [RatingWindow, setRatingWindow] = useState({}); + const [RatingOrder, setRatingOrder] = useState([]); + + const [Products, setProducts] = useState([]); + const [DisplayList, setDisplayList] = useState([]); + const [toRemoveId, setToRemoveId] = useState(''); + const [toRemoveItem, setToRemoveItem] = useState({}); + const [showRemoveConfirm_M, setshowRemoveConfirm_M] = useState(false); + const [showRAllC_M, setShowRAllC_M] = useState(false); + const [KPIFields, setKPIFields] = useState([]); + + const [GridValue, setGridValue] = useState(false); + + const [DataCleanModal, setDataCleanModal] = useState(false); + const [DataCleanAnim, setDataCleanAnim] = useState(""); + const [DataCleanItem, setDataCleanItem] = useState({}); + const [isPresentClean, setIsPresentClean] = useState(0); + + const [InputChange, setInputChange] = useState([]); + + + const [SelectedImg, setSelectedImg] = useState(''); + const [showModal, setShowModal] = useState(false); + const [reCapImgModalObj, setReCapImgModalObj] = useState({}); + const [showImageSaveOp, setShowImageSaveOp] = useState(true); + + const hasUnsavedChangesRef = React.useRef(hasUnsavedChanges); + const WindowDataRef = React.useRef(WindowData); + const StoreIdRef = React.useRef(null); + const ScreenNameRef = React.useRef(''); + const [StoreCameraAllow, setStoreCameraAllow] = useState(true); + + const inputRefs = useRef({}); + + // IR states or refs + const [isDataExists, setisDataExists] = useState(false); + const [isDataUploaded, setisDataUploaded] = useState("N"); + const WindowIRImages = useRef([]); + const GbTempSessionId = useRef(""); + const GbTempSessionObj = useRef({}); + const sessionsToUpload = useRef([]); + const sessionsToUploadDetails = useRef([]); + const sessionsUploadedCount = useRef(0); + const sessionsReceived = useRef(0); + const [showRetakeModal, setshowRetakeModal] = useState(false); + const [retakeMData, setretakeMData] = useState({}); + const [showUploadAlert, setshowUploadAlert] = useState(false); + const [windIRParams, setWindIRParams] = useState({}); + + const d1 = new Date(); + const d2 = moment(d1).format('MM/DD/YYYY'); + + + useEffect(() => { + console.log("window IR page init") + let params = props.route.params ? props.route.params : {}; + let storeData1 = params.storeData || {}; + let menu1 = params.menu || {}; + let cameraAllow = storeData1.CameraAllow == 'true' || storeData1.CameraAllow == 1 ? true : false; + setStoreCameraAllow(cameraAllow); + + let isAdhoc = params.isAdhoc || false; + setIsAdhocScreen(isAdhoc); + setStoreData(storeData1); + setCurrentMenu(menu1); + + StoreIdRef.current = storeData1.StoreId + ScreenNameRef.current = { BgscreenName: menu1.ScreenName, BgMenuId: menu1.MenuId } + + let IR_Creds = props.IR_Creds != null && props.IR_Creds != "" ? JSON.parse(props.IR_Creds) : []; + let IR_CredsObj = IR_Creds.length > 0 ? IR_Creds[0] : {}; + let Wind_IRCreds = IR_CredsObj.Window != null && IR_CredsObj.Window.length > 0 ? IR_CredsObj.Window[0] : {}; + setWindIRParams(Wind_IRCreds); + + console.log("window IR page get data start") + getData(storeData1, menu1); + + const AppStateSubscription = AppState.addEventListener('change', (pro) => { _handleAppStateChange(pro) }); + const removeIRListener = DeviceEventEmitter.addListener('onIRImageUpload', (data) => { onIRImageUpload(data, storeData1, menu1) }); + props.navigation.addListener('beforeRemove', onBeforeRemove); + + return function cleanup() { + IRLogin.deRegisterReceiver(); + AppStateSubscription.remove(); + removeIRListener.remove(); + props.navigation.removeListener('beforeRemove', onBeforeRemove); + }; + }, []); + + const _handleAppStateChange = async (nextAppState) => { + if (nextAppState == 'background' && hasUnsavedChangesRef.current == true) { + + let newData = { + storeBGData: WindowDataRef.current, + menuName: ScreenNameRef.current && ScreenNameRef.current.BgscreenName, + StoreId1: StoreIdRef.current, + BgMenuID: ScreenNameRef.current && ScreenNameRef.current.BgMenuId, + bg_GbTempSessionId: GbTempSessionId.current, + bg_WindowIRImages: WindowIRImages.current, + visiteDate: d2 + } + let WindowsStr = await JSON.stringify(newData) + await set_item('storeData', WindowsStr); + } + } + + // useEffect(() => { + // props.navigation.removeListener('beforeRemove', onBeforeRemove); + // props.navigation.addListener('beforeRemove', onBeforeRemove); + // }, [hasUnsavedChanges]); + + // useEffect(() => { + // props.navigation.removeListener('beforeRemove', onBeforeRemove); + // props.navigation.addListener('beforeRemove', onBeforeRemove); + // }, [showCamera]); + + function onBeforeRemove(e) { + // console.log("onBeforeRemove:",showCameraRef.current,show_zoomImage,hasUnsavedChangesRef.current); + if (showCameraRef.current == true) { + e.preventDefault(); + UpdateShowCameraRef(false); + } + else if (Show_zoomImageRef.current == true || Show_zoomImageRef2.current == true) { + e.preventDefault(); + UpdateShow_zoomImageRef(false); + UpdateShow_zoomImageRef2(false); + } + else { + if (hasUnsavedChangesRef.current == true) { + e.preventDefault(); // Prevent default behavior of leaving the screen + onRemoveScreen(e); + } + else { + return; + } + } + } + + function BgUnsavedChanges(val) { + hasUnsavedChangesRef.current = val + setHasUnsavedChanges(val); + } + + function UpdateShowCameraRef(val) { + showCameraRef.current = val + setShowCamera(val); + } + + function UpdateShow_zoomImageRef(val) { + Show_zoomImageRef.current = val + setShow_zoomImage(val); + } + + function UpdateShow_zoomImageRef2(val) { + Show_zoomImageRef2.current = val + setShow_zoomImage2(val); + } + + + + + function BgWindowData(val) { + WindowDataRef.current = val + setWindowData(val); + } + + async function onIRImageUpload(data, storeData1, menu1) { + console.log('onIRImageUpload on receive', data); + let { message, sessionId, status } = data; + let snum = sessionsReceived.current + 1; + let su_num = sessionsUploadedCount.current; + console.log('onreceive data', data); + sessionsReceived.current = snum; + let thisIR_SessObjIndex = sessionsToUploadDetails.current.findIndex(i => i.TEMP_SESSION_ID == sessionId); + let thisIR_SessObj = sessionsToUploadDetails.current[thisIR_SessObjIndex]; + if (status != null && status == '200' && sessionId != null && sessionId != '') { + + let UnSessionId = await IRLogin.getDataIRSession(sessionId); + if (UnSessionId != null && UnSessionId != '') { + sessionsUploadedCount.current = ++su_num; + let isUpdated = await UpdateIRUploadStatus(storeData1, menu1, sessionId, UnSessionId); + let isUploaded = await LogImageUpload(storeData1, menu1, sessionId, UnSessionId, message, status, thisIR_SessObj); + console.log("su_num:", su_num); + if (isUploaded) { + console.log('Image Uploaded'); + notify("Images Log uploaded for session:" + sessionId); + } + else { + console.log('cannot Uploaded image'); + notify("cannot upload log for session:" + sessionId); + } + + } + else { + console.log('OnReceived UnSessionId get', UnSessionId); + notify("Cannot upload images for session:" + sessionId + ". Universal Id not found"); + let isUploaded = await LogImageUpload(storeData1, menu1, sessionId, "", message, status, thisIR_SessObj); + if (isUploaded) { + console.log('Image Uploaded'); + notify("Images Log uploaded for session:" + sessionId); + } + else { + console.log('cannot Uploaded image'); + notify("cannot upload log for session:" + sessionId); + } + + } + + } + else { + console.log('Cannot get OnReceived UnSessionId'); + notify((message != null && message != "" ? message + ". " : "") + "Cannot upload images for session:" + sessionId); + let isUploaded = await LogImageUpload(storeData1, menu1, sessionId, "", message, status, thisIR_SessObj); + if (isUploaded) { + console.log('Image Uploaded'); + notify("Images Log uploaded for session:" + sessionId); + } + else { + console.log('cannot Uploaded image'); + notify("cannot upload log for session:" + sessionId); + } + + + } + + console.log("check snum and su_num:", snum, su_num, sessionsToUpload.current.length); + // if last broadcast received either uploaded or not update the processing status to false + if (snum == sessionsToUpload.current.length) { + setProcessing(false); + console.log('Deregister event when last received'); + IRLogin.deRegisterReceiver(); + } + + // All IR Sessions with Images Uploaded : set DataUploaded Status to U (Fully Upload) + if (su_num == sessionsToUpload.current.length) { + setisDataUploaded("U"); + setProcessing(false); + notify("All IR images uploaded!"); + console.log('set all uploaded true to U'); + } + // Some Of IR Sessions with Images Uploaded but some are yet pending : set DataUploaded Status to P (Partial Upload) + else if (su_num > 0 && su_num != sessionsToUpload.current.length) { + // setProcessing(false); + setisDataUploaded("P"); + notify("Some IR Images are still not uploaded!"); + console.log('set all uploaded true to P'); + } + } + + + function onRemoveScreen(e) { + Alert.alert( + "", + "Do you really want to exit the screen?", + [ + { + text: "Cancel", + onPress: () => { }, + style: "cancel" + }, + { + text: "OK", onPress: async () => { + // setHasUnsavedChanges(false); + BgUnsavedChanges(false) + // await clear_item('storeData') + props.navigation.dispatch(e.data.action); + } + } + ] + ); + } + + + async function getData(storeData1, menu1) { + try { + let { StoreId, ChainId, StateId, StoreTypeId } = storeData1; + + let AllKPIFields = await getKPIFields(menu1); + setKPIFields(AllKPIFields); + + let isKPIIREnableI = AllKPIFields.findIndex(i => i.KPIFieldName == 'KPIIREnable') + let isKPIIREnableObj = isKPIIREnableI >= 0 ? AllKPIFields[isKPIIREnableI] : {}; + let isKPIIREnable = isKPIIREnableI >= 0 ? isKPIIREnableObj['KPIFieldEnable'] : false; + + let CameraIROnceOnlyIndex = AllKPIFields.findIndex(i => i.KPIFieldName == 'CameraIROnceOnly') + let CameraIROnceOnlyObj = CameraIROnceOnlyIndex >= 0 ? AllKPIFields[CameraIROnceOnlyIndex] : {}; + let CameraIROnceOnly = CameraIROnceOnlyIndex >= 0 ? CameraIROnceOnlyObj['KPIFieldEnable'] : true; + + + let storeBGData1 = [], bgStoreJson = {}, isBGDataExists = false; + let windData = await get_item('storeData') + if (windData != null && windData != '') { + let StoreJson = await JSON.parse(windData) + let { storeBGData, menuName, StoreId1, BgMenuID, visiteDate, bg_GbTempSessionId, bg_WindowIRImages } = StoreJson + + // Check if bg data exists for this Store and menu on today date + if (menuName == menu1.ScreenName && StoreId1 == StoreId && menu1.MenuId == BgMenuID && visiteDate == d2) { + isBGDataExists = true; + + // Check if paid visibilities data exists in bg data + if (storeBGData.length > 0) { + storeBGData1 = storeBGData; + bgStoreJson = StoreJson + // setWindowData(storeBGData); + BgWindowData(storeBGData); + BgUnsavedChanges(true); + console.log("set bg data"); + } + + // Check if IR Images and session present in bg data + if (bg_GbTempSessionId != null && bg_GbTempSessionId != '' && bg_WindowIRImages != null && bg_WindowIRImages.length > 0) { + WindowIRImages.current = bg_WindowIRImages; + GbTempSessionId.current = bg_GbTempSessionId; + } + } + } + + await db.transaction(async function (txn) { + + + let q3 = `Select WindowReasonId as ReasonId,WindowReason as Reason From Master_WindowReason where MenuId='${menu1.MenuId}' `; + await txn.executeSql(q3, [], async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + let arr = []; + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + arr.push(data); + if (i == txnres2.rows.length - 1) { + setReasons_list(arr); + } + } + } + }, function (txnE, txnerr) { console.log(txnerr); },); + + // check if data exists + let join4 = '', qIRSelect = ''; + if (isKPIIREnable && !CameraIROnceOnly) { // If IR enabled and IR camera is shown for each window + join4 = `Left outer join ${AppTables.WINDOW_IRUPLOAD} u on w.WindowDefinitionId=u.WINDOW_DEFINITION_ID and w.WindowId=u.WINDOW_ID and u.STORE_ID='${StoreId}' and u.MENU_ID='${menu1.MenuId}' and u.VISIT_DATE='${d2}' ` + qIRSelect = ` ,u.TEMP_SESSION_ID as TempSessionId,u.UN_SESSION_ID as UploadSessionId,u.UPLOAD_STATUS as UploadStatus,u.SYNC_STATUS as SyncStatus,u.SESSION_STORECODE as Sess_StoreCode,u.SESSION_TASKNAME as Sess_TaskName,u.SESSION_CATNAME as Sess_CatName,u.SESSION_PHOTOTYPE as Sess_PhotoType`; + } + let selectlist = ` w.STORE_ID as StoreId,w.WINDOW_HEADER_ID as windowHeaderId,wd.WindowDefinitionId,wd.WindowId,wd.WindowName,wd.WindowTable,wd.WindowField,wd.WindowValue,wd.ChildName,wd.WindowRefImage,wd.WindowElementCheckAssortment,wd.WindowElementStockRequired,w.IS_PRESENT as IsPresent,wd.WindowNotExistCamera,w.WINDOW_NA_IMAGE as WindowNAImage,wd.WindowExistReasonEnable,wd.WindowNotExistReasonEnable,w.REASON_ID as ReasonId,w.REASON as Reason,wd.NoOfSplit,wd.WindowImage1,wd.WindowImage2,wd.WindowImage1Lable,wd.WindowImage2Lable,wd.WindowImage1CameraGrid,wd.WindowImage2CameraGrid,wd.StockQtyRequired ${qIRSelect}`; + let join = ` inner join Master_WindowDefinition wd on w.WINDOW_DEFINITION_ID=wd.WindowDefinitionId `; + let q = ` Select ${selectlist} from ${AppTables.WINDOW_HDR_DATA} w ${join} ${join4} where w.STORE_ID='${StoreId}' and w.MENU_ID='${menu1.MenuId}' `; + + // else pick data from masters + let selectlist2 = ` s.StoreId,w.WindowDefinitionId,w.WindowId,w.WindowName,w.WindowTable,w.WindowField,w.WindowValue,w.ChildName,w.WindowRefImage,w.WindowElementCheckAssortment,w.WindowElementStockRequired,'' as IsPresent,w.WindowNotExistCamera,'' as WindowNAImage,w.WindowExistReasonEnable,w.WindowNotExistReasonEnable,'' as ReasonId,'' as Reason,w.NoOfSplit,w.WindowImage1,w.WindowImage2,w.WindowImage1Lable,w.WindowImage2Lable,w.WindowImage1CameraGrid,w.WindowImage2CameraGrid,w.StockQtyRequired`; + let join2 = ` inner join Mapping_StoreWindow s on w.WindowDefinitionId=s.WindowDefinitionId `; + let q2 = ` Select ${selectlist2} from Master_WindowDefinition w ${join2} where s.StoreId='${StoreId}' and w.MenuId='${menu1.MenuId}' `; + + + let allWindowsData = [], inputChangeFlag = []; + + await txn.executeSql(q, [], async function (txn2, txnres2) { + console.log("added count:", txnres2.rows.length); + if (txnres2.rows.length > 0) { + let arr = []; let images = []; + + + + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + let isPresent = data.IsPresent == '1' || data.IsPresent == 1 ? 1 : 0; + if (isBGDataExists) { + let storeBgIndex = storeBGData1.findIndex(i => i.WindowId == data.WindowId && i.WindowDefinitionId == data.WindowDefinitionId) + let storeBgObj = storeBgIndex >= 0 ? storeBGData1[storeBgIndex] : {}; + isPresent = storeBgObj.isPresent == '1' || storeBgObj.isPresent == 1 ? 1 : 0; + } + + let animatedChoice = new Animated.Value(isPresent); + data.animatedChoice = animatedChoice; + data.NoOfSplit = parseInt(data.NoOfSplit); + + let NoOfSplit = data.NoOfSplit; + + let isStockReq = data.WindowElementStockRequired == 'true' || data.WindowElementStockRequired == 1 ? 1 : 0; + let imgObj = { imgIndex: (i + 1), url: data.WindowRefImage, props: {} } + images.push(imgObj); + + let WindowSplits = await getWindowSplits(NoOfSplit, data, storeData1, menu1); + let IRImages = [], IRImages1 = [], zoomIRImages = [], zoomIRImages1 = []; + if (isKPIIREnable && !isBGDataExists) { //perform action only if IRImages flag is enable for this KPI and if bg data does not exists + if (CameraIROnceOnly && i == 0) {// get IR images for all KPI at once if CameraIROnceOnly enabled + let IRImgResObj = await getIRImages({}, storeData1, menu1, "2"); + IRImages1 = IRImgResObj != null && IRImgResObj["allImages"] != null ? IRImgResObj["allImages"] : []; + zoomIRImages1 = IRImgResObj != null && IRImgResObj["zoomIRImages"] != null ? IRImgResObj["zoomIRImages"] : []; + // setWindowIRImages(IRImages); + WindowIRImages.current = IRImages1; + setZoomImageUrl2(zoomIRImages1); + } + else if (!CameraIROnceOnly) {// get IR images for each window if CameraIROnceOnly is not enabled + let IRImgResObj = await getIRImages(data, storeData1, menu1, "1"); + IRImages = IRImgResObj != null && IRImgResObj["allImages"] != null ? IRImgResObj["allImages"] : []; + zoomIRImages = IRImgResObj != null && IRImgResObj["zoomIRImages"] != null ? IRImgResObj["zoomIRImages"] : []; + } + } + + let WQr = await getWindowQuestions(data, storeData1, isPresent, menu1); + let WindowQuestions = WQr['WindowQuestions'] || []; + let WindowQA = WQr['WindowQA'] || {}; + let WSd = isStockReq == true ? await getWindowStockData(data, storeData1, isPresent, menu1) : { 'WStocks': [], 'WStocksData': [] }; + let WStocks = WSd['WStocks'] || []; + let WStocksData = WSd['WStocksData'] || []; + let isAllChecked = WSd['isAllChecked'] != null ? WSd['isAllChecked'] : 0; + + let isNAImageAvl = data.WindowNotExistCamera == 'true' || data.WindowNotExistCamera == 1 ? 1 : 0; + let NAImage1 = isNAImageAvl == 1 && data.WindowNAImage != null ? data.WindowNAImage : ''; + let NAImage1Path = NAImage1 != '' ? 'file://' + ImageFolderPath + menu1.ScreenName + "/" + NAImage1 : ''; + + + let windowDataObj = { 'WindowId': data.WindowId, 'WindowDefinitionId': data.WindowDefinitionId, 'WindowSplits': WindowSplits, 'WindowQA': WindowQA, 'WStocksData': WStocksData, 'NAImage1': NAImage1, 'NAImage1Path': NAImage1Path, 'ReasonId': data.ReasonId, 'Reason': data.Reason, 'isPresent': isPresent, 'isAllSKUChecked': isAllChecked }; + if (isKPIIREnable && !CameraIROnceOnly && !isBGDataExists) { // If IR enable and IR camera is shown for each window and if bg data does not exists + windowDataObj['IRImages'] = IRImages; + windowDataObj['zoomIRImages'] = zoomIRImages; + windowDataObj['TempSessionId'] = data.TempSessionId; + windowDataObj['Sess_StoreCode'] = data.Sess_StoreCode; + windowDataObj['Sess_TaskName'] = data.Sess_TaskName; + windowDataObj['Sess_CatName'] = data.Sess_CatName; + windowDataObj['Sess_PhotoType'] = data.Sess_PhotoType; + + + if (data.UploadStatus == '1' && isDataUploaded != 'P' && isDataUploaded != 'U') { + console.log('cat hdr image upload success: P'); + // stop editing if any image is uploaded + setisDataUploaded("P"); + } + + if (data.UploadStatus != '1') { + // check if any image is not uploaded then set uploaded status to U + isfullyUploaded = false; + } + + } + + data['WindowQuestions'] = WindowQuestions; + data['WindowStocks'] = WStocks; + + let changesFlag = { WindowId: data.WindowId, WindowDefinitionId: data.WindowDefinitionId, Flag: true } + inputChangeFlag.push(changesFlag) + + arr.push(data); + + allWindowsData.push(windowDataObj); + if (i == txnres2.rows.length - 1) { + let { menuName, StoreId1, BgMenuID } = bgStoreJson + if (!isBGDataExists) { + // setWindowData(allWindowsData); + BgWindowData(allWindowsData); + } + + if (isKPIIREnable) {// set IR Images Upload Status if KPI IR flag is enabled + if (CameraIROnceOnly) { // Camera for each window is not enabled + let isChecked = await getUploadIRStatus(storeData1, menu1); + } + else if (!CameraIROnceOnly && isfullyUploaded) { // Stop Upload and Editing both when fully uploaded, Case: if Camera for each window is enabled + setisDataUploaded('U'); + } + } + + + setisDataExists(true); + setInputChange(inputChangeFlag) + setWindows(arr); + setZoomImageUrl(images); + setProcessing(false); + } + } + } + else { + await txn.executeSql(q2, [], async function (txn2, txnres2) { + console.log("load count:", txnres2.rows.length); + if (txnres2.rows.length > 0) { + let arr = [], images = []; + + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + + let isPresent = 0; + if (isBGDataExists) { + let storeBgIndex = storeBGData1.findIndex(i => i.WindowId == data.WindowId && i.WindowDefinitionId == data.WindowDefinitionId) + let storeBgObj = storeBgIndex >= 0 ? storeBGData1[storeBgIndex] : {}; + console.log("storeBgObj in getdata:", storeBgObj); + isPresent = storeBgObj.isPresent == '1' || storeBgObj.isPresent == 1 ? 1 : 0; + } + + let animatedChoice = new Animated.Value(isPresent); + data.animatedChoice = animatedChoice; + data.NoOfSplit = parseInt(data.NoOfSplit); + + let imgObj = { imgIndex: (i + 1), url: data.WindowRefImage, props: {} } + images.push(imgObj); + + let WindowSplits = []; + for (var s = 0; s < data.NoOfSplit; s++) { + let obj = { 'Image1Name': '', 'Image1': '', 'Image2Name': '', 'Image2': '', img1Required: true, img2Required: true }; + WindowSplits.push(obj); + } + let WQr = await getWindowQuestions(data, storeData1, false, menu1); + let WindowQuestions = WQr['WindowQuestions'] || []; + let WindowQA = WQr['WindowQA'] || {}; + let WSd = await getWindowStockData(data, storeData1, false, menu1); + let WStocks = WSd['WStocks'] || []; + let WStocksData = WSd['WStocksData'] || []; + let isAllChecked = WSd['isAllChecked'] != null ? WSd['isAllChecked'] : 0; + // console.log('WSd:',WSd); + + let windowDataObj = { 'WindowId': data.WindowId, 'WindowDefinitionId': data.WindowDefinitionId, 'WindowSplits': WindowSplits, 'WindowQA': WindowQA, 'WStocksData': WStocksData, 'isPresent': isPresent, 'isAllSKUChecked': isAllChecked }; + data['WindowQuestions'] = WindowQuestions; + data['WindowStocks'] = WStocks; + + let changesFlag = { WindowId: data.WindowId, WindowDefinitionId: data.WindowDefinitionId, Flag: false } + inputChangeFlag.push(changesFlag) + + arr.push(data); + allWindowsData.push(windowDataObj); + if (i == txnres2.rows.length - 1) { + let { menuName, StoreId1, BgMenuID, visiteDate } = bgStoreJson + if (!isBGDataExists) { + BgWindowData(allWindowsData) + } + + setInputChange(inputChangeFlag) + // setWindowData(allWindowsData); + setWindows(arr); + console.log("wind images on load", images); + setZoomImageUrl(images); + setProcessing(false); + } + } + } + else { + setProcessing(false); + } + }, function (txnE, txnerr) { console.log(txnerr); setProcessing(false); },); + } + }, function (txnE, txnerr) { console.log(txnerr); setProcessing(false); },); + + }); + } catch (err) { + console.log(err); + } + } + + async function getIRImages(window, storeData1, menu1, type = "1") { + // let allImages=[]; + let res = { allImages: [], zoomIRImages: [] } + + return new Promise((resolve, reject) => { + + db.transaction(async function (txn) { + + let q = `select IMAGE1 as Image1 from ${AppTables.WINDOW_IR_IMAGES} where STORE_ID='${storeData1.StoreId}' and MENU_ID='${menu1.MenuId}' and VISIT_DATE='${d2}'`; + q += type == '1' ? ` and WINDOW_HEADER_ID='${window.windowHeaderId}'` : ''; + + await txn.executeSql(q, [], async function (txn2, txnres2) { + console.log('get IRImages count ', txnres2.rows.length); + let arr = [], arr2 = []; + if (txnres2.rows.length > 0) { + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + let obj = { 'ImagePath': data.Image1 }; + arr.push(obj); + + let imgObj = { imgIndex: (i + 1), url: data.Image1, props: {} } + arr2.push(imgObj); + + if (i == txnres2.rows.length - 1) { + res['allImages'] = arr + res['zoomIRImages'] = arr2 + resolve(res) + } + } + } + else { + resolve(res) + } + }, function (txnE, txnerr) { console.log(txnerr); resolve(res) },); + }); + }).then((val) => { + return val + }).catch((err) => { + console.log(err); + return res; + }); + } + + async function getUploadIRStatus(storeData1, menu1) { + let allImages = []; + let { StoreId } = storeData1; + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + + // For CameraIROnceOnly enabled condition only one TempSessionId will be genrated per KPI + let q = ` SELECT Distinct TEMP_SESSION_ID as TempSessionId,UN_SESSION_ID as UploadSessionId,UPLOAD_STATUS as UploadStatus,SYNC_STATUS as SyncStatus,SESSION_STORECODE as Sess_StoreCode,SESSION_TASKNAME as Sess_TaskName,SESSION_CATNAME as Sess_CatName,SESSION_PHOTOTYPE as Sess_PhotoType FROM ${AppTables.WINDOW_IRUPLOAD} where STORE_ID='${StoreId}' and MENU_ID='${menu1.MenuId}' and VISIT_DATE='${d2}' `; + await txn.executeSql(q, [], async function (txn2, txnres) { + if (txnres.rows.length > 0) { + let isfullyUploaded = true; + //No Loop required, As For CameraIROnceOnly enabled condition only one TempSessionId will be genrated per KPI + let data = txnres.rows.item(0); + let { Sess_StoreCode, Sess_TaskName, Sess_CatName, Sess_PhotoType } = data; + if (data.UploadStatus == '1' && isDataUploaded != 'P' && isDataUploaded != 'U') { + console.log('getUploadIRStatus success: U'); + // Stop Upload and Editing both when fully uploaded + setisDataUploaded("U"); + } + // setGbTempSessionId(data.TempSessionId); + GbTempSessionId.current = data.TempSessionId; + let obj = { Sess_StoreCode, Sess_TaskName, Sess_CatName, Sess_PhotoType }; + GbTempSessionObj.current = obj; + resolve(true); + } + else { + resolve(true); + } + }, function (txnE, txnerr) { console.log(txnerr); resolve(false); },); + }); + }).catch((err) => { + return false; + }) + } + + async function getWindowSplits(NoOfSplit, window, storeData1, menu1) { + let WindowSplits_def = []; + for (var s = 0; s < NoOfSplit; s++) { + let obj = { 'Image1Name': '', 'Image1': '', 'Image2Name': '', 'Image2': '', img1Required: true, img2Required: true }; + WindowSplits_def.push(obj); + } + return new Promise((resolve, reject) => { + + db.transaction(async function (txn) { + + let q = `select * from ${AppTables.WINDOW_IMAGES} where WINDOW_HEADER_ID='${window.windowHeaderId}' and STORE_ID='${storeData1.StoreId}' and MENU_ID='${menu1.MenuId}' `; + + await txn.executeSql(q, [], async function (txn2, txnres2) { + + if (txnres2.rows.length > 0) { + let arr = []; + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + console.log(data.WINDOW_HEADER_ID) + let isImage1 = window.WindowImage1 == 'true' || window.WindowImage1 == 1 ? 1 : 0; + let isImage2 = window.WindowImage2 == 'true' || window.WindowImage2 == 1 ? 1 : 0; + + let Image1 = isImage1 == 1 && data.IMAGE1 != null && data.IMAGE1 != '' ? 'file://' + ImageFolderPath + menu1.ScreenName + "/" + data.IMAGE1 : ''; + let Image2 = isImage2 == 1 && data.IMAGE2 != null && data.IMAGE2 != '' ? 'file://' + ImageFolderPath + menu1.ScreenName + "/" + data.IMAGE2 : ''; + let obj = { 'Image1Name': data.IMAGE1, 'Image1': Image1, 'Image2Name': data.IMAGE2, 'Image2': Image2 }; + arr.push(obj); + + if (i == txnres2.rows.length - 1) { + resolve(arr) + } + } + } + else { + resolve(WindowSplits_def) + } + }, function (txnE, txnerr) { console.log(txnerr); resolve(WindowSplits_def) },); + }); + }).then((val) => { + return val + }).catch((err) => { + console.log(err); + return WindowSplits_def; + }); + } + + async function getWindowQuestions(window, storeData1, isInserted = false, menu1) { + let obj = { 'WindowQA': {}, 'WindowQuestions': [] } + return new Promise((resolve, reject) => { + + db.transaction(async function (txn) { + var q = '', selectlist = '', join = '', join2 = ''; + if (isInserted == true) { + selectlist = ` DISTINCT q.QUESTION_ID as WindowQuestionId,q.QUESTION_CODE as WindowQuestionCode,wq.WindowQuestionName,wq.QuestionType,wq.WQShowCamera,wq.WQCameraMandatory,wq.WQLengthValidationRequired,wq.WQMinimumChar,wq.WQMaximumChar,wq.WQDecimalPoint,wq.WQDateRangeMin,wq.WQDateRangeMax,wq.WQVoiceLengthInMinutes,wq.WQDefaultQuestionEnable,q.ANSWER as Answer,q.ANSWER_ID as AnswerId,q.MULTI_OPTIONS_IDS as multi_op_ids,q.IMAGE_ALLOW1 as WAShowCamera,q.IMAGE1 as Image1 `; + join2 = ` inner join Mapping_WindowQuestion mq on mq.WindowQuestionId=wq.WindowQuestionId `; + join = ` inner join Master_WindowQuestion wq on wq.WindowQuestionId=q.QUESTION_ID `; + q = `select ${selectlist} from ${AppTables.WINDOW_CHILD_DATA} q ${join} ${join2} where q.STORE_ID='${storeData1.StoreId}' and MENU_ID='${menu1.MenuId}' and q.WINDOW_DEFINITION_ID='${window.WindowDefinitionId}' and q.WINDOW_ID='${window.WindowId}' order by wq.WindowQuestionSequence `; + } + else { + selectlist = ` DISTINCT wq.WindowQuestionId,wq.WindowQuestionCode,wq.WindowQuestionName,wq.QuestionType,wq.WQShowCamera,wq.WQCameraMandatory,wq.WQLengthValidationRequired,wq.WQMinimumChar,wq.WQMaximumChar,wq.WQDecimalPoint,wq.WQDateRangeMin,wq.WQDateRangeMax,wq.WQVoiceLengthInMinutes,wq.WQDefaultQuestionEnable `; + join = ` inner join Mapping_WindowQuestion mq on mq.WindowQuestionId=wq.WindowQuestionId `; + q = `select ${selectlist} from Master_WindowQuestion wq ${join} where mq.WindowDefinitionId='${window.WindowDefinitionId}' order by wq.WindowQuestionSequence `; + } + + await txn.executeSql(q, [], async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + let arr = []; + let wqa_obj = {}; + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + let answers = []; + data.WQDefaultQuestionEnable = data.WQDefaultQuestionEnable == 1 || data.WQDefaultQuestionEnable == 'true' ? true : false; + + if (data.QuestionType == 'Multi choice list' || data.QuestionType == 'Single choice list' || data.QuestionType == 'Rating') { + answers = await getWindowAnswers(data); + if (data.QuestionType == 'Rating') { + data.showRating = false; + } + } + else if (data.QuestionType == 'Date') { + data.showDatePicker = false; + } + data['Answers'] = answers; + + let id_key = data.WindowQuestionId + '_AnswerId'; + let ans_key = data.WindowQuestionId + '_Answer'; + let multi_key = data.WindowQuestionId + '_MultiOption'; + let date_key = data.WindowQuestionId + '_Date'; + let img_key = data.WindowQuestionId + '_ImagePath1'; + let imgname_key = data.WindowQuestionId + '_ImageName1'; + let rating_key = data.WindowQuestionId + '_Rating'; + + + let showImageTag = (data.WQShowCamera == 'true' || data.WQShowCamera == 1); + + data.AnswerId != null ? wqa_obj[id_key] = data.AnswerId : ''; + data.Answer != null ? wqa_obj[ans_key] = data.Answer : ''; + + + let selansid = data.AnswerId != null ? data.AnswerId : ''; + if (data.QuestionType == 'Multi choice list' && selansid != '' && data.multi_op_ids != null) { + selansid = data.multi_op_ids ? data.multi_op_ids.split(',') : []; + wqa_obj[multi_key] = data.multi_op_ids; + } + + if ((data.QuestionType == 'Single choice list' || data.QuestionType == 'Multi choice list') && selansid != '' && selansid != null) { + if (data.Answers && data.Answers.length > 0) { + for (var k = 0; k < data.Answers.length; k++) { + let ansss = data.Answers[k]; + let isandImgAl = (ansss.WAShowCamera == 1 || ansss.WAShowCamera == 'true'); + if (data.QuestionType == 'Single choice list' && (isandImgAl && ansss.AnswerId == selansid)) { + showImageTag = true; + } + else if (data.QuestionType == 'Multi choice list' && (isandImgAl && selansid.indexOf(ansss.AnswerId) >= 0)) { + showImageTag = true; + } + } + } + } + + if (showImageTag && data.Answer != null) { + let imgPath = (Platform.OS == 'ios' ? 'file://' : '') + ImageFolderPath + menu1.ScreenName + "/" + data.Image1; + wqa_obj[imgname_key] = data.Image1; + wqa_obj[img_key] = imgPath; + } + + + + if (data.QuestionType == 'Date' && data.Answer != null) { + let dayonly = moment().format('DD'); + let actual_date = data.Answer ? data.Answer.split('/') : []; + let month = actual_date[0], year = actual_date[1]; + let fulldate = month + '/' + dayonly + '/' + year; + wqa_obj[date_key] = fulldate; + + } + + arr.push(data); + if (i == txnres2.rows.length - 1) { + obj['WindowQuestions'] = arr; + obj['WindowQA'] = wqa_obj; + resolve(obj) + } + } + } + else { + resolve(obj) + } + }, function (txnE, txnerr) { console.log(txnerr); resolve(obj) },); + }); + }).then((val) => { + return val + }).catch((err) => { + console.log(err); + return obj; + }); + } + + + async function getWindowAnswers(qtn) { + + return new Promise((resolve, reject) => { + + db.transaction(async function (txn) { + var q = '', selectlist = ''; + selectlist = ` DISTINCT WindowAnswerId as AnswerId,WindowAnswerName as Answer,WAShowCamera,WACameraMandatory,WAQuestionEnable,WAQuestionDisable `; + q = `select ${selectlist} from Master_WindowQuestion where WindowQuestionId='${qtn.WindowQuestionId}' order by WASequence `; + + await txn.executeSql(q, [], async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + let arr = []; + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + arr.push(data); + if (i == txnres2.rows.length - 1) { + resolve(arr) + } + } + } + else { + resolve([]) + } + }, function (txnE, txnerr) { console.log(txnerr); resolve([]) },); + }); + }).then((val) => { + return val + }).catch((err) => { + console.log(err); + return []; + }); + } + + + //start IR functions + function openRetakeOp(wind, type = '1', IRImgIndex, IRimgPath) { + let data = { 'wind': wind, 'type': type, 'IRImgIndex': IRImgIndex, 'IRimgPath': IRimgPath }; + setretakeMData(data); + setshowRetakeModal(true); + } + + function closeRetakeOp() { + setretakeMData({}) + setshowRetakeModal(false); + } + + + + async function StartCameraSession(wind, type = '1') { + // type: 1 or 2 , 1: Camera enabled for each window header ,2 : Camera enabled for once in KPI + let IR_Creds = props.IR_Creds != null && props.IR_Creds != "" ? JSON.parse(props.IR_Creds) : []; + let IR_CredsObj = IR_Creds.length > 0 ? IR_Creds[0] : {}; + + wind = wind != null ? wind : {}; + let newStdata = storeData; + if (IR_CredsObj.UseStoreCode != 1) { + newStdata.StoreCode = newStdata.StoreId; + } + let obj = { "StoreData": newStdata }; + + // Option values for Perfetti paid visibility if IR shown in header only + // obj["category_name"]="multi"; + // obj["task_name"]="paid-visibility-displays"; + // obj["photo_type"]="paid-visibility"; + let task_name = windIRParams.task_name + " " + currentMenu.MenuId; + obj["category_name"] = windIRParams.category_name || ''; + obj["task_name"] = task_name; + obj["photo_type"] = windIRParams.photo_type || ''; + + let st1 = JSON.stringify(obj); + let TempSessionId = await IRLogin.StartIRSession(st1); + console.log(' StartCameraSession TempSessionId,task_name:', TempSessionId, ",", task_name); + if (TempSessionId != null) { + setLoaderTitle('Processing Image...'); + setProcessing(true); + let IRCamImages = await IRLogin.getImageURIFromIRSession(TempSessionId); + console.log('Images from session :', IRCamImages); + + if (type == '2') { //set global IR images and session id if Camera is shown only once in header for KPI Screen + // setGbTempSessionId(TempSessionId); + GbTempSessionId.current = TempSessionId; + let sessObj = {} + sessObj['Sess_StoreCode'] = newStdata.StoreCode; + sessObj['Sess_TaskName'] = obj["task_name"]; + sessObj['Sess_CatName'] = obj["category_name"]; + sessObj['Sess_PhotoType'] = obj["photo_type"]; + GbTempSessionObj.current = sessObj; + WindowIRImages.current = IRCamImages; + setIRZoomImages(IRCamImages); + } + else { //set category wise IR images and session id if Camera is shown for each window + let zoomIRImages = await getIRZoomImages(IRCamImages) + + let allData = WindowData; + let defData = { 'WindowId': wind.WindowId, 'WindowDefinitionId': wind.WindowDefinitionId }; + const win_index = allData.findIndex(i => i.WindowId == wind.WindowId && i.WindowDefinitionId == wind.WindowDefinitionId); + let windData = win_index >= 0 ? (allData[win_index] || defData) : defData; + windData['IRImages'] = IRCamImages; + windData['zoomIRImages'] = zoomIRImages; + windData['TempSessionId'] = TempSessionId; + windData['Sess_StoreCode'] = newStdata.StoreCode; + windData['Sess_TaskName'] = obj["task_name"]; + windData['Sess_CatName'] = obj["category_name"]; + windData['Sess_PhotoType'] = obj["photo_type"]; + win_index >= 0 ? allData[win_index] = windData : allData.push(windData); + WindowIRImages.current = IRCamImages; + + // setWindowData(allData); + BgWindowData(allData); + } + + // setHasUnsavedChanges(true); + BgUnsavedChanges(true); + setrerenderdata(!rerenderdata); + + // stop image processing loader after all images get from sessionID + setProcessing(false); + setLoaderTitle('loading...'); + + } + else { + notify('Cannot capture images as getting Session Null.'); + } + + } + + + async function ResumeCameraSession(wind, type = '1') { + // type: 1 or 2 , 1: Camera enabled for each window header ,2 : Camera enabled for once in KPI + wind = wind != null ? wind : {}; + let allData = WindowData; + let defData = { 'WindowId': wind.WindowId, 'WindowDefinitionId': wind.WindowDefinitionId }; + const win_index = allData.findIndex(i => i.WindowId == wind.WindowId && i.WindowDefinitionId == wind.WindowDefinitionId); + let windData = win_index >= 0 ? (allData[win_index] || defData) : defData; + + // Resume Temp Session Id + let TempSessionId = ""; + if (type == '2') { + TempSessionId = GbTempSessionId.current; + } + else { + TempSessionId = windData.TempSessionId; + } + console.log('TempSessionId of wind :', TempSessionId); + if (TempSessionId != null) { + setLoaderTitle('Processing Image...'); + setProcessing(true); + let retTempSessionId = await IRLogin.ResumeIRSession(TempSessionId); + console.log('retTempSessionId :', retTempSessionId); + if (retTempSessionId != null) { + // start fetching images after capturing photos + + let IRCamImages = await IRLogin.getImageURIFromIRSession(TempSessionId); + console.log('Images from session :', IRCamImages); + + if (type == '2') { + // setWindowIRImages(IRCamImages); + WindowIRImages.current = IRCamImages + setIRZoomImages(IRCamImages); + } + else { + let zoomIRImages = await getIRZoomImages(IRCamImages) + windData['IRImages'] = IRCamImages; + windData['zoomIRImages'] = zoomIRImages; + win_index >= 0 ? allData[win_index] = windData : allData.push(windData); + // setWindowData(allData); + BgWindowData(allData); + } + // setHasUnsavedChanges(true); + BgUnsavedChanges(true); + setrerenderdata(!rerenderdata); + + // stop image processing loader after all images get from sessionID + setProcessing(false); + setLoaderTitle('loading...'); + } + else { + notify('Cannot capture images as getting Session Null.'); + } + + } + else { + notify('Cannot capture images as getting Session Null.'); + } + + } + + async function DeleteIRPhoto() { + console.log('DeleteIRPhoto called'); + setshowRetakeModal(false); + let { wind, type, IRImgIndex, IRimgPath } = retakeMData; + // type: 1 or 2 , 1: Camera enabled for each window header ,2 : Camera enabled for once in KPI + + wind = wind != null ? wind : {}, + type = type != null ? type : '1'; + IRImgIndex = IRImgIndex != null ? IRImgIndex : ''; + IRimgPath = IRimgPath != null ? IRimgPath : ''; + + + let allData = WindowData; + let defData = { 'WindowId': wind.WindowId, 'WindowDefinitionId': wind.WindowDefinitionId }; + const win_index = allData.findIndex(i => i.WindowId == wind.WindowId && i.WindowDefinitionId == wind.WindowDefinitionId); + let windData = win_index >= 0 ? (allData[win_index] || defData) : defData; + + let TempSessionId = ""; + if (type == '2') { + TempSessionId = GbTempSessionId.current; + } + else { + TempSessionId = windData['TempSessionId']; + } + + console.log('DeleteIRPhoto sessionID :', TempSessionId); + if (TempSessionId != null || TempSessionId != '') { + setLoaderTitle('Removing Image...'); + setProcessing(true); + let isDeleted = await IRLogin.DeleteIRSessionPhoto(TempSessionId, IRimgPath);//"8099b819-0979-40d2-950e-489566041484";// + console.log('DeleteIRPhoto isDeleted :', isDeleted); + if (isDeleted) { + setLoaderTitle('Processing Image...'); + + let IRCamImages = await IRLogin.getImageURIFromIRSession(TempSessionId); + console.log('Deleted, Images from session :', IRCamImages); + if (type == '2') { + // setWindowIRImages(IRCamImages); + WindowIRImages.current = IRCamImages; + setIRZoomImages(IRCamImages); + } + else { + let zoomIRImages = await getIRZoomImages(IRCamImages) + windData['IRImages'] = IRCamImages; + windData['zoomIRImages'] = zoomIRImages; + win_index >= 0 ? allData[win_index] = windData : allData.push(windData); + // setWindowData(allData); + BgWindowData(allData); + } + + // setHasUnsavedChanges(true); + BgUnsavedChanges(true); + setrerenderdata(!rerenderdata); + + // stop image processing loader after all images get from sessionID + setProcessing(false); + setLoaderTitle('loading...'); + + } + else { + notify('Cannot delete photo!.'); + } + + } + else { + notify('Cannot delete photo! Found Null Session.'); + } + + } + + async function RetakeIRPhoto() { + setshowRetakeModal(false); + let { wind, type, IRImgIndex, IRimgPath } = retakeMData; + // type: 1 or 2 , 1: Camera enabled for each window header ,2 : Camera enabled for once in KPI + + wind = wind != null ? wind : {}, + type = type != null ? type : '1'; + IRImgIndex = IRImgIndex != null ? IRImgIndex : ''; + IRimgPath = IRimgPath != null ? IRimgPath : ''; + + + let allData = WindowData; + let defData = { 'WindowId': wind.WindowId, 'WindowDefinitionId': wind.WindowDefinitionId }; + const win_index = allData.findIndex(i => i.WindowId == wind.WindowId && i.WindowDefinitionId == wind.WindowDefinitionId); + let windData = win_index >= 0 ? (allData[win_index] || defData) : defData; + + let TempSessionId = ""; + if (type == '2') { + TempSessionId = GbTempSessionId.current; + } + else { + TempSessionId = windData['TempSessionId']; + } + + console.log('Retake sessionID :', TempSessionId); + if (TempSessionId != null || TempSessionId != '') { + setLoaderTitle('Processing Image...'); + setProcessing(true); + let isRetakeDone = await IRLogin.RetakeIRSessionPhoto(TempSessionId, IRimgPath); + console.log('Retake isRetakeDone :', isRetakeDone); + if (isRetakeDone) { + setTimeout(async () => { + let IRCamImages = await IRLogin.getImageURIFromIRSession(TempSessionId); + console.log('Retake Images from session :', IRCamImages); + if (type == '2') { + // setWindowIRImages(IRCamImages); + WindowIRImages.current = IRCamImages; + setIRZoomImages(IRCamImages); + } + else { + let zoomIRImages = await getIRZoomImages(IRCamImages) + windData['IRImages'] = IRCamImages; + windData['zoomIRImages'] = zoomIRImages; + win_index >= 0 ? allData[win_index] = windData : allData.push(windData); + // setWindowData(allData); + BgWindowData(allData); + } + // setHasUnsavedChanges(true); + BgUnsavedChanges(true); + setrerenderdata(!rerenderdata); + + // stop image processing loader after all images get from sessionID + setProcessing(false); + setLoaderTitle('loading...'); + }, 1000); + + } + else { + notify('Error occur while retaking photo!.'); + } + + } + else { + notify('Cannot start camera! Found Null Session.'); + } + + } + + // Start Upload for IR images + async function UploadIRSessions() { + setshowUploadAlert(false); + sessionsToUpload.current = []; + sessionsReceived.current = 0; + sessionsUploadedCount.current = 0; + + try { + let { StoreId } = storeData; + setLoaderTitle('Uploading Images...'); + setProcessing(true); + + // Global Upload function + // Sync Status for IR images + // From Infilect SDK 1.3.6 - The Images are uploading on realtime bases i.e. As the images are clicked by user the Images are getting uploaded to infilect server. + // In this case call below func to check the status of images that is already being uploaded by Real Time processing + let sync_result = await SyncIRsessionsInKPI(props, storeData, AppTables.WINDOW_IRUPLOAD, AppTables.WINDOW_IR_IMAGES, true, currentMenu); + let { isUploadStarted, AllDataUploaded, noDataFound, success, sessionList, sessionListWithDetails } = sync_result; + console.log("Sync Resp sync_result:", sync_result); + if (!success) { + notify('Cannot Upload Data! Something went wrong.'); + setProcessing(false); + } + else { + if (noDataFound) { + notify('No session to upload!'); + setisDataUploaded('U'); + setProcessing(false); + } + else { + if (!isUploadStarted && AllDataUploaded) { + notify('All images synced! No session to upload.'); + setisDataUploaded('U'); + setProcessing(false); + } else if (isUploadStarted) { + sessionsToUpload.current = sessionList; + sessionsToUploadDetails.current = sessionListWithDetails; + console.log("UploadStarted"); + } + } + } + } catch (e) { + console.log('Uploading Issue:', e); + setProcessing(false); + } + + + } + + async function UpdateIRUploadStatus(storeData1, menu1, TempSessionId, UnSessionId) { + console.log('UpdateIRUploadStatus'); + return new Promise((resolve, reject) => { + + let { StoreId, ChainId, StateId, StoreTypeId } = storeData1; + db.transaction(async function (txn) { + // update upload status and sync status here : when files are uploaded and we have got the universal session id for that + let q = `Update ${AppTables.WINDOW_IRUPLOAD} set UN_SESSION_ID='${UnSessionId}',UPLOAD_STATUS='1',SYNC_STATUS='Synced' where STORE_ID='${StoreId}' and VISIT_DATE='${d2}' and MENU_ID='${menu1.MenuId}' and TEMP_SESSION_ID='${TempSessionId}' `; + // console.log("update IR Upload q:",q); + await txn.executeSql(q, [], async function (txn2, txnres) { + console.log('Updated IR Upload Status'); + // console.log("update IR Upload q2:",q2); + let q2 = `Update ${AppTables.WINDOW_IR_IMAGES} set UN_SESSION_ID='${UnSessionId}' where STORE_ID='${StoreId}' and VISIT_DATE='${d2}' and MENU_ID='${menu1.MenuId}' and TEMP_SESSION_ID='${TempSessionId}' `; + await txn.executeSql(q2, [], async function (txn2, txnres2) { + console.log('Updated IR Upload Images Status'); + resolve(true); + }, function (txnE, txnerr) { console.log(txnerr); resolve(false); },); + + }, function (txnE, txnerr) { console.log(txnerr); resolve(false); },); + }); + }).catch((Err) => { + console.log('Error in UpdateIRUploadStatus:', Err); + return false; + }) + + + + } + + async function LogImageUpload(storeData1, menu1, TempSessionId, UnSessionId, message, status, thisIR_SessObj = {}) { + let { StoreId, StoreName } = storeData1; + const url = props.baseurl + getMethodName(METHODS.UPLOADJSON_METHOD); + const nowTime = moment().format('HH:mm:ss'); + let ImageCount = await getImageCount(storeData1, menu1, TempSessionId); + let { SESSION_STORECODE, SESSION_TASKNAME, SESSION_CATNAME, SESSION_PHOTOTYPE } = thisIR_SessObj; + + + ////Replaced special charecter and white space + let storeTittle = StoreName.replace(`@!%&`, '').replace(' ', '-'); + console.log("storeTittle:", storeTittle, StoreName); + + let obj = {}; + obj['StoreId'] = StoreId; + obj['Username'] = props.UserId; + obj['VisitDate'] = d2; + obj['InTime'] = nowTime; + obj['TempSessionId'] = TempSessionId; + obj['UnSessionId'] = UnSessionId; + obj['Status'] = status; + obj['Message'] = message; + obj['ImageCount'] = ImageCount; + obj['StoreTitle'] = storeTittle; + obj['StoreCode'] = SESSION_STORECODE; + obj['TaskName'] = SESSION_TASKNAME; + obj['CategoryName'] = SESSION_CATNAME; + obj['PhotoType'] = SESSION_PHOTOTYPE; + obj['KPIType'] = currentMenu.MenuName; + obj['ScreenName'] = currentMenu.ScreenName; + obj['UploadType'] = "New"; + + let postData = {}; + postData['MID'] = 0; + postData['Keys'] = 'IR_UPLOAD_LOG_MSG'; + postData['JsonData'] = JSON.stringify(obj); + postData['UserId'] = props.UserId; + + console.log('postData', postData); + + return await UploadData2(url, postData) + .then((res) => { + // console.log("log Uploaded:",res.UploadJsonResult); + if (res.UploadJsonResult != null && res.UploadJsonResult == 'Success') { + return true; + } + return false; + }) + .catch((err) => { + console.log(err); + return false; + }); + } + + async function getImageCount(storeData1, menu1, TempSessionId) { + let { StoreId, ChainId, StateId, StoreTypeId } = storeData1; + console.log('storeData in getImageCount', storeData1); + return new Promise((resolve, reject) => { + + + db.transaction(async function (txn) { + + let q = `select DISTINCT TEMP_SESSION_ID,count(IMAGE1) as ImageCount from ${AppTables.WINDOW_IR_IMAGES} where STORE_ID='${StoreId}' and VISIT_DATE='${d2}' and TEMP_SESSION_ID='${TempSessionId}' group by TEMP_SESSION_ID `; + console.log('q', q); + await txn.executeSql(q, [], async function (txn2, txnres) { + console.log('ImageCount rows:', txnres.rows.length); + if (txnres.rows.length > 0) { + let data = txnres.rows.item(0); + console.log('data:', data) + console.log('Image Count for TempSessionId:', data.ImageCount); + resolve(data.ImageCount); + } + else { + resolve(0); + } + + }, function (txnE, txnerr) { console.log(txnerr); resolve(0); },); + }); + }).catch((Err) => { + console.log('Error in getImageCount:', Err); + return 0; + }) + + + + } + + + //End IR functions + + async function focusToNext(WindowStocks, windowIndex, stockProd, index) { + console.log('focusToNext is call'); + + if (index == WindowStocks.length - 1) { + return; + } + try { + console.log('next 1 call', 'input1_' + WindowStocks[index + 1].WindowDefinitionId + '_' + WindowStocks[index + 1].WindowStockDefinitionId) + let refIn2 = inputRefs.current['input1_' + WindowStocks[index + 1].WindowDefinitionId + '_' + WindowStocks[index + 1].WindowStockDefinitionId]; + + if (refIn2 != null) { + refIn2.focus(); + } + } + catch (err) { + console.log(err); + } + + } + + async function getWindowStockData(window, storeData1, isInserted = false, menu1 = {}) { + let obj = { 'WStocks': [], 'WStocksData': [] } + let { StateId, ChainId, StoreTypeId, StoreClassId, StoreCategoryId } = storeData1; + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + var q = '', selectlist = '', join = ''; + let checkassrt = window.WindowElementCheckAssortment == 'true' || window.WindowElementCheckAssortment == 1 ? true : false; + + if (isInserted == true) { + if (checkassrt) { + join = ` inner join Mapping_ProductAssortmentStorewise a on a.ProductId=s.WINDOW_STOCK_VALUE and a.StoreId='${storeData1.StoreId}' `; + } + selectlist = ` s.WINDOW_STOCK_DEFINITION_ID as WindowStockDefinitionId, s.WINDOW_DEFINITION_ID as WindowDefinitionId,s.WINDOW_STOCK_TABLE as WindowStockTable,s.WINDOW_STOCK_FIELD as WindowStockField,s.WINDOW_STOCK_VALUE as WindowStockValue,s.WINDOW_STOCK_MBQ as WindowStockMBQ,s.PRODUCT_NAME as ProductName, s.STOCK as Stock,s.IS_WIND_PRESENT as isWindPresent `; + q = `select ${selectlist} from ${AppTables.WINDOW_STOCK_DATA} s ${join} where s.WINDOW_DEFINITION_ID='${window.WindowDefinitionId}' and s.STORE_ID='${storeData1.StoreId}' and MENU_ID='${menu1.MenuId}' `; + } else { + if (checkassrt) { + join = ` inner join Mapping_ProductAssortmentStorewise a on a.ProductId=s.WindowStockValue and a.StoreId='${storeData1.StoreId}'`; + } + selectlist = ` s.WindowStockDefinitionId, s.WindowDefinitionId,s.WindowStockTable,s.WindowStockField,s.WindowStockValue,s.WindowStockMBQ,s.ProductName `; + q = `select ${selectlist} from Master_WindowStockDefinition s ${join} where s.WindowDefinitionId='${window.WindowDefinitionId}' `; + } + if (checkassrt) { + q += ` and a.StoreId='${storeData1.StoreId}' `; + } + q += isInserted ? ` order by s.PRODUCT_NAME ` : ` order by s.ProductName `; + + + + await txn.executeSql(q, [], async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + let arr = [], WStocksData = []; + let isAllChecked = 1; + for (var i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + if (isInserted == true && data.Stock != null) { + inputRefs.current['input1_' + data.WindowDefinitionId + "_" + data.WindowStockDefinitionId] = ''; + let stockData_obj = { 'ProductId': data.WindowStockValue, 'Stock': data.Stock, 'isWindPresent': (data.isWindPresent != null ? data.isWindPresent : 0) } + WStocksData.push(stockData_obj); + } + if (data.isWindPresent == null || data.isWindPresent == 0 || data.isWindPresent == '0' || data.isWindPresent == '') { + isAllChecked = 0; + } + arr.push(data); + if (i == txnres2.rows.length - 1) { + obj['WStocks'] = arr; + obj['WStocksData'] = WStocksData; + obj['isAllChecked'] = isAllChecked; + resolve(obj) + } + } + } + else { + resolve(obj) + } + }, function (txnE, txnerr) { console.log(txnerr); resolve(obj) },); + }); + }).then((val) => { + return val + }).catch((err) => { + console.log(err); + return obj; + }); + } + + async function getImage(imgdata) { + let type = getImageProps.type || ''; + let window = getImageProps.window || {}; + let splitItem = getImageProps.splitItem || {}; + let splitItemIndex = getImageProps.splitItemIndex || 0; + let qtn = getImageProps.qtn || {}; + let cameraType = getImageProps.cameraType != null ? getImageProps.cameraType : '1'; + + if (typeof imgdata == 'object' && imgdata.errorCode == 'camera_unavailable') { + notify('Camera unavailable'); + } + else if (typeof imgdata == 'object' && imgdata.uri != null) { + const img = imgdata; + const imgurl = img.uri, imgWidth = img.width, imgHeight = img.ExtendedHeight; + console.log("actuual ht :", img.height, ',extended ht :', img.ExtendedHeight); + let isImgFromGallery = img.fromGallery != null ? img.fromGallery : false; + let picture_clickedd = isImgFromGallery == true ? img.datetime : new Date(); + + let picture_clicked_time = moment(picture_clickedd).format('MM-DD-YYYY HH:mm:ss') + let picture_clicked_time_for_pic_name = moment(picture_clickedd).format('MMDDYYYY_HHmmss') + + console.log("time", picture_clicked_time); + console.log("time1", picture_clicked_time_for_pic_name); + let calculate_tym_date_for_filename = picture_clicked_time_for_pic_name; + let calculate_tym_date_over_img = picture_clicked_time; + + let filename = storeData.StoreId + '_' + window.WindowDefinitionId + '_' + window.WindowId + '_' + (props.UserId || '') + '_WindowImg-' + calculate_tym_date_for_filename + '.jpg'; + + let allData = WindowData; + let defData = { 'WindowId': window.WindowId, 'WindowDefinitionId': window.WindowDefinitionId }; + const wind_index = allData.findIndex(i => i.WindowId == window.WindowId && i.WindowDefinitionId == window.WindowDefinitionId); + let wind = wind_index >= 0 ? allData[wind_index] : defData; + + let camera1Label = window.WindowImage1Lable || ''; + let camera2Label = window.WindowImage2Lable || ''; + let extraLabel = ''; + + if (cameraType == '2') { + var QD = wind.WindowQA || {}; + var image_key = qtn.WindowQuestionId + '_ImageName1'; + var image_key_path = qtn.WindowQuestionId + '_ImagePath1'; + QD[image_key] = filename; + extraLabel = 'Qtn Id: ' + qtn.WindowQuestionId; + } + else if (cameraType == '3') { + var image_key = 'NAImage1'; + var image_key_path = 'NAImage1Path'; + wind[image_key] = filename; + extraLabel = 'Not Exist'; + } + else { + var WindowSplits = wind.WindowSplits || []; + var image_key = type == '1' ? 'Image1Name' : 'Image2Name'; + var image_key_path = type == '1' ? 'Image1' : 'Image2'; + splitItem[image_key] = filename; + extraLabel = type == '1' ? camera1Label : camera2Label; + } + + const mark_text1 = calculate_tym_date_over_img; + const mark_text2 = 'Store Name:' + storeData.StoreName + ' | Store Id:' + storeData.StoreId + ' | User Id:' + storeData.EmpId + ' | WindowDef Id:' + window.WindowDefinitionId + (extraLabel != '' ? ' (' + extraLabel + ')' : '') + ' | Image Type: ' + currentMenu.MenuName + ' | Date:' + calculate_tym_date_over_img; + + let imagePath = `${ImageFolderPath + currentMenu.ScreenName}/${filename}`; + await RNFS.copyFile(imgurl, imagePath) + .then(async (resn) => { + // render data with clicked image + let uri = 'file://' + imagePath; + console.log('image marker:', uri); + + if (cameraType == '2') { + QD[image_key_path] = uri; + wind.WindowQA = QD; + wind_index >= 0 ? allData[wind_index] = wind : allData.push(wind); + // setWindowData(allData); + BgWindowData(allData) + BgUnsavedChanges(true) + // setHasUnsavedChanges(true); + setrerenderdata3(!rerenderdata3); + } + else if (cameraType == '3') { + wind[image_key_path] = uri; + wind_index >= 0 ? allData[wind_index] = wind : allData.push(wind); + // setWindowData(allData); + BgWindowData(allData) + BgUnsavedChanges(true) + // setHasUnsavedChanges(true); + setrerenderdata(!rerenderdata); + } + else { + console.log('split image updated'); + splitItem[image_key_path] = uri; + splitItemIndex >= 0 ? WindowSplits[splitItemIndex] = splitItem : WindowSplits.push(splitItem); + wind.WindowSplits = WindowSplits; + wind_index >= 0 ? allData[wind_index] = wind : allData.push(wind); + BgWindowData(allData) + BgUnsavedChanges(true) + setrerenderdata2(!rerenderdata2); + } + + let objIndex = InputChange.findIndex(obj => obj.WindowId == window.WindowId && obj.WindowDefinitionId == window.WindowDefinitionId); + let winArr = [...InputChange] + winArr[objIndex].Flag = true + console.log("changeValue---------1", winArr) + setSelectedImg(uri) + setInputChange(winArr) + // add metdata then resize image and restored back to the imagePath + let restore_data = { "destFilePath": imagePath, "imgurl": imgurl, imgWidth, imgHeight, mark_text1, mark_text2 } + let is_restored = await restore_ImageWithMetaData(restore_data, imgdata); + console.log("image restored:", is_restored); + }) + .catch(err => { + console.log('ERROR: image file write failed!!!'); + console.log(err.message, err.code); + }); + + + } + } + + async function openCamera(window, splitItem, splitItemIndex, type = '1', cameraType = '1', qtn = {}) { + let GridAllow = cameraType == '1' ? (type === '1' ? (window.WindowImage1CameraGrid === 'true' || window.WindowImage1CameraGrid == true) : (window.WindowImage2CameraGrid === 'true' || window.WindowImage2CameraGrid == true)) : false + console.log("window.WindowImage1CameraGrid----------------", window.WindowImage1CameraGrid) + console.log("window.WindowImage2CameraGrid----------------", window.WindowImage2CameraGrid, GridAllow) + setGridValue(GridAllow); + setGetImageProps({ 'window': window, 'splitItem': splitItem, 'splitItemIndex': splitItemIndex, 'type': type, 'cameraType': cameraType, 'qtn': qtn }); + setShowCamera(true); + // props.navigation.navigate('CameraScreen',{'getImage':getImage,'cameraType':'back'}) + } + + + async function onSubmitData() { + let isvalid = await validate(); + if (isvalid) { + Keyboard.dismiss(); + setShowAlert(true); + } + } + + async function saveData() { + // setHasUnsavedChanges(false); + BgUnsavedChanges(false) + setShowAlert(false); + setLoaderTitle('Saving Data...'); + setProcessing(true); + let d1n = new Date(); + let d3 = moment(d1n).format('MM/DD/YYYY'); + + + try { + let { StoreId, ChainId, StateId, StoreTypeId } = storeData; + + let isKPIIREnableI = KPIFields.findIndex(i => i.KPIFieldName == 'KPIIREnable') + let isKPIIREnableObj = isKPIIREnableI >= 0 ? KPIFields[isKPIIREnableI] : {}; + let isKPIIREnable = isKPIIREnableI >= 0 ? isKPIIREnableObj['KPIFieldEnable'] : false; + + let CameraIROnceOnlyIndex = KPIFields.findIndex(i => i.KPIFieldName == 'CameraIROnceOnly') + let CameraIROnceOnlyObj = CameraIROnceOnlyIndex >= 0 ? KPIFields[CameraIROnceOnlyIndex] : {}; + let CameraIROnceOnly = CameraIROnceOnlyIndex >= 0 ? CameraIROnceOnlyObj['KPIFieldEnable'] : true; + + + + await db.transaction(async function (txn) { + + // remove old data + await txn.executeSql(`DELETE FROM ${AppTables.WINDOW_HDR_DATA} WHERE STORE_ID='${StoreId}' and MENU_ID='${currentMenu.MenuId}' and VISIT_DATE='${d2}' `, [], async function (txn2, txnres) { + console.log('window hdr data deleted'); + }, function (txnE, txnerr) { console.log(txnerr); },); + await txn.executeSql(`DELETE FROM ${AppTables.WINDOW_CHILD_DATA} WHERE STORE_ID='${StoreId}' and MENU_ID='${currentMenu.MenuId}' and VISIT_DATE='${d2}' `, [], async function (txn2, txnres) { + console.log('window child data deleted'); + }, function (txnE, txnerr) { console.log(txnerr); },); + await txn.executeSql(`DELETE FROM ${AppTables.WINDOW_IMAGES} WHERE STORE_ID='${StoreId}' and MENU_ID='${currentMenu.MenuId}' and VISIT_DATE='${d2}' `, [], async function (txn2, txnres) { + console.log('window images data deleted'); + }, function (txnE, txnerr) { console.log(txnerr); },); + await txn.executeSql(`DELETE FROM ${AppTables.WINDOW_STOCK_DATA} WHERE STORE_ID='${StoreId}' and MENU_ID='${currentMenu.MenuId}' and VISIT_DATE='${d2}' `, [], async function (txn2, txnres) { + console.log('window stock data deleted'); + }, function (txnE, txnerr) { console.log(txnerr); },); + await txn.executeSql(`DELETE FROM ${AppTables.WINDOW_IR_IMAGES} WHERE STORE_ID='${StoreId}' and MENU_ID='${currentMenu.MenuId}' and VISIT_DATE='${d2}' `, [], async function (txn2, txnres) { + console.log('window IR images deleted'); + }, function (txnE, txnerr) { console.log(txnerr); },); + await txn.executeSql(`DELETE FROM ${AppTables.WINDOW_IRUPLOAD} WHERE STORE_ID='${StoreId}' and MENU_ID='${currentMenu.MenuId}' and VISIT_DATE='${d2}' `, [], async function (txn2, txnres) { + console.log('window IR upload data deleted'); + }, function (txnE, txnerr) { console.log(txnerr); },); + + // add data + var values = '', childV = '', imageV = '', stockV = '', IRImageV = '', IRStatusV = ''; + + for (const wi in Windows) { + const window = Windows[wi]; + let isImage1 = window.WindowImage1 == 'true' || window.WindowImage1 == 1 ? 1 : 0; + let isImage2 = window.WindowImage2 == 'true' || window.WindowImage2 == 1 ? 1 : 0; + let isNAImageAvl = window.WindowNotExistCamera == 'true' || window.WindowNotExistCamera == 1 ? 1 : 0; + let isNAReasonEnable = window.WindowNotExistReasonEnable == 'true' || window.WindowNotExistReasonEnable == 1 ? 1 : 0; + let isReasonEnable = window.WindowExistReasonEnable == 'true' || window.WindowExistReasonEnable == 1 ? 1 : 0; + let isStockReq = window.WindowElementStockRequired == 'true' || window.WindowElementStockRequired == 1 ? 1 : 0; + let WindowQuestions = window.WindowQuestions || []; + let WindowStocks = window.WindowStocks || []; + + + const wind = WindowData.find(i => i.WindowId == window.WindowId && i.WindowDefinitionId == window.WindowDefinitionId); + let isPresent = wind.isPresent != null && wind.isPresent != '' ? wind.isPresent : '0'; + let ReasonId = wind.ReasonId != null ? wind.ReasonId : 0; + let Reason = wind.Reason != null ? wind.Reason : ''; + let NAImage1 = wind.NAImage1 != null ? wind.NAImage1 : ''; + let NAImage1Path = wind.NAImage1Path != null ? wind.NAImage1Path : ''; + let WindowSplits = wind.WindowSplits || []; + let QD = wind.WindowQA || {}; + let WStocksData = wind.WStocksData || []; + let windIRImages = wind.IRImages != null ? wind.IRImages : []; + let TempSessionId = wind.TempSessionId != null ? wind.TempSessionId : ''; + let Sess_StoreCode = wind.Sess_StoreCode != null ? wind.Sess_StoreCode : ''; + let Sess_TaskName = wind.Sess_TaskName != null ? wind.Sess_TaskName : ''; + let Sess_CatName = wind.Sess_CatName != null ? wind.Sess_CatName : ''; + let Sess_PhotoType = wind.Sess_PhotoType != null ? wind.Sess_PhotoType : ''; + + + let WINDOW_HEADER_ID = 'WIND' + wi + (Math.floor(Math.random() * 1000) + 1); + let { WindowDefinitionId, WindowId, WindowName, WindowTable, WindowField, WindowValue, ChildName } = window; + + + values += values != '' ? ' , ' : ''; + values += ` ('${WINDOW_HEADER_ID}','${StoreId}','${d3}','${WindowDefinitionId}','${WindowId}','${WindowName}','${WindowTable}','${WindowField}','${WindowValue}','${ChildName}','${isPresent}','${NAImage1}','${ReasonId}','${Reason}','${currentMenu.MenuId}','${d3}') `; + + + if (isKPIIREnable && !CameraIROnceOnly) { // Add window wise IR Status and Images if IR enabled and IR Camera enabled for each window + + for (const IRImageIndex in windIRImages) { + let IRImgObj = windIRImages[IRImageIndex]; + let Image1 = IRImgObj['ImagePath'] != null && IRImgObj['ImagePath'] != '' ? IRImgObj['ImagePath'] : ''; + + IRImageV += IRImageV != '' ? ' , ' : ''; + IRImageV += ` ('${WINDOW_HEADER_ID}','${StoreId}','${d3}','${WindowDefinitionId}','${WindowId}','${Image1}','','${TempSessionId}','','${currentMenu.MenuId}','${d3}') `; + } + IRStatusV += IRStatusV != '' ? ' , ' : ''; + IRStatusV += ` ('${WINDOW_HEADER_ID}','${StoreId}','${d3}','${WindowDefinitionId}','${WindowId}','${TempSessionId}','','0','','${currentMenu.MenuId}','${Sess_StoreCode}','${Sess_TaskName}','${Sess_CatName}','${Sess_PhotoType}','${d3}') `; + + } + + if (isPresent == 1) { + for (const qtnIndex in WindowQuestions) { + const qtn = WindowQuestions[qtnIndex]; + + let selansid = '', selanswer = '', selimg = '', showImageTag = false; + let id_key = qtn.WindowQuestionId + '_AnswerId'; + let ans_key = qtn.WindowQuestionId + '_Answer'; + let multi_key = qtn.WindowQuestionId + '_MultiOption'; + let date_key = qtn.WindowQuestionId + '_Date'; + let img_key = qtn.WindowQuestionId + '_ImagePath1'; + let imgname_key = qtn.WindowQuestionId + '_ImageName1'; + let rating_key = qtn.WindowQuestionId + '_Rating'; + let list_mcdata = []; + + let { WindowQuestionId, WindowQuestionCode, QuestionType, WAShowCamera } = qtn + let answer = QD[ans_key] || 0; + let answerId = QD[id_key] || ''; + let multi_options_ids = QD[multi_key] || ''; + let isImage1All = WAShowCamera == 'true' || WAShowCamera == 1 ? 1 : 0; + let Image1 = isImage1All == 1 ? QD[imgname_key] : ''; + + + childV += childV != '' ? ' , ' : ''; + childV += ` ('${WINDOW_HEADER_ID}','${StoreId}','${d3}','${WindowDefinitionId}','${WindowId}','${WindowQuestionId}','${WindowQuestionCode}','${QuestionType}','${answer}','${answerId}','${multi_options_ids}','${Image1}','${isImage1All}','${currentMenu.MenuId}','${d3}') `; + } + if (!isKPIIREnable) { // Add images of normal camera only if IR not enabled + for (const splitItemIndex in WindowSplits) { + const splitItem = WindowSplits[splitItemIndex]; + let Image1Name = splitItem['Image1Name'] != null && splitItem['Image1Name'] != '' ? splitItem['Image1Name'] : ''; + let Image2Name = splitItem['Image2Name'] != null && splitItem['Image2Name'] != '' ? splitItem['Image2Name'] : ''; + Image1Name = isImage1 == 1 ? Image1Name : ''; + Image2Name = isImage2 == 1 ? Image2Name : ''; + + imageV += imageV != '' ? ' , ' : ''; + imageV += ` ('${WINDOW_HEADER_ID}','${StoreId}','${d3}','${WindowDefinitionId}','${WindowId}','${Image1Name}','${Image2Name}','${currentMenu.MenuId}','${d3}') `; + } + } + + for (const stockProdIndex in WindowStocks) { + const stockProd = WindowStocks[stockProdIndex]; + let sd = WStocksData.find(i => i.ProductId == stockProd.WindowStockValue) || {}; + let stock = sd.Stock != null ? sd.Stock : (sd.Stock == 0 ? sd.Stock : ''); + let isWindPresent = sd.isWindPresent != null ? sd.isWindPresent : 0; + let { WindowStockDefinitionId, WindowDefinitionId, WindowStockTable, WindowStockField, WindowStockValue, WindowStockMBQ, ProductName } = stockProd + stockV += stockV != '' ? ' , ' : ''; + stockV += ` ('${WINDOW_HEADER_ID}','${StoreId}','${d3}','${WindowDefinitionId}','${WindowId}','${WindowStockDefinitionId}','${WindowStockTable}','${WindowStockField}','${WindowStockValue}','${WindowStockMBQ}','${ProductName}','${stock}','${isWindPresent}','${currentMenu.MenuId}','${d3}') `; + } + + } + } + + if (isKPIIREnable && CameraIROnceOnly) {// Add window wise IR images if IR enabled and IR Camera enabled for once only + for (const IRImageIndex in WindowIRImages.current) { + let IRImgObj = WindowIRImages.current[IRImageIndex]; + let Image1 = IRImgObj['ImagePath'] != null && IRImgObj['ImagePath'] != '' ? IRImgObj['ImagePath'] : ''; + + IRImageV += IRImageV != '' ? ' , ' : ''; + IRImageV += ` ('','${StoreId}','${d3}','','','${Image1}','','${GbTempSessionId.current}','','${currentMenu.MenuId}','${d3}') `; + } + + let { Sess_StoreCode, Sess_TaskName, Sess_CatName, Sess_PhotoType } = GbTempSessionObj.current; + Sess_StoreCode = Sess_StoreCode || ''; + Sess_TaskName = Sess_TaskName || ''; + Sess_CatName = Sess_CatName || ''; + Sess_PhotoType = Sess_PhotoType || ''; + IRStatusV += IRStatusV != '' ? ' , ' : ''; + IRStatusV += ` ('','${StoreId}','${d3}','','','${GbTempSessionId.current}','','0','','${currentMenu.MenuId}','${Sess_StoreCode}','${Sess_TaskName}','${Sess_CatName}','${Sess_PhotoType}','${d3}') `; + + } + + console.log('values:', values); + + + let add_hdr_data = `INSERT INTO ${AppTables.WINDOW_HDR_DATA} (WINDOW_HEADER_ID,STORE_ID,VISIT_DATE,WINDOW_DEFINITION_ID,WINDOW_ID,WINDOW_NAME,WINDOW_TABLE,WINDOW_FIELD,WINDOW_VALUE,CHILD_NAME,IS_PRESENT,WINDOW_NA_IMAGE,REASON_ID,REASON,MENU_ID,ADDED_DATE) VALUES ${values} `; + let add_child_data = `INSERT INTO ${AppTables.WINDOW_CHILD_DATA} (WINDOW_HEADER_ID,STORE_ID,VISIT_DATE,WINDOW_DEFINITION_ID,WINDOW_ID,QUESTION_ID,QUESTION_CODE,QUESTION_TYPE,ANSWER,ANSWER_ID,MULTI_OPTIONS_IDS,IMAGE1,IMAGE_ALLOW1,MENU_ID,ADDED_DATE) VALUES ${childV} `; + let add_images_data = `INSERT INTO ${AppTables.WINDOW_IMAGES} (WINDOW_HEADER_ID,STORE_ID,VISIT_DATE,WINDOW_DEFINITION_ID,WINDOW_ID,IMAGE1,IMAGE2,MENU_ID,ADDED_DATE) VALUES ${imageV} `; + let add_stock_data = `INSERT INTO ${AppTables.WINDOW_STOCK_DATA} (WINDOW_HEADER_ID,STORE_ID,VISIT_DATE,WINDOW_DEFINITION_ID,WINDOW_ID,WINDOW_STOCK_DEFINITION_ID,WINDOW_STOCK_TABLE,WINDOW_STOCK_FIELD,WINDOW_STOCK_VALUE,WINDOW_STOCK_MBQ,PRODUCT_NAME,STOCK,IS_WIND_PRESENT,MENU_ID,ADDED_DATE) VALUES ${stockV} `; + let add_IRImage_data = `INSERT INTO ${AppTables.WINDOW_IR_IMAGES} (WINDOW_HEADER_ID,STORE_ID,VISIT_DATE,WINDOW_DEFINITION_ID,WINDOW_ID,IMAGE1,IMAGE2,TEMP_SESSION_ID,UN_SESSION_ID,MENU_ID,ADDED_DATE) VALUES ${IRImageV} `; + let add_IRStatus_data = `INSERT INTO ${AppTables.WINDOW_IRUPLOAD} (WINDOW_HEADER_ID,STORE_ID,VISIT_DATE,WINDOW_DEFINITION_ID,WINDOW_ID,TEMP_SESSION_ID,UN_SESSION_ID,UPLOAD_STATUS,SYNC_STATUS,MENU_ID,SESSION_STORECODE,SESSION_TASKNAME,SESSION_CATNAME,SESSION_PHOTOTYPE,ADDED_DATE) VALUES ${IRStatusV} `; + + + await txn.executeSql(add_hdr_data, [], async function (txn2, txnres) { + console.log('window header data added'); + var isSplitImageAdded = true, isStockAdded = true, isChildAdded = true, isIRImageAdded = true, isIRStatusAdded = true; + if (imageV != '') { + isSplitImageAdded = await executeQuery(add_images_data); + } + if (stockV != '') { + isStockAdded = await executeQuery(add_stock_data); + } + if (childV != '') { + isChildAdded = await executeQuery(add_child_data); + } + if (IRImageV != '') { + isIRImageAdded = await executeQuery(add_IRImage_data); + } + if (IRStatusV != '') { + isIRStatusAdded = await executeQuery(add_IRStatus_data); + } + + if (!isSplitImageAdded) { + setProcessing(false); notify('Cannot add split window images'); + } + else if (!isStockAdded) { + setProcessing(false); notify('Cannot add window stock data'); + } + else if (!isChildAdded) { + setProcessing(false); notify('Cannot add window questions data'); + } + else if (!isIRImageAdded) { + setProcessing(false); notify('Cannot add paid visibility IR Images data'); + } + else if (!isIRStatusAdded) { + setProcessing(false); notify('Cannot add paid visibility IR Status data'); + } + else { + setProcessing(false); notify('Window data updated successfully'); + setisDataExists(true); + // clear store data in local storage to avoiding re-set data for the store + await clear_item('storeData') + BgUnsavedChanges(false);// when all data saved clear the unsaved changes flag + props.navigation.goBack();// send back + } + + }, function (txnE, txnerr) { console.log(txnerr); setProcessing(false); notify('Cannot add window data'); },); + }); + } catch (err) { + console.log(err); + } + } + + async function executeQuery(q) { + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + await txn.executeSql(q, [], async function (txn2, txnres2) { + resolve(true); + }, function (Etxn, txnerr) { console.log(txnerr); resolve(false) }); + }); + }).then((val) => { + return val; + }).catch((err) => { + console.log(err); + return false; + }) + } + + + async function validate() { + let isValid = true; + + let isListedSKUIndex = KPIFields.findIndex(i => i.KPIFieldName == 'ListedSKUCheckbox'); + let isListedSKUKPIObj = isListedSKUIndex >= 0 ? KPIFields[isListedSKUIndex] : {}; + let isListedSKUEnable = isListedSKUIndex >= 0 ? isListedSKUKPIObj['KPIFieldEnable'] : true; + + let isKPIIREnableI = KPIFields.findIndex(i => i.KPIFieldName == 'KPIIREnable') + let isKPIIREnableObj = isKPIIREnableI >= 0 ? KPIFields[isKPIIREnableI] : {}; + let isKPIIREnable = isKPIIREnableI >= 0 ? isKPIIREnableObj['KPIFieldEnable'] : false; + + let CameraIROnceOnlyIndex = KPIFields.findIndex(i => i.KPIFieldName == 'CameraIROnceOnly') + let CameraIROnceOnlyObj = CameraIROnceOnlyIndex >= 0 ? KPIFields[CameraIROnceOnlyIndex] : {}; + let CameraIROnceOnly = CameraIROnceOnlyIndex >= 0 ? CameraIROnceOnlyObj['KPIFieldEnable'] : true; + + return new Promise((resolve, reject) => { + let isAllNotPresent = true; + for (const wi in Windows) { + const window = Windows[wi]; + let isImage1 = window.WindowImage1 == 'true' || window.WindowImage1 == 1 ? 1 : 0; + let isImage2 = window.WindowImage2 == 'true' || window.WindowImage2 == 1 ? 1 : 0; + let isNAImageAvl = window.WindowNotExistCamera == 'true' || window.WindowNotExistCamera == 1 ? 1 : 0; + let isNAReasonEnable = window.WindowNotExistReasonEnable == 'true' || window.WindowNotExistReasonEnable == 1 ? 1 : 0; + let isReasonEnable = window.WindowExistReasonEnable == 'true' || window.WindowExistReasonEnable == 1 ? 1 : 0; + let isStockReq = window.WindowElementStockRequired == 'true' || window.WindowElementStockRequired == 1 ? 1 : 0; + let StockQtyRequired = window.StockQtyRequired == 'true' || window.StockQtyRequired == 1 ? 1 : 0; + let WindowQuestions = window.WindowQuestions || []; + let WindowStocks = window.WindowStocks || []; + + + const wind = WindowData.find(i => i.WindowId == window.WindowId && i.WindowDefinitionId == window.WindowDefinitionId); + let isPresent = wind.isPresent != null && wind.isPresent != '' ? wind.isPresent : '0'; + let ReasonId = wind.ReasonId != null ? wind.ReasonId : ''; + let Reason = wind.Reason != null ? wind.Reason : ''; + let NAImage1 = wind.NAImage1 != null ? wind.NAImage1 : ''; + let NAImage1Path = wind.NAImage1Path != null ? wind.NAImage1Path : ''; + let WindowSplits = wind.WindowSplits || []; + let QD = wind.WindowQA || {}; + let windIRImages = wind.IRImages != null ? wind.IRImages : []; + let TempSessionId = wind.TempSessionId != null ? wind.TempSessionId : ""; + let WStocksData = wind.WStocksData || []; + + if (isKPIIREnable && StoreCameraAllow && !CameraIROnceOnly && (windIRImages.length <= 0 || TempSessionId == '')) { + notify(`Please click Images for ${window.VisibilityName}`, 'SHORT'); + resolve(false); return; + } + else { + if (isPresent == '1') { + isAllNotPresent = false; // Any paid visibility data exists + if (isReasonEnable == true && ReasonId == '') { + notify(`Please select reason for ${window.WindowName} `, 'LONG'); + resolve(false); return; + } + else { + if (!isKPIIREnable && StoreCameraAllow && (window.NoOfSplit > 0 && WindowSplits.length > 0 && (isImage1 == 1 || isImage2 == 1))) { + for (const splitItemIndex in WindowSplits) { + const splitItem = WindowSplits[splitItemIndex]; + let Image1Name = splitItem['Image1Name'] != null && splitItem['Image1Name'] != '' ? splitItem['Image1Name'] : ''; + let Image2Name = splitItem['Image2Name'] != null && splitItem['Image2Name'] != '' ? splitItem['Image2Name'] : ''; + console.log('Image2Name', Image2Name, isImage2); + if (isImage1 == 1 && Image1Name == '') { + notify(`Please click all images for ${window.WindowName}`, 'LONG'); + resolve(false); return; + } + else if (isImage2 == 1 && Image2Name == '') { + notify(`Please click all images for ${window.WindowName}`, 'LONG'); + resolve(false); return; + } + } + } + + if (isStockReq == 1) { + let isProductSelected = false; + for (const stockProdIndex in WindowStocks) { + const stockProd = WindowStocks[stockProdIndex]; + let sd = WStocksData.find(i => i.ProductId == stockProd.WindowStockValue) || {}; + let stock = sd.Stock != null ? sd.Stock : (sd.Stock == 0 ? sd.Stock : ''); + let isWindPresent = sd.isWindPresent != null ? sd.isWindPresent : 0; + + if (isWindPresent == 1) { + isProductSelected = true; + } + + // if((isListedSKUEnable==true && isWindPresent==1 && stock=='') || (isListedSKUEnable!=true && (stock==null || stock==''))){ + // notify(`Please enter stock for ${window.WindowName} ( ${stockProd.ProductName} ) `,'LONG'); + // resolve(false);return; + // } + + if ((isListedSKUEnable == true && isWindPresent == 1 && StockQtyRequired == 1 && stock == '') || (isListedSKUEnable != true && (stock == null || stock == ''))) { + notify(`${ST.Pleaseenterstockfor} ${window.PromoName} ( ${stockProd.ProductName} ) `, 'LONG'); + resolve(false); return; + } + + if (isListedSKUEnable == true && stockProdIndex == WindowStocks.length - 1) { + if (!isProductSelected) { + notify(`${ST.PleaseselectatleastoneSKUfor} ${window.WindowName} `, 'LONG'); + resolve(false); return; + } + } + } + } + + if (WindowQuestions.length > 0) { + for (const qtnIndex in WindowQuestions) { + const qtn = WindowQuestions[qtnIndex]; + + let selansid = '', selanswer = '', selimg = '', showImageTag = false; + let id_key = qtn.WindowQuestionId + '_AnswerId'; + let ans_key = qtn.WindowQuestionId + '_Answer'; + let multi_key = qtn.WindowQuestionId + '_MultiOption'; + let date_key = qtn.WindowQuestionId + '_Date'; + let img_key = qtn.WindowQuestionId + '_ImagePath1'; + let imgname_key = qtn.WindowQuestionId + '_ImageName1'; + let rating_key = qtn.WindowQuestionId + '_Rating'; + let list_mcdata = []; + + let isImgAllowed = (qtn.WQShowCamera == 'true' || qtn.WQShowCamera == 1); + let checkForAnsKey = (qtn.QuestionType == 'Decimal' || qtn.QuestionType == 'Number' || qtn.QuestionType == 'Text' || qtn.QuestionType == 'Date' || qtn.QuestionType == 'Rating'); + if (qtn.QuestionType == 'Single choice list') { + selansid = QD[id_key]; + } + else if (qtn.QuestionType == 'Multi choice list') { + selansid = QD[multi_key] != null && QD[multi_key] != '' ? QD[multi_key].split(',') : []; + } + + //validate only if qtn is enabled or showing + if (qtn.isDisabled == false) { + if (qtn.QuestionType == 'Multi choice list' && selansid.length <= 0) { + notify(`Please select options for the required field in ${window.WindowName}`, 'SHORT'); + resolve(false); return; + } + else if (checkForAnsKey && (Object.keys(QD).indexOf(ans_key) < 0 || (Object.keys(QD).indexOf(ans_key) >= 0 && QD[ans_key] === ''))) { + let msg = (qtn.QuestionType == 'Date' ? `Please pick a date for the required field in ${window.WindowName}` : (qtn.QuestionType == 'Rating' ? `Please select rating for the required field in ${window.WindowName}` : `Please fill all the required field in ${window.WindowName}`)); + notify(msg, 'SHORT'); + resolve(false); return; + } + else if (Object.keys(QD).indexOf(id_key) < 0 || (Object.keys(QD).indexOf(id_key) >= 0 && (QD[id_key] === ''))) { + notify(`Please fill all the required field in ${window.WindowName}`, 'SHORT'); + resolve(false); return; + } + else if (!isKPIIREnable && StoreCameraAllow && isImgAllowed && (Object.keys(QD).indexOf(img_key) < 0 || (Object.keys(QD).indexOf(img_key) >= 0 && QD[img_key] === ''))) { + notify(`Please add images in ${window.WindowName}`, 'SHORT'); + resolve(false); return; + } else { + console.log('no condition found'); + } + + + if ((qtn.QuestionType == 'Single choice list' || qtn.QuestionType == 'Multi choice list')) { + if (qtn.Answers && qtn.Answers.length > 0) { + for (var j = 0; j < qtn.Answers.length; j++) { + let ansss = qtn.Answers[j]; + let isandImgAl = (ansss.WAShowCamera == 'true' || ansss.WAShowCamera == 1); + if (qtn.QuestionType == 'Single choice list' && (isandImgAl && ansss.AnswerId == selansid)) { + showImageTag = true; + } + else if (qtn.QuestionType == 'Multi choice list' && (isandImgAl && selansid.indexOf(ansss.AnswerId) >= 0)) { + showImageTag = true; + } + } + } + } + + } + + if (!isKPIIREnable && StoreCameraAllow && showImageTag && (Object.keys(QD).indexOf(img_key) < 0 || (Object.keys(QD).indexOf(img_key) >= 0 && QD[img_key] === ''))) { + notify(`Please add images in ${window.WindowName}`, 'SHORT'); + resolve(false); return; + } + } + } + + } + } + else { + if (isNAReasonEnable == true && ReasonId == '') { + notify(`Please select reason for ${window.WindowName} `, 'LONG'); + resolve(false); return; + } + else if (!isKPIIREnable && StoreCameraAllow && isNAImageAvl == true && NAImage1 == '') { + notify(`Please click image for ${window.WindowName}`, 'LONG'); + resolve(false); return; + } + } + } + + if (wi == (Windows.length - 1)) { + // isAllNotPresent : check only of Any paid visibility data exists + if (isKPIIREnable && StoreCameraAllow && CameraIROnceOnly && !isAllNotPresent && (WindowIRImages.current.length <= 0 || GbTempSessionId.current == '')) { + notify(`Please click Images for ${currentMenu.MenuName}`, 'SHORT'); + resolve(false); return; + } + else { + resolve(true); return; + } + } + + } + + }).then((val) => { return val }) + .catch((err) => { console.log(err); return false }); + + } + + + function onselectionChange(option, keyLbl, keyVal, otherData) { + let item = otherData.window; + let allData = WindowData; + let defData = { 'WindowId': item.WindowId, 'WindowDefinitionId': item.WindowDefinitionId }; + const win_index = allData.findIndex(i => i.WindowId == item.WindowId && i.WindowDefinitionId == item.WindowDefinitionId); + let wind = win_index >= 0 ? (allData[win_index] || defData) : defData; + wind[keyVal] = option.value; + wind[keyLbl] = option.label; + + win_index >= 0 ? allData[win_index] = wind : allData.push(wind); + console.log('allData:', allData); + + let objIndex = InputChange.findIndex(i => i.WindowId == item.WindowId && i.WindowDefinitionId == item.WindowDefinitionId); + let winArr = [...InputChange] + winArr[objIndex].Flag = true + console.log("changeValue---------1", winArr) + setInputChange(winArr) + // setWindowData(allData); + BgWindowData(allData) + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + + function onselectionChange2(option, qtn, window) { + let allData = WindowData; + let defData = { 'WindowId': window.WindowId, 'WindowDefinitionId': window.WindowDefinitionId }; + const wind_index = allData.findIndex(i => i.WindowId == window.WindowId && i.WindowDefinitionId == window.WindowDefinitionId); + let wind = wind_index >= 0 ? allData[wind_index] : defData; + let data = wind.WindowQA || {}; + let id_key = qtn.WindowQuestionId + '_AnswerId'; + let ans_key = qtn.WindowQuestionId + '_Answer'; + data[id_key] = option.value; + data[ans_key] = option.label; + + + wind['WindowQA'] = data; + wind_index >= 0 ? allData[wind_index] = wind : allData.push(wind); + + let objIndex = InputChange.findIndex(i => i.WindowId == window.WindowId && i.WindowDefinitionId == window.WindowDefinitionId); + let winArr = [...InputChange] + winArr[objIndex].Flag = true + console.log("changeValue---------1", winArr) + setInputChange(winArr) + // setWindowData(allData); + BgWindowData(allData) + + let aq_ans = qtn.Answers != null ? qtn.Answers : []; + let ans_obj = aq_ans.find(i => i.AnswerId == option.value) || {}; + let EQtns = ans_obj.WAQuestionEnable != null && ans_obj.WAQuestionEnable != '' ? ans_obj.WAQuestionEnable.replace(' ', '').split(',') : []; + let DQtns = ans_obj.WAQuestionDisable != null && ans_obj.WAQuestionDisable != '' ? ans_obj.WAQuestionDisable.replace(' ', '').split(',') : []; + + let sqtns = window.WindowQuestions || [] + + if (EQtns.length > 0) { + enableQtns(sqtns, EQtns, DQtns, data, wind, wind_index, allData, window) + } + else if (DQtns.length > 0) { + disableQtns(sqtns, DQtns, data, wind, wind_index, allData, window) + } + else { + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + + } + + async function disableQtns(sqtns, DQtns, data, wind = {}, wind_index = -1, allData = [], window = {}) { + + if (DQtns.length > 0) { + new Promise.all( + DQtns.map((qid, q_index) => { + let s_qtnindex = sqtns.findIndex(i => i.WindowQuestionId == qid) || {}; + let s_qtn = sqtns[s_qtnindex]; + if (s_qtn != null) { + s_qtn['isDisabled'] = true + sqtns[s_qtnindex] = s_qtn; + let id_key = s_qtn.WindowQuestionId + '_AnswerId'; + let ans_key = s_qtn.WindowQuestionId + '_Answer'; + data[id_key] = 0; + data[ans_key] = ''; + + wind['WindowQA'] = data; + wind_index >= 0 ? allData[wind_index] = wind : allData.push(wind); + + return false + } else { + return false + } + }) + ).then(async (val) => { + + let allwindows = Windows; + let windowIndex = allwindows.findIndex(i => i.WindowDefinitionId == window.WindowDefinitionId && i.WindowId == window.WindowId) + if (windowIndex > 0) { + window['WindowQuestions'] = sqtns; + allwindows[windowIndex] = window; + // setWindowData(allData); + BgWindowData(allData) + setWindows(allwindows); + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + + }) + } + } + + async function enableQtns(sqtns, EQtns, DQtns, data, wind = {}, wind_index = -1, allData = [], window = {}) { + new Promise.all( + EQtns.map((qid, q_index) => { + let s_qtnindex = sqtns.findIndex(i => i.WindowQuestionId == qid) || {}; + let s_qtn = sqtns[s_qtnindex]; + if (s_qtn != null) { + s_qtn['isDisabled'] = false + sqtns[s_qtnindex] = s_qtn; + return false + } else { + return false + } + }) + ).then(async (val) => { + if (DQtns.length > 0) { + disableQtns(sqtns, DQtns, data, wind, wind_index, allData, window) + } + else { + let allwindows = Windows; + let windowIndex = allwindows.findIndex(i => i.WindowDefinitionId == window.WindowDefinitionId && i.WindowId == window.WindowId) + if (windowIndex > 0) { + window['WindowQuestions'] = sqtns; + allwindows[windowIndex] = window; + setWindows(allwindows); + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + } + }) + } + + async function setMultiSelectValue(selectedItems = [], qtn = {}, window = {}) { + console.log('setMultiSelectValue', selectedItems); + let id_key = qtn.WindowQuestionId + '_AnswerId'; + let ans_key = qtn.WindowQuestionId + '_Answer'; + let multi_key = qtn.WindowQuestionId + '_MultiOption'; + + let allData = WindowData; + let defData = { 'WindowId': window.WindowId, 'WindowDefinitionId': window.WindowDefinitionId }; + const wind_index = allData.findIndex(i => i.WindowId == window.WindowId && i.WindowDefinitionId == window.WindowDefinitionId); + let wind = wind_index >= 0 ? allData[wind_index] : defData; + let obj = wind.WindowQA || {}; + obj[id_key] = 0; + obj[multi_key] = selectedItems.join(','); + let anss = []; + selectedItems.map((itemValue) => { + let ans = qtn.Answers.find(c1 => c1.AnswerId == itemValue); + if (ans.Answer) { anss.push(ans.Answer) } + }); + obj[ans_key] = anss.join(','); + console.log('obj:', obj); + + wind['WindowQA'] = obj; + wind_index >= 0 ? allData[wind_index] = wind : allData.push(wind); + + let objIndex = InputChange.findIndex(i => i.WindowId == window.WindowId && i.WindowDefinitionId == window.WindowDefinitionId); + let winArr = [...InputChange] + winArr[objIndex].Flag = true + console.log("changeValue---------1", winArr) + setInputChange(winArr) + // setWindowData(allData); + BgWindowData(allData) + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + + function setTextValue(value, qtn, window, type = '') { + if (value != '') { + let isValid = validateNumber(value, type); + if (!isValid) { + return; + } + } + let id_key = qtn.WindowQuestionId + '_AnswerId'; + let ans_key = qtn.WindowQuestionId + '_Answer'; + + let allData = WindowData; + let defData = { 'WindowId': window.WindowId, 'WindowDefinitionId': window.WindowDefinitionId }; + const wind_index = allData.findIndex(i => i.WindowId == window.WindowId && i.WindowDefinitionId == window.WindowDefinitionId); + let wind = wind_index >= 0 ? allData[wind_index] : defData; + let obj = wind.WindowQA || {}; + + if (qtn.QuestionType == 'Date') { + let date_key = qtn.WindowQuestionId + '_Date'; + let d = value != null ? new Date(value) : new Date(); + let mfdate = moment(d).format('MM/YYYY'); + showQtnDatePicker(qtn, window, false); + obj[id_key] = 0; + obj[ans_key] = mfdate; + obj[date_key] = moment(d).format('MM/DD/YYYY'); + } + else { + obj[id_key] = 0; + obj[ans_key] = value; + } + + console.log(value, obj); + wind['WindowQA'] = obj; + wind_index >= 0 ? allData[wind_index] = wind : allData.push(wind); + + let objIndex = InputChange.findIndex(i => i.WindowId == window.WindowId && i.WindowDefinitionId == window.WindowDefinitionId); + let winArr = [...InputChange] + winArr[objIndex].Flag = true + console.log("changeValue---------1", winArr) + setInputChange(winArr) + // setWindowData(allData); + BgWindowData(allData) + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + + function showQtnDatePicker(qtn, window, show = false) { + let allQtns = window.WindowQuestions || []; + let newqtnIndex = allQtns.findIndex(q => q.WindowQuestionId == qtn.WindowQuestionId); + + if (newqtnIndex >= 0) { + let newqtn = allQtns[newqtnIndex]; + newqtn.showDatePicker = show; + allQtns[newqtnIndex] = newqtn; + window['WindowQuestions'] = allQtns; + let allWindows = Windows; + const winIndex = allWindows.findIndex(i => i.WindowId == window.WindowId && i.WindowDefinitionId == window.WindowDefinitionId) || {}; + allWindows[winIndex] = window; + setWindows(allWindows); + + if (show == true) setrerenderdata(!rerenderdata); + } + } + + function setRatingValue(data) { + setRatingOrder(data); + } + + function onRatingCancel() { + setShowRating(false); + } + + function onRatingSave() { + setShowRating(false); + let qtn = RatingQtn; + let window = RatingWindow; + let id_key = qtn.WindowQuestionId + '_AnswerId'; + let ans_key = qtn.WindowQuestionId + '_Answer'; + let rating_key = qtn.WindowQuestionId + '_Rating'; + let ids = [], anss = []; + RatingOrder.map((item, index) => { + ids.push(item.AnswerId); + anss.push(item.Answer); + }) + + let allData = WindowData; + let defData = { 'WindowId': window.WindowId, 'WindowDefinitionId': window.WindowDefinitionId }; + const wind_index = allData.findIndex(i => i.WindowId == window.WindowId && i.WindowDefinitionId == window.WindowDefinitionId); + let wind = wind_index >= 0 ? allData[wind_index] : defData; + let obj = wind.WindowQA || {}; + + obj[rating_key] = ids.join(','); + obj[id_key] = 0; + obj[ans_key] = anss.join(','); + + wind['WindowQA'] = obj; + wind_index >= 0 ? allData[wind_index] = wind : allData.push(wind); + + + let objIndex = InputChange.findIndex(i => i.WindowId == window.WindowId && i.WindowDefinitionId == window.WindowDefinitionId); + let winArr = [...InputChange] + winArr[objIndex].Flag = true + console.log("changeValue---------7", winArr) + + setInputChange(winArr) + // setWindowData(allData); + BgWindowData(allData) + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + + + function onChoiceSelect(item, val, key, animatedChoice) { + console.log('onChoiceSelect---1', animatedChoice) + let win_index = InputChange.find(i => i.WindowId == item.WindowId && i.WindowDefinitionId == item.WindowDefinitionId) + let changeValue = win_index.Flag; + if (changeValue) { + setIsPresentClean(val) + setDataCleanAnim(animatedChoice) + setDataCleanItem(item) + setDataCleanModal(true) + return + } + + var val1 = 0; + val == 1 ? val1 = 1 : ''; + + if (animatedChoice != null) { + Animated.timing(animatedChoice, { + toValue: val1, + duration: 400, + useNativeDriver: false, + }).start(); + } + onWindowDataChange(item, val, key) + } + + function onWindowDataChange(item, val, key) { + let allData = WindowData; + let defData = { 'WindowId': item.WindowId, 'WindowDefinitionId': item.WindowDefinitionId }; + const win_index = allData.findIndex(i => i.WindowId == item.WindowId && i.WindowDefinitionId == item.WindowDefinitionId); + let wind = win_index >= 0 ? (allData[win_index] || defData) : defData; + wind[key] = val; + + if (key == 'ReasonId') { + let rsn = reasons_list.find(r => r.ReasonId == val) || {}; + wind['Reason'] = rsn.Reason || ''; + } + + win_index >= 0 ? allData[win_index] = wind : allData.push(wind); + + + if (key != "isPresent") { + let objIndex = InputChange.findIndex(i => i.WindowId == item.WindowId && i.WindowDefinitionId == item.WindowDefinitionId); + let winArr = [...InputChange] + winArr[objIndex].Flag = true + setInputChange(winArr) + } + // setWindowData(allData); + BgWindowData(allData) + // setHasUnsavedChanges(true); + BgUnsavedChanges(true); + setrerenderdata(!rerenderdata); + } + + function onWindowDataClean() { + + if (DataCleanAnim != null) { + let anim = isPresentClean == 1 ? 1 : ''; + Animated.timing(DataCleanAnim, { + toValue: anim, + duration: 400, + useNativeDriver: false, + }).start(); + } + let allData = WindowData; + // let defData={'CategoryId':item.CategoryId,'CategoryDefinitionId':item.CategoryDefinitionId}; + + // let defData={'WindowId':item.WindowId,'WindowDefinitionId':item.WindowDefinitionId}; + // const win_index=allData.findIndex(i=>i.WindowId==item.WindowId && i.WindowDefinitionId==item.WindowDefinitionId); + // let wind=win_index>=0?(allData[win_index] || defData) : defData; + // wind[key]=val; + + let WindowSplits = []; + for (var s = 0; s < DataCleanItem.NoOfSplit; s++) { + let obj = { 'Image1Name': '', 'Image1': '', 'Image2Name': '', 'Image2': '', img1Required: true, img2Required: true }; + WindowSplits.push(obj); + } + // let defData={'CategoryId':DataCleanItem.CategoryId,'CategoryDefinitionId':DataCleanItem.CategoryDefinitionId,'WindowSplits':WindowSplits,'WindowQA':{},'WStocksData':[],'isAllSKUChecked':0}; + + let defData = { 'WindowId': DataCleanItem.WindowId, 'WindowDefinitionId': DataCleanItem.WindowDefinitionId, 'WindowSplits': WindowSplits, 'WindowQA': {}, 'WStocksData': [], 'isAllSKUChecked': 0, isPresent: isPresentClean }; + const win_index = allData.findIndex(i => i.WindowId == DataCleanItem.WindowId && i.WindowDefinitionId == DataCleanItem.WindowDefinitionId); + + allData[win_index] = defData + // win_index>=0?allData[win_index]=wind:allData.push(wind); + + + let objIndex = InputChange.findIndex(i => i.WindowId == DataCleanItem.WindowId && i.WindowDefinitionId == DataCleanItem.WindowDefinitionId); + let winArr = [...InputChange] + winArr[objIndex].Flag = false + console.log("changeValue---------7", winArr) + setInputChange(winArr) + // setWindowData(allData); + BgWindowData(allData) + // setHasUnsavedChanges(true); + BgUnsavedChanges(true); + setDataCleanModal(false) + setrerenderdata(!rerenderdata); + } + + + async function setWindowStockVal(val, window, stockProd, key, type = '') { + if (val != '') { + let isValid = validateNumber(val, type); + if (!isValid) { + return; + } + } + + let allData = WindowData; + let defData = { 'WindowId': window.WindowId, 'WindowDefinitionId': window.WindowDefinitionId }; + const win_index = allData.findIndex(i => i.WindowId == window.WindowId && i.WindowDefinitionId == window.WindowDefinitionId); + let wind = win_index >= 0 ? (allData[win_index] || defData) : defData; + let WStocksData = wind['WStocksData'] || []; + let sdIndex = WStocksData.findIndex(i => i.ProductId == stockProd.WindowStockValue); + let sd = sdIndex >= 0 ? WStocksData[sdIndex] : { 'ProductId': stockProd.WindowStockValue, 'Stock': '' }; + sd[key] = val; + sdIndex >= 0 ? WStocksData[sdIndex] = sd : WStocksData.push(sd); + wind['WStocksData'] = WStocksData; + win_index >= 0 ? allData[win_index] = wind : allData.push(wind); + if (key == 'isWindPresent') { + let isAllChecked = await verifyAllChecked(val, window, stockProd, key); + wind['isAllSKUChecked'] = isAllChecked; + } + + + // setWindowData(allData); + BgWindowData(allData) + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata4(!rerenderdata4); + } + + async function verifyAllChecked(val, window, stockProd, key) { + return await new Promise((resolve, reject) => { + let WindowStocks = window.WindowStocks || []; + let allData = WindowData; + const win_index = allData.findIndex(i => i.WindowId == window.WindowId && i.WindowDefinitionId == window.WindowDefinitionId); + let wind = win_index >= 0 ? (allData[win_index] || defData) : defData; + let WStocksData = wind['WStocksData'] || []; + if (WindowStocks.length > 0) { + let isAllChecked = 1; + for (var i = 0; i < WindowStocks.length; i++) { + let stockProd = WindowStocks[i]; + + let sdIndex1 = WStocksData.findIndex(a => a.ProductId == stockProd.WindowStockValue); + let sd1 = sdIndex1 >= 0 ? WStocksData[sdIndex1] : {}; + let isWindPresent = sd1.isWindPresent; + if (isWindPresent == null || isWindPresent == '' || isWindPresent == 0 || isWindPresent == '0') { + isAllChecked = 0 + } + + if (i == WindowStocks.length - 1) { + resolve(isAllChecked); + } + } + } + else { + resolve(0); + } + + }).catch((err) => { + console.log(err); + return 0; + }); + } + + function checkAllSKUs(val, window) { + + let WindowStocks = window.WindowStocks || []; + let allData = WindowData; + let defData = { 'WindowId': window.WindowId, 'WindowDefinitionId': window.WindowDefinitionId }; + const win_index = allData.findIndex(i => i.WindowId == window.WindowId && i.WindowDefinitionId == window.WindowDefinitionId); + let wind = win_index >= 0 ? (allData[win_index] || defData) : defData; + let WStocksData = wind['WStocksData'] || []; + console.log('WStocksData before:', WStocksData) + for (var i = 0; i < WindowStocks.length; i++) { + let stockProd = WindowStocks[i]; + + let sdIndex = WStocksData.findIndex(a => a.ProductId == stockProd.WindowStockValue); + let sd = sdIndex >= 0 ? WStocksData[sdIndex] : { 'ProductId': stockProd.WindowStockValue, 'Stock': '' }; + let isWindPresent = (val == 1 || val == '1') ? 1 : 0; + sd['isWindPresent'] = isWindPresent; + + sdIndex >= 0 ? (WStocksData[sdIndex] = sd) : (WStocksData.push(sd)); + } + + + wind['WStocksData'] = WStocksData; + wind['isAllSKUChecked'] = val == 1 ? 1 : 0; + console.log('wind updated'); + win_index >= 0 ? allData[win_index] = wind : allData.push(wind); + + // setWindowData(allData); + BgWindowData(allData) + // setHasUnsavedChanges(true); + BgUnsavedChanges(true) + setrerenderdata(!rerenderdata); + } + + function onSaveCancel() { + setShowAlert(false); + } + + + function setIRZoomImages(IRCamImages) { + let z_images = []; + for (let ci in IRCamImages) { + let img = IRCamImages[ci]; + let img_obj = { imgIndex: (ci + 1), url: img.ImagePath, props: {} } + + z_images.push(img_obj); + if (ci == IRCamImages.length - 1) { + setZoomImageUrl2(z_images); + } + } + } + + async function getIRZoomImages(IRCamImages) { + return new Promise((resolve, reject) => { + let z_images = []; + for (let ci in IRCamImages) { + let img = IRCamImages[ci]; + let img_obj = { imgIndex: (ci + 1), url: img.ImagePath, props: {} } + + z_images.push(img_obj); + if (ci == IRCamImages.length - 1) { + resolve(z_images) + } + } + }).catch((err) => { + console.log(err); + return []; + }) + } + + function openImageRefView(windowIndex = 0) { + setrefImageIndex(windowIndex); + UpdateShow_zoomImageRef(true); + } + + function openImageRefView2(ImageIndex = 0, wind_index, Type = '2') { + if (Type == '1') { + let wind = Windows[wind_index]; + const windDataIndex = WindowData.findIndex(i => i.WindowId == window.WindowId && i.WindowDefinitionId == window.WindowDefinitionId); + const windData = windDataIndex >= 0 ? windData[windDataIndex] : {}; + let zoomIRImages = windData.zoomIRImages != null && windData.zoomIRImages != "" ? windData.zoomIRImages : []; + setZoomImageUrl2(zoomIRImages); + } + setrefImageIndex2(ImageIndex); + UpdateShow_zoomImageRef2(true); + } + + function renderRatingView() { + let qtn = RatingQtn; + let Answers = qtn.Answers; + let id_key = qtn.WindowQuestionId + '_AnswerId'; + let ans_key = qtn.WindowQuestionId + '_Answer'; + let rating_key = qtn.WindowQuestionId + '_Rating'; + + let newarr = RatingOrder; + if (RatingOrder.length <= 0) { + newarr = Answers; + } + + return ( + + + Drag Items In Order + Press and hold to drag + { setRatingValue(data) }} + keyExtractor={(item) => item.AnswerId} + renderItem={renderItem} + /> + + { onRatingCancel() }}> + Cancel + + { onRatingSave() }}> + Save + + + + + ) + } + + function render_Picker(label_key, value_key, onChange = () => { }, selected_data = {}) { + var data = []; + let qtn = selected_data.qtn || {}; + let window = selected_data.window || {}; + let isQtnDisabled = qtn.isDisabled != null || qtn.isDisabled != '' ? false : true; + let allAnswers = qtn.Answers || []; + + allAnswers.map((item, index) => { + let obj = { key: index, label: item[label_key], value: item[value_key] }; + if (selected_data.value == item[label_key]) + obj['component'] = {item[label_key]}; + data.push(obj); + }); + + return ( + { onChange(option, qtn, window) }} + overlayStyle={customStyle.addVisPickerOverlay} + cancelContainerStyle={customStyle.addVisPicker_OptionContainerStyle} + optionStyle={customStyle.addvis_opStyle} + optionTextStyle={customStyle.addvis_opTextStyle} + optionContainerStyle={customStyle.addVisPicker_OptionContainerStyle} + selectedKey={'1'} + disabled={isQtnDisabled} + > + {(selected_data.value != null && selected_data.value != '' ? selected_data.value : '-select-')} + + ) + } + + function renderDatePicker(qtn, window) { + let qtnn = qtn; + let DateRange = qtn.DateRange; + let maxDate = moment().add(10, 'years').format('MM/DD/YYYY'); + let minDate = moment().subtract(10, 'years').format('MM/DD/YYYY'); + if (DateRange == 'RFD') { + maxDate = moment().format('MM/DD/YYYY'); + } + else if (DateRange == 'RPD') { + minDate = moment().format('MM/DD/YYYY'); + } + + return ( + { setTextValue(selectedDate, qtnn, window) }} + maximumDate={new Date(maxDate)} + minimumDate={new Date(minDate)} + /> + ); + } + + function _OpenCaptureImage_Modal(img) { + + const isImageCap = (img != '' || img != null) ? true : false; + + let { window, splitItem, splitItemIndex, cameraType } = reCapImgModalObj + let camera2Label = (window && window.PromoImage2Lable) || ''; + return ( + + { + isImageCap && + + + + + + { openCamera(window, splitItem, splitItemIndex, cameraType) }}> + + + + {!showImageSaveOp && + { cancelImage(false) }}> + + {ST.Close} + + } + + } + + ) + } + + async function OpenImgModal(imgPath, window, splitItem, splitItemIndex, cameraType) { + setSelectedImg(imgPath) + setShowModal(true); + if ((imgPath != '' && imgPath != null)) { + setShowImageSaveOp(false); + } + else { + setShowImageSaveOp(true); + } + setReCapImgModalObj({ window, splitItem, splitItemIndex, cameraType }) + // _OpenCaptureImage_Modal(imgPath,window,splitItem,splitItemIndex,cameraType) + + } + + function cancelImage() { + // setImage1(''); + setSelectedImg(''); + setReCapImgModalObj({}) + setShowModal(false); + } + + + function _render_RetakePopup() { + return ( + + + { RetakeIRPhoto() }}> + + + Retake + + + { DeleteIRPhoto() }}> + + + Delete + + + { closeRetakeOp() }}> + + + Cancel + + + + + + + + ) + } + + function _render_UploadAlert() { + return ( + + + { setshowUploadAlert(false) }}> + Cancel + + { UploadIRSessions() }}> + Yes + + + + ) + } + + + + function _renderIRCamera(wind, IRImages, TempSessionId, type = '1', wind_index = '') { + + let isSaveDisabled = (isDataUploaded == 'U' || isDataUploaded == 'P'); + let isResumeDisabled = (TempSessionId == null || TempSessionId == '' || TempSessionId == 'undefined' || isSaveDisabled == true); + + return ( + + + {`Capture ${currentMenu.MenuName} Images`} + + + + {(IRImages != null && IRImages.length > 0) && + IRImages.map((IRImg, IRImgIndex) => { + let IRimgPath = IRImg.ImagePath; + return ( + { openImageRefView2(IRImgIndex, wind_index, type) }}> + {(IRimgPath != null && IRimgPath != '') && } + {(IRimgPath == null || IRimgPath == '') && } + { openRetakeOp(wind, type, IRImgIndex, IRimgPath) }}> + + + + ); + }) + + } + + + { StartCameraSession(wind, type) }}> + + Start Session + + { ResumeCameraSession(wind, type) }} > + + Resume Session + + + + + ) + } + + function _renderIRCameraOnce() { + let isKPIIREnableI = KPIFields.findIndex(i => i.KPIFieldName == 'KPIIREnable') + let isKPIIREnableObj = isKPIIREnableI >= 0 ? KPIFields[isKPIIREnableI] : {}; + let isKPIIREnable = isKPIIREnableI >= 0 ? isKPIIREnableObj['KPIFieldEnable'] : false; + + let CameraIROnceOnlyIndex = KPIFields.findIndex(i => i.KPIFieldName == 'CameraIROnceOnly') + let CameraIROnceOnlyObj = CameraIROnceOnlyIndex >= 0 ? KPIFields[CameraIROnceOnlyIndex] : {}; + let CameraIROnceOnly = CameraIROnceOnlyIndex >= 0 ? CameraIROnceOnlyObj['KPIFieldEnable'] : true; + + if (isKPIIREnable && CameraIROnceOnly) { + return _renderIRCamera({}, WindowIRImages.current, GbTempSessionId.current, '2', ''); + } + else { + return null; + } + + } + + + + function _renderWindow() { + + let isListedSKUIndex = KPIFields.findIndex(i => i.KPIFieldName == 'ListedSKUCheckbox'); + let isListedSKUKPIObj = isListedSKUIndex >= 0 ? KPIFields[isListedSKUIndex] : {}; + let isListedSKUEnable = isListedSKUIndex >= 0 ? isListedSKUKPIObj['KPIFieldEnable'] : true; + + let isKPIIREnableI = KPIFields.findIndex(i => i.KPIFieldName == 'KPIIREnable') + let isKPIIREnableObj = isKPIIREnableI >= 0 ? KPIFields[isKPIIREnableI] : {}; + let isKPIIREnable = isKPIIREnableI >= 0 ? isKPIIREnableObj['KPIFieldEnable'] : false; + + let CameraIROnceOnlyIndex = KPIFields.findIndex(i => i.KPIFieldName == 'CameraIROnceOnly') + let CameraIROnceOnlyObj = CameraIROnceOnlyIndex >= 0 ? KPIFields[CameraIROnceOnlyIndex] : {}; + let CameraIROnceOnly = CameraIROnceOnlyIndex >= 0 ? CameraIROnceOnlyObj['KPIFieldEnable'] : true; + + + return ( + `window_${index.toString()}`} + renderItem={({ item, index }) => { + const window = item; + let windowIndex = index; + + let isImage1 = window.WindowImage1 == 'true' || window.WindowImage1 == 1 ? 1 : 0; + let isImage2 = window.WindowImage2 == 'true' || window.WindowImage2 == 1 ? 1 : 0; + let isNAImageAvl = window.WindowNotExistCamera == 'true' || window.WindowNotExistCamera == 1 ? 1 : 0; + let isNAReasonEnable = window.WindowNotExistReasonEnable == 'true' || window.WindowNotExistReasonEnable == 1 ? 1 : 0; + let isReasonEnable = window.WindowExistReasonEnable == 'true' || window.WindowExistReasonEnable == 1 ? 1 : 0; + let isStockReq = window.WindowElementStockRequired == 'true' || window.WindowElementStockRequired == 1 ? 1 : 0; + let StockQtyRequired = window.StockQtyRequired == 'true' || window.StockQtyRequired == 1 ? 1 : 0; + + // let isStock_CheckAssrt=window.WindowElementCheckAssortment=='true' || window.WindowElementCheckAssortment==1?1:0; + let RefImage = window.WindowRefImage; + let camera1Label = window.WindowImage1Lable || ''; + let camera2Label = window.WindowImage2Lable || ''; + let WindowQuestions = window.WindowQuestions || []; + let WindowStocks = window.WindowStocks || []; + + const wind = WindowData.find(i => i.WindowId == window.WindowId && i.WindowDefinitionId == window.WindowDefinitionId) || {}; + let isPresent = wind.isPresent != null && wind.isPresent != '' ? wind.isPresent : '0'; + let ReasonId = wind.ReasonId != null ? wind.ReasonId : ''; + let Reason = wind.Reason != null ? wind.Reason : ''; + let NAImage1 = wind.NAImage1 != null ? wind.NAImage1 : ''; + let NAImage1Path = wind.NAImage1Path != null ? wind.NAImage1Path : ''; + let WindowSplits = wind.WindowSplits || []; + let QuestionsData = wind.WindowQA || {}; + let WStocksData = wind.WStocksData || []; + let isAllSKUChecked = wind.isAllSKUChecked == 1 || wind.isAllSKUChecked == "1"; + let windIRImages = wind.IRImages != null ? wind.IRImages : []; + let TempSessionId = wind.TempSessionId != null ? wind.TempSessionId : ""; + + // console.log('camera2Label:',window.WindowId,window.WindowDefinitionId,camera2Label); + + // console.log("isPresent in render:",window.WindowId,isPresent); + var xpos = isPresent == '1' ? -75 : 0; + if (window.animatedChoice != null) { + xpos = window.animatedChoice.interpolate({ + inputRange: [0, 1], + outputRange: [0, -75], + }); + } + return ( + + + + {window.WindowName} + {window.ChildName} + + { openImageRefView(index) }}> + + + + + + + + + {'Is Present'} + + + + { onChoiceSelect(window, 1, 'isPresent', window.animatedChoice) }}> + Yes + + { onChoiceSelect(window, 0, 'isPresent', window.animatedChoice) }}> + No + + + + + {((isPresent != '1' && isNAReasonEnable == true) || (isPresent == '1' && isReasonEnable == true)) && + + Select Reason + {} + + } + + + {(!isKPIIREnable && (isPresent != '1' && isNAImageAvl == true)) && + + + + {'Capture Image'} + + + + + + {(NAImage1Path == '' || NAImage1Path == null) && + { openCamera(window, {}, 0, '1', '3') }}> + + + } + {(NAImage1Path != '' && NAImage1Path != null) && + + + { openCamera(window, {}, 0, '1', '3') }}> + + + + } + + + + + } + + {isKPIIREnable && !CameraIROnceOnly && + _renderIRCamera(window, windIRImages, TempSessionId, '1', windowIndex) + } + + {(isPresent == '1') && + + + {(isStockReq == true && WindowStocks.length > 0) && + + + {'Enter Stocks'} + + {isListedSKUEnable == true && + + { checkAllSKUs((isAllSKUChecked == 1 ? 0 : 1), window) }}> + { let val1 = (val == true) ? 1 : 0; checkAllSKUs(val1, window) }} + style={[customStyle.WStkHdr_checkbox, (Platform.OS == 'ios' ? { height: 20, width: 20, marginLeft: 5 } : {})]} + tintColors={{ true: PageTheme.$primary_color, false: PageTheme.$text_color_light }} + /> + {ST.SelectAll} + + } + `wstock_${index.toString()}`} + renderItem={({ item, index }) => { + let stockProd = item; + let stockProdIndex = index; + let sd = WStocksData.find(i => i.ProductId == stockProd.WindowStockValue) || {}; + let stock = sd.Stock != null ? sd.Stock : ''; + let isWindPresent = sd.isWindPresent != null ? sd.isWindPresent : 0; + return ( + + {isListedSKUEnable != true && {stockProd.ProductName}} + {isListedSKUEnable == true && + + + { let val1 = (val == true) ? 1 : 0; setWindowStockVal(val1, window, stockProd, 'isWindPresent') }} + style={[customStyle.WStkHdr_checkbox, (Platform.OS == 'ios' ? { height: 20, width: 20, marginTop: 5, marginLeft: 5, } : {})]} + tintColors={{ true: PageTheme.$primary_color, false: PageTheme.$text_color_light }} + /> + + {stockProd.ProductName} + } + {((isListedSKUEnable == true && StockQtyRequired == 1 && isWindPresent == 1) || isListedSKUEnable != true) && + + + Stock + + + { inputRefs.current['input1_' + stockProd.WindowDefinitionId + '_' + stockProd.WindowStockDefinitionId] = reff; }} + placeholder="" + autoComplete='off' + placeholderTextColor={PageTheme.$placeholder_color} + keyboardType={'number-pad'} + returnKeyType="next" + blurOnSubmit={false} + value={stock + ''} + onSubmitEditing={() => { focusToNext(WindowStocks, windowIndex, stockProd, index) }} + onChangeText={(val) => { setWindowStockVal(val, window, stockProd, 'Stock', 'numeric') }} + /> + + } + + ); + }} + /> + + } + {(!isKPIIREnable && (window.NoOfSplit > 0 && WindowSplits.length > 0 && (isImage1 == 1 || isImage2 == 1))) && + + + {'Capture Window Images'} + + `spliItem_${index.toString()}`} + renderItem={({ item, index }) => { + let splitItem = item; + let splitItemIndex = index; + let Image1Name = splitItem['Image1Name'] != null && splitItem['Image1Name'] != '' ? splitItem['Image1Name'] : ''; + let Image2Name = splitItem['Image2Name'] != null && splitItem['Image2Name'] != '' ? splitItem['Image2Name'] : ''; + let Image1 = splitItem['Image1'] != null && splitItem['Image1'] != '' ? splitItem['Image1'] : ''; + let Image2 = splitItem['Image2'] != null && splitItem['Image2'] != '' ? splitItem['Image2'] : ''; + let isImg1mad = splitItem['img1Required'] || false; + let isImg2mad = splitItem['img2Required'] || false; + + return ( + + {isImage1 == 1 && + + {/* { (Image1=='' || Image1==null) && + {openCamera(window,splitItem,splitItemIndex,'1')}}> + + + } + { (Image1!='' && Image1!=null) && + + + {openCamera(window,splitItem,splitItemIndex,'1')}}> + + + + } */} + + {((Image1 == '' || Image1 == null) && isImg1mad) ? + { openCamera(window, splitItem, splitItemIndex, '1') }}> + + : (Image1 == '' || Image1 == null) ? + { openCamera(window, splitItem, splitItemIndex, '1') }}> + + : (Image1 != '' || Image1 != null) ? + { OpenImgModal(Image1, window, splitItem, splitItemIndex, '1') }}> + + : null + } + {camera1Label} + + } + {isImage2 == 1 && + + {/* { (Image2=='' || Image2==null) && + {openCamera(window,splitItem,splitItemIndex,'2')}}> + + + } + { (Image2!='' && Image2!=null) && + + + {openCamera(window,splitItem,splitItemIndex,'2')}}> + + + + } */} + {((Image2 == '' || Image2 == null) && isImg2mad) ? + { openCamera(window, splitItem, splitItemIndex, '2') }}> + + : (Image2 == '' || Image2 == null) ? + { openCamera(window, splitItem, splitItemIndex, '2') }}> + + : (Image2 != '' || Image2 != null) ? + { OpenImgModal(Image2, window, splitItem, splitItemIndex, '2') }}> + + : null + } + {console.log('camera2Label 2:', camera2Label)} + {camera2Label} + + } + + ); + }} + /> + + } + + {(WindowQuestions.length > 0) && + + + {'Window Questions'} + + {WindowQuestions.map((item, index) => { + + let qtn = item; + let qtnIndex = index; + let selansid = '', selanswer = '', selimg = '', showImageTag = false; + let id_key = qtn.WindowQuestionId + '_AnswerId'; + let ans_key = qtn.WindowQuestionId + '_Answer'; + let multi_key = qtn.WindowQuestionId + '_MultiOption'; + let date_key = qtn.WindowQuestionId + '_Date'; + let img_key = qtn.WindowQuestionId + '_ImagePath1'; + let imgname_key = qtn.WindowQuestionId + '_ImageName1'; + let rating_key = qtn.WindowQuestionId + '_Rating'; + + let list_mcdata = []; + + if (qtn.QuestionType == 'Single choice list') { + selansid = QuestionsData[id_key] != null ? QuestionsData[id_key] : ''; + selanswer = QuestionsData[ans_key] != null ? QuestionsData[ans_key] : ''; + } + else if (qtn.QuestionType == 'Multi choice list') { + if (qtn.Answers != null) { + for (var i = 0; i < qtn.Answers.length; i++) { + let obj = { 'AnswerId': parseInt(qtn.Answers[i].AnswerId), 'Answer': qtn.Answers[i].Answer }; + list_mcdata.push(obj); + } + } + selansid = QuestionsData[multi_key] != null && QuestionsData[multi_key] != '' ? QuestionsData[multi_key].split(',') : []; + // if(selansid!=null && selansid.length>0){ + // let arr=[]; + // for(var i=0;i 0) { + for (var i = 0; i < qtn.Answers.length; i++) { + let ansss = qtn.Answers[i]; + let isandImgAl = (ansss.WAShowCamera == 'true' || ansss.WAShowCamera == 1); + + if (qtn.QuestionType == 'Single choice list' && (isandImgAl && ansss.AnswerId == selansid)) { + showImageTag = true; + } + else if (qtn.QuestionType == 'Multi choice list' && (isandImgAl && selansid.indexOf(ansss.AnswerId) >= 0)) { + showImageTag = true; + } + + } + } + } + + if (showImageTag) { + selimg = QuestionsData[img_key] != null && QuestionsData[img_key] != '' ? 'file://' + QuestionsData[img_key] : ''; + } + + return ( + + {qtn.WindowQuestionName} + {qtn.QuestionType == 'Single choice list' && qtn.Answers && + render_Picker('Answer', 'AnswerId', onselectionChange2, { value: selanswer, qtn: qtn, window: window }) + } + {qtn.QuestionType == 'Multi choice list' && qtn.Answers && + { setMultiSelectValue(selectedItems, qtn, window) }} //setMultiSelectValue(selectedItems,qtn) + selectedItems={selansid} + selectText="Pick Items" + searchInputPlaceholderText="Search Items..." + // onChangeInput={ (text)=> console.log(text)} + tagRemoveIconColor={PageTheme.$primary_color} + tagBorderColor={PageTheme.$primary_color} + tagTextColor={PageTheme.$primary_color} + selectedItemTextColor={PageTheme.$primary_color} + selectedItemIconColor={PageTheme.$primary_color} + itemTextColor={PageTheme.$text_color} + displayKey="Answer" + searchInputStyle={{ color: '#CCC' }} + submitButtonColor={PageTheme.$primary_color} + submitButtonText="Submit" + /> + } + {(qtn.QuestionType == 'Number' || qtn.QuestionType == 'Decimal' || qtn.QuestionType == 'Text') && + { setTextValue(val, qtn, window, (qtn.QuestionType == 'Decimal' ? 'decimal' : (qtn.QuestionType == 'Text' ? 'text' : 'numeric'))) }} + /> + } + { + (qtn.QuestionType == 'Date') && + + {selansid != '' ? selansid : 'MM/YYYY'} + { setDateValue(selanswer); showQtnDatePicker(qtn, window, true) }}> + + + + } + {((qtn.showDatePicker == true || qtn.showDatePicker == 'true') && (qtn.QuestionType == 'Date')) && + renderDatePicker(qtn, window) + } + { + (qtn.QuestionType == 'Rating') && + + {selanswer} + { setRatingQtn(qtn); setRatingWindow(window); setShowRating(true); }}> + + + + } + + { + // (qtn.QuestionType=='Audio') && + // + // {selanswer} + // {show_recorder(qtn);}}> + // + // + // + } + + { + (!isKPIIREnable && (showImageTag)) && + + + { openCamera(window, {}, 0, '1', '2', qtn) }}> + + + + } + + + + ) + })} + + } + + + + } + + + + + + + ); + }} + /> + ) + } + + + + function _renderHeader(currentIndex, ImagesArr) { + return ( + + {`${(currentIndex + 1)}/${ImagesArr.length}`} + { UpdateShow_zoomImageRef(false); UpdateShow_zoomImageRef2(false); }}> + + + + ) + } + + const onCancelClean = () => { + setDataCleanModal(false) + } + const onclear = () => { + console.log("onclear---------", DataCleanItem) + onWindowDataClean(DataCleanItem) + } + + function _renderBtns() { + + let isUploadDisabled = isDataUploaded == 'U'; + let isSaveDisabled = (isDataUploaded == 'U' || isDataUploaded == 'P'); + + let colors1 = (isUploadDisabled ? [PageTheme.$tertiary_color, PageTheme.$tertiary_color] : [PageTheme.$secondary_color_light, PageTheme.$gradient2, PageTheme.$primary_color]); + let colors2 = (isSaveDisabled ? [PageTheme.$tertiary_color, PageTheme.$tertiary_color] : [PageTheme.$secondary_color_light, PageTheme.$gradient2, PageTheme.$primary_color]); + + return ( + + { onSubmitData() }} /> + + ) + } + + return ( + + {processing && } + + {_OpenCaptureImage_Modal()} + {ConfirmSaveAlert(props, showAlert, onSaveCancel, saveData)} + {ConfirmSaveAlert(props, DataCleanModal, onCancelClean, onclear, 'Your data will be clean',)} + {_render_RetakePopup()} + {_render_UploadAlert()} + { setShowCamera(false); getImage(imgData) }} showCamera={showCamera} onHideCamera={() => { setShowCamera(false); }} /> + + + + {Object.keys(storeData).length > 0 && + + {_renderWindow()} + + } + {_renderBtns()} + + + + {showRating == true && + renderRatingView() + } + {show_zoomImage && + + { return _renderHeader(currentIndex, zoomImageUrl) }} renderIndicator={() => null} + /> + + } + + {show_zoomImage2 && + + { return _renderHeader(currentIndex, zoomImageUrl2) }} renderIndicator={() => null} + /> + + } + + + ); +} + + + +export default connect(mapStateToProps, mapDispatchToProps)(WindowIR); \ No newline at end of file diff --git a/PerformicsSrc/src/screens/chat/ChatScreen.js b/PerformicsSrc/src/screens/chat/ChatScreen.js new file mode 100644 index 0000000..4ac2d78 --- /dev/null +++ b/PerformicsSrc/src/screens/chat/ChatScreen.js @@ -0,0 +1,360 @@ +import React, { useState, useEffect, useRef } from 'react'; +import { + View, Text, TextInput, TouchableOpacity, + ActivityIndicator, FlatList, Platform, StyleSheet, + KeyboardAvoidingView, Keyboard, Animated, Easing +} from 'react-native'; +import moment from 'moment'; +import { connect } from 'react-redux'; +import Container from '../../components/container'; +import CustomHeader from '../../components/customHeader'; +import { mapStateToProps, mapDispatchToProps } from '../../reducers/contextProvider'; +import { SvgXml } from 'react-native-svg'; +import SendIcon from "../../assets/icons/SendIcon.svg"; +import CPMChatAPI from "../../utils/cpmChatAPI"; +import { CONFIG } from '../../constants/constants'; +import Markdown from 'react-native-markdown-display'; + +const markdownStyles = { + body: { + color: '#1A1A1A', + fontSize: 14, + fontWeight: '440', + lineHeight: 17, + }, + paragraph: { + marginBottom: 5, + }, + strong: { + fontWeight: '500', + }, + em: { + fontStyle: 'italic', + }, + code_inline: { + backgroundColor: '#ffffff1A', + paddingHorizontal: 6, + paddingVertical: 2, + borderRadius: 4, + fontFamily: Platform.OS === 'ios' ? 'Courier' : 'monospace', + }, + link: { + color: '#4DA8FF', + textDecorationLine: 'underline', + }, +}; + +function ChatScreen(props) { + const [messages, setMessages] = useState([]); + const [currentMessage, setCurrentMessage] = useState(""); + const [disclaimer, setDisclaimer] = useState(CONFIG.DEFAULT_DISCLAIMER); + const [sessionId, setSessionId] = useState(null); + const [isLoading, setIsLoading] = useState(false); + const chatAPI = useRef(null); + const flatListRef = useRef(null); + const dotOpacity1 = useRef(new Animated.Value(0.3)).current; + const dotOpacity2 = useRef(new Animated.Value(0.3)).current; + const dotOpacity3 = useRef(new Animated.Value(0.3)).current; + + const config = { + userId: props.UserId || CONFIG.DEFAULT_USER_ID, + userName: props.EmployeeName || CONFIG.DEFAULT_USER_NAME, + }; + + useEffect(() => { + let Chatbot_Creds = props.Chatbot_Creds != null && props.Chatbot_Creds != "" ? JSON.parse(props.Chatbot_Creds) : []; + let Chatbot_CredsObj = Chatbot_Creds.length > 0 ? Chatbot_Creds[0] : {}; + setDisclaimer(Chatbot_CredsObj?.CHATBOT_DISCLAIMER || CONFIG.DEFAULT_DISCLAIMER) + chatAPI.current = new CPMChatAPI( + Chatbot_CredsObj?.CHATBOT_BASE_URL || CONFIG.API_BASE_URL, + Chatbot_CredsObj?.CLIENT_ID || CONFIG.CLIENT_ID, + Chatbot_CredsObj?.CLIENT_SECRET || CONFIG.CLIENT_SECRET + ); + startChat(); + }, []); + + useEffect(() => { + if (isLoading) { + console.log('Starting typing animation'); + const animateDot = (dot, delay) => { + Animated.loop( + Animated.sequence([ + Animated.timing(dot, { + toValue: 1, + duration: 300, + delay, + easing: Easing.inOut(Easing.ease), + useNativeDriver: true, + }), + Animated.timing(dot, { + toValue: 0.3, + duration: 300, + easing: Easing.inOut(Easing.ease), + useNativeDriver: true, + }), + ]) + ).start(); + }; + animateDot(dotOpacity1, 0); + animateDot(dotOpacity2, 100); + animateDot(dotOpacity3, 200); + } else { + console.log('Stopping typing animation'); + dotOpacity1.setValue(0.3); + dotOpacity2.setValue(0.3); + dotOpacity3.setValue(0.3); + } + }, [isLoading]); + + const startChat = async () => { + try { + setIsLoading(true); + const response = await chatAPI.current.initChat(config.userId, config.userName); + setSessionId(response.sessionId); + + const formattedMessages = response.messages.map((msg) => ({ + ...msg, + timestamp: new Date(msg.timestamp), + })); + + setMessages(response.isNewSession + ? [...formattedMessages, { + sender: "ai", + text: CONFIG.WELCOME_MESSAGE, + timestamp: new Date(), + }] + : formattedMessages + ); + } catch (err) { + console.log('Start chat error:', err); + } finally { + setIsLoading(false); + } + }; + + const sendMessage = async () => { + Keyboard.dismiss(); + if (!currentMessage.trim() || !sessionId) return; + + const userMessage = { + sender: "user", + text: currentMessage, + timestamp: new Date(), + }; + + setMessages(prev => [...prev, userMessage]); + setCurrentMessage(""); + setIsLoading(true); + + try { + const response = await chatAPI.current.sendMessage(config.userId, sessionId, currentMessage); + const aiMessage = { + sender: "ai", + text: response, + timestamp: new Date(), + }; + setMessages(prev => [...prev, aiMessage]); + } catch (err) { + setMessages(prev => [...prev, { + sender: "system", + text: `Error: ${err.message}`, + timestamp: new Date(), + }]); + } finally { + setIsLoading(false); + } + }; + + const formatRelativeTime = (timestamp) => { + return moment(timestamp).calendar(null, { + sameDay: '[Today] h:mm A', + lastDay: '[Yesterday] h:mm A', + lastWeek: 'MMM D, YYYY h:mm A', + sameElse: 'MMM D, YYYY h:mm A' + }); + }; + + useEffect(() => { + if (flatListRef.current && messages.length > 0) { + setTimeout(() => { + if (flatListRef.current) { + flatListRef.current.scrollToOffset({ offset: 0, animated: true }); + } + }, 100); + } + }, [messages]); + + + const renderItem = ({ item, index }) => { + let nText = item?.text?.replace(/\n\[.*?\]/g, '').trim(); + // Since FlatList is inverted, the first item (index 0) is the most recent + const isLastUserMessage = index === 0 && item.sender === 'user' && isLoading; + + return ( + + {item.sender === 'user' ? ( + + {nText} + + ) : ( + + + {nText} + {formatRelativeTime(item.timestamp)} + + + )} + {isLastUserMessage && ( + + + + + + )} + + ); + }; + + return ( + + + + index.toString()} + inverted={true} + contentContainerStyle={styles.flatListContent} + showsVerticalScrollIndicator={false} + /> + + + + + + + + + {disclaimer} + + + ); +} + +export default connect(mapStateToProps, mapDispatchToProps)(ChatScreen); + +const styles = StyleSheet.create({ + container: { + flex: 1, + backgroundColor: '#F5F7FA', + width: '100%' + }, + flatListContent: { + paddingBottom: 2, + paddingTop: 10, + }, + chatBlock: { + marginBottom: 15, + paddingHorizontal: 15, + }, + questionButton: { + alignSelf: 'flex-end', + backgroundColor: 'white', + paddingVertical: 12, + paddingHorizontal: 10, + borderBottomRightRadius: 1, + borderRadius: 15, + maxWidth: '75%', + shadowColor: '#000', + shadowOffset: { width: 0, height: 2 }, + shadowOpacity: 0.1, + shadowRadius: 4, + elevation: 3, + }, + questionButtonText: { + fontSize: 14, + fontWeight: '500', + color: '#1A1A1A', + lineHeight: 20, + }, + leftMessageRow: { + alignSelf: 'flex-start', + maxWidth: '100%', + }, + leftBubble: { + backgroundColor: '#CFE5FF', + borderRadius: 16, + padding: 8, + borderTopLeftRadius: 1, + shadowColor: '#000', + shadowOffset: { width: 0, height: 2 }, + shadowOpacity: 0.1, + shadowRadius: 4, + elevation: 3, + }, + bubbleTimestamp: { + fontSize: 12, + color: '#1A1A1A', + marginTop: 4, + alignSelf: 'flex-end', + }, + inputCard: { + flexDirection: 'row', + backgroundColor: '#FFFFFF', + borderRadius: 24, + marginLeft: 8, + marginRight: 8, + padding: 8, + alignItems: 'center', + shadowColor: '#000', + shadowOffset: { width: 0, height: 2 }, + shadowOpacity: 0.15, + shadowRadius: 6, + elevation: 2, + }, + input: { + flex: 1, + fontSize: 15, + color: '#1A1A1A', + minHeight: 40, + maxHeight: 100, + paddingVertical: 8, + }, + footerText: { + textAlign: 'center', + fontSize: 10, + color: '#666', + marginVertical: 5, + paddingHorizontal: 20, + fontStyle: 'normal', + }, + keyboardAvoidingView: { + paddingBottom: 2, + }, + typingIndicator: { + flexDirection: 'row', + alignSelf: 'flex-start', + marginLeft: 12, + marginTop: 8, + }, + dot: { + width: 8, + height: 8, + backgroundColor: 'black', + borderRadius: 4, + marginHorizontal: 2, + }, +}); \ No newline at end of file diff --git a/PerformicsSrc/src/screens/gyancast/Gyancasts.js b/PerformicsSrc/src/screens/gyancast/Gyancasts.js new file mode 100644 index 0000000..1f9d4ae --- /dev/null +++ b/PerformicsSrc/src/screens/gyancast/Gyancasts.js @@ -0,0 +1,713 @@ +// import { useState, useRef, useCallback } from "react"; +// import Container from "../../components/container"; +// import { useFocusEffect, useRoute } from "@react-navigation/native"; +// import { customStyles, GetPageTheme } from "../../styles/Global"; +// import { +// Image, +// View, +// Text, +// ScrollView, +// TouchableOpacity, +// Platform, +// FlatList, +// } from "react-native"; +// import { +// connect +// } from "react-redux"; +// import { +// mapStateToProps, +// mapDispatchToProps, +// } from "../../reducers/contextProvider"; +// import moment from "moment"; +// import CustomHeader from "../../components/customHeader"; +// import { +// Ionicons, +// } from "../../components/icons"; +// import LinearGradient from "react-native-linear-gradient"; +// import { _checkLocationPermission } from "../../components/geolocation"; + +// import { db } from "../../constants/constants"; +// import VideoIcon from "../../assets/image/VideoIcon.svg" +// import AudioIcon from "../../assets/image/Aud_Icon.svg" + + +// const GyancastCard = ({ icon, title, duration, description, props, item }) => { +// const date1 = moment(); +// const date2 = moment(item?.ExpiryDate, "DD/MM/YYYY"); + +// const daysDifference = date2.diff(date1, 'days'); + +// let expiredCon = ((item?.Status == "Pending") || (item?.Status == "Progress")) && (daysDifference < 0) +// let expiredConCur = ((item?.Status == "Pending") || (item?.Status == "Progress")) && (daysDifference == 0) + +// return ( +// { +// props.navigation.navigate("PodcastDetails", { item: item }); +// }} +// style={{ +// flexDirection: "row", +// alignItems: "flex-start", +// backgroundColor: expiredCon ? "#ffe6e6" : "#eff9fdff", +// borderRadius: 12, +// padding: 12, +// marginVertical: 8, +// marginHorizontal: 8, +// shadowColor: "#000", +// shadowOpacity: 0.05, +// shadowRadius: 4, +// shadowOffset: { width: 0, height: 2 }, +// elevation: 2, +// }} +// > +// +// +// { }}> + +// {item?.MediaType === 'Audio' ? () : ()} + +// +// + + +// +// +// {title} +// +// {item?.Status == "Complete" && +// +// +// +// } +// +// Publish-{item?.PublishDate} {expiredCon ? "Expired" : "Expiry"} -{item?.ExpiryDate} +// +// +// {description} +// +// +// +// ) +// }; + +// function Gyancasts(props) { +// const route = useRoute(); + +// const ST = props.StaticText || {}; + +// const PageTheme = GetPageTheme(props.DarkMode, route.name); +// const customStyle = customStyles(props.DarkMode, route.name); +// const [Index, setIndex] = useState(0); + +// const [TrainingOrg, setTrainingOrg] = useState([]); +// const [FilterDT, setFilterDT] = useState([]); + +// const IndexRef = useRef(0); + +// useFocusEffect( +// useCallback(() => { +// getData(); +// }, []) +// ); + +// async function getData() { +// try { +// let List = []; +// await db.transaction(async function (txn) { +// let q = `Select TrainingId,Topic,Description,MediaType,TrainingContentId,Thumnail,TrainingUrl,Status,StartTime,PublishDate,ExpiryDate,DefaultLang,TrainingNo from Gyancast_TrainingContent where (DefaultLang="true" or DefaultLang =1 or DefaultLang = true or DefaultLang ='1') order by ExpiryDate`; + +// console.log("query---", q) +// await txn.executeSql( +// q, +// [], +// async function (txn2, txnres2) { +// console.log("txnres2.rows.length:", txnres2.rows.length); +// if (txnres2.rows.length > 0) { +// for (let i = 0; i < txnres2.rows.length; i++) { +// let data = txnres2.rows.item(i); +// List.push(data); +// } +// setTrainingOrg(List); +// setFilterDT(List); +// filterListData(IndexRef.current, List); + +// } +// }, +// function (txnE, txnerr) { +// console.log(txnerr); +// } +// ); +// }); +// } catch (err) { +// console.log(err); +// } +// } + + +// function filterListData(val, List = []) { +// let TrainingOrgVal = List.length > 0 ? List : TrainingOrg +// console.log("TrainingOrgVal------", JSON.stringify(TrainingOrgVal)) +// if (val == 1) { +// setFilterDT(TrainingOrgVal.filter((itm) => (itm.Status == "Pending") || (itm?.Status == "Progress"))); +// } else if (val == 2) { +// setFilterDT(TrainingOrgVal.filter((itm) => itm.Status == "Complete")); +// } else { +// setFilterDT( +// TrainingOrgVal.filter( +// (item) => +// item?.Status === "Pending" && +// moment(item?.ExpiryDate, "DD/MM/YYYY").diff(moment(), "days") > 0 && +// (item?.StartTime === "00:00:00" || +// item?.StartTime === "00:00" || +// item?.StartTime === "0") +// ) +// ); +// } +// setIndex(val); +// IndexRef.current = val +// } + +// const HeaderTabs = () => { +// return ( +// +// +// { +// filterListData(0); +// }} +// > +// +// {"New"} +// +// +// { +// filterListData(1); +// }} +// > +// +// {"Pending"} +// +// + +// { +// filterListData(2); +// }} +// > +// +// {"Completed"} +// +// + +// {/* { +// FilterStores(searchedItem); +// }} +// > +// +// */} +// +// +// ); +// }; + + +// const hour = moment().hour(); + +// return ( +// +// +// +// + +// +// +// +// +// +// {hour < 12 ? 'Good Morning' : hour < 17 ? 'Good Afternoon' : 'Good Evening'}, {props?.UserId} +// + +// {FilterDT.length <= 0 ? ( +// +// {ST.NoDataAvailable} +// +// ) : ( +// +// ( +// +// )} +// /> +// +// )} +// +// +// +// +// ); +// } + +// export default connect(mapStateToProps, mapDispatchToProps)(Gyancasts); + +import { useState, useRef, useCallback, useEffect } from "react"; +import Container from "../../components/container"; +import { useFocusEffect, useRoute } from "@react-navigation/native"; +import { customStyles, GetPageTheme } from "../../styles/Global"; +import { + Image, + View, + Text, + ScrollView, + TouchableOpacity, + Platform, + FlatList, + BackHandler, +} from "react-native"; +import { + connect +} from "react-redux"; +import { + mapStateToProps, + mapDispatchToProps, +} from "../../reducers/contextProvider"; +import moment from "moment"; +import CustomHeader from "../../components/customHeader"; +import { + Ionicons, +} from "../../components/icons"; +import LinearGradient from "react-native-linear-gradient"; +import { _checkLocationPermission } from "../../components/geolocation"; +import { db } from "../../constants/constants"; +import VideoIcon from "../../assets/image/VideoIcon.svg" +import AudioIcon from "../../assets/image/Aud_Icon.svg" + + +const GyancastCard = ({ icon, title, duration, description, props, item }) => { + const date1 = moment(); + const date2 = moment(item?.ExpiryDate, "DD/MM/YYYY"); + + const daysDifference = date2.diff(date1, 'days'); + + let expiredCon = ((item?.Status == "Pending") || (item?.Status == "Progress")) && (daysDifference < 0) + let expiredConCur = ((item?.Status == "Pending") || (item?.Status == "Progress")) && (daysDifference == 0) + + return ( + { + props.navigation.navigate("PodcastDetails", { item: item }); + }} + style={{ + flexDirection: "row", + alignItems: "flex-start", + backgroundColor: expiredCon ? "#ffe6e6" : "#eff9fdff", + borderRadius: 12, + padding: 12, + marginVertical: 8, + marginHorizontal: 8, + shadowColor: "#000", + shadowOpacity: 0.05, + shadowRadius: 4, + shadowOffset: { width: 0, height: 2 }, + elevation: 2, + }} + > + + + { }}> + {item?.MediaType === 'Audio' ? () : ()} + + + + + + + {title} + + {item?.Status == "Complete" && + + + + } + + Publish-{item?.PublishDate} {expiredCon ? "Expired" : "Expiry"} -{item?.ExpiryDate} + + + {description} + + + + ) +}; + +function Gyancasts(props) { + const route = useRoute(); + const ST = props.StaticText || {}; + const route_params = route?.params || {} + const PageTheme = GetPageTheme(props.DarkMode, route.name); + const customStyle = customStyles(props.DarkMode, route.name); + const [Index, setIndex] = useState(0); + const [TrainingOrg, setTrainingOrg] = useState([]); + const [FilterDT, setFilterDT] = useState([]); + const [backPressStatus, setBackPressStatus] = useState(true); + const backPressStatusRef = useRef(true); + const IndexRef = useRef(0); + + useFocusEffect( + useCallback(() => { + getData(); + }, []) + ); + + useFocusEffect( + useCallback(() => { + const onBackPress = () => { + if (!backPressStatusRef.current) { + // ❌ block hardware back + return true; + } + + // ✅ allow back + props.navigation.goBack(); + return true; + }; + + const backHandler = BackHandler.addEventListener( + 'hardwareBackPress', + onBackPress + ); + + return () => { + backHandler.remove(); // ✅ RN 0.81 way + }; + }, []) + ); + + + + + async function getData() { + try { + let List = []; + db.transaction(function (txn) { + let q = `Select TrainingId,Topic,Description,MediaType,TrainingContentId,Thumnail,TrainingUrl,Status,StartTime,PublishDate,ExpiryDate,DefaultLang,TrainingNo from Gyancast_TrainingContent where (DefaultLang="true" or DefaultLang =1 or DefaultLang = true or DefaultLang ='1') order by ExpiryDate`; + console.log("query---", q) + txn.executeSql( + q, + [], + function (txn2, txnres2) { + console.log("txnres2.rows.length:", txnres2.rows.length); + if (txnres2.rows.length > 0) { + for (let i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + List.push(data); + } + console.log("list_ddddd", List) + let d2 = moment().format('DD/MM/YYYY'); + const todayItems = List.filter(item => item?.ExpiryDate === d2); + console.log(todayItems.length, d2); + + if (todayItems !== undefined && todayItems.length > 0 && route_params !== undefined && route_params?.PopupId == 1) { + const allCompletedToday = todayItems.every(item => item?.Status === 'Complete'); + console.log("allCompletedToday", allCompletedToday); + if (allCompletedToday) { + setBackPressStatus(true) + backPressStatusRef.current = true + db.transaction(function (txn) { + // delete all today data + txn.executeSql(`delete from Gyancast_PopupMessage where 1=1`, [], function (txn1, txnres) { + console.log('deleted all data for Gyancast_PopupMessage'); + }, function (Etxn, err) { + console.log('err:', err); + }); + }); + } else { + setBackPressStatus(false) + backPressStatusRef.current = false + } + } + + setTrainingOrg(List); + setFilterDT(List); + filterListData((route_params !== undefined && route_params?.PopupId == 1) ? 1 : IndexRef.current, List); + } + }, + function (txnE, txnerr) { + console.log(txnerr); + } + ); + }); + } catch (err) { + console.log(err); + } + } + + function filterListData(val, List = []) { + let TrainingOrgVal = List.length > 0 ? List : TrainingOrg + console.log("TrainingOrgVal------", typeof (val), val, JSON.stringify(TrainingOrgVal)) + if (val == 1) { + setFilterDT(TrainingOrgVal.filter((itm) => (itm.Status == "Pending") || (itm?.Status == "Progress"))); + } else if (val == 2) { + setFilterDT(TrainingOrgVal.filter((itm) => itm.Status == "Complete")); + } else { + setFilterDT( + TrainingOrgVal.filter( + (item) => + item?.Status === "Pending" && + moment(item?.ExpiryDate, "DD/MM/YYYY").diff(moment(), "days") > 0 && + (item?.StartTime === "00:00:00" || + item?.StartTime === "00:00" || + item?.StartTime === "0") + ) + ); + } + setIndex(val); + IndexRef.current = val + } + + const HeaderTabs = () => { + return ( + + + { + filterListData(0); + }} + > + + {"New"} + + + { + filterListData(1); + }} + > + + {"Pending"} + + + + { + filterListData(2); + }} + > + + {"Completed"} + + + + + ); + }; + + + const hour = moment().hour(); + + return ( + + + { + if (backPressStatus) { + props.navigation.goBack(); + } + }} /> + + + + + + + + {hour < 12 ? 'Good Morning' : hour < 17 ? 'Good Afternoon' : 'Good Evening'}, {props?.UserId} + + + {FilterDT.length <= 0 ? ( + + {ST.NoDataAvailable} + + ) : ( + + item.TrainingContentId?.toString() || index.toString()} + contentContainerStyle={customStyle.iteml_con} + renderItem={({ item }) => ( + + )} + /> + + )} + + + + + ); +} + +export default connect(mapStateToProps, mapDispatchToProps)(Gyancasts); + diff --git a/PerformicsSrc/src/screens/gyancast/PodcastDetails.js b/PerformicsSrc/src/screens/gyancast/PodcastDetails.js new file mode 100644 index 0000000..124cf43 --- /dev/null +++ b/PerformicsSrc/src/screens/gyancast/PodcastDetails.js @@ -0,0 +1,902 @@ + +import { useState, useEffect, useCallback, useRef } from 'react'; +import { useRoute, useFocusEffect } from '@react-navigation/native'; +import { customStyles, GetPageTheme } from "../../styles/Global"; +import { + View, Text, TouchableOpacity, + StyleSheet, + Image, + Modal, + AppState, ScrollView +} from 'react-native'; +import { connect } from 'react-redux'; +import { mapStateToProps, mapDispatchToProps } from '../../reducers/contextProvider'; +import moment from 'moment'; +import { UploadData2 } from '../../controller/functions'; +import { get_item, set_item } from '../../components/localStorage'; +import { db, GyanCastURL } from '../../constants/constants'; +import { AntDesign } from '../../components/icons'; +import LinearGradient from 'react-native-linear-gradient'; +import Video from 'react-native-video'; +import Slider from '@react-native-community/slider' +import CompletionModal from '../../components/CompletionModal' +import { getMethodName, METHODS } from '../../constants/methodNames'; +import SecBack from "../../assets/image/15SecBack.svg" +import PauseIcon2 from "../../assets/image/PauseIcon2.svg" +import SecForward from "../../assets/image/15SecForward.svg" +import LangIcon from "../../assets/image/LangIcon.svg" +import PlaySVG from "../../assets/image/PlaySVG.svg" +import Replay from "../../assets/image/Replay.svg" +import { SvgXml } from 'react-native-svg'; + + +function PodcastDetails(props) { + const route = useRoute(); + const PageTheme = GetPageTheme(props.DarkMode, route.name); + const customStyle = customStyles(props.DarkMode, route.name); + let d2 = moment().format('MM/DD/YYYY'); + + const player = useRef(null); + const [paused, setPaused] = useState(true); + const [currentTime, setCurrentTime] = useState(0); + const [duration, setDuration] = useState(0); + const speeds = [0.5, 1, 1.5, 2]; + const [playbackRate, setPlaybackRate] = useState(1.0); + const [isFinished, setIsFinished] = useState(false); + const [isVideoMode, setIsVideoMode] = useState(false); + const [PlayerObj, setPlayerObj] = useState({}); + const [languageModalVisible, setLanguageModalVisible] = useState(false); + const [selectedLanguage, setSelectedLanguage] = useState(); + const [visible, setVisible] = useState(false); + const [TrainingOrg, setTrainingOrg] = useState([]); + const [LngList, setLngList] = useState([]); + const lastApiTriggerTime = useRef(0); + const lastApiTriggerTimetoLocal = useRef(0); + + const startTime = useRef(0); + const currentTimeRef = useRef(0); + const hasUnsavedChangesRef = useRef(false); + const [sliderValue, setSliderValue] = useState(0); + let params = props.route.params ? props.route.params : {}; + useFocusEffect( + useCallback(() => { + // setLoaderTitle(ST.Loading + '...') + let params = props.route.params ? props.route.params : {}; + let storeData1 = params.storeData || {}; + let PlayerDetail = params.item || {}; + let PlayTime = PlayerDetail?.StartTime && moment.duration(PlayerDetail?.StartTime); + const totalSeconds = PlayTime.asSeconds(); + PlayerDetail["totalSeconds"] = totalSeconds + startTime.current = totalSeconds + console.log("PlayerDetail----", PlayerDetail) + setPlayerObj(PlayerDetail) + setIsVideoMode(PlayerDetail?.MediaType == "Video") + getData(PlayerDetail) + + setTimeout(() => { + if (player?.current && (totalSeconds > 0)) { + player?.current.seek(Number(totalSeconds)); + setSliderValue(totalSeconds); + setCurrentTime(totalSeconds) + //console.log("totalSeconds------iner", totalSeconds) + } + }, 1000); + + }, []) + ); + + + // Placeholder for your API call + const triggerApi = useCallback((val, only_update_local) => { + // Call your API here + console.log("testgg", startTime.current, currentTimeRef.current) + if (params?.item?.Status != "Complete" && (startTime.current <= currentTimeRef.current)) { + submitAnswer(currentTimeRef.current, val, only_update_local) + } + }, [currentTimeRef.current]); + + async function submitAnswer(currentTime, ProgressStatus, only_update_local = false) { + let loginInfo = await get_item('loginInfo'); + const loginDetails = JSON.parse(loginInfo); + let projectInfo = await get_item('projectInfo'); + const projectDetails = JSON.parse(projectInfo); + const { TrainingId } = PlayerObj + const { ProjectCode, projectName } = projectDetails + const { Designation, UserId, EmpId, EmployeeName } = loginDetails + + let Obj = { + // Training:Training_Obj, + TrainingId: params?.item?.TrainingId, + PlayTime: moment.utc(currentTime * 1000).format('HH:mm:ss'), + WatchStatus: ProgressStatus === 'onEnd' ? "Complete" : "Progress", + ProjectCode, + projectName, + UserId, + userName: EmployeeName, + TrainingContentId: params?.item?.TrainingContentId, + EmpId, + Designation, + Question: [] + } + let post_data = { + "MID": "0", + "Keys": "TrainingQuestionnaire", + "JsonData": JSON.stringify(Obj), + "UserId": loginDetails.UserId + } + if (only_update_local) { + console.log("upload_Status", "Update_local") + UpdateQuery(Obj) + } else { + const url = GyanCastURL + getMethodName(METHODS.UPLOAD_JSON_DIRECT); + console.log('GyanCast upload ', url, post_data); + await UploadData2(url, post_data) + .then(async (res) => { + console.log("upload_Status", ProgressStatus + "--" + res) + UpdateQuery(Obj) + if (res?.success == false) { + return + } + }).catch(err => { + console.log('onPage Team error', err); + }); + } + } + + async function DownloadData() { + let loginInfo = await get_item('loginInfo'); + const loginDetails = JSON.parse(loginInfo); + let projectInfo = await get_item('projectInfo'); + let projectDetails = projectInfo != null ? JSON.parse(projectInfo) : {}; + const data1 = { + Downloadtype: "Gyancast_TrainingContent", + Param1: '', + Param2: projectDetails?.ProjectCode, + Username: loginDetails.UserId, + }; + + const url = props.baseurl + getMethodName(METHODS.DOWNLOADJSON_METHOD); + console.log("Downloading from:", url, data1); + await UploadData2(url, data1) + .then(async (res) => { + let jsonObj = res && JSON.parse(res) + console.log(jsonObj); + insertData(jsonObj); + console.log('res of download get', res); + }).catch(err => { + console.log('onPage Team error', err); + }); + } + + const UpdateQuery = async (Obj) => { + let sql_stmnt = `UPDATE Gyancast_TrainingContent SET StartTime='${Obj?.PlayTime}' where (TrainingId='${Obj?.TrainingId}' or TrainingId= ${Obj?.TrainingId}) and (TrainingContentId='${Obj?.TrainingContentId}' or TrainingContentId = ${Obj?.TrainingContentId})`; + db.transaction(function (txn) { + txn.executeSql(sql_stmnt, [], function (txn1, txnres) { + console.log('Gyancast_TrainingContent Updated'); + }, function (txnE, txnerr) { + console.log(txnerr); + }); + }, function (txnE, txnerr) { + console.log(txnerr); + }); + } + + const insertData = async (res) => { + + if (res != null && typeof res == 'object' && res.Gyancast_TrainingContent != null && res.Gyancast_TrainingContent != '') { + let data_arr = res.Gyancast_TrainingContent || []; + var values = []; + data_arr.map((data_obj) => { + let { TrainingId, Topic, Description, MediaType, Mandatory, TrainingContentId, Thumnail, TrainingUrl, Duration, LanguageId, Language, DefaultLang, Status, StartTime, PublishDate, ExpiryDate, TrainingNo } = data_obj; + values.push(` (${TrainingId},'${Topic}','${Description}','${MediaType}',${(Mandatory == "true" || Mandatory == 1 || Mandatory == true || Mandatory == '1') ? 1 : 0},${TrainingContentId},'${Thumnail}','${TrainingUrl}','${Duration}',${LanguageId},'${Language}',${(DefaultLang == "true" || DefaultLang == 1 || DefaultLang == true || DefaultLang == '1') ? 1 : 0},'${Status}','${StartTime}','${PublishDate}','${ExpiryDate}','${TrainingNo}')`); + }); + + var all_vals = values.join(','); + var sql_stmnt = `INSERT INTO Gyancast_TrainingContent(TrainingId, Topic, Description, MediaType, Mandatory, TrainingContentId, Thumnail, TrainingUrl, Duration, LanguageId, Language, DefaultLang, Status, StartTime, PublishDate, ExpiryDate,TrainingNo) values ${all_vals}`; + + db.transaction(function (txn) { + // delete all today data + txn.executeSql(`delete from Gyancast_TrainingContent where 1=1`, [], function (txn1, txnres) { + // insert or refresh all today data + txn.executeSql(sql_stmnt, [], function (txn1, txnres) { + console.log('Gyancast_TrainingContent added'); + + }, function (txnE, txnerr) { + console.log(txnerr); + + }); + }, function (txnE, txnerr) { + console.log(txnerr); + }); + }); + + } + + } + + + const onProgress = (data) => { + setCurrentTime(data.currentTime); + currentTimeRef.current = data.currentTime + hasUnsavedChangesRef.current = true + setSliderValue(data.currentTime); // keep UI in sync + + // 🌐 API call every 2 minutes + if ((data.currentTime - lastApiTriggerTime.current >= 120 || lastApiTriggerTime.current === 0) && (startTime.current <= data.currentTime)) { + triggerApi(PlayerObj?.Status); + console.log("triggerApi", "Server", lastApiTriggerTime.current) + lastApiTriggerTime.current = data.currentTime; + } + + // 🔁 Local update every 30 seconds + if ((data.currentTime - lastApiTriggerTimetoLocal.current >= 30 || lastApiTriggerTimetoLocal.current === 0) && (startTime.current <= data.currentTime)) { + triggerApi(PlayerObj?.Status, true); + lastApiTriggerTimetoLocal.current = data.currentTime; + console.log("triggerApi", "Local", lastApiTriggerTimetoLocal.current, data.currentTime) + } + + } + const onLoad = (data) => { + setDuration(data.duration) + }; + + const skipForward = () => { + //player.current.seek(currentTime + 45); + }; + + const skipBackward = () => { + player.current.seek(currentTime - 15); + }; + + const setPausedWithUpdate = () => { + const willPause = !paused; + setPaused(willPause); + if (isFinished) { + console.log("isFinished-----", isFinished) + // Reset everything + setIsFinished(false); + player.current?.seek(0); // 👈 SEEK the player to 0 + setCurrentTime(0); + setSliderValue(0); // 👈 reset slider + currentTimeRef.current = 0; + lastApiTriggerTime.current = 0; + lastApiTriggerTimetoLocal.current =0; + + setTimeout(() => { + setPaused(false); // Auto-resume + }, 200); // short delay to allow seek to apply + } + }; + + + const toggleSpeed = () => { + const next = speeds[(speeds.indexOf(playbackRate) + 1) % speeds.length]; + setPlaybackRate(next); + }; + + const formatTime = (seconds) => { + const mins = Math.floor(seconds / 60); + const secs = Math.floor(seconds % 60); + return `${mins}:${secs < 10 ? '0' : ''}${secs}`; + }; + + useEffect(() => { + const AppStateSubscription = AppState.addEventListener('change', (pro) => { _handleAppStateChange(pro) }); + const unsubscribe = props.navigation.addListener('beforeRemove', onBeforeRemove); + return function cleanup() { + AppStateSubscription.remove(); + return unsubscribe + }; + }, []); + const onBeforeRemove = async () => { + if (hasUnsavedChangesRef.current == true) { + let Obj = { + TrainingId: params?.item?.TrainingId, + PlayTime: moment.utc(currentTimeRef.current * 1000).format('HH:mm:ss'), + TrainingContentId: params?.item?.TrainingContentId, + } + UpdateQuery(Obj) + } + } + + const _handleAppStateChange = async (nextAppState) => { + if (nextAppState == 'background' && hasUnsavedChangesRef.current == true) { + let Obj = { + TrainingId: params?.item?.TrainingId, + PlayTime: moment.utc(currentTimeRef.current * 1000).format('HH:mm:ss'), + TrainingContentId: params?.item?.TrainingContentId, + } + UpdateQuery(Obj) + } + if (nextAppState !== "active") { + // App goes inactive (call, minimize, lock screen etc.) + setPaused(true); + } + } + + + async function getData(PlayerDetail) { + try { + let List = [], LST = []; + let lngDt = await get_item('GyanCastLng'); + + let jsonDT = lngDt && JSON.parse(lngDt) + + if (jsonDT) { + setSelectedLanguage(jsonDT) + LangContent(jsonDT, PlayerDetail) + } + await db.transaction(async function (txn) { + let q = `Select DISTINCT QuestionId,Question,QuestionType from Gyancast_TrainingContentQuestion where (TrainingId='${PlayerDetail?.TrainingId}' or TrainingId= ${PlayerDetail?.TrainingId})`; + let q2 = `Select DISTINCT LanguageId, Language from Gyancast_TrainingContent where (TrainingId='${PlayerDetail?.TrainingId}' or TrainingId= ${PlayerDetail?.TrainingId})`; + + await txn.executeSql( + q, + [], + async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + for (let i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + List.push(data); + } + setTrainingOrg(List); + } + }, + function (txnE, txnerr) { + console.log(txnerr); + } + ); + + await txn.executeSql( + q2, + [], + async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + for (let i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + LST.push(data); + } + setLngList(LST); + } + }, + function (txnE, txnerr) { + console.log(txnerr); + } + ); + }); + } catch (err) { + console.log(err); + } + } + + const setLocalLang = async (selectedLanguage) => { + await set_item('GyanCastLng', JSON.stringify(selectedLanguage)); + } + + async function LangContent(selectedLanguage, PlayerDetail = {}) { + try { + let List = []; + await db.transaction(async function (txn) { + let q = `Select TrainingId,Topic,Description,MediaType,TrainingContentId,Thumnail,TrainingUrl,Status,StartTime,PublishDate,ExpiryDate,DefaultLang,TrainingNo from Gyancast_TrainingContent where (TrainingId='${PlayerDetail?.TrainingId}' or TrainingId= ${PlayerDetail?.TrainingId}) and (LanguageId='${selectedLanguage}' or LanguageId= ${selectedLanguage})`; + await txn.executeSql( + q, + [], + async function (txn2, txnres2) { + if (txnres2.rows.length > 0) { + for (let i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + setPlayerObj(data) + } + } + }, + function (txnE, txnerr) { + console.log(txnerr); + } + ); + }); + } catch (err) { + console.log(err); + } + } + + function _rendarLanModal() { + return ( + + + + + + Choose Your Language + + Note: After selecting a language, the podcast will start from the beginning. + + + + Select the language you prefer to listen to this podcast in. + + + + {LngList.map((lang) => ( + { + setSelectedLanguage(lang.LanguageId) + LangContent(lang.LanguageId, PlayerObj) + setLocalLang(lang.LanguageId) + }} + style={[ + styles.languageButton, + selectedLanguage == lang.LanguageId && styles.selectedLanguage, + // styles.disabledLanguage, + ]} + > + + {lang.Language} + + + ))} + + { + setPaused(false); + player.current.seek(0); // restart + setLanguageModalVisible(false); + }} + style={styles.continueButton} + > + Continue + + + setLanguageModalVisible(false)}> + Cancel + + + + + ); + } + + const goBack = () => { + props.navigation.goBack(); + } + + + return ( + + + + + { props.onPress != null ? props.onPress() : goBack() }}> + + + + PLAYING FROM GYANCAST + {PlayerObj?.Topic} + Gyancast ID : {PlayerObj?.TrainingNo} + + + + {!isVideoMode && ( + + )} + + + {/* Audio player */} + {/* {console.log("plyar------", PlayerObj)} */} + + + + + + {_rendarLanModal()} + setVisible(false)} + correct={4} + wrong={0} + total={4} + /> + + ); +} + + + +export default connect(mapStateToProps, mapDispatchToProps)(PodcastDetails); + +const styles = StyleSheet.create({ + + subtitle: { + fontSize: 14, + textAlign: 'center', + color: '#555', + marginBottom: 10, + }, + divider: { + height: 1, + backgroundColor: '#e0e0e0', + marginVertical: 15, + width: '100%', + }, + mainHeading: { + fontSize: 24, + fontWeight: 'bold', + textAlign: 'center', + color: '#000', + marginBottom: 5, + }, + subHeading: { + fontSize: 16, + textAlign: 'center', + color: '#555', + marginBottom: 15, + }, + episodeTitle: { + fontSize: 22, + fontWeight: '700', + // textAlign: 'center', + marginBottom: 10, + paddingHorizontal: 20, + color: '#000' + }, + episodeDescription: { + fontSize: 14, + color: '#555', + marginBottom: 8, + // marginBottom: "15%", + overflow: "hidden", + paddingHorizontal: 20, + }, + bulletContainer: { + marginBottom: 20, + paddingHorizontal: 20, + }, + bulletItem: { + flexDirection: 'row', + alignItems: 'center', + marginBottom: 10, + }, + bulletCheckbox: { + width: 18, + height: 18, + borderWidth: 1, + borderColor: '#000', + borderRadius: 3, + marginRight: 10, + }, + bulletText: { + fontSize: 14, + color: '#000', + }, + timeAndControlsRow: { + flexDirection: 'row', + justifyContent: 'space-between', + alignItems: 'center', + // marginVertical: 15, + paddingHorizontal: 6, + }, + container2: { + flex: 1, + backgroundColor: '#e6f0fa', + paddingTop: 40, + paddingHorizontal: 0, + }, + + container: { + flex: 1, + padding: 10, + backgroundColor: '#fff', + }, + header: { + color: '#555', + fontSize: 12, + textAlign: 'center', + }, + title: { + fontSize: 18, + fontWeight: '600', + textAlign: 'center', + marginVertical: 5, + marginBottom: 3, + color: '#000' + }, + image: { + width: 200, + height: 200, + alignSelf: 'center', + borderRadius: 12, + marginBottom: 20, + }, + video: { + width: '100%', + height: '100%', + borderRadius: 10, + height: 250 + }, + slider: { + width: '100%', + height: 40, + }, + timeRow: { + flexDirection: 'row', + justifyContent: 'space-between', + margin: 5 + }, + timeText: { + fontSize: 12, + color: '#444', + }, + controls: { + flexDirection: 'row', + justifyContent: 'space-around', + marginVertical: 20, + alignItems: 'center', + }, + speedButton: { + fontSize: 25, + fontWeight: '500', + padding: 8, + color: '#000', + borderRadius: 8, + marginHorizontal: 10, + }, + card: { + backgroundColor: '#f1f1f1', + borderRadius: 12, + padding: 15, + }, + cardTitle: { + fontWeight: 'bold', + fontSize: 16, + marginBottom: 8, + color: '#000' + }, + cardText: { + fontSize: 14, + color: '#000', + }, + endButtonsContainer: { + flexDirection: 'row', + justifyContent: 'space-around', + marginTop: 20, + }, + + replayBtn: { + flexDirection: 'row', + alignItems: 'center', + paddingHorizontal: 20, + paddingVertical: 10, + borderWidth: 1, + borderColor: '#007aff', + borderRadius: 20, + marginBottom: 25, + backgroundColor: '#fff', + }, + + replayText: { + color: '#007aff', + marginLeft: 6, + fontWeight: '500', + }, + + continueBtn: { + paddingHorizontal: 25, + paddingVertical: 10, + backgroundColor: '#007aff', + marginBottom: 25, + borderRadius: 20, + }, + videoContainer: { + position: 'relative', + width: '100%', + height: 250, + backgroundColor: 'black', + borderRadius: 10, + overflow: 'hidden', + }, + audioContainer: { + // position: 'relative', + width: '100%', + // height: 50, + backgroundColor: 'white', + borderRadius: 10, + // overflow: 'hidden', + }, + audio: { + width: '100%', + height: '10%', + backgroundColor: '#fff' + }, + sliderOverlay: { + // position: 'absolute', + // bottom: 10, + // left: 10, + // right: 10, + }, + modalBackground: { + flex: 1, + justifyContent: 'center', + alignItems: 'center', + backgroundColor: 'rgba(0,0,0,0.4)', + }, + modalContainer: { + backgroundColor: '#fff', + // justifyContent:"center", + // alignItems: "center", + width: '80%', + borderRadius: 10, + padding: 20, + }, + modalTitle: { + fontWeight: 'bold', + fontSize: 18, + marginBottom: 10, + textAlign: "center" + }, + modalNote: { + fontSize: 12, + textAlign: "center", + marginBottom: 15, + color: '#666', + }, + languageButton: { + padding: 10, + borderWidth: 1, + borderColor: '#ccc', + borderRadius: 8, + marginVertical: 5, + }, + selectedLanguage: { + borderColor: '#007bff', + backgroundColor: '#e6f0ff', + }, + disabledLanguage: { + backgroundColor: '#f1f1f1', + }, + continueButton: { + backgroundColor: '#007bff', + padding: 12, + borderRadius: 8, + marginTop: 10, + }, + continueText: { + color: '#fff', + textAlign: 'center', + fontWeight: '600', + }, + +}); \ No newline at end of file diff --git a/PerformicsSrc/src/screens/gyancast/QuestionnaireScreen.js b/PerformicsSrc/src/screens/gyancast/QuestionnaireScreen.js new file mode 100644 index 0000000..0b42395 --- /dev/null +++ b/PerformicsSrc/src/screens/gyancast/QuestionnaireScreen.js @@ -0,0 +1,579 @@ +import React, { useState, useEffect, useRef, useCallback } from 'react'; +import { View, Text, TouchableOpacity, StyleSheet, Image, BackHandler, Alert } from 'react-native'; +import { mapDispatchToProps, mapStateToProps } from '../../reducers/contextProvider'; +import { connect } from 'react-redux'; +import { customStyles, GetPageTheme, globalStyles } from '../../styles/Global'; +import { useFocusEffect, useRoute } from '@react-navigation/native'; +import { AntDesign } from '../../components/icons'; +import Mic from '../../assets/image/MICWithCircle.svg'; + +import { db, GyanCastURL } from '../../constants/constants'; +import { notify } from '../../components/notify'; +import CustomLoader from '../../components/CustomLoader'; +import { getMethodName, METHODS } from '../../constants/methodNames'; +import { get_item, set_item } from '../../components/localStorage'; +import moment from 'moment'; +import { getDownloadJson1, UploadData2 } from '../../controller/functions'; +import CompletionModal from '../../components/CompletionModal'; + +const QUESTION = { + question: "What does a 'planogram' help with in merchandising?", + options: [ + 'Managing attendance of merchandisers', + 'Arranging products on the shelf as per brand guidelines', + 'Placing posters inside the store', + 'Counting stock in the warehouse', + ], + correct: 1, +}; + +const QuestionnaireScreen = (props) => { + const [selected, setSelected] = useState(null); + const [Wrong, setWrong] = useState(false); + const [RightAns, setRight] = useState(false); + const [SelectedObj, setSelectedObj] = useState({}); + const [timer, setTimer] = useState(60); // 1:13 in seconds + const route = useRoute(); + const PageTheme = GetPageTheme(props.DarkTheme, route.name); + const globalStyle = globalStyles(props.DarkMode, route.name); + const customStyle = customStyles(props.DarkMode, route.name); + const [PlayerObj, setPlayerObj] = useState({}); + const [TrainingOrg, setTrainingOrg] = useState([]); + const [Step, setNextStep] = useState(0); + const [processing, setProcessing] = useState(false); + const [visible, setVisible] = useState(false); + const [result, setResult] = useState({}); + let params = props.route.params ? props.route.params : {}; + const backPressStatusRef = useRef(false); + + + useEffect(() => { + let params = props.route.params ? props.route.params : {}; + let PlayerDetail = params.PlayerObj || {}; + let PlayTime = params.PlayTime || {}; + setPlayerObj(PlayerDetail); + getData(PlayerDetail); + }, []) + + ///prevent hardware backhandler + useFocusEffect( + useCallback(() => { + const onBackPress = () => { + if (!backPressStatusRef.current) { + // ❌ block hardware back + return true; + } + // ✅ allow back + props.navigation.goBack(); + return true; + }; + + const backHandler = BackHandler.addEventListener( + 'hardwareBackPress', + onBackPress + ); + + return () => { + backHandler.remove(); // ✅ RN 0.81 way + }; + }, []) + ); + + async function getData(PlayerDetail) { + try { + let List = []; + await db.transaction(async function (txn) { + let q = `Select DISTINCT QuestionId,Question,QuestionType from Gyancast_TrainingContentQuestion where (TrainingId='${PlayerDetail?.TrainingId}' or TrainingId= ${PlayerDetail?.TrainingId})`; + await txn.executeSql( + q, + [], + async function (txn2, txnres2) { + console.log("txnres2.rows.length:", txnres2.rows.length); + if (txnres2.rows.length > 0) { + for (let i = 0; i < txnres2.rows.length; i++) { + let data = txnres2.rows.item(i); + let Answers = await getAnswers(data) + data.options = Answers?.["Answers"] || [] + List.push(data); + } + setTrainingOrg(List); + } + }, + function (txnE, txnerr) { + console.log(txnerr); + } + ); + }); + } catch (err) { + console.log(err); + } + } + + async function getAnswers(qtn) { + return new Promise((resolve, reject) => { + db.transaction(async function (txn) { + // get inserted audit + let selectlist = ` DISTINCT T.Answer,T.AnswerId,T.RightAnswer`; + let q2 = `Select ${selectlist} FROM Gyancast_TrainingContentQuestion T WHERE (T.QuestionId='${qtn.QuestionId}' or T.QuestionId=${qtn.QuestionId}) `; + await txn.executeSql(q2, [], async function (txn2, txnres) { + console.log('answers len', txnres.rows.length); + if (txnres.rows.length > 0) { + let arr = []; + for (var i = 0; i < txnres.rows.length; i++) { + let data = txnres.rows.item(i); + arr.push(data); + if (i == txnres.rows.length - 1) { + resolve(arr); + } + } + } + else { + resolve([]); + } + }, function (txnE, txnerr) { console.log(txnerr); resolve([]); },); + + }); + }).then((val) => { + return { 'Answers': val, 'Success': true }; + }).catch((err) => { + console.log(err); + return { 'Success': false, 'Error': err } + }); + } + + useEffect(() => { + if (timer > 0) { + const interval = setInterval(() => setTimer(t => t - 1), 1000); + return () => clearInterval(interval); + } + }, [timer]); + + const formatTime = (sec) => { + const m = Math.floor(sec / 60).toString().padStart(2, '0'); + const s = Math.floor(sec % 60).toString().padStart(2, '0'); + return `${m}:${s}`; + }; + + const goBack = () => { + // props.navigation.goBack(); + } + + function Submit() { + if (selected === null || selected === undefined) { + notify("Please select your answer", 'SHORT'); + return; + } + const updatedQuestions = [...TrainingOrg]; + const currentQuestion = { ...updatedQuestions[Step], selected: SelectedObj }; + updatedQuestions[Step] = currentQuestion; + if (Step === TrainingOrg.length - 1) { + submitAnswer(updatedQuestions); + } else { + console.log("SelectedObj----", SelectedObj, SelectedObj?.RightAnswer) + if (SelectedObj?.RightAnswer == "false" || SelectedObj?.RightAnswer == false || !SelectedObj?.RightAnswer || SelectedObj?.RightAnswer == 0 || SelectedObj?.RightAnswer == '0') { + console.log("SelectedObj----11", SelectedObj) + setWrong(true) + } else if (SelectedObj?.RightAnswer == "true" || SelectedObj?.RightAnswer == true || SelectedObj?.RightAnswer == 1 || SelectedObj?.RightAnswer == '1') { + setRight(true) + } + setSelectedObj((prev) => prev); + setTrainingOrg(updatedQuestions); + setTimeout(() => { + setTimer(60); + setNextStep(Step + 1); + setSelected(null); + setSelectedObj({}); + setWrong(null) + setRight(false) + setWrong(false) + }, 1000) + } + } + + async function submitAnswer(OrgObj) { + setProcessing(true); + let loginInfo = await get_item('loginInfo'); + const loginDetails = JSON.parse(loginInfo); + let projectInfo = await get_item('projectInfo'); + const projectDetails = JSON.parse(projectInfo); + const { TrainingId, TrainingContentId } = PlayerObj + const { ProjectCode, projectName } = projectDetails + const { Designation, UserId, EmpId, EmployeeName } = loginDetails + console.log("loginDetails", loginDetails) + + var user_answers = []; + for (const item of OrgObj) { + const { QuestionId, selected } = item; + const { AnswerId, Answer, RightAnswer } = selected + var ans_obj = { + TrainingId, + ProjectCode, + // projectName, + QuestionId, + Answer, + AnswerId, + RightAnswer: (RightAnswer == "true" || RightAnswer == true || RightAnswer == 1 || RightAnswer == '1') ? 1 : 0, + TrainingContentId, + UserId, + // userName:EmployeeName, + EmpId, + // Designation + } + console.log("ans_obj---", ans_obj) + user_answers.push(ans_obj); + } + + var Training_Obj = { + TrainingId, + PlayTime: moment.utc(params?.PlayTime * 1000).format('HH:mm:ss'), + WatchStatus: "Complete", + ProjectCode, + projectName, + UserId, + TrainingContentId, + userName: EmployeeName, + EmpId, + Designation + } + let Obj = { + // Training:Training_Obj, + TrainingId, + PlayTime: moment.utc(params?.PlayTime * 1000).format('HH:mm:ss'), + WatchStatus: "Complete", + ProjectCode, + projectName, + UserId, + TrainingContentId, + userName: EmployeeName, + EmpId, + Designation, + Question: user_answers + } + + let post_data = { + "MID": "0", + "Keys": "TrainingQuestionnaire", + "JsonData": JSON.stringify(Obj), + "UserId": loginDetails.UserId + } + + const url = GyanCastURL + getMethodName(METHODS.UPLOAD_JSON_DIRECT); + console.log('OQAD upload ', url, post_data); + await UploadData2(url, post_data) + .then(async (res) => { + setProcessing(false); + console.log(res); + if (res?.success == false) { + return + } + const correctCount = OrgObj?.reduce((count, question) => { + return (question?.selected?.RightAnswer === "true" || question?.selected?.RightAnswer == true || question?.selected?.RightAnswer == 1 || question?.selected?.RightAnswer == '1') ? count + 1 : count; + }, 0); + + setResult({ correct: correctCount, wrong: TrainingOrg?.length - correctCount }) + setVisible(true) + DownloadData(); + }) + .catch(err => { + console.log('onPage Team error', err); + }); + + } + + + async function DownloadData() { + let loginInfo = await get_item('loginInfo'); + const loginDetails = JSON.parse(loginInfo); + let projectInfo = await get_item('projectInfo'); + let projectDetails = projectInfo != null ? JSON.parse(projectInfo) : {}; + const data1 = { + Downloadtype: "Gyancast_TrainingContent", + Param1: '', + Param2: projectDetails?.ProjectCode, + Username: loginDetails.UserId, + }; + + + const url = props.baseurl + getMethodName(METHODS.DOWNLOADJSON_METHOD); + console.log("Downloading from:", url, data1); + await UploadData2(url, data1) + .then(async (res) => { + let jsonObj = res && JSON.parse(res) + console.log(jsonObj); + insertData(jsonObj); + console.log('res of download get', res); + }) + .catch(err => { + console.log('onPage Team error', err); + }); + + } + + const insertData = async (res) => { + if (res != null && typeof res == 'object' && res.Gyancast_TrainingContent != null && res.Gyancast_TrainingContent != '') { + let data_arr = res.Gyancast_TrainingContent || []; + var values = []; + data_arr.map((data_obj) => { + let { TrainingId, Topic, Description, MediaType, Mandatory, TrainingContentId, Thumnail, TrainingUrl, Duration, LanguageId, Language, DefaultLang, Status, StartTime, PublishDate, ExpiryDate, TrainingNo } = data_obj; + console.log("json_insert_data", data_obj) + values.push(` (${TrainingId},'${Topic}','${Description}','${MediaType}',${(Mandatory == true || Mandatory == "true" || Mandatory == 1 || Mandatory == '1') ? 1 : 0},${TrainingContentId},'${Thumnail}','${TrainingUrl}','${Duration}',${LanguageId},'${Language}',${(DefaultLang == "true" || DefaultLang == 1 || DefaultLang == true || DefaultLang == '1') ? 1 : 0},'${Status}','${StartTime}','${PublishDate}','${ExpiryDate}','${TrainingNo}')`); + }); + var all_vals = values.join(','); + var sql_stmnt = `INSERT INTO Gyancast_TrainingContent(TrainingId, Topic, Description, MediaType, Mandatory, TrainingContentId, Thumnail, TrainingUrl, Duration, LanguageId, Language, DefaultLang, Status, StartTime, PublishDate, ExpiryDate,TrainingNo) values ${all_vals}`; + db.transaction(function (txn) { + // delete all today data + txn.executeSql(`delete from Gyancast_TrainingContent where 1=1`, [], function (txn1, txnres) { + // insert or refresh all today data + txn.executeSql(sql_stmnt, [], function (txn1, txnres) { + console.log('Gyancast_TrainingContent added'); + setGyanCast() + }, function (txnE, txnerr) { + console.log(txnerr); + + }); + }, function (txnE, txnerr) { + console.log(txnerr); + }); + }); + + } + + } + + const setGyanCast = async () => { + let d2 = moment().format('MM/DD/YYYY'); + let newData = { + Show: true, + visiteDate: d2 + } + let WindowsStr = JSON.stringify(newData) + console.log("GyanCast-----", WindowsStr) + await set_item('GyanCast', WindowsStr); + + } + + + return ( + + {processing && } + + { props.onPress != null ? props.onPress() : goBack() }}> + + + Questionnaire + + {/* Progress bar and timer */} + + + 0 ? (((Step / (TrainingOrg?.length - 1)) * 100) + '%') : '100%') }]} /> + 0 ? (((Step / (TrainingOrg?.length - 1)) * 100) + '%') : '100%') }]} /> + + {Step + 1}/{TrainingOrg?.length} + {formatTime(timer)} + + {/* Question card */} + + + + + + + + + {(Step + 1) + ". " + TrainingOrg?.[Step]?.Question} + + + {/* Options */} + {TrainingOrg?.[Step]?.options?.map((opt, idx) => ( + { setSelected(idx); setSelectedObj(opt); }} + activeOpacity={0.8} + > + + {String.fromCharCode(97 + idx)}) {opt?.Answer} + + + ))} + + {/* Submit button */} + + {TrainingOrg?.length - 1 == Step ? 'Submit' : 'Next'} + + { setVisible(false); props.navigation.reset({ index: 1, routes: [{ name: 'NoticeBoard' }, { name: 'Gyancasts', params: { fromReset: true } }] }) }} + correct={result?.correct || 0} + wrong={result?.wrong || 0} + PlayerObj={PlayerObj} + total={TrainingOrg?.length} + /> + + ); +}; + +const styles = StyleSheet.create({ + container: { + flex: 1, + backgroundColor: '#e6f0fa', + paddingTop: 40, + paddingHorizontal: 0, + }, + header: { + flexDirection: 'row', + alignItems: 'center', + marginBottom: 10, + }, + headerIcon: { + position: 'absolute', + left: 20, + fontSize: 24, + top: 0, + }, + headerTitle: { + fontSize: 22, + fontWeight: 'bold', + color: '#222', + marginVertical: 10, + marginLeft: "22%" + }, + progressRow: { + flexDirection: 'row', + alignItems: 'center', + marginBottom: 10, + paddingHorizontal: 20, + }, + progressBarBg: { + flex: 1, + height: 8, + backgroundColor: '#c7d7e6', + borderRadius: 8, + marginRight: 10, + position: 'relative', + justifyContent: 'center', + }, + progressBarFill: { + position: 'absolute', + left: 0, + top: 0, + height: 8, + width: '50%', + backgroundColor: '#3498db', + borderRadius: 8, + }, + progressBarDot: { + position: 'absolute', + left: '50%', + top: -4, + width: 16, + height: 16, + borderRadius: 8, + backgroundColor: '#3498db', + borderWidth: 2, + borderColor: '#e6f0fa', + zIndex: 2, + }, + progressText: { + marginLeft: 10, + fontSize: 16, + color: '#222', + fontWeight: 'bold', + }, + timerText: { + marginLeft: 16, + fontSize: 16, + color: '#3498db', + fontWeight: 'bold', + }, + card: { + backgroundColor: '#fff', + borderRadius: 12, + margin: 16, + padding: 16, + shadowColor: '#000', + shadowOpacity: 0.05, + shadowRadius: 4, + shadowOffset: { width: 0, height: 2 }, + elevation: 2, + }, + cardHeader: { + flexDirection: 'row', + alignItems: 'center', + marginBottom: 16, + }, + cardIconWrap: { + width: 40, + height: 40, + borderRadius: 20, + backgroundColor: '#e6f0fa', + alignItems: 'center', + justifyContent: 'center', + marginRight: 12, + }, + cardQuestion: { + flex: 1, + fontSize: 17, + color: '#222', + fontWeight: '500', + }, + option: { + borderWidth: 1, + borderColor: '#c7d7e6', + borderRadius: 10, + padding: 14, + marginBottom: 10, + backgroundColor: '#f6fafd', + }, + optionSelected: { + borderColor: '#3498db', + backgroundColor: '#e6f0fa', + }, + wrongSelected: { + borderColor: '#ff4d4d', + backgroundColor: '#e6f0fa', + }, + rightSelected: { + borderColor: '#70db70', + backgroundColor: '#e6f0fa', + }, + optionText: { + fontSize: 16, + color: '#222', + }, + optionTextSelected: { + color: '#3498db', + fontWeight: 'bold', + }, + wrongTextSelected: { + color: '#ff4d4d', + fontWeight: 'bold', + }, + rightTextSelected: { + color: '#70db70', + fontWeight: 'bold', + }, + submitBtn: { + position: 'absolute', + left: 16, + right: 16, + bottom: 30, + backgroundColor: '#1793d1', + borderRadius: 14, + alignItems: 'center', + paddingVertical: 14, + shadowColor: '#1793d1', + shadowOpacity: 0.15, + shadowRadius: 4, + shadowOffset: { width: 0, height: 2 }, + elevation: 2, + }, + submitBtnText: { + color: '#fff', + fontSize: 18, + fontWeight: 'bold', + }, +}); + +export default connect(mapStateToProps, mapDispatchToProps)(QuestionnaireScreen); \ No newline at end of file diff --git a/PerformicsSrc/src/screens/maps_navigation/NavigationRouteScreen.js b/PerformicsSrc/src/screens/maps_navigation/NavigationRouteScreen.js new file mode 100644 index 0000000..83eccbe --- /dev/null +++ b/PerformicsSrc/src/screens/maps_navigation/NavigationRouteScreen.js @@ -0,0 +1,197 @@ +import React, { useEffect, useState } from "react"; +import { View, Text, StyleSheet, PermissionsAndroid, Platform, ActivityIndicator, TouchableOpacity } from "react-native"; +import Geolocation from "react-native-geolocation-service"; +import { useNavigation } from "@react-navigation/native"; +import AsyncStorage from "@react-native-async-storage/async-storage"; +import { OLA_MAP_KEY } from "../../constants/constants"; // 🔑 your Ola Maps key +import { getLocationWithFallback, requestLocationPermission } from "../../controller/functions"; + +const NavigationRouteScreen = (props) => { + const navigation = useNavigation(); + // Initialize storeData from route params + const params = props.route.params || {}; + const [storeData] = useState(params.storeData || {}); + const [routeData, setRouteData] = useState(null); + const [loading, setLoading] = useState(true); + const [error, setError] = useState(null); + const [statusMessage, setStatusMessage] = useState("Fetching location..."); + // ✅ Fetch cached route data + const getCachedRoute = async (key) => { + try { + const cached = await AsyncStorage.getItem(key); + if (cached) { + console.log("Using cached route data"); + return JSON.parse(cached); + } + return null; + } catch (err) { + console.warn("Error reading cache:", err); + return null; + } + }; + + // ✅ Save route data to cache + const cacheRoute = async (key, data) => { + try { + await AsyncStorage.setItem(key, JSON.stringify(data)); + console.log("Route data cached"); + } catch (err) { + console.warn("Error caching route:", err); + } + }; + + // ✅ Fetch current location + route with retry and timeout + const fetchRoute = async (retryCount = 0, maxRetries = 2) => { + setLoading(true); + setStatusMessage("Fetching location..."); + try { + const hasPermission = await requestLocationPermission(); + if (!hasPermission) { + setError("Location permission denied"); + setLoading(false); + return; + } + // Timeout for geolocation and API + const timeoutPromise = new Promise((_, reject) => { + setTimeout(() => reject(new Error("Operation timed out")), 20000); // 20 seconds timeout + }); + // 📍 Get current location + let getLocation = await getLocationWithFallback(); + + const { latitude, longitude } = await Promise.race([getLocation, timeoutPromise]); + setStatusMessage("Fetching route from server..."); + // Destination coordinates from storeData + const destinationLat = parseFloat(storeData.Latitude) || 28.5620719; + const destinationLng = parseFloat(storeData.Longitude) || 77.4449157; + // Check cache + const cacheKey = `route_${latitude}_${longitude}_${destinationLat}_${destinationLng}`; + const cachedRoute = await getCachedRoute(cacheKey); + if (cachedRoute) { + setRouteData(cachedRoute); + navigation.replace("NavigationScreen", { routeData: cachedRoute }); // navigate safely + setLoading(false); + return; + } + + // 🌐 Ola Maps API Call + //const url = `https://api.olamaps.io/routing/v1/directions?origin=${latitude},${longitude}&destination=${destinationLat},${destinationLng}&mode=driving&api_key=${OLA_MAP_KEY}`; + + const url = `https://api.olamaps.io/routing/v1/routeOptimizer?locations=${latitude},${longitude}|${destinationLat},${destinationLng}&mode=driving&api_key=${OLA_MAP_KEY}`; + console.log("url", url) + const fetchRouteData = async () => { + const response = await fetch(url, { + method: "POST", + redirect: "follow", + // headers: { + // // "X-Request-Id": Date.now().toString(), + // "Content-Type": "application/json", + // }, + }); + + if (!response.ok) { + throw new Error(`HTTP error! status: ${response.status}`); + } + + return await response.json(); + }; + + const data = await Promise.race([fetchRouteData(), timeoutPromise]); + // Cache the route data + await cacheRoute(cacheKey, data); + setRouteData(data); + navigation.replace("NavigationScreen", { routeData: data }); // navigate safely + setLoading(false); + } catch (err) { + console.error("❌ Error fetching route:", err); + if (retryCount < maxRetries && err.message !== "Location permission denied") { + console.log(`Retrying... Attempt ${retryCount + 1}/${maxRetries}`); + setTimeout(() => fetchRoute(retryCount + 1), 2000); + } else { + setError(err.message || "Unable to fetch route"); + setLoading(false); + } + } + }; + + // ✅ Trigger route fetch on mount + useEffect(() => { + fetchRoute(); + return () => { + Geolocation.stopObserving(); + }; + }, []); + + return ( + + {loading && ( + + + {statusMessage} + + + )} + + {error && ( + + {error} + { + setError(null); + setLoading(true); + fetchRoute(); + }} + > + Try Again + + + )} + + ); +}; + +const styles = StyleSheet.create({ + container: { + flex: 1, + backgroundColor: "#F5F7FA", + justifyContent: "center", + alignItems: "center", + padding: 16, + }, + statusBox: { + padding: 20, + borderRadius: 12, + backgroundColor: "#E3F2FD", + alignItems: "center", + }, + statusText: { + marginTop: 10, + fontSize: 16, + color: "#1976D2", + fontWeight: "500", + textAlign: "center", + }, + errorBox: { + backgroundColor: "#FFEBEE", + }, + errorText: { + fontSize: 16, + color: "#D32F2F", + fontWeight: "600", + textAlign: "center", + }, + retryButton: { + marginTop: 10, + backgroundColor: "#1976D2", + paddingVertical: 8, + paddingHorizontal: 16, + borderRadius: 8, + }, + retryButtonText: { + color: "#fff", + fontSize: 14, + fontWeight: "600", + }, +}); + +export default NavigationRouteScreen; diff --git a/PerformicsSrc/src/screens/maps_navigation/NavigationScreen.js b/PerformicsSrc/src/screens/maps_navigation/NavigationScreen.js new file mode 100644 index 0000000..7a39ec2 --- /dev/null +++ b/PerformicsSrc/src/screens/maps_navigation/NavigationScreen.js @@ -0,0 +1,933 @@ + +import React, { useEffect, useState, useRef, useMemo } from 'react'; +import { View, Text, StyleSheet, FlatList, Dimensions, TouchableOpacity, ActivityIndicator, Platform, Animated, Easing, unstable_batchedUpdates, InteractionManager } from 'react-native'; +import MapView, { Polyline, Marker, AnimatedRegion } from 'react-native-maps'; +import polyline from '@mapbox/polyline'; +import Tts from 'react-native-tts'; +import { useFocusEffect, useRoute } from '@react-navigation/native'; +import Geolocation from 'react-native-geolocation-service'; +import Icon from 'react-native-vector-icons/MaterialIcons'; +import Container from '../../components/container'; +import { Props } from 'react-native-image-zoom-viewer/built/image-viewer.type'; +import { BackHandler, Alert } from 'react-native'; +import Aviatoricon from '../../assets/image/aviatoricon.svg'; +import { OLA_MAP_KEY } from '../../constants/constants'; +import { requestLocationPermission } from '../../controller/functions'; +import { notify } from '../../components/notify'; +const { width, height } = Dimensions.get('window'); + +const NavigationScreen = (props) => { + const route = useRoute(); + const { routeData: paramRouteData } = route.params ?? {}; + const [routeData, setRouteData] = useState(() => paramRouteData); + const data = routeData; + + const mapRef = useRef(null); + const [routeCoordinates, setRouteCoordinates] = useState([]); + const [instructions, setInstructions] = useState([]); + const [isSpeaking, setIsSpeaking] = useState(false); + const [isLoading, setIsLoading] = useState(false); + const [error, setError] = useState(null); + const [currentStepIndex, setCurrentStepIndex] = useState(0); + const [nextInstruction, setNextInstruction] = useState({ text: '', distance: '', icon: '' }); + const [destinationInfo, setDestinationInfo] = useState({ name: '', distance: '', time: '' }); + const [currentToDestinationCoords, setCurrentToDestinationCoords] = useState([]); + const [isPanelExpanded, setIsPanelExpanded] = useState(false); + const [speed, setSpeed] = useState(0); + const prevPosition = useRef(null); + const isInitialized = useRef(false); + const prevRouteDataHash = useRef(null); + const hasArrived = useRef(false); + const rotation = useRef(new Animated.Value(0)).current; + const [isPolylineLoading, setIsPolylineLoading] = useState(false); + + + useFocusEffect( + React.useCallback(() => { + const backHandler = BackHandler.addEventListener( + "hardwareBackPress", + () => { + props.navigation.goBack(); + return true; + } + ); + return () => backHandler.remove(); + }, []) + ); + + const simpleHash = (str) => { + let hash = 0; + for (let i = 0; i < (str?.length || 0); i++) { + const char = str.charCodeAt(i); + hash = ((hash << 5) - hash) + char; + hash = hash & hash; + } + return Math.abs(hash).toString(16); + }; + + const calculateDistance = (point1, point2) => { + if (!point1?.latitude || !point2?.latitude) return Infinity; + const R = 6371e3; + const lat1 = (point1.latitude * Math.PI) / 180; + const lat2 = (point2.latitude * Math.PI) / 180; + const deltaLat = ((point2.latitude - point1.latitude) * Math.PI) / 180; + const deltaLng = ((point2.longitude - point1.longitude) * Math.PI) / 180; + const a = Math.sin(deltaLat / 2) * Math.sin(deltaLat / 2) + + Math.cos(lat1) * Math.cos(lat2) * Math.sin(deltaLng / 2) * Math.sin(deltaLng / 2); + const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)); + return R * c; + }; + + const getManeuverIcon = (maneuver = '') => { + const m = maneuver.toLowerCase(); + // 🟢 START + if (m.includes('depart') || m.includes('head')) { + return 'arrow-upward'; // start / head north + } + // 🏁 DESTINATION + if (m.includes('arrive')) { + return 'check-circle'; // or 'location-on' + } + // 🔄 U-TURN + if (m.includes('uturn') || m.includes('u-turn')) { + return 'u-turn-left'; // MaterialIcons + } + // ⬅ LEFT + if (m.includes('left')) { + return 'arrow-back'; + } + // ➡ RIGHT + if (m.includes('right')) { + return 'arrow-forward'; + } + // ⬆ STRAIGHT / CONTINUE + if (m.includes('straight') || m.includes('continue')) { + return 'arrow-upward'; + } + // 🛣 MERGE / RAMP + if (m.includes('merge') || m.includes('ramp')) { + return 'call_merge'; + } + // 🔵 ROUNDABOUT + if (m.includes('roundabout') || m.includes('rotary')) { + return 'sync'; // best available Material icon + } + // DEFAULT + return 'arrow-forward'; + }; + + useEffect(() => { + const polylineString = + data?.routes?.[0]?.overview_polyline?.points || + data?.routes?.[0]?.overview_polyline; + + if (!polylineString) return; + let isMounted = true; + setIsPolylineLoading(true); + + InteractionManager.runAfterInteractions(() => { + try { + const decoded = polyline.decode(polylineString).map(([lat, lng]) => ({ + latitude: lat, + longitude: lng, + })); + if (isMounted) { + setRouteCoordinates(decoded); + setCurrentToDestinationCoords(decoded); + } + } catch (e) { + console.error('Polyline decode failed', e); + } finally { + if (isMounted) setIsPolylineLoading(false); + } + }); + + return () => { + isMounted = false; + }; + }, [data]); + + const calculateBearing = (from, to) => { + const lat1 = from.latitude * (Math.PI / 180); + const lon1 = from.longitude * (Math.PI / 180); + const lat2 = to.latitude * (Math.PI / 180); + const lon2 = to.longitude * (Math.PI / 180); + const dLon = lon2 - lon1; + const y = Math.sin(dLon) * Math.cos(lat2); + const x = + Math.cos(lat1) * Math.sin(lat2) - + Math.sin(lat1) * Math.cos(lat2) * Math.cos(dLon); + let brng = Math.atan2(y, x) * (180 / Math.PI); // convert to degrees + brng = (brng + 360) % 360; // normalize to 0-360° + return brng; + }; + + + const stripHtml = (text = '') => + text.replace(/<[^>]*>/g, ''); + + const updateRouteUI = async (route) => { + if (!route?.routes?.[0]?.legs?.[0]) return; + + const leg = route.routes[0].legs[0]; + const steps = leg.steps || []; + setInstructions(steps); + setCurrentStepIndex(0); + + if (steps.length > 0) { + setNextInstruction({ + text: steps[0].instructions || 'Follow the route', + distance: steps[0].readable_distance || '', + icon: getManeuverIcon(steps[0].maneuver), + }); + } + + const end = leg.end_location; + const destinationName = await reverseGeocode(end.lat, end.lng); + + setDestinationInfo({ + name: destinationName || 'Destination', + distance: leg.readable_distance, + time: leg.duration + ? `${Math.round(leg.duration / 60)} mins` + : 'N/A', + }); + }; + + + // init TTS + useEffect(() => { + Tts.getInitStatus().then(() => { + Tts.setDefaultLanguage('en-US'); + Tts.setDefaultRate(0.5); + }); + + return () => Tts.stop(); + }, []); + + // speak on instruction change + useEffect(() => { + if (!nextInstruction?.text) return; + const cleanText = stripHtml(nextInstruction.text); + + Tts.stop(); + Tts.speak(`${cleanText || 'Continue'}. In ${nextInstruction?.distance || '0 m'}.`); + }, [nextInstruction?.text]); + + useEffect(() => { + const currentRouteDataHash = simpleHash(JSON.stringify(data)); + let watchId; + const initialize = async () => { + try { + setIsLoading(true); + console.log('Initializing navigation, timestamp:', Date.now()); + const hasPermission = await requestLocationPermission(); + if (!hasPermission) { + setError('Location permission denied'); + setIsLoading(false); + return; + } + + if (!data?.routes?.[0]?.legs?.[0]) { + setError('Invalid route data'); + setIsLoading(false); + return; + } + + await updateRouteUI(data); + + setIsLoading(false); + isInitialized.current = true; + prevRouteDataHash.current = currentRouteDataHash; + } catch (err) { + console.error('Initialization error:', err); + setError('Failed to initialize navigation: ' + err.message); + setIsLoading(false); + } + }; + + initialize(); + + return () => { + console.log('Cleaning up initialization useEffect, timestamp:', Date.now()); + if (watchId) Geolocation.clearWatch(watchId); + isInitialized.current = false; + }; + }, []); + + + + const reverseGeocode = async (lat, lng) => { + try { + const url = `https://api.olamaps.io/places/v1/reverse-geocode?latlng=${lat},${lng}&language=en&api_key=${OLA_MAP_KEY}`; + const response = await fetch(url, { + method: 'GET', + headers: { + 'X-Request-Id': 'my-app-request-123', // optional, for tracking + 'X-Correlation-Id': 'my-app-correlation-456' // optional + } + }); + + if (!response.ok) { + throw new Error(`Reverse geocode failed with status ${response.status}`); + } + const data = await response.json(); + return getLastFormattedAddress(data); + } catch (error) { + console.error('Error in reverse geocoding:', error); + return null; + } + }; + + const getLastFormattedAddress = (apiResponse) => { + if ( + apiResponse?.status === 'ok' && + Array.isArray(apiResponse.results) && + apiResponse.results.length > 0 + ) { + const lastItem = apiResponse.results[apiResponse.results.length - 1]; + return lastItem.formatted_address || ''; + } + return ''; + }; + + const rotateMarker = (bearing) => { + Animated.timing(rotation, { + toValue: bearing, + duration: 300, + easing: Easing.linear, + useNativeDriver: false, + }).start(); + }; + + + const decodePolyline = (encoded) => { + if (!encoded) return []; + return polyline.decode(encoded).map(([lat, lng]) => ({ + latitude: lat, + longitude: lng, + })); + }; + + const refetchRouteFromHere = async (userLoc) => { + try { + notify("Re-routing…") + const destinationLat = endLocation.lat; + const destinationLng = endLocation.lng; + const url = + `https://api.olamaps.io/routing/v1/routeOptimizer` + + `?locations=${userLoc.latitude},${userLoc.longitude}` + + `|${destinationLat},${destinationLng}` + + `&mode=driving&api_key=${OLA_MAP_KEY}`; + + const response = await fetch(url, { method: "POST" }); + + if (!response.ok) { + throw new Error("Failed to fetch reroute"); + } + + const newRoute = await response.json(); + // 1️⃣ Decode polyline first + const encodedPolyline = newRoute?.routes?.[0]?.overview_polyline?.points || newRoute?.routes?.[0]?.overview_polyline; + const newRouteCoords = decodePolyline(encodedPolyline); + // 🔁 Swap atomically (NO blank map) + unstable_batchedUpdates(() => { + setRouteData(newRoute); + setRouteCoordinates(newRouteCoords); + setCurrentToDestinationCoords(newRouteCoords); + setCurrentStepIndex(0); + prevPosition.current = null; + }); + + await updateRouteUI(newRoute); + + // 3️⃣ Smooth camera movement (optional) + mapRef.current?.animateCamera({ + center: userLoc, + heading: 0, + pitch: 45, + zoom: 15, + duration: 800, + }); + + } catch (err) { + console.error("❌ Re-route failed:", err.message); + } + }; + + useEffect(() => { + let watchId; + if (isLoading || error || !data?.routes?.[0]?.legs?.[0]?.steps || routeCoordinates.length === 0) { + return; + } + const steps = data.routes[0].legs[0].steps; + const offRouteCount = { current: 0 }; + const lastRerouteTime = { current: 0 }; + const isRerouting = { current: false }; + watchId = Geolocation.watchPosition( + position => { + const { latitude, longitude, speed, heading } = position.coords; + const userLoc = { latitude, longitude }; + // ----------------------------- + // SPEED (km/h) + // ----------------------------- + const speedKmh = speed != null && speed >= 0 ? Math.max((speed * 3.6).toFixed(1), 0) : 0; + setSpeed(speedKmh < 1 ? 0 : speedKmh); + // ----------------------------- + // BEARING + // ----------------------------- + const prev = prevPosition.current; + const brng = prev ? calculateBearing(prev, userLoc) : heading || 0; + prevPosition.current = userLoc; + // ----------------------------- + // MOVE USER MARKER + // ----------------------------- + coordinate.timing({ + latitude, + longitude, + duration: 1000, + useNativeDriver: false, + }).start(); + + rotateMarker(brng); + // ----------------------------- + // CAMERA (Google-style) + // ----------------------------- + mapRef.current?.animateCamera({ + center: userLoc, + heading: brng, + pitch: 45, + zoom: 15, + }); + + // ----------------------------- + // SMART OFF-ROUTE CHECK (FIXED) + // ----------------------------- + + let nearestIndex = -1; + let minDist = Infinity; + //console.log("routeCoordinates---", routeCoordinates) + routeCoordinates.forEach((coord, i) => { + const d = calculateDistance(userLoc, coord); + if (d < minDist) { + minDist = d; + nearestIndex = i; + } + }); + + const lookAhead = 5; + const safeIndex = nearestIndex !== -1 ? Math.min(nearestIndex + lookAhead, routeCoordinates.length - 1) : null; + const nextRoutePoint = safeIndex !== null ? routeCoordinates[safeIndex] : null; + const routeBearing = nextRoutePoint ? calculateBearing(userLoc, nextRoutePoint) : brng; + // Proper circular bearing diff + const headingDiff = Math.abs(((routeBearing - brng + 540) % 360) - 180); + const offRoute = nearestIndex === -1 || minDist > 40 || headingDiff > 35; + const now = Date.now(); + console.log("routeCoordinates---", offRoute, offRouteCount.current) + if (offRoute) { + offRouteCount.current += 1; + if (offRouteCount.current >= 3 && now - lastRerouteTime.current > 8000 && !isRerouting.current) { + console.log("🔁 Re-routing (Google-style)"); + isRerouting.current = true; + lastRerouteTime.current = now; + offRouteCount.current = 0; + refetchRouteFromHere(userLoc); + setTimeout(() => { + isRerouting.current = false; + }, 4000); + return; + } + } else { + offRouteCount.current = 0; + } + + // ----------------------------- + // STEP NAVIGATION + // ----------------------------- + let newStepIndex = currentStepIndex; + let shouldSpeak = false; + let instructionText = ''; + let nextInstructionData = {}; + if (currentStepIndex < steps.length) { + const step = steps[currentStepIndex]; + const distanceToEnd = calculateDistance(userLoc, step.end_location || endLocation); + if (distanceToEnd < 50) { + newStepIndex++; + if (newStepIndex < steps.length) { + const nextStep = steps[newStepIndex]; + const dist = calculateDistance(userLoc, nextStep.start_location || endLocation); + const distStr = dist > 1000 ? (dist / 1000).toFixed(1) + ' km' : Math.round(dist) + ' m'; + instructionText = `In ${distStr}, ${nextStep.instructions}.`; + shouldSpeak = true; + nextInstructionData = { + text: nextStep.instructions, + distance: distStr, + icon: getManeuverIcon(nextStep.maneuver), + }; + } else { + instructionText = "You have arrived at your destination."; + shouldSpeak = true; + } + } else { + nextInstructionData = { + text: step.instructions, + distance: step.readable_distance, + duration: step.readable_duration, + icon: getManeuverIcon(step.maneuver), + }; + } + } + + // ----------------------------- + // UPDATE ROUTE PROGRESS + // ----------------------------- + if (nearestIndex !== -1) { + setCurrentToDestinationCoords( + routeCoordinates.slice(nearestIndex) + ); + } + + if (newStepIndex !== currentStepIndex) { + setCurrentStepIndex(newStepIndex); + } + + setNextInstruction(nextInstructionData); + }, + err => { + console.error("Location error:", err); + setError("Location tracking failed"); + setIsLoading(false); + }, + { + enableHighAccuracy: false, + distanceFilter: 3, + interval: 1000, + fastestInterval: 800, + showLocationDialog: true, + forceRequestLocation: true, + } + ); + + return () => { + if (watchId) Geolocation.clearWatch(watchId); + }; + }, [ + isLoading, + error, + data, + currentStepIndex, + routeCoordinates, + isSpeaking, + ]); + + const startLocation = data?.routes?.[0]?.legs?.[0]?.start_location || { lat: 28.527537, lng: 77.275524 }; + const endLocation = data?.routes?.[0]?.legs?.[0]?.end_location || { lat: 28.562196, lng: 77.445004 }; + const coordinate = useRef( + new AnimatedRegion({ + latitude: startLocation?.lat, + longitude: startLocation?.lng, + latitudeDelta: 0, + longitudeDelta: 0, + }) + ).current; + + const initialRegion = useMemo(() => { + const latDelta = Math.abs(endLocation.lat - startLocation.lat) * 1.5 || 0.02; + const lngDelta = Math.abs(endLocation.lng - startLocation.lng) * 1.5 || 0.02; + return { + latitude: (startLocation.lat + endLocation.lat) / 2, + longitude: (startLocation.lng + endLocation.lng) / 2, + latitudeDelta: latDelta, + longitudeDelta: lngDelta, + }; + }, [startLocation, endLocation]); + + + // Function to center map on user's current location with error handling + const centerMapOnUser = (flag) => { + console.log('Attempting to center map on user location'); + + Geolocation.getCurrentPosition( + position => { + const { latitude, longitude } = position.coords; + const newLoc = { latitude, longitude }; + // Calculate bearing ONLY for marker + const brng = prevPosition.current + ? calculateBearing(prevPosition.current, newLoc) + : position.coords.heading || 0; + + prevPosition.current = newLoc; + + // ✅ MOVE AVIATOR + coordinate.timing({ + latitude, + longitude, + duration: 1000, + useNativeDriver: false, + }).start(); + + // ✅ ROTATE ONLY AVIATOR + let values = flag ? 16 : 15 + mapRef.current?.animateCamera({ + center: { latitude, longitude }, + heading: 0, + pitch: 0, + zoom: values, + }); + + console.log('Centered map bottom → top (north-up)'); + }, + err => { + console.error('Error getting current location:', err); + Alert.alert('Location Error', 'Unable to fetch your location.'); + }, + { + enableHighAccuracy: true, + timeout: 15000, + maximumAge: 10000, + } + ); + }; + + const renderInstruction = ({ item, index }) => ( + + + {item.instructions || 'No instruction'} ({item.readable_distance || 'N/A'}) + + + {/* speakInstruction(item.instructions, item.readable_distance)} + disabled={isSpeaking} + > + {isSpeaking ? 'Speaking...' : 'Speak'} + */} + + ); + + if (isLoading && isPolylineLoading) { + return ( + + + Loading navigation... + + ); + } + + if (error) { + return ( + + {error} + { + setError(null); + setIsLoading(true); + isInitialized.current = false; + hasArrived.current = false; + }}> + Retry + + + ); + } + const nextInstructionHeight = 80; + const myLocationButtonTop = Platform.OS === 'ios' ? nextInstructionHeight + 10 : nextInstructionHeight + 40; + + + return ( + <> + + + + + + {nextInstruction.text || 'Follow the route'} + {nextInstruction.distance || ''} + + Destination: {destinationInfo.name} + {'\n'} + Duration: {destinationInfo.distance} • {destinationInfo.time} + + + + + + + + + + + + + + + + + + + + + + + {routeCoordinates.length > 0 && ( + + )} + {currentToDestinationCoords.length > 0 && ( + + )} + + + + + + + {/* Zoom Controls */} + + { + centerMapOnUser(true) + }} + > + + + + { + mapRef.current.animateToRegion({ + ...initialRegion, + latitudeDelta: initialRegion.latitudeDelta * 2, + longitudeDelta: initialRegion.longitudeDelta * 2, + }); + }} + > + + + + + + setIsPanelExpanded(!isPanelExpanded)}> + + + index.toString()} + contentContainerStyle={styles.instructionsList} + ListEmptyComponent={No instructions available} + initialScrollIndex={currentStepIndex} + getItemLayout={(data, index) => ({ length: 50, offset: 50 * index, index })} + scrollEnabled={isPanelExpanded} + /> + + + {/* Speed Display */} + + + {speed === 0 ? "0 km/h" : `${speed} km/h`} + + + + + + + ); +}; + +const styles = StyleSheet.create({ + container: { flex: 1, backgroundColor: '#fff' }, + nextInstructionContainer: { + flexDirection: 'row', + alignItems: 'center', + backgroundColor: 'rgba(255, 255, 255, 0.5)', // semi-transparent white + padding: 12, + borderBottomWidth: 0, // optional: remove bottom border + elevation: 6, + shadowColor: '#000', + shadowOffset: { width: 0, height: 2 }, + shadowOpacity: 0.2, + shadowRadius: 4, + zIndex: 10, + position: 'absolute', + top: 0, + left: 0, + right: 0, + }, + + maneuverIcon: { marginRight: 12 }, + nextInstructionTextContainer: { flex: 1 }, + nextInstructionText: { fontSize: 18, fontWeight: '600', color: '#333' }, + nextInstructionDistance: { fontSize: 14, color: '#007AFF' }, + destinationInfoText: { fontSize: 14, color: 'black', marginTop: 4 }, + map: { width, height: '100%' }, + bottomPanel: { + position: 'absolute', + bottom: 0, + left: 0, + right: 0, + backgroundColor: '#fff', + borderTopLeftRadius: 16, + borderTopRightRadius: 16, + elevation: 6, + shadowColor: '#000', + shadowOffset: { width: 0, height: -2 }, + shadowOpacity: 0.1, + shadowRadius: 4, + }, + collapsedPanel: { height: 60 }, + expandedPanel: { height: height * 0.4 }, + panelHandle: { alignItems: 'center', paddingVertical: 8 }, + handleLine: { width: 40, height: 4, backgroundColor: '#ccc', borderRadius: 2 }, + instructionsList: { paddingBottom: 16 }, + instructionItem: { + flexDirection: 'row', + justifyContent: 'space-between', + alignItems: 'center', + padding: 12, + backgroundColor: '#fff', + }, + activeInstruction: { + backgroundColor: '#e6f0ff', + borderLeftWidth: 4, + borderLeftColor: '#007AFF', + }, + instructionText: { fontSize: 16, color: '#333', flex: 1, marginRight: 12 }, + speakButton: { + backgroundColor: '#007AFF', + paddingVertical: 6, + paddingHorizontal: 12, + borderRadius: 8, + }, + speakButtonDisabled: { backgroundColor: '#aaa' }, + speakButtonText: { color: '#fff', fontSize: 12, fontWeight: '600' }, + instructionMarker: { + backgroundColor: 'rgba(0, 0, 0, 0.7)', + padding: 6, + borderRadius: 6, + borderWidth: 1, + borderColor: '#fff', + }, + instructionMarkerText: { + fontSize: 14, + color: '#fff', + textAlign: 'center', + fontWeight: '500', + }, + loadingContainer: { flex: 1, justifyContent: 'center', alignItems: 'center', backgroundColor: '#fff' }, + loadingText: { marginTop: 12, fontSize: 16, color: '#333' }, + errorContainer: { flex: 1, justifyContent: 'center', alignItems: 'center', backgroundColor: '#fff', padding: 20 }, + errorText: { fontSize: 18, color: '#FF3B30', textAlign: 'center', marginBottom: 20 }, + retryButton: { backgroundColor: '#007AFF', paddingVertical: 12, paddingHorizontal: 24, borderRadius: 8 }, + retryButtonText: { color: '#fff', fontSize: 16, fontWeight: '600' }, + emptyText: { fontSize: 16, color: '#666', textAlign: 'center', marginTop: 20 }, + zoomControls: { + position: 'absolute', + right: 20, + bottom: 80, // 👈 margin from bottom + flexDirection: 'column', + }, + zoomButton: { + backgroundColor: '#fff', + borderRadius: 8, + padding: 10, + marginVertical: 5, + elevation: 4, // Android shadow + shadowColor: '#000', + shadowOpacity: 0.2, + shadowRadius: 3, + shadowOffset: { width: 0, height: 2 }, // iOS shadow + }, + zoomText: { + fontSize: 20, + fontWeight: 'bold', + color: "black" + }, + myLocationButton: { + position: 'absolute', + right: 20, + backgroundColor: '#fff', + borderRadius: 8, + padding: 10, + elevation: 4, + marginLeft: 10, + marginTop: 10, + shadowColor: '#000', + shadowOpacity: 0.2, + shadowRadius: 3, + shadowOffset: { width: 0, height: 2 }, + zIndex: 20, // Increased zIndex to ensure visibility + }, speedBox: { + position: "absolute", + bottom: 80, + left: 20, + backgroundColor: "rgba(0,0,0,0.7)", + padding: 10, + borderRadius: 8, + }, + speedText: { + color: "#fff", + fontSize: 20, + fontWeight: "bold", + }, + +}); + +export default NavigationScreen; diff --git a/PerformicsSrc/src/screens/miscellaneous/Miscellaneous.js b/PerformicsSrc/src/screens/miscellaneous/Miscellaneous.js new file mode 100644 index 0000000..38b2bfa --- /dev/null +++ b/PerformicsSrc/src/screens/miscellaneous/Miscellaneous.js @@ -0,0 +1,363 @@ +import React, {useState, useEffect, useRef} from 'react'; +import Container from '../components/container'; +import {useRoute} from '@react-navigation/native'; +import {customStyles, GetPageTheme} from '../styles/Global'; +import styles from '../styles/TrainingMenu.style'; +import {Image, View, Text, ScrollView, TouchableOpacity, Platform, Dimensions} from 'react-native'; +import {connect} from 'react-redux'; +import {mapStateToProps, mapDispatchToProps} from '../reducers/contextProvider'; +import {get_item} from '../components/localStorage'; +import {db, colors_Arr} from '../constants/constants'; +import CustomHeader from '../components/customHeader'; +import {AntDesign} from '../components/icons'; +import CustomLoader from '../components/CustomLoader'; +import NoDataComponent from '../components/NoDataComponent'; +import LinearGradient from 'react-native-linear-gradient'; +import grey_bg_image from '../assets/performics/circle_grey.svg'; + +function TrainingMenu(props) { + const route = useRoute(); + const ST = props.StaticText || {}; + // get all theme styles acc to current theme set + const PageTheme = GetPageTheme(props.DarkMode, route.name); + const customStyle = customStyles(props.DarkMode, route.name); + const [processing, setProcessing] = useState(true); + const [isDataFound, setisDataFound] = useState(false); + const [reportData, setReportData] = useState([]); + const [designation, setDesignation] = useState(''); + const [CardViewEnable, setCardViewEnable] = useState(false); + const [CardViewConfig, setCardViewConfig] = useState({}); + + useEffect(() => { + getData(); + }, []); + + const [activeTab, setActiveTab] = useState(0); + const [userhomelocationdata , setUserHomeLocationData] = useState([]); + const scrollViewRef = useRef(null); + const tabWidth = Dimensions.get('window').width / 2; // Assuming 2 tabs, adjust this accordingly + const tabs = [ + {title: 'Documents', content: _renderMenuList()}, + {title: 'Home', content: _renderMenuList('home')}, + ]; + + const handleScroll = event => { + const offsetX = event.nativeEvent.contentOffset.x; + const index = Math.floor(offsetX / tabWidth); + setActiveTab(index); + }; + + const scrollToTab = index => { + scrollViewRef.current.scrollTo({x: index * tabWidth * 2, animated: true}); + }; + + async function getData() { + try { + let loginInfo = await get_item('loginInfo'); + const loginDetails = JSON.parse(loginInfo); + let desg = loginDetails.Designation || ''; + setDesignation(desg); + await db.transaction(async function (txn) { + let q = `Select distinct ContentTypeId, ContentType, IconPath, Icon, MediaType, DownloadKey, ReportView as ReportType, InnerScreenView from Master_DetailerContent group by ContentTypeId`; + // let q=`SELECT * from Master_MenuReports`; + + await txn.executeSql( + q, + [], + async function (txn2, txnres) { + console.log('txnres.rows.length:', txnres.rows.length); + if (txnres.rows.length > 0) { + let arr = []; + let carView = true; + for (var i = 0; i < txnres.rows.length; i++) { + let data = txnres.rows.item(i); + carView = data?.InnerScreenView == 'Tile'; + arr.push(data); + if (i == txnres.rows.length - 1) { + setCardViewConfig(data); + setCardViewEnable(carView); + setReportData(arr); + setisDataFound(true); + setProcessing(false); + } + } + } else { + setProcessing(false); + } + }, + function (txn2, txnerr) { + console.log(txnerr); + setProcessing(false); + }, + ); + + let q1=`SELECT * from Master_UserHomeLocation`; + await txn.executeSql(q1,[],async function (txn2, txnres) { + if(txnres.rows.length>0){ + let arr=[]; + for(var i=0;i + {RowContent[0]} + + ); + } + + function _renderMenuItem(item, index) { + let newi; + if (index == 1) { + newi = '2'; + } else { + newi = index > 2 ? index % 3 : index; + } + + // let newi=index>2?((index%3)):index; + let firstitem = index % 2 == 0 ? true : false; + + let arr = ['#bed3ea', '#bed3ea']; + // let arr = ["#dcf2ee", "#30cfb0"]; + // let arr = colors_Arr[newi] ? colors_Arr[newi].bg : colors_Arr["0"].bg; + let unavlbl_bg = ['#bfbfbf', '#bfbfbf']; + let arr_new = item?.isAvlbl == false ? unavlbl_bg : arr; + // let iconColor=colors_Arr[newi]?colors_Arr[newi].color:colors_Arr["0"].color; + const imgPath = CardViewConfig?.IconPath + CardViewConfig?.Icon; + + let MbgImage = colors_Arr[newi] + ? colors_Arr[newi]?.bgImage + : colors_Arr['0']?.bgImage; + MbgImage = item?.isAvlbl == false ? grey_bg_image : MbgImage; + + let hasSomeData = item?.hasSomeData; + return ( + gotoTraingPage(item)}> + + + + + + + {imgPath != null && imgPath != '' && ( + + )} + + + {item.ContentType} + {item.isDone == true && ( + + + + )} + {/* {item.hasSomeData==true && !item.isKPI_Done && + + } + {props.PartialSaveAllow==true && item.PSAllow!=null && item.PSAllow==true && + {`(${item.DataDoneCount}/${item.DataRowAvlblCount})`} + } */} + + + ); + } + + function _renderRightMenuItem(item, index, RowContent) { + return ( + + {RowContent[0]} + {_renderMenuItem(item, index)} + + ); + } + + function _renderMenuList(home) { + var RowContent = []; + let firstArr = [ + { + ContentType: 'Home Location', + ContentTypeId: 1, + DownloadKey: '', + Icon: 'Paid-Visibility.png', + IconPath: 'https://di1.parinaam.in/Download/Icon/', + InnerScreenView: 'Tile', + MediaType: 'PDF', + ReportType: '', + }, + ]; + + let isHome = userhomelocationdata[0]?.OptionShow == 1 && home === 'home' ? firstArr : reportData; + return ( + isHome.length > 0 && + isHome.map((item, index) => { + // let RowContent=[] + if (CardViewEnable) { + let firstitem = index % 2 == 0 ? true : false; + + if (firstitem) { + var content = _renderMenuItem(item, index); + RowContent = [content]; + if (index == isHome.length - 1) { + return _renderLeftMenuItem(index, RowContent); + } + } else { + return _renderRightMenuItem(item, index, RowContent); + } + } else { + return ( + { + gotoTraingPage(item); + }}> + + {item.ContentType} + + + ); + } + }) + ); + } + + + console.log(userhomelocationdata[0]?.OptionShow, 'user datta') + + return ( + + {processing && } + + + + {!props.isDataDownloaded && } + {props.isDataDownloaded == true && ( + + {isDataFound == false && ( + + + {ST.NoDataAvailable} + + + )} + + {isDataFound == true && ( + + + + + {ST.Username + ' :'} + + + {props.UserId} + + + + + {ST.Designation + ' :'} + + + {designation} + + + + + {userhomelocationdata[0]?.OptionShow == 1 && + + {tabs.map((tab, index) => ( + scrollToTab(index)}> + {tab.title} + + ))} + + + } + + + + {tabs.map((tab, index) => { + let tabContent=null; + if(userhomelocationdata[0]?.OptionShow == 1 && tab.title=="Home"){ + tabContent=tab.content + }else if(tab.title!="Home"){ + tabContent=tab.content + } + return ( + + {tabContent} + + )})} + + + )} + + )} + + + + ); +} + +export default connect(mapStateToProps, mapDispatchToProps)(TrainingMenu); diff --git a/PerformicsSrc/src/store/configureStore.js b/PerformicsSrc/src/store/configureStore.js new file mode 100644 index 0000000..11247df --- /dev/null +++ b/PerformicsSrc/src/store/configureStore.js @@ -0,0 +1,22 @@ +import React from 'react'; +import { createStore, combineReducers } from 'redux'; +import projectReducer from '../reducers/projectReducers'; +import sessionReducer from '../reducers/sessionReducer'; +// import darkmodeReducer from '../reducers/darkmodeReducer'; +import themeReducer from '../reducers/themeReducer'; +import globalDataReducer from '../reducers/globalDataReducer'; +import notificationReducer from '../reducers/notificationReducer'; + +// Combine the reducers from both stores +const rootReducer = combineReducers({ + projectR:projectReducer, + sessionR:sessionReducer, + // darkmodeR:darkmodeReducer, + themeR:themeReducer, + globalR:globalDataReducer, + notificationR :notificationReducer, +}); + +const store = createStore(rootReducer); + +export default store; diff --git a/PerformicsSrc/src/styles/Global.js b/PerformicsSrc/src/styles/Global.js new file mode 100644 index 0000000..791e6cc --- /dev/null +++ b/PerformicsSrc/src/styles/Global.js @@ -0,0 +1,2573 @@ +import { PrimaryTheme, MainThemeLight, DarkTheme } from "./Themes"; +import { Platform, StatusBar, StyleSheet } from 'react-native'; +import { widthPercentageToDP as wp, heightPercentageToDP as hp } from 'react-native-responsive-screen'; +const defdt = false, defrn = ''; +export const GetPageTheme = (isDarkTheme = defdt, routeName = defrn) => { + let PageTheme = (routeName == 'Project' ? MainThemeLight : (isDarkTheme == true ? DarkTheme : PrimaryTheme)); + return PageTheme; +}; + +export const WP = wp; +export const HP = hp; +const borderRadius = 20; +export const STATUSBAR_HEIGHT = Platform.OS === 'ios' ? 70 : StatusBar.currentHeight; +const EXTRA_SPACE = Platform.OS === 'ios' ? 20 : 0; +const EXTRA_SPACE_MD = Platform.OS === 'ios' ? 40 : 0; +export const deffontfamily = 'Roboto-Regular'; +export const deffontfamily_bold = 'Roboto-Bold'; +export const globalStyles = (isDarkTheme = defdt, routeName = defrn) => { + const PageTheme = GetPageTheme(isDarkTheme, routeName); + return StyleSheet.create({ + statusBar: { height: STATUSBAR_HEIGHT, width: wp('100%') }, + drawerScreenHdr_bg: { backgroundColor: '#000', borderBottomWidth: 0, borderBottomColor: PrimaryTheme.$secondary_color_light, paddingHorizontal: 10, paddingBottom: 5, paddingTop: STATUSBAR_HEIGHT + 10, marginTop: Platform.OS === 'ios' ? -60 : 0 }, + dScreenHdr_Content: { flexDirection: 'row', alignItems: 'center', position: 'relative' }, + drawerScreenHdr_title: { width: '100%', textAlign: 'left', fontSize: 16, fontWeight: '500', color: PageTheme.$accent_color, paddingLeft: 50, paddingRight: 100, fontFamily: deffontfamily, }, + dScreen_LeftContainer: { position: 'absolute', left: 0 }, + toggleDrawerBtn: { paddingVertical: 5, paddingHorizontal: 10 }, + dScreen_RightContainer: { position: 'absolute', right: 0, flexDirection: 'row', alignItems: 'center' }, + drawerProjectId: { fontSize: 14, fontWeight: '500', color: PageTheme.$accent_color, paddingHorizontal: 5, fontFamily: deffontfamily, }, + drawerNotifIcon: { marginLeft: 5, padding: 5 }, + drawerChatAiIcon: { marginLeft: 'auto', padding: 5, }, + + drawerContent: { + flex: 1, + marginTop: -10, + paddingTop: 0, + }, + drawerContentScroll: {}, + drawerContentScrollInner: { paddingTop: 10, padding: 0 }, + cardTitle: { + fontWeight: 'normal', + fontSize: hp('1.8%'), + fontFamily: deffontfamily + }, + cardImage: { + width: 30, + height: 30, + resizeMode: 'contain', + }, + title: { + fontSize: 15, + marginTop: 10, + fontWeight: '500', + textTransform: 'capitalize', + color: PageTheme.$text_color, + textAlign: 'center', + marginLeft: -5, + fontFamily: deffontfamily + }, + caption: { + fontSize: hp('1.7%'), + lineHeight: 14, + fontFamily: deffontfamily + }, + row: { + marginTop: 20, + flexDirection: 'row', + alignItems: 'center', + }, + section: { + flexDirection: 'row', + alignItems: 'center', + marginRight: 15, + }, + paragraph: { + fontWeight: '600', + marginRight: 3, + }, + drawerSection: { + marginTop: 7, + borderBottomColor: '#fff', + borderBottomWidth: 0, + }, + bottomDrawerSecion: { + borderTopColor: '#f4f4f4', + borderTopWidth: 1, + borderBottomWidth: 0, + marginBottom: 0, + }, + bottomDrawerCon: { + padding: 5, + flexDirection: 'column', + alignItems: 'center', + }, + bottomDrawerIcon: { + width: '50%', + height: 30, + resizeMode: 'contain', + }, + bottomDrawerLabel: { + fontSize: 14, + color: PageTheme.$text_color, + fontFamily: deffontfamily + }, + preferenceCon: { + padding: 10, + }, + preferenceTitle: { + fontSize: 14, + color: PageTheme.$text_color, + fontFamily: deffontfamily + }, + preference: { + flexDirection: 'row', + justifyContent: 'space-between', + marginTop: 12, + }, + userInfoSection: { + padding: 0, + borderBottomColor: '#f4f4f4', + borderBottomWidth: 1, + }, + container: { + flex: 1, alignItems: 'center', backgroundColor: PageTheme.$accent_color, fontFamily: deffontfamily, + }, + logo: { + resizeMode: 'contain', + width: wp('50%') + }, + drawerIcon: { + width: 30, + height: 30, + left: 2, + position: "absolute", + paddingLeft: 15 + + }, + inputStyle: { + width: wp('85%'), + height: hp('8%'), + marginBottom: 12, + }, + otpStyle: { + marginBottom: 12, + borderRadius: 8, + width: wp('15%'), + height: hp('7%'), + }, + drawerItemStyle: { + flexDirection: 'row', + paddingHorizontal: 10, + paddingVertical: 8.5, + alignItems: 'center', + // height:35, + }, + drawerLogo: { + width: wp('50%') - 20, + height: 60, + resizeMode: 'contain', + // borderWidth:1, + // borderColor:'#000' + }, + drawerItemIcon: { width: 30, justifyContent: 'center', flexDirection: 'row' }, + drawerLabel: { + fontSize: 15, + fontWeight: '400', + color: PageTheme.$accent_color2, + marginLeft: 10, + fontFamily: deffontfamily + }, + otpContainer: { + width: wp('85%'), + flexDirection: 'row', + flexWrap: 'wrap', + justifyContent: 'space-between' + }, + labelStyle: { + color: PageTheme.$text_color_700, + textAlign: 'left', + width: wp('85%'), + fontSize: hp('1.7%'), + marginBottom: 20, + justifyContent: 'flex-start', + fontFamily: deffontfamily + }, + + }); +} + +export const customStyles = (isDarkTheme = defdt, routeName = defrn) => { + const PageTheme = GetPageTheme(isDarkTheme, routeName); + return StyleSheet.create({ + drawerSubTitle: { + fontSize: 12, + color: PageTheme.$text_color, + fontFamily: deffontfamily + }, + loginIllutration: { + // marginTop:20, + }, + moreIconMpin: { + position: 'absolute', + right: 12, + top: 16, + width: 40, + height: 40, + borderRadius: 24, + justifyContent: 'center', + alignItems: 'center' + }, + performics_logo: { + width: wp('50%'), + height: 40, + marginTop: 20, + resizeMode: 'contain', + }, + company_logo: { width: wp('100%') - 40, height: 100, resizeMode: 'contain' }, + loginScrollCon: { + flex: 1, + width: wp('100%'), + }, + loginCon: { + flex: 1, + alignItems: "center", + position: 'relative', + + + }, + projectScrollCon: { + width: wp('100%'), + flex: 1 + }, + projectCon: { + alignItems: "center", + position: 'relative', + }, + loginScrollCon2: { + flex: 1, + width: wp('100%'), + }, + projectPageWrapper: { width: '100%', height: hp('100%') }, + + //=============Bottom View============== + footerView: { width: '100%', alignItems: 'center', marginBottom: 20, }, + + //=============signatureBox============== + signatureBox: { + alignItems: "center", + width: wp('100%'), + padding: 10, + + }, + signatureText: { + color: PageTheme.$text_color_light, + fontSize: 12, + fontWeight: '400', + fontFamily: deffontfamily, + textAlign: 'center', + }, + signatureLogo: { + resizeMode: 'contain', + width: wp('30%'), + height: 50, + marginTop: 5, + }, + pageContentWrapper: { backgroundColor: PageTheme.$bg_color, borderTopLeftRadius: borderRadius, borderTopRightRadius: borderRadius, elevation: 3, paddingTop: 10, flex: 1, }, + pageCWrap2: { paddingHorizontal: 10 }, + pageContentWrapper_bgLight: { backgroundColor: '#efefef' }, + orderDetails_scroll: { justifyContent: 'center', padding: 10, paddingBottom: 65, paddingTop: 5 }, + + //Noticeboard styles + + NB_quickL_IconS: { backgroundColor: '#fff', height: 45, width: 45, borderRadius: 50, padding: 10, alignItems: 'center', justifyContent: 'center' }, + NB_background: { backgroundColor: '#fff', borderTopLeftRadius: 20, borderTopRightRadius: 20, shadowColor: '#3d3d3d', shadowOffset: { width: 0, height: 2 }, marginTop: -2, shadowOpacity: 0.1, shadowRadius: 2, elevation: 2, paddingVertical: 5, paddingHorizontal: 10 }, + NB_text: { color: 'black', fontSize: 15, fontFamily: deffontfamily, }, + NB_tblHdrparent: { paddingLeft: 5, paddingRight: 5, paddingTop: 10, width: (wp('100%') - 20) / 4 }, + NB_tblHdr: { width: '90%', height: 60, backgroundColor: '#eaf0fe', borderRadius: 10, alignItems: 'center', flexDirection: 'row', justifyContent: 'center', fontFamily: deffontfamily }, + NB_tblHdr2: { paddingBottom: 10, fontFamily: deffontfamily }, + NB_tblIconItem: { alignContent: 'center', alignItems: 'center' }, + NB_tblTextItem: { textAlign: 'center', fontFamily: deffontfamily, alignContent: 'center', alignItems: 'center', fontSize: 10, marginHorizontal: 2, paddingHorizontal: 5, color: PageTheme.$text_color, paddingTop: 5 }, + + //bannerimage + NB_bannerImgBg: { bpppporderTopLeftRadius: 0, borderTopRightRadius: 0, backgroundColor: PageTheme.$bg_color, shadowColor: '#3d3d3d', shadowOffset: { width: 0, height: 2 }, shadowOpacity: 0.1, shadowRadius: 2, elevation: 2, paddingVertical: 5, paddingHorizontal: 10, width: '100%', marginBottom: 5 }, + NB_bannerCard: { width: wp('98%'), height: 150, resizeMode: 'contain', marginRight: 10, soverflow: 'hidden', elevation: 1, borderRadius: 20, shadowColor: '#d3d3d3' }, + NB_bannerCardImg: { width: wp('98%') - 10, height: 150, backgroundColor: '#efefef', borderRadius: 20 }, + NB_bannerDot: { width: 10, height: 10, borderRadius: 5, elevation: 2, }, + + //storeperformancecard + NB_PerfBg: { borderTopLeftRadius: 0, borderTopRightRadius: 0, shadowColor: '#3d3d3d', shadowOffset: { width: 0, height: 2 }, shadowOpacity: 0.1, shadowRadius: 2, elevation: 2, paddingVertical: 15, paddingHorizontal: 5, marginBottom: 10 }, + NB_PerfItem: { paddingLeft: 5, paddingRight: 5, width: (wp('100%') - 10) / 2 }, + NB_PerfItemInner: { width: '100%', height: 140, backgroundColor: '#fbe7e8', borderRadius: 5 }, + NB_PerfIcon: { alignContent: 'flex-end', alignItems: 'flex-end' }, + NB_PerfLbl: { fontSize: 12, color: PageTheme.$text_color, marginTop: 15, paddingLeft: 5, fontWeight: '600', fontFamily: deffontfamily, }, + NB_PerfValue: { fontSize: 25, marginLeft: 20, color: PageTheme.$text_color, fontWeight: '600', fontFamily: deffontfamily, }, + NB_PerfRow: { flexDirection: 'row', marginTop: 10 }, + NB_PerfCol1: { width: '70%' }, + NB_PerfCol2: { width: '30%' }, + NBPerf_listStyle: { borderBottomColor: '#f4f1e0', borderBottomWidth: 2, paddingBottom: 10, paddingTop: 10, marginBottom: 10 }, + + sf_view: { width: 500, height: 2, marginTop: 10, elevation: 2, backgroundColor: '#efefef', marginBottom: 10 }, + + mtd_view: { width: 2, height: 20, marginTop: 15, elevation: 2, backgroundColor: '#fbd9d3', marginLeft: 2, marginRight: 2, }, + sfHdrparent: { paddingTop: 10, width: '100%', height: 200 }, + + // sfHdr:{width:'100%',height:'100%',backgroundColor:'#fbe7e8',borderRadius:5,marginTop:10}, + + + mtdHdr: { width: '100%', flexDirection: 'row', marginLeft: -10 }, + sfTextItem: { fontSize: 12, color: PageTheme.$text_color, fontWeight: '600', paddingLeft: 10, paddingRight: 10, fontFamily: deffontfamily }, + + sfTextValue: { fontSize: 20, color: PageTheme.$text_color, fontWeight: '600', marginTop: 2, fontFamily: deffontfamily }, + + NB_PerfD_row: { width: '100%', flexDirection: 'row', paddingHorizontal: 5 }, + NB_PerfD_col: { width: '50%', height: 160 }, + NB_PerfD_colInner: { paddingLeft: 10, paddingRight: 10, width: '100%', height: '100%', paddingTop: 5, borderRadius: 5 }, + NB_PerfD_col1: { paddingRight: 5 }, + NB_PerfD_col2: { paddingLeft: 5 }, + NB_PerfD_colInner1: { backgroundColor: '#f4f1e0' }, + NB_PerfD_colInner2: { backgroundColor: '#fbe7e8' }, + NB_PerfD_ItemWrap: { width: '100%', flexDirection: 'row' }, + NB_PerfD_IHdr_Txt: { fontSize: 20, color: PageTheme.$text_color, fontWeight: '600', marginTop: 15, fontFamily: deffontfamily, }, + NB_PerfD_rowI: { flexDirection: 'row', alignItems: 'center', }, + NB_PerfD_rowI2: {}, + NB_PerfD_colI: { alignItems: 'flex-end', height: 40 }, + NB_PerfD_colI1: { paddingRight: 10 }, + NB_PerfD_colI2: { paddingLeft: 10 }, + NB_PerfD_ICon_Lbl: { fontWeight: '600', color: 'black', fontSize: 12, fontFamily: deffontfamily }, + NB_PerfD_ICon_Val: { fontSize: 20, textAlign: 'center', color: 'black', paddingLeft: 10, fontWeight: '600', fontFamily: deffontfamily, }, + NB_PerfD_ICon_Separator: { width: 2, height: 20, elevation: 2, backgroundColor: '#fffec8' }, + NB_PerfD_ICon_Separator2: { width: 2, height: 20, elevation: 2, backgroundColor: '#fbd9d3' }, + + textplanned: { fontSize: 12, textAlign: 'center', color: 'black', padding: 7, fontWeight: '600', fontFamily: deffontfamily, }, + itemTextplanned: { fontWeight: '600', color: 'black', fontSize: 12, paddingLeft: 7, paddingRight: 7, textAlign: 'center', fontFamily: deffontfamily, }, + + NB_FTDcolWrap: { height: '100%' }, + + NB_FTDcol: { justifyContent: 'center', height: '100%', alignItems: 'center', }, + NB_MTDcol: { justifyContent: 'center', height: '100%', alignItems: 'center', }, + + sfHdrTV: { width: '100%', height: 80, flexDirection: 'row', marginLeft: -15 }, + mtdHdrTV: { width: '100%', height: 80, flexDirection: 'row', marginHorizontal: 2 }, + + //=============general Style============= + // pt200:{paddingTop:200,}, + mb7: { marginBottom: 7, }, mb10: { marginBottom: 10, }, mb20: { marginBottom: 20, }, mb30: { marginBottom: 30, }, mb40: { marginBottom: 40, }, mb50: { marginBottom: 50, }, mb60: { marginBottom: 60, }, mb70: { marginBottom: 70, }, mb80: { marginBottom: 80, }, mb90: { marginBottom: 90, }, mb100: { marginBottom: 100, }, + mt10: { marginTop: 10, }, mt20: { marginTop: 20, }, mt30: { marginTop: 30, }, mt40: { marginTop: 40, }, mt50: { marginTop: 50, }, mt60: { marginTop: 60, }, mt70: { marginTop: 70, }, mt80: { marginTop: 80, }, mt90: { marginTop: 90, }, mt100: { marginTop: 100, }, + pl10: { paddingLeft: 10 }, pl20: { paddingLeft: 20 }, pl30: { paddingLeft: 30 }, pl40: { paddingLeft: 40 }, pl50: { paddingLeft: 50 }, + pr10: { paddingRight: 10 }, pr20: { paddingRight: 20 }, pr30: { paddingRight: 30 }, pr40: { paddingRight: 40 }, pr50: { paddingRight: 50 }, + mr10: { marginRight: 10 }, mr20: { marginRight: 20 }, mr30: { marginRight: 30 }, + ml10: { marginLeft: 10 }, ml20: { marginLeft: 20 }, ml30: { marginLeft: 30 }, ml40: { marginLeft: 40 }, ml50: { marginLeft: 50 }, + pt10: { paddingTop: 10 }, pt20: { paddingTop: 20 }, pt30: { paddingTop: 30 }, pt40: { paddingTop: 40 }, pt50: { paddingTop: 50 }, + pb10: { paddingBottom: 10 }, pb20: { paddingBottom: 20 }, pb30: { paddingBottom: 30 }, pb40: { paddingBottom: 40 }, pb50: { paddingBottom: 50 }, + zIndex0: { zIndex: 0,elevation:0 }, + logoImage_con: { flexDirection: 'row', justifyContent: 'center', marginBottom: 10 }, + logoImage: { width: 100, height: 50 }, + drawerInfoCon: { padding: 10, paddingLeft: 0, paddingTop: STATUSBAR_HEIGHT + 10, alignItems: 'center', marginTop: Platform.OS === 'ios' ? -60 : 0 }, + // drawerInfoLeft:{paddingRight:10,marginRight:10,borderRightColor:PageTheme.$secondary_color_light,borderRightWidth:2}, + drawerLogo2: { width: 100, height: 50 }, + pageText: { + color: PageTheme.$text_color_dark, + fontSize: 16, + fontWeight: '500', + fontFamily: deffontfamily, + textAlign: 'center', + marginBottom: 10, + }, + pagedescText: { + color: PageTheme.$text_color, + fontSize: 13, + fontFamily: deffontfamily, + fontWeight: '400', + textAlign: 'center', + marginBottom: 5, + }, + formCon: {}, + formGroup: { position: 'relative' }, + inputStyle: { + textAlign: 'left', + fontFamily: deffontfamily, + backgroundColor: PageTheme.$secondary_color_light, + width: wp('85%'), + borderRadius: 7, + paddingVertical: 5, + paddingHorizontal: 15, + height: 50, + color: PageTheme.$accent_color2, + }, + formInputLabel: { position: 'absolute', left: 40, zIndex: 1,elevation:1, color: PageTheme.$placeholder_color, top: 15, }, + formInputLeftIcon: { position: 'absolute', left: 15, top: 15 }, + passField: { + position: 'relative', + }, + show_pass_btn: { + position: 'absolute', + top: 0, + right: 0, + width: 40, + height: 50, + alignItems: 'center', + justifyContent: 'center', + }, + keyba_view: { flex: 1, width: wp('100%'), alignItems: 'center' }, + keyba_view_qr: { flex: 1, width: wp('100%') }, + //arman + qrCodeScanner: { + fontSize: 18, fontWeight: '400', width: '78%', + color: 'black', backgroundColor: PageTheme.$secondary_color_light, padding: 10, borderRadius: 8, borderWidth: 0.3, + borderColor: '#ccc', marginVertical: 5, elevation: 1 + }, + qrCodeInputStyle: { fontWeight: 'bold', alignContent: 'center', textAlign: 'auto', color: 'black', marginTop: 10 }, + keyba_viewContent: { width: '100%', overflow: 'hidden' }, + keyba_inner_view: { flex: 1, width: wp('100%'), alignItems: 'center', position: 'relative' }, + pass_input: { + paddingRight: 40, + }, + form_label: { + color: PageTheme.$text_color, + fontSize: 14, + fontWeight: '400', + textAlign: 'left', + paddingHorizontal: 0, + fontFamily: deffontfamily, + marginBottom: 10, + + }, + otp_inputStyle: { + textAlign: 'center', + backgroundColor: PageTheme.$secondary_color_light, + width: ((wp('85%') / 4) - 10), + borderRadius: 4, + paddingVertical: 10, + paddingHorizontal: 15, + height: 50, + color: PageTheme.$accent_color2, + marginBottom: 10, + marginRight: 10, + fontSize: 25, + fontFamily: deffontfamily, + }, + verify_otp_inputStyle: { + textAlign: 'center', + backgroundColor: PageTheme.$secondary_color_light, + width: ((wp('80%') / 4) - 30), + borderRadius: 4, + paddingVertical: 10, + paddingHorizontal: 15, + height: 48, + color: PageTheme.$accent_color2, + marginBottom: 10, + marginRight: 8, + fontSize: 22, + fontFamily: deffontfamily, + }, + otp_field: { + flexDirection: 'row', + }, + otp_hiddeninput: { + display: 'none', + }, + fullwebview: { + width: '100%', + height: '100%', + flex: 1, + // borderTopLeftRadius:borderRadius,borderTopRightRadius:borderRadius, + marginBottom: 0, + }, + roundScrollWrapper: { paddingTop: 10, flex: 1, width: '100%' }, + roundScrollZIndex: { zIndex: 1,elevation:1 }, + roundScrollCon: { backgroundColor: PageTheme.$bg_color, borderTopLeftRadius: borderRadius, borderTopRightRadius: borderRadius, }, + roundScrollInner: { height: '100%', width: '100%', flex: 1, backgroundColor: PageTheme.$bg_color, borderTopLeftRadius: borderRadius, borderTopRightRadius: borderRadius, elevation: 3, paddingTop: 40, }, + + // Noticeboard + NB_IRAlertWrap: { width: '100%', backgroundColor: 'red', flexDirection: 'row', alignItems: 'center', paddingHorizontal: 10, paddingVertical: 5, borderRadius: 20, marginBottom: 5, elevation: 3, shadowOpacity: 0.2, shadowOffset: { width: 0, height: 2 } }, + NB_IRAlertTxt: { color: PageTheme.$accent_color, marginLeft: 10, fontSize: 12, width: '85%', fontFamily: deffontfamily, }, + + webViewCon: { height: '100%', flex: 1, borderTopLeftRadius: borderRadius, borderTopRightRadius: borderRadius, paddingTop: 0, }, + headetBgImage: { + height: hp('20%'), + width: wp('100%') + 2, + position: 'relative', + justifyContent: 'center', + alignItems: 'center', + }, + headerTitle: { + color: PageTheme.$accent_color, + fontSize: 20, + width: 150,//(wp('100%')-80), + textAlign: 'right', + fontFamily: deffontfamily + }, + headerImg: { + width: wp('40%'), + height: 120, + resizeMode: 'contain', + top: 28, + left: -30, + }, + headerLeftIcon: { + width: 60, + height: 60, + alignItems: 'center', + justifyContent: 'center', + marginLeft: -10, + }, + headerContent: { + flex: 1, + flexDirection: 'row', + alignItems: 'center', + justifyContent: 'space-between', + position: 'absolute', + width: wp('100%'), + paddingHorizontal: 20, + }, + teaml_name: { + color: PageTheme.$text_color, + fontSize: 14, + fontWeight: '400', + textAlign: 'left', + fontFamily: deffontfamily, + paddingLeft: 20, + paddingRight: 10, + }, + teaml_img: { + width: 20, + height: 20, + }, + teaml: { + flexDirection: 'row', + paddingHorizontal: 20, + marginBottom: 10, + borderWidth: 2, + borderColor: PageTheme.$secondary_color_light, + shadowOffset: { width: 0, height: 2 }, + borderRadius: 5, + paddingVertical: 10, + alignItems: 'center' + }, + iteml_con: { + width: '100%', + marginTop: 0, + paddingBottom: 50, + paddingHorizontal: 20, + paddingTop: 3 + }, + iteml_conR: { paddingBottom: 20, paddingTop: 10, paddingHorizontal: 10 }, + iteml_conR2: { marginBottom: 20, backgroundColor: PageTheme.$bg_color, borderRadius: 5, elevation: 5, shadowColor: '#000', shadowOffset: { width: 0, height: 3 }, shadowOpacity: 0.15 }, + storel_Con: { width: '100%', height: '100%', paddingBottom: 150, marginTop: 10 }, + Contract_storel_Con: { width: '100%', height: '100%', paddingBottom: 80 }, + listcon: { + width: '100%', + height: '100%', + + }, + storeR_listcon: { + width: '100%', + height: '100%', + paddingHorizontal: 0, + paddingBottom: 30, + }, + storelist_parentwrap: { width: '100%' }, + storeTab_Con: { width: '100%', minHeight: 40 }, + storeTab_MenuCon2: { width: '94%', marginTop: 0, marginBottom: 0, marginHorizontal: 10, borderBottomColor: PageTheme.$text_color_light2 }, + storeTab_pillActive2: { backgroundColor: '#0077C7' }, + + storeTab_MenuCon: { width: '94%', marginTop: 0, marginBottom: 0, marginHorizontal: 10, borderBottomColor: PageTheme.$text_color_light2, borderBottomWidth: 1 }, + storeTab_Menu: { alignItems: 'center', marginBottom: 10 }, + storeTab_pill: { paddingHorizontal: 20, paddingVertical: 5, borderRadius: 30, backgroundColor: '#efefef', marginRight: 7 }, + storeTab_pillText: { color: PageTheme.$text_color, fontSize: 14, fontWeight: '500', fontFamily: deffontfamily, }, + storeTab_pillActive: { backgroundColor: '#ffb020' }, + storeTab_pillActiveText: { color: '#fff' }, + // storelist card style + storel: { + flexDirection: 'row', + paddingRight: 10, + marginBottom: 10, + // borderWidth:2, + // borderColor:PageTheme.$secondary_color_light, + backgroundColor: PageTheme.$bg_color, + borderRadius: 5, + paddingVertical: 10, + alignItems: 'center', + elevation: 5, shadowColor: '#000', shadowOffset: { width: 0, height: 3 }, shadowOpacity: 0.15 + }, + storel_card_outer: { + paddingVertical: 5, paddingHorizontal: 10, position: 'relative', width: '100%' + }, + storel_card: { + flexDirection: 'row', alignItems: 'center', + }, + storel_card_content: { marginHorizontal: 5, width: '100%', flexDirection: 'row', alignItems: 'baseline' }, + storel_card_title: { + fontSize: 15, + color: PageTheme.$text_color, + fontWeight: '500', + fontFamily: deffontfamily, + }, + storel_card_subtitle: { marginLeft: 10, paddingLeft: 10, borderLeftColor: PageTheme.$text_color_light, borderLeftWidth: 1, }, + storel_card_subtitleTxt: { fontSize: 12, color: PageTheme.$text_color_light, fontFamily: deffontfamily }, + storel_details: { + // flex:1, + paddingHorizontal: 5, + }, + storel_code: { flexDirection: 'row', marginTop: 0, paddingTop: 5, width: '100%' }, + storel_codeCon: { marginRight: 10, flexDirection: 'row', alignItems: 'center' }, + storel_codeConAddr: { alignItems: 'flex-start' }, + storel_codeIcon: { fontSize: 20, marginRight: 10, fontFamily: deffontfamily }, + storel_codeBorder: { borderRightColor: PageTheme.$secondary_color_dark, borderRightWidth: 1 }, + storel_codeBorderTop: { borderTopColor: PageTheme.$secondary_color_light, borderTopWidth: 1, }, + storel_codeBorderBottom: { borderBottomColor: PageTheme.$secondary_color_light, borderBottomWidth: 1, paddingBottom: 4, marginBottom: 3 }, + storel_codeLbl: { fontSize: 13, color: PageTheme.$text_colorblack, marginRight: 5, flexWrap: 'wrap', fontWeight: '600', fontFamily: deffontfamily, }, + storel_codeText: { fontSize: 12, color: PageTheme.$text_color, marginRight: 5, fontFamily: deffontfamily, }, + storel_codeTextAddr: { width: '80%' }, + storel_usWrap: { width: '100%', position: 'relative', justifyContent: 'center', paddingVertical: 10, }, + storel_usCon: { flexDirection: 'row', alignItems: 'center' }, + storel_usConBtn: { borderRadius: 30, width: 140, position: 'relative', backgroundColor: PageTheme.$secondary_color_light, paddingHorizontal: 5, paddingVertical: 6, elevation: 3, shadowOpacity: 0.2, shadowOffset: { width: 0, height: 2 } }, + storel_usConBtn2: { width: 150, }, + storel_usBtnText: { paddingRight: 5, marginRight: 5, color: PageTheme.$text_color }, + storel_usBtnRemoveIcon: { backgroundColor: '#fff', position: 'absolute', top: 0, bottom: 0, right: 0, borderTopRightRadius: 30, borderBottomRightRadius: 30, paddingHorizontal: 10, alignItems: 'center', justifyContent: 'center' }, + storel_usText: { marginLeft: 5, color: PageTheme.$text_color, fontSize: 13, fontFamily: deffontfamily }, + storel_geotag_btn: { position: 'absolute', top: -15, right: -10, width: 50, height: 50, borderRadius: 25, alignItems: 'center', justifyContent: 'center' }, + storel_CheckOutBtn: { position: 'absolute', right: 0, borderRadius: 30, backgroundColor: PageTheme.$primary_color, paddingHorizontal: 15, paddingVertical: 6, elevation: 3, shadowOpacity: 0.2, shadowOffset: { width: 0, height: 2 } }, + storel_cancelBtn: {}, + storel_CheckOutBtnText: { color: PageTheme.$accent_color, fontSize: 14, fontWeight: '500', fontFamily: deffontfamily }, + storel_IRBtnWrap: { width: '100%' }, + storel_uploadIRBtn: { borderRadius: 30, width: 150, alignItems: 'center', backgroundColor: PageTheme.$primary_color, paddingHorizontal: 5, paddingVertical: 6, elevation: 3, shadowOpacity: 0.2, shadowOffset: { width: 0, height: 2 } }, + storel_uploadIRBtnText: { color: PageTheme.$accent_color }, + + // storel searchbar + storel_searchbar: { marginTop: 10, marginHorizontal: 10, backgroundColor: PageTheme.$secondary_color_light, height: 40, borderRadius: 4, paddingHorizontal: 10, elevation: 1, shadowColor: '#000', shadowOpacity: 0.15, shadowOffset: { width: 0, height: 2 }, flexDirection: 'row' }, + storel_searchbar2: { marginHorizontal: 10, backgroundColor: PageTheme.$secondary_color_light, height: 40, borderRadius: 4, paddingHorizontal: 10, elevation: 1, shadowColor: '#000', shadowOpacity: 0.15, shadowOffset: { width: 0, height: 2 }, flexDirection: 'row' }, + storel_searchInput: { width: '86%', fontSize: 13, color: PageTheme.$text_color, fontFamily: deffontfamily, }, + storel_searchBtn: { width: 40, height: 40, top: 0, right: 0, position: 'absolute', backgroundColor: PageTheme.$primary_color, borderTopRightRadius: 4, borderBottomRightRadius: 4, alignItems: 'center', justifyContent: 'center' }, + storel_searchBtnIcon: { marginTop: -2 }, + + // color description box + colorDescriptionWrap: { marginTop: 5, marginHorizontal: 10, backgroundColor: PageTheme.$bg_color, paddingVertical: 5, borderRadius: 4, paddingHorizontal: 10, flexDirection: 'row', elevation: 1, shadowColor: '#000', shadowOpacity: 0.2, shadowOffset: { width: 0, height: 2 } }, + colorBoxCon: { flexDirection: 'row', alignItems: 'center', marginRight: 20 }, + colorBox: { elevation: 1, shadowColor: '#000', borderRadius: 4, shadowOpacity: 0.15, shadowOffset: { width: 0, height: 2 }, width: 20, height: 20, }, + colorBox1: { backgroundColor: PageTheme.$fifth_color, }, + colorBox2: { backgroundColor: PageTheme.$secondary_color_light, }, + colorDesc: { fontSize: 12, color: PageTheme.$text_color, marginLeft: 5, flexWrap: 'wrap', fontFamily: deffontfamily }, + + + // Page header + pageHdrWrap: { position: 'absolute', top: STATUSBAR_HEIGHT + (70 + (Platform.OS == 'ios' ? 0 : 5)), zIndex: 9, elevation: 9, marginHorizontal: 10, justifyContent: 'center', backgroundColor: PageTheme.$primary_color, paddingVertical: 5, borderRadius: 20, paddingHorizontal: 10, flexDirection: 'row', flexWrap: 'wrap' }, + pageHdrWrapText: { textAlign: 'center', fontSize: 13, color: PageTheme.$accent_color, flexWrap: 'wrap', fontFamily: deffontfamily }, + + + // storelist row style + storelR: { flexDirection: 'row', paddingRight: 10, marginBottom: 5, paddingBottom: 5, paddingTop: 10, borderBottomColor: PageTheme.$fourth_color, borderBottomWidth: 1 }, + storelR_last: { borderBottomWidth: 0, paddingBottom: 0, marginBottom: 0 }, + + + // dynamic storelist style + dstorel_card_outer: { + paddingVertical: 0, paddingHorizontal: 10, width: '100%', + }, + dstorel_row: { flexDirection: 'row', width: '100%', paddingBottom: 5, paddingTop: 5, borderBottomWidth: 1, borderBottomColor: PageTheme.$secondary_color_light }, + dstorel_row_last: { borderBottomWidth: 0 }, + dstorel_codeLbl: { fontSize: 12, color: PageTheme.$secondary_color_dark, marginRight: 5, fontFamily: deffontfamily }, + dstorel_codeText: { fontSize: 12, fontWeight: '400', color: PageTheme.$text_color, marginRight: 5, fontFamily: deffontfamily }, + dstorel_codeSep: { fontSize: 12, color: PageTheme.$text_color, marginRight: 5, fontFamily: deffontfamily }, + dstorel_codeCon: { marginRight: 0, flexDirection: 'row', alignItems: 'center' }, + + // storePhotos + storePhotosl_card: { + paddingVertical: 7, + paddingHorizontal: 10, + marginHorizontal: 10, + marginBottom: 5, + flexDirection: 'row', + borderRadius: 5, + borderWidth: 2, + borderColor: PageTheme.$secondary_color_light, + alignItems: 'center', + }, + storePhotosl_card_details: { width: 100, paddingLeft: 10, marginRight: 10, }, + storePhotosl_card_title: { + fontSize: 15, + color: PageTheme.$text_color, + fontWeight: '500', + fontFamily: deffontfamily + }, + storePhotosl_card_subtitle: { fontSize: 11, color: PageTheme.$text_color_light, fontWeight: '400', fontFamily: deffontfamily }, + storePhotosl_card_img: { width: 50, height: 50 }, + storePhotosl_card_remove_btn: { position: 'absolute', right: 10, }, + // daily menu card style + dailym_scroll_con: { padding: 10, alignItems: 'center', width: '100%' }, + dailym_scroll: { width: '100%' }, + dailym_bgcolor1: { backgroundColor: '#e0f9a5' }, + dailym_bgcolor2: { backgroundColor: '#ffd667' }, + dailym_bgcolor3: { backgroundColor: '#c2ddff' }, + dailym_bgcolor4: { backgroundColor: '#d9c2ff' }, + dailym_card: { + paddingHorizontal: 20, + marginBottom: 10, + borderRadius: 5, + paddingVertical: 10, + justifyContent: 'center', + width: '100%', + height: 100, + elevation: 5, shadowColor: '#000', shadowOffset: { width: 0, height: 2 }, + }, + dailym_con: { flexDirection: 'row', alignItems: 'center' }, + dailym_photo: { + width: 100, + height: 80, + // marginTop:-20, + }, + dailym_title: { + textAlign: 'left', + color: PageTheme.$text_color, + fontSize: 20, + width: 150, + fontWeight: '500', + marginLeft: 20, + fontFamily: deffontfamily + }, + dailym_done: { position: 'absolute', width: 31, height: 31, right: 15, top: 15, borderRadius: 15, elevation: 3, shadowColor: '#000' }, + dailym_done_icon: {}, + //download screen + download_scroll_con: { flex: 1, padding: 10, alignItems: 'center', width: '100%', justifyContent: 'center' }, + download_scroll: { flex: 1, width: '100%' }, + downloadbtn: { + paddingVertical: 10, + paddingHorizontal: 20, + borderRadius: 20, + backgroundColor: PageTheme.$primary_color, + }, + downloadbtn_label: { + textAlign: 'center', + color: PageTheme.$accent_color, + fontWeight: '500', + }, + // storephotos form + sform_con: { + paddingVertical: 10, + paddingHorizontal: 20, + borderBottomColor: PageTheme.$secondary_color_light, + borderBottomWidth: 1, + }, + sform_con2: { paddingHorizontal: 10 }, + sform_hd: { + textAlign: 'center', + color: PageTheme.$secondary_color_dark, + fontWeight: '500', + fontSize: 16, + marginBottom: 10, + fontFamily: deffontfamily + }, + sform_hd2: { + textAlign: 'left', + width: '100%', + paddingVertical: 10, + paddingHorizontal: 20, + color: PageTheme.$secondary_color_dark, + fontWeight: '500', + fontSize: 16, + marginBottom: 10, + fontFamily: deffontfamily + }, + sform_group: { + paddingHorizontal: 10, + }, + sform_group2: { + paddingHorizontal: 0, + marginBottom: 10, + }, + sform_50: { + width: '50%', + marginHorizontal: 5, + }, + sform_100: { + width: '100%', + marginHorizontal: 5, + }, + sform_flex: { flexDirection: 'row', alignItems: 'center' }, + sform_label: { + textAlign: 'left', + color: PageTheme.$text_color_dark, + fontWeight: '500', + fontSize: 14, + width: '40%', + marginBottom: 10, + fontFamily: deffontfamily + }, + sform_selectStyle: { + textAlign: 'left', + backgroundColor: PageTheme.$secondary_color_light, + width: '60%', + borderRadius: 20, + paddingVertical: 0, + paddingHorizontal: 0, + padding: 0, + height: 30, + color: PageTheme.$accent_color2, + }, + sform_label2: { + textAlign: 'left', + color: PageTheme.$text_color_dark, + fontWeight: '500', + fontSize: 14, + width: '100%', + height: 25, + marginBottom: 0, + padding: 0, + fontFamily: deffontfamily + }, + sform_label3: { + textAlign: 'left', + color: PageTheme.$text_color_dark, + fontWeight: '500', + fontSize: 14, + marginBottom: 10, + padding: 0, + fontFamily: deffontfamily + }, + sform_selectStyle2: { + textAlign: 'left', + width: wp('40%'), + backgroundColor: PageTheme.$secondary_color_light, + borderRadius: 20, + paddingVertical: 0, + paddingHorizontal: 0, + padding: 0, + color: PageTheme.$accent_color2, + }, + sform_row: { + flexDirection: 'row', + }, + sform_row2: { + flexDirection: 'row', + width: wp('100%'), + paddingHorizontal: 10, + }, + sform_inputStyle: { + textAlign: 'left', + width: wp('40%'), + backgroundColor: PageTheme.$secondary_color_light, + paddingVertical: 5, + paddingHorizontal: 10, + color: PageTheme.$accent_color2, + }, + sform_inputStyle2: { + textAlign: 'left', + width: '100%', + backgroundColor: PageTheme.$secondary_color_light, + paddingVertical: 5, + paddingHorizontal: 10, + color: PageTheme.$accent_color2, + }, + + sform_selectItem: { borderBottomWidth: 1, borderBottomColor: PageTheme.$text_color }, + sform_selectedItem: { backgroundColor: PageTheme.$secondary_color_light, }, + sform_btn_con: { + width: '100%', + marginTop: 10, + marginBottom: 0, + alignItems: 'center', + justifyContent: 'center', + flexDirection: 'row' + }, + fixedbtn: { marginBottom: 20 }, + sform_btn: { + paddingVertical: 10, + paddingHorizontal: 20, + borderRadius: 20, + backgroundColor: PageTheme.$primary_color, + alignItems: 'center', + flexDirection: 'row', + justifyContent: 'center', + minWidth: 150, + }, + sform_btn_icon: { + marginRight: 5, + }, + sform_btn_text: { + textAlign: 'center', + color: PageTheme.$accent_color, + fontWeight: '500', + }, + sform_pic_row: { flexDirection: 'row', width: '100%', marginTop: 10, justifyContent: 'center' }, + sform_pic_row2: { justifyContent: 'flex-start' }, + sform_pic_con: { width: (wp('33%') - 25), marginHorizontal: 5, display: 'flex' }, + capture_image_btn: { width: 80, height: 40, alignItems: 'center', flexDirection: 'row', justifyContent: 'center', alignSelf: 'center' }, + store_img: { + width: '100%', height: 90, borderRadius: 5, marginBottom: 5, + backgroundColor: '#b5b5b5' + }, + csku_scroll_con: { padding: 10, width: '100%' }, + sf_datePicker_text: { + textAlign: 'left', + width: wp('40%'), + backgroundColor: PageTheme.$secondary_color_light, + paddingVertical: 5, + paddingHorizontal: 10, + color: PageTheme.$accent_color2, + }, + sf_datePicker: { position: 'absolute', width: 21, height: 21, right: 25, top: 3 }, + sf_datePicker_con: { position: 'relative' }, + select_ht: { height: 53 }, + // report menu + reportMenu_con: { paddingHorizontal: 20, paddingVertical: 20, }, + reportMenu_hd: { + textAlign: 'center', + width: '100%', + paddingVertical: 10, + paddingHorizontal: 20, + color: PageTheme.$secondary_color_dark, + fontWeight: '500', + fontSize: 20, + marginBottom: 10, + }, + reportMenu: { marginTop: 10 }, + reportMenu_item: { + paddingVertical: 10, + paddingHorizontal: 20, + borderRadius: 5, + minHeight: 50, + alignItems: 'center', + flexDirection: 'row', + justifyContent: 'center', + minWidth: 150, + marginBottom: 10, + }, + reportMenu_item_bg1: { backgroundColor: PageTheme.$primary_color, }, + reportMenu_item_bg2: { backgroundColor: '#ffd667', }, + reportMenu_item_text: { + textAlign: 'center', + color: PageTheme.$accent_color, + fontWeight: '500', + fontSize: 16, + fontFamily: deffontfamily + }, + + + + + // loaderSyle + loaderBackdrop: { + position: 'absolute', + width: '100%', + height: '100%', + backgroundColor: '#00000097', + padding: 10, + flex: 1, + flexDirection: 'row', + alignItems: 'center', + justifyContent: 'center', + top: 0, + zIndex: 9999, + elevation: 9999, + }, + loaderBackdrop2: { + position: 'absolute', + width: '100%', + height: '100%', + backgroundColor: '#00000097', + padding: 10, + flex: 1, + flexDirection: 'row', + alignItems: 'center', + justifyContent: 'center', + top: 0, + zIndex: 99999, + elevation: 99999, + }, + loaderCon: { + backgroundColor: PageTheme.$bg_color, + width: '80%', + height: 50, + borderRadius: 4, + elevation: 10, + shadowColor: '#000', + shadowOpacity: 0.5, + shadowOffset: { width: 0, height: 3 }, + flexDirection: 'row', + alignItems: 'center', + justifyContent: 'center', + + }, + download_loaderCon: { backgroundColor: PageTheme.$accent_color, width: '80%', borderRadius: 4, elevation: 10, shadowColor: '#000', shadowOpacity: 0.5, shadowOffset: { width: 0, height: 3 }, padding: 10, }, + download_Title: { color: PageTheme.$text_color, fontSize: 16, fontWeight: '500', marginBottom: 7, fontFamily: deffontfamily, }, + download_count: { color: PageTheme.$text_color_light, fontSize: 13, fontWeight: '400', fontFamily: deffontfamily, }, + download_subTitle: { color: PageTheme.$text_color_dark, fontSize: 12, fontWeight: '400', fontFamily: deffontfamily, }, + downloadProgress: { position: 'relative', marginVertical: 7 }, + downloadProgress_bg: { height: 10, borderRadius: 10, backgroundColor: PageTheme.$text_color_light2, width: '100%' }, + downloadProgress_filled: { position: 'absolute', top: 0, height: 10, borderRadius: 10, backgroundColor: PageTheme.$primary_color, width: '0%' }, + spinnerCon: { position: 'relative' }, + downloadModal_spin: { position: 'absolute', top: 10, right: 10, }, + downloadModal_btnWrap: { flexDirection: 'row', justifyContent: 'center' }, + downloadModal_OkBtn: { + paddingVertical: 5, + paddingHorizontal: 25, + borderRadius: 20, + backgroundColor: PageTheme.$primary_color, + alignItems: 'center', + flexDirection: 'row', + justifyContent: 'center', + marginTop: 10, + }, + downloadModal_OkBtnText: { color: PageTheme.$accent_color, fontSize: 16, fontFamily: deffontfamily }, + spinner: {}, + spinnerInner: { position: 'absolute', top: 4, left: 4 }, + spinnerInner2: { position: 'absolute', top: 2, left: 2 }, + loaderTitle: { + fontSize: 16, + color: PageTheme.$text_color, + fontFamily: deffontfamily, + marginLeft: 30, + }, + + + // download APK + downloadAPk_Title: { color: PageTheme.$text_color, fontSize: 16, fontWeight: '500', marginBottom: 7, width: '100%', textAlign: 'center', fontFamily: deffontfamily }, + downloadAPk_subtitleWrap: { flexDirection: 'row', marginBottom: 10, alignItems: 'center', justifyContent: 'center' }, + downloadAPk_subTitle: { color: PageTheme.$text_color_dark, fontSize: 12, fontWeight: '400', textAlign: 'center', fontFamily: deffontfamily }, + downloadAPkProgress: { position: 'relative', marginVertical: 7, alignItems: 'center', justifyContent: 'center' }, + downloadAPkProgress_gif: { transform: [{ scale: 0.6 }], width: '100%', marginBottom: 5 }, + downloadAPKModal_spin: { marginRight: 5 }, + + // store info + storeInfo_wrap: { borderRadius: 10 }, + dm_storeInfo: { width: wp('100%'), backgroundColor: PageTheme.$accent_color, padding: 10, borderRadius: 4, borderBottomWidth: 2, borderBottomColor: PageTheme.$secondary_color_light, marginTop: 10, paddingBottom: 20 }, + dm_storeInfo_title: { color: PageTheme.$text_color_dark, fontWeight: '500', fontSize: 16, fontFamily: deffontfamily }, + dm_storeInfo_subtitle: { color: PageTheme.$text_color_light, fontWeight: '400', fontSize: 13, fontFamily: deffontfamily }, + checkinbtn: { + paddingVertical: 10, + paddingHorizontal: 20, + borderRadius: 20, + backgroundColor: PageTheme.$primary_color, + alignItems: 'center', + flexDirection: 'row', + justifyContent: 'center', + minWidth: 150, + marginTop: 40, + }, + checkinbtn_text: { color: PageTheme.$accent_color, fontSize: 16, fontFamily: deffontfamily }, + // selfie box: + selfie_preview_con: { width: wp('100%'), paddingHorizontal: 20, alignItems: 'center', justifyContent: 'center' }, + selfie_preview_hd: { textAlign: 'left' }, + selfie_preview: { flexDirection: 'row', alignItems: 'center' }, + selfiep_img: { width: 100, height: 100, backgroundColor: '#b5b5b5' }, + take_selfie_btn: { + paddingVertical: 10, + paddingHorizontal: 20, + borderRadius: 20, + backgroundColor: PageTheme.$primary_color, + alignItems: 'center', + flexDirection: 'row', + justifyContent: 'center', + minWidth: 150, + marginLeft: 40, + }, + take_selfie_btn_text: { color: PageTheme.$accent_color, fontSize: 16, marginLeft: 10, fontFamily: deffontfamily }, + + // checkin info + checkinMainCon: { width: '100%' }, + checkinInfo: { width: '100%', paddingBottom: 10, marginBottom: 10, borderBottomColor: PageTheme.$secondary_color_light, borderBottomWidth: 2, }, + checkinInfo_hd: { color: PageTheme.$secondary_color_dark, fontSize: 15, marginRight: 10, fontFamily: deffontfamily }, + checkinInfo_hdr: { flexDirection: 'row', alignItems: 'center', marginBottom: 5, }, + checkinInfo_timecon: { flexDirection: 'row', }, + checkinInfo_timeinner: { marginLeft: 10, }, + checkinInfo_img: { width: 120, height: 150, backgroundColor: '#b5b5b5' }, + checkinInfo_time: { color: PageTheme.$text_color, fontSize: 14, fontFamily: deffontfamily }, + checkinInfo_btnCon: { flex: 1, alignItems: 'center' }, + goto_storemenu_btn: { flexDirection: 'row', marginTop: 20, borderColor: PageTheme.$primary_color, borderWidth: 2, borderRadius: 20, paddingHorizontal: 10, height: 30, alignItems: 'center' }, + goto_storemenu_btn_text: { color: PageTheme.$primary_color, fontSize: 14, marginRight: 20, fontFamily: deffontfamily }, + statusIcon: { position: 'absolute', top: 0, right: 0 }, + storeintro_scroll: { width: '100%', }, + storeintro_scrollcon: { + width: '100%', + paddingBottom: 10, + paddingHorizontal: 5, + }, + store_audit_img_con: { width: '100%', marginTop: 10, height: 150, marginHorizontal: 5, alignSelf: 'center', alignItems: 'center', justifyContent: 'center', position: 'relative', backgroundColor: '#f5f5f5' }, + store_audit_image: { width: '100%', height: 150, maxWidth: 200, backgroundColor: '#f5f5f5' }, + store_audit_pickimg_btn: { position: 'absolute', right: 5, top: 0, padding: 10 }, + clocktimer: { position: "absolute", right: 0, top: 10, flexDirection: 'row' }, + clocktimerWrap: { marginTop: 10, marginLeft: 10, flexDirection: 'row' }, + clocktimerRow: { flexDirection: 'row', alignItems: 'center', backgroundColor: PageTheme.$accent_color, width: 'auto', paddingHorizontal: 15, paddingVertical: 5, borderRadius: 30, width: 200, justifyContent: 'center' }, + clocktimerText: { color: PrimaryTheme.$primary_color, fontSize: 12, marginLeft: 5, fontWeight: '400', fontFamily: deffontfamily, }, + NB_quickL_IconS2: { height: 47, width: 47, borderRadius: 50, padding: 2, alignItems: 'center', backgroundColor: 'rgba(255, 255, 255, 0.9)' }, + // QAD styles + qad_bg: { flex: 1, alignItems: 'center', position: 'relative' }, + qad_hdr: { alignItems: 'center', width: '100%', paddingTop: 20, paddingBottom: 10, paddingLeft: 10, paddingRight: 10, position: 'absolute', top: 0, left: 0 }, + qad_text: { color: PageTheme.$accent_color, fontSize: 18, fontWeight: '500', textAlign: 'center', marginBottom: 5, textTransform: 'capitalize', fontFamily: deffontfamily }, + qad_subtext: { color: PageTheme.$accent_color, fontSize: 13, fontWeight: '400', textAlign: 'center', marginBottom: 5, fontFamily: deffontfamily }, + qadPopUp: { flex: 1, width: wp('100%'), marginTop: 160, backgroundColor: PageTheme.$accent_color, borderTopLeftRadius: 20, borderTopRightRadius: 20, elevation: 5, shadowOpacity: 1, shadowColor: '#323232', alignItems: 'center', padding: 20 }, + qadPopUpInner: { flex: 1 }, + qadScrollCon: { flex: 1, width: '100%', padding: 0, height: 420 }, + qadInnerCon: { alignItems: "center", position: 'relative' }, + + // QAD Progess bar + linear_progressBarWrapper: { backgroundColor: '#fff', paddingHorizontal: 10, paddingVertical: 10, flexDirection: 'row', width: '100%', position: 'relative', elevation: 5, borderRadius: 15, alignItems: 'center' }, + linear_progressBar: { width: '87%', marginRight: 10, position: 'relative' }, + linear_progressBar_bg: { width: '100%', borderRadius: 5, height: 10, backgroundColor: PageTheme.$text_color_light2 }, + linear_progressBar_filled: { width: '0%', borderRadius: 5, height: 10, backgroundColor: PageTheme.$primary_color, marginRight: 10, position: 'absolute', top: 0, left: 0 }, + linear_progressBarText: { paddingLeft: 10, borderLeftWidth: 1, borderLeftColor: PageTheme.$text_color_light, color: PageTheme.$text_color, fontFamily: deffontfamily }, + + + // QAD Form + qad_form: { marginTop: 10 }, + qad_questions: { width: '100%', display: 'none' }, + qad_questionsShow: { display: 'flex' }, + qad_qtnText: { color: PageTheme.$text_color, fontSize: 17, fontWeight: '600', fontFamily: deffontfamily }, + qad_optionsCon: { marginTop: 20, paddingHorizontal: 10 }, + qad_optionBtn: { backgroundColor: PageTheme.$secondary_color_light, paddingHorizontal: 15, paddingVertical: 12, marginBottom: 10, borderRadius: 10, elevation: 2, fontFamily: deffontfamily }, + qad_optionBtnText: { fontSize: 12, color: PageTheme.$text_colorblack, fontWeight: '600', fontFamily: deffontfamily }, + qad_qtnBtnsGrp: { width: wp('87%'), marginTop: 20, position: 'relative', height: 50, padding: 10 }, + qad_qtnBtn: { backgroundColor: PageTheme.$primary_color, elevation: 6, shadowColor: PageTheme.$primary_color, shadowOffset: { width: 0, height: 2 }, borderRadius: 40, width: '35%', height: 40, display: 'flex', alignItems: 'center', justifyContent: 'center' }, + qad_qtnBtnText: { color: PageTheme.$accent_color, textAlign: 'center', fontSize: 15, padding: 10, fontFamily: deffontfamily }, + qad_btnSubmitCon: { position: 'absolute', right: 0, width: '35%' }, + qad_btnSubmit: { elevation: 6, shadowColor: PageTheme.$primary_color, shadowOffset: { width: 0, height: 2 }, borderRadius: 40, width: '100%', height: 40, display: 'flex', alignItems: 'center', justifyContent: 'center' }, + qad_btnBack: { position: 'absolute', left: 0 }, + qad_btnBackText: { fontFamily: deffontfamily }, + qad_btnNext: { position: 'absolute', right: 0 }, + qad_btnNextText: { fontFamily: deffontfamily }, + qad_timer_wrapper: { flexDirection: 'row', marginTop: 5, alignItems: 'center', paddingHorizontal: 10 }, + qad_timerText: { marginLeft: 10, color: PageTheme.$text_color, fontSize: 16, marginRight: 10, fontFamily: deffontfamily }, + timerProgressBar: { position: 'relative', flex: 1, height: 10, overflow: "hidden" }, + timerProgressBar_bg: { height: 10, borderRadius: 10, backgroundColor: PageTheme.$text_color_light2, width: '100%' }, + timerProgressBar_filled: { height: 10, borderRadius: 10, backgroundColor: 'green', position: 'absolute', top: 0 }, + answerRemark: { padding: 10, backgroundColor: '#bdebbd', borderRadius: 10, marginTop: 5 }, + answerRemarkText: { fontSize: 14, color: 'green', fontFamily: deffontfamily }, + remarkRedbg: { backgroundColor: '#fdc0c0' }, + remarkRed: { color: 'red' }, + + // forgetMpin + forgetMpinWrap: { width: wp('80%'), paddingVertical: 10, position: 'relative', marginTop: 10 }, + forgetMpinBtn: { position: 'absolute', right: 0, top: 0 }, + forgetMpinText: { color: PageTheme.$text_color_light, fontFamily: deffontfamily }, + + // modalWrapper + modalWrapper: { position: 'absolute', top: 0, left: 0, width: wp('100%'), height: hp('100%'), backgroundColor: '#000', zIndex: 999,elevation: 999 }, + downloadModalWrapper: {}, + + // attendance_menu + attmenu_listcon: { width: wp('100%'), }, + attmenu_list: { width: wp('100%'), marginTop: 10, paddingBottom: 10, paddingHorizontal: 20, flexDirection: 'row', flexWrap: 'wrap' }, + attendance_menu_outer: { width: wp('50%') - 30, marginBottom: 20, }, + attendance_menu_first: { marginRight: 20, }, + attendance_menu: { padding: 10, borderRadius: 7, elevation: 3, height: 120, alignItems: 'center' }, + attendance_menu_inner: { alignItems: 'center', height: '60%', justifyContent: 'center' }, + attendance_Icon: { width: 50, height: 50 }, + attendance_menu_image: { height: 50, }, + attendance_menu_title: { fontSize: 16, fontWeight: '600', color: PageTheme.$text_color, marginTop: 10, textAlign: 'center', fontFamily: deffontfamily }, + + // backgroundVideo + backgroundVideo: { position: 'absolute', top: 0, bottom: 0, left: 0, right: 0 }, + + // no download data style + nodownloaddata_con: { width: '100%', height: '100%', alignItems: 'center', justifyContent: 'center' }, + nodownloaddata_row: { width: '100%', height: '100%', alignItems: 'center', justifyContent: 'center' }, + nodownloaddata_text: { fontSize: 15, fontWeight: "500", color: PageTheme.$text_color_light, textAlign: 'center', marginTop: 10, fontFamily: deffontfamily }, + + // no data available + noDataCon: { width: '100%', height: 400, alignItems: 'center', justifyContent: 'center' }, + noDataText: { fontSize: 15, fontWeight: "500", color: PageTheme.$text_color_light, textAlign: 'center', fontFamily: deffontfamily, }, + + // geotag screen + geotag_scroll: { justifyContent: 'center', padding: 10, paddingBottom: 10, paddingTop: 5 }, + geotag_scroll_pb: { paddingBottom: 50, }, + gtag_sImageWrap: { position: 'absolute', bottom: -60, alignItems: 'center', left: 0, right: 0, width: '100%' }, + gtag_sImage_View: { position: 'absolute', top: -60, elevation: 1, backgroundColor: '#fff', borderRadius: 15, padding: 3, shadowOpacity: 0.1, shadowColor: '#000', shadowOffset: { width: 0, height: 2 } }, + gtag_sImage_View2: { position: 'absolute', top: -60, elevation: 1, backgroundColor: '#fff', borderRadius: 15, paddingleft: 10, shadowOpacity: 0.1, shadowColor: '#000', shadowOffset: { width: 0, height: 2 } }, + gTag_sImageBtn: { position: 'absolute', zIndex: 2,elevation: 2, top: 5, backgroundColor: PageTheme.$red, borderRadius: 20, padding: 9, shadowOpacity: 0.25, shadowColor: PageTheme.$red, shadowOffset: { width: 0, height: 2 } }, + gtag_sImagelbl: { alignItems: 'center', paddingHorizontal: 20, paddingTop: 30, paddingBottom: 10, borderRadius: 10, backgroundColor: PageTheme.$bg_color, elevation: 2, shadowOpacity: 0.2, shadowColor: '#000', shadowOffset: { width: 0, height: 2 } }, + gtag_sImagelblText: { fontSize: 14, fontWeight: '500', color: PageTheme.$text_color, zIndex: 1,elevation:1, marginTop: 20, fontFamily: deffontfamily, }, + gTag_btnWrap: { alignItems: 'center', marginTop: 40 }, + gTag_btnWrapCI: { marginTop: 40, }, + gTag_btnWrapCI1: { marginTop: 20, }, + gTag_Image: { width: 80, height: 80, borderRadius: 13 }, + gTag_distanceAway: { paddingHorizontal: 13, paddingVertical: 7, borderRadius: 6, backgroundColor: '#f5aeae78', width: '90%' }, + gTag_distanceAwayLbl: { fontSize: 14, color: 'red', textAlign: 'center', fontWeight: '500', fontFamily: deffontfamily }, + + gTag_distanceAway1: { paddingHorizontal: 13, paddingVertical: 7, borderRadius: 6, backgroundColor: '#c9efd9', width: '90%' }, + gTag_distanceAwayLbl1: { fontSize: 14, color: 'green', textAlign: 'center', fontWeight: '500', fontFamily: deffontfamily }, + + android_flipIMageView: {}, + // geotag_Page:{marginTop:StatusBar.currentHeight+10,position:'relative'}, + // geotag_BackBtn:{position:'absolute',top:20,left:20,backgroundColor:PageTheme.$primary_color,padding:10,borderRadius:40,elevation:4,shadowColor:'#676767'}, + // geotag_BackBtnIcon:{}, + mapCard: { + height: hp('100%') - (380 + EXTRA_SPACE), + + borderRadius: 20, // ✅ Rounded corner here + backgroundColor: '#fff', + + // Android shadow + elevation: 6, + + // iOS shadow + shadowColor: '#000', + shadowOpacity: 0.2, + shadowOffset: { width: 0, height: 3 }, + shadowRadius: 6, + + // ⚠️ Important: + // Android me hidden nahi karna (warna overlay hide ho jayega) + overflow: 'hidden', + }, + + // map + mapWrapperStoreInfo: { width: '100%', height: hp('80%') - (350 + EXTRA_SPACE), backgroundColor: '#fff', borderRadius: 15, overflow: 'hidden', elevation: 5, shadowColor: '#000', shadowOpacity: 0.6, shadowOffset: { width: 0, height: 2 } }, + mapStyleStorInfo: { width: '100%', height: '90%', marginVertical: 5 }, + mapWrapperStoreInfoSmall: { height: hp('80%') - (380 + EXTRA_SPACE) }, + mapWrapCon: { marginBottom: 10, position: 'relative' }, + mapWrapConIOS: { backgroundColor: '#fff', padding: 1, borderRadius: 15, elevation: 5, shadowColor: '#000', shadowOpacity: 0.2, shadowOffset: { width: 0, height: 2 } }, + mapWrapper: { width: '100%', height: hp('100%') - (350 + EXTRA_SPACE), backgroundColor: '#fff', borderRadius: 15, overflow: 'hidden', elevation: 5, shadowColor: '#000', shadowOpacity: 0.6, shadowOffset: { width: 0, height: 2 } }, + mapWrapperView: { height: hp('100%') - (310 + EXTRA_SPACE) }, + mapWrapperSmall: { height: hp('100%') - (380 + EXTRA_SPACE) }, + + mapWrapperSmall1: { height: hp('100%') - (230 + EXTRA_SPACE) }, + + mapStyle: { width: '100%', height: '100%' }, + customMapStyle: { borderRadius: 10, }, + + // Store Visited Modal Style + storelVisitM_Style: { alignItems: 'center' }, + storelVisitM_titleStyle: { textAlign: 'center', marginTop: 20, marginBottom: 20, fontFamily: deffontfamily, }, + storelVisitM_options: { flexDirection: 'row', marginBottom: 20, justifyContent: 'space-evenly', width: '80%' }, + storelVisitM_op_btn: { backgroundColor: PageTheme.$primary_color, color: PageTheme.$accent_color, paddingHorizontal: 20, paddingVertical: 6, borderRadius: 20, minWidth: 70, fontFamily: deffontfamily, }, + storelVisitM_op_btnText: { textAlign: 'center', color: PageTheme.$accent_color, fontFamily: deffontfamily }, + + // Store Daily Menu data Loss popup + storeDaily_titleStyle: { textAlign: 'center', marginTop: 20, fontSize: 15, fontFamily: deffontfamily }, + + + + // Download Error Modal + dErrM_Style: { alignItems: 'center' }, + dErrMsg: { textAlign: 'center', marginTop: 20, marginBottom: 5, color: PageTheme.$red, fontSize: 14, fontFamily: deffontfamily, }, + dErrSubMsg: { fontSize: 14, fontWeight: '500', marginBottom: 10, color: PageTheme.$red, fontFamily: deffontfamily, }, + dErrDetail: { fontSize: 12, fontWeight: '400', marginBottom: 10, color: PageTheme.$text_color_dark, fontFamily: deffontfamily, }, + + + // MPin MOdal + MPinM_Style: { alignItems: 'center', paddingTop: 20, width: '90%' }, + MPinM_title_Style: { textAlign: 'center', marginBottom: 10, fontSize: 15, color: PageTheme.$text_color, fontWeight: '500', fontFamily: deffontfamily }, + MPinM_subtitle_Style: { textAlign: 'center', fontSize: 13, marginLeft: 5, color: PageTheme.$red, fontWeight: '400', fontFamily: deffontfamily }, + MPinM_subtitle_Style2: { textAlign: 'center', fontSize: 13, marginBottom: 10, color: PageTheme.$red, fontWeight: '400', fontFamily: deffontfamily }, + MPinM_subtitleCon: { flexDirection: 'row', marginLeft: -5, marginBottom: 5, justifyContent: 'center', alignItems: 'center' }, + MPinM_con: { marginBottom: 10, padding: 10, }, + MPinM_otp_inputStyle: { + textAlign: 'center', + backgroundColor: PageTheme.$secondary_color_light, + width: '80%', + borderRadius: 4, + paddingVertical: 10, + paddingHorizontal: 15, + height: 50, + color: PageTheme.$accent_color2, + marginBottom: 10, + marginRight: 10, + fontSize: 25, + fontFamily: deffontfamily, + }, + MPinM_otp_field: { + flexDirection: 'row', + }, + + // app update modal + appUpdateMStyle: { alignItems: 'center' }, + appUpdateMT_Style: { marginTop: 10, marginBottom: 10, fontSize: 13, fontWeight: "500", color: PageTheme.$text_color, fontFamily: deffontfamily }, + appUpdateMT_SubStyle: { paddingHorizontal: 10, marginBottom: 20, fontSize: 12, fontWeight: "400", color: PageTheme.$text_color_light, fontFamily: deffontfamily }, + + // Store Cancel visit modal + storelCM_alertCon: { marginBottom: 20, flexDirection: 'row', alignItems: 'center' }, + storelCM_alert: { textAlign: 'center', color: '#ff0000', fontSize: 14, fontWeight: '400', marginLeft: 10, fontFamily: deffontfamily, }, + storelCancelM_titleStyle: { textAlign: 'center', marginTop: 10, fontSize: 14, fontWeight: '500', fontFamily: deffontfamily }, + storelCancelM_subtitleStyle: { marginBottom: 10, fontSize: 13, fontWeight: '400', color: PageTheme.$primary_color, textTransform: 'capitalize', fontFamily: deffontfamily }, + + // custom modal + customModal: { backgroundColor: PageTheme.$accent_color, width: '80%', borderRadius: 4, elevation: 10, shadowColor: '#000', shadowOpacity: 0.5, padding: 10, shadowOffset: { width: 0, height: 2 }, }, + customModal_Title: { color: PageTheme.$text_color, fontSize: 16, fontWeight: '500', marginBottom: 7, fontFamily: deffontfamily }, + customModal_Message: { color: PageTheme.$text_color_light, fontSize: 14, fontWeight: '400', marginBottom: 10, fontFamily: deffontfamily }, + + + // non working rsns style + storeD_Main: { width: '100%', height: '100%', paddingVertical: 10, }, + storeD_storelMain: { width: '100%', paddingHorizontal: 10, }, + storeD_scrollCon: { width: '100%', height: hp('100%') - (340 + EXTRA_SPACE) }, + storeD_scroll: { width: '100%', marginBottom: 20, paddingHorizontal: 10, }, + nonWorking_con: { width: '100%' }, + nonWorking_form: { width: '100%' }, + nonWform_hd: { textAlign: 'left', color: PageTheme.$text_color, fontFamily: deffontfamily, fontSize: 15, paddingVertical: 5, paddingHorizontal: 10, fontWeight: '600', marginBottom: 10, }, + // nonWorking_imgWrap:{width:'100%',height:200,backgroundColor:PageTheme.$text_color_light2,marginTop:20,}, + // nonWorking_form_selectBox:{width:'100%',textAlign:'left',paddingVertical:0,paddingHorizontal:0,padding:0,height:30,color:PageTheme.$accent_color2,}, + nonW_btnWrap: { position: 'absolute', bottom: 10, left: 10, alignItems: 'center', width: '100%', alignItems: 'center' }, + + nonWlist: { position: 'relative', flexDirection: 'row', marginBottom: 10, alignItems: 'center', width: '100%', backgroundColor: PageTheme.$bg_color, elevation: 2, borderRadius: 7, paddingHorizontal: 10, paddingVertical: 10, shadowColor: '#000', shadowOpacity: 0.15, shadowOffset: { width: 0, height: 2 } }, + nonWlist_camera: { position: 'absolute', right: 0, alignItems: 'center', justifyContent: 'center', padding: 10, }, + nonWlist_camera_icon: {}, + nonWlist_Text: { fontSize: 14, color: PageTheme.$text_color, marginRight: 10, fontFamily: deffontfamily }, + nWselStyle: { backgroundColor: PageTheme.$secondary_color_dark, }, + nWselStyleText: { color: PageTheme.$accent_color }, + settingsBtnTextNew: { + color: 'white', + fontSize: 16, + fontWeight: 'bold', + }, settingsBtnNew: { + backgroundColor: '#4a90e2', + padding: 12, + borderRadius: 8, + alignItems: 'center', + justifyContent: 'center', + }, + // nonWCapImgModal + nonWCapImgModal: { alignItems: 'center', }, + nonWCapImgModal_title: { fontSize: 14, fontFamily: deffontfamily }, + nonWCapImgModal_subtitle: { fontFamily: deffontfamily }, + nonWCapImgModalCon: { width: '100%', alignItems: 'center', position: 'relative', }, + nonWCapImgModal_Camera: { marginTop: 10, marginBottom: 20, padding: 10, }, + nonWCapImgModal_btng: { flexDirection: 'row', justifyContent: 'space-evenly', width: '100%' }, + nonWCapImgModal_Cancel_btn: { marginBottom: 10, paddingHorizontal: 15, paddingVertical: 10, minWidth: 100, backgroundColor: PageTheme.$accent_color, borderColor: PageTheme.$primary_color, borderWidth: 1, borderRadius: 40, elevation: 1 }, + nonWCapImgModal_Cancel_btnText: { textAlign: 'center', color: PageTheme.$primary_color, fontFamily: deffontfamily }, + nonWCapImgModal_Save_btn: { marginBottom: 10, paddingHorizontal: 15, paddingVertical: 10, minWidth: 100, backgroundColor: PageTheme.$primary_color, borderRadius: 40, elevation: 1 }, + nonWCapImgModal_Save_btnText: { textAlign: 'center', color: PageTheme.$accent_color }, + nonWCapImgModal_ImgWrap: { marginTop: 10, marginBottom: 20, padding: 10, width: '100%', alignItems: 'center' }, + nonWCapImgModal_Img: { backgroundColor: '#efefef', width: 150, height: 100, resizeMode: 'contain' }, + nonWCapImgModal_CameraSmall: { position: 'absolute', right: 40, top: 0, padding: 5, backgroundColor: PageTheme.$bg_color, borderRadius: 40, elevation: 3 }, + + // PromotionImgPreviewModal + PromoImgModal: { alignItems: 'center' }, + PromoImgModal_title: { fontSize: 14, fontFamily: deffontfamily }, + PromoImgModal_subtitle: {}, + PromoImgModalCon: { width: '100%', alignItems: 'center', position: 'relative' }, + PromoImgModal_Camera: { marginTop: 10, marginBottom: 20, padding: 10, }, + PromoImgModal_btng: { flexDirection: 'row', justifyContent: 'space-evenly', width: '100%' }, + PromoImgModal_Cancel_btn: { marginBottom: 10, paddingHorizontal: 15, paddingVertical: 10, minWidth: 100, backgroundColor: PageTheme.$accent_color, borderColor: PageTheme.$primary_color, borderWidth: 1, borderRadius: 40, elevation: 1 }, + PromoImgModal_Cancel_btnText: { textAlign: 'center', color: PageTheme.$primary_color }, + PromoImgModal_Save_btn: { marginBottom: 10, paddingHorizontal: 15, paddingVertical: 10, minWidth: 100, backgroundColor: PageTheme.$primary_color, borderRadius: 40, elevation: 1 }, + PromoImgModal_Save_btnText: { textAlign: 'center', color: PageTheme.$accent_color }, + PromoImgModal_ImgWrap: { marginTop: 10, marginBottom: 20, padding: 10, width: '100%', alignItems: 'center' }, + PromoImgModal_Img: { backgroundColor: '#efefef', width: 150, height: 100, resizeMode: 'contain' }, + PromoImgModal_CameraSmall: { position: 'absolute', right: 40, top: 0, padding: 5, backgroundColor: PageTheme.$bg_color, borderRadius: 40, elevation: 3 }, + + // store Distance Modal + storeDistance_Modal: { padding: 20, width: '90%', alignItems: 'center' }, + storeDistanceM_title: { fontSize: 18, fontFamily: deffontfamily }, + storeDistanceM_Con: { alignItems: 'center' }, + storeDistanceM_message: { fontSize: 14, color: PageTheme.$text_color, fontWeight: '400', textAlign: 'center', fontFamily: deffontfamily, }, + storeDistanceM_submessage: { fontSize: 14, fontWeight: '400', textAlign: 'center', color: PageTheme.$text_color, fontFamily: deffontfamily, }, + storeDistanceM_btn: { minWidth: 100, paddingHorizontal: 20, paddingVertical: 10, marginTop: 20, backgroundColor: PageTheme.$primary_color, borderRadius: 20, elevation: 3, }, + storeDistanceM_btnText: { textAlign: 'center', color: PageTheme.$accent_color, fontFamily: deffontfamily, }, + + // daily_menu + dailymenu_listcon: { width: '100%', alignItems: 'center' }, + dailymenu_list: { paddingHorizontal: 10, marginTop: 10, paddingBottom: 10, }, + dialyMenu_Rows: { width: '100%', flexDirection: 'row', marginBottom: 0 }, + daily_menu_outer: { width: '50%', position: 'relative', padding: 10, }, + + daily_menu_first: {}, + daily_menu_tilebgShadow: { borderRadius: 7, elevation: 3, height: 160, alignItems: 'center', shadowColor: '#000', shadowOffset: { width: 0, height: 2 }, shadowOpacity: 0.3, backgroundColor: '#0000' }, + daily_menu: { width: '100%', height: '100%', padding: 10, borderRadius: 7, position: 'absolute', top: 0, left: 0 }, + daily_menu_inner: { alignItems: 'center', backgroundColor: PageTheme.$bg_color, borderRadius: 10, paddingHorizontal: 20, paddingVertical: 5, marginTop: -20, marginBottom: 10, elevation: 2, shadowColor: '#000', shadowOffset: { width: 0, height: 0 }, shadowOpacity: 0.2, justifyContent: 'center' }, + daily_menu_inner2: { alignItems: 'center', paddingHorizontal: 20, paddingTop: 25, marginBottom: 10, justifyContent: 'center' }, + daily_menu_innerImgCon: { position: 'absolute', top: 20, width: 90, height: 90 }, + daily_menu_bgImg: { width: '100%', height: '100%' }, + daily_menu_Icon: { width: 80, height: 80 }, + + daily_menu_title: { fontSize: 14, fontWeight: '400', color: PageTheme.$text_color, marginTop: 5, textAlign: 'center', fontFamily: deffontfamily, }, + daily_menu_done: { position: 'absolute', width: 31, height: 31, right: 10, top: -10, borderRadius: 15, elevation: 3, shadowColor: '#000' }, + daily_menu_hasData: { position: 'absolute', width: 21, height: 21, right: 5, top: 5, borderRadius: 15, elevation: 3, shadowColor: '#000' }, + daily_menu_Count: { position: 'absolute', left: 10, alignItems: "center", top: 5, fontSize: 14, fontWeight: '400', color: PageTheme.$text_color, marginTop: 5, textAlign: 'center', fontFamily: deffontfamily, }, + + // Order Status + OrderStatus_Done: { position: 'absolute', width: 31, height: 31, right: 10, top: 0, borderRadius: 15, elevation: 3, shadowColor: '#000' }, + + + // Dail menu Category + + catDMenuI_Wrap: { flexDirection: 'row', alignItems: 'center', justifyContent: 'flex-start', width: '100%', marginBottom: 10, borderRadius: 4, paddingHorizontal: 10, paddingVertical: 8, backgroundColor: PageTheme.$secondary_color_light, elevation: 1, shadowColor: '#000', shadowOpacity: 0.1, shadowOffset: { width: 0, height: 2 } }, + catDMenuI_CheckBoxCon: { position: 'absolute', width: 25, height: 25, top: 4, left: 5, }, + catDMenuI_CheckBox: { alignSelf: 'flex-start' }, + catDMenuI_CheckBox_pName: { width: '85%', marginLeft: 30 }, + catDMenu_listcon: { width: '100%' }, + catDMenu_list: { marginTop: 10, paddingBottom: 10, }, + catDmenu_scroll: { justifyContent: 'center', paddingBottom: 10, paddingTop: 5 }, + + // opening stock kpi + opening_Stock_wrap: { width: '100%', marginBottom: 10 }, + opening_Stock_scroll: { justifyContent: 'center', padding: 10, paddingBottom: 180, }, + opening_Stock_scrollOuter: { marginBottom: 80, width: wp('100%') }, + opening_Stock_cat: { width: '100%' }, + opening_Stock_catHdr: { width: '100%', position: 'relative' }, + opening_Stock_catHdrIcon: { position: 'absolute', right: 10, top: 5, }, + opening_Stock_catInner: { width: '100%', paddingHorizontal: 10, paddingVertical: 7, backgroundColor: PageTheme.$primary_color, borderRadius: 5, }, + opening_Stock_catText: { fontSize: 14, fontWeight: '500', color: PageTheme.$accent_color, fontFamily: deffontfamily, }, + opening_Stock_catText2: { fontSize: 13, fontWeight: '400', color: PageTheme.$accent_color, fontFamily: deffontfamily, }, + opening_Stock_catText3: { fontSize: 13, fontWeight: '400', color: PageTheme.$text_color, fontFamily: deffontfamily, }, + + opening_Stock_SubCatHdr: { width: '100%', position: 'relative' }, + opening_Stock_SubCatIcon: { position: 'absolute', right: 10, top: 10 }, + opening_Stock_SubCatInner: { width: '100%', paddingHorizontal: 10, marginTop: 10, paddingVertical: 7, backgroundColor: PageTheme.$primary_color, borderRadius: 5, }, + opening_Stock_SubCatText: { fontSize: 14, fontWeight: '500', color: PageTheme.$text_color, textAlign: 'center', fontFamily: deffontfamily }, + + osCat_actions: { width: '100%', marginVertical: 10, marginTop: 20, paddingBottom: 10, alignItems: 'center', borderBottomColor: PageTheme.$text_color_light2, borderBottomWidth: 1, }, + osCat_actions1: { width: '100%', marginVertical: 10, marginTop: 4, paddingBottom: 10, alignItems: 'center' }, + osCat_action_openCam: {}, + osCat_action_add_image: {}, + osCatImageView: { position: 'relative', backgroundColor: PageTheme.$secondary_color_light, padding: 5, borderRadius: 10, }, + osCat_action_reCap: { position: 'absolute', top: -10, right: -10, padding: 8, backgroundColor: PageTheme.$primary_color, borderRadius: 30, elevation: 2 }, + osCatImage: { width: 80, height: 80, borderRadius: 10, backgroundColor: '#232323' }, + osCatImage2: { width: 55, height: 47, backgroundColor: 'transparent' }, + error_CatImage2: { width: 55, height: 47, borderColor: 'red', borderWidth: 2, padding: 30, alignItems: 'center', justifyContent: 'center' }, + + osCat_actn_margin: {}, + opening_Stock_prds: { paddingBottom: 20, }, + openStk_prd_Con: { paddingHorizontal: 10, position: 'relative', marginTop: 10, paddingVertical: 10, backgroundColor: PageTheme.$secondary_color_light, borderRadius: 5, elevation: 1, shadowColor: '#484848', shadowOpacity: 0.1, shadowOffset: { width: 0, height: 2 } }, + openStk_prd_name: { fontSize: 15, color: PageTheme.$text_color, fontWeight: '600', fontFamily: deffontfamily }, + openStk_prd_nameB: { fontSize: 15, color: PageTheme.$text_color, fontWeight: '600', borderBottomColor: PageTheme.$fourth_color, borderBottomWidth: 1, paddingBottom: 5, fontFamily: deffontfamily }, + + openStk_precentageViw: { flex: 2, borderBottomColor: PageTheme.$fourth_color, borderBottomWidth: 1, paddingBottom: 5, flexDirection: "row", justifyContent: 'space-between' }, + openStk_precentageViwHD: { flex: 2, paddingBottom: 5, flexDirection: "row", justifyContent: 'space-between' }, + openStk_precentagenameB: { fontSize: 15, color: PageTheme.$text_color, fontWeight: '600', paddingBottom: 5, fontFamily: deffontfamily }, + + openStk_prd_name2: { fontSize: 14, color: PageTheme.$text_color, fontWeight: '400', marginTop: 4, fontFamily: deffontfamily }, + openStk_refImageBtn: { position: 'absolute', right: 20, top: 5, width: 40, height: 40, borderRadius: 20, alignItems: 'center', justifyContent: 'center' }, + openStk_prd_form: { marginTop: 10, }, + openStk_prd_row: { width: '100%', flexDirection: 'row', }, + openStk_prd_cols: { width: '100%', }, + openStk_prd_colflex: { width: '100%', flexDirection: 'row', alignItems: 'center', }, + openStk_prd_col50: { width: '48.5%' }, + openStk_prd_col50_1: { marginRight: 5, }, + openStk_prd_col50_2: { marginLeft: 5 }, + openStkP_checkboxWrap: { flexDirection: 'row', alignItems: 'flex-start', justifyContent: 'flex-start', borderBottomColor: PageTheme.$bg_color, borderBottomWidth: 1, paddingBottom: 10, }, + openStkP_checkbox: { alignSelf: 'flex-start' }, + openStkP_checkboxCon: { position: 'absolute', width: 25, height: 25, top: -5, left: -10, }, + openStkP_checkbox_pName: { width: '85%', marginLeft: 25 }, + openStk_prd_label: { fontSize: 13, color: PageTheme.$text_color_dark, fontWeight: '400', fontFamily: deffontfamily }, + openStk_prd_flexlabel: { marginRight: 10, width: '35%', color: PageTheme.$text_color_dark, fontFamily: deffontfamily }, + openStk_prd_flexlabel1: { marginRight: 3, marginLeft: 10, width: '49%', color: PageTheme.$text_color_dark, fontFamily: deffontfamily }, + openStk_prd_textLabel: { marginLeft: 10, width: '35%', color: PageTheme.$text_color_dark }, + openStk_prd_labelValRed: { fontSize: 13, color: PageTheme.$orange, fontWeight: '400', fontFamily: deffontfamily }, + openStk_prd_inputStyle: { backgroundColor: PageTheme.$bg_color, borderRadius: 4, marginTop: 5, height: 30, paddingVertical: 3, paddingHorizontal: 5, minWidth: 100, color: PageTheme.$text_color, fontFamily: deffontfamily }, + openStk_prd_inputStyle1: { backgroundColor: PageTheme.$bg_color, borderRadius: 4, marginTop: 5, height: 35, paddingVertical: 3, paddingHorizontal: 5, minWidth: 100, color: PageTheme.$text_color, fontFamily: deffontfamily }, + openStk_EXP_inputStyle: { backgroundColor: "#c0ccd6", borderRadius: 4, marginTop: 5, height: 30, paddingVertical: 3, paddingHorizontal: 5, minWidth: 100, color: "#fff", fontFamily: deffontfamily }, + + // ops Expr + closeStk_prd_flexlabel: { width: '30%', color: PageTheme.$text_color_dark }, + + + openStk_prd_inputShort: { width: '70%' }, + openStk_prd_inplBlue: { backgroundColor: PageTheme.$secondary_color_light }, + openStk_prd_flex_inputStyle: { marginTop: 0, width: '50%' }, + openStk_prd_flex_inputStyle1: { marginTop: 0, width: '60%' }, + openStk_prd_inputShort2: { width: '50%' }, + openStk_prd_date_inputCon: { flexDirection: 'row', alignItems: 'center', justifyContent: 'space-between', width: '60%' }, + openStk_prd_dateInput: { height: 30, alignItems: 'center', justifyContent: 'center', width: '84%', borderRadius: 5, backgroundColor: PageTheme.$secondary_color_light, paddingHorizontal: 10, paddingVertical: 5, color: PageTheme.$text_color, fontFamily: deffontfamily }, + openStk_prd_datePicker: { width: 30, height: 30, backgroundColor: PageTheme.$primary_color, alignItems: 'center', justifyContent: 'center', borderRadius: 5 }, + + openStk_prd_selectStyle: { backgroundColor: PageTheme.$bg_color, borderRadius: 4, height: 40, minWidth: 100 }, + openStk_prd_selectStyle_item: { height: 40, fontSize: 14, fontFamily: deffontfamily }, + openStk_prd_choiceBoxCon: { height: 40, width: '60%', paddingHorizontal: (Platform.OS == 'ios' ? 10 : 0), }, + openStk_prd_choiceBox: { position: 'relative', backgroundColor: PageTheme.$bg_color, flexDirection: 'row', height: 40, alignItems: 'center', width: '80%', maxWidth: 150, minWidth: 100, borderRadius: 5 }, + openStk_prd_choiceBoxbgL: { backgroundColor: PageTheme.$secondary_color_light }, + openStkCh_con1: { width: '50%', height: '100%', paddingVertical: 5, paddingHorizontal: 10, justifyContent: 'center', borderRadius: 5, }, + openStkCh_con1Grey: { backgroundColor: '#d3d3d3' }, + openStkCh_text: { textAlign: 'center', color: PageTheme.$text_color, fontFamily: deffontfamily }, + openStkCh_textactive: { color: PageTheme.$accent_color }, + openStkCh_con_red: { backgroundColor: 'red' }, + openStkCh_con_green: { backgroundColor: 'green' }, + openStkCh_con_toggleDis: { backgroundColor: PageTheme.$tertiary_color }, + openStkCh_con_toggleDisTxt: { color: PageTheme.$accent_color }, + openStkCh_con_active: { borderRadius: 5, elevation: 4, shadowColor: '#000', shadowOpacity: 0.4, shadowOffset: { width: 0, height: 2 }, shadowRadius: 5, backgroundColor: '#0000' }, + openStkCh_absolutebg: { position: 'absolute', top: 0, bottom: 0, width: '50%', left: '50%' }, + addstore_Stock_btnWrap: { bottom: 0, left: 0, right: 0, width: wp('95%'), paddingBottom: 20, alignItems: 'center' }, + + opening_Stock_btnWrap: { position: 'absolute', bottom: 0, left: 0, right: 0, width: wp('100%'), paddingBottom: 20, alignItems: 'center' }, + openStk_prddetails: { flexDirection: 'row', marginTop: 10, paddingTop: 10, paddingBottom: 10, alignItems: 'center' }, + openStk_prd_borderT: { borderTopColor: PageTheme.$fourth_color, borderTopWidth: 1 }, + openStk_prd_borderT2: { borderTopColor: PageTheme.$fourth_color, borderTopWidth: 1, paddingTop: 5 }, + openStk_prd_borderT3: { borderTopColor: PageTheme.$fourth_color, borderTopWidth: 1, paddingTop: 10 }, + openStk_prd_borderB: { borderBottomColor: PageTheme.$fourth_color, borderBottomWidth: 1 }, + openStk_prd_borderL: { borderLeftColor: PageTheme.$fourth_color, borderLeftWidth: 1 }, + openStk_prd_borderR: { borderRightColor: PageTheme.$fourth_color, borderRightWidth: 1 }, + openStk_prdd_wrap: { flexDirection: 'row', alignItems: 'center' }, + openStk_prdd_flabel: { fontSize: 13, fontWeight: '500', color: PageTheme.$secondary_color_dark, marginRight: 10, fontFamily: deffontfamily }, + openStk_prdd_fvalue: { fontSize: 13, fontWeight: '500', color: PageTheme.$secondary_color_dark, marginRight: 10, fontFamily: deffontfamily }, + openStk_prdCameras: { marginTop: 10, flexDirection: 'row', flexWrap: 'wrap' }, + openStkCameraCon: { marginRight: 10, }, + openStkCameraCon2: { marginRight: 10, alignItems: 'center' }, + + // IR Camera Session + IRCamWrapper: { width: '100%' }, + IRCamCon: { borderTopColor: PageTheme.$accent_color, borderTopWidth: 1, flexDirection: 'row', justifyContent: 'space-evenly', padding: 5, backgroundColor: PageTheme.$bg_color, borderRadius: 5 }, + IRCamConBG: { borderTopColor: PageTheme.$secondary_color_light, backgroundColor: PageTheme.$secondary_color_light }, + IRCamBtns: { alignItems: 'center' }, + IRCamStartSess: {}, + IRCamResumeSess: {}, + IRCamBtnsText: { fontSize: 11, fontWeight: '500', color: PageTheme.$text_color, fontFamily: deffontfamily }, + IRCamImgWrap: { flexWrap: 'wrap', flexDirection: 'row', marginBottom: 5, minHeight: 80 }, + IRCamImageView: { position: 'relative', padding: 5, borderRadius: 10, }, + IRCamImage: { width: 80, height: 80, borderRadius: 10, backgroundColor: '#232323', marginRight: 10 }, + IRCamImage_OpBtn: { position: 'absolute', top: -5, right: 0, padding: 8, backgroundColor: PageTheme.$primary_color, borderRadius: 30, elevation: 2 }, + + IRretakeM_options: { flexDirection: 'row', marginBottom: 20, justifyContent: 'space-evenly', width: '100%', alignItems: 'center' }, + IRretakeM_optionsInn: { alignItems: 'center' }, + IRretakeM_optionsBtn: { color: PageTheme.$accent_color, paddingHorizontal: 20, paddingVertical: 6, borderRadius: 20, minWidth: 70 }, + IRretakeM_optionsBtnText: { textAlign: 'center', fontSize: 10, color: PageTheme.$text_color, fontFamily: deffontfamily }, + IRCamOnceWrap: { marginBottom: 10 }, + + // product cats in Stock with cat screen + prodCatsScroll: { justifyContent: 'center', padding: 10, paddingBottom: 10, }, + prodCatsScroll_Outer: { marginBottom: 5, width: wp('100%') }, + prodCatPageWrap: { alignItems: 'center' }, + prodCatsHdr: { backgroundColor: PageTheme.$primary_color, width: wp('100%') - 20, paddingVertical: 8, paddingHorizontal: 10, marginBottom: 15, borderRadius: 6, elevation: 1, shadowOffset: { width: 0, height: 2 }, shadowOpacity: 0.2, }, + prodCatsHdrText: { textAlign: 'center', fontSize: 14, color: PageTheme.$accent_color, fontFamily: deffontfamily }, + prodCatsCountText: { textAlign: 'right', position: 'absolute', right: 10, top: 7, fontSize: 14, color: PageTheme.$accent_color, fontFamily: deffontfamily }, + prodCatsHdr_Stockprds: { paddingBottom: 10 }, + prdCat_hdIMgWrap: { width: wp('100%') - 20, marginVertical: 10, marginTop: 20, paddingBottom: 10, alignItems: 'center', justifyContent: 'center', borderBottomColor: PageTheme.$text_color_light2, borderBottomWidth: 1, }, + prdCat_hdImgCon: { width: wp('100%'), alignItems: 'center' }, + stockCatDone_check: { position: 'absolute', width: 24, height: 24, right: 10, top: 5, borderRadius: 15, elevation: 3, paddingLeft: 0.2, shadowColor: '#000' }, + + + // SOS + SOS_subCatImgCon: {}, + SOS_imageWrap: { width: '100%', paddingVertical: 10, alignItems: 'center', borderBottomColor: PageTheme.$text_color_light2, borderBottomWidth: 1, }, + + + + // Stock + stockPrdInfo: { flexDirection: 'row', width: '100%', paddingHorizontal: 10, paddingVertical: 4, backgroundColor: PageTheme.$fourth_color, borderRadius: 5, }, + stockPrdInfoLabelHd: { fontSize: 13, fontWeight: '500', color: PageTheme.$text_color_dark, marginRight: 10, fontFamily: deffontfamily }, + stockPrdInfoLabelHd1: { fontSize: 13, fontWeight: '500', color: PageTheme.$text_color_dark, fontFamily: deffontfamily }, + stockPrdInfoLabel: { fontSize: 13, fontWeight: '500', color: PageTheme.$text_color, fontFamily: deffontfamily }, + + + // shelf talker + st_TextLbl: { marginBottom: 10, }, + + // Stock page + stk_inptSTyle: { textAlign: 'center', fontFamily: deffontfamily }, + stk_inptSTyle_error: { borderColor: 'red', borderWidth: 2 }, + wind_MultiSearchInputStyle: { color: '#CCC' }, + stk_MultiSSTyle_error: { borderColor: 'red', borderWidth: 2, color: '#CCC' }, + stk_mfdView: { marginTop: 10, borderTopColor: PageTheme.$accent_color, borderTopWidth: 2, paddingTop: 10, }, + stk_mfdTbl_hd: { marginBottom: 10, marginTop: 10, color: PageTheme.$text_color, fontSize: 14, fontWeight: '500', fontFamily: deffontfamily }, + stk_mfdTblHeader: { marginBottom: 10, marginTop: 10, backgroundColor: PageTheme.$primary_color, borderRadius: 10, padding: 5, elevation: 3, shadowColor: '#747474', shadowOffset: { width: 0, height: 2 }, shadowOpacity: 1.0, flexDirection: 'row', alignItems: 'center', justifyContent: 'space-between' }, + stk_mfdTblHeaderBox: { width: '24%', height: '100%', alignItems: 'center', backgroundColor: PageTheme.$secondary_color_light, paddingVertical: 5, borderRadius: 5, }, + stk_mfdTblHeaderBox1: {}, + stk_mfdTblHeaderBox2: {}, + stk_mfdTblHeaderBox3: {}, + stk_mfdTblHeaderBox4: {}, + stk_mfdTblHeaderTxt: { fontSize: 13, color: PageTheme.$text_color, marginRight: 5, textTransform: 'capitalize', fontWeight: '700', fontFamily: deffontfamily, }, + stk_addStockBtn: { position: 'absolute', right: 0, top: 10, backgroundColor: PageTheme.$primary_color, borderRadius: 4, paddingHorizontal: 10, paddingVertical: 5, elevation: 1, shadowColor: '#747474', shadowOffset: { width: 0, height: 2 }, shadowOpacity: 0.1 }, + stk_addStockBtnText: { fontSize: 13, fontWeight: '500', color: PageTheme.$accent_color, fontFamily: deffontfamily }, + AddStockM_View: { width: '100%', marginBottom: 10, }, + AddStockM_row: { marginBottom: 10, marginTop: 0, width: '100%', paddingHorizontal: 10 }, + AddStockM_label: { color: PageTheme.$text_color, fontSize: 14, fontWeight: '400', marginBottom: 5, fontFamily: deffontfamily, }, + AddStockM_col: {}, + AddStockM_MFDInputCon: { flexDirection: 'row', alignItems: 'center', justifyContent: 'space-between' }, + AddStockM_MFDInput: { height: 30, alignItems: 'center', justifyContent: 'center', width: '84%', borderRadius: 5, backgroundColor: PageTheme.$secondary_color_light, paddingHorizontal: 10, paddingVertical: 5, color: PageTheme.$text_color, fontFamily: deffontfamily }, + AddStockM_DatePicker: { width: 30, height: 30, backgroundColor: PageTheme.$primary_color, alignItems: 'center', justifyContent: 'center', borderRadius: 5 }, + AddStockM_InputStyle: { height: 30, borderRadius: 5, backgroundColor: PageTheme.$secondary_color_light, paddingHorizontal: 10, paddingVertical: 5, color: PageTheme.$text_color, fontFamily: deffontfamily, }, + AddStockM_cancelBtn: { backgroundColor: PageTheme.$bg_color, borderWidth: 1, borderColor: PageTheme.$primary_color, minWidth: 90 }, + AddStockM_cancelBtnText: { color: PageTheme.$primary_color }, + AddStockM_Btn: { minWidth: 90 }, + + stk_mfdTblBody: { backgroundColor: PageTheme.$bg_color, borderRadius: 5, paddingVertical: 5 }, + stk_mfdTblrow: { marginBottom: 5, borderBottomColor: PageTheme.$secondary_color_light, borderBottomWidth: 1, padding: 5, flexDirection: 'row', alignItems: 'center', justifyContent: 'space-between' }, + stk_mfdTblrow_last: { borderBottomWidth: 0, marginBottom: 0 }, + stk_mfdTblCol: { paddingHorizontal: 10, alignItems: 'center', width: '24%', }, + stk_mfdTblCol1: {}, + stk_mfdTblCol2: {}, + stk_mfdTblCol3: {}, + stk_mfdTblCol4: { height: 35 }, + stk_mfdTblColText: { color: PageTheme.$text_color, fontSize: 13, fontWeight: '400', fontFamily: deffontfamily, }, + stk_mfdTbl_DeleteBtn: { position: 'absolute', right: 5, backgroundColor: PageTheme.$bg_color, borderRadius: 20, width: 30, height: 30, alignItems: 'center', justifyContent: 'center', elevation: 2, shadowColor: '#000', shadowOffset: { width: 0, height: 2 }, shadowOpacity: 0.2 }, + + //possale + posS_hdrWrap: { paddingHorizontal: 10 }, + picker_design: { width: '65%' }, + text_month: { width: '35%', color: PageTheme.$text_color_dark }, + possale_prd_label: { fontSize: 15, color: PageTheme.$text_color_dark, fontWeight: '400', fontFamily: deffontfamily }, + possale_headerview: {}, + possale_sImageWraps: { flexDirection: 'row' }, + possale_sImagelbl: { marginTop: -70, paddingTop: 5, paddingBottom: 5, borderRadius: 5, backgroundColor: PageTheme.$bg_color, elevation: 2, shadowOpacity: 0.2, shadowColor: '#000', shadowOffset: { width: 0, height: 2 }, marginLeft: 20, paddingLeft: 10, paddingRight: 10 }, + possale_sImagelbl2: { marginTop: -70, paddingTop: 5, paddingBottom: 5, borderRadius: 5, backgroundColor: PageTheme.$bg_color, elevation: 2, shadowOpacity: 0.2, shadowColor: '#000', shadowOffset: { width: 0, height: 2 }, marginLeft: 80 }, + + possale_sImageWrap: { position: 'absolute', alignItems: 'center', left: 0, right: 0, width: '100%' }, + possale_sImage_View: { position: 'absolute', elevation: 1, backgroundColor: '#fff', borderRadius: 15, padding: 3, shadowOpacity: 0.1, shadowColor: '#000', shadowOffset: { width: 0, height: 2 } }, + + posS_flex_inputStyle: { marginTop: 0, width: '65%', backgroundColor: PageTheme.$secondary_color_light }, + posS_flex_label: { paddingRight: 10, width: '35%', color: PageTheme.$text_color_dark }, + posS_field: { paddingHorizontal: 10 }, + posS_fieldBorder: { borderTopColor: PageTheme.$fourth_color, borderTopWidth: 1, paddingTop: 10, marginTop: 10 }, + posS_flex_inputStyle2: { backgroundColor: PageTheme.$bg_color, width: '50%', borderRadius: 4, marginTop: 5, height: 30, paddingVertical: 3, paddingHorizontal: 5, minWidth: 100, color: PageTheme.$text_color }, + + + // album designs + alumbl: { backgroundColor: PageTheme.$bg_color, elevation: 3, padding: 10, marginBottom: 10, borderRadius: 4 }, + alumbl_img: { height: 200, width: '100%', resizeMode: 'contain' }, + alumbl_topText: { color: PageTheme.$text_color, fontWeight: '600', marginBottom: 10, fontSize: 14, fontFamily: deffontfamily }, + alumbl_bottomText: { color: PageTheme.$text_color_light, fontWeight: '400', marginTop: 10, fontSize: 13, fontFamily: deffontfamily }, + album_ZOOM: { backgroundColor: '#000', width: wp('100%'), height: hp('100%'), }, + album_ZOOM_wrap: { backgroundColor: '#000', position: 'absolute', top: 0, left: 0, width: wp('100%'), height: hp('100%') + (Platform.OS == 'android' ? STATUSBAR_HEIGHT : 0), zIndex: 1,elevation:1 }, + album_ZOOM_img: { backgroundColor: '#fff', width: '100%', height: 400 }, + album_ZOOM_topBar: { position: 'relative', backgroundColor: '#000', width: '100%', height: 30, paddingHorizontal: 10, paddingVertical: 5, marginTop: STATUSBAR_HEIGHT + 10, alignItems: 'center', flexDirection: 'row' }, + album_ZOOM_backBtn: { position: 'absolute', left: 5, padding: 10, }, + album_ZOOM_indicator: { width: '100%', textAlign: 'center', fontSize: 14, color: PageTheme.$accent_color, fontFamily: deffontfamily }, + + // AddVisibilityPresent + addVis_Wrapper: { width: '100%', height: '100%', padding: 10, paddingTop: 0 }, + addvisCon: {}, + addvis_pCon: { flexDirection: 'row', alignItems: 'center', paddingHorizontal: 10, paddingBottom: 10, marginBottom: 10, borderBottomColor: PageTheme.$secondary_color_light, borderBottomWidth: 2, }, + addvis_pText: { width: '40%', color: PageTheme.$text_color, fontWeight: '500', fontSize: 15, fontFamily: deffontfamily }, + addvis_pChoiceBoxCon: { width: '60%', alignItems: 'flex-end' }, + addvis_pChoiceBoxbg: { backgroundColor: '#efefef' }, + addVisForm: { paddingHorizontal: 10, }, + addVisRow: { flexDirection: 'row', width: '100%', flexWrap: 'wrap', justifyContent: 'center' }, + addVisRow2: { flexDirection: 'row', width: '100%', flexWrap: 'wrap', paddingHorizontal: 5 }, + addVisCol50: { width: '47%', marginBottom: 10, }, + addVisCol100: { width: '100%', marginBottom: 10, }, + addVisColspace: { paddingHorizontal: 5 }, + addVisCol1: { marginRight: 5, }, + addVisCol2: { marginLeft: 5, }, + addVisFormGrp: {}, + addVisInputStyle: { height: 40, borderRadius: 5, backgroundColor: PageTheme.$secondary_color_light, paddingHorizontal: 10, color: PageTheme.$text_color, fontFamily: deffontfamily }, + addVisLabel: { color: PageTheme.$text_color, fontSize: 14, fontWeight: '400', marginBottom: 6, fontFamily: deffontfamily }, + addVisPickerStyle: { height: 40, borderRadius: 5, }, + addVisPickerOverlay: { backgroundColor: 'rgba(0, 0, 0, 0.5)' }, + addVisPicker_OptionContainerStyle: { backgroundColor: '#fff', paddingHorizontal: 0 }, + PV_selectStyle: { width: '60%' }, + PV_selectInputStyle: { backgroundColor: PageTheme.$bg_color, width: '84%' }, + PV_selectInputStyle1: { width: '75%' }, + + // sales + Sale_filterSelInputStyle: { backgroundColor: PageTheme.$secondary_color_light, width: '100%' }, + Sale_filterSelStyle: { width: '80%' }, + Sale_filterwrap: { backgroundColor: PageTheme.$secondary_color_light, borderRadius: 5, width: '60%', flexDirection: 'row', }, + Sale_clrfilterBtn: { width: '20%', alignItems: 'center', padding: 5, justifyContent: 'center', borderLeftWidth: 1, borderLeftColor: PageTheme.$primary_color }, + PV_textInputStyle: { backgroundColor: PageTheme.$bg_color, width: '60%', color: '#000' }, + + Geoloc_btnWrap: { width: '100%', flexDirection: 'row', marginTop: 10, paddingHorizontal: 10 }, + geo_btn: { paddingHorizontal: 20, minWidth: 100, paddingVertical: 10, borderRadius: 40, backgroundColor: PageTheme.$primary_color, alignItems: 'flex-start' }, + + // addVisPicker_InputStyle: { backgroundColor: PageTheme.$secondary_color_light, borderRadius: 5, + // overflow: 'hidden', textAlign: 'center', fontSize: 14, + // color: PageTheme.$text_color, paddingVertical: 12, paddingHorizontal: 12, + // fontFamily: deffontfamily }, + addVisPicker_InputStyle: { + backgroundColor: PageTheme.$secondary_color_light, + borderRadius: 5, + fontFamily: deffontfamily, + height: 45, + textAlign: 'center', + paddingHorizontal: 10, + justifyContent: 'center', + + // 👇 MOST IMPORTANT + textAlignVertical: 'center', // Android fix + lineHeight: 18, + fontSize: 14, + color: PageTheme.$text_color, + } + , + addVisPicker_Dis_InputStyle: { backgroundColor: 'red' }, + // addVisPickerStyle_and:{backgroundColor:PageTheme.$secondary_color_light,borderRadius:5}, + // addVisPickerStyle_IOS:{height:40,borderRadius:5,fontSize:14,marginLeft:-10}, + addvis_opStyle: { padding: 0 }, + addvis_opTextStyle: { paddingVertical: 8, paddingHorizontal: 10, fontSize: 15, color: PageTheme.$text_color, fontFamily: deffontfamily }, + addvis_selectedOpStyle: { backgroundColor: PageTheme.$secondary_color_light }, + addvis_selectedOpTextStyle: { fontFamily: deffontfamily, paddingVertical: 8, paddingHorizontal: 10, color: PageTheme.$primary_color, textAlign: 'center', fontSize: 17 }, + addVisCameras: { flexDirection: 'row', flexWrap: 'wrap' }, + addVisScroll: { height: hp('100%') - 260 }, + addVisScroll23: { height: "100%" }, + addVisScrollCon: {}, + addVis_btnWrap: { width: '100%', flexDirection: 'row', alignItems: 'center', justifyContent: 'center', paddingBottom: 15, paddingTop: 5, borderBottomColor: PageTheme.$secondary_color_light, borderBottomWidth: 2 }, + addVis_btnWrap2: { borderBottomWidth: 0, justifyContent: 'flex-start' }, + addVis_btn: { paddingHorizontal: 20, minWidth: 100, paddingVertical: 10, borderRadius: 40, backgroundColor: PageTheme.$primary_color, alignItems: 'center', elevation: 2, shadowColor: '#000', shadowOffset: { width: 0, height: 2 }, shadowOpacity: 0.3 }, + addVisBtnText: { fontSize: 14, color: PageTheme.$accent_color, fontFamily: deffontfamily }, + addVis_list: { paddingTop: 10, paddingHorizontal: 10, width: '100%' }, + report_ir_list: { paddingTop: 5, paddingHorizontal: 5, width: '100%' }, + addVis_listhdrText: { color: PageTheme.$primary_color, fontFamily: deffontfamily }, + ir_listhdrText: { color: PageTheme.$primary_color, fontFamily: deffontfamily, marginLeft: 10 }, + addVis_listInner: { marginTop: 10, }, + ir_listInner: { marginTop: 1, }, + addVis_listItem: { position: 'relative', backgroundColor: PageTheme.$secondary_color_light, width: '100%', padding: 10, borderRadius: 5, marginBottom: 20, elevation: 2, shadowOffset: { width: 0, height: 2 }, shadowOpacity: 0.15, shadowColor: '#000' }, + addVis_listI_row: { flexDirection: 'row', paddingBottom: 5, marginBottom: 5, borderBottomColor: PageTheme.$accent_color, borderBottomWidth: 2, }, + MissCall_listI_row: { flexDirection: 'row', marginBottom: 0, }, + addVis_listI_lastrow: { borderBottomWidth: 0, marginBottom: 0 }, + addVis_listI_Label: { fontSize: 15, fontWeight: '500', color: PageTheme.$secondary_color_dark, marginRight: 5, width: '50%', flexWrap: 'wrap', fontFamily: deffontfamily }, + + addVis_listI_Label2: { fontSize: 15, fontWeight: '500', color: PageTheme.$secondary_color_dark, marginRight: 5, fontFamily: deffontfamily }, + addVis_listI_Val: { fontSize: 14, fontWeight: '400', color: PageTheme.$text_color, width: '50%', flexWrap: 'wrap', fontFamily: deffontfamily }, + addVis_listI_Val2: { fontSize: 14, fontWeight: '400', color: PageTheme.$text_color, width: '40%', flexWrap: 'wrap', fontFamily: deffontfamily }, + addVis_listI_Image: { width: 80, height: 80, borderRadius: 5, }, + addVis_listI_row2: { flexDirection: 'row', width: '100%' }, + addVis_listIcol100: { width: '100%' }, + addVis_listIcol1: { width: '60%' }, + addVis_listIcol2: { width: '40%', paddingLeft: 10, alignItems: 'center' }, + addVis_btnRemove: { padding: 8, alignItems: 'center', justifyContent: 'center', paddingHorizontal: 10, borderRadius: 40, position: 'absolute', right: 0, top: -30, backgroundColor: PageTheme.$accent_color, elevation: 2, shadowOpacity: 0.2, shadowOffset: { width: 0, height: 2 } }, + addVis_listPcon: { width: '48%', marginTop: 10, flexDirection: 'row', backgroundColor: PageTheme.$bg_color, paddingVertical: 3, paddingHorizontal: 5, borderRadius: 4, }, + addVis_listPcon1: { marginRight: 5 }, + addVis_listPcon2: { marginLeft: 5 }, + addVis_listR: { flexDirection: "row", marginTop: 10, flexWrap: 'wrap' }, + addVis_listRlbl: { fontSize: 15, fontWeight: '500', color: PageTheme.$secondary_color_dark, marginRight: 5, width: '60%', flexWrap: 'wrap', fontFamily: deffontfamily }, + + contactConvWrap: { paddingHorizontal: 10, paddingTop: 10, width: '100%', height: '100%' }, + contactConvCard: { backgroundColor: PageTheme.$bg_color, elevation: 2, shadowColor: '#000', shadowOpacity: 0.15, borderRadius: 5, shadowOffset: { width: 0, height: 2 }, padding: 10 }, + contactConvCardRow: { flexDirection: 'row', flexWrap: 'wrap' }, + contactConvCardCol: { width: '100%', marginBottom: 10, }, + ccCard_FormGrp: { flexDirection: 'row', alignItems: 'center' }, + ccCard_lbl: { fontSize: 15, fontWeight: '500', color: PageTheme.$secondary_color_dark, width: '45%', paddingRight: 10, flexWrap: 'wrap', fontFamily: deffontfamily }, + ccCard_input: { width: '55%', backgroundColor: PageTheme.$secondary_color_light, borderRadius: 5, overflow: 'hidden', textAlign: 'left', fontSize: 14, color: PageTheme.$text_color, paddingVertical: 12, paddingHorizontal: 12, fontFamily: deffontfamily }, + + // survey list + surveyPageWrapper: { marginTop: 10, paddingTop: 10, backgroundColor: PageTheme.$secondary_color_light, borderTopLeftRadius: 40, borderTopRightRadius: 40, }, + surveyList: { width: '100%', }, + surveyListInner: { justifyContent: 'center', padding: 10, paddingHorizontal: 15, width: '100%' }, + surveyItem: { elevation: 1, shadowOpacity: 0.2, shadowOffset: { width: 0, height: 2 }, shadowColor: '#efefef', backgroundColor: '#0000', marginBottom: 10, }, + surveyItem_tile: { flexDirection: 'row', alignItems: 'center', width: '100%', padding: 10, borderRadius: 10 }, + surveyItem_name: { fontSize: 14, fontWeight: '500', color: PageTheme.$text_color, flexWrap: 'wrap', fontFamily: deffontfamily }, + surveyItemCircle: { backgroundColor: '#fff', width: 40, height: 40, borderRadius: 20, alignItems: 'center', justifyContent: 'center', marginRight: 10, }, + surveyItemCircle_Text: { fontFamily: deffontfamily, fontSize: 16, fontWeight: '500', color: PageTheme.$primary_color, fontFamily: deffontfamily }, + surveyItem_Check: { position: 'absolute', width: 24, height: 24, right: 10, borderRadius: 15, elevation: 3, paddingLeft: 0.2, shadowColor: '#000' }, + + // survey cat + surveyCatList: { width: '100%', marginTop: 20 }, + surveyCatItem: { elevation: 1, shadowOpacity: 0.2, shadowOffset: { width: 0, height: 2 }, shadowColor: '#000', backgroundColor: PageTheme.$bg_color, marginBottom: 10, flexDirection: 'row', alignItems: 'center', borderRadius: 5, paddingHorizontal: 10, paddingVertical: 5 }, + surveyCatItem_name: { fontSize: 14, fontWeight: '500', color: PageTheme.$text_color, paddingRight: 10, width: wp('100%') - 125, fontFamily: deffontfamily }, + surveyCatItem_Circle: { backgroundColor: PageTheme.$secondary_color_light, width: 40, height: 40, borderRadius: 20, alignItems: 'center', justifyContent: 'center', marginRight: 10, }, + surveyCatItem_CircleText: { fontSize: 16, fontWeight: '500', color: PageTheme.$primary_color, fontFamily: deffontfamily }, + surveyCatItem_Check: { position: 'absolute', width: 24, height: 24, right: 10, borderRadius: 15, elevation: 3, shadowColor: '#000' }, + + + // survey toggle view + SurveyView: { position: 'absolute', padding: 10, paddingTop: 30, paddingBottom: 20, top: 20, left: 0, right: 0, width: '100%', height: hp('100%') - (STATUSBAR_HEIGHT + 50), shadowOpacity: 1, shadowColor: '#8d8d8d', shadowRadius: 5, alignItems: 'center', borderTopLeftRadius: 40, borderTopRightRadius: 40, }, + SurveyViewCloseBtn: { position: 'absolute', top: -17, right: 30, paddingHorizontal: 6, paddingVertical: 5, borderRadius: 20, backgroundColor: PageTheme.$primary_color, shadowColor: '#8d8d8d', shadowOpacity: 1, elevation: 2, shadowOffset: { width: 0, height: 2 } }, + SurveyViewContent: { width: '100%' }, + SurveyViewContentInner: { padding: 10, height: hp('100%') - 200 }, + SV_activeSurvey: { position: 'absolute', top: -17, left: 30, shadowColor: '#8d8d8d', shadowOpacity: 1, elevation: 2, shadowOffset: { width: 0, height: 2 }, backgroundColor: '#0000', marginBottom: 10, width: wp('100%') - 115 }, + SV_activeSurvey_tile: { padding: 10, borderRadius: 30, paddingHorizontal: 20, backgroundColor: PageTheme.$primary_color }, + SV_activeSurvey_name: { fontSize: 16, fontWeight: '500', color: PageTheme.$accent_color, fontFamily: deffontfamily }, + + // survey questions + surveyQtnScroll: { width: '100%' }, + surveyQtnScrollInner: { width: '100%', paddingBottom: 10, paddingHorizontal: 5, }, + // surveyQtn_InputStyle: { backgroundColor: PageTheme.$secondary_color_light, borderRadius: 5, overflow: 'hidden', textAlign: 'left', fontSize: 14, color: PageTheme.$text_color, paddingVertical: 12, paddingHorizontal: 12, height: 40, fontFamily: deffontfamily }, + + surveyQtn_InputStyle: { + backgroundColor: PageTheme.$secondary_color_light, + borderRadius: 5, + textAlign: 'left', + fontSize: 14, + color: PageTheme.$text_color, + paddingHorizontal: 12, + paddingVertical: 8, + minHeight: 40, // ✅ flexible height + textAlignVertical: 'center',// ✅ Android fix + fontFamily: deffontfamily +}, + surveyQtn_datePicker_text: { + textAlign: 'left', + width: '100%', + backgroundColor: PageTheme.$secondary_color_light, + paddingVertical: 10, + paddingHorizontal: 10, + color: PageTheme.$accent_color2, + height: '100%', + justifyContent: 'center', + alignItems: 'center', + borderRadius: 5, + fontFamily: deffontfamily + }, + surveyQtn_datePicker: { position: 'absolute', width: 40, height: 40, right: 0, top: 0, backgroundColor: PageTheme.$primary_color, alignItems: 'center', justifyContent: 'center', borderTopRightRadius: 5, borderBottomRightRadius: 5 }, + surveyQtn_datePicker_con: { position: 'relative', justifyContent: 'center', height: 40, }, + surveyQtnRatingIcon: { position: 'absolute', width: 40, height: 40, right: 0, top: 0, backgroundColor: PageTheme.$primary_color, alignItems: 'center', justifyContent: 'center', borderTopRightRadius: 5, borderBottomRightRadius: 5 }, + + // Sampling + SamplingCat_action_reCap: { position: 'absolute', top: -10, right: -10, padding: 8, backgroundColor: '#efefef', borderRadius: 30, elevation: 2 }, + Sampling_pCon: { flexDirection: 'row', alignItems: 'center', paddingHorizontal: 10, paddingBottom: 20, marginTop: 2, borderBottomColor: PageTheme.$secondary_color_light, }, + Sampling_pCon2: { flexDirection: 'row', alignItems: 'center', paddingHorizontal: 10, paddingBottom: 20, borderBottomColor: PageTheme.$fourth_color, borderBottomWidth: 1, }, + Sampling_pText: { width: '40%', marginTop: 10, color: PageTheme.$text_color, fontWeight: '500', fontSize: 15, fontFamily: deffontfamily }, + Sampling_pTextTime: { width: '40%', marginTop: 10, color: PageTheme.$text_color, fontWeight: '400', fontSize: 14, fontFamily: deffontfamily }, + Sampling_LunchText: { width: '40%', marginTop: 10, paddingLeft: 20, color: PageTheme.$text_color, fontWeight: '400', fontSize: 15, fontFamily: deffontfamily }, + Sampling_menu_done: { position: 'absolute', width: 14, height: 14, right: 5, top: 0, borderRadius: 25, elevation: 3, shadowColor: '#000', backgroundColor: "#fff" }, + Sampling_listIcol1: { width: '100%' }, + Sampling_OStock_wrap: { width: '100%', marginBottom: 0 }, + Sampling_OStock_prds: { paddingBottom: 3, }, + Samling_borderA: { borderTopColor: PageTheme.$fourth_color, borderTopWidth: 1 }, + Samling_borderB: { borderBottomColor: PageTheme.$fourth_color, borderBottomWidth: 1 }, + Samling_borderT: { borderTopColor: PageTheme.$fourth_color, borderTopWidth: 1 }, + Sampling_HdrTWrap: { flexWrap: "wrap", flexDirection: "row", alignItems: "center", justifyContent: "center" }, + sampling_disable_Tick: { position: 'absolute', top: -1, right: -1 }, + sampling_CameraWrap: { paddingVertical: 5 }, + + // survey Screen View + SVn_ContentCon: { paddingHorizontal: 10, paddingBottom: 70 }, + SVn_ContentOuter: { width: '100%', height: '100%' }, + VLoginQA_ContentOuter: { width: '100%' }, + SVn_ContentInner: { padding: 10 }, + SVn_ContentInner_Survey: { padding: 100 }, + SVn_activeSurvey: { zIndex: 1,elevation:1, position: 'absolute', top: -15, left: 0, right: 0, alignItems: 'center', marginBottom: 10 }, + SVn_activeSurvey_tile: { shadowColor: '#8d8d8d', shadowOpacity: 1, elevation: 2, shadowOffset: { width: 0, height: 2 }, backgroundColor: '#0000', borderRadius: 30, paddingHorizontal: 15, alignItems: 'center', paddingVertical: 7, width: wp('100%') - 50 }, + SVn_SubmitBtn: { position: 'absolute', bottom: Platform.OS == 'ios' ? 30 : 10, left: 0, right: 0, width: '100%', alignItems: 'center' }, + SVn_PageWrapper: { marginTop: 10, paddingTop: 10, backgroundColor: PageTheme.$bg_color, borderTopLeftRadius: 40, borderTopRightRadius: 40, }, + SVn_QtnScroll: { width: '100%', paddingTop: 20 }, + SVn_QtnScrollInner: { width: '100%', paddingBottom: 40, paddingHorizontal: 5, }, + SVn_GroupView: { paddingTop: 20, paddingBottom: 30 }, + SVn_GroupView_hdr: { paddingHorizontal: 10, paddingVertical: 5, alignItems: 'center' }, + SVn_GroupView_hdrText: { fontSize: 13, color: PageTheme.$accent_color, fontFamily: deffontfamily }, + SVn_GroupViewList: { paddingTop: 10, }, + + // Feedback + FeedbVn_GroupView: { paddingBottom: 20 }, + + // Store Checklist + SChkVn_GroupView: { paddingBottom: 20 }, + SChk_BtnWrapFlex: { flexDirection: 'row', position: 'absolute', bottom: Platform.OS == 'ios' ? 30 : 10, left: 0, right: 0, width: '100%', alignItems: 'center', paddingHorizontal: 10 }, + SChk_BtnWrapFlex2: { flexDirection: 'row', position: 'absolute', bottom: Platform.OS == 'ios' ? 30 : 45, left: 0, right: 0, width: '100%', alignItems: 'center', paddingHorizontal: 10 }, + SChk_BtnCol: { width: '50%' }, + SChk_BtnCol1: { paddingRight: 10 }, + SChk_BtnCol2: { paddingLeft: 10 }, + SChk_Btn: { width: '100%' }, + SChk_BtnSave: { width: '100%' }, + SChk_BtnGst: { paddingLeft: 10, width: '100%' }, + Gst_InputStyle: { height: 46, borderRadius: 5, backgroundColor: PageTheme.$secondary_color_light, paddingHorizontal: 10, paddingVertical: 5, color: PageTheme.$text_color, fontFamily: deffontfamily, }, + + + // RatingModal + RatingModal: { position: 'absolute', zIndex: 99,elevation:99, backgroundColor: '#00000055', alignItems: 'center', justifyContent: 'center', top: 0, left: 0, right: 0, bottom: 0, width: '100%', height: '100%' }, + RatingModalCon: { zIndex: 9999,elevation:9999, backgroundColor: PageTheme.$bg_color, borderRadius: 10, padding: 10, width: '80%', elevation: 3, shadowColor: '#000', shadowOffset: { width: 0, height: 2 }, shadowOpacity: 0.3, }, + RatingModalHeding: { textAlign: 'center', fontSize: 14, color: PageTheme.$text_color, fontWeight: '500', marginBottom: 20, marginTop: 10, fontFamily: deffontfamily }, + RModal_list: { padding: 10, }, + RModal_listInner: {}, + RModal_Btns: { flexDirection: 'row', width: '100%', marginTop: 20, marginBottom: 20, justifyContent: 'space-evenly' }, + RModal_BtnCancel: { minWidth: 100, paddingHorizontal: 15, paddingVertical: 7, borderColor: PageTheme.$primary_color, borderWidth: 1, borderRadius: 30, }, + RModal_BtnTextCancel: { textAlign: 'center', fontSize: 14, color: PageTheme.$primary_color, fontWeight: '500', fontFamily: deffontfamily }, + RModal_Btnsave: { minWidth: 100, paddingHorizontal: 15, paddingVertical: 7, backgroundColor: PageTheme.$primary_color, borderRadius: 30, }, + RModal_BtnTextsave: { textAlign: 'center', fontSize: 14, color: PageTheme.$accent_color, fontWeight: '500', fontFamily: deffontfamily }, + RModal_listItem: { paddingHorizontal: 10, paddingVertical: 7, borderRadius: 4, marginBottom: 10, }, + RModal_listItemText: { textAlign: 'center', fontSize: 14, color: PageTheme.$text_color, fontWeight: '500', fontFamily: deffontfamily }, + + // Voice Rcorder + VRModalHeding: { textAlign: 'center', fontSize: 14, color: PageTheme.$text_color, fontWeight: '500', marginTop: 10, fontFamily: deffontfamily }, + VRSubHeding: { textAlign: 'center', fontSize: 12, color: PageTheme.$red, fontWeight: '400', marginBottom: 20, marginTop: 10, fontFamily: deffontfamily }, + VRSubHeding2: { textAlign: 'center', fontSize: 12, color: PageTheme.$primary_color, fontWeight: '400', marginTop: 10, fontFamily: deffontfamily }, + VRMicBgRipple1: { width: 80, height: 80, borderWidth: 5, borderColor: '#f5acb4c2', borderRadius: 40, position: 'absolute', top: 0, left: 0 }, + VRMicBgRipple2: { width: 80, height: 80, borderWidth: 5, borderColor: '#fce6e9e3', borderRadius: 70, position: 'absolute', top: 0, left: 0 }, + + + VoiceRecorder: { width: '100%', alignItems: 'center' }, + VoiceRecorderMic: { padding: 10, }, + VoiceRecorderMicBtn: { width: 60, height: 60, backgroundColor: PageTheme.$red, alignItems: 'center', justifyContent: 'center', borderRadius: 40, elevation: 3, shadowOpacity: 0.2, shadowOffset: { width: 0, height: 2 }, shadowColor: '#bdbdbd' }, + VoiceRecorderStopBtn: { width: 60, height: 60, backgroundColor: PageTheme.$red, position: 'absolute', top: 10, left: 10, alignItems: 'center', justifyContent: 'center', borderRadius: 40, elevation: 3, shadowOpacity: 0.2, shadowOffset: { width: 0, height: 2 }, shadowColor: '#bdbdbd' }, + VoiceRecordedView: { marginTop: 30, alignItems: 'center', width: '100%' }, + VoiceRecorderTimer: { textAlign: 'center', fontSize: 13, color: PageTheme.$text_color, fontWeight: '400', fontFamily: deffontfamily }, + + VRPlayBack: { alignItems: 'center', flexDirection: 'row', marginTop: 10, paddingTop: 10, borderTopColor: PageTheme.$secondary_color_light, borderTopWidth: 2, width: '100%', paddingHorizontal: 10, }, + VRPlayBackBarView: { width: '70%', alignItems: 'center', }, + VRPlayBackBar: { position: 'relative', width: '100%' }, + VRPlayBackBarBg: { width: '100%', height: 10, borderRadius: 20, backgroundColor: '#efefef' }, + VRPlayBackBarFilled: { width: '10%', position: 'absolute', top: 0, left: 0, height: 10, borderRadius: 20, backgroundColor: PageTheme.$primary_color }, + VRPlayBackTimer: {}, + VRPlayBackControls: { width: '30%', alignItems: 'flex-end' }, + VRPB_Play: { width: 40, height: 40, backgroundColor: PageTheme.$primary_color, alignItems: 'center', justifyContent: 'center', borderRadius: 40, elevation: 3, shadowOpacity: 0.2, shadowOffset: { width: 0, height: 2 }, shadowColor: '#bdbdbd' }, + VRPB_Pause: { width: 40, height: 40, backgroundColor: PageTheme.$primary_color, position: 'absolute', top: 0, right: 0, alignItems: 'center', justifyContent: 'center', borderRadius: 40, elevation: 3, shadowOpacity: 0.2, shadowOffset: { width: 0, height: 2 }, shadowColor: '#bdbdbd' }, + + SurveyL_SubmitBtn: { position: 'absolute', bottom: Platform.OS == 'ios' ? 30 : 10, left: 10, right: 0, width: '100%', paddingBottom: 20, alignItems: 'center' }, + + // addstore + addstorebtn: { width: '30%', paddingVertical: 5, paddingHorizontal: 15, alignItems: 'center', justifyContent: 'center', backgroundColor: PageTheme.$bg_color, borderRadius: 15, elevation: 3, shadowOffset: { width: 0, height: 2 }, shadowColor: '#747474', shadowOpacity: 1.15 }, + + // Visitor Login + vl_scrollView: { width: wp('100%') }, + vl_scrollViewInner: { width: '100%', paddingHorizontal: 10, }, + vlPageWrapper: { paddingTop: 10, backgroundColor: PageTheme.$secondary_color_light }, + + vlUinfo_Card: { marginBottom: 10, backgroundColor: PageTheme.$bg_color, borderRadius: 10, padding: 10, elevation: 3, shadowColor: '#000', shadowOffset: { width: 0, height: 2 }, shadowOpacity: 0.15 }, + vlUinfo_CardRow: { flexDirection: 'row', paddingHorizontal: 5, paddingVertical: 5 }, + vlUinfo_CardBorder: { borderBottomColor: PageTheme.$secondary_color_light, borderBottomWidth: 2 }, + vlUinfo_lbl: { fontSize: 14, color: PageTheme.$secondary_color_dark, marginRight: 5, fontFamily: deffontfamily }, + vlUinfo_text: { fontSize: 14, color: PageTheme.$text_color, fontFamily: deffontfamily }, + vlEmplForm: { marginTop: 10, marginBottom: 10, }, + vlEmplFormRow: { flexDirection: 'row', alignItems: 'center', }, + vlEmplForm_field: { width: '80%' }, + vlEmplForm_InputStyle: { marginRight: 10, backgroundColor: PageTheme.$bg_color, borderRadius: 7, elevation: 3, shadowOffset: { width: 0, height: 2 }, shadowColor: '#afafaf', shadowOpacity: 1.15, paddingVertical: 10, paddingHorizontal: 10, color: PageTheme.$text_color, fontFamily: deffontfamily }, + vlEmplSearchBtn: { width: '20%', paddingVertical: 10, paddingHorizontal: 10, alignItems: 'center', justifyContent: 'center', backgroundColor: PageTheme.$primary_color, borderRadius: 7, elevation: 3, shadowOffset: { width: 0, height: 2 }, shadowColor: '#747474', shadowOpacity: 1.15 }, + vlEmplSearchBtn2: { width: '30%', paddingVertical: 5, paddingHorizontal: 5, alignItems: 'center', justifyContent: 'center', backgroundColor: PageTheme.$primary_color, borderRadius: 7, elevation: 3, shadowOffset: { width: 0, height: 2 }, shadowColor: '#747474', shadowOpacity: 1.15 }, + vlEmplSearchBtnText: { fontSize: 14, fontWeight: '500', color: '#fff', fontFamily: deffontfamily }, + + vlEmplList: { marginTop: 10, }, + vlEmplLDtl: { marginBottom: 10, backgroundColor: PageTheme.$primary_color, borderRadius: 10, padding: 10, elevation: 3, shadowColor: '#747474', shadowOffset: { width: 0, height: 2 }, shadowOpacity: 1.0 }, + vlEmplLDtlRow: { flexDirection: 'row', paddingHorizontal: 5, paddingVertical: 5 }, + vlEmplLDtlRow_Lbl: { fontSize: 14, color: PageTheme.$accent_color, marginRight: 5, fontWeight: '700', fontFamily: deffontfamily }, + vlEmplLDtlRow_Text: { fontSize: 14, color: PageTheme.$text_color_light2, marginRight: 5, textTransform: 'capitalize', fontFamily: deffontfamily }, + vlEmplLDtlRow_Border: { borderBottomColor: PageTheme.$secondary_color_light, borderBottomWidth: 1 }, + vlEmplLDtlAct: { paddingTop: 10, flexDirection: 'row', }, + vlED_Act_Cameras: { width: '80%' }, + vlED_Act_CameraCon: { marginRight: 10, marginTop: 5, }, + vlED_Act_openCam: {}, + vlED_Act_ImageView: { position: 'relative', backgroundColor: PageTheme.$secondary_color_light, padding: 5, borderRadius: 10, width: 60, height: 60 }, + vlED_Act_Image: { width: 50, height: 50, borderRadius: 10, backgroundColor: '#232323' }, + vlED_Act_reCap: { position: 'absolute', top: -10, right: -10, padding: 8, backgroundColor: PageTheme.$bg_color, borderRadius: 30, elevation: 2, shadowColor: '#8d8d8d', shadowOffset: { width: 0, height: 2 }, shadowOpacity: 0.5 }, + vlED_Act_addEmplCon: { width: '20%', justifyContent: 'flex-end' }, + vlED_Act_addEmpl: { height: 40, paddingHorizontal: 10, marginBottom: 5, alignItems: 'center', justifyContent: 'center', backgroundColor: PageTheme.$accent_color, borderRadius: 7, elevation: 3, shadowOffset: { width: 0, height: 2 }, shadowColor: '#efefef', shadowOpacity: 1 }, + vlED_Act_addEmplText: { fontSize: 14, color: PageTheme.$primary_color, textTransform: 'capitalize', fontWeight: '600', fontFamily: deffontfamily }, + + + vl_visitorsList: { marginTop: 10, borderTopColor: PageTheme.$accent_color, borderTopWidth: 2, paddingTop: 10, }, + vl_visitorsListText: { fontSize: 14, color: PageTheme.$secondary_color_dark, marginRight: 5, fontWeight: '500', fontFamily: deffontfamily }, + vl_TblHeader: { marginBottom: 10, marginTop: 10, backgroundColor: PageTheme.$primary_color, borderRadius: 10, padding: 5, elevation: 3, shadowColor: '#747474', shadowOffset: { width: 0, height: 2 }, shadowOpacity: 1.0, flexDirection: 'row', alignItems: 'center' }, + vl_TblHeaderBox: { alignItems: 'center', backgroundColor: PageTheme.$secondary_color_light, paddingVertical: 5, borderRadius: 5, }, + vl_TblHeaderBox1: { width: wp('30%') - 15, marginRight: 5 }, + vl_TblHeaderBox2: { width: wp('30%') - 15, marginRight: 5 }, + vl_TblHeaderBox3: { width: '40%' }, + vl_TblHeaderTxt: { fontSize: 13, color: PageTheme.$text_color, marginRight: 5, textTransform: 'capitalize', fontWeight: '700', fontFamily: deffontfamily }, + + vl_TblBody: { backgroundColor: PageTheme.$bg_color, borderRadius: 10, padding: 5, elevation: 3, shadowColor: '#afafaf', shadowOffset: { width: 0, height: 2 }, shadowOpacity: 1.0 }, + vl_visitorsLItem: { flexDirection: 'row', alignItems: 'center', paddingVertical: 10 }, + vl_visitorsLItemB: { borderBottomColor: PageTheme.$secondary_color_light, borderBottomWidth: 1 }, + vl_visitorsLI_Box: { alignItems: 'center', }, + vl_visitorsLI_Box1: { width: wp('30%') - 15, marginRight: 5, alignItems: 'flex-start', paddingLeft: 5, }, + vl_visitorsLI_Box2: { width: wp('30%') - 15, marginRight: 5 }, + vl_visitorsLI_Box3: { width: '40%', flexDirection: 'row', alignItems: 'center', position: 'relative' }, + vl_visitorsLI_Txt: { fontSize: 13, color: PageTheme.$text_color, marginRight: 5, textTransform: 'capitalize', fontWeight: '400', fontFamily: deffontfamily }, + vl_CheckOutBtn: { backgroundColor: PageTheme.$primary_color, marginRight: 5, borderRadius: 10, padding: 5, paddingHorizontal: 10, elevation: 3, shadowColor: '#afafaf', shadowOffset: { width: 0, height: 2 }, shadowOpacity: 1.0 }, + vl_CheckOutBtnText: { color: PageTheme.$accent_color, fontSize: 14, fontWeight: '600', fontFamily: deffontfamily }, + vl_DeleteBtn: { position: 'absolute', right: 5, backgroundColor: PageTheme.$bg_color, borderRadius: 20, width: 35, height: 35, alignItems: 'center', justifyContent: 'center', elevation: 2, shadowColor: '#afafaf', shadowOffset: { width: 0, height: 2 }, shadowOpacity: 1.0 }, + + vl_checkoutModal: { alignItems: 'center', }, + vl_checkoutModalTitle: { fontSize: 14, fontWeight: '500', color: PageTheme.$primary_color, marginBottom: 10, fontFamily: deffontfamily }, + vl_removeModalTitle: { fontSize: 14, fontWeight: '500', color: PageTheme.$text_color, marginBottom: 10, marginTop: 10, fontFamily: deffontfamily }, + vl_removeModalSubTitle: { fontSize: 14, fontWeight: '500', color: PageTheme.$primary_color, marginBottom: 20, fontFamily: deffontfamily }, + vl_checkoutM_Con: { width: '100%' }, + vl_checkoutM_Camera: { alignItems: 'center', }, + vl_checkoutM_CameraCon: {}, + vl_checkoutM_openCam: {}, + vl_checkoutM_ImageView: { position: 'relative', backgroundColor: PageTheme.$secondary_color_light, padding: 5, borderRadius: 10, width: 90, height: 90 }, + vl_checkoutM_Image: { width: 80, height: 80, borderRadius: 10, backgroundColor: '#232323' }, + vl_checkoutM_recap: { position: 'absolute', top: -10, right: -10, padding: 8, backgroundColor: PageTheme.$primary_color, borderRadius: 30, elevation: 2, shadowColor: '#8d8d8d', shadowOffset: { width: 0, height: 2 }, shadowOpacity: 0.5 }, + vl_checkoutM_btng: { marginTop: 20, }, + vlStatus: { flexDirection: 'row', alignItems: 'center', justifyContent: 'center' }, + vlStatus2: { flexDirection: 'row', alignItems: 'center', justifyContent: 'center' }, + + // REports + rp_scrollView: { width: '100%', height: '100%' }, + rp_scrollViewInner: { width: '100%', paddingHorizontal: 5 }, + reportCon: { paddingBottom: 10 }, + reportConHdr: { backgroundColor: PageTheme.$primary_color, borderRadius: 7, paddingVertical: 10, paddingHorizontal: 10, elevation: 3, shadowColor: '#747474', shadowOffset: { width: 0, height: 2 }, shadowOpacity: 1.0, flexDirection: 'row', justifyContent: 'center', marginBottom: 5, marginTop: 5 }, + reportConHdrText: { color: PageTheme.$accent_color, fontSize: 14, fontWeight: '500', fontFamily: deffontfamily }, + report_TblHeader: { marginBottom: 10, marginTop: 10, backgroundColor: PageTheme.$primary_color, borderRadius: 10, elevation: 3, shadowColor: '#747474', shadowOffset: { width: 0, height: 2 }, shadowOpacity: 1.0, flexDirection: 'row' }, + report_TblHeaderBox: { alignItems: 'center', marginRight: 2, marginLeft: 2, height: '100%', backgroundColor: PageTheme.$secondary_color_light, paddingVertical: 5, borderRadius: 5, }, + report_TblHeaderBox1: { width: wp('40%') - 15, marginRight: 5 }, + report_TblHeaderBox2: { width: wp('30%') - 15, marginRight: 5 }, + report_TblHeaderBox3: { width: '30%' }, + report_TblHeaderTxt: { fontSize: 13, color: PageTheme.$text_color, marginRight: 5, fontWeight: '700', fontFamily: deffontfamily }, + report_new_date: { color: PageTheme.$text_color, fontSize: 14, fontWeight: '400', marginBottom: 6, fontFamily: deffontfamily, marginLeft: 12 }, + + report_TblBody: { backgroundColor: PageTheme.$bg_color, borderRadius: 10, padding: 5, elevation: 3, shadowColor: '#5f5f5f', shadowOffset: { width: 0, height: 2 }, shadowOpacity: 1.0 }, + reportItem: { flexDirection: 'row', alignItems: 'center', paddingVertical: 10 }, + reportItemB: { borderBottomColor: PageTheme.$secondary_color_light, borderBottomWidth: 1 }, + reportItemBg: { backgroundColor: PageTheme.$text_color_light2 }, + reportItemCol: { alignItems: 'center', marginRight: 2, marginLeft: 2 }, + DYreportItemCol: { alignItems: 'center', marginRight: 2, marginLeft: 2, justifyContent: 'center' }, + reportItemCol1: { width: wp('40%') - 15, marginRight: 5, alignItems: 'flex-start', paddingLeft: 5, }, + reportItemCol2: { width: wp('30%') - 15, marginRight: 5 }, + reportItemCol3: { width: '30%', alignItems: 'center' }, + reportItemColText: { fontSize: 13, color: PageTheme.$text_color, marginRight: 5, fontWeight: '400', fontFamily: deffontfamily }, + + report_CardsWrap: { marginTop: 10 }, + report_CardI: { padding: 10, marginBottom: 15, backgroundColor: PageTheme.$bg_color, borderRadius: 10, elevation: 3, shadowColor: '#000', shadowOffset: { width: 0, height: 2 }, shadowOpacity: 0.2 }, + report_CITotal: { backgroundColor: PageTheme.$fourth_color, paddingHorizontal: 0, paddingTop: 0, }, + report_CardIRow: { flexDirection: 'row', alignItems: 'center', paddingVertical: 2 }, + report_CardIRow_BorderBtm: { borderBottomColor: PageTheme.$secondary_color_light, borderBottomWidth: 1 }, + report_CIRT_BorderBtm: { borderBottomColor: PageTheme.$text_color_light2, borderBottomWidth: 1 }, + report_CardIRow_Lbl: { fontSize: 14, color: PageTheme.$primary_color, marginRight: 5, fontWeight: '400', fontFamily: deffontfamily }, + report_CardIRow_Val: { fontSize: 13, color: PageTheme.$text_color, marginRight: 5, fontWeight: '400', fontFamily: deffontfamily }, + report_CIR_LblTotal: { color: PageTheme.$accent_color, }, + report_CIR_ValTotal: { color: PageTheme.$accent_color, }, + report_CardITHdr: { backgroundColor: PageTheme.$primary_color, borderTopLeftRadius: 10, paddingHorizontal: 15, paddingVertical: 5, borderTopRightRadius: 10, borderBottomColor: PageTheme.$secondary_color_light, borderBottomWidth: 1, paddingBottom: 5, marginBottom: 10 }, + report_CardITBody: { backgroundColor: PageTheme.$fourth_color, paddingHorizontal: 10 }, + report_CardITHdrText: { fontSize: 16, color: PageTheme.$accent_color, marginRight: 5, fontWeight: '500', fontFamily: deffontfamily }, + + // report menu + reportMenuCon: { backgroundColor: PageTheme.$bg_color, borderRadius: 10, padding: 5, marginTop: 20 }, + reportMenuItem: { flexDirection: 'row', alignItems: 'center', paddingVertical: 10, justifyContent: 'center', paddingHorizontal: 10, backgroundColor: PageTheme.$primary_color, borderRadius: 6, marginBottom: 15, elevation: 3, shadowColor: '#000', shadowOffset: { width: 0, height: 2 }, shadowOpacity: 1.0 }, + reportMenuItemText: { fontSize: 13, color: PageTheme.$accent_color, fontWeight: '500', fontFamily: deffontfamily }, + + + settingsWrap: { padding: 10, paddingHorizontal: 10, }, + settingsBtn: { flexDirection: 'row', alignItems: 'center', position: 'relative', backgroundColor: PageTheme.$secondary_color_light, paddingVertical: 15, paddingHorizontal: 10, borderRadius: 2, elevation: 1, shadowColor: '#afafaf', shadowOffset: { width: 0, height: 2 }, shadowOpacity: 0.15, marginBottom: 10, }, + settingsBtnText: { fontSize: 15, fontWeight: '600', color: PageTheme.$text_color, fontFamily: deffontfamily }, + settingsBtnIcon: { position: 'absolute', right: 10 }, + + // BreakTime + Breakclocktimer: { position: "absolute", right: 0, top: 10, flexDirection: 'row' }, + BreakclocktimerWrap: { marginBottom: 10, width: "100%", backgroundColor: "#E1E3E2", flexDirection: 'row', alignItems: 'center', justifyContent: 'center', backgroundColor: "#E1E3E2" }, + BreakclocktimerRow: { flexDirection: 'row', alignItems: 'center', justifyContent: 'center', backgroundColor: "#FFF", width: '50%', paddingVertical: 8, marginVertical: 16, marginLeft: "22%", borderRadius: 30 }, + BreakclocktimerText: { color: PrimaryTheme.$primary_color, fontSize: 14, marginLeft: 5, fontWeight: '400' }, + + BreakaddVisForm: { paddingHorizontal: 10, }, + BreakaddVisRow: { flexDirection: "column", width: '100%', flexWrap: 'wrap', justifyContent: 'center' }, + BreakaddVisCol50: { width: '100%', marginBottom: 10, }, + BreakaddVisCol100: { width: '100%', marginBottom: 10, }, + BreakaddVisColspace: { paddingHorizontal: 5 }, + BreakaddVisCol1: { marginRight: 5, }, + BreakaddVisCol2: { marginLeft: 5, }, + BreakaddVisFormGrp: {}, + BreakaddVisInputStyle: { height: 40, borderRadius: 5, backgroundColor: PageTheme.$secondary_color_light, paddingHorizontal: 10, color: PageTheme.$text_color }, + BreakaddVisLabel: { color: PageTheme.$text_color, fontSize: 14, fontWeight: '400', marginBottom: 6 }, + + Break_RItemCol1: { width: wp('24%') - 15, marginRight: 5, justifyContent: 'flex-start', alignItems: 'center', paddingLeft: 5, flexDirection: 'row', }, + Break_RItemCol2: { width: wp('25%') - 15, marginRight: 5 }, + Break_RItemCol3: { width: '25%', alignItems: 'center' }, + Break_RItemCol4: { width: '23%', alignItems: 'center' }, + + BreakI_RItemCol1: { width: wp('23%') - 15, marginRight: 5, justifyContent: 'flex-start', alignItems: 'center', paddingLeft: 5, flexDirection: 'row', }, + BreakI_RItemCol2: { width: wp('22%') - 15, marginRight: 5 }, + BreakI_RItemCol3: { width: '22%', alignItems: 'center' }, + + // breakTime + Break_RTblHeaderTxt: { fontSize: 12, color: PageTheme.$text_color, marginRight: 5, textTransform: 'capitalize', fontWeight: '700' }, + Break_RTblBody: { backgroundColor: PageTheme.$bg_color, borderRadius: 10, padding: 5, elevation: 3, shadowColor: '#afafaf', shadowOffset: { width: 0, height: 2 }, shadowOpacity: 1.0 }, + Break_RItem: { flexDirection: 'row', alignItems: 'center' }, + Break_RTblHeaderBox1: { width: wp('25%') - 15, marginRight: 5 }, + Break_RTblHeaderBox2: { width: wp('25%') - 15, marginRight: 5 }, + Break_RTblHeaderBox3: { width: '23%', marginRight: 5 }, + Break_VisLabel: { color: PageTheme.$text_color, fontSize: 12, marginVertical: 10, fontWeight: '400' }, + Break_VisBtnText: { fontSize: 14 }, + Break_Vis_btn: { paddingHorizontal: 20, minWidth: 100, paddingVertical: 10, borderRadius: 40, alignItems: 'center', elevation: 2, shadowColor: '#000', shadowOffset: { width: 0, height: 2 }, shadowOpacity: 0.3 }, + Break_ConWrap: { width: '100%' }, + BreakI_RTblHeaderBox1: { width: wp('25%') - 15, marginRight: 5 }, + BreakI_RTblHeaderBox2: { width: wp('24%') - 15, marginRight: 5 }, + BreakI_RTblHeaderBox3: { width: '29%', marginRight: 5 }, + + // network status bar + netSBar: { position: 'absolute', bottom: 0, width: '100%', backgroundColor: '#000', alignItems: 'center', justifyContent: 'center', paddingHorizontal: 10, paddingVertical: 6 }, + netSBarText: { fontSize: 13, fontWeight: '500', color: '#fff', fontFamily: deffontfamily }, + netSBarGreen: { backgroundColor: 'green' }, + netSBarGrey: { backgroundColor: 'red' }, + netSBarGrey_Text: { color: '#fff' }, + netSBarGreen_Text: { color: '#fff' }, + + + // Window styles + Windows_Wrap: {}, + POS_Wrap: { paddingHorizontal: 10 }, + Win_scroll: { justifyContent: 'center', padding: 10, paddingBottom: 100, width: '100%' }, + Win_scrollO: { marginBottom: 80, width: '100%' }, + WItem_wrap: { width: '100%', marginBottom: 20, }, + WItem_Hdr: {}, + WItem_Hdrbg: { width: '100%', paddingHorizontal: 10, paddingVertical: 7, backgroundColor: PageTheme.$primary_color, borderRadius: 5, justifyContent: 'center', position: 'relative' }, + WItem_HdrText: { fontSize: 14, fontWeight: '500', color: PageTheme.$accent_color, width: '90%', fontFamily: deffontfamily }, + WItem_HdrSubTitleText: { fontSize: 13, fontWeight: '400', color: PageTheme.$accent_color, width: '80%', marginTop: 10, fontFamily: deffontfamily }, + WItem_Hdrname2: { fontSize: 14, color: PageTheme.$accent_color, fontWeight: '400', marginTop: 4, fontFamily: deffontfamily }, + WForm: { paddingHorizontal: 10, position: 'relative', paddingVertical: 5, backgroundColor: PageTheme.$secondary_color_light, borderRadius: 10, elevation: 1, shadowColor: '#484848', shadowOpacity: 0.1, shadowOffset: { width: 0, height: 2 } }, + WItem_RefImgBtn: { position: 'absolute', right: 0, top: -5, width: 40, height: 40, borderRadius: 20, alignItems: 'center', justifyContent: 'center' }, + WSCameraWrap: { justifyContent: 'center' }, + WSCameraCon: {}, + WSCameraLabel: { fontSize: 13, fontWeight: '400', color: '#000', textAlign: 'center', marginTop: 5, flexWrap: 'wrap', fontFamily: deffontfamily }, + + + WQPicker_InputStyle: { + backgroundColor: PageTheme.$bg_color, + borderRadius: 5, + fontFamily: deffontfamily, + height: 45, + textAlign: 'center', + paddingHorizontal: 10, + justifyContent: 'center', + + // 👇 MOST IMPORTANT + textAlignVertical: 'center', // Android fix + lineHeight: 18, + fontSize: 14, + color: PageTheme.$text_color, + } + , + WStkWrap: { backgroundColor: PageTheme.$bg_color, marginBottom: 10, paddingHorizontal: 10, paddingVertical: 5, borderRadius: 5, elevation: 1, shadowColor: '#efefef', shadowOpacity: 0.05, shadowOffset: { width: 0, height: 2 } }, + WStkHdrText: { fontSize: 13, fontWeight: '500', color: PageTheme.$text_color_dark, marginBottom: 10, paddingBottom: 5, borderBottomWidth: 1, borderBottomColor: PageTheme.$secondary_color_light, fontFamily: deffontfamily }, + WStkHdrText2: { fontSize: 13, fontWeight: '500', color: PageTheme.$text_color_dark, paddingBottom: 5, fontFamily: deffontfamily }, + WStkHdrText3: { fontSize: 13, fontWeight: '500', color: PageTheme.$text_color_dark, fontFamily: deffontfamily }, + WStkHdrTextMBQ: { fontSize: 13, fontWeight: '800', color: PageTheme.$text_color_dark, fontFamily: deffontfamily }, + WStkHdr_checkboxWrap: { flexDirection: 'row', alignItems: 'flex-start', justifyContent: 'flex-start' }, + WStkHdr_checkbox: { alignSelf: 'flex-start' }, + WStkHdr_checkboxCon: { position: 'absolute', width: 25, height: 25, top: -5, left: -10, }, + WStkHdr_checkboxpName: { width: '85%', marginLeft: 25 }, + WStkHdr_PrdcontentWrap: { borderTopColor: PageTheme.$secondary_color_light, borderTopWidth: 1, marginTop: 5, paddingTop: 5, }, + WStkCon: {}, + WStkInputStyle: { backgroundColor: PageTheme.$secondary_color_light, borderRadius: 5, overflow: 'hidden', textAlign: 'center', fontSize: 14, color: PageTheme.$text_color, paddingVertical: 2, paddingHorizontal: 12, height: 35, fontFamily: deffontfamily }, + windhdrTextCon: { position: 'relative', paddingHorizontal: 10, marginBottom: 5, justifyContent: 'center', alignItems: 'center', paddingVertical: 5, borderRadius: 4 }, + windhdrText: { fontSize: 15, fontWeight: '600', color: PageTheme.$primary_color, fontFamily: deffontfamily }, + // windhdrText:{fontSize:15,fontWeight:'700',color:PageTheme.$primary_color,}, + windhdr_checkAllBtnCon: { alignItems: 'flex-start', marginBottom: 10 }, + windhdr_checkAllBtn: { flexDirection: 'row', backgroundColor: PageTheme.$fourth_color, paddingRight: 10, paddingVertical: 3, alignItems: 'center', justifyContent: 'center', borderRadius: 4, elevation: 2, shadowOpacity: 0.1, shadowOffset: { width: 0, height: 2 }, shadowColor: '#000' }, + windhdr_checkAllBtnText: { marginLeft: 10, fontSize: 13, fontWeight: '500', color: PageTheme.$text_color, fontFamily: deffontfamily }, + WQ_InputStyle: { backgroundColor: PageTheme.$bg_color, borderRadius: 5, overflow: 'hidden', textAlign: 'left', fontSize: 14, color: PageTheme.$text_color, paddingVertical: 12, paddingHorizontal: 12, height: 40, fontFamily: deffontfamily }, + WQ_datePicker_text: { fontFamily: deffontfamily, textAlign: 'left', width: '100%', backgroundColor: PageTheme.$bg_color, paddingVertical: 10, paddingHorizontal: 10, color: PageTheme.$accent_color2, height: '100%', justifyContent: 'center', alignItems: 'center', borderRadius: 5 }, + // contact us + ContUs_Wrap: { padding: 10, marginTop: 10, }, + ContUs_Hdr: { backgroundColor: PageTheme.$secondary_color_dark, borderRadius: 4, justifyContent: 'center', alignItems: 'center', paddingVertical: 10, paddingHorizontal: 12 }, + ContUs_HdrText: { color: PageTheme.$accent_color, fontSize: 14, fontWeight: '500', fontFamily: deffontfamily }, + ContUs_infoBox: { backgroundColor: PageTheme.$secondary_color_light, marginBottom: 10, flexDirection: 'row', alignItems: 'center', borderRadius: 5, paddingVertical: 10, paddingHorizontal: 10 }, + ContUs_IB_desc: { marginLeft: 10, flexWrap: 'wrap', width: '85%', color: PageTheme.$text_color }, + + // Image Types + ImageTypesPageWrap: { paddingHorizontal: 10, }, + ImageTypesLHd: { backgroundColor: PageTheme.$primary_color, marginBottom: 10, alignItems: 'center', borderRadius: 5, paddingVertical: 10, paddingHorizontal: 10, elevation: 0.5, shadowOpacity: 0.1, shadowOffset: { width: 0, height: 2 }, shadowColor: '#000' }, + ImageTypesLHdText: { fontSize: 14, fontWeight: '500', color: PageTheme.$accent_color, textAlign: 'center', fontFamily: deffontfamily }, + ImageTypesLOuter: { marginTop: 10, }, + ImageTypesL: {}, + ImageTypesLCon: { position: 'relative', backgroundColor: PageTheme.$secondary_color_light, marginBottom: 10, alignItems: 'center', borderRadius: 5, paddingVertical: 10, paddingHorizontal: 10, elevation: 0.5, shadowOpacity: 0.1, shadowOffset: { width: 0, height: 2 }, shadowColor: '#000' }, + ImageTypesLName: { fontSize: 13, fontWeight: '500', color: PageTheme.$text_color, fontFamily: deffontfamily }, + ImageTypesLImageCountBox: { position: 'absolute', top: 7, right: 10, backgroundColor: PageTheme.$primary_color, width: 25, height: 25, borderRadius: 30, alignItems: 'center', justifyContent: 'center' }, + ImageTypesLImageCountText: { fontSize: 13, fontWeight: '600', color: PageTheme.$accent_color, fontFamily: deffontfamily }, + + // Store Images Cap Screen + ImageCapCamWrap: { flexDirection: 'row', flexWrap: 'wrap', alignItems: 'flex-start' }, + ImageCapViewWrap: { flexDirection: 'row', flexWrap: 'wrap', alignItems: 'flex-start', marginTop: 20, }, + ImageCapCamCon: { marginRight: 10, }, + ImgCapWrap: { paddingHorizontal: 10, }, + ImgCapCon: {}, + ImgCapBox: {}, + ImgCapBoxTDF: {}, + ImageCapImgViewOuter: { width: '33%' }, + ImageCapImgView: { position: 'relative', width: 90, backgroundColor: PageTheme.$secondary_color_light, padding: 5, borderRadius: 10, marginRight: 20, marginBottom: 20, }, + ImageCapImgView1: { alignItems: 'flex-start' }, + ImageCapImgView2: { alignItems: 'center' }, + ImageCapImgView3: { alignItems: 'flex-end' }, + ImageCapImg: { width: 80, height: 80, borderRadius: 10, backgroundColor: '#232323' }, + ImageCapImgRemove: { position: 'absolute', top: -10, right: -10, padding: 6, backgroundColor: PageTheme.$red, borderRadius: 30, elevation: 1, shadowColor: '#000', shadowOpacity: 0.2, shadowOffset: { width: 0, height: 2 } }, + + stImage_RedAlert: { paddingHorizontal: 13, marginBottom: 5, paddingVertical: 5, borderRadius: 6, backgroundColor: '#dae4e0', width: '100%' }, + stImage_RedAlertTxt: { fontSize: 12, color: 'green', textAlign: 'center', fontWeight: '500', fontFamily: deffontfamily }, + + // SOS one app + SOSForm: { width: '100%', paddingHorizontal: 10, borderRadius: 10, backgroundColor: PageTheme.$fourth_color, elevation: 1, shadowColor: '#484848', shadowOpacity: 0.1, shadowOffset: { width: 0, height: 2 } }, + SOSheadingsCon: { position: 'relative', paddingHorizontal: 10, justifyContent: 'center', alignItems: 'center', paddingVertical: 5, marginBottom: 10, borderRadius: 4 }, + SOSheadingsCon2: { backgroundColor: PageTheme.$fourth_color }, + SOSheadingsCon3: { marginBottom: 0 }, + SOSheadingsText: { fontSize: 15, fontWeight: '600', color: PageTheme.$text_color_dark, fontFamily: deffontfamily_bold }, + SOSheadingsText2: { color: PageTheme.$text_color, }, + + SOSHdrForm: { paddingHorizontal: 10, position: 'relative', marginTop: 10, paddingVertical: 10, borderRadius: 5 }, + SOSChildlist: {}, + // SOSInputStyle: { backgroundColor: PageTheme.$bg_color, width: '80%', borderRadius: 5, overflow: 'hidden', fontSize: 14, color: PageTheme.$text_color, paddingVertical: 2, paddingHorizontal: 12, height: 35, fontFamily: deffontfamily }, + SOSlist_form: { marginTop: 10, borderTopColor: PageTheme.$secondary_color_light, borderTopWidth: 1, marginTop: 5, paddingTop: 5, }, + SOSform_row: { width: '100%', flexDirection: 'row', marginBottom: 10 }, + SOSform_colflex: { width: '100%', flexDirection: 'row', alignItems: 'center', }, + SOSform_cols: { width: '100%', }, + SOSform_colsCommon: {}, + SOSform_col1: { width: '30%', paddingRight: 5, }, + SOSform_col2: { width: '70%', paddingLeft: 5 }, + SOSform_collabel: { width: '100%', color: PageTheme.$text_color_900, fontSize: 13, fontFamily: deffontfamily }, + SOSListHdr: { marginTop: 10, }, + SOShdrImagesWrap: { width: '100%', flexDirection: 'row', flexWrap: 'wrap', alignItems: 'center' }, + SOSChildImagesWrap: { width: '100%', flexDirection: 'row', flexWrap: 'wrap', justifyContent: 'center' }, + SOSCameraBtn: { width: 80, height: 80, justifyContent: 'center', alignItems: 'center', backgroundColor: PageTheme.$primary_color, padding: 8, borderRadius: 18, elevation: 2 }, + + // StoreScore KPI + StSC_HdrWrap: { paddingHorizontal: 10 }, + StSC_ConWrap: { height: '100%', width: '100%' }, + StSC_scrollView: { width: wp('100%'), height: '100%', marginBottom: 100 }, + DYSC_scrollView: { width: wp('100%'), height: '100%', marginBottom: 20 }, + StSC_scrollViewInner: { width: '100%', paddingHorizontal: 10, paddingBottom: 20, paddingTop: 5 }, + StSCreportCon: {}, + StSC_RonHdr: { backgroundColor: PageTheme.$primary_color, borderRadius: 7, paddingVertical: 10, paddingHorizontal: 10, elevation: 3, shadowColor: '#747474', shadowOffset: { width: 0, height: 2 }, shadowOpacity: 1.0, flexDirection: 'row', justifyContent: 'center', marginBottom: 5 }, + StSC_RConHdrText: { color: PageTheme.$accent_color, fontSize: 14, fontWeight: '500', fontFamily: deffontfamily }, + StSC_RTblHeader: { marginBottom: 10, marginHorizontal: 10, backgroundColor: PageTheme.$primary_color, borderRadius: 10, padding: 5, elevation: 3, shadowColor: '#747474', shadowOffset: { width: 0, height: 2 }, shadowOpacity: 1.0, flexDirection: 'row', alignItems: 'center' }, + StSC_RTblHeaderBox: { alignItems: 'center', height: '100%', backgroundColor: PageTheme.$secondary_color_light, paddingVertical: 5, borderRadius: 5, }, + StSC_RTblHeaderBox1: { width: wp('30%') - 15, marginRight: 5 }, + StSC_RTblHeaderBox2: { width: wp('40%') - 15, marginRight: 5 }, + StSC_RTblHeaderBox3: { width: '30%' }, + StSC_RTblHeaderTxt: { fontSize: 13, color: PageTheme.$text_color, marginRight: 5, textTransform: 'capitalize', fontWeight: '700', fontFamily: deffontfamily }, + StSC_RTblBody: { backgroundColor: PageTheme.$bg_color, borderRadius: 10, padding: 5, elevation: 3, shadowColor: '#afafaf', shadowOffset: { width: 0, height: 2 }, shadowOpacity: 1.0 }, + StSC_RItem: { + flexDirection: 'row', alignItems: 'center', + // paddingVertical:10, + }, + DYStSC_RItem: { flexDirection: 'row' }, + StSC_RtemB: { borderBottomColor: PageTheme.$secondary_color_light, borderBottomWidth: 1 }, + StSC_RItemCol: { alignItems: 'center', }, + StSC_RItemColIcon: { width: 30, height: 30, resizeMode: "stretch", backgroundColor: '#efefef', marginRight: 5, borderRadius: 4 }, + StSC_RItemCol1: { width: wp('30%') - 15, marginRight: 5, justifyContent: 'flex-start', alignItems: 'center', paddingLeft: 5, flexDirection: 'row', }, + StSC_RItemCol2: { width: wp('40%') - 15, marginRight: 5 }, + StSC_RItemCol3: { width: '30%', alignItems: 'center' }, + StSC_RItemColText: { fontSize: 13, color: PageTheme.$text_color, marginRight: 5, textTransform: 'capitalize', fontWeight: '400', fontFamily: deffontfamily }, + StSC_RTblFooterWrap: { width: '100%', paddingHorizontal: 10, position: 'absolute', bottom: 55, left: 0, right: 0 }, + StSC_RTblFooter: { backgroundColor: PageTheme.$secondary_color_light, borderRadius: 10, elevation: 3, shadowColor: '#000', shadowOpacity: 1.0, width: '100%', padding: 10, flexDirection: 'row' }, + StSC_RTblFooterBox: { width: '50%', flexDirection: 'row', flexWrap: 'wrap' }, + StSC_RTblFooterBox1: { paddingRight: 5 }, + StSC_RTblFooterBox2: { paddingLeft: 5, justifyContent: 'flex-end' }, + StSC_RTblHeaderLbl: { fontSize: 13, color: PageTheme.$text_color, paddingRight: 5, textTransform: 'capitalize', fontFamily: deffontfamily }, + StSC_RTblHeaderVal: { fontSize: 13, color: PageTheme.$text_color, fontFamily: deffontfamily }, + StSC_RTblHeaderTxt2: { textAlign: 'right' }, + // Orders + Orders_PageWrap: { width: '100%', height: '100%' }, + + + // Trainig content + train_scrollView: { width: '100%', height: '100%' }, + train_scrollViewInner: { width: '100%' }, + train_Itext: { flexWrap: 'wrap', width: '80%', paddingRight: 10 }, + trainingl: { + flexDirection: 'row', + paddingRight: 10, + marginBottom: 10, + margin: 10, + // borderWidth:2, + // borderColor:PageTheme.$secondary_color_light, + backgroundColor: PageTheme.$bg_color, + borderRadius: 5, + paddingVertical: 10, + alignItems: 'center', + elevation: 5, shadowColor: '#000', shadowOffset: { width: 0, height: 3 }, shadowOpacity: 0.15 + }, + trainingView: { margin: 16, marginVertical: 8, width: '100%' }, + trainingView2: { flexDirection: "column", width: "70%" }, + trainingl_card_title: { + fontSize: 15, + color: PageTheme.$text_color, + fontWeight: '500', + fontFamily: deffontfamily + }, + trainingl_codeText: { fontSize: 12, color: PageTheme.$text_color, marginRight: 5, fontFamily: deffontfamily }, + trainingHdr: { width: "100%", backgroundColor: PageTheme.$primary_color, borderRadius: 7, paddingVertical: 10, paddingHorizontal: 10, elevation: 3, shadowColor: '#747474', shadowOffset: { width: 0, height: 2 }, shadowOpacity: 1.0, flexDirection: 'row', justifyContent: 'center', marginBottom: 5 }, + trainingHdrText: { color: PageTheme.$accent_color, fontSize: 14, fontWeight: '500', fontFamily: deffontfamily }, + + //store profile + STp_hdrParent: { width: '100%', paddingHorizontal: 10 }, + STp_Hdr: { width: "100%", backgroundColor: PageTheme.$primary_color, borderRadius: 7, paddingVertical: 10, paddingHorizontal: 10, elevation: 3, shadowColor: '#747474', shadowOffset: { width: 0, height: 2 }, shadowOpacity: 1.0, flexDirection: 'row', justifyContent: 'center', marginBottom: 5 }, + STp_HdrText: { color: PageTheme.$accent_color, fontSize: 14, fontWeight: '500', fontFamily: deffontfamily }, + STp_ContentOuter: { width: '100%', marginBottom: 80, }, + STp_ContentInner: { width: '100%', paddingBottom: 20, paddingHorizontal: 10, paddingTop: 5 }, + STp_Card: { flexDirection: 'row', marginBottom: 10, backgroundColor: PageTheme.$bg_color, borderRadius: 5, paddingBottom: 10, paddingTop: 10, alignItems: 'center', elevation: 5, shadowColor: '#000', shadowOffset: { width: 0, height: 3 }, shadowOpacity: 0.15 }, + STp_card_outer: { position: 'relative', width: '100%' }, + STp_form: { marginTop: 10, paddingTop: 10, borderTopColor: PageTheme.$primary_color, borderTopWidth: 2, }, + STp_storeDetails: { paddingHorizontal: 10 }, + // Add STore + // AddStore_ContentOuter:{width:'100%',height:'100%',marginBottom:180,backgroundColor:'#000'}, + // AddStore_ContentInner:{padding:10}, + AddStore_ContentOuter: { width: '100%', marginBottom: 110, }, + AddStore_ContentInner: { width: '100%', paddingBottom: 20, paddingHorizontal: 5, paddingTop: 10 }, + AddStore_SubmitBtn: { position: 'absolute', bottom: Platform.OS == 'ios' ? 30 : 10, left: 0, right: 0, width: '100%', alignItems: 'center' }, + + + + // BeatPlans + beatPlan_pageWrapper: { paddingHorizontal: 10, paddingTop: 5 }, + beatPlan_scrollView: { width: '100%' }, + beatPlan_scrollViewInner: { width: '100%', paddingBottom: 20, paddingHorizontal: 5, paddingTop: 10 }, + beatPlan_listItem: { flexDirection: 'row', paddingRight: 10, marginBottom: 10, backgroundColor: PageTheme.$bg_color, borderRadius: 5, paddingVertical: 10, alignItems: 'center', elevation: 5, shadowColor: '#000', shadowOffset: { width: 0, height: 3 }, shadowOpacity: 0.15 }, + beatPlan_lI_Wrap: { margin: 16, marginVertical: 8, width: '100%' }, + beatPlan_lI_Title: { fontSize: 15, color: PageTheme.$text_color, fontWeight: '500', fontFamily: deffontfamily }, + + // visitor feedback screen + vl_AddBtn: { backgroundColor: PageTheme.$primary_color, alignSelf: 'flex-end', marginLeft: '40%', borderRadius: 10, padding: 5, paddingHorizontal: 10, elevation: 3, shadowColor: '#afafaf', width: '30%', shadowOpacity: 1.0 }, + vl_Feedback: { fontSize: 14, color: PageTheme.$secondary_color_dark, marginTop: 5, marginLeft: 20, fontFamily: deffontfamily }, + vl_EditBtn: { backgroundColor: PageTheme.$primary_color, alignSelf: 'flex-end', borderRadius: 10, padding: 5, paddingHorizontal: 10, elevation: 3, shadowColor: '#afafaf', width: '20%', shadowOpacity: 1.0 }, + vl_UploadBtn: { backgroundColor: PageTheme.$primary_color, alignSelf: 'flex-end', borderRadius: 10, padding: 5, paddingHorizontal: 10, elevation: 3, shadowColor: '#afafaf', width: '20%', shadowOpacity: 1.0 }, + vlf_TblHeader: { marginBottom: 10, marginTop: 10, backgroundColor: PageTheme.$primary_color, borderRadius: 10, padding: 5, elevation: 3, shadowColor: '#747474', shadowOffset: { width: 0, height: 2 }, shadowOpacity: 1.0, flexDirection: 'row', alignItems: 'center' }, + vlf_TblHeaderBox1: { marginLeft: 3, width: wp('30%') - 15, marginRight: 5 }, + vlf_TblHeaderBox2: { width: wp('40%') - 10, marginRight: 5 }, + vlf_TblHeaderBox3: { width: '30%' }, + vlf_TblHeaderTxt: { fontSize: 13, color: PageTheme.$text_color, marginRight: 5, textTransform: 'capitalize', fontWeight: '700', marginLeft: 10, fontFamily: deffontfamily }, + vlf_visitorsLI_Box1: { width: wp('30%') - 15, marginRight: 5, alignItems: 'flex-start', marginLeft: 30, }, + vlf_visitorsLI_Box2: { width: wp('30%') - 15, marginRight: 20 }, + vlf_Visitor_recap: { position: 'absolute', height: 50, top: -10, right: -10, padding: 8, backgroundColor: PageTheme.$primary_color, borderRadius: 30, elevation: 2, shadowColor: '#8d8d8d', shadowOffset: { width: 0, height: 2 }, shadowOpacity: 0.5 }, + cameravd: { alignSelf: 'center' }, + datavisitorloginPageWrapper: { padding: 10, backgroundColor: PageTheme.$secondary_color_light, height: '100%' }, + + vfRatingModal: { position: 'absolute', backgroundColor: '#00000055', width: '20%', height: '3%' }, + vfcustomRatingBarStyle: { + justifyContent: 'center', + flexDirection: 'row', + borderWidth: 1, borderColor: PageTheme.$secondary_color_light, + paddingVertical: 5, borderRadius: 5 + }, + surveyQtnRatingConAvg: { backgroundColor: PageTheme.$primary_color, borderRadius: 5 }, + vfstarImageStyle: { + width: 40, + height: 40, + backgroundColor: '#000', + resizeMode: 'cover', + }, + + //IR Pending images + // Visitor Login + PndIR_PageWrapper: { paddingTop: 10, backgroundColor: PageTheme.$secondary_color_light }, + PndIR_scrollView: { width: '100%', height: '100%' }, + PndIR_scrollViewInner: { width: '100%', paddingBottom: 80 }, + PndIR_MenuCon: { backgroundColor: PageTheme.$bg_color, borderRadius: 10, padding: 10 }, + PndIR_MenuItem: { flexDirection: 'row', alignItems: 'center', paddingVertical: 10, justifyContent: 'center', paddingHorizontal: 10, backgroundColor: PageTheme.$secondary_color_light, borderRadius: 6, marginBottom: 15, elevation: 2, shadowColor: '#000', shadowOffset: { width: 0, height: 2 }, shadowOpacity: 1.0 }, + PndIR_ItemHighlight: { fontSize: 13, color: PageTheme.$red, fontWeight: '700', fontFamily: deffontfamily }, + PndIR_ItemHighlightG: { fontSize: 13, color: PageTheme.$green, fontWeight: '700', fontFamily: deffontfamily }, + PndIR_ItemHighlightTxt: { fontSize: 13, color: PageTheme.$red, fontWeight: '500', fontFamily: deffontfamily }, + + // program checklist + + progCh_scrollOuter: { marginBottom: 10, marginTop: 10 }, + progCh_Con: {}, + progCh_TblHeader: { backgroundColor: PageTheme.$primary_color, borderRadius: 5, padding: 5, elevation: 3, shadowColor: '#747474', shadowOffset: { width: 0, height: 2 }, shadowOpacity: 1.0, flexDirection: 'row', alignItems: 'center' }, + progCh_TblHeaderBox: {}, + progCh_TblHeaderBox1: { width: '50%', paddingRight: 3 }, + progCh_TblHeaderBox2: { width: '50%', paddingLeft: 3 }, + progCh_TblHeaderBoxI: { alignItems: 'center', backgroundColor: PageTheme.$secondary_color_light, paddingVertical: 5, borderRadius: 5, }, + progCh_TblHeaderTxt: { fontSize: 13, color: PageTheme.$text_color, marginRight: 5, fontWeight: '500', fontFamily: deffontfamily }, + progCh_TblBRow: { width: '100%', flexDirection: "row", marginRight: 5, backgroundColor: PageTheme.$secondary_color_light, paddingHorizontal: 5, paddingVertical: 5, marginTop: 5, borderRadius: 5 }, + progCh_TblBCol: {}, + progCh_TblBCol1: { width: '50%', paddingRight: 3, borderRightWidth: 1, borderRightColor: PageTheme.$text_color_light3, paddingRight: 5 }, + progCh_TblBCol2: { width: '50%', paddingLeft: 3, paddingLeft: 3, alignItems: "center" }, + progCh_TblBColI: {}, + progCh_TblBText: { fontSize: 13, color: PageTheme.$text_color, fontWeight: '400', flexWrap: "wrap", fontFamily: deffontfamily }, + progCh_InfoCon: { paddingVertical: 5, paddingHorizontal: 10, position: 'relative', width: '100%', backgroundColor: PageTheme.$primary_color, borderRadius: 10, elevation: 5, shadowColor: '#000', shadowOffset: { width: 0, height: 3 }, shadowOpacity: 0.15 }, + progCh_InfoCard: { paddingHorizontal: 5 }, + progCh_InfoRow: { flexDirection: 'row', }, + progCh_InfoBB: { borderBottomColor: PageTheme.$accent_color, borderBottomWidth: 1, marginBottom: 5, paddingBottom: 5 }, + progCh_InfoLbl: { fontSize: 14, color: PageTheme.$accent_color, marginRight: 5, fontWeight: '400', fontFamily: deffontfamily }, + progCh_InfoText: { fontSize: 14, color: PageTheme.$accent_color, marginRight: 5, fontWeight: '500', flexWrap: "wrap", fontFamily: deffontfamily }, + progCh_InfoCol: { width: '50%', flexDirection: 'row', }, + progCh_InfoCol1: { justifyContent: "flex-start", paddingRight: 3 }, + progCh_InfoCol2: { justifyContent: "flex-end", paddingLeft: 3 }, + progCh_InfoTextR: { marginRight: 0 }, + progCh_NextBtnWrap: { position: 'absolute', bottom: 0, left: 0, right: 0, width: wp('100%'), alignItems: 'flex-end', padding: 10 }, + progCh_NextBtn: { backgroundColor: PageTheme.$primary_color, alignItems: 'center', justifyContent: "center", borderRadius: 50, width: 50, height: 50, padding: 5, elevation: 3, shadowColor: '#afafaf', shadowOpacity: 1.5 }, + // progCh_NextBtnText:{fontSize:14,color:PageTheme.$accent_color,marginRight:5,fontWeight:'500',flexWrap:"wrap"}, + + // contract form + ContrForm_activeP: { position: 'absolute', top: -17, left: 40, right: 40, shadowColor: '#8d8d8d', shadowOpacity: 1, elevation: 2, shadowOffset: { width: 0, height: 2 }, backgroundColor: '#0000', marginBottom: 10 }, + ContrForm_activeP_tile: { padding: 10, borderRadius: 20, paddingHorizontal: 20, backgroundColor: PageTheme.$primary_color, width: '100%', alignItems: 'center' }, + ContrForm_activeP_name: { fontSize: 16, fontWeight: '500', color: PageTheme.$accent_color, fontFamily: deffontfamily }, + ContrForm_Hdr: { paddingVertical: 5, borderRadius: 5, paddingHorizontal: 10, backgroundColor: PageTheme.$primary_color, width: '100%' }, + ContrForm_HdrText: { fontSize: 14, fontWeight: '500', color: PageTheme.$accent_color, fontFamily: deffontfamily }, + ContrFormWrap: { paddingBottom: 10, marginBottom: 80 }, + // ContrForm_PageWrapper:{marginTop:10,paddingTop:10,backgroundColor:PageTheme.$bg_color}, + ContrForm_PageWrapper: { padding: 10, backgroundColor: PageTheme.$bg_color }, + ContrForm_ContentCon: { paddingBottom: 10 }, + ContrForm_ContentOuter: { width: '100%', marginBottom: 90 }, + ContrForm_GroupView: { paddingBottom: 10 }, + ContrForm_choiceBox: { backgroundColor: PageTheme.$secondary_color_light }, + ContrForm_hasData: { position: 'absolute', width: 24, height: 24, right: 5, top: 5, borderRadius: 15 }, + + // Program + Prog_DARsnSelectStyle: { width: '100%', marginTop: 5 }, + Prog_DAlabel: { textAlign: 'left', color: PageTheme.$text_color_dark, fontWeight: '500', fontSize: 14, marginBottom: 10, padding: 0, fontFamily: deffontfamily }, + prog_scroll: { justifyContent: 'center', padding: 10, paddingBottom: 150, }, + prog_scrollOuter: { marginBottom: 140, width: wp('100%') }, + prog_subText: { fontSize: 13, color: PageTheme.$text_color_dark, fontWeight: '400', marginBottom: 5, fontFamily: deffontfamily }, + prog_Text: { marginBottom: 3 }, + + // Dashboard Report Styling + // all reports wrapper + DashB_ReportWrap: { paddingHorizontal: 3 }, + DashB_ReportsHdr: { padding: 10, justifyContent: "center", borderRadius: 5, shadowColor: '#d8d8d8', shadowOpacity: 1, elevation: 1, shadowOffset: { width: 0, height: 2 }, backgroundColor: '#eaf0fe' }, + DashB_ReportsHdrTxt: { color: PageTheme.$primary_color, fontWeight: '600', fontSize: 14, fontFamily: deffontfamily }, + DashB_ReportsHdrIcon: { position: 'absolute', right: 20, shadowColor: '#8d8d8d', shadowOpacity: 1, elevation: 2, shadowOffset: { width: 0, height: 2 }, padding: 4, alignItems: 'center', justifyContent: 'center', backgroundColor: PageTheme.$primary_color, borderRadius: 20 }, + + // report coontainer + DashB_ReportCon: { padding: 10, marginBottom: 10, marginTop: 10, borderRadius: 5, shadowColor: '#000', shadowOpacity: 1, elevation: 2, shadowOffset: { width: 0, height: 2 }, backgroundColor: PageTheme.$secondary_color_light }, + DashB_ReportConHdr: { borderBottomWidth: 1, borderBottomColor: PrimaryTheme.$fifth_color, paddingBottom: 12, marginBottom: 5 }, + DashB_ReportConHdrTxt: { color: PageTheme.$text_color_dark, fontWeight: '600', fontSize: 14, fontFamily: deffontfamily }, + DashB_ReportConHdrIcon: { position: 'absolute', right: 10, shadowColor: '#8d8d8d', shadowOpacity: 1, elevation: 2, shadowOffset: { width: 0, height: 2 }, padding: 4, alignItems: 'center', justifyContent: 'center', backgroundColor: PageTheme.$primary_color, borderRadius: 20 }, + DashB_ReportContent: {}, + + // tabular style + DashBTbl_ReportWrap: { width: '100%', minHeight: 40, }, + DashBTbl_ReportColWrap: { width: 100 }, + DashBTbl_ReportColW: { width: 100 }, + DashBTbl_NoDataCon: { width: '100%', alignItems: 'center', justifyContent: 'center', backgroundColor: PageTheme.$bg_color, borderRadius: 10, padding: 5, elevation: 1, shadowColor: '#efefef', shadowOffset: { width: 0, height: 2 }, shadowOpacity: 0.1, }, + DashBTbl_NoDataText: { color: PageTheme.$text_color_light, fontWeight: '500', fontSize: 14, fontFamily: deffontfamily }, + DashBTbl_ReportHdr: { marginBottom: 10, marginTop: 10, backgroundColor: PageTheme.$primary_color, borderRadius: 10, padding: 5, elevation: 3, shadowColor: '#747474', shadowOffset: { width: 0, height: 2 }, shadowOpacity: 1.0, flexDirection: 'row', alignItems: 'center' }, + DashBTbl_ReportHdrColTxt: { color: PageTheme.$text_color, fontWeight: '600', fontSize: 14, fontFamily: deffontfamily }, + DashBTbl_ReportHdrCol: { alignItems: 'center', height: '100%', marginRight: 2, marginLeft: 2, backgroundColor: PageTheme.$bg_color, paddingVertical: 5, paddingHorizontal: 5, borderRadius: 5, }, + // DashBTab_ReportHdrBox1:{width:wp('40%')-15,marginRight:5}, + // DashBTab_ReportHdrBox2:{width:wp('30%')-15,marginRight:5}, + // DashBTab_ReportHdrBox2:{width:'30%'}, + // report_TblHeaderTxt:{fontSize:13,color:PageTheme.$text_color,marginRight:5,fontWeight:'700',fontFamily:deffontfamily}, + + SOSInputStyle: { + backgroundColor: PageTheme.$bg_color, + width: '80%', + + borderRadius: 5, + + fontSize: 14, + lineHeight: 18, // ✅ ensures text is painted properly + color: PageTheme.$text_color, + fontFamily: deffontfamily, + + paddingHorizontal: 12, + paddingVertical: 0, // ✅ let Android calculate vertical space + + minHeight: 35, // ✅ NEVER use fixed height + + textAlign: 'left', + textAlignVertical: 'center', // Android only + + includeFontPadding: false, // ✅ prevents invisible text issue + + // ❌ remove overflow:'hidden' (causes clipping on Android) +}, + + DashBTblBody: { backgroundColor: PageTheme.$bg_color, borderRadius: 5, padding: 5, elevation: 3, shadowColor: '#5f5f5f', shadowOffset: { width: 0, height: 2 }, shadowOpacity: 1.0 }, + DashBTbl_Item: { flexDirection: 'row', alignItems: 'center' }, + DashBTbl_ItemB: { borderBottomColor: PageTheme.$fifth_color, borderBottomWidth: 1, paddingBottom: 5, marginBottom: 5 }, + DashBTbl_ItemBg: { backgroundColor: PageTheme.$text_color_light2 }, + DashBTbl_ItemCol: { alignItems: 'center', marginRight: 2, marginLeft: 2, width: '100%', height: '100%', borderRadius: 4, paddingVertical: 7, paddingHorizontal: 2 }, + DashBTbl_ItemCol2: { alignItems: 'center', marginRight: 2, marginLeft: 2, justifyContent: 'center' }, + // DashBTbl_ItemBox1:{width:wp('40%')-15,marginRight:5,alignItems:'flex-start',paddingLeft:5,}, + // DashBTbl_ItemBox2:{width:wp('30%')-15,marginRight:5}, + // DashBTbl_ItemBox3:{width:'30%',alignItems:'center'}, + DashBTbl_ItemColText: { fontSize: 13, color: PageTheme.$text_color, marginRight: 5, fontWeight: '400', fontFamily: deffontfamily }, + DashBTbl_ReportColContent: { backgroundColor: PageTheme.$secondary_color_light, borderRadius: 5, padding: 5, marginHorizontal: 2 }, + + // dashboard card style + DashBCard_Wrap: { flexDirection: 'row', paddingVertical: 5, paddingHorizontal: 3 }, + DashBCard_Item: { width: 180, paddingVertical: 5, paddingHorizontal: 5, backgroundColor: PageTheme.$bg_color, borderRadius: 10, elevation: 3, shadowColor: '#878787', shadowOffset: { width: 0, height: 2 }, shadowOpacity: 0.3, }, + DashBCard_ItemMid: { marginLeft: 5, marginRight: 5 }, + DashBCard_ItemFirst: { marginRight: 5 }, + DashBCard_ItemLast: { marginLeft: 5 }, + DashBCard_Itemhdr: { flexDirection: 'row', paddingHorizontal: 5, borderBottomColor: PageTheme.$fourth_color, borderBottomWidth: 1, paddingBottom: 10, paddingTop: 5, marginBottom: 10 }, + DashBCard_ItemhdrText: { color: PageTheme.$text_color, fontWeight: '600', fontSize: 14, fontFamily: deffontfamily_bold, width: '50%', paddingTop: 20 }, + DashBCard_ItemhdrIcon: { width: '50%', alignItems: 'flex-end', justifyContent: 'flex-start' }, + DashBCard_ItemContent: { paddingHorizontal: 10, }, + DashBCard_IInn_row: { flexDirection: 'row', paddingVertical: 5 }, + DashBCard_IInn_rowB: { borderBottomColor: PageTheme.$secondary_color_light, borderBottomWidth: 1, marginBottom: 5 }, + DashBCard_IInn_hd: { color: PageTheme.$text_color, fontWeight: '600', fontSize: 13, fontFamily: deffontfamily, width: '50%' }, + DashBCard_IInn_valueTxt: { color: PageTheme.$text_color, fontWeight: '600', fontSize: 14, fontFamily: deffontfamily_bold, paddingLeft: 5, width: '50%' }, + }); +} + +export const customeButtons = (isDarkTheme = defdt, routeName = defrn) => { + const PageTheme = GetPageTheme(isDarkTheme, routeName); + return StyleSheet.create({ + buttonStyle: { + backgroundColor: PageTheme.$primary_color, + elevation: 5, shadowColor: PageTheme.$primary_color, shadowOffset: { width: 0, height: 5 }, shadowRadius: 7, shadowOpacity: 0.4, + borderRadius: 40, width: wp('85%'), height: 50, display: 'flex', marginTop: 25, alignItems: 'center', justifyContent: 'center' + }, + textStyle: { color: PageTheme.$text_color_100, textAlign: 'center', fontSize: 15, padding: 10, fontFamily: deffontfamily }, + g_buttonStyle: { + marginTop: 25, height: 50, shadowColor: PageTheme.$primary_color, shadowRadius: 7, shadowOffset: { width: 0, height: 5 }, shadowOpacity: 0.4, borderRadius: 40, backgroundColor: '#0000' + }, + g_linearGradient: { + backgroundColor: PageTheme.$primary_color, + elevation: 5, shadowColor: PageTheme.$primary_color, + borderRadius: 40, width: wp('85%'), display: 'flex', height: '100%', alignItems: 'center', justifyContent: 'center' + }, + g_textStyle: { color: PageTheme.$text_color_100, textAlign: 'center', fontSize: 15, padding: 10, fontFamily: deffontfamily, }, + + + + }); +} + +export const customCamera = (isDarkTheme = defdt, routeName = defrn) => { + const PageTheme = GetPageTheme(isDarkTheme, routeName); + const bottomBarHeight = 100, imageControlBarHeight = 60; + const topBarHeight = Platform.OS == 'ios' ? STATUSBAR_HEIGHT + 40 : 40; + const topBarHeight2 = Platform.OS == 'ios' ? STATUSBAR_HEIGHT : 0; + return StyleSheet.create({ + IOS_StatusBar: { height: STATUSBAR_HEIGHT, width: wp('100%'), backgroundColor: 'transparent', zIndex: 100000,elevation:100000, position: 'absolute', left: 0, top: 0, right: 0 }, + CameraWrapper: { flex: 1, backgroundColor: '#000', width: '100%', height: '100%', position: 'absolute', zIndex: 9999,elevation:9999, top: 0, left: 0, right: 0 }, + CameraWrapperHide: { zIndex: 0, opacity: 0,elevation:0 }, + scrollMain: { flex: 1, backgroundColor: '#000', width: '100%', height: '100%', position: 'absolute', zIndex: 99999,elevation:99999, top: 0, left: 0, right: 0 }, + // scrollMainInner:{alignItems:'center',height:'100%'}, + btnStyle: { backgroundColor: '#0096d7', paddingVertical: 10, paddingHorizontal: 30, borderRadius: 20, marginTop: 50, elevation: 5, shadowColor: '#232323', shadowOffset: { width: 0, height: 2 } }, + btnText: { color: '#fff' }, + imgView: { flex: 1, height: 300, width: '100%', marginTop: 100, paddingHorizontal: 20 }, + image: { width: '100%', height: 300, backgroundColor: '#efefef' }, + customCamera_Wrap: { position: 'absolute', backgroundColor: '#000', top: 0, left: 0, right: 0, bottom: 0, zIndex: 9999,elevation:9999 }, + customCamera: { position: 'absolute', top: 0, left: 0, right: 0, bottom: 100 }, + customCameraLS: { top: 0, bottom: 0 }, + customCameraTop: { top: Platform.OS == 'ios' ? STATUSBAR_HEIGHT : 0, }, + customCamera_bottomBar: { padding: 10, flexDirection: 'row', backgroundColor: 'transparent', height: bottomBarHeight, position: 'absolute', bottom: 0, width: '100%', alignItems: 'center', justifyContent: 'center' }, + customCamera_bottomBarLS: { padding: 10, flexDirection: 'row', backgroundColor: 'transparent', height: bottomBarHeight, position: 'absolute', top: "35%", width: '100%', alignItems: 'flex-end', justifyContent: 'flex-end' }, + customCamera_capbtn: { elevation: 4, shadowColor: '#efefef', width: 60, height: 60, borderRadius: 30, marginBottom: 80 }, + customCamera_capbtn_Outer: { width: 60, height: 60, borderRadius: 30, backgroundColor: '#e4e4e4', paddingLeft: 5, paddingTop: 5 }, + customCamera_capbtn_Inner: { width: 50, height: 50, borderRadius: 30, backgroundColor: '#fff' }, + customCamera_Gallerybtn: { elevation: 4, shadowColor: '#efefef', width: 60, height: 60, borderRadius: 30, position: 'absolute', right: 30 }, + customCamera_Gallerybtn_Outer: { width: 60, height: 60, borderRadius: 30, backgroundColor: '#e4e4e4', paddingLeft: 5, paddingTop: 5 }, + customCamera_Gallerybtn_Inner: { width: 50, height: 50, borderRadius: 30, backgroundColor: '#fff', alignItems: 'center', justifyContent: 'center' }, + customCamera_Gallerybtn_Icon: { marginTop: -2, marginLeft: -2 }, + + //customCamera_bottomBar2: { paddingVertical: 25, paddingHorizontal: 10, backgroundColor: '#5c5c5cb3', height: imageControlBarHeight, position: 'absolute', bottom: 40, width: '100%', justifyContent: 'center' }, + customCamera_bottomBar2: { + backgroundColor: '#5c5c5cb3', + height: 48, + paddingHorizontal: 10, + alignItems: 'center', + justifyContent: 'center', + position: 'absolute', + bottom: 35, + left: 0, + right: 0, + } + , + + imgControls_btnCon: { minWidth: 100, paddingHorizontal: 10 }, + imgControls_btn: { alignItems: 'center' }, + imgControls_btnText: { fontSize: 13, fontWeight: '400', color: '#fff', textAlign: 'center', fontFamily: deffontfamily }, + // imgControls: { flexDirection: 'row', alignItems: 'center', justifyContent: 'space-between' }, + imgControls: { + position: 'absolute', + bottom: 30, // stick to bottom + left: 0, + right: 0, + + flexDirection: 'row', // horizontal layout + justifyContent: 'space-around', // equal spacing + alignItems: 'center', + + paddingHorizontal: 20, + }, + cameraImgCaptured: { position: 'absolute', top: 0, left: 0, right: 0, bottom: 0 }, + icbtTop: { marginTop: 0, }, + imgControls_centerBtn: { marginTop: -15, minWidth: 100, paddingHorizontal: 10 }, + imgControls_retakeBtn: { width: 40, height: 40, borderRadius: 30, backgroundColor: '#fff', alignItems: 'center', justifyContent: 'center', elevation: 2, shadowColor: '#000', shadowOpacity: 0.2, shadowOffset: { width: 0, height: 2 } }, + // flashBtn:{width:35,height:35,borderRadius:30,backgroundColor:'#fff',alignItems:'center',justifyContent:'center',elevation:4,shadowColor:'#fff',shadowOpacity:0.3,shadowOffset:{width:0,height:2}}, + flashBtn: { padding: 5, backgroundColor: '#4c4c4cdb', borderRadius: 30, width: 40, height: 40, marginBottom: 10, elevation: 2, alignItems: 'center', justifyContent: 'center', shadowColor: '#000', shadowOpacity: 0.3, shadowOffset: { width: 0, height: 2 } }, + topControls: { position: 'absolute', top: 0, backgroundColor: 'transparent', width: '100%', height: topBarHeight }, + topControlsInner: { flexDirection: 'row', paddingVertical: 5, paddingHorizontal: 10, justifyContent: 'center' }, + sideControls: { position: 'absolute', right: 0, top: '40%', backgroundColor: 'transparent', padding: 10 }, + sideControl: { position: 'absolute', right: 0, top: '0%', backgroundColor: 'transparent', padding: 10 }, + sideControlsInner: {}, + or_icon: { position: 'absolute', top: 10, right: 10, padding: 7, borderRadius: 40, backgroundColor: '#4c4c4ccc' }, + + + }); +} + +export const ModalStyles = (isDarkTheme = defdt, routeName = defrn) => { + const PageTheme = GetPageTheme(isDarkTheme, routeName); + return StyleSheet.create({ + centeredView: { + backgroundColor: 'rgba(0,0,0,0.5)', + flex: 1, + justifyContent: "center", + alignItems: "center", + }, + modalView: { + margin: 20, + backgroundColor: "white", + borderRadius: 10, + padding: 35, + alignItems: "center", + shadowColor: "#000", + shadowOffset: { + width: 0, + height: 2 + }, + shadowOpacity: 0.25, + shadowRadius: 4, + elevation: 5 + }, + button: { + paddingLeft: 40, + paddingRight: 40, + elevation: 2 + }, + buttonOpen: { + backgroundColor: "#F194FF", + }, + buttonClose: { + backgroundColor: "#2196F3", + }, + textStyle: { + color: "white", + fontWeight: "bold", + textAlign: "center" + }, + modalText: { + marginBottom: 15, + textAlign: "center", + color: "#000", + } + }); +} + diff --git a/PerformicsSrc/src/styles/Global_LS.js b/PerformicsSrc/src/styles/Global_LS.js new file mode 100644 index 0000000..b655b7e --- /dev/null +++ b/PerformicsSrc/src/styles/Global_LS.js @@ -0,0 +1,1699 @@ +import { PrimaryTheme,MainThemeLight,DarkTheme } from "./Themes"; +import {Platform, StatusBar,StyleSheet} from 'react-native'; +import { widthPercentageToDP as wp, heightPercentageToDP as hp } from 'react-native-responsive-screen'; +const defdt=false,defrn=''; +export const GetPageTheme=(isDarkTheme=defdt,routeName=defrn)=>{ + let PageTheme=(routeName=='Project'?MainThemeLight:(isDarkTheme==true?DarkTheme:PrimaryTheme)); + return PageTheme; +}; + +export const WP=wp; +export const HP=hp; +const borderRadius=20; +export const STATUSBAR_HEIGHT = Platform.OS === 'ios' ? 25 : StatusBar.currentHeight; +const EXTRA_SPACE = Platform.OS === 'ios' ? 20 : 0; +const EXTRA_SPACE_MD= Platform.OS === 'ios' ? 40 : 0; +export const globalStyles=(isDarkTheme=defdt,routeName=defrn)=>{ + const PageTheme=GetPageTheme(isDarkTheme,routeName); + return StyleSheet.create({ + statusBar:{height:STATUSBAR_HEIGHT,width:wp('100%')}, + drawerScreenHdr_bg:{backgroundColor:'#000', borderBottomWidth:0,borderBottomColor:PrimaryTheme.$secondary_color_light,paddingHorizontal:10,paddingBottom:5,paddingTop:STATUSBAR_HEIGHT+10}, + dScreenHdr_Content:{flexDirection:'row',alignItems:'center',position:'relative'}, + drawerScreenHdr_title:{width:'100%',textAlign:'left',fontSize:16,fontWeight:'500',color:PageTheme.$accent_color,paddingLeft:50,paddingRight:100}, + dScreen_LeftContainer:{position:'absolute',left:0}, + toggleDrawerBtn:{paddingVertical:5,paddingHorizontal:10}, + dScreen_RightContainer:{position:'absolute',right:0,flexDirection:'row',alignItems:'center'}, + drawerProjectId:{fontSize:14,fontWeight:'500',color:PageTheme.$accent_color,paddingHorizontal:5}, + drawerNotifIcon:{marginLeft:5,padding:5}, + drawerContent: { + flex: 1, + marginTop: -10, + paddingTop:0, + }, + drawerContentScroll:{}, + drawerContentScrollInner:{paddingTop:10,padding:0}, + cardTitle: { + fontWeight:'normal', + fontSize: hp('1.8%'), + }, + cardImage: { + width: 30, + height: 30, + resizeMode: 'contain', + }, + title: { + fontSize: 15, + marginTop: 10, + fontWeight:'500', + textTransform:'capitalize', + color:PageTheme.$text_color, + textAlign:'center', + marginLeft:-5 + }, + caption: { + fontSize: hp('1.7%'), + lineHeight: 14, + }, + row: { + marginTop: 20, + flexDirection: 'row', + alignItems: 'center', + }, + section: { + flexDirection: 'row', + alignItems: 'center', + marginRight: 15, + }, + paragraph: { + fontWeight: 'bold', + marginRight: 3, + }, + drawerSection: { + marginTop: 7, + borderBottomColor:'#fff', + borderBottomWidth:0, + }, + bottomDrawerSecion: { + borderTopColor: '#f4f4f4', + borderTopWidth: 1, + borderBottomWidth:0, + marginBottom:0, + }, + bottomDrawerCon:{ + padding:5, + flexDirection:'column', + alignItems:'center', + }, + bottomDrawerIcon:{ + width: '50%', + height: 30, + resizeMode: 'contain', + }, + bottomDrawerLabel:{ + fontSize: 14, + color:PageTheme.$text_color, + }, + preferenceCon:{ + padding:10, + }, + preferenceTitle:{ + fontSize:14, + color:PageTheme.$text_color, + }, + preference: { + flexDirection: 'row', + justifyContent: 'space-between', + marginTop: 12, + }, + userInfoSection: { + padding: 0, + borderBottomColor: '#f4f4f4', + borderBottomWidth: 1, + }, + container: { + flex: 1,alignItems: 'center',backgroundColor: PageTheme.$accent_color, + }, + logo: { + resizeMode: 'contain', + width: wp('50%') + }, + drawerIcon: { + width: 30, + height: 30, + left: 2, + position: "absolute", + paddingLeft: 15 + + }, + inputStyle: { + width: wp('85%'), + height: hp('8%'), + marginBottom: 12, + }, + otpStyle: { + marginBottom: 12, + borderRadius: 8, + width: wp('15%'), + height: hp('7%'), + }, + drawerItemStyle:{ + flexDirection:'row', + paddingHorizontal:10, + paddingVertical:8.5, + alignItems:'center', + // height:35, + }, + drawerLogo: { + width: wp('50%')-20, + height: 60, + resizeMode: 'contain', + // borderWidth:1, + // borderColor:'#000' + }, + drawerItemIcon:{width:30,justifyContent:'center',flexDirection:'row'}, + drawerLabel: { + fontSize: 15, + fontWeight:'400', + color:PageTheme.$accent_color2, + marginLeft:10, + }, + otpContainer: { + width: wp('85%'), + flexDirection: 'row', + flexWrap: 'wrap', + justifyContent: 'space-between' + }, + labelStyle: { + color: PageTheme.$text_color_700, + textAlign: 'left', + width: wp('85%'), + fontSize: hp('1.7%'), + marginBottom: 20, + justifyContent: 'flex-start' + }, + + }); +} + +export const customStyles=(isDarkTheme=defdt,routeName=defrn)=>{ + const PageTheme=GetPageTheme(isDarkTheme,routeName); + return StyleSheet.create({ + drawerSubTitle:{ + fontSize:12, + color:PageTheme.$text_color + }, + loginIllutration:{ + // marginTop:20, + }, + performics_logo:{ + width:wp('50%'), + height:40, + marginTop:20, + resizeMode:'contain', + }, + company_logo:{width:wp('100%')-40,height:100,resizeMode:'contain'}, + loginScrollCon:{ + flex:1, + width:wp('100%'), + }, + loginCon:{ + flex:1, + alignItems:"center", + position:'relative', + + }, + projectScrollCon:{ + width:wp('100%'), + flex:1 + }, + projectCon:{ + alignItems:"center", + position:'relative', + }, + loginScrollCon2:{ + flex:1, + width:wp('100%'), + }, + projectPageWrapper:{width:'100%',height:hp('100%')}, + + //=============Bottom View============== + footerView:{width:'100%',alignItems:'center',marginBottom:20,}, + + //=============signatureBox============== + signatureBox:{ + alignItems:"center", + width:wp('100%'), + padding:10, + }, + signatureText:{ + color:PageTheme.$text_color_light, + fontSize:12, + fontWeight:'400', + textAlign:'center', + }, + signatureLogo:{ + resizeMode: 'contain', + width: wp('30%'), + height:50, + marginTop:5, + }, + pageContentWrapper:{backgroundColor:PageTheme.$bg_color,borderTopLeftRadius:borderRadius,borderTopRightRadius:borderRadius,elevation:3,paddingTop:10,flex:1,}, + pageContentWrapper_bgLight:{backgroundColor:'#efefef'}, + //=============general Style============= + // pt200:{paddingTop:200,}, + mb7:{marginBottom:7,},mb10:{marginBottom:10,},mb20:{marginBottom:20,},mb30:{marginBottom:30,},mb40:{marginBottom:40,},mb50:{marginBottom:50,},mb60:{marginBottom:60,},mb70:{marginBottom:70,},mb80:{marginBottom:80,},mb90:{marginBottom:90,},mb100:{marginBottom:100,}, + mt10:{marginTop:10,},mt20:{marginTop:20,},mt30:{marginTop:30,},mt40:{marginTop:40,},mt50:{marginTop:50,},mt60:{marginTop:60,},mt70:{marginTop:70,},mt80:{marginTop:80,},mt90:{marginTop:90,},mt100:{marginTop:100,}, + pl10:{paddingLeft:10},pl20:{paddingLeft:20},pl30:{paddingLeft:30},pl40:{paddingLeft:40},pl50:{paddingLeft:50}, + pr10:{paddingRight:10},pr20:{paddingRight:20},pr30:{paddingRight:30},pr40:{paddingRight:40},pr50:{paddingRight:50}, + mr10:{marginRight:10},mr20:{marginRight:20},mr30:{marginRight:30}, + ml10:{marginLeft:10},ml20:{marginLeft:20},ml30:{marginLeft:30},ml40:{marginLeft:40},ml50:{marginLeft:50}, + pt10:{paddingTop:10},pt20:{paddingTop:20},pt30:{paddingTop:30},pt40:{paddingTop:40},pt50:{paddingTop:50}, + zIndex0:{zIndex:0}, + logoImage_con:{flexDirection:'row',justifyContent:'center',marginBottom:10}, + logoImage:{width:100,height:50}, + drawerInfoCon:{padding:10,paddingLeft:0,paddingTop:STATUSBAR_HEIGHT+10,alignItems:'center'}, + // drawerInfoLeft:{paddingRight:10,marginRight:10,borderRightColor:PageTheme.$secondary_color_light,borderRightWidth:2}, + drawerLogo2:{width:100,height:50}, + pageText:{ + color:PageTheme.$text_color_dark, + fontSize:16, + fontWeight:'500', + textAlign:'center', + marginBottom:10, + }, + pagedescText:{ + color:PageTheme.$text_color, + fontSize:13, + fontWeight:'400', + textAlign:'center', + marginBottom:5, + }, + formCon:{}, + formGroup:{position:'relative'}, + inputStyle:{ + textAlign:'left', + backgroundColor:PageTheme.$secondary_color_light, + width:wp('85%'), + borderRadius:7, + paddingVertical:5, + paddingHorizontal:15, + height:50, + color:PageTheme.$accent_color2, + }, + formInputLabel:{position:'absolute',left:40,zIndex:1,color:PageTheme.$placeholder_color,top:15,}, + formInputLeftIcon:{position:'absolute',left:15,top:15}, + passField:{ + position:'relative', + }, + show_pass_btn:{ + position:'absolute', + top:0, + right:0, + width:40, + height:50, + alignItems:'center', + justifyContent:'center', + }, + keyba_view:{ flex: 1,width: wp('100%'),alignItems:'center'}, + keyba_viewContent:{overflow:'hidden'}, + keyba_inner_view:{ flex: 1,width: wp('100%'),alignItems:'center',position:'relative'}, + pass_input:{ + paddingRight:40, + }, + form_label:{ + color:PageTheme.$text_color, + fontSize:14, + fontWeight:'400', + textAlign:'left', + paddingHorizontal:0, + marginBottom:10, + + }, + otp_inputStyle:{ + textAlign:'center', + backgroundColor:PageTheme.$secondary_color_light, + width:((wp('85%')/4)-10), + borderRadius:4, + paddingVertical:10, + paddingHorizontal:15, + height:50, + color:PageTheme.$accent_color2, + marginBottom:10, + marginRight:10, + fontSize:25, + }, + otp_field:{ + flexDirection:'row', + }, + otp_hiddeninput:{ + display:'none', + }, + fullwebview:{ + width:'100%', + height:'100%', + flex:1, + // borderTopLeftRadius:borderRadius,borderTopRightRadius:borderRadius, + marginBottom:0, + }, + roundScrollWrapper:{paddingTop:10,flex:1,width:'100%'}, + roundScrollZIndex:{zIndex:1,}, + roundScrollCon:{backgroundColor:PageTheme.$bg_color,borderTopLeftRadius:borderRadius,borderTopRightRadius:borderRadius,}, + roundScrollInner:{height:'100%',width:'100%',flex:1,backgroundColor:PageTheme.$bg_color,borderTopLeftRadius:borderRadius,borderTopRightRadius:borderRadius,elevation:3,paddingTop:40,}, + webViewCon:{height:'100%',flex:1,borderTopLeftRadius:borderRadius,borderTopRightRadius:borderRadius,paddingTop:0,}, + headetBgImage:{ + height:hp('20%'), + width:wp('100%')+2, + position:'relative', + justifyContent:'center', + alignItems:'center', + }, + headerTitle:{ + color:PageTheme.$accent_color, + fontSize:20, + width:150,//(wp('100%')-80), + textAlign:'right', + }, + headerImg:{ + width:wp('40%'), + height:120, + resizeMode:'contain', + top:28, + left:-30, + }, + headerLeftIcon:{ + width:60, + height:60, + alignItems:'center', + justifyContent:'center', + marginLeft:-10, + }, + headerContent:{ + flex:1, + flexDirection:'row', + alignItems:'center', + justifyContent:'space-between', + position:'absolute', + width:wp('100%'), + paddingHorizontal:20, + }, + teaml_name:{ + color:PageTheme.$text_color, + fontSize:14, + fontWeight:'400', + textAlign:'left', + paddingLeft:20, + paddingRight:10, + }, + teaml_img:{ + width:20, + height:20, + }, + teaml:{ + flexDirection:'row', + paddingHorizontal:20, + marginBottom:10, + borderWidth:2, + borderColor:PageTheme.$secondary_color_light, + shadowOffset:{width:0,height:2}, + borderRadius:5, + paddingVertical:10, + alignItems:'center' + }, + iteml_con:{ + width:'100%', + marginTop:10, + paddingBottom:50, + paddingHorizontal:20, + paddingTop:10 + }, + iteml_conR:{paddingBottom:20,paddingTop:10,paddingHorizontal:10}, + iteml_conR2:{marginBottom:20,backgroundColor:PageTheme.$bg_color,borderRadius:5,elevation:5,shadowColor:'#000',shadowOffset: { width: 0, height: 3 } , shadowOpacity:0.15}, + listcon:{ + width:wp('100%'), + height:hp('100%')-(180+EXTRA_SPACE_MD), + }, + storeR_listcon:{ + width:wp('100%'), + height:hp('100%')-(180+EXTRA_SPACE_MD), + paddingHorizontal:0, + paddingBottom:30, + }, + storelist_parentwrap:{width:'100%'}, + storeTab_MenuCon:{width:'94%',marginTop:0,marginBottom:0,marginHorizontal:10,borderBottomColor:PageTheme.$text_color_light2,borderBottomWidth:1}, + storeTab_Menu:{alignItems:'center',marginBottom:10,}, + storeTab_pill:{paddingHorizontal:20,paddingVertical:5,borderRadius:30,backgroundColor:'#efefef',marginRight:7}, + storeTab_pillText:{color:PageTheme.$text_color,fontSize:14,fontWeight:'500'}, + storeTab_pillActive:{backgroundColor:'#ffb020'}, + storeTab_pillActiveText:{color:'#fff'}, + // storelist card style + storel:{ + flexDirection:'row', + paddingRight:10, + marginBottom:10, + // borderWidth:2, + // borderColor:PageTheme.$secondary_color_light, + backgroundColor:PageTheme.$bg_color, + borderRadius:5, + paddingVertical:10, + alignItems:'center', + elevation:5,shadowColor:'#000',shadowOffset: { width: 0, height: 3 } , shadowOpacity:0.15 + }, + storel_card_outer:{ + paddingVertical:5,paddingHorizontal:10,position:'relative',width:'100%' + }, + storel_card:{ + flexDirection:'row',alignItems:'center', + }, + storel_card_content:{marginHorizontal:5,width:'100%',flexDirection:'row',alignItems:'baseline'}, + storel_card_title:{ + fontSize:15, + color:PageTheme.$text_color, + fontWeight:'500', + + }, + storel_card_subtitle:{marginLeft:10,paddingLeft:10,borderLeftColor:PageTheme.$text_color_light,borderLeftWidth:1}, + storel_card_subtitleTxt:{fontSize:12, color:PageTheme.$text_color_light,}, + storel_details:{ + // flex:1, + paddingHorizontal:5, + }, + storel_code:{flexDirection:'row',marginTop:0,paddingTop:5,width:'100%'}, + storel_codeCon:{marginRight:10,flexDirection:'row',alignItems:'center'}, + storel_codeConAddr:{alignItems:'flex-start'}, + storel_codeIcon:{fontSize:20,marginRight:10,}, + storel_codeBorder:{borderRightColor:PageTheme.$secondary_color_dark,borderRightWidth:1}, + storel_codeBorderTop:{borderTopColor:PageTheme.$secondary_color_light,borderTopWidth:1,}, + storel_codeLbl:{fontSize:12,color:PageTheme.$secondary_color_dark,marginRight:5,flexWrap:'wrap'}, + storel_codeText:{fontSize:12,color:PageTheme.$text_color,marginRight:5}, + storel_codeTextAddr:{width:'80%'}, + storel_usWrap:{width:'100%',position:'relative',justifyContent:'center',paddingVertical:10,}, + storel_usCon:{flexDirection:'row',alignItems:'center'}, + storel_usConBtn:{borderRadius:30,width:140,position:'relative',backgroundColor:PageTheme.$secondary_color_light,paddingHorizontal:5,paddingVertical:6,elevation:3,shadowOpacity:0.2,shadowOffset:{width:0,height:2}}, + storel_usConBtn2:{width:150,}, + storel_usBtnText:{paddingRight:5,marginRight:5,color:PageTheme.$text_color}, + storel_usBtnRemoveIcon:{backgroundColor:'#fff',position:'absolute',top:0,bottom:0,right:0,borderTopRightRadius:30,borderBottomRightRadius:30,paddingHorizontal:10,alignItems:'center',justifyContent:'center'}, + storel_usText:{marginLeft:5,color:PageTheme.$text_color,fontSize:13}, + storel_geotag_btn:{position:'absolute',top:-15,right:-10,width:50,height:50,borderRadius:25,alignItems:'center',justifyContent:'center'}, + storel_CheckOutBtn:{position:'absolute',right:0,borderRadius:30,backgroundColor:PageTheme.$primary_color,paddingHorizontal:15,paddingVertical:6,elevation:3,shadowOpacity:0.2,shadowOffset:{width:0,height:2}}, + storel_cancelBtn:{}, + storel_CheckOutBtnText:{color:PageTheme.$accent_color,fontSize:14,fontWeight:'500'}, + + // storel searchbar + storel_searchbar:{marginTop:10,marginHorizontal:10,backgroundColor:PageTheme.$secondary_color_light,height:40,borderRadius:4,paddingHorizontal:10,elevation:1,shadowColor:'#000',shadowOpacity:0.15,shadowOffset:{width:0,height:2},flexDirection:'row'}, + storel_searchInput:{width:'86%',fontSize:13,color:PageTheme.$text_color}, + storel_searchBtn:{width:40,height:40,top:0,right:0,position:'absolute',backgroundColor:PageTheme.$primary_color,borderTopRightRadius:4,borderBottomRightRadius:4,alignItems:'center',justifyContent:'center'}, + storel_searchBtnIcon:{marginTop:-2}, + + // color description box + colorDescriptionWrap:{marginTop:5,marginHorizontal:10,backgroundColor:PageTheme.$bg_color,paddingVertical:5,borderRadius:4,paddingHorizontal:10,flexDirection:'row',elevation:1,shadowColor:'#000',shadowOpacity:0.2,shadowOffset:{width:0,height:2}}, + colorBoxCon:{flexDirection:'row',alignItems:'center',marginRight:20}, + colorBox:{elevation:1,shadowColor:'#000',borderRadius:4,shadowOpacity:0.15,shadowOffset:{width:0,height:2},width:20,height:20,}, + colorBox1:{backgroundColor:PageTheme.$fifth_color,}, + colorBox2:{backgroundColor:PageTheme.$secondary_color_light,}, + colorDesc:{fontSize:12,color:PageTheme.$text_color,marginLeft:5,flexWrap:'wrap'}, + + + // Page header + pageHdrWrap:{position:'absolute',top:STATUSBAR_HEIGHT+(70+(Platform.OS=='ios'?0:5)),zIndex:9,marginHorizontal:10,justifyContent:'center',backgroundColor:PageTheme.$primary_color,paddingVertical:5,borderRadius:20,paddingHorizontal:10,flexDirection:'row',flexWrap:'wrap'}, + pageHdrWrapText:{textAlign:'center',fontSize:13,color:PageTheme.$accent_color,flexWrap:'wrap'}, + + + // storelist row style + storelR:{flexDirection:'row',paddingRight:10,marginBottom:5,paddingBottom:5,paddingTop:10,borderBottomColor:PageTheme.$fourth_color,borderBottomWidth:1}, + storelR_last:{borderBottomWidth:0,paddingBottom:0,marginBottom:0}, + + + // dynamic storelist style + dstorel_card_outer:{ + paddingVertical:0,paddingHorizontal:10,width:'100%', + }, + dstorel_row:{flexDirection:'row',width:'100%',paddingBottom:5,paddingTop:5,borderBottomWidth:1,borderBottomColor:PageTheme.$secondary_color_light}, + dstorel_row_last:{borderBottomWidth:0}, + dstorel_codeLbl:{fontSize:12,color:PageTheme.$secondary_color_dark,marginRight:5}, + dstorel_codeText:{fontSize:12,fontWeight:'400',color:PageTheme.$text_color,marginRight:5}, + dstorel_codeSep:{fontSize:12,color:PageTheme.$text_color,marginRight:5}, + dstorel_codeCon:{marginRight:0,flexDirection:'row',alignItems:'center'}, + + // storePhotos + storePhotosl_card:{ + paddingVertical:7, + paddingHorizontal:10, + marginHorizontal:10, + marginBottom:5, + flexDirection:'row', + borderRadius:5, + borderWidth:2, + borderColor:PageTheme.$secondary_color_light, + alignItems:'center', + }, + storePhotosl_card_details:{width:100,paddingLeft:10,marginRight:10,}, + storePhotosl_card_title:{ + fontSize:15, + color:PageTheme.$text_color, + fontWeight:'500', + }, + storePhotosl_card_subtitle:{fontSize:11,color:PageTheme.$text_color_light,fontWeight:'400',}, + storePhotosl_card_img:{width:50,height:50}, + storePhotosl_card_remove_btn:{position:'absolute',right:10,}, + // daily menu card style + dailym_scroll_con:{padding:10,alignItems:'center',width:'100%'}, + dailym_scroll:{width:'100%'}, + dailym_bgcolor1:{backgroundColor:'#e0f9a5'}, + dailym_bgcolor2:{backgroundColor:'#ffd667'}, + dailym_bgcolor3:{backgroundColor:'#c2ddff'}, + dailym_bgcolor4:{backgroundColor:'#d9c2ff'}, + dailym_card:{ + paddingHorizontal:20, + marginBottom:10, + borderRadius:5, + paddingVertical:10, + justifyContent:'center', + width:'100%', + height:100, + elevation:5,shadowColor:'#000',shadowOffset:{width:0,height:2}, + }, + dailym_con:{flexDirection:'row',alignItems:'center'}, + dailym_photo:{ + width:100, + height:80, + // marginTop:-20, + }, + dailym_title:{ + textAlign:'left', + color:PageTheme.$text_color, + fontSize:20, + width:150, + fontWeight:'500', + marginLeft:20, + }, + dailym_done:{position:'absolute',width:31,height:31,right:15,top:15,borderRadius:15,elevation:3,shadowColor:'#000'}, + dailym_done_icon:{}, + //download screen + download_scroll_con:{flex:1,padding:10,alignItems:'center',width:'100%',justifyContent:'center'}, + download_scroll:{flex:1,width:'100%'}, + downloadbtn:{ + paddingVertical:10, + paddingHorizontal:20, + borderRadius:20, + backgroundColor:PageTheme.$primary_color, + }, + downloadbtn_label:{ + textAlign:'center', + color:PageTheme.$accent_color, + fontWeight:'500', + }, + // storephotos form + sform_con:{ + paddingVertical:10, + paddingHorizontal:20, + borderBottomColor:PageTheme.$secondary_color_light, + borderBottomWidth:1, + }, + sform_con2:{paddingHorizontal:10}, + sform_hd:{ + textAlign:'center', + color:PageTheme.$secondary_color_dark, + fontWeight:'500', + fontSize:16, + marginBottom:10, + }, + sform_hd2:{ + textAlign:'left', + width:'100%', + paddingVertical:10, + paddingHorizontal:20, + color:PageTheme.$secondary_color_dark, + fontWeight:'500', + fontSize:16, + marginBottom:10, + }, + sform_group:{ + paddingHorizontal:10, + }, + sform_group2:{ + paddingHorizontal:0, + marginBottom:10, + }, + sform_50:{ + width:'50%', + marginHorizontal:5, + }, + sform_100:{ + width:'100%', + marginHorizontal:5, + }, + sform_flex:{flexDirection:'row',alignItems:'center'}, + sform_label:{ + textAlign:'left', + color:PageTheme.$text_color_dark, + fontWeight:'500', + fontSize:14, + width:'40%', + marginBottom:10, + }, + sform_selectStyle:{ + textAlign:'left', + backgroundColor:PageTheme.$secondary_color_light, + width:'60%', + borderRadius:20, + paddingVertical:0, + paddingHorizontal:0, + padding:0, + height:30, + color:PageTheme.$accent_color2, + }, + sform_label2:{ + textAlign:'left', + color:PageTheme.$text_color_dark, + fontWeight:'500', + fontSize:14, + width:'100%', + height:25, + marginBottom:0, + padding:0, + }, + sform_label3:{ + textAlign:'left', + color:PageTheme.$text_color_dark, + fontWeight:'500', + fontSize:14, + marginBottom:10, + padding:0, + }, + sform_selectStyle2:{ + textAlign:'left', + width:wp('40%'), + backgroundColor:PageTheme.$secondary_color_light, + borderRadius:20, + paddingVertical:0, + paddingHorizontal:0, + padding:0, + color:PageTheme.$accent_color2, + }, + sform_row:{ + flexDirection:'row', + }, + sform_row2:{ + flexDirection:'row', + width:wp('100%'), + paddingHorizontal:10, + }, + sform_inputStyle:{ + textAlign:'left', + width:wp('40%'), + backgroundColor:PageTheme.$secondary_color_light, + paddingVertical:5, + paddingHorizontal:10, + color:PageTheme.$accent_color2, + }, + sform_inputStyle2:{ + textAlign:'left', + width:'100%', + backgroundColor:PageTheme.$secondary_color_light, + paddingVertical:5, + paddingHorizontal:10, + color:PageTheme.$accent_color2, + }, + + sform_selectItem:{borderBottomWidth:1,borderBottomColor:PageTheme.$text_color}, + sform_selectedItem:{backgroundColor:PageTheme.$secondary_color_light,}, + sform_btn_con:{ + width:'100%', + marginTop:10, + marginBottom:0, + alignItems:'center', + justifyContent:'center', + flexDirection:'row' + }, + fixedbtn:{marginBottom:20}, + sform_btn:{ + paddingVertical:10, + paddingHorizontal:20, + borderRadius:20, + backgroundColor:PageTheme.$primary_color, + alignItems:'center', + flexDirection:'row', + justifyContent:'center', + minWidth:150, + }, + sform_btn_icon:{ + marginRight:5, + }, + sform_btn_text:{ + textAlign:'center', + color:PageTheme.$accent_color, + fontWeight:'500', + }, + sform_pic_row:{flexDirection:'row',width:'100%',marginTop:10,justifyContent:'center'}, + sform_pic_row2:{justifyContent:'flex-start'}, + sform_pic_con:{width:(wp('33%')-25),marginHorizontal:5,display:'flex'}, + capture_image_btn:{width:80,height:40,alignItems:'center',flexDirection:'row',justifyContent:'center',alignSelf:'center'}, + store_img:{width:'100%',height:90,borderRadius:5,marginBottom:5, + backgroundColor:'#b5b5b5' + }, + csku_scroll_con:{padding:10,width:'100%'}, + sf_datePicker_text: { + textAlign:'left', + width:wp('40%'), + backgroundColor:PageTheme.$secondary_color_light, + paddingVertical:5, + paddingHorizontal:10, + color:PageTheme.$accent_color2, + }, + sf_datePicker:{position:'absolute',width:21,height:21,right:25,top:3}, + sf_datePicker_con:{position:'relative'}, + select_ht:{height:53}, + // report menu + reportMenu_con:{paddingHorizontal:20,paddingVertical:20,}, + reportMenu_hd:{ + textAlign:'center', + width:'100%', + paddingVertical:10, + paddingHorizontal:20, + color:PageTheme.$secondary_color_dark, + fontWeight:'500', + fontSize:20, + marginBottom:10, + }, + reportMenu:{marginTop:10}, + reportMenu_item:{ + paddingVertical:10, + paddingHorizontal:20, + borderRadius:5, + minHeight:50, + alignItems:'center', + flexDirection:'row', + justifyContent:'center', + minWidth:150, + marginBottom:10, + }, + reportMenu_item_bg1:{backgroundColor:PageTheme.$primary_color,}, + reportMenu_item_bg2:{backgroundColor:'#ffd667',}, + reportMenu_item_text:{ + textAlign:'center', + color:PageTheme.$accent_color, + fontWeight:'500', + fontSize:16, + }, + // loaderSyle + loaderBackdrop:{ + position:'absolute', + width:wp('100%'), + height:hp('100%'), + backgroundColor:'#00000052', + padding:10, + flex:1, + flexDirection:'row', + alignItems:'center', + justifyContent:'center', + top:0, + zIndex:9999, + }, + loaderCon:{ + backgroundColor:PageTheme.$bg_color, + width:'80%', + height:50, + borderRadius:4, + elevation:10, + shadowColor:'#000', + shadowOpacity:0.5, + shadowOffset:{width:0,height:3}, + flexDirection:'row', + alignItems:'center', + justifyContent:'center', + + }, + download_loaderCon:{backgroundColor:PageTheme.$accent_color,width:'80%',borderRadius:4,elevation:10,shadowColor:'#000', shadowOpacity:0.5,shadowOffset:{width:0,height:3},padding:10,}, + download_Title:{color:PageTheme.$text_color, fontSize:16,fontWeight:'500',marginBottom:7}, + download_count:{color:PageTheme.$text_color_light, fontSize:13,fontWeight:'400'}, + download_subTitle:{color:PageTheme.$text_color_dark, fontSize:12,fontWeight:'400'}, + downloadProgress:{position:'relative',marginVertical:7}, + downloadProgress_bg:{height:10,borderRadius:10,backgroundColor:PageTheme.$text_color_light2,width:'100%'}, + downloadProgress_filled:{position:'absolute',top:0,height:10,borderRadius:10,backgroundColor:PageTheme.$primary_color,width:'0%'}, + spinnerCon:{position:'relative'}, + downloadModal_spin:{position:'absolute',top:10,right:10,}, + spinner:{}, + spinnerInner:{position:'absolute',top:4,left:4}, + spinnerInner2:{position:'absolute',top:2,left:2}, + loaderTitle:{ + fontSize:16, + color:PageTheme.$text_color, + marginLeft:30, + }, + // store info + storeInfo_wrap:{borderRadius:10}, + dm_storeInfo:{width:wp('100%'),backgroundColor:PageTheme.$accent_color,padding:10,borderRadius:4,borderBottomWidth:2,borderBottomColor:PageTheme.$secondary_color_light,marginTop:10,paddingBottom:20}, + dm_storeInfo_title:{color:PageTheme.$text_color_dark,fontWeight:'500',fontSize:16,}, + dm_storeInfo_subtitle:{color:PageTheme.$text_color_light,fontWeight:'400',fontSize:13,}, + checkinbtn:{ + paddingVertical:10, + paddingHorizontal:20, + borderRadius:20, + backgroundColor:PageTheme.$primary_color, + alignItems:'center', + flexDirection:'row', + justifyContent:'center', + minWidth:150, + marginTop:40, + }, + checkinbtn_text:{color:PageTheme.$accent_color,fontSize:16}, + // selfie box: + selfie_preview_con:{width:wp('100%'),paddingHorizontal:20,alignItems:'center',justifyContent:'center'}, + selfie_preview_hd:{textAlign:'left'}, + selfie_preview:{flexDirection:'row',alignItems:'center'}, + selfiep_img:{width:100,height:100,backgroundColor:'#b5b5b5'}, + take_selfie_btn:{ + paddingVertical:10, + paddingHorizontal:20, + borderRadius:20, + backgroundColor:PageTheme.$primary_color, + alignItems:'center', + flexDirection:'row', + justifyContent:'center', + minWidth:150, + marginLeft:40, + }, + take_selfie_btn_text:{color:PageTheme.$accent_color,fontSize:16,marginLeft:10}, + + // checkin info + checkinMainCon:{width:'100%'}, + checkinInfo:{width:'100%',paddingBottom:10,marginBottom:10,borderBottomColor:PageTheme.$secondary_color_light,borderBottomWidth:2,}, + checkinInfo_hd:{color:PageTheme.$secondary_color_dark,fontSize:15,marginRight:10}, + checkinInfo_hdr:{flexDirection:'row',alignItems:'center',marginBottom:5,}, + checkinInfo_timecon:{flexDirection:'row',}, + checkinInfo_timeinner:{marginLeft:10,}, + checkinInfo_img:{width:120,height:150,backgroundColor:'#b5b5b5'}, + checkinInfo_time:{color:PageTheme.$text_color,fontSize:14,}, + checkinInfo_btnCon:{flex:1,alignItems:'center'}, + goto_storemenu_btn:{flexDirection:'row',marginTop:20,borderColor:PageTheme.$primary_color,borderWidth:2,borderRadius:20,paddingHorizontal:10,height:30,alignItems:'center'}, + goto_storemenu_btn_text:{color:PageTheme.$primary_color,fontSize:14,marginRight:20}, + statusIcon:{position:'absolute',top:0,right:0}, + storeintro_scroll:{width:'100%',}, + storeintro_scrollcon:{width:'100%', + paddingBottom:10, + paddingHorizontal:5,}, + store_audit_img_con:{width:'100%',marginTop:10,marginHorizontal:5,alignSelf:'center',position:'relative',backgroundColor:'#f5f5f5'}, + store_audit_image:{width:'100%',height:150,backgroundColor:'#f5f5f5'}, + store_audit_pickimg_btn:{position:'absolute',right:5,top:0,padding:10}, + clocktimer:{position:"absolute",right:0,top:10,flexDirection:'row'}, + clocktimerWrap:{marginTop:10,marginLeft:10}, + clocktimerRow:{flexDirection:'row',alignItems:'center', backgroundColor:PageTheme.$accent_color,width:'auto',paddingHorizontal:15,paddingVertical:5,borderRadius:30,width:220,justifyContent:'center'}, + clocktimerText:{color:PrimaryTheme.$primary_color,fontSize:12,marginLeft:5,fontWeight:'400'}, + + // QAD styles + qad_bg:{flex:1,alignItems:'center',position:'relative'}, + qad_hdr:{alignItems:'center',width:'100%',paddingTop:20,paddingBottom:10,paddingLeft:10,paddingRight:10,position:'absolute',top:0,left:0}, + qad_text:{color:PageTheme.$accent_color,fontSize:18,fontWeight:'500',textAlign:'center',marginBottom:5,textTransform:'capitalize'}, + qad_subtext:{color:PageTheme.$accent_color,fontSize:13,fontWeight:'400',textAlign:'center',marginBottom:5,}, + qadPopUp:{flex:1,width:wp('100%'),marginTop:160,backgroundColor:PageTheme.$accent_color,borderTopLeftRadius:20,borderTopRightRadius:20,elevation:5,shadowOpacity:1,shadowColor:'#323232',alignItems:'center',padding:20}, + qadPopUpInner:{flex:1}, + qadScrollCon:{flex:1,width:'100%',padding:0,height:420}, + qadInnerCon:{alignItems:"center",position:'relative'}, + + // QAD Progess bar + linear_progressBarWrapper:{backgroundColor:'#fff',paddingHorizontal:10,paddingVertical:10,flexDirection:'row',width:'100%',position:'relative',elevation:5,borderRadius:15,alignItems:'center'}, + linear_progressBar:{width:'87%',marginRight:10,position:'relative'}, + linear_progressBar_bg:{width:'100%',borderRadius:5,height:10,backgroundColor:PageTheme.$text_color_light2}, + linear_progressBar_filled:{width:'0%',borderRadius:5,height:10,backgroundColor:PageTheme.$primary_color,marginRight:10,position:'absolute',top:0,left:0}, + linear_progressBarText:{paddingLeft:10,borderLeftWidth:1,borderLeftColor:PageTheme.$text_color_light,color:PageTheme.$text_color}, + + + // QAD Form + qad_form:{marginTop:10}, + qad_questions:{width:'100%',display:'none'}, + qad_questionsShow:{display:'flex'}, + qad_qtnText:{color:PageTheme.$text_color,fontSize:17,fontWeight:'600'}, + qad_optionsCon:{marginTop:20,paddingHorizontal:10}, + qad_optionBtn:{backgroundColor:PageTheme.$secondary_color_light,paddingHorizontal:15,paddingVertical:12,marginBottom:10,borderRadius:10,elevation:2}, + qad_optionBtnText:{fontSize:12,color:PageTheme.$text_color}, + qad_qtnBtnsGrp:{width:wp('87%'),marginTop:20,position:'relative',height:50,padding:10}, + qad_qtnBtn:{backgroundColor: PageTheme.$primary_color,elevation:6,shadowColor:PageTheme.$primary_color,shadowOffset:{width:0,height:2},borderRadius: 40,width:'35%',height: 40,display: 'flex',alignItems: 'center',justifyContent: 'center'}, + qad_qtnBtnText:{color: PageTheme.$accent_color,textAlign: 'center',fontSize: 15,padding: 10,}, + qad_btnSubmitCon:{position:'absolute',right:0,width:'35%'}, + qad_btnSubmit:{elevation:6,shadowColor:PageTheme.$primary_color,shadowOffset:{width:0,height:2},borderRadius: 40,width:'100%',height: 40,display: 'flex',alignItems: 'center',justifyContent: 'center'}, + qad_btnBack:{position:'absolute',left:0}, + qad_btnBackText:{}, + qad_btnNext:{position:'absolute',right:0}, + qad_btnNextText:{}, + qad_timer_wrapper:{flexDirection:'row',marginTop:5,alignItems:'center',paddingHorizontal:10}, + qad_timerText:{marginLeft:10,color:PageTheme.$text_color,fontSize:16,marginRight:10}, + timerProgressBar:{position:'relative',flex:1,height:10,overflow:"hidden"}, + timerProgressBar_bg:{height:10,borderRadius:10,backgroundColor:PageTheme.$text_color_light2,width:'100%'}, + timerProgressBar_filled:{height:10,borderRadius:10,backgroundColor:'green',position:'absolute',top:0}, + answerRemark:{padding:10,backgroundColor:'#bdebbd',borderRadius:10,marginTop:5}, + answerRemarkText:{fontSize:14,color:'green'}, + remarkRedbg:{backgroundColor:'#fdc0c0'}, + remarkRed:{color:'red'}, + + // forgetMpin + forgetMpinWrap:{width:wp('80%'),paddingVertical:10,position:'relative',marginTop:10}, + forgetMpinBtn:{position:'absolute',right:0,top:0}, + forgetMpinText:{color:PageTheme.$text_color_light}, + + // modalWrapper + modalWrapper:{position:'absolute',top:0,left:0,width:wp('100%'),height:hp('100%'),backgroundColor:'#000',zIndex:999}, + downloadModalWrapper:{}, + + // attendance_menu + attmenu_listcon:{width:wp('100%'), }, + attmenu_list:{ width:wp('100%'),marginTop:10,paddingBottom:10,paddingHorizontal:20,flexDirection:'row',flexWrap:'wrap'}, + attendance_menu_outer:{width:wp('50%')-30,marginBottom:20,}, + attendance_menu_first:{marginRight:20,}, + attendance_menu:{padding:10,borderRadius:7,elevation:3,height:120,alignItems:'center'}, + attendance_menu_inner:{alignItems:'center',height:'60%',justifyContent:'center'}, + attendance_Icon:{width:50,height:50}, + attendance_menu_image:{height:50,}, + attendance_menu_title:{fontSize:16,fontWeight:'bold',color:PageTheme.$text_color,marginTop:10,textAlign:'center'}, + + // backgroundVideo + backgroundVideo:{position:'absolute',top:0,bottom:0,left:0,right:0}, + + // no download data style + nodownloaddata_con:{width:'100%',height:'100%',alignItems:'center',justifyContent:'center'}, + nodownloaddata_row:{width:'100%',height:'100%',alignItems:'center',justifyContent:'center'}, + nodownloaddata_text:{fontSize:15,fontWeight:"500",color:PageTheme.$text_color_light,textAlign:'center',marginTop:10}, + + // no data available + noDataCon:{width:'100%',height:400,alignItems:'center',justifyContent:'center'}, + noDataText:{fontSize:15,fontWeight:"500",color:PageTheme.$text_color_light,textAlign:'center'}, + + // geotag screen + geotag_scroll:{justifyContent:'center',padding:10,paddingBottom:10,paddingTop:5}, + geotag_scroll_pb:{paddingBottom:50,}, + gtag_sImageWrap:{position:'absolute',bottom:-60,alignItems:'center',left:0,right:0, width:'100%'}, + gtag_sImage_View:{position:'absolute',top:-60,elevation:1,backgroundColor:'#fff',borderRadius:15,padding:3,shadowOpacity:0.1,shadowColor:'#000',shadowOffset:{width:0,height:2}}, + gTag_sImageBtn:{position:'absolute',zIndex:2,top:5,elevation:2,backgroundColor:PageTheme.$red,borderRadius:20,padding:9,shadowOpacity:0.25,shadowColor:PageTheme.$red,shadowOffset:{width:0,height:2}}, + gtag_sImagelbl:{alignItems:'center',paddingHorizontal:20,paddingTop:30,paddingBottom:10,borderRadius:10,backgroundColor:PageTheme.$bg_color,elevation:2,shadowOpacity:0.2,shadowColor:'#000',shadowOffset:{width:0,height:2}}, + gtag_sImagelblText:{fontSize:14,fontWeight:'500',color:PageTheme.$text_color,zIndex:1,marginTop:20,}, + gTag_btnWrap:{alignItems:'center',marginTop:40}, + gTag_btnWrapCI:{marginTop:40,}, + gTag_Image:{width:80,height:80,borderRadius:13}, + gTag_distanceAway:{paddingHorizontal:13,paddingVertical:7,borderRadius:6,backgroundColor:'#f5aeae78',width:'90%'}, + gTag_distanceAwayLbl:{fontSize:14,color:'red',textAlign:'center',fontWeight:'500'}, + android_flipIMageView:{transform:[{scaleX:-1}]}, + // geotag_Page:{marginTop:StatusBar.currentHeight+10,position:'relative'}, + // geotag_BackBtn:{position:'absolute',top:20,left:20,backgroundColor:PageTheme.$primary_color,padding:10,borderRadius:40,elevation:4,shadowColor:'#676767'}, + // geotag_BackBtnIcon:{}, + + // map + mapWrapCon:{marginBottom:10,position:'relative'}, + mapWrapConIOS:{backgroundColor:'#fff',padding:1,borderRadius:15,elevation:5,shadowColor:'#000',shadowOpacity:0.2,shadowOffset: { width: 0, height: 2 }}, + mapWrapper:{width:'100%',height:hp('100%')-(350+EXTRA_SPACE),backgroundColor:'#fff',borderRadius:15,overflow:'hidden',elevation:5,shadowColor:'#000',shadowOpacity:0.6,shadowOffset: { width: 0, height: 2 }}, + mapWrapperView:{height:hp('100%')-(310+EXTRA_SPACE)}, + mapWrapperSmall:{height:hp('100%')-(380+EXTRA_SPACE)}, + mapStyle:{width:'100%',height:'100%'}, + customMapStyle:{borderRadius:10,}, + // Store Visited Modal Style + storelVisitM_Style:{alignItems:'center'}, + storelVisitM_titleStyle:{textAlign:'center',marginTop:20,marginBottom:20}, + storelVisitM_options:{flexDirection:'row',marginBottom:20,justifyContent:'space-evenly',width:'80%'}, + storelVisitM_op_btn:{backgroundColor:PageTheme.$primary_color,color:PageTheme.$accent_color,paddingHorizontal:20,paddingVertical:6,borderRadius:20,minWidth:70}, + storelVisitM_op_btnText:{textAlign:'center',color:PageTheme.$accent_color}, + + // MPin MOdal + MPinM_Style:{alignItems:'center',paddingTop:20,width:'90%'}, + MPinM_title_Style:{textAlign:'center',marginBottom:10,fontSize:15,color:PageTheme.$text_color,fontWeight:'500'}, + MPinM_subtitle_Style:{textAlign:'center',fontSize:13,marginLeft:5,color:PageTheme.$red,fontWeight:'400'}, + MPinM_subtitle_Style2:{textAlign:'center',fontSize:13,marginBottom:10,color:PageTheme.$red,fontWeight:'400'}, + MPinM_subtitleCon:{flexDirection:'row',marginLeft:-5,marginBottom:5,justifyContent:'center',alignItems:'center'}, + MPinM_con:{marginBottom:10,padding:10,}, + MPinM_otp_inputStyle:{ + textAlign:'center', + backgroundColor:PageTheme.$secondary_color_light, + width:'80%', + borderRadius:4, + paddingVertical:10, + paddingHorizontal:15, + height:50, + color:PageTheme.$accent_color2, + marginBottom:10, + marginRight:10, + fontSize:25, + }, + MPinM_otp_field:{ + flexDirection:'row', + }, + + // app update modal + appUpdateMStyle:{alignItems:'center'}, + appUpdateMT_Style:{marginTop:10,marginBottom:10,fontSize:13,fontWeight:"500",color:PageTheme.$text_color}, + appUpdateMT_SubStyle:{paddingHorizontal:10,marginBottom:20,fontSize:12,fontWeight:"400",color:PageTheme.$text_color_light}, + + // Store Cancel visit modal + storelCM_alertCon:{marginBottom:20,flexDirection:'row',alignItems:'center'}, + storelCM_alert:{textAlign:'center',color:'#ff0000',fontSize:14,fontWeight:'400',marginLeft:10}, + storelCancelM_titleStyle:{textAlign:'center',marginTop:10,fontSize:14,fontWeight:'500'}, + storelCancelM_subtitleStyle:{marginBottom:10,fontSize:13,fontWeight:'400',color:PageTheme.$primary_color,textTransform:'capitalize'}, + + // custom modal + customModal:{backgroundColor:PageTheme.$accent_color,width:'80%',borderRadius:4,elevation:10,shadowColor:'#000', shadowOpacity:0.5,padding:10,shadowOffset: { width: 0, height: 2 },}, + customModal_Title:{color:PageTheme.$text_color, fontSize:16,fontWeight:'500',marginBottom:7}, + customModal_Message:{color:PageTheme.$text_color_light, fontSize:14,fontWeight:'400',marginBottom:10}, + + + // non working rsns style + storeD_Main:{width:'100%',height:'100%',paddingVertical:10,}, + storeD_storelMain:{width:'100%',paddingHorizontal:10,}, + storeD_scrollCon:{width:'100%',height:hp('100%')-(340+EXTRA_SPACE)}, + storeD_scroll:{width:'100%',marginBottom:20,paddingHorizontal:10,}, + nonWorking_con:{width:'100%'}, + nonWorking_form:{width:'100%'}, + nonWform_hd:{textAlign:'left',color:PageTheme.$text_color,fontSize:15,paddingVertical:5,paddingHorizontal:10,fontWeight:'600',marginBottom:10,}, + // nonWorking_imgWrap:{width:'100%',height:200,backgroundColor:PageTheme.$text_color_light2,marginTop:20,}, + // nonWorking_form_selectBox:{width:'100%',textAlign:'left',paddingVertical:0,paddingHorizontal:0,padding:0,height:30,color:PageTheme.$accent_color2,}, + nonW_btnWrap:{position:'absolute',bottom:10,left:10,alignItems:'center',width:'100%',alignItems:'center'}, + + nonWlist:{position:'relative',flexDirection:'row',marginBottom:10,alignItems:'center',width:'100%',backgroundColor:PageTheme.$bg_color,elevation:2,borderRadius:7,paddingHorizontal:10,paddingVertical:10,shadowColor:'#000',shadowOpacity:0.15,shadowOffset:{width:0,height:2}}, + nonWlist_camera:{position:'absolute',right:0,alignItems:'center',justifyContent:'center',padding:10,}, + nonWlist_camera_icon:{}, + nonWlist_Text:{fontSize:14,color:PageTheme.$text_color,marginRight:10,}, + nWselStyle:{backgroundColor:PageTheme.$secondary_color_dark,}, + nWselStyleText:{color:PageTheme.$accent_color}, + + // nonWCapImgModal + nonWCapImgModal:{alignItems:'center'}, + nonWCapImgModal_title:{fontSize:14,}, + nonWCapImgModal_subtitle:{}, + nonWCapImgModalCon:{width:'100%',alignItems:'center',position:'relative'}, + nonWCapImgModal_Camera:{marginTop:10,marginBottom:20,padding:10,}, + nonWCapImgModal_btng:{flexDirection:'row',justifyContent:'space-evenly',width:'100%'}, + nonWCapImgModal_Cancel_btn:{marginBottom:10,paddingHorizontal:15,paddingVertical:10,minWidth:100,backgroundColor:PageTheme.$accent_color,borderColor:PageTheme.$primary_color,borderWidth:1,borderRadius:40,elevation:1}, + nonWCapImgModal_Cancel_btnText:{textAlign:'center',color:PageTheme.$primary_color}, + nonWCapImgModal_Save_btn:{marginBottom:10,paddingHorizontal:15,paddingVertical:10,minWidth:100,backgroundColor:PageTheme.$primary_color,borderRadius:40,elevation:1}, + nonWCapImgModal_Save_btnText:{textAlign:'center',color:PageTheme.$accent_color}, + nonWCapImgModal_ImgWrap:{marginTop:10,marginBottom:20,padding:10,width:'100%',alignItems:'center'}, + nonWCapImgModal_Img:{backgroundColor:'#efefef',width:150,height:100,resizeMode:'contain'}, + nonWCapImgModal_CameraSmall:{position:'absolute',right:40,top:0,padding:5,backgroundColor:PageTheme.$bg_color,borderRadius:40,elevation:3}, + + // store Distance Modal + storeDistance_Modal:{padding:20,width:'90%',alignItems:'center'}, + storeDistanceM_title:{fontSize:18,}, + storeDistanceM_Con:{alignItems:'center'}, + storeDistanceM_message:{fontSize:14,color:PageTheme.$text_color,fontWeight:'400',textAlign:'center'}, + storeDistanceM_submessage:{fontSize:14,fontWeight:'400',textAlign:'center',color:PageTheme.$text_color}, + storeDistanceM_btn:{minWidth:100,paddingHorizontal:20,paddingVertical:10,marginTop:20,backgroundColor:PageTheme.$primary_color,borderRadius:20,elevation:3}, + storeDistanceM_btnText:{textAlign:'center',color:PageTheme.$accent_color}, + + // daily_menu + dailymenu_listcon:{width:'100%',alignItems:'center'}, + dailymenu_list:{ paddingHorizontal:10,marginTop:10,paddingBottom:10,}, + dialyMenu_Rows:{width:'100%',flexDirection:'row',marginBottom:0}, + daily_menu_outer:{width:'50%',position:'relative',padding:10,}, + + daily_menu_first:{}, + daily_menu_tilebgShadow:{borderRadius:7,elevation:3,height:160,alignItems:'center',shadowColor:'#000',shadowOffset:{width:0,height:2},shadowOpacity:0.3,backgroundColor:'#0000'}, + daily_menu:{width:'100%',height:'100%',padding:10,borderRadius:7,position:'absolute',top:0,left:0}, + daily_menu_inner:{alignItems:'center',backgroundColor:PageTheme.$bg_color,borderRadius:10,paddingHorizontal:20,paddingVertical:5,marginTop:-20,marginBottom:10,elevation:2,shadowColor:'#000',shadowOffset:{width:0,height:0},shadowOpacity:0.2,justifyContent:'center'}, + daily_menu_inner2:{alignItems:'center',paddingHorizontal:20,paddingTop:25,marginBottom:10,justifyContent:'center'}, + daily_menu_innerImgCon:{position:'absolute',top:20,width:90,height:90}, + daily_menu_bgImg:{width:'100%',height:'100%'}, + daily_menu_Icon:{width:80,height:80}, + + daily_menu_title:{fontSize:14,fontWeight:'400',color:PageTheme.$text_color,marginTop:5,textAlign:'center'}, + daily_menu_done:{position:'absolute',width:31,height:31,right:10,top:-10,borderRadius:15,elevation:3,shadowColor:'#000'}, + + + // Dail menu Category + + catDMenuI_Wrap:{flexDirection:'row',alignItems:'center',justifyContent:'flex-start',width:'100%',marginBottom:10,borderRadius:4,paddingHorizontal:10,paddingVertical:8,backgroundColor:PageTheme.$secondary_color_light,elevation:1,shadowColor:'#000',shadowOpacity:0.1,shadowOffset:{width:0,height:2}}, + catDMenuI_CheckBoxCon:{position:'absolute',width:25,height:25,top:4,left:5,}, + catDMenuI_CheckBox:{alignSelf:'flex-start'}, + catDMenuI_CheckBox_pName:{width:'85%',marginLeft:30}, + catDMenu_listcon:{width:'100%'}, + catDMenu_list:{ marginTop:10,paddingBottom:10,}, + catDmenu_scroll:{justifyContent:'center',paddingBottom:10,paddingTop:5}, + + // opening stock kpi + opening_Stock_wrap:{width:'100%',marginBottom:10}, + opening_Stock_scroll:{justifyContent:'center',padding:10,paddingBottom:10,}, + opening_Stock_scrollOuter:{marginBottom:80,width:wp('100%')}, + opening_Stock_cat:{width:'100%'}, + opening_Stock_catHdr:{width:'100%',position:'relative'}, + opening_Stock_catHdrIcon:{position:'absolute',right:10,top:5}, + opening_Stock_catInner:{width:'100%',paddingHorizontal:10,paddingVertical:7,backgroundColor:PageTheme.$primary_color,borderRadius:5,}, + opening_Stock_catText:{fontSize:14,fontWeight:'500',color:PageTheme.$accent_color}, + + opening_Stock_SubCatHdr:{width:'100%',position:'relative'}, + opening_Stock_SubCatIcon:{position:'absolute',right:10,top:10}, + opening_Stock_SubCatInner:{width:'100%',paddingHorizontal:10,marginTop:10,paddingVertical:7,backgroundColor:PageTheme.$primary_color,borderRadius:5,}, + opening_Stock_SubCatText:{fontSize:14,fontWeight:'500',color:PageTheme.$text_color,textAlign:'center'}, + + osCat_actions:{width:'100%',marginVertical:10,marginTop:20,paddingBottom:10,alignItems:'center',borderBottomColor:PageTheme.$text_color_light2,borderBottomWidth:1,}, + osCat_action_openCam:{}, + osCat_action_add_image:{}, + osCatImageView:{position:'relative',backgroundColor:PageTheme.$secondary_color_light,padding:5,borderRadius:10,}, + osCat_action_reCap:{position:'absolute',top:-10,right:-10,padding:8,backgroundColor:PageTheme.$primary_color,borderRadius:30,elevation:2}, + osCatImage:{width:80,height:80,borderRadius:10,backgroundColor:'#232323'}, + osCat_actn_margin:{}, + opening_Stock_prds:{paddingBottom:20,}, + openStk_prd_Con:{paddingHorizontal:10,position:'relative',marginTop:10,paddingVertical:10,backgroundColor:PageTheme.$secondary_color_light,borderRadius:5,elevation:1,shadowColor:'#484848',shadowOpacity:0.1,shadowOffset:{width:0,height:2}}, + openStk_prd_name:{fontSize:15,color:PageTheme.$text_color,fontWeight:'600'}, + openStk_prd_nameB:{fontSize:15,color:PageTheme.$text_color,fontWeight:'600',borderBottomColor:PageTheme.$fourth_color,borderBottomWidth:1,paddingBottom:5}, + openStk_prd_name2:{fontSize:14,color:PageTheme.$text_color,fontWeight:'400',marginTop:4,}, + openStk_refImageBtn:{position:'absolute',right:20,top:5,width:40,height:40,borderRadius:20,alignItems:'center',justifyContent:'center'}, + openStk_prd_form:{marginTop:10,}, + openStk_prd_row:{width:'100%',flexDirection:'row',}, + openStk_prd_cols:{width:'100%',}, + openStk_prd_colflex:{width:'100%',flexDirection:'row',alignItems:'center',}, + openStk_prd_col50:{width:'48.5%'}, + openStk_prd_col50_1:{marginRight:5,}, + openStk_prd_col50_2:{marginLeft:5}, + openStkP_checkboxWrap:{flexDirection:'row',alignItems:'flex-start',justifyContent:'flex-start',borderBottomColor:PageTheme.$bg_color,borderBottomWidth:1,paddingBottom:10,}, + openStkP_checkbox:{alignSelf:'flex-start'}, + openStkP_checkboxCon:{position:'absolute',width:25,height:25,top:-5,left:-10,}, + openStkP_checkbox_pName:{width:'85%',marginLeft:25}, + openStk_prd_label:{fontSize:13,color:PageTheme.$text_color_dark,fontWeight:'400'}, + openStk_prd_flexlabel:{marginRight:10,width:'35%',color:PageTheme.$text_color_dark}, + openStk_prd_inputStyle:{backgroundColor:PageTheme.$bg_color,borderRadius:4,marginTop:5,height:30,paddingVertical:3,paddingHorizontal:5,minWidth:100,color:PageTheme.$text_color}, + openStk_prd_flex_inputStyle:{marginTop:0,width:'60%'}, + openStk_prd_selectStyle:{backgroundColor:PageTheme.$bg_color,borderRadius:4,height:40,minWidth:100}, + openStk_prd_selectStyle_item:{height:40,fontSize:14,}, + openStk_prd_choiceBoxCon:{height:40,width:'60%',paddingHorizontal:(Platform.OS=='ios'?10:0),}, + openStk_prd_choiceBox:{position:'relative',backgroundColor:PageTheme.$bg_color,flexDirection:'row',height:40,alignItems:'center',width:'80%',maxWidth:150,minWidth:100,borderRadius:5}, + openStkCh_con1:{width:'50%',height:'100%',paddingVertical:5,paddingHorizontal:10,justifyContent:'center',borderRadius:5,}, + openStkCh_text:{textAlign:'center',color:PageTheme.$text_color}, + openStkCh_textactive:{color:PageTheme.$accent_color}, + openStkCh_con_red:{backgroundColor:'red'}, + openStkCh_con_green:{backgroundColor:'green'}, + openStkCh_con_active:{borderRadius:5,elevation:4,shadowColor:'#000',shadowOpacity:0.4,shadowOffset:{width:0,height:2},shadowRadius:5,backgroundColor:'#0000'}, + openStkCh_absolutebg:{position:'absolute',top:0,bottom:0,width:'50%',left:'50%'}, + opening_Stock_btnWrap:{position:'absolute',bottom:0,left:0,right:0,width:wp('100%'),paddingBottom:20,alignItems:'center'}, + openStk_prddetails:{flexDirection:'row',marginTop:10,paddingTop:10,paddingBottom:10,alignItems:'center'}, + openStk_prd_borderT:{borderTopColor:PageTheme.$fourth_color,borderTopWidth:1}, + openStk_prd_borderB:{borderBottomColor:PageTheme.$fourth_color,borderBottomWidth:1}, + openStk_prd_borderL:{borderLeftColor:PageTheme.$fourth_color,borderLeftWidth:1}, + openStk_prd_borderR:{borderRightColor:PageTheme.$fourth_color,borderRightWidth:1}, + openStk_prdd_wrap:{flexDirection:'row',alignItems:'center'}, + openStk_prdd_flabel:{fontSize:13,fontWeight:'500',color:PageTheme.$secondary_color_dark,marginRight:10,}, + openStk_prdd_fvalue:{fontSize:13,fontWeight:'500',color:PageTheme.$secondary_color_dark,marginRight:10,}, + openStk_prdCameras:{marginTop:10,flexDirection:'row',flexWrap:'wrap'}, + openStkCameraCon:{marginRight:10,}, + + // product cats in Stock with cat screen + prodCatsScroll:{justifyContent:'center',padding:10,paddingBottom:10,}, + prodCatsScroll_Outer:{marginBottom:5,width:wp('100%')}, + prodCatPageWrap:{alignItems:'center'}, + prodCatsHdr:{backgroundColor:PageTheme.$primary_color,width:wp('100%')-20,paddingVertical:8,paddingHorizontal:10,marginBottom:15,borderRadius:6,elevation:1,shadowOffset: { width: 0, height: 2 } , shadowOpacity:0.2,}, + prodCatsHdrText:{textAlign:'center',fontSize:14,color:PageTheme.$accent_color}, + prodCatsHdr_Stockprds:{paddingBottom:10}, + prdCat_hdIMgWrap:{width:wp('100%')-20,marginVertical:10,marginTop:20,paddingBottom:10,alignItems:'center',justifyContent:'center',borderBottomColor:PageTheme.$text_color_light2,borderBottomWidth:1,}, + prdCat_hdImgCon:{width:wp('100%'),alignItems:'center'}, + stockCatDone_check:{position:'absolute',width:24,height:24,right:10,top:5,borderRadius:15,elevation:3,paddingLeft:0.2,shadowColor:'#000'}, + + + // SOS + SOS_subCatImgCon:{}, + SOS_imageWrap:{width:'100%',paddingVertical:10,alignItems:'center',borderBottomColor:PageTheme.$text_color_light2,borderBottomWidth:1,}, + + + // shelf talker + st_TextLbl:{marginBottom:10,}, + + // Stock page + stk_inptSTyle:{textAlign:'center'}, + stk_mfdView:{marginTop:10,borderTopColor:PageTheme.$accent_color,borderTopWidth:2,paddingTop:10,}, + stk_mfdTbl_hd:{marginBottom:10,marginTop:10,color:PageTheme.$text_color,fontSize:14,fontWeight:'500'}, + stk_mfdTblHeader:{marginBottom:10,marginTop:10,backgroundColor:PageTheme.$primary_color, borderRadius:10,padding:5,elevation:3,shadowColor:'#747474',shadowOffset: { width: 0, height: 2 } , shadowOpacity:1.0,flexDirection:'row',alignItems:'center',justifyContent:'space-between'}, + stk_mfdTblHeaderBox:{width:'24%',alignItems:'center',backgroundColor:PageTheme.$secondary_color_light,paddingVertical:5,borderRadius:5,}, + stk_mfdTblHeaderBox1:{}, + stk_mfdTblHeaderBox2:{}, + stk_mfdTblHeaderBox3:{}, + stk_mfdTblHeaderBox4:{}, + stk_mfdTblHeaderTxt:{fontSize:13,color:PageTheme.$text_color,marginRight:5,textTransform:'capitalize',fontWeight:'700'}, + stk_addStockBtn:{position:'absolute',right:0,top:10,backgroundColor:PageTheme.$primary_color,borderRadius:4,paddingHorizontal:10,paddingVertical:5,elevation:1,shadowColor:'#747474',shadowOffset: { width: 0, height: 2 } , shadowOpacity:0.1}, + stk_addStockBtnText:{fontSize:13,fontWeight:'500',color:PageTheme.$accent_color}, + AddStockM_View:{width:'100%',marginBottom:10,}, + AddStockM_row:{marginBottom:10,marginTop:0,width:'100%',paddingHorizontal:10}, + AddStockM_label:{color:PageTheme.$text_color,fontSize:14,fontWeight:'400',marginBottom:5}, + AddStockM_col:{}, + AddStockM_MFDInputCon:{flexDirection:'row',alignItems:'center',justifyContent:'space-between'}, + AddStockM_MFDInput:{height:30,alignItems:'center',justifyContent:'center',width:'84%',borderRadius:5,backgroundColor:PageTheme.$secondary_color_light,paddingHorizontal:10,paddingVertical:5,color:PageTheme.$text_color}, + AddStockM_DatePicker:{width:30,height:30,backgroundColor:PageTheme.$primary_color,alignItems:'center',justifyContent:'center',borderRadius:5}, + AddStockM_InputStyle:{height:30,borderRadius:5,backgroundColor:PageTheme.$secondary_color_light,paddingHorizontal:10,paddingVertical:5,color:PageTheme.$text_color}, + AddStockM_cancelBtn:{backgroundColor:PageTheme.$bg_color,borderWidth:1,borderColor:PageTheme.$primary_color,minWidth:90}, + AddStockM_cancelBtnText:{color:PageTheme.$primary_color}, + AddStockM_Btn:{minWidth:90}, + + stk_mfdTblBody:{backgroundColor:PageTheme.$bg_color,borderRadius:5,paddingVertical:5}, + stk_mfdTblrow:{marginBottom:5,borderBottomColor:PageTheme.$secondary_color_light,borderBottomWidth:1,padding:5,flexDirection:'row',alignItems:'center',justifyContent:'space-between'}, + stk_mfdTblrow_last:{borderBottomWidth:0,marginBottom:0}, + stk_mfdTblCol:{paddingHorizontal:10,alignItems:'center',width:'24%',}, + stk_mfdTblCol1:{}, + stk_mfdTblCol2:{}, + stk_mfdTblCol3:{}, + stk_mfdTblCol4:{height:35}, + stk_mfdTblColText:{color:PageTheme.$text_color,fontSize:13,fontWeight:'400'}, + stk_mfdTbl_DeleteBtn:{position:'absolute',right:5,backgroundColor:PageTheme.$bg_color,borderRadius:20,width:30,height:30,alignItems:'center',justifyContent:'center',elevation:2,shadowColor:'#000',shadowOffset: { width: 0, height: 2 } , shadowOpacity:0.2}, + + + // album designs + alumbl:{backgroundColor:PageTheme.$bg_color,elevation:3,padding:10,marginBottom:10,borderRadius:4}, + alumbl_img:{height:200,width:'100%',resizeMode:'contain'}, + alumbl_topText:{color:PageTheme.$text_color,fontWeight:'600',marginBottom:10,fontSize:14}, + alumbl_bottomText:{color:PageTheme.$text_color_light,fontWeight:'400',marginTop:10,fontSize:13}, + album_ZOOM:{backgroundColor:'#000',width:wp('100%'),height:hp('100%'),}, + album_ZOOM_wrap:{backgroundColor:'#000',position:'absolute',top:0,left:0,width:wp('100%'),height:hp('100%')+(Platform.OS=='android'?STATUSBAR_HEIGHT:0),zIndex:1}, + album_ZOOM_img:{backgroundColor:'#fff',width:'100%',height:400}, + album_ZOOM_topBar:{position:'relative',backgroundColor:'#fff',width:'100%',height:50,paddingHorizontal:10,paddingVertical:15,marginTop:STATUSBAR_HEIGHT+10,alignItems:'center',flexDirection:'row'}, + album_ZOOM_backBtn:{position:'absolute',left:5,padding:10,}, + album_ZOOM_indicator:{width:'100%',textAlign:'center',fontSize:14,color:PageTheme.$text_color}, + + // AddVisibilityPresent + addVis_Wrapper:{width:'100%',height:'100%',padding:10,paddingTop:0}, + addvisCon:{}, + addvis_pCon:{flexDirection:'row',alignItems:'center',paddingHorizontal:10,paddingBottom:10,marginBottom:10,borderBottomColor:PageTheme.$secondary_color_light,borderBottomWidth:2,}, + addvis_pText:{width:'40%',color:PageTheme.$text_color,fontWeight:'500',fontSize:15}, + addvis_pChoiceBoxCon:{width:'60%',alignItems:'flex-end'}, + addvis_pChoiceBoxbg:{backgroundColor:'#efefef'}, + addVisForm:{paddingHorizontal:10,}, + addVisRow:{flexDirection:'row',width:'100%',flexWrap:'wrap',justifyContent:'center'}, + addVisCol50:{width:'47%',marginBottom:10,}, + addVisCol100:{width:'100%',marginBottom:10,}, + addVisColspace:{paddingHorizontal:5}, + addVisCol1:{marginRight:5,}, + addVisCol2:{marginLeft:5,}, + addVisFormGrp:{}, + addVisInputStyle:{height:40,borderRadius:5,backgroundColor:PageTheme.$secondary_color_light,paddingHorizontal:10,color:PageTheme.$text_color}, + addVisLabel:{color:PageTheme.$text_color,fontSize:14,fontWeight:'400',marginBottom:6}, + addVisPickerStyle:{height:40,borderRadius:5,}, + addVisPickerOverlay:{backgroundColor:'#00000057'}, + addVisPicker_OptionContainerStyle:{backgroundColor:'#fff',paddingHorizontal:0}, + PV_selectStyle:{width:'60%'}, + PV_selectInputStyle:{backgroundColor:PageTheme.$bg_color,width:'100%'}, + addVisPicker_InputStyle:{backgroundColor:PageTheme.$secondary_color_light,borderRadius:5,overflow:'hidden',textAlign:'center',fontSize:14,color:PageTheme.$text_color,paddingVertical:12,paddingHorizontal:12}, + addVisPicker_Dis_InputStyle:{backgroundColor:'#bbbbbb'}, + // addVisPickerStyle_and:{backgroundColor:PageTheme.$secondary_color_light,borderRadius:5}, + // addVisPickerStyle_IOS:{height:40,borderRadius:5,fontSize:14,marginLeft:-10}, + addvis_opStyle:{padding:0}, + addvis_opTextStyle:{paddingVertical:8,paddingHorizontal:10,fontSize:15,color:PageTheme.$text_color}, + addvis_selectedOpStyle:{backgroundColor:PageTheme.$secondary_color_light}, + addvis_selectedOpTextStyle:{paddingVertical:8,paddingHorizontal:10,color:PageTheme.$primary_color,textAlign:'center',fontSize:17}, + addVisCameras:{flexDirection:'row',flexWrap:'wrap'}, + addVisScroll:{height:hp('100%')-260}, + addVisScrollCon:{}, + addVis_btnWrap:{width:'100%',flexDirection:'row',alignItems:'center',justifyContent:'center',paddingBottom:15,paddingTop:5,borderBottomColor:PageTheme.$secondary_color_light,borderBottomWidth:2}, + addVis_btnWrap2:{borderBottomWidth:0,justifyContent:'flex-start'}, + addVis_btn:{paddingHorizontal:20,minWidth:100,paddingVertical:10,borderRadius:40,backgroundColor:PageTheme.$primary_color,alignItems:'center',elevation:2,shadowColor:'#000',shadowOffset:{width:0,height:2},shadowOpacity:0.3}, + addVisBtnText:{fontSize:14,color:PageTheme.$accent_color}, + addVis_list:{paddingTop:10,paddingHorizontal:10,width:'100%'}, + addVis_listhdrText:{color:PageTheme.$primary_color,}, + addVis_listInner:{marginTop:10,}, + addVis_listItem:{position:'relative',backgroundColor:PageTheme.$secondary_color_light,width:'100%',padding:10,borderRadius:5,marginBottom:20,elevation:2,shadowOffset:{width:0,height:2},shadowOpacity:0.15,shadowColor:'#000'}, + addVis_listI_row:{flexDirection:'row',paddingBottom:5,marginBottom:5,borderBottomColor:PageTheme.$accent_color,borderBottomWidth:2,}, + addVis_listI_lastrow:{borderBottomWidth:0,marginBottom:0}, + addVis_listI_Label:{fontSize:15,fontWeight:'500',color:PageTheme.$secondary_color_dark,marginRight:5,width:'50%',flexWrap:'wrap'}, + + addVis_listI_Label2:{fontSize:15,fontWeight:'500',color:PageTheme.$secondary_color_dark,marginRight:5}, + addVis_listI_Val:{fontSize:14,fontWeight:'400',color:PageTheme.$text_color,width:'50%',flexWrap:'wrap'}, + addVis_listI_Val2:{fontSize:14,fontWeight:'400',color:PageTheme.$text_color,width:'40%',flexWrap:'wrap'}, + addVis_listI_Image:{width:80,height:80,borderRadius:5,}, + addVis_listI_row2:{flexDirection:'row',width:'100%'}, + addVis_listIcol1:{width:'60%'}, + addVis_listIcol2:{width:'40%',paddingLeft:10,alignItems:'center'}, + addVis_btnRemove:{padding:8,alignItems:'center',justifyContent:'center',paddingHorizontal:10,borderRadius:40,position:'absolute',right:0,top:-30,backgroundColor:PageTheme.$accent_color,elevation:2,shadowOpacity:0.2,shadowOffset:{width:0,height:2}}, + addVis_listPcon:{width:'48%',marginTop:10,flexDirection:'row',backgroundColor:PageTheme.$bg_color,paddingVertical:3,paddingHorizontal:5,borderRadius:4,}, + addVis_listPcon1:{marginRight:5}, + addVis_listPcon2:{marginLeft:5}, + addVis_listR:{flexDirection:"row",marginTop:10,flexWrap:'wrap'}, + addVis_listRlbl:{fontSize:15,fontWeight:'500',color:PageTheme.$secondary_color_dark,marginRight:5,width:'60%',flexWrap:'wrap'}, + + contactConvWrap:{paddingHorizontal:10,paddingTop:10,width:'100%',height:'100%'}, + contactConvCard:{backgroundColor:PageTheme.$bg_color,elevation:2,shadowColor:'#000',shadowOpacity:0.15,borderRadius:5,shadowOffset:{width:0,height:2},padding:10}, + contactConvCardRow:{flexDirection:'row',flexWrap:'wrap'}, + contactConvCardCol:{width:'100%',marginBottom:10,}, + ccCard_FormGrp:{flexDirection:'row',alignItems:'center'}, + ccCard_lbl:{fontSize:15,fontWeight:'500',color:PageTheme.$secondary_color_dark,width:'45%',paddingRight:10,flexWrap:'wrap'}, + ccCard_input:{width:'55%',backgroundColor:PageTheme.$secondary_color_light,borderRadius:5,overflow:'hidden',textAlign:'left',fontSize:14,color:PageTheme.$text_color,paddingVertical:12,paddingHorizontal:12}, + + // survey list + surveyPageWrapper:{marginTop:10,paddingTop:10,backgroundColor:PageTheme.$secondary_color_light,borderTopLeftRadius:40,borderTopRightRadius:40,}, + surveyList:{width:'100%',}, + surveyListInner:{justifyContent:'center',padding:10,paddingHorizontal:15,width:'100%'}, + surveyItem:{elevation:1,shadowOpacity:1,shadowOffset:{width:0,height:2},shadowColor:'#efefef',backgroundColor:'#0000',marginBottom:10,}, + surveyItem_tile:{flexDirection:'row',alignItems:'center',width:'100%',padding:10,borderRadius:10}, + surveyItem_name:{fontSize:16,fontWeight:'500',color:PageTheme.$text_color,}, + surveyItemCircle:{backgroundColor:'#fff',width:40,height:40,borderRadius:20,alignItems:'center',justifyContent:'center',marginRight:10,}, + surveyItemCircle_Text:{fontSize:16,fontWeight:'500',color:PageTheme.$primary_color,}, + surveyItem_Check:{position:'absolute',width:24,height:24,right:10,borderRadius:15,elevation:3,paddingLeft:0.2,shadowColor:'#000'}, + + // survey cat + surveyCatList:{width:'100%',marginTop:20}, + surveyCatItem:{elevation:1,shadowOpacity:1,shadowOffset:{width:0,height:2},shadowColor:'#000',backgroundColor:PageTheme.$bg_color,marginBottom:10,flexDirection:'row',alignItems:'center',borderRadius:5,paddingHorizontal:10,paddingVertical:5}, + surveyCatItem_name:{fontSize:14,fontWeight:'500',color:PageTheme.$text_color,paddingRight:10,width:wp('100%')-125}, + surveyCatItem_Circle:{backgroundColor:PageTheme.$secondary_color_light,width:40,height:40,borderRadius:20,alignItems:'center',justifyContent:'center',marginRight:10,}, + surveyCatItem_CircleText:{fontSize:16,fontWeight:'500',color:PageTheme.$primary_color,}, + surveyCatItem_Check:{position:'absolute',width:24,height:24,right:10,borderRadius:15,elevation:3,shadowColor:'#000'}, + + + // survey toggle view + SurveyView:{position:'absolute',padding:10,paddingTop:30,paddingBottom:20,top:20,left:0,right:0,width:'100%',height:hp('100%')-(STATUSBAR_HEIGHT+50),shadowOpacity:1,shadowColor:'#8d8d8d',shadowRadius:5,alignItems:'center',borderTopLeftRadius:40,borderTopRightRadius:40,}, + SurveyViewCloseBtn:{position:'absolute',top:-17,right:30,paddingHorizontal:6,paddingVertical:5,borderRadius:20,backgroundColor:PageTheme.$primary_color,shadowColor:'#8d8d8d',shadowOpacity:1,elevation:2,shadowOffset:{width:0,height:2}}, + SurveyViewContent:{width:'100%'}, + SurveyViewContentInner:{padding:10,height:hp('100%')-200}, + SV_activeSurvey:{position:'absolute',top:-17,left:30,shadowColor:'#8d8d8d',shadowOpacity:1,elevation:2,shadowOffset:{width:0,height:2},backgroundColor:'#0000',marginBottom:10,width:wp('100%')-115}, + SV_activeSurvey_tile:{padding:10,borderRadius:30,paddingHorizontal:20,backgroundColor:PageTheme.$primary_color}, + SV_activeSurvey_name:{fontSize:16,fontWeight:'500',color:PageTheme.$accent_color,}, + + // survey questions + surveyQtnScroll:{width:'100%'}, + surveyQtnScrollInner:{width:'100%',paddingBottom:10,paddingHorizontal:5,}, + surveyQtn_InputStyle:{backgroundColor:PageTheme.$secondary_color_light,borderRadius:5,overflow:'hidden',textAlign:'left',fontSize:14,color:PageTheme.$text_color,paddingVertical:12,paddingHorizontal:12,height:40}, + + surveyQtn_datePicker_text: { + textAlign:'left', + width:'100%', + backgroundColor:PageTheme.$secondary_color_light, + paddingVertical:10, + paddingHorizontal:10, + color:PageTheme.$accent_color2, + height:'100%', + justifyContent:'center', + alignItems:'center', + borderRadius:5 + }, + surveyQtn_datePicker:{position:'absolute',width:40,height:40,right:0,top:0,backgroundColor:PageTheme.$primary_color,alignItems:'center',justifyContent:'center',borderTopRightRadius:5,borderBottomRightRadius:5}, + surveyQtn_datePicker_con:{position:'relative',justifyContent:'center',height:40,}, + surveyQtnRatingIcon:{position:'absolute',width:40,height:40,right:0,top:0,backgroundColor:PageTheme.$primary_color,alignItems:'center',justifyContent:'center',borderTopRightRadius:5,borderBottomRightRadius:5}, + + // survey Screen View + SVn_ContentCon:{paddingHorizontal:10,}, + SVn_ContentOuter:{width:'100%',height:hp('100%')-180}, + SVn_ContentInner:{padding:10}, + SVn_activeSurvey:{zIndex:1,position:'absolute',top:-15,left:0,right:0,width:wp('100%'),alignItems:'center',marginBottom:10}, + SVn_activeSurvey_tile:{shadowColor:'#8d8d8d',shadowOpacity:1,elevation:2,shadowOffset:{width:0,height:2},backgroundColor:'#0000',borderRadius:30,paddingHorizontal:15,alignItems:'center',paddingVertical:7,width:wp('100%')-50}, + SVn_SubmitBtn:{position:'absolute',bottom:Platform.OS=='ios'?30:10,left:0,right:0,width:'100%',alignItems:'center'}, + SVn_PageWrapper:{marginTop:10,paddingTop:10,backgroundColor:PageTheme.$bg_color,borderTopLeftRadius:40,borderTopRightRadius:40,}, + SVn_QtnScroll:{width:'100%',paddingTop:20}, + SVn_QtnScrollInner:{width:'100%',paddingBottom:40,paddingHorizontal:5,}, + SVn_GroupView:{paddingTop:20,paddingBottom:30}, + SVn_GroupView_hdr:{paddingHorizontal:10,paddingVertical:5,alignItems:'center'}, + SVn_GroupView_hdrText:{fontSize:13,color:PageTheme.$accent_color}, + SVn_GroupViewList:{paddingTop:10,}, + + // Feedback + FeedbVn_GroupView:{paddingBottom:20}, + + // RatingModal + RatingModal:{position:'absolute',zIndex:99,backgroundColor:'#00000055',alignItems:'center',justifyContent:'center',top:0,left:0,right:0,bottom:0,width:'100%',height:'100%'}, + RatingModalCon:{zIndex:9999,backgroundColor:PageTheme.$bg_color,borderRadius:10,padding:10,width:'80%',elevation:3,shadowColor:'#000',shadowOffset:{width:0,height:2},shadowOpacity:0.3,}, + RatingModalHeding:{textAlign:'center',fontSize:14,color:PageTheme.$text_color,fontWeight:'500',marginBottom:20,marginTop:10,}, + RModal_list:{padding:10,}, + RModal_listInner:{}, + RModal_Btns:{flexDirection:'row',width:'100%',marginTop:20,marginBottom:20,justifyContent:'space-evenly'}, + RModal_BtnCancel:{minWidth:100,paddingHorizontal:15,paddingVertical:7,borderColor:PageTheme.$primary_color,borderWidth:1,borderRadius:30,}, + RModal_BtnTextCancel:{textAlign:'center',fontSize:14,color:PageTheme.$primary_color,fontWeight:'500'}, + RModal_Btnsave:{minWidth:100,paddingHorizontal:15,paddingVertical:7,backgroundColor:PageTheme.$primary_color,borderRadius:30,}, + RModal_BtnTextsave:{textAlign:'center',fontSize:14,color:PageTheme.$accent_color,fontWeight:'500'}, + RModal_listItem:{paddingHorizontal:10,paddingVertical:7,borderRadius:4,marginBottom:10,}, + RModal_listItemText:{textAlign:'center',fontSize:14,color:PageTheme.$text_color,fontWeight:'500'}, + + // Voice Rcorder + VRModalHeding:{textAlign:'center',fontSize:14,color:PageTheme.$text_color,fontWeight:'500',marginTop:10,}, + VRSubHeding:{textAlign:'center',fontSize:12,color:PageTheme.$red,fontWeight:'400',marginBottom:20,marginTop:10,}, + VRSubHeding2:{textAlign:'center',fontSize:12,color:PageTheme.$primary_color,fontWeight:'400',marginTop:10,}, + VRMicBgRipple1:{width:80,height:80,borderWidth:5,borderColor:'#f5acb4c2',borderRadius:40,position:'absolute',top:0,left:0}, + VRMicBgRipple2:{width:80,height:80,borderWidth:5,borderColor:'#fce6e9e3',borderRadius:70,position:'absolute',top:0,left:0}, + + + VoiceRecorder:{width:'100%',alignItems:'center'}, + VoiceRecorderMic:{padding:10,}, + VoiceRecorderMicBtn:{width:60,height:60,backgroundColor:PageTheme.$red,alignItems:'center',justifyContent:'center',borderRadius:40,elevation:3,shadowOpacity:0.2,shadowOffset:{width:0,height:2},shadowColor:'#bdbdbd'}, + VoiceRecorderStopBtn:{width:60,height:60,backgroundColor:PageTheme.$red,position:'absolute',top:10,left:10,alignItems:'center',justifyContent:'center',borderRadius:40,elevation:3,shadowOpacity:0.2,shadowOffset:{width:0,height:2},shadowColor:'#bdbdbd'}, + VoiceRecordedView:{marginTop:30,alignItems:'center',width:'100%'}, + VoiceRecorderTimer:{textAlign:'center',fontSize:13,color:PageTheme.$text_color,fontWeight:'400'}, + + VRPlayBack:{alignItems:'center',flexDirection:'row',marginTop:10,paddingTop:10,borderTopColor:PageTheme.$secondary_color_light,borderTopWidth:2,width:'100%',paddingHorizontal:10,}, + VRPlayBackBarView:{width:'70%',alignItems:'center',}, + VRPlayBackBar:{position:'relative',width:'100%'}, + VRPlayBackBarBg:{width:'100%',height:10,borderRadius:20,backgroundColor:'#efefef'}, + VRPlayBackBarFilled:{width:'10%',position:'absolute',top:0,left:0,height:10,borderRadius:20,backgroundColor:PageTheme.$primary_color}, + VRPlayBackTimer:{}, + VRPlayBackControls:{width:'30%',alignItems:'flex-end'}, + VRPB_Play:{width:40,height:40,backgroundColor:PageTheme.$primary_color,alignItems:'center',justifyContent:'center',borderRadius:40,elevation:3,shadowOpacity:0.2,shadowOffset:{width:0,height:2},shadowColor:'#bdbdbd'}, + VRPB_Pause:{width:40,height:40,backgroundColor:PageTheme.$primary_color,position:'absolute',top:0,right:0,alignItems:'center',justifyContent:'center',borderRadius:40,elevation:3,shadowOpacity:0.2,shadowOffset:{width:0,height:2},shadowColor:'#bdbdbd'}, + + SurveyL_SubmitBtn:{position:'absolute',bottom:Platform.OS=='ios'?30:10,left:10,right:0,width:'100%',paddingBottom:20,alignItems:'center'}, + + // Visitor Login + vl_scrollView:{width:wp('100%')}, + vl_scrollViewInner:{width:'100%',paddingHorizontal:10,}, + vlPageWrapper:{paddingTop:10,backgroundColor:PageTheme.$secondary_color_light}, + + vlUinfo_Card:{marginBottom:10,backgroundColor:PageTheme.$bg_color, borderRadius:10,padding:10,elevation:3,shadowColor:'#000',shadowOffset: { width: 0, height: 2 } , shadowOpacity:0.15}, + vlUinfo_CardRow:{flexDirection:'row',paddingHorizontal:5,paddingVertical:5}, + vlUinfo_CardBorder:{borderBottomColor:PageTheme.$secondary_color_light,borderBottomWidth:2}, + vlUinfo_lbl:{fontSize:14,color:PageTheme.$secondary_color_dark,marginRight:5}, + vlUinfo_text:{fontSize:14,color:PageTheme.$text_color,textTransform:'capitalize'}, + vlEmplForm:{marginTop:10,marginBottom:10,}, + vlEmplFormRow:{flexDirection:'row',alignItems:'center',}, + vlEmplForm_field:{width:'80%'}, + vlEmplForm_InputStyle:{marginRight:10,backgroundColor:PageTheme.$bg_color,borderRadius:7,elevation:3,shadowOffset:{width:0,height:2},shadowColor:'#afafaf',shadowOpacity:1.15,paddingVertical:10,paddingHorizontal:10,color:PageTheme.$text_color}, + vlEmplSearchBtn:{width:'20%',paddingVertical:10,paddingHorizontal:10,alignItems:'center',justifyContent:'center',backgroundColor:PageTheme.$primary_color,borderRadius:7,elevation:3,shadowOffset:{width:0,height:2},shadowColor:'#747474',shadowOpacity:1.15}, + vlEmplSearchBtnText:{fontSize:14,fontWeight:'500',color:'#fff'}, + + vlEmplList:{marginTop:10,}, + vlEmplLDtl:{marginBottom:10,backgroundColor:PageTheme.$primary_color, borderRadius:10,padding:10,elevation:3,shadowColor:'#747474',shadowOffset: { width: 0, height: 2 } , shadowOpacity:1.0}, + vlEmplLDtlRow:{flexDirection:'row',paddingHorizontal:5,paddingVertical:5}, + vlEmplLDtlRow_Lbl:{fontSize:14,color:PageTheme.$accent_color,marginRight:5,fontWeight:'700'}, + vlEmplLDtlRow_Text:{fontSize:14,color:PageTheme.$text_color_light2,marginRight:5,textTransform:'capitalize'}, + vlEmplLDtlRow_Border:{borderBottomColor:PageTheme.$secondary_color_light,borderBottomWidth:1}, + vlEmplLDtlAct:{paddingTop:10,flexDirection:'row',}, + vlED_Act_Cameras:{width:'80%'}, + vlED_Act_CameraCon:{marginRight:10,marginTop:5,}, + vlED_Act_openCam:{}, + vlED_Act_ImageView:{position:'relative',backgroundColor:PageTheme.$secondary_color_light,padding:5,borderRadius:10,width:60,height:60}, + vlED_Act_Image:{width:50,height:50,borderRadius:10,backgroundColor:'#232323'}, + vlED_Act_reCap:{position:'absolute',top:-10,right:-10,padding:8,backgroundColor:PageTheme.$bg_color,borderRadius:30,elevation:2,shadowColor:'#8d8d8d',shadowOffset: { width: 0, height: 2 } , shadowOpacity:0.5}, + vlED_Act_addEmplCon:{width:'20%',justifyContent:'flex-end'}, + vlED_Act_addEmpl:{height:40,paddingHorizontal:10,marginBottom:5,alignItems:'center',justifyContent:'center',backgroundColor:PageTheme.$accent_color,borderRadius:7,elevation:3,shadowOffset:{width:0,height:2},shadowColor:'#efefef',shadowOpacity:1}, + vlED_Act_addEmplText:{fontSize:14,color:PageTheme.$primary_color,textTransform:'capitalize',fontWeight:'600'}, + + + vl_visitorsList:{marginTop:10,borderTopColor:PageTheme.$accent_color,borderTopWidth:2,paddingTop:10,}, + vl_visitorsListText:{fontSize:14,color:PageTheme.$secondary_color_dark,marginRight:5,fontWeight:'500'}, + vl_TblHeader:{marginBottom:10,marginTop:10,backgroundColor:PageTheme.$primary_color, borderRadius:10,padding:5,elevation:3,shadowColor:'#747474',shadowOffset: { width: 0, height: 2 } , shadowOpacity:1.0,flexDirection:'row',alignItems:'center'}, + vl_TblHeaderBox:{alignItems:'center',backgroundColor:PageTheme.$secondary_color_light,paddingVertical:5,borderRadius:5,}, + vl_TblHeaderBox1:{width:wp('30%')-15,marginRight:5}, + vl_TblHeaderBox2:{width:wp('30%')-15,marginRight:5}, + vl_TblHeaderBox3:{width:'40%'}, + vl_TblHeaderTxt:{fontSize:13,color:PageTheme.$text_color,marginRight:5,textTransform:'capitalize',fontWeight:'700'}, + + vl_TblBody:{backgroundColor:PageTheme.$bg_color, borderRadius:10,padding:5,elevation:3,shadowColor:'#afafaf',shadowOffset: { width: 0, height: 2 } , shadowOpacity:1.0}, + vl_visitorsLItem:{flexDirection:'row',alignItems:'center',paddingVertical:10}, + vl_visitorsLItemB:{borderBottomColor:PageTheme.$secondary_color_light,borderBottomWidth:1}, + vl_visitorsLI_Box:{alignItems:'center',}, + vl_visitorsLI_Box1:{width:wp('30%')-15,marginRight:5,alignItems:'flex-start',paddingLeft:5,}, + vl_visitorsLI_Box2:{width:wp('30%')-15,marginRight:5}, + vl_visitorsLI_Box3:{width:'40%',flexDirection:'row',alignItems:'center',position:'relative'}, + vl_visitorsLI_Txt:{fontSize:13,color:PageTheme.$text_color,marginRight:5,textTransform:'capitalize',fontWeight:'400'}, + vl_CheckOutBtn:{backgroundColor:PageTheme.$primary_color,marginRight:5, borderRadius:10,padding:5,paddingHorizontal:10,elevation:3,shadowColor:'#afafaf',shadowOffset: { width: 0, height: 2 } , shadowOpacity:1.0}, + vl_CheckOutBtnText:{color:PageTheme.$accent_color,fontSize:14,fontWeight:'600'}, + vl_DeleteBtn:{position:'absolute',right:5,backgroundColor:PageTheme.$bg_color,borderRadius:20,width:35,height:35,alignItems:'center',justifyContent:'center',elevation:2,shadowColor:'#afafaf',shadowOffset: { width: 0, height: 2 } , shadowOpacity:1.0}, + + vl_checkoutModal:{alignItems:'center',}, + vl_checkoutModalTitle:{fontSize:14,fontWeight:'500',color:PageTheme.$primary_color,marginBottom:10,}, + vl_removeModalTitle:{fontSize:14,fontWeight:'500',color:PageTheme.$text_color,marginBottom:10,marginTop:10,}, + vl_removeModalSubTitle:{fontSize:14,fontWeight:'500',color:PageTheme.$primary_color,marginBottom:20,}, + vl_checkoutM_Con:{width:'100%'}, + vl_checkoutM_Camera:{alignItems:'center',}, + vl_checkoutM_CameraCon:{}, + vl_checkoutM_openCam:{}, + vl_checkoutM_ImageView:{position:'relative',backgroundColor:PageTheme.$secondary_color_light,padding:5,borderRadius:10,width:90,height:90}, + vl_checkoutM_Image:{width:80,height:80,borderRadius:10,backgroundColor:'#232323'}, + vl_checkoutM_recap:{position:'absolute',top:-10,right:-10,padding:8,backgroundColor:PageTheme.$primary_color,borderRadius:30,elevation:2,shadowColor:'#8d8d8d',shadowOffset: { width: 0, height: 2 } , shadowOpacity:0.5}, + vl_checkoutM_btng:{marginTop:20,}, + vlStatus:{flexDirection:'row',alignItems:'center',justifyContent:'center'}, + vlStatus2:{flexDirection:'row',alignItems:'center',justifyContent:'center'}, + + // REports + rp_scrollView:{width:wp('100%'),height:'100%'}, + rp_scrollViewInner:{width:'100%',paddingHorizontal:10,height:'100%'}, + reportCon:{}, + reportConHdr:{backgroundColor:PageTheme.$primary_color, borderRadius:7,paddingVertical:10,paddingHorizontal:10,elevation:3,shadowColor:'#747474',shadowOffset: { width: 0, height: 2 } , shadowOpacity:1.0,flexDirection:'row',justifyContent:'center',marginBottom:5,marginTop:5}, + reportConHdrText:{color:PageTheme.$accent_color,fontSize:14,fontWeight:'500',}, + report_TblHeader:{marginBottom:10,marginTop:10,backgroundColor:PageTheme.$primary_color, borderRadius:10,padding:5,elevation:3,shadowColor:'#747474',shadowOffset: { width: 0, height: 2 } , shadowOpacity:1.0,flexDirection:'row',alignItems:'center'}, + report_TblHeaderBox:{alignItems:'center',backgroundColor:PageTheme.$secondary_color_light,paddingVertical:5,borderRadius:5,}, + report_TblHeaderBox1:{width:wp('40%')-15,marginRight:5}, + report_TblHeaderBox2:{width:wp('30%')-15,marginRight:5}, + report_TblHeaderBox3:{width:'30%'}, + report_TblHeaderTxt:{fontSize:13,color:PageTheme.$text_color,marginRight:5,textTransform:'capitalize',fontWeight:'700'}, + + report_TblBody:{backgroundColor:PageTheme.$bg_color, borderRadius:10,padding:5,elevation:3,shadowColor:'#afafaf',shadowOffset: { width: 0, height: 2 } , shadowOpacity:1.0}, + reportItem:{flexDirection:'row',alignItems:'center',paddingVertical:10}, + reportItemB:{borderBottomColor:PageTheme.$secondary_color_light,borderBottomWidth:1}, + reportItemCol:{alignItems:'center',}, + reportItemCol1:{width:wp('40%')-15,marginRight:5,alignItems:'flex-start',paddingLeft:5,}, + reportItemCol2:{width:wp('30%')-15,marginRight:5}, + reportItemCol3:{width:'30%',alignItems:'center'}, + reportItemColText:{fontSize:13,color:PageTheme.$text_color,marginRight:5,textTransform:'capitalize',fontWeight:'400'}, + + settingsWrap:{padding:10,paddingHorizontal:10,}, + settingsBtn:{flexDirection:'row',alignItems:'center',position:'relative',backgroundColor:PageTheme.$secondary_color_light,paddingVertical:15,paddingHorizontal:10, borderRadius:2,elevation:1,shadowColor:'#afafaf',shadowOffset: { width: 0, height: 2 } , shadowOpacity:0.15,marginBottom:10,}, + settingsBtnText:{fontSize:15,fontWeight:'600',color:PageTheme.$text_color}, + settingsBtnIcon:{position:'absolute',right:10}, + + + // network status bar + netSBar:{position:'absolute',bottom:0,width:'100%',backgroundColor:'#000',alignItems:'center',justifyContent:'center',paddingHorizontal:10,paddingVertical:6}, + netSBarText:{fontSize:13,fontWeight:'500',color:'#fff'}, + netSBarGreen:{backgroundColor:'green'}, + netSBarGrey:{backgroundColor:'red'}, + netSBarGrey_Text:{color:'#fff'}, + netSBarGreen_Text:{color:'#fff'}, + + + // Window styles + Windows_Wrap:{}, + Win_scroll:{justifyContent:'center',padding:10,paddingBottom:10,}, + Win_scrollO:{marginBottom:80,}, + WItem_wrap:{width:'100%',marginBottom:20,}, + WItem_Hdr:{}, + WItem_Hdrbg:{width:'100%',paddingHorizontal:10,paddingVertical:7,backgroundColor:PageTheme.$primary_color,borderRadius:5,justifyContent:'center'}, + WItem_HdrText:{fontSize:14,fontWeight:'500',color:PageTheme.$accent_color}, + WItem_Hdrname2:{fontSize:14,color:PageTheme.$accent_color,fontWeight:'400',marginTop:4,}, + WForm:{marginTop:10,paddingHorizontal:10,position:'relative',marginTop:10,paddingVertical:10,backgroundColor:PageTheme.$secondary_color_light,borderRadius:5,elevation:1,shadowColor:'#484848',shadowOpacity:0.1,shadowOffset:{width:0,height:2}}, + WItem_RefImgBtn:{position:'absolute',right:10,width:40,height:40,borderRadius:20,alignItems:'center',justifyContent:'center'}, + WSCameraWrap:{justifyContent:'center'}, + WSCameraCon:{}, + WSCameraLabel:{fontSize:13,fontWeight:'400',color:'#000',textAlign:'center',marginTop:5}, + WQPicker_InputStyle:{backgroundColor:PageTheme.$bg_color,borderRadius:5,overflow:'hidden',textAlign:'center',fontSize:14,color:PageTheme.$text_color,paddingVertical:12,paddingHorizontal:12}, + WStkWrap:{backgroundColor:PageTheme.$bg_color,marginBottom:10,paddingHorizontal:10,paddingVertical:5,borderRadius:5,elevation:1,shadowColor:'#efefef',shadowOpacity:0.05,shadowOffset:{width:0,height:2}}, + WStkHdrText:{fontSize:13,fontWeight:'500',color:PageTheme.$text_color_dark,marginBottom:10,paddingBottom:5,borderBottomWidth:1,borderBottomColor:PageTheme.$secondary_color_light}, + WStkHdrText2:{fontSize:13,fontWeight:'500',color:PageTheme.$text_color_dark,paddingBottom:5,}, + WStkHdr_checkboxWrap:{flexDirection:'row',alignItems:'flex-start',justifyContent:'flex-start'}, + WStkHdr_checkbox:{alignSelf:'flex-start'}, + WStkHdr_checkboxCon:{position:'absolute',width:25,height:25,top:-5,left:-10,}, + WStkHdr_checkboxpName:{width:'85%',marginLeft:25}, + WStkHdr_PrdcontentWrap:{borderTopColor:PageTheme.$secondary_color_light,borderTopWidth:1,marginTop:5,paddingTop:5,}, + WStkCon:{}, + WStkInputStyle:{backgroundColor:PageTheme.$secondary_color_light,borderRadius:5,overflow:'hidden',textAlign:'center',fontSize:14,color:PageTheme.$text_color,paddingVertical:2,paddingHorizontal:12,height:35}, + windhdrTextCon:{position:'relative',backgroundColor:PageTheme.$fourth_color,paddingHorizontal:10,justifyContent:'center',alignItems:'center',paddingVertical:5,marginBottom:10,borderRadius:4,elevation:5,shadowOpacity:0.2,shadowOffset:{width:0,height:2},shadowColor:'#000'}, + windhdrText:{fontSize:13,fontWeight:'500',color:PageTheme.$text_color,}, + windhdr_checkAllBtnCon:{alignItems:'flex-start',marginBottom:10}, + windhdr_checkAllBtn:{flexDirection:'row',backgroundColor:PageTheme.$fourth_color,paddingRight:10,paddingVertical:3,alignItems:'center',justifyContent:'center',borderRadius:4,elevation:2,shadowOpacity:0.1,shadowOffset:{width:0,height:2},shadowColor:'#000'}, + windhdr_checkAllBtnText:{marginLeft:10,fontSize:13,fontWeight:'500',color:PageTheme.$text_color,}, + WQ_InputStyle:{backgroundColor:PageTheme.$bg_color,borderRadius:5,overflow:'hidden',textAlign:'left',fontSize:14,color:PageTheme.$text_color,paddingVertical:12,paddingHorizontal:12,height:40}, + WQ_datePicker_text: {textAlign:'left',width:'100%',backgroundColor:PageTheme.$bg_color,paddingVertical:10,paddingHorizontal:10,color:PageTheme.$accent_color2,height:'100%',justifyContent:'center',alignItems:'center',borderRadius:5 }, + // contact us + ContUs_Wrap:{padding:10,marginTop:10,}, + ContUs_Hdr:{backgroundColor:PageTheme.$secondary_color_dark,borderRadius:4,justifyContent:'center',alignItems:'center',paddingVertical:10,paddingHorizontal:12}, + ContUs_HdrText:{color:PageTheme.$accent_color,fontSize:14,fontWeight:'500'}, + ContUs_infoBox:{backgroundColor:PageTheme.$secondary_color_light,marginBottom:10,flexDirection:'row',alignItems:'center',borderRadius:5,paddingVertical:10,paddingHorizontal:10}, + ContUs_IB_desc:{marginLeft:10,flexWrap:'wrap',width:'85%',color:PageTheme.$text_color}, + + // Image Types + ImageTypesPageWrap:{paddingHorizontal:10,}, + ImageTypesLHd:{backgroundColor:PageTheme.$primary_color,marginBottom:10,alignItems:'center',borderRadius:5,paddingVertical:10,paddingHorizontal:10,elevation:0.5,shadowOpacity:0.1,shadowOffset:{width:0,height:2},shadowColor:'#000'}, + ImageTypesLHdText:{fontSize:14,fontWeight:'500',color:PageTheme.$accent_color,textAlign:'center'}, + ImageTypesLOuter:{marginTop:10,}, + ImageTypesL:{}, + ImageTypesLCon:{position:'relative',backgroundColor:PageTheme.$secondary_color_light,marginBottom:10,alignItems:'center',borderRadius:5,paddingVertical:10,paddingHorizontal:10,elevation:0.5,shadowOpacity:0.1,shadowOffset:{width:0,height:2},shadowColor:'#000'}, + ImageTypesLName:{fontSize:13,fontWeight:'500',color:PageTheme.$text_color,}, + ImageTypesLImageCountBox:{position:'absolute',top:7,right:10,backgroundColor:PageTheme.$primary_color,width:25,height:25,borderRadius:30,alignItems:'center',justifyContent:'center'}, + ImageTypesLImageCountText:{fontSize:13,fontWeight:'600',color:PageTheme.$accent_color,}, + + // Image Cap Screen + ImageCapCamWrap:{flexDirection:'row',flexWrap:'wrap',alignItems:'flex-start'}, + ImageCapViewWrap:{flexDirection:'row',flexWrap:'wrap',alignItems:'flex-start',marginTop:20,}, + ImageCapCamCon:{marginRight:10,}, + ImgCapWrap:{paddingHorizontal:10,}, + ImgCapCon:{}, + ImgCapBox:{}, + ImgCapBoxTDF:{}, + ImageCapImgViewOuter:{width:'33%'}, + ImageCapImgView:{position:'relative',width:90,backgroundColor:PageTheme.$secondary_color_light,padding:5,borderRadius:10,marginRight:20,marginBottom:20,}, + ImageCapImgView1:{alignItems:'flex-start'}, + ImageCapImgView2:{alignItems:'center'}, + ImageCapImgView3:{alignItems:'flex-end'}, + ImageCapImg:{width:80,height:80,borderRadius:10,backgroundColor:'#232323'}, + ImageCapImgRemove:{position:'absolute',top:-10,right:-10,padding:6,backgroundColor:PageTheme.$red,borderRadius:30,elevation:1,shadowColor:'#000',shadowOpacity:0.2,shadowOffset:{width:0,height:2}}, + + }); +} + +export const customeButtons=(isDarkTheme=defdt,routeName=defrn)=>{ + const PageTheme=GetPageTheme(isDarkTheme,routeName); + return StyleSheet.create({ + buttonStyle: { + backgroundColor: PageTheme.$primary_color, + elevation:5,shadowColor:PageTheme.$primary_color,shadowOffset:{width:0,height:5},shadowRadius:7,shadowOpacity:0.4, + borderRadius: 40,width: wp('85%'),height: 50,display: 'flex',marginTop: 25,alignItems: 'center',justifyContent: 'center' + }, + textStyle: {color: PageTheme.$text_color_100,textAlign: 'center',fontSize: 15,padding: 10,}, + g_buttonStyle:{ + marginTop: 25,height: 50,shadowColor:PageTheme.$primary_color,shadowRadius:7,shadowOffset:{width:0,height:5},shadowOpacity:0.4,borderRadius: 40,backgroundColor:'#0000' + }, + g_linearGradient:{ + backgroundColor: PageTheme.$primary_color, + elevation:5,shadowColor:PageTheme.$primary_color, + borderRadius: 40,width: wp('85%'),display: 'flex',height:'100%',alignItems: 'center',justifyContent: 'center' + }, + g_textStyle: {color: PageTheme.$text_color_100,textAlign: 'center',fontSize: 15,padding: 10,}, + + + }); +} + +export const customCamera_LS=(isDarkTheme=defdt,routeName=defrn)=>{ + const PageTheme=GetPageTheme(isDarkTheme,routeName); + const bottomBarHeight=100; + const topBarHeight=Platform.OS=='ios'?STATUSBAR_HEIGHT+40:40; + return StyleSheet.create({ + IOS_StatusBar:{height:wp('100%'),width:STATUSBAR_HEIGHT,backgroundColor:'#000',zIndex:100000,position:'absolute',left:0,top:0,bottom:0}, + scrollMain:{flex: 1,backgroundColor: 'black',width:'100%',height:'100%',position:'absolute',zIndex:99999,top:0,left:0,right:0}, + // scrollMainInner:{alignItems:'center',height:'100%'}, + btnStyle:{ backgroundColor:'#0096d7',paddingVertical:10,paddingHorizontal:30,borderRadius:20,marginTop:50,elevation:5,shadowColor:'#232323',shadowOffset:{width:0,height:2}}, + btnText:{color:'#fff'}, + imgView:{flex:1,height:300,width:'100%',marginTop:100,paddingHorizontal:20}, + image:{width:'100%',height:300,backgroundColor:'#efefef'}, + customCamera_Wrap:{position:'absolute',top:0,left:0,right:0,bottom:0,zIndex:9999}, + customCamera:{position:'absolute',top:0,left:topBarHeight,right:bottomBarHeight,bottom:0}, + customCameraTop:{top:Platform.OS=='ios'?STATUSBAR_HEIGHT:0,}, + customCamera_bottomBar:{padding:10,backgroundColor:'#000',height:bottomBarHeight,position:'absolute',bottom:0,width:'100%',alignItems:'center',justifyContent:'center'}, + customCamera_capbtn:{elevation:4,shadowColor:'#efefef',width:60,height:60,borderRadius:30,}, + customCamera_capbtn_Outer:{width:60,height:60,borderRadius:30,backgroundColor:'#e4e4e4',paddingLeft:5,paddingTop:5}, + customCamera_capbtn_Inner:{width:50,height:50,borderRadius:30,backgroundColor:'#fff'}, + + customCamera_bottomBar2:{padding:10,backgroundColor:'#000',height:bottomBarHeight,position:'absolute',bottom:0,width:'100%',justifyContent:'center'}, + imgControls_btnCon:{minWidth:100,paddingHorizontal:10,paddingVertical:10}, + imgControls_btn:{alignItems:'center'}, + imgControls_btnText:{fontSize:14,fontWeight:'400',color:'#fff',textAlign:'center'}, + imgControls:{flexDirection:'row',alignItems:'center',justifyContent:'space-between'}, + cameraImgCaptured:{position:'absolute',top:0,left:0,right:0,bottom:bottomBarHeight}, + icbtTop:{marginTop:2,}, + imgControls_centerBtn:{marginTop:-15,minWidth:100,paddingHorizontal:10,paddingVertical:10}, + // flashBtn:{width:35,height:35,borderRadius:30,backgroundColor:'#fff',alignItems:'center',justifyContent:'center',elevation:4,shadowColor:'#fff',shadowOpacity:0.3,shadowOffset:{width:0,height:2}}, + flashBtn:{paddingVertical:10,paddingHorizontal:5,}, + topControls:{position:'absolute',top:0,left:0,bottom:0,backgroundColor:'#000',width:topBarHeight,height:'100%'}, + topControlsInner:{paddingVertical:10,paddingHorizontal:5,alignItems:'center'}, + }); +} + +export const ModalStyles =(isDarkTheme=defdt,routeName=defrn)=>{ + const PageTheme=GetPageTheme(isDarkTheme,routeName); + return StyleSheet.create({ + centeredView: { + backgroundColor: 'rgba(0,0,0,0.5)', + flex: 1, + justifyContent: "center", + alignItems: "center", + }, + modalView: { + margin: 20, + backgroundColor: "white", + borderRadius: 10, + padding: 35, + alignItems: "center", + shadowColor: "#000", + shadowOffset: { + width: 0, + height: 2 + }, + shadowOpacity: 0.25, + shadowRadius: 4, + elevation: 5 + }, + button: { + paddingLeft: 40, + paddingRight: 40, + elevation: 2 + }, + buttonOpen: { + backgroundColor: "#F194FF", + }, + buttonClose: { + backgroundColor: "#2196F3", + }, + textStyle: { + color: "white", + fontWeight: "bold", + textAlign: "center" + }, + modalText: { + marginBottom: 15, + textAlign: "center", + color: "#000", + } + }); +} + diff --git a/PerformicsSrc/src/styles/Themes.js b/PerformicsSrc/src/styles/Themes.js new file mode 100644 index 0000000..5b8a278 --- /dev/null +++ b/PerformicsSrc/src/styles/Themes.js @@ -0,0 +1,110 @@ +export const PrimaryTheme = { + primary_theme:true, + $primary_color:'#1f7dbc', + $secondary_color_light:'#eaf3fa', + $secondary_color_dark:'#68a0f3', + $gradient1:'#63ccf9', + $gradient2:'#00a4eb', + $tertiary_color:'#999999', + $fourth_color:'#b5dbf9', + $fifth_color:'#b5dbf9', + $bg_color:'#fff', + $accent_color:'#fff', + $accent_color2:'#131313', + $status_bar_color:'#eaf3fa', + $placeholder_color:'#232323', + $icon_color:'#6B84F6', + $text_color:'#454545', + $text_color_light2:'#efefef', + $text_color_light3:'#ADD8E6', + $text_color_light:'#9e9e9e', + $text_color_dark:'#161616', + $text_color_900:'#000000', + $text_color_500:'#999999', + $text_color_300:'#666666', + $text_color_700:'#333333', + $text_color_100:'#ffffff', + $red:'#e3051f', + $red_light100:'#faeaea', + $orange:'#f1a015', + $sidemenuColor:'#92a3fd', + $card_colorYellowLight:'#e4d9be', + $card_colorYellowDark:'#e1cc97', + $star_color:'#FFDF00', + $text_colorblack:'#000', + $card_colorRedDark:'#f83e3e', + $green:'#00ab1b', +} + +export const MainThemeLight = { + project_theme:true, + $primary_color:'#1f7dbc', + $secondary_color_light:'#eaf3fa', + $secondary_color_dark:'#68a0f3', + $gradient1:'#63ccf9', + $gradient2:'#00a4eb', + $tertiary_color:'#999999', + $fourth_color:'#b5dbf9', + $fifth_color:'#b5dbf9', + $bg_color:'#fff', + $accent_color:'#fff', + $accent_color2:'#131313', + $status_bar_color:'#eaf3fa', + $placeholder_color:'#232323', + $icon_color:'#6B84F6', + $text_color:'#454545', + $text_color_light:'#9e9e9e', + $text_color_light2:'#efefef', + $text_color_light3:'#ADD8E6', + $text_color_dark:'#161616', + $text_color_900:'#000000', + $text_color_500:'#999999', + $text_color_300:'#666666', + $text_color_700:'#333333', + $text_color_100:'#ffffff', + $red:'#e3051f', + $red_light100:'#faeaea', + $orange:'#f1a015', + $sidemenuColor:'#92a3fd', + $card_colorYellowLight:'#e4d9be', + $card_colorYellowDark:'#e1cc97', + $text_colorblack:'#000', + $card_colorRedDark:'#f83e3e', + $green:'#00ab1b', +} + +export const DarkTheme = { + dark_theme:true, + $primary_color:'#6B84F6', + $secondary_color_light:'#999999', + $secondary_color_dark:'#999999', + $gradient2:'#05b4ff', + $tertiary_color:'#999999', + $fourth_color:'#b5dbf9', + $fifth_color:'#b5dbf9', + $bg_color:'#fff', + $accent_color:'#fff', + $accent_color2:'#131313', + $text_color_light3:'#ADD8E6', + $status_bar_color:'#6B84F6', + $placeholder_color:'#9e9e9e', + $icon_color:'#6B84F6', + $text_color:'#6B84F6', + $text_color_light:'#6B84F6', + $text_color_light2:'#efefef', + $text_color_dark:'#6B84F6', + $text_color_900:'#000000', + $text_color_500:'#999999', + $text_color_300:'#666666', + $text_color_700:'#333333', + $text_color_100:'#ffffff', + $red:'#e3051f', + $red_light100:'#faeaea', + $orange:'#f1a015', + $sidemenuColor:'#92a3fd', + $card_colorYellowLight:'#e4d9be', + $card_colorYellowDark:'#e1cc97', + $text_colorblack:'#000', + $card_colorRedDark:'#f83e3e', + $green:'#00ab1b', +} \ No newline at end of file diff --git a/PerformicsSrc/src/styles/TrainingMenu.style.js b/PerformicsSrc/src/styles/TrainingMenu.style.js new file mode 100644 index 0000000..12a31c3 --- /dev/null +++ b/PerformicsSrc/src/styles/TrainingMenu.style.js @@ -0,0 +1,28 @@ +import {Dimensions, StyleSheet} from 'react-native'; + +export default StyleSheet.create({ + tabContainer: { + flexDirection: 'row', + borderBottomWidth: 1, + borderBottomColor: '#ccc', + }, + tab: { + flex: 1, + alignItems: 'center', + justifyContent: 'center', + padding: 10, + }, + activeTab: { + borderBottomWidth: 2, + borderBottomColor: '#3498db', + }, + tabText: { + fontSize: 16, + fontWeight: 'bold', + color: '#333', + }, + contentContainer: { + width: Dimensions.get('window').width, + padding: 8, + }, +}); diff --git a/PerformicsSrc/src/utils/ReplaceAndRemoveTrailingSlash.js b/PerformicsSrc/src/utils/ReplaceAndRemoveTrailingSlash.js new file mode 100644 index 0000000..a91a0db --- /dev/null +++ b/PerformicsSrc/src/utils/ReplaceAndRemoveTrailingSlash.js @@ -0,0 +1,13 @@ +export default function replaceAndRemoveTrailingSlash(url) { + const cleanedUrl = url.replace(/\/+/g, '/'); // Replace consecutive slashes with a single slash + const withoutTrailingSlash = cleanedUrl.replace(/\/+$/, ''); // Remove trailing slashes + + const hasQuery = withoutTrailingSlash.includes('?'); + if (hasQuery) { + const parts = withoutTrailingSlash.split('?'); + return replaceAndRemoveTrailingSlash(parts[0]) + '?' + parts[1]; + } + + return withoutTrailingSlash; + } + \ No newline at end of file diff --git a/PerformicsSrc/src/utils/cpmChatAPI.js b/PerformicsSrc/src/utils/cpmChatAPI.js new file mode 100644 index 0000000..162a4e2 --- /dev/null +++ b/PerformicsSrc/src/utils/cpmChatAPI.js @@ -0,0 +1,90 @@ +import axios from "axios"; +import crypto from "react-native-quick-crypto"; + +class CPMChatAPI { + constructor(baseUrl, clientId, clientSecret) { + this.baseUrl = baseUrl; + this.clientId = clientId; + this.clientSecret = clientSecret; + } + + generateSignature(timestamp, requestBody) { + const data = this.clientId + timestamp + requestBody; + + // Using react-native-quick-crypto's createHmac + const hmac = crypto.createHmac('sha256', this.clientSecret); + hmac.update(data); + return hmac.digest('hex'); + } + + async getHeaders(requestBody) { + const timestamp = Date.now().toString(); + const signature = this.generateSignature(timestamp, requestBody); + + return { + "Content-Type": "application/json", + "X-Client-Id": this.clientId, + "X-Timestamp": timestamp, + "X-Signature": signature, + }; + } + + +async initChat(userId, userName) { + const requestBody = JSON.stringify({ userId, userName }); + const headers = await this.getHeaders(requestBody); + + try { + const response = await axios.post( + `${this.baseUrl}/chat/init`, + { userId, userName }, + { headers } + ); + return response.data; + } catch (error) { + throw new Error( + `Init chat failed: ${error.response?.data?.message || error.message}` + ); + } + } + + +async sendMessage(userId, sessionId, query) { + const requestBody = JSON.stringify({ userId, sessionId, query }); + const headers = await this.getHeaders(requestBody); + + try { + const response = await axios.post( + `${this.baseUrl}/chat/messages`, + { userId, sessionId, query }, + { headers } + ); + return response.data; + } catch (error) { + throw new Error( + `Send message failed: ${error.response?.data?.message || error.message}` + ); + } + } + + +async endSession(userId, sessionId) { + const requestBody = JSON.stringify({ userId, sessionId }); + const headers = await this.getHeaders(requestBody); + + try { + const response = await axios.post( + `${this.baseUrl}/chat/end-session`, + { userId, sessionId }, + { headers } + ); + return response.data; + } catch (error) { + throw new Error( + `End session failed: ${error.response?.data?.message || error.message}` + ); + } + } +} + +export default CPMChatAPI; \ No newline at end of file diff --git a/PerformicsSrc/src/utils/navigations/Navigator.js b/PerformicsSrc/src/utils/navigations/Navigator.js new file mode 100644 index 0000000..7827ee9 --- /dev/null +++ b/PerformicsSrc/src/utils/navigations/Navigator.js @@ -0,0 +1,50 @@ +import React, { useState, useEffect } from 'react'; +import { StatusBar } from 'react-native'; +import { NavigationContainer } from '@react-navigation/native'; +import { GetPageTheme } from "../../styles/Global"; +import { AuthStack } from './Routes'; +import { connect } from 'react-redux'; +import { mapStateToProps, mapDispatchToProps } from '../../reducers/contextProvider'; +import { LogBox } from 'react-native'; +import NetInfo from "@react-native-community/netinfo"; + +LogBox.ignoreLogs(['new NativeEventEmitter']); // Ignore log notification by message +LogBox.ignoreAllLogs(); //Ignore all log notifications +LogBox.ignoreLogs([ + "[react-native-gesture-handler] Seems like you\'re using an old API with gesture components, check out new Gestures system!", +]); +const Navigator = (props) => { + const PageTheme = GetPageTheme(false, ''); + const { DarkMode } = props; + const [state, setState] = useState({}); + + useEffect(() => { + const unsubscribe = NetInfo.addEventListener(state => { + var isAlreadyConnected = props.isInternetAvailable == true + if (isAlreadyConnected == false || (isAlreadyConnected != state.isConnected)) { + props.show_ConnChange({ showConnChange: true }) + } + props.set_networkStatus({ isInternetAvailable: state.isConnected }); + + }); + + return () => { + unsubscribe(); + } + }, []); + + + + return ( + + + + + ) + + +}; + + + +export default connect(mapStateToProps, mapDispatchToProps)(Navigator) \ No newline at end of file diff --git a/PerformicsSrc/src/utils/navigations/ReplaceAndRemoveTrailingSlash.js b/PerformicsSrc/src/utils/navigations/ReplaceAndRemoveTrailingSlash.js new file mode 100644 index 0000000..a91a0db --- /dev/null +++ b/PerformicsSrc/src/utils/navigations/ReplaceAndRemoveTrailingSlash.js @@ -0,0 +1,13 @@ +export default function replaceAndRemoveTrailingSlash(url) { + const cleanedUrl = url.replace(/\/+/g, '/'); // Replace consecutive slashes with a single slash + const withoutTrailingSlash = cleanedUrl.replace(/\/+$/, ''); // Remove trailing slashes + + const hasQuery = withoutTrailingSlash.includes('?'); + if (hasQuery) { + const parts = withoutTrailingSlash.split('?'); + return replaceAndRemoveTrailingSlash(parts[0]) + '?' + parts[1]; + } + + return withoutTrailingSlash; + } + \ No newline at end of file diff --git a/PerformicsSrc/src/utils/navigations/Routes.js b/PerformicsSrc/src/utils/navigations/Routes.js new file mode 100644 index 0000000..e837efb --- /dev/null +++ b/PerformicsSrc/src/utils/navigations/Routes.js @@ -0,0 +1,385 @@ +import { createStackNavigator } from '@react-navigation/stack'; +import { createDrawerNavigator } from '@react-navigation/drawer'; +import { useRoute } from '@react-navigation/native'; +import Project from '../../screens/Project'; +import Login from '../../screens/Login'; +import Mpin from '../../screens/Mpin'; +import MpinLogin from '../../screens/MpinLogin'; +import One_QAD from '../../screens/One_QAD'; +import { PrimaryTheme } from '../../styles/Themes'; +// import Icon from 'react-native-vector-icons/Ionicons'; +import DownloadDataScreen from '../../screens/DownloadDataScreen'; +import ReportsMenu from '../../screens/ReportsMenu'; +// import VideoPlayerScreen from '../../screens/VideoPlayer'; +import UploadDataScreen from '../../screens/UploadData'; +import Splash from '../../screens/SplashScreen'; +import VisitorLogin from '../../screens/VisitorLogin'; +import PersonalDocument from '../../screens/PersonalDocument'; +import Training from '../../screens/Training'; +import StoreList from '../../screens/StoreList'; +import StoreDailyMenu from '../../screens/StoreDailyMenu'; +import StoreCheckin from '../../screens/CheckInStore'; +import GeoTag from '../../screens/GeoTag'; +import ShowMap from '../../screens/ShowMap'; +import StoreNonWorkingReasons from '../../screens/StoreNonWorkingReasons'; +import Settings from '../../screens/Settings'; +import OpeningStock from '../../screens/OpeningStock'; +import BackroomStock from '../../screens/BackroomStock'; +import MiddayStock from '../../screens/MiddayStock'; +import ClosingStock from '../../screens/ClosingStock'; +import ShareOfShelf from '../../screens/ShareOfShelf'; +import PaidVisibility from '../../screens/PaidVisibility'; +import AdditionalVisibility from '../../screens/AdditionalVisibility'; +import CompetitionVisibility from '../../screens/CompetitionVisibility'; +import Promotion from '../../screens/Promotion'; +import CompetitionPromotion from '../../screens/CompetitionPromotion'; +import ContactConversion from '../../screens/ContactConversion'; +import Sale from '../../screens/Sale'; +import SurveyList from '../../screens/SurveyList'; +import POSSale from '../../screens/POSSale'; +import DBVisiCooler from '../../screens/DBVisiCooler'; +// import StockQR from '../../screens/StockQR'; +// import StockQRCode from '../../screens/StockQRCode'; +import { DrawerContent } from './drawerContent'; +import { globalStyles, customStyles, GetPageTheme } from "../../styles/Global"; +import { Text, ImageBackground } from 'react-native'; +import LinearGradient from 'react-native-linear-gradient'; +import * as React from 'react'; +import { FontAwesome } from '../../components/icons'; +import { TouchableOpacity } from 'react-native'; +import ChangePassword from '../../screens/ChangePassword'; +import StockPromo from '../../screens/StockPromo'; +import WareHouseCampaignWise from '../../screens/WareHouseCampaignWise'; +import WareHousePaidVi from '../../screens/WareHousePaidVi'; +import Warehouseinward from '../../screens/Warehouseinward'; +import WarehouseinwardDetail from '../../screens/WarehouseinwardDetail'; +// NotificationList +import NotificationList from '../../screens/NotificationList'; +import NotificationListDetail from '../../screens/NotificationListDetail'; +//arman +import StockUniqueQRCode from '../../screens/StockUniqueQRCode'; +import SaleQRCode from '../../screens/SaleQRCode'; +import StoreProfileKyc from '../../screens/StoreProfileKyc'; +import KycStoreList from '../../screens/KycStoreList'; +import KycForm from '../../screens/KycForm'; +import StoreKycForm from '../../screens/StoreKycForm'; +////gyancast and gyan buddy +import Gyancasts from "../../screens/gyancast/Gyancasts"; +import PodcastDetails from '../../screens/gyancast/PodcastDetails'; +import QuestionnaireScreen from '../../screens/gyancast/QuestionnaireScreen'; +import ChatScreen from '../../screens/chat/ChatScreen'; +import OfflineOrder from '../../screens/OfflineOrder'; +import StoreListMappView from '../../screens/StoreListMappView'; +import ReturnStock from '../../screens/ReturnStock'; +import OrderSimplify from '../../screens/OrderSimplify'; +import PrevOrders from '../../screens/PrevOrders'; +import TrainingMenu from '../../screens/TrainingMenu'; +import NavigationRouteScreen from '../../screens/maps_navigation/NavigationRouteScreen'; +import NavigationScreen from '../../screens/maps_navigation/NavigationScreen'; +import GroomingPictures from '../../screens/GroomingPictures'; +import { logout } from '../../components/logout'; + +const NoticeBoard = React.lazy(() => import('../../screens/NoticeBoard')); + + + + +const DynamicStoreList = React.lazy(() => import('../../screens/DynamicStoreList')); +const DynamicSurveys = React.lazy(() => import('../../screens/DynamicSurveys')); +const DynamicSurveyCat = React.lazy(() => import('../../screens/DynamicSurveyCat')); +const SurveyView = React.lazy(() => import('../../screens/SurveyView')); +const SurveyCat = React.lazy(() => import('../../screens/SurveyCat')); +const QuestionsScreen = React.lazy(() => import('../../screens/QuestionsScreen')); +const Window = React.lazy(() => import('../../screens/Window')); +const Stock = React.lazy(() => import('../../screens/Stock')); +const ContactUs = React.lazy(() => import('../../screens/ContactUs')); +const POSM = React.lazy(() => import('../../screens/POSM')); +const Feedback = React.lazy(() => import('../../screens/Feedback')); +const SimplePromotion = React.lazy(() => import('../../screens/SimplePromotion')); +const StoreImages = React.lazy(() => import('../../screens/StoreImages')); +const StoreImagesCap = React.lazy(() => import('../../screens/StoreImagesCap')); +const CameraScreen = React.lazy(() => import('../../screens/CameraScreen')); +const ShelfTalker = React.lazy(() => import('../../screens/ShelfTalker')); +const StockCat = React.lazy(() => import('../../screens/StockCat')); +const StockWithCat = React.lazy(() => import('../../screens/StockWithCat')); +const StoreDailyMenuCat = React.lazy(() => import('../../screens/StoreDailyMenuCat')); +const PromotionOneApp = React.lazy(() => import('../../screens/PromotionOneApp')); +const PaidVisibilityOneApp = React.lazy(() => import('../../screens/PaidVisibilityOneApp')); +const ShareOfShelfOneApp = React.lazy(() => import('../../screens/ShareOfShelfOneApp')); +const CategoryExec = React.lazy(() => import('../../screens/CategoryExec')); +const GetDb = React.lazy(() => import('../../screens/GetDb')); +const WarehousePOSM = React.lazy(() => import('../../screens/WarehousePOSM')); +const Warehouse = React.lazy(() => import('../../screens/Warehouse')); +const StoreScore = React.lazy(() => import('../../screens/StoreScore')); +const Order = React.lazy(() => import('../../screens/Order')); +const VideoScreen = React.lazy(() => import('../../screens/VideoScreen')); +const StoreChecklist = React.lazy(() => import('../../screens/StoreChecklist')); +const BeatPlan = React.lazy(() => import('../../screens/BeatPlan')); +const ReportDetail = React.lazy(() => import('../../screens/ReportDetail')); +const DistributorList = React.lazy(() => import('../../screens/DistributorList')); +const DistributorCheckin = React.lazy(() => import('../../screens/CheckInDistributor')); +const AddStoreScreen = React.lazy(() => import('../../screens/AddStoreScreen')); +const StoreProfile = React.lazy(() => import('../../screens/StoreProfile')); +const DB_StoreDailyMenu = React.lazy(() => import('../../screens/DB_StoreDailyMenu')); +const DB_POSM = React.lazy(() => import('../../screens/DB_POSM')); +const DB_Window = React.lazy(() => import('../../screens/DB_Window')); +const DBNonWorkingReasons = React.lazy(() => import('../../screens/DBNonWorkingReasons')); +const OrderStatus = React.lazy(() => import('../../screens/OrderStatus')); +const OrderDetail = React.lazy(() => import('../../screens/OrderDetail')); +const VisitorFeedback = React.lazy(() => import('../../screens/VisitorFeedback')); +const VisitorFeedbackQA = React.lazy(() => import('../../screens/VisitorFeedbackQA')); +const WebViewScreen = React.lazy(() => import('../../screens/WebViewScreen')); +const SamplingList = React.lazy(() => import('../../screens/SamplingList')); +const SamplingView = React.lazy(() => import('../../screens/SamplingView')); +const SamplingInventory = React.lazy(() => import('../../screens/SamplingInventory')); +const Sampling_Stock = React.lazy(() => import('../../screens/Sampling_Stock')); +const SamplingCustTrack = React.lazy(() => import('../../screens/SamplingCustTrack')); +const KPICategories = React.lazy(() => import('../../screens/KPICategories')); +const Bannerdetail = React.lazy(() => import('../../screens/Bannerdetail')); +const WindowIR = React.lazy(() => import('../../screens/WindowIR')); +const ShareOfShelfOneAppIR = React.lazy(() => import('../../screens/ShareOfShelfOneAppIR')); +const PaidVisibilityOneAppIR = React.lazy(() => import('../../screens/PaidVisibilityOneAppIR')); +const AdditionalVisibilityIR = React.lazy(() => import('../../screens/AdditionalVisibilityIR')); +const CompetitionVisibilityIR = React.lazy(() => import('../../screens/CompetitionVisibilityIR')); +const IRPendingDetails = React.lazy(() => import('../../screens/IRPendingDetails')); +const ProgramList = React.lazy(() => import('../../screens/ProgramList')); +const ProgramQuestions = React.lazy(() => import('../../screens/ProgramQuestions')); +const QRScanner = React.lazy(() => import('../../components/QRScanner')); +const ProgramChecklist = React.lazy(() => import('../../screens/ProgramChecklist')); +const ContractFormStores = React.lazy(() => import('../../screens/ContractFormStores')); +const TGBaseVisiCooler = React.lazy(() => import('../../screens/TGBaseVisiCooler')); +const ContractPrograms = React.lazy(() => import('../../screens/ContractPrograms')); +const ContractForm = React.lazy(() => import('../../screens/ContractForm')); +const DynamicStoreScore = React.lazy(() => import('../../screens/DynamicStoreScore')); +const MissedCallList = React.lazy(() => import('../../screens/MissedCallList')); +const MissedCallView = React.lazy(() => import('../../screens/MissedCallView')); +const SOSEyeLevel = React.lazy(() => import('../../screens/SOSEyeLevel')); +const BreakTime = React.lazy(() => import('../../screens/BreakTime')); +const ReportChart = React.lazy(() => import('../../screens/ReportChart')); +const AdditionalVisibilityIR_Only = React.lazy(() => import('../../screens/AdditionalVisibilityIR_Only')); +const ShareOfShelfOneAppIR_Only = React.lazy(() => import('../../screens/ShareOfShelfOneAppIR_Only')); +const PaidVisibilityOneAppIR_Only = React.lazy(() => import('../../screens/PaidVisibilityOneAppIR_Only')); +const VisitorLoginQA = React.lazy(() => import('../../screens/VisitorLoginQA')); +const DashboardReportDetail = React.lazy(() => import('../../screens/DashboardReportDetail')); +// const TrainingMenu = React.lazy(() => import('../../screens/TrainingMenu')); +const StoreReport = React.lazy(() => import('../../screens/StoreReport')); +const AddStoreInfo = React.lazy(() => import('../../screens/AddStoreInfo')); +const StoreInfoList = React.lazy(() => import('../../screens/StoreInfoList')); +const PromotionOneAppIR = React.lazy(() => import('../../screens/PromotionOneAppIR')); +const HomeLocation = React.lazy(() => import('../../screens/HomeLocation')); +const PrevStoreReason = React.lazy(() => import('../../screens/PrevStoreReason')); +// const ChangePassword = React.lazy(() => import('../../screens/ChangePassword')); +const ForgotPassword = React.lazy(() => import('../../screens/ForgotpasswordScreen/Forgotpassword')); +const VerifyOTP = React.lazy(() => import('../../screens/ForgotpasswordScreen/VerifyOTP')); +const CreatePassword = React.lazy(() => import('../../screens/ForgotpasswordScreen/Createpassword')); +const AddStore = React.lazy(() => import('../../screens/AddStore')); +const AddedStoreList = React.lazy(() => import('../../screens/AddedStoreList')); +const MiscMenuList = React.lazy(() => import('../../screens/MiscMenuList')); +const BannerMoreInfo = React.lazy(() => import('../../screens/BannerMoreInfo')); + +const Stack = createStackNavigator(); +const Drawer = createDrawerNavigator(); + +function DrawerRoutes(props) { + const route = useRoute(); + + // ✅ Add safety checks + const PageTheme = GetPageTheme(props.DarkMode, route.name) || {}; + const customStyle = customStyles(props.DarkMode, route.name) || {}; + const globalStyle = globalStyles(props.DarkMode, route.name) || {}; + + let params = props.route.params ? props.route.params : {}; + let UserData = params.UserData || {}; + let username = UserData.UserId || ''; + let set_startDownload = params.set_startDownload || function () { }; + let useremail = ''; + let pageprops = props.pageprops; + + return ( + } + screenOptions={{ + headerTintColor: PrimaryTheme.$primary_color, + drawerType: 'front', + }}> + + + ) +} + + +export const AuthStack = (props) => { + let props1 = props; + return ( + + + + + + + {props => } + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {/* */} + {/* */} + {/* */} + + + + + + + + + + + + + + + + + + + + + ); +}; + diff --git a/PerformicsSrc/src/utils/navigations/drawerContent.js b/PerformicsSrc/src/utils/navigations/drawerContent.js new file mode 100644 index 0000000..010e8b5 --- /dev/null +++ b/PerformicsSrc/src/utils/navigations/drawerContent.js @@ -0,0 +1,371 @@ +import React,{useState} from 'react'; +import { useRoute } from '@react-navigation/native'; +import { View, Image,Alert, Platform, Linking,TouchableOpacity } from 'react-native'; +import { SafeAreaView } from 'react-native-safe-area-context'; +import { DrawerContentScrollView } from '@react-navigation/drawer'; +import { Title, Drawer, Text } from 'react-native-paper'; +import { globalStyles,customStyles,GetPageTheme } from "../../styles/Global"; +import {logout} from '../../components/logout'; +import { version,db, DevType } from '../../constants/constants'; +import { clear_item, set_item} from '../../components/localStorage'; +import {AntDesign, Entypo, EvilIcons, FontAwesome, Ionicons, MaterialIcons} from '../../components/icons'; +import LinearGradient from 'react-native-linear-gradient'; +import RNExitApp from 'react-native-exit-app'; + + +// import images +import DownloadDataIcon from '../../assets/performics/sidemenu_icons/download_data_icon.svg'; +import DailyRoutePlanImage from '../../assets/performics/sidemenu_icons/daily_route_plan_icon.svg'; +import TrainingIcon from '../../assets/performics/sidemenu_icons/training_section_icon.svg'; +import VisitorLoginIcon from '../../assets/performics/sidemenu_icons/visitor_login_icon.svg'; +import UploadDataIcon from '../../assets/performics/sidemenu_icons/upload_data_icon.svg'; +import ReportsIcon from '../../assets/performics/sidemenu_icons/reports_icon.svg'; +import ExitsIcon from '../../assets/performics/sidemenu_icons/exit_icon.svg'; +import { notify } from '../../components/notify'; +import ChangePasswordIcon from '../../assets/performics/sidemenu_icons/change_password.svg'; + +export function DrawerContent(props) { + const route = useRoute(); + + // get all theme styles acc to current theme set + const PageTheme=GetPageTheme(props.DarkMode,route.name); + const customStyle=customStyles(props.DarkMode,route.name); + const globalStyle=globalStyles(props.DarkMode,route.name); + + + const [isDarkTheme, setIsDarkTheme] = useState(false) + const toggleTheme=()=>{ + setIsDarkTheme(!isDarkTheme); + } + + + let pageprops=props.pageprops || {}; + let userData=pageprops.sessionData || {}; + const ST=pageprops.StaticText || {}; + let un=userData.UserId || ''; + const activeOpacityC=0.6; + + function startDownload(){ + props.navigation.closeDrawer(); + + if(props.pageprops){ + if(props.pageprops.set_startDownload){ + props.pageprops.set_startDownload({startDownload:true}); + } + else{ + notify(ST.Couldnotstartdownload) + } + } + else{ + notify(ST.Couldnotstartdownload) + } + } + + function AskForDownload(){ + Alert.alert( + "Performics", + ST.Doyouwanttodownloaddata, + [ + { + text: ST.Cancel, + onPress: () => {}, + style: "cancel" + }, + { text: ST.OK, onPress: () => {startDownload();} } + ], + ); + } + + function startUpload(){ + props.navigation.closeDrawer(); + if(props.pageprops){ + if(props.pageprops.set_startUpload){ + props.pageprops.set_startUpload({startUpload:true}); + } + else{ + notify(ST.Couldnotstartupload) + } + } + else{ + notify(ST.Couldnotstartupload) + } + } + + function AskForUpload(){ + Alert.alert( + "Performics", + ST.Doyouwanttouploaddata, + [ + { + text: ST.Cancel, + onPress: () => {}, + style: "cancel" + }, + { text: ST.OK, onPress: () => {startUpload();} } + ], + ); + } + + async function exitApp(){ + console.log('exit app'); + clear_item('islogin'); + clear_item('mpin'); + clear_item('loginToken'); + clear_item('loginInfo'); + clear_item('login_credentials'); + clear_item('firsttime'); + clear_item('projectCode'); + clear_item('projectInfo'); + clear_item('loginOfDays'); + const pdata={islogin:false,SecurityToken:''}; + props.pageprops?props.pageprops.set_session(pdata):''; + setTimeout(()=>{RNExitApp.exitApp();},1000); + } + + async function clearStorage(){ + await set_item('DataStorageCleared','1'); + try { + db.transaction(async function (txn) { + await txn.executeSql(`SELECT name FROM sqlite_schema WHERE type='table' ORDER BY name`,[],async function (txnd, txnres1) { + console.log('q exec:',txnres1.rows.length); + if(txnres1.rows.length>0){ + for(var i=0;i {}, + style: "cancel" + }, + { text: ST.OK, onPress: () => { clearStorage()} } + ], + ); + } + + return ( + + + + + {un} + + + + + + + + {AskForDownload()}}> + + {ST.DownloadData} + + + {pageprops.ShowBeatPlanList==true && + {props.navigation.navigate('BeatPlan')}}> + + + + + {'Beat Plan'} + + } + + {props.navigation.navigate('StoreList')}}> + + + + {ST.DailyRoutePlan} + + {pageprops.ShowAddNewStore==true && + {props.navigation.navigate('AddStoreInfo')}}> + + + + {ST.AddStoreInfo} + + } + + {/* { {props.navigation.navigate('ReportDetailNew')}}> + + {"IR Report"} + } */} + + {pageprops.ShowSideMenuKYC==true && + {props.navigation.navigate('KycStoreList')}}> + + + + {"Kyc Store List"} + + } + {AskForUpload()}}> + + + + {"Upload Data"} + + + {pageprops.ShowContractForm==true && + {props.navigation.navigate('ContractFormStores')}}> + + + + + {'Contract Forms'} + + } + + {pageprops.WarehouseShow==true && + {props.navigation.navigate('WareHouseInward')}}> + + + + {'Warehouse Inward'} + + } + + {pageprops.Allow_Change_Password==true && + {props.navigation.navigate('ChangePassword')}}> + + + + {'Change Password'} + + } + + {props.navigation.navigate('VisitorLogin',[,])}}> + + + + + {"VisitorLogin"} + + + {pageprops.Show_VisitorFeedBack==true && + {props.navigation.navigate('VisitorFeedback')}}> + + + + {'Visitor Feedback'} + + } + {props.navigation.navigate('ReportsMenu')}}> + + {ST.Report} + + + + {props.navigation.navigate('MiscMenuList')}}> + + {"Miscellaneous"} + + + {pageprops.Show_ConsumerSection==true && + {props.navigation.navigate('Training',{'Contentid':2})}}> + + + + {'Consumer Section'} + + } + + + {logout(props)}}> + + + + {ST.Exit} + + + + + {/* {props.navigation.navigate('DynamicStoreList')}}> + + {'Dynamic Store List'} + */} + {/* {props.navigation.navigate('DynamicSurveys')}}> + + {'Dynamic Surveys'} + */} + + {/* {props.navigation.navigate('Warehouse')}}> + + {'Warehouse POSM'} + */} + + { Platform.OS!='ios' && + {props.navigation.navigate('GetDb')}}> + + + + {'GetDb'} + } + + {props.navigation.navigate('Settings')}}> + + {ST.Settings} + + + {Linking.openURL('https://www.cpm-int.com/legal-stuff/privacy-notice')}}> + + {ST.PrivacyPolicy} + + + {props.navigation.navigate('ContactUs')}}> + + {ST.ContactUs} + + + + + + + + + {DevType=="Prod"?version:version+"_Dev"+"0.81.0"} + + + + + ) +} + diff --git a/PerformicsSrc/src_added_object_detection.zip b/PerformicsSrc/src_added_object_detection.zip new file mode 100644 index 0000000..45ba2e9 Binary files /dev/null and b/PerformicsSrc/src_added_object_detection.zip differ diff --git a/README.md b/README.md new file mode 100644 index 0000000..3e2c3f8 --- /dev/null +++ b/README.md @@ -0,0 +1,97 @@ +This is a new [**React Native**](https://reactnative.dev) project, bootstrapped using [`@react-native-community/cli`](https://github.com/react-native-community/cli). + +# Getting Started + +> **Note**: Make sure you have completed the [Set Up Your Environment](https://reactnative.dev/docs/set-up-your-environment) guide before proceeding. + +## Step 1: Start Metro + +First, you will need to run **Metro**, the JavaScript build tool for React Native. + +To start the Metro dev server, run the following command from the root of your React Native project: + +```sh +# Using npm +npm start + +# OR using Yarn +yarn start +``` + +## Step 2: Build and run your app + +With Metro running, open a new terminal window/pane from the root of your React Native project, and use one of the following commands to build and run your Android or iOS app: + +### Android + +```sh +# Using npm +npm run android + +# OR using Yarn +yarn android +``` + +### iOS + +For iOS, remember to install CocoaPods dependencies (this only needs to be run on first clone or after updating native deps). + +The first time you create a new project, run the Ruby bundler to install CocoaPods itself: + +```sh +bundle install +``` + +Then, and every time you update your native dependencies, run: + +```sh +bundle exec pod install +``` + +For more information, please visit [CocoaPods Getting Started guide](https://guides.cocoapods.org/using/getting-started.html). + +```sh +# Using npm +npm run ios + +# OR using Yarn +yarn ios +``` + +If everything is set up correctly, you should see your new app running in the Android Emulator, iOS Simulator, or your connected device. + +This is one way to run your app — you can also build it directly from Android Studio or Xcode. + +## Step 3: Modify your app + +Now that you have successfully run the app, let's make changes! + +Open `App.tsx` in your text editor of choice and make some changes. When you save, your app will automatically update and reflect these changes — this is powered by [Fast Refresh](https://reactnative.dev/docs/fast-refresh). + +When you want to forcefully reload, for example to reset the state of your app, you can perform a full reload: + +- **Android**: Press the R key twice or select **"Reload"** from the **Dev Menu**, accessed via Ctrl + M (Windows/Linux) or Cmd ⌘ + M (macOS). +- **iOS**: Press R in iOS Simulator. + +## Congratulations! :tada: + +You've successfully run and modified your React Native App. :partying_face: + +### Now what? + +- If you want to add this new React Native code to an existing application, check out the [Integration guide](https://reactnative.dev/docs/integration-with-existing-apps). +- If you're curious to learn more about React Native, check out the [docs](https://reactnative.dev/docs/getting-started). + +# Troubleshooting + +If you're having issues getting the above steps to work, see the [Troubleshooting](https://reactnative.dev/docs/troubleshooting) page. + +# Learn More + +To learn more about React Native, take a look at the following resources: + +- [React Native Website](https://reactnative.dev) - learn more about React Native. +- [Getting Started](https://reactnative.dev/docs/environment-setup) - an **overview** of React Native and how setup your environment. +- [Learn the Basics](https://reactnative.dev/docs/getting-started) - a **guided tour** of the React Native **basics**. +- [Blog](https://reactnative.dev/blog) - read the latest official React Native **Blog** posts. +- [`@facebook/react-native`](https://github.com/facebook/react-native) - the Open Source; GitHub **repository** for React Native. diff --git a/__tests__/App.test.tsx b/__tests__/App.test.tsx new file mode 100644 index 0000000..e532f70 --- /dev/null +++ b/__tests__/App.test.tsx @@ -0,0 +1,13 @@ +/** + * @format + */ + +import React from 'react'; +import ReactTestRenderer from 'react-test-renderer'; +import App from '../App'; + +test('renders correctly', async () => { + await ReactTestRenderer.act(() => { + ReactTestRenderer.create(); + }); +}); diff --git a/android/CameraAI/.gitignore b/android/CameraAI/.gitignore new file mode 100644 index 0000000..42afabf --- /dev/null +++ b/android/CameraAI/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/android/CameraAI/build.gradle.kts b/android/CameraAI/build.gradle.kts new file mode 100644 index 0000000..66aaff8 --- /dev/null +++ b/android/CameraAI/build.gradle.kts @@ -0,0 +1,77 @@ +plugins { + id("com.android.library") + id("org.jetbrains.kotlin.android") +} + +android { + namespace = "com.cpm.india.cameraai" + compileSdk = 34 + + defaultConfig { + minSdk = 21 + testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" + consumerProguardFiles("consumer-rules.pro") + ndk { + abiFilters.add("armeabi-v7a") + abiFilters.add("arm64-v8a") + } + } + + buildTypes { + release { + isMinifyEnabled = false + proguardFiles( + getDefaultProguardFile("proguard-android-optimize.txt"), + "proguard-rules.pro" + ) + } + } + // compileOptions { + // sourceCompatibility = JavaVersion.VERSION_1_8 + // targetCompatibility = JavaVersion.VERSION_1_8 + // } + compileOptions { + sourceCompatibility = JavaVersion.VERSION_17 + targetCompatibility = JavaVersion.VERSION_17 + } + kotlinOptions { + // jvmTarget = "1.8" + jvmTarget = "17" + // jvmToolchain(17) // Set this + } + buildFeatures { + viewBinding = true + } + + +} + + +dependencies { + //noinspection UseTomlInstead + implementation ("androidx.core:core-ktx:1.0.2") + implementation ("androidx.appcompat:appcompat:1.3.1") + implementation ("androidx.constraintlayout:constraintlayout:2.1.4") + implementation ("com.google.android.material:material:1.4.0") + testImplementation("junit:junit:4.13.2") + androidTestImplementation("androidx.test.ext:junit:1.2.1") + androidTestImplementation("androidx.test.espresso:espresso-core:3.6.1") + ///camerax + val camerax_version = "1.1.0-beta02" + + // val camerax_version = "1.5.0-alpha01" + implementation ("androidx.camera:camera-core:$camerax_version") + implementation ("androidx.camera:camera-camera2:$camerax_version") + implementation ("androidx.camera:camera-lifecycle:$camerax_version") + implementation ("androidx.camera:camera-view:$camerax_version") + ///for alert + //implementation ("org.jetbrains.anko:anko-common:0.10.4") + //for toast msg + implementation ("com.github.GrenderG:Toasty:1.4.2") + // mlkit face detection & gson + implementation ("com.google.mlkit:face-detection:16.1.7") + //google gson + implementation ("com.google.code.gson:gson:2.10.1") + implementation("org.opencv:opencv:4.9.0") + implementation ("androidx.activity:activity-ktx:1.8.0") +} \ No newline at end of file diff --git a/android/CameraAI/consumer-rules.pro b/android/CameraAI/consumer-rules.pro new file mode 100644 index 0000000..e69de29 diff --git a/android/CameraAI/proguard-rules.pro b/android/CameraAI/proguard-rules.pro new file mode 100644 index 0000000..481bb43 --- /dev/null +++ b/android/CameraAI/proguard-rules.pro @@ -0,0 +1,21 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile \ No newline at end of file diff --git a/android/CameraAI/src/androidTest/java/com/cpm/india/cameraai/ExampleInstrumentedTest.kt b/android/CameraAI/src/androidTest/java/com/cpm/india/cameraai/ExampleInstrumentedTest.kt new file mode 100644 index 0000000..c47716e --- /dev/null +++ b/android/CameraAI/src/androidTest/java/com/cpm/india/cameraai/ExampleInstrumentedTest.kt @@ -0,0 +1,24 @@ +package com.cpm.india.cameraai + +import androidx.test.platform.app.InstrumentationRegistry +import androidx.test.ext.junit.runners.AndroidJUnit4 + +import org.junit.Test +import org.junit.runner.RunWith + +import org.junit.Assert.* + +/** + * Instrumented test, which will execute on an Android device. + * + * See [testing documentation](http://d.android.com/tools/testing). + */ +@RunWith(AndroidJUnit4::class) +class ExampleInstrumentedTest { + @Test + fun useAppContext() { + // Context of the app under test. + val appContext = InstrumentationRegistry.getInstrumentation().targetContext + assertEquals("com.cpm.india.cameraai.test", appContext.packageName) + } +} \ No newline at end of file diff --git a/android/CameraAI/src/main/AndroidManifest.xml b/android/CameraAI/src/main/AndroidManifest.xml new file mode 100644 index 0000000..7bfed97 --- /dev/null +++ b/android/CameraAI/src/main/AndroidManifest.xml @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/android/CameraAI/src/main/java/com/cpm/india/cameraai/camera/CameraActivity.kt b/android/CameraAI/src/main/java/com/cpm/india/cameraai/camera/CameraActivity.kt new file mode 100644 index 0000000..0acc17b --- /dev/null +++ b/android/CameraAI/src/main/java/com/cpm/india/cameraai/camera/CameraActivity.kt @@ -0,0 +1,421 @@ +package com.cpm.india.cameraai.camera +import android.Manifest +import android.annotation.SuppressLint +import android.app.Activity +import android.content.ContentValues.TAG +import android.content.Context +import android.content.Intent +import android.content.pm.PackageManager +import android.graphics.BitmapFactory +import android.os.Bundle +import android.os.Handler +import android.util.Log +import android.view.View +import android.view.animation.AlphaAnimation +import android.view.animation.Animation +//import androidx.activity.enableEdgeToEdge +import androidx.activity.result.contract.ActivityResultContracts +import androidx.appcompat.app.AppCompatActivity +import androidx.camera.core.CameraSelector +import androidx.camera.core.ExperimentalGetImage +import androidx.camera.core.ImageAnalysis +import androidx.camera.core.ImageCapture +import androidx.camera.core.ImageCapture.CAPTURE_MODE_MAXIMIZE_QUALITY +import androidx.camera.core.ImageCapture.FLASH_MODE_AUTO +import androidx.camera.core.ImageCaptureException +import androidx.camera.core.ImageProxy +import androidx.camera.core.Preview +import androidx.camera.lifecycle.ProcessCameraProvider +import androidx.core.app.ActivityCompat +import androidx.core.content.ContextCompat +import androidx.core.view.ViewCompat +import androidx.core.view.WindowInsetsCompat +import com.cpm.india.cameraai.R +import com.cpm.india.cameraai.databinding.ActivityCameraBinding +import com.cpm.india.cameraai.preview.PreviewActivity +import com.cpm.india.cameraai.utils.GetProperImageRotation.checkBlinkAndMovement +import com.cpm.india.cameraai.utils.Utils.calculateBrightness +import com.cpm.india.cameraai.utils.Utils.checkBlurriness +import com.cpm.india.cameraai.utils.Utils.eyeBlink +import com.cpm.india.cameraai.utils.Utils.isFaceTooFar +import com.cpm.india.cameraai.utils.Utils.isValidHumanFace +import com.google.mlkit.vision.common.InputImage +import com.google.mlkit.vision.face.Face +import com.google.mlkit.vision.face.FaceDetection +import com.google.mlkit.vision.face.FaceDetectorOptions +import com.google.mlkit.vision.face.FaceLandmark +//import org.jetbrains.anko.toast +import android.widget.Toast +import org.opencv.android.OpenCVLoader +import java.io.File +import java.nio.ByteBuffer +import java.util.concurrent.ExecutorService +import java.util.concurrent.Executors +import kotlin.concurrent.thread +import kotlin.math.absoluteValue + +class CameraActivity : AppCompatActivity() { + private var imageCapture: ImageCapture? = null + private lateinit var cameraExecutor: ExecutorService + private lateinit var binding: ActivityCameraBinding + private var flipX = true + private var focusFlag = 0 + var cameraSelector = CameraSelector.DEFAULT_FRONT_CAMERA + private val REQUIRED_PERMISSIONS = arrayOf(Manifest.permission.CAMERA) + private val REQUEST_CODE_PERMISSIONS = 10 + private var doubleBackToExitPressedOnce = false + private var mainThreadIsStopped: Boolean = true + private var parameterThread: Thread? = null + private var pictureThread: Thread? = null + + private var filePath: String? = null + private var isGrid: Boolean? = false + private var isCheckFace: Boolean? = true + private var isFacingFront: Boolean? = true + private var isFlash = false + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + // enableEdgeToEdge() + binding = ActivityCameraBinding.inflate(layoutInflater) + setContentView(binding.root) + ViewCompat.setOnApplyWindowInsetsListener(binding.main) { v, insets -> + val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars()) + v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom) + insets + } + if (!OpenCVLoader.initLocal()) { + Log.e("OpenCv", "OpenCV initialization failed") + } else { + Log.d("OpenCv", "OpenCV initialization succeeded") + } + eyeBlink = false + filePath = intent.getStringExtra("filePath") + isGrid = intent.getBooleanExtra("isGrid", false) + isCheckFace = intent.getBooleanExtra("isCheckFace", false) + isFacingFront = intent.getBooleanExtra("isFacingFront", true) + Log.e("filePath", filePath!!) + if (!isFacingFront!!) cameraSelector = CameraSelector.DEFAULT_BACK_CAMERA + if (isCheckFace!!) binding.capturebtnCameraActivity.visibility = View.INVISIBLE + switchCamera() + cameraExecutor = Executors.newSingleThreadExecutor() + if (allPermissionsGranted()) { + startCamera() + } else { + ActivityCompat.requestPermissions( + this, REQUIRED_PERMISSIONS, REQUEST_CODE_PERMISSIONS + ) + } + focusingContinuous() + requestPermissionsforApp() + calledOnClick() + } + + private fun focusingContinuous() { + focusFlag = 1 + this@CameraActivity.runOnUiThread { + runOnUiThread { + val anim = AlphaAnimation(0.0f, 1.0f) + anim.duration = 10//You can manage the time of the blink with this parameter + anim.startOffset = 300 + anim.repeatMode = Animation.REVERSE + anim.repeatCount = Animation.INFINITE + } + } + } + + private fun calledOnClick() { + Log.d("Jeevanpclick", filePath.toString()) + binding.capturebtnCameraActivity.setOnClickListener { + val outputOptions = ImageCapture.OutputFileOptions.Builder(File(filePath!!)).build() + mainThreadIsStopped = true + imageCapture?.takePicture( + outputOptions, + ContextCompat.getMainExecutor(this), + object : ImageCapture.OnImageSavedCallback { + override fun onError(exception: ImageCaptureException) { + exception.printStackTrace() + } + + override fun onImageSaved(outputFileResults: ImageCapture.OutputFileResults) { + mainThreadIsStopped = true + pictureThread = thread(start = true) { + val savedUri = outputFileResults.savedUri + Log.d("Jeevanp", savedUri.toString()) + val bitmap = BitmapFactory.decodeFile(savedUri?.path) + val openCvResult = checkBlurriness(bitmap) + val brightnessResult = calculateBrightness(bitmap) + if (openCvResult == 1 && brightnessResult.absoluteValue > 0.20) { + Log.d("Jeevanp", "1") + val intent = + Intent(this@CameraActivity, PreviewActivity::class.java) + intent.putExtra("photoUri", File(filePath!!).absolutePath) + resultLauncher.launch(intent) + } else { + if (openCvResult != 1 && brightnessResult.absoluteValue <= 0.32) { + Log.d("Jeevanp", "2") + // runOnUiThread { + // toast("Image is blurry and dark. Please try again.") + // } + + runOnUiThread { + Toast.makeText(applicationContext, "Image is blurry. and dark. Please try again", Toast.LENGTH_SHORT).show() + } + + + + } else if (brightnessResult.absoluteValue <= 0.32) { + Log.d("Jeevanp", "3") + runOnUiThread { + // toast("Image is dark. Please try again.") + Toast.makeText(applicationContext, "Image is dark. Please try again.", Toast.LENGTH_SHORT).show() + + } + } else { + Log.d("Jeevanp", "4") + runOnUiThread { + // toast("Image is blurry. Please try again.") + Toast.makeText(applicationContext, "Image is blurry. Please try again.", Toast.LENGTH_SHORT).show() + } + } + } + } + } + }) + } + } + + private var resultLauncher = + registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result -> + if (result.resultCode == Activity.RESULT_OK) { + // There are no request codes + val data: Intent? = result.data + if (data != null) { + val intent = Intent() + intent.putExtra("filePath", data.getStringExtra("filePath").toString()) + setResult(RESULT_OK, intent) + finish() + } + } + } + + private fun switchCamera() { + binding.switchCamera.setOnClickListener { + if (cameraSelector == CameraSelector.DEFAULT_BACK_CAMERA) { + cameraSelector = CameraSelector.DEFAULT_FRONT_CAMERA + flipX = true + } else { + cameraSelector = CameraSelector.DEFAULT_BACK_CAMERA + flipX = false + } + startCamera() + } + } + + private fun startCamera() { + val cameraProviderFuture = ProcessCameraProvider.getInstance(this) + cameraProviderFuture.addListener({ + val cameraProvider: ProcessCameraProvider = cameraProviderFuture.get() + val preview = Preview.Builder().build() + .also { + it.setSurfaceProvider(binding.texture.surfaceProvider) + //it.surfaceProvider = binding.texture.surfaceProvider + } + imageCapture = ImageCapture.Builder() + .setCaptureMode(CAPTURE_MODE_MAXIMIZE_QUALITY) + .setFlashMode(FLASH_MODE_AUTO) + .setJpegQuality(100) + .build() + + val imageAnalyzer = ImageAnalysis.Builder() + .setBackpressureStrategy(ImageAnalysis.STRATEGY_KEEP_ONLY_LATEST) + .build() + .also { + it.setAnalyzer( + cameraExecutor, + LuminosityAnalyzer(binding, isCheckFace!!, context = this) + ) + } + try { + cameraProvider.unbindAll() + val cam = cameraProvider.bindToLifecycle( + this, cameraSelector, preview, imageCapture, imageAnalyzer + ) + binding.ivFlash.setOnClickListener { + if (cam.cameraInfo.hasFlashUnit()) { + if (!isFlash) { + isFlash = true + cam.cameraControl.enableTorch(true) // or false + binding.ivFlash.setImageResource(R.mipmap.ic_flash_on_white_24dp) + } else { + isFlash = false + cam.cameraControl.enableTorch(false) // or false + binding.ivFlash.setImageResource(R.mipmap.ic_flash_off_white_24dp) + } + } + } + } catch (exc: Exception) { + Log.e(TAG, "Use case binding failed", exc) + } + }, ContextCompat.getMainExecutor(this)) + } + + private fun requestPermissionsforApp() { + ActivityCompat.requestPermissions( + this@CameraActivity, + arrayOf(Manifest.permission.CAMERA), + 2 + ) + } + + override fun onRequestPermissionsResult( + requestCode: Int, permissions: Array, grantResults: IntArray + ) { + super.onRequestPermissionsResult(requestCode, permissions, grantResults) + if (requestCode == REQUEST_CODE_PERMISSIONS) { + if (allPermissionsGranted()) { + startCamera() + } else { + runOnUiThread { + // toast("Permissions not granted by the user.") + Toast.makeText(applicationContext, "Permissions not granted by the user.", Toast.LENGTH_SHORT).show() + + } + this@CameraActivity.finish() + } + } + } + + private fun allPermissionsGranted() = REQUIRED_PERMISSIONS.all { + ContextCompat.checkSelfPermission( + baseContext, it + ) == PackageManager.PERMISSION_GRANTED + } + + public class LuminosityAnalyzer( + val binding: ActivityCameraBinding, + val isCheckFace: Boolean, + val context: Context + ) : + ImageAnalysis.Analyzer { + private fun ByteBuffer.toByteArray(): ByteArray { + rewind() // Rewind the buffer to zero + val data = ByteArray(remaining()) + get(data) // Copy the buffer into a byte array + return data // Return the byte array + } + + @androidx.annotation.OptIn(ExperimentalGetImage::class) + override fun analyze(image: ImageProxy) { + val inputImage = InputImage.fromMediaImage( + image.image!!, + image.imageInfo.rotationDegrees + ) + val options = FaceDetectorOptions.Builder() + .setPerformanceMode(FaceDetectorOptions.PERFORMANCE_MODE_ACCURATE) + .setLandmarkMode(FaceDetectorOptions.LANDMARK_MODE_ALL) // Detect landmarks (eyes, mouth, etc.) + .setClassificationMode(FaceDetectorOptions.CLASSIFICATION_MODE_ALL) // Enable face classification (e.g., smiling, eyes open) + .setMinFaceSize(0.1f) // Detect smaller faces in the image + .enableTracking() // Track faces across frames + .build() + val faceDetector = FaceDetection.getClient(options) + faceDetector.process(inputImage) + .addOnSuccessListener { faces: List? -> + onSuccessListener( + faces, + inputImage, + binding, + isCheckFace, + context + ) + }.addOnFailureListener { + }.addOnCompleteListener { image.close() } + } + + @SuppressLint("ResourceType", "UseCompatLoadingForDrawables") + fun onSuccessListener( + faces: List?, + inputImage: InputImage, + binding: ActivityCameraBinding, + isCheckFace: Boolean, + context: Context + ) { + if (isCheckFace) { + if (!faces.isNullOrEmpty()) { + for (face in faces) { + val boundingBox = face?.boundingBox + // Ensure detected face meets conditions that typically indicate a human face + val leftEye = face?.getLandmark(FaceLandmark.LEFT_EYE) + val rightEye = face?.getLandmark(FaceLandmark.RIGHT_EYE) + val nose = face?.getLandmark(FaceLandmark.NOSE_BASE) + val mouthLeft = face?.getLandmark(FaceLandmark.MOUTH_LEFT) + val mouthRight = face?.getLandmark(FaceLandmark.MOUTH_RIGHT) + if (checkBlinkAndMovement(face!!)) { + eyeBlink = true + } + // Check if the face is too far based on the bounding box size + Log.e("eyeBlink", "$eyeBlink") + // Example condition: only consider it a human face if the eyes and mouth probabilities are detected + if (leftEye != null && rightEye != null && nose != null && mouthLeft != null && mouthRight != null) { + if (isValidHumanFace(face) && !isFaceTooFar(boundingBox) && eyeBlink) { + Log.e("facedata", "Face detected") + binding.tvImageBlurr.setText(R.string.face_detected) + binding.capturebtnCameraActivity.visibility = View.VISIBLE + } else { + Log.e("facedata", "No Face detected") + binding.tvImageBlurr.setText(R.string.no_face_detected) + binding.capturebtnCameraActivity.visibility = View.INVISIBLE + } + } else { + Log.e("facedata", "No Face detected") + binding.tvImageBlurr.setText(R.string.no_face_detected) + binding.capturebtnCameraActivity.visibility = View.INVISIBLE + } + } + } else { + Log.e("facedata", "No Face detected") + binding.tvImageBlurr.setText(R.string.no_face_detected) + binding.capturebtnCameraActivity.visibility = View.INVISIBLE + } + } + } + } + + @SuppressLint("SetTextI18n") + override fun onResume() { + super.onResume() + focusFlag = 0 + eyeBlink = false + mainThreadIsStopped = false + binding.capturebtnCameraActivity.isEnabled = true + parameterThread = thread(start = true) { + this@CameraActivity.runOnUiThread { + binding.infoPanel.text = "Please stand in a well lit area" + } + Thread.sleep(1000) + } + } + + override fun onPause() { + super.onPause() + mainThreadIsStopped = true + } + + override fun onDestroy() { + super.onDestroy() + Runtime.getRuntime().gc() + } + + override fun onBackPressed() { + if (doubleBackToExitPressedOnce) { + super.onBackPressed() + return + } + this.doubleBackToExitPressedOnce = true + // toast("Please click BACK again to exit") + Toast.makeText(applicationContext, "Please click BACK again to exit", Toast.LENGTH_SHORT).show() + Handler().postDelayed({ + doubleBackToExitPressedOnce = false + }, 2000) + } +} \ No newline at end of file diff --git a/android/CameraAI/src/main/java/com/cpm/india/cameraai/preview/PreviewActivity.kt b/android/CameraAI/src/main/java/com/cpm/india/cameraai/preview/PreviewActivity.kt new file mode 100644 index 0000000..4e87ec8 --- /dev/null +++ b/android/CameraAI/src/main/java/com/cpm/india/cameraai/preview/PreviewActivity.kt @@ -0,0 +1,68 @@ +package com.cpm.india.cameraai.preview +import android.content.Intent +import android.graphics.BitmapFactory +import android.os.Bundle +import android.util.Log +import androidx.appcompat.app.AppCompatActivity +import com.cpm.india.cameraai.databinding.ActivityPreviewBinding +import com.cpm.india.cameraai.utils.GetProperImageRotation +import java.io.File +import java.util.concurrent.ExecutorService +import java.util.concurrent.Executors + +class PreviewActivity : AppCompatActivity() { + private lateinit var cameraExecutor: ExecutorService + private lateinit var binding: ActivityPreviewBinding + private var photoUri: String? = null + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + binding = ActivityPreviewBinding.inflate(layoutInflater) + setContentView(binding.root) + cameraExecutor = Executors.newSingleThreadExecutor() + photoUri = intent.getStringExtra("photoUri") + val photoFile = photoUri?.let { File(it) } + if (photoUri != null) { + Log.d("uridata", photoUri!!) + } + + val rotatedImageFile = GetProperImageRotation.getRotatedImageFile(photoFile, photoUri, this) + binding.capturedImageView.setImageBitmap(BitmapFactory.decodeFile(rotatedImageFile?.absolutePath)) + binding.retakeLL.setOnClickListener { + finish() // Go back to the camera activity + } + + binding.cancelLL.setOnClickListener { + deleteImageFile(photoFile!!.absolutePath) + finish() // Go back to the camera activity + } + + binding.saveLL.setOnClickListener { + val intent = Intent() + intent.putExtra("filePath", photoUri!!) + setResult(RESULT_OK, intent) + finish() + } + } + + private fun deleteImageFile(filePath: String): Boolean { + val file = File(filePath) + return if (file.exists()) { + val isDeleted = file.delete() + if (isDeleted) { + Log.d("FileDeletion", "File deleted successfully: $filePath") + } else { + Log.e("FileDeletion", "File deletion failed: $filePath") + } + isDeleted + } else { + Log.e("FileDeletion", "File does not exist: $filePath") + false + } + } + + // Ensure to shut down the executor + override fun onDestroy() { + super.onDestroy() + cameraExecutor.shutdown() + } +} \ No newline at end of file diff --git a/android/CameraAI/src/main/java/com/cpm/india/cameraai/utils/GetProperImageRotation.kt b/android/CameraAI/src/main/java/com/cpm/india/cameraai/utils/GetProperImageRotation.kt new file mode 100644 index 0000000..06d16ad --- /dev/null +++ b/android/CameraAI/src/main/java/com/cpm/india/cameraai/utils/GetProperImageRotation.kt @@ -0,0 +1,122 @@ +package com.cpm.india.cameraai.utils + +import android.content.Context +import android.content.res.Configuration +import android.graphics.Bitmap +import android.graphics.BitmapFactory +import android.graphics.Matrix +import android.util.Log +import androidx.exifinterface.media.ExifInterface +import java.io.BufferedOutputStream +import java.io.File +import java.io.FileOutputStream +import com.google.mlkit.vision.face.Face +import kotlin.math.absoluteValue + +object GetProperImageRotation { + fun getRotatedImageFile(photoFile: File?, filePath: String?, context: Context?): File? { + val option = BitmapFactory.Options() + option.inSampleSize = 4 + val convertedBitmap: Bitmap = + modifyOrientation( + BitmapFactory.decodeFile(photoFile!!.absolutePath, option), + photoFile.absolutePath, context + ) + return saveImage(convertedBitmap, filePath) + + } + + private fun saveImage(image: Bitmap, filePath: String?): File? { + // Get the file object + val file = filePath?.let { File(it) } + val os = BufferedOutputStream(FileOutputStream(file)) + image.compress(Bitmap.CompressFormat.JPEG, 100, os) + os.close() + return file + } + + private fun modifyOrientation( + bitmap: Bitmap, + image_absolute_path: String, + context: Context? + ): Bitmap { + val ei = ExifInterface(image_absolute_path) + val orientation: Int = + ei.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL) + Log.e("orintation", "" + getScreenOrientation(context)) + when (orientation) { + ExifInterface.ORIENTATION_ROTATE_90 -> { + return rotate(bitmap, 90f) + } + ExifInterface.ORIENTATION_ROTATE_180 -> { + return rotate(bitmap, 180f) + } + + ExifInterface.ORIENTATION_TRANSVERSE -> { + return rotate(bitmap, 270f) + } + + ExifInterface.ORIENTATION_ROTATE_270 -> { + return rotate(bitmap, 270f) + } + + ExifInterface.ORIENTATION_FLIP_HORIZONTAL -> { + return flip(bitmap, true, vertical = false) + } + + ExifInterface.ORIENTATION_FLIP_VERTICAL -> { + return flip(bitmap, false, vertical = true) + } + + else -> { + return bitmap + } + } + } + + private fun rotate(bitmap: Bitmap, degrees: Float): Bitmap { + val matrix = Matrix() + matrix.postRotate(degrees) + return Bitmap.createBitmap(bitmap, 0, 0, bitmap.width, bitmap.height, matrix, true) + } + + private fun flip(bitmap: Bitmap, horizontal: Boolean, vertical: Boolean): Bitmap { + val matrix = Matrix() + matrix.preScale(if (horizontal) (-1f) else 1f, if (vertical) (-1f) else 1f) + return Bitmap.createBitmap(bitmap, 0, 0, bitmap.width, bitmap.height, matrix, true); + } + + // Function to check for blink and movement + fun checkBlinkAndMovement(face: Face): Boolean { + // Step 1: Check blink detection + val leftEyeOpenProbability = face.leftEyeOpenProbability ?: -1f + val rightEyeOpenProbability = face.rightEyeOpenProbability ?: -1f + // If both eyes are open or closed, consider it a blink detection scenario + val isBlinking = leftEyeOpenProbability < 0.3 && rightEyeOpenProbability < 0.3 + // Step 2: Check for facial movement (pose detection) + val headEulerAngleX = face.headEulerAngleX // Head tilt up/down + val headEulerAngleY = face.headEulerAngleY // Head turn left/right + val headEulerAngleZ = face.headEulerAngleZ // Head tilt sideways + // If the face poses (angles) change significantly between frames, consider it as movement + val isMoving = + headEulerAngleX.absoluteValue > 10 || headEulerAngleY.absoluteValue > 10 || headEulerAngleZ.absoluteValue > 10 + // Return true if either blinking or movement is detected + return isBlinking && isMoving + } + + fun getScreenOrientation(context: Context?): Int { + val configuration = context?.resources!!.configuration + // If the configuration returns ORIENTATION_UNDEFINED, manually check width/height + if (configuration.orientation == Configuration.ORIENTATION_UNDEFINED) { + val displayMetrics = context.resources!!.displayMetrics + return if (displayMetrics.widthPixels > displayMetrics.heightPixels) { + Configuration.ORIENTATION_LANDSCAPE + } else { + Configuration.ORIENTATION_PORTRAIT + } + } + + return configuration.orientation + } + +} \ No newline at end of file diff --git a/android/CameraAI/src/main/java/com/cpm/india/cameraai/utils/Utils.kt b/android/CameraAI/src/main/java/com/cpm/india/cameraai/utils/Utils.kt new file mode 100644 index 0000000..ffa2c52 --- /dev/null +++ b/android/CameraAI/src/main/java/com/cpm/india/cameraai/utils/Utils.kt @@ -0,0 +1,182 @@ +package com.cpm.india.cameraai.utils +import android.graphics.Bitmap +import android.graphics.Color +import android.graphics.Matrix +import android.graphics.Rect +import android.media.Image +import android.util.Log +import com.google.mlkit.vision.face.Face +import org.opencv.android.Utils +import org.opencv.core.Core +import org.opencv.core.Mat +import org.opencv.core.MatOfDouble +import org.opencv.imgproc.Imgproc +import java.nio.ReadOnlyBufferException +import kotlin.experimental.inv + +object Utils { + var eyeBlink = false + private fun rotateBitmap(bitmap: Bitmap, rotationDegrees: Int, flipX: Boolean): Bitmap { + val matrix = Matrix() + // Rotate the image back to straight. + matrix.postRotate(rotationDegrees.toFloat()) + // Mirror the image along the X or Y axis. + matrix.postScale(if (flipX) -1.0f else 1.0f, 1.0f) + val rotatedBitmap = + Bitmap.createBitmap(bitmap, 0, 0, bitmap.width, bitmap.height, matrix, true) + // Recycle the old bitmap if it has changed. + if (rotatedBitmap != bitmap) { + bitmap.recycle() + } + return rotatedBitmap + } + private fun YUV_420_888toNV21(image: Image): ByteArray { + val width = image.width + val height = image.height + val ySize = width * height + val uvSize = width * height / 4 + val nv21 = ByteArray(ySize + uvSize * 2) + val yBuffer = image.planes[0].buffer // Y + val uBuffer = image.planes[1].buffer // U + val vBuffer = image.planes[2].buffer // V + var rowStride = image.planes[0].rowStride + assert(image.planes[0].pixelStride == 1) + + var pos = 0 + + if (rowStride == width) { // likely + yBuffer[nv21, 0, ySize] + pos += ySize + } else { + var yBufferPos = -rowStride.toLong() // not an actual position + while (pos < ySize) { + yBufferPos += rowStride.toLong() + yBuffer.position(yBufferPos.toInt()) + yBuffer[nv21, pos, width] + pos += width + } + } + + rowStride = image.planes[2].rowStride + val pixelStride = image.planes[2].pixelStride + assert(rowStride == image.planes[1].rowStride) + assert(pixelStride == image.planes[1].pixelStride) + if (pixelStride == 2 && rowStride == width && uBuffer[0] == vBuffer[1]) { + // maybe V an U planes overlap as per NV21, which means vBuffer[1] is alias of uBuffer[0] + val savePixel = vBuffer[1] + try { + vBuffer.put(1, savePixel.inv() as Byte) + if (uBuffer[0] == savePixel.inv() as Byte) { + vBuffer.put(1, savePixel) + vBuffer.position(0) + uBuffer.position(0) + vBuffer[nv21, ySize, 1] + uBuffer[nv21, ySize + 1, uBuffer.remaining()] + + return nv21 // shortcut + } + } catch (ex: ReadOnlyBufferException) { + // unfortunately, we cannot check if vBuffer and uBuffer overlap + } + // unfortunately, the check failed. We must save U and V pixel by pixel + vBuffer.put(1, savePixel) + } + + // other optimizations could check if (pixelStride == 1) or (pixelStride == 2), + // but performance gain would be less significant + for (row in 0 until height / 2) { + for (col in 0 until width / 2) { + val vuPos = col * pixelStride + row * rowStride + nv21[pos++] = vBuffer[vuPos] + nv21[pos++] = uBuffer[vuPos] + } + } + + return nv21 + } + private fun getResizedBitmap(bm: Bitmap): Bitmap { + val width = bm.width + val height = bm.height + val scaleWidth = (112f) / width + val scaleHeight = (112f) / height + // CREATE A MATRIX FOR THE MANIPULATION + val matrix = Matrix() + // RESIZE THE BIT MAP + matrix.postScale(scaleWidth, scaleHeight) + // "RECREATE" THE NEW BITMAP + val resizedBitmap = Bitmap.createBitmap( + bm, 0, 0, width, height, matrix, false + ) + bm.recycle() + return resizedBitmap + } + fun isValidHumanFace(face: Face): Boolean { + val boundingBox = face.boundingBox + val faceWidth = boundingBox.width() + val faceHeight = boundingBox.height() + // Check face size or proportions (e.g., width to height ratio) + val aspectRatio = faceWidth.toFloat() / faceHeight.toFloat() + if (aspectRatio < 0.75 || aspectRatio > 1.3) { + return false // Unusual face shape, likely not a human face + } + // Additional checks can be added here + return true + } + + // Function to check if the face is too far based on bounding box size + fun isFaceTooFar(boundingBox: Rect?): Boolean { + // Use width or height of the bounding box to determine if the face is too far + val faceWidth = boundingBox?.width() + // Set a threshold for face width (this value will depend on your camera and testing) + val farThreshold = 100 // Example threshold, adjust based on testing + // If the face width is smaller than the threshold, consider it too far + return faceWidth!! < farThreshold + } + + fun checkBlurriness(result: Bitmap): Int { + val destination = Mat() + val image = Mat() + val matGray = Mat() + val std = MatOfDouble() + val median = MatOfDouble() + Utils.bitmapToMat(result, image) + Imgproc.cvtColor(image, matGray, Imgproc.COLOR_BGR2GRAY) + Imgproc.Laplacian(matGray, destination, 3) + Core.meanStdDev(destination, median, std) + val variance = Math.pow(std.get(0, 0)[0], 2.0) + Log.i("Variance : ", variance.toString()) + return if (variance < 10) { + 0 + } else { + 1 + } + } + + fun calculateBrightness(bitmap: Bitmap): Float { + return calculateBrightnessEstimate(bitmap, 1) + } + private fun calculateBrightnessEstimate(bitmap: Bitmap, pixelSpacing: Int): Float { + var r = 0 + var g = 0 + var b = 0 + val height = bitmap.height + val width = bitmap.width + var n = 0 + var lux = 0.0f + val pixels = IntArray(width * height) + bitmap.getPixels(pixels, 0, width, 0, 0, width, height) + var i = 0 + while (i < pixels.size) { + val color = pixels[i] + r = Color.red(color) + g = Color.green(color) + b = Color.blue(color) + val luminance = (r * 0.2126f + g * 0.7152f + b * 0.0722f) / 255 + lux += luminance + n++ + i += pixelSpacing + } + return lux / n + } + +} \ No newline at end of file diff --git a/android/CameraAI/src/main/res/drawable/ic_camera_icon.xml b/android/CameraAI/src/main/res/drawable/ic_camera_icon.xml new file mode 100644 index 0000000..d5c2d95 --- /dev/null +++ b/android/CameraAI/src/main/res/drawable/ic_camera_icon.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/android/CameraAI/src/main/res/drawable/outline_flip_camera_android_24.xml b/android/CameraAI/src/main/res/drawable/outline_flip_camera_android_24.xml new file mode 100644 index 0000000..911c086 --- /dev/null +++ b/android/CameraAI/src/main/res/drawable/outline_flip_camera_android_24.xml @@ -0,0 +1,16 @@ + + + + + diff --git a/android/CameraAI/src/main/res/drawable/rounded_corners.xml b/android/CameraAI/src/main/res/drawable/rounded_corners.xml new file mode 100644 index 0000000..f13293c --- /dev/null +++ b/android/CameraAI/src/main/res/drawable/rounded_corners.xml @@ -0,0 +1,10 @@ + + + + + + \ No newline at end of file diff --git a/android/CameraAI/src/main/res/drawable/roundedcorner.xml b/android/CameraAI/src/main/res/drawable/roundedcorner.xml new file mode 100644 index 0000000..e054802 --- /dev/null +++ b/android/CameraAI/src/main/res/drawable/roundedcorner.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/android/CameraAI/src/main/res/layout/activity_camera.xml b/android/CameraAI/src/main/res/layout/activity_camera.xml new file mode 100644 index 0000000..1ec3d08 --- /dev/null +++ b/android/CameraAI/src/main/res/layout/activity_camera.xml @@ -0,0 +1,149 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/android/CameraAI/src/main/res/layout/activity_preview.xml b/android/CameraAI/src/main/res/layout/activity_preview.xml new file mode 100644 index 0000000..ec2e81c --- /dev/null +++ b/android/CameraAI/src/main/res/layout/activity_preview.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/android/CameraAI/src/main/res/mipmap-hdpi/close.png b/android/CameraAI/src/main/res/mipmap-hdpi/close.png new file mode 100644 index 0000000..8ee16c6 Binary files /dev/null and b/android/CameraAI/src/main/res/mipmap-hdpi/close.png differ diff --git a/android/CameraAI/src/main/res/mipmap-hdpi/ic_flash_off_white_24dp.png b/android/CameraAI/src/main/res/mipmap-hdpi/ic_flash_off_white_24dp.png new file mode 100644 index 0000000..948446b Binary files /dev/null and b/android/CameraAI/src/main/res/mipmap-hdpi/ic_flash_off_white_24dp.png differ diff --git a/android/CameraAI/src/main/res/mipmap-hdpi/ic_flash_on_white_24dp.png b/android/CameraAI/src/main/res/mipmap-hdpi/ic_flash_on_white_24dp.png new file mode 100644 index 0000000..4747a11 Binary files /dev/null and b/android/CameraAI/src/main/res/mipmap-hdpi/ic_flash_on_white_24dp.png differ diff --git a/android/CameraAI/src/main/res/mipmap-hdpi/retake.png b/android/CameraAI/src/main/res/mipmap-hdpi/retake.png new file mode 100644 index 0000000..e2c2270 Binary files /dev/null and b/android/CameraAI/src/main/res/mipmap-hdpi/retake.png differ diff --git a/android/CameraAI/src/main/res/mipmap-hdpi/tick.png b/android/CameraAI/src/main/res/mipmap-hdpi/tick.png new file mode 100644 index 0000000..9e3c1d0 Binary files /dev/null and b/android/CameraAI/src/main/res/mipmap-hdpi/tick.png differ diff --git a/android/CameraAI/src/main/res/mipmap-mdpi/ic_flash_off_white_24dp.png b/android/CameraAI/src/main/res/mipmap-mdpi/ic_flash_off_white_24dp.png new file mode 100644 index 0000000..156df5e Binary files /dev/null and b/android/CameraAI/src/main/res/mipmap-mdpi/ic_flash_off_white_24dp.png differ diff --git a/android/CameraAI/src/main/res/mipmap-mdpi/ic_flash_on_white_24dp.png b/android/CameraAI/src/main/res/mipmap-mdpi/ic_flash_on_white_24dp.png new file mode 100644 index 0000000..9e57cde Binary files /dev/null and b/android/CameraAI/src/main/res/mipmap-mdpi/ic_flash_on_white_24dp.png differ diff --git a/android/CameraAI/src/main/res/mipmap-xhdpi/ic_flash_off_white_24dp.png b/android/CameraAI/src/main/res/mipmap-xhdpi/ic_flash_off_white_24dp.png new file mode 100644 index 0000000..23c854e Binary files /dev/null and b/android/CameraAI/src/main/res/mipmap-xhdpi/ic_flash_off_white_24dp.png differ diff --git a/android/CameraAI/src/main/res/mipmap-xhdpi/ic_flash_on_white_24dp.png b/android/CameraAI/src/main/res/mipmap-xhdpi/ic_flash_on_white_24dp.png new file mode 100644 index 0000000..bedc4eb Binary files /dev/null and b/android/CameraAI/src/main/res/mipmap-xhdpi/ic_flash_on_white_24dp.png differ diff --git a/android/CameraAI/src/main/res/mipmap-xxhdpi/ic_flash_off_white_24dp.png b/android/CameraAI/src/main/res/mipmap-xxhdpi/ic_flash_off_white_24dp.png new file mode 100644 index 0000000..3cf30f3 Binary files /dev/null and b/android/CameraAI/src/main/res/mipmap-xxhdpi/ic_flash_off_white_24dp.png differ diff --git a/android/CameraAI/src/main/res/mipmap-xxhdpi/ic_flash_on_white_24dp.png b/android/CameraAI/src/main/res/mipmap-xxhdpi/ic_flash_on_white_24dp.png new file mode 100644 index 0000000..4e116af Binary files /dev/null and b/android/CameraAI/src/main/res/mipmap-xxhdpi/ic_flash_on_white_24dp.png differ diff --git a/android/CameraAI/src/main/res/mipmap-xxxhdpi/ic_flash_off_white_24dp.png b/android/CameraAI/src/main/res/mipmap-xxxhdpi/ic_flash_off_white_24dp.png new file mode 100644 index 0000000..1d774f2 Binary files /dev/null and b/android/CameraAI/src/main/res/mipmap-xxxhdpi/ic_flash_off_white_24dp.png differ diff --git a/android/CameraAI/src/main/res/mipmap-xxxhdpi/ic_flash_on_white_24dp.png b/android/CameraAI/src/main/res/mipmap-xxxhdpi/ic_flash_on_white_24dp.png new file mode 100644 index 0000000..cb60611 Binary files /dev/null and b/android/CameraAI/src/main/res/mipmap-xxxhdpi/ic_flash_on_white_24dp.png differ diff --git a/android/CameraAI/src/main/res/values/colors.xml b/android/CameraAI/src/main/res/values/colors.xml new file mode 100644 index 0000000..6f9c89d --- /dev/null +++ b/android/CameraAI/src/main/res/values/colors.xml @@ -0,0 +1,6 @@ + + + #FF000000 + #FFFFFFFF + #FF0000 + \ No newline at end of file diff --git a/android/CameraAI/src/main/res/values/strings.xml b/android/CameraAI/src/main/res/values/strings.xml new file mode 100644 index 0000000..c337cab --- /dev/null +++ b/android/CameraAI/src/main/res/values/strings.xml @@ -0,0 +1,7 @@ + + switch camera + Face Detected + No Face Detected! + Camera Capture Button + Need all green dots to start taking pictures + \ No newline at end of file diff --git a/android/CameraAI/src/test/java/com/cpm/india/cameraai/ExampleUnitTest.kt b/android/CameraAI/src/test/java/com/cpm/india/cameraai/ExampleUnitTest.kt new file mode 100644 index 0000000..78912cb --- /dev/null +++ b/android/CameraAI/src/test/java/com/cpm/india/cameraai/ExampleUnitTest.kt @@ -0,0 +1,17 @@ +package com.cpm.india.cameraai + +import org.junit.Test + +import org.junit.Assert.* + +/** + * Example local unit test, which will execute on the development machine (host). + * + * See [testing documentation](http://d.android.com/tools/testing). + */ +class ExampleUnitTest { + @Test + fun addition_isCorrect() { + assertEquals(4, 2 + 2) + } +} \ No newline at end of file diff --git a/android/app/build.gradle b/android/app/build.gradle new file mode 100644 index 0000000..0e870c5 --- /dev/null +++ b/android/app/build.gradle @@ -0,0 +1,110 @@ +apply plugin: "com.android.application" +apply plugin: "org.jetbrains.kotlin.android" +apply plugin: "com.facebook.react" +apply from: "../../node_modules/react-native-vector-icons/fonts.gradle" +apply plugin: "com.google.gms.google-services" +apply plugin: "com.google.firebase.crashlytics" + + +react { + autolinkLibrariesWithApp() +} + +def enableProguardInReleaseBuilds = false +def jscFlavor = 'io.github.react-native-community:jsc-android:2026004.+' + +android { + namespace "com.performics" + compileSdk rootProject.ext.compileSdkVersion + buildToolsVersion rootProject.ext.buildToolsVersion + + defaultConfig { + applicationId "com.performics" + minSdkVersion rootProject.ext.minSdkVersion + targetSdkVersion rootProject.ext.targetSdkVersion + versionCode 181 + versionName "6.9" + missingDimensionStrategy 'react-native-camera', 'general' + } + + compileOptions { + sourceCompatibility JavaVersion.VERSION_17 + targetCompatibility JavaVersion.VERSION_17 + } + + kotlinOptions { + jvmTarget = "17" + } + + signingConfigs { + debug { + if (project.hasProperty('MYAPP_UPLOAD_STORE_FILE')) { + storeFile file(MYAPP_UPLOAD_STORE_FILE) + storePassword MYAPP_UPLOAD_STORE_PASSWORD + keyAlias MYAPP_UPLOAD_KEY_ALIAS + keyPassword MYAPP_UPLOAD_KEY_PASSWORD + } + else{ + storeFile file('debug.keystore') + storePassword 'android' + keyAlias 'androiddebugkey' + keyPassword 'android' + } + } + release { + if (project.hasProperty('MYAPP_UPLOAD_STORE_FILE')) { + storeFile file(MYAPP_UPLOAD_STORE_FILE) + storePassword MYAPP_UPLOAD_STORE_PASSWORD + keyAlias MYAPP_UPLOAD_KEY_ALIAS + keyPassword MYAPP_UPLOAD_KEY_PASSWORD + } + else{ + storeFile file('debug.keystore') + storePassword 'android' + keyAlias 'androiddebugkey' + keyPassword 'android' + } + } + } + buildTypes { + debug { + signingConfig signingConfigs.debug + } + release { + // Caution! In production, you need to generate your own keystore file. + // see https://reactnative.dev/docs/signed-apk-android. + signingConfig signingConfigs.release + minifyEnabled enableProguardInReleaseBuilds + shrinkResources false + proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro" + } + } + + configurations.configureEach { + resolutionStrategy { + force 'androidx.core:core:1.16.0' + force 'androidx.appcompat:appcompat:1.6.1' + } + } +} + +dependencies { + implementation("com.facebook.react:react-android") + // Agar Hermes band kar ke JSC chahie to: + // implementation jscFlavor + implementation 'com.google.android.gms:play-services-location:21.0.1' + implementation project(':CameraAI') + implementation "androidx.activity:activity-ktx:1.8.0" + // 🔹 ML Kit dependencies (IMPORTANT) + // Barcode scanning + implementation "com.google.mlkit:barcode-scanning:17.2.0" + // Text recognition (kyunki error me TextRecognizer aa raha hai) + implementation "com.google.mlkit:text-recognition:16.0.0" + // Import the Firebase BoM + implementation(platform("com.google.firebase:firebase-bom:34.10.0")) + implementation("com.google.firebase:firebase-analytics") + implementation 'com.google.firebase:firebase-messaging' + implementation "com.google.firebase:firebase-crashlytics" + implementation 'com.facebook.fresco:animated-gif:3.6.0' +} + diff --git a/android/app/debug.keystore b/android/app/debug.keystore new file mode 100644 index 0000000..364e105 Binary files /dev/null and b/android/app/debug.keystore differ diff --git a/android/app/google-services.json b/android/app/google-services.json new file mode 100644 index 0000000..9a631e9 --- /dev/null +++ b/android/app/google-services.json @@ -0,0 +1,30 @@ +{ + "project_info": { + "project_number": "291414129665", + "project_id": "performicsone-app", + "storage_bucket": "performicsone-app.firebasestorage.app" + }, + "client": [ + { + "client_info": { + "mobilesdk_app_id": "1:291414129665:android:ffd2b3fa837852cc4dd400", + "android_client_info": { + "package_name": "com.performics" + } + }, + "oauth_client": [], + "api_key": [ + { + "current_key": "AIzaSyAUUWpFm1yRdtloYHHBiQWryNI6PFvckso" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [] + } + } + } + ], + "configuration_version": "1", + "analytics_enabled": false +} \ No newline at end of file diff --git a/android/app/proguard-rules.pro b/android/app/proguard-rules.pro new file mode 100644 index 0000000..93056da --- /dev/null +++ b/android/app/proguard-rules.pro @@ -0,0 +1,32 @@ +# Add project specific ProGuard rules here. +# By default, the flags in this file are appended to flags specified +# in /usr/local/Cellar/android-sdk/24.3.3/tools/proguard/proguard-android.txt +# You can edit the include path and order by changing the proguardFiles +# directive in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# Add any project specific keep options here: +# --- React Native Camera & ML Kit keep rules --- + +# ML Kit barcode scanning +-keep class com.google.mlkit.vision.barcode.** { *; } +-dontwarn com.google.mlkit.vision.barcode.** + +# ML Kit vision common +-keep class com.google.mlkit.vision.common.** { *; } +-dontwarn com.google.mlkit.vision.common.** + +# ML Kit text recognition +-keep class com.google.mlkit.vision.text.** { *; } +-dontwarn com.google.mlkit.vision.text.** + +# React Native Camera (ya jo bhi tum use kar rahe ho jisme BarcodeDetectorAsyncTask hai) +-keep class org.reactnative.camera.** { *; } +-dontwarn org.reactnative.camera.** + +# Kabhi-kabhi internal detector classes bhi zaroori hote hain: +-keep class com.google.mlkit.vision.** { *; } +-dontwarn com.google.mlkit.vision.** + diff --git a/android/app/src/debug/AndroidManifest.xml b/android/app/src/debug/AndroidManifest.xml new file mode 100644 index 0000000..eb98c01 --- /dev/null +++ b/android/app/src/debug/AndroidManifest.xml @@ -0,0 +1,9 @@ + + + + + diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..e40b02a --- /dev/null +++ b/android/app/src/main/AndroidManifest.xml @@ -0,0 +1,82 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/android/app/src/main/assets/index.android.bundle b/android/app/src/main/assets/index.android.bundle new file mode 100644 index 0000000..17efcfb --- /dev/null +++ b/android/app/src/main/assets/index.android.bundle @@ -0,0 +1,2251 @@ +var __BUNDLE_START_TIME__=this.nativePerformanceNow?nativePerformanceNow():Date.now(),__DEV__=false,process=this.process||{},__METRO_GLOBAL_PREFIX__='';process.env=process.env||{};process.env.NODE_ENV=process.env.NODE_ENV||"production"; +!(function(r){"use strict";r.__r=i,r[`${__METRO_GLOBAL_PREFIX__}__d`]=function(r,n,o){if(null!=e[n])return;var i={dependencyMap:o,factory:r,hasError:!1,importedAll:t,importedDefault:t,isInitialized:!1,publicModule:{exports:{}}};e[n]=i},r.__c=o,r.__registerSegment=function(r,t,n){s[r]=t,n&&n.forEach((function(t){e[t]||v.has(t)||v.set(t,r)}))};var e=o(),t={},n={}.hasOwnProperty;function o(){return e=Object.create(null)}function i(r){var t=r,n=e[t];return n&&n.isInitialized?n.publicModule.exports:d(t,n)}function l(r){var n=r;if(e[n]&&e[n].importedDefault!==t)return e[n].importedDefault;var o=i(n),l=o&&o.__esModule?o.default:o;return e[n].importedDefault=l}function a(r){var o=r;if(e[o]&&e[o].importedAll!==t)return e[o].importedAll;var l,a=i(o);if(a&&a.__esModule)l=a;else{if(l={},a)for(var u in a)n.call(a,u)&&(l[u]=a[u]);l.default=a}return e[o].importedAll=l}i.importDefault=l,i.importAll=a,i.context=function(){throw new Error("The experimental Metro feature `require.context` is not enabled in your project.")};var u=!1;function d(e,t){if(!u&&r.ErrorUtils){var n;u=!0;try{n=_(e,t)}catch(e){r.ErrorUtils.reportFatalError(e)}return u=!1,n}return _(e,t)}var f=16,c=65535;function p(r){return{segmentId:r>>>f,localId:r&c}}i.unpackModuleId=p,i.packModuleId=function(r){return(r.segmentId<0){var o,u=null!==(o=v.get(t))&&void 0!==o?o:0,d=s[u];null!=d&&(d(t),n=e[t],v.delete(t))}var f=r.nativeRequire;if(!n&&f){var c=p(t),_=c.segmentId;f(c.localId,_),n=e[t]}if(!n)throw Error('Requiring unknown module "'+t+'".');if(n.hasError)throw n.error;n.isInitialized=!0;var h=n,m=h.factory,M=h.dependencyMap;try{var y=n.publicModule;return y.id=t,m(r,i,l,a,y,y.exports,M),n.factory=void 0,n.dependencyMap=void 0,y.exports}catch(r){throw n.hasError=!0,n.error=r,n.isInitialized=!1,n.publicModule.exports=void 0,r}}})('undefined'!=typeof globalThis?globalThis:'undefined'!=typeof global?global:'undefined'!=typeof window?window:this); +!(function(n){var e=(function(){function n(n,e){return n}function e(n){var e={};return n.forEach((function(n,t){e[n]=!0})),e}function t(n,t,a){if(n.formatValueCalls++,n.formatValueCalls>200)return`[TOO BIG formatValueCalls ${n.formatValueCalls} exceeded limit of 200]`;var f=r(n,t);if(f)return f;var c=Object.keys(t),s=e(c);if(d(t)&&(c.indexOf('message')>=0||c.indexOf('description')>=0))return o(t);if(0===c.length){if(v(t)){var g=t.name?': '+t.name:'';return n.stylize('[Function'+g+']','special')}if(p(t))return n.stylize(RegExp.prototype.toString.call(t),'regexp');if(y(t))return n.stylize(Date.prototype.toString.call(t),'date');if(d(t))return o(t)}var h,b,m='',j=!1,O=['{','}'];(h=t,Array.isArray(h)&&(j=!0,O=['[',']']),v(t))&&(m=' [Function'+(t.name?': '+t.name:'')+']');return p(t)&&(m=' '+RegExp.prototype.toString.call(t)),y(t)&&(m=' '+Date.prototype.toUTCString.call(t)),d(t)&&(m=' '+o(t)),0!==c.length||j&&0!=t.length?a<0?p(t)?n.stylize(RegExp.prototype.toString.call(t),'regexp'):n.stylize('[Object]','special'):(n.seen.push(t),b=j?i(n,t,a,s,c):c.map((function(e){return l(n,t,a,s,e,j)})),n.seen.pop(),u(b,m,O)):O[0]+m+O[1]}function r(n,e){if(s(e))return n.stylize('undefined','undefined');if('string'==typeof e){var t="'"+JSON.stringify(e).replace(/^"|"$/g,'').replace(/'/g,"\\'").replace(/\\"/g,'"')+"'";return n.stylize(t,'string')}return c(e)?n.stylize(''+e,'number'):a(e)?n.stylize(''+e,'boolean'):f(e)?n.stylize('null','null'):void 0}function o(n){return'['+Error.prototype.toString.call(n)+']'}function i(n,e,t,r,o){for(var i=[],u=0,a=e.length;u-1&&(a=l?a.split('\n').map((function(n){return' '+n})).join('\n').substr(2):'\n'+a.split('\n').map((function(n){return' '+n})).join('\n')):a=n.stylize('[Circular]','special')),s(u)){if(l&&i.match(/^\d+$/))return a;(u=JSON.stringify(''+i)).match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)?(u=u.substr(1,u.length-2),u=n.stylize(u,'name')):(u=u.replace(/'/g,"\\'").replace(/\\"/g,'"').replace(/(^"|"$)/g,"'"),u=n.stylize(u,'string'))}return u+': '+a}function u(n,e,t){return n.reduce((function(n,e){return e.indexOf('\n')>=0&&0,n+e.replace(/\u001b\[\d\d?m/g,'').length+1}),0)>60?t[0]+(''===e?'':e+'\n ')+' '+n.join(',\n ')+' '+t[1]:t[0]+e+' '+n.join(', ')+' '+t[1]}function a(n){return'boolean'==typeof n}function f(n){return null===n}function c(n){return'number'==typeof n}function s(n){return void 0===n}function p(n){return g(n)&&'[object RegExp]'===h(n)}function g(n){return'object'==typeof n&&null!==n}function y(n){return g(n)&&'[object Date]'===h(n)}function d(n){return g(n)&&('[object Error]'===h(n)||n instanceof Error)}function v(n){return'function'==typeof n}function h(n){return Object.prototype.toString.call(n)}function b(n,e){return Object.prototype.hasOwnProperty.call(n,e)}return function(e,r){return t({seen:[],formatValueCalls:0,stylize:n},e,r.depth)}})(),t=0,r=1,o=2,i=3,l=[];l[t]='debug',l[r]='log',l[o]='warning',l[i]='error';function u(t){return function(){var r;r=1===arguments.length&&'string'==typeof arguments[0]?arguments[0]:Array.prototype.map.call(arguments,(function(n){return e(n,{depth:10})})).join(', ');var u=arguments[0],a=t;'string'==typeof u&&'Warning: '===u.slice(0,9)&&a>=i&&(a=o),n.__inspectorLog&&n.__inspectorLog(l[a],r,[].slice.call(arguments),1),f.length&&(r=c('',r)),n.nativeLoggingHook(r,a)}}function a(n,e){return Array.apply(null,Array(e)).map((function(){return n}))}var f=[];function c(n,e){return f.join('')+n+' '+(e||'')}if(n.nativeLoggingHook){n.console;n.console={error:u(i),info:u(r),log:u(r),warn:u(o),trace:u(t),debug:u(t),table:function(e){if(!Array.isArray(e)){var t=e;for(var o in e=[],t)if(t.hasOwnProperty(o)){var i=t[o];i["(index)"]=o,e.push(i)}}if(0!==e.length){var l=Object.keys(e[0]).sort(),u=[],f=[];l.forEach((function(n,t){f[t]=n.length;for(var r=0;r';return function(){for(var r=arguments.length,u=new Array(r),e=0;e>>((3&e)<<3)&255;return n}function s(n){if(e.RNGetRandomValues)return e.RNGetRandomValues.getRandomBase64(n);if(e.ExpoRandom)return e.ExpoRandom.getRandomBase64String(n);if(g.ExpoModules)return g.ExpoModules.ExpoRandom.getRandomBase64String(n);throw new Error('Native module not found')}function c(){return'RN$Bridgeless'in g&&RN$Bridgeless,!1}'object'!=typeof g.crypto&&(g.crypto={}),'function'!=typeof g.crypto.getRandomValues&&(g.crypto.getRandomValues=function(n){if(!(n instanceof Int8Array||n instanceof Uint8Array||n instanceof Int16Array||n instanceof Uint16Array||n instanceof Int32Array||n instanceof Uint32Array||n instanceof Uint8ClampedArray))throw new o('Expected an integer array');if(n.byteLength>65536)throw new r('Can only request a maximum of 65536 bytes');return g.expo&&g.expo.modules&&g.expo.modules.ExpoCrypto&&g.expo.modules.ExpoCrypto.getRandomValues?(g.expo.modules.ExpoCrypto.getRandomValues(n),n):c()?i(n):(_r(d[7])(s(n.byteLength),new Uint8Array(n.buffer,n.byteOffset,n.byteLength)),n)})}),1,[2,3,6,17,56,18,74,416]); +__d((function(g,r,i,a,m,e,d){function t(o){return m.exports=t=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},m.exports.__esModule=!0,m.exports.default=m.exports,t(o)}m.exports=t,m.exports.__esModule=!0,m.exports.default=m.exports}),2,[]); +__d((function(g,r,i,a,m,_e,d){m.exports=function(e,o){if(o&&("object"==r(d[0]).default(o)||"function"==typeof o))return o;if(void 0!==o)throw new TypeError("Derived constructors may only return object or undefined");return r(d[1])(e)},m.exports.__esModule=!0,m.exports.default=m.exports}),3,[4,5]); +__d((function(g,r,i,a,m,e,d){function o(t){return m.exports=o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(o){return typeof o}:function(o){return o&&"function"==typeof Symbol&&o.constructor===Symbol&&o!==Symbol.prototype?"symbol":typeof o},m.exports.__esModule=!0,m.exports.default=m.exports,o(t)}m.exports=o,m.exports.__esModule=!0,m.exports.default=m.exports}),4,[]); +__d((function(g,r,i,a,m,_e,d){m.exports=function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e},m.exports.__esModule=!0,m.exports.default=m.exports}),5,[]); +__d((function(g,r,i,a,m,e,d){'use strict';m.exports={get AccessibilityInfo(){return r(d[0]).default},get ActivityIndicator(){return r(d[1]).default},get Button(){return r(d[2])},get DrawerLayoutAndroid(){return r(d[3])},get FlatList(){return r(d[4])},get Image(){return r(d[5])},get ImageBackground(){return r(d[6])},get InputAccessoryView(){return r(d[7])},get KeyboardAvoidingView(){return r(d[8]).default},get Modal(){return r(d[9])},get Pressable(){return r(d[10]).default},get ProgressBarAndroid(){return r(d[11])('progress-bar-android-moved',"ProgressBarAndroid has been extracted from react-native core and will be removed in a future release. It can now be installed and imported from '@react-native-community/progress-bar-android' instead of 'react-native'. See https://github.com/react-native-progress-view/progress-bar-android"),r(d[12])},get RefreshControl(){return r(d[13])},get SafeAreaView(){return r(d[14]).default},get ScrollView(){return r(d[15])},get SectionList(){return r(d[16]).default},get StatusBar(){return r(d[17])},get Switch(){return r(d[18]).default},get Text(){return r(d[19])},get TextInput(){return r(d[20])},get Touchable(){return r(d[21])},get TouchableHighlight(){return r(d[22])},get TouchableNativeFeedback(){return r(d[23])},get TouchableOpacity(){return r(d[24])},get TouchableWithoutFeedback(){return r(d[25])},get View(){return r(d[26])},get VirtualizedList(){return r(d[27])},get VirtualizedSectionList(){return r(d[28])},get ActionSheetIOS(){return r(d[29])},get Alert(){return r(d[30])},get Animated(){return r(d[31]).default},get Appearance(){return r(d[32])},get AppRegistry(){return r(d[33])},get AppState(){return r(d[34])},get BackHandler(){return r(d[35])},get Clipboard(){return r(d[11])('clipboard-moved',"Clipboard has been extracted from react-native core and will be removed in a future release. It can now be installed and imported from '@react-native-clipboard/clipboard' instead of 'react-native'. See https://github.com/react-native-clipboard/clipboard"),r(d[36])},get DeviceInfo(){return r(d[37])},get DevSettings(){return r(d[38])},get Dimensions(){return r(d[39]).default},get Easing(){return r(d[40]).default},get findNodeHandle(){return r(d[41]).findNodeHandle},get I18nManager(){return r(d[42])},get InteractionManager(){return r(d[43])},get Keyboard(){return r(d[44])},get LayoutAnimation(){return r(d[45])},get Linking(){return r(d[46])},get LogBox(){return r(d[47]).default},get NativeDialogManagerAndroid(){return r(d[48]).default},get NativeEventEmitter(){return r(d[49]).default},get Networking(){return r(d[50]).default},get PanResponder(){return r(d[51]).default},get PermissionsAndroid(){return r(d[52])},get PixelRatio(){return r(d[53]).default},get PushNotificationIOS(){return r(d[11])('pushNotificationIOS-moved',"PushNotificationIOS has been extracted from react-native core and will be removed in a future release. It can now be installed and imported from '@react-native-community/push-notification-ios' instead of 'react-native'. See https://github.com/react-native-push-notification-ios/push-notification-ios"),r(d[54])},get Settings(){return r(d[55])},get Share(){return r(d[56])},get StyleSheet(){return r(d[57])},get Systrace(){return r(d[58])},get ToastAndroid(){return r(d[59])},get TurboModuleRegistry(){return r(d[60])},get UIManager(){return r(d[61])},get unstable_batchedUpdates(){return r(d[41]).unstable_batchedUpdates},get useAnimatedValue(){return r(d[62]).default},get useColorScheme(){return r(d[63]).default},get useWindowDimensions(){return r(d[64]).default},get UTFSequence(){return r(d[65]).default},get Vibration(){return r(d[66])},get YellowBox(){return r(d[67])},get DeviceEventEmitter(){return r(d[68]).default},get DynamicColorIOS(){return r(d[69]).DynamicColorIOS},get NativeAppEventEmitter(){return r(d[70])},get NativeModules(){return r(d[71])},get Platform(){return r(d[72])},get PlatformColor(){return r(d[73]).PlatformColor},get processColor(){return r(d[74]).default},get requireNativeComponent(){return r(d[75]).default},get RootTagContext(){return r(d[76]).RootTagContext},get unstable_enableLogBox(){return function(){return console.warn('LogBox is enabled by default so there is no need to call unstable_enableLogBox() anymore. This is a no op and will be removed in the next version.')}},get ColorPropType(){return console.error("ColorPropType will be removed from React Native, along with all other PropTypes. We recommend that you migrate away from PropTypes and switch to a type system like TypeScript. If you need to continue using ColorPropType, migrate to the 'deprecated-react-native-prop-types' package."),r(d[77]).ColorPropType},get EdgeInsetsPropType(){return console.error("EdgeInsetsPropType will be removed from React Native, along with all other PropTypes. We recommend that you migrate away from PropTypes and switch to a type system like TypeScript. If you need to continue using EdgeInsetsPropType, migrate to the 'deprecated-react-native-prop-types' package."),r(d[77]).EdgeInsetsPropType},get PointPropType(){return console.error("PointPropType will be removed from React Native, along with all other PropTypes. We recommend that you migrate away from PropTypes and switch to a type system like TypeScript. If you need to continue using PointPropType, migrate to the 'deprecated-react-native-prop-types' package."),r(d[77]).PointPropType},get ViewPropTypes(){return console.error("ViewPropTypes will be removed from React Native, along with all other PropTypes. We recommend that you migrate away from PropTypes and switch to a type system like TypeScript. If you need to continue using ViewPropTypes, migrate to the 'deprecated-react-native-prop-types' package."),r(d[77]).ViewPropTypes}}}),6,[7,216,223,345,295,312,350,351,353,354,360,63,217,322,362,325,342,346,364,224,367,371,375,255,256,376,156,377,378,379,129,257,381,143,383,200,386,388,389,182,270,47,358,267,330,331,391,394,131,111,110,395,397,181,399,401,402,196,32,404,23,37,406,407,410,411,412,414,9,415,139,25,21,167,164,220,197,234]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var n=r(d[0])(r(d[1])),t=r(d[0])(r(d[2])),l=r(d[0])(r(d[3])),u=r(d[0])(r(d[4])),o=r(d[0])(r(d[5])),s='android'===t.default.OS?new Map([['change','touchExplorationDidChange'],['reduceMotionChanged','reduceMotionDidChange'],['screenReaderChanged','touchExplorationDidChange'],['accessibilityServiceChanged','accessibilityServiceDidChange']]):new Map([['announcementFinished','announcementFinished'],['boldTextChanged','boldTextChanged'],['change','screenReaderChanged'],['grayscaleChanged','grayscaleChanged'],['invertColorsChanged','invertColorsChanged'],['reduceMotionChanged','reduceMotionChanged'],['reduceTransparencyChanged','reduceTransparencyChanged'],['screenReaderChanged','screenReaderChanged']]),c={isBoldTextEnabled:function(){return'android'===t.default.OS?Promise.resolve(!1):new Promise((function(n,t){null!=o.default?o.default.getCurrentBoldTextState(n,t):t(null)}))},isGrayscaleEnabled:function(){return'android'===t.default.OS?Promise.resolve(!1):new Promise((function(n,t){null!=o.default?o.default.getCurrentGrayscaleState(n,t):t(null)}))},isInvertColorsEnabled:function(){return'android'===t.default.OS?Promise.resolve(!1):new Promise((function(n,t){null!=o.default?o.default.getCurrentInvertColorsState(n,t):t(null)}))},isReduceMotionEnabled:function(){return new Promise((function(n,l){'android'===t.default.OS?null!=u.default?u.default.isReduceMotionEnabled(n):l(null):null!=o.default?o.default.getCurrentReduceMotionState(n,l):l(null)}))},prefersCrossFadeTransitions:function(){return new Promise((function(n,l){if('android'===t.default.OS)return Promise.resolve(!1);null!=(null==o.default?void 0:o.default.getCurrentPrefersCrossFadeTransitionsState)?o.default.getCurrentPrefersCrossFadeTransitionsState(n,l):l(null)}))},isReduceTransparencyEnabled:function(){return'android'===t.default.OS?Promise.resolve(!1):new Promise((function(n,t){null!=o.default?o.default.getCurrentReduceTransparencyState(n,t):t(null)}))},isScreenReaderEnabled:function(){return new Promise((function(n,l){'android'===t.default.OS?null!=u.default?u.default.isTouchExplorationEnabled(n):l(null):null!=o.default?o.default.getCurrentVoiceOverState(n,l):l(null)}))},isAccessibilityServiceEnabled:function(){return new Promise((function(n,l){'android'===t.default.OS&&null!=u.default&&null!=u.default.isAccessibilityServiceEnabled?u.default.isAccessibilityServiceEnabled(n):l(null)}))},addEventListener:function(t,l){var u=s.get(t);return null==u?{remove:function(){}}:n.default.addListener(u,l)},setAccessibilityFocus:function(n){(0,l.default)(n,'focus')},sendAccessibilityEvent:function(n,l){'ios'===t.default.OS&&'click'===l||(0,r(d[6]).sendAccessibilityEvent)(n,l)},announceForAccessibility:function(n){'android'===t.default.OS?null==u.default||u.default.announceForAccessibility(n):null==o.default||o.default.announceForAccessibility(n)},announceForAccessibilityWithOptions:function(n,l){'android'===t.default.OS?null==u.default||u.default.announceForAccessibility(n):null!=o.default&&o.default.announceForAccessibilityWithOptions?null==o.default||o.default.announceForAccessibilityWithOptions(n,l):null==o.default||o.default.announceForAccessibility(n)},getRecommendedTimeoutMillis:function(n){return'android'===t.default.OS?new Promise((function(t,l){null!=u.default&&u.default.getRecommendedTimeoutMillis?u.default.getRecommendedTimeoutMillis(n,t):t(n)})):Promise.resolve(n)}};e.default=c}),7,[8,9,21,36,45,46,47]); +__d((function(g,r,i,a,m,_e,d){m.exports=function(e){return e&&e.__esModule?e:{default:e}},m.exports.__esModule=!0,m.exports.default=m.exports}),8,[]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var t=new(r(d[0])(r(d[1])).default);Object.defineProperty(g,'__rctDeviceEventEmitter',{configurable:!0,value:t});e.default=t}),9,[8,10]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var t=r(d[0])(r(d[1])),n=r(d[0])(r(d[2])),u=r(d[0])(r(d[3]));e.default=(0,u.default)((function t(){(0,n.default)(this,t),this._registry={}}),[{key:"addListener",value:function(t,n,u){if('function'!=typeof n)throw new TypeError('EventEmitter.addListener(...): 2nd argument must be a function.');var o=l(this._registry,t),s={context:u,listener:n,remove:function(){o.delete(s)}};return o.add(s),s}},{key:"emit",value:function(n){var u=this._registry[n];if(null!=u){for(var l=arguments.length,o=new Array(l>1?l-1:0),s=1;se.length)&&(r=e.length);for(var t=0,n=Array(r);t0?l[l.length-1]:null,c=l.length>1?l[l.length-2]:null,v='function'==typeof s,h='function'==typeof c;h&&r(d[1])(v,'Cannot have a non-function arg after a function arg.');var y=v?s:null,C=h?c:null,b=v+h,M=l.slice(0,l.length-b);if('sync'===o)return r(d[2]).callNativeSyncHook(n,t,M,C,y);r(d[2]).enqueueNativeCall(n,t,M,C,y)},u.type=o,u}function u(n,t){return-1!==n.indexOf(t)}function l(n,t){return Object.assign(t,n||{})}g.__fbGenNativeModule=n;var f={};if(g.nativeModuleProxy)f=g.nativeModuleProxy;else if(!g.nativeExtensions){var s=g.__fbBatchedBridgeConfig;r(d[1])(s,'__fbBatchedBridgeConfig is not set, cannot invoke native modules');var c=r(d[3]);(s.remoteModuleConfig||[]).forEach((function(o,u){var l=n(o,u);l&&(l.module?f[l.name]=l.module:c(f,l.name,{get:function(){return t(l.name,u)}}))}))}m.exports=f}),25,[26,24,30,35]); +__d((function(g,_r,i,a,m,_e,d){m.exports=function(e,t){return _r(d[0])(e)||_r(d[1])(e,t)||_r(d[2])(e,t)||_r(d[3])()},m.exports.__esModule=!0,m.exports.default=m.exports}),26,[27,28,15,29]); +__d((function(g,_r,i,a,m,e,d){m.exports=function(r){if(Array.isArray(r))return r},m.exports.__esModule=!0,m.exports.default=m.exports}),27,[]); +__d((function(g,_r,_i,_a,m,_e,d){m.exports=function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var l,n,u,o,f=[],i=!0,a=!1;try{if(u=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;i=!1}else for(;!(i=(l=u.call(r)).done)&&(f.push(l.value),f.length!==t);i=!0);}catch(e){a=!0,n=e}finally{try{if(!i&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(a)throw n}}return f}},m.exports.__esModule=!0,m.exports.default=m.exports}),28,[]); +__d((function(g,r,i,a,m,e,d){m.exports=function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")},m.exports.__esModule=!0,m.exports.default=m.exports}),29,[]); +__d((function(g,r,i,a,m,e,d){'use strict';var t=new(r(d[0]));Object.defineProperty(g,'__fbBatchedBridge',{configurable:!0,value:t}),m.exports=t}),30,[31]); +__d((function(g,r,i,a,m,e,d){'use strict';var t=(function(){function t(){r(d[0])(this,t),this._lazyCallableModules={},this._queue=[[],[],[],0],this._successCallbacks=new Map,this._failureCallbacks=new Map,this._callID=0,this._lastFlush=0,this._eventLoopStartTime=Date.now(),this._reactNativeMicrotasksCallback=null,this.callFunctionReturnFlushedQueue=this.callFunctionReturnFlushedQueue.bind(this),this.flushedQueue=this.flushedQueue.bind(this),this.invokeCallbackAndReturnFlushedQueue=this.invokeCallbackAndReturnFlushedQueue.bind(this)}return r(d[1])(t,[{key:"callFunctionReturnFlushedQueue",value:function(t,l,s){var u=this;return this.__guard((function(){u.__callFunction(t,l,s)})),this.flushedQueue()}},{key:"invokeCallbackAndReturnFlushedQueue",value:function(t,l){var s=this;return this.__guard((function(){s.__invokeCallback(t,l)})),this.flushedQueue()}},{key:"flushedQueue",value:function(){var t=this;this.__guard((function(){t.__callReactNativeMicrotasks()}));var l=this._queue;return this._queue=[[],[],[],this._callID],l[0].length?l:null}},{key:"getEventLoopRunningTime",value:function(){return Date.now()-this._eventLoopStartTime}},{key:"registerCallableModule",value:function(t,l){this._lazyCallableModules[t]=function(){return l}}},{key:"registerLazyCallableModule",value:function(t,l){var s,u=l;this._lazyCallableModules[t]=function(){return u&&(s=u(),u=null),s}}},{key:"getCallableModule",value:function(t){var l=this._lazyCallableModules[t];return l?l():null}},{key:"callNativeSyncHook",value:function(t,l,s,u,n){return this.processCallbacks(t,l,s,u,n),g.nativeCallSyncHook(t,l,s)}},{key:"processCallbacks",value:function(t,l,s,u,n){(u||n)&&(u&&s.push(this._callID<<1),n&&s.push(this._callID<<1|1),this._successCallbacks.set(this._callID,n),this._failureCallbacks.set(this._callID,u)),this._callID++}},{key:"enqueueNativeCall",value:function(t,l,s,u,n){this.processCallbacks(t,l,s,u,n),this._queue[0].push(t),this._queue[1].push(l),this._queue[2].push(s);var o=Date.now();if(g.nativeFlushQueueImmediate&&o-this._lastFlush>=5){var h=this._queue;this._queue=[[],[],[],this._callID],this._lastFlush=o,g.nativeFlushQueueImmediate(h)}r(d[2]).counterEvent('pending_js_to_native_queue',this._queue[0].length),this.__spy&&this.__spy({type:1,module:t+'',method:l,args:s})}},{key:"createDebugLookup",value:function(t,l,s){}},{key:"setReactNativeMicrotasksCallback",value:function(t){this._reactNativeMicrotasksCallback=t}},{key:"__guard",value:function(t){if(this.__shouldPauseOnThrow())t();else try{t()}catch(t){r(d[3]).reportFatalError(t)}}},{key:"__shouldPauseOnThrow",value:function(){return'undefined'!=typeof DebuggerInternal&&!0===DebuggerInternal.shouldPauseOnThrow}},{key:"__callReactNativeMicrotasks",value:function(){r(d[2]).beginEvent('JSTimers.callReactNativeMicrotasks()'),null!=this._reactNativeMicrotasksCallback&&this._reactNativeMicrotasksCallback(),r(d[2]).endEvent()}},{key:"__callFunction",value:function(t,l,s){this._lastFlush=Date.now(),this._eventLoopStartTime=this._lastFlush,this.__spy?r(d[2]).beginEvent(`${t}.${l}(${r(d[4]).default(s)})`):r(d[2]).beginEvent(`${t}.${l}(...)`),this.__spy&&this.__spy({type:0,module:t,method:l,args:s});var u=this.getCallableModule(t);if(!u){var n=Object.keys(this._lazyCallableModules),o=n.length,h=n.join(', '),c=!0===g.RN$Bridgeless?'true':'false';r(d[5])(!1,`Failed to call into JavaScript module method ${t}.${l}(). Module has not been registered as callable. Bridgeless Mode: ${c}. Registered callable JavaScript modules (n = ${o}): ${h}.\n A frequent cause of the error is that the application entry file path is incorrect. This can also happen when the JS bundle is corrupt or there is an early initialization error when loading React Native.`)}u[l]||r(d[5])(!1,`Failed to call into JavaScript module method ${t}.${l}(). Module exists, but the method is undefined.`),u[l].apply(u,s),r(d[2]).endEvent()}},{key:"__invokeCallback",value:function(t,l){this._lastFlush=Date.now(),this._eventLoopStartTime=this._lastFlush;var s=t>>>1,u=1&t?this._successCallbacks.get(s):this._failureCallbacks.get(s);u&&(this._successCallbacks.delete(s),this._failureCallbacks.delete(s),u.apply(void 0,r(d[6])(l)))}}],[{key:"spy",value:function(l){t.prototype.__spy=!0===l?function(t){console.log((0===t.type?'N->JS':'JS->N')+" : "+`${null!=t.module?t.module+'.':''}${t.method}`+`(${JSON.stringify(t.args)})`)}:!1===l?null:l}}])})();m.exports=t}),31,[17,18,32,33,34,24,11]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.beginAsyncEvent=function(o,f){var v=t;if(c()){t++;var u='function'==typeof o?o():o;g.nativeTraceBeginAsyncSection(n,u,v,f)}return v},e.beginEvent=function(t,o){if(c()){var f='function'==typeof t?t():t;g.nativeTraceBeginSection(n,f,o)}},e.counterEvent=function(t,o){if(c()){var f='function'==typeof t?t():t;g.nativeTraceCounter&&g.nativeTraceCounter(n,f,o)}},e.endAsyncEvent=function(t,o,f){if(c()){var v='function'==typeof t?t():t;g.nativeTraceEndAsyncSection(n,v,o,f)}},e.endEvent=function(t){c()&&g.nativeTraceEndSection(n,t)},e.isEnabled=c,e.setEnabled=function(n){};var n=131072,t=0;function c(){return g.nativeTraceIsTracing?g.nativeTraceIsTracing(n):Boolean(g.__RCTProfileIsProfiling)}}),32,[]); +__d((function(g,r,i,a,m,e,d){m.exports=g.ErrorUtils}),33,[]); +__d((function(g,r,i,a,m,_e,d){Object.defineProperty(_e,"__esModule",{value:!0}),_e.createStringifySafeWithLimits=e,_e.default=void 0;var t=r(d[0])(r(d[1]));function e(e){var n=e.maxDepth,f=void 0===n?Number.POSITIVE_INFINITY:n,u=e.maxStringLimit,o=void 0===u?Number.POSITIVE_INFINITY:u,l=e.maxArrayLimit,c=void 0===l?Number.POSITIVE_INFINITY:l,s=e.maxObjectKeysLimit,y=void 0===s?Number.POSITIVE_INFINITY:s,h=[];function I(e,n){for(;h.length&&this!==h[0];)h.shift();if('string'==typeof n){var u='...(truncated)...';return n.length>o+17?n.substring(0,o)+u:n}if('object'!=typeof n||null===n)return n;var l=n;if(Array.isArray(n))h.length>=f?l=`[ ... array with ${n.length} values ... ]`:n.length>c&&(l=n.slice(0,c).concat([`... extra ${n.length-c} values truncated ...`]));else{(0,t.default)('object'==typeof n,'This was already found earlier');var s=Object.keys(n);if(h.length>=f)l=`{ ... object with ${s.length} keys ... }`;else if(s.length>y){for(var I of(l={},s.slice(0,y)))l[I]=n[I];l['...(truncated keys)...']=s.length-y}}return h.unshift(l),l}return function(t){if(void 0===t)return'undefined';if(null===t)return'null';if('function'==typeof t)try{return t.toString()}catch(t){return'[function unknown]'}else{if(t instanceof Error)return t.name+': '+t.message;try{var e=JSON.stringify(t,I);return void 0===e?'["'+typeof t+'" failed to stringify]':e}catch(e){if('function'==typeof t.toString)try{return t.toString()}catch(t){}}}return'["'+typeof t+'" failed to stringify]'}}var n=e({maxDepth:10,maxStringLimit:100,maxArrayLimit:50,maxObjectKeysLimit:50});_e.default=n}),34,[8,24]); +__d((function(g,r,i,a,m,e,d){'use strict';m.exports=function(t,n,u){var b,c=u.get,o=!1!==u.enumerable,f=!1!==u.writable,l=!1;function s(u){b=u,l=!0,Object.defineProperty(t,n,{value:u,configurable:!0,enumerable:o,writable:f})}Object.defineProperty(t,n,{get:function(){return l||(l=!0,s(c())),b},set:s,configurable:!0,enumerable:o})}}),35,[]); +__d((function(g,r,i,a,m,e,d){var t=r(d[0])(r(d[1]));m.exports=function(s,c){'focus'===c&&t.default.sendAccessibilityEvent(s,t.default.getConstants().AccessibilityEventTypes.typeViewFocused),'click'===c&&t.default.sendAccessibilityEvent(s,t.default.getConstants().AccessibilityEventTypes.typeViewClicked)}}),36,[8,37]); +__d((function(g,r,i,a,m,e,d){var n=r(d[0])(r(d[1]));function o(n){return n%2==0}var t=!0===g.RN$Bridgeless?r(d[2]):r(d[3]),u=Object.assign({},t,{measure:function(u,s){if(o(u)){var f=(0,n.default)((0,r(d[4]).getFabricUIManager)()),c=f.findShadowNodeByTag_DEPRECATED(u);c?f.measure(c,s):(console.warn(`measure cannot find view with tag #${u}`),s())}else t.measure(u,s)},measureInWindow:function(u,s){if(o(u)){var f=(0,n.default)((0,r(d[4]).getFabricUIManager)()),c=f.findShadowNodeByTag_DEPRECATED(u);c?f.measureInWindow(c,s):(console.warn(`measure cannot find view with tag #${u}`),s())}else t.measureInWindow(u,s)},measureLayout:function(u,s,f,c){if(o(u)){var l=(0,n.default)((0,r(d[4]).getFabricUIManager)()),w=l.findShadowNodeByTag_DEPRECATED(u),E=l.findShadowNodeByTag_DEPRECATED(s);if(!w||!E)return;l.measureLayout(w,E,f,c)}else t.measureLayout(u,s,f,c)},measureLayoutRelativeToParent:function(u,s,f){if(o(u)){console.warn('RCTUIManager.measureLayoutRelativeToParent method is deprecated and it will not be implemented in newer versions of RN (Fabric) - T47686450');var c=(0,n.default)((0,r(d[4]).getFabricUIManager)()),l=c.findShadowNodeByTag_DEPRECATED(u);l&&c.measure(l,(function(n,o,t,u,s,c){f(n,o,t,u)}))}else t.measureLayoutRelativeToParent(u,s,f)},dispatchViewManagerCommand:function(u,s,f){if(o(u)){var c=(0,n.default)((0,r(d[4]).getFabricUIManager)()),l=c.findShadowNodeByTag_DEPRECATED(u);l&&(s=`${s}`,c.dispatchCommand(l,s,f))}else t.dispatchViewManagerCommand(u,s,f)}});m.exports=u}),37,[8,38,39,41,44]); +__d((function(g,r,i,a,m,e,d){'use strict';function t(t,o){if(null!=t)return t;var n=new Error(void 0!==o?o:'Got unexpected '+t);throw n.framesToPop=1,n}m.exports=t,m.exports.default=t,Object.defineProperty(m.exports,'__esModule',{value:!0})}),38,[]); +__d((function(g,r,i,a,m,e,d){'use strict';var n=function(n){return"[ReactNative Architecture][JS] '"+n+"' is not available in the new React Native architecture."};m.exports={getViewManagerConfig:function(o){return console.error(n('getViewManagerConfig')+'Use hasViewManagerConfig instead. viewManagerName: '+o),null},hasViewManagerConfig:function(n){return(0,r(d[0]).unstable_hasComponent)(n)},getConstants:function(){return console.error(n('getConstants')),{}},getConstantsForViewManager:function(o){return console.error(n('getConstantsForViewManager')),{}},getDefaultEventTypes:function(){return console.error(n('getDefaultEventTypes')),[]},lazilyLoadView:function(o){return console.error(n('lazilyLoadView')),{}},createView:function(o,t,u,s){return console.error(n('createView'))},updateView:function(o,t,u){return console.error(n('updateView'))},focus:function(o){return console.error(n('focus'))},blur:function(o){return console.error(n('blur'))},findSubviewIn:function(o,t,u){return console.error(n('findSubviewIn'))},dispatchViewManagerCommand:function(o,t,u){return console.error(n('dispatchViewManagerCommand'))},measure:function(o,t){return console.error(n('measure'))},measureInWindow:function(o,t){return console.error(n('measureInWindow'))},viewIsDescendantOf:function(o,t,u){return console.error(n('viewIsDescendantOf'))},measureLayout:function(o,t,u,s){return console.error(n('measureLayout'))},measureLayoutRelativeToParent:function(o,t,u){return console.error(n('measureLayoutRelativeToParent'))},setJSResponder:function(o,t){return console.error(n('setJSResponder'))},clearJSResponder:function(){},configureNextLayoutAnimation:function(o,t,u){return console.error(n('configureNextLayoutAnimation'))},removeSubviewsFromContainerWithID:function(o){return console.error(n('removeSubviewsFromContainerWithID'))},replaceExistingNonRootView:function(o,t){return console.error(n('replaceExistingNonRootView'))},setChildren:function(o,t){return console.error(n('setChildren'))},manageChildren:function(o,t,u,s,c,l){return console.error(n('manageChildren'))},setLayoutAnimationEnabledExperimental:function(o){console.error(n('setLayoutAnimationEnabledExperimental'))},sendAccessibilityEvent:function(o,t){return console.error(n('sendAccessibilityEvent'))},showPopupMenu:function(o,t,u,s){return console.error(n('showPopupMenu'))},dismissPopupMenu:function(){return console.error(n('dismissPopupMenu'))}}}),39,[40]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.unstable_hasComponent=function(t){var o=n.get(t);if(null==o){if(!g.__nativeComponentRegistry__hasComponent)throw`unstable_hasComponent('${t}'): Global function is not registered`;o=g.__nativeComponentRegistry__hasComponent(t),n.set(t,o)}return o};var n=new Map}),40,[]); +__d((function(g,r,i,a,m,_e,d){var n=r(d[0])(r(d[1])),e={},t=new Set,o={},f=!1;function u(){return f||(o=n.default.getConstants(),f=!0),o}function c(o){if(void 0===e[o]&&g.nativeCallSyncHook&&n.default.getConstantsForViewManager)try{e[o]=n.default.getConstantsForViewManager(o)}catch(n){console.error("NativeUIManager.getConstantsForViewManager('"+o+"') threw an exception.",n),e[o]=null}var f=e[o];if(f)return f;if(!g.nativeCallSyncHook)return f;if(n.default.lazilyLoadView&&!t.has(o)){var c=n.default.lazilyLoadView(o);t.add(o),null!=c&&null!=c.viewConfig&&(u()[o]=c.viewConfig,l(o))}return e[o]}var s=Object.assign({},n.default,{createView:function(e,t,o,f){n.default.createView(e,t,o,f)},getConstants:function(){return u()},getViewManagerConfig:function(n){return c(n)},hasViewManagerConfig:function(n){return null!=c(n)}});function l(n){var t=u()[n];e[n]=t,t.Manager&&(r(d[2])(t,'Constants',{get:function(){var n=r(d[3])[t.Manager],e={};return n&&Object.keys(n).forEach((function(t){var o=n[t];'function'!=typeof o&&(e[t]=o)})),e}}),r(d[2])(t,'Commands',{get:function(){var n=r(d[3])[t.Manager],e={},o=0;return n&&Object.keys(n).forEach((function(t){'function'==typeof n[t]&&(e[t]=o++)})),e}}))}n.default.getViewManagerConfig=s.getViewManagerConfig,u().ViewManagerNames&&n.default.getConstants().ViewManagerNames.forEach((function(e){r(d[2])(n.default,e,{get:function(){return n.default.getConstantsForViewManager(e)}})})),g.nativeCallSyncHook||Object.keys(u()).forEach((function(t){r(d[4]).includes(t)||(e[t]||(e[t]=u()[t]),r(d[2])(n.default,t,{get:function(){return console.warn(`Accessing view manager configs directly off UIManager via UIManager['${t}'] is no longer supported. Use UIManager.getViewManagerConfig('${t}') instead.`),s.getViewManagerConfig(t)}}))})),m.exports=s}),41,[8,42,35,25,43]); +__d((function(g,_r,_i,a,m,_e,d){Object.defineProperty(_e,"__esModule",{value:!0}),_e.default=void 0;var e=(function(e,t){if("function"==typeof WeakMap)var r=new WeakMap,n=new WeakMap;return(function(e,t){if(!t&&e&&e.__esModule)return e;var f,o,u={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return u;if(f=t?n:r){if(f.has(e))return f.get(e);f.set(e,u)}for(var i in e)"default"!==i&&{}.hasOwnProperty.call(e,i)&&((o=(f=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,i))&&(o.get||o.set)?f(u,i,o):u[i]=e[i]);return u})(e,t)})(_r(d[0]));_e.default=e.getEnforcing('UIManager')}),42,[23]); +__d((function(g,r,i,a,m,e,d){'use strict';m.exports=['clearJSResponder','configureNextLayoutAnimation','createView','dismissPopupMenu','dispatchViewManagerCommand','findSubviewIn','getConstantsForViewManager','getDefaultEventTypes','manageChildren','measure','measureInWindow','measureLayout','measureLayoutRelativeToParent','removeRootView','removeSubviewsFromContainerWithID','replaceExistingNonRootView','sendAccessibilityEvent','setChildren','setJSResponder','setLayoutAnimationEnabledExperimental','showPopupMenu','updateView','viewIsDescendantOf','PopupMenu','LazyViewManagersEnabled','ViewManagerNames','StyleConstants','AccessibilityEventTypes','UIView','getViewManagerConfig','hasViewManagerConfig','blur','focus','genericBubblingEventTypes','genericDirectEventTypes','lazilyLoadView']}),43,[]); +__d((function(g,r,i,a,m,e,d){'use strict';Object.defineProperty(e,"__esModule",{value:!0}),e.getFabricUIManager=function(){return g.nativeFabricUIManager}}),44,[]); +__d((function(g,_r,_i,a,m,_e,d){Object.defineProperty(_e,"__esModule",{value:!0}),_e.default=void 0;var e=(function(e,t){if("function"==typeof WeakMap)var r=new WeakMap,n=new WeakMap;return(function(e,t){if(!t&&e&&e.__esModule)return e;var f,o,u={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return u;if(f=t?n:r){if(f.has(e))return f.get(e);f.set(e,u)}for(var i in e)"default"!==i&&{}.hasOwnProperty.call(e,i)&&((o=(f=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,i))&&(o.get||o.set)?f(u,i,o):u[i]=e[i]);return u})(e,t)})(_r(d[0]));_e.default=e.get('AccessibilityInfo')}),45,[23]); +__d((function(g,_r,_i,a,m,_e,d){Object.defineProperty(_e,"__esModule",{value:!0}),_e.default=void 0;var e=(function(e,t){if("function"==typeof WeakMap)var r=new WeakMap,n=new WeakMap;return(function(e,t){if(!t&&e&&e.__esModule)return e;var f,o,u={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return u;if(f=t?n:r){if(f.has(e))return f.get(e);f.set(e,u)}for(var i in e)"default"!==i&&{}.hasOwnProperty.call(e,i)&&((o=(f=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,i))&&(o.get||o.set)?f(u,i,o):u[i]=e[i]);return u})(e,t)})(_r(d[0]));_e.default=e.get('AccessibilityManager')}),46,[23]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),Object.keys(r(d[0])).forEach((function(n){"default"!==n&&"__esModule"!==n&&(n in e&&e[n]===r(d[0])[n]||Object.defineProperty(e,n,{enumerable:!0,get:function(){return r(d[0])[n]}}))}))}),47,[48]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.dispatchCommand=function(n,t,o){return!0===g.RN$Bridgeless?r(d[0]).dispatchCommand(n,t,o):r(d[1]).dispatchCommand(n,t,o)},e.findHostInstance_DEPRECATED=function(n){return r(d[1]).findHostInstance_DEPRECATED(n)},e.findNodeHandle=function(n){return r(d[1]).findNodeHandle(n)},e.isProfilingRenderer=function(){return Boolean(!1)},e.renderElement=function(n){var t=n.element,o=n.rootTag,u=n.useFabric,c=n.useConcurrentRoot;u?r(d[0]).render(t,o,null,c):r(d[1]).render(t,o)},e.sendAccessibilityEvent=function(n,t){return r(d[1]).sendAccessibilityEvent(n,t)},e.unmountComponentAtNodeAndRemoveContainer=function(n){var t=n;r(d[1]).unmountComponentAtNodeAndRemoveContainer(t)},e.unstable_batchedUpdates=function(n,t){return r(d[1]).unstable_batchedUpdates(n,t)}}),48,[49,214]); +__d((function(g,r,i,a,m,e,d){'use strict';var t;t=r(d[0]),g.RN$Bridgeless?g.RN$stopSurface=t.stopSurface:r(d[1]).BatchedBridge.registerCallableModule('ReactFabric',t),m.exports=t}),49,[50,202]); +__d((function(e,n,t,r,l,a,i){"use strict";n(i[0]);var u=n(i[1]);function o(e,n,t,r,l,a,i,u,o){var s=Array.prototype.slice.call(arguments,3);try{n.apply(t,s)}catch(e){this.onError(e)}}var s=!1,c=null,d=!1,f=null,p={onError:function(e){s=!0,c=e}};function h(e,n,t,r,l,a,i,u,d){s=!1,c=null,o.apply(p,arguments)}function g(e,n,t,r,l,a,i,u,o){if(h.apply(this,arguments),s){if(!s)throw Error("clearCaughtError was called but no error was captured. This error is likely caused by a bug in React. Please file an issue.");var p=c;s=!1,c=null,d||(d=!0,f=p)}}var m=Array.isArray,v=null,b=null,y=null;function S(e,n,t){var r=e.type||"unknown-event";e.currentTarget=y(t),g(r,n,void 0,e),e.currentTarget=null}function k(e){var n=e._dispatchListeners,t=e._dispatchInstances;if(m(n))throw Error("executeDirectDispatch(...): Invalid `event`.");return e.currentTarget=n?y(t):null,n=n?n(e):null,e.currentTarget=null,e._dispatchListeners=null,e._dispatchInstances=null,n}var w=Object.assign;function x(){return!0}function _(){return!1}function E(e,n,t,r){for(var l in this.dispatchConfig=e,this._targetInst=n,this.nativeEvent=t,this._dispatchInstances=this._dispatchListeners=null,e=this.constructor.Interface)e.hasOwnProperty(l)&&((n=e[l])?this[l]=n(t):"target"===l?this.target=r:this[l]=t[l]);return this.isDefaultPrevented=(null!=t.defaultPrevented?t.defaultPrevented:!1===t.returnValue)?x:_,this.isPropagationStopped=_,this}function P(e,n,t,r){if(this.eventPool.length){var l=this.eventPool.pop();return this.call(l,e,n,t,r),l}return new this(e,n,t,r)}function R(e){if(!(e instanceof this))throw Error("Trying to release an event instance into a pool of a different type.");e.destructor(),10>this.eventPool.length&&this.eventPool.push(e)}function T(e){e.getPooled=P,e.eventPool=[],e.release=R}w(E.prototype,{preventDefault:function(){this.defaultPrevented=!0;var e=this.nativeEvent;e&&(e.preventDefault?e.preventDefault():"unknown"!=typeof e.returnValue&&(e.returnValue=!1),this.isDefaultPrevented=x)},stopPropagation:function(){var e=this.nativeEvent;e&&(e.stopPropagation?e.stopPropagation():"unknown"!=typeof e.cancelBubble&&(e.cancelBubble=!0),this.isPropagationStopped=x)},persist:function(){this.isPersistent=x},isPersistent:_,destructor:function(){var e,n=this.constructor.Interface;for(e in n)this[e]=null;this.nativeEvent=this._targetInst=this.dispatchConfig=null,this.isPropagationStopped=this.isDefaultPrevented=_,this._dispatchInstances=this._dispatchListeners=null}}),E.Interface={type:null,target:null,currentTarget:function(){return null},eventPhase:null,bubbles:null,cancelable:null,timeStamp:function(e){return e.timeStamp||Date.now()},defaultPrevented:null,isTrusted:null},E.extend=function(e){function n(){}function t(){return r.apply(this,arguments)}var r=this;n.prototype=r.prototype;var l=new n;return w(l,t.prototype),t.prototype=l,t.prototype.constructor=t,t.Interface=w({},r.Interface,e),t.extend=r.extend,T(t),t},T(E);var N=E.extend({touchHistory:function(){return null}});function C(e){return"topTouchStart"===e}function z(e){return"topTouchMove"===e}var I=["topTouchStart"],L=["topTouchMove"],U=["topTouchCancel","topTouchEnd"],M=[],F={touchBank:M,numberActiveTouches:0,indexOfSingleActiveTouch:-1,mostRecentTimeStamp:0};function D(e){return e.timeStamp||e.timestamp}function H(e){if(null==(e=e.identifier))throw Error("Touch object is missing identifier.");return e}function A(e){var n=H(e),t=M[n];t?(t.touchActive=!0,t.startPageX=e.pageX,t.startPageY=e.pageY,t.startTimeStamp=D(e),t.currentPageX=e.pageX,t.currentPageY=e.pageY,t.currentTimeStamp=D(e),t.previousPageX=e.pageX,t.previousPageY=e.pageY,t.previousTimeStamp=D(e)):(t={touchActive:!0,startPageX:e.pageX,startPageY:e.pageY,startTimeStamp:D(e),currentPageX:e.pageX,currentPageY:e.pageY,currentTimeStamp:D(e),previousPageX:e.pageX,previousPageY:e.pageY,previousTimeStamp:D(e)},M[n]=t),F.mostRecentTimeStamp=D(e)}function j(e){var n=M[H(e)];n&&(n.touchActive=!0,n.previousPageX=n.currentPageX,n.previousPageY=n.currentPageY,n.previousTimeStamp=n.currentTimeStamp,n.currentPageX=e.pageX,n.currentPageY=e.pageY,n.currentTimeStamp=D(e),F.mostRecentTimeStamp=D(e))}function Q(e){var n=M[H(e)];n&&(n.touchActive=!1,n.previousPageX=n.currentPageX,n.previousPageY=n.currentPageY,n.previousTimeStamp=n.currentTimeStamp,n.currentPageX=e.pageX,n.currentPageY=e.pageY,n.currentTimeStamp=D(e),F.mostRecentTimeStamp=D(e))}var B,W={instrument:function(e){B=e},recordTouchTrack:function(e,n){if(null!=B&&B(e,n),z(e))n.changedTouches.forEach(j);else if(C(e))n.changedTouches.forEach(A),F.numberActiveTouches=n.touches.length,1===F.numberActiveTouches&&(F.indexOfSingleActiveTouch=n.touches[0].identifier);else if(("topTouchEnd"===e||"topTouchCancel"===e)&&(n.changedTouches.forEach(Q),F.numberActiveTouches=n.touches.length,1===F.numberActiveTouches))for(e=0;e=t)throw Error("EventPluginRegistry: Cannot inject event plugins that do not exist in the plugin ordering, `"+e+"`.");if(!se[t]){if(!n.extractEvents)throw Error("EventPluginRegistry: Event plugins must implement an `extractEvents` method, but `"+e+"` does not.");for(var r in se[t]=n,t=n.eventTypes){var l=void 0,a=t[r],i=r;if(ce.hasOwnProperty(i))throw Error("EventPluginRegistry: More than one plugin attempted to publish the same event name, `"+i+"`.");ce[i]=a;var u=a.phasedRegistrationNames;if(u){for(l in u)u.hasOwnProperty(l)&&oe(u[l],n);l=!0}else a.registrationName?(oe(a.registrationName,n),l=!0):l=!1;if(!l)throw Error("EventPluginRegistry: Failed to publish event `"+r+"` for plugin `"+e+"`.")}}}}function oe(e,n){if(de[e])throw Error("EventPluginRegistry: More than one plugin attempted to publish the same registration name, `"+e+"`.");de[e]=n}var se=[],ce={},de={};function fe(e,t,r,l){var a=e.stateNode;if(null===a)return null;if(null===(e=v(a)))return null;if((e=e[t])&&"function"!=typeof e)throw Error("Expected `"+t+"` listener to be a function, instead got a value of `"+typeof e+"` type.");if(!(l&&a.canonical&&a.canonical._eventListeners))return e;var u=[];e&&u.push(e);var o="captured"===r,s=o?"rn:"+t.replace(/Capture$/,""):"rn:"+t;return a.canonical._eventListeners[s]&&0>>=0)?32:31-(gn(e)/mn|0)|0},gn=Math.log,mn=Math.LN2;var vn=64,bn=4194304;function yn(e){switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return 4194240&e;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return 130023424&e;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return e}}function Sn(e,n){var t=e.pendingLanes;if(0===t)return 0;var r=0,l=e.suspendedLanes,a=e.pingedLanes,i=268435455&t;if(0!==i){var u=i&~l;0!==u?r=yn(u):0!==(a&=i)&&(r=yn(a))}else 0!==(i=t&~l)?r=yn(i):0!==a&&(r=yn(a));if(0===r)return 0;if(0!==n&&n!==r&&0==(n&l)&&((l=r&-r)>=(a=n&-n)||16===l&&0!=(4194240&a)))return n;if(0!=(4&r)&&(r|=16&t),0!==(n=e.entangledLanes))for(e=e.entanglements,n&=r;0t;t++)n.push(e);return n}function En(e,n,t){e.pendingLanes|=n,536870912!==n&&(e.suspendedLanes=0,e.pingedLanes=0),(e=e.eventTimes)[n=31-hn(n)]=t}function Pn(e,n){var t=e.pendingLanes&~n;e.pendingLanes=n,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=n,e.mutableReadLanes&=n,e.entangledLanes&=n,n=e.entanglements;var r=e.eventTimes;for(e=e.expirationTimes;0at||(e.current=lt[at],lt[at]=null,at--)}function ot(e,n){at++,lt[at]=e.current,e.current=n}var st={},ct=it(st),dt=it(!1),ft=st;function pt(e,n){var t=e.type.contextTypes;if(!t)return st;var r=e.stateNode;if(r&&r.__reactInternalMemoizedUnmaskedChildContext===n)return r.__reactInternalMemoizedMaskedChildContext;var l,a={};for(l in t)a[l]=n[l];return r&&((e=e.stateNode).__reactInternalMemoizedUnmaskedChildContext=n,e.__reactInternalMemoizedMaskedChildContext=a),a}function ht(e){return null!=(e=e.childContextTypes)}function gt(){ut(dt),ut(ct)}function mt(e,n,t){if(ct.current!==st)throw Error("Unexpected context found on stack. This error is likely caused by a bug in React. Please file an issue.");ot(ct,n),ot(dt,t)}function vt(e,n,t){var r=e.stateNode;if(n=n.childContextTypes,"function"!=typeof r.getChildContext)return t;for(var l in r=r.getChildContext())if(!(l in n))throw Error((Be(e)||"Unknown")+'.getChildContext(): key "'+l+'" is not defined in childContextTypes.');return w({},t,r)}function bt(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||st,ft=ct.current,ot(ct,e),ot(dt,dt.current),!0}function yt(e,n,t){var r=e.stateNode;if(!r)throw Error("Expected to have an instance by this point. This error is likely caused by a bug in React. Please file an issue.");t?(e=vt(e,n,ft),r.__reactInternalMemoizedMergedChildContext=e,ut(dt),ut(ct),ot(ct,e)):ut(dt),ot(dt,t)}var St="function"==typeof Object.is?Object.is:function(e,n){return e===n&&(0!==e||1/e==1/n)||e!=e&&n!=n},kt=null,wt=!1,xt=!1;function _t(){if(!xt&&null!==kt){xt=!0;var e=0,t=Tn;try{var r=kt;for(Tn=1;eg?(m=h,h=null):m=h.sibling;var v=f(l,h,u[g],o);if(null===v){null===h&&(h=m);break}e&&h&&null===v.alternate&&n(l,h),i=a(v,i,g),null===c?s=v:c.sibling=v,c=v,h=m}if(g===u.length)return t(l,h),s;if(null===h){for(;gg?(m=h,h=null):m=h.sibling;var b=f(l,h,v.value,o);if(null===b){null===h&&(h=m);break}e&&h&&null===b.alternate&&n(l,h),i=a(b,i,g),null===c?s=b:c.sibling=b,c=b,h=m}if(v.done)return t(l,h),s;if(null===h){for(;!v.done;g++,v=u.next())null!==(v=d(l,v.value,o))&&(i=a(v,i,g),null===c?s=v:c.sibling=v,c=v);return s}for(h=r(l,h);!v.done;g++,v=u.next())null!==(v=p(h,l,g,v.value,o))&&(e&&null!==v.alternate&&h.delete(null===v.key?g:v.key),i=a(v,i,g),null===c?s=v:c.sibling=v,c=v);return e&&h.forEach((function(e){return n(l,e)})),s}return function e(r,a,u,o){if("object"==typeof u&&null!==u&&u.type===Te&&null===u.key&&(u=u.props.children),"object"==typeof u&&null!==u){switch(u.$$typeof){case Pe:e:{for(var s=u.key,c=a;null!==c;){if(c.key===s){if((s=u.type)===Te){if(7===c.tag){t(r,c.sibling),(a=l(c,u.props.children)).return=r,r=a;break e}}else if(c.elementType===s||"object"==typeof s&&null!==s&&s.$$typeof===De&&hr(s)===c.type){t(r,c.sibling),(a=l(c,u.props)).ref=fr(r,c,u),a.return=r,r=a;break e}t(r,c);break}n(r,c),c=c.sibling}u.type===Te?((a=Wi(u.props.children,r.mode,o,u.key)).return=r,r=a):((o=Bi(u.type,u.key,u.props,null,r.mode,o)).ref=fr(r,a,u),o.return=r,r=o)}return i(r);case Re:e:{for(c=u.key;null!==a;){if(a.key===c){if(4===a.tag&&a.stateNode.containerInfo===u.containerInfo&&a.stateNode.implementation===u.implementation){t(r,a.sibling),(a=l(a,u.children||[])).return=r,r=a;break e}t(r,a);break}n(r,a),a=a.sibling}(a=Yi(u,r.mode,o)).return=r,r=a}return i(r);case De:return e(r,a,(c=u._init)(u._payload),o)}if(m(u))return h(r,a,u,o);if(je(u))return g(r,a,u,o);pr(r,u)}return"string"==typeof u&&""!==u||"number"==typeof u?(u=""+u,null!==a&&6===a.tag?(t(r,a.sibling),(a=l(a,u)).return=r,r=a):(t(r,a),(a=Vi(u,r.mode,o)).return=r,r=a),i(r)):t(r,a)}}var mr=gr(!0),vr=gr(!1),br={},yr=it(br),Sr=it(br),kr=it(br);function wr(e){if(e===br)throw Error("Expected host context to exist. This error is likely caused by a bug in React. Please file an issue.");return e}function xr(e,n){ot(kr,n),ot(Sr,e),ot(yr,br),ut(yr),ot(yr,{isInAParentText:!1})}function _r(){ut(yr),ut(Sr),ut(kr)}function Er(e){wr(kr.current);var n=wr(yr.current),t=e.type;t="AndroidTextInput"===t||"RCTMultilineTextInputView"===t||"RCTSinglelineTextInputView"===t||"RCTText"===t||"RCTVirtualText"===t,n!==(t=n.isInAParentText!==t?{isInAParentText:t}:n)&&(ot(Sr,e),ot(yr,t))}function Pr(e){Sr.current===e&&(ut(yr),ut(Sr))}var Rr=it(0);function Tr(e){for(var n=e;null!==n;){if(13===n.tag){var t=n.memoizedState;if(null!==t&&(null===t.dehydrated||Cn()||Cn()))return n}else if(19===n.tag&&void 0!==n.memoizedProps.revealOrder){if(0!=(128&n.flags))return n}else if(null!==n.child){n.child.return=n,n=n.child;continue}if(n===e)break;for(;null===n.sibling;){if(null===n.return||n.return===e)return null;n=n.return}n.sibling.return=n.return,n=n.sibling}return null}var Nr=[];function Cr(){for(var e=0;et?t:4,e(!0);var r=Ir.transition;Ir.transition={};try{e(!1),n()}finally{Tn=t,Ir.transition=r}}function vl(){return Or().memoizedState}function bl(e,n,t){var r=oi(e);if(t={lane:r,action:t,hasEagerState:!1,eagerState:null,next:null},Sl(e))kl(n,t);else if(null!==(t=$t(e,n,t,r))){si(t,e,r,ui()),wl(t,n,r)}}function yl(e,n,t){var r=oi(e),l={lane:r,action:t,hasEagerState:!1,eagerState:null,next:null};if(Sl(e))kl(n,l);else{var a=e.alternate;if(0===e.lanes&&(null===a||0===a.lanes)&&null!==(a=n.lastRenderedReducer))try{var i=n.lastRenderedState,u=a(i,t);if(l.hasEagerState=!0,l.eagerState=u,St(u,i)){var o=n.interleaved;return null===o?(l.next=l,qt(n)):(l.next=o.next,o.next=l),void(n.interleaved=l)}}catch(e){}null!==(t=$t(e,n,l,r))&&(si(t,e,r,l=ui()),wl(t,n,r))}}function Sl(e){var n=e.alternate;return e===Ur||null!==n&&n===Ur}function kl(e,n){Hr=Dr=!0;var t=e.pending;null===t?n.next=n:(n.next=t.next,t.next=n),e.pending=n}function wl(e,n,t){if(0!=(4194240&t)){var r=n.lanes;t|=r&=e.pendingLanes,n.lanes=t,Rn(e,t)}}var xl={readContext:Vt,useCallback:jr,useContext:jr,useEffect:jr,useImperativeHandle:jr,useInsertionEffect:jr,useLayoutEffect:jr,useMemo:jr,useReducer:jr,useRef:jr,useState:jr,useDebugValue:jr,useDeferredValue:jr,useTransition:jr,useMutableSource:jr,useSyncExternalStore:jr,useId:jr,unstable_isNewReconciler:!1},_l={readContext:Vt,useCallback:function(e,n){return Wr().memoizedState=[e,void 0===n?null:n],e},useContext:Vt,useEffect:il,useImperativeHandle:function(e,n,t){return t=null!=t?t.concat([e]):null,ll(4,4,cl.bind(null,n,e),t)},useLayoutEffect:function(e,n){return ll(4,4,e,n)},useInsertionEffect:function(e,n){return ll(4,2,e,n)},useMemo:function(e,n){var t=Wr();return n=void 0===n?null:n,e=e(),t.memoizedState=[e,n],e},useReducer:function(e,n,t){var r=Wr();return n=void 0!==t?t(n):n,r.memoizedState=r.baseState=n,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:n},r.queue=e,e=e.dispatch=bl.bind(null,Ur,e),[r.memoizedState,e]},useRef:function(e){return e={current:e},Wr().memoizedState=e},useState:nl,useDebugValue:fl,useDeferredValue:function(e){return Wr().memoizedState=e},useTransition:function(){var e=nl(!1),n=e[0];return e=ml.bind(null,e[1]),Wr().memoizedState=e,[n,e]},useMutableSource:function(){},useSyncExternalStore:function(e,n){var t=Ur,r=Wr(),l=n();if(null===Fa)throw Error("Expected a work-in-progress root. This is a bug in React. Please file an issue.");0!=(30&Lr)||Gr(t,n,l),r.memoizedState=l;var a={value:l,getSnapshot:n};return r.queue=a,il(Kr.bind(null,t,a,e),[e]),t.flags|=2048,tl(9,Jr.bind(null,t,a,l,n),void 0,null),l},useId:function(){var e=Wr(),n=Fa.identifierPrefix;return n=":"+n+"r"+(Ar++).toString(32)+":",e.memoizedState=n},unstable_isNewReconciler:!1},El={readContext:Vt,useCallback:pl,useContext:Vt,useEffect:ul,useImperativeHandle:dl,useInsertionEffect:ol,useLayoutEffect:sl,useMemo:hl,useReducer:Yr,useRef:rl,useState:function(){return Yr(Vr)},useDebugValue:fl,useDeferredValue:function(e){return gl(Or(),Mr.memoizedState,e)},useTransition:function(){return[Yr(Vr)[0],Or().memoizedState]},useMutableSource:$r,useSyncExternalStore:Xr,useId:vl,unstable_isNewReconciler:!1},Pl={readContext:Vt,useCallback:pl,useContext:Vt,useEffect:ul,useImperativeHandle:dl,useInsertionEffect:ol,useLayoutEffect:sl,useMemo:hl,useReducer:qr,useRef:rl,useState:function(){return qr(Vr)},useDebugValue:fl,useDeferredValue:function(e){var n=Or();return null===Mr?n.memoizedState=e:gl(n,Mr.memoizedState,e)},useTransition:function(){return[qr(Vr)[0],Or().memoizedState]},useMutableSource:$r,useSyncExternalStore:Xr,useId:vl,unstable_isNewReconciler:!1};function Rl(e,n){try{var t="",r=n;do{t+=Mt(r),r=r.return}while(r);var l=t}catch(e){l="\nError generating stack: "+e.message+"\n"+e.stack}return{value:e,source:n,stack:l,digest:null}}function Tl(e,n,t){return{value:e,source:null,stack:null!=t?t:null,digest:null!=n?n:null}}if("function"!=typeof n(i[2]).ReactFiberErrorDialog.showErrorDialog)throw Error("Expected ReactFiberErrorDialog.showErrorDialog to be a function.");function Nl(e,t){try{!1!==n(i[2]).ReactFiberErrorDialog.showErrorDialog({componentStack:null!==t.stack?t.stack:"",error:t.value,errorBoundary:null!==e&&1===e.tag?e.stateNode:null})&&console.error(t.value)}catch(e){setTimeout((function(){throw e}))}}var Cl="function"==typeof WeakMap?WeakMap:Map;function zl(e,n,t){(t=Zt(-1,t)).tag=3,t.payload={element:null};var r=n.value;return t.callback=function(){Ja||(Ja=!0,Ka=r),Nl(e,n)},t}function Il(e,n,t){(t=Zt(-1,t)).tag=3;var r=e.type.getDerivedStateFromError;if("function"==typeof r){var l=n.value;t.payload=function(){return r(l)},t.callback=function(){Nl(e,n)}}var a=e.stateNode;return null!==a&&"function"==typeof a.componentDidCatch&&(t.callback=function(){Nl(e,n),"function"!=typeof r&&(null===Za?Za=new Set([this]):Za.add(this));var t=n.stack;this.componentDidCatch(n.value,{componentStack:null!==t?t:""})}),t}function Ll(e,n,t){var r=e.pingCache;if(null===r){r=e.pingCache=new Cl;var l=new Set;r.set(n,l)}else void 0===(l=r.get(n))&&(l=new Set,r.set(n,l));l.has(t)||(l.add(t),e=Ii.bind(null,e,n,t),n.then(e,e))}var Ul=Ee.ReactCurrentOwner,Ml=!1;function Fl(e,n,t,r){n.child=null===e?vr(n,null,t,r):mr(n,e.child,t,r)}function Dl(e,n,t,r,l){t=t.render;var a=n.ref;return Ot(n,l),r=Br(e,n,t,r,a,l),null===e||Ml?(n.flags|=1,Fl(e,n,r,l),n.child):(n.updateQueue=e.updateQueue,n.flags&=-2053,e.lanes&=~l,ia(e,n,l))}function Hl(e,n,t,r,l){if(null===e){var a=t.type;return"function"!=typeof a||Ai(a)||void 0!==a.defaultProps||null!==t.compare||void 0!==t.defaultProps?((e=Bi(t.type,null,r,n,n.mode,l)).ref=n.ref,e.return=n,n.child=e):(n.tag=15,n.type=a,Al(e,n,a,r,l))}if(a=e.child,0==(e.lanes&l)){var i=a.memoizedProps;if((t=null!==(t=t.compare)?t:Ut)(i,r)&&e.ref===n.ref)return ia(e,n,l)}return n.flags|=1,(e=Qi(a,r)).ref=n.ref,e.return=n,n.child=e}function Al(e,n,t,r,l){if(null!==e){var a=e.memoizedProps;if(Ut(a,r)&&e.ref===n.ref){if(Ml=!1,n.pendingProps=r=a,0==(e.lanes&l))return n.lanes=e.lanes,ia(e,n,l);0!=(131072&e.flags)&&(Ml=!0)}}return Bl(e,n,t,r,l)}function jl(e,n,t){var r=n.pendingProps,l=r.children,a=null!==e?e.memoizedState:null;if("hidden"===r.mode)if(0==(1&n.mode))n.memoizedState={baseLanes:0,cachePool:null,transitions:null},ot(ja,Aa),Aa|=t;else{if(0==(1073741824&t))return e=null!==a?a.baseLanes|t:t,n.lanes=n.childLanes=1073741824,n.memoizedState={baseLanes:e,cachePool:null,transitions:null},n.updateQueue=null,ot(ja,Aa),Aa|=e,null;n.memoizedState={baseLanes:0,cachePool:null,transitions:null},r=null!==a?a.baseLanes:t,ot(ja,Aa),Aa|=r}else null!==a?(r=a.baseLanes|t,n.memoizedState=null):r=t,ot(ja,Aa),Aa|=r;return Fl(e,n,l,t),n.child}function Ql(e,n){var t=n.ref;(null===e&&null!==t||null!==e&&e.ref!==t)&&(n.flags|=512)}function Bl(e,n,t,r,l){var a=ht(t)?ft:ct.current;return a=pt(n,a),Ot(n,l),t=Br(e,n,t,r,a,l),null===e||Ml?(n.flags|=1,Fl(e,n,t,l),n.child):(n.updateQueue=e.updateQueue,n.flags&=-2053,e.lanes&=~l,ia(e,n,l))}function Wl(e,n,t,r,l){if(ht(t)){var a=!0;bt(n)}else a=!1;if(Ot(n,l),null===n.stateNode)aa(e,n),sr(n,t,r),dr(n,t,r,l),r=!0;else if(null===e){var i=n.stateNode,u=n.memoizedProps;i.props=u;var o=i.context,s=t.contextType;"object"==typeof s&&null!==s?s=Vt(s):s=pt(n,s=ht(t)?ft:ct.current);var c=t.getDerivedStateFromProps,d="function"==typeof c||"function"==typeof i.getSnapshotBeforeUpdate;d||"function"!=typeof i.UNSAFE_componentWillReceiveProps&&"function"!=typeof i.componentWillReceiveProps||(u!==r||o!==s)&&cr(n,i,r,s),Gt=!1;var f=n.memoizedState;i.state=f,rr(n,r,i,l),o=n.memoizedState,u!==r||f!==o||dt.current||Gt?("function"==typeof c&&(ir(n,t,c,r),o=n.memoizedState),(u=Gt||or(n,t,u,r,f,o,s))?(d||"function"!=typeof i.UNSAFE_componentWillMount&&"function"!=typeof i.componentWillMount||("function"==typeof i.componentWillMount&&i.componentWillMount(),"function"==typeof i.UNSAFE_componentWillMount&&i.UNSAFE_componentWillMount()),"function"==typeof i.componentDidMount&&(n.flags|=4)):("function"==typeof i.componentDidMount&&(n.flags|=4),n.memoizedProps=r,n.memoizedState=o),i.props=r,i.state=o,i.context=s,r=u):("function"==typeof i.componentDidMount&&(n.flags|=4),r=!1)}else{i=n.stateNode,Kt(e,n),u=n.memoizedProps,s=n.type===n.elementType?u:Ft(n.type,u),i.props=s,d=n.pendingProps,f=i.context,"object"==typeof(o=t.contextType)&&null!==o?o=Vt(o):o=pt(n,o=ht(t)?ft:ct.current);var p=t.getDerivedStateFromProps;(c="function"==typeof p||"function"==typeof i.getSnapshotBeforeUpdate)||"function"!=typeof i.UNSAFE_componentWillReceiveProps&&"function"!=typeof i.componentWillReceiveProps||(u!==d||f!==o)&&cr(n,i,r,o),Gt=!1,f=n.memoizedState,i.state=f,rr(n,r,i,l);var h=n.memoizedState;u!==d||f!==h||dt.current||Gt?("function"==typeof p&&(ir(n,t,p,r),h=n.memoizedState),(s=Gt||or(n,t,s,r,f,h,o)||!1)?(c||"function"!=typeof i.UNSAFE_componentWillUpdate&&"function"!=typeof i.componentWillUpdate||("function"==typeof i.componentWillUpdate&&i.componentWillUpdate(r,h,o),"function"==typeof i.UNSAFE_componentWillUpdate&&i.UNSAFE_componentWillUpdate(r,h,o)),"function"==typeof i.componentDidUpdate&&(n.flags|=4),"function"==typeof i.getSnapshotBeforeUpdate&&(n.flags|=1024)):("function"!=typeof i.componentDidUpdate||u===e.memoizedProps&&f===e.memoizedState||(n.flags|=4),"function"!=typeof i.getSnapshotBeforeUpdate||u===e.memoizedProps&&f===e.memoizedState||(n.flags|=1024),n.memoizedProps=r,n.memoizedState=h),i.props=r,i.state=h,i.context=o,r=s):("function"!=typeof i.componentDidUpdate||u===e.memoizedProps&&f===e.memoizedState||(n.flags|=4),"function"!=typeof i.getSnapshotBeforeUpdate||u===e.memoizedProps&&f===e.memoizedState||(n.flags|=1024),r=!1)}return Ol(e,n,t,r,a,l)}function Ol(e,n,t,r,l,a){Ql(e,n);var i=0!=(128&n.flags);if(!r&&!i)return l&&yt(n,t,!1),ia(e,n,a);r=n.stateNode,Ul.current=n;var u=i&&"function"!=typeof t.getDerivedStateFromError?null:r.render();return n.flags|=1,null!==e&&i?(n.child=mr(n,e.child,null,a),n.child=mr(n,null,u,a)):Fl(e,n,u,a),n.memoizedState=r.state,l&&yt(n,t,!0),n.child}function Vl(e){var n=e.stateNode;n.pendingContext?mt(0,n.pendingContext,n.pendingContext!==n.context):n.context&&mt(0,n.context,!1),xr(e,n.containerInfo)}var Yl,ql,$l,Xl,Gl={dehydrated:null,treeContext:null,retryLane:0};function Jl(e){return{baseLanes:e,cachePool:null,transitions:null}}function Kl(e,n,t){var r,l=n.pendingProps,a=Rr.current,i=!1,u=0!=(128&n.flags);if((r=u)||(r=(null===e||null!==e.memoizedState)&&0!=(2&a)),r?(i=!0,n.flags&=-129):null!==e&&null===e.memoizedState||(a|=1),ot(Rr,1&a),null===e)return null!==(e=n.memoizedState)&&null!==e.dehydrated?(0==(1&n.mode)?n.lanes=1:Cn()?n.lanes=8:n.lanes=1073741824,null):(u=l.children,e=l.fallback,i?(l=n.mode,i=n.child,u={mode:"hidden",children:u},0==(1&l)&&null!==i?(i.childLanes=0,i.pendingProps=u):i=Oi(u,l,0,null),e=Wi(e,l,t,null),i.return=n,e.return=n,i.sibling=e,n.child=i,n.child.memoizedState=Jl(t),n.memoizedState=Gl,e):Zl(n,u));if(null!==(a=e.memoizedState)&&null!==(r=a.dehydrated))return na(e,n,u,l,r,a,t);if(i){i=l.fallback,u=n.mode,r=(a=e.child).sibling;var o={mode:"hidden",children:l.children};return 0==(1&u)&&n.child!==a?((l=n.child).childLanes=0,l.pendingProps=o,n.deletions=null):(l=Qi(a,o)).subtreeFlags=14680064&a.subtreeFlags,null!==r?i=Qi(r,i):(i=Wi(i,u,t,null)).flags|=2,i.return=n,l.return=n,l.sibling=i,n.child=l,l=i,i=n.child,u=null===(u=e.child.memoizedState)?Jl(t):{baseLanes:u.baseLanes|t,cachePool:null,transitions:u.transitions},i.memoizedState=u,i.childLanes=e.childLanes&~t,n.memoizedState=Gl,l}return e=(i=e.child).sibling,l=Qi(i,{mode:"visible",children:l.children}),0==(1&n.mode)&&(l.lanes=t),l.return=n,l.sibling=null,null!==e&&(null===(t=n.deletions)?(n.deletions=[e],n.flags|=16):t.push(e)),n.child=l,n.memoizedState=null,l}function Zl(e,n){return(n=Oi({mode:"visible",children:n},e.mode,0,null)).return=e,e.child=n}function ea(e,n,t,r){return null!==r&&(null===It?It=[r]:It.push(r)),mr(n,e.child,null,t),(e=Zl(n,n.pendingProps.children)).flags|=2,n.memoizedState=null,e}function na(e,n,t,r,l,a,i){if(t)return 256&n.flags?(n.flags&=-257,ea(e,n,i,a=Tl(Error("There was an error while hydrating this Suspense boundary. Switched to client rendering.")))):null!==n.memoizedState?(n.child=e.child,n.flags|=128,null):(a=r.fallback,t=n.mode,r=Oi({mode:"visible",children:r.children},t,0,null),(a=Wi(a,t,i,null)).flags|=2,r.return=n,a.return=n,r.sibling=a,n.child=r,0!=(1&n.mode)&&mr(n,e.child,null,i),n.child.memoizedState=Jl(i),n.memoizedState=Gl,a);if(0==(1&n.mode))return ea(e,n,i,null);if(Cn())return a=Cn().digest,ea(e,n,i,a=Tl(Error("The server could not finish this Suspense boundary, likely due to an error during server rendering. Switched to client rendering."),a,void 0));if(t=0!=(i&e.childLanes),Ml||t){if(null!==(r=Fa)){switch(i&-i){case 4:t=2;break;case 16:t=8;break;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:t=32;break;case 536870912:t=268435456;break;default:t=0}0!==(t=0!=(t&(r.suspendedLanes|i))?0:t)&&t!==a.retryLane&&(a.retryLane=t,Xt(e,t),si(r,e,t,-1))}return ki(),ea(e,n,i,a=Tl(Error("This Suspense boundary received an update before it finished hydrating. This caused the boundary to switch to client rendering. The usual way to fix this is to wrap the original update in startTransition.")))}return Cn()?(n.flags|=128,n.child=e.child,Ui.bind(null,e),Cn(),null):((e=Zl(n,r.children)).flags|=4096,e)}function ta(e,n,t){e.lanes|=n;var r=e.alternate;null!==r&&(r.lanes|=n),Wt(e.return,n,t)}function ra(e,n,t,r,l){var a=e.memoizedState;null===a?e.memoizedState={isBackwards:n,rendering:null,renderingStartTime:0,last:r,tail:t,tailMode:l}:(a.isBackwards=n,a.rendering=null,a.renderingStartTime=0,a.last=r,a.tail=t,a.tailMode=l)}function la(e,n,t){var r=n.pendingProps,l=r.revealOrder,a=r.tail;if(Fl(e,n,r.children,t),0!=(2&(r=Rr.current)))r=1&r|2,n.flags|=128;else{if(null!==e&&0!=(128&e.flags))e:for(e=n.child;null!==e;){if(13===e.tag)null!==e.memoizedState&&ta(e,t,n);else if(19===e.tag)ta(e,t,n);else if(null!==e.child){e.child.return=e,e=e.child;continue}if(e===n)break e;for(;null===e.sibling;){if(null===e.return||e.return===n)break e;e=e.return}e.sibling.return=e.return,e=e.sibling}r&=1}if(ot(Rr,r),0==(1&n.mode))n.memoizedState=null;else switch(l){case"forwards":for(t=n.child,l=null;null!==t;)null!==(e=t.alternate)&&null===Tr(e)&&(l=t),t=t.sibling;null===(t=l)?(l=n.child,n.child=null):(l=t.sibling,t.sibling=null),ra(n,!1,l,t,a);break;case"backwards":for(t=null,l=n.child,n.child=null;null!==l;){if(null!==(e=l.alternate)&&null===Tr(e)){n.child=l;break}e=l.sibling,l.sibling=t,t=l,l=e}ra(n,!0,t,null,a);break;case"together":ra(n,!1,null,null,void 0);break;default:n.memoizedState=null}return n.child}function aa(e,n){0==(1&n.mode)&&null!==e&&(e.alternate=null,n.alternate=null,n.flags|=2)}function ia(e,n,t){if(null!==e&&(n.dependencies=e.dependencies),Wa|=n.lanes,0==(t&n.childLanes))return null;if(null!==e&&n.child!==e.child)throw Error("Resuming work not yet implemented.");if(null!==n.child){for(t=Qi(e=n.child,e.pendingProps),n.child=t,t.return=n;null!==e.sibling;)e=e.sibling,(t=t.sibling=Qi(e,e.pendingProps)).return=n;t.sibling=null}return n.child}function ua(e,n,t){switch(n.tag){case 3:Vl(n);break;case 5:Er(n);break;case 1:ht(n.type)&&bt(n);break;case 4:xr(n,n.stateNode.containerInfo);break;case 10:var r=n.type._context,l=n.memoizedProps.value;ot(Dt,r._currentValue2),r._currentValue2=l;break;case 13:if(null!==(r=n.memoizedState))return null!==r.dehydrated?(ot(Rr,1&Rr.current),n.flags|=128,null):0!=(t&n.child.childLanes)?Kl(e,n,t):(ot(Rr,1&Rr.current),null!==(e=ia(e,n,t))?e.sibling:null);ot(Rr,1&Rr.current);break;case 19:if(r=0!=(t&n.childLanes),0!=(128&e.flags)){if(r)return la(e,n,t);n.flags|=128}if(null!==(l=n.memoizedState)&&(l.rendering=null,l.tail=null,l.lastEffect=null),ot(Rr,Rr.current),r)break;return null;case 22:case 23:return n.lanes=0,jl(e,n,t)}return ia(e,n,t)}function oa(e,n){if(null!==e&&e.child===n.child)return!0;if(0!=(16&n.flags))return!1;for(e=n.child;null!==e;){if(0!=(12854&e.flags)||0!=(12854&e.subtreeFlags))return!1;e=e.sibling}return!0}function sa(e,n,t,r){for(var l=n.child;null!==l;){if(5===l.tag){var a=l.stateNode;t&&r&&(a=et(a)),An(e,a.node)}else if(6===l.tag){if(a=l.stateNode,t&&r)throw Error("Not yet implemented.");An(e,a.node)}else if(4!==l.tag)if(22===l.tag&&null!==l.memoizedState)null!==(a=l.child)&&(a.return=l),sa(e,l,!0,!0);else if(null!==l.child){l.child.return=l,l=l.child;continue}if(l===n)break;for(;null===l.sibling;){if(null===l.return||l.return===n)return;l=l.return}l.sibling.return=l.return,l=l.sibling}}function ca(e,n){switch(e.tailMode){case"hidden":n=e.tail;for(var t=null;null!==n;)null!==n.alternate&&(t=n),n=n.sibling;null===t?e.tail=null:t.sibling=null;break;case"collapsed":t=e.tail;for(var r=null;null!==t;)null!==t.alternate&&(r=t),t=t.sibling;null===r?n||null===e.tail?e.tail=null:e.tail.sibling=null:r.sibling=null}}function da(e){var n=null!==e.alternate&&e.alternate.child===e.child,t=0,r=0;if(n)for(var l=e.child;null!==l;)t|=l.lanes|l.childLanes,r|=14680064&l.subtreeFlags,r|=14680064&l.flags,l.return=e,l=l.sibling;else for(l=e.child;null!==l;)t|=l.lanes|l.childLanes,r|=l.subtreeFlags,r|=l.flags,l.return=e,l=l.sibling;return e.subtreeFlags|=r,e.childLanes=t,n}function fa(e,t,r){var l=t.pendingProps;switch(zt(t),t.tag){case 2:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return da(t),null;case 1:case 17:return ht(t.type)&>(),da(t),null;case 3:return r=t.stateNode,_r(),ut(dt),ut(ct),Cr(),r.pendingContext&&(r.context=r.pendingContext,r.pendingContext=null),null!==e&&null!==e.child||null===e||e.memoizedState.isDehydrated&&0==(256&t.flags)||(t.flags|=1024,null!==It&&(pi(It),It=null)),ql(e,t),da(t),null;case 5:Pr(t),r=wr(kr.current);var a=t.type;if(null!==e&&null!=t.stateNode)$l(e,t,a,l,r),e.ref!==t.ref&&(t.flags|=512);else{if(!l){if(null===t.stateNode)throw Error("We must have new props for new mounts. This error is likely caused by a bug in React. Please file an issue.");return da(t),null}wr(yr.current),e=Xn,Xn+=2,a=$n(a);var u=ln(null,Xe,l,a.validAttributes);r=In(e,a.uiViewClassName,r,u,t),e=new Gn(e,a,l,t),Yl(e={node:r,canonical:e},t,!1,!1),t.stateNode=e,null!==t.ref&&(t.flags|=512)}return da(t),null;case 6:if(e&&null!=t.stateNode)Xl(e,t,e.memoizedProps,l);else{if("string"!=typeof l&&null===t.stateNode)throw Error("We must have new props for new mounts. This error is likely caused by a bug in React. Please file an issue.");e=wr(kr.current),r=wr(yr.current),t.stateNode=Jn(l,e,r,t)}return da(t),null;case 13:if(ut(Rr),l=t.memoizedState,null===e||null!==e.memoizedState&&null!==e.memoizedState.dehydrated){if(null!==l&&null!==l.dehydrated){if(null===e)throw Error("A dehydrated suspense component was completed without a hydrated node. This is probably a bug in React.");0==(128&t.flags)&&(t.memoizedState=null),t.flags|=4,da(t),a=!1}else null!==It&&(pi(It),It=null),a=!0;if(!a)return 65536&t.flags?t:null}return 0!=(128&t.flags)?(t.lanes=r,t):((r=null!==l)!==(null!==e&&null!==e.memoizedState)&&r&&(t.child.flags|=8192,0!=(1&t.mode)&&(null===e||0!=(1&Rr.current)?0===Qa&&(Qa=3):ki())),null!==t.updateQueue&&(t.flags|=4),da(t),null);case 4:return _r(),ql(e,t),da(t),null;case 10:return Bt(t.type._context),da(t),null;case 19:if(ut(Rr),null===(a=t.memoizedState))return da(t),null;if(l=0!=(128&t.flags),null===(u=a.rendering))if(l)ca(a,!1);else{if(0!==Qa||null!==e&&0!=(128&e.flags))for(e=t.child;null!==e;){if(null!==(u=Tr(e))){for(t.flags|=128,ca(a,!1),null!==(e=u.updateQueue)&&(t.updateQueue=e,t.flags|=4),t.subtreeFlags=0,e=r,r=t.child;null!==r;)a=e,(l=r).flags&=14680066,null===(u=l.alternate)?(l.childLanes=0,l.lanes=a,l.child=null,l.subtreeFlags=0,l.memoizedProps=null,l.memoizedState=null,l.updateQueue=null,l.dependencies=null,l.stateNode=null):(l.childLanes=u.childLanes,l.lanes=u.lanes,l.child=u.child,l.subtreeFlags=0,l.deletions=null,l.memoizedProps=u.memoizedProps,l.memoizedState=u.memoizedState,l.updateQueue=u.updateQueue,l.type=u.type,a=u.dependencies,l.dependencies=null===a?null:{lanes:a.lanes,firstContext:a.firstContext}),r=r.sibling;return ot(Rr,1&Rr.current|2),t.child}e=e.sibling}null!==a.tail&&n(i[3]).unstable_now()>Xa&&(t.flags|=128,l=!0,ca(a,!1),t.lanes=4194304)}else{if(!l)if(null!==(e=Tr(u))){if(t.flags|=128,l=!0,null!==(e=e.updateQueue)&&(t.updateQueue=e,t.flags|=4),ca(a,!0),null===a.tail&&"hidden"===a.tailMode&&!u.alternate)return da(t),null}else 2*n(i[3]).unstable_now()-a.renderingStartTime>Xa&&1073741824!==r&&(t.flags|=128,l=!0,ca(a,!1),t.lanes=4194304);a.isBackwards?(u.sibling=t.child,t.child=u):(null!==(e=a.last)?e.sibling=u:t.child=u,a.last=u)}return null!==a.tail?(t=a.tail,a.rendering=t,a.tail=t.sibling,a.renderingStartTime=n(i[3]).unstable_now(),t.sibling=null,e=Rr.current,ot(Rr,l?1&e|2:1&e),t):(da(t),null);case 22:case 23:return vi(),r=null!==t.memoizedState,null!==e&&null!==e.memoizedState!==r&&(t.flags|=8192),r&&0!=(1&t.mode)?0!=(1073741824&Aa)&&da(t):da(t),null;case 24:case 25:return null}throw Error("Unknown unit of work tag ("+t.tag+"). This error is likely caused by a bug in React. Please file an issue.")}function pa(e,n){switch(zt(n),n.tag){case 1:return ht(n.type)&>(),65536&(e=n.flags)?(n.flags=-65537&e|128,n):null;case 3:return _r(),ut(dt),ut(ct),Cr(),0!=(65536&(e=n.flags))&&0==(128&e)?(n.flags=-65537&e|128,n):null;case 5:return Pr(n),null;case 13:if(ut(Rr),null!==(e=n.memoizedState)&&null!==e.dehydrated&&null===n.alternate)throw Error("Threw in newly mounted dehydrated component. This is likely a bug in React. Please file an issue.");return 65536&(e=n.flags)?(n.flags=-65537&e|128,n):null;case 19:return ut(Rr),null;case 4:return _r(),null;case 10:return Bt(n.type._context),null;case 22:case 23:return vi(),null;default:return null}}Yl=function(e,n,t,r){for(var l=n.child;null!==l;){if(5===l.tag){var a=l.stateNode;t&&r&&(a=et(a)),Hn(e.node,a.node)}else if(6===l.tag){if(a=l.stateNode,t&&r)throw Error("Not yet implemented.");Hn(e.node,a.node)}else if(4!==l.tag)if(22===l.tag&&null!==l.memoizedState)null!==(a=l.child)&&(a.return=l),Yl(e,l,!0,!0);else if(null!==l.child){l.child.return=l,l=l.child;continue}if(l===n)break;for(;null===l.sibling;){if(null===l.return||l.return===n)return;l=l.return}l.sibling.return=l.return,l=l.sibling}},ql=function(e,n){var t=n.stateNode;if(!oa(e,n)){e=t.containerInfo;var r=Dn(e);sa(r,n,!1,!1),t.pendingChildren=r,n.flags|=4,jn(e,r)}},$l=function(e,n,t,r){t=e.stateNode;var l=e.memoizedProps;if((e=oa(e,n))&&l===r)n.stateNode=t;else{var a=n.stateNode;wr(yr.current);var i=null;l!==r&&(l=ln(null,l,r,a.canonical.viewConfig.validAttributes),a.canonical.currentProps=r,i=l),e&&null===i?n.stateNode=t:(r=i,l=t.node,t={node:e?null!==r?Fn(l,r):Ln(l):null!==r?Mn(l,r):Un(l),canonical:t.canonical},n.stateNode=t,e?n.flags|=4:Yl(t,n,!1,!1))}},Xl=function(e,n,t,r){t!==r?(e=wr(kr.current),t=wr(yr.current),n.stateNode=Jn(r,e,t,n),n.flags|=4):n.stateNode=e.stateNode};var ha="function"==typeof WeakSet?WeakSet:Set,ga=null;function ma(e,n){var t=e.ref;if(null!==t)if("function"==typeof t)try{t(null)}catch(t){zi(e,n,t)}else t.current=null}function va(e,n,t){try{t()}catch(t){zi(e,n,t)}}var ba=!1;function ya(e,n){for(ga=n;null!==ga;)if(n=(e=ga).child,0!=(1028&e.subtreeFlags)&&null!==n)n.return=e,ga=n;else for(;null!==ga;){e=ga;try{var t=e.alternate;if(0!=(1024&e.flags))switch(e.tag){case 0:case 11:case 15:case 3:case 5:case 6:case 4:case 17:break;case 1:if(null!==t){var r=t.memoizedProps,l=t.memoizedState,a=e.stateNode,i=a.getSnapshotBeforeUpdate(e.elementType===e.type?r:Ft(e.type,r),l);a.__reactInternalSnapshotBeforeUpdate=i}break;default:throw Error("This unit of work tag should not have side-effects. This error is likely caused by a bug in React. Please file an issue.")}}catch(n){zi(e,e.return,n)}if(null!==(n=e.sibling)){n.return=e.return,ga=n;break}ga=e.return}return t=ba,ba=!1,t}function Sa(e,n,t){var r=n.updateQueue;if(null!==(r=null!==r?r.lastEffect:null)){var l=r=r.next;do{if((l.tag&e)===e){var a=l.destroy;l.destroy=void 0,void 0!==a&&va(n,t,a)}l=l.next}while(l!==r)}}function ka(e,n){if(null!==(n=null!==(n=n.updateQueue)?n.lastEffect:null)){var t=n=n.next;do{if((t.tag&e)===e){var r=t.create;t.destroy=r()}t=t.next}while(t!==n)}}function wa(e){var n=e.alternate;null!==n&&(e.alternate=null,wa(n)),e.child=null,e.deletions=null,e.sibling=null,e.stateNode=null,e.return=null,e.dependencies=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.stateNode=null,e.updateQueue=null}function xa(e,n,t){for(t=t.child;null!==t;)_a(e,n,t),t=t.sibling}function _a(e,n,t){if(fn&&"function"==typeof fn.onCommitFiberUnmount)try{fn.onCommitFiberUnmount(dn,t)}catch(e){}switch(t.tag){case 5:ma(t,n);case 6:xa(e,n,t);break;case 18:break;case 4:Dn(t.stateNode.containerInfo),xa(e,n,t);break;case 0:case 11:case 14:case 15:var r=t.updateQueue;if(null!==r&&null!==(r=r.lastEffect)){var l=r=r.next;do{var a=l,i=a.destroy;a=a.tag,void 0!==i&&(0!=(2&a)||0!=(4&a))&&va(t,n,i),l=l.next}while(l!==r)}xa(e,n,t);break;case 1:if(ma(t,n),"function"==typeof(r=t.stateNode).componentWillUnmount)try{r.props=t.memoizedProps,r.state=t.memoizedState,r.componentWillUnmount()}catch(e){zi(t,n,e)}xa(e,n,t);break;default:xa(e,n,t)}}function Ea(e){var n=e.updateQueue;if(null!==n){e.updateQueue=null;var t=e.stateNode;null===t&&(t=e.stateNode=new ha),n.forEach((function(n){var r=Mi.bind(null,e,n);t.has(n)||(t.add(n),n.then(r,r))}))}}function Pa(e,n){var t=n.deletions;if(null!==t)for(var r=0;ra&&(a=o),l&=~u}if(l=a,10<(l=(120>(l=n(i[3]).unstable_now()-l)?120:480>l?480:1080>l?1080:1920>l?1920:3e3>l?3e3:4320>l?4320:1960*za(l/1960))-l)){e.timeoutHandle=Kn(Ri.bind(null,e,qa,Ga),l);break}Ri(e,qa,Ga);break;default:throw Error("Unknown root exit status.")}}}return ci(e,n(i[3]).unstable_now()),e.callbackNode===r?di.bind(null,e):null}function fi(e,n){var t=Ya;return e.current.memoizedState.isDehydrated&&(bi(e,n).flags|=256),2!==(e=wi(e,n))&&(n=qa,qa=t,null!==n&&pi(n)),e}function pi(e){null===qa?qa=e:qa.push.apply(qa,e)}function hi(e){for(var n=e;;){if(16384&n.flags){var t=n.updateQueue;if(null!==t&&null!==(t=t.stores))for(var r=0;re?16:e,null===ni)var r=!1;else{if(e=ni,ni=null,ti=0,0!=(6&Ma))throw Error("Cannot flush passive effects while already rendering.");var l=Ma;for(Ma|=4,ga=e.current;null!==ga;){var a=ga,i=a.child;if(0!=(16&ga.flags)){var u=a.deletions;if(null!==u){for(var o=0;on(i[3]).unstable_now()-$a?bi(e,0):Va|=r),ci(e,t)}function Li(e,n){0===n&&(0==(1&e.mode)?n=1:(n=bn,0==(130023424&(bn<<=1))&&(bn=4194304)));var t=ui();null!==(e=Xt(e,n))&&(En(e,n,t),ci(e,t))}function Ui(e){var n=e.memoizedState,t=0;null!==n&&(t=n.retryLane),Li(e,t)}function Mi(e,n){var t=0;switch(e.tag){case 13:var r=e.stateNode,l=e.memoizedState;null!==l&&(t=l.retryLane);break;case 19:r=e.stateNode;break;default:throw Error("Pinged unknown suspense boundary type. This is probably a bug in React.")}null!==r&&r.delete(n),Li(e,t)}function Fi(e,t){return n(i[3]).unstable_scheduleCallback(e,t)}function Di(e,n,t,r){this.tag=e,this.key=t,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=n,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=r,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function Hi(e,n,t,r){return new Di(e,n,t,r)}function Ai(e){return!(!(e=e.prototype)||!e.isReactComponent)}function ji(e){if("function"==typeof e)return Ai(e)?1:0;if(null!=e){if((e=e.$$typeof)===Le)return 11;if(e===Fe)return 14}return 2}function Qi(e,n){var t=e.alternate;return null===t?((t=Hi(e.tag,n,e.key,e.mode)).elementType=e.elementType,t.type=e.type,t.stateNode=e.stateNode,t.alternate=e,e.alternate=t):(t.pendingProps=n,t.type=e.type,t.flags=0,t.subtreeFlags=0,t.deletions=null),t.flags=14680064&e.flags,t.childLanes=e.childLanes,t.lanes=e.lanes,t.child=e.child,t.memoizedProps=e.memoizedProps,t.memoizedState=e.memoizedState,t.updateQueue=e.updateQueue,n=e.dependencies,t.dependencies=null===n?null:{lanes:n.lanes,firstContext:n.firstContext},t.sibling=e.sibling,t.index=e.index,t.ref=e.ref,t}function Bi(e,n,t,r,l,a){var i=2;if(r=e,"function"==typeof e)Ai(e)&&(i=1);else if("string"==typeof e)i=5;else e:switch(e){case Te:return Wi(t.children,l,a,n);case Ne:i=8,l|=8;break;case Ce:return(e=Hi(12,t,n,2|l)).elementType=Ce,e.lanes=a,e;case Ue:return(e=Hi(13,t,n,l)).elementType=Ue,e.lanes=a,e;case Me:return(e=Hi(19,t,n,l)).elementType=Me,e.lanes=a,e;case He:return Oi(t,l,a,n);default:if("object"==typeof e&&null!==e)switch(e.$$typeof){case ze:i=10;break e;case Ie:i=9;break e;case Le:i=11;break e;case Fe:i=14;break e;case De:i=16,r=null;break e}throw Error("Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: "+(null==e?e:typeof e)+".")}return(n=Hi(i,t,n,l)).elementType=e,n.type=r,n.lanes=a,n}function Wi(e,n,t,r){return(e=Hi(7,e,r,n)).lanes=t,e}function Oi(e,n,t,r){return(e=Hi(22,e,r,n)).elementType=He,e.lanes=t,e.stateNode={isHidden:!1},e}function Vi(e,n,t){return(e=Hi(6,e,null,n)).lanes=t,e}function Yi(e,n,t){return(n=Hi(4,null!==e.children?e.children:[],e.key,n)).lanes=t,n.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},n}function qi(e,n,t,r,l){this.tag=n,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=_n(0),this.expirationTimes=_n(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=_n(0),this.identifierPrefix=r,this.onRecoverableError=l}function $i(e,n,t){var r=3=(null!=a?a:0)}));t.callback(new u(n),h,s)};for(var p of y.entries()){var c=(0,n.default)(p,2),h=c[0];v(c[1])}}}};function c(){(0,s.default)('missing-native-performance-observer','Missing native implementation of PerformanceObserver')}function h(){var t=Array.from(y.values()).map((function(t){return t.entryTypes})).reduce((function(t,n){return b(t,n)}),new Map);for(var a of t){var o=(0,n.default)(a,2),s=o[0],u=o[1];null==l.default||l.default.setDurationThreshold((0,r(d[7]).performanceEntryTypeToRaw)(s),null!=u?u:0)}}function b(t,a){var o=new Map;for(var s of t){var l,u=(0,n.default)(s,2),f=u[0],y=u[1];if(a.has(f))o.set(f,Math.min(null!=y?y:0,null!=(l=a.get(f))?l:0));else o.set(f,y)}return o}(e.default=(0,o.default)((function t(n){(0,a.default)(this,t),this._callback=n}),[{key:"observe",value:function(n){var a;if(l.default){var o;this._validateObserveOptions(n),n.entryTypes?(this._type='multiple',o=new Map(n.entryTypes.map((function(t){return[t,void 0]})))):(this._type='single',o=new Map([[n.type,n.durationThreshold]]));var s=null==(a=y.get(this))?void 0:a.entryTypes,u=s?b(o,s):o;if(!s||s.size!==u.size){y.set(this,{callback:this._callback,entryTypes:u}),v||(l.default.setOnPerformanceEntryCallback(p),v=!0);var T,w,E=s?(T=new Set(o.keys()),w=new Set(s.keys()),new Set((0,t.default)(T).filter((function(t){return!w.has(t)})))):new Set(o.keys());for(var O of E){var k;if(!f.has(O)){var _=(0,r(d[7]).performanceEntryTypeToRaw)(O);l.default.startReporting(_)}f.set(O,(null!=(k=f.get(O))?k:0)+1)}h()}}else c()}},{key:"disconnect",value:function(){if(l.default){var t=y.get(this);if(t){for(var n of t.entryTypes.keys()){var a,o=null!=(a=f.get(n))?a:0;1===o?(f.delete(n),l.default.stopReporting((0,r(d[7]).performanceEntryTypeToRaw)(n))):0!==o&&f.set(n,o-1)}y.delete(this),0===y.size&&(l.default.setOnPerformanceEntryCallback(void 0),v=!1),h()}}else c()}},{key:"_validateObserveOptions",value:function(t){var n=t.type,a=t.entryTypes,o=t.durationThreshold;if(!n&&!a)throw new TypeError("Failed to execute 'observe' on 'PerformanceObserver': An observe() call must not include both entryTypes and type arguments.");if(a&&n)throw new TypeError("Failed to execute 'observe' on 'PerformanceObserver': An observe() call must include either entryTypes or type arguments.");if('multiple'===this._type&&n)throw new Error("Failed to execute 'observe' on 'PerformanceObserver': This observer has performed observe({entryTypes:...}, therefore it cannot perform observe({type:...})");if('single'===this._type&&a)throw new Error("Failed to execute 'observe' on 'PerformanceObserver': This PerformanceObserver has performed observe({type:...}, therefore it cannot perform observe({entryTypes:...})");if(a&&void 0!==o)throw new TypeError("Failed to execute 'observe' on 'PerformanceObserver': An observe() call must not include both entryTypes and durationThreshold arguments.")}}])).supportedEntryTypes=Object.freeze(['mark','measure','event'])}),66,[8,11,26,17,18,63,65,67]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.RawPerformanceEntryTypeValues=void 0,e.performanceEntryTypeToRaw=function(t){switch(t){case'mark':return n.MARK;case'measure':return n.MEASURE;case'event':return n.EVENT;default:throw new TypeError(`performanceEntryTypeToRaw: unexpected performance entry type received: ${t}`)}},e.rawToPerformanceEntry=function(o){return o.entryType===n.EVENT?new(r(d[0]).PerformanceEventTiming)({name:o.name,startTime:o.startTime,duration:o.duration,processingStart:o.processingStart,processingEnd:o.processingEnd,interactionId:o.interactionId}):new(r(d[1]).PerformanceEntry)({name:o.name,entryType:t(o.entryType),startTime:o.startTime,duration:o.duration})},e.rawToPerformanceEntryType=t;var n=e.RawPerformanceEntryTypeValues={UNDEFINED:0,MARK:1,MEASURE:2,EVENT:3};function t(t){switch(t){case n.MARK:return'mark';case n.MEASURE:return'measure';case n.EVENT:return'event';case n.UNDEFINED:throw new TypeError("rawToPerformanceEntryType: UNDEFINED can't be cast to PerformanceEntryType");default:throw new TypeError(`rawToPerformanceEntryType: unexpected performance entry type received: ${t}`)}}}),67,[68,69]); +__d((function(g,r,i,a,m,_e,d){Object.defineProperty(_e,"__esModule",{value:!0}),_e.PerformanceEventTiming=void 0;var n=r(d[0])(r(d[1])),t=r(d[0])(r(d[2])),e=r(d[0])(r(d[3])),o=r(d[0])(r(d[4])),u=r(d[0])(r(d[5]));function c(){try{var n=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(n){}return(c=function(){return!!n})()}_e.PerformanceEventTiming=(function(l){function f(n){var u,l,s,p,v,y,E,T,P;return(0,t.default)(this,f),E=this,T=f,P=[{name:n.name,entryType:'event',startTime:null!=(u=n.startTime)?u:0,duration:null!=(l=n.duration)?l:0}],T=(0,o.default)(T),(y=(0,e.default)(E,c()?Reflect.construct(T,P||[],(0,o.default)(E).constructor):T.apply(E,P))).processingStart=null!=(s=n.processingStart)?s:0,y.processingEnd=null!=(p=n.processingEnd)?p:0,y.interactionId=null!=(v=n.interactionId)?v:0,y}return(0,u.default)(f,l),(0,n.default)(f)})(r(d[6]).PerformanceEntry)}),68,[8,18,17,3,2,56,69]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.PerformanceEntry=void 0;var t=r(d[0])(r(d[1])),n=r(d[0])(r(d[2]));e.PerformanceEntry=(0,n.default)((function n(s){(0,t.default)(this,n),this.name=s.name,this.entryType=s.entryType,this.startTime=s.startTime,this.duration=s.duration}),[{key:"toJSON",value:function(){return{name:this.name,entryType:this.entryType,startTime:this.startTime,duration:this.duration}}}])}),69,[8,17,18]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var t=r(d[0])(r(d[1])),S=r(d[0])(r(d[2]));e.default=(0,S.default)((function S(u){(0,t.default)(this,S),null!=u&&(this._jsHeapSizeLimit=u.jsHeapSizeLimit,this._totalJSHeapSize=u.totalJSHeapSize,this._usedJSHeapSize=u.usedJSHeapSize)}),[{key:"jsHeapSizeLimit",get:function(){return this._jsHeapSizeLimit}},{key:"totalJSHeapSize",get:function(){return this._totalJSHeapSize}},{key:"usedJSHeapSize",get:function(){return this._usedJSHeapSize}}])}),70,[8,17,18]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var t=r(d[0])(r(d[1])),n=r(d[0])(r(d[2]));e.default=(0,n.default)((function n(u){(0,t.default)(this,n),this._startTime=0,this._endTime=0,this._executeJavaScriptBundleEntryPointStart=0,this._executeJavaScriptBundleEntryPointEnd=0,null!=u&&(this._startTime=u.startTime,this._endTime=u.endTime,this._executeJavaScriptBundleEntryPointStart=u.executeJavaScriptBundleEntryPointStart,this._executeJavaScriptBundleEntryPointEnd=u.executeJavaScriptBundleEntryPointEnd)}),[{key:"startTime",get:function(){return this._startTime}},{key:"endTime",get:function(){return this._endTime}},{key:"executeJavaScriptBundleEntryPointStart",get:function(){return this._executeJavaScriptBundleEntryPointStart}},{key:"executeJavaScriptBundleEntryPointEnd",get:function(){return this._executeJavaScriptBundleEntryPointEnd}}])}),71,[8,17,18]); +__d((function(g,r,i,a,m,_e,d){'use strict';if(r(d[0]).installConsoleErrorReporter(),!g.__fbDisableExceptionsManager){r(d[1]).setGlobalHandler((function(e,o){try{r(d[0]).handleException(e,o)}catch(o){throw console.log('Failed to print error: ',o.message),e}}))}}),72,[73,33]); +__d((function(g,r,i,a,m,_e,d){'use strict';function n(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(n=function(){return!!e})()}var e,t=(function(e){function t(){var e,o,c,s;r(d[2])(this,t);for(var l=arguments.length,u=new Array(l),f=0;f|\/|[a-z]:\\|\\\\).*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i,u=/\((\S*)(?::(\d+))(?::(\d+))\)/;function t(t){var o=l.exec(t);if(!o)return null;var c=o[2]&&0===o[2].indexOf('native'),s=o[2]&&0===o[2].indexOf('eval'),v=u.exec(o[2]);return s&&null!=v&&(o[2]=v[1],o[3]=v[2],o[4]=v[3]),{file:c?null:o[2],methodName:o[1]||n,arguments:c?[o[2]]:[],lineNumber:o[3]?+o[3]:null,column:o[4]?+o[4]:null}}var o=/^\s*at (?:((?:\[object object\])?.+) )?\(?((?:file|ms-appx|https?|webpack|blob):.*?):(\d+)(?::(\d+))?\)?\s*$/i;function c(l){var u=o.exec(l);return u?{file:u[2],methodName:u[1]||n,arguments:[],lineNumber:+u[3],column:u[4]?+u[4]:null}:null}var s=/^\s*(.*?)(?:\((.*?)\))?(?:^|@)((?:file|https?|blob|chrome|webpack|resource|\[native).*?|[^@]*bundle)(?::(\d+))?(?::(\d+))?\s*$/i,v=/(\S+) line (\d+)(?: > eval line \d+)* > eval/i;function f(l){var u=s.exec(l);if(!u)return null;var t=u[3]&&u[3].indexOf(' > eval')>-1,o=v.exec(u[3]);return t&&null!=o&&(u[3]=o[1],u[4]=o[2],u[5]=null),{file:u[3],methodName:u[1]||n,arguments:u[2]?u[2].split(','):[],lineNumber:u[4]?+u[4]:null,column:u[5]?+u[5]:null}}var b=/^\s*(?:([^@]*)(?:\((.*?)\))?@)?(\S.*?):(\d+)(?::(\d+))?\s*$/i;function p(l){var u=b.exec(l);return u?{file:u[3],methodName:u[1]||n,arguments:[],lineNumber:+u[4],column:u[5]?+u[5]:null}:null}var x=/^\s*at (?:((?:\[object object\])?[^\\/]+(?: \[as \S+\])?) )?\(?(.*?):(\d+)(?::(\d+))?\)?\s*$/i;function h(l){var u=x.exec(l);return u?{file:u[2],methodName:u[1]||n,arguments:[],lineNumber:+u[3],column:u[4]?+u[4]:null}:null}e.parse=function(n){return n.split('\n').reduce((function(n,l){var u=t(l)||c(l)||f(l)||h(l)||p(l);return u&&n.push(u),n}),[])}}),79,[]); +__d((function(g,r,_i,a,m,e,d){'use strict';var t=/^ {4}at (.+?)(?: \((native)\)?| \((address at )?(.*?):(\d+):(\d+)\))$/,n=/^ {4}... skipping (\d+) frames$/;function s(s){var u,i=s.match(t);if(i)return{type:'FRAME',functionName:i[1],location:'native'===i[2]?{type:'NATIVE'}:'address at '===i[3]?(u=i[4],'InternalBytecode.js'===u?{type:'INTERNAL_BYTECODE',sourceUrl:i[4],line1Based:Number.parseInt(i[5],10),virtualOffset0Based:Number.parseInt(i[6],10)}:{type:'BYTECODE',sourceUrl:i[4],line1Based:Number.parseInt(i[5],10),virtualOffset0Based:Number.parseInt(i[6],10)}):{type:'SOURCE',sourceUrl:i[4],line1Based:Number.parseInt(i[5],10),column1Based:Number.parseInt(i[6],10)}};var p=s.match(n);return p?{type:'SKIPPED',count:Number.parseInt(p[1],10)}:void 0}m.exports=function(t){for(var n=t.split(/\n/),u=[],i=-1,p=0;p-1}m.exports={isNativeFunction:t,hasNativeConstructor:function(n,o){var c=Object.getPrototypeOf(n).constructor;return c.name===o&&t(c)}}}),89,[]); +__d((function(g,r,_i,a,m,e,d){var t=(function(t){"use strict";var n,o=Object.prototype,i=o.hasOwnProperty,c=Object.defineProperty||function(t,n,o){t[n]=o.value},u="function"==typeof Symbol?Symbol:{},h=u.iterator||"@@iterator",f=u.asyncIterator||"@@asyncIterator",l=u.toStringTag||"@@toStringTag";function s(t,n,o){return Object.defineProperty(t,n,{value:o,enumerable:!0,configurable:!0,writable:!0}),t[n]}try{s({},"")}catch(t){s=function(t,n,o){return t[n]=o}}function p(t,n,o,i){var u=n&&n.prototype instanceof E?n:E,h=Object.create(u.prototype),f=new A(i||[]);return c(h,"_invoke",{value:F(t,o,f)}),h}function y(t,n,o){try{return{type:"normal",arg:t.call(n,o)}}catch(t){return{type:"throw",arg:t}}}t.wrap=p;var v="suspendedStart",w="suspendedYield",b="executing",L="completed",x={};function E(){}function _(){}function j(){}var O={};s(O,h,(function(){return this}));var k=Object.getPrototypeOf,G=k&&k(k(Y([])));G&&G!==o&&i.call(G,h)&&(O=G);var N=j.prototype=E.prototype=Object.create(O);function P(t){["next","throw","return"].forEach((function(n){s(t,n,(function(t){return this._invoke(n,t)}))}))}function T(t,n){function o(c,u,h,f){var l=y(t[c],t,u);if("throw"!==l.type){var s=l.arg,p=s.value;return p&&"object"==typeof p&&i.call(p,"__await")?n.resolve(p.__await).then((function(t){o("next",t,h,f)}),(function(t){o("throw",t,h,f)})):n.resolve(p).then((function(t){s.value=t,h(s)}),(function(t){return o("throw",t,h,f)}))}f(l.arg)}var u;c(this,"_invoke",{value:function(t,i){function c(){return new n((function(n,c){o(t,i,n,c)}))}return u=u?u.then(c,c):c()}})}function F(t,n,o){var i=v;return function(c,u){if(i===b)throw new Error("Generator is already running");if(i===L){if("throw"===c)throw u;return q()}for(o.method=c,o.arg=u;;){var h=o.delegate;if(h){var f=S(h,o);if(f){if(f===x)continue;return f}}if("next"===o.method)o.sent=o._sent=o.arg;else if("throw"===o.method){if(i===v)throw i=L,o.arg;o.dispatchException(o.arg)}else"return"===o.method&&o.abrupt("return",o.arg);i=b;var l=y(t,n,o);if("normal"===l.type){if(i=o.done?L:w,l.arg===x)continue;return{value:l.arg,done:o.done}}"throw"===l.type&&(i=L,o.method="throw",o.arg=l.arg)}}}function S(t,o){var i=o.method,c=t.iterator[i];if(c===n)return o.delegate=null,"throw"===i&&t.iterator.return&&(o.method="return",o.arg=n,S(t,o),"throw"===o.method)||"return"!==i&&(o.method="throw",o.arg=new TypeError("The iterator does not provide a '"+i+"' method")),x;var u=y(c,t.iterator,o.arg);if("throw"===u.type)return o.method="throw",o.arg=u.arg,o.delegate=null,x;var h=u.arg;return h?h.done?(o[t.resultName]=h.value,o.next=t.nextLoc,"return"!==o.method&&(o.method="next",o.arg=n),o.delegate=null,x):h:(o.method="throw",o.arg=new TypeError("iterator result is not an object"),o.delegate=null,x)}function I(t){var n={tryLoc:t[0]};1 in t&&(n.catchLoc=t[1]),2 in t&&(n.finallyLoc=t[2],n.afterLoc=t[3]),this.tryEntries.push(n)}function R(t){var n=t.completion||{};n.type="normal",delete n.arg,t.completion=n}function A(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(I,this),this.reset(!0)}function Y(t){if(t){var o=t[h];if(o)return o.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var c=-1,u=function o(){for(;++c=0;--u){var h=this.tryEntries[u],f=h.completion;if("root"===h.tryLoc)return c("end");if(h.tryLoc<=this.prev){var l=i.call(h,"catchLoc"),s=i.call(h,"finallyLoc");if(l&&s){if(this.prev=0;--o){var c=this.tryEntries[o];if(c.tryLoc<=this.prev&&i.call(c,"finallyLoc")&&this.prev=0;--n){var o=this.tryEntries[n];if(o.finallyLoc===t)return this.complete(o.completion,o.afterLoc),R(o),x}},catch:function(t){for(var n=this.tryEntries.length-1;n>=0;--n){var o=this.tryEntries[n];if(o.tryLoc===t){var i=o.completion;if("throw"===i.type){var c=i.arg;R(o)}return c}}throw new Error("illegal catch attempt")},delegateYield:function(t,o,i){return this.delegate={iterator:Y(t),resultName:o,nextLoc:i},"next"===this.method&&(this.arg=n),x}},t})("object"==typeof m?m.exports:{});try{regeneratorRuntime=t}catch(n){"object"==typeof globalThis?globalThis.regeneratorRuntime=t:Function("r","regeneratorRuntime = r")(t)}}),90,[]); +__d((function(g,r,i,a,m,e,d){'use strict';var l,n,t=!0===(null==(l=g.HermesInternal)||null==l.hasPromise?void 0:l.hasPromise())&&!0===(null==(n=g.HermesInternal)||null==n.useEngineQueue?void 0:n.useEngineQueue()),u=r(d[0]).isNativeFunction(Promise)||t;if(!0!==g.RN$Bridgeless){var o=function(l){r(d[1]).polyfillGlobal(l,(function(){return r(d[2])[l]}))};o('setTimeout'),o('clearTimeout'),o('setInterval'),o('clearInterval'),o('requestAnimationFrame'),o('cancelAnimationFrame'),o('requestIdleCallback'),o('cancelIdleCallback')}u?(r(d[1]).polyfillGlobal('setImmediate',(function(){return r(d[3]).setImmediate})),r(d[1]).polyfillGlobal('clearImmediate',(function(){return r(d[3]).clearImmediate}))):!0!==g.RN$Bridgeless&&(r(d[1]).polyfillGlobal('setImmediate',(function(){return r(d[2]).queueReactNativeMicrotask})),r(d[1]).polyfillGlobal('clearImmediate',(function(){return r(d[2]).clearReactNativeMicrotask}))),t?r(d[1]).polyfillGlobal('queueMicrotask',(function(){var l;return null==(l=g.HermesInternal)?void 0:l.enqueueJob})):r(d[1]).polyfillGlobal('queueMicrotask',(function(){return r(d[4]).default}))}),91,[89,83,92,94,95]); +__d((function(g,r,_i,a,m,_e,d){var e=r(d[0])(r(d[1])),t=16.666666666666668,n=[],i=[],l=[],o=[],c=[],u={},f=1,s=[],v=!1;function h(){var e=l.indexOf(null);return-1===e&&(e=l.length),e}function T(e,t){var o=f++,c=h();return l[c]=o,n[c]=e,i[c]=t,o}function k(e,o,c){e>f&&console.warn('Tried to call timer with ID %s but no such timer exists.',e);var u=l.indexOf(e);if(-1!==u){var v=i[u],h=n[u];if(h&&v){'setInterval'!==v&&p(u);try{'setTimeout'===v||'setInterval'===v||'queueReactNativeMicrotask'===v?h():'requestAnimationFrame'===v?h(g.performance.now()):'requestIdleCallback'===v?h({timeRemaining:function(){return Math.max(0,t-(g.performance.now()-o))},didTimeout:!!c}):console.error('Tried to call a callback with invalid type: '+v)}catch(e){s.push(e)}}else console.error('No callback found for timerID '+e)}}function w(){if(0===o.length)return!1;var e=o;o=[];for(var t=0;t0}function p(e){l[e]=null,n[e]=null,i[e]=null}function N(e){if(null!=e){var t=l.indexOf(e);if(-1!==t){var n=i[t];p(t),'queueReactNativeMicrotask'!==n&&'requestIdleCallback'!==n&&M(e)}}}var b,I={setTimeout:function(e,t){for(var n=arguments.length,i=new Array(n>2?n-2:0),l=2;l2?n-2:0),l=2;l1?t-1:0),i=1;i-1&&(c.splice(e,1),k(i,g.performance.now(),!0)),delete u[i],0===c.length&&R(!1)}),n);u[i]=l}return i},cancelIdleCallback:function(e){N(e);var t=c.indexOf(e);-1!==t&&c.splice(t,1);var n=u[e];n&&(I.clearTimeout(n),delete u[e]),0===c.length&&R(!1)},clearTimeout:function(e){N(e)},clearInterval:function(e){N(e)},clearReactNativeMicrotask:function(e){N(e);var t=o.indexOf(e);-1!==t&&o.splice(t,1)},cancelAnimationFrame:function(e){N(e)},callTimers:function(e){r(d[2])(0!==e.length,'Cannot call `callTimers` with an empty list of IDs.'),s.length=0;for(var t=0;t0){if(n>1)for(var i=1;i0){var n=c;c=[];for(var i=0;i1?u-1:0),c=1;c=0,loaded:t,total:s})}},{key:"__didCompleteResponse",value:function(e,t,s){e===this._requestId&&(t&&(''!==this._responseType&&'text'!==this._responseType||(this._response=t),this._hasError=!0,s&&(this._timedOut=!0)),this._clearSubscriptions(),this._requestId=null,this.setReadyState(this.DONE),t?h._interceptor&&h._interceptor.loadingFailed(e,t):h._interceptor&&h._interceptor.loadingFinished(e,this._response.length))}},{key:"_clearSubscriptions",value:function(){(this._subscriptions||[]).forEach((function(e){e&&e.remove()})),this._subscriptions=[]}},{key:"getAllResponseHeaders",value:function(){if(!this.responseHeaders)return null;var t=this.responseHeaders,s=new Map;for(var r of Object.keys(t)){var n=t[r],a=r.toLowerCase(),o=s.get(a);o?(o.headerValue+=', '+n,s.set(a,o)):s.set(a,{lowerHeaderName:a,upperHeaderName:r.toUpperCase(),headerValue:n})}return(0,e.default)(s.values()).sort((function(e,t){return e.upperHeaderNamet.upperHeaderName?1:0})).map((function(e){return e.lowerHeaderName+': '+e.headerValue})).join('\r\n')+'\r\n'}},{key:"getResponseHeader",value:function(e){var t=this._lowerCaseResponseHeaders[e.toLowerCase()];return void 0!==t?t:null}},{key:"setRequestHeader",value:function(e,t){if(this.readyState!==this.OPENED)throw new Error('Request has not been opened');this._headers[e.toLowerCase()]=String(t)}},{key:"setTrackingName",value:function(e){return this._trackingName=e,this}},{key:"setPerformanceLogger",value:function(e){return this._performanceLogger=e,this}},{key:"open",value:function(e,t,s){if(this.readyState!==this.UNSENT)throw new Error('Cannot open, already sending');if(void 0!==s&&!s)throw new Error('Synchronous http requests are not supported');if(!t)throw new Error('Cannot load an empty url');this._method=e.toUpperCase(),this._url=t,this._aborted=!1,this.setReadyState(this.OPENED)}},{key:"send",value:function(t){var s=this;if(this.readyState!==this.OPENED)throw new Error('Request has not been opened');if(this._sent)throw new Error('Request has already been sent');this._sent=!0;var r=this._incrementalEvents||!!this.onreadystatechange||!!this.onprogress;this._subscriptions.push(_r(d[13]).default.addListener('didSendNetworkData',(function(t){return s.__didUploadProgress.apply(s,(0,e.default)(t))}))),this._subscriptions.push(_r(d[13]).default.addListener('didReceiveNetworkResponse',(function(t){return s.__didReceiveResponse.apply(s,(0,e.default)(t))}))),this._subscriptions.push(_r(d[13]).default.addListener('didReceiveNetworkData',(function(t){return s.__didReceiveData.apply(s,(0,e.default)(t))}))),this._subscriptions.push(_r(d[13]).default.addListener('didReceiveNetworkIncrementalData',(function(t){return s.__didReceiveIncrementalData.apply(s,(0,e.default)(t))}))),this._subscriptions.push(_r(d[13]).default.addListener('didReceiveNetworkDataProgress',(function(t){return s.__didReceiveDataProgress.apply(s,(0,e.default)(t))}))),this._subscriptions.push(_r(d[13]).default.addListener('didCompleteNetworkResponse',(function(t){return s.__didCompleteResponse.apply(s,(0,e.default)(t))})));var n='text';'arraybuffer'===this._responseType&&(n='base64'),'blob'===this._responseType&&(n='blob');var a;a='unknown'!==s._trackingName?s._trackingName:s._url,s._perfKey='network_XMLHttpRequest_'+String(a),s._performanceLogger.startTimespan(s._perfKey),_r(d[11])(s._method,'XMLHttpRequest method needs to be defined (%s).',a),_r(d[11])(s._url,'XMLHttpRequest URL needs to be defined (%s).',a),_r(d[13]).default.sendRequest(s._method,s._trackingName,s._url,s._headers,t,n,r,s.timeout,s.__didCreateRequest.bind(s),s.withCredentials)}},{key:"abort",value:function(){this._aborted=!0,this._requestId&&_r(d[13]).default.abortRequest(this._requestId),this.readyState===this.UNSENT||this.readyState===this.OPENED&&!this._sent||this.readyState===this.DONE||(this._reset(),this.setReadyState(this.DONE)),this._reset()}},{key:"setResponseHeaders",value:function(e){this.responseHeaders=e||null;var t=e||{};this._lowerCaseResponseHeaders=Object.keys(t).reduce((function(e,s){return e[s.toLowerCase()]=t[s],e}),{})}},{key:"setReadyState",value:function(e){this.readyState=e,this.dispatchEvent({type:'readystatechange'}),e===this.DONE&&(this._aborted?this.dispatchEvent({type:'abort'}):this._hasError?this._timedOut?this.dispatchEvent({type:'timeout'}):this.dispatchEvent({type:'error'}):this.dispatchEvent({type:'load'}),this.dispatchEvent({type:'loadend'}))}},{key:"addEventListener",value:function(e,s){var r,n,o,u,p;'readystatechange'!==e&&'progress'!==e||(this._incrementalEvents=!0),(r=h,n="addEventListener",o=this,u=3,p=(0,t.default)((0,a.default)(1&u?r.prototype:r),n,o),2&u&&"function"==typeof p?function(e){return p.apply(o,e)}:p)([e,s])}}],[{key:"setInterceptor",value:function(e){h._interceptor=e}}])})(_r(d[9]).apply(void 0,(0,e.default)(l)));f.UNSENT=0,f.OPENED=1,f.HEADERS_RECEIVED=2,f.LOADING=3,f.DONE=4,f._interceptor=null,m.exports=f}),97,[8,11,98,18,17,3,2,56,100,104,105,24,109,110]); +__d((function(g,_r,i,a,m,_e,d){function e(){return m.exports=e="undefined"!=typeof Reflect&&Reflect.get?Reflect.get.bind():function(e,t,r){var o=_r(d[0])(e,t);if(o){var l=Object.getOwnPropertyDescriptor(o,t);return l.get?l.get.call(arguments.length<3?e:r):l.value}},m.exports.__esModule=!0,m.exports.default=m.exports,e.apply(null,arguments)}m.exports=e,m.exports.__esModule=!0,m.exports.default=m.exports}),98,[99]); +__d((function(g,r,i,a,m,e,d){m.exports=function(o,t){for(;!{}.hasOwnProperty.call(o,t)&&null!==(o=r(d[0])(o)););return o},m.exports.__esModule=!0,m.exports.default=m.exports}),99,[2]); +__d((function(g,_r,i,a,m,e,d){var t=_r(d[0])(_r(d[1])),l=_r(d[0])(_r(d[2])),r=_r(d[0])(_r(d[3])),o=_r(d[0])(_r(d[4]));var n=(function(){function n(){(0,t.default)(this,n)}return(0,l.default)(n,null,[{key:"createFromParts",value:function(t,l){(0,o.default)(r.default,'NativeBlobModule is available.');var u='xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g,(function(t){var l=16*Math.random()|0;return('x'==t?l:3&l|8).toString(16)})),f=t.map((function(t){if(t instanceof ArrayBuffer||g.ArrayBufferView&&t instanceof g.ArrayBufferView)throw new Error("Creating blobs from 'ArrayBuffer' and 'ArrayBufferView' are not supported");return t instanceof _r(d[5])?{data:t.data,type:'blob'}:{data:String(t),type:'string'}})),c=f.reduce((function(t,l){return'string'===l.type?t+g.unescape(encodeURI(l.data)).length:t+l.data.size}),0);return r.default.createFromParts(f,u),n.createFromOptions({blobId:u,offset:0,size:c,type:l?l.type:'',lastModified:l?l.lastModified:Date.now()})}},{key:"createFromOptions",value:function(t){return _r(d[6]).register(t.blobId),Object.assign(Object.create(_r(d[5]).prototype),{data:null==t.__collector?Object.assign({},t,{__collector:(l=t.blobId,null==g.__blobCollectorProvider?null:g.__blobCollectorProvider(l))}):t});var l}},{key:"release",value:function(t){(0,o.default)(r.default,'NativeBlobModule is available.'),_r(d[6]).unregister(t),_r(d[6]).has(t)||r.default.release(t)}},{key:"addNetworkingHandler",value:function(){(0,o.default)(r.default,'NativeBlobModule is available.'),r.default.addNetworkingHandler()}},{key:"addWebSocketHandler",value:function(t){(0,o.default)(r.default,'NativeBlobModule is available.'),r.default.addWebSocketHandler(t)}},{key:"removeWebSocketHandler",value:function(t){(0,o.default)(r.default,'NativeBlobModule is available.'),r.default.removeWebSocketHandler(t)}},{key:"sendOverSocket",value:function(t,l){(0,o.default)(r.default,'NativeBlobModule is available.'),r.default.sendOverSocket(t.data,l)}}])})();n.isAvailable=!!r.default,m.exports=n}),100,[8,17,18,101,24,102,103]); +__d((function(g,_r,_i,a,m,_e,d){Object.defineProperty(_e,"__esModule",{value:!0}),_e.default=void 0;var e=(function(e,t){if("function"==typeof WeakMap)var n=new WeakMap,r=new WeakMap;return(function(e,t){if(!t&&e&&e.__esModule)return e;var o,u,l={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return l;if(o=t?r:n){if(o.has(e))return o.get(e);o.set(e,l)}for(var f in e)"default"!==f&&{}.hasOwnProperty.call(e,f)&&((u=(o=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,f))&&(u.get||u.set)?o(l,f,u):l[f]=e[f]);return l})(e,t)})(_r(d[0])).get('BlobModule'),t=null,n=null;null!=e&&(n={getConstants:function(){return null==t&&(t=e.getConstants()),t},addNetworkingHandler:function(){e.addNetworkingHandler()},addWebSocketHandler:function(t){e.addWebSocketHandler(t)},removeWebSocketHandler:function(t){e.removeWebSocketHandler(t)},sendOverSocket:function(t,n){e.sendOverSocket(t,n)},createFromParts:function(t,n){e.createFromParts(t,n)},release:function(t){e.release(t)}});_e.default=n}),101,[23]); +__d((function(g,r,i,a,m,e,d){'use strict';var t=r(d[2])((function t(){var s=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],o=arguments.length>1?arguments[1]:void 0;r(d[0])(this,t);var n=r(d[1]);this.data=n.createFromParts(s,o).data}),[{key:"data",get:function(){if(!this._data)throw new Error('Blob has been closed and is no longer available');return this._data},set:function(t){this._data=t}},{key:"slice",value:function(t,s){var o=r(d[1]),n=this.data,l=n.offset,h=n.size;return'number'==typeof t&&(t>h&&(t=h),l+=t,h-=t,'number'==typeof s&&(s<0&&(s=this.size+s),s>this.size&&(s=this.size),h=s-t)),o.createFromOptions({blobId:this.data.blobId,offset:l,size:h,__collector:this.data.__collector})}},{key:"close",value:function(){r(d[1]).release(this.data.blobId),this.data=null}},{key:"size",get:function(){return this.data.size}},{key:"type",get:function(){return this.data.type||''}}]);m.exports=t}),102,[17,100,18]); +__d((function(g,r,i,a,m,e,d){var n={};m.exports={register:function(t){n[t]?n[t]++:n[t]=1},unregister:function(t){n[t]&&(n[t]--,n[t]<=0&&delete n[t])},has:function(t){return n[t]&&n[t]>0}}}),103,[]); +__d((function(g,r,_i,a,m,e,d){'use strict';Object.defineProperty(e,'__esModule',{value:!0});var t=new WeakMap,n=new WeakMap;function o(n){var o=t.get(n);return console.assert(null!=o,"'this' is expected an Event object, but got",n),o}function i(t){null==t.passiveListener?t.event.cancelable&&(t.canceled=!0,"function"==typeof t.event.preventDefault&&t.event.preventDefault()):"undefined"!=typeof console&&"function"==typeof console.error&&console.error("Unable to preventDefault inside passive event listener invocation.",t.passiveListener)}function l(n,o){t.set(this,{eventTarget:n,event:o,eventPhase:2,currentTarget:n,canceled:!1,stopped:!1,immediateStopped:!1,passiveListener:null,timeStamp:o.timeStamp||Date.now()}),Object.defineProperty(this,"isTrusted",{value:!1,enumerable:!0});for(var i=Object.keys(o),l=0;l0){for(var t=new Array(arguments.length),n=0;n1&&void 0!==arguments[1]?arguments[1]:l(),s=arguments.length>2?arguments[2]:void 0;this._closed||null==this._points[t]&&(this._points[t]=e,s&&(this._pointExtras[t]=s),this._isLoggingForWebPerformance&&u.mark(`${o}_${t}`,{startTime:e}))}},{key:"removeExtra",value:function(t){var e=this._extras[t];return delete this._extras[t],e}},{key:"setExtra",value:function(t,e){this._closed||this._extras.hasOwnProperty(t)||(this._extras[t]=e)}},{key:"startTimespan",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:l(),s=arguments.length>2?arguments[2]:void 0;this._closed||this._timespans[t]||(this._timespans[t]={startTime:e,startExtras:s},r[t]=i.beginAsyncEvent(t),this._isLoggingForWebPerformance&&u.mark(`${o}_timespan_start_${t}`,{startTime:e}))}},{key:"stopTimespan",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:l(),s=arguments.length>2?arguments[2]:void 0;if(!this._closed){var n=this._timespans[t];n&&null!=n.startTime&&null==n.endTime&&(n.endExtras=s,n.endTime=e,n.totalTime=n.endTime-(n.startTime||0),null!=r[t]&&(i.endAsyncEvent(t,r[t]),delete r[t]),this._isLoggingForWebPerformance&&u.measure(`${o}_${t}`,{start:`${o}_timespan_start_${t}`,end:e}))}}}])}),107,[8,17,18,32,61,108]); +__d((function(g,r,i,a,m,e,d){'use strict';m.exports=function(){var n;return(n=console).log.apply(n,arguments)}}),108,[]); +__d((function(g,r,_i,a,m,e,d){'use strict';e.byteLength=function(t){var n=c(t),o=n[0],h=n[1];return 3*(o+h)/4-h},e.toByteArray=function(t){var h,u,f=c(t),A=f[0],C=f[1],y=new o(i(t,A,C)),s=0,v=C>0?A-4:A;for(u=0;u>16&255,y[s++]=h>>8&255,y[s++]=255&h;2===C&&(h=n[t.charCodeAt(u)]<<2|n[t.charCodeAt(u+1)]>>4,y[s++]=255&h);1===C&&(h=n[t.charCodeAt(u)]<<10|n[t.charCodeAt(u+1)]<<4|n[t.charCodeAt(u+2)]>>2,y[s++]=h>>8&255,y[s++]=255&h);return y},e.fromByteArray=function(n){for(var o,h=n.length,u=h%3,c=[],i=16383,A=0,C=h-u;AC?C:A+i));1===u?(o=n[h-1],c.push(t[o>>2]+t[o<<4&63]+'==')):2===u&&(o=(n[h-2]<<8)+n[h-1],c.push(t[o>>10]+t[o>>4&63]+t[o<<2&63]+'='));return c.join('')};for(var t=[],n=[],o='undefined'!=typeof Uint8Array?Uint8Array:Array,h='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/',u=0;u<64;++u)t[u]=h[u],n[h.charCodeAt(u)]=u;function c(t){var n=t.length;if(n%4>0)throw new Error('Invalid string. Length must be a multiple of 4');var o=t.indexOf('=');return-1===o&&(o=n),[o,o===n?0:4-o%4]}function i(t,n,o){return 3*(n+o)/4-o}function f(n,o,h){for(var u,c,i=[],f=o;f>18&63]+t[c>>12&63]+t[c>>6&63]+t[63&c]);return i.join('')}n['-'.charCodeAt(0)]=62,n['_'.charCodeAt(0)]=63}),109,[]); +__d((function(g,r,i,a,m,_e,d){Object.defineProperty(_e,"__esModule",{value:!0}),_e.default=void 0;var e=r(d[0])(r(d[1])),t=r(d[0])(r(d[2])),u=r(d[0])(r(d[3])),n=r(d[0])(r(d[4])),o=r(d[0])(r(d[5])),f=r(d[0])(r(d[6])),l=r(d[0])(r(d[7])),c=r(d[0])(r(d[8])),s=r(d[0])(r(d[9]));function v(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(v=function(){return!!e})()}function p(e){var t=[];for(var u in e)t.push([u,e[u]]);return t}var y=1;var h=(function(f){function h(){return(0,e.default)(this,h),t=this,o=h,f=['ios'!==l.default.OS?null:s.default],o=(0,n.default)(o),(0,u.default)(t,v()?Reflect.construct(o,f||[],(0,n.default)(t).constructor):o.apply(t,f));var t,o,f}return(0,o.default)(h,f),(0,t.default)(h,[{key:"sendRequest",value:function(e,t,u,n,o,f,l,v,h,k){var R=(0,c.default)(o);R&&R.formData&&(R.formData=R.formData.map((function(e){return Object.assign({},e,{headers:p(e.headers)})})));var b=y++;s.default.sendRequest(e,u,b,p(n),Object.assign({},R,{trackingName:t}),f,l,v,k),h(b)}},{key:"abortRequest",value:function(e){s.default.abortRequest(e)}},{key:"clearCookies",value:function(e){s.default.clearCookies(e)}}])})(f.default);_e.default=new h}),110,[8,17,18,3,2,56,111,21,112,115]); +__d((function(g,r,i,a,m,e,d){'use strict';Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var t=r(d[0])(r(d[1])),n=r(d[0])(r(d[2])),l=r(d[0])(r(d[3])),u=r(d[0])(r(d[4])),o=r(d[0])(r(d[5]));e.default=(0,n.default)((function n(u){(0,t.default)(this,n),'ios'===l.default.OS&&(0,o.default)(null!=u,'`new NativeEventEmitter()` requires a non-null argument.');var s=!!u&&'function'==typeof u.addListener,v=!!u&&'function'==typeof u.removeListeners;u&&s&&v?this._nativeModule=u:null!=u&&(s||console.warn('`new NativeEventEmitter()` was called with a non-null argument without the required `addListener` method.'),v||console.warn('`new NativeEventEmitter()` was called with a non-null argument without the required `removeListeners` method.'))}),[{key:"addListener",value:function(t,n,l){var o,s=this;null==(o=this._nativeModule)||o.addListener(t);var v=u.default.addListener(t,n,l);return{remove:function(){var t;null!=v&&(null==(t=s._nativeModule)||t.removeListeners(1),v.remove(),v=null)}}}},{key:"emit",value:function(t){for(var n=arguments.length,l=new Array(n>1?n-1:0),o=1;o-1};function c(t){if('string'!=typeof t&&(t=String(t)),/[^a-z0-9\-#$%&'*+.^_`|~!]/i.test(t)||''===t)throw new TypeError('Invalid character in header field name: "'+t+'"');return t.toLowerCase()}function y(t){return'string'!=typeof t&&(t=String(t)),t}function p(t){var e={next:function(){var e=t.shift();return{done:void 0===e,value:e}}};return n&&(e[Symbol.iterator]=function(){return e}),e}function l(t){this.map={},t instanceof l?t.forEach((function(t,e){this.append(e,t)}),this):Array.isArray(t)?t.forEach((function(t){if(2!=t.length)throw new TypeError('Headers constructor: expected name/value pair to be length 2, found'+t.length);this.append(t[0],t[1])}),this):t&&Object.getOwnPropertyNames(t).forEach((function(e){this.append(e,t[e])}),this)}function b(t){if(!t._noBody)return t.bodyUsed?Promise.reject(new TypeError('Already read')):void(t.bodyUsed=!0)}function w(t){return new Promise((function(e,o){t.onload=function(){e(t.result)},t.onerror=function(){o(t.error)}}))}function v(t){var e=new FileReader,o=w(e);return e.readAsArrayBuffer(t),o}function E(t){for(var e=new Uint8Array(t),o=new Array(e.length),n=0;n-1?i:n),this.mode=o.mode||this.mode||null,this.signal=o.signal||this.signal||(function(){if('AbortController'in e)return(new AbortController).signal})(),this.referrer=null,('GET'===this.method||'HEAD'===this.method)&&s)throw new TypeError('Body not allowed for GET or HEAD requests');if(this._initBody(s),!('GET'!==this.method&&'HEAD'!==this.method||'no-store'!==o.cache&&'no-cache'!==o.cache)){var h=/([?&])_=[^&]*/;h.test(this.url)?this.url=this.url.replace(h,'$1_='+(new Date).getTime()):this.url+=(/\?/.test(this.url)?'&':'?')+'_='+(new Date).getTime()}}function B(t){var e=new FormData;return t.trim().split('&').forEach((function(t){if(t){var o=t.split('='),n=o.shift().replace(/\+/g,' '),i=o.join('=').replace(/\+/g,' ');e.append(decodeURIComponent(n),decodeURIComponent(i))}})),e}function x(t,e){if(!(this instanceof x))throw new TypeError('Please use the "new" operator, this DOM object constructor cannot be called as a function.');if(e||(e={}),this.type='default',this.status=void 0===e.status?200:e.status,this.status<200||this.status>599)throw new RangeError("Failed to construct 'Response': The status provided (0) is outside the range [200, 599].");this.ok=this.status>=200&&this.status<300,this.statusText=void 0===e.statusText?'':''+e.statusText,this.headers=new l(e.headers),this.url=e.url||'',this._initBody(t)}g.prototype.clone=function(){return new g(this,{body:this._bodyInit})},_.call(g.prototype),_.call(x.prototype),x.prototype.clone=function(){return new x(this._bodyInit,{status:this.status,statusText:this.statusText,headers:new l(this.headers),url:this.url})},x.error=function(){var t=new x(null,{status:200,statusText:''});return t.status=0,t.type='error',t};var O=[301,302,303,307,308];x.redirect=function(t,e){if(-1===O.indexOf(e))throw new RangeError('Invalid status code');return new x(null,{status:e,headers:{location:t}})},t.DOMException=e.DOMException;try{new t.DOMException}catch(e){t.DOMException=function(t,e){this.message=t,this.name=e;var o=Error(t);this.stack=o.stack},t.DOMException.prototype=Object.create(Error.prototype),t.DOMException.prototype.constructor=t.DOMException}function P(o,n){return new Promise((function(s,u){var f=new g(o,n);if(f.signal&&f.signal.aborted)return u(new t.DOMException('Aborted','AbortError'));var p=new XMLHttpRequest;function b(){p.abort()}if(p.onload=function(){var t,e,o={status:p.status,statusText:p.statusText,headers:(t=p.getAllResponseHeaders()||'',e=new l,t.replace(/\r?\n[\t ]+/g,' ').split('\r').map((function(t){return 0===t.indexOf('\n')?t.substr(1,t.length):t})).forEach((function(t){var o=t.split(':'),n=o.shift().trim();if(n){var i=o.join(':').trim();try{e.append(n,i)}catch(t){console.warn('Response '+t.message)}}})),e)};o.url='responseURL'in p?p.responseURL:o.headers.get('X-Request-URL');var n='response'in p?p.response:p.responseText;setTimeout((function(){s(new x(n,o))}),0)},p.onerror=function(){setTimeout((function(){u(new TypeError('Network request failed'))}),0)},p.ontimeout=function(){setTimeout((function(){u(new TypeError('Network request failed'))}),0)},p.onabort=function(){setTimeout((function(){u(new t.DOMException('Aborted','AbortError'))}),0)},p.open(f.method,(function(t){try{return''===t&&e.location.href?e.location.href:t}catch(e){return t}})(f.url),!0),'include'===f.credentials?p.withCredentials=!0:'omit'===f.credentials&&(p.withCredentials=!1),'responseType'in p&&(i?p.responseType='blob':h&&(p.responseType='arraybuffer')),n&&'object'==typeof n.headers&&!(n.headers instanceof l||e.Headers&&n.headers instanceof e.Headers)){var w=[];Object.getOwnPropertyNames(n.headers).forEach((function(t){w.push(c(t)),p.setRequestHeader(t,y(n.headers[t]))})),f.headers.forEach((function(t,e){-1===w.indexOf(e)&&p.setRequestHeader(e,t)}))}else f.headers.forEach((function(t,e){p.setRequestHeader(e,t)}));f.signal&&(f.signal.addEventListener('abort',b),p.onreadystatechange=function(){4===p.readyState&&f.signal.removeEventListener('abort',b)}),p.send(void 0===f._bodyInit?null:f._bodyInit)}))}P.polyfill=!0,e.fetch||(e.fetch=P,e.Headers=l,e.Request=g,e.Response=x),t.Headers=l,t.Request=g,t.Response=x,t.fetch=P,Object.defineProperty(t,'__esModule',{value:!0})},'object'==typeof _e&&void 0!==m?e(_e):'function'==typeof define&&define.amd?define(['exports'],e):e(t.WHATWGFetch={})}),117,[]); +__d((function(g,r,i,a,m,_e,d){var e=r(d[0])(r(d[1])),t=r(d[0])(r(d[2])),o=r(d[0])(r(d[3])),n=r(d[0])(r(d[4])),s=r(d[0])(r(d[5])),u=r(d[0])(r(d[6])),c=r(d[0])(r(d[7])),l=r(d[0])(r(d[8])),f=r(d[0])(r(d[9])),h=r(d[0])(r(d[10])),y=r(d[0])(r(d[11])),b=r(d[0])(r(d[12])),p=r(d[0])(r(d[13])),v=r(d[0])(r(d[14])),_=r(d[0])(r(d[15])),E=r(d[0])(r(d[16])),k=["headers"];function S(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(S=function(){return!!e})()}var I=0,N=(function(_){function N(o,u,c){var l,h,p,v;(0,t.default)(this,N),h=this,p=N,p=(0,s.default)(p),(l=(0,n.default)(h,S()?Reflect.construct(p,v||[],(0,s.default)(h).constructor):p.apply(h,v))).CONNECTING=0,l.OPEN=1,l.CLOSING=2,l.CLOSED=3,l.readyState=0,l.url=o,'string'==typeof u&&(u=[u]);var _=c||{},E=_.headers,O=void 0===E?{}:E,w=(0,e.default)(_,k);return w&&'string'==typeof w.origin&&(console.warn('Specifying `origin` as a WebSocket connection option is deprecated. Include it under `headers` instead.'),O.origin=w.origin,delete w.origin),Object.keys(w).length>0&&console.warn('Unrecognized WebSocket connection option(s) `'+Object.keys(w).join('`, `')+"`. Did you mean to put these under `headers`?"),Array.isArray(u)||(u=null),l._eventEmitter=new f.default('ios'!==y.default.OS?null:b.default),l._socketId=I++,l._registerEvents(),b.default.connect(o,u,{headers:O},l._socketId),l}return(0,u.default)(N,_),(0,o.default)(N,[{key:"binaryType",get:function(){return this._binaryType},set:function(e){if('blob'!==e&&'arraybuffer'!==e)throw new Error("binaryType must be either 'blob' or 'arraybuffer'");'blob'!==this._binaryType&&'blob'!==e||((0,E.default)(l.default.isAvailable,'Native module BlobModule is required for blob support'),'blob'===e?l.default.addWebSocketHandler(this._socketId):l.default.removeWebSocketHandler(this._socketId)),this._binaryType=e}},{key:"close",value:function(e,t){this.readyState!==this.CLOSING&&this.readyState!==this.CLOSED&&(this.readyState=this.CLOSING,this._close(e,t))}},{key:"send",value:function(e){if(this.readyState===this.CONNECTING)throw new Error('INVALID_STATE_ERR');if(e instanceof c.default)return(0,E.default)(l.default.isAvailable,'Native module BlobModule is required for blob support'),void l.default.sendOverSocket(e,this._socketId);if('string'!=typeof e){if(!(e instanceof ArrayBuffer||ArrayBuffer.isView(e)))throw new Error('Unsupported data type');b.default.sendBinary((0,h.default)(e),this._socketId)}else b.default.send(e,this._socketId)}},{key:"ping",value:function(){if(this.readyState===this.CONNECTING)throw new Error('INVALID_STATE_ERR');b.default.ping(this._socketId)}},{key:"_close",value:function(e,t){var o='number'==typeof e?e:1e3,n='string'==typeof t?t:'';b.default.close(o,n,this._socketId),l.default.isAvailable&&'blob'===this._binaryType&&l.default.removeWebSocketHandler(this._socketId)}},{key:"_unregisterEvents",value:function(){this._subscriptions.forEach((function(e){return e.remove()})),this._subscriptions=[]}},{key:"_registerEvents",value:function(){var e=this;this._subscriptions=[this._eventEmitter.addListener('websocketMessage',(function(t){if(t.id===e._socketId){var o=t.data;switch(t.type){case'binary':o=v.default.toByteArray(t.data).buffer;break;case'blob':o=l.default.createFromOptions(t.data)}e.dispatchEvent(new p.default('message',{data:o}))}})),this._eventEmitter.addListener('websocketOpen',(function(t){t.id===e._socketId&&(e.readyState=e.OPEN,e.protocol=t.protocol,e.dispatchEvent(new p.default('open')))})),this._eventEmitter.addListener('websocketClosed',(function(t){t.id===e._socketId&&(e.readyState=e.CLOSED,e.dispatchEvent(new p.default('close',{code:t.code,reason:t.reason})),e._unregisterEvents(),e.close())})),this._eventEmitter.addListener('websocketFailed',(function(t){t.id===e._socketId&&(e.readyState=e.CLOSED,e.dispatchEvent(new p.default('error',{message:t.message})),e.dispatchEvent(new p.default('close',{code:1006,reason:t.message})),e._unregisterEvents(),e.close())}))]}}])})(_.default.apply(void 0,['close','error','message','open']));N.CONNECTING=0,N.OPEN=1,N.CLOSING=2,N.CLOSED=3,m.exports=N}),118,[8,119,17,18,3,2,56,102,100,111,114,21,121,122,109,104,24]); +__d((function(g,_r,_i,a,m,_e,d){m.exports=function(e,r){if(null==e)return{};var t,o,n=_r(d[0])(e,r);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(o=0;o1&&void 0!==arguments[1]?arguments[1]:'UTF-8';if(this._aborted=!1,null==t)throw new TypeError("Failed to execute 'readAsText' on 'FileReader': parameter 1 is not of type 'Blob'");u.default.readAsText(t.data,o).then((function(t){e._aborted||(e._result=t,e._setReadyState(2))}),(function(t){e._aborted||(e._error=t,e._setReadyState(2))}))}},{key:"abort",value:function(){this._aborted=!0,0!==this._readyState&&2!==this._readyState&&(this._reset(),this._setReadyState(2)),this._reset()}},{key:"readyState",get:function(){return this._readyState}},{key:"error",get:function(){return this._error}},{key:"result",get:function(){return this._result}}])})(r(d[8]).apply(void 0,['abort','error','load','loadstart','loadend','progress']));f.EMPTY=0,f.LOADING=1,f.DONE=2,m.exports=f}),124,[8,17,18,3,2,56,125,109,104]); +__d((function(g,_r,_i,a,m,_e,d){Object.defineProperty(_e,"__esModule",{value:!0}),_e.default=void 0;var e=(function(e,t){if("function"==typeof WeakMap)var r=new WeakMap,n=new WeakMap;return(function(e,t){if(!t&&e&&e.__esModule)return e;var o,f,u={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return u;if(o=t?n:r){if(o.has(e))return o.get(e);o.set(e,u)}for(var i in e)"default"!==i&&{}.hasOwnProperty.call(e,i)&&((f=(o=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,i))&&(f.get||f.set)?o(u,i,f):u[i]=e[i]);return u})(e,t)})(_r(d[0]));_e.default=e.getEnforcing('FileReaderModule')}),125,[23]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.URLSearchParams=e.URL=void 0;var t=r(d[0])(r(d[1])),n=r(d[0])(r(d[2])),o=r(d[0])(r(d[3])),s=null;if(o.default&&'string'==typeof o.default.getConstants().BLOB_URI_SCHEME){var u=o.default.getConstants();s=u.BLOB_URI_SCHEME+':','string'==typeof u.BLOB_URI_HOST&&(s+=`//${u.BLOB_URI_HOST}/`)}var h=e.URLSearchParams=(0,n.default)((function n(o){var s=this;(0,t.default)(this,n),this._searchParams=[],'object'==typeof o&&Object.keys(o).forEach((function(t){return s.append(t,o[t])}))}),[{key:"append",value:function(t,n){this._searchParams.push([t,n])}},{key:"delete",value:function(t){throw new Error('URLSearchParams.delete is not implemented')}},{key:"get",value:function(t){throw new Error('URLSearchParams.get is not implemented')}},{key:"getAll",value:function(t){throw new Error('URLSearchParams.getAll is not implemented')}},{key:"has",value:function(t){throw new Error('URLSearchParams.has is not implemented')}},{key:"set",value:function(t,n){throw new Error('URLSearchParams.set is not implemented')}},{key:"sort",value:function(){throw new Error('URLSearchParams.sort is not implemented')}},{key:Symbol.iterator,value:function(){return this._searchParams[Symbol.iterator]()}},{key:"toString",value:function(){if(0===this._searchParams.length)return'';var t=this._searchParams.length-1;return this._searchParams.reduce((function(n,o,s){return n+encodeURIComponent(o[0])+'='+encodeURIComponent(o[1])+(s===t?'':'&')}),'')}}]);function l(t){return/^(?:(?:(?:https?|ftp):)?\/\/)(?:(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z0-9\u00a1-\uffff][a-z0-9\u00a1-\uffff_-]{0,62})?[a-z0-9\u00a1-\uffff]\.)*(?:[a-z\u00a1-\uffff]{2,}\.?))(?::\d{2,5})?(?:[/?#]\S*)?$/.test(t)}e.URL=(0,n.default)((function n(o,s){(0,t.default)(this,n),this._searchParamsInstance=null;var u=null;if(!s||l(o))this._url=o,this._url.endsWith('/')||(this._url+='/');else{if('string'==typeof s){if(!l(u=s))throw new TypeError(`Invalid base URL: ${u}`)}else u=s.toString();u.endsWith('/')&&(u=u.slice(0,u.length-1)),o.startsWith('/')||(o=`/${o}`),u.endsWith(o)&&(o=''),this._url=`${u}${o}`}}),[{key:"hash",get:function(){throw new Error('URL.hash is not implemented')}},{key:"host",get:function(){throw new Error('URL.host is not implemented')}},{key:"hostname",get:function(){throw new Error('URL.hostname is not implemented')}},{key:"href",get:function(){return this.toString()}},{key:"origin",get:function(){throw new Error('URL.origin is not implemented')}},{key:"password",get:function(){throw new Error('URL.password is not implemented')}},{key:"pathname",get:function(){throw new Error('URL.pathname not implemented')}},{key:"port",get:function(){throw new Error('URL.port is not implemented')}},{key:"protocol",get:function(){throw new Error('URL.protocol is not implemented')}},{key:"search",get:function(){throw new Error('URL.search is not implemented')}},{key:"searchParams",get:function(){return null==this._searchParamsInstance&&(this._searchParamsInstance=new h),this._searchParamsInstance}},{key:"toJSON",value:function(){return this.toString()}},{key:"toString",value:function(){if(null===this._searchParamsInstance)return this._url;var t=this._searchParamsInstance.toString(),n=this._url.indexOf('?')>-1?'&':'?';return this._url+n+t}},{key:"username",get:function(){throw new Error('URL.username is not implemented')}}],[{key:"createObjectURL",value:function(t){if(null===s)throw new Error('Cannot create URL for blob!');return`${s}${t.data.blobId}?offset=${t.data.offset}&size=${t.size}`}},{key:"revokeObjectURL",value:function(t){}}])}),126,[8,17,18,101]); +__d((function(g,r,i,a,m,_e,d){'use strict';function t(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(t=function(){return!!e})()}Object.defineProperty(_e,'__esModule',{value:!0});var e=(function(e){function n(){var e,o,l;throw r(d[2])(this,n),e=this,o=n,o=r(d[0])(o),r(d[1])(e,t()?Reflect.construct(o,l||[],r(d[0])(e).constructor):o.apply(e,l)),new TypeError("AbortSignal cannot be constructed directly")}return r(d[3])(n,e),r(d[4])(n,[{key:"aborted",get:function(){var t=o.get(this);if("boolean"!=typeof t)throw new TypeError("Expected 'this' to be an 'AbortSignal' object, but got "+(null===this?"null":typeof this));return t}}])})(r(d[5]).EventTarget);r(d[5]).defineEventAttribute(e.prototype,"abort");var o=new WeakMap;Object.defineProperties(e.prototype,{aborted:{enumerable:!0}}),"function"==typeof Symbol&&"symbol"==typeof Symbol.toStringTag&&Object.defineProperty(e.prototype,Symbol.toStringTag,{configurable:!0,value:"AbortSignal"});var n=r(d[4])((function t(){var n;r(d[2])(this,t),l.set(this,(n=Object.create(e.prototype),r(d[5]).EventTarget.call(n),o.set(n,!1),n))}),[{key:"signal",get:function(){return u(this)}},{key:"abort",value:function(){var t;t=u(this),!1===o.get(t)&&(o.set(t,!0),t.dispatchEvent({type:"abort"}))}}]),l=new WeakMap;function u(t){var e=l.get(t);if(null==e)throw new TypeError("Expected 'this' to be an 'AbortController' object, but got "+(null===t?"null":typeof t));return e}Object.defineProperties(n.prototype,{signal:{enumerable:!0},abort:{enumerable:!0}}),"function"==typeof Symbol&&"symbol"==typeof Symbol.toStringTag&&Object.defineProperty(n.prototype,Symbol.toStringTag,{configurable:!0,value:"AbortController"}),_e.AbortController=n,_e.AbortSignal=e,_e.default=n,m.exports=n,m.exports.AbortController=m.exports.default=n,m.exports.AbortSignal=e}),127,[2,3,17,56,18,104]); +__d((function(g,r,i,a,m,e,d){'use strict';g.alert||(g.alert=function(t){r(d[0]).alert('Alert',''+t)})}),128,[129]); +__d((function(g,r,i,a,m,e,d){var t=r(d[0])(r(d[1])),n=r(d[0])(r(d[2])),o=r(d[0])(r(d[3])),s=r(d[0])(r(d[4])),l=(function(){function l(){(0,t.default)(this,l)}return(0,n.default)(l,null,[{key:"alert",value:function(t,n,s,u){if('ios'===o.default.OS)l.prompt(t,n,s,'default',void 0,void 0,u);else if('android'===o.default.OS){var c=r(d[5]).default;if(!c)return;var f=c.getConstants(),v={title:t||'',message:n||'',cancelable:!1};u&&u.cancelable&&(v.cancelable=u.cancelable);var p=s?s.slice(0,3):[{text:"OK"}],y=p.pop(),b=p.pop(),h=p.pop();h&&(v.buttonNeutral=h.text||''),b&&(v.buttonNegative=b.text||''),y&&(v.buttonPositive=y.text||"OK");c.showAlert(v,(function(t){return console.warn(t)}),(function(t,n){t===f.buttonClicked?n===f.buttonNeutral?h.onPress&&h.onPress():n===f.buttonNegative?b.onPress&&b.onPress():n===f.buttonPositive&&y.onPress&&y.onPress():t===f.dismissed&&u&&u.onDismiss&&u.onDismiss()}))}}},{key:"prompt",value:function(t,n,l){var u=arguments.length>3&&void 0!==arguments[3]?arguments[3]:'plain-text',c=arguments.length>4?arguments[4]:void 0,f=arguments.length>5?arguments[5]:void 0,v=arguments.length>6?arguments[6]:void 0;if('ios'===o.default.OS){var p,y,b,h=[],P=[];'function'==typeof l?h=[l]:Array.isArray(l)&&l.forEach((function(t,n){if(h[n]=t.onPress,'cancel'===t.style?p=String(n):'destructive'===t.style&&(y=String(n)),t.isPreferred&&(b=String(n)),t.text||n<(l||[]).length-1){var o={};o[n]=t.text||'',P.push(o)}})),s.default.alertWithArgs({title:t||'',message:n||void 0,buttons:P,type:u||void 0,defaultValue:c,cancelButtonKey:p,destructiveButtonKey:y,preferredButtonKey:b,keyboardType:f,userInterfaceStyle:(null==v?void 0:v.userInterfaceStyle)||void 0},(function(t,n){var o=h[t];o&&o(n)}))}}}])})();m.exports=l}),129,[8,17,18,21,130,131]); +__d((function(g,r,i,a,m,e,d){var t=r(d[0])(r(d[1]));function n(){}m.exports={alertWithArgs:function(f,o){t.default&&t.default.showAlert(f,n,o||n)}}}),130,[8,131]); +__d((function(g,_r,_i,a,m,_e,d){Object.defineProperty(_e,"__esModule",{value:!0}),_e.default=void 0;var e=(function(e,t){if("function"==typeof WeakMap)var r=new WeakMap,n=new WeakMap;return(function(e,t){if(!t&&e&&e.__esModule)return e;var o,f,u={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return u;if(o=t?n:r){if(o.has(e))return o.get(e);o.set(e,u)}for(var i in e)"default"!==i&&{}.hasOwnProperty.call(e,i)&&((f=(o=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,i))&&(f.get||f.set)?o(u,i,f):u[i]=e[i]);return u})(e,t)})(_r(d[0]));_e.default=e.get('DialogManagerAndroid')}),131,[23]); +__d((function(g,r,i,a,m,e,d){'use strict';var t=g.navigator;void 0===t?g.navigator={product:'ReactNative'}:r(d[0]).polyfillObjectProperty(t,'product',(function(){return'ReactNative'}))}),132,[83]); +__d((function(g,r,i,a,m,e,d){'use strict';var n;if(!0===g.RN$Bridgeless&&g.RN$registerCallableModule)n=g.RN$registerCallableModule;else{var t=r(d[0]);n=function(n,u){return t.registerLazyCallableModule(n,u)}}n('Systrace',(function(){return r(d[1])})),!0!==g.RN$Bridgeless&&n('JSTimers',(function(){return r(d[2])})),n('HeapCapture',(function(){return r(d[3])})),n('SamplingProfiler',(function(){return r(d[4])})),n('RCTLog',(function(){return r(d[5])})),n('RCTDeviceEventEmitter',(function(){return r(d[6]).default})),n('RCTNativeAppEventEmitter',(function(){return r(d[7])})),n('GlobalPerformanceLogger',(function(){return r(d[8])})),n('HMRClient',(function(){return r(d[9])}))}),133,[30,32,92,134,136,138,9,139,105,140]); +__d((function(g,r,i,a,m,_e,d){var e=r(d[0])(r(d[1])),t={captureHeap:function(t){var p=null;try{g.nativeCaptureHeap(t),console.log('HeapCapture.captureHeap succeeded: '+t)}catch(e){console.log('HeapCapture.captureHeap error: '+e.toString()),p=e.toString()}e.default&&e.default.captureComplete(t,p)}};m.exports=t}),134,[8,135]); +__d((function(g,_r,_i,a,m,_e,d){Object.defineProperty(_e,"__esModule",{value:!0}),_e.default=void 0;var e=(function(e,t){if("function"==typeof WeakMap)var r=new WeakMap,n=new WeakMap;return(function(e,t){if(!t&&e&&e.__esModule)return e;var f,o,u={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return u;if(f=t?n:r){if(f.has(e))return f.get(e);f.set(e,u)}for(var i in e)"default"!==i&&{}.hasOwnProperty.call(e,i)&&((o=(f=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,i))&&(o.get||o.set)?f(u,i,o):u[i]=e[i]);return u})(e,t)})(_r(d[0]));_e.default=e.get('JSCHeapCapture')}),135,[23]); +__d((function(g,r,i,a,m,_e,d){'use strict';var o={poke:function(o){var e=null,l=null;try{null===(l=g.pokeSamplingProfiler())?console.log('The JSC Sampling Profiler has started'):console.log('The JSC Sampling Profiler has stopped')}catch(o){console.log('Error occurred when restarting Sampling Profiler: '+o.toString()),e=o.toString()}var n=r(d[0]).default;n&&n.operationComplete(o,l,e)}};m.exports=o}),136,[137]); +__d((function(g,_r,_i,a,m,_e,d){Object.defineProperty(_e,"__esModule",{value:!0}),_e.default=void 0;var e=(function(e,t){if("function"==typeof WeakMap)var r=new WeakMap,n=new WeakMap;return(function(e,t){if(!t&&e&&e.__esModule)return e;var f,o,u={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return u;if(f=t?n:r){if(f.has(e))return f.get(e);f.set(e,u)}for(var i in e)"default"!==i&&{}.hasOwnProperty.call(e,i)&&((o=(f=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,i))&&(o.get||o.set)?f(u,i,o):u[i]=e[i]);return u})(e,t)})(_r(d[0]));_e.default=e.get('JSCSamplingProfiler')}),137,[23]); +__d((function(g,r,i,a,m,e,d){'use strict';var o={log:'log',info:'info',warn:'warn',error:'error',fatal:'error'},n=null,l={logIfNoNativeHook:function(o){for(var t=arguments.length,f=new Array(t>1?t-1:0),c=1;c1?f-1:0),v=1;v>>8)>>>0,u|=0)}}}),164,[165,167]); +__d((function(g,r,i,a,m,e,d){var t=r(d[0])(r(d[1]));m.exports=function(n){if('object'==typeof n&&null!=n){var o=(0,r(d[2]).normalizeColorObject)(n);if(null!=o)return o}if('string'==typeof n||'number'==typeof n)return(0,t.default)(n)}}),165,[8,166,167]); +__d((function(_g,_r,i,a,m,e,d){'use strict';function r(r,n,t){return t<0&&(t+=1),t>1&&(t-=1),t<.16666666666666666?r+6*(n-r)*t:t<.5?n:t<.6666666666666666?r+(n-r)*(.6666666666666666-t)*6:r}function n(n,t,u){var s=u<.5?u*(1+t):u+t-u*t,c=2*u-s,l=r(c,s,n+.3333333333333333),o=r(c,s,n),g=r(c,s,n-.3333333333333333);return Math.round(255*l)<<24|Math.round(255*o)<<16|Math.round(255*g)<<8}function t(n,t,u){if(t+u>=1){var s=Math.round(255*t/(t+u));return s<<24|s<<16|s<<8}var c=r(0,1,n+.3333333333333333)*(1-t-u)+t,l=r(0,1,n)*(1-t-u)+t,o=r(0,1,n-.3333333333333333)*(1-t-u)+t;return Math.round(255*c)<<24|Math.round(255*l)<<16|Math.round(255*o)<<8}var u,s='[-+]?\\d*\\.?\\d+',c="[-+]?\\d*\\.?\\d+%";function l(){for(var r=arguments.length,n=new Array(r),t=0;t255?255:n}function f(r){return(parseFloat(r)%360+360)%360/360}function p(r){var n=parseFloat(r);return n<0?0:n>1?255:Math.round(255*n)}function y(r){var n=parseFloat(r);return n<0?0:n>100?1:n/100}function w(r){switch(r){case'transparent':return 0;case'aliceblue':return 4042850303;case'antiquewhite':return 4209760255;case'aqua':case'cyan':return 16777215;case'aquamarine':return 2147472639;case'azure':return 4043309055;case'beige':return 4126530815;case'bisque':return 4293182719;case'black':return 255;case'blanchedalmond':return 4293643775;case'blue':return 65535;case'blueviolet':return 2318131967;case'brown':return 2771004159;case'burlywood':return 3736635391;case'burntsienna':return 3934150143;case'cadetblue':return 1604231423;case'chartreuse':return 2147418367;case'chocolate':return 3530104575;case'coral':return 4286533887;case'cornflowerblue':return 1687547391;case'cornsilk':return 4294499583;case'crimson':return 3692313855;case'darkblue':return 35839;case'darkcyan':return 9145343;case'darkgoldenrod':return 3095792639;case'darkgray':case'darkgrey':return 2846468607;case'darkgreen':return 6553855;case'darkkhaki':return 3182914559;case'darkmagenta':return 2332068863;case'darkolivegreen':return 1433087999;case'darkorange':return 4287365375;case'darkorchid':return 2570243327;case'darkred':return 2332033279;case'darksalmon':return 3918953215;case'darkseagreen':return 2411499519;case'darkslateblue':return 1211993087;case'darkslategray':case'darkslategrey':return 793726975;case'darkturquoise':return 13554175;case'darkviolet':return 2483082239;case'deeppink':return 4279538687;case'deepskyblue':return 12582911;case'dimgray':case'dimgrey':return 1768516095;case'dodgerblue':return 512819199;case'firebrick':return 2988581631;case'floralwhite':return 4294635775;case'forestgreen':return 579543807;case'fuchsia':case'magenta':return 4278255615;case'gainsboro':return 3705462015;case'ghostwhite':return 4177068031;case'gold':return 4292280575;case'goldenrod':return 3668254975;case'gray':case'grey':return 2155905279;case'green':return 8388863;case'greenyellow':return 2919182335;case'honeydew':return 4043305215;case'hotpink':return 4285117695;case'indianred':return 3445382399;case'indigo':return 1258324735;case'ivory':return 4294963455;case'khaki':return 4041641215;case'lavender':return 3873897215;case'lavenderblush':return 4293981695;case'lawngreen':return 2096890111;case'lemonchiffon':return 4294626815;case'lightblue':return 2916673279;case'lightcoral':return 4034953471;case'lightcyan':return 3774873599;case'lightgoldenrodyellow':return 4210742015;case'lightgray':case'lightgrey':return 3553874943;case'lightgreen':return 2431553791;case'lightpink':return 4290167295;case'lightsalmon':return 4288707327;case'lightseagreen':return 548580095;case'lightskyblue':return 2278488831;case'lightslategray':case'lightslategrey':return 2005441023;case'lightsteelblue':return 2965692159;case'lightyellow':return 4294959359;case'lime':return 16711935;case'limegreen':return 852308735;case'linen':return 4210091775;case'maroon':return 2147483903;case'mediumaquamarine':return 1724754687;case'mediumblue':return 52735;case'mediumorchid':return 3126187007;case'mediumpurple':return 2473647103;case'mediumseagreen':return 1018393087;case'mediumslateblue':return 2070474495;case'mediumspringgreen':return 16423679;case'mediumturquoise':return 1221709055;case'mediumvioletred':return 3340076543;case'midnightblue':return 421097727;case'mintcream':return 4127193855;case'mistyrose':return 4293190143;case'moccasin':return 4293178879;case'navajowhite':return 4292783615;case'navy':return 33023;case'oldlace':return 4260751103;case'olive':return 2155872511;case'olivedrab':return 1804477439;case'orange':return 4289003775;case'orangered':return 4282712319;case'orchid':return 3664828159;case'palegoldenrod':return 4008225535;case'palegreen':return 2566625535;case'paleturquoise':return 2951671551;case'palevioletred':return 3681588223;case'papayawhip':return 4293907967;case'peachpuff':return 4292524543;case'peru':return 3448061951;case'pink':return 4290825215;case'plum':return 3718307327;case'powderblue':return 2967529215;case'purple':return 2147516671;case'rebeccapurple':return 1714657791;case'red':return 4278190335;case'rosybrown':return 3163525119;case'royalblue':return 1097458175;case'saddlebrown':return 2336560127;case'salmon':return 4202722047;case'sandybrown':return 4104413439;case'seagreen':return 780883967;case'seashell':return 4294307583;case'sienna':return 2689740287;case'silver':return 3233857791;case'skyblue':return 2278484991;case'slateblue':return 1784335871;case'slategray':case'slategrey':return 1887473919;case'snow':return 4294638335;case'springgreen':return 16744447;case'steelblue':return 1182971135;case'tan':return 3535047935;case'teal':return 8421631;case'thistle':return 3636451583;case'tomato':return 4284696575;case'turquoise':return 1088475391;case'violet':return 4001558271;case'wheat':return 4125012991;case'white':return 4294967295;case'whitesmoke':return 4126537215;case'yellow':return 4294902015;case'yellowgreen':return 2597139199}return null}m.exports=function(r){if('number'==typeof r)return r>>>0===r&&r>=0&&r<=4294967295?r:null;if('string'!=typeof r)return null;var u,s=h();if(u=s.hex6.exec(r))return parseInt(u[1]+'ff',16)>>>0;var c=w(r);return null!=c?c:(u=s.rgb.exec(r))?(b(u[1])<<24|b(u[2])<<16|b(u[3])<<8|255)>>>0:(u=s.rgba.exec(r))?void 0!==u[6]?(b(u[6])<<24|b(u[7])<<16|b(u[8])<<8|p(u[9]))>>>0:(b(u[2])<<24|b(u[3])<<16|b(u[4])<<8|p(u[5]))>>>0:(u=s.hex3.exec(r))?parseInt(u[1]+u[1]+u[2]+u[2]+u[3]+u[3]+'ff',16)>>>0:(u=s.hex8.exec(r))?parseInt(u[1],16)>>>0:(u=s.hex4.exec(r))?parseInt(u[1]+u[1]+u[2]+u[2]+u[3]+u[3]+u[4]+u[4],16)>>>0:(u=s.hsl.exec(r))?(255|n(f(u[1]),y(u[2]),y(u[3])))>>>0:(u=s.hsla.exec(r))?void 0!==u[6]?(n(f(u[6]),y(u[7]),y(u[8]))|p(u[9]))>>>0:(n(f(u[2]),y(u[3]),y(u[4]))|p(u[5]))>>>0:(u=s.hwb.exec(r))?(255|t(f(u[1]),y(u[2]),y(u[3])))>>>0:null}}),166,[]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.processColorObject=e.normalizeColorObject=e.PlatformColor=void 0;e.PlatformColor=function(){for(var o=arguments.length,n=new Array(o),t=0;t=u)return n[l];return n[n.length-1]||1},e.setUrlCacheBreaker=function(t){n=t};var n,t=r(d[0])(r(d[1]))}),180,[8,181]); +__d((function(g,r,i,a,m,e,d){'use strict';Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var t=r(d[0])(r(d[1])),u=r(d[0])(r(d[2])),n=(function(){function n(){(0,t.default)(this,n)}return(0,u.default)(n,null,[{key:"get",value:function(){return r(d[3]).default.get('window').scale}},{key:"getFontScale",value:function(){return r(d[3]).default.get('window').fontScale||n.get()}},{key:"getPixelSizeForLayoutSize",value:function(t){return Math.round(t*n.get())}},{key:"roundToNearestPixel",value:function(t){var u=n.get();return Math.round(t*u)/u}},{key:"startDetecting",value:function(){}}])})();e.default=n}),181,[8,17,18,182]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var n,t=r(d[0])(r(d[1])),s=r(d[0])(r(d[2])),l=r(d[0])(r(d[3])),o=r(d[0])(r(d[4])),c=r(d[0])(r(d[5])),u=r(d[0])(r(d[6])),f=new o.default,h=!1,v=(0,s.default)((function n(){(0,t.default)(this,n)}),null,[{key:"get",value:function(t){return(0,u.default)(n[t],'No dimension set for key '+t),n[t]}},{key:"set",value:function(t){var s=t.screen,l=t.window,o=t.windowPhysicalPixels;o&&(l={width:o.width/o.scale,height:o.height/o.scale,scale:o.scale,fontScale:o.fontScale});var c=t.screenPhysicalPixels;c?s={width:c.width/c.scale,height:c.height/c.scale,scale:c.scale,fontScale:c.fontScale}:null==s&&(s=l),n={window:l,screen:s},h?f.emit('change',n):h=!0}},{key:"addEventListener",value:function(n,t){return(0,u.default)('change'===n,'Trying to subscribe to unknown event: "%s"',n),f.addListener(n,t)}}]),w=g.nativeExtensions&&g.nativeExtensions.DeviceInfo&&g.nativeExtensions.DeviceInfo.Dimensions;w||(l.default.addListener('didUpdateDimensions',(function(n){v.set(n)})),w=c.default.getConstants().Dimensions),v.set(w);e.default=v}),182,[8,17,18,9,10,183,24]); +__d((function(g,_r,_i,a,m,_e,d){Object.defineProperty(_e,"__esModule",{value:!0}),_e.default=void 0;var e=(function(e,t){if("function"==typeof WeakMap)var n=new WeakMap,r=new WeakMap;return(function(e,t){if(!t&&e&&e.__esModule)return e;var o,f,u={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return u;if(o=t?r:n){if(o.has(e))return o.get(e);o.set(e,u)}for(var i in e)"default"!==i&&{}.hasOwnProperty.call(e,i)&&((f=(o=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,i))&&(f.get||f.set)?o(u,i,f):u[i]=e[i]);return u})(e,t)})(_r(d[0])).getEnforcing('DeviceInfo'),t=null,n={getConstants:function(){return null==t&&(t=e.getConstants()),t}};_e.default=n}),183,[23]); +__d((function(g,r,i,a,m,e,d){'use strict';var t={.75:'ldpi',1:'mdpi',1.5:'hdpi',2:'xhdpi',3:'xxhdpi',4:'xxxhdpi'},n=160;function o(o){if(o.toString()in t)return t[o.toString()];if(Number.isFinite(o)&&o>0)return Math.round(o*n)+'dpi';throw new Error('no such scale '+o.toString())}var s=new Set(['gif','jpeg','jpg','ktx','png','svg','webp','xml']);function u(t){var n=t.httpServerLocation;return n.startsWith('/')?n.substr(1):n}m.exports={getAndroidResourceFolderName:function(n,u){if(!s.has(n.type))return'raw';var c=o(u);if(!c)throw new Error("Don't know which android drawable suffix to use for scale: "+u+'\nAsset: '+JSON.stringify(n,null,'\t')+'\nPossible scales are:'+JSON.stringify(t,null,'\t'));return'drawable-'+c},getAndroidResourceIdentifier:function(t){return(u(t)+'/'+t.name).toLowerCase().replace(/\//g,'_').replace(/([^a-z0-9_])/g,'').replace(/^assets_/,'')},getBasePath:u}}),184,[]); +__d((function(g,r,i,a,m,e,d){'use strict';var t=r(d[0])(r(d[1])),n={},o={};e.customBubblingEventTypes=n,e.customDirectEventTypes=o;var s=new Map,u=new Map;function l(t){var s=t.bubblingEventTypes,u=t.directEventTypes;if(null!=s)for(var l in s)null==n[l]&&(n[l]=s[l]);if(null!=u)for(var f in u)null==o[f]&&(o[f]=u[f])}e.register=function(n,o){return(0,t.default)(!s.has(n),'Tried to register two views with the same name %s',n),(0,t.default)('function'==typeof o,'View config getter callback for component `%s` must be a function (received `%s`)',n,null===o?'null':typeof o),s.set(n,o),n},e.get=function(n){var o;if(u.has(n))o=u.get(n);else{var f=s.get(n);'function'!=typeof f&&(0,t.default)(!1,'View config getter callback for component `%s` must be a function (received `%s`).%s',n,null===f?'null':typeof f,'string'==typeof n[0]&&/[a-z]/.test(n[0])?' Make sure to start component names with a capital letter.':''),l(o=f()),u.set(n,o),s.set(n,null)}return(0,t.default)(o,'View config not found for name %s',n),o}}),185,[8,24]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(t,n){for(var f of['validAttributes','bubblingEventTypes','directEventTypes']){var u=Object.keys(o(t[f],n[f]));if(u.length>0){var s,c=null!=(s=n.uiViewClassName)?s:t.uiViewClassName;console.error(`'${c}' has a view config that does not match native. '${f}' is missing: ${u.join(', ')}`)}}},e.getConfigWithoutViewProps=function(n,o){if(!n[o])return{};return Object.keys(n[o]).filter((function(n){return!t.default[o][n]})).reduce((function(t,f){return t[f]=n[o][f],t}),{})},e.stringifyViewConfig=function(t){return JSON.stringify(t,(function(t,n){return'function'==typeof n?`\u0192 ${n.name}`:n}),2)};var t=r(d[0])(r(d[1])),n=['transform','hitSlop'];function o(t,f){var u={};function s(t,n,f){if(typeof t==typeof n||null==t)if('object'!=typeof t)t===n||(u[f]=n);else{var s=o(t,n);Object.keys(s).length>1&&(u[f]=s)}else u[f]=n}for(var c in t)n.includes(c)||(f?t.hasOwnProperty(c)&&s(t[c],f[c],c):u[c]={});return u}}),186,[8,187]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var t=r(d[0])(r(d[1])).default;e.default=t}),187,[8,188]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var t=r(d[0])(r(d[1])),o={topAccessibilityAction:{registrationName:'onAccessibilityAction'},onGestureHandlerEvent:(0,r(d[2]).DynamicallyInjectedByGestureHandler)({registrationName:'onGestureHandlerEvent'}),onGestureHandlerStateChange:(0,r(d[2]).DynamicallyInjectedByGestureHandler)({registrationName:'onGestureHandlerStateChange'}),topContentSizeChange:{registrationName:'onContentSizeChange'},topScrollBeginDrag:{registrationName:'onScrollBeginDrag'},topMessage:{registrationName:'onMessage'},topSelectionChange:{registrationName:'onSelectionChange'},topLoadingFinish:{registrationName:'onLoadingFinish'},topMomentumScrollEnd:{registrationName:'onMomentumScrollEnd'},topClick:{registrationName:'onClick'},topLoadingStart:{registrationName:'onLoadingStart'},topLoadingError:{registrationName:'onLoadingError'},topMomentumScrollBegin:{registrationName:'onMomentumScrollBegin'},topScrollEndDrag:{registrationName:'onScrollEndDrag'},topScroll:{registrationName:'onScroll'},topLayout:{registrationName:'onLayout'}},n={backgroundColor:{process:r(d[3]).default},transform:!0,opacity:!0,elevation:!0,shadowColor:{process:r(d[3]).default},zIndex:!0,renderToHardwareTextureAndroid:!0,testID:!0,nativeID:!0,accessibilityLabelledBy:!0,accessibilityLabel:!0,accessibilityHint:!0,accessibilityRole:!0,accessibilityCollection:!0,accessibilityCollectionItem:!0,accessibilityState:!0,accessibilityActions:!0,accessibilityValue:!0,importantForAccessibility:!0,rotation:!0,scaleX:!0,scaleY:!0,translateX:!0,translateY:!0,accessibilityLiveRegion:!0,width:!0,minWidth:!0,collapsable:!0,maxWidth:!0,height:!0,minHeight:!0,maxHeight:!0,flex:!0,flexGrow:!0,rowGap:!0,columnGap:!0,gap:!0,flexShrink:!0,flexBasis:!0,aspectRatio:!0,flexDirection:!0,flexWrap:!0,alignSelf:!0,alignItems:!0,alignContent:!0,justifyContent:!0,overflow:!0,display:!0,margin:!0,marginBlock:!0,marginBlockEnd:!0,marginBlockStart:!0,marginBottom:!0,marginEnd:!0,marginHorizontal:!0,marginInline:!0,marginInlineEnd:!0,marginInlineStart:!0,marginLeft:!0,marginRight:!0,marginStart:!0,marginTop:!0,marginVertical:!0,padding:!0,paddingBlock:!0,paddingBlockEnd:!0,paddingBlockStart:!0,paddingBottom:!0,paddingEnd:!0,paddingHorizontal:!0,paddingInline:!0,paddingInlineEnd:!0,paddingInlineStart:!0,paddingLeft:!0,paddingRight:!0,paddingStart:!0,paddingTop:!0,paddingVertical:!0,borderWidth:!0,borderStartWidth:!0,borderEndWidth:!0,borderTopWidth:!0,borderBottomWidth:!0,borderLeftWidth:!0,borderRightWidth:!0,start:!0,end:!0,left:!0,right:!0,top:!0,bottom:!0,position:!0,style:t.default},s={directEventTypes:o,bubblingEventTypes:{topChange:{phasedRegistrationNames:{captured:'onChangeCapture',bubbled:'onChange'}},topSelect:{phasedRegistrationNames:{captured:'onSelectCapture',bubbled:'onSelect'}},topTouchEnd:{phasedRegistrationNames:{captured:'onTouchEndCapture',bubbled:'onTouchEnd'}},topTouchCancel:{phasedRegistrationNames:{captured:'onTouchCancelCapture',bubbled:'onTouchCancel'}},topTouchStart:{phasedRegistrationNames:{captured:'onTouchStartCapture',bubbled:'onTouchStart'}},topTouchMove:{phasedRegistrationNames:{captured:'onTouchMoveCapture',bubbled:'onTouchMove'}},topPointerCancel:{phasedRegistrationNames:{captured:'onPointerCancelCapture',bubbled:'onPointerCancel'}},topPointerDown:{phasedRegistrationNames:{captured:'onPointerDownCapture',bubbled:'onPointerDown'}},topPointerEnter:{phasedRegistrationNames:{captured:'onPointerEnterCapture',bubbled:'onPointerEnter',skipBubbling:!0}},topPointerLeave:{phasedRegistrationNames:{captured:'onPointerLeaveCapture',bubbled:'onPointerLeave',skipBubbling:!0}},topPointerMove:{phasedRegistrationNames:{captured:'onPointerMoveCapture',bubbled:'onPointerMove'}},topPointerUp:{phasedRegistrationNames:{captured:'onPointerUpCapture',bubbled:'onPointerUp'}},topPointerOut:{phasedRegistrationNames:{captured:'onPointerOutCapture',bubbled:'onPointerOut'}},topPointerOver:{phasedRegistrationNames:{captured:'onPointerOverCapture',bubbled:'onPointerOver'}}},validAttributes:Object.assign({},n,{onLayout:!0,onMoveShouldSetResponder:!0,onMoveShouldSetResponderCapture:!0,onStartShouldSetResponder:!0,onStartShouldSetResponderCapture:!0,onResponderGrant:!0,onResponderReject:!0,onResponderStart:!0,onResponderEnd:!0,onResponderRelease:!0,onResponderMove:!0,onResponderTerminate:!0,onResponderTerminationRequest:!0,onShouldBlockNativeResponder:!0,onTouchStart:!0,onTouchMove:!0,onTouchEnd:!0,onTouchCancel:!0,onPointerEnter:!0,onPointerEnterCapture:!0,onPointerLeave:!0,onPointerLeaveCapture:!0,onPointerMove:!0,onPointerMoveCapture:!0,onPointerOut:!0,onPointerOutCapture:!0,onPointerOver:!0,onPointerOverCapture:!0})};e.default=s}),188,[8,162,189,164]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.ConditionallyIgnoredEventHandlers=function(t){if('ios'===n.default.OS)return t;return},e.DynamicallyInjectedByGestureHandler=function(n){return t.add(n),n},e.isIgnored=function(n){if('object'==typeof n&&null!=n)return t.has(n);return!1};var n=r(d[0])(r(d[1])),t=new WeakSet}),189,[8,21]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.stringifyValidationResult=function(n,u){var s=u.differences;return[`StaticViewConfigValidator: Invalid static view config for '${n}'.`,''].concat((0,t.default)(s.map((function(t){var n=t.type,u=t.path;switch(n){case'missing':return`- '${u.join('.')}' is missing.`;case'unequal':return`- '${u.join('.')}' is the wrong value.`;case'unexpected':return`- '${u.join('.')}' is present but not expected to be.`}}))),['']).join('\n')},e.validate=function(t,u,s){var l=[];if(n(l,[],{bubblingEventTypes:u.bubblingEventTypes,directEventTypes:u.directEventTypes,uiViewClassName:u.uiViewClassName,validAttributes:u.validAttributes},{bubblingEventTypes:s.bubblingEventTypes,directEventTypes:s.directEventTypes,uiViewClassName:s.uiViewClassName,validAttributes:s.validAttributes}),0===l.length)return{type:'valid'};return{type:'invalid',differences:l}};var t=r(d[0])(r(d[1]));function n(s,l,c,o){for(var p in c){var v=c[p];if(o.hasOwnProperty(p)){var f=o[p],y=u(v);if(null!=y){var b=u(f);if(null!=b){l.push(p),n(s,l,y,b),l.pop();continue}}v!==f&&s.push({path:[].concat((0,t.default)(l),[p]),type:'unequal',nativeValue:v,staticValue:f})}else s.push({path:[].concat((0,t.default)(l),[p]),type:'missing',nativeValue:v})}for(var h in o)c.hasOwnProperty(h)||(0,r(d[2]).isIgnored)(o[h])||s.push({path:[].concat((0,t.default)(l),[h]),type:'unexpected',staticValue:o[h]})}function u(t){return'object'!=typeof t||Array.isArray(t)?null:t}}),190,[8,11,189]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.createViewConfig=function(u){return{uiViewClassName:u.uiViewClassName,Commands:{},bubblingEventTypes:n(t.default.bubblingEventTypes,u.bubblingEventTypes),directEventTypes:n(t.default.directEventTypes,u.directEventTypes),validAttributes:n(t.default.validAttributes,u.validAttributes)}};var t=r(d[0])(r(d[1]));function n(t,n){var u;return null==t||null==n?null!=(u=null!=t?t:n)?u:{}:Object.assign({},t,n)}}),191,[8,187]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;e.default=function(n){var o={};return n.supportedCommands.forEach((function(n){o[n]=function(o){for(var t=arguments.length,u=new Array(t>1?t-1:0),f=1;f=0;n--)if(i[n]())return;f.exitApp()}));var f={exitApp:function(){n.default&&n.default.invokeDefaultBackPressHandler()},addEventListener:function(n,t){return-1===i.indexOf(t)&&i.push(t),{remove:function(){return f.removeEventListener(n,t)}}},removeEventListener:function(n,t){var f=i.indexOf(t);-1!==f&&i.splice(f,1)}};m.exports=f}),200,[8,201,9]); +__d((function(g,_r,_i,a,m,_e,d){Object.defineProperty(_e,"__esModule",{value:!0}),_e.default=void 0;var e=(function(e,t){if("function"==typeof WeakMap)var r=new WeakMap,n=new WeakMap;return(function(e,t){if(!t&&e&&e.__esModule)return e;var f,o,u={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return u;if(f=t?n:r){if(f.has(e))return f.get(e);f.set(e,u)}for(var i in e)"default"!==i&&{}.hasOwnProperty.call(e,i)&&((o=(f=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,i))&&(o.get||o.set)?f(u,i,o):u[i]=e[i]);return u})(e,t)})(_r(d[0]));_e.default=e.get('DeviceEventManager')}),201,[23]); +__d((function(g,r,i,a,m,e,d){m.exports={get BatchedBridge(){return r(d[0])},get ExceptionsManager(){return r(d[1])},get Platform(){return r(d[2])},get RCTEventEmitter(){return r(d[3])},get ReactNativeViewConfigRegistry(){return r(d[4])},get TextInputState(){return r(d[5])},get UIManager(){return r(d[6])},get deepDiffer(){return r(d[7])},get deepFreezeAndThrowOnMutationInDev(){return r(d[8])},get flattenStyle(){return r(d[9])},get ReactFiberErrorDialog(){return r(d[10]).default},get legacySendAccessibilityEvent(){return r(d[11])},get RawEventEmitter(){return r(d[12]).default},get CustomEvent(){return r(d[13]).default}}}),202,[30,73,21,203,185,204,37,206,207,157,208,36,209,210]); +__d((function(g,r,i,a,m,e,d){'use strict';var t={register:function(t){g.RN$Bridgeless?g.RN$registerCallableModule('RCTEventEmitter',(function(){return t})):r(d[0]).registerCallableModule('RCTEventEmitter',t)}};m.exports=t}),203,[30]); +__d((function(g,r,i,a,m,e,d){r(d[0]);var n=null,u=new Set;function t(u){n!==u&&null!=u&&(n=u)}function o(u){n===u&&null!=u&&(n=null)}m.exports={currentlyFocusedInput:function(){return n},focusInput:t,blurInput:o,currentlyFocusedField:function(){return r(d[1]).findNodeHandle(n)},focusField:function(n){},blurField:function(n){},focusTextInput:function(u){if('number'!=typeof u&&null!=u){var o;if(!(n!==u&&!1!==(null==(o=u.currentProps)?void 0:o.editable)))return;t(u),r(d[2]).Commands.focus(u)}},blurTextInput:function(u){'number'!=typeof u&&n===u&&null!=u&&(o(u),r(d[2]).Commands.blur(u))},registerInput:function(n){'number'!=typeof n&&u.add(n)},unregisterInput:function(n){'number'!=typeof n&&u.delete(n)},isTextInput:function(n){return'number'!=typeof n&&u.has(n)}}}),204,[153,47,205]); +__d((function(g,_r,_i,a,m,_e,d){Object.defineProperty(_e,"__esModule",{value:!0}),_e.default=_e.__INTERNAL_VIEW_CONFIG=_e.Commands=void 0;var e=(function(e,t){if("function"==typeof WeakMap)var o=new WeakMap,r=new WeakMap;return(function(e,t){if(!t&&e&&e.__esModule)return e;var n,i,u={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return u;if(n=t?r:o){if(n.has(e))return n.get(e);n.set(e,u)}for(var s in e)"default"!==s&&{}.hasOwnProperty.call(e,s)&&((i=(n=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,s))&&(i.get||i.set)?n(u,s,i):u[s]=e[s]);return u})(e,t)})(_r(d[0])),t=_r(d[1])(_r(d[2]));_e.Commands=(0,t.default)({supportedCommands:['focus','blur','setTextAndSelection']});var o=_e.__INTERNAL_VIEW_CONFIG={uiViewClassName:'AndroidTextInput',bubblingEventTypes:{topBlur:{phasedRegistrationNames:{bubbled:'onBlur',captured:'onBlurCapture'}},topEndEditing:{phasedRegistrationNames:{bubbled:'onEndEditing',captured:'onEndEditingCapture'}},topFocus:{phasedRegistrationNames:{bubbled:'onFocus',captured:'onFocusCapture'}},topKeyPress:{phasedRegistrationNames:{bubbled:'onKeyPress',captured:'onKeyPressCapture'}},topSubmitEditing:{phasedRegistrationNames:{bubbled:'onSubmitEditing',captured:'onSubmitEditingCapture'}},topTextInput:{phasedRegistrationNames:{bubbled:'onTextInput',captured:'onTextInputCapture'}}},directEventTypes:{topScroll:{registrationName:'onScroll'}},validAttributes:{maxFontSizeMultiplier:!0,adjustsFontSizeToFit:!0,minimumFontScale:!0,autoFocus:!0,placeholder:!0,inlineImagePadding:!0,contextMenuHidden:!0,textShadowColor:{process:_r(d[3]).default},maxLength:!0,selectTextOnFocus:!0,textShadowRadius:!0,underlineColorAndroid:{process:_r(d[3]).default},textDecorationLine:!0,submitBehavior:!0,textAlignVertical:!0,fontStyle:!0,textShadowOffset:!0,selectionColor:{process:_r(d[3]).default},placeholderTextColor:{process:_r(d[3]).default},importantForAutofill:!0,lineHeight:!0,textTransform:!0,returnKeyType:!0,keyboardType:!0,multiline:!0,color:{process:_r(d[3]).default},autoComplete:!0,numberOfLines:!0,letterSpacing:!0,returnKeyLabel:!0,fontSize:!0,onKeyPress:!0,cursorColor:{process:_r(d[3]).default},text:!0,showSoftInputOnFocus:!0,textAlign:!0,autoCapitalize:!0,autoCorrect:!0,caretHidden:!0,secureTextEntry:!0,textBreakStrategy:!0,onScroll:!0,onContentSizeChange:!0,disableFullscreenUI:!0,includeFontPadding:!0,fontWeight:!0,fontFamily:!0,allowFontScaling:!0,onSelectionChange:!0,mostRecentEventCount:!0,inlineImageLeft:!0,editable:!0,fontVariant:!0,borderBottomRightRadius:!0,borderBottomColor:{process:_r(d[3]).default},borderRadius:!0,borderRightColor:{process:_r(d[3]).default},borderColor:{process:_r(d[3]).default},borderTopRightRadius:!0,borderStyle:!0,borderBottomLeftRadius:!0,borderLeftColor:{process:_r(d[3]).default},borderTopLeftRadius:!0,borderTopColor:{process:_r(d[3]).default}}},r=e.get('AndroidTextInput',(function(){return o}));_e.default=r}),205,[160,8,192,164]); +__d((function(g,r,i,a,m,e,d){'use strict';var n;var t=function(o,u){var f=arguments.length>2&&void 0!==arguments[2]?arguments[2]:-1,s='number'==typeof f?arguments.length>3?arguments[3]:void 0:f,c='number'==typeof f?f:-1;if(0===c)return!0;if(o===u)return!1;if('function'==typeof o&&'function'==typeof u){var l=null==s?void 0:s.unsafelyIgnoreFunctions;return null==l&&(!n||!n.onDifferentFunctionsIgnored||s&&'unsafelyIgnoreFunctions'in s||n.onDifferentFunctionsIgnored(o.name,u.name),l=!0),!l}if('object'!=typeof o||null===o)return o!==u;if('object'!=typeof u||null===u)return!0;if(o.constructor!==u.constructor)return!0;if(Array.isArray(o)){var v=o.length;if(u.length!==v)return!0;for(var y=0;y>>1,r=e[l];if(!(0>>1;lu(c,t))fu(s,c)?(e[l]=s,e[f]=t,l=f):(e[l]=c,e[o]=t,l=o);else{if(!(fu(s,t)))break e;e[l]=s,e[f]=t,l=f}}}return n}function u(e,n){var t=e.sortIndex-n.sortIndex;return 0!==t?t:e.id-n.id}var l;if("object"==typeof performance&&"function"==typeof performance.now){var r=performance;l=function(){return r.now()}}else{var a=Date,o=a.now();l=function(){return a.now()-o}}var c=[],f=[],s=1,d=null,v=3,b=!1,m=!1,p=!1,y="function"==typeof setTimeout?setTimeout:null,h="function"==typeof clearTimeout?clearTimeout:null,_="undefined"!=typeof setImmediate?setImmediate:null;function g(u){for(var l=n(f);null!==l;){if(null===l.callback)t(f);else{if(!(l.startTime<=u))break;t(f),l.sortIndex=l.expirationTime,e(c,l)}l=n(f)}}function R(e){if(p=!1,g(e),!m)if(null!==n(c))m=!0,I=k,P||(P=!0,S());else{var t=n(f);null!==t&&E(R,t.startTime-e)}}function k(e,u){m=!1,p&&(p=!1,h(x),x=-1),b=!0;var r=v;try{e:{for(g(u),d=n(c);null!==d&&(!(d.expirationTime>u)||e&&!T());){var a=d.callback;if("function"==typeof a){d.callback=null,v=d.priorityLevel;var o=a(d.expirationTime<=u);if(u=l(),"function"==typeof o){d.callback=o,g(u);var s=!0;break e}d===n(c)&&t(c),g(u)}else t(c);d=n(c)}if(null!==d)s=!0;else{var y=n(f);null!==y&&E(R,y.startTime-u),s=!1}}return s}finally{d=null,v=r,b=!1}}"undefined"!=typeof navigator&&void 0!==navigator.scheduling&&void 0!==navigator.scheduling.isInputPending&&navigator.scheduling.isInputPending.bind(navigator.scheduling);var S,P=!1,I=null,x=-1,w=-1;function T(){return!(5>l()-w)}function C(){if(null!==I){var e=l();w=e;var n=!0;try{n=I(!0,e)}finally{n?S():(P=!1,I=null)}}else P=!1}if("function"==typeof _)S=function(){_(C)};else if("undefined"!=typeof MessageChannel){var L=new MessageChannel,N=L.port2;L.port1.onmessage=C,S=function(){N.postMessage(null)}}else S=function(){y(C,0)};function E(e,n){x=y((function(){e(l())}),n)}var M="undefined"!=typeof nativeRuntimeScheduler?nativeRuntimeScheduler.unstable_UserBlockingPriority:2,j="undefined"!=typeof nativeRuntimeScheduler?nativeRuntimeScheduler.unstable_NormalPriority:3,q="undefined"!=typeof nativeRuntimeScheduler?nativeRuntimeScheduler.unstable_LowPriority:4,B="undefined"!=typeof nativeRuntimeScheduler?nativeRuntimeScheduler.unstable_ImmediatePriority:1,F="undefined"!=typeof nativeRuntimeScheduler?nativeRuntimeScheduler.unstable_scheduleCallback:function(t,u,r){var a=l();switch("object"==typeof r&&null!==r?r="number"==typeof(r=r.delay)&&0a?(t.sortIndex=r,e(f,t),null===n(c)&&t===n(f)&&(p?(h(x),x=-1):p=!0,E(R,r-a))):(t.sortIndex=o,e(c,t),m||b||(m=!0,I=k,P||(P=!0,S()))),t},U="undefined"!=typeof nativeRuntimeScheduler?nativeRuntimeScheduler.unstable_cancelCallback:function(e){e.callback=null},Y="undefined"!=typeof nativeRuntimeScheduler?nativeRuntimeScheduler.unstable_getCurrentPriorityLevel:function(){return v},D="undefined"!=typeof nativeRuntimeScheduler?nativeRuntimeScheduler.unstable_shouldYield:T,W="undefined"!=typeof nativeRuntimeScheduler?nativeRuntimeScheduler.unstable_requestPaint:function(){},z="undefined"!=typeof nativeRuntimeScheduler?nativeRuntimeScheduler.unstable_now:l;function A(){throw Error("Not implemented.")}_e.unstable_IdlePriority="undefined"!=typeof nativeRuntimeScheduler?nativeRuntimeScheduler.unstable_IdlePriority:5,_e.unstable_ImmediatePriority=B,_e.unstable_LowPriority=q,_e.unstable_NormalPriority=j,_e.unstable_Profiling=null,_e.unstable_UserBlockingPriority=M,_e.unstable_cancelCallback=U,_e.unstable_continueExecution=A,_e.unstable_forceFrameRate=A,_e.unstable_getCurrentPriorityLevel=Y,_e.unstable_getFirstCallbackNode=A,_e.unstable_next=A,_e.unstable_now=z,_e.unstable_pauseExecution=A,_e.unstable_requestPaint=W,_e.unstable_runWithPriority=A,_e.unstable_scheduleCallback=F,_e.unstable_shouldYield=D,_e.unstable_wrapCallback=A}),213,[]); +__d((function(g,r,i,a,m,e,d){'use strict';var t;t=r(d[0]),m.exports=t}),214,[215]); +__d((function(e,n,t,r,l,a,i){"use strict";n(i[0]);var u=n(i[1]);function o(e,n,t,r,l,a,i,u,o){var s=Array.prototype.slice.call(arguments,3);try{n.apply(t,s)}catch(e){this.onError(e)}}var s=!1,c=null,f=!1,d=null,p={onError:function(e){s=!0,c=e}};function h(e,n,t,r,l,a,i,u,f){s=!1,c=null,o.apply(p,arguments)}function g(e,n,t,r,l,a,i,u,o){if(h.apply(this,arguments),s){if(!s)throw Error("clearCaughtError was called but no error was captured. This error is likely caused by a bug in React. Please file an issue.");var p=c;s=!1,c=null,f||(f=!0,d=p)}}var m=Array.isArray,v=null,b=null,y=null;function S(e,n,t){var r=e.type||"unknown-event";e.currentTarget=y(t),g(r,n,void 0,e),e.currentTarget=null}function w(e){var n=e._dispatchListeners,t=e._dispatchInstances;if(m(n))throw Error("executeDirectDispatch(...): Invalid `event`.");return e.currentTarget=n?y(t):null,n=n?n(e):null,e.currentTarget=null,e._dispatchListeners=null,e._dispatchInstances=null,n}var k=Object.assign;function _(){return!0}function T(){return!1}function x(e,n,t,r){for(var l in this.dispatchConfig=e,this._targetInst=n,this.nativeEvent=t,this._dispatchInstances=this._dispatchListeners=null,e=this.constructor.Interface)e.hasOwnProperty(l)&&((n=e[l])?this[l]=n(t):"target"===l?this.target=r:this[l]=t[l]);return this.isDefaultPrevented=(null!=t.defaultPrevented?t.defaultPrevented:!1===t.returnValue)?_:T,this.isPropagationStopped=T,this}function E(e,n,t,r){if(this.eventPool.length){var l=this.eventPool.pop();return this.call(l,e,n,t,r),l}return new this(e,n,t,r)}function P(e){if(!(e instanceof this))throw Error("Trying to release an event instance into a pool of a different type.");e.destructor(),10>this.eventPool.length&&this.eventPool.push(e)}function R(e){e.getPooled=E,e.eventPool=[],e.release=P}k(x.prototype,{preventDefault:function(){this.defaultPrevented=!0;var e=this.nativeEvent;e&&(e.preventDefault?e.preventDefault():"unknown"!=typeof e.returnValue&&(e.returnValue=!1),this.isDefaultPrevented=_)},stopPropagation:function(){var e=this.nativeEvent;e&&(e.stopPropagation?e.stopPropagation():"unknown"!=typeof e.cancelBubble&&(e.cancelBubble=!0),this.isPropagationStopped=_)},persist:function(){this.isPersistent=_},isPersistent:T,destructor:function(){var e,n=this.constructor.Interface;for(e in n)this[e]=null;this.nativeEvent=this._targetInst=this.dispatchConfig=null,this.isPropagationStopped=this.isDefaultPrevented=T,this._dispatchInstances=this._dispatchListeners=null}}),x.Interface={type:null,target:null,currentTarget:function(){return null},eventPhase:null,bubbles:null,cancelable:null,timeStamp:function(e){return e.timeStamp||Date.now()},defaultPrevented:null,isTrusted:null},x.extend=function(e){function n(){}function t(){return r.apply(this,arguments)}var r=this;n.prototype=r.prototype;var l=new n;return k(l,t.prototype),t.prototype=l,t.prototype.constructor=t,t.Interface=k({},r.Interface,e),t.extend=r.extend,R(t),t},R(x);var C=x.extend({touchHistory:function(){return null}});function z(e){return"topTouchStart"===e}function N(e){return"topTouchMove"===e}var I=["topTouchStart"],L=["topTouchMove"],U=["topTouchCancel","topTouchEnd"],M=[],F={touchBank:M,numberActiveTouches:0,indexOfSingleActiveTouch:-1,mostRecentTimeStamp:0};function D(e){return e.timeStamp||e.timestamp}function A(e){if(null==(e=e.identifier))throw Error("Touch object is missing identifier.");return e}function Q(e){var n=A(e),t=M[n];t?(t.touchActive=!0,t.startPageX=e.pageX,t.startPageY=e.pageY,t.startTimeStamp=D(e),t.currentPageX=e.pageX,t.currentPageY=e.pageY,t.currentTimeStamp=D(e),t.previousPageX=e.pageX,t.previousPageY=e.pageY,t.previousTimeStamp=D(e)):(t={touchActive:!0,startPageX:e.pageX,startPageY:e.pageY,startTimeStamp:D(e),currentPageX:e.pageX,currentPageY:e.pageY,currentTimeStamp:D(e),previousPageX:e.pageX,previousPageY:e.pageY,previousTimeStamp:D(e)},M[n]=t),F.mostRecentTimeStamp=D(e)}function j(e){var n=M[A(e)];n&&(n.touchActive=!0,n.previousPageX=n.currentPageX,n.previousPageY=n.currentPageY,n.previousTimeStamp=n.currentTimeStamp,n.currentPageX=e.pageX,n.currentPageY=e.pageY,n.currentTimeStamp=D(e),F.mostRecentTimeStamp=D(e))}function H(e){var n=M[A(e)];n&&(n.touchActive=!1,n.previousPageX=n.currentPageX,n.previousPageY=n.currentPageY,n.previousTimeStamp=n.currentTimeStamp,n.currentPageX=e.pageX,n.currentPageY=e.pageY,n.currentTimeStamp=D(e),F.mostRecentTimeStamp=D(e))}var B,O={instrument:function(e){B=e},recordTouchTrack:function(e,n){if(null!=B&&B(e,n),N(e))n.changedTouches.forEach(j);else if(z(e))n.changedTouches.forEach(Q),F.numberActiveTouches=n.touches.length,1===F.numberActiveTouches&&(F.indexOfSingleActiveTouch=n.touches[0].identifier);else if(("topTouchEnd"===e||"topTouchCancel"===e)&&(n.changedTouches.forEach(H),F.numberActiveTouches=n.touches.length,1===F.numberActiveTouches))for(e=0;e=t)throw Error("EventPluginRegistry: Cannot inject event plugins that do not exist in the plugin ordering, `"+e+"`.");if(!se[t]){if(!n.extractEvents)throw Error("EventPluginRegistry: Event plugins must implement an `extractEvents` method, but `"+e+"` does not.");for(var r in se[t]=n,t=n.eventTypes){var l=void 0,a=t[r],i=r;if(ce.hasOwnProperty(i))throw Error("EventPluginRegistry: More than one plugin attempted to publish the same event name, `"+i+"`.");ce[i]=a;var u=a.phasedRegistrationNames;if(u){for(l in u)u.hasOwnProperty(l)&&oe(u[l],n);l=!0}else a.registrationName?(oe(a.registrationName,n),l=!0):l=!1;if(!l)throw Error("EventPluginRegistry: Failed to publish event `"+r+"` for plugin `"+e+"`.")}}}}function oe(e,n){if(fe[e])throw Error("EventPluginRegistry: More than one plugin attempted to publish the same registration name, `"+e+"`.");fe[e]=n}var se=[],ce={},fe={};function de(e,t,r,l){var a=e.stateNode;if(null===a)return null;if(null===(e=v(a)))return null;if((e=e[t])&&"function"!=typeof e)throw Error("Expected `"+t+"` listener to be a function, instead got a value of `"+typeof e+"` type.");if(!(l&&a.canonical&&a.canonical._eventListeners))return e;var u=[];e&&u.push(e);var o="captured"===r,s=o?"rn:"+t.replace(/Capture$/,""):"rn:"+t;return a.canonical._eventListeners[s]&&0i||(a=i),Le(a,e,l)}}}),v=function(e){return xe.get(e._nativeTag)||null},b=Ee,y=function(e){var n=(e=e.stateNode)._nativeTag;if(void 0===n&&(n=(e=e.canonical)._nativeTag),!n)throw Error("All native instances should have a tag.");return e},le.injection.injectGlobalResponderHandler({onChange:function(e,t,r){null!==t?n(i[2]).UIManager.setJSResponder(t.stateNode._nativeTag,r):n(i[2]).UIManager.clearJSResponder()}});var Ue=u.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,Me=Symbol.for("react.element"),Fe=Symbol.for("react.portal"),De=Symbol.for("react.fragment"),Ae=Symbol.for("react.strict_mode"),Qe=Symbol.for("react.profiler"),je=Symbol.for("react.provider"),He=Symbol.for("react.context"),Be=Symbol.for("react.forward_ref"),Oe=Symbol.for("react.suspense"),We=Symbol.for("react.suspense_list"),Ve=Symbol.for("react.memo"),Ye=Symbol.for("react.lazy");Symbol.for("react.scope"),Symbol.for("react.debug_trace_mode");var qe=Symbol.for("react.offscreen");Symbol.for("react.legacy_hidden"),Symbol.for("react.cache"),Symbol.for("react.tracing_marker");var $e=Symbol.iterator;function Xe(e){return null===e||"object"!=typeof e?null:"function"==typeof(e=$e&&e[$e]||e["@@iterator"])?e:null}function Ge(e){if(null==e)return null;if("function"==typeof e)return e.displayName||e.name||null;if("string"==typeof e)return e;switch(e){case De:return"Fragment";case Fe:return"Portal";case Qe:return"Profiler";case Ae:return"StrictMode";case Oe:return"Suspense";case We:return"SuspenseList"}if("object"==typeof e)switch(e.$$typeof){case He:return(e.displayName||"Context")+".Consumer";case je:return(e._context.displayName||"Context")+".Provider";case Be:var n=e.render;return(e=e.displayName)||(e=""!==(e=n.displayName||n.name||"")?"ForwardRef("+e+")":"ForwardRef"),e;case Ve:return null!==(n=e.displayName||null)?n:Ge(e.type)||"Memo";case Ye:n=e._payload,e=e._init;try{return Ge(e(n))}catch(e){}}return null}function Ke(e){var n=e.type;switch(e.tag){case 24:return"Cache";case 9:return(n.displayName||"Context")+".Consumer";case 10:return(n._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return e=(e=n.render).displayName||e.name||"",n.displayName||(""!==e?"ForwardRef("+e+")":"ForwardRef");case 7:return"Fragment";case 5:return n;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return Ge(n);case 8:return n===Ae?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if("function"==typeof n)return n.displayName||n.name||null;if("string"==typeof n)return n}return null}function Je(e){var n=e,t=e;if(e.alternate)for(;n.return;)n=n.return;else{e=n;do{0!=(4098&(n=e).flags)&&(t=n.return),e=n.return}while(e)}return 3===n.tag?t:null}function Ze(e){if(Je(e)!==e)throw Error("Unable to find node on an unmounted component.")}function en(e){var n=e.alternate;if(!n){if(null===(n=Je(e)))throw Error("Unable to find node on an unmounted component.");return n!==e?null:e}for(var t=e,r=n;;){var l=t.return;if(null===l)break;var a=l.alternate;if(null===a){if(null!==(r=l.return)){t=r;continue}break}if(l.child===a.child){for(a=l.child;a;){if(a===t)return Ze(l),e;if(a===r)return Ze(l),n;a=a.sibling}throw Error("Unable to find node on an unmounted component.")}if(t.return!==r.return)t=l,r=a;else{for(var i=!1,u=l.child;u;){if(u===t){i=!0,t=l,r=a;break}if(u===r){i=!0,r=l,t=a;break}u=u.sibling}if(!i){for(u=a.child;u;){if(u===t){i=!0,t=a,r=l;break}if(u===r){i=!0,r=a,t=l;break}u=u.sibling}if(!i)throw Error("Child was not found in either parent set. This indicates a bug in React related to the return pointer. Please file an issue.")}}if(t.alternate!==r)throw Error("Return fibers should always be each others' alternates. This error is likely caused by a bug in React. Please file an issue.")}if(3!==t.tag)throw Error("Unable to find node on an unmounted component.");return t.stateNode.current===t?e:n}function nn(e){return null!==(e=en(e))?tn(e):null}function tn(e){if(5===e.tag||6===e.tag)return e;for(e=e.child;null!==e;){var n=tn(e);if(null!==n)return n;e=e.sibling}return null}var rn={},ln=null,an=0,un={unsafelyIgnoreFunctions:!0};function on(e,t){return"object"!=typeof t||null===t||n(i[2]).deepDiffer(e,t,un)}function sn(e,n,t){if(m(n))for(var r=n.length;r--&&0>>=0)?32:31-(Sn(e)/wn|0)|0},Sn=Math.log,wn=Math.LN2;var kn=64,_n=4194304;function Tn(e){switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return 4194240&e;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return 130023424&e;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return e}}function xn(e,n){var t=e.pendingLanes;if(0===t)return 0;var r=0,l=e.suspendedLanes,a=e.pingedLanes,i=268435455&t;if(0!==i){var u=i&~l;0!==u?r=Tn(u):0!==(a&=i)&&(r=Tn(a))}else 0!==(i=t&~l)?r=Tn(i):0!==a&&(r=Tn(a));if(0===r)return 0;if(0!==n&&n!==r&&0==(n&l)&&((l=r&-r)>=(a=n&-n)||16===l&&0!=(4194240&a)))return n;if(0!=(4&r)&&(r|=16&t),0!==(n=e.entangledLanes))for(e=e.entanglements,n&=r;0t;t++)n.push(e);return n}function zn(e,n,t){e.pendingLanes|=n,536870912!==n&&(e.suspendedLanes=0,e.pingedLanes=0),(e=e.eventTimes)[n=31-yn(n)]=t}function Nn(e,n){var t=e.pendingLanes&~n;e.pendingLanes=n,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=n,e.mutableReadLanes&=n,e.entangledLanes&=n,n=e.entanglements;var r=e.eventTimes;for(e=e.expirationTimes;0$n||(e.current=qn[$n],qn[$n]=null,$n--)}function Kn(e,n){$n++,qn[$n]=e.current,e.current=n}var Jn={},Zn=Xn(Jn),et=Xn(!1),nt=Jn;function tt(e,n){var t=e.type.contextTypes;if(!t)return Jn;var r=e.stateNode;if(r&&r.__reactInternalMemoizedUnmaskedChildContext===n)return r.__reactInternalMemoizedMaskedChildContext;var l,a={};for(l in t)a[l]=n[l];return r&&((e=e.stateNode).__reactInternalMemoizedUnmaskedChildContext=n,e.__reactInternalMemoizedMaskedChildContext=a),a}function rt(e){return null!=(e=e.childContextTypes)}function lt(){Gn(et),Gn(Zn)}function at(e,n,t){if(Zn.current!==Jn)throw Error("Unexpected context found on stack. This error is likely caused by a bug in React. Please file an issue.");Kn(Zn,n),Kn(et,t)}function it(e,n,t){var r=e.stateNode;if(n=n.childContextTypes,"function"!=typeof r.getChildContext)return t;for(var l in r=r.getChildContext())if(!(l in n))throw Error((Ke(e)||"Unknown")+'.getChildContext(): key "'+l+'" is not defined in childContextTypes.');return k({},t,r)}function ut(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||Jn,nt=Zn.current,Kn(Zn,e),Kn(et,et.current),!0}function ot(e,n,t){var r=e.stateNode;if(!r)throw Error("Expected to have an instance by this point. This error is likely caused by a bug in React. Please file an issue.");t?(e=it(e,n,nt),r.__reactInternalMemoizedMergedChildContext=e,Gn(et),Gn(Zn),Kn(Zn,e)):Gn(et),Kn(et,t)}var st="function"==typeof Object.is?Object.is:function(e,n){return e===n&&(0!==e||1/e==1/n)||e!=e&&n!=n},ct=null,ft=!1,dt=!1;function pt(){if(!dt&&null!==ct){dt=!0;var e=0,t=Ln;try{var r=ct;for(Ln=1;eg?(m=h,h=null):m=h.sibling;var v=d(l,h,u[g],o);if(null===v){null===h&&(h=m);break}e&&h&&null===v.alternate&&n(l,h),i=a(v,i,g),null===c?s=v:c.sibling=v,c=v,h=m}if(g===u.length)return t(l,h),s;if(null===h){for(;gg?(m=h,h=null):m=h.sibling;var b=d(l,h,v.value,o);if(null===b){null===h&&(h=m);break}e&&h&&null===b.alternate&&n(l,h),i=a(b,i,g),null===c?s=b:c.sibling=b,c=b,h=m}if(v.done)return t(l,h),s;if(null===h){for(;!v.done;g++,v=u.next())null!==(v=f(l,v.value,o))&&(i=a(v,i,g),null===c?s=v:c.sibling=v,c=v);return s}for(h=r(l,h);!v.done;g++,v=u.next())null!==(v=p(h,l,g,v.value,o))&&(e&&null!==v.alternate&&h.delete(null===v.key?g:v.key),i=a(v,i,g),null===c?s=v:c.sibling=v,c=v);return e&&h.forEach((function(e){return n(l,e)})),s}return function e(r,a,u,o){if("object"==typeof u&&null!==u&&u.type===De&&null===u.key&&(u=u.props.children),"object"==typeof u&&null!==u){switch(u.$$typeof){case Me:e:{for(var s=u.key,c=a;null!==c;){if(c.key===s){if((s=u.type)===De){if(7===c.tag){t(r,c.sibling),(a=l(c,u.props.children)).return=r,r=a;break e}}else if(c.elementType===s||"object"==typeof s&&null!==s&&s.$$typeof===Ye&&lr(s)===c.type){t(r,c.sibling),(a=l(c,u.props)).ref=tr(r,c,u),a.return=r,r=a;break e}t(r,c);break}n(r,c),c=c.sibling}u.type===De?((a=Di(u.props.children,r.mode,o,u.key)).return=r,r=a):((o=Fi(u.type,u.key,u.props,null,r.mode,o)).ref=tr(r,a,u),o.return=r,r=o)}return i(r);case Fe:e:{for(c=u.key;null!==a;){if(a.key===c){if(4===a.tag&&a.stateNode.containerInfo===u.containerInfo&&a.stateNode.implementation===u.implementation){t(r,a.sibling),(a=l(a,u.children||[])).return=r,r=a;break e}t(r,a);break}n(r,a),a=a.sibling}(a=ji(u,r.mode,o)).return=r,r=a}return i(r);case Ye:return e(r,a,(c=u._init)(u._payload),o)}if(m(u))return h(r,a,u,o);if(Xe(u))return g(r,a,u,o);rr(r,u)}return"string"==typeof u&&""!==u||"number"==typeof u?(u=""+u,null!==a&&6===a.tag?(t(r,a.sibling),(a=l(a,u)).return=r,r=a):(t(r,a),(a=Qi(u,r.mode,o)).return=r,r=a),i(r)):t(r,a)}}var ir=ar(!0),ur=ar(!1),or={},sr=Xn(or),cr=Xn(or),fr=Xn(or);function dr(e){if(e===or)throw Error("Expected host context to exist. This error is likely caused by a bug in React. Please file an issue.");return e}function pr(e,n){Kn(fr,n),Kn(cr,e),Kn(sr,or),Gn(sr),Kn(sr,{isInAParentText:!1})}function hr(){Gn(sr),Gn(cr),Gn(fr)}function gr(e){dr(fr.current);var n=dr(sr.current),t=e.type;t="AndroidTextInput"===t||"RCTMultilineTextInputView"===t||"RCTSinglelineTextInputView"===t||"RCTText"===t||"RCTVirtualText"===t,n!==(t=n.isInAParentText!==t?{isInAParentText:t}:n)&&(Kn(cr,e),Kn(sr,t))}function mr(e){cr.current===e&&(Gn(sr),Gn(cr))}var vr=Xn(0);function br(e){for(var n=e;null!==n;){if(13===n.tag){var t=n.memoizedState;if(null!==t&&(null===t.dehydrated||Mn()||Mn()))return n}else if(19===n.tag&&void 0!==n.memoizedProps.revealOrder){if(0!=(128&n.flags))return n}else if(null!==n.child){n.child.return=n,n=n.child;continue}if(n===e)break;for(;null===n.sibling;){if(null===n.return||n.return===e)return null;n=n.return}n.sibling.return=n.return,n=n.sibling}return null}var yr=[];function Sr(){for(var e=0;et?t:4,e(!0);var r=kr.transition;kr.transition={};try{e(!1),n()}finally{Ln=t,kr.transition=r}}function ul(){return Ur().memoizedState}function ol(e,n,t){var r=ti(e);if(t={lane:r,action:t,hasEagerState:!1,eagerState:null,next:null},cl(e))fl(n,t);else if(null!==(t=At(e,n,t,r))){ri(t,e,r,ni()),dl(t,n,r)}}function sl(e,n,t){var r=ti(e),l={lane:r,action:t,hasEagerState:!1,eagerState:null,next:null};if(cl(e))fl(n,l);else{var a=e.alternate;if(0===e.lanes&&(null===a||0===a.lanes)&&null!==(a=n.lastRenderedReducer))try{var i=n.lastRenderedState,u=a(i,t);if(l.hasEagerState=!0,l.eagerState=u,st(u,i)){var o=n.interleaved;return null===o?(l.next=l,Dt(n)):(l.next=o.next,o.next=l),void(n.interleaved=l)}}catch(e){}null!==(t=At(e,n,l,r))&&(ri(t,e,r,l=ni()),dl(t,n,r))}}function cl(e){var n=e.alternate;return e===Tr||null!==n&&n===Tr}function fl(e,n){Rr=Pr=!0;var t=e.pending;null===t?n.next=n:(n.next=t.next,t.next=n),e.pending=n}function dl(e,n,t){if(0!=(4194240&t)){var r=n.lanes;t|=r&=e.pendingLanes,n.lanes=t,In(e,t)}}var pl={readContext:Mt,useCallback:zr,useContext:zr,useEffect:zr,useImperativeHandle:zr,useInsertionEffect:zr,useLayoutEffect:zr,useMemo:zr,useReducer:zr,useRef:zr,useState:zr,useDebugValue:zr,useDeferredValue:zr,useTransition:zr,useMutableSource:zr,useSyncExternalStore:zr,useId:zr,unstable_isNewReconciler:!1},hl={readContext:Mt,useCallback:function(e,n){return Lr().memoizedState=[e,void 0===n?null:n],e},useContext:Mt,useEffect:Gr,useImperativeHandle:function(e,n,t){return t=null!=t?t.concat([e]):null,$r(4,4,el.bind(null,n,e),t)},useLayoutEffect:function(e,n){return $r(4,4,e,n)},useInsertionEffect:function(e,n){return $r(4,2,e,n)},useMemo:function(e,n){var t=Lr();return n=void 0===n?null:n,e=e(),t.memoizedState=[e,n],e},useReducer:function(e,n,t){var r=Lr();return n=void 0!==t?t(n):n,r.memoizedState=r.baseState=n,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:n},r.queue=e,e=e.dispatch=ol.bind(null,Tr,e),[r.memoizedState,e]},useRef:function(e){return e={current:e},Lr().memoizedState=e},useState:Vr,useDebugValue:tl,useDeferredValue:function(e){return Lr().memoizedState=e},useTransition:function(){var e=Vr(!1),n=e[0];return e=il.bind(null,e[1]),Lr().memoizedState=e,[n,e]},useMutableSource:function(){},useSyncExternalStore:function(e,n){var t=Tr,r=Lr(),l=n();if(null===za)throw Error("Expected a work-in-progress root. This is a bug in React. Please file an issue.");0!=(30&_r)||jr(t,n,l),r.memoizedState=l;var a={value:l,getSnapshot:n};return r.queue=a,Gr(Br.bind(null,t,a,e),[e]),t.flags|=2048,Yr(9,Hr.bind(null,t,a,l,n),void 0,null),l},useId:function(){var e=Lr(),n=za.identifierPrefix;return n=":"+n+"r"+(Cr++).toString(32)+":",e.memoizedState=n},unstable_isNewReconciler:!1},gl={readContext:Mt,useCallback:rl,useContext:Mt,useEffect:Kr,useImperativeHandle:nl,useInsertionEffect:Jr,useLayoutEffect:Zr,useMemo:ll,useReducer:Fr,useRef:qr,useState:function(){return Fr(Mr)},useDebugValue:tl,useDeferredValue:function(e){return al(Ur(),xr.memoizedState,e)},useTransition:function(){return[Fr(Mr)[0],Ur().memoizedState]},useMutableSource:Ar,useSyncExternalStore:Qr,useId:ul,unstable_isNewReconciler:!1},ml={readContext:Mt,useCallback:rl,useContext:Mt,useEffect:Kr,useImperativeHandle:nl,useInsertionEffect:Jr,useLayoutEffect:Zr,useMemo:ll,useReducer:Dr,useRef:qr,useState:function(){return Dr(Mr)},useDebugValue:tl,useDeferredValue:function(e){var n=Ur();return null===xr?n.memoizedState=e:al(n,xr.memoizedState,e)},useTransition:function(){return[Dr(Mr)[0],Ur().memoizedState]},useMutableSource:Ar,useSyncExternalStore:Qr,useId:ul,unstable_isNewReconciler:!1};function vl(e,n){return{value:e,source:n,stack:xt(n),digest:null}}function bl(e,n,t){return{value:e,source:null,stack:null!=t?t:null,digest:null!=n?n:null}}if("function"!=typeof n(i[2]).ReactFiberErrorDialog.showErrorDialog)throw Error("Expected ReactFiberErrorDialog.showErrorDialog to be a function.");function yl(e,t){try{!1!==n(i[2]).ReactFiberErrorDialog.showErrorDialog({componentStack:null!==t.stack?t.stack:"",error:t.value,errorBoundary:null!==e&&1===e.tag?e.stateNode:null})&&console.error(t.value)}catch(e){setTimeout((function(){throw e}))}}var Sl="function"==typeof WeakMap?WeakMap:Map;function wl(e,n,t){(t=Ot(-1,t)).tag=3,t.payload={element:null};var r=n.value;return t.callback=function(){Va||(Va=!0,Ya=r),yl(e,n)},t}function kl(e,n,t){(t=Ot(-1,t)).tag=3;var r=e.type.getDerivedStateFromError;if("function"==typeof r){var l=n.value;t.payload=function(){return r(l)},t.callback=function(){yl(e,n)}}var a=e.stateNode;return null!==a&&"function"==typeof a.componentDidCatch&&(t.callback=function(){yl(e,n),"function"!=typeof r&&(null===qa?qa=new Set([this]):qa.add(this));var t=n.stack;this.componentDidCatch(n.value,{componentStack:null!==t?t:""})}),t}function _l(e,n,t){var r=e.pingCache;if(null===r){r=e.pingCache=new Sl;var l=new Set;r.set(n,l)}else void 0===(l=r.get(n))&&(l=new Set,r.set(n,l));l.has(t)||(l.add(t),e=Ei.bind(null,e,n,t),n.then(e,e))}var Tl=Ue.ReactCurrentOwner,xl=!1;function El(e,n,t,r){n.child=null===e?ur(n,null,t,r):ir(n,e.child,t,r)}function Pl(e,n,t,r,l){t=t.render;var a=n.ref;return Ut(n,l),r=Ir(e,n,t,r,a,l),null===e||xl?(n.flags|=1,El(e,n,r,l),n.child):(n.updateQueue=e.updateQueue,n.flags&=-2053,e.lanes&=~l,Gl(e,n,l))}function Rl(e,n,t,r,l){if(null===e){var a=t.type;return"function"!=typeof a||Li(a)||void 0!==a.defaultProps||null!==t.compare||void 0!==t.defaultProps?((e=Fi(t.type,null,r,n,n.mode,l)).ref=n.ref,e.return=n,n.child=e):(n.tag=15,n.type=a,Cl(e,n,a,r,l))}if(a=e.child,0==(e.lanes&l)){var i=a.memoizedProps;if((t=null!==(t=t.compare)?t:_t)(i,r)&&e.ref===n.ref)return Gl(e,n,l)}return n.flags|=1,(e=Mi(a,r)).ref=n.ref,e.return=n,n.child=e}function Cl(e,n,t,r,l){if(null!==e){var a=e.memoizedProps;if(_t(a,r)&&e.ref===n.ref){if(xl=!1,n.pendingProps=r=a,0==(e.lanes&l))return n.lanes=e.lanes,Gl(e,n,l);0!=(131072&e.flags)&&(xl=!0)}}return Il(e,n,t,r,l)}function zl(e,n,t){var r=n.pendingProps,l=r.children,a=null!==e?e.memoizedState:null;if("hidden"===r.mode)if(0==(1&n.mode))n.memoizedState={baseLanes:0,cachePool:null,transitions:null},Kn(Ua,La),La|=t;else{if(0==(1073741824&t))return e=null!==a?a.baseLanes|t:t,n.lanes=n.childLanes=1073741824,n.memoizedState={baseLanes:e,cachePool:null,transitions:null},n.updateQueue=null,Kn(Ua,La),La|=e,null;n.memoizedState={baseLanes:0,cachePool:null,transitions:null},r=null!==a?a.baseLanes:t,Kn(Ua,La),La|=r}else null!==a?(r=a.baseLanes|t,n.memoizedState=null):r=t,Kn(Ua,La),La|=r;return El(e,n,l,t),n.child}function Nl(e,n){var t=n.ref;(null===e&&null!==t||null!==e&&e.ref!==t)&&(n.flags|=512)}function Il(e,n,t,r,l){var a=rt(t)?nt:Zn.current;return a=tt(n,a),Ut(n,l),t=Ir(e,n,t,r,a,l),null===e||xl?(n.flags|=1,El(e,n,t,l),n.child):(n.updateQueue=e.updateQueue,n.flags&=-2053,e.lanes&=~l,Gl(e,n,l))}function Ll(e,n,t,r,l){if(rt(t)){var a=!0;ut(n)}else a=!1;if(Ut(n,l),null===n.stateNode)Xl(e,n),Zt(n,t,r),nr(n,t,r,l),r=!0;else if(null===e){var i=n.stateNode,u=n.memoizedProps;i.props=u;var o=i.context,s=t.contextType;"object"==typeof s&&null!==s?s=Mt(s):s=tt(n,s=rt(t)?nt:Zn.current);var c=t.getDerivedStateFromProps,f="function"==typeof c||"function"==typeof i.getSnapshotBeforeUpdate;f||"function"!=typeof i.UNSAFE_componentWillReceiveProps&&"function"!=typeof i.componentWillReceiveProps||(u!==r||o!==s)&&er(n,i,r,s),jt=!1;var d=n.memoizedState;i.state=d,qt(n,r,i,l),o=n.memoizedState,u!==r||d!==o||et.current||jt?("function"==typeof c&&(Gt(n,t,c,r),o=n.memoizedState),(u=jt||Jt(n,t,u,r,d,o,s))?(f||"function"!=typeof i.UNSAFE_componentWillMount&&"function"!=typeof i.componentWillMount||("function"==typeof i.componentWillMount&&i.componentWillMount(),"function"==typeof i.UNSAFE_componentWillMount&&i.UNSAFE_componentWillMount()),"function"==typeof i.componentDidMount&&(n.flags|=4)):("function"==typeof i.componentDidMount&&(n.flags|=4),n.memoizedProps=r,n.memoizedState=o),i.props=r,i.state=o,i.context=s,r=u):("function"==typeof i.componentDidMount&&(n.flags|=4),r=!1)}else{i=n.stateNode,Bt(e,n),u=n.memoizedProps,s=n.type===n.elementType?u:Et(n.type,u),i.props=s,f=n.pendingProps,d=i.context,"object"==typeof(o=t.contextType)&&null!==o?o=Mt(o):o=tt(n,o=rt(t)?nt:Zn.current);var p=t.getDerivedStateFromProps;(c="function"==typeof p||"function"==typeof i.getSnapshotBeforeUpdate)||"function"!=typeof i.UNSAFE_componentWillReceiveProps&&"function"!=typeof i.componentWillReceiveProps||(u!==f||d!==o)&&er(n,i,r,o),jt=!1,d=n.memoizedState,i.state=d,qt(n,r,i,l);var h=n.memoizedState;u!==f||d!==h||et.current||jt?("function"==typeof p&&(Gt(n,t,p,r),h=n.memoizedState),(s=jt||Jt(n,t,s,r,d,h,o)||!1)?(c||"function"!=typeof i.UNSAFE_componentWillUpdate&&"function"!=typeof i.componentWillUpdate||("function"==typeof i.componentWillUpdate&&i.componentWillUpdate(r,h,o),"function"==typeof i.UNSAFE_componentWillUpdate&&i.UNSAFE_componentWillUpdate(r,h,o)),"function"==typeof i.componentDidUpdate&&(n.flags|=4),"function"==typeof i.getSnapshotBeforeUpdate&&(n.flags|=1024)):("function"!=typeof i.componentDidUpdate||u===e.memoizedProps&&d===e.memoizedState||(n.flags|=4),"function"!=typeof i.getSnapshotBeforeUpdate||u===e.memoizedProps&&d===e.memoizedState||(n.flags|=1024),n.memoizedProps=r,n.memoizedState=h),i.props=r,i.state=h,i.context=o,r=s):("function"!=typeof i.componentDidUpdate||u===e.memoizedProps&&d===e.memoizedState||(n.flags|=4),"function"!=typeof i.getSnapshotBeforeUpdate||u===e.memoizedProps&&d===e.memoizedState||(n.flags|=1024),r=!1)}return Ul(e,n,t,r,a,l)}function Ul(e,n,t,r,l,a){Nl(e,n);var i=0!=(128&n.flags);if(!r&&!i)return l&&ot(n,t,!1),Gl(e,n,a);r=n.stateNode,Tl.current=n;var u=i&&"function"!=typeof t.getDerivedStateFromError?null:r.render();return n.flags|=1,null!==e&&i?(n.child=ir(n,e.child,null,a),n.child=ir(n,null,u,a)):El(e,n,u,a),n.memoizedState=r.state,l&&ot(n,t,!0),n.child}function Ml(e){var n=e.stateNode;n.pendingContext?at(0,n.pendingContext,n.pendingContext!==n.context):n.context&&at(0,n.context,!1),pr(e,n.containerInfo)}var Fl,Dl,Al,Ql,jl={dehydrated:null,treeContext:null,retryLane:0};function Hl(e){return{baseLanes:e,cachePool:null,transitions:null}}function Bl(e,n,t){var r,l=n.pendingProps,a=vr.current,i=!1,u=0!=(128&n.flags);if((r=u)||(r=(null===e||null!==e.memoizedState)&&0!=(2&a)),r?(i=!0,n.flags&=-129):null!==e&&null===e.memoizedState||(a|=1),Kn(vr,1&a),null===e)return null!==(e=n.memoizedState)&&null!==e.dehydrated?(0==(1&n.mode)?n.lanes=1:Mn()?n.lanes=8:n.lanes=1073741824,null):(u=l.children,e=l.fallback,i?(l=n.mode,i=n.child,u={mode:"hidden",children:u},0==(1&l)&&null!==i?(i.childLanes=0,i.pendingProps=u):i=Ai(u,l,0,null),e=Di(e,l,t,null),i.return=n,e.return=n,i.sibling=e,n.child=i,n.child.memoizedState=Hl(t),n.memoizedState=jl,e):Ol(n,u));if(null!==(a=e.memoizedState)&&null!==(r=a.dehydrated))return Vl(e,n,u,l,r,a,t);if(i){i=l.fallback,u=n.mode,r=(a=e.child).sibling;var o={mode:"hidden",children:l.children};return 0==(1&u)&&n.child!==a?((l=n.child).childLanes=0,l.pendingProps=o,n.deletions=null):(l=Mi(a,o)).subtreeFlags=14680064&a.subtreeFlags,null!==r?i=Mi(r,i):(i=Di(i,u,t,null)).flags|=2,i.return=n,l.return=n,l.sibling=i,n.child=l,l=i,i=n.child,u=null===(u=e.child.memoizedState)?Hl(t):{baseLanes:u.baseLanes|t,cachePool:null,transitions:u.transitions},i.memoizedState=u,i.childLanes=e.childLanes&~t,n.memoizedState=jl,l}return e=(i=e.child).sibling,l=Mi(i,{mode:"visible",children:l.children}),0==(1&n.mode)&&(l.lanes=t),l.return=n,l.sibling=null,null!==e&&(null===(t=n.deletions)?(n.deletions=[e],n.flags|=16):t.push(e)),n.child=l,n.memoizedState=null,l}function Ol(e,n){return(n=Ai({mode:"visible",children:n},e.mode,0,null)).return=e,e.child=n}function Wl(e,n,t,r){return null!==r&&(null===wt?wt=[r]:wt.push(r)),ir(n,e.child,null,t),(e=Ol(n,n.pendingProps.children)).flags|=2,n.memoizedState=null,e}function Vl(e,n,t,r,l,a,i){if(t)return 256&n.flags?(n.flags&=-257,Wl(e,n,i,a=bl(Error("There was an error while hydrating this Suspense boundary. Switched to client rendering.")))):null!==n.memoizedState?(n.child=e.child,n.flags|=128,null):(a=r.fallback,t=n.mode,r=Ai({mode:"visible",children:r.children},t,0,null),(a=Di(a,t,i,null)).flags|=2,r.return=n,a.return=n,r.sibling=a,n.child=r,0!=(1&n.mode)&&ir(n,e.child,null,i),n.child.memoizedState=Hl(i),n.memoizedState=jl,a);if(0==(1&n.mode))return Wl(e,n,i,null);if(Mn())return a=Mn().digest,Wl(e,n,i,a=bl(Error("The server could not finish this Suspense boundary, likely due to an error during server rendering. Switched to client rendering."),a,void 0));if(t=0!=(i&e.childLanes),xl||t){if(null!==(r=za)){switch(i&-i){case 4:t=2;break;case 16:t=8;break;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:t=32;break;case 536870912:t=268435456;break;default:t=0}0!==(t=0!=(t&(r.suspendedLanes|i))?0:t)&&t!==a.retryLane&&(a.retryLane=t,Qt(e,t),ri(r,e,t,-1))}return gi(),Wl(e,n,i,a=bl(Error("This Suspense boundary received an update before it finished hydrating. This caused the boundary to switch to client rendering. The usual way to fix this is to wrap the original update in startTransition.")))}return Mn()?(n.flags|=128,n.child=e.child,Ri.bind(null,e),Mn(),null):((e=Ol(n,r.children)).flags|=4096,e)}function Yl(e,n,t){e.lanes|=n;var r=e.alternate;null!==r&&(r.lanes|=n),Lt(e.return,n,t)}function ql(e,n,t,r,l){var a=e.memoizedState;null===a?e.memoizedState={isBackwards:n,rendering:null,renderingStartTime:0,last:r,tail:t,tailMode:l}:(a.isBackwards=n,a.rendering=null,a.renderingStartTime=0,a.last=r,a.tail=t,a.tailMode=l)}function $l(e,n,t){var r=n.pendingProps,l=r.revealOrder,a=r.tail;if(El(e,n,r.children,t),0!=(2&(r=vr.current)))r=1&r|2,n.flags|=128;else{if(null!==e&&0!=(128&e.flags))e:for(e=n.child;null!==e;){if(13===e.tag)null!==e.memoizedState&&Yl(e,t,n);else if(19===e.tag)Yl(e,t,n);else if(null!==e.child){e.child.return=e,e=e.child;continue}if(e===n)break e;for(;null===e.sibling;){if(null===e.return||e.return===n)break e;e=e.return}e.sibling.return=e.return,e=e.sibling}r&=1}if(Kn(vr,r),0==(1&n.mode))n.memoizedState=null;else switch(l){case"forwards":for(t=n.child,l=null;null!==t;)null!==(e=t.alternate)&&null===br(e)&&(l=t),t=t.sibling;null===(t=l)?(l=n.child,n.child=null):(l=t.sibling,t.sibling=null),ql(n,!1,l,t,a);break;case"backwards":for(t=null,l=n.child,n.child=null;null!==l;){if(null!==(e=l.alternate)&&null===br(e)){n.child=l;break}e=l.sibling,l.sibling=t,t=l,l=e}ql(n,!0,t,null,a);break;case"together":ql(n,!1,null,null,void 0);break;default:n.memoizedState=null}return n.child}function Xl(e,n){0==(1&n.mode)&&null!==e&&(e.alternate=null,n.alternate=null,n.flags|=2)}function Gl(e,n,t){if(null!==e&&(n.dependencies=e.dependencies),Da|=n.lanes,0==(t&n.childLanes))return null;if(null!==e&&n.child!==e.child)throw Error("Resuming work not yet implemented.");if(null!==n.child){for(t=Mi(e=n.child,e.pendingProps),n.child=t,t.return=n;null!==e.sibling;)e=e.sibling,(t=t.sibling=Mi(e,e.pendingProps)).return=n;t.sibling=null}return n.child}function Kl(e,n,t){switch(n.tag){case 3:Ml(n);break;case 5:gr(n);break;case 1:rt(n.type)&&ut(n);break;case 4:pr(n,n.stateNode.containerInfo);break;case 10:var r=n.type._context,l=n.memoizedProps.value;Kn(Pt,r._currentValue),r._currentValue=l;break;case 13:if(null!==(r=n.memoizedState))return null!==r.dehydrated?(Kn(vr,1&vr.current),n.flags|=128,null):0!=(t&n.child.childLanes)?Bl(e,n,t):(Kn(vr,1&vr.current),null!==(e=Gl(e,n,t))?e.sibling:null);Kn(vr,1&vr.current);break;case 19:if(r=0!=(t&n.childLanes),0!=(128&e.flags)){if(r)return $l(e,n,t);n.flags|=128}if(null!==(l=n.memoizedState)&&(l.rendering=null,l.tail=null,l.lastEffect=null),Kn(vr,vr.current),r)break;return null;case 22:case 23:return n.lanes=0,zl(e,n,t)}return Gl(e,n,t)}function Jl(e,n){switch(e.tailMode){case"hidden":n=e.tail;for(var t=null;null!==n;)null!==n.alternate&&(t=n),n=n.sibling;null===t?e.tail=null:t.sibling=null;break;case"collapsed":t=e.tail;for(var r=null;null!==t;)null!==t.alternate&&(r=t),t=t.sibling;null===r?n||null===e.tail?e.tail=null:e.tail.sibling=null:r.sibling=null}}function Zl(e){var n=null!==e.alternate&&e.alternate.child===e.child,t=0,r=0;if(n)for(var l=e.child;null!==l;)t|=l.lanes|l.childLanes,r|=14680064&l.subtreeFlags,r|=14680064&l.flags,l.return=e,l=l.sibling;else for(l=e.child;null!==l;)t|=l.lanes|l.childLanes,r|=l.subtreeFlags,r|=l.flags,l.return=e,l=l.sibling;return e.subtreeFlags|=r,e.childLanes=t,n}function ea(e,t,r){var l=t.pendingProps;switch(St(t),t.tag){case 2:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return Zl(t),null;case 1:case 17:return rt(t.type)&<(),Zl(t),null;case 3:return r=t.stateNode,hr(),Gn(et),Gn(Zn),Sr(),r.pendingContext&&(r.context=r.pendingContext,r.pendingContext=null),null!==e&&null!==e.child||null===e||e.memoizedState.isDehydrated&&0==(256&t.flags)||(t.flags|=1024,null!==wt&&(ui(wt),wt=null)),Dl(e,t),Zl(t),null;case 5:mr(t),r=dr(fr.current);var a=t.type;if(null!==e&&null!=t.stateNode)Al(e,t,a,l,r),e.ref!==t.ref&&(t.flags|=512);else{if(!l){if(null===t.stateNode)throw Error("We must have new props for new mounts. This error is likely caused by a bug in React. Please file an issue.");return Zl(t),null}dr(sr.current),e=Qn(),a=Fn(a);var u=pn(null,rn,l,a.validAttributes);n(i[2]).UIManager.createView(e,a.uiViewClassName,r,u),r=new gn(e,a,t),Te.set(e,t),xe.set(e,l),Fl(r,t,!1,!1),t.stateNode=r,Hn(r)&&(t.flags|=4),null!==t.ref&&(t.flags|=512)}return Zl(t),null;case 6:if(e&&null!=t.stateNode)Ql(e,t,e.memoizedProps,l);else{if("string"!=typeof l&&null===t.stateNode)throw Error("We must have new props for new mounts. This error is likely caused by a bug in React. Please file an issue.");if(e=dr(fr.current),!dr(sr.current).isInAParentText)throw Error("Text strings must be rendered within a component.");r=Qn(),n(i[2]).UIManager.createView(r,"RCTRawText",e,{text:l}),Te.set(r,t),t.stateNode=r}return Zl(t),null;case 13:if(Gn(vr),l=t.memoizedState,null===e||null!==e.memoizedState&&null!==e.memoizedState.dehydrated){if(null!==l&&null!==l.dehydrated){if(null===e)throw Error("A dehydrated suspense component was completed without a hydrated node. This is probably a bug in React.");0==(128&t.flags)&&(t.memoizedState=null),t.flags|=4,Zl(t),a=!1}else null!==wt&&(ui(wt),wt=null),a=!0;if(!a)return 65536&t.flags?t:null}return 0!=(128&t.flags)?(t.lanes=r,t):((r=null!==l)!==(null!==e&&null!==e.memoizedState)&&r&&(t.child.flags|=8192,0!=(1&t.mode)&&(null===e||0!=(1&vr.current)?0===Ma&&(Ma=3):gi())),null!==t.updateQueue&&(t.flags|=4),Zl(t),null);case 4:return hr(),Dl(e,t),Zl(t),null;case 10:return It(t.type._context),Zl(t),null;case 19:if(Gn(vr),null===(a=t.memoizedState))return Zl(t),null;if(l=0!=(128&t.flags),null===(u=a.rendering))if(l)Jl(a,!1);else{if(0!==Ma||null!==e&&0!=(128&e.flags))for(e=t.child;null!==e;){if(null!==(u=br(e))){for(t.flags|=128,Jl(a,!1),null!==(e=u.updateQueue)&&(t.updateQueue=e,t.flags|=4),t.subtreeFlags=0,e=r,r=t.child;null!==r;)a=e,(l=r).flags&=14680066,null===(u=l.alternate)?(l.childLanes=0,l.lanes=a,l.child=null,l.subtreeFlags=0,l.memoizedProps=null,l.memoizedState=null,l.updateQueue=null,l.dependencies=null,l.stateNode=null):(l.childLanes=u.childLanes,l.lanes=u.lanes,l.child=u.child,l.subtreeFlags=0,l.deletions=null,l.memoizedProps=u.memoizedProps,l.memoizedState=u.memoizedState,l.updateQueue=u.updateQueue,l.type=u.type,a=u.dependencies,l.dependencies=null===a?null:{lanes:a.lanes,firstContext:a.firstContext}),r=r.sibling;return Kn(vr,1&vr.current|2),t.child}e=e.sibling}null!==a.tail&&n(i[3]).unstable_now()>Oa&&(t.flags|=128,l=!0,Jl(a,!1),t.lanes=4194304)}else{if(!l)if(null!==(e=br(u))){if(t.flags|=128,l=!0,null!==(e=e.updateQueue)&&(t.updateQueue=e,t.flags|=4),Jl(a,!0),null===a.tail&&"hidden"===a.tailMode&&!u.alternate)return Zl(t),null}else 2*n(i[3]).unstable_now()-a.renderingStartTime>Oa&&1073741824!==r&&(t.flags|=128,l=!0,Jl(a,!1),t.lanes=4194304);a.isBackwards?(u.sibling=t.child,t.child=u):(null!==(e=a.last)?e.sibling=u:t.child=u,a.last=u)}return null!==a.tail?(t=a.tail,a.rendering=t,a.tail=t.sibling,a.renderingStartTime=n(i[3]).unstable_now(),t.sibling=null,e=vr.current,Kn(vr,l?1&e|2:1&e),t):(Zl(t),null);case 22:case 23:return fi(),r=null!==t.memoizedState,null!==e&&null!==e.memoizedState!==r&&(t.flags|=8192),r&&0!=(1&t.mode)?0!=(1073741824&La)&&(Zl(t),6&t.subtreeFlags&&(t.flags|=8192)):Zl(t),null;case 24:case 25:return null}throw Error("Unknown unit of work tag ("+t.tag+"). This error is likely caused by a bug in React. Please file an issue.")}function na(e,n){switch(St(n),n.tag){case 1:return rt(n.type)&<(),65536&(e=n.flags)?(n.flags=-65537&e|128,n):null;case 3:return hr(),Gn(et),Gn(Zn),Sr(),0!=(65536&(e=n.flags))&&0==(128&e)?(n.flags=-65537&e|128,n):null;case 5:return mr(n),null;case 13:if(Gn(vr),null!==(e=n.memoizedState)&&null!==e.dehydrated&&null===n.alternate)throw Error("Threw in newly mounted dehydrated component. This is likely a bug in React. Please file an issue.");return 65536&(e=n.flags)?(n.flags=-65537&e|128,n):null;case 19:return Gn(vr),null;case 4:return hr(),null;case 10:return It(n.type._context),null;case 22:case 23:return fi(),null;default:return null}}Fl=function(e,n){for(var t=n.child;null!==t;){if(5===t.tag||6===t.tag)e._children.push(t.stateNode);else if(4!==t.tag&&null!==t.child){t.child.return=t,t=t.child;continue}if(t===n)break;for(;null===t.sibling;){if(null===t.return||t.return===n)return;t=t.return}t.sibling.return=t.return,t=t.sibling}},Dl=function(){},Al=function(e,n,t,r){e.memoizedProps!==r&&(dr(sr.current),n.updateQueue=Dn)&&(n.flags|=4)},Ql=function(e,n,t,r){t!==r&&(n.flags|=4)};var ta="function"==typeof WeakSet?WeakSet:Set,ra=null;function la(e,n){var t=e.ref;if(null!==t)if("function"==typeof t)try{t(null)}catch(t){xi(e,n,t)}else t.current=null}function aa(e,n,t){try{t()}catch(t){xi(e,n,t)}}var ia=!1;function ua(e,n){for(ra=n;null!==ra;)if(n=(e=ra).child,0!=(1028&e.subtreeFlags)&&null!==n)n.return=e,ra=n;else for(;null!==ra;){e=ra;try{var t=e.alternate;if(0!=(1024&e.flags))switch(e.tag){case 0:case 11:case 15:case 3:case 5:case 6:case 4:case 17:break;case 1:if(null!==t){var r=t.memoizedProps,l=t.memoizedState,a=e.stateNode,i=a.getSnapshotBeforeUpdate(e.elementType===e.type?r:Et(e.type,r),l);a.__reactInternalSnapshotBeforeUpdate=i}break;default:throw Error("This unit of work tag should not have side-effects. This error is likely caused by a bug in React. Please file an issue.")}}catch(n){xi(e,e.return,n)}if(null!==(n=e.sibling)){n.return=e.return,ra=n;break}ra=e.return}return t=ia,ia=!1,t}function oa(e,n,t){var r=n.updateQueue;if(null!==(r=null!==r?r.lastEffect:null)){var l=r=r.next;do{if((l.tag&e)===e){var a=l.destroy;l.destroy=void 0,void 0!==a&&aa(n,t,a)}l=l.next}while(l!==r)}}function sa(e,n){if(null!==(n=null!==(n=n.updateQueue)?n.lastEffect:null)){var t=n=n.next;do{if((t.tag&e)===e){var r=t.create;t.destroy=r()}t=t.next}while(t!==n)}}function ca(e){var n=e.alternate;null!==n&&(e.alternate=null,ca(n)),e.child=null,e.deletions=null,e.sibling=null,e.stateNode=null,e.return=null,e.dependencies=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.stateNode=null,e.updateQueue=null}function fa(e){return 5===e.tag||3===e.tag||4===e.tag}function da(e){e:for(;;){for(;null===e.sibling;){if(null===e.return||fa(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;5!==e.tag&&6!==e.tag&&18!==e.tag;){if(2&e.flags)continue e;if(null===e.child||4===e.tag)continue e;e.child.return=e,e=e.child}if(!(2&e.flags))return e.stateNode}}function pa(e,t,r){var l=e.tag;if(5===l||6===l)if(e=e.stateNode,t){if("number"==typeof r)throw Error("Container does not support insertBefore operation")}else n(i[2]).UIManager.setChildren(r,["number"==typeof e?e:e._nativeTag]);else if(4!==l&&null!==(e=e.child))for(pa(e,t,r),e=e.sibling;null!==e;)pa(e,t,r),e=e.sibling}function ha(e,t,r){var l=e.tag;if(5===l||6===l)if(e=e.stateNode,t){var a=(l=r._children).indexOf(e);0<=a?(l.splice(a,1),t=l.indexOf(t),l.splice(t,0,e),n(i[2]).UIManager.manageChildren(r._nativeTag,[a],[t],[],[],[])):(t=l.indexOf(t),l.splice(t,0,e),n(i[2]).UIManager.manageChildren(r._nativeTag,[],[],["number"==typeof e?e:e._nativeTag],[t],[]))}else t="number"==typeof e?e:e._nativeTag,0<=(a=(l=r._children).indexOf(e))?(l.splice(a,1),l.push(e),n(i[2]).UIManager.manageChildren(r._nativeTag,[a],[l.length-1],[],[],[])):(l.push(e),n(i[2]).UIManager.manageChildren(r._nativeTag,[],[],[t],[l.length-1],[]));else if(4!==l&&null!==(e=e.child))for(ha(e,t,r),e=e.sibling;null!==e;)ha(e,t,r),e=e.sibling}var ga=null,ma=!1;function va(e,n,t){for(t=t.child;null!==t;)ba(e,n,t),t=t.sibling}function ba(e,t,r){if(vn&&"function"==typeof vn.onCommitFiberUnmount)try{vn.onCommitFiberUnmount(mn,r)}catch(e){}switch(r.tag){case 5:la(r,t);case 6:var l=ga,a=ma;ga=null,va(e,t,r),ma=a,null!==(ga=l)&&(ma?(e=ga,jn(r.stateNode),n(i[2]).UIManager.manageChildren(e,[],[],[],[],[0])):(e=ga,jn(t=r.stateNode),t=(r=e._children).indexOf(t),r.splice(t,1),n(i[2]).UIManager.manageChildren(e._nativeTag,[],[],[],[],[t])));break;case 18:null!==ga&&Mn(r.stateNode);break;case 4:l=ga,a=ma,ga=r.stateNode.containerInfo,ma=!0,va(e,t,r),ga=l,ma=a;break;case 0:case 11:case 14:case 15:if(null!==(l=r.updateQueue)&&null!==(l=l.lastEffect)){a=l=l.next;do{var u=a,o=u.destroy;u=u.tag,void 0!==o&&(0!=(2&u)||0!=(4&u))&&aa(r,t,o),a=a.next}while(a!==l)}va(e,t,r);break;case 1:if(la(r,t),"function"==typeof(l=r.stateNode).componentWillUnmount)try{l.props=r.memoizedProps,l.state=r.memoizedState,l.componentWillUnmount()}catch(e){xi(r,t,e)}va(e,t,r);break;default:va(e,t,r)}}function ya(e){var n=e.updateQueue;if(null!==n){e.updateQueue=null;var t=e.stateNode;null===t&&(t=e.stateNode=new ta),n.forEach((function(n){var r=Ci.bind(null,e,n);t.has(n)||(t.add(n),n.then(r,r))}))}}function Sa(e,n){var t=n.deletions;if(null!==t)for(var r=0;ra&&(a=o),l&=~u}if(l=a,10<(l=(120>(l=n(i[3]).unstable_now()-l)?120:480>l?480:1080>l?1080:1920>l?1920:3e3>l?3e3:4320>l?4320:1960*xa(l/1960))-l)){e.timeoutHandle=Bn(wi.bind(null,e,Ha,Wa),l);break}wi(e,Ha,Wa);break;default:throw Error("Unknown root exit status.")}}}return li(e,n(i[3]).unstable_now()),e.callbackNode===r?ai.bind(null,e):null}function ii(e,n){var t=ja;return e.current.memoizedState.isDehydrated&&(di(e,n).flags|=256),2!==(e=mi(e,n))&&(n=Ha,Ha=t,null!==n&&ui(n)),e}function ui(e){null===Ha?Ha=e:Ha.push.apply(Ha,e)}function oi(e){for(var n=e;;){if(16384&n.flags){var t=n.updateQueue;if(null!==t&&null!==(t=t.stores))for(var r=0;re?16:e,null===Xa)var r=!1;else{if(e=Xa,Xa=null,Ga=0,0!=(6&Ca))throw Error("Cannot flush passive effects while already rendering.");var l=Ca;for(Ca|=4,ra=e.current;null!==ra;){var a=ra,i=a.child;if(0!=(16&ra.flags)){var u=a.deletions;if(null!==u){for(var o=0;on(i[3]).unstable_now()-Ba?di(e,0):Qa|=r),li(e,t)}function Pi(e,n){0===n&&(0==(1&e.mode)?n=1:(n=_n,0==(130023424&(_n<<=1))&&(_n=4194304)));var t=ni();null!==(e=Qt(e,n))&&(zn(e,n,t),li(e,t))}function Ri(e){var n=e.memoizedState,t=0;null!==n&&(t=n.retryLane),Pi(e,t)}function Ci(e,n){var t=0;switch(e.tag){case 13:var r=e.stateNode,l=e.memoizedState;null!==l&&(t=l.retryLane);break;case 19:r=e.stateNode;break;default:throw Error("Pinged unknown suspense boundary type. This is probably a bug in React.")}null!==r&&r.delete(n),Pi(e,t)}function zi(e,t){return n(i[3]).unstable_scheduleCallback(e,t)}function Ni(e,n,t,r){this.tag=e,this.key=t,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=n,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=r,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function Ii(e,n,t,r){return new Ni(e,n,t,r)}function Li(e){return!(!(e=e.prototype)||!e.isReactComponent)}function Ui(e){if("function"==typeof e)return Li(e)?1:0;if(null!=e){if((e=e.$$typeof)===Be)return 11;if(e===Ve)return 14}return 2}function Mi(e,n){var t=e.alternate;return null===t?((t=Ii(e.tag,n,e.key,e.mode)).elementType=e.elementType,t.type=e.type,t.stateNode=e.stateNode,t.alternate=e,e.alternate=t):(t.pendingProps=n,t.type=e.type,t.flags=0,t.subtreeFlags=0,t.deletions=null),t.flags=14680064&e.flags,t.childLanes=e.childLanes,t.lanes=e.lanes,t.child=e.child,t.memoizedProps=e.memoizedProps,t.memoizedState=e.memoizedState,t.updateQueue=e.updateQueue,n=e.dependencies,t.dependencies=null===n?null:{lanes:n.lanes,firstContext:n.firstContext},t.sibling=e.sibling,t.index=e.index,t.ref=e.ref,t}function Fi(e,n,t,r,l,a){var i=2;if(r=e,"function"==typeof e)Li(e)&&(i=1);else if("string"==typeof e)i=5;else e:switch(e){case De:return Di(t.children,l,a,n);case Ae:i=8,l|=8;break;case Qe:return(e=Ii(12,t,n,2|l)).elementType=Qe,e.lanes=a,e;case Oe:return(e=Ii(13,t,n,l)).elementType=Oe,e.lanes=a,e;case We:return(e=Ii(19,t,n,l)).elementType=We,e.lanes=a,e;case qe:return Ai(t,l,a,n);default:if("object"==typeof e&&null!==e)switch(e.$$typeof){case je:i=10;break e;case He:i=9;break e;case Be:i=11;break e;case Ve:i=14;break e;case Ye:i=16,r=null;break e}throw Error("Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: "+(null==e?e:typeof e)+".")}return(n=Ii(i,t,n,l)).elementType=e,n.type=r,n.lanes=a,n}function Di(e,n,t,r){return(e=Ii(7,e,r,n)).lanes=t,e}function Ai(e,n,t,r){return(e=Ii(22,e,r,n)).elementType=qe,e.lanes=t,e.stateNode={isHidden:!1},e}function Qi(e,n,t){return(e=Ii(6,e,null,n)).lanes=t,e}function ji(e,n,t){return(n=Ii(4,null!==e.children?e.children:[],e.key,n)).lanes=t,n.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},n}function Hi(e,n,t,r,l){this.tag=n,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=Cn(0),this.expirationTimes=Cn(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=Cn(0),this.identifierPrefix=r,this.onRecoverableError=l}function Bi(e,n,t){var r=3=0||(console.error(`'numberOfLines' in must be a non-negative number, received: ${ce}. The value will be set to 0.`),ce=0);var pe,be=(0,r.useContext)(s.default),fe=i.default.select({ios:!1!==O,default:O});'number'==typeof(null==(S=de=(0,t.default)(de))?void 0:S.fontWeight)&&(de.fontWeight=null==(pe=de)?void 0:pe.fontWeight.toString());var Re=X.selectable;null!=(null==(h=de)?void 0:h.userSelect)&&(Re=f[de.userSelect],delete de.userSelect),null!=(null==(P=de)?void 0:P.verticalAlign)&&(de.textAlignVertical=R[de.verticalAlign],delete de.verticalAlign);var ve=null!=c.onPress||null!=c.onLongPress;return be?(0,_r(d[10]).jsx)(_r(d[11]).NativeVirtualText,Object.assign({},X,re,{accessibilityLabel:null!=D?D:x,accessibilityRole:Q?(0,_r(d[12]).getAccessibilityRoleFromRole)(Q):M,accessibilityState:T,isHighlighted:ee,isPressable:oe,nativeID:null!=E?E:W,numberOfLines:ce,ref:p,selectable:Re,selectionColor:ue,style:de})):(0,_r(d[10]).jsx)(s.default.Provider,{value:!0,children:(0,_r(d[10]).jsx)(_r(d[11]).NativeText,Object.assign({},X,re,{accessibilityLabel:null!=D?D:x,accessibilityRole:Q?(0,_r(d[12]).getAccessibilityRoleFromRole)(Q):M,accessibilityState:te,accessible:null==O&&'android'===i.default.OS?ve:fe,allowFontScaling:!1!==_,disabled:le,ellipsizeMode:null!=I?I:'tail',isHighlighted:ee,nativeID:null!=E?E:W,numberOfLines:ce,ref:p,selectable:Re,selectionColor:ue,style:de}))})}));function b(n){var l=(0,r.useState)(n),t=(0,e.default)(l,2),o=t[0],i=t[1];return!o&&n&&i(n),o}p.displayName='Text',p.propTypes=_r(d[13]).TextPropTypes;var f={auto:!0,text:!0,none:!1,contain:!0,all:!0},R={auto:'auto',top:'top',bottom:'bottom',middle:'center'};m.exports=p}),224,[8,26,119,225,226,157,164,21,158,153,193,233,195,234]); +__d((function(g,_r,_i,a,m,_e,d){Object.defineProperty(_e,"__esModule",{value:!0}),_e.PressabilityDebugView=function(e){return null},_e.isEnabled=function(){return!1},_e.setEnabled=function(e){};_r(d[0])(_r(d[1])),_r(d[0])(_r(d[2])),(function(e,t){if("function"==typeof WeakMap)var n=new WeakMap,r=new WeakMap;(function(e,t){if(!t&&e&&e.__esModule)return e;var o,u,f={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return f;if(o=t?r:n){if(o.has(e))return o.get(e);o.set(e,f)}for(var i in e)"default"!==i&&{}.hasOwnProperty.call(e,i)&&((u=(o=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,i))&&(u.get||u.set)?o(f,i,u):f[i]=e[i])})(e,t)})(_r(d[3]))}),225,[8,156,165,153]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(l){var t=(0,u.useRef)(null);null!=l&&null==t.current&&(t.current=new n.default(l));var f=t.current;return(0,u.useEffect)((function(){null!=l&&null!=f&&f.configure(l)}),[l,f]),(0,u.useEffect)((function(){if(null!=f)return function(){f.reset()}}),[f]),null==f?null:f.getEventHandlers()};var n=r(d[0])(r(d[1])),u=r(d[2])}),226,[8,227,153]); +__d((function(g,_r,_i,a,m,_e,d){Object.defineProperty(_e,"__esModule",{value:!0}),_e.default=void 0;var e=_r(d[0])(_r(d[1])),E=_r(d[0])(_r(d[2])),t=_r(d[0])(_r(d[3])),n=_r(d[0])(_r(d[4])),i=_r(d[0])(_r(d[5])),R=_r(d[0])(_r(d[6])),_=_r(d[0])(_r(d[7])),o=_r(d[0])(_r(d[8]));!(function(e,E){if("function"==typeof WeakMap)var t=new WeakMap,n=new WeakMap;(function(e,E){if(!E&&e&&e.__esModule)return e;var i,R,_={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return _;if(i=E?n:t){if(i.has(e))return i.get(e);i.set(e,_)}for(var o in e)"default"!==o&&{}.hasOwnProperty.call(e,o)&&((R=(i=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,o))&&(R.get||R.set)?i(_,o,R):_[o]=e[o])})(e,E)})(_r(d[9]));var l=Object.freeze({NOT_RESPONDER:{DELAY:'ERROR',RESPONDER_GRANT:'RESPONDER_INACTIVE_PRESS_IN',RESPONDER_RELEASE:'ERROR',RESPONDER_TERMINATED:'ERROR',ENTER_PRESS_RECT:'ERROR',LEAVE_PRESS_RECT:'ERROR',LONG_PRESS_DETECTED:'ERROR'},RESPONDER_INACTIVE_PRESS_IN:{DELAY:'RESPONDER_ACTIVE_PRESS_IN',RESPONDER_GRANT:'ERROR',RESPONDER_RELEASE:'NOT_RESPONDER',RESPONDER_TERMINATED:'NOT_RESPONDER',ENTER_PRESS_RECT:'RESPONDER_INACTIVE_PRESS_IN',LEAVE_PRESS_RECT:'RESPONDER_INACTIVE_PRESS_OUT',LONG_PRESS_DETECTED:'ERROR'},RESPONDER_INACTIVE_PRESS_OUT:{DELAY:'RESPONDER_ACTIVE_PRESS_OUT',RESPONDER_GRANT:'ERROR',RESPONDER_RELEASE:'NOT_RESPONDER',RESPONDER_TERMINATED:'NOT_RESPONDER',ENTER_PRESS_RECT:'RESPONDER_INACTIVE_PRESS_IN',LEAVE_PRESS_RECT:'RESPONDER_INACTIVE_PRESS_OUT',LONG_PRESS_DETECTED:'ERROR'},RESPONDER_ACTIVE_PRESS_IN:{DELAY:'ERROR',RESPONDER_GRANT:'ERROR',RESPONDER_RELEASE:'NOT_RESPONDER',RESPONDER_TERMINATED:'NOT_RESPONDER',ENTER_PRESS_RECT:'RESPONDER_ACTIVE_PRESS_IN',LEAVE_PRESS_RECT:'RESPONDER_ACTIVE_PRESS_OUT',LONG_PRESS_DETECTED:'RESPONDER_ACTIVE_LONG_PRESS_IN'},RESPONDER_ACTIVE_PRESS_OUT:{DELAY:'ERROR',RESPONDER_GRANT:'ERROR',RESPONDER_RELEASE:'NOT_RESPONDER',RESPONDER_TERMINATED:'NOT_RESPONDER',ENTER_PRESS_RECT:'RESPONDER_ACTIVE_PRESS_IN',LEAVE_PRESS_RECT:'RESPONDER_ACTIVE_PRESS_OUT',LONG_PRESS_DETECTED:'ERROR'},RESPONDER_ACTIVE_LONG_PRESS_IN:{DELAY:'ERROR',RESPONDER_GRANT:'ERROR',RESPONDER_RELEASE:'NOT_RESPONDER',RESPONDER_TERMINATED:'NOT_RESPONDER',ENTER_PRESS_RECT:'RESPONDER_ACTIVE_LONG_PRESS_IN',LEAVE_PRESS_RECT:'RESPONDER_ACTIVE_LONG_PRESS_OUT',LONG_PRESS_DETECTED:'RESPONDER_ACTIVE_LONG_PRESS_IN'},RESPONDER_ACTIVE_LONG_PRESS_OUT:{DELAY:'ERROR',RESPONDER_GRANT:'ERROR',RESPONDER_RELEASE:'NOT_RESPONDER',RESPONDER_TERMINATED:'NOT_RESPONDER',ENTER_PRESS_RECT:'RESPONDER_ACTIVE_LONG_PRESS_IN',LEAVE_PRESS_RECT:'RESPONDER_ACTIVE_LONG_PRESS_OUT',LONG_PRESS_DETECTED:'ERROR'},ERROR:{DELAY:'NOT_RESPONDER',RESPONDER_GRANT:'RESPONDER_INACTIVE_PRESS_IN',RESPONDER_RELEASE:'NOT_RESPONDER',RESPONDER_TERMINATED:'NOT_RESPONDER',ENTER_PRESS_RECT:'NOT_RESPONDER',LEAVE_PRESS_RECT:'NOT_RESPONDER',LONG_PRESS_DETECTED:'NOT_RESPONDER'}}),u=function(e){return'RESPONDER_ACTIVE_PRESS_IN'===e||'RESPONDER_ACTIVE_LONG_PRESS_IN'===e},s=function(e){return'RESPONDER_ACTIVE_PRESS_OUT'===e||'RESPONDER_ACTIVE_PRESS_IN'===e},r=function(e){return'RESPONDER_INACTIVE_PRESS_IN'===e||'RESPONDER_ACTIVE_PRESS_IN'===e||'RESPONDER_ACTIVE_LONG_PRESS_IN'===e},S=function(e){return'RESPONDER_TERMINATED'===e||'RESPONDER_RELEASE'===e},T=30,c=20,P=20,O=20,D=10;_e.default=(0,E.default)((function E(t){var n=this;(0,e.default)(this,E),this._eventHandlers=null,this._hoverInDelayTimeout=null,this._hoverOutDelayTimeout=null,this._isHovered=!1,this._longPressDelayTimeout=null,this._pressDelayTimeout=null,this._pressOutDelayTimeout=null,this._responderID=null,this._responderRegion=null,this._touchState='NOT_RESPONDER',this._measureCallback=function(e,E,t,i,R,_){(e||E||t||i||R||_)&&(n._responderRegion={bottom:_+i,left:R,right:R+t,top:_})},this.configure(t)}),[{key:"configure",value:function(e){this._config=e}},{key:"reset",value:function(){this._cancelHoverInDelayTimeout(),this._cancelHoverOutDelayTimeout(),this._cancelLongPressDelayTimeout(),this._cancelPressDelayTimeout(),this._cancelPressOutDelayTimeout(),this._config=Object.freeze({})}},{key:"getEventHandlers",value:function(){return null==this._eventHandlers&&(this._eventHandlers=this._createEventHandlers()),this._eventHandlers}},{key:"_createEventHandlers",value:function(){var e=this,E={onBlur:function(E){var t=e._config.onBlur;null!=t&&t(E)},onFocus:function(E){var t=e._config.onFocus;null!=t&&t(E)}},t={onStartShouldSetResponder:function(){var E=e._config.disabled;if(null==E){var t=e._config.onStartShouldSetResponder_DEPRECATED;return null==t||t()}return!E},onResponderGrant:function(E){E.persist(),e._cancelPressOutDelayTimeout(),e._responderID=E.currentTarget,e._touchState='NOT_RESPONDER',e._receiveSignal('RESPONDER_GRANT',E);var t=N(e._config.delayPressIn);t>0?e._pressDelayTimeout=setTimeout((function(){e._receiveSignal('DELAY',E)}),t):e._receiveSignal('DELAY',E);var n=N(e._config.delayLongPress,10,500-t);e._longPressDelayTimeout=setTimeout((function(){e._handleLongPress(E)}),n+t)},onResponderMove:function(E){var t=e._config.onPressMove;null!=t&&t(E);var n=e._responderRegion;if(null!=n){var i=v(E);if(null==i)return e._cancelLongPressDelayTimeout(),void e._receiveSignal('LEAVE_PRESS_RECT',E);if(null!=e._touchActivatePosition){var R=e._touchActivatePosition.pageX-i.pageX,_=e._touchActivatePosition.pageY-i.pageY;Math.hypot(R,_)>D&&e._cancelLongPressDelayTimeout()}e._isTouchWithinResponderRegion(i,n)?e._receiveSignal('ENTER_PRESS_RECT',E):(e._cancelLongPressDelayTimeout(),e._receiveSignal('LEAVE_PRESS_RECT',E))}},onResponderRelease:function(E){e._receiveSignal('RESPONDER_RELEASE',E)},onResponderTerminate:function(E){e._receiveSignal('RESPONDER_TERMINATED',E)},onResponderTerminationRequest:function(){var E=e._config.cancelable;if(null==E){var t=e._config.onResponderTerminationRequest_DEPRECATED;return null==t||t()}return E},onClick:function(E){var t=e._config,n=t.onPress,i=t.disabled;null!=n&&!0!==i&&n(E)}};if(n.default.shouldPressibilityUseW3CPointerEventsForHover()){var i={onPointerEnter:void 0,onPointerLeave:void 0},_=this._config,o=_.onHoverIn,l=_.onHoverOut;return null!=o&&(i.onPointerEnter=function(E){if(e._isHovered=!0,e._cancelHoverOutDelayTimeout(),null!=o){var t=N(e._config.delayHoverIn);t>0?(E.persist(),e._hoverInDelayTimeout=setTimeout((function(){o(f(E))}),t)):o(f(E))}}),null!=l&&(i.onPointerLeave=function(E){if(e._isHovered&&(e._isHovered=!1,e._cancelHoverInDelayTimeout(),null!=l)){var t=N(e._config.delayHoverOut);t>0?(E.persist(),e._hoverOutDelayTimeout=setTimeout((function(){l(f(E))}),t)):l(f(E))}}),Object.assign({},E,t,i)}var u='ios'===R.default.OS||'android'===R.default.OS?null:{onMouseEnter:function(E){if((0,_r(d[10]).isHoverEnabled)()){e._isHovered=!0,e._cancelHoverOutDelayTimeout();var t=e._config.onHoverIn;if(null!=t){var n=N(e._config.delayHoverIn);n>0?(E.persist(),e._hoverInDelayTimeout=setTimeout((function(){t(E)}),n)):t(E)}}},onMouseLeave:function(E){if(e._isHovered){e._isHovered=!1,e._cancelHoverInDelayTimeout();var t=e._config.onHoverOut;if(null!=t){var n=N(e._config.delayHoverOut);n>0?(E.persist(),e._hoverInDelayTimeout=setTimeout((function(){t(E)}),n)):t(E)}}}};return Object.assign({},E,t,u)}},{key:"_receiveSignal",value:function(e,E){var t;null!=E.nativeEvent.timestamp&&_.default.emitEvent((function(){return{signal:e,nativeTimestamp:E.nativeEvent.timestamp}}));var n=this._touchState,i=null==(t=l[n])?void 0:t[e];null==this._responderID&&'RESPONDER_RELEASE'===e||((0,o.default)(null!=i&&'ERROR'!==i,'Pressability: Invalid signal `%s` for state `%s` on responder: %s',e,n,'number'==typeof this._responderID?this._responderID:'<>'),n!==i&&(this._performTransitionSideEffects(n,i,e,E),this._touchState=i))}},{key:"_performTransitionSideEffects",value:function(e,E,n,i){S(n)&&(this._touchActivatePosition=null,this._cancelLongPressDelayTimeout());var _='NOT_RESPONDER'===e&&'RESPONDER_INACTIVE_PRESS_IN'===E,o=!s(e)&&s(E);if((_||o)&&this._measureResponderRegion(),r(e)&&'LONG_PRESS_DETECTED'===n){var l=this._config.onLongPress;null!=l&&l(i)}var T=u(e),c=u(E);if(!T&&c?this._activate(i):T&&!c&&this._deactivate(i),r(e)&&'RESPONDER_RELEASE'===n){c||T||(this._activate(i),this._deactivate(i));var P=this._config,O=P.onLongPress,D=P.onPress,N=P.android_disableSound;null!=D&&(null!=O&&'RESPONDER_ACTIVE_LONG_PRESS_IN'===e&&this._shouldLongPressCancelPress()||('android'===R.default.OS&&!0!==N&&t.default.playTouchSound(),D(i)))}this._cancelPressDelayTimeout()}},{key:"_activate",value:function(e){var E=this._config.onPressIn,t=v(e),n=t.pageX,i=t.pageY;this._touchActivatePosition={pageX:n,pageY:i},this._touchActivateTime=Date.now(),null!=E&&E(e)}},{key:"_deactivate",value:function(e){var E=this._config.onPressOut;if(null!=E){var t,n=N(this._config.minPressDuration,0,130),i=Date.now()-(null!=(t=this._touchActivateTime)?t:0),R=Math.max(n-i,N(this._config.delayPressOut));R>0?(e.persist(),this._pressOutDelayTimeout=setTimeout((function(){E(e)}),R)):E(e)}this._touchActivateTime=null}},{key:"_measureResponderRegion",value:function(){null!=this._responderID&&('number'==typeof this._responderID?i.default.measure(this._responderID,this._measureCallback):this._responderID.measure(this._measureCallback))}},{key:"_isTouchWithinResponderRegion",value:function(e,E){var t,n,i,R,_=(0,_r(d[11]).normalizeRect)(this._config.hitSlop),o=(0,_r(d[11]).normalizeRect)(this._config.pressRectOffset),l=E.bottom,u=E.left,s=E.right,r=E.top;return null!=_&&(null!=_.bottom&&(l+=_.bottom),null!=_.left&&(u-=_.left),null!=_.right&&(s+=_.right),null!=_.top&&(r-=_.top)),l+=null!=(t=null==o?void 0:o.bottom)?t:T,u-=null!=(n=null==o?void 0:o.left)?n:c,s+=null!=(i=null==o?void 0:o.right)?i:P,r-=null!=(R=null==o?void 0:o.top)?R:O,e.pageX>u&&e.pageXr&&e.pageY1&&void 0!==arguments[1]?arguments[1]:0,t=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0;return Math.max(E,null!=e?e:t)}var v=function(e){var E=e.nativeEvent,t=E.changedTouches,n=E.touches;return null!=n&&n.length>0?n[0]:null!=t&&t.length>0?t[0]:e.nativeEvent};function f(e){var E=e.nativeEvent,t=E.clientX,n=E.clientY;return Object.assign({},e,{nativeEvent:{clientX:t,clientY:n,pageX:t,pageY:n,timestamp:e.timeStamp}})}}),227,[8,17,18,228,106,37,21,230,24,153,231,232]); +__d((function(g,r,i,a,m,e,d){var u=r(d[0])(r(d[1])),o={playTouchSound:function(){u.default&&u.default.playTouchSound()}};m.exports=o}),228,[8,229]); +__d((function(g,_r,_i,a,m,_e,d){Object.defineProperty(_e,"__esModule",{value:!0}),_e.default=void 0;var e=(function(e,t){if("function"==typeof WeakMap)var r=new WeakMap,n=new WeakMap;return(function(e,t){if(!t&&e&&e.__esModule)return e;var o,f,u={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return u;if(o=t?n:r){if(o.has(e))return o.get(e);o.set(e,u)}for(var i in e)"default"!==i&&{}.hasOwnProperty.call(e,i)&&((f=(o=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,i))&&(f.get||f.set)?o(u,i,f):u[i]=e[i]);return u})(e,t)})(_r(d[0]));_e.default=e.get('SoundManager')}),229,[23]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var t=r(d[0])(r(d[1])),n=new((0,r(d[0])(r(d[2])).default)((function n(){(0,t.default)(this,n),this._listeners=[]}),[{key:"addListener",value:function(t){this._listeners.push(t)}},{key:"removeListener",value:function(t){var n=this._listeners.indexOf(t);n>-1&&this._listeners.splice(n,1)}},{key:"emitEvent",value:function(t){if(0!==this._listeners.length){var n=t();this._listeners.forEach((function(t){return t(n)}))}}}]));e.default=n}),230,[8,17,18]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.isHoverEnabled=function(){return t};var n=r(d[0])(r(d[1])),t=!1;if('web'===n.default.OS&&Boolean('undefined'!=typeof window&&window.document&&window.document.createElement)){var o=0,u=function(){o=Date.now(),t&&(t=!1)};document.addEventListener('touchstart',u,!0),document.addEventListener('touchmove',u,!0),document.addEventListener('mousemove',(function(){t||Date.now()-o<1e3||(t=!0)}),!0)}}),231,[8,21]); +__d((function(g,r,i,a,m,e,d){function t(t){return{bottom:t,left:t,right:t,top:t}}Object.defineProperty(e,"__esModule",{value:!0}),e.createSquare=t,e.normalizeRect=function(n){return'number'==typeof n?t(n):n}}),232,[]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.NativeVirtualText=e.NativeText=void 0;var t=r(d[0])(r(d[1])),n=r(d[0])(r(d[2])),l={validAttributes:{isHighlighted:!0,isPressable:!0,numberOfLines:!0,ellipsizeMode:!0,allowFontScaling:!0,dynamicTypeRamp:!0,maxFontSizeMultiplier:!0,disabled:!0,selectable:!0,selectionColor:!0,adjustsFontSizeToFit:!0,minimumFontScale:!0,textBreakStrategy:!0,onTextLayout:!0,onInlineViewLayout:!0,dataDetectorType:!0,android_hyphenationFrequency:!0,lineBreakStrategyIOS:!0},directEventTypes:{topTextLayout:{registrationName:'onTextLayout'},topInlineViewLayout:{registrationName:'onInlineViewLayout'}},uiViewClassName:'RCTText'},o={validAttributes:{isHighlighted:!0,isPressable:!0,maxFontSizeMultiplier:!0},uiViewClassName:'RCTVirtualText'},u=e.NativeText=(0,n.default)('RCTText',(function(){return(0,r(d[3]).createViewConfig)(l)}));e.NativeVirtualText=g.RN$Bridgeless||t.default.hasViewManagerConfig('RCTVirtualText')?(0,n.default)('RCTVirtualText',(function(){return(0,r(d[3]).createViewConfig)(o)})):u}),233,[8,37,221,191]); +__d((function(g,r,i,a,m,e,d){'use strict';m.exports={get ColorPropType(){return r(d[0])},get EdgeInsetsPropType(){return r(d[1])},get ImagePropTypes(){return r(d[2])},get PointPropType(){return r(d[3])},get TextInputPropTypes(){return r(d[4])},get TextPropTypes(){return r(d[5])},get ViewPropTypes(){return r(d[6])}}}),234,[235,236,240,251,252,253,241]); +__d((function(g,r,i,a,m,e,d){'use strict';var n=function(n,f,l,o,t,b){var s=f[l];return null==s?n?new Error('Required '+t+' `'+(b||l)+'` was not specified in `'+o+'`.'):void 0:'number'!=typeof s&&'string'==typeof s&&null===r(d[0])(s)?new Error('Invalid '+t+' `'+(b||l)+'` supplied to `'+o+'`: '+s+"\nValid color formats are\n - '#f0f' (#rgb)\n - '#f0fc' (#rgba)\n - '#ff00ff' (#rrggbb)\n - '#ff00ff00' (#rrggbbaa)\n - 'rgb(255, 255, 255)'\n - 'rgba(255, 255, 255, 1.0)'\n - 'hsl(360, 100%, 100%)'\n - 'hsla(360, 100%, 100%, 1.0)'\n - 'transparent'\n - 'red'\n - 0xff00ff00 (0xrrggbbaa)\n"):void 0},f=n.bind(null,!1);f.isRequired=n.bind(null,!0),m.exports=f}),235,[166]); +__d((function(g,r,i,a,m,e,d){'use strict';var t=r(d[0]).shape({bottom:r(d[0]).number,left:r(d[0]).number,right:r(d[0]).number,top:r(d[0]).number});m.exports=t}),236,[237]); +__d((function(g,r,i,a,m,e,d){m.exports=r(d[0])()}),237,[238]); +__d((function(g,r,i,a,m,e,d){'use strict';function n(){}function t(){}t.resetWarningCache=n,m.exports=function(){function o(n,t,o,p,c,s){if(s!==r(d[0])){var y=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw y.name='Invariant Violation',y}}function p(){return o}o.isRequired=o;var c={array:o,bigint:o,bool:o,func:o,number:o,object:o,string:o,symbol:o,any:o,arrayOf:p,element:o,elementType:o,instanceOf:p,node:o,objectOf:p,oneOf:p,oneOfType:p,shape:p,exact:p,checkPropTypes:t,resetWarningCache:n};return c.PropTypes=c,c}}),238,[239]); +__d((function(g,r,i,a,m,e,d){'use strict';m.exports='SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED'}),239,[]); +__d((function(g,r,i,a,m,e,d){'use strict';var n=Object.assign({},r(d[0]),{alt:r(d[1]).string,blurRadius:r(d[1]).number,capInsets:r(d[2]),crossOrigin:r(d[1]).oneOf(['anonymous','use-credentials']),defaultSource:r(d[3]),fadeDuration:r(d[1]).number,height:r(d[1]).number,internal_analyticTag:r(d[1]).string,loadingIndicatorSource:r(d[1]).oneOfType([r(d[1]).shape({uri:r(d[1]).string}),r(d[1]).number]),onError:r(d[1]).func,onLoad:r(d[1]).func,onLoadEnd:r(d[1]).func,onLoadStart:r(d[1]).func,onPartialLoad:r(d[1]).func,onProgress:r(d[1]).func,progressiveRenderingEnabled:r(d[1]).bool,referrerPolicy:r(d[1]).oneOf(['no-referrer','no-referrer-when-downgrade','origin','origin-when-cross-origin','same-origin','strict-origin','strict-origin-when-cross-origin','unsafe-url']),resizeMethod:r(d[1]).oneOf(['auto','resize','scale']),resizeMode:r(d[1]).oneOf(['cover','contain','stretch','repeat','center']),source:r(d[3]),src:r(d[1]).string,srcSet:r(d[1]).string,style:r(d[4])(r(d[5])),testID:r(d[1]).string,tintColor:r(d[6]),width:r(d[1]).number});m.exports=n}),240,[241,237,236,249,243,250,235]); +__d((function(g,r,i,a,m,e,d){'use strict';var n={onMouseEnter:r(d[0]).func,onMouseLeave:r(d[0]).func},o={onPointerEnter:r(d[0]).func,onPointerEnterCapture:r(d[0]).func,onPointerLeave:r(d[0]).func,onPointerLeaveCapture:r(d[0]).func,onPointerMove:r(d[0]).func,onPointerMoveCapture:r(d[0]).func,onPointerCancel:r(d[0]).func,onPointerCancelCapture:r(d[0]).func,onPointerDown:r(d[0]).func,onPointerDownCapture:r(d[0]).func,onPointerUp:r(d[0]).func,onPointerUpCapture:r(d[0]).func,onPointerOver:r(d[0]).func,onPointerOverCapture:r(d[0]).func,onPointerOut:r(d[0]).func,onPointerOutCapture:r(d[0]).func},t={onBlur:r(d[0]).func,onBlurCapture:r(d[0]).func,onFocus:r(d[0]).func,onFocusCapture:r(d[0]).func},c={onTouchCancel:r(d[0]).func,onTouchCancelCapture:r(d[0]).func,onTouchEnd:r(d[0]).func,onTouchEndCapture:r(d[0]).func,onTouchMove:r(d[0]).func,onTouchMoveCapture:r(d[0]).func,onTouchStart:r(d[0]).func,onTouchStartCapture:r(d[0]).func},u={onMoveShouldSetResponder:r(d[0]).func,onMoveShouldSetResponderCapture:r(d[0]).func,onResponderEnd:r(d[0]).func,onResponderGrant:r(d[0]).func,onResponderMove:r(d[0]).func,onResponderReject:r(d[0]).func,onResponderRelease:r(d[0]).func,onResponderStart:r(d[0]).func,onResponderTerminate:r(d[0]).func,onResponderTerminationRequest:r(d[0]).func,onStartShouldSetResponder:r(d[0]).func,onStartShouldSetResponderCapture:r(d[0]).func},s=Object.assign({},n,o,t,c,u,{'aria-busy':r(d[0]).bool,'aria-checked':r(d[0]).oneOfType([r(d[0]).bool,r(d[0]).oneOf(['mixed'])]),'aria-disabled':r(d[0]).bool,'aria-expanded':r(d[0]).bool,'aria-hidden':r(d[0]).bool,'aria-label':r(d[0]).string,'aria-labelledby':r(d[0]).string,'aria-live':r(d[0]).oneOf(['polite','assertive','off']),'aria-modal':r(d[0]).bool,'aria-selected':r(d[0]).bool,'aria-valuemax':r(d[0]).number,'aria-valuemin':r(d[0]).number,'aria-valuenow':r(d[0]).number,'aria-valuetext':r(d[0]).string,accessibilityActions:r(d[0]).arrayOf(r(d[1]).AccessibilityActionInfoPropType),accessibilityElementsHidden:r(d[0]).bool,accessibilityHint:r(d[0]).string,accessibilityIgnoresInvertColors:r(d[0]).bool,accessibilityLabel:r(d[0]).node,accessibilityLabelledBy:r(d[0]).oneOfType([r(d[0]).string,r(d[0]).arrayOf(r(d[0]).string)]),accessibilityLanguage:r(d[0]).string,accessibilityLiveRegion:r(d[0]).oneOf(['assertive','none','polite']),accessibilityRole:r(d[1]).AccessibilityRolePropType,accessibilityState:r(d[1]).AccessibilityStatePropType,accessibilityValue:r(d[1]).AccessibilityValuePropType,accessibilityViewIsModal:r(d[0]).bool,accessible:r(d[0]).bool,collapsable:r(d[0]).bool,focusable:r(d[0]).bool,hitSlop:r(d[0]).oneOfType([r(d[2]),r(d[0]).number]),importantForAccessibility:r(d[0]).oneOf(['auto','no','no-hide-descendants','yes']),nativeBackgroundAndroid:r(d[0]).object,nativeForegroundAndroid:r(d[0]).object,nativeID:r(d[0]).string,needsOffscreenAlphaCompositing:r(d[0]).bool,onAccessibilityAction:r(d[0]).func,onAccessibilityEscape:r(d[0]).func,onAccessibilityTap:r(d[0]).func,onClick:r(d[0]).func,onLayout:r(d[0]).func,onMagicTap:r(d[0]).func,pointerEvents:r(d[0]).oneOf(['auto','box-none','box-only','none']),removeClippedSubviews:r(d[0]).bool,renderToHardwareTextureAndroid:r(d[0]).bool,role:r(d[1]).RolePropType,shouldRasterizeIOS:r(d[0]).bool,style:r(d[3])(r(d[4])),tabIndex:r(d[0]).oneOf([0,-1]),testID:r(d[0]).string});m.exports=s}),241,[237,242,236,243,245]); +__d((function(g,r,i,a,m,e,d){'use strict';var o={AccessibilityRolePropType:r(d[0]).oneOf(['adjustable','alert','button','checkbox','combobox','drawerlayout','dropdownlist','grid','header','horizontalscrollview','iconmenu','image','imagebutton','keyboardkey','link','list','menu','menubar','menuitem','none','pager','progressbar','radio','radiogroup','scrollbar','scrollview','search','slidingdrawer','spinbutton','summary','switch','tab','tabbar','tablist','text','timer','togglebutton','toolbar','viewgroup','webview']),AccessibilityStatePropType:r(d[0]).object,AccessibilityActionInfoPropType:r(d[0]).object,AccessibilityValuePropType:r(d[0]).object,RolePropType:r(d[0]).oneOf(['alert','alertdialog','application','article','banner','button','cell','checkbox','columnheader','combobox','complementary','contentinfo','definition','dialog','directory','document','feed','figure','form','grid','group','heading','img','link','list','listitem','log','main','marquee','math','menu','menubar','menuitem','meter','navigation','none','note','option','presentation','progressbar','radio','radiogroup','region','row','rowgroup','rowheader','scrollbar','searchbox','separator','slider','spinbutton','status','summary','switch','tab','table','tablist','tabpanel','term','timer','toolbar','tooltip','tree','treegrid','treeitem'])};m.exports=o}),242,[237]); +__d((function(g,r,_i,a,m,e,d){'use strict';function n(t){if(null!==t&&'object'==typeof t){if(!Array.isArray(t))return t;for(var o={},f=0,i=t.length;f4?v-4:0),y=4;y5?v-5:0),b=5;b4?l-4:0),p=4;p=23};var y='android'===p.default.OS?function(e,s){return s&&f.canUseNativeForeground()?{nativeForegroundAndroid:e}:{nativeBackgroundAndroid:e}}:function(e,s){return null};f.displayName='TouchableNativeFeedback',m.exports=f}),255,[8,119,17,18,3,2,56,156,227,164,21,24,153,47,159]); +__d((function(g,_r,_i,a,m,_e,d){var s=_r(d[0])(_r(d[1])),t=_r(d[0])(_r(d[2])),i=_r(d[0])(_r(d[3])),e=_r(d[0])(_r(d[4])),o=_r(d[0])(_r(d[5])),n=_r(d[0])(_r(d[6])),l=_r(d[0])(_r(d[7])),r=_r(d[0])(_r(d[8])),p=_r(d[0])(_r(d[9])),c=_r(d[0])(_r(d[10])),u=_r(d[0])(_r(d[11])),h=(function(s,t){if("function"==typeof WeakMap)var i=new WeakMap,e=new WeakMap;return(function(s,t){if(!t&&s&&s.__esModule)return s;var o,n,l={__proto__:null,default:s};if(null===s||"object"!=typeof s&&"function"!=typeof s)return l;if(o=t?e:i){if(o.has(s))return o.get(s);o.set(s,l)}for(var r in s)"default"!==r&&{}.hasOwnProperty.call(s,r)&&((n=(o=Object.defineProperty)&&Object.getOwnPropertyDescriptor(s,r))&&(n.get||n.set)?o(l,r,n):l[r]=s[r]);return l})(s,t)})(_r(d[12])),y=["onBlur","onFocus"];function f(){try{var s=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(s){}return(f=function(){return!!s})()}var b=(function(h){function b(){var s,i,n,r;(0,t.default)(this,b);for(var c=arguments.length,u=new Array(c),h=0;h1&&void 0!==arguments[1]?arguments[1]:{},i=n.iterations,r=void 0===i?-1:i,o=n.resetBeforeIteration,a=void 0===o||o,u=!1,s=0;return{start:function(n){var i=function(){var o=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{finished:!0};u||s===r||!1===o.finished?n&&n(o):(s++,a&&t.reset(),t.start(i))};t&&0!==r?t._isUsingNativeDriver()?t._startNativeLoop(r):i():n&&n({finished:!0})},stop:function(){u=!0,t.stop()},reset:function(){s=0,u=!1,t.reset()},_startNativeLoop:function(){throw new Error('Loops run using the native driver cannot contain Animated.loop animations')},_isUsingNativeDriver:function(){return t._isUsingNativeDriver()}}},event:function(t,n){var i=new(_r(d[17]).AnimatedEvent)(t,n);return i.__isNative?i:i.__getHandler()},createAnimatedComponent:r.default,attachNativeEvent:_r(d[17]).attachNativeEvent,forkEvent:function(t,n){return t?t instanceof _r(d[17]).AnimatedEvent?(t.__addListener(n),t):function(){'function'==typeof t&&t.apply(void 0,arguments),n.apply(void 0,arguments)}:n},unforkEvent:function(t,n){t&&t instanceof _r(d[17]).AnimatedEvent&&t.__removeListener(n)},Event:_r(d[17]).AnimatedEvent}}),258,[8,259,264,275,276,286,265,287,288,269,289,290,273,291,292,266,284,283]); +__d((function(g,_r,i,a,m,_e,d){'use strict';Object.defineProperty(_e,"__esModule",{value:!0}),_e.default=void 0;var t=_r(d[0])(_r(d[1])),e=_r(d[0])(_r(d[2])),n=_r(d[0])(_r(d[3])),o=_r(d[0])(_r(d[4])),r=_r(d[0])(_r(d[5])),s=_r(d[0])(_r(d[6])),l=_r(d[0])(_r(d[7])),u=_r(d[0])(_r(d[8]));function _(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(t){}return(_=function(){return!!t})()}_e.default=(function(u){function c(e){var r,s,u,f,h,v,p;return(0,t.default)(this,c),h=this,v=c,v=(0,o.default)(v),(f=(0,n.default)(h,_()?Reflect.construct(v,p||[],(0,o.default)(h).constructor):v.apply(h,p)))._deceleration=null!=(r=e.deceleration)?r:.998,f._velocity=e.velocity,f._useNativeDriver=l.default.shouldUseNativeDriver(e),f._platformConfig=e.platformConfig,f.__isInteraction=null!=(s=e.isInteraction)?s:!f._useNativeDriver,f.__iterations=null!=(u=e.iterations)?u:1,f}return(0,s.default)(c,u),(0,e.default)(c,[{key:"__getNativeAnimationConfig",value:function(){return{type:'decay',deceleration:this._deceleration,velocity:this._velocity,iterations:this.__iterations,platformConfig:this._platformConfig}}},{key:"start",value:function(t,e,n,o,r){this.__active=!0,this._lastValue=t,this._fromValue=t,this._onUpdate=e,this.__onEnd=n,this._startTime=Date.now(),this._useNativeDriver?this.__startNativeAnimation(r):this._animationFrame=requestAnimationFrame(this.onUpdate.bind(this))}},{key:"onUpdate",value:function(){var t=Date.now(),e=this._fromValue+this._velocity/(1-this._deceleration)*(1-Math.exp(-(1-this._deceleration)*(t-this._startTime)));this._onUpdate(e),Math.abs(this._lastValue-e)<.1?this.__debouncedOnEnd({finished:!0}):(this._lastValue=e,this.__active&&(this._animationFrame=requestAnimationFrame(this.onUpdate.bind(this))))}},{key:"stop",value:function(){var t,e,n,s,l;(t=c,e="stop",n=this,s=3,l=(0,r.default)((0,o.default)(1&s?t.prototype:t),e,n),2&s&&"function"==typeof l?function(t){return l.apply(n,t)}:l)([]),this.__active=!1,g.cancelAnimationFrame(this._animationFrame),this.__debouncedOnEnd({finished:!1})}}])})(u.default)}),259,[8,17,18,3,2,98,56,260,263]); +__d((function(g,r,_i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var t,n=r(d[0])(r(d[1])),i=r(d[0])(r(d[2])),o=r(d[0])(r(d[3])),u=r(d[0])(r(d[4])),l=r(d[0])(r(d[5])),s=r(d[0])(r(d[6])),f=r(d[0])(r(d[7])),c='ios'===u.default.OS&&!0===g.RN$Bridgeless?s.default:l.default,p=1,v=1,N=new Set,A=!1,b=[],h=[],O='android'===u.default.OS&&!(null==c||!c.queueAndExecuteBatchedOperations)&&o.default.animatedShouldUseSingleOp(),w=null,V={},y={},S=null,q=null,T=O?['createAnimatedNode','updateAnimatedNodeConfig','getValue','startListeningToAnimatedNodeValue','stopListeningToAnimatedNodeValue','connectAnimatedNodes','disconnectAnimatedNodes','startAnimatingNode','stopAnimation','setAnimatedNodeValue','setAnimatedNodeOffset','flattenAnimatedNodeOffset','extractAnimatedNodeOffset','connectAnimatedNodeToView','disconnectAnimatedNodeFromView','restoreDefaultValues','dropAnimatedNode','addAnimatedEventToView','removeAnimatedEventFromView','addListener','removeListener'].reduce((function(t,n,i){return t[n]=i+1,t}),{}):c,R={getValue:function(t,n){(0,f.default)(T,'Native animated module is not available'),O?(n&&(V[t]=n),R.queueOperation(T.getValue,t)):R.queueOperation(T.getValue,t,n)},setWaitingForIdentifier:function(t){N.add(t),A=!0,o.default.animatedShouldDebounceQueueFlush()&&w&&clearTimeout(w)},unsetWaitingForIdentifier:function(t){N.delete(t),0===N.size&&(A=!1,R.disableQueue())},disableQueue:function(){((0,f.default)(T,'Native animated module is not available'),o.default.animatedShouldDebounceQueueFlush())?(clearImmediate(w),w=setImmediate(R.flushQueue)):R.flushQueue()},flushQueue:function(){if((0,f.default)(c||!1,'Native animated module is not available'),w=null,(!O||0!==h.length)&&(O||0!==b.length))if(O)S&&q||E(),null==c||null==c.queueAndExecuteBatchedOperations||c.queueAndExecuteBatchedOperations(h),h.length=0;else{'android'===u.default.OS&&(null==c||null==c.startOperationBatch||c.startOperationBatch());for(var t=0,n=b.length;t1?n-1:0),o=1;o0,'Stiffness value must be greater than 0'),(0,u.default)(V._damping>0,'Damping value must be greater than 0'),(0,u.default)(V._mass>0,'Mass value must be greater than 0'),V}return(0,o.default)(_,h),(0,i.default)(_,[{key:"__getNativeAnimationConfig",value:function(){var t;return{type:'spring',overshootClamping:this._overshootClamping,restDisplacementThreshold:this._restDisplacementThreshold,restSpeedThreshold:this._restSpeedThreshold,stiffness:this._stiffness,damping:this._damping,mass:this._mass,initialVelocity:null!=(t=this._initialVelocity)?t:this._lastVelocity,toValue:this._toValue,iterations:this.__iterations,platformConfig:this._platformConfig}}},{key:"start",value:function(t,i,e,s,n){var o=this;if(this.__active=!0,this._startPosition=t,this._lastPosition=this._startPosition,this._onUpdate=i,this.__onEnd=e,this._lastTime=Date.now(),this._frameTime=0,s instanceof _){var l=s.getInternalState();this._lastPosition=l.lastPosition,this._lastVelocity=l.lastVelocity,this._initialVelocity=this._lastVelocity,this._lastTime=l.lastTime}var r=function(){o._useNativeDriver?o.__startNativeAnimation(n):o.onUpdate()};this._delay?this._timeout=setTimeout(r,this._delay):r()}},{key:"getInternalState",value:function(){return{lastPosition:this._lastPosition,lastVelocity:this._lastVelocity,lastTime:this._lastTime}}},{key:"onUpdate",value:function(){var t=Date.now();t>this._lastTime+64&&(t=this._lastTime+64);var i=(t-this._lastTime)/1e3;this._frameTime+=i;var e=this._damping,s=this._mass,n=this._stiffness,o=-this._initialVelocity,l=e/(2*Math.sqrt(n*s)),r=Math.sqrt(n/s),h=r*Math.sqrt(1-l*l),u=this._toValue-this._startPosition,f=0,_=0,c=this._frameTime;if(l<1){var m=Math.exp(-l*r*c);f=this._toValue-m*((o+l*r*u)/h*Math.sin(h*c)+u*Math.cos(h*c)),_=l*r*m*(Math.sin(h*c)*(o+l*r*u)/h+u*Math.cos(h*c))-m*(Math.cos(h*c)*(o+l*r*u)-h*u*Math.sin(h*c))}else{var p=Math.exp(-r*c);f=this._toValue-p*(u+(o+r*u)*c),_=p*(o*(c*r-1)+c*u*(r*r))}if(this._lastTime=t,this._lastPosition=f,this._lastVelocity=_,this._onUpdate(f),this.__active){var v=!1;this._overshootClamping&&0!==this._stiffness&&(v=this._startPositionthis._toValue:f>>24,g:(16711680&e)>>>16,b:(65280&e)>>>8,a:(255&e)/255}}return null}function g(t){return t&&'number'==typeof t.r&&'number'==typeof t.g&&'number'==typeof t.b&&'number'==typeof t.a}function p(t){return t&&t.r instanceof u.default&&t.g instanceof u.default&&t.b instanceof u.default&&t.a instanceof u.default}_e.default=(function(n){function r(e,n){var s,l,f,_;(0,t.default)(this,r),l=this,f=r,f=(0,a.default)(f),(s=(0,i.default)(l,o()?Reflect.construct(f,_||[],(0,a.default)(l).constructor):f.apply(l,_)))._suspendCallbacks=0;var h=null!=e?e:c;if(p(h)){var b=h;s.r=b.r,s.g=b.g,s.b=b.b,s.a=b.a}else{var y,k=null!=(y=v(h))?y:c,C=c;g(k)?C=k:s.nativeColor=k,s.r=new u.default(C.r),s.g=new u.default(C.g),s.b=new u.default(C.b),s.a=new u.default(C.a)}return null!=n&&n.useNativeDriver&&s.__makeNative(),s}return(0,s.default)(r,n),(0,e.default)(r,[{key:"setValue",value:function(t){var e,i=this,a=!1;if(this.__isNative){var n=this.__getNativeTag();h.setWaitingForIdentifier(n.toString())}var s=null!=(e=v(t))?e:c;if(this._withSuspendedCallbacks((function(){if(g(s)){var t=s;i.r.setValue(t.r),i.g.setValue(t.g),i.b.setValue(t.b),i.a.setValue(t.a),null!=i.nativeColor&&(i.nativeColor=null,a=!0)}else{var e=s;i.nativeColor!==e&&(i.nativeColor=e,a=!0)}})),this.__isNative){var r=this.__getNativeTag();a&&h.updateAnimatedNodeConfig(r,this.__getNativeConfig()),h.unsetWaitingForIdentifier(r.toString())}else(0,u.flushValue)(this);this.__callListeners(this.__getValue())}},{key:"setOffset",value:function(t){this.r.setOffset(t.r),this.g.setOffset(t.g),this.b.setOffset(t.b),this.a.setOffset(t.a)}},{key:"flattenOffset",value:function(){this.r.flattenOffset(),this.g.flattenOffset(),this.b.flattenOffset(),this.a.flattenOffset()}},{key:"extractOffset",value:function(){this.r.extractOffset(),this.g.extractOffset(),this.b.extractOffset(),this.a.extractOffset()}},{key:"stopAnimation",value:function(t){this.r.stopAnimation(),this.g.stopAnimation(),this.b.stopAnimation(),this.a.stopAnimation(),t&&t(this.__getValue())}},{key:"resetAnimation",value:function(t){this.r.resetAnimation(),this.g.resetAnimation(),this.b.resetAnimation(),this.a.resetAnimation(),t&&t(this.__getValue())}},{key:"__getValue",value:function(){return null!=this.nativeColor?this.nativeColor:`rgba(${this.r.__getValue()}, ${this.g.__getValue()}, ${this.b.__getValue()}, ${this.a.__getValue()})`}},{key:"__attach",value:function(){this.r.__addChild(this),this.g.__addChild(this),this.b.__addChild(this),this.a.__addChild(this),_(r,"__attach",this,3)([])}},{key:"__detach",value:function(){this.r.__removeChild(this),this.g.__removeChild(this),this.b.__removeChild(this),this.a.__removeChild(this),_(r,"__detach",this,3)([])}},{key:"_withSuspendedCallbacks",value:function(t){this._suspendCallbacks++,t(),this._suspendCallbacks--}},{key:"__callListeners",value:function(t){0===this._suspendCallbacks&&_(r,"__callListeners",this,3)([t])}},{key:"__makeNative",value:function(t){this.r.__makeNative(t),this.g.__makeNative(t),this.b.__makeNative(t),this.a.__makeNative(t),_(r,"__makeNative",this,3)([t])}},{key:"__getNativeConfig",value:function(){return{type:'color',r:this.r.__getNativeTag(),g:this.g.__getNativeTag(),b:this.b.__getNativeTag(),a:this.a.__getNativeTag(),nativeColor:this.nativeColor}}}])})(f.default)}),265,[8,17,18,3,2,98,56,165,260,266,272,167]); +__d((function(g,_r,i,a,m,_e,d){'use strict';Object.defineProperty(_e,"__esModule",{value:!0}),_e.default=void 0,_e.flushValue=v;var t=_r(d[0])(_r(d[1])),e=_r(d[0])(_r(d[2])),n=_r(d[0])(_r(d[3])),u=_r(d[0])(_r(d[4])),s=_r(d[0])(_r(d[5])),o=_r(d[0])(_r(d[6])),_=_r(d[0])(_r(d[7])),l=_r(d[0])(_r(d[8])),f=_r(d[0])(_r(d[9])),r=_r(d[0])(_r(d[10]));function h(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(t){}return(h=function(){return!!t})()}var c=l.default.API;function v(t){var e=new Set;!(function t(n){'function'==typeof n.update?e.add(n):n.__getChildren().forEach(t)})(t),e.forEach((function(t){return t.update()}))}_e.default=(function(l){function r(e,s){var o,_,l,f;if((0,t.default)(this,r),_=this,l=r,l=(0,u.default)(l),o=(0,n.default)(_,h()?Reflect.construct(l,f||[],(0,u.default)(_).constructor):l.apply(_,f)),'number'!=typeof e)throw new Error('AnimatedValue: Attempting to set value to undefined');return o._startingValue=o._value=e,o._offset=0,o._animation=null,s&&s.useNativeDriver&&o.__makeNative(),o}return(0,o.default)(r,l),(0,e.default)(r,[{key:"__detach",value:function(){var t,e,n,o,_,l=this;this.__isNative&&c.getValue(this.__getNativeTag(),(function(t){l._value=t-l._offset})),this.stopAnimation(),(t=r,e="__detach",n=this,o=3,_=(0,s.default)((0,u.default)(1&o?t.prototype:t),e,n),2&o&&"function"==typeof _?function(t){return _.apply(n,t)}:_)([])}},{key:"__getValue",value:function(){return this._value+this._offset}},{key:"setValue",value:function(t){var e,n,u=this;this._animation&&(this._animation.stop(),this._animation=null),this._updateValue(t,!this.__isNative),this.__isNative&&(e=this.__getNativeTag().toString(),n=function(){return c.setAnimatedNodeValue(u.__getNativeTag(),t)},c.setWaitingForIdentifier(e),n(),c.unsetWaitingForIdentifier(e))}},{key:"setOffset",value:function(t){this._offset=t,this.__isNative&&c.setAnimatedNodeOffset(this.__getNativeTag(),t)}},{key:"flattenOffset",value:function(){this._value+=this._offset,this._offset=0,this.__isNative&&c.flattenAnimatedNodeOffset(this.__getNativeTag())}},{key:"extractOffset",value:function(){this._offset+=this._value,this._value=0,this.__isNative&&c.extractAnimatedNodeOffset(this.__getNativeTag())}},{key:"stopAnimation",value:function(t){this.stopTracking(),this._animation&&this._animation.stop(),this._animation=null,t&&(this.__isNative?c.getValue(this.__getNativeTag(),t):t(this.__getValue()))}},{key:"resetAnimation",value:function(t){this.stopAnimation(t),this._value=this._startingValue,this.__isNative&&c.setAnimatedNodeValue(this.__getNativeTag(),this._startingValue)}},{key:"__onAnimatedValueUpdateReceived",value:function(t){this._updateValue(t,!1)}},{key:"interpolate",value:function(t){return new f.default(this,t)}},{key:"animate",value:function(t,e){var n=this,u=null;t.__isInteraction&&(u=_.default.createInteractionHandle());var s=this._animation;this._animation&&this._animation.stop(),this._animation=t,t.start(this._value,(function(t){n._updateValue(t,!0)}),(function(t){n._animation=null,null!==u&&_.default.clearInteractionHandle(u),e&&e(t)}),s,this)}},{key:"stopTracking",value:function(){this._tracking&&this._tracking.__detach(),this._tracking=null}},{key:"track",value:function(t){this.stopTracking(),this._tracking=t,this._tracking&&this._tracking.update()}},{key:"_updateValue",value:function(t,e){if(void 0===t)throw new Error('AnimatedValue: Attempting to set value to undefined');this._value=t,e&&v(this),this.__callListeners(this.__getValue())}},{key:"__getNativeConfig",value:function(){return{type:'value',value:this._value,offset:this._offset}}}])})(r.default)}),266,[8,17,18,3,2,98,56,267,260,269,272]); +__d((function(g,r,i,a,m,e,d){var n=new(r(d[0])(r(d[1])).default),t={Events:{interactionStart:'interactionStart',interactionComplete:'interactionComplete'},runAfterInteractions:function(n){var t=[],o=new Promise((function(o){p(),n&&t.push(n),t.push({run:o,name:'resolve '+(n&&n.name||'?')}),u.enqueueTasks(t)}));return{then:o.then.bind(o),cancel:function(){u.cancelTasks(t)}}},createInteractionHandle:function(){p();var n=++l;return c.add(n),n},clearInteractionHandle:function(n){r(d[2])(!!n,'InteractionManager: Must provide a handle to clear.'),p(),c.delete(n),s.add(n)},addListener:n.addListener.bind(n),setDeadline:function(n){v=n}},o=new Set,c=new Set,s=new Set,u=new(r(d[3]))({onMoreTasks:p}),f=0,l=0,v=-1;function p(){f||(f=v>0?setTimeout(h,0):setImmediate(h))}function h(){f=0;var l=o.size;c.forEach((function(n){return o.add(n)})),s.forEach((function(n){return o.delete(n)}));var h=o.size;if(0!==l&&0===h?n.emit(t.Events.interactionComplete):0===l&&0!==h&&n.emit(t.Events.interactionStart),0===h)for(;u.hasTasksToProcess();)if(u.processNext(),v>0&&r(d[4]).getEventLoopRunningTime()>=v){p();break}c.clear(),s.clear()}m.exports=t}),267,[8,10,24,268,30]); +__d((function(g,r,i,a,m,_e,d){'use strict';var e=r(d[1])((function e(t){var s=t.onMoreTasks;r(d[0])(this,e),this._onMoreTasks=s,this._queueStack=[{tasks:[],popable:!1}]}),[{key:"enqueue",value:function(e){this._getCurrentQueue().push(e)}},{key:"enqueueTasks",value:function(e){var t=this;e.forEach((function(e){return t.enqueue(e)}))}},{key:"cancelTasks",value:function(e){this._queueStack=this._queueStack.map((function(t){return Object.assign({},t,{tasks:t.tasks.filter((function(t){return-1===e.indexOf(t)}))})})).filter((function(e,t){return e.tasks.length>0||0===t}))}},{key:"hasTasksToProcess",value:function(){return this._getCurrentQueue().length>0}},{key:"processNext",value:function(){var e=this._getCurrentQueue();if(e.length){var t=e.shift();try{'object'==typeof t&&t.gen?this._genPromise(t):'object'==typeof t&&t.run?t.run():(r(d[2])('function'==typeof t,'Expected Function, SimpleTask, or PromiseTask, but got:\n'+JSON.stringify(t,null,2)),t())}catch(e){throw e.message='TaskQueue: Error with task '+(t.name||'')+': '+e.message,e}}}},{key:"_getCurrentQueue",value:function(){var e=this._queueStack.length-1,t=this._queueStack[e];return t.popable&&0===t.tasks.length&&this._queueStack.length>1?(this._queueStack.pop(),this._getCurrentQueue()):t.tasks}},{key:"_genPromise",value:function(e){var t=this;this._queueStack.push({tasks:[],popable:!1});var s=this._queueStack.length-1,u=this._queueStack[s];e.gen().then((function(){u.popable=!0,t.hasTasksToProcess()&&t._onMoreTasks()})).catch((function(t){setTimeout((function(){throw t.message=`TaskQueue: Error resolving Promise in task ${e.name}: ${t.message}`,t}),0)}))}}]);m.exports=e}),268,[17,18,24]); +__d((function(_g,_r,_i,_a,m,_e,d){'use strict';Object.defineProperty(_e,"__esModule",{value:!0}),_e.default=void 0;var t=_r(d[0])(_r(d[1])),e=_r(d[0])(_r(d[2])),n=_r(d[0])(_r(d[3])),a=_r(d[0])(_r(d[4])),o=_r(d[0])(_r(d[5])),r=_r(d[0])(_r(d[6])),u=_r(d[0])(_r(d[7])),i=_r(d[0])(_r(d[8])),l=_r(d[0])(_r(d[9])),f=_r(d[0])(_r(d[10])),p=_r(d[0])(_r(d[11])),c=_r(d[0])(_r(d[12]));function s(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(t){}return(s=function(){return!!t})()}function h(t,e,n,r){var u=(0,o.default)((0,a.default)(1&r?t.prototype:t),e,n);return 2&r&&"function"==typeof u?function(t){return u.apply(n,t)}:u}function g(t){var e=t.outputRange,n=t.inputRange,a=t.easing||l.default.linear,o='extend';void 0!==t.extrapolateLeft?o=t.extrapolateLeft:void 0!==t.extrapolate&&(o=t.extrapolate);var r='extend';return void 0!==t.extrapolateRight?r=t.extrapolateRight:void 0!==t.extrapolate&&(r=t.extrapolate),function(t){(0,c.default)('number'==typeof t,'Cannot interpolation an input which is not a number');var u=R(t,n);return _(t,n[u],n[u+1],e[u],e[u+1],a,o,r)}}function _(t,e,n,a,o,r,u,i){var l=t;if(ln){if('identity'===i)return l;'clamp'===i&&(l=n)}return a===o?a:e===n?t<=e?a:o:(e===-1/0?l=-l:n===1/0?l-=e:l=(l-e)/(n-e),l=r(l),a===-1/0?l=-l:o===1/0?l+=a:l=l*(o-a)+a,l)}var v=/[+-]?(?:\d+\.?\d*|\.\d+)(?:[eE][+-]?\d+)?/g;function y(t){var e=(0,u.default)(t);if((0,c.default)(null==e||'object'!=typeof e,'PlatformColors are not supported'),'number'==typeof e)return{isColor:!0,components:[(4278190080&(e=e||0))>>>24,(16711680&e)>>>16,(65280&e)>>>8,(255&e)/255]};for(var n,a=[],o=0;null!=(n=v.exec(t));)n.index>o&&a.push(t.substring(o,n.index)),a.push(parseFloat(n[0])),o=n.index+n[0].length;return(0,c.default)(a.length>0,'outputRange must contain color or value with numeric component'),o=2,'Bad output range');var e=t.outputRange.map(y),n=e[0].isColor,a=e.map((function(t){return n?t.components:t.components.filter((function(t){return'number'==typeof t}))})),o=a[0].map((function(e,n){return g(Object.assign({},t,{outputRange:a.map((function(t){return t[n]}))}))}));return n?function(t){var e=o.map((function(e,n){var a=e(t);return n<3?Math.round(a):Math.round(1e3*a)/1e3}));return`rgba(${e[0]}, ${e[1]}, ${e[2]}, ${e[3]})`}:function(t){var n=o.map((function(e){return e(t)})),a=0;return e[0].components.map((function(t){return'number'==typeof t?n[a++]:t})).join('')}}function R(t,e){var n;for(n=1;n=t);++n);return n-1}_e.default=(function(o){function u(e,o){var r,i,l,f;return(0,t.default)(this,u),i=this,l=u,l=(0,a.default)(l),(r=(0,n.default)(i,s()?Reflect.construct(l,f||[],(0,a.default)(i).constructor):l.apply(i,f)))._parent=e,r._config=o,r}return(0,r.default)(u,o),(0,e.default)(u,[{key:"_getInterpolation",value:function(){if(!this._interpolation){var t=this._config;t.outputRange&&'string'==typeof t.outputRange[0]?this._interpolation=x(t):this._interpolation=g(t)}return this._interpolation}},{key:"__makeNative",value:function(t){this._parent.__makeNative(t),h(u,"__makeNative",this,3)([t])}},{key:"__getValue",value:function(){var t=this._parent.__getValue();return(0,c.default)('number'==typeof t,'Cannot interpolate an input which is not a number.'),this._getInterpolation()(t)}},{key:"interpolate",value:function(t){return new u(this,t)}},{key:"__attach",value:function(){this._parent.__addChild(this)}},{key:"__detach",value:function(){this._parent.__removeChild(this),h(u,"__detach",this,3)([])}},{key:"__getNativeConfig",value:function(){var t=this._config.outputRange,e=null;return'string'==typeof t[0]&&(t=t.map((function(t){var n=(0,i.default)(t);return'number'==typeof n?(e='color',n):f.default.transformDataType(t)}))),{inputRange:this._config.inputRange,outputRange:t,outputType:e,extrapolateLeft:this._config.extrapolateLeft||this._config.extrapolate||'extend',extrapolateRight:this._config.extrapolateRight||this._config.extrapolate||'extend',type:'interpolation'}}}])})(p.default)}),269,[8,17,18,3,2,98,56,165,164,270,260,272,24]); +__d((function(g,r,i,a,m,e,d){'use strict';var n;Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var t={step0:function(n){return n>0?1:0},step1:function(n){return n>=1?1:0},linear:function(n){return n},ease:function(u){return n||(n=t.bezier(.42,0,1,1)),n(u)},quad:function(n){return n*n},cubic:function(n){return n*n*n},poly:function(n){return function(t){return Math.pow(t,n)}},sin:function(n){return 1-Math.cos(n*Math.PI/2)},circle:function(n){return 1-Math.sqrt(1-n*n)},exp:function(n){return Math.pow(2,10*(n-1))},elastic:function(){var n=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:1)*Math.PI;return function(t){return 1-Math.pow(Math.cos(t*Math.PI/2),3)*Math.cos(t*n)}},back:function(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1.70158;return function(t){return t*t*((n+1)*t-n)}},bounce:function(n){if(n<.36363636363636365)return 7.5625*n*n;if(n<.7272727272727273){var t=n-.5454545454545454;return 7.5625*t*t+.75}if(n<.9090909090909091){var u=n-.8181818181818182;return 7.5625*u*u+.9375}var o=n-.9545454545454546;return 7.5625*o*o+.984375},bezier:function(n,t,u,o){return(0,r(d[0]).default)(n,t,u,o)},in:function(n){return n},out:function(n){return function(t){return 1-n(1-t)}},inOut:function(n){return function(t){return t<.5?n(2*t)/2:1-n(2*(1-t))/2}}};e.default=t}),270,[271]); +__d((function(g,r,_i,a,m,e,d){'use strict';Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(n,u,o,v){if(!(n>=0&&n<=1&&o>=0&&o<=1))throw new Error('bezier x values must be in [0, 1] range');var l=c?new Float32Array(f):new Array(f);if(n!==u||o!==v)for(var s=0;s=t?_(u,v,n,o):0===s?v:b(u,f,f+i,n,o)}return function(t){return n===u&&o===v?t:0===t?0:1===t?1:w(h(t),u,v)}};var n=4,t=.001,u=1e-7,o=10,f=11,i=.1,c='function'==typeof Float32Array;function v(n,t){return 1-3*t+3*n}function l(n,t){return 3*t-6*n}function s(n){return 3*n}function w(n,t,u){return((v(t,u)*n+l(t,u))*n+s(t))*n}function y(n,t,u){return 3*v(t,u)*n*n+2*l(t,u)*n+s(t)}function b(n,t,f,i,c){var v,l,s=0,y=t,b=f;do{(v=w(l=y+(b-y)/2,i,c)-n)>0?b=l:y=l}while(Math.abs(v)>u&&++s18&&O<=44?p(O):M(O),A=.01,s(2*_-_*_,l,A));var _,l,A;var O,b;return{stiffness:n(w),damping:t(v)}},e.fromOrigamiTensionAndFriction=function(o,u){return{stiffness:n(o),damping:t(u)}}}),274,[]); +__d((function(g,_r,i,a,m,_e,d){'use strict';Object.defineProperty(_e,"__esModule",{value:!0}),_e.default=void 0;_r(d[0])(_r(d[1]));var t,e=_r(d[0])(_r(d[2])),n=_r(d[0])(_r(d[3])),o=_r(d[0])(_r(d[4])),u=_r(d[0])(_r(d[5])),r=_r(d[0])(_r(d[6])),s=_r(d[0])(_r(d[7])),_=_r(d[0])(_r(d[8])),l=(_r(d[0])(_r(d[9])),_r(d[0])(_r(d[10])));function f(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(t){}return(f=function(){return!!t})()}function h(){if(!t){var e=_r(d[11]).default;t=e.inOut(e.ease)}return t}_e.default=(function(t){function l(t){var n,r,s,c,v,p,y,V,U;return(0,e.default)(this,l),y=this,V=l,V=(0,u.default)(V),(p=(0,o.default)(y,f()?Reflect.construct(V,U||[],(0,u.default)(y).constructor):V.apply(y,U)))._toValue=t.toValue,p._easing=null!=(n=t.easing)?n:h(),p._duration=null!=(r=t.duration)?r:500,p._delay=null!=(s=t.delay)?s:0,p.__iterations=null!=(c=t.iterations)?c:1,p._useNativeDriver=_.default.shouldUseNativeDriver(t),p._platformConfig=t.platformConfig,p.__isInteraction=null!=(v=t.isInteraction)?v:!p._useNativeDriver,p}return(0,s.default)(l,t),(0,n.default)(l,[{key:"__getNativeAnimationConfig",value:function(){for(var t=[],e=Math.round(this._duration/16.666666666666668),n=0;n=this._startTime+this._duration)return 0===this._duration?this._onUpdate(this._toValue):this._onUpdate(this._fromValue+this._easing(1)*(this._toValue-this._fromValue)),void this.__debouncedOnEnd({finished:!0});this._onUpdate(this._fromValue+this._easing((t-this._startTime)/this._duration)*(this._toValue-this._fromValue)),this.__active&&(this._animationFrame=requestAnimationFrame(this.onUpdate.bind(this)))}},{key:"stop",value:function(){var t,e,n,o,s;(t=l,e="stop",n=this,o=3,s=(0,r.default)((0,u.default)(1&o?t.prototype:t),e,n),2&o&&"function"==typeof s?function(t){return s.apply(n,t)}:s)([]),this.__active=!1,clearTimeout(this._timeout),g.cancelAnimationFrame(this._animationFrame),this.__debouncedOnEnd({finished:!1})}}])})(l.default)}),275,[8,62,17,18,3,2,98,56,260,265,263,270]); +__d((function(g,_r,_i,a,m,_e,d){Object.defineProperty(_e,"__esModule",{value:!0}),_e.default=function(l){return u.forwardRef((function(u,o){var i=(0,n.default)(u),s=(0,t.default)(i,2),c=s[0],p=s[1],y=(0,r.default)(p,o),_=c.passthroughAnimatedPropExplicitValues,j=c.style,O=null!=_?_:{},b=O.style,v=(0,e.default)(O,f),w=Object.assign({},j,b);return(0,_r(d[7]).jsx)(l,Object.assign({},c,v,{style:w,ref:y}))}))};var e=_r(d[0])(_r(d[1])),t=_r(d[0])(_r(d[2])),r=(_r(d[0])(_r(d[3])),_r(d[0])(_r(d[4]))),n=_r(d[0])(_r(d[5])),u=(function(e,t){if("function"==typeof WeakMap)var r=new WeakMap,n=new WeakMap;return(function(e,t){if(!t&&e&&e.__esModule)return e;var u,f,l={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return l;if(u=t?n:r){if(u.has(e))return u.get(e);u.set(e,l)}for(var o in e)"default"!==o&&{}.hasOwnProperty.call(e,o)&&((f=(u=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,o))&&(f.get||f.set)?u(l,o,f):l[o]=e[o]);return l})(e,t)})(_r(d[6])),f=["style"]}),276,[8,119,26,156,277,278,153,193]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(){for(var t=arguments.length,o=new Array(t),u=0;u1&&void 0!==arguments[1]?arguments[1]:{}).iterations;return p},event:t.default.event,createAnimatedComponent:n.default,attachNativeEvent:r(d[8]).attachNativeEvent,forkEvent:t.default.forkEvent,unforkEvent:t.default.unforkEvent,Event:r(d[8]).AnimatedEvent}}),293,[8,258,276,265,269,273,266,284,283]); +__d((function(g,_r,_i,a,m,_e,d){Object.defineProperty(_e,"__esModule",{value:!0}),_e.default=void 0;var e=_r(d[0])(_r(d[1])),t=_r(d[0])(_r(d[2]));var r=(function(e,t){if("function"==typeof WeakMap)var r=new WeakMap,n=new WeakMap;return(function(e,t){if(!t&&e&&e.__esModule)return e;var f,o,u={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return u;if(f=t?n:r){if(f.has(e))return f.get(e);f.set(e,u)}for(var l in e)"default"!==l&&{}.hasOwnProperty.call(e,l)&&((o=(f=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,l))&&(o.get||o.set)?f(u,l,o):u[l]=e[l]);return u})(e,t)})(_r(d[3])).forwardRef((function(t,r){return(0,_r(d[4]).jsx)(e.default,Object.assign({scrollEventThrottle:1e-4},t,{ref:r}))}));_e.default=(0,t.default)(r)}),294,[8,295,276,153,193]); +__d((function(g,r,i,a,m,_e,d){var e=r(d[0])(r(d[1])),t=r(d[0])(r(d[2])),n=r(d[0])(r(d[3])),o=r(d[0])(r(d[4])),s=r(d[0])(r(d[5])),l=r(d[0])(r(d[6])),u=r(d[0])(r(d[7])),c=["numColumns","columnWrapperStyle","removeClippedSubviews","strictMode"];function f(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(f=function(){return!!e})()}var p=r(d[8]);function h(e){return null!=e?e:1}function v(e){return'number'==typeof Object(e).length}var C=(function(C){function b(e){var n,l,c,C;return(0,t.default)(this,b),l=this,c=b,C=[e],c=(0,s.default)(c),(n=(0,o.default)(l,f()?Reflect.construct(c,C||[],(0,s.default)(l).constructor):c.apply(l,C)))._virtualizedListPairs=[],n._captureRef=function(e){n._listRef=e},n._getItem=function(e,t){var o=h(n.props.numColumns);if(o>1){for(var s=[],l=0;l1?Math.ceil(e.length/t):e.length}return 0},n._keyExtractor=function(e,t){var o,s=h(n.props.numColumns),l=null!=(o=n.props.keyExtractor)?o:r(d[9]).keyExtractor;return s>1?(r(d[10])(Array.isArray(e),"FlatList: Encountered internal consistency error, expected each item to consist of an array with 1-%s columns; instead, received a single item.",s),e.map((function(e,n){return l(e,t*s+n)})).join(':')):l(e,t)},n._renderer=function(e,t,n,o,s){var l=h(o),u=function(n){return e?(0,r(d[11]).jsx)(e,Object.assign({},n)):t?t(n):null},c=function(e){if(l>1){var t=e.item,o=e.index;return r(d[10])(Array.isArray(t),'Expected array of items with numColumns > 1'),(0,r(d[11]).jsx)(r(d[12]),{style:r(d[13]).compose(y.row,n),children:t.map((function(t,n){var s=u({item:t,index:o*l+n,separators:e.separators});return null!=s?(0,r(d[11]).jsx)(p.Fragment,{children:s},n):null}))})}return u(e)};return e?{ListItemComponent:c}:{renderItem:c}},n._memoizedRenderer=(0,u.default)(n._renderer),n._checkProps(n.props),n.props.viewabilityConfigCallbackPairs?n._virtualizedListPairs=n.props.viewabilityConfigCallbackPairs.map((function(e){return{viewabilityConfig:e.viewabilityConfig,onViewableItemsChanged:n._createOnViewableItemsChanged(e.onViewableItemsChanged)}})):n.props.onViewableItemsChanged&&n._virtualizedListPairs.push({viewabilityConfig:n.props.viewabilityConfig,onViewableItemsChanged:n._createOnViewableItemsChanged(n.props.onViewableItemsChanged)}),n}return(0,l.default)(b,C),(0,n.default)(b,[{key:"scrollToEnd",value:function(e){this._listRef&&this._listRef.scrollToEnd(e)}},{key:"scrollToIndex",value:function(e){this._listRef&&this._listRef.scrollToIndex(e)}},{key:"scrollToItem",value:function(e){this._listRef&&this._listRef.scrollToItem(e)}},{key:"scrollToOffset",value:function(e){this._listRef&&this._listRef.scrollToOffset(e)}},{key:"recordInteraction",value:function(){this._listRef&&this._listRef.recordInteraction()}},{key:"flashScrollIndicators",value:function(){this._listRef&&this._listRef.flashScrollIndicators()}},{key:"getScrollResponder",value:function(){if(this._listRef)return this._listRef.getScrollResponder()}},{key:"getNativeScrollRef",value:function(){if(this._listRef)return this._listRef.getScrollRef()}},{key:"getScrollableNode",value:function(){if(this._listRef)return this._listRef.getScrollableNode()}},{key:"setNativeProps",value:function(e){this._listRef&&this._listRef.setNativeProps(e)}},{key:"componentDidUpdate",value:function(e){r(d[10])(e.numColumns===this.props.numColumns,"Changing numColumns on the fly is not supported. Change the key prop on FlatList when changing the number of columns to force a fresh render of the component."),r(d[10])(e.onViewableItemsChanged===this.props.onViewableItemsChanged,'Changing onViewableItemsChanged on the fly is not supported'),r(d[10])(!r(d[14])(e.viewabilityConfig,this.props.viewabilityConfig),'Changing viewabilityConfig on the fly is not supported'),r(d[10])(e.viewabilityConfigCallbackPairs===this.props.viewabilityConfigCallbackPairs,'Changing viewabilityConfigCallbackPairs on the fly is not supported'),this._checkProps(this.props)}},{key:"_checkProps",value:function(e){var t=e.getItem,n=e.getItemCount,o=e.horizontal,s=e.columnWrapperStyle,l=e.onViewableItemsChanged,u=e.viewabilityConfigCallbackPairs,c=h(this.props.numColumns);r(d[10])(!t&&!n,'FlatList does not support custom data formats.'),c>1?r(d[10])(!o,'numColumns does not support horizontal.'):r(d[10])(!s,'columnWrapperStyle not supported for single column lists'),r(d[10])(!(l&&u),"FlatList does not support setting both onViewableItemsChanged and viewabilityConfigCallbackPairs.")}},{key:"_pushMultiColumnViewable",value:function(e,t){var n,o=h(this.props.numColumns),s=null!=(n=this.props.keyExtractor)?n:r(d[9]).keyExtractor;t.item.forEach((function(n,l){r(d[10])(null!=t.index,'Missing index!');var u=t.index*o+l;e.push(Object.assign({},t,{item:n,key:s(n,u),index:u}))}))}},{key:"_createOnViewableItemsChanged",value:function(e){var t=this;return function(n){var o=h(t.props.numColumns);if(e)if(o>1){var s=[],l=[];n.viewableItems.forEach((function(e){return t._pushMultiColumnViewable(l,e)})),n.changed.forEach((function(e){return t._pushMultiColumnViewable(s,e)})),e({viewableItems:l,changed:s})}else e(n)}}},{key:"render",value:function(){var t,n=this.props,o=n.numColumns,s=n.columnWrapperStyle,l=n.removeClippedSubviews,u=n.strictMode,f=void 0!==u&&u,p=(0,e.default)(n,c),h=f?this._memoizedRenderer:this._renderer;return(0,r(d[11]).jsx)(r(d[9]).VirtualizedList,Object.assign({},p,{getItem:this._getItem,getItemCount:this._getItemCount,keyExtractor:this._keyExtractor,ref:this._captureRef,viewabilityConfigCallbackPairs:this._virtualizedListPairs,removeClippedSubviews:(t=l,null==t||t)},h(this.props.ListItemComponent,this.props.renderItem,s,o,this.props.extraData)))}}])})(p.PureComponent),y=r(d[13]).create({row:{flexDirection:'row'}});m.exports=C}),295,[8,119,17,18,3,2,56,296,153,297,24,193,156,196,206]); +__d((function(g,r,_i2,a,m,e,d){'use strict';var t=Number.isNaN||function(t){return'number'==typeof t&&t!=t};function n(n,u){if(n.length!==u.length)return!1;for(var i=0;i1?'after':b<-1?'before':'none',_=Math.max(0,k-.5*C),j=Math.max(0,p+.5*C);if(v(h-1,l).offset*w<_)return{first:Math.max(0,h-1-o),last:h-1};var L=n([_,k,p,j],l,v,w),S=(0,t.default)(L,4),E=S[0],I=S[1],R=S[2],z=S[3];E=null==E?0:E,I=null==I?Math.max(0,E):I,z=null==z?h-1:z,R=null==R?Math.min(z,I+o-1):R;var B={first:I,last:R},F=f(u,B);for(;!(I<=E&&R>=z);){var J=F>=o,N=I<=u.first||I>u.last,P=I>E&&(!J||!N),T=R>=u.last||R=I&&I>=0&&R=E&&R<=z&&I<=B.first&&R>=B.last))throw new Error('Bad window calculation '+JSON.stringify({first:I,last:R,itemCount:h,overscanFirst:E,overscanLast:z,visible:B}));return{first:I,last:R}},e.elementsThatOverlapOffsets=n,e.keyExtractor=function(t,n){if('object'==typeof t&&null!=(null==t?void 0:t.key))return t.key;if('object'==typeof t&&null!=(null==t?void 0:t.id))return t.id;return String(n)},e.newRangeCount=f;var t=r(d[0])(r(d[1]));function n(t,n,f){for(var l=arguments.length>3&&void 0!==arguments[3]?arguments[3]:1,o=n.getItemCount(n.data),s=[],u=0;u>>1),b=f(M,n),x=b.offset*l,y=(b.offset+b.length)*l;if(0===M&&vy)){s[u]=M;break}c=M+1}}return s}function f(t,n){return n.last-n.first+1-Math.max(0,1+Math.min(n.last,t.last)-Math.max(n.first,t.first))}}),298,[8,26]); +__d((function(g,_r,_i2,a,m,_e,d){var e=_r(d[0])(_r(d[1])),t=_r(d[0])(_r(d[2])),n=_r(d[0])(_r(d[3])),r=_r(d[0])(_r(d[4])),o=_r(d[0])(_r(d[5])),i=_r(d[0])(_r(d[6])),s=_r(d[0])(_r(d[7])),l=_r(d[8]),c=_r(d[0])(_r(d[9])),u=_r(d[0])(_r(d[10])),h=_r(d[0])(_r(d[11])),f=_r(d[0])(_r(d[12])),p=_r(d[0])(_r(d[13])),_=_r(d[0])(_r(d[14])),v=_r(d[0])(_r(d[15])),y=_r(d[0])(_r(d[16])),C=_r(d[0])(_r(d[17])),L=_r(d[0])(_r(d[18])),S=(function(e,t){if("function"==typeof WeakMap)var n=new WeakMap,r=new WeakMap;return(function(e,t){if(!t&&e&&e.__esModule)return e;var o,i,s={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return s;if(o=t?r:n){if(o.has(e))return o.get(e);o.set(e,s)}for(var l in e)"default"!==l&&{}.hasOwnProperty.call(e,l)&&((i=(o=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,l))&&(i.get||i.set)?o(s,l,i):s[l]=e[l]);return s})(e,t)})(_r(d[19]));function b(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(b=function(){return!!e})()}var I=!1,x='';function M(e){return null!=e&&e}function w(e){return null!=e?e:10}function R(e){return null!=e?e:2}function k(e){return null!=e?e:2}function V(e,t){return e*t/2}function T(e){return null!=e?e:21}function F(e,t){for(var n=e.length-1;n>=0;n--)if(t(e[n]))return e[n];return null}var E=(function(_){function E(e){var t,r,s,u,_,y,S;if((0,n.default)(this,E),_=this,y=E,S=[e],y=(0,i.default)(y),(u=(0,o.default)(_,b()?Reflect.construct(y,S||[],(0,i.default)(_).constructor):y.apply(_,S)))._getScrollMetrics=function(){return u._scrollMetrics},u._getOutermostParentListRef=function(){return u._isNestedWithSameOrientation()?u.context.getOutermostParentListRef():u},u._registerAsNestedChild=function(e){u._nestedChildLists.add(e.ref,e.cellKey),u._hasInteracted&&e.ref.recordInteraction()},u._unregisterAsNestedChild=function(e){u._nestedChildLists.remove(e.ref)},u._onUpdateSeparators=function(e,t){e.forEach((function(e){var n=null!=e&&u._cellRefs[e];n&&n.updateSeparatorProps(t)}))},u._getSpacerKey=function(e){return e?'height':'width'},u._averageCellLength=0,u._cellRefs={},u._frames={},u._footerLength=0,u._hasTriggeredInitialScrollToIndex=!1,u._hasInteracted=!1,u._hasMore=!1,u._hasWarned={},u._headerLength=0,u._hiPriInProgress=!1,u._highestMeasuredFrameIndex=0,u._indicesToKeys=new Map,u._lastFocusedCellKey=null,u._nestedChildLists=new f.default,u._offsetFromParentVirtualizedList=0,u._prevParentOffset=0,u._scrollMetrics={contentLength:0,dOffset:0,dt:10,offset:0,timestamp:0,velocity:0,visibleLength:0,zoomScale:1},u._scrollRef=null,u._sentStartForContentLength=0,u._sentEndForContentLength=0,u._totalCellLength=0,u._totalCellsMeasured=0,u._viewabilityTuples=[],u._captureScrollRef=function(e){u._scrollRef=e},u._defaultRenderScrollComponent=function(e){var t,n=e.onRefresh;return u._isNestedWithSameOrientation()?(0,_r(d[20]).jsx)(l.View,Object.assign({},e)):n?((0,C.default)('boolean'==typeof e.refreshing,'`refreshing` prop must be set as a boolean in order to use `onRefresh`, but got `'+JSON.stringify(null!=(t=e.refreshing)?t:'undefined')+'`'),(0,_r(d[20]).jsx)(l.ScrollView,Object.assign({},e,{refreshControl:null==e.refreshControl?(0,_r(d[20]).jsx)(l.RefreshControl,{refreshing:e.refreshing,onRefresh:n,progressViewOffset:e.progressViewOffset}):e.refreshControl}))):(0,_r(d[20]).jsx)(l.ScrollView,Object.assign({},e))},u._onCellLayout=function(e,t,n){var r=e.nativeEvent.layout,o={offset:u._selectOffset(r),length:u._selectLength(r),index:n,inLayout:!0},i=u._frames[t];i&&o.offset===i.offset&&o.length===i.length&&n===i.index?u._frames[t].inLayout=!0:(u._totalCellLength+=o.length-(i?i.length:0),u._totalCellsMeasured+=i?0:1,u._averageCellLength=u._totalCellLength/u._totalCellsMeasured,u._frames[t]=o,u._highestMeasuredFrameIndex=Math.max(u._highestMeasuredFrameIndex,n),u._scheduleCellsToRenderUpdate()),u._triggerRemeasureForChildListsInCell(t),u._computeBlankness(),u._updateViewableItems(u.props,u.state.cellsAroundViewport)},u._onCellUnmount=function(e){delete u._cellRefs[e];var t=u._frames[e];t&&(u._frames[e]=Object.assign({},t,{inLayout:!1}))},u._onLayout=function(e){u._isNestedWithSameOrientation()?u.measureLayoutRelativeToContainingList():u._scrollMetrics.visibleLength=u._selectLength(e.nativeEvent.layout),u.props.onLayout&&u.props.onLayout(e),u._scheduleCellsToRenderUpdate(),u._maybeCallOnEdgeReached()},u._onLayoutEmpty=function(e){u.props.onLayout&&u.props.onLayout(e)},u._onLayoutFooter=function(e){u._triggerRemeasureForChildListsInCell(u._getFooterCellKey()),u._footerLength=u._selectLength(e.nativeEvent.layout)},u._onLayoutHeader=function(e){u._headerLength=u._selectLength(e.nativeEvent.layout)},u._onContentSizeChange=function(e,t){e>0&&t>0&&null!=u.props.initialScrollIndex&&u.props.initialScrollIndex>0&&!u._hasTriggeredInitialScrollToIndex&&(null==u.props.contentOffset&&(u.props.initialScrollIndex500&&u._scrollMetrics.dt>500&&r>5*n&&!u._hasWarned.perf&&((0,h.default)("VirtualizedList: You have a large list that is slow to update - make sure your renderItem function renders components that follow React performance best practices like PureComponent, shouldComponentUpdate, etc.",{dt:l,prevDt:u._scrollMetrics.dt,contentLength:r}),u._hasWarned.perf=!0);var f=e.nativeEvent.zoomScale<0?1:e.nativeEvent.zoomScale;u._scrollMetrics={contentLength:r,dt:l,dOffset:i,offset:o,timestamp:t,velocity:c,visibleLength:n,zoomScale:f},u.state.pendingScrollUpdateCount>0&&u.setState((function(e){return{pendingScrollUpdateCount:e.pendingScrollUpdateCount-1}})),u._updateViewableItems(u.props,u.state.cellsAroundViewport),u.props&&(u._maybeCallOnEdgeReached(),0!==c&&u._fillRateHelper.activate(),u._computeBlankness(),u._scheduleCellsToRenderUpdate())},u._onScrollBeginDrag=function(e){u._nestedChildLists.forEach((function(t){t._onScrollBeginDrag(e)})),u._viewabilityTuples.forEach((function(e){e.viewabilityHelper.recordInteraction()})),u._hasInteracted=!0,u.props.onScrollBeginDrag&&u.props.onScrollBeginDrag(e)},u._onScrollEndDrag=function(e){u._nestedChildLists.forEach((function(t){t._onScrollEndDrag(e)}));var t=e.nativeEvent.velocity;t&&(u._scrollMetrics.velocity=u._selectOffset(t)),u._computeBlankness(),u.props.onScrollEndDrag&&u.props.onScrollEndDrag(e)},u._onMomentumScrollBegin=function(e){u._nestedChildLists.forEach((function(t){t._onMomentumScrollBegin(e)})),u.props.onMomentumScrollBegin&&u.props.onMomentumScrollBegin(e)},u._onMomentumScrollEnd=function(e){u._nestedChildLists.forEach((function(t){t._onMomentumScrollEnd(e)})),u._scrollMetrics.velocity=0,u._computeBlankness(),u.props.onMomentumScrollEnd&&u.props.onMomentumScrollEnd(e)},u._updateCellsToRender=function(){u._updateViewableItems(u.props,u.state.cellsAroundViewport),u.setState((function(e,t){var n=u._adjustCellsAroundViewport(t,e.cellsAroundViewport,e.pendingScrollUpdateCount),r=E._createRenderMask(t,n,u._getNonViewportRenderRegions(t));return n.first===e.cellsAroundViewport.first&&n.last===e.cellsAroundViewport.last&&r.equals(e.renderMask)?null:{cellsAroundViewport:n,renderMask:r}}))},u._createViewToken=function(e,t,n){var r=n.data,o=(0,n.getItem)(r,e);return{index:e,item:o,key:E._keyExtractor(o,e,n),isViewable:t}},u._getOffsetApprox=function(e,t){if(Number.isInteger(e))return u.__getFrameMetricsApprox(e,t).offset;var n=u.__getFrameMetricsApprox(Math.floor(e),t),r=e-Math.floor(e);return n.offset+r*n.length},u.__getFrameMetricsApprox=function(e,t){var n=u._getFrameMetrics(e,t);if(n&&n.index===e)return n;var r=t.data,o=t.getItemCount,i=t.getItemLayout;return(0,C.default)(e>=0&&e=0&&e=n||E._getItemKey(e,t)!==u._lastFocusedCellKey)return[];for(var r=t,o=0,i=r-1;i>=0&&oR?E._getItemKey(u.props,R):null,pendingScrollUpdateCount:null!=u.props.initialScrollIndex&&u.props.initialScrollIndex>0?1:0},u}return(0,s.default)(E,_),(0,r.default)(E,[{key:"scrollToEnd",value:function(e){var t=!e||e.animated,n=this.props.getItemCount(this.props.data)-1;if(!(n<0)){var r=this.__getFrameMetricsApprox(n,this.props),o=Math.max(0,r.offset+r.length+this._footerLength-this._scrollMetrics.visibleLength);null!=this._scrollRef&&(null!=this._scrollRef.scrollTo?this._scrollRef.scrollTo(M(this.props.horizontal)?{x:o,animated:t}:{y:o,animated:t}):console.warn("No scrollTo method provided. This may be because you have two nested VirtualizedLists with the same orientation, or because you are using a custom component that does not implement scrollTo."))}}},{key:"scrollToIndex",value:function(e){var t=this.props,n=t.data,r=t.horizontal,o=t.getItemCount,i=t.getItemLayout,s=t.onScrollToIndexFailed,l=e.animated,c=e.index,u=e.viewOffset,h=e.viewPosition;if((0,C.default)(c>=0,`scrollToIndex out of range: requested index ${c} but minimum is 0`),(0,C.default)(o(n)>=1,`scrollToIndex out of range: item length ${o(n)} but minimum is 1`),(0,C.default)(cthis._highestMeasuredFrameIndex)return(0,C.default)(!!s,"scrollToIndex should be used in conjunction with getItemLayout or onScrollToIndexFailed, otherwise there is no way to know the location of offscreen indices or handle failures."),void s({averageItemLength:this._averageCellLength,highestMeasuredFrameIndex:this._highestMeasuredFrameIndex,index:c});var f=this.__getFrameMetricsApprox(Math.floor(c),this.props),p=Math.max(0,this._getOffsetApprox(c,this.props)-(h||0)*(this._scrollMetrics.visibleLength-f.length))-(u||0);null!=this._scrollRef&&(null!=this._scrollRef.scrollTo?this._scrollRef.scrollTo(r?{x:p,animated:l}:{y:p,animated:l}):console.warn("No scrollTo method provided. This may be because you have two nested VirtualizedLists with the same orientation, or because you are using a custom component that does not implement scrollTo."))}},{key:"scrollToItem",value:function(e){for(var t=e.item,n=this.props,r=n.data,o=n.getItem,i=(0,n.getItemCount)(r),s=0;s0,'VirtualizedList: The windowSize prop must be present and set to a value greater than 0.'),(0,C.default)(r,'VirtualizedList: The "getItemCount" prop must be provided');var s=r(o);null==i||this._hasTriggeredInitialScrollToIndex||!(i<0||s>0&&i>=s)||this._hasWarned.initialScrollIndex||(console.warn(`initialScrollIndex "${i}" is not valid (list has ${s} items)`),this._hasWarned.initialScrollIndex=!0)}},{key:"_adjustCellsAroundViewport",value:function(e,t,n){var r,o=e.data,i=e.getItemCount,s=k(e.onEndReachedThreshold),l=this._scrollMetrics,c=l.contentLength,u=l.offset,h=l.visibleLength,f=c-h-u;if(h<=0||c<=0)return t.last>=i(o)?E._constrainToItemCount(t,e):t;if(e.disableVirtualization){var p=f0)return t.last>=i(o)?E._constrainToItemCount(t,e):t;r=(0,_r(d[21]).computeWindowedRenderLimits)(e,w(e.maxToRenderPerBatch),T(e.windowSize),t,this.__getFrameMetricsApprox,this._scrollMetrics),(0,C.default)(r.last0){var _=this._findFirstChildWithMore(r.first,r.last);r.last=null!=_?_:r.last}return r}},{key:"_findFirstChildWithMore",value:function(e,t){for(var n=e;n<=t;n++){var r=this._indicesToKeys.get(n);if(null!=r&&this._nestedChildLists.anyInCell(r,(function(e){return e.hasMore()})))return n}return null}},{key:"componentDidMount",value:function(){this._isNestedWithSameOrientation()&&this.context.registerAsNestedChild({ref:this,cellKey:this.context.cellKey})}},{key:"componentWillUnmount",value:function(){this._isNestedWithSameOrientation()&&this.context.unregisterAsNestedChild({ref:this}),this._updateCellsToRenderBatcher.dispose({abort:!0}),this._viewabilityTuples.forEach((function(e){e.viewabilityHelper.dispose()})),this._fillRateHelper.deactivateAndFlush()}},{key:"_pushCells",value:function(e,t,n,r,o,i){var s,l=this,c=this.props,u=c.CellRendererComponent,h=c.ItemSeparatorComponent,f=c.ListHeaderComponent,p=c.ListItemComponent,_=c.data,v=c.debug,C=c.getItem,L=c.getItemCount,S=c.getItemLayout,b=c.horizontal,I=c.renderItem,x=f?1:0,M=L(_)-1;o=Math.min(M,o);for(var w=function(){var r=C(_,R),o=E._keyExtractor(r,R,l.props);l._indicesToKeys.set(R,o),n.has(R+x)&&t.push(e.length);var c=null==S||v||l._fillRateHelper.enabled();e.push((0,_r(d[20]).jsx)(y.default,Object.assign({CellRendererComponent:u,ItemSeparatorComponent:R0){I=!1,x='';var b=this._getSpacerKey(!h),w=this.state.renderMask.enumerateRegions(),R=F(w,(function(e){return e.isSpacer}));for(var k of w)if(k.isSpacer){if(this.props.disableVirtualization)continue;var V=k===R&&!this.props.getItemLayout?(0,u.default)(k.first-1,k.last,this._highestMeasuredFrameIndex):k.last,T=this.__getFrameMetricsApprox(k.first,this.props),E=this.__getFrameMetricsApprox(V,this.props),P=E.offset+E.length-T.offset;p.push((0,_r(d[20]).jsx)(l.View,{style:(0,t.default)({},b,P)},`$spacer-${k.first}`))}else this._pushCells(p,v,_,k.first,k.last,f);!this._hasWarned.keys&&I&&(console.warn("VirtualizedList: missing keys for items, make sure to specify a key or id property on each item or provide a custom keyExtractor.",x),this._hasWarned.keys=!0)}if(o){var z=S.isValidElement(o)?o:(0,_r(d[20]).jsx)(o,{});p.push((0,_r(d[20]).jsx)(_r(d[22]).VirtualizedListCellContextProvider,{cellKey:this._getFooterCellKey(),children:(0,_r(d[20]).jsx)(l.View,{onLayout:this._onLayoutFooter,style:l.StyleSheet.compose(f,this.props.ListFooterComponentStyle),children:z})},"$footer"))}var A,K=Object.assign({},this.props,{onContentSizeChange:this._onContentSizeChange,onLayout:this._onLayout,onScroll:this._onScroll,onScrollBeginDrag:this._onScrollBeginDrag,onScrollEndDrag:this._onScrollEndDrag,onMomentumScrollBegin:this._onMomentumScrollBegin,onMomentumScrollEnd:this._onMomentumScrollEnd,scrollEventThrottle:(A=this.props.scrollEventThrottle,null!=A?A:50),invertStickyHeaders:void 0!==this.props.invertStickyHeaders?this.props.invertStickyHeaders:this.props.inverted,stickyHeaderIndices:v,style:f?[f,this.props.style]:this.props.style,maintainVisibleContentPosition:null!=this.props.maintainVisibleContentPosition?Object.assign({},this.props.maintainVisibleContentPosition,{minIndexForVisible:this.props.maintainVisibleContentPosition.minIndexForVisible+(this.props.ListHeaderComponent?1:0)}):void 0});this._hasMore=this.state.cellsAroundViewport.last0)){var l=this._scrollMetrics,c=l.contentLength,u=l.visibleLength,h=l.offset,f=h,p=c-u-h;f<.001&&(f=0),p<.001&&(p=0);var _=f<=(null!=o?o*u:2),v=p<=(null!=s?s*u:2);i&&this.state.cellsAroundViewport.last===n(t)-1&&v&&this._scrollMetrics.contentLength!==this._sentEndForContentLength?(this._sentEndForContentLength=this._scrollMetrics.contentLength,i({distanceFromEnd:p})):null!=r&&0===this.state.cellsAroundViewport.first&&_&&this._scrollMetrics.contentLength!==this._sentStartForContentLength?(this._sentStartForContentLength=this._scrollMetrics.contentLength,r({distanceFromStart:f})):(this._sentStartForContentLength=_?this._sentStartForContentLength:0,this._sentEndForContentLength=v?this._sentEndForContentLength:0)}}},{key:"_scheduleCellsToRenderUpdate",value:function(){var e=this.state.cellsAroundViewport,t=e.first,n=e.last,r=this._scrollMetrics,o=r.offset,i=r.visibleLength,s=r.velocity,l=this.props.getItemCount(this.props.data),c=!1,u=R(this.props.onStartReachedThreshold),h=k(this.props.onEndReachedThreshold);if(t>0){var f=o-this.__getFrameMetricsApprox(t,this.props).offset;c=f<0||s<-2&&f=0&&n2&&p0||this._viewabilityTuples.forEach((function(r){r.viewabilityHelper.onUpdate(e,n._scrollMetrics.offset,n._scrollMetrics.visibleLength,n._getFrameMetrics,n._createViewToken,r.onViewableItemsChanged,t)}))}}],[{key:"_findItemIndexWithKey",value:function(e,t,n){var r=e.getItemCount(e.data);if(null!=n&&n>=0&&n=0&&n.last>=n.first-1&&n.last0){var s=[n].concat((0,e.default)(null!=r?r:[]));for(var l of s)i.addCells(l);if(null==t.initialScrollIndex||t.initialScrollIndex<=0){var c=E._initialRenderRegion(t);i.addCells(c)}var u=new Set(t.stickyHeaderIndices);E._ensureClosestStickyHeader(t,u,i,n.first)}return i}},{key:"_initialRenderRegion",value:function(e){var t,n,r=e.getItemCount(e.data),o=Math.max(0,Math.min(r-1,Math.floor(null!=(t=e.initialScrollIndex)?t:0)));return{first:o,last:Math.min(r,o+(null!=(n=e.initialNumToRender)?n:10))-1}}},{key:"_ensureClosestStickyHeader",value:function(e,t,n,r){for(var o=e.ListHeaderComponent?1:0,i=r-1;i>=0;i--)if(t.has(i+o)){n.addCells({first:i,last:i});break}}},{key:"getDerivedStateFromProps",value:function(e,t){var n,r,o=e.getItemCount(e.data);if(o===t.renderMask.numCells())return t;var i=null,s=t.firstVisibleItemKey,l=null!=(n=null==(r=e.maintainVisibleContentPosition)?void 0:r.minIndexForVisible)?n:0,c=e.getItemCount(e.data)>l?E._getItemKey(e,l):null;if(null!=e.maintainVisibleContentPosition&&null!=s&&null!=c)if(c!==s){var u=o-t.renderMask.numCells()+l,h=E._findItemIndexWithKey(e,s,u);i=null!=h?h-l:null}else i=null;var f=E._constrainToItemCount(null!=i?{first:t.cellsAroundViewport.first+i,last:t.cellsAroundViewport.last+i}:t.cellsAroundViewport,e);return{cellsAroundViewport:f,renderMask:E._createRenderMask(e,f),firstVisibleItemKey:c,pendingScrollUpdateCount:null!=i?t.pendingScrollUpdateCount+1:t.pendingScrollUpdateCount}}},{key:"_constrainToItemCount",value:function(e,t){var n=t.getItemCount(t.data),r=Math.min(n-1,e.last),o=w(t.maxToRenderPerBatch);return{first:(0,u.default)(0,n-1-o,e.first),last:r}}},{key:"_keyExtractor",value:function(e,t,n){if(null!=n.keyExtractor)return n.keyExtractor(e,t);var r=(0,_r(d[21]).keyExtractor)(e,t);return r===String(t)&&(I=!0,e.type&&e.type.displayName&&(x=e.type.displayName)),r}}])})(_.default);E.contextType=_r(d[22]).VirtualizedListContext;var O=l.StyleSheet.create({verticallyInverted:{transform:[{scaleY:-1}]},horizontallyInverted:{transform:[{scaleX:-1}]},debug:{flex:1},debugOverlayBase:{position:'absolute',top:0,right:0},debugOverlay:{bottom:0,width:20,borderColor:'blue',borderWidth:1},debugOverlayFrame:{left:0,backgroundColor:'orange'},debugOverlayFrameLast:{left:0,borderColor:'green',borderWidth:2},debugOverlayFrameVis:{left:0,borderColor:'red',borderWidth:2}});m.exports=E}),299,[8,11,170,17,18,3,2,56,6,300,301,302,303,304,305,306,307,24,38,153,193,298,308,309]); +__d((function(g,r,i,a,m,e,d){'use strict';var t=r(d[0]).InteractionManager,n=r(d[2])((function t(n,l){r(d[1])(this,t),this._delay=l,this._callback=n}),[{key:"dispose",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{abort:!1};this._taskHandle&&(this._taskHandle.cancel(),t.abort||this._callback(),this._taskHandle=null)}},{key:"schedule",value:function(){var n=this;if(!this._taskHandle){var l=setTimeout((function(){n._taskHandle=t.runAfterInteractions((function(){n._taskHandle=null,n._callback()}))}),this._delay);this._taskHandle={cancel:function(){return clearTimeout(l)}}}}}]);m.exports=n}),300,[6,17,18]); +__d((function(g,r,i,a,m,e,d){'use strict';m.exports=function(t,n,u){return nu?u:n}}),301,[]); +__d((function(g,r,i,a,m,e,d){'use strict';m.exports=function(){var n;return(n=console).log.apply(n,arguments)}}),302,[]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var l=r(d[0])(r(d[1])),n=r(d[0])(r(d[2])),t=r(d[0])(r(d[3]));e.default=(0,n.default)((function n(){(0,l.default)(this,n),this._cellKeyToChildren=new Map,this._childrenToCellKey=new Map}),[{key:"add",value:function(l,n){var o;(0,t.default)(!this._childrenToCellKey.has(l),'Trying to add already present child list');var h=null!=(o=this._cellKeyToChildren.get(n))?o:new Set;h.add(l),this._cellKeyToChildren.set(n,h),this._childrenToCellKey.set(l,n)}},{key:"remove",value:function(l){var n=this._childrenToCellKey.get(l);(0,t.default)(null!=n,'Trying to remove non-present child list'),this._childrenToCellKey.delete(l);var o=this._cellKeyToChildren.get(n);(0,t.default)(o,'_cellKeyToChildren should contain cellKey'),o.delete(l),0===o.size&&this._cellKeyToChildren.delete(n)}},{key:"forEach",value:function(l){for(var n of this._cellKeyToChildren.values())for(var t of n)l(t)}},{key:"forEachInCell",value:function(l,n){var t,o=null!=(t=this._cellKeyToChildren.get(l))?t:[];for(var h of o)n(h)}},{key:"anyInCell",value:function(l,n){var t,o=null!=(t=this._cellKeyToChildren.get(l))?t:[];for(var h of o)if(n(h))return!0;return!1}},{key:"size",value:function(){return this._childrenToCellKey.size}}])}),303,[8,17,18,24]); +__d((function(g,r,i,a,m,e,d){'use strict';var t=r(d[0])((function t(){r(d[1])(this,t),this.any_blank_count=0,this.any_blank_ms=0,this.any_blank_speed_sum=0,this.mostly_blank_count=0,this.mostly_blank_ms=0,this.pixels_blank=0,this.pixels_sampled=0,this.pixels_scrolled=0,this.total_time_spent=0,this.sample_count=0})),n=[],s=10,l=null,_=r(d[0])((function n(s){r(d[1])(this,n),this._anyBlankStartTime=null,this._enabled=!1,this._info=new t,this._mostlyBlankStartTime=null,this._samplesStartTime=null,this._getFrameMetrics=s,this._enabled=(l||0)>Math.random(),this._resetData()}),[{key:"activate",value:function(){this._enabled&&null==this._samplesStartTime&&(this._samplesStartTime=g.performance.now())}},{key:"deactivateAndFlush",value:function(){if(this._enabled){var t=this._samplesStartTime;if(null!=t)if(this._info.sample_count0&&(c=Math.min(h,Math.max(0,y.offset-_)));for(var p=0,b=n.last,v=this._getFrameMetrics(b,t);b>=n.first&&(!v||!v.inLayout);)v=this._getFrameMetrics(b,t),b--;if(v&&b0?(this._anyBlankStartTime=f,this._info.any_blank_speed_sum+=u,this._info.any_blank_count++,this._info.pixels_blank+=M,T>.5&&(this._mostlyBlankStartTime=f,this._info.mostly_blank_count++)):(u<.01||Math.abs(l)<1)&&this.deactivateAndFlush(),T}},{key:"enabled",value:function(){return this._enabled}},{key:"_resetData",value:function(){this._anyBlankStartTime=null,this._info=new t,this._mostlyBlankStartTime=null,this._samplesStartTime=null}}],[{key:"addListener",value:function(t){return null===l&&console.warn('Call `FillRateHelper.setSampleRate` before `addListener`.'),n.push(t),{remove:function(){n=n.filter((function(n){return t!==n}))}}}},{key:"setSampleRate",value:function(t){l=t}},{key:"setMinSampleCount",value:function(t){s=t}}]);m.exports=_}),304,[18,17]); +__d((function(g,_r,_i,a,m,_e,d){Object.defineProperty(_e,"__esModule",{value:!0}),_e.default=void 0;var t=_r(d[0])(_r(d[1])),e=_r(d[0])(_r(d[2])),n=_r(d[0])(_r(d[3])),r=_r(d[0])(_r(d[4])),u=_r(d[0])(_r(d[5])),o=_r(d[0])(_r(d[6])),i=_r(d[0])(_r(d[7])),f=(function(t,e){if("function"==typeof WeakMap)var n=new WeakMap,r=new WeakMap;return(function(t,e){if(!e&&t&&t.__esModule)return t;var u,o,i={__proto__:null,default:t};if(null===t||"object"!=typeof t&&"function"!=typeof t)return i;if(u=e?r:n){if(u.has(t))return u.get(t);u.set(t,i)}for(var f in t)"default"!==f&&{}.hasOwnProperty.call(t,f)&&((o=(u=Object.defineProperty)&&Object.getOwnPropertyDescriptor(t,f))&&(o.get||o.set)?u(i,f,o):i[f]=t[f]);return i})(t,e)})(_r(d[8]));function s(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(t){}return(s=function(){return!!t})()}function c(t,e,n,o){var i=(0,u.default)((0,r.default)(1&o?t.prototype:t),e,n);return 2&o&&"function"==typeof i?function(t){return i.apply(n,t)}:i}_e.default=(function(u){function f(e){var u,o,i,c;return(0,t.default)(this,f),o=this,i=f,c=[e],i=(0,r.default)(i),(u=(0,n.default)(o,s()?Reflect.construct(i,c||[],(0,r.default)(o).constructor):i.apply(o,c)))._inAsyncStateUpdate=!1,u._installSetStateHooks(),u}return(0,o.default)(f,u),(0,e.default)(f,[{key:"setState",value:function(t,e){var n=this;'function'==typeof t?c(f,"setState",this,3)([function(e,r){var u;n._inAsyncStateUpdate=!0;try{u=t(e,r)}catch(t){throw t}finally{n._inAsyncStateUpdate=!1}return u},e]):c(f,"setState",this,3)([t,e])}},{key:"_installSetStateHooks",value:function(){var t=this,e=this.props,n=this.state;Object.defineProperty(this,'props',{get:function(){return(0,i.default)(!t._inAsyncStateUpdate,'"this.props" should not be accessed during state updates'),e},set:function(t){e=t}}),Object.defineProperty(this,'state',{get:function(){return(0,i.default)(!t._inAsyncStateUpdate,'"this.state" should not be acceessed during state updates'),n},set:function(t){n=t}})}}])})(f.PureComponent)}),305,[8,17,18,3,2,98,56,24,153]); +__d((function(g,r,i,a,m,e,d){'use strict';var t=r(d[1])((function t(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{viewAreaCoveragePercentThreshold:0};r(d[0])(this,t),this._hasInteracted=!1,this._timers=new Set,this._viewableIndices=[],this._viewableItems=new Map,this._config=n}),[{key:"dispose",value:function(){this._timers.forEach(clearTimeout)}},{key:"computeViewableItems",value:function(t,s,o,l,h){var c=t.getItemCount(t.data),u=this._config,v=u.itemVisiblePercentThreshold,f=u.viewAreaCoveragePercentThreshold,_=null!=f,w=_?f:v;r(d[2])(null!=w&&null!=v!=(null!=f),'Must set exactly one of itemVisiblePercentThreshold or viewAreaCoveragePercentThreshold');var I=[];if(0===c)return I;var b=-1,y=h||{first:0,last:c-1},p=y.first,T=y.last;if(T>=c)return console.warn('Invalid render range computing viewability '+JSON.stringify({renderRange:h,itemCount:c})),[];for(var k=p;k<=T;k++){var V=l(k,t);if(V){var C=V.offset-s,M=C+V.length;if(C0)b=k,n(_,w,C,M,o,V.length)&&I.push(k);else if(b>=0)break}}return I}},{key:"onUpdate",value:function(t,n,s,o,l,h,c){var u=this,v=t.getItemCount(t.data);if((!this._config.waitForInteraction||this._hasInteracted)&&0!==v&&o(0,t)){var f=[];if(v&&(f=this.computeViewableItems(t,n,s,o,c)),this._viewableIndices.length!==f.length||!this._viewableIndices.every((function(t,n){return t===f[n]})))if(this._viewableIndices=f,this._config.minimumViewTime){var _=setTimeout((function(){u._timers.delete(_),u._onUpdateSync(t,f,h,l)}),this._config.minimumViewTime);this._timers.add(_)}else this._onUpdateSync(t,f,h,l)}}},{key:"resetViewableIndices",value:function(){this._viewableIndices=[]}},{key:"recordInteraction",value:function(){this._hasInteracted=!0}},{key:"_onUpdateSync",value:function(t,n,s,o){var l=this;n=n.filter((function(t){return l._viewableIndices.includes(t)}));var h=this._viewableItems,c=new Map(n.map((function(n){var s=o(n,!0,t);return[s.key,s]}))),u=[];for(var v of c){var f=r(d[3])(v,2),_=f[0],w=f[1];h.has(_)||u.push(w)}for(var I of h){var b=r(d[3])(I,2),y=b[0],p=b[1];c.has(y)||u.push(Object.assign({},p,{isViewable:!1}))}u.length>0&&(this._viewableItems=c,s({viewableItems:Array.from(c.values()),changed:u,viewabilityConfig:this._config}))}}]);function n(t,n,l,h,c,u){if(o(l,h,c))return!0;var v=s(l,h,c);return 100*(t?v/c:v/u)>=n}function s(t,n,s){var o=Math.min(n,s)-Math.max(t,0);return Math.max(0,o)}function o(t,n,s){return t>=0&&n<=s&&n>t}m.exports=t}),306,[17,18,24,26]); +__d((function(g,_r,_i,a,m,_e,d){Object.defineProperty(_e,"__esModule",{value:!0}),_e.default=void 0;var e=_r(d[0])(_r(d[1])),t=_r(d[0])(_r(d[2])),r=_r(d[0])(_r(d[3])),o=_r(d[0])(_r(d[4])),n=_r(d[0])(_r(d[5])),s=_r(d[6]),i=_r(d[0])(_r(d[7])),l=(function(e,t){if("function"==typeof WeakMap)var r=new WeakMap,o=new WeakMap;return(function(e,t){if(!t&&e&&e.__esModule)return e;var n,s,i={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return i;if(n=t?o:r){if(n.has(e))return n.get(e);n.set(e,i)}for(var l in e)"default"!==l&&{}.hasOwnProperty.call(e,l)&&((s=(n=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,l))&&(s.get||s.set)?n(i,l,s):i[l]=e[l]);return i})(e,t)})(_r(d[8]));function p(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(p=function(){return!!e})()}_e.default=(function(c){function f(){var t,n,s,i;(0,e.default)(this,f);for(var l=arguments.length,u=new Array(l),c=0;c=0,'CellRenderMask must contain a non-negative number os cells'),this._numCells=t,this._regions=0===t?[]:[{first:0,last:t-1,isSpacer:!0}]}),[{key:"enumerateRegions",value:function(){return this._regions}},{key:"addCells",value:function(i){var l;if((0,n.default)(i.first>=0&&i.first=-1&&i.last=i.first-1,'CellRenderMask.addCells called with invalid cell range'),!(i.lastS.last&&(v.isSpacer?k.push({first:S.last+1,last:v.last,isSpacer:!0}):S.last=v.last);var y=[].concat(C,[S],k),R=p-c+1;(l=this._regions).splice.apply(l,[c,R].concat((0,s.default)(y)))}}}},{key:"numCells",value:function(){return this._numCells}},{key:"equals",value:function(s){return this._numCells===s._numCells&&this._regions.length===s._regions.length&&this._regions.every((function(t,i){return t.first===s._regions[i].first&&t.last===s._regions[i].last&&t.isSpacer===s._regions[i].isSpacer}))}},{key:"_findRegion",value:function(s){for(var t=0,i=this._regions.length-1;t<=i;){var l=Math.floor((t+i)/2),f=this._regions[l];if(s>=f.first&&s<=f.last)return[f,l];sf.last&&(t=l+1)}(0,n.default)(!1,`A region was not found containing cellIdx ${s}`)}}])}),309,[8,11,26,17,18,24]); +__d((function(g,_r,_i,a,m,_e,d){var e=_r(d[0])(_r(d[1])),t=_r(d[0])(_r(d[2])),n=_r(d[0])(_r(d[3])),r=_r(d[0])(_r(d[4])),i=_r(d[0])(_r(d[5])),o=_r(d[0])(_r(d[6])),l=_r(d[0])(_r(d[7])),s=_r(d[8]),u=_r(d[0])(_r(d[9])),c=_r(d[0])(_r(d[10])),p=(function(e,t){if("function"==typeof WeakMap)var n=new WeakMap,r=new WeakMap;return(function(e,t){if(!t&&e&&e.__esModule)return e;var i,o,l={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return l;if(i=t?r:n){if(i.has(e))return i.get(e);i.set(e,l)}for(var s in e)"default"!==s&&{}.hasOwnProperty.call(e,s)&&((o=(i=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,s))&&(o.get||o.set)?i(l,s,o):l[s]=e[s]);return l})(e,t)})(_r(d[11])),f=["ItemSeparatorComponent","SectionSeparatorComponent","renderItem","renderSectionFooter","renderSectionHeader","sections","stickySectionHeadersEnabled"];function h(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(h=function(){return!!e})()}var v=(function(e){function s(){var e,t,r,l;(0,n.default)(this,s);for(var u=arguments.length,p=new Array(u),f=0;f0&&this.props.stickySectionHeadersEnabled)r+=this._listRef.__getFrameMetricsApprox(t-e.itemIndex,this._listRef.props).length;var i=Object.assign({},e,{viewOffset:r,index:t});this._listRef.scrollToIndex(i)}}},{key:"getListRef",value:function(){return this._listRef}},{key:"render",value:function(){var e=this,n=this.props,r=(n.ItemSeparatorComponent,n.SectionSeparatorComponent,n.renderItem,n.renderSectionFooter,n.renderSectionHeader,n.sections,n.stickySectionHeadersEnabled,(0,t.default)(n,f)),i=this.props.ListHeaderComponent?1:0,o=this.props.stickySectionHeadersEnabled?[]:void 0,l=0;for(var s of this.props.sections)null!=o&&o.push(l+i),l+=2,l+=this.props.getItemCount(s.data);var c=this._renderItem(l);return(0,_r(d[13]).jsx)(u.default,Object.assign({},r,{keyExtractor:this._keyExtractor,stickyHeaderIndices:o,renderItem:c,data:this.props.sections,getItem:function(t,n){return e._getItem(e.props,t,n)},getItemCount:function(){return l},onViewableItemsChanged:this.props.onViewableItemsChanged?this._onViewableItemsChanged:void 0,ref:this._captureRef}))}},{key:"_getItem",value:function(e,t,n){if(!t)return null;for(var r=n-1,i=0;i=i(c)+1))return-1===t?{section:u,key:p+':header',index:null,header:!0,trailingSection:l[s+1]}:t===i(c)?{section:u,key:p+':footer',index:null,header:!1,trailingSection:l[s+1]}:{section:u,key:p+':'+(u.keyExtractor||o||_r(d[12]).keyExtractor)(r(c,t),t),index:t,leadingItem:r(c,t-1),leadingSection:l[s-1],trailingItem:r(c,t+1),trailingSection:l[s+1]};t-=i(c)+1}}},{key:"_getSeparatorComponent",value:function(e,t,n){if(!(t=t||this._subExtractor(e)))return null;var r=t.section.ItemSeparatorComponent||this.props.ItemSeparatorComponent,i=this.props.SectionSeparatorComponent,o=e===n-1,l=t.index===this.props.getItemCount(t.section.data)-1;return i&&l?i:!r||l||o?null:r}}])})(p.PureComponent);function S(t){var n=t.LeadingSeparatorComponent,r=t.SeparatorComponent,i=t.cellKey,o=t.prevCellKey,l=t.setSelfHighlightCallback,u=t.updateHighlightFor,c=t.setSelfUpdatePropsCallback,f=t.updatePropsFor,h=t.item,v=t.index,S=t.section,_=t.inverted,I=p.useState(!1),x=(0,e.default)(I,2),y=x[0],k=x[1],b=p.useState(!1),C=(0,e.default)(b,2),H=C[0],E=C[1],w=p.useState({leadingItem:t.leadingItem,leadingSection:t.leadingSection,section:t.section,trailingItem:t.item,trailingSection:t.trailingSection}),F=(0,e.default)(w,2),P=F[0],j=F[1],O=p.useState({leadingItem:t.item,leadingSection:t.leadingSection,section:t.section,trailingItem:t.trailingItem,trailingSection:t.trailingSection}),M=(0,e.default)(O,2),R=M[0],V=M[1];p.useEffect((function(){return l(i,E),c(i,V),function(){c(i,null),l(i,null)}}),[i,l,V,c]);var U={highlight:function(){k(!0),E(!0),null!=o&&u(o,!0)},unhighlight:function(){k(!1),E(!1),null!=o&&u(o,!1)},updateProps:function(e,t){'leading'===e?null!=n?j(Object.assign({},P,t)):null!=o&&f(o,Object.assign({},P,t)):'trailing'===e&&null!=r&&V(Object.assign({},R,t))}},L=t.renderItem({item:h,index:v,section:S,separators:U}),B=null!=n&&(0,_r(d[13]).jsx)(n,Object.assign({highlighted:y},P)),K=null!=r&&(0,_r(d[13]).jsx)(r,Object.assign({highlighted:H},R));return B||K?(0,_r(d[13]).jsxs)(s.View,{children:[!1===_?B:K,L,!1===_?K:B]}):L}m.exports=v}),310,[8,26,119,17,18,3,2,56,6,299,24,153,298,193]); +__d((function(g,_r,_i,a,m,_e,d){Object.defineProperty(_e,"__esModule",{value:!0}),_e.default=void 0;var e=_r(d[0])(_r(d[1])),t=_r(d[0])(_r(d[2]));!(function(e,t){if("function"==typeof WeakMap)var f=new WeakMap,n=new WeakMap;(function(e,t){if(!t&&e&&e.__esModule)return e;var r,o,u={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return u;if(r=t?n:f){if(r.has(e))return r.get(e);r.set(e,u)}for(var i in e)"default"!==i&&{}.hasOwnProperty.call(e,i)&&((o=(r=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,i))&&(o.get||o.set)?r(u,i,o):u[i]=e[i])})(e,t)})(_r(d[3]));_e.default=(0,t.default)(e.default)}),311,[8,312,276,153]); +__d((function(g,_r,_i,a,m,_e,d){var e=_r(d[0])(_r(d[1])),t=_r(d[0])(_r(d[2])),i=_r(d[0])(_r(d[3])),n=_r(d[0])(_r(d[4])),r=_r(d[0])(_r(d[5])),o=_r(d[0])(_r(d[6])),l=_r(d[0])(_r(d[7])),u=_r(d[0])(_r(d[8])),c=_r(d[0])(_r(d[9])),s=_r(d[0])(_r(d[10])),f=_r(d[0])(_r(d[11])),h=(function(e,t){if("function"==typeof WeakMap)var i=new WeakMap,n=new WeakMap;return(function(e,t){if(!t&&e&&e.__esModule)return e;var r,o,l={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return l;if(r=t?n:i){if(r.has(e))return r.get(e);r.set(e,l)}for(var u in e)"default"!==u&&{}.hasOwnProperty.call(e,u)&&((o=(r=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,u))&&(o.get||o.set)?r(l,u,o):l[u]=e[u]);return l})(e,t)})(_r(d[12])),b=["height","width"];var y=1;function p(e,t){var i=y++;return t&&t(i),c.default.prefetchImage(e,i)}function v(){return(v=(0,t.default)((function*(e){return yield c.default.queryCache(e)}))).apply(this,arguments)}var S=h.forwardRef((function(t,n){var l,c,h,y,p,v,S,I,j,z,_,M,x,L,O,k,P=(0,_r(d[13]).getImageSourcesFromImageProps)(t)||{uri:void 0,width:void 0,height:void 0},C=(0,s.default)(t.defaultSource),F=(0,s.default)(t.loadingIndicatorSource);if(t.children)throw new Error('The component cannot contain children. If you want to render content on top of the image, consider using the component or absolute positioning.');if(t.defaultSource&&t.loadingIndicatorSource)throw new Error('The component cannot have defaultSource and loadingIndicatorSource at the same time. Please use either defaultSource or loadingIndicatorSource.');if(Array.isArray(P))O=(0,i.default)([w.base,t.style]),k=P;else{var T=P.width,W=void 0===T?t.width:T,E=P.height,q=void 0===E?t.height:E,A=P.uri;O=(0,i.default)([{width:W,height:q},w.base,t.style]),k=[P],''===A&&console.warn('source.uri should not be an empty string')}t.height,t.width;var B=(0,e.default)(t,b),R=t.onLoadStart,H=t.onLoad,N=t.onLoadEnd,D=t.onError,G=Object.assign({},B,{style:O,shouldNotifyLoadEvents:!!(R||H||N||D),src:k,headers:(null==P||null==(l=P[0])?void 0:l.headers)||(null==P?void 0:P.headers),defaultSrc:C?C.uri:null,loadingIndicatorSrc:F?F.uri:null,ref:n,accessibilityLabel:null!=(c=null!=(h=t['aria-label'])?h:t.accessibilityLabel)?c:t.alt,accessibilityLabelledBy:null!=(y=null==t?void 0:t['aria-labelledby'])?y:null==t?void 0:t.accessibilityLabelledBy,accessible:void 0!==t.alt||t.accessible,accessibilityState:{busy:null!=(p=t['aria-busy'])?p:null==(v=t.accessibilityState)?void 0:v.busy,checked:null!=(S=t['aria-checked'])?S:null==(I=t.accessibilityState)?void 0:I.checked,disabled:null!=(j=t['aria-disabled'])?j:null==(z=t.accessibilityState)?void 0:z.disabled,expanded:null!=(_=t['aria-expanded'])?_:null==(M=t.accessibilityState)?void 0:M.expanded,selected:null!=(x=t['aria-selected'])?x:null==(L=t.accessibilityState)?void 0:L.selected}}),J=(O&&O.objectFit?(0,_r(d[14]).convertObjectFitToResizeMode)(O.objectFit):null)||t.resizeMode||O&&O.resizeMode||'cover';return(0,_r(d[15]).jsx)(o.default.Consumer,{children:function(e){var t=null!==e?Object.assign({},G,{internal_analyticTag:e}):G;return(0,_r(d[15]).jsx)(r.default.Consumer,{children:function(e){return e?(0,_r(d[15]).jsx)(f.default,{style:O,resizeMode:J,headers:G.headers,src:k,ref:n}):(0,_r(d[15]).jsx)(u.default,Object.assign({},t,{resizeMode:J}))}})}})}));null!=l.default.unstable_createImageComponent&&(S=l.default.unstable_createImageComponent(S)),S.displayName='Image',S.getSize=function(e,t,i){return c.default.getSize(e).then((function(e){t(e.width,e.height)})).catch(i||function(){console.warn('Failed to get size for image: '+e)})},S.getSizeWithHeaders=function(e,t,i,n){return c.default.getSizeWithHeaders(e,t).then((function(e){i(e.width,e.height)})).catch(n||function(){console.warn('Failed to get size for image: '+e)})},S.prefetch=p,S.prefetchWithMetadata=function(e,t,i,n){p(e,n)},S.abortPrefetch=function(e){c.default.abortRequest(e)},S.queryCache=function(e){return v.apply(this,arguments)},S.resolveAssetSource=s.default,S.propTypes=_r(d[16]).ImagePropTypes;var w=n.default.create({base:{overflow:'hidden'}});m.exports=S}),312,[8,119,313,157,196,158,314,315,316,318,176,317,153,319,320,193,234]); +__d((function(g,_r,_i,_a,m,_e,d){function n(n,t,e,o,r,u,i){try{var c=n[u](i),s=c.value}catch(n){return void e(n)}c.done?t(s):Promise.resolve(s).then(o,r)}m.exports=function(t){return function(){var e=this,o=arguments;return new Promise((function(r,u){var i=t.apply(e,o);function c(t){n(i,r,u,c,s,"next",t)}function s(t){n(i,r,u,c,s,"throw",t)}c(void 0)}))}},m.exports.__esModule=!0,m.exports.default=m.exports}),313,[]); +__d((function(g,_r,_i,a,m,_e,d){Object.defineProperty(_e,"__esModule",{value:!0}),_e.default=void 0;var e=(function(e,t){if("function"==typeof WeakMap)var r=new WeakMap,n=new WeakMap;return(function(e,t){if(!t&&e&&e.__esModule)return e;var o,f,u={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return u;if(o=t?n:r){if(o.has(e))return o.get(e);o.set(e,u)}for(var i in e)"default"!==i&&{}.hasOwnProperty.call(e,i)&&((f=(o=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,i))&&(f.get||f.set)?o(u,i,f):u[i]=e[i]);return u})(e,t)})(_r(d[0])).createContext(null);_e.default=e}),314,[153]); +__d((function(g,_r,_i,a,m,_e,d){Object.defineProperty(_e,"__esModule",{value:!0}),_e.default=void 0;_r(d[0])(_r(d[1])),_r(d[0])(_r(d[2])),(function(e,t){if("function"==typeof WeakMap)var n=new WeakMap,o=new WeakMap;(function(e,t){if(!t&&e&&e.__esModule)return e;var r,f,u={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return u;if(r=t?o:n){if(r.has(e))return r.get(e);r.set(e,u)}for(var l in e)"default"!==l&&{}.hasOwnProperty.call(e,l)&&((f=(r=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,l))&&(f.get||f.set)?r(u,l,f):u[l]=e[l])})(e,t)})(_r(d[3]));_e.default={unstable_createImageComponent:null}}),315,[8,316,317,153]); +__d((function(g,_r,_i,a,m,_e,d){Object.defineProperty(_e,"__esModule",{value:!0}),_e.default=_e.__INTERNAL_VIEW_CONFIG=void 0;var e=(function(e,r){if("function"==typeof WeakMap)var o=new WeakMap,t=new WeakMap;return(function(e,r){if(!r&&e&&e.__esModule)return e;var n,i,s={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return s;if(n=r?t:o){if(n.has(e))return n.get(e);n.set(e,s)}for(var l in e)"default"!==l&&{}.hasOwnProperty.call(e,l)&&((i=(n=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,l))&&(i.get||i.set)?n(s,l,i):s[l]=e[l]);return s})(e,r)})(_r(d[0])),r=_r(d[1])(_r(d[2]));var o=_e.__INTERNAL_VIEW_CONFIG='android'===r.default.OS?{uiViewClassName:'RCTImageView',bubblingEventTypes:{},directEventTypes:{topLoadStart:{registrationName:'onLoadStart'},topProgress:{registrationName:'onProgress'},topError:{registrationName:'onError'},topLoad:{registrationName:'onLoad'},topLoadEnd:{registrationName:'onLoadEnd'}},validAttributes:{blurRadius:!0,internal_analyticTag:!0,resizeMode:!0,tintColor:{process:_r(d[3]).default},borderBottomLeftRadius:!0,borderTopLeftRadius:!0,resizeMethod:!0,src:!0,borderRadius:!0,headers:!0,shouldNotifyLoadEvents:!0,defaultSrc:!0,overlayColor:{process:_r(d[3]).default},borderColor:{process:_r(d[3]).default},accessible:!0,progressiveRenderingEnabled:!0,fadeDuration:!0,borderBottomRightRadius:!0,borderTopRightRadius:!0,loadingIndicatorSrc:!0}}:{uiViewClassName:'RCTImageView',bubblingEventTypes:{},directEventTypes:{topLoadStart:{registrationName:'onLoadStart'},topProgress:{registrationName:'onProgress'},topError:{registrationName:'onError'},topPartialLoad:{registrationName:'onPartialLoad'},topLoad:{registrationName:'onLoad'},topLoadEnd:{registrationName:'onLoadEnd'}},validAttributes:Object.assign({blurRadius:!0,capInsets:{diff:_r(d[4])},defaultSource:{process:_r(d[5])},internal_analyticTag:!0,resizeMode:!0,source:!0,tintColor:{process:_r(d[3]).default}},(0,_r(d[6]).ConditionallyIgnoredEventHandlers)({onLoadStart:!0,onLoad:!0,onLoadEnd:!0,onProgress:!0,onError:!0,onPartialLoad:!0}))},t=e.get('RCTImageView',(function(){return o}));_e.default=t}),316,[160,8,21,164,174,176,189]); +__d((function(g,_r,_i,a,m,_e,d){'use strict';Object.defineProperty(_e,"__esModule",{value:!0}),_e.default=_e.__INTERNAL_VIEW_CONFIG=void 0;var e=(function(e,t){if("function"==typeof WeakMap)var r=new WeakMap,n=new WeakMap;return(function(e,t){if(!t&&e&&e.__esModule)return e;var i,u,o={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return o;if(i=t?n:r){if(i.has(e))return i.get(e);i.set(e,o)}for(var f in e)"default"!==f&&{}.hasOwnProperty.call(e,f)&&((u=(i=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,f))&&(u.get||u.set)?i(o,f,u):o[f]=e[f]);return o})(e,t)})(_r(d[0]));var t=_e.__INTERNAL_VIEW_CONFIG={uiViewClassName:'RCTTextInlineImage',bubblingEventTypes:{},directEventTypes:{},validAttributes:{resizeMode:!0,src:!0,tintColor:{process:_r(d[1]).default},headers:!0}},r=e.get('RCTTextInlineImage',(function(){return t}));_e.default=r}),317,[160,164]); +__d((function(g,_r,_i,a,m,_e,d){Object.defineProperty(_e,"__esModule",{value:!0}),_e.default=void 0;var e=(function(e,t){if("function"==typeof WeakMap)var r=new WeakMap,n=new WeakMap;return(function(e,t){if(!t&&e&&e.__esModule)return e;var o,f,u={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return u;if(o=t?n:r){if(o.has(e))return o.get(e);o.set(e,u)}for(var i in e)"default"!==i&&{}.hasOwnProperty.call(e,i)&&((f=(o=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,i))&&(f.get||f.set)?o(u,i,f):u[i]=e[i]);return u})(e,t)})(_r(d[0]));_e.default=e.getEnforcing('ImageLoader')}),318,[23]); +__d((function(g,r,i,a,m,e,d){'use strict';Object.defineProperty(e,"__esModule",{value:!0}),e.getImageSourcesFromImageProps=function(l){var o,n=(0,t.default)(l.source),u=l.crossOrigin,c=l.referrerPolicy,h=l.src,f=l.srcSet,p=l.width,v=l.height,w={};'use-credentials'===u&&(w['Access-Control-Allow-Credentials']='true');null!=c&&(w['Referrer-Policy']=c);if(null!=f){var x=[],P=f.split(', '),y=!0;P.forEach((function(t){var l=t.split(' '),o=(0,s.default)(l,2),n=o[0],u=o[1],c=void 0===u?'1x':u;if(c.endsWith('x')){var h=parseInt(c.split('x')[0],10);isNaN(h)||(y=1!==h&&y,x.push({headers:w,scale:h,uri:n,width:p,height:v}))}else console.warn('The provided format for scale is not supported yet. Please use scales like 1x, 2x, etc.')})),y&&null!=h&&x.push({headers:w,scale:1,uri:h,width:p,height:v}),0===x.length&&console.warn('The provided value for srcSet is not valid.'),o=x}else o=null!=h?[{uri:h,headers:w,width:p,height:v}]:n;return o};var s=r(d[0])(r(d[1])),t=r(d[0])(r(d[2]))}),319,[8,26,176]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.convertObjectFitToResizeMode=function(n){return{contain:'contain',cover:'cover',fill:'stretch','scale-down':'contain'}[n]}}),320,[]); +__d((function(g,_r,_i,a,m,_e,d){Object.defineProperty(_e,"__esModule",{value:!0}),_e.default=void 0;var e=_r(d[0])(_r(d[1])),t=(_r(d[0])(_r(d[2])),_r(d[0])(_r(d[3]))),r=_r(d[0])(_r(d[4])),o=_r(d[0])(_r(d[5])),n=_r(d[0])(_r(d[6])),l=_r(d[0])(_r(d[7])),f=_r(d[0])(_r(d[8])),s=_r(d[0])(_r(d[9])),u=_r(d[0])(_r(d[10])),i=(function(e,t){if("function"==typeof WeakMap)var r=new WeakMap,o=new WeakMap;return(function(e,t){if(!t&&e&&e.__esModule)return e;var n,l,f={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return f;if(n=t?o:r){if(n.has(e))return n.get(e);n.set(e,f)}for(var s in e)"default"!==s&&{}.hasOwnProperty.call(e,s)&&((l=(n=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,s))&&(l.get||l.set)?n(f,s,l):f[s]=e[s]);return f})(e,t)})(_r(d[11])),c=i;var p=c.forwardRef((function(e,t){return'android'===l.default.OS&&null!=e.refreshControl&&null!=e.style?(0,_r(d[12]).jsx)(y,Object.assign({scrollEventThrottle:1e-4},e,{ref:t,refreshControl:e.refreshControl})):(0,_r(d[12]).jsx)(j,Object.assign({scrollEventThrottle:1e-4},e,{ref:t}))})),y=c.forwardRef((function(l,s){var p=(0,i.useMemo)((function(){var e=(0,o.default)((0,r.default)(l.style)),t=e.outer,n=e.inner;return{intermediatePropsForRefreshControl:{style:t},intermediatePropsForScrollView:Object.assign({},l,{style:n})}}),[l]),y=p.intermediatePropsForRefreshControl,j=p.intermediatePropsForScrollView,h=(0,u.default)(y),v=(0,e.default)(h,2),O=v[0],_=v[1],b=c.cloneElement(l.refreshControl,Object.assign({},O,{ref:_})),w=(0,u.default)(j),P=(0,e.default)(w,2),C=P[0],M=P[1],F=(0,f.default)(M,s);return(0,_r(d[12]).jsx)(t.default,Object.assign({},C,{ref:F,refreshControl:b,style:n.default.compose(C.style,O.style)}))})),j=(0,s.default)(t.default);_e.default=p}),321,[8,26,322,325,157,328,196,21,277,276,278,153,193]); +__d((function(g,_r,_i,a,m,_e,d){var e=_r(d[0])(_r(d[1])),t=_r(d[0])(_r(d[2])),r=_r(d[0])(_r(d[3])),n=_r(d[0])(_r(d[4])),i=_r(d[0])(_r(d[5])),o=_r(d[0])(_r(d[6])),s=u(_r(d[7])),f=(u(_r(d[8])),["tintColor","titleColor","title"]);function u(e,t){if("function"==typeof WeakMap)var r=new WeakMap,n=new WeakMap;return(u=function(e,t){if(!t&&e&&e.__esModule)return e;var i,o,s={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return s;if(i=t?n:r){if(i.has(e))return i.get(e);i.set(e,s)}for(var f in e)"default"!==f&&{}.hasOwnProperty.call(e,f)&&((o=(i=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,f))&&(o.get||o.set)?i(s,f,o):s[f]=e[f]);return s})(e,t)}function l(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(l=function(){return!!e})()}var h=(function(u){function h(){var e,r,o,s;(0,t.default)(this,h);for(var f=arguments.length,u=new Array(f),p=0;p0&&(this._scrollAnimatedValueAttachment=i.default.attachNativeEvent(this._scrollView.nativeInstance,'onScroll',[{nativeEvent:{contentOffset:{y:this._scrollAnimatedValue}}}]))}},{key:"_setStickyHeaderRef",value:function(e,n){n?this._stickyHeaderRefs.set(e,n):this._stickyHeaderRefs.delete(e)}},{key:"_onStickyHeaderLayout",value:function(e,n,o){var t=this.props.stickyHeaderIndices;if(t){var r=O.Children.toArray(this.props.children);if(o===this._getKeyForIndex(e,r)){var l=n.nativeEvent.layout.y;this._headerLayoutYs.set(o,l);var i=t.indexOf(e),s=t[i-1];if(null!=s){var c=this._stickyHeaderRefs.get(this._getKeyForIndex(s,r));c&&c.setNextHeaderY&&c.setNextHeaderY(l)}}}}},{key:"render",value:function(){var n=this,o=!0===this.props.horizontal?C:B,t=(0,e.default)(o,2),r=t[0],l=t[1],i=[!0===this.props.horizontal&&L.contentContainerHorizontal,this.props.contentContainerStyle],s=null==this.props.onContentSizeChange?null:{onLayout:this._handleContentOnLayout},c=this.props.stickyHeaderIndices,f=this.props.children;if(null!=c&&c.length>0){var y=O.Children.toArray(this.props.children);f=y.map((function(e,o){var t=e?c.indexOf(o):-1;if(t>-1){var r=e.key,l=c[t+1],i=n.props.StickyHeaderComponent||M.default;return(0,_r(d[33]).jsx)(i,{nativeID:'StickyHeader-'+r,ref:function(e){return n._setStickyHeaderRef(r,e)},nextHeaderLayoutY:n._headerLayoutYs.get(n._getKeyForIndex(l,y)),onLayout:function(e){return n._onStickyHeaderLayout(o,e,r)},scrollAnimatedValue:n._scrollAnimatedValue,inverted:n.props.invertStickyHeaders,hiddenOnScroll:n.props.stickyHeaderHiddenOnScroll,scrollViewHeight:n.state.layoutHeight,children:e},r)}return e}))}f=(0,_r(d[33]).jsx)(V.default.Provider,{value:!0===this.props.horizontal?V.HORIZONTAL:V.VERTICAL,children:f});var _=Array.isArray(c)&&c.length>0,b=(0,_r(d[33]).jsx)(l,Object.assign({},s,{ref:this._innerView.getForwardingRef(this.props.innerViewRef),style:i,removeClippedSubviews:('android'!==S.default.OS||!_)&&this.props.removeClippedSubviews,collapsable:!1,children:f})),v=void 0!==this.props.alwaysBounceHorizontal?this.props.alwaysBounceHorizontal:this.props.horizontal,w=void 0!==this.props.alwaysBounceVertical?this.props.alwaysBounceVertical:!this.props.horizontal,R=!0===this.props.horizontal?L.baseHorizontal:L.baseVertical,k=Object.assign({},this.props,{alwaysBounceHorizontal:v,alwaysBounceVertical:w,style:h.default.compose(R,this.props.style),onContentSizeChange:null,onLayout:this._handleLayout,onMomentumScrollBegin:this._handleMomentumScrollBegin,onMomentumScrollEnd:this._handleMomentumScrollEnd,onResponderGrant:this._handleResponderGrant,onResponderReject:this._handleResponderReject,onResponderRelease:this._handleResponderRelease,onResponderTerminationRequest:this._handleResponderTerminationRequest,onScrollBeginDrag:this._handleScrollBeginDrag,onScrollEndDrag:this._handleScrollEndDrag,onScrollShouldSetResponder:this._handleScrollShouldSetResponder,onStartShouldSetResponder:this._handleStartShouldSetResponder,onStartShouldSetResponderCapture:this._handleStartShouldSetResponderCapture,onTouchEnd:this._handleTouchEnd,onTouchMove:this._handleTouchMove,onTouchStart:this._handleTouchStart,onTouchCancel:this._handleTouchCancel,onScroll:this._handleScroll,scrollEventThrottle:_?1:this.props.scrollEventThrottle,sendMomentumEvents:!(!this.props.onMomentumScrollBegin&&!this.props.onMomentumScrollEnd),snapToStart:!1!==this.props.snapToStart,snapToEnd:!1!==this.props.snapToEnd,pagingEnabled:S.default.select({ios:!0===this.props.pagingEnabled&&null==this.props.snapToInterval&&null==this.props.snapToOffsets,android:!0===this.props.pagingEnabled||null!=this.props.snapToInterval||null!=this.props.snapToOffsets})}),I=this.props.decelerationRate;null!=I&&(k.decelerationRate=(0,T.default)(I));var H=this.props.refreshControl,E=this._scrollView.getForwardingRef(this.props.scrollViewRef);if(H){if('ios'===S.default.OS)return(0,_r(d[33]).jsxs)(r,Object.assign({},k,{ref:E,children:[H,b]}));if('android'===S.default.OS){var K=(0,p.default)((0,u.default)(k.style)),D=K.outer,A=K.inner;return O.cloneElement(H,{style:h.default.compose(R,D)},(0,_r(d[33]).jsx)(r,Object.assign({},k,{style:h.default.compose(R,A),ref:E,children:b})))}}return(0,_r(d[33]).jsx)(r,Object.assign({},k,{ref:E,children:b}))}}])})(O.Component);W.Context=V.default;var L=h.default.create({baseVertical:{flexGrow:1,flexShrink:1,flexDirection:'column',overflow:'scroll'},baseHorizontal:{flexGrow:1,flexShrink:1,flexDirection:'row',overflow:'scroll'},contentContainerHorizontal:{flexDirection:'row'}});function z(e){var n={getForwardingRef:(0,K.default)((function(o){return function(t){var r=null==t?null:e(t);n.nativeInstance=t,n.publicInstance=r,null!=o&&('function'==typeof o?o(r):o.current=r)}})),nativeInstance:null,publicInstance:null};return n}function j(e,n){return(0,_r(d[33]).jsx)(W,Object.assign({},e,{scrollViewRef:n}))}j.displayName='ScrollView';var P=O.forwardRef(j);P.Context=V.default,P.displayName='ScrollView',m.exports=P}),325,[8,26,17,18,3,2,56,258,326,37,157,328,196,182,329,21,330,204,156,333,334,335,336,337,338,339,340,24,296,38,153,214,47,193]); +__d((function(g,r,i,a,m,e,d){var t=r(d[0])(r(d[1])),o={setGlobalOptions:function(o){if(void 0!==o.debug&&r(d[2])(t.default,'Trying to debug FrameRateLogger without the native module!'),t.default){var l={debug:!!o.debug,reportStackTraces:!!o.reportStackTraces};t.default.setGlobalOptions(l)}},setContext:function(o){t.default&&t.default.setContext(o)},beginScroll:function(){t.default&&t.default.beginScroll()},endScroll:function(){t.default&&t.default.endScroll()}};m.exports=o}),326,[8,327,24]); +__d((function(g,_r,_i,a,m,_e,d){Object.defineProperty(_e,"__esModule",{value:!0}),_e.default=void 0;var e=(function(e,t){if("function"==typeof WeakMap)var r=new WeakMap,n=new WeakMap;return(function(e,t){if(!t&&e&&e.__esModule)return e;var o,f,u={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return u;if(o=t?n:r){if(o.has(e))return o.get(e);o.set(e,u)}for(var i in e)"default"!==i&&{}.hasOwnProperty.call(e,i)&&((f=(o=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,i))&&(f.get||f.set)?o(u,i,f):u[i]=e[i]);return u})(e,t)})(_r(d[0]));_e.default=e.get('FrameRateLogger')}),327,[23]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(c){var s=null,t=null;if(null!=c)for(var n of(s={},t={},Object.keys(c)))switch(n){case'margin':case'marginHorizontal':case'marginVertical':case'marginBottom':case'marginTop':case'marginLeft':case'marginRight':case'flex':case'flexGrow':case'flexShrink':case'flexBasis':case'alignSelf':case'height':case'minHeight':case'maxHeight':case'width':case'minWidth':case'maxWidth':case'position':case'left':case'right':case'bottom':case'top':case'transform':case'rowGap':case'columnGap':case'gap':s[n]=c[n];break;default:t[n]=c[n]}return{outer:s,inner:t}}}),328,[]); +__d((function(g,r,i,a,m,e,d){'use strict';m.exports=function(){r(d[0]).blurTextInput(r(d[0]).currentlyFocusedInput())}}),329,[204]); +__d((function(g,r,i,a,m,e,d){var t=r(d[0])(r(d[1])),n=r(d[0])(r(d[2])),u=r(d[0])(r(d[3])),l=r(d[0])(r(d[4])),o=r(d[0])(r(d[5])),s=r(d[0])(r(d[6])),f=r(d[0])(r(d[7])),c=(0,n.default)((function n(){var l=this;(0,t.default)(this,n),this._emitter=new u.default('ios'!==s.default.OS?null:f.default),this.addListener('keyboardDidShow',(function(t){l._currentlyShowing=t})),this.addListener('keyboardDidHide',(function(t){l._currentlyShowing=null}))}),[{key:"addListener",value:function(t,n,u){return this._emitter.addListener(t,n)}},{key:"removeAllListeners",value:function(t){this._emitter.removeAllListeners(t)}},{key:"dismiss",value:function(){(0,o.default)()}},{key:"isVisible",value:function(){return!!this._currentlyShowing}},{key:"metrics",value:function(){var t;return null==(t=this._currentlyShowing)?void 0:t.endCoordinates}},{key:"scheduleLayoutAnimation",value:function(t){var n=t.duration,u=t.easing;null!=n&&0!==n&&l.default.configureNext({duration:n,update:{duration:n,type:null!=u&&l.default.Types[u]||'keyboard'}})}}]);m.exports=new c}),330,[8,17,18,111,331,329,21,332]); +__d((function(g,r,i,a,m,e,d){'use strict';var n=r(d[0])(r(d[1])),t=r(d[0])(r(d[2])),u=n.default.isLayoutAnimationEnabled();function o(n,o,l){var s;if(!t.default.isTesting&&u){var c,p=!1,y=function(){p||(p=!0,clearTimeout(f),null==o||o())},f=setTimeout(y,(null!=(s=n.duration)?s:0)+17),b=(0,r(d[3]).getFabricUIManager)();if(null!=b&&b.configureNextLayoutAnimation)null==(c=g)||null==(c=c.nativeFabricUIManager)||c.configureNextLayoutAnimation(n,y,null!=l?l:function(){});else null!=r(d[4])&&r(d[4]).configureNextLayoutAnimation&&r(d[4]).configureNextLayoutAnimation(n,null!=y?y:function(){},null!=l?l:function(){})}}function l(n,t,u){return{duration:n,create:{type:t,property:u},update:{type:t},delete:{type:t,property:u}}}var s={easeInEaseOut:l(300,'easeInEaseOut','opacity'),linear:l(500,'linear','opacity'),spring:{duration:700,create:{type:'linear',property:'opacity'},update:{type:'spring',springDamping:.4},delete:{type:'linear',property:'opacity'}}},c={configureNext:o,create:l,Types:Object.freeze({spring:'spring',linear:'linear',easeInEaseOut:'easeInEaseOut',easeIn:'easeIn',easeOut:'easeOut',keyboard:'keyboard'}),Properties:Object.freeze({opacity:'opacity',scaleX:'scaleX',scaleY:'scaleY',scaleXY:'scaleXY'}),checkConfig:function(){console.error('LayoutAnimation.checkConfig(...) has been disabled.')},Presets:s,easeInEaseOut:o.bind(null,s.easeInEaseOut),linear:o.bind(null,s.linear),spring:o.bind(null,s.spring),setEnabled:function(n){}};m.exports=c}),331,[8,106,21,44,37]); +__d((function(g,_r,_i,a,m,_e,d){Object.defineProperty(_e,"__esModule",{value:!0}),_e.default=void 0;var e=(function(e,t){if("function"==typeof WeakMap)var r=new WeakMap,n=new WeakMap;return(function(e,t){if(!t&&e&&e.__esModule)return e;var o,f,u={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return u;if(o=t?n:r){if(o.has(e))return o.get(e);o.set(e,u)}for(var i in e)"default"!==i&&{}.hasOwnProperty.call(e,i)&&((f=(o=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,i))&&(f.get||f.set)?o(u,i,f):u[i]=e[i]);return u})(e,t)})(_r(d[0]));_e.default=e.get('KeyboardObserver')}),332,[23]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.__INTERNAL_VIEW_CONFIG=void 0;r(d[0])(r(d[1]));var t=e.__INTERNAL_VIEW_CONFIG={uiViewClassName:'AndroidHorizontalScrollContentView',validAttributes:{removeClippedSubviews:!0}};e.default=r(d[2]).get('AndroidHorizontalScrollContentView',(function(){return t}))}),333,[8,219,160]); +__d((function(g,_r,_i,a,m,_e,d){Object.defineProperty(_e,"__esModule",{value:!0}),_e.default=_e.__INTERNAL_VIEW_CONFIG=void 0;var e=(function(e,o){if("function"==typeof WeakMap)var r=new WeakMap,t=new WeakMap;return(function(e,o){if(!o&&e&&e.__esModule)return e;var n,l,s={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return s;if(n=o?t:r){if(n.has(e))return n.get(e);n.set(e,s)}for(var i in e)"default"!==i&&{}.hasOwnProperty.call(e,i)&&((l=(n=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,i))&&(l.get||l.set)?n(s,i,l):s[i]=e[i]);return s})(e,o)})(_r(d[0]));var o=_e.__INTERNAL_VIEW_CONFIG={uiViewClassName:'AndroidHorizontalScrollView',bubblingEventTypes:{},directEventTypes:{},validAttributes:{decelerationRate:!0,disableIntervalMomentum:!0,endFillColor:{process:_r(d[1]).default},fadingEdgeLength:!0,nestedScrollEnabled:!0,overScrollMode:!0,pagingEnabled:!0,persistentScrollbar:!0,scrollEnabled:!0,scrollPerfTag:!0,sendMomentumEvents:!0,showsHorizontalScrollIndicator:!0,snapToAlignment:!0,snapToEnd:!0,snapToInterval:!0,snapToStart:!0,snapToOffsets:!0,contentOffset:!0,borderBottomLeftRadius:!0,borderBottomRightRadius:!0,borderRadius:!0,borderStyle:!0,borderRightColor:{process:_r(d[1]).default},borderColor:{process:_r(d[1]).default},borderBottomColor:{process:_r(d[1]).default},borderTopLeftRadius:!0,borderTopColor:{process:_r(d[1]).default},removeClippedSubviews:!0,borderTopRightRadius:!0,borderLeftColor:{process:_r(d[1]).default},pointerEvents:!0}},r=e.get('AndroidHorizontalScrollView',(function(){return o}));_e.default=r}),334,[160,164]); +__d((function(g,r,i,a,m,e,d){var t=r(d[0])(r(d[1]));m.exports=function(n){return'normal'===n?t.default.select({ios:.998,android:.985}):'fast'===n?t.default.select({ios:.99,android:.9}):n}}),335,[8,21]); +__d((function(g,_r,_i,a,m,_e,d){Object.defineProperty(_e,"__esModule",{value:!0}),_e.default=_e.__INTERNAL_VIEW_CONFIG=void 0;var e=(function(e,t){if("function"==typeof WeakMap)var n=new WeakMap,r=new WeakMap;return(function(e,t){if(!t&&e&&e.__esModule)return e;var o,i,u={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return u;if(o=t?r:n){if(o.has(e))return o.get(e);o.set(e,u)}for(var f in e)"default"!==f&&{}.hasOwnProperty.call(e,f)&&((i=(o=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,f))&&(i.get||i.set)?o(u,f,i):u[f]=e[f]);return u})(e,t)})(_r(d[0]));var t=_e.__INTERNAL_VIEW_CONFIG={uiViewClassName:'RCTScrollContentView',bubblingEventTypes:{},directEventTypes:{},validAttributes:{}},n=e.get('RCTScrollContentView',(function(){return t}));_e.default=n}),336,[160]); +__d((function(g,_r,_i,a,m,_e,d){Object.defineProperty(_e,"__esModule",{value:!0}),_e.default=void 0;var e=_r(d[0])(_r(d[1]));!(function(e,t){if("function"==typeof WeakMap)var o=new WeakMap,r=new WeakMap;(function(e,t){if(!t&&e&&e.__esModule)return e;var n,f,l={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return l;if(n=t?r:o){if(n.has(e))return n.get(e);n.set(e,l)}for(var u in e)"default"!==u&&{}.hasOwnProperty.call(e,u)&&((f=(n=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,u))&&(f.get||f.set)?n(l,u,f):l[u]=e[u])})(e,t)})(_r(d[2]));_e.default=(0,e.default)({supportedCommands:['flashScrollIndicators','scrollTo','scrollToEnd','zoomToRect']})}),337,[8,192,153]); +__d((function(g,_r,_i,a,m,_e,d){Object.defineProperty(_e,"__esModule",{value:!0}),_e.default=_e.VERTICAL=_e.HORIZONTAL=void 0;var e=(function(e,t){if("function"==typeof WeakMap)var r=new WeakMap,n=new WeakMap;return(function(e,t){if(!t&&e&&e.__esModule)return e;var o,f,u={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return u;if(o=t?n:r){if(o.has(e))return o.get(e);o.set(e,u)}for(var i in e)"default"!==i&&{}.hasOwnProperty.call(e,i)&&((f=(o=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,i))&&(f.get||f.set)?o(u,i,f):u[i]=e[i]);return u})(e,t)})(_r(d[0])).createContext(null);_e.default=e,_e.HORIZONTAL=Object.freeze({horizontal:!0}),_e.VERTICAL=Object.freeze({horizontal:!1})}),338,[153]); +__d((function(g,_r,_i,a,m,_e,d){Object.defineProperty(_e,"__esModule",{value:!0}),_e.default=_e.__INTERNAL_VIEW_CONFIG=void 0;var o=(function(o,e){if("function"==typeof WeakMap)var t=new WeakMap,n=new WeakMap;return(function(o,e){if(!e&&o&&o.__esModule)return o;var r,l,i={__proto__:null,default:o};if(null===o||"object"!=typeof o&&"function"!=typeof o)return i;if(r=e?n:t){if(r.has(o))return r.get(o);r.set(o,i)}for(var s in o)"default"!==s&&{}.hasOwnProperty.call(o,s)&&((l=(r=Object.defineProperty)&&Object.getOwnPropertyDescriptor(o,s))&&(l.get||l.set)?r(i,s,l):i[s]=o[s]);return i})(o,e)})(_r(d[0])),e=_r(d[1])(_r(d[2]));var t=_e.__INTERNAL_VIEW_CONFIG='android'===e.default.OS?{uiViewClassName:'RCTScrollView',bubblingEventTypes:{},directEventTypes:{topMomentumScrollBegin:{registrationName:'onMomentumScrollBegin'},topMomentumScrollEnd:{registrationName:'onMomentumScrollEnd'},topScroll:{registrationName:'onScroll'},topScrollBeginDrag:{registrationName:'onScrollBeginDrag'},topScrollEndDrag:{registrationName:'onScrollEndDrag'}},validAttributes:{contentOffset:{diff:_r(d[3])},decelerationRate:!0,disableIntervalMomentum:!0,pagingEnabled:!0,scrollEnabled:!0,showsVerticalScrollIndicator:!0,snapToAlignment:!0,snapToEnd:!0,snapToInterval:!0,snapToOffsets:!0,snapToStart:!0,borderBottomLeftRadius:!0,borderBottomRightRadius:!0,sendMomentumEvents:!0,borderRadius:!0,nestedScrollEnabled:!0,borderStyle:!0,borderRightColor:{process:_r(d[4]).default},borderColor:{process:_r(d[4]).default},borderBottomColor:{process:_r(d[4]).default},persistentScrollbar:!0,endFillColor:{process:_r(d[4]).default},fadingEdgeLength:!0,overScrollMode:!0,borderTopLeftRadius:!0,scrollPerfTag:!0,borderTopColor:{process:_r(d[4]).default},removeClippedSubviews:!0,borderTopRightRadius:!0,borderLeftColor:{process:_r(d[4]).default},pointerEvents:!0}}:{uiViewClassName:'RCTScrollView',bubblingEventTypes:{},directEventTypes:{topMomentumScrollBegin:{registrationName:'onMomentumScrollBegin'},topMomentumScrollEnd:{registrationName:'onMomentumScrollEnd'},topScroll:{registrationName:'onScroll'},topScrollBeginDrag:{registrationName:'onScrollBeginDrag'},topScrollEndDrag:{registrationName:'onScrollEndDrag'},topScrollToTop:{registrationName:'onScrollToTop'}},validAttributes:Object.assign({alwaysBounceHorizontal:!0,alwaysBounceVertical:!0,automaticallyAdjustContentInsets:!0,automaticallyAdjustKeyboardInsets:!0,automaticallyAdjustsScrollIndicatorInsets:!0,bounces:!0,bouncesZoom:!0,canCancelContentTouches:!0,centerContent:!0,contentInset:{diff:_r(d[5])},contentOffset:{diff:_r(d[3])},contentInsetAdjustmentBehavior:!0,decelerationRate:!0,directionalLockEnabled:!0,disableIntervalMomentum:!0,indicatorStyle:!0,inverted:!0,keyboardDismissMode:!0,maintainVisibleContentPosition:!0,maximumZoomScale:!0,minimumZoomScale:!0,pagingEnabled:!0,pinchGestureEnabled:!0,scrollEnabled:!0,scrollEventThrottle:!0,scrollIndicatorInsets:{diff:_r(d[5])},scrollToOverflowEnabled:!0,scrollsToTop:!0,showsHorizontalScrollIndicator:!0,showsVerticalScrollIndicator:!0,snapToAlignment:!0,snapToEnd:!0,snapToInterval:!0,snapToOffsets:!0,snapToStart:!0,zoomScale:!0},(0,_r(d[6]).ConditionallyIgnoredEventHandlers)({onScrollBeginDrag:!0,onMomentumScrollEnd:!0,onScrollEndDrag:!0,onMomentumScrollBegin:!0,onScrollToTop:!0,onScroll:!0}))},n=o.get('RCTScrollView',(function(){return t}));_e.default=n}),339,[160,8,21,173,164,174,189]); +__d((function(g,_r,_i,a,m,_e,d){Object.defineProperty(_e,"__esModule",{value:!0}),_e.default=void 0;var e=_r(d[0])(_r(d[1])),t=_r(d[0])(_r(d[2])),n=_r(d[0])(_r(d[3])),u=_r(d[0])(_r(d[4])),r=_r(d[0])(_r(d[5])),l=(function(e,t){if("function"==typeof WeakMap)var n=new WeakMap,u=new WeakMap;return(function(e,t){if(!t&&e&&e.__esModule)return e;var r,l,o={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return o;if(r=t?u:n){if(r.has(e))return r.get(e);r.set(e,o)}for(var i in e)"default"!==i&&{}.hasOwnProperty.call(e,i)&&((l=(r=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,i))&&(l.get||l.set)?r(o,i,l):o[i]=e[i]);return o})(e,t)})(_r(d[6])),o=l;var i=o.forwardRef((function(n,i){var s=n.inverted,p=n.scrollViewHeight,c=n.hiddenOnScroll,v=n.scrollAnimatedValue,h=n.nextHeaderLayoutY,y=(0,l.useState)(!1),R=(0,e.default)(y,2),_=R[0],L=R[1],S=(0,l.useState)(0),b=(0,e.default)(S,2),w=b[0],x=b[1],O=(0,l.useState)(0),E=(0,e.default)(O,2),M=E[0],P=E[1],j=(0,l.useState)(null),k=(0,e.default)(j,2),C=k[0],I=k[1],V=(0,l.useState)(h),Y=(0,e.default)(V,2),D=Y[0],H=Y[1],T=(0,l.useState)(!1),W=(0,e.default)(T,2),A=W[0],z=W[1],N=(0,r.default)((function(e){null!=e&&(e.setNextHeaderY=function(e){H(e)},z((0,_r(d[7]).isPublicInstance)(e)))}),i),q=(0,l.useMemo)((function(){return!0===c?t.default.diffClamp(v.interpolate({extrapolateLeft:'clamp',inputRange:[w,w+1],outputRange:[0,1]}).interpolate({inputRange:[0,1],outputRange:[0,-1]}),-M,0):null}),[v,M,w,c]),B=(0,l.useState)((function(){var e=v.interpolate({inputRange:[-1,0],outputRange:[0,0]});return null!=q?t.default.add(e,q):e})),F=(0,e.default)(B,2),G=F[0],J=F[1],K=(0,l.useRef)(!0),Q=(0,l.useRef)(null);(0,l.useEffect)((function(){0!==C&&null!=C&&(K.current=!1)}),[C]);var U=(0,l.useCallback)((function(e){var t=e.value,n='android'===u.default.OS?15:64;0!==t||K.current?(null!=Q.current&&clearTimeout(Q.current),Q.current=setTimeout((function(){t!==C&&I(t)}),n)):K.current=!0}),[C]);(0,l.useEffect)((function(){var e=[-1,0],n=[0,0];if(_)if(!0===s){if(null!=p){var u=w+M-p;if(u>0){e.push(u),n.push(0),e.push(u+1),n.push(1);var r=(D||0)-M-p;r>u&&(e.push(r,r+1),n.push(r-u,r-u))}}}else{e.push(w),n.push(0);var l=(D||0)-M;l>=w?(e.push(l,l+1),n.push(l-w,l-w)):(e.push(w+1),n.push(1))}var o,i=v.interpolate({inputRange:e,outputRange:n});return null!=q&&(i=t.default.add(i,q)),A&&(o=i.addListener(U)),J(i),function(){o&&i.removeListener(o),null!=Q.current&&clearTimeout(Q.current)}}),[D,_,M,w,p,v,s,q,U,A]);var X=o.Children.only(n.children),Z=A&&null!=C?{style:{transform:[{translateY:C}]}}:null;return(0,_r(d[8]).jsx)(t.default.View,{collapsable:!1,nativeID:n.nativeID,onLayout:function(e){x(e.nativeEvent.layout.y),P(e.nativeEvent.layout.height),L(!0),n.onLayout(e);var t=o.Children.only(n.children);t.props.onLayout&&t.props.onLayout(e)},ref:N,style:[X.props.style,f.header,{transform:[{translateY:G}]}],passthroughAnimatedPropExplicitValues:Z,children:o.cloneElement(X,{style:f.fill,onLayout:void 0})})})),f=n.default.create({header:{zIndex:10,position:'relative'},fill:{flex:1}});_e.default=i}),340,[8,26,257,196,21,277,153,285,193]); +__d((function(g,_r,_i,a,m,_e,d){Object.defineProperty(_e,"__esModule",{value:!0}),_e.default=void 0;var e=_r(d[0])(_r(d[1])),t=_r(d[0])(_r(d[2]));var r=(function(e,t){if("function"==typeof WeakMap)var r=new WeakMap,n=new WeakMap;return(function(e,t){if(!t&&e&&e.__esModule)return e;var f,o,u={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return u;if(f=t?n:r){if(f.has(e))return f.get(e);f.set(e,u)}for(var l in e)"default"!==l&&{}.hasOwnProperty.call(e,l)&&((o=(f=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,l))&&(o.get||o.set)?f(u,l,o):u[l]=e[l]);return u})(e,t)})(_r(d[3])).forwardRef((function(t,r){return(0,_r(d[4]).jsx)(e.default,Object.assign({scrollEventThrottle:1e-4},t,{ref:r}))}));_e.default=(0,t.default)(r)}),341,[8,342,276,153,193]); +__d((function(g,_r,_i,a,m,_e,d){'use strict';Object.defineProperty(_e,"__esModule",{value:!0}),_e.default=void 0;var e=_r(d[0])(_r(d[1])),t=_r(d[0])(_r(d[2])),r=_r(d[0])(_r(d[3])),n=_r(d[0])(_r(d[4])),i=_r(d[0])(_r(d[5])),o=_r(d[0])(_r(d[6])),f=_r(d[0])(_r(d[7])),s=(function(e,t){if("function"==typeof WeakMap)var r=new WeakMap,n=new WeakMap;return(function(e,t){if(!t&&e&&e.__esModule)return e;var i,o,f={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return f;if(i=t?n:r){if(i.has(e))return i.get(e);i.set(e,f)}for(var s in e)"default"!==s&&{}.hasOwnProperty.call(e,s)&&((o=(i=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,s))&&(o.get||o.set)?i(f,s,o):f[s]=e[s]);return f})(e,t)})(_r(d[8])),u=["stickySectionHeadersEnabled"];function c(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(c=function(){return!!e})()}_e.default=(function(s){function l(){var e,r,o,f;(0,t.default)(this,l);for(var s=arguments.length,u=new Array(s),p=0;p=21&&null!=this.props.statusBarBackgroundColor,u=(0,_r(d[15]).jsxs)(c.default,{style:[_.drawerSubview,{width:this.props.drawerWidth,backgroundColor:o}],collapsable:!1,children:[n(),i&&(0,_r(d[15]).jsx)(c.default,{style:_.drawerStatusBar})]}),w=(0,_r(d[15]).jsxs)(c.default,{style:_.mainSubview,collapsable:!1,children:[i&&(0,_r(d[15]).jsx)(f.default,{translucent:!0,backgroundColor:this.props.statusBarBackgroundColor}),i&&(0,_r(d[15]).jsx)(c.default,{style:[_.statusBar,{backgroundColor:this.props.statusBarBackgroundColor}]}),this.props.children]});return(0,_r(d[15]).jsxs)(p.default,Object.assign({},s,{ref:this._nativeRef,drawerBackgroundColor:o,drawerWidth:this.props.drawerWidth,drawerPosition:this.props.drawerPosition,drawerLockMode:this.props.drawerLockMode,style:[_.base,this.props.style],onDrawerSlide:this._onDrawerSlide,onDrawerOpen:this._onDrawerOpen,onDrawerClose:this._onDrawerClose,onDrawerStateChanged:this._onDrawerStateChanged,children:[w,u]}))}},{key:"openDrawer",value:function(){p.Commands.openDrawer((0,w.default)(this._nativeRef.current))}},{key:"closeDrawer",value:function(){p.Commands.closeDrawer((0,w.default)(this._nativeRef.current))}},{key:"blur",value:function(){(0,w.default)(this._nativeRef.current).blur()}},{key:"focus",value:function(){(0,w.default)(this._nativeRef.current).focus()}},{key:"measure",value:function(e){(0,w.default)(this._nativeRef.current).measure(e)}},{key:"measureInWindow",value:function(e){(0,w.default)(this._nativeRef.current).measureInWindow(e)}},{key:"measureLayout",value:function(e,r,t){(0,w.default)(this._nativeRef.current).measureLayout(e,r,t)}},{key:"setNativeProps",value:function(e){(0,w.default)(this._nativeRef.current).setNativeProps(e)}}],[{key:"positions",get:function(){return console.warn('Setting DrawerLayoutAndroid drawerPosition using `DrawerLayoutAndroid.positions` is deprecated. Instead pass the string value "left" or "right"'),{Left:'left',Right:'right'}}}])})(h.Component),_=i.default.create({base:{flex:1,elevation:16},mainSubview:{position:'absolute',top:0,left:0,right:0,bottom:0},drawerSubview:{position:'absolute',top:0,bottom:0},statusBar:{height:f.default.currentHeight},drawerStatusBar:{position:'absolute',top:0,left:0,right:0,height:f.default.currentHeight,backgroundColor:'rgba(0, 0, 0, 0.251)'}});m.exports=k}),345,[8,119,17,18,3,2,56,196,329,21,346,156,349,38,153,193]); +__d((function(g,_r,_i,a,m,_e,d){var t,e,n=_r(d[0])(_r(d[1])),r=_r(d[0])(_r(d[2])),l=_r(d[0])(_r(d[3])),o=_r(d[0])(_r(d[4])),u=_r(d[0])(_r(d[5])),i=_r(d[0])(_r(d[6])),c=_r(d[0])(_r(d[7])),s=_r(d[0])(_r(d[8])),f=_r(d[0])(_r(d[9])),p=_r(d[0])(_r(d[10]));function y(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(t){}return(y=function(){return!!t})()}function k(t){var e,n,r=null!=(e=t.animated)&&e,l=null!=(n=t.showHideTransition)?n:'fade';return{backgroundColor:null!=t.backgroundColor?{value:t.backgroundColor,animated:r}:null,barStyle:null!=t.barStyle?{value:t.barStyle,animated:r}:null,translucent:t.translucent,hidden:null!=t.hidden?{value:t.hidden,animated:r,transition:l}:null,networkActivityIndicatorVisible:t.networkActivityIndicatorVisible}}var v=(function(t){function e(){var t,r,u,i;(0,n.default)(this,e);for(var c=arguments.length,s=new Array(c),f=0;f is only supported on iOS.'),null)}}])})(c.Component),p=u.default.create({container:{position:'absolute'}});m.exports=s}),351,[8,17,18,3,2,56,196,21,352,153,193]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.__INTERNAL_VIEW_CONFIG=void 0;r(d[0])(r(d[1]));var t=e.__INTERNAL_VIEW_CONFIG={uiViewClassName:'RCTInputAccessoryView',validAttributes:{backgroundColor:{process:r(d[2]).default}}};e.default=r(d[3]).get('RCTInputAccessoryView',(function(){return t}))}),352,[8,219,164,160]); +__d((function(g,_r,_i,a,m,_e,d){Object.defineProperty(_e,"__esModule",{value:!0}),_e.default=void 0;var e=_r(d[0])(_r(d[1])),t=_r(d[0])(_r(d[2])),o=_r(d[0])(_r(d[3])),n=_r(d[0])(_r(d[4])),r=_r(d[0])(_r(d[5])),i=_r(d[0])(_r(d[6])),u=_r(d[0])(_r(d[7])),s=_r(d[0])(_r(d[8])),l=_r(d[0])(_r(d[9])),f=_r(d[0])(_r(d[10])),c=_r(d[0])(_r(d[11])),h=_r(d[0])(_r(d[12])),y=_r(d[0])(_r(d[13])),p=(function(e,t){if("function"==typeof WeakMap)var o=new WeakMap,n=new WeakMap;return(function(e,t){if(!t&&e&&e.__esModule)return e;var r,i,u={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return u;if(r=t?n:o){if(r.has(e))return r.get(e);r.set(e,u)}for(var s in e)"default"!==s&&{}.hasOwnProperty.call(e,s)&&((i=(r=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,s))&&(i.get||i.set)?r(u,s,i):u[s]=e[s]);return u})(e,t)})(_r(d[14])),b=["behavior","children","contentContainerStyle","enabled","keyboardVerticalOffset","style","onLayout"];function _(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(_=function(){return!!e})()}var v=(function(v){function k(e){var n,u,l,f,c;return(0,o.default)(this,k),u=this,l=k,f=[e],l=(0,i.default)(l),(n=(0,r.default)(u,_()?Reflect.construct(l,f||[],(0,i.default)(u).constructor):l.apply(u,f)))._frame=null,n._keyboardEvent=null,n._subscriptions=[],n._initialFrameHeight=0,n._onKeyboardChange=function(e){n._keyboardEvent=e,n._updateBottomIfNecessary()},n._onLayout=(c=(0,t.default)((function*(e){var t=null==n._frame;n._frame=e.nativeEvent.layout,n._initialFrameHeight||(n._initialFrameHeight=n._frame.height),t&&(yield n._updateBottomIfNecessary()),n.props.onLayout&&n.props.onLayout(e)})),function(e){return c.apply(this,arguments)}),n._updateBottomIfNecessary=(0,t.default)((function*(){if(null!=n._keyboardEvent){var e=n._keyboardEvent,t=e.duration,o=e.easing,r=e.endCoordinates,i=yield n._relativeKeyboardHeight(r);n.state.bottom!==i&&(t&&o&&s.default.configureNext({duration:t>10?t:10,update:{duration:t>10?t:10,type:s.default.Types[o]||'keyboard'}}),n.setState({bottom:i}))}else n.setState({bottom:0})})),n.state={bottom:0},n.viewRef=p.createRef(),n}return(0,u.default)(k,v),(0,n.default)(k,[{key:"_relativeKeyboardHeight",value:(L=(0,t.default)((function*(e){var t,o=this._frame;if(!o||!e)return 0;if('ios'===f.default.OS&&0===e.screenY&&(yield c.default.prefersCrossFadeTransitions()))return 0;var n=e.screenY-(null!=(t=this.props.keyboardVerticalOffset)?t:0);return'height'===this.props.behavior?Math.max(this.state.bottom+o.y+o.height-n,0):Math.max(o.y+o.height-n,0)})),function(e){return L.apply(this,arguments)})},{key:"componentDidMount",value:function(){'ios'===f.default.OS?this._subscriptions=[y.default.addListener('keyboardWillChangeFrame',this._onKeyboardChange)]:this._subscriptions=[y.default.addListener('keyboardDidHide',this._onKeyboardChange),y.default.addListener('keyboardDidShow',this._onKeyboardChange)]}},{key:"componentWillUnmount",value:function(){this._subscriptions.forEach((function(e){e.remove()}))}},{key:"render",value:function(){var t=this.props,o=t.behavior,n=t.children,r=t.contentContainerStyle,i=t.enabled,u=void 0===i||i,s=(t.keyboardVerticalOffset,t.style),f=(t.onLayout,(0,e.default)(t,b)),c=!0===u?this.state.bottom:0;switch(o){case'height':var y;return null!=this._frame&&this.state.bottom>0&&(y={height:this._initialFrameHeight-c,flex:0}),(0,_r(d[15]).jsx)(h.default,Object.assign({ref:this.viewRef,style:l.default.compose(s,y),onLayout:this._onLayout},f,{children:n}));case'position':return(0,_r(d[15]).jsx)(h.default,Object.assign({ref:this.viewRef,style:s,onLayout:this._onLayout},f,{children:(0,_r(d[15]).jsx)(h.default,{style:l.default.compose(r,{bottom:c}),children:n})}));case'padding':return(0,_r(d[15]).jsx)(h.default,Object.assign({ref:this.viewRef,style:l.default.compose(s,{paddingBottom:c}),onLayout:this._onLayout},f,{children:n}));default:return(0,_r(d[15]).jsx)(h.default,Object.assign({ref:this.viewRef,onLayout:this._onLayout,style:s},f,{children:n}))}}}]);var L})(p.Component);_e.default=v}),353,[8,119,313,17,18,3,2,56,331,196,21,7,156,330,153,193]); +__d((function(g,r,i,a,m,_e,d){var t,e=r(d[0])(r(d[1])),n=r(d[0])(r(d[2])),o=r(d[0])(r(d[3])),s=r(d[0])(r(d[4])),l=r(d[0])(r(d[5])),p=r(d[0])(r(d[6])),u=(r(d[0])(r(d[7])),r(d[0])(r(d[8]))),c=(r(d[0])(r(d[9])),r(d[0])(r(d[10])));function h(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(t){}return(h=function(){return!!t})()}var f=r(d[11]),v=0,y=(function(t){function e(t){var o,p,u,c;return(0,n.default)(this,e),p=this,u=e,c=[t],u=(0,l.default)(u),(o=(0,s.default)(p,h()?Reflect.construct(u,c||[],(0,l.default)(p).constructor):u.apply(p,c)))._identifier=v++,o}return(0,p.default)(e,t),(0,o.default)(e,[{key:"componentDidMount",value:function(){}},{key:"componentWillUnmount",value:function(){this._eventSubscription&&this._eventSubscription.remove()}},{key:"componentDidUpdate",value:function(){}},{key:"render",value:function(){var t=this;if(!0!==this.props.visible)return null;var e={backgroundColor:!0===this.props.transparent?'transparent':'white'},n=this.props.animationType||'none',o=this.props.presentationStyle;o||(o='fullScreen',!0===this.props.transparent&&(o='overFullScreen'));var s=this.props.children;return(0,r(d[12]).jsx)(c.default,{animationType:n,presentationStyle:o,transparent:this.props.transparent,hardwareAccelerated:this.props.hardwareAccelerated,onRequestClose:this.props.onRequestClose,onShow:this.props.onShow,onDismiss:function(){t.props.onDismiss&&t.props.onDismiss()},visible:this.props.visible,statusBarTranslucent:this.props.statusBarTranslucent,identifier:this._identifier,style:b.modal,onStartShouldSetResponder:this._shouldSetResponder,supportedOrientations:this.props.supportedOrientations,onOrientationChange:this.props.onOrientationChange,testID:this.props.testID,children:(0,r(d[12]).jsx)(r(d[13]).VirtualizedListContextResetter,{children:(0,r(d[12]).jsx)(r(d[14]).Context.Provider,{value:null,children:(0,r(d[12]).jsx)(r(d[15]),{style:[b.container,e],collapsable:!1,children:s})})})})}},{key:"_shouldSetResponder",value:function(){return!0}}])})(f.Component);y.defaultProps={visible:!0,hardwareAccelerated:!1},y.contextType=r(d[16]).RootTagContext;var S=r(d[17]).getConstants().isRTL?'right':'left',b=r(d[18]).create({modal:{position:'absolute'},container:(0,e.default)((0,e.default)((0,e.default)({},S,0),"top",0),"flex",1)}),x=null!=(t=u.default.unstable_Modal)?t:y;m.exports=x}),354,[8,170,17,18,3,2,56,111,355,356,357,153,193,297,325,156,197,358,196]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;e.default={unstable_Modal:null}}),355,[]); +__d((function(g,_r,_i,a,m,_e,d){Object.defineProperty(_e,"__esModule",{value:!0}),_e.default=void 0;var e=(function(e,t){if("function"==typeof WeakMap)var r=new WeakMap,n=new WeakMap;return(function(e,t){if(!t&&e&&e.__esModule)return e;var o,f,u={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return u;if(o=t?n:r){if(o.has(e))return o.get(e);o.set(e,u)}for(var i in e)"default"!==i&&{}.hasOwnProperty.call(e,i)&&((f=(o=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,i))&&(f.get||f.set)?o(u,i,f):u[i]=e[i]);return u})(e,t)})(_r(d[0]));_e.default=e.get('ModalManager')}),356,[23]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.__INTERNAL_VIEW_CONFIG=void 0;r(d[0])(r(d[1]));var t=e.__INTERNAL_VIEW_CONFIG={uiViewClassName:'RCTModalHostView',directEventTypes:{topRequestClose:{registrationName:'onRequestClose'},topShow:{registrationName:'onShow'},topDismiss:{registrationName:'onDismiss'},topOrientationChange:{registrationName:'onOrientationChange'}},validAttributes:Object.assign({animationType:!0,presentationStyle:!0,transparent:!0,statusBarTranslucent:!0,hardwareAccelerated:!0,visible:!0,animated:!0,supportedOrientations:!0,identifier:!0},r(d[2]).ConditionallyIgnoredEventHandlers({onRequestClose:!0,onShow:!0,onDismiss:!0,onOrientationChange:!0}))};e.default=r(d[3]).get('RCTModalHostView',(function(){return t}))}),357,[8,219,189,160]); +__d((function(g,r,i,a,m,e,d){var t=r(d[0])(r(d[1])),n=(function(){if(t.default){var n=t.default.getConstants();return{isRTL:n.isRTL,doLeftAndRightSwapInRTL:n.doLeftAndRightSwapInRTL,localeIdentifier:n.localeIdentifier}}return{isRTL:!1,doLeftAndRightSwapInRTL:!0}})();m.exports={getConstants:function(){return n},allowRTL:function(n){t.default&&t.default.allowRTL(n)},forceRTL:function(n){t.default&&t.default.forceRTL(n)},swapLeftAndRightInRTL:function(n){t.default&&t.default.swapLeftAndRightInRTL(n)},isRTL:n.isRTL,doLeftAndRightSwapInRTL:n.doLeftAndRightSwapInRTL}}),358,[8,359]); +__d((function(g,_r,_i,a,m,_e,d){Object.defineProperty(_e,"__esModule",{value:!0}),_e.default=void 0;var e=(function(e,t){if("function"==typeof WeakMap)var r=new WeakMap,n=new WeakMap;return(function(e,t){if(!t&&e&&e.__esModule)return e;var f,o,u={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return u;if(f=t?n:r){if(f.has(e))return f.get(e);f.set(e,u)}for(var i in e)"default"!==i&&{}.hasOwnProperty.call(e,i)&&((o=(f=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,i))&&(o.get||o.set)?f(u,i,o):u[i]=e[i]);return u})(e,t)})(_r(d[0]));_e.default=e.get('I18nManager')}),359,[23]); +__d((function(g,_r,_i,a,m,_e,d){Object.defineProperty(_e,"__esModule",{value:!0}),_e.default=void 0;var e=_r(d[0])(_r(d[1])),l=_r(d[0])(_r(d[2])),n=_r(d[0])(_r(d[3])),s=_r(d[0])(_r(d[4])),i=_r(d[0])(_r(d[5])),t=(function(e,l){if("function"==typeof WeakMap)var n=new WeakMap,s=new WeakMap;return(function(e,l){if(!l&&e&&e.__esModule)return e;var i,t,r={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return r;if(i=l?s:n){if(i.has(e))return i.get(e);i.set(e,r)}for(var o in e)"default"!==o&&{}.hasOwnProperty.call(e,o)&&((t=(i=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,o))&&(t.get||t.set)?i(r,o,t):r[o]=e[o]);return r})(e,l)})(_r(d[6])),r=t,o=["accessible","accessibilityState","aria-live","android_disableSound","android_ripple","aria-busy","aria-checked","aria-disabled","aria-expanded","aria-label","aria-selected","cancelable","children","delayHoverIn","delayHoverOut","delayLongPress","disabled","focusable","hitSlop","onHoverIn","onHoverOut","onLongPress","onPress","onPressIn","onPressOut","pressRetentionOffset","style","testOnly_pressed","unstable_pressDelay"];function u(l){var n=(0,t.useState)(!1),s=(0,e.default)(n,2);return[s[0]||l,s[1]]}var c=r.memo(r.forwardRef((function(r,c){var b,f,v,y,p,P,O,_,I,h=r.accessible,H=r.accessibilityState,w=r['aria-live'],x=r.android_disableSound,S=r.android_ripple,L=r['aria-busy'],M=r['aria-checked'],j=r['aria-disabled'],k=r['aria-expanded'],R=r['aria-label'],V=r['aria-selected'],D=r.cancelable,W=r.children,N=r.delayHoverIn,q=r.delayHoverOut,z=r.delayLongPress,A=r.disabled,B=r.focusable,C=r.hitSlop,E=r.onHoverIn,F=r.onHoverOut,G=r.onLongPress,J=r.onPress,K=r.onPressIn,Q=r.onPressOut,T=r.pressRetentionOffset,U=r.style,X=r.testOnly_pressed,Y=r.unstable_pressDelay,Z=(0,l.default)(r,o),$=(0,t.useRef)(null);(0,t.useImperativeHandle)(c,(function(){return $.current}));var ee=(0,i.default)(S,$),le=u(!0===X),ae=(0,e.default)(le,2),ne=ae[0],se=ae[1],ie={busy:null!=L?L:null==H?void 0:H.busy,checked:null!=M?M:null==H?void 0:H.checked,disabled:null!=j?j:null==H?void 0:H.disabled,expanded:null!=k?k:null==H?void 0:H.expanded,selected:null!=V?V:null==H?void 0:H.selected};ie=null!=A?Object.assign({},ie,{disabled:A}):ie;var te={max:null!=(b=r['aria-valuemax'])?b:null==(f=r.accessibilityValue)?void 0:f.max,min:null!=(v=r['aria-valuemin'])?v:null==(y=r.accessibilityValue)?void 0:y.min,now:null!=(p=r['aria-valuenow'])?p:null==(P=r.accessibilityValue)?void 0:P.now,text:null!=(O=r['aria-valuetext'])?O:null==(_=r.accessibilityValue)?void 0:_.text},re='off'===w?'none':null!=w?w:r.accessibilityLiveRegion,oe=null!=R?R:r.accessibilityLabel,ue=Object.assign({},Z,null==ee?void 0:ee.viewProps,{accessible:!1!==h,accessibilityViewIsModal:null!=(I=Z['aria-modal'])?I:Z.accessibilityViewIsModal,accessibilityLiveRegion:re,accessibilityLabel:oe,accessibilityState:ie,focusable:!1!==B,accessibilityValue:te,hitSlop:C}),de=(0,t.useMemo)((function(){return{cancelable:D,disabled:A,hitSlop:C,pressRectOffset:T,android_disableSound:x,delayHoverIn:N,delayHoverOut:q,delayLongPress:z,delayPressIn:Y,onHoverIn:E,onHoverOut:F,onLongPress:G,onPress:J,onPressIn:function(e){null!=ee&&ee.onPressIn(e),se(!0),null!=K&&K(e)},onPressMove:null==ee?void 0:ee.onPressMove,onPressOut:function(e){null!=ee&&ee.onPressOut(e),se(!1),null!=Q&&Q(e)}}}),[x,ee,D,N,q,z,A,C,E,F,G,J,K,Q,T,se,Y]),ce=(0,n.default)(de);return(0,_r(d[7]).jsxs)(s.default,Object.assign({},ue,ce,{ref:$,style:'function'==typeof U?U({pressed:ne}):U,collapsable:!1,children:['function'==typeof W?W({pressed:ne}):W,null]}))})));c.displayName='Pressable';_e.default=c}),360,[8,26,119,226,156,361,153,193]); +__d((function(g,_r,_i,a,m,_e,d){Object.defineProperty(_e,"__esModule",{value:!0}),_e.default=function(o,l){var u=null!=o?o:{},i=u.color,s=u.borderless,f=u.radius,c=u.foreground;return(0,t.useMemo)((function(){if('android'===n.default.OS&&n.default.Version>=21&&(null!=i||null!=s||null!=f)){var t=(0,e.default)(i);(0,r.default)(null==t||'number'==typeof t,'Unexpected color given for Ripple color');var o={type:'RippleAndroid',color:t,borderless:!0===s,rippleRadius:f};return{viewProps:!0===c?{nativeForegroundAndroid:o}:{nativeBackgroundAndroid:o},onPressIn:function(e){var n,r,t=l.current;null!=t&&(_r(d[6]).Commands.hotspotUpdate(t,null!=(n=e.nativeEvent.locationX)?n:0,null!=(r=e.nativeEvent.locationY)?r:0),_r(d[6]).Commands.setPressed(t,!0))},onPressMove:function(e){var n,r,t=l.current;null!=t&&_r(d[6]).Commands.hotspotUpdate(t,null!=(n=e.nativeEvent.locationX)?n:0,null!=(r=e.nativeEvent.locationY)?r:0)},onPressOut:function(e){var n=l.current;null!=n&&_r(d[6]).Commands.setPressed(n,!1)}}}return null}),[s,i,c,f,l])};var e=_r(d[0])(_r(d[1])),n=_r(d[0])(_r(d[2])),r=(_r(d[0])(_r(d[3])),_r(d[0])(_r(d[4]))),t=(function(e,n){if("function"==typeof WeakMap)var r=new WeakMap,t=new WeakMap;return(function(e,n){if(!n&&e&&e.__esModule)return e;var o,l,u={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return u;if(o=n?t:r){if(o.has(e))return o.get(e);o.set(e,u)}for(var i in e)"default"!==i&&{}.hasOwnProperty.call(e,i)&&((l=(o=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,i))&&(l.get||l.set)?o(u,i,l):u[i]=e[i]);return u})(e,n)})(_r(d[5]))}),361,[8,164,21,156,24,153,159]); +__d((function(g,_r,_i,a,m,_e,d){Object.defineProperty(_e,"__esModule",{value:!0}),_e.default=void 0;var e,t=_r(d[0])(_r(d[1])),f=_r(d[0])(_r(d[2]));!(function(e,t){if("function"==typeof WeakMap)var f=new WeakMap,n=new WeakMap;(function(e,t){if(!t&&e&&e.__esModule)return e;var r,o,u={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return u;if(r=t?n:f){if(r.has(e))return r.get(e);r.set(e,u)}for(var i in e)"default"!==i&&{}.hasOwnProperty.call(e,i)&&((o=(r=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,i))&&(o.get||o.set)?r(u,i,o):u[i]=e[i])})(e,t)})(_r(d[3]));e='android'===t.default.OS?f.default:_r(d[4]).default;_e.default=e}),362,[8,21,156,153,363]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.__INTERNAL_VIEW_CONFIG=void 0;r(d[0])(r(d[1]));var _=e.__INTERNAL_VIEW_CONFIG={uiViewClassName:'RCTSafeAreaView',validAttributes:{}};e.default=r(d[2]).get('RCTSafeAreaView',(function(){return _}))}),363,[8,219,160]); +__d((function(g,_r,_i,a,m,_e,d){Object.defineProperty(_e,"__esModule",{value:!0}),_e.default=void 0;var e=_r(d[0])(_r(d[1])),t=_r(d[0])(_r(d[2])),l=_r(d[0])(_r(d[3])),n=_r(d[0])(_r(d[4])),o=_r(d[0])(_r(d[5])),r=c(_r(d[6])),u=c(_r(d[7])),i=c(_r(d[8])),s=["disabled","ios_backgroundColor","onChange","onValueChange","style","thumbColor","trackColor","value"];function c(e,t){if("function"==typeof WeakMap)var l=new WeakMap,n=new WeakMap;return(c=function(e,t){if(!t&&e&&e.__esModule)return e;var o,r,u={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return u;if(o=t?n:l){if(o.has(e))return o.get(e);o.set(e,u)}for(var i in e)"default"!==i&&{}.hasOwnProperty.call(e,i)&&((r=(o=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,i))&&(r.get||r.set)?o(u,i,r):u[i]=e[i]);return u})(e,t)}var f=function(){return!1},v=function(){return!0},b=i.forwardRef((function(c,b){var C=c.disabled,h=c.ios_backgroundColor,p=c.onChange,y=c.onValueChange,R=c.style,_=c.thumbColor,k=c.trackColor,S=c.value,O=(0,t.default)(c,s),j=null==k?void 0:k.false,w=null==k?void 0:k.true,T=i.useRef(null),M=(0,o.default)(T,b),P=i.useState({value:null}),V=(0,e.default)(P,2),E=V[0],F=V[1],W=function(e){null==p||p(e),null==y||y(e.nativeEvent.value),F({value:e.nativeEvent.value})};if(i.useLayoutEffect((function(){var e,t=!0===S;null!=E.value&&E.value!==t&&null!=(null==(e=T.current)?void 0:e.setNativeProps)&&('android'===n.default.OS?r.Commands.setNativeValue(T.current,t):u.Commands.setValue(T.current,t))}),[S,E]),'android'===n.default.OS){var q,x=O.accessibilityState,N=null!=C?C:null==x?void 0:x.disabled,D={accessibilityState:N!==(null==x?void 0:x.disabled)?Object.assign({},x,{disabled:N}):x,enabled:!0!==N,on:!0===S,style:R,thumbTintColor:_,trackColorForFalse:j,trackColorForTrue:w,trackTintColor:!0===S?w:j};return(0,_r(d[9]).jsx)(r.default,Object.assign({},O,D,{accessibilityRole:null!=(q=c.accessibilityRole)?q:'switch',onChange:W,onResponderTerminationRequest:f,onStartShouldSetResponder:v,ref:M}))}var L,z={disabled:C,onTintColor:w,style:l.default.compose({height:31,width:51},l.default.compose(R,null==h?null:{backgroundColor:h,borderRadius:16})),thumbTintColor:_,tintColor:j,value:!0===S};return(0,_r(d[9]).jsx)(u.default,Object.assign({},O,z,{accessibilityRole:null!=(L=c.accessibilityRole)?L:'switch',onChange:W,onResponderTerminationRequest:f,onStartShouldSetResponder:v,ref:M}))}));_e.default=b}),364,[8,26,119,196,21,277,365,366,153,193]); +__d((function(g,_r,_i,a,m,_e,d){Object.defineProperty(_e,"__esModule",{value:!0}),_e.default=_e.__INTERNAL_VIEW_CONFIG=_e.Commands=void 0;_r(d[0])(_r(d[1])),_r(d[0])(_r(d[2])),(function(e,t){if("function"==typeof WeakMap)var o=new WeakMap,n=new WeakMap;(function(e,t){if(!t&&e&&e.__esModule)return e;var r,i,u={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return u;if(r=t?n:o){if(r.has(e))return r.get(e);r.set(e,u)}for(var l in e)"default"!==l&&{}.hasOwnProperty.call(e,l)&&((i=(r=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,l))&&(i.get||i.set)?r(u,l,i):u[l]=e[l])})(e,t)})(_r(d[3]));var e=_e.__INTERNAL_VIEW_CONFIG={uiViewClassName:'AndroidSwitch',bubblingEventTypes:{topChange:{phasedRegistrationNames:{captured:'onChangeCapture',bubbled:'onChange'}}},validAttributes:Object.assign({disabled:!0,enabled:!0,thumbColor:{process:_r(d[4]).default},trackColorForFalse:{process:_r(d[4]).default},trackColorForTrue:{process:_r(d[4]).default},value:!0,on:!0,thumbTintColor:{process:_r(d[4]).default},trackTintColor:{process:_r(d[4]).default}},_r(d[5]).ConditionallyIgnoredEventHandlers({onChange:!0}))};_e.default=_r(d[6]).get('AndroidSwitch',(function(){return e})),_e.Commands={setNativeValue:function(e,t){_r(d[7]).dispatchCommand(e,"setNativeValue",[t])}}}),365,[8,192,219,153,164,189,160,47]); +__d((function(g,_r,_i,a,m,_e,d){Object.defineProperty(_e,"__esModule",{value:!0}),_e.default=_e.__INTERNAL_VIEW_CONFIG=_e.Commands=void 0;_r(d[0])(_r(d[1])),_r(d[0])(_r(d[2])),(function(e,t){if("function"==typeof WeakMap)var o=new WeakMap,n=new WeakMap;(function(e,t){if(!t&&e&&e.__esModule)return e;var r,u,l={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return l;if(r=t?n:o){if(r.has(e))return r.get(e);r.set(e,l)}for(var s in e)"default"!==s&&{}.hasOwnProperty.call(e,s)&&((u=(r=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,s))&&(u.get||u.set)?r(l,s,u):l[s]=e[s])})(e,t)})(_r(d[3]));var e=_e.__INTERNAL_VIEW_CONFIG={uiViewClassName:'RCTSwitch',bubblingEventTypes:{topChange:{phasedRegistrationNames:{captured:'onChangeCapture',bubbled:'onChange'}}},validAttributes:Object.assign({disabled:!0,value:!0,tintColor:{process:_r(d[4]).default},onTintColor:{process:_r(d[4]).default},thumbTintColor:{process:_r(d[4]).default},thumbColor:{process:_r(d[4]).default},trackColorForFalse:{process:_r(d[4]).default},trackColorForTrue:{process:_r(d[4]).default}},_r(d[5]).ConditionallyIgnoredEventHandlers({onChange:!0}))};_e.default=_r(d[6]).get('RCTSwitch',(function(){return e})),_e.Commands={setValue:function(e,t){_r(d[7]).dispatchCommand(e,"setValue",[t])}}}),366,[8,192,219,153,164,189,160,47]); +__d((function(g,_r,_i,a,m,_e,d){var e,n,t,l,u,o,r=_r(d[0])(_r(d[1])),i=_r(d[0])(_r(d[2])),s=_r(d[0])(_r(d[3])),c=_r(d[0])(_r(d[4])),f=_r(d[0])(_r(d[5])),p=_r(d[0])(_r(d[6])),y=_r(d[0])(_r(d[7])),b=_r(d[0])(_r(d[8])),v=_r(d[0])(_r(d[9])),h=_r(d[0])(_r(d[10])),S=_r(d[0])(_r(d[11])),x=_r(d[0])(_r(d[12])),C=(function(e,n){if("function"==typeof WeakMap)var t=new WeakMap,l=new WeakMap;return(function(e,n){if(!n&&e&&e.__esModule)return e;var u,o,r={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return r;if(u=n?l:t){if(u.has(e))return u.get(e);u.set(e,r)}for(var i in e)"default"!==i&&{}.hasOwnProperty.call(e,i)&&((o=(u=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,i))&&(o.get||o.set)?u(r,i,o):r[i]=e[i]);return r})(e,n)})(_r(d[13])),T=C,I=["aria-busy","aria-checked","aria-disabled","aria-expanded","aria-selected","accessibilityState","id","tabIndex","selection"],w=["onBlur","onFocus"],O=["allowFontScaling","rejectResponderTermination","underlineColorAndroid","autoComplete","textContentType","readOnly","editable","enterKeyHint","returnKeyType","inputMode","showSoftInputOnFocus","keyboardType"];'android'===b.default.OS?(e=_r(d[14]).default,n=_r(d[14]).Commands):'ios'===b.default.OS&&(t=_r(d[15]).default,l=_r(d[15]).Commands,u=_r(d[16]).default,o=_r(d[16]).Commands);var F=function(){return!0};function j(f){var O,j,A,R=f['aria-busy'],k=f['aria-checked'],P=f['aria-disabled'],B=f['aria-expanded'],E=f['aria-selected'],L=f.accessibilityState,N=f.id,z=f.tabIndex,D=f.selection,K=(0,i.default)(f,I),M=(0,C.useRef)(null),H=null==D?null:{start:D.start,end:null!=(O=D.end)?O:D.start},V=(0,C.useState)(0),U=(0,r.default)(V,2),W=U[0],q=U[1],G=(0,C.useState)(f.value),J=(0,r.default)(G,2),Q=J[0],X=J[1],Y=(0,C.useState)({selection:H,mostRecentEventCount:W}),Z=(0,r.default)(Y,2),$=Z[0],ee=Z[1],ne=$.selection;A=n||(!0===f.multiline?o:l);var te='string'==typeof f.value?f.value:'string'==typeof f.defaultValue?f.defaultValue:'';(0,C.useLayoutEffect)((function(){var e,n,t={};(Q!==f.value&&'string'==typeof f.value&&(t.text=f.value,X(f.value)),H&&ne&&(ne.start!==H.start||ne.end!==H.end)&&(t.selection=H,ee({selection:H,mostRecentEventCount:W})),0!==Object.keys(t).length)&&(null!=M.current&&A.setTextAndSelection(M.current,W,te,null!=(e=null==H?void 0:H.start)?e:-1,null!=(n=null==H?void 0:H.end)?n:-1))}),[W,M,f.value,f.defaultValue,Q,H,ne,te,A]),(0,C.useLayoutEffect)((function(){var e=M.current;if(null!=e)return h.default.registerInput(e),function(){h.default.unregisterInput(e),h.default.currentlyFocusedInput()===e&&(0,x.default)(e).blur()}}),[M]);var le,ae=(0,C.useCallback)((function(e){M.current=e,null!=e&&Object.assign(e,{clear:function(){null!=M.current&&A.setTextAndSelection(M.current,W,'',0,0)},isFocused:function(){return h.default.currentlyFocusedInput()===M.current},getNativeRef:function(){return M.current},setSelection:function(e,n){null!=M.current&&A.setTextAndSelection(M.current,W,null,e,n)}})}),[W,A]),ue=(0,v.default)(ae,f.forwardedRef),oe=function(e){var n=e.nativeEvent.text;f.onChange&&f.onChange(e),f.onChangeText&&f.onChangeText(n),null!=M.current&&(X(n),q(e.nativeEvent.eventCount))},re=function(e){f.onSelectionChange&&f.onSelectionChange(e),null!=M.current&&ee({selection:e.nativeEvent.selection,mostRecentEventCount:W})},ie=function(e){h.default.focusInput(M.current),f.onFocus&&f.onFocus(e)},de=function(e){h.default.blurInput(M.current),f.onBlur&&f.onBlur(e)},se=function(e){f.onScroll&&f.onScroll(e)},ce=null,fe=null!=(j=f.multiline)&&j;le=null!=f.submitBehavior?fe||'newline'!==f.submitBehavior?f.submitBehavior:'blurAndSubmit':fe?!0===f.blurOnSubmit?'blurAndSubmit':'newline':!1!==f.blurOnSubmit?'blurAndSubmit':'submit';var pe=!1!==f.accessible,me=!1!==f.focusable,ye=T.useMemo((function(){return{onPress:function(e){!1!==f.editable&&null!=M.current&&M.current.focus()},onPressIn:f.onPressIn,onPressOut:f.onPressOut,cancelable:'ios'===b.default.OS?!f.rejectResponderTermination:null}}),[f.editable,f.onPressIn,f.onPressOut,f.rejectResponderTermination]),be=f.caretHidden;b.default.isTesting&&(be=!0);var ve,he=(0,s.default)(ye)||{},ge=(he.onBlur,he.onFocus,(0,i.default)(he,w));null==L&&null==R&&null==k&&null==P&&null==B&&null==E||(ve={busy:null!=R?R:null==L?void 0:L.busy,checked:null!=k?k:null==L?void 0:L.checked,disabled:null!=P?P:null==L?void 0:L.disabled,expanded:null!=B?B:null==L?void 0:L.expanded,selected:null!=E?E:null==L?void 0:L.selected});var Se=(0,c.default)(f.style);if('ios'===b.default.OS){var xe=!0===f.multiline?u:t;Se=!0===f.multiline?[_.multilineInput,Se]:Se;var Ce=(f.unstable_onChangeSync||f.unstable_onChangeTextSync)&&!(f.onChange||f.onChangeText);ce=(0,_r(d[17]).jsx)(xe,Object.assign({ref:ue},K,ge,{accessibilityState:ve,accessible:pe,submitBehavior:le,caretHidden:be,dataDetectorTypes:f.dataDetectorTypes,focusable:void 0!==z?!z:me,mostRecentEventCount:W,nativeID:null!=N?N:f.nativeID,onBlur:de,onKeyPressSync:f.unstable_onKeyPressSync,onChange:oe,onChangeSync:!0===Ce?function(e){var n=e.nativeEvent.text;f.unstable_onChangeSync&&f.unstable_onChangeSync(e),f.unstable_onChangeTextSync&&f.unstable_onChangeTextSync(n),null!=M.current&&(X(n),q(e.nativeEvent.eventCount))}:null,onContentSizeChange:f.onContentSizeChange,onFocus:ie,onScroll:se,onSelectionChange:re,onSelectionChangeShouldSetResponder:F,selection:H,style:Se,text:te}))}else if('android'===b.default.OS){var Te,Ie,we,Oe=f.autoCapitalize||'sentences',Fe=null!=(Te=null==f?void 0:f['aria-labelledby'])?Te:null==f?void 0:f.accessibilityLabelledBy,je=null!=(Ie=f.placeholder)?Ie:'',Ae=f.children,Re=T.Children.count(Ae);(0,S.default)(!(null!=f.value&&Re),'Cannot specify both value and children.'),Re>1&&(Ae=(0,_r(d[17]).jsx)(p.default,{children:Ae})),ce=(0,_r(d[17]).jsx)(e,Object.assign({ref:ue},K,ge,{accessibilityState:ve,accessibilityLabelledBy:Fe,accessible:pe,autoCapitalize:Oe,submitBehavior:le,caretHidden:be,children:Ae,disableFullscreenUI:f.disableFullscreenUI,focusable:void 0!==z?!z:me,mostRecentEventCount:W,nativeID:null!=N?N:f.nativeID,numberOfLines:null!=(we=f.rows)?we:f.numberOfLines,onBlur:de,onChange:oe,onFocus:ie,onScroll:se,onSelectionChange:re,placeholder:je,style:Se,text:te,textBreakStrategy:f.textBreakStrategy}))}return(0,_r(d[17]).jsx)(y.default.Provider,{value:!0,children:ce})}var A={enter:'default',done:'done',go:'go',next:'next',previous:'previous',search:'search',send:'send'},R={none:'default',text:'default',decimal:'decimal-pad',numeric:'number-pad',tel:'phone-pad',search:'ios'===b.default.OS?'web-search':'default',email:'email-address',url:'url'},k={'address-line1':'postal-address-region','address-line2':'postal-address-locality',bday:'birthdate-full','bday-day':'birthdate-day','bday-month':'birthdate-month','bday-year':'birthdate-year','cc-csc':'cc-csc','cc-exp':'cc-exp','cc-exp-month':'cc-exp-month','cc-exp-year':'cc-exp-year','cc-number':'cc-number',country:'postal-address-country','current-password':'password',email:'email','honorific-prefix':'name-prefix','honorific-suffix':'name-suffix',name:'name','additional-name':'name-middle','family-name':'name-family','given-name':'name-given','new-password':'password-new',off:'off','one-time-code':'sms-otp','postal-code':'postal-code',sex:'gender','street-address':'street-address',tel:'tel','tel-country-code':'tel-country-code','tel-national':'tel-national',username:'username'},P={'address-line1':'streetAddressLine1','address-line2':'streetAddressLine2','cc-number':'creditCardNumber','current-password':'password',country:'countryName',email:'emailAddress',name:'name','additional-name':'middleName','family-name':'familyName','given-name':'givenName',nickname:'nickname','honorific-prefix':'namePrefix','honorific-suffix':'nameSuffix','new-password':'newPassword',off:'none','one-time-code':'oneTimeCode',organization:'organizationName','organization-title':'jobTitle','postal-code':'postalCode','street-address':'fullStreetAddress',tel:'telephoneNumber',url:'URL',username:'username'},B=T.forwardRef((function(e,n){var t,l=e.allowFontScaling,u=void 0===l||l,o=e.rejectResponderTermination,r=void 0===o||o,s=e.underlineColorAndroid,f=void 0===s?'transparent':s,p=e.autoComplete,y=e.textContentType,v=e.readOnly,h=e.editable,S=e.enterKeyHint,x=e.returnKeyType,C=e.inputMode,T=e.showSoftInputOnFocus,I=e.keyboardType,w=(0,i.default)(e,O),F=(0,c.default)(w.style);return null!=(null==F?void 0:F.verticalAlign)&&(F.textAlignVertical=E[F.verticalAlign],delete F.verticalAlign),(0,_r(d[17]).jsx)(j,Object.assign({allowFontScaling:u,rejectResponderTermination:r,underlineColorAndroid:f,editable:void 0!==v?!v:h,returnKeyType:S?A[S]:x,keyboardType:C?R[C]:I,showSoftInputOnFocus:null==C?T:'none'!==C,autoComplete:'android'===b.default.OS?null!=(t=k[p])?t:p:void 0,textContentType:null!=y?y:'ios'===b.default.OS&&p&&p in P?P[p]:y},w,{forwardedRef:n,style:F}))}));B.displayName='TextInput',B.propTypes=_r(d[18]).TextInputPropTypes,B.State={currentlyFocusedInput:h.default.currentlyFocusedInput,currentlyFocusedField:h.default.currentlyFocusedField,focusTextInput:h.default.focusTextInput,blurTextInput:h.default.blurTextInput};var _=f.default.create({multilineInput:{paddingTop:5}}),E={auto:'auto',top:'top',bottom:'bottom',middle:'center'};m.exports=B}),367,[8,26,119,226,157,196,224,158,21,277,204,24,38,153,205,368,370,193,234]); +__d((function(g,_r,_i,a,m,_e,d){Object.defineProperty(_e,"__esModule",{value:!0}),_e.default=_e.__INTERNAL_VIEW_CONFIG=_e.Commands=void 0;var e=(function(e,t){if("function"==typeof WeakMap)var n=new WeakMap,r=new WeakMap;return(function(e,t){if(!t&&e&&e.__esModule)return e;var u,o,i={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return i;if(u=t?r:n){if(u.has(e))return u.get(e);u.set(e,i)}for(var f in e)"default"!==f&&{}.hasOwnProperty.call(e,f)&&((o=(u=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,f))&&(o.get||o.set)?u(i,f,o):i[f]=e[f]);return i})(e,t)})(_r(d[0])),t=_r(d[1])(_r(d[2])),n=_r(d[1])(_r(d[3]));_e.Commands=(0,t.default)({supportedCommands:['focus','blur','setTextAndSelection']});var r=_e.__INTERNAL_VIEW_CONFIG=Object.assign({uiViewClassName:'RCTSinglelineTextInputView'},n.default),u=e.get('RCTSinglelineTextInputView',(function(){return r}));_e.default=u}),368,[160,8,192,369]); +__d((function(g,r,i,a,m,e,d){var t={bubblingEventTypes:{topBlur:{phasedRegistrationNames:{bubbled:'onBlur',captured:'onBlurCapture'}},topChange:{phasedRegistrationNames:{bubbled:'onChange',captured:'onChangeCapture'}},topContentSizeChange:{phasedRegistrationNames:{captured:'onContentSizeChangeCapture',bubbled:'onContentSizeChange'}},topEndEditing:{phasedRegistrationNames:{bubbled:'onEndEditing',captured:'onEndEditingCapture'}},topFocus:{phasedRegistrationNames:{bubbled:'onFocus',captured:'onFocusCapture'}},topKeyPress:{phasedRegistrationNames:{bubbled:'onKeyPress',captured:'onKeyPressCapture'}},topSubmitEditing:{phasedRegistrationNames:{bubbled:'onSubmitEditing',captured:'onSubmitEditingCapture'}},topTouchCancel:{phasedRegistrationNames:{bubbled:'onTouchCancel',captured:'onTouchCancelCapture'}},topTouchEnd:{phasedRegistrationNames:{bubbled:'onTouchEnd',captured:'onTouchEndCapture'}},topTouchMove:{phasedRegistrationNames:{bubbled:'onTouchMove',captured:'onTouchMoveCapture'}}},directEventTypes:{topTextInput:{registrationName:'onTextInput'},topKeyPressSync:{registrationName:'onKeyPressSync'},topScroll:{registrationName:'onScroll'},topSelectionChange:{registrationName:'onSelectionChange'},topChangeSync:{registrationName:'onChangeSync'}},validAttributes:Object.assign({fontSize:!0,fontWeight:!0,fontVariant:!0,textShadowOffset:{diff:r(d[0])},allowFontScaling:!0,fontStyle:!0,textTransform:!0,textAlign:!0,fontFamily:!0,lineHeight:!0,isHighlighted:!0,writingDirection:!0,textDecorationLine:!0,textShadowRadius:!0,letterSpacing:!0,textDecorationStyle:!0,textDecorationColor:{process:r(d[1]).default},color:{process:r(d[1]).default},maxFontSizeMultiplier:!0,textShadowColor:{process:r(d[1]).default},editable:!0,inputAccessoryViewID:!0,caretHidden:!0,enablesReturnKeyAutomatically:!0,placeholderTextColor:{process:r(d[1]).default},clearButtonMode:!0,keyboardType:!0,selection:!0,returnKeyType:!0,submitBehavior:!0,mostRecentEventCount:!0,scrollEnabled:!0,selectionColor:{process:r(d[1]).default},contextMenuHidden:!0,secureTextEntry:!0,placeholder:!0,autoCorrect:!0,multiline:!0,textContentType:!0,maxLength:!0,autoCapitalize:!0,keyboardAppearance:!0,passwordRules:!0,spellCheck:!0,selectTextOnFocus:!0,text:!0,clearTextOnFocus:!0,showSoftInputOnFocus:!0,autoFocus:!0,lineBreakStrategyIOS:!0},(0,r(d[2]).ConditionallyIgnoredEventHandlers)({onChange:!0,onSelectionChange:!0,onContentSizeChange:!0,onScroll:!0,onChangeSync:!0,onKeyPressSync:!0,onTextInput:!0}))};m.exports=t}),369,[171,164,189]); +__d((function(g,_r,_i,a,m,_e,d){Object.defineProperty(_e,"__esModule",{value:!0}),_e.default=_e.__INTERNAL_VIEW_CONFIG=_e.Commands=void 0;var e=(function(e,t){if("function"==typeof WeakMap)var n=new WeakMap,r=new WeakMap;return(function(e,t){if(!t&&e&&e.__esModule)return e;var u,i,o={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return o;if(u=t?r:n){if(u.has(e))return u.get(e);u.set(e,o)}for(var f in e)"default"!==f&&{}.hasOwnProperty.call(e,f)&&((i=(u=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,f))&&(i.get||i.set)?u(o,f,i):o[f]=e[f]);return o})(e,t)})(_r(d[0])),t=_r(d[1])(_r(d[2])),n=_r(d[1])(_r(d[3]));_e.Commands=(0,t.default)({supportedCommands:['focus','blur','setTextAndSelection']});var r=_e.__INTERNAL_VIEW_CONFIG=Object.assign({uiViewClassName:'RCTMultilineTextInputView'},n.default,{validAttributes:Object.assign({},n.default.validAttributes,{dataDetectorTypes:!0})}),u=e.get('RCTMultilineTextInputView',(function(){return r}));_e.default=u}),370,[160,8,192,369]); +__d((function(g,_r,_i,a,m,_e,d){var t=_r(d[0])(_r(d[1])),e=_r(d[0])(_r(d[2])),i=_r(d[0])(_r(d[3])),s=_r(d[0])(_r(d[4])),o=_r(d[0])(_r(d[5])),E=_r(d[0])(_r(d[6]));!(function(t,e){if("function"==typeof WeakMap)var i=new WeakMap,s=new WeakMap;(function(t,e){if(!e&&t&&t.__esModule)return t;var o,E,n={__proto__:null,default:t};if(null===t||"object"!=typeof t&&"function"!=typeof t)return n;if(o=e?s:i){if(o.has(t))return o.get(t);o.set(t,n)}for(var l in t)"default"!==l&&{}.hasOwnProperty.call(t,l)&&((E=(o=Object.defineProperty)&&Object.getOwnPropertyDescriptor(t,l))&&(E.get||E.set)?o(n,l,E):n[l]=t[l])})(t,e)})(_r(d[7]));var n=function(t){var e=t.touches,i=t.changedTouches,s=e&&e.length>0,o=i&&i.length>0;return!s&&o?i[0]:s?e[0]:t},l='NOT_RESPONDER',h='RESPONDER_INACTIVE_PRESS_IN',u='RESPONDER_INACTIVE_PRESS_OUT',R='RESPONDER_ACTIVE_PRESS_IN',r='RESPONDER_ACTIVE_PRESS_OUT',_='RESPONDER_ACTIVE_LONG_PRESS_IN',S='RESPONDER_ACTIVE_LONG_PRESS_OUT',c='ERROR',T={NOT_RESPONDER:!1,RESPONDER_INACTIVE_PRESS_IN:!1,RESPONDER_INACTIVE_PRESS_OUT:!1,RESPONDER_ACTIVE_PRESS_IN:!1,RESPONDER_ACTIVE_PRESS_OUT:!1,RESPONDER_ACTIVE_LONG_PRESS_IN:!1,RESPONDER_ACTIVE_LONG_PRESS_OUT:!1,ERROR:!1},P=Object.assign({},T,{RESPONDER_ACTIVE_PRESS_OUT:!0,RESPONDER_ACTIVE_PRESS_IN:!0}),D=Object.assign({},T,{RESPONDER_INACTIVE_PRESS_IN:!0,RESPONDER_ACTIVE_PRESS_IN:!0,RESPONDER_ACTIVE_LONG_PRESS_IN:!0}),N=Object.assign({},T,{RESPONDER_ACTIVE_LONG_PRESS_IN:!0}),O='DELAY',p='RESPONDER_GRANT',A='RESPONDER_RELEASE',b='RESPONDER_TERMINATED',f='ENTER_PRESS_RECT',I='LEAVE_PRESS_RECT',L='LONG_PRESS_DETECTED',v={NOT_RESPONDER:{DELAY:c,RESPONDER_GRANT:h,RESPONDER_RELEASE:c,RESPONDER_TERMINATED:c,ENTER_PRESS_RECT:c,LEAVE_PRESS_RECT:c,LONG_PRESS_DETECTED:c},RESPONDER_INACTIVE_PRESS_IN:{DELAY:R,RESPONDER_GRANT:c,RESPONDER_RELEASE:l,RESPONDER_TERMINATED:l,ENTER_PRESS_RECT:h,LEAVE_PRESS_RECT:u,LONG_PRESS_DETECTED:c},RESPONDER_INACTIVE_PRESS_OUT:{DELAY:r,RESPONDER_GRANT:c,RESPONDER_RELEASE:l,RESPONDER_TERMINATED:l,ENTER_PRESS_RECT:h,LEAVE_PRESS_RECT:u,LONG_PRESS_DETECTED:c},RESPONDER_ACTIVE_PRESS_IN:{DELAY:c,RESPONDER_GRANT:c,RESPONDER_RELEASE:l,RESPONDER_TERMINATED:l,ENTER_PRESS_RECT:R,LEAVE_PRESS_RECT:r,LONG_PRESS_DETECTED:_},RESPONDER_ACTIVE_PRESS_OUT:{DELAY:c,RESPONDER_GRANT:c,RESPONDER_RELEASE:l,RESPONDER_TERMINATED:l,ENTER_PRESS_RECT:R,LEAVE_PRESS_RECT:r,LONG_PRESS_DETECTED:c},RESPONDER_ACTIVE_LONG_PRESS_IN:{DELAY:c,RESPONDER_GRANT:c,RESPONDER_RELEASE:l,RESPONDER_TERMINATED:l,ENTER_PRESS_RECT:_,LEAVE_PRESS_RECT:S,LONG_PRESS_DETECTED:_},RESPONDER_ACTIVE_LONG_PRESS_OUT:{DELAY:c,RESPONDER_GRANT:c,RESPONDER_RELEASE:l,RESPONDER_TERMINATED:l,ENTER_PRESS_RECT:_,LEAVE_PRESS_RECT:S,LONG_PRESS_DETECTED:c},error:{DELAY:l,RESPONDER_GRANT:h,RESPONDER_RELEASE:l,RESPONDER_TERMINATED:l,ENTER_PRESS_RECT:l,LEAVE_PRESS_RECT:l,LONG_PRESS_DETECTED:l}},y={componentDidMount:function(){i.default.isTV},componentWillUnmount:function(){this.touchableDelayTimeout&&clearTimeout(this.touchableDelayTimeout),this.longPressDelayTimeout&&clearTimeout(this.longPressDelayTimeout),this.pressOutDelayTimeout&&clearTimeout(this.pressOutDelayTimeout)},touchableGetInitialState:function(){return{touchable:{touchState:void 0,responderID:null}}},touchableHandleResponderTerminationRequest:function(){return!this.props.rejectResponderTermination},touchableHandleStartShouldSetResponder:function(){return!this.props.disabled},touchableLongPressCancelsPress:function(){return!0},touchableHandleResponderGrant:function(t){var e=t.currentTarget;t.persist(),this.pressOutDelayTimeout&&clearTimeout(this.pressOutDelayTimeout),this.pressOutDelayTimeout=null,this.state.touchable.touchState=l,this.state.touchable.responderID=e,this._receiveSignal(p,t);var i=void 0!==this.touchableGetHighlightDelayMS?Math.max(this.touchableGetHighlightDelayMS(),0):130;0!==(i=isNaN(i)?130:i)?this.touchableDelayTimeout=setTimeout(this._handleDelay.bind(this,t),i):this._handleDelay(t);var s=void 0!==this.touchableGetLongPressDelayMS?Math.max(this.touchableGetLongPressDelayMS(),10):370;s=isNaN(s)?370:s,this.longPressDelayTimeout=setTimeout(this._handleLongDelay.bind(this,t),s+i)},touchableHandleResponderRelease:function(t){this.pressInLocation=null,this._receiveSignal(A,t)},touchableHandleResponderTerminate:function(t){this.pressInLocation=null,this._receiveSignal(b,t)},touchableHandleResponderMove:function(t){if(this.state.touchable.positionOnActivate){var e=this.state.touchable.positionOnActivate,i=this.state.touchable.dimensionsOnActivate,s=this.touchableGetPressRectOffset?this.touchableGetPressRectOffset():{left:20,right:20,top:20,bottom:20},o=s.left,E=s.top,l=s.right,u=s.bottom,R=this.touchableGetHitSlop?this.touchableGetHitSlop():null;R&&(o+=R.left||0,E+=R.top||0,l+=R.right||0,u+=R.bottom||0);var r=n(t.nativeEvent),_=r&&r.pageX,S=r&&r.pageY;if(this.pressInLocation)this._getDistanceBetweenPoints(_,S,this.pressInLocation.pageX,this.pressInLocation.pageY)>10&&this._cancelLongPressDelayTimeout();if(_>e.left-o&&S>e.top-E&&_>`");s!==o&&(this._performSideEffectsForTransition(s,o,t,e),this.state.touchable.touchState=o)}},_cancelLongPressDelayTimeout:function(){this.longPressDelayTimeout&&clearTimeout(this.longPressDelayTimeout),this.longPressDelayTimeout=null},_isHighlight:function(t){return t===R||t===_},_savePressInLocation:function(t){var e=n(t.nativeEvent),i=e&&e.pageX,s=e&&e.pageY,o=e&&e.locationX,E=e&&e.locationY;this.pressInLocation={pageX:i,pageY:s,locationX:o,locationY:E}},_getDistanceBetweenPoints:function(t,e,i,s){var o=t-i,E=e-s;return Math.sqrt(o*o+E*E)},_performSideEffectsForTransition:function(t,e,o,E){var n=this._isHighlight(t),u=this._isHighlight(e);(o===b||o===A)&&this._cancelLongPressDelayTimeout();var R=t===l&&e===h,r=!P[t]&&P[e];if((R||r)&&this._remeasureMetricsOnActivation(),D[t]&&o===L&&this.touchableHandleLongPress&&this.touchableHandleLongPress(E),u&&!n?this._startHighlight(E):!u&&n&&this._endHighlight(E),D[t]&&o===A){var _=!!this.props.onLongPress,S=N[t]&&(!_||!this.touchableLongPressCancelsPress());(!N[t]||S)&&this.touchableHandlePress&&(u||n||(this._startHighlight(E),this._endHighlight(E)),'android'!==i.default.OS||this.props.touchSoundDisabled||s.default.playTouchSound(),this.touchableHandlePress(E))}this.touchableDelayTimeout&&clearTimeout(this.touchableDelayTimeout),this.touchableDelayTimeout=null},_startHighlight:function(t){this._savePressInLocation(t),this.touchableHandleActivePressIn&&this.touchableHandleActivePressIn(t)},_endHighlight:function(t){var e=this;this.touchableHandleActivePressOut&&(this.touchableGetPressOutDelayMS&&this.touchableGetPressOutDelayMS()?this.pressOutDelayTimeout=setTimeout((function(){e.touchableHandleActivePressOut(t)}),this.touchableGetPressOutDelayMS()):this.touchableHandleActivePressOut(t))},withoutDefaultFocusAndBlur:{}},C=(y.touchableHandleFocus,y.touchableHandleBlur,(0,t.default)(y,["touchableHandleFocus","touchableHandleBlur"]));y.withoutDefaultFocusAndBlur=C;var G={Mixin:y,renderDebugView:function(t){t.color,t.hitSlop;return null}};m.exports=G}),371,[8,119,37,21,228,372,374,153]); +__d((function(g,r,i,a,m,e,d){'use strict';var t=r(d[0])(r(d[1])),o=t.default.twoArgumentPooler;function n(t,o){this.width=t,this.height=o}n.prototype.destructor=function(){this.width=null,this.height=null},n.getPooledFromElement=function(t){return n.getPooled(t.offsetWidth,t.offsetHeight)},t.default.addPoolingTo(n,o),m.exports=n}),372,[8,373]); +__d((function(g,r,i,a,m,e,d){'use strict';var n=r(d[0])(r(d[1])),o=function(n){var o=this;if(o.instancePool.length){var t=o.instancePool.pop();return o.call(t,n),t}return new o(n)},t=function(o){var t=this;(0,n.default)(o instanceof t,'Trying to release an instance into a pool of a different type.'),o.destructor(),t.instancePool.lengthi&&(f+=u&&o?h.currentPageX:u&&!o?h.currentPageY:!u&&o?h.previousPageX:h.previousPageY,s=1);else for(var v=0;v=i){f+=u&&o?C.currentPageX:u&&!o?C.currentPageY:!u&&o?C.previousPageX:C.previousPageY,s++}}return s>0?f/s:n.noCentroid},currentCentroidXOfTouchesChangedAfter:function(t,i){return n.centroidDimension(t,i,!0,!0)},currentCentroidYOfTouchesChangedAfter:function(t,i){return n.centroidDimension(t,i,!1,!0)},previousCentroidXOfTouchesChangedAfter:function(t,i){return n.centroidDimension(t,i,!0,!1)},previousCentroidYOfTouchesChangedAfter:function(t,i){return n.centroidDimension(t,i,!1,!1)},currentCentroidX:function(t){return n.centroidDimension(t,0,!0,!0)},currentCentroidY:function(t){return n.centroidDimension(t,0,!1,!0)},noCentroid:-1};m.exports=n}),396,[]); +__d((function(g,r,i,a,m,e,d){var s,n,E=r(d[0])(r(d[1])),o=r(d[0])(r(d[2])),A=r(d[0])(r(d[3])),_=r(d[0])(r(d[4])),O=r(d[0])(r(d[5])),S=r(d[0])(r(d[6])),C=Object.freeze({GRANTED:'granted',DENIED:'denied',NEVER_ASK_AGAIN:'never_ask_again'}),R=Object.freeze({READ_CALENDAR:'android.permission.READ_CALENDAR',WRITE_CALENDAR:'android.permission.WRITE_CALENDAR',CAMERA:'android.permission.CAMERA',READ_CONTACTS:'android.permission.READ_CONTACTS',WRITE_CONTACTS:'android.permission.WRITE_CONTACTS',GET_ACCOUNTS:'android.permission.GET_ACCOUNTS',ACCESS_FINE_LOCATION:'android.permission.ACCESS_FINE_LOCATION',ACCESS_COARSE_LOCATION:'android.permission.ACCESS_COARSE_LOCATION',ACCESS_BACKGROUND_LOCATION:'android.permission.ACCESS_BACKGROUND_LOCATION',RECORD_AUDIO:'android.permission.RECORD_AUDIO',READ_PHONE_STATE:'android.permission.READ_PHONE_STATE',CALL_PHONE:'android.permission.CALL_PHONE',READ_CALL_LOG:'android.permission.READ_CALL_LOG',WRITE_CALL_LOG:'android.permission.WRITE_CALL_LOG',ADD_VOICEMAIL:'com.android.voicemail.permission.ADD_VOICEMAIL',READ_VOICEMAIL:'com.android.voicemail.permission.READ_VOICEMAIL',WRITE_VOICEMAIL:'com.android.voicemail.permission.WRITE_VOICEMAIL',USE_SIP:'android.permission.USE_SIP',PROCESS_OUTGOING_CALLS:'android.permission.PROCESS_OUTGOING_CALLS',BODY_SENSORS:'android.permission.BODY_SENSORS',BODY_SENSORS_BACKGROUND:'android.permission.BODY_SENSORS_BACKGROUND',SEND_SMS:'android.permission.SEND_SMS',RECEIVE_SMS:'android.permission.RECEIVE_SMS',READ_SMS:'android.permission.READ_SMS',RECEIVE_WAP_PUSH:'android.permission.RECEIVE_WAP_PUSH',RECEIVE_MMS:'android.permission.RECEIVE_MMS',READ_EXTERNAL_STORAGE:'android.permission.READ_EXTERNAL_STORAGE',READ_MEDIA_IMAGES:'android.permission.READ_MEDIA_IMAGES',READ_MEDIA_VIDEO:'android.permission.READ_MEDIA_VIDEO',READ_MEDIA_AUDIO:'android.permission.READ_MEDIA_AUDIO',WRITE_EXTERNAL_STORAGE:'android.permission.WRITE_EXTERNAL_STORAGE',BLUETOOTH_CONNECT:'android.permission.BLUETOOTH_CONNECT',BLUETOOTH_SCAN:'android.permission.BLUETOOTH_SCAN',BLUETOOTH_ADVERTISE:'android.permission.BLUETOOTH_ADVERTISE',ACCESS_MEDIA_LOCATION:'android.permission.ACCESS_MEDIA_LOCATION',ACCEPT_HANDOVER:'android.permission.ACCEPT_HANDOVER',ACTIVITY_RECOGNITION:'android.permission.ACTIVITY_RECOGNITION',ANSWER_PHONE_CALLS:'android.permission.ANSWER_PHONE_CALLS',READ_PHONE_NUMBERS:'android.permission.READ_PHONE_NUMBERS',UWB_RANGING:'android.permission.UWB_RANGING',POST_NOTIFICATIONS:'android.permission.POST_NOTIFICATIONS',NEARBY_WIFI_DEVICES:'android.permission.NEARBY_WIFI_DEVICES'}),I=(0,A.default)((function s(){(0,o.default)(this,s),this.PERMISSIONS=R,this.RESULTS=C}),[{key:"checkPermission",value:function(s){return console.warn('"PermissionsAndroid.checkPermission" is deprecated. Use "PermissionsAndroid.check" instead'),(0,S.default)(O.default,'PermissionsAndroid is not installed correctly.'),O.default.checkPermission(s)}},{key:"check",value:function(s){return(0,S.default)(O.default,'PermissionsAndroid is not installed correctly.'),O.default.checkPermission(s)}},{key:"requestPermission",value:(n=(0,E.default)((function*(s,n){return console.warn('"PermissionsAndroid.requestPermission" is deprecated. Use "PermissionsAndroid.request" instead'),(yield this.request(s,n))===this.RESULTS.GRANTED})),function(s,E){return n.apply(this,arguments)})},{key:"request",value:(s=(0,E.default)((function*(s,n){return(0,S.default)(O.default,'PermissionsAndroid is not installed correctly.'),n&&(yield O.default.shouldShowRequestPermissionRationale(s))&&_.default?new Promise((function(E,o){var A=Object.assign({},n);_.default.showAlert(A,(function(){return o(new Error('Error showing rationale'))}),(function(){return E(O.default.requestPermission(s))}))})):O.default.requestPermission(s)})),function(n,E){return s.apply(this,arguments)})},{key:"requestMultiple",value:function(s){return(0,S.default)(O.default,'PermissionsAndroid is not installed correctly.'),O.default.requestMultiplePermissions(s)}}]),t=new I;m.exports=t}),397,[8,313,17,18,131,398,24]); +__d((function(g,_r,_i,a,m,_e,d){Object.defineProperty(_e,"__esModule",{value:!0}),_e.default=void 0;var e=(function(e,t){if("function"==typeof WeakMap)var r=new WeakMap,n=new WeakMap;return(function(e,t){if(!t&&e&&e.__esModule)return e;var o,f,u={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return u;if(o=t?n:r){if(o.has(e))return o.get(e);o.set(e,u)}for(var i in e)"default"!==i&&{}.hasOwnProperty.call(e,i)&&((f=(o=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,i))&&(f.get||f.set)?o(u,i,f):u[i]=e[i]);return u})(e,t)})(_r(d[0]));_e.default=e.get('PermissionsAndroid')}),398,[23]); +__d((function(g,r,i,a,m,e,d){var t=r(d[0])(r(d[1])),o=r(d[0])(r(d[2])),n=r(d[0])(r(d[3])),l=r(d[0])(r(d[4])),u=r(d[0])(r(d[5])),c=r(d[0])(r(d[6])),f=new n.default('ios'!==l.default.OS?null:u.default),s=new Map,v=(function(){function n(o){var l=this;(0,t.default)(this,n),this._data={},this._remoteNotificationCompleteCallbackCalled=!1,this._isRemote=o.remote,this._isRemote&&(this._notificationId=o.notificationId),o.remote?Object.keys(o).forEach((function(t){var n=o[t];'aps'===t?(l._alert=n.alert,l._sound=n.sound,l._badgeCount=n.badge,l._category=n.category,l._contentAvailable=n['content-available'],l._threadID=n['thread-id']):l._data[t]=n})):(this._badgeCount=o.applicationIconBadgeNumber,this._sound=o.soundName,this._alert=o.alertBody,this._data=o.userInfo,this._category=o.category)}return(0,o.default)(n,[{key:"finish",value:function(t){this._isRemote&&this._notificationId&&!this._remoteNotificationCompleteCallbackCalled&&(this._remoteNotificationCompleteCallbackCalled=!0,(0,c.default)(u.default,'PushNotificationManager is not available.'),u.default.onFinishRemoteNotification(this._notificationId,t))}},{key:"getMessage",value:function(){return this._alert}},{key:"getSound",value:function(){return this._sound}},{key:"getCategory",value:function(){return this._category}},{key:"getAlert",value:function(){return this._alert}},{key:"getContentAvailable",value:function(){return this._contentAvailable}},{key:"getBadgeCount",value:function(){return this._badgeCount}},{key:"getData",value:function(){return this._data}},{key:"getThreadID",value:function(){return this._threadID}}],[{key:"presentLocalNotification",value:function(t){(0,c.default)(u.default,'PushNotificationManager is not available.'),u.default.presentLocalNotification(t)}},{key:"scheduleLocalNotification",value:function(t){(0,c.default)(u.default,'PushNotificationManager is not available.'),u.default.scheduleLocalNotification(t)}},{key:"cancelAllLocalNotifications",value:function(){(0,c.default)(u.default,'PushNotificationManager is not available.'),u.default.cancelAllLocalNotifications()}},{key:"removeAllDeliveredNotifications",value:function(){(0,c.default)(u.default,'PushNotificationManager is not available.'),u.default.removeAllDeliveredNotifications()}},{key:"getDeliveredNotifications",value:function(t){(0,c.default)(u.default,'PushNotificationManager is not available.'),u.default.getDeliveredNotifications(t)}},{key:"removeDeliveredNotifications",value:function(t){(0,c.default)(u.default,'PushNotificationManager is not available.'),u.default.removeDeliveredNotifications(t)}},{key:"setApplicationIconBadgeNumber",value:function(t){(0,c.default)(u.default,'PushNotificationManager is not available.'),u.default.setApplicationIconBadgeNumber(t)}},{key:"getApplicationIconBadgeNumber",value:function(t){(0,c.default)(u.default,'PushNotificationManager is not available.'),u.default.getApplicationIconBadgeNumber(t)}},{key:"cancelLocalNotifications",value:function(t){(0,c.default)(u.default,'PushNotificationManager is not available.'),u.default.cancelLocalNotifications(t)}},{key:"getScheduledLocalNotifications",value:function(t){(0,c.default)(u.default,'PushNotificationManager is not available.'),u.default.getScheduledLocalNotifications(t)}},{key:"addEventListener",value:function(t,o){var l;(0,c.default)('notification'===t||'register'===t||'registrationError'===t||'localNotification'===t,'PushNotificationIOS only supports `notification`, `register`, `registrationError`, and `localNotification` events'),'notification'===t?l=f.addListener("remoteNotificationReceived",(function(t){o(new n(t))})):'localNotification'===t?l=f.addListener("localNotificationReceived",(function(t){o(new n(t))})):'register'===t?l=f.addListener("remoteNotificationsRegistered",(function(t){o(t.deviceToken)})):'registrationError'===t&&(l=f.addListener("remoteNotificationRegistrationError",(function(t){o(t)}))),s.set(t,l)}},{key:"removeEventListener",value:function(t,o){(0,c.default)('notification'===t||'register'===t||'registrationError'===t||'localNotification'===t,'PushNotificationIOS only supports `notification`, `register`, `registrationError`, and `localNotification` events');var n=s.get(t);n&&(n.remove(),s.delete(t))}},{key:"requestPermissions",value:function(t){var o={alert:!0,badge:!0,sound:!0};return t&&(o={alert:!!t.alert,badge:!!t.badge,sound:!!t.sound}),(0,c.default)(u.default,'PushNotificationManager is not available.'),u.default.requestPermissions(o)}},{key:"abandonPermissions",value:function(){(0,c.default)(u.default,'PushNotificationManager is not available.'),u.default.abandonPermissions()}},{key:"checkPermissions",value:function(t){(0,c.default)('function'==typeof t,'Must provide a valid callback'),(0,c.default)(u.default,'PushNotificationManager is not available.'),u.default.checkPermissions(t)}},{key:"getInitialNotification",value:function(){return(0,c.default)(u.default,'PushNotificationManager is not available.'),u.default.getInitialNotification().then((function(t){return t&&new n(t)}))}},{key:"getAuthorizationStatus",value:function(t){(0,c.default)(u.default,'PushNotificationManager is not available.'),u.default.getAuthorizationStatus(t)}}])})();v.FetchResult={NewData:'UIBackgroundFetchResultNewData',NoData:'UIBackgroundFetchResultNoData',ResultFailed:'UIBackgroundFetchResultFailed'},m.exports=v}),399,[8,17,18,111,21,400,24]); +__d((function(g,_r,_i,a,m,_e,d){Object.defineProperty(_e,"__esModule",{value:!0}),_e.default=void 0;var e=(function(e,t){if("function"==typeof WeakMap)var r=new WeakMap,n=new WeakMap;return(function(e,t){if(!t&&e&&e.__esModule)return e;var o,f,u={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return u;if(o=t?n:r){if(o.has(e))return o.get(e);o.set(e,u)}for(var i in e)"default"!==i&&{}.hasOwnProperty.call(e,i)&&((f=(o=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,i))&&(f.get||f.set)?o(u,i,f):u[i]=e[i]);return u})(e,t)})(_r(d[0]));_e.default=e.get('PushNotificationManager')}),400,[23]); +__d((function(g,r,i,a,m,e,d){'use strict';var n={get:function(n){return console.warn('Settings is not yet supported on Android'),null},set:function(n){console.warn('Settings is not yet supported on Android')},watchKeys:function(n,t){return console.warn('Settings is not yet supported on Android'),-1},clearWatch:function(n){console.warn('Settings is not yet supported on Android')}};m.exports=n}),401,[]); +__d((function(g,r,i,a,m,e,d){var t=r(d[0])(r(d[1])),s=r(d[0])(r(d[2])),n=(r(d[0])(r(d[3])),r(d[0])(r(d[4]))),l=(0,s.default)((function s(){(0,t.default)(this,s)}),null,[{key:"share",value:function(t){var s=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};r(d[5])('object'==typeof t&&null!==t,'Content to share must be a valid object'),r(d[5])('string'==typeof t.url||'string'==typeof t.message,'At least one of URL and message is required'),r(d[5])('object'==typeof s&&null!==s,'Options must be a valid object'),r(d[5])(n.default,'ShareModule should be registered on Android.'),r(d[5])(null==t.title||'string'==typeof t.title,'Invalid title: title should be a string.');var l={title:t.title,message:'string'==typeof t.message?t.message:void 0};return n.default.share(l,s.dialogTitle).then((function(t){return Object.assign({activityType:null},t)}))}}]);l.sharedAction='sharedAction',l.dismissedAction='dismissedAction',m.exports=l}),402,[8,17,18,380,403,24]); +__d((function(g,_r,_i,a,m,_e,d){Object.defineProperty(_e,"__esModule",{value:!0}),_e.default=void 0;var e=(function(e,t){if("function"==typeof WeakMap)var r=new WeakMap,n=new WeakMap;return(function(e,t){if(!t&&e&&e.__esModule)return e;var o,f,u={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return u;if(o=t?n:r){if(o.has(e))return o.get(e);o.set(e,u)}for(var i in e)"default"!==i&&{}.hasOwnProperty.call(e,i)&&((f=(o=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,i))&&(f.get||f.set)?o(u,i,f):u[i]=e[i]);return u})(e,t)})(_r(d[0]));_e.default=e.get('ShareModule')}),403,[23]); +__d((function(g,r,i,a,m,e,d){var t=r(d[0])(r(d[1])),f=t.default.getConstants(),n={SHORT:f.SHORT,LONG:f.LONG,TOP:f.TOP,BOTTOM:f.BOTTOM,CENTER:f.CENTER,show:function(f,n){t.default.show(f,n)},showWithGravity:function(f,n,o){t.default.showWithGravity(f,n,o)},showWithGravityAndOffset:function(f,n,o,O,s){t.default.showWithGravityAndOffset(f,n,o,O,s)}};m.exports=n}),404,[8,405]); +__d((function(g,_r,_i,a,m,_e,d){Object.defineProperty(_e,"__esModule",{value:!0}),_e.default=void 0;var e=(function(e,t){if("function"==typeof WeakMap)var r=new WeakMap,n=new WeakMap;return(function(e,t){if(!t&&e&&e.__esModule)return e;var o,f,u={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return u;if(o=t?n:r){if(o.has(e))return o.get(e);o.set(e,u)}for(var i in e)"default"!==i&&{}.hasOwnProperty.call(e,i)&&((f=(o=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,i))&&(f.get||f.set)?o(u,i,f):u[i]=e[i]);return u})(e,t)})(_r(d[0]));_e.default=e.getEnforcing('ToastAndroid')}),405,[23]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(t,l){var c=(0,n.useRef)(null);null==c.current&&(c.current=new u.default.Value(t,l));return c.current};var u=r(d[0])(r(d[1])),n=r(d[2])}),406,[8,257,153]); +__d((function(g,r,i,a,m,e,d){'use strict';Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(){return(0,r(d[2]).useSyncExternalStore)((function(n){var u=t.default.addChangeListener(n);return function(){return u.remove()}}),(function(){return t.default.getColorScheme()}))};var t=r(d[0])(r(d[1]))}),407,[8,381,408]); +__d((function(g,r,i,a,m,e,d){'use strict';m.exports=r(d[0])}),408,[409]); +__d((function(_g,_r,i,_a,_m,_e,_d){'use strict';var t=_r(_d[0]);var n="function"==typeof Object.is?Object.is:function(t,n){return t===n&&(0!==t||1/t==1/n)||t!=t&&n!=n},e=t.useState,u=t.useEffect,r=t.useLayoutEffect,s=t.useDebugValue;function a(t){var e=t.getSnapshot;t=t.value;try{var u=e();return!n(t,u)}catch(t){return!0}}_e.useSyncExternalStore=void 0!==t.useSyncExternalStore?t.useSyncExternalStore:function(t,n){var c=n(),o=e({inst:{value:c,getSnapshot:n}}),f=o[0].inst,S=o[1];return r((function(){f.value=c,f.getSnapshot=n,a(f)&&S({inst:f})}),[t,c,n]),u((function(){return a(f)&&S({inst:f}),t((function(){a(f)&&S({inst:f})}))}),[t]),s(c),c}}),409,[153]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(){var f=(0,u.useState)((function(){return n.default.get('window')})),o=(0,t.default)(f,2),c=o[0],l=o[1];return(0,u.useEffect)((function(){function t(t){var n=t.window;c.width===n.width&&c.height===n.height&&c.scale===n.scale&&c.fontScale===n.fontScale||l(n)}var u=n.default.addEventListener('change',t);return t({window:n.default.get('window')}),function(){u.remove()}}),[c]),c};var t=r(d[0])(r(d[1])),n=r(d[0])(r(d[2])),u=r(d[3])}),410,[8,26,182,153]); +__d((function(g,r,i,a,m,e,d){'use strict';Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var A=r(d[0])({BOM:"\ufeff",BULLET:"\u2022",BULLET_SP:"\xa0\u2022\xa0",MIDDOT:"\xb7",MIDDOT_SP:"\xa0\xb7\xa0",MIDDOT_KATAKANA:"\u30fb",MDASH:"\u2014",MDASH_SP:"\xa0\u2014\xa0",NDASH:"\u2013",NDASH_SP:"\xa0\u2013\xa0",NEWLINE:"\n",NBSP:"\xa0",PIZZA:"\ud83c\udf55",TRIANGLE_LEFT:"\u25c0",TRIANGLE_RIGHT:"\u25b6"});e.default=A}),411,[207]); +__d((function(g,r,i,a,m,e,d){var t=r(d[0])(r(d[1]));var n={vibrate:function(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:400,o=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if('number'==typeof n)t.default.vibrate(n);else{if(!Array.isArray(n))throw new Error('Vibration pattern should be a number or array');t.default.vibrateByPattern(n,o?0:-1)}},cancel:function(){t.default.cancel()}};m.exports=n}),412,[8,413]); +__d((function(g,_r,_i,a,m,_e,d){Object.defineProperty(_e,"__esModule",{value:!0}),_e.default=void 0;var e=(function(e,t){if("function"==typeof WeakMap)var r=new WeakMap,n=new WeakMap;return(function(e,t){if(!t&&e&&e.__esModule)return e;var o,f,u={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return u;if(o=t?n:r){if(o.has(e))return o.get(e);o.set(e,u)}for(var i in e)"default"!==i&&{}.hasOwnProperty.call(e,i)&&((f=(o=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,i))&&(f.get||f.set)?o(u,i,f):u[i]=e[i]);return u})(e,t)})(_r(d[0]));_e.default=e.getEnforcing('Vibration')}),413,[23]); +__d((function(g,r,i,a,m,_e,d){'use strict';function n(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(t){}return(n=function(){return!!t})()}var t;t=(function(t){function e(){return r(d[3])(this,e),t=this,u=e,o=arguments,u=r(d[0])(u),r(d[1])(t,n()?Reflect.construct(u,o||[],r(d[0])(t).constructor):u.apply(t,o));var t,u,o}return r(d[4])(e,t),r(d[5])(e,[{key:"render",value:function(){return null}}],[{key:"ignoreWarnings",value:function(n){}},{key:"install",value:function(){}},{key:"uninstall",value:function(){}}])})(r(d[2]).Component),m.exports=t}),414,[2,3,153,17,56,18]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.DynamicColorIOS=void 0;e.DynamicColorIOS=function(o){throw new Error('DynamicColorIOS is not available on this platform.')}}),415,[]); +__d((function(g,r,_i,a,m,e,d){'use strict';var t=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,62,0,62,0,63,52,53,54,55,56,57,58,59,60,61,0,0,0,0,0,0,0,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,0,0,0,0,63,0,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51];m.exports=function(o,c){for(var h,A=o.length,C='='===o[A-2]?2:'='===o[A-1]?1:0,n=0,f=A-C&4294967292,i=0;i>16&255,c[n++]=h>>8&255,c[n++]=255&h;1===C&&(h=t[o.charCodeAt(i)]<<10|t[o.charCodeAt(i+1)]<<4|t[o.charCodeAt(i+2)]>>2,c[n++]=h>>8&255,c[n++]=255&h),2===C&&(h=t[o.charCodeAt(i)]<<2|t[o.charCodeAt(i+1)]>>4,c[n++]=255&h)}}),416,[]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"BaseButton",{enumerable:!0,get:function(){return r(d[0]).BaseButton}}),Object.defineProperty(e,"BorderlessButton",{enumerable:!0,get:function(){return r(d[0]).BorderlessButton}}),Object.defineProperty(e,"Directions",{enumerable:!0,get:function(){return r(d[1]).Directions}}),Object.defineProperty(e,"DrawerLayout",{enumerable:!0,get:function(){return c.default}}),Object.defineProperty(e,"DrawerLayoutAndroid",{enumerable:!0,get:function(){return r(d[2]).DrawerLayoutAndroid}}),Object.defineProperty(e,"FlatList",{enumerable:!0,get:function(){return r(d[2]).FlatList}}),Object.defineProperty(e,"FlingGestureHandler",{enumerable:!0,get:function(){return r(d[3]).FlingGestureHandler}}),Object.defineProperty(e,"ForceTouchGestureHandler",{enumerable:!0,get:function(){return r(d[4]).ForceTouchGestureHandler}}),Object.defineProperty(e,"Gesture",{enumerable:!0,get:function(){return r(d[5]).GestureObjects}}),Object.defineProperty(e,"GestureDetector",{enumerable:!0,get:function(){return r(d[6]).GestureDetector}}),Object.defineProperty(e,"GestureHandlerRootView",{enumerable:!0,get:function(){return n.default}}),Object.defineProperty(e,"LongPressGestureHandler",{enumerable:!0,get:function(){return r(d[7]).LongPressGestureHandler}}),Object.defineProperty(e,"NativeViewGestureHandler",{enumerable:!0,get:function(){return r(d[8]).NativeViewGestureHandler}}),Object.defineProperty(e,"PanGestureHandler",{enumerable:!0,get:function(){return r(d[9]).PanGestureHandler}}),Object.defineProperty(e,"PinchGestureHandler",{enumerable:!0,get:function(){return r(d[10]).PinchGestureHandler}}),Object.defineProperty(e,"PureNativeButton",{enumerable:!0,get:function(){return r(d[0]).PureNativeButton}}),Object.defineProperty(e,"RawButton",{enumerable:!0,get:function(){return r(d[0]).RawButton}}),Object.defineProperty(e,"RectButton",{enumerable:!0,get:function(){return r(d[0]).RectButton}}),Object.defineProperty(e,"RefreshControl",{enumerable:!0,get:function(){return r(d[2]).RefreshControl}}),Object.defineProperty(e,"RotationGestureHandler",{enumerable:!0,get:function(){return r(d[11]).RotationGestureHandler}}),Object.defineProperty(e,"ScrollView",{enumerable:!0,get:function(){return r(d[2]).ScrollView}}),Object.defineProperty(e,"State",{enumerable:!0,get:function(){return r(d[12]).State}}),Object.defineProperty(e,"Swipeable",{enumerable:!0,get:function(){return o.default}}),Object.defineProperty(e,"Switch",{enumerable:!0,get:function(){return r(d[2]).Switch}}),Object.defineProperty(e,"TapGestureHandler",{enumerable:!0,get:function(){return r(d[13]).TapGestureHandler}}),Object.defineProperty(e,"TextInput",{enumerable:!0,get:function(){return r(d[2]).TextInput}}),Object.defineProperty(e,"TouchableHighlight",{enumerable:!0,get:function(){return r(d[14]).TouchableHighlight}}),Object.defineProperty(e,"TouchableNativeFeedback",{enumerable:!0,get:function(){return r(d[14]).TouchableNativeFeedback}}),Object.defineProperty(e,"TouchableOpacity",{enumerable:!0,get:function(){return r(d[14]).TouchableOpacity}}),Object.defineProperty(e,"TouchableWithoutFeedback",{enumerable:!0,get:function(){return r(d[14]).TouchableWithoutFeedback}}),Object.defineProperty(e,"createNativeWrapper",{enumerable:!0,get:function(){return u.default}}),Object.defineProperty(e,"enableExperimentalWebImplementation",{enumerable:!0,get:function(){return r(d[15]).enableExperimentalWebImplementation}}),Object.defineProperty(e,"enableLegacyWebImplementation",{enumerable:!0,get:function(){return r(d[15]).enableLegacyWebImplementation}}),Object.defineProperty(e,"gestureHandlerRootHOC",{enumerable:!0,get:function(){return t.default}});var t=r(d[16])(r(d[17])),n=r(d[16])(r(d[18])),u=r(d[16])(r(d[19])),o=r(d[16])(r(d[20])),c=r(d[16])(r(d[21]));(0,r(d[22]).initialize)()}),417,[418,521,522,523,524,526,538,541,420,540,651,652,515,539,653,649,8,659,663,419,666,667,665]); +__d((function(g,_r,_i,a,m,_e,d){Object.defineProperty(_e,"__esModule",{value:!0}),_e.BorderlessButton=_e.BaseButton=void 0,Object.defineProperty(_e,"PureNativeButton",{enumerable:!0,get:function(){return c.default}}),_e.RectButton=_e.RawButton=void 0;var t=_r(d[0])(_r(d[1])),e=_r(d[0])(_r(d[2])),n=_r(d[0])(_r(d[3])),o=_r(d[0])(_r(d[4])),r=_r(d[0])(_r(d[5])),s=_r(d[0])(_r(d[6])),i=(function(t,e){if("function"==typeof WeakMap)var n=new WeakMap,o=new WeakMap;return(function(t,e){if(!e&&t&&t.__esModule)return t;var r,s,i={__proto__:null,default:t};if(null===t||"object"!=typeof t&&"function"!=typeof t)return i;if(r=e?o:n){if(r.has(t))return r.get(t);r.set(t,i)}for(var u in t)"default"!==u&&{}.hasOwnProperty.call(t,u)&&((s=(r=Object.defineProperty)&&Object.getOwnPropertyDescriptor(t,u))&&(s.get||s.set)?r(i,u,s):i[u]=t[u]);return i})(t,e)})(_r(d[7])),u=_r(d[8]),l=_r(d[0])(_r(d[9])),c=_r(d[0])(_r(d[10])),p=["rippleColor"],f=["children","style"],v=["children","style"];function h(t,e,n){return e=(0,r.default)(e),(0,o.default)(t,y()?Reflect.construct(e,n||[],(0,r.default)(t).constructor):e.apply(t,n))}function y(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(t){}return(y=function(){return!!t})()}var C=_e.RawButton=(0,l.default)(c.default,{shouldCancelWhenOutside:!1,shouldActivateOnStart:!1}),S=_e.BaseButton=(function(o){function r(t){var n;return(0,e.default)(this,r),(n=h(this,r,[t])).handleEvent=function(t){var e=t.nativeEvent,o=e.state,r=e.oldState,s=e.pointerInside,i=s&&o===_r(d[11]).State.ACTIVE;i!==n.lastActive&&n.props.onActiveStateChange&&n.props.onActiveStateChange(i),!n.longPressDetected&&r===_r(d[11]).State.ACTIVE&&o!==_r(d[11]).State.CANCELLED&&n.lastActive&&n.props.onPress&&n.props.onPress(i),!n.lastActive&&o===('android'!==u.Platform.OS?_r(d[11]).State.ACTIVE:_r(d[11]).State.BEGAN)&&s?(n.longPressDetected=!1,n.props.onLongPress&&(n.longPressTimeout=setTimeout(n.onLongPress,n.props.delayLongPress))):(o!==_r(d[11]).State.ACTIVE||s||void 0===n.longPressTimeout)&&(void 0===n.longPressTimeout||o!==_r(d[11]).State.END&&o!==_r(d[11]).State.CANCELLED&&o!==_r(d[11]).State.FAILED)||(clearTimeout(n.longPressTimeout),n.longPressTimeout=void 0),n.lastActive=i},n.onLongPress=function(){n.longPressDetected=!0,null==n.props.onLongPress||n.props.onLongPress()},n.onHandlerStateChange=function(t){null==n.props.onHandlerStateChange||n.props.onHandlerStateChange(t),n.handleEvent(t)},n.onGestureEvent=function(t){null==n.props.onGestureEvent||n.props.onGestureEvent(t),n.handleEvent(t)},n.lastActive=!1,n.longPressDetected=!1,n}return(0,s.default)(r,o),(0,n.default)(r,[{key:"render",value:function(){var e=this.props,n=e.rippleColor,o=(0,t.default)(e,p);return(0,_r(d[12]).jsx)(C,Object.assign({rippleColor:(0,u.processColor)(n)},o,{onGestureEvent:this.onGestureEvent,onHandlerStateChange:this.onHandlerStateChange}))}}])})(i.Component);S.defaultProps={delayLongPress:600};var A=u.Animated.createAnimatedComponent(S),P=u.StyleSheet.create({underlay:{position:'absolute',left:0,right:0,bottom:0,top:0}});(_e.RectButton=(function(o){function r(t){var n;return(0,e.default)(this,r),(n=h(this,r,[t])).onActiveStateChange=function(t){'android'!==u.Platform.OS&&n.opacity.setValue(t?n.props.activeOpacity:0),null==n.props.onActiveStateChange||n.props.onActiveStateChange(t)},n.opacity=new u.Animated.Value(0),n}return(0,s.default)(r,o),(0,n.default)(r,[{key:"render",value:function(){var e=this.props,n=e.children,o=e.style,r=(0,t.default)(e,f),s=u.StyleSheet.flatten(null!=o?o:{});return(0,_r(d[12]).jsxs)(S,Object.assign({},r,{style:s,onActiveStateChange:this.onActiveStateChange,children:[(0,_r(d[12]).jsx)(u.Animated.View,{style:[P.underlay,{opacity:this.opacity,backgroundColor:this.props.underlayColor,borderRadius:s.borderRadius,borderTopLeftRadius:s.borderTopLeftRadius,borderTopRightRadius:s.borderTopRightRadius,borderBottomLeftRadius:s.borderBottomLeftRadius,borderBottomRightRadius:s.borderBottomRightRadius}]}),n]}))}}])})(i.Component)).defaultProps={activeOpacity:.105,underlayColor:'black'},(_e.BorderlessButton=(function(o){function r(t){var n;return(0,e.default)(this,r),(n=h(this,r,[t])).onActiveStateChange=function(t){'android'!==u.Platform.OS&&n.opacity.setValue(t?n.props.activeOpacity:1),null==n.props.onActiveStateChange||n.props.onActiveStateChange(t)},n.opacity=new u.Animated.Value(1),n}return(0,s.default)(r,o),(0,n.default)(r,[{key:"render",value:function(){var e=this.props,n=e.children,o=e.style,r=(0,t.default)(e,v);return(0,_r(d[12]).jsx)(A,Object.assign({},r,{onActiveStateChange:this.onActiveStateChange,style:[o,'ios'===u.Platform.OS&&{opacity:this.opacity}],children:n}))}}])})(i.Component)).defaultProps={activeOpacity:.3,borderless:!0}}),418,[8,119,17,18,3,2,56,153,6,419,519,515,193]); +__d((function(g,_r,_i,a,m,_e,d){Object.defineProperty(_e,"__esModule",{value:!0}),_e.default=function(e){var u,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},o=r.forwardRef((function(r,u){var o=Object.keys(r).reduce((function(e,n){return t.includes(n)&&(e[n]=r[n]),e}),Object.assign({},i)),l=(0,n.useRef)(),f=(0,n.useRef)();return(0,n.useImperativeHandle)(u,(function(){var e=f.current;return l.current&&e?(l.current.handlerTag=e.handlerTag,l.current):null}),[l,f]),(0,_r(d[4]).jsx)(_r(d[3]).NativeViewGestureHandler,Object.assign({},o,{ref:f,children:(0,_r(d[4]).jsx)(e,Object.assign({},r,{ref:l}))}))}));return o.displayName=(null==e?void 0:e.displayName)||(null==e||null==(u=e.render)?void 0:u.name)||'string'==typeof e&&e||'ComponentWrapper',o};var e=_r(d[0])(_r(d[1])),n=(function(e,n){if("function"==typeof WeakMap)var r=new WeakMap,t=new WeakMap;return(function(e,n){if(!n&&e&&e.__esModule)return e;var u,i,o={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return o;if(u=n?t:r){if(u.has(e))return u.get(e);u.set(e,o)}for(var l in e)"default"!==l&&{}.hasOwnProperty.call(e,l)&&((i=(u=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,l))&&(i.get||i.set)?u(o,l,i):o[l]=e[l]);return o})(e,n)})(_r(d[2])),r=n;var t=[].concat((0,e.default)(_r(d[3]).nativeViewProps),['onGestureHandlerEvent','onGestureHandlerStateChange'])}),419,[8,11,153,420,193]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.nativeViewProps=e.nativeViewHandlerName=e.nativeViewGestureHandlerProps=e.NativeViewGestureHandler=void 0;var t=r(d[0])(r(d[1])),n=r(d[0])(r(d[2])),l=e.nativeViewGestureHandlerProps=['shouldActivateOnStart','disallowInterruption'],o=e.nativeViewProps=[].concat((0,t.default)(r(d[3]).baseGestureHandlerProps),l),s=e.nativeViewHandlerName='NativeViewGestureHandler';e.NativeViewGestureHandler=(0,n.default)({name:s,allowedProps:o,config:{}})}),420,[8,11,421,518]); +__d((function(g,_r,_i,a,m,_e,d){Object.defineProperty(_e,"__esModule",{value:!0}),_e.default=function(e){var u=e.name,E=e.allowedProps,G=void 0===E?[]:E,H=e.config,y=void 0===H?{}:H,T=e.transformProps,w=e.customNativeProps,C=void 0===w?[]:w,_=(function(e){function h(e){var t,r,s,c;if((0,n.default)(this,h),r=this,s=h,c=[e],s=(0,i.default)(s),(t=(0,o.default)(r,v()?Reflect.construct(s,c||[],(0,i.default)(r).constructor):s.apply(r,c))).onGestureHandlerEvent=function(e){e.nativeEvent.handlerTag===t.handlerTag?'function'==typeof t.props.onGestureEvent&&(null==t.props.onGestureEvent||t.props.onGestureEvent(e)):null==t.props.onGestureHandlerEvent||t.props.onGestureHandlerEvent(e)},t.onGestureHandlerStateChange=function(e){if(e.nativeEvent.handlerTag===t.handlerTag){'function'==typeof t.props.onHandlerStateChange&&(null==t.props.onHandlerStateChange||t.props.onHandlerStateChange(e));var n=e.nativeEvent.state,r=O[n],o=r&&t.props[r];o&&'function'==typeof o&&o(e)}else null==t.props.onGestureHandlerStateChange||t.props.onGestureHandlerStateChange(e)},t.refHandler=function(e){t.viewNode=e;var n=l.Children.only(t.props.children).ref;null!==n&&('function'==typeof n?n(e):n.current=e)},t.createGestureHandler=function(e){t.config=e,f.default.createGestureHandler(u,t.handlerTag,e)},t.attachGestureHandler=function(e){if(t.viewTag=e,'web'===p.Platform.OS)f.default.attachGestureHandler(t.handlerTag,e,_r(d[15]).ActionType.JS_FUNCTION_OLD_API,t.propsRef);else{(0,_r(d[16]).registerOldGestureHandler)(t.handlerTag,{onGestureEvent:t.onGestureHandlerEvent,onGestureStateChange:t.onGestureHandlerStateChange});var n=null!=(r=t.props)&&r.onGestureEvent&&'current'in t.props.onGestureEvent?_r(d[15]).ActionType.REANIMATED_WORKLET:null!=(o=t.props)&&o.onGestureEvent&&'__isNative'in t.props.onGestureEvent?_r(d[15]).ActionType.NATIVE_ANIMATED_EVENT:_r(d[15]).ActionType.JS_FUNCTION_OLD_API;f.default.attachGestureHandler(t.handlerTag,e,n)}var r,o;(0,_r(d[17]).scheduleFlushOperations)()},t.updateGestureHandler=function(e){t.config=e,f.default.updateGestureHandler(t.handlerTag,e),(0,_r(d[17]).scheduleFlushOperations)()},t.handlerTag=(0,_r(d[16]).getNextHandlerTag)(),t.config={},t.propsRef=l.createRef(),t.isMountedRef=l.createRef(),t.state={allowTouches:S},e.id){if(void 0!==_r(d[16]).handlerIDToTag[e.id])throw new Error(`Handler with ID "${e.id}" already registered`);_r(d[16]).handlerIDToTag[e.id]=t.handlerTag}return t}return(0,s.default)(h,e),(0,r.default)(h,[{key:"componentDidMount",value:function(){var e=this,n=this.props;this.isMountedRef.current=!0,N(n)&&queueMicrotask((function(){e.update(D)})),this.createGestureHandler((0,_r(d[17]).filterConfig)(T?T(this.props):this.props,[].concat((0,t.default)(G),(0,t.default)(C)),y)),this.attachGestureHandler((0,_r(d[17]).findNodeHandle)(this.viewNode))}},{key:"componentDidUpdate",value:function(){var e=(0,_r(d[17]).findNodeHandle)(this.viewNode);this.viewTag!==e&&this.attachGestureHandler(e),this.update(D)}},{key:"componentWillUnmount",value:function(){var e;null==(e=this.inspectorToggleListener)||e.remove(),this.isMountedRef.current=!1,f.default.dropGestureHandler(this.handlerTag),(0,_r(d[17]).scheduleFlushOperations)();var t=this.props.id;t&&delete _r(d[16]).handlerIDToTag[t]}},{key:"update",value:function(e){var n=this;if(this.isMountedRef.current)if(N(this.props)&&e>0)queueMicrotask((function(){n.update(e-1)}));else{var r=(0,_r(d[17]).filterConfig)(T?T(this.props):this.props,[].concat((0,t.default)(G),(0,t.default)(C)),y);(0,c.default)(this.config,r)||this.updateGestureHandler(r)}}},{key:"setNativeProps",value:function(e){var n=Object.assign({},this.props,e),r=(0,_r(d[17]).filterConfig)(T?T(n):n,[].concat((0,t.default)(G),(0,t.default)(C)),y);this.updateGestureHandler(r)}},{key:"render",value:function(){var e,t=this.onGestureHandlerEvent,n=this.props,r=n.onGestureEvent,o=n.onGestureHandlerEvent;if(r&&'function'!=typeof r){if(o)throw new Error('Nesting touch handlers with native animated driver is not supported yet');t=r}else if(o&&'function'!=typeof o)throw new Error('Nesting touch handlers with native animated driver is not supported yet');var i=this.onGestureHandlerStateChange,s=this.props,p=s.onHandlerStateChange,c=s.onGestureHandlerStateChange;if(p&&'function'!=typeof p){if(c)throw new Error('Nesting touch handlers with native animated driver is not supported yet');i=p}else if(c&&'function'!=typeof c)throw new Error('Nesting touch handlers with native animated driver is not supported yet');var f={onGestureHandlerEvent:this.state.allowTouches?t:void 0,onGestureHandlerStateChange:this.state.allowTouches?i:void 0};this.propsRef.current=f;var h=null;try{h=l.Children.only(this.props.children)}catch(e){throw new Error((0,_r(d[13]).tagMessage)(`${u} got more than one view as a child. If you want the gesture to work on multiple views, wrap them with a common parent and attach the gesture to that view.`))}var v=h.props.children;return l.cloneElement(h,Object.assign({ref:this.refHandler,collapsable:!1},(0,_r(d[13]).isJestEnv)()?{handlerType:u,handlerTag:this.handlerTag}:{},{testID:null!=(e=this.props.testID)?e:h.props.testID},f),v)}}])})(l.Component);return _.displayName=u,_.contextType=h.default,_};var e,t=_r(d[0])(_r(d[1])),n=_r(d[0])(_r(d[2])),r=_r(d[0])(_r(d[3])),o=_r(d[0])(_r(d[4])),i=_r(d[0])(_r(d[5])),s=_r(d[0])(_r(d[6])),u=_r(d[0])(_r(d[7])),l=(function(e,t){if("function"==typeof WeakMap)var n=new WeakMap,r=new WeakMap;return(function(e,t){if(!t&&e&&e.__esModule)return e;var o,i,s={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return s;if(o=t?r:n){if(o.has(e))return o.get(e);o.set(e,s)}for(var u in e)"default"!==u&&{}.hasOwnProperty.call(e,u)&&((i=(o=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,u))&&(i.get||i.set)?o(s,u,i):s[u]=e[u]);return s})(e,t)})(_r(d[8])),p=_r(d[9]),c=_r(d[0])(_r(d[10])),f=_r(d[0])(_r(d[11])),h=_r(d[0])(_r(d[12]));function v(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(v=function(){return!!e})()}var E=p.UIManager,G=Object.assign({onGestureHandlerEvent:{registrationName:'onGestureHandlerEvent'},onGestureHandlerStateChange:{registrationName:'onGestureHandlerStateChange'}},(0,_r(d[13]).isFabric)()&&'android'===p.Platform.OS&&{topOnGestureHandlerEvent:{registrationName:'onGestureHandlerEvent'},topOnGestureHandlerStateChange:{registrationName:'onGestureHandlerStateChange'}});E.genericDirectEventTypes=Object.assign({},E.genericDirectEventTypes,G);var H=null!=(e=null==E.getViewManagerConfig?void 0:E.getViewManagerConfig('getConstants'))?e:null==E.getConstants?void 0:E.getConstants();H&&(H.genericDirectEventTypes=Object.assign({},H.genericDirectEventTypes,G));var y=E.setJSResponder,T=void 0===y?function(){}:y,w=E.clearJSResponder,C=void 0===w?function(){}:w;E.setJSResponder=function(e,t){f.default.handleSetJSResponder(e,t),T(e,t)},E.clearJSResponder=function(){f.default.handleClearJSResponder(),C()};var S=!0;function N(e){var t=function(e){return Array.isArray(e)?e.some((function(e){return e&&null===e.current})):e&&null===e.current};return t(e.simultaneousHandlers)||t(e.waitFor)}var O=(0,u.default)((0,u.default)((0,u.default)((0,u.default)((0,u.default)((0,u.default)({},_r(d[14]).State.UNDETERMINED,void 0),_r(d[14]).State.BEGAN,'onBegan'),_r(d[14]).State.FAILED,'onFailed'),_r(d[14]).State.CANCELLED,'onCancelled'),_r(d[14]).State.ACTIVE,'onActivated'),_r(d[14]).State.END,'onEnded'),D=1}),421,[8,11,17,18,3,2,56,170,153,6,422,511,514,512,515,516,517,518]); +__d((function(g,r,i,a,m,e,d){m.exports=function(n,t){return r(d[0])(n,t)}}),422,[423]); +__d((function(g,r,i,a,m,e,d){m.exports=function n(u,l,t,o,c){return u===l||(null==u||null==l||!r(d[0])(u)&&!r(d[0])(l)?u!=u&&l!=l:r(d[1])(u,l,t,o,n,c))}}),423,[424,425]); +__d((function(g,r,i,a,m,e,d){m.exports=function(n){return null!=n&&'object'==typeof n}}),424,[]); +__d((function(g,r,i,a,m,e,d){var t='[object Arguments]',n='[object Array]',_='[object Object]',c=Object.prototype.hasOwnProperty;m.exports=function(o,u,p,f,l,v){var w=r(d[0])(o),b=r(d[0])(u),j=w?n:r(d[1])(o),s=b?n:r(d[1])(u),y=(j=j==t?_:j)==_,O=(s=s==t?_:s)==_,A=j==s;if(A&&r(d[2])(o)){if(!r(d[2])(u))return!1;w=!0,y=!1}if(A&&!y)return v||(v=new(r(d[3]))),w||r(d[4])(o)?r(d[5])(o,u,p,f,l,v):r(d[6])(o,u,j,p,f,l,v);if(!(1&p)){var h=y&&c.call(o,'__wrapped__'),x=O&&c.call(u,'__wrapped__');if(h||x){var P=h?o.value():o,k=x?u.value():u;return v||(v=new(r(d[3]))),l(P,k,p,f,v)}}return!!A&&(v||(v=new(r(d[3]))),r(d[7])(o,u,p,f,l,v))}}),425,[426,427,447,449,478,483,489,493]); +__d((function(g,r,i,a,m,e,d){var n=Array.isArray;m.exports=n}),426,[]); +__d((function(g,r,i,a,m,e,d){var t='[object Map]',c='[object Promise]',n='[object Set]',o='[object WeakMap]',s='[object DataView]',u=r(d[0])(r(d[1])),b=r(d[0])(r(d[2])),j=r(d[0])(r(d[3])),w=r(d[0])(r(d[4])),f=r(d[0])(r(d[5])),v=r(d[6]);(r(d[1])&&v(new(r(d[1]))(new ArrayBuffer(1)))!=s||r(d[2])&&v(new(r(d[2])))!=t||r(d[3])&&v(r(d[3]).resolve())!=c||r(d[4])&&v(new(r(d[4])))!=n||r(d[5])&&v(new(r(d[5])))!=o)&&(v=function(v){var p=r(d[6])(v),M="[object Object]"==p?v.constructor:void 0,_=M?r(d[0])(M):'';if(_)switch(_){case u:return s;case b:return t;case j:return c;case w:return n;case f:return o}return p}),m.exports=v}),427,[428,429,443,444,445,446,439]); +__d((function(g,r,i,a,m,_e,d){var t=Function.prototype.toString;m.exports=function(n){if(null!=n){try{return t.call(n)}catch(t){}try{return n+''}catch(t){}}return''}}),428,[]); +__d((function(g,r,i,a,m,e,d){var t=r(d[0])(r(d[1]),'DataView');m.exports=t}),429,[430,436]); +__d((function(g,r,i,a,m,e,d){m.exports=function(n,o){var t=r(d[0])(n,o);return r(d[1])(t)?t:void 0}}),430,[431,432]); +__d((function(g,r,i,a,m,e,d){m.exports=function(n,o){return null==n?void 0:n[o]}}),431,[]); +__d((function(g,r,i,a,m,e,d){var t=/^\[object .+?Constructor\]$/,o=Function.prototype,n=Object.prototype,c=o.toString,p=n.hasOwnProperty,u=RegExp('^'+c.call(p).replace(/[\\^$.*+?()[\]{}|]/g,'\\$&').replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,'$1.*?')+'$');m.exports=function(o){return!(!r(d[0])(o)||r(d[1])(o))&&(r(d[2])(o)?u:t).test(r(d[3])(o))}}),432,[433,434,438,428]); +__d((function(g,r,i,a,m,e,d){m.exports=function(n){var t=typeof n;return null!=n&&('object'==t||'function'==t)}}),433,[]); +__d((function(g,r,i,a,m,e,d){var n,c=(n=/[^.]+$/.exec(r(d[0])&&r(d[0]).keys&&r(d[0]).keys.IE_PROTO||''))?'Symbol(src)_1.'+n:'';m.exports=function(n){return!!c&&c in n}}),434,[435]); +__d((function(g,r,i,a,m,e,d){m.exports=r(d[0])['__core-js_shared__']}),435,[436]); +__d((function(g,r,i,a,m,e,d){var t='object'==typeof self&&self&&self.Object===Object&&self,f=r(d[0])||t||Function('return this')();m.exports=f}),436,[437]); +__d((function(g,r,i,a,m,e,d){var t='object'==typeof g&&g&&g.Object===Object&&g;m.exports=t}),437,[]); +__d((function(g,r,i,a,m,e,d){m.exports=function(n){if(!r(d[0])(n))return!1;var t=r(d[1])(n);return"[object Function]"==t||"[object GeneratorFunction]"==t||"[object AsyncFunction]"==t||"[object Proxy]"==t}}),438,[433,439]); +__d((function(g,r,i,a,m,e,d){var n=r(d[0])?r(d[0]).toStringTag:void 0;m.exports=function(t){return null==t?void 0===t?"[object Undefined]":"[object Null]":n&&n in Object(t)?r(d[1])(t):r(d[2])(t)}}),439,[440,441,442]); +__d((function(g,r,i,a,m,e,d){m.exports=r(d[0]).Symbol}),440,[436]); +__d((function(g,r,i,a,m,_e,d){var t=Object.prototype,o=t.hasOwnProperty,e=t.toString,n=r(d[0])?r(d[0]).toStringTag:void 0;m.exports=function(t){var c=o.call(t,n),v=t[n];try{t[n]=void 0;var l=!0}catch(t){}var p=e.call(t);return l&&(c?t[n]=v:delete t[n]),p}}),441,[440]); +__d((function(g,r,i,a,m,e,d){var t=Object.prototype.toString;m.exports=function(n){return t.call(n)}}),442,[]); +__d((function(g,r,i,a,m,e,d){var n=r(d[0])(r(d[1]),'Map');m.exports=n}),443,[430,436]); +__d((function(g,r,i,a,m,e,d){var o=r(d[0])(r(d[1]),'Promise');m.exports=o}),444,[430,436]); +__d((function(g,r,i,a,m,e,d){var t=r(d[0])(r(d[1]),'Set');m.exports=t}),445,[430,436]); +__d((function(g,r,i,a,m,e,d){var n=r(d[0])(r(d[1]),'WeakMap');m.exports=n}),446,[430,436]); +__d((function(g,r,i,a,m,e,d){var o='object'==typeof e&&e&&!e.nodeType&&e,f=o&&'object'==typeof m&&m&&!m.nodeType&&m,t=f&&f.exports===o?r(d[0]).Buffer:void 0,p=(t?t.isBuffer:void 0)||r(d[1]);m.exports=p}),447,[436,448]); +__d((function(g,r,i,a,m,e,d){m.exports=function(){return!1}}),448,[]); +__d((function(g,r,i,a,m,e,d){function t(t){var o=this.__data__=new(r(d[0]))(t);this.size=o.size}t.prototype.clear=r(d[1]),t.prototype.delete=r(d[2]),t.prototype.get=r(d[3]),t.prototype.has=r(d[4]),t.prototype.set=r(d[5]),m.exports=t}),449,[450,458,459,460,461,462]); +__d((function(g,r,i,a,m,e,d){function t(t){var o=-1,p=null==t?0:t.length;for(this.clear();++o-1}}),456,[453]); +__d((function(g,r,i,a,m,e,d){m.exports=function(t,s){var _=this.__data__,n=r(d[0])(_,t);return n<0?(++this.size,_.push([t,s])):_[n][1]=s,this}}),457,[453]); +__d((function(g,r,i,a,m,e,d){m.exports=function(){this.__data__=new(r(d[0])),this.size=0}}),458,[450]); +__d((function(g,r,i,a,m,e,d){m.exports=function(t){var _=this.__data__,n=_.delete(t);return this.size=_.size,n}}),459,[]); +__d((function(g,r,i,a,m,e,d){m.exports=function(t){return this.__data__.get(t)}}),460,[]); +__d((function(g,r,i,a,m,e,d){m.exports=function(t){return this.__data__.has(t)}}),461,[]); +__d((function(g,r,i,a,m,e,d){m.exports=function(t,s){var _=this.__data__;if(_ instanceof r(d[0])){var n=_.__data__;if(!r(d[1])||n.length<199)return n.push([t,s]),this.size=++_.size,this;_=this.__data__=new(r(d[2]))(n)}return _.set(t,s),this.size=_.size,this}}),462,[450,443,463]); +__d((function(g,r,i,a,m,e,d){function t(t){var o=-1,p=null==t?0:t.length;for(this.clear();++o-1&&n%1==0&&n<=9007199254740991}}),482,[]); +__d((function(g,r,i,a,m,e,d){m.exports=function(t,n,f,u,o,v){var l=1&f,s=t.length,c=n.length;if(s!=c&&!(l&&c>s))return!1;var b=v.get(t),h=v.get(n);if(b&&h)return b==n&&h==t;var k=-1,p=!0,_=2&f?new(r(d[0])):void 0;for(v.set(t,n),v.set(n,t);++k-1&&t%1==0&&t=16"},types:"types","jest-junit":{outputDirectory:"reports/junit",outputName:"js-test-results.xml"},files:["android","build.gradle.kts","cli.js","flow","flow-typed","gradle.properties","index.js","interface.js","jest-preset.js","jest","Libraries","LICENSE","local-cli","React-Core.podspec","react-native.config.js","React.podspec","React","ReactAndroid","ReactCommon","README.md","rn-get-polyfills.js","scripts/compose-source-maps.js","scripts/find-node-for-xcode.sh","scripts/generate-codegen-artifacts.js","scripts/generate-provider-cli.js","scripts/generate-specs-cli.js","scripts/codegen","!scripts/codegen/__tests__","!scripts/codegen/__test_fixtures__","scripts/hermes/hermes-utils.js","scripts/hermes/prepare-hermes-for-build.js","scripts/ios-configure-glog.sh","scripts/xcode/with-environment.sh","scripts/launchPackager.bat","scripts/launchPackager.command","scripts/native_modules.rb","scripts/node-binary.sh","scripts/packager.sh","scripts/packager-reporter.js","scripts/react_native_pods_utils/script_phases.rb","scripts/react_native_pods_utils/script_phases.sh","scripts/react_native_pods.rb","scripts/cocoapods","!scripts/cocoapods/__tests__","scripts/react-native-xcode.sh","sdks/.hermesversion","sdks/hermes-engine","sdks/hermesc","settings.gradle.kts","template.config.js","template","!template/node_modules","!template/package-lock.json","!template/yarn.lock","third-party-podspecs","types"],scripts:{prepack:"cp ../../README.md ."},peerDependencies:{react:"18.2.0"},dependencies:{"@jest/create-cache-key-function":"^29.2.1","@react-native-community/cli":"11.3.5","@react-native-community/cli-platform-android":"11.3.5","@react-native-community/cli-platform-ios":"11.3.5","@react-native/assets-registry":"^0.72.0","@react-native/codegen":"^0.72.6","@react-native/gradle-plugin":"^0.72.11","@react-native/js-polyfills":"^0.72.1","@react-native/normalize-colors":"^0.72.0","@react-native/virtualized-lists":"^0.72.6","abort-controller":"^3.0.0",anser:"^1.4.9","base64-js":"^1.1.2","deprecated-react-native-prop-types":"4.1.0","event-target-shim":"^5.0.1","flow-enums-runtime":"^0.0.5",invariant:"^2.2.4","jest-environment-node":"^29.2.1","jsc-android":"^250231.0.0","memoize-one":"^5.0.0","metro-runtime":"0.76.7","metro-source-map":"0.76.7",mkdirp:"^0.5.1",nullthrows:"^1.1.1","pretty-format":"^26.5.2",promise:"^8.3.0","react-devtools-core":"^4.27.2","react-refresh":"^0.4.0","react-shallow-renderer":"^16.15.0","regenerator-runtime":"^0.13.2",scheduler:"0.24.0-canary-efb381bbf-20230505","stacktrace-parser":"^0.1.10","use-sync-external-store":"^1.0.0","whatwg-fetch":"^3.0.0",ws:"^6.2.2",yargs:"^17.6.2"},codegenConfig:{libraries:[{name:"FBReactNativeSpec",type:"modules",ios:{},android:{},jsSrcsDir:"Libraries"},{name:"rncore",type:"components",ios:{},android:{},jsSrcsDir:"Libraries"}]}}}),513,[]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var t=r(d[0])(r(d[1]));e.default=t.default.createContext(!1)}),514,[8,153]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.State=void 0;e.State={UNDETERMINED:0,FAILED:1,BEGAN:2,CANCELLED:3,ACTIVE:4,END:5}}),515,[]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.ActionType=void 0;e.ActionType={REANIMATED_WORKLET:1,NATIVE_ANIMATED_EVENT:2,JS_FUNCTION_OLD_API:3,JS_FUNCTION_NEW_API:4}}),516,[]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.findHandler=o,e.findHandlerByTestID=function(n){var t,u=l.get(n);return void 0!==u&&null!=(t=o(u))?t:null},e.findOldGestureHandler=function(n){return t.get(n)},e.getNextHandlerTag=function(){return u++},e.handlerIDToTag=void 0,e.registerHandler=function(t,u,o){n.set(t,u),(0,r(d[0]).isJestEnv)()&&o&&l.set(o,t)},e.registerOldGestureHandler=function(n,l){t.set(n,l)},e.unregisterHandler=function(t,u){n.delete(t),(0,r(d[0]).isJestEnv)()&&u&&l.delete(u)};e.handlerIDToTag={};var n=new Map,t=new Map,l=new Map,u=1;function o(t){return n.get(t)}}),517,[512]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.baseGestureHandlerWithMonitorProps=e.baseGestureHandlerProps=void 0,e.filterConfig=function(n,t){var o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},l=Object.assign({},o);for(var s of t){var c=n[s];v=s,void 0===(f=c)||f===Object(f)&&'__isNative'in f||'onHandlerStateChange'===v||'onGestureEvent'===v||('simultaneousHandlers'===s||'waitFor'===s?c=u(n[s]):'hitSlop'===s&&'object'!=typeof c&&(c={top:c,left:c,bottom:c,right:c}),l[s]=c)}var f,v;return l},e.findNodeHandle=function(t){if('web'===n.Platform.OS)return t;return(0,n.findNodeHandle)(t)},e.scheduleFlushOperations=function(){l||(l=!0,queueMicrotask((function(){t.default.flushOperations(),l=!1})))};var n=r(d[0]),t=r(d[1])(r(d[2])),o=['id','enabled','shouldCancelWhenOutside','hitSlop','cancelsTouchesInView','userSelect'];e.baseGestureHandlerProps=[].concat(o,['waitFor','simultaneousHandlers'],['onBegan','onFailed','onCancelled','onActivated','onEnded','onGestureEvent','onHandlerStateChange']),e.baseGestureHandlerWithMonitorProps=[].concat(o,['needsPointerData','manualActivation']);function u(t){return t=(0,r(d[3]).toArray)(t),'web'===n.Platform.OS?t.map((function(n){return n.current})).filter((function(n){return n})):t.map((function(n){var t;return r(d[4]).handlerIDToTag[n]||(null==(t=n.current)?void 0:t.handlerTag)||-1})).filter((function(n){return n>0}))}var l=!1}),518,[6,8,511,512,517]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var t=r(d[0])(r(d[1]));e.default=t.default}),519,[8,520]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.__INTERNAL_VIEW_CONFIG=void 0;r(d[0])(r(d[1]));var t=e.__INTERNAL_VIEW_CONFIG={uiViewClassName:'RNGestureHandlerButton',validAttributes:{exclusive:!0,foreground:!0,borderless:!0,enabled:!0,rippleColor:{process:r(d[2]).default},rippleRadius:!0,touchSoundDisabled:!0}};e.default=r(d[3]).get('RNGestureHandlerButton',(function(){return t}))}),520,[8,219,164,160]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.Directions=void 0;e.Directions={RIGHT:1,LEFT:2,UP:4,DOWN:8}}),521,[]); +__d((function(g,_r,_i,a,m,_e,d){Object.defineProperty(_e,"__esModule",{value:!0}),_e.TextInput=_e.Switch=_e.ScrollView=_e.RefreshControl=_e.FlatList=_e.DrawerLayoutAndroid=void 0;var e=_r(d[0])(_r(d[1])),t=_r(d[0])(_r(d[2])),r=_r(d[0])(_r(d[3])),o=(function(e,t){if("function"==typeof WeakMap)var r=new WeakMap,o=new WeakMap;return(function(e,t){if(!t&&e&&e.__esModule)return e;var n,l,i={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return i;if(n=t?o:r){if(n.has(e))return n.get(e);n.set(e,i)}for(var u in e)"default"!==u&&{}.hasOwnProperty.call(e,u)&&((l=(n=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,u))&&(l.get||l.set)?n(i,u,l):i[u]=e[u]);return i})(e,t)})(_r(d[4])),n=_r(d[5]),l=_r(d[0])(_r(d[6])),i=["refreshControl","waitFor"],u=["waitFor","refreshControl"];_e.RefreshControl=(0,l.default)(n.RefreshControl,{disallowInterruption:!0,shouldCancelWhenOutside:!1});var f=(0,l.default)(n.ScrollView,{disallowInterruption:!0,shouldCancelWhenOutside:!1}),s=_e.ScrollView=o.forwardRef((function(e,n){var l=o.useRef(null),u=e.refreshControl,s=e.waitFor,c=(0,r.default)(e,i);return(0,_r(d[7]).jsx)(f,Object.assign({},c,{ref:n,waitFor:[].concat((0,t.default)((0,_r(d[8]).toArray)(null!=s?s:[])),[l]),refreshControl:u?o.cloneElement(u,{ref:l}):void 0}))}));_e.Switch=(0,l.default)(n.Switch,{shouldCancelWhenOutside:!1,shouldActivateOnStart:!0,disallowInterruption:!0}),_e.TextInput=(0,l.default)(n.TextInput),_e.DrawerLayoutAndroid=(0,l.default)(n.DrawerLayoutAndroid,{disallowInterruption:!0}),_e.FlatList=o.forwardRef((function(l,i){var f=o.useRef(null),c=l.waitFor,w=l.refreshControl,h=(0,r.default)(l,u),p={},v={};for(var O of Object.entries(h)){var C=(0,e.default)(O,2),j=C[0],y=C[1];_r(d[9]).nativeViewProps.includes(j)?v[j]=y:p[j]=y}return(0,_r(d[7]).jsx)(n.FlatList,Object.assign({ref:i},p,{renderScrollComponent:function(e){return(0,_r(d[7]).jsx)(s,Object.assign({},Object.assign({},e,v,{waitFor:[].concat((0,t.default)((0,_r(d[8]).toArray)(null!=c?c:[])),[f])})))},refreshControl:w?o.cloneElement(w,{ref:f}):void 0}))}))}),522,[8,26,11,119,153,6,419,193,512,420]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.flingHandlerName=e.flingGestureHandlerProps=e.FlingGestureHandler=void 0;var n=r(d[0])(r(d[1])),l=r(d[0])(r(d[2])),t=e.flingGestureHandlerProps=['numberOfPointers','direction'],o=e.flingHandlerName='FlingGestureHandler';e.FlingGestureHandler=(0,l.default)({name:o,allowedProps:[].concat((0,n.default)(r(d[3]).baseGestureHandlerProps),t),config:{}})}),523,[8,11,421,518]); +__d((function(g,r,i,a,m,_e,d){Object.defineProperty(_e,"__esModule",{value:!0}),_e.forceTouchHandlerName=_e.forceTouchGestureHandlerProps=_e.ForceTouchGestureHandler=void 0;var e=r(d[0])(r(d[1])),o=r(d[0])(r(d[2])),t=r(d[0])(r(d[3])),c=r(d[0])(r(d[4])),u=r(d[0])(r(d[5])),l=r(d[0])(r(d[6])),n=r(d[0])(r(d[7])),f=r(d[0])(r(d[8])),s=r(d[0])(r(d[9]));function h(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(h=function(){return!!e})()}var v=_e.forceTouchGestureHandlerProps=['minForce','maxForce','feedbackOnActivation'],p=(function(e){function n(){return(0,o.default)(this,n),e=this,t=n,l=arguments,t=(0,u.default)(t),(0,c.default)(e,h()?Reflect.construct(t,l||[],(0,u.default)(e).constructor):t.apply(e,l));var e,t,l}return(0,l.default)(n,e),(0,t.default)(n,[{key:"componentDidMount",value:function(){console.warn((0,r(d[10]).tagMessage)('ForceTouchGestureHandler is not available on this platform. Please use ForceTouchGestureHandler.forceTouchAvailable to conditionally render other components that would provide a fallback behavior specific to your usecase'))}},{key:"render",value:function(){return this.props.children}}])})(n.default.Component);p.forceTouchAvailable=!1;var T=_e.forceTouchHandlerName='ForceTouchGestureHandler';(_e.ForceTouchGestureHandler=null!=f.default&&f.default.forceTouchAvailable?(0,s.default)({name:T,allowedProps:[].concat((0,e.default)(r(d[11]).baseGestureHandlerProps),v),config:{}}):p).forceTouchAvailable=(null==f.default?void 0:f.default.forceTouchAvailable)||!1}),524,[8,11,17,18,3,2,56,153,525,421,512,518]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var t,l=r(d[0]);e.default=null!=(t=null==l.NativeModules?void 0:l.NativeModules.PlatformConstants)?t:l.Platform.constants}),525,[6]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.GestureObjects=void 0;var n=r(d[0])(r(d[1]));e.GestureObjects={Tap:function(){return new(r(d[2]).TapGesture)},Pan:function(){return new(r(d[3]).PanGesture)},Pinch:function(){return new(r(d[4]).PinchGesture)},Rotation:function(){return new(r(d[5]).RotationGesture)},Fling:function(){return new(r(d[6]).FlingGesture)},LongPress:function(){return new(r(d[7]).LongPressGesture)},ForceTouch:function(){return new(r(d[8]).ForceTouchGesture)},Native:function(){return new(r(d[9]).NativeGesture)},Manual:function(){return new(r(d[10]).ManualGesture)},Race:function(){for(var t=arguments.length,u=new Array(t),o=0;o0})))?t:[]}function A(e){for(var t of e.config)f.default.dropGestureHandler(t.handlerTag),(0,_r(d[20]).unregisterHandler)(t.handlerTag,t.config.testId);(0,_r(d[12]).scheduleFlushOperations)()}function L(e){if(!e.config.runOnJS){var t=e.handlers.isWorklet.includes(!1),n=e.handlers.isWorklet.includes(!0);t&&n&&console.error((0,_r(d[21]).tagMessage)("Some of the callbacks in the gesture are worklets and some are not. Either make sure that all calbacks are marked as 'worklet' if you wish to run them on the UI thread or use '.runOnJS(true)' modifier on the gesture explicitly to run all callbacks on the JS thread."))}}function _(e){var t=e.preparedGesture,n=e.gestureConfig,r=e.gesture,u=e.viewTag,o=e.webEventHandlersRef,l=e.mountedRef;for(var s of(t.firstExecution?t.firstExecution=!1:n.initialize(),queueMicrotask((function(){l.current&&n.prepare()})),r))L(s),f.default.createGestureHandler(s.handlerName,s.handlerTag,(0,_r(d[12]).filterConfig)(s.config,v)),(0,_r(d[20]).registerHandler)(s.handlerTag,s,s.config.testId);for(var i of(queueMicrotask((function(){if(l.current){for(var e of r){var t=[];e.config.requireToFail&&(t=g(e.config.requireToFail));var n=[];e.config.simultaneousWith&&(n=g(e.config.simultaneousWith)),f.default.updateGestureHandler(e.handlerTag,(0,_r(d[12]).filterConfig)(e.config,v,{simultaneousHandlers:n,waitFor:t}))}(0,_r(d[12]).scheduleFlushOperations)()}})),t.config=r,t.config)){var c=i.shouldUseReanimated?_r(d[22]).ActionType.REANIMATED_WORKLET:_r(d[22]).ActionType.JS_FUNCTION_NEW_API;'web'===E.Platform.OS?f.default.attachGestureHandler(i.handlerTag,u,_r(d[22]).ActionType.JS_FUNCTION_OLD_API,o):f.default.attachGestureHandler(i.handlerTag,u,c)}if(t.animatedHandlers){t.animatedHandlers.value=r.filter((function(e){return e.shouldUseReanimated})).map((function(e){return e.handlers}))}}function p(e,t,n,r){t.prepare();for(var u=0;u3?u-3:0),l=3;l`."))}};return r?(0,_r(d[30]).jsx)(b,{ref:L,onGestureHandlerEvent:v.animatedEventHandler,children:e.children}):(0,_r(d[30]).jsx)(I,{ref:L,children:e.children})},(function(e){function t(){return(0,n.default)(this,t),e=this,r=t,l=arguments,r=(0,o.default)(r),(0,u.default)(e,C()?Reflect.construct(r,l||[],(0,o.default)(e).constructor):r.apply(e,l));var e,r,l}return(0,l.default)(t,e),(0,r.default)(t,[{key:"render",value:function(){try{var e=c.default.Children.only(this.props.children);return c.default.cloneElement(e,{collapsable:!1},e.props.children)}catch(e){throw new Error((0,_r(d[21]).tagMessage)("GestureDetector got more than one view as a child. If you want the gesture to work on multiple views, wrap them with a common parent and attach the gesture to that view."))}}}])})(c.default.Component)),b=null!=(e=null==_r(d[24]).Reanimated||null==(t=_r(d[24]).Reanimated.default)?void 0:t.createAnimatedComponent(I))?e:I}),538,[8,17,18,3,2,56,26,11,153,511,6,514,518,539,540,541,524,523,420,528,517,512,516,542,543,515,647,648,649,650,193]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.tapHandlerName=e.tapGestureHandlerProps=e.TapGestureHandler=void 0;var t=r(d[0])(r(d[1])),n=r(d[0])(r(d[2])),l=e.tapGestureHandlerProps=['maxDurationMs','maxDelayMs','numberOfTaps','maxDeltaX','maxDeltaY','maxDist','minPointers'],s=e.tapHandlerName='TapGestureHandler';e.TapGestureHandler=(0,n.default)({name:s,allowedProps:[].concat((0,t.default)(r(d[3]).baseGestureHandlerProps),l),config:{shouldCancelWhenOutside:!0}})}),539,[8,11,421,518]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.PanGestureHandler=void 0,e.managePanProps=c,e.panHandlerName=e.panGestureHandlerProps=e.panGestureHandlerCustomNativeProps=void 0;var f=r(d[0])(r(d[1])),t=r(d[0])(r(d[2])),s=e.panGestureHandlerProps=['activeOffsetY','activeOffsetX','failOffsetY','failOffsetX','minDist','minVelocity','minVelocityX','minVelocityY','minPointers','maxPointers','avgTouches','enableTrackpadTwoFingerGesture','activateAfterLongPress'],O=e.panGestureHandlerCustomNativeProps=['activeOffsetYStart','activeOffsetYEnd','activeOffsetXStart','activeOffsetXEnd','failOffsetYStart','failOffsetYEnd','failOffsetXStart','failOffsetXEnd'],n=e.panHandlerName='PanGestureHandler';e.PanGestureHandler=(0,t.default)({name:n,allowedProps:[].concat((0,f.default)(r(d[3]).baseGestureHandlerProps),s),config:{},transformProps:c,customNativeProps:O});function l(f){var t=Object.assign({},f);return void 0!==f.activeOffsetX&&(delete t.activeOffsetX,Array.isArray(f.activeOffsetX)?(t.activeOffsetXStart=f.activeOffsetX[0],t.activeOffsetXEnd=f.activeOffsetX[1]):f.activeOffsetX<0?t.activeOffsetXStart=f.activeOffsetX:t.activeOffsetXEnd=f.activeOffsetX),void 0!==f.activeOffsetY&&(delete t.activeOffsetY,Array.isArray(f.activeOffsetY)?(t.activeOffsetYStart=f.activeOffsetY[0],t.activeOffsetYEnd=f.activeOffsetY[1]):f.activeOffsetY<0?t.activeOffsetYStart=f.activeOffsetY:t.activeOffsetYEnd=f.activeOffsetY),void 0!==f.failOffsetX&&(delete t.failOffsetX,Array.isArray(f.failOffsetX)?(t.failOffsetXStart=f.failOffsetX[0],t.failOffsetXEnd=f.failOffsetX[1]):f.failOffsetX<0?t.failOffsetXStart=f.failOffsetX:t.failOffsetXEnd=f.failOffsetX),void 0!==f.failOffsetY&&(delete t.failOffsetY,Array.isArray(f.failOffsetY)?(t.failOffsetYStart=f.failOffsetY[0],t.failOffsetYEnd=f.failOffsetY[1]):f.failOffsetY<0?t.failOffsetYStart=f.failOffsetY:t.failOffsetYEnd=f.failOffsetY),t}function c(f){return l(f)}}),540,[8,11,421,518]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.longPressHandlerName=e.longPressGestureHandlerProps=e.LongPressGestureHandler=void 0;var s=r(d[0])(r(d[1])),n=r(d[0])(r(d[2])),l=e.longPressGestureHandlerProps=['minDurationMs','maxDist'],o=e.longPressHandlerName='LongPressGestureHandler';e.LongPressGestureHandler=(0,n.default)({name:o,allowedProps:[].concat((0,s.default)(r(d[3]).baseGestureHandlerProps),l),config:{shouldCancelWhenOutside:!0}})}),541,[8,11,421,518]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.TouchEventType=void 0;e.TouchEventType={UNDETERMINED:0,TOUCHES_DOWN:1,TOUCHES_MOVE:2,TOUCHES_UP:3,TOUCHES_CANCELLED:4}}),542,[]); +__d((function(g,r,i,a,m,_e,d){var e,t;Object.defineProperty(_e,"__esModule",{value:!0}),_e.Reanimated=void 0;try{_e.Reanimated=t=r(d[0])}catch(e){_e.Reanimated=t=void 0}null!=(e=t)&&e.useSharedValue||(_e.Reanimated=t=void 0);var s,o={code:"function anonymous(){const{tagMessage}=this._closure;console.warn(tagMessage('Please use newer version of react-native-reanimated in order to control state of the gestures.'));}"};void 0===t||t.setGestureState||(t.setGestureState=((s=function(){console.warn((0,r(d[1]).tagMessage)('Please use newer version of react-native-reanimated in order to control state of the gestures.'))})._closure={tagMessage:r(d[1]).tagMessage},s.__initData=o,s.__workletHash=0x9fc7157b44f,s))}),543,[544,512]); +__d((function(g,_r,_i,a,m,_e,d){Object.defineProperty(_e,"__esModule",{value:!0});var e={};_e.default=void 0;var t=(function(e,t){if("function"==typeof WeakMap)var r=new WeakMap,n=new WeakMap;return(function(e,t){if(!t&&e&&e.__esModule)return e;var o,f,u={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return u;if(o=t?n:r){if(o.has(e))return o.get(e);o.set(e,u)}for(var i in e)"default"!==i&&{}.hasOwnProperty.call(e,i)&&((f=(o=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,i))&&(f.get||f.set)?o(u,i,f):u[i]=e[i]);return u})(e,t)})(_r(d[0]));Object.keys(_r(d[1])).forEach((function(t){"default"!==t&&"__esModule"!==t&&(Object.prototype.hasOwnProperty.call(e,t)||t in _e&&_e[t]===_r(d[1])[t]||Object.defineProperty(_e,t,{enumerable:!0,get:function(){return _r(d[1])[t]}}))}));_e.default=t}),544,[545,591]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"FlatList",{enumerable:!0,get:function(){return r(d[0]).ReanimatedFlatList}}),Object.defineProperty(e,"Image",{enumerable:!0,get:function(){return r(d[1]).AnimatedImage}}),Object.defineProperty(e,"ScrollView",{enumerable:!0,get:function(){return r(d[2]).AnimatedScrollView}}),Object.defineProperty(e,"Text",{enumerable:!0,get:function(){return r(d[3]).AnimatedText}}),Object.defineProperty(e,"View",{enumerable:!0,get:function(){return r(d[4]).AnimatedView}}),e.addWhitelistedUIProps=e.addWhitelistedNativeProps=void 0,Object.defineProperty(e,"createAnimatedComponent",{enumerable:!0,get:function(){return t.default}});var t=r(d[5])(r(d[6]));e.addWhitelistedNativeProps=r(d[7]).addWhitelistedNativeProps,e.addWhitelistedUIProps=r(d[7]).addWhitelistedUIProps}),545,[546,644,645,646,643,8,547,615]); +__d((function(g,_r,_i,a,m,_e,d){Object.defineProperty(_e,"__esModule",{value:!0}),_e.ReanimatedFlatList=void 0;var e=_r(d[0])(_r(d[1])),t=(function(e,t){if("function"==typeof WeakMap)var n=new WeakMap,r=new WeakMap;return(function(e,t){if(!t&&e&&e.__esModule)return e;var o,l,i={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return i;if(o=t?r:n){if(o.has(e))return o.get(e);o.set(e,i)}for(var u in e)"default"!==u&&{}.hasOwnProperty.call(e,u)&&((l=(o=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,u))&&(l.get||l.set)?o(i,u,l):i[u]=e[u]);return i})(e,t)})(_r(d[2])),n=_r(d[3]),r=_r(d[0])(_r(d[4])),o=["itemLayoutAnimation"];var l=(0,r.default)(n.FlatList),i=function(e,t){return function(n){return(0,_r(d[5]).jsx)(_r(d[6]).AnimatedView,{layout:e,onLayout:n.onLayout,style:t,children:n.children})}},u=(_e.ReanimatedFlatList=(0,t.forwardRef)((function(n,r){var f=n.itemLayoutAnimation,c=(0,e.default)(n,o),s=null!=c&&c.inverted?null!=c&&c.horizontal?u.horizontallyInverted:u.verticallyInverted:void 0;'scrollEventThrottle'in c||(c.scrollEventThrottle=1);var v=t.default.useMemo((function(){return i(f,s)}),[s]);return(0,_r(d[5]).jsx)(l,Object.assign({ref:r},c,{CellRendererComponent:v}))})),n.StyleSheet.create({verticallyInverted:{transform:[{scaleY:-1}]},horizontallyInverted:{transform:[{scaleX:-1}]}}))}),546,[8,119,153,6,547,193,643]); +__d((function(g,r,i,a,m,_e,d){Object.defineProperty(_e,"__esModule",{value:!0}),_e.default=function(T,A){(0,v.default)('function'!=typeof T||T.prototype&&T.prototype.isReactComponent,`Looks like you're passing a function component \`${T.name}\` to \`createAnimatedComponent\` function which supports only class components. Please wrap your function component with \`React.forwardRef()\` or use a class component instead.`);var O=(function(u){function v(t){var o,l,u,c;return(0,e.default)(this,v),l=this,u=v,c=[t],u=(0,s.default)(u),(o=(0,n.default)(l,_()?Reflect.construct(u,c||[],(0,s.default)(l).constructor):u.apply(l,c)))._styles=null,o._viewTag=-1,o._isFirstRender=!0,o.animatedStyle={value:{}},o.initialStyle={},o._component=null,o._inlinePropsViewDescriptors=null,o._inlinePropsMapperId=null,o._inlineProps={},o._sharedElementTransition=null,o._setComponentRef=(0,f.default)({getForwardedRef:function(){return o.props.forwardedRef},setLocalRef:function(e){var t=(0,p.findNodeHandle)(e),n=o.props,s=n.layout,l=n.entering,u=n.exiting,c=n.sharedTransitionTag;if((s||l||u||c)&&null!=t&&((0,r(d[16]).shouldBeUseWeb)()||(0,r(d[17]).enableLayoutAnimations)(!0,!1),s&&(0,r(d[17]).configureLayoutAnimations)(t,r(d[18]).LayoutAnimationType.LAYOUT,P(s)),l&&(0,r(d[17]).configureLayoutAnimations)(t,r(d[18]).LayoutAnimationType.ENTERING,P(l)),u&&(0,r(d[17]).configureLayoutAnimations)(t,r(d[18]).LayoutAnimationType.EXITING,P(u)),c)){var f,v=null!=(f=o.props.sharedTransitionStyle)?f:new(r(d[18]).SharedTransition);v.registerTransition(t,c),o._sharedElementTransition=v}e!==o._component&&(o._component=e)}}),(0,r(d[16]).isJest)()&&(o.animatedStyle={value:{}}),o}return(0,o.default)(v,u),(0,t.default)(v,[{key:"componentWillUnmount",value:function(){var e;this._detachNativeEvents(),this._detachStyles(),this._detachInlineProps(),null==(e=this._sharedElementTransition)||e.unregisterTransition(this._viewTag)}},{key:"componentDidMount",value:function(){this._attachNativeEvents(),this._attachAnimatedStyles(),this._attachInlineProps()}},{key:"_getEventViewRef",value:function(){var e;return null!=(e=this._component)&&e.getScrollableNode?this._component.getScrollableNode():this._component}},{key:"_attachNativeEvents",value:function(){var e=this._getEventViewRef(),t=null;for(var n in this.props){var s=this.props[n];V('current',s)&&s.current instanceof c.default&&(null===t&&(t=(0,p.findNodeHandle)(null!=A&&A.setNativeProps?this:e)),s.current.registerForEvents(t,n))}}},{key:"_detachNativeEvents",value:function(){for(var e in this.props){var t=this.props[e];V('current',t)&&t.current instanceof c.default&&t.current.unregisterFromEvents()}}},{key:"_detachStyles",value:function(){if((0,r(d[16]).isWeb)()&&null!==this._styles)for(var e of this._styles)null!=e&&e.viewsRef&&e.viewsRef.remove(this);else if(-1!==this._viewTag&&null!==this._styles){var t;for(var n of this._styles)n.viewDescriptors.remove(this._viewTag);null!=(t=this.props.animatedProps)&&t.viewDescriptors&&this.props.animatedProps.viewDescriptors.remove(this._viewTag),g._IS_FABRIC&&(0,r(d[19]).removeFromPropsRegistry)(this._viewTag)}}},{key:"_reattachNativeEvents",value:function(e){for(var t in e){var n=this.props[t];V('current',n)&&n.current instanceof c.default&&n.current.reattachNeeded&&n.current.unregisterFromEvents()}var s=null;for(var o in this.props){var l=this.props[o];if(V('current',l)&&l.current instanceof c.default&&l.current.reattachNeeded){if(null===s){var u=this._getEventViewRef();s=(0,p.findNodeHandle)(null!=A&&A.setNativeProps?this:u)}l.current.registerForEvents(s,o),l.current.reattachNeeded=!1}}}},{key:"_updateFromNative",value:function(e){var t;null!=A&&A.setNativeProps?A.setNativeProps(this._component,e):null==(t=this._component)||null==t.setNativeProps||t.setNativeProps(e)}},{key:"_getViewInfo",value:function(){var e,t,n,s,o=null,l=null!=(e=this._component)&&e.getAnimatableRef?this._component.getAnimatableRef():this;if((0,r(d[16]).isWeb)())t=(0,p.findNodeHandle)(l),n=null,o=null,s=null;else{var u,c=r(d[20]).RNRenderer.findHostInstance_DEPRECATED(l);if(!c)throw new Error('Cannot find host instance for this component. Maybe it renders nothing?');t=null==c?void 0:c._nativeTag,n=null==c||null==(u=c.viewConfig)?void 0:u.uiViewClassName,s=null==c?void 0:c.viewConfig,g._IS_FABRIC&&(o=(0,r(d[21]).getShadowNodeWrapperFromRef)(this))}return{viewTag:t,viewName:n,shadowNodeWrapper:o,viewConfig:s}}},{key:"_attachAnimatedStyles",value:function(){var e,t,n=this,s=this.props.style?R(N(this.props.style)):[],o=this._styles;this._styles=s;var l=this._animatedProps;this._animatedProps=this.props.animatedProps;var u=this._getViewInfo(),p=u.viewTag,c=u.viewName,f=u.shadowNodeWrapper,v=u.viewConfig;if((((null==(e=this.props.animatedProps)?void 0:e.viewDescriptors)||s.length)&&v&&(0,r(d[22]).adaptViewConfig)(v),this._viewTag=p,o)&&!(1===s.length&&1===o.length&&b(s[0],o[0]))){var h=function(e){s.some((function(t){return b(t,e)}))||e.viewDescriptors.remove(p)};for(var y of o)h(y)}s.forEach((function(e){e.viewDescriptors.add({tag:p,name:c,shadowNodeWrapper:f}),(0,r(d[16]).isJest)()&&(n.animatedStyle.value=Object.assign({},n.animatedStyle.value,e.initial.value),e.animatedStyle.current=n.animatedStyle)})),l&&!S(l,this.props.animatedProps)&&l.viewDescriptors.remove(p),null!=(t=this.props.animatedProps)&&t.viewDescriptors&&this.props.animatedProps.viewDescriptors.add({tag:p,name:c,shadowNodeWrapper:f})}},{key:"_attachInlineProps",value:function(){var e,t=D(this.props);if(E(t,this._inlineProps)){if(!this._inlinePropsViewDescriptors){this._inlinePropsViewDescriptors=(0,r(d[23]).makeViewDescriptorsSet)();var n=this._getViewInfo(),s=n.viewTag,o=n.viewName,l=n.shadowNodeWrapper,u=n.viewConfig;Object.keys(t).length&&u&&(0,r(d[22]).adaptViewConfig)(u),this._inlinePropsViewDescriptors.add({tag:s,name:o,shadowNodeWrapper:l})}var p=this._inlinePropsViewDescriptors.sharableViewDescriptors,c=y.default.native?void 0:{items:new Set([this])},f=((e=function(){var e=C(t);(0,h.default)(p,e,c)})._closure={getInlinePropsUpdate:C,newInlineProps:t,updateProps:h.default,sharableViewDescriptors:p,maybeViewRef:c},e.__initData=j,e.__workletHash=0xd192fa8c72a,e);this._inlineProps=t,this._inlinePropsMapperId&&(0,r(d[17]).stopMapper)(this._inlinePropsMapperId),this._inlinePropsMapperId=null,Object.keys(t).length&&(this._inlinePropsMapperId=(0,r(d[17]).startMapper)(f,Object.values(t)))}}},{key:"_detachInlineProps",value:function(){this._inlinePropsMapperId&&(0,r(d[17]).stopMapper)(this._inlinePropsMapperId)}},{key:"componentDidUpdate",value:function(e){this._reattachNativeEvents(e),this._attachAnimatedStyles(),this._attachInlineProps()}},{key:"_filterNonAnimatedProps",value:function(e){var t=this,n={},s=function(){var s=e[o];if('style'===o){var u=e.style,f=N(null!=u?u:[]).map((function(e){if(e&&e.viewDescriptors)return e.viewsRef.add(t),t._isFirstRender&&(t.initialStyle=Object.assign({},e.initial.value,t.initialStyle,(0,r(d[24]).initialUpdaterRun)(e.initial.updater))),t.initialStyle;if(I(e)){if(t._isFirstRender)return C(e);var n={};for(var s of Object.entries(e)){var o=(0,l.default)(s,2),u=o[0],p=o[1];(0,r(d[15]).isSharedValue)(p)||'transform'===u&&k(p)||(n[u]=p)}return n}return e}));n[o]=p.StyleSheet.flatten(f)}else if('animatedProps'===o){var v=e.animatedProps;void 0!==v.initial&&Object.keys(v.initial.value).forEach((function(e){var s,o;n[e]=null==(s=v.initial)?void 0:s.value[e],null==(o=v.viewsRef)||o.add(t)}))}else V('current',s)&&s.current instanceof c.default?s.current.eventNames.length>0?s.current.eventNames.forEach((function(e){n[e]=V('listeners',s.current)?s.current.listeners[e]:w})):n[o]=w:(0,r(d[15]).isSharedValue)(s)?t._isFirstRender&&(n[o]=s.value):'onGestureHandlerStateChange'===o&&(0,r(d[16]).isChromeDebugger)()||(n[o]=s)};for(var o in e)s();return n}},{key:"render",value:function(){var e=this._filterNonAnimatedProps(this.props);(0,r(d[16]).isJest)()&&(e.animatedStyle=this.animatedStyle),this._isFirstRender&&(this._isFirstRender=!1);var t=p.Platform.select({web:{},default:{collapsable:!1}});return(0,r(d[25]).jsx)(T,Object.assign({},e,{ref:this._setComponentRef},t))}}])})(u.default.Component);return O.displayName=`AnimatedComponent(${T.displayName||T.name||'Component'})`,u.default.forwardRef((function(e,t){return(0,r(d[25]).jsx)(O,Object.assign({},e,null===t?null:{forwardedRef:t}))}))};var e=r(d[0])(r(d[1])),t=r(d[0])(r(d[2])),n=r(d[0])(r(d[3])),s=r(d[0])(r(d[4])),o=r(d[0])(r(d[5])),l=r(d[0])(r(d[6])),u=r(d[0])(r(d[7])),p=r(d[8]),c=r(d[0])(r(d[9])),f=r(d[0])(r(d[10]));r(d[11]);var v=r(d[0])(r(d[12])),h=r(d[0])(r(d[13])),y=r(d[0])(r(d[14]));function _(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(_=function(){return!!e})()}function w(){}function P(e){return'build'in e&&'function'==typeof e.build?e.build():e}function N(e){if(!Array.isArray(e))return[e];var t=[],n=function(e){e.forEach((function(e){Array.isArray(e)?n(e):t.push(e)}))};return n(e),t}function R(e){return e.filter((function(e){return null==e?void 0:e.viewDescriptors}))}function b(e,t){return(null==e?void 0:e.viewsRef)===(null==t?void 0:t.viewsRef)}var S=b,V=function(e,t){return('function'==typeof t||'object'==typeof t)&&(null!=t&&e in t)};function k(e){return!!e&&e.some((function(e){return I(e)}))}function I(e){return!!e&&Object.keys(e).some((function(t){var n=e[t];return(0,r(d[15]).isSharedValue)(n)||'transform'===t&&k(n)}))}function D(e){var t={};for(var n in e){var s,o=e[n];if('style'===n)N(null!=(s=e.style)?s:[]).forEach((function(e){if(e)for(var n of Object.entries(e)){var s=(0,l.default)(n,2),o=s[0],u=s[1];((0,r(d[15]).isSharedValue)(u)||'transform'===o&&k(u))&&(t[o]=u)}}));else(0,r(d[15]).isSharedValue)(o)&&(t[n]=o)}return t}function E(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!0;for(var n of Object.keys(e))if(e[n]!==t[n])return!0;return!1}var T,A={code:"function getInlinePropsUpdate(inlineProps){const getInlinePropsUpdate=this._recur;const{isSharedValue}=this._closure;const update={};for(const[key,styleValue]of Object.entries(inlineProps)){if(key==='transform'){update[key]=styleValue.map(function(transform){return getInlinePropsUpdate(transform);});}else if(isSharedValue(styleValue)){update[key]=styleValue.value;}else{update[key]=styleValue;}}return update;}"},C=((T=function(e){var t={};for(var n of Object.entries(e)){var s=(0,l.default)(n,2),o=s[0],u=s[1];'transform'===o?t[o]=u.map((function(e){return C(e)})):(0,r(d[15]).isSharedValue)(u)?t[o]=u.value:t[o]=u}return t})._closure={isSharedValue:r(d[15]).isSharedValue},T.__initData=A,T.__workletHash=0xf09e84015ef,T),j={code:"function anonymous(){const{getInlinePropsUpdate,newInlineProps,updateProps,sharableViewDescriptors,maybeViewRef}=this._closure;const update=getInlinePropsUpdate(newInlineProps);updateProps(sharableViewDescriptors,update,maybeViewRef);}"}}),547,[8,17,18,3,2,56,26,153,6,548,569,570,24,584,549,591,552,557,616,641,642,603,615,598,573,193]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var t=r(d[0])(r(d[1])),n=r(d[0])(r(d[2])),s=r(d[0])(r(d[3]));function o(t,n){return function(s){n(Object.assign({},s.nativeEvent,{eventName:t}))}}e.default=(0,n.default)((function n(u){var h=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];(0,t.default)(this,n),this.worklet=u,this.eventNames=h,this.reattachNeeded=!1,this.listeners={},this.viewTag=void 0,this.registrations=[],s.default.native||(this.listeners=h.reduce((function(t,n){return t[n]=o(n,u),t}),{}))}),[{key:"updateWorklet",value:function(t){this.worklet=t,this.reattachNeeded=!0}},{key:"registerForEvents",value:function(t,n){var s=this;this.viewTag=t,this.registrations=this.eventNames.map((function(n){return(0,r(d[4]).registerEventHandler)(t+n,s.worklet)})),0===this.registrations.length&&n&&this.registrations.push((0,r(d[4]).registerEventHandler)(t+n,this.worklet))}},{key:"registerForEventByName",value:function(t){this.registrations.push((0,r(d[4]).registerEventHandler)(t,this.worklet))}},{key:"unregisterFromEvents",value:function(){this.registrations.forEach((function(t){return(0,r(d[4]).unregisterEventHandler)(t)})),this.registrations=[]}}])}),548,[8,17,18,549,557]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var t=r(d[0])(r(d[1]));e.default=(0,r(d[2]).shouldBeUseWeb)()?t.default:new(r(d[3]).NativeReanimated)}),549,[8,550,552,554]); +__d((function(g,r,i,a,_m,_e,d){Object.defineProperty(_e,"__esModule",{value:!0}),_e.default=_e._updatePropsJS=void 0;var e,t,o=r(d[0])(r(d[1])),n=r(d[0])(r(d[2]));if((0,r(d[3]).isWeb)()){try{e=r(d[4]).default}catch(e){}try{t=r(d[5]).createTransformValue}catch(e){}}var s=new n.default;g._makeShareableClone=function(){throw new Error('[Reanimated] _makeShareableClone should never be called in JSReanimated.')},g._scheduleOnJS=function(){throw new Error('[Reanimated] _scheduleOnJS should never be called in JSReanimated.')};_e._updatePropsJS=function(t,n){if(n._component){var s=n._component,c=Object.keys(t).reduce((function(e,o){var n=t[o];return e['function'==typeof n?1:0][o]=n,e}),[{},{}]),f=(0,o.default)(c,1)[0];'function'==typeof s.setNativeProps?u(s,f):void 0!==e&&void 0!==s.style?l(s,f):Object.keys(s.props).length>0?Object.keys(s.props).forEach((function(e){if(f[e]){var t=e.replace(/[A-Z]/g,(function(e){return'-'+e.toLowerCase()}));s._touchableNode.setAttribute(t,f[e])}})):console.warn('It is not possible to manipulate component')}};var u=function(e,t){var o=e.previousStyle?e.previousStyle:{},n=Object.assign({},o,t);e.previousStyle=n,null==e.setNativeProps||e.setNativeProps({style:n})},l=function(o,n){var s=o.previousStyle?o.previousStyle:{},u=Object.assign({},s,n);o.previousStyle=u;var l=e(u);for(var c in Array.isArray(l.transform)&&void 0!==t&&(l.transform=t(l.transform)),l)o.style[c]=l[c]};_e.default=s}),550,[8,26,551,552]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var n=r(d[0])(r(d[1])),t=r(d[0])(r(d[2])),o=r(d[0])(r(d[3])),s=(e.default=(0,o.default)((function n(){(0,t.default)(this,n),this.native=!1,this.nextSensorId=0,this.sensors=new Map,this.platform=void 0}),[{key:"makeShareableClone",value:function(){throw new Error('[Reanimated] makeShareableClone should never be called in JSReanimated.')}},{key:"installCoreFunctions",value:function(n,t){}},{key:"scheduleOnUI",value:function(n){requestAnimationFrame(n)}},{key:"registerEventHandler",value:function(n,t){return-1}},{key:"unregisterEventHandler",value:function(n){}},{key:"enableLayoutAnimations",value:function(){(0,r(d[4]).isWeb)()?console.warn('[Reanimated] Layout Animations are not supported on web yet.'):(0,r(d[4]).isChromeDebugger)()?console.warn('[Reanimated] Layout Animations are no-ops when using Chrome Debugger.'):(0,r(d[4]).isJest)()?console.warn('[Reanimated] Layout Animations are no-ops when using Jest.'):console.warn('[Reanimated] Layout Animations are not supported on this configuration.')}},{key:"configureLayoutAnimation",value:function(){}},{key:"registerSensor",value:function(t,o,u,l){var c=this;if(void 0===this.platform&&this.detectPlatform(),!(this.getSensorName(t)in window))return console.warn('[Reanimated] Sensor is not available.'+((0,r(d[4]).isWeb)()&&'https:'!==location.protocol?' Make sure you use secure origin with `npx expo start --web --https`.':'')+(this.platform===s.WEB_IOS?' For iOS web, you will also have to also grant permission in the browser: https://dev.to/li/how-to-requestpermission-for-devicemotion-and-deviceorientation-events-in-ios-13-46g2.':'')),-1;void 0===this.platform&&this.detectPlatform();var v,w=this.initializeSensor(t,o);return v=t===r(d[5]).SensorType.ROTATION?function(){var t=(0,n.default)(w.quaternion,4),o=t[0],u=t[1],v=t[2],y=t[3];if(c.platform===s.WEB_ANDROID){var h=[y,-v];v=h[0],y=h[1]}var f=Math.atan2(2*(v*y+o*u),o*o-u*u-v*v+y*y),p=Math.sin(-2*(u*y-o*v)),S=Math.atan2(2*(u*v+o*y),o*o+u*u-v*v-y*y);l({qw:o,qx:u,qy:v,qz:y,yaw:f,pitch:p,roll:S,interfaceOrientation:0})}:function(){var t=w.x,o=w.y,u=w.z,v=c.platform===s.WEB_ANDROID?[-t,-o,-u]:[t,o,u],y=(0,n.default)(v,3);t=y[0],o=y[1],u=y[2],l({x:t,y:o,z:u,interfaceOrientation:0})},w.addEventListener('reading',v),w.start(),this.sensors.set(this.nextSensorId,w),this.nextSensorId++}},{key:"unregisterSensor",value:function(n){var t=this.sensors.get(n);void 0!==t&&(t.stop(),this.sensors.delete(n))}},{key:"subscribeForKeyboardEvents",value:function(n){return(0,r(d[4]).isWeb)()?console.warn('[Reanimated] useAnimatedKeyboard is not available on web yet.'):(0,r(d[4]).isChromeDebugger)()?console.warn('[Reanimated] useAnimatedKeyboard is not available when using Chrome Debugger.'):(0,r(d[4]).isJest)()?console.warn('[Reanimated] useAnimatedKeyboard is not available when using Jest.'):console.warn('[Reanimated] useAnimatedKeyboard is not available on this configuration.'),-1}},{key:"unsubscribeFromKeyboardEvents",value:function(n){}},{key:"initializeSensor",value:function(n,t){var o=t<=0?{referenceFrame:'device'}:{frequency:1e3/t};switch(n){case r(d[5]).SensorType.ACCELEROMETER:return new window.Accelerometer(o);case r(d[5]).SensorType.GYROSCOPE:return new window.Gyroscope(o);case r(d[5]).SensorType.GRAVITY:return new window.GravitySensor(o);case r(d[5]).SensorType.MAGNETIC_FIELD:return new window.Magnetometer(o);case r(d[5]).SensorType.ROTATION:return new window.AbsoluteOrientationSensor(o)}}},{key:"getSensorName",value:function(n){switch(n){case r(d[5]).SensorType.ACCELEROMETER:return'Accelerometer';case r(d[5]).SensorType.GRAVITY:return'GravitySensor';case r(d[5]).SensorType.GYROSCOPE:return'Gyroscope';case r(d[5]).SensorType.MAGNETIC_FIELD:return'Magnetometer';case r(d[5]).SensorType.ROTATION:return'AbsoluteOrientationSensor'}}},{key:"detectPlatform",value:function(){var n=navigator.userAgent||navigator.vendor||window.opera;void 0===n?this.platform=s.UNKNOWN:/iPad|iPhone|iPod/.test(n)?this.platform=s.WEB_IOS:/android/i.test(n)?this.platform=s.WEB_ANDROID:this.platform=s.WEB}},{key:"makeSynchronizedDataHolder",value:function(n){throw new Error('[Reanimated] makeSynchronizedDataHolder is not available in JSReanimated.')}},{key:"getDataSynchronously",value:function(n){throw new Error('[Reanimated] getDataSynchronously is not available in JSReanimated.')}},{key:"getViewProp",value:function(n,t,o){throw new Error('[Reanimated] getViewProp is not available in JSReanimated.')}},{key:"configureProps",value:function(){throw new Error('[Reanimated] configureProps is not available in JSReanimated.')}}]),(function(n){return n.WEB_IOS="web iOS",n.WEB_ANDROID="web Android",n.WEB="web",n.UNKNOWN="unknown",n})(s||{}))}),551,[8,26,17,18,552,553]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.isAndroid=function(){return'android'===n.Platform.OS},e.isChromeDebugger=t,e.isJest=o,e.isWeb=u,e.nativeShouldBeMock=function(){return o()||t()},e.shouldBeUseWeb=function(){return o()||t()||u()};var n=r(d[0]);function o(){return!!process.env.JEST_WORKER_ID}function t(){return!g.nativeCallSyncHook||g.__REMOTEDEV__}function u(){return'web'===n.Platform.OS}}),552,[6]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.SensorType=e.KeyboardState=e.InterfaceOrientation=e.IOSReferenceFrame=void 0;e.SensorType=(function(t){return t[t.ACCELEROMETER=1]="ACCELEROMETER",t[t.GYROSCOPE=2]="GYROSCOPE",t[t.GRAVITY=3]="GRAVITY",t[t.MAGNETIC_FIELD=4]="MAGNETIC_FIELD",t[t.ROTATION=5]="ROTATION",t})({}),e.IOSReferenceFrame=(function(t){return t[t.XArbitraryZVertical=0]="XArbitraryZVertical",t[t.XArbitraryCorrectedZVertical=1]="XArbitraryCorrectedZVertical",t[t.XMagneticNorthZVertical=2]="XMagneticNorthZVertical",t[t.XTrueNorthZVertical=3]="XTrueNorthZVertical",t[t.Auto=4]="Auto",t})({}),e.InterfaceOrientation=(function(t){return t[t.ROTATION_0=0]="ROTATION_0",t[t.ROTATION_90=90]="ROTATION_90",t[t.ROTATION_180=180]="ROTATION_180",t[t.ROTATION_270=270]="ROTATION_270",t})({}),e.KeyboardState=(function(t){return t[t.UNKNOWN=0]="UNKNOWN",t[t.OPENING=1]="OPENING",t[t.OPEN=2]="OPEN",t[t.CLOSING=3]="CLOSING",t[t.CLOSED=4]="CLOSED",t})({})}),553,[]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.NativeReanimated=void 0;var n=r(d[0])(r(d[1])),t=r(d[0])(r(d[2])),o=r(d[3]);e.NativeReanimated=(0,t.default)((function t(){if((0,n.default)(this,t),this.native=!0,void 0===g.__reanimatedModuleProxy){var u=o.NativeModules.ReanimatedModule;null==u||u.installTurboModule()}if(void 0===g.__reanimatedModuleProxy)throw new Error("[Reanimated] The native part of Reanimated doesn't seem to be initialized. This could be caused by\n- not rebuilding the app after installing or upgrading Reanimated\n- trying to run Reanimated on an unsupported platform\n- running in a brownfield app without manually initializing the native library");(0,r(d[4]).checkCppVersion)(),this.InnerNativeModule=g.__reanimatedModuleProxy}),[{key:"installCoreFunctions",value:function(n,t){return this.InnerNativeModule.installCoreFunctions(n,t)}},{key:"makeShareableClone",value:function(n,t){return this.InnerNativeModule.makeShareableClone(n,t)}},{key:"makeSynchronizedDataHolder",value:function(n){return this.InnerNativeModule.makeSynchronizedDataHolder(n)}},{key:"getDataSynchronously",value:function(n){return this.InnerNativeModule.getDataSynchronously(n)}},{key:"scheduleOnUI",value:function(n){return this.InnerNativeModule.scheduleOnUI(n)}},{key:"registerSensor",value:function(n,t,o,u){return this.InnerNativeModule.registerSensor(n,t,o,u)}},{key:"unregisterSensor",value:function(n){return this.InnerNativeModule.unregisterSensor(n)}},{key:"registerEventHandler",value:function(n,t){return this.InnerNativeModule.registerEventHandler(n,t)}},{key:"unregisterEventHandler",value:function(n){return this.InnerNativeModule.unregisterEventHandler(n)}},{key:"getViewProp",value:function(n,t,o){return this.InnerNativeModule.getViewProp(n,t,o)}},{key:"configureLayoutAnimation",value:function(n,t,o,u){this.InnerNativeModule.configureLayoutAnimation(n,t,o,u)}},{key:"enableLayoutAnimations",value:function(n){this.InnerNativeModule.enableLayoutAnimations(n)}},{key:"configureProps",value:function(n,t){this.InnerNativeModule.configureProps(n,t)}},{key:"subscribeForKeyboardEvents",value:function(n,t){return this.InnerNativeModule.subscribeForKeyboardEvents(n,t)}},{key:"unsubscribeFromKeyboardEvents",value:function(n){this.InnerNativeModule.unsubscribeFromKeyboardEvents(n)}}])}),554,[8,17,18,6,555]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.checkCppVersion=function(){var t=g._REANIMATED_VERSION_CPP;if(void 0===t)throw new Error("[Reanimated] Couldn't determine the version of the native part of Reanimated. Did you forget to re-build the app after upgrading react-native-reanimated? If you use Expo Go, you must use the exact version which is bundled into Expo SDK.");if(!o(r(d[2]).jsVersion,t))throw new Error(`[Reanimated] Mismatch between JavaScript part (${r(d[2]).jsVersion}) and native part of Reanimated (${t}). Did you forget to re-build the app after upgrading react-native-reanimated? If you use Expo Go, you must downgrade to ${t} which is bundled into Expo SDK.`)},e.matchVersion=o;var t=r(d[0])(r(d[1]));function o(o,n){if(o.match(/^\d+\.\d+\.\d+$/)&&n.match(/^\d+\.\d+\.\d+$/)){var u=o.split('.'),p=(0,t.default)(u,2),s=p[0],f=p[1],c=n.split('.'),h=(0,t.default)(c,2),v=h[0],l=h[1];return s===v&&f===l}return o===n}}),555,[8,26,556]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.jsVersion=void 0;e.jsVersion='3.4.2'}),556,[]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.configureLayoutAnimations=function(t,o,u){var s=arguments.length>3&&void 0!==arguments[3]?arguments[3]:'';n.default.configureLayoutAnimation(t,o,s,(0,r(d[1]).makeShareableCloneRecursive)(u))},e.configureProps=function(t,o){(0,r(d[7]).nativeShouldBeMock)()||n.default.configureProps(t,o)},e.enableLayoutAnimations=function(t){var o=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];o?(l={enableLayoutAnimations:t,setByUser:!0},n.default.enableLayoutAnimations(t)):l.setByUser||l.enableLayoutAnimations===t||(l.enableLayoutAnimations=t,n.default.enableLayoutAnimations(t))},e.getSensorContainer=o,e.getViewProp=function(t,o){if(g._IS_FABRIC)throw new Error('[react-native-reanimated] `getViewProp` is not supported on Fabric yet');return new Promise((function(u,s){return n.default.getViewProp(t,o,(function(n){'string'==typeof n&&'error:'===n.substr(0,6)?s(n):u(n)}))}))},e.initializeSensor=function(n,t){return o().initializeSensor(n,t)},e.isReanimated3=e.isConfigured=void 0,Object.defineProperty(e,"makeMutable",{enumerable:!0,get:function(){return r(d[0]).makeMutable}}),Object.defineProperty(e,"makeRemote",{enumerable:!0,get:function(){return r(d[0]).makeRemote}}),Object.defineProperty(e,"makeShareable",{enumerable:!0,get:function(){return r(d[1]).makeShareable}}),e.registerEventHandler=function(t,o){var s=(l=function(n,t){g.__frameTimestamp=n,o(t),g.__flushAnimationFrame(n),g.__frameTimestamp=void 0},l._closure={eventHandler:o},l.__initData=u,l.__workletHash=3786160338161,l);var l;return n.default.registerEventHandler(t,(0,r(d[1]).makeShareableCloneRecursive)(s))},e.registerSensor=function(n,t,u){return o().registerSensor(n,t,(0,r(d[1]).makeShareableCloneRecursive)(u))},Object.defineProperty(e,"runOnJS",{enumerable:!0,get:function(){return r(d[2]).runOnJS}}),Object.defineProperty(e,"runOnUI",{enumerable:!0,get:function(){return r(d[2]).runOnUI}}),Object.defineProperty(e,"startMapper",{enumerable:!0,get:function(){return r(d[3]).startMapper}}),Object.defineProperty(e,"stopMapper",{enumerable:!0,get:function(){return r(d[3]).stopMapper}}),e.subscribeForKeyboardEvents=function(t,o){var u,l=(f=function(n,o){var u=performance.now();g.__frameTimestamp=u,t(n,o),g.__flushAnimationFrame(u),g.__frameTimestamp=void 0},f._closure={eventHandler:t},f.__initData=s,f.__workletHash=6582078805579,f);var f;return n.default.subscribeForKeyboardEvents((0,r(d[1]).makeShareableCloneRecursive)(l),null!=(u=o.isStatusBarTranslucentAndroid)&&u)},e.unregisterEventHandler=function(t){return n.default.unregisterEventHandler(t)},e.unregisterSensor=function(n){return o().unregisterSensor(n)},e.unsubscribeFromKeyboardEvents=function(t){return n.default.unsubscribeFromKeyboardEvents(t)};var n=r(d[4])(r(d[5])),t=e.isReanimated3=function(){return!0};e.isConfigured=t;function o(){return g.__sensorContainer||(g.__sensorContainer=new(r(d[6]).SensorContainer)),g.__sensorContainer}g._WORKLET=!1,g._log=function(n){console.log(n)};var u={code:"function handleAndFlushAnimationFrame(eventTimestamp,event){const{eventHandler}=this._closure;global.__frameTimestamp=eventTimestamp;eventHandler(event);global.__flushAnimationFrame(eventTimestamp);global.__frameTimestamp=undefined;}"};var s={code:"function handleAndFlushAnimationFrame(state,height){const{eventHandler}=this._closure;const now=performance.now();global.__frameTimestamp=now;eventHandler(state,height);global.__flushAnimationFrame(now);global.__frameTimestamp=undefined;}"};(0,r(d[7]).isWeb)()||(0,r(d[8]).initializeUIRuntime)();var l={enableLayoutAnimations:!1,setByUser:!1}}),557,[558,560,561,562,8,549,565,552,567]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.makeMutable=function(t){var l,v=arguments.length>1&&void 0!==arguments[1]&&arguments[1],_=t;!v&&n.default.native&&(l=n.default.makeSynchronizedDataHolder((0,r(d[3]).makeShareableCloneRecursive)(_)),(0,r(d[3]).registerShareableMapping)(l));var f=(0,r(d[3]).makeShareableCloneRecursive)({__init:(w=function(){return u(t,l)},w._closure={makeUIMutable:u,initial:t,syncDataHolder:l},w.__initData=o,w.__workletHash=0xd027697378e,w)}),h=n.default.native?void 0:new Map,b={set value(t){n.default.native?(0,r(d[4]).runOnUI)((function(){var n=function(){b.value=t};return n._closure={mutable:b,newValue:t},n.__initData=s,n.__workletHash=0xc9f67661a9d,n})())():(0,r(d[2]).valueSetter)(b,t)},get value(){return l?n.default.getDataSynchronously(l):_},set _value(t){if(n.default.native)throw new Error('Setting `_value` directly is only possible on the UI runtime');_=t,h.forEach((function(n){n(t)}))},get _value(){if(n.default.native)throw new Error('Reading from `_value` directly is only possible on the UI runtime');return _},modify:function(t){(0,r(d[4]).runOnUI)((function(){var n=function(){b.value=t(b.value)};return n._closure={mutable:b,modifier:t},n.__initData=c,n.__workletHash=7119061662271,n})())()},addListener:function(t,l){if(n.default.native)throw new Error('adding listeners is only possible on the UI runtime');h.set(t,l)},removeListener:function(t){if(n.default.native)throw new Error('removing listeners is only possible on the UI runtime');h.delete(t)},_isReanimatedSharedValue:!0};var w;return(0,r(d[3]).registerShareableMapping)(b,f),b},e.makeRemote=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=(0,r(d[3]).makeShareableCloneRecursive)({__init:(l=function(){return t},l._closure={initial:t},l.__initData=v,l.__workletHash=0xb5c0bd4ec83,l)});var l;return(0,r(d[3]).registerShareableMapping)(t,n),t},e.makeUIMutable=void 0;var t,n=r(d[0])(r(d[1])),l={code:"function makeUIMutable(initial,syncDataHolder){const{valueSetter,makeShareableCloneOnUIRecursive}=this._closure;const listeners=new Map();let value=initial;const self={set value(newValue){valueSetter(self,newValue);},get value(){return value;},set _value(newValue){value=newValue;if(syncDataHolder){_updateDataSynchronously(syncDataHolder,makeShareableCloneOnUIRecursive(newValue));}listeners.forEach(function(listener){listener(newValue);});},get _value(){return value;},addListener:function(id,listener){listeners.set(id,listener);},removeListener:function(id){listeners.delete(id);},_animation:null,_isReanimatedSharedValue:true};return self;}"},u=e.makeUIMutable=((t=function(t,n){var l=new Map,u=t,o={set value(t){(0,r(d[2]).valueSetter)(o,t)},get value(){return u},set _value(t){u=t,n&&_updateDataSynchronously(n,(0,r(d[3]).makeShareableCloneOnUIRecursive)(t)),l.forEach((function(n){n(t)}))},get _value(){return u},addListener:function(t,n){l.set(t,n)},removeListener:function(t){l.delete(t)},_animation:null,_isReanimatedSharedValue:!0};return o})._closure={valueSetter:r(d[2]).valueSetter,makeShareableCloneOnUIRecursive:r(d[3]).makeShareableCloneOnUIRecursive},t.__initData=l,t.__workletHash=6223950855890,t),o={code:"function anonymous(){const{makeUIMutable,initial,syncDataHolder}=this._closure;return makeUIMutable(initial,syncDataHolder);}"},s={code:"function anonymous(){const{mutable,newValue}=this._closure;mutable.value=newValue;}"},c={code:"function anonymous(){const{mutable,modifier}=this._closure;mutable.value=modifier(mutable.value);}"};var v={code:"function anonymous(){const{initial}=this._closure;return initial;}"}}),558,[8,549,559,560,561]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.valueSetter=void 0;var n,t={code:"function valueSetter(sv,value){const previousAnimation=sv._animation;if(previousAnimation){previousAnimation.cancelled=true;sv._animation=null;}if(typeof value==='function'||value!==null&&typeof value==='object'&&value.onFrame!==undefined){const animation=typeof value==='function'?value():value;if(sv._value===animation.current&&!animation.isHigherOrder){animation.callback&&animation.callback(true);return;}const initializeAnimation=function(timestamp){animation.onStart(animation,sv.value,timestamp,previousAnimation);};const currentTimestamp=global.__frameTimestamp||performance.now();initializeAnimation(currentTimestamp);const step=function(timestamp){if(animation.cancelled){animation.callback&&animation.callback(false);return;}const finished=animation.onFrame(animation,timestamp);animation.finished=true;animation.timestamp=timestamp;sv._value=animation.current;if(finished){animation.callback&&animation.callback(true);}else{requestAnimationFrame(step);}};sv._animation=animation;step(currentTimestamp);}else{if(sv._value===value){return;}sv._value=value;}}"};e.valueSetter=((n=function(n,t){var o,l=n._animation;if(l&&(l.cancelled=!0,n._animation=null),'function'==typeof t||null!==t&&'object'==typeof t&&void 0!==t.onFrame){var c='function'==typeof t?t():t;if(n._value===c.current&&!c.isHigherOrder)return void(c.callback&&c.callback(!0));var u=g.__frameTimestamp||performance.now();o=u,c.onStart(c,n.value,o,l);var s=function(t){if(c.cancelled)c.callback&&c.callback(!1);else{var o=c.onFrame(c,t);c.finished=!0,c.timestamp=t,n._value=c.current,o?c.callback&&c.callback(!0):requestAnimationFrame(s)}};n._animation=c,s(u)}else{if(n._value===t)return;n._value=t}})._closure={},n.__initData=t,n.__workletHash=0xa4a04c71092,n)}),559,[]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.makeShareable=function(t){if(o)return t;var n=y({__init:(u=function(){return t},u._closure={value:t},u.__initData=k,u.__workletHash=0x9aba42b41c3,u)});var u;return f(t,n),t},e.makeShareableCloneOnUIRecursive=void 0,e.makeShareableCloneRecursive=y,e.registerShareableMapping=f;var t=r(d[0])(r(d[1])),n=r(d[0])(r(d[2])),o=(0,r(d[3]).shouldBeUseWeb)(),u=new WeakMap,l=Symbol('shareable flag'),c='REANIMATED_MAGIC_KEY';function s(t){return c in t}function f(t,n){o||u.set(t,n||l)}var _,v,h={code:"function anonymous(){return new Proxy({},{get:function(_,prop){if(prop==='_isReanimatedSharedValue'){return false;}throw new Error(\"Trying to access property `\"+String(prop)+\"` of an object which cannot be sent to the UI runtime.\");},set:function(){throw new Error('Trying to write to an object which cannot be sent to the UI runtime.');}});}"},p={__init:(_=function(){return new Proxy({},{get:function(t,n){if('_isReanimatedSharedValue'===n)return!1;throw new Error(`Trying to access property \`${String(n)}\` of an object which cannot be sent to the UI runtime.`)},set:function(){throw new Error('Trying to write to an object which cannot be sent to the UI runtime.')}})},_._closure={},_.__initData=h,_.__workletHash=4566602315269,_)},b=30,w={code:"function anonymous(){const{pattern,flags}=this._closure;return new RegExp(pattern,flags);}"};function y(c){var _=arguments.length>1&&void 0!==arguments[1]&&arguments[1],h=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0;if(o)return c;if(h>=b){if(h===b)v=c;else if(c===v)throw new Error('Trying to convert a cyclic object to a shareable. This is not supported.')}else v=void 0;var S,k=typeof c,E='function'===k;if(('object'===k||E)&&null!==c){var A,T=u.get(c);if(T===l)return c;if(void 0!==T)return T;if(Array.isArray(c))A=c.map((function(t){return y(t,_,h+1)}));else if(E&&void 0===c.__workletHash)A=c;else if(s(c))A=c;else{if(S=c,Object.getPrototypeOf(S)!==Object.prototype&&!E){if(c instanceof RegExp){var I=c.source,R=c.flags,U=y({__init:(function(){var t=function(){return new RegExp(I,R)};return t._closure={pattern:I,flags:R},t.__initData=w,t.__workletHash=0xcf205dc9543,t})()});return f(c,U),U}var j=y(p);return u.set(c,j),j}if(A={},void 0!==c.__workletHash){if(c.__stackDetails)throw new Error('[Reanimated] Using dev bundle in a release app build is not supported. Visit https://github.com/software-mansion/react-native-reanimated/issues/4737 to find more information on how to fix this issue.');A.__initData=y(c.__initData,!0,h+1),delete c.__initData}for(var O of Object.entries(c)){var C=(0,t.default)(O,2),M=C[0],x=C[1];A[M]=y(x,_,h+1)}}var D=n.default.makeShareableClone(A,_);return u.set(c,D),u.set(D,l),D}return n.default.makeShareableClone(c,_)}var S={code:"function makeShareableCloneOnUIRecursive(value){const{USE_STUB_IMPLEMENTATION}=this._closure;if(USE_STUB_IMPLEMENTATION){return value;}function cloneRecursive(value){const type=typeof value;if((type==='object'||type==='function')&&value!==null){let toAdapt;if(Array.isArray(value)){toAdapt=value.map(function(element){return cloneRecursive(element);});}else if(value!==undefined){toAdapt={};for(const[key,element]of Object.entries(value)){toAdapt[key]=cloneRecursive(element);}}return _makeShareableClone(toAdapt);}return _makeShareableClone(value);}return cloneRecursive(value);}"},k=(e.makeShareableCloneOnUIRecursive=(function(){var n=function(n){if(o)return n;return(function n(o){var u=typeof o;if(('object'===u||'function'===u)&&null!==o){var l;if(Array.isArray(o))l=o.map((function(t){return n(t)}));else if(void 0!==o)for(var c of(l={},Object.entries(o))){var s=(0,t.default)(c,2),f=s[0],_=s[1];l[f]=n(_)}return _makeShareableClone(l)}return _makeShareableClone(o)})(n)};return n._closure={USE_STUB_IMPLEMENTATION:o},n.__initData=S,n.__workletHash=0xe689f9524fe,n})(),{code:"function anonymous(){const{value}=this._closure;return value;}"})}),560,[8,26,549,552]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.setupMicrotasks=e.runOnUIImmediately=e.runOnUI=e.runOnJS=e.callMicrotasks=void 0;var n,t=r(d[0])(r(d[1])),u=r(d[0])(r(d[2])),o=r(d[0])(r(d[3])),l=(0,r(d[4]).isJest)(),s=!(0,r(d[4]).shouldBeUseWeb)(),c=[],_={code:"function setupMicrotasks(){let microtasksQueue=[];let isExecutingMicrotasksQueue=false;global.queueMicrotask=function(callback){microtasksQueue.push(callback);};global.__callMicrotasks=function(){if(isExecutingMicrotasksQueue){return;}try{isExecutingMicrotasksQueue=true;for(let index=0;index1?t-1:0),o=1;o0?makeShareableCloneOnUIRecursive(args):undefined);};}"},M=e.runOnJS=(function(){var n=function(n){return s&&_WORKLET?n.__workletHash?function(){for(var t=arguments.length,u=new Array(t),o=0;o0?(0,r(d[5]).makeShareableCloneOnUIRecursive)(u):void 0)}):function(){for(var t=arguments.length,u=new Array(t),o=0;o1&&void 0!==arguments[1]?arguments[1]:[],s=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[],f=o+=1;return(0,r(d[2]).runOnUI)((function(){var o=function(){var o=g.__mapperRegistry;void 0===o&&(o=g.__mapperRegistry=n()),o.start(f,t,p,s)};return o._closure={createMapperRegistry:n,mapperID:f,worklet:t,inputs:p,outputs:s},o.__initData=u,o.__workletHash=69439130052,o})())(),f},e.stopMapper=function(t){(0,r(d[2]).runOnUI)((p=function(){var p=g.__mapperRegistry;null==p||p.stop(t)},p._closure={mapperID:t},p.__initData=f,p.__workletHash=0xd924b0a41a8,p))();var p};var t,p=(0,r(d[0]).isJest)(),s={code:"function createMapperRegistry(){const{IS_JEST,isSharedValue}=this._closure;const mappers=new Map();let sortedMappers=[];let runRequested=false;let processingMappers=false;function updateMappersOrder(){const pre=new Map();mappers.forEach(function(mapper){if(mapper.outputs){for(const output of mapper.outputs){const preMappers=pre.get(output);if(preMappers===undefined){pre.set(output,[mapper]);}else{preMappers.push(mapper);}}}});const visited=new Set();const newOrder=[];function dfs(mapper){visited.add(mapper);for(const input of mapper.inputs){const preMappers=pre.get(input);if(preMappers){for(const preMapper of preMappers){if(!visited.has(preMapper)){dfs(preMapper);}}}}newOrder.push(mapper);}mappers.forEach(function(mapper){if(!visited.has(mapper)){dfs(mapper);}});sortedMappers=newOrder;}function mapperRun(){runRequested=false;if(processingMappers){return;}processingMappers=true;if(mappers.size!==sortedMappers.length){updateMappersOrder();}for(const mapper of sortedMappers){if(mapper.dirty){mapper.dirty=false;mapper.worklet();}}processingMappers=false;}function maybeRequestUpdates(){if(IS_JEST){mapperRun();}else if(!runRequested){if(processingMappers){requestAnimationFrame(mapperRun);}else{queueMicrotask(mapperRun);}runRequested=true;}}function extractInputs(inputs,resultArray){if(Array.isArray(inputs)){for(const input of inputs){input&&extractInputs(input,resultArray);}}else if(isSharedValue(inputs)){resultArray.push(inputs);}else if(Object.getPrototypeOf(inputs)===Object.prototype){for(const element of Object.values(inputs)){element&&extractInputs(element,resultArray);}}return resultArray;}return{start:function(mapperID,worklet,inputs,outputs){const mapper={id:mapperID,dirty:true,worklet:worklet,inputs:extractInputs(inputs,[]),outputs:outputs};mappers.set(mapper.id,mapper);sortedMappers=[];for(const sv of mapper.inputs){sv.addListener(mapper.id,function(){mapper.dirty=true;maybeRequestUpdates();});}maybeRequestUpdates();},stop:function(mapperID){const mapper=mappers.get(mapperID);if(mapper){mappers.delete(mapper.id);sortedMappers=[];for(const sv of mapper.inputs){sv.removeListener(mapper.id);}}}};}"},n=((t=function(){var t=new Map,s=[],n=!1,o=!1;function u(){var p=new Map;t.forEach((function(t){if(t.outputs)for(var s of t.outputs){var n=p.get(s);void 0===n?p.set(s,[t]):n.push(t)}}));var n=new Set,o=[];function u(t){for(var s of(n.add(t),t.inputs)){var f=p.get(s);if(f)for(var c of f)n.has(c)||u(c)}o.push(t)}t.forEach((function(t){n.has(t)||u(t)})),s=o}function f(){if(n=!1,!o){for(var p of(o=!0,t.size!==s.length&&u(),s))p.dirty&&(p.dirty=!1,p.worklet());o=!1}}function c(){p?f():n||(o?requestAnimationFrame(f):queueMicrotask(f),n=!0)}function l(t,p){if(Array.isArray(t))for(var s of t)s&&l(s,p);else if((0,r(d[1]).isSharedValue)(t))p.push(t);else if(Object.getPrototypeOf(t)===Object.prototype)for(var n of Object.values(t))n&&l(n,p);return p}return{start:function(p,n,o,u){var f={id:p,dirty:!0,worklet:n,inputs:l(o,[]),outputs:u};for(var y of(t.set(f.id,f),s=[],f.inputs))y.addListener(f.id,(function(){f.dirty=!0,c()}));c()},stop:function(p){var n=t.get(p);if(n)for(var o of(t.delete(n.id),s=[],n.inputs))o.removeListener(n.id)}}})._closure={IS_JEST:p,isSharedValue:r(d[1]).isSharedValue},t.__initData=s,t.__workletHash=4869237921139,t),o=9999,u={code:"function anonymous(){const{createMapperRegistry,mapperID,worklet,inputs,outputs}=this._closure;let mapperRegistry=global.__mapperRegistry;if(mapperRegistry===undefined){mapperRegistry=global.__mapperRegistry=createMapperRegistry();}mapperRegistry.start(mapperID,worklet,inputs,outputs);}"};var f={code:"function anonymous(){const{mapperID}=this._closure;const mapperRegistry=global.__mapperRegistry;mapperRegistry===null||mapperRegistry===void 0?void 0:mapperRegistry.stop(mapperID);}"}}),562,[552,563,561]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.isSharedValue=e.getRelativeCoords=void 0;var t,u={code:"function getRelativeCoords(parentAnimatedRef,absoluteX,absoluteY){const{measure}=this._closure;const parentCoords=measure(parentAnimatedRef);if(parentCoords===null){return null;}return{x:absoluteX-parentCoords.x,y:absoluteY-parentCoords.y};}"},n=(e.getRelativeCoords=((t=function(t,u,n){var o=(0,r(d[0]).measure)(t);return null===o?null:{x:u-o.x,y:n-o.y}})._closure={measure:r(d[0]).measure},t.__initData=u,t.__workletHash=0xf45cb1976f8,t),{code:"function isSharedValue(value){return(value===null||value===void 0?void 0:value._isReanimatedSharedValue)===true;}"});e.isSharedValue=(function(){var t=function(t){return!0===(null==t?void 0:t._isReanimatedSharedValue)};return t._closure={},t.__initData=n,t.__workletHash=7960680803966,t})()}),563,[564]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.setGestureState=e.scrollTo=e.measure=e.dispatchCommand=void 0;var n,t,o=!(0,r(d[0]).shouldBeUseWeb)(),s={code:"function anonymous(animatedRef){const{_IS_FABRIC}=this._closure;if(!_WORKLET){return null;}const viewTag=animatedRef();if(viewTag===-1){console.warn(\"[Reanimated] The view with tag \"+viewTag+\" is not a valid argument for measure(). This may be because the view is not currently rendered, which may not be a bug (e.g. an off-screen FlatList item).\");return null;}const measured=_IS_FABRIC?_measureFabric(viewTag):_measurePaper(viewTag);if(measured===null){console.warn(\"[Reanimated] The view with tag \"+viewTag+\" has some undefined, not-yet-computed or meaningless value of `LayoutMetrics` type. This may be because the view is not currently rendered, which may not be a bug (e.g. an off-screen FlatList item).\");return null;}else if(measured.x===-1234567){console.warn(\"[Reanimated] The view with tag \"+viewTag+\" returned an invalid measurement response.\");return null;}else if(isNaN(measured.x)){console.warn(\"[Reanimated] The view with tag \"+viewTag+\" gets view-flattened on Android. To disable view-flattening, set `collapsable={false}` on this component.\");return null;}else{return measured;}}"};(0,r(d[0]).isWeb)()?e.measure=function(n){var t=n(),o=t.getBoundingClientRect();return{width:t.offsetWidth,height:t.offsetHeight,x:t.offsetLeft,y:t.offsetTop,pageX:o.left,pageY:o.top}}:(0,r(d[0]).isChromeDebugger)()?e.measure=function(){return console.warn('[Reanimated] measure() cannot be used with Chrome Debugger.'),null}:(0,r(d[0]).isJest)()?e.measure=function(){return console.warn('[Reanimated] measure() cannot be used with Jest.'),null}:e.measure=o?((n=function(n){if(!_WORKLET)return null;var t=n();if(-1===t)return console.warn(`[Reanimated] The view with tag ${t} is not a valid argument for measure(). This may be because the view is not currently rendered, which may not be a bug (e.g. an off-screen FlatList item).`),null;var o=_IS_FABRIC?_measureFabric(t):_measurePaper(t);return null===o?(console.warn(`[Reanimated] The view with tag ${t} has some undefined, not-yet-computed or meaningless value of \`LayoutMetrics\` type. This may be because the view is not currently rendered, which may not be a bug (e.g. an off-screen FlatList item).`),null):-1234567===o.x?(console.warn(`[Reanimated] The view with tag ${t} returned an invalid measurement response.`),null):isNaN(o.x)?(console.warn(`[Reanimated] The view with tag ${t} gets view-flattened on Android. To disable view-flattening, set \`collapsable={false}\` on this component.`),null):o})._closure={_IS_FABRIC:_IS_FABRIC},n.__initData=s,n.__workletHash=3798810737034,n):function(){return console.warn('[Reanimated] measure() is not supported on this configuration.'),null};var u={code:"function anonymous(animatedRef,commandName,args=[]){if(!_WORKLET){return;}const shadowNodeWrapper=animatedRef();_dispatchCommandFabric(shadowNodeWrapper,commandName,args);}"},c={code:"function anonymous(animatedRef,commandName,args=[]){if(!_WORKLET){return;}const viewTag=animatedRef();_dispatchCommandPaper(viewTag,commandName,args);}"};o&&g._IS_FABRIC?e.dispatchCommand=t=(function(){var n=function(n,t){var o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[];if(_WORKLET){var s=n();_dispatchCommandFabric(s,t,o)}};return n._closure={},n.__initData=u,n.__workletHash=0x9b52c6a895c,n})():o?e.dispatchCommand=t=(function(){var n=function(n,t){var o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[];if(_WORKLET){var s=n();_dispatchCommandPaper(s,t,o)}};return n._closure={},n.__initData=c,n.__workletHash=0x9fc26b76af7,n})():(0,r(d[0]).isWeb)()?e.dispatchCommand=t=function(){console.warn('[Reanimated] dispatchCommand() is not supported on web.')}:(0,r(d[0]).isChromeDebugger)()?e.dispatchCommand=t=function(){console.warn('[Reanimated] dispatchCommand() is not supported with Chrome Debugger.')}:(0,r(d[0]).isJest)()?e.dispatchCommand=t=function(){console.warn('[Reanimated] dispatchCommand() is not supported with Jest.')}:e.dispatchCommand=t=function(){console.warn('[Reanimated] dispatchCommand() is not supported on this configuration.')};var l={code:"function anonymous(animatedRef,x,y,animated){const element=animatedRef();element.scrollTo({x:x,y:y,animated:animated});}"},f={code:"function anonymous(animatedRef,x,y,animated){const{dispatchCommand}=this._closure;dispatchCommand(animatedRef,'scrollTo',[x,y,animated]);}"},h={code:"function anonymous(animatedRef,x,y,animated){if(!_WORKLET){return;}const viewTag=animatedRef();_scrollToPaper(viewTag,x,y,animated);}"};(0,r(d[0]).isWeb)()?e.scrollTo=(function(){var n=function(n,t,o,s){n().scrollTo({x:t,y:o,animated:s})};return n._closure={},n.__initData=l,n.__workletHash=0xdc573df2c1f,n})():o&&g._IS_FABRIC?e.scrollTo=(function(){var n=function(n,o,s,u){t(n,'scrollTo',[o,s,u])};return n._closure={dispatchCommand:t},n.__initData=f,n.__workletHash=0xc186669ec14,n})():o?e.scrollTo=(function(){var n=function(n,t,o,s){if(_WORKLET){var u=n();_scrollToPaper(u,t,o,s)}};return n._closure={},n.__initData=h,n.__workletHash=0xff2bb6d278d,n})():(0,r(d[0]).isChromeDebugger)()?e.scrollTo=function(){console.warn('[Reanimated] scrollTo() is not supported with Chrome Debugger.')}:(0,r(d[0]).isJest)()?e.scrollTo=function(){console.warn('[Reanimated] scrollTo() is not supported with Jest.')}:e.scrollTo=function(){console.warn('[Reanimated] scrollTo() is not supported on this configuration.')};var w={code:"function anonymous(handlerTag,newState){if(!_WORKLET){console.warn('[Reanimated] You can not use setGestureState in non-worklet function.');return;}_setGestureState(handlerTag,newState);}"};o?e.setGestureState=(function(){var n=function(n,t){_WORKLET?_setGestureState(n,t):console.warn('[Reanimated] You can not use setGestureState in non-worklet function.')};return n._closure={},n.__initData=w,n.__workletHash=0x9f0abe08424,n})():(0,r(d[0]).isWeb)()?e.setGestureState=function(){console.warn('[Reanimated] setGestureState() is not available on web.')}:(0,r(d[0]).isChromeDebugger)()?e.setGestureState=function(){console.warn('[Reanimated] setGestureState() cannot be used with Chrome Debugger.')}:(0,r(d[0]).isJest)()?e.setGestureState=function(){console.warn('[Reanimated] setGestureState() cannot be used with Jest.')}:e.setGestureState=function(){console.warn('[Reanimated] setGestureState() is not supported on this configuration.')}}),564,[552]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.SensorContainer=void 0;var n=r(d[0])(r(d[1])),t=r(d[0])(r(d[2])),s=r(d[0])(r(d[3]));e.SensorContainer=(0,t.default)((function t(){(0,n.default)(this,t),this.nativeSensors=new Map}),[{key:"getSensorId",value:function(n,t){return 100*n+10*t.iosReferenceFrame+Number(t.adjustToInterfaceOrientation)}},{key:"initializeSensor",value:function(n,t){var o=this.getSensorId(n,t);if(!this.nativeSensors.has(o)){var u=new s.default(n,t);this.nativeSensors.set(o,u)}return this.nativeSensors.get(o).getSharedValue()}},{key:"registerSensor",value:function(n,t,s){var o=this.getSensorId(n,t);if(!this.nativeSensors.has(o))return-1;var u=this.nativeSensors.get(o);return u&&u.isAvailable()&&(u.isRunning()||u.register(s))?(u.listenersNumber++,o):-1}},{key:"unregisterSensor",value:function(n){if(this.nativeSensors.has(n)){var t=this.nativeSensors.get(n);t&&t.isRunning()&&(t.listenersNumber--,0===t.listenersNumber&&t.unregister())}}}])}),565,[8,17,18,566]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var t=r(d[0])(r(d[1])),n=r(d[0])(r(d[2])),s=r(d[0])(r(d[3]));function u(t){return t===r(d[4]).SensorType.ROTATION?(0,r(d[5]).makeMutable)({qw:0,qx:0,qy:0,qz:0,yaw:0,pitch:0,roll:0,interfaceOrientation:0}):(0,r(d[5]).makeMutable)({x:0,y:0,z:0,interfaceOrientation:0})}e.default=(0,n.default)((function n(s,o){(0,t.default)(this,n),this.listenersNumber=0,this.sensorId=null,this.sensorType=s,this.config=o,this.data=u(s)}),[{key:"register",value:function(t){var n=this.config,u=this.sensorType;return this.sensorId=s.default.registerSensor(u,'auto'===n.interval?-1:n.interval,n.iosReferenceFrame,t),-1!==this.sensorId}},{key:"isRunning",value:function(){return-1!==this.sensorId&&null!==this.sensorId}},{key:"isAvailable",value:function(){return-1!==this.sensorId}},{key:"getSharedValue",value:function(){return this.data}},{key:"unregister",value:function(){null!==this.sensorId&&-1!==this.sensorId&&s.default.unregisterSensor(this.sensorId),this.sensorId=null}}])}),566,[8,17,18,549,553,558]); +__d((function(g,r,i,a,m,_e,d){Object.defineProperty(_e,"__esModule",{value:!0}),_e.initializeUIRuntime=initializeUIRuntime;var _NativeReanimated=r(d[0])(r(d[1])),_worklet_7535208113410_init_data={code:"function callGuardDEV(fn,...args){try{fn(...args);}catch(e){if(global.__ErrorUtils){global.__ErrorUtils.reportFatalError(e);}else{throw e;}}}"},callGuardDEV=(_f=function(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),o=1;o=timestamp){return;}lastNativeAnimationFrameTimestamp=timestamp;global.__frameTimestamp=timestamp;global.__flushAnimationFrame(timestamp);global.__frameTimestamp=undefined;});}return-1;};}"},setupRequestAnimationFrame=(function(){var e=function(){var e=g.requestAnimationFrame,t=[],n=-1;g.__flushAnimationFrame=function(e){var n=t;t=[],n.forEach((function(t){return t(e)})),(0,r(d[2]).callMicrotasks)()},g.requestAnimationFrame=function(o){return t.push(o),1===t.length&&e((function(e){n>=e||(n=e,g.__frameTimestamp=e,g.__flushAnimationFrame(e),g.__frameTimestamp=void 0)})),-1}};return e._closure={callMicrotasks:r(d[2]).callMicrotasks},e.__initData=_worklet_1460600058506_init_data,e.__workletHash=1460600058506,e})(),_worklet_1531528544229_init_data={code:"function anonymous(){const{runOnJS,reportFatalErrorOnJS,IS_CHROME_DEBUGGER,capturableConsole,IS_NATIVE,setupMicrotasks,setupRequestAnimationFrame}=this._closure;global.__ErrorUtils={reportFatalError:function(error){runOnJS(reportFatalErrorOnJS)({message:error.message,stack:error.stack});}};if(!IS_CHROME_DEBUGGER){global.console={assert:runOnJS(capturableConsole.assert),debug:runOnJS(capturableConsole.debug),log:runOnJS(capturableConsole.log),warn:runOnJS(capturableConsole.warn),error:runOnJS(capturableConsole.error),info:runOnJS(capturableConsole.info)};}if(IS_NATIVE){setupMicrotasks();setupRequestAnimationFrame();}}"};function initializeUIRuntime(){_NativeReanimated.default.installCoreFunctions(callGuardDEV,valueUnpacker);var e=(0,r(d[3]).isJest)(),t=(0,r(d[3]).isChromeDebugger)(),n=!(0,r(d[3]).shouldBeUseWeb)();e&&(g.requestAnimationFrame=function(e){return setTimeout((function(){return e(performance.now())}),0)});var o=Object.assign({},console);(0,r(d[2]).runOnUIImmediately)((function(){var e=function(){g.__ErrorUtils={reportFatalError:function(e){(0,r(d[2]).runOnJS)(r(d[4]).reportFatalErrorOnJS)({message:e.message,stack:e.stack})}},t||(g.console={assert:(0,r(d[2]).runOnJS)(o.assert),debug:(0,r(d[2]).runOnJS)(o.debug),log:(0,r(d[2]).runOnJS)(o.log),warn:(0,r(d[2]).runOnJS)(o.warn),error:(0,r(d[2]).runOnJS)(o.error),info:(0,r(d[2]).runOnJS)(o.info)}),n&&((0,r(d[2]).setupMicrotasks)(),setupRequestAnimationFrame())};return e._closure={runOnJS:r(d[2]).runOnJS,reportFatalErrorOnJS:r(d[4]).reportFatalErrorOnJS,IS_CHROME_DEBUGGER:t,capturableConsole:o,IS_NATIVE:n,setupMicrotasks:r(d[2]).setupMicrotasks,setupRequestAnimationFrame:setupRequestAnimationFrame},e.__initData=_worklet_1531528544229_init_data,e.__workletHash=1531528544229,e})())()}}),567,[8,549,561,552,568]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.registerWorkletStackDetails=function(t,u){n.set(t,u)},e.reportFatalErrorOnJS=function(t){var n=t.message,u=t.stack,o=new Error;o.message=n,o.stack=u?l(u):void 0,o.name='ReanimatedError',o.jsEngine='reanimated',g.ErrorUtils.reportFatalError(o)};var t=r(d[0])(r(d[1])),n=new Map;function u(n){var u,l=null==(u=n.stack)||null==(u=u.split('\n'))?void 0:u[0];if(l){var o=/@([^@]+):(\d+):(\d+)/.exec(l);if(o){var c=(0,t.default)(o,4),f=c[1],s=c[2],v=c[3];return[f,Number(s),Number(v)]}}return['unknown',0,0]}function l(l){var o=l.match(/worklet_(\d+):(\d+):(\d+)/g),c=l;return null==o||o.forEach((function(l){var o=l.split(/:|_/).map(Number),f=(0,t.default)(o,4),s=f[1],v=f[2],p=f[3],k=n.get(s);if(k){var E=(0,t.default)(k,3),_=E[0],b=E[1],w=E[2],N=u(_),$=(0,t.default)(N,3),h=$[0],j=v+$[1]+b,F=p+$[2]+w;c=c.replace(l,`${h}:${j}:${F}`)}})),c}}),568,[8,26]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;e.default=function(t){var n=t.getForwardedRef,o=t.setLocalRef;return function(t){var f=n();o(t),'function'==typeof f?f(t):'object'==typeof f&&null!=f&&(f.current=t)}}}),569,[]); +__d((function(g,r,i,a,m,e,d){var t,n=1e9,o={code:"function startObservingProgress(tag,sharedValue,animationType){const{LayoutAnimationType,TAG_OFFSET}=this._closure;const isSharedTransition=animationType===LayoutAnimationType.SHARED_ELEMENT_TRANSITION;sharedValue.addListener(tag+TAG_OFFSET,function(){_notifyAboutProgress(tag,sharedValue.value,isSharedTransition);});}"},s=((t=function(t,o,s){var u=s===r(d[0]).LayoutAnimationType.SHARED_ELEMENT_TRANSITION;o.addListener(t+n,(function(){_notifyAboutProgress(t,o.value,u)}))})._closure={LayoutAnimationType:r(d[0]).LayoutAnimationType,TAG_OFFSET:n},t.__initData=o,t.__workletHash=0xb3a32b4caad,t),u={code:"function stopObservingProgress(tag,sharedValue,removeView){const{TAG_OFFSET}=this._closure;sharedValue.removeListener(tag+TAG_OFFSET);_notifyAboutEnd(tag,removeView);}"},l=(function(){var t=function(t,o,s){o.removeListener(t+n),_notifyAboutEnd(t,s)};return t._closure={TAG_OFFSET:n},t.__initData=u,t.__workletHash=818147187174,t})(),c={code:"function createLayoutAnimationManager(){const{LayoutAnimationType,makeUIMutable,stopObservingProgress,withStyleAnimation,startObservingProgress}=this._closure;const enteringAnimationForTag=new Map();const mutableValuesForTag=new Map();return{start:function(tag,type,yogaValues,config){if(type===LayoutAnimationType.SHARED_ELEMENT_TRANSITION_PROGRESS){global.ProgressTransitionRegister.onTransitionStart(tag,yogaValues);return;}const style=config(yogaValues);let currentAnimation=style.animations;if(type===LayoutAnimationType.ENTERING){enteringAnimationForTag.set(tag,currentAnimation);}else if(type===LayoutAnimationType.LAYOUT){const enteringAnimation=enteringAnimationForTag.get(tag);if(enteringAnimation){currentAnimation={...enteringAnimation,...style.animations};}}let value=mutableValuesForTag.get(tag);if(value===undefined){value=makeUIMutable(style.initialValues);mutableValuesForTag.set(tag,value);}else{stopObservingProgress(tag,value,false);value._value=style.initialValues;}const animation=withStyleAnimation(currentAnimation);animation.callback=function(finished){if(finished){enteringAnimationForTag.delete(tag);mutableValuesForTag.delete(tag);const shouldRemoveView=type===LayoutAnimationType.EXITING;stopObservingProgress(tag,value,shouldRemoveView);}style.callback&&style.callback(finished===undefined?false:finished);};startObservingProgress(tag,value,type);value.value=animation;},stop:function(tag){const value=mutableValuesForTag.get(tag);if(!value){return;}stopObservingProgress(tag,value,true);}};}"},y=(function(){var t=function(){var t=new Map,n=new Map;return{start:function(o,u,c,y){if(u!==r(d[0]).LayoutAnimationType.SHARED_ELEMENT_TRANSITION_PROGRESS){var T=y(c),A=T.animations;if(u===r(d[0]).LayoutAnimationType.ENTERING)t.set(o,A);else if(u===r(d[0]).LayoutAnimationType.LAYOUT){var v=t.get(o);v&&(A=Object.assign({},v,T.animations))}var _=n.get(o);void 0===_?(_=(0,r(d[1]).makeUIMutable)(T.initialValues),n.set(o,_)):(l(o,_,!1),_._value=T.initialValues);var f=(0,r(d[2]).withStyleAnimation)(A);f.callback=function(s){if(s){t.delete(o),n.delete(o);var c=u===r(d[0]).LayoutAnimationType.EXITING;l(o,_,c)}T.callback&&T.callback(void 0!==s&&s)},s(o,_,u),_.value=f}else g.ProgressTransitionRegister.onTransitionStart(o,c)},stop:function(t){var o=n.get(t);o&&l(t,o,!0)}}};return t._closure={LayoutAnimationType:r(d[0]).LayoutAnimationType,makeUIMutable:r(d[1]).makeUIMutable,stopObservingProgress:l,withStyleAnimation:r(d[2]).withStyleAnimation,startObservingProgress:s},t.__initData=c,t.__workletHash=3172792827533,t})(),T={code:"function anonymous(){const{createLayoutAnimationManager}=this._closure;global.LayoutAnimationsManager=createLayoutAnimationManager();}"};(0,r(d[3]).runOnUIImmediately)((function(){var t=function(){g.LayoutAnimationsManager=y()};return t._closure={createLayoutAnimationManager:y},t.__initData=T,t.__workletHash=0xd9dab741f9c,t})())()}),570,[571,558,583,561]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"BaseAnimationBuilder",{enumerable:!0,get:function(){return r(d[0]).BaseAnimationBuilder}}),Object.defineProperty(e,"ComplexAnimationBuilder",{enumerable:!0,get:function(){return r(d[1]).ComplexAnimationBuilder}}),Object.defineProperty(e,"Keyframe",{enumerable:!0,get:function(){return r(d[2]).Keyframe}}),Object.defineProperty(e,"LayoutAnimationType",{enumerable:!0,get:function(){return r(d[3]).LayoutAnimationType}}),Object.defineProperty(e,"SharedTransitionType",{enumerable:!0,get:function(){return r(d[3]).SharedTransitionType}})}),571,[572,588,589,590]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.BaseAnimationBuilder=void 0;var n=r(d[0])(r(d[1])),t=r(d[0])(r(d[2])),u={code:"function anonymous(_,animation){return animation;}"};e.BaseAnimationBuilder=(0,t.default)((function t(){(0,n.default)(this,t),this.randomizeDelay=!1,this.build=function(){throw Error('Unimplemented method in child class.')}}),[{key:"duration",value:function(n){return this.durationV=n,this}},{key:"delay",value:function(n){return this.delayV=n,this}},{key:"withCallback",value:function(n){return this.callbackV=n,this}},{key:"getDuration",value:function(){var n;return null!=(n=this.durationV)?n:300}},{key:"randomDelay",value:function(){return this.randomizeDelay=!0,this}},{key:"getDelay",value:function(){var n,t;return this.randomizeDelay?Math.random()*(null!=(n=this.delayV)?n:1e3):null!=(t=this.delayV)?t:0}},{key:"getDelayFunction",value:function(){var n;return this.randomizeDelay||this.delayV?r(d[3]).withDelay:((n=function(n,t){return t})._closure={},n.__initData=u,n.__workletHash=0xf33f9d89e73,n)}}],[{key:"duration",value:function(n){return this.createInstance().duration(n)}},{key:"delay",value:function(n){return this.createInstance().delay(n)}},{key:"withCallback",value:function(n){return this.createInstance().withCallback(n)}},{key:"getDuration",value:function(){return 300}},{key:"randomDelay",value:function(){return this.createInstance().randomDelay()}},{key:"build",value:function(){return this.createInstance().build()}}])}),572,[8,17,18,573]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"WithDecayConfig",{enumerable:!0,get:function(){return r(d[0]).WithDecayConfig}}),Object.defineProperty(e,"cancelAnimation",{enumerable:!0,get:function(){return r(d[1]).cancelAnimation}}),Object.defineProperty(e,"defineAnimation",{enumerable:!0,get:function(){return r(d[1]).defineAnimation}}),Object.defineProperty(e,"initialUpdaterRun",{enumerable:!0,get:function(){return r(d[1]).initialUpdaterRun}}),Object.defineProperty(e,"withDecay",{enumerable:!0,get:function(){return r(d[0]).withDecay}}),Object.defineProperty(e,"withDelay",{enumerable:!0,get:function(){return r(d[2]).withDelay}}),Object.defineProperty(e,"withRepeat",{enumerable:!0,get:function(){return r(d[3]).withRepeat}}),Object.defineProperty(e,"withSequence",{enumerable:!0,get:function(){return r(d[4]).withSequence}}),Object.defineProperty(e,"withSpring",{enumerable:!0,get:function(){return r(d[5]).withSpring}}),Object.defineProperty(e,"withStyleAnimation",{enumerable:!0,get:function(){return r(d[6]).withStyleAnimation}}),Object.defineProperty(e,"withTiming",{enumerable:!0,get:function(){return r(d[7]).withTiming}})}),573,[574,575,578,579,580,581,583,585]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.withDecay=void 0;var t,n=(0,r(d[0]).isWeb)(),c={code:"function anonymous(userConfig,callback){const{defineAnimation,IS_WEB}=this._closure;return defineAnimation(0,function(){'worklet';var _config$velocity;const config={deceleration:0.998,velocityFactor:1,velocity:0,rubberBandFactor:0.6};if(userConfig){Object.keys(userConfig).forEach(function(key){return config[key]=userConfig[key];});}const VELOCITY_EPS=IS_WEB?1/20:1;const SLOPE_FACTOR=0.1;let decay;if(config.rubberBandEffect){decay=function(animation,now){const{lastTimestamp:lastTimestamp,startTimestamp:startTimestamp,current:current,velocity:velocity}=animation;const deltaTime=Math.min(now-lastTimestamp,64);const clampIndex=Math.abs(current-config.clamp[0])config.clamp[1]){derivative=current-config.clamp[clampIndex];}if(derivative!==0){animation.springActive=true;}else if(derivative===0&&animation.springActive){animation.current=config.clamp[clampIndex];return true;}const v=velocity*Math.exp(-(1-config.deceleration)*(now-startTimestamp)*SLOPE_FACTOR)-derivative*config.rubberBandFactor;animation.current=current+v*config.velocityFactor*deltaTime/1000;animation.velocity=v;animation.lastTimestamp=now;return false;};}else{decay=function(animation,now){const{lastTimestamp:lastTimestamp,startTimestamp:startTimestamp,initialVelocity:initialVelocity,current:current,velocity:velocity}=animation;const deltaTime=Math.min(now-lastTimestamp,64);const v=velocity*Math.exp(-(1-config.deceleration)*(now-startTimestamp)*SLOPE_FACTOR);animation.current=current+v*config.velocityFactor*deltaTime/1000;animation.velocity=v;animation.lastTimestamp=now;if(config.clamp){if(initialVelocity<0&&animation.current<=config.clamp[0]){animation.current=config.clamp[0];return true;}else if(initialVelocity>0&&animation.current>=config.clamp[1]){animation.current=config.clamp[1];return true;}}return Math.abs(v)config.clamp[1]){derivative=current-config.clamp[clampIndex];}if(derivative!==0){animation.springActive=true;}else if(derivative===0&&animation.springActive){animation.current=config.clamp[clampIndex];return true;}const v=velocity*Math.exp(-(1-config.deceleration)*(now-startTimestamp)*SLOPE_FACTOR)-derivative*config.rubberBandFactor;animation.current=current+v*config.velocityFactor*deltaTime/1000;animation.velocity=v;animation.lastTimestamp=now;return false;};}else{decay=function(animation,now){const{lastTimestamp:lastTimestamp,startTimestamp:startTimestamp,initialVelocity:initialVelocity,current:current,velocity:velocity}=animation;const deltaTime=Math.min(now-lastTimestamp,64);const v=velocity*Math.exp(-(1-config.deceleration)*(now-startTimestamp)*SLOPE_FACTOR);animation.current=current+v*config.velocityFactor*deltaTime/1000;animation.velocity=v;animation.lastTimestamp=now;if(config.clamp){if(initialVelocity<0&&animation.current<=config.clamp[0]){animation.current=config.clamp[0];return true;}else if(initialVelocity>0&&animation.current>=config.clamp[1]){animation.current=config.clamp[1];return true;}}return Math.abs(v)l.clamp[1])&&(v=s-l.clamp[p]),0!==v)t.springActive=!0;else if(0===v&&t.springActive)return t.current=l.clamp[p],!0;var y=f*Math.exp(-(1-l.deceleration)*(n-o)*.1)-v*l.rubberBandFactor;return t.current=s+y*l.velocityFactor*u/1e3,t.velocity=y,t.lastTimestamp=n,!1}:function(t,n){var c=t.lastTimestamp,o=t.startTimestamp,f=t.initialVelocity,u=t.current,p=t.velocity,v=Math.min(n-c,64),y=p*Math.exp(-(1-l.deceleration)*(n-o)*.1);if(t.current=u+y*l.velocityFactor*v/1e3,t.velocity=y,t.lastTimestamp=n,l.clamp){if(f<0&&t.current<=l.clamp[0])return t.current=l.clamp[0],!0;if(f>0&&t.current>=l.clamp[1])return t.current=l.clamp[1],!0}return Math.abs(y)1&&void 0!==arguments[1]?arguments[1]:'z',n=Math.cos(t),e=Math.sin(t);switch(a){case'z':return[[n,e,0,0],[-e,n,0,0],[0,0,1,0],[0,0,0,1]];case'y':return[[n,0,-e,0],[0,1,0,0],[e,0,n,0],[0,0,0,1]];case'x':return[[1,0,0,0],[0,n,e,0],[0,-e,n,0],[0,0,0,1]]}};return t._closure={},t.__initData=h,t.__workletHash=5109197941223,t})(),{code:"function norm3d(x,y,z){return Math.sqrt(x*x+y*y+z*z);}"}),w=(function(){var t=function(t,a,n){return Math.sqrt(t*t+a*a+n*n)};return t._closure={},t.__initData=y,t.__workletHash=1147516857584,t})(),v={code:"function transposeMatrix(matrix){const{flatten}=this._closure;const m=flatten(matrix);return[[m[0],m[4],m[8],m[12]],[m[1],m[5],m[9],m[13]],[m[2],m[6],m[10],m[14]],[m[3],m[7],m[11],m[15]]];}"},A=(function(){var t=function(t){var a=c(t);return[[a[0],a[4],a[8],a[12]],[a[1],a[5],a[9],a[13]],[a[2],a[6],a[10],a[14]],[a[3],a[7],a[11],a[15]]]};return t._closure={flatten:c},t.__initData=v,t.__workletHash=0xf2a4c5f887d,t})(),p={code:"function assertVectorsHaveEqualLengths(a,b){const{__DEV__}=this._closure;if(__DEV__&&a.length!==b.length){throw new Error(\"Cannot calculate inner product of two vectors of different lengths. Length of \"+a+\" is \"+a.length+\" and length of \"+b+\" is \"+b.length+\".\");}}"},F=(function(){var t=function(t,a){};return t._closure={__DEV__:!1},t.__initData=p,t.__workletHash=4222561343090,t})(),k={code:"function innerProduct(a,b){const{assertVectorsHaveEqualLengths}=this._closure;assertVectorsHaveEqualLengths(a,b);return a.reduce(function(acc,_,i){return acc+a[i]*b[i];},0);}"},H=(function(){var t=function(t,a){return F(t,a),t.reduce((function(n,e,i){return n+t[i]*a[i]}),0)};return t._closure={assertVectorsHaveEqualLengths:F},t.__initData=k,t.__workletHash=0xb428360bc8d,t})(),V={code:"function projection(u,a){const{assertVectorsHaveEqualLengths,innerProduct}=this._closure;assertVectorsHaveEqualLengths(u,a);const s=innerProduct(u,a)/innerProduct(u,u);return u.map(function(e){return e*s;});}"},D=(function(){var t=function(t,a){F(t,a);var n=H(t,a)/H(t,t);return t.map((function(t){return t*n}))};return t._closure={assertVectorsHaveEqualLengths:F,innerProduct:H},t.__initData=V,t.__workletHash=0xc997259fa0e,t})(),P={code:"function subtractVectors(a,b){const{assertVectorsHaveEqualLengths}=this._closure;assertVectorsHaveEqualLengths(a,b);return a.map(function(_,i){return a[i]-b[i];});}"},z=(function(){var t=function(t,a){return F(t,a),t.map((function(n,e){return t[e]-a[e]}))};return t._closure={assertVectorsHaveEqualLengths:F},t.__initData=P,t.__workletHash=0xe191af38606,t})(),E={code:"function scaleVector(u,a){return u.map(function(e){return e*a;});}"},q=(function(){var t=function(t,a){return t.map((function(t){return t*a}))};return t._closure={},t.__initData=E,t.__workletHash=0xe96b5eac873,t})(),S={code:"function gramSchmidtAlgorithm(matrix){const{subtractVectors,projection,scaleVector,innerProduct,transposeMatrix}=this._closure;const[a0,a1,a2,a3]=matrix;const u0=a0;const u1=subtractVectors(a1,projection(u0,a1));const u2=subtractVectors(subtractVectors(a2,projection(u0,a2)),projection(u1,a2));const u3=subtractVectors(subtractVectors(subtractVectors(a3,projection(u0,a3)),projection(u1,a3)),projection(u2,a3));const[e0,e1,e2,e3]=[u0,u1,u2,u3].map(function(u){return scaleVector(u,1/Math.sqrt(innerProduct(u,u)));});const rotationMatrix=[[e0[0],e1[0],e2[0],e3[0]],[e0[1],e1[1],e2[1],e3[1]],[e0[2],e1[2],e2[2],e3[2]],[e0[3],e1[3],e2[3],e3[3]]];const skewMatrix=[[innerProduct(e0,a0),innerProduct(e0,a1),innerProduct(e0,a2),innerProduct(e0,a3)],[0,innerProduct(e1,a1),innerProduct(e1,a2),innerProduct(e1,a3)],[0,0,innerProduct(e2,a2),innerProduct(e2,a3)],[0,0,0,innerProduct(e3,a3)]];return{rotationMatrix:transposeMatrix(rotationMatrix),skewMatrix:transposeMatrix(skewMatrix)};}"},L=(function(){var t=function(t){var n=(0,a.default)(t,4),e=n[0],i=n[1],o=n[2],s=n[3],c=e,u=z(i,D(c,i)),l=z(z(o,D(c,o)),D(u,o)),x=[c,u,l,z(z(z(s,D(c,s)),D(u,s)),D(l,s))].map((function(t){return q(t,1/Math.sqrt(H(t,t)))})),f=(0,a.default)(x,4),m=f[0],M=f[1],b=f[2],_=f[3],h=[[m[0],M[0],b[0],_[0]],[m[1],M[1],b[1],_[1]],[m[2],M[2],b[2],_[2]],[m[3],M[3],b[3],_[3]]],y=[[H(m,e),H(m,i),H(m,o),H(m,s)],[0,H(M,i),H(M,o),H(M,s)],[0,0,H(b,o),H(b,s)],[0,0,0,H(_,s)]];return{rotationMatrix:A(h),skewMatrix:A(y)}};return t._closure={subtractVectors:z,projection:D,scaleVector:q,innerProduct:H,transposeMatrix:A},t.__initData=S,t.__workletHash=0xfbdb781ad9d,t})(),j={code:"function decomposeMatrix(unknownTypeMatrix){const{maybeFlattenMatrix,norm3d,gramSchmidtAlgorithm}=this._closure;const matrix=maybeFlattenMatrix(unknownTypeMatrix);if(matrix[15]===0){throw new Error('Invalid transform matrix!');}matrix.forEach(function(_,i){return matrix[i]/=matrix[15];});const translationMatrix=[[1,0,0,0],[0,1,0,0],[0,0,1,0],[matrix[12],matrix[13],matrix[14],1]];const sx=matrix[15]*norm3d(matrix[0],matrix[4],matrix[8]);const sy=matrix[15]*norm3d(matrix[1],matrix[5],matrix[9]);const sz=matrix[15]*norm3d(matrix[2],matrix[6],matrix[10]);const scaleMatrix=[[sx,0,0,0],[0,sy,0,0],[0,0,sz,0],[0,0,0,1]];const rotationAndSkewMatrix=[[matrix[0]/sx,matrix[1]/sx,matrix[2]/sx,0],[matrix[4]/sy,matrix[5]/sy,matrix[6]/sy,0],[matrix[8]/sz,matrix[9]/sz,matrix[10]/sz,0],[0,0,0,1]];const{rotationMatrix:rotationMatrix,skewMatrix:skewMatrix}=gramSchmidtAlgorithm(rotationAndSkewMatrix);return{translationMatrix:translationMatrix,scaleMatrix:scaleMatrix,rotationMatrix:rotationMatrix,skewMatrix:skewMatrix};}"},R=_e.decomposeMatrix=(function(){var t=function(t){var a=f(t);if(0===a[15])throw new Error('Invalid transform matrix!');a.forEach((function(t,n){return a[n]/=a[15]}));var n=[[1,0,0,0],[0,1,0,0],[0,0,1,0],[a[12],a[13],a[14],1]],e=a[15]*w(a[0],a[4],a[8]),i=a[15]*w(a[1],a[5],a[9]),o=a[15]*w(a[2],a[6],a[10]),s=[[e,0,0,0],[0,i,0,0],[0,0,o,0],[0,0,0,1]],c=[[a[0]/e,a[1]/e,a[2]/e,0],[a[4]/i,a[5]/i,a[6]/i,0],[a[8]/o,a[9]/o,a[10]/o,0],[0,0,0,1]],u=L(c);return{translationMatrix:n,scaleMatrix:s,rotationMatrix:u.rotationMatrix,skewMatrix:u.skewMatrix}};return t._closure={maybeFlattenMatrix:f,norm3d:w,gramSchmidtAlgorithm:L},t.__initData=j,t.__workletHash=0xee3c006c885,t})(),N={code:"function decomposeMatrixIntoMatricesAndAngles(matrix){const{decomposeMatrix}=this._closure;const{scaleMatrix:scaleMatrix,rotationMatrix:rotationMatrix,translationMatrix:translationMatrix,skewMatrix:skewMatrix}=decomposeMatrix(matrix);const sinRy=-rotationMatrix[0][2];const ry=Math.asin(sinRy);let rx;let rz;if(sinRy===1||sinRy===-1){rz=0;rx=Math.atan2(sinRy*rotationMatrix[0][1],sinRy*rotationMatrix[0][2]);}else{rz=Math.atan2(rotationMatrix[0][1],rotationMatrix[0][0]);rx=Math.atan2(rotationMatrix[1][2],rotationMatrix[2][2]);}return{scaleMatrix:scaleMatrix,rotationMatrix:rotationMatrix,translationMatrix:translationMatrix,skewMatrix:skewMatrix,rx:rx||0,ry:ry||0,rz:rz||0};}"};_e.decomposeMatrixIntoMatricesAndAngles=(function(){var t=function(t){var a,n,e=R(t),i=e.scaleMatrix,o=e.rotationMatrix,s=e.translationMatrix,c=e.skewMatrix,u=-o[0][2],l=Math.asin(u);return 1===u||-1===u?(n=0,a=Math.atan2(u*o[0][1],u*o[0][2])):(n=Math.atan2(o[0][1],o[0][0]),a=Math.atan2(o[1][2],o[2][2])),{scaleMatrix:i,rotationMatrix:o,translationMatrix:s,skewMatrix:c,rx:a||0,ry:l||0,rz:n||0}};return t._closure={decomposeMatrix:R},t.__initData=N,t.__workletHash=9146720999104,t})()}),576,[8,26]); +__d((function(_g,_r,_i,_a,m,e,_d){Object.defineProperty(e,"__esModule",{value:!0}),e.toLinearSpace=e.toGammaSpace=e.rgbaColor=e.rgbaArrayToRGBAColor=e.red=e.processColorInitially=e.processColor=e.opacity=e.isColor=e.hsvToColor=e.green=e.convertToRGBA=e.blue=e.RGBtoHSV=void 0;var r,o='[-+]?(?:\\d+(?:\\.\\d*)?|\\.\\d+)',n="[-+]?(?:\\d+(?:\\.\\d*)?|\\.\\d+)%",t={code:"function call(...args){return'\\\\(\\\\s*('+args.join(')\\\\s*,\\\\s*(')+')\\\\s*\\\\)';}"},a=(r=function(){for(var r=arguments.length,o=new Array(r),n=0;n1){t-=1;}if(t<1/6){return p+(q-p)*6*t;}if(t<1/2){return q;}if(t<2/3){return p+(q-p)*(2/3-t)*6;}return p;}"},i=(function(){var r=function(r,o,n){return n<0&&(n+=1),n>1&&(n-=1),n<.16666666666666666?r+6*(o-r)*n:n<.5?o:n<.6666666666666666?r+(o-r)*(.6666666666666666-n)*6:r};return r._closure={},r.__initData=u,r.__workletHash=3618366985414,r})(),c={code:"function hslToRgb(h,s,l){const{hue2rgb}=this._closure;const q=l<0.5?l*(1+s):l+s-l*s;const p=2*l-q;const r=hue2rgb(p,q,h+1/3);const g=hue2rgb(p,q,h);const b=hue2rgb(p,q,h-1/3);return Math.round(r*255)<<24|Math.round(g*255)<<16|Math.round(b*255)<<8;}"},s=(function(){var r=function(r,o,n){var t=n<.5?n*(1+o):n+o-n*o,a=2*n-t,l=i(a,t,r+.3333333333333333),u=i(a,t,r),c=i(a,t,r-.3333333333333333);return Math.round(255*l)<<24|Math.round(255*u)<<16|Math.round(255*c)<<8};return r._closure={hue2rgb:i},r.__initData=c,r.__workletHash=16387720504,r})(),h={code:"function parse255(str){const int=Number.parseInt(str,10);if(int<0){return 0;}if(int>255){return 255;}return int;}"},d=(function(){var r=function(r){var o=Number.parseInt(r,10);return o<0?0:o>255?255:o};return r._closure={},r.__initData=h,r.__workletHash=7024550667346,r})(),f={code:"function parse360(str){const int=Number.parseFloat(str);return(int%360+360)%360/360;}"},g=(function(){var r=function(r){return(Number.parseFloat(r)%360+360)%360/360};return r._closure={},r.__initData=f,r.__workletHash=6683812623228,r})(),b={code:"function parse1(str){const num=Number.parseFloat(str);if(num<0){return 0;}if(num>1){return 255;}return Math.round(num*255);}"},p=(function(){var r=function(r){var o=Number.parseFloat(r);return o<0?0:o>1?255:Math.round(255*o)};return r._closure={},r.__initData=b,r.__workletHash=7197247664793,r})(),_={code:"function parsePercentage(str){const int=Number.parseFloat(str);if(int<0){return 0;}if(int>100){return 1;}return int/100;}"},v=(function(){var r=function(r){var o=Number.parseFloat(r);return o<0?0:o>100?1:o/100};return r._closure={},r.__initData=_,r.__workletHash=8813932430184,r})(),k=(0,_r(_d[0]).makeShareable)({transparent:0,aliceblue:4042850303,antiquewhite:4209760255,aqua:16777215,aquamarine:2147472639,azure:4043309055,beige:4126530815,bisque:4293182719,black:255,blanchedalmond:4293643775,blue:65535,blueviolet:2318131967,brown:2771004159,burlywood:3736635391,burntsienna:3934150143,cadetblue:1604231423,chartreuse:2147418367,chocolate:3530104575,coral:4286533887,cornflowerblue:1687547391,cornsilk:4294499583,crimson:3692313855,cyan:16777215,darkblue:35839,darkcyan:9145343,darkgoldenrod:3095792639,darkgray:2846468607,darkgreen:6553855,darkgrey:2846468607,darkkhaki:3182914559,darkmagenta:2332068863,darkolivegreen:1433087999,darkorange:4287365375,darkorchid:2570243327,darkred:2332033279,darksalmon:3918953215,darkseagreen:2411499519,darkslateblue:1211993087,darkslategray:793726975,darkslategrey:793726975,darkturquoise:13554175,darkviolet:2483082239,deeppink:4279538687,deepskyblue:12582911,dimgray:1768516095,dimgrey:1768516095,dodgerblue:512819199,firebrick:2988581631,floralwhite:4294635775,forestgreen:579543807,fuchsia:4278255615,gainsboro:3705462015,ghostwhite:4177068031,gold:4292280575,goldenrod:3668254975,gray:2155905279,green:8388863,greenyellow:2919182335,grey:2155905279,honeydew:4043305215,hotpink:4285117695,indianred:3445382399,indigo:1258324735,ivory:4294963455,khaki:4041641215,lavender:3873897215,lavenderblush:4293981695,lawngreen:2096890111,lemonchiffon:4294626815,lightblue:2916673279,lightcoral:4034953471,lightcyan:3774873599,lightgoldenrodyellow:4210742015,lightgray:3553874943,lightgreen:2431553791,lightgrey:3553874943,lightpink:4290167295,lightsalmon:4288707327,lightseagreen:548580095,lightskyblue:2278488831,lightslategray:2005441023,lightslategrey:2005441023,lightsteelblue:2965692159,lightyellow:4294959359,lime:16711935,limegreen:852308735,linen:4210091775,magenta:4278255615,maroon:2147483903,mediumaquamarine:1724754687,mediumblue:52735,mediumorchid:3126187007,mediumpurple:2473647103,mediumseagreen:1018393087,mediumslateblue:2070474495,mediumspringgreen:16423679,mediumturquoise:1221709055,mediumvioletred:3340076543,midnightblue:421097727,mintcream:4127193855,mistyrose:4293190143,moccasin:4293178879,navajowhite:4292783615,navy:33023,oldlace:4260751103,olive:2155872511,olivedrab:1804477439,orange:4289003775,orangered:4282712319,orchid:3664828159,palegoldenrod:4008225535,palegreen:2566625535,paleturquoise:2951671551,palevioletred:3681588223,papayawhip:4293907967,peachpuff:4292524543,peru:3448061951,pink:4290825215,plum:3718307327,powderblue:2967529215,purple:2147516671,rebeccapurple:1714657791,red:4278190335,rosybrown:3163525119,royalblue:1097458175,saddlebrown:2336560127,salmon:4202722047,sandybrown:4104413439,seagreen:780883967,seashell:4294307583,sienna:2689740287,silver:3233857791,skyblue:2278484991,slateblue:1784335871,slategray:1887473919,slategrey:1887473919,snow:4294638335,springgreen:16744447,steelblue:1182971135,tan:3535047935,teal:8421631,thistle:3636451583,tomato:4284696575,turquoise:1088475391,violet:4001558271,wheat:4125012991,white:4294967295,whitesmoke:4126537215,yellow:4294902015,yellowgreen:2597139199}),y={code:"function normalizeColor(color){const{MATCHERS,names,parse255,parse1,hslToRgb,parse360,parsePercentage}=this._closure;if(typeof color==='number'){if(color>>>0===color&&color>=0&&color<=0xffffffff){return color;}return null;}if(typeof color!=='string'){return null;}let match;if(match=MATCHERS.hex6.exec(color)){return Number.parseInt(match[1]+'ff',16)>>>0;}if(names[color]!==undefined){return names[color];}if(match=MATCHERS.rgb.exec(color)){return((parse255(match[1])<<24|parse255(match[2])<<16|parse255(match[3])<<8|0x000000ff)>>>0);}if(match=MATCHERS.rgba.exec(color)){return((parse255(match[1])<<24|parse255(match[2])<<16|parse255(match[3])<<8|parse1(match[4]))>>>0);}if(match=MATCHERS.hex3.exec(color)){return Number.parseInt(match[1]+match[1]+match[2]+match[2]+match[3]+match[3]+'ff',16)>>>0;}if(match=MATCHERS.hex8.exec(color)){return Number.parseInt(match[1],16)>>>0;}if(match=MATCHERS.hex4.exec(color)){return Number.parseInt(match[1]+match[1]+match[2]+match[2]+match[3]+match[3]+match[4]+match[4],16)>>>0;}if(match=MATCHERS.hsl.exec(color)){return(hslToRgb(parse360(match[1]),parsePercentage(match[2]),parsePercentage(match[3]))|0x000000ff)>>>0;}if(match=MATCHERS.hsla.exec(color)){return(hslToRgb(parse360(match[1]),parsePercentage(match[2]),parsePercentage(match[3]))|parse1(match[4]))>>>0;}return null;}"},C=(function(){var r=function(r){return'number'==typeof r?r>>>0===r&&r>=0&&r<=4294967295?r:null:'string'!=typeof r?null:(o=l.hex6.exec(r))?Number.parseInt(o[1]+'ff',16)>>>0:void 0!==k[r]?k[r]:(o=l.rgb.exec(r))?(d(o[1])<<24|d(o[2])<<16|d(o[3])<<8|255)>>>0:(o=l.rgba.exec(r))?(d(o[1])<<24|d(o[2])<<16|d(o[3])<<8|p(o[4]))>>>0:(o=l.hex3.exec(r))?Number.parseInt(o[1]+o[1]+o[2]+o[2]+o[3]+o[3]+'ff',16)>>>0:(o=l.hex8.exec(r))?Number.parseInt(o[1],16)>>>0:(o=l.hex4.exec(r))?Number.parseInt(o[1]+o[1]+o[2]+o[2]+o[3]+o[3]+o[4]+o[4],16)>>>0:(o=l.hsl.exec(r))?(255|s(g(o[1]),v(o[2]),v(o[3])))>>>0:(o=l.hsla.exec(r))?(s(g(o[1]),v(o[2]),v(o[3]))|p(o[4]))>>>0:null;var o};return r._closure={MATCHERS:l,names:k,parse255:d,parse1:p,hslToRgb:s,parse360:g,parsePercentage:v},r.__initData=y,r.__workletHash=0xd8081177c21,r})(),w={code:"function anonymous(c){return(c>>24&255)/255;}"},x=(e.opacity=(function(){var r=function(r){return(r>>24&255)/255};return r._closure={},r.__initData=w,r.__workletHash=0xe249f189cce,r})(),{code:"function anonymous(c){return c>>16&255;}"}),R=(e.red=(function(){var r=function(r){return r>>16&255};return r._closure={},r.__initData=x,r.__workletHash=9095050284307,r})(),{code:"function anonymous(c){return c>>8&255;}"}),M=(e.green=(function(){var r=function(r){return r>>8&255};return r._closure={},r.__initData=R,r.__workletHash=5168419980876,r})(),{code:"function anonymous(c){return c&255;}"}),A=(e.blue=(function(){var r=function(r){return 255&r};return r._closure={},r.__initData=M,r.__workletHash=8366976340820,r})(),(0,_r(_d[1]).isWeb)()),H=(0,_r(_d[1]).isAndroid)(),I={code:"function anonymous(r,g,b,alpha=1){const{IS_WEB,IS_ANDROID}=this._closure;if(IS_WEB||!_WORKLET){return\"rgba(\"+r+\", \"+g+\", \"+b+\", \"+alpha+\")\";}const c=Math.round(alpha*255)*(1<<24)+Math.round(r)*(1<<16)+Math.round(g)*(1<<8)+Math.round(b);if(IS_ANDROID){return c<1<<31>>>0?c:c-4294967296;}return c;}"},D=e.rgbaColor=(function(){var r=function(r,o,n){var t=arguments.length>3&&void 0!==arguments[3]?arguments[3]:1;if(A||!_WORKLET)return`rgba(${r}, ${o}, ${n}, ${t})`;var a=16777216*Math.round(255*t)+65536*Math.round(r)+256*Math.round(o)+Math.round(n);return H?a<2147483648?a:a-4294967296:a};return r._closure={IS_WEB:A,IS_ANDROID:H},r.__initData=I,r.__workletHash=5938637469506,r})(),S={code:"function RGBtoHSV(r,g,b){if(arguments.length===1){g=r.g;b=r.b;r=r.r;}const max=Math.max(r,g,b);const min=Math.min(r,g,b);const d=max-min;const s=max===0?0:d/max;const v=max/255;let h;switch(max){default:case min:h=0;break;case r:h=g-b+d*(g>>8)>>>0;return normalizedColor;}"}),N=e.processColorInitially=(function(){var r=function(r){if(null==r||'number'==typeof r)return r;var o=C(r);return null!=o?'number'!=typeof o?null:o=(o<<24|o>>>8)>>>0:void 0};return r._closure={normalizeColor:C},r.__initData=q,r.__workletHash=0xbf0abaff886,r})(),z={code:"function isColor(value){const{processColorInitially}=this._closure;if(typeof value!=='string'){return false;}return processColorInitially(value)!=null;}"},E=(e.isColor=(function(){var r=function(r){return'string'==typeof r&&null!=N(r)};return r._closure={processColorInitially:N},r.__initData=z,r.__workletHash=3538854147579,r})(),{code:"function processColor(color){const{processColorInitially,IS_ANDROID}=this._closure;let normalizedColor=processColorInitially(color);if(normalizedColor===null||normalizedColor===undefined){return undefined;}if(typeof normalizedColor!=='number'){return null;}if(IS_ANDROID){normalizedColor=normalizedColor|0x0;}return normalizedColor;}"}),F=(e.processColor=(function(){var r=function(r){var o=N(r);if(null!=o)return'number'!=typeof o?null:(H&&(o|=0),o)};return r._closure={processColorInitially:N,IS_ANDROID:H},r.__initData=E,r.__workletHash=0xd177b6ed2b5,r})(),{code:"function convertToRGBA(color){const{processColorInitially}=this._closure;const processedColor=processColorInitially(color);const a=(processedColor>>>24)/255;const r=(processedColor<<8>>>24)/255;const g=(processedColor<<16>>>24)/255;const b=(processedColor<<24>>>24)/255;return[r,g,b,a];}"}),$=(e.convertToRGBA=(function(){var r=function(r){var o=N(r);return[(o<<8>>>24)/255,(o<<16>>>24)/255,(o<<24>>>24)/255,(o>>>24)/255]};return r._closure={processColorInitially:N},r.__initData=F,r.__workletHash=0xb78af5b112c,r})(),{code:"function rgbaArrayToRGBAColor(RGBA){return\"rgba(\"+Math.round(RGBA[0]*255)+\", \"+Math.round(RGBA[1]*255)+\", \"+Math.round(RGBA[2]*255)+\", \"+RGBA[3]+\")\";}"}),O=(e.rgbaArrayToRGBAColor=(function(){var r=function(r){return`rgba(${Math.round(255*r[0])}, ${Math.round(255*r[1])}, ${Math.round(255*r[2])}, ${r[3]})`};return r._closure={},r.__initData=$,r.__workletHash=1218651315844,r})(),{code:"function toLinearSpace(RGBA,gamma=2.2){const res=[];for(let i=0;i<3;++i){res.push(Math.pow(RGBA[i],gamma));}res.push(RGBA[3]);return res;}"}),P=(e.toLinearSpace=(function(){var r=function(r){for(var o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:2.2,n=[],t=0;t<3;++t)n.push(Math.pow(r[t],o));return n.push(r[3]),n};return r._closure={},r.__initData=O,r.__workletHash=0xc7a0aab56d6,r})(),{code:"function toGammaSpace(RGBA,gamma=2.2){const res=[];for(let i=0;i<3;++i){res.push(Math.pow(RGBA[i],1/gamma));}res.push(RGBA[3]);return res;}"});e.toGammaSpace=(function(){var r=function(r){for(var o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:2.2,n=[],t=0;t<3;++t)n.push(Math.pow(r[t],1/o));return n.push(r[3]),n};return r._closure={},r.__initData=P,r.__workletHash=2291875308114,r})()}),577,[557,552]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.withDelay=void 0;var n,t={code:"function anonymous(delayMs,_nextAnimation){const{defineAnimation}=this._closure;return defineAnimation(_nextAnimation,function(){'worklet';const nextAnimation=typeof _nextAnimation==='function'?_nextAnimation():_nextAnimation;function delay(animation,now){const{startTime:startTime,started:started,previousAnimation:previousAnimation}=animation;const current=animation.current;if(now-startTime>delayMs){if(!started){nextAnimation.onStart(nextAnimation,current,now,previousAnimation);animation.previousAnimation=null;animation.started=true;}const finished=nextAnimation.onFrame(nextAnimation,now);animation.current=nextAnimation.current;return finished;}else if(previousAnimation){const finished=previousAnimation.finished||previousAnimation.onFrame(previousAnimation,now);animation.current=previousAnimation.current;if(finished){animation.previousAnimation=null;}}return false;}function onStart(animation,value,now,previousAnimation){animation.startTime=now;animation.started=false;animation.current=value;if(previousAnimation===animation){animation.previousAnimation=previousAnimation.previousAnimation;}else{animation.previousAnimation=previousAnimation;}}const callback=function(finished){if(nextAnimation.callback){nextAnimation.callback(finished);}};return{isHigherOrder:true,onFrame:delay,onStart:onStart,current:nextAnimation.current,callback:callback,previousAnimation:null,startTime:0,started:false};});}"},o={code:"function anonymous(){const{_nextAnimation,delayMs}=this._closure;const nextAnimation=typeof _nextAnimation==='function'?_nextAnimation():_nextAnimation;function delay(animation,now){const{startTime:startTime,started:started,previousAnimation:previousAnimation}=animation;const current=animation.current;if(now-startTime>delayMs){if(!started){nextAnimation.onStart(nextAnimation,current,now,previousAnimation);animation.previousAnimation=null;animation.started=true;}const finished=nextAnimation.onFrame(nextAnimation,now);animation.current=nextAnimation.current;return finished;}else if(previousAnimation){const finished=previousAnimation.finished||previousAnimation.onFrame(previousAnimation,now);animation.current=previousAnimation.current;if(finished){animation.previousAnimation=null;}}return false;}function onStart(animation,value,now,previousAnimation){animation.startTime=now;animation.started=false;animation.current=value;if(previousAnimation===animation){animation.previousAnimation=previousAnimation.previousAnimation;}else{animation.previousAnimation=previousAnimation;}}const callback=function(finished){if(nextAnimation.callback){nextAnimation.callback(finished);}};return{isHigherOrder:true,onFrame:delay,onStart:onStart,current:nextAnimation.current,callback:callback,previousAnimation:null,startTime:0,started:false};}"};e.withDelay=((n=function(n,t){return(0,r(d[0]).defineAnimation)(t,(function(){var s=function(){var o='function'==typeof t?t():t;return{isHigherOrder:!0,onFrame:function(t,s){var u=t.startTime,c=t.started,l=t.previousAnimation,A=t.current;if(s-u>n){c||(o.onStart(o,A,s,l),t.previousAnimation=null,t.started=!0);var f=o.onFrame(o,s);return t.current=o.current,f}if(l){var v=l.finished||l.onFrame(l,s);t.current=l.current,v&&(t.previousAnimation=null)}return!1},onStart:function(n,t,o,s){n.startTime=o,n.started=!1,n.current=t,n.previousAnimation=s===n?s.previousAnimation:s},current:o.current,callback:function(n){o.callback&&o.callback(n)},previousAnimation:null,startTime:0,started:!1}};return s._closure={_nextAnimation:t,delayMs:n},s.__initData=o,s.__workletHash=5158259436197,s})())})._closure={defineAnimation:r(d[0]).defineAnimation},n.__initData=t,n.__workletHash=8078339706293,n)}),578,[575]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.withRepeat=void 0;var n,t={code:"function anonymous(_nextAnimation,numberOfReps=2,reverse=false,callback){const{defineAnimation}=this._closure;return defineAnimation(_nextAnimation,function(){'worklet';const nextAnimation=typeof _nextAnimation==='function'?_nextAnimation():_nextAnimation;function repeat(animation,now){const finished=nextAnimation.onFrame(nextAnimation,now);animation.current=nextAnimation.current;if(finished){animation.reps+=1;if(nextAnimation.callback){nextAnimation.callback(true,animation.current);}if(numberOfReps>0&&animation.reps>=numberOfReps){return true;}const startValue=reverse?nextAnimation.current:animation.startValue;if(reverse){nextAnimation.toValue=animation.startValue;animation.startValue=startValue;}nextAnimation.onStart(nextAnimation,startValue,now,nextAnimation.previousAnimation);return false;}return false;}const repCallback=function(finished){if(callback){callback(finished);}if(!finished&&nextAnimation.callback){nextAnimation.callback(false);}};function onStart(animation,value,now,previousAnimation){animation.startValue=value;animation.reps=0;nextAnimation.onStart(nextAnimation,value,now,previousAnimation);}return{isHigherOrder:true,onFrame:repeat,onStart:onStart,reps:0,current:nextAnimation.current,callback:repCallback,startValue:0};});}"},o={code:"function anonymous(){const{_nextAnimation,numberOfReps,reverse,callback}=this._closure;const nextAnimation=typeof _nextAnimation==='function'?_nextAnimation():_nextAnimation;function repeat(animation,now){const finished=nextAnimation.onFrame(nextAnimation,now);animation.current=nextAnimation.current;if(finished){animation.reps+=1;if(nextAnimation.callback){nextAnimation.callback(true,animation.current);}if(numberOfReps>0&&animation.reps>=numberOfReps){return true;}const startValue=reverse?nextAnimation.current:animation.startValue;if(reverse){nextAnimation.toValue=animation.startValue;animation.startValue=startValue;}nextAnimation.onStart(nextAnimation,startValue,now,nextAnimation.previousAnimation);return false;}return false;}const repCallback=function(finished){if(callback){callback(finished);}if(!finished&&nextAnimation.callback){nextAnimation.callback(false);}};function onStart(animation,value,now,previousAnimation){animation.startValue=value;animation.reps=0;nextAnimation.onStart(nextAnimation,value,now,previousAnimation);}return{isHigherOrder:true,onFrame:repeat,onStart:onStart,reps:0,current:nextAnimation.current,callback:repCallback,startValue:0};}"};e.withRepeat=(n=function(n){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:2,u=arguments.length>2&&void 0!==arguments[2]&&arguments[2],c=arguments.length>3?arguments[3]:void 0;return(0,r(d[0]).defineAnimation)(n,(function(){var l=function(){var o='function'==typeof n?n():n;return{isHigherOrder:!0,onFrame:function(n,c){var l=o.onFrame(o,c);if(n.current=o.current,l){if(n.reps+=1,o.callback&&o.callback(!0,n.current),t>0&&n.reps>=t)return!0;var s=u?o.current:n.startValue;return u&&(o.toValue=n.startValue,n.startValue=s),o.onStart(o,s,c,o.previousAnimation),!1}return!1},onStart:function(n,t,u,c){n.startValue=t,n.reps=0,o.onStart(o,t,u,c)},reps:0,current:o.current,callback:function(n){c&&c(n),!n&&o.callback&&o.callback(!1)},startValue:0}};return l._closure={_nextAnimation:n,numberOfReps:t,reverse:u,callback:c},l.__initData=o,l.__workletHash=6091933698604,l})())},n._closure={defineAnimation:r(d[0]).defineAnimation},n.__initData=t,n.__workletHash=0xf6965be7bf3,n)}),579,[575]); +__d((function(g,r,i,_a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.withSequence=void 0;var n,t={code:"function anonymous(..._animations){const{defineAnimation}=this._closure;return defineAnimation(_animations[0],function(){'worklet';const animations=_animations.map(function(a){const result=typeof a==='function'?a():a;result.finished=false;return result;});const firstAnimation=animations[0];const callback=function(finished){if(finished){return;}animations.forEach(function(animation){if(typeof animation.callback==='function'&&!animation.finished){animation.callback(finished);}});};function sequence(animation,now){const currentAnim=animations[animation.animationIndex];const finished=currentAnim.onFrame(currentAnim,now);animation.current=currentAnim.current;if(finished){if(currentAnim.callback){currentAnim.callback(true);}currentAnim.finished=true;animation.animationIndex+=1;if(animation.animationIndex=config.duration){animation.current=toValue;animation.lastTimestamp=0;return true;}if(config.configIsInvalid){if(config.useDuration)return false;else{animation.current=toValue;animation.lastTimestamp=0;return true;}}const{lastTimestamp:lastTimestamp,velocity:velocity}=animation;const deltaTime=Math.min(now-lastTimestamp,64);animation.lastTimestamp=now;const t=deltaTime/1000;const v0=-velocity;const x0=toValue-current;const{zeta:zeta,omega0:omega0,omega1:omega1}=animation;const{position:newPosition,velocity:newVelocity}=zeta<1?underDampedSpringCalculations(animation,{zeta:zeta,v0:v0,x0:x0,omega0:omega0,omega1:omega1,t:t}):criticallyDampedSpringCalculations(animation,{v0:v0,x0:x0,omega0:omega0,t:t});animation.current=newPosition;animation.velocity=newVelocity;const{isOvershooting:isOvershooting,isVelocity:isVelocity,isDisplacement:isDisplacement}=isAnimationTerminatingCalculation(animation,config);const springIsNotInMove=isOvershooting||isVelocity&&isDisplacement;if(!config.useDuration&&springIsNotInMove){animation.velocity=0;animation.current=toValue;animation.lastTimestamp=0;return true;}return false;}function isTriggeredTwice(previousAnimation,animation){return(previousAnimation===null||previousAnimation===void 0?void 0:previousAnimation.lastTimestamp)&&(previousAnimation===null||previousAnimation===void 0?void 0:previousAnimation.startTimestamp)&&(previousAnimation===null||previousAnimation===void 0?void 0:previousAnimation.toValue)===animation.toValue&&(previousAnimation===null||previousAnimation===void 0?void 0:previousAnimation.duration)===animation.duration&&(previousAnimation===null||previousAnimation===void 0?void 0:previousAnimation.dampingRatio)===animation.dampingRatio;}function onStart(animation,value,now,previousAnimation){animation.current=value;animation.startValue=value;let mass=config.mass;const triggeredTwice=isTriggeredTwice(previousAnimation,animation);const duration=config.duration;const x0=triggeredTwice?previousAnimation===null||previousAnimation===void 0?void 0:previousAnimation.startValue:Number(animation.toValue)-value;if(previousAnimation){animation.velocity=(triggeredTwice?previousAnimation===null||previousAnimation===void 0?void 0:previousAnimation.velocity:(previousAnimation===null||previousAnimation===void 0?void 0:previousAnimation.velocity)+config.velocity)||0;}else{animation.velocity=config.velocity||0;}if(triggeredTwice){animation.zeta=(previousAnimation===null||previousAnimation===void 0?void 0:previousAnimation.zeta)||0;animation.omega0=(previousAnimation===null||previousAnimation===void 0?void 0:previousAnimation.omega0)||0;animation.omega1=(previousAnimation===null||previousAnimation===void 0?void 0:previousAnimation.omega1)||0;}else{if(config.useDuration){const actualDuration=triggeredTwice?duration-(((previousAnimation===null||previousAnimation===void 0?void 0:previousAnimation.lastTimestamp)||0)-((previousAnimation===null||previousAnimation===void 0?void 0:previousAnimation.startTimestamp)||0)):duration;config.duration=actualDuration;mass=calculateNewMassToMatchDuration(x0,config,animation.velocity);}const{zeta:zeta,omega0:omega0,omega1:omega1}=initialCalculations(mass,config);animation.zeta=zeta;animation.omega0=omega0;animation.omega1=omega1;}animation.lastTimestamp=(previousAnimation===null||previousAnimation===void 0?void 0:previousAnimation.lastTimestamp)||now;animation.startTimestamp=triggeredTwice?(previousAnimation===null||previousAnimation===void 0?void 0:previousAnimation.startTimestamp)||now:now;}return{onFrame:springOnFrame,onStart:onStart,toValue:toValue,velocity:config.velocity||0,current:toValue,startValue:0,callback:callback,lastTimestamp:0,startTimestamp:0,zeta:0,omega0:0,omega1:0};});}"},t={code:"function anonymous(){const{userConfig,underDampedSpringCalculations,criticallyDampedSpringCalculations,isAnimationTerminatingCalculation,calculateNewMassToMatchDuration,initialCalculations,toValue,callback}=this._closure;var _userConfig,_userConfig2;const defaultConfig={damping:10,mass:1,stiffness:100,overshootClamping:false,restDisplacementThreshold:0.01,restSpeedThreshold:2,velocity:0,duration:2000,dampingRatio:0.5};const config={...defaultConfig,...userConfig,useDuration:!!((_userConfig=userConfig)!==null&&_userConfig!==void 0&&_userConfig.duration||(_userConfig2=userConfig)!==null&&_userConfig2!==void 0&&_userConfig2.dampingRatio),configIsInvalid:false};if([config.stiffness,config.damping,config.duration,config.dampingRatio,config.restDisplacementThreshold,config.restSpeedThreshold].some(function(x){return x<=0;})||config.mass===0){config.configIsInvalid=true;console.warn(\"You have provided invalid spring animation configuration! \\n Value of stiffness, damping, duration and damping ratio must be greater than zero, and mass can't equal zero.\");}function springOnFrame(animation,now){const{toValue:toValue,startTimestamp:startTimestamp,current:current}=animation;const timeFromStart=now-startTimestamp;if(config.useDuration&&timeFromStart>=config.duration){animation.current=toValue;animation.lastTimestamp=0;return true;}if(config.configIsInvalid){if(config.useDuration)return false;else{animation.current=toValue;animation.lastTimestamp=0;return true;}}const{lastTimestamp:lastTimestamp,velocity:velocity}=animation;const deltaTime=Math.min(now-lastTimestamp,64);animation.lastTimestamp=now;const t=deltaTime/1000;const v0=-velocity;const x0=toValue-current;const{zeta:zeta,omega0:omega0,omega1:omega1}=animation;const{position:newPosition,velocity:newVelocity}=zeta<1?underDampedSpringCalculations(animation,{zeta:zeta,v0:v0,x0:x0,omega0:omega0,omega1:omega1,t:t}):criticallyDampedSpringCalculations(animation,{v0:v0,x0:x0,omega0:omega0,t:t});animation.current=newPosition;animation.velocity=newVelocity;const{isOvershooting:isOvershooting,isVelocity:isVelocity,isDisplacement:isDisplacement}=isAnimationTerminatingCalculation(animation,config);const springIsNotInMove=isOvershooting||isVelocity&&isDisplacement;if(!config.useDuration&&springIsNotInMove){animation.velocity=0;animation.current=toValue;animation.lastTimestamp=0;return true;}return false;}function isTriggeredTwice(previousAnimation,animation){return(previousAnimation===null||previousAnimation===void 0?void 0:previousAnimation.lastTimestamp)&&(previousAnimation===null||previousAnimation===void 0?void 0:previousAnimation.startTimestamp)&&(previousAnimation===null||previousAnimation===void 0?void 0:previousAnimation.toValue)===animation.toValue&&(previousAnimation===null||previousAnimation===void 0?void 0:previousAnimation.duration)===animation.duration&&(previousAnimation===null||previousAnimation===void 0?void 0:previousAnimation.dampingRatio)===animation.dampingRatio;}function onStart(animation,value,now,previousAnimation){animation.current=value;animation.startValue=value;let mass=config.mass;const triggeredTwice=isTriggeredTwice(previousAnimation,animation);const duration=config.duration;const x0=triggeredTwice?previousAnimation===null||previousAnimation===void 0?void 0:previousAnimation.startValue:Number(animation.toValue)-value;if(previousAnimation){animation.velocity=(triggeredTwice?previousAnimation===null||previousAnimation===void 0?void 0:previousAnimation.velocity:(previousAnimation===null||previousAnimation===void 0?void 0:previousAnimation.velocity)+config.velocity)||0;}else{animation.velocity=config.velocity||0;}if(triggeredTwice){animation.zeta=(previousAnimation===null||previousAnimation===void 0?void 0:previousAnimation.zeta)||0;animation.omega0=(previousAnimation===null||previousAnimation===void 0?void 0:previousAnimation.omega0)||0;animation.omega1=(previousAnimation===null||previousAnimation===void 0?void 0:previousAnimation.omega1)||0;}else{if(config.useDuration){const actualDuration=triggeredTwice?duration-(((previousAnimation===null||previousAnimation===void 0?void 0:previousAnimation.lastTimestamp)||0)-((previousAnimation===null||previousAnimation===void 0?void 0:previousAnimation.startTimestamp)||0)):duration;config.duration=actualDuration;mass=calculateNewMassToMatchDuration(x0,config,animation.velocity);}const{zeta:zeta,omega0:omega0,omega1:omega1}=initialCalculations(mass,config);animation.zeta=zeta;animation.omega0=omega0;animation.omega1=omega1;}animation.lastTimestamp=(previousAnimation===null||previousAnimation===void 0?void 0:previousAnimation.lastTimestamp)||now;animation.startTimestamp=triggeredTwice?(previousAnimation===null||previousAnimation===void 0?void 0:previousAnimation.startTimestamp)||now:now;}return{onFrame:springOnFrame,onStart:onStart,toValue:toValue,velocity:config.velocity||0,current:toValue,startValue:0,callback:callback,lastTimestamp:0,startTimestamp:0,zeta:0,omega0:0,omega1:0};}"};e.withSpring=((n=function(n,o,s){return(0,r(d[0]).defineAnimation)(n,(function(){var l=function(){var t=Object.assign({},{damping:10,mass:1,stiffness:100,overshootClamping:!1,restDisplacementThreshold:.01,restSpeedThreshold:2,velocity:0,duration:2e3,dampingRatio:.5},o,{useDuration:!!(null!=o&&o.duration||null!=o&&o.dampingRatio),configIsInvalid:!1});function l(n,o){return(null==n?void 0:n.lastTimestamp)&&(null==n?void 0:n.startTimestamp)&&(null==n?void 0:n.toValue)===o.toValue&&(null==n?void 0:n.duration)===o.duration&&(null==n?void 0:n.dampingRatio)===o.dampingRatio}return([t.stiffness,t.damping,t.duration,t.dampingRatio,t.restDisplacementThreshold,t.restSpeedThreshold].some((function(n){return n<=0}))||0===t.mass)&&(t.configIsInvalid=!0,console.warn("You have provided invalid spring animation configuration! \n Value of stiffness, damping, duration and damping ratio must be greater than zero, and mass can't equal zero.")),{onFrame:function(n,o){var s=n.toValue,l=n.startTimestamp,u=n.current,c=o-l;if(t.useDuration&&c>=t.duration)return n.current=s,n.lastTimestamp=0,!0;if(t.configIsInvalid)return!t.useDuration&&(n.current=s,n.lastTimestamp=0,!0);var v=n.lastTimestamp,p=n.velocity,f=Math.min(o-v,64);n.lastTimestamp=o;var A=f/1e3,T=-p,y=s-u,C=n.zeta,D=n.omega0,h=n.omega1,w=C<1?(0,r(d[1]).underDampedSpringCalculations)(n,{zeta:C,v0:T,x0:y,omega0:D,omega1:h,t:A}):(0,r(d[1]).criticallyDampedSpringCalculations)(n,{v0:T,x0:y,omega0:D,t:A}),V=w.position,z=w.velocity;n.current=V,n.velocity=z;var S=(0,r(d[1]).isAnimationTerminatingCalculation)(n,t),I=S.isOvershooting,M=S.isVelocity,_=S.isDisplacement,x=I||M&&_;return!(t.useDuration||!x||(n.velocity=0,n.current=s,n.lastTimestamp=0,0))},onStart:function(n,o,s,u){n.current=o,n.startValue=o;var c=t.mass,v=l(u,n),p=t.duration,f=v?null==u?void 0:u.startValue:Number(n.toValue)-o;if(n.velocity=u?(v?null==u?void 0:u.velocity:(null==u?void 0:u.velocity)+t.velocity)||0:t.velocity||0,v)n.zeta=(null==u?void 0:u.zeta)||0,n.omega0=(null==u?void 0:u.omega0)||0,n.omega1=(null==u?void 0:u.omega1)||0;else{if(t.useDuration){var A=v?p-(((null==u?void 0:u.lastTimestamp)||0)-((null==u?void 0:u.startTimestamp)||0)):p;t.duration=A,c=(0,r(d[1]).calculateNewMassToMatchDuration)(f,t,n.velocity)}var T=(0,r(d[1]).initialCalculations)(c,t),y=T.zeta,C=T.omega0,D=T.omega1;n.zeta=y,n.omega0=C,n.omega1=D}n.lastTimestamp=(null==u?void 0:u.lastTimestamp)||s,n.startTimestamp=v&&(null==u?void 0:u.startTimestamp)||s},toValue:n,velocity:t.velocity||0,current:n,startValue:0,callback:s,lastTimestamp:0,startTimestamp:0,zeta:0,omega0:0,omega1:0}};return l._closure={userConfig:o,underDampedSpringCalculations:r(d[1]).underDampedSpringCalculations,criticallyDampedSpringCalculations:r(d[1]).criticallyDampedSpringCalculations,isAnimationTerminatingCalculation:r(d[1]).isAnimationTerminatingCalculation,calculateNewMassToMatchDuration:r(d[1]).calculateNewMassToMatchDuration,initialCalculations:r(d[1]).initialCalculations,toValue:n,callback:s},l.__initData=t,l.__workletHash=8669012451867,l})())})._closure={defineAnimation:r(d[0]).defineAnimation,underDampedSpringCalculations:r(d[1]).underDampedSpringCalculations,criticallyDampedSpringCalculations:r(d[1]).criticallyDampedSpringCalculations,isAnimationTerminatingCalculation:r(d[1]).isAnimationTerminatingCalculation,calculateNewMassToMatchDuration:r(d[1]).calculateNewMassToMatchDuration,initialCalculations:r(d[1]).initialCalculations},n.__initData=o,n.__workletHash=0xb72a90dc867,n)}),581,[575,582]); +__d((function(g,r,i,a,_m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.underDampedSpringCalculations=e.isAnimationTerminatingCalculation=e.initialCalculations=e.criticallyDampedSpringCalculations=e.calculateNewMassToMatchDuration=void 0;var t,o={code:"function bisectRoot({min:min,max:max,func:func,maxIterations=20}){const ACCURACY=0.00005;let idx=maxIterations;let current=(max+min)/2;while(Math.abs(func(current))>ACCURACY&&idx>0){idx-=1;if(func(current)<0){min=current;}else{max=current;}current=(min+max)/2;}return current;}"},n=((t=function(t){for(var o=t.min,n=t.max,s=t.func,c=t.maxIterations,l=void 0===c?20:c,u=(n+o)/2;Math.abs(s(u))>5e-5&&l>0;)l-=1,s(u)<0?o=u:n=u,u=(o+n)/2;return u})._closure={},t.__initData=o,t.__workletHash=5240309884444,t),s={code:"function initialCalculations(mass=0,config){if(config.configIsInvalid){return{zeta:0,omega0:0,omega1:0};}if(config.useDuration){const{stiffness:k,dampingRatio:zeta}=config;const omega0=Math.sqrt(k/mass);const omega1=omega0*Math.sqrt(1-zeta**2);return{zeta:zeta,omega0:omega0,omega1:omega1};}else{const{damping:c,mass:m,stiffness:k}=config;const zeta=c/(2*Math.sqrt(k*m));const omega0=Math.sqrt(k/m);const omega1=omega0*Math.sqrt(1-zeta**2);return{zeta:zeta,omega0:omega0,omega1:omega1};}}"},c=(e.initialCalculations=(function(){var t=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,o=arguments.length>1?arguments[1]:void 0;if(o.configIsInvalid)return{zeta:0,omega0:0,omega1:0};if(o.useDuration){var n=o.stiffness,s=o.dampingRatio,c=Math.sqrt(n/t);return{zeta:s,omega0:c,omega1:c*Math.sqrt(1-s**2)}}var l=o.damping,u=o.mass,m=o.stiffness,h=l/(2*Math.sqrt(m*u)),p=Math.sqrt(m/u);return{zeta:h,omega0:p,omega1:p*Math.sqrt(1-h**2)}};return t._closure={},t.__initData=s,t.__workletHash=0xaac8c8b5cc7,t})(),{code:"function calculateNewMassToMatchDuration(x0,config,v0){const{bisectRoot}=this._closure;if(config.configIsInvalid){return 0;}const{stiffness:k,dampingRatio:zeta,restSpeedThreshold:threshold,duration:duration}=config;const durationForMass=function(mass){'worklet';const amplitude=(mass*v0*v0+k*x0*x0)/(Math.exp(1-0.5*zeta)*k);const c=zeta*2*Math.sqrt(k*mass);return 1000*(-2*mass/c)*Math.log(threshold*0.01/amplitude)-duration;};return bisectRoot({min:0,max:100,func:durationForMass});}"}),l={code:"function anonymous(mass){const{v0,k,x0,zeta,threshold,duration}=this._closure;const amplitude=(mass*v0*v0+k*x0*x0)/(Math.exp(1-0.5*zeta)*k);const c=zeta*2*Math.sqrt(k*mass);return 1000*(-2*mass/c)*Math.log(threshold*0.01/amplitude)-duration;}"},u=(e.calculateNewMassToMatchDuration=(function(){var t=function(t,o,s){if(o.configIsInvalid)return 0;var c=o.stiffness,u=o.dampingRatio,m=o.restSpeedThreshold,h=o.duration,p=(function(){var o=function(o){var n=(o*s*s+c*t*t)/(Math.exp(1-.5*u)*c);return-2*o/(2*u*Math.sqrt(c*o))*1e3*Math.log(.01*m/n)-h};return o._closure={v0:s,k:c,x0:t,zeta:u,threshold:m,duration:h},o.__initData=l,o.__workletHash=2538321296895,o})();return n({min:0,max:100,func:p})};return t._closure={bisectRoot:n},t.__initData=c,t.__workletHash=5061856458825,t})(),{code:"function criticallyDampedSpringCalculations(animation,precalculatedValues){const{toValue:toValue}=animation;const{v0:v0,x0:x0,omega0:omega0,t:t}=precalculatedValues;const criticallyDampedEnvelope=Math.exp(-omega0*t);const criticallyDampedPosition=toValue-criticallyDampedEnvelope*(x0+(v0+omega0*x0)*t);const criticallyDampedVelocity=criticallyDampedEnvelope*(v0*(t*omega0-1)+t*x0*omega0*omega0);return{position:criticallyDampedPosition,velocity:criticallyDampedVelocity};}"}),m=(e.criticallyDampedSpringCalculations=(function(){var t=function(t,o){var n=t.toValue,s=o.v0,c=o.x0,l=o.omega0,u=o.t,m=Math.exp(-l*u);return{position:n-m*(c+(s+l*c)*u),velocity:m*(s*(u*l-1)+u*c*l*l)}};return t._closure={},t.__initData=u,t.__workletHash=5599334668647,t})(),{code:"function underDampedSpringCalculations(animation,precalculatedValues){const{toValue:toValue,current:current,velocity:velocity}=animation;const{zeta:zeta,t:t,omega0:omega0,omega1:omega1}=precalculatedValues;const v0=-velocity;const x0=toValue-current;const sin1=Math.sin(omega1*t);const cos1=Math.cos(omega1*t);const underDampedEnvelope=Math.exp(-zeta*omega0*t);const underDampedFrag1=underDampedEnvelope*(sin1*((v0+zeta*omega0*x0)/omega1)+x0*cos1);const underDampedPosition=toValue-underDampedFrag1;const underDampedVelocity=zeta*omega0*underDampedFrag1-underDampedEnvelope*(cos1*(v0+zeta*omega0*x0)-omega1*x0*sin1);return{position:underDampedPosition,velocity:underDampedVelocity};}"}),h=(e.underDampedSpringCalculations=(function(){var t=function(t,o){var n=t.toValue,s=t.current,c=t.velocity,l=o.zeta,u=o.t,m=o.omega0,h=o.omega1,p=-c,f=n-s,v=Math.sin(h*u),M=Math.cos(h*u),D=Math.exp(-l*m*u),_=D*(v*((p+l*m*f)/h)+f*M);return{position:n-_,velocity:l*m*_-D*(M*(p+l*m*f)-h*f*v)}};return t._closure={},t.__initData=m,t.__workletHash=1432967632227,t})(),{code:"function isAnimationTerminatingCalculation(animation,config){const{toValue:toValue,velocity:velocity,startValue:startValue,current:current}=animation;const isOvershooting=config.overshootClamping?current>toValue&&startValuetoValue:false;const isVelocity=Math.abs(velocity)n&&cn),isVelocity:Math.abs(s)0){const currentEntry=entriesToCheck.pop();if(Array.isArray(currentEntry.value)){for(let index=0;index0){const currentEntry=entriesToCheck.pop();if(Array.isArray(currentEntry.value)){for(let index=0;index0){const currentAnimation=animationsToCheck.pop();if(Array.isArray(currentAnimation)){for(const element of currentAnimation){animationsToCheck.push(element);}}else if(typeof currentAnimation==='object'&¤tAnimation.onStart===undefined){for(const value of Object.values(currentAnimation)){animationsToCheck.push(value);}}else{const currentStyleAnimation=currentAnimation;if(!currentStyleAnimation.finished&¤tStyleAnimation.callback){currentStyleAnimation.callback(false);}}}}};return{isHigherOrder:true,onFrame:onFrame,onStart:onStart,current:{},styleAnimations:styleAnimations,callback:callback};});}"},l={code:"function anonymous(){const{ColorProperties,processColor,setPath,styleAnimations,resolvePath,withTiming}=this._closure;const onFrame=function(animation,now){let stillGoing=false;const entriesToCheck=[{value:animation.styleAnimations,path:[]}];while(entriesToCheck.length>0){const currentEntry=entriesToCheck.pop();if(Array.isArray(currentEntry.value)){for(let index=0;index0){const currentEntry=entriesToCheck.pop();if(Array.isArray(currentEntry.value)){for(let index=0;index0){const currentAnimation=animationsToCheck.pop();if(Array.isArray(currentAnimation)){for(const element of currentAnimation){animationsToCheck.push(element);}}else if(typeof currentAnimation==='object'&¤tAnimation.onStart===undefined){for(const value of Object.values(currentAnimation)){animationsToCheck.push(value);}}else{const currentStyleAnimation=currentAnimation;if(!currentStyleAnimation.finished&¤tStyleAnimation.callback){currentStyleAnimation.callback(false);}}}}};return{isHigherOrder:true,onFrame:onFrame,onStart:onStart,current:{},styleAnimations:styleAnimations,callback:callback};}"};e.withStyleAnimation=(function(){var n=function(n){return(0,r(d[0]).defineAnimation)({},(function(){var t=function(){return{isHigherOrder:!0,onFrame:function(n,t){for(var i=!1,o=[{value:n.styleAnimations,path:[]}];o.length>0;){var u=o.pop();if(Array.isArray(u.value))for(var l=0;l0;){var y=s.pop();if(Array.isArray(y.value))for(var h=0;h0;){var o=i.pop();if(Array.isArray(o))for(var c of o)i.push(c);else if('object'==typeof o&&void 0===o.onStart)for(var u of Object.values(o))i.push(u);else{var l=o;!l.finished&&l.callback&&l.callback(!1)}}}}};return t._closure={ColorProperties:r(d[1]).ColorProperties,processColor:r(d[2]).processColor,setPath:c,styleAnimations:n,resolvePath:i,withTiming:r(d[3]).withTiming},t.__initData=l,t.__workletHash=0x92a34614521,t})())};return n._closure={defineAnimation:r(d[0]).defineAnimation,ColorProperties:r(d[1]).ColorProperties,processColor:r(d[2]).processColor,setPath:c,resolvePath:i,withTiming:r(d[3]).withTiming},n.__initData=u,n.__workletHash=557906256777,n})()}),583,[575,584,577,585]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.updatePropsJestWrapper=e.default=e.ColorProperties=void 0;var o,t,s=e.ColorProperties=(0,r(d[0]).makeShareable)(['backgroundColor','borderBottomColor','borderColor','borderLeftColor','borderRightColor','borderTopColor','borderStartColor','borderEndColor','color','shadowColor','textDecorationColor','tintColor','textShadowColor','overlayColor']),n={code:"function anonymous(_,updates,maybeViewRef){const{_updatePropsJS}=this._closure;if(maybeViewRef){maybeViewRef.items.forEach(function(item,_){_updatePropsJS(updates,item);});}}"},u={code:"function anonymous(viewDescriptors,updates){const{ColorProperties,processColor}=this._closure;for(const key in updates){if(ColorProperties.indexOf(key)!==-1){updates[key]=processColor(updates[key]);}}global.UpdatePropsManager.update(viewDescriptors,updates);}"};(0,r(d[1]).shouldBeUseWeb)()?((t=function(o,t,s){s&&s.items.forEach((function(o,s){(0,r(d[2])._updatePropsJS)(t,o)}))})._closure={_updatePropsJS:r(d[2])._updatePropsJS},t.__initData=n,t.__workletHash=0x9dfa4abcea3,o=t):o=(function(){var o=function(o,t){for(var n in t)-1!==s.indexOf(n)&&(t[n]=(0,r(d[3]).processColor)(t[n]));g.UpdatePropsManager.update(o,t)};return o._closure={ColorProperties:s,processColor:r(d[3]).processColor},o.__initData=u,o.__workletHash=7252556019524,o})();e.updatePropsJestWrapper=function(t,s,n,u,p){p.forEach((function(o){o(s)})),u.current.value=Object.assign({},u.current.value,s),o(t,s,n)},e.default=o;var p={code:"function anonymous(){const operations=[];return{update:function(viewDescriptors,updates){var _this=this;viewDescriptors.value.forEach(function(viewDescriptor){operations.push({shadowNodeWrapper:viewDescriptor.shadowNodeWrapper,updates:updates});if(operations.length===1){queueMicrotask(_this.flush);}});},flush:function(){_updatePropsFabric(operations);operations.length=0;}};}"},c={code:"function anonymous(){const operations=[];return{update:function(viewDescriptors,updates){var _this=this;viewDescriptors.value.forEach(function(viewDescriptor){operations.push({tag:viewDescriptor.tag,name:viewDescriptor.name||'RCTView',updates:updates});if(operations.length===1){queueMicrotask(_this.flush);}});},flush:function(){_updatePropsPaper(operations);operations.length=0;}};}"},l=g._IS_FABRIC?(function(){var o=function(){var o=[];return{update:function(t,s){var n=this;t.value.forEach((function(t){o.push({shadowNodeWrapper:t.shadowNodeWrapper,updates:s}),1===o.length&&queueMicrotask(n.flush)}))},flush:function(){_updatePropsFabric(o),o.length=0}}};return o._closure={},o.__initData=p,o.__workletHash=0xa2fe40b6c5a,o})():(function(){var o=function(){var o=[];return{update:function(t,s){var n=this;t.value.forEach((function(t){o.push({tag:t.tag,name:t.name||'RCTView',updates:s}),1===o.length&&queueMicrotask(n.flush)}))},flush:function(){_updatePropsPaper(o),o.length=0}}};return o._closure={},o.__initData=c,o.__workletHash=0xe383a30227f,o})(),f={code:"function anonymous(){const{createUpdatePropsManager}=this._closure;global.UpdatePropsManager=createUpdatePropsManager();}"};(0,r(d[4]).runOnUIImmediately)((function(){var o=function(){g.UpdatePropsManager=l()};return o._closure={createUpdatePropsManager:l},o.__initData=f,o.__workletHash=4094300323452,o})())()}),584,[557,552,550,577,561]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.withTiming=void 0;var t,n={code:"function anonymous(toValue,userConfig,callback){const{defineAnimation,Easing}=this._closure;return defineAnimation(toValue,function(){'worklet';const config={duration:300,easing:Easing.inOut(Easing.quad)};if(userConfig){Object.keys(userConfig).forEach(function(key){return config[key]=userConfig[key];});}function timing(animation,now){const{toValue:toValue,startTime:startTime,startValue:startValue}=animation;const runtime=now-startTime;if(runtime>=config.duration){animation.startTime=0;animation.current=toValue;return true;}const progress=animation.easing(runtime/config.duration);animation.current=startValue+(toValue-startValue)*progress;return false;}function onStart(animation,value,now,previousAnimation){if(previousAnimation&&previousAnimation.type==='timing'&&previousAnimation.toValue===toValue&&previousAnimation.startTime){animation.startTime=previousAnimation.startTime;animation.startValue=previousAnimation.startValue;}else{animation.startTime=now;animation.startValue=value;}animation.current=value;if(typeof config.easing==='object'){animation.easing=config.easing.factory();}else{animation.easing=config.easing;}}return{type:'timing',onFrame:timing,onStart:onStart,progress:0,toValue:toValue,startValue:0,startTime:0,easing:function(){return 0;},current:toValue,callback:callback};});}"},o={code:"function anonymous(){const{Easing,userConfig,toValue,callback}=this._closure;const config={duration:300,easing:Easing.inOut(Easing.quad)};if(userConfig){Object.keys(userConfig).forEach(function(key){return config[key]=userConfig[key];});}function timing(animation,now){const{toValue:toValue,startTime:startTime,startValue:startValue}=animation;const runtime=now-startTime;if(runtime>=config.duration){animation.startTime=0;animation.current=toValue;return true;}const progress=animation.easing(runtime/config.duration);animation.current=startValue+(toValue-startValue)*progress;return false;}function onStart(animation,value,now,previousAnimation){if(previousAnimation&&previousAnimation.type==='timing'&&previousAnimation.toValue===toValue&&previousAnimation.startTime){animation.startTime=previousAnimation.startTime;animation.startValue=previousAnimation.startValue;}else{animation.startTime=now;animation.startValue=value;}animation.current=value;if(typeof config.easing==='object'){animation.easing=config.easing.factory();}else{animation.easing=config.easing;}}return{type:'timing',onFrame:timing,onStart:onStart,progress:0,toValue:toValue,startValue:0,startTime:0,easing:function(){return 0;},current:toValue,callback:callback};}"};e.withTiming=((t=function(t,n,u){return(0,r(d[0]).defineAnimation)(t,(function(){var s=function(){var o={duration:300,easing:r(d[1]).Easing.inOut(r(d[1]).Easing.quad)};return n&&Object.keys(n).forEach((function(t){return o[t]=n[t]})),{type:'timing',onFrame:function(t,n){var u=t.toValue,s=t.startTime,c=t.startValue,l=n-s;if(l>=o.duration)return t.startTime=0,t.current=u,!0;var f=t.easing(l/o.duration);return t.current=c+(u-c)*f,!1},onStart:function(n,u,s,c){c&&'timing'===c.type&&c.toValue===t&&c.startTime?(n.startTime=c.startTime,n.startValue=c.startValue):(n.startTime=s,n.startValue=u),n.current=u,'object'==typeof o.easing?n.easing=o.easing.factory():n.easing=o.easing},progress:0,toValue:t,startValue:0,startTime:0,easing:function(){return 0},current:t,callback:u}};return s._closure={Easing:r(d[1]).Easing,userConfig:n,toValue:t,callback:u},s.__initData=o,s.__workletHash=0xdc9d113f088,s})())})._closure={defineAnimation:r(d[0]).defineAnimation,Easing:r(d[1]).Easing},t.__initData=n,t.__workletHash=1964146280678,t)}),585,[575,586]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.Easing=void 0;var t,n={code:"function linear(t){return t;}"},o=((t=function(t){return t})._closure={},t.__initData=n,t.__workletHash=7988822508142,t),u={code:"function ease(t){const{Bezier}=this._closure;return Bezier(0.42,0,1,1)(t);}"},c=(function(){var t=function(t){return(0,r(d[0]).Bezier)(.42,0,1,1)(t)};return t._closure={Bezier:r(d[0]).Bezier},t.__initData=u,t.__workletHash=0xc0a3abc3b06,t})(),s={code:"function quad(t){return t*t;}"},_=(function(){var t=function(t){return t*t};return t._closure={},t.__initData=s,t.__workletHash=8628631460172,t})(),f={code:"function cubic(t){return t*t*t;}"},l=(function(){var t=function(t){return t*t*t};return t._closure={},t.__initData=f,t.__workletHash=9374441307661,t})(),h={code:"function poly(n){return function(t){'worklet';return Math.pow(t,n);};}"},v={code:"function anonymous(t){const{n}=this._closure;return Math.pow(t,n);}"},w=(function(){var t=function(t){return(function(){var n=function(n){return Math.pow(n,t)};return n._closure={n:t},n.__initData=v,n.__workletHash=552879101080,n})()};return t._closure={},t.__initData=h,t.__workletHash=0xf0e21d4d631,t})(),M={code:"function sin(t){return 1-Math.cos(t*Math.PI/2);}"},k=(function(){var t=function(t){return 1-Math.cos(t*Math.PI/2)};return t._closure={},t.__initData=M,t.__workletHash=8621899987563,t})(),x={code:"function circle(t){return 1-Math.sqrt(1-t*t);}"},y=(function(){var t=function(t){return 1-Math.sqrt(1-t*t)};return t._closure={},t.__initData=x,t.__workletHash=0xe74766c81e4,t})(),p={code:"function exp(t){return Math.pow(2,10*(t-1));}"},D=(function(){var t=function(t){return Math.pow(2,10*(t-1))};return t._closure={},t.__initData=p,t.__workletHash=0xe77bf377b41,t})(),H={code:"function elastic(bounciness=1){const p=bounciness*Math.PI;return function(t){'worklet';return 1-Math.pow(Math.cos(t*Math.PI/2),3)*Math.cos(t*p);};}"},z={code:"function anonymous(t){const{p}=this._closure;return 1-Math.pow(Math.cos(t*Math.PI/2),3)*Math.cos(t*p);}"},b=(function(){var t=function(){var t=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:1)*Math.PI;return(function(){var n=function(n){return 1-Math.pow(Math.cos(n*Math.PI/2),3)*Math.cos(n*t)};return n._closure={p:t},n.__initData=z,n.__workletHash=9090994275123,n})()};return t._closure={},t.__initData=H,t.__workletHash=0xe75c59c1497,t})(),B={code:"function back(s=1.70158){return function(t){'worklet';return t*t*((s+1)*t-s);};}"},P={code:"function anonymous(t){const{s}=this._closure;return t*t*((s+1)*t-s);}"},I=(function(){var t=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1.70158;return(function(){var n=function(n){return n*n*((t+1)*n-t)};return n._closure={s:t},n.__initData=P,n.__workletHash=2488389043917,n})()};return t._closure={},t.__initData=B,t.__workletHash=2360128598492,t})(),N={code:"function bounce(t){if(t<1/2.75){return 7.5625*t*t;}if(t<2/2.75){const t2=t-1.5/2.75;return 7.5625*t2*t2+0.75;}if(t<2.5/2.75){const t2=t-2.25/2.75;return 7.5625*t2*t2+0.9375;}const t2=t-2.625/2.75;return 7.5625*t2*t2+0.984375;}"},S=(function(){var t=function(t){if(t<.36363636363636365)return 7.5625*t*t;if(t<.7272727272727273){var n=t-.5454545454545454;return 7.5625*n*n+.75}if(t<.9090909090909091){var o=t-.8181818181818182;return 7.5625*o*o+.9375}var u=t-.9545454545454546;return 7.5625*u*u+.984375};return t._closure={},t.__initData=N,t.__workletHash=5721637210615,t})(),T={code:"function bezier(x1,y1,x2,y2){const{Bezier}=this._closure;return{factory:function(){'worklet';return Bezier(x1,y1,x2,y2);}};}"},q={code:"function anonymous(){const{Bezier,x1,y1,x2,y2}=this._closure;return Bezier(x1,y1,x2,y2);}"},O=(function(){var t=function(t,n,o,u){return{factory:(function(){var c=function(){return(0,r(d[0]).Bezier)(t,n,o,u)};return c._closure={Bezier:r(d[0]).Bezier,x1:t,y1:n,x2:o,y2:u},c.__initData=q,c.__workletHash=6908699643342,c})()}};return t._closure={Bezier:r(d[0]).Bezier},t.__initData=T,t.__workletHash=3643593347689,t})(),E={code:"function bezierFn(x1,y1,x2,y2){const{Bezier}=this._closure;return Bezier(x1,y1,x2,y2);}"},F=(function(){var t=function(t,n,o,u){return(0,r(d[0]).Bezier)(t,n,o,u)};return t._closure={Bezier:r(d[0]).Bezier},t.__initData=E,t.__workletHash=5751555706042,t})(),j={code:"function in_(easing){return easing;}"},A=(function(){var t=function(t){return t};return t._closure={},t.__initData=j,t.__workletHash=1837493474379,t})(),C={code:"function out(easing){return function(t){'worklet';return 1-easing(1-t);};}"},G={code:"function anonymous(t){const{easing}=this._closure;return 1-easing(1-t);}"},J=(function(){var t=function(t){return(function(){var n=function(n){return 1-t(1-n)};return n._closure={easing:t},n.__initData=G,n.__workletHash=0xe33f9b2f182,n})()};return t._closure={},t.__initData=C,t.__workletHash=7718549646703,t})(),K={code:"function inOut(easing){return function(t){'worklet';if(t<0.5){return easing(t*2)/2;}return 1-easing((1-t)*2)/2;};}"},L={code:"function anonymous(t){const{easing}=this._closure;if(t<0.5){return easing(t*2)/2;}return 1-easing((1-t)*2)/2;}"},Q=(function(){var t=function(t){return(function(){var n=function(n){return n<.5?t(2*n)/2:1-t(2*(1-n))/2};return n._closure={easing:t},n.__initData=L,n.__workletHash=0xb851addd19b,n})()};return t._closure={},t.__initData=K,t.__workletHash=7048715165105,t})(),R={code:"function steps(n=10,roundToNextStep=true){return function(t){'worklet';const value=Math.min(Math.max(t,0),1)*n;if(roundToNextStep){return Math.ceil(value)/n;}return Math.floor(value)/n;};}"},U={code:"function anonymous(t){const{n,roundToNextStep}=this._closure;const value=Math.min(Math.max(t,0),1)*n;if(roundToNextStep){return Math.ceil(value)/n;}return Math.floor(value)/n;}"},V=(function(){var t=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:10,n=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];return(function(){var o=function(o){var u=Math.min(Math.max(o,0),1)*t;return n?Math.ceil(u)/t:Math.floor(u)/t};return o._closure={n:t,roundToNextStep:n},o.__initData=U,o.__workletHash=2372327886480,o})()};return t._closure={},t.__initData=R,t.__workletHash=0xca3f9764e25,t})(),W={linear:o,ease:c,quad:_,cubic:l,poly:w,sin:k,circle:y,exp:D,elastic:b,back:I,bounce:S,bezier:O,bezierFn:F,steps:V,in:A,out:J,inOut:Q};e.Easing=W}),586,[587]); +__d((function(g,r,_i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.Bezier=void 0;var t,n={code:"function Bezier(mX1,mY1,mX2,mY2){const NEWTON_ITERATIONS=4;const NEWTON_MIN_SLOPE=0.001;const SUBDIVISION_PRECISION=0.0000001;const SUBDIVISION_MAX_ITERATIONS=10;const kSplineTableSize=11;const kSampleStepSize=1.0/(kSplineTableSize-1.0);function A(aA1,aA2){'worklet';return 1.0-3.0*aA2+3.0*aA1;}function B(aA1,aA2){'worklet';return 3.0*aA2-6.0*aA1;}function C(aA1){'worklet';return 3.0*aA1;}function calcBezier(aT,aA1,aA2){'worklet';return((A(aA1,aA2)*aT+B(aA1,aA2))*aT+C(aA1))*aT;}function getSlope(aT,aA1,aA2){'worklet';return 3.0*A(aA1,aA2)*aT*aT+2.0*B(aA1,aA2)*aT+C(aA1);}function binarySubdivide(aX,aA,aB,mX1,mX2){'worklet';let currentX;let currentT;let i=0;do{currentT=aA+(aB-aA)/2.0;currentX=calcBezier(currentT,mX1,mX2)-aX;if(currentX>0.0){aB=currentT;}else{aA=currentT;}}while(Math.abs(currentX)>SUBDIVISION_PRECISION&&++i=0&&mX1<=1&&mX2>=0&&mX2<=1)){throw new Error('bezier x values must be in [0, 1] range');}if(mX1===mY1&&mX2===mY2){return LinearEasing;}const sampleValues=new Array(kSplineTableSize);for(let i=0;i=NEWTON_MIN_SLOPE){return newtonRaphsonIterate(aX,guessForT,mX1,mX2);}else if(initialSlope===0.0){return guessForT;}else{return binarySubdivide(aX,intervalStart,intervalStart+kSampleStepSize,mX1,mX2);}}return function BezierEasing(x){'worklet';if(mX1===mY1&&mX2===mY2){return x;}if(x===0){return 0;}if(x===1){return 1;}return calcBezier(getTForX(x),mY1,mY2);};}"},i={code:"function A(aA1,aA2){return 1.0-3.0*aA2+3.0*aA1;}"},u={code:"function B(aA1,aA2){return 3.0*aA2-6.0*aA1;}"},l={code:"function C(aA1){return 3.0*aA1;}"},o={code:"function calcBezier(aT,aA1,aA2){const{A,B,C}=this._closure;return((A(aA1,aA2)*aT+B(aA1,aA2))*aT+C(aA1))*aT;}"},c={code:"function getSlope(aT,aA1,aA2){const{A,B,C}=this._closure;return 3.0*A(aA1,aA2)*aT*aT+2.0*B(aA1,aA2)*aT+C(aA1);}"},s={code:"function binarySubdivide(aX,aA,aB,mX1,mX2){const{calcBezier,SUBDIVISION_PRECISION,SUBDIVISION_MAX_ITERATIONS}=this._closure;let currentX;let currentT;let i=0;do{currentT=aA+(aB-aA)/2.0;currentX=calcBezier(currentT,mX1,mX2)-aX;if(currentX>0.0){aB=currentT;}else{aA=currentT;}}while(Math.abs(currentX)>SUBDIVISION_PRECISION&&++i=NEWTON_MIN_SLOPE){return newtonRaphsonIterate(aX,guessForT,mX1,mX2);}else if(initialSlope===0.0){return guessForT;}else{return binarySubdivide(aX,intervalStart,intervalStart+kSampleStepSize,mX1,mX2);}}"},T={code:"function BezierEasing(x){const{mX1,mY1,mX2,mY2,calcBezier,getTForX}=this._closure;if(mX1===mY1&&mX2===mY2){return x;}if(x===0){return 0;}if(x===1){return 1;}return calcBezier(getTForX(x),mY1,mY2);}"};e.Bezier=((t=function(t,n,p,A){var f=.1,I=(function(){var t=function(t,n){return 1-3*n+3*t};return t._closure={},t.__initData=i,t.__workletHash=7696928702327,t})(),N=(function(){var t=function(t,n){return 3*n-6*t};return t._closure={},t.__initData=u,t.__workletHash=3169786778773,t})(),B=(function(){var t=function(t){return 3*t};return t._closure={},t.__initData=l,t.__workletHash=6399610653367,t})(),O=(function(){var t=function(t,n,i){return((I(n,i)*t+N(n,i))*t+B(n))*t};return t._closure={A:I,B:N,C:B},t.__initData=o,t.__workletHash=4099476341799,t})(),z=(function(){var t=function(t,n,i){return 3*I(n,i)*t*t+2*N(n,i)*t+B(n)};return t._closure={A:I,B:N,C:B},t.__initData=c,t.__workletHash=0xfb7461b675b,t})(),k=(function(){var t=function(t,n,i,u,l){var o,c,s=0;do{(o=O(c=n+(i-n)/2,u,l)-t)>0?i=c:n=c}while(Math.abs(o)>1e-7&&++s<10);return c};return t._closure={calcBezier:O,SUBDIVISION_PRECISION:1e-7,SUBDIVISION_MAX_ITERATIONS:10},t.__initData=s,t.__workletHash=0xb842758220c,t})(),v=(function(){var t=function(t,n,i,u){for(var l=0;l<4;++l){var o=z(n,i,u);if(0===o)return n;n-=(O(n,i,u)-t)/o}return n};return t._closure={NEWTON_ITERATIONS:4,getSlope:z,calcBezier:O},t.__initData=S,t.__workletHash=0x965372662a3,t})(),E=(function(){var t=function(t){return t};return t._closure={},t.__initData=X,t.__workletHash=3962143445177,t})();if(!(t>=0&&t<=1&&p>=0&&p<=1))throw new Error('bezier x values must be in [0, 1] range');if(t===n&&p===A)return E;for(var w=new Array(11),b=0;b<11;++b)w[b]=O(b*f,t,p);var h=(function(){var n=function(n){for(var i=0,u=1;10!==u&&w[u]<=n;++u)i+=f;--u;var l=i+(n-w[u])/(w[u+1]-w[u])*f,o=z(l,t,p);return o>=.001?v(n,l,t,p):0===o?l:k(n,i,i+f,t,p)};return n._closure={kSplineTableSize:11,sampleValues:w,kSampleStepSize:f,getSlope:z,mX1:t,mX2:p,NEWTON_MIN_SLOPE:.001,newtonRaphsonIterate:v,binarySubdivide:k},n.__initData=_,n.__workletHash=0xaa9742d633f,n})();return(function(){var i=function(i){return t===n&&p===A?i:0===i?0:1===i?1:O(h(i),n,A)};return i._closure={mX1:t,mY1:n,mX2:p,mY2:A,calcBezier:O,getTForX:h},i.__initData=T,i.__workletHash=4381648763690,i})()})._closure={},t.__initData=n,t.__workletHash=7389715548968,t)}),587,[]); +__d((function(g,r,i,a,m,_e,d){Object.defineProperty(_e,"__esModule",{value:!0}),_e.ComplexAnimationBuilder=void 0;var e=r(d[0])(r(d[1])),t=r(d[0])(r(d[2])),n=r(d[0])(r(d[3])),s=r(d[0])(r(d[4])),u=r(d[0])(r(d[5]));function o(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(o=function(){return!!e})()}_e.ComplexAnimationBuilder=(function(l){function h(){return(0,e.default)(this,h),t=this,u=h,l=arguments,u=(0,s.default)(u),(0,n.default)(t,o()?Reflect.construct(u,l||[],(0,s.default)(t).constructor):u.apply(t,l));var t,u,l}return(0,u.default)(h,l),(0,t.default)(h,[{key:"easing",value:function(e){return this.easingV=e,this}},{key:"rotate",value:function(e){return this.rotateV=e,this}},{key:"springify",value:function(e){return this.durationV=e,this.type=r(d[6]).withSpring,this}},{key:"dampingRatio",value:function(e){return this.dampingRatioV=e,this}},{key:"damping",value:function(e){return this.dampingV=e,this}},{key:"mass",value:function(e){return this.massV=e,this}},{key:"stiffness",value:function(e){return this.stiffnessV=e,this}},{key:"overshootClamping",value:function(e){return this.overshootClampingV=e,this}},{key:"restDisplacementThreshold",value:function(e){return this.restDisplacementThresholdV=e,this}},{key:"restSpeedThreshold",value:function(e){return this.restSpeedThresholdV=e,this}},{key:"withInitialValues",value:function(e){return this.initialValues=e,this}},{key:"getAnimationAndConfig",value:function(){var e=this.durationV,t=this.easingV,n=this.rotateV,s=this.type?this.type:r(d[6]).withTiming,u=this.dampingV,o=this.dampingRatioV,l=this.massV,h=this.stiffnessV,c=this.overshootClampingV,f=this.restDisplacementThresholdV,v=this.restSpeedThresholdV,p=s,y={};function V(e,t){e&&(y[t]=e)}return s===r(d[6]).withTiming&&V(t,'easing'),[{variableName:'damping',value:u},{variableName:'dampingRatio',value:o},{variableName:'mass',value:l},{variableName:'stiffness',value:h},{variableName:'overshootClamping',value:c},{variableName:'restDisplacementThreshold',value:f},{variableName:'restSpeedThreshold',value:v},{variableName:'duration',value:e},{variableName:'rotate',value:n}].forEach((function(e){return V(e.value,e.variableName)})),[p,y]}}],[{key:"easing",value:function(e){return this.createInstance().easing(e)}},{key:"rotate",value:function(e){return this.createInstance().rotate(e)}},{key:"springify",value:function(e){return this.createInstance().springify(e)}},{key:"dampingRatio",value:function(e){return this.createInstance().dampingRatio(e)}},{key:"damping",value:function(e){return this.createInstance().damping(e)}},{key:"mass",value:function(e){return this.createInstance().mass(e)}},{key:"stiffness",value:function(e){return this.createInstance().stiffness(e)}},{key:"overshootClamping",value:function(e){return this.createInstance().overshootClamping(e)}},{key:"restDisplacementThreshold",value:function(e){return this.createInstance().restDisplacementThreshold(e)}},{key:"restSpeedThreshold",value:function(e){return this.createInstance().restSpeedThreshold(e)}},{key:"withInitialValues",value:function(e){return this.createInstance().withInitialValues(e)}}])})(r(d[7]).BaseAnimationBuilder)}),588,[8,17,18,3,2,56,573,572]); +__d((function(g,r,i,_a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.Keyframe=void 0;var n=r(d[0])(r(d[1])),t=r(d[0])(r(d[2])),a=r(d[0])(r(d[3])),o={code:"function anonymous(){const{keyframes,delayFunction,delay,withTiming,Easing,withSequence,_this,initialValues,callback}=this._closure;const animations={};const addAnimation=function(key){const keyframePoints=keyframes[key];if(keyframePoints.length===0)return;const animation=delayFunction(delay,keyframePoints.length===1?withTiming(keyframePoints[0].value,{duration:keyframePoints[0].duration,easing:keyframePoints[0].easing?keyframePoints[0].easing:Easing.linear}):withSequence.apply(_this,keyframePoints.map(function(keyframePoint){return withTiming(keyframePoint.value,{duration:keyframePoint.duration,easing:keyframePoint.easing?keyframePoint.easing:Easing.linear});})));if(key.includes('transform')){var _animations$transform;if(!('transform'in animations)){animations.transform=[];}(_animations$transform=animations.transform)===null||_animations$transform===void 0?void 0:_animations$transform.push({[key.split(':')[1]]:animation});}else{animations[key]=animation;}};Object.keys(initialValues).forEach(function(key){if(key.includes('transform')){initialValues[key].forEach(function(transformProp,index){Object.keys(transformProp).forEach(function(transformPropKey){addAnimation(index.toString()+'_transform:'+transformPropKey);});});}else{addAnimation(key);}});return{animations:animations,initialValues:initialValues,callback:callback};}"},s={code:"function anonymous(_,animation){return animation;}"},f=(0,a.default)((function a(s){var f=this;(0,t.default)(this,a),this.build=function(){var t,a=f.delayV,s=f.getDelayFunction(),u=f.parseDefinitions(),l=u.keyframes,c=u.initialValues,h=f.callbackV;return(t=function(){var t={},o=function(o){var u=l[o];if(0!==u.length){var c,h=s(a,1===u.length?(0,r(d[4]).withTiming)(u[0].value,{duration:u[0].duration,easing:u[0].easing?u[0].easing:r(d[5]).Easing.linear}):r(d[4]).withSequence.apply(f,u.map((function(n){return(0,r(d[4]).withTiming)(n.value,{duration:n.duration,easing:n.easing?n.easing:r(d[5]).Easing.linear})}))));o.includes('transform')?('transform'in t||(t.transform=[]),null==(c=t.transform)||c.push((0,n.default)({},o.split(':')[1],h))):t[o]=h}};return Object.keys(c).forEach((function(n){n.includes('transform')?c[n].forEach((function(n,t){Object.keys(n).forEach((function(n){o(t.toString()+'_transform:'+n)}))})):o(n)})),{animations:t,initialValues:c,callback:h}})._closure={keyframes:l,delayFunction:s,delay:a,withTiming:r(d[4]).withTiming,Easing:r(d[5]).Easing,withSequence:r(d[4]).withSequence,_this:f,initialValues:c,callback:h},t.__initData=o,t.__workletHash=356181528987,t},this.definitions=s}),[{key:"parseDefinitions",value:function(){var n=this,t={};if(this.definitions.from){if(this.definitions[0])throw Error("You cannot provide both keyframe 0 and 'from' as they both specified initial values");this.definitions[0]=this.definitions.from,delete this.definitions.from}if(this.definitions.to){if(this.definitions[100])throw Error("You cannot provide both keyframe 100 and 'to' as they both specified values at the end of the animation.");this.definitions[100]=this.definitions.to,delete this.definitions.to}if(!this.definitions[0])throw Error("Please provide 0, or 'from' keyframe with initial state of your object.");var a=this.definitions[0];Object.keys(a).forEach((function(n){var o;'transform'===n?null==(o=a[n])||o.forEach((function(n,a){Object.keys(n).forEach((function(n){t[a.toString()+'_transform:'+n]=[]}))})):t[n]=[]}));var o=this.durationV?this.durationV:500,s=Array.from(Object.keys(this.definitions)),f=function(n,a){return a/100*o-t[n].reduce((function(n,t){return n+t.duration}),0)},u=function(n){var a=n.key,o=n.value,s=n.currentKeyPoint,u=n.easing;if(!(a in t))throw Error("Keyframe can contain only that set of properties that were provide with initial values (keyframe 0 or 'from')");t[a].push({duration:f(a,s),value:o,easing:u})};return s.filter((function(n){return 0!==parseInt(n)})).sort((function(n,t){return parseInt(n)-parseInt(t)})).forEach((function(t){if(parseInt(t)<0||parseInt(t)>100)throw Error('Keyframe should be in between range 0 - 100.');var a=n.definitions[t],o=a.easing;delete a.easing;var s=function(n,a){return u({key:n,value:a,currentKeyPoint:parseInt(t),easing:o})};Object.keys(a).forEach((function(n){var t;'transform'===n?null==(t=a[n])||t.forEach((function(n,t){Object.keys(n).forEach((function(a){s(t.toString()+'_transform:'+a,n[a])}))})):s(n,a[n])}))})),{initialValues:a,keyframes:t}}},{key:"duration",value:function(n){return this.durationV=n,this}},{key:"delay",value:function(n){return this.delayV=n,this}},{key:"withCallback",value:function(n){return this.callbackV=n,this}},{key:"getDelayFunction",value:function(){var n;return this.delayV?r(d[4]).withDelay:((n=function(n,t){return t})._closure={},n.__initData=s,n.__workletHash=0xf33f9d89e73,n)}}]);e.Keyframe=f}),589,[8,170,17,18,573,586]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.SharedTransitionType=e.LayoutAnimationType=void 0;e.LayoutAnimationType=(function(T){return T[T.ENTERING=1]="ENTERING",T[T.EXITING=2]="EXITING",T[T.LAYOUT=3]="LAYOUT",T[T.SHARED_ELEMENT_TRANSITION=4]="SHARED_ELEMENT_TRANSITION",T[T.SHARED_ELEMENT_TRANSITION_PROGRESS=5]="SHARED_ELEMENT_TRANSITION_PROGRESS",T})({}),e.SharedTransitionType=(function(T){return T.ANIMATION="animation",T.PROGRESS_ANIMATION="progressAnimation",T})({})}),590,[]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),r(d[0]),Object.keys(r(d[1])).forEach((function(n){"default"!==n&&"__esModule"!==n&&(n in e&&e[n]===r(d[1])[n]||Object.defineProperty(e,n,{enumerable:!0,get:function(){return r(d[1])[n]}}))})),Object.keys(r(d[2])).forEach((function(n){"default"!==n&&"__esModule"!==n&&(n in e&&e[n]===r(d[2])[n]||Object.defineProperty(e,n,{enumerable:!0,get:function(){return r(d[2])[n]}}))})),Object.keys(r(d[3])).forEach((function(n){"default"!==n&&"__esModule"!==n&&(n in e&&e[n]===r(d[3])[n]||Object.defineProperty(e,n,{enumerable:!0,get:function(){return r(d[3])[n]}}))})),Object.keys(r(d[4])).forEach((function(n){"default"!==n&&"__esModule"!==n&&(n in e&&e[n]===r(d[4])[n]||Object.defineProperty(e,n,{enumerable:!0,get:function(){return r(d[4])[n]}}))})),Object.keys(r(d[5])).forEach((function(n){"default"!==n&&"__esModule"!==n&&(n in e&&e[n]===r(d[5])[n]||Object.defineProperty(e,n,{enumerable:!0,get:function(){return r(d[5])[n]}}))})),Object.keys(r(d[6])).forEach((function(n){"default"!==n&&"__esModule"!==n&&(n in e&&e[n]===r(d[6])[n]||Object.defineProperty(e,n,{enumerable:!0,get:function(){return r(d[6])[n]}}))})),Object.keys(r(d[7])).forEach((function(n){"default"!==n&&"__esModule"!==n&&(n in e&&e[n]===r(d[7])[n]||Object.defineProperty(e,n,{enumerable:!0,get:function(){return r(d[7])[n]}}))})),Object.keys(r(d[8])).forEach((function(n){"default"!==n&&"__esModule"!==n&&(n in e&&e[n]===r(d[8])[n]||Object.defineProperty(e,n,{enumerable:!0,get:function(){return r(d[8])[n]}}))})),Object.keys(r(d[9])).forEach((function(n){"default"!==n&&"__esModule"!==n&&(n in e&&e[n]===r(d[9])[n]||Object.defineProperty(e,n,{enumerable:!0,get:function(){return r(d[9])[n]}}))})),Object.keys(r(d[10])).forEach((function(n){"default"!==n&&"__esModule"!==n&&(n in e&&e[n]===r(d[10])[n]||Object.defineProperty(e,n,{enumerable:!0,get:function(){return r(d[10])[n]}}))})),Object.keys(r(d[11])).forEach((function(n){"default"!==n&&"__esModule"!==n&&(n in e&&e[n]===r(d[11])[n]||Object.defineProperty(e,n,{enumerable:!0,get:function(){return r(d[11])[n]}}))})),Object.keys(r(d[12])).forEach((function(n){"default"!==n&&"__esModule"!==n&&(n in e&&e[n]===r(d[12])[n]||Object.defineProperty(e,n,{enumerable:!0,get:function(){return r(d[12])[n]}}))})),Object.keys(r(d[13])).forEach((function(n){"default"!==n&&"__esModule"!==n&&(n in e&&e[n]===r(d[13])[n]||Object.defineProperty(e,n,{enumerable:!0,get:function(){return r(d[13])[n]}}))})),Object.keys(r(d[14])).forEach((function(n){"default"!==n&&"__esModule"!==n&&(n in e&&e[n]===r(d[14])[n]||Object.defineProperty(e,n,{enumerable:!0,get:function(){return r(d[14])[n]}}))})),Object.keys(r(d[15])).forEach((function(n){"default"!==n&&"__esModule"!==n&&(n in e&&e[n]===r(d[15])[n]||Object.defineProperty(e,n,{enumerable:!0,get:function(){return r(d[15])[n]}}))}))}),591,[592,557,593,573,612,613,586,564,577,614,616,563,553,638,639,640]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0})}),592,[]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"useAnimatedGestureHandler",{enumerable:!0,get:function(){return r(d[0]).useAnimatedGestureHandler}}),Object.defineProperty(e,"useAnimatedKeyboard",{enumerable:!0,get:function(){return r(d[1]).useAnimatedKeyboard}}),Object.defineProperty(e,"useAnimatedProps",{enumerable:!0,get:function(){return r(d[2]).useAnimatedProps}}),Object.defineProperty(e,"useAnimatedReaction",{enumerable:!0,get:function(){return r(d[3]).useAnimatedReaction}}),Object.defineProperty(e,"useAnimatedRef",{enumerable:!0,get:function(){return r(d[4]).useAnimatedRef}}),Object.defineProperty(e,"useAnimatedScrollHandler",{enumerable:!0,get:function(){return r(d[5]).useAnimatedScrollHandler}}),Object.defineProperty(e,"useAnimatedSensor",{enumerable:!0,get:function(){return r(d[6]).useAnimatedSensor}}),Object.defineProperty(e,"useAnimatedStyle",{enumerable:!0,get:function(){return r(d[7]).useAnimatedStyle}}),Object.defineProperty(e,"useDerivedValue",{enumerable:!0,get:function(){return r(d[8]).useDerivedValue}}),Object.defineProperty(e,"useEvent",{enumerable:!0,get:function(){return r(d[2]).useEvent}}),Object.defineProperty(e,"useFrameCallback",{enumerable:!0,get:function(){return r(d[9]).useFrameCallback}}),Object.defineProperty(e,"useHandler",{enumerable:!0,get:function(){return r(d[2]).useHandler}}),Object.defineProperty(e,"useReducedMotion",{enumerable:!0,get:function(){return r(d[10]).useReducedMotion}}),Object.defineProperty(e,"useScrollViewOffset",{enumerable:!0,get:function(){return r(d[11]).useScrollViewOffset}}),Object.defineProperty(e,"useSharedValue",{enumerable:!0,get:function(){return r(d[12]).useSharedValue}}),Object.defineProperty(e,"useWorkletCallback",{enumerable:!0,get:function(){return r(d[2]).useWorkletCallback}})}),593,[594,600,595,601,602,604,605,597,606,607,610,611,599]); +__d((function(g,r,i,a,m,_e,d){Object.defineProperty(_e,"__esModule",{value:!0}),_e.useAnimatedGestureHandler=function(n,E){var o=(0,r(d[0]).useHandler)(n,E),s=o.context,v=o.doDependenciesDiffer,l=o.useWeb,A=(c=function(t){var E=l?t.nativeEvent:t;E.state===e.BEGAN&&n.onStart&&n.onStart(E,s),E.state===e.ACTIVE&&n.onActive&&n.onActive(E,s),E.oldState===e.ACTIVE&&E.state===e.END&&n.onEnd&&n.onEnd(E,s),E.oldState===e.BEGAN&&E.state===e.FAILED&&n.onFail&&n.onFail(E,s),E.oldState===e.ACTIVE&&E.state===e.CANCELLED&&n.onCancel&&n.onCancel(E,s),E.oldState!==e.BEGAN&&E.oldState!==e.ACTIVE||E.state===e.BEGAN||E.state===e.ACTIVE||!n.onFinish||n.onFinish(E,s,E.state===e.CANCELLED||E.state===e.FAILED)},c._closure={useWeb:l,EventType:e,handlers:n,context:s},c.__initData=t,c.__workletHash=4138724704923,c);var c;if(l)return A;return(0,r(d[0]).useEvent)(A,['onGestureHandlerStateChange','onGestureHandlerEvent'],v)};var e={UNDETERMINED:0,FAILED:1,BEGAN:2,CANCELLED:3,ACTIVE:4,END:5},t={code:"function anonymous(e){const{useWeb,EventType,handlers,context}=this._closure;const event=useWeb?e.nativeEvent:e;if(event.state===EventType.BEGAN&&handlers.onStart){handlers.onStart(event,context);}if(event.state===EventType.ACTIVE&&handlers.onActive){handlers.onActive(event,context);}if(event.oldState===EventType.ACTIVE&&event.state===EventType.END&&handlers.onEnd){handlers.onEnd(event,context);}if(event.oldState===EventType.BEGAN&&event.state===EventType.FAILED&&handlers.onFail){handlers.onFail(event,context);}if(event.oldState===EventType.ACTIVE&&event.state===EventType.CANCELLED&&handlers.onCancel){handlers.onCancel(event,context);}if((event.oldState===EventType.BEGAN||event.oldState===EventType.ACTIVE)&&event.state!==EventType.BEGAN&&event.state!==EventType.ACTIVE&&handlers.onFinish){handlers.onFinish(event,context,event.state===EventType.CANCELLED||event.state===EventType.FAILED);}}"}}),594,[595]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.useAnimatedProps=void 0,Object.defineProperty(e,"useEvent",{enumerable:!0,get:function(){return r(d[0]).useEvent}}),Object.defineProperty(e,"useHandler",{enumerable:!0,get:function(){return r(d[0]).useHandler}}),e.useWorkletCallback=function(t,u){return(0,n.useCallback)(t,null!=u?u:[])};var n=r(d[1]);e.useAnimatedProps=r(d[2]).useAnimatedStyle}),595,[596,153,597]); +__d((function(g,r,_i,_a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.buildWorkletsHash=o,e.validateAnimatedStyles=e.useHandler=e.useEvent=e.shallowEqual=e.isAnimated=void 0;var t=r(d[0]),n=r(d[1])(r(d[2]));e.useEvent=function(o){var s=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],a=arguments.length>2&&void 0!==arguments[2]&&arguments[2],u=(0,t.useRef)(null);return null===u.current?u.current=new n.default(o,s):a&&u.current.updateWorklet(o),u},e.useHandler=function(n,o){var u=(0,t.useRef)(null);null===u.current&&(u.current={context:(0,r(d[3]).makeRemote)({}),savedDependencies:[]}),(0,t.useEffect)((function(){return function(){u.current=null}}),[]);var i=u.current,c=i.context,l=i.savedDependencies,f=!a(o=s(o,n),l);return u.current.savedDependencies=o,{context:c,doDependenciesDiffer:f,useWeb:(0,r(d[4]).isWeb)()||(0,r(d[4]).isJest)()}};function o(t){return Object.values(t).reduce((function(t,n){return t+n.__workletHash.toString()}),'')}function s(t,n){var s=Object.values(n).filter((function(t){return void 0!==t}));return t?t.push(o(s)):t=s.map((function(t){return{workletHash:t.__workletHash,closure:t._closure}})),t}function a(t,n){var o='function'==typeof Object.is?Object.is:function(t,n){return t===n&&(0!==t||1/t==1/n)||t!=t&&n!=n};return(function(t,n){if(!t||!n||n.length!==t.length)return!1;for(var s=0;s6&&void 0!==arguments[6]?arguments[6]:[],v=null!=(c=i.animations)?c:{},y=null!=(f=t())?f:{},h=i.last,w=!1;Object.keys(v).forEach((function(e){var t=y[e];(0,_r(d[5]).isAnimated)(t)||delete v[e]})),Object.keys(y).forEach((function(e){var t=y[e];(0,_r(d[5]).isAnimated)(t)&&(p=g.__frameTimestamp||performance.now(),o(p,t,v[e],h[e]),v[e]=t,w=!0)})),w?(i.animations=v,i.isAnimationRunning||(i.isAnimationCancelled=!1,i.isAnimationRunning=!0,(function t(o){var c=i.animations,f=i.last;if(i.isAnimationCancelled)i.isAnimationRunning=!1;else{var p={},v=!0;Object.keys(c).forEach((function(e){u(c[e],o,e,p,r)?(f[e]=p[e],delete c[e]):v=!1})),Object.keys(p).length&&(0,n.updatePropsJestWrapper)(e,p,s,l,A),v?i.isAnimationRunning=!1:requestAnimationFrame(t)}})(p))):(i.isAnimationCancelled=!0,i.animations=[]),i.last=y,(0,_r(d[5]).shallowEqual)(h,y)||(0,n.updatePropsJestWrapper)(e,y,s,l,A)};return e._closure={isAnimated:_r(d[5]).isAnimated,prepareAnimation:o,runAnimations:u,updatePropsJestWrapper:n.updatePropsJestWrapper,shallowEqual:_r(d[5]).shallowEqual},e.__initData=p,e.__workletHash=0x94fe5eeca63,e})();function v(e,t){if(Array.isArray(e))for(var n of e)v(n,t);else if('object'==typeof e&&null!==e&&void 0===e.value)for(var i of Object.keys(e))v(e[i],i);else if(void 0!==t&&'object'==typeof e&&null!==e&&void 0!==e.value)throw new Error(`invalid value passed to \`${t}\`, maybe you forgot to use \`.value\`?`)}var y={code:"function anonymous(){const{updater,adaptersArray}=this._closure;const newValues=updater();adaptersArray.forEach(function(adapter){adapter(newValues);});return newValues;}"},h={code:"function anonymous(){const{jestStyleUpdater,sharableViewDescriptors,updater,remoteState,maybeViewRef,animationsActive,animatedStyle,adaptersArray}=this._closure;jestStyleUpdater(sharableViewDescriptors,updater,remoteState,maybeViewRef,animationsActive,animatedStyle,adaptersArray);}"},w={code:"function anonymous(){const{styleUpdater,sharableViewDescriptors,updaterFn,remoteState,maybeViewRef,animationsActive}=this._closure;styleUpdater(sharableViewDescriptors,updaterFn,remoteState,maybeViewRef,animationsActive);}"};_e.useAnimatedStyle=function(n,s,r){var o,l,u=(0,_r(d[6]).makeViewsRefSet)(),c=(0,t.useRef)(),p=Object.values(null!=(o=n._closure)?o:{});(0,_r(d[7]).shouldBeUseWeb)()&&(!p.length&&null!=(l=s)&&l.length&&(p=s));var _=r?Array.isArray(r)?r:[r]:[],V=r?(0,_r(d[5]).buildWorkletsHash)(_):null,k=(0,_r(d[8]).useSharedValue)(!0),b=(0,t.useRef)({});if(s?s.push(n.__workletHash):s=[].concat((0,e.default)(p),[n.__workletHash]),V&&s.push(V),!c.current){var S=(0,_r(d[9]).initialUpdaterRun)(n);(0,_r(d[5]).validateAnimatedStyles)(S),c.current={initial:{value:S,updater:n},remoteState:(0,_r(d[10]).makeRemote)({last:S,animations:{},isAnimationCancelled:!1,isAnimationRunning:!1}),viewDescriptors:(0,_r(d[6]).makeViewDescriptorsSet)()}}var R=c.current,j=R.initial,E=R.remoteState,D=R.viewDescriptors,F=D.sharableViewDescriptors,P=i.default.native?void 0:u;return s.push(F),(0,t.useEffect)((function(){var e,t=n;r&&(t=(function(){var e=function(){var e=n();return _.forEach((function(t){t(e)})),e};return e._closure={updater:n,adaptersArray:_},e.__initData=y,e.__workletHash=0xe955b2deaf6,e})()),e=(0,_r(d[7]).isJest)()?(function(){var e=function(){A(F,n,E,P,k,b,_)};return e._closure={jestStyleUpdater:A,sharableViewDescriptors:F,updater:n,remoteState:E,maybeViewRef:P,animationsActive:k,animatedStyle:b,adaptersArray:_},e.__initData=h,e.__workletHash=3018211523588,e})():(function(){var e=function(){f(F,t,E,P,k)};return e._closure={styleUpdater:f,sharableViewDescriptors:F,updaterFn:t,remoteState:E,maybeViewRef:P,animationsActive:k},e.__initData=w,e.__workletHash=687832463812,e})();var i=(0,_r(d[10]).startMapper)(e,p);return function(){(0,_r(d[10]).stopMapper)(i)}}),s),(0,t.useEffect)((function(){return k.value=!0,function(){k.value=!1}}),[]),v(j.value),(0,_r(d[7]).isJest)()?{viewDescriptors:D,initial:j,viewsRef:u,animatedStyle:b}:{viewDescriptors:D,initial:j,viewsRef:u}}}),597,[8,11,153,584,549,596,598,552,599,573,557]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.makeViewDescriptorsSet=function(){var t=(0,r(d[1]).makeMutable)([]);return{sharableViewDescriptors:t,add:function(s){var o;t.modify(((o=function(t){var n=t.findIndex((function(t){return t.tag===s.tag}));return-1!==n?t[n]=s:t.push(s),t})._closure={item:s},o.__initData=n,o.__workletHash=3641493001765,o))},remove:function(n){var o;t.modify(((o=function(t){var s=t.findIndex((function(t){return t.tag===n}));return-1!==s&&t.splice(s,1),t})._closure={viewTag:n},o.__initData=s,o.__workletHash=0xd911adf5843,o))}}},e.makeViewsRefSet=function(){var n=(0,t.useRef)(null);if(null===n.current){var s={items:new Set,add:function(t){s.items.has(t)||s.items.add(t)},remove:function(t){s.items.delete(t)}};n.current=s}return n.current};var t=r(d[0]),n={code:"function anonymous(descriptors){const{item}=this._closure;const index=descriptors.findIndex(function(descriptor){return descriptor.tag===item.tag;});if(index!==-1){descriptors[index]=item;}else{descriptors.push(item);}return descriptors;}"},s={code:"function anonymous(descriptors){const{viewTag}=this._closure;const index=descriptors.findIndex(function(descriptor){return descriptor.tag===viewTag;});if(index!==-1){descriptors.splice(index,1);}return descriptors;}"}}),598,[153,557]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.useSharedValue=function(u){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],c=(0,n.useRef)((0,r(d[1]).makeMutable)(u,t));null===c.current&&(c.current=(0,r(d[1]).makeMutable)(u,t));return(0,n.useEffect)((function(){return function(){(0,r(d[2]).cancelAnimation)(c.current)}}),[]),c.current};var n=r(d[0])}),599,[153,557,573]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.useAnimatedKeyboard=function(){var o=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{isStatusBarTranslucentAndroid:!1},s=(0,t.useRef)(null),c=(0,t.useRef)(-1),v=(0,t.useRef)(!1);if(null===s.current){var l={state:(0,r(d[1]).makeMutable)(r(d[2]).KeyboardState.UNKNOWN),height:(0,r(d[1]).makeMutable)(0)};c.current=(0,r(d[1]).subscribeForKeyboardEvents)(((h=function(t,n){l.state.value=t,l.height.value=n})._closure={keyboardEventData:l},h.__initData=n,h.__workletHash=6504538214951,h),o),s.current=l,v.current=!0}var h;return(0,t.useEffect)((function(){if(!1===v.current&&null!==s.current){var t=s.current;c.current=(0,r(d[1]).subscribeForKeyboardEvents)(((n=function(n,u){t.state.value=n,t.height.value=u})._closure={_keyboardEventData:t},n.__initData=u,n.__workletHash=3503671417656,n),o),v.current=!0}var n;return function(){(0,r(d[1]).unsubscribeFromKeyboardEvents)(c.current),v.current=!1}}),[]),s.current};var t=r(d[0]),n={code:"function anonymous(state,height){const{keyboardEventData}=this._closure;keyboardEventData.state.value=state;keyboardEventData.height.value=height;}"},u={code:"function anonymous(state,height){const{_keyboardEventData}=this._closure;_keyboardEventData.state.value=state;_keyboardEventData.height.value=height;}"}}),600,[153,557,553]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.useAnimatedReaction=function(n,o,s){var c,_,p,v,f=(0,r(d[3]).useSharedValue)(null,!0),h=Object.values(null!=(c=n._closure)?c:{});(0,r(d[4]).shouldBeUseWeb)()&&!h.length&&null!=(_=s)&&_.length&&(h=s);void 0===s?s=[].concat((0,u.default)(Object.values(null!=(p=n._closure)?p:{})),(0,u.default)(Object.values(null!=(v=o._closure)?v:{})),[n.__workletHash,o.__workletHash]):s.push(n.__workletHash,o.__workletHash);(0,t.useEffect)((function(){var u,t=((u=function(){var u=n();o(u,f.value),f.value=u})._closure={prepare:n,react:o,previous:f},u.__initData=l,u.__workletHash=0xff099ad6ca7,u),s=(0,r(d[5]).startMapper)(t,h,[]);return function(){(0,r(d[5]).stopMapper)(s)}}),s)};var u=r(d[0])(r(d[1])),t=r(d[2]),l={code:"function anonymous(){const{prepare,react,previous}=this._closure;const input=prepare();react(input,previous.value);previous.value=input;}"}}),601,[8,11,153,599,552,557]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.useAnimatedRef=function(){var t=(0,r(d[3]).useSharedValue)(-1),c=(0,n.useRef)();if(!c.current){var f=function(n){return n&&(t.value=o(u(n)),f.current=n),t.value};f.current=null;var _=(0,r(d[4]).makeShareableCloneRecursive)({__init:(v=function(){return function(){return t.value}},v._closure={tag:t},v.__initData=l,v.__workletHash=0xd2ffa60bad2,v)});(0,r(d[4]).registerShareableMapping)(f,_),c.current=f}var v;return c.current};var n=r(d[0]),t=r(d[1]);function u(n){return g._IS_FABRIC&&n.getNativeScrollRef?n.getNativeScrollRef():!g._IS_FABRIC&&n.getScrollableNode?n.getScrollableNode():n}var o=g._IS_FABRIC?r(d[2]).getShadowNodeWrapperFromRef:t.findNodeHandle,l={code:"function anonymous(){const{tag}=this._closure;return function(){return tag.value;};}"}}),602,[153,6,603,599,560]); +__d((function(g,r,i,a,m,_e,d){var e;if(Object.defineProperty(_e,"__esModule",{value:!0}),_e.getShadowNodeWrapperFromRef=function(n){return e(n)._internalInstanceHandle.stateNode.node},g._IS_FABRIC)try{e=r(d[0]).findHostInstance_DEPRECATED}catch(e){throw new Error('[Reanimated] Cannot import `findHostInstance_DEPRECATED`.')}}),603,[49]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.useAnimatedScrollHandler=void 0;var n={code:"function anonymous(event){const{scrollHandlers,context}=this._closure;const{onScroll:onScroll,onBeginDrag:onBeginDrag,onEndDrag:onEndDrag,onMomentumBegin:onMomentumBegin,onMomentumEnd:onMomentumEnd}=scrollHandlers;if(onScroll&&event.eventName.endsWith('onScroll')){onScroll(event,context);}else if(onBeginDrag&&event.eventName.endsWith('onScrollBeginDrag')){onBeginDrag(event,context);}else if(onEndDrag&&event.eventName.endsWith('onScrollEndDrag')){onEndDrag(event,context);}else if(onMomentumBegin&&event.eventName.endsWith('onMomentumScrollBegin')){onMomentumBegin(event,context);}else if(onMomentumEnd&&event.eventName.endsWith('onMomentumScrollEnd')){onMomentumEnd(event,context);}}"};e.useAnimatedScrollHandler=function(o,t){var l,c='function'==typeof o?{onScroll:o}:o,s=(0,r(d[0]).useHandler)(c,t),u=s.context,v=s.doDependenciesDiffer,S=['onScroll'];return void 0!==c.onBeginDrag&&S.push('onScrollBeginDrag'),void 0!==c.onEndDrag&&S.push('onScrollEndDrag'),void 0!==c.onMomentumBegin&&S.push('onMomentumScrollBegin'),void 0!==c.onMomentumEnd&&S.push('onMomentumScrollEnd'),(0,r(d[0]).useEvent)(((l=function(n){var o=c.onScroll,t=c.onBeginDrag,l=c.onEndDrag,s=c.onMomentumBegin,v=c.onMomentumEnd;o&&n.eventName.endsWith('onScroll')?o(n,u):t&&n.eventName.endsWith('onScrollBeginDrag')?t(n,u):l&&n.eventName.endsWith('onScrollEndDrag')?l(n,u):s&&n.eventName.endsWith('onMomentumScrollBegin')?s(n,u):v&&n.eventName.endsWith('onMomentumScrollEnd')&&v(n,u)})._closure={scrollHandlers:c,context:u},l.__initData=n,l.__workletHash=0xec0c18e87cb,l),S,v)}}),604,[595]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.useAnimatedSensor=function(t,o){var c=Object.assign({interval:'auto',adjustToInterfaceOrientation:!0,iosReferenceFrame:r(d[1]).IOSReferenceFrame.Auto},o),s=(0,n.useRef)({sensor:(0,r(d[2]).initializeSensor)(t,c),unregister:function(){},isAvailable:!1,config:c});return(0,n.useEffect)((function(){var n=Object.assign({},c,o);s.current.sensor=(0,r(d[2]).initializeSensor)(t,n);var l,h=s.current.sensor,O=s.current.config.adjustToInterfaceOrientation,T=(0,r(d[2]).registerSensor)(t,c,((l=function(n){O&&(n=t===r(d[1]).SensorType.ROTATION?u(n):f(n)),h.value=n,(0,r(d[3]).callMicrotasks)()})._closure={adjustToInterfaceOrientation:O,sensorType:t,SensorType:r(d[1]).SensorType,adjustRotationToInterfaceOrientation:u,adjustVectorToInterfaceOrientation:f,sensorData:h,callMicrotasks:r(d[3]).callMicrotasks},l.__initData=y,l.__workletHash=1404421018773,l));return-1!==T?(s.current.unregister=function(){return(0,r(d[2]).unregisterSensor)(T)},s.current.isAvailable=!0):(s.current.unregister=function(){},s.current.isAvailable=!1),function(){s.current.unregister()}}),[t,o]),s.current};var t,n=r(d[0]),o={code:"function eulerToQuaternion(pitch,roll,yaw){const c1=Math.cos(pitch/2);const s1=Math.sin(pitch/2);const c2=Math.cos(roll/2);const s2=Math.sin(roll/2);const c3=Math.cos(yaw/2);const s3=Math.sin(yaw/2);return[s1*c2*c3-c1*s2*s3,c1*s2*c3+s1*c2*s3,c1*c2*s3+s1*s2*c3,c1*c2*c3-s1*s2*s3];}"},c=((t=function(t,n,o){var c=Math.cos(t/2),s=Math.sin(t/2),u=Math.cos(n/2),l=Math.sin(n/2),f=Math.cos(o/2),y=Math.sin(o/2);return[s*u*f-c*l*y,c*l*f+s*u*y,c*u*y+s*l*f,c*u*f-s*l*y]})._closure={},t.__initData=o,t.__workletHash=3591825116582,t),s={code:"function adjustRotationToInterfaceOrientation(data){const{eulerToQuaternion}=this._closure;const{interfaceOrientation:interfaceOrientation,pitch:pitch,roll:roll,yaw:yaw}=data;if(interfaceOrientation===90){data.pitch=roll;data.roll=-pitch;data.yaw=yaw-Math.PI/2;}else if(interfaceOrientation===270){data.pitch=-roll;data.roll=pitch;data.yaw=yaw+Math.PI/2;}else if(interfaceOrientation===180){data.pitch*=-1;data.roll*=-1;data.yaw*=-1;}const q=eulerToQuaternion(data.pitch,data.roll,data.yaw);data.qx=q[0];data.qy=q[1];data.qz=q[2];data.qw=q[3];return data;}"},u=(function(){var t=function(t){var n=t.interfaceOrientation,o=t.pitch,s=t.roll,u=t.yaw;90===n?(t.pitch=s,t.roll=-o,t.yaw=u-Math.PI/2):270===n?(t.pitch=-s,t.roll=o,t.yaw=u+Math.PI/2):180===n&&(t.pitch*=-1,t.roll*=-1,t.yaw*=-1);var l=c(t.pitch,t.roll,t.yaw);return t.qx=l[0],t.qy=l[1],t.qz=l[2],t.qw=l[3],t};return t._closure={eulerToQuaternion:c},t.__initData=s,t.__workletHash=0x991fbaecc82,t})(),l={code:"function adjustVectorToInterfaceOrientation(data){const{interfaceOrientation:interfaceOrientation,x:x,y:y}=data;if(interfaceOrientation===90){data.x=-y;data.y=x;}else if(interfaceOrientation===270){data.x=y;data.y=-x;}else if(interfaceOrientation===180){data.x*=-1;data.y*=-1;}return data;}"},f=(function(){var t=function(t){var n=t.interfaceOrientation,o=t.x,c=t.y;return 90===n?(t.x=-c,t.y=o):270===n?(t.x=c,t.y=-o):180===n&&(t.x*=-1,t.y*=-1),t};return t._closure={},t.__initData=l,t.__workletHash=0xcde4a551a12,t})(),y={code:"function anonymous(data){const{adjustToInterfaceOrientation,sensorType,SensorType,adjustRotationToInterfaceOrientation,adjustVectorToInterfaceOrientation,sensorData,callMicrotasks}=this._closure;if(adjustToInterfaceOrientation){if(sensorType===SensorType.ROTATION){data=adjustRotationToInterfaceOrientation(data);}else{data=adjustVectorToInterfaceOrientation(data);}}sensorData.value=data;callMicrotasks();}"}}),605,[153,553,557,561]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.useDerivedValue=function(l,o){var s,c,f=(0,n.useRef)(null),_=Object.values(null!=(s=l._closure)?s:{});(0,r(d[3]).shouldBeUseWeb)()&&!_.length&&null!=(c=o)&&c.length&&(_=o);void 0===o?o=[].concat((0,u.default)(_),[l.__workletHash]):o.push(l.__workletHash);null===f.current&&(f.current=(0,r(d[4]).makeMutable)((0,r(d[5]).initialUpdaterRun)(l)));var h=f.current;return(0,n.useEffect)((function(){var u,n=((u=function(){h.value=l()})._closure={sharedValue:h,processor:l},u.__initData=t,u.__workletHash=6829278738812,u),o=(0,r(d[4]).startMapper)(n,_,[h]);return function(){(0,r(d[4]).stopMapper)(o)}}),o),(0,n.useEffect)((function(){return function(){f.current=null}}),[]),h};var u=r(d[0])(r(d[1])),n=r(d[2]),t={code:"function anonymous(){const{sharedValue,processor}=this._closure;sharedValue.value=processor();}"}}),606,[8,11,153,552,557,573]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.useFrameCallback=function(n){var l=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],u=(0,c.useRef)({setActive:function(c){t.manageStateFrameCallback(u.current.callbackId,c),u.current.isActive=c},isActive:l,callbackId:-1});return(0,c.useEffect)((function(){return u.current.callbackId=t.registerFrameCallback(n),u.current.setActive(u.current.isActive),function(){t.unregisterFrameCallback(u.current.callbackId),u.current.callbackId=-1}}),[n,l]),u.current};var c=r(d[0]),t=new(r(d[1])(r(d[2])).default)}),607,[153,8,608]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var l=r(d[0])(r(d[1])),c=r(d[0])(r(d[2])),t={code:"function anonymous(){const{callback,callbackId}=this._closure;global._frameCallbackRegistry.registerFrameCallback(callback,callbackId);}"},n={code:"function anonymous(){const{callbackId}=this._closure;global._frameCallbackRegistry.unregisterFrameCallback(callbackId);}"},s={code:"function anonymous(){const{callbackId,state}=this._closure;global._frameCallbackRegistry.manageStateFrameCallback(callbackId,state);}"};e.default=(0,c.default)((function c(){(0,l.default)(this,c),this.nextCallbackId=0,(0,r(d[3]).prepareUIRegistry)()}),[{key:"registerFrameCallback",value:function(l){if(!l)return-1;var c,n=this.nextCallbackId;return this.nextCallbackId++,(0,r(d[4]).runOnUI)(((c=function(){g._frameCallbackRegistry.registerFrameCallback(l,n)})._closure={callback:l,callbackId:n},c.__initData=t,c.__workletHash=2066837374848,c))(),n}},{key:"unregisterFrameCallback",value:function(l){var c;(0,r(d[4]).runOnUI)(((c=function(){g._frameCallbackRegistry.unregisterFrameCallback(l)})._closure={callbackId:l},c.__initData=n,c.__workletHash=4314929277499,c))()}},{key:"manageStateFrameCallback",value:function(l,c){var t;(0,r(d[4]).runOnUI)(((t=function(){g._frameCallbackRegistry.manageStateFrameCallback(l,c)})._closure={callbackId:l,state:c},t.__initData=s,t.__workletHash=7690216562495,t))()}}])}),608,[8,17,18,609,557]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.prepareUIRegistry=void 0;var t,l={code:"function anonymous(){const frameCallbackRegistry={frameCallbackRegistry:new Map(),activeFrameCallbacks:new Set(),previousFrameTimestamp:null,nextCallId:0,runCallbacks:function(callId){var _this=this;const loop=function(timestamp){if(callId!==_this.nextCallId){return;}if(_this.previousFrameTimestamp===null){_this.previousFrameTimestamp=timestamp;}const delta=timestamp-_this.previousFrameTimestamp;_this.activeFrameCallbacks.forEach(function(callbackId){const callbackDetails=_this.frameCallbackRegistry.get(callbackId);const{startTime:startTime}=callbackDetails;if(startTime===null){callbackDetails.startTime=timestamp;callbackDetails.callback({timestamp:timestamp,timeSincePreviousFrame:null,timeSinceFirstFrame:0});}else{callbackDetails.callback({timestamp:timestamp,timeSincePreviousFrame:delta,timeSinceFirstFrame:timestamp-startTime});}});if(_this.activeFrameCallbacks.size>0){_this.previousFrameTimestamp=timestamp;requestAnimationFrame(loop);}else{_this.previousFrameTimestamp=null;}};if(this.activeFrameCallbacks.size===1&&callId===this.nextCallId){requestAnimationFrame(loop);}},registerFrameCallback:function(callback,callbackId){this.frameCallbackRegistry.set(callbackId,{callback:callback,startTime:null});},unregisterFrameCallback:function(callbackId){this.manageStateFrameCallback(callbackId,false);this.frameCallbackRegistry.delete(callbackId);},manageStateFrameCallback:function(callbackId,state){if(callbackId===-1){return;}if(state){this.activeFrameCallbacks.add(callbackId);this.runCallbacks(this.nextCallId);}else{const callback=this.frameCallbackRegistry.get(callbackId);callback.startTime=null;this.activeFrameCallbacks.delete(callbackId);if(this.activeFrameCallbacks.size===0){this.nextCallId+=1;}}}};global._frameCallbackRegistry=frameCallbackRegistry;}"};e.prepareUIRegistry=(0,r(d[0]).runOnUIImmediately)(((t=function(){var t={frameCallbackRegistry:new Map,activeFrameCallbacks:new Set,previousFrameTimestamp:null,nextCallId:0,runCallbacks:function(t){var l=this,s=function(c){if(t===l.nextCallId){null===l.previousFrameTimestamp&&(l.previousFrameTimestamp=c);var n=c-l.previousFrameTimestamp;l.activeFrameCallbacks.forEach((function(t){var s=l.frameCallbackRegistry.get(t),b=s.startTime;null===b?(s.startTime=c,s.callback({timestamp:c,timeSincePreviousFrame:null,timeSinceFirstFrame:0})):s.callback({timestamp:c,timeSincePreviousFrame:n,timeSinceFirstFrame:c-b})})),l.activeFrameCallbacks.size>0?(l.previousFrameTimestamp=c,requestAnimationFrame(s)):l.previousFrameTimestamp=null}};1===this.activeFrameCallbacks.size&&t===this.nextCallId&&requestAnimationFrame(s)},registerFrameCallback:function(t,l){this.frameCallbackRegistry.set(l,{callback:t,startTime:null})},unregisterFrameCallback:function(t){this.manageStateFrameCallback(t,!1),this.frameCallbackRegistry.delete(t)},manageStateFrameCallback:function(t,l){-1!==t&&(l?(this.activeFrameCallbacks.add(t),this.runCallbacks(this.nextCallId)):(this.frameCallbackRegistry.get(t).startTime=null,this.activeFrameCallbacks.delete(t),0===this.activeFrameCallbacks.size&&(this.nextCallId+=1)))}};g._frameCallbackRegistry=t})._closure={},t.__initData=l,t.__workletHash=8640414198951,t))}),609,[561]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.useReducedMotion=function(){var n;return null!=(n=g._REANIMATED_IS_REDUCED_MOTION)&&n}}),610,[]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.useScrollViewOffset=function(c,u){var s=(0,n.useRef)(void 0!==u?u:(0,r(d[2]).useSharedValue)(0)),l=(0,r(d[3]).useEvent)((v=function(n){s.current.value=0===n.contentOffset.x?n.contentOffset.y:n.contentOffset.x},v._closure={offsetRef:s},v.__initData=f,v.__workletHash=9547124911235,v),o);var v;return(0,n.useEffect)((function(){var n,o=(0,t.findNodeHandle)(c.current);null==(n=l.current)||n.registerForEvents(o)}),[c.current]),s.current};var n=r(d[0]),t=r(d[1]),o=['onScroll','onScrollBeginDrag','onScrollEndDrag','onMomentumScrollBegin','onMomentumScrollEnd'],f={code:"function anonymous(event){const{offsetRef}=this._closure;offsetRef.current.value=event.contentOffset.x===0?event.contentOffset.y:event.contentOffset.x;}"}}),611,[153,6,599,596]); +__d((function(g,r,_i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.interpolate=e.Extrapolation=void 0;var t,n=e.Extrapolation=(function(t){return t.IDENTITY="identity",t.CLAMP="clamp",t.EXTEND="extend",t})({}),o={code:"function getVal(type,coef,val,leftEdgeOutput,rightEdgeOutput,x){const{Extrapolation}=this._closure;switch(type){case Extrapolation.IDENTITY:return x;case Extrapolation.CLAMP:if(coef*val=leftEdgeOutput?1:-1;if(coef*valcoef*rightEdgeOutput){return getVal(extrapolationConfig.extrapolateRight,coef,val,leftEdgeOutput,rightEdgeOutput,x);}return val;}"},x=(function(){var t=function(t,n,o){var u=n.leftEdgeInput,i=n.rightEdgeInput,l=n.leftEdgeOutput,E=n.rightEdgeOutput;if(i-u==0)return l;var f=l+(t-u)/(i-u)*(E-l),x=E>=l?1:-1;return x*fx*E?p(o.extrapolateRight,x,f,l,E,t):f};return t._closure={getVal:p},t.__initData=f,t.__workletHash=2865520399363,t})(),s={code:"function interpolate(x,input,output,type){const{validateType,internalInterpolate}=this._closure;if(input.length<2||output.length<2){throw Error('Interpolation input and output should contain at least two values.');}const extrapolationConfig=validateType(type);const length=input.length;const narrowedInput={leftEdgeInput:input[0],rightEdgeInput:input[1],leftEdgeOutput:output[0],rightEdgeOutput:output[1]};if(length>2){if(x>input[length-1]){narrowedInput.leftEdgeInput=input[length-2];narrowedInput.rightEdgeInput=input[length-1];narrowedInput.leftEdgeOutput=output[length-2];narrowedInput.rightEdgeOutput=output[length-1];}else{for(let i=1;i2)if(t>n[i-1])l.leftEdgeInput=n[i-2],l.rightEdgeInput=n[i-1],l.leftEdgeOutput=o[i-2],l.rightEdgeOutput=o[i-1];else for(var f=1;f2&&void 0!==arguments[2]?arguments[2]:d.RGB,a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};return(0,_r(_d[2]).useSharedValue)({inputRange:o,outputRange:t,colorSpace:r,cache:(0,_r(_d[3]).makeMutable)(null),options:a})};var o,t=e.Extrapolate={EXTEND:'extend',CLAMP:'clamp',IDENTITY:'identity'},r={code:"function anonymous(value,inputRange,colors,options){const{interpolate,Extrapolate,hsvToColor}=this._closure;let h=0;const{useCorrectedHSVInterpolation=true}=options;if(useCorrectedHSVInterpolation){const correctedInputRange=[inputRange[0]];const originalH=colors.h;const correctedH=[originalH[0]];for(let i=1;ioriginalH[i-1]&&d>0.5){correctedInputRange.push(inputRange[i]);correctedInputRange.push(inputRange[i]+0.00001);correctedH.push(originalH[i]-1);correctedH.push(originalH[i]);}else if(originalH[i]i[s-1]&&g>.5?(u.push(r[s]),u.push(r[s]+1e-5),c.push(i[s]-1),c.push(i[s])):i[s]3&&void 0!==arguments[3]?arguments[3]:'RGB',l=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{};if('HSV'===n)return a(o,t,h(r),l);if('RGB'===n)return c(o,t,g(r),l);throw new Error(`Invalid color space provided: ${n}. Supported values are: ['RGB', 'HSV']`)};return o._closure={interpolateColorsHSV:a,getInterpolateHSV:h,interpolateColorsRGB:c,getInterpolateRGB:g},o.__initData=C,o.__workletHash=0xde5fbe69198,o})(),e.ColorSpace=(function(o){return o[o.RGB=0]="RGB",o[o.HSV=1]="HSV",o})({}));var f={code:"function anonymous(value,interpolateConfig){const{ColorSpace,getInterpolateRGB,interpolateColorsRGB,getInterpolateHSV,interpolateColorsHSV}=this._closure;let colors=interpolateConfig.value.cache.value;if(interpolateConfig.value.colorSpace===ColorSpace.RGB){if(!colors){colors=getInterpolateRGB(interpolateConfig.value.outputRange);interpolateConfig.value.cache.value=colors;}return interpolateColorsRGB(value,interpolateConfig.value.inputRange,colors,interpolateConfig.value.options);}else if(interpolateConfig.value.colorSpace===ColorSpace.HSV){if(!colors){colors=getInterpolateHSV(interpolateConfig.value.outputRange);interpolateConfig.value.cache.value=colors;}return interpolateColorsHSV(value,interpolateConfig.value.inputRange,colors,interpolateConfig.value.options);}throw new Error(\"Invalid color space provided: \"+interpolateConfig.value.colorSpace+\". Supported values are: ['RGB', 'HSV']\");}"};e.interpolateSharableColor=(function(){var o=function(o,t){var r=t.value.cache.value;if(t.value.colorSpace===d.RGB)return r||(r=g(t.value.outputRange),t.value.cache.value=r),c(o,t.value.inputRange,r,t.value.options);if(t.value.colorSpace===d.HSV)return r||(r=h(t.value.outputRange),t.value.cache.value=r),a(o,t.value.inputRange,r,t.value.options);throw new Error(`Invalid color space provided: ${t.value.colorSpace}. Supported values are: ['RGB', 'HSV']`)};return o._closure={ColorSpace:d,getInterpolateRGB:g,interpolateColorsRGB:c,getInterpolateHSV:h,interpolateColorsHSV:a},o.__initData=f,o.__workletHash=4245205974312,o})()}),613,[612,577,599,557]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.createAnimatedPropAdapter=e.TextInputAdapter=e.SVGAdapter=void 0;var t,s=e.createAnimatedPropAdapter=function(t,s){var n={};return null==s||s.forEach((function(t){n[t]=!0})),(0,r(d[0]).addWhitelistedNativeProps)(n),t},n={code:"function anonymous(props){const keys=Object.keys(props);if(keys.includes('transform')){if(Array.isArray(props.transform)){var _ref,_ref2;if(props.transform.length!==6){throw new Error(\"invalid transform length of \"+props.transform.length+\", should be 6\");}const transform=props.transform;const x=(_ref=props.x)!==null&&_ref!==void 0?_ref:0;const y=(_ref2=props.y)!==null&&_ref2!==void 0?_ref2:0;props.transform=[{translateX:transform[0]*x+transform[2]*y+transform[4]},{translateY:transform[1]*x+transform[3]*y+transform[5]}];}else if(typeof props.transform==='string'){const transform=props.transform;const arr=transform.replace('translate(','').replace(')','').split(' ');props.transform=[{translateX:parseFloat(arr[0])},{translateY:parseFloat(arr[1])}];}}}"},o=(e.SVGAdapter=s(((t=function(t){if(Object.keys(t).includes('transform'))if(Array.isArray(t.transform)){var s,n;if(6!==t.transform.length)throw new Error(`invalid transform length of ${t.transform.length}, should be 6`);var o=t.transform,l=null!=(s=t.x)?s:0,f=null!=(n=t.y)?n:0;t.transform=[{translateX:o[0]*l+o[2]*f+o[4]},{translateY:o[1]*l+o[3]*f+o[5]}]}else if('string'==typeof t.transform){var p=t.transform.replace('translate(','').replace(')','').split(' ');t.transform=[{translateX:parseFloat(p[0])},{translateY:parseFloat(p[1])}]}})._closure={},t.__initData=n,t.__workletHash=948881227734,t)),{code:"function anonymous(props){const keys=Object.keys(props);if(keys.includes('value')){props.text=props.value;delete props.value;}}"});e.TextInputAdapter=s((function(){var t=function(t){Object.keys(t).includes('value')&&(t.text=t.value,delete t.value)};return t._closure={},t.__initData=o,t.__workletHash=0xe05c066b476,t})(),['text'])}),614,[615]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.adaptViewConfig=function(n){var b=n.uiViewClassName,c=n.validAttributes;if(!s.has(b)){var h={};Object.keys(c).forEach((function(n){n in o||n in t||(h[n]=!0)})),l(h),s.add(b)}},e.addWhitelistedNativeProps=function(t){var l=Object.keys(o).length;o=Object.assign({},o,t),l!==Object.keys(o).length&&n()},e.addWhitelistedUIProps=l;var t={opacity:!0,transform:!0,backgroundColor:!0,borderRightColor:!0,borderBottomColor:!0,borderColor:!0,borderEndColor:!0,borderLeftColor:!0,borderStartColor:!0,borderTopColor:!0,shadowOpacity:!0,shadowRadius:!0,scaleX:!0,scaleY:!0,translateX:!0,translateY:!0},o={borderBottomWidth:!0,borderEndWidth:!0,borderLeftWidth:!0,borderRightWidth:!0,borderStartWidth:!0,borderTopWidth:!0,borderWidth:!0,bottom:!0,flex:!0,flexGrow:!0,flexShrink:!0,height:!0,left:!0,margin:!0,marginBottom:!0,marginEnd:!0,marginHorizontal:!0,marginLeft:!0,marginRight:!0,marginStart:!0,marginTop:!0,marginVertical:!0,maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0,padding:!0,paddingBottom:!0,paddingEnd:!0,paddingHorizontal:!0,paddingLeft:!0,paddingRight:!0,paddingStart:!0,paddingTop:!0,paddingVertical:!0,right:!0,start:!0,top:!0,width:!0,zIndex:!0,borderBottomEndRadius:!0,borderBottomLeftRadius:!0,borderBottomRightRadius:!0,borderBottomStartRadius:!0,borderRadius:!0,borderTopEndRadius:!0,borderTopLeftRadius:!0,borderTopRightRadius:!0,borderTopStartRadius:!0,elevation:!0,fontSize:!0,lineHeight:!0,textShadowRadius:!0,letterSpacing:!0,aspectRatio:!0,columnGap:!0,end:!0,flexBasis:!0,gap:!0,rowGap:!0,display:!0,backfaceVisibility:!0,overflow:!0,resizeMode:!0,fontStyle:!0,fontWeight:!0,textAlign:!0,textDecorationLine:!0,fontFamily:!0,textAlignVertical:!0,fontVariant:!0,textDecorationStyle:!0,textTransform:!0,writingDirection:!0,alignContent:!0,alignItems:!0,alignSelf:!0,direction:!0,flexDirection:!0,flexWrap:!0,justifyContent:!0,position:!0,color:!0,tintColor:!0,shadowColor:!0,placeholderTextColor:!0};function n(){(0,r(d[0]).configureProps)(Object.keys(t),Object.keys(o))}function l(o){var l=Object.keys(t).length;t=Object.assign({},t,o),l!==Object.keys(t).length&&n()}var s=new Set;n()}),615,[557]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),r(d[0]),Object.keys(r(d[1])).forEach((function(n){"default"!==n&&"__esModule"!==n&&(n in e&&e[n]===r(d[1])[n]||Object.defineProperty(e,n,{enumerable:!0,get:function(){return r(d[1])[n]}}))})),Object.keys(r(d[2])).forEach((function(n){"default"!==n&&"__esModule"!==n&&(n in e&&e[n]===r(d[2])[n]||Object.defineProperty(e,n,{enumerable:!0,get:function(){return r(d[2])[n]}}))})),Object.keys(r(d[3])).forEach((function(n){"default"!==n&&"__esModule"!==n&&(n in e&&e[n]===r(d[3])[n]||Object.defineProperty(e,n,{enumerable:!0,get:function(){return r(d[3])[n]}}))})),Object.keys(r(d[4])).forEach((function(n){"default"!==n&&"__esModule"!==n&&(n in e&&e[n]===r(d[4])[n]||Object.defineProperty(e,n,{enumerable:!0,get:function(){return r(d[4])[n]}}))}))}),616,[570,571,617,628,635]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),Object.keys(r(d[0])).forEach((function(n){"default"!==n&&"__esModule"!==n&&(n in e&&e[n]===r(d[0])[n]||Object.defineProperty(e,n,{enumerable:!0,get:function(){return r(d[0])[n]}}))})),Object.keys(r(d[1])).forEach((function(n){"default"!==n&&"__esModule"!==n&&(n in e&&e[n]===r(d[1])[n]||Object.defineProperty(e,n,{enumerable:!0,get:function(){return r(d[1])[n]}}))})),Object.keys(r(d[2])).forEach((function(n){"default"!==n&&"__esModule"!==n&&(n in e&&e[n]===r(d[2])[n]||Object.defineProperty(e,n,{enumerable:!0,get:function(){return r(d[2])[n]}}))})),Object.keys(r(d[3])).forEach((function(n){"default"!==n&&"__esModule"!==n&&(n in e&&e[n]===r(d[3])[n]||Object.defineProperty(e,n,{enumerable:!0,get:function(){return r(d[3])[n]}}))})),Object.keys(r(d[4])).forEach((function(n){"default"!==n&&"__esModule"!==n&&(n in e&&e[n]===r(d[4])[n]||Object.defineProperty(e,n,{enumerable:!0,get:function(){return r(d[4])[n]}}))})),Object.keys(r(d[5])).forEach((function(n){"default"!==n&&"__esModule"!==n&&(n in e&&e[n]===r(d[5])[n]||Object.defineProperty(e,n,{enumerable:!0,get:function(){return r(d[5])[n]}}))})),Object.keys(r(d[6])).forEach((function(n){"default"!==n&&"__esModule"!==n&&(n in e&&e[n]===r(d[6])[n]||Object.defineProperty(e,n,{enumerable:!0,get:function(){return r(d[6])[n]}}))})),Object.keys(r(d[7])).forEach((function(n){"default"!==n&&"__esModule"!==n&&(n in e&&e[n]===r(d[7])[n]||Object.defineProperty(e,n,{enumerable:!0,get:function(){return r(d[7])[n]}}))})),Object.keys(r(d[8])).forEach((function(n){"default"!==n&&"__esModule"!==n&&(n in e&&e[n]===r(d[8])[n]||Object.defineProperty(e,n,{enumerable:!0,get:function(){return r(d[8])[n]}}))})),Object.keys(r(d[9])).forEach((function(n){"default"!==n&&"__esModule"!==n&&(n in e&&e[n]===r(d[9])[n]||Object.defineProperty(e,n,{enumerable:!0,get:function(){return r(d[9])[n]}}))}))}),617,[618,619,620,621,622,623,624,625,626,627]); +__d((function(g,r,i,a,m,_e,d){Object.defineProperty(_e,"__esModule",{value:!0}),_e.FlipOutYRight=_e.FlipOutYLeft=_e.FlipOutXUp=_e.FlipOutXDown=_e.FlipOutEasyY=_e.FlipOutEasyX=_e.FlipInYRight=_e.FlipInYLeft=_e.FlipInXUp=_e.FlipInXDown=_e.FlipInEasyY=_e.FlipInEasyX=void 0;var t=r(d[0])(r(d[1])),n=r(d[0])(r(d[2])),e=r(d[0])(r(d[3])),l=r(d[0])(r(d[4])),o=r(d[0])(r(d[5])),c=r(d[0])(r(d[6]));function u(t,n,e){return n=(0,o.default)(n),(0,l.default)(t,s()?Reflect.construct(n,e||[],(0,o.default)(t).constructor):n.apply(t,e))}function s(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(t){}return(s=function(){return!!t})()}var f={code:"function anonymous(targetValues){const{initialValues,delayFunction,delay,animation,config,callback}=this._closure;return{initialValues:{transform:[{perspective:500},{rotateX:'90deg'},{translateY:-targetValues.targetHeight}],...initialValues},animations:{transform:[{perspective:500},{rotateX:delayFunction(delay,animation('0deg',config))},{translateY:delayFunction(delay,animation(0,config))}]},callback:callback};}"},y=(_e.FlipInXUp=(function(l){function o(){var e;(0,n.default)(this,o);for(var l=arguments.length,c=new Array(l),s=0;s1){toRemove.add(viewTag);}else{progressAnimations.delete(viewTag);}},onTransitionStart:function(viewTag,snapshot){snapshots.set(viewTag,snapshot);currentTransitions.add(viewTag);progressTransitionManager.frame(0);},frame:function(progress){for(const viewTag of currentTransitions){const progressAnimation=progressAnimations.get(viewTag);const snapshot=snapshots.get(viewTag);progressAnimation(viewTag,snapshot,progress);}},onAndroidFinishTransitioning:function(){if(toRemove.size>0){progressTransitionManager.onTransitionEnd();}},onTransitionEnd:function(removeViews=false){for(const viewTag of currentTransitions){_notifyAboutEnd(viewTag,removeViews);}currentTransitions.clear();snapshots.clear();if(toRemove.size>0){for(const viewTag of toRemove){progressAnimations.delete(viewTag);}toRemove.clear();}}};return progressTransitionManager;}"}),w=(n=function(){var n=new Map,s=new Map,o=new Set,t=new Set,u={addProgressAnimation:function(s,o){n.set(s,o)},removeProgressAnimation:function(s){n.size>1?t.add(s):n.delete(s)},onTransitionStart:function(n,t){s.set(n,t),o.add(n),u.frame(0)},frame:function(t){for(var u of o)n.get(u)(u,s.get(u),t)},onAndroidFinishTransitioning:function(){t.size>0&&u.onTransitionEnd()},onTransitionEnd:function(){var u=arguments.length>0&&void 0!==arguments[0]&&arguments[0];for(var c of o)_notifyAboutEnd(c,u);if(o.clear(),s.clear(),t.size>0){for(var l of t)n.delete(l);t.clear()}}};return u},n._closure={},n.__initData=_,n.__workletHash=0xe1da4cb8395,n),P={code:"function anonymous(){const{createProgressTransitionRegister}=this._closure;global.ProgressTransitionRegister=createProgressTransitionRegister();}"};(0,r(d[4]).runOnUIImmediately)((function(){var n=function(){g.ProgressTransitionRegister=w()};return n._closure={createProgressTransitionRegister:w},n.__initData=P,n.__workletHash=5121905946827,n})())()}),637,[8,17,18,6,561,557]); +__d((function(g,r,i,a,m,e,d){}),638,[]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.getUseOfValueInStyleWarning=function(){return"It looks like you might be using shared value's .value inside reanimated inline style. If you want a component to update when shared value changes you should use the shared value directly instead of its current state represented by `.value`. See documentation here: https://docs.swmansion.com/react-native-reanimated/docs/fundamentals/animations#animations-in-inline-styles"}}),639,[]); +__d((function(g,r,_i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.withReanimatedTimer=e.setUpTests=e.getAnimatedStyle=e.advanceAnimationByTime=e.advanceAnimationByFrame=void 0;var t={fps:60},n=function(t){return!!t.animatedStyle},i=function(t){return t.animatedStyle.current.value},s=function(t){var s=t.props.style,o={};return Array.isArray(s)?t.props.style.forEach((function(t){o=n(t)?Object.assign({},o,i(t)):Object.assign({},o,t)})):o=n(s)?i(s):Object.assign({},s,t.props.animatedStyle.value),o},o=function(t,n){if(Array.isArray(n)){if(n.length!==t.length)return!1;for(var i=0;i0&&void 0!==arguments[0]?arguments[0]:f;console.warn('This method is deprecated, use jest.advanceTimersByTime directly'),jest.advanceTimersByTime(t),jest.runOnlyPendingTimers()},e.advanceAnimationByFrame=function(t){console.warn('This method is deprecated, use jest.advanceTimersByTime directly'),jest.advanceTimersByTime(t*f),jest.runOnlyPendingTimers()},(0,r(d[0]).isJest)()?r:function(){throw new Error('[Reanimated] setUpTests() is available only in Jest environment')});e.setUpTests=function(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},i=g.expect;if(void 0===i){var s=l('expect');if('object'==typeof(i=s))i=l('@jest/globals').expect;void 0!==i&&void 0!==i.extend||(i=s.default)}f=Math.round(1e3/t.fps),t=Object.assign({},t,n),i.extend({toHaveAnimatedStyle:function(t,n){return c(t,n,arguments.length>2&&void 0!==arguments[2]?arguments[2]:{})}})},e.getAnimatedStyle=function(t){return s(t)}}),640,[552]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.removeFromPropsRegistry=function(t){o.push(t),1===o.length&&queueMicrotask(n)};var o=[];function n(){(0,r(d[0]).runOnUI)(u)(o),o=[]}var t,s={code:"function removeFromPropsRegistryOnUI(viewTags){_removeFromPropsRegistry(viewTags);}"},u=(t=function(o){_removeFromPropsRegistry(o)},t._closure={},t.__initData=s,t.__workletHash=0xe8242dae9fa,t)}),641,[561]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"RNRenderer",{enumerable:!0,get:function(){return n.default}});var n=r(d[0])(r(d[1]))}),642,[8,214]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.AnimatedView=void 0;var t=r(d[0]),n=r(d[1])(r(d[2]));r(d[3]),e.AnimatedView=(0,n.default)(t.View)}),643,[6,8,547,153]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.AnimatedImage=void 0;var t=r(d[0]),n=r(d[1])(r(d[2]));r(d[3]),e.AnimatedImage=(0,n.default)(t.Image)}),644,[6,8,547,153]); +__d((function(g,_r,_i,a,m,_e,d){Object.defineProperty(_e,"__esModule",{value:!0}),_e.AnimatedScrollView=void 0;var e=_r(d[0])(_r(d[1])),t=(function(e,t){if("function"==typeof WeakMap)var r=new WeakMap,n=new WeakMap;return(function(e,t){if(!t&&e&&e.__esModule)return e;var l,o,f={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return f;if(l=t?n:r){if(l.has(e))return l.get(e);l.set(e,f)}for(var i in e)"default"!==i&&{}.hasOwnProperty.call(e,i)&&((o=(l=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,i))&&(o.get||o.set)?l(f,i,o):f[i]=e[i]);return f})(e,t)})(_r(d[2])),r=_r(d[3]),n=_r(d[0])(_r(d[4])),l=["scrollViewOffset"];var o=(0,n.default)(r.ScrollView);_e.AnimatedScrollView=(0,t.forwardRef)((function(t,r){var n=t.scrollViewOffset,f=(0,e.default)(t,l),i=null===r?(0,_r(d[5]).useAnimatedRef)():r;return n&&(0,_r(d[5]).useScrollViewOffset)(i,n),'scrollEventThrottle'in f||(f.scrollEventThrottle=1),(0,_r(d[6]).jsx)(o,Object.assign({ref:i},f))}))}),645,[8,119,153,6,547,593,193]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.AnimatedText=void 0;r(d[0]);var t=r(d[1]),n=r(d[2])(r(d[3]));e.AnimatedText=(0,n.default)(t.Text)}),646,[153,6,8,547]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.GestureStateManager=void 0;var t,n=(0,r(d[0]).tagMessage)('react-native-reanimated is required in order to use synchronous state management'),s=void 0!==(null==r(d[1]).Reanimated?void 0:r(d[1]).Reanimated.useSharedValue),A=null==r(d[1]).Reanimated?void 0:r(d[1]).Reanimated.setGestureState,o={code:"function create(handlerTag){const{REANIMATED_AVAILABLE,setGestureState,State,warningMessage}=this._closure;return{begin:function(){'worklet';if(REANIMATED_AVAILABLE){setGestureState(handlerTag,State.BEGAN);}else{console.warn(warningMessage);}},activate:function(){'worklet';if(REANIMATED_AVAILABLE){setGestureState(handlerTag,State.ACTIVE);}else{console.warn(warningMessage);}},fail:function(){'worklet';if(REANIMATED_AVAILABLE){setGestureState(handlerTag,State.FAILED);}else{console.warn(warningMessage);}},end:function(){'worklet';if(REANIMATED_AVAILABLE){setGestureState(handlerTag,State.END);}else{console.warn(warningMessage);}}};}"},u={code:"function anonymous(){const{REANIMATED_AVAILABLE,setGestureState,handlerTag,State,warningMessage}=this._closure;if(REANIMATED_AVAILABLE){setGestureState(handlerTag,State.BEGAN);}else{console.warn(warningMessage);}}"},E={code:"function anonymous(){const{REANIMATED_AVAILABLE,setGestureState,handlerTag,State,warningMessage}=this._closure;if(REANIMATED_AVAILABLE){setGestureState(handlerTag,State.ACTIVE);}else{console.warn(warningMessage);}}"},l={code:"function anonymous(){const{REANIMATED_AVAILABLE,setGestureState,handlerTag,State,warningMessage}=this._closure;if(REANIMATED_AVAILABLE){setGestureState(handlerTag,State.FAILED);}else{console.warn(warningMessage);}}"},c={code:"function anonymous(){const{REANIMATED_AVAILABLE,setGestureState,handlerTag,State,warningMessage}=this._closure;if(REANIMATED_AVAILABLE){setGestureState(handlerTag,State.END);}else{console.warn(warningMessage);}}"};e.GestureStateManager={create:(t=function(t){return{begin:(function(){var o=function(){s?A(t,r(d[2]).State.BEGAN):console.warn(n)};return o._closure={REANIMATED_AVAILABLE:s,setGestureState:A,handlerTag:t,State:r(d[2]).State,warningMessage:n},o.__initData=u,o.__workletHash=2656110250877,o})(),activate:(function(){var o=function(){s?A(t,r(d[2]).State.ACTIVE):console.warn(n)};return o._closure={REANIMATED_AVAILABLE:s,setGestureState:A,handlerTag:t,State:r(d[2]).State,warningMessage:n},o.__initData=E,o.__workletHash=0xc1289c9b5be,o})(),fail:(function(){var o=function(){s?A(t,r(d[2]).State.FAILED):console.warn(n)};return o._closure={REANIMATED_AVAILABLE:s,setGestureState:A,handlerTag:t,State:r(d[2]).State,warningMessage:n},o.__initData=l,o.__workletHash=9248813280017,o})(),end:(function(){var o=function(){s?A(t,r(d[2]).State.END):console.warn(n)};return o._closure={REANIMATED_AVAILABLE:s,setGestureState:A,handlerTag:t,State:r(d[2]).State,warningMessage:n},o.__initData=c,o.__workletHash=0xe2f251db77d,o})()}},t._closure={REANIMATED_AVAILABLE:s,setGestureState:A,State:r(d[2]).State,warningMessage:n},t.__initData=o,t.__workletHash=0xcb858dd1a4e,t)}}),647,[512,543,515]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.onGestureHandlerEvent=E,e.startListening=function(){T(),l=n.DeviceEventEmitter.addListener('onGestureHandlerEvent',E),t=n.DeviceEventEmitter.addListener('onGestureHandlerStateChange',E)},e.stopListening=T;var n=r(d[0]),l=null,t=null,o=new Map,s=[];function h(n){return null!=n.oldState}function u(n){return null!=n.eventType}function E(n){var l,t,E,T,c=(0,r(d[1]).findHandler)(n.handlerTag);if(c)if(h(n))n.oldState===r(d[2]).State.UNDETERMINED&&n.state===r(d[2]).State.BEGAN?null==c.handlers.onBegin||c.handlers.onBegin(n):n.oldState!==r(d[2]).State.BEGAN&&n.oldState!==r(d[2]).State.UNDETERMINED||n.state!==r(d[2]).State.ACTIVE?n.oldState!==n.state&&n.state===r(d[2]).State.END?(n.oldState===r(d[2]).State.ACTIVE&&(null==c.handlers.onEnd||c.handlers.onEnd(n,!0)),null==c.handlers.onFinalize||c.handlers.onFinalize(n,!0),s[c.handlers.handlerTag]=void 0):n.state!==r(d[2]).State.FAILED&&n.state!==r(d[2]).State.CANCELLED||n.oldState===n.state||(n.oldState===r(d[2]).State.ACTIVE&&(null==c.handlers.onEnd||c.handlers.onEnd(n,!1)),null==c.handlers.onFinalize||c.handlers.onFinalize(n,!1),o.delete(n.handlerTag),s[c.handlers.handlerTag]=void 0):(null==c.handlers.onStart||c.handlers.onStart(n),s[c.handlers.handlerTag]=n);else if(u(n)){o.has(n.handlerTag)||o.set(n.handlerTag,r(d[3]).GestureStateManager.create(n.handlerTag));var v=o.get(n.handlerTag);switch(n.eventType){case r(d[4]).TouchEventType.TOUCHES_DOWN:null==(l=c.handlers)||null==l.onTouchesDown||l.onTouchesDown(n,v);break;case r(d[4]).TouchEventType.TOUCHES_MOVE:null==(t=c.handlers)||null==t.onTouchesMove||t.onTouchesMove(n,v);break;case r(d[4]).TouchEventType.TOUCHES_UP:null==(E=c.handlers)||null==E.onTouchesUp||E.onTouchesUp(n,v);break;case r(d[4]).TouchEventType.TOUCHES_CANCELLED:null==(T=c.handlers)||null==T.onTouchesCancelled||T.onTouchesCancelled(n,v)}}else null==c.handlers.onUpdate||c.handlers.onUpdate(n),c.handlers.onChange&&c.handlers.changeEventCalculator&&(null==c.handlers.onChange||c.handlers.onChange(null==c.handlers.changeEventCalculator?void 0:c.handlers.changeEventCalculator(n,s[c.handlers.handlerTag])),s[c.handlers.handlerTag]=n);else{var S=(0,r(d[1]).findOldGestureHandler)(n.handlerTag);if(S){var C={nativeEvent:n};return void(h(n)?S.onGestureStateChange(C):S.onGestureEvent(C))}}}function T(){l&&(l.remove(),l=null),t&&(t.remove(),t=null)}}),648,[6,517,515,647,542]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.enableExperimentalWebImplementation=function(){},e.enableLegacyWebImplementation=function(){var o=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];if('web'!==n.Platform.OS||t===!o)return;if(l)return void console.error('Some parts of this application have already started using the new gesture handler implementation. No changes will be applied. You can try enabling legacy implementation earlier.');t=!o},e.isNewWebImplementationEnabled=function(){return l=!0,t};var n=r(d[0]),t=!0,l=!1}),649,[6]); +__d((function(g,r,i,a,m,_e,d){var e;Object.defineProperty(_e,"__esModule",{value:!0}),_e.getShadowNodeFromRef=function(n){if(void 0===e)try{e=r(d[0]).findHostInstance_DEPRECATED}catch(n){e=function(e){return null}}return e(n)._internalInstanceHandle.stateNode.node}}),650,[49]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.pinchHandlerName=e.PinchGestureHandler=void 0;var n=r(d[0])(r(d[1])),l=e.pinchHandlerName='PinchGestureHandler';e.PinchGestureHandler=(0,n.default)({name:l,allowedProps:r(d[2]).baseGestureHandlerProps,config:{}})}),651,[8,421,518]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.rotationHandlerName=e.RotationGestureHandler=void 0;var o=r(d[0])(r(d[1])),t=e.rotationHandlerName='RotationGestureHandler';e.RotationGestureHandler=(0,o.default)({name:t,allowedProps:r(d[2]).baseGestureHandlerProps,config:{}})}),652,[8,421,518]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"TouchableHighlight",{enumerable:!0,get:function(){return c.default}}),Object.defineProperty(e,"TouchableNativeFeedback",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,"TouchableOpacity",{enumerable:!0,get:function(){return n.default}}),Object.defineProperty(e,"TouchableWithoutFeedback",{enumerable:!0,get:function(){return u.default}});var t=r(d[0])(r(d[1])),u=r(d[0])(r(d[2])),n=r(d[0])(r(d[3])),c=r(d[0])(r(d[4]))}),653,[8,654,656,657,658]); +__d((function(g,_r,_i,a,m,_e,d){Object.defineProperty(_e,"__esModule",{value:!0}),_e.default=void 0;var e=_r(d[0])(_r(d[1])),t=_r(d[0])(_r(d[2])),r=_r(d[0])(_r(d[3])),o=_r(d[0])(_r(d[4])),n=_r(d[0])(_r(d[5])),u=_r(d[0])(_r(d[6])),l=_r(d[7]),i=(function(e,t){if("function"==typeof WeakMap)var r=new WeakMap,o=new WeakMap;return(function(e,t){if(!t&&e&&e.__esModule)return e;var n,u,l={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return l;if(n=t?o:r){if(n.has(e))return n.get(e);n.set(e,l)}for(var i in e)"default"!==i&&{}.hasOwnProperty.call(e,i)&&((u=(n=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,i))&&(u.get||u.set)?n(l,i,u):l[i]=e[i]);return l})(e,t)})(_r(d[8])),s=_r(d[0])(_r(d[9])),p=["style"];function c(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(c=function(){return!!e})()}var f=_e.default=(function(l){function i(){return(0,t.default)(this,i),e=this,r=i,u=arguments,r=(0,n.default)(r),(0,o.default)(e,c()?Reflect.construct(r,u||[],(0,n.default)(e).constructor):r.apply(e,u));var e,r,u}return(0,u.default)(i,l),(0,r.default)(i,[{key:"getExtraButtonProps",value:function(){var e={},t=this.props.background;return t&&('RippleAndroid'===t.type?(e.borderless=t.borderless,e.rippleColor=t.color):'ThemeAttrAndroid'===t.type&&(e.borderless='selectableItemBackgroundBorderless'===t.attribute),e.rippleRadius=t.rippleRadius),e.foreground=this.props.useForeground,e}},{key:"render",value:function(){var t=this.props,r=t.style,o=void 0===r?{}:r,n=(0,e.default)(t,p);return(0,_r(d[10]).jsx)(s.default,Object.assign({},n,{style:o,extraButtonProps:this.getExtraButtonProps()}))}}])})(i.Component);f.defaultProps=Object.assign({},s.default.defaultProps,{useForeground:!0,extraButtonProps:{rippleColor:null}}),f.SelectableBackground=function(e){return{type:'ThemeAttrAndroid',attribute:'selectableItemBackground',rippleRadius:e}},f.SelectableBackgroundBorderless=function(e){return{type:'ThemeAttrAndroid',attribute:'selectableItemBackgroundBorderless',rippleRadius:e}},f.Ripple=function(e,t,r){return{type:'RippleAndroid',color:e,borderless:t,rippleRadius:r}},f.canUseNativeForeground=function(){return l.Platform.Version>=23}}),654,[8,119,17,18,3,2,56,6,153,655,193]); +__d((function(g,_r,_i,a,m,_e,d){Object.defineProperty(_e,"__esModule",{value:!0}),_e.default=_e.TOUCHABLE_STATE=void 0;var t=_r(d[0])(_r(d[1])),e=_r(d[0])(_r(d[2])),s=_r(d[0])(_r(d[3])),o=_r(d[0])(_r(d[4])),i=_r(d[0])(_r(d[5])),n=(function(t,e){if("function"==typeof WeakMap)var s=new WeakMap,o=new WeakMap;return(function(t,e){if(!e&&t&&t.__esModule)return t;var i,n,r={__proto__:null,default:t};if(null===t||"object"!=typeof t&&"function"!=typeof t)return r;if(i=e?o:s){if(i.has(t))return i.get(t);i.set(t,r)}for(var l in t)"default"!==l&&{}.hasOwnProperty.call(t,l)&&((n=(i=Object.defineProperty)&&Object.getOwnPropertyDescriptor(t,l))&&(n.get||n.set)?i(r,l,n):r[l]=t[l]);return r})(t,e)})(_r(d[6])),r=_r(d[7]);function l(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(t){}return(l=function(){return!!t})()}var u=_e.TOUCHABLE_STATE={UNDETERMINED:0,BEGAN:1,MOVED_OUTSIDE:2},p=_e.default=(function(n){function p(){var e,i,n,h;(0,t.default)(this,p);for(var c=arguments.length,T=new Array(c),E=0;E0:S,R=t.overshootRight,b=void 0===R?w>0:R,A=s.Animated.add(l,r.interpolate({inputRange:[0,n],outputRange:[0,1]})).interpolate({inputRange:[-w-1,-w,u,u+1],outputRange:[-w-(b?1/i:0),-w,u,u+(O?1/i:0)]});o.transX=A,o.showLeftAction=u>0?A.interpolate({inputRange:[-1,0,u],outputRange:[0,0,1]}):new s.Animated.Value(0),o.leftActionTranslate=o.showLeftAction.interpolate({inputRange:[0,Number.MIN_VALUE],outputRange:[-1e4,0],extrapolate:'clamp'}),o.showRightAction=w>0?A.interpolate({inputRange:[-w,0,1],outputRange:[1,0,0]}):new s.Animated.Value(0),o.rightActionTranslate=o.showRightAction.interpolate({inputRange:[0,Number.MIN_VALUE],outputRange:[-1e4,0],extrapolate:'clamp'})},o.onTapHandlerStateChange=function(t){t.nativeEvent.oldState===_r(d[8]).State.ACTIVE&&o.close()},o.onHandlerStateChange=function(t){t.nativeEvent.oldState===_r(d[8]).State.ACTIVE&&o.handleRelease(t)},o.handleRelease=function(t){var e=t.nativeEvent,n=e.velocityX,i=e.translationX,r=o.state,s=r.leftWidth,l=void 0===s?0:s,p=r.rowWidth,u=void 0===p?0:p,f=r.rowState,h=o.state.rightOffset,c=u-(void 0===h?u:h),v=o.props,w=v.friction,S=v.leftThreshold,O=void 0===S?l/2:S,R=v.rightThreshold,b=void 0===R?c/2:R,A=o.currentOffset()+i/w,y=(i+.05*n)/w,W=0;0===f?y>O?W=l:y<-b&&(W=-c):1===f?y>-O&&(W=l):y0)null==o.props.onSwipeableLeftOpen||o.props.onSwipeableLeftOpen(),null==o.props.onSwipeableOpen||o.props.onSwipeableOpen('left',o);else if(e<0)null==o.props.onSwipeableRightOpen||o.props.onSwipeableRightOpen(),null==o.props.onSwipeableOpen||o.props.onSwipeableOpen('right',o);else{var i=t>0?'left':'right';null==o.props.onSwipeableClose||o.props.onSwipeableClose(i,o)}})),e>0)null==o.props.onSwipeableLeftWillOpen||o.props.onSwipeableLeftWillOpen(),null==o.props.onSwipeableWillOpen||o.props.onSwipeableWillOpen('left');else if(e<0)null==o.props.onSwipeableRightWillOpen||o.props.onSwipeableRightWillOpen(),null==o.props.onSwipeableWillOpen||o.props.onSwipeableWillOpen('right');else{var p=t>0?'left':'right';null==o.props.onSwipeableWillClose||o.props.onSwipeableWillClose(p)}},o.onRowLayout=function(t){var e=t.nativeEvent;o.setState({rowWidth:e.layout.width})},o.currentOffset=function(){var t=o.state,e=t.leftWidth,n=void 0===e?0:e,i=t.rowWidth,r=void 0===i?0:i,s=t.rowState,l=o.state.rightOffset;return 1===s?n:-1===s?-(r-(void 0===l?r:l)):0},o.close=function(){o.animateRow(o.currentOffset(),0)},o.openLeft=function(){var t=o.state.leftWidth,e=void 0===t?0:t;o.animateRow(o.currentOffset(),e)},o.openRight=function(){var t=o.state.rowWidth,e=void 0===t?0:t,n=o.state.rightOffset,i=e-(void 0===n?e:n);o.animateRow(o.currentOffset(),-i)},o.reset=function(){var t=o.state,e=t.dragX,n=t.rowTranslation;e.setValue(0),n.setValue(0),o.setState({rowState:0})};var h=new s.Animated.Value(0);return o.state={dragX:h,rowTranslation:new s.Animated.Value(0),rowState:0,leftWidth:void 0,rightOffset:void 0,rowWidth:void 0},o.updateAnimatedEvent(e,o.state),o.onGestureEvent=s.Animated.event([{nativeEvent:{translationX:h}}],{useNativeDriver:e.useNativeAnimations}),o}return(0,o.default)(u,r),(0,e.default)(u,[{key:"shouldComponentUpdate",value:function(t,e){return this.props.friction===t.friction&&this.props.overshootLeft===t.overshootLeft&&this.props.overshootRight===t.overshootRight&&this.props.overshootFriction===t.overshootFriction&&this.state.leftWidth===e.leftWidth&&this.state.rightOffset===e.rightOffset&&this.state.rowWidth===e.rowWidth||this.updateAnimatedEvent(t,e),!0}},{key:"render",value:function(){var t=this,e=this.state.rowState,n=this.props,i=n.children,o=n.renderLeftActions,r=n.renderRightActions,l=n.dragOffsetFromLeftEdge,u=void 0===l?10:l,f=n.dragOffsetFromRightEdge,h=void 0===f?10:f,c=o&&(0,_r(d[9]).jsxs)(s.Animated.View,{style:[p.leftActions,{transform:[{translateX:this.leftActionTranslate}]}],children:[o(this.showLeftAction,this.transX,this),(0,_r(d[9]).jsx)(s.View,{onLayout:function(e){var n=e.nativeEvent;return t.setState({leftWidth:n.layout.x})}})]}),v=r&&(0,_r(d[9]).jsxs)(s.Animated.View,{style:[p.rightActions,{transform:[{translateX:this.rightActionTranslate}]}],children:[r(this.showRightAction,this.transX,this),(0,_r(d[9]).jsx)(s.View,{onLayout:function(e){var n=e.nativeEvent;return t.setState({rightOffset:n.layout.x})}})]});return(0,_r(d[9]).jsx)(_r(d[10]).PanGestureHandler,Object.assign({activeOffsetX:[-h,u]},this.props,{onGestureEvent:this.onGestureEvent,onHandlerStateChange:this.onHandlerStateChange,children:(0,_r(d[9]).jsxs)(s.Animated.View,{onLayout:this.onRowLayout,style:[p.container,this.props.containerStyle],children:[c,v,(0,_r(d[9]).jsx)(_r(d[11]).TapGestureHandler,{enabled:0!==e,onHandlerStateChange:this.onTapHandlerStateChange,children:(0,_r(d[9]).jsx)(s.Animated.View,{pointerEvents:0===e?'auto':'box-only',style:[{transform:[{translateX:this.transX}]},this.props.childrenContainerStyle],children:i})})]})}))}}])})(r.Component)).defaultProps={friction:1,overshootFriction:1,useNativeAnimations:!0};var p=s.StyleSheet.create({container:{overflow:'hidden'},leftActions:Object.assign({},s.StyleSheet.absoluteFillObject,{flexDirection:s.I18nManager.isRTL?'row-reverse':'row'}),rightActions:Object.assign({},s.StyleSheet.absoluteFillObject,{flexDirection:s.I18nManager.isRTL?'row':'row-reverse'})})}),666,[8,17,18,3,2,56,153,6,515,193,540,539]); +__d((function(g,_r,_i,a,m,_e,d){Object.defineProperty(_e,"__esModule",{value:!0}),_e.default=void 0;var e=_r(d[0])(_r(d[1])),t=_r(d[0])(_r(d[2])),r=_r(d[0])(_r(d[3])),n=_r(d[0])(_r(d[4])),i=_r(d[0])(_r(d[5])),o=(function(e,t){if("function"==typeof WeakMap)var r=new WeakMap,n=new WeakMap;return(function(e,t){if(!t&&e&&e.__esModule)return e;var i,o,s={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return s;if(i=t?n:r){if(i.has(e))return i.get(e);i.set(e,s)}for(var l in e)"default"!==l&&{}.hasOwnProperty.call(e,l)&&((o=(i=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,l))&&(o.get||o.set)?i(s,l,o):s[l]=e[l]);return s})(e,t)})(_r(d[6])),s=o,l=_r(d[0])(_r(d[7])),p=_r(d[8]);function u(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(u=function(){return!!e})()}var c='Idle',w='Dragging',h='Settling',f=_e.default=(function(o){function f(t){var i,o,S,y;(0,e.default)(this,f),o=this,S=f,y=[t],S=(0,n.default)(S),(i=(0,r.default)(o,u()?Reflect.construct(S,y||[],(0,n.default)(o).constructor):S.apply(o,y))).accessibilityIsModalView=s.createRef(),i.pointerEventsView=s.createRef(),i.panGestureHandler=s.createRef(),i.drawerShown=!1,i.updateAnimatedEvent=function(e,t){var r=e.drawerPosition,n=e.drawerWidth,o=e.drawerType,s=t.dragX,l=t.touchX,u=t.drawerTranslation,c=t.containerWidth,w=s,h=l;'left'!==r?(w=p.Animated.multiply(new p.Animated.Value(-1),s),h=p.Animated.add(new p.Animated.Value(c),p.Animated.multiply(new p.Animated.Value(-1),l)),l.setValue(c)):l.setValue(0);var f=w;if('front'===o){var v=p.Animated.add(h,p.Animated.multiply(new p.Animated.Value(-1),w)).interpolate({inputRange:[n-1,n,n+1],outputRange:[0,0,1]});f=p.Animated.add(w,v)}i.openValue=p.Animated.add(f,u).interpolate({inputRange:[0,n],outputRange:[0,1],extrapolate:'clamp'});var S={useNativeDriver:e.useNativeAnimations};i.props.onDrawerSlide&&(S.listener=function(e){var t=Math.floor(Math.abs(e.nativeEvent.translationX))/i.state.containerWidth;null==i.props.onDrawerSlide||i.props.onDrawerSlide(t)}),i.onGestureEvent=p.Animated.event([{nativeEvent:{translationX:s,x:l}}],S)},i.handleContainerLayout=function(e){var t=e.nativeEvent;i.setState({containerWidth:t.layout.width})},i.emitStateChanged=function(e,t){null==i.props.onDrawerStateChanged||i.props.onDrawerStateChanged(e,t)},i.openingHandlerStateChange=function(e){var t=e.nativeEvent;t.oldState===_r(d[9]).State.ACTIVE?i.handleRelease({nativeEvent:t}):t.state===_r(d[9]).State.ACTIVE&&(i.emitStateChanged(w,!1),i.setState({drawerState:w}),'on-drag'===i.props.keyboardDismissMode&&p.Keyboard.dismiss(),i.props.hideStatusBar&&p.StatusBar.setHidden(!0,i.props.statusBarAnimation||'slide'))},i.onTapHandlerStateChange=function(e){var t=e.nativeEvent;i.drawerShown&&t.oldState===_r(d[9]).State.ACTIVE&&'locked-open'!==i.props.drawerLockMode&&i.closeDrawer()},i.handleRelease=function(e){var t=e.nativeEvent,r=i.props,n=r.drawerWidth,o=r.drawerPosition,s=r.drawerType,l=i.state.containerWidth,p=t.translationX,u=t.velocityX,c=t.x;'left'!==o&&(p=-p,c=l-c,u=-u);var w=c-p,h=0;'front'===s&&(h=w>n?w-n:0);var f=p+h+(i.drawerShown?n:0);f+.05*u>n/2?i.animateDrawer(f,n,u):i.animateDrawer(f,0,u)},i.updateShowing=function(e){var t,r,n;i.drawerShown=e,null==(t=i.accessibilityIsModalView.current)||t.setNativeProps({accessibilityViewIsModal:e}),null==(r=i.pointerEventsView.current)||r.setNativeProps({pointerEvents:e?'auto':'none'});var o=i.props,s=o.drawerPosition,l=o.minSwipeDistance,p=o.edgeWidth,u='left'===s,c=(u?1:-1)*(i.drawerShown?-1:1),w=u?{left:0,width:e?void 0:p}:{right:0,width:e?void 0:p};null==(n=i.panGestureHandler.current)||n.setNativeProps({hitSlop:w,activeOffsetX:c*l})},i.animateDrawer=function(e,t,r,n){if(i.state.dragX.setValue(0),i.state.touchX.setValue('left'===i.props.drawerPosition?0:i.state.containerWidth),null!=e){var o=e;i.props.useNativeAnimations&&(e0?o=Math.min(e+r/60,t):e>t&&r<0&&(o=Math.max(e+r/60,t))),i.state.drawerTranslation.setValue(o)}var s=0!==t;i.updateShowing(s),i.emitStateChanged(h,s),i.setState({drawerState:h}),i.props.hideStatusBar&&p.StatusBar.setHidden(s,i.props.statusBarAnimation||'slide'),p.Animated.spring(i.state.drawerTranslation,{velocity:r,bounciness:0,toValue:t,useNativeDriver:i.props.useNativeAnimations,speed:null!=n?n:void 0}).start((function(e){e.finished&&(i.emitStateChanged(c,s),i.setState({drawerOpened:s}),i.state.drawerState!==w&&i.setState({drawerState:c}),s?null==i.props.onDrawerOpen||i.props.onDrawerOpen():null==i.props.onDrawerClose||i.props.onDrawerClose())}))},i.openDrawer=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};i.animateDrawer(void 0,i.props.drawerWidth,e.velocity?e.velocity:0,e.speed),i.forceUpdate()},i.closeDrawer=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};i.animateDrawer(void 0,0,e.velocity?e.velocity:0,e.speed),i.forceUpdate()},i.renderOverlay=function(){(0,l.default)(i.openValue,'should be set');var e={opacity:i.state.drawerState!==c?i.openValue:i.state.drawerOpened?1:0,backgroundColor:i.props.overlayColor};return(0,_r(d[10]).jsx)(_r(d[11]).TapGestureHandler,{onHandlerStateChange:i.onTapHandlerStateChange,children:(0,_r(d[10]).jsx)(p.Animated.View,{pointerEvents:i.drawerShown?'auto':'none',ref:i.pointerEventsView,style:[v.overlay,e]})})},i.renderDrawer=function(){var e,t=i.props,r=t.drawerBackgroundColor,n=t.drawerWidth,o=t.drawerPosition,s=t.drawerType,u=t.drawerContainerStyle,w=t.contentContainerStyle,h='left'===o,f='back'!==s,S='front'!==s,y=p.I18nManager.isRTL?h:!h,b={backgroundColor:r,width:n},V=i.openValue;((0,l.default)(V,'should be set'),S)&&(e={transform:[{translateX:V.interpolate({inputRange:[0,1],outputRange:h?[0,n]:[0,-n],extrapolate:'clamp'})}]});var A=0;if(f){var C=h?-n:n;A=i.state.drawerState!==c?V.interpolate({inputRange:[0,1],outputRange:[C,0],extrapolate:'clamp'}):i.state.drawerOpened?0:C}var D={transform:[{translateX:A}],flexDirection:y?'row-reverse':'row'};return(0,_r(d[10]).jsxs)(p.Animated.View,{style:v.main,onLayout:i.handleContainerLayout,children:[(0,_r(d[10]).jsxs)(p.Animated.View,{style:['front'===s?v.containerOnBack:v.containerInFront,e,w],importantForAccessibility:i.drawerShown?'no-hide-descendants':'yes',children:['function'==typeof i.props.children?i.props.children(i.openValue):i.props.children,i.renderOverlay()]}),(0,_r(d[10]).jsx)(p.Animated.View,{pointerEvents:"box-none",ref:i.accessibilityIsModalView,accessibilityViewIsModal:i.drawerShown,style:[v.drawerContainer,D,u],children:(0,_r(d[10]).jsx)(p.View,{style:b,children:i.props.renderNavigationView(i.openValue)})})]})},i.setPanGestureRef=function(e){i.panGestureHandler.current=e,null==i.props.onGestureRef||i.props.onGestureRef(e)};var b=new p.Animated.Value(0),V=new p.Animated.Value(0),A=new p.Animated.Value(0);return i.state={dragX:b,touchX:V,drawerTranslation:A,containerWidth:0,drawerState:c,drawerOpened:!1},i.updateAnimatedEvent(t,i.state),i}return(0,i.default)(f,o),(0,t.default)(f,[{key:"shouldComponentUpdate",value:function(e,t){return this.props.drawerPosition===e.drawerPosition&&this.props.drawerWidth===e.drawerWidth&&this.props.drawerType===e.drawerType&&this.state.containerWidth===t.containerWidth||this.updateAnimatedEvent(e,t),!0}},{key:"render",value:function(){var e=this.props,t=e.drawerPosition,r=e.drawerLockMode,n=e.edgeWidth,i=e.minSwipeDistance,o='left'===t,s=(o?1:-1)*(this.drawerShown?-1:1),l=o?{left:0,width:this.drawerShown?void 0:n}:{right:0,width:this.drawerShown?void 0:n};return(0,_r(d[10]).jsx)(_r(d[12]).PanGestureHandler,{userSelect:this.props.userSelect,ref:this.setPanGestureRef,hitSlop:l,activeOffsetX:s*i,failOffsetY:[-15,15],onGestureEvent:this.onGestureEvent,onHandlerStateChange:this.openingHandlerStateChange,enableTrackpadTwoFingerGesture:this.props.enableTrackpadTwoFingerGesture,enabled:'locked-closed'!==r&&'locked-open'!==r,children:this.renderDrawer()})}}])})(o.Component);f.defaultProps={drawerWidth:200,drawerPosition:'left',useNativeAnimations:!0,drawerType:'front',edgeWidth:20,minSwipeDistance:3,overlayColor:'rgba(0, 0, 0, 0.7)',drawerLockMode:'unlocked',enableTrackpadTwoFingerGesture:!1},f.positions={Left:'left',Right:'right'};var v=p.StyleSheet.create({drawerContainer:Object.assign({},p.StyleSheet.absoluteFillObject,{zIndex:1001,flexDirection:'row'}),containerInFront:Object.assign({},p.StyleSheet.absoluteFillObject,{zIndex:1002}),containerOnBack:Object.assign({},p.StyleSheet.absoluteFillObject),main:{flex:1,zIndex:0,overflow:'hidden'},overlay:Object.assign({},p.StyleSheet.absoluteFillObject,{zIndex:1e3})})}),667,[8,17,18,3,2,56,153,24,6,515,193,539,540]); +__d((function(g,_r,_i,a,m,_e,d){Object.defineProperty(_e,"__esModule",{value:!0}),_e.default=void 0;var e=_r(d[0])(_r(d[1])),t=(function(e,t){if("function"==typeof WeakMap)var n=new WeakMap,o=new WeakMap;return(function(e,t){if(!t&&e&&e.__esModule)return e;var r,u,f={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return f;if(r=t?o:n){if(r.has(e))return r.get(e);r.set(e,f)}for(var i in e)"default"!==i&&{}.hasOwnProperty.call(e,i)&&((u=(r=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,i))&&(u.get||u.set)?r(f,i,u):f[i]=e[i]);return f})(e,t)})(_r(d[2])),n=(_r(d[0])(_r(d[3])),_r(d[0])(_r(d[4]))),o=_r(d[0])(_r(d[5])),r=(_r(d[6]),_r(d[0])(_r(d[7]))),u=_r(d[0])(_r(d[8])),f=_r(d[0])(_r(d[9]));_e.default=function(){return console.log=function(){},(0,t.useEffect)((function(){console.log("requestUserPermission-----"),(0,r.default)('android'),_r(d[10]).Production&&(0,f.default)().setCrashlyticsCollectionEnabled(!0)}),[]),(0,t.useEffect)((function(){var t,n;(0,u.default)().onMessage((t=(0,e.default)((function*(e){console.log("\ud83d\udce9 App Opened from Background:",e)})),function(e){return t.apply(this,arguments)})),(0,u.default)().onNotificationOpenedApp((function(e){console.log("\ud83d\udce9 App Opened from Background:",e)})),(0,u.default)().getInitialNotification().then((function(e){e&&console.log("\ud83d\udce9 App Opened from Quit State:",e)})),(0,u.default)().setBackgroundMessageHandler((n=(0,e.default)((function*(e){console.log("\ud83d\udce9 Background Notification Received:",e)})),function(e){return n.apply(this,arguments)}))}),[]),(0,_r(d[11]).jsx)(_r(d[12]).Provider,{store:o.default,children:(0,_r(d[11]).jsx)(n.default,{})})}}),668,[8,313,153,669,670,2235,6,1218,1219,1250,801,193,1135]); +__d((function(g,r,i,a,m,e,d){'use strict';Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var t=r(d[0]);e.default=t.NativeModules.SplashScreen}),669,[6]); +__d((function(g,_r,_i,a,m,_e,d){Object.defineProperty(_e,"__esModule",{value:!0}),_e.default=void 0;var e=_r(d[0])(_r(d[1])),t=(function(e,t){if("function"==typeof WeakMap)var n=new WeakMap,o=new WeakMap;return(function(e,t){if(!t&&e&&e.__esModule)return e;var r,s,i={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return i;if(r=t?o:n){if(r.has(e))return r.get(e);r.set(e,i)}for(var u in e)"default"!==u&&{}.hasOwnProperty.call(e,u)&&((s=(r=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,u))&&(s.get||s.set)?r(i,u,s):i[u]=e[u]);return i})(e,t)})(_r(d[2])),n=_r(d[3]),o=_r(d[0])(_r(d[4]));n.LogBox.ignoreLogs(['new NativeEventEmitter']),n.LogBox.ignoreAllLogs(),n.LogBox.ignoreLogs(["[react-native-gesture-handler] Seems like you're using an old API with gesture components, check out new Gestures system!"]);_e.default=(0,_r(d[9]).connect)(_r(d[10]).mapStateToProps,_r(d[10]).mapDispatchToProps)((function(r){var s=(0,_r(d[5]).GetPageTheme)(!1,''),i=(r.DarkMode,(0,t.useState)({})),u=(0,e.default)(i,2);u[0],u[1];return(0,t.useEffect)((function(){var e=o.default.addEventListener((function(e){var t=1==r.isInternetAvailable;0!=t&&t==e.isConnected||r.show_ConnChange({showConnChange:!0}),r.set_networkStatus({isInternetAvailable:e.isConnected})}));return function(){e()}}),[]),(0,_r(d[6]).jsxs)(_r(d[7]).NavigationContainer,{children:[(0,_r(d[6]).jsx)(n.StatusBar,{barStyle:"dark-content",backgroundColor:s.$status_bar_color}),(0,_r(d[6]).jsx)(_r(d[8]).AuthStack,Object.assign({},r))]})}))}),670,[8,26,153,6,671,679,193,682,778,1135,1167]); +__d((function(g,_r,_i,a,m,_e,d){Object.defineProperty(_e,"__esModule",{value:!0});var e={configure:!0,fetch:!0,refresh:!0,addEventListener:!0,useNetInfo:!0};_e.addEventListener=_,_e.configure=p,_e.default=void 0,_e.fetch=v,_e.refresh=y,_e.useNetInfo=h;var t=_r(d[0])(_r(d[1])),n=_r(d[2]),r=_r(d[3]),u=_r(d[0])(_r(d[4])),f=_r(d[0])(_r(d[5])),o=_r(d[0])(_r(d[6])),i=(function(e,t){if("function"==typeof WeakMap)var n=new WeakMap,r=new WeakMap;return(function(e,t){if(!t&&e&&e.__esModule)return e;var u,f,o={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return o;if(u=t?r:n){if(u.has(e))return u.get(e);u.set(e,o)}for(var i in e)"default"!==i&&{}.hasOwnProperty.call(e,i)&&((f=(u=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,i))&&(f.get||f.set)?u(o,i,f):o[i]=e[i]);return o})(e,t)})(_r(d[7]));Object.keys(i).forEach((function(t){"default"!==t&&"__esModule"!==t&&(Object.prototype.hasOwnProperty.call(e,t)||t in _e&&_e[t]===i[t]||Object.defineProperty(_e,t,{enumerable:!0,get:function(){return i[t]}}))}));var c=u.default,l=null,s=function(){return new o.default(c)};function p(e){c=Object.assign({},u.default,e),l&&(l.tearDown(),l=s()),'ios'===r.Platform.OS&&f.default.configure(e)}function v(e){return l||(l=s()),l.latest(e)}function y(){return l||(l=s()),l._fetchCurrentState()}function _(e){return l||(l=s()),l.add(e),function(){l&&l.remove(e)}}function h(e){e&&p(e);var r=(0,n.useState)({type:i.NetInfoStateType.unknown,isConnected:null,isInternetReachable:null,details:null}),u=(0,t.default)(r,2),f=u[0],o=u[1];return(0,n.useEffect)((function(){return _(o)}),[]),f}_e.default={configure:p,fetch:v,refresh:y,addEventListener:_,useNetInfo:h}}),671,[8,26,153,6,672,673,675,678]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var t={reachabilityUrl:'https://clients3.google.com/generate_204',reachabilityMethod:'HEAD',reachabilityTest:function(t){return Promise.resolve(204===t.status)},reachabilityShortTimeout:5e3,reachabilityLongTimeout:6e4,reachabilityRequestTimeout:15e3,reachabilityShouldRun:function(){return!0},shouldFetchWiFiSSID:!1,useNativeReachability:!0};e.default=t}),672,[]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var t=r(d[0]),n=r(d[1])(r(d[2]));if(!n.default)throw new Error("@react-native-community/netinfo: NativeModule.RNCNetInfo is null. To fix this issue try these steps:\n\n\u2022 Run `react-native link @react-native-community/netinfo` in the project root.\n\u2022 Rebuild and re-run the app.\n\u2022 If you are using CocoaPods on iOS, run `pod install` in the `ios` directory and then rebuild and re-run the app. You may also need to re-open Xcode to get the new pods.\n\u2022 Check that the library was linked correctly when you used the link command by running through the manual installation instructions in the README.\n* If you are getting this error while unit testing you need to mock the native module. Follow the guide in the README.\n\nIf none of these fix the issue, please open an issue on the Github repository: https://github.com/react-native-community/react-native-netinfo");var o=null;e.default=Object.assign({},n.default,{get eventEmitter(){return o||(o=new t.NativeEventEmitter(n.default)),o}})}),673,[6,8,674]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var t=r(d[0]).NativeModules.RNCNetInfo;e.default=t}),674,[6]); +__d((function(g,_r,_i,a,m,_e,d){Object.defineProperty(_e,"__esModule",{value:!0}),_e.default=void 0;var t=_r(d[0])(_r(d[1])),e=_r(d[0])(_r(d[2])),n=_r(d[0])(_r(d[3])),i=_r(d[0])(_r(d[4])),r=_r(d[0])(_r(d[5])),s=(function(t,e){if("function"==typeof WeakMap)var n=new WeakMap,i=new WeakMap;return(function(t,e){if(!e&&t&&t.__esModule)return t;var r,s,u={__proto__:null,default:t};if(null===t||"object"!=typeof t&&"function"!=typeof t)return u;if(r=e?i:n){if(r.has(t))return r.get(t);r.set(t,u)}for(var c in t)"default"!==c&&{}.hasOwnProperty.call(t,c)&&((s=(r=Object.defineProperty)&&Object.getOwnPropertyDescriptor(t,c))&&(s.get||s.set)?r(u,c,s):u[c]=t[c]);return u})(t,e)})(_r(d[6]));_e.default=(0,e.default)((function e(u){var c,o=this;(0,n.default)(this,e),this._nativeEventSubscription=null,this._subscriptions=new Set,this._latestState=null,this._handleNativeStateUpdate=function(t){o._internetReachability.update(t);var e=o._convertState(t);o._latestState=e,o._subscriptions.forEach((function(t){return t(e)}))},this._handleInternetReachabilityUpdate=function(t){if(o._latestState){var e=Object.assign({},o._latestState,{isInternetReachable:t});o._latestState=e,o._subscriptions.forEach((function(t){return t(e)}))}},this._fetchCurrentState=(c=(0,t.default)((function*(t){var e=yield i.default.getCurrentState(t);o._internetReachability.update(e);var n=o._convertState(e);return t||(o._latestState=n,o._subscriptions.forEach((function(t){return t(n)}))),n})),function(t){return c.apply(this,arguments)}),this._convertState=function(t){return'boolean'==typeof t.isInternetReachable?t:Object.assign({},t,{isInternetReachable:o._internetReachability.currentState()})},this.latest=function(t){return t?o._fetchCurrentState(t):o._latestState?Promise.resolve(o._latestState):o._fetchCurrentState()},this.add=function(t){o._subscriptions.add(t),o._latestState?t(o._latestState):o.latest().then(t)},this.remove=function(t){o._subscriptions.delete(t)},this.tearDown=function(){o._internetReachability&&o._internetReachability.tearDown(),o._nativeEventSubscription&&o._nativeEventSubscription.remove(),o._subscriptions.clear()},this._internetReachability=new r.default(u,this._handleInternetReachabilityUpdate),this._nativeEventSubscription=i.default.eventEmitter.addListener(s.DEVICE_CONNECTIVITY_EVENT,this._handleNativeStateUpdate),this._fetchCurrentState()}))}),675,[8,313,18,17,673,676,677]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var t=r(d[0])(r(d[1])),n=r(d[0])(r(d[2]));e.default=(0,t.default)((function t(c,l){var u=this;(0,n.default)(this,t),this._isInternetReachable=void 0,this._currentInternetReachabilityCheckHandler=null,this._currentTimeoutHandle=null,this._setIsInternetReachable=function(t){u._isInternetReachable!==t&&(u._isInternetReachable=t,u._listener(u._isInternetReachable))},this._setExpectsConnection=function(t){null!==u._currentInternetReachabilityCheckHandler&&(u._currentInternetReachabilityCheckHandler.cancel(),u._currentInternetReachabilityCheckHandler=null),null!==u._currentTimeoutHandle&&(clearTimeout(u._currentTimeoutHandle),u._currentTimeoutHandle=null),t&&u._configuration.reachabilityShouldRun()?(u._isInternetReachable||u._setIsInternetReachable(null),u._currentInternetReachabilityCheckHandler=u._checkInternetReachability()):u._setIsInternetReachable(!1)},this._checkInternetReachability=function(){var t,n=fetch(u._configuration.reachabilityUrl,{method:u._configuration.reachabilityMethod,cache:'no-cache'}),c=new Promise((function(n,c){t=setTimeout((function(){return c('timedout')}),u._configuration.reachabilityRequestTimeout)})),l=function(){},o=new Promise((function(t,n){l=function(){return n('canceled')}}));return{promise:Promise.race([n,c,o]).then((function(t){return u._configuration.reachabilityTest(t)})).then((function(t){u._setIsInternetReachable(t);var n=u._isInternetReachable?u._configuration.reachabilityLongTimeout:u._configuration.reachabilityShortTimeout;u._currentTimeoutHandle=setTimeout(u._checkInternetReachability,n)})).catch((function(t){'canceled'!==t&&(u._setIsInternetReachable(!1),u._currentTimeoutHandle=setTimeout(u._checkInternetReachability,u._configuration.reachabilityShortTimeout))})).then((function(){clearTimeout(t)}),(function(n){throw clearTimeout(t),n})),cancel:l}},this.update=function(t){'boolean'==typeof t.isInternetReachable&&u._configuration.useNativeReachability?u._setIsInternetReachable(t.isInternetReachable):u._setExpectsConnection(t.isConnected)},this.currentState=function(){return u._isInternetReachable},this.tearDown=function(){null!==u._currentInternetReachabilityCheckHandler&&(u._currentInternetReachabilityCheckHandler.cancel(),u._currentInternetReachabilityCheckHandler=null),null!==u._currentTimeoutHandle&&(clearTimeout(u._currentTimeoutHandle),u._currentTimeoutHandle=null)},this._configuration=c,this._listener=l}))}),676,[8,18,17]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.DEVICE_CONNECTIVITY_EVENT=void 0;e.DEVICE_CONNECTIVITY_EVENT='netInfo.networkStatusDidChange'}),677,[]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.NetInfoStateType=e.NetInfoCellularGeneration=void 0;e.NetInfoStateType=(function(n){return n.unknown="unknown",n.none="none",n.cellular="cellular",n.wifi="wifi",n.bluetooth="bluetooth",n.ethernet="ethernet",n.wimax="wimax",n.vpn="vpn",n.other="other",n})({}),e.NetInfoCellularGeneration=(function(n){return n["2g"]="2g",n["3g"]="3g",n["4g"]="4g",n["5g"]="5g",n})({})}),678,[]); +__d((function(o,t,e,i,r,n,a){Object.defineProperty(n,"__esModule",{value:!0}),n.globalStyles=n.deffontfamily_bold=n.deffontfamily=n.customeButtons=n.customStyles=n.customCamera=n.WP=n.STATUSBAR_HEIGHT=n.ModalStyles=n.HP=n.GetPageTheme=void 0;var d=t(a[0]),l=!1,g='',c=n.GetPageTheme=function(){var o=arguments.length>0&&void 0!==arguments[0]?arguments[0]:l;return'Project'==(arguments.length>1&&void 0!==arguments[1]?arguments[1]:g)?t(a[1]).MainThemeLight:1==o?t(a[1]).DarkTheme:t(a[1]).PrimaryTheme},h=(n.WP=t(a[2]).widthPercentageToDP,n.HP=t(a[2]).heightPercentageToDP,20),s=n.STATUSBAR_HEIGHT='ios'===d.Platform.OS?70:d.StatusBar.currentHeight,p='ios'===d.Platform.OS?20:0,m=(d.Platform.OS,n.deffontfamily='Roboto-Regular'),f=n.deffontfamily_bold='Roboto-Bold';n.globalStyles=function(){var o=c(arguments.length>0&&void 0!==arguments[0]?arguments[0]:l,arguments.length>1&&void 0!==arguments[1]?arguments[1]:g);return d.StyleSheet.create({statusBar:{height:s,width:(0,t(a[2]).widthPercentageToDP)('100%')},drawerScreenHdr_bg:{backgroundColor:'#000',borderBottomWidth:0,borderBottomColor:t(a[1]).PrimaryTheme.$secondary_color_light,paddingHorizontal:10,paddingBottom:5,paddingTop:s+10,marginTop:'ios'===d.Platform.OS?-60:0},dScreenHdr_Content:{flexDirection:'row',alignItems:'center',position:'relative'},drawerScreenHdr_title:{width:'100%',textAlign:'left',fontSize:16,fontWeight:'500',color:o.$accent_color,paddingLeft:50,paddingRight:100,fontFamily:m},dScreen_LeftContainer:{position:'absolute',left:0},toggleDrawerBtn:{paddingVertical:5,paddingHorizontal:10},dScreen_RightContainer:{position:'absolute',right:0,flexDirection:'row',alignItems:'center'},drawerProjectId:{fontSize:14,fontWeight:'500',color:o.$accent_color,paddingHorizontal:5,fontFamily:m},drawerNotifIcon:{marginLeft:5,padding:5},drawerChatAiIcon:{marginLeft:'auto',padding:5},drawerContent:{flex:1,marginTop:-10,paddingTop:0},drawerContentScroll:{},drawerContentScrollInner:{paddingTop:10,padding:0},cardTitle:{fontWeight:'normal',fontSize:(0,t(a[2]).heightPercentageToDP)('1.8%'),fontFamily:m},cardImage:{width:30,height:30,resizeMode:'contain'},title:{fontSize:15,marginTop:10,fontWeight:'500',textTransform:'capitalize',color:o.$text_color,textAlign:'center',marginLeft:-5,fontFamily:m},caption:{fontSize:(0,t(a[2]).heightPercentageToDP)('1.7%'),lineHeight:14,fontFamily:m},row:{marginTop:20,flexDirection:'row',alignItems:'center'},section:{flexDirection:'row',alignItems:'center',marginRight:15},paragraph:{fontWeight:'600',marginRight:3},drawerSection:{marginTop:7,borderBottomColor:'#fff',borderBottomWidth:0},bottomDrawerSecion:{borderTopColor:'#f4f4f4',borderTopWidth:1,borderBottomWidth:0,marginBottom:0},bottomDrawerCon:{padding:5,flexDirection:'column',alignItems:'center'},bottomDrawerIcon:{width:'50%',height:30,resizeMode:'contain'},bottomDrawerLabel:{fontSize:14,color:o.$text_color,fontFamily:m},preferenceCon:{padding:10},preferenceTitle:{fontSize:14,color:o.$text_color,fontFamily:m},preference:{flexDirection:'row',justifyContent:'space-between',marginTop:12},userInfoSection:{padding:0,borderBottomColor:'#f4f4f4',borderBottomWidth:1},container:{flex:1,alignItems:'center',backgroundColor:o.$accent_color,fontFamily:m},logo:{resizeMode:'contain',width:(0,t(a[2]).widthPercentageToDP)('50%')},drawerIcon:{width:30,height:30,left:2,position:"absolute",paddingLeft:15},inputStyle:{width:(0,t(a[2]).widthPercentageToDP)('85%'),height:(0,t(a[2]).heightPercentageToDP)('8%'),marginBottom:12},otpStyle:{marginBottom:12,borderRadius:8,width:(0,t(a[2]).widthPercentageToDP)('15%'),height:(0,t(a[2]).heightPercentageToDP)('7%')},drawerItemStyle:{flexDirection:'row',paddingHorizontal:10,paddingVertical:8.5,alignItems:'center'},drawerLogo:{width:(0,t(a[2]).widthPercentageToDP)('50%')-20,height:60,resizeMode:'contain'},drawerItemIcon:{width:30,justifyContent:'center',flexDirection:'row'},drawerLabel:{fontSize:15,fontWeight:'400',color:o.$accent_color2,marginLeft:10,fontFamily:m},otpContainer:{width:(0,t(a[2]).widthPercentageToDP)('85%'),flexDirection:'row',flexWrap:'wrap',justifyContent:'space-between'},labelStyle:{color:o.$text_color_700,textAlign:'left',width:(0,t(a[2]).widthPercentageToDP)('85%'),fontSize:(0,t(a[2]).heightPercentageToDP)('1.7%'),marginBottom:20,justifyContent:'flex-start',fontFamily:m}})},n.customStyles=function(){var o=c(arguments.length>0&&void 0!==arguments[0]?arguments[0]:l,arguments.length>1&&void 0!==arguments[1]?arguments[1]:g);return d.StyleSheet.create({drawerSubTitle:{fontSize:12,color:o.$text_color,fontFamily:m},loginIllutration:{},moreIconMpin:{position:'absolute',right:12,top:16,width:40,height:40,borderRadius:24,justifyContent:'center',alignItems:'center'},performics_logo:{width:(0,t(a[2]).widthPercentageToDP)('50%'),height:40,marginTop:20,resizeMode:'contain'},company_logo:{width:(0,t(a[2]).widthPercentageToDP)('100%')-40,height:100,resizeMode:'contain'},loginScrollCon:{flex:1,width:(0,t(a[2]).widthPercentageToDP)('100%')},loginCon:{flex:1,alignItems:"center",position:'relative'},projectScrollCon:{width:(0,t(a[2]).widthPercentageToDP)('100%'),flex:1},projectCon:{alignItems:"center",position:'relative'},loginScrollCon2:{flex:1,width:(0,t(a[2]).widthPercentageToDP)('100%')},projectPageWrapper:{width:'100%',height:(0,t(a[2]).heightPercentageToDP)('100%')},footerView:{width:'100%',alignItems:'center',marginBottom:20},signatureBox:{alignItems:"center",width:(0,t(a[2]).widthPercentageToDP)('100%'),padding:10},signatureText:{color:o.$text_color_light,fontSize:12,fontWeight:'400',fontFamily:m,textAlign:'center'},signatureLogo:{resizeMode:'contain',width:(0,t(a[2]).widthPercentageToDP)('30%'),height:50,marginTop:5},pageContentWrapper:{backgroundColor:o.$bg_color,borderTopLeftRadius:h,borderTopRightRadius:h,elevation:3,paddingTop:10,flex:1},pageCWrap2:{paddingHorizontal:10},pageContentWrapper_bgLight:{backgroundColor:'#efefef'},orderDetails_scroll:{justifyContent:'center',padding:10,paddingBottom:65,paddingTop:5},NB_quickL_IconS:{backgroundColor:'#fff',height:45,width:45,borderRadius:50,padding:10,alignItems:'center',justifyContent:'center'},NB_background:{backgroundColor:'#fff',borderTopLeftRadius:20,borderTopRightRadius:20,shadowColor:'#3d3d3d',shadowOffset:{width:0,height:2},marginTop:-2,shadowOpacity:.1,shadowRadius:2,elevation:2,paddingVertical:15,paddingHorizontal:10},NB_text:{color:'black',fontSize:15,fontFamily:m},NB_tblHdrparent:{paddingLeft:5,paddingRight:5,paddingTop:10,width:((0,t(a[2]).widthPercentageToDP)('100%')-20)/4},NB_tblHdr:{width:'90%',height:60,backgroundColor:'#eaf0fe',borderRadius:10,alignItems:'center',flexDirection:'row',justifyContent:'center',fontFamily:m},NB_tblHdr2:{paddingBottom:10,fontFamily:m},NB_tblIconItem:{alignContent:'center',alignItems:'center'},NB_tblTextItem:{textAlign:'center',fontFamily:m,alignContent:'center',alignItems:'center',fontSize:10,marginHorizontal:2,paddingHorizontal:5,color:o.$text_color,paddingTop:5},NB_bannerImgBg:{bpppporderTopLeftRadius:0,borderTopRightRadius:0,backgroundColor:o.$bg_color,shadowColor:'#3d3d3d',shadowOffset:{width:0,height:2},shadowOpacity:.1,shadowRadius:2,elevation:2,paddingVertical:15,paddingHorizontal:10,width:'100%',marginTop:10,marginBottom:10},NB_bannerCard:{width:(0,t(a[2]).widthPercentageToDP)('100%')-40,height:172,resizeMode:'contain',marginRight:10,soverflow:'hidden',elevation:1,borderRadius:20,shadowColor:'#d3d3d3'},NB_bannerCardImg:{width:'100%',height:170,backgroundColor:'#efefef',borderRadius:20},NB_bannerDot:{width:10,height:10,borderRadius:5,elevation:2},NB_PerfBg:{borderTopLeftRadius:0,borderTopRightRadius:0,shadowColor:'#3d3d3d',shadowOffset:{width:0,height:2},shadowOpacity:.1,shadowRadius:2,elevation:2,paddingVertical:15,paddingHorizontal:5,marginBottom:10},NB_PerfItem:{paddingLeft:5,paddingRight:5,width:((0,t(a[2]).widthPercentageToDP)('100%')-10)/2},NB_PerfItemInner:{width:'100%',height:140,backgroundColor:'#fbe7e8',borderRadius:5},NB_PerfIcon:{alignContent:'flex-end',alignItems:'flex-end'},NB_PerfLbl:{fontSize:12,color:o.$text_color,marginTop:15,paddingLeft:5,fontWeight:'600',fontFamily:m},NB_PerfValue:{fontSize:25,marginLeft:20,color:o.$text_color,fontWeight:'600',fontFamily:m},NB_PerfRow:{flexDirection:'row',marginTop:10},NB_PerfCol1:{width:'70%'},NB_PerfCol2:{width:'30%'},NBPerf_listStyle:{borderBottomColor:'#f4f1e0',borderBottomWidth:2,paddingBottom:10,paddingTop:10,marginBottom:10},sf_view:{width:500,height:2,marginTop:10,elevation:2,backgroundColor:'#efefef',marginBottom:10},mtd_view:{width:2,height:20,marginTop:15,elevation:2,backgroundColor:'#fbd9d3',marginLeft:2,marginRight:2},sfHdrparent:{paddingTop:10,width:'100%',height:200},mtdHdr:{width:'100%',flexDirection:'row',marginLeft:-10},sfTextItem:{fontSize:12,color:o.$text_color,fontWeight:'600',paddingLeft:10,paddingRight:10,fontFamily:m},sfTextValue:{fontSize:20,color:o.$text_color,fontWeight:'600',marginTop:2,fontFamily:m},NB_PerfD_row:{width:'100%',flexDirection:'row',paddingHorizontal:5},NB_PerfD_col:{width:'50%',height:160},NB_PerfD_colInner:{paddingLeft:10,paddingRight:10,width:'100%',height:'100%',paddingTop:5,borderRadius:5},NB_PerfD_col1:{paddingRight:5},NB_PerfD_col2:{paddingLeft:5},NB_PerfD_colInner1:{backgroundColor:'#f4f1e0'},NB_PerfD_colInner2:{backgroundColor:'#fbe7e8'},NB_PerfD_ItemWrap:{width:'100%',flexDirection:'row'},NB_PerfD_IHdr_Txt:{fontSize:20,color:o.$text_color,fontWeight:'600',marginTop:15,fontFamily:m},NB_PerfD_rowI:{flexDirection:'row',alignItems:'center'},NB_PerfD_rowI2:{},NB_PerfD_colI:{alignItems:'flex-end',height:40},NB_PerfD_colI1:{paddingRight:10},NB_PerfD_colI2:{paddingLeft:10},NB_PerfD_ICon_Lbl:{fontWeight:'600',color:'black',fontSize:12,fontFamily:m},NB_PerfD_ICon_Val:{fontSize:20,textAlign:'center',color:'black',paddingLeft:10,fontWeight:'600',fontFamily:m},NB_PerfD_ICon_Separator:{width:2,height:20,elevation:2,backgroundColor:'#fffec8'},NB_PerfD_ICon_Separator2:{width:2,height:20,elevation:2,backgroundColor:'#fbd9d3'},textplanned:{fontSize:12,textAlign:'center',color:'black',padding:7,fontWeight:'600',fontFamily:m},itemTextplanned:{fontWeight:'600',color:'black',fontSize:12,paddingLeft:7,paddingRight:7,textAlign:'center',fontFamily:m},NB_FTDcolWrap:{height:'100%'},NB_FTDcol:{justifyContent:'center',height:'100%',alignItems:'center'},NB_MTDcol:{justifyContent:'center',height:'100%',alignItems:'center'},sfHdrTV:{width:'100%',height:80,flexDirection:'row',marginLeft:-15},mtdHdrTV:{width:'100%',height:80,flexDirection:'row',marginHorizontal:2},mb7:{marginBottom:7},mb10:{marginBottom:10},mb20:{marginBottom:20},mb30:{marginBottom:30},mb40:{marginBottom:40},mb50:{marginBottom:50},mb60:{marginBottom:60},mb70:{marginBottom:70},mb80:{marginBottom:80},mb90:{marginBottom:90},mb100:{marginBottom:100},mt10:{marginTop:10},mt20:{marginTop:20},mt30:{marginTop:30},mt40:{marginTop:40},mt50:{marginTop:50},mt60:{marginTop:60},mt70:{marginTop:70},mt80:{marginTop:80},mt90:{marginTop:90},mt100:{marginTop:100},pl10:{paddingLeft:10},pl20:{paddingLeft:20},pl30:{paddingLeft:30},pl40:{paddingLeft:40},pl50:{paddingLeft:50},pr10:{paddingRight:10},pr20:{paddingRight:20},pr30:{paddingRight:30},pr40:{paddingRight:40},pr50:{paddingRight:50},mr10:{marginRight:10},mr20:{marginRight:20},mr30:{marginRight:30},ml10:{marginLeft:10},ml20:{marginLeft:20},ml30:{marginLeft:30},ml40:{marginLeft:40},ml50:{marginLeft:50},pt10:{paddingTop:10},pt20:{paddingTop:20},pt30:{paddingTop:30},pt40:{paddingTop:40},pt50:{paddingTop:50},pb10:{paddingBottom:10},pb20:{paddingBottom:20},pb30:{paddingBottom:30},pb40:{paddingBottom:40},pb50:{paddingBottom:50},zIndex0:{zIndex:0},logoImage_con:{flexDirection:'row',justifyContent:'center',marginBottom:10},logoImage:{width:100,height:50},drawerInfoCon:{padding:10,paddingLeft:0,paddingTop:s+10,alignItems:'center',marginTop:'ios'===d.Platform.OS?-60:0},drawerLogo2:{width:100,height:50},pageText:{color:o.$text_color_dark,fontSize:16,fontWeight:'500',fontFamily:m,textAlign:'center',marginBottom:10},pagedescText:{color:o.$text_color,fontSize:13,fontFamily:m,fontWeight:'400',textAlign:'center',marginBottom:5},formCon:{},formGroup:{position:'relative'},inputStyle:{textAlign:'left',fontFamily:m,backgroundColor:o.$secondary_color_light,width:(0,t(a[2]).widthPercentageToDP)('85%'),borderRadius:7,paddingVertical:5,paddingHorizontal:15,height:50,color:o.$accent_color2},formInputLabel:{position:'absolute',left:40,zIndex:1,color:o.$placeholder_color,top:15},formInputLeftIcon:{position:'absolute',left:15,top:15},passField:{position:'relative'},show_pass_btn:{position:'absolute',top:0,right:0,width:40,height:50,alignItems:'center',justifyContent:'center'},keyba_view:{flex:1,width:(0,t(a[2]).widthPercentageToDP)('100%'),alignItems:'center'},keyba_view_qr:{flex:1,width:(0,t(a[2]).widthPercentageToDP)('100%')},qrCodeScanner:{fontSize:18,fontWeight:'400',width:'78%',color:'black',backgroundColor:o.$secondary_color_light,padding:10,borderRadius:8,borderWidth:.3,borderColor:'#ccc',marginVertical:5,elevation:1},qrCodeInputStyle:{fontWeight:'bold',alignContent:'center',textAlign:'auto',color:'black',marginTop:10},keyba_viewContent:{width:'100%',overflow:'hidden'},keyba_inner_view:{flex:1,width:(0,t(a[2]).widthPercentageToDP)('100%'),alignItems:'center',position:'relative'},pass_input:{paddingRight:40},form_label:{color:o.$text_color,fontSize:14,fontWeight:'400',textAlign:'left',paddingHorizontal:0,fontFamily:m,marginBottom:10},otp_inputStyle:{textAlign:'center',backgroundColor:o.$secondary_color_light,width:(0,t(a[2]).widthPercentageToDP)('85%')/4-10,borderRadius:4,paddingVertical:10,paddingHorizontal:15,height:50,color:o.$accent_color2,marginBottom:10,marginRight:10,fontSize:25,fontFamily:m},verify_otp_inputStyle:{textAlign:'center',backgroundColor:o.$secondary_color_light,width:(0,t(a[2]).widthPercentageToDP)('80%')/4-30,borderRadius:4,paddingVertical:10,paddingHorizontal:15,height:48,color:o.$accent_color2,marginBottom:10,marginRight:8,fontSize:22,fontFamily:m},otp_field:{flexDirection:'row'},otp_hiddeninput:{display:'none'},fullwebview:{width:'100%',height:'100%',flex:1,marginBottom:0},roundScrollWrapper:{paddingTop:10,flex:1,width:'100%'},roundScrollZIndex:{zIndex:1},roundScrollCon:{backgroundColor:o.$bg_color,borderTopLeftRadius:h,borderTopRightRadius:h},roundScrollInner:{height:'100%',width:'100%',flex:1,backgroundColor:o.$bg_color,borderTopLeftRadius:h,borderTopRightRadius:h,elevation:3,paddingTop:40},NB_IRAlertWrap:{width:'100%',backgroundColor:'red',flexDirection:'row',alignItems:'center',paddingHorizontal:10,paddingVertical:5,borderRadius:20,marginBottom:5,elevation:3,shadowOpacity:.2,shadowOffset:{width:0,height:2}},NB_IRAlertTxt:{color:o.$accent_color,marginLeft:10,fontSize:12,width:'85%',fontFamily:m},webViewCon:{height:'100%',flex:1,borderTopLeftRadius:h,borderTopRightRadius:h,paddingTop:0},headetBgImage:{height:(0,t(a[2]).heightPercentageToDP)('20%'),width:(0,t(a[2]).widthPercentageToDP)('100%')+2,position:'relative',justifyContent:'center',alignItems:'center'},headerTitle:{color:o.$accent_color,fontSize:20,width:150,textAlign:'right',fontFamily:m},headerImg:{width:(0,t(a[2]).widthPercentageToDP)('40%'),height:120,resizeMode:'contain',top:28,left:-30},headerLeftIcon:{width:60,height:60,alignItems:'center',justifyContent:'center',marginLeft:-10},headerContent:{flex:1,flexDirection:'row',alignItems:'center',justifyContent:'space-between',position:'absolute',width:(0,t(a[2]).widthPercentageToDP)('100%'),paddingHorizontal:20},teaml_name:{color:o.$text_color,fontSize:14,fontWeight:'400',textAlign:'left',fontFamily:m,paddingLeft:20,paddingRight:10},teaml_img:{width:20,height:20},teaml:{flexDirection:'row',paddingHorizontal:20,marginBottom:10,borderWidth:2,borderColor:o.$secondary_color_light,shadowOffset:{width:0,height:2},borderRadius:5,paddingVertical:10,alignItems:'center'},iteml_con:{width:'100%',marginTop:10,paddingBottom:50,paddingHorizontal:20,paddingTop:10},iteml_conR:{paddingBottom:20,paddingTop:10,paddingHorizontal:10},iteml_conR2:{marginBottom:20,backgroundColor:o.$bg_color,borderRadius:5,elevation:5,shadowColor:'#000',shadowOffset:{width:0,height:3},shadowOpacity:.15},storel_Con:{width:'100%',height:'100%',paddingBottom:150},Contract_storel_Con:{width:'100%',height:'100%',paddingBottom:80},listcon:{width:'100%',height:'100%'},storeR_listcon:{width:'100%',height:'100%',paddingHorizontal:0,paddingBottom:30},storelist_parentwrap:{width:'100%'},storeTab_Con:{width:'100%',minHeight:40},storeTab_MenuCon2:{width:'94%',marginTop:0,marginBottom:0,marginHorizontal:10,borderBottomColor:o.$text_color_light2},storeTab_pillActive2:{backgroundColor:'#0077C7'},storeTab_MenuCon:{width:'94%',marginTop:0,marginBottom:0,marginHorizontal:10,borderBottomColor:o.$text_color_light2,borderBottomWidth:1},storeTab_Menu:{alignItems:'center',marginBottom:10},storeTab_pill:{paddingHorizontal:20,paddingVertical:5,borderRadius:30,backgroundColor:'#efefef',marginRight:7},storeTab_pillText:{color:o.$text_color,fontSize:14,fontWeight:'500',fontFamily:m},storeTab_pillActive:{backgroundColor:'#ffb020'},storeTab_pillActiveText:{color:'#fff'},storel:{flexDirection:'row',paddingRight:10,marginBottom:10,backgroundColor:o.$bg_color,borderRadius:5,paddingVertical:10,alignItems:'center',elevation:5,shadowColor:'#000',shadowOffset:{width:0,height:3},shadowOpacity:.15},storel_card_outer:{paddingVertical:5,paddingHorizontal:10,position:'relative',width:'100%'},storel_card:{flexDirection:'row',alignItems:'center'},storel_card_content:{marginHorizontal:5,width:'100%',flexDirection:'row',alignItems:'baseline'},storel_card_title:{fontSize:15,color:o.$text_color,fontWeight:'500',fontFamily:m},storel_card_subtitle:{marginLeft:10,paddingLeft:10,borderLeftColor:o.$text_color_light,borderLeftWidth:1},storel_card_subtitleTxt:{fontSize:12,color:o.$text_color_light,fontFamily:m},storel_details:{paddingHorizontal:5},storel_code:{flexDirection:'row',marginTop:0,paddingTop:5,width:'100%'},storel_codeCon:{marginRight:10,flexDirection:'row',alignItems:'center'},storel_codeConAddr:{alignItems:'flex-start'},storel_codeIcon:{fontSize:20,marginRight:10,fontFamily:m},storel_codeBorder:{borderRightColor:o.$secondary_color_dark,borderRightWidth:1},storel_codeBorderTop:{borderTopColor:o.$secondary_color_light,borderTopWidth:1},storel_codeBorderBottom:{borderBottomColor:o.$secondary_color_light,borderBottomWidth:1,paddingBottom:4,marginBottom:3},storel_codeLbl:{fontSize:13,color:o.$text_colorblack,marginRight:5,flexWrap:'wrap',fontWeight:'600',fontFamily:m},storel_codeText:{fontSize:12,color:o.$text_color,marginRight:5,fontFamily:m},storel_codeTextAddr:{width:'80%'},storel_usWrap:{width:'100%',position:'relative',justifyContent:'center',paddingVertical:10},storel_usCon:{flexDirection:'row',alignItems:'center'},storel_usConBtn:{borderRadius:30,width:140,position:'relative',backgroundColor:o.$secondary_color_light,paddingHorizontal:5,paddingVertical:6,elevation:3,shadowOpacity:.2,shadowOffset:{width:0,height:2}},storel_usConBtn2:{width:150},storel_usBtnText:{paddingRight:5,marginRight:5,color:o.$text_color},storel_usBtnRemoveIcon:{backgroundColor:'#fff',position:'absolute',top:0,bottom:0,right:0,borderTopRightRadius:30,borderBottomRightRadius:30,paddingHorizontal:10,alignItems:'center',justifyContent:'center'},storel_usText:{marginLeft:5,color:o.$text_color,fontSize:13,fontFamily:m},storel_geotag_btn:{position:'absolute',top:-15,right:-10,width:50,height:50,borderRadius:25,alignItems:'center',justifyContent:'center'},storel_CheckOutBtn:{position:'absolute',right:0,borderRadius:30,backgroundColor:o.$primary_color,paddingHorizontal:15,paddingVertical:6,elevation:3,shadowOpacity:.2,shadowOffset:{width:0,height:2}},storel_cancelBtn:{},storel_CheckOutBtnText:{color:o.$accent_color,fontSize:14,fontWeight:'500',fontFamily:m},storel_IRBtnWrap:{width:'100%'},storel_uploadIRBtn:{borderRadius:30,width:150,alignItems:'center',backgroundColor:o.$primary_color,paddingHorizontal:5,paddingVertical:6,elevation:3,shadowOpacity:.2,shadowOffset:{width:0,height:2}},storel_uploadIRBtnText:{color:o.$accent_color},storel_searchbar:{marginTop:10,marginHorizontal:10,backgroundColor:o.$secondary_color_light,height:40,borderRadius:4,paddingHorizontal:10,elevation:1,shadowColor:'#000',shadowOpacity:.15,shadowOffset:{width:0,height:2},flexDirection:'row'},storel_searchbar2:{marginHorizontal:10,backgroundColor:o.$secondary_color_light,height:40,borderRadius:4,paddingHorizontal:10,elevation:1,shadowColor:'#000',shadowOpacity:.15,shadowOffset:{width:0,height:2},flexDirection:'row'},storel_searchInput:{width:'86%',fontSize:13,color:o.$text_color,fontFamily:m},storel_searchBtn:{width:40,height:40,top:0,right:0,position:'absolute',backgroundColor:o.$primary_color,borderTopRightRadius:4,borderBottomRightRadius:4,alignItems:'center',justifyContent:'center'},storel_searchBtnIcon:{marginTop:-2},colorDescriptionWrap:{marginTop:5,marginHorizontal:10,backgroundColor:o.$bg_color,paddingVertical:5,borderRadius:4,paddingHorizontal:10,flexDirection:'row',elevation:1,shadowColor:'#000',shadowOpacity:.2,shadowOffset:{width:0,height:2}},colorBoxCon:{flexDirection:'row',alignItems:'center',marginRight:20},colorBox:{elevation:1,shadowColor:'#000',borderRadius:4,shadowOpacity:.15,shadowOffset:{width:0,height:2},width:20,height:20},colorBox1:{backgroundColor:o.$fifth_color},colorBox2:{backgroundColor:o.$secondary_color_light},colorDesc:{fontSize:12,color:o.$text_color,marginLeft:5,flexWrap:'wrap',fontFamily:m},pageHdrWrap:{position:'absolute',top:s+(70+('ios'==d.Platform.OS?0:5)),zIndex:9,marginHorizontal:10,justifyContent:'center',backgroundColor:o.$primary_color,paddingVertical:5,borderRadius:20,paddingHorizontal:10,flexDirection:'row',flexWrap:'wrap'},pageHdrWrapText:{textAlign:'center',fontSize:13,color:o.$accent_color,flexWrap:'wrap',fontFamily:m},storelR:{flexDirection:'row',paddingRight:10,marginBottom:5,paddingBottom:5,paddingTop:10,borderBottomColor:o.$fourth_color,borderBottomWidth:1},storelR_last:{borderBottomWidth:0,paddingBottom:0,marginBottom:0},dstorel_card_outer:{paddingVertical:0,paddingHorizontal:10,width:'100%'},dstorel_row:{flexDirection:'row',width:'100%',paddingBottom:5,paddingTop:5,borderBottomWidth:1,borderBottomColor:o.$secondary_color_light},dstorel_row_last:{borderBottomWidth:0},dstorel_codeLbl:{fontSize:12,color:o.$secondary_color_dark,marginRight:5,fontFamily:m},dstorel_codeText:{fontSize:12,fontWeight:'400',color:o.$text_color,marginRight:5,fontFamily:m},dstorel_codeSep:{fontSize:12,color:o.$text_color,marginRight:5,fontFamily:m},dstorel_codeCon:{marginRight:0,flexDirection:'row',alignItems:'center'},storePhotosl_card:{paddingVertical:7,paddingHorizontal:10,marginHorizontal:10,marginBottom:5,flexDirection:'row',borderRadius:5,borderWidth:2,borderColor:o.$secondary_color_light,alignItems:'center'},storePhotosl_card_details:{width:100,paddingLeft:10,marginRight:10},storePhotosl_card_title:{fontSize:15,color:o.$text_color,fontWeight:'500',fontFamily:m},storePhotosl_card_subtitle:{fontSize:11,color:o.$text_color_light,fontWeight:'400',fontFamily:m},storePhotosl_card_img:{width:50,height:50},storePhotosl_card_remove_btn:{position:'absolute',right:10},dailym_scroll_con:{padding:10,alignItems:'center',width:'100%'},dailym_scroll:{width:'100%'},dailym_bgcolor1:{backgroundColor:'#e0f9a5'},dailym_bgcolor2:{backgroundColor:'#ffd667'},dailym_bgcolor3:{backgroundColor:'#c2ddff'},dailym_bgcolor4:{backgroundColor:'#d9c2ff'},dailym_card:{paddingHorizontal:20,marginBottom:10,borderRadius:5,paddingVertical:10,justifyContent:'center',width:'100%',height:100,elevation:5,shadowColor:'#000',shadowOffset:{width:0,height:2}},dailym_con:{flexDirection:'row',alignItems:'center'},dailym_photo:{width:100,height:80},dailym_title:{textAlign:'left',color:o.$text_color,fontSize:20,width:150,fontWeight:'500',marginLeft:20,fontFamily:m},dailym_done:{position:'absolute',width:31,height:31,right:15,top:15,borderRadius:15,elevation:3,shadowColor:'#000'},dailym_done_icon:{},download_scroll_con:{flex:1,padding:10,alignItems:'center',width:'100%',justifyContent:'center'},download_scroll:{flex:1,width:'100%'},downloadbtn:{paddingVertical:10,paddingHorizontal:20,borderRadius:20,backgroundColor:o.$primary_color},downloadbtn_label:{textAlign:'center',color:o.$accent_color,fontWeight:'500'},sform_con:{paddingVertical:10,paddingHorizontal:20,borderBottomColor:o.$secondary_color_light,borderBottomWidth:1},sform_con2:{paddingHorizontal:10},sform_hd:{textAlign:'center',color:o.$secondary_color_dark,fontWeight:'500',fontSize:16,marginBottom:10,fontFamily:m},sform_hd2:{textAlign:'left',width:'100%',paddingVertical:10,paddingHorizontal:20,color:o.$secondary_color_dark,fontWeight:'500',fontSize:16,marginBottom:10,fontFamily:m},sform_group:{paddingHorizontal:10},sform_group2:{paddingHorizontal:0,marginBottom:10},sform_50:{width:'50%',marginHorizontal:5},sform_100:{width:'100%',marginHorizontal:5},sform_flex:{flexDirection:'row',alignItems:'center'},sform_label:{textAlign:'left',color:o.$text_color_dark,fontWeight:'500',fontSize:14,width:'40%',marginBottom:10,fontFamily:m},sform_selectStyle:{textAlign:'left',backgroundColor:o.$secondary_color_light,width:'60%',borderRadius:20,paddingVertical:0,paddingHorizontal:0,padding:0,height:30,color:o.$accent_color2},sform_label2:{textAlign:'left',color:o.$text_color_dark,fontWeight:'500',fontSize:14,width:'100%',height:25,marginBottom:0,padding:0,fontFamily:m},sform_label3:{textAlign:'left',color:o.$text_color_dark,fontWeight:'500',fontSize:14,marginBottom:10,padding:0,fontFamily:m},sform_selectStyle2:{textAlign:'left',width:(0,t(a[2]).widthPercentageToDP)('40%'),backgroundColor:o.$secondary_color_light,borderRadius:20,paddingVertical:0,paddingHorizontal:0,padding:0,color:o.$accent_color2},sform_row:{flexDirection:'row'},sform_row2:{flexDirection:'row',width:(0,t(a[2]).widthPercentageToDP)('100%'),paddingHorizontal:10},sform_inputStyle:{textAlign:'left',width:(0,t(a[2]).widthPercentageToDP)('40%'),backgroundColor:o.$secondary_color_light,paddingVertical:5,paddingHorizontal:10,color:o.$accent_color2},sform_inputStyle2:{textAlign:'left',width:'100%',backgroundColor:o.$secondary_color_light,paddingVertical:5,paddingHorizontal:10,color:o.$accent_color2},sform_selectItem:{borderBottomWidth:1,borderBottomColor:o.$text_color},sform_selectedItem:{backgroundColor:o.$secondary_color_light},sform_btn_con:{width:'100%',marginTop:10,marginBottom:0,alignItems:'center',justifyContent:'center',flexDirection:'row'},fixedbtn:{marginBottom:20},sform_btn:{paddingVertical:10,paddingHorizontal:20,borderRadius:20,backgroundColor:o.$primary_color,alignItems:'center',flexDirection:'row',justifyContent:'center',minWidth:150},sform_btn_icon:{marginRight:5},sform_btn_text:{textAlign:'center',color:o.$accent_color,fontWeight:'500'},sform_pic_row:{flexDirection:'row',width:'100%',marginTop:10,justifyContent:'center'},sform_pic_row2:{justifyContent:'flex-start'},sform_pic_con:{width:(0,t(a[2]).widthPercentageToDP)('33%')-25,marginHorizontal:5,display:'flex'},capture_image_btn:{width:80,height:40,alignItems:'center',flexDirection:'row',justifyContent:'center',alignSelf:'center'},store_img:{width:'100%',height:90,borderRadius:5,marginBottom:5,backgroundColor:'#b5b5b5'},csku_scroll_con:{padding:10,width:'100%'},sf_datePicker_text:{textAlign:'left',width:(0,t(a[2]).widthPercentageToDP)('40%'),backgroundColor:o.$secondary_color_light,paddingVertical:5,paddingHorizontal:10,color:o.$accent_color2},sf_datePicker:{position:'absolute',width:21,height:21,right:25,top:3},sf_datePicker_con:{position:'relative'},select_ht:{height:53},reportMenu_con:{paddingHorizontal:20,paddingVertical:20},reportMenu_hd:{textAlign:'center',width:'100%',paddingVertical:10,paddingHorizontal:20,color:o.$secondary_color_dark,fontWeight:'500',fontSize:20,marginBottom:10},reportMenu:{marginTop:10},reportMenu_item:{paddingVertical:10,paddingHorizontal:20,borderRadius:5,minHeight:50,alignItems:'center',flexDirection:'row',justifyContent:'center',minWidth:150,marginBottom:10},reportMenu_item_bg1:{backgroundColor:o.$primary_color},reportMenu_item_bg2:{backgroundColor:'#ffd667'},reportMenu_item_text:{textAlign:'center',color:o.$accent_color,fontWeight:'500',fontSize:16,fontFamily:m},loaderBackdrop:{position:'absolute',width:'100%',height:'100%',backgroundColor:'#00000097',padding:10,flex:1,flexDirection:'row',alignItems:'center',justifyContent:'center',top:0,zIndex:9999},loaderBackdrop2:{position:'absolute',width:'100%',height:'100%',backgroundColor:'#00000097',padding:10,flex:1,flexDirection:'row',alignItems:'center',justifyContent:'center',top:0,zIndex:99999},loaderCon:{backgroundColor:o.$bg_color,width:'80%',height:50,borderRadius:4,elevation:10,shadowColor:'#000',shadowOpacity:.5,shadowOffset:{width:0,height:3},flexDirection:'row',alignItems:'center',justifyContent:'center'},download_loaderCon:{backgroundColor:o.$accent_color,width:'80%',borderRadius:4,elevation:10,shadowColor:'#000',shadowOpacity:.5,shadowOffset:{width:0,height:3},padding:10},download_Title:{color:o.$text_color,fontSize:16,fontWeight:'500',marginBottom:7,fontFamily:m},download_count:{color:o.$text_color_light,fontSize:13,fontWeight:'400',fontFamily:m},download_subTitle:{color:o.$text_color_dark,fontSize:12,fontWeight:'400',fontFamily:m},downloadProgress:{position:'relative',marginVertical:7},downloadProgress_bg:{height:10,borderRadius:10,backgroundColor:o.$text_color_light2,width:'100%'},downloadProgress_filled:{position:'absolute',top:0,height:10,borderRadius:10,backgroundColor:o.$primary_color,width:'0%'},spinnerCon:{position:'relative'},downloadModal_spin:{position:'absolute',top:10,right:10},downloadModal_btnWrap:{flexDirection:'row',justifyContent:'center'},downloadModal_OkBtn:{paddingVertical:5,paddingHorizontal:25,borderRadius:20,backgroundColor:o.$primary_color,alignItems:'center',flexDirection:'row',justifyContent:'center',marginTop:10},downloadModal_OkBtnText:{color:o.$accent_color,fontSize:16,fontFamily:m},spinner:{},spinnerInner:{position:'absolute',top:4,left:4},spinnerInner2:{position:'absolute',top:2,left:2},loaderTitle:{fontSize:16,color:o.$text_color,fontFamily:m,marginLeft:30},downloadAPk_Title:{color:o.$text_color,fontSize:16,fontWeight:'500',marginBottom:7,width:'100%',textAlign:'center',fontFamily:m},downloadAPk_subtitleWrap:{flexDirection:'row',marginBottom:10,alignItems:'center',justifyContent:'center'},downloadAPk_subTitle:{color:o.$text_color_dark,fontSize:12,fontWeight:'400',textAlign:'center',fontFamily:m},downloadAPkProgress:{position:'relative',marginVertical:7,alignItems:'center',justifyContent:'center'},downloadAPkProgress_gif:{transform:[{scale:.6}],width:'100%',marginBottom:5},downloadAPKModal_spin:{marginRight:5},storeInfo_wrap:{borderRadius:10},dm_storeInfo:{width:(0,t(a[2]).widthPercentageToDP)('100%'),backgroundColor:o.$accent_color,padding:10,borderRadius:4,borderBottomWidth:2,borderBottomColor:o.$secondary_color_light,marginTop:10,paddingBottom:20},dm_storeInfo_title:{color:o.$text_color_dark,fontWeight:'500',fontSize:16,fontFamily:m},dm_storeInfo_subtitle:{color:o.$text_color_light,fontWeight:'400',fontSize:13,fontFamily:m},checkinbtn:{paddingVertical:10,paddingHorizontal:20,borderRadius:20,backgroundColor:o.$primary_color,alignItems:'center',flexDirection:'row',justifyContent:'center',minWidth:150,marginTop:40},checkinbtn_text:{color:o.$accent_color,fontSize:16,fontFamily:m},selfie_preview_con:{width:(0,t(a[2]).widthPercentageToDP)('100%'),paddingHorizontal:20,alignItems:'center',justifyContent:'center'},selfie_preview_hd:{textAlign:'left'},selfie_preview:{flexDirection:'row',alignItems:'center'},selfiep_img:{width:100,height:100,backgroundColor:'#b5b5b5'},take_selfie_btn:{paddingVertical:10,paddingHorizontal:20,borderRadius:20,backgroundColor:o.$primary_color,alignItems:'center',flexDirection:'row',justifyContent:'center',minWidth:150,marginLeft:40},take_selfie_btn_text:{color:o.$accent_color,fontSize:16,marginLeft:10,fontFamily:m},checkinMainCon:{width:'100%'},checkinInfo:{width:'100%',paddingBottom:10,marginBottom:10,borderBottomColor:o.$secondary_color_light,borderBottomWidth:2},checkinInfo_hd:{color:o.$secondary_color_dark,fontSize:15,marginRight:10,fontFamily:m},checkinInfo_hdr:{flexDirection:'row',alignItems:'center',marginBottom:5},checkinInfo_timecon:{flexDirection:'row'},checkinInfo_timeinner:{marginLeft:10},checkinInfo_img:{width:120,height:150,backgroundColor:'#b5b5b5'},checkinInfo_time:{color:o.$text_color,fontSize:14,fontFamily:m},checkinInfo_btnCon:{flex:1,alignItems:'center'},goto_storemenu_btn:{flexDirection:'row',marginTop:20,borderColor:o.$primary_color,borderWidth:2,borderRadius:20,paddingHorizontal:10,height:30,alignItems:'center'},goto_storemenu_btn_text:{color:o.$primary_color,fontSize:14,marginRight:20,fontFamily:m},statusIcon:{position:'absolute',top:0,right:0},storeintro_scroll:{width:'100%'},storeintro_scrollcon:{width:'100%',paddingBottom:10,paddingHorizontal:5},store_audit_img_con:{width:'100%',marginTop:10,height:150,marginHorizontal:5,alignSelf:'center',alignItems:'center',justifyContent:'center',position:'relative',backgroundColor:'#f5f5f5'},store_audit_image:{width:'100%',height:150,maxWidth:200,backgroundColor:'#f5f5f5'},store_audit_pickimg_btn:{position:'absolute',right:5,top:0,padding:10},clocktimer:{position:"absolute",right:0,top:10,flexDirection:'row'},clocktimerWrap:{marginTop:10,marginLeft:10,flexDirection:'row'},clocktimerRow:{flexDirection:'row',alignItems:'center',backgroundColor:o.$accent_color,width:'auto',paddingHorizontal:15,paddingVertical:5,borderRadius:30,width:200,justifyContent:'center'},clocktimerText:{color:t(a[1]).PrimaryTheme.$primary_color,fontSize:12,marginLeft:5,fontWeight:'400',fontFamily:m},NB_quickL_IconS2:{height:47,width:47,borderRadius:50,padding:2,alignItems:'center',backgroundColor:'rgba(255, 255, 255, 0.9)'},qad_bg:{flex:1,alignItems:'center',position:'relative'},qad_hdr:{alignItems:'center',width:'100%',paddingTop:20,paddingBottom:10,paddingLeft:10,paddingRight:10,position:'absolute',top:0,left:0},qad_text:{color:o.$accent_color,fontSize:18,fontWeight:'500',textAlign:'center',marginBottom:5,textTransform:'capitalize',fontFamily:m},qad_subtext:{color:o.$accent_color,fontSize:13,fontWeight:'400',textAlign:'center',marginBottom:5,fontFamily:m},qadPopUp:{flex:1,width:(0,t(a[2]).widthPercentageToDP)('100%'),marginTop:160,backgroundColor:o.$accent_color,borderTopLeftRadius:20,borderTopRightRadius:20,elevation:5,shadowOpacity:1,shadowColor:'#323232',alignItems:'center',padding:20},qadPopUpInner:{flex:1},qadScrollCon:{flex:1,width:'100%',padding:0,height:420},qadInnerCon:{alignItems:"center",position:'relative'},linear_progressBarWrapper:{backgroundColor:'#fff',paddingHorizontal:10,paddingVertical:10,flexDirection:'row',width:'100%',position:'relative',elevation:5,borderRadius:15,alignItems:'center'},linear_progressBar:{width:'87%',marginRight:10,position:'relative'},linear_progressBar_bg:{width:'100%',borderRadius:5,height:10,backgroundColor:o.$text_color_light2},linear_progressBar_filled:{width:'0%',borderRadius:5,height:10,backgroundColor:o.$primary_color,marginRight:10,position:'absolute',top:0,left:0},linear_progressBarText:{paddingLeft:10,borderLeftWidth:1,borderLeftColor:o.$text_color_light,color:o.$text_color,fontFamily:m},qad_form:{marginTop:10},qad_questions:{width:'100%',display:'none'},qad_questionsShow:{display:'flex'},qad_qtnText:{color:o.$text_color,fontSize:17,fontWeight:'600',fontFamily:m},qad_optionsCon:{marginTop:20,paddingHorizontal:10},qad_optionBtn:{backgroundColor:o.$secondary_color_light,paddingHorizontal:15,paddingVertical:12,marginBottom:10,borderRadius:10,elevation:2,fontFamily:m},qad_optionBtnText:{fontSize:12,color:o.$text_colorblack,fontWeight:'600',fontFamily:m},qad_qtnBtnsGrp:{width:(0,t(a[2]).widthPercentageToDP)('87%'),marginTop:20,position:'relative',height:50,padding:10},qad_qtnBtn:{backgroundColor:o.$primary_color,elevation:6,shadowColor:o.$primary_color,shadowOffset:{width:0,height:2},borderRadius:40,width:'35%',height:40,display:'flex',alignItems:'center',justifyContent:'center'},qad_qtnBtnText:{color:o.$accent_color,textAlign:'center',fontSize:15,padding:10,fontFamily:m},qad_btnSubmitCon:{position:'absolute',right:0,width:'35%'},qad_btnSubmit:{elevation:6,shadowColor:o.$primary_color,shadowOffset:{width:0,height:2},borderRadius:40,width:'100%',height:40,display:'flex',alignItems:'center',justifyContent:'center'},qad_btnBack:{position:'absolute',left:0},qad_btnBackText:{fontFamily:m},qad_btnNext:{position:'absolute',right:0},qad_btnNextText:{fontFamily:m},qad_timer_wrapper:{flexDirection:'row',marginTop:5,alignItems:'center',paddingHorizontal:10},qad_timerText:{marginLeft:10,color:o.$text_color,fontSize:16,marginRight:10,fontFamily:m},timerProgressBar:{position:'relative',flex:1,height:10,overflow:"hidden"},timerProgressBar_bg:{height:10,borderRadius:10,backgroundColor:o.$text_color_light2,width:'100%'},timerProgressBar_filled:{height:10,borderRadius:10,backgroundColor:'green',position:'absolute',top:0},answerRemark:{padding:10,backgroundColor:'#bdebbd',borderRadius:10,marginTop:5},answerRemarkText:{fontSize:14,color:'green',fontFamily:m},remarkRedbg:{backgroundColor:'#fdc0c0'},remarkRed:{color:'red'},forgetMpinWrap:{width:(0,t(a[2]).widthPercentageToDP)('80%'),paddingVertical:10,position:'relative',marginTop:10},forgetMpinBtn:{position:'absolute',right:0,top:0},forgetMpinText:{color:o.$text_color_light,fontFamily:m},modalWrapper:{position:'absolute',top:0,left:0,width:(0,t(a[2]).widthPercentageToDP)('100%'),height:(0,t(a[2]).heightPercentageToDP)('100%'),backgroundColor:'#000',zIndex:999},downloadModalWrapper:{},attmenu_listcon:{width:(0,t(a[2]).widthPercentageToDP)('100%')},attmenu_list:{width:(0,t(a[2]).widthPercentageToDP)('100%'),marginTop:10,paddingBottom:10,paddingHorizontal:20,flexDirection:'row',flexWrap:'wrap'},attendance_menu_outer:{width:(0,t(a[2]).widthPercentageToDP)('50%')-30,marginBottom:20},attendance_menu_first:{marginRight:20},attendance_menu:{padding:10,borderRadius:7,elevation:3,height:120,alignItems:'center'},attendance_menu_inner:{alignItems:'center',height:'60%',justifyContent:'center'},attendance_Icon:{width:50,height:50},attendance_menu_image:{height:50},attendance_menu_title:{fontSize:16,fontWeight:'600',color:o.$text_color,marginTop:10,textAlign:'center',fontFamily:m},backgroundVideo:{position:'absolute',top:0,bottom:0,left:0,right:0},nodownloaddata_con:{width:'100%',height:'100%',alignItems:'center',justifyContent:'center'},nodownloaddata_row:{width:'100%',height:'100%',alignItems:'center',justifyContent:'center'},nodownloaddata_text:{fontSize:15,fontWeight:"500",color:o.$text_color_light,textAlign:'center',marginTop:10,fontFamily:m},noDataCon:{width:'100%',height:400,alignItems:'center',justifyContent:'center'},noDataText:{fontSize:15,fontWeight:"500",color:o.$text_color_light,textAlign:'center',fontFamily:m},geotag_scroll:{justifyContent:'center',padding:10,paddingBottom:10,paddingTop:5},geotag_scroll_pb:{paddingBottom:50},gtag_sImageWrap:{position:'absolute',bottom:-60,alignItems:'center',left:0,right:0,width:'100%'},gtag_sImage_View:{position:'absolute',top:-60,elevation:1,backgroundColor:'#fff',borderRadius:15,padding:3,shadowOpacity:.1,shadowColor:'#000',shadowOffset:{width:0,height:2}},gtag_sImage_View2:{position:'absolute',top:-60,elevation:1,backgroundColor:'#fff',borderRadius:15,paddingleft:10,shadowOpacity:.1,shadowColor:'#000',shadowOffset:{width:0,height:2}},gTag_sImageBtn:{position:'absolute',zIndex:2,top:5,elevation:2,backgroundColor:o.$red,borderRadius:20,padding:9,shadowOpacity:.25,shadowColor:o.$red,shadowOffset:{width:0,height:2}},gtag_sImagelbl:{alignItems:'center',paddingHorizontal:20,paddingTop:30,paddingBottom:10,borderRadius:10,backgroundColor:o.$bg_color,elevation:2,shadowOpacity:.2,shadowColor:'#000',shadowOffset:{width:0,height:2}},gtag_sImagelblText:{fontSize:14,fontWeight:'500',color:o.$text_color,zIndex:1,marginTop:20,fontFamily:m},gTag_btnWrap:{alignItems:'center',marginTop:40},gTag_btnWrapCI:{marginTop:40},gTag_btnWrapCI1:{marginTop:20},gTag_Image:{width:80,height:80,borderRadius:13},gTag_distanceAway:{paddingHorizontal:13,paddingVertical:7,borderRadius:6,backgroundColor:'#f5aeae78',width:'90%'},gTag_distanceAwayLbl:{fontSize:14,color:'red',textAlign:'center',fontWeight:'500',fontFamily:m},gTag_distanceAway1:{paddingHorizontal:13,paddingVertical:7,borderRadius:6,backgroundColor:'#c9efd9',width:'90%'},gTag_distanceAwayLbl1:{fontSize:14,color:'green',textAlign:'center',fontWeight:'500',fontFamily:m},android_flipIMageView:{},mapWrapperStoreInfo:{width:'100%',height:(0,t(a[2]).heightPercentageToDP)('80%')-(350+p),backgroundColor:'#fff',borderRadius:15,overflow:'hidden',elevation:5,shadowColor:'#000',shadowOpacity:.6,shadowOffset:{width:0,height:2}},mapStyleStorInfo:{width:'100%',height:'90%',marginVertical:5},mapWrapperStoreInfoSmall:{height:(0,t(a[2]).heightPercentageToDP)('80%')-(380+p)},mapWrapCon:{marginBottom:10,position:'relative'},mapWrapConIOS:{backgroundColor:'#fff',padding:1,borderRadius:15,elevation:5,shadowColor:'#000',shadowOpacity:.2,shadowOffset:{width:0,height:2}},mapWrapper:{width:'100%',height:(0,t(a[2]).heightPercentageToDP)('100%')-(350+p),backgroundColor:'#fff',borderRadius:15,overflow:'hidden',elevation:5,shadowColor:'#000',shadowOpacity:.6,shadowOffset:{width:0,height:2}},mapWrapperView:{height:(0,t(a[2]).heightPercentageToDP)('100%')-(310+p)},mapWrapperSmall:{height:(0,t(a[2]).heightPercentageToDP)('100%')-(380+p)},mapWrapperSmall1:{height:(0,t(a[2]).heightPercentageToDP)('100%')-(230+p)},mapStyle:{width:'100%',height:'100%'},customMapStyle:{borderRadius:10},storelVisitM_Style:{alignItems:'center'},storelVisitM_titleStyle:{textAlign:'center',marginTop:20,marginBottom:20,fontFamily:m},storelVisitM_options:{flexDirection:'row',marginBottom:20,justifyContent:'space-evenly',width:'80%'},storelVisitM_op_btn:{backgroundColor:o.$primary_color,color:o.$accent_color,paddingHorizontal:20,paddingVertical:6,borderRadius:20,minWidth:70,fontFamily:m},storelVisitM_op_btnText:{textAlign:'center',color:o.$accent_color,fontFamily:m},storeDaily_titleStyle:{textAlign:'center',marginTop:20,fontSize:15,fontFamily:m},dErrM_Style:{alignItems:'center'},dErrMsg:{textAlign:'center',marginTop:20,marginBottom:5,color:o.$red,fontSize:14,fontFamily:m},dErrSubMsg:{fontSize:14,fontWeight:'500',marginBottom:10,color:o.$red,fontFamily:m},dErrDetail:{fontSize:12,fontWeight:'400',marginBottom:10,color:o.$text_color_dark,fontFamily:m},MPinM_Style:{alignItems:'center',paddingTop:20,width:'90%'},MPinM_title_Style:{textAlign:'center',marginBottom:10,fontSize:15,color:o.$text_color,fontWeight:'500',fontFamily:m},MPinM_subtitle_Style:{textAlign:'center',fontSize:13,marginLeft:5,color:o.$red,fontWeight:'400',fontFamily:m},MPinM_subtitle_Style2:{textAlign:'center',fontSize:13,marginBottom:10,color:o.$red,fontWeight:'400',fontFamily:m},MPinM_subtitleCon:{flexDirection:'row',marginLeft:-5,marginBottom:5,justifyContent:'center',alignItems:'center'},MPinM_con:{marginBottom:10,padding:10},MPinM_otp_inputStyle:{textAlign:'center',backgroundColor:o.$secondary_color_light,width:'80%',borderRadius:4,paddingVertical:10,paddingHorizontal:15,height:50,color:o.$accent_color2,marginBottom:10,marginRight:10,fontSize:25,fontFamily:m},MPinM_otp_field:{flexDirection:'row'},appUpdateMStyle:{alignItems:'center'},appUpdateMT_Style:{marginTop:10,marginBottom:10,fontSize:13,fontWeight:"500",color:o.$text_color,fontFamily:m},appUpdateMT_SubStyle:{paddingHorizontal:10,marginBottom:20,fontSize:12,fontWeight:"400",color:o.$text_color_light,fontFamily:m},storelCM_alertCon:{marginBottom:20,flexDirection:'row',alignItems:'center'},storelCM_alert:{textAlign:'center',color:'#ff0000',fontSize:14,fontWeight:'400',marginLeft:10,fontFamily:m},storelCancelM_titleStyle:{textAlign:'center',marginTop:10,fontSize:14,fontWeight:'500',fontFamily:m},storelCancelM_subtitleStyle:{marginBottom:10,fontSize:13,fontWeight:'400',color:o.$primary_color,textTransform:'capitalize',fontFamily:m},customModal:{backgroundColor:o.$accent_color,width:'80%',borderRadius:4,elevation:10,shadowColor:'#000',shadowOpacity:.5,padding:10,shadowOffset:{width:0,height:2}},customModal_Title:{color:o.$text_color,fontSize:16,fontWeight:'500',marginBottom:7,fontFamily:m},customModal_Message:{color:o.$text_color_light,fontSize:14,fontWeight:'400',marginBottom:10,fontFamily:m},storeD_Main:{width:'100%',height:'100%',paddingVertical:10},storeD_storelMain:{width:'100%',paddingHorizontal:10},storeD_scrollCon:{width:'100%',height:(0,t(a[2]).heightPercentageToDP)('100%')-(340+p)},storeD_scroll:{width:'100%',marginBottom:20,paddingHorizontal:10},nonWorking_con:{width:'100%'},nonWorking_form:{width:'100%'},nonWform_hd:{textAlign:'left',color:o.$text_color,fontFamily:m,fontSize:15,paddingVertical:5,paddingHorizontal:10,fontWeight:'600',marginBottom:10},nonW_btnWrap:{position:'absolute',bottom:10,left:10,alignItems:'center',width:'100%',alignItems:'center'},nonWlist:{position:'relative',flexDirection:'row',marginBottom:10,alignItems:'center',width:'100%',backgroundColor:o.$bg_color,elevation:2,borderRadius:7,paddingHorizontal:10,paddingVertical:10,shadowColor:'#000',shadowOpacity:.15,shadowOffset:{width:0,height:2}},nonWlist_camera:{position:'absolute',right:0,alignItems:'center',justifyContent:'center',padding:10},nonWlist_camera_icon:{},nonWlist_Text:{fontSize:14,color:o.$text_color,marginRight:10,fontFamily:m},nWselStyle:{backgroundColor:o.$secondary_color_dark},nWselStyleText:{color:o.$accent_color},nonWCapImgModal:{alignItems:'center'},nonWCapImgModal_title:{fontSize:14,fontFamily:m},nonWCapImgModal_subtitle:{fontFamily:m},nonWCapImgModalCon:{width:'100%',alignItems:'center',position:'relative'},nonWCapImgModal_Camera:{marginTop:10,marginBottom:20,padding:10},nonWCapImgModal_btng:{flexDirection:'row',justifyContent:'space-evenly',width:'100%'},nonWCapImgModal_Cancel_btn:{marginBottom:10,paddingHorizontal:15,paddingVertical:10,minWidth:100,backgroundColor:o.$accent_color,borderColor:o.$primary_color,borderWidth:1,borderRadius:40,elevation:1},nonWCapImgModal_Cancel_btnText:{textAlign:'center',color:o.$primary_color,fontFamily:m},nonWCapImgModal_Save_btn:{marginBottom:10,paddingHorizontal:15,paddingVertical:10,minWidth:100,backgroundColor:o.$primary_color,borderRadius:40,elevation:1},nonWCapImgModal_Save_btnText:{textAlign:'center',color:o.$accent_color},nonWCapImgModal_ImgWrap:{marginTop:10,marginBottom:20,padding:10,width:'100%',alignItems:'center'},nonWCapImgModal_Img:{backgroundColor:'#efefef',width:150,height:100,resizeMode:'contain'},nonWCapImgModal_CameraSmall:{position:'absolute',right:40,top:0,padding:5,backgroundColor:o.$bg_color,borderRadius:40,elevation:3},PromoImgModal:{alignItems:'center'},PromoImgModal_title:{fontSize:14,fontFamily:m},PromoImgModal_subtitle:{},PromoImgModalCon:{width:'100%',alignItems:'center',position:'relative'},PromoImgModal_Camera:{marginTop:10,marginBottom:20,padding:10},PromoImgModal_btng:{flexDirection:'row',justifyContent:'space-evenly',width:'100%'},PromoImgModal_Cancel_btn:{marginBottom:10,paddingHorizontal:15,paddingVertical:10,minWidth:100,backgroundColor:o.$accent_color,borderColor:o.$primary_color,borderWidth:1,borderRadius:40,elevation:1},PromoImgModal_Cancel_btnText:{textAlign:'center',color:o.$primary_color},PromoImgModal_Save_btn:{marginBottom:10,paddingHorizontal:15,paddingVertical:10,minWidth:100,backgroundColor:o.$primary_color,borderRadius:40,elevation:1},PromoImgModal_Save_btnText:{textAlign:'center',color:o.$accent_color},PromoImgModal_ImgWrap:{marginTop:10,marginBottom:20,padding:10,width:'100%',alignItems:'center'},PromoImgModal_Img:{backgroundColor:'#efefef',width:150,height:100,resizeMode:'contain'},PromoImgModal_CameraSmall:{position:'absolute',right:40,top:0,padding:5,backgroundColor:o.$bg_color,borderRadius:40,elevation:3},storeDistance_Modal:{padding:20,width:'90%',alignItems:'center'},storeDistanceM_title:{fontSize:18,fontFamily:m},storeDistanceM_Con:{alignItems:'center'},storeDistanceM_message:{fontSize:14,color:o.$text_color,fontWeight:'400',textAlign:'center',fontFamily:m},storeDistanceM_submessage:{fontSize:14,fontWeight:'400',textAlign:'center',color:o.$text_color,fontFamily:m},storeDistanceM_btn:{minWidth:100,paddingHorizontal:20,paddingVertical:10,marginTop:20,backgroundColor:o.$primary_color,borderRadius:20,elevation:3},storeDistanceM_btnText:{textAlign:'center',color:o.$accent_color,fontFamily:m},dailymenu_listcon:{width:'100%',alignItems:'center'},dailymenu_list:{paddingHorizontal:10,marginTop:10,paddingBottom:10},dialyMenu_Rows:{width:'100%',flexDirection:'row',marginBottom:0},daily_menu_outer:{width:'50%',position:'relative',padding:10},daily_menu_first:{},daily_menu_tilebgShadow:{borderRadius:7,elevation:3,height:160,alignItems:'center',shadowColor:'#000',shadowOffset:{width:0,height:2},shadowOpacity:.3,backgroundColor:'#0000'},daily_menu:{width:'100%',height:'100%',padding:10,borderRadius:7,position:'absolute',top:0,left:0},daily_menu_inner:{alignItems:'center',backgroundColor:o.$bg_color,borderRadius:10,paddingHorizontal:20,paddingVertical:5,marginTop:-20,marginBottom:10,elevation:2,shadowColor:'#000',shadowOffset:{width:0,height:0},shadowOpacity:.2,justifyContent:'center'},daily_menu_inner2:{alignItems:'center',paddingHorizontal:20,paddingTop:25,marginBottom:10,justifyContent:'center'},daily_menu_innerImgCon:{position:'absolute',top:20,width:90,height:90},daily_menu_bgImg:{width:'100%',height:'100%'},daily_menu_Icon:{width:80,height:80},daily_menu_title:{fontSize:14,fontWeight:'400',color:o.$text_color,marginTop:5,textAlign:'center',fontFamily:m},daily_menu_done:{position:'absolute',width:31,height:31,right:10,top:-10,borderRadius:15,elevation:3,shadowColor:'#000'},daily_menu_hasData:{position:'absolute',width:21,height:21,right:5,top:5,borderRadius:15,elevation:3,shadowColor:'#000'},daily_menu_Count:{position:'absolute',left:10,alignItems:"center",top:5,fontSize:14,fontWeight:'400',color:o.$text_color,marginTop:5,textAlign:'center',fontFamily:m},OrderStatus_Done:{position:'absolute',width:31,height:31,right:10,top:0,borderRadius:15,elevation:3,shadowColor:'#000'},catDMenuI_Wrap:{flexDirection:'row',alignItems:'center',justifyContent:'flex-start',width:'100%',marginBottom:10,borderRadius:4,paddingHorizontal:10,paddingVertical:8,backgroundColor:o.$secondary_color_light,elevation:1,shadowColor:'#000',shadowOpacity:.1,shadowOffset:{width:0,height:2}},catDMenuI_CheckBoxCon:{position:'absolute',width:25,height:25,top:4,left:5},catDMenuI_CheckBox:{alignSelf:'flex-start'},catDMenuI_CheckBox_pName:{width:'85%',marginLeft:30},catDMenu_listcon:{width:'100%'},catDMenu_list:{marginTop:10,paddingBottom:10},catDmenu_scroll:{justifyContent:'center',paddingBottom:10,paddingTop:5},opening_Stock_wrap:{width:'100%',marginBottom:10},opening_Stock_scroll:{justifyContent:'center',padding:10,paddingBottom:180},opening_Stock_scrollOuter:{marginBottom:80,width:(0,t(a[2]).widthPercentageToDP)('100%')},opening_Stock_cat:{width:'100%'},opening_Stock_catHdr:{width:'100%',position:'relative'},opening_Stock_catHdrIcon:{position:'absolute',right:10,top:5},opening_Stock_catInner:{width:'100%',paddingHorizontal:10,paddingVertical:7,backgroundColor:o.$primary_color,borderRadius:5},opening_Stock_catText:{fontSize:14,fontWeight:'500',color:o.$accent_color,fontFamily:m},opening_Stock_catText2:{fontSize:13,fontWeight:'400',color:o.$accent_color,fontFamily:m},opening_Stock_catText3:{fontSize:13,fontWeight:'400',color:o.$text_color,fontFamily:m},opening_Stock_SubCatHdr:{width:'100%',position:'relative'},opening_Stock_SubCatIcon:{position:'absolute',right:10,top:10},opening_Stock_SubCatInner:{width:'100%',paddingHorizontal:10,marginTop:10,paddingVertical:7,backgroundColor:o.$primary_color,borderRadius:5},opening_Stock_SubCatText:{fontSize:14,fontWeight:'500',color:o.$text_color,textAlign:'center',fontFamily:m},osCat_actions:{width:'100%',marginVertical:10,marginTop:20,paddingBottom:10,alignItems:'center',borderBottomColor:o.$text_color_light2,borderBottomWidth:1},osCat_actions1:{width:'100%',marginVertical:10,marginTop:4,paddingBottom:10,alignItems:'center'},osCat_action_openCam:{},osCat_action_add_image:{},osCatImageView:{position:'relative',backgroundColor:o.$secondary_color_light,padding:5,borderRadius:10},osCat_action_reCap:{position:'absolute',top:-10,right:-10,padding:8,backgroundColor:o.$primary_color,borderRadius:30,elevation:2},osCatImage:{width:80,height:80,borderRadius:10,backgroundColor:'#232323'},osCatImage2:{width:55,height:47,backgroundColor:'transparent'},error_CatImage2:{width:55,height:47,borderColor:'red',borderWidth:2,padding:30,alignItems:'center',justifyContent:'center'},osCat_actn_margin:{},opening_Stock_prds:{paddingBottom:20},openStk_prd_Con:{paddingHorizontal:10,position:'relative',marginTop:10,paddingVertical:10,backgroundColor:o.$secondary_color_light,borderRadius:5,elevation:1,shadowColor:'#484848',shadowOpacity:.1,shadowOffset:{width:0,height:2}},openStk_prd_name:{fontSize:15,color:o.$text_color,fontWeight:'600',fontFamily:m},openStk_prd_nameB:{fontSize:15,color:o.$text_color,fontWeight:'600',borderBottomColor:o.$fourth_color,borderBottomWidth:1,paddingBottom:5,fontFamily:m},openStk_precentageViw:{flex:2,borderBottomColor:o.$fourth_color,borderBottomWidth:1,paddingBottom:5,flexDirection:"row",justifyContent:'space-between'},openStk_precentageViwHD:{flex:2,paddingBottom:5,flexDirection:"row",justifyContent:'space-between'},openStk_precentagenameB:{fontSize:15,color:o.$text_color,fontWeight:'600',paddingBottom:5,fontFamily:m},openStk_prd_name2:{fontSize:14,color:o.$text_color,fontWeight:'400',marginTop:4,fontFamily:m},openStk_refImageBtn:{position:'absolute',right:20,top:5,width:40,height:40,borderRadius:20,alignItems:'center',justifyContent:'center'},openStk_prd_form:{marginTop:10},openStk_prd_row:{width:'100%',flexDirection:'row'},openStk_prd_cols:{width:'100%'},openStk_prd_colflex:{width:'100%',flexDirection:'row',alignItems:'center'},openStk_prd_col50:{width:'48.5%'},openStk_prd_col50_1:{marginRight:5},openStk_prd_col50_2:{marginLeft:5},openStkP_checkboxWrap:{flexDirection:'row',alignItems:'flex-start',justifyContent:'flex-start',borderBottomColor:o.$bg_color,borderBottomWidth:1,paddingBottom:10},openStkP_checkbox:{alignSelf:'flex-start'},openStkP_checkboxCon:{position:'absolute',width:25,height:25,top:-5,left:-10},openStkP_checkbox_pName:{width:'85%',marginLeft:25},openStk_prd_label:{fontSize:13,color:o.$text_color_dark,fontWeight:'400',fontFamily:m},openStk_prd_flexlabel:{marginRight:10,width:'35%',color:o.$text_color_dark,fontFamily:m},openStk_prd_flexlabel1:{marginRight:3,marginLeft:10,width:'49%',color:o.$text_color_dark,fontFamily:m},openStk_prd_textLabel:{marginLeft:10,width:'35%',color:o.$text_color_dark},openStk_prd_labelValRed:{fontSize:13,color:o.$orange,fontWeight:'400',fontFamily:m},openStk_prd_inputStyle:{backgroundColor:o.$bg_color,borderRadius:4,marginTop:5,height:30,paddingVertical:3,paddingHorizontal:5,minWidth:100,color:o.$text_color,fontFamily:m},openStk_prd_inputStyle1:{backgroundColor:o.$bg_color,borderRadius:4,marginTop:5,height:35,paddingVertical:3,paddingHorizontal:5,minWidth:100,color:o.$text_color,fontFamily:m},openStk_EXP_inputStyle:{backgroundColor:"#c0ccd6",borderRadius:4,marginTop:5,height:30,paddingVertical:3,paddingHorizontal:5,minWidth:100,color:"#fff",fontFamily:m},closeStk_prd_flexlabel:{width:'30%',color:o.$text_color_dark},openStk_prd_inputShort:{width:'70%'},openStk_prd_inplBlue:{backgroundColor:o.$secondary_color_light},openStk_prd_flex_inputStyle:{marginTop:0,width:'50%'},openStk_prd_flex_inputStyle1:{marginTop:0,width:'60%'},openStk_prd_inputShort2:{width:'50%'},openStk_prd_date_inputCon:{flexDirection:'row',alignItems:'center',justifyContent:'space-between',width:'60%'},openStk_prd_dateInput:{height:30,alignItems:'center',justifyContent:'center',width:'84%',borderRadius:5,backgroundColor:o.$secondary_color_light,paddingHorizontal:10,paddingVertical:5,color:o.$text_color,fontFamily:m},openStk_prd_datePicker:{width:30,height:30,backgroundColor:o.$primary_color,alignItems:'center',justifyContent:'center',borderRadius:5},openStk_prd_selectStyle:{backgroundColor:o.$bg_color,borderRadius:4,height:40,minWidth:100},openStk_prd_selectStyle_item:{height:40,fontSize:14,fontFamily:m},openStk_prd_choiceBoxCon:{height:40,width:'60%',paddingHorizontal:'ios'==d.Platform.OS?10:0},openStk_prd_choiceBox:{position:'relative',backgroundColor:o.$bg_color,flexDirection:'row',height:40,alignItems:'center',width:'80%',maxWidth:150,minWidth:100,borderRadius:5},openStk_prd_choiceBoxbgL:{backgroundColor:o.$secondary_color_light},openStkCh_con1:{width:'50%',height:'100%',paddingVertical:5,paddingHorizontal:10,justifyContent:'center',borderRadius:5},openStkCh_con1Grey:{backgroundColor:'#d3d3d3'},openStkCh_text:{textAlign:'center',color:o.$text_color,fontFamily:m},openStkCh_textactive:{color:o.$accent_color},openStkCh_con_red:{backgroundColor:'red'},openStkCh_con_green:{backgroundColor:'green'},openStkCh_con_toggleDis:{backgroundColor:o.$tertiary_color},openStkCh_con_toggleDisTxt:{color:o.$accent_color},openStkCh_con_active:{borderRadius:5,elevation:4,shadowColor:'#000',shadowOpacity:.4,shadowOffset:{width:0,height:2},shadowRadius:5,backgroundColor:'#0000'},openStkCh_absolutebg:{position:'absolute',top:0,bottom:0,width:'50%',left:'50%'},addstore_Stock_btnWrap:{bottom:0,left:0,right:0,width:(0,t(a[2]).widthPercentageToDP)('95%'),paddingBottom:20,alignItems:'center'},opening_Stock_btnWrap:{position:'absolute',bottom:0,left:0,right:0,width:(0,t(a[2]).widthPercentageToDP)('100%'),paddingBottom:20,alignItems:'center'},openStk_prddetails:{flexDirection:'row',marginTop:10,paddingTop:10,paddingBottom:10,alignItems:'center'},openStk_prd_borderT:{borderTopColor:o.$fourth_color,borderTopWidth:1},openStk_prd_borderT2:{borderTopColor:o.$fourth_color,borderTopWidth:1,paddingTop:5},openStk_prd_borderT3:{borderTopColor:o.$fourth_color,borderTopWidth:1,paddingTop:10},openStk_prd_borderB:{borderBottomColor:o.$fourth_color,borderBottomWidth:1},openStk_prd_borderL:{borderLeftColor:o.$fourth_color,borderLeftWidth:1},openStk_prd_borderR:{borderRightColor:o.$fourth_color,borderRightWidth:1},openStk_prdd_wrap:{flexDirection:'row',alignItems:'center'},openStk_prdd_flabel:{fontSize:13,fontWeight:'500',color:o.$secondary_color_dark,marginRight:10,fontFamily:m},openStk_prdd_fvalue:{fontSize:13,fontWeight:'500',color:o.$secondary_color_dark,marginRight:10,fontFamily:m},openStk_prdCameras:{marginTop:10,flexDirection:'row',flexWrap:'wrap'},openStkCameraCon:{marginRight:10},openStkCameraCon2:{marginRight:10,alignItems:'center'},IRCamWrapper:{width:'100%'},IRCamCon:{borderTopColor:o.$accent_color,borderTopWidth:1,flexDirection:'row',justifyContent:'space-evenly',padding:5,backgroundColor:o.$bg_color,borderRadius:5},IRCamConBG:{borderTopColor:o.$secondary_color_light,backgroundColor:o.$secondary_color_light},IRCamBtns:{alignItems:'center'},IRCamStartSess:{},IRCamResumeSess:{},IRCamBtnsText:{fontSize:11,fontWeight:'500',color:o.$text_color,fontFamily:m},IRCamImgWrap:{flexWrap:'wrap',flexDirection:'row',marginBottom:5,minHeight:80},IRCamImageView:{position:'relative',padding:5,borderRadius:10},IRCamImage:{width:80,height:80,borderRadius:10,backgroundColor:'#232323',marginRight:10},IRCamImage_OpBtn:{position:'absolute',top:-5,right:0,padding:8,backgroundColor:o.$primary_color,borderRadius:30,elevation:2},IRretakeM_options:{flexDirection:'row',marginBottom:20,justifyContent:'space-evenly',width:'100%',alignItems:'center'},IRretakeM_optionsInn:{alignItems:'center'},IRretakeM_optionsBtn:{color:o.$accent_color,paddingHorizontal:20,paddingVertical:6,borderRadius:20,minWidth:70},IRretakeM_optionsBtnText:{textAlign:'center',fontSize:10,color:o.$text_color,fontFamily:m},IRCamOnceWrap:{marginBottom:10},prodCatsScroll:{justifyContent:'center',padding:10,paddingBottom:10},prodCatsScroll_Outer:{marginBottom:5,width:(0,t(a[2]).widthPercentageToDP)('100%')},prodCatPageWrap:{alignItems:'center'},prodCatsHdr:{backgroundColor:o.$primary_color,width:(0,t(a[2]).widthPercentageToDP)('100%')-20,paddingVertical:8,paddingHorizontal:10,marginBottom:15,borderRadius:6,elevation:1,shadowOffset:{width:0,height:2},shadowOpacity:.2},prodCatsHdrText:{textAlign:'center',fontSize:14,color:o.$accent_color,fontFamily:m},prodCatsCountText:{textAlign:'right',position:'absolute',right:10,top:7,fontSize:14,color:o.$accent_color,fontFamily:m},prodCatsHdr_Stockprds:{paddingBottom:10},prdCat_hdIMgWrap:{width:(0,t(a[2]).widthPercentageToDP)('100%')-20,marginVertical:10,marginTop:20,paddingBottom:10,alignItems:'center',justifyContent:'center',borderBottomColor:o.$text_color_light2,borderBottomWidth:1},prdCat_hdImgCon:{width:(0,t(a[2]).widthPercentageToDP)('100%'),alignItems:'center'},stockCatDone_check:{position:'absolute',width:24,height:24,right:10,top:5,borderRadius:15,elevation:3,paddingLeft:.2,shadowColor:'#000'},SOS_subCatImgCon:{},SOS_imageWrap:{width:'100%',paddingVertical:10,alignItems:'center',borderBottomColor:o.$text_color_light2,borderBottomWidth:1},stockPrdInfo:{flexDirection:'row',width:'100%',paddingHorizontal:10,paddingVertical:4,backgroundColor:o.$fourth_color,borderRadius:5},stockPrdInfoLabelHd:{fontSize:13,fontWeight:'500',color:o.$text_color_dark,marginRight:10,fontFamily:m},stockPrdInfoLabelHd1:{fontSize:13,fontWeight:'500',color:o.$text_color_dark,fontFamily:m},stockPrdInfoLabel:{fontSize:13,fontWeight:'500',color:o.$text_color,fontFamily:m},st_TextLbl:{marginBottom:10},stk_inptSTyle:{textAlign:'center',fontFamily:m},stk_inptSTyle_error:{borderColor:'red',borderWidth:2},wind_MultiSearchInputStyle:{color:'#CCC'},stk_MultiSSTyle_error:{borderColor:'red',borderWidth:2,color:'#CCC'},stk_mfdView:{marginTop:10,borderTopColor:o.$accent_color,borderTopWidth:2,paddingTop:10},stk_mfdTbl_hd:{marginBottom:10,marginTop:10,color:o.$text_color,fontSize:14,fontWeight:'500',fontFamily:m},stk_mfdTblHeader:{marginBottom:10,marginTop:10,backgroundColor:o.$primary_color,borderRadius:10,padding:5,elevation:3,shadowColor:'#747474',shadowOffset:{width:0,height:2},shadowOpacity:1,flexDirection:'row',alignItems:'center',justifyContent:'space-between'},stk_mfdTblHeaderBox:{width:'24%',height:'100%',alignItems:'center',backgroundColor:o.$secondary_color_light,paddingVertical:5,borderRadius:5},stk_mfdTblHeaderBox1:{},stk_mfdTblHeaderBox2:{},stk_mfdTblHeaderBox3:{},stk_mfdTblHeaderBox4:{},stk_mfdTblHeaderTxt:{fontSize:13,color:o.$text_color,marginRight:5,textTransform:'capitalize',fontWeight:'700',fontFamily:m},stk_addStockBtn:{position:'absolute',right:0,top:10,backgroundColor:o.$primary_color,borderRadius:4,paddingHorizontal:10,paddingVertical:5,elevation:1,shadowColor:'#747474',shadowOffset:{width:0,height:2},shadowOpacity:.1},stk_addStockBtnText:{fontSize:13,fontWeight:'500',color:o.$accent_color,fontFamily:m},AddStockM_View:{width:'100%',marginBottom:10},AddStockM_row:{marginBottom:10,marginTop:0,width:'100%',paddingHorizontal:10},AddStockM_label:{color:o.$text_color,fontSize:14,fontWeight:'400',marginBottom:5,fontFamily:m},AddStockM_col:{},AddStockM_MFDInputCon:{flexDirection:'row',alignItems:'center',justifyContent:'space-between'},AddStockM_MFDInput:{height:30,alignItems:'center',justifyContent:'center',width:'84%',borderRadius:5,backgroundColor:o.$secondary_color_light,paddingHorizontal:10,paddingVertical:5,color:o.$text_color,fontFamily:m},AddStockM_DatePicker:{width:30,height:30,backgroundColor:o.$primary_color,alignItems:'center',justifyContent:'center',borderRadius:5},AddStockM_InputStyle:{height:30,borderRadius:5,backgroundColor:o.$secondary_color_light,paddingHorizontal:10,paddingVertical:5,color:o.$text_color,fontFamily:m},AddStockM_cancelBtn:{backgroundColor:o.$bg_color,borderWidth:1,borderColor:o.$primary_color,minWidth:90},AddStockM_cancelBtnText:{color:o.$primary_color},AddStockM_Btn:{minWidth:90},stk_mfdTblBody:{backgroundColor:o.$bg_color,borderRadius:5,paddingVertical:5},stk_mfdTblrow:{marginBottom:5,borderBottomColor:o.$secondary_color_light,borderBottomWidth:1,padding:5,flexDirection:'row',alignItems:'center',justifyContent:'space-between'},stk_mfdTblrow_last:{borderBottomWidth:0,marginBottom:0},stk_mfdTblCol:{paddingHorizontal:10,alignItems:'center',width:'24%'},stk_mfdTblCol1:{},stk_mfdTblCol2:{},stk_mfdTblCol3:{},stk_mfdTblCol4:{height:35},stk_mfdTblColText:{color:o.$text_color,fontSize:13,fontWeight:'400',fontFamily:m},stk_mfdTbl_DeleteBtn:{position:'absolute',right:5,backgroundColor:o.$bg_color,borderRadius:20,width:30,height:30,alignItems:'center',justifyContent:'center',elevation:2,shadowColor:'#000',shadowOffset:{width:0,height:2},shadowOpacity:.2},posS_hdrWrap:{paddingHorizontal:10},picker_design:{width:'65%'},text_month:{width:'35%',color:o.$text_color_dark},possale_prd_label:{fontSize:15,color:o.$text_color_dark,fontWeight:'400',fontFamily:m},possale_headerview:{},possale_sImageWraps:{flexDirection:'row'},possale_sImagelbl:{marginTop:-70,paddingTop:5,paddingBottom:5,borderRadius:5,backgroundColor:o.$bg_color,elevation:2,shadowOpacity:.2,shadowColor:'#000',shadowOffset:{width:0,height:2},marginLeft:20,paddingLeft:10,paddingRight:10},possale_sImagelbl2:{marginTop:-70,paddingTop:5,paddingBottom:5,borderRadius:5,backgroundColor:o.$bg_color,elevation:2,shadowOpacity:.2,shadowColor:'#000',shadowOffset:{width:0,height:2},marginLeft:80},possale_sImageWrap:{position:'absolute',alignItems:'center',left:0,right:0,width:'100%'},possale_sImage_View:{position:'absolute',elevation:1,backgroundColor:'#fff',borderRadius:15,padding:3,shadowOpacity:.1,shadowColor:'#000',shadowOffset:{width:0,height:2}},posS_flex_inputStyle:{marginTop:0,width:'65%',backgroundColor:o.$secondary_color_light},posS_flex_label:{paddingRight:10,width:'35%',color:o.$text_color_dark},posS_field:{paddingHorizontal:10},posS_fieldBorder:{borderTopColor:o.$fourth_color,borderTopWidth:1,paddingTop:10,marginTop:10},posS_flex_inputStyle2:{backgroundColor:o.$bg_color,width:'50%',borderRadius:4,marginTop:5,height:30,paddingVertical:3,paddingHorizontal:5,minWidth:100,color:o.$text_color},alumbl:{backgroundColor:o.$bg_color,elevation:3,padding:10,marginBottom:10,borderRadius:4},alumbl_img:{height:200,width:'100%',resizeMode:'contain'},alumbl_topText:{color:o.$text_color,fontWeight:'600',marginBottom:10,fontSize:14,fontFamily:m},alumbl_bottomText:{color:o.$text_color_light,fontWeight:'400',marginTop:10,fontSize:13,fontFamily:m},album_ZOOM:{backgroundColor:'#000',width:(0,t(a[2]).widthPercentageToDP)('100%'),height:(0,t(a[2]).heightPercentageToDP)('100%')},album_ZOOM_wrap:{backgroundColor:'#000',position:'absolute',top:0,left:0,width:(0,t(a[2]).widthPercentageToDP)('100%'),height:(0,t(a[2]).heightPercentageToDP)('100%')+('android'==d.Platform.OS?s:0),zIndex:1},album_ZOOM_img:{backgroundColor:'#fff',width:'100%',height:400},album_ZOOM_topBar:{position:'relative',backgroundColor:'#000',width:'100%',height:30,paddingHorizontal:10,paddingVertical:5,marginTop:s+10,alignItems:'center',flexDirection:'row'},album_ZOOM_backBtn:{position:'absolute',left:5,padding:10},album_ZOOM_indicator:{width:'100%',textAlign:'center',fontSize:14,color:o.$accent_color,fontFamily:m},addVis_Wrapper:{width:'100%',height:'100%',padding:10,paddingTop:0},addvisCon:{},addvis_pCon:{flexDirection:'row',alignItems:'center',paddingHorizontal:10,paddingBottom:10,marginBottom:10,borderBottomColor:o.$secondary_color_light,borderBottomWidth:2},addvis_pText:{width:'40%',color:o.$text_color,fontWeight:'500',fontSize:15,fontFamily:m},addvis_pChoiceBoxCon:{width:'60%',alignItems:'flex-end'},addvis_pChoiceBoxbg:{backgroundColor:'#efefef'},addVisForm:{paddingHorizontal:10},addVisRow:{flexDirection:'row',width:'100%',flexWrap:'wrap',justifyContent:'center'},addVisRow2:{flexDirection:'row',width:'100%',flexWrap:'wrap',paddingHorizontal:5},addVisCol50:{width:'47%',marginBottom:10},addVisCol100:{width:'100%',marginBottom:10},addVisColspace:{paddingHorizontal:5},addVisCol1:{marginRight:5},addVisCol2:{marginLeft:5},addVisFormGrp:{},addVisInputStyle:{height:40,borderRadius:5,backgroundColor:o.$secondary_color_light,paddingHorizontal:10,color:o.$text_color,fontFamily:m},addVisLabel:{color:o.$text_color,fontSize:14,fontWeight:'400',marginBottom:6,fontFamily:m},addVisPickerStyle:{height:40,borderRadius:5},addVisPickerOverlay:{backgroundColor:'rgba(0, 0, 0, 0.5)'},addVisPicker_OptionContainerStyle:{backgroundColor:'#fff',paddingHorizontal:0},PV_selectStyle:{width:'60%'},PV_selectInputStyle:{backgroundColor:o.$bg_color,width:'84%'},PV_selectInputStyle1:{width:'75%'},Sale_filterSelInputStyle:{backgroundColor:o.$secondary_color_light,width:'100%'},Sale_filterSelStyle:{width:'80%'},Sale_filterwrap:{backgroundColor:o.$secondary_color_light,borderRadius:5,width:'60%',flexDirection:'row'},Sale_clrfilterBtn:{width:'20%',alignItems:'center',padding:5,justifyContent:'center',borderLeftWidth:1,borderLeftColor:o.$primary_color},PV_textInputStyle:{backgroundColor:o.$bg_color,width:'60%',color:'#000'},Geoloc_btnWrap:{width:'100%',flexDirection:'row',marginTop:10,paddingHorizontal:10},geo_btn:{paddingHorizontal:20,minWidth:100,paddingVertical:10,borderRadius:40,backgroundColor:o.$primary_color,alignItems:'flex-start'},addVisPicker_InputStyle:{backgroundColor:o.$secondary_color_light,borderRadius:5,overflow:'hidden',textAlign:'center',fontSize:14,color:o.$text_color,paddingVertical:12,paddingHorizontal:12,fontFamily:m},addVisPicker_Dis_InputStyle:{backgroundColor:'#bbbbbb'},addvis_opStyle:{padding:0},addvis_opTextStyle:{paddingVertical:8,paddingHorizontal:10,fontSize:15,color:o.$text_color,fontFamily:m},addvis_selectedOpStyle:{backgroundColor:o.$secondary_color_light},addvis_selectedOpTextStyle:{fontFamily:m,paddingVertical:8,paddingHorizontal:10,color:o.$primary_color,textAlign:'center',fontSize:17},addVisCameras:{flexDirection:'row',flexWrap:'wrap'},addVisScroll:{height:(0,t(a[2]).heightPercentageToDP)('100%')-260},addVisScroll23:{height:"100%"},addVisScrollCon:{},addVis_btnWrap:{width:'100%',flexDirection:'row',alignItems:'center',justifyContent:'center',paddingBottom:15,paddingTop:5,borderBottomColor:o.$secondary_color_light,borderBottomWidth:2},addVis_btnWrap2:{borderBottomWidth:0,justifyContent:'flex-start'},addVis_btn:{paddingHorizontal:20,minWidth:100,paddingVertical:10,borderRadius:40,backgroundColor:o.$primary_color,alignItems:'center',elevation:2,shadowColor:'#000',shadowOffset:{width:0,height:2},shadowOpacity:.3},addVisBtnText:{fontSize:14,color:o.$accent_color,fontFamily:m},addVis_list:{paddingTop:10,paddingHorizontal:10,width:'100%'},report_ir_list:{paddingTop:5,paddingHorizontal:5,width:'100%'},addVis_listhdrText:{color:o.$primary_color,fontFamily:m},ir_listhdrText:{color:o.$primary_color,fontFamily:m,marginLeft:10},addVis_listInner:{marginTop:10},ir_listInner:{marginTop:1},addVis_listItem:{position:'relative',backgroundColor:o.$secondary_color_light,width:'100%',padding:10,borderRadius:5,marginBottom:20,elevation:2,shadowOffset:{width:0,height:2},shadowOpacity:.15,shadowColor:'#000'},addVis_listI_row:{flexDirection:'row',paddingBottom:5,marginBottom:5,borderBottomColor:o.$accent_color,borderBottomWidth:2},MissCall_listI_row:{flexDirection:'row',marginBottom:0},addVis_listI_lastrow:{borderBottomWidth:0,marginBottom:0},addVis_listI_Label:{fontSize:15,fontWeight:'500',color:o.$secondary_color_dark,marginRight:5,width:'50%',flexWrap:'wrap',fontFamily:m},addVis_listI_Label2:{fontSize:15,fontWeight:'500',color:o.$secondary_color_dark,marginRight:5,fontFamily:m},addVis_listI_Val:{fontSize:14,fontWeight:'400',color:o.$text_color,width:'50%',flexWrap:'wrap',fontFamily:m},addVis_listI_Val2:{fontSize:14,fontWeight:'400',color:o.$text_color,width:'40%',flexWrap:'wrap',fontFamily:m},addVis_listI_Image:{width:80,height:80,borderRadius:5},addVis_listI_row2:{flexDirection:'row',width:'100%'},addVis_listIcol100:{width:'100%'},addVis_listIcol1:{width:'60%'},addVis_listIcol2:{width:'40%',paddingLeft:10,alignItems:'center'},addVis_btnRemove:{padding:8,alignItems:'center',justifyContent:'center',paddingHorizontal:10,borderRadius:40,position:'absolute',right:0,top:-30,backgroundColor:o.$accent_color,elevation:2,shadowOpacity:.2,shadowOffset:{width:0,height:2}},addVis_listPcon:{width:'48%',marginTop:10,flexDirection:'row',backgroundColor:o.$bg_color,paddingVertical:3,paddingHorizontal:5,borderRadius:4},addVis_listPcon1:{marginRight:5},addVis_listPcon2:{marginLeft:5},addVis_listR:{flexDirection:"row",marginTop:10,flexWrap:'wrap'},addVis_listRlbl:{fontSize:15,fontWeight:'500',color:o.$secondary_color_dark,marginRight:5,width:'60%',flexWrap:'wrap',fontFamily:m},contactConvWrap:{paddingHorizontal:10,paddingTop:10,width:'100%',height:'100%'},contactConvCard:{backgroundColor:o.$bg_color,elevation:2,shadowColor:'#000',shadowOpacity:.15,borderRadius:5,shadowOffset:{width:0,height:2},padding:10},contactConvCardRow:{flexDirection:'row',flexWrap:'wrap'},contactConvCardCol:{width:'100%',marginBottom:10},ccCard_FormGrp:{flexDirection:'row',alignItems:'center'},ccCard_lbl:{fontSize:15,fontWeight:'500',color:o.$secondary_color_dark,width:'45%',paddingRight:10,flexWrap:'wrap',fontFamily:m},ccCard_input:{width:'55%',backgroundColor:o.$secondary_color_light,borderRadius:5,overflow:'hidden',textAlign:'left',fontSize:14,color:o.$text_color,paddingVertical:12,paddingHorizontal:12,fontFamily:m},surveyPageWrapper:{marginTop:10,paddingTop:10,backgroundColor:o.$secondary_color_light,borderTopLeftRadius:40,borderTopRightRadius:40},surveyList:{width:'100%'},surveyListInner:{justifyContent:'center',padding:10,paddingHorizontal:15,width:'100%'},surveyItem:{elevation:1,shadowOpacity:.2,shadowOffset:{width:0,height:2},shadowColor:'#efefef',backgroundColor:'#0000',marginBottom:10},surveyItem_tile:{flexDirection:'row',alignItems:'center',width:'100%',padding:10,borderRadius:10},surveyItem_name:{fontSize:14,fontWeight:'500',color:o.$text_color,flexWrap:'wrap',fontFamily:m},surveyItemCircle:{backgroundColor:'#fff',width:40,height:40,borderRadius:20,alignItems:'center',justifyContent:'center',marginRight:10},surveyItemCircle_Text:{fontFamily:m,fontSize:16,fontWeight:'500',color:o.$primary_color,fontFamily:m},surveyItem_Check:{position:'absolute',width:24,height:24,right:10,borderRadius:15,elevation:3,paddingLeft:.2,shadowColor:'#000'},surveyCatList:{width:'100%',marginTop:20},surveyCatItem:{elevation:1,shadowOpacity:.2,shadowOffset:{width:0,height:2},shadowColor:'#000',backgroundColor:o.$bg_color,marginBottom:10,flexDirection:'row',alignItems:'center',borderRadius:5,paddingHorizontal:10,paddingVertical:5},surveyCatItem_name:{fontSize:14,fontWeight:'500',color:o.$text_color,paddingRight:10,width:(0,t(a[2]).widthPercentageToDP)('100%')-125,fontFamily:m},surveyCatItem_Circle:{backgroundColor:o.$secondary_color_light,width:40,height:40,borderRadius:20,alignItems:'center',justifyContent:'center',marginRight:10},surveyCatItem_CircleText:{fontSize:16,fontWeight:'500',color:o.$primary_color,fontFamily:m},surveyCatItem_Check:{position:'absolute',width:24,height:24,right:10,borderRadius:15,elevation:3,shadowColor:'#000'},SurveyView:{position:'absolute',padding:10,paddingTop:30,paddingBottom:20,top:20,left:0,right:0,width:'100%',height:(0,t(a[2]).heightPercentageToDP)('100%')-(s+50),shadowOpacity:1,shadowColor:'#8d8d8d',shadowRadius:5,alignItems:'center',borderTopLeftRadius:40,borderTopRightRadius:40},SurveyViewCloseBtn:{position:'absolute',top:-17,right:30,paddingHorizontal:6,paddingVertical:5,borderRadius:20,backgroundColor:o.$primary_color,shadowColor:'#8d8d8d',shadowOpacity:1,elevation:2,shadowOffset:{width:0,height:2}},SurveyViewContent:{width:'100%'},SurveyViewContentInner:{padding:10,height:(0,t(a[2]).heightPercentageToDP)('100%')-200},SV_activeSurvey:{position:'absolute',top:-17,left:30,shadowColor:'#8d8d8d',shadowOpacity:1,elevation:2,shadowOffset:{width:0,height:2},backgroundColor:'#0000',marginBottom:10,width:(0,t(a[2]).widthPercentageToDP)('100%')-115},SV_activeSurvey_tile:{padding:10,borderRadius:30,paddingHorizontal:20,backgroundColor:o.$primary_color},SV_activeSurvey_name:{fontSize:16,fontWeight:'500',color:o.$accent_color,fontFamily:m},surveyQtnScroll:{width:'100%'},surveyQtnScrollInner:{width:'100%',paddingBottom:10,paddingHorizontal:5},surveyQtn_InputStyle:{backgroundColor:o.$secondary_color_light,borderRadius:5,overflow:'hidden',textAlign:'left',fontSize:14,color:o.$text_color,paddingVertical:12,paddingHorizontal:12,height:40,fontFamily:m},surveyQtn_datePicker_text:{textAlign:'left',width:'100%',backgroundColor:o.$secondary_color_light,paddingVertical:10,paddingHorizontal:10,color:o.$accent_color2,height:'100%',justifyContent:'center',alignItems:'center',borderRadius:5,fontFamily:m},surveyQtn_datePicker:{position:'absolute',width:40,height:40,right:0,top:0,backgroundColor:o.$primary_color,alignItems:'center',justifyContent:'center',borderTopRightRadius:5,borderBottomRightRadius:5},surveyQtn_datePicker_con:{position:'relative',justifyContent:'center',height:40},surveyQtnRatingIcon:{position:'absolute',width:40,height:40,right:0,top:0,backgroundColor:o.$primary_color,alignItems:'center',justifyContent:'center',borderTopRightRadius:5,borderBottomRightRadius:5},SamplingCat_action_reCap:{position:'absolute',top:-10,right:-10,padding:8,backgroundColor:'#efefef',borderRadius:30,elevation:2},Sampling_pCon:{flexDirection:'row',alignItems:'center',paddingHorizontal:10,paddingBottom:20,marginTop:2,borderBottomColor:o.$secondary_color_light},Sampling_pCon2:{flexDirection:'row',alignItems:'center',paddingHorizontal:10,paddingBottom:20,borderBottomColor:o.$fourth_color,borderBottomWidth:1},Sampling_pText:{width:'40%',marginTop:10,color:o.$text_color,fontWeight:'500',fontSize:15,fontFamily:m},Sampling_pTextTime:{width:'40%',marginTop:10,color:o.$text_color,fontWeight:'400',fontSize:14,fontFamily:m},Sampling_LunchText:{width:'40%',marginTop:10,paddingLeft:20,color:o.$text_color,fontWeight:'400',fontSize:15,fontFamily:m},Sampling_menu_done:{position:'absolute',width:14,height:14,right:5,top:0,borderRadius:25,elevation:3,shadowColor:'#000',backgroundColor:"#fff"},Sampling_listIcol1:{width:'100%'},Sampling_OStock_wrap:{width:'100%',marginBottom:0},Sampling_OStock_prds:{paddingBottom:3},Samling_borderA:{borderTopColor:o.$fourth_color,borderTopWidth:1},Samling_borderB:{borderBottomColor:o.$fourth_color,borderBottomWidth:1},Samling_borderT:{borderTopColor:o.$fourth_color,borderTopWidth:1},Sampling_HdrTWrap:{flexWrap:"wrap",flexDirection:"row",alignItems:"center",justifyContent:"center"},sampling_disable_Tick:{position:'absolute',top:-1,right:-1},sampling_CameraWrap:{paddingVertical:5},SVn_ContentCon:{paddingHorizontal:10,paddingBottom:70},SVn_ContentOuter:{width:'100%',height:'100%'},VLoginQA_ContentOuter:{width:'100%'},SVn_ContentInner:{padding:10},SVn_activeSurvey:{zIndex:1,position:'absolute',top:-15,left:0,right:0,alignItems:'center',marginBottom:10},SVn_activeSurvey_tile:{shadowColor:'#8d8d8d',shadowOpacity:1,elevation:2,shadowOffset:{width:0,height:2},backgroundColor:'#0000',borderRadius:30,paddingHorizontal:15,alignItems:'center',paddingVertical:7,width:(0,t(a[2]).widthPercentageToDP)('100%')-50},SVn_SubmitBtn:{position:'absolute',bottom:'ios'==d.Platform.OS?30:10,left:0,right:0,width:'100%',alignItems:'center'},SVn_PageWrapper:{marginTop:10,paddingTop:10,backgroundColor:o.$bg_color,borderTopLeftRadius:40,borderTopRightRadius:40},SVn_QtnScroll:{width:'100%',paddingTop:20},SVn_QtnScrollInner:{width:'100%',paddingBottom:40,paddingHorizontal:5},SVn_GroupView:{paddingTop:20,paddingBottom:30},SVn_GroupView_hdr:{paddingHorizontal:10,paddingVertical:5,alignItems:'center'},SVn_GroupView_hdrText:{fontSize:13,color:o.$accent_color,fontFamily:m},SVn_GroupViewList:{paddingTop:10},FeedbVn_GroupView:{paddingBottom:20},SChkVn_GroupView:{paddingBottom:20},SChk_BtnWrapFlex:{flexDirection:'row',position:'absolute',bottom:'ios'==d.Platform.OS?30:10,left:0,right:0,width:'100%',alignItems:'center',paddingHorizontal:10},SChk_BtnWrapFlex2:{flexDirection:'row',position:'absolute',bottom:'ios'==d.Platform.OS?30:45,left:0,right:0,width:'100%',alignItems:'center',paddingHorizontal:10},SChk_BtnCol:{width:'50%'},SChk_BtnCol1:{paddingRight:10},SChk_BtnCol2:{paddingLeft:10},SChk_Btn:{width:'100%'},SChk_BtnSave:{width:'100%'},SChk_BtnGst:{paddingLeft:10,width:'100%'},Gst_InputStyle:{height:46,borderRadius:5,backgroundColor:o.$secondary_color_light,paddingHorizontal:10,paddingVertical:5,color:o.$text_color,fontFamily:m},RatingModal:{position:'absolute',zIndex:99,backgroundColor:'#00000055',alignItems:'center',justifyContent:'center',top:0,left:0,right:0,bottom:0,width:'100%',height:'100%'},RatingModalCon:{zIndex:9999,backgroundColor:o.$bg_color,borderRadius:10,padding:10,width:'80%',elevation:3,shadowColor:'#000',shadowOffset:{width:0,height:2},shadowOpacity:.3},RatingModalHeding:{textAlign:'center',fontSize:14,color:o.$text_color,fontWeight:'500',marginBottom:20,marginTop:10,fontFamily:m},RModal_list:{padding:10},RModal_listInner:{},RModal_Btns:{flexDirection:'row',width:'100%',marginTop:20,marginBottom:20,justifyContent:'space-evenly'},RModal_BtnCancel:{minWidth:100,paddingHorizontal:15,paddingVertical:7,borderColor:o.$primary_color,borderWidth:1,borderRadius:30},RModal_BtnTextCancel:{textAlign:'center',fontSize:14,color:o.$primary_color,fontWeight:'500',fontFamily:m},RModal_Btnsave:{minWidth:100,paddingHorizontal:15,paddingVertical:7,backgroundColor:o.$primary_color,borderRadius:30},RModal_BtnTextsave:{textAlign:'center',fontSize:14,color:o.$accent_color,fontWeight:'500',fontFamily:m},RModal_listItem:{paddingHorizontal:10,paddingVertical:7,borderRadius:4,marginBottom:10},RModal_listItemText:{textAlign:'center',fontSize:14,color:o.$text_color,fontWeight:'500',fontFamily:m},VRModalHeding:{textAlign:'center',fontSize:14,color:o.$text_color,fontWeight:'500',marginTop:10,fontFamily:m},VRSubHeding:{textAlign:'center',fontSize:12,color:o.$red,fontWeight:'400',marginBottom:20,marginTop:10,fontFamily:m},VRSubHeding2:{textAlign:'center',fontSize:12,color:o.$primary_color,fontWeight:'400',marginTop:10,fontFamily:m},VRMicBgRipple1:{width:80,height:80,borderWidth:5,borderColor:'#f5acb4c2',borderRadius:40,position:'absolute',top:0,left:0},VRMicBgRipple2:{width:80,height:80,borderWidth:5,borderColor:'#fce6e9e3',borderRadius:70,position:'absolute',top:0,left:0},VoiceRecorder:{width:'100%',alignItems:'center'},VoiceRecorderMic:{padding:10},VoiceRecorderMicBtn:{width:60,height:60,backgroundColor:o.$red,alignItems:'center',justifyContent:'center',borderRadius:40,elevation:3,shadowOpacity:.2,shadowOffset:{width:0,height:2},shadowColor:'#bdbdbd'},VoiceRecorderStopBtn:{width:60,height:60,backgroundColor:o.$red,position:'absolute',top:10,left:10,alignItems:'center',justifyContent:'center',borderRadius:40,elevation:3,shadowOpacity:.2,shadowOffset:{width:0,height:2},shadowColor:'#bdbdbd'},VoiceRecordedView:{marginTop:30,alignItems:'center',width:'100%'},VoiceRecorderTimer:{textAlign:'center',fontSize:13,color:o.$text_color,fontWeight:'400',fontFamily:m},VRPlayBack:{alignItems:'center',flexDirection:'row',marginTop:10,paddingTop:10,borderTopColor:o.$secondary_color_light,borderTopWidth:2,width:'100%',paddingHorizontal:10},VRPlayBackBarView:{width:'70%',alignItems:'center'},VRPlayBackBar:{position:'relative',width:'100%'},VRPlayBackBarBg:{width:'100%',height:10,borderRadius:20,backgroundColor:'#efefef'},VRPlayBackBarFilled:{width:'10%',position:'absolute',top:0,left:0,height:10,borderRadius:20,backgroundColor:o.$primary_color},VRPlayBackTimer:{},VRPlayBackControls:{width:'30%',alignItems:'flex-end'},VRPB_Play:{width:40,height:40,backgroundColor:o.$primary_color,alignItems:'center',justifyContent:'center',borderRadius:40,elevation:3,shadowOpacity:.2,shadowOffset:{width:0,height:2},shadowColor:'#bdbdbd'},VRPB_Pause:{width:40,height:40,backgroundColor:o.$primary_color,position:'absolute',top:0,right:0,alignItems:'center',justifyContent:'center',borderRadius:40,elevation:3,shadowOpacity:.2,shadowOffset:{width:0,height:2},shadowColor:'#bdbdbd'},SurveyL_SubmitBtn:{position:'absolute',bottom:'ios'==d.Platform.OS?30:10,left:10,right:0,width:'100%',paddingBottom:20,alignItems:'center'},addstorebtn:{width:'30%',paddingVertical:5,paddingHorizontal:15,alignItems:'center',justifyContent:'center',backgroundColor:o.$bg_color,borderRadius:15,elevation:3,shadowOffset:{width:0,height:2},shadowColor:'#747474',shadowOpacity:1.15},vl_scrollView:{width:(0,t(a[2]).widthPercentageToDP)('100%')},vl_scrollViewInner:{width:'100%',paddingHorizontal:10},vlPageWrapper:{paddingTop:10,backgroundColor:o.$secondary_color_light},vlUinfo_Card:{marginBottom:10,backgroundColor:o.$bg_color,borderRadius:10,padding:10,elevation:3,shadowColor:'#000',shadowOffset:{width:0,height:2},shadowOpacity:.15},vlUinfo_CardRow:{flexDirection:'row',paddingHorizontal:5,paddingVertical:5},vlUinfo_CardBorder:{borderBottomColor:o.$secondary_color_light,borderBottomWidth:2},vlUinfo_lbl:{fontSize:14,color:o.$secondary_color_dark,marginRight:5,fontFamily:m},vlUinfo_text:{fontSize:14,color:o.$text_color,fontFamily:m},vlEmplForm:{marginTop:10,marginBottom:10},vlEmplFormRow:{flexDirection:'row',alignItems:'center'},vlEmplForm_field:{width:'80%'},vlEmplForm_InputStyle:{marginRight:10,backgroundColor:o.$bg_color,borderRadius:7,elevation:3,shadowOffset:{width:0,height:2},shadowColor:'#afafaf',shadowOpacity:1.15,paddingVertical:10,paddingHorizontal:10,color:o.$text_color,fontFamily:m},vlEmplSearchBtn:{width:'20%',paddingVertical:10,paddingHorizontal:10,alignItems:'center',justifyContent:'center',backgroundColor:o.$primary_color,borderRadius:7,elevation:3,shadowOffset:{width:0,height:2},shadowColor:'#747474',shadowOpacity:1.15},vlEmplSearchBtn2:{width:'30%',paddingVertical:5,paddingHorizontal:5,alignItems:'center',justifyContent:'center',backgroundColor:o.$primary_color,borderRadius:7,elevation:3,shadowOffset:{width:0,height:2},shadowColor:'#747474',shadowOpacity:1.15},vlEmplSearchBtnText:{fontSize:14,fontWeight:'500',color:'#fff',fontFamily:m},vlEmplList:{marginTop:10},vlEmplLDtl:{marginBottom:10,backgroundColor:o.$primary_color,borderRadius:10,padding:10,elevation:3,shadowColor:'#747474',shadowOffset:{width:0,height:2},shadowOpacity:1},vlEmplLDtlRow:{flexDirection:'row',paddingHorizontal:5,paddingVertical:5},vlEmplLDtlRow_Lbl:{fontSize:14,color:o.$accent_color,marginRight:5,fontWeight:'700',fontFamily:m},vlEmplLDtlRow_Text:{fontSize:14,color:o.$text_color_light2,marginRight:5,textTransform:'capitalize',fontFamily:m},vlEmplLDtlRow_Border:{borderBottomColor:o.$secondary_color_light,borderBottomWidth:1},vlEmplLDtlAct:{paddingTop:10,flexDirection:'row'},vlED_Act_Cameras:{width:'80%'},vlED_Act_CameraCon:{marginRight:10,marginTop:5},vlED_Act_openCam:{},vlED_Act_ImageView:{position:'relative',backgroundColor:o.$secondary_color_light,padding:5,borderRadius:10,width:60,height:60},vlED_Act_Image:{width:50,height:50,borderRadius:10,backgroundColor:'#232323'},vlED_Act_reCap:{position:'absolute',top:-10,right:-10,padding:8,backgroundColor:o.$bg_color,borderRadius:30,elevation:2,shadowColor:'#8d8d8d',shadowOffset:{width:0,height:2},shadowOpacity:.5},vlED_Act_addEmplCon:{width:'20%',justifyContent:'flex-end'},vlED_Act_addEmpl:{height:40,paddingHorizontal:10,marginBottom:5,alignItems:'center',justifyContent:'center',backgroundColor:o.$accent_color,borderRadius:7,elevation:3,shadowOffset:{width:0,height:2},shadowColor:'#efefef',shadowOpacity:1},vlED_Act_addEmplText:{fontSize:14,color:o.$primary_color,textTransform:'capitalize',fontWeight:'600',fontFamily:m},vl_visitorsList:{marginTop:10,borderTopColor:o.$accent_color,borderTopWidth:2,paddingTop:10},vl_visitorsListText:{fontSize:14,color:o.$secondary_color_dark,marginRight:5,fontWeight:'500',fontFamily:m},vl_TblHeader:{marginBottom:10,marginTop:10,backgroundColor:o.$primary_color,borderRadius:10,padding:5,elevation:3,shadowColor:'#747474',shadowOffset:{width:0,height:2},shadowOpacity:1,flexDirection:'row',alignItems:'center'},vl_TblHeaderBox:{alignItems:'center',backgroundColor:o.$secondary_color_light,paddingVertical:5,borderRadius:5},vl_TblHeaderBox1:{width:(0,t(a[2]).widthPercentageToDP)('30%')-15,marginRight:5},vl_TblHeaderBox2:{width:(0,t(a[2]).widthPercentageToDP)('30%')-15,marginRight:5},vl_TblHeaderBox3:{width:'40%'},vl_TblHeaderTxt:{fontSize:13,color:o.$text_color,marginRight:5,textTransform:'capitalize',fontWeight:'700',fontFamily:m},vl_TblBody:{backgroundColor:o.$bg_color,borderRadius:10,padding:5,elevation:3,shadowColor:'#afafaf',shadowOffset:{width:0,height:2},shadowOpacity:1},vl_visitorsLItem:{flexDirection:'row',alignItems:'center',paddingVertical:10},vl_visitorsLItemB:{borderBottomColor:o.$secondary_color_light,borderBottomWidth:1},vl_visitorsLI_Box:{alignItems:'center'},vl_visitorsLI_Box1:{width:(0,t(a[2]).widthPercentageToDP)('30%')-15,marginRight:5,alignItems:'flex-start',paddingLeft:5},vl_visitorsLI_Box2:{width:(0,t(a[2]).widthPercentageToDP)('30%')-15,marginRight:5},vl_visitorsLI_Box3:{width:'40%',flexDirection:'row',alignItems:'center',position:'relative'},vl_visitorsLI_Txt:{fontSize:13,color:o.$text_color,marginRight:5,textTransform:'capitalize',fontWeight:'400',fontFamily:m},vl_CheckOutBtn:{backgroundColor:o.$primary_color,marginRight:5,borderRadius:10,padding:5,paddingHorizontal:10,elevation:3,shadowColor:'#afafaf',shadowOffset:{width:0,height:2},shadowOpacity:1},vl_CheckOutBtnText:{color:o.$accent_color,fontSize:14,fontWeight:'600',fontFamily:m},vl_DeleteBtn:{position:'absolute',right:5,backgroundColor:o.$bg_color,borderRadius:20,width:35,height:35,alignItems:'center',justifyContent:'center',elevation:2,shadowColor:'#afafaf',shadowOffset:{width:0,height:2},shadowOpacity:1},vl_checkoutModal:{alignItems:'center'},vl_checkoutModalTitle:{fontSize:14,fontWeight:'500',color:o.$primary_color,marginBottom:10,fontFamily:m},vl_removeModalTitle:{fontSize:14,fontWeight:'500',color:o.$text_color,marginBottom:10,marginTop:10,fontFamily:m},vl_removeModalSubTitle:{fontSize:14,fontWeight:'500',color:o.$primary_color,marginBottom:20,fontFamily:m},vl_checkoutM_Con:{width:'100%'},vl_checkoutM_Camera:{alignItems:'center'},vl_checkoutM_CameraCon:{},vl_checkoutM_openCam:{},vl_checkoutM_ImageView:{position:'relative',backgroundColor:o.$secondary_color_light,padding:5,borderRadius:10,width:90,height:90},vl_checkoutM_Image:{width:80,height:80,borderRadius:10,backgroundColor:'#232323'},vl_checkoutM_recap:{position:'absolute',top:-10,right:-10,padding:8,backgroundColor:o.$primary_color,borderRadius:30,elevation:2,shadowColor:'#8d8d8d',shadowOffset:{width:0,height:2},shadowOpacity:.5},vl_checkoutM_btng:{marginTop:20},vlStatus:{flexDirection:'row',alignItems:'center',justifyContent:'center'},vlStatus2:{flexDirection:'row',alignItems:'center',justifyContent:'center'},rp_scrollView:{width:'100%',height:'100%'},rp_scrollViewInner:{width:'100%',paddingHorizontal:5},reportCon:{paddingBottom:10},reportConHdr:{backgroundColor:o.$primary_color,borderRadius:7,paddingVertical:10,paddingHorizontal:10,elevation:3,shadowColor:'#747474',shadowOffset:{width:0,height:2},shadowOpacity:1,flexDirection:'row',justifyContent:'center',marginBottom:5,marginTop:5},reportConHdrText:{color:o.$accent_color,fontSize:14,fontWeight:'500',fontFamily:m},report_TblHeader:{marginBottom:10,marginTop:10,backgroundColor:o.$primary_color,borderRadius:10,elevation:3,shadowColor:'#747474',shadowOffset:{width:0,height:2},shadowOpacity:1,flexDirection:'row'},report_TblHeaderBox:{alignItems:'center',marginRight:2,marginLeft:2,height:'100%',backgroundColor:o.$secondary_color_light,paddingVertical:5,borderRadius:5},report_TblHeaderBox1:{width:(0,t(a[2]).widthPercentageToDP)('40%')-15,marginRight:5},report_TblHeaderBox2:{width:(0,t(a[2]).widthPercentageToDP)('30%')-15,marginRight:5},report_TblHeaderBox3:{width:'30%'},report_TblHeaderTxt:{fontSize:13,color:o.$text_color,marginRight:5,fontWeight:'700',fontFamily:m},report_new_date:{color:o.$text_color,fontSize:14,fontWeight:'400',marginBottom:6,fontFamily:m,marginLeft:12},report_TblBody:{backgroundColor:o.$bg_color,borderRadius:10,padding:5,elevation:3,shadowColor:'#5f5f5f',shadowOffset:{width:0,height:2},shadowOpacity:1},reportItem:{flexDirection:'row',alignItems:'center',paddingVertical:10},reportItemB:{borderBottomColor:o.$secondary_color_light,borderBottomWidth:1},reportItemBg:{backgroundColor:o.$text_color_light2},reportItemCol:{alignItems:'center',marginRight:2,marginLeft:2},DYreportItemCol:{alignItems:'center',marginRight:2,marginLeft:2,justifyContent:'center'},reportItemCol1:{width:(0,t(a[2]).widthPercentageToDP)('40%')-15,marginRight:5,alignItems:'flex-start',paddingLeft:5},reportItemCol2:{width:(0,t(a[2]).widthPercentageToDP)('30%')-15,marginRight:5},reportItemCol3:{width:'30%',alignItems:'center'},reportItemColText:{fontSize:13,color:o.$text_color,marginRight:5,fontWeight:'400',fontFamily:m},report_CardsWrap:{marginTop:10},report_CardI:{padding:10,marginBottom:15,backgroundColor:o.$bg_color,borderRadius:10,elevation:3,shadowColor:'#000',shadowOffset:{width:0,height:2},shadowOpacity:.2},report_CITotal:{backgroundColor:o.$fourth_color,paddingHorizontal:0,paddingTop:0},report_CardIRow:{flexDirection:'row',alignItems:'center',paddingVertical:2},report_CardIRow_BorderBtm:{borderBottomColor:o.$secondary_color_light,borderBottomWidth:1},report_CIRT_BorderBtm:{borderBottomColor:o.$text_color_light2,borderBottomWidth:1},report_CardIRow_Lbl:{fontSize:14,color:o.$primary_color,marginRight:5,fontWeight:'400',fontFamily:m},report_CardIRow_Val:{fontSize:13,color:o.$text_color,marginRight:5,fontWeight:'400',fontFamily:m},report_CIR_LblTotal:{color:o.$accent_color},report_CIR_ValTotal:{color:o.$accent_color},report_CardITHdr:{backgroundColor:o.$primary_color,borderTopLeftRadius:10,paddingHorizontal:15,paddingVertical:5,borderTopRightRadius:10,borderBottomColor:o.$secondary_color_light,borderBottomWidth:1,paddingBottom:5,marginBottom:10},report_CardITBody:{backgroundColor:o.$fourth_color,paddingHorizontal:10},report_CardITHdrText:{fontSize:16,color:o.$accent_color,marginRight:5,fontWeight:'500',fontFamily:m},reportMenuCon:{backgroundColor:o.$bg_color,borderRadius:10,padding:5,marginTop:20},reportMenuItem:{flexDirection:'row',alignItems:'center',paddingVertical:10,justifyContent:'center',paddingHorizontal:10,backgroundColor:o.$primary_color,borderRadius:6,marginBottom:15,elevation:3,shadowColor:'#000',shadowOffset:{width:0,height:2},shadowOpacity:1},reportMenuItemText:{fontSize:13,color:o.$accent_color,fontWeight:'500',fontFamily:m},settingsWrap:{padding:10,paddingHorizontal:10},settingsBtn:{flexDirection:'row',alignItems:'center',position:'relative',backgroundColor:o.$secondary_color_light,paddingVertical:15,paddingHorizontal:10,borderRadius:2,elevation:1,shadowColor:'#afafaf',shadowOffset:{width:0,height:2},shadowOpacity:.15,marginBottom:10},settingsBtnText:{fontSize:15,fontWeight:'600',color:o.$text_color,fontFamily:m},settingsBtnIcon:{position:'absolute',right:10},Breakclocktimer:{position:"absolute",right:0,top:10,flexDirection:'row'},BreakclocktimerWrap:{marginBottom:10,width:"100%",backgroundColor:"#E1E3E2",flexDirection:'row',alignItems:'center',justifyContent:'center',backgroundColor:"#E1E3E2"},BreakclocktimerRow:{flexDirection:'row',alignItems:'center',justifyContent:'center',backgroundColor:"#FFF",width:'50%',paddingVertical:8,marginVertical:16,marginLeft:"22%",borderRadius:30},BreakclocktimerText:{color:t(a[1]).PrimaryTheme.$primary_color,fontSize:14,marginLeft:5,fontWeight:'400'},BreakaddVisForm:{paddingHorizontal:10},BreakaddVisRow:{flexDirection:"column",width:'100%',flexWrap:'wrap',justifyContent:'center'},BreakaddVisCol50:{width:'100%',marginBottom:10},BreakaddVisCol100:{width:'100%',marginBottom:10},BreakaddVisColspace:{paddingHorizontal:5},BreakaddVisCol1:{marginRight:5},BreakaddVisCol2:{marginLeft:5},BreakaddVisFormGrp:{},BreakaddVisInputStyle:{height:40,borderRadius:5,backgroundColor:o.$secondary_color_light,paddingHorizontal:10,color:o.$text_color},BreakaddVisLabel:{color:o.$text_color,fontSize:14,fontWeight:'400',marginBottom:6},Break_RItemCol1:{width:(0,t(a[2]).widthPercentageToDP)('24%')-15,marginRight:5,justifyContent:'flex-start',alignItems:'center',paddingLeft:5,flexDirection:'row'},Break_RItemCol2:{width:(0,t(a[2]).widthPercentageToDP)('25%')-15,marginRight:5},Break_RItemCol3:{width:'25%',alignItems:'center'},Break_RItemCol4:{width:'23%',alignItems:'center'},BreakI_RItemCol1:{width:(0,t(a[2]).widthPercentageToDP)('23%')-15,marginRight:5,justifyContent:'flex-start',alignItems:'center',paddingLeft:5,flexDirection:'row'},BreakI_RItemCol2:{width:(0,t(a[2]).widthPercentageToDP)('22%')-15,marginRight:5},BreakI_RItemCol3:{width:'22%',alignItems:'center'},Break_RTblHeaderTxt:{fontSize:12,color:o.$text_color,marginRight:5,textTransform:'capitalize',fontWeight:'700'},Break_RTblBody:{backgroundColor:o.$bg_color,borderRadius:10,padding:5,elevation:3,shadowColor:'#afafaf',shadowOffset:{width:0,height:2},shadowOpacity:1},Break_RItem:{flexDirection:'row',alignItems:'center'},Break_RTblHeaderBox1:{width:(0,t(a[2]).widthPercentageToDP)('25%')-15,marginRight:5},Break_RTblHeaderBox2:{width:(0,t(a[2]).widthPercentageToDP)('25%')-15,marginRight:5},Break_RTblHeaderBox3:{width:'23%',marginRight:5},Break_VisLabel:{color:o.$text_color,fontSize:12,marginVertical:10,fontWeight:'400'},Break_VisBtnText:{fontSize:14},Break_Vis_btn:{paddingHorizontal:20,minWidth:100,paddingVertical:10,borderRadius:40,alignItems:'center',elevation:2,shadowColor:'#000',shadowOffset:{width:0,height:2},shadowOpacity:.3},Break_ConWrap:{width:'100%'},BreakI_RTblHeaderBox1:{width:(0,t(a[2]).widthPercentageToDP)('25%')-15,marginRight:5},BreakI_RTblHeaderBox2:{width:(0,t(a[2]).widthPercentageToDP)('24%')-15,marginRight:5},BreakI_RTblHeaderBox3:{width:'29%',marginRight:5},netSBar:{position:'absolute',bottom:0,width:'100%',backgroundColor:'#000',alignItems:'center',justifyContent:'center',paddingHorizontal:10,paddingVertical:6},netSBarText:{fontSize:13,fontWeight:'500',color:'#fff',fontFamily:m},netSBarGreen:{backgroundColor:'green'},netSBarGrey:{backgroundColor:'red'},netSBarGrey_Text:{color:'#fff'},netSBarGreen_Text:{color:'#fff'},Windows_Wrap:{},POS_Wrap:{paddingHorizontal:10},Win_scroll:{justifyContent:'center',padding:10,paddingBottom:100,width:'100%'},Win_scrollO:{marginBottom:80,width:'100%'},WItem_wrap:{width:'100%',marginBottom:20},WItem_Hdr:{},WItem_Hdrbg:{width:'100%',paddingHorizontal:10,paddingVertical:7,backgroundColor:o.$primary_color,borderRadius:5,justifyContent:'center',position:'relative'},WItem_HdrText:{fontSize:14,fontWeight:'500',color:o.$accent_color,width:'90%',fontFamily:m},WItem_HdrSubTitleText:{fontSize:13,fontWeight:'400',color:o.$accent_color,width:'80%',marginTop:10,fontFamily:m},WItem_Hdrname2:{fontSize:14,color:o.$accent_color,fontWeight:'400',marginTop:4,fontFamily:m},WForm:{paddingHorizontal:10,position:'relative',paddingVertical:5,backgroundColor:o.$secondary_color_light,borderRadius:10,elevation:1,shadowColor:'#484848',shadowOpacity:.1,shadowOffset:{width:0,height:2}},WItem_RefImgBtn:{position:'absolute',right:0,top:-5,width:40,height:40,borderRadius:20,alignItems:'center',justifyContent:'center'},WSCameraWrap:{justifyContent:'center'},WSCameraCon:{},WSCameraLabel:{fontSize:13,fontWeight:'400',color:'#000',textAlign:'center',marginTop:5,flexWrap:'wrap',fontFamily:m},WQPicker_InputStyle:{backgroundColor:o.$bg_color,borderRadius:5,overflow:'hidden',textAlign:'center',fontSize:14,color:o.$text_color,paddingVertical:12,paddingHorizontal:12,fontFamily:m},WStkWrap:{backgroundColor:o.$bg_color,marginBottom:10,paddingHorizontal:10,paddingVertical:5,borderRadius:5,elevation:1,shadowColor:'#efefef',shadowOpacity:.05,shadowOffset:{width:0,height:2}},WStkHdrText:{fontSize:13,fontWeight:'500',color:o.$text_color_dark,marginBottom:10,paddingBottom:5,borderBottomWidth:1,borderBottomColor:o.$secondary_color_light,fontFamily:m},WStkHdrText2:{fontSize:13,fontWeight:'500',color:o.$text_color_dark,paddingBottom:5,fontFamily:m},WStkHdrText3:{fontSize:13,fontWeight:'500',color:o.$text_color_dark,fontFamily:m},WStkHdrTextMBQ:{fontSize:13,fontWeight:'800',color:o.$text_color_dark,fontFamily:m},WStkHdr_checkboxWrap:{flexDirection:'row',alignItems:'flex-start',justifyContent:'flex-start'},WStkHdr_checkbox:{alignSelf:'flex-start'},WStkHdr_checkboxCon:{position:'absolute',width:25,height:25,top:-5,left:-10},WStkHdr_checkboxpName:{width:'85%',marginLeft:25},WStkHdr_PrdcontentWrap:{borderTopColor:o.$secondary_color_light,borderTopWidth:1,marginTop:5,paddingTop:5},WStkCon:{},WStkInputStyle:{backgroundColor:o.$secondary_color_light,borderRadius:5,overflow:'hidden',textAlign:'center',fontSize:14,color:o.$text_color,paddingVertical:2,paddingHorizontal:12,height:35,fontFamily:m},windhdrTextCon:{position:'relative',paddingHorizontal:10,marginBottom:5,justifyContent:'center',alignItems:'center',paddingVertical:5,borderRadius:4},windhdrText:{fontSize:15,fontWeight:'600',color:o.$primary_color,fontFamily:m},windhdr_checkAllBtnCon:{alignItems:'flex-start',marginBottom:10},windhdr_checkAllBtn:{flexDirection:'row',backgroundColor:o.$fourth_color,paddingRight:10,paddingVertical:3,alignItems:'center',justifyContent:'center',borderRadius:4,elevation:2,shadowOpacity:.1,shadowOffset:{width:0,height:2},shadowColor:'#000'},windhdr_checkAllBtnText:{marginLeft:10,fontSize:13,fontWeight:'500',color:o.$text_color,fontFamily:m},WQ_InputStyle:{backgroundColor:o.$bg_color,borderRadius:5,overflow:'hidden',textAlign:'left',fontSize:14,color:o.$text_color,paddingVertical:12,paddingHorizontal:12,height:40,fontFamily:m},WQ_datePicker_text:{fontFamily:m,textAlign:'left',width:'100%',backgroundColor:o.$bg_color,paddingVertical:10,paddingHorizontal:10,color:o.$accent_color2,height:'100%',justifyContent:'center',alignItems:'center',borderRadius:5},ContUs_Wrap:{padding:10,marginTop:10},ContUs_Hdr:{backgroundColor:o.$secondary_color_dark,borderRadius:4,justifyContent:'center',alignItems:'center',paddingVertical:10,paddingHorizontal:12},ContUs_HdrText:{color:o.$accent_color,fontSize:14,fontWeight:'500',fontFamily:m},ContUs_infoBox:{backgroundColor:o.$secondary_color_light,marginBottom:10,flexDirection:'row',alignItems:'center',borderRadius:5,paddingVertical:10,paddingHorizontal:10},ContUs_IB_desc:{marginLeft:10,flexWrap:'wrap',width:'85%',color:o.$text_color},ImageTypesPageWrap:{paddingHorizontal:10},ImageTypesLHd:{backgroundColor:o.$primary_color,marginBottom:10,alignItems:'center',borderRadius:5,paddingVertical:10,paddingHorizontal:10,elevation:.5,shadowOpacity:.1,shadowOffset:{width:0,height:2},shadowColor:'#000'},ImageTypesLHdText:{fontSize:14,fontWeight:'500',color:o.$accent_color,textAlign:'center',fontFamily:m},ImageTypesLOuter:{marginTop:10},ImageTypesL:{},ImageTypesLCon:{position:'relative',backgroundColor:o.$secondary_color_light,marginBottom:10,alignItems:'center',borderRadius:5,paddingVertical:10,paddingHorizontal:10,elevation:.5,shadowOpacity:.1,shadowOffset:{width:0,height:2},shadowColor:'#000'},ImageTypesLName:{fontSize:13,fontWeight:'500',color:o.$text_color,fontFamily:m},ImageTypesLImageCountBox:{position:'absolute',top:7,right:10,backgroundColor:o.$primary_color,width:25,height:25,borderRadius:30,alignItems:'center',justifyContent:'center'},ImageTypesLImageCountText:{fontSize:13,fontWeight:'600',color:o.$accent_color,fontFamily:m},ImageCapCamWrap:{flexDirection:'row',flexWrap:'wrap',alignItems:'flex-start'},ImageCapViewWrap:{flexDirection:'row',flexWrap:'wrap',alignItems:'flex-start',marginTop:20},ImageCapCamCon:{marginRight:10},ImgCapWrap:{paddingHorizontal:10},ImgCapCon:{},ImgCapBox:{},ImgCapBoxTDF:{},ImageCapImgViewOuter:{width:'33%'},ImageCapImgView:{position:'relative',width:90,backgroundColor:o.$secondary_color_light,padding:5,borderRadius:10,marginRight:20,marginBottom:20},ImageCapImgView1:{alignItems:'flex-start'},ImageCapImgView2:{alignItems:'center'},ImageCapImgView3:{alignItems:'flex-end'},ImageCapImg:{width:80,height:80,borderRadius:10,backgroundColor:'#232323'},ImageCapImgRemove:{position:'absolute',top:-10,right:-10,padding:6,backgroundColor:o.$red,borderRadius:30,elevation:1,shadowColor:'#000',shadowOpacity:.2,shadowOffset:{width:0,height:2}},stImage_RedAlert:{paddingHorizontal:13,marginBottom:5,paddingVertical:5,borderRadius:6,backgroundColor:'#dae4e0',width:'100%'},stImage_RedAlertTxt:{fontSize:12,color:'green',textAlign:'center',fontWeight:'500',fontFamily:m},SOSForm:{width:'100%',paddingHorizontal:10,borderRadius:10,backgroundColor:o.$fourth_color,elevation:1,shadowColor:'#484848',shadowOpacity:.1,shadowOffset:{width:0,height:2}},SOSheadingsCon:{position:'relative',paddingHorizontal:10,justifyContent:'center',alignItems:'center',paddingVertical:5,marginBottom:10,borderRadius:4},SOSheadingsCon2:{backgroundColor:o.$fourth_color},SOSheadingsCon3:{marginBottom:0},SOSheadingsText:{fontSize:15,fontWeight:'600',color:o.$text_color_dark,fontFamily:f},SOSheadingsText2:{color:o.$text_color},SOSHdrForm:{paddingHorizontal:10,position:'relative',marginTop:10,paddingVertical:10,borderRadius:5},SOSChildlist:{},SOSInputStyle:{backgroundColor:o.$bg_color,width:'80%',borderRadius:5,overflow:'hidden',fontSize:14,color:o.$text_color,paddingVertical:2,paddingHorizontal:12,height:35,fontFamily:m},SOSlist_form:{marginTop:10,borderTopColor:o.$secondary_color_light,borderTopWidth:1,marginTop:5,paddingTop:5},SOSform_row:{width:'100%',flexDirection:'row',marginBottom:10},SOSform_colflex:{width:'100%',flexDirection:'row',alignItems:'center'},SOSform_cols:{width:'100%'},SOSform_colsCommon:{},SOSform_col1:{width:'30%',paddingRight:5},SOSform_col2:{width:'70%',paddingLeft:5},SOSform_collabel:{width:'100%',color:o.$text_color_900,fontSize:13,fontFamily:m},SOSListHdr:{marginTop:10},SOShdrImagesWrap:{width:'100%',flexDirection:'row',flexWrap:'wrap',alignItems:'center'},SOSChildImagesWrap:{width:'100%',flexDirection:'row',flexWrap:'wrap',justifyContent:'center'},SOSCameraBtn:{width:80,height:80,justifyContent:'center',alignItems:'center',backgroundColor:o.$primary_color,padding:8,borderRadius:18,elevation:2},StSC_HdrWrap:{paddingHorizontal:10},StSC_ConWrap:{height:'100%',width:'100%'},StSC_scrollView:{width:(0,t(a[2]).widthPercentageToDP)('100%'),height:'100%',marginBottom:100},DYSC_scrollView:{width:(0,t(a[2]).widthPercentageToDP)('100%'),height:'100%',marginBottom:20},StSC_scrollViewInner:{width:'100%',paddingHorizontal:10,paddingBottom:20,paddingTop:5},StSCreportCon:{},StSC_RonHdr:{backgroundColor:o.$primary_color,borderRadius:7,paddingVertical:10,paddingHorizontal:10,elevation:3,shadowColor:'#747474',shadowOffset:{width:0,height:2},shadowOpacity:1,flexDirection:'row',justifyContent:'center',marginBottom:5},StSC_RConHdrText:{color:o.$accent_color,fontSize:14,fontWeight:'500',fontFamily:m},StSC_RTblHeader:{marginBottom:10,marginHorizontal:10,backgroundColor:o.$primary_color,borderRadius:10,padding:5,elevation:3,shadowColor:'#747474',shadowOffset:{width:0,height:2},shadowOpacity:1,flexDirection:'row',alignItems:'center'},StSC_RTblHeaderBox:{alignItems:'center',height:'100%',backgroundColor:o.$secondary_color_light,paddingVertical:5,borderRadius:5},StSC_RTblHeaderBox1:{width:(0,t(a[2]).widthPercentageToDP)('30%')-15,marginRight:5},StSC_RTblHeaderBox2:{width:(0,t(a[2]).widthPercentageToDP)('40%')-15,marginRight:5},StSC_RTblHeaderBox3:{width:'30%'},StSC_RTblHeaderTxt:{fontSize:13,color:o.$text_color,marginRight:5,textTransform:'capitalize',fontWeight:'700',fontFamily:m},StSC_RTblBody:{backgroundColor:o.$bg_color,borderRadius:10,padding:5,elevation:3,shadowColor:'#afafaf',shadowOffset:{width:0,height:2},shadowOpacity:1},StSC_RItem:{flexDirection:'row',alignItems:'center'},DYStSC_RItem:{flexDirection:'row'},StSC_RtemB:{borderBottomColor:o.$secondary_color_light,borderBottomWidth:1},StSC_RItemCol:{alignItems:'center'},StSC_RItemColIcon:{width:30,height:30,resizeMode:"stretch",backgroundColor:'#efefef',marginRight:5,borderRadius:4},StSC_RItemCol1:{width:(0,t(a[2]).widthPercentageToDP)('30%')-15,marginRight:5,justifyContent:'flex-start',alignItems:'center',paddingLeft:5,flexDirection:'row'},StSC_RItemCol2:{width:(0,t(a[2]).widthPercentageToDP)('40%')-15,marginRight:5},StSC_RItemCol3:{width:'30%',alignItems:'center'},StSC_RItemColText:{fontSize:13,color:o.$text_color,marginRight:5,textTransform:'capitalize',fontWeight:'400',fontFamily:m},StSC_RTblFooterWrap:{width:'100%',paddingHorizontal:10,position:'absolute',bottom:55,left:0,right:0},StSC_RTblFooter:{backgroundColor:o.$secondary_color_light,borderRadius:10,elevation:3,shadowColor:'#000',shadowOpacity:1,width:'100%',padding:10,flexDirection:'row'},StSC_RTblFooterBox:{width:'50%',flexDirection:'row',flexWrap:'wrap'},StSC_RTblFooterBox1:{paddingRight:5},StSC_RTblFooterBox2:{paddingLeft:5,justifyContent:'flex-end'},StSC_RTblHeaderLbl:{fontSize:13,color:o.$text_color,paddingRight:5,textTransform:'capitalize',fontFamily:m},StSC_RTblHeaderVal:{fontSize:13,color:o.$text_color,fontFamily:m},StSC_RTblHeaderTxt2:{textAlign:'right'},Orders_PageWrap:{width:'100%',height:'100%'},train_scrollView:{width:'100%',height:'100%'},train_scrollViewInner:{width:'100%'},train_Itext:{flexWrap:'wrap',width:'80%',paddingRight:10},trainingl:{flexDirection:'row',paddingRight:10,marginBottom:10,margin:10,backgroundColor:o.$bg_color,borderRadius:5,paddingVertical:10,alignItems:'center',elevation:5,shadowColor:'#000',shadowOffset:{width:0,height:3},shadowOpacity:.15},trainingView:{margin:16,marginVertical:8,width:'100%'},trainingView2:{flexDirection:"column",width:"70%"},trainingl_card_title:{fontSize:15,color:o.$text_color,fontWeight:'500',fontFamily:m},trainingl_codeText:{fontSize:12,color:o.$text_color,marginRight:5,fontFamily:m},trainingHdr:{width:"100%",backgroundColor:o.$primary_color,borderRadius:7,paddingVertical:10,paddingHorizontal:10,elevation:3,shadowColor:'#747474',shadowOffset:{width:0,height:2},shadowOpacity:1,flexDirection:'row',justifyContent:'center',marginBottom:5},trainingHdrText:{color:o.$accent_color,fontSize:14,fontWeight:'500',fontFamily:m},STp_hdrParent:{width:'100%',paddingHorizontal:10},STp_Hdr:{width:"100%",backgroundColor:o.$primary_color,borderRadius:7,paddingVertical:10,paddingHorizontal:10,elevation:3,shadowColor:'#747474',shadowOffset:{width:0,height:2},shadowOpacity:1,flexDirection:'row',justifyContent:'center',marginBottom:5},STp_HdrText:{color:o.$accent_color,fontSize:14,fontWeight:'500',fontFamily:m},STp_ContentOuter:{width:'100%',marginBottom:80},STp_ContentInner:{width:'100%',paddingBottom:20,paddingHorizontal:10,paddingTop:5},STp_Card:{flexDirection:'row',marginBottom:10,backgroundColor:o.$bg_color,borderRadius:5,paddingBottom:10,paddingTop:10,alignItems:'center',elevation:5,shadowColor:'#000',shadowOffset:{width:0,height:3},shadowOpacity:.15},STp_card_outer:{position:'relative',width:'100%'},STp_form:{marginTop:10,paddingTop:10,borderTopColor:o.$primary_color,borderTopWidth:2},STp_storeDetails:{paddingHorizontal:10},AddStore_ContentOuter:{width:'100%',marginBottom:110},AddStore_ContentInner:{width:'100%',paddingBottom:20,paddingHorizontal:5,paddingTop:10},AddStore_SubmitBtn:{position:'absolute',bottom:'ios'==d.Platform.OS?30:10,left:0,right:0,width:'100%',alignItems:'center'},beatPlan_pageWrapper:{paddingHorizontal:10,paddingTop:5},beatPlan_scrollView:{width:'100%'},beatPlan_scrollViewInner:{width:'100%',paddingBottom:20,paddingHorizontal:5,paddingTop:10},beatPlan_listItem:{flexDirection:'row',paddingRight:10,marginBottom:10,backgroundColor:o.$bg_color,borderRadius:5,paddingVertical:10,alignItems:'center',elevation:5,shadowColor:'#000',shadowOffset:{width:0,height:3},shadowOpacity:.15},beatPlan_lI_Wrap:{margin:16,marginVertical:8,width:'100%'},beatPlan_lI_Title:{fontSize:15,color:o.$text_color,fontWeight:'500',fontFamily:m},vl_AddBtn:{backgroundColor:o.$primary_color,alignSelf:'flex-end',marginLeft:'40%',borderRadius:10,padding:5,paddingHorizontal:10,elevation:3,shadowColor:'#afafaf',width:'30%',shadowOpacity:1},vl_Feedback:{fontSize:14,color:o.$secondary_color_dark,marginTop:5,marginLeft:20,fontFamily:m},vl_EditBtn:{backgroundColor:o.$primary_color,alignSelf:'flex-end',borderRadius:10,padding:5,paddingHorizontal:10,elevation:3,shadowColor:'#afafaf',width:'20%',shadowOpacity:1},vl_UploadBtn:{backgroundColor:o.$primary_color,alignSelf:'flex-end',borderRadius:10,padding:5,paddingHorizontal:10,elevation:3,shadowColor:'#afafaf',width:'20%',shadowOpacity:1},vlf_TblHeader:{marginBottom:10,marginTop:10,backgroundColor:o.$primary_color,borderRadius:10,padding:5,elevation:3,shadowColor:'#747474',shadowOffset:{width:0,height:2},shadowOpacity:1,flexDirection:'row',alignItems:'center'},vlf_TblHeaderBox1:{marginLeft:3,width:(0,t(a[2]).widthPercentageToDP)('30%')-15,marginRight:5},vlf_TblHeaderBox2:{width:(0,t(a[2]).widthPercentageToDP)('40%')-10,marginRight:5},vlf_TblHeaderBox3:{width:'30%'},vlf_TblHeaderTxt:{fontSize:13,color:o.$text_color,marginRight:5,textTransform:'capitalize',fontWeight:'700',marginLeft:10,fontFamily:m},vlf_visitorsLI_Box1:{width:(0,t(a[2]).widthPercentageToDP)('30%')-15,marginRight:5,alignItems:'flex-start',marginLeft:30},vlf_visitorsLI_Box2:{width:(0,t(a[2]).widthPercentageToDP)('30%')-15,marginRight:20},vlf_Visitor_recap:{position:'absolute',height:50,top:-10,right:-10,padding:8,backgroundColor:o.$primary_color,borderRadius:30,elevation:2,shadowColor:'#8d8d8d',shadowOffset:{width:0,height:2},shadowOpacity:.5},cameravd:{alignSelf:'center'},datavisitorloginPageWrapper:{padding:10,backgroundColor:o.$secondary_color_light,height:'100%'},vfRatingModal:{position:'absolute',backgroundColor:'#00000055',width:'20%',height:'3%'},vfcustomRatingBarStyle:{justifyContent:'center',flexDirection:'row',borderWidth:1,borderColor:o.$secondary_color_light,paddingVertical:5,borderRadius:5},surveyQtnRatingConAvg:{backgroundColor:o.$primary_color,borderRadius:5},vfstarImageStyle:{width:40,height:40,backgroundColor:'#000',resizeMode:'cover'},PndIR_PageWrapper:{paddingTop:10,backgroundColor:o.$secondary_color_light},PndIR_scrollView:{width:'100%',height:'100%'},PndIR_scrollViewInner:{width:'100%',paddingBottom:80},PndIR_MenuCon:{backgroundColor:o.$bg_color,borderRadius:10,padding:10},PndIR_MenuItem:{flexDirection:'row',alignItems:'center',paddingVertical:10,justifyContent:'center',paddingHorizontal:10,backgroundColor:o.$secondary_color_light,borderRadius:6,marginBottom:15,elevation:2,shadowColor:'#000',shadowOffset:{width:0,height:2},shadowOpacity:1},PndIR_ItemHighlight:{fontSize:13,color:o.$red,fontWeight:'700',fontFamily:m},PndIR_ItemHighlightG:{fontSize:13,color:o.$green,fontWeight:'700',fontFamily:m},PndIR_ItemHighlightTxt:{fontSize:13,color:o.$red,fontWeight:'500',fontFamily:m},progCh_scrollOuter:{marginBottom:10,marginTop:10},progCh_Con:{},progCh_TblHeader:{backgroundColor:o.$primary_color,borderRadius:5,padding:5,elevation:3,shadowColor:'#747474',shadowOffset:{width:0,height:2},shadowOpacity:1,flexDirection:'row',alignItems:'center'},progCh_TblHeaderBox:{},progCh_TblHeaderBox1:{width:'50%',paddingRight:3},progCh_TblHeaderBox2:{width:'50%',paddingLeft:3},progCh_TblHeaderBoxI:{alignItems:'center',backgroundColor:o.$secondary_color_light,paddingVertical:5,borderRadius:5},progCh_TblHeaderTxt:{fontSize:13,color:o.$text_color,marginRight:5,fontWeight:'500',fontFamily:m},progCh_TblBRow:{width:'100%',flexDirection:"row",marginRight:5,backgroundColor:o.$secondary_color_light,paddingHorizontal:5,paddingVertical:5,marginTop:5,borderRadius:5},progCh_TblBCol:{},progCh_TblBCol1:{width:'50%',paddingRight:3,borderRightWidth:1,borderRightColor:o.$text_color_light3,paddingRight:5},progCh_TblBCol2:{width:'50%',paddingLeft:3,paddingLeft:3,alignItems:"center"},progCh_TblBColI:{},progCh_TblBText:{fontSize:13,color:o.$text_color,fontWeight:'400',flexWrap:"wrap",fontFamily:m},progCh_InfoCon:{paddingVertical:5,paddingHorizontal:10,position:'relative',width:'100%',backgroundColor:o.$primary_color,borderRadius:10,elevation:5,shadowColor:'#000',shadowOffset:{width:0,height:3},shadowOpacity:.15},progCh_InfoCard:{paddingHorizontal:5},progCh_InfoRow:{flexDirection:'row'},progCh_InfoBB:{borderBottomColor:o.$accent_color,borderBottomWidth:1,marginBottom:5,paddingBottom:5},progCh_InfoLbl:{fontSize:14,color:o.$accent_color,marginRight:5,fontWeight:'400',fontFamily:m},progCh_InfoText:{fontSize:14,color:o.$accent_color,marginRight:5,fontWeight:'500',flexWrap:"wrap",fontFamily:m},progCh_InfoCol:{width:'50%',flexDirection:'row'},progCh_InfoCol1:{justifyContent:"flex-start",paddingRight:3},progCh_InfoCol2:{justifyContent:"flex-end",paddingLeft:3},progCh_InfoTextR:{marginRight:0},progCh_NextBtnWrap:{position:'absolute',bottom:0,left:0,right:0,width:(0,t(a[2]).widthPercentageToDP)('100%'),alignItems:'flex-end',padding:10},progCh_NextBtn:{backgroundColor:o.$primary_color,alignItems:'center',justifyContent:"center",borderRadius:50,width:50,height:50,padding:5,elevation:3,shadowColor:'#afafaf',shadowOpacity:1.5},ContrForm_activeP:{position:'absolute',top:-17,left:40,right:40,shadowColor:'#8d8d8d',shadowOpacity:1,elevation:2,shadowOffset:{width:0,height:2},backgroundColor:'#0000',marginBottom:10},ContrForm_activeP_tile:{padding:10,borderRadius:20,paddingHorizontal:20,backgroundColor:o.$primary_color,width:'100%',alignItems:'center'},ContrForm_activeP_name:{fontSize:16,fontWeight:'500',color:o.$accent_color,fontFamily:m},ContrForm_Hdr:{paddingVertical:5,borderRadius:5,paddingHorizontal:10,backgroundColor:o.$primary_color,width:'100%'},ContrForm_HdrText:{fontSize:14,fontWeight:'500',color:o.$accent_color,fontFamily:m},ContrFormWrap:{paddingBottom:10,marginBottom:80},ContrForm_PageWrapper:{padding:10,backgroundColor:o.$bg_color},ContrForm_ContentCon:{paddingBottom:10},ContrForm_ContentOuter:{width:'100%',marginBottom:90},ContrForm_GroupView:{paddingBottom:10},ContrForm_choiceBox:{backgroundColor:o.$secondary_color_light},ContrForm_hasData:{position:'absolute',width:24,height:24,right:5,top:5,borderRadius:15},Prog_DARsnSelectStyle:{width:'100%',marginTop:5},Prog_DAlabel:{textAlign:'left',color:o.$text_color_dark,fontWeight:'500',fontSize:14,marginBottom:10,padding:0,fontFamily:m},prog_scroll:{justifyContent:'center',padding:10,paddingBottom:150},prog_scrollOuter:{marginBottom:140,width:(0,t(a[2]).widthPercentageToDP)('100%')},prog_subText:{fontSize:13,color:o.$text_color_dark,fontWeight:'400',marginBottom:5,fontFamily:m},prog_Text:{marginBottom:3},DashB_ReportWrap:{paddingHorizontal:3},DashB_ReportsHdr:{padding:10,justifyContent:"center",borderRadius:5,shadowColor:'#d8d8d8',shadowOpacity:1,elevation:1,shadowOffset:{width:0,height:2},backgroundColor:'#eaf0fe'},DashB_ReportsHdrTxt:{color:o.$primary_color,fontWeight:'600',fontSize:14,fontFamily:m},DashB_ReportsHdrIcon:{position:'absolute',right:20,shadowColor:'#8d8d8d',shadowOpacity:1,elevation:2,shadowOffset:{width:0,height:2},padding:4,alignItems:'center',justifyContent:'center',backgroundColor:o.$primary_color,borderRadius:20},DashB_ReportCon:{padding:10,marginBottom:10,marginTop:10,borderRadius:5,shadowColor:'#000',shadowOpacity:1,elevation:2,shadowOffset:{width:0,height:2},backgroundColor:o.$secondary_color_light},DashB_ReportConHdr:{borderBottomWidth:1,borderBottomColor:t(a[1]).PrimaryTheme.$fifth_color,paddingBottom:12,marginBottom:5},DashB_ReportConHdrTxt:{color:o.$text_color_dark,fontWeight:'600',fontSize:14,fontFamily:m},DashB_ReportConHdrIcon:{position:'absolute',right:10,shadowColor:'#8d8d8d',shadowOpacity:1,elevation:2,shadowOffset:{width:0,height:2},padding:4,alignItems:'center',justifyContent:'center',backgroundColor:o.$primary_color,borderRadius:20},DashB_ReportContent:{},DashBTbl_ReportWrap:{width:'100%',minHeight:40},DashBTbl_ReportColWrap:{width:100},DashBTbl_ReportColW:{width:100},DashBTbl_NoDataCon:{width:'100%',alignItems:'center',justifyContent:'center',backgroundColor:o.$bg_color,borderRadius:10,padding:5,elevation:1,shadowColor:'#efefef',shadowOffset:{width:0,height:2},shadowOpacity:.1},DashBTbl_NoDataText:{color:o.$text_color_light,fontWeight:'500',fontSize:14,fontFamily:m},DashBTbl_ReportHdr:{marginBottom:10,marginTop:10,backgroundColor:o.$primary_color,borderRadius:10,padding:5,elevation:3,shadowColor:'#747474',shadowOffset:{width:0,height:2},shadowOpacity:1,flexDirection:'row',alignItems:'center'},DashBTbl_ReportHdrColTxt:{color:o.$text_color,fontWeight:'600',fontSize:14,fontFamily:m},DashBTbl_ReportHdrCol:{alignItems:'center',height:'100%',marginRight:2,marginLeft:2,backgroundColor:o.$bg_color,paddingVertical:5,paddingHorizontal:5,borderRadius:5},DashBTblBody:{backgroundColor:o.$bg_color,borderRadius:5,padding:5,elevation:3,shadowColor:'#5f5f5f',shadowOffset:{width:0,height:2},shadowOpacity:1},DashBTbl_Item:{flexDirection:'row',alignItems:'center'},DashBTbl_ItemB:{borderBottomColor:o.$fifth_color,borderBottomWidth:1,paddingBottom:5,marginBottom:5},DashBTbl_ItemBg:{backgroundColor:o.$text_color_light2},DashBTbl_ItemCol:{alignItems:'center',marginRight:2,marginLeft:2,width:'100%',height:'100%',borderRadius:4,paddingVertical:7,paddingHorizontal:2},DashBTbl_ItemCol2:{alignItems:'center',marginRight:2,marginLeft:2,justifyContent:'center'},DashBTbl_ItemColText:{fontSize:13,color:o.$text_color,marginRight:5,fontWeight:'400',fontFamily:m},DashBTbl_ReportColContent:{backgroundColor:o.$secondary_color_light,borderRadius:5,padding:5,marginHorizontal:2},DashBCard_Wrap:{flexDirection:'row',paddingVertical:5,paddingHorizontal:3},DashBCard_Item:{width:180,paddingVertical:5,paddingHorizontal:5,backgroundColor:o.$bg_color,borderRadius:10,elevation:3,shadowColor:'#878787',shadowOffset:{width:0,height:2},shadowOpacity:.3},DashBCard_ItemMid:{marginLeft:5,marginRight:5},DashBCard_ItemFirst:{marginRight:5},DashBCard_ItemLast:{marginLeft:5},DashBCard_Itemhdr:{flexDirection:'row',paddingHorizontal:5,borderBottomColor:o.$fourth_color,borderBottomWidth:1,paddingBottom:10,paddingTop:5,marginBottom:10},DashBCard_ItemhdrText:{color:o.$text_color,fontWeight:'600',fontSize:14,fontFamily:f,width:'50%',paddingTop:20},DashBCard_ItemhdrIcon:{width:'50%',alignItems:'flex-end',justifyContent:'flex-start'},DashBCard_ItemContent:{paddingHorizontal:10},DashBCard_IInn_row:{flexDirection:'row',paddingVertical:5},DashBCard_IInn_rowB:{borderBottomColor:o.$secondary_color_light,borderBottomWidth:1,marginBottom:5},DashBCard_IInn_hd:{color:o.$text_color,fontWeight:'600',fontSize:13,fontFamily:m,width:'50%'},DashBCard_IInn_valueTxt:{color:o.$text_color,fontWeight:'600',fontSize:14,fontFamily:f,paddingLeft:5,width:'50%'}})},n.customeButtons=function(){var o=c(arguments.length>0&&void 0!==arguments[0]?arguments[0]:l,arguments.length>1&&void 0!==arguments[1]?arguments[1]:g);return d.StyleSheet.create({buttonStyle:{backgroundColor:o.$primary_color,elevation:5,shadowColor:o.$primary_color,shadowOffset:{width:0,height:5},shadowRadius:7,shadowOpacity:.4,borderRadius:40,width:(0,t(a[2]).widthPercentageToDP)('85%'),height:50,display:'flex',marginTop:25,alignItems:'center',justifyContent:'center'},textStyle:{color:o.$text_color_100,textAlign:'center',fontSize:15,padding:10,fontFamily:m},g_buttonStyle:{marginTop:25,height:50,shadowColor:o.$primary_color,shadowRadius:7,shadowOffset:{width:0,height:5},shadowOpacity:.4,borderRadius:40,backgroundColor:'#0000'},g_linearGradient:{backgroundColor:o.$primary_color,elevation:5,shadowColor:o.$primary_color,borderRadius:40,width:(0,t(a[2]).widthPercentageToDP)('85%'),display:'flex',height:'100%',alignItems:'center',justifyContent:'center'},g_textStyle:{color:o.$text_color_100,textAlign:'center',fontSize:15,padding:10,fontFamily:m}})},n.customCamera=function(){c(arguments.length>0&&void 0!==arguments[0]?arguments[0]:l,arguments.length>1&&void 0!==arguments[1]?arguments[1]:g);var o='ios'==d.Platform.OS?s+40:40;d.Platform.OS;return d.StyleSheet.create({IOS_StatusBar:{height:s,width:(0,t(a[2]).widthPercentageToDP)('100%'),backgroundColor:'transparent',zIndex:1e5,position:'absolute',left:0,top:0,right:0},CameraWrapper:{flex:1,backgroundColor:'#000',width:'100%',height:'100%',position:'absolute',zIndex:9999,top:0,left:0,right:0},CameraWrapperHide:{zIndex:0,opacity:0},scrollMain:{flex:1,backgroundColor:'#000',width:'100%',height:'100%',position:'absolute',zIndex:99999,top:0,left:0,right:0},btnStyle:{backgroundColor:'#0096d7',paddingVertical:10,paddingHorizontal:30,borderRadius:20,marginTop:50,elevation:5,shadowColor:'#232323',shadowOffset:{width:0,height:2}},btnText:{color:'#fff'},imgView:{flex:1,height:300,width:'100%',marginTop:100,paddingHorizontal:20},image:{width:'100%',height:300,backgroundColor:'#efefef'},customCamera_Wrap:{position:'absolute',backgroundColor:'#000',top:0,left:0,right:0,bottom:0,zIndex:9999},customCamera:{position:'absolute',top:0,left:0,right:0,bottom:100},customCameraLS:{top:0,bottom:0},customCameraTop:{top:'ios'==d.Platform.OS?s:0},customCamera_bottomBar:{padding:10,flexDirection:'row',backgroundColor:'transparent',height:100,position:'absolute',bottom:0,width:'100%',alignItems:'center',justifyContent:'center'},customCamera_bottomBarLS:{padding:10,flexDirection:'row',backgroundColor:'transparent',height:100,position:'absolute',top:"35%",width:'100%',alignItems:'flex-end',justifyContent:'flex-end'},customCamera_capbtn:{elevation:4,shadowColor:'#efefef',width:60,height:60,borderRadius:30},customCamera_capbtn_Outer:{width:60,height:60,borderRadius:30,backgroundColor:'#e4e4e4',paddingLeft:5,paddingTop:5},customCamera_capbtn_Inner:{width:50,height:50,borderRadius:30,backgroundColor:'#fff'},customCamera_Gallerybtn:{elevation:4,shadowColor:'#efefef',width:60,height:60,borderRadius:30,position:'absolute',right:30},customCamera_Gallerybtn_Outer:{width:60,height:60,borderRadius:30,backgroundColor:'#e4e4e4',paddingLeft:5,paddingTop:5},customCamera_Gallerybtn_Inner:{width:50,height:50,borderRadius:30,backgroundColor:'#fff',alignItems:'center',justifyContent:'center'},customCamera_Gallerybtn_Icon:{marginTop:-2,marginLeft:-2},customCamera_bottomBar2:{paddingVertical:5,paddingHorizontal:10,backgroundColor:'#5c5c5cb3',height:60,position:'absolute',bottom:0,width:'100%',justifyContent:'center'},imgControls_btnCon:{minWidth:100,paddingHorizontal:10},imgControls_btn:{alignItems:'center'},imgControls_btnText:{fontSize:13,fontWeight:'400',color:'#fff',textAlign:'center',fontFamily:m},imgControls:{flexDirection:'row',alignItems:'center',justifyContent:'space-between'},cameraImgCaptured:{position:'absolute',top:0,left:0,right:0,bottom:0},icbtTop:{marginTop:0},imgControls_centerBtn:{marginTop:-15,minWidth:100,paddingHorizontal:10},imgControls_retakeBtn:{width:40,height:40,borderRadius:30,backgroundColor:'#fff',alignItems:'center',justifyContent:'center',elevation:2,shadowColor:'#000',shadowOpacity:.2,shadowOffset:{width:0,height:2}},flashBtn:{padding:5,backgroundColor:'#4c4c4cdb',borderRadius:30,width:40,height:40,marginBottom:10,elevation:2,alignItems:'center',justifyContent:'center',shadowColor:'#000',shadowOpacity:.3,shadowOffset:{width:0,height:2}},topControls:{position:'absolute',top:0,backgroundColor:'transparent',width:'100%',height:o},topControlsInner:{flexDirection:'row',paddingVertical:5,paddingHorizontal:10,justifyContent:'center'},sideControls:{position:'absolute',right:0,top:'40%',backgroundColor:'transparent',padding:10},sideControl:{position:'absolute',right:0,top:'0%',backgroundColor:'transparent',padding:10},sideControlsInner:{},or_icon:{position:'absolute',top:10,right:10,padding:7,borderRadius:40,backgroundColor:'#4c4c4ccc'}})},n.ModalStyles=function(){c(arguments.length>0&&void 0!==arguments[0]?arguments[0]:l,arguments.length>1&&void 0!==arguments[1]?arguments[1]:g);return d.StyleSheet.create({centeredView:{backgroundColor:'rgba(0,0,0,0.5)',flex:1,justifyContent:"center",alignItems:"center"},modalView:{margin:20,backgroundColor:"white",borderRadius:10,padding:35,alignItems:"center",shadowColor:"#000",shadowOffset:{width:0,height:2},shadowOpacity:.25,shadowRadius:4,elevation:5},button:{paddingLeft:40,paddingRight:40,elevation:2},buttonOpen:{backgroundColor:"#F194FF"},buttonClose:{backgroundColor:"#2196F3"},textStyle:{color:"white",fontWeight:"bold",textAlign:"center"},modalText:{marginBottom:15,textAlign:"center",color:"#000"}})}}),679,[6,680,681]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.PrimaryTheme=e.MainThemeLight=e.DarkTheme=void 0;e.PrimaryTheme={primary_theme:!0,$primary_color:'#1f7dbc',$secondary_color_light:'#eaf3fa',$secondary_color_dark:'#68a0f3',$gradient1:'#63ccf9',$gradient2:'#00a4eb',$tertiary_color:'#999999',$fourth_color:'#b5dbf9',$fifth_color:'#b5dbf9',$bg_color:'#fff',$accent_color:'#fff',$accent_color2:'#131313',$status_bar_color:'#eaf3fa',$placeholder_color:'#232323',$icon_color:'#6B84F6',$text_color:'#454545',$text_color_light2:'#efefef',$text_color_light3:'#ADD8E6',$text_color_light:'#9e9e9e',$text_color_dark:'#161616',$text_color_900:'#000000',$text_color_500:'#999999',$text_color_300:'#666666',$text_color_700:'#333333',$text_color_100:'#ffffff',$red:'#e3051f',$red_light100:'#faeaea',$orange:'#f1a015',$sidemenuColor:'#92a3fd',$card_colorYellowLight:'#e4d9be',$card_colorYellowDark:'#e1cc97',$star_color:'#FFDF00',$text_colorblack:'#000',$card_colorRedDark:'#f83e3e',$green:'#00ab1b'},e.MainThemeLight={project_theme:!0,$primary_color:'#1f7dbc',$secondary_color_light:'#eaf3fa',$secondary_color_dark:'#68a0f3',$gradient1:'#63ccf9',$gradient2:'#00a4eb',$tertiary_color:'#999999',$fourth_color:'#b5dbf9',$fifth_color:'#b5dbf9',$bg_color:'#fff',$accent_color:'#fff',$accent_color2:'#131313',$status_bar_color:'#eaf3fa',$placeholder_color:'#232323',$icon_color:'#6B84F6',$text_color:'#454545',$text_color_light:'#9e9e9e',$text_color_light2:'#efefef',$text_color_light3:'#ADD8E6',$text_color_dark:'#161616',$text_color_900:'#000000',$text_color_500:'#999999',$text_color_300:'#666666',$text_color_700:'#333333',$text_color_100:'#ffffff',$red:'#e3051f',$red_light100:'#faeaea',$orange:'#f1a015',$sidemenuColor:'#92a3fd',$card_colorYellowLight:'#e4d9be',$card_colorYellowDark:'#e1cc97',$text_colorblack:'#000',$card_colorRedDark:'#f83e3e',$green:'#00ab1b'},e.DarkTheme={dark_theme:!0,$primary_color:'#6B84F6',$secondary_color_light:'#999999',$secondary_color_dark:'#999999',$gradient2:'#05b4ff',$tertiary_color:'#999999',$fourth_color:'#b5dbf9',$fifth_color:'#b5dbf9',$bg_color:'#fff',$accent_color:'#fff',$accent_color2:'#131313',$text_color_light3:'#ADD8E6',$status_bar_color:'#6B84F6',$placeholder_color:'#9e9e9e',$icon_color:'#6B84F6',$text_color:'#6B84F6',$text_color_light:'#6B84F6',$text_color_light2:'#efefef',$text_color_dark:'#6B84F6',$text_color_900:'#000000',$text_color_500:'#999999',$text_color_300:'#666666',$text_color_700:'#333333',$text_color_100:'#ffffff',$red:'#e3051f',$red_light100:'#faeaea',$orange:'#f1a015',$sidemenuColor:'#92a3fd',$card_colorYellowLight:'#e4d9be',$card_colorYellowDark:'#e1cc97',$text_colorblack:'#000',$card_colorRedDark:'#f83e3e',$green:'#00ab1b'}}),680,[]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.widthPercentageToDP=e.removeOrientationListener=e.listenOrientationChange=e.heightPercentageToDP=void 0;var n=r(d[0]),t=n.Dimensions.get('window').width,o=n.Dimensions.get('window').height;e.widthPercentageToDP=function(o){var s="number"==typeof o?o:parseFloat(o);return n.PixelRatio.roundToNearestPixel(t*s/100)},e.heightPercentageToDP=function(t){var s="number"==typeof t?t:parseFloat(t);return n.PixelRatio.roundToNearestPixel(o*s/100)},e.listenOrientationChange=function(s){n.Dimensions.addEventListener('change',(function(n){t=n.window.width,o=n.window.height,s.setState({orientation:t ${o.name}`:o.name;null==(f=o.state)||null==(f=f.routeNames)||f.forEach((function(n){n===o.name&&t.push([c,`${c} > ${o.name}`])})),o.state&&u(c,o.state)}))};return u('',n),t}}),689,[]); +__d((function(g,r,_i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(t){return n(t,new Set,[])};var t=r(d[0])(r(d[1])),n=function(i,l,o){if(null==i||'boolean'==typeof i||'number'==typeof i||'string'==typeof i)return{serializable:!0};if('[object Object]'!==Object.prototype.toString.call(i)&&!Array.isArray(i))return{serializable:!1,location:o,reason:'function'==typeof i?'Function':String(i)};if(l.has(i))return{serializable:!1,reason:'Circular reference',location:o};if(l.add(i),Array.isArray(i))for(var f=0;f-1&&(r=!0,t[e].splice(u,1))}}),[t]);return{listeners:t,addListener:n}};var e=(function(e,t){if("function"==typeof WeakMap)var n=new WeakMap,r=new WeakMap;return(function(e,t){if(!t&&e&&e.__esModule)return e;var u,f,o={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return o;if(u=t?r:n){if(u.has(e))return u.get(e);u.set(e,o)}for(var i in e)"default"!==i&&{}.hasOwnProperty.call(e,i)&&((f=(u=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,i))&&(f.get||f.set)?u(o,i,f):o[i]=e[i]);return o})(e,t)})(_r(d[0]))}),699,[153]); +__d((function(g,_r,_i,a,m,_e,d){Object.defineProperty(_e,"__esModule",{value:!0}),_e.default=function(r){var n=t.useRef(r);t.useEffect((function(){n.current=r}));var u=t.useRef(Object.create(null)),c=t.useCallback((function(e){var t=function(t,r){var n=u.current[t]?u.current[t][e]:void 0;if(n){var c=n.indexOf(r);c>-1&&n.splice(c,1)}};return{addListener:function(r,n){u.current[r]=u.current[r]||{},u.current[r][e]=u.current[r][e]||[],u.current[r][e].push(n);var c=!1;return function(){c||(c=!0,t(r,n))}},removeListener:t}}),[]),f=t.useCallback((function(t){var r,c,f=t.type,i=t.data,o=t.target,l=t.canPreventDefault,p=u.current[f]||{},v=void 0!==o?null==(r=p[o])?void 0:r.slice():(c=[]).concat.apply(c,(0,e.default)(Object.keys(p).map((function(e){return p[e]})))).filter((function(e,t,r){return r.lastIndexOf(e)===t})),s={get type(){return f}};if(void 0!==o&&Object.defineProperty(s,'target',{enumerable:!0,get:function(){return o}}),void 0!==i&&Object.defineProperty(s,'data',{enumerable:!0,get:function(){return i}}),l){var b=!1;Object.defineProperties(s,{defaultPrevented:{enumerable:!0,get:function(){return b}},preventDefault:{enumerable:!0,value:function(){b=!0}}})}return null==n.current||n.current(s),null==v||v.forEach((function(e){return e(s)})),s}),[]);return t.useMemo((function(){return{create:c,emit:f}}),[c,f])};var e=_r(d[0])(_r(d[1])),t=(function(e,t){if("function"==typeof WeakMap)var r=new WeakMap,n=new WeakMap;return(function(e,t){if(!t&&e&&e.__esModule)return e;var u,c,f={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return f;if(u=t?n:r){if(u.has(e))return u.get(e);u.set(e,f)}for(var i in e)"default"!==i&&{}.hasOwnProperty.call(e,i)&&((c=(u=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,i))&&(c.get||c.set)?u(f,i,c):f[i]=e[i]);return f})(e,t)})(_r(d[2]))}),700,[8,11,153]); +__d((function(g,_r,_i,a,m,_e,d){Object.defineProperty(_e,"__esModule",{value:!0}),_e.default=function(){var t=e.useRef(Object.assign(Object.create(null),{getState:{},beforeRemove:{}})).current,n=e.useCallback((function(e,n,r){return t[e][n]=r,function(){t[e][n]=void 0}}),[t]);return{keyedListeners:t,addKeyedListener:n}};var e=(function(e,t){if("function"==typeof WeakMap)var n=new WeakMap,r=new WeakMap;return(function(e,t){if(!t&&e&&e.__esModule)return e;var u,o,f={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return f;if(u=t?r:n){if(u.has(e))return u.get(e);u.set(e,f)}for(var i in e)"default"!==i&&{}.hasOwnProperty.call(e,i)&&((o=(u=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,i))&&(o.get||o.set)?u(f,i,o):f[i]=e[i]);return f})(e,t)})(_r(d[0]))}),701,[153]); +__d((function(g,_r,_i,a,m,_e,d){Object.defineProperty(_e,"__esModule",{value:!0}),_e.default=function(r){var u=r.key,l=r.options,o=r.navigation,i=e.useRef(l),f=e.useRef({}),c=e.useContext(n.default).onOptionsChange,s=e.useContext(t.default).addOptionsGetter,p=e.useCallback((function(){var e,n,t=null==(e=null==o?void 0:o.isFocused())||e,r=Object.keys(f.current).length;t&&!r&&c(null!=(n=i.current)?n:{})}),[o,c]);e.useEffect((function(){return i.current=l,p(),null==o?void 0:o.addListener('focus',p)}),[o,l,p]);var v=e.useCallback((function(){for(var e in f.current)if(f.current.hasOwnProperty(e)){var n,t,r=null==(n=(t=f.current)[e])?void 0:n.call(t);if(null!==r)return r}return null}),[]),O=e.useCallback((function(){var e;if(!(null==(e=null==o?void 0:o.isFocused())||e))return null;var n=v();return null!==n?n:i.current}),[o,v]);return e.useEffect((function(){return null==s?void 0:s(u,O)}),[O,s,u]),{addOptionsGetter:e.useCallback((function(e,n){return f.current[e]=n,p(),function(){delete f.current[e],p()}}),[p]),getCurrentOptions:O}};var e=(function(e,n){if("function"==typeof WeakMap)var t=new WeakMap,r=new WeakMap;return(function(e,n){if(!n&&e&&e.__esModule)return e;var u,l,o={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return o;if(u=n?r:t){if(u.has(e))return u.get(e);u.set(e,o)}for(var i in e)"default"!==i&&{}.hasOwnProperty.call(e,i)&&((l=(u=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,i))&&(l.get||l.set)?u(o,i,l):o[i]=e[i]);return o})(e,n)})(_r(d[0])),n=_r(d[1])(_r(d[2])),t=_r(d[1])(_r(d[3]))}),702,[153,8,693,697]); +__d((function(g,_r,_i,a,m,_e,d){Object.defineProperty(_e,"__esModule",{value:!0}),_e.default=function(n){var u=r.useRef(t),c=r.useRef(!1),f=r.useRef(!0);r.useEffect((function(){return f.current=!0,function(){f.current=!1}}),[]),u.current===t&&(u.current='function'==typeof n?n():n);var o=r.useState(u.current),l=(0,e.default)(o,2),i=l[0],s=l[1],p=r.useCallback((function(){return u.current}),[]),y=r.useCallback((function(e){e!==u.current&&f.current&&(u.current=e,c.current||s(e))}),[]),_=r.useCallback((function(e){c.current=!0;try{e()}finally{c.current=!1}}),[]),b=r.useCallback((function(){f.current&&s(u.current)}),[]);i!==u.current&&s(u.current);var v=u.current;return r.useDebugValue(v),[v,p,y,_,b]};var e=_r(d[0])(_r(d[1])),r=(function(e,r){if("function"==typeof WeakMap)var t=new WeakMap,n=new WeakMap;return(function(e,r){if(!r&&e&&e.__esModule)return e;var u,c,f={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return f;if(u=r?n:t){if(u.has(e))return u.get(e);u.set(e,f)}for(var o in e)"default"!==o&&{}.hasOwnProperty.call(e,o)&&((c=(u=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,o))&&(c.get||c.set)?u(f,o,c):f[o]=e[o]);return f})(e,r)})(_r(d[2]));var t={}}),703,[8,26,153]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.NOT_INITIALIZED_ERROR=void 0,e.default=function(){var u=[].concat((0,n.default)(Object.keys(r(d[3]).CommonActions)),['addListener','removeListener','resetRoot','dispatch','isFocused','canGoBack','getRootState','getState','getParent','getCurrentRoute','getCurrentOptions']),c={},s=function(t,n){c[t]&&(c[t]=c[t].filter((function(t){return t!==n})))},f=null,l=Object.assign({get current(){return f},set current(n){f=n,null!=n&&Object.entries(c).forEach((function(o){var u=(0,t.default)(o,2),c=u[0];u[1].forEach((function(t){n.addListener(c,t)}))}))},isReady:function(){return null!=f&&f.isReady()}},u.reduce((function(t,n){return t[n]=function(){for(var t=arguments.length,u=new Array(t),l=0;l1&&void 0!==arguments[1]?arguments[1]:21;return function(){for(var o='',i=arguments.length>0&&void 0!==arguments[0]?arguments[0]:t;i--;)o+=n[Math.random()*n.length|0];return o}},e.nanoid=function(){for(var n='',t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:21;t--;)n+="useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict"[64*Math.random()|0];return n}}),708,[]); +__d((function(g,_r,_i,a,m,_e,d){Object.defineProperty(_e,"__esModule",{value:!0}),_e.DrawerActions=void 0,_e.default=function(u){var i=u.defaultStatus,s=void 0===i?'closed':i,c=(0,e.default)(u,n),f=(0,r.default)(c),l=function(t){var e;return Boolean(null==(e=t.history)?void 0:e.some((function(t){return'drawer'===t.type})))},p=function(e){return l(e)?e:Object.assign({},e,{history:[].concat((0,t.default)(e.history),[{type:'drawer',status:'open'===s?'closed':'open'}])})},y=function(t){return l(t)?Object.assign({},t,{history:t.history.filter((function(t){return'drawer'!==t.type}))}):t},O=function(t){return'open'===s?y(t):p(t)},w=function(t){return'open'===s?p(t):y(t)};return Object.assign({},f,{type:'drawer',getInitialState:function(t){var e=t.routeNames,r=t.routeParamList,n=t.routeGetIdList,o=f.getInitialState({routeNames:e,routeParamList:r,routeGetIdList:n});return Object.assign({},o,{default:s,stale:!1,type:'drawer',key:`drawer-${(0,_r(d[4]).nanoid)()}`})},getRehydratedState:function(t,e){var r=e.routeNames,n=e.routeParamList,o=e.routeGetIdList;if(!1===t.stale)return t;var u=f.getRehydratedState(t,{routeNames:r,routeParamList:n,routeGetIdList:o});return l(t)&&(u=y(u),u=p(u)),Object.assign({},u,{default:s,type:'drawer',key:`drawer-${(0,_r(d[4]).nanoid)()}`})},getStateForRouteFocus:function(t,e){var r=f.getStateForRouteFocus(t,e);return w(r)},getStateForAction:function(t,e,r){switch(e.type){case'OPEN_DRAWER':return O(t);case'CLOSE_DRAWER':return w(t);case'TOGGLE_DRAWER':return l(t)?y(t):p(t);case'JUMP_TO':case'NAVIGATE':var n=f.getStateForAction(t,e,r);return null!=n&&n.index!==t.index?w(n):n;case'GO_BACK':return l(t)?y(t):f.getStateForAction(t,e,r);default:return f.getStateForAction(t,e,r)}},actionCreators:o})};var t=_r(d[0])(_r(d[1])),e=_r(d[0])(_r(d[2])),r=(function(t,e){if("function"==typeof WeakMap)var r=new WeakMap,n=new WeakMap;return(function(t,e){if(!e&&t&&t.__esModule)return t;var o,u,i={__proto__:null,default:t};if(null===t||"object"!=typeof t&&"function"!=typeof t)return i;if(o=e?n:r){if(o.has(t))return o.get(t);o.set(t,i)}for(var s in t)"default"!==s&&{}.hasOwnProperty.call(t,s)&&((u=(o=Object.defineProperty)&&Object.getOwnPropertyDescriptor(t,s))&&(u.get||u.set)?o(i,s,u):i[s]=t[s]);return i})(t,e)})(_r(d[3])),n=["defaultStatus"];var o=_e.DrawerActions=Object.assign({},r.TabActions,{openDrawer:function(){return{type:'OPEN_DRAWER'}},closeDrawer:function(){return{type:'CLOSE_DRAWER'}},toggleDrawer:function(){return{type:'TOGGLE_DRAWER'}}})}),709,[8,11,119,710,708]); +__d((function(g,_r,_i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.TabActions=void 0,e.default=function(n){var u=n.initialRouteName,s=n.backBehavior,y=void 0===s?'firstRoute':s;return Object.assign({},t.default,{type:'tab',getInitialState:function(t){var n=t.routeNames,r=t.routeParamList,o=void 0!==u&&n.includes(u)?n.indexOf(u):0,s=n.map((function(t){return{name:t,key:`${t}-${(0,_r(d[2]).nanoid)()}`,params:r[t]}})),c=i(s,o,y,u);return{stale:!1,type:'tab',key:`tab-${(0,_r(d[2]).nanoid)()}`,index:o,routeNames:n,history:c,routes:s}},getRehydratedState:function(t,n){var r,i,s,c,l=n.routeNames,f=n.routeParamList,p=t;if(!1===p.stale)return p;var h=l.map((function(t){var n=p.routes.find((function(n){return n.name===t}));return Object.assign({},n,{name:t,key:n&&n.name===t&&n.key?n.key:`${t}-${(0,_r(d[2]).nanoid)()}`,params:void 0!==f[t]?Object.assign({},f[t],n?n.params:void 0):n?n.params:void 0})})),k=Math.min(Math.max(l.indexOf(null==(r=p.routes[null!=(i=null==p?void 0:p.index)?i:0])?void 0:r.name),0),h.length-1),v=null!=(s=null==(c=p.history)?void 0:c.filter((function(t){return h.find((function(n){return n.key===t.key}))})))?s:[];return o({stale:!1,type:'tab',key:`tab-${(0,_r(d[2]).nanoid)()}`,index:k,routeNames:l,history:v,routes:h},k,y,u)},getStateForRouteNamesChange:function(t,n){var r=n.routeNames,o=n.routeParamList,s=n.routeKeyChanges,c=r.map((function(n){return t.routes.find((function(t){return t.name===n&&!s.includes(t.name)}))||{name:n,key:`${n}-${(0,_r(d[2]).nanoid)()}`,params:o[n]}})),l=Math.max(0,r.indexOf(t.routes[t.index].name)),f=t.history.filter((function(t){return'route'!==t.type||c.find((function(n){return n.key===t.key}))}));return f.length||(f=i(c,l,y,u)),Object.assign({},t,{history:f,routeNames:r,routes:c,index:l})},getStateForRouteFocus:function(t,n){var r=t.routes.findIndex((function(t){return t.key===n}));return-1===r||r===t.index?t:o(t,r,y,u)},getStateForAction:function(n,r,i){var s=i.routeParamList,c=i.routeGetIdList;switch(r.type){case'JUMP_TO':case'NAVIGATE':var l=-1;return-1===(l='NAVIGATE'===r.type&&r.payload.key?n.routes.findIndex((function(t){return t.key===r.payload.key})):n.routes.findIndex((function(t){return t.name===r.payload.name})))?null:o(Object.assign({},n,{routes:n.routes.map((function(t,n){if(n!==l)return t;var i,o=c[t.name],u=null==o?void 0:o({params:t.params}),y=null==o?void 0:o({params:r.payload.params}),f=u===y?t.key:`${t.name}-${(0,_r(d[2]).nanoid)()}`;i='NAVIGATE'===r.type&&r.payload.merge&&u===y?void 0!==r.payload.params||void 0!==s[t.name]?Object.assign({},s[t.name],t.params,r.payload.params):t.params:void 0!==s[t.name]?Object.assign({},s[t.name],r.payload.params):r.payload.params;var p='NAVIGATE'===r.type&&null!=r.payload.path?r.payload.path:t.path;return i!==t.params||p!==t.path?Object.assign({},t,{key:f,path:p,params:i}):t}))}),l,y,u);case'GO_BACK':if(1===n.history.length)return null;var f=n.history[n.history.length-2].key,p=n.routes.findIndex((function(t){return t.key===f}));return-1===p?null:Object.assign({},n,{history:n.history.slice(0,-1),index:p});default:return t.default.getStateForAction(n,r)}},shouldActionChangeFocus:function(t){return'NAVIGATE'===t.type},actionCreators:r})};var t=_r(d[0])(_r(d[1])),n='route',r=e.TabActions={jumpTo:function(t,n){return{type:'JUMP_TO',payload:{name:t,params:n}}}},i=function(t,r,i,o){var u,s=[{type:n,key:t[r].key}];switch(i){case'order':for(var y=r;y>0;y--)s.unshift({type:n,key:t[y-1].key});break;case'firstRoute':0!==r&&s.unshift({type:n,key:t[0].key});break;case'initialRoute':r!==(u=-1===(u=t.findIndex((function(t){return t.name===o})))?0:u)&&s.unshift({type:n,key:t[u].key})}return s},o=function(t,r,o,u){var s;if('history'===o){var y=t.routes[r].key;s=t.history.filter((function(t){return'route'===t.type&&t.key!==y})).concat({type:n,key:y})}else s=i(t.routes,r,o,u);return Object.assign({},t,{index:r,history:s})}}),710,[8,707,708]); +__d((function(g,_r,_i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.StackActions=void 0,e.default=function(r){var i=Object.assign({},n.default,{type:'stack',getInitialState:function(t){var n=t.routeNames,o=t.routeParamList,i=void 0!==r.initialRouteName&&n.includes(r.initialRouteName)?r.initialRouteName:n[0];return{stale:!1,type:'stack',key:`stack-${(0,_r(d[3]).nanoid)()}`,index:0,routeNames:n,routes:[{key:`${i}-${(0,_r(d[3]).nanoid)()}`,name:i,params:o[i]}]}},getRehydratedState:function(t,n){var o=n.routeNames,i=n.routeParamList,s=t;if(!1===s.stale)return s;var u=s.routes.filter((function(t){return o.includes(t.name)})).map((function(t){return Object.assign({},t,{key:t.key||`${t.name}-${(0,_r(d[3]).nanoid)()}`,params:void 0!==i[t.name]?Object.assign({},i[t.name],t.params):t.params})}));if(0===u.length){var l=void 0!==r.initialRouteName?r.initialRouteName:o[0];u.push({key:`${l}-${(0,_r(d[3]).nanoid)()}`,name:l,params:i[l]})}return{stale:!1,type:'stack',key:`stack-${(0,_r(d[3]).nanoid)()}`,index:u.length-1,routeNames:o,routes:u}},getStateForRouteNamesChange:function(t,n){var o=n.routeNames,i=n.routeParamList,s=n.routeKeyChanges,u=t.routes.filter((function(t){return o.includes(t.name)&&!s.includes(t.name)}));if(0===u.length){var l=void 0!==r.initialRouteName&&o.includes(r.initialRouteName)?r.initialRouteName:o[0];u.push({key:`${l}-${(0,_r(d[3]).nanoid)()}`,name:l,params:i[l]})}return Object.assign({},t,{routeNames:o,routes:u,index:Math.min(t.index,u.length-1)})},getStateForRouteFocus:function(t,n){var o=t.routes.findIndex((function(t){return t.key===n}));return-1===o||o===t.index?t:Object.assign({},t,{index:o,routes:t.routes.slice(0,o+1)})},getStateForAction:function(o,r,s){var u=s.routeParamList;switch(r.type){case'REPLACE':var l=r.target===o.key&&r.source?o.routes.findIndex((function(t){return t.key===r.source})):o.index;if(-1===l)return null;var p=r.payload,y=p.name,c=p.key,f=p.params;return o.routeNames.includes(y)?Object.assign({},o,{routes:o.routes.map((function(t,n){return n===l?{key:void 0!==c?c:`${y}-${(0,_r(d[3]).nanoid)()}`,name:y,params:void 0!==u[y]?Object.assign({},u[y],f):f}:t}))}):null;case'PUSH':if(o.routeNames.includes(r.payload.name)){var v,k=s.routeGetIdList[r.payload.name],O=null==k?void 0:k({params:r.payload.params}),h=O?o.routes.find((function(t){return t.name===r.payload.name&&O===(null==k?void 0:k({params:t.params}))})):void 0;return h?(v=o.routes.filter((function(t){return t.key!==h.key}))).push(Object.assign({},h,{params:void 0!==u[r.payload.name]?Object.assign({},u[r.payload.name],r.payload.params):r.payload.params})):v=[].concat((0,t.default)(o.routes),[{key:`${r.payload.name}-${(0,_r(d[3]).nanoid)()}`,name:r.payload.name,params:void 0!==u[r.payload.name]?Object.assign({},u[r.payload.name],r.payload.params):r.payload.params}]),Object.assign({},o,{index:v.length-1,routes:v})}return null;case'POP':var P=r.target===o.key&&r.source?o.routes.findIndex((function(t){return t.key===r.source})):o.index;if(P>0){var x=Math.max(P-r.payload.count+1,1),b=o.routes.slice(0,x).concat(o.routes.slice(P+1));return Object.assign({},o,{index:b.length-1,routes:b})}return null;case'POP_TO_TOP':return i.getStateForAction(o,{type:'POP',payload:{count:o.routes.length-1}},s);case'NAVIGATE':if(void 0!==r.payload.name&&!o.routeNames.includes(r.payload.name))return null;if(r.payload.key||r.payload.name){var j,N=-1,$=void 0===r.payload.key&&void 0!==r.payload.name?s.routeGetIdList[r.payload.name]:void 0,R=null==$?void 0:$({params:r.payload.params});if(R)N=o.routes.findIndex((function(t){return t.name===r.payload.name&&R===(null==$?void 0:$({params:t.params}))}));else if(o.routes[o.index].name===r.payload.name&&void 0===r.payload.key||o.routes[o.index].key===r.payload.key)N=o.index;else for(var S=o.routes.length-1;S>=0;S--)if(o.routes[S].name===r.payload.name&&void 0===r.payload.key||o.routes[S].key===r.payload.key){N=S;break}if(-1===N&&r.payload.key&&void 0===r.payload.name)return null;if(-1===N&&void 0!==r.payload.name){var A,_=[].concat((0,t.default)(o.routes),[{key:null!=(A=r.payload.key)?A:`${r.payload.name}-${(0,_r(d[3]).nanoid)()}`,name:r.payload.name,path:r.payload.path,params:void 0!==u[r.payload.name]?Object.assign({},u[r.payload.name],r.payload.params):r.payload.params}]);return Object.assign({},o,{routes:_,index:_.length-1})}var I,L=o.routes[N];return I=r.payload.merge?void 0!==r.payload.params||void 0!==u[L.name]?Object.assign({},u[L.name],L.params,r.payload.params):L.params:void 0!==u[L.name]?Object.assign({},u[L.name],r.payload.params):r.payload.params,Object.assign({},o,{index:N,routes:[].concat((0,t.default)(o.routes.slice(0,N)),[I!==L.params||r.payload.path&&r.payload.path!==L.path?Object.assign({},L,{path:null!=(j=r.payload.path)?j:L.path,params:I}):o.routes[N]])})}return null;case'GO_BACK':return o.index>0?i.getStateForAction(o,{type:'POP',payload:{count:1},target:r.target,source:r.source},s):null;default:return n.default.getStateForAction(o,r)}},actionCreators:o});return i};var t=_r(d[0])(_r(d[1])),n=_r(d[0])(_r(d[2])),o=e.StackActions={replace:function(t,n){return{type:'REPLACE',payload:{name:t,params:n}}},push:function(t,n){return{type:'PUSH',payload:{name:t,params:n}}},pop:function(){return{type:'POP',payload:{count:arguments.length>0&&void 0!==arguments[0]?arguments[0]:1}}},popToTop:function(){return{type:'POP_TO_TOP'}}}}),711,[8,11,707,708]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0})}),712,[]); +__d((function(g,_r,_i,a,m,_e,d){Object.defineProperty(_e,"__esModule",{value:!0}),_e.ScheduleUpdateContext=void 0,_e.default=function(t){var r=e.useContext(n),o=r.scheduleUpdate,u=r.flushUpdates;o(t),e.useEffect(u)};var e=(function(e,t){if("function"==typeof WeakMap)var n=new WeakMap,r=new WeakMap;return(function(e,t){if(!t&&e&&e.__esModule)return e;var o,u,f={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return f;if(o=t?r:n){if(o.has(e))return o.get(e);o.set(e,f)}for(var c in e)"default"!==c&&{}.hasOwnProperty.call(e,c)&&((u=(o=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,c))&&(u.get||u.set)?o(f,c,u):f[c]=e[c]);return f})(e,t)})(_r(d[0]));var t="Couldn't find a schedule context.",n=_e.ScheduleUpdateContext=e.createContext({scheduleUpdate:function(){throw new Error(t)},flushUpdates:function(){throw new Error(t)}})}),713,[153]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(o){return function(){if(void 0!==arguments[0])throw new Error("Creating a navigator doesn't take an argument. Maybe you are trying to use React Navigation 4 API? See https://reactnavigation.org/docs/hello-react-navigation for the latest API and guides.");return{Navigator:o,Group:t.default,Screen:n.default}}};var t=r(d[0])(r(d[1])),n=r(d[0])(r(d[2]))}),714,[8,715,716]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(n){return null}}),715,[]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(n){return null}}),716,[]); +__d((function(g,_r,_i,a,m,_e,d){Object.defineProperty(_e,"__esModule",{value:!0}),_e.default=void 0;var e=(function(e,t){if("function"==typeof WeakMap)var r=new WeakMap,n=new WeakMap;return(function(e,t){if(!t&&e&&e.__esModule)return e;var o,f,u={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return u;if(o=t?n:r){if(o.has(e))return o.get(e);o.set(e,u)}for(var i in e)"default"!==i&&{}.hasOwnProperty.call(e,i)&&((f=(o=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,i))&&(f.get||f.set)?o(u,i,f):u[i]=e[i]);return u})(e,t)})(_r(d[0])).createContext(void 0);_e.default=e}),717,[153]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(n,l){var s,u,o=l?t(l):{},v=null!=n.index?n.routes.slice(0,n.index+1):n.routes;if(0===v.length)return;if(!(1===v.length&&void 0===v[0].key||2===v.length&&void 0===v[0].key&&v[0].name===(null==o?void 0:o.initialRouteName)&&void 0===v[1].key))return{type:'RESET',payload:n};var c=n.routes[null!=(s=n.index)?s:n.routes.length-1],p=null==c?void 0:c.state,f=null==o||null==(u=o.screens)?void 0:u[null==c?void 0:c.name],h=Object.assign({},c.params),y=c?{name:c.name,path:c.path,params:h}:void 0;for(;p;){var b,k;if(0===p.routes.length)return;var j=null!=p.index?p.routes.slice(0,p.index+1):p.routes,x=j[j.length-1];if(Object.assign(h,{initial:void 0,screen:void 0,params:void 0,state:void 0}),1===j.length&&void 0===j[0].key)h.initial=!0,h.screen=x.name;else{if(2!==j.length||void 0!==j[0].key||j[0].name!==(null==(b=f)?void 0:b.initialRouteName)||void 0!==j[1].key){h.state=p;break}h.initial=!1,h.screen=x.name}x.state?(h.params=Object.assign({},x.params),h=h.params):(h.path=x.path,h.params=x.params),p=x.state,f=null==(k=f)||null==(k=k.screens)?void 0:k[x.name]}if(!y)return;return{type:'NAVIGATE',payload:y}};var n=r(d[0])(r(d[1]));var t=function(n){return'object'==typeof n&&null!=n?{initialRouteName:n.initialRouteName,screens:null!=n.screens?l(n.screens):void 0}:{}},l=function(l){return Object.entries(l).reduce((function(l,s){var u=(0,n.default)(s,2),o=u[0],v=u[1];return l[o]=t(v),l}),{})}}),718,[8,26]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(t){var n,u,l=null!=(n=t[r(d[0]).CHILD_STATE])?n:t.state,o=t.params;return l?l.routes[null!=(u=l.index)?u:'string'==typeof l.type&&'stack'!==l.type?0:l.routes.length-1].name:'string'==typeof(null==o?void 0:o.screen)?o.screen:void 0}}),719,[720]); +__d((function(g,_r,_i,a,m,_e,d){Object.defineProperty(_e,"__esModule",{value:!0}),_e.CHILD_STATE=void 0,_e.default=function(t){e.useMemo((function(){return{current:new Map}}),[]);return t};_r(d[0])(_r(d[1]));var e=(function(e,t){if("function"==typeof WeakMap)var n=new WeakMap,r=new WeakMap;return(function(e,t){if(!t&&e&&e.__esModule)return e;var o,u,f={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return f;if(o=t?r:n){if(o.has(e))return o.get(e);o.set(e,f)}for(var i in e)"default"!==i&&{}.hasOwnProperty.call(e,i)&&((u=(o=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,i))&&(u.get||u.set)?o(f,i,u):f[i]=e[i]);return f})(e,t)})(_r(d[2]));_e.CHILD_STATE=Symbol('CHILD_STATE')}),720,[8,119,153]); +__d((function(g,_r,_i,a,m,_e,d){Object.defineProperty(_e,"__esModule",{value:!0}),_e.default=function(e,u){if(null==e)throw Error("Got 'undefined' for the navigation state. You must pass a valid state object.");u&&(0,i.default)(u);var f=null!=u&&u.screens?l(null==u?void 0:u.screens):{},c='/',p=e,v={},h=function(){for(var i,u,l='number'==typeof p.index?p.index:0,h=p.routes[l],y=o(e),b=f,j=[],w=!0,_=function(){if(i=b[h.name].pattern,j.push(h.name),h.params){var e,n,o=null==(e=b[h.name])?void 0:e.stringify,f=(0,r.default)(Object.entries(h.params).map((function(e){var n=(0,t.default)(e,2),r=n[0],i=n[1];return[r,null!=o&&o[r]?o[r](i):String(i)]})));if(i&&Object.assign(v,f),y===h)u=Object.assign({},f),null==(n=i)||n.split('/').filter((function(e){return e.startsWith(':')})).forEach((function(e){var t=s(e);u&&delete u[t]}))}if(b[h.name].screens&&void 0!==h.state){l='number'==typeof h.state.index?h.state.index:h.state.routes.length-1;var c=h.state.routes[l],p=b[h.name].screens;p&&c.name in p?(h=c,b=p):w=!1}else w=!1};h.name in b&&w;)_();if(void 0===i&&(i=j.join('/')),void 0!==b[h.name]?c+=i.split('/').map((function(e){var t=s(e);if('*'===e)return h.name;if(e.startsWith(':')){var n=v[t];return void 0===n&&e.endsWith('?')?'':encodeURIComponent(n)}return encodeURIComponent(e)})).join('/'):c+=encodeURIComponent(h.name),u||(u=y.params),h.state)c+='/';else if(u){for(var x in u)'undefined'===u[x]&&delete u[x];var O=n.stringify(u,{sort:!1});O&&(c+=`?${O}`)}p=h.state};for(;p;)h();return c=(c=c.replace(/\/+/g,'/')).length>1?c.replace(/\/$/,''):c};var e=_r(d[0])(_r(d[1])),t=_r(d[0])(_r(d[2])),n=(function(e,t){if("function"==typeof WeakMap)var n=new WeakMap,r=new WeakMap;return(function(e,t){if(!t&&e&&e.__esModule)return e;var i,o,s={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return s;if(i=t?r:n){if(i.has(e))return i.get(e);i.set(e,s)}for(var u in e)"default"!==u&&{}.hasOwnProperty.call(e,u)&&((o=(i=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,u))&&(o.get||o.set)?i(s,u,o):s[u]=e[u]);return s})(e,t)})(_r(d[3])),r=_r(d[0])(_r(d[4])),i=_r(d[0])(_r(d[5]));var o=function(e){var t='number'==typeof e.index?e.routes[e.index]:e.routes[e.routes.length-1];return t.state?o(t.state):t};var s=function(e){return e.replace(/^:/,'').replace(/\?$/,'')},u=function(){for(var t,n=arguments.length,r=new Array(n),i=0;i0})).join('&')},e.parseUrl=function(t,n){n=Object.assign({decode:!0},n);var a=r(d[3])(t,'#'),o=r(d[4])(a,2),u=o[0],s=o[1];return Object.assign({url:u.split('?')[0]||'',query:v(p(t),n)},n&&n.parseFragmentIdentifier&&s?{fragmentIdentifier:c(s,n)}:{})},e.stringifyUrl=function(n,a){a=Object.assign(r(d[5])({encode:!0,strict:!0},t,!0),a);var o=l(n.url).split('?')[0]||'',c=e.extract(n.url),s=e.parse(c,{sort:!1}),p=Object.assign(s,n.query),y=e.stringify(p,a);y&&(y=`?${y}`);var v=f(n.url);return n.fragmentIdentifier&&(v=`#${a[t]?u(n.fragmentIdentifier,a):n.fragmentIdentifier}`),`${o}${y}${v}`},e.pick=function(n,a,o){o=Object.assign(r(d[5])({parseFragmentIdentifier:!0},t,!1),o);var u=e.parseUrl(n,o),c=u.url,s=u.query,l=u.fragmentIdentifier;return e.stringifyUrl({url:c,query:r(d[6])(s,a),fragmentIdentifier:l},o)},e.exclude=function(t,n,a){var o=Array.isArray(n)?function(t){return!n.includes(t)}:function(t,a){return!n(t,a)};return e.pick(t,o,a)}}),722,[11,723,724,725,26,170,726]); +__d((function(g,r,i,a,m,e,d){'use strict';m.exports=function(t){return encodeURIComponent(t).replace(/[!'()*]/g,(function(t){return`%${t.charCodeAt(0).toString(16).toUpperCase()}`}))}}),723,[]); +__d((function(g,r,_i,a,m,e,d){'use strict';var t=new RegExp("(%[a-f0-9]{2})|([^%]+?)",'gi'),n=new RegExp("(%[a-f0-9]{2})+",'gi');function o(t,n){try{return[decodeURIComponent(t.join(''))]}catch(t){}if(1===t.length)return t;n=n||1;var c=t.slice(0,n),p=t.slice(n);return Array.prototype.concat.call([],o(c),o(p))}function c(n){try{return decodeURIComponent(n)}catch(i){for(var c=n.match(t)||[],p=1;p1&&void 0!==arguments[1])||arguments[1],f=['initialRouteName','screens'];s||f.push('path','exact','stringify','parse');var u=Object.keys(c).filter((function(n){return!f.includes(n)}));if(u.length)throw new Error(`Found invalid properties in the configuration:\n${t(u)}\n\nDid you forget to specify them under a 'screens' property?\n\nYou can only specify the following properties:\n${t(f)}\n\nSee https://reactnavigation.org/docs/configuring-links for more details on how to specify a linking configuration.`);c.screens&&Object.entries(c.screens).forEach((function(t){var c=(0,n.default)(t,2),s=(c[0],c[1]);'string'!=typeof s&&o(s,!1)}))};var n=r(d[0])(r(d[1])),t=function(n){return n.map((function(n){return`- ${n}`})).join('\n')}}),728,[8,26]); +__d((function(g,_r,_i,_a,m,_e,d){Object.defineProperty(_e,"__esModule",{value:!0}),_e.default=function(n,r){var a;r&&(0,i.default)(r);var u=[];null!=r&&r.initialRouteName&&u.push({initialRouteName:r.initialRouteName,parentScreens:[]});var f=null==r?void 0:r.screens,l=n.replace(/\/+/g,'/').replace(/^\//,'').replace(/\?.*$/,'');if(l=l.endsWith('/')?l:`${l}/`,void 0===f){var p=l.split('/').filter(Boolean).map((function(e){return{name:decodeURIComponent(e)}}));return p.length?h(n,p,u):void 0}var c,v,y=(a=[]).concat.apply(a,(0,t.default)(Object.keys(f).map((function(e){return s(e,f,[],u,[])})))).sort((function(e,t){if(e.pattern===t.pattern)return t.routeNames.join('>').localeCompare(e.routeNames.join('>'));if(e.pattern.startsWith(t.pattern))return-1;if(t.pattern.startsWith(e.pattern))return 1;for(var n=e.pattern.split('/'),r=t.pattern.split('/'),a=0;aa.length?a.every((function(e,t){return r[t]===e})):r.every((function(e,t){return a[t]===e}))))throw new Error(`Found conflicting screens with the same pattern. The pattern '${n.pattern}' resolves to both '${r.join(' > ')}' and '${a.join(' > ')}'. Patterns must be unique and cannot resolve to more than one screen.`)}return Object.assign(t,(0,e.default)({},n.pattern,n))}),{}),'/'===l){var j=y.find((function(e){return''===e.path&&e.routeNames.every((function(e){var t;return!(null!=(t=y.find((function(t){return t.screen===e})))&&t.path)}))}));return j?h(n,j.routeNames.map((function(e){return{name:e}})),u,y):void 0}var b=o(l,y.map((function(e){return Object.assign({},e,{regex:e.regex?new RegExp(e.regex.source+'$'):void 0})}))),N=b.routes,O=b.remainingPath;void 0!==N&&(l=O,c=v=h(n,N,u,y));if(null==v||null==c)return;return c};var e=_r(d[0])(_r(d[1])),t=_r(d[0])(_r(d[2])),n=_r(d[0])(_r(d[3])),r=(function(e,t){if("function"==typeof WeakMap)var n=new WeakMap,r=new WeakMap;return(function(e,t){if(!t&&e&&e.__esModule)return e;var a,i,u={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return u;if(a=t?r:n){if(a.has(e))return a.get(e);a.set(e,u)}for(var o in e)"default"!==o&&{}.hasOwnProperty.call(e,o)&&((i=(a=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,o))&&(i.get||i.set)?a(u,o,i):u[o]=e[o]);return u})(e,t)})(_r(d[4])),a=_r(d[0])(_r(d[5])),i=_r(d[0])(_r(d[6]));var u=function(){for(var e,n=arguments.length,r=new Array(n),a=0;a2&&void 0!==arguments[2]?arguments[2]:[],a=arguments.length>3?arguments[3]:void 0,i=arguments.length>4?arguments[4]:void 0,o=arguments.length>5?arguments[5]:void 0,l=[];r.push(e),i.push(e);var p=n[e];if('string'==typeof p){var c=o?u(o,p):p;l.push(f(e,r,c,p))}else if('object'==typeof p){var h;if('string'==typeof p.path){if(p.exact&&void 0===p.path)throw new Error("A 'path' needs to be specified when specifying 'exact: true'. If you don't want this screen in the URL, specify it as empty string, e.g. `path: ''`.");h=!0!==p.exact?u(o||'',p.path||''):p.path||'',l.push(f(e,r,h,p.path,p.parse))}p.screens&&(p.initialRouteName&&a.push({initialRouteName:p.initialRouteName,parentScreens:i}),Object.keys(p.screens).forEach((function(e){var n=s(e,p.screens,r,a,(0,t.default)(i),null!=h?h:o);l.push.apply(l,(0,t.default)(n))})))}return r.pop(),l},f=function(e,r,a,i,u){return{screen:e,regex:(a=a.split('/').filter(Boolean).join('/'))?new RegExp(`^(${a.split('/').map((function(e){return e.startsWith(':')?`(([^/]+\\/)${e.endsWith('?')?'?':''})`:`${'*'===e?'.*':(0,n.default)(e)}\\/`})).join('')})`):void 0,pattern:a,path:i,routeNames:(0,t.default)(r),parse:u}},l=function(e,t){for(var n of t)if(e===n.routeNames[n.routeNames.length-1])return n.parse},p=function(e,t,n){for(var r of n)if(t.length===r.parentScreens.length){for(var a=!0,i=0;i0)for(var f=i;u=t.shift();){s=p(u.name,o,n);var h=f.index||f.routes.length-1;f.routes[h].state=c(s,u,0===t.length),t.length>0&&(f=f.routes[h].state),o.push(u.name)}(u=(0,a.default)(i)).path=e;var y=v(e,r?l(u.name,r):void 0);return y&&(u.params=Object.assign({},u.params,y)),i},v=function(e,t){var n=e.split('?')[1],a=r.parse(n);return t&&Object.keys(a).forEach((function(e){Object.hasOwnProperty.call(t,e)&&'string'==typeof a[e]&&(a[e]=t[e](a[e]))})),Object.keys(a).length?a:void 0}}),729,[8,170,11,730,722,692,728]); +__d((function(g,r,i,a,m,e,d){'use strict';m.exports=function(t){if('string'!=typeof t)throw new TypeError('Expected a string');return t.replace(/[|\\{}()[\]^$+*?.]/g,'\\$&').replace(/-/g,'\\x2d')}}),730,[]); +__d((function(g,_r,_i,a,m,_e,d){Object.defineProperty(_e,"__esModule",{value:!0}),_e.default=void 0;var e=(function(e,t){if("function"==typeof WeakMap)var r=new WeakMap,n=new WeakMap;return(function(e,t){if(!t&&e&&e.__esModule)return e;var o,f,u={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return u;if(o=t?n:r){if(o.has(e))return o.get(e);o.set(e,u)}for(var i in e)"default"!==i&&{}.hasOwnProperty.call(e,i)&&((f=(o=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,i))&&(f.get||f.set)?o(u,i,f):u[i]=e[i]);return u})(e,t)})(_r(d[0])).createContext(void 0);_e.default=e}),731,[153]); +__d((function(g,_r,_i,a,m,_e,d){Object.defineProperty(_e,"__esModule",{value:!0}),_e.default=void 0;var e=(function(e,t){if("function"==typeof WeakMap)var r=new WeakMap,n=new WeakMap;return(function(e,t){if(!t&&e&&e.__esModule)return e;var o,f,u={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return u;if(o=t?n:r){if(o.has(e))return o.get(e);o.set(e,u)}for(var i in e)"default"!==i&&{}.hasOwnProperty.call(e,i)&&((f=(o=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,i))&&(f.get||f.set)?o(u,i,f):u[i]=e[i]);return u})(e,t)})(_r(d[0])).createContext(void 0);_e.default=e}),732,[153]); +__d((function(g,_r,_i,a,m,_e,d){Object.defineProperty(_e,"__esModule",{value:!0}),_e.default=function(l){var v=l.children,c=n.useState((function(){return(0,_r(d[8]).nanoid)()})),s=(0,e.default)(c,1)[0],p=n.useState(new Map),y=(0,e.default)(p,2),_=y[0],k=y[1],w=n.useContext(u.default),R=n.useContext(o.default),M=n.useContext(i.default),h=null==M?void 0:M.setPreventRemove,P=(0,r.default)((function(e,t,n){if(n&&(null==w||null!=w&&w.getState().routes.every((function(e){return e.key!==t}))))throw new Error(`Couldn't find a route with the key ${t}. Is your component inside NavigationContent?`);k((function(r){var u,o;if(t===(null==(u=r.get(e))?void 0:u.routeKey)&&n===(null==(o=r.get(e))?void 0:o.preventRemove))return r;var i=new Map(r);return n?i.set(e,{routeKey:t,preventRemove:n}):i.delete(e),i}))})),j=(0,t.default)(_.values()).some((function(e){return e.preventRemove}));n.useEffect((function(){if(void 0!==(null==R?void 0:R.key)&&void 0!==h)return h(s,R.key,j),function(){h(s,R.key,!1)}}),[s,j,null==R?void 0:R.key,h]);var C=n.useMemo((function(){return{setPreventRemove:P,preventedRoutes:f(_)}}),[P,_]);return(0,_r(d[9]).jsx)(i.default.Provider,{value:C,children:v})};var e=_r(d[0])(_r(d[1])),t=_r(d[0])(_r(d[2])),n=(function(e,t){if("function"==typeof WeakMap)var n=new WeakMap,r=new WeakMap;return(function(e,t){if(!t&&e&&e.__esModule)return e;var u,o,i={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return i;if(u=t?r:n){if(u.has(e))return u.get(e);u.set(e,i)}for(var f in e)"default"!==f&&{}.hasOwnProperty.call(e,f)&&((o=(u=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,f))&&(o.get||o.set)?u(i,f,o):i[f]=e[f]);return i})(e,t)})(_r(d[3])),r=_r(d[0])(_r(d[4])),u=_r(d[0])(_r(d[5])),o=_r(d[0])(_r(d[6])),i=_r(d[0])(_r(d[7]));var f=function(e){return(0,t.default)(e.values()).reduce((function(e,t){var n,r=t.routeKey,u=t.preventRemove;return e[r]={preventRemove:(null==(n=e[r])?void 0:n.preventRemove)||u},e}),{})}}),733,[8,26,11,153,734,731,696,732,708,193]); +__d((function(g,r,i,a,_m,e,d){"use strict";var t=this&&this.__createBinding||(Object.create?function(t,n,u,f){void 0===f&&(f=u),Object.defineProperty(t,f,{enumerable:!0,get:function(){return n[u]}})}:function(t,n,u,f){void 0===f&&(f=u),t[f]=n[u]}),n=this&&this.__setModuleDefault||(Object.create?function(t,n){Object.defineProperty(t,"default",{enumerable:!0,value:n})}:function(t,n){t.default=n}),u=this&&this.__importStar||function(u){if(u&&u.__esModule)return u;var f={};if(null!=u)for(var c in u)"default"!==c&&Object.prototype.hasOwnProperty.call(u,c)&&t(f,u,c);return n(f,u),f};Object.defineProperty(e,"__esModule",{value:!0});var f=u(r(d[0])),c='undefined'!=typeof document?f.useLayoutEffect:f.useEffect;e.default=function(t){var n=f.useRef(t),u=f.useRef((function(){for(var t=[],u=0;u {\n // Your code here\n }, [depA, depB])\n);\n\nSee usage guide: https://reactnavigation.org/docs/use-focus-effect")}e.useEffect((function(){var e,n=!1,u=function(){var e=t();if(void 0===e||'function'==typeof e)return e};o.isFocused()&&(e=u(),n=!0);var r=o.addListener('focus',(function(){n||(void 0!==e&&e(),e=u(),n=!0)})),f=o.addListener('blur',(function(){void 0!==e&&e(),e=void 0,n=!1}));return function(){void 0!==e&&e(),r(),f()}}),[t,o])};var e=(function(e,n){if("function"==typeof WeakMap)var t=new WeakMap,o=new WeakMap;return(function(e,n){if(!n&&e&&e.__esModule)return e;var u,r,f={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return f;if(u=n?o:t){if(u.has(e))return u.get(e);u.set(e,f)}for(var c in e)"default"!==c&&{}.hasOwnProperty.call(e,c)&&((r=(u=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,c))&&(r.get||r.set)?u(f,c,r):f[c]=e[c]);return f})(e,n)})(_r(d[0])),n=_r(d[1])(_r(d[2]))}),736,[153,8,737]); +__d((function(g,_r,_i,a,m,_e,d){Object.defineProperty(_e,"__esModule",{value:!0}),_e.default=function(){var r=e.useContext(t.default),o=e.useContext(n.default);if(void 0===o&&void 0===r)throw new Error("Couldn't find a navigation object. Is your component inside NavigationContainer?");return null!=o?o:r};var e=(function(e,t){if("function"==typeof WeakMap)var n=new WeakMap,r=new WeakMap;return(function(e,t){if(!t&&e&&e.__esModule)return e;var o,u,i={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return i;if(o=t?r:n){if(o.has(e))return o.get(e);o.set(e,i)}for(var f in e)"default"!==f&&{}.hasOwnProperty.call(e,f)&&((u=(o=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,f))&&(u.get||u.set)?o(i,f,u):i[f]=e[f]);return i})(e,t)})(_r(d[0])),t=_r(d[1])(_r(d[2])),n=_r(d[1])(_r(d[3]))}),737,[153,8,694,695]); +__d((function(g,_r,_i,a,m,_e,d){Object.defineProperty(_e,"__esModule",{value:!0}),_e.default=function(){var u=(0,r.default)(),f=(0,t.useState)(u.isFocused),o=(0,e.default)(f,2),i=o[0],c=o[1],s=u.isFocused();i!==s&&c(s);return n.useEffect((function(){var e=u.addListener('focus',(function(){return c(!0)})),t=u.addListener('blur',(function(){return c(!1)}));return function(){e(),t()}}),[u]),n.useDebugValue(s),s};var e=_r(d[0])(_r(d[1])),t=(function(e,t){if("function"==typeof WeakMap)var n=new WeakMap,r=new WeakMap;return(function(e,t){if(!t&&e&&e.__esModule)return e;var u,f,o={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return o;if(u=t?r:n){if(u.has(e))return u.get(e);u.set(e,o)}for(var i in e)"default"!==i&&{}.hasOwnProperty.call(e,i)&&((f=(u=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,i))&&(f.get||f.set)?u(o,i,f):o[i]=e[i]);return o})(e,t)})(_r(d[2])),n=t,r=_r(d[0])(_r(d[3]))}),738,[8,26,153,737]); +__d((function(g,_r,_i,a,m,_e,d){Object.defineProperty(_e,"__esModule",{value:!0}),_e.default=function(i,v){var E=(0,K.default)(),G=o.useContext(p.default),$=v.children,A=v.screenListeners,x=(0,n.default)(v,R),M=o.useRef(i(Object.assign({},x,null!=G&&G.params&&null==G.params.state&&!1!==G.params.initial&&'string'==typeof G.params.screen?{initialRouteName:G.params.screen}:null))).current,F=_($),J=F.reduce((function(e,t){if(t.props.name in e)throw new Error(`A navigator cannot contain multiple 'Screen' components with the same name (found duplicate screen named '${t.props.name}')`);return e[t.props.name]=t,e}),{}),V=F.map((function(e){return e.props.name})),W=V.reduce((function(e,t){return e[t]=J[t].keys.map((function(e){return null!=e?e:''})).join(':'),e}),{}),T=V.reduce((function(e,t){var n=J[t].props.initialParams;return e[t]=n,e}),{}),D=V.reduce((function(e,n){return Object.assign(e,(0,t.default)({},n,J[n].props.getId))}),{});if(!V.length)throw new Error("Couldn't find any screens for the navigator. Have you defined any screens as its children?");var H=o.useCallback((function(e){return void 0===e.type||e.type===M.type}),[M.type]),q=o.useCallback((function(e){return void 0!==e&&!1===e.stale&&H(e)}),[H]),z=o.useContext(f.default),B=z.state,Q=z.getState,U=z.setState,X=z.setKey,Y=z.getKey,Z=z.getIsInitial,ee=o.useRef(!1),te=o.useCallback((function(){U(void 0),ee.current=!0}),[U]),ne=o.useCallback((function(e){ee.current||U(e)}),[U]),re=o.useMemo((function(){var e,t,n,r=V.reduce((function(e,t){var n,r,o,i=J[t].props.initialParams,u=null==(null==G||null==(n=G.params)?void 0:n.state)&&!1!==(null==G||null==(r=G.params)?void 0:r.initial)&&(null==G||null==(o=G.params)?void 0:o.screen)===t?G.params.params:void 0;return e[t]=void 0!==i||void 0!==u?Object.assign({},i,u):void 0,e}),{});return void 0!==B&&H(B)||null!=(null==G||null==(e=G.params)?void 0:e.state)?[M.getRehydratedState(null!=(t=null==G||null==(n=G.params)?void 0:n.state)?t:B,{routeNames:V,routeParamList:r,routeGetIdList:D}),!1]:[M.getInitialState({routeNames:V,routeParamList:r,routeGetIdList:D}),!0]}),[B,M,H]),ae=(0,e.default)(re,2),oe=ae[0],ie=ae[1],ue=o.useRef(W);o.useEffect((function(){ue.current=W}));var se=ue.current,le=q(B)?B:oe,pe=le;(0,u.default)(le.routeNames,V)&&(0,s.default)(W,se)||(pe=M.getStateForRouteNamesChange(le,{routeNames:V,routeParamList:T,routeGetIdList:D,routeKeyChanges:Object.keys(W).filter((function(e){return se.hasOwnProperty(e)&&W[e]!==se[e]}))}));var fe=o.useRef(null==G?void 0:G.params);if(o.useEffect((function(){fe.current=null==G?void 0:G.params}),[null==G?void 0:G.params]),null!=G&&G.params){var ce,de=fe.current;'object'==typeof G.params.state&&null!=G.params.state&&G.params!==de?ce=_r(d[29]).CommonActions.reset(G.params.state):'string'==typeof G.params.screen&&(!1===G.params.initial&&ie||G.params!==de)&&(ce=_r(d[29]).CommonActions.navigate({name:G.params.screen,params:G.params.params,path:G.params.path}));var me=ce?M.getStateForAction(pe,ce,{routeNames:V,routeParamList:T,routeGetIdList:D}):null;pe=null!==me?M.getRehydratedState(me,{routeNames:V,routeParamList:T,routeGetIdList:D}):pe}var ve=le!==pe;(0,N.default)((function(){ve&&ne(pe)})),le=pe,o.useEffect((function(){return X(E),Z()||ne(pe),function(){setTimeout((function(){void 0!==Q()&&Y()===E&&te()}),0)}}),[]);var ye=o.useRef();ye.current=oe;var ge=o.useCallback((function(){var e=Q();return q(e)?e:ye.current}),[Q,q]),he=(0,O.default)((function(e){var t,n,o,i=[];e.target?null!=(o=n=le.routes.find((function(t){return t.key===e.target})))&&o.name&&i.push(n.name):(n=le.routes[le.index],i.push.apply(i,(0,r.default)(Object.keys(J).filter((function(e){var t;return(null==(t=n)?void 0:t.name)===e})))));if(null!=n){var u=Ie[n.key].navigation;(t=[]).concat.apply(t,(0,r.default)([A].concat((0,r.default)(i.map((function(e){return J[e].props.listeners})))).map((function(t){var r='function'==typeof t?t({route:n,navigation:u}):t;return r?Object.keys(r).filter((function(t){return t===e.type})).map((function(e){return null==r?void 0:r[e]})):void 0})))).filter((function(e,t,n){return e&&n.lastIndexOf(e)===t})).forEach((function(t){return null==t?void 0:t(e)}))}}));(0,k.default)({state:le,emitter:he}),o.useEffect((function(){he.emit({type:'state',data:{state:le}})}),[he,le]);var Se=(0,y.default)(),Le=Se.listeners,Oe=Se.addListener,be=(0,j.default)(),ke=be.keyedListeners,je=be.addKeyedListener,we=(0,C.default)({router:M,getState:ge,setState:ne,key:null==G?void 0:G.key,actionListeners:Le.action,beforeRemoveListeners:ke.beforeRemove,routerConfigOptions:{routeNames:V,routeParamList:T,routeGetIdList:D},emitter:he}),Ce=(0,I.default)({router:M,key:null==G?void 0:G.key,getState:ge,setState:ne}),Pe=(0,w.default)({id:v.id,onAction:we,getState:ge,emitter:he,router:M});(0,b.default)({navigation:Pe,focusedListeners:Le.focus}),(0,P.default)({getState:ge,getStateListeners:ke.getState});var Ie=(0,L.default)({state:le,screens:J,navigation:Pe,screenOptions:v.screenOptions,defaultScreenOptions:v.defaultScreenOptions,onAction:we,getState:ge,setState:ne,onRouteFocus:Ce,addListener:Oe,addKeyedListener:je,router:M,emitter:he});(0,S.default)({state:le,navigation:Pe,descriptors:Ie});var Ke=(0,h.default)((function(e){return(0,_r(d[30]).jsx)(l.default.Provider,{value:Pe,children:(0,_r(d[30]).jsx)(c.default,{children:e})})}));return{state:le,navigation:Pe,descriptors:Ie,NavigationContent:Ke}};var e=_r(d[0])(_r(d[1])),t=_r(d[0])(_r(d[2])),n=_r(d[0])(_r(d[3])),r=_r(d[0])(_r(d[4])),o=(function(e,t){if("function"==typeof WeakMap)var n=new WeakMap,r=new WeakMap;return(function(e,t){if(!t&&e&&e.__esModule)return e;var o,i,u={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return u;if(o=t?r:n){if(o.has(e))return o.get(e);o.set(e,u)}for(var s in e)"default"!==s&&{}.hasOwnProperty.call(e,s)&&((i=(o=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,s))&&(i.get||i.set)?o(u,s,i):u[s]=e[s]);return u})(e,t)})(_r(d[5])),i=_r(d[0])(_r(d[6])),u=_r(d[0])(_r(d[7])),s=_r(d[0])(_r(d[8])),l=_r(d[0])(_r(d[9])),p=_r(d[0])(_r(d[10])),f=_r(d[0])(_r(d[11])),c=_r(d[0])(_r(d[12])),v=_r(d[0])(_r(d[13])),y=_r(d[0])(_r(d[14])),h=_r(d[0])(_r(d[15])),S=_r(d[0])(_r(d[16])),L=_r(d[0])(_r(d[17])),O=_r(d[0])(_r(d[18])),b=_r(d[0])(_r(d[19])),k=_r(d[0])(_r(d[20])),j=_r(d[0])(_r(d[21])),w=_r(d[0])(_r(d[22])),C=_r(d[0])(_r(d[23])),P=_r(d[0])(_r(d[24])),I=_r(d[0])(_r(d[25])),K=_r(d[0])(_r(d[26])),N=_r(d[0])(_r(d[27])),R=["children","screenListeners"];_r(d[28]).PrivateValueStore;var E=function(e){return void 0===e||'string'==typeof e&&''!==e},_=function(e,t,n){return o.Children.toArray(e).reduce((function(e,u){var s,l;if(o.isValidElement(u)){if(u.type===v.default){if(!E(u.props.navigationKey))throw new Error(`Got an invalid 'navigationKey' prop (${JSON.stringify(u.props.navigationKey)}) for the screen '${u.props.name}'. It must be a non-empty string or 'undefined'.`);return e.push({keys:[t,u.props.navigationKey],options:n,props:u.props}),e}if(u.type===o.Fragment||u.type===i.default){if(!E(u.props.navigationKey))throw new Error(`Got an invalid 'navigationKey' prop (${JSON.stringify(u.props.navigationKey)}) for the group. It must be a non-empty string or 'undefined'.`);return e.push.apply(e,(0,r.default)(_(u.props.children,u.props.navigationKey,u.type!==i.default?n:null!=n?[].concat((0,r.default)(n),[u.props.screenOptions]):[u.props.screenOptions]))),e}}throw new Error(`A navigator can only contain 'Screen', 'Group' or 'React.Fragment' as its direct children (found ${o.isValidElement(u)?`'${'string'==typeof u.type?u.type:null==(s=u.type)?void 0:s.name}'${null!=u.props&&'object'==typeof u.props&&'name'in u.props&&null!=(l=u.props)&&l.name?` for the screen '${u.props.name}'`:''}`:'object'==typeof u?JSON.stringify(u):`'${String(u)}'`}). To render this component in the navigator, pass it in the 'component' prop to 'Screen'.`)}),[])}}),739,[8,26,170,119,11,153,715,740,741,731,696,697,733,716,699,742,743,744,700,748,749,701,750,751,753,754,755,713,735,705,193]); +__d((function(g,r,i,_a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(n,t){if(n===t)return!0;if(n.length!==t.length)return!1;return n.every((function(n,u){return n===t[u]}))}}),740,[]); +__d((function(g,r,i,_a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(t,n){if(t===n)return!0;var u=Object.keys(t),f=Object.keys(n);if(u.length!==f.length)return!1;return u.every((function(u){return t[u]===n[u]}))}}),741,[]); +__d((function(g,_r,_i,a,m,_e,d){Object.defineProperty(_e,"__esModule",{value:!0}),_e.default=function(n){var t=e.useRef(n);return t.current=n,e.useEffect((function(){t.current=null})),e.useRef((function(e){var n=e.children,u=t.current;if(null===u)throw new Error('The returned component must be rendered in the same render phase as the hook.');return(0,_r(d[1]).jsx)(r,{render:u,children:n})})).current};var e=(function(e,r){if("function"==typeof WeakMap)var n=new WeakMap,t=new WeakMap;return(function(e,r){if(!r&&e&&e.__esModule)return e;var u,o,f={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return f;if(u=r?t:n){if(u.has(e))return u.get(e);u.set(e,f)}for(var c in e)"default"!==c&&{}.hasOwnProperty.call(e,c)&&((o=(u=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,c))&&(o.get||o.set)?u(f,c,o):f[c]=e[c]);return f})(e,r)})(_r(d[0]));var r=function(e){return(0,e.render)(e.children)}}),742,[153,193]); +__d((function(g,_r,_i,a,m,_e,d){Object.defineProperty(_e,"__esModule",{value:!0}),_e.default=function(n){var r=n.state,o=n.navigation,u=n.descriptors,i=e.useContext(t.default);i&&o.isFocused()&&(i.options=u[r.routes[r.index].key].options)};var e=(function(e,t){if("function"==typeof WeakMap)var n=new WeakMap,r=new WeakMap;return(function(e,t){if(!t&&e&&e.__esModule)return e;var o,u,i={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return i;if(o=t?r:n){if(o.has(e))return o.get(e);o.set(e,i)}for(var f in e)"default"!==f&&{}.hasOwnProperty.call(e,f)&&((u=(o=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,f))&&(u.get||u.set)?o(i,f,u):i[f]=e[f]);return i})(e,t)})(_r(d[0])),t=_r(d[1])(_r(d[2]))}),743,[153,8,717]); +__d((function(g,_r,_i,a,m,_e,d){Object.defineProperty(_e,"__esModule",{value:!0}),_e.default=function(p){var v=p.state,y=p.screens,O=p.navigation,j=p.screenOptions,b=p.defaultScreenOptions,k=p.onAction,h=p.getState,S=p.setState,_=p.addListener,P=p.addKeyedListener,w=p.onRouteFocus,M=p.router,x=p.emitter,A=r.useState({}),L=(0,n.default)(A,2),R=L[0],C=L[1],D=r.useContext(o.default),W=D.onDispatchAction,F=D.onOptionsChange,K=D.stackRef,B=r.useMemo((function(){return{navigation:O,onAction:k,addListener:_,addKeyedListener:P,onRouteFocus:w,onDispatchAction:W,onOptionsChange:F,stackRef:K}}),[O,k,_,P,w,W,F,K]),E=(0,f.default)({state:v,getState:h,navigation:O,setOptions:C,router:M,emitter:x});return(0,c.default)(v.routes).reduce((function(n,r,f){var c=y[r.name],p=c.props,O=E[r.key],k=[j].concat((0,t.default)(c.options?c.options.filter(Boolean):[]),[p.options,R[r.key]]).reduce((function(e,t){return Object.assign(e,'function'!=typeof t?t:t({route:r,navigation:O}))}),{}),_=Object.assign({},'function'==typeof b?b({route:r,navigation:O,options:k}):b,k),P=function(){return C((function(t){if(r.key in t){var n=r.key;t[n];return(0,e.default)(t,[n].map(l))}return t}))};return n[r.key]={route:r,navigation:O,render:function(){return(0,_r(d[11]).jsx)(o.default.Provider,{value:B,children:(0,_r(d[11]).jsx)(i.default.Provider,{value:O,children:(0,_r(d[11]).jsx)(u.default.Provider,{value:r,children:(0,_r(d[11]).jsx)(s.default,{navigation:O,route:r,screen:p,routeState:v.routes[f].state,getState:h,setState:S,options:_,clearOptions:P})})})},r.key)},options:_},n}),{})};var e=_r(d[0])(_r(d[1])),t=_r(d[0])(_r(d[2])),n=_r(d[0])(_r(d[3])),r=(function(e,t){if("function"==typeof WeakMap)var n=new WeakMap,r=new WeakMap;return(function(e,t){if(!t&&e&&e.__esModule)return e;var o,i,u={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return u;if(o=t?r:n){if(o.has(e))return o.get(e);o.set(e,u)}for(var s in e)"default"!==s&&{}.hasOwnProperty.call(e,s)&&((i=(o=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,s))&&(i.get||i.set)?o(u,s,i):u[s]=e[s]);return u})(e,t)})(_r(d[4])),o=_r(d[0])(_r(d[5])),i=_r(d[0])(_r(d[6])),u=_r(d[0])(_r(d[7])),s=_r(d[0])(_r(d[8])),f=_r(d[0])(_r(d[9])),c=_r(d[0])(_r(d[10]));function l(e){var t=p(e,"string");return"symbol"==typeof t?t:t+""}function p(e,t){if("object"!=typeof e||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=typeof r)return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}}),744,[8,119,11,26,153,693,695,696,745,747,720,193]); +__d((function(g,_r,_i,a,m,_e,d){Object.defineProperty(_e,"__esModule",{value:!0}),_e.default=function(o){var i=o.screen,c=o.route,f=o.navigation,s=o.routeState,l=o.getState,p=o.setState,v=o.options,y=o.clearOptions,k=e.useRef(),b=e.useCallback((function(){return k.current}),[]),j=(0,u.default)({key:c.key,options:v,navigation:f}).addOptionsGetter,O=e.useCallback((function(e){k.current=e}),[]),_=e.useCallback((function(){var e=l().routes.find((function(e){return e.key===c.key}));return e?e.state:void 0}),[l,c.key]),h=e.useCallback((function(e){var t=l();p(Object.assign({},t,{routes:t.routes.map((function(t){return t.key===c.key?Object.assign({},t,{state:e}):t}))}))}),[l,c.key,p]),C=e.useRef(!0);e.useEffect((function(){C.current=!1})),e.useEffect((function(){return y}),[]);var M=e.useCallback((function(){return C.current}),[]),P=e.useMemo((function(){return{state:s,getState:_,setState:h,getKey:b,setKey:O,getIsInitial:M,addOptionsGetter:j}}),[s,_,h,b,O,M,j]),S=i.getComponent?i.getComponent():i.component;return(0,_r(d[6]).jsx)(n.default.Provider,{value:P,children:(0,_r(d[6]).jsx)(t.default,{children:(0,_r(d[6]).jsx)(r.default,{name:i.name,render:S||i.children,navigation:f,route:c,children:void 0!==S?(0,_r(d[6]).jsx)(S,{navigation:f,route:c}):void 0!==i.children?i.children({navigation:f,route:c}):null})})})};var e=(function(e,t){if("function"==typeof WeakMap)var n=new WeakMap,r=new WeakMap;return(function(e,t){if(!t&&e&&e.__esModule)return e;var u,o,i={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return i;if(u=t?r:n){if(u.has(e))return u.get(e);u.set(e,i)}for(var c in e)"default"!==c&&{}.hasOwnProperty.call(e,c)&&((o=(u=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,c))&&(o.get||o.set)?u(i,c,o):i[c]=e[c]);return i})(e,t)})(_r(d[0])),t=_r(d[1])(_r(d[2])),n=_r(d[1])(_r(d[3])),r=_r(d[1])(_r(d[4])),u=_r(d[1])(_r(d[5]))}),745,[153,8,691,697,746,702,193]); +__d((function(g,_r,_i,a,m,_e,d){Object.defineProperty(_e,"__esModule",{value:!0}),_e.default=void 0;var e=(function(e,t){if("function"==typeof WeakMap)var r=new WeakMap,n=new WeakMap;return(function(e,t){if(!t&&e&&e.__esModule)return e;var f,o,u={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return u;if(f=t?n:r){if(f.has(e))return f.get(e);f.set(e,u)}for(var i in e)"default"!==i&&{}.hasOwnProperty.call(e,i)&&((o=(f=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,i))&&(o.get||o.set)?f(u,i,o):u[i]=e[i]);return u})(e,t)})(_r(d[0]));_e.default=e.memo((function(e){return e.children}),(function(e,t){var r=Object.keys(e),n=Object.keys(t);if(r.length!==n.length)return!1;for(var f of r)if('children'!==f&&e[f]!==t[f])return!1;return!0}))}),746,[153]); +__d((function(g,_r,_i,a,m,_e,d){Object.defineProperty(_e,"__esModule",{value:!0}),_e.default=function(o){var i=o.state,c=o.getState,f=o.navigation,s=o.setOptions,y=o.router,l=o.emitter,p=(n.useContext(r.default).stackRef,n.useMemo((function(){return{current:{}}}),[c,f,s,y,l])),k=Object.assign({},y.actionCreators,_r(d[5]).CommonActions);return p.current=i.routes.reduce((function(n,r){var o=p.current[r.key];if(o)n[r.key]=o;else{f.emit;var i=(0,t.default)(f,u),y=function(e){var t='function'==typeof e?e(c()):e;null!=t&&f.dispatch(Object.assign({source:r.key},t))},v=function(e){try{e()}finally{}},O=Object.keys(k).reduce((function(e,t){return e[t]=function(){for(var e=arguments.length,n=new Array(e),r=0;r1&&void 0!==arguments[1]?arguments[1]:new Set,n=u();if(t.has(n.key))return!1;if(t.add(n.key),'string'!=typeof e.target||e.target===n.key){var l=o.getStateForAction(n,e,b.current);if(null!==(l=null===l&&e.target===n.key?n:l)){if(k(e,n===l),n!==l){if((0,r.shouldPreventRemove)(v,c,n.routes,l.routes,e))return!0;i(l)}if(void 0!==_)o.shouldActionChangeFocus(e)&&void 0!==f&&_(f);return!0}}if(void 0!==y&&y(e,t))return!0;for(var p=s.length-1;p>=0;p--){if((0,s[p])(e,t))return!0}return!1}),[s,c,v,u,f,y,k,_,o,i]);return(0,r.default)({getState:u,emitter:v,beforeRemoveListeners:c}),e.useEffect((function(){return null==h?void 0:h('action',O)}),[h,O]),O};var e=n(_r(d[0])),t=_r(d[1])(_r(d[2])),r=n(_r(d[3]));function n(e,t){if("function"==typeof WeakMap)var r=new WeakMap,o=new WeakMap;return(n=function(e,t){if(!t&&e&&e.__esModule)return e;var n,u,i={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return i;if(n=t?o:r){if(n.has(e))return n.get(e);n.set(e,i)}for(var f in e)"default"!==f&&{}.hasOwnProperty.call(e,f)&&((u=(n=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,f))&&(u.get||u.set)?n(i,f,u):i[f]=e[f]);return i})(e,t)}}),751,[153,8,693,752]); +__d((function(g,_r,_i,a,m,_e,d){Object.defineProperty(_e,"__esModule",{value:!0}),_e.default=function(e){var u=e.getState,f=e.emitter,i=e.beforeRemoveListeners,l=t.useContext(r.default).addKeyedListener,v=t.useContext(n.default),c=null==v?void 0:v.key;t.useEffect((function(){if(c)return null==l?void 0:l('beforeRemove',c,(function(e){var t=u();return o(f,i,t.routes,[],e)}))}),[l,i,f,u,c])},_e.shouldPreventRemove=void 0;var e=_r(d[0])(_r(d[1])),t=(function(e,t){if("function"==typeof WeakMap)var r=new WeakMap,n=new WeakMap;return(function(e,t){if(!t&&e&&e.__esModule)return e;var u,o,f={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return f;if(u=t?n:r){if(u.has(e))return u.get(e);u.set(e,f)}for(var i in e)"default"!==i&&{}.hasOwnProperty.call(e,i)&&((o=(u=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,i))&&(o.get||o.set)?u(f,i,o):f[i]=e[i]);return f})(e,t)})(_r(d[2])),r=_r(d[0])(_r(d[3])),n=_r(d[0])(_r(d[4]));var u=Symbol('VISITED_ROUTE_KEYS'),o=_e.shouldPreventRemove=function(t,r,n,o,f){var i,l=o.map((function(e){return e.key})),v=n.filter((function(e){return!l.includes(e.key)})).reverse(),c=null!=(i=f[u])?i:new Set,s=Object.assign({},f,(0,e.default)({},u,c));for(var y of v){var p;if(!c.has(y.key)){if(null==(p=r[y.key])?void 0:p.call(r,s))return!0;if(c.add(y.key),t.emit({type:'beforeRemove',target:y.key,data:{action:s},canPreventDefault:!0}).defaultPrevented)return!0}}return!1}}),752,[8,170,153,693,696]); +__d((function(g,_r,_i,a,m,_e,d){Object.defineProperty(_e,"__esModule",{value:!0}),_e.default=function(u){var o=u.getState,f=u.getStateListeners,i=e.useContext(n.default).addKeyedListener,l=e.useContext(r.default),s=l?l.key:'root',c=e.useCallback((function(){var e=o(),n=e.routes.map((function(e){var t,n=null==(t=f[e.key])?void 0:t.call(f);return e.state===n?e:Object.assign({},e,{state:n})}));return(0,t.default)(e.routes,n)?e:Object.assign({},e,{routes:n})}),[o,f]);e.useEffect((function(){return null==i?void 0:i('getState',s,c)}),[i,c,s])};var e=(function(e,t){if("function"==typeof WeakMap)var n=new WeakMap,r=new WeakMap;return(function(e,t){if(!t&&e&&e.__esModule)return e;var u,o,f={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return f;if(u=t?r:n){if(u.has(e))return u.get(e);u.set(e,f)}for(var i in e)"default"!==i&&{}.hasOwnProperty.call(e,i)&&((o=(u=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,i))&&(o.get||o.set)?u(f,i,o):f[i]=e[i]);return f})(e,t)})(_r(d[0])),t=_r(d[1])(_r(d[2])),n=_r(d[1])(_r(d[3])),r=_r(d[1])(_r(d[4]))}),753,[153,8,740,693,696]); +__d((function(g,_r,_i,a,m,_e,d){Object.defineProperty(_e,"__esModule",{value:!0}),_e.default=function(r){var n=r.router,o=r.getState,u=r.key,f=r.setState,i=e.useContext(t.default).onRouteFocus;return e.useCallback((function(e){var t=o(),r=n.getStateForRouteFocus(t,e);r!==t&&f(r),void 0!==i&&void 0!==u&&i(u)}),[o,i,n,f,u])};var e=(function(e,t){if("function"==typeof WeakMap)var r=new WeakMap,n=new WeakMap;return(function(e,t){if(!t&&e&&e.__esModule)return e;var o,u,f={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return f;if(o=t?n:r){if(o.has(e))return o.get(e);o.set(e,f)}for(var i in e)"default"!==i&&{}.hasOwnProperty.call(e,i)&&((u=(o=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,i))&&(u.get||u.set)?o(f,i,u):f[i]=e[i]);return f})(e,t)})(_r(d[0])),t=_r(d[1])(_r(d[2]))}),754,[153,8,693]); +__d((function(g,_r,_i,a,m,_e,d){Object.defineProperty(_e,"__esModule",{value:!0}),_e.default=function(){var n=t.useState((function(){return(0,_r(d[3]).nanoid)()})),r=(0,e.default)(n,1)[0],o=t.useContext(_r(d[4]).SingleNavigatorContext);if(void 0===o)throw new Error("Couldn't register the navigator. Have you wrapped your app with 'NavigationContainer'?\n\nThis can also happen if there are multiple copies of '@react-navigation' packages installed.");return t.useEffect((function(){var e=o.register,t=o.unregister;return e(r),function(){return t(r)}}),[o,r]),r};var e=_r(d[0])(_r(d[1])),t=(function(e,t){if("function"==typeof WeakMap)var n=new WeakMap,r=new WeakMap;return(function(e,t){if(!t&&e&&e.__esModule)return e;var o,i,u={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return u;if(o=t?r:n){if(o.has(e))return o.get(e);o.set(e,u)}for(var f in e)"default"!==f&&{}.hasOwnProperty.call(e,f)&&((i=(o=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,f))&&(i.get||i.set)?o(u,f,i):u[f]=e[f]);return u})(e,t)})(_r(d[2]))}),755,[8,26,153,708,691]); +__d((function(g,_r,_i,a,m,_e,d){Object.defineProperty(_e,"__esModule",{value:!0}),_e.default=function(){var r=e.useRef(null);null==r.current&&(r.current=(0,t.default)());return r.current};var e=(function(e,t){if("function"==typeof WeakMap)var r=new WeakMap,n=new WeakMap;return(function(e,t){if(!t&&e&&e.__esModule)return e;var u,f,o={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return o;if(u=t?n:r){if(u.has(e))return u.get(e);u.set(e,o)}for(var l in e)"default"!==l&&{}.hasOwnProperty.call(e,l)&&((f=(u=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,l))&&(f.get||f.set)?u(o,l,f):o[l]=e[l]);return o})(e,t)})(_r(d[0])),t=_r(d[1])(_r(d[2]))}),756,[153,8,704]); +__d((function(g,_r,_i,a,m,_e,d){Object.defineProperty(_e,"__esModule",{value:!0}),_e.default=function(r){var u=(0,n.default)(),f=t.useState((function(){return r(u.getState())})),o=(0,e.default)(f,2)[1],c=t.useRef(r);return t.useEffect((function(){c.current=r})),t.useEffect((function(){return u.addListener('state',(function(e){o(c.current(e.data.state))}))}),[u]),r(u.getState())};var e=_r(d[0])(_r(d[1])),t=(function(e,t){if("function"==typeof WeakMap)var n=new WeakMap,r=new WeakMap;return(function(e,t){if(!t&&e&&e.__esModule)return e;var u,f,o={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return o;if(u=t?r:n){if(u.has(e))return u.get(e);u.set(e,o)}for(var c in e)"default"!==c&&{}.hasOwnProperty.call(e,c)&&((f=(u=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,c))&&(f.get||f.set)?u(o,c,f):o[c]=e[c]);return o})(e,t)})(_r(d[2])),n=_r(d[0])(_r(d[3]))}),757,[8,26,153,737]); +__d((function(g,_r,_i,a,m,_e,d){Object.defineProperty(_e,"__esModule",{value:!0}),_e.default=function(o,i){var l=t.useState((function(){return(0,_r(d[7]).nanoid)()})),c=(0,e.default)(l,1)[0],p=(0,r.default)(),s=(0,f.default)().key,v=(0,u.default)().setPreventRemove;t.useEffect((function(){return v(c,s,o),function(){v(c,s,!1)}}),[v,c,s,o]);var _=(0,n.default)((function(e){o&&(e.preventDefault(),i({data:e.data}))}));t.useEffect((function(){return null==p?void 0:p.addListener('beforeRemove',_)}),[p,_])};var e=_r(d[0])(_r(d[1])),t=(function(e,t){if("function"==typeof WeakMap)var n=new WeakMap,r=new WeakMap;return(function(e,t){if(!t&&e&&e.__esModule)return e;var u,f,o={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return o;if(u=t?r:n){if(u.has(e))return u.get(e);u.set(e,o)}for(var i in e)"default"!==i&&{}.hasOwnProperty.call(e,i)&&((f=(u=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,i))&&(f.get||f.set)?u(o,i,f):o[i]=e[i]);return o})(e,t)})(_r(d[2])),n=_r(d[0])(_r(d[3])),r=_r(d[0])(_r(d[4])),u=_r(d[0])(_r(d[5])),f=_r(d[0])(_r(d[6]))}),758,[8,26,153,734,737,759,760,708]); +__d((function(g,_r,_i,a,m,_e,d){Object.defineProperty(_e,"__esModule",{value:!0}),_e.default=function(){var n=e.useContext(t.default);if(null==n)throw new Error("Couldn't find the prevent remove context. Is your component inside NavigationContent?");return n};var e=(function(e,t){if("function"==typeof WeakMap)var n=new WeakMap,r=new WeakMap;return(function(e,t){if(!t&&e&&e.__esModule)return e;var o,u,f={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return f;if(o=t?r:n){if(o.has(e))return o.get(e);o.set(e,f)}for(var i in e)"default"!==i&&{}.hasOwnProperty.call(e,i)&&((u=(o=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,i))&&(u.get||u.set)?o(f,i,u):f[i]=e[i]);return f})(e,t)})(_r(d[0])),t=_r(d[1])(_r(d[2]))}),759,[153,8,732]); +__d((function(g,_r,_i,a,m,_e,d){Object.defineProperty(_e,"__esModule",{value:!0}),_e.default=function(){var n=e.useContext(t.default);if(void 0===n)throw new Error("Couldn't find a route object. Is your component inside a screen in a navigator?");return n};var e=(function(e,t){if("function"==typeof WeakMap)var n=new WeakMap,r=new WeakMap;return(function(e,t){if(!t&&e&&e.__esModule)return e;var o,u,f={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return f;if(o=t?r:n){if(o.has(e))return o.get(e);o.set(e,f)}for(var i in e)"default"!==i&&{}.hasOwnProperty.call(e,i)&&((u=(o=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,i))&&(u.get||u.set)?o(f,i,u):f[i]=e[i]);return f})(e,t)})(_r(d[0])),t=_r(d[1])(_r(d[2]))}),760,[153,8,696]); +__d((function(g,_r,_i,a,m,_e,d){Object.defineProperty(_e,"__esModule",{value:!0}),_e.default=void 0;var e=_r(d[0])(_r(d[1])),t=_r(d[0])(_r(d[2])),n=(function(e,t){if("function"==typeof WeakMap)var n=new WeakMap,r=new WeakMap;return(function(e,t){if(!t&&e&&e.__esModule)return e;var l,i,u={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return u;if(l=t?r:n){if(l.has(e))return l.get(e);l.set(e,u)}for(var o in e)"default"!==o&&{}.hasOwnProperty.call(e,o)&&((i=(l=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,o))&&(i.get||i.set)?l(u,o,i):u[o]=e[o]);return u})(e,t)})(_r(d[3])),r=_r(d[0])(_r(d[4])),l=_r(d[0])(_r(d[5])),i=_r(d[0])(_r(d[6])),u=_r(d[0])(_r(d[7])),o=_r(d[0])(_r(d[8])),f=_r(d[0])(_r(d[9])),c=_r(d[0])(_r(d[10])),s=["theme","linking","fallback","documentTitle","onReady"];g.REACT_NAVIGATION_DEVTOOLS=new WeakMap;var v=n.forwardRef((function(v,p){var S=v.theme,O=void 0===S?l.default:S,_=v.linking,h=v.fallback,b=void 0===h?null:h,P=v.documentTitle,j=v.onReady,k=(0,t.default)(v,s),y=!!_&&!1!==_.enabled;null!=_&&_.config&&(0,_r(d[11]).validatePathConfig)(_.config);var A=n.useRef(null);(0,u.default)(A),(0,o.default)(A,P);var F=(0,f.default)(A,Object.assign({independent:k.independent,enabled:y,prefixes:[]},_)).getInitialState;n.useEffect((function(){A.current&&REACT_NAVIGATION_DEVTOOLS.set(A.current,{get linking(){var e,t,n,r;return Object.assign({},_,{enabled:y,prefixes:null!=(e=null==_?void 0:_.prefixes)?e:[],getStateFromPath:null!=(t=null==_?void 0:_.getStateFromPath)?t:_r(d[11]).getStateFromPath,getPathFromState:null!=(n=null==_?void 0:_.getPathFromState)?n:_r(d[11]).getPathFromState,getActionFromState:null!=(r=null==_?void 0:_.getActionFromState)?r:_r(d[11]).getActionFromState})}})}));var T=(0,c.default)(F),E=(0,e.default)(T,2),M=E[0],R=E[1];n.useImperativeHandle(p,(function(){return A.current}));var w=n.useMemo((function(){return{options:_}}),[_]),x=null!=k.initialState||!y||M,I=n.useRef(j);return n.useEffect((function(){I.current=j})),n.useEffect((function(){x&&(null==I.current||I.current())}),[x]),x?(0,_r(d[12]).jsx)(r.default.Provider,{value:w,children:(0,_r(d[12]).jsx)(i.default,{value:O,children:(0,_r(d[12]).jsx)(_r(d[11]).BaseNavigationContainer,Object.assign({},k,{initialState:null==k.initialState?R:k.initialState,ref:A}))})}):b}));_e.default=v}),761,[8,26,119,153,685,762,763,765,766,767,770,687,193]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;e.default={dark:!1,colors:{primary:'rgb(0, 122, 255)',background:'rgb(242, 242, 242)',card:'rgb(255, 255, 255)',text:'rgb(28, 28, 30)',border:'rgb(216, 216, 216)',notification:'rgb(255, 59, 48)'}}}),762,[]); +__d((function(g,_r,_i,a,m,_e,d){Object.defineProperty(_e,"__esModule",{value:!0}),_e.default=function(t){var r=t.value,n=t.children;return(0,_r(d[3]).jsx)(e.default.Provider,{value:r,children:n})};!(function(e,t){if("function"==typeof WeakMap)var r=new WeakMap,n=new WeakMap;(function(e,t){if(!t&&e&&e.__esModule)return e;var f,o,u={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return u;if(f=t?n:r){if(f.has(e))return f.get(e);f.set(e,u)}for(var i in e)"default"!==i&&{}.hasOwnProperty.call(e,i)&&((o=(f=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,i))&&(o.get||o.set)?f(u,i,o):u[i]=e[i])})(e,t)})(_r(d[0]));var e=_r(d[1])(_r(d[2]))}),763,[153,8,764,193]); +__d((function(g,_r,_i,a,m,_e,d){Object.defineProperty(_e,"__esModule",{value:!0}),_e.default=void 0;var e=(function(e,t){if("function"==typeof WeakMap)var r=new WeakMap,n=new WeakMap;return(function(e,t){if(!t&&e&&e.__esModule)return e;var o,f,u={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return u;if(o=t?n:r){if(o.has(e))return o.get(e);o.set(e,u)}for(var i in e)"default"!==i&&{}.hasOwnProperty.call(e,i)&&((f=(o=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,i))&&(f.get||f.set)?o(u,i,f):u[i]=e[i]);return u})(e,t)})(_r(d[0])),t=_r(d[1])(_r(d[2]));var r=e.createContext(t.default);r.displayName='ThemeContext';_e.default=r}),764,[153,8,762]); +__d((function(g,_r,_i,a,m,_e,d){Object.defineProperty(_e,"__esModule",{value:!0}),_e.default=function(t){e.useEffect((function(){var e=r.BackHandler.addEventListener('hardwareBackPress',(function(){var e=t.current;return null!=e&&(!!e.canGoBack()&&(e.goBack(),!0))}));return function(){return e.remove()}}),[t])};var e=(function(e,r){if("function"==typeof WeakMap)var t=new WeakMap,n=new WeakMap;return(function(e,r){if(!r&&e&&e.__esModule)return e;var u,o,f={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return f;if(u=r?n:t){if(u.has(e))return u.get(e);u.set(e,f)}for(var c in e)"default"!==c&&{}.hasOwnProperty.call(e,c)&&((o=(u=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,c))&&(o.get||o.set)?u(f,c,o):f[c]=e[c]);return f})(e,r)})(_r(d[0])),r=_r(d[1])}),765,[153,6]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(){}}),766,[]); +__d((function(g,_r,_i,a,m,_e,d){Object.defineProperty(_e,"__esModule",{value:!0}),_e.default=function(r,i){var o=i.independent,u=i.enabled,c=void 0===u||u,f=i.prefixes,s=i.filter,l=i.config,v=i.getInitialURL,h=void 0===v?function(){return Promise.race([t.Linking.getInitialURL(),new Promise((function(e){return setTimeout(e,150)}))])}:v,p=i.subscribe,k=void 0===p?function(e){var n,r=function(t){var n=t.url;return e(n)},i=t.Linking.addEventListener('url',r),o=null==(n=t.Linking.removeEventListener)?void 0:n.bind(t.Linking);return function(){null!=i&&i.remove?i.remove():null==o||o('url',r)}}:p,y=i.getStateFromPath,R=void 0===y?_r(d[4]).getStateFromPath:y,b=i.getActionFromState,_=void 0===b?_r(d[4]).getActionFromState:b;e.useEffect((function(){}),[c,o]);var w=e.useRef(c),L=e.useRef(f),P=e.useRef(s),S=e.useRef(l),j=e.useRef(h),E=e.useRef(R),M=e.useRef(_);e.useEffect((function(){w.current=c,L.current=f,P.current=s,S.current=l,j.current=h,E.current=R,M.current=_}));var O=e.useCallback((function(e){if(e&&(!P.current||P.current(e))){var t=(0,n.default)(L.current,e);return void 0!==t?E.current(t,S.current):void 0}}),[]),F=e.useCallback((function(){var e;if(w.current){var t=j.current();if(null!=t&&'string'!=typeof t)return t.then((function(e){return O(e)}));e=O(t)}var n={then:function(t){return Promise.resolve(t?t(e):e)},catch:function(){return n}};return n}),[O]);return e.useEffect((function(){return k((function(e){if(c){var t=r.current,n=t?O(e):void 0;if(t&&n){var i=t.getRootState();if(n.routes.some((function(e){return!(null!=i&&i.routeNames.includes(e.name))})))return void console.warn("The navigation state parsed from the URL contains routes not present in the root navigator. This usually means that the linking configuration doesn't match the navigation structure. See https://reactnavigation.org/docs/configuring-links for more details on how to specify a linking configuration.");var o=M.current(n,S.current);if(void 0!==o)try{t.dispatch(o)}catch(t){console.warn(`An error occurred when trying to handle the link '${e}': ${'object'==typeof t&&null!=t&&'message'in t?t.message:t}`)}else t.resetRoot(n)}}}))}),[c,O,r,k]),{getInitialState:F}};var e=(function(e,t){if("function"==typeof WeakMap)var n=new WeakMap,r=new WeakMap;return(function(e,t){if(!t&&e&&e.__esModule)return e;var i,o,u={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return u;if(i=t?r:n){if(i.has(e))return i.get(e);i.set(e,u)}for(var c in e)"default"!==c&&{}.hasOwnProperty.call(e,c)&&((o=(i=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,c))&&(o.get||o.set)?i(u,c,o):u[c]=e[c]);return u})(e,t)})(_r(d[0])),t=_r(d[1]),n=_r(d[2])(_r(d[3]))}),767,[153,6,8,768,687]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(t,n){for(var u of t){var f,c,p=null!=(f=null==(c=u.match(/^[^:]+:/))?void 0:c[0])?f:'',o=u.replace(new RegExp(`^${(0,l.default)(p)}`),'').replace(/\/+/g,'/').replace(/^\//,''),v=new RegExp(`^${(0,l.default)(p)}(/)*${o.split('.').map((function(t){return'*'===t?'[^/]+':(0,l.default)(t)})).join('\\.')}`),_=n.replace(/\/+/g,'/');if(v.test(_))return _.replace(v,'')}return};var l=r(d[0])(r(d[1]))}),768,[8,769]); +__d((function(g,r,i,a,m,e,d){'use strict';m.exports=function(t){if('string'!=typeof t)throw new TypeError('Expected a string');return t.replace(/[|\\{}()[\]^$+*?.]/g,'\\$&').replace(/-/g,'\\x2d')}}),769,[]); +__d((function(g,_r,_i,a,m,_e,d){Object.defineProperty(_e,"__esModule",{value:!0}),_e.default=function(r){var u=n.useState(r),f=(0,t.default)(u,1)[0],o=[!1,void 0];f.then((function(e){o=[!0,e]}));var i=n.useState(o),l=(0,t.default)(i,2),c=l[0],p=l[1],s=(0,t.default)(c,1)[0];return n.useEffect((function(){var t,n=!1,r=(t=(0,e.default)((function*(){var e;try{e=yield f}finally{n||p([!0,e])}})),function(){return t.apply(this,arguments)});return s||r(),function(){n=!0}}),[f,s]),c};var e=_r(d[0])(_r(d[1])),t=_r(d[0])(_r(d[2])),n=(function(e,t){if("function"==typeof WeakMap)var n=new WeakMap,r=new WeakMap;return(function(e,t){if(!t&&e&&e.__esModule)return e;var u,f,o={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return o;if(u=t?r:n){if(u.has(e))return u.get(e);u.set(e,o)}for(var i in e)"default"!==i&&{}.hasOwnProperty.call(e,i)&&((f=(u=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,i))&&(f.get||f.set)?u(o,i,f):o[i]=e[i]);return o})(e,t)})(_r(d[3]))}),770,[8,313,26,153]); +__d((function(g,_r,_i,a,m,_e,d){Object.defineProperty(_e,"__esModule",{value:!0}),_e.default=void 0;var e=(function(e,r){if("function"==typeof WeakMap)var t=new WeakMap,n=new WeakMap;return(function(e,r){if(!r&&e&&e.__esModule)return e;var o,u,f={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return f;if(o=r?n:t){if(o.has(e))return o.get(e);o.set(e,f)}for(var i in e)"default"!==i&&{}.hasOwnProperty.call(e,i)&&((u=(o=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,i))&&(u.get||u.set)?o(f,i,u):f[i]=e[i]);return f})(e,r)})(_r(d[0])),r=_r(d[1])(_r(d[2]));_e.default=e.forwardRef((function(t,n){var o=t.children,u=t.location;e.useEffect((function(){console.error("'ServerContainer' should only be used on the server with 'react-dom/server' for SSR.")}),[]);var f={};if(n){var i={getCurrentOptions:function(){return f.options}};'function'==typeof n?n(i):n.current=i}return(0,_r(d[3]).jsx)(r.default.Provider,{value:{location:u},children:(0,_r(d[3]).jsx)(_r(d[4]).CurrentRenderContext.Provider,{value:f,children:o})})}))}),771,[153,8,772,193,687]); +__d((function(g,_r,_i,a,m,_e,d){Object.defineProperty(_e,"__esModule",{value:!0}),_e.default=void 0;var e=(function(e,t){if("function"==typeof WeakMap)var r=new WeakMap,n=new WeakMap;return(function(e,t){if(!t&&e&&e.__esModule)return e;var o,f,u={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return u;if(o=t?n:r){if(o.has(e))return o.get(e);o.set(e,u)}for(var i in e)"default"!==i&&{}.hasOwnProperty.call(e,i)&&((f=(o=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,i))&&(f.get||f.set)?o(u,i,f):u[i]=e[i]);return u})(e,t)})(_r(d[0])).createContext(void 0);_e.default=e}),772,[153]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;e.default={dark:!0,colors:{primary:'rgb(10, 132, 255)',background:'rgb(1, 1, 1)',card:'rgb(18, 18, 18)',text:'rgb(229, 229, 231)',border:'rgb(39, 39, 41)',notification:'rgb(255, 69, 58)'}}}),773,[]); +__d((function(g,_r,_i,a,m,_e,d){Object.defineProperty(_e,"__esModule",{value:!0}),_e.default=function(){return e.useContext(t.default)};var e=(function(e,t){if("function"==typeof WeakMap)var n=new WeakMap,r=new WeakMap;return(function(e,t){if(!t&&e&&e.__esModule)return e;var u,f,o={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return o;if(u=t?r:n){if(u.has(e))return u.get(e);u.set(e,o)}for(var i in e)"default"!==i&&{}.hasOwnProperty.call(e,i)&&((f=(u=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,i))&&(f.get||f.set)?u(o,i,f):o[i]=e[i]);return o})(e,t)})(_r(d[0])),t=_r(d[1])(_r(d[2]))}),774,[153,8,764]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0})}),775,[]); +__d((function(g,_r,_i,a,m,_e,d){Object.defineProperty(_e,"__esModule",{value:!0}),_e.default=function(){var r=e.useContext(_r(d[3]).NavigationHelpersContext),o=e.useContext(t.default);return e.useCallback((function(e,t){var u=o.options;if(!1!==(null==u?void 0:u.enabled)){var i=r?n(r,{index:0,routes:[{name:e,params:t}]}):{index:0,routes:[{name:e,params:t}]};return null!=u&&u.getPathFromState?u.getPathFromState(i,null==u?void 0:u.config):(0,_r(d[3]).getPathFromState)(i,null==u?void 0:u.config)}}),[o,r])};var e=(function(e,t){if("function"==typeof WeakMap)var n=new WeakMap,r=new WeakMap;return(function(e,t){if(!t&&e&&e.__esModule)return e;var o,u,i={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return i;if(o=t?r:n){if(o.has(e))return o.get(e);o.set(e,i)}for(var f in e)"default"!==f&&{}.hasOwnProperty.call(e,f)&&((u=(o=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,f))&&(u.get||u.set)?o(i,f,u):i[f]=e[f]);return i})(e,t)})(_r(d[0])),t=_r(d[1])(_r(d[2]));var n=function(e,t){var r=e.getParent();if(r){var o=r.getState();return n(r,{index:0,routes:[Object.assign({},o.routes[o.index],{state:t})]})}return t}}),776,[153,8,685,687]); +__d((function(g,_r,_i,a,m,_e,d){Object.defineProperty(_e,"__esModule",{value:!0}),_e.default=function(t){var n=(0,_r(d[1]).useNavigation)(),o=(0,_r(d[1]).useRoute)();e.useEffect((function(){for(var e=[],l=n;l;)'tab'===l.getState().type&&e.push(l),l=l.getParent();if(0!==e.length){var u=e.map((function(l){return l.addListener('tabPress',(function(l){var u=n.isFocused(),c=e.includes(n)||n.getState().routes[0].key===o.key;requestAnimationFrame((function(){var e=r(t);u&&c&&e&&!l.defaultPrevented&&('scrollToTop'in e?e.scrollToTop():'scrollTo'in e?e.scrollTo({y:0,animated:!0}):'scrollToOffset'in e?e.scrollToOffset({offset:0,animated:!0}):'scrollResponderScrollTo'in e&&e.scrollResponderScrollTo({y:0,animated:!0}))}))}))}));return function(){u.forEach((function(e){return e()}))}}}),[n,t,o.key])};var e=(function(e,r){if("function"==typeof WeakMap)var t=new WeakMap,n=new WeakMap;return(function(e,r){if(!r&&e&&e.__esModule)return e;var o,l,u={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return u;if(o=r?n:t){if(o.has(e))return o.get(e);o.set(e,u)}for(var c in e)"default"!==c&&{}.hasOwnProperty.call(e,c)&&((l=(o=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,c))&&(l.get||l.set)?o(u,c,l):u[c]=e[c]);return u})(e,r)})(_r(d[0]));function r(e){return null==e.current?null:'scrollToTop'in e.current||'scrollTo'in e.current||'scrollToOffset'in e.current||'scrollResponderScrollTo'in e.current?e.current:'getScrollResponder'in e.current?e.current.getScrollResponder():'getNode'in e.current?e.current.getNode():e.current}}),777,[153,687]); +__d((function(g,_r,_i,a,m,_e,d){Object.defineProperty(_e,"__esModule",{value:!0}),_e.AuthStack=void 0;var e=_r(d[0])(_r(d[1])),n=_r(d[0])(_r(d[2])),o=_r(d[0])(_r(d[3])),t=_r(d[0])(_r(d[4])),r=_r(d[0])(_r(d[5])),s=_r(d[0])(_r(d[6])),c=_r(d[0])(_r(d[7])),i=_r(d[0])(_r(d[8])),p=_r(d[0])(_r(d[9])),S=_r(d[0])(_r(d[10])),h=_r(d[0])(_r(d[11])),u=_r(d[0])(_r(d[12])),l=_r(d[0])(_r(d[13])),f=_r(d[0])(_r(d[14])),w=_r(d[0])(_r(d[15])),y=_r(d[0])(_r(d[16])),j=_r(d[0])(_r(d[17])),x=_r(d[0])(_r(d[18])),z=_r(d[0])(_r(d[19])),C=_r(d[0])(_r(d[20])),O=_r(d[0])(_r(d[21])),P=_r(d[0])(_r(d[22])),D=_r(d[0])(_r(d[23])),k=_r(d[0])(_r(d[24])),R=_r(d[0])(_r(d[25])),b=_r(d[0])(_r(d[26])),V=_r(d[0])(_r(d[27])),I=_r(d[0])(_r(d[28])),A=_r(d[0])(_r(d[29])),M=_r(d[0])(_r(d[30])),L=_r(d[0])(_r(d[31])),v=_r(d[0])(_r(d[32])),_=_r(d[0])(_r(d[33])),W=_r(d[0])(_r(d[34])),B=(_r(d[35]),_r(d[0])(_r(d[36])),(function(e,n){if("function"==typeof WeakMap)var o=new WeakMap,t=new WeakMap;return(function(e,n){if(!n&&e&&e.__esModule)return e;var r,s,c={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return c;if(r=n?t:o){if(r.has(e))return r.get(e);r.set(e,c)}for(var i in e)"default"!==i&&{}.hasOwnProperty.call(e,i)&&((s=(r=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,i))&&(s.get||s.set)?r(c,i,s):c[i]=e[i]);return c})(e,n)})(_r(d[37]))),T=_r(d[0])(_r(d[38])),F=_r(d[0])(_r(d[39])),N=_r(d[0])(_r(d[40])),Q=_r(d[0])(_r(d[41])),U=_r(d[0])(_r(d[42])),G=_r(d[0])(_r(d[43])),K=_r(d[0])(_r(d[44])),E=_r(d[0])(_r(d[45])),H=_r(d[0])(_r(d[46])),q=_r(d[0])(_r(d[47])),$=_r(d[0])(_r(d[48])),J=_r(d[0])(_r(d[49])),X=_r(d[0])(_r(d[50])),Y=_r(d[0])(_r(d[51])),Z=_r(d[0])(_r(d[52])),ee=_r(d[0])(_r(d[53])),ne=_r(d[0])(_r(d[54])),oe=_r(d[0])(_r(d[55])),te=_r(d[0])(_r(d[56]));var re=B.lazy((function(){return _r(d[58])(d[57],"../../screens/NoticeBoard",d.paths)})),ae=B.lazy((function(){return _r(d[58])(d[59],"../../screens/DynamicStoreList",d.paths)})),se=B.lazy((function(){return _r(d[58])(d[60],"../../screens/DynamicSurveys",d.paths)})),ce=B.lazy((function(){return _r(d[58])(d[61],"../../screens/DynamicSurveyCat",d.paths)})),ie=B.lazy((function(){return _r(d[58])(d[62],"../../screens/SurveyView",d.paths)})),pe=B.lazy((function(){return _r(d[58])(d[63],"../../screens/SurveyCat",d.paths)})),Se=B.lazy((function(){return _r(d[58])(d[64],"../../screens/QuestionsScreen",d.paths)})),he=B.lazy((function(){return _r(d[58])(d[65],"../../screens/Window",d.paths)})),me=B.lazy((function(){return _r(d[58])(d[66],"../../screens/Stock",d.paths)})),ue=B.lazy((function(){return _r(d[58])(d[67],"../../screens/ContactUs",d.paths)})),de=B.lazy((function(){return _r(d[58])(d[68],"../../screens/POSM",d.paths)})),le=B.lazy((function(){return _r(d[58])(d[69],"../../screens/Feedback",d.paths)})),fe=B.lazy((function(){return _r(d[58])(d[70],"../../screens/SimplePromotion",d.paths)})),we=B.lazy((function(){return _r(d[58])(d[71],"../../screens/StoreImages",d.paths)})),ye=B.lazy((function(){return _r(d[58])(d[72],"../../screens/StoreImagesCap",d.paths)})),je=B.lazy((function(){return _r(d[58])(d[73],"../../screens/CameraScreen",d.paths)})),xe=B.lazy((function(){return _r(d[58])(d[74],"../../screens/ShelfTalker",d.paths)})),ze=B.lazy((function(){return _r(d[58])(d[75],"../../screens/StockCat",d.paths)})),ge=B.lazy((function(){return _r(d[58])(d[76],"../../screens/StockWithCat",d.paths)})),Ce=B.lazy((function(){return _r(d[58])(d[77],"../../screens/StoreDailyMenuCat",d.paths)})),Oe=B.lazy((function(){return _r(d[58])(d[78],"../../screens/PromotionOneApp",d.paths)})),Pe=B.lazy((function(){return _r(d[58])(d[79],"../../screens/PaidVisibilityOneApp",d.paths)})),De=B.lazy((function(){return _r(d[58])(d[80],"../../screens/ShareOfShelfOneApp",d.paths)})),ke=B.lazy((function(){return _r(d[58])(d[81],"../../screens/CategoryExec",d.paths)})),Re=B.lazy((function(){return _r(d[58])(d[82],"../../screens/GetDb",d.paths)})),be=B.lazy((function(){return _r(d[58])(d[83],"../../screens/WarehousePOSM",d.paths)})),Ve=B.lazy((function(){return _r(d[58])(d[84],"../../screens/Warehouse",d.paths)})),Ie=B.lazy((function(){return _r(d[58])(d[85],"../../screens/StoreScore",d.paths)})),Ae=B.lazy((function(){return _r(d[58])(d[86],"../../screens/Order",d.paths)})),Me=B.lazy((function(){return _r(d[58])(d[87],"../../screens/VideoScreen",d.paths)})),Le=B.lazy((function(){return _r(d[58])(d[88],"../../screens/StoreChecklist",d.paths)})),ve=B.lazy((function(){return _r(d[58])(d[89],"../../screens/BeatPlan",d.paths)})),We=B.lazy((function(){return _r(d[58])(d[90],"../../screens/ReportDetail",d.paths)})),Be=B.lazy((function(){return _r(d[58])(d[91],"../../screens/DistributorList",d.paths)})),Te=B.lazy((function(){return _r(d[58])(d[92],"../../screens/CheckInDistributor",d.paths)})),Fe=B.lazy((function(){return _r(d[58])(d[93],"../../screens/AddStoreScreen",d.paths)})),Ne=B.lazy((function(){return _r(d[58])(d[94],"../../screens/StoreProfile",d.paths)})),Qe=B.lazy((function(){return _r(d[58])(d[95],"../../screens/DB_StoreDailyMenu",d.paths)})),Ue=B.lazy((function(){return _r(d[58])(d[96],"../../screens/DB_POSM",d.paths)})),Ge=B.lazy((function(){return _r(d[58])(d[97],"../../screens/DB_Window",d.paths)})),Ke=B.lazy((function(){return _r(d[58])(d[98],"../../screens/DBNonWorkingReasons",d.paths)})),Ee=B.lazy((function(){return _r(d[58])(d[99],"../../screens/OrderStatus",d.paths)})),He=B.lazy((function(){return _r(d[58])(d[100],"../../screens/OrderDetail",d.paths)})),qe=B.lazy((function(){return _r(d[58])(d[101],"../../screens/VisitorFeedback",d.paths)})),$e=B.lazy((function(){return _r(d[58])(d[102],"../../screens/VisitorFeedbackQA",d.paths)})),Je=B.lazy((function(){return _r(d[58])(d[103],"../../screens/WebViewScreen",d.paths)})),Xe=B.lazy((function(){return _r(d[58])(d[104],"../../screens/SamplingList",d.paths)})),Ye=B.lazy((function(){return _r(d[58])(d[105],"../../screens/SamplingView",d.paths)})),Ze=B.lazy((function(){return _r(d[58])(d[106],"../../screens/SamplingInventory",d.paths)})),en=B.lazy((function(){return _r(d[58])(d[107],"../../screens/Sampling_Stock",d.paths)})),nn=B.lazy((function(){return _r(d[58])(d[108],"../../screens/SamplingCustTrack",d.paths)})),on=B.lazy((function(){return _r(d[58])(d[109],"../../screens/KPICategories",d.paths)})),tn=B.lazy((function(){return _r(d[58])(d[110],"../../screens/Bannerdetail",d.paths)})),rn=B.lazy((function(){return _r(d[58])(d[111],"../../screens/WindowIR",d.paths)})),an=B.lazy((function(){return _r(d[58])(d[112],"../../screens/ShareOfShelfOneAppIR",d.paths)})),sn=B.lazy((function(){return _r(d[58])(d[113],"../../screens/PaidVisibilityOneAppIR",d.paths)})),cn=B.lazy((function(){return _r(d[58])(d[114],"../../screens/AdditionalVisibilityIR",d.paths)})),pn=B.lazy((function(){return _r(d[58])(d[115],"../../screens/CompetitionVisibilityIR",d.paths)})),Sn=B.lazy((function(){return _r(d[58])(d[116],"../../screens/IRPendingDetails",d.paths)})),hn=B.lazy((function(){return _r(d[58])(d[117],"../../screens/ProgramList",d.paths)})),mn=B.lazy((function(){return _r(d[58])(d[118],"../../screens/ProgramQuestions",d.paths)})),un=B.lazy((function(){return _r(d[58])(d[119],"../../components/QRScanner",d.paths)})),dn=B.lazy((function(){return _r(d[58])(d[120],"../../screens/ProgramChecklist",d.paths)})),ln=B.lazy((function(){return _r(d[58])(d[121],"../../screens/ContractFormStores",d.paths)})),fn=B.lazy((function(){return _r(d[58])(d[122],"../../screens/TGBaseVisiCooler",d.paths)})),wn=B.lazy((function(){return _r(d[58])(d[123],"../../screens/ContractPrograms",d.paths)})),yn=B.lazy((function(){return _r(d[58])(d[124],"../../screens/ContractForm",d.paths)})),jn=B.lazy((function(){return _r(d[58])(d[125],"../../screens/DynamicStoreScore",d.paths)})),xn=B.lazy((function(){return _r(d[58])(d[126],"../../screens/MissedCallList",d.paths)})),zn=B.lazy((function(){return _r(d[58])(d[127],"../../screens/MissedCallView",d.paths)})),gn=B.lazy((function(){return _r(d[58])(d[128],"../../screens/SOSEyeLevel",d.paths)})),Cn=B.lazy((function(){return _r(d[58])(d[129],"../../screens/BreakTime",d.paths)})),On=B.lazy((function(){return _r(d[58])(d[130],"../../screens/ReportChart",d.paths)})),Pn=B.lazy((function(){return _r(d[58])(d[131],"../../screens/AdditionalVisibilityIR_Only",d.paths)})),Dn=B.lazy((function(){return _r(d[58])(d[132],"../../screens/ShareOfShelfOneAppIR_Only",d.paths)})),kn=B.lazy((function(){return _r(d[58])(d[133],"../../screens/PaidVisibilityOneAppIR_Only",d.paths)})),Rn=B.lazy((function(){return _r(d[58])(d[134],"../../screens/VisitorLoginQA",d.paths)})),bn=B.lazy((function(){return _r(d[58])(d[135],"../../screens/DashboardReportDetail",d.paths)})),Vn=B.lazy((function(){return _r(d[58])(d[136],"../../screens/TrainingMenu",d.paths)})),In=B.lazy((function(){return _r(d[58])(d[137],"../../screens/StoreReport",d.paths)})),An=B.lazy((function(){return _r(d[58])(d[138],"../../screens/AddStoreInfo",d.paths)})),Mn=B.lazy((function(){return _r(d[58])(d[139],"../../screens/StoreInfoList",d.paths)})),Ln=B.lazy((function(){return _r(d[58])(d[140],"../../screens/PromotionOneAppIR",d.paths)})),vn=B.lazy((function(){return _r(d[58])(d[141],"../../screens/HomeLocation",d.paths)})),_n=B.lazy((function(){return _r(d[58])(d[142],"../../screens/PrevStoreReason",d.paths)})),Wn=B.lazy((function(){return _r(d[58])(d[143],"../../screens/ForgotpasswordScreen/Forgotpassword",d.paths)})),Bn=B.lazy((function(){return _r(d[58])(d[144],"../../screens/ForgotpasswordScreen/VerifyOTP",d.paths)})),Tn=B.lazy((function(){return _r(d[58])(d[145],"../../screens/ForgotpasswordScreen/Createpassword",d.paths)})),Fn=B.lazy((function(){return _r(d[58])(d[146],"../../screens/AddStore",d.paths)})),Nn=B.lazy((function(){return _r(d[58])(d[147],"../../screens/AddedStoreList",d.paths)})),Qn=B.lazy((function(){return _r(d[58])(d[148],"../../screens/MiscMenuList",d.paths)})),Un=(0,_r(d[149]).createStackNavigator)(),Gn=(0,_r(d[150]).createDrawerNavigator)();function Kn(e){var n=(0,_r(d[151]).useRoute)(),o=((0,_r(d[152]).GetPageTheme)(e.DarkMode,n.name),(0,_r(d[152]).customStyles)(e.DarkMode,n.name),(0,_r(d[152]).globalStyles)(e.DarkMode,n.name),e.route.params?e.route.params:{}),t=(o.UserData||{}).UserId||'',r=(o.set_startDownload,e.pageprops);return(0,_r(d[153]).jsx)(Gn.Navigator,{initialRouteName:"NoticeBoard",drawerContent:function(e){return(0,_r(d[153]).jsx)(_r(d[154]).DrawerContent,Object.assign({},e,{UserName:t,UserEmail:"",pageprops:r}))},screenOptions:{headerTintColor:_r(d[155]).PrimaryTheme.$primary_color,drawerType:'front'},children:(0,_r(d[153]).jsx)(Gn.Screen,{name:"Notice Board",component:re,options:{headerShown:!1}})})}_e.AuthStack=function(B){var re=B;return(0,_r(d[153]).jsxs)(Un.Navigator,{initialRouteName:'initialScreen',children:[(0,_r(d[153]).jsx)(Un.Screen,{name:'initialScreen',component:p.default,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'Project',component:e.default,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,Object.assign({},B,{name:'NoticeBoard',options:{headerShown:!1},children:function(e){return(0,_r(d[153]).jsx)(Kn,Object.assign({},e,{pageprops:re}))}})),(0,_r(d[153]).jsx)(Un.Screen,Object.assign({},B,{name:'One_QAD',component:r.default,options:{headerShown:!1}})),(0,_r(d[153]).jsx)(Un.Screen,{name:'DownloadDataScreen',component:s.default,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'UploadData',component:i.default,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'StoreList',component:l.default,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'AddStoreInfo',component:An,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'StoreInfoList',component:Mn,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'StoreCheckin',component:w.default,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'StoreDailyMenu',component:f.default,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'StoreDailyMenuCat',component:Ce,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'OpeningStock',component:C.default,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'BackroomStock',component:O.default,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'MiddayStock',component:P.default,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'ClosingStock',component:D.default,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'ShareOfShelf',component:k.default,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'PaidVisibility',component:R.default,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'AdditionalVisibility',component:b.default,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'CompetitionVisibility',component:V.default,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'Promotion',component:I.default,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'CompetitionPromotion',component:A.default,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'ContactConversion',component:M.default,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'Sale',component:L.default,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'SurveyList',component:v.default,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'SurveyCat',component:pe,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'SurveyView',component:ie,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'Window',component:he,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'Stock',component:me,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'POSM',component:de,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'Feedback',component:le,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'SimplePromotion',component:fe,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'StoreImages',component:we,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'ShelfTalker',component:xe,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'PromotionOneApp',component:Oe,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'PromotionOneAppIR',component:Ln,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'StockCat',component:ze,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'StockWithCat',component:ge,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'PaidVisibilityOneApp',component:Pe,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'ShareOfShelfOneApp',component:De,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'GetDb',component:Re,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'CategoryExec',component:ke,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'WarehousePOSM',component:be,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'WareHouseCampaignWise',component:N.default,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'Warehouse',component:Ve,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'WarehousePaidVi',component:Q.default,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'StoreScore',component:Ie,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'Order',component:Ae,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'VideoScreen',component:Me,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'StoreChecklist',component:Le,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'BeatPlan',component:ve,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'ReportDetail',component:We,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'DistributorList',component:Be,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'DistributorCheckIn',component:Te,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'AddStoreScreen',component:Fe,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'StoreProfile',component:Ne,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'StoreReport',component:In,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'DB_StoreDailyMenu',component:Qe,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'DB_POSM',component:Ue,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'DB_Window',component:Ge,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'DBNonWorkingReasons',component:Ke,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'OrderStatus',component:Ee,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'OrderDetail',component:He,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'KPICategories',component:on,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'POSSale',component:_.default,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'Bannerdetail',component:tn,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'WindowIR',component:rn,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'ShareOfShelfOneAppIR',component:an,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'PaidVisibilityOneAppIR',component:sn,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'AdditionalVisibilityIR',component:cn,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'CompetitionVisibilityIR',component:pn,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'IRPendingDetails',component:Sn,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'ChangePassword',component:T.default,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'ReportsMenu',component:c.default,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'Settings',component:z.default,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'VisitorLogin',component:S.default,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'PersonalDocument',component:h.default,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'Training',component:u.default,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'StoreImagesCap',component:ye,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'CameraScreen',component:je,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'GeoTag',component:y.default,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'StoreNonWorkingReasons',component:x.default,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'ShowMap',component:j.default,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'Login',component:n.default,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'ForgotPassword',component:Wn,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'VerifyOTP',component:Bn,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'CreatePassword',component:Tn,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'Mpin',component:o.default,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'MpinLogin',component:t.default,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'ContactUs',component:ue,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'DynamicStoreList',component:ae,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'DynamicSurveys',component:se,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'DynamicSurveyCat',component:ce,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'QuestionsScreen',component:Se,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'VisitorFeedback',component:qe,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'VisitorFeedbackQA',component:$e,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'VisitorLoginQA',component:Rn,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'WebViewScreen',component:Je,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'SamplingList',component:Xe,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'SamplingView',component:Ye,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'SamplingInventory',component:Ze,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'SamplingCustTrack',component:nn,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'SamplingStock',component:en,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'ProgramList',component:hn,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'ProgramQuestions',component:mn,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'QRScanner',component:un,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'ProgramChecklist',component:dn,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'ContractFormStores',component:ln,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'ContractPrograms',component:wn,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'ContractForm',component:yn,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'AdditionalVisibilityIR_Only',component:Pn,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'ShareOfShelfOneAppIR_Only',component:Dn,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'PaidVisibilityOneAppIR_Only',component:kn,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'TGBaseVisiCooler',component:fn,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'DynamicStoreScore',component:jn,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'MissedCallList',component:xn,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'MissedCallView',component:zn,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'SOSEyeLevel',component:gn,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'BreakTime',component:Cn,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'ReportChart',component:On,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'DashboardReportDetail',component:bn,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'TrainingMenu',component:Vn,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'HomeLocation',component:vn,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'PrevStoreReason',component:_n,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'WareHouseInward',component:U.default,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'StockPromo',component:F.default,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'WareHouseInwardDetail',component:G.default,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'DBVisiCooler',component:W.default,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'NotificationList',component:K.default,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'NotificationListDetail',component:E.default,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'AddStore',component:Fn,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'AddedStoreList',component:Nn,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'StockUniqueQRCode',component:H.default,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'SaleQRCode',component:q.default,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'StoreProfileKyc',component:$.default,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'KycStoreList',component:J.default,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'KycForm',component:X.default,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'StoreKycForm',component:Y.default,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'Gyancasts',component:Z.default,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'PodcastDetails',component:ee.default,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'QuestionnaireScreen',component:ne.default,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'ChatScreen',component:oe.default,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'OfflineOrder',component:te.default,options:{headerShown:!1}}),(0,_r(d[153]).jsx)(Un.Screen,{name:'MiscMenuList',component:Qn,options:{headerShown:!1}})]})}}),778,[8,779,1168,1171,1216,1267,1268,1270,1272,1273,1274,1325,1326,1343,1346,1347,1371,1373,1374,1375,1376,1380,1381,1382,1383,1384,1385,1581,1582,1583,1584,1585,1586,1587,1636,6,846,153,1637,1638,1642,1643,1644,1645,1646,1654,1655,1656,1657,1658,1659,1660,1661,1662,1696,1697,1957,1959,1978,1979,1981,1983,1984,2009,2010,2011,2012,2014,2015,2016,2017,2018,2019,2020,2021,2022,2023,2024,2025,2026,2027,2028,2029,2030,2031,2032,2033,2034,2058,2059,2060,2061,2062,2063,2064,2065,2066,2067,2068,2069,2070,2072,2073,2074,2075,2076,2078,2079,2080,2081,2082,2083,2084,2085,2086,2087,2088,2089,2090,2091,2092,2093,2094,2095,2096,2097,2098,2099,2100,2101,2102,2124,2125,2126,2127,2128,2129,2131,2132,2133,2134,2135,2136,2137,2138,2139,2140,2141,2142,2143,2210,682,679,193,2233,680]); +__d((function(g,_r,_i,a,m,_e,d){Object.defineProperty(_e,"__esModule",{value:!0}),_e.default=void 0;var r=_r(d[0])(_r(d[1])),n=_r(d[0])(_r(d[2])),t=(function(r,n){if("function"==typeof WeakMap)var t=new WeakMap,o=new WeakMap;return(function(r,n){if(!n&&r&&r.__esModule)return r;var e,p,u={__proto__:null,default:r};if(null===r||"object"!=typeof r&&"function"!=typeof r)return u;if(e=n?o:t){if(e.has(r))return e.get(r);e.set(r,u)}for(var G in r)"default"!==G&&{}.hasOwnProperty.call(r,G)&&((p=(e=Object.defineProperty)&&Object.getOwnPropertyDescriptor(r,G))&&(p.get||p.set)?e(u,G,p):u[G]=r[G]);return u})(r,n)})(_r(d[3])),o=_r(d[0])(_r(d[4])),e=_r(d[0])(_r(d[5])),p=(_r(d[0])(_r(d[6])),_r(d[0])(_r(d[7]))),u=_r(d[8]),G=(_r(d[0])(_r(d[9])),_r(d[0])(_r(d[10])),_r(d[0])(_r(d[11])));_r(d[0])(_r(d[12]));_e.default=(0,_r(d[24]).connect)(_r(d[25]).mapStateToProps,_r(d[25]).mapDispatchToProps)((function(i){var l=(0,_r(d[13]).useRoute)(),s=(0,_r(d[14]).GetPageTheme)(i.DarkMode,l.name),_=(0,_r(d[14]).customStyles)(i.DarkMode,l.name),f=((0,_r(d[14]).globalStyles)(i.DarkMode,l.name),(0,t.useState)(!1)),h=(0,n.default)(f,2),c=h[0],P=h[1],M=(0,t.useRef)(new u.Animated.Value(0)).current,Z=(0,t.useState)({projectid:''}),v=(0,n.default)(Z,2),b=v[0],x=v[1];(0,t.useEffect)((function(){o.default.hide(),(0,_r(d[15]).requestMultiplePerms)();var r=u.Keyboard.addListener('keyboardDidShow',(function(){u.Animated.timing(M,{toValue:1,duration:400,useNativeDriver:'ios'!=u.Platform.OS}).start()})),n=u.Keyboard.addListener('keyboardDidHide',(function(){u.Animated.timing(M,{toValue:0,duration:400,useNativeDriver:'ios'!=u.Platform.OS}).start()}));return function(){n.remove(),r.remove()}}),[]);var y,j,S,A,w,R=(y=(0,r.default)((function*(){var r=b.projectid;''!=r&&null!=r?(P(!0),yield(0,_r(d[16]).getProjectData)(r).then((function(n){if(console.log(n),P(!1),n.success&&null!=n.projectName){var t=(0,_r(d[16]).getProjectInfo)(n,r);i.set_project(t),(0,_r(d[17]).set_item)('firsttime','done'),(0,_r(d[17]).set_item)('projectCode',r),(0,_r(d[17]).set_item)('projectInfo',JSON.stringify(n)),i.navigation.navigate('Login')}else null==n.projectName&&(0,_r(d[18]).notify)('Project not found, ensure if you have entered correct project Id','SHORT')})).catch((function(r){P(!1),console.log('onPage Project error',r)}))):(0,_r(d[18]).notify)('Please enter Project Id','SHORT')})),function(){return y.apply(this,arguments)});return(0,_r(d[19]).jsxs)(e.default,Object.assign({},i,{avoidSafeArea:!0,children:[c&&(0,_r(d[19]).jsx)(G.default,{}),(0,_r(d[19]).jsxs)(u.View,{style:[_.projectPageWrapper],children:[(j=1,S=1,A=0,w=0,null!=M&&(j=M.interpolate({inputRange:[0,1],outputRange:[1,.7]}),S=M.interpolate({inputRange:[0,1],outputRange:[1,.5]}),A=M.interpolate({inputRange:[0,1],outputRange:[0,-150]}),w=M.interpolate({inputRange:[0,1],outputRange:[0,-120]})),(0,_r(d[19]).jsxs)(u.ScrollView,{style:[_.projectScrollCon],contentContainerStyle:_.projectCon,children:[(0,_r(d[19]).jsx)(u.Animated.Image,{style:[_.performics_logo,{transform:[{scale:j}]}],source:_r(d[20])}),(0,_r(d[19]).jsx)(u.Animated.View,{style:[{transform:[{scale:S},{translateY:A}]}],children:(0,_r(d[19]).jsx)(_r(d[21]).SvgXml,{style:[_.loginIllutration,_.mt50],width:250,height:250,xml:"\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n PROJECT ID\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Next\r\n \r\n \r\n \r\n Project Id\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n"})}),(0,_r(d[19]).jsxs)(u.Animated.View,{style:[_.formCon,_.mb10,{transform:[{translateY:w}]}],children:[(0,_r(d[19]).jsx)(u.Text,{style:[_.pagedescText],children:"Hey There"}),(0,_r(d[19]).jsx)(u.Text,{style:_.pageText,children:"Enter your Project Id"}),(0,_r(d[19]).jsxs)(u.View,{style:[_.formGroup,_.mt20],children:[(0,_r(d[19]).jsx)(u.TextInput,{style:[_.inputStyle,_.pl40],placeholder:"Project Id",autoComplete:"off",placeholderTextColor:s.$placeholder_color,value:b.projectid,onChangeText:function(r){return x({projectid:r})},onSubmitEditing:function(r){R()}}),(0,_r(d[19]).jsx)(_r(d[22]).Ionicons,{style:_.formInputLeftIcon,size:16,name:"briefcase-outline",color:s.$placeholder_color})]})]})]})),(0,_r(d[19]).jsxs)(u.View,{style:[_.footerView],children:[(0,_r(d[19]).jsx)(p.default,Object.assign({},i,{title:'Next',onPress:R})),(0,_r(d[19]).jsxs)(u.View,{style:[_.signatureBox,_.mt20],children:[(0,_r(d[19]).jsx)(u.Text,{style:_.signatureText,children:_r(d[23]).version}),(0,_r(d[19]).jsx)(u.Text,{style:_.signatureText,children:_r(d[23]).copyrightText})]})]})]})]}))}))}),779,[8,313,26,153,669,780,844,845,6,802,783,851,846,682,679,852,784,842,840,193,863,864,1098,801,1135,1167]); +__d((function(g,_r,_i,a,m,_e,d){Object.defineProperty(_e,"__esModule",{value:!0}),_e.default=void 0;var e=_r(d[0])(_r(d[1])),t=(function(e,t){if("function"==typeof WeakMap)var n=new WeakMap,r=new WeakMap;return(function(e,t){if(!t&&e&&e.__esModule)return e;var o,i,c={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return c;if(o=t?r:n){if(o.has(e))return o.get(e);o.set(e,c)}for(var l in e)"default"!==l&&{}.hasOwnProperty.call(e,l)&&((i=(o=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,l))&&(i.get||i.set)?o(c,l,i):c[l]=e[l]);return c})(e,t)})(_r(d[2])),n=_r(d[3]),r=_r(d[0])(_r(d[4])),o=_r(d[0])(_r(d[5])),i=_r(d[0])(_r(d[6]));_e.default=function(c){var l=(0,_r(d[7]).useRoute)(),u=(0,_r(d[8]).globalStyles)(c.DarkMode,l.name),f=null!=c.pt?{paddingTop:c.pt}:{},s=new Date,p=(0,i.default)(s).format('MM/DD/YYYY');t.useEffect((function(){(0,_r(d[9]).isDeviceTimeValid)()}),[]);var v;v=(0,e.default)((function*(){_r(d[10]).db.transaction((function(t){t.executeSql("select * from ServerTime",[],(function(t,r){var i,c=r.rows.item(0);console.log('check to show DT alert',l.name,p!=c.ServerDate),p!=c.ServerDate&&"MpinLogin"!=l.name&&"PrevStoreReason"!=l.name&&"initialScreen"!=l.name&&"Project"!=l.name&&"Login"!=l.name&&"Mpin"!=l.name&&"One_QAD"!=l.name&&"Notice Board"!=l.name&&"NoticeBoard"!=l.name&&(console.log('show DT alert',l.name),n.Alert.alert("","Your Device Date and Time is not correct. Please correct and restart App.",[{text:"OK",onPress:(i=(0,e.default)((function*(){o.default.exitApp()})),function(){return i.apply(this,arguments)})}]))}),(function(e,t){console.log(t)}))}))}));return(0,_r(d[11]).jsxs)(n.SafeAreaView,{style:[u.container,f],children:[c.children,(0,_r(d[11]).jsx)(r.default,Object.assign({},c))]})}}),780,[8,313,153,6,781,782,783,682,679,784,801,193]); +__d((function(g,_r,_i,a,m,_e,d){Object.defineProperty(_e,"__esModule",{value:!0}),_e.default=void 0;var e=(function(e,n){if("function"==typeof WeakMap)var t=new WeakMap,r=new WeakMap;return(function(e,n){if(!n&&e&&e.__esModule)return e;var o,i,l={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return l;if(o=n?r:t){if(o.has(e))return o.get(e);o.set(e,l)}for(var u in e)"default"!==u&&{}.hasOwnProperty.call(e,u)&&((i=(o=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,u))&&(i.get||i.set)?o(l,u,i):l[u]=e[u]);return l})(e,n)})(_r(d[0])),n=_r(d[1]);_e.default=function(t){var r=(0,_r(d[2]).useRoute)(),o=((0,_r(d[3]).GetPageTheme)(t.DarkTheme,r.name),(0,_r(d[3]).globalStyles)(t.DarkMode,r.name),(0,_r(d[3]).customStyles)(t.DarkMode,r.name)),i=(0,e.useRef)(new n.Animated.Value(0)).current;function l(){console.log('show con change:',t.showConnChange,t.isInternetAvailable),1==t.showConnChange&&u()}function u(){n.Animated.timing(i,{toValue:1,duration:500,useNativeDriver:'ios'!=n.Platform.OS}).start(),1==t.isInternetAvailable&&(setTimeout((function(){console.log('hidebar'),n.Animated.timing(i,{toValue:0,duration:500,useNativeDriver:'ios'!=n.Platform.OS}).start()}),2500),t.show_ConnChange({showConnChange:!1}))}(0,e.useEffect)((function(){}),[]),(0,e.useEffect)((function(){l()}),[t.isInternetAvailable]);var s=i.interpolate({inputRange:[0,1],outputRange:[50,0]});return(0,_r(d[4]).jsx)(n.Animated.View,{style:[o.netSBar,1==t.isInternetAvailable?o.netSBarGreen:o.netSBarGrey,{transform:[{translateY:s}]}],children:(0,_r(d[4]).jsx)(n.Text,{style:[o.netSBarText,1==t.isInternetAvailable?o.netSBarGreen_Text:o.netSBarGrey_Text],children:1==t.isInternetAvailable?'Back Online':'No Connection! You are offline'})})}}),781,[153,6,682,679,193]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var t=r(d[0]),p={exitApp:function(){t.NativeModules.RNExitApp.exitApp()}};e.default=p}),782,[6]); +__d((function(e,t,n,s,i,r,a){!(function(e,t){'object'==typeof r&&void 0!==i?i.exports=t():'function'==typeof define&&define.amd?define(t):e.moment=t()})(this,(function(){'use strict';var e,n;function s(){return e.apply(null,arguments)}function r(e){return e instanceof Array||'[object Array]'===Object.prototype.toString.call(e)}function a(e){return null!=e&&'[object Object]'===Object.prototype.toString.call(e)}function o(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function u(e){if(Object.getOwnPropertyNames)return 0===Object.getOwnPropertyNames(e).length;var t;for(t in e)if(o(e,t))return!1;return!0}function l(e){return void 0===e}function h(e){return'number'==typeof e||'[object Number]'===Object.prototype.toString.call(e)}function d(e){return e instanceof Date||'[object Date]'===Object.prototype.toString.call(e)}function c(e,t){var n,s=[],i=e.length;for(n=0;n>>0;for(t=0;t0)for(n=0;n=0?n?'+':'':'-')+Math.pow(10,Math.max(0,i)).toString().substr(1)+s}var R=/(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,W=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,C={},H={};function U(e,t,n,s){var i=s;'string'==typeof s&&(i=function(){return this[s]()}),e&&(H[e]=i),t&&(H[t[0]]=function(){return P(i.apply(this,arguments),t[1],t[2])}),n&&(H[n]=function(){return this.localeData().ordinal(i.apply(this,arguments),e)})}function F(e){var t,n,s,i=e.match(R);for(t=0,n=i.length;t=0&&W.test(e);)e=e.replace(W,s),W.lastIndex=0,n-=1;return e}var G={};function E(e,t){var n=e.toLowerCase();G[n]=G[n+'s']=G[t]=e}function A(e){return'string'==typeof e?G[e]||G[e.toLowerCase()]:void 0}function j(e){var t,n,s={};for(n in e)o(e,n)&&(t=A(n))&&(s[t]=e[n]);return s}var I={};function Z(e,t){I[e]=t}function z(e){var t,n=[];for(t in e)o(e,t)&&n.push({unit:t,priority:I[t]});return n.sort((function(e,t){return e.priority-t.priority})),n}function $(e){return e%4==0&&e%100!=0||e%400==0}function q(e){return e<0?Math.ceil(e)||0:Math.floor(e)}function B(e){var t=+e,n=0;return 0!==t&&isFinite(t)&&(n=q(t)),n}function J(e,t){return function(n){return null!=n?(X(this,e,n),s.updateOffset(this,t),this):Q(this,e)}}function Q(e,t){return e.isValid()?e._d['get'+(e._isUTC?'UTC':'')+t]():NaN}function X(e,t,n){e.isValid()&&!isNaN(n)&&('FullYear'===t&&$(e.year())&&1===e.month()&&29===e.date()?(n=B(n),e._d['set'+(e._isUTC?'UTC':'')+t](n,e.month(),We(n,e.month()))):e._d['set'+(e._isUTC?'UTC':'')+t](n))}var K,ee=/\d/,te=/\d\d/,ne=/\d{3}/,se=/\d{4}/,ie=/[+-]?\d{6}/,re=/\d\d?/,ae=/\d\d\d\d?/,oe=/\d\d\d\d\d\d?/,ue=/\d{1,3}/,le=/\d{1,4}/,he=/[+-]?\d{1,6}/,de=/\d+/,ce=/[+-]?\d+/,fe=/Z|[+-]\d\d:?\d\d/gi,me=/Z|[+-]\d\d(?::?\d\d)?/gi,_e=/[0-9]{0,256}['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFF07\uFF10-\uFFEF]{1,256}|[\u0600-\u06FF\/]{1,256}(\s*?[\u0600-\u06FF]{1,256}){1,2}/i;function ye(e,t,n){K[e]=x(t)?t:function(e,s){return e&&n?n:t}}function ge(e,t){return o(K,e)?K[e](t._strict,t._locale):new RegExp(we(e.replace('\\','').replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,(function(e,t,n,s,i){return t||n||s||i}))))}function we(e){return e.replace(/[-\/\\^$*+?.()|[\]{}]/g,'\\$&')}K={};var pe={};function ve(e,t){var n,s,i=t;for('string'==typeof e&&(e=[e]),h(t)&&(i=function(e,n){n[t]=B(e)}),s=e.length,n=0;n68?1900:2e3)};var Ie=J('FullYear',!0);function Ze(e,t,n,s,i,r,a){var o;return e<100&&e>=0?(o=new Date(e+400,t,n,s,i,r,a),isFinite(o.getFullYear())&&o.setFullYear(e)):o=new Date(e,t,n,s,i,r,a),o}function ze(e){var t,n;return e<100&&e>=0?((n=Array.prototype.slice.call(arguments))[0]=e+400,t=new Date(Date.UTC.apply(null,n)),isFinite(t.getUTCFullYear())&&t.setUTCFullYear(e)):t=new Date(Date.UTC.apply(null,arguments)),t}function $e(e,t,n){var s=7+t-n;return-((7+ze(e,0,s).getUTCDay()-t)%7)+s-1}function qe(e,t,n,s,i){var r,a,o=1+7*(t-1)+(7+n-s)%7+$e(e,s,i);return o<=0?a=je(r=e-1)+o:o>je(e)?(r=e+1,a=o-je(e)):(r=e,a=o),{year:r,dayOfYear:a}}function Be(e,t,n){var s,i,r=$e(e.year(),t,n),a=Math.floor((e.dayOfYear()-r-1)/7)+1;return a<1?s=a+Je(i=e.year()-1,t,n):a>Je(e.year(),t,n)?(s=a-Je(e.year(),t,n),i=e.year()+1):(i=e.year(),s=a),{week:s,year:i}}function Je(e,t,n){var s=$e(e,t,n),i=$e(e+1,t,n);return(je(e)-s+i)/7}U('w',['ww',2],'wo','week'),U('W',['WW',2],'Wo','isoWeek'),E('week','w'),E('isoWeek','W'),Z('week',5),Z('isoWeek',5),ye('w',re),ye('ww',re,te),ye('W',re),ye('WW',re,te),ke(['w','ww','W','WW'],(function(e,t,n,s){t[s.substr(0,1)]=B(e)}));function Qe(e,t){return'string'!=typeof e?e:isNaN(e)?'number'==typeof(e=t.weekdaysParse(e))?e:null:parseInt(e,10)}function Xe(e,t){return'string'==typeof e?t.weekdaysParse(e)%7||7:isNaN(e)?null:e}function Ke(e,t){return e.slice(t,7).concat(e.slice(0,t))}U('d',0,'do','day'),U('dd',0,0,(function(e){return this.localeData().weekdaysMin(this,e)})),U('ddd',0,0,(function(e){return this.localeData().weekdaysShort(this,e)})),U('dddd',0,0,(function(e){return this.localeData().weekdays(this,e)})),U('e',0,0,'weekday'),U('E',0,0,'isoWeekday'),E('day','d'),E('weekday','e'),E('isoWeekday','E'),Z('day',11),Z('weekday',11),Z('isoWeekday',11),ye('d',re),ye('e',re),ye('E',re),ye('dd',(function(e,t){return t.weekdaysMinRegex(e)})),ye('ddd',(function(e,t){return t.weekdaysShortRegex(e)})),ye('dddd',(function(e,t){return t.weekdaysRegex(e)})),ke(['dd','ddd','dddd'],(function(e,t,n,s){var i=n._locale.weekdaysParse(e,s,n._strict);null!=i?t.d=i:_(n).invalidWeekday=e})),ke(['d','e','E'],(function(e,t,n,s){t[s]=B(e)}));var et='Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),tt='Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),nt='Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),st=_e,it=_e,rt=_e;function at(e,t,n){var s,i,r,a=e.toLocaleLowerCase();if(!this._weekdaysParse)for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],s=0;s<7;++s)r=m([2e3,1]).day(s),this._minWeekdaysParse[s]=this.weekdaysMin(r,'').toLocaleLowerCase(),this._shortWeekdaysParse[s]=this.weekdaysShort(r,'').toLocaleLowerCase(),this._weekdaysParse[s]=this.weekdays(r,'').toLocaleLowerCase();return n?'dddd'===t?-1!==(i=De.call(this._weekdaysParse,a))?i:null:'ddd'===t?-1!==(i=De.call(this._shortWeekdaysParse,a))?i:null:-1!==(i=De.call(this._minWeekdaysParse,a))?i:null:'dddd'===t?-1!==(i=De.call(this._weekdaysParse,a))||-1!==(i=De.call(this._shortWeekdaysParse,a))||-1!==(i=De.call(this._minWeekdaysParse,a))?i:null:'ddd'===t?-1!==(i=De.call(this._shortWeekdaysParse,a))||-1!==(i=De.call(this._weekdaysParse,a))||-1!==(i=De.call(this._minWeekdaysParse,a))?i:null:-1!==(i=De.call(this._minWeekdaysParse,a))||-1!==(i=De.call(this._weekdaysParse,a))||-1!==(i=De.call(this._shortWeekdaysParse,a))?i:null}function ot(){function e(e,t){return t.length-e.length}var t,n,s,i,r,a=[],o=[],u=[],l=[];for(t=0;t<7;t++)n=m([2e3,1]).day(t),s=we(this.weekdaysMin(n,'')),i=we(this.weekdaysShort(n,'')),r=we(this.weekdays(n,'')),a.push(s),o.push(i),u.push(r),l.push(s),l.push(i),l.push(r);a.sort(e),o.sort(e),u.sort(e),l.sort(e),this._weekdaysRegex=new RegExp('^('+l.join('|')+')','i'),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp('^('+u.join('|')+')','i'),this._weekdaysShortStrictRegex=new RegExp('^('+o.join('|')+')','i'),this._weekdaysMinStrictRegex=new RegExp('^('+a.join('|')+')','i')}function ut(){return this.hours()%12||12}function lt(e,t){U(e,0,0,(function(){return this.localeData().meridiem(this.hours(),this.minutes(),t)}))}function ht(e,t){return t._meridiemParse}U('H',['HH',2],0,'hour'),U('h',['hh',2],0,ut),U('k',['kk',2],0,(function(){return this.hours()||24})),U('hmm',0,0,(function(){return''+ut.apply(this)+P(this.minutes(),2)})),U('hmmss',0,0,(function(){return''+ut.apply(this)+P(this.minutes(),2)+P(this.seconds(),2)})),U('Hmm',0,0,(function(){return''+this.hours()+P(this.minutes(),2)})),U('Hmmss',0,0,(function(){return''+this.hours()+P(this.minutes(),2)+P(this.seconds(),2)})),lt('a',!0),lt('A',!1),E('hour','h'),Z('hour',13),ye('a',ht),ye('A',ht),ye('H',re),ye('h',re),ye('k',re),ye('HH',re,te),ye('hh',re,te),ye('kk',re,te),ye('hmm',ae),ye('hmmss',oe),ye('Hmm',ae),ye('Hmmss',oe),ve(['H','HH'],be),ve(['k','kk'],(function(e,t,n){var s=B(e);t[be]=24===s?0:s})),ve(['a','A'],(function(e,t,n){n._isPm=n._locale.isPM(e),n._meridiem=e})),ve(['h','hh'],(function(e,t,n){t[be]=B(e),_(n).bigHour=!0})),ve('hmm',(function(e,t,n){var s=e.length-2;t[be]=B(e.substr(0,s)),t[xe]=B(e.substr(s)),_(n).bigHour=!0})),ve('hmmss',(function(e,t,n){var s=e.length-4,i=e.length-2;t[be]=B(e.substr(0,s)),t[xe]=B(e.substr(s,2)),t[Te]=B(e.substr(i)),_(n).bigHour=!0})),ve('Hmm',(function(e,t,n){var s=e.length-2;t[be]=B(e.substr(0,s)),t[xe]=B(e.substr(s))})),ve('Hmmss',(function(e,t,n){var s=e.length-4,i=e.length-2;t[be]=B(e.substr(0,s)),t[xe]=B(e.substr(s,2)),t[Te]=B(e.substr(i))}));var dt=J('Hours',!0);var ct,ft={calendar:{sameDay:'[Today at] LT',nextDay:'[Tomorrow at] LT',nextWeek:'dddd [at] LT',lastDay:'[Yesterday at] LT',lastWeek:'[Last] dddd [at] LT',sameElse:'L'},longDateFormat:{LTS:'h:mm:ss A',LT:'h:mm A',L:'MM/DD/YYYY',LL:'MMMM D, YYYY',LLL:'MMMM D, YYYY h:mm A',LLLL:'dddd, MMMM D, YYYY h:mm A'},invalidDate:'Invalid date',ordinal:'%d',dayOfMonthOrdinalParse:/\d{1,2}/,relativeTime:{future:'in %s',past:'%s ago',s:'a few seconds',ss:'%d seconds',m:'a minute',mm:'%d minutes',h:'an hour',hh:'%d hours',d:'a day',dd:'%d days',w:'a week',ww:'%d weeks',M:'a month',MM:'%d months',y:'a year',yy:'%d years'},months:Ce,monthsShort:He,week:{dow:0,doy:6},weekdays:et,weekdaysMin:nt,weekdaysShort:tt,meridiemParse:/[ap]\.?m?\.?/i},mt={},_t={};function yt(e,t){var n,s=Math.min(e.length,t.length);for(n=0;n0;){if(s=vt(i.slice(0,t).join('-')))return s;if(n&&n.length>=t&&yt(i,n)>=t-1)break;t--}r++}return ct}function pt(e){return null!=e.match('^[^/\\\\]*$')}function vt(e){var n=null;if(void 0===mt[e]&&void 0!==i&&i&&i.exports&&pt(e))try{n=ct._abbr,t('./locale/'+e),kt(n)}catch(t){mt[e]=null}return mt[e]}function kt(e,t){var n;return e&&((n=l(t)?Dt(e):Mt(e,t))?ct=n:'undefined'!=typeof console&&console.warn&&console.warn('Locale '+e+' not found. Did you forget to load it?')),ct._abbr}function Mt(e,t){if(null!==t){var n,s=ft;if(t.abbr=e,null!=mt[e])b('defineLocaleOverride',"use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info."),s=mt[e]._config;else if(null!=t.parentLocale)if(null!=mt[t.parentLocale])s=mt[t.parentLocale]._config;else{if(null==(n=vt(t.parentLocale)))return _t[t.parentLocale]||(_t[t.parentLocale]=[]),_t[t.parentLocale].push({name:e,config:t}),null;s=n._config}return mt[e]=new N(T(s,t)),_t[e]&&_t[e].forEach((function(e){Mt(e.name,e.config)})),kt(e),mt[e]}return delete mt[e],null}function Dt(e){var t;if(e&&e._locale&&e._locale._abbr&&(e=e._locale._abbr),!e)return ct;if(!r(e)){if(t=vt(e))return t;e=[e]}return wt(e)}function St(e){var t,n=e._a;return n&&-2===_(e).overflow&&(t=n[Ye]<0||n[Ye]>11?Ye:n[Oe]<1||n[Oe]>We(n[Se],n[Ye])?Oe:n[be]<0||n[be]>24||24===n[be]&&(0!==n[xe]||0!==n[Te]||0!==n[Ne])?be:n[xe]<0||n[xe]>59?xe:n[Te]<0||n[Te]>59?Te:n[Ne]<0||n[Ne]>999?Ne:-1,_(e)._overflowDayOfYear&&(tOe)&&(t=Oe),_(e)._overflowWeeks&&-1===t&&(t=Pe),_(e)._overflowWeekday&&-1===t&&(t=Re),_(e).overflow=t),e}var Yt=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,Ot=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d|))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,bt=/Z|[+-]\d\d(?::?\d\d)?/,xt=[['YYYYYY-MM-DD',/[+-]\d{6}-\d\d-\d\d/],['YYYY-MM-DD',/\d{4}-\d\d-\d\d/],['GGGG-[W]WW-E',/\d{4}-W\d\d-\d/],['GGGG-[W]WW',/\d{4}-W\d\d/,!1],['YYYY-DDD',/\d{4}-\d{3}/],['YYYY-MM',/\d{4}-\d\d/,!1],['YYYYYYMMDD',/[+-]\d{10}/],['YYYYMMDD',/\d{8}/],['GGGG[W]WWE',/\d{4}W\d{3}/],['GGGG[W]WW',/\d{4}W\d{2}/,!1],['YYYYDDD',/\d{7}/],['YYYYMM',/\d{6}/,!1],['YYYY',/\d{4}/,!1]],Tt=[['HH:mm:ss.SSSS',/\d\d:\d\d:\d\d\.\d+/],['HH:mm:ss,SSSS',/\d\d:\d\d:\d\d,\d+/],['HH:mm:ss',/\d\d:\d\d:\d\d/],['HH:mm',/\d\d:\d\d/],['HHmmss.SSSS',/\d\d\d\d\d\d\.\d+/],['HHmmss,SSSS',/\d\d\d\d\d\d,\d+/],['HHmmss',/\d\d\d\d\d\d/],['HHmm',/\d\d\d\d/],['HH',/\d\d/]],Nt=/^\/?Date\((-?\d+)/i,Pt=/^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\d{4}))$/,Rt={UT:0,GMT:0,EDT:-240,EST:-300,CDT:-300,CST:-360,MDT:-360,MST:-420,PDT:-420,PST:-480};function Wt(e){var t,n,s,i,r,a,o=e._i,u=Yt.exec(o)||Ot.exec(o),l=xt.length,h=Tt.length;if(u){for(_(e).iso=!0,t=0,n=l;tje(r)||0===e._dayOfYear)&&(_(e)._overflowDayOfYear=!0),n=ze(r,0,e._dayOfYear),e._a[Ye]=n.getUTCMonth(),e._a[Oe]=n.getUTCDate()),t=0;t<3&&null==e._a[t];++t)e._a[t]=a[t]=s[t];for(;t<7;t++)e._a[t]=a[t]=null==e._a[t]?2===t?1:0:e._a[t];24===e._a[be]&&0===e._a[xe]&&0===e._a[Te]&&0===e._a[Ne]&&(e._nextDay=!0,e._a[be]=0),e._d=(e._useUTC?ze:Ze).apply(null,a),i=e._useUTC?e._d.getUTCDay():e._d.getDay(),null!=e._tzm&&e._d.setUTCMinutes(e._d.getUTCMinutes()-e._tzm),e._nextDay&&(e._a[be]=24),e._w&&void 0!==e._w.d&&e._w.d!==i&&(_(e).weekdayMismatch=!0)}}function At(e){var t,n,s,i,r,a,o,u,l;null!=(t=e._w).GG||null!=t.W||null!=t.E?(r=1,a=4,n=Vt(t.GG,e._a[Se],Be(Jt(),1,4).year),s=Vt(t.W,1),((i=Vt(t.E,1))<1||i>7)&&(u=!0)):(r=e._locale._week.dow,a=e._locale._week.doy,l=Be(Jt(),r,a),n=Vt(t.gg,e._a[Se],l.year),s=Vt(t.w,l.week),null!=t.d?((i=t.d)<0||i>6)&&(u=!0):null!=t.e?(i=t.e+r,(t.e<0||t.e>6)&&(u=!0)):i=r),s<1||s>Je(n,r,a)?_(e)._overflowWeeks=!0:null!=u?_(e)._overflowWeekday=!0:(o=qe(n,s,i,r,a),e._a[Se]=o.year,e._dayOfYear=o.dayOfYear)}function jt(e){if(e._f!==s.ISO_8601)if(e._f!==s.RFC_2822){e._a=[],_(e).empty=!0;var t,n,i,r,a,o,u,l=''+e._i,h=l.length,d=0;for(u=(i=V(e._f,e._locale).match(R)||[]).length,t=0;t0&&_(e).unusedInput.push(a),l=l.slice(l.indexOf(n)+n.length),d+=n.length),H[r]?(n?_(e).empty=!1:_(e).unusedTokens.push(r),Me(r,n,e)):e._strict&&!n&&_(e).unusedTokens.push(r);_(e).charsLeftOver=h-d,l.length>0&&_(e).unusedInput.push(l),e._a[be]<=12&&!0===_(e).bigHour&&e._a[be]>0&&(_(e).bigHour=void 0),_(e).parsedDateParts=e._a.slice(0),_(e).meridiem=e._meridiem,e._a[be]=It(e._locale,e._a[be],e._meridiem),null!==(o=_(e).era)&&(e._a[Se]=e._locale.erasConvertYear(o,e._a[Se])),Et(e),St(e)}else Ft(e);else Wt(e)}function It(e,t,n){var s;return null==n?t:null!=e.meridiemHour?e.meridiemHour(t,n):null!=e.isPM?((s=e.isPM(n))&&t<12&&(t+=12),s||12!==t||(t=0),t):t}function Zt(e){var t,n,s,i,r,a,o=!1,u=e._f.length;if(0===u)return _(e).invalidFormat=!0,void(e._d=new Date(NaN));for(i=0;ithis?this:e:g()}));function Kt(e,t){var n,s;if(1===t.length&&r(t[0])&&(t=t[0]),!t.length)return Jt();for(n=t[0],s=1;s=0?new Date(e+400,t,n)-Cn:new Date(e,t,n).valueOf()}function Fn(e,t,n){return e<100&&e>=0?Date.UTC(e+400,t,n)-Cn:Date.UTC(e,t,n)}function Ln(e,t){return t.erasAbbrRegex(e)}function Vn(){var e,t,n=[],s=[],i=[],r=[],a=this.eras();for(e=0,t=a.length;e(r=Je(e,s,i))&&(t=r),An.call(this,e,t,n,s,i))}function An(e,t,n,s,i){var r=qe(e,t,n,s,i),a=ze(r.year,0,r.dayOfYear);return this.year(a.getUTCFullYear()),this.month(a.getUTCMonth()),this.date(a.getUTCDate()),this}U('N',0,0,'eraAbbr'),U('NN',0,0,'eraAbbr'),U('NNN',0,0,'eraAbbr'),U('NNNN',0,0,'eraName'),U('NNNNN',0,0,'eraNarrow'),U('y',['y',1],'yo','eraYear'),U('y',['yy',2],0,'eraYear'),U('y',['yyy',3],0,'eraYear'),U('y',['yyyy',4],0,'eraYear'),ye('N',Ln),ye('NN',Ln),ye('NNN',Ln),ye('NNNN',(function(e,t){return t.erasNameRegex(e)})),ye('NNNNN',(function(e,t){return t.erasNarrowRegex(e)})),ve(['N','NN','NNN','NNNN','NNNNN'],(function(e,t,n,s){var i=n._locale.erasParse(e,s,n._strict);i?_(n).era=i:_(n).invalidEra=e})),ye('y',de),ye('yy',de),ye('yyy',de),ye('yyyy',de),ye('yo',(function(e,t){return t._eraYearOrdinalRegex||de})),ve(['y','yy','yyy','yyyy'],Se),ve(['yo'],(function(e,t,n,s){var i;n._locale._eraYearOrdinalRegex&&(i=e.match(n._locale._eraYearOrdinalRegex)),n._locale.eraYearOrdinalParse?t[Se]=n._locale.eraYearOrdinalParse(e,i):t[Se]=parseInt(e,10)})),U(0,['gg',2],0,(function(){return this.weekYear()%100})),U(0,['GG',2],0,(function(){return this.isoWeekYear()%100})),Gn('gggg','weekYear'),Gn('ggggg','weekYear'),Gn('GGGG','isoWeekYear'),Gn('GGGGG','isoWeekYear'),E('weekYear','gg'),E('isoWeekYear','GG'),Z('weekYear',1),Z('isoWeekYear',1),ye('G',ce),ye('g',ce),ye('GG',re,te),ye('gg',re,te),ye('GGGG',le,se),ye('gggg',le,se),ye('GGGGG',he,ie),ye('ggggg',he,ie),ke(['gggg','ggggg','GGGG','GGGGG'],(function(e,t,n,s){t[s.substr(0,2)]=B(e)})),ke(['gg','GG'],(function(e,t,n,i){t[i]=s.parseTwoDigitYear(e)})),U('Q',0,'Qo','quarter'),E('quarter','Q'),Z('quarter',7),ye('Q',ee),ve('Q',(function(e,t){t[Ye]=3*(B(e)-1)})),U('D',['DD',2],'Do','date'),E('date','D'),Z('date',9),ye('D',re),ye('DD',re,te),ye('Do',(function(e,t){return e?t._dayOfMonthOrdinalParse||t._ordinalParse:t._dayOfMonthOrdinalParseLenient})),ve(['D','DD'],Oe),ve('Do',(function(e,t){t[Oe]=B(e.match(re)[0])}));var jn=J('Date',!0);U('DDD',['DDDD',3],'DDDo','dayOfYear'),E('dayOfYear','DDD'),Z('dayOfYear',4),ye('DDD',ue),ye('DDDD',ne),ve(['DDD','DDDD'],(function(e,t,n){n._dayOfYear=B(e)})),U('m',['mm',2],0,'minute'),E('minute','m'),Z('minute',14),ye('m',re),ye('mm',re,te),ve(['m','mm'],xe);var In=J('Minutes',!1);U('s',['ss',2],0,'second'),E('second','s'),Z('second',15),ye('s',re),ye('ss',re,te),ve(['s','ss'],Te);var Zn,zn,$n=J('Seconds',!1);for(U('S',0,0,(function(){return~~(this.millisecond()/100)})),U(0,['SS',2],0,(function(){return~~(this.millisecond()/10)})),U(0,['SSS',3],0,'millisecond'),U(0,['SSSS',4],0,(function(){return 10*this.millisecond()})),U(0,['SSSSS',5],0,(function(){return 100*this.millisecond()})),U(0,['SSSSSS',6],0,(function(){return 1e3*this.millisecond()})),U(0,['SSSSSSS',7],0,(function(){return 1e4*this.millisecond()})),U(0,['SSSSSSSS',8],0,(function(){return 1e5*this.millisecond()})),U(0,['SSSSSSSSS',9],0,(function(){return 1e6*this.millisecond()})),E('millisecond','ms'),Z('millisecond',16),ye('S',ue,ee),ye('SS',ue,te),ye('SSS',ue,ne),Zn='SSSS';Zn.length<=9;Zn+='S')ye(Zn,de);function qn(e,t){t[Ne]=B(1e3*('0.'+e))}for(Zn='S';Zn.length<=9;Zn+='S')ve(Zn,qn);zn=J('Milliseconds',!1),U('z',0,0,'zoneAbbr'),U('zz',0,0,'zoneName');var Bn=k.prototype;function Jn(e){return e}Bn.add=kn,Bn.calendar=function(e,t){var n;1===arguments.length&&(arguments[0]?M(n=arguments[0])||d(n)||Dn(n)||h(n)||Yn(n)||Sn(n)||null==n?(e=arguments[0],t=void 0):On(arguments[0])&&(t=arguments[0],e=void 0):(e=void 0,t=void 0));var i=e||Jt(),r=hn(i,this).startOf('day'),a=s.calendarFormat(this,r)||'sameElse',o=t&&(x(t[a])?t[a].call(this,i):t[a]);return this.format(o||this.localeData().calendar(a,this,Jt(i)))},Bn.clone=function(){return new k(this)},Bn.diff=function(e,t,n){var s,i,r;if(!this.isValid())return NaN;if(!(s=hn(e,this)).isValid())return NaN;switch(i=6e4*(s.utcOffset()-this.utcOffset()),t=A(t)){case'year':r=bn(this,s)/12;break;case'month':r=bn(this,s);break;case'quarter':r=bn(this,s)/3;break;case'second':r=(this-s)/1e3;break;case'minute':r=(this-s)/6e4;break;case'hour':r=(this-s)/36e5;break;case'day':r=(this-s-i)/864e5;break;case'week':r=(this-s-i)/6048e5;break;default:r=this-s}return n?r:q(r)},Bn.endOf=function(e){var t,n;if(void 0===(e=A(e))||'millisecond'===e||!this.isValid())return this;switch(n=this._isUTC?Fn:Un,e){case'year':t=n(this.year()+1,0,1)-1;break;case'quarter':t=n(this.year(),this.month()-this.month()%3+3,1)-1;break;case'month':t=n(this.year(),this.month()+1,1)-1;break;case'week':t=n(this.year(),this.month(),this.date()-this.weekday()+7)-1;break;case'isoWeek':t=n(this.year(),this.month(),this.date()-(this.isoWeekday()-1)+7)-1;break;case'day':case'date':t=n(this.year(),this.month(),this.date()+1)-1;break;case'hour':t=this._d.valueOf(),t+=Wn-Hn(t+(this._isUTC?0:this.utcOffset()*Rn),Wn)-1;break;case'minute':t=this._d.valueOf(),t+=Rn-Hn(t,Rn)-1;break;case'second':t=this._d.valueOf(),t+=Pn-Hn(t,Pn)-1}return this._d.setTime(t),s.updateOffset(this,!0),this},Bn.format=function(e){e||(e=this.isUtc()?s.defaultFormatUtc:s.defaultFormat);var t=L(this,e);return this.localeData().postformat(t)},Bn.from=function(e,t){return this.isValid()&&(M(e)&&e.isValid()||Jt(e).isValid())?_n({to:this,from:e}).locale(this.locale()).humanize(!t):this.localeData().invalidDate()},Bn.fromNow=function(e){return this.from(Jt(),e)},Bn.to=function(e,t){return this.isValid()&&(M(e)&&e.isValid()||Jt(e).isValid())?_n({from:this,to:e}).locale(this.locale()).humanize(!t):this.localeData().invalidDate()},Bn.toNow=function(e){return this.to(Jt(),e)},Bn.get=function(e){return x(this[e=A(e)])?this[e]():this},Bn.invalidAt=function(){return _(this).overflow},Bn.isAfter=function(e,t){var n=M(e)?e:Jt(e);return!(!this.isValid()||!n.isValid())&&('millisecond'===(t=A(t)||'millisecond')?this.valueOf()>n.valueOf():n.valueOf()9999?L(n,t?'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]':'YYYYYY-MM-DD[T]HH:mm:ss.SSSZ'):x(Date.prototype.toISOString)?t?this.toDate().toISOString():new Date(this.valueOf()+60*this.utcOffset()*1e3).toISOString().replace('Z',L(n,'Z')):L(n,t?'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]':'YYYY-MM-DD[T]HH:mm:ss.SSSZ')},Bn.inspect=function(){if(!this.isValid())return'moment.invalid(/* '+this._i+' */)';var e,t,n,s='moment',i='';return this.isLocal()||(s=0===this.utcOffset()?'moment.utc':'moment.parseZone',i='Z'),e='['+s+'("]',t=0<=this.year()&&this.year()<=9999?'YYYY':'YYYYYY','-MM-DD[T]HH:mm:ss.SSS',n=i+'[")]',this.format(e+t+"-MM-DD[T]HH:mm:ss.SSS"+n)},'undefined'!=typeof Symbol&&null!=Symbol.for&&(Bn[Symbol.for('nodejs.util.inspect.custom')]=function(){return'Moment<'+this.format()+'>'}),Bn.toJSON=function(){return this.isValid()?this.toISOString():null},Bn.toString=function(){return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ')},Bn.unix=function(){return Math.floor(this.valueOf()/1e3)},Bn.valueOf=function(){return this._d.valueOf()-6e4*(this._offset||0)},Bn.creationData=function(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}},Bn.eraName=function(){var e,t,n,s=this.localeData().eras();for(e=0,t=s.length;ethis.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()},Bn.isLocal=function(){return!!this.isValid()&&!this._isUTC},Bn.isUtcOffset=function(){return!!this.isValid()&&this._isUTC},Bn.isUtc=cn,Bn.isUTC=cn,Bn.zoneAbbr=function(){return this._isUTC?'UTC':''},Bn.zoneName=function(){return this._isUTC?'Coordinated Universal Time':''},Bn.dates=S('dates accessor is deprecated. Use date instead.',jn),Bn.months=S('months accessor is deprecated. Use month instead',Ee),Bn.years=S('years accessor is deprecated. Use year instead',Ie),Bn.zone=S('moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/',(function(e,t){return null!=e?('string'!=typeof e&&(e=-e),this.utcOffset(e,t),this):-this.utcOffset()})),Bn.isDSTShifted=S('isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information',(function(){if(!l(this._isDSTShifted))return this._isDSTShifted;var e,t={};return v(t,this),(t=$t(t))._a?(e=t._isUTC?m(t._a):Jt(t._a),this._isDSTShifted=this.isValid()&&an(t._a,e.toArray())>0):this._isDSTShifted=!1,this._isDSTShifted}));var Qn=N.prototype;function Xn(e,t,n,s){var i=Dt(),r=m().set(s,t);return i[n](r,e)}function Kn(e,t,n){if(h(e)&&(t=e,e=void 0),e=e||'',null!=t)return Xn(e,t,n,'month');var s,i=[];for(s=0;s<12;s++)i[s]=Xn(e,s,n,'month');return i}function es(e,t,n,s){'boolean'==typeof e?(h(t)&&(n=t,t=void 0),t=t||''):(n=t=e,e=!1,h(t)&&(n=t,t=void 0),t=t||'');var i,r=Dt(),a=e?r._week.dow:0,o=[];if(null!=n)return Xn(t,(n+a)%7,s,'day');for(i=0;i<7;i++)o[i]=Xn(t,(i+a)%7,s,'day');return o}Qn.calendar=function(e,t,n){var s=this._calendar[e]||this._calendar.sameElse;return x(s)?s.call(t,n):s},Qn.longDateFormat=function(e){var t=this._longDateFormat[e],n=this._longDateFormat[e.toUpperCase()];return t||!n?t:(this._longDateFormat[e]=n.match(R).map((function(e){return'MMMM'===e||'MM'===e||'DD'===e||'dddd'===e?e.slice(1):e})).join(''),this._longDateFormat[e])},Qn.invalidDate=function(){return this._invalidDate},Qn.ordinal=function(e){return this._ordinal.replace('%d',e)},Qn.preparse=Jn,Qn.postformat=Jn,Qn.relativeTime=function(e,t,n,s){var i=this._relativeTime[n];return x(i)?i(e,t,n,s):i.replace(/%d/i,e)},Qn.pastFuture=function(e,t){var n=this._relativeTime[e>0?'future':'past'];return x(n)?n(t):n.replace(/%s/i,t)},Qn.set=function(e){var t,n;for(n in e)o(e,n)&&(x(t=e[n])?this[n]=t:this['_'+n]=t);this._config=e,this._dayOfMonthOrdinalParseLenient=new RegExp((this._dayOfMonthOrdinalParse.source||this._ordinalParse.source)+'|'+/\d{1,2}/.source)},Qn.eras=function(e,t){var n,i,r,a=this._eras||Dt('en')._eras;for(n=0,i=a.length;n=0)return u[s]},Qn.erasConvertYear=function(e,t){var n=e.since<=e.until?1:-1;return void 0===t?s(e.since).year():s(e.since).year()+(t-e.offset)*n},Qn.erasAbbrRegex=function(e){return o(this,'_erasAbbrRegex')||Vn.call(this),e?this._erasAbbrRegex:this._erasRegex},Qn.erasNameRegex=function(e){return o(this,'_erasNameRegex')||Vn.call(this),e?this._erasNameRegex:this._erasRegex},Qn.erasNarrowRegex=function(e){return o(this,'_erasNarrowRegex')||Vn.call(this),e?this._erasNarrowRegex:this._erasRegex},Qn.months=function(e,t){return e?r(this._months)?this._months[e.month()]:this._months[(this._months.isFormat||Ue).test(t)?'format':'standalone'][e.month()]:r(this._months)?this._months:this._months.standalone},Qn.monthsShort=function(e,t){return e?r(this._monthsShort)?this._monthsShort[e.month()]:this._monthsShort[Ue.test(t)?'format':'standalone'][e.month()]:r(this._monthsShort)?this._monthsShort:this._monthsShort.standalone},Qn.monthsParse=function(e,t,n){var s,i,r;if(this._monthsParseExact)return Ve.call(this,e,t,n);for(this._monthsParse||(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[]),s=0;s<12;s++){if(i=m([2e3,s]),n&&!this._longMonthsParse[s]&&(this._longMonthsParse[s]=new RegExp('^'+this.months(i,'').replace('.','')+'$','i'),this._shortMonthsParse[s]=new RegExp('^'+this.monthsShort(i,'').replace('.','')+'$','i')),n||this._monthsParse[s]||(r='^'+this.months(i,'')+'|^'+this.monthsShort(i,''),this._monthsParse[s]=new RegExp(r.replace('.',''),'i')),n&&'MMMM'===t&&this._longMonthsParse[s].test(e))return s;if(n&&'MMM'===t&&this._shortMonthsParse[s].test(e))return s;if(!n&&this._monthsParse[s].test(e))return s}},Qn.monthsRegex=function(e){return this._monthsParseExact?(o(this,'_monthsRegex')||Ae.call(this),e?this._monthsStrictRegex:this._monthsRegex):(o(this,'_monthsRegex')||(this._monthsRegex=Le),this._monthsStrictRegex&&e?this._monthsStrictRegex:this._monthsRegex)},Qn.monthsShortRegex=function(e){return this._monthsParseExact?(o(this,'_monthsRegex')||Ae.call(this),e?this._monthsShortStrictRegex:this._monthsShortRegex):(o(this,'_monthsShortRegex')||(this._monthsShortRegex=Fe),this._monthsShortStrictRegex&&e?this._monthsShortStrictRegex:this._monthsShortRegex)},Qn.week=function(e){return Be(e,this._week.dow,this._week.doy).week},Qn.firstDayOfYear=function(){return this._week.doy},Qn.firstDayOfWeek=function(){return this._week.dow},Qn.weekdays=function(e,t){var n=r(this._weekdays)?this._weekdays:this._weekdays[e&&!0!==e&&this._weekdays.isFormat.test(t)?'format':'standalone'];return!0===e?Ke(n,this._week.dow):e?n[e.day()]:n},Qn.weekdaysMin=function(e){return!0===e?Ke(this._weekdaysMin,this._week.dow):e?this._weekdaysMin[e.day()]:this._weekdaysMin},Qn.weekdaysShort=function(e){return!0===e?Ke(this._weekdaysShort,this._week.dow):e?this._weekdaysShort[e.day()]:this._weekdaysShort},Qn.weekdaysParse=function(e,t,n){var s,i,r;if(this._weekdaysParseExact)return at.call(this,e,t,n);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),s=0;s<7;s++){if(i=m([2e3,1]).day(s),n&&!this._fullWeekdaysParse[s]&&(this._fullWeekdaysParse[s]=new RegExp('^'+this.weekdays(i,'').replace('.','\\.?')+'$','i'),this._shortWeekdaysParse[s]=new RegExp('^'+this.weekdaysShort(i,'').replace('.','\\.?')+'$','i'),this._minWeekdaysParse[s]=new RegExp('^'+this.weekdaysMin(i,'').replace('.','\\.?')+'$','i')),this._weekdaysParse[s]||(r='^'+this.weekdays(i,'')+'|^'+this.weekdaysShort(i,'')+'|^'+this.weekdaysMin(i,''),this._weekdaysParse[s]=new RegExp(r.replace('.',''),'i')),n&&'dddd'===t&&this._fullWeekdaysParse[s].test(e))return s;if(n&&'ddd'===t&&this._shortWeekdaysParse[s].test(e))return s;if(n&&'dd'===t&&this._minWeekdaysParse[s].test(e))return s;if(!n&&this._weekdaysParse[s].test(e))return s}},Qn.weekdaysRegex=function(e){return this._weekdaysParseExact?(o(this,'_weekdaysRegex')||ot.call(this),e?this._weekdaysStrictRegex:this._weekdaysRegex):(o(this,'_weekdaysRegex')||(this._weekdaysRegex=st),this._weekdaysStrictRegex&&e?this._weekdaysStrictRegex:this._weekdaysRegex)},Qn.weekdaysShortRegex=function(e){return this._weekdaysParseExact?(o(this,'_weekdaysRegex')||ot.call(this),e?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):(o(this,'_weekdaysShortRegex')||(this._weekdaysShortRegex=it),this._weekdaysShortStrictRegex&&e?this._weekdaysShortStrictRegex:this._weekdaysShortRegex)},Qn.weekdaysMinRegex=function(e){return this._weekdaysParseExact?(o(this,'_weekdaysRegex')||ot.call(this),e?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):(o(this,'_weekdaysMinRegex')||(this._weekdaysMinRegex=rt),this._weekdaysMinStrictRegex&&e?this._weekdaysMinStrictRegex:this._weekdaysMinRegex)},Qn.isPM=function(e){return'p'===(e+'').toLowerCase().charAt(0)},Qn.meridiem=function(e,t,n){return e>11?n?'pm':'PM':n?'am':'AM'},kt('en',{eras:[{since:'0001-01-01',until:1/0,offset:1,name:'Anno Domini',narrow:'AD',abbr:'AD'},{since:'0000-12-31',until:-1/0,offset:1,name:'Before Christ',narrow:'BC',abbr:'BC'}],dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(e){var t=e%10;return e+(1===B(e%100/10)?'th':1===t?'st':2===t?'nd':3===t?'rd':'th')}}),s.lang=S('moment.lang is deprecated. Use moment.locale instead.',kt),s.langData=S('moment.langData is deprecated. Use moment.localeData instead.',Dt);var ts=Math.abs;function ns(e,t,n,s){var i=_n(t,n);return e._milliseconds+=s*i._milliseconds,e._days+=s*i._days,e._months+=s*i._months,e._bubble()}function ss(e){return e<0?Math.floor(e):Math.ceil(e)}function is(e){return 4800*e/146097}function rs(e){return 146097*e/4800}function as(e){return function(){return this.as(e)}}var os=as('ms'),us=as('s'),ls=as('m'),hs=as('h'),ds=as('d'),cs=as('w'),fs=as('M'),ms=as('Q'),_s=as('y');function ys(e){return function(){return this.isValid()?this._data[e]:NaN}}var gs=ys('milliseconds'),ws=ys('seconds'),ps=ys('minutes'),vs=ys('hours'),ks=ys('days'),Ms=ys('months'),Ds=ys('years');var Ss=Math.round,Ys={ss:44,s:45,m:45,h:22,d:26,w:null,M:11};function Os(e,t,n,s,i){return i.relativeTime(t||1,!!n,e,s)}function bs(e,t,n,s){var i=_n(e).abs(),r=Ss(i.as('s')),a=Ss(i.as('m')),o=Ss(i.as('h')),u=Ss(i.as('d')),l=Ss(i.as('M')),h=Ss(i.as('w')),d=Ss(i.as('y')),c=r<=n.ss&&['s',r]||r0,c[4]=s,Os.apply(null,c)}var xs=Math.abs;function Ts(e){return(e>0)-(e<0)||+e}function Ns(){if(!this.isValid())return this.localeData().invalidDate();var e,t,n,s,i,r,a,o,u=xs(this._milliseconds)/1e3,l=xs(this._days),h=xs(this._months),d=this.asSeconds();return d?(e=q(u/60),t=q(e/60),u%=60,e%=60,n=q(h/12),h%=12,s=u?u.toFixed(3).replace(/\.?0+$/,''):'',i=d<0?'-':'',r=Ts(this._months)!==Ts(d)?'-':'',a=Ts(this._days)!==Ts(d)?'-':'',o=Ts(this._milliseconds)!==Ts(d)?'-':'',i+'P'+(n?r+n+'Y':'')+(h?r+h+'M':'')+(l?a+l+'D':'')+(t||e||u?'T':'')+(t?o+t+'H':'')+(e?o+e+'M':'')+(u?o+s+'S':'')):'P0D'}var Ps=nn.prototype;return Ps.isValid=function(){return this._isValid},Ps.abs=function(){var e=this._data;return this._milliseconds=ts(this._milliseconds),this._days=ts(this._days),this._months=ts(this._months),e.milliseconds=ts(e.milliseconds),e.seconds=ts(e.seconds),e.minutes=ts(e.minutes),e.hours=ts(e.hours),e.months=ts(e.months),e.years=ts(e.years),this},Ps.add=function(e,t){return ns(this,e,t,1)},Ps.subtract=function(e,t){return ns(this,e,t,-1)},Ps.as=function(e){if(!this.isValid())return NaN;var t,n,s=this._milliseconds;if('month'===(e=A(e))||'quarter'===e||'year'===e)switch(t=this._days+s/864e5,n=this._months+is(t),e){case'month':return n;case'quarter':return n/3;case'year':return n/12}else switch(t=this._days+Math.round(rs(this._months)),e){case'week':return t/7+s/6048e5;case'day':return t+s/864e5;case'hour':return 24*t+s/36e5;case'minute':return 1440*t+s/6e4;case'second':return 86400*t+s/1e3;case'millisecond':return Math.floor(864e5*t)+s;default:throw new Error('Unknown unit '+e)}},Ps.asMilliseconds=os,Ps.asSeconds=us,Ps.asMinutes=ls,Ps.asHours=hs,Ps.asDays=ds,Ps.asWeeks=cs,Ps.asMonths=fs,Ps.asQuarters=ms,Ps.asYears=_s,Ps.valueOf=function(){return this.isValid()?this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*B(this._months/12):NaN},Ps._bubble=function(){var e,t,n,s,i,r=this._milliseconds,a=this._days,o=this._months,u=this._data;return r>=0&&a>=0&&o>=0||r<=0&&a<=0&&o<=0||(r+=864e5*ss(rs(o)+a),a=0,o=0),u.milliseconds=r%1e3,e=q(r/1e3),u.seconds=e%60,t=q(e/60),u.minutes=t%60,n=q(t/60),u.hours=n%24,a+=q(n/24),o+=i=q(is(a)),a-=ss(rs(i)),s=q(o/12),o%=12,u.days=a,u.months=o,u.years=s,this},Ps.clone=function(){return _n(this)},Ps.get=function(e){return e=A(e),this.isValid()?this[e+'s']():NaN},Ps.milliseconds=gs,Ps.seconds=ws,Ps.minutes=ps,Ps.hours=vs,Ps.days=ks,Ps.weeks=function(){return q(this.days()/7)},Ps.months=Ms,Ps.years=Ds,Ps.humanize=function(e,t){if(!this.isValid())return this.localeData().invalidDate();var n,s,i=!1,r=Ys;return'object'==typeof e&&(t=e,e=!1),'boolean'==typeof e&&(i=e),'object'==typeof t&&(r=Object.assign({},Ys,t),null!=t.s&&null==t.ss&&(r.ss=t.s-1)),s=bs(this,!i,r,n=this.localeData()),i&&(s=n.pastFuture(+this,s)),n.postformat(s)},Ps.toISOString=Ns,Ps.toString=Ns,Ps.toJSON=Ns,Ps.locale=xn,Ps.localeData=Nn,Ps.toIsoString=S('toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)',Ns),Ps.lang=Tn,U('X',0,0,'unix'),U('x',0,0,'valueOf'),ye('x',ce),ye('X',/[+-]?\d+(\.\d{1,3})?/),ve('X',(function(e,t,n){n._d=new Date(1e3*parseFloat(e))})),ve('x',(function(e,t,n){n._d=new Date(B(e))})),s.version='2.29.4',e=Jt,s.fn=Bn,s.min=function(){return Kt('isBefore',[].slice.call(arguments,0))},s.max=function(){return Kt('isAfter',[].slice.call(arguments,0))},s.now=function(){return Date.now?Date.now():+new Date},s.utc=m,s.unix=function(e){return Jt(1e3*e)},s.months=function(e,t){return Kn(e,t,'months')},s.isDate=d,s.locale=kt,s.invalid=g,s.duration=_n,s.isMoment=M,s.weekdays=function(e,t,n){return es(e,t,n,'weekdays')},s.parseZone=function(){return Jt.apply(null,arguments).parseZone()},s.localeData=Dt,s.isDuration=sn,s.monthsShort=function(e,t){return Kn(e,t,'monthsShort')},s.weekdaysMin=function(e,t,n){return es(e,t,n,'weekdaysMin')},s.defineLocale=Mt,s.updateLocale=function(e,t){if(null!=t){var n,s,i=ft;null!=mt[e]&&null!=mt[e].parentLocale?mt[e].set(T(mt[e]._config,t)):(null!=(s=vt(e))&&(i=s._config),t=T(i,t),null==s&&(t.abbr=e),(n=new N(t)).parentLocale=mt[e],mt[e]=n),kt(e)}else null!=mt[e]&&(null!=mt[e].parentLocale?(mt[e]=mt[e].parentLocale,e===kt()&&kt(e)):null!=mt[e]&&delete mt[e]);return mt[e]},s.locales=function(){return Y(mt)},s.weekdaysShort=function(e,t,n){return es(e,t,n,'weekdaysShort')},s.normalizeUnits=A,s.relativeTimeRounding=function(e){return void 0===e?Ss:'function'==typeof e&&(Ss=e,!0)},s.relativeTimeThreshold=function(e,t){return void 0!==Ys[e]&&(void 0===t?Ys[e]:(Ys[e]=t,'s'===e&&(Ys.ss=t-1),!0))},s.calendarFormat=function(e,t){var n=e.diff(t,'days',!0);return n<-6?'sameElse':n<-1?'lastWeek':n<0?'lastDay':n<1?'sameDay':n<2?'nextDay':n<7?'nextWeek':'sameElse'},s.prototype=Bn,s.HTML5_FMT={DATETIME_LOCAL:'YYYY-MM-DDTHH:mm',DATETIME_LOCAL_SECONDS:'YYYY-MM-DDTHH:mm:ss',DATETIME_LOCAL_MS:'YYYY-MM-DDTHH:mm:ss.SSS',DATE:'YYYY-MM-DD',TIME:'HH:mm',TIME_SECONDS:'HH:mm:ss',TIME_MS:'HH:mm:ss.SSS',WEEK:'GGGG-[W]WW',MONTH:'YYYY-MM'},s}))}),783,[]); +__d((function(g,_r,_i,_a,m,_e,_d){Object.defineProperty(_e,"__esModule",{value:!0}),_e.Add_metadataToImage=le,_e.Add_metadataToImageGst=he,_e.AlertForServerDT=function(e,n){s.Alert.alert("",`Your Device Date and Time is not correct. Please correct and restart App.\n\n Server Date - ${e}\n Device Date - ${n}\n `,[{},{text:"OK",onPress:(o=(0,t.default)((function*(){d.default.exitApp()})),function(){return o.apply(this,arguments)})}]);var o},_e.CreateDirKPIimg=function(){return O.apply(this,arguments)},_e.DownloadData=function(e,t){return B.apply(this,arguments)},_e.RestoreProjectInProps=function(e){return we.apply(this,arguments)},_e.UpdateDistributorStatus=function(e,t){return ne.apply(this,arguments)},_e.UpdateStoreStatus=function(e,t){return H.apply(this,arguments)},_e.UploadAddStoreInfoData=function(e,t){return W.apply(this,arguments)},_e.UploadData=function(e,t){return j.apply(this,arguments)},_e.UploadData2=J,_e.UploadFormData=z,_e.ValidateEmail=function(e){var t=!1;/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(e)&&(t=!0);return t},_e.bytesToSize=Te,_e.cal_distance=function(e,t,n,o){var r=.017453292519943295,a=Math.cos,i=.5-a((n-e)*r)/2+a(e*r)*a(n*r)*(1-a((o-t)*r))/2;return R=6371,2*Math.asin(Math.sqrt(i))*R},_e.changepassword=function(e,t){return I.apply(this,arguments)},_e.checkMDStockScreenExists=function(e){return Ne.apply(this,arguments)},_e.checkRange=function(e,t,n,o){var r=(n-e)*Math.PI/180,a=(o-t)*Math.PI/180,i=Math.sin(r/2)*Math.sin(r/2)+Math.cos(e*Math.PI/180)*Math.cos(n*Math.PI/180)*Math.sin(a/2)*Math.sin(a/2),l=2*Math.atan2(Math.sqrt(i),Math.sqrt(1-i)),u=6371*l;return Math.round(1e3*u)},_e.createnewpassword=function(e,t){return A.apply(this,arguments)},_e.getAllFileForAFolder=function(e,t){return M.apply(this,arguments)},_e.getAllFolderImages=function(){return b.apply(this,arguments)},_e.getDataPendingStores=function(e){return $.apply(this,arguments)},_e.getDownloadJson=function(e,t){return U.apply(this,arguments)},_e.getDownloadJson1=function(e,t){return L.apply(this,arguments)},_e.getIRPendingSessionCount=function(e){return Oe.apply(this,arguments)},_e.getKPIFields=function(e){return De.apply(this,arguments)},_e.getKPIFieldsForKyc=function(){return Ae.apply(this,arguments)},_e.getKPIS=function(e,t){return oe.apply(this,arguments)},_e.getProjectData=function(e){return p.apply(this,arguments)},_e.getProjectInfo=Pe,_e.getServerDT=h,_e.get_rowColSettings=function(e,t,n){var o={color:'',fontsize:"",bold:0},r=null!=n.Color&&null!=n.Color!=''?JSON.parse(n.Color):{};if(!(Object.keys(r).length>0&&null!=e&&''!=e))return o;var a=r,i=null!=a.colors&&'object'==typeof a.colors?a.colors:{},l=null!=i[t]&&''!=i[t]?i[t]:[];if(!(l.length>0))return o;for(var u=0;u=s.min&&null!=s.max&&Math.round(e)<=s.max)return o={color:s.color,fontsize:s.fontsize,bold:s.bold};if(null!=s.min&&Math.round(e)>=s.min&&(null==s.max||''==s.max))return o={color:s.color,fontsize:s.fontsize,bold:s.bold};if(null!=s.max&&Math.round(e)<=s.max&&(null==s.min||''==s.min))return o={color:s.color,fontsize:s.fontsize,bold:s.bold};if(u==l.length-1)return console.log("end"),o}},_e.getforgotpasswordotp=function(e,t){return T.apply(this,arguments)},_e.getmobileverifyotp=function(e,t){return w.apply(this,arguments)},_e.goToMenuPage=function(e){var t=e.props,n=e.storeData,o=void 0===n?{}:n,r=e.screenname,a=void 0===r?'':r,i=e.MenuItem,l=void 0===i?{}:i,u=e.BgNav,s=void 0!==u&&u,c=e.BgNavData,d=void 0===c?{}:c,f=e.isAdhocScreen,p=e.isBeatPlan,h=e.isNonMerchan,y=e.isNonProg,S=e.isStoreSearch,v=e.ShowCatWise,I=void 0!==v&&v,w=e.CatData,P=void 0===w?{}:w,T=e.ExtraData;t.set_autoback({AutoGoToPrev:!1}),console.log("goToMenuPage",a,o,s),t.navigation.navigate(a,{storeData:o,menu:l,isAdhoc:f,isBeat:p,isNonMerchans:h,isNonProgs:y,isStoreSearch:S,redirect:s,BgNavData:d,ShowCatWise:I,CatData:P,ExtraData:T})},_e.isDeviceTimeValid=void 0,_e.login=function(e,t){return _.apply(this,arguments)},_e.resizeImageGst=_e.resizeImage=_e.reducePixelsGst=_e.reducePixels=_e.marktext2=_e.marktext1=_e.markAlltexts=void 0,_e.restore_ImageWithMetaData=function(e,t){return me.apply(this,arguments)},_e.restore_ImageWithMetaDataGst=function(e,t){return se.apply(this,arguments)},_e.updateAddInfoStoreStatus=Z,_e.updateCFStatus=q,_e.uploadContractData=function(e,t,n){return K.apply(this,arguments)},_e.uploadContractFormFiles=function(){return te.apply(this,arguments)},_e.useOrientation2=_e.useOrientation=void 0,_e.validateNumber=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:'',n=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],o=!0;if('numeric'==t.toLowerCase()&&''!=e){new RegExp(/^\d+$/).test(e)||(o=!1,n&&(0,_r(_d[20]).notify)('Please enter whole numbers only','SHORT'))}else if('decimal'==t.toLowerCase()&&''!=e){new RegExp(/^\d*\.?\d*$/).test(e)||(o=!1,n&&(0,_r(_d[20]).notify)('Please enter decimal numbers only','SHORT'))}else if('text'==t.toLowerCase()&&''!=e){new RegExp(/^[a-zA-Z0-9@\s_.-]*$/).test(e)||(o=!1,n&&(0,_r(_d[20]).notify)('Please enter only characters and digits','SHORT'))}else if('qrtext'==t.toLowerCase()&&''!=e){new RegExp(/^[a-zA-Z0-9@\s_.-\/:&$%#]*$/).test(e)||(o=!1,n&&(0,_r(_d[20]).notify)('Please enter only characters and digits','SHORT'))}else if('textspc'==t.toLowerCase()&&''!=e){new RegExp(/^[a-zA-Z0-9\/-]*$/).test(e)||(o=!1,n&&(0,_r(_d[20]).notify)('Please enter only characters and digits','SHORT'))}else if('alphanumeric'==t.toLowerCase()&&''!=e){new RegExp(/^[a-zA-Z0-9]+$/).test(e)||(o=!1,n&&(0,_r(_d[20]).notify)('Please enter only characters and digits','SHORT'))}return o},_e.validateNumber12=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:'',n=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],o=!0;if('numeric'===t.toLowerCase()&&''!==e);else if('decimal'===t.toLowerCase()&&''!==e);else if('text'===t.toLowerCase()&&''!==e){new RegExp(/^[a-zA-Z0-9\-\/ ,]*$/).test(e)||(o=!1,n&&(0,_r(_d[20]).notify)('Please enter only specified characters','SHORT'))}else if('qrtext'===t.toLowerCase()&&''!==e){new RegExp(/^[a-zA-Z0-9\-\/]*$/).test(e)||(o=!1,n&&(0,_r(_d[20]).notify)('Please enter only specified characters','SHORT'))}else if('textspc'==t.toLowerCase()&&''!=e){new RegExp(/^[a-zA-Z0-9\/-]*$/).test(e)||(o=!1,n&&(0,_r(_d[20]).notify)('Please enter only characters and digits','SHORT'))}else if('alphanumeric'==t.toLowerCase()&&''!=e){new RegExp(/^[a-zA-Z0-9]+$/).test(e)||(o=!1,n&&(0,_r(_d[20]).notify)('Please enter only characters and digits','SHORT'))}return o},_e.verifymobileotp=function(e,t){return P.apply(this,arguments)},_e.verifyotp=function(e,t){return D.apply(this,arguments)};var e=_r(_d[0])(_r(_d[1])),t=_r(_d[0])(_r(_d[2])),n=(_r(_d[0])(_r(_d[3])),f(_r(_d[4]))),o=_r(_d[0])(_r(_d[5])),r=_r(_d[0])(_r(_d[6])),a=f(_r(_d[7])),i=_r(_d[0])(_r(_d[8])),l=(_r(_d[0])(_r(_d[9])),_r(_d[0])(_r(_d[10]))),u=_r(_d[0])(_r(_d[11])),s=_r(_d[12]),c=_r(_d[0])(_r(_d[13])),d=_r(_d[0])(_r(_d[14]));function f(e,t){if("function"==typeof WeakMap)var n=new WeakMap,o=new WeakMap;return(f=function(e,t){if(!t&&e&&e.__esModule)return e;var r,a,i={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return i;if(r=t?o:n){if(r.has(e))return r.get(e);r.set(e,i)}for(var l in e)"default"!==l&&{}.hasOwnProperty.call(e,l)&&((a=(r=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,l))&&(a.get||a.set)?r(i,l,a):i[l]=e[l]);return i})(e,t)}function p(){return(p=(0,t.default)((function*(e){var t={projectCode:e,appName:"Merchandiser",deviceType:"ios"==s.Platform.OS?"iOS":"Android",appVariant:_r(_d[15]).DevType},n=JSON.stringify({Params:t});return console.log("jsonPay",n),yield fetch(_r(_d[15]).fixedurl,{method:'post',headers:{'Content-Type':'application/json'},body:n}).then((function(e){return e.json()})).then((function(e){console.log("project_data_res_info",e);var t=e.GetAppSettingWithDeviceInfo||[],n=t.length>0?t[0]:{};return n.success=!0,n})).catch((function(e){return console.log('getProjectData error',e),{success:!1}}))}))).apply(this,arguments)}function h(){return y.apply(this,arguments)}function y(){return(y=(0,t.default)((function*(){var e=yield(0,_r(_d[16]).getTimeZone)();console.log('timezone from location => ',e);var t=`https://timeapi.io/api/Time/current/zone?timeZone=${e}`;try{console.log("apiUrl--------",t);var n=yield fetch(t);if(!n.ok)throw new Error('Network response was not ok');var r=yield n.json(),a=null!=r&&r.dateTime?new Date(null==r?void 0:r.dateTime):(0,o.default)(new date).format('HH:mm:ss'),i=null==r?void 0:r.date,l=null!=r&&r.dateTime?(0,o.default)(null==r?void 0:r.dateTime).format("HH:mm:ss"):a,u={ServerDate:i,ServerTime:l,CheckTime:`${i} ${l}`};return console.log('formate date and time => ',u),u}catch(e){return console.log('getServerDT error',e),yield S()}}))).apply(this,arguments)}function S(){return v.apply(this,arguments)}function v(){return(v=(0,t.default)((function*(){var e=(new Date).getTimezoneOffset(),t=e<0?Math.abs(e):-Math.abs(e);console.log("offset:",t);try{var n=yield fetch(_r(_d[15]).ServerDTurl,{method:'post',headers:{Accept:'application/json','Content-Type':'application/json'},body:JSON.stringify({offset:t})});if(!n.ok)throw new Error('Network response was not ok');var o=yield n.json();console.log("project datares",o);var r=o.GetServerDateTime_INTL||[],a=r.length>0?r[0]:{};return console.log('appdata1 => ',a),a}catch(e){return console.log('getFallbackTime error',e),{success:!1,error:e}}}))).apply(this,arguments)}function I(){return(I=(0,t.default)((function*(e,t){var n=JSON.stringify({UserName:null==t?void 0:t.un,OldPassword:null==t?void 0:t.oldp,NewPassword:null==t?void 0:t.newp});return console.log(n,"confirm password data."),yield fetch(e,{method:'post',headers:{Accept:'application/json','Content-Type':'application/json'},body:n}).then((function(e){return e.json()})).then((function(e){var t=e||'';return t.success=!0,t})).catch((function(e){return console.log('password change error',e),{success:!1}}))}))).apply(this,arguments)}function w(){return(w=(0,t.default)((function*(e,t){var n=JSON.stringify({mobileno:null==t?void 0:t.mobileno,projectcode:null==t?void 0:t.projectcode});return console.log(n,e,"send otppp mobile surveyyy"),yield fetch(e,{method:'post',headers:{Accept:'application/json','Content-Type':'application/json'},body:n}).then((function(e){return e.json()})).then((function(e){var t=(null==e?void 0:e.CheckUserAndSendOTP)||{};return t||Object.assign({},t,{Status:!0})})).catch((function(e){return console.log('get verify mobile otp error',e),{Status:!1,error:e,networkErr:networkErr}}))}))).apply(this,arguments)}function P(){return(P=(0,t.default)((function*(e,t){var n=JSON.stringify({mobileno:null==t?void 0:t.mobileno,otp:null==t?void 0:t.otp});return yield fetch(e,{method:'post',headers:{Accept:'application/json','Content-Type':'application/json'},body:n}).then((function(e){return e.json()})).then((function(e){var t=(null==e?void 0:e.otpauthentication)||{};return t||Object.assign({},t,{Status:!0})})).catch((function(e){return console.log('verify mobile otp error',e),{success:!1}}))}))).apply(this,arguments)}function T(){return(T=(0,t.default)((function*(e,t){var n=JSON.stringify({Username:null==t?void 0:t.un});return console.log(n,e,"send otppp"),yield fetch(e,{method:'post',headers:{Accept:'application/json','Content-Type':'application/json'},body:n}).then((function(e){return e.json()})).then((function(e){var t=(null==e?void 0:e.OTPSendForForgetPasswordResult)||{};return!0===t.Status||!1===t.Status?t:Object.assign({},t,{Status:!0})})).catch((function(e){return console.log('get otp error',e),{Status:!1,error:e,networkErr:networkErr}}))}))).apply(this,arguments)}function D(){return(D=(0,t.default)((function*(e,t){var n=JSON.stringify({Username:null==t?void 0:t.un,OTP:null==t?void 0:t.otp});return yield fetch(e,{method:'post',headers:{Accept:'application/json','Content-Type':'application/json'},body:n}).then((function(e){return e.json()})).then((function(e){var t=(null==e?void 0:e.OTPVerifyResult)||{};return!0===t.Status||!1===t.Status?t:Object.assign({},t,{Status:!0})})).catch((function(e){return console.log('verify otp error',e),{success:!1}}))}))).apply(this,arguments)}function A(){return(A=(0,t.default)((function*(e,t){var n=JSON.stringify({Username:null==t?void 0:t.un,Password:null==t?void 0:t.newp});return yield fetch(e,{method:'post',headers:{Accept:'application/json','Content-Type':'application/json'},body:n}).then((function(e){return e.json()})).then((function(e){var t=(null==e?void 0:e.NewPasswordResult)||{};return!0===t.Status||!1===t.Status?t:Object.assign({},t,{Status:!0})})).catch((function(e){return console.log('create new password error',e),{success:!1}}))}))).apply(this,arguments)}function _(){return(_=(0,t.default)((function*(e,t){var n=JSON.stringify({UserName:t.un,Password:t.pass,Intime:t.Intime,Latitude:t.lat,Longitude:t.lng,Appversion:_r(_d[15]).version,Attmode:'0',Networkstatus:'0',Manufacturer:t.manufacturer,ModelNumber:t.model,OSVersion:t.os,IMEINumber1:t.imeiNo1,IMEINumber2:t.imeiNo2});return console.log(n),yield fetch(e,{method:'post',headers:{Accept:'application/json','Content-Type':'application/json'},body:n}).then((function(e){return e.json()})).then((function(e){try{var t=JSON.parse(e)}catch(n){console.log('err:',n);t=e}return null!=t.LOGIN?(t=t.LOGIN.length>0?t.LOGIN[0]:{}).success=!0:t=Array.isArray(t)&&t.length>0&&null!=t[0].Result?{success:!1,error:'Invalid username or password ('+JSON.stringify(t)+')'}:{success:!1,error:t},t})).catch((function(e){console.log('login error',e);return{success:!1,error:e,networkErr:!0}}))}))).apply(this,arguments)}function O(){return O=(0,t.default)((function*(){console.log('CreateDirKPIimg:');var e,n=yield N();yield a.mkdir(_r(_d[15]).ImageFolderPath),yield a.mkdir(_r(_d[15]).VisitorImageFolderPath),yield a.mkdir(_r(_d[15]).VisitorLoginImageFolderPath),yield a.mkdir(_r(_d[15]).VisitorImageFolderPath+'Recordings/'),yield a.mkdir(_r(_d[15]).StoreCheckListImagePath),yield a.mkdir(_r(_d[15]).TrainingContentFolderPath),yield a.mkdir(_r(_d[15]).ContractFormImagePath),yield a.mkdir(_r(_d[15]).CoverageImagePath),yield a.mkdir(_r(_d[15]).AddStoreImagePath),yield a.mkdir(_r(_d[15]).visiCoolerImgPath),yield a.mkdir(_r(_d[15]).kycImagePath),yield Promise.all(n.map((e=(0,t.default)((function*(e,t){var n=_r(_d[15]).ImageFolderPath+`${e.ScreenName}/`;yield a.mkdir(n),yield a.mkdir(n+'Recordings/')})),function(t,n){return e.apply(this,arguments)}))).then((function(){console.log("Directory is created successfully")}))})),O.apply(this,arguments)}function N(){return C.apply(this,arguments)}function C(){return C=(0,t.default)((function*(){return new Promise((function(e,n){var o;_r(_d[15]).db.transaction((o=(0,t.default)((function*(n){var o,r=(0,_r(_d[17]).Q_ALLScreenName)();yield n.executeSql(r,[],(o=(0,t.default)((function*(t,n){if(n.rows.length>0)for(var o=[],r=0;r2&&void 0!==arguments[2]?arguments[2]:'',r=e,i=yield a.readDir(r);n=null!=n&&''!=n?n:_r(_d[15]).defUploadFolder,console.log("ImgFiles in ",r,' are:',i.length);var l,u=[];return new Promise.all(i.map((l=(0,t.default)((function*(e){if(e.isFile()&&(e.name.includes('jpg')||e.name.includes('jpeg')||e.name.includes('png'))){var r={uri:e.path,type:'image/jpeg',name:e.name,filetype:'image',folderName:n};return u.push(r),r}if(e.isDirectory()&&'Recordings'==e.name){var i=e.path,l=yield a.readDir(i),c=null!=o&&''!=o?_r(_d[15]).FolderForREC[o]:_r(_d[15]).defUploadFolder;return new Promise.all(l.map((d=(0,t.default)((function*(e){if(e.isFile()&&(e.name.includes('m4a')||e.name.includes('mp3'))){var t={uri:e.path,type:'ios'==s.Platform.OS?'audio/m4a':'audio/mp3',name:e.name,filetype:'audio',folderName:c};return u.push(t),t}return''})),function(e){return d.apply(this,arguments)}))).then((function(e){return e}))}return'';var d})),function(e){return l.apply(this,arguments)}))).then((function(e){return console.log('getAllFileForAFolder',e),u})).catch((function(e){return console.log('error in getAllFileForAFolder',e),u}))})),M.apply(this,arguments)}function E(e){return k.apply(this,arguments)}function k(){return(k=(0,t.default)((function*(e){return e.includes('_CEImg-')?_r(_d[15]).KPIFolders.CATEXEONEAPP:e.includes('_SurveyImg_')?_r(_d[15]).KPIFolders.SURVEY:_r(_d[15]).defUploadFolder}))).apply(this,arguments)}function x(){return F.apply(this,arguments)}function F(){return F=(0,t.default)((function*(){var e=_r(_d[15]).common_ImagePath,n=yield a.readDir(e);console.log('getAllOldImages',e,n.length);var o,r=[];return new Promise.all(n.map((o=(0,t.default)((function*(e){if(e.name.includes('jpg')||e.name.includes('jpeg')||e.name.includes('png')){var t=yield E(e.name);t=''!=t&&null!=t?t:_r(_d[15]).defUploadFolder,console.log('Up_Foldername',t);var n={uri:e.path,type:'image/jpeg',name:e.name,filetype:'image',folderName:t};return r.push(n),n}return''})),function(e){return o.apply(this,arguments)}))).then((function(e){return console.log('oldimages:',r.length),r})).catch((function(e){return console.log('Err:',e),[]}))})),F.apply(this,arguments)}function U(){return(U=(0,t.default)((function*(e,t){var n={Downloadtype:t.Downloadtype,Username:t.username,Param1:t.empid,Param2:"ios"==s.Platform.OS?"iOS":"Android"};return console.log(n),yield fetch(e,{method:'post',headers:{Accept:'application/json','Content-Type':'application/json'},body:JSON.stringify(n)}).then((function(e){return e.json()})).then((function(e){return JSON.parse(e)})).catch((function(e){return console.log('getdashboard error',e),{success:!1}}))}))).apply(this,arguments)}function L(){return(L=(0,t.default)((function*(e,t){return yield fetch(e,{method:'post',headers:{Accept:'application/json','Content-Type':'application/json'},body:JSON.stringify(t)}).then((function(e){return e.json()})).then((function(t){if(e.includes('api1.parinaam.in'))var n=t;else n=JSON.parse(t);return n})).catch((function(e){return console.log('getdashboard error getDownloadJson1',e),e}))}))).apply(this,arguments)}function j(){return(j=(0,t.default)((function*(e,t){return yield fetch(e,{method:'post',headers:{Accept:'application/json','Content-Type':'application/json'},body:JSON.stringify(t)}).then((function(e){return e.json()})).then((function(e){return JSON.parse(e)})).catch((function(e){return console.log('UploadData error',e),{success:!1,error:e}}))}))).apply(this,arguments)}function J(e,t){return G.apply(this,arguments)}function G(){return(G=(0,t.default)((function*(e,t){return yield fetch(e,{method:'post',headers:{Accept:'application/json','Content-Type':'application/json'},body:JSON.stringify(t)}).then((function(e){return e.json()})).then((function(e){return e})).catch((function(e){return console.log('UploadData error',e),{success:!1,error:!0,errorMsg:e}}))}))).apply(this,arguments)}function z(e,t){return Y.apply(this,arguments)}function Y(){return(Y=(0,t.default)((function*(e,t){return yield fetch(e,{method:'post',headers:new Headers({'Content-Type':'multipart/form-data'}),body:t}).then((function(e){return console.log('UploadData error3',e),e.text()})).then((function(e){return console.log('UploadData error1',e),e})).catch((function(e){return console.log('UploadData error2',e),{success:!1,error:e}}))}))).apply(this,arguments)}function B(){return B=(0,t.default)((function*(e,n){var r=n.isDataDownloaded;if(void 0!==r&&r)return!0;var a=new Date,i=(0,o.default)(a).format('MM/DD/YYYY');return new Promise((function(e,n){var o;_r(_d[15]).db.transaction((o=(0,t.default)((function*(t){for(var n in _r(_d[18]).Table_Structure){var o=_r(_d[18]).Table_Structure[n];yield t.executeSql(o.SqlText,[],(function(e,t){}),(function(e,t){console.log(t)}))}var r=0;for(var a in _r(_d[18]).AppTables){var l=_r(_d[18]).AppTables[a]==_r(_d[18]).AppTables.SOS_IRUPLOAD||_r(_d[18]).AppTables[a]==_r(_d[18]).AppTables.SOS_IR_IMAGES,u=_r(_d[18]).AppTables[a]==_r(_d[18]).AppTables.PAIDVIS_IRUPLOAD||_r(_d[18]).AppTables[a]==_r(_d[18]).AppTables.PAIDVIS_IR_IMAGES,s=_r(_d[18]).AppTables[a]==_r(_d[18]).AppTables.WINDOW_IRUPLOAD||_r(_d[18]).AppTables[a]==_r(_d[18]).AppTables.WINDOW_IR_IMAGES,c=_r(_d[18]).AppTables[a]==_r(_d[18]).AppTables.ADDVIS_IRUPLOAD||_r(_d[18]).AppTables[a]==_r(_d[18]).AppTables.ADDVIS_IR_IMAGES,d=_r(_d[18]).AppTables[a]==_r(_d[18]).AppTables.COMPVIS_IRUPLOAD||_r(_d[18]).AppTables[a]==_r(_d[18]).AppTables.COMPVIS_IR_IMAGES,f=_r(_d[18]).AppTables[a]==_r(_d[18]).AppTables.PROMO_IRUPLOAD||_r(_d[18]).AppTables[a]==_r(_d[18]).AppTables.PROMO_IR_IMAGES;l||u||c||d||s||f?(console.log('Dont Delete previous IR images Data and session status continue.',_r(_d[18]).AppTables[a]),r==Object.keys(_r(_d[18]).AppTables).length-1&&e(!0),r++):t.executeSql(`Delete from ${_r(_d[18]).AppTables[a]} where ADDED_DATE!='${i}'`,[],(function(t,n){r==Object.keys(_r(_d[18]).AppTables).length-1&&e(!0),r++}),(function(t,n){console.log(n),r==Object.keys(_r(_d[18]).AppTables).length-1&&e(!1),r++}))}})),function(e){return o.apply(this,arguments)}))})).catch((function(e){return console.log('err while creating tables',e),!1}))})),B.apply(this,arguments)}function $(){return $=(0,t.default)((function*(e){var n=[];return new Promise((function(o,r){var a;_r(_d[15]).db.transaction((a=(0,t.default)((function*(t){function r(e){return`select * from ${e} where UploadStatus in ('C','P','D','L')`}var a=r('Mapping_JourneyPlan')+' UNION '+r('Adhoc_JourneyPlan');1==e.ShowNonMerList&&(a+=` UNION ${r('NonMerchandising_JourneyPlan')} `),1==e.ShowNonProgram&&(a+=` UNION ${r('NonProgram_JourneyPlan')} `),1==e.ShowStoreSearch&&(a+=` UNION ${r('StoreSearch_JourneyPlan')} `),1==e.ShowBeatPlanList&&(a+=` UNION ${r('JourneyPlan_RouteWise')} `),t.executeSql(a,[],(function(e,t){if(t.rows.length>0)for(var r=0;r2&&void 0!==arguments[2]?arguments[2]:function(){},r=arguments.length>3&&void 0!==arguments[3]&&arguments[3],a=new Date,i=(0,o.default)(a).format('MM/DD/YYYY');return new Promise((function(e,o){t&&t.UploadStatus?_r(_d[15]).db.transaction((function(o){var a,l,u=t.StoreId,s=t.UploadStatus,c=t.tbname,d=t.InTime,f=t.outtime;d=d||null,f=f||null,console.log("checkloc--",t,d,f),null!==d&&null!==f?(a=`UPDATE ${c} \n SET UploadStatus = ?, InTime = ?, OutTime = ? \n WHERE StoreId = ? AND VisitDate = ?`,l=[s,d,f,u,i]):(a=`UPDATE ${c} \n SET UploadStatus = ? \n WHERE StoreId = ? `,r||(a+=" AND VisitDate = ? "),console.log("query",a,r),l=r?[s,u]:[s,u,i]),o.executeSql(a,l,(function(t,o){console.log('\u2705 Store status updated:',s),null!=n&&n(o),e(!0)}),(function(t){console.error("\ud83d\udea8 SQL Error:",t),e(!1)}))})):e(!1)})).catch((function(e){return console.error("\ud83d\udea8 Promise Error:",e),!1}))})),H.apply(this,arguments)}function K(){return K=(0,t.default)((function*(e,n,o){var r,a=e.baseurl+(0,_r(_d[19]).getMethodName)(_r(_d[19]).METHODS.UPLOADJSON_METHOD),i={MID:0,Keys:"ContractForm",JsonData:JSON.stringify(n),UserId:e.UserId};return console.log("url:",a),console.log("postData:",i),yield J(a,i).then((r=(0,t.default)((function*(e){return console.log('res:',e),null!=e.UploadJsonResult&&'Success'==e.UploadJsonResult&&q(o)})),function(e){return r.apply(this,arguments)})).catch((function(e){return console.log(e),!1}))})),K.apply(this,arguments)}function q(e){return V.apply(this,arguments)}function V(){return V=(0,t.default)((function*(e){var n=e.ProgramDefinitionId,o=e.ProgramId;return new Promise((function(e,r){var a;_r(_d[15]).db.transaction((a=(0,t.default)((function*(r){var a,i=`Update Mapping_ContractForm SET ContractFormStatus='1' WHERE ProgramId='${o}' and ProgramDefinitionId='${n}'`;yield r.executeSql(i,[],(a=(0,t.default)((function*(t,n){console.log('CF status Updated to 1'),e(!0)})),function(e,t){return a.apply(this,arguments)}),(function(t,n){console.log(n),e(!1)}))})),function(e){return a.apply(this,arguments)}))})).then((function(e){return e})).catch((function(e){return console.log(e),!1}))})),V.apply(this,arguments)}function W(){return W=(0,t.default)((function*(e,n){var o,r=e.baseurl+(0,_r(_d[19]).getMethodName)(_r(_d[19]).METHODS.UPLOADJSON_METHOD),a={MID:0,Keys:"Add_Store_Info",JsonData:JSON.stringify(n),UserId:e.UserId};return console.log("url:",r),console.log("postData:",a),yield J(r,a).then((o=(0,t.default)((function*(e){return console.log('res:',e),null!=e.UploadJsonResult&&'Success'==e.UploadJsonResult&&Z()})),function(e){return o.apply(this,arguments)})).catch((function(e){return console.log(e),!1}))})),W.apply(this,arguments)}function Z(){return Q.apply(this,arguments)}function Q(){return Q=(0,t.default)((function*(){return new Promise((function(e,n){var o;_r(_d[15]).db.transaction((o=(0,t.default)((function*(n){var o,r=`Update ${_r(_d[18]).AppTables.ADD_STORE_INFO} SET STATUS='U' `;yield n.executeSql(r,[],(o=(0,t.default)((function*(t,n){console.log('Add Store Info status Updated to 1'),e(!0)})),function(e,t){return o.apply(this,arguments)}),(function(t,n){console.log(n),e(!1)}))})),function(e){return o.apply(this,arguments)}))})).then((function(e){return e})).catch((function(e){return console.log(e),!1}))})),Q.apply(this,arguments)}function X(e,t){return ee.apply(this,arguments)}function ee(){return(ee=(0,t.default)((function*(e,t){return console.log(t,e),yield z(t,e).then((function(e){return console.log('test:',e),('object'!=typeof e||null==e.error)&&(!!e.includes('Success')&&(console.log('image uploaded'),!0))})).catch((function(e){return console.log(e),!1}))}))).apply(this,arguments)}function te(){return te=(0,t.default)((function*(){var e,n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:function(){},i=arguments.length>2?arguments[2]:void 0,l=new Date,u=(0,o.default)(l).format('MM/DD/YYYY'),s=0,c=(i.imageUploadUrl||_r(_d[15]).URL_IMAGE)+(0,_r(_d[19]).getMethodName)(_r(_d[19]).METHODS.UPLOADIMAGES_METHOD),d=!1;return yield Promise.all(n.map((e=(0,t.default)((function*(e,t){var o=t,i='file://'+e.uri,l=yield a.exists(i).then((function(e){return e}));console.log('isExists file',l,e.uri);var f=!1;if(l){var p=new FormData;p.append('file',{uri:i,type:e.type,name:e.name}),p.append('Foldername',e.folderName),p.append('Path',u),1==(f=yield X(p,c))?(console.log('isExists file uploaded',l,s,o,n.length-1),yield a.unlink(i),s++,r(s+1),s==n.length&&(d=!0)):console.log('file not uploaded:',l,i)}else s++,r(s+1),s==n.length&&(d=!0);return f})),function(t,n){return e.apply(this,arguments)}))).then((function(e){return console.log(e),d})).catch((function(e){return console.log(e),!1}))})),te.apply(this,arguments)}function ne(){return ne=(0,t.default)((function*(e,n){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:function(){},a=new Date;(0,o.default)(a).format('MM/DD/YYYY');return new Promise((function(e,o){var a;null!=n&&null!=n.UploadStatus&&''!=n.UploadStatus?_r(_d[15]).db.transaction((a=(0,t.default)((function*(o){var a,i=n.StoreId,l=n.UploadStatus,u=`UPDATE ${n.tbname} SET UploadStatus='${l}' WHERE DistributorId='${i}' `;yield o.executeSql(u,[],(a=(0,t.default)((function*(t,n){console.log('distributor status updated',l),r(n),e(!0)})),function(e,t){return a.apply(this,arguments)}),(function(t,n){console.log(n),e(!1)}))})),function(e){return a.apply(this,arguments)})):e(!1)})).then((function(e){return e})).catch((function(e){return console.log(e),!1}))})),ne.apply(this,arguments)}function oe(){return(oe=(0,t.default)((function*(e,t){for(var n=[],o=0;o0&&void 0!==arguments[0]?arguments[0]:'',r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:'';return''!=r&&''!=o?(console.log("marktext1 imgurl:",r),yield n.default.markText({backgroundImage:{src:r,uri:r},watermarkTexts:[{text:o,positionOptions:{position:n.Position.topLeft},style:{color:'#ff0000',fontName:'Arial-BoldItalicMT',fontSize:24}}],scale:1,quality:100,saveFormat:n.ImageFormat.jpg}).then((e=(0,t.default)((function*(e){return{success:!0,uri:'android'==s.Platform.OS?'file://'+e:e}})),function(t){return e.apply(this,arguments)})).catch((function(e){return console.log('marktext1 err:',e),{success:!1,error:e}}))):{success:!1,imagenotfound:!0}})),function(){return re.apply(this,arguments)}),_e.markAlltexts=(ae=(0,t.default)((function*(){var e,o=arguments.length>0&&void 0!==arguments[0]?arguments[0]:'',a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:'',i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:'',l=arguments.length>3?arguments[3]:void 0,u=arguments.length>4?arguments[4]:void 0;if(''!=i&&''!=o){console.log("markAlltexts imgurl:",i);var c={backgroundImage:{src:i},watermarkTexts:[{text:o,positionOptions:{position:n.Position.topLeft},style:{color:'#ff0000',fontName:'Arial-BoldItalicMT',fontSize:24}}],scale:1,quality:100,saveFormat:n.ImageFormat.jpg};if(''!=a){var d={text:a,positionOptions:{position:n.Position.bottomLeft},style:{color:'#ff0000',fontName:'Arial-BoldItalicMT',fontSize:16,textBackgroundStyle:{type:'stretchX',paddingX:30,paddingY:10,color:'#fff'}}};c.watermarkTexts.push(d)}return yield n.default.markText(c).then((e=(0,t.default)((function*(e){console.log("markAlltexts res",e);var t='android'==s.Platform.OS?'file://'+e:e;return yield r.default.createResizedImage(t,l,u,'JPEG',35,0,null,!1,{onlyScaleDown:!0}).then((function(e){var t=Te(e.size);return console.log('reduced filesize:',t),{success:!0,uri:e.uri}})).catch((function(e){return console.log(e),{success:!1,error:e}}))})),function(t){return e.apply(this,arguments)})).catch((function(e){return console.log('marktext1 err:',e),{success:!1,error:e}}))}return{success:!1,imagenotfound:!0}})),function(){return ae.apply(this,arguments)}),_e.marktext2=(ie=(0,t.default)((function*(){var e,o=arguments.length>0&&void 0!==arguments[0]?arguments[0]:'',a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:'',i=arguments.length>2?arguments[2]:void 0,l=arguments.length>3?arguments[3]:void 0;return''!=a&&''!=o?(console.log("marktext1 imgurl:",a),yield n.default.markText({backgroundImage:{src:a,uri:a},watermarkTexts:[{text:o,positionOptions:{position:n.Position.bottomLeft},style:{color:'#ff0000',fontName:'Arial-BoldItalicMT',fontSize:16,textBackgroundStyle:{type:'stretchX',paddingX:30,paddingY:10,color:'#fff'}}}],scale:1,quality:100,saveFormat:n.ImageFormat.jpg}).then((e=(0,t.default)((function*(e){var t='android'==s.Platform.OS?'file://'+e:e;return yield r.default.createResizedImage(t,i,l,'JPEG',35,0,null,!1,{onlyScaleDown:!0}).then((function(e){var t=Te(e.size);return console.log('reduced filesize:',t),{success:!0,uri:e.uri}})).catch((function(e){return console.log(e),{success:!1,error:e}}))})),function(t){return e.apply(this,arguments)})).catch((function(e){return console.log('marktext1 err:',e),{success:!1,error:e}}))):{success:!1,imagenotfound:!0}})),function(){return ie.apply(this,arguments)});function le(e,t,n){return ue.apply(this,arguments)}function ue(){return ue=(0,t.default)((function*(e,n,r){var a,l=arguments.length>3&&void 0!==arguments[3]?arguments[3]:'';return new Promise((a=(0,t.default)((function*(t,a){if(console.log("start Add_metadataToImage RN: ",(0,o.default)().format("MM/DD/YYYY HH:mm:ss")),null!=i.default&&''!=l){var u={text:n,BottomText:r,textStyle:{TopTextfontSize:parseInt(.06*e.width),TopText_x:parseInt(.01*e.width),TopText_y:parseInt(.06*e.width+50),BottomTextfontSize:parseInt(.03*e.width),BottomText_x:parseInt(.01*e.width),BottomText_y:parseInt(e.height+.03*e.width+10)}},s={src:l,height:e.height,width:e.width,ExtendedHeight:e.ExtendedHeight},c=yield i.default.NativeImageMarkText(JSON.stringify(u),JSON.stringify(s));console.log("end Add_metadataToImage RN: ",(0,o.default)().format("MM/DD/YYYY HH:mm:ss"),c),t(null!=c&&'string'==typeof c?{success:!0,url:c}:{success:!1,error:"Cannot add metdata!"})}else console.log("end Add_metadataToImage RN: ",(0,o.default)().format("MM/DD/YYYY HH:mm:ss")),t({success:!1,error:"Native Module 'ImageMarkText' not found!"})})),function(e,t){return a.apply(this,arguments)})).then((function(e){return e})).catch((function(e){return console.log("err:",e),{success:!1,error:e}}))})),ue.apply(this,arguments)}function se(){return(se=(0,t.default)((function*(e,t){var n=e.destFilePath,o=e.imgurl,r=e.imgWidth,i=e.imgHeight,l=e.mark_text1,u=e.mark_text2;if('ios'==s.Platform.OS)return!0;var c=yield fe(o,r,i);if(c.success){var d=null!=c.uri&&''!=c.uri?c.uri.replace('file://',''):'',f=null!=c.imgData?c.imgData:{};console.log("resized_url:",d);var p=1.1;f.width>f.height&&(p=1.2);var h={uri:d,width:parseInt(f.width),height:parseInt(f.height),ExtendedHeight:parseInt(f.height*p)},y=yield he(h,l,u,d);if(y.success&&null!=y.url){var S=y.url,v=yield pe(S,r,i);return v.success?(yield a.unlink(o),yield a.unlink(d),yield a.unlink(S),(yield a.exists(n))&&(yield a.unlink(n)),console.log(v.uri,n,'console....'),yield a.moveFile(v.uri,n).then((function(e){return console.log('file restored to : ',n),!0})).catch((function(e){return console.log("err:",e),!1}))):((0,_r(_d[20]).notify)("Error while reducing pixels! "+(c.error?c.error:'')),!1)}return(0,_r(_d[20]).notify)("Error while adding metadata in image!"+(y.error?y.error:'')),!0}return(0,_r(_d[20]).notify)("Error while resizing image! "+(c.error?c.error:'')),!1}))).apply(this,arguments)}var ce,de,fe=_e.resizeImageGst=(ce=(0,t.default)((function*(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:'',t=arguments.length>1?arguments[1]:void 0,n=arguments.length>2?arguments[2]:void 0;if(''!=e){var o=Math.max(t,1500),a=Math.max(n,1500);return yield r.default.createResizedImage(e,o,a,'JPEG',100,0,null,!1,{onlyScaleDown:!0}).then((function(e){var t=Te(e.size);return console.log('resizeImage: reduced filesize:',t),{success:!0,uri:e.uri,imgData:e}})).catch((function(e){return console.log(e),{success:!1,error:e}}))}return{success:!1,imagenotfound:!0}})),function(){return ce.apply(this,arguments)}),pe=_e.reducePixelsGst=(de=(0,t.default)((function*(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:'';return''!=e?(arguments.length>1?arguments[1]:void 0)>2e3||(arguments.length>2?arguments[2]:void 0)>2e3?yield r.default.createResizedImage(e,2e3,2e3,'JPEG',80,0,null,!1,{onlyScaleDown:!0,mode:'contain'}).then((function(e){var t=Te(e.size);return console.log('after pixel reduce file size , w, h:',t,e.width,e.height),{success:!0,uri:e.uri}})).catch((function(e){return console.log(e),{success:!1,error:e}})):{success:!0,uri:e}:{success:!1,imagenotfound:!0}})),function(){return de.apply(this,arguments)});function he(e,t,n){return ge.apply(this,arguments)}function ge(){return ge=(0,t.default)((function*(e,n,r){var a,l=arguments.length>3&&void 0!==arguments[3]?arguments[3]:'';return new Promise((a=(0,t.default)((function*(t,a){if(console.log("start Add_metadataToImage RN: ",(0,o.default)().format("MM/DD/YYYY HH:mm:ss")),null!=i.default&&''!=l){var u={text:n,BottomText:r,textStyle:{TopTextfontSize:parseInt(.06*e.width),TopText_x:parseInt(.01*e.width),TopText_y:parseInt(.06*e.width+50),BottomTextfontSize:parseInt(.03*e.width),BottomText_x:parseInt(.01*e.width),BottomText_y:parseInt(e.height+.03*e.width+30)}},s={src:l,height:e.height,width:e.width,ExtendedHeight:e.ExtendedHeight},c=yield i.default.NativeImageMarkText(JSON.stringify(u),JSON.stringify(s));console.log("end Add_metadataToImage RN: ",(0,o.default)().format("MM/DD/YYYY HH:mm:ss"),c),t(null!=c&&'string'==typeof c?{success:!0,url:c}:{success:!1,error:"Cannot add metdata!"})}else console.log("end Add_metadataToImage RN: ",(0,o.default)().format("MM/DD/YYYY HH:mm:ss")),t({success:!1,error:"Native Module 'ImageMarkText' not found!"})})),function(e,t){return a.apply(this,arguments)})).then((function(e){return e})).catch((function(e){return console.log("err:",e),{success:!1,error:e}}))})),ge.apply(this,arguments)}function me(){return me=(0,t.default)((function*(e,n){var o=e.destFilePath,r=e.imgurl,i=e.imgWidth,l=e.imgHeight,u=e.mark_text1,c=e.mark_text2;if('ios'==s.Platform.OS)return!0;var d,f=yield ve(r,i,l);if(f.success){var p=null!=f.uri&&''!=f.uri?f.uri.replace('file://',''):'',h=null!=f.imgData?f.imgData:{};console.log("resized_url:",p);var y=1.1;h.width>h.height&&(y=1.2);var S={uri:p,width:parseInt(h.width),height:parseInt(h.height),ExtendedHeight:parseInt(h.height*y)},v=yield le(S,u,c,p);if(v.success&&null!=v.url){var I=v.url,w=yield Ie(I,i,l);return w.success?((yield a.exists(o))&&(yield a.unlink(o)),console.log(w.uri,o,'console....'),yield a.moveFile(w.uri,o).then((d=(0,t.default)((function*(e){return console.log('file restored to : ',o),yield a.unlink(r),yield a.unlink(p),yield a.unlink(I),!0})),function(e){return d.apply(this,arguments)})).catch((function(e){return console.log("err:",e),!1}))):((0,_r(_d[20]).notify)("Error while reducing pixels! "+(f.error?f.error:'')),!1)}return(0,_r(_d[20]).notify)("Error while adding metadata in image!"+(v.error?v.error:'')),!0}return(0,_r(_d[20]).notify)("Error while resizing image! "+(f.error?f.error:'')),!1})),me.apply(this,arguments)}var ye,Se,ve=_e.resizeImage=(ye=(0,t.default)((function*(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:'',t=arguments.length>1?arguments[1]:void 0,n=arguments.length>2?arguments[2]:void 0;return''!=e?yield r.default.createResizedImage(e,t,n,'JPEG',100,0,null,!1,{onlyScaleDown:!0}).then((function(e){var t=Te(e.size);return console.log('resizeImage: reduced filesize:',t),{success:!0,uri:e.uri,imgData:e}})).catch((function(e){return console.log(e),{success:!1,error:e}})):{success:!1,imagenotfound:!0}})),function(){return ye.apply(this,arguments)}),Ie=_e.reducePixels=(Se=(0,t.default)((function*(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:'';return''!=e?(arguments.length>1?arguments[1]:void 0)>1100||(arguments.length>2?arguments[2]:void 0)>1100?yield r.default.createResizedImage(e,1100,1100,'JPEG',40,0,null,!1,{onlyScaleDown:!0,mode:'contain'}).then((function(e){var t=Te(e.size);return console.log('after pixel reduce file size , w, h:',t,e.width,e.height),{success:!0,uri:e.uri}})).catch((function(e){return console.log(e),{success:!1,error:e}})):{success:!0,uri:e}:{success:!1,imagenotfound:!0}})),function(){return Se.apply(this,arguments)});function we(){return(we=(0,t.default)((function*(e){if(''==e.baseurl||null==e.baseurl||null==e.baseurl){var t=yield(0,_r(_d[21]).get_item)('projectInfo'),n=(yield(0,_r(_d[21]).get_item)('projectCode'),Pe(null!=t?JSON.parse(t):{}));e.set_project(n)}}))).apply(this,arguments)}function Pe(e,t,n){var o=null!=e.imageUploadURL?e.imageUploadURL+'/':'';return{pid:t||'',pname:e.projectName||'',pcode:e.ProjectCode||'',alldata:e,baseurl:e.baseURL||_r(_d[15]).baseurl,companylogo:e.login_logo_Url||'',splashlogo:e.splash_logo_Url||'',drawerlogo:e.menu_top_logo||'',imageUploadUrl:o,GeoFenceEnable:null!=e.GeoFenceEnable_checkin&&1==e.GeoFenceEnable_checkin,GeoFenceRadius:e.GeoFenceRadius_checkin||0,GFEnable_checkout:null!=e.GeoFenceEnable_checkout&&1==e.GeoFenceEnable_checkout,GFRadius_checkout:e.GeoFenceRadius_checkout||0,DBCI_GeoFenceEnable:null!=e.DBCI_GeoFenceEnable&&1==e.DBCI_GeoFenceEnable,DBCI_GeoFenceRadius:e.DBCI_GeoFenceRadius||0,DBCO_GeoFenceEnable:null!=e.DBCO_GeoFenceEnable&&1==e.DBCO_GeoFenceEnable,DBCO_GeoFenceRadius:e.DBCO_GeoFenceRadius||0,CheckOut_PhotoReq:null!=e.PhotoRequired_Checkout&&e.PhotoRequired_Checkout,CameraGallery:null!=e.CameraGallery&&e.CameraGallery,CheckInCameraGallery:null!=e.CheckInCameraGallery&&e.CheckInCameraGallery,DownloadKey:null!=e.DownloadKey?e.DownloadKey:'',OQAD_TimeOut:null!=e.OQAD_TimeOut?e.OQAD_TimeOut:_r(_d[15]).OQAD_TimeConst,ShowMenuType:null==e.ShowMenuType||e.ShowMenuType,ShowStoreChecklist:null!=e.ShowStoreChecklist&&e.ShowStoreChecklist,RefImagePopUpTime:null!=e.RefImagePopUpTime?e.RefImagePopUpTime:0,AdhocActivated:null!=e.AdhocActivated?e.AdhocActivated:"",ShowBeatPlanList:null!=e.ShowBeatPlanList&&e.ShowBeatPlanList,ShowDBPOSM:null!=e.ShowDBPOSM&&e.ShowDBPOSM,ShowStoreAdd:null!=e.ShowStoreAdd&&e.ShowStoreAdd,ShowStoreProfile:null!=e.ShowStoreProfile&&e.ShowStoreProfile,ShowReportAfterCheckIn:null!=e.ShowReportAfterCheckIn&&e.ShowReportAfterCheckIn,ShowCompactStoreProfile:null!=e.ShowCompactStoreProfile&&e.ShowCompactStoreProfile,ShowSideMenuKYC:null!=e.ShowSideMenuKYC&&e.ShowSideMenuKYC,ShowNonMerList:null!=e.ShowNonMerList&&e.ShowNonMerList,Show_VisitorFeedBack:null!=e.Show_VisitorFeedBack&&e.Show_VisitorFeedBack,Show_ConsumerSection:null!=e.Show_ConsumerSection&&e.Show_ConsumerSection,Clear_storage:null!=n&&n,ShowNonProgram:null!=e.ShowNonProgram&&e.ShowNonProgram,FaceRecognition:null!=e.FaceRecognition&&e.FaceRecognition,Gyancast:null!=e.Gyancast&&e.Gyancast,Chatbot:null!=e.Chatbot&&e.Chatbot,NoCheckIn_Photo:null!=e.NoCheckIn_Photo&&e.NoCheckIn_Photo,ShowStoreSearch:null!=e.ShowStoreSearch&&e.ShowStoreSearch,ShowStoreSearchLabel:null!=e.ShowStoreSearchLabel&&''!=e.ShowStoreSearchLabel?e.ShowStoreSearchLabel:_r(_d[15]).StoreSearch_def,PartialSaveAllow:null!=e.PartialSaveAllow&&e.PartialSaveAllow,CheckinOpenBackCamera:null!=e.CheckinOpenBackCamera&&e.CheckinOpenBackCamera,CheckoutOpenBackCamera:null!=e.CheckoutOpenBackCamera&&e.CheckoutOpenBackCamera,CheckInSwitchingCamera:null!=e.CheckInSwitchingCamera&&e.CheckInSwitchingCamera,NonProgramLabel:null!=e.NonProgramLabel&&''!=e.NonProgramLabel?e.NonProgramLabel:_r(_d[15]).NonProgramLabel_def,IR_CameraEnableOnApp:null!=e.IR_CameraEnableOnApp&&e.IR_CameraEnableOnApp,IR_Creds:null!=e.IR_Creds?e.IR_Creds:{},ShowAddNewStore:null!=e.ShowAddNewStore&&e.ShowAddNewStore,AddNewStoreInJCP:null!=e.AddNewStoreInJCP&&e.AddNewStoreInJCP,AddNewStoreVerificationReq:null!=e.AddNewStoreVerificationReq&&e.AddNewStoreVerificationReq,ShowContractForm:null!=e.ShowContractForm&&e.ShowContractForm,WarehouseShow:null!=e.WarehouseShow&&e.WarehouseShow,Show_OldMTDReports:1==e.Show_OldMTDReports||"true"==e.Show_OldMTDReports,Allow_Change_Password:null!=e.Allow_Change_Password&&e.Allow_Change_Password,forget_Password_on_LoginPage:null!=e.forget_Password_on_LoginPage&&e.forget_Password_on_LoginPage}}function Te(e){if(0==e)return'0 Byte';var t=parseInt(Math.floor(Math.log(e)/Math.log(1024)));return Math.round(e/Math.pow(1024,t),2)+' '+['Bytes','KB','MB','GB','TB'][t]}function De(){return De=(0,t.default)((function*(e){var n=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return new Promise((function(o,r){var a;_r(_d[15]).db.transaction((a=(0,t.default)((function*(r){var a,i="select * from Mapping_MenuConfiguration ";n||(i+=`where ScreenName='${e.ScreenName}'`),yield r.executeSql(i,[],(a=(0,t.default)((function*(e,t){if(t.rows.length>0)for(var n=[],r=0;r0)for(var o=[],r=0;r1&&void 0!==arguments[1]?arguments[1]:'';return new Promise((function(o,r){var a;_r(_d[15]).db.transaction((a=(0,t.default)((function*(r){var a,i=(0,_r(_d[17]).Q_MenuList)(e,n);yield r.executeSql(i,[],(a=(0,t.default)((function*(e,t){t.rows.length>0?o(!0):o(!1)})),function(e,t){return a.apply(this,arguments)}),(function(e,t){console.log(t),o(!0)}))})),function(e){return a.apply(this,arguments)}))})).catch((function(e){return console.log(e),!1}))})),Ne.apply(this,arguments)}_e.useOrientation=function(e,t){return t>=e?'PORTRAIT':'LANDSCAPE'};var Ce;_e.isDeviceTimeValid=(Ce=(0,t.default)((function*(){var t='';try{var n=yield u.default.fetch(),o=yield l.default.getItem(_r(_d[15]).LAST_ServerAPI_CALL),r=o?parseInt(o,10):0,a=Date.now();if(a-r<3e5)return void console.log("Function call blocked to avoid frequent calls");if(yield l.default.setItem(_r(_d[15]).LAST_ServerAPI_CALL,a.toString()),!n.isConnected)return!1;var i=yield h(),f=null==i?void 0:i.CheckTime;if('string'==typeof f&&''!==f.trim()?t=f:console.warn('CheckTime is missing or invalid.'),''==t||!t||'string'!=typeof t)return console.warn("Invalid serverDateTimeString input",t),yield l.default.setItem(_r(_d[15]).LAST_ServerAPI_CALL,o),!1;var p=t.split(" "),y=(0,e.default)(p,2),S=y[0],v=y[1],I=S.split("/").map(Number),w=(0,e.default)(I,3),P=w[0],T=w[1],D=w[2],A=v.split(":").map(Number),_=(0,e.default)(A,3),O=_[0],N=_[1],C=_[2],b=new Date(D,P-1,T,O,N,C),R=new Date,M=b.getDate()===R.getDate()&&b.getMonth()===R.getMonth()&&b.getFullYear()===R.getFullYear(),E=Math.abs(b.getTime()-R.getTime())/6e4;return console.log("server_datetime_with_localDateTime",M+"---",E+"----"+t+"\n"+b+"\n"+R),!(!M||E>10)||(yield l.default.setItem(_r(_d[15]).LAST_ServerAPI_CALL,o),s.Alert.alert('Device Date/Time Mismatch','To continue, please ensure your device\u2019s date and time are correct or set to automatic.',[{text:'Go to Settings',onPress:function(){'android'===s.Platform.OS?c.default.openSettings('android.settings.DATE_SETTINGS'):s.Linking.openURL('App-Prefs:General&path=DATE_AND_TIME'),setTimeout((function(){d.default.exitApp()}),1e3)}}],{cancelable:!1}),!1)}catch(e){return console.error("Time validation error:",e),!1}})),function(){return Ce.apply(this,arguments)})}),784,[8,26,313,153,785,783,786,787,790,791,794,671,6,800,782,801,833,837,838,839,840,842]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.TextBackgroundType=e.Position=e.ImageFormat=void 0;var t=r(d[0])(r(d[1])),o=r(d[0])(r(d[2])),n=r(d[3]),s=n.Image.resolveAssetSource,c="The package 'react-native-image-marker' doesn't seem to be linked. Make sure: \n\n"+n.Platform.select({ios:"- You have run 'pod install'\n",default:''})+"- You rebuilt the app after installing the package\n- You are not using Expo Go\n",u=(e.Position=(function(t){return t.topLeft="topLeft",t.topCenter="topCenter",t.topRight="topRight",t.bottomLeft="bottomLeft",t.bottomCenter="bottomCenter",t.bottomRight="bottomRight",t.center="center",t})({}),e.TextBackgroundType=(function(t){return t.stretchX="stretchX",t.stretchY="stretchY",t.none="fit",t})({}),e.ImageFormat=(function(t){return t.png="png",t.jpg="jpg",t.base64="base64",t})({}),n.NativeModules.ImageMarker?n.NativeModules.ImageMarker:new Proxy({},{get:function(){throw new Error(c)}})),f=(0,o.default)((function o(){(0,t.default)(this,o)}),null,[{key:"markText",value:function(t){var o=t.backgroundImage;if(!o||!o.src)throw new Error('please set image!');var n=s(o.src);return n||(n={uri:o.src,__packager_asset:!1}),t.backgroundImage.src=n,t.maxSize=t.maxSize||2048,u.markWithText(t)}},{key:"markImage",value:function(t){var o=t.backgroundImage,n=t.watermarkImage,c=void 0===n?{}:n,f=t.watermarkImages,k=void 0===f?[]:f;if(!o||!o.src)throw new Error('please set image!');if((!c||!c.src)&&k.some((function(t){return!t.src})))throw new Error('please set mark image!');var l=s(o.src);if(l||(l={uri:o.src,__packager_asset:!1}),c&&t.watermarkImage){var p=s(c.src);p||(p={uri:c.src,__packager_asset:!1}),t.watermarkImage.src=p}if(k.length>0)for(var h of k){var v=s(h.src);v||(v={uri:h.src,__packager_asset:!1}),h.src=v}else t.watermarkImages=[];return t.backgroundImage.src=l,t.maxSize=t.maxSize||2048,u.markWithImage(t)}}]);e.default=f}),785,[8,17,18,6]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var o=r(d[0]),n=o.NativeModules.ImageResizerAndroid,t={};function l(o){var n=o.mode||'contain',t=['contain','cover','stretch'];if(-1===t.indexOf(n))throw new Error(`createResizedImage's options.mode must be one of "${t.join('", "')}"`);if(o.onlyScaleDown&&'boolean'!=typeof o.onlyScaleDown)throw new Error(`createResizedImage's option.onlyScaleDown must be a boolean: got ${o.onlyScaleDown}`);return{mode:n,onlyScaleDown:!!o.onlyScaleDown}}t='android'===o.Platform.OS?{createResizedImage:function(o,t,c,s,u){var f=arguments.length>5&&void 0!==arguments[5]?arguments[5]:0,v=arguments.length>6?arguments[6]:void 0,w=arguments.length>7&&void 0!==arguments[7]&&arguments[7],h=l(arguments.length>8&&void 0!==arguments[8]?arguments[8]:{});return new Promise((function(l,y){n.createResizedImage(o,t,c,s,u,f,v,w,h,l,y)}))}}:{createResizedImage:function(n,t,c,s,u){var f=arguments.length>5&&void 0!==arguments[5]?arguments[5]:0,v=arguments.length>6?arguments[6]:void 0,w=arguments.length>7&&void 0!==arguments[7]&&arguments[7],h=arguments.length>8&&void 0!==arguments[8]?arguments[8]:{};if('JPEG'!==s&&'PNG'!==s)throw new Error('Only JPEG and PNG format are supported by createResizedImage');var y=l(h);return new Promise((function(l,h){o.NativeModules.ImageResizer.createResizedImage(n,t,c,s,u,f,v,w,y,(function(o,n){if(o)return h(o);l(n)}))}))}};e.default=t}),786,[6]); +__d((function(g,r,i,a,m,_e,d){'use strict';var e=r(d[0]).NativeModules.RNFSManager,n=new(0,r(d[0]).NativeEventEmitter)(e),o=e.RNFSFileTypeRegular,t=e.RNFSFileTypeDirectory,s=0,l=function(){return s+=1},c=function(e){return e.startsWith('file://')?e.slice(7):e};function u(e,n,o){var t={encoding:'utf8'};return n&&('string'==typeof n?t.encoding=n:'object'==typeof n&&(t=n)),o(c(e)).then((function(e){var n;if('utf8'===t.encoding)n=r(d[1]).decode(r(d[2]).decode(e));else if('ascii'===t.encoding)n=r(d[2]).decode(e);else{if('base64'!==t.encoding)throw new Error('Invalid encoding type "'+String(t.encoding)+'"');n=e}return n}))}function f(e,n){return n(c(e)).then((function(e){return e.map((function(e){return{ctime:e.ctime&&new Date(1e3*e.ctime)||null,mtime:e.mtime&&new Date(1e3*e.mtime)||null,name:e.name,path:e.path,size:e.size,isFile:function(){return e.type===o},isDirectory:function(){return e.type===t}}}))}))}var p={mkdir:function(n){var o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return e.mkdir(c(n),o).then((function(){}))},moveFile:function(n,o){var t=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return e.moveFile(c(n),c(o),t).then((function(){}))},copyFile:function(n,o){var t=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return e.copyFile(c(n),c(o),t).then((function(){}))},pathForBundle:function(n){return e.pathForBundle(n)},pathForGroup:function(n){return e.pathForGroup(n)},getFSInfo:function(){return e.getFSInfo()},getAllExternalFilesDirs:function(){return e.getAllExternalFilesDirs()},unlink:function(n){return e.unlink(c(n)).then((function(){}))},exists:function(n){return e.exists(c(n))},stopDownload:function(n){e.stopDownload(n)},resumeDownload:function(n){e.resumeDownload(n)},isResumable:function(n){return e.isResumable(n)},stopUpload:function(n){e.stopUpload(n)},completeHandlerIOS:function(n){return e.completeHandlerIOS(n)},readDir:function(n){return f(n,e.readDir)},readDirAssets:function(n){if(!e.readDirAssets)throw new Error('readDirAssets is not available on this platform');return f(n,e.readDirAssets)},existsAssets:function(n){if(!e.existsAssets)throw new Error('existsAssets is not available on this platform');return e.existsAssets(n)},existsRes:function(n){if(!e.existsRes)throw new Error('existsRes is not available on this platform');return e.existsRes(n)},readdir:function(e){return p.readDir(c(e)).then((function(e){return e.map((function(e){return e.name}))}))},setReadable:function(n,o,t){return e.setReadable(n,o,t).then((function(e){return e}))},stat:function(n){return e.stat(c(n)).then((function(e){return{path:n,ctime:new Date(1e3*e.ctime),mtime:new Date(1e3*e.mtime),size:e.size,mode:e.mode,originalFilepath:e.originalFilepath,isFile:function(){return e.type===o},isDirectory:function(){return e.type===t}}}))},readFile:function(n,o){return u(n,o,e.readFile)},read:function(n){var o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,t=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,s=arguments.length>3?arguments[3]:void 0,l={encoding:'utf8'};return s&&('string'==typeof s?l.encoding=s:'object'==typeof s&&(l=s)),e.read(c(n),o,t).then((function(e){var n;if('utf8'===l.encoding)n=r(d[1]).decode(r(d[2]).decode(e));else if('ascii'===l.encoding)n=r(d[2]).decode(e);else{if('base64'!==l.encoding)throw new Error('Invalid encoding type "'+String(l.encoding)+'"');n=e}return n}))},readFileAssets:function(n,o){if(!e.readFileAssets)throw new Error('readFileAssets is not available on this platform');return u(n,o,e.readFileAssets)},readFileRes:function(n,o){if(!e.readFileRes)throw new Error('readFileRes is not available on this platform');return u(n,o,e.readFileRes)},hash:function(n,o){return e.hash(c(n),o)},copyFileAssets:function(n,o){if(!e.copyFileAssets)throw new Error('copyFileAssets is not available on this platform');return e.copyFileAssets(c(n),c(o)).then((function(){}))},copyFileRes:function(n,o){if(!e.copyFileRes)throw new Error('copyFileRes is not available on this platform');return e.copyFileRes(n,c(o)).then((function(){}))},copyAssetsFileIOS:function(n,o,t,s){var l=arguments.length>4&&void 0!==arguments[4]?arguments[4]:1,c=arguments.length>5&&void 0!==arguments[5]?arguments[5]:1,u=arguments.length>6&&void 0!==arguments[6]?arguments[6]:'contain';return e.copyAssetsFileIOS(n,o,t,s,l,c,u)},copyAssetsVideoIOS:function(n,o){return e.copyAssetsVideoIOS(n,o)},writeFile:function(n,o,t){var s,l={encoding:'utf8'};if(t&&('string'==typeof t?l.encoding=t:'object'==typeof t&&(l=Object.assign({},l,t))),'utf8'===l.encoding)s=r(d[2]).encode(r(d[1]).encode(o));else if('ascii'===l.encoding)s=r(d[2]).encode(o);else{if('base64'!==l.encoding)throw new Error('Invalid encoding type "'+l.encoding+'"');s=o}return e.writeFile(c(n),s,l).then((function(){}))},appendFile:function(n,o,t){var s,l={encoding:'utf8'};if(t&&('string'==typeof t?l.encoding=t:'object'==typeof t&&(l=t)),'utf8'===l.encoding)s=r(d[2]).encode(r(d[1]).encode(o));else if('ascii'===l.encoding)s=r(d[2]).encode(o);else{if('base64'!==l.encoding)throw new Error('Invalid encoding type "'+l.encoding+'"');s=o}return e.appendFile(c(n),s)},write:function(n,o,t,s){var l,u={encoding:'utf8'};if(s&&('string'==typeof s?u.encoding=s:'object'==typeof s&&(u=s)),'utf8'===u.encoding)l=r(d[2]).encode(r(d[1]).encode(o));else if('ascii'===u.encoding)l=r(d[2]).encode(o);else{if('base64'!==u.encoding)throw new Error('Invalid encoding type "'+u.encoding+'"');l=o}return void 0===t&&(t=-1),e.write(c(n),l,t).then((function(){}))},downloadFile:function(o){if('object'!=typeof o)throw new Error('downloadFile: Invalid value for argument `options`');if('string'!=typeof o.fromUrl)throw new Error('downloadFile: Invalid value for property `fromUrl`');if('string'!=typeof o.toFile)throw new Error('downloadFile: Invalid value for property `toFile`');if(o.headers&&'object'!=typeof o.headers)throw new Error('downloadFile: Invalid value for property `headers`');if(o.background&&'boolean'!=typeof o.background)throw new Error('downloadFile: Invalid value for property `background`');if(o.progressDivider&&'number'!=typeof o.progressDivider)throw new Error('downloadFile: Invalid value for property `progressDivider`');if(o.progressInterval&&'number'!=typeof o.progressInterval)throw new Error('downloadFile: Invalid value for property `progressInterval`');if(o.readTimeout&&'number'!=typeof o.readTimeout)throw new Error('downloadFile: Invalid value for property `readTimeout`');if(o.connectionTimeout&&'number'!=typeof o.connectionTimeout)throw new Error('downloadFile: Invalid value for property `connectionTimeout`');if(o.backgroundTimeout&&'number'!=typeof o.backgroundTimeout)throw new Error('downloadFile: Invalid value for property `backgroundTimeout`');var t=l(),s=[];o.begin&&s.push(n.addListener('DownloadBegin',(function(e){e.jobId===t&&o.begin(e)}))),o.progress&&s.push(n.addListener('DownloadProgress',(function(e){e.jobId===t&&o.progress(e)}))),o.resumable&&s.push(n.addListener('DownloadResumable',(function(e){e.jobId===t&&o.resumable(e)})));var u={jobId:t,fromUrl:o.fromUrl,toFile:c(o.toFile),headers:o.headers||{},background:!!o.background,progressDivider:o.progressDivider||0,progressInterval:o.progressInterval||0,readTimeout:o.readTimeout||15e3,connectionTimeout:o.connectionTimeout||5e3,backgroundTimeout:o.backgroundTimeout||36e5,hasBeginCallback:o.begin instanceof Function,hasProgressCallback:o.progress instanceof Function,hasResumableCallback:o.resumable instanceof Function};return{jobId:t,promise:e.downloadFile(u).then((function(e){return s.forEach((function(e){return e.remove()})),e})).catch((function(e){return Promise.reject(e)}))}},uploadFiles:function(o){if(!e.uploadFiles)return{jobId:-1,promise:Promise.reject(new Error('`uploadFiles` is unsupported on this platform'))};var t=l(),s=[];if('object'!=typeof o)throw new Error('uploadFiles: Invalid value for argument `options`');if('string'!=typeof o.toUrl)throw new Error('uploadFiles: Invalid value for property `toUrl`');if(!Array.isArray(o.files))throw new Error('uploadFiles: Invalid value for property `files`');if(o.headers&&'object'!=typeof o.headers)throw new Error('uploadFiles: Invalid value for property `headers`');if(o.fields&&'object'!=typeof o.fields)throw new Error('uploadFiles: Invalid value for property `fields`');if(o.method&&'string'!=typeof o.method)throw new Error('uploadFiles: Invalid value for property `method`');o.begin?s.push(n.addListener('UploadBegin',o.begin)):o.beginCallback&&s.push(n.addListener('UploadBegin',o.beginCallback)),o.progress?s.push(n.addListener('UploadProgress',o.progress)):o.progressCallback&&s.push(n.addListener('UploadProgress',o.progressCallback));var c={jobId:t,toUrl:o.toUrl,files:o.files,binaryStreamOnly:o.binaryStreamOnly||!1,headers:o.headers||{},fields:o.fields||{},method:o.method||'POST',hasBeginCallback:o.begin instanceof Function||o.beginCallback instanceof Function,hasProgressCallback:o.progress instanceof Function||o.progressCallback instanceof Function};return{jobId:t,promise:e.uploadFiles(c).then((function(e){return s.forEach((function(e){return e.remove()})),e}))}},touch:function(n,o,t){if(t&&!(t instanceof Date))throw new Error('touch: Invalid value for argument `ctime`');if(o&&!(o instanceof Date))throw new Error('touch: Invalid value for argument `mtime`');return e.touch(c(n),o&&o.getTime(),0)},scanFile:function(n){return e.scanFile(n)},MainBundlePath:e.RNFSMainBundlePath,CachesDirectoryPath:e.RNFSCachesDirectoryPath,ExternalCachesDirectoryPath:e.RNFSExternalCachesDirectoryPath,DocumentDirectoryPath:e.RNFSDocumentDirectoryPath,DownloadDirectoryPath:e.RNFSDownloadDirectoryPath,ExternalDirectoryPath:e.RNFSExternalDirectoryPath,ExternalStorageDirectoryPath:e.RNFSExternalStorageDirectoryPath,TemporaryDirectoryPath:e.RNFSTemporaryDirectoryPath,LibraryDirectoryPath:e.RNFSLibraryDirectoryPath,PicturesDirectoryPath:e.RNFSPicturesDirectoryPath,FileProtectionKeys:e.RNFSFileProtectionKeys};m.exports=p}),787,[6,788,789]); +__d((function(g,r,i,a,m,e,d){!(function(n){var t,o,u,f=String.fromCharCode;function c(n){for(var t,o,u=[],f=0,c=n.length;f=55296&&t<=56319&&f65535&&(c+=f((t-=65536)>>>10&1023|55296),t=56320|1023&t),c+=f(t);return c}function v(n){if(n>=55296&&n<=57343)throw Error('Lone surrogate U+'+n.toString(16).toUpperCase()+' is not a scalar value')}function l(n,t){return f(n>>t&63|128)}function s(n){if(0==(4294967168&n))return f(n);var t='';return 0==(4294965248&n)?t=f(n>>6&31|192):0==(4294901760&n)?(v(n),t=f(n>>12&15|224),t+=l(n,6)):0==(4292870144&n)&&(t=f(n>>18&7|240),t+=l(n,12),t+=l(n,6)),t+=f(63&n|128)}function w(){if(u>=o)throw Error('Invalid byte index');var n=255&t[u];if(u++,128==(192&n))return 63&n;throw Error('Invalid continuation byte')}function E(){var n,f;if(u>o)throw Error('Invalid byte index');if(u==o)return!1;if(n=255&t[u],u++,0==(128&n))return n;if(192==(224&n)){if((f=(31&n)<<6|w())>=128)return f;throw Error('Invalid continuation byte')}if(224==(240&n)){if((f=(15&n)<<12|w()<<6|w())>=2048)return v(f),f;throw Error('Invalid continuation byte')}if(240==(248&n)&&(f=(7&n)<<18|w()<<12|w()<<6|w())>=65536&&f<=1114111)return f;throw Error('Invalid UTF-8 detected')}n.version='3.0.0',n.encode=function(n){for(var t=c(n),o=t.length,u=-1,f='';++u>18&63)+d.charAt(c>>12&63)+d.charAt(c>>6&63)+d.charAt(63&c);return 2==f?(n=t.charCodeAt(A)<<8,o=t.charCodeAt(++A),s+=d.charAt((c=n+o)>>10)+d.charAt(c>>4&63)+d.charAt(c<<2&63)+'='):1==f&&(c=t.charCodeAt(A),s+=d.charAt(c>>2)+d.charAt(c<<4&63)+'=='),s},decode:function(t){var n=(t=String(t).replace(f,'')).length;n%4==0&&(n=(t=t.replace(/==?$/,'')).length),(n%4==1||/[^+a-zA-Z0-9/]/.test(t))&&h('Invalid character: the string to be decoded is not correctly encoded.');for(var o,a,c=0,s='',A=-1;++A>(-2*c&6)));return s},version:'0.1.0'};if('function'==typeof define&&'object'==typeof define.amd&&define.amd)define((function(){return s}));else if(n&&!n.nodeType)if(o)o.exports=s;else for(var A in s)s.hasOwnProperty(A)&&(n[A]=s[A]);else t.base64=s})(this)}),789,[]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var t=r(d[0]).NativeModules.ImageMarkText;e.default=t}),790,[6]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var t={getfcmtokenstatus:(0,r(d[0]).createApiFunction)('getFCMTokenStatus'),updatefcmtokenstatus:(0,r(d[0]).createApiFunction)('UpdateFCMToken'),getnotificationlist:(0,r(d[0]).createApiFunction)('GetNotificationListofUser'),updatenotificationreadstatus:(0,r(d[0]).createApiFunction)('UpdateNotificationReadStatus')};e.default=t}),791,[792]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.createApiFunction=function(t){return console.log(t,"urlllll"),{post:function(o){return s(`${t}/${arguments.length>1&&void 0!==arguments[1]?arguments[1]:''}`,'POST',o)},patch:function(o,n){return s(`${t}/${o}`,'PATCH',n)},put:function(o,n){return s(`${t}/${o}`,'PUT',n)}}};var t=r(d[0])(r(d[1])),o=r(d[0])(r(d[2])),n='https://api1.parinaam.in/api/notify/';function s(t,o,n){return c.apply(this,arguments)}function c(){return(c=(0,t.default)((function*(t,s,c){var u={'Access-Control-Allow-Origin':'*'};c instanceof FormData||(u['Content-Type']='application/json');var p={method:s,headers:u,body:c?l(c):void 0};try{var f=n+(0,o.default)(t);console.log(`Fetching URL: ${f}`),console.log('Request options:',p);var h,y=yield fetch(f,p),T=yield y.text();if(console.log('Raw response:',T),!y.ok)throw console.error('HTTP error:',y.status,y.statusText),new Error(`HTTP error: ${y.status} ${y.statusText}`);try{h=JSON.parse(T)}catch(t){throw console.error('Error parsing JSON:',t),new Error(`Error parsing JSON: ${t}`)}return h}catch(t){throw console.error('Fetch error:',t),t}}))).apply(this,arguments)}function l(t){return t instanceof FormData?t:JSON.stringify(t)}}),792,[8,313,793]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function n(t){var u=t.replace(/\/+/g,'/').replace(/\/+$/,'');if(u.includes('?')){var l=u.split('?');return n(l[0])+'?'+l[1]}return u}}),793,[]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0,Object.defineProperty(e,"useAsyncStorage",{enumerable:!0,get:function(){return r(d[0]).useAsyncStorage}});var t=r(d[1])(r(d[2]));e.default=t.default}),794,[795,8,796]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.useAsyncStorage=function(n){return{getItem:function(){for(var u=arguments.length,f=new Array(u),o=0;o1&&'string'!=typeof s){if(null==s)throw new Error(`[AsyncStorage] Passing null/undefined as value is not supported. If you want to remove value, Use .removeItem method instead.\nPassed value: ${s}\nPassed key: ${o}\n`);console.warn(`[AsyncStorage] The value for key "${o}" is not a string. This can lead to unexpected behavior/errors. Consider stringifying it.\nPassed value: ${s}\nPassed key: ${o}\n`)}},_e.convertError=e,_e.convertErrors=function(t){var o=n(t);return o?o.map((function(n){return e(n)})):null}}),799,[]); +__d((function(g,r,i,a,m,e,d){var n=r(d[0]),t=(n.Platform,n.NativeModules.SendIntentAndroid||{}),o={TEXT_PLAIN:t.TEXT_PLAIN,TEXT_HTML:t.TEXT_HTML,sendText:function(n){"title"in n&&null!=n.title&&n.title.length>0?t.sendTextWithTitle(n.title,n.text,n.type||"text/plain"):t.sendText(n.text,n.type||"text/plain")},sendPhoneCall:function(n){var o=arguments.length>1&&void 0!==arguments[1]&&arguments[1];t.sendPhoneCall(n,o)},sendPhoneDial:function(n){var o=arguments.length>1&&void 0!==arguments[1]&&arguments[1];t.sendPhoneDial(n,o)},sendSms:function(n){var o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;t.sendSms(n,o)},addCalendarEvent:function(n){t.addCalendarEvent(n.title,n.description,n.startDate,n.endDate,n.recurrence,n.location,n.isAllDay||!1)},isAppInstalled:function(n){return t.isAppInstalled(n)},installRemoteApp:function(n,o){return t.installRemoteApp(n,o)},openCalendar:function(){t.openCalendar()},sendMail:function(n){var o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",p=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"";t.sendMail(n,o,p)},openChooserWithOptions:function(n,o){t.openChooserWithOptions(n,o)},openChooserWithMultipleOptions:function(n,o){t.openChooserWithMultipleOptions(n,o)},openMaps:function(n){t.openMaps(n)},openCamera:function(){t.openCamera()},openMapsWithRoute:function(n,o){t.openMapsWithRoute(n,o)},shareTextToLine:function(n){t.shareTextToLine(n)},shareImageToInstagram:function(n,o){t.shareImageToInstagram(n,o)},openSettings:function(n){t.openSettings(n)},getVoiceMailNumber:function(){return t.getVoiceMailNumber()},getPhoneNumber:function(){return t.getPhoneNumber()},gotoHomeScreen:function(){return t.gotoHomeScreen()},openApp:function(n,o){return t.openApp(n,o||{})},openAppWithData:function(n,o,p,l){return t.openAppWithData(n,o,p,l||{})},openChromeIntent:function(n){return t.openChromeIntent(n)},openFileChooser:function(n,o){return t.openFileChooser(n,o)},openFilePicker:function(n,o){var p=n.type,l=void 0===p?"*/*":p,u=n.title,s=void 0===u?"Choose File":u;return t.openFilePicker({type:l,title:s},o)},openEmailApp:function(){t.openEmailApp()},openAllEmailApp:function(){t.openAllEmailApp()},openDownloadManager:function(){t.openDownloadManager()},requestIgnoreBatteryOptimizations:function(){return t.requestIgnoreBatteryOptimizations()},showIgnoreBatteryOptimizationsSettings:function(){t.showIgnoreBatteryOptimizationsSettings()},openAppWithUri:function(n,o){return t.openAppWithUri(n,o||{})}};m.exports=o}),800,[6]); +__d((function(g,_r,_i,a,m,_e,d){Object.defineProperty(_e,"__esModule",{value:!0}),_e.visiCoolerImgPath=_e.version=_e.sloganline=_e.logoImage=_e.loaderTimeOut_longer=_e.loaderTimeOut=_e.kycImagePath=_e.gMap_key=_e.fixedurl=_e.defUploadFolder=_e.db=_e.cpm_logo=_e.copyrightText=_e.common_ImagePath=_e.colors_Arr=_e.baseurl=_e.appname=_e.VisitorLoginImageFolderPath=_e.VisitorImageFolderPath=_e.URL_IMAGE=_e.TrainingContentFolderPath=_e.StoreSearch_def=_e.StoreCheckListImagePath=_e.ServerDTurl=_e.Production=_e.OQAD_TimeConst=_e.NonProgramLabel_def=_e.LAST_ServerAPI_CALL=_e.KPIFolders=_e.ImageFolderPath=_e.IRSyncStatus=_e.HierarchyTbls=_e.GyanCastURL=_e.FolderForREC=_e.DevType=_e.DBName=_e.CoverageImagePath=_e.ContractFormImagePath=_e.CONFIG=_e.AppVersion=_e.AddStoreImagePath=void 0;var e=_r(d[0])(_r(d[1])),r=(function(e,r){if("function"==typeof WeakMap)var t=new WeakMap,o=new WeakMap;return(function(e,r){if(!r&&e&&e.__esModule)return e;var i,s,l={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return l;if(i=r?o:t){if(i.has(e))return i.get(e);i.set(e,l)}for(var n in e)"default"!==n&&{}.hasOwnProperty.call(e,n)&&((s=(i=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,n))&&(s.get||s.set)?i(l,n,s):l[n]=e[n]);return l})(e,r)})(_r(d[2])),t=_r(d[0])(_r(d[3])),o=_r(d[4]);_e.HierarchyTbls={Master_Category:"Master_Category",Master_SubCategory:"Master_SubCategory",Master_Brand:"Master_Brand",Master_SubBrand:"Master_SubBrand",Master_Product:"Master_Product",Master_Program:"Master_Program"},_e.fixedurl='https://api1.parinaam.in/api/generic/GetAppSettingWithDeviceInfo',_e.ServerDTurl='https://api1.parinaam.in/api/generic/GetServerDateTime_INTL',_e.GyanCastURL='https://gyancast.parinaam.in/api/Cast/',_e.baseurl='',_e.URL_IMAGE='',_e.sloganline='...Any slogan line here...',_e.appname='Supervisor App';var i=_e.Production=!1,s=(_e.DevType=i?"Prod":"Dev",_e.AppVersion='ios'===o.Platform.OS?t.default.getVersion():'6.5'),l=_e.DBName=_r(d[5]).DBName+'_'+s.replace(".","_");console.log('DBName in contants:',l);_e.db=e.default.openDatabase(l,s),_e.version=`Version ${s}`,_e.copyrightText='\xa9 copyright CPM India',_e.cpm_logo='cpm_logo.png',_e.logoImage=_r(d[6]),_e.gMap_key='AIzaSyCI1EaTZk3eXA_J_UsnBC1STOAFe`d5unJ4A',_e.OQAD_TimeConst=30,_e.LAST_ServerAPI_CALL='lastCallTime',_e.CONFIG={API_BASE_URL:"https://cpm-backend.techindika.com/api",CLIENT_ID:"75ae5282c497d5b717010fee",CLIENT_SECRET:"dfbf23b4a1bf2dff8c8d5710c3a0bb65273e5ab3a1b10b085baaae674fe276c8",DEFAULT_USER_ID:"demo_user_123",DEFAULT_USER_NAME:"Demo User",MAX_MESSAGE_LENGTH:300,CHAT_TITLE:"CPM India Chat",WELCOME_MESSAGE:"Welcome to Gyan Buddy. How may I help you?",SESSION_END_MESSAGE:"Chat session has been ended successfully."},_e.colors_Arr={0:{bg:['#eddeb8','#e4b43c'],color:'#0c8fa5',bgImage:"\r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n"},1:{bg:['#dcf2ee','#30cfb0'],color:'#f39a19',bgImage:"\r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n"},2:{bg:['#eebdc3','#e88191'],color:'#ff5f5f',bgImage:"\r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n"}};var n=_e.common_ImagePath=`${r.DocumentDirectoryPath}/`,c=_e.ImageFolderPath=`${n}PerformicsAllImages/`;_e.TrainingContentFolderPath=`${n}TrainingContent`,_e.VisitorImageFolderPath=c+"VisitorFeedbackImages/",_e.VisitorLoginImageFolderPath=c+"VisitorLoginFeedbackImages/",_e.StoreCheckListImagePath=c+'StoreChecklist/',_e.ContractFormImagePath=c+'ContractForm/',_e.CoverageImagePath=c+'CoverageImages/',_e.AddStoreImagePath=c+'AddNewStoreImages/',_e.visiCoolerImgPath=`${n}VISICoolerImages`,_e.kycImagePath=c+'KYCImages/',_e.defUploadFolder='BulkImages',_e.KPIFolders={STOCK:'StockSingleKPIImages',STOCKWITHCATEGORY:'StockWithCatImages',OPSTOCK:'StockImages',BACKSTOCK:'',MDSTOCK:'StockImages',CLSSTOCK:'StockImages',SOS:'ShareOfShelfImages',PAIDVISI:'VisibilityImages',ADDITIONALVISI:'VisibilityImages',COMPVISI:'CompetitionVisibilityImages',PROMOTION:'PromotionImages',COMPROMO:'CompetionPromotionImages',CONCOV:'',SALE:'',SURVEY:'SurveyImages',WINDOW:'WindowImages',POSM:'POSMImages',FEEDBACK:'FeedbackImages',PROMOTION2:'Promotion2Images',STOREIMG:'StoreImages',SHELFTALKER:'ShelfTalkerImages',PROMOTIONONEAPP:'PromotionImages',PAIDVISIONEAPP:'PaidVisibilityImages',POSSALEONEAPP:'POSSaleImages',SOSONEAPP:'SOSImages',CATEXEONEAPP:'CategoryExecutionImages',STORESCORE:'',ORDER:'OrderImages',ORDERSTATUS:'OrderImages',TRAININGONEAPP:'',StoreChecklist:'StoreChecklistImages',SAMPLINGONEAPP:'SamplingImages',PROGRAMONEAPP:'ProgramImages',TGBASEDONEAPP:"TargetBasedImages",ContractForm:'ContractFormImages',CoverageImages:'CoverageImages',AddNewStoreImages:"AddNewStoreImages",WAREHOUSEDEPLOY:"WareHouseDeployImages",WAREHOUSECAMPAIGN:"WareHouseCampaignImages",DBVISICOOLERONEAPP:'DistributorVisicoolerImages',STOCKWITHPROMO:'StockWithPromoImages',VISICoolerImages:'VISICoolerImages',KYCImages:"KYCImages",KYCONEAPP:"KYCImages",DBPOSMONEAPP:"DBPosmImages",DBWINDOWONEAPP:"DBWindowImages"},_e.FolderForREC={SURVEY:'SurveyVoicefiles',VisitorFeedback:'VisitorFeedbackImages',VisitorLoginFeedback:'VisitorLoginFeedbackImages'},_e.NonProgramLabel_def="Non Prog.",_e.StoreSearch_def="Store Search.",_e.IRSyncStatus={NOT_SYNCED:'NOT_SYNCED',SYNCED:'SYNCED',SYNCING:'SYNCING',FAILED:'FAILED'},_e.loaderTimeOut=3e4,_e.loaderTimeOut_longer=12e4}),801,[8,802,787,823,6,830,831]); +__d((function(g,r,i,_a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0});var t={multiply:!0};e.default=void 0,e.multiply=function(t,n){return c.multiply(t,n)};var n=r(d[0])(r(d[1])),o=r(d[0])(r(d[2])),a=r(d[3]),u=r(d[0])(r(d[4])),l=r(d[0])(r(d[5]));Object.keys(r(d[6])).forEach((function(n){"default"!==n&&"__esModule"!==n&&(Object.prototype.hasOwnProperty.call(t,n)||n in e&&e[n]===r(d[6])[n]||Object.defineProperty(e,n,{enumerable:!0,get:function(){return r(d[6])[n]}}))})),process.nextTick||(process.nextTick=function(t){setTimeout(t,0)});var s="The package 'react-native-sqlite-2' doesn't seem to be linked. Make sure: \n\n"+a.Platform.select({ios:"- You have run 'pod install'\n",default:''})+"- You rebuilt the app after installing the package\n- You are not using Expo managed workflow\n",c=a.NativeModules.RNSqlite2?a.NativeModules.RNSqlite2:new Proxy({},{get:function(){throw new Error(s)}});var f=(0,u.default)(l.default),p=(0,o.default)((function t(){(0,n.default)(this,t)}),[{key:"openDatabase",value:function(t,n,o,a,u){if(t&&'object'==typeof t&&(u='function'==typeof n?n:void 0,a=t.size,o=t.description,n=t.version,t=t.name),a||(a=1),o||(o=t),n||(n='1.0'),void 0===t)throw new Error('please be sure to call: openDatabase("myname.db")');return f(t,n,o,a,u)}}]);e.default=new p}),802,[8,17,18,6,803,818,822]); +__d((function(g,r,i,a,m,e,d){m.exports=r(d[0])}),803,[804]); +__d((function(g,r,i,a,m,e,d){'use strict';m.exports=function(n){function t(t,u){var o=new n(t);return new(r(d[0]))(u,o)}return r(d[2])((function(n){if(n.length<4)throw new Error("Failed to execute 'openDatabase': 4 arguments required, but only "+n.length+' present');var u=n[0],o=n[1],c=n[4],f=t(u,o);return'function'==typeof c&&r(d[1])((function(){c(f)})),f}))}}),804,[805,809,817]); +__d((function(g,r,_i,a,m,e,d){'use strict';var n=[{sql:'ROLLBACK;',args:[]}],t=[{sql:'END;',args:[]}];function i(n,t,i,c){this.readOnly=n,this.txnCallback=t,this.errorCallback=i,this.successCallback=c}function c(n,t){this.version=n,this._db=t,this._txnQueue=new(r(d[0])),this._running=!1,this._currentTask=null}c.prototype._onTransactionComplete=function(i){var c=this;function s(n){n?c._currentTask.errorCallback(n):c._currentTask.successCallback(),c._running=!1,c._currentTask=null,c._runNextTransaction()}function o(n){return function(){s(n)}}function u(n){for(var t=0;tt&&s.push(n.item);return s},m.exports=t}),806,[]); +__d((function(g,r,_i,a,m,e,d){'use strict';function t(){return!0}function n(t,n,s,i){this.sql=t,this.args=n,this.sqlCallback=s,this.sqlErrorCallback=i}function s(t,n){function s(){t._running=!1,i(t)}var o=t._websqlDatabase._currentTask.readOnly;t._websqlDatabase._db.exec(n,o,(function(o,u){if(o)return t._error=o,s();for(var l=0;l1)for(var l=1;l-1},xt.prototype.set=function(t,n){var e=this.__data__,o=Ut(e,t);return o<0?e.push([t,n]):e[o][1]=n,this},Ft.prototype.clear=function(){this.__data__={hash:new Et,map:new(vt||xt),string:new Et}},Ft.prototype.delete=function(t){return tr(this,t).delete(t)},Ft.prototype.get=function(t){return tr(this,t).get(t)},Ft.prototype.has=function(t){return tr(this,t).has(t)},Ft.prototype.set=function(t,n){return tr(this,t).set(t,n),this},It.prototype.add=It.prototype.push=function(n){return this.__data__.set(n,t),this},It.prototype.has=function(t){return this.__data__.has(t)},Pt.prototype.clear=function(){this.__data__=new xt},Pt.prototype.delete=function(t){return this.__data__.delete(t)},Pt.prototype.get=function(t){return this.__data__.get(t)},Pt.prototype.has=function(t){return this.__data__.has(t)},Pt.prototype.set=function(t,n){var e=this.__data__;if(e instanceof xt){var o=e.__data__;if(!vt||o.length<199)return o.push([t,n]),this;e=this.__data__=new Ft(o)}return e.set(t,n),this};var zt,Ct,Lt=(zt=function(t,n){return t&&Mt(t,n,$r)},function(t,n){if(null==t)return t;if(!dr(t))return zt(t,n);for(var e=t.length,o=Ct?e:-1,u=Object(t);(Ct?o--:++op))return!1;var h=l.get(t);if(h&&l.get(o))return h==o;var v=-1,y=!0,b=f&n?new It:void 0;for(l.set(t,o),l.set(o,t);++v-1&&t%1==0&&t-1&&t%1==0&&t<=o}function wr(t){var n=typeof t;return!!t&&('object'==n||'function'==n)}function Ar(t){return!!t&&'object'==typeof t}function Or(t){return'symbol'==typeof t||Ar(t)&&it.call(t)==O}var mr=W?(function(t){return function(n){return t(n)}})(W):function(t){return Ar(t)&&jr(t.length)&&!!z[it.call(t)]};function kr(t,n,e){var o=null==t?void 0:Bt(t,n);return void 0===o?e:o}function Sr(t,n){return null!=t&&or(t,n,Dt)}function $r(t){return dr(t)?Tt(t):Nt(t)}function Er(t){return t}m.exports=function(t,n){var e,o,u,c,f;return(yr(t)?G:qt)(t,'function'==typeof(u=n)?u:null==u?Er:'object'==typeof u?yr(u)?Ht(u[0],u[1]):1==(o=rr(e=u)).length&&o[0][2]?fr(o[0][0],o[0][1]):function(t){return t===e||Wt(t,e,o)}:ar(f=u)?(c=sr(f),function(t){return null==t?void 0:t[c]}):Jt(f))}}),819,[]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var t=r(d[0])(r(d[1])),f=r(d[0])(r(d[2]));e.default=(0,t.default)((function t(s,o,u,l){(0,f.default)(this,t),this.error=s,this.insertId=o,this.rowsAffected=u,this.rows=l}))}),820,[8,18,17]); +__d((function(g,r,i,a,m,e,d){var n=Object.prototype.hasOwnProperty;function t(t,o,c){var f=t[o];n.call(t,o)&&u(f,c)&&(void 0!==c||o in t)||(t[o]=c)}function o(n,t,o){for(var u=-1,c=n.length,f=t.length,v={};++u=n}var rr=(0,r(d[8]).getSupportedPlatformInfoFunctions)({supportedPlatforms:['android','web'],getter:function(){return c.default.isAirplaneMode()},syncGetter:function(){return c.default.isAirplaneModeSync()},defaultValue:!1}),or=(0,n.default)(rr,2),ar=e.isAirplaneMode=or[0],ur=e.isAirplaneModeSync=or[1],dr=e.getDeviceType=function(){return(0,r(d[8]).getSupportedPlatformInfoSync)({memoKey:'deviceType',supportedPlatforms:['android','ios','windows'],defaultValue:'unknown',getter:function(){return c.default.deviceType}})},ir=(e.getDeviceTypeSync=function(){return(0,r(d[8]).getSupportedPlatformInfoSync)({memoKey:'deviceType',supportedPlatforms:['android','ios','windows'],defaultValue:'unknown',getter:function(){return c.default.deviceType}})},(0,r(d[8]).getSupportedPlatformInfoFunctions)({memoKey:'_supportedAbis',supportedPlatforms:['android','ios','windows'],getter:function(){return c.default.getSupportedAbis()},syncGetter:function(){return c.default.getSupportedAbisSync()},defaultValue:[]})),sr=(0,n.default)(ir,2),lr=e.supportedAbis=sr[0],cr=e.supportedAbisSync=sr[1],fr=(0,r(d[8]).getSupportedPlatformInfoFunctions)({memoKey:'_supported32BitAbis',supportedPlatforms:['android'],getter:function(){return c.default.getSupported32BitAbis()},syncGetter:function(){return c.default.getSupported32BitAbisSync()},defaultValue:[]}),gr=(0,n.default)(fr,2),yr=e.supported32BitAbis=gr[0],pr=e.supported32BitAbisSync=gr[1],mr=(0,r(d[8]).getSupportedPlatformInfoFunctions)({memoKey:'_supported64BitAbis',supportedPlatforms:['android'],getter:function(){return c.default.getSupported64BitAbis()},syncGetter:function(){return c.default.getSupported64BitAbisSync()},defaultValue:[]}),Sr=(0,n.default)(mr,2),Pr=e.supported64BitAbis=Sr[0],wr=e.supported64BitAbisSync=Sr[1];function Ir(t){return vr.apply(this,arguments)}function vr(){return(vr=(0,t.default)((function*(t){return'android'===u.Platform.OS&&c.default.hasSystemFeature(t)}))).apply(this,arguments)}function br(t){return'android'===u.Platform.OS&&c.default.hasSystemFeatureSync(t)}function Fr(t){return'android'===u.Platform.OS?t<.15:t<.2}var hr=(0,r(d[8]).getSupportedPlatformInfoFunctions)({supportedPlatforms:['android'],getter:function(){return c.default.getSystemAvailableFeatures()},syncGetter:function(){return c.default.getSystemAvailableFeaturesSync()},defaultValue:[]}),Ar=(0,n.default)(hr,2),kr=e.getSystemAvailableFeatures=Ar[0],Cr=e.getSystemAvailableFeaturesSync=Ar[1],Br=(0,r(d[8]).getSupportedPlatformInfoFunctions)({supportedPlatforms:['android','ios','web'],getter:function(){return c.default.isLocationEnabled()},syncGetter:function(){return c.default.isLocationEnabledSync()},defaultValue:!1}),Dr=(0,n.default)(Br,2),Vr=e.isLocationEnabled=Dr[0],Mr=e.isLocationEnabledSync=Dr[1],Tr=(0,r(d[8]).getSupportedPlatformInfoFunctions)({supportedPlatforms:['android','ios'],getter:function(){return c.default.isHeadphonesConnected()},syncGetter:function(){return c.default.isHeadphonesConnectedSync()},defaultValue:!1}),Lr=(0,n.default)(Tr,2),Or=e.isHeadphonesConnected=Lr[0],Gr=e.isHeadphonesConnectedSync=Lr[1],Nr=(0,r(d[8]).getSupportedPlatformInfoFunctions)({supportedPlatforms:['windows'],getter:function(){return c.default.isMouseConnected()},syncGetter:function(){return c.default.isMouseConnectedSync()},defaultValue:!1}),Kr=(0,n.default)(Nr,2),Hr=e.isMouseConnected=Kr[0],Ur=e.isMouseConnectedSync=Kr[1],Er=(0,r(d[8]).getSupportedPlatformInfoFunctions)({supportedPlatforms:['windows'],getter:function(){return c.default.isKeyboardConnected()},syncGetter:function(){return c.default.isKeyboardConnectedSync()},defaultValue:!1}),Rr=(0,n.default)(Er,2),qr=e.isKeyboardConnected=Rr[0],_r=e.isKeyboardConnectedSync=Rr[1],xr=e.isTabletMode=function(){return(0,r(d[8]).getSupportedPlatformInfoAsync)({supportedPlatforms:['windows'],getter:function(){return c.default.isTabletMode()},defaultValue:!1})},Zr=(0,r(d[8]).getSupportedPlatformInfoFunctions)({supportedPlatforms:['android','ios'],getter:function(){return c.default.getAvailableLocationProviders()},syncGetter:function(){return c.default.getAvailableLocationProvidersSync()},defaultValue:{}}),jr=(0,n.default)(Zr,2),zr=e.getAvailableLocationProviders=jr[0],Wr=e.getAvailableLocationProvidersSync=jr[1],Jr=(0,r(d[8]).getSupportedPlatformInfoFunctions)({supportedPlatforms:['ios'],getter:function(){return c.default.getBrightness()},syncGetter:function(){return c.default.getBrightnessSync()},defaultValue:-1}),Qr=(0,n.default)(Jr,2),Xr=e.getBrightness=Qr[0],Yr=e.getBrightnessSync=Qr[1];function $r(){return eo.apply(this,arguments)}function eo(){return(eo=(0,t.default)((function*(){return'ios'===u.Platform.OS?c.default.getDeviceToken():'unknown'}))).apply(this,arguments)}var to=new u.NativeEventEmitter(u.NativeModules.RNDeviceInfo);function no(){var u=(0,o.useState)(null),s=(0,n.default)(u,2),l=s[0],c=s[1];return(0,o.useEffect)((function(){var n,o=(n=(0,t.default)((function*(){var t=yield xn();c(t)})),function(){return n.apply(this,arguments)});o();var u=to.addListener('RNDeviceInfo_batteryLevelDidChange',(function(t){c(t)}));return function(){return u.remove()}}),[]),l}function ro(){var u=(0,o.useState)(null),s=(0,n.default)(u,2),l=s[0],c=s[1];return(0,o.useEffect)((function(){var n,o=(n=(0,t.default)((function*(){var t=yield xn();Fr(t)&&c(t)})),function(){return n.apply(this,arguments)});o();var u=to.addListener('RNDeviceInfo_batteryLevelIsLow',(function(t){c(t)}));return function(){return u.remove()}}),[]),l}function oo(){var u=(0,o.useState)({}),s=(0,n.default)(u,2),l=s[0],c=s[1];return(0,o.useEffect)((function(){var n,o=(n=(0,t.default)((function*(){var t=yield Wn();c(t)})),function(){return n.apply(this,arguments)});o();var u=to.addListener('RNDeviceInfo_powerStateDidChange',(function(t){c(t)}));return function(){return u.remove()}}),[]),l}function ao(){return(0,r(d[9]).useOnEvent)('RNDeviceInfo_headphoneConnectionDidChange',Or,!1)}function uo(){return(0,r(d[9]).useOnMount)(tn,-1)}function io(){return(0,r(d[9]).useOnMount)(we,'unknown')}function so(t){var n=(0,o.useCallback)((function(){return Ir(t)}),[t]);return(0,r(d[9]).useOnMount)(n,!1)}function lo(){return(0,r(d[9]).useOnMount)(Gt,!1)}function co(){return(0,r(d[9]).useOnMount)(j,'unknown')}function fo(){var u=(0,o.useState)(null),s=(0,n.default)(u,2),l=s[0],c=s[1];return(0,o.useEffect)((function(){var n,o=(n=(0,t.default)((function*(){var t=yield Xr();c(t)})),function(){return n.apply(this,arguments)});o();var u=to.addListener('RNDeviceInfo_brightnessDidChange',(function(t){c(t)}));return function(){return u.remove()}}),[]),l}var go={getAndroidId:V,getAndroidIdSync:M,getApiLevel:oe,getApiLevelSync:ae,getApplicationName:ce,getAvailableLocationProviders:zr,getAvailableLocationProvidersSync:Wr,getBaseOs:pt,getBaseOsSync:mt,getBatteryLevel:xn,getBatteryLevelSync:Zn,getBootloader:Le,getBootloaderSync:Oe,getBrand:J,getBuildId:ee,getBuildIdSync:te,getBuildNumber:fe,getBundleId:ue,getCarrier:Pn,getCarrierSync:wn,getCodename:Ct,getCodenameSync:Bt,getDevice:Ke,getDeviceId:_,getDeviceName:we,getDeviceNameSync:Ie,getDeviceSync:He,getDeviceToken:$r,getDeviceType:dr,getDisplay:Re,getDisplaySync:qe,getFingerprint:Ze,getFingerprintSync:je,getFirstInstallTime:tn,getFirstInstallTimeSync:nn,getFontScale:De,getFontScaleSync:Ve,getFreeDiskStorage:Kn,getFreeDiskStorageOld:Un,getFreeDiskStorageSync:Hn,getFreeDiskStorageOldSync:Rn,getHardware:Je,getHardwareSync:Qe,getHost:$e,getHostSync:et,getIncremental:Mt,getIncrementalSync:Tt,getInstallerPackageName:se,getInstallerPackageNameSync:le,getInstallReferrer:an,getInstallReferrerSync:un,getInstanceId:b,getInstanceIdSync:F,getIpAddress:O,getIpAddressSync:G,getLastUpdateTime:ln,getLastUpdateTimeSync:cn,getMacAddress:E,getMacAddressSync:q,getManufacturer:j,getManufacturerSync:z,getMaxMemory:kn,getMaxMemorySync:Cn,getModel:W,getPhoneNumber:yn,getPhoneNumberSync:pn,getPowerState:Wn,getPowerStateSync:Jn,getPreviewSdkInt:wt,getPreviewSdkIntSync:It,getProduct:rt,getProductSync:ot,getReadableVersion:ye,getSecurityPatch:Ft,getSecurityPatchSync:ht,getSerialNumber:k,getSerialNumberSync:C,getSystemAvailableFeatures:kr,getSystemAvailableFeaturesSync:Cr,getSystemName:Q,getSystemVersion:X,getTags:dt,getTagsSync:it,getTotalDiskCapacity:Vn,getTotalDiskCapacityOld:Tn,getTotalDiskCapacitySync:Mn,getTotalDiskCapacityOldSync:On,getTotalMemory:bn,getTotalMemorySync:Fn,getType:ct,getTypeSync:ft,getUniqueId:p,getUniqueIdSync:S,getUsedMemory:Fe,getUsedMemorySync:he,getUserAgent:Ae,getUserAgentSync:ke,getVersion:ge,getBrightness:Xr,getBrightnessSync:Yr,hasGms:zt,hasGmsSync:Wt,hasHms:Xt,hasHmsSync:Yt,hasNotch:_t,hasDynamicIsland:xt,hasSystemFeature:Ir,hasSystemFeatureSync:br,isAirplaneMode:ar,isAirplaneModeSync:ur,isBatteryCharging:Yn,isBatteryChargingSync:$n,isCameraPresent:H,isCameraPresentSync:U,isEmulator:Gt,isEmulatorSync:Nt,isHeadphonesConnected:Or,isHeadphonesConnectedSync:Gr,isLandscape:er,isLandscapeSync:nr,isLocationEnabled:Vr,isLocationEnabledSync:Mr,isPinOrFingerprintSet:Rt,isPinOrFingerprintSetSync:qt,isMouseConnected:Hr,isMouseConnectedSync:Ur,isKeyboardConnected:qr,isKeyboardConnectedSync:_r,isTabletMode:xr,isTablet:Kt,isDisplayZoomed:Ht,supported32BitAbis:yr,supported32BitAbisSync:pr,supported64BitAbis:Pr,supported64BitAbisSync:wr,supportedAbis:lr,supportedAbisSync:cr,syncUniqueId:P,useBatteryLevel:no,useBatteryLevelIsLow:ro,useDeviceName:io,useFirstInstallTime:uo,useHasSystemFeature:so,useIsEmulator:lo,usePowerState:oo,useManufacturer:co,useIsHeadphonesConnected:ao,useBrightness:fo};e.default=go}),823,[8,313,26,153,6,824,825,826,828,829]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;e.default=[{brand:'Apple',model:'iPhone 14 Pro'},{brand:'Apple',model:'iPhone 14 Pro Max'}]}),824,[]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;e.default=[{brand:'Apple',model:'iPhone 14'},{brand:'Apple',model:'iPhone 14 Plus'},{brand:'Apple',model:'iPhone 14 Pro'},{brand:'Apple',model:'iPhone 14 Pro Max'},{brand:'Apple',model:'iPhone 13 mini'},{brand:'Apple',model:'iPhone 13'},{brand:'Apple',model:'iPhone 13 Pro'},{brand:'Apple',model:'iPhone 13 Pro Max'},{brand:'Apple',model:'iPhone 12 mini'},{brand:'Apple',model:'iPhone 12'},{brand:'Apple',model:'iPhone 12 Pro'},{brand:'Apple',model:'iPhone 12 Pro Max'},{brand:'Apple',model:'iPhone 11'},{brand:'Apple',model:'iPhone 11 Pro'},{brand:'Apple',model:'iPhone 11 Pro Max'},{brand:'Apple',model:'iPhone X'},{brand:'Apple',model:'iPhone XS'},{brand:'Apple',model:'iPhone XS Max'},{brand:'Apple',model:'iPhone XR'},{brand:'Asus',model:'ZenFone 5'},{brand:'Asus',model:'ZenFone 5z'},{brand:'google',model:'Pixel 3 XL'},{brand:'google',model:'Pixel 4a'},{brand:'Huawei',model:'P20'},{brand:'Huawei',model:'P20 Plus'},{brand:'Huawei',model:'P20 Lite'},{brand:'Huawei',model:'ANE-LX1'},{brand:'Huawei',model:'INE-LX1'},{brand:'Huawei',model:'POT-LX1'},{brand:'Huawei',model:'Honor Play'},{brand:'Huawei',model:'Honor 10'},{brand:'Huawei',model:'Mate 20 Lite'},{brand:'Huawei',model:'Mate 20 Pro'},{brand:'Huawei',model:'ELE-L29'},{brand:'Huawei',model:'P30 Lite'},{brand:'Huawei',model:'P30 Pro'},{brand:'Huawei',model:'JNY-LX1'},{brand:'Huawei',model:'Nova 3'},{brand:'Huawei',model:'Nova 3i'},{brand:'Leagoo',model:'S9'},{brand:'LG',model:'G7'},{brand:'LG',model:'G7 ThinQ'},{brand:'LG',model:'G7+ ThinQ'},{brand:'LG',model:'LM-Q910'},{brand:'LG',model:'LM-G710'},{brand:'LG',model:'LM-V405'},{brand:'Motorola',model:'Moto g7 Play'},{brand:'Motorola',model:'Moto g7 Power'},{brand:'Motorola',model:'One'},{brand:'Motorola',model:'Motorola One Vision'},{brand:'Nokia',model:'5.1 Plus'},{brand:'Nokia',model:'Nokia 6.1 Plus'},{brand:'Nokia',model:'7.1'},{brand:'Nokia',model:'8.1'},{brand:'OnePlus',model:'6'},{brand:'OnePlus',model:'A6003'},{brand:'ONEPLUS',model:'A6000'},{brand:'OnePlus',model:'OnePlus A6003'},{brand:'OnePlus',model:'ONEPLUS A6010'},{brand:'OnePlus',model:'ONEPLUS A6013'},{brand:'OnePlus',model:'ONEPLUS A6000'},{brand:'Oppo',model:'R15'},{brand:'Oppo',model:'R15 Pro'},{brand:'Oppo',model:'F7'},{brand:'Oukitel',model:'U18'},{brand:'Redmi',model:'M2004J19C'},{brand:'Sharp',model:'Aquos S3'},{brand:'Vivo',model:'V9'},{brand:'Vivo',model:'X21'},{brand:'Vivo',model:'X21 UD'},{brand:'xiaomi',model:'MI 8'},{brand:'xiaomi',model:'MI 8 Explorer Edition'},{brand:'xiaomi',model:'MI 8 SE'},{brand:'xiaomi',model:'MI 8 UD'},{brand:'xiaomi',model:'MI 8 Lite'},{brand:'xiaomi',model:'Mi 9'},{brand:'xiaomi',model:'POCO F1'},{brand:'xiaomi',model:'POCOPHONE F1'},{brand:'xiaomi',model:'Redmi 6 Pro'},{brand:'xiaomi',model:'Redmi Note 7'},{brand:'xiaomi',model:'Redmi 7'},{brand:'xiaomi',model:'Redmi Note 8'},{brand:'xiaomi',model:'Redmi Note 8 Pro'},{brand:'xiaomi',model:'Mi A2 Lite'},{brand:'Blackview',model:'A30'},{brand:'Samsung',model:'SM-A202F'},{brand:'Samsung',model:'SM-A217F'},{brand:'Samsung',model:'SM-A715F'}]}),825,[]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var o=r(d[0]),t=o.NativeModules.RNDeviceInfo;if('web'!==o.Platform.OS&&'dom'!==o.Platform.OS||(t=r(d[1])),!t&&('android'===o.Platform.OS||'ios'===o.Platform.OS||'web'===o.Platform.OS||'dom'===o.Platform.OS))throw new Error("react-native-device-info: NativeModule.RNDeviceInfo is null. To fix this issue try these steps:\n \u2022 For react-native <= 0.59: Run `react-native link react-native-device-info` in the project root.\n \u2022 Rebuild and re-run the app.\n \u2022 If you are using CocoaPods on iOS, run `pod install` in the `ios` directory and then rebuild and re-run the app. You may also need to re-open Xcode to get the new pods.\n If none of these fix the issue, please open an issue on the Github repository: https://github.com/react-native-device-info/react-native-device-info");e.default=t}),826,[6,827]); +__d((function(g,r,i,a,m,e,_d){Object.defineProperty(e,"__esModule",{value:!0}),e.isLocationEnabledSync=e.isLocationEnabled=e.isCameraPresentSync=e.isCameraPresent=e.isBatteryChargingSync=e.isBatteryCharging=e.isAirplaneModeSync=e.isAirplaneMode=e.getUserAgentSync=e.getUserAgent=e.getUsedMemorySync=e.getUsedMemory=e.getTotalMemorySync=e.getTotalMemory=e.getTotalDiskCapacitySync=e.getTotalDiskCapacity=e.getPowerStateSync=e.getPowerState=e.getMaxMemorySync=e.getMaxMemory=e.getInstallReferrerSync=e.getInstallReferrer=e.getFreeDiskStorageSync=e.getFreeDiskStorage=e.getBatteryLevelSync=e.getBatteryLevel=e.getBaseOs=void 0;var t=r(_d[0])(r(_d[1])),n=r(_d[2]),o=new n.NativeEventEmitter(n.NativeModules.RNDeviceInfo),u=!1,c=-1,s={},f=function(t){var n=t.level,o=t.charging;return{batteryLevel:n,lowPowerMode:!1,batteryState:1===n?'full':o?'charging':'unplugged',chargingtime:t.chargingtime,dischargingtime:t.dischargingtime}},y=e.getMaxMemorySync=function(){return window.performance&&window.performance.memory?window.performance.memory.jsHeapSizeLimit:-1},l=e.getInstallReferrerSync=function(){return document.referrer},d=e.isAirplaneModeSync=function(){return!!navigator.onLine},v=e.getUserAgentSync=function(){return window.navigator.userAgent},p=e.isLocationEnabledSync=function(){return!!navigator.geolocation},S=e.getTotalMemorySync=function(){return navigator.deviceMemory?1e9*navigator.deviceMemory:-1},h=e.getUsedMemorySync=function(){return window.performance&&window.performance.memory?window.performance.memory.usedJSHeapSize:-1};'undefined'!=typeof navigator&&navigator.getBattery&&navigator.getBattery().then((function(t){u=t.charging,t.addEventListener('chargingchange',(function(){var n=t.charging;u=n,s=f(t),o.emit('RNDeviceInfo_powerStateDidChange',s)})),t.addEventListener('levelchange',(function(){var n=t.level;c=n,s=f(t),o.emit('RNDeviceInfo_batteryLevelDidChange',n),n<.2&&o.emit('RNDeviceInfo_batteryLevelIsLow',n)}))}));var M,w,D,C,B,L,P,k,A,I,T,b,x,E;e.getInstallReferrer=(M=(0,t.default)((function*(){return l()})),function(){return M.apply(this,arguments)}),e.getUserAgent=(w=(0,t.default)((function*(){return v()})),function(){return w.apply(this,arguments)}),e.isBatteryCharging=(D=(0,t.default)((function*(){return!!navigator.getBattery&&navigator.getBattery().then((function(t){return t.charging}))})),function(){return D.apply(this,arguments)}),e.isBatteryChargingSync=function(){return u},e.isCameraPresent=(C=(0,t.default)((function*(){return!(!navigator.mediaDevices||!navigator.mediaDevices.enumerateDevices)&&navigator.mediaDevices.enumerateDevices().then((function(t){return!!t.find((function(t){return'videoinput'===t.kind}))}))})),function(){return C.apply(this,arguments)}),e.isCameraPresentSync=function(){return console.log('[react-native-device-info] isCameraPresentSync not supported - please use isCameraPresent'),!1},e.getBatteryLevel=(B=(0,t.default)((function*(){return navigator.getBattery?navigator.getBattery().then((function(t){return t.level})):-1})),function(){return B.apply(this,arguments)}),e.getBatteryLevelSync=function(){return c},e.isLocationEnabled=(L=(0,t.default)((function*(){return p()})),function(){return L.apply(this,arguments)}),e.isAirplaneMode=(P=(0,t.default)((function*(){return d()})),function(){return P.apply(this,arguments)}),e.getBaseOs=(k=(0,t.default)((function*(){return t=window.navigator.userAgent,n=window.navigator.platform,o=n,-1!==['Macintosh','MacIntel','MacPPC','Mac68K'].indexOf(n)?o='Mac OS':-1!==['iPhone','iPad','iPod'].indexOf(n)?o='iOS':-1!==['Win32','Win64','Windows','WinCE'].indexOf(n)?o='Windows':/Android/.test(t)?o='Android':!o&&/Linux/.test(n)&&(o='Linux'),o;var t,n,o})),function(){return k.apply(this,arguments)}),e.getTotalDiskCapacity=(A=(0,t.default)((function*(){return navigator.storage&&navigator.storage.estimate?navigator.storage.estimate().then((function(t){return t.quota})):-1})),function(){return A.apply(this,arguments)}),e.getTotalDiskCapacitySync=function(){return console.log('[react-native-device-info] getTotalDiskCapacitySync not supported - please use getTotalDiskCapacity'),-1},e.getFreeDiskStorage=(I=(0,t.default)((function*(){return navigator.storage&&navigator.storage.estimate?navigator.storage.estimate().then((function(t){return t.quota-t.usage})):-1})),function(){return I.apply(this,arguments)}),e.getFreeDiskStorageSync=function(){return console.log('[react-native-device-info] getFreeDiskStorageSync not supported - please use getFreeDiskStorage'),-1},e.getMaxMemory=(T=(0,t.default)((function*(){return y()})),function(){return T.apply(this,arguments)}),e.getUsedMemory=(b=(0,t.default)((function*(){return h()})),function(){return b.apply(this,arguments)}),e.getTotalMemory=(x=(0,t.default)((function*(){return S()})),function(){return x.apply(this,arguments)}),e.getPowerState=(E=(0,t.default)((function*(){return navigator.getBattery?navigator.getBattery().then((function(t){return f(t)})):{}})),function(){return E.apply(this,arguments)}),e.getPowerStateSync=function(){return s}}),827,[8,313,6]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.clearMemo=function(){f={}},e.getSupportedPlatformInfoAsync=s,e.getSupportedPlatformInfoFunctions=function(n){var u=n.syncGetter,f=(0,t.default)(n,o);return[function(){return s(f)},function(){return c(Object.assign({},f,{getter:u}))}]},e.getSupportedPlatformInfoSync=c;var t=r(d[0])(r(d[1])),n=r(d[0])(r(d[2])),u=r(d[3]),o=["syncGetter"],f={};function l(t,n,o){var f={};return t.filter((function(t){return u.Platform.OS==t})).forEach((function(t){return f[t]=n})),u.Platform.select(Object.assign({},f,{default:o}))}function c(t){var n=t.getter,u=t.supportedPlatforms,o=t.defaultValue,c=t.memoKey;if(c&&null!=f[c])return f[c];var s=l(u,n,(function(){return o}))();return c&&(f[c]=s),s}function s(t){return p.apply(this,arguments)}function p(){return(p=(0,n.default)((function*(t){var n=t.getter,u=t.supportedPlatforms,o=t.defaultValue,c=t.memoKey;if(c&&null!=f[c])return f[c];var s=yield l(u,n,(function(){return Promise.resolve(o)}))();return c&&(f[c]=s),s}))).apply(this,arguments)}}),828,[8,119,313,6]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.deviceInfoEmitter=void 0,e.useOnEvent=function(t,f,c){var l=o(f,c),s=l.loading,E=l.result,_=(0,u.useState)(c),p=(0,n.default)(_,2),y=p[0],I=p[1];return(0,u.useEffect)((function(){I(E)}),[E]),(0,u.useEffect)((function(){var n=v.addListener(t,I);return function(){return n.remove()}}),[t]),{loading:s,result:y}},e.useOnMount=o;var t=r(d[0])(r(d[1])),n=r(d[0])(r(d[2])),u=r(d[3]),f=r(d[4]);function o(f,o){var v=(0,u.useState)({loading:!0,result:o}),c=(0,n.default)(v,2),l=c[0],s=c[1];return(0,u.useEffect)((function(){var n,u=(n=(0,t.default)((function*(){var t=yield f();s({loading:!1,result:t})})),function(){return n.apply(this,arguments)});u()}),[f]),l}var v=e.deviceInfoEmitter=new f.NativeEventEmitter(f.NativeModules.RNDeviceInfo)}),829,[8,313,26,153,6]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.PerformicsIRAppName=e.PerformicsAppName=e.DBName=e.AppName=void 0;e.PerformicsIRAppName="PerformicsIR";var p=e.PerformicsAppName="Performics";e.AppName=p,e.DBName="Performics"}),830,[]); +__d((function(g,r,i,a,m,e,d){m.exports=r(d[0]).registerAsset({__packager_asset:!0,httpServerLocation:"/assets/PerformicsSrc/src/assets/image",width:144,height:75,scales:[1],hash:"ed0286f33f123c5c977575edacfe0eb0",name:"olay_logo",type:"png"})}),831,[832]); +__d((function(g,r,i,a,m,e,d){'use strict';m.exports=r(d[0])}),832,[178]); +__d((function(g,r,_i,a,m,e,d){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var t={findBestLanguageTag:!0,getCalendar:!0,getCountry:!0,getCurrencies:!0,getLocales:!0,getNumberFormatSettings:!0,getTemperatureUnit:!0,getTimeZone:!0,uses24HourClock:!0,usesAutoDateAndTime:!0,usesAutoTimeZone:!0,usesMetricSystem:!0};e.findBestLanguageTag=function(t){for(var n=(0,r(d[0]).getLocales)(),u=t.map((function(t){return t.toLowerCase()})),o=0;o1&&void 0!==arguments[1]?arguments[1]:'',o=(n.StoreId,n.ChannelId,n.RegionId,n.StoreTypeId,"SELECT DISTINCT t1.MenuId,t1.MenuName,t1.NormalIcon,t1.TickIcon,t1.GreyIcon,t1.MenuPath,t1.ScreenName from Menu_Master t1 INNER join Mapping_MenuDistributorPoint t2 on t1.MenuId=t2.MenuId");return o+=''!=t?` where t1.ScreenName='${t}' `:'',o+=' Order by t1.MenuSequence '},e.Q_GetAvailabityDefaultData=function(n,t){console.log('Q_GetAvailabityDefaultData',t);var o=n.StoreId;n.ChainId,n.StoreTypeId,n.StateId,n.StoreClassId,n.StoreCategoryId;return` SELECT DISTINCT c.CategoryId,c.CategoryName,'' as MSL from Master_Category c INNER JOIN Product_Master p on c.CategoryId=p.CategoryId INNER JOIN Mapping_ProductAssortmentStorewise mp on p.ProductId=mp.ProductId Where mp.StoreId ='${o}' and ${t} order by p.CategorySequence`},e.Q_GetAvailablePrds=function(n,o,I,S,i,E){var D=o.StoreId,u=(o.ChainId,o.StoreTypeId,o.StateId,o.StoreClassId,o.StoreCategoryId,I.findIndex((function(t){return'COMPStockAllow'==t.KPIFieldName&&t.ScreenName==n}))),N=u>=0?I[u]:{},s=u>=0&&N.KPIFieldEnable,O=new Date,T=(0,t.default)(O).format('MM/DD/YYYY');return` SELECT DISTINCT p.ProductId,p.ProductName ${S} from Product_Master p INNER JOIN Mapping_ProductAssortmentStorewise mp on p.ProductId=mp.ProductId and mp.StoreId='${D}' inner join Master_Category mc on mc.CategoryId=p.CategoryId LEFT OUTER JOIN ${E} as s on p.ProductId=s.PRODUCT_ID and s.STORE_ID='${D}' and s.VISIT_DATE='${T}' Where 1=1 ${1==s?'':" and p.IsCompetitor='0' "} ${i} order by p.ProductSequence`},e.Q_MenuList=function(n){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:'',o=(n.StoreId,n.ChannelId),I=n.RegionId,S=n.StoreTypeId,i=n.StoreCategoryId,E=`SELECT DISTINCT t1.MenuId,t1.MenuName,t1.NormalIcon,t1.TickIcon,t1.GreyIcon,t1.MenuPath,t1.ScreenName,t1.UploadKeyName,t1.InnerScreenConfig from Menu_Master t1 INNER join Mapping_Menu t2 on t1.MenuId=t2.MenuId where t2.ChannelId='${o}' and t2.RegionId='${I}' and t2.StoreTypeId='${S}' and t2.StoreCategoryId='${i}'`;return E+=''!=t?` and t1.ScreenName='${t}' `:'',E+=' Order by t1.MenuSequence '},e.Q_getAvailbl_BreakTime=K,e.Q_getAvailbl_CompPromo=c,e.Q_getAvailbl_Default=R,e.Q_getAvailbl_DynamicStorescore=T,e.Q_getAvailbl_Feedback=J,e.Q_getAvailbl_KycOneApp=N,e.Q_getAvailbl_OrderStatus=Y,e.Q_getAvailbl_POSM=_,e.Q_getAvailbl_POSSaleOneApp=F,e.Q_getAvailbl_PaidVisOneApp=y,e.Q_getAvailbl_ProgramOneApp=s,e.Q_getAvailbl_Promo=A,e.Q_getAvailbl_PromoOneApp=b,e.Q_getAvailbl_SOS=l,e.Q_getAvailbl_SOSOneApp=w,e.Q_getAvailbl_Sampling=L,e.Q_getAvailbl_ShelfTalker=W,e.Q_getAvailbl_SosEyeLevel=v,e.Q_getAvailbl_Stock=u,e.Q_getAvailbl_StoreCategoryOneApp=H,e.Q_getAvailbl_StoreImage=$,e.Q_getAvailbl_StoreScore=V,e.Q_getAvailbl_Survey=p,e.Q_getAvailbl_TGBASEDONEAPP=O,e.Q_getAvailbl_Training=M,e.Q_getAvailbl_Vis=C,e.Q_getAvailbl_WareHouseDeploy=h,e.Q_getAvailbl_WarehouseDeploymentCampaign=U,e.Q_getAvailbl_Window=f,e.Q_getAvlblDBPOSM=Q,e.Q_getAvlblDBVisicooler=x,e.Q_getAvlblDBWindow=k,e.Q_getContractFormPrograms=function(n){var o=n.JcpType,I=n.StoreId,S=new Date,i=(0,t.default)(S).format('MM/DD/YYYY'),E=`Left outer join ${r(d[4]).AppTables.CONTRACT_FORM} cf on mp.ProgramId=cf.PROGRAM_ID and mp.StoreId=cf.STORE_ID and mp.ProgramDefinitionId=cf.PROGRAM_DEFINITION_ID `;return`select w.ProgramDefinitionId,w.ProgramId,w.ChildName as ProgramName,mp.ContractFormStatus,'0' as DataDoneCount,(CASE WHEN cf.STORE_ID is not null THEN 1 ELSE 0 END) as IsDataExists from ${o} jp inner join Mapping_ContractForm mp on mp.StoreId=jp.StoreId inner join Master_ProgramDefinition w on w.ProgramDefinitionId=mp.ProgramDefinitionId and w.ProgramId=mp.ProgramId ${E} where jp.VisitDate='${i}' and jp.StoreId='${I}' order by w.ChildName`},e.Q_getContractFormStoresList=function(n){var o=new Date,I=(0,t.default)(o).format('MM/DD/YYYY'),S="inner join Master_ProgramDefinition w on w.ProgramDefinitionId=mp.ProgramDefinitionId and w.ProgramId=mp.ProgramId ",i="inner join Mapping_ContractForm mp on mp.StoreId=jp.StoreId ",E=`select DISTINCT jp.*,'NonMerchandising_JourneyPlan' as JcpType from NonMerchandising_JourneyPlan jp ${i} ${S} where jp.VisitDate='${I}'`,D=`select DISTINCT jp.*,'NonProgram_JourneyPlan' as JcpType from NonProgram_JourneyPlan jp ${i} ${S} where jp.VisitDate='${I}'`,u=`select DISTINCT jp.*,'StoreSearch_JourneyPlan' as JcpType from StoreSearch_JourneyPlan jp ${i} ${S} where jp.VisitDate='${I}'`,N=`select DISTINCT jp.*,'JourneyPlan_RouteWise' as JcpType from JourneyPlan_RouteWise jp ${i} ${S} where jp.VisitDate='${I}'`,s=`select DISTINCT jp.*,'Mapping_JourneyPlan' as JcpType from Mapping_JourneyPlan jp ${i} ${S} where jp.VisitDate='${I}' UNION select DISTINCT jp.*,'Adhoc_JourneyPlan' as JcpType from Adhoc_JourneyPlan jp ${i} ${S} where jp.VisitDate='${I}'`;1==n.ShowNonMerList&&(s+=' UNION '+E);1==n.ShowNonProgram&&(s+=' UNION '+D);1==n.ShowStoreSearch&&(s+=' UNION '+u);1==n.ShowBeatPlanList&&(s+=' UNION '+N);return s},e.Q_getMissedCall=P,e.Q_getMyDBMenuList=function(n,t){return i.apply(this,arguments)},e.Q_getMyDistributorList=function(n){return I.apply(this,arguments)},e.Q_getMyStoresList=function(){return o.apply(this,arguments)},e.Q_getMyStoresMenuList=function(){return S.apply(this,arguments)},e.Q_getSamplingData=function(n){n.StoreId;var t=n.ChainId,o=n.StoreTypeId,I=n.StateId;return`SELECT DISTINCT s.Sample,s.SampleId from Master_Sample s INNER JOIN Mapping_Sample m on s.SampleId=m.SampleId where m.ChainId='${t}' and m.StateId='${I}' and m.StoreTypeId='${o}' `},e.Q_getSurveys=function(n){var t=n.StoreId;n.ChainId,n.StoreTypeId,n.StateId;return`Select Distinct T.SurveyName ,T.SurveyId ,T.ShowCat from Master_SurveyQuestion T INNER JOIN Mapping_Survey M on T.SurveyId=M.SurveyId where M.StoreId='${t}'`},e.Q_getdefaltShareofSelf=function(n){n.StoreId;var t=n.ChainId,o=n.StoreTypeId;return`SELECT DISTINCT p.CategoryId,p.CategoryName from Product_Master p INNER JOIN Master_Category mc on mc.CategoryId = p.CategoryId INNER JOIN Mapping_ShareOfShelf m on p.SubCategoryId=m.SubCategoryId Where m.StateId ='${n.StateId}' and m.ChainId ='${t}' and m.StoreTypeId ='${o}' order by p.CategorySequence`},e.Q_getpaidvisibility=function(n){var t=n.StoreId;n.ChainId,n.StoreTypeId;return`SELECT DISTINCT p.SubCategoryName,p.SubCategoryId from Product_Master p INNER JOIN Mapping_Visibility v on p.SubCategoryId=v.SubCategoryId INNER join Master_Display md on md.DisplayId=v.DisplayId Where v.StoreId='${t}' and md.Paid='1' `},e.Q_getpromotionmappingList=function(n){n.StoreId;var t=n.ChainId,o=n.StoreTypeId;return`SELECT DISTINCT p.SubCategoryId,p.SubCategoryName from Product_Master p INNER JOIN Mapping_Promotion m on p.SubCategoryId=m.SubCategoryId where m.StateId='${n.StateId}' and m.ChainId='${t}' and m.StoreTypeId='${o}' `},e.checkFilledSurveys=E,e.checkIf_surveyCatDone=oe,e.checkIf_surveyDone=Ie,e.getAvailblQuery=B,e.getIfAvlbl=function(n,t){var o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},I=!1;switch(n){case'STOCK':case'STOCKWITHCATEGORY':case'OPSTOCK':case'BACKSTOCK':case'MDSTOCK':case'CLSSTOCK':case'SOS':case'PAIDVISI':case'COMPVISI':case'COMPVISI_IR':case'PROMOTION':case'COMPROMO':case'SALE':case'SURVEY':case'WINDOW':case'WINDOW_IR':case'POSM':case'FEEDBACK':case'PROMOTION2':case'STOREIMG':case'SHELFTALKER':case'PROMOTIONONEAPP':case'PAIDVISIONEAPP':case'PAIDVISIONEAPP_IR':case'SOSONEAPP':case'SOSONEAPP_IR':case'POSSALEONEAPP':return t.rows.length>0&&(I=!0),I;case'ADDITIONALVISI':case'ADDITIONALVISI_IR':return t.rows.length>0&&'Y'==o.AddVisiAllow&&(I=!0),I;case'CONCOV':return I=!0;default:return I}},e.getIfKPIDone=function(n,t,o){return G.apply(this,arguments)},e.getProgramChecklistAvailableQ=function(n,t,o){var I=n.StoreId,S=o.ProgramId;console.log("program:",o);return`select mg.* from Master_ProgramDefinition w inner join Mapping_StoreProgram s on w.ProgramDefinitionId=s.ProgramDefinitionId inner join Mapping_StoreAuditGrading mg on s.ProgramDefinitionId=mg.ProgramDefinitionId and s.StoreId = mg.StoreId where s.StoreId='${I}' and w.MenuId='${t.MenuId}' and w.ProgramId='${S}' `},e.getQuery=j,e.get_DBAvailblQuery=X,e.get_DBQuery=z;var n=r(d[0])(r(d[1])),t=r(d[0])(r(d[2]));r(d[0])(r(d[3]));function o(){return o=(0,n.default)((function*(){var o=arguments.length>0&&void 0!==arguments[0]&&arguments[0],I=arguments.length>1&&void 0!==arguments[1]&&arguments[1],S=arguments.length>2&&void 0!==arguments[2]&&arguments[2],i=arguments.length>3&&void 0!==arguments[3]&&arguments[3],E=arguments.length>4&&void 0!==arguments[4]&&arguments[4],D='',u=r(d[4]).AppTables.CHECKIN_DATA,N=1==E?"StoreSearch_JourneyPlan":1==I?'JourneyPlan_RouteWise':1==o?'Adhoc_JourneyPlan':1==S?"NonMerchandising_JourneyPlan":1==i?"NonProgram_JourneyPlan":'Mapping_JourneyPlan',s='StoreCats',O=new Date,T=(0,t.default)(O).format('MM/DD/YYYY'),M=`(select Distinct JP.*,MM.MenuId,c.KPIFieldEnable as PSAllow from ${N} JP\n Left outer join \n\t (select * from Mapping_Menu MN inner join Menu_Master MMAS on MN.MenuId=MMAS.MenuId) MM on JP.ChannelId=MM.ChannelId and JP.StoreTypeId=MM.StoreTypeId and JP.RegionId=MM.RegionId and JP.StoreCategoryId=MM.StoreCategoryId\n Left Outer Join (Select Distinct ScreenName,KPIFieldName,KPIFieldEnable,KPIFieldDisplayName from Mapping_MenuConfiguration Where KPIFieldName='PartialSaveAllow') c on c.ScreenName=MM.ScreenName \n where JP.VisitDate='${T}'\n Order by JP.StoreId, MM.MenuId) as Menu `,P=`MDist.DistributorId,MDist.DistributorName,${s}.StoreId,${s}.StoreCode,${s}.MID,${s}.ChannelId,${s}.StoreId,${s}.EmpId,${s}.VisitDate,${s}.ChainId,${s}.ChainName,${s}.StoreName,${s}.Address,${s}.Location,${s}.Landmark,${s}.CityId,${s}.CityName,${s}.StateId,${s}.StateName,${s}.RegionId,${s}.StoreTypeId,${s}.StoreType,${s}.Pincode,${s}.Latitude,${s}.Longitude,${s}.Phone,${s}.Mobile,${s}.ContactPerson,${s}.Email,${s}.UploadStatus,${s}.GeoTag,${s}.GeoFenceRadius,${s}.ExpiryStock,${s}.InTime,${s}.OutTime,${s}.CameraAllow,${s}.AddVisiAllow,${s}.LastVisitDate,${s}.Score,${s}.MinTimeTaken,${s}.MTDMerchandised,${s}.StoreCategoryId,${s}.StoreCategory,${s}.StoreClassId,${s}.StoreClass,${s}.TaxType,${s}.GSTno,${s}.GSTImage,${s}.Deviation,${s}.StoreBgColor`,R="CheckInData.CHECKIN_TIME as CheckInTime,CheckInData.CHECKOUT_TIME as CheckOutTime,CheckInData.JCP_TYPE",l=` Left Outer Join Master_Distributor MDist on ${s}.DistributorId=MDist.DistributorId `,C=yield(0,r(d[5]).getKPIFields)({},!0),A="",c="";return new Promise((function(t,O){var p;r(d[6]).db.transaction((p=(0,n.default)((function*(O){var p;yield O.executeSql("SELECT DISTINCT t1.ScreenName,t1.MenuId from Menu_Master t1 INNER join Mapping_Menu t2 on t1.MenuId=t2.MenuId ",[],(p=(0,n.default)((function*(n,O){if(O.rows.length>0)for(var p=0;p0 THEN 1 ELSE 0 END as DataRowCount,\n dataavl.DataRowCount as DataDoneCount,\n AVLSTK.DataRowAvlblCount,\n Menu.PSAllow,\n CASE WHEN (KPIAVBL = 1 AND Menu.PSAllow IS NOT NULL AND (Menu.PSAllow = 'true' OR Menu.PSAllow = 1) AND dataavl.DataRowCount >= AVLSTK.DataRowAvlblCount)\n THEN 1 WHEN (KPIAVBL = 1 AND (Menu.PSAllow IS NULL OR (Menu.PSAllow <> 'true' AND Menu.PSAllow <> 1))\n AND dataavl.DataRowCount > 0) THEN 1 ELSE 0 END AS IsKPIDone \n from ${M} LEFT Outer Join ( ${c} ) as AVLSTK ON Menu.StoreId=AVLSTK.StoreId and Menu.MenuId=AVLSTK.MenuId Left Outer Join ( ${A} ) dataavl ON Menu.StoreId=dataavl.StoreId and Menu.MenuId=dataavl.MenuId `,console.log("localquery",D),t(`select ${R},${P},count((CASE WHEN (${s}.KPIAVBL==1) THEN 1 ELSE null END)) as MenuCount,\n count(StoreCats.KPIAVBL) as MenuCountWithNonAvlbl,\n count((CASE WHEN (${s}.KPIAVBL==1 and ${s}.DataRowCount>0) THEN 1 ELSE null END )) as MenuDoneCount,\n count (CASE WHEN StoreCats.IsKPIDone==1 THEN 1 ELSE NULL END) as PS_MenuDoneCount\n \n from (${D}) as ${s} ${_} ${l} GROUP BY ${s}.StoreId ORDER BY CASE StoreCats.UploadStatus WHEN 'I' THEN 1 WHEN 'P' THEN 2 WHEN 'D' THEN 3 WHEN 'U' THEN 4 WHEN 'L' THEN 5 WHEN 'N' THEN 6 WHEN '' THEN 7 ELSE 8 END`)}}else{var $=` Left Outer Join ( Select ${u}.* From ${u} Where ${u}.JCP_TYPE='${N}' and ${u}.VISIT_DATE='${T}') as CheckInData on ${s}.StoreId=CheckInData.STORE_ID `;t(`select ${R},${P},0 as MenuCount,0 as MenuCountWithNonAvlbl,0 as MenuDoneCount from (${D=`Select Menu.*, 0 as KPIAVBL, 0 as DataRowCount from ${M} `}) as ${s} ${$} ${l} GROUP BY ${s}.StoreId ORDER BY CASE StoreCats.UploadStatus WHEN 'I' THEN 1 WHEN 'P' THEN 2 WHEN 'D' THEN 3 WHEN 'U' THEN 4 WHEN 'L' THEN 5 WHEN 'N' THEN 6 WHEN '' THEN 7 ELSE 8 END`)}})),function(n,t){return p.apply(this,arguments)}),(function(n,o){console.log('txnerr in store q:',o),t('')}))})),function(n){return p.apply(this,arguments)}))})).catch((function(n){return console.log('error in query:',n),''}))})),o.apply(this,arguments)}function I(){return I=(0,n.default)((function*(o){var I=r(d[4]).AppTables.DISTRIBUTOR_CHECKIN,S='Master_Distributor',i='StoreCats',E=new Date,D=(0,t.default)(E).format('MM/DD/YYYY'),u=`(select Distinct JP.*,MM.MenuId from ${S} JP\n Left outer join \n\t (select Distinct JP.DistributorId,MM_Inner.* from ${S} JP cross join (select MMAS.* from Menu_Master MMAS Inner Join Mapping_MenuDistributorPoint MMap on MMap.MenuId=MMAS.MenuId) as MM_Inner) \n MM on JP.DistributorId=MM.DistributorId\n Order by JP.DistributorId, MM.MenuId) as Menu `,N=`${i}.DMID as MID,${i}.EmpId,${i}.DistributorId as StoreId,${i}.DistributorName as StoreName,${i}.DistributorCode as StoreCode,${i}.Latitude,${i}.Longitude,${i}.InTime,${i}.OutTime,${i}.UploadStatus,${i}.GeoTag`,s="CheckInData.CHECKIN_TIME as CheckInTime,CheckInData.CHECKOUT_TIME as CheckOutTime",O="",T="";return new Promise((function(t,E){var M;r(d[6]).db.transaction((M=(0,n.default)((function*(E){var M;yield E.executeSql("SELECT DISTINCT t1.ScreenName,t1.MenuId from Menu_Master t1 INNER join Mapping_MenuDistributorPoint t2 on t1.MenuId=t2.MenuId",[],(M=(0,n.default)((function*(n,E){if(E.rows.length>0)for(var M=0;M0 THEN 1 ELSE 0 END as DataRowCount from ${u} LEFT Outer Join ( ${T} ) as AVLSTK ON Menu.DistributorId=AVLSTK.DistributorId and Menu.MenuId=AVLSTK.MenuId Left Outer Join ( ${O} ) dataavl ON Menu.DistributorId=dataavl.DistributorId and Menu.MenuId=dataavl.MenuId `}) as ${i} ${C} GROUP BY ${i}.DistributorId ORDER BY CASE StoreCats.UploadStatus WHEN 'I' THEN 1 WHEN 'P' THEN 2 WHEN 'D' THEN 3 WHEN 'U' THEN 4 WHEN 'L' THEN 5 WHEN 'N' THEN 6 WHEN '' THEN 7 ELSE 8 END`)}}else{var A=` Left Outer Join ( Select ${I}.* From ${I} Where ${I}.VISIT_DATE='${D}') as CheckInData on ${i}.DistributorId=CheckInData.DISTRIBUTOR_ID `;t(`select ${s},${N},0 as MenuCount,0 as MenuDoneCount from (${`Select Menu.*, 0 as KPIAVBL, 0 as DataRowCount from ${u} `}) as ${i} ${A} GROUP BY ${i}.DistributorId ORDER BY CASE StoreCats.UploadStatus WHEN 'I' THEN 1 WHEN 'P' THEN 2 WHEN 'D' THEN 3 WHEN 'U' THEN 4 WHEN 'L' THEN 5 WHEN 'N' THEN 6 WHEN '' THEN 7 ELSE 8 END`)}})),function(n,t){return M.apply(this,arguments)}),(function(n,o){console.log('txnerr in store q:',o),t('')}))})),function(n){return M.apply(this,arguments)}))})).catch((function(n){return console.log('error in query:',n),''}))})),I.apply(this,arguments)}function S(){return S=(0,n.default)((function*(){var o=arguments.length>0&&void 0!==arguments[0]&&arguments[0],I=arguments.length>1?arguments[1]:void 0,S=arguments.length>3&&void 0!==arguments[3]&&arguments[3],i=arguments.length>4&&void 0!==arguments[4]&&arguments[4],E=arguments.length>5&&void 0!==arguments[5]&&arguments[5],D=arguments.length>6&&void 0!==arguments[6]&&arguments[6],u='',N=(r(d[4]).AppTables.CHECKIN_DATA,1==D?'StoreSearch_JourneyPlan':1==S?'JourneyPlan_RouteWise':1==o?'Adhoc_JourneyPlan':1==i?"NonMerchandising_JourneyPlan":1==E?'NonProgram_JourneyPlan':'Mapping_JourneyPlan'),s=new Date,O=` (select Distinct JP.StoreId,MMAS.MenuId,MMAS.MenuName,MMAS.NormalIcon,MMAS.TickIcon,MMAS.GreyIcon,MMAS.MenuPath,MMAS.ScreenName,MMAS.MenuSequence,MMAS.InnerScreenConfig,c.KPIFieldEnable as PSAllow,c.KPIFieldDisplayName as PSTableName from ${N} JP\n inner join Mapping_Menu MM on JP.ChannelId=MM.ChannelId and JP.StoreTypeId=MM.StoreTypeId and JP.RegionId=MM.RegionId and JP.StoreCategoryId=MM.StoreCategoryId\n inner join Menu_Master MMAS on MM.MenuId=MMAS.MenuId\n Left Outer Join (Select Distinct ScreenName,KPIFieldName,KPIFieldEnable,KPIFieldDisplayName from Mapping_MenuConfiguration Where KPIFieldName='PartialSaveAllow' and (KPIFieldEnable='true' or KPIFieldEnable=1 or KPIFieldEnable='1') ) c on c.ScreenName=MMAS.ScreenName \n where JP.VisitDate='${(0,t.default)(s).format('MM/DD/YYYY')}'\n Order by JP.StoreId, MMAS.MenuId) as Menu `;console.log("menuQ--\x3e",O);var T="",M="",P=yield(0,r(d[5]).getKPIFields)({},!0);return yield new Promise((function(t,N){var s;r(d[6]).db.transaction((s=(0,n.default)((function*(N){var s;yield N.executeSql("SELECT DISTINCT t1.ScreenName,t1.MenuId,t1.MenuName,c.KPIFieldEnable as PSAllow,c.KPIFieldDisplayName as PSTableName from Menu_Master t1 INNER join Mapping_Menu t2 on t1.MenuId=t2.MenuId Left Outer Join (Select Distinct ScreenName,KPIFieldName,KPIFieldEnable,KPIFieldDisplayName from Mapping_MenuConfiguration Where KPIFieldName='PartialSaveAllow') c on c.ScreenName=t1.ScreenName ",[],(s=(0,n.default)((function*(n,N){if(N.rows.length>0)for(var s=0;s0 THEN 1 ELSE 0 END as DataRowCount,dataavl.DataRowCount as DataDoneCount,AVLSTK.DataRowAvlblCount from ${O} LEFT Outer Join ( ${M} ) as AVLSTK ON Menu.StoreId=AVLSTK.StoreId and Menu.MenuId=AVLSTK.MenuId Left Outer Join ( ${T} ) dataavl ON Menu.StoreId=dataavl.StoreId and Menu.MenuId=dataavl.MenuId Where Menu.StoreId='${I.StoreId}' order by Menu.MenuSequence `,t(u))}else t('')})),function(n,t){return s.apply(this,arguments)}),(function(n,o){console.log(o),t('')}))})),function(n){return s.apply(this,arguments)}))})).then((function(n){return n})).catch((function(n){return console.log('error in query:',n),''}))})),S.apply(this,arguments)}function i(){return i=(0,n.default)((function*(o,I){console.log('Q_getMyDBMenuList:',o);var S='',i=(r(d[4]).AppTables.CHECKIN_DATA,'Master_Distributor'),E=new Date,D=((0,t.default)(E).format('MM/DD/YYYY'),`(select Distinct JP.DistributorId,MM_Inner.MenuId,MM_Inner.MenuName,MM_Inner.NormalIcon,MM_Inner.TickIcon,MM_Inner.GreyIcon,MM_Inner.MenuPath,MM_Inner.ScreenName,MM_Inner.MenuSequence from ${i} JP \n cross join \n (select MMAS.* from Menu_Master MMAS Inner Join Mapping_MenuDistributorPoint MMap on MMap.MenuId=MMAS.MenuId) as MM_Inner\n Order by JP.DistributorId, MM_Inner.MenuId) as Menu `),u="",N="";return yield new Promise((function(t,E){var s;r(d[6]).db.transaction((s=(0,n.default)((function*(E){var s;yield E.executeSql("SELECT DISTINCT t1.ScreenName,t1.MenuId from Menu_Master t1 INNER join Mapping_MenuDistributorPoint t2 on t1.MenuId=t2.MenuId",[],(s=(0,n.default)((function*(n,E){if(E.rows.length>0)for(var s=0;s0 THEN 1 ELSE 0 END as DataRowCount from ${D} LEFT Outer Join ( ${N} ) as AVLSTK ON Menu.DistributorId=AVLSTK.DistributorId and Menu.MenuId=AVLSTK.MenuId Left Outer Join ( ${u} ) dataavl ON Menu.DistributorId=dataavl.DistributorId and Menu.MenuId=dataavl.MenuId Where Menu.DistributorId='${o.StoreId}' order by Menu.MenuSequence `,t(S))}else t('')})),function(n,t){return s.apply(this,arguments)}),(function(n,o){console.log(o),t('')}))})),function(n){return s.apply(this,arguments)}))})).then((function(n){return n})).catch((function(n){return console.log('error in query:',n),''}))})),i.apply(this,arguments)}function E(n,t,o){return D.apply(this,arguments)}function D(){return D=(0,n.default)((function*(o,I,S){var i=new Date,E=((0,t.default)(i).format('MM/DD/YYYY'),S.StoreId,!0);return new Promise((function(t,o){var i;r(d[6]).db.transaction((i=(0,n.default)((function*(n){if(I.rows.length>0)for(var o=0;o1&&void 0!==arguments[1]?arguments[1]:'',I=arguments.length>2?arguments[2]:void 0,S=n.MenuId,i=n.ScreenName,E=new Date,D=(0,t.default)(E).format('MM/DD/YYYY'),u=null==I?void 0:I.findIndex((function(n){return'COMPStockAllow'==n.KPIFieldName&&n.ScreenName==i})),N=u>=0?I[u]:{};return`SELECT JP.StoreId , ${S} as MenuID,CASE WHEN count(PM.ProductId)>0 THEN 1 ELSE 0 END as KPIAVBL,IFNULL(count(PM.ProductId),0) as DataRowAvlblCount\n from ${o} JP \n INNER JOIN Mapping_ProductAssortmentStorewise MP on JP.StoreId=MP.StoreId\n INNER JOIN Product_Master PM on PM.ProductId=MP.ProductId Where JP.VisitDate='${D}' ${1==(u>=0&&N.KPIFieldEnable)?'':" and (PM.IsCompetitor='0' or PM.IsCompetitor = 0) "}\n group by JP.StoreId`}function N(n){var o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:'',I=arguments.length>2?arguments[2]:void 0,S=n.MenuId,i=n.ScreenName,E=new Date,D=(0,t.default)(E).format('MM/DD/YYYY'),u=null==I?void 0:I.findIndex((function(n){return'COMPStockAllow'==n.KPIFieldName&&n.ScreenName==i})),N=u>=0?I[u]:{};u>=0&&N.KPIFieldEnable;return q=`\n SELECT JP.StoreId, ${S} AS MenuID,\n CASE \n WHEN EXISTS (SELECT 1 FROM Mapping_KYCConfiguration)\n AND NOT EXISTS (SELECT 1 FROM Mapping_KYCUploaded KYC_U WHERE KYC_U.StoreId = JP.StoreId)\n THEN 1 \n ELSE 0 \n END AS KPIAVBL,\n (SELECT COUNT(1) FROM Mapping_KYCConfiguration WHERE (IsMandatory = 'true' or IsMandatory=1)) AS DataRowAvlblCount\n FROM ${o} JP\n WHERE JP.VisitDate = '${D}'\n GROUP BY JP.StoreId\n `,q}function s(n){var o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:'',I=n.MenuId,S=(n.ScreenName,new Date);return`SELECT JP.StoreId, ${I} as MenuID,CASE WHEN count(1)>0 THEN 1 ELSE 0 END as KPIAVBL ,IFNULL(count(W.ProgramDefinitionId),0) as DataRowAvlblCount\n from ${o} JP \n INNER JOIN Mapping_StoreProgram MW on MW.StoreId=JP.StoreId\n INNER JOIN Master_ProgramDefinition W on W.ProgramDefinitionId=MW.ProgramDefinitionId and W.MenuId='${I}'\n Where JP.VisitDate='${(0,t.default)(S).format('MM/DD/YYYY')}'\n group by JP.StoreId`}function O(n){var o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:'',I=n.MenuId,S=(n.ScreenName,new Date);return`SELECT JP.StoreId, ${I} as MenuID,CASE WHEN count(1)>0 THEN 1 ELSE 0 END as KPIAVBL ,IFNULL(count(MW.TargetId),0) as DataRowAvlblCount\n from ${o} JP \n INNER JOIN Mapping_StoreTargetBased MW on MW.StoreId=JP.StoreId and MW.MenuId='${I}'\n Where JP.VisitDate='${(0,t.default)(S).format('MM/DD/YYYY')}'\n group by JP.StoreId`}function T(n){var o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:'',I=n.MenuId,S=(n.ScreenName,new Date);return`SELECT JP.StoreId, ${I} as MenuID,CASE WHEN count(1)>0 THEN 1 ELSE 0 END as KPIAVBL ,1 as DataRowAvlblCount\n from ${o} JP \n Where JP.VisitDate='${(0,t.default)(S).format('MM/DD/YYYY')}'\n group by JP.StoreId`}function M(n){var o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:'',I=n.MenuId,S=new Date;return`SELECT JP.StoreId, ${I} as MenuID,1 as KPIAVBL ,1 as DataRowAvlblCount \n from ${o} JP \n Where JP.VisitDate='${(0,t.default)(S).format('MM/DD/YYYY')}'\n group by JP.StoreId`}function P(n){var o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:'',I=n.MenuId,S=new Date;return`SELECT JP.StoreId, ${I} as MenuID,CASE WHEN count(1)>0 THEN 1 ELSE 0 END as KPIAVBL ,1 as DataRowAvlblCount \n from ${o} JP \n CROSS JOIN (SELECT Topic FROM Master_DetailerContent) MS\n Where JP.VisitDate='${(0,t.default)(S).format('MM/DD/YYYY')}'\n group by JP.StoreId`}function R(n){var o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:'',I=n.MenuId,S=new Date;return`SELECT JP.StoreId, ${I} as MenuID,1 as KPIAVBL,1 as DataRowAvlblCount \n from ${o} JP \n Where JP.VisitDate='${(0,t.default)(S).format('MM/DD/YYYY')}'\n group by JP.StoreId`}function l(n){var o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:'',I=n.MenuId,S=new Date;return`SELECT JP.StoreId , ${I} as MenuID,CASE WHEN count(PM.ProductId)>0 THEN 1 ELSE 0 END as KPIAVBL,IFNULL(count(PM.ProductId),0) as DataRowAvlblCount \n from ${o} JP \n INNER JOIN Mapping_ShareOfShelf MP on JP.StateId=MP.StateId and JP.ChainId=MP.ChainId and JP.StoreTypeId=MP.StoreTypeId\n INNER JOIN Product_Master PM on PM.SubCategoryId=MP.SubCategoryId Where JP.VisitDate='${(0,t.default)(S).format('MM/DD/YYYY')}'\n group by JP.StoreId`}function C(n){var o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:'',I=arguments.length>2&&void 0!==arguments[2]?arguments[2]:'Paid',S=n.MenuId,i=new Date,E=(0,t.default)(i).format('MM/DD/YYYY');return'Paid'==I?`SELECT JP.StoreId , ${S} as MenuID,CASE WHEN count(MD.DisplayId)>0 THEN 1 ELSE 0 END as KPIAVBL,1 as DataRowAvlblCount \n from ${o} JP \n INNER JOIN Mapping_Visibility v on v.StoreId=JP.StoreId\n INNER JOIN Master_Display MD on MD.DisplayId=v.DisplayId and MD.Paid='1'\n Where JP.VisitDate='${E}' \n group by JP.StoreId`:`SELECT DISTINCT JP.StoreId , ${S} as MenuID,CASE WHEN count(MD.DisplayId)>0 THEN 1 ELSE 0 END as KPIAVBL , 1 as DataRowAvlblCount\n from ${o} JP \n CROSS JOIN (select * from Master_Display WHERE \n ${'Add'==I?"Additional='1' or Additional=1 or Additional='true'":''}\n ${'Comp'==I?" Competitor='1' or Competitor='true' or Competitor=1\n ":''}\n ) MD\n Where JP.VisitDate='${E}' ${'Add'==I?" and JP.AddVisiAllow='Y'":''}\n group by JP.StoreId`}function A(n){var o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:'',I=n.MenuId,S=new Date;return`SELECT JP.StoreId, ${I} as MenuID,CASE WHEN count(1)>0 THEN 1 ELSE 0 END as KPIAVBL,IFNULL(count(1),0) as DataRowAvlblCount \n from ${o} JP \n INNER JOIN Mapping_Promotion MP on JP.StateId=MP.StateId and JP.ChainId=MP.ChainId and JP.StoreTypeId=MP.StoreTypeId\n INNER JOIN (Select Distinct CategoryId, SubCategoryId from Product_Master) PMM on PMM.SubCategoryId=MP.SubCategoryId \n Where JP.VisitDate='${(0,t.default)(S).format('MM/DD/YYYY')}'\n group by JP.StoreId`}function c(n){var o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:'',I=n.MenuId,S=new Date;return`SELECT JP.StoreId, ${I} as MenuID,CASE WHEN count(1)>0 THEN 1 ELSE 0 END as KPIAVBL,1 as DataRowAvlblCount \n from ${o} JP \n CROSS JOIN (select * from Master_Competitor) \n Where JP.VisitDate='${(0,t.default)(S).format('MM/DD/YYYY')}' \n group by JP.StoreId`}function p(n){var o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:'',I=n.MenuId,S=new Date;return`SELECT JP.StoreId, ${I} as MenuID,CASE WHEN count(1)>0 THEN 1 ELSE 0 END as KPIAVBL,IFNULL(count(1),0) as DataRowAvlblCount \n from ${o} JP \n INNER JOIN Mapping_Survey MS on MS.StoreId=JP.StoreId\n INNER JOIN (Select Distinct SurveyId,MenuId from Master_SurveyQuestion) S on S.SurveyId=MS.SurveyId and S.MenuId='${I}'\n Where JP.VisitDate='${(0,t.default)(S).format('MM/DD/YYYY')}'\n group by JP.StoreId`}function L(n){var o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:'',I=n.MenuId,S=new Date;return`SELECT JP.StoreId, ${I} as MenuID,CASE WHEN count(1)>0 THEN 1 ELSE 0 END as KPIAVBL,IFNULL(count(S.SamplingDefinitionId),0) as DataRowAvlblCount \n from ${o} JP \n INNER JOIN Mapping_StoreSampling MS on MS.StoreId=JP.StoreId\n INNER JOIN Master_SamplingDefinition S on S.SamplingDefinitionId=MS.SamplingDefinitionId\n Where JP.VisitDate='${(0,t.default)(S).format('MM/DD/YYYY')}'\n group by JP.StoreId`}function J(n){var o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:'',I=n.MenuId,S=new Date;return`SELECT JP.StoreId, ${I} as MenuID,CASE WHEN count(1)>0 THEN 1 ELSE 0 END as KPIAVBL,IFNULL(count(1),0) as DataRowAvlblCount \n from ${o} JP \n INNER JOIN (SELECT DISTINCT FeedbackQuestionId,JP.StoreId FROM Master_FeedbackQuestion) MS on MS.StoreId=JP.StoreId\n Where JP.VisitDate='${(0,t.default)(S).format('MM/DD/YYYY')}'\n group by JP.StoreId`}function f(n){var o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:'',I=n.MenuId,S=new Date;return`SELECT JP.StoreId, ${I} as MenuID,CASE WHEN count(1)>0 THEN 1 ELSE 0 END as KPIAVBL ,IFNULL(count(1),0) as DataRowAvlblCount \n from ${o} JP \n INNER JOIN Mapping_StoreWindow MW on MW.StoreId=JP.StoreId\n INNER JOIN Master_WindowDefinition W on W.WindowDefinitionId=MW.WindowDefinitionId and W.MenuId='${I}'\n Where JP.VisitDate='${(0,t.default)(S).format('MM/DD/YYYY')}'\n group by JP.StoreId`}function _(n){var o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:'',I=n.MenuId,S=new Date;return`SELECT JP.StoreId, ${I} as MenuID,CASE WHEN count(1)>0 THEN 1 ELSE 0 END as KPIAVBL ,IFNULL(count(1),0) as DataRowAvlblCount \n from ${o} JP \n INNER JOIN Mapping_StorePOSM MW on MW.StoreId=JP.StoreId\n INNER JOIN Master_POSMDefinition W on W.POSMDefinitionId=MW.POSMDefinitionId\n Where JP.VisitDate='${(0,t.default)(S).format('MM/DD/YYYY')}'\n group by JP.StoreId`}function $(n){var o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:'',I=n.MenuId,S=new Date;return`SELECT JP.StoreId, ${I} as MenuID,CASE WHEN count(1)>0 THEN 1 ELSE 0 END as KPIAVBL ,1 as DataRowAvlblCount \n from ${o} JP \n CROSS JOIN (SELECT ImageTypeId FROM Master_ImageType) MS\n Where JP.VisitDate='${(0,t.default)(S).format('MM/DD/YYYY')}'\n group by JP.StoreId`}function W(n){var o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:'',I=n.MenuId,S=new Date;return`SELECT JP.StoreId, ${I} as MenuID,CASE WHEN count(1)>0 THEN 1 ELSE 0 END as KPIAVBL, IFNULL(count(1),0) as DataRowAvlblCount \n from ${o} JP \n INNER JOIN Mapping_StoreShelfTalker MW on MW.StoreId=JP.StoreId\n INNER JOIN Master_ShelfTalkerDefinition W on W.StDefinitionId=MW.StDefinitionId\n Where JP.VisitDate='${(0,t.default)(S).format('MM/DD/YYYY')}'\n group by JP.StoreId`}function b(n){var o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:'',I=n.MenuId,S=new Date;return`SELECT JP.StoreId, ${I} as MenuID,CASE WHEN count(1)>0 THEN 1 ELSE 0 END as KPIAVBL , IFNULL(count(W.PromoDefinitionId),0) as DataRowAvlblCount\n from ${o} JP \n INNER JOIN Mapping_StorePromotion MW on MW.StoreId=JP.StoreId\n INNER JOIN Master_PromotionDefinition W on W.PromoDefinitionId=MW.PromoDefinitionId\n Where JP.VisitDate='${(0,t.default)(S).format('MM/DD/YYYY')}'\n group by JP.StoreId`}function y(n){var o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:'',I=arguments.length>2?arguments[2]:void 0,S=n.MenuId,i=new Date,E=(0,t.default)(i).format('MM/DD/YYYY'),D=null==I?void 0:I.findIndex((function(n){return'SpecificMapping'==n.KPIFieldName})),u=D>=0?I[D]:{};return`SELECT JP.StoreId, ${S} as MenuID,CASE WHEN count(1)>0 THEN 1 ELSE 0 END as KPIAVBL ,IFNULL(count(W.VisibilityDefinitionId),0) as DataRowAvlblCount\n from ${o} JP \n INNER JOIN (select distinct StoreId,VisibilityDefinitionId from ${1==(D>=0&&u.KPIFieldEnable)?'Mapping_StoreVisibilitySpecific':"Mapping_StoreVisibility"}) MW on MW.StoreId=JP.StoreId\n INNER JOIN Master_VisibilityDefinition W on W.VisibilityDefinitionId=MW.VisibilityDefinitionId and W.MenuId='${S}'\n Where JP.VisitDate='${E}'\n group by JP.StoreId`}function h(n){var o,I=arguments.length>1&&void 0!==arguments[1]?arguments[1]:'',S=arguments.length>2?arguments[2]:void 0,i=n.MenuId,E=(n.MenuName,new Date),D=(0,t.default)(E).format('MM/DD/YYYY'),u=null==S?void 0:S.find((function(n){return"WAREHOUSEDEPLOY"==n.ScreenName&&"DeploymentTypeHide"==n.KPIFieldName})),N=null==u||null==(o=u.KPIType)?void 0:o.split(":"),s=`SELECT JP.StoreId, ${i} as MenuID,CASE WHEN count(1)>0 THEN 1 ELSE 0 END as KPIAVBL ,IFNULL(count(W.ItemId),0) as DataRowAvlblCount\n from ${I} JP \n INNER JOIN ${((null==N?void 0:N.length)>0?N[(null==N?void 0:N.length)-1]:null)==i?"Mapping_WarehousePrimaryItem":"Mapping_WarehouseCampaignDeployment"} MW on MW.MenuId='${i}' and MW.StoreId=JP.StoreId\n INNER JOIN Master_WarehouseItem W on W.ItemId=MW.ItemId \n Where JP.VisitDate='${D}'\n group by JP.StoreId`;return console.log("Q_getAvailbl_WarehouseDeployment q:",s,u),s}function U(n){var o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:'',I=n.MenuId;console.log("menuItem-----",n);var S=new Date;return`SELECT JP.StoreId, ${I} as MenuID,CASE WHEN count(1)>0 THEN 1 ELSE 0 END as KPIAVBL ,IFNULL(count(W.ItemId),0) as DataRowAvlblCount\n from ${o} JP \n INNER JOIN Mapping_WarehouseCampaignItem MW on MW.CityId=JP.CityId and MW.StoreTypeId=JP.StoreTypeId\n INNER JOIN Master_WarehouseItem W on W.ItemId=MW.ItemId \n Where JP.VisitDate='${(0,t.default)(S).format('MM/DD/YYYY')}'\n group by JP.StoreId`}function w(n){var o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:'',I=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[],S=n.MenuId,i=n.ScreenName,E=new Date,D=(0,t.default)(E).format('MM/DD/YYYY'),u=null==I?void 0:I.findIndex((function(n){return'SOSCheckAssortment'==n.KPIFieldName&&n.ScreenName==i})),N=u>=0?I[u]:{},s=u>=0&&N.KPIFieldEnable;function O(){return` Select DISTINCT JP1.StoreId,p.${arguments.length>0&&void 0!==arguments[0]?arguments[0]:'CategoryId'} from ${o} JP1\n INNER JOIN Mapping_ProductAssortmentStorewise mp on mp.StoreId=JP1.StoreId\n INNER JOIN Product_Master p on p.ProductId=mp.ProductId `}var T=O('CategoryId'),M=O('SubCategoryId'),P=O('BrandId'),R=O('ProductId');return s?`SELECT JP.StoreId, ${S} as MenuID,CASE WHEN count(1)>0 THEN 1 ELSE 0 END as KPIAVBL ,IFNULL(count(W.SOSDefinitionId),0) as DataRowAvlblCount\n from ${o} JP \n INNER JOIN Mapping_StoreShareOfShelf MW on MW.StoreId=JP.StoreId\n INNER JOIN (Select * from Master_ShareOfShelfDefinition where SOSChildTable='Master_Category') W on W.SOSDefinitionId=MW.SOSDefinitionId\n INNER JOIN (${T}) p on p.CategoryId=W.SOSChildValue and p.StoreId=JP.StoreId\n Where JP.VisitDate='${D}'\n group by JP.StoreId\n\n UNION\n\n SELECT JP.StoreId, ${S} as MenuID,CASE WHEN count(1)>0 THEN 1 ELSE 0 END as KPIAVBL ,IFNULL(count(W.SOSDefinitionId),0) as DataRowAvlblCount\n from ${o} JP \n INNER JOIN Mapping_StoreShareOfShelf MW on MW.StoreId=JP.StoreId\n INNER JOIN (Select * from Master_ShareOfShelfDefinition where SOSChildTable='Master_SubCategory') W on W.SOSDefinitionId=MW.SOSDefinitionId\n INNER JOIN (${M}) p on p.SubCategoryId=W.SOSChildValue and p.StoreId=JP.StoreId\n Where JP.VisitDate='${D}'\n group by JP.StoreId\n\n\n UNION\n\n SELECT JP.StoreId, ${S} as MenuID,CASE WHEN count(1)>0 THEN 1 ELSE 0 END as KPIAVBL ,IFNULL(count(W.SOSDefinitionId),0) as DataRowAvlblCount\n from ${o} JP \n INNER JOIN Mapping_StoreShareOfShelf MW on MW.StoreId=JP.StoreId\n INNER JOIN (Select * from Master_ShareOfShelfDefinition where SOSChildTable='Master_Brand') W on W.SOSDefinitionId=MW.SOSDefinitionId\n INNER JOIN (${P}) p on p.BrandId=W.SOSChildValue and p.StoreId=JP.StoreId\n Where JP.VisitDate='${D}'\n group by JP.StoreId\n\n UNION\n\n SELECT JP.StoreId, ${S} as MenuID,CASE WHEN count(1)>0 THEN 1 ELSE 0 END as KPIAVBL ,IFNULL(count(W.SOSDefinitionId),0) as DataRowAvlblCount\n from ${o} JP \n INNER JOIN Mapping_StoreShareOfShelf MW on MW.StoreId=JP.StoreId\n INNER JOIN (Select * from Master_ShareOfShelfDefinition where SOSChildTable='Master_Product') W on W.SOSDefinitionId=MW.SOSDefinitionId\n INNER JOIN (${R}) p on p.ProductId=W.SOSChildValue and p.StoreId=JP.StoreId\n Where JP.VisitDate='${D}'\n group by JP.StoreId\n `:`SELECT JP.StoreId, ${S} as MenuID,CASE WHEN count(1)>0 THEN 1 ELSE 0 END as KPIAVBL ,IFNULL(count(W.SOSDefinitionId),0) as DataRowAvlblCount\n from ${o} JP \n INNER JOIN Mapping_StoreShareOfShelf MW on MW.StoreId=JP.StoreId\n INNER JOIN Master_ShareOfShelfDefinition W on W.SOSDefinitionId=MW.SOSDefinitionId\n Where JP.VisitDate='${D}'\n group by JP.StoreId`}function v(n){var o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:'',I=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[],S=n.MenuId,i=n.ScreenName,E=new Date,D=(0,t.default)(E).format('MM/DD/YYYY'),u=null==I?void 0:I.findIndex((function(n){return'SOSCheckAssortment'==n.KPIFieldName&&n.ScreenName==i})),N=u>=0?I[u]:{},s=u>=0&&N.KPIFieldEnable;function O(){return` Select DISTINCT JP1.StoreId,p.${arguments.length>0&&void 0!==arguments[0]?arguments[0]:'CategoryId'} from ${o} JP1\n INNER JOIN Mapping_ProductAssortmentStorewise mp on mp.StoreId=JP1.StoreId\n INNER JOIN Product_Master p on p.ProductId=mp.ProductId `}var T=O('CategoryId'),M=O('SubCategoryId'),P=O('BrandId'),R=O('ProductId');return console.log("sosCheckAssortment------",s),s?`SELECT JP.StoreId, ${S} as MenuID,CASE WHEN count(1)>0 THEN 1 ELSE 0 END as KPIAVBL ,IFNULL(count(W.SOSDefinitionId),0) as DataRowAvlblCount\n from ${o} JP \n INNER JOIN Mapping_StoreShareOfShelfEyeLevel MW on MW.StoreId=JP.StoreId\n INNER JOIN (Select * from Master_ShareOfShelfEyeLevelDefinition where SOSChildTable='Master_Category') W on W.SOSDefinitionId=MW.SOSDefinitionId\n INNER JOIN (${T}) p on p.CategoryId=W.SOSChildValue and p.StoreId=JP.StoreId\n Where JP.VisitDate='${D}'\n group by JP.StoreId\n\n UNION\n\n SELECT JP.StoreId, ${S} as MenuID,CASE WHEN count(1)>0 THEN 1 ELSE 0 END as KPIAVBL ,IFNULL(count(W.SOSDefinitionId),0) as DataRowAvlblCount\n from ${o} JP \n INNER JOIN Mapping_StoreShareOfShelfEyeLevel MW on MW.StoreId=JP.StoreId\n INNER JOIN (Select * from Master_ShareOfShelfEyeLevelDefinition where SOSChildTable='Master_SubCategory') W on W.SOSDefinitionId=MW.SOSDefinitionId\n INNER JOIN (${M}) p on p.SubCategoryId=W.SOSChildValue and p.StoreId=JP.StoreId\n Where JP.VisitDate='${D}'\n group by JP.StoreId\n\n\n UNION\n\n SELECT JP.StoreId, ${S} as MenuID,CASE WHEN count(1)>0 THEN 1 ELSE 0 END as KPIAVBL ,IFNULL(count(W.SOSDefinitionId),0) as DataRowAvlblCount\n from ${o} JP \n INNER JOIN Mapping_StoreShareOfShelfEyeLevel MW on MW.StoreId=JP.StoreId\n INNER JOIN (Select * from Master_ShareOfShelfEyeLevelDefinition where SOSChildTable='Master_Brand') W on W.SOSDefinitionId=MW.SOSDefinitionId\n INNER JOIN (${P}) p on p.BrandId=W.SOSChildValue and p.StoreId=JP.StoreId\n Where JP.VisitDate='${D}'\n group by JP.StoreId\n\n UNION\n\n SELECT JP.StoreId, ${S} as MenuID,CASE WHEN count(1)>0 THEN 1 ELSE 0 END as KPIAVBL ,IFNULL(count(W.SOSDefinitionId),0) as DataRowAvlblCount\n from ${o} JP \n INNER JOIN Mapping_StoreShareOfShelfEyeLevel MW on MW.StoreId=JP.StoreId\n INNER JOIN (Select * from Master_ShareOfShelfEyeLevelDefinition where SOSChildTable='Master_Product') W on W.SOSDefinitionId=MW.SOSDefinitionId\n INNER JOIN (${R}) p on p.ProductId=W.SOSChildValue and p.StoreId=JP.StoreId\n Where JP.VisitDate='${D}'\n group by JP.StoreId\n `:`SELECT JP.StoreId, ${S} as MenuID,CASE WHEN count(1)>0 THEN 1 ELSE 0 END as KPIAVBL ,IFNULL(count(W.SOSDefinitionId),0) as DataRowAvlblCount\n from ${o} JP \n INNER JOIN Mapping_StoreShareOfShelfEyeLevel MW on MW.StoreId=JP.StoreId\n INNER JOIN Master_ShareOfShelfEyeLevelDefinition W on W.SOSDefinitionId=MW.SOSDefinitionId\n Where JP.VisitDate='${D}'\n group by JP.StoreId`}function F(n){var o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:'',I=n.MenuId,S=new Date;return`SELECT JP.StoreId, ${I} as MenuID,CASE WHEN count(1)>0 THEN 1 ELSE 0 END as KPIAVBL ,IFNULL(count(ps.PosDefinitionId),0) as DataRowAvlblCount \n from ${o} JP \n CROSS JOIN (SELECT * ,mps.StoreId from Master_PosSaleDefinition p INNER join Mapping_StorePosSaleDefinition mps on p.PosDefinitionId=mps.PosDefinitionId ) ps on ps.StoreId=JP.StoreId\n Where JP.VisitDate='${(0,t.default)(S).format('MM/DD/YYYY')}' \n group by JP.StoreId`}function H(n){var o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:'',I=n.MenuId,S=new Date;return`SELECT JP.StoreId, ${I} as MenuID,CASE WHEN count(1)>0 THEN 1 ELSE 0 END as KPIAVBL ,IFNULL(count(W.CategoryDefinitionId),0) as DataRowAvlblCount \n from ${o} JP \n INNER JOIN Mapping_StoreCategory MW on MW.StoreId=JP.StoreId\n INNER JOIN Master_CategoryDefinition W on W.CategoryDefinitionId=MW.CategoryDefinitionId\n Where JP.VisitDate='${(0,t.default)(S).format('MM/DD/YYYY')}'\n group by JP.StoreId`}function V(n){var o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:'',I=n.MenuId,S=new Date;return`SELECT JP.StoreId, ${I} as MenuID,1 as KPIAVBL ,1 as DataRowAvlblCount \n from ${o} JP \n INNER JOIN Report_ComplianceScore Rp on Rp.StoreId=JP.StoreId\n Where JP.VisitDate='${(0,t.default)(S).format('MM/DD/YYYY')}'\n group by JP.StoreId`}function Y(n){var o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:'',I=n.MenuId,S=new Date;return`SELECT JP.StoreId, ${I} as MenuID,CASE WHEN count(1)>0 THEN 1 ELSE 0 END as KPIAVBL ,IFNULL(count(1),0) as DataRowAvlblCount \n from ${o} JP \n CROSS JOIN (SELECT OrderId, StoreId FROM PriviousVisit_Orders) as MS\n Where JP.VisitDate='${(0,t.default)(S).format('MM/DD/YYYY')}' and MS.StoreId=JP.StoreId\n group by JP.StoreId`}function K(n){var o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:'',I=n.MenuId,S=new Date;return`SELECT JP.StoreId, ${I} as MenuID,CASE WHEN count(1)>0 THEN 1 ELSE 0 END as KPIAVBL ,1 as DataRowAvlblCount \n from ${o} JP \n CROSS JOIN (SELECT BreakId FROM Master_Break) MS\n Where JP.VisitDate='${(0,t.default)(S).format('MM/DD/YYYY')}'\n group by JP.StoreId`}function B(n,o,I,S,i,E,D){var B=n.ScreenName,j=(n.MenuId,1==I?'JourneyPlan_RouteWise':1==o?'Adhoc_JourneyPlan':1==S?'NonMerchandising_JourneyPlan':1==i?'NonProgram_JourneyPlan':1==E?'StoreSearch_JourneyPlan':'Mapping_JourneyPlan'),G=new Date,Q=((0,t.default)(G).format('MM/DD/YYYY'),"");switch(B){case'STOCK':case'STOCKWITHPROMO':case'ONEAPPSTOCKQRSCAN':case'ONEAPPSALEQRSCAN':case'STOCKWITHCATEGORY':case'OPSTOCK':case'BACKSTOCK':case'MDSTOCK':case'CLSSTOCK':case'SALE':case'ORDER':return Q=u(n,j,D);case'KYCONEAPP':return Q=N(n,j,D);case'SOS':return Q=l(n,j);case'PAIDVISI':return Q=C(n,j,'Paid');case'ADDITIONALVISI':case'ADDITIONALVISI_IR':case'ADDITIONALVISI_IR_ONLY':return Q=C(n,j,'Add');case'COMPVISI':return Q=C(n,j,'Comp'),console.log("COMPVISI_qqqq",Q),Q;case'COMPVISI_IR':return Q=C(n,j,'Comp');case'PROMOTION':case'PROMOTION2':return Q=A(n,j);case'COMPROMO':return Q=c(n,j);case'CONCOV':return Q=R(n,j);case'SURVEY':return Q=p(n,j);case'WINDOW':case'WINDOW_IR':return Q=f(n,j);case'POSM':return Q=_(n,j);case'FEEDBACK':return Q=J(n,j);case'STOREIMG':return Q=$(n,j);case'SHELFTALKER':return Q=W(n,j);case'PROMOTIONONEAPP':case'PROMOTIONONEAPP_IR':return Q=b(n,j);case'PAIDVISIONEAPP':case'PAIDVISIONEAPP_IR':case'PAIDVISIONEAPP_IR_ONLY':return Q=y(n,j,D);case'SOSONEAPP':case'SOSONEAPP_IR':case'SOSONEAPP_IR_ONLY':return Q=w(n,j,D);case'CATEXEONEAPP':return Q=H(n,j);case'STORESCORE':return Q=V(n,j);case'ORDERSTATUS':return Q=Y(n,j);case'TRAININGONEAPP':return Q=M(n,j);case'POSSALEONEAPP':return Q=F(n,j);case'SAMPLINGONEAPP':return Q=L(n,j);case'PROGRAMONEAPP':return Q=s(n,j,D);case'TGBASEDONEAPP':return Q=O(n,j,D);case'STOREDYNAMICSCORE':return Q=T(n,j,D);case'ONEAPPMISSEDCALL':return Q=P(n,j,D);case'SOSEYELEVELONEAPP':return Q=v(n,j,D);case'BREAKTIME':return Q=K(n,j);case'WAREHOUSEDEPLOY':return Q=h(n,j,D);case'WAREHOUSECAMPAIGN':return Q=U(n,j,D);default:return''}}function j(n,o,I,S,i,E){var D=n.ScreenName,u=n.MenuId,N=1==I?'JourneyPlan_RouteWise':1==o?'Adhoc_JourneyPlan':1==S?'NonMerchandising_JourneyPlan':1==i?'NonProgram_JourneyPlan':1==E?'StoreSearch_JourneyPlan':'Mapping_JourneyPlan',s=new Date,O=(0,t.default)(s).format('MM/DD/YYYY'),T="";switch(D){case'STOCK':return T=` SELECT Jp.StoreId, ${u} as MenuID, IFNULL(DR.DataRowCount,0) as DataRowCount FROM ${N} JP LEFT OUTER JOIN\n (SELECT STORE_ID AS StoreId , IFNULL(COUNT(1),0) AS DATAROWCOUNT FROM ${r(d[4]).AppTables.STOCK2_DATA} WHERE VISIT_DATE='${O}' GROUP BY STORE_ID) DR\n ON JP.StoreId=DR.StoreId WHERE Jp.VisitDate='${O}' `;case'STOCKWITHPROMO':return T=` SELECT Jp.StoreId, ${u} as MenuID, IFNULL(DR.DataRowCount,0) as DataRowCount FROM ${N} JP LEFT OUTER JOIN\n (SELECT STORE_ID AS StoreId , IFNULL(COUNT(1),0) AS DATAROWCOUNT FROM ${r(d[4]).AppTables.STOCKPROMO_DATA} WHERE VISIT_DATE='${O}' GROUP BY STORE_ID) DR\n ON JP.StoreId=DR.StoreId WHERE Jp.VisitDate='${O}' `;case'ONEAPPSTOCKQRSCAN':return T=` SELECT Jp.StoreId, ${u} as MenuID, IFNULL(DR.DataRowCount,0) as DataRowCount FROM ${N} JP LEFT OUTER JOIN\n (SELECT STORE_ID AS StoreId , IFNULL(COUNT(1),0) AS DATAROWCOUNT FROM ${r(d[4]).AppTables.QRCODE_SCANNER} WHERE VISIT_DATE='${O}' GROUP BY STORE_ID) DR\n ON JP.StoreId=DR.StoreId WHERE Jp.VisitDate='${O}' `,console.log("ONEAPPSTOCKQRSCAN--",T),T;case'ONEAPPSALEQRSCAN':return T=` SELECT Jp.StoreId, ${u} as MenuID, IFNULL(DR.DataRowCount,0) as DataRowCount FROM ${N} JP LEFT OUTER JOIN\n (SELECT STORE_ID AS StoreId , IFNULL(COUNT(1),0) AS DATAROWCOUNT FROM ${r(d[4]).AppTables.QRCODE_SALE} WHERE VISIT_DATE='${O}' GROUP BY STORE_ID) DR\n ON JP.StoreId=DR.StoreId WHERE Jp.VisitDate='${O}' `,console.log("ONEAPPSALEQRSCAN--",T),T;case'KYCONEAPP':return T=` SELECT Jp.StoreId, ${u} as MenuID, IFNULL(DR.DataRowCount,0) as DataRowCount FROM ${N} JP LEFT OUTER JOIN\n (SELECT STORE_ID AS StoreId , IFNULL(COUNT(1),0) AS DATAROWCOUNT FROM ${r(d[4]).AppTables.STORE_KYC_INFO} WHERE VISIT_DATE='${O}' GROUP BY STORE_ID) DR\n ON JP.StoreId=DR.StoreId WHERE Jp.VisitDate='${O}' `,console.log("KYCONEAPP--",T),T;case'STOCKWITHCATEGORY':return T=`SELECT Jp.StoreId,${u} as MenuID, IFNULL(DR.StoreDone,0) as DataRowCount FROM ${N} JP \n LEFT OUTER JOIN\n (SELECT JP.StoreId,count(MC.CategoryId) as CatCount,count((CASE WHEN CR.StockCount>0 THEN 1 ElSE null END)) as CatDoneCount \n ,CASE WHEN count(MC.CategoryId)==count((CASE WHEN CR.StockCount>0 THEN 1 ElSE null END)) THEN 1 ELSE 0 END as StoreDone\n FROM ${N} JP\n CROSS JOIN (Select Distinct CategoryId,CategoryName from Product_Master p\n INNER join Mapping_ProductAssortmentStorewise mp on p.ProductId=mp.ProductId where mp.StoreId=JP.StoreId) MC\n LEFT OUTER JOIN\n (SELECT STORE_ID AS StoreId ,CATEGORY_ID as CategoryId, IFNULL(COUNT(STOCK),0) AS StockCount FROM ${r(d[4]).AppTables.STOCKWITHCAT_DATA} WHERE VISIT_DATE='${O}' GROUP BY STORE_ID,CATEGORY_ID ) CR\n ON JP.StoreId=CR.StoreId and MC.CategoryId=CR.CategoryId\n GROUP BY JP.StoreId) DR\n ON DR.StoreId=JP.StoreId Where Jp.VisitDate='${O}' GROUP BY JP.StoreId`;case'OPSTOCK':return T=` SELECT Jp.StoreId, ${u} as MenuID, IFNULL(DR.DataRowCount,0) as DataRowCount FROM ${N} JP LEFT OUTER JOIN\n (SELECT STORE_ID AS StoreId , IFNULL(COUNT(1),0) AS DATAROWCOUNT FROM ${r(d[4]).AppTables.STOCK_DATA} WHERE VISIT_DATE='${O}' GROUP BY STORE_ID) DR\n ON JP.StoreId=DR.StoreId WHERE Jp.VisitDate='${O}'`;case'BACKSTOCK':return T=` SELECT Jp.StoreId, ${u} as MenuID, IFNULL(DR.DataRowCount,0) as DataRowCount FROM ${N} JP LEFT OUTER JOIN\n (SELECT STORE_ID AS StoreId , IFNULL(COUNT(1),0) AS DATAROWCOUNT FROM ${r(d[4]).AppTables.CHILD_BACK_OF_STORE} WHERE VISIT_DATE='${O}' GROUP BY STORE_ID) DR\n ON JP.StoreId=DR.StoreId WHERE Jp.VisitDate='${O}'`;case'MDSTOCK':return T=` SELECT Jp.StoreId, ${u} as MenuID, IFNULL(DR.DataRowCount,0) as DataRowCount FROM ${N} JP LEFT OUTER JOIN\n (SELECT DISTINCT MIDDAY_STOCK,STORE_ID AS StoreId , IFNULL(COUNT(1),0) AS DATAROWCOUNT FROM ${r(d[4]).AppTables.STOCK_DATA} WHERE VISIT_DATE='${O}' and MIDDAY_STOCK is not null and MIDDAY_STOCK!='' GROUP BY STORE_ID) DR\n ON JP.StoreId=DR.StoreId WHERE Jp.VisitDate='${O}'`;case'CLSSTOCK':return T=` SELECT Jp.StoreId, ${u} as MenuID, IFNULL(DR.DataRowCount,0) as DataRowCount FROM ${N} JP LEFT OUTER JOIN\n (SELECT DISTINCT CLOSING_STOCK,STORE_ID AS StoreId , IFNULL(COUNT(1),0) AS DATAROWCOUNT FROM ${r(d[4]).AppTables.STOCK_DATA} WHERE VISIT_DATE='${O}' and CLOSING_STOCK is not null and CLOSING_STOCK!='' GROUP BY STORE_ID) DR\n ON JP.StoreId=DR.StoreId where Jp.VisitDate='${O}' `;case'SOS':return T=` SELECT Jp.StoreId, ${u} as MenuID, IFNULL(DR.DataRowCount,0) as DataRowCount FROM ${N} JP LEFT OUTER JOIN\n (SELECT STORE_ID AS StoreId , IFNULL(COUNT(1),0) AS DATAROWCOUNT FROM ${r(d[4]).AppTables.SHARE_OF_SHELF_IMAGE} WHERE VISIT_DATE='${O}' GROUP BY STORE_ID) DR\n ON JP.StoreId=DR.StoreId WHERE Jp.VisitDate='${O}'`;case'PAIDVISI':return T=` SELECT Jp.StoreId, ${u} as MenuID, IFNULL(DR.DataRowCount,0) as DataRowCount FROM ${N} JP LEFT OUTER JOIN\n (SELECT STORE_ID AS StoreId , IFNULL(COUNT(1),0) AS DATAROWCOUNT FROM ${r(d[4]).AppTables.PAID_VISIBILITY_CHILD_DATA} WHERE VISIT_DATE='${O}' and IS_UPDATED='1' GROUP BY STORE_ID) DR\n ON JP.StoreId=DR.StoreId WHERE Jp.VisitDate='${O}'`;case'ADDITIONALVISI':case'ADDITIONALVISI_IR':case'ADDITIONALVISI_IR_ONLY':return T=` SELECT Jp.StoreId, ${u} as MenuID, IFNULL(DR.DataRowCount,0) as DataRowCount FROM ${N} JP LEFT OUTER JOIN\n (SELECT STORE_ID AS StoreId , IFNULL(COUNT(1),0) AS DATAROWCOUNT FROM ${r(d[4]).AppTables.ADDITIONAL_VISIBILITY} WHERE VISIT_DATE='${O}' and IS_UPDATED='1' GROUP BY STORE_ID) DR\n ON JP.StoreId=DR.StoreId WHERE Jp.VisitDate='${O}'`;case'COMPVISI':case'COMPVISI_IR':return T=` SELECT Jp.StoreId, ${u} as MenuID, IFNULL(DR.DataRowCount,0) as DataRowCount FROM ${N} JP LEFT OUTER JOIN\n (SELECT STORE_ID AS StoreId , IFNULL(COUNT(1),0) AS DATAROWCOUNT FROM ${r(d[4]).AppTables.COMPETITION_VISIBILITY} WHERE VISIT_DATE='${O}' GROUP BY STORE_ID) DR\n ON JP.StoreId=DR.StoreId WHERE Jp.VisitDate='${O}'`;case'PROMOTION':return T=` SELECT Jp.StoreId, ${u} as MenuID, IFNULL(DR.DataRowCount,0) as DataRowCount FROM ${N} JP LEFT OUTER JOIN\n (SELECT STORE_ID AS StoreId , IFNULL(COUNT(1),0) AS DATAROWCOUNT FROM ${r(d[4]).AppTables.PROMOTION_DATA} WHERE VISIT_DATE='${O}' GROUP BY STORE_ID) DR\n ON JP.StoreId=DR.StoreId WHERE Jp.VisitDate='${O}'`;case'COMPROMO':return T=` SELECT Jp.StoreId, ${u} as MenuID, IFNULL(DR.DataRowCount,0) as DataRowCount FROM ${N} JP LEFT OUTER JOIN\n (SELECT STORE_ID AS StoreId , IFNULL(COUNT(1),0) AS DATAROWCOUNT FROM ${r(d[4]).AppTables.COMPETITION_PROMOTION} WHERE VISIT_DATE='${O}' GROUP BY STORE_ID) DR\n ON JP.StoreId=DR.StoreId WHERE Jp.VisitDate='${O}'`;case'CONCOV':return T=` SELECT Jp.StoreId, ${u} as MenuID, IFNULL(DR.DataRowCount,0) as DataRowCount FROM ${N} JP LEFT OUTER JOIN\n (SELECT STORE_ID AS StoreId , IFNULL(COUNT(1),0) AS DATAROWCOUNT FROM ${r(d[4]).AppTables.CONTACT_CONVERSION} WHERE SCREEN_TYPE='Contact' AND VISIT_DATE='${O}' GROUP BY STORE_ID) DR\n ON JP.StoreId=DR.StoreId WHERE Jp.VisitDate='${O}'`;case'SALE':return T=` SELECT Jp.StoreId, ${u} as MenuID, IFNULL(DR.DataRowCount,0) as DataRowCount FROM ${N} JP LEFT OUTER JOIN\n (SELECT STORE_ID AS StoreId , IFNULL(COUNT(1),0) AS DATAROWCOUNT FROM ${r(d[4]).AppTables.SALES} WHERE VISIT_DATE='${O}' GROUP BY STORE_ID) DR\n ON JP.StoreId=DR.StoreId WHERE Jp.VisitDate='${O}'`;case'ORDER':return T=` SELECT Jp.StoreId, ${u} as MenuID, IFNULL(DR.DataRowCount,0) as DataRowCount FROM ${N} JP LEFT OUTER JOIN\n (SELECT STORE_ID AS StoreId , IFNULL(COUNT(1),0) AS DATAROWCOUNT FROM ${r(d[4]).AppTables.ORDER} WHERE VISIT_DATE='${O}' GROUP BY STORE_ID) DR\n ON JP.StoreId=DR.StoreId WHERE Jp.VisitDate='${O}'`;case'ORDERSTATUS':return T=`select Distinct DR.StoreId,${u} as MenuID, (CASE WHEN count(DR.OrderId)==count(DR.IsDone) THEN 1 ELSE 0 END) as DataRowCount\n from\n (select Distinct JP.StoreId,JP.VisitDate,p.OrderId,p2.ProductCount,(CASE WHEN o.FilledProdCount>0 THEN 1 ELSE null END) as IsDone from ${N} as JP\n INNER join PriviousVisit_Orders p on p.StoreId=JP.StoreId\n LEFT OUTER JOIN (select OrderId,count(ProductId) as ProductCount from PriviousVisit_Orders GROUP BY OrderId ) p2 on p.OrderId=p2.OrderId\n LEFT OUTER JOIN (Select ORDER_ID,count(ORDER_ID) as FilledProdCount from ORDER_STATUS where VISIT_DATE='${O}' group by ORDER_ID) o on p.OrderId=o.ORDER_ID\n )DR WHERE DR.VisitDate='${O}' group by DR.StoreId`;case'SURVEY':return T=`SELECT JP.StoreId, ${u} as MenuID, DataRowCount FROM ${N} JP \n LEFT OUTER JOIN\n (SELECT SR.StoreId,SR.ShowCat,(CASE WHEN Count(SR.SurveyId) = count(CASE WHEN SR.SurveyDone==1 THEN 1 ELSE null END)\n THEN 1 ELSE 0 END) as DataRowCount FROM \n (SELECT DISTINCT JP.StoreId,T.SurveyId,T.ShowCat,(CASE WHEN SF.Qtns>0 THEN 1 ELSE 0 END ) AS SurveyDone FROM Master_SurveyQuestion T \n INNER JOIN Mapping_Survey M ON T.SurveyId=M.SurveyId \n INNER JOIN ${N} JP ON M.StoreId=JP.StoreId \n LEFT OUTER JOIN \n (\n SELECT T1.STORE_ID AS StoreId, T1.SURVEY_ID AS SurveyId, CASE WHEN COUNT(T1.QUESTION_ID) = M.TotalQuestion THEN 1 ELSE 0 END AS Qtns from ${r(d[4]).AppTables.SURVEY} T1 \n INNER JOIN ( SELECT m.StoreId, m.SurveyId, COUNT(DISTINCT t.QuestionId) AS TotalQuestion FROM Mapping_Survey m\n INNER JOIN ${N} n ON n.StoreId = m.StoreId INNER JOIN Master_SurveyQuestion t ON t.SurveyId = m.SurveyId WHERE t.MenuId = '${u}'\n GROUP BY m.StoreId, m.SurveyId\n ) AS M ON M.StoreId = T1.STORE_ID AND M.SurveyId = T1.SURVEY_ID\n where T1.VISIT_DATE='${O}' and T1.MENU_ID='${u}' \n GROUP BY T1.STORE_ID,T1.SURVEY_ID, M.TotalQuestion\n \n ) SF \n on T.SurveyId=SF.SurveyId and JP.StoreId=SF.StoreId Where T.MenuId='${u}') SR GROUP BY SR.StoreId ) DR \n ON JP.StoreId=DR.StoreId WHERE JP.VisitDate='${O}'\n \n\n UNION\n\n SELECT JP.StoreId, ${u} as MenuID, DR.DataRowCount as DataRowCount FROM ${N} JP \n LEFT OUTER JOIN\n (SELECT SR.StoreId,SR.ShowCat, (CASE WHEN Count(SR.SurveyId) = count(CASE WHEN SR.SurveyDone==1 THEN 1 ELSE null END) THEN 1 ELSE 0 END) as DataRowCount\n FROM \n (SELECT DISTINCT JP.StoreId,T.SurveyId,SCF.ShowCat,(CASE WHEN count(SCF.CategoryId) = count(CASE WHEN SCF.SurveyCatDone=1 THEN 1 ELSE null END) and count(SCF.CategoryId)>0 THEN 1 ELSE 0 END ) as SurveyDone\n \t\tFROM (Select DISTINCT SurveyId,ShowCat, CategoryId from Master_SurveyQuestion Where MenuId='${u}') T \n INNER JOIN Mapping_Survey M ON T.SurveyId=M.SurveyId \n INNER JOIN ${N} JP ON M.StoreId=JP.StoreId \n LEFT OUTER JOIN \n \n (SELECT DISTINCT JP.StoreId,T.SurveyId,T.ShowCat,T.CategoryId,(CASE WHEN count(SF.Qtns)>0 THEN 1 ELSE 0 END) as SurveyCatDone\n FROM Master_SurveyQuestion T \n INNER JOIN Mapping_Survey M ON T.SurveyId=M.SurveyId \n INNER JOIN ${N} JP ON M.StoreId=JP.StoreId \n LEFT OUTER JOIN \n \t\t\t\t ( SELECT DISTINCT T1.STORE_ID as StoreId,T1.SURVEY_ID as SurveyId,T1.CATEGORY_ID as CategoryId,count(T1.QUESTION_ID) as Qtns from ${r(d[4]).AppTables.SURVEY} T1 where VISIT_DATE='${O}' and MENU_ID='${u}' GROUP BY STORE_ID,SURVEY_ID,CATEGORY_ID) SF \n \t\t\t\t on T.SurveyId=SF.SurveyId and JP.StoreId=SF.StoreId and T.CategoryId=SF.CategoryId\n Where T.MenuId='${u}'\n \n \t\t\t\t\tGROUP BY JP.StoreId,T.SurveyId,T.CategoryId\n \t\t ) SCF on M.StoreId=SCF.StoreId and T.SurveyId=SCF.SurveyId and T.CategoryId=SCF.CategoryId\n GROUP BY JP.StoreId,T.SurveyId\n ) SR GROUP BY SR.StoreId \n )DR on JP.StoreId=DR.StoreId WHERE JP.VisitDate='${O}'\n \n `;case'WINDOW':case'WINDOW_IR':return T=` SELECT Jp.StoreId, ${u} as MenuID, IFNULL(DR.DataRowCount,0) as DataRowCount FROM ${N} JP LEFT OUTER JOIN\n (SELECT STORE_ID AS StoreId , IFNULL(COUNT(1),0) AS DATAROWCOUNT FROM ${r(d[4]).AppTables.WINDOW_HDR_DATA} WHERE VISIT_DATE='${O}' and MENU_ID='${u}' GROUP BY STORE_ID) DR\n ON JP.StoreId=DR.StoreId WHERE Jp.VisitDate='${O}'`;case'POSM':return T=` SELECT Jp.StoreId, ${u} as MenuID, IFNULL(DR.DataRowCount,0) as DataRowCount FROM ${N} JP LEFT OUTER JOIN\n (SELECT STORE_ID AS StoreId , IFNULL(COUNT(1),0) AS DATAROWCOUNT FROM ${r(d[4]).AppTables.POSM_HDR_DATA} WHERE VISIT_DATE='${O}' and IS_UPDATED='1' GROUP BY STORE_ID) DR\n ON JP.StoreId=DR.StoreId WHERE Jp.VisitDate='${O}'`;case'FEEDBACK':return T=` SELECT Jp.StoreId, ${u} as MenuID, IFNULL(DR.DataRowCount,0) as DataRowCount FROM ${N} JP LEFT OUTER JOIN\n (SELECT STORE_ID AS StoreId , IFNULL(COUNT(1),0) AS DATAROWCOUNT FROM ${r(d[4]).AppTables.FEEDBACK_DATA} WHERE VISIT_DATE='${O}' GROUP BY STORE_ID) DR\n ON JP.StoreId=DR.StoreId WHERE Jp.VisitDate='${O}'`;case'PROMOTION2':return T=` SELECT Jp.StoreId, ${u} as MenuID, IFNULL(DR.DataRowCount,0) as DataRowCount FROM ${N} JP LEFT OUTER JOIN\n (SELECT STORE_ID AS StoreId , IFNULL(COUNT(1),0) AS DATAROWCOUNT FROM ${r(d[4]).AppTables.SIMPLE_PROMOTION_DATA} WHERE VISIT_DATE='${O}' GROUP BY STORE_ID) DR\n ON JP.StoreId=DR.StoreId WHERE Jp.VisitDate='${O}'`;case'STOREIMG':return T=`SELECT StoreId , ${u} as MenuID, (CASE WHEN count(d.ImageTypeId)=count(d.isStImageDone) THEN 1 ELSE 0 END) as DATAROWCOUNT from (\n select distinct jtbl.StoreId,jtbl.ImageTypeId,jtbl.ImageType,jtbl.MinImage,\tcount(i.IMAGE) as ImageCount,(CASE WHEN count(i.IMAGE)>=jtbl.MinImage THEN 1 ELSE NULL END ) isStImageDone\n from (select JPTbl.*,m.ImageTypeId,m.ImageType,m.MinImage from ${N} JPTbl cross join Master_ImageType m ) jtbl \n Left Outer join ${r(d[4]).AppTables.STORE_IMAGES} i on jtbl.ImageTypeId=i.IMAGE_TYPE_ID and jtbl.StoreId=i.STORE_ID and i.VISIT_DATE='${O}'\n group by jtbl.StoreId,jtbl.ImageTypeId\n ) d GROUP BY StoreId`;case'SHELFTALKER':return T=` SELECT Jp.StoreId, ${u} as MenuID, IFNULL(DR.DataRowCount,0) as DataRowCount FROM ${N} JP LEFT OUTER JOIN\n (SELECT STORE_ID AS StoreId , IFNULL(COUNT(1),0) AS DATAROWCOUNT FROM ${r(d[4]).AppTables.ST_HDR_DATA} WHERE VISIT_DATE='${O}' GROUP BY STORE_ID) DR\n ON JP.StoreId=DR.StoreId WHERE Jp.VisitDate='${O}'`;case'PROMOTIONONEAPP':case'PROMOTIONONEAPP_IR':return T=` SELECT Jp.StoreId, ${u} as MenuID, IFNULL(DR.DataRowCount,0) as DataRowCount FROM ${N} JP LEFT OUTER JOIN\n (SELECT STORE_ID AS StoreId , IFNULL(COUNT(1),0) AS DATAROWCOUNT FROM ${r(d[4]).AppTables.PROMO_HDR_DATA} WHERE VISIT_DATE='${O}' and IS_UPDATED='1' GROUP BY STORE_ID) DR\n ON JP.StoreId=DR.StoreId WHERE Jp.VisitDate='${O}'`;case'PAIDVISIONEAPP':case'PAIDVISIONEAPP_IR':case'PAIDVISIONEAPP_IR_ONLY':return T=` SELECT Jp.StoreId, ${u} as MenuID, IFNULL(DR.DataRowCount,0) as DataRowCount FROM ${N} JP LEFT OUTER JOIN\n (SELECT STORE_ID AS StoreId , IFNULL(COUNT(1),0) AS DATAROWCOUNT FROM ${r(d[4]).AppTables.PAIDVIS_HDR_DATA} WHERE VISIT_DATE='${O}' and MENU_ID='${u}' and IS_UPDATED='1' GROUP BY STORE_ID) DR\n ON JP.StoreId=DR.StoreId WHERE Jp.VisitDate='${O}'`;case'WAREHOUSEDEPLOY':return T=` SELECT Jp.StoreId, ${u} as MenuID, IFNULL(DR.DataRowCount,0) as DataRowCount FROM ${N} JP LEFT OUTER JOIN\n (SELECT STORE_ID AS StoreId , IFNULL(COUNT(1),0) AS DATAROWCOUNT FROM ${r(d[4]).AppTables.WAREHOUSE_HDR_DATA} WHERE VISIT_DATE='${O}' and MENU_ID='${u}' GROUP BY STORE_ID) DR\n ON JP.StoreId=DR.StoreId WHERE Jp.VisitDate='${O}'`;case'WAREHOUSECAMPAIGN':return T=` SELECT Jp.StoreId, ${u} as MenuID, IFNULL(DR.DataRowCount,0) as DataRowCount FROM ${N} JP LEFT OUTER JOIN\n (SELECT STORE_ID AS StoreId , IFNULL(COUNT(1),0) AS DATAROWCOUNT FROM ${r(d[4]).AppTables.WAREHOUSE_CAMPAIGN_HDR_DATA} WHERE VISIT_DATE='${O}' and MENU_ID='${u}' GROUP BY STORE_ID) DR\n ON JP.StoreId=DR.StoreId WHERE Jp.VisitDate='${O}'`;case'SOSONEAPP':case'SOSONEAPP_IR':case'SOSONEAPP_IR_ONLY':return T=` SELECT Jp.StoreId, ${u} as MenuID, IFNULL(DR.DataRowCount,0) as DataRowCount FROM ${N} JP LEFT OUTER JOIN\n (SELECT STORE_ID AS StoreId , IFNULL(COUNT(1),0) AS DATAROWCOUNT FROM ${r(d[4]).AppTables.SOS_CHILD_DATA} WHERE VISIT_DATE='${O}' GROUP BY STORE_ID) DR\n ON JP.StoreId=DR.StoreId WHERE Jp.VisitDate='${O}'`;case'CATEXEONEAPP':return T=` SELECT Jp.StoreId, ${u} as MenuID, IFNULL(DR.DataRowCount,0) as DataRowCount FROM ${N} JP LEFT OUTER JOIN\n (SELECT STORE_ID AS StoreId , IFNULL(COUNT(1),0) AS DATAROWCOUNT FROM ${r(d[4]).AppTables.CATEXE_HDR_DATA} WHERE VISIT_DATE='${O}' GROUP BY STORE_ID) DR\n ON JP.StoreId=DR.StoreId WHERE Jp.VisitDate='${O}'`;case'STORESCORE':case'TRAININGONEAPP':return T=` SELECT Jp.StoreId, ${u} as MenuID, 1 as DataRowCount FROM ${N} JP`;case'SAMPLINGONEAPP':return T=` SELECT DR.StoreId, ${u} as MenuID, IFNULL(DR.DataRowCount,0) as DataRowCount \n FROM \n (SELECT JP1.StoreId,\n (CASE WHEN (count(CASE WHEN l.ISFILLED='1' THEN 1 ELSE NULL END))==count(T.SamplingDefinitionId) THEN 1 ELSE 0 END ) as DataRowCount,\n\n count(T.SamplingDefinitionId) as SamplingAvlblCount\n \n From ${N} JP1 \n INNER JOIN Mapping_StoreSampling M on JP1.StoreId=M.StoreId \n INNER JOIN Master_SamplingDefinition T ON T.SamplingDefinitionId=M.SamplingDefinitionId \n Left Outer Join ${r(d[4]).AppTables.SAMPLING_LIST} l on T.SamplingDefinitionId=l.SAMPLING_DEFINITION_ID and JP1.StoreId=l.STORE_ID and l.VISIT_DATE='${O}' \n GROUP BY JP1.StoreId) DR `;case'POSSALEONEAPP':return T=` SELECT Jp.StoreId, ${u} as MenuID, IFNULL(DR.DataRowCount,0) as DataRowCount FROM ${N} JP LEFT OUTER JOIN\n (SELECT STORE_ID AS StoreId , IFNULL(COUNT(1),0) AS DATAROWCOUNT FROM ${r(d[4]).AppTables.POSSALE_DATA} WHERE VISIT_DATE='${O}' GROUP BY STORE_ID) DR\n ON JP.StoreId=DR.StoreId WHERE Jp.VisitDate='${O}'`;case'PROGRAMONEAPP':return T=` SELECT Jp.StoreId, ${u} as MenuID, IFNULL(DR.DataRowCount,0) as DataRowCount FROM ${N} JP LEFT OUTER JOIN\n (SELECT STORE_ID AS StoreId , IFNULL(COUNT(1),0) AS DATAROWCOUNT FROM ${r(d[4]).AppTables.PROGRAM_HDR_DATA} WHERE VISIT_DATE='${O}' and MENU_ID='${u}' and IS_UPDATED='1' GROUP BY STORE_ID) DR\n ON JP.StoreId=DR.StoreId WHERE Jp.VisitDate='${O}'`;case'TGBASEDONEAPP':return T=` SELECT Jp.StoreId, ${u} as MenuID, IFNULL(DR.DataRowCount,0) as DataRowCount FROM ${N} JP LEFT OUTER JOIN\n (SELECT STORE_ID AS StoreId , IFNULL(COUNT(1),0) AS DATAROWCOUNT FROM ${r(d[4]).AppTables.VISICO_HDR_DATA} WHERE VISIT_DATE='${O}' and MENU_ID='${u}' and IS_UPDATED='1' GROUP BY STORE_ID) DR\n ON JP.StoreId=DR.StoreId WHERE Jp.VisitDate='${O}'`;case'STOREDYNAMICSCORE':return T=` SELECT Jp.StoreId, ${u} as MenuID, 1 as DataRowCount FROM ${N} JP WHERE Jp.VisitDate='${O}'`;case'ONEAPPMISSEDCALL':return T=` SELECT Jp.StoreId, ${u} as MenuID, IFNULL(DR.DataRowCount,0) as DataRowCount FROM ${N} JP LEFT OUTER JOIN\n (SELECT STORE_ID AS StoreId , IFNULL(COUNT(1),0) AS DATAROWCOUNT FROM ${r(d[4]).AppTables.MISSED_CALL} WHERE VISIT_DATE='${O}' and IS_UPDATED='1' GROUP BY STORE_ID) DR\n ON JP.StoreId=DR.StoreId WHERE Jp.VisitDate='${O}'`;case'SOSEYELEVELONEAPP':return T=` SELECT Jp.StoreId, ${u} as MenuID, IFNULL(DR.DataRowCount,0) as DataRowCount FROM ${N} JP LEFT OUTER JOIN\n (SELECT STORE_ID AS StoreId , IFNULL(COUNT(1),0) AS DATAROWCOUNT FROM ${r(d[4]).AppTables.EYE_LEVEL_CHILD_DATA} WHERE VISIT_DATE='${O}' GROUP BY STORE_ID) DR\n ON JP.StoreId=DR.StoreId WHERE Jp.VisitDate='${O}'`;case'BREAKTIME':return T=`SELECT StoreId , ${u} as MenuID, (CASE WHEN count(d.isStImageDone) THEN 1 ELSE 0 END) as DATAROWCOUNT from \n (select distinct jtbl.StoreId,jtbl.BreakId,jtbl.Break_Name,jtbl.Minimum, \n count(i.BREAKID) as BreakCount,(CASE WHEN count(i.BREAKID)>=jtbl.Minimum THEN 1 ELSE NULL END ) isStImageDone\n from \n (select JPTbl.*,m.BreakId,m.Break_Name,m.Minimum from ${N} JPTbl cross join Master_Break m ) jtbl\n Left Outer join ${r(d[4]).AppTables.BREAKTIME} i on jtbl.BreakId=i.BREAKID and jtbl.StoreId=i.STORE_ID and i.VISIT_DATE='${O}'\n group by jtbl.StoreId,jtbl.BreakId\n ) d GROUP BY StoreId`,console.log("BreakTime list q:1",T),T;default:return''}}function G(){return(G=(0,n.default)((function*(n,t,o){switch(n){case'STOCK':if(t.rows.length>0){var I=t.rows.item(0);null!=I.STORE_ID&&''!=I.STORE_ID&&(S=!0)}return S;case'STOCKWITHCATEGORY':var S=yield Z(t,o);return S;case'OPSTOCK':if(t.rows.length>0){var i=t.rows.item(0);null!=i.STORE_ID&&''!=i.STORE_ID&&(S=!0)}return S;case'BACKSTOCK':if(t.rows.length>0){var D=t.rows.item(0);(0===D.STOCK||null!=D.STOCK&&''!=D.STOCK)&&(S=!0)}return S;case'MDSTOCK':if(t.rows.length>0){var u=t.rows.item(0);(0===u.MIDDAY_STOCK||null!=u.MIDDAY_STOCK&&''!=u.MIDDAY_STOCK)&&(S=!0)}return S;case'CLSSTOCK':if(t.rows.length>0){var N=t.rows.item(0);(0===N.CLOSING_STOCK||null!=N.CLOSING_STOCK&&''!=N.CLOSING_STOCK)&&(S=!0)}return S;case'SOS':case'PAIDVISI':case'ADDITIONALVISI':case'ADDITIONALVISI_IR':case'COMPVISI':case'COMPVISI_IR':case'PROMOTION':case'COMPROMO':case'WINDOW':case'WINDOW_IR':case'POSM':case'FEEDBACK':case'PROMOTION2':case'STOREIMG':case'SHELFTALKER':case'PROMOTIONONEAPP':case'POSSALEONEAPP':case'PAIDVISIONEAPP':case'PAIDVISIONEAPP_IR':case'SOSONEAPP':case'SOSONEAPP_IR':return t.rows.length>0&&(S=!0),S;case'CONCOV':if(t.rows.length>0){var s=t.rows.item(0);(0===s.TOTAL_CONTACT||null!=s.TOTAL_CONTACT&&''!=s.TOTAL_CONTACT)&&(S=!0)}return S;case'SALE':if(t.rows.length>0){var O=t.rows.item(0);(0===O.STOCK||null!=O.STOCK&&''!=O.STOCK)&&(S=!0)}return S;case'SURVEY':return S=yield E(n,t,o);default:return S}}))).apply(this,arguments)}function Q(n,o){var I=arguments.length>2&&void 0!==arguments[2]?arguments[2]:'',S=o.MenuId,i=new Date,E=(0,t.default)(i).format('MM/DD/YYYY');return`SELECT JP.DistributorId, ${S} as MenuID,CASE WHEN count(dbPOSM.POSMDefinitionId)>0 THEN 1 ELSE 0 END as KPIAVBL \n from ${I} JP \n Inner Join \n (select Distinct db.DistributorId,W.POSMDefinitionId from ${I} db\n INNER JOIN Mapping_JourneyPlan jcp on db.DistributorId=jcp.DistributorId\n INNER JOIN Mapping_StorePOSM MW on MW.StoreId=jcp.StoreId\n INNER JOIN Master_POSMDefinition W on W.POSMDefinitionId=MW.POSMDefinitionId\n Where jcp.VisitDate='${E}' order by db.DistributorId,W.POSMDefinitionId) dbPOSM\n on dbPOSM.DistributorId=JP.DistributorId\n group by JP.DistributorId\n \n union \n \n SELECT JP.DistributorId, ${S} as MenuID,CASE WHEN count(dbPOSM.POSMDefinitionId)>0 THEN 1 ELSE 0 END as KPIAVBL \n from ${I} JP \n Inner Join \n (select Distinct db.DistributorId,W.POSMDefinitionId from ${I} db\n INNER JOIN Adhoc_JourneyPlan jcp on db.DistributorId=jcp.DistributorId\n INNER JOIN Mapping_StorePOSM MW on MW.StoreId=jcp.StoreId\n INNER JOIN Master_POSMDefinition W on W.POSMDefinitionId=MW.POSMDefinitionId\n Where jcp.VisitDate='${E}' order by db.DistributorId,W.POSMDefinitionId) dbPOSM\n on dbPOSM.DistributorId=JP.DistributorId\n group by JP.DistributorId\n\n `+(1==n.ShowNonMerList?`\n union \n \n SELECT JP.DistributorId, ${S} as MenuID,CASE WHEN count(dbPOSM.POSMDefinitionId)>0 THEN 1 ELSE 0 END as KPIAVBL \n from ${I} JP \n Inner Join \n (select Distinct db.DistributorId,W.POSMDefinitionId from ${I} db\n INNER JOIN NonMerchandising_JourneyPlan jcp on db.DistributorId=jcp.DistributorId\n INNER JOIN Mapping_StorePOSM MW on MW.StoreId=jcp.StoreId\n INNER JOIN Master_POSMDefinition W on W.POSMDefinitionId=MW.POSMDefinitionId\n Where jcp.VisitDate='${E}' order by db.DistributorId,W.POSMDefinitionId) dbPOSM\n on dbPOSM.DistributorId=JP.DistributorId\n group by JP.DistributorId\n `:'')+(1==n.ShowNonProgram?`\n union \n \n SELECT JP.DistributorId, ${S} as MenuID,CASE WHEN count(dbPOSM.POSMDefinitionId)>0 THEN 1 ELSE 0 END as KPIAVBL \n from ${I} JP \n Inner Join \n (select Distinct db.DistributorId,W.POSMDefinitionId from ${I} db\n INNER JOIN NonProgram_JourneyPlan jcp on db.DistributorId=jcp.DistributorId\n INNER JOIN Mapping_StorePOSM MW on MW.StoreId=jcp.StoreId\n INNER JOIN Master_POSMDefinition W on W.POSMDefinitionId=MW.POSMDefinitionId\n Where jcp.VisitDate='${E}' order by db.DistributorId,W.POSMDefinitionId) dbPOSM\n on dbPOSM.DistributorId=JP.DistributorId\n group by JP.DistributorId\n \n `:'')+(1==n.ShowStoreSearch?`\n union \n \n SELECT JP.DistributorId, ${S} as MenuID,CASE WHEN count(dbPOSM.POSMDefinitionId)>0 THEN 1 ELSE 0 END as KPIAVBL \n from ${I} JP \n Inner Join \n (select Distinct db.DistributorId,W.POSMDefinitionId from ${I} db\n INNER JOIN StoreSearch_JourneyPlan jcp on db.DistributorId=jcp.DistributorId\n INNER JOIN Mapping_StorePOSM MW on MW.StoreId=jcp.StoreId\n INNER JOIN Master_POSMDefinition W on W.POSMDefinitionId=MW.POSMDefinitionId\n Where jcp.VisitDate='${E}' order by db.DistributorId,W.POSMDefinitionId) dbPOSM\n on dbPOSM.DistributorId=JP.DistributorId\n group by JP.DistributorId\n \n `:'')+(1==n.ShowBeatPlanList?`\n union \n \n SELECT JP.DistributorId, ${S} as MenuID,CASE WHEN count(dbPOSM.POSMDefinitionId)>0 THEN 1 ELSE 0 END as KPIAVBL \n from ${I} JP \n Inner Join \n (select Distinct db.DistributorId,W.POSMDefinitionId from ${I} db\n INNER JOIN JourneyPlan_RouteWise jcp on db.DistributorId=jcp.DistributorId\n INNER JOIN Mapping_StorePOSM MW on MW.StoreId=jcp.StoreId\n INNER JOIN Master_POSMDefinition W on W.POSMDefinitionId=MW.POSMDefinitionId\n Where jcp.VisitDate='${E}' order by db.DistributorId,W.POSMDefinitionId) dbPOSM\n on dbPOSM.DistributorId=JP.DistributorId\n group by JP.DistributorId\n\n `:'')}function k(n,o){var I=arguments.length>2&&void 0!==arguments[2]?arguments[2]:'',S=o.MenuId,i=new Date,E=(0,t.default)(i).format('MM/DD/YYYY');return`SELECT JP.DistributorId, ${S} as MenuID,CASE WHEN count(dbPOSM.WindowDefinitionId)>0 THEN 1 ELSE 0 END as KPIAVBL \n from ${I} JP \n Inner Join \n (select Distinct db.DistributorId,W.WindowDefinitionId from ${I} db\n INNER JOIN Mapping_JourneyPlan jcp on db.DistributorId=jcp.DistributorId\n INNER JOIN Mapping_StoreWindow MW on MW.StoreId=jcp.StoreId\n INNER JOIN Master_WindowDefinition W on W.WindowDefinitionId=MW.WindowDefinitionId \n Where jcp.VisitDate='${E}' order by db.DistributorId,W.WindowDefinitionId) dbPOSM\n on dbPOSM.DistributorId=JP.DistributorId\n group by JP.DistributorId\n \n union \n \n SELECT JP.DistributorId, ${S} as MenuID,CASE WHEN count(dbPOSM.WindowDefinitionId)>0 THEN 1 ELSE 0 END as KPIAVBL \n from ${I} JP \n Inner Join \n (select Distinct db.DistributorId,W.WindowDefinitionId from ${I} db\n INNER JOIN Adhoc_JourneyPlan jcp on db.DistributorId=jcp.DistributorId\n INNER JOIN Mapping_StoreWindow MW on MW.StoreId=jcp.StoreId\n INNER JOIN Master_WindowDefinition W on W.WindowDefinitionId=MW.WindowDefinitionId\n Where jcp.VisitDate='${E}' order by db.DistributorId,W.WindowDefinitionId) dbPOSM\n on dbPOSM.DistributorId=JP.DistributorId\n group by JP.DistributorId\n\n `+(1==n.ShowNonMerList?`\n\n union \n \n SELECT JP.DistributorId, ${S} as MenuID,CASE WHEN count(dbPOSM.WindowDefinitionId)>0 THEN 1 ELSE 0 END as KPIAVBL \n from ${I} JP \n Inner Join \n (select Distinct db.DistributorId,W.WindowDefinitionId from ${I} db\n INNER JOIN NonMerchandising_JourneyPlan jcp on db.DistributorId=jcp.DistributorId\n INNER JOIN Mapping_StoreWindow MW on MW.StoreId=jcp.StoreId\n INNER JOIN Master_WindowDefinition W on W.WindowDefinitionId=MW.WindowDefinitionId\n Where jcp.VisitDate='${E}' order by db.DistributorId,W.WindowDefinitionId) dbPOSM\n on dbPOSM.DistributorId=JP.DistributorId\n group by JP.DistributorId\n\n `:'')+(1==n.ShowNonProgram?`\n\n union \n \n SELECT JP.DistributorId, ${S} as MenuID,CASE WHEN count(dbPOSM.WindowDefinitionId)>0 THEN 1 ELSE 0 END as KPIAVBL \n from ${I} JP \n Inner Join \n (select Distinct db.DistributorId,W.WindowDefinitionId from ${I} db\n INNER JOIN NonProgram_JourneyPlan jcp on db.DistributorId=jcp.DistributorId\n INNER JOIN Mapping_StoreWindow MW on MW.StoreId=jcp.StoreId\n INNER JOIN Master_WindowDefinition W on W.WindowDefinitionId=MW.WindowDefinitionId\n Where jcp.VisitDate='${E}' order by db.DistributorId,W.WindowDefinitionId) dbPOSM\n on dbPOSM.DistributorId=JP.DistributorId\n group by JP.DistributorId\n\n `:'')+(1==n.ShowStoreSearch?`\n\n union \n \n SELECT JP.DistributorId, ${S} as MenuID,CASE WHEN count(dbPOSM.WindowDefinitionId)>0 THEN 1 ELSE 0 END as KPIAVBL \n from ${I} JP \n Inner Join \n (select Distinct db.DistributorId,W.WindowDefinitionId from ${I} db\n INNER JOIN StoreSearch_JourneyPlan jcp on db.DistributorId=jcp.DistributorId\n INNER JOIN Mapping_StoreWindow MW on MW.StoreId=jcp.StoreId\n INNER JOIN Master_WindowDefinition W on W.WindowDefinitionId=MW.WindowDefinitionId\n Where jcp.VisitDate='${E}' order by db.DistributorId,W.WindowDefinitionId) dbPOSM\n on dbPOSM.DistributorId=JP.DistributorId\n group by JP.DistributorId\n\n `:'')+(1==n.ShowBeatPlanList?`\n union \n \n SELECT JP.DistributorId, ${S} as MenuID,CASE WHEN count(dbPOSM.WindowDefinitionId)>0 THEN 1 ELSE 0 END as KPIAVBL \n from ${I} JP \n Inner Join \n (select Distinct db.DistributorId,W.WindowDefinitionId from ${I} db\n INNER JOIN JourneyPlan_RouteWise jcp on db.DistributorId=jcp.DistributorId\n INNER JOIN Mapping_StoreWindow MW on MW.StoreId=jcp.StoreId\n INNER JOIN Master_WindowDefinition W on W.WindowDefinitionId=MW.WindowDefinitionId\n Where jcp.VisitDate='${E}' order by db.DistributorId,W.WindowDefinitionId) dbPOSM\n on dbPOSM.DistributorId=JP.DistributorId\n group by JP.DistributorId\n\n `:'')}function x(n,o){var I=arguments.length>2&&void 0!==arguments[2]?arguments[2]:'',S=o.MenuId,i=new Date;(0,t.default)(i).format('MM/DD/YYYY');return`SELECT JP.DistributorId, ${S} as MenuID,1 as KPIAVBL ,1 as DataRowAvlblCount \n from ${I} JP \n INNER JOIN Mapping_MenuDistributorPoint MW on MW.MenuId='${S}'\n group by JP.DistributorId`}function X(n,o,I){var S=o.ScreenName,i=(o.MenuId,new Date);(0,t.default)(i).format('MM/DD/YYYY');switch(S){case'DBPOSMONEAPP':return Q(n,o,I);case'DBWINDOWONEAPP':return k(n,o,I);case'DBVISICOOLERONEAPP':return x(n,o,I);default:return''}}function z(n,o){var I=n.ScreenName,S=n.MenuId,i=new Date,E=(0,t.default)(i).format('MM/DD/YYYY');switch(I){case'DBPOSMONEAPP':return` SELECT Jp.DistributorId, ${S} as MenuID, IFNULL(DR.DataRowCount,0) as DataRowCount FROM ${o} JP LEFT OUTER JOIN\n (SELECT DISTRIBUTOR_ID AS DistributorId , IFNULL(COUNT(1),0) AS DATAROWCOUNT FROM ${r(d[4]).AppTables.DBPOSM_HDR_DATA} WHERE VISIT_DATE='${E}' GROUP BY DISTRIBUTOR_ID) DR\n ON JP.DistributorId=DR.DistributorId `;case'DBWINDOWONEAPP':return` SELECT Jp.DistributorId, ${S} as MenuID, IFNULL(DR.DataRowCount,0) as DataRowCount FROM ${o} JP LEFT OUTER JOIN\n (SELECT DISTRIBUTOR_ID AS DistributorId , IFNULL(COUNT(1),0) AS DATAROWCOUNT FROM ${r(d[4]).AppTables.DB_WINDOW_HDR_DATA} WHERE VISIT_DATE='${E}' GROUP BY DISTRIBUTOR_ID) DR\n ON JP.DistributorId=DR.DistributorId `;case'DBVISICOOLERONEAPP':return` SELECT Jp.DistributorId, ${S} as MenuID, IFNULL(DR.DataRowCount,0) as DataRowCount FROM ${o} JP LEFT OUTER JOIN\n (SELECT DISTRIBUTOR_ID AS DistributorId , IFNULL(COUNT(1),0) AS DATAROWCOUNT FROM ${r(d[4]).AppTables.DB_VISICOOLER} WHERE VISIT_DATE='${E}' GROUP BY DISTRIBUTOR_ID) DR\n ON JP.DistributorId=DR.DistributorId `;default:return''}}function Z(n,t){return ee.apply(this,arguments)}function ee(){return ee=(0,n.default)((function*(t,o){o.StoreId;return yield new Promise((function(I,S){var i;t.rows.length>0?r(d[6]).db.transaction((i=(0,n.default)((function*(n){for(var S=!0,i=0;i0?t(!0):t(!1)})),function(n,t){return i.apply(this,arguments)}),(function(n,o){console.log(o),t(!1)}))})),function(n){return i.apply(this,arguments)}))})).catch((function(n){return console.log(n),!1}))})),te.apply(this,arguments)}function oe(n,t,o,I){return re.apply(this,arguments)}function re(){return re=(0,n.default)((function*(o,I,S,i){var E=new Date,D=(0,t.default)(E).format('MM/DD/YYYY');return new Promise((function(t,E){try{r(d[6]).db.transaction((u=(0,n.default)((function*(E){var u,N=o.StoreId,s=`Select DISTINCT T.MaxLength as MaxLength,T.MinLength as MinLength,T.CategoryId,T.Category,T.SubCategoryId,T.SubCategory,T.LengthValidation as LengthValidation,T.QuestionImageAllow as QuestionImageAllow,T.DateRange as DateRange,T.Question as Question,T.QuestionId as QuestionId,T.QuestionType as QuestionType,T.OTP as OTP,T1.ANSWER As Answer, T1.ANSWER_ID as AnswerId,T1.IMAGE_ALLOW1 as ImageAllow1,T1.IMAGE1 as Image1,T1.IMAGE_ALLOW2 as ImageAllow2,T1.IMAGE2 as Image2,T1.MULTI_OPTIONS_IDS as multi_op_ids FROM Master_SurveyQuestion T INNER JOIN Mapping_Survey M on T.SurveyId=M.SurveyId INNER JOIN ${r(d[4]).AppTables.SURVEY} T1 on T.SurveyId=T1.SURVEY_ID and T.CategoryId=T1.CATEGORY_ID and T.SubCategoryId=T1.SUB_CATEGORY_ID And T.QuestionId=T1.QUESTION_ID WHERE T1.STORE_ID='${N}' AND T1.VISIT_DATE= '${D}' AND T1.SURVEY_ID=${I} and T1.ANSWER_ID Is Not NULL `;1==i&&(s+=` AND T1.CATEGORY_ID=${S} `),s+=" ORDER BY T.SubCategorySequence ",yield E.executeSql(s,[],(u=(0,n.default)((function*(n,o){o.rows.length>0?t(!0):t(!1)})),function(n,t){return u.apply(this,arguments)}),(function(n,o){console.log(o),t(!1)}))})),function(n){return u.apply(this,arguments)}))}catch(n){console.log('checkIfDone Error CatSurvey',n),t(!1)}var u})).catch((function(n){return console.log('checkIfDone Error CatSurvey',n),!1}))})),re.apply(this,arguments)}function Ie(n,t,o){return ae.apply(this,arguments)}function ae(){return ae=(0,n.default)((function*(o,I,S){var i=new Date;(0,t.default)(i).format('MM/DD/YYYY');return new Promise((function(t,i){try{r(d[6]).db.transaction((E=(0,n.default)((function*(i){var E,D=o.StoreId;if(1==S){var u=`SELECT DISTINCT T.Category,T.CategoryId , T.CategorySequence FROM Master_SurveyQuestion T INNER JOIN Mapping_Survey M ON T.SurveyId=M.SurveyId WHERE M.StoreId='${D}' and T.SurveyId='${I}' order by T.CategorySequence`;yield i.executeSql(u,[],(E=(0,n.default)((function*(n,S){if(S.rows.length>0)for(var i=!0,E=0;E0&&void 0!==arguments[0]?arguments[0]:'',E='';e.includes("_StoreImg-")||e.includes("_NonworkImg-")||e.includes("_GroomingImg-")||e.includes("_CheckoutImg-")?E="CoverageImages":e.includes("_GeoTag-")&&(E="GeoTagImages");return E},_e.getMethodName=function(E){switch(E){case e.LOGIN_METHOD:return'Login';case e.DOWNLOADJSON_METHOD:return'DownloadJson';case e.UPLOADJSON_METHOD:return'UploadJson';case e.STORECOVERAGE_METHOD:return'StoreCoverageSup';case e.STORECOVERAGE_STATUS_METHOD:return'StoreCoverageStatusSup';case e.UPLOADIMAGES_METHOD:return'Uploadimages';case e.GETCOVERAGE_METHOD:return'Coverage';case e.GETCOVERAGE_CLIENT_METHOD:return'CoverageDetail_latest_client';case e.GETOTP_METHOD:return'GetOtp';case e.UPLOADJSON_DETAIL_METHOD:return'UploadJsonDetail';case e.COVERAGESTATUS_DETAIL_METHOD:return'CoverageStatusDetail';case e.UPLOAD_STOREGEOTAG_IMAGES_METHOD:return'Upload_StoreGeoTag_IMAGES';case e.CHECKOUTDETAIL_METHOD:return'CheckoutDetail';case e.CHECKOUTDETAIL_CLIENT_METHOD:return'CheckoutDetail_client';case e.JOURNEYPLAN_METHOD:return'JourneyPlan';case e.DELETECOVERAGE_METHOD:return'DeleteCoverage';case e.COVERAGENOTALLOW_METHOD:return'CoverageNotAllow';case e.CHANGEPASSWORD_METHOD:return'ChangePasswordNew';case e.CREATEJP_METHOD:return'CreateJourneyPlan';case e.CREATESTORE:return'CreateStore';case e.DISTRIBUTOR_COVERAGE:return'DistributorPointCoverage';case e.DISTRIBUTOR_CHECKOUT:return'DistributorPointCheckout';case e.OTP_SEND:return'OTPSendForForgetPassword';case e.OTP_VERIFY:return'OTPVerify';case e.CREATE_NEW_PASSWORD:return'NewPassword';case e.UPLOAD_JSON_DIRECT:return'UploadJsonDirect';default:return''}};!(function(e,E){if("function"==typeof WeakMap)var O=new WeakMap,T=new WeakMap;(function(e,E){if(!E&&e&&e.__esModule)return e;var r,t,D={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return D;if(r=E?T:O){if(r.has(e))return r.get(e);r.set(e,D)}for(var _ in e)"default"!==_&&{}.hasOwnProperty.call(e,_)&&((t=(r=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,_))&&(t.get||t.set)?r(D,_,t):D[_]=e[_])})(e,E)})(_r(d[0]));var e=_e.METHODS={LOGIN_METHOD:1,DOWNLOADJSON_METHOD:2,UPLOADJSON_METHOD:3,STORECOVERAGE_METHOD:4,STORECOVERAGE_STATUS_METHOD:5,UPLOADIMAGES_METHOD:6,GETCOVERAGE_METHOD:7,GETCOVERAGE_CLIENT_METHOD:8,GETOTP_METHOD:9,UPLOADJSON_DETAIL_METHOD:10,COVERAGESTATUS_DETAIL_METHOD:11,UPLOAD_STOREGEOTAG_IMAGES_METHOD:12,CHECKOUTDETAIL_METHOD:13,CHECKOUTDETAIL_CLIENT_METHOD:14,JOURNEYPLAN_METHOD:15,DELETECOVERAGE_METHOD:16,COVERAGENOTALLOW_METHOD:17,CHANGEPASSWORD_METHOD:18,CREATEJP_METHOD:19,CREATESTORE:20,DISTRIBUTOR_COVERAGE:21,DISTRIBUTOR_CHECKOUT:22,OTP_SEND:23,OTP_VERIFY:24,CREATE_NEW_PASSWORD:25,UPLOAD_JSON_DIRECT:27};_e.DOWNLOAD_TYPES={}}),839,[153]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.notify=void 0;r(d[0])(r(d[1]));var o=r(d[2]),t=r(d[0])(r(d[3]));e.notify=function(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:'';if('android'!=o.Platform.OS)t.default.show({text:n,duration:t.default.LENGTH_SHORT});else{var f=o.ToastAndroid.SHORT;o.ToastAndroid.show(n,f)}}}),840,[8,153,6,841]); +__d((function(g,r,_i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var t=r(d[0])(r(d[1])),o=r(d[2]);function n(t,o){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(t);o&&(c=c.filter((function(o){return Object.getOwnPropertyDescriptor(t,o).enumerable}))),n.push.apply(n,c)}return n}function c(o){for(var c=1;c0&&void 0!==arguments[0]?arguments[0]:[],o=yield e.default.checkMultiple(i),n='ios.permission.LOCATION_WHEN_IN_USE',S='ios.permission.CAMERA',s='ios.permission.PHOTO_LIBRARY',t=e.PERMISSIONS.IOS.MICROPHONE,E=e.PERMISSIONS.IOS.MEDIA_LIBRARY,R='android.permission.ACCESS_FINE_LOCATION',A='android.permission.CAMERA',l='android.permission.WRITE_EXTERNAL_STORAGE',u='android.permission.READ_EXTERNAL_STORAGE',L=e.PERMISSIONS.ANDROID.RECORD_AUDIO;if('ios'===r.Platform.OS){if(o[n]==e.RESULTS.GRANTED&&o[S]==e.RESULTS.GRANTED&&o[s]==e.RESULTS.GRANTED&&o[t]==e.RESULTS.GRANTED&&o[E]==e.RESULTS.GRANTED)return!0}else if(o[R]==e.RESULTS.GRANTED&&o[A]==e.RESULTS.GRANTED&&o[l]==e.RESULTS.GRANTED&&o[u]==e.RESULTS.GRANTED&&o[L]==e.RESULTS.GRANTED)return!0;var f=yield e.default.requestMultiple(i),T=[],I=[];if(console.log(f),'ios'===r.Platform.OS){if(f[n]==e.RESULTS.GRANTED&&f[S]==e.RESULTS.GRANTED&&f[s]==e.RESULTS.GRANTED&&f[t]==e.RESULTS.GRANTED&&f[E]==e.RESULTS.GRANTED)return!0;f[n]===e.RESULTS.DENIED?T.push('Location'):f[n]===e.RESULTS.UNAVAILABLE&&I.push('Location'),f[S]===e.RESULTS.DENIED?T.push('Camera'):f[S]===e.RESULTS.UNAVAILABLE&&I.push('Camera'),f[s]===e.RESULTS.DENIED?T.push('Photo Library'):f[s]===e.RESULTS.UNAVAILABLE&&I.push('Photo Library'),f[t]===e.RESULTS.DENIED?T.push('Microphone'):f[t]===e.RESULTS.UNAVAILABLE&&I.push('Microphone'),f[E]===e.RESULTS.DENIED?T.push('Media Library'):f[E]===e.RESULTS.UNAVAILABLE&&I.push('Media Library')}else{if(f[R]==e.RESULTS.GRANTED&&f[A]==e.RESULTS.GRANTED&&f[l]==e.RESULTS.GRANTED&&f[u]==e.RESULTS.GRANTED&&f[L]==e.RESULTS.GRANTED)return!0;f[R]===e.RESULTS.DENIED?T.push('Location'):f[R]===e.RESULTS.UNAVAILABLE&&I.push('Location'),f[A]===e.RESULTS.DENIED?T.push('Camera'):f[A]===e.RESULTS.UNAVAILABLE&&I.push('Camera'),f[u]===e.RESULTS.DENIED?T.push('Read External Storage'):f[u]===e.RESULTS.UNAVAILABLE&&I.push('Read External Storage'),f[l]===e.RESULTS.DENIED?T.push('Photo Library'):f[l]===e.RESULTS.UNAVAILABLE&&I.push('Photo Library'),f[L]===e.RESULTS.DENIED?T.push('Record Audio'):f[L]===e.RESULTS.UNAVAILABLE&&I.push('Record Audio')}var N='';return T.length>0&&(N+='User denied '+T.join(', ')+(T.length>1?' permissions':' permission')),I.length>0&&(N+=''!=N?', ':'',N+=I.join(', ')+(I.length>1?' permissions':' permission')+' not available'),(T.length>0||I.length>0)&&(0,_r(d[6]).notify)(N),!0})),s.apply(this,arguments)}var t,E,R,A,l,u,L,f=_e.hasLocationPermission=(t=(0,i.default)((function*(){return'android'===r.Platform.OS&&r.Platform.Version<21||('ios'===r.Platform.OS?yield o(e.PERMISSIONS.IOS.LOCATION_WHEN_IN_USE):'android'!==r.Platform.OS||(yield o(r.PermissionsAndroid.PERMISSIONS.ACCESS_FINE_LOCATION)))})),function(){return t.apply(this,arguments)}),T=_e.hasCameraPermission=(E=(0,i.default)((function*(){return'android'===r.Platform.OS&&r.Platform.Version<21||('ios'===r.Platform.OS?yield o(e.PERMISSIONS.IOS.CAMERA):'android'!==r.Platform.OS||(yield o(r.PermissionsAndroid.PERMISSIONS.CAMERA)))})),function(){return E.apply(this,arguments)}),I=_e.hasStoragePermission=(R=(0,i.default)((function*(){return'android'===r.Platform.OS&&r.Platform.Version<21||('ios'===r.Platform.OS?yield o(e.PERMISSIONS.IOS.PHOTO_LIBRARY):'android'!==r.Platform.OS||(yield o(r.PermissionsAndroid.PERMISSIONS.WRITE_EXTERNAL_STORAGE)))})),function(){return R.apply(this,arguments)});_e.requestMultiplePerms=(A=(0,i.default)((function*(){if(console.log('requestMultiplePerms'),'android'===r.Platform.OS&&r.Platform.Version<21)return!0;var i='ios'===r.Platform.OS?e.PERMISSIONS.IOS:e.PERMISSIONS.ANDROID,o=[i.LOCATION_WHEN_IN_USE,i.CAMERA,i.PHOTO_LIBRARY,i.MICROPHONE,i.MEDIA_LIBRARY],n=[i.ACCESS_FINE_LOCATION,i.CAMERA,i.READ_EXTERNAL_STORAGE,i.WRITE_EXTERNAL_STORAGE,i.RECORD_AUDIO],s='ios'===r.Platform.OS?o:n;return yield S(s)})),function(){return A.apply(this,arguments)}),_e._checkLocationPermission=(l=(0,i.default)((function*(){return'android'===r.Platform.OS&&r.Platform.Version<21||('ios'===r.Platform.OS?(yield e.default.check(e.PERMISSIONS.IOS.LOCATION_WHEN_IN_USE))==e.RESULTS.GRANTED:'android'!==r.Platform.OS||(yield r.PermissionsAndroid.check(r.PermissionsAndroid.PERMISSIONS.ACCESS_FINE_LOCATION)))})),function(){return l.apply(this,arguments)}),_e._checkCameraPermission=(u=(0,i.default)((function*(){return'android'===r.Platform.OS&&r.Platform.Version<21||('ios'===r.Platform.OS?(yield e.default.check(e.PERMISSIONS.IOS.CAMERA))==e.RESULTS.GRANTED:'android'!==r.Platform.OS||(yield r.PermissionsAndroid.check(r.PermissionsAndroid.PERMISSIONS.CAMERA)))})),function(){return u.apply(this,arguments)}),_e._checkStoragePermission=(L=(0,i.default)((function*(){return'android'===r.Platform.OS&&r.Platform.Version<21||('ios'===r.Platform.OS?(yield e.default.check(e.PERMISSIONS.IOS.PHOTO_LIBRARY))==e.RESULTS.GRANTED:'android'!==r.Platform.OS||(yield r.PermissionsAndroid.check(r.PermissionsAndroid.PERMISSIONS.WRITE_EXTERNAL_STORAGE)))})),function(){return L.apply(this,arguments)});function N(){return(N=(0,i.default)((function*(){yield f(),yield T(),yield I()}))).apply(this,arguments)}}),852,[8,313,153,6,853,855,840]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.PositionError=void 0;var E=r(d[0])(r(d[1]));e.PositionError=Object.freeze({PERMISSION_DENIED:1,POSITION_UNAVAILABLE:2,TIMEOUT:3,PLAY_SERVICE_NOT_AVAILABLE:4,SETTINGS_NOT_SATISFIED:5,INTERNAL_ERROR:-1}),e.default=E.default}),853,[8,854]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var o,t=r(d[0])(r(d[1])),n=r(d[2]),s=n.NativeModules.RNFusedLocation,u=new n.NativeEventEmitter(s),l=function(){},v=[],c=!1,f={setRNConfiguration:function(o){},requestAuthorization:(o=(0,t.default)((function*(o){return'ios'!==n.Platform.OS?Promise.reject('requestAuthorization is only for iOS'):(o||console.error('authorizationLevel must be provided'),s.requestAuthorization(o))})),function(t){return o.apply(this,arguments)}),getCurrentPosition:function(o){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:l,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};o||console.error('Must provide a success callback'),s.getCurrentPosition(n,o,t)},watchPosition:function(o){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};o||console.error('Must provide a success callback'),c||(s.startObserving(n),c=!0);var l=v.length;return v.push([u.addListener('geolocationDidChange',o),t?u.addListener('geolocationError',t):null]),l},clearWatch:function(o){var t=v[o];if(t){t[0].remove();var n=t[1];n&&n.remove(),v[o]=void 0;for(var s=!0,u=0;u=l))break;u-=l}var o=t.slice(0,e).replace(/^\t+/,J),f=/(^|\n).*$/.exec(o),c=f&&f[0]||'',s=t.slice(e),p=/.*(\n|$)/.exec(s);return{line:i,column:u,snippet:`${c}${p&&p[0]}\n${H(' ',c.length)}^`}}var Q=/[a-zA-Z0-9:_-]/,Y=/[\s\t\r\n]/,tt=/['"]/;function et(t,e){var r,n=t.length,u=null,i=function(){for(;$+1'!==t[$]&&f('Expected >'),j||(u=b,l=b.children,o.push(b)),c}function p(){var e=t.indexOf('--\x3e',$);return~e||f('expected --\x3e'),$=e+2,c}function v(){var e=t.indexOf(']]>',$);return~e||f('expected ]]>'),l.push(t.slice($+7,e)),$=e+2,c}function h(){var e=y();(e||f('Expected tag name'),u&&e!==u.tag&&f(`Expected closing tag to match opening tag <${u.tag}>`),S(),'>'!==t[$]&&f('Expected >'),o.pop(),u=o[o.length-1])&&(l=u.children);return c}function y(){for(var e,r='';$'===r||'/'===r)return e;e+=r,$+=1}while($0){for(r=1,t=1;rte&&(te=re,ue=[]),ue.push(e))}function ce(){var e,r,n,t,o;for(e=re,r=[],n=Te();n!==u;)r.push(n),n=Te();if(r!==u)if((n=he())===u&&(n=null),n!==u){for(t=[],o=Te();o!==u;)t.push(o),o=Te();t!==u?(e,e=r=f(n)):(re=e,e=u)}else re=e,e=u;else re=e,e=u;return e}function he(){var e,r,n,t;if(e=re,(r=pe())!==u){for(n=[],t=we();t!==u;)n.push(t),t=we();n!==u&&(t=he())!==u?(e,e=r=s(r,t)):(re=e,e=u)}else re=e,e=u;return e===u&&(e=pe()),e}function pe(){var e;return(e=ge())===u&&(e=de())===u&&(e=ve())===u&&(e=Ae())===u&&(e=xe())===u&&(e=Ce()),e}function ge(){var e,n,t,o,i,f,s,A,x,C,y,j,w;if(e=re,r.substr(re,6)===l?(n=l,re+=6):(n=u,0===oe&&ae(a)),n!==u){for(t=[],o=Te();o!==u;)t.push(o),o=Te();if(t!==u)if(40===r.charCodeAt(re)?(o=c,re++):(o=u,0===oe&&ae(h)),o!==u){for(i=[],f=Te();f!==u;)i.push(f),f=Te();if(i!==u)if((f=me())!==u)if(we()!==u)if((s=me())!==u)if(we()!==u)if((A=me())!==u)if(we()!==u)if((x=me())!==u)if(we()!==u)if((C=me())!==u)if(we()!==u)if((y=me())!==u){for(j=[],w=Te();w!==u;)j.push(w),w=Te();j!==u?(41===r.charCodeAt(re)?(w=p,re++):(w=u,0===oe&&ae(d)),w!==u?(e,e=n=v(f,s,A,x,C,y)):(re=e,e=u)):(re=e,e=u)}else re=e,e=u;else re=e,e=u;else re=e,e=u;else re=e,e=u;else re=e,e=u;else re=e,e=u;else re=e,e=u;else re=e,e=u;else re=e,e=u;else re=e,e=u;else re=e,e=u;else re=e,e=u}else re=e,e=u;else re=e,e=u}else re=e,e=u;return e}function de(){var e,n,t,o,i,f,s,l,a;if(e=re,r.substr(re,9)===A?(n=A,re+=9):(n=u,0===oe&&ae(x)),n!==u){for(t=[],o=Te();o!==u;)t.push(o),o=Te();if(t!==u)if(40===r.charCodeAt(re)?(o=c,re++):(o=u,0===oe&&ae(h)),o!==u){for(i=[],f=Te();f!==u;)i.push(f),f=Te();if(i!==u)if((f=me())!==u)if((s=ye())===u&&(s=null),s!==u){for(l=[],a=Te();a!==u;)l.push(a),a=Te();l!==u?(41===r.charCodeAt(re)?(a=p,re++):(a=u,0===oe&&ae(d)),a!==u?(e,e=n=C(f,s)):(re=e,e=u)):(re=e,e=u)}else re=e,e=u;else re=e,e=u;else re=e,e=u}else re=e,e=u;else re=e,e=u}else re=e,e=u;return e}function ve(){var e,n,t,o,i,f,s,l,a;if(e=re,r.substr(re,5)===y?(n=y,re+=5):(n=u,0===oe&&ae(j)),n!==u){for(t=[],o=Te();o!==u;)t.push(o),o=Te();if(t!==u)if(40===r.charCodeAt(re)?(o=c,re++):(o=u,0===oe&&ae(h)),o!==u){for(i=[],f=Te();f!==u;)i.push(f),f=Te();if(i!==u)if((f=me())!==u)if((s=ye())===u&&(s=null),s!==u){for(l=[],a=Te();a!==u;)l.push(a),a=Te();l!==u?(41===r.charCodeAt(re)?(a=p,re++):(a=u,0===oe&&ae(d)),a!==u?(e,e=n=w(f,s)):(re=e,e=u)):(re=e,e=u)}else re=e,e=u;else re=e,e=u;else re=e,e=u}else re=e,e=u;else re=e,e=u}else re=e,e=u;return e}function Ae(){var e,n,t,o,i,f,s,l,a;if(e=re,r.substr(re,6)===b?(n=b,re+=6):(n=u,0===oe&&ae(E)),n!==u){for(t=[],o=Te();o!==u;)t.push(o),o=Te();if(t!==u)if(40===r.charCodeAt(re)?(o=c,re++):(o=u,0===oe&&ae(h)),o!==u){for(i=[],f=Te();f!==u;)i.push(f),f=Te();if(i!==u)if((f=me())!==u)if((s=je())===u&&(s=null),s!==u){for(l=[],a=Te();a!==u;)l.push(a),a=Te();l!==u?(41===r.charCodeAt(re)?(a=p,re++):(a=u,0===oe&&ae(d)),a!==u?(e,e=n=F(f,s)):(re=e,e=u)):(re=e,e=u)}else re=e,e=u;else re=e,e=u;else re=e,e=u}else re=e,e=u;else re=e,e=u}else re=e,e=u;return e}function xe(){var e,n,t,o,i,f,s,l;if(e=re,r.substr(re,5)===M?(n=M,re+=5):(n=u,0===oe&&ae(k)),n!==u){for(t=[],o=Te();o!==u;)t.push(o),o=Te();if(t!==u)if(40===r.charCodeAt(re)?(o=c,re++):(o=u,0===oe&&ae(h)),o!==u){for(i=[],f=Te();f!==u;)i.push(f),f=Te();if(i!==u)if((f=me())!==u){for(s=[],l=Te();l!==u;)s.push(l),l=Te();s!==u?(41===r.charCodeAt(re)?(l=p,re++):(l=u,0===oe&&ae(d)),l!==u?(e,e=n=S(f)):(re=e,e=u)):(re=e,e=u)}else re=e,e=u;else re=e,e=u}else re=e,e=u;else re=e,e=u}else re=e,e=u;return e}function Ce(){var e,n,t,o,i,f,s,l;if(e=re,r.substr(re,5)===R?(n=R,re+=5):(n=u,0===oe&&ae(I)),n!==u){for(t=[],o=Te();o!==u;)t.push(o),o=Te();if(t!==u)if(40===r.charCodeAt(re)?(o=c,re++):(o=u,0===oe&&ae(h)),o!==u){for(i=[],f=Te();f!==u;)i.push(f),f=Te();if(i!==u)if((f=me())!==u){for(s=[],l=Te();l!==u;)s.push(l),l=Te();s!==u?(41===r.charCodeAt(re)?(l=p,re++):(l=u,0===oe&&ae(d)),l!==u?(e,e=n=T(f)):(re=e,e=u)):(re=e,e=u)}else re=e,e=u;else re=e,e=u}else re=e,e=u;else re=e,e=u}else re=e,e=u;return e}function me(){var e,r,n,t;return e=re,r=re,(n=Se())===u&&(n=null),n!==u&&(t=Fe())!==u?r=n=[n,t]:(re=r,r=u),r!==u&&(e,r=X(r)),(e=r)===u&&(e=re,r=re,(n=Se())===u&&(n=null),n!==u&&(t=Ee())!==u?r=n=[n,t]:(re=r,r=u),r!==u&&(e,r=Y(r)),e=r),e}function ye(){var e,r;return e=re,we()!==u&&(r=me())!==u?(e,e=_(r)):(re=e,e=u),e}function je(){var e,r,n;return e=re,we()!==u&&(r=me())!==u&&we()!==u&&(n=me())!==u?(e,e=L(r,n)):(re=e,e=u),e}function we(){var e,r,n,t,o;if(e=re,r=[],(n=Te())!==u)for(;n!==u;)r.push(n),n=Te();else r=u;if(r!==u)if((n=be())===u&&(n=null),n!==u){for(t=[],o=Te();o!==u;)t.push(o),o=Te();t!==u?e=r=[r,n,t]:(re=e,e=u)}else re=e,e=u;else re=e,e=u;if(e===u)if(e=re,(r=be())!==u){for(n=[],t=Te();t!==u;)n.push(t),t=Te();n!==u?e=r=[r,n]:(re=e,e=u)}else re=e,e=u;return e}function be(){var e;return 44===r.charCodeAt(re)?(e=P,re++):(e=u,0===oe&&ae(U)),e}function Ee(){var e,r;return e=re,(r=Re())!==u&&(e,r=q(r)),e=r}function Fe(){var e,r,n,t;return e=re,r=re,(n=Me())!==u?((t=ke())===u&&(t=null),t!==u?r=n=[n,t]:(re=r,r=u)):(re=r,r=u),r!==u&&(e,r=z(r)),(e=r)===u&&(e=re,r=re,(n=Re())!==u&&(t=ke())!==u?r=n=[n,t]:(re=r,r=u),r!==u&&(e,r=B(r)),e=r),e}function Me(){var e,n,t,o;return oe++,e=re,(n=Re())===u&&(n=null),n!==u?(46===r.charCodeAt(re)?(t=G,re++):(t=u,0===oe&&ae(H)),t!==u&&(o=Re())!==u?(e,e=n=J(n,o)):(re=e,e=u)):(re=e,e=u),e===u&&(e=re,(n=Re())!==u?(46===r.charCodeAt(re)?(t=G,re++):(t=u,0===oe&&ae(H)),t!==u?(e,e=n=B(n)):(re=e,e=u)):(re=e,e=u)),oe--,e===u&&(n=u,0===oe&&ae(D)),e}function ke(){var e,n,t,o,i;return e=re,n=re,K.test(r.charAt(re))?(t=r.charAt(re),re++):(t=u,0===oe&&ae(N)),t!==u?((o=Se())===u&&(o=null),o!==u&&(i=Re())!==u?n=t=[t,o,i]:(re=n,n=u)):(re=n,n=u),n!==u&&(e,n=O(n)),e=n}function Se(){var e;return Q.test(r.charAt(re))?(e=r.charAt(re),re++):(e=u,0===oe&&ae(V)),e}function Re(){var e,r;if(e=[],(r=Ie())!==u)for(;r!==u;)e.push(r),r=Ie();else e=u;return e}function Ie(){var e;return W.test(r.charAt(re))?(e=r.charAt(re),re++):(e=u,0===oe&&ae(Z)),e}function Te(){var e;return $.test(r.charAt(re))?(e=r.charAt(re),re++):(e=u,0===oe&&ae(ee)),e}var Xe,Ye,Le,Pe=Math.PI/180;if((t=i())!==u&&re===r.length)return t;throw t!==u&&re1?F:O,null!=A&&(E.bbWidth=String(A)),null!=S&&(E.bbHeight=String(S)),(0,c.default)(E,E,this),E.tintColor=w,null!=N&&(E.onLayout=N);var Z=Object.assign({},s);Array.isArray(W)&&'object'==typeof W[0]?Z.transform=void 0:(E.transform=void 0,Z.transform=W);var $='android'===f.Platform.OS?y.default:b.default;return(0,r(d[17]).jsx)($,Object.assign({},E,{ref:function(t){return o.refMethod(t)}},(0,h.default)({viewBox:u,preserveAspectRatio:j}),{children:(0,r(d[17]).jsx)(p.default,{children:v,style:Z,font:B,fill:D,fillOpacity:M,fillRule:P,stroke:I,strokeWidth:_,strokeOpacity:H,strokeDasharray:C,strokeDashoffset:U,strokeLinecap:Y,strokeLinejoin:q,strokeMiterlimit:z})}))}}])})(v.default);j.displayName='Svg',j.defaultProps={preserveAspectRatio:'xMidYMid meet'}}),895,[8,11,119,17,18,3,2,56,153,6,882,896,869,897,900,901,902,193]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.alignEnum=void 0,e.default=function(l){var x=l.viewBox,o=l.preserveAspectRatio;if(!x)return null;var u=(Array.isArray(x)?x:x.trim().replace(/,/g,' ').split(M)).map(Number);if(4!==u.length||u.some(isNaN))return console.warn('Invalid `viewBox` prop:'+x),null;var s=o?o.trim().split(M):[],v=s[0],c=s[1];return{minX:u[0],minY:u[1],vbWidth:u[2],vbHeight:u[3],align:t[v]||'xMidYMid',meetOrSlice:n[c]||0}},e.meetOrSliceTypes=void 0;var n=e.meetOrSliceTypes={meet:0,slice:1,none:2},t=e.alignEnum=['xMinYMin','xMidYMin','xMaxYMin','xMinYMid','xMidYMid','xMaxYMid','xMinYMax','xMidYMax','xMaxYMax','none'].reduce((function(n,t){return n[t]=t,n}),{}),M=/\s+/}),896,[]); +__d((function(g,_r,_i,a,m,_e,d){Object.defineProperty(_e,"__esModule",{value:!0}),_e.default=void 0;var t=_r(d[0])(_r(d[1])),e=_r(d[0])(_r(d[2])),r=_r(d[0])(_r(d[3])),n=_r(d[0])(_r(d[4])),u=_r(d[0])(_r(d[5])),o=(_r(d[0])(_r(d[6])),(function(t,e){if("function"==typeof WeakMap)var r=new WeakMap,n=new WeakMap;return(function(t,e){if(!e&&t&&t.__esModule)return t;var u,o,f={__proto__:null,default:t};if(null===t||"object"!=typeof t&&"function"!=typeof t)return f;if(u=e?n:r){if(u.has(t))return u.get(t);u.set(t,f)}for(var l in t)"default"!==l&&{}.hasOwnProperty.call(t,l)&&((o=(u=Object.defineProperty)&&Object.getOwnPropertyDescriptor(t,l))&&(o.get||o.set)?u(f,l,o):f[l]=t[l]);return f})(t,e)})(_r(d[7]))),f=_r(d[0])(_r(d[8])),l=_r(d[0])(_r(d[9])),i=_r(d[0])(_r(d[10]));function c(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(t){}return(c=function(){return!!t})()}var s=_e.default=(function(l){function s(){var e,u,o,l;(0,t.default)(this,s);for(var i=arguments.length,p=new Array(i),v=0;v1||Array.isArray(y)?t.Children.map(y,p):y,_=(0,_r(d[5]).stringifyPropsForFabric)({inlineSize:S,baselineShift:h,verticalAlign:b});return Object.assign({content:null===v?String(y):null,children:v},_,{alignmentBaseline:x,font:s(r),x:(0,n.default)(o),y:(0,n.default)(l),dx:(0,n.default)(f),dy:(0,n.default)(u),rotate:(0,n.default)(c)})},_e.extractFont=s,_e.setTSpan=function(t){e=t};var t=(function(t,n){if("function"==typeof WeakMap)var e=new WeakMap,r=new WeakMap;return(function(t,n){if(!n&&t&&t.__esModule)return t;var i,o,l={__proto__:null,default:t};if(null===t||"object"!=typeof t&&"function"!=typeof t)return l;if(i=n?r:e){if(i.has(t))return i.get(t);i.set(t,l)}for(var f in t)"default"!==f&&{}.hasOwnProperty.call(t,f)&&((o=(i=Object.defineProperty)&&Object.getOwnPropertyDescriptor(t,f))&&(o.get||o.set)?i(l,f,o):l[f]=t[f]);return l})(t,n)})(_r(d[0])),n=_r(d[1])(_r(d[2]));var e,r=/^\s*((?:(?:normal|bold|italic)\s+)*)(?:(\d+(?:\.\d+)?(?:%|px|em|pt|pc|mm|cm|in]))*(?:\s*\/.*?)?\s+)?\s*"?([^"]*)/i,i=/^[\s"']*/,o=/[\s"']*$/,l=/\s*,\s*/g,f={};function u(t){return t?t.split(l)[0].replace(i,'').replace(o,''):null}function c(t){if(f.hasOwnProperty(t))return f[t];var n=r.exec(t);if(!n)return f[t]=null,null;var e=/bold/.exec(n[1]),i=/italic/.exec(n[1]);return f[t]={fontSize:n[2]||12,fontWeight:e?'bold':'normal',fontStyle:i?'italic':'normal',fontFamily:u(n[3])},f[t]}function s(t){var n=t.fontData,e=t.fontStyle,r=t.fontVariant,i=t.fontWeight,o=t.fontStretch,l=t.fontSize,f=t.fontFamily,s=t.textAnchor,p=t.textDecoration,y=t.letterSpacing,S=t.wordSpacing,h=t.kerning,b=t.fontFeatureSettings,x=t.fontVariantLigatures,v=t.fontVariationSettings,_=t.font,j=(0,_r(d[3]).pickNotNil)({fontData:n,fontStyle:e,fontVariant:r,fontWeight:i,fontStretch:o,fontSize:l,fontFamily:u(f),textAnchor:s,textDecoration:p,letterSpacing:y,wordSpacing:S,kerning:h,fontFeatureSettings:b,fontVariantLigatures:x,fontVariationSettings:v}),O='string'==typeof _?c(_):_,F=Object.assign({},O,j),k={};return Object.keys(F).map((function(t){return k[t]=null===F[t]?null:String(F[t])})),k}function p(t){return'string'==typeof t||'number'==typeof t?(0,_r(d[4]).jsx)(e,{children:String(t)}):t}}),899,[153,8,878,883,193,874]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.__INTERNAL_VIEW_CONFIG=void 0;r(d[0])(r(d[1]));var o=e.__INTERNAL_VIEW_CONFIG={uiViewClassName:'RNSVGSvgViewAndroid',validAttributes:{bbWidth:!0,bbHeight:!0,minX:!0,minY:!0,vbWidth:!0,vbHeight:!0,align:!0,meetOrSlice:!0,tintColor:{process:r(d[2]).default},color:{process:r(d[2]).default},pointerEvents:!0,hasTVPreferredFocus:!0,borderTopEndRadius:!0,borderBottomStartRadius:!0,borderBottomColor:{process:r(d[2]).default},nextFocusDown:!0,borderRightColor:{process:r(d[2]).default},nextFocusRight:!0,borderLeftColor:{process:r(d[2]).default},borderColor:{process:r(d[2]).default},removeClippedSubviews:!0,nextFocusForward:!0,nextFocusUp:!0,accessible:!0,borderStartColor:{process:r(d[2]).default},borderBottomEndRadius:!0,borderEndColor:{process:r(d[2]).default},focusable:!0,nativeBackgroundAndroid:!0,borderTopStartRadius:!0,nativeForegroundAndroid:!0,backfaceVisibility:!0,borderStyle:!0,needsOffscreenAlphaCompositing:!0,hitSlop:!0,borderTopColor:{process:r(d[2]).default},nextFocusLeft:!0,borderTopRightRadius:!0,borderBottomRightRadius:!0,borderRadius:!0,borderBottomLeftRadius:!0,borderTopLeftRadius:!0}};e.default=r(d[3]).get('RNSVGSvgViewAndroid',(function(){return o}))}),900,[8,219,164,160]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.__INTERNAL_VIEW_CONFIG=void 0;r(d[0])(r(d[1]));var t=e.__INTERNAL_VIEW_CONFIG={uiViewClassName:'RNSVGSvgView',validAttributes:{bbWidth:!0,bbHeight:!0,minX:!0,minY:!0,vbWidth:!0,vbHeight:!0,align:!0,meetOrSlice:!0,tintColor:{process:r(d[2]).default},color:{process:r(d[2]).default},pointerEvents:!0}};e.default=r(d[3]).get('RNSVGSvgView',(function(){return t}))}),901,[8,219,164,160]); +__d((function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var o=r(d[0]);e.default=o.TurboModuleRegistry.getEnforcing('RNSVGSvgViewModule')}),902,[6]); +__d((function(g,_r,_i,a,m,_e,d){Object.defineProperty(_e,"__esModule",{value:!0}),_e.default=void 0;var t=_r(d[0])(_r(d[1])),e=_r(d[0])(_r(d[2])),r=_r(d[0])(_r(d[3])),n=_r(d[0])(_r(d[4])),o=_r(d[0])(_r(d[5])),u=(_r(d[0])(_r(d[6])),_r(d[0])(_r(d[7]))),f=(function(t,e){if("function"==typeof WeakMap)var r=new WeakMap,n=new WeakMap;return(function(t,e){if(!e&&t&&t.__esModule)return t;var o,u,f={__proto__:null,default:t};if(null===t||"object"!=typeof t&&"function"!=typeof t)return f;if(o=e?n:r){if(o.has(t))return o.get(t);o.set(t,f)}for(var l in t)"default"!==l&&{}.hasOwnProperty.call(t,l)&&((u=(o=Object.defineProperty)&&Object.getOwnPropertyDescriptor(t,l))&&(u.get||u.set)?o(f,l,u):f[l]=t[l]);return f})(t,e)})(_r(d[8])),l=_r(d[0])(_r(d[9])),i=_r(d[0])(_r(d[10]));_r(d[11]);var c=_r(d[0])(_r(d[12]));function s(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(t){}return(s=function(){return!!t})()}var p=_e.default=(function(i){function p(){var e,o,i,c;(0,t.default)(this,p);for(var v=arguments.length,y=new Array(v),h=0;h-1;){for(t=r=e[a],delete e[a],n=!0;r;){if(e.includes(r)){n=!1,e.splice(a,1);break}r='object'==typeof r&&r.parent||null}n&&(e[a]=t)}return e},existsOne:function e(t,r){return r.some((function(r){return'object'==typeof r&&(t(r)||e(t,r.children))}))},getSiblings:function(e){var t='object'==typeof e&&e.parent;return t&&t.children||[]},hasAttrib:function(e,t){return e.props.hasOwnProperty(t)},findOne:function e(t,r){for(var n=null,a=0,o=r.length;a2&&void 0!==arguments[2]?arguments[2]:[],a=0,o=r.length;at[r])return 1}return 0}function C(e){return{selector:e,specificity:x(e.item.data)}}function E(e,t,r,n){var a,o,i,u,s,l,c,f=2*r,p=0;for(a=0;at&&(o=t),i>t&&(i=t),u=a,s=o;;)if(u element, skipped. Error details: '+e)}}var i=S(y(r));k(i);var u=A(i).reverse(),c=function(){if(null===p)return 0;var t=s.default.generate(b.data);try{var r=(0,l.default)(t,e,v).map(O);if(0===r.length)return 0;s.default.walk(p,{visit:'Declaration',enter:function(e){var t=e,n=t.property,a=t.value,o=t.important,i=n.trim(),u=(0,_r(d[11]).camelCase)(i),l=s.default.generate(a).trim();for(var c of r){var f=c.style,p=c.priority,v=p.get(i);(void 0===v||v',needPositions:!1,onParseError:e,onParseErrorThrow:!1,parseAtrulePrelude:!0,parseRulePrelude:!0,parseValue:!0,parseCustomProperty:!1,readSequence:r(d[3]),createList:function(){return new(r(d[4]))},createSingleNodeList:function(e){return(new(r(d[4]))).appendData(e)},getFirstListNode:function(e){return e&&e.first()},getLastListNode:function(e){return e.last()},parseWithFallback:function(e,n){var t=this.scanner.tokenIndex;try{return e.call(this)}catch(e){if(this.onParseErrorThrow)throw e;var o=n.call(this,t);return this.onParseErrorThrow=!0,this.onParseError(e,o),this.onParseErrorThrow=!1,o}},lookupNonWSType:function(e){do{var t=this.scanner.lookupType(e++);if(t!==n)return t}while(0!==t);return 0},eat:function(e){if(this.scanner.tokenType!==e){var n=this.scanner.tokenStart,t=r(d[0]).NAME[e]+' is expected';switch(e){case o:this.scanner.tokenType===s||this.scanner.tokenType===c?(n=this.scanner.tokenEnd-1,t='Identifier is expected but function found'):t='Identifier is expected';break;case u:this.scanner.isDelim(35)&&(this.scanner.next(),n++,t='Name is expected');break;case l:this.scanner.tokenType===p&&(n=this.scanner.tokenEnd,t='Percent sign is expected');break;default:this.scanner.source.charCodeAt(this.scanner.tokenStart)===e&&(n+=1)}this.error(t,n)}this.scanner.next()},consume:function(e){var n=this.scanner.getTokenValue();return this.eat(e),n},consumeFunctionName:function(){var e=this.scanner.source.substring(this.scanner.tokenStart,this.scanner.tokenEnd-1);return this.eat(s),e},getLocation:function(e,n){return this.needPositions?this.locationMap.getLocationRange(e,n,this.filename):null},getLocationFromList:function(e){if(this.needPositions){var n=this.getFirstListNode(e),t=this.getLastListNode(e);return this.locationMap.getLocationRange(null!==n?n.loc.start.offset-this.locationMap.startOffset:this.scanner.tokenStart,null!==t?t.loc.end.offset-this.locationMap.startOffset:this.scanner.tokenStart,this.filename)}return null},error:function(e,n){var t=void 0!==n&&n',P.needPositions=Boolean(o.positions),P.onParseError='function'==typeof o.onParseError?o.onParseError:e,P.onParseErrorThrow=!1,P.parseAtrulePrelude=!('parseAtrulePrelude'in o)||Boolean(o.parseAtrulePrelude),P.parseRulePrelude=!('parseRulePrelude'in o)||Boolean(o.parseRulePrelude),P.parseValue=!('parseValue'in o)||Boolean(o.parseValue),P.parseCustomProperty='parseCustomProperty'in o&&Boolean(o.parseCustomProperty),!P.context.hasOwnProperty(c))throw new Error('Unknown context `'+c+'`');return'function'==typeof u&&P.scanner.forEachToken((function(e,o,s){if(e===t){var c=P.getLocation(o,s),l=r(d[5]).cmpStr(n,s-2,s,'*/')?n.slice(o+2,s-2):n.slice(o+2,s);u(l,c)}})),s=P.context[c].call(P,o),P.scanner.eof||P.error(),s}}}),936,[937,938,941,944,945,939,946,943]); +__d((function(g,r,i,a,m,e,d){var t={EOF:0,Ident:1,Function:2,AtKeyword:3,Hash:4,String:5,BadString:6,Url:7,BadUrl:8,Delim:9,Number:10,Percentage:11,Dimension:12,WhiteSpace:13,CDO:14,CDC:15,Colon:16,Semicolon:17,Comma:18,LeftSquareBracket:19,RightSquareBracket:20,LeftParenthesis:21,RightParenthesis:22,LeftCurlyBracket:23,RightCurlyBracket:24,Comment:25},n=Object.keys(t).reduce((function(n,c){return n[t[c]]=c,n}),{});m.exports={TYPE:t,NAME:n}}),937,[]); +__d((function(g,r,_i,a,m,e,d){var t=r(d[0]).TYPE.EOF,n=r(d[0]).TYPE.WhiteSpace,s=r(d[0]).TYPE.Comment,o=16777215,i=24,h=function(){this.offsetAndType=null,this.balance=null,this.reset()};h.prototype={reset:function(){this.eof=!1,this.tokenIndex=-1,this.tokenType=0,this.tokenStart=this.firstCharOffset,this.tokenEnd=this.firstCharOffset},lookupType:function(n){return(n+=this.tokenIndex)>i:t},lookupOffset:function(t){return(t+=this.tokenIndex)0?t>i,this.source,f)){case 1:break t;case 2:h++;break t;default:this.balance[s]===h&&(h=s),f=this.offsetAndType[h]&o}return h-this.tokenIndex},isBalanceEdge:function(t){return this.balance[this.tokenIndex]>i===n;t++,s++);s>0&&this.skip(s)},skipSC:function(){for(;this.tokenType===n||this.tokenType===s;)this.next()},skip:function(t){var n=this.tokenIndex+t;n>i,this.tokenEnd=n&o):(this.tokenIndex=this.tokenCount,this.next())},next:function(){var n=this.tokenIndex+1;n>i,this.tokenEnd=n&o):(this.tokenIndex=this.tokenCount,this.eof=!0,this.tokenType=t,this.tokenStart=this.tokenEnd=this.source.length)},forEachToken:function(t){for(var n=0,s=this.firstCharOffset;n>i,h,u,n)}},dump:function(){var t=this,n=new Array(this.tokenCount);return this.forEachToken((function(s,o,i,h){n[h]={idx:h,type:r(d[0]).NAME[s],chunk:t.source.substring(o,i),balance:t.balance[h]}})),n}},m.exports=h}),938,[937,939]); +__d((function(g,r,_i,a,m,e,d){function t(t,n){return nt.length)return!1;for(var o=n;o=0&&r(d[0]).isWhiteSpace(t.charCodeAt(n));n--);return n+1},findWhiteSpaceEnd:function(t,n){for(;n=48&&t<=57}function i(t){return t>=65&&t<=90}function u(t){return t>=97&&t<=122}function c(t){return i(t)||u(t)}function o(t){return t>=128}function s(t){return c(t)||o(t)||95===t}function f(t){return t>=0&&t<=8||11===t||t>=14&&t<=31||127===t}function N(t){return 10===t||13===t||12===t}function S(t){return N(t)||32===t||9===t}function b(n,i){return 92===n&&(!N(i)&&i!==t)}var l=new Array(128);h.Eof=128,h.WhiteSpace=130,h.Digit=131,h.NameStart=132,h.NonPrintable=133;for(var p=0;p=65&&t<=70||t>=97&&t<=102},isUppercaseLetter:i,isLowercaseLetter:u,isLetter:c,isNonAscii:o,isNameStart:s,isName:function(t){return s(t)||n(t)||45===t},isNonPrintable:f,isNewline:N,isWhiteSpace:S,isValidEscape:b,isIdentifierStart:function(t,n,i){return 45===t?s(n)||45===n||b(n,i):!!s(t)||92===t&&b(t,n)},isNumberStart:function(t,i,u){return 43===t||45===t?n(i)?2:46===i&&n(u)?3:0:46===t?n(i)?2:0:n(t)?1:0},isBOM:function(t){return 65279===t||65534===t?1:0},charCodeCategory:h}}),940,[]); +__d((function(g,r,_i,a,m,e,d){function t(t,s){for(var n=s.length,i=r(d[0])(t.lines,n),o=t.startLine,u=r(d[0])(t.columns,n),l=t.startColumn,h=s.length>0?r(d[1]).isBOM(s.charCodeAt(0)):0;h=n.length?void(b>c,Y[l]=y,Y[y++]=l;y100&&(p=l-60+3,l=58);for(var v=c;v<=f;v++)v>=0&&v0&&u[v].length>p?"\u2026":'')+u[v].substr(p,98)+(u[v].length>p+100-1?"\u2026":''));return[i(c,s),new Array(l+h+2).join('-')+'^',i(s,f)].filter(Boolean).join('\n')}m.exports=function(n,o,i,u,s){var l=r(d[0])('SyntaxError',n);return l.source=o,l.offset=i,l.line=u,l.column=s,l.sourceFragment=function(n){return t(l,isNaN(n)?0:n)},Object.defineProperty(l,'formattedMessage',{get:function(){return'Parse error: '+l.message+'\n'+t(l,2)}}),l.parseError={offset:i,line:u,column:s},l}}),946,[947]); +__d((function(g,r,i,a,m,e,d){m.exports=function(t,n){var c=Object.create(SyntaxError.prototype),o=new Error;return c.name=t,c.message=n,Object.defineProperty(c,'stack',{get:function(){return(o.stack||'').replace(/^(.+\n){1,3}/,t+': '+n+'\n')}}),c}}),947,[]); +__d((function(g,r,_i,a,m,e,d){var t=Object.prototype.hasOwnProperty,n=function(){};function l(t){return'function'==typeof t?t:n}function i(t,n){return function(l,i,u){l.type===n&&t.call(this,l,i,u)}}function u(n,l){var i=l.structure,u=[];for(var o in i)if(!1!==t.call(i,o)){var c=i[o],f={name:o,type:!1,nullable:!1};Array.isArray(i[o])||(c=[i[o]]);for(var s=0;s0&&n.column>=0)||o||t||i)&&!(n&&'line'in n&&'column'in n&&o&&'line'in o&&'column'in o&&n.line>0&&n.column>=0&&o.line>0&&o.column>=0&&t))throw new Error('Invalid mapping: '+JSON.stringify({generated:n,source:t,original:o,name:i}))},n.prototype._serializeMappings=function(){for(var n,o,t,i,s=0,l=1,u=0,c=0,p=0,h=0,f='',_=this._mappings.toArray(),y=0,v=_.length;y0){if(!r(d[0]).compareByGeneratedPositionsInflated(o,_[y-1]))continue;n+=','}n+=r(d[3]).encode(o.generatedColumn-s),s=o.generatedColumn,null!=o.source&&(i=this._sources.indexOf(o.source),n+=r(d[3]).encode(i-h),h=i,n+=r(d[3]).encode(o.originalLine-1-c),c=o.originalLine-1,n+=r(d[3]).encode(o.originalColumn-u),u=o.originalColumn,null!=o.name&&(t=this._names.indexOf(o.name),n+=r(d[3]).encode(t-p),p=t)),f+=n}return f},n.prototype._generateSourcesContent=function(n,o){return n.map((function(n){if(!this._sourcesContents)return null;null!=o&&(n=r(d[0]).relative(o,n));var t=r(d[0]).toSetString(n);return Object.prototype.hasOwnProperty.call(this._sourcesContents,t)?this._sourcesContents[t]:null}),this)},n.prototype.toJSON=function(){var n={version:this._version,sources:this._sources.toArray(),names:this._names.toArray(),mappings:this._serializeMappings()};return null!=this._file&&(n.file=this._file),null!=this._sourceRoot&&(n.sourceRoot=this._sourceRoot),this._sourcesContents&&(n.sourcesContent=this._generateSourcesContent(n.sources,n.sourceRoot)),n},n.prototype.toString=function(){return JSON.stringify(this.toJSON())},e.SourceMapGenerator=n}),951,[952,953,954,955]); +__d((function(g,r,_i,a,m,e,d){e.getArg=function(n,t,i){if(t in n)return n[t];if(3===arguments.length)return i;throw new Error('"'+t+'" is a required argument.')};var n=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.-]*)(?::(\d+))?(.*)$/,t=/^data:.+\,.+$/;function i(t){var i=t.match(n);return i?{scheme:i[1],auth:i[2],host:i[3],port:i[4],path:i[5]}:null}function o(n){var t='';return n.scheme&&(t+=n.scheme+':'),t+='//',n.auth&&(t+=n.auth+'@'),n.host&&(t+=n.host),n.port&&(t+=":"+n.port),n.path&&(t+=n.path),t}function u(n){var t=n,u=i(n);if(u){if(!u.path)return n;t=u.path}for(var c,l=e.isAbsolute(t),h=t.split(/\/+/),s=0,f=h.length-1;f>=0;f--)'.'===(c=h[f])?h.splice(f,1):'..'===c?s++:s>0&&(''===c?(h.splice(f+1,s),s=0):(h.splice(f,2),s--));return''===(t=h.join('/'))&&(t=l?'/':'.'),u?(u.path=t,o(u)):t}function c(n,c){""===n&&(n="."),""===c&&(c=".");var l=i(c),h=i(n);if(h&&(n=h.path||'/'),l&&!l.scheme)return h&&(l.scheme=h.scheme),o(l);if(l||c.match(t))return c;if(h&&!h.host&&!h.path)return h.host=c,o(h);var s='/'===c.charAt(0)?c:u(n.replace(/\/+$/,'')+'/'+c);return h?(h.path=s,o(h)):s}e.urlParse=i,e.urlGenerate=o,e.normalize=u,e.join=c,e.isAbsolute=function(t){return'/'===t.charAt(0)||n.test(t)},e.relative=function(n,t){""===n&&(n="."),n=n.replace(/\/$/,'');for(var i=0;0!==t.indexOf(n+'/');){var o=n.lastIndexOf("/");if(o<0)return t;if((n=n.slice(0,o)).match(/^([^\/]+:\/)?\/*$/))return t;++i}return Array(i+1).join("../")+t.substr(n.length+1)};var l=!('__proto__'in Object.create(null));function h(n){return n}function s(n){if(!n)return!1;var t=n.length;if(t<9)return!1;if(95!==n.charCodeAt(t-1)||95!==n.charCodeAt(t-2)||111!==n.charCodeAt(t-3)||116!==n.charCodeAt(t-4)||111!==n.charCodeAt(t-5)||114!==n.charCodeAt(t-6)||112!==n.charCodeAt(t-7)||95!==n.charCodeAt(t-8)||95!==n.charCodeAt(t-9))return!1;for(var i=t-10;i>=0;i--)if(36!==n.charCodeAt(i))return!1;return!0}function f(n,t){return n===t?0:null===n?1:null===t?-1:n>t?1:-1}e.toSetString=l?h:function(n){return s(n)?'$'+n:n},e.fromSetString=l?h:function(n){return s(n)?n.slice(1):n},e.compareByOriginalPositions=function(n,t,i){var o=f(n.source,t.source);return 0!==o||0!==(o=n.originalLine-t.originalLine)||0!==(o=n.originalColumn-t.originalColumn)||i||0!==(o=n.generatedColumn-t.generatedColumn)||0!==(o=n.generatedLine-t.generatedLine)?o:f(n.name,t.name)},e.compareByGeneratedPositionsDeflated=function(n,t,i){var o=n.generatedLine-t.generatedLine;return 0!==o||0!==(o=n.generatedColumn-t.generatedColumn)||i||0!==(o=f(n.source,t.source))||0!==(o=n.originalLine-t.originalLine)||0!==(o=n.originalColumn-t.originalColumn)?o:f(n.name,t.name)},e.compareByGeneratedPositionsInflated=function(n,t){var i=n.generatedLine-t.generatedLine;return 0!==i||0!==(i=n.generatedColumn-t.generatedColumn)||0!==(i=f(n.source,t.source))||0!==(i=n.originalLine-t.originalLine)||0!==(i=n.originalColumn-t.originalColumn)?i:f(n.name,t.name)},e.parseSourceMapInput=function(n){return JSON.parse(n.replace(/^\)]}'[^\n]*\n/,''))},e.computeSourceURL=function(n,t,l){if(t=t||'',n&&('/'!==n[n.length-1]&&'/'!==t[0]&&(n+='/'),t=n+t),l){var h=i(l);if(!h)throw new Error("sourceMapURL could not be parsed");if(h.path){var s=h.path.lastIndexOf('/');s>=0&&(h.path=h.path.substring(0,s+1))}t=c(o(h),t)}return u(t)}}),952,[]); +__d((function(g,r,_i,a,m,e,d){var t=Object.prototype.hasOwnProperty,n="undefined"!=typeof Map;function i(){this._array=[],this._set=n?new Map:Object.create(null)}i.fromArray=function(t,n){for(var s=new i,o=0,h=t.length;o=0)return s}else{var o=r(d[0]).toSetString(i);if(t.call(this._set,o))return this._set[o]}throw new Error('"'+i+'" is not in the set.')},i.prototype.at=function(t){if(t>=0&&ts||h==s&&p>=_||r(d[0]).compareByGeneratedPositionsInflated(n,o)<=0?(this._last=t,this._array.push(t)):(this._sorted=!1,this._array.push(t))},t.prototype.toArray=function(){return this._sorted||(this._array.sort(r(d[0]).compareByGeneratedPositionsInflated),this._sorted=!0),this._array},e.MappingList=t}),954,[952]); +__d((function(g,r,i,a,m,e,d){function n(n){return n<0?1+(-n<<1):0+(n<<1)}e.encode=function(o){var t,c="",u=n(o);do{t=31&u,(u>>>=5)>0&&(t|=32),c+=r(d[0]).encode(t)}while(u>0);return c},e.decode=function(n,o,t){var c,u,h,f,l=n.length,w=0,v=0;do{if(o>=l)throw new Error("Expected more digits in base 64 VLQ value.");if(-1===(u=r(d[0]).decode(n.charCodeAt(o++))))throw new Error("Invalid base64 digit: "+n.charAt(o-1));c=!!(32&u),w+=(u&=31)<>1,1==(1&h)?-f:f),t.rest=o}}),955,[956]); +__d((function(g,r,i,a,m,e,d){var n='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('');e.encode=function(t){if(0<=t&&t');function i(t,n,i){var s={};for(var o in t)t[o].syntax&&(s[o]=i?t[o].syntax:r(d[1])(t[o].syntax,{compact:n}));return s}function s(t,n,s){var o={};for(var u of Object.entries(t)){var c=r(d[2])(u,2),p=c[0],l=c[1];o[p]={prelude:l.prelude&&(s?l.prelude.syntax:r(d[1])(l.prelude.syntax,{compact:n})),descriptors:l.descriptors&&i(l.descriptors,n,s)}}return o}function o(t){for(var n=0;n3&&void 0!==arguments[3]?arguments[3]:null,syntax:null,match:null};return'function'==typeof t?o.match=r(d[0]).buildMatchGraph(t,s):('string'==typeof t?Object.defineProperty(o,'syntax',{get:function(){return Object.defineProperty(o,'syntax',{value:r(d[9])(t)}),o.syntax}}):o.syntax=t,Object.defineProperty(o,'match',{get:function(){return Object.defineProperty(o,'match',{value:r(d[0]).buildMatchGraph(o.syntax,s)}),o.match}})),o},addAtrule_:function(t,n){var i=this;n&&(this.atrules[t]={type:'Atrule',name:t,prelude:n.prelude?this.createDescriptor(n.prelude,'AtrulePrelude',t):null,descriptors:n.descriptors?Object.keys(n.descriptors).reduce((function(s,o){return s[o]=i.createDescriptor(n.descriptors[o],'AtruleDescriptor',o,t),s}),{}):null})},addProperty_:function(t,n){n&&(this.properties[t]=this.createDescriptor(n,'Property',t))},addType_:function(t,i){i&&(this.types[t]=this.createDescriptor(i,'Type',t),i===r(d[8])['-ms-legacy-expression']&&(this.valueCommonSyntax=n))},checkAtruleName:function(t){if(!this.getAtrule(t))return new(r(d[6]).SyntaxReferenceError)('Unknown at-rule','@'+t)},checkAtrulePrelude:function(t,n){var i=this.checkAtruleName(t);if(i)return i;var s=this.getAtrule(t);return!s.prelude&&n?new SyntaxError('At-rule `@'+t+'` should not contain a prelude'):s.prelude&&!n?new SyntaxError('At-rule `@'+t+'` should contain a prelude'):void 0},checkAtruleDescriptorName:function(t,n){var i=this.checkAtruleName(t);if(i)return i;var s=this.getAtrule(t),o=r(d[10]).keyword(n);return s.descriptors?s.descriptors[o.name]||s.descriptors[o.basename]?void 0:new(r(d[6]).SyntaxReferenceError)('Unknown at-rule descriptor',n):new SyntaxError('At-rule `@'+t+'` has no known descriptors')},checkPropertyName:function(t){return r(d[10]).property(t).custom?new Error('Lexer matching doesn\'t applicable for custom properties'):this.getProperty(t)?void 0:new(r(d[6]).SyntaxReferenceError)('Unknown property',t)},matchAtrulePrelude:function(t,n){var i=this.checkAtrulePrelude(t,n);return i?u(null,i):n?c(this,this.getAtrule(t).prelude,n,!1):u(null,null)},matchAtruleDescriptor:function(t,n,i){var s=this.checkAtruleDescriptorName(t,n);if(s)return u(null,s);var o=this.getAtrule(t),p=r(d[10]).keyword(n);return c(this,o.descriptors[p.name]||o.descriptors[p.basename],i,!1)},matchDeclaration:function(t){return'Declaration'!==t.type?u(null,new Error('Not a Declaration node')):this.matchProperty(t.property,t.value)},matchProperty:function(t,n){var i=this.checkPropertyName(t);return i?u(null,i):c(this,this.getProperty(t),n,!0)},matchType:function(t,n){var i=this.getType(t);return i?c(this,i,n,!1):u(null,new(r(d[6]).SyntaxReferenceError)('Unknown type',t))},match:function(t,n){return'string'==typeof t||t&&t.type?('string'!=typeof t&&t.match||(t=this.createDescriptor(t,'Type','anonymous')),c(this,t,n,!1)):u(null,new(r(d[6]).SyntaxReferenceError)('Bad syntax'))},findValueFragments:function(t,n,i,s){return r(d[11]).matchFragments(this,n,this.matchProperty(t,n),i,s)},findDeclarationValueFragments:function(t,n,i){return r(d[11]).matchFragments(this,t.value,this.matchDeclaration(t),n,i)},findAllFragments:function(t,n,i){var s=[];return this.syntax.walk(t,{visit:'Declaration',enter:function(t){s.push.apply(s,this.findDeclarationValueFragments(t,n,i))}.bind(this)}),s},getAtrule:function(t){var n=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=r(d[10]).keyword(t);return(i.vendor&&n?this.atrules[i.name]||this.atrules[i.basename]:this.atrules[i.name])||null},getAtrulePrelude:function(t){var n=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=this.getAtrule(t,n);return i&&i.prelude||null},getAtruleDescriptor:function(t,n){return this.atrules.hasOwnProperty(t)&&this.atrules.declarators&&this.atrules[t].declarators[n]||null},getProperty:function(t){var n=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],i=r(d[10]).property(t);return(i.vendor&&n?this.properties[i.name]||this.properties[i.basename]:this.properties[i.name])||null},getType:function(t){return this.types.hasOwnProperty(t)?this.types[t]:null},validate:function(){function t(s,o,u,c){if(u.hasOwnProperty(o))return u[o];u[o]=!1,null!==c.syntax&&r(d[12])(c.syntax,(function(c){if('Type'===c.type||'Property'===c.type){var p='Type'===c.type?s.types:s.properties,l='Type'===c.type?n:i;p.hasOwnProperty(c.name)&&!t(s,c.name,l,p[c.name])||(u[o]=!0)}}),this)}var n={},i={};for(var s in this.types)t(this,s,n,this.types[s]);for(var s in this.properties)t(this,s,i,this.properties[s]);return n=Object.keys(n).filter((function(t){return n[t]})),i=Object.keys(i).filter((function(t){return i[t]})),n.length||i.length?{types:n,properties:i}:null},dump:function(t,n){return{generic:this.generic,types:i(this.types,!n,t),properties:i(this.properties,!n,t),atrules:s(this.atrules,!n,t)}},toString:function(){return JSON.stringify(this.dump())}},m.exports=p}),958,[959,963,26,964,965,966,967,968,969,960,972,973,974]); +__d((function(g,r,_i,a,m,e,d){var t={type:'Match'},n={type:'Mismatch'},u={type:'DisallowEmpty'},y=40,o=41;function l(u,y,o){return y===t&&o===n||u===t&&y===t&&o===t?u:('If'===u.type&&u.else===n&&y===t&&(y=u.then,u=u.match),{type:'If',match:u,then:y,else:o})}function c(t){return t.length>2&&t.charCodeAt(t.length-2)===y&&t.charCodeAt(t.length-1)===o}function p(t){return'Keyword'===t.type||'AtKeyword'===t.type||'Function'===t.type||'Type'===t.type&&c(t.name)}function s(u,y,o){switch(u){case' ':for(var i=t,h=y.length-1;h>=0;h--){i=l(w=y[h],i,n)}return i;case'|':i=n;var f=null;for(h=y.length-1;h>=0;h--){if(p(w=y[h])&&(null===f&&h>0&&p(y[h-1])&&(i=l({type:'Enum',map:f=Object.create(null)},t,i)),null!==f)){var v=(c(w.name)?w.name.slice(0,-1):w.name).toLowerCase();if(v in f==!1){f[v]=w;continue}}f=null,i=l(w,t,i)}return i;case'&&':if(y.length>5)return{type:'MatchOnce',terms:y,all:!0};for(i=n,h=y.length-1;h>=0;h--){var w=y[h];x=y.length>1?s(u,y.filter((function(t){return t!==w})),!1):t,i=l(w,x,i)}return i;case'||':if(y.length>5)return{type:'MatchOnce',terms:y,all:!1};for(i=o?t:n,h=y.length-1;h>=0;h--){var x;w=y[h];x=y.length>1?s(u,y.filter((function(t){return t!==w})),!0):t,i=l(w,x,i)}return i}}function i(y){var o=t,c=h(y.term);if(0===y.max)c=l(c,u,n),(o=l(c,null,n)).then=l(t,t,o),y.comma&&(o.then.else=l({type:'Comma',syntax:y},o,n));else for(var p=y.min||1;p<=y.max;p++)y.comma&&o!==t&&(o=l({type:'Comma',syntax:y},o,n)),o=l(c,l(t,t,o),n);if(0===y.min)o=l(t,t,o);else for(p=0;p=128||0===S[a])break}return t.pos===n&&t.error('Expect a keyword'),t.substringToPos(n)}function W(t){for(var n=t.pos;n57)break}return t.pos===n&&t.error('Expect a number'),t.substringToPos(n)}function _(t){var n=t.str.indexOf('\'',t.pos+1);return-1===n&&(t.pos=t.str.length,t.error('Expect an apostrophe')),t.substringToPos(n+1)}function j(t){var n,a=null;return t.eat(T),n=W(t),t.charCode()===C?(t.pos++,t.charCode()!==U&&(a=W(t))):a=n,t.eat(U),{min:Number(n),max:a?Number(a):0}}function z(t){var n=null,a=!1;switch(t.charCode()){case h:t.pos++,n={min:0,max:0};break;case y:t.pos++,n={min:1,max:0};break;case k:t.pos++,n={min:0,max:1};break;case c:t.pos++,a=!0,n=t.charCode()===T?j(t):{min:1,max:0};break;case T:n=j(t);break;default:return null}return{type:'Multiplier',comma:a,min:n.min,max:n.max,term:null}}function F(t,n){var a=z(t);return null!==a?(a.term=n,a):n}function M(t){var n=t.peek();return''===n?null:{type:'Token',value:n}}function R(t){var n;return t.eat(v),t.eat(i),n=O(t),t.eat(i),t.eat(x),F(t,{type:'Property',name:n})}function Z(t){var n=null,a=null,o=1;return t.eat(A),t.charCode()===b&&(t.peek(),o=-1),-1==o&&t.charCode()===N?t.peek():n=o*Number(W(t)),K(t),t.eat(C),K(t),t.charCode()===N?t.peek():(o=1,t.charCode()===b&&(t.peek(),o=-1),a=o*Number(W(t))),t.eat(E),null===n&&null===a?null:{type:'Range',min:n,max:a}}function q(t){var n,a=null;return t.eat(v),n=O(t),t.charCode()===l&&t.nextCharCode()===f&&(t.pos+=2,n+='()'),t.charCodeAt(t.findWsEnd(t.pos))===A&&(K(t),a=Z(t)),t.eat(x),F(t,{type:'Type',name:n,opts:a})}function B(t){var n;return n=O(t),t.charCode()===l?(t.pos++,{type:'Function',name:n}):F(t,{type:'Keyword',name:n})}function D(t,n){function a(t,n){return{type:'Group',terms:t,combinator:n,disallowEmpty:!1,explicit:!1}}for(n=Object.keys(n).sort((function(t,n){return G[t]-G[n]}));n.length>0;){for(var o=n.shift(),s=0,u=0;s1&&(t.splice(u,s-u,a(t.slice(u,s),o)),s=u+1),u=-1))}-1!==u&&n.length&&t.splice(u,s-u,a(t.slice(u,s),o))}return o}function H(t){for(var n,a=[],o={},s=null,u=t.pos;n=J(t);)'Spaces'!==n.type&&('Combinator'===n.type?(null!==s&&'Combinator'!==s.type||(t.pos=u,t.error('Unexpected combinator')),o[n.value]=!0):null!==s&&'Combinator'!==s.type&&(o[' ']=!0,a.push({type:'Combinator',value:' '})),a.push(n),s=n,u=t.pos);return null!==s&&'Combinator'===s.type&&(t.pos-=u,t.error('Unexpected combinator')),{type:'Group',terms:a,combinator:D(a,o)||' ',disallowEmpty:!1,explicit:!1}}function I(t){var n;return t.eat(A),n=H(t),t.eat(E),n.explicit=!0,t.charCode()===u&&(t.pos++,n.disallowEmpty=!0),n}function J(l){var f=l.charCode();if(f<128&&1===S[f])return B(l);switch(f){case E:break;case A:return F(l,I(l));case v:return l.nextCharCode()===i?R(l):q(l);case P:return{type:'Combinator',value:l.substringToPos(l.nextCharCode()===P?l.pos+2:l.pos+1)};case p:return l.pos++,l.eat(p),{type:'Combinator',value:'&&'};case C:return l.pos++,{type:'Comma'};case i:return F(l,{type:'String',value:_(l)});case s:case t:case n:case o:case a:return{type:'Spaces',value:K(l)};case w:return(f=l.nextCharCode())<128&&1===S[f]?(l.pos++,{type:'AtKeyword',name:O(l)}):M(l);case h:case y:case k:case c:case u:break;case T:if((f=l.nextCharCode())<48||f>57)return M(l);break;default:return M(l)}}function L(t){var n=new(r(d[0]))(t),a=H(n);return n.pos!==t.length&&n.error('Unexpected input'),1===a.terms.length&&'Group'===a.terms[0].type&&(a=a.terms[0]),a}L('[a&&#|<\'c\'>*||e() f{2} /,(% g#{1,2} h{2,})]!'),m.exports=L}),960,[961]); +__d((function(g,r,i,a,m,e,d){var t=function(t){this.str=t,this.pos=0};t.prototype={charCodeAt:function(t){return t';break;case'Property':f='<\''+n.name+'\'>';break;case'Keyword':f=n.name;break;case'AtKeyword':f='@'+n.name;break;case'Function':f=n.name+'(';break;case'String':case'Token':f=n.value;break;case'Comma':f=',';break;default:throw new Error('Unknown node type `'+n.type+'`')}return u(f,n)}m.exports=function(o,t){var u=n,p=!1,s=!1;return'function'==typeof t?u=t:t&&(p=Boolean(t.forceBraces),s=Boolean(t.compact),'function'==typeof t.decorate&&(u=t.decorate)),c(o,u,p,s)}}),963,[]); +__d((function(g,r,_i,a,m,e,d){function t(t){function n(t){return null!==t&&('Type'===t.type||'Property'===t.type||'Keyword'===t.type)}var u=null;return null!==this.matched&&(function i(o){if(Array.isArray(o.match)){for(var y=0;y=65&&c<=90&&(c|=32),c!==n.charCodeAt(l))return!1}return!0}function y(t){return t.type===r(d[0]).TYPE.Delim&&'?'!==t.value}function M(t){return null===t||(t.type===r(d[0]).TYPE.Comma||t.type===r(d[0]).TYPE.Function||t.type===r(d[0]).TYPE.LeftParenthesis||t.type===r(d[0]).TYPE.LeftSquareBracket||t.type===r(d[0]).TYPE.LeftCurlyBracket||y(t))}function x(t){return null===t||(t.type===r(d[0]).TYPE.RightParenthesis||t.type===r(d[0]).TYPE.RightSquareBracket||t.type===r(d[0]).TYPE.RightCurlyBracket||t.type===r(d[0]).TYPE.Delim)}function v(k,y,v){function T(){do{R++,L=RD&&(D=R)}function I(){K=K.type===c?K.prev:{type:u,syntax:E.syntax,token:K.token,prev:K},E=E.prev}var E=null,P=null,w=null,Y=null,O=0,B=null,L=null,R=-1,D=0,K={type:n,syntax:null,token:null,prev:null};for(T();null===B&&++Ow.tokenIndex)&&(w=Y,Y=!1);else if(null===w){B=o;break}y=w.nextState,P=w.thenStack,E=w.syntaxStack,K=w.matchStack,R=w.tokenIndex,L=RR){for(;R':'<\''+y.name+'\'>'));if(!1!==Y&&null!==L&&'Type'===y.type)if('custom-ident'===y.name&&L.type===r(d[0]).TYPE.Ident||'length'===y.name&&'0'===L.value){null===Y&&(Y=C(y,w)),y=r(d[1]).MISMATCH;break}E={syntax:y.syntax,opts:y.syntax.opts||null!==E&&E.opts||null,prev:E},K={type:c,syntax:y.syntax,token:K.token,prev:K},y=W.match;break;case'Keyword':var $=y.name;if(null!==L){var j=L.value;if(-1!==j.indexOf('\\')&&(j=j.replace(/\\[09].*$/,'')),f(j,$)){H(),y=r(d[1]).MATCH;break}}y=r(d[1]).MISMATCH;break;case'AtKeyword':case'Function':if(null!==L&&f(L.value,y.name)){H(),y=r(d[1]).MATCH;break}y=r(d[1]).MISMATCH;break;case'Token':if(null!==L&&L.value===y.value){H(),y=r(d[1]).MATCH;break}y=r(d[1]).MISMATCH;break;case'Comma':null!==L&&L.type===r(d[0]).TYPE.Comma?M(K.token)?y=r(d[1]).MISMATCH:(H(),y=x(L)?r(d[1]).MISMATCH:r(d[1]).MATCH):y=M(K.token)||x(L)?r(d[1]).MATCH:r(d[1]).MISMATCH;break;case'String':var U='';for(G=R;G1?(o=s(v||c,'end')||l(n,O),f=l(o)):(o=s(v,'start')||l(s(c,'start')||n,O.slice(0,y)),f=s(v,'end')||l(o,O.substr(y,x))),{css:O,mismatchOffset:y,mismatchLength:x,start:o,end:f}}function s(n,t){var s=n&&n.loc&&n.loc[t];return s?'line'in s?l(s):s:null}function l(n,t){var s={offset:n.offset,line:n.line,column:n.column};if(t){var l=t.split(/\n|\r\n?|\f/);s.offset+=t.length,s.line+=l.length-1,s.column=1===l.length?s.column+t.length:l.pop().length+1}return s}m.exports={SyntaxReferenceError:function(n,t){var s=r(d[0])('SyntaxReferenceError',n+(t?' `'+t+'`':''));return s.reference=t,s},SyntaxMatchError:function(n,s,l,c){var o=r(d[0])('SyntaxMatchError',n),f=t(c,l),i=f.css,u=f.mismatchOffset,h=f.mismatchLength,v=f.start,y=f.end;return o.rawMessage=n,o.syntax=s?r(d[1])(s):'',o.css=i,o.mismatchOffset=u,o.mismatchLength=h,o.message=n+"\n syntax: "+o.syntax+"\n value: "+(i||'')+"\n --------"+new Array(o.mismatchOffset+1).join('-')+'^',Object.assign(o,v),o.loc={source:l&&l.loc&&l.loc.source||'',start:v,end:y},o}}}),967,[947,963]); +__d((function(g,r,_i,a,m,e,d){var n=Object.prototype.hasOwnProperty;function t(n){return'number'==typeof n&&isFinite(n)&&Math.floor(n)===n&&n>=0}function o(n){return Boolean(n)&&t(n.offset)&&t(n.line)&&t(n.column)}function i(t,i){return function(l,f){if(!l||l.constructor!==Object)return f(l,'Type of node should be an Object');for(var c in l){var s=!0;if(!1!==n.call(l,c)){if('type'===c)l.type!==t&&f(l,'Wrong node type `'+l.type+'`, expected `'+t+'`');else if('loc'===c){if(null===l.loc)continue;if(l.loc&&l.loc.constructor===Object)if('string'!=typeof l.loc.source)c+='.source';else if(o(l.loc.start)){if(o(l.loc.end))continue;c+='.end'}else c+='.start';s=!1}else if(i.hasOwnProperty(c)){var u=0;for(s=!1;!s&&u');else{if(!Array.isArray(v))throw new Error('Wrong value `'+v+'` in `'+t+'.'+s+'` structure definition');u.push('List')}}c[s]=u.join(' | ')}return{docs:c,check:i(t,f)}}m.exports={getStructureFromConfig:function(t){var o={};if(t.node)for(var i in t.node)if(n.call(t.node,i)){var f=t.node[i];if(!f.structure)throw new Error('Missed `structure` field in `'+i+'` node type definition');o[i]=l(i,f)}return o}}}),968,[945]); +__d((function(g,r,_i,a,m,e,d){var n,t=['unset','initial','inherit'],u=['calc(','-moz-calc(','-webkit-calc('];function i(n,t){return tn.max)return!0}return!1}function f(n,t){var u=n.index,i=0;do{if(i++,n.balance<=u)break}while(n=t(i));return i}function P(n){return function(t,i,l){return null===t?0:t.type===r(d[0]).TYPE.Function&&o(t.value,u)?f(t,i):n(t,i,l)}}function E(n){return function(t){return null===t||t.type!==n?0:1}}function T(n){return function(t,u,i){if(null===t||t.type!==r(d[0]).TYPE.Dimension)return 0;var l=r(d[0]).consumeNumber(t.value,0);if(null!==n){var o=t.value.indexOf('\\',l),f=-1!==o&&c(t.value,o)?t.value.substring(l,o):t.value.substr(l);if(!1===n.hasOwnProperty(f.toLowerCase()))return 0}return s(i,t.value,l)?0:1}}function Y(n){return'function'!=typeof n&&(n=function(){return 0}),function(t,u,i){return null!==t&&t.type===r(d[0]).TYPE.Number&&0===Number(t.value)?1:n(t,u,i)}}m.exports={'ident-token':E(r(d[0]).TYPE.Ident),'function-token':E(r(d[0]).TYPE.Function),'at-keyword-token':E(r(d[0]).TYPE.AtKeyword),'hash-token':E(r(d[0]).TYPE.Hash),'string-token':E(r(d[0]).TYPE.String),'bad-string-token':E(r(d[0]).TYPE.BadString),'url-token':E(r(d[0]).TYPE.Url),'bad-url-token':E(r(d[0]).TYPE.BadUrl),'delim-token':E(r(d[0]).TYPE.Delim),'number-token':E(r(d[0]).TYPE.Number),'percentage-token':E(r(d[0]).TYPE.Percentage),'dimension-token':E(r(d[0]).TYPE.Dimension),'whitespace-token':E(r(d[0]).TYPE.WhiteSpace),'CDO-token':E(r(d[0]).TYPE.CDO),'CDC-token':E(r(d[0]).TYPE.CDC),'colon-token':E(r(d[0]).TYPE.Colon),'semicolon-token':E(r(d[0]).TYPE.Semicolon),'comma-token':E(r(d[0]).TYPE.Comma),'[-token':E(r(d[0]).TYPE.LeftSquareBracket),']-token':E(r(d[0]).TYPE.RightSquareBracket),'(-token':E(r(d[0]).TYPE.LeftParenthesis),')-token':E(r(d[0]).TYPE.RightParenthesis),'{-token':E(r(d[0]).TYPE.LeftCurlyBracket),'}-token':E(r(d[0]).TYPE.RightCurlyBracket),string:E(r(d[0]).TYPE.String),ident:E(r(d[0]).TYPE.Ident),'custom-ident':function(n){if(null===n||n.type!==r(d[0]).TYPE.Ident)return 0;var u=n.value.toLowerCase();return o(u,t)||l(u,'default')?0:1},'custom-property-name':function(n){return null===n||n.type!==r(d[0]).TYPE.Ident||45!==i(n.value,0)||45!==i(n.value,1)?0:1},'hex-color':function(n){if(null===n||n.type!==r(d[0]).TYPE.Hash)return 0;var t=n.value.length;if(4!==t&&5!==t&&7!==t&&9!==t)return 0;for(var u=1;un.index||n.balancen.index||n.balance0?6:0;if(!r(d[0]).isHexDigit(o))return 0;if(++l>6)return 0}return l}function v(n,t,u){if(!n)return 0;for(;l(u(t),63);){if(++n>6)return 0;t++}return t}m.exports=function(t,p){var y=0;if(null===t||t.type!==n||!r(d[0]).cmpChar(t.value,0,117))return 0;if(null===(t=p(++y)))return 0;if(l(t,43))return null===(t=p(++y))?0:t.type===n?v(c(t,0,!0),++y,p):l(t,63)?v(1,++y,p):0;if(t.type===u){if(!o(t,43))return 0;var h=c(t,1,!0);return 0===h?0:null===(t=p(++y))?y:t.type===f||t.type===u?o(t,45)&&c(t,1,!1)?y+1:0:v(h,y,p)}return t.type===f&&o(t,43)?v(c(t,1,!0),++y,p):0}}),971,[943]); +__d((function(g,r,i,a,m,e,d){var t=Object.prototype.hasOwnProperty,n=Object.create(null),o=Object.create(null),u=45;function c(t,n){return n=n||0,t.length-n>=2&&t.charCodeAt(n)===u&&t.charCodeAt(n+1)===u}function l(t,n){if(n=n||0,t.length-n>=3&&t.charCodeAt(n)===u&&t.charCodeAt(n+1)!==u){var o=t.indexOf('-',n+2);if(-1!==o)return t.substring(n,o+1)}return''}m.exports={keyword:function(o){if(t.call(n,o))return n[o];var u=o.toLowerCase();if(t.call(n,u))return n[o]=n[u];var s=c(u,0),f=s?'':l(u,0);return n[o]=Object.freeze({basename:u.substr(f.length),name:u,vendor:f,prefix:f,custom:s})},property:function(n){if(t.call(o,n))return o[n];var u=n,s=n[0];'/'===s?s='/'===n[1]?'//':'/':'_'!==s&&'*'!==s&&'$'!==s&&'#'!==s&&'+'!==s&&'&'!==s&&(s='');var f=c(u,s.length);if(!f&&(u=u.toLowerCase(),t.call(o,u)))return o[n]=o[u];var h=f?'':l(u,s.length),b=u.substr(0,s.length+h.length);return o[n]=Object.freeze({basename:u.substr(b.length),name:u.substr(s.length),hack:s,vendor:h,prefix:b,custom:f})},isCustomProperty:c,vendorPrefix:l}}),972,[]); +__d((function(g,r,i,a,m,e,d){function n(t){return'node'in t?t.node:n(t.match[0])}function t(n){return'node'in n?n.node:t(n.match[n.match.length-1])}m.exports={matchFragments:function(c,o,u,h,f){var l=[];return null!==u.matched&&(function u(s){if(null!==s.syntax&&s.syntax.type===h&&s.syntax.name===f){var y=n(s),p=t(s);c.syntax.walk(o,(function(n,t,c){if(n===y){var o=new(r(d[0]));do{if(o.appendData(t.data),t.data===p)break;t=t.next}while(null!==t);l.push({parent:c,nodes:o})}}))}Array.isArray(s.match)&&s.match.forEach(u)})(u.matched),l}}}),973,[945]); +__d((function(g,r,i,a,m,e,d){var t=function(){};function n(n){return'function'==typeof n?n:t}m.exports=function(o,c,s){var f=t,u=t;if('function'==typeof c?f=c:c&&(f=n(c.enter),u=n(c.leave)),f===t&&u===t)throw new Error('Neither `enter` nor `leave` walker handler is set or both aren\'t a function');!(function t(n){switch(f.call(s,n),n.type){case'Group':n.terms.forEach(t);break;case'Multiplier':t(n.term);break;case'Type':case'Property':case'Keyword':case'AtKeyword':case'Function':case'String':case'Token':case'Comma':break;default:throw new Error('Unknown type: '+n.type)}u.call(s,n)})(o)}}),974,[]); +__d((function(g,r,i,a,m,e,d){m.exports={SyntaxError:r(d[0]),parse:r(d[1]),generate:r(d[2]),walk:r(d[3])}}),975,[962,960,963,974]); +__d((function(g,r,i,a,m,e,d){m.exports=function n(t){var o={};for(var c in t){var f=t[c];f&&(Array.isArray(f)||f instanceof r(d[0])?f=f.map(n):f.constructor===Object&&(f=n(f))),o[c]=f}return o}}),976,[945]); +__d((function(g,r,i,_a,m,e,d){var n=Object.prototype.hasOwnProperty,t={generic:!0,types:c,atrules:{prelude:u,descriptors:u},properties:c,parseContext:function(n,t){return Object.assign(n,t)},scope:function t(s,c){for(var u in c)n.call(c,u)&&(o(s[u])?t(s[u],a(c[u])):s[u]=a(c[u]));return s},atrule:['parse'],pseudo:['parse'],node:['name','structure','parse','generate','walkContext']};function o(n){return n&&n.constructor===Object}function a(n){return o(n)?Object.assign({},n):n}function s(n,t){return'string'==typeof t&&/^\s*\|/.test(t)?'string'==typeof n?n+t:t.replace(/^\s*\|\s*/,''):t||null}function c(t,o){if('string'==typeof o)return s(t,o);var a=Object.assign({},t);for(var c in o)n.call(o,c)&&(a[c]=s(n.call(t,c)?t[c]:void 0,o[c]));return a}function u(n,t){var a=c(n,t);return!o(a)||Object.keys(a).length?a:null}function f(t,s,c){for(var u in c)if(!1!==n.call(c,u))if(!0===c[u])u in s&&n.call(s,u)&&(t[u]=a(s[u]));else if(c[u])if('function'==typeof c[u]){var l=c[u];t[u]=l({},t[u]),t[u]=l(t[u]||{},s[u])}else if(o(c[u])){var p={};for(var v in t[u])p[v]=f({},t[u][v],c[u]);for(var y in s[u])p[y]=f(p[y]||{},s[u][y],c[u]);t[u]=p}else if(Array.isArray(c[u])){var O={},b=c[u].reduce((function(n,t){return n[t]=!0,n}),{});for(var j of Object.entries(t[u]||{})){var x=r(d[0])(j,2),h=x[0],k=x[1];O[h]={},k&&f(O[h],k,b)}for(var w in s[u])n.call(s[u],w)&&(O[w]||(O[w]={}),s[u]&&s[u][w]&&f(O[w],s[u][w],b));t[u]=O}return t}m.exports=function(n,o){return f(n,o,t)}}),977,[26]); +__d((function(g,r,i,a,m,e,d){m.exports={generic:!0,types:r(d[0]).types,atrules:r(d[0]).atrules,properties:r(d[0]).properties,node:r(d[1])}}),978,[979,984]); +__d((function(g,r,i,a,m,e,d){var t=/^\s*\|\s*/;function s(s,n){var l={};for(var o in s)l[o]=s[o].syntax||s[o];for(var p in n)p in s?n[p].syntax?l[p]=t.test(n[p].syntax)?l[p]+' '+n[p].syntax.trim():n[p].syntax:delete l[p]:n[p].syntax&&(l[p]=n[p].syntax.replace(t,''));return l}function n(t){var s={};for(var n in t)s[n]=t[n].syntax;return s}m.exports={types:s(r(d[0]),r(d[1]).syntaxes),atrules:(function(t,l){var o={};for(var p in t){var u=l[p]&&l[p].descriptors||null;o[p]={prelude:p in l&&'prelude'in l[p]?l[p].prelude:t[p].prelude||null,descriptors:t[p].descriptors?s(t[p].descriptors,u||{}):u&&n(u)}}for(var c in l)hasOwnProperty.call(t,c)||(o[c]={prelude:l[c].prelude||null,descriptors:l[c].descriptors&&n(l[c].descriptors)});return o})((function(t){var s=Object.create(null);for(var n in t){var l=t[n],o=null;if(l.descriptors)for(var p in o=Object.create(null),l.descriptors)o[p]=l.descriptors[p].syntax;s[n.substr(1)]={prelude:l.syntax.trim().match(/^@\S+\s+([^;\{]*)/)[1].trim()||null,descriptors:o}}return s})(r(d[2])),r(d[1]).atrules),properties:s(r(d[3]),r(d[1]).properties)}}),979,[980,981,982,983]); +__d((function(e,t,a,n,r,s,o){r.exports={"absolute-size":{syntax:"xx-small | x-small | small | medium | large | x-large | xx-large | xxx-large"},"alpha-value":{syntax:" | "},"angle-percentage":{syntax:" | "},"angular-color-hint":{syntax:""},"angular-color-stop":{syntax:" && ?"},"angular-color-stop-list":{syntax:"[ [, ]? ]# , "},"animateable-feature":{syntax:"scroll-position | contents | "},attachment:{syntax:"scroll | fixed | local"},"attr()":{syntax:"attr( ? [, ]? )"},"attr-matcher":{syntax:"[ '~' | '|' | '^' | '$' | '*' ]? '='"},"attr-modifier":{syntax:"i | s"},"attribute-selector":{syntax:"'[' ']' | '[' [ | ] ? ']'"},"auto-repeat":{syntax:"repeat( [ auto-fill | auto-fit ] , [ ? ]+ ? )"},"auto-track-list":{syntax:"[ ? [ | ] ]* ? \n[ ? [ | ] ]* ?"},"baseline-position":{syntax:"[ first | last ]? baseline"},"basic-shape":{syntax:" | | | | "},"bg-image":{syntax:"none | "},"bg-layer":{syntax:" || [ / ]? || || || || "},"bg-position":{syntax:"[ [ left | center | right | top | bottom | ] | [ left | center | right | ] [ top | center | bottom | ] | [ center | [ left | right ] ? ] && [ center | [ top | bottom ] ? ] ]"},"bg-size":{syntax:"[ | auto ]{1,2} | cover | contain"},"blur()":{syntax:"blur( )"},"blend-mode":{syntax:"normal | multiply | screen | overlay | darken | lighten | color-dodge | color-burn | hard-light | soft-light | difference | exclusion | hue | saturation | color | luminosity"},box:{syntax:"border-box | padding-box | content-box"},"brightness()":{syntax:"brightness( )"},"calc()":{syntax:"calc( )"},"calc-sum":{syntax:" [ [ '+' | '-' ] ]*"},"calc-product":{syntax:" [ '*' | '/' ]*"},"calc-value":{syntax:" | | | ( )"},"cf-final-image":{syntax:" | "},"cf-mixing-image":{syntax:"? && "},"circle()":{syntax:"circle( [ ]? [ at ]? )"},"clamp()":{syntax:"clamp( #{3} )"},"class-selector":{syntax:"'.' "},"clip-source":{syntax:""},color:{syntax:" | | | | | | currentcolor | "},"color-stop":{syntax:" | "},"color-stop-angle":{syntax:"{1,2}"},"color-stop-length":{syntax:"{1,2}"},"color-stop-list":{syntax:"[ [, ]? ]# , "},combinator:{syntax:"'>' | '+' | '~' | [ '||' ]"},"common-lig-values":{syntax:"[ common-ligatures | no-common-ligatures ]"},"compat-auto":{syntax:"searchfield | textarea | push-button | slider-horizontal | checkbox | radio | square-button | menulist | listbox | meter | progress-bar | button"},"composite-style":{syntax:"clear | copy | source-over | source-in | source-out | source-atop | destination-over | destination-in | destination-out | destination-atop | xor"},"compositing-operator":{syntax:"add | subtract | intersect | exclude"},"compound-selector":{syntax:"[ ? * [ * ]* ]!"},"compound-selector-list":{syntax:"#"},"complex-selector":{syntax:" [ ? ]*"},"complex-selector-list":{syntax:"#"},"conic-gradient()":{syntax:"conic-gradient( [ from ]? [ at ]?, )"},"contextual-alt-values":{syntax:"[ contextual | no-contextual ]"},"content-distribution":{syntax:"space-between | space-around | space-evenly | stretch"},"content-list":{syntax:"[ | contents | | | | ]+"},"content-position":{syntax:"center | start | end | flex-start | flex-end"},"content-replacement":{syntax:""},"contrast()":{syntax:"contrast( [ ] )"},"counter()":{syntax:"counter( , ? )"},"counter-style":{syntax:" | symbols()"},"counter-style-name":{syntax:""},"counters()":{syntax:"counters( , , ? )"},"cross-fade()":{syntax:"cross-fade( , ? )"},"cubic-bezier-timing-function":{syntax:"ease | ease-in | ease-out | ease-in-out | cubic-bezier(, , , )"},"deprecated-system-color":{syntax:"ActiveBorder | ActiveCaption | AppWorkspace | Background | ButtonFace | ButtonHighlight | ButtonShadow | ButtonText | CaptionText | GrayText | Highlight | HighlightText | InactiveBorder | InactiveCaption | InactiveCaptionText | InfoBackground | InfoText | Menu | MenuText | Scrollbar | ThreeDDarkShadow | ThreeDFace | ThreeDHighlight | ThreeDLightShadow | ThreeDShadow | Window | WindowFrame | WindowText"},"discretionary-lig-values":{syntax:"[ discretionary-ligatures | no-discretionary-ligatures ]"},"display-box":{syntax:"contents | none"},"display-inside":{syntax:"flow | flow-root | table | flex | grid | ruby"},"display-internal":{syntax:"table-row-group | table-header-group | table-footer-group | table-row | table-cell | table-column-group | table-column | table-caption | ruby-base | ruby-text | ruby-base-container | ruby-text-container"},"display-legacy":{syntax:"inline-block | inline-list-item | inline-table | inline-flex | inline-grid"},"display-listitem":{syntax:"? && [ flow | flow-root ]? && list-item"},"display-outside":{syntax:"block | inline | run-in"},"drop-shadow()":{syntax:"drop-shadow( {2,3} ? )"},"east-asian-variant-values":{syntax:"[ jis78 | jis83 | jis90 | jis04 | simplified | traditional ]"},"east-asian-width-values":{syntax:"[ full-width | proportional-width ]"},"element()":{syntax:"element( )"},"ellipse()":{syntax:"ellipse( [ {2} ]? [ at ]? )"},"ending-shape":{syntax:"circle | ellipse"},"env()":{syntax:"env( , ? )"},"explicit-track-list":{syntax:"[ ? ]+ ?"},"family-name":{syntax:" | +"},"feature-tag-value":{syntax:" [ | on | off ]?"},"feature-type":{syntax:"@stylistic | @historical-forms | @styleset | @character-variant | @swash | @ornaments | @annotation"},"feature-value-block":{syntax:" '{' '}'"},"feature-value-block-list":{syntax:"+"},"feature-value-declaration":{syntax:": +;"},"feature-value-declaration-list":{syntax:""},"feature-value-name":{syntax:""},"fill-rule":{syntax:"nonzero | evenodd"},"filter-function":{syntax:" | | | | | | | | | "},"filter-function-list":{syntax:"[ | ]+"},"final-bg-layer":{syntax:"<'background-color'> || || [ / ]? || || || || "},"fit-content()":{syntax:"fit-content( [ | ] )"},"fixed-breadth":{syntax:""},"fixed-repeat":{syntax:"repeat( [ ] , [ ? ]+ ? )"},"fixed-size":{syntax:" | minmax( , ) | minmax( , )"},"font-stretch-absolute":{syntax:"normal | ultra-condensed | extra-condensed | condensed | semi-condensed | semi-expanded | expanded | extra-expanded | ultra-expanded | "},"font-variant-css21":{syntax:"[ normal | small-caps ]"},"font-weight-absolute":{syntax:"normal | bold | "},"frequency-percentage":{syntax:" | "},"general-enclosed":{syntax:"[ ) ] | ( )"},"generic-family":{syntax:"serif | sans-serif | cursive | fantasy | monospace"},"generic-name":{syntax:"serif | sans-serif | cursive | fantasy | monospace"},"geometry-box":{syntax:" | fill-box | stroke-box | view-box"},gradient:{syntax:" | | | | "},"grayscale()":{syntax:"grayscale( )"},"grid-line":{syntax:"auto | | [ && ? ] | [ span && [ || ] ]"},"historical-lig-values":{syntax:"[ historical-ligatures | no-historical-ligatures ]"},"hsl()":{syntax:"hsl( [ / ]? ) | hsl( , , , ? )"},"hsla()":{syntax:"hsla( [ / ]? ) | hsla( , , , ? )"},hue:{syntax:" | "},"hue-rotate()":{syntax:"hue-rotate( )"},"id-selector":{syntax:""},image:{syntax:" | | | | | | "},"image()":{syntax:"image( ? [ ? , ? ]! )"},"image-set()":{syntax:"image-set( # )"},"image-set-option":{syntax:"[ | ] "},"image-src":{syntax:" | "},"image-tags":{syntax:"ltr | rtl"},"inflexible-breadth":{syntax:" | | min-content | max-content | auto"},"inset()":{syntax:"inset( {1,4} [ round <'border-radius'> ]? )"},"invert()":{syntax:"invert( )"},"keyframes-name":{syntax:" | "},"keyframe-block":{syntax:"# {\n \n}"},"keyframe-block-list":{syntax:"+"},"keyframe-selector":{syntax:"from | to | "},"leader()":{syntax:"leader( )"},"leader-type":{syntax:"dotted | solid | space | "},"length-percentage":{syntax:" | "},"line-names":{syntax:"'[' * ']'"},"line-name-list":{syntax:"[ | ]+"},"line-style":{syntax:"none | hidden | dotted | dashed | solid | double | groove | ridge | inset | outset"},"line-width":{syntax:" | thin | medium | thick"},"linear-color-hint":{syntax:""},"linear-color-stop":{syntax:" ?"},"linear-gradient()":{syntax:"linear-gradient( [ | to ]? , )"},"mask-layer":{syntax:" || [ / ]? || || || [ | no-clip ] || || "},"mask-position":{syntax:"[ | left | center | right ] [ | top | center | bottom ]?"},"mask-reference":{syntax:"none | | "},"mask-source":{syntax:""},"masking-mode":{syntax:"alpha | luminance | match-source"},"matrix()":{syntax:"matrix( #{6} )"},"matrix3d()":{syntax:"matrix3d( #{16} )"},"max()":{syntax:"max( # )"},"media-and":{syntax:" [ and ]+"},"media-condition":{syntax:" | | | "},"media-condition-without-or":{syntax:" | | "},"media-feature":{syntax:"( [ | | ] )"},"media-in-parens":{syntax:"( ) | | "},"media-not":{syntax:"not "},"media-or":{syntax:" [ or ]+"},"media-query":{syntax:" | [ not | only ]? [ and ]?"},"media-query-list":{syntax:"#"},"media-type":{syntax:""},"mf-boolean":{syntax:""},"mf-name":{syntax:""},"mf-plain":{syntax:" : "},"mf-range":{syntax:" [ '<' | '>' ]? '='? \n| [ '<' | '>' ]? '='? \n| '<' '='? '<' '='? \n| '>' '='? '>' '='? "},"mf-value":{syntax:" | | | "},"min()":{syntax:"min( # )"},"minmax()":{syntax:"minmax( [ | | min-content | max-content | auto ] , [ | | | min-content | max-content | auto ] )"},"named-color":{syntax:"transparent | aliceblue | antiquewhite | aqua | aquamarine | azure | beige | bisque | black | blanchedalmond | blue | blueviolet | brown | burlywood | cadetblue | chartreuse | chocolate | coral | cornflowerblue | cornsilk | crimson | cyan | darkblue | darkcyan | darkgoldenrod | darkgray | darkgreen | darkgrey | darkkhaki | darkmagenta | darkolivegreen | darkorange | darkorchid | darkred | darksalmon | darkseagreen | darkslateblue | darkslategray | darkslategrey | darkturquoise | darkviolet | deeppink | deepskyblue | dimgray | dimgrey | dodgerblue | firebrick | floralwhite | forestgreen | fuchsia | gainsboro | ghostwhite | gold | goldenrod | gray | green | greenyellow | grey | honeydew | hotpink | indianred | indigo | ivory | khaki | lavender | lavenderblush | lawngreen | lemonchiffon | lightblue | lightcoral | lightcyan | lightgoldenrodyellow | lightgray | lightgreen | lightgrey | lightpink | lightsalmon | lightseagreen | lightskyblue | lightslategray | lightslategrey | lightsteelblue | lightyellow | lime | limegreen | linen | magenta | maroon | mediumaquamarine | mediumblue | mediumorchid | mediumpurple | mediumseagreen | mediumslateblue | mediumspringgreen | mediumturquoise | mediumvioletred | midnightblue | mintcream | mistyrose | moccasin | navajowhite | navy | oldlace | olive | olivedrab | orange | orangered | orchid | palegoldenrod | palegreen | paleturquoise | palevioletred | papayawhip | peachpuff | peru | pink | plum | powderblue | purple | rebeccapurple | red | rosybrown | royalblue | saddlebrown | salmon | sandybrown | seagreen | seashell | sienna | silver | skyblue | slateblue | slategray | slategrey | snow | springgreen | steelblue | tan | teal | thistle | tomato | turquoise | violet | wheat | white | whitesmoke | yellow | yellowgreen"},"namespace-prefix":{syntax:""},"ns-prefix":{syntax:"[ | '*' ]? '|'"},"number-percentage":{syntax:" | "},"numeric-figure-values":{syntax:"[ lining-nums | oldstyle-nums ]"},"numeric-fraction-values":{syntax:"[ diagonal-fractions | stacked-fractions ]"},"numeric-spacing-values":{syntax:"[ proportional-nums | tabular-nums ]"},nth:{syntax:" | even | odd"},"opacity()":{syntax:"opacity( [ ] )"},"overflow-position":{syntax:"unsafe | safe"},"outline-radius":{syntax:" | "},"page-body":{syntax:"? [ ; ]? | "},"page-margin-box":{syntax:" '{' '}'"},"page-margin-box-type":{syntax:"@top-left-corner | @top-left | @top-center | @top-right | @top-right-corner | @bottom-left-corner | @bottom-left | @bottom-center | @bottom-right | @bottom-right-corner | @left-top | @left-middle | @left-bottom | @right-top | @right-middle | @right-bottom"},"page-selector-list":{syntax:"[ # ]?"},"page-selector":{syntax:"+ | *"},"path()":{syntax:"path( [ , ]? )"},"paint()":{syntax:"paint( , ? )"},"perspective()":{syntax:"perspective( )"},"polygon()":{syntax:"polygon( ? , [ ]# )"},position:{syntax:"[ [ left | center | right ] || [ top | center | bottom ] | [ left | center | right | ] [ top | center | bottom | ]? | [ [ left | right ] ] && [ [ top | bottom ] ] ]"},"pseudo-class-selector":{syntax:"':' | ':' ')'"},"pseudo-element-selector":{syntax:"':' "},"pseudo-page":{syntax:": [ left | right | first | blank ]"},quote:{syntax:"open-quote | close-quote | no-open-quote | no-close-quote"},"radial-gradient()":{syntax:"radial-gradient( [ || ]? [ at ]? , )"},"relative-selector":{syntax:"? "},"relative-selector-list":{syntax:"#"},"relative-size":{syntax:"larger | smaller"},"repeat-style":{syntax:"repeat-x | repeat-y | [ repeat | space | round | no-repeat ]{1,2}"},"repeating-linear-gradient()":{syntax:"repeating-linear-gradient( [ | to ]? , )"},"repeating-radial-gradient()":{syntax:"repeating-radial-gradient( [ || ]? [ at ]? , )"},"rgb()":{syntax:"rgb( {3} [ / ]? ) | rgb( {3} [ / ]? ) | rgb( #{3} , ? ) | rgb( #{3} , ? )"},"rgba()":{syntax:"rgba( {3} [ / ]? ) | rgba( {3} [ / ]? ) | rgba( #{3} , ? ) | rgba( #{3} , ? )"},"rotate()":{syntax:"rotate( [ | ] )"},"rotate3d()":{syntax:"rotate3d( , , , [ | ] )"},"rotateX()":{syntax:"rotateX( [ | ] )"},"rotateY()":{syntax:"rotateY( [ | ] )"},"rotateZ()":{syntax:"rotateZ( [ | ] )"},"saturate()":{syntax:"saturate( )"},"scale()":{syntax:"scale( , ? )"},"scale3d()":{syntax:"scale3d( , , )"},"scaleX()":{syntax:"scaleX( )"},"scaleY()":{syntax:"scaleY( )"},"scaleZ()":{syntax:"scaleZ( )"},"self-position":{syntax:"center | start | end | self-start | self-end | flex-start | flex-end"},"shape-radius":{syntax:" | closest-side | farthest-side"},"skew()":{syntax:"skew( [ | ] , [ | ]? )"},"skewX()":{syntax:"skewX( [ | ] )"},"skewY()":{syntax:"skewY( [ | ] )"},"sepia()":{syntax:"sepia( )"},shadow:{syntax:"inset? && {2,4} && ?"},"shadow-t":{syntax:"[ {2,3} && ? ]"},shape:{syntax:"rect(, , , )"},"shape-box":{syntax:" | margin-box"},"side-or-corner":{syntax:"[ left | right ] || [ top | bottom ]"},"single-animation":{syntax:"