commit
5d63a8387f
@ -0,0 +1,3 @@
|
||||
# Default ignored files
|
||||
/shelf/
|
||||
/workspace.xml
|
@ -0,0 +1,19 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="CompilerConfiguration">
|
||||
<annotationProcessing>
|
||||
<profile default="true" name="Default" enabled="true" />
|
||||
<profile name="Maven default annotation processors profile" enabled="true">
|
||||
<sourceOutputDir name="target/generated-sources/annotations" />
|
||||
<sourceTestOutputDir name="target/generated-test-sources/test-annotations" />
|
||||
<outputRelativeToContentRoot value="true" />
|
||||
<module name="prematricula" />
|
||||
</profile>
|
||||
</annotationProcessing>
|
||||
</component>
|
||||
<component name="JavacSettings">
|
||||
<option name="ADDITIONAL_OPTIONS_OVERRIDE">
|
||||
<module name="prematricula" options="-parameters" />
|
||||
</option>
|
||||
</component>
|
||||
</project>
|
@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="Encoding">
|
||||
<file url="file://$PROJECT_DIR$/matricula/src/main/java" charset="UTF-8" />
|
||||
</component>
|
||||
</project>
|
@ -0,0 +1,20 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="RemoteRepositoriesConfiguration">
|
||||
<remote-repository>
|
||||
<option name="id" value="central" />
|
||||
<option name="name" value="Central Repository" />
|
||||
<option name="url" value="https://repo.maven.apache.org/maven2" />
|
||||
</remote-repository>
|
||||
<remote-repository>
|
||||
<option name="id" value="central" />
|
||||
<option name="name" value="Maven Central repository" />
|
||||
<option name="url" value="https://repo1.maven.org/maven2" />
|
||||
</remote-repository>
|
||||
<remote-repository>
|
||||
<option name="id" value="jboss.community" />
|
||||
<option name="name" value="JBoss Community repository" />
|
||||
<option name="url" value="https://repository.jboss.org/nexus/content/repositories/public/" />
|
||||
</remote-repository>
|
||||
</component>
|
||||
</project>
|
@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module type="JAVA_MODULE" version="4">
|
||||
<component name="NewModuleRootManager" inherit-compiler-output="true">
|
||||
<exclude-output />
|
||||
<content url="file://$MODULE_DIR$" />
|
||||
<orderEntry type="inheritedJdk" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
</component>
|
||||
</module>
|
@ -0,0 +1,14 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ExternalStorageConfigurationManager" enabled="true" />
|
||||
<component name="MavenProjectsManager">
|
||||
<option name="originalFiles">
|
||||
<list>
|
||||
<option value="$PROJECT_DIR$/matricula/pom.xml" />
|
||||
</list>
|
||||
</option>
|
||||
</component>
|
||||
<component name="ProjectRootManager" version="2" languageLevel="JDK_18" default="true" project-jdk-name="corretto-18" project-jdk-type="JavaSDK">
|
||||
<output url="file://$PROJECT_DIR$/out" />
|
||||
</component>
|
||||
</project>
|
@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ProjectModuleManager">
|
||||
<modules>
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/matricula-master.iml" filepath="$PROJECT_DIR$/.idea/matricula-master.iml" />
|
||||
</modules>
|
||||
</component>
|
||||
</project>
|
@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="VcsDirectoryMappings">
|
||||
<mapping directory="$PROJECT_DIR$" vcs="Git" />
|
||||
</component>
|
||||
</project>
|
@ -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/
|
Binary file not shown.
@ -0,0 +1,2 @@
|
||||
distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.5/apache-maven-3.9.5-bin.zip
|
||||
wrapperUrl=https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar
|
@ -0,0 +1,308 @@
|
||||
#!/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.
|
||||
# ----------------------------------------------------------------------------
|
||||
|
||||
# ----------------------------------------------------------------------------
|
||||
# Apache Maven Wrapper startup batch script, version 3.2.0
|
||||
#
|
||||
# Required ENV vars:
|
||||
# ------------------
|
||||
# JAVA_HOME - location of a JDK home dir
|
||||
#
|
||||
# Optional ENV vars
|
||||
# -----------------
|
||||
# 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
|
||||
JAVA_HOME="$(/usr/libexec/java_home)"; export JAVA_HOME
|
||||
else
|
||||
JAVA_HOME="/Library/Java/Home"; export JAVA_HOME
|
||||
fi
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
if [ -z "$JAVA_HOME" ] ; then
|
||||
if [ -r /etc/gentoo-release ] ; then
|
||||
JAVA_HOME=$(java-config --jre-home)
|
||||
fi
|
||||
fi
|
||||
|
||||
# For Cygwin, ensure paths are in UNIX format before anything is touched
|
||||
if $cygwin ; then
|
||||
[ -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 "$JAVA_HOME" ] && [ -d "$JAVA_HOME" ] &&
|
||||
JAVA_HOME="$(cd "$JAVA_HOME" || (echo "cannot cd into $JAVA_HOME."; exit 1); 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 2>/dev/null; \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
|
||||
|
||||
# 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/.." || exit 1; pwd)
|
||||
fi
|
||||
# end of workaround
|
||||
done
|
||||
printf '%s' "$(cd "$basedir" || exit 1; pwd)"
|
||||
}
|
||||
|
||||
# concatenates all lines of a file
|
||||
concat_lines() {
|
||||
if [ -f "$1" ]; then
|
||||
# Remove \r in case we run on Windows within Git Bash
|
||||
# and check out the repository with auto CRLF management
|
||||
# enabled. Otherwise, we may read lines that are delimited with
|
||||
# \r\n and produce $'-Xarg\r' rather than -Xarg due to word
|
||||
# splitting rules.
|
||||
tr -s '\r\n' ' ' < "$1"
|
||||
fi
|
||||
}
|
||||
|
||||
log() {
|
||||
if [ "$MVNW_VERBOSE" = true ]; then
|
||||
printf '%s\n' "$1"
|
||||
fi
|
||||
}
|
||||
|
||||
BASE_DIR=$(find_maven_basedir "$(dirname "$0")")
|
||||
if [ -z "$BASE_DIR" ]; then
|
||||
exit 1;
|
||||
fi
|
||||
|
||||
MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"}; export MAVEN_PROJECTBASEDIR
|
||||
log "$MAVEN_PROJECTBASEDIR"
|
||||
|
||||
##########################################################################################
|
||||
# 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.
|
||||
##########################################################################################
|
||||
wrapperJarPath="$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar"
|
||||
if [ -r "$wrapperJarPath" ]; then
|
||||
log "Found $wrapperJarPath"
|
||||
else
|
||||
log "Couldn't find $wrapperJarPath, downloading it ..."
|
||||
|
||||
if [ -n "$MVNW_REPOURL" ]; then
|
||||
wrapperUrl="$MVNW_REPOURL/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar"
|
||||
else
|
||||
wrapperUrl="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar"
|
||||
fi
|
||||
while IFS="=" read -r key value; do
|
||||
# Remove '\r' from value to allow usage on windows as IFS does not consider '\r' as a separator ( considers space, tab, new line ('\n'), and custom '=' )
|
||||
safeValue=$(echo "$value" | tr -d '\r')
|
||||
case "$key" in (wrapperUrl) wrapperUrl="$safeValue"; break ;;
|
||||
esac
|
||||
done < "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.properties"
|
||||
log "Downloading from: $wrapperUrl"
|
||||
|
||||
if $cygwin; then
|
||||
wrapperJarPath=$(cygpath --path --windows "$wrapperJarPath")
|
||||
fi
|
||||
|
||||
if command -v wget > /dev/null; then
|
||||
log "Found wget ... using wget"
|
||||
[ "$MVNW_VERBOSE" = true ] && QUIET="" || QUIET="--quiet"
|
||||
if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then
|
||||
wget $QUIET "$wrapperUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath"
|
||||
else
|
||||
wget $QUIET --http-user="$MVNW_USERNAME" --http-password="$MVNW_PASSWORD" "$wrapperUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath"
|
||||
fi
|
||||
elif command -v curl > /dev/null; then
|
||||
log "Found curl ... using curl"
|
||||
[ "$MVNW_VERBOSE" = true ] && QUIET="" || QUIET="--silent"
|
||||
if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then
|
||||
curl $QUIET -o "$wrapperJarPath" "$wrapperUrl" -f -L || rm -f "$wrapperJarPath"
|
||||
else
|
||||
curl $QUIET --user "$MVNW_USERNAME:$MVNW_PASSWORD" -o "$wrapperJarPath" "$wrapperUrl" -f -L || rm -f "$wrapperJarPath"
|
||||
fi
|
||||
else
|
||||
log "Falling back to using Java to download"
|
||||
javaSource="$MAVEN_PROJECTBASEDIR/.mvn/wrapper/MavenWrapperDownloader.java"
|
||||
javaClass="$MAVEN_PROJECTBASEDIR/.mvn/wrapper/MavenWrapperDownloader.class"
|
||||
# For Cygwin, switch paths to Windows format before running javac
|
||||
if $cygwin; then
|
||||
javaSource=$(cygpath --path --windows "$javaSource")
|
||||
javaClass=$(cygpath --path --windows "$javaClass")
|
||||
fi
|
||||
if [ -e "$javaSource" ]; then
|
||||
if [ ! -e "$javaClass" ]; then
|
||||
log " - Compiling MavenWrapperDownloader.java ..."
|
||||
("$JAVA_HOME/bin/javac" "$javaSource")
|
||||
fi
|
||||
if [ -e "$javaClass" ]; then
|
||||
log " - Running MavenWrapperDownloader.java ..."
|
||||
("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$wrapperUrl" "$wrapperJarPath") || rm -f "$wrapperJarPath"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
##########################################################################################
|
||||
# End of extension
|
||||
##########################################################################################
|
||||
|
||||
# If specified, validate the SHA-256 sum of the Maven wrapper jar file
|
||||
wrapperSha256Sum=""
|
||||
while IFS="=" read -r key value; do
|
||||
case "$key" in (wrapperSha256Sum) wrapperSha256Sum=$value; break ;;
|
||||
esac
|
||||
done < "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.properties"
|
||||
if [ -n "$wrapperSha256Sum" ]; then
|
||||
wrapperSha256Result=false
|
||||
if command -v sha256sum > /dev/null; then
|
||||
if echo "$wrapperSha256Sum $wrapperJarPath" | sha256sum -c > /dev/null 2>&1; then
|
||||
wrapperSha256Result=true
|
||||
fi
|
||||
elif command -v shasum > /dev/null; then
|
||||
if echo "$wrapperSha256Sum $wrapperJarPath" | shasum -a 256 -c > /dev/null 2>&1; then
|
||||
wrapperSha256Result=true
|
||||
fi
|
||||
else
|
||||
echo "Checksum validation was requested but neither 'sha256sum' or 'shasum' are available."
|
||||
echo "Please install either command, or disable validation by removing 'wrapperSha256Sum' from your maven-wrapper.properties."
|
||||
exit 1
|
||||
fi
|
||||
if [ $wrapperSha256Result = false ]; then
|
||||
echo "Error: Failed to validate Maven wrapper SHA-256, your Maven wrapper might be compromised." >&2
|
||||
echo "Investigate or delete $wrapperJarPath to attempt a clean download." >&2
|
||||
echo "If you updated your Maven version, you need to update the specified wrapperSha256Sum property." >&2
|
||||
exit 1
|
||||
fi
|
||||
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 "$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
|
||||
|
||||
# shellcheck disable=SC2086 # safe args
|
||||
exec "$JAVACMD" \
|
||||
$MAVEN_OPTS \
|
||||
$MAVEN_DEBUG_OPTS \
|
||||
-classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \
|
||||
"-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \
|
||||
${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@"
|
@ -0,0 +1,205 @@
|
||||
@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 Apache Maven Wrapper startup batch script, version 3.2.0
|
||||
@REM
|
||||
@REM Required ENV vars:
|
||||
@REM JAVA_HOME - location of a JDK home dir
|
||||
@REM
|
||||
@REM Optional ENV vars
|
||||
@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 WRAPPER_URL="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar"
|
||||
|
||||
FOR /F "usebackq tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO (
|
||||
IF "%%A"=="wrapperUrl" SET WRAPPER_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 WRAPPER_URL="%MVNW_REPOURL%/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar"
|
||||
)
|
||||
if "%MVNW_VERBOSE%" == "true" (
|
||||
echo Couldn't find %WRAPPER_JAR%, downloading it ...
|
||||
echo Downloading from: %WRAPPER_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('%WRAPPER_URL%', '%WRAPPER_JAR%')"^
|
||||
"}"
|
||||
if "%MVNW_VERBOSE%" == "true" (
|
||||
echo Finished downloading %WRAPPER_JAR%
|
||||
)
|
||||
)
|
||||
@REM End of extension
|
||||
|
||||
@REM If specified, validate the SHA-256 sum of the Maven wrapper jar file
|
||||
SET WRAPPER_SHA_256_SUM=""
|
||||
FOR /F "usebackq tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO (
|
||||
IF "%%A"=="wrapperSha256Sum" SET WRAPPER_SHA_256_SUM=%%B
|
||||
)
|
||||
IF NOT %WRAPPER_SHA_256_SUM%=="" (
|
||||
powershell -Command "&{"^
|
||||
"$hash = (Get-FileHash \"%WRAPPER_JAR%\" -Algorithm SHA256).Hash.ToLower();"^
|
||||
"If('%WRAPPER_SHA_256_SUM%' -ne $hash){"^
|
||||
" Write-Output 'Error: Failed to validate Maven wrapper SHA-256, your Maven wrapper might be compromised.';"^
|
||||
" Write-Output 'Investigate or delete %WRAPPER_JAR% to attempt a clean download.';"^
|
||||
" Write-Output 'If you updated your Maven version, you need to update the specified wrapperSha256Sum property.';"^
|
||||
" exit 1;"^
|
||||
"}"^
|
||||
"}"
|
||||
if ERRORLEVEL 1 goto error
|
||||
)
|
||||
|
||||
@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%
|
@ -0,0 +1,72 @@
|
||||
<?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>3.2.4</version>
|
||||
<relativePath/> <!-- lookup parent from repository -->
|
||||
</parent>
|
||||
<groupId>com.proyecto</groupId>
|
||||
<artifactId>prematricula</artifactId>
|
||||
<version>0.0.1-SNAPSHOT</version>
|
||||
<name>prematricula</name>
|
||||
<description>Proyecto de la prematricula</description>
|
||||
<properties>
|
||||
<java.version>17</java.version>
|
||||
</properties>
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-data-jpa</artifactId>
|
||||
</dependency>
|
||||
<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>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>com.mysql</groupId>
|
||||
<artifactId>mysql-connector-j</artifactId>
|
||||
<scope>runtime</scope>
|
||||
</dependency>
|
||||
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-mail -->
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-mail</artifactId>
|
||||
<version>3.2.5</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-maven-plugin</artifactId>
|
||||
<configuration>
|
||||
<excludes>
|
||||
<exclude>
|
||||
<groupId>org.projectlombok</groupId>
|
||||
<artifactId>lombok</artifactId>
|
||||
</exclude>
|
||||
</excludes>
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
|
||||
</project>
|
@ -0,0 +1,20 @@
|
||||
package com.proyecto.prematricula;
|
||||
|
||||
import com.proyecto.prematricula.modelos.Alumno;
|
||||
import com.proyecto.prematricula.repositorio.AlumnoRepositorio;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.SpringApplication;
|
||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||
|
||||
@SpringBootApplication
|
||||
public class PrematriculaApplication {
|
||||
|
||||
public static void main(String[] args) {
|
||||
SpringApplication.run(PrematriculaApplication.class, args);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,16 @@
|
||||
/*package com.proyecto.prematricula.configuracion;
|
||||
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
import org.springframework.web.servlet.HandlerInterceptor;
|
||||
|
||||
public class NoCacheInterceptor implements HandlerInterceptor {
|
||||
|
||||
@Override
|
||||
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
|
||||
response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate");
|
||||
response.setHeader("Pragma", "no-cache");
|
||||
response.setHeader("Expires", "0");
|
||||
return true;
|
||||
}
|
||||
}*/
|
@ -0,0 +1,15 @@
|
||||
/*package com.proyecto.prematricula.configuracion;
|
||||
|
||||
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
|
||||
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
|
||||
|
||||
@Configuration
|
||||
public class WebMvcConfig implements WebMvcConfigurer {
|
||||
|
||||
@Override
|
||||
public void addInterceptors(InterceptorRegistry registry) {
|
||||
WebMvcConfigurer.super.addInterceptors(registry);
|
||||
}
|
||||
}*/
|
@ -0,0 +1,797 @@
|
||||
package com.proyecto.prematricula.controlador;
|
||||
|
||||
|
||||
import com.proyecto.prematricula.email.EmailBody;
|
||||
import com.proyecto.prematricula.email.EmailPort;
|
||||
import com.proyecto.prematricula.enums.CursosEnum;
|
||||
import com.proyecto.prematricula.modelos.*;
|
||||
import com.proyecto.prematricula.servicios.Alumno.AlumnoService;
|
||||
import com.proyecto.prematricula.servicios.Ciclo.CicloService;
|
||||
import com.proyecto.prematricula.servicios.Curso.CursoService;
|
||||
import com.proyecto.prematricula.servicios.CursoCiclo.CursoCicloService;
|
||||
import com.proyecto.prematricula.servicios.Edu.EduService;
|
||||
import com.proyecto.prematricula.servicios.Estadisticas.EstadisticasService;
|
||||
import com.proyecto.prematricula.servicios.Familia.FamiliaService;
|
||||
import com.proyecto.prematricula.servicios.Matriculacion.MatriculacionService;
|
||||
import com.proyecto.prematricula.servicios.Modulo.ModuloService;
|
||||
import com.proyecto.prematricula.servicios.Optativas.OptativasService;
|
||||
import com.proyecto.prematricula.servicios.Patologia.PatologiaService;
|
||||
import jakarta.servlet.http.HttpSession;
|
||||
import org.springframework.aop.AopInvocationException;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.stereotype.Controller;
|
||||
import org.springframework.ui.Model;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
|
||||
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.*;
|
||||
|
||||
@Controller
|
||||
public class AlumnoController {
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@Value("${es.matricula}")
|
||||
private boolean esMatricula;
|
||||
|
||||
@Autowired
|
||||
private EstadisticasService estadisticasService;
|
||||
|
||||
@Autowired
|
||||
private AlumnoService alumnoService;
|
||||
|
||||
@Autowired
|
||||
private EduService eduService;
|
||||
|
||||
@Autowired
|
||||
private FamiliaService familiaService;
|
||||
|
||||
@Autowired
|
||||
private CicloService cicloService;
|
||||
|
||||
@Autowired
|
||||
private CursoService cursoService;
|
||||
|
||||
@Autowired
|
||||
private CursoCicloService cursoCicloService;
|
||||
|
||||
@Autowired
|
||||
private MatriculacionService matriculacionService;
|
||||
|
||||
@Autowired
|
||||
private ModuloService moduloService;
|
||||
|
||||
@Autowired
|
||||
private PatologiaService patologiaService;
|
||||
|
||||
@Autowired
|
||||
private OptativasService optativasService;
|
||||
|
||||
@Autowired
|
||||
private EmailPort emailPort;
|
||||
|
||||
|
||||
@GetMapping
|
||||
public String home(Model model) {
|
||||
return "redirect:/registro";
|
||||
}
|
||||
|
||||
@GetMapping("/registro")
|
||||
public String registro(Model model) {
|
||||
model.addAttribute(esMatricula);
|
||||
return "registro";
|
||||
}
|
||||
|
||||
@PostMapping("/registro/comprobarNia")
|
||||
public String comprobarNia(Alumno alumno, HttpSession session, RedirectAttributes redirectAttributes) {
|
||||
try {
|
||||
Alumno alumnoActual = alumnoService.getAlumnoByNia(alumno.getNia());
|
||||
if (alumnoActual != null && alumnoActual.getContrasenya().equals(alumno.getContrasenya())) {
|
||||
session.setAttribute("alumnoActual", alumnoActual);
|
||||
session.removeAttribute("alumno");
|
||||
return "redirect:/esRepetidor";
|
||||
} else if (alumnoActual == null) {
|
||||
redirectAttributes.addFlashAttribute("errorNia", "El NIA ingresado no existe.");
|
||||
} else {
|
||||
redirectAttributes.addFlashAttribute("errorContraseña", "La contraseña ingresada es incorrecta.");
|
||||
}
|
||||
} catch (Exception e) {
|
||||
System.out.println("ERROR" + e.getMessage());
|
||||
}
|
||||
return "redirect:/registro";
|
||||
}
|
||||
|
||||
@GetMapping("/esRepetidor")
|
||||
public String esRepetidor(HttpSession session,Model model, RedirectAttributes redirectAttributes){
|
||||
Alumno alumnoActual = (Alumno) session.getAttribute("alumnoActual");
|
||||
if (alumnoActual == null) {
|
||||
return "redirect:/registro";
|
||||
}
|
||||
|
||||
int idMatricula = matriculacionService.getMatriculacionByIdAlumno(alumnoActual.getId());
|
||||
if (idMatricula!= 0) {
|
||||
session.setAttribute("idMatricula", idMatricula);
|
||||
return "redirect:/existeMatriculacion";
|
||||
}
|
||||
|
||||
String mensaje = (String) redirectAttributes.getAttribute("mensaje");
|
||||
if (mensaje != null) {
|
||||
redirectAttributes.addFlashAttribute(mensaje);
|
||||
redirectAttributes.addAttribute("mensaje", null);
|
||||
}
|
||||
|
||||
|
||||
if (alumnoActual.getMatCurso() == 3 ){
|
||||
model.addAttribute("esTercero", true);
|
||||
session.setAttribute("esTercero", true);
|
||||
} else if (alumnoActual.getMatCurso() == 4) {
|
||||
model.addAttribute("esCuarto", true);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
Matriculacion matriculacion = new Matriculacion();
|
||||
session.setAttribute("matriculacion", matriculacion);
|
||||
session.setAttribute("esBachiller", false);
|
||||
|
||||
model.addAttribute("alumno", alumnoActual);
|
||||
return "es_repetidor";
|
||||
}
|
||||
|
||||
@PostMapping("/redireccionRepetidor")
|
||||
public String redireccionRepetidor(HttpSession session,
|
||||
@RequestParam(name = "esRepetidor", required = false) String esRepetidor,
|
||||
@RequestParam(name = "opcion1", required = false) String esPDC) {
|
||||
Alumno alumnoActual = (Alumno) session.getAttribute("alumnoActual");
|
||||
if (alumnoActual == null) {
|
||||
return "redirect:/registro";
|
||||
}
|
||||
|
||||
boolean boolesRep;
|
||||
if (esRepetidor == null){
|
||||
boolesRep = true;
|
||||
} else boolesRep = esRepetidor.equals("true");
|
||||
|
||||
if (!boolesRep && (alumnoActual.getMatFamilia().equals("FP") && alumnoActual.getMatCurso() == 2) ||
|
||||
filtrarLetras(alumnoActual.getMatActual()).equals("CESA") && !boolesRep){
|
||||
return "redirect:/registro";
|
||||
}
|
||||
|
||||
session.setAttribute("esRepetidor", boolesRep);
|
||||
|
||||
boolean boolesPDC;
|
||||
if (esPDC == null){
|
||||
boolesPDC = false;
|
||||
} else boolesPDC = esPDC.equals("si");
|
||||
System.out.println("ES PDC ESTE ALUMNO?:" + boolesPDC);
|
||||
|
||||
session.setAttribute("esPDC", boolesPDC);
|
||||
|
||||
if (alumnoActual.getMatFamilia().equals("BAC") || alumnoActual.getMatFamilia().equals("FP") ||
|
||||
(alumnoActual.getMatCurso() == 4 && !boolesRep)) {
|
||||
return "redirect:/ciclo";
|
||||
}
|
||||
return "redirect:/completado";
|
||||
}
|
||||
|
||||
/* @GetMapping("/principal")
|
||||
public String principal(HttpSession session, Model model) {
|
||||
Alumno alumnoActual = (Alumno) session.getAttribute("alumnoActual");
|
||||
if (alumnoActual == null) {
|
||||
return "redirect:/registro";
|
||||
}
|
||||
|
||||
model.addAttribute("alumno", alumnoActual);
|
||||
List<Edu> edus = eduService.getAllEdu();
|
||||
model.addAttribute("edus", edus);
|
||||
return "principal";
|
||||
}*/
|
||||
|
||||
/*@GetMapping("/familia")
|
||||
public String familia(HttpSession session, Model model, @RequestParam(name = "edu", required = false) String eduSeleccionado) {
|
||||
Alumno alumnoActual = (Alumno) session.getAttribute("alumnoActual");
|
||||
if (alumnoActual == null) {
|
||||
return "redirect:/registro";
|
||||
}
|
||||
model.addAttribute("alumno", alumnoActual);
|
||||
|
||||
Edu edu = eduService.getEduByNombre(eduSeleccionado);
|
||||
if (edu != null){
|
||||
session.setAttribute("edu", edu);
|
||||
|
||||
} else {
|
||||
edu = (Edu) session.getAttribute("edu");
|
||||
}
|
||||
model.addAttribute("eduSeleccionado", edu.getNombre());
|
||||
|
||||
List<Familia> familias = familiaService.getFamiliasByIdEdu(edu.getId());
|
||||
model.addAttribute("familias", familias);
|
||||
|
||||
return "familia";
|
||||
}*/
|
||||
|
||||
|
||||
@GetMapping("/ciclo")
|
||||
public String ciclo(HttpSession session, Model model, @RequestParam(name = "fam", required = false) String familiaSeleccionada) {
|
||||
Alumno alumnoActual = (Alumno) session.getAttribute("alumnoActual");
|
||||
if (alumnoActual == null) {
|
||||
return "redirect:/registro";
|
||||
}
|
||||
|
||||
model.addAttribute("alumno", alumnoActual);
|
||||
|
||||
/*Familia familia = familiaService.getFamiliaByNombre(familiaSeleccionada);
|
||||
if (familia != null){
|
||||
session.setAttribute("familia", familia) ;
|
||||
} else
|
||||
{
|
||||
familia = (Familia) session.getAttribute("familia");
|
||||
}
|
||||
model.addAttribute("familiaSeleccionada", familia.getNombre());*/
|
||||
|
||||
|
||||
boolean esRepetidor = (boolean) session.getAttribute("esRepetidor");
|
||||
List<Ciclo> ciclos = new ArrayList<>();
|
||||
if (alumnoActual.getMatFamilia().equals("BAC") ||
|
||||
(alumnoActual.getMatCurso() == 4 && !esRepetidor)){
|
||||
ciclos = cicloService.getCiclosBach();
|
||||
session.setAttribute("esBachiller", true);
|
||||
model.addAttribute("informacion", "Selecciona el bachillerato sobre el que te quieres formar");
|
||||
model.addAttribute("esBachiller", true);
|
||||
|
||||
} else if (alumnoActual.getMatFamilia().equals("FP")){
|
||||
String codigoAlumno = filtrarLetras(alumnoActual.getMatActual());
|
||||
ciclos = cicloService.findCicloByCodigoDos(codigoAlumno);
|
||||
model.addAttribute("informacion", "Confirma tu ciclo formativo seleccionándolo.");
|
||||
if (ciclos == null){
|
||||
System.out.println("NO SE HAN ENCONTRADO LOS CICLOS");
|
||||
}
|
||||
}
|
||||
model.addAttribute("ciclos", ciclos);
|
||||
return "ciclo";
|
||||
}
|
||||
|
||||
private String filtrarLetras(String code) {
|
||||
StringBuilder letters = new StringBuilder();
|
||||
for (char ch : code.toCharArray()) {
|
||||
if (Character.isLetter(ch)) {
|
||||
letters.append(ch);
|
||||
}
|
||||
}
|
||||
return letters.toString();
|
||||
}
|
||||
|
||||
/*@GetMapping("/curso")
|
||||
public String curso(HttpSession session, Model model, @RequestParam(name = "cic", required = false) String cicloSeleccionado) {
|
||||
Alumno alumnoActual = (Alumno) session.getAttribute("alumnoActual");
|
||||
if (alumnoActual == null) {
|
||||
return "redirect:/registro";
|
||||
}
|
||||
model.addAttribute("alumno", alumnoActual);
|
||||
|
||||
Ciclo ciclo = cicloService.getCicloByNombre(cicloSeleccionado);
|
||||
if (ciclo != null){
|
||||
session.setAttribute("ciclo", ciclo);
|
||||
} else {
|
||||
ciclo = (Ciclo) session.getAttribute("ciclo");
|
||||
}
|
||||
model.addAttribute("cicloSeleccionado", ciclo.getNombre());
|
||||
|
||||
List<Curso> cursos = cursoCicloService.getCursoByIdCiclo(ciclo.getId());
|
||||
model.addAttribute("cursos", cursos);
|
||||
return "curso";
|
||||
}*/
|
||||
|
||||
@GetMapping("/completado")
|
||||
private String completado(@RequestParam(name = "cic", required = false) String cicloSeleccionado, HttpSession session){
|
||||
Alumno alumnoActual = (Alumno) session.getAttribute("alumnoActual");
|
||||
|
||||
if (alumnoActual != null){
|
||||
Ciclo ciclo = null;
|
||||
Curso curso;
|
||||
CursoCiclo cursoCiclo;
|
||||
boolean esRepetidor = (boolean) session.getAttribute("esRepetidor");
|
||||
|
||||
//Conseguimos el ciclo dependiendo de si se trata de un ciclo de bachiller o una eso o fp.
|
||||
if (cicloSeleccionado != null){
|
||||
ciclo = cicloService.getCicloByNombre(cicloSeleccionado);
|
||||
} else {
|
||||
//Siempre será la ESO, ya que fp y bach irán por arriba
|
||||
ciclo = cicloService.getCicloByCodigo(alumnoActual.getMatFamilia());
|
||||
}
|
||||
|
||||
//Conseguimos el curso, dependiendo de si es repetidor o de si viene de la eso
|
||||
if (esRepetidor){
|
||||
curso = cursoService.getCursoByNombre(CursosEnum.getNombreByNumero(alumnoActual.getMatCurso()));
|
||||
} else if (alumnoActual.getMatCurso() == 4 || (alumnoActual.getMatFamilia().equals("FP") &&
|
||||
alumnoActual.getMatCurso() == 2)) {
|
||||
curso = cursoService.getCursoByNombre(CursosEnum.getNombreByNumero(1));
|
||||
} else {
|
||||
curso = cursoService.getCursoByNombre(CursosEnum.getNombreByNumero(alumnoActual.getMatCurso()+1));
|
||||
}
|
||||
cursoCiclo = cursoCicloService.findByCursoIdAndCicloId(curso.getId(), ciclo.getId());
|
||||
System.out.println("ESTE ES EL CURSO CICLO " + cursoCiclo.getId());
|
||||
session.setAttribute("cursoCiclo", cursoCiclo);
|
||||
|
||||
if (alumnoActual.getMatFamilia().equals("FP")){
|
||||
if (esMatricula){
|
||||
return "redirect:/extra";
|
||||
} else {
|
||||
return "redirect:/finalYResumen";
|
||||
}
|
||||
} else {
|
||||
return "redirect:/optativas";
|
||||
}
|
||||
}
|
||||
return "redirect:/registro";
|
||||
}
|
||||
|
||||
@GetMapping("/extra")
|
||||
private String extra(HttpSession session, Model model){
|
||||
Alumno alumnoActual = (Alumno) session.getAttribute("alumnoActual");
|
||||
if (alumnoActual == null) {
|
||||
return "redirect:/registro";
|
||||
}
|
||||
model.addAttribute("alumno", alumnoActual);
|
||||
List<Patologia> patologias = patologiaService.getAllPatologias();
|
||||
model.addAttribute("patologias", patologias);
|
||||
return "extra";
|
||||
}
|
||||
|
||||
@GetMapping("/optativas")
|
||||
private String optativas(HttpSession session, Model model){
|
||||
Alumno alumnoActual = (Alumno) session.getAttribute("alumnoActual");
|
||||
if (alumnoActual == null) {
|
||||
return "redirect:/registro";
|
||||
}
|
||||
model.addAttribute("esBachiller", session.getAttribute("esBachiller"));
|
||||
CursoCiclo cursoCiclo = (CursoCiclo) session.getAttribute("cursoCiclo");
|
||||
boolean esPDC = (boolean) session.getAttribute("esPDC");
|
||||
|
||||
boolean esCuarto;
|
||||
if (cursoCiclo.getCurso().getId() == 4 && !esPDC){
|
||||
esCuarto = true;
|
||||
}else {
|
||||
esCuarto = false;
|
||||
}
|
||||
model.addAttribute("esCuarto", esCuarto);
|
||||
|
||||
boolean esTercero;
|
||||
if (cursoCiclo.getCurso().getId() == 3){
|
||||
esTercero = true;
|
||||
} else
|
||||
esTercero = false;
|
||||
model.addAttribute("esTercero", esTercero);
|
||||
|
||||
boolean esRepetidor = (boolean) session.getAttribute("esRepetidor");
|
||||
model.addAttribute("esRepetidor", esRepetidor);
|
||||
model.addAttribute("alumno", alumnoActual);
|
||||
model.addAttribute("cursoCiclo", cursoCiclo);
|
||||
|
||||
|
||||
List<Modulo> modulos = moduloService.findByIdCursoCicloAndBloque(cursoCiclo.getId(), 0);
|
||||
if (cursoCiclo.getCiclo().getCodigo().equals("ESO") ) {
|
||||
modulos.addAll(moduloService.findByIdCursoCicloAndBloque(cursoCiclo.getId(), 6));
|
||||
if (esRepetidor) {
|
||||
modulos.removeIf(modulo -> modulo.getBloque() == 0);
|
||||
}
|
||||
List<Modulo> bloque4 = moduloService.findByIdCursoCicloAndBloque(cursoCiclo.getId(), 4);
|
||||
model.addAttribute("bloques4", bloque4);
|
||||
}
|
||||
|
||||
|
||||
List<Modulo> bloque1 = null;
|
||||
List<Modulo> bloque2 = null;
|
||||
if (esCuarto){
|
||||
bloque1 = moduloService.findModuloByBloque(1);
|
||||
bloque2 = moduloService.findModuloByBloque(2);
|
||||
List<Modulo> bloque3 = moduloService.findModuloByBloque(3);
|
||||
List<Modulo> bloque5 = moduloService.findModuloByBloque(5);
|
||||
|
||||
List<Modulo> bloqueExtItinerario = moduloService.findBloqueExtItinerario(1, 2, 3);
|
||||
|
||||
|
||||
model.addAttribute("bloques3", bloque3);
|
||||
model.addAttribute("bloques5", bloque5);
|
||||
model.addAttribute("bloqueExtItinerario", bloqueExtItinerario);
|
||||
}
|
||||
|
||||
|
||||
if (cursoCiclo.getCiclo().getFamilia().getNombre().equals("Batxillerat")){
|
||||
session.setAttribute("esBachiller", true);
|
||||
int bloque = 0;
|
||||
switch (cursoCiclo.getCiclo().getCodigo()){
|
||||
case "BAC":
|
||||
if (cursoCiclo.getCurso().getNombre().equals("PRIMERO")){
|
||||
bloque = 7;
|
||||
bloque1 = moduloService.findModuloByBloque(14);
|
||||
} else {
|
||||
bloque = 9;
|
||||
bloque1 = moduloService.findModuloByBloque(15);
|
||||
bloque2 = moduloService.findModuloByBloque(16);
|
||||
}
|
||||
break;
|
||||
case "BAH":
|
||||
if (cursoCiclo.getCurso().getNombre().equals("PRIMERO")){
|
||||
bloque = 8;
|
||||
bloque1 = moduloService.findModuloByBloque(12);
|
||||
bloque2 = moduloService.findModuloByBloque(13);
|
||||
} else {
|
||||
bloque = 10;
|
||||
bloque1 = moduloService.findModuloByBloque(11);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
model.addAttribute("obligatorias", moduloService.findModuloByBloque(bloque));
|
||||
}
|
||||
|
||||
model.addAttribute("bloques1", bloque1);
|
||||
model.addAttribute("bloques2", bloque2);
|
||||
|
||||
model.addAttribute("modulos", modulos);
|
||||
return "optativas";
|
||||
}
|
||||
|
||||
|
||||
@PostMapping("/actualizarOptativas")
|
||||
private String actualizarOptativas(Model model,
|
||||
@RequestParam("opcionesSeleccionadas") String[] opcionesSeleccionadas,
|
||||
@RequestParam(value = "extItinerario", required = false) String extItinerario,
|
||||
@RequestParam(value = "optPasada", required = false ) String optativaPasada,
|
||||
HttpSession session){
|
||||
|
||||
Alumno alumnoActual = (Alumno) session.getAttribute("alumnoActual");
|
||||
if (alumnoActual == null) {
|
||||
return "redirect:/registro";
|
||||
}
|
||||
|
||||
Matriculacion matriculacion = (Matriculacion) session.getAttribute("matriculacion");
|
||||
CursoCiclo cursoCiclo = (CursoCiclo) session.getAttribute("cursoCiclo");
|
||||
List<Optativas> optativasList = new ArrayList<>();
|
||||
Optativas optativa;
|
||||
int orden;
|
||||
System.out.println("ESTAS SON LAS OPCIONES SELECCIONADAS: " + Arrays.toString(opcionesSeleccionadas));
|
||||
for (int i = 0; i < opcionesSeleccionadas.length -1; i++){
|
||||
Modulo modulo = moduloService.findByNombre(opcionesSeleccionadas[i], alumnoActual, cursoCiclo);
|
||||
orden = i+1;
|
||||
if (modulo.isEsItinerario() || modulo.getBloque() == 4 || modulo.getBloque() > 6){
|
||||
orden = 0;
|
||||
}
|
||||
optativa = new Optativas(orden, matriculacion, modulo);
|
||||
optativasList.add(optativa);
|
||||
}
|
||||
boolean esPDC = (boolean) session.getAttribute("esPDC");
|
||||
|
||||
if (esPDC && cursoCiclo.getCurso().getId() == 4){
|
||||
for (Modulo modulo : moduloService.findListPDC4()){
|
||||
optativasList.add(new Optativas(0, matriculacion, modulo));
|
||||
}
|
||||
}
|
||||
session.setAttribute("optativasList", optativasList);
|
||||
session.setAttribute("extItinerario", extItinerario);
|
||||
session.setAttribute("optPasada", optativaPasada);
|
||||
if (esMatricula){
|
||||
return "redirect:/extra";
|
||||
} else {
|
||||
return "redirect:/finalYResumen";
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@PostMapping("/actualizarAlumno")
|
||||
private String actualizarAlumno(HttpSession session,
|
||||
@RequestParam("opcion2") String opcion2, @RequestParam("opcion3") String opcion3,
|
||||
@RequestParam("limitaciontxt") String limitaciontxt,
|
||||
@RequestParam("patologiaSeleccionada") String patologiaSeleccionada,
|
||||
@RequestParam("medicaciontxt") String medicaciontxt,
|
||||
@RequestParam("madretxt") String madretxt,
|
||||
@RequestParam("parentescotxt") String parentesctotxt
|
||||
|
||||
)
|
||||
{
|
||||
Alumno alumnoActual = (Alumno) session.getAttribute("alumnoActual");
|
||||
if (alumnoActual == null) {
|
||||
return "redirect:/registro";
|
||||
}
|
||||
boolean esRepetidor = (boolean) session.getAttribute("esRepetidor");
|
||||
alumnoActual.setEsRepetidor(esRepetidor);
|
||||
boolean esAmpa = opcion2.equals("si");
|
||||
alumnoActual.setAmpa(esAmpa);
|
||||
boolean esLimitacion = opcion3.equals("si");
|
||||
alumnoActual.setLimitacion(esLimitacion);
|
||||
alumnoActual.setTxtLimitacion(limitaciontxt);
|
||||
alumnoActual.setPatologia(patologiaService.getPatologiaByNombre(patologiaSeleccionada));
|
||||
alumnoActual.setMedicacion(medicaciontxt);
|
||||
alumnoActual.setNombreApellidoMadre(madretxt);
|
||||
alumnoActual.setParentesco(parentesctotxt);
|
||||
|
||||
|
||||
|
||||
alumnoService.guardarAlumno(alumnoActual);
|
||||
return "redirect:/finalYResumen";
|
||||
}
|
||||
|
||||
@GetMapping("/finalYResumen")
|
||||
private String finalYResumen(HttpSession session, Model model, RedirectAttributes redirectAttributes){
|
||||
Alumno alumnoActual = (Alumno) session.getAttribute("alumnoActual");
|
||||
if (alumnoActual == null) {
|
||||
return "redirect:/registro";
|
||||
}
|
||||
model.addAttribute("esMatricula");
|
||||
CursoCiclo cursoCiclo = (CursoCiclo) session.getAttribute("cursoCiclo");
|
||||
Date fechaHoraActual = new Date();
|
||||
|
||||
String optPasada = (String) session.getAttribute("optPasada");
|
||||
String extItinerario = (String) session.getAttribute("extItinerario");
|
||||
|
||||
if (!alumnoActual.getMatFamilia().equals("FP") && cursoCiclo.getCiclo().getFamilia().getId() != 2){
|
||||
alumnoActual.setOptPasada(optPasada);
|
||||
System.out.println("ACTUALIZANDO OPTATIVA PASADA" + optPasada);
|
||||
if (!(boolean) session.getAttribute("esPDC") ){
|
||||
if (cursoCiclo.getCurso().getNombre().equals("CUARTO")){
|
||||
alumnoActual.setExtItinerario(moduloService.findByNombre(extItinerario, alumnoActual, cursoCiclo).getId());
|
||||
model.addAttribute("extItinerarioNombre", moduloService.findById(alumnoActual.getExtItinerario()).getNombre());
|
||||
}
|
||||
|
||||
System.out.println("ACTUALIZANDO EXTRA ITINERARIO" + extItinerario);
|
||||
}
|
||||
alumnoService.guardarAlumno(alumnoActual);
|
||||
}
|
||||
|
||||
|
||||
Matriculacion matriculacion = (Matriculacion) session.getAttribute("matriculacion");
|
||||
matriculacion.setFecha(fechaHoraActual);
|
||||
matriculacion.setAlumno(alumnoActual);
|
||||
matriculacion.setCursoCiclo(cursoCiclo);
|
||||
int matriculacionAux = matriculacionService.getMatriculacionByIdAlumno(alumnoActual.getId());
|
||||
if (matriculacionAux != 0){
|
||||
session.setAttribute("idMatricula", matriculacionAux);
|
||||
return "redirect:/existeMatriculacion";
|
||||
}
|
||||
matriculacionService.guardarMatriculacion(matriculacion);
|
||||
if (!alumnoActual.getMatFamilia().equals("FP")){
|
||||
List<Optativas> optativasList = (List<Optativas>) session.getAttribute("optativasList");
|
||||
for (Optativas optativa : optativasList){
|
||||
optativasService.guardarOptativas(optativa);
|
||||
}
|
||||
matriculacion.setOptativas(optativasList);
|
||||
}
|
||||
|
||||
|
||||
model.addAttribute("matriculacion", matriculacion);
|
||||
model.addAttribute("alumno", alumnoActual);
|
||||
|
||||
/*EmailBody emailBody = new EmailBody(getInfoHtmltoString(alumnoActual, matriculacion), "luis.cortes.a@ies1xabia.org",
|
||||
"Encuesta: " + alumnoActual.getNia() + " " + alumnoActual.getNombre() + " " + alumnoActual.getApellido1(), "prematricula@ies.edu.es");
|
||||
try {
|
||||
sendEmail(emailBody);
|
||||
} catch (Exception e){
|
||||
System.out.println("NO SE HA PODIDO ENVIAR EL CORREO");
|
||||
model.addAttribute("errorCorreo", true);
|
||||
}*/
|
||||
session.setAttribute("alumnoActual", null);
|
||||
return "informacion";
|
||||
}
|
||||
|
||||
private void sendEmail(EmailBody emailBody) {
|
||||
emailPort.sendEmail(emailBody);
|
||||
}
|
||||
|
||||
@GetMapping("/existeMatriculacion")
|
||||
public String existeMatriculacion(HttpSession session, Model model){
|
||||
Alumno alumnoActual = (Alumno) session.getAttribute("alumnoActual");
|
||||
if (alumnoActual == null) {
|
||||
return "redirect:/registro";
|
||||
}
|
||||
|
||||
String cursoCiclo = null;
|
||||
try {
|
||||
model.addAttribute("alumno", alumnoActual);
|
||||
int idMatricula = (int) session.getAttribute("idMatricula");
|
||||
cursoCiclo = cursoCicloService.findByMatriculacionId(idMatricula);
|
||||
model.addAttribute("cursoCicloString", cursoCiclo);
|
||||
}catch (Exception e){
|
||||
System.out.println("ERROR AL OBTENER LA MATRICULA" + e.getMessage());
|
||||
}
|
||||
return "existe_matricula";
|
||||
}
|
||||
|
||||
|
||||
@PostMapping("/borrarMatricula")
|
||||
public String borrarMatricula(HttpSession session, RedirectAttributes redirectAttributes){
|
||||
Alumno alumnoActual = (Alumno) session.getAttribute("alumnoActual");
|
||||
if (alumnoActual == null) {
|
||||
return "redirect:/registro";
|
||||
}
|
||||
|
||||
int idMatriculacion = (int) session.getAttribute("idMatricula");
|
||||
/* List<Optativas> optativasList = null;
|
||||
try {
|
||||
optativasList = optativasService.findOptativasByIdMatriculacion(idMatriculacion);
|
||||
} catch (Exception e){
|
||||
System.out.println("ERROR AL OBTENER LISTAS" + e.getMessage());
|
||||
}
|
||||
|
||||
|
||||
//Eliminar optativas
|
||||
if (optativasList != null){
|
||||
try {
|
||||
optativasService.eliminarOptativas(optativasList);
|
||||
} catch (Exception e){
|
||||
System.out.println("ERROR AL ELIMINAR OPTATIVAS" + e.getMessage());
|
||||
}
|
||||
|
||||
}*/
|
||||
|
||||
alumnoService.borrarAllAlumno(idMatriculacion);
|
||||
|
||||
//Eliminar campos alum no
|
||||
alumnoActual.setAmpa(false);
|
||||
alumnoActual.setEsRepetidor(false);
|
||||
alumnoActual.setLimitacion(false);
|
||||
alumnoActual.setPatologia(null);
|
||||
alumnoActual.setMedicacion(null);
|
||||
alumnoActual.setNombreApellidoPadre(null);
|
||||
alumnoActual.setNombreApellidoMadre(null);
|
||||
alumnoActual.setParentesco(null);
|
||||
alumnoActual.setTxtFirma(null);
|
||||
alumnoActual.setTxtLimitacion(null);
|
||||
alumnoActual.setOptPasada(null);
|
||||
alumnoActual.setExtItinerario(0);
|
||||
alumnoService.guardarAlumno(alumnoActual);
|
||||
redirectAttributes.addFlashAttribute("mensaje", "Matrícula borrada correctamente.");
|
||||
return "redirect:/esRepetidor";
|
||||
}
|
||||
|
||||
@GetMapping("/estadisticas")
|
||||
public String estadisitcas(Model model){
|
||||
List<EstadisticasVista> estadisticasVistas = estadisticasService.findAll();
|
||||
|
||||
model.addAttribute("estadisticasVista", estadisticasVistas);
|
||||
return "estadisticas";
|
||||
}
|
||||
|
||||
|
||||
/* private String getInfoHtmltoString(Alumno alumno, Matriculacion matriculacion){
|
||||
StringBuilder htmlContent = new StringBuilder();
|
||||
|
||||
htmlContent.append("<!DOCTYPE html>\n")
|
||||
.append("<html lang=\"en\">\n")
|
||||
.append("<head>\n")
|
||||
.append(" <meta charset=\"UTF-8\">\n")
|
||||
.append(" <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n")
|
||||
.append(" <title>Resumen de Estadística</title>\n")
|
||||
.append(" <link rel=\"stylesheet\" href=\"https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/css/bootstrap.min.css\">\n")
|
||||
.append("</head>\n")
|
||||
.append("<body>\n")
|
||||
.append("<nav class=\"navbar navbar-dark bg-primary\">\n")
|
||||
.append(" <span class=\"navbar-brand mb-0 h1 text-center w-100\" style=\"font-size: 30px;\">\n")
|
||||
.append(" </span>\n")
|
||||
.append("</nav>\n")
|
||||
.append("<nav class=\"navbar navbar-light\" style=\"background-color: #e3f2fd; padding-top: 0; padding-bottom: 0;\">\n")
|
||||
.append(" <div class=\"container-fluid\">\n")
|
||||
.append(" <span class=\"navbar-text mx-auto\" style=\"font-size: 20px;\">\n")
|
||||
.append(" </span>\n")
|
||||
.append(" </div>\n")
|
||||
.append("</nav>\n")
|
||||
.append("\n")
|
||||
.append("<div class=\"container\">\n")
|
||||
.append(" <div class=\"row\">\n")
|
||||
.append(" <div class=\"col-md-6 mx-auto\">\n")
|
||||
.append(" <div class=\"card mt-5\">\n")
|
||||
.append(" <div class=\"card-header\">\n")
|
||||
.append(" <h2 class=\"text-center\">Resumen de Estadística</h2>\n")
|
||||
.append(" </div>\n")
|
||||
.append(" <div class=\"card-body\">\n")
|
||||
.append(" <h5>Información del Alumno:</h5>\n")
|
||||
.append(" <p><b>Nombre: </b>").append(alumno.getNombre()).append("</p>\n")
|
||||
.append(" <p><b>Apellidos: </b>").append(alumno.getApellido1())
|
||||
.append(alumno.getApellido2() != null ? " " + alumno.getApellido2() : "").append("</p>\n")
|
||||
.append(" <p><b>Correo 1: </b>").append(alumno.getCorreo1()).append("</p>\n")
|
||||
.append(" <p><b>DNI: </b>").append(alumno.getDni()).append("</p>\n")
|
||||
.append(" <p><b>Fecha de Nacimiento: </b>").append(new SimpleDateFormat("dd/MM/yyyy").format(alumno.getFechaNacimiento())).append("</p>\n");
|
||||
|
||||
if (alumno.isLimitacion()) {
|
||||
htmlContent.append(" <p><b>Limitación: </b>").append(alumno.getTxtLimitacion()).append("</p>\n");
|
||||
}
|
||||
if (alumno.isAmpa()) {
|
||||
htmlContent.append(" <p><b>AMPA:</b> Sí</p>\n");
|
||||
}
|
||||
if (alumno.getPatologia() != null) {
|
||||
htmlContent.append(" <p><b>Patología: </b>").append(alumno.getPatologia().getNombre()).append("</p>\n");
|
||||
}
|
||||
if (alumno.getMedicacion() != null && !alumno.getMedicacion().isEmpty()) {
|
||||
htmlContent.append(" <p><b>Medicación: </b>").append(alumno.getMedicacion()).append("</p>\n");
|
||||
}
|
||||
if (alumno.getTxtFirma() != null) {
|
||||
htmlContent.append(" <p><b>Firma: </b>").append(alumno.getTxtFirma()).append("</p>\n");
|
||||
}
|
||||
if (alumno.getNombreApellidoPadre() != null) {
|
||||
htmlContent.append(" <p><b>Nombre del Padre: </b>").append(alumno.getNombreApellidoPadre()).append("</p>\n");
|
||||
}
|
||||
if (alumno.getNombreApellidoMadre() != null) {
|
||||
htmlContent.append(" <p><b>Nombre de la Madre: </b>").append(alumno.getNombreApellidoMadre()).append("</p>\n");
|
||||
}
|
||||
if (alumno.getParentesco() != null) {
|
||||
htmlContent.append(" <p><b>Parentesco: </b>").append(alumno.getParentesco()).append("</p>\n");
|
||||
}
|
||||
|
||||
htmlContent.append(" <h5>Información de la Matrícula:</h5>\n")
|
||||
.append(" <p><b>Curso: </b>").append(matriculacion.getCursoCiclo().getCurso().getNumero()).append("</p>\n")
|
||||
.append(" <p><b>Ciclo: </b>").append(matriculacion.getCursoCiclo().getCiclo().getNombre()).append("</p>\n");
|
||||
|
||||
if (matriculacion.getOptativas().size() > 0) {
|
||||
htmlContent.append(" <p><b>Optativas:</b></p>\n")
|
||||
.append(" <ul>\n");
|
||||
for (int i = 0; i < matriculacion.getOptativas().size(); i++) {
|
||||
Optativas optativa = matriculacion.getOptativas().get(i);
|
||||
if (optativa.getOrden() > 0) {
|
||||
htmlContent.append(" <li>").append(i + 1).append(". ").append(optativa.getModulo().getNombre()).append("</li>\n");
|
||||
}
|
||||
}
|
||||
htmlContent.append(" </ul>\n");
|
||||
}
|
||||
|
||||
boolean hasOptionMaterias = matriculacion.getOptativas().stream().anyMatch(optativa -> optativa.getOrden() == 0 && (optativa.getModulo().getBloque() == 1 || optativa.getModulo().getBloque() == 2 || optativa.getModulo().getBloque() == 3));
|
||||
if (hasOptionMaterias) {
|
||||
htmlContent.append(" <p><b>Materias de opción:</b></p>\n")
|
||||
.append(" <ul>\n");
|
||||
for (Optativas optativa : matriculacion.getOptativas()) {
|
||||
if (optativa.getOrden() == 0 && (optativa.getModulo().getBloque() == 1 || optativa.getModulo().getBloque() == 2 || optativa.getModulo().getBloque() == 3)) {
|
||||
htmlContent.append(" <li>").append(optativa.getModulo().getNombre()).append("</li>\n");
|
||||
}
|
||||
}
|
||||
htmlContent.append(" </ul>\n");
|
||||
if (alumno.getExtItinerario() != 0) {
|
||||
htmlContent.append(" <p><b>Materia opción extra:</b></p>\n")
|
||||
.append(" <ul>\n")
|
||||
.append(" <li>").append(moduloService.findById(alumno.getExtItinerario()).getNombre()).append("</li>\n")
|
||||
.append(" </ul>\n");
|
||||
}
|
||||
}
|
||||
|
||||
boolean hasReligion = matriculacion.getOptativas().stream().anyMatch(optativa -> optativa.getOrden() == 0 && optativa.getModulo().getBloque() == 4);
|
||||
if (hasReligion) {
|
||||
htmlContent.append(" <p><b>Religión/Atención Educativa:</b></p>\n")
|
||||
.append(" <ul>\n");
|
||||
for (Optativas optativa : matriculacion.getOptativas()) {
|
||||
if (optativa.getOrden() == 0 && optativa.getModulo().getBloque() == 4) {
|
||||
htmlContent.append(" <li>").append(optativa.getModulo().getNombre()).append("</li>\n");
|
||||
}
|
||||
}
|
||||
htmlContent.append(" </ul>\n");
|
||||
}
|
||||
|
||||
boolean hasMath = matriculacion.getOptativas().stream().anyMatch(optativa -> optativa.getOrden() == 0 && optativa.getModulo().getBloque() == 5);
|
||||
if (hasMath) {
|
||||
htmlContent.append(" <p><b>Matemáticas:</b></p>\n")
|
||||
.append(" <ul>\n");
|
||||
for (Optativas optativa : matriculacion.getOptativas()) {
|
||||
if (optativa.getOrden() == 0 && optativa.getModulo().getBloque() == 5) {
|
||||
htmlContent.append(" <li>").append(optativa.getModulo().getNombre()).append("</li>\n");
|
||||
}
|
||||
}
|
||||
htmlContent.append(" </ul>\n");
|
||||
}
|
||||
|
||||
htmlContent.append(" </div>\n")
|
||||
.append(" </div>\n")
|
||||
.append(" </div>\n")
|
||||
.append(" </div>\n")
|
||||
.append("</div>\n")
|
||||
.append("<script src=\"https://kit.fontawesome.com/a076d05399.js\"></script>\n")
|
||||
.append("</body>\n")
|
||||
.append("</html>\n");
|
||||
|
||||
return htmlContent.toString();
|
||||
}*/
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,67 @@
|
||||
package com.proyecto.prematricula.email;
|
||||
|
||||
public class EmailBody {
|
||||
|
||||
private String content;
|
||||
|
||||
private String email;
|
||||
|
||||
private String subject;
|
||||
|
||||
private String cc;
|
||||
|
||||
public EmailBody(String content, String email, String subject) {
|
||||
this.content = content;
|
||||
this.email = email;
|
||||
this.subject = subject;
|
||||
}
|
||||
|
||||
public EmailBody(String content, String email, String subject, String cc) {
|
||||
this.content = content;
|
||||
this.email = email;
|
||||
this.subject = subject;
|
||||
this.cc = cc;
|
||||
}
|
||||
|
||||
public String getContent() {
|
||||
return content;
|
||||
}
|
||||
|
||||
public String getEmail() {
|
||||
return email;
|
||||
}
|
||||
|
||||
public String getSubject() {
|
||||
return subject;
|
||||
}
|
||||
|
||||
public void setContent(String content) {
|
||||
this.content = content;
|
||||
}
|
||||
|
||||
public void setEmail(String email) {
|
||||
this.email = email;
|
||||
}
|
||||
|
||||
public void setSubject(String subject) {
|
||||
this.subject = subject;
|
||||
}
|
||||
|
||||
public String getCc() {
|
||||
return cc;
|
||||
}
|
||||
|
||||
public void setCc(String cc) {
|
||||
this.cc = cc;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "EmailBody{" +
|
||||
"content='" + content + '\'' +
|
||||
", email='" + email + '\'' +
|
||||
", subject='" + subject + '\'' +
|
||||
", cc='" + cc + '\'' +
|
||||
'}';
|
||||
}
|
||||
}
|
@ -0,0 +1,9 @@
|
||||
package com.proyecto.prematricula.email;
|
||||
|
||||
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
@Repository
|
||||
public interface EmailPort {
|
||||
boolean sendEmail(EmailBody emailBody);
|
||||
}
|
@ -0,0 +1,45 @@
|
||||
package com.proyecto.prematricula.email;
|
||||
|
||||
|
||||
import jakarta.mail.MessagingException;
|
||||
import jakarta.mail.internet.MimeMessage;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.mail.javamail.JavaMailSender;
|
||||
import org.springframework.mail.javamail.MimeMessageHelper;
|
||||
|
||||
@Service
|
||||
public class EmailService implements EmailPort {
|
||||
private static final Logger LOGGER = LoggerFactory.getLogger(EmailService.class);
|
||||
|
||||
@Autowired
|
||||
private JavaMailSender sender;
|
||||
|
||||
@Override
|
||||
public boolean sendEmail(EmailBody emailBody) {
|
||||
LOGGER.info("EmailBody: {}", emailBody.toString());
|
||||
return sendEmailTool(emailBody.getContent(),emailBody.getEmail(), emailBody.getSubject(), emailBody.getCc());
|
||||
}
|
||||
|
||||
|
||||
private boolean sendEmailTool(String textMessage, String email,String subject, String cc) {
|
||||
boolean send = false;
|
||||
MimeMessage message = sender.createMimeMessage();
|
||||
MimeMessageHelper helper = new MimeMessageHelper(message);
|
||||
try {
|
||||
helper.setTo(email);
|
||||
helper.setText(textMessage, true);
|
||||
helper.setSubject(subject);
|
||||
sender.send(message);
|
||||
helper.setCc(cc);
|
||||
send = true;
|
||||
LOGGER.info("Mail enviado!");
|
||||
} catch (MessagingException e) {
|
||||
LOGGER.error("Hubo un error al enviar el mail: {}", e);
|
||||
}
|
||||
return send;
|
||||
}
|
||||
}
|
@ -0,0 +1,26 @@
|
||||
package com.proyecto.prematricula.enums;
|
||||
|
||||
public enum CursosEnum {
|
||||
PRIMERO, SEGUNDO, TERCERO, CUARTO;
|
||||
|
||||
public static String getNombreByNumero(int num){
|
||||
CursosEnum cursosEnum = null;
|
||||
switch (num){
|
||||
case 1:
|
||||
cursosEnum = PRIMERO;
|
||||
break;
|
||||
case 2:
|
||||
cursosEnum = SEGUNDO;
|
||||
break;
|
||||
case 3:
|
||||
cursosEnum = TERCERO;
|
||||
break;
|
||||
case 4:
|
||||
cursosEnum = CUARTO;
|
||||
break;
|
||||
}
|
||||
return String.valueOf(cursosEnum);
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,101 @@
|
||||
package com.proyecto.prematricula.modelos;
|
||||
import com.fasterxml.jackson.annotation.JsonBackReference;
|
||||
import com.fasterxml.jackson.annotation.JsonIgnore;
|
||||
import com.fasterxml.jackson.annotation.JsonManagedReference;
|
||||
import jakarta.persistence.*;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.boot.context.properties.bind.DefaultValue;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
@Entity
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Data
|
||||
public class Alumno {
|
||||
|
||||
@Id
|
||||
@GeneratedValue(strategy = GenerationType.IDENTITY)
|
||||
private int id;
|
||||
|
||||
@Column(nullable = false)
|
||||
private String nombre;
|
||||
|
||||
@Column(nullable = false)
|
||||
private String apellido1;
|
||||
|
||||
private String apellido2;
|
||||
|
||||
@Column(nullable = false)
|
||||
private String nia;
|
||||
|
||||
@Column(nullable = false)
|
||||
private String dni;
|
||||
|
||||
@Column(nullable = false)
|
||||
private String correo1;
|
||||
|
||||
@Column(nullable = false)
|
||||
private String correo2;
|
||||
|
||||
@Column(nullable = false)
|
||||
private String grupo;
|
||||
|
||||
@Column(nullable = false)
|
||||
private String contrasenya;
|
||||
|
||||
@Column(name = "fecha_nacimiento", nullable = false)
|
||||
private Date fechaNacimiento;
|
||||
|
||||
@Column(nullable = false)
|
||||
private String matActual;
|
||||
|
||||
@Column(nullable = true)
|
||||
private int matCurso;
|
||||
|
||||
@Column(length = 3)
|
||||
private String matFamilia;
|
||||
|
||||
@Column(nullable = false, columnDefinition = "BOOLEAN DEFAULT false")
|
||||
private boolean esRepetidor;
|
||||
|
||||
private String nombreApellidoPadre;
|
||||
|
||||
private String nombreApellidoMadre;
|
||||
|
||||
@Column(nullable = false, columnDefinition = "BOOLEAN DEFAULT false")
|
||||
private boolean limitacion;
|
||||
|
||||
private String txtLimitacion;
|
||||
|
||||
@Column(nullable = false, columnDefinition = "BOOLEAN DEFAULT false")
|
||||
private boolean religion;
|
||||
|
||||
@Column(nullable = false, columnDefinition = "BOOLEAN DEFAULT false")
|
||||
private boolean ampa;
|
||||
|
||||
private String txtPatologia;
|
||||
|
||||
private String medicacion;
|
||||
|
||||
private String txtFirma;
|
||||
|
||||
private String parentesco;
|
||||
|
||||
private String optPasada;
|
||||
|
||||
@Column(name = "ext_itinerario", columnDefinition = "INT DEFAULT 0")
|
||||
private int extItinerario;
|
||||
|
||||
@ManyToOne(cascade = {CascadeType.ALL}, fetch = FetchType.LAZY)
|
||||
@JoinColumn(name = "patologia_id")
|
||||
@JsonBackReference
|
||||
private Patologia patologia;
|
||||
|
||||
@OneToMany(mappedBy = "alumno", cascade = CascadeType.ALL, fetch = FetchType.EAGER)
|
||||
@JsonManagedReference("alumno-matriculacion")
|
||||
private Set<Matriculacion> matriculacions = new HashSet<>();
|
||||
}
|
@ -0,0 +1,48 @@
|
||||
package com.proyecto.prematricula.modelos;
|
||||
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonBackReference;
|
||||
import com.fasterxml.jackson.annotation.JsonManagedReference;
|
||||
import jakarta.persistence.*;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
@Entity
|
||||
@NoArgsConstructor
|
||||
@Table(name = "ciclo")
|
||||
@AllArgsConstructor
|
||||
@Data
|
||||
public class Ciclo {
|
||||
|
||||
@Id
|
||||
@GeneratedValue(strategy = GenerationType.IDENTITY)
|
||||
private int id;
|
||||
|
||||
@Column(nullable = false)
|
||||
private String nombre;
|
||||
|
||||
private String nombreVal;
|
||||
|
||||
private String codigo;
|
||||
|
||||
private String codigoDos;
|
||||
|
||||
@ManyToOne()
|
||||
@JoinColumn(name = "familia_id")
|
||||
@JsonBackReference
|
||||
private Familia familia;
|
||||
|
||||
|
||||
@OneToMany(mappedBy = "ciclo", cascade = CascadeType.ALL, fetch = FetchType.EAGER)
|
||||
@JsonManagedReference("ciclo-cursoCiclo")
|
||||
private List<CursoCiclo> cursoCiclos = new ArrayList<>();
|
||||
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,33 @@
|
||||
package com.proyecto.prematricula.modelos;
|
||||
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonBackReference;
|
||||
import com.fasterxml.jackson.annotation.JsonManagedReference;
|
||||
import jakarta.persistence.*;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
@Entity
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Data
|
||||
@Table(name = "curso")
|
||||
public class Curso {
|
||||
|
||||
@Id
|
||||
@GeneratedValue(strategy = GenerationType.IDENTITY)
|
||||
private int id;
|
||||
|
||||
@Column(nullable = false)
|
||||
private String numero;
|
||||
|
||||
private String nombre;
|
||||
|
||||
@OneToMany(mappedBy = "curso", cascade = CascadeType.ALL, fetch = FetchType.EAGER)
|
||||
@JsonManagedReference("curso-cursoCiclo")
|
||||
private List<CursoCiclo> cursoCiclos = new ArrayList<>();
|
||||
|
||||
}
|
@ -0,0 +1,56 @@
|
||||
package com.proyecto.prematricula.modelos;
|
||||
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonBackReference;
|
||||
import com.fasterxml.jackson.annotation.JsonManagedReference;
|
||||
import jakarta.persistence.*;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.ToString;
|
||||
import org.hibernate.annotations.Fetch;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
@Entity
|
||||
@NoArgsConstructor
|
||||
@Table(name = "curso_ciclo")
|
||||
@AllArgsConstructor
|
||||
@Data
|
||||
@ToString
|
||||
public class CursoCiclo {
|
||||
|
||||
@Id
|
||||
@GeneratedValue(strategy = GenerationType.IDENTITY)
|
||||
private int id;
|
||||
|
||||
@ManyToOne()
|
||||
@JoinColumn(name = "curso_id")
|
||||
@JsonBackReference
|
||||
private Curso curso;
|
||||
|
||||
@ManyToOne()
|
||||
@JoinColumn(name = "ciclo_id")
|
||||
@JsonBackReference
|
||||
private Ciclo ciclo;
|
||||
|
||||
@OneToMany(mappedBy = "cursoCiclo", cascade = CascadeType.ALL, fetch = FetchType.EAGER)
|
||||
@JsonManagedReference("cursoCiclo-matriculacion")
|
||||
private List<Matriculacion> matriculacions = new ArrayList<>();
|
||||
|
||||
@OneToMany(mappedBy = "cursoCiclo", cascade = CascadeType.ALL, fetch = FetchType.EAGER)
|
||||
@JsonManagedReference("cursoCiclo-modulo")
|
||||
private List<Modulo> modulo = new ArrayList<>();
|
||||
|
||||
|
||||
@ManyToMany(fetch = FetchType.EAGER)
|
||||
@JoinTable(
|
||||
name = "promocion",
|
||||
joinColumns = @JoinColumn(name = "curso_ciclo_id"),
|
||||
inverseJoinColumns = @JoinColumn(name = "curso_ciclo_relacionado_id")
|
||||
)
|
||||
private Set<CursoCiclo> cursoCiclos;
|
||||
|
||||
}
|
@ -0,0 +1,30 @@
|
||||
package com.proyecto.prematricula.modelos;
|
||||
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonManagedReference;
|
||||
import jakarta.persistence.*;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@Entity
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Data
|
||||
@Table(name = "edu")
|
||||
public class Edu {
|
||||
|
||||
@Id
|
||||
@GeneratedValue(strategy = GenerationType.IDENTITY)
|
||||
private int id;
|
||||
|
||||
@Column(nullable = false)
|
||||
private String nombre;
|
||||
|
||||
@OneToMany(mappedBy = "edu", cascade = CascadeType.ALL, fetch = FetchType.EAGER)
|
||||
@JsonManagedReference("edu-familia")
|
||||
private List<Familia> familias = new ArrayList<>();
|
||||
}
|
@ -0,0 +1,28 @@
|
||||
package com.proyecto.prematricula.modelos;
|
||||
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonManagedReference;
|
||||
import jakarta.persistence.*;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@Entity
|
||||
public class EstadisticasVista {
|
||||
|
||||
@Id
|
||||
@GeneratedValue(strategy = GenerationType.IDENTITY)
|
||||
private int id;
|
||||
|
||||
private Long count;
|
||||
|
||||
private String nivel;
|
||||
|
||||
private Integer numero;
|
||||
|
||||
private String nombre;
|
||||
|
||||
}
|
@ -0,0 +1,39 @@
|
||||
package com.proyecto.prematricula.modelos;
|
||||
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonBackReference;
|
||||
import com.fasterxml.jackson.annotation.JsonManagedReference;
|
||||
import jakarta.persistence.*;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@Entity
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Data
|
||||
@Table(name = "familia")
|
||||
public class Familia {
|
||||
|
||||
@Id
|
||||
@GeneratedValue(strategy = GenerationType.IDENTITY)
|
||||
private int id;
|
||||
|
||||
@Column(nullable = false)
|
||||
private String nombre;
|
||||
|
||||
@Column(length = 3)
|
||||
private String codigo;
|
||||
|
||||
@ManyToOne()
|
||||
@JoinColumn(name = "edu_id")
|
||||
@JsonBackReference
|
||||
private Edu edu;
|
||||
|
||||
@OneToMany(mappedBy = "familia", cascade = CascadeType.ALL, fetch = FetchType.EAGER)
|
||||
@JsonManagedReference("familia-ciclo")
|
||||
private List<Ciclo> ciclos = new ArrayList<>();
|
||||
}
|
@ -0,0 +1,45 @@
|
||||
package com.proyecto.prematricula.modelos;
|
||||
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonBackReference;
|
||||
import com.fasterxml.jackson.annotation.JsonManagedReference;
|
||||
import jakarta.persistence.*;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.ToString;
|
||||
import org.hibernate.annotations.Fetch;
|
||||
import org.hibernate.annotations.FetchMode;
|
||||
import org.springframework.lang.NonNull;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
@Entity
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Data
|
||||
public class Matriculacion {
|
||||
|
||||
@Id
|
||||
@GeneratedValue(strategy = GenerationType.IDENTITY)
|
||||
private int id;
|
||||
|
||||
@Column(nullable = false)
|
||||
private Date fecha;
|
||||
|
||||
@ManyToOne()
|
||||
@JoinColumn(name = "alumno_id")
|
||||
@JsonBackReference
|
||||
private Alumno alumno;
|
||||
|
||||
@ManyToOne()
|
||||
@JoinColumn(name = "cursoCiclo_id")
|
||||
@NonNull
|
||||
@JsonBackReference
|
||||
private CursoCiclo cursoCiclo;
|
||||
|
||||
@OneToMany(mappedBy = "matriculacion", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
|
||||
@JsonBackReference("matriculacion-optativas")
|
||||
private List<Optativas> optativas = new ArrayList<>();
|
||||
|
||||
}
|
@ -0,0 +1,43 @@
|
||||
package com.proyecto.prematricula.modelos;
|
||||
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonBackReference;
|
||||
import com.fasterxml.jackson.annotation.JsonManagedReference;
|
||||
import jakarta.persistence.*;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
@Entity
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Data
|
||||
@Table(name = "modulo")
|
||||
public class Modulo {
|
||||
|
||||
@Id
|
||||
@GeneratedValue(strategy = GenerationType.IDENTITY)
|
||||
private int id;
|
||||
|
||||
@Column(nullable = false)
|
||||
private String nombre;
|
||||
|
||||
private String codigo;
|
||||
|
||||
private int bloque;
|
||||
|
||||
private boolean esItinerario = false;
|
||||
|
||||
@OneToMany(mappedBy = "modulo", cascade = CascadeType.ALL, fetch = FetchType.EAGER)
|
||||
@JsonManagedReference("modulo-optativas")
|
||||
private Set<Optativas> optativas = new HashSet<>();
|
||||
|
||||
@ManyToOne()
|
||||
@JoinColumn(name = "cursoCiclo_id")
|
||||
@JsonBackReference
|
||||
private CursoCiclo cursoCiclo;
|
||||
|
||||
}
|
@ -0,0 +1,39 @@
|
||||
package com.proyecto.prematricula.modelos;
|
||||
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonBackReference;
|
||||
import jakarta.persistence.*;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
|
||||
@Entity
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Data
|
||||
public class Optativas {
|
||||
|
||||
@Id
|
||||
@GeneratedValue(strategy = GenerationType.IDENTITY)
|
||||
private int id;
|
||||
|
||||
private int orden;
|
||||
|
||||
@ManyToOne()
|
||||
@JsonBackReference
|
||||
@JoinColumn(name = "matriculacion_id")
|
||||
private Matriculacion matriculacion;
|
||||
|
||||
@ManyToOne()
|
||||
@JsonBackReference
|
||||
@JoinColumn(name = "modulo_id")
|
||||
private Modulo modulo;
|
||||
|
||||
|
||||
public Optativas(int orden, Matriculacion matriculacion, Modulo opcion) {
|
||||
this.orden = orden;
|
||||
this.matriculacion = matriculacion;
|
||||
this.modulo = opcion;
|
||||
}
|
||||
}
|
@ -0,0 +1,30 @@
|
||||
package com.proyecto.prematricula.modelos;
|
||||
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonBackReference;
|
||||
import com.fasterxml.jackson.annotation.JsonIgnore;
|
||||
import com.proyecto.prematricula.servicios.Alumno.AlumnoService;
|
||||
import jakarta.persistence.*;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.util.Set;
|
||||
|
||||
@Entity
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Data
|
||||
public class Patologia {
|
||||
|
||||
@Id
|
||||
@GeneratedValue(strategy = GenerationType.IDENTITY)
|
||||
private int id;
|
||||
|
||||
@Column(nullable = false)
|
||||
private String nombre;
|
||||
|
||||
@OneToMany(mappedBy = "patologia", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
|
||||
@JsonBackReference("patologia-alumno")
|
||||
private Set<Alumno> alumnos;
|
||||
}
|
@ -0,0 +1,25 @@
|
||||
package com.proyecto.prematricula.repositorio;
|
||||
|
||||
|
||||
import com.proyecto.prematricula.modelos.Alumno;
|
||||
import org.springframework.data.jpa.repository.JpaRepository;
|
||||
import org.springframework.data.jpa.repository.Modifying;
|
||||
import org.springframework.data.jpa.repository.Query;
|
||||
import org.springframework.data.jpa.repository.query.Procedure;
|
||||
import org.springframework.data.repository.query.Param;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
@Repository
|
||||
public interface AlumnoRepositorio extends JpaRepository<Alumno, Integer> {
|
||||
|
||||
@Query("SELECT a FROM Alumno a WHERE a.nia = ?1")
|
||||
Alumno findByNia(String nia);
|
||||
|
||||
@Query("SELECT a FROM Alumno a WHERE a.id = ?1")
|
||||
Alumno findById(int id);
|
||||
|
||||
@Procedure(name = "borrarmatricula")
|
||||
void borrarmatricula(@Param("?1") int id);
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,35 @@
|
||||
package com.proyecto.prematricula.repositorio;
|
||||
|
||||
|
||||
import com.proyecto.prematricula.modelos.Ciclo;
|
||||
import com.proyecto.prematricula.modelos.Familia;
|
||||
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;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Repository
|
||||
public interface CicloRepositorio extends JpaRepository<Ciclo, Integer> {
|
||||
@Query("SELECT c FROM Ciclo c WHERE c.familia.id = :familiaId")
|
||||
List<Ciclo> findByFamiliaId(@Param("familiaId") int familiaId);
|
||||
|
||||
@Query("SELECT c FROM Ciclo c JOIN c.familia f JOIN f.edu e WHERE e.nombre = 'FP'")
|
||||
List<Ciclo> findAllCiclosByEduFP();
|
||||
|
||||
@Query("SELECT c FROM Ciclo c WHERE c.familia.id = 2")
|
||||
List<Ciclo> getCiclosBach();
|
||||
|
||||
@Query("SELECT c FROM Ciclo c WHERE c.codigo = ?1")
|
||||
Ciclo findByCodigo(String codigo);
|
||||
|
||||
@Query("SELECT c FROM Ciclo c WHERE c.nombre = ?1")
|
||||
Ciclo findByNombre(String nombre);
|
||||
|
||||
@Query("SELECT c FROM Ciclo c WHERE c.codigoDos = ?1")
|
||||
List<Ciclo> findCicloByCodigoDos(String codigoDos);
|
||||
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,25 @@
|
||||
package com.proyecto.prematricula.repositorio;
|
||||
|
||||
import com.proyecto.prematricula.modelos.Ciclo;
|
||||
import com.proyecto.prematricula.modelos.Curso;
|
||||
import com.proyecto.prematricula.modelos.CursoCiclo;
|
||||
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;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Repository
|
||||
public interface CursoCicloRepositorio extends JpaRepository<CursoCiclo, Integer> {
|
||||
@Query("SELECT c FROM Curso c INNER JOIN CursoCiclo cc ON c.id = cc.curso.id INNER JOIN Ciclo ci ON cc.ciclo.id = ci.id WHERE ci.id = :cicloId")
|
||||
List<Curso> findCursosByCicloId(@Param("cicloId") int cicloId);
|
||||
|
||||
@Query("SELECT cc FROM CursoCiclo cc WHERE cc.curso.id = :cursoId AND cc.ciclo.id = :cicloId")
|
||||
CursoCiclo findByCursoIdAndCicloId(@Param("cursoId") int cursoId, @Param("cicloId") int cicloId);
|
||||
|
||||
@Query("SELECT dimecursociclo(:matriculaId)")
|
||||
String findCursoCicloByIdMatricula(@Param("matriculaId") int matriculaId);
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,17 @@
|
||||
package com.proyecto.prematricula.repositorio;
|
||||
|
||||
|
||||
import com.proyecto.prematricula.modelos.Curso;
|
||||
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;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Repository
|
||||
public interface CursoRepositorio extends JpaRepository<Curso, Integer> {
|
||||
|
||||
@Query("SELECT c FROM Curso c WHERE c.nombre = ?1")
|
||||
Curso findByNombre(String nombre);
|
||||
}
|
@ -0,0 +1,15 @@
|
||||
package com.proyecto.prematricula.repositorio;
|
||||
|
||||
|
||||
import com.proyecto.prematricula.modelos.Alumno;
|
||||
import com.proyecto.prematricula.modelos.Edu;
|
||||
import org.springframework.data.jpa.repository.JpaRepository;
|
||||
import org.springframework.data.jpa.repository.Query;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
@Repository
|
||||
public interface EduRepositorio extends JpaRepository<Edu, Integer> {
|
||||
|
||||
@Query("SELECT e FROM Edu e WHERE e.nombre = ?1")
|
||||
Edu findByNombre(String nombre);
|
||||
}
|
@ -0,0 +1,10 @@
|
||||
package com.proyecto.prematricula.repositorio;
|
||||
|
||||
|
||||
import com.proyecto.prematricula.modelos.EstadisticasVista;
|
||||
import org.springframework.data.jpa.repository.JpaRepository;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
@Repository
|
||||
public interface EstadisticasRepositorio extends JpaRepository<EstadisticasVista, Integer > {
|
||||
}
|
@ -0,0 +1,21 @@
|
||||
package com.proyecto.prematricula.repositorio;
|
||||
|
||||
|
||||
import com.proyecto.prematricula.modelos.Edu;
|
||||
import com.proyecto.prematricula.modelos.Familia;
|
||||
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;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Repository
|
||||
public interface FamiliaRepositorio extends JpaRepository<Familia, Integer> {
|
||||
@Query("SELECT f FROM Familia f WHERE f.edu.id = :eduId")
|
||||
List<Familia> findByEduId(@Param("eduId") int eduId);
|
||||
|
||||
@Query("SELECT f FROM Familia f WHERE f.nombre = ?1")
|
||||
Familia findByNombre(String nombre);
|
||||
|
||||
}
|
@ -0,0 +1,22 @@
|
||||
package com.proyecto.prematricula.repositorio;
|
||||
|
||||
import com.proyecto.prematricula.modelos.Matriculacion;
|
||||
import org.springframework.data.jpa.repository.JpaRepository;
|
||||
import org.springframework.data.jpa.repository.Modifying;
|
||||
import org.springframework.data.jpa.repository.Query;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
@Repository
|
||||
public interface MatriculacionRepositorio extends JpaRepository<Matriculacion, Integer> {
|
||||
|
||||
@Query("SELECT existematricula(?1)")
|
||||
int getIdMatriculaByIdAlumno(int alumnoId);
|
||||
|
||||
|
||||
@Query("SELECT m FROM Matriculacion m WHERE m.id = ?1")
|
||||
Matriculacion getMatriculaById(int id);
|
||||
|
||||
@Modifying
|
||||
@Query("DELETE FROM Matriculacion WHERE id = ?1")
|
||||
void borrarMatriculacionById(int id);
|
||||
}
|
@ -0,0 +1,44 @@
|
||||
package com.proyecto.prematricula.repositorio;
|
||||
|
||||
import com.proyecto.prematricula.modelos.Modulo;
|
||||
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;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
|
||||
@Repository
|
||||
public interface ModuloRepositorio extends JpaRepository<Modulo, Integer> {
|
||||
|
||||
|
||||
@Query("SELECT m FROM Modulo m WHERE m.cursoCiclo.id = :cursoCicloId AND m.bloque = :bloque AND m.nombre NOT LIKE '%PDC%'")
|
||||
List<Modulo> findByIdCursoCicloAndBloque(@Param("cursoCicloId") int idCursoCiclo, @Param("bloque") int bloque);
|
||||
|
||||
@Query("SELECT m FROM Modulo m WHERE m.bloque = :bloque AND m.nombre NOT LIKE '%PDC%' ")
|
||||
List<Modulo> findModuloByBloque(@Param("bloque") int bloque);
|
||||
|
||||
@Query("SELECT m FROM Modulo m WHERE m.bloque > 0")
|
||||
List<Modulo> findModulosWithBloque();
|
||||
|
||||
@Query("SELECT m FROM Modulo m WHERE (m.bloque = :bloque1 OR m.bloque = :bloque2 OR m.bloque = :bloque3) AND m.nombre NOT LIKE '%PDC%'")
|
||||
List<Modulo> findBloqueExtItinerario(@Param("bloque1") int bloque1, @Param("bloque2") int bloque2, @Param("bloque3") int bloque3);
|
||||
|
||||
@Query("SELECT m FROM Modulo m WHERE m.nombre = :nombreModulo")
|
||||
List<Modulo> findByNombre(@Param("nombreModulo") String nombreModulo);
|
||||
|
||||
@Query("SELECT m FROM Modulo m WHERE m.id = :idModulo")
|
||||
Modulo findById(@Param("idModulo") int idModulo);
|
||||
|
||||
@Query("SELECT m FROM Modulo m where m.nombre = 'PDC4'")
|
||||
List<Modulo> findListPDC4();
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,17 @@
|
||||
package com.proyecto.prematricula.repositorio;
|
||||
|
||||
|
||||
import com.proyecto.prematricula.modelos.Optativas;
|
||||
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;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Repository
|
||||
public interface OptativaRepositorio extends JpaRepository<Optativas, Integer> {
|
||||
|
||||
@Query("SELECT o FROM Optativas o WHERE o.matriculacion.id = :matriculacionId")
|
||||
List<Optativas> findOptativasByIdMatriculacion(@Param("matriculacionId") int matriculacionId);
|
||||
}
|
@ -0,0 +1,14 @@
|
||||
package com.proyecto.prematricula.repositorio;
|
||||
|
||||
|
||||
import com.proyecto.prematricula.modelos.Patologia;
|
||||
import org.springframework.data.jpa.repository.JpaRepository;
|
||||
import org.springframework.data.jpa.repository.Query;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
@Repository
|
||||
public interface PatologiaRepositorio extends JpaRepository<Patologia, Integer> {
|
||||
|
||||
@Query("SELECT p FROM Patologia p WHERE p.nombre = ?1")
|
||||
Patologia getPatologiaPorNombre(String nombre);
|
||||
}
|
@ -0,0 +1,15 @@
|
||||
package com.proyecto.prematricula.servicios.Alumno;
|
||||
|
||||
import com.proyecto.prematricula.modelos.Alumno;
|
||||
|
||||
import java.util.Optional;
|
||||
|
||||
public interface AlumnoService {
|
||||
Alumno getAlumnoByNia(String nia);
|
||||
|
||||
Alumno getAlumnoById(int id);
|
||||
|
||||
void guardarAlumno(Alumno alumno);
|
||||
|
||||
void borrarAllAlumno(int idMatricula);
|
||||
}
|
@ -0,0 +1,44 @@
|
||||
package com.proyecto.prematricula.servicios.Alumno;
|
||||
|
||||
|
||||
import com.proyecto.prematricula.modelos.Alumno;
|
||||
import com.proyecto.prematricula.repositorio.AlumnoRepositorio;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.Optional;
|
||||
|
||||
@Service
|
||||
@Transactional
|
||||
public class AlumnoServiceImp implements AlumnoService {
|
||||
|
||||
@Autowired
|
||||
AlumnoRepositorio alumnoRepositorio;
|
||||
|
||||
@Override
|
||||
public Alumno getAlumnoByNia(String nia) {
|
||||
try {
|
||||
return alumnoRepositorio.findByNia(nia);
|
||||
} catch (Exception e){
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Alumno getAlumnoById(int id) {
|
||||
return alumnoRepositorio.findById(id);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void guardarAlumno(Alumno alumno) {
|
||||
alumnoRepositorio.save(alumno);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void borrarAllAlumno(int idMatricula) {
|
||||
alumnoRepositorio.borrarmatricula(idMatricula);
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,23 @@
|
||||
package com.proyecto.prematricula.servicios.Ciclo;
|
||||
|
||||
import com.proyecto.prematricula.modelos.Ciclo;
|
||||
import com.proyecto.prematricula.modelos.Edu;
|
||||
import com.proyecto.prematricula.modelos.Familia;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface CicloService {
|
||||
List<Ciclo> getCiclosByIdFamilia(int idFamilia);
|
||||
|
||||
List<Ciclo> getCiclosBach();
|
||||
|
||||
List<Ciclo> findAllCiclosByEduFP();
|
||||
|
||||
List<Ciclo> findCicloByCodigoDos(String codigoDos);
|
||||
|
||||
Ciclo getCicloByCodigo(String codigo);
|
||||
|
||||
Ciclo getCicloByNombre(String nombre);
|
||||
|
||||
void save(Ciclo ciclo);
|
||||
}
|
@ -0,0 +1,55 @@
|
||||
package com.proyecto.prematricula.servicios.Ciclo;
|
||||
|
||||
import com.proyecto.prematricula.modelos.Ciclo;
|
||||
import com.proyecto.prematricula.repositorio.CicloRepositorio;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Service
|
||||
public class CicloServiceImp implements CicloService{
|
||||
|
||||
@Autowired
|
||||
private CicloRepositorio cicloRepositorio;
|
||||
|
||||
@Override
|
||||
public List<Ciclo> getCiclosByIdFamilia(int idFamilia) {
|
||||
return cicloRepositorio.findByFamiliaId(idFamilia);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Ciclo> getCiclosBach() {
|
||||
List<Ciclo> ciclosBach = cicloRepositorio.getCiclosBach();
|
||||
ciclosBach.removeIf(ciclo -> ciclo.getCodigo().isEmpty());
|
||||
return ciclosBach;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Ciclo> findAllCiclosByEduFP() {
|
||||
return cicloRepositorio.findAllCiclosByEduFP();
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Ciclo> findCicloByCodigoDos(String codigoDos) {
|
||||
return cicloRepositorio.findCicloByCodigoDos(codigoDos);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public Ciclo getCicloByCodigo(String codigo) {
|
||||
return cicloRepositorio.findByCodigo(codigo);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Ciclo getCicloByNombre(String nombre) {
|
||||
return cicloRepositorio.findByNombre(nombre);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void save(Ciclo ciclo) {
|
||||
cicloRepositorio.save(ciclo);
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,12 @@
|
||||
package com.proyecto.prematricula.servicios.Curso;
|
||||
|
||||
import com.proyecto.prematricula.modelos.Ciclo;
|
||||
import com.proyecto.prematricula.modelos.Curso;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface CursoService {
|
||||
|
||||
|
||||
Curso getCursoByNombre(String nombre);
|
||||
}
|
@ -0,0 +1,23 @@
|
||||
package com.proyecto.prematricula.servicios.Curso;
|
||||
|
||||
import com.proyecto.prematricula.modelos.Ciclo;
|
||||
import com.proyecto.prematricula.modelos.Curso;
|
||||
import com.proyecto.prematricula.repositorio.CursoRepositorio;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
|
||||
@Service
|
||||
public class CursoServiceImp implements CursoService {
|
||||
|
||||
@Autowired
|
||||
private CursoRepositorio cursoRepositorio;
|
||||
|
||||
|
||||
@Override
|
||||
public Curso getCursoByNombre(String nombre) {
|
||||
return cursoRepositorio.findByNombre(nombre);
|
||||
}
|
||||
}
|
@ -0,0 +1,15 @@
|
||||
package com.proyecto.prematricula.servicios.CursoCiclo;
|
||||
|
||||
import com.proyecto.prematricula.modelos.Curso;
|
||||
import com.proyecto.prematricula.modelos.CursoCiclo;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface CursoCicloService {
|
||||
|
||||
List<Curso> getCursoByIdCiclo(int idCiclo);
|
||||
|
||||
CursoCiclo findByCursoIdAndCicloId(int idCurso, int idCiclo);
|
||||
|
||||
String findByMatriculacionId(int matriculaId);
|
||||
}
|
@ -0,0 +1,32 @@
|
||||
package com.proyecto.prematricula.servicios.CursoCiclo;
|
||||
|
||||
|
||||
import com.proyecto.prematricula.modelos.Curso;
|
||||
import com.proyecto.prematricula.modelos.CursoCiclo;
|
||||
import com.proyecto.prematricula.repositorio.CursoCicloRepositorio;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Service
|
||||
public class CursoCicloServiceImp implements CursoCicloService {
|
||||
|
||||
@Autowired
|
||||
private CursoCicloRepositorio cursoCicloRepositorio;
|
||||
|
||||
@Override
|
||||
public List<Curso> getCursoByIdCiclo(int idCiclo) {
|
||||
return cursoCicloRepositorio.findCursosByCicloId(idCiclo);
|
||||
}
|
||||
|
||||
@Override
|
||||
public CursoCiclo findByCursoIdAndCicloId(int idCurso, int idCiclo) {
|
||||
return cursoCicloRepositorio.findByCursoIdAndCicloId(idCurso, idCiclo);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String findByMatriculacionId(int matriculaId) {
|
||||
return cursoCicloRepositorio.findCursoCicloByIdMatricula(matriculaId);
|
||||
}
|
||||
}
|
@ -0,0 +1,11 @@
|
||||
package com.proyecto.prematricula.servicios.Edu;
|
||||
|
||||
import com.proyecto.prematricula.modelos.Edu;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface EduService {
|
||||
Edu getEduByNombre(String nombre);
|
||||
|
||||
List<Edu> getAllEdu();
|
||||
}
|
@ -0,0 +1,25 @@
|
||||
package com.proyecto.prematricula.servicios.Edu;
|
||||
|
||||
|
||||
import com.proyecto.prematricula.modelos.Edu;
|
||||
import com.proyecto.prematricula.repositorio.EduRepositorio;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Service
|
||||
public class EduServiceImp implements EduService {
|
||||
|
||||
@Autowired
|
||||
private EduRepositorio eduRepositorio;
|
||||
|
||||
@Override
|
||||
public Edu getEduByNombre(String nombre) {
|
||||
return eduRepositorio.findByNombre(nombre);
|
||||
}
|
||||
|
||||
public List<Edu> getAllEdu() {
|
||||
return eduRepositorio.findAll();
|
||||
}
|
||||
}
|
@ -0,0 +1,10 @@
|
||||
package com.proyecto.prematricula.servicios.Estadisticas;
|
||||
|
||||
import com.proyecto.prematricula.modelos.EstadisticasVista;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface EstadisticasService {
|
||||
|
||||
List<EstadisticasVista> findAll();
|
||||
}
|
@ -0,0 +1,22 @@
|
||||
package com.proyecto.prematricula.servicios.Estadisticas;
|
||||
|
||||
|
||||
import com.proyecto.prematricula.modelos.EstadisticasVista;
|
||||
import com.proyecto.prematricula.repositorio.EstadisticasRepositorio;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Service
|
||||
public class EstadisticasServiceImp implements EstadisticasService{
|
||||
|
||||
@Autowired
|
||||
private EstadisticasRepositorio estadisticasRepositorio;
|
||||
|
||||
|
||||
@Override
|
||||
public List<EstadisticasVista> findAll() {
|
||||
return estadisticasRepositorio.findAll();
|
||||
}
|
||||
}
|
@ -0,0 +1,12 @@
|
||||
package com.proyecto.prematricula.servicios.Familia;
|
||||
|
||||
import com.proyecto.prematricula.modelos.Edu;
|
||||
import com.proyecto.prematricula.modelos.Familia;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface FamiliaService {
|
||||
List<Familia> getFamiliasByIdEdu(int idEdu);
|
||||
|
||||
Familia getFamiliaByNombre(String nombre);
|
||||
}
|
@ -0,0 +1,27 @@
|
||||
package com.proyecto.prematricula.servicios.Familia;
|
||||
|
||||
|
||||
import com.proyecto.prematricula.modelos.Edu;
|
||||
import com.proyecto.prematricula.modelos.Familia;
|
||||
import com.proyecto.prematricula.repositorio.FamiliaRepositorio;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Service
|
||||
public class FamiliaServiceImp implements FamiliaService{
|
||||
|
||||
@Autowired
|
||||
private FamiliaRepositorio familiaRepositorio;
|
||||
|
||||
@Override
|
||||
public List<Familia> getFamiliasByIdEdu(int idEdu) {
|
||||
return familiaRepositorio.findByEduId(idEdu);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Familia getFamiliaByNombre(String nombre) {
|
||||
return familiaRepositorio.findByNombre(nombre);
|
||||
}
|
||||
}
|
@ -0,0 +1,17 @@
|
||||
package com.proyecto.prematricula.servicios.Matriculacion;
|
||||
|
||||
import com.proyecto.prematricula.modelos.Matriculacion;
|
||||
|
||||
public interface MatriculacionService {
|
||||
|
||||
void guardarMatriculacion(Matriculacion matriculacion);
|
||||
|
||||
void eliminarMatriculacion(Matriculacion matriculacion);
|
||||
|
||||
int getMatriculacionByIdAlumno(int idAlumno);
|
||||
|
||||
Matriculacion getMatriculaById(int id);
|
||||
|
||||
void borrarMatriculaById(int id);
|
||||
|
||||
}
|
@ -0,0 +1,43 @@
|
||||
package com.proyecto.prematricula.servicios.Matriculacion;
|
||||
|
||||
|
||||
import com.proyecto.prematricula.modelos.Matriculacion;
|
||||
import com.proyecto.prematricula.repositorio.MatriculacionRepositorio;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
@Service
|
||||
@Transactional
|
||||
public class MatriculacionServiceImp implements MatriculacionService {
|
||||
|
||||
@Autowired
|
||||
MatriculacionRepositorio matriculacionRepositorio;
|
||||
|
||||
@Override
|
||||
public void guardarMatriculacion(Matriculacion matriculacion) {
|
||||
matriculacionRepositorio.save(matriculacion);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void eliminarMatriculacion(Matriculacion matriculacion) {
|
||||
matriculacionRepositorio.delete(matriculacion);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getMatriculacionByIdAlumno(int idAlumno) {
|
||||
return matriculacionRepositorio.getIdMatriculaByIdAlumno(idAlumno);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Matriculacion getMatriculaById(int id) {
|
||||
return matriculacionRepositorio.getMatriculaById(id);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void borrarMatriculaById(int id) {
|
||||
matriculacionRepositorio.borrarMatriculacionById(id);
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,24 @@
|
||||
package com.proyecto.prematricula.servicios.Modulo;
|
||||
|
||||
import com.proyecto.prematricula.modelos.Alumno;
|
||||
import com.proyecto.prematricula.modelos.CursoCiclo;
|
||||
import com.proyecto.prematricula.modelos.Modulo;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
|
||||
public interface ModuloService {
|
||||
List<Modulo> findByIdCursoCicloAndBloque(int idCursoCiclo, int bloque);
|
||||
|
||||
Modulo findByNombre(String nombre, Alumno alumno, CursoCiclo cursoCiclo);
|
||||
|
||||
Modulo findById(int id);
|
||||
|
||||
List<Modulo> findModuloByBloque(int bloque);
|
||||
|
||||
List<Modulo> findBloqueExtItinerario(int bloque1, int bloque2, int bloque3);
|
||||
|
||||
List<Modulo> findListPDC4();
|
||||
|
||||
List<Modulo> findModulosWithBloque();
|
||||
}
|
@ -0,0 +1,75 @@
|
||||
package com.proyecto.prematricula.servicios.Modulo;
|
||||
|
||||
|
||||
import com.proyecto.prematricula.modelos.Alumno;
|
||||
import com.proyecto.prematricula.modelos.CursoCiclo;
|
||||
import com.proyecto.prematricula.modelos.Modulo;
|
||||
import com.proyecto.prematricula.repositorio.CursoCicloRepositorio;
|
||||
import com.proyecto.prematricula.repositorio.ModuloRepositorio;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
|
||||
@Service
|
||||
public class ModuloServiceImp implements ModuloService {
|
||||
|
||||
|
||||
@Autowired
|
||||
private ModuloRepositorio moduloRepositorio;
|
||||
|
||||
@Override
|
||||
public List<Modulo> findByIdCursoCicloAndBloque(int idCursoCiclo, int bloque) {
|
||||
return moduloRepositorio.findByIdCursoCicloAndBloque(idCursoCiclo, bloque);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Modulo findByNombre(String nombre, Alumno alumno, CursoCiclo cursoCiclo) {
|
||||
System.out.println("EL NOMBRE DEL MODULO ES: " + nombre);
|
||||
List<Modulo> modulos = moduloRepositorio.findByNombre(nombre);
|
||||
if (modulos.size() > 1){
|
||||
for (Modulo modulo : modulos){
|
||||
if (modulo.getCursoCiclo().getId() == cursoCiclo.getId()){
|
||||
System.out.println("DEVOLVIENDO EL MODULO DEL CURSO DEL ALUMNO" + modulo.getNombre());
|
||||
return modulo;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
try {
|
||||
System.out.println("DEVOLVIENDO UNICO MODULO");
|
||||
return modulos.get(0);
|
||||
} catch (Exception e){
|
||||
System.out.println("ERROR PORQUE: " + e.getMessage());
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Modulo findById(int id) {
|
||||
return moduloRepositorio.findById(id);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Modulo> findModuloByBloque(int bloque) {
|
||||
return moduloRepositorio.findModuloByBloque(bloque);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Modulo> findBloqueExtItinerario(int bloque1, int bloque2, int bloque3) {
|
||||
return moduloRepositorio.findBloqueExtItinerario(bloque1, bloque2, bloque3);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Modulo> findListPDC4() {
|
||||
return moduloRepositorio.findListPDC4();
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Modulo> findModulosWithBloque() {
|
||||
return moduloRepositorio.findModulosWithBloque();
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,16 @@
|
||||
package com.proyecto.prematricula.servicios.Optativas;
|
||||
|
||||
import com.proyecto.prematricula.modelos.Optativas;
|
||||
import org.springframework.data.jpa.repository.JpaRepository;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface OptativasService {
|
||||
|
||||
void guardarOptativas(Optativas optativas);
|
||||
|
||||
void eliminarOptativas(List<Optativas> optativas);
|
||||
|
||||
List<Optativas> findOptativasByIdMatriculacion(int matriculacionId);
|
||||
|
||||
}
|
@ -0,0 +1,36 @@
|
||||
package com.proyecto.prematricula.servicios.Optativas;
|
||||
|
||||
|
||||
import com.proyecto.prematricula.modelos.Alumno;
|
||||
import com.proyecto.prematricula.modelos.Optativas;
|
||||
import com.proyecto.prematricula.repositorio.OptativaRepositorio;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Service
|
||||
@Transactional
|
||||
public class OptativasServiceImp implements OptativasService{
|
||||
|
||||
@Autowired
|
||||
private OptativaRepositorio optativaRepositorio;
|
||||
|
||||
@Override
|
||||
public void guardarOptativas(Optativas optativas) {
|
||||
optativaRepositorio.save(optativas);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void eliminarOptativas(List<Optativas> optativasList) {
|
||||
for (Optativas optativas : optativasList){
|
||||
optativaRepositorio.delete(optativas);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Optativas> findOptativasByIdMatriculacion(int matriculacionId) {
|
||||
return optativaRepositorio.findOptativasByIdMatriculacion(matriculacionId);
|
||||
}
|
||||
}
|
@ -0,0 +1,12 @@
|
||||
package com.proyecto.prematricula.servicios.Patologia;
|
||||
|
||||
import com.proyecto.prematricula.modelos.Patologia;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface PatologiaService {
|
||||
|
||||
List<Patologia> getAllPatologias();
|
||||
|
||||
Patologia getPatologiaByNombre(String nombre);
|
||||
}
|
@ -0,0 +1,32 @@
|
||||
package com.proyecto.prematricula.servicios.Patologia;
|
||||
|
||||
|
||||
import com.proyecto.prematricula.modelos.Patologia;
|
||||
import com.proyecto.prematricula.repositorio.PatologiaRepositorio;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Service
|
||||
@Transactional
|
||||
public class PatologiaServiceImp implements PatologiaService {
|
||||
|
||||
|
||||
@Autowired
|
||||
private PatologiaRepositorio patologiaRepositorio;
|
||||
|
||||
|
||||
@Override
|
||||
public List<Patologia> getAllPatologias(){
|
||||
return patologiaRepositorio.findAll();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Patologia getPatologiaByNombre(String nombre) {
|
||||
return patologiaRepositorio.getPatologiaPorNombre(nombre);
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,31 @@
|
||||
server.port=8090
|
||||
spring.datasource.url=jdbc:mysql://localhost/prematricula
|
||||
spring.datasource.username=root
|
||||
#spring.datasource.password=1234
|
||||
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
|
||||
|
||||
#Configuraciones de JPA
|
||||
spring.jpa.hibernate.ddl-auto=update
|
||||
spring.jpa.show-sql=true
|
||||
|
||||
#Dialecto
|
||||
spring.jpa.database-platform=org.hibernate.dialect.MySQL8Dialect
|
||||
|
||||
#Insertados datos de pureba
|
||||
#spring.jpa.defer-datasource-initialization=true
|
||||
#spring.sql.init.mode=always
|
||||
|
||||
|
||||
#Configuración email
|
||||
spring.mail.host=mail.ies.edu.es
|
||||
spring.mail.port=587
|
||||
spring.mail.protocol=smtp
|
||||
spring.mail.username=prematricula@ies.edu.es
|
||||
spring.mail.password=1234
|
||||
spring.mail.properties.mail.smtp.auth=true
|
||||
spring.mail.properties.mail.smtp.starttls.enable=false
|
||||
spring.mail.properties.mail.smtp.starttls.required=false
|
||||
spring.mail.properties.mail.smtp.quitwait=false
|
||||
|
||||
es.matricula = true
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,15 @@
|
||||
.central-box {
|
||||
background-color: rgba(255, 255, 255, 0.8);
|
||||
padding: 20px;
|
||||
border-radius: 10px;
|
||||
box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
|
||||
margin: auto;
|
||||
width: 40%;
|
||||
max-width: 600px;
|
||||
height: auto;
|
||||
}
|
||||
|
||||
.title {
|
||||
text-align: center;
|
||||
}
|
||||
|
@ -0,0 +1,105 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en" xmlns:th="http://www.thymeleaf.org">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>NIA Encontrado</title>
|
||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/css/bootstrap.min.css" integrity="sha384-xOolHFLEh07PJGoPkLv1IbcEPTNtaed2xpHsD9ESMhqIYd0nLMwNLD69Npy4HI+N" crossorigin="anonymous">
|
||||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.4/css/all.min.css">
|
||||
<style>
|
||||
.custom-box {
|
||||
background-color: #f0f0f0;
|
||||
box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.3);
|
||||
padding: 20px;
|
||||
margin-bottom: 20px;
|
||||
border-radius: 10px;
|
||||
text-align: center;
|
||||
transition: box-shadow 0.3s ease;
|
||||
}
|
||||
.container-custom {
|
||||
margin-top: 50px;
|
||||
}
|
||||
.custom-box a {
|
||||
display: block;
|
||||
text-decoration: none;
|
||||
color: inherit;
|
||||
}
|
||||
.custom-box p {
|
||||
font-weight: bold;
|
||||
font-size: 30px;
|
||||
}
|
||||
.custom-box.clicked {
|
||||
box-shadow: 0px 0px 20px rgba(0, 255, 0, 1);
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<nav class="navbar navbar-dark bg-primary">
|
||||
<span class="navbar-brand mb-0 h1">
|
||||
Bienvenida/o, <span th:text="${alumno.nombre + ' ' + alumno.apellido1}"></span> (NIA: <span th:text="${alumno.nia}"></span>).
|
||||
</span>
|
||||
<a href="/registro" class="btn btn-danger btn-sm">
|
||||
<i class="fas fa-sign-out-alt"></i> Salir
|
||||
</a>
|
||||
</nav>
|
||||
<nav class="navbar navbar-light" style="background-color: #e3f2fd; padding-top: 0; padding-bottom: 0;">
|
||||
<div class="container-fluid">
|
||||
<span class="navbar-text mx-auto" style="font-size: 30px;">
|
||||
<span th:text="${informacion}"></span>
|
||||
</span>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<div class="container-custom">
|
||||
<div class="container my-4">
|
||||
<div class="row">
|
||||
<div class="col-md-6" th:each="opcion : ${ciclos}">
|
||||
<a th:href="@{/completado(opcion=${opcion.nombre})}" class="clickable-box">
|
||||
<div class="custom-box">
|
||||
<p th:text="${opcion.nombre}"></p>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="container my-4">
|
||||
<div class="row justify-content-right">
|
||||
<div class="col-auto ml-auto">
|
||||
<a class="btn btn-primary btn-lg" onclick="redirectToCompletado()">Siguiente →</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<script>
|
||||
let cicloSeleccionado = null; // Variable global para almacenar la opción seleccionada
|
||||
|
||||
const clickableBoxes = document.querySelectorAll('.clickable-box');
|
||||
|
||||
clickableBoxes.forEach(box => {
|
||||
box.addEventListener('click', function(event) {
|
||||
// Evitar que el evento de clic en las opciones provoque la redirección
|
||||
event.preventDefault();
|
||||
|
||||
document.querySelectorAll('.custom-box').forEach(box => {
|
||||
box.classList.remove('clicked');
|
||||
});
|
||||
const customBox = this.querySelector('.custom-box');
|
||||
customBox.classList.add('clicked');
|
||||
|
||||
// Guardar la opción seleccionada en la variable global
|
||||
cicloSeleccionado = customBox.querySelector('p').textContent;
|
||||
});
|
||||
});
|
||||
|
||||
function redirectToCompletado() {
|
||||
if (cicloSeleccionado) {
|
||||
window.location.href = '/completado?cic=' + cicloSeleccionado;
|
||||
} else {
|
||||
alert('Por favor, selecciona una opción antes de continuar.');
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
</body>
|
||||
</html>
|
@ -0,0 +1,114 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en" xmlns:th="http://www.thymeleaf.org">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>NIA Encontrado</title>
|
||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/css/bootstrap.min.css" integrity="sha384-xOolHFLEh07PJGoPkLv1IbcEPTNtaed2xpHsD9ESMhqIYd0nLMwNLD69Npy4HI+N" crossorigin="anonymous">
|
||||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.4/css/all.min.css">
|
||||
<style>
|
||||
.custom-box {
|
||||
background-color: #f0f0f0;
|
||||
box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.3);
|
||||
padding: 20px;
|
||||
margin-bottom: 20px;
|
||||
border-radius: 10px;
|
||||
text-align: center;
|
||||
transition: box-shadow 0.3s ease;
|
||||
}
|
||||
.container-custom {
|
||||
margin-top: 50px;
|
||||
}
|
||||
.custom-box a {
|
||||
display: block;
|
||||
text-decoration: none;
|
||||
color: inherit;
|
||||
}
|
||||
.custom-box p {
|
||||
font-weight: bold;
|
||||
font-size: 30px;
|
||||
}
|
||||
.custom-box.clicked {
|
||||
box-shadow: 0px 0px 20px rgba(0, 255, 0, 1);
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<nav class="navbar navbar-dark bg-primary">
|
||||
<span class="navbar-brand mb-0 h1">
|
||||
Bienvenida/o, <span th:text="${alumno.nombre + ' ' + alumno.apellido1}"></span> (NIA: <span th:text="${alumno.nia}"></span>)
|
||||
Tu matricula actual es: <span th:text="${alumno.matActual}"></span>
|
||||
</span>
|
||||
<a href="/registro" class="btn btn-danger btn-sm">
|
||||
<i class="fas fa-sign-out-alt"></i> Salir
|
||||
</a>
|
||||
</nav>
|
||||
<nav class="navbar navbar-light" style="background-color: #e3f2fd; padding-top: 0; padding-bottom: 0;">
|
||||
<div class="container-fluid">
|
||||
<span class="navbar-text mx-auto" style="font-size: 30px;">
|
||||
EDU → Familia → Ciclo → <b>Curso</b>
|
||||
</span>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<div th:if="${cicloSeleccionado}">
|
||||
<p>Has seleccionado: <span th:text="${cicloSeleccionado}"></span></p>
|
||||
</div>
|
||||
<div class="container-custom">
|
||||
<div class="container my-4">
|
||||
<div class="row">
|
||||
<div class="col-md-6" th:each="opcion : ${cursos}">
|
||||
<a th:href="@{/completado(opcion=${opcion.numero})}" class="clickable-box">
|
||||
<div class="custom-box">
|
||||
<p th:text="${opcion.numero}"></p>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="container my-4">
|
||||
<div class="row justify-content-between">
|
||||
<div class="col-auto">
|
||||
<a href="/ciclo" class="btn btn-primary btn-lg">← Atrás</a>
|
||||
</div>
|
||||
<div class="col-auto">
|
||||
<a class="btn btn-primary btn-lg" onclick="redirectToCompletado()">Finalizar →</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<script>
|
||||
let cursoSeleccionado = null; // Variable global para almacenar la opción seleccionada
|
||||
|
||||
const clickableBoxes = document.querySelectorAll('.clickable-box');
|
||||
|
||||
clickableBoxes.forEach(box => {
|
||||
box.addEventListener('click', function(event) {
|
||||
// Evitar que el evento de clic en las opciones provoque la redirección
|
||||
event.preventDefault();
|
||||
|
||||
document.querySelectorAll('.custom-box').forEach(box => {
|
||||
box.classList.remove('clicked');
|
||||
});
|
||||
const customBox = this.querySelector('.custom-box');
|
||||
customBox.classList.add('clicked');
|
||||
|
||||
// Guardar la opción seleccionada en la variable global
|
||||
cursoSeleccionado = customBox.querySelector('p').textContent;
|
||||
});
|
||||
});
|
||||
|
||||
// Función para redirigir a la página de curso solo si hay una opción seleccionada
|
||||
function redirectToCompletado() {
|
||||
if (cursoSeleccionado) {
|
||||
window.location.href = '/completado?cur=' + cursoSeleccionado;
|
||||
} else {
|
||||
alert('Por favor, selecciona una opción antes de continuar.');
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
</body>
|
||||
</html>
|
@ -0,0 +1,10 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>Title</title>
|
||||
</head>
|
||||
<body>
|
||||
<h1>ERROR</h1>
|
||||
</body>
|
||||
</html>
|
@ -0,0 +1,156 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en" xmlns:th="http://www.thymeleaf.org">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
|
||||
<title>Pregunta de Repetición</title>
|
||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/css/bootstrap.min.css" integrity="sha384-xOolHFLEh07PJGoPkLv1IbcEPTNtaed2xpHsD9ESMhqIYd0nLMwNLD69Npy4HI+N" crossorigin="anonymous">
|
||||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.4/css/all.min.css">
|
||||
<style>
|
||||
.custom-box {
|
||||
background-color: #e3f2fd;
|
||||
box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.3);
|
||||
padding: 10px 200px;
|
||||
border-radius: 10px;
|
||||
text-align: center;
|
||||
margin: 10px 0px 10px 0px;
|
||||
transition: box-shadow 0.3s ease;
|
||||
}
|
||||
.container-custom {
|
||||
margin-top: 50px;
|
||||
}
|
||||
.custom-box a {
|
||||
display: block;
|
||||
text-decoration: none;
|
||||
color: inherit;
|
||||
}
|
||||
.custom-box p {
|
||||
font-weight: bold;
|
||||
font-size: 30px;
|
||||
margin-top: 10px;
|
||||
}
|
||||
.custom-box.clicked {
|
||||
box-shadow: 0px 0px 20px rgba(0, 255, 0, 1);
|
||||
}
|
||||
.button-box {
|
||||
text-align: center;
|
||||
}
|
||||
.button-box button {
|
||||
border: none;
|
||||
padding: 5px 15px;
|
||||
border-radius: 10px;
|
||||
cursor: pointer;
|
||||
background-color: #007bff;
|
||||
color: #959595;
|
||||
font-size: 18px;
|
||||
transition: background-color 0.3s ease;
|
||||
}
|
||||
.button-box button:hover {
|
||||
background-color: #0056b3;
|
||||
}
|
||||
.list-group-item:hover,
|
||||
.list-group-item:focus {
|
||||
background-color: #f8f9fa;
|
||||
}
|
||||
|
||||
.list-group-item:has(input:checked) {
|
||||
background-color: #e3f2fd;
|
||||
}
|
||||
.list-group-item {
|
||||
padding: 0.5rem 1rem;
|
||||
}
|
||||
|
||||
.list-group-item input[type="radio"] {
|
||||
margin-left: 5px;
|
||||
}
|
||||
|
||||
.list-group-item label {
|
||||
margin-left: 30px;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<nav class="navbar navbar-dark bg-primary">
|
||||
<span class="navbar-brand mb-0 h1">
|
||||
Bienvenida/o, <span th:text="${alumno.nombre + ' ' + alumno.apellido1}"></span> (NIA: <span th:text="${alumno.nia}"></span>)
|
||||
</span>
|
||||
<span class="navbar-brand mb-01 h1" style="margin-right: 300px;">Tu matricula actual es: <span th:text="${alumno.matActual}"></span></span>
|
||||
<a href="/registro" class="btn btn-danger btn-sm">
|
||||
<i class="fas fa-sign-out-alt"></i> Salir
|
||||
</a>
|
||||
</nav>
|
||||
<div th:if="${mensaje}" class="alert alert-success" role="alert">
|
||||
<p th:text="${mensaje}"></p>
|
||||
</div>
|
||||
<form action="/redireccionRepetidor" method="post" onsubmit="return validarFormulario()">
|
||||
<div th:if="${esTercero} or ${esCuarto}">
|
||||
<nav class="navbar navbar-light" style="background-color: #e3f2fd; padding-top: 0; padding-bottom: 0;">
|
||||
<div class="container-fluid">
|
||||
<span class="navbar-text mx-auto" style="font-size: 30px;">
|
||||
¿Eres un alumno de PDC?
|
||||
</span>
|
||||
</div>
|
||||
</nav>
|
||||
<div class="container align-items-center" style="margin-left: 65vh; margin-top: 30px; margin-bottom: 30px;">
|
||||
<div class="row">
|
||||
<div class="col-md-6">
|
||||
<ul class="list-group">
|
||||
<li class="list-group-item">
|
||||
<input class="form-check-input me-1" type="radio" value="si" id="si2" name="opcion1">
|
||||
<label class="form-check-label stretched-link" for="si2">Si</label>
|
||||
</li>
|
||||
<li class="list-group-item">
|
||||
<input class="form-check-input me-1" type="radio" value="no" id="no2" name="opcion1">
|
||||
<label class="form-check-label stretched-link" for="no2">No</label>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<nav class="navbar navbar-light" style="background-color: #e3f2fd; padding-top: 0; padding-bottom: 0;">
|
||||
<div class="container-fluid">
|
||||
<span class="navbar-text mx-auto" style="font-size: 30px;">
|
||||
¿Vas a repetir tu curso actual?
|
||||
</span>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<div class="container-custom">
|
||||
<div class="container my-4">
|
||||
<div class="row">
|
||||
<div class="col-md-6 button-box">
|
||||
<button type="submit" class="clickable-box" name="esRepetidor" value="true">
|
||||
<div class="custom-box">
|
||||
<p>SI</p>
|
||||
</div>
|
||||
</button>
|
||||
</div>
|
||||
<div class="col-md-6 button-box">
|
||||
<button type="submit" class="clickable-box" name="esRepetidor" value="false">
|
||||
<div class="custom-box">
|
||||
<p>NO</p>
|
||||
</div>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
<script>
|
||||
function validarFormulario() {
|
||||
const si2 = document.getElementById('si2');
|
||||
const no2 = document.getElementById('no2');
|
||||
|
||||
if (!si2.checked && !no2.checked) {
|
||||
alert('Por favor, completa el campo de si eres un alumno de PDC.');
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
@ -0,0 +1,30 @@
|
||||
<!DOCTYPE html>
|
||||
<html xmlns:th="http://www.thymeleaf.org">
|
||||
<head>
|
||||
<title>Estadísticas</title>
|
||||
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">
|
||||
</head>
|
||||
<body>
|
||||
<div class="container">
|
||||
<h1>Estadísticas</h1>
|
||||
<table class="table table-striped">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Count</th>
|
||||
<th>Nivel</th>
|
||||
<th>Número</th>
|
||||
<th>Nombre</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr th:each="estadistica : ${estadisticasVista}">
|
||||
<td th:text="${estadistica.count}"></td>
|
||||
<td th:text="${estadistica.nivel}"></td>
|
||||
<td th:text="${estadistica.numero}"></td>
|
||||
<td th:text="${estadistica.nombre}"></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
@ -0,0 +1,57 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en" xmlns:th="http://www.thymeleaf.org">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>NIA Encontrado</title>
|
||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/css/bootstrap.min.css" integrity="sha384-xOolHFLEh07PJGoPkLv1IbcEPTNtaed2xpHsD9ESMhqIYd0nLMwNLD69Npy4HI+N" crossorigin="anonymous">
|
||||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.4/css/all.min.css">
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<nav class="navbar navbar-dark bg-primary">
|
||||
<span class="navbar-brand mb-0 h1">
|
||||
Bienvenida/o, <span th:text="${alumno.nombre + ' ' + alumno.apellido1}"></span> (NIA: <span th:text="${alumno.nia}"></span>)
|
||||
</span>
|
||||
<a href="/registro" class="btn btn-danger btn-sm">
|
||||
<i class="fas fa-sign-out-alt"></i> Salir
|
||||
</a>
|
||||
</nav>
|
||||
<nav class="navbar navbar-light" style="background-color: #e3f2fd; padding-top: 0; padding-bottom: 0;">
|
||||
<div class="container-fluid">
|
||||
<span class="navbar-text mx-auto" style="font-size: 30px;">
|
||||
<b>¡ATENCIÓN!</b>
|
||||
</span>
|
||||
</div>
|
||||
</nav>
|
||||
<div class="container text-center mt-4">
|
||||
<h3 style="color: #757575">Parece que ya existe una matricula registrada con este NIA </h3>
|
||||
<h4 style="color: #959595">¿Está seguro que desea eliminarla y comenzar una nueva? </h4>
|
||||
</div>
|
||||
<nav class="navbar navbar-light" style="background-color: #e3f2fd; padding-top: 0; padding-bottom: 0; margin-top: 50px">
|
||||
<div class="container-fluid">
|
||||
<span class="navbar-text mx-auto" style="font-size: 20px;">
|
||||
Curso y Ciclo: <span th:text="${cursoCicloString}"></span><br>
|
||||
</span>
|
||||
</div>
|
||||
</nav>
|
||||
<div class="container-fluid" style="padding: 10px; margin-top: 50px;">
|
||||
<div class="row justify-content-center">
|
||||
<div class="col-6 text-center">
|
||||
<form action="/registro" method="get">
|
||||
<button type="submit" class="btn btn-primary btn-lg">
|
||||
QUIERO MANTENER MI MATRICULA
|
||||
</button>
|
||||
</form>
|
||||
</div>
|
||||
<div class="col-6 text-center">
|
||||
<form action="/borrarMatricula" method="post">
|
||||
<button type="submit" class="btn btn-danger btn-lg">
|
||||
QUIERO ELIMINAR MI MATRICULA
|
||||
</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</body>
|
||||
</html>
|
@ -0,0 +1,326 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en" xmlns:th="http://www.thymeleaf.org">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>EXTRA</title>
|
||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet"
|
||||
integrity="sha384-QWTKZyjpPEjISv5WaRU9OFeRpok6YctnYmDr5pNlyT2bRjXh0JMhjY6hW+ALEwIH" crossorigin="anonymous">
|
||||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.4/css/all.min.css">
|
||||
<style>
|
||||
/* Estilos para el select */
|
||||
.form-select {
|
||||
border-radius: 10px; /* Ajusta el radio del borde */
|
||||
background-color: #e3f2fd; /* Color de fondo */
|
||||
color: #1976d2; /* Color del texto */
|
||||
font-size: 1rem; /* Tamaño de fuente */
|
||||
padding: 0.5rem 1rem; /* Padding interno */
|
||||
transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
|
||||
margin: 0 auto; /* Centrar horizontalmente */
|
||||
margin-top: 7px;
|
||||
height: 40px
|
||||
}
|
||||
|
||||
/* Estilos para cuando el select tiene foco */
|
||||
.form-select:focus {
|
||||
border-color: #80bdff;
|
||||
outline: 0;
|
||||
box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);
|
||||
}
|
||||
|
||||
/* Estilos para las opciones del select */
|
||||
.form-select option {
|
||||
background-color: #e3f2fd; /* Color de fondo */
|
||||
color: #1976d2; /* Color del texto */
|
||||
}
|
||||
h4 {
|
||||
margin-top: 30px;
|
||||
color: #6F6F6F;
|
||||
}
|
||||
.list-group-item:hover,
|
||||
.list-group-item:focus {
|
||||
background-color: #f8f9fa;
|
||||
}
|
||||
|
||||
.list-group-item:has(input:checked) {
|
||||
background-color: #e3f2fd;
|
||||
}
|
||||
|
||||
.form-control {
|
||||
background-color: #e3f2fd; /* Color de fondo */
|
||||
color: #1976d2; /* Color del texto */
|
||||
}
|
||||
|
||||
textarea[readonly] {
|
||||
background-color: #ccc; /* Cambia el color de fondo del textarea en modo de solo lectura */
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<nav class="navbar navbar-dark bg-primary">
|
||||
<span class="navbar-brand mb-0 h1 me-1">
|
||||
Bienvenida/o, <span th:text="${alumno.nombre + ' ' + alumno.apellido1}"></span> (NIA: <span th:text="${alumno.nia}"></span>)
|
||||
</span>
|
||||
<a href="/registro" class="btn btn-danger btn-sm me-2">
|
||||
<i class="fas fa-sign-out-alt"></i> Salir
|
||||
</a>
|
||||
</nav>
|
||||
<nav class="navbar navbar-light" style="background-color: #e3f2fd; padding-top: 0; padding-bottom: 0;">
|
||||
<div class="container-fluid">
|
||||
<span class="navbar-text mx-auto" style="font-size: 30px; color:#6F6F6F">
|
||||
<b>Información Adicional</b>
|
||||
</span>
|
||||
</div>
|
||||
</nav>
|
||||
<div class="container" style="margin-bottom: 50px;">
|
||||
<form action="/actualizarAlumno" method="POST" id="enviar">
|
||||
<div class="row">
|
||||
<div class="col-md-6">
|
||||
<h4>¿Quiere participar en el AMPA?</h4>
|
||||
<ul class="list-group">
|
||||
<li class="list-group-item">
|
||||
<input class="form-check-input me-1" type="radio" value="si" id="si2" name="opcion2">
|
||||
<label class="form-check-label stretched-link" for="si2">Si</label>
|
||||
</li>
|
||||
<li class="list-group-item">
|
||||
<input class="form-check-input me-1" type="radio" value="no" id="no2" name="opcion2">
|
||||
<label class="form-check-label stretched-link" for="no2">No</label>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<h4>¿Existe alguna limitación de la Patria Potestad en virtud de Resolución Judicial? </h4>
|
||||
<ul class="list-group">
|
||||
<li class="list-group-item">
|
||||
<input class="form-check-input me-1" type="radio" value="si" id="si3" name="opcion3">
|
||||
<label class="form-check-label stretched-link" for="si3">Si</label>
|
||||
</li>
|
||||
<li class="list-group-item">
|
||||
<input class="form-check-input me-1" type="radio" value="no" id="no3" name="opcion3">
|
||||
<label class="form-check-label stretched-link" for="no3">No</label>
|
||||
</li>
|
||||
</ul>
|
||||
<textarea class="form-control mt-2" id="textBox1" readonly rows="1" name="limitaciontxt"></textarea>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<h4>¿Sufre alguna patologia?</h4>
|
||||
<ul class="list-group">
|
||||
<li class="list-group-item">
|
||||
<input class="form-check-input me-1" type="radio" value="si" id="si4" name="opcion4">
|
||||
<label class="form-check-label stretched-link" for="si4">Si</label>
|
||||
</li>
|
||||
<li class="list-group-item">
|
||||
<input class="form-check-input me-1" type="radio" value="no" id="no4" name="opcion4">
|
||||
<label class="form-check-label stretched-link" for="no4">No</label>
|
||||
</li>
|
||||
</ul>
|
||||
<select id="select1" class="form-select form-select-lg" name="patologiaSeleccionada" hidden>
|
||||
<option hidden="hidden"></option>
|
||||
<option th:each="patologia : ${patologias}" th:text="${patologia.nombre}"></option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<h4>¿Toma alguna medicación?</h4>
|
||||
<ul class="list-group">
|
||||
<li class="list-group-item">
|
||||
<input class="form-check-input me-1" type="radio" value="si" id="si5" name="opcion5">
|
||||
<label class="form-check-label stretched-link" for="si5">Si</label>
|
||||
</li>
|
||||
<li class="list-group-item">
|
||||
<input class="form-check-input me-1" type="radio" value="no" id="no5" name="opcion5">
|
||||
<label class="form-check-label stretched-link" for="no5">No</label>
|
||||
</li>
|
||||
</ul>
|
||||
<textarea class="form-control mt-2" id="textBox2" readonly rows="1" name="medicaciontxt"></textarea>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<h4>Nombre y apellidos de madre, padre o tutor legal:</h4>
|
||||
<textarea class="form-control mt-2" id="textBox3" rows="1"
|
||||
name="madretxt"></textarea>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<h4>Parentesco:</h4>
|
||||
<select id="select2" class="form-select form-select-lg" name="parentescotxt">
|
||||
<option hidden="hidden"></option>
|
||||
<option>Madre</option>
|
||||
<option>Padre</option>
|
||||
<option>Tutor legal</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="container my-4">
|
||||
<div class="row justify-content-end">
|
||||
<div class="col-auto">
|
||||
<a class="btn btn-primary btn-lg" onclick="Enviar()">Enviar →</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
const si3 = document.getElementById('si3');
|
||||
const no3 = document.getElementById('no3');
|
||||
const si4 = document.getElementById('si4');
|
||||
const no4 = document.getElementById('no4');
|
||||
const si5 = document.getElementById('si5');
|
||||
const no5 = document.getElementById('no5');
|
||||
const textBox1 = document.getElementById('textBox1');
|
||||
const textBox2 = document.getElementById('textBox2');
|
||||
const textBox3 = document.getElementById('textBox3');
|
||||
const select1 = document.getElementById('select1');
|
||||
const select2 = document.getElementById('select2');
|
||||
|
||||
function ajustarAlturaTextArea(textArea) {
|
||||
textArea.style.height = 'auto';
|
||||
textArea.style.height = (textArea.scrollHeight) + 'px';
|
||||
}
|
||||
|
||||
function vaciarTextArea(textArea) {
|
||||
textArea.value = '';
|
||||
ajustarAlturaTextArea(textArea);
|
||||
}
|
||||
|
||||
si3.addEventListener('change', function() {
|
||||
if (this.checked) {
|
||||
textBox1.removeAttribute('readonly'); // Quita el modo de solo lectura
|
||||
textBox1.placeholder = 'Explique...';
|
||||
textBox1.value = ''; // Borra el contenido del campo de texto
|
||||
ajustarAlturaTextArea(textBox1); // Ajusta la altura del campo de texto si es necesario
|
||||
} else {
|
||||
textBox1.readOnly = true; // Establece el campo en modo de solo lectura
|
||||
textBox1.value = ''; // Borra el contenido del campo de texto
|
||||
}
|
||||
});
|
||||
|
||||
no3.addEventListener('change', function() {
|
||||
if (this.checked) {
|
||||
textBox1.readOnly = true; // Establece el campo en modo de solo lectura
|
||||
textBox1.placeholder = ' ';
|
||||
textBox1.value = ''; // Borra el contenido del campo de texto
|
||||
}
|
||||
});
|
||||
|
||||
si4.addEventListener('change', function() {
|
||||
if (this.checked) {
|
||||
select1.selectedIndex = 0; // Restablece la selección del elemento select
|
||||
select1.hidden = false;
|
||||
}
|
||||
});
|
||||
|
||||
no4.addEventListener('change', function() {
|
||||
if (this.checked) {
|
||||
select1.selectedIndex = 0; // Restablece la selección del elemento select
|
||||
select1.hidden = true;
|
||||
}
|
||||
});
|
||||
|
||||
si5.addEventListener('change', function() {
|
||||
if (this.checked) {
|
||||
textBox2.removeAttribute('readonly'); // Quita el modo de solo lectura
|
||||
textBox2.placeholder = 'Explique...';
|
||||
textBox2.value = ''; // Borra el contenido del campo de texto
|
||||
ajustarAlturaTextArea(textBox2); // Ajusta la altura del campo de texto si es necesario
|
||||
} else {
|
||||
textBox2.readOnly = true; // Establece el campo en modo de solo lectura
|
||||
textBox2.value = ''; // Borra el contenido del campo de texto
|
||||
}
|
||||
});
|
||||
|
||||
no5.addEventListener('change', function() {
|
||||
if (this.checked) {
|
||||
textBox2.readOnly = true; // Establece el campo en modo de solo lectura
|
||||
textBox2.placeholder = '';
|
||||
textBox2.value = ''; // Borra el contenido del campo de texto
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
|
||||
[textBox1, textBox2, textBox3].forEach(textArea => {
|
||||
textArea.addEventListener('input', () => ajustarAlturaTextArea(textArea));
|
||||
});
|
||||
|
||||
select1.addEventListener('change', function() {
|
||||
if (select1.selectedIndex === 0) {
|
||||
select1.setCustomValidity('required');
|
||||
} else {
|
||||
select1.setCustomValidity('');
|
||||
}
|
||||
});
|
||||
|
||||
select2.addEventListener('change', function() {
|
||||
if (select2.selectedIndex === 0) {
|
||||
select2.setCustomValidity('required');
|
||||
} else {
|
||||
select2.setCustomValidity('');
|
||||
}
|
||||
});
|
||||
|
||||
function Enviar() {
|
||||
const elementos = document.querySelectorAll('.form-check-input, .form-control, .form-select');
|
||||
elementos.forEach(elemento => {
|
||||
elemento.style.border = '1px solid #ced4da';
|
||||
});
|
||||
|
||||
let error = false;
|
||||
|
||||
if (!si2.checked && !no2.checked) {
|
||||
alert('Por favor, completa el campo de si desea participar en el AMPA.');
|
||||
error = true;
|
||||
si2.parentNode.style.border = '1px solid red';
|
||||
no2.parentNode.style.border = '1px solid red';
|
||||
}
|
||||
if (si3.checked && textBox1.value.trim() === '') {
|
||||
alert('Por favor, completa el campo de explicación para la limitación.');
|
||||
error = true;
|
||||
textBox1.style.border = '1px solid red';
|
||||
} else if (!si3.checked && !no3.checked) {
|
||||
alert('Por favor, completa el campo de si tiene alguna limitación.');
|
||||
error = true;
|
||||
si3.parentNode.style.border = '1px solid red';
|
||||
no3.parentNode.style.border = '1px solid red';
|
||||
}
|
||||
if (si4.checked && select1.value === '') {
|
||||
alert('Por favor, selecciona una patología.');
|
||||
error = true;
|
||||
select1.style.border = '1px solid red';
|
||||
} else if (!si4.checked && !no4.checked) {
|
||||
alert('Por favor, completa el campo de si tiene alguna patología.');
|
||||
error = true;
|
||||
si4.parentNode.style.border = '1px solid red';
|
||||
no4.parentNode.style.border = '1px solid red';
|
||||
}
|
||||
if (si5.checked && textBox2.value.trim() === '') {
|
||||
alert('Por favor, completa el campo de explicación para la medicación.');
|
||||
error = true;
|
||||
textBox2.style.border = '1px solid red';
|
||||
} else if (!si5.checked && !no5.checked) {
|
||||
alert('Por favor, completa el campo de si toma alguna medicación.');
|
||||
error = true;
|
||||
si5.parentNode.style.border = '1px solid red';
|
||||
no5.parentNode.style.border = '1px solid red';
|
||||
}
|
||||
if (textBox3.value.trim() === '') {
|
||||
alert('Por favor, completa el campo del nombre de la madre.');
|
||||
error = true;
|
||||
textBox3.style.border = '1px solid red';
|
||||
}
|
||||
if(select2.value === '') {
|
||||
alert('Por favor, selecciona el parentesco.');
|
||||
error = true;
|
||||
select2.style.border = '1px solid red';
|
||||
}
|
||||
|
||||
if (!error) {
|
||||
document.getElementById('enviar').submit();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
</script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js"
|
||||
integrity="sha384-YvpcrYf0tY3lHB60NNkmXc5s9fDVZLESaAA55NDzOxhy9GkcIdslK1eN7N6jIeHz"
|
||||
crossorigin="anonymous"></script>
|
||||
</body>
|
||||
</html>
|
@ -0,0 +1,115 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en" xmlns:th="http://www.thymeleaf.org">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>NIA Encontrado</title>
|
||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/css/bootstrap.min.css" integrity="sha384-xOolHFLEh07PJGoPkLv1IbcEPTNtaed2xpHsD9ESMhqIYd0nLMwNLD69Npy4HI+N" crossorigin="anonymous">
|
||||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.4/css/all.min.css">
|
||||
<style>
|
||||
.custom-box {
|
||||
background-color: #f0f0f0;
|
||||
box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.3);
|
||||
padding: 20px;
|
||||
margin-bottom: 20px;
|
||||
border-radius: 10px;
|
||||
text-align: center;
|
||||
transition: box-shadow 0.3s ease;
|
||||
}
|
||||
.container-custom {
|
||||
margin-top: 50px;
|
||||
}
|
||||
.custom-box a {
|
||||
display: block;
|
||||
text-decoration: none;
|
||||
color: inherit;
|
||||
}
|
||||
.custom-box p {
|
||||
font-weight: bold;
|
||||
font-size: 30px;
|
||||
}
|
||||
.custom-box.clicked {
|
||||
box-shadow: 0px 0px 20px rgba(0, 255, 0, 1);
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<nav class="navbar navbar-dark bg-primary">
|
||||
<span class="navbar-brand mb-0 h1">
|
||||
Bienvenida/o, <span th:text="${alumno.nombre + ' ' + alumno.apellido1}"></span> (NIA: <span th:text="${alumno.nia}"></span>)
|
||||
Tu matricula actual es: <span th:text="${alumno.matActual}"></span>
|
||||
</span>
|
||||
<a href="/registro" class="btn btn-danger btn-sm">
|
||||
<i class="fas fa-sign-out-alt"></i> Salir
|
||||
</a>
|
||||
</nav>
|
||||
<nav class="navbar navbar-light" style="background-color: #e3f2fd; padding-top: 0; padding-bottom: 0;">
|
||||
<div class="container-fluid">
|
||||
<span class="navbar-text mx-auto" style="font-size: 30px;">
|
||||
EDU → <b>Familia</b> → Ciclo → Curso
|
||||
</span>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<div th:if="${eduSeleccionado}">
|
||||
<p>Has seleccionado: <span th:text="${eduSeleccionado}"></span></p>
|
||||
</div>
|
||||
<div class="container-custom">
|
||||
<div class="container my-4">
|
||||
<div class="row">
|
||||
<div class="col-md-6" th:each="opcion : ${familias}">
|
||||
<a th:href="@{/ciclo(opcion=${opcion.nombre})}" class="clickable-box">
|
||||
<div class="custom-box">
|
||||
<p th:text="${opcion.nombre}"></p>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="container my-4">
|
||||
<div class="row justify-content-between">
|
||||
<div class="col-auto">
|
||||
<a href="/principal" class="btn btn-primary btn-lg">← Atrás</a>
|
||||
</div>
|
||||
<div class="col-auto">
|
||||
<a class="btn btn-primary btn-lg" onclick="redirectToCiclo()">Siguiente →</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<script>
|
||||
let familiaSeleccionada = null; // Variable global para almacenar la opción seleccionada
|
||||
|
||||
const clickableBoxes = document.querySelectorAll('.clickable-box');
|
||||
|
||||
clickableBoxes.forEach(box => {
|
||||
box.addEventListener('click', function(event) {
|
||||
// Evitar que el evento de clic en las opciones provoque la redirección
|
||||
event.preventDefault();
|
||||
|
||||
document.querySelectorAll('.custom-box').forEach(box => {
|
||||
box.classList.remove('clicked');
|
||||
});
|
||||
const customBox = this.querySelector('.custom-box');
|
||||
customBox.classList.add('clicked');
|
||||
|
||||
// Guardar la opción seleccionada en la variable global
|
||||
familiaSeleccionada = customBox.querySelector('p').textContent;
|
||||
console.log('Familia seleccionada:', familiaSeleccionada);
|
||||
});
|
||||
});
|
||||
|
||||
// Función para redirigir a la página de ciclo solo si hay una opción seleccionada
|
||||
function redirectToCiclo() {
|
||||
if (familiaSeleccionada) {
|
||||
window.location.href = '/ciclo?fam=' + familiaSeleccionada;
|
||||
} else {
|
||||
alert('Por favor, selecciona una opción antes de continuar.');
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
</body>
|
||||
</html>
|
@ -0,0 +1,133 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en" xmlns:th="http://www.thymeleaf.org">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Resumen de Información</title>
|
||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/css/bootstrap.min.css">
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/jspdf/2.5.3/jspdf.umd.min.js"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/html2pdf.js/0.9.2/html2pdf.bundle.min.js"></script>
|
||||
<script src="https://kit.fontawesome.com/a076d05399.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<nav class="navbar navbar-dark bg-primary">
|
||||
<span class="navbar-brand mb-0 h1 text-center w-100" style="font-size: 30px;">
|
||||
FINALIZADO
|
||||
</span>
|
||||
</nav>
|
||||
|
||||
<!--<div th:if="${errorCorreo}" class="alert alert-danger" role="alert">
|
||||
<nav class="navbar navbar-light" style="padding-top: 0; padding-bottom: 0;">
|
||||
<div class="container-fluid">
|
||||
<span class="navbar-text mx-auto" style="font-size: 20px;">
|
||||
No se le ha podido enviar la información a través del correo
|
||||
</span>
|
||||
</div>
|
||||
</nav>
|
||||
</div>
|
||||
<div th:if="${errorCorreo == null}">
|
||||
<nav class="navbar navbar-light" style="background-color: #e3f2fd; padding-top: 0; padding-bottom: 0;">
|
||||
<div class="container-fluid">
|
||||
<span class="navbar-text mx-auto" style="font-size: 20px;">
|
||||
Toda esta información se le ha sido enviada a través de tu correo electrónico
|
||||
</span>
|
||||
</div>
|
||||
</nav>
|
||||
</div> -->
|
||||
<nav class="navbar navbar-light" style="background-color: #e3f2fd; padding-top: 0; padding-bottom: 0;">
|
||||
<div class="container-fluid">
|
||||
<span class="navbar-text mx-auto" style="font-size: 20px;">
|
||||
Por favor, guarde e imprima el archivo PDF que se ha descargado, ya que constituye el resguardo de su matrícula.
|
||||
</span>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
|
||||
<div class="container">
|
||||
<div class="row" id="content-to-pdf">
|
||||
<div class="col-md-6 mx-auto">
|
||||
<div class="card mt-5">
|
||||
|
||||
<div class="card-header" >
|
||||
<h2 class="text-center">Resumen de Matrícula</h2>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<h5>Información del Alumno:</h5>
|
||||
<p><b>Nombre: </b><span th:text="${alumno.nombre}"></span></p>
|
||||
<p><b>Apellidos: </b><span th:text="${alumno.apellido1 + (alumno.apellido2 != null ? ' ' + alumno.apellido2 : '')}"></span></p>
|
||||
<p><b>Correo 1: </b><span th:text="${alumno.correo1}"></span></p>
|
||||
<p><b>DNI: </b><span th:text="${alumno.dni}"></span></p>
|
||||
<p><b>Fecha de Nacimiento: </b><span th:text="${#dates.format(alumno.fechaNacimiento, 'dd/MM/yyyy')}"></span></p>
|
||||
<p th:if="${alumno.limitacion}"><b>Limitación: </b><span th:text="${alumno.txtLimitacion}"></span></p>
|
||||
<p th:if="${alumno.ampa}"><b>AMPA:</b> <span th:text="${alumno.ampa ? 'Sí' : 'No'}"></span></p>
|
||||
<p th:if="${alumno.patologia != null}"><b>Patología: </b><span th:text="${alumno.patologia.nombre}"></span></p>
|
||||
<p th:if="${alumno.medicacion != null && !#strings.isEmpty(alumno.medicacion)}"><b>Medicación: </b><span th:text="${alumno.medicacion}"></span></p>
|
||||
<p th:if="${alumno.txtFirma != null}"><b>Firma: </b><span th:text="${alumno.txtFirma}"></span></p>
|
||||
<p th:if="${alumno.nombreApellidoPadre != null}"><b>Nombre del Padre: </b><span th:text="${alumno.nombreApellidoPadre}"></span></p>
|
||||
<p th:if="${alumno.nombreApellidoMadre != null}"><b>Nombre de la Madre: </b><span th:text="${alumno.nombreApellidoMadre}"></span></p>
|
||||
<p th:if="${alumno.parentesco != null}"><b>Parentesco: </b><span th:text="${alumno.parentesco}"></span></p>
|
||||
<h5>Información de la Matrícula:</h5>
|
||||
<p><b>Curso: </b><span th:text="${matriculacion.cursoCiclo.curso.numero}"></span></p>
|
||||
<p><b>Ciclo: </b><span th:text="${matriculacion.cursoCiclo.ciclo.nombre}"></span></p>
|
||||
<p th:if="${matriculacion.optativas.size() > 0}"><b>Optativas:</b></p>
|
||||
<ul>
|
||||
<li th:each="optativa, optativaIndex : ${matriculacion.optativas}"
|
||||
th:if="${optativa.orden > 0}"
|
||||
th:text="${optativaIndex.count + '. ' + optativa.modulo.nombre}"></li>
|
||||
</ul>
|
||||
<div th:if="${matriculacion.optativas.?[modulo.bloque == 1 || modulo.bloque == 2 || modulo.bloque == 3 || modulo.bloque > 6].size() > 0}">
|
||||
<p><b>Materias de opción:</b></p>
|
||||
<ul>
|
||||
<li th:each="optativa : ${matriculacion.optativas}"
|
||||
th:if="${optativa.orden == 0 && (optativa.modulo.bloque == 1 || optativa.modulo.bloque == 2 || optativa.modulo.bloque == 3 || optativa.modulo.bloque > 6)}"
|
||||
th:text="${optativa.modulo.nombre}"></li>
|
||||
</ul>
|
||||
<div th:if="${alumno.extItinerario > 0}">
|
||||
<p><b>Materia opción extra:</b></p>
|
||||
<ul>
|
||||
<li th:text="${extItinerarioNombre}"></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div th:if="${matriculacion.optativas.![modulo.bloque == 4].size() > 0}">
|
||||
<p><b>Religión/Atención Educativa:</b></p>
|
||||
<ul>
|
||||
<li th:each="optativa : ${matriculacion.optativas}"
|
||||
th:if="${optativa.orden == 0 && optativa.modulo.bloque == 4}"
|
||||
th:text="${optativa.modulo.nombre}"></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div th:if="${matriculacion.optativas.?[modulo.bloque == 5].size() > 0}">
|
||||
<p><b>Matemáticas:</b></p>
|
||||
<ul>
|
||||
<li th:each="optativa : ${matriculacion.optativas}"
|
||||
th:if="${optativa.orden == 0 && optativa.modulo.bloque == 5}"
|
||||
th:text="${optativa.modulo.nombre}"></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mt-3">
|
||||
<div class="col-md-6 mx-auto text-center" style="margin-bottom: 30px">
|
||||
<a href="#" onclick="location.reload();" class="btn btn-danger btn-block" id="download-pdf">
|
||||
<i class="fas fa-sync-alt"></i> Salir
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script>
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
var nia = '[[${alumno.nia}]]';
|
||||
var nombre = '[[${alumno.nombre}]]';
|
||||
var content = document.getElementById('content-to-pdf');
|
||||
|
||||
html2pdf().from(content).save(nombre + ' ' + nia + '.pdf');
|
||||
});
|
||||
</script>
|
||||
|
||||
|
||||
|
||||
</body>
|
||||
</html>
|
@ -0,0 +1,333 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en" xmlns:th="http://www.thymeleaf.org">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>NIA Encontrado</title>
|
||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/css/bootstrap.min.css" integrity="sha384-xOolHFLEh07PJGoPkLv1IbcEPTNtaed2xpHsD9ESMhqIYd0nLMwNLD69Npy4HI+N" crossorigin="anonymous">
|
||||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.4/css/all.min.css">
|
||||
<style>
|
||||
|
||||
/* Estilos para el select */
|
||||
.form-select {
|
||||
border-radius: 10px; /* Ajusta el radio del borde */
|
||||
background-color: #e3f2fd; /* Color de fondo */
|
||||
color: #1976d2; /* Color del texto */
|
||||
font-size: 1rem; /* Tamaño de fuente */
|
||||
padding: 0.5rem 1rem; /* Padding interno */
|
||||
border: 2px solid #1976d2; /* Borde */
|
||||
transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
|
||||
width: 100%; /* Ancho completo */
|
||||
max-width: 500px; /* Máximo ancho */
|
||||
margin: 0 auto; /* Centrar horizontalmente */
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
/* Estilos para cuando el select tiene foco */
|
||||
.form-select:focus {
|
||||
border-color: #80bdff;
|
||||
outline: 0;
|
||||
box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);
|
||||
}
|
||||
.form-select.required {
|
||||
border-color: #FF0000; /* Color del borde rojo por defecto */
|
||||
}
|
||||
|
||||
/* Estilos para las opciones del select */
|
||||
.form-select option {
|
||||
background-color: #e3f2fd; /* Color de fondo */
|
||||
color: #1976d2; /* Color del texto */
|
||||
}
|
||||
|
||||
/* Margen superior para el contenedor de los selects */
|
||||
.select-container {
|
||||
margin-top: 30px;
|
||||
width: 100%; /* Ancho completo */
|
||||
max-width: 500px; /* Máximo ancho */
|
||||
margin: 0 auto; /* Centrar horizontalmente */
|
||||
}
|
||||
.descripcion, h5 {
|
||||
text-align: center;
|
||||
margin-top: 20px;
|
||||
color: #6C6C6C;
|
||||
}
|
||||
.prioridad {
|
||||
text-align: center;
|
||||
margin-top: 10px;
|
||||
color: #6C6C6C;
|
||||
font-weight: bold;
|
||||
font-size: 20px;
|
||||
}
|
||||
|
||||
.error {
|
||||
text-align: center;
|
||||
margin-top: 20px;
|
||||
font-weight: bold;
|
||||
color: #FF0000;
|
||||
}
|
||||
.form-textarea::placeholder {
|
||||
color: #1976d2; /* Color del texto del placeholder */
|
||||
}
|
||||
.form-textarea {
|
||||
border-radius: 10px;
|
||||
background-color: #e3f2fd;
|
||||
color: #1976d2;
|
||||
font-size: 1rem;
|
||||
padding: 0.5rem 1rem;
|
||||
border: 2px solid #1976d2;
|
||||
transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
|
||||
width: 100%;
|
||||
max-width: 500px;
|
||||
margin: 0 auto;
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
.form-textarea:focus {
|
||||
border-color: #80bdff;
|
||||
outline: 0;
|
||||
box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);
|
||||
}
|
||||
|
||||
.obligatorias {
|
||||
font-size: 20px;
|
||||
text-align: center;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<nav class="navbar navbar-dark bg-primary">
|
||||
<span class="navbar-brand mb-0 h1">
|
||||
Bienvenida/o, <span th:text="${alumno.nombre + ' ' + alumno.apellido1}"></span> (NIA: <span th:text="${alumno.nia}"></span>)
|
||||
</span>
|
||||
<a href="/registro" class="btn btn-danger btn-sm">
|
||||
<i class="fas fa-sign-out-alt"></i> Salir
|
||||
</a>
|
||||
</nav>
|
||||
<nav class="navbar navbar-light" style="background-color: #e3f2fd; padding-top: 0; padding-bottom: 0;">
|
||||
<div class="container-fluid">
|
||||
<span class="navbar-text mx-auto" style="font-size: 30px;">
|
||||
<b>Optativas <span th:if="${esRepetidor}">repetidor</span> <span th:text="${cursoCiclo.curso.numero + ' ' + cursoCiclo.ciclo.codigo}"></span></b>
|
||||
<p class="obligatorias" th:if="${obligatorias != null}">Obligatorias: <span th:each="obligatoria, ', ' : ${obligatorias}" th:text="${obligatoria.nombre}" ></span></p>
|
||||
</span>
|
||||
</div>
|
||||
</nav>
|
||||
<h4 th:if="${!esRepetidor}" class="descripcion">Selecciona las optativas por orden de prioridad</h4>
|
||||
<h4 th:if="${esRepetidor}" class="descripcion">Selecciona tu taller de refuerzo por prioridad</h4>
|
||||
<p th:text="${error}" class="error"></p>
|
||||
<form id="optativasForm" action="/actualizarOptativas" method="post">
|
||||
<div class="container">
|
||||
<div class="select-container">
|
||||
<div th:each="modulo, iterStat: ${modulos}" th:unless="${(esTercero and !esRepetidor) and iterStat.last}">
|
||||
<div class="row justify-content-center mb-3">
|
||||
<div class="col mb-3">
|
||||
<div class="d-flex align-items-center">
|
||||
<span class="prioridad" th:text="${iterStat.count} + '.'"></span>
|
||||
<select class="form-select form-select-lg required" name="opcionesSeleccionadas" id="moduloSeleccionado_{{iterStat.index}}">
|
||||
<option value="" disabled selected hidden></option>
|
||||
<option th:each="modulo : ${modulos}" th:text="${modulo.nombre}"></option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div th:if="${!esRepetidor} and ${!esBachiller}" class="row justify-content-center" style="margin-top: 10px;">
|
||||
<div class="col mb-3">
|
||||
<h5>Escribe tu optativa del curso pasado</h5>
|
||||
<textarea class="form-textarea mt-2" id="textBoxOp" placeholder="Escribe si quieres..." rows="1"
|
||||
name="optPasada" style=""></textarea>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div th:if="${esBachiller == null} or ${!esBachiller}">
|
||||
<nav class="navbar navbar-light" style="background-color: #e3f2fd; padding-top: 0; padding-bottom: 0; margin-top: 30px;">
|
||||
<div class="container-fluid">
|
||||
<span class="navbar-text mx-auto" style="font-size: 30px;">
|
||||
<b>Religión/Atención educativa</b>
|
||||
</span>
|
||||
</div>
|
||||
</nav>
|
||||
<div class="container">
|
||||
<div class="select-container" style="margin-top: 10px;">
|
||||
<div class="row justify-content-center">
|
||||
<div class="col mb-3">
|
||||
<select class="form-select form-select-lg required" name="opcionesSeleccionadas">
|
||||
<option value="" disabled selected hidden></option>
|
||||
<option th:each="bloque4 : ${bloques4}" th:text="${bloque4.nombre}"></option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="bloqueMateriasDeOpcion" th:if="${esCuarto} or ${esBachiller}">
|
||||
<nav class="navbar navbar-light" style="background-color: #e3f2fd; padding-top: 0; padding-bottom: 0; margin-top: 30px;">
|
||||
<div class="container-fluid">
|
||||
<span class="navbar-text mx-auto" style="font-size: 30px;">
|
||||
<b>
|
||||
<span th:if="${esCuarto}">Materias de opción</span>
|
||||
<span th:if="${esBachiller}">Modalidades</span>
|
||||
</b>
|
||||
</span>
|
||||
</div>
|
||||
</nav>
|
||||
<h4 class="descripcion">
|
||||
<span th:if="${esCuarto}">Selecciona tus materias de opción</span>
|
||||
<span th:if="${esBachiller}">Selecciona tu modalidades</span>
|
||||
</h4>
|
||||
<div class="container">
|
||||
<div class="select-container" style="margin-top: 30px;">
|
||||
<div class="row justify-content-center">
|
||||
<div class="col mb-3" th:if="${bloques1 != null}">
|
||||
<select class="form-select form-select-lg required" name="opcionesSeleccionadas" id="bloque1">
|
||||
<option value="" disabled selected hidden></option>
|
||||
<option th:each="bloque1 : ${bloques1}" th:text="${bloque1.nombre}"></option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row justify-content-center" th:if="${bloques2 != null}">
|
||||
<div class="col mb-3">
|
||||
<select class="form-select form-select-lg required" name="opcionesSeleccionadas" id="bloque2">
|
||||
<option value="" disabled selected hidden></option>
|
||||
<option th:each="bloque2 : ${bloques2}" th:text="${bloque2.nombre}"></option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row justify-content-center" th:if="${bloques3 != null}">
|
||||
<div class="col mb-3">
|
||||
<select class="form-select form-select-lg required" name="opcionesSeleccionadas" id="bloque3">
|
||||
<option value="" disabled selected hidden></option>
|
||||
<option th:each="bloque3 : ${bloques3}" th:text="${bloque3.nombre}"></option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row justify-content-center" style="margin-top: 10px;" th:if="${esCuarto}">
|
||||
<div class="col mb-3">
|
||||
<h5>Alguna de las materias de opción que te gustarian cursar, no la has podido seleccionar por
|
||||
la manera en que se han estrucutrado los bloques de matérias?</h5>
|
||||
<select class="form-select form-select-lg required" id="extItinerario" name="extItinerario">
|
||||
<option value="" disabled selected hidden></option>
|
||||
<option th:each="extItinerario : ${bloqueExtItinerario}" th:text="${extItinerario.nombre}"></option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div th:if="${!esBachiller}">
|
||||
<nav class="navbar navbar-light" style="background-color: #e3f2fd; padding-top: 0; padding-bottom: 0; margin-top: 30px;">
|
||||
<div class="container-fluid">
|
||||
<span class="navbar-text mx-auto" style="font-size: 30px;">
|
||||
<b>Matemáticas</b>
|
||||
</span>
|
||||
</div>
|
||||
</nav>
|
||||
<h4 class="descripcion">Selecciona tus matemáticas</h4>
|
||||
<div class="container">
|
||||
<div class="select-container" style="margin-top: 30px;">
|
||||
<div class="row justify-content-center">
|
||||
<div class="col mb-3">
|
||||
<select class="form-select form-select-lg required" name="opcionesSeleccionadas">
|
||||
<option value="" disabled selected hidden></option>
|
||||
<option th:each="bloque5 : ${bloques5}" th:text="${bloque5.nombre}"></option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="container my-4">
|
||||
<div class="row justify-content-end">
|
||||
<div class="col-auto">
|
||||
<button type="button" class="btn btn-primary btn-lg" onclick="guardarYEnviar(), disableButton(this);">Siguiente →</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
<script>
|
||||
|
||||
|
||||
function guardarYEnviar() {
|
||||
var selects = document.querySelectorAll('.form-select');
|
||||
var allSelected = true;
|
||||
|
||||
var inteligencia1Selected = false;
|
||||
var inteligencia2Selected = false;
|
||||
|
||||
selects.forEach(function(select) {
|
||||
if (select.value === '' && select.id !== 'extItinerario') {
|
||||
allSelected = false;
|
||||
}
|
||||
|
||||
if (select.value === '(I) Programación, inteligencia artificial y robótica') {
|
||||
inteligencia1Selected = true;
|
||||
} else if (select.value === '(II) Programación, inteligencia artificial y robótica') {
|
||||
inteligencia2Selected = true;
|
||||
}
|
||||
});
|
||||
|
||||
if (inteligencia1Selected && inteligencia2Selected) {
|
||||
alert('No puedes seleccionar primero y segundo de "Programación, inteligencia artificial y robótica" juntos.');
|
||||
return;
|
||||
}
|
||||
|
||||
if (!allSelected) {
|
||||
alert('Por favor, selecciona una opción en cada campo.');
|
||||
return;
|
||||
}
|
||||
|
||||
var opcionesSeleccionadas = [];
|
||||
selects.forEach(function(select) {
|
||||
opcionesSeleccionadas.push(select.value);
|
||||
});
|
||||
|
||||
var campoOcultoOptativas = document.createElement("input");
|
||||
campoOcultoOptativas.setAttribute("type", "hidden");
|
||||
campoOcultoOptativas.setAttribute("name", "opcionesSeleccionadas");
|
||||
campoOcultoOptativas.setAttribute("value", JSON.stringify(opcionesSeleccionadas));
|
||||
document.getElementById("optativasForm").appendChild(campoOcultoOptativas);
|
||||
|
||||
document.getElementById("optativasForm").submit();
|
||||
}
|
||||
|
||||
document.querySelectorAll('.form-select').forEach(function(select) {
|
||||
select.addEventListener('change', function() {
|
||||
var selectedOption = this.value;
|
||||
var allSelects = document.querySelectorAll('.form-select');
|
||||
var duplicateFound = false; // Variable para rastrear si se encontró una opción duplicada
|
||||
|
||||
allSelects.forEach(function(sel) {
|
||||
if (!duplicateFound && sel !== select && sel.value === selectedOption) {
|
||||
sel.value = '';
|
||||
sel.classList.add('required');
|
||||
duplicateFound = true; // Marcar que se ha encontrado una opción duplicada
|
||||
}
|
||||
});
|
||||
|
||||
// Cambiar la clase del borde una vez se haya seleccionado algo
|
||||
if (selectedOption !== '') {
|
||||
this.classList.remove('required'); // Eliminar la clase de borde rojo
|
||||
} else {
|
||||
this.classList.add('required'); // Si se deja vacío, volver al borde rojo
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
function disableButton(button) {
|
||||
// Deshabilitar el botón
|
||||
button.disabled = true;
|
||||
// Cambiar el texto del botón para indicar que está cargando
|
||||
button.innerText = 'Enviando...';
|
||||
|
||||
// Rehabilitar el botón después de 10 segundos
|
||||
setTimeout(function() {
|
||||
button.disabled = false;
|
||||
button.innerText = 'Enviar';
|
||||
}, 10000); // 10000 milisegundos = 10 segundos
|
||||
}
|
||||
|
||||
</script>
|
||||
|
||||
|
||||
|
||||
</body>
|
||||
</html>
|
@ -0,0 +1,108 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en" xmlns:th="http://www.thymeleaf.org">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
|
||||
<title>NIA Encontrado</title>
|
||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/css/bootstrap.min.css" integrity="sha384-xOolHFLEh07PJGoPkLv1IbcEPTNtaed2xpHsD9ESMhqIYd0nLMwNLD69Npy4HI+N" crossorigin="anonymous">
|
||||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.4/css/all.min.css">
|
||||
<style>
|
||||
.custom-box {
|
||||
background-color: #f0f0f0;
|
||||
box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.3);
|
||||
padding: 20px;
|
||||
margin-bottom: 20px;
|
||||
border-radius: 10px;
|
||||
text-align: center;
|
||||
transition: box-shadow 0.3s ease;
|
||||
}
|
||||
.container-custom {
|
||||
margin-top: 50px;
|
||||
}
|
||||
.custom-box a {
|
||||
display: block;
|
||||
text-decoration: none;
|
||||
color: inherit;
|
||||
}
|
||||
.custom-box p {
|
||||
font-weight: bold;
|
||||
font-size: 30px;
|
||||
}
|
||||
.custom-box.clicked {
|
||||
box-shadow: 0px 0px 20px rgba(0, 255, 0, 1);
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<nav class="navbar navbar-dark bg-primary">
|
||||
<span class="navbar-brand mb-0 h1">
|
||||
Bienvenida/o, <span th:text="${alumno.nombre + ' ' + alumno.apellido1}"></span> (NIA: <span th:text="${alumno.nia}"></span>)
|
||||
</span>
|
||||
<span class="navbar-brand mb-01 h1" style="margin-right: 300px;">Tu matricula actual es: <span th:text="${alumno.matActual}"></span></span>
|
||||
<a href="/registro" class="btn btn-danger btn-sm">
|
||||
<i class="fas fa-sign-out-alt"></i> Salir
|
||||
</a>
|
||||
</nav>
|
||||
<nav class="navbar navbar-light" style="background-color: #e3f2fd; padding-top: 0; padding-bottom: 0;">
|
||||
<div class="container-fluid">
|
||||
<span class="navbar-text mx-auto" style="font-size: 30px;">
|
||||
<b>EDU</b> → Familia → Ciclo → Curso
|
||||
</span>
|
||||
</div>
|
||||
</nav>
|
||||
<div class="container-custom">
|
||||
<div class="container my-4">
|
||||
<div class="row">
|
||||
<div class="col-md-6" th:each="opcion : ${edus}">
|
||||
<a th:href="@{/familia(opcion=${opcion.nombre})}" class="clickable-box">
|
||||
<div class="custom-box">
|
||||
<p th:text="${opcion.nombre}"></p>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="container my-4">
|
||||
<div class="row justify-content-end">
|
||||
<div class="col-auto">
|
||||
<button class="btn btn-primary btn-lg" onclick="redirectToFamily()">Siguiente →</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<script>
|
||||
let eduSeleccionado = null; // Variable global para almacenar la opción seleccionada
|
||||
|
||||
const clickableBoxes = document.querySelectorAll('.clickable-box');
|
||||
|
||||
clickableBoxes.forEach(box => {
|
||||
box.addEventListener('click', function(event) {
|
||||
// Evitar que el evento de clic en las opciones provoque la redirección
|
||||
event.preventDefault();
|
||||
|
||||
document.querySelectorAll('.custom-box').forEach(box => {
|
||||
box.classList.remove('clicked');
|
||||
});
|
||||
const customBox = this.querySelector('.custom-box');
|
||||
customBox.classList.add('clicked');
|
||||
|
||||
// Guardar la opción seleccionada en la variable global
|
||||
eduSeleccionado = customBox.querySelector('p').textContent;
|
||||
});
|
||||
});
|
||||
|
||||
// Función para redirigir a la página de familia solo si hay una opción seleccionada
|
||||
function redirectToFamily() {
|
||||
if (eduSeleccionado) {
|
||||
window.location.href = '/familia?edu=' + eduSeleccionado;
|
||||
} else {
|
||||
alert('Por favor, selecciona una opción antes de continuar.');
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
|
||||
</body>
|
||||
</html>
|
@ -0,0 +1,50 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en" xmlns:th="http://www.thymeleaf.org">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
|
||||
<title>Encuesta Optativas</title>
|
||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/css/bootstrap.min.css" integrity="sha384-xOolHFLEh07PJGoPkLv1IbcEPTNtaed2xpHsD9ESMhqIYd0nLMwNLD69Npy4HI+N" crossorigin="anonymous">
|
||||
<link rel="stylesheet" href="style.css">
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div class="container text-center align-middle col-md-5">
|
||||
|
||||
|
||||
<div >
|
||||
<h1>Matrícula</h1>
|
||||
</div>
|
||||
|
||||
<div class="text-center form-group" >
|
||||
<div th:if="${mensaje}" class="alert alert-success" role="alert">
|
||||
<p th:text="${mensaje}"></p>
|
||||
</div>
|
||||
<div th:if="${errorNia}" class="alert alert-danger" role="alert">
|
||||
<p th:text="${errorNia}"></p>
|
||||
</div>
|
||||
<div th:if="${errorContraseña}" class="alert alert-danger" role="alert">
|
||||
<p th:text="${errorContraseña}"></p>
|
||||
</div>
|
||||
|
||||
<form th:action="@{/registro/comprobarNia}" method="post">
|
||||
<div class="input-group input-group-lg col-md-12 mb-3">
|
||||
<div class="input-group-prepend">
|
||||
<span class="input-group-text" for="nia">NIA:</span>
|
||||
</div>
|
||||
<input id="nia" name="nia" required type="text" class="form-control" aria-label="Large" aria-describedby="inputGroup-sizing-sm">
|
||||
</div>
|
||||
|
||||
<div class="input-group input-group-lg col-md-12 mb-3">
|
||||
<div class="input-group-prepend">
|
||||
<span class="input-group-text" for="contrasenya">CLAVE:</span>
|
||||
</div>
|
||||
<input id="contrasenya" name="contrasenya" required type="password" class="form-control" aria-label="Large" aria-describedby="inputGroup-sizing-sm">
|
||||
</div>
|
||||
<button type="submit" class="btn btn-primary">Acceder</button>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
@ -0,0 +1,13 @@
|
||||
package com.proyecto.prematricula;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.springframework.boot.test.context.SpringBootTest;
|
||||
|
||||
@SpringBootTest
|
||||
class PrematriculaApplicationTests {
|
||||
|
||||
@Test
|
||||
void contextLoads() {
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in new issue