Browse Source

initial commit

master
aswinsundar 4 years ago
commit
945c496cf1
  1. 33
      .gitignore
  2. 12
      .jpb/persistence-units.xml
  3. 316
      mvnw
  4. 188
      mvnw.cmd
  5. 79
      pom.xml
  6. 23
      src/main/java/com/asset/AssetDetailsApplication.java
  7. 13
      src/main/java/com/asset/ServletInitializer.java
  8. 153
      src/main/java/com/asset/api/apiRestController.java
  9. 60
      src/main/java/com/asset/asset/Asset.java
  10. 105
      src/main/java/com/asset/asset/AssetController.java
  11. 23
      src/main/java/com/asset/asset/AssetRepository.java
  12. 113
      src/main/java/com/asset/asset/AssetRestController.java
  13. 40
      src/main/java/com/asset/complaint/Complaint.java
  14. 71
      src/main/java/com/asset/complaint/ComplaintController.java
  15. 31
      src/main/java/com/asset/complaint/ComplaintQuestion.java
  16. 9
      src/main/java/com/asset/complaint/ComplaintQuestionRepository.java
  17. 10
      src/main/java/com/asset/complaint/ComplaintRepository.java
  18. 559
      src/main/java/com/asset/complaint/ComplaintRestController.java
  19. 51
      src/main/java/com/asset/complaint/ComplaintService.java
  20. 93
      src/main/java/com/asset/feedback/Feedback.java
  21. 291
      src/main/java/com/asset/feedback/FeedbackController.java
  22. 43
      src/main/java/com/asset/feedback/FeedbackQuestion.java
  23. 11
      src/main/java/com/asset/feedback/FeedbackQuestionRepository.java
  24. 10
      src/main/java/com/asset/feedback/FeedbackRepository.java
  25. 22
      src/main/java/com/asset/feedback/FeedbackRestController.java
  26. 82
      src/main/java/com/asset/login/LoginController.java
  27. 15
      src/main/java/com/asset/login/UserRepository.java
  28. 35
      src/main/java/com/asset/login/Users.java
  29. 43
      src/main/java/com/asset/master/Master.java
  30. 280
      src/main/java/com/asset/master/MasterController.java
  31. 31
      src/main/java/com/asset/master/MasterParameters.java
  32. 16
      src/main/java/com/asset/master/MasterParametersRepository.java
  33. 51
      src/main/java/com/asset/master/MasterQuestion.java
  34. 25
      src/main/java/com/asset/master/MasterQuestionRepository.java
  35. 23
      src/main/java/com/asset/master/MasterRepository.java
  36. 46
      src/main/java/com/asset/master/MasterRestController.java
  37. 36
      src/main/java/com/asset/master/MasterView.java
  38. 16
      src/main/java/com/asset/master/MasterViewRepository.java
  39. 11
      src/main/resources/application.properties
  40. 153
      src/main/resources/static/assets/css/local.css
  41. 1260
      src/main/resources/static/assets/css/style.css
  42. BIN
      src/main/resources/static/assets/img/Chennai_Corporation_Logo.png
  43. BIN
      src/main/resources/static/assets/img/Loop-twinkle.gif
  44. BIN
      src/main/resources/static/assets/img/Ripon_Building.gif
  45. BIN
      src/main/resources/static/assets/img/apple-touch-icon.png
  46. BIN
      src/main/resources/static/assets/img/card.jpg
  47. BIN
      src/main/resources/static/assets/img/favicon.png
  48. BIN
      src/main/resources/static/assets/img/favicon_old.png
  49. BIN
      src/main/resources/static/assets/img/greater-chennai-corporation.jpg
  50. BIN
      src/main/resources/static/assets/img/greater-chennai-corporation.png
  51. BIN
      src/main/resources/static/assets/img/logo.png
  52. BIN
      src/main/resources/static/assets/img/logo_old.png
  53. BIN
      src/main/resources/static/assets/img/messages-1.jpg
  54. BIN
      src/main/resources/static/assets/img/messages-2.jpg
  55. BIN
      src/main/resources/static/assets/img/messages-3.jpg
  56. BIN
      src/main/resources/static/assets/img/news-1.jpg
  57. BIN
      src/main/resources/static/assets/img/news-2.jpg
  58. BIN
      src/main/resources/static/assets/img/news-3.jpg
  59. BIN
      src/main/resources/static/assets/img/news-4.jpg
  60. BIN
      src/main/resources/static/assets/img/news-5.jpg
  61. 1
      src/main/resources/static/assets/img/not-found.svg
  62. BIN
      src/main/resources/static/assets/img/product-1.jpg
  63. BIN
      src/main/resources/static/assets/img/product-2.jpg
  64. BIN
      src/main/resources/static/assets/img/product-3.jpg
  65. BIN
      src/main/resources/static/assets/img/product-4.jpg
  66. BIN
      src/main/resources/static/assets/img/product-5.jpg
  67. BIN
      src/main/resources/static/assets/img/profile-img.jpg
  68. BIN
      src/main/resources/static/assets/img/slides-1.jpg
  69. BIN
      src/main/resources/static/assets/img/slides-2.jpg
  70. BIN
      src/main/resources/static/assets/img/slides-3.jpg
  71. BIN
      src/main/resources/static/assets/img/tamilnadu-logo.png
  72. BIN
      src/main/resources/static/assets/img/user-profile.png
  73. 90
      src/main/resources/static/assets/js/jquery.qrcode.min.js
  74. 213
      src/main/resources/static/assets/js/local.js
  75. 315
      src/main/resources/static/assets/js/main.js
  76. 202
      src/main/resources/static/assets/json/GCC_DIVISION.geojson
  77. 23
      src/main/resources/static/assets/json/GCC_ZONE.geojson
  78. 1
      src/main/resources/static/assets/scss/Readme.txt
  79. 14
      src/main/resources/static/assets/vendor/apexcharts/apexcharts.min.js
  80. 63
      src/main/resources/static/assets/vendor/apexcharts/locales/ar.json
  81. 55
      src/main/resources/static/assets/vendor/apexcharts/locales/ca.json
  82. 55
      src/main/resources/static/assets/vendor/apexcharts/locales/cs.json
  83. 55
      src/main/resources/static/assets/vendor/apexcharts/locales/de.json
  84. 55
      src/main/resources/static/assets/vendor/apexcharts/locales/el.json
  85. 55
      src/main/resources/static/assets/vendor/apexcharts/locales/en.json
  86. 55
      src/main/resources/static/assets/vendor/apexcharts/locales/es.json
  87. 63
      src/main/resources/static/assets/vendor/apexcharts/locales/et.json
  88. 55
      src/main/resources/static/assets/vendor/apexcharts/locales/fa.json
  89. 55
      src/main/resources/static/assets/vendor/apexcharts/locales/fi.json
  90. 55
      src/main/resources/static/assets/vendor/apexcharts/locales/fr.json
  91. 55
      src/main/resources/static/assets/vendor/apexcharts/locales/he.json
  92. 55
      src/main/resources/static/assets/vendor/apexcharts/locales/hi.json
  93. 55
      src/main/resources/static/assets/vendor/apexcharts/locales/hr.json
  94. 64
      src/main/resources/static/assets/vendor/apexcharts/locales/hu.json
  95. 55
      src/main/resources/static/assets/vendor/apexcharts/locales/hy.json
  96. 47
      src/main/resources/static/assets/vendor/apexcharts/locales/id.json
  97. 55
      src/main/resources/static/assets/vendor/apexcharts/locales/it.json
  98. 55
      src/main/resources/static/assets/vendor/apexcharts/locales/ja.json
  99. 55
      src/main/resources/static/assets/vendor/apexcharts/locales/ka.json
  100. 55
      src/main/resources/static/assets/vendor/apexcharts/locales/ko.json

33
.gitignore

@ -0,0 +1,33 @@
HELP.md
target/
!.mvn/wrapper/maven-wrapper.jar
!**/src/main/**/target/
!**/src/test/**/target/
### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache
### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr
### NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
build/
!**/src/main/**/build/
!**/src/test/**/build/
### VS Code ###
.vscode/

12
.jpb/persistence-units.xml

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="PersistenceUnitSettings">
<persistence-units>
<persistence-unit name="Default">
<packages>
<package value="com.asset" />
</packages>
</persistence-unit>
</persistence-units>
</component>
</project>

316
mvnw

@ -0,0 +1,316 @@
#!/bin/sh
# ----------------------------------------------------------------------------
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
# ----------------------------------------------------------------------------
# ----------------------------------------------------------------------------
# Maven Start Up Batch script
#
# Required ENV vars:
# ------------------
# JAVA_HOME - location of a JDK home dir
#
# Optional ENV vars
# -----------------
# M2_HOME - location of maven2's installed home dir
# MAVEN_OPTS - parameters passed to the Java VM when running Maven
# e.g. to debug Maven itself, use
# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
# MAVEN_SKIP_RC - flag to disable loading of mavenrc files
# ----------------------------------------------------------------------------
if [ -z "$MAVEN_SKIP_RC" ] ; then
if [ -f /usr/local/etc/mavenrc ] ; then
. /usr/local/etc/mavenrc
fi
if [ -f /etc/mavenrc ] ; then
. /etc/mavenrc
fi
if [ -f "$HOME/.mavenrc" ] ; then
. "$HOME/.mavenrc"
fi
fi
# OS specific support. $var _must_ be set to either true or false.
cygwin=false;
darwin=false;
mingw=false
case "`uname`" in
CYGWIN*) cygwin=true ;;
MINGW*) mingw=true;;
Darwin*) darwin=true
# Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home
# See https://developer.apple.com/library/mac/qa/qa1170/_index.html
if [ -z "$JAVA_HOME" ]; then
if [ -x "/usr/libexec/java_home" ]; then
export JAVA_HOME="`/usr/libexec/java_home`"
else
export JAVA_HOME="/Library/Java/Home"
fi
fi
;;
esac
if [ -z "$JAVA_HOME" ] ; then
if [ -r /etc/gentoo-release ] ; then
JAVA_HOME=`java-config --jre-home`
fi
fi
if [ -z "$M2_HOME" ] ; then
## resolve links - $0 may be a link to maven's home
PRG="$0"
# need this for relative symlinks
while [ -h "$PRG" ] ; do
ls=`ls -ld "$PRG"`
link=`expr "$ls" : '.*-> \(.*\)$'`
if expr "$link" : '/.*' > /dev/null; then
PRG="$link"
else
PRG="`dirname "$PRG"`/$link"
fi
done
saveddir=`pwd`
M2_HOME=`dirname "$PRG"`/..
# make it fully qualified
M2_HOME=`cd "$M2_HOME" && pwd`
cd "$saveddir"
# echo Using m2 at $M2_HOME
fi
# For Cygwin, ensure paths are in UNIX format before anything is touched
if $cygwin ; then
[ -n "$M2_HOME" ] &&
M2_HOME=`cygpath --unix "$M2_HOME"`
[ -n "$JAVA_HOME" ] &&
JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
[ -n "$CLASSPATH" ] &&
CLASSPATH=`cygpath --path --unix "$CLASSPATH"`
fi
# For Mingw, ensure paths are in UNIX format before anything is touched
if $mingw ; then
[ -n "$M2_HOME" ] &&
M2_HOME="`(cd "$M2_HOME"; pwd)`"
[ -n "$JAVA_HOME" ] &&
JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`"
fi
if [ -z "$JAVA_HOME" ]; then
javaExecutable="`which javac`"
if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then
# readlink(1) is not available as standard on Solaris 10.
readLink=`which readlink`
if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then
if $darwin ; then
javaHome="`dirname \"$javaExecutable\"`"
javaExecutable="`cd \"$javaHome\" && pwd -P`/javac"
else
javaExecutable="`readlink -f \"$javaExecutable\"`"
fi
javaHome="`dirname \"$javaExecutable\"`"
javaHome=`expr "$javaHome" : '\(.*\)/bin'`
JAVA_HOME="$javaHome"
export JAVA_HOME
fi
fi
fi
if [ -z "$JAVACMD" ] ; then
if [ -n "$JAVA_HOME" ] ; then
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
# IBM's JDK on AIX uses strange locations for the executables
JAVACMD="$JAVA_HOME/jre/sh/java"
else
JAVACMD="$JAVA_HOME/bin/java"
fi
else
JAVACMD="`\\unset -f command; \\command -v java`"
fi
fi
if [ ! -x "$JAVACMD" ] ; then
echo "Error: JAVA_HOME is not defined correctly." >&2
echo " We cannot execute $JAVACMD" >&2
exit 1
fi
if [ -z "$JAVA_HOME" ] ; then
echo "Warning: JAVA_HOME environment variable is not set."
fi
CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher
# traverses directory structure from process work directory to filesystem root
# first directory with .mvn subdirectory is considered project base directory
find_maven_basedir() {
if [ -z "$1" ]
then
echo "Path not specified to find_maven_basedir"
return 1
fi
basedir="$1"
wdir="$1"
while [ "$wdir" != '/' ] ; do
if [ -d "$wdir"/.mvn ] ; then
basedir=$wdir
break
fi
# workaround for JBEAP-8937 (on Solaris 10/Sparc)
if [ -d "${wdir}" ]; then
wdir=`cd "$wdir/.."; pwd`
fi
# end of workaround
done
echo "${basedir}"
}
# concatenates all lines of a file
concat_lines() {
if [ -f "$1" ]; then
echo "$(tr -s '\n' ' ' < "$1")"
fi
}
BASE_DIR=`find_maven_basedir "$(pwd)"`
if [ -z "$BASE_DIR" ]; then
exit 1;
fi
##########################################################################################
# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
# This allows using the maven wrapper in projects that prohibit checking in binary data.
##########################################################################################
if [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then
if [ "$MVNW_VERBOSE" = true ]; then
echo "Found .mvn/wrapper/maven-wrapper.jar"
fi
else
if [ "$MVNW_VERBOSE" = true ]; then
echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..."
fi
if [ -n "$MVNW_REPOURL" ]; then
jarUrl="$MVNW_REPOURL/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar"
else
jarUrl="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar"
fi
while IFS="=" read key value; do
case "$key" in (wrapperUrl) jarUrl="$value"; break ;;
esac
done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties"
if [ "$MVNW_VERBOSE" = true ]; then
echo "Downloading from: $jarUrl"
fi
wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar"
if $cygwin; then
wrapperJarPath=`cygpath --path --windows "$wrapperJarPath"`
fi
if command -v wget > /dev/null; then
if [ "$MVNW_VERBOSE" = true ]; then
echo "Found wget ... using wget"
fi
if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then
wget "$jarUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath"
else
wget --http-user=$MVNW_USERNAME --http-password=$MVNW_PASSWORD "$jarUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath"
fi
elif command -v curl > /dev/null; then
if [ "$MVNW_VERBOSE" = true ]; then
echo "Found curl ... using curl"
fi
if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then
curl -o "$wrapperJarPath" "$jarUrl" -f
else
curl --user $MVNW_USERNAME:$MVNW_PASSWORD -o "$wrapperJarPath" "$jarUrl" -f
fi
else
if [ "$MVNW_VERBOSE" = true ]; then
echo "Falling back to using Java to download"
fi
javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java"
# For Cygwin, switch paths to Windows format before running javac
if $cygwin; then
javaClass=`cygpath --path --windows "$javaClass"`
fi
if [ -e "$javaClass" ]; then
if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then
if [ "$MVNW_VERBOSE" = true ]; then
echo " - Compiling MavenWrapperDownloader.java ..."
fi
# Compiling the Java class
("$JAVA_HOME/bin/javac" "$javaClass")
fi
if [ -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then
# Running the downloader
if [ "$MVNW_VERBOSE" = true ]; then
echo " - Running MavenWrapperDownloader.java ..."
fi
("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR")
fi
fi
fi
fi
##########################################################################################
# End of extension
##########################################################################################
export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"}
if [ "$MVNW_VERBOSE" = true ]; then
echo $MAVEN_PROJECTBASEDIR
fi
MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS"
# For Cygwin, switch paths to Windows format before running java
if $cygwin; then
[ -n "$M2_HOME" ] &&
M2_HOME=`cygpath --path --windows "$M2_HOME"`
[ -n "$JAVA_HOME" ] &&
JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"`
[ -n "$CLASSPATH" ] &&
CLASSPATH=`cygpath --path --windows "$CLASSPATH"`
[ -n "$MAVEN_PROJECTBASEDIR" ] &&
MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"`
fi
# Provide a "standardized" way to retrieve the CLI args that will
# work with both Windows and non-Windows executions.
MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@"
export MAVEN_CMD_LINE_ARGS
WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
exec "$JAVACMD" \
$MAVEN_OPTS \
$MAVEN_DEBUG_OPTS \
-classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \
"-Dmaven.home=${M2_HOME}" \
"-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \
${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@"

188
mvnw.cmd

@ -0,0 +1,188 @@
@REM ----------------------------------------------------------------------------
@REM Licensed to the Apache Software Foundation (ASF) under one
@REM or more contributor license agreements. See the NOTICE file
@REM distributed with this work for additional information
@REM regarding copyright ownership. The ASF licenses this file
@REM to you under the Apache License, Version 2.0 (the
@REM "License"); you may not use this file except in compliance
@REM with the License. You may obtain a copy of the License at
@REM
@REM https://www.apache.org/licenses/LICENSE-2.0
@REM
@REM Unless required by applicable law or agreed to in writing,
@REM software distributed under the License is distributed on an
@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
@REM KIND, either express or implied. See the License for the
@REM specific language governing permissions and limitations
@REM under the License.
@REM ----------------------------------------------------------------------------
@REM ----------------------------------------------------------------------------
@REM Maven Start Up Batch script
@REM
@REM Required ENV vars:
@REM JAVA_HOME - location of a JDK home dir
@REM
@REM Optional ENV vars
@REM M2_HOME - location of maven2's installed home dir
@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands
@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a keystroke before ending
@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven
@REM e.g. to debug Maven itself, use
@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files
@REM ----------------------------------------------------------------------------
@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on'
@echo off
@REM set title of command window
title %0
@REM enable echoing by setting MAVEN_BATCH_ECHO to 'on'
@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO%
@REM set %HOME% to equivalent of $HOME
if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%")
@REM Execute a user defined script before this one
if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre
@REM check for pre script, once with legacy .bat ending and once with .cmd ending
if exist "%USERPROFILE%\mavenrc_pre.bat" call "%USERPROFILE%\mavenrc_pre.bat" %*
if exist "%USERPROFILE%\mavenrc_pre.cmd" call "%USERPROFILE%\mavenrc_pre.cmd" %*
:skipRcPre
@setlocal
set ERROR_CODE=0
@REM To isolate internal variables from possible post scripts, we use another setlocal
@setlocal
@REM ==== START VALIDATION ====
if not "%JAVA_HOME%" == "" goto OkJHome
echo.
echo Error: JAVA_HOME not found in your environment. >&2
echo Please set the JAVA_HOME variable in your environment to match the >&2
echo location of your Java installation. >&2
echo.
goto error
:OkJHome
if exist "%JAVA_HOME%\bin\java.exe" goto init
echo.
echo Error: JAVA_HOME is set to an invalid directory. >&2
echo JAVA_HOME = "%JAVA_HOME%" >&2
echo Please set the JAVA_HOME variable in your environment to match the >&2
echo location of your Java installation. >&2
echo.
goto error
@REM ==== END VALIDATION ====
:init
@REM Find the project base dir, i.e. the directory that contains the folder ".mvn".
@REM Fallback to current working directory if not found.
set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR%
IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir
set EXEC_DIR=%CD%
set WDIR=%EXEC_DIR%
:findBaseDir
IF EXIST "%WDIR%"\.mvn goto baseDirFound
cd ..
IF "%WDIR%"=="%CD%" goto baseDirNotFound
set WDIR=%CD%
goto findBaseDir
:baseDirFound
set MAVEN_PROJECTBASEDIR=%WDIR%
cd "%EXEC_DIR%"
goto endDetectBaseDir
:baseDirNotFound
set MAVEN_PROJECTBASEDIR=%EXEC_DIR%
cd "%EXEC_DIR%"
:endDetectBaseDir
IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig
@setlocal EnableExtensions EnableDelayedExpansion
for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a
@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS%
:endReadAdditionalConfig
SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe"
set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar"
set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar"
FOR /F "usebackq tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO (
IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B
)
@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
@REM This allows using the maven wrapper in projects that prohibit checking in binary data.
if exist %WRAPPER_JAR% (
if "%MVNW_VERBOSE%" == "true" (
echo Found %WRAPPER_JAR%
)
) else (
if not "%MVNW_REPOURL%" == "" (
SET DOWNLOAD_URL="%MVNW_REPOURL%/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar"
)
if "%MVNW_VERBOSE%" == "true" (
echo Couldn't find %WRAPPER_JAR%, downloading it ...
echo Downloading from: %DOWNLOAD_URL%
)
powershell -Command "&{"^
"$webclient = new-object System.Net.WebClient;"^
"if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^
"$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^
"}"^
"[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')"^
"}"
if "%MVNW_VERBOSE%" == "true" (
echo Finished downloading %WRAPPER_JAR%
)
)
@REM End of extension
@REM Provide a "standardized" way to retrieve the CLI args that will
@REM work with both Windows and non-Windows executions.
set MAVEN_CMD_LINE_ARGS=%*
%MAVEN_JAVA_EXE% ^
%JVM_CONFIG_MAVEN_PROPS% ^
%MAVEN_OPTS% ^
%MAVEN_DEBUG_OPTS% ^
-classpath %WRAPPER_JAR% ^
"-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" ^
%WRAPPER_LAUNCHER% %MAVEN_CONFIG% %*
if ERRORLEVEL 1 goto error
goto end
:error
set ERROR_CODE=1
:end
@endlocal & set ERROR_CODE=%ERROR_CODE%
if not "%MAVEN_SKIP_RC%"=="" goto skipRcPost
@REM check for post script, once with legacy .bat ending and once with .cmd ending
if exist "%USERPROFILE%\mavenrc_post.bat" call "%USERPROFILE%\mavenrc_post.bat"
if exist "%USERPROFILE%\mavenrc_post.cmd" call "%USERPROFILE%\mavenrc_post.cmd"
:skipRcPost
@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on'
if "%MAVEN_BATCH_PAUSE%"=="on" pause
if "%MAVEN_TERMINATE_CMD%"=="on" exit %ERROR_CODE%
cmd /C exit /B %ERROR_CODE%

79
pom.xml

@ -0,0 +1,79 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.6</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.asset</groupId>
<artifactId>asset_details</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<name>asset_details</name>
<description>Project for Asset Detail Feedback</description>
<properties>
<java.version>1.8</java.version>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>javase</artifactId>
<version>3.4.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.31</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20220924</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
<defaultGoal>package</defaultGoal>
</build>
</project>

23
src/main/java/com/asset/AssetDetailsApplication.java

@ -0,0 +1,23 @@
package com.asset;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@SpringBootApplication
@EnableAutoConfiguration
public class AssetDetailsApplication implements WebMvcConfigurer {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry){
registry.addResourceHandler("/**")
.addResourceLocations("classpath:/static/")
.setCachePeriod(0);
}
public static void main(String[] args) {
SpringApplication.run(AssetDetailsApplication.class, args);
}
}

