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