From 5bfa19383dcc3b4384e5d21dfd38fe68f17e1ca2 Mon Sep 17 00:00:00 2001 From: Tatiana Villa Date: Sun, 10 May 2026 17:08:41 +0200 Subject: [PATCH] Planificacion --- .../taiageweb/config/SecurityConfig.java | 2 +- .../taiageweb/controlador/WebController.java | 8 + src/main/resources/static/css/planning.css | 38 +++++ src/main/resources/templates/planning.html | 158 ++++++++++++++++++ 4 files changed, 205 insertions(+), 1 deletion(-) create mode 100644 src/main/resources/static/css/planning.css create mode 100644 src/main/resources/templates/planning.html diff --git a/src/main/java/es/tatvil/taiageweb/config/SecurityConfig.java b/src/main/java/es/tatvil/taiageweb/config/SecurityConfig.java index 29eb94b..6e91be0 100644 --- a/src/main/java/es/tatvil/taiageweb/config/SecurityConfig.java +++ b/src/main/java/es/tatvil/taiageweb/config/SecurityConfig.java @@ -77,7 +77,7 @@ public class SecurityConfig { // Panel de administración .requestMatchers("/admin/**").hasRole("ADMIN") // Contenido de pago - .requestMatchers("/curso", "/curso/**", "/api/**").hasAnyRole("PAGADO", "ADMIN") + .requestMatchers("/curso", "/curso/**", "/planning", "/api/**").hasAnyRole("PAGADO", "ADMIN") // Cualquier otra ruta requiere autenticación .anyRequest().authenticated() ) diff --git a/src/main/java/es/tatvil/taiageweb/controlador/WebController.java b/src/main/java/es/tatvil/taiageweb/controlador/WebController.java index 1fdde90..dccca86 100644 --- a/src/main/java/es/tatvil/taiageweb/controlador/WebController.java +++ b/src/main/java/es/tatvil/taiageweb/controlador/WebController.java @@ -37,6 +37,14 @@ public class WebController { @GetMapping("/curso") public String curso() { return "curso"; } + /** + * Planning de repaso (requiere {@code ROLE_PAGADO} o {@code ROLE_ADMIN}). + * + * @return nombre de la plantilla {@code planning} + */ + @GetMapping("/planning") + public String planning() { return "planning"; } + /** * Navegador de legislación; acceso público. * diff --git a/src/main/resources/static/css/planning.css b/src/main/resources/static/css/planning.css new file mode 100644 index 0000000..7e82752 --- /dev/null +++ b/src/main/resources/static/css/planning.css @@ -0,0 +1,38 @@ +* { box-sizing: border-box; margin: 0; padding: 0; } +body { font-family: Arial, Helvetica, sans-serif; font-size: 11pt; color: #111; background: #fff; padding: 1cm 1.5cm; } +h1 { font-size: 18pt; text-align: center; margin-bottom: 0.2em; } +.subtitle { text-align: center; font-size: 10pt; color: #666; margin-bottom: 1em; } +.semana { margin-bottom: 1.5em; page-break-after: always; break-after: page; } +.semana:last-of-type { page-break-after: auto; break-after: auto; } +.cabecera-dias { display: flex; gap: 4px; margin-bottom: 4px; } +.cabecera-dias span { + flex: 1; text-align: center; font-size: 9pt; font-weight: bold; + color: #fff; background: #5d6d7e; padding: 4px 2px; border-radius: 3px; + -webkit-print-color-adjust: exact; print-color-adjust: exact; +} +.dias { display: flex; gap: 4px; } +.dia { + flex: 1; border: 1px solid #ccc; border-radius: 4px; + padding: 6px 7px; min-height: 160px; + page-break-inside: avoid; break-inside: avoid; +} +.dia .num { font-size: 15pt; font-weight: bold; color: #333; display: block; margin-bottom: 5px; line-height: 1; } +.dia .contenido { font-size: 8pt; color: #444; line-height: 1.45; } +.tema-btn { + display: block; width: 100%; text-align: left; + padding: 2px 0; font-size: 7.5pt; color: #1a5276; + line-height: 1.35; font-family: inherit; + text-decoration: underline dotted #1a5276; +} +.tema-btn:hover { color: #c0392b; background: #f0f8ff; border-radius: 2px; } +@media print { .tema-btn { color: #111; text-decoration: none; } } +.vacio { background: #f9f9f9; border-color: #eee; } +.fin-semana { background: #fafafa; -webkit-print-color-adjust: exact; print-color-adjust: exact; } +.simulacro { background: #fff8e1; -webkit-print-color-adjust: exact; print-color-adjust: exact; } +.simulacro .num { color: #8a6000; } +.examen { background: #fde8e8; -webkit-print-color-adjust: exact; print-color-adjust: exact; } +.examen .num { font-size: 20pt; color: #a00; } +.examen .contenido { font-weight: bold; color: #a00; font-size: 11pt; } +.leyenda { margin-top: 1.2em; font-size: 9pt; display: flex; gap: 1.2em; flex-wrap: wrap; } +.leyenda-item { display: flex; align-items: center; gap: 5px; } +.leyenda-color { width: 14px; height: 14px; border: 1px solid #bbb; flex-shrink: 0; } diff --git a/src/main/resources/templates/planning.html b/src/main/resources/templates/planning.html new file mode 100644 index 0000000..ecf4a92 --- /dev/null +++ b/src/main/resources/templates/planning.html @@ -0,0 +1,158 @@ + + + + + Planning TAI — Mayo 2026 + + + + +

Planning de repaso TAI

+

Mayo 2026 · Examen: sábado 23 de mayo

+ + +
+
+ LunMarMiéJueVieSábDom +
+ +
+ + +
+
+ LunMarMiéJueVieSábDom +
+
+ + + + + + + +
+
+ + +
+
+ LunMarMiéJueVieSábDom +
+
+
+ 18 + Repaso
B1. Organización del Estado y Administración electrónica
B2. Tecnología básica
+
+
+ 19 + Repaso
B3. Desarrollo de sistemas
B4. Sistemas y comunicaciones
+
+
+ 20 + 🧪 Simulacro
Examen completo
con tiempo real
+
+
+ 21 + Repaso de fallos
del simulacro
+
+
+ 22 + Solo flashcards
Nada nuevo
Descansar pronto
+
+
+ 23 + 🎯 EXAMEN +
+
+
+
+ +
+
Simulacro
+
Examen
+
Fin de semana
+
+ + + \ No newline at end of file