13
src/main/java/com/asset/ServletInitializer.java

@ -0,0 +1,13 @@
package com.asset;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
public class ServletInitializer extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(AssetDetailsApplication.class);
}
}

153
src/main/java/com/asset/api/apiRestController.java

@ -0,0 +1,153 @@
package com.asset.api;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.ResponseEntity;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
import com.asset.complaint.ComplaintRepository;
import com.asset.master.Master;
import com.asset.master.MasterRepository;
@RestController
@RequestMapping(value = "/qr-feedback/api")
public class apiRestController {
@GetMapping(value = "/getZoneNo")
public String getZoneNo() {
String urlString = "https://erp.chennaicorporation.gov.in/pgr/external/mobileservice?serviceId=getZones";
//System.out.print("\n urlString---: " + urlString);
ResponseEntity<String> response = null;
RestTemplate restTemplate = new RestTemplate();
String bodyMessage = "";
HttpHeaders headers = new HttpHeaders();
try {
HttpEntity<String> postData = new HttpEntity<String>(headers);
response = restTemplate.exchange(urlString, HttpMethod.POST, postData, String.class);
bodyMessage = response.getBody();
//System.out.println("BodyMessage" + bodyMessage);
} catch (Exception e) {
e.printStackTrace();
//System.out.print("\n ERROR---: " + e);
bodyMessage = "Error";
}
return bodyMessage;
}
@GetMapping(value = "/getDiv")
public String getDiv(@RequestParam String zoneId) {
//System.out.println("zoneId---: " + zoneId);
String urlString = "https://erp.chennaicorporation.gov.in/pgr/external/mobileservice?serviceId=getWards&Zoneid="+zoneId+"";
//System.out.println("urlString---: " + urlString);
ResponseEntity<String> response = null;
RestTemplate restTemplate = new RestTemplate();
String bodyMessage = "";
HttpHeaders headers = new HttpHeaders();
try {
HttpEntity<String> postData = new HttpEntity<String>(headers);
response = restTemplate.exchange(urlString, HttpMethod.POST, postData, String.class);
bodyMessage = response.getBody();
//System.out.println("bodyMessage" + bodyMessage);
} catch (Exception e) {
e.printStackTrace();
//System.out.print("\n ERROR---: " + e);
bodyMessage = "Error";
}
return bodyMessage;
}
@GetMapping(value = "/getArea")
public String getArea(@RequestParam String divId) {
System.out.println("divId---: " + divId);
String urlString = "https://erp.chennaicorporation.gov.in/pgr/external/mobileservice?serviceId=getAreas&WardId="+divId+"";
//System.out.println("urlString---: " + urlString);
ResponseEntity<String> response = null;
RestTemplate restTemplate = new RestTemplate();
String bodyMessage = "";
HttpHeaders headers = new HttpHeaders();
try {
HttpEntity<String> postData = new HttpEntity<String>(headers);
response = restTemplate.exchange(urlString, HttpMethod.POST, postData, String.class);
bodyMessage = response.getBody();
//System.out.println("bodyMessage" + bodyMessage);
} catch (Exception e) {
e.printStackTrace();
//System.out.print("\n ERROR---: " + e);
bodyMessage = "Error";
}
return bodyMessage;
}
@GetMapping(value = "/getLocation")
public String getLocation(@RequestParam String areaId) {
//System.out.println("areaId---: " + areaId);
String urlString = "https://erp.chennaicorporation.gov.in/pgr/external/mobileservice?serviceId=getLocation&AreaId="+areaId+"";
//System.out.println("urlString---: " + urlString);
ResponseEntity<String> response = null;
RestTemplate restTemplate = new RestTemplate();
String bodyMessage = "";
HttpHeaders headers = new HttpHeaders();
try {
HttpEntity<String> postData = new HttpEntity<String>(headers);
response = restTemplate.exchange(urlString, HttpMethod.POST, postData, String.class);
bodyMessage = response.getBody();
//System.out.println("bodyMessage" + bodyMessage);
} catch (Exception e) {
e.printStackTrace();
//System.out.print("\n ERROR---: " + e);
bodyMessage = "Error";
}
return bodyMessage;
}
@GetMapping(value = "/getStreet")
public String getStreet(@RequestParam String locationId) {
System.out.println("areaId---: " + locationId);
String urlString = "https://erp.chennaicorporation.gov.in/pgr/external/mobileservice?serviceId=getStreet&LocationId="+locationId+"";
//System.out.println("urlString---: " + urlString);
ResponseEntity<String> response = null;
RestTemplate restTemplate = new RestTemplate();
String bodyMessage = "";
HttpHeaders headers = new HttpHeaders();
try {
HttpEntity<String> postData = new HttpEntity<String>(headers);
response = restTemplate.exchange(urlString, HttpMethod.POST, postData, String.class);
bodyMessage = response.getBody();
//System.out.println("bodyMessage" + bodyMessage);
} catch (Exception e) {
e.printStackTrace();
//System.out.print("\n ERROR---: " + e);
bodyMessage = "Error";
}
return bodyMessage;
}
}

60
src/main/java/com/asset/asset/Asset.java

@ -0,0 +1,60 @@
package com.asset.asset;
import javax.persistence.*;
import lombok.Data;
@Entity
@Data
@Table(name = "asset_detail")
public class Asset {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name="asset_id", nullable=false)
public Integer assetId;
public String qrcodestring;
@Lob
private byte[] qrcodeinbytes;
@Column(name="zone_no")
public String zoneNo;
@Column(name="qrcode")
public String qrcode;
@Column(name="div_no")
public String divNo;
@Column(name="asset_type")
public String assetType;
@Column(name="asset_name")
public String assetName;
@Column(name="asset_address")
public String assetAddress;
@Column(name="asset_opening_time")
public String assetOpeningTime;
@Column(name="asset_closing_time")
public String assetClosingTime;
@Column(name="asset_area")
public String assetArea;
@Column(name="asset_locality")
public String assetLocality;
@Column(name="asset_street")
public String assetStreet;
@Column(name="asset_file")
public String assetFile;
@Column(name="asset_latitude")
public String assetLatitude;
@Column(name="asset_longitude")
public String assetLongitude;
}

105
src/main/java/com/asset/asset/AssetController.java

@ -0,0 +1,105 @@
package com.asset.asset;
import java.util.List;
import java.util.Optional;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.web.PageableDefault;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
@Controller
@RequestMapping(value = "/qr-feedback")
@SessionAttributes({"user"})
public class AssetController {
@Autowired
AssetRepository assetRepo;
@GetMapping(value = "entry")
public String assetEntry(Model model) {
model.addAttribute("assetEntryObj", new Asset());
List<Asset> obj = assetRepo.findAll();
model.addAttribute("assetObj", obj);
return "asset-detail-entry";
}
@PostMapping(value = "/entry/submit", name = "submits")
public String assetEntrySubmit(@ModelAttribute Asset asset) {
System.out.println("obj---: TEST");
Asset obj = new Asset();
obj.setAssetId(asset.getAssetId());
obj.setZoneNo(asset.getZoneNo());
obj.setDivNo(asset.getDivNo());
obj.setAssetType(asset.getAssetType());
obj.setAssetName(asset.getAssetName());
obj.setAssetAddress(asset.getAssetAddress());
obj.setAssetOpeningTime(asset.getAssetOpeningTime());
obj.setAssetClosingTime(asset.getAssetClosingTime());
obj.setAssetArea(asset.getAssetArea());
obj.setAssetLocality(asset.getAssetLocality());
obj.setAssetStreet(asset.getAssetStreet());
obj.setAssetFile(asset.getAssetFile());
obj.setAssetLatitude(asset.getAssetLatitude());
obj.setAssetLongitude(asset.getAssetLongitude());
System.out.println("obj---: "+ obj);
assetRepo.saveAndFlush(obj);
return "redirect:/qr-feedback/entry";
}
/*
* @RequestMapping(value = "/list", method = RequestMethod.GET) public String
* assetList() { // System.out.println("TEST NOW"); return "asset-detail-list";
* }
*/
@GetMapping(value = "/list")
public String assetList(Model model, @PageableDefault(size = 1000) Pageable pageable) {
Page<Asset> obj = assetRepo.findAll(pageable);
model.addAttribute("page", obj);
model.addAttribute("assetSearchObj", new Asset());
System.out.println("OBJ---:"+obj);
return "asset-detail-list";
}
@GetMapping(value = "/list/edit/{assetId}")
public String proAssetClientListGet(@PathVariable Integer assetId, Model model) {
new Asset();
Optional<Asset> asset = assetRepo.findById(assetId);
Asset assetObj = asset.get();
model.addAttribute("assetEntryObj", assetObj);
System.out.println("assetObj---:"+assetObj);
return "asset-detail-entry";
}
@GetMapping(value = "/list/search")
public String assetListSearch(Model model,@PageableDefault(size = 1000) Pageable pageable) {
Page<Asset> obj = assetRepo.findAll(pageable);
model.addAttribute("page", obj);
model.addAttribute("assetSearchObj", new Asset());
System.out.println("OBJ---:"+obj);
return "asset-detail-list";
}
}

23
src/main/java/com/asset/asset/AssetRepository.java

@ -0,0 +1,23 @@
package com.asset.asset;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public interface AssetRepository extends JpaRepository<Asset, Integer> {
/*
* @Query(
* value="SELECT a.assetId, a.assetName, b.assetCharacteristic, b.assetQuestionType, \r\n"
* +"b.assetQuestion FROM Asset a INNER JOIN AssetDetail b ON a.assetId=b.assetId"
* ,nativeQuery = false) public List<Asset> findAllAssetDetail();
*/
/*public List findAllAssetDetail();*/
@Query(value="SELECT asset_id, asset_name FROM asset_master", nativeQuery=true)
public List<Asset> findAllAssetName();
}

113
src/main/java/com/asset/asset/AssetRestController.java

@ -0,0 +1,113 @@
package com.asset.asset;
import java.math.BigDecimal;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import org.json.JSONObject;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
@RestController
@RequestMapping(value = "/qr-feedback")
public class AssetRestController {
@RequestMapping(value = "/entry/map", method = RequestMethod.GET)
public Map<String, String> assetMap(HttpServletRequest request, @RequestParam String locationName) {
String sSearchLocation ="";
//String sTmp = request.getParameter("locname");
String sTmp = locationName;
String sLATITUDE = "";
String sLONGITUDE = "";
if ( sTmp != null && !sTmp.equals("") ) sSearchLocation = sTmp;
//System.out.println("sSearchLocation---: "+ sSearchLocation);
String str=request.getParameter("serviceinput");
if (str==null )
{
}
else
{
JSONObject lg = new JSONObject(str);
//System.out.println("latitude : "+ lg.get("latitude"));
//System.out.println("longitude : "+ lg.get("longitude"));
sLATITUDE =""+ (Double)lg.get("latitude");
sLONGITUDE = ""+ (Double)lg.get("longitude");
}
if ( (sLATITUDE==null || sLATITUDE.equals("")) && ( sLONGITUDE==null || sLONGITUDE.equals("") ) )
{
if (!sSearchLocation.equals("")) {
try{
String urlString ="http://10.1.0.122/geocode_api.php?address="+ URLEncoder.encode( sSearchLocation, "UTF-8" );
//System.out.println(urlString);
ResponseEntity<String> response = null;
RestTemplate restTemplate = new RestTemplate();
String bodyMessage = "";
HttpHeaders headers = new HttpHeaders();
try {
HttpEntity<String> postData = new HttpEntity<String>(headers);
response = restTemplate.exchange(urlString, HttpMethod.POST, postData, String.class);
bodyMessage = response.getBody();
} catch (Exception e) {
e.printStackTrace();
bodyMessage = "Error";
}
JSONObject object = new JSONObject(bodyMessage);
if ( (Boolean)object.get("status"))
{
JSONObject dataObject = (JSONObject) object.get("data");
//System.out.println("latitude 1 : "+ dataObject.get("latitude"));
//System.out.println("longitude 1 : "+ dataObject.get("longitude"));
sLATITUDE = ""+ (BigDecimal)dataObject.get("latitude");
sLONGITUDE = ""+ (BigDecimal)dataObject.get("longitude");
}
}
catch(Exception e)
{ System.out.println(e); }
}
else if(request.getParameter("latitude")!=null && request.getParameter("longitude")!=null)
{
sLATITUDE = request.getParameter("latitude");
sLONGITUDE = request.getParameter("longitude");
}
else
{
sLATITUDE = "13.0827";
sLONGITUDE = "80.2707";
}
}
if ( sLATITUDE == null || sLATITUDE.equals("") || sLONGITUDE == null || sLONGITUDE.equals("") )
{
System.out.println("Record Not Found");
}
//System.out.println("sLATITUDE---:"+sLATITUDE);
//System.out.println("sLONGITUDE---:"+sLONGITUDE);
Map<String, String> hasMap = new HashMap<String, String>();
hasMap.put("sLATITUDE", sLATITUDE);
hasMap.put("sLONGITUDE", sLONGITUDE);
return hasMap;
}
}

40
src/main/java/com/asset/complaint/Complaint.java

@ -0,0 +1,40 @@
package com.asset.complaint;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import lombok.Data;
@Entity
@Data
@Table(name = "asset_complaint")
public class Complaint {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name="complaint_id", nullable=false)
public Integer complaintId;
@Column(name="mobile_no")
public String mobileNo;
@Column(name="complaint_file")
public String complaintFile;
@Column(name="status")
public String status;
@Column(name="public_name")
public String publicName;
@Column(name="rating")
public String rating;
@Column(name="asset_id")
public Integer assetId;
}

71
src/main/java/com/asset/complaint/ComplaintController.java

@ -0,0 +1,71 @@
package com.asset.complaint;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.ui.ModelMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
@Controller
@RequestMapping(value = "/qr-feedback/complaint")
public class ComplaintController {
@Autowired
ComplaintRepository complaintRepo;
ComplaintService complaintSer;
@Autowired
ComplaintQuestionRepository complaintQuestionRepo;
@GetMapping(value = "/tracking")
public String assetEntry(Model model) {
model.addAttribute("complaintTrackingObj", new Complaint());
return "asset-complaint-tracking";
}
@PostMapping(value = "/feebackForm/submit")
public String feedbackFormSubmit(@ModelAttribute Complaint complaint,
HttpServletRequest request,
@RequestParam MultiValueMap body,
ModelMap model) {
HttpSession session = request.getSession();
System.out.println(session.getAttribute("verifiedotp"));
System.out.println(body);
System.out.println("---complaint---:"+complaint);
Complaint obj = new Complaint();
obj.setComplaintId(complaint.getComplaintId());
obj.setMobileNo(complaint.getMobileNo());
obj.setComplaintFile(complaint.getComplaintFile());
obj.setStatus(complaint.getStatus());
obj.setPublicName(complaint.getPublicName());
obj.setRating(complaint.getRating());
obj.setAssetId(complaint.getAssetId());
complaintRepo.save(obj);
// ComplaintQuestion obj2 = new ComplaintQuestion();
// obj2.setComplaintQuestionId(complaintQuestion.getComplaintQuestionId());
// obj2.setComplaintId(complaintQuestion.getComplaintId());
// obj2.setQuestion(complaintQuestion.getQuestion());
// obj2.setFeedback(complaintQuestion.getFeedback());
// complaintQuestionRepo.saveAndFlush(obj2);
if(session.getAttribute("verifiedotp").equals("success")) {
// return "asset-feedback-form-public-view";
model.addAttribute("displayText", "Thanks for the Feedback!!!");
return "invalidotp";
}
else{
model.addAttribute("displayText", "Invalid OTP Entered... Please scan Again and enter valid OTP");
return "invalidotp";
}
}
}

31
src/main/java/com/asset/complaint/ComplaintQuestion.java

@ -0,0 +1,31 @@
package com.asset.complaint;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import lombok.Data;
@Entity
@Data
@Table(name = "asset_complaint_question")
public class ComplaintQuestion {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name="complaint_question_id", nullable=false)
public Integer complaintQuestionId;
@Column(name="complaint_id")
public Integer complaintId;
@Column(name="question")
public String question;
@Column(name="feedback")
public String feedback;
}

9
src/main/java/com/asset/complaint/ComplaintQuestionRepository.java

@ -0,0 +1,9 @@
package com.asset.complaint;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface ComplaintQuestionRepository extends JpaRepository<ComplaintQuestion, Integer> {
}

10
src/main/java/com/asset/complaint/ComplaintRepository.java

@ -0,0 +1,10 @@
package com.asset.complaint;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface ComplaintRepository extends JpaRepository<Complaint, Integer> {
}

559
src/main/java/com/asset/complaint/ComplaintRestController.java

@ -0,0 +1,559 @@
package com.asset.complaint;
import java.util.Random;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
import java.time.format.DateTimeFormatter;
import java.time.LocalDateTime;
@RestController
@RequestMapping(value = "/qr-feedback/feedback")
public class ComplaintRestController {
@GetMapping(value = "/sendOtp")
public String sendOtp(HttpServletRequest request, @RequestParam String mobileNo) {
String MobileNo=mobileNo;
System.out.print("\n MobileNo---:"+mobileNo);
Random rand = new Random();
int otp = rand.nextInt(90000) + 10000;
System.out.print("\n otp---:"+otp);
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("dd-MMM-yyyy%20HH:mm");
LocalDateTime now = LocalDateTime.now();
System.out.println(dtf.format(now));
// String generatedToken="Your OTP is " +otp+ ". OTP is valid for the next 5 minutes.%0aBy%0aGreater Chennai Corporation.";
String generatedToken = "OTP%20for%20GREATER%20CHENNAI%20CORPORATION%20ERP%20Login%20for%20AELD31%20on%20" +
dtf.format(now) + "%20is%20%20" + otp + "%20Do%20not%20share%20it%20with%20anyone";
String urlString="http://api.onex-ultimo.in/api/pushsms?user=GCCtrans&authkey=92kOC1RBGBIws&sender=GCCCRP&mobile="+MobileNo+"&text="+generatedToken+"&rpt=1&summary=1&output=json&entityid=1401572690000011081&templateid=1407161640444625990";
System.out.print("\n urlString---: "+urlString);
ResponseEntity<String> response = null;
RestTemplate restTemplate = new RestTemplate();
String bodyMessage = "";
HttpHeaders headers = new HttpHeaders();
try {
HttpEntity<String> postData = new HttpEntity<String>(headers);
response = restTemplate.exchange(urlString, HttpMethod.POST, postData, String.class);
bodyMessage = response.getBody();
System.out.println("\n bodyMessage"+bodyMessage);
} catch (Exception e) {
e.printStackTrace();
System.out.print("\n ERROR---: "+e);
bodyMessage = "Error";
}
System.out.println("\n OTP sent successfully!");
HttpSession session = request.getSession();
session.setAttribute("otp", otp);
return bodyMessage;
}
@GetMapping(value = "/verifyOtp")
public String verifyOtp(HttpServletRequest request, @RequestParam String otp) {
HttpSession session = request.getSession();
String bodyMessage = "";
int session_otp = (Integer) session.getAttribute("otp");
System.out.println("session_otp---:"+session_otp);
String string_entered_otp = otp;
int entered_otp = Integer.parseInt(string_entered_otp);
if(session_otp == entered_otp)
{
System.out.println("Entered OTP Correct");
bodyMessage = "Success";
session.setAttribute("verifiedotp", "success");
}
else
{
System.out.println("Incorrect OTP. Please enter correct OTPs.");
bodyMessage = "Error";
session.setAttribute("verifiedotp", "error");
}
return bodyMessage;
}
@GetMapping(value = "/entry/complaint")
public String feedbackFormSubmit(@ModelAttribute Complaint complaint,
ComplaintQuestion complaintQuestion,
HttpServletRequest request) {
String complaintId="";
String name="null";
String address="null";
String email="null";
String mobileNo="9789332040";
String complaintType="18";
String complaintTitle="Mosquitomenace";
String complaintDetail="TestDetail";
String streetId="25956";
String image="";
String imageTest="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"
+ "1a9+9YEHHrh06dJ9990HAA8++OBisSh7EWPc6Fe+srIUu265XOoQ1bNacYmKbeFzsVTAWyDprERW"
+ "1USnmldDYlomlmIyMqz3GAammAnmPto8i3MuohBg5NizMHMXQuRUa8kyqc3q3GrqV9x44KioGgSQ"
+ "c+AGEW3lGLis9ZJltx3289tuu817/7nPfW5ra+vDH/7wM8888+lPf7ppGhOvG1orvy5zQKbfqqqW"
+ "y+V0Ot3e3n7jG9+4u7uLiPfff/90Ou26bm97ZRvlUhwKSrIW+0/tPnuIsrKVBhAin2onFGtD0GYC"
+ "z6Npo6O+711VnczbBbvj05aIQgRVjIEBq7omEbGYjYgwKDOzSuDove/WA3gZgqwPJWWxrtTj008/"
+ "fXJy+ta3vtU597GPfezVr371r/3arz366KPf/OY33/CGN1RVtUGhG9ZF3/eIOB6Pj46OnnnmmdPT"
+ "07e97W07Ozs7Ozuf/OQnl8slALzrXe+6/fbbAeDq1auf//znN5qXE2tgnd0RUUBdGSZFRCUHABp6"
+ "iRxjLyIgyhCBbB12ZVlgkGIepMioKR6dbQ9EBMW+76umFiAUjSyIGFVDjAreIXhySikWR6oeQFW7"
+ "ru0CV476kMp2WYsxzcKuDiKrsuSztvn2t78tAh/60Iem0+kGphtiWlVns9nBwcH29vZoNHrooYdO"
+ "T09f+9rX/sqv/Ipz7uMf/3jXdXVdf/jDH7b7N1LIYF2qmOACIFXWIgiRUh2tChUAIKxqKklkRaaq"
+ "LtVjWojKYpYtkSfvsHAIs3otxxYRQwhNVbshs6SMxLMouzUFnRpNVdeH/Z3RYtmXItjQzPlNmavK"
+ "Behw5mBm59wtt9yCiF/+8pdV9b777vPef/SjHxWR++6779KlS6YzAeD1r399WYKjfGC2o6uqOgs9"
+ "Asha9heusjtorVVpFlxELB0au4X3NREh1iICLk+j5fobgs6jZToOEY+yZYjo6opDbMYj78mCo6RW"
+ "qsCUhoKV3lwHWpUDkycXOApDTjjJ6+Wz9MgvyjRx8eLFG2+8+etf/3oI4bd+67eeffbZP/uzP7vn"
+ "nnve/e53P/roo4888sjtt9/+pje9aTqdnjs2GUSD9dyRI6K+75fL5XK5vPXWW8fj8Xg8fvby904X"
+ "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";
String latitude="13.00";
String longtitude="null";
String landmark="Test Landmark";
String urlString = "https://erp.chennaicorporation.gov.in/pgr/external/mobileservice?serviceId=RegComplaint&ComplainantName="+name+"&ComplainantAddr="+address+"&MobileNo="+email+"&Email="+mobileNo+"&ComplaintType="+complaintType+"&ComplaintTitle="+complaintTitle+"&ComplaintDetails="+complaintDetail+"&StreetId="+streetId+"&Comp_Image="+image+"&latitude="+latitude+"&longtitude="+longtitude+"&Landmark="+landmark+"";
System.out.print("urlString---: \n"+urlString);
ResponseEntity<String> response = null;
RestTemplate restTemplate = new RestTemplate();
String bodyMessage = "";
HttpHeaders headers = new HttpHeaders();
try {
HttpEntity<String> postData = new HttpEntity<String>(headers);
response = restTemplate.exchange(urlString, HttpMethod.POST, postData, String.class);
System.out.println(response.getBody());
bodyMessage = response.getBody();
} catch (Exception e) {
e.printStackTrace();
System.out.print("ERROR---: "+e);
bodyMessage = "ERROR";
}
return bodyMessage;
}
}

51
src/main/java/com/asset/complaint/ComplaintService.java

@ -0,0 +1,51 @@
package com.asset.complaint;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.ResponseEntity;
import org.springframework.web.client.RestTemplate;
public class ComplaintService {
public String registerPgrComplaint() {
// URLs
//private String INTEGRATION_URL = "http://freedomris.ddns.net:8001/FreedomRisNotificationApp";
//private String INTEGRATION_TOKEN_URL = INTEGRATION_URL + "/token";
//private String INTEGRATION_CLIENT_URL = INTEGRATION_URL + "/api/v1/GetClient";
//private String INTEGRATION_BILL_URL = INTEGRATION_URL + "/api/v1/GetBill";
String complaintId="";
String name="null";
String address="null";
String email="null";
String mobileNo="9789332040";
String complaintType="18";
String complaintTitle="Mosquitomenace";
String complaintDetail="TestDetail";
String streetId="25956";
String image="null";
String latitude="null";
String longtitude="null";
String landmark="null";
String urlString = "https://erp.chennaicorporation.gov.in/pgr/external/mobileservice?serviceId=RegComplaint&ComplainantName="+name+"&ComplainantAddr="+address+"&MobileNo="+email+"&Email="+mobileNo+"&ComplaintType="+complaintType+"&ComplaintTitle="+complaintTitle+"&ComplaintDetails="+complaintDetail+"&StreetId="+streetId+"&Comp_Image="+image+"&latitude="+latitude+"&longtitude="+longtitude+"&Landmark="+landmark+"";
//System.out.print("urlString---: "+urlString);
ResponseEntity<String> response = null;
RestTemplate restTemplate = new RestTemplate();
HttpHeaders headers = new HttpHeaders();
//headers.add("Content-Type", "application/x-www-form-urlencoded");
try {
HttpEntity<String> postData = new HttpEntity<String>(headers);
// response = restTemplate.exchange(INTEGRATION_TOKEN_URL, HttpMethod.POST, postData, String.class);
} catch (Exception e) {
e.printStackTrace();
}
String bodyMessage = response.getBody();
return bodyMessage;
}
}

93
src/main/java/com/asset/feedback/Feedback.java

@ -0,0 +1,93 @@
package com.asset.feedback;
import javax.persistence.*;
import lombok.Data;
@Entity
@Data
@Table(name = "asset_feedback")
public class Feedback {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name="feedback_id", nullable=false)
public Integer feedbackId;
@Column(name="asset_id")
public String assetId;
@Column(name="asset_name")
public String assetName;
public String getQrcodestring() {
return qrcodestring;
}
public void setQrcodestring(String qrcodestring) {
this.qrcodestring = qrcodestring;
}
@Column(name="asset_type")
public String assetType;
public String qrcodestring;
public byte[] getQrcodeinbytes() {
return qrcodeinbytes;
}
public void setQrcodeinbytes(byte[] qrcodeinbytes) {
this.qrcodeinbytes = qrcodeinbytes;
}
@Lob
private byte[] qrcodeinbytes;
public Integer getFeedbackId() {
return feedbackId;
}
public void setFeedbackId(Integer feedbackId) {
this.feedbackId = feedbackId;
}
public String getAssetId() {
return assetId;
}
public void setAssetId(String assetId) {
this.assetId = assetId;
}
public String getAssetName() {
return assetName;
}
public void setAssetName(String assetName) {
this.assetName = assetName;
}
public String getAssetType() {
return assetType;
}
public void setAssetType(String assetType) {
this.assetType = assetType;
}
public String getQrcodepath() {
return qrcodepath;
}
public void setQrcodepath(String qrcodepath) {
this.qrcodepath = qrcodepath;
}
@Column(name="qrcode_path")
public String qrcodepath;
//@OneToMany(mappedBy = "FeedbackQuestion", fetch = FetchType.LAZY, cascade=CascadeType.ALL)
//private List<FeedbackQuestion> feedbackQuestionList;
//@OneToMany(mappedBy = "FeedbackQuestion", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
//public List<FeedbackQuestion> feedbackQuestionList = new ArrayList<FeedbackQuestion>();
}

291
src/main/java/com/asset/feedback/FeedbackController.java

@ -0,0 +1,291 @@
package com.asset.feedback;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.nio.file.FileSystems;
import java.util.ArrayList;
import java.util.Base64;
import java.util.List;
import com.asset.asset.Asset;
import com.asset.asset.AssetRepository;
import com.asset.master.Master;
import com.google.zxing.WriterException;
import com.google.zxing.oned.Code128Writer;
import com.google.zxing.pdf417.encoder.BarcodeMatrix;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.web.PageableDefault;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.util.MultiValueMap;
import org.springframework.web.bind.annotation.*;
import com.asset.complaint.Complaint;
import com.asset.complaint.ComplaintRepository;
import com.asset.master.MasterQuestion;
import com.asset.master.MasterQuestionRepository;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.QRCodeWriter;
import javax.imageio.ImageIO;
import javax.servlet.ServletContext;
@Controller
@RequestMapping(value = "/qr-feedback/feedback")
@SessionAttributes({"user"})
public class FeedbackController {
@Autowired
AssetRepository assetRepo;
@Autowired
ServletContext context;
@Autowired
FeedbackRepository feedbackRepo;
@Autowired
FeedbackQuestionRepository feedbackQuestionRepo;
@Autowired
MasterQuestionRepository masterQuestionRepo;
@Autowired
ComplaintRepository complaintDetailRepo;
@GetMapping(value = "/creation")
public String feedbackForm(Model model) {
model.addAttribute("feedbackFormCreationObj", new FeedbackQuestion());
return "asset-feedback-creation";
}
@PostMapping(value = "/creation/submit")
public String assetEntrySubmit(@ModelAttribute Feedback feedback,
@ModelAttribute FeedbackQuestion feedbackQuestion,
@RequestParam MultiValueMap body) {
System.out.println(body);
Feedback obj = new Feedback();
obj.setAssetId(feedback.getAssetId());
obj.setAssetType(feedback.getAssetType());
feedbackRepo.saveAndFlush(obj);
FeedbackQuestion obj2 = new FeedbackQuestion();
obj2.setFeedbackQuestionId(feedbackQuestion.getFeedbackQuestionId());
obj2.setAssetId(feedbackQuestion.getAssetId());
obj2.setAssetType(feedbackQuestion.getAssetType());
obj2.setQuestionEnglish(body.getFirst("masterQuestionEnglish").toString());
obj2.setQuestionTamil(body.getFirst("masterQuestionTamil").toString());
obj2.setQuestionType(feedbackQuestion.getQuestionType());
feedbackQuestionRepo.saveAndFlush(obj2);
return "redirect:/qr-feedback/feedback/creation";
}
// @GetMapping(value = "/sendOtp")
// public String sendOTP(Model model) {
// System.out.println();
// return null;
// }
@GetMapping(value = "/qrcode")
public String qrCode(Model model) {
model.addAttribute("qrCodeObj", new Feedback());
// List<Feedback> obj = feedbackRepo.findAll();
List<Asset> obj = assetRepo.findAll();
obj.forEach(mp -> {
System.out.println(mp);
try {
byte[] qrbytes = getQRCodeImage("http://feedback.chennaicorporation.gov.in/asset_details-0.0.1-SNAPSHOT/qr-feedback/feedback/entry/qrcode=" +
mp.qrcode, 200, 200);
System.out.println(qrbytes);
mp.setQrcodeinbytes(qrbytes);
mp.setQrcodestring(Base64.getEncoder().encodeToString(mp.getQrcodeinbytes()));
mp.setQrcodestring(mp.getQrcodestring());
mp.setAssetAddress(mp.assetStreet + ", " + mp.assetLocality + ", " + mp.assetArea);
System.out.println(mp.getQrcodeinbytes());
}catch (Exception e) {
e.getMessage();
}
});
model.addAttribute("page", obj);
//Page<FeedbackQuestion> obj2 = feedbackQuestionRepo.findAll(pageable);
//model.addAttribute("page", obj2);
return "asset-feedback-qrcode";
}
public static BufferedImage generateQRCodeImage(String barcodeText) throws Exception {
StringBuilder str = new StringBuilder();
str = str.append("Name:").append(barcodeText);
QRCodeWriter barcodeWriter = new QRCodeWriter();
BitMatrix bitMatrix =
barcodeWriter.encode(str.toString(), BarcodeFormat.QR_CODE, 200, 200);
return MatrixToImageWriter.toBufferedImage(bitMatrix);
}
public static BufferedImage generateBARCodeImage(long barcodeText) throws Exception {
StringBuilder str = new StringBuilder();
str = str.append("Name:").append(barcodeText);
Code128Writer code128Writer = new Code128Writer();
BitMatrix bitMatrix =
code128Writer.encode(str.toString(), BarcodeFormat.CODE_128, 200, 200);
return MatrixToImageWriter.toBufferedImage(bitMatrix);
}
@PostMapping(value = "/qrcode/submit")
public String qrCodeSubmit(Model model, @PageableDefault(size = 1000) Pageable pageable) {
Page<Feedback> obj = feedbackRepo.findAll(pageable);
model.addAttribute("page", obj);
model.addAttribute("qrCodeObj", new Feedback());
return "asset-feedback-qrcode";
}
public static byte[] getQRCodeImage(String text, int width, int height)
throws WriterException, IOException{
QRCodeWriter qrCodeWriter = new QRCodeWriter();
BitMatrix bitMatrix = qrCodeWriter.encode(text, BarcodeFormat.QR_CODE, width, height);
ByteArrayOutputStream pngOut = new ByteArrayOutputStream();
MatrixToImageWriter.writeToStream(bitMatrix, "PNG", pngOut);
byte[] pngData = pngOut.toByteArray();
return pngData;
}
public static byte[] getBARCodeImage(String text, int width, int height)
throws WriterException, IOException{
Code128Writer code128Writer = new Code128Writer();
BitMatrix bitMatrix = code128Writer.encode(text, BarcodeFormat.CODE_128, width, height);
ByteArrayOutputStream pngOut = new ByteArrayOutputStream();
MatrixToImageWriter.writeToStream(bitMatrix, "PNG", pngOut);
byte[] pngData = pngOut.toByteArray();
return pngData;
}
@GetMapping(value = "/list")
public String feedbackList(Model model, @PageableDefault(size = 1000) Pageable pageable) {
Page<Feedback> obj = feedbackRepo.findAll(pageable);
obj.forEach(mp -> {
System.out.println(mp);
try {
BufferedImage bufferedImage = generateBARCodeImage( mp.feedbackId );
String absolutePath = context.getRealPath("qrcode");
System.out.println(absolutePath);
File outputfile = new File(absolutePath + "//"
+ mp.assetId + "_"+ mp.assetName + "_" + mp.feedbackId + ".png");
ImageIO.write(bufferedImage, "png", outputfile);
mp.setQrcodepath(absolutePath + "//"
+ mp.assetId + "_"+ mp.assetName + "_" + mp.feedbackId + ".png");
byte[] qrbytes = getBARCodeImage(String.valueOf( mp.feedbackId) , 200, 200);
System.out.println(qrbytes);
mp.setQrcodeinbytes(qrbytes);
mp.setQrcodestring(Base64.getEncoder().encodeToString(mp.getQrcodeinbytes()));
mp.setQrcodestring(mp.getQrcodestring());
System.out.println(mp.getQrcodeinbytes());
}catch (Exception e) {
e.getMessage();
}
});
//Page<MasterDetail> obj = masterDetailRepo.findAll(pageable);
model.addAttribute("page", obj);
System.out.println("obj"+obj);
return "asset-feedback-list";
}
@GetMapping(value = "/entry/qrcode={qrcode}")
public String feednbackFormEntryAssetID(@PathVariable String qrcode, Model model) {
// Page<Feedback> obj = feedbackRepo.findAll(pageable);
// model.addAttribute("page", obj);
System.out.println("assetid"+qrcode);
//List<FeedbackQuestion> obj = feedbackQuestionRepo.findAll();
// Integer assetIdValue = assetid;
List<Asset> objassets = assetRepo.findAll();
final Asset AssetObj = new Asset();
objassets.forEach(mp -> {
System.out.println(mp);
if(mp.qrcode.equals(qrcode)) {
AssetObj.assetId = mp.assetId;
AssetObj.assetAddress = mp.assetStreet + ", " + mp.assetLocality + ", " + mp.assetArea;
AssetObj.assetName = mp.assetName;
}
});
List<Complaint> obj1 = complaintDetailRepo.findAll();
model.addAttribute("complaintObj", obj1);
List<MasterQuestion> obj = masterQuestionRepo.findAll();
model.addAttribute("page", obj);
model.addAttribute("objassets", AssetObj);
model.addAttribute("assetEntry", true);
System.out.println(obj);
return "asset-feedback-form-public-view";
}
@GetMapping(value = "/entry")
public String feednbackFormEntry(Model model) {
// Page<Feedback> obj = feedbackRepo.findAll(pageable);
// model.addAttribute("page", obj);
// System.out.println("obj"+obj);
//List<FeedbackQuestion> obj = feedbackQuestionRepo.findAll();
List<Asset> objassets = assetRepo.findAll();
List<Complaint> obj1 = complaintDetailRepo.findAll();
model.addAttribute("complaintObj", obj1);
List<MasterQuestion> obj = masterQuestionRepo.findAll();
model.addAttribute("page", obj);
model.addAttribute("objassets", objassets);
model.addAttribute("assetEntry", false);
System.out.println(obj);
return "asset-feedback-form-public-view";
}
@GetMapping(value = "/entry/assetType={assetType}/assetId={assetId}")
public String feedbackFormPublicView(@PathVariable Integer assetId,@PathVariable String assetType, Model model) {
Integer assetIdValue = assetId;
String assetTypeValue = assetType;
System.out.println("assetIdValue---:"+assetIdValue);
System.out.println("assetTypeValue---:"+assetTypeValue);
//new Asset();
//Optional<FeedbackQuestion> asset = feedbackQuestionRepo.findAll();
//Asset assetObj = asset.get();
//model.addAttribute("assetEntryObj", assetObj);
//List<FeedbackQuestion> obj = feedbackQuestionRepo.findAll();
//model.addAttribute("page", obj);
List<Complaint> obj1 = complaintDetailRepo.findAll();
model.addAttribute("complaintObj", obj1);
List<MasterQuestion> obj = masterQuestionRepo.findAllByAssetType(assetTypeValue);
model.addAttribute("page", obj);
//System.out.println("assetObj---:"+assetObj);
return "asset-feedback-form-public-view";
}
}

43
src/main/java/com/asset/feedback/FeedbackQuestion.java

@ -0,0 +1,43 @@
package com.asset.feedback;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import lombok.Data;
@Entity
@Data
@Table(name = "asset_feedback_question")
public class FeedbackQuestion {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name="feedback_question_id", nullable=false)
public Integer feedbackQuestionId;
@Column(name="asset_id")
public String assetId;
@Column(name="asset_name")
public String assetName;
@Column(name="asset_type")
public String assetType;
@Column(name="question_english")
public String questionEnglish;
@Column(name="question_tamil")
public String questionTamil;
@Column(name="question_type")
public String questionType;
//@JoinColumn(name = "asset_id", nullable = false, insertable=false, updatable=false)
//private Feedback feedback;
}

11
src/main/java/com/asset/feedback/FeedbackQuestionRepository.java

@ -0,0 +1,11 @@
package com.asset.feedback;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface FeedbackQuestionRepository extends JpaRepository<FeedbackQuestion, Integer> {
}

10
src/main/java/com/asset/feedback/FeedbackRepository.java

@ -0,0 +1,10 @@
package com.asset.feedback;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface FeedbackRepository extends JpaRepository<Feedback, Integer> {
}

22
src/main/java/com/asset/feedback/FeedbackRestController.java

@ -0,0 +1,22 @@
package com.asset.feedback;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping(value = "/qr-feedback")
public class FeedbackRestController {
@Autowired
FeedbackRepository feedbackRepo;
/*
* @PostMapping(value = "/feedback/creation/submit") public List<Feedback>
* getIcList(@PathVariable("keyword") Long keyword) { List<Feedback> obj =
* feedbackRepo.findAllByCoverId(keyword); return obj; }
*/
}

82
src/main/java/com/asset/login/LoginController.java

@ -0,0 +1,82 @@
package com.asset.login;
import com.asset.master.Master;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.ui.ModelMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.support.SessionStatus;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
import javax.servlet.ServletContext;
import java.util.List;
@Controller
@RequestMapping(value = "/qr-feedback")
@SessionAttributes({"user"})
public class LoginController {
@Autowired
private ServletContext context;
@ModelAttribute("user")
public Users user(){
return new Users();
}
@Autowired
UserRepository userRepository;
@RequestMapping(value = "/logout", method = RequestMethod.GET)
public String logoutForm( Model model,
SessionStatus status) {
status.setComplete();
return "login";
}
@RequestMapping(value = "/login", method = RequestMethod.GET)
public String loginForm() {
System.out.println(context.getContextPath());
return "login";
}
@RequestMapping(value = "/dashboard", method = RequestMethod.POST)
public String loginFormSubmit(@RequestParam String username,
@RequestParam String password,
Model model,
SessionStatus status) {
System.out.println(username);
System.out.println(password);
List<Users> usersList = userRepository.findAllUsers();
// System.out.println(usersList);
final Users foundUser = new Users();
usersList.forEach(mp -> {
System.out.println(mp);
if(mp.userName.equals(username) && mp.userPassword.equals(password)){
foundUser.setUserName(username);
foundUser.setUserDisplayName(mp.userDisplayName);
}
});
System.out.println(foundUser);
if(foundUser.getUserName() != null && foundUser.getUserName() != ""){
System.out.println("logged in successfully");
model.addAttribute("user", foundUser);
return "dashboard";
}
else {
System.out.println("logged in failed");
model.addAttribute("errorMsg","Login in failed...... Invalid Credentials.");
status.setComplete();
return "login";
}
}
@RequestMapping(value = "/dashboard", method = RequestMethod.GET)
public String dashboard() {
//System.out.println("TEST NOW");
return "dashboard";
}
}

15
src/main/java/com/asset/login/UserRepository.java

@ -0,0 +1,15 @@
package com.asset.login;
import com.asset.master.Master;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public interface UserRepository extends JpaRepository<Users, Integer> {
@Query(value="SELECT user_id, user_name, user_displayname, user_pass, user_profile, user_role FROM asset_login_users", nativeQuery=true)
public List<Users> findAllUsers();
}

35
src/main/java/com/asset/login/Users.java

@ -0,0 +1,35 @@
package com.asset.login;
import lombok.Data;
import javax.persistence.*;
@Entity
@Data
@Table(name = "asset_login_users")
public class Users {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name="user_id")
public Integer userId;
@Column(name="user_name")
public String userName;
@Column(name="user_displayname")
public String userDisplayName;
@Column(name="user_pass")
public String userPassword;
@Column(name="user_role")
public String userRole;
@Column(name="user_profile")
public String userProfile;
}

43
src/main/java/com/asset/master/Master.java

@ -0,0 +1,43 @@
package com.asset.master;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import lombok.Data;
@Entity
@Data
@Table(name = "asset_master")
public class Master {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name="master_id")
public Integer masterId;
@Column(name="master_name")
public String masterName;
/*
* @OneToMany(mappedBy = "master", fetch = FetchType.LAZY, cascade =
* CascadeType.ALL) public List<MasterDetail> masterDetail = new
* ArrayList<MasterDetail>();
*/
/*
* @OneToMany(cascade = CascadeType.ALL) public List<MasterDetail> masterDetail;
*/
/*
* @OneToMany(mappedBy = "master", fetch = FetchType.LAZY, cascade
* =CascadeType.ALL) private List<MasterDetail> masterDetailList;
*/
}

280
src/main/java/com/asset/master/MasterController.java

@ -0,0 +1,280 @@
package com.asset.master;
import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.util.MultiValueMap;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.support.SessionStatus;
@Controller
@RequestMapping(value = "/qr-feedback/master")
@SessionAttributes({"user"})
public class MasterController {
@Autowired
MasterRepository masterRepo;
@Autowired
MasterQuestionRepository masterQuestionRepo;
@Autowired
MasterParametersRepository masterParametersRepo;
@Autowired
MasterViewRepository masterViewRepo;
@GetMapping(value = "entry")
public String masterEntry(Model model, Master master, MasterQuestion masterQuestion,
MasterParameters masterParameters,
@RequestParam MultiValueMap body,
SessionStatus status) {
//model.addAttribute("masterObj", new MasterView());
// MasterParameters[] MasterParametersList = new MasterParameters[2];
// MasterParametersList.add(new MasterParameters());
// model.addAttribute("user", user);
// System.out.println(status);
model.addAttribute("masterList", new Master());
List<MasterParameters> MasterParametersList = new ArrayList<>();
model.addAttribute("masterParametersList", MasterParametersList);
//model.addAttribute("masterParametersListObj", masterParameters.getMasterParameters());
List<MasterQuestion> MasterDetailList = new ArrayList<>();
model.addAttribute("masterQuestionList", MasterDetailList);
return "asset-master-entry";
}
@GetMapping(value = "/list/search")
public String masterSearch(@RequestParam String masterName,
Model model) {
System.out.println(masterName);
List<Master> obj = masterRepo.findAll();
System.out.println("OBJ TEST search"+obj);
List<Master> MasterObjList = new ArrayList<>();
obj.forEach(mp -> {
System.out.println(mp);
if(mp.masterId.equals(Integer.parseInt(masterName))) {
Master MasObj = new Master();
MasObj.setMasterId(mp.getMasterId());
MasObj.setMasterName(mp.getMasterName());
MasterObjList.add(MasObj);
}
});
model.addAttribute("page", obj);
if(Integer.parseInt(masterName) > 0) {
System.out.println(MasterObjList);
model.addAttribute("masterSearchObj", MasterObjList);
}
model.addAttribute("masterList", obj);
return "asset-master-list";
}
@GetMapping(value = "/list")
public String masterList(Model model) {
/* System.out.println("OBJ TEST2"); */
/* List<MasterView> obj = masterVieRepo.findAllMasterDetail(); */
List<Master> obj = masterRepo.findAll();
// System.out.println("OBJ TEST"+obj);
model.addAttribute("page", obj);
model.addAttribute("masterSearchObj", obj);
model.addAttribute("masterList", obj);
return "asset-master-list";
}
@GetMapping(value = "/list/edit/{keyword}")
public String masterEdit(@PathVariable Integer keyword, Model model) {
/*
* new MasterView(); Optional<MasterView> MasterView =
* masterViewRepo.findById(keyword); MasterView masterObj = MasterView.get();
* model.addAttribute("page", masterObj);
*/
System.out.println("keyword" + keyword);
new Master();
Optional<Master> Master = masterRepo.findById(keyword);
Master masterObj = Master.get();
System.out.println("masterObj" + masterObj + keyword);
model.addAttribute("masterList", masterObj);
new MasterParameters();
List<MasterParameters> MasterParameters = masterParametersRepo.findByMasterParametersId();
List<MasterParameters> MasterParametersList = new ArrayList<>();
MasterParameters.forEach(mp -> {
System.out.println(mp);
if((mp.masterId - keyword) == 0) {
MasterParameters masterParametersObj = new MasterParameters();
masterParametersObj.setMasterParametersId(mp.masterParametersId);
masterParametersObj.setMasterParameters(mp.masterParameters);
masterParametersObj.setMasterId(mp.masterId);
masterParametersObj.setMasterName(mp.masterName);
MasterParametersList.add(masterParametersObj);
}
});
System.out.println("masterParametersObj" + MasterParametersList);
model.addAttribute("masterParametersList", MasterParametersList);
new MasterQuestion();
List<MasterQuestion> MasterDetail = masterQuestionRepo.findByMasterParametersId(keyword);
List<MasterQuestion> MasterDetailList = new ArrayList<>();
MasterDetail.forEach(mp -> {
System.out.println(mp);
if((mp.masterId - keyword) == 0) {
MasterQuestion masterDetailObj = new MasterQuestion();
masterDetailObj.setMasterQuestionId(mp.masterQuestionId);
masterDetailObj.setMasterQuestionTamil(mp.masterQuestionTamil);
masterDetailObj.setMasterQuestionEnglish(mp.masterQuestionEnglish);
masterDetailObj.setMasterQuestionType(mp.masterQuestionType);
masterDetailObj.setMasterId(mp.masterId);
masterDetailObj.setMasterName(mp.masterName);
MasterDetailList.add(masterDetailObj);
}
});
System.out.println("masterDetailObj" + MasterDetail);
model.addAttribute("masterQuestionList", MasterDetail);
return "asset-master-entry";
}
@GetMapping(value = "/list/delete/{keyword}")
public String masterDelete(@PathVariable Integer keyword, Model model) {
masterRepo.deleteById(keyword);
return "redirect:/qr-feedback/master/list";
}
@PostMapping(value = "/entry/submit", name = "submits")
public String masterEntrySubmit(@RequestParam MultiValueMap body,
Model model) {
System.out.println(body);
System.out.println(body.keySet().size());
System.out.println(body.keySet());
final Master obj = new Master();
body.keySet().forEach(
name -> {
System.out.println(name);
if(name.toString().contains("masterName")) {
System.out.println("entring" + body.getFirst("masterID").toString() + "entring");
obj.setMasterName(body.getFirst("masterName").toString());
System.out.println(body.getFirst("masterID").toString());
if(body.getFirst("masterID").toString().trim() != "" &&
Integer.parseInt(body.getFirst("masterID").toString()) != 0){
obj.setMasterId(Integer.parseInt(body.getFirst("masterID").toString()));
}
masterRepo.save(obj);
System.out.println("-master-obj-:"+obj);
}
if(name.toString().contains("masterParameters_")){
String suffix = name.toString().split("_")[1];
System.out.println(body.getFirst(name.toString()));
MasterParameters obj3 = new MasterParameters();
obj3.setMasterId(obj.getMasterId());
obj3.setMasterName(obj.getMasterName());
obj3.setMasterParameters(body.getFirst(name.toString()).toString());
if(body.getFirst("updateMasterParametersBox_" + suffix) != null) {
System.out.println(body.getFirst("updateMasterParametersBox_" + suffix).toString());
if(Integer.parseInt( body.getFirst("updateMasterParametersBox_" + suffix).toString().split("_")[0]) != 0) {
obj3.setMasterParametersId(Integer.parseInt(name.toString().split("_")[1]));
Integer status = Integer.parseInt(body.getFirst("updateMasterParametersBox_" + suffix).toString().split("_")[1]);
System.out.println(status);
System.out.println((status - 1) == 1);
if ((status - 1) == 1) {
System.out.println("deleted");
masterParametersRepo.deleteById(Integer.parseInt(suffix));
}
if ((status - 1) == 0) {
obj3.setMasterParametersId(Integer.parseInt(suffix));
obj3.setMasterId(obj.getMasterId());
System.out.println("-master-obj3-:" + obj3);
masterParametersRepo.save(obj3);
}
}
}
else{
masterParametersRepo.saveAndFlush(obj3);
}
System.out.println("-master-obj3-:"+obj3);
}
if(name.toString().contains("masterQuestionEnglish_")) {
String suffix = name.toString().split("_")[1];
System.out.println(body.getFirst("masterQuestionEnglish_" + suffix));
System.out.println(body.getFirst("masterQuestionTamil_" + suffix));
MasterQuestion obj2 = new MasterQuestion();
obj2.setMasterId(obj.getMasterId());
obj2.setMasterName(obj.getMasterName());
obj2.setMasterQuestionTamil(body.getFirst("masterQuestionTamil_" + suffix).toString());
obj2.setMasterQuestionEnglish(body.getFirst("masterQuestionEnglish_" + suffix).toString());
// obj2.setMasterQuestionType(masterQuestion.getMasterQuestionType());
if(body.getFirst("updateQuestionBox_" + suffix) != null) {
System.out.println(body.getFirst("updateQuestionBox_" + suffix).toString());
if(Integer.parseInt( body.getFirst("updateQuestionBox_" + suffix).toString().split("_")[0]) != 0) {
Integer status = Integer.parseInt(body.getFirst("updateQuestionBox_" + suffix).toString().split("_")[1]);
System.out.println(status);
System.out.println((status - 1) == 1);
if ((status - 1) == 1) {
System.out.println("deleted");
masterQuestionRepo.deleteById(Integer.parseInt(suffix));
}
if ((status - 1) == 0) {
obj2.setMasterQuestionId(Integer.parseInt(suffix));
obj2.setMasterId(obj.getMasterId());
System.out.println("-master-obj2-:" + obj2);
masterQuestionRepo.save(obj2);
}
}
}
else{
masterQuestionRepo.saveAndFlush(obj2);
}
//
}
}
);
// System.out.println("-master-:"+master);
// System.out.println("-masterQuestion-:"+masterQuestion);
// System.out.println("-masterParameters-:"+masterParameters);
//
//
//
return "redirect:/qr-feedback/master/entry";
}
}

31
src/main/java/com/asset/master/MasterParameters.java

@ -0,0 +1,31 @@
package com.asset.master;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import lombok.Data;
@Entity
@Data
@Table(name = "asset_master_parameters")
public class MasterParameters {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name="master_parameters_id")
public Integer masterParametersId;
@Column(name="master_id")
public Integer masterId;
@Column(name="master_name")
public String masterName;
@Column(name="master_parameters")
public String masterParameters;
}

16
src/main/java/com/asset/master/MasterParametersRepository.java

@ -0,0 +1,16 @@
package com.asset.master;
import java.util.List;
import java.util.Optional;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;
@Repository
public interface MasterParametersRepository extends JpaRepository<MasterParameters, Integer> {
@Query(value="SELECT master_parameters_id, master_id, master_name, master_parameters FROM asset_master_parameters", nativeQuery=true)
List<MasterParameters> findByMasterParametersId();
}

51
src/main/java/com/asset/master/MasterQuestion.java

@ -0,0 +1,51 @@
package com.asset.master;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import lombok.Data;
@Entity
@Data
@Table(name = "asset_master_question")
public class MasterQuestion {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name="master_question_id")
public Integer masterQuestionId;
@Column(name="master_id")
public Integer masterId;
@Column(name="master_name")
public String masterName;
@Column(name="master_question_tamil")
public String masterQuestionTamil;
@Column(name="master_question_english")
public String masterQuestionEnglish;
@Column(name="master_question_type")
public String masterQuestionType;
/*
* @ManyToOne(fetch = FetchType.LAZY, optional = false)
*
* @JoinColumn(name = "master_id", nullable = false, insertable=false,
* updatable=false) private Master master;
*/
/*
* @ManyToOne
*
* @JoinColumn(name = "master_id", nullable = false, insertable=false,
* updatable=false) private Master master;
*/
}

25
src/main/java/com/asset/master/MasterQuestionRepository.java

@ -0,0 +1,25 @@
package com.asset.master;
import java.util.List;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;
@Repository
public interface MasterQuestionRepository extends JpaRepository<MasterQuestion, Integer> {
@Query(value="SELECT master_question_id, master_id, master_name, master_question_english, master_question_tamil, master_question_type FROM asset_master_question WHERE master_name='Park'", nativeQuery=true)
List<MasterQuestion> findAllByAssetType(String assetTypeValue);
@Query(value="SELECT master_question_id, master_id, master_name, master_question_english, master_question_tamil, master_question_type FROM asset_master_question", nativeQuery=true)
List<MasterQuestion> findByMasterParametersId(Integer masterID);
//@Query(value="SELECT master_question_id, master_id, master_name, master_question_english, master_question_tamil, master_question_type FROM asset_master_question WHERE master_name=?1", nativeQuery=true)
//@Query(value="SELECT masterQuestionId, masterId, masterName, masterQuestionEnglish, masterQuestionTamil, masterQuestionType FROM MasterQuestion WHERE masterQuestionType=?assetTypeValue")
//public List<MasterQuestion> findAllByAssetType(assetTypeValue);
}

23
src/main/java/com/asset/master/MasterRepository.java

@ -0,0 +1,23 @@
package com.asset.master;
import java.util.List;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;
@Repository
public interface MasterRepository extends JpaRepository<Master, Integer> {
/*
* @Query(
* value="SELECT a.masterId, a.masterName, b.masterCharacteristic, b.masterQuestionType, \r\n"
* +"b.masterQuestion FROM Master a INNER JOIN MasterDetail b ON a.masterId=b.masterId"
* ,nativeQuery = false) public List<Master> findAllMasterDetail();
*/
/*public List findAllMasterDetail();*/
@Query(value="SELECT master_id, master_name FROM asset_master", nativeQuery=true)
public List<Master> findAllMasterName();
}

46
src/main/java/com/asset/master/MasterRestController.java

@ -0,0 +1,46 @@
package com.asset.master;
import java.util.List;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping(value = "/qr-feedback/master")
public class MasterRestController {
@Autowired
MasterRepository masterRepo;
@Autowired
MasterParametersRepository masterParametersRepo;
@Autowired
JdbcTemplate jdbcTemplate;
@GetMapping(value = "/getMasterName")
public List<Master> getMasterName() {
List<Master> obj = masterRepo.findAllMasterName();
//System.out.println("OBJ--2-:"+obj);
return obj;
}
@GetMapping(value = "/getMasterParameters")
public List<Map<String,Object>> getMasterParameters(@RequestParam String masterId) {
//List<MasterParameters> obj = masterParametersRepo.findByMasterId();
//System.out.println("OBJ---:"+obj);
//return obj;
return jdbcTemplate.queryForList("SELECT master_parameters_id,master_id,master_name,master_parameters FROM asset_master_parameters WHERE master_id='"+masterId+"'");
}
// @GetMapping(value = "/client/{searchTerms}")
// public List<Map<String,Object>> getClientNameKeyword(@PathVariable("searchTerms") String searchTerms) {
// return jdbcTemplate.queryForList("SELECT DISTINCT client_id,client_name FROM v_client WHERE client_name LIKE '" +searchTerms+ "%' ORDER BY client_name ASC");
// }
}

36
src/main/java/com/asset/master/MasterView.java

@ -0,0 +1,36 @@
package com.asset.master;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import lombok.Data;
@Entity
@Data
@Table(name = "v_master")
public class MasterView {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="master_id")
public Integer masterId;
@Column(name="master_name")
public String masterName;
@Column(name="master_parameters")
public String masterParameters;
@Column(name="master_question_tamil")
public String masterQuestionTamil;
@Column(name="master_question_english")
public String masterQuestionEnglish;
@Column(name="master_question_type")
public String masterQuestionType;
}

16
src/main/java/com/asset/master/MasterViewRepository.java

@ -0,0 +1,16 @@
package com.asset.master;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface MasterViewRepository extends JpaRepository<MasterView, Integer> {
/*
* @Query(
* value="SELECT a.masterId, a.masterName, b.masterCharacteristic, b.masterQuestionType, \r\n"
* +"b.masterQuestionTamil b.masterQuestionEnglish FROM Master a INNER JOIN MasterDetail b ON a.masterId=b.masterId"
* ,nativeQuery = false) public List<MasterView> findAllMasterDetail();
*/
}

11
src/main/resources/application.properties

@ -0,0 +1,11 @@
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url = jdbc:mysql://localhost:3306/asset
spring.datasource.username = root
spring.datasource.password = password
spring.jpa.show-sql = true
spring.jpa.hibernate.ddl-auto = update
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5Dialect
server.port=9191
spring.resources.chain.strategy.fixed.enabled=true
spring.resources.chain.strategy.fixed.paths=/**
spring.resources.chain.strategy.fixed.version=v12

153
src/main/resources/static/assets/css/local.css

@ -0,0 +1,153 @@
/* #placeHolder {
display: none;
}
button.center-block {
margin-top: 20px;
display: block;
width: 60%;
line-height: 2em;
background: rgba(114, 212, 202, 1);
border-radius: 5px;
border: 0;
border-top: 1px solid #B2ECE6;
box-shadow: 0 0 0 1px #46A294, 0 2px 2px #808389;
color: #FFFFFF;
font-size: 1.5em;
text-align: center;
text-shadow: 0 1px 2px #21756A;
}
button.center-block:hover {
background: linear-gradient(to bottom, rgba(107, 198, 186, 1) 0%,
rgba(57, 175, 154, 1) 100%);
}
button.center-block:active {
box-shadow: inset 0 0 5px #000;
background: linear-gradient(to bottom, rgba(57, 175, 154, 1) 0%,
rgba(107, 198, 186, 1) 100%);
}
button.center-block:focus {
outline: none;
border-color: green;
}
canvas {
width: 200px;
}
#dBtn {
display: none;
}
h1#heading {
font-family: 'Major Mono Display', monospace;
}
body {
background-color: #ebf1fa;
justify-content: center;
font-family: 'VT323', monospace;
font-size: 1.5rem;
color: black;
margin: 20px;
text-align: center;
}
h1 {
font-weight: normal;
font-size: 40px;
font-weight: normal;
text-transform: uppercase;
text-align: center;
}
h2 {
text-align: center;
color: #46a294;
font-size: 28px;
width: 100%;
margin: 10px 10;
position: relative;
line-height: 58px;
font-weight: 400;
}
h2:before {
content: " ";
position: absolute;
left: 50%;
bottom: 0;
width: 100px;
height: 2px;
font-weight: bold;
background-color: #2079df;
margin-left: -50px;
}
label {
color: #858585;
font-weight: 600;
font-size: 14px;
padding-left: 20px;
}
.h1, .h2, .h3, .h4, .h5, .h6, h1, h2, h3, h4, h5, h6 {
font-family: system-ui;
}
stylesheet.css
.btn-payment-payment {
background-color: #175D7B;
color: white;
font-size: 13px;
border-radius: 6px;
padding-left: 25px;
padding-right: 25px;
padding-top: 4px;
padding-bottom: 4px;
font-weight: 400;
margin-left: -30px!important;
}
stylesheet.css
.btn-enquiry {
background-color: #EBEBEB;
color: black;
font-size: 13px;
border-radius: 6px;
padding-left: 25px;
padding-right: 25px;
padding-top: 4px;
padding-bottom: 4px;
font-weight: 400;
margin-right: 10px!important;
} */
/* .bg {
The image used
background: url("/assets/img/Loop-twinkle.gif");
Full height
height: 100%;
width:100%;
Center and scale the image nicely
background-position: center;
background-repeat: no-repeat;
background-size: cover;
}
.bg1 {
The image used
background-image: url("/assets/img/greater-chennai-corporation.jpg");
Full height
height: 100%;
width:100%;
Center and scale the image nicely
background-position: center;
background-repeat: no-repeat;
background-size: cover;
} */

1260
src/main/resources/static/assets/css/style.css
File diff suppressed because it is too large
View File

BIN
src/main/resources/static/assets/img/Chennai_Corporation_Logo.png

After

Width: 328  |  Height: 438  |  Size: 188 KiB

BIN
src/main/resources/static/assets/img/Loop-twinkle.gif

After

Width: 1920  |  Height: 823  |  Size: 2.1 MiB

BIN
src/main/resources/static/assets/img/Ripon_Building.gif

After

Width: 1920  |  Height: 1080  |  Size: 12 MiB

BIN
src/main/resources/static/assets/img/apple-touch-icon.png

After

Width: 180  |  Height: 180  |  Size: 1.2 KiB

BIN
src/main/resources/static/assets/img/card.jpg

After

Width: 1024  |  Height: 768  |  Size: 162 KiB

BIN
src/main/resources/static/assets/img/favicon.png

After

Width: 328  |  Height: 438  |  Size: 188 KiB

BIN
src/main/resources/static/assets/img/favicon_old.png

After

Width: 328  |  Height: 438  |  Size: 188 KiB

BIN
src/main/resources/static/assets/img/greater-chennai-corporation.jpg

After

Width: 1425  |  Height: 646  |  Size: 196 KiB

BIN
src/main/resources/static/assets/img/greater-chennai-corporation.png

After

Width: 1425  |  Height: 646  |  Size: 373 KiB

BIN
src/main/resources/static/assets/img/logo.png

After

Width: 328  |  Height: 438  |  Size: 188 KiB

BIN
src/main/resources/static/assets/img/logo_old.png

After

Width: 49  |  Height: 52  |  Size: 738 B

BIN
src/main/resources/static/assets/img/messages-1.jpg

After

Width: 120  |  Height: 120  |  Size: 6.3 KiB

BIN
src/main/resources/static/assets/img/messages-2.jpg

After

Width: 120  |  Height: 120  |  Size: 5.4 KiB

BIN
src/main/resources/static/assets/img/messages-3.jpg

After

Width: 383  |  Height: 383  |  Size: 21 KiB

BIN
src/main/resources/static/assets/img/news-1.jpg

After

Width: 1024  |  Height: 768  |  Size: 82 KiB

BIN
src/main/resources/static/assets/img/news-2.jpg

After

Width: 1024  |  Height: 768  |  Size: 76 KiB

BIN
src/main/resources/static/assets/img/news-3.jpg

After

Width: 1024  |  Height: 768  |  Size: 69 KiB

BIN
src/main/resources/static/assets/img/news-4.jpg

After

Width: 1024  |  Height: 768  |  Size: 112 KiB

BIN
src/main/resources/static/assets/img/news-5.jpg

After

Width: 1024  |  Height: 768  |  Size: 91 KiB

1
src/main/resources/static/assets/img/not-found.svg
File diff suppressed because it is too large
View File

BIN
src/main/resources/static/assets/img/product-1.jpg

After

Width: 500  |  Height: 500  |  Size: 17 KiB

BIN
src/main/resources/static/assets/img/product-2.jpg

After

Width: 500  |  Height: 500  |  Size: 28 KiB

BIN
src/main/resources/static/assets/img/product-3.jpg

After

Width: 500  |  Height: 500  |  Size: 14 KiB

BIN
src/main/resources/static/assets/img/product-4.jpg

After

Width: 500  |  Height: 500  |  Size: 9.0 KiB

BIN
src/main/resources/static/assets/img/product-5.jpg

After

Width: 500  |  Height: 500  |  Size: 12 KiB

BIN
src/main/resources/static/assets/img/profile-img.jpg

After

Width: 120  |  Height: 120  |  Size: 4.8 KiB

BIN
src/main/resources/static/assets/img/slides-1.jpg

After

Width: 1024  |  Height: 683  |  Size: 86 KiB

BIN
src/main/resources/static/assets/img/slides-2.jpg

After

Width: 1024  |  Height: 683  |  Size: 69 KiB

BIN
src/main/resources/static/assets/img/slides-3.jpg

After

Width: 1024  |  Height: 683  |  Size: 96 KiB

BIN
src/main/resources/static/assets/img/tamilnadu-logo.png

After

Width: 790  |  Height: 867  |  Size: 166 KiB

BIN
src/main/resources/static/assets/img/user-profile.png

After

Width: 980  |  Height: 966  |  Size: 35 KiB

90
src/main/resources/static/assets/js/jquery.qrcode.min.js

@ -0,0 +1,90 @@
(function(r) {
r.fn.qrcode = function(h) {
var s; function u(a) { this.mode = s; this.data = a } function o(a, c) { this.typeNumber = a; this.errorCorrectLevel = c; this.modules = null; this.moduleCount = 0; this.dataCache = null; this.dataList = [] } function q(a, c) { if (void 0 == a.length) throw Error(a.length + "/" + c); for (var d = 0; d < a.length && 0 == a[d];)d++; this.num = Array(a.length - d + c); for (var b = 0; b < a.length - d; b++)this.num[b] = a[b + d] } function p(a, c) { this.totalCount = a; this.dataCount = c } function t() { this.buffer = []; this.length = 0 } u.prototype = {
getLength: function() { return this.data.length },
write: function(a) { for (var c = 0; c < this.data.length; c++)a.put(this.data.charCodeAt(c), 8) }
}; o.prototype = {
addData: function(a) { this.dataList.push(new u(a)); this.dataCache = null }, isDark: function(a, c) { if (0 > a || this.moduleCount <= a || 0 > c || this.moduleCount <= c) throw Error(a + "," + c); return this.modules[a][c] }, getModuleCount: function() { return this.moduleCount }, make: function() {
if (1 > this.typeNumber) {
for (var a = 1, a = 1; 40 > a; a++) {
for (var c = p.getRSBlocks(a, this.errorCorrectLevel), d = new t, b = 0, e = 0; e < c.length; e++)b += c[e].dataCount;
for (e = 0; e < this.dataList.length; e++)c = this.dataList[e], d.put(c.mode, 4), d.put(c.getLength(), j.getLengthInBits(c.mode, a)), c.write(d); if (d.getLengthInBits() <= 8 * b) break
} this.typeNumber = a
} this.makeImpl(!1, this.getBestMaskPattern())
}, makeImpl: function(a, c) {
this.moduleCount = 4 * this.typeNumber + 17; this.modules = Array(this.moduleCount); for (var d = 0; d < this.moduleCount; d++) { this.modules[d] = Array(this.moduleCount); for (var b = 0; b < this.moduleCount; b++)this.modules[d][b] = null } this.setupPositionProbePattern(0, 0); this.setupPositionProbePattern(this.moduleCount -
7, 0); this.setupPositionProbePattern(0, this.moduleCount - 7); this.setupPositionAdjustPattern(); this.setupTimingPattern(); this.setupTypeInfo(a, c); 7 <= this.typeNumber && this.setupTypeNumber(a); null == this.dataCache && (this.dataCache = o.createData(this.typeNumber, this.errorCorrectLevel, this.dataList)); this.mapData(this.dataCache, c)
}, setupPositionProbePattern: function(a, c) {
for (var d = -1; 7 >= d; d++)if (!(-1 >= a + d || this.moduleCount <= a + d)) for (var b = -1; 7 >= b; b++)-1 >= c + b || this.moduleCount <= c + b || (this.modules[a + d][c + b] =
0 <= d && 6 >= d && (0 == b || 6 == b) || 0 <= b && 6 >= b && (0 == d || 6 == d) || 2 <= d && 4 >= d && 2 <= b && 4 >= b ? !0 : !1)
}, getBestMaskPattern: function() { for (var a = 0, c = 0, d = 0; 8 > d; d++) { this.makeImpl(!0, d); var b = j.getLostPoint(this); if (0 == d || a > b) a = b, c = d } return c }, createMovieClip: function(a, c, d) { a = a.createEmptyMovieClip(c, d); this.make(); for (c = 0; c < this.modules.length; c++)for (var d = 1 * c, b = 0; b < this.modules[c].length; b++) { var e = 1 * b; this.modules[c][b] && (a.beginFill(0, 100), a.moveTo(e, d), a.lineTo(e + 1, d), a.lineTo(e + 1, d + 1), a.lineTo(e, d + 1), a.endFill()) } return a },
setupTimingPattern: function() { for (var a = 8; a < this.moduleCount - 8; a++)null == this.modules[a][6] && (this.modules[a][6] = 0 == a % 2); for (a = 8; a < this.moduleCount - 8; a++)null == this.modules[6][a] && (this.modules[6][a] = 0 == a % 2) }, setupPositionAdjustPattern: function() { for (var a = j.getPatternPosition(this.typeNumber), c = 0; c < a.length; c++)for (var d = 0; d < a.length; d++) { var b = a[c], e = a[d]; if (null == this.modules[b][e]) for (var f = -2; 2 >= f; f++)for (var i = -2; 2 >= i; i++)this.modules[b + f][e + i] = -2 == f || 2 == f || -2 == i || 2 == i || 0 == f && 0 == i ? !0 : !1 } }, setupTypeNumber: function(a) {
for (var c =
j.getBCHTypeNumber(this.typeNumber), d = 0; 18 > d; d++) { var b = !a && 1 == (c >> d & 1); this.modules[Math.floor(d / 3)][d % 3 + this.moduleCount - 8 - 3] = b } for (d = 0; 18 > d; d++)b = !a && 1 == (c >> d & 1), this.modules[d % 3 + this.moduleCount - 8 - 3][Math.floor(d / 3)] = b
}, setupTypeInfo: function(a, c) {
for (var d = j.getBCHTypeInfo(this.errorCorrectLevel << 3 | c), b = 0; 15 > b; b++) { var e = !a && 1 == (d >> b & 1); 6 > b ? this.modules[b][8] = e : 8 > b ? this.modules[b + 1][8] = e : this.modules[this.moduleCount - 15 + b][8] = e } for (b = 0; 15 > b; b++)e = !a && 1 == (d >> b & 1), 8 > b ? this.modules[8][this.moduleCount -
b - 1] = e : 9 > b ? this.modules[8][15 - b - 1 + 1] = e : this.modules[8][15 - b - 1] = e; this.modules[this.moduleCount - 8][8] = !a
}, mapData: function(a, c) { for (var d = -1, b = this.moduleCount - 1, e = 7, f = 0, i = this.moduleCount - 1; 0 < i; i -= 2)for (6 == i && i--; ;) { for (var g = 0; 2 > g; g++)if (null == this.modules[b][i - g]) { var n = !1; f < a.length && (n = 1 == (a[f] >>> e & 1)); j.getMask(c, b, i - g) && (n = !n); this.modules[b][i - g] = n; e--; -1 == e && (f++, e = 7) } b += d; if (0 > b || this.moduleCount <= b) { b -= d; d = -d; break } } }
}; o.PAD0 = 236; o.PAD1 = 17; o.createData = function(a, c, d) {
for (var c = p.getRSBlocks(a,
c), b = new t, e = 0; e < d.length; e++) { var f = d[e]; b.put(f.mode, 4); b.put(f.getLength(), j.getLengthInBits(f.mode, a)); f.write(b) } for (e = a = 0; e < c.length; e++)a += c[e].dataCount; if (b.getLengthInBits() > 8 * a) throw Error("code length overflow. (" + b.getLengthInBits() + ">" + 8 * a + ")"); for (b.getLengthInBits() + 4 <= 8 * a && b.put(0, 4); 0 != b.getLengthInBits() % 8;)b.putBit(!1); for (; !(b.getLengthInBits() >= 8 * a);) { b.put(o.PAD0, 8); if (b.getLengthInBits() >= 8 * a) break; b.put(o.PAD1, 8) } return o.createBytes(b, c)
}; o.createBytes = function(a, c) {
for (var d =
0, b = 0, e = 0, f = Array(c.length), i = Array(c.length), g = 0; g < c.length; g++) { var n = c[g].dataCount, h = c[g].totalCount - n, b = Math.max(b, n), e = Math.max(e, h); f[g] = Array(n); for (var k = 0; k < f[g].length; k++)f[g][k] = 255 & a.buffer[k + d]; d += n; k = j.getErrorCorrectPolynomial(h); n = (new q(f[g], k.getLength() - 1)).mod(k); i[g] = Array(k.getLength() - 1); for (k = 0; k < i[g].length; k++)h = k + n.getLength() - i[g].length, i[g][k] = 0 <= h ? n.get(h) : 0 } for (k = g = 0; k < c.length; k++)g += c[k].totalCount; d = Array(g); for (k = n = 0; k < b; k++)for (g = 0; g < c.length; g++)k < f[g].length &&
(d[n++] = f[g][k]); for (k = 0; k < e; k++)for (g = 0; g < c.length; g++)k < i[g].length && (d[n++] = i[g][k]); return d
}; s = 4; for (var j = {
PATTERN_POSITION_TABLE: [[], [6, 18], [6, 22], [6, 26], [6, 30], [6, 34], [6, 22, 38], [6, 24, 42], [6, 26, 46], [6, 28, 50], [6, 30, 54], [6, 32, 58], [6, 34, 62], [6, 26, 46, 66], [6, 26, 48, 70], [6, 26, 50, 74], [6, 30, 54, 78], [6, 30, 56, 82], [6, 30, 58, 86], [6, 34, 62, 90], [6, 28, 50, 72, 94], [6, 26, 50, 74, 98], [6, 30, 54, 78, 102], [6, 28, 54, 80, 106], [6, 32, 58, 84, 110], [6, 30, 58, 86, 114], [6, 34, 62, 90, 118], [6, 26, 50, 74, 98, 122], [6, 30, 54, 78, 102, 126], [6, 26, 52,
78, 104, 130], [6, 30, 56, 82, 108, 134], [6, 34, 60, 86, 112, 138], [6, 30, 58, 86, 114, 142], [6, 34, 62, 90, 118, 146], [6, 30, 54, 78, 102, 126, 150], [6, 24, 50, 76, 102, 128, 154], [6, 28, 54, 80, 106, 132, 158], [6, 32, 58, 84, 110, 136, 162], [6, 26, 54, 82, 110, 138, 166], [6, 30, 58, 86, 114, 142, 170]], G15: 1335, G18: 7973, G15_MASK: 21522, getBCHTypeInfo: function(a) { for (var c = a << 10; 0 <= j.getBCHDigit(c) - j.getBCHDigit(j.G15);)c ^= j.G15 << j.getBCHDigit(c) - j.getBCHDigit(j.G15); return (a << 10 | c) ^ j.G15_MASK }, getBCHTypeNumber: function(a) {
for (var c = a << 12; 0 <= j.getBCHDigit(c) -
j.getBCHDigit(j.G18);)c ^= j.G18 << j.getBCHDigit(c) - j.getBCHDigit(j.G18); return a << 12 | c
}, getBCHDigit: function(a) { for (var c = 0; 0 != a;)c++, a >>>= 1; return c }, getPatternPosition: function(a) { return j.PATTERN_POSITION_TABLE[a - 1] }, getMask: function(a, c, d) {
switch (a) {
case 0: return 0 == (c + d) % 2; case 1: return 0 == c % 2; case 2: return 0 == d % 3; case 3: return 0 == (c + d) % 3; case 4: return 0 == (Math.floor(c / 2) + Math.floor(d / 3)) % 2; case 5: return 0 == c * d % 2 + c * d % 3; case 6: return 0 == (c * d % 2 + c * d % 3) % 2; case 7: return 0 == (c * d % 3 + (c + d) % 2) % 2; default: throw Error("bad maskPattern:" +
a);
}
}, getErrorCorrectPolynomial: function(a) { for (var c = new q([1], 0), d = 0; d < a; d++)c = c.multiply(new q([1, l.gexp(d)], 0)); return c }, getLengthInBits: function(a, c) {
if (1 <= c && 10 > c) switch (a) { case 1: return 10; case 2: return 9; case s: return 8; case 8: return 8; default: throw Error("mode:" + a); } else if (27 > c) switch (a) { case 1: return 12; case 2: return 11; case s: return 16; case 8: return 10; default: throw Error("mode:" + a); } else if (41 > c) switch (a) {
case 1: return 14; case 2: return 13; case s: return 16; case 8: return 12; default: throw Error("mode:" +
a);
} else throw Error("type:" + c);
}, getLostPoint: function(a) {
for (var c = a.getModuleCount(), d = 0, b = 0; b < c; b++)for (var e = 0; e < c; e++) { for (var f = 0, i = a.isDark(b, e), g = -1; 1 >= g; g++)if (!(0 > b + g || c <= b + g)) for (var h = -1; 1 >= h; h++)0 > e + h || c <= e + h || 0 == g && 0 == h || i == a.isDark(b + g, e + h) && f++; 5 < f && (d += 3 + f - 5) } for (b = 0; b < c - 1; b++)for (e = 0; e < c - 1; e++)if (f = 0, a.isDark(b, e) && f++, a.isDark(b + 1, e) && f++, a.isDark(b, e + 1) && f++, a.isDark(b + 1, e + 1) && f++, 0 == f || 4 == f) d += 3; for (b = 0; b < c; b++)for (e = 0; e < c - 6; e++)a.isDark(b, e) && !a.isDark(b, e + 1) && a.isDark(b, e +
2) && a.isDark(b, e + 3) && a.isDark(b, e + 4) && !a.isDark(b, e + 5) && a.isDark(b, e + 6) && (d += 40); for (e = 0; e < c; e++)for (b = 0; b < c - 6; b++)a.isDark(b, e) && !a.isDark(b + 1, e) && a.isDark(b + 2, e) && a.isDark(b + 3, e) && a.isDark(b + 4, e) && !a.isDark(b + 5, e) && a.isDark(b + 6, e) && (d += 40); for (e = f = 0; e < c; e++)for (b = 0; b < c; b++)a.isDark(b, e) && f++; a = Math.abs(100 * f / c / c - 50) / 5; return d + 10 * a
}
}, l = {
glog: function(a) { if (1 > a) throw Error("glog(" + a + ")"); return l.LOG_TABLE[a] }, gexp: function(a) { for (; 0 > a;)a += 255; for (; 256 <= a;)a -= 255; return l.EXP_TABLE[a] }, EXP_TABLE: Array(256),
LOG_TABLE: Array(256)
}, m = 0; 8 > m; m++)l.EXP_TABLE[m] = 1 << m; for (m = 8; 256 > m; m++)l.EXP_TABLE[m] = l.EXP_TABLE[m - 4] ^ l.EXP_TABLE[m - 5] ^ l.EXP_TABLE[m - 6] ^ l.EXP_TABLE[m - 8]; for (m = 0; 255 > m; m++)l.LOG_TABLE[l.EXP_TABLE[m]] = m; q.prototype = {
get: function(a) { return this.num[a] }, getLength: function() { return this.num.length }, multiply: function(a) { for (var c = Array(this.getLength() + a.getLength() - 1), d = 0; d < this.getLength(); d++)for (var b = 0; b < a.getLength(); b++)c[d + b] ^= l.gexp(l.glog(this.get(d)) + l.glog(a.get(b))); return new q(c, 0) }, mod: function(a) {
if (0 >
this.getLength() - a.getLength()) return this; for (var c = l.glog(this.get(0)) - l.glog(a.get(0)), d = Array(this.getLength()), b = 0; b < this.getLength(); b++)d[b] = this.get(b); for (b = 0; b < a.getLength(); b++)d[b] ^= l.gexp(l.glog(a.get(b)) + c); return (new q(d, 0)).mod(a)
}
}; p.RS_BLOCK_TABLE = [[1, 26, 19], [1, 26, 16], [1, 26, 13], [1, 26, 9], [1, 44, 34], [1, 44, 28], [1, 44, 22], [1, 44, 16], [1, 70, 55], [1, 70, 44], [2, 35, 17], [2, 35, 13], [1, 100, 80], [2, 50, 32], [2, 50, 24], [4, 25, 9], [1, 134, 108], [2, 67, 43], [2, 33, 15, 2, 34, 16], [2, 33, 11, 2, 34, 12], [2, 86, 68], [4, 43, 27],
[4, 43, 19], [4, 43, 15], [2, 98, 78], [4, 49, 31], [2, 32, 14, 4, 33, 15], [4, 39, 13, 1, 40, 14], [2, 121, 97], [2, 60, 38, 2, 61, 39], [4, 40, 18, 2, 41, 19], [4, 40, 14, 2, 41, 15], [2, 146, 116], [3, 58, 36, 2, 59, 37], [4, 36, 16, 4, 37, 17], [4, 36, 12, 4, 37, 13], [2, 86, 68, 2, 87, 69], [4, 69, 43, 1, 70, 44], [6, 43, 19, 2, 44, 20], [6, 43, 15, 2, 44, 16], [4, 101, 81], [1, 80, 50, 4, 81, 51], [4, 50, 22, 4, 51, 23], [3, 36, 12, 8, 37, 13], [2, 116, 92, 2, 117, 93], [6, 58, 36, 2, 59, 37], [4, 46, 20, 6, 47, 21], [7, 42, 14, 4, 43, 15], [4, 133, 107], [8, 59, 37, 1, 60, 38], [8, 44, 20, 4, 45, 21], [12, 33, 11, 4, 34, 12], [3, 145, 115, 1, 146,
116], [4, 64, 40, 5, 65, 41], [11, 36, 16, 5, 37, 17], [11, 36, 12, 5, 37, 13], [5, 109, 87, 1, 110, 88], [5, 65, 41, 5, 66, 42], [5, 54, 24, 7, 55, 25], [11, 36, 12], [5, 122, 98, 1, 123, 99], [7, 73, 45, 3, 74, 46], [15, 43, 19, 2, 44, 20], [3, 45, 15, 13, 46, 16], [1, 135, 107, 5, 136, 108], [10, 74, 46, 1, 75, 47], [1, 50, 22, 15, 51, 23], [2, 42, 14, 17, 43, 15], [5, 150, 120, 1, 151, 121], [9, 69, 43, 4, 70, 44], [17, 50, 22, 1, 51, 23], [2, 42, 14, 19, 43, 15], [3, 141, 113, 4, 142, 114], [3, 70, 44, 11, 71, 45], [17, 47, 21, 4, 48, 22], [9, 39, 13, 16, 40, 14], [3, 135, 107, 5, 136, 108], [3, 67, 41, 13, 68, 42], [15, 54, 24, 5, 55, 25], [15,
43, 15, 10, 44, 16], [4, 144, 116, 4, 145, 117], [17, 68, 42], [17, 50, 22, 6, 51, 23], [19, 46, 16, 6, 47, 17], [2, 139, 111, 7, 140, 112], [17, 74, 46], [7, 54, 24, 16, 55, 25], [34, 37, 13], [4, 151, 121, 5, 152, 122], [4, 75, 47, 14, 76, 48], [11, 54, 24, 14, 55, 25], [16, 45, 15, 14, 46, 16], [6, 147, 117, 4, 148, 118], [6, 73, 45, 14, 74, 46], [11, 54, 24, 16, 55, 25], [30, 46, 16, 2, 47, 17], [8, 132, 106, 4, 133, 107], [8, 75, 47, 13, 76, 48], [7, 54, 24, 22, 55, 25], [22, 45, 15, 13, 46, 16], [10, 142, 114, 2, 143, 115], [19, 74, 46, 4, 75, 47], [28, 50, 22, 6, 51, 23], [33, 46, 16, 4, 47, 17], [8, 152, 122, 4, 153, 123], [22, 73, 45,
3, 74, 46], [8, 53, 23, 26, 54, 24], [12, 45, 15, 28, 46, 16], [3, 147, 117, 10, 148, 118], [3, 73, 45, 23, 74, 46], [4, 54, 24, 31, 55, 25], [11, 45, 15, 31, 46, 16], [7, 146, 116, 7, 147, 117], [21, 73, 45, 7, 74, 46], [1, 53, 23, 37, 54, 24], [19, 45, 15, 26, 46, 16], [5, 145, 115, 10, 146, 116], [19, 75, 47, 10, 76, 48], [15, 54, 24, 25, 55, 25], [23, 45, 15, 25, 46, 16], [13, 145, 115, 3, 146, 116], [2, 74, 46, 29, 75, 47], [42, 54, 24, 1, 55, 25], [23, 45, 15, 28, 46, 16], [17, 145, 115], [10, 74, 46, 23, 75, 47], [10, 54, 24, 35, 55, 25], [19, 45, 15, 35, 46, 16], [17, 145, 115, 1, 146, 116], [14, 74, 46, 21, 75, 47], [29, 54, 24, 19,
55, 25], [11, 45, 15, 46, 46, 16], [13, 145, 115, 6, 146, 116], [14, 74, 46, 23, 75, 47], [44, 54, 24, 7, 55, 25], [59, 46, 16, 1, 47, 17], [12, 151, 121, 7, 152, 122], [12, 75, 47, 26, 76, 48], [39, 54, 24, 14, 55, 25], [22, 45, 15, 41, 46, 16], [6, 151, 121, 14, 152, 122], [6, 75, 47, 34, 76, 48], [46, 54, 24, 10, 55, 25], [2, 45, 15, 64, 46, 16], [17, 152, 122, 4, 153, 123], [29, 74, 46, 14, 75, 47], [49, 54, 24, 10, 55, 25], [24, 45, 15, 46, 46, 16], [4, 152, 122, 18, 153, 123], [13, 74, 46, 32, 75, 47], [48, 54, 24, 14, 55, 25], [42, 45, 15, 32, 46, 16], [20, 147, 117, 4, 148, 118], [40, 75, 47, 7, 76, 48], [43, 54, 24, 22, 55, 25], [10,
45, 15, 67, 46, 16], [19, 148, 118, 6, 149, 119], [18, 75, 47, 31, 76, 48], [34, 54, 24, 34, 55, 25], [20, 45, 15, 61, 46, 16]]; p.getRSBlocks = function(a, c) { var d = p.getRsBlockTable(a, c); if (void 0 == d) throw Error("bad rs block @ typeNumber:" + a + "/errorCorrectLevel:" + c); for (var b = d.length / 3, e = [], f = 0; f < b; f++)for (var h = d[3 * f + 0], g = d[3 * f + 1], j = d[3 * f + 2], l = 0; l < h; l++)e.push(new p(g, j)); return e }; p.getRsBlockTable = function(a, c) {
switch (c) {
case 1: return p.RS_BLOCK_TABLE[4 * (a - 1) + 0]; case 0: return p.RS_BLOCK_TABLE[4 * (a - 1) + 1]; case 3: return p.RS_BLOCK_TABLE[4 *
(a - 1) + 2]; case 2: return p.RS_BLOCK_TABLE[4 * (a - 1) + 3]
}
}; t.prototype = { get: function(a) { return 1 == (this.buffer[Math.floor(a / 8)] >>> 7 - a % 8 & 1) }, put: function(a, c) { for (var d = 0; d < c; d++)this.putBit(1 == (a >>> c - d - 1 & 1)) }, getLengthInBits: function() { return this.length }, putBit: function(a) { var c = Math.floor(this.length / 8); this.buffer.length <= c && this.buffer.push(0); a && (this.buffer[c] |= 128 >>> this.length % 8); this.length++ } }; "string" === typeof h && (h = { text: h }); h = r.extend({}, {
render: "canvas", width: 256, height: 256, typeNumber: -1,
correctLevel: 2, background: "#ffffff", foreground: "#000000"
}, h); return this.each(function() {
var a; if ("canvas" == h.render) {
a = new o(h.typeNumber, h.correctLevel); a.addData(h.text); a.make(); var c = document.createElement("canvas"); c.width = h.width; c.height = h.height; for (var d = c.getContext("2d"), b = h.width / a.getModuleCount(), e = h.height / a.getModuleCount(), f = 0; f < a.getModuleCount(); f++)for (var i = 0; i < a.getModuleCount(); i++) {
d.fillStyle = a.isDark(f, i) ? h.foreground : h.background; var g = Math.ceil((i + 1) * b) - Math.floor(i * b),
j = Math.ceil((f + 1) * b) - Math.floor(f * b); d.fillRect(Math.round(i * b), Math.round(f * e), g, j)
}
} else {
a = new o(h.typeNumber, h.correctLevel); a.addData(h.text); a.make(); c = r("<table></table>").css("width", h.width + "px").css("height", h.height + "px").css("border", "0px").css("border-collapse", "collapse").css("background-color", h.background); d = h.width / a.getModuleCount(); b = h.height / a.getModuleCount(); for (e = 0; e < a.getModuleCount(); e++) {
f = r("<tr></tr>").css("height", b + "px").appendTo(c); for (i = 0; i < a.getModuleCount(); i++)r("<td></td>").css("width",
d + "px").css("background-color", a.isDark(e, i) ? h.foreground : h.background).appendTo(f)
}
} a = c; jQuery(a).appendTo(this)
})
}
});

213
src/main/resources/static/assets/js/local.js

@ -0,0 +1,213 @@
//Restrict the Text field to only accept numeric values
$(function(){
$('#mobileNo').keypress(function(e) {
if(isNaN(this.value+""+String.fromCharCode(e.charCode))) return false;
})
.on("cut copy paste",function(e){
e.preventDefault();
});
$('#otp').keypress(function(e) {
if(isNaN(this.value+""+String.fromCharCode(e.charCode))) return false;
})
.on("cut copy paste",function(e){
e.preventDefault();
});
getZoneNo();
});
//Getting Zone No
function getZoneNo() {
$.ajax({
type: "GET",
url: '/qr-feedback/api/getZoneNo',
dataType: 'json',
success: function(bodyMessage) {
var tempJson = bodyMessage['ZoneDetailsResult'];
//alert("tempJson---:"+tempJson);
for (var i = 0; i < tempJson.length; i++) {
var tempJsonValue = tempJson[i]['ZoneId'];
//var tempJsonValue = tempJson[i]['ZoneName'].replace('N', '');
var tempJsonLabel = tempJson[i]['ZoneName'].replace('N', '');
$('#zoneNo').append("<option value='" + tempJsonValue + "'>" + tempJsonLabel + "</option>");
}
}, error: function(e, ts, et)
{
// alert(ts)
}
});
}
//Getting Div
function getDiv($this) {
$('#divNo option:not(:first)').remove();
var zoneId = $this.value;
alert("zoneId---:"+zoneId);
$.ajax({
type: "GET",
url: '/qr-feedback/api/getDiv',
data: {'zoneId':zoneId},
dataType: 'json',
success: function(bodyMessage) {
var tempJson = bodyMessage['DivisionDetailsResult'];
for (var i = 0; i < tempJson.length; i++) {
var tempJsonValue = tempJson[i]['DivisionName'].replace('N', '');
//var tempJsonValue = tempJson[i]['DivisionId'];
var tempJsonLabel = tempJson[i]['DivisionName'].replace('N', '');
$('#divNo').append("<option value='" + tempJsonValue + "'>" + tempJsonLabel + "</option>");
}
}, error: function(e, ts, et)
{
// alert(ts)
}
});
}
//Getting Area
function getArea($this) {
$('#assetArea option:not(:first)').remove();
var divId = $this.value;
alert("DIVIDION---"+divId);
$.ajax({
type: "GET",
url: '/qr-feedback/api/getArea',
data: {'divId':divId},
dataType: 'json',
success: function(bodyMessage) {
var tempJson = bodyMessage['AreaDetailsResult'];
for (var i = 0; i < tempJson.length; i++) {
var tempJsonValue = tempJson[i]['AreaId'];
var tempJsonLabel = tempJson[i]['AreaName'];
$('#assetArea').append("<option value='" + tempJsonValue + "'>" + tempJsonLabel + "</option>");
}
}, error: function(e, ts, et)
{
// alert(ts)
}
});
}
//Getting Location
function getLocation($this) {
$('#assetLocation option:not(:first)').remove();
var areaId = $this.value;
$.ajax({
type: "GET",
url: '/qr-feedback/api/getLocation',
data: {'areaId':areaId},
dataType: 'json',
success: function(bodyMessage) {
var tempJson = bodyMessage['LocationDetailsResult'];
for (var i = 0; i < tempJson.length; i++) {
var tempJsonValue = tempJson[i]['LocationId'];
var tempJsonLabel = tempJson[i]['LocationName'];
$('#assetLocation').append("<option value='" + tempJsonValue + "'>" + tempJsonLabel + "</option>");
}
}, error: function(e, ts, et)
{
// alert(ts)
}
});
}
//Getting Street
function getStreet($this) {
$('#assetStreet option:not(:first)').remove();
var locationId = $this.value;
$.ajax({
type: "GET",
url: '/qr-feedback/api/getStreet',
data: {'locationId':locationId},
dataType: 'json',
success: function(bodyMessage) {
var tempJson = bodyMessage['StreetDetailsResult'];
for (var i = 0; i < tempJson.length; i++) {
var tempJsonValue = tempJson[i]['StreetId'];
var tempJsonLabel = tempJson[i]['StreetName'];
$('#assetStreet').append("<option value='" + tempJsonValue + "'>" + tempJsonLabel + "</option>");
}
}, error: function(e, ts, et)
{
// alert(ts)
}
});
}
//Sending OTP
function sendOtp(){
var mobileNo = $("#mobileNo").val();
$.ajax({
type: "GET",
url: '/qr-feedback/feedback/sendOtp',
data: {'mobileNo':mobileNo},
dataType: 'json',
success: function(bodyMessage) {
if(bodyMessage!="Error"){
alert("OTP Send Successfullyd!!!");
}else{
alert("OTP Not Send!!!");
}
}
});
}
//Verify OTP
function verifyOtp(){
var otp = $("#otp").val();
$.ajax({
type: "GET",
url: '/qr-feedback/feedback/verifyOtp',
data: {'otp':otp},
dataType: 'json',
success: function(bodyMessage) {
alert("OTP is Verified!!!");
if(bodyMessage!="Error"){
alert("OTP is Verified!!!");
}else{
alert("OTP is Incorrect!!!");
}
}
});
}
//Getting Master Name
/*function getMasterName() {
$.ajax({
type: "GET",
url: '/qr-feedback/master/getMasterName',
dataType: 'json',
success: function(bodyMessage) {
var tempJson = bodyMessage['obj'];
alert(tempJson);
for (var i = 0; i < tempJson.length; i++) {
var tempJsonValue = tempJson[i]['masterId'];
var tempJsonLabel = tempJson[i]['masterName'];
$('#masterName').append("<option value='" + tempJsonValue + "'>" + tempJsonLabel + "</option>");
}
}, error: function(e, ts, et)
{
alert(ts)
}
});
}*/

315
src/main/resources/static/assets/js/main.js

@ -0,0 +1,315 @@
(function() {
"use strict";
/**
* Easy selector helper function
*/
const select = (el, all = false) => {
el = el.trim()
if (all) {
return [...document.querySelectorAll(el)]
} else {
return document.querySelector(el)
}
}
/**
* Easy event listener function
*/
const on = (type, el, listener, all = false) => {
if (all) {
select(el, all).forEach(e => e.addEventListener(type, listener))
} else {
select(el, all).addEventListener(type, listener)
}
}
/**
* Easy on scroll event listener
*/
const onscroll = (el, listener) => {
el.addEventListener('scroll', listener)
}
/**
* Sidebar toggle
*/
if (select('.toggle-sidebar-btn')) {
on('click', '.toggle-sidebar-btn', function(e) {
select('body').classList.toggle('toggle-sidebar')
})
}
/**
* Search bar toggle
*/
if (select('.search-bar-toggle')) {
on('click', '.search-bar-toggle', function(e) {
select('.search-bar').classList.toggle('search-bar-show')
})
}
/**
* Navbar links active state on scroll
*/
let navbarlinks = select('#navbar .scrollto', true)
const navbarlinksActive = () => {
let position = window.scrollY + 200
navbarlinks.forEach(navbarlink => {
if (!navbarlink.hash) return
let section = select(navbarlink.hash)
if (!section) return
if (position >= section.offsetTop && position <= (section.offsetTop + section.offsetHeight)) {
navbarlink.classList.add('active')
} else {
navbarlink.classList.remove('active')
}
})
}
window.addEventListener('load', navbarlinksActive)
onscroll(document, navbarlinksActive)
/**
* Toggle .header-scrolled class to #header when page is scrolled
*/
let selectHeader = select('#header')
if (selectHeader) {
const headerScrolled = () => {
if (window.scrollY > 100) {
selectHeader.classList.add('header-scrolled')
} else {
selectHeader.classList.remove('header-scrolled')
}
}
window.addEventListener('load', headerScrolled)
onscroll(document, headerScrolled)
}
/**
* Back to top button
*/
let backtotop = select('.back-to-top')
if (backtotop) {
const toggleBacktotop = () => {
if (window.scrollY > 100) {
backtotop.classList.add('active')
} else {
backtotop.classList.remove('active')
}
}
window.addEventListener('load', toggleBacktotop)
onscroll(document, toggleBacktotop)
}
/**
* Initiate tooltips
*/
var tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"]'))
var tooltipList = tooltipTriggerList.map(function(tooltipTriggerEl) {
return new bootstrap.Tooltip(tooltipTriggerEl)
})
/**
* Initiate quill editors
*/
if (select('.quill-editor-default')) {
new Quill('.quill-editor-default', {
theme: 'snow'
});
}
if (select('.quill-editor-bubble')) {
new Quill('.quill-editor-bubble', {
theme: 'bubble'
});
}
if (select('.quill-editor-full')) {
new Quill(".quill-editor-full", {
modules: {
toolbar: [
[{
font: []
}, {
size: []
}],
["bold", "italic", "underline", "strike"],
[{
color: []
},
{
background: []
}
],
[{
script: "super"
},
{
script: "sub"
}
],
[{
list: "ordered"
},
{
list: "bullet"
},
{
indent: "-1"
},
{
indent: "+1"
}
],
["direction", {
align: []
}],
["link", "image", "video"],
["clean"]
]
},
theme: "snow"
});
}
/**
* Initiate TinyMCE Editor
*/
const useDarkMode = window.matchMedia('(prefers-color-scheme: dark)').matches;
const isSmallScreen = window.matchMedia('(max-width: 1023.5px)').matches;
tinymce.init({
selector: 'textarea.tinymce-editor',
plugins: 'preview importcss searchreplace autolink autosave save directionality code visualblocks visualchars fullscreen image link media template codesample table charmap pagebreak nonbreaking anchor insertdatetime advlist lists wordcount help charmap quickbars emoticons',
editimage_cors_hosts: ['picsum.photos'],
menubar: 'file edit view insert format tools table help',
toolbar: 'undo redo | bold italic underline strikethrough | fontfamily fontsize blocks | alignleft aligncenter alignright alignjustify | outdent indent | numlist bullist | forecolor backcolor removeformat | pagebreak | charmap emoticons | fullscreen preview save print | insertfile image media template link anchor codesample | ltr rtl',
toolbar_sticky: true,
toolbar_sticky_offset: isSmallScreen ? 102 : 108,
autosave_ask_before_unload: true,
autosave_interval: '30s',
autosave_prefix: '{path}{query}-{id}-',
autosave_restore_when_empty: false,
autosave_retention: '2m',
image_advtab: true,
link_list: [{
title: 'My page 1',
value: 'https://www.tiny.cloud'
},
{
title: 'My page 2',
value: 'http://www.moxiecode.com'
}
],
image_list: [{
title: 'My page 1',
value: 'https://www.tiny.cloud'
},
{
title: 'My page 2',
value: 'http://www.moxiecode.com'
}
],
image_class_list: [{
title: 'None',
value: ''
},
{
title: 'Some class',
value: 'class-name'
}
],
importcss_append: true,
file_picker_callback: (callback, value, meta) => {
/* Provide file and text for the link dialog */
if (meta.filetype === 'file') {
callback('https://www.google.com/logos/google.jpg', {
text: 'My text'
});
}
/* Provide image and alt text for the image dialog */
if (meta.filetype === 'image') {
callback('https://www.google.com/logos/google.jpg', {
alt: 'My alt text'
});
}
/* Provide alternative source and posted for the media dialog */
if (meta.filetype === 'media') {
callback('movie.mp4', {
source2: 'alt.ogg',
poster: 'https://www.google.com/logos/google.jpg'
});
}
},
templates: [{
title: 'New Table',
description: 'creates a new table',
content: '<div class="mceTmpl"><table width="98%%" border="0" cellspacing="0" cellpadding="0"><tr><th scope="col"> </th><th scope="col"> </th></tr><tr><td> </td><td> </td></tr></table></div>'
},
{
title: 'Starting my story',
description: 'A cure for writers block',
content: 'Once upon a time...'
},
{
title: 'New list with dates',
description: 'New List with dates',
content: '<div class="mceTmpl"><span class="cdate">cdate</span><br><span class="mdate">mdate</span><h2>My List</h2><ul><li></li><li></li></ul></div>'
}
],
template_cdate_format: '[Date Created (CDATE): %m/%d/%Y : %H:%M:%S]',
template_mdate_format: '[Date Modified (MDATE): %m/%d/%Y : %H:%M:%S]',
height: 600,
image_caption: true,
quickbars_selection_toolbar: 'bold italic | quicklink h2 h3 blockquote quickimage quicktable',
noneditable_class: 'mceNonEditable',
toolbar_mode: 'sliding',
contextmenu: 'link image table',
skin: useDarkMode ? 'oxide-dark' : 'oxide',
content_css: useDarkMode ? 'dark' : 'default',
content_style: 'body { font-family:Helvetica,Arial,sans-serif; font-size:16px }'
});
/**
* Initiate Bootstrap validation check
*/
var needsValidation = document.querySelectorAll('.needs-validation')
Array.prototype.slice.call(needsValidation)
.forEach(function(form) {
form.addEventListener('submit', function(event) {
if (!form.checkValidity()) {
event.preventDefault()
event.stopPropagation()
}
form.classList.add('was-validated')
}, false)
})
/**
* Initiate Datatables
*/
const datatables = select('.datatable', true)
datatables.forEach(datatable => {
new simpleDatatables.DataTable(datatable);
})
/**
* Autoresize echart charts
*/
const mainContainer = select('#main');
if (mainContainer) {
setTimeout(() => {
new ResizeObserver(function() {
select('.echart', true).forEach(getEchart => {
echarts.getInstanceByDom(getEchart).resize();
})
}).observe(mainContainer);
}, 200);
}
})();

202
src/main/resources/static/assets/json/GCC_DIVISION.geojson
File diff suppressed because it is too large
View File

23
src/main/resources/static/assets/json/GCC_ZONE.geojson
File diff suppressed because it is too large
View File

1
src/main/resources/static/assets/scss/Readme.txt

@ -0,0 +1 @@
The .scss (Sass) files are only avilable in the pro version. You can buy it from: https://bootstrapmade.com/nice-admin-bootstrap-admin-html-template/

14
src/main/resources/static/assets/vendor/apexcharts/apexcharts.min.js
File diff suppressed because it is too large
View File

63
src/main/resources/static/assets/vendor/apexcharts/locales/ar.json

@ -0,0 +1,63 @@
{
"name": "ar",
"options": {
"months": [
"يناير",
"فبراير",
"مارس",
"أبريل",
"مايو",
"يونيو",
"يوليو",
"أغسطس",
"سبتمبر",
"أكتوبر",
"نوفمبر",
"ديسمبر"
],
"shortMonths": [
"يناير",
"فبراير",
"مارس",
"أبريل",
"مايو",
"يونيو",
"يوليو",
"أغسطس",
"سبتمبر",
"أكتوبر",
"نوفمبر",
"ديسمبر"
],
"days": [
"الأحد",
"الإثنين",
"الثلاثاء",
"الأربعاء",
"الخميس",
"الجمعة",
"السبت"
],
"shortDays": [
"أحد",
"إثنين",
"ثلاثاء",
"أربعاء",
"خميس",
"جمعة",
"سبت"
],
"toolbar": {
"exportToSVG": "تحميل بصيغة SVG",
"exportToPNG": "تحميل بصيغة PNG",
"exportToCSV": "تحميل بصيغة CSV",
"menu": "القائمة",
"selection": "تحديد",
"selectionZoom": "تكبير التحديد",
"zoomIn": "تكبير",
"zoomOut": "تصغير",
"pan": "تحريك",
"reset": "إعادة التعيين"
}
}
}

55
src/main/resources/static/assets/vendor/apexcharts/locales/ca.json

@ -0,0 +1,55 @@
{
"name": "ca",
"options": {
"months": [
"Gener",
"Febrer",
"Març",
"Abril",
"Maig",
"Juny",
"Juliol",
"Agost",
"Setembre",
"Octubre",
"Novembre",
"Desembre"
],
"shortMonths": [
"Gen.",
"Febr.",
"Març",
"Abr.",
"Maig",
"Juny",
"Jul.",
"Ag.",
"Set.",
"Oct.",
"Nov.",
"Des."
],
"days": [
"Diumenge",
"Dilluns",
"Dimarts",
"Dimecres",
"Dijous",
"Divendres",
"Dissabte"
],
"shortDays": ["Dg", "Dl", "Dt", "Dc", "Dj", "Dv", "Ds"],
"toolbar": {
"exportToSVG": "Descarregar SVG",
"exportToPNG": "Descarregar PNG",
"exportToCSV": "Descarregar CSV",
"menu": "Menú",
"selection": "Seleccionar",
"selectionZoom": "Seleccionar Zoom",
"zoomIn": "Augmentar",
"zoomOut": "Disminuir",
"pan": "Navegació",
"reset": "Reiniciar Zoom"
}
}
}

55
src/main/resources/static/assets/vendor/apexcharts/locales/cs.json

@ -0,0 +1,55 @@
{
"name": "cs",
"options": {
"months": [
"Leden",
"Únor",
"Březen",
"Duben",
"Květen",
"Červen",
"Červenec",
"Srpen",
"Září",
"Říjen",
"Listopad",
"Prosinec"
],
"shortMonths": [
"Led",
"Úno",
"Bře",
"Dub",
"Kvě",
"Čvn",
"Čvc",
"Srp",
"Zář",
"Říj",
"Lis",
"Pro"
],
"days": [
"Neděle",
"Pondělí",
"Úterý",
"Středa",
"Čtvrtek",
"Pátek",
"Sobota"
],
"shortDays": ["Ne", "Po", "Út", "St", "Čt", "Pá", "So"],
"toolbar": {
"exportToSVG": "Stáhnout SVG",
"exportToPNG": "Stáhnout PNG",
"exportToCSV": "Stáhnout CSV",
"menu": "Menu",
"selection": "Vybrat",
"selectionZoom": "Zoom: Vybrat",
"zoomIn": "Zoom: Přiblížit",
"zoomOut": "Zoom: Oddálit",
"pan": "Přesouvat",
"reset": "Resetovat"
}
}
}

55
src/main/resources/static/assets/vendor/apexcharts/locales/de.json

@ -0,0 +1,55 @@
{
"name": "de",
"options": {
"months": [
"Januar",
"Februar",
"März",
"April",
"Mai",
"Juni",
"Juli",
"August",
"September",
"Oktober",
"November",
"Dezember"
],
"shortMonths": [
"Jan",
"Feb",
"Mär",
"Apr",
"Mai",
"Jun",
"Jul",
"Aug",
"Sep",
"Okt",
"Nov",
"Dez"
],
"days": [
"Sonntag",
"Montag",
"Dienstag",
"Mittwoch",
"Donnerstag",
"Freitag",
"Samstag"
],
"shortDays": ["So", "Mo", "Di", "Mi", "Do", "Fr", "Sa"],
"toolbar": {
"exportToSVG": "SVG speichern",
"exportToPNG": "PNG speichern",
"exportToCSV": "CSV speichern",
"menu": "Menü",
"selection": "Auswahl",
"selectionZoom": "Auswahl vergrößern",
"zoomIn": "Vergrößern",
"zoomOut": "Verkleinern",
"pan": "Verschieben",
"reset": "Zoom zurücksetzen"
}
}
}

55
src/main/resources/static/assets/vendor/apexcharts/locales/el.json

@ -0,0 +1,55 @@
{
"name": "el",
"options": {
"months": [
"Ιανουάριος",
"Φεβρουάριος",
"Μάρτιος",
"Απρίλιος",
"Μάιος",
"Ιούνιος",
"Ιούλιος",
"Αύγουστος",
"Σεπτέμβριος",
"Οκτώβριος",
"Νοέμβριος",
"Δεκέμβριος"
],
"shortMonths": [
"Ιαν",
"Φευ",
"Μαρ",
"Απρ",
"Μάι",
"Ιουν",
"Ιουλ",
"Αυγ",
"Σεπ",
"Οκτ",
"Νοε",
"Δεκ"
],
"days": [
"Κυριακή",
"Δευτέρα",
"Τρίτη",
"Τετάρτη",
"Πέμπτη",
"Παρασκευή",
"Σάββατο"
],
"shortDays": ["Κυρ", "Δευ", "Τρι", "Τετ", "Πεμ", "Παρ", "Σαβ"],
"toolbar": {
"exportToSVG": "Λήψη SVG",
"exportToPNG": "Λήψη PNG",
"exportToCSV": "Λήψη CSV",
"menu": "Menu",
"selection": "Επιλογή",
"selectionZoom": "Μεγένθυση βάση επιλογής",
"zoomIn": "Μεγένθυνση",
"zoomOut": "Σμίκρυνση",
"pan": "Μετατόπιση",
"reset": "Επαναφορά μεγένθυνσης"
}
}
}

55
src/main/resources/static/assets/vendor/apexcharts/locales/en.json

@ -0,0 +1,55 @@
{
"name": "en",
"options": {
"months": [
"January",
"February",
"March",
"April",
"May",
"June",
"July",
"August",
"September",
"October",
"November",
"December"
],
"shortMonths": [
"Jan",
"Feb",
"Mar",
"Apr",
"May",
"Jun",
"Jul",
"Aug",
"Sep",
"Oct",
"Nov",
"Dec"
],
"days": [
"Sunday",
"Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Friday",
"Saturday"
],
"shortDays": ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"],
"toolbar": {
"exportToSVG": "Download SVG",
"exportToPNG": "Download PNG",
"exportToCSV": "Download CSV",
"menu": "Menu",
"selection": "Selection",
"selectionZoom": "Selection Zoom",
"zoomIn": "Zoom In",
"zoomOut": "Zoom Out",
"pan": "Panning",
"reset": "Reset Zoom"
}
}
}

55
src/main/resources/static/assets/vendor/apexcharts/locales/es.json

@ -0,0 +1,55 @@
{
"name": "es",
"options": {
"months": [
"Enero",
"Febrero",
"Marzo",
"Abril",
"Mayo",
"Junio",
"Julio",
"Agosto",
"Septiembre",
"Octubre",
"Noviembre",
"Diciembre"
],
"shortMonths": [
"Ene",
"Feb",
"Mar",
"Abr",
"May",
"Jun",
"Jul",
"Ago",
"Sep",
"Oct",
"Nov",
"Dic"
],
"days": [
"Domingo",
"Lunes",
"Martes",
"Miércoles",
"Jueves",
"Viernes",
"Sábado"
],
"shortDays": ["Dom", "Lun", "Mar", "Mie", "Jue", "Vie", "Sab"],
"toolbar": {
"exportToSVG": "Descargar SVG",
"exportToPNG": "Descargar PNG",
"exportToCSV": "Descargar CSV",
"menu": "Menu",
"selection": "Seleccionar",
"selectionZoom": "Seleccionar Zoom",
"zoomIn": "Aumentar",
"zoomOut": "Disminuir",
"pan": "Navegación",
"reset": "Reiniciar Zoom"
}
}
}

63
src/main/resources/static/assets/vendor/apexcharts/locales/et.json

@ -0,0 +1,63 @@
{
"name": "et",
"options": {
"months": [
"jaanuar",
"veebruar",
"märts",
"aprill",
"mai",
"juuni",
"juuli",
"august",
"september",
"oktoober",
"november",
"detsember"
],
"shortMonths": [
"jaan",
"veebr",
"märts",
"apr",
"mai",
"juuni",
"juuli",
"aug",
"sept",
"okt",
"nov",
"dets"
],
"days": [
"pühapäev",
"esmaspäev",
"teisipäev",
"kolmapäev",
"neljapäev",
"reede",
"laupäev"
],
"shortDays": [
"P",
"E",
"T",
"K",
"N",
"R",
"L"
],
"toolbar": {
"exportToSVG": "Lae alla SVG",
"exportToPNG": "Lae alla PNG",
"exportToCSV": "Lae alla CSV",
"menu": "Menüü",
"selection": "Valik",
"selectionZoom": "Valiku suum",
"zoomIn": "Suurenda",
"zoomOut": "Vähenda",
"pan": "Panoraamimine",
"reset": "Lähtesta suum"
}
}
}

55
src/main/resources/static/assets/vendor/apexcharts/locales/fa.json

@ -0,0 +1,55 @@
{
"name": "fa",
"options": {
"months": [
"فروردین",
"اردیبهشت",
"خرداد",
"تیر",
"مرداد",
"شهریور",
"مهر",
"آبان",
"آذر",
"دی",
"بهمن",
"اسفند"
],
"shortMonths": [
"فرو",
"ارد",
"خرد",
"تیر",
"مرد",
"شهر",
"مهر",
"آبا",
"آذر",
"دی",
"بهمـ",
"اسفـ"
],
"days": [
"یکشنبه",
"دوشنبه",
"سه شنبه",
"چهارشنبه",
"پنجشنبه",
"جمعه",
"شنبه"
],
"shortDays": ["ی", "د", "س", "چ", "پ", "ج", "ش"],
"toolbar": {
"exportToSVG": "دانلود SVG",
"exportToPNG": "دانلود PNG",
"exportToCSV": "دانلود CSV",
"menu": "منو",
"selection": "انتخاب",
"selectionZoom": "بزرگنمایی انتخابی",
"zoomIn": "بزرگنمایی",
"zoomOut": "کوچکنمایی",
"pan": "پیمایش",
"reset": "بازنشانی بزرگنمایی"
}
}
}

55
src/main/resources/static/assets/vendor/apexcharts/locales/fi.json

@ -0,0 +1,55 @@
{
"name": "fi",
"options": {
"months": [
"Tammikuu",
"Helmikuu",
"Maaliskuu",
"Huhtikuu",
"Toukokuu",
"Kesäkuu",
"Heinäkuu",
"Elokuu",
"Syyskuu",
"Lokakuu",
"Marraskuu",
"Joulukuu"
],
"shortMonths": [
"Tammi",
"Helmi",
"Maalis",
"Huhti",
"Touko",
"Kesä",
"Heinä",
"Elo",
"Syys",
"Loka",
"Marras",
"Joulu"
],
"days": [
"Sunnuntai",
"Maanantai",
"Tiistai",
"Keskiviikko",
"Torstai",
"Perjantai",
"Lauantai"
],
"shortDays": ["Su", "Ma", "Ti", "Ke", "To", "Pe", "La"],
"toolbar": {
"exportToSVG": "Lataa SVG",
"exportToPNG": "Lataa PNG",
"exportToCSV": "Lataa CSV",
"menu": "Valikko",
"selection": "Valinta",
"selectionZoom": "Valinnan zoomaus",
"zoomIn": "Lähennä",
"zoomOut": "Loitonna",
"pan": "Panoroi",
"reset": "Nollaa zoomaus"
}
}
}

55
src/main/resources/static/assets/vendor/apexcharts/locales/fr.json

@ -0,0 +1,55 @@
{
"name": "fr",
"options": {
"months": [
"janvier",
"février",
"mars",
"avril",
"mai",
"juin",
"juillet",
"août",
"septembre",
"octobre",
"novembre",
"décembre"
],
"shortMonths": [
"janv.",
"févr.",
"mars",
"avr.",
"mai",
"juin",
"juill.",
"août",
"sept.",
"oct.",
"nov.",
"déc."
],
"days": [
"dimanche",
"lundi",
"mardi",
"mercredi",
"jeudi",
"vendredi",
"samedi"
],
"shortDays": ["dim.", "lun.", "mar.", "mer.", "jeu.", "ven.", "sam."],
"toolbar": {
"exportToSVG": "Télécharger au format SVG",
"exportToPNG": "Télécharger au format PNG",
"exportToCSV": "Télécharger au format CSV",
"menu": "Menu",
"selection": "Sélection",
"selectionZoom": "Sélection et zoom",
"zoomIn": "Zoomer",
"zoomOut": "Dézoomer",
"pan": "Navigation",
"reset": "Réinitialiser le zoom"
}
}
}

55
src/main/resources/static/assets/vendor/apexcharts/locales/he.json

@ -0,0 +1,55 @@
{
"name": "he",
"options": {
"months": [
"ינואר",
"פברואר",
"מרץ",
"אפריל",
"מאי",
"יוני",
"יולי",
"אוגוסט",
"ספטמבר",
"אוקטובר",
"נובמבר",
"דצמבר"
],
"shortMonths": [
"ינו׳",
"פבר׳",
"מרץ",
"אפר׳",
"מאי",
"יוני",
"יולי",
"אוג׳",
"ספט׳",
"אוק׳",
"נוב׳",
"דצמ׳"
],
"days": [
"ראשון",
"שני",
"שלישי",
"רביעי",
"חמישי",
"שישי",
"שבת"
],
"shortDays": ["א׳", "ב׳", "ג׳", "ד׳", "ה׳", "ו׳", "ש׳"],
"toolbar": {
"exportToSVG": "הורד SVG",
"exportToPNG": "הורד PNG",
"exportToCSV": "הורד CSV",
"menu": "תפריט",
"selection": "בחירה",
"selectionZoom": "זום בחירה",
"zoomIn": "הגדלה",
"zoomOut": "הקטנה",
"pan": "הזזה",
"reset": "איפוס תצוגה"
}
}
}

55
src/main/resources/static/assets/vendor/apexcharts/locales/hi.json

@ -0,0 +1,55 @@
{
"name": "hi",
"options": {
"months": [
"जनवरी",
"फ़रवरी",
"मार्च",
"अप्रैल",
"मई",
"जून",
"जुलाई",
"अगस्त",
"सितंबर",
"अक्टूबर",
"नवंबर",
"दिसंबर"
],
"shortMonths": [
"जनवरी",
"फ़रवरी",
"मार्च",
"अप्रैल",
"मई",
"जून",
"जुलाई",
"अगस्त",
"सितंबर",
"अक्टूबर",
"नवंबर",
"दिसंबर"
],
"days": [
"रविवार",
"सोमवार",
"मंगलवार",
"बुधवार",
"गुरुवार",
"शुक्रवार",
"शनिवार"
],
"shortDays": ["रवि", "सोम", "मंगल", "बुध", "गुरु", "शुक्र", "शनि"],
"toolbar": {
"exportToSVG": "निर्यात SVG",
"exportToPNG": "निर्यात PNG",
"exportToCSV": "निर्यात CSV",
"menu": "सूची",
"selection": "चयन",
"selectionZoom": "ज़ूम करना",
"zoomIn": "ज़ूम इन",
"zoomOut": "ज़ूम आउट",
"pan": "पैनिंग",
"reset": "फिर से कायम करना"
}
}
}

55
src/main/resources/static/assets/vendor/apexcharts/locales/hr.json

@ -0,0 +1,55 @@
{
"name": "hr",
"options": {
"months": [
"Siječanj",
"Veljača",
"Ožujak",
"Travanj",
"Svibanj",
"Lipanj",
"Srpanj",
"Kolovoz",
"Rujan",
"Listopad",
"Studeni",
"Prosinac"
],
"shortMonths": [
"Sij",
"Velj",
"Ožu",
"Tra",
"Svi",
"Lip",
"Srp",
"Kol",
"Ruj",
"Lis",
"Stu",
"Pro"
],
"days": [
"Nedjelja",
"Ponedjeljak",
"Utorak",
"Srijeda",
"Četvrtak",
"Petak",
"Subota"
],
"shortDays": ["Ned", "Pon", "Uto", "Sri", "Čet", "Pet", "Sub"],
"toolbar": {
"exportToSVG": "Preuzmi SVG",
"exportToPNG": "Preuzmi PNG",
"exportToCSV": "Preuzmi CSV",
"menu": "Izbornik",
"selection": "Odabir",
"selectionZoom": "Odabirno povećanje",
"zoomIn": "Uvećajte prikaz",
"zoomOut": "Umanjite prikaz",
"pan": "Pomicanje",
"reset": "Povratak na zadani prikaz"
}
}
}

64
src/main/resources/static/assets/vendor/apexcharts/locales/hu.json

@ -0,0 +1,64 @@
{
"name": "hu",
"options": {
"months": [
"január",
"február",
"március",
"április",
"május",
"június",
"július",
"augusztus",
"szeptember",
"október",
"november",
"december"
],
"shortMonths": [
"jan",
"feb",
"mar",
"ápr",
"máj",
"jún",
"júl",
"aug",
"szept",
"okt",
"nov",
"dec"
],
"days": [
"hétfő",
"kedd",
"szerda",
"csütörtök",
"péntek",
"szombat",
"vasárnap"
],
"shortDays": [
"H",
"K",
"Sze",
"Cs",
"P",
"Szo",
"V"
],
"toolbar": {
"exportToSVG": "Exportálás SVG-be",
"exportToPNG": "Exportálás PNG-be",
"exportToCSV": "Exportálás CSV-be",
"menu": "Fő ajánlat",
"download": "SVG letöltése",
"selection": "Kiválasztás",
"selectionZoom": "Nagyító kiválasztása",
"zoomIn": "Nagyítás",
"zoomOut": "Kicsinyítés",
"pan": "Képcsúsztatás",
"reset": "Nagyító visszaállítása"
}
}
}

55
src/main/resources/static/assets/vendor/apexcharts/locales/hy.json

@ -0,0 +1,55 @@
{
"name": "hy",
"options": {
"months": [
"Հունվար",
"Փետրվար",
"Մարտ",
"Ապրիլ",
"Մայիս",
"Հունիս",
"Հուլիս",
"Օգոստոս",
"Սեպտեմբեր",
"Հոկտեմբեր",
"Նոյեմբեր",
"Դեկտեմբեր"
],
"shortMonths": [
"Հնվ",
"Փտվ",
"Մրտ",
"Ապր",
"Մյս",
"Հնս",
"Հլիս",
"Օգս",
"Սեպ",
"Հոկ",
"Նոյ",
"Դեկ"
],
"days": [
"Կիրակի",
"Երկուշաբթի",
"Երեքշաբթի",
"Չորեքշաբթի",
"Հինգշաբթի",
"Ուրբաթ",
"Շաբաթ"
],
"shortDays": ["Կիր", "Երկ", "Երք", "Չրք", "Հնգ", "Ուրբ", "Շբթ"],
"toolbar": {
"exportToSVG": "Բեռնել SVG",
"exportToPNG": "Բեռնել PNG",
"exportToCSV": "Բեռնել CSV",
"menu": "Մենյու",
"selection": "Ընտրված",
"selectionZoom": "Ընտրված հատվածի խոշորացում",
"zoomIn": "Խոշորացնել",
"zoomOut": "Մանրացնել",
"pan": "Տեղափոխում",
"reset": "Բերել սկզբնական վիճակի"
}
}
}

47
src/main/resources/static/assets/vendor/apexcharts/locales/id.json

@ -0,0 +1,47 @@
{
"name": "id",
"options": {
"months": [
"Januari",
"Februari",
"Maret",
"April",
"Mei",
"Juni",
"Juli",
"Agustus",
"September",
"Oktober",
"November",
"Desember"
],
"shortMonths": [
"Jan",
"Feb",
"Mar",
"Apr",
"Mei",
"Jun",
"Jul",
"Agu",
"Sep",
"Okt",
"Nov",
"Des"
],
"days": ["Minggu", "Senin", "Selasa", "Rabu", "kamis", "Jumat", "Sabtu"],
"shortDays": ["Min", "Sen", "Sel", "Rab", "Kam", "Jum", "Sab"],
"toolbar": {
"exportToSVG": "Unduh SVG",
"exportToPNG": "Unduh PNG",
"exportToCSV": "Unduh CSV",
"menu": "Menu",
"selection": "Pilihan",
"selectionZoom": "Perbesar Pilihan",
"zoomIn": "Perbesar",
"zoomOut": "Perkecil",
"pan": "Geser",
"reset": "Atur Ulang Zoom"
}
}
}

55
src/main/resources/static/assets/vendor/apexcharts/locales/it.json

@ -0,0 +1,55 @@
{
"name": "it",
"options": {
"months": [
"Gennaio",
"Febbraio",
"Marzo",
"Aprile",
"Maggio",
"Giugno",
"Luglio",
"Agosto",
"Settembre",
"Ottobre",
"Novembre",
"Dicembre"
],
"shortMonths": [
"Gen",
"Feb",
"Mar",
"Apr",
"Mag",
"Giu",
"Lug",
"Ago",
"Set",
"Ott",
"Nov",
"Dic"
],
"days": [
"Domenica",
"Lunedì",
"Martedì",
"Mercoledì",
"Giovedì",
"Venerdì",
"Sabato"
],
"shortDays": ["Dom", "Lun", "Mar", "Mer", "Gio", "Ven", "Sab"],
"toolbar": {
"exportToSVG": "Scarica SVG",
"exportToPNG": "Scarica PNG",
"exportToCSV": "Scarica CSV",
"menu": "Menu",
"selection": "Selezione",
"selectionZoom": "Seleziona Zoom",
"zoomIn": "Zoom In",
"zoomOut": "Zoom Out",
"pan": "Sposta",
"reset": "Reimposta Zoom"
}
}
}

55
src/main/resources/static/assets/vendor/apexcharts/locales/ja.json

@ -0,0 +1,55 @@
{
"name": "ja",
"options": {
"months": [
"1月",
"2月",
"3月",
"4月",
"5月",
"6月",
"7月",
"8月",
"9月",
"10月",
"11月",
"12月"
],
"shortMonths": [
"1月",
"2月",
"3月",
"4月",
"5月",
"6月",
"7月",
"8月",
"9月",
"10月",
"11月",
"12月"
],
"days": [
"日曜日",
"月曜日",
"火曜日",
"水曜日",
"木曜日",
"金曜日",
"土曜日"
],
"shortDays": ["日", "月", "火", "水", "木", "金", "土"],
"toolbar": {
"exportToSVG": "SVGダウンロード",
"exportToPNG": "PNGダウンロード",
"exportToCSV": "CSVダウンロード",
"menu": "メニュー",
"selection": "選択",
"selectionZoom": "選択ズーム",
"zoomIn": "拡大",
"zoomOut": "縮小",
"pan": "パン",
"reset": "ズームリセット"
}
}
}

55
src/main/resources/static/assets/vendor/apexcharts/locales/ka.json

@ -0,0 +1,55 @@
{
"name": "ka",
"options": {
"months": [
"იანვარი",
"თებერვალი",
"მარტი",
"აპრილი",
"მაისი",
"ივნისი",
"ივლისი",
"აგვისტო",
"სექტემბერი",
"ოქტომბერი",
"ნოემბერი",
"დეკემბერი"
],
"shortMonths": [
"იან",
"თებ",
"მარ",
"აპრ",
"მაი",
"ივნ",
"ივლ",
"აგვ",
"სექ",
"ოქტ",
"ნოე",
"დეკ"
],
"days": [
"კვირა",
"ორშაბათი",
"სამშაბათი",
"ოთხშაბათი",
"ხუთშაბათი",
"პარასკევი",
"შაბათი"
],
"shortDays": ["კვი", "ორშ", "სამ", "ოთხ", "ხუთ", "პარ", "შაბ"],
"toolbar": {
"exportToSVG": "გადმოქაჩე SVG",
"exportToPNG": "გადმოქაჩე PNG",
"exportToCSV": "გადმოქაჩე CSV",
"menu": "მენიუ",
"selection": "არჩევა",
"selectionZoom": "არჩეულის გადიდება",
"zoomIn": "გადიდება",
"zoomOut": "დაპატარაება",
"pan": "გადაჩოჩება",
"reset": "გადიდების გაუქმება"
}
}
}

55
src/main/resources/static/assets/vendor/apexcharts/locales/ko.json

@ -0,0 +1,55 @@
{
"name": "ko",
"options": {
"months": [
"1월",
"2월",
"3월",
"4월",
"5월",
"6월",
"7월",
"8월",
"9월",
"10월",
"11월",
"12월"
],
"shortMonths": [
"1월",
"2월",
"3월",
"4월",
"5월",
"6월",
"7월",
"8월",
"9월",
"10월",
"11월",
"12월"
],
"days": [
"일요일",
"월요일",
"화요일",
"수요일",
"목요일",
"금요일",
"토요일"
],
"shortDays": ["일", "월", "화", "수", "목", "금", "토"],
"toolbar": {
"exportToSVG": "SVG 다운로드",
"exportToPNG": "PNG 다운로드",
"exportToCSV": "CSV 다운로드",
"menu": "메뉴",
"selection": "선택",
"selectionZoom": "선택영역 확대",
"zoomIn": "확대",
"zoomOut": "축소",
"pan": "패닝",
"reset": "원래대로"
}
}
}

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

Loading…
Cancel
Save