From 624094c58a28c1eefeb741a8b584213159cf3d09 Mon Sep 17 00:00:00 2001 From: vicsash Date: Tue, 14 May 2024 17:37:54 +0200 Subject: [PATCH] Acabando ocultadno iconos para que el usuario normal, no administrador solo puede editar sus skills, una cosa adicional que queda hacer es para asegurar es editar los metdos de cotroladores para que no era posible acceder otras funcciones de ninguna manera. --- .../ProyectoFinalApplication.java | 2 - .../proyectofinal/component/CustomAuth.java | 18 +- .../configuration/SecurityConfig.java | 8 +- .../controllers/BuscadorController.java | 42 ++- .../controllers/LogOutController.java | 3 + .../modelControllers/AlumnoController.java | 43 ++- .../modelControllers/CicloController.java | 13 +- .../modelControllers/ContactoController.java | 9 +- .../modelControllers/EmpressaController.java | 6 + .../modelControllers/FamiliaController.java | 10 +- .../modelControllers/LogInController.java | 5 - .../modelControllers/OfertaController.java | 16 +- .../modelControllers/SectorController.java | 9 +- .../modelControllers/SkillController.java | 8 +- .../modelControllers/SucursalController.java | 10 +- .../proyectofinal/models/empresas/Alumno.java | 3 +- .../proyectofinal/models/empresas/Oferta.java | 2 + .../proyectofinal/models/empresas/Skill.java | 6 +- .../proyectofinal/models/login/Usuario.java | 3 + .../repositories/login/RolRepository.java | 3 + .../repositories/login/UserRepository.java | 7 + .../{ => empresa}/AlumnoService.java | 3 +- .../servicios/{ => empresa}/CicloService.java | 2 +- .../{ => empresa}/ContactosService.java | 3 +- .../{ => empresa}/EmpresaService.java | 2 +- .../{ => empresa}/FamiliaService.java | 19 +- .../{ => empresa}/OfertaService.java | 3 +- .../{ => empresa}/SectorService.java | 4 +- .../servicios/{ => empresa}/SkillService.java | 2 +- .../{ => empresa}/SucursalService.java | 2 +- .../servicios/implemetations/IFamilia.java | 1 - .../servicios/user/UsuarioService.java | 46 ++- src/main/resources/static/style.css | 3 + .../templates/admin/usuario/create.html | 147 +++++++++ .../templates/admin/usuario/update.html | 145 +++++++++ .../resources/templates/buscador_admin.html | 14 +- .../resources/templates/buscador_alumno.html | 280 ++++++++++++++++-- .../resources/templates/firt_admin_user.html | 10 - .../resources/templates/list/alumnos.html | 67 +++-- src/main/resources/templates/list/ciclos.html | 69 +++-- .../resources/templates/list/contactos.html | 61 +++- .../resources/templates/list/empresas.html | 68 +++-- .../resources/templates/list/familias.html | 52 +++- .../resources/templates/list/ofertas.html | 59 +++- .../resources/templates/list/sectores.html | 72 +++-- src/main/resources/templates/list/skills.html | 52 +++- .../resources/templates/list/sucursales.html | 59 +++- .../templates/user/alumno/update.html | 203 +++++++++++++ 48 files changed, 1405 insertions(+), 269 deletions(-) delete mode 100644 src/main/java/com/example/proyectofinal/controllers/modelControllers/LogInController.java rename src/main/java/com/example/proyectofinal/servicios/{ => empresa}/AlumnoService.java (98%) rename src/main/java/com/example/proyectofinal/servicios/{ => empresa}/CicloService.java (99%) rename src/main/java/com/example/proyectofinal/servicios/{ => empresa}/ContactosService.java (98%) rename src/main/java/com/example/proyectofinal/servicios/{ => empresa}/EmpresaService.java (99%) rename src/main/java/com/example/proyectofinal/servicios/{ => empresa}/FamiliaService.java (83%) rename src/main/java/com/example/proyectofinal/servicios/{ => empresa}/OfertaService.java (98%) rename src/main/java/com/example/proyectofinal/servicios/{ => empresa}/SectorService.java (94%) rename src/main/java/com/example/proyectofinal/servicios/{ => empresa}/SkillService.java (97%) rename src/main/java/com/example/proyectofinal/servicios/{ => empresa}/SucursalService.java (99%) create mode 100644 src/main/resources/templates/admin/usuario/create.html create mode 100644 src/main/resources/templates/admin/usuario/update.html delete mode 100644 src/main/resources/templates/firt_admin_user.html create mode 100644 src/main/resources/templates/user/alumno/update.html diff --git a/src/main/java/com/example/proyectofinal/ProyectoFinalApplication.java b/src/main/java/com/example/proyectofinal/ProyectoFinalApplication.java index c3363b8..4463e8e 100644 --- a/src/main/java/com/example/proyectofinal/ProyectoFinalApplication.java +++ b/src/main/java/com/example/proyectofinal/ProyectoFinalApplication.java @@ -1,5 +1,4 @@ package com.example.proyectofinal; - import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @@ -9,5 +8,4 @@ public class ProyectoFinalApplication { public static void main(String[] args) { SpringApplication.run(ProyectoFinalApplication.class, args); } - } diff --git a/src/main/java/com/example/proyectofinal/component/CustomAuth.java b/src/main/java/com/example/proyectofinal/component/CustomAuth.java index 82ebcfe..cac85ae 100644 --- a/src/main/java/com/example/proyectofinal/component/CustomAuth.java +++ b/src/main/java/com/example/proyectofinal/component/CustomAuth.java @@ -1,4 +1,5 @@ package com.example.proyectofinal.component; + import com.example.proyectofinal.models.login.Usuario; import com.example.proyectofinal.servicios.user.UsuarioService; import org.springframework.beans.factory.annotation.Autowired; @@ -7,12 +8,17 @@ import org.springframework.security.authentication.BadCredentialsException; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import org.springframework.security.core.Authentication; import org.springframework.security.core.AuthenticationException; +import org.springframework.security.core.GrantedAuthority; +import org.springframework.security.core.authority.SimpleGrantedAuthority; +import org.springframework.security.core.userdetails.User; import org.springframework.stereotype.Component; import java.util.ArrayList; +import java.util.List; @Component -public class CustomAuth implements AuthenticationProvider{ +public class CustomAuth implements AuthenticationProvider { + @Autowired private UsuarioService usuarioService; @@ -20,11 +26,13 @@ public class CustomAuth implements AuthenticationProvider{ public Authentication authenticate(Authentication authentication) throws AuthenticationException { String nombreLogIn = authentication.getName(); String password = authentication.getCredentials().toString(); - Usuario usuario = usuarioService.login(nombreLogIn, password); - + if (usuario != null) { - return new UsernamePasswordAuthenticationToken(nombreLogIn, password, new ArrayList<>()); + List authorities = new ArrayList<>(); + authorities.add(new SimpleGrantedAuthority(usuario.getRol().getNombre())); + User userDetails = new User(nombreLogIn, password, authorities); + return new UsernamePasswordAuthenticationToken(userDetails, password, authorities); } else { throw new BadCredentialsException("External system authentication failed"); } @@ -34,4 +42,4 @@ public class CustomAuth implements AuthenticationProvider{ public boolean supports(Class authentication) { return authentication.equals(UsernamePasswordAuthenticationToken.class); } -} +} \ No newline at end of file diff --git a/src/main/java/com/example/proyectofinal/configuration/SecurityConfig.java b/src/main/java/com/example/proyectofinal/configuration/SecurityConfig.java index e224d64..7c77122 100644 --- a/src/main/java/com/example/proyectofinal/configuration/SecurityConfig.java +++ b/src/main/java/com/example/proyectofinal/configuration/SecurityConfig.java @@ -12,7 +12,7 @@ import org.springframework.security.config.http.SessionCreationPolicy; import org.springframework.security.web.SecurityFilterChain; @Configuration -public class SecurityConfig { +public class SecurityConfig{ @Autowired private JdbcTemplate jdbcTemplate; @@ -28,15 +28,17 @@ public class SecurityConfig { } @Bean public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { + initializeAutoridadAndRolTables(); http .sessionManagement(sessionManagement -> sessionManagement - .invalidSessionUrl("/logout") // Redirect to /logout when session is invalid + .invalidSessionUrl("/login") // Redirect to /logout when session is invalid .sessionCreationPolicy(SessionCreationPolicy.IF_REQUIRED) .sessionFixation().migrateSession() .maximumSessions(1).expiredUrl("/logout")) // Redirect to /logout when session expires - .authorizeRequests(authorize -> authorize + .authorizeHttpRequests(authorize -> authorize .anyRequest().authenticated() ) + .formLogin(formLogin -> formLogin .successHandler(customAuthenticacionHandler()) ) diff --git a/src/main/java/com/example/proyectofinal/controllers/BuscadorController.java b/src/main/java/com/example/proyectofinal/controllers/BuscadorController.java index 3ea2740..ee7ea71 100644 --- a/src/main/java/com/example/proyectofinal/controllers/BuscadorController.java +++ b/src/main/java/com/example/proyectofinal/controllers/BuscadorController.java @@ -3,11 +3,15 @@ package com.example.proyectofinal.controllers; import com.example.proyectofinal.models.empresas.*; import com.example.proyectofinal.repositories.empresas.*; -import com.example.proyectofinal.servicios.*; import com.example.proyectofinal.interfaces.IPagination; -import org.springframework.context.annotation.Role; +import com.example.proyectofinal.servicios.empresa.*; +import com.example.proyectofinal.servicios.user.UsuarioService; +import jakarta.annotation.security.RolesAllowed; import org.springframework.data.domain.Page; import org.springframework.http.ResponseEntity; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.GrantedAuthority; +import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.ui.Model; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; @@ -23,8 +27,6 @@ import java.util.*; @RequestMapping("/buscador") public class BuscadorController { - @Autowired - private EmpressaRepository empressaRepository; @Autowired private AlumnoService alumnoService; @Autowired @@ -47,12 +49,15 @@ public class BuscadorController { private OfertaRepository ofertaRepository; @Autowired private EmpresaService empresaService; + @Autowired + private UsuarioService usuarioService; @GetMapping public String buscador(){ return "buscador_admin"; } + @GetMapping("/empresas/page/{pageNum}") public String searchEmpresasList(@PathVariable int pageNum, @RequestParam(defaultValue = "") String query, @@ -82,6 +87,7 @@ public class BuscadorController { model.addAttribute("empresas", empresas); model.addAttribute("query", query); model.addAttribute("secondaryOption", secondaryOption); + model.addAttribute("isAdmin", usuarioService.isAdmin()); } return "/list/empresas"; } @@ -102,9 +108,11 @@ public class BuscadorController { model.addAttribute(entry.getKey(), entry.getValue()); } model.addAttribute("secondaryOption",secondaryOption); + model.addAttribute("isAdmin", usuarioService.isAdmin()); return "/list/sectores"; } + @GetMapping("/contactos/page/{pageNum}") public String searchContactosList(@PathVariable int pageNum, @RequestParam(defaultValue = "") String query, @@ -134,10 +142,12 @@ public class BuscadorController { model.addAttribute("contactos", contactos); model.addAttribute("query", query); model.addAttribute("secondaryOption", secondaryOption); + model.addAttribute("isAdmin", usuarioService.isAdmin()); } return "/list/contactos"; } + @GetMapping("/sucursales/page/{pageNum}") public String searchSucursalesList(@PathVariable int pageNum, @RequestParam(defaultValue = "") String query, @@ -168,10 +178,12 @@ public class BuscadorController { model.addAttribute("sucursales", sucursales); model.addAttribute("query", query); model.addAttribute("secondaryOption", secondaryOption); + model.addAttribute("isAdmin", usuarioService.isAdmin()); } return "/list/sucursales"; } + @GetMapping("/ofertas/page/{pageNum}") public String searchOfertasList(@PathVariable int pageNum, @RequestParam(defaultValue = "") String query, @@ -203,10 +215,12 @@ public class BuscadorController { model.addAttribute("ofertas", ofertas); model.addAttribute("query", query); model.addAttribute("secondaryOption", secondaryOption); + model.addAttribute("isAdmin", usuarioService.isAdmin()); } return "/list/ofertas"; } + @GetMapping("/familias/page/{pageNum}") public String searchFamiliasList(@PathVariable int pageNum, @RequestParam(defaultValue = "") String query, @@ -218,18 +232,18 @@ public class BuscadorController { String[] word = query.split("\\b(y|o)\\b|[,/]"); List itemsPage = Arrays.asList(5, 10, 15, 20, 25, 50); Map attributes = new HashMap<>(); - if (secondaryOption.equalsIgnoreCase("Todo")) { - sortField = "nombre"; - sortDir = "asc"; + if (secondaryOption.equalsIgnoreCase("Todo")){ attributes = getPaginatedAttributes(pageNum, query, size, sortField, sortDir, familiaService, itemsPage); } for (Map.Entry entry : attributes.entrySet()) { model.addAttribute(entry.getKey(), entry.getValue()); } model.addAttribute("secondaryOption",secondaryOption); + model.addAttribute("isAdmin", usuarioService.isAdmin()); return "/list/familias"; } + @GetMapping("/ciclos/page/{pageNum}") public String searchCiclosList(@PathVariable int pageNum, @RequestParam(defaultValue = "") String query, @@ -261,10 +275,12 @@ public class BuscadorController { model.addAttribute("ciclos", ciclos); model.addAttribute("query", query); model.addAttribute("secondaryOption", secondaryOption); + model.addAttribute("isAdmin", usuarioService.isAdmin()); } return "/list/ciclos"; } + @GetMapping("/alumnos/page/{pageNum}") public String searchAlumnosList(@PathVariable int pageNum, @RequestParam(defaultValue = "") String query, @@ -298,6 +314,7 @@ public class BuscadorController { model.addAttribute("alumnos", alumnos); model.addAttribute("query", query); model.addAttribute("secondaryOption", secondaryOption); + model.addAttribute("isAdmin", usuarioService.isAdmin()); } return "/list/alumnos"; @@ -315,8 +332,6 @@ public class BuscadorController { List itemsPage = Arrays.asList(5, 10, 15, 20, 25, 50); Map attributes = new HashMap<>(); if (secondaryOption.equalsIgnoreCase("Todo")) { - sortField = "nombre"; - sortDir = "asc"; attributes = getPaginatedAttributes(pageNum, query, size, sortField, sortDir, skillService, itemsPage); } @@ -324,6 +339,7 @@ public class BuscadorController { model.addAttribute(entry.getKey(), entry.getValue()); } model.addAttribute("secondaryOption",secondaryOption); + model.addAttribute("isAdmin", usuarioService.isAdmin()); return "/list/skills"; } public Map getPaginatedAttributes(int pageNum, String query, int size, String sortField, String sortDir, IPagination service, List itemsPage) { @@ -361,6 +377,7 @@ public class BuscadorController { * @param querySearchBar the text in searchbar from the lsit a String * @return a list of entities that match the query */ + @GetMapping("/empresas/search") public ResponseEntity> searchEmpresas(@RequestParam String querySearchBar, @RequestParam String query, @RequestParam String secondaryOption) { if(secondaryOption.equalsIgnoreCase("Todo")){ @@ -373,6 +390,7 @@ public class BuscadorController { } + @GetMapping("/sectores/search") public ResponseEntity> searchSectores(@RequestParam String query) { List sectors = sectorService.search(query); @@ -391,6 +409,7 @@ public class BuscadorController { } } + @GetMapping("/sucursales/search") public ResponseEntity> searchSucursales(@RequestParam String querySearchBar, @RequestParam String query, @RequestParam String secondaryOption) { if(secondaryOption.equalsIgnoreCase("Todo")){ @@ -402,12 +421,14 @@ public class BuscadorController { } } + @GetMapping("/familias/search") public ResponseEntity> searchFamilias(@RequestParam String query) { List familias = familiaService.search(query); return ResponseEntity.ok(familias); } + @GetMapping("/ciclos/search") public ResponseEntity> searchCiclos(@RequestParam String querySearchBar, @RequestParam String query, @RequestParam String secondaryOption) { if(secondaryOption.equalsIgnoreCase("Todo")){ @@ -419,12 +440,14 @@ public class BuscadorController { } } + @GetMapping("/skills/search") public ResponseEntity> searchSkills(@RequestParam String query) { List ciclos = skillService.search(query); return ResponseEntity.ok(ciclos); } + @GetMapping("/alumnos/search") public ResponseEntity> searchAlumnos(@RequestParam String querySearchBar, @RequestParam String query, @RequestParam String secondaryOption) { List alumnos; @@ -470,5 +493,4 @@ public class BuscadorController { } return ResponseEntity.ok(ofertas); } - } \ No newline at end of file diff --git a/src/main/java/com/example/proyectofinal/controllers/LogOutController.java b/src/main/java/com/example/proyectofinal/controllers/LogOutController.java index 5cffd8e..f4c687b 100644 --- a/src/main/java/com/example/proyectofinal/controllers/LogOutController.java +++ b/src/main/java/com/example/proyectofinal/controllers/LogOutController.java @@ -1,6 +1,7 @@ package com.example.proyectofinal.controllers; import com.example.proyectofinal.servicios.user.UsuarioService; +import jakarta.annotation.security.RolesAllowed; import jakarta.servlet.http.HttpServletRequest; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -18,6 +19,8 @@ public class LogOutController { private UsuarioService usuarioService; private static final Logger logger = LoggerFactory.getLogger(LogOutController.class); + + @RolesAllowed({"ADMIN","USER"}) @RequestMapping("/logout") public String logout(HttpServletRequest request) { Authentication auth = SecurityContextHolder.getContext().getAuthentication(); diff --git a/src/main/java/com/example/proyectofinal/controllers/modelControllers/AlumnoController.java b/src/main/java/com/example/proyectofinal/controllers/modelControllers/AlumnoController.java index 156f4df..393c6e9 100644 --- a/src/main/java/com/example/proyectofinal/controllers/modelControllers/AlumnoController.java +++ b/src/main/java/com/example/proyectofinal/controllers/modelControllers/AlumnoController.java @@ -1,9 +1,12 @@ package com.example.proyectofinal.controllers.modelControllers; import com.example.proyectofinal.models.empresas.*; -import com.example.proyectofinal.servicios.AlumnoService; -import com.example.proyectofinal.servicios.CicloService; -import com.example.proyectofinal.servicios.SkillService; +import com.example.proyectofinal.models.login.Usuario; +import com.example.proyectofinal.servicios.empresa.AlumnoService; +import com.example.proyectofinal.servicios.empresa.CicloService; +import com.example.proyectofinal.servicios.empresa.SkillService; +import com.example.proyectofinal.servicios.user.UsuarioService; +import jakarta.annotation.security.RolesAllowed; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -12,6 +15,7 @@ import org.springframework.ui.Model; import org.springframework.web.bind.annotation.*; import java.util.List; +import java.util.Optional; import java.util.Set; @Controller @@ -26,6 +30,10 @@ public class AlumnoController { @Autowired private CicloService cicloService; + @Autowired + UsuarioService usuarioService; + + @GetMapping("/admin/alumno/create") public String showCreateForm(Model model) { Alumno alumno = new Alumno(); @@ -37,6 +45,7 @@ public class AlumnoController { return "admin/alumno/create"; } + @PostMapping("/alumno/save") public ResponseEntity saveAlumno(Alumno alumno, @RequestParam("ciclo") Long ciclo, @RequestParam("skills") List skills){ try{ @@ -48,6 +57,26 @@ public class AlumnoController { if(testIfExist != null){ return new ResponseEntity<>("El alumno ya existe", HttpStatus.BAD_REQUEST); } + + String password = "1234"; + StringBuilder nombreUsuarioBuilder = new StringBuilder(); + nombreUsuarioBuilder.append(alumno.getNombre().toLowerCase()); + nombreUsuarioBuilder.append(" "); + nombreUsuarioBuilder.append(alumno.getApellido().toLowerCase()); + if (alumno.getApellido2() != null) { + if (!nombreUsuarioBuilder.isEmpty()) { + nombreUsuarioBuilder.append(" "); + } + nombreUsuarioBuilder.append(alumno.getApellido2().toLowerCase()); + } + String nombreUsuario = nombreUsuarioBuilder.toString(); + String nia = alumno.getNia(); + String firstThreeLetters = nia.substring(0, 3); + String nombreLogIn="alu." +alumno.getNombre()+firstThreeLetters; + String email = Optional.of(alumno.getCorreo()).orElse(alumno.getCorreo2()); + boolean isLogged = false; + Long newUser = usuarioService.findRolByName("USER"); + usuarioService.createUsuario(nombreUsuario, nombreLogIn, email, password, isLogged, newUser); alumnoService.save(alumno); return new ResponseEntity<>("El alumno fue guardado con exito", HttpStatus.OK); }catch (Exception e) { @@ -55,6 +84,7 @@ public class AlumnoController { } } + @GetMapping("/admin/alumno/update/{id}") public String showUpdateForm(Model model, @PathVariable Long id) { Alumno alumno = alumnoService.findById(id); @@ -66,6 +96,7 @@ public class AlumnoController { return "admin/alumno/update"; } + @PostMapping("/alumno/update") public ResponseEntity updateAlumno(Alumno alumno, @RequestParam("ciclo") Long ciclo, @RequestParam("skills") List skills){ try{ @@ -83,6 +114,12 @@ public class AlumnoController { @GetMapping("/alumno/delete/{id}") public ResponseEntity deleteAlumno(@PathVariable Long id){ try{ + Alumno alumno = alumnoService.findById(id); + String logIn = "alu." + alumno.getNombre() + alumno.getNia().substring(0, 3); + Usuario usuario = usuarioService.findByLogInName(logIn); + if(usuario != null){ + usuarioService.deleteById(usuario.getId()); + } alumnoService.deleteById(id); return new ResponseEntity<>("El alumno ha sido eliminado", HttpStatus.OK); }catch (Exception e){ diff --git a/src/main/java/com/example/proyectofinal/controllers/modelControllers/CicloController.java b/src/main/java/com/example/proyectofinal/controllers/modelControllers/CicloController.java index 8fe3321..cef2d26 100644 --- a/src/main/java/com/example/proyectofinal/controllers/modelControllers/CicloController.java +++ b/src/main/java/com/example/proyectofinal/controllers/modelControllers/CicloController.java @@ -2,8 +2,9 @@ package com.example.proyectofinal.controllers.modelControllers; import com.example.proyectofinal.models.empresas.Ciclo; import com.example.proyectofinal.models.empresas.Familia; -import com.example.proyectofinal.servicios.CicloService; -import com.example.proyectofinal.servicios.FamiliaService; +import com.example.proyectofinal.servicios.empresa.CicloService; +import com.example.proyectofinal.servicios.empresa.FamiliaService; +import jakarta.annotation.security.RolesAllowed; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -23,10 +24,11 @@ public class CicloController { @Autowired private FamiliaService familiaService; + @GetMapping("/admin/ciclo/create") public String showCreateForm(Model model) { Ciclo ciclo = new Ciclo(); - List familias = familiaService.findAll(); + List familias = familiaService.findAllFamilias(); Familia familia = new Familia(); model.addAttribute("ciclo", ciclo); model.addAttribute("familias", familias); @@ -52,10 +54,11 @@ public class CicloController { } } + @GetMapping("/admin/ciclo/update/{id}") public String showUpdateForm(Model model, @PathVariable Long id) { Ciclo ciclo = cicloService.findById(id); - List familias = familiaService.findAll(); + List familias = familiaService.findAllFamilias(); Familia familia = new Familia(); model.addAttribute("ciclo", ciclo); model.addAttribute("familias", familias); @@ -63,6 +66,7 @@ public class CicloController { return "admin/ciclo/update"; } + @PostMapping("/ciclo/update") public ResponseEntity updateCiclo(Ciclo ciclo, @RequestParam("familia.id") Long familiaId){ try{ @@ -75,6 +79,7 @@ public class CicloController { } } + @GetMapping("/ciclo/delete/{id}") public ResponseEntity deleteCiclo(@PathVariable Long id){ try{ diff --git a/src/main/java/com/example/proyectofinal/controllers/modelControllers/ContactoController.java b/src/main/java/com/example/proyectofinal/controllers/modelControllers/ContactoController.java index a2eee01..7fe7d92 100644 --- a/src/main/java/com/example/proyectofinal/controllers/modelControllers/ContactoController.java +++ b/src/main/java/com/example/proyectofinal/controllers/modelControllers/ContactoController.java @@ -2,8 +2,9 @@ package com.example.proyectofinal.controllers.modelControllers; import com.example.proyectofinal.models.empresas.Contacto; import com.example.proyectofinal.models.empresas.Empresa; -import com.example.proyectofinal.servicios.ContactosService; -import com.example.proyectofinal.servicios.EmpresaService; +import com.example.proyectofinal.servicios.empresa.ContactosService; +import com.example.proyectofinal.servicios.empresa.EmpresaService; +import jakarta.annotation.security.RolesAllowed; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -54,6 +55,8 @@ public class ContactoController { return new ResponseEntity<>(e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR); } } + + @RolesAllowed({"ADMIN"}) @GetMapping("/admin/contacto/update/{id}") public String showUpdateForm(Model model, @PathVariable Long id) { Contacto contacto = contactosService.findById(id); @@ -65,6 +68,7 @@ public class ContactoController { return "admin/contacto/update"; } + @PostMapping("/contacto/update") public ResponseEntity updateContacto(Contacto contacto, @RequestParam("empresa.id") Long empresaId){ try{ @@ -81,6 +85,7 @@ public class ContactoController { } } + @GetMapping("/contacto/delete/{id}") public ResponseEntity deleteContacto(@PathVariable Long id){ try{ diff --git a/src/main/java/com/example/proyectofinal/controllers/modelControllers/EmpressaController.java b/src/main/java/com/example/proyectofinal/controllers/modelControllers/EmpressaController.java index e4fd75f..f09c1f1 100644 --- a/src/main/java/com/example/proyectofinal/controllers/modelControllers/EmpressaController.java +++ b/src/main/java/com/example/proyectofinal/controllers/modelControllers/EmpressaController.java @@ -6,6 +6,7 @@ import com.example.proyectofinal.models.empresas.Sector; import com.example.proyectofinal.repositories.empresas.ContactoRepository; import com.example.proyectofinal.servicios.implemetations.IEmpresa; import com.example.proyectofinal.servicios.implemetations.ISector; +import jakarta.annotation.security.RolesAllowed; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -29,6 +30,7 @@ public class EmpressaController { @Autowired ISector sectorService; + @GetMapping("/empresas/{id}") public String getEmpressaContacts(@PathVariable Long id, Model model) { Set contactoSet = new HashSet<>(contactoRepository.findBySector(id)); @@ -36,6 +38,7 @@ public class EmpressaController { return "contactos"; } + @GetMapping("/admin/empresa/create") public String showCreateForm(Model model) { Empresa empresa = new Empresa(); @@ -63,6 +66,7 @@ public class EmpressaController { return new ResponseEntity<>(e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR); } } + @GetMapping("/admin/empresa/update/{id}") public String showUpdateForm(Model model, @PathVariable Long id) { Empresa empresa = empresaService.findById(id); @@ -78,6 +82,7 @@ public class EmpressaController { return "admin/empresa/update"; } + @PostMapping("/empresa/update") public ResponseEntity updateEmpresa(Empresa empresa, @RequestParam("sector.id") Long sectorId){ try{ @@ -94,6 +99,7 @@ public class EmpressaController { } } + @GetMapping("/empresa/delete/{id}") public ResponseEntity deleteEmpresa(@PathVariable Long id){ try{ diff --git a/src/main/java/com/example/proyectofinal/controllers/modelControllers/FamiliaController.java b/src/main/java/com/example/proyectofinal/controllers/modelControllers/FamiliaController.java index 8ef56a7..34e71b7 100644 --- a/src/main/java/com/example/proyectofinal/controllers/modelControllers/FamiliaController.java +++ b/src/main/java/com/example/proyectofinal/controllers/modelControllers/FamiliaController.java @@ -1,10 +1,12 @@ package com.example.proyectofinal.controllers.modelControllers; import com.example.proyectofinal.models.empresas.Familia; -import com.example.proyectofinal.servicios.FamiliaService; +import com.example.proyectofinal.servicios.empresa.FamiliaService; +import jakarta.annotation.security.RolesAllowed; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; +import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.*; @@ -15,6 +17,7 @@ public class FamiliaController { @Autowired private FamiliaService familiaService; + @GetMapping("/admin/familia/create") public String showCreateForm(Model model) { Familia familia = new Familia(); @@ -22,6 +25,7 @@ public class FamiliaController { return "admin/familia/create"; } + @PostMapping("/familia/save") public ResponseEntity saveFamilia(Familia familia){ try{ @@ -36,6 +40,8 @@ public class FamiliaController { return new ResponseEntity<>(e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR); } } + + @GetMapping("/admin/familia/update/{id}") public String showUpdateForm(Model model, @PathVariable Long id) { Familia familia = familiaService.findById(id); @@ -43,6 +49,7 @@ public class FamiliaController { return "admin/familia/update"; } + @PostMapping("/familia/update") public ResponseEntity updateFamilia(Familia familia){ try{ @@ -53,6 +60,7 @@ public class FamiliaController { } } + @GetMapping("/familia/delete/{id}") public ResponseEntity deleteFamilia(@PathVariable Long id){ try{ diff --git a/src/main/java/com/example/proyectofinal/controllers/modelControllers/LogInController.java b/src/main/java/com/example/proyectofinal/controllers/modelControllers/LogInController.java deleted file mode 100644 index 5fae9a2..0000000 --- a/src/main/java/com/example/proyectofinal/controllers/modelControllers/LogInController.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.example.proyectofinal.controllers.modelControllers; - -//@RestController -public class LogInController { -} diff --git a/src/main/java/com/example/proyectofinal/controllers/modelControllers/OfertaController.java b/src/main/java/com/example/proyectofinal/controllers/modelControllers/OfertaController.java index e820754..c7909f3 100644 --- a/src/main/java/com/example/proyectofinal/controllers/modelControllers/OfertaController.java +++ b/src/main/java/com/example/proyectofinal/controllers/modelControllers/OfertaController.java @@ -1,10 +1,11 @@ package com.example.proyectofinal.controllers.modelControllers; import com.example.proyectofinal.models.empresas.*; -import com.example.proyectofinal.servicios.CicloService; -import com.example.proyectofinal.servicios.OfertaService; -import com.example.proyectofinal.servicios.SkillService; -import com.example.proyectofinal.servicios.SucursalService; +import com.example.proyectofinal.servicios.empresa.CicloService; +import com.example.proyectofinal.servicios.empresa.OfertaService; +import com.example.proyectofinal.servicios.empresa.SkillService; +import com.example.proyectofinal.servicios.empresa.SucursalService; +import jakarta.annotation.security.RolesAllowed; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -12,7 +13,6 @@ import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.*; -import java.util.ArrayList; import java.util.List; import java.util.Set; @@ -31,6 +31,7 @@ public class OfertaController { @Autowired private CicloService cicloService; + @GetMapping("/admin/oferta/create") public String showCreateForm(Model model) { Oferta oferta = new Oferta(); @@ -44,6 +45,7 @@ public class OfertaController { return "admin/oferta/create"; } + @PostMapping("/oferta/save") public ResponseEntity saveOferta(Oferta oferta, @RequestParam("ciclo") Long ciclo, @RequestParam("sucursal") Long sucursal, @RequestParam("skills") List skills){ try{ @@ -64,6 +66,8 @@ public class OfertaController { return new ResponseEntity<>(e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR); } } + + @GetMapping("/admin/oferta/update/{id}") public String showUpdateForm(Model model, @PathVariable Long id) { Oferta oferta = ofertaService.findById(id); @@ -77,6 +81,7 @@ public class OfertaController { return "admin/oferta/update"; } + @PostMapping("/oferta/update") public ResponseEntity updateOferta(Oferta oferta, @RequestParam("ciclo") Long ciclo, @RequestParam("sucursal") Long sucursal, @RequestParam("skills") List skills){ System.out.println("UPDATE TEST"); @@ -94,6 +99,7 @@ public class OfertaController { } } + @GetMapping("/oferta/delete/{id}") public ResponseEntity deleteOferta(@PathVariable Long id){ try{ diff --git a/src/main/java/com/example/proyectofinal/controllers/modelControllers/SectorController.java b/src/main/java/com/example/proyectofinal/controllers/modelControllers/SectorController.java index 51ff50f..6755cfe 100644 --- a/src/main/java/com/example/proyectofinal/controllers/modelControllers/SectorController.java +++ b/src/main/java/com/example/proyectofinal/controllers/modelControllers/SectorController.java @@ -3,7 +3,8 @@ package com.example.proyectofinal.controllers.modelControllers; import com.example.proyectofinal.models.empresas.Empresa; import com.example.proyectofinal.models.empresas.Sector; import com.example.proyectofinal.repositories.empresas.EmpressaRepository; -import com.example.proyectofinal.servicios.SectorService; +import com.example.proyectofinal.servicios.empresa.SectorService; +import jakarta.annotation.security.RolesAllowed; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -23,6 +24,7 @@ public class SectorController { @Autowired private SectorService sectorService; + @GetMapping("sector/{id}") public String getEmpressaBySector(@PathVariable Long id, Model model) { Set empresaSet = new HashSet<>(empressaRepository.findBySector(id)); @@ -30,6 +32,7 @@ public class SectorController { return "empresas"; } + @GetMapping("/admin/sector/create") public String showCreateForm(Model model) { Sector sectores = new Sector(); @@ -37,6 +40,7 @@ public class SectorController { return "admin/sector/create"; } + @PostMapping("/sector/save") public ResponseEntity saveSector(Sector sector){ try{ @@ -51,6 +55,7 @@ public class SectorController { return new ResponseEntity<>(e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR); } } + @GetMapping("/admin/sector/update/{id}") public String showUpdateForm(Model model, @PathVariable Long id) { Sector sector = sectorService.findById(id); @@ -58,6 +63,7 @@ public class SectorController { return "admin/sector/update"; } + @PostMapping("/sector/update") public ResponseEntity updateSector(Sector sector){ try{ @@ -68,6 +74,7 @@ public class SectorController { } } + @GetMapping("/sector/delete/{id}") public ResponseEntity deleteSector(@PathVariable Long id){ try{ diff --git a/src/main/java/com/example/proyectofinal/controllers/modelControllers/SkillController.java b/src/main/java/com/example/proyectofinal/controllers/modelControllers/SkillController.java index c9db785..c48d55b 100644 --- a/src/main/java/com/example/proyectofinal/controllers/modelControllers/SkillController.java +++ b/src/main/java/com/example/proyectofinal/controllers/modelControllers/SkillController.java @@ -1,7 +1,8 @@ package com.example.proyectofinal.controllers.modelControllers; import com.example.proyectofinal.models.empresas.Skill; -import com.example.proyectofinal.servicios.SkillService; +import com.example.proyectofinal.servicios.empresa.SkillService; +import jakarta.annotation.security.RolesAllowed; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -15,6 +16,7 @@ public class SkillController { @Autowired private SkillService skillService; + @GetMapping("/admin/skill/create") public String showCreateForm(Model model) { Skill skill = new Skill(); @@ -22,6 +24,7 @@ public class SkillController { return "admin/skill/create"; } + @PostMapping("/skill/save") public ResponseEntity saveSkill(Skill skill){ try{ @@ -36,6 +39,7 @@ public class SkillController { } } + @GetMapping("/admin/skill/update/{id}") public String showUpdateForm(Model model, @PathVariable Long id) { Skill skill = skillService.findById(id); @@ -43,6 +47,7 @@ public class SkillController { return "admin/skill/update"; } + @PostMapping("/skill/update") public ResponseEntity updateSkill(Skill skill){ try{ @@ -53,6 +58,7 @@ public class SkillController { } } + @GetMapping("/skill/delete/{id}") public ResponseEntity deleteSkill(@PathVariable Long id){ try{ diff --git a/src/main/java/com/example/proyectofinal/controllers/modelControllers/SucursalController.java b/src/main/java/com/example/proyectofinal/controllers/modelControllers/SucursalController.java index f216e29..bd8160b 100644 --- a/src/main/java/com/example/proyectofinal/controllers/modelControllers/SucursalController.java +++ b/src/main/java/com/example/proyectofinal/controllers/modelControllers/SucursalController.java @@ -2,8 +2,9 @@ package com.example.proyectofinal.controllers.modelControllers; import com.example.proyectofinal.models.empresas.Empresa; import com.example.proyectofinal.models.empresas.Sucursal; -import com.example.proyectofinal.servicios.EmpresaService; -import com.example.proyectofinal.servicios.SucursalService; +import com.example.proyectofinal.servicios.empresa.EmpresaService; +import com.example.proyectofinal.servicios.empresa.SucursalService; +import jakarta.annotation.security.RolesAllowed; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -24,6 +25,7 @@ public class SucursalController { @Autowired private EmpresaService empresaService; + @GetMapping("/admin/sucursal/create") public String showCreateForm(Model model) { Sucursal sucursal = new Sucursal(); @@ -51,6 +53,8 @@ public class SucursalController { return new ResponseEntity<>(e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR); } } + + @GetMapping("/admin/sucursal/update/{id}") public String showUpdateForm(Model model, @PathVariable Long id) { Sucursal sucursal = sucursalService.findById(id); @@ -63,6 +67,7 @@ public class SucursalController { return "admin/sucursal/update"; } + @PostMapping("/sucursal/update") public ResponseEntity updateSucursal(Sucursal sucursal, @RequestParam("empresa.id") Long sectorId){ try{ @@ -75,6 +80,7 @@ public class SucursalController { } } + @GetMapping("/sucursal/delete/{id}") public ResponseEntity deleteSucursal(@PathVariable Long id){ System.out.println("Attempting to delete Sucursal with ID: " + id); diff --git a/src/main/java/com/example/proyectofinal/models/empresas/Alumno.java b/src/main/java/com/example/proyectofinal/models/empresas/Alumno.java index b09ec24..893ade2 100644 --- a/src/main/java/com/example/proyectofinal/models/empresas/Alumno.java +++ b/src/main/java/com/example/proyectofinal/models/empresas/Alumno.java @@ -1,5 +1,6 @@ package com.example.proyectofinal.models.empresas; +import com.fasterxml.jackson.annotation.JsonManagedReference; import jakarta.persistence.*; import jdk.jfr.Name; import lombok.*; @@ -67,7 +68,7 @@ public class Alumno { @Column(length = 2500) private String keywords; - + @JsonManagedReference @ManyToMany(cascade = {CascadeType.PERSIST,CascadeType.MERGE,CascadeType.REFRESH},fetch = FetchType.EAGER) @OnDelete(action = OnDeleteAction.CASCADE) @JoinTable( diff --git a/src/main/java/com/example/proyectofinal/models/empresas/Oferta.java b/src/main/java/com/example/proyectofinal/models/empresas/Oferta.java index b1df36e..3898b63 100644 --- a/src/main/java/com/example/proyectofinal/models/empresas/Oferta.java +++ b/src/main/java/com/example/proyectofinal/models/empresas/Oferta.java @@ -1,5 +1,6 @@ package com.example.proyectofinal.models.empresas; +import com.fasterxml.jackson.annotation.JsonManagedReference; import jakarta.persistence.*; import lombok.AllArgsConstructor; import lombok.Data; @@ -45,6 +46,7 @@ public class Oferta { @OnDelete(action = OnDeleteAction.CASCADE) private Ciclo ciclo; + @JsonManagedReference @ManyToMany(cascade = {CascadeType.PERSIST,CascadeType.MERGE,CascadeType.REFRESH},fetch = FetchType.EAGER) @OnDelete(action = OnDeleteAction.CASCADE) @JoinTable( diff --git a/src/main/java/com/example/proyectofinal/models/empresas/Skill.java b/src/main/java/com/example/proyectofinal/models/empresas/Skill.java index 644f21f..1ea85c1 100644 --- a/src/main/java/com/example/proyectofinal/models/empresas/Skill.java +++ b/src/main/java/com/example/proyectofinal/models/empresas/Skill.java @@ -1,12 +1,12 @@ package com.example.proyectofinal.models.empresas; +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.NonNull; -import org.hibernate.annotations.OnDelete; -import org.hibernate.annotations.OnDeleteAction; import java.util.Objects; import java.util.Set; @@ -25,9 +25,11 @@ public class Skill { @Column(length = 75) private String nombre; + @JsonBackReference @ManyToMany(mappedBy = "skills") private Set alumnos; + @JsonBackReference @ManyToMany(mappedBy = "skills") private Set ofertas; diff --git a/src/main/java/com/example/proyectofinal/models/login/Usuario.java b/src/main/java/com/example/proyectofinal/models/login/Usuario.java index 5a24a8b..4c15c48 100644 --- a/src/main/java/com/example/proyectofinal/models/login/Usuario.java +++ b/src/main/java/com/example/proyectofinal/models/login/Usuario.java @@ -7,6 +7,8 @@ import lombok.NoArgsConstructor; import org.hibernate.annotations.OnDelete; import org.hibernate.annotations.OnDeleteAction; +import java.util.List; + @Entity @Data @AllArgsConstructor @@ -37,4 +39,5 @@ public class Usuario { @JoinColumn(name = "fk_rol", referencedColumnName = "id") @OnDelete(action = OnDeleteAction.CASCADE) private Rol rol; + } diff --git a/src/main/java/com/example/proyectofinal/repositories/login/RolRepository.java b/src/main/java/com/example/proyectofinal/repositories/login/RolRepository.java index 719ef65..862d116 100644 --- a/src/main/java/com/example/proyectofinal/repositories/login/RolRepository.java +++ b/src/main/java/com/example/proyectofinal/repositories/login/RolRepository.java @@ -18,4 +18,7 @@ public interface RolRepository extends JpaRepository { @Query(value = "SELECT a.* FROM autoridad a JOIN rol_autoridad ra ON a.id = ra.fk_autoridad WHERE ra.fk_rol = ?1", nativeQuery = true) ArrayList findAutoridadesByRolId(Long rolId); + + @Query("select r.id from Rol r where r.nombre = ?1") + Long findRoleById(String user); } diff --git a/src/main/java/com/example/proyectofinal/repositories/login/UserRepository.java b/src/main/java/com/example/proyectofinal/repositories/login/UserRepository.java index 0e02776..fa64b9d 100644 --- a/src/main/java/com/example/proyectofinal/repositories/login/UserRepository.java +++ b/src/main/java/com/example/proyectofinal/repositories/login/UserRepository.java @@ -20,4 +20,11 @@ public interface UserRepository extends JpaRepository{ @Modifying @Query("UPDATE Usuario u SET u.logedIn = false WHERE u.id = ?1") void resetLogedIn(Long id); + + @Query("SELECT u FROM Usuario u WHERE u.nombreLogIn = ?1") + Optional findByNombreUsuarioLogIn(String logIn); + + @Modifying + @Query("UPDATE Usuario u SET u.logedIn = false") + void resetAllLogedIn(); } diff --git a/src/main/java/com/example/proyectofinal/servicios/AlumnoService.java b/src/main/java/com/example/proyectofinal/servicios/empresa/AlumnoService.java similarity index 98% rename from src/main/java/com/example/proyectofinal/servicios/AlumnoService.java rename to src/main/java/com/example/proyectofinal/servicios/empresa/AlumnoService.java index 9a2460a..e1b624a 100644 --- a/src/main/java/com/example/proyectofinal/servicios/AlumnoService.java +++ b/src/main/java/com/example/proyectofinal/servicios/empresa/AlumnoService.java @@ -1,7 +1,6 @@ -package com.example.proyectofinal.servicios; +package com.example.proyectofinal.servicios.empresa; import com.example.proyectofinal.models.empresas.Alumno; -import com.example.proyectofinal.models.empresas.Ciclo; import com.example.proyectofinal.repositories.empresas.AlumnoRepository; import com.example.proyectofinal.servicios.implemetations.IAlumno; import org.springframework.beans.factory.annotation.Autowired; diff --git a/src/main/java/com/example/proyectofinal/servicios/CicloService.java b/src/main/java/com/example/proyectofinal/servicios/empresa/CicloService.java similarity index 99% rename from src/main/java/com/example/proyectofinal/servicios/CicloService.java rename to src/main/java/com/example/proyectofinal/servicios/empresa/CicloService.java index 4bee434..5ad43ad 100644 --- a/src/main/java/com/example/proyectofinal/servicios/CicloService.java +++ b/src/main/java/com/example/proyectofinal/servicios/empresa/CicloService.java @@ -1,4 +1,4 @@ -package com.example.proyectofinal.servicios; +package com.example.proyectofinal.servicios.empresa; import com.example.proyectofinal.models.empresas.Ciclo; import com.example.proyectofinal.models.empresas.Familia; diff --git a/src/main/java/com/example/proyectofinal/servicios/ContactosService.java b/src/main/java/com/example/proyectofinal/servicios/empresa/ContactosService.java similarity index 98% rename from src/main/java/com/example/proyectofinal/servicios/ContactosService.java rename to src/main/java/com/example/proyectofinal/servicios/empresa/ContactosService.java index 6122365..fac07c8 100644 --- a/src/main/java/com/example/proyectofinal/servicios/ContactosService.java +++ b/src/main/java/com/example/proyectofinal/servicios/empresa/ContactosService.java @@ -1,8 +1,7 @@ -package com.example.proyectofinal.servicios; +package com.example.proyectofinal.servicios.empresa; import com.example.proyectofinal.models.empresas.Contacto; import com.example.proyectofinal.models.empresas.Empresa; -import com.example.proyectofinal.repositories.empresas.EmpressaRepository; import com.example.proyectofinal.servicios.implemetations.IContactos; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.*; diff --git a/src/main/java/com/example/proyectofinal/servicios/EmpresaService.java b/src/main/java/com/example/proyectofinal/servicios/empresa/EmpresaService.java similarity index 99% rename from src/main/java/com/example/proyectofinal/servicios/EmpresaService.java rename to src/main/java/com/example/proyectofinal/servicios/empresa/EmpresaService.java index f177c3e..8d63520 100644 --- a/src/main/java/com/example/proyectofinal/servicios/EmpresaService.java +++ b/src/main/java/com/example/proyectofinal/servicios/empresa/EmpresaService.java @@ -1,4 +1,4 @@ -package com.example.proyectofinal.servicios; +package com.example.proyectofinal.servicios.empresa; import com.example.proyectofinal.models.empresas.Empresa; import com.example.proyectofinal.models.empresas.Oferta; import com.example.proyectofinal.models.empresas.Sucursal; diff --git a/src/main/java/com/example/proyectofinal/servicios/FamiliaService.java b/src/main/java/com/example/proyectofinal/servicios/empresa/FamiliaService.java similarity index 83% rename from src/main/java/com/example/proyectofinal/servicios/FamiliaService.java rename to src/main/java/com/example/proyectofinal/servicios/empresa/FamiliaService.java index f1f20c5..9e765f4 100644 --- a/src/main/java/com/example/proyectofinal/servicios/FamiliaService.java +++ b/src/main/java/com/example/proyectofinal/servicios/empresa/FamiliaService.java @@ -1,8 +1,6 @@ -package com.example.proyectofinal.servicios; +package com.example.proyectofinal.servicios.empresa; -import com.example.proyectofinal.models.empresas.Empresa; import com.example.proyectofinal.models.empresas.Familia; -import com.example.proyectofinal.models.empresas.Oferta; import com.example.proyectofinal.repositories.empresas.FamiliaRepository; import com.example.proyectofinal.servicios.implemetations.IFamilia; import org.springframework.beans.factory.annotation.Autowired; @@ -10,7 +8,6 @@ import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Sort; import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; import java.util.List; @@ -21,19 +18,11 @@ public class FamiliaService implements IFamilia { @Autowired private CicloService cicloService; - - - @Override - public List findAll() { - return familiaRepository.findAll(); - } - @Override public Page findAllPaginated(int pageNum, int pageSize, String sortField, String sortDir) { Sort sort = sortDir.equalsIgnoreCase(Sort.Direction.ASC.name()) ? Sort.by(sortField).ascending() : Sort.by(sortField).descending(); PageRequest pageRequest = PageRequest.of(pageNum - 1, pageSize, sort); - Page result = familiaRepository.findAll(pageRequest); - return result; + return familiaRepository.findAll(pageRequest); } @Override @@ -67,4 +56,8 @@ public class FamiliaService implements IFamilia { public List search(String query) { return familiaRepository.search(query); } + + public List findAllFamilias() { + return familiaRepository.findAll(); + } } diff --git a/src/main/java/com/example/proyectofinal/servicios/OfertaService.java b/src/main/java/com/example/proyectofinal/servicios/empresa/OfertaService.java similarity index 98% rename from src/main/java/com/example/proyectofinal/servicios/OfertaService.java rename to src/main/java/com/example/proyectofinal/servicios/empresa/OfertaService.java index 8f66dd6..3b8a0a5 100644 --- a/src/main/java/com/example/proyectofinal/servicios/OfertaService.java +++ b/src/main/java/com/example/proyectofinal/servicios/empresa/OfertaService.java @@ -1,6 +1,5 @@ -package com.example.proyectofinal.servicios; +package com.example.proyectofinal.servicios.empresa; -import com.example.proyectofinal.models.empresas.Ciclo; import com.example.proyectofinal.models.empresas.Oferta; import com.example.proyectofinal.models.empresas.Skill; import com.example.proyectofinal.models.empresas.Sucursal; diff --git a/src/main/java/com/example/proyectofinal/servicios/SectorService.java b/src/main/java/com/example/proyectofinal/servicios/empresa/SectorService.java similarity index 94% rename from src/main/java/com/example/proyectofinal/servicios/SectorService.java rename to src/main/java/com/example/proyectofinal/servicios/empresa/SectorService.java index 99b78d4..8323eb6 100644 --- a/src/main/java/com/example/proyectofinal/servicios/SectorService.java +++ b/src/main/java/com/example/proyectofinal/servicios/empresa/SectorService.java @@ -1,9 +1,7 @@ -package com.example.proyectofinal.servicios; +package com.example.proyectofinal.servicios.empresa; import com.example.proyectofinal.models.empresas.Empresa; -import com.example.proyectofinal.models.empresas.Oferta; import com.example.proyectofinal.models.empresas.Sector; -import com.example.proyectofinal.models.empresas.Sucursal; import com.example.proyectofinal.repositories.empresas.OfertaRepository; import com.example.proyectofinal.repositories.empresas.SectorRepository; import com.example.proyectofinal.servicios.implemetations.ISector; diff --git a/src/main/java/com/example/proyectofinal/servicios/SkillService.java b/src/main/java/com/example/proyectofinal/servicios/empresa/SkillService.java similarity index 97% rename from src/main/java/com/example/proyectofinal/servicios/SkillService.java rename to src/main/java/com/example/proyectofinal/servicios/empresa/SkillService.java index 7bc62ff..ede9122 100644 --- a/src/main/java/com/example/proyectofinal/servicios/SkillService.java +++ b/src/main/java/com/example/proyectofinal/servicios/empresa/SkillService.java @@ -1,4 +1,4 @@ -package com.example.proyectofinal.servicios; +package com.example.proyectofinal.servicios.empresa; import com.example.proyectofinal.models.empresas.Skill; import com.example.proyectofinal.repositories.empresas.SkillRepository; diff --git a/src/main/java/com/example/proyectofinal/servicios/SucursalService.java b/src/main/java/com/example/proyectofinal/servicios/empresa/SucursalService.java similarity index 99% rename from src/main/java/com/example/proyectofinal/servicios/SucursalService.java rename to src/main/java/com/example/proyectofinal/servicios/empresa/SucursalService.java index 5000f5f..9358adf 100644 --- a/src/main/java/com/example/proyectofinal/servicios/SucursalService.java +++ b/src/main/java/com/example/proyectofinal/servicios/empresa/SucursalService.java @@ -1,4 +1,4 @@ -package com.example.proyectofinal.servicios; +package com.example.proyectofinal.servicios.empresa; import com.example.proyectofinal.models.empresas.Empresa; import com.example.proyectofinal.models.empresas.Oferta; diff --git a/src/main/java/com/example/proyectofinal/servicios/implemetations/IFamilia.java b/src/main/java/com/example/proyectofinal/servicios/implemetations/IFamilia.java index 25f3334..48e0d54 100644 --- a/src/main/java/com/example/proyectofinal/servicios/implemetations/IFamilia.java +++ b/src/main/java/com/example/proyectofinal/servicios/implemetations/IFamilia.java @@ -6,7 +6,6 @@ import com.example.proyectofinal.models.empresas.Familia; import java.util.List; public interface IFamilia extends IPagination { - List findAll(); Familia findById(Long id); diff --git a/src/main/java/com/example/proyectofinal/servicios/user/UsuarioService.java b/src/main/java/com/example/proyectofinal/servicios/user/UsuarioService.java index 1f8fdfb..bf6db3c 100644 --- a/src/main/java/com/example/proyectofinal/servicios/user/UsuarioService.java +++ b/src/main/java/com/example/proyectofinal/servicios/user/UsuarioService.java @@ -12,6 +12,9 @@ import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.security.authentication.BadCredentialsException; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.GrantedAuthority; +import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.security.core.userdetails.UsernameNotFoundException; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.stereotype.Service; @@ -45,9 +48,6 @@ public class UsuarioService { public Usuario login(String nombreLogIn, String password) { Usuario usuario = userRepository.findByNombreUsuario(nombreLogIn) .orElseThrow(() -> new UsernameNotFoundException("Usuario no encontrado")); - if (usuario.isLogedIn()) { - throw new AlreadyLoggedInException("User is already logged in"); - } if (passwordEncoder.matches(password, usuario.getPassword())) { userRepository.updateLogedIn( usuario.getId()); return usuario; @@ -55,11 +55,6 @@ public class UsuarioService { throw new BadCredentialsException("Invalid password"); } } - private static class AlreadyLoggedInException extends RuntimeException { - public AlreadyLoggedInException(String message) { - super(message); - } - } @Transactional public void logout(String nombreLogIn) { @@ -77,19 +72,22 @@ public class UsuarioService { Rol adminRole = rolRepository.findByName("ADMIN"); createUsuario("admin", "admin", "admin@example.com", - "$2a$10$uTJY6B1H7MzEFrv2MX9K2uBgk1crVMtnuHgUgbTaQ/Cv7O.k0kUi2", + "1234", false, adminRole.getId()); } } catch (Exception e) { - System.out.println("Exception in createDefaultRolesAuthoritiesAndAdmin: " + e.getMessage()); + System.out.println("Exepcion en crearUsuarioPorDefecto: " + e.getMessage()); e.printStackTrace(); } } public Usuario createUsuario(String nombreUsuario, String nombreLogIn, String email, String password, boolean loged, Long rolId) { // Insert into usuario table + //System.out.println("TEST: BEFORE"+ password); + String encodedPassword = passwordEncoder.encode(password); + //System.out.println("TEST AFTER: "+ encodedPassword); String insertUsuarioSql = "INSERT INTO usuario (nombre_usuario, nombre_log_in, email, password, loged_in, fk_rol) VALUES (?, ?, ?, ?, ?, ?)"; - jdbcTemplate.update(insertUsuarioSql, nombreUsuario, nombreLogIn, email, password, loged, rolId); + jdbcTemplate.update(insertUsuarioSql, nombreUsuario, nombreLogIn, email, encodedPassword, loged, rolId); // Get the last inserted id Long usuarioId = jdbcTemplate.queryForObject("SELECT LAST_INSERT_ID()", Long.class); @@ -112,4 +110,30 @@ public class UsuarioService { return usuario; } + + public Long findRolByName(String user) { + return rolRepository.findRoleById(user); + } + + public Usuario findByLogInName(String logIn) { + return userRepository.findByNombreUsuarioLogIn(logIn).orElse(null); + } + + public void deleteById(Long id) { + userRepository.deleteById(id); + } + + public void logoutAllUsers() { + userRepository.resetAllLogedIn(); + } + + public boolean isAdmin() { + Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); + for (GrantedAuthority authority : authentication.getAuthorities()) { + if (authority.getAuthority().equals("ADMIN")) { + return true; + } + } + return false; + } } \ No newline at end of file diff --git a/src/main/resources/static/style.css b/src/main/resources/static/style.css index 59f9de7..3fe967f 100644 --- a/src/main/resources/static/style.css +++ b/src/main/resources/static/style.css @@ -217,6 +217,9 @@ html, body { } .scrollable-table { overflow-x: auto; +} +.hide-icon { + display: none; } diff --git a/src/main/resources/templates/admin/usuario/create.html b/src/main/resources/templates/admin/usuario/create.html new file mode 100644 index 0000000..e55a07f --- /dev/null +++ b/src/main/resources/templates/admin/usuario/create.html @@ -0,0 +1,147 @@ + + + + + Creacion: Empresa + + + + + + + + +

AƱadir Empresa

+ +
+ +
+
+ +
+ +
+
+ +
+ +
+ +
+
+ +
+ +
+ +
+
+ +
+ +
+ +
+
+ +
+ +
+ +
+
+ +
+ +
+ +
+
+ +
+ + +
+
+
+ + + + diff --git a/src/main/resources/templates/admin/usuario/update.html b/src/main/resources/templates/admin/usuario/update.html new file mode 100644 index 0000000..52722a0 --- /dev/null +++ b/src/main/resources/templates/admin/usuario/update.html @@ -0,0 +1,145 @@ + + + + + Update: Empresa + + + + + + + + +

Editar datos de Empresa

+ +
+ +
+ +
+ +
+ +
+
+ +
+ +
+ +
+
+ +
+ +
+ +
+
+ +
+ +
+ +
+
+ +
+ +
+ +
+
+ +
+ +
+ +
+
+ +
+ + +
+
+
+ + + + diff --git a/src/main/resources/templates/buscador_admin.html b/src/main/resources/templates/buscador_admin.html index 069bc87..d1b2943 100644 --- a/src/main/resources/templates/buscador_admin.html +++ b/src/main/resources/templates/buscador_admin.html @@ -123,6 +123,15 @@ var searchBar = document.querySelector('input[name="query"]'); var secondaryDropdown = document.getElementById('secondaryDropdown'); + + primaryDropdown.addEventListener('change', function() { + if (primaryDropdown.value === 'YourCondition') { // replace 'YourCondition' with the actual condition + secondaryDropdown.style.display = 'none'; + } else { + secondaryDropdown.style.display = 'block'; + } + }); + secondaryDropdown.addEventListener('change', function() { var datePicker = document.getElementById('datePicker'); if (['Fecha antes', 'Fecha despues', 'AƱo'].includes(secondaryDropdown.value)) { @@ -239,11 +248,6 @@ // Reset the form document.querySelector('form').reset(); - // Get reference to the search bar - var secondaryDropdown = document.getElementById('secondaryDropdown'); - secondaryDropdown.value = 'Todo'; - var searchBar = document.querySelector('input[name="query"]'); - // Set the value of the search bar to "Todo" and disable it searchBar.value = 'Todo'; searchBar.disabled = true; diff --git a/src/main/resources/templates/buscador_alumno.html b/src/main/resources/templates/buscador_alumno.html index 999309e..a181646 100644 --- a/src/main/resources/templates/buscador_alumno.html +++ b/src/main/resources/templates/buscador_alumno.html @@ -1,10 +1,13 @@ + + + + Buscador - -
-
- - -
-
- -
- -
-
-
+ +
+

PAGINA PRINCIPAL

+ +
+ +
+
+
+ + +
+ +
+ +
+
+
+ + \ No newline at end of file diff --git a/src/main/resources/templates/firt_admin_user.html b/src/main/resources/templates/firt_admin_user.html deleted file mode 100644 index 9bd087e..0000000 --- a/src/main/resources/templates/firt_admin_user.html +++ /dev/null @@ -1,10 +0,0 @@ - - - - - Primer Usuario - - - - - \ No newline at end of file diff --git a/src/main/resources/templates/list/alumnos.html b/src/main/resources/templates/list/alumnos.html index 7d369c1..064bafa 100644 --- a/src/main/resources/templates/list/alumnos.html +++ b/src/main/resources/templates/list/alumnos.html @@ -19,69 +19,69 @@ - +
@@ -94,9 +94,9 @@ @@ -164,6 +164,20 @@ var $createIcon = $('#create-icon'); var isSearchBarUsed = false; + /**/ + //console.log(isAdmin); + if (isAdmin) { + document.querySelectorAll('.edit-icon').forEach(function(icon) { + icon.classList.remove('hide-icon'); + }); + document.querySelectorAll('.delete-icon').forEach(function(icon) { + icon.classList.remove('hide-icon'); + }); + document.querySelector('#create-icon').classList.remove('hide-icon'); + } + $table.on('click', '.edit-icon', function(event) { //console.log("Edit icon clicked"); handleEdit(event); @@ -238,6 +252,12 @@ /* rest of your JavaScript code */ /*]]>*/ + if (isAdmin) { + document.querySelectorAll('.delete-icon').forEach(function(icon) { + icon.classList.remove('hide-icon'); + }); + document.querySelector('#create-icon').classList.remove('hide-icon'); + } fetch('/buscador/alumnos/search?querySearchBar=' + querySearchBar + '&query=' + query + '&secondaryOption=' + secondaryOption) .then(response => response.json()) .then(data => { @@ -246,11 +266,14 @@ data.forEach(alumno => { var row = document.createElement('tr'); row.dataset.id = alumno.id; + if (isAdmin) { + iconHtml = ` `; + } row.innerHTML = ` @@ -308,9 +331,13 @@ // Start observing the document with the configured parameters observer.observe(document.querySelector('#table tbody'), { childList: true }); - document.getElementById('create-icon').addEventListener('click', function() { - //console.log("Create button clicked : TEST"); - window.location = "/admin/alumno/create"; + document.addEventListener('DOMContentLoaded', (event) => { + var createIcon = document.getElementById('create-icon'); + if (createIcon) { + createIcon.addEventListener('click', function() { + window.location = "/admin/alumno/create"; + }); + } }); var tableHeaders = document.querySelectorAll('.table-header'); diff --git a/src/main/resources/templates/list/ciclos.html b/src/main/resources/templates/list/ciclos.html index 245847d..832b578 100644 --- a/src/main/resources/templates/list/ciclos.html +++ b/src/main/resources/templates/list/ciclos.html @@ -19,24 +19,24 @@ - +
- + Nombre - + Apellido - + Apellido2 - + Fecha Nacimeinto - + Genero - + NIA - + DNI/NIE/Numero de pasaporte - + Correo - + Correo2 - + Nacionalidad - + Keywords - + Ciclo
- [[${alumno.nombre}]] - + + [[${alumno.nombre}]] [[${alumno.apellido}]] [[${alumno.apellido2}]] + + ${alumno.nombre} - - ${alumno.apellido} ${alumno.apellido2}
@@ -44,9 +44,9 @@ @@ -95,6 +95,21 @@ function goBack() { window.history.back(); } + + /**/ + //console.log(isAdmin); + if (isAdmin) { + document.querySelectorAll('.edit-icon').forEach(function(icon) { + icon.classList.remove('hide-icon'); + }); + document.querySelectorAll('.delete-icon').forEach(function(icon) { + icon.classList.remove('hide-icon'); + }); + document.querySelector('#create-icon').classList.remove('hide-icon'); + } + var $table = $('#table'); var $modalDelete = $('#modalDelete'); var $myInput = $('#myInput'); @@ -102,26 +117,26 @@ var isSearchBarUsed = false; $table.on('click', '.edit-icon', function(event) { - console.log("Edit icon clicked"); + //console.log("Edit icon clicked"); handleEdit(event); }); $table.on('click', '.delete-icon', function(event) { - console.log("Delete icon clicked"); + //console.log("Delete icon clicked"); handleDelete(event); }); function handleEdit(event) { - console.log("handleEdit function called"); + // console.log("handleEdit function called"); const row = event.target.closest('tr'); const rowId = row.dataset.id; - console.log("Row ID: " + rowId); + //console.log("Row ID: " + rowId); window.location = "/admin/ciclo/update/" + rowId; } function handleDelete(event) { - console.log("handleDelete function called"); - console.log("Delete icon clicked"); + //console.log("handleDelete function called"); + //console.log("Delete icon clicked"); const row = event.target.closest('tr'); const rowId = row.dataset.id; var modal = document.getElementById("modalDelete"); @@ -175,6 +190,16 @@ /* rest of your JavaScript code */ /*]]>*/ + if (isAdmin) { + document.querySelectorAll('.edit-icon').forEach(function(icon) { + icon.classList.remove('hide-icon'); + }); + document.querySelectorAll('.delete-icon').forEach(function(icon) { + icon.classList.remove('hide-icon'); + }); + document.querySelector('#create-icon').classList.remove('hide-icon'); + } + fetch('/buscador/ciclos/search?querySearchBar=' + querySearchBar + '&query=' + query + '&secondaryOption=' + secondaryOption) .then(response => response.json()) .then(data => { @@ -183,11 +208,15 @@ data.forEach(ciclo => { var row = document.createElement('tr'); row.dataset.id = ciclo.id; + var iconHtml = ''; + if (isAdmin) { + iconHtml = ` + `; + } row.innerHTML = ` @@ -211,8 +240,6 @@ } }); - - document.querySelector('#table').addEventListener('click', function(event) { if (event.target.matches('.edit-icon')) { handleEdit(event); @@ -235,9 +262,13 @@ // Start observing the document with the configured parameters observer.observe(document.querySelector('#table tbody'), { childList: true }); - document.getElementById('create-icon').addEventListener('click', function() { - console.log("Create button clicked : TEST"); - window.location = "/admin/ciclo/create"; + document.addEventListener('DOMContentLoaded', (event) => { + var createIcon = document.getElementById('create-icon'); + if (createIcon) { + createIcon.addEventListener('click', function() { + window.location = "/admin/ciclo/create"; + }); + } }); var tableHeaders = document.querySelectorAll('.table-header'); diff --git a/src/main/resources/templates/list/contactos.html b/src/main/resources/templates/list/contactos.html index 2398a8a..207ed80 100644 --- a/src/main/resources/templates/list/contactos.html +++ b/src/main/resources/templates/list/contactos.html @@ -19,39 +19,39 @@ - +
- + Nombre - + Codigo - + Familia
+ + [[${ciclo.nombre}]] - - [[${ciclo.codigo}]] [[${ciclo.familia.nombre}]] + ${iconHtml} ${ciclo.nombre} - - ${ciclo.codigo} ${ciclo.familia.nombre}
@@ -60,9 +60,9 @@ @@ -115,6 +115,21 @@ function goBack() { window.history.back(); } + + /**/ + //console.log(isAdmin); + if (isAdmin) { + document.querySelectorAll('.edit-icon').forEach(function(icon) { + icon.classList.remove('hide-icon'); + }); + document.querySelectorAll('.delete-icon').forEach(function(icon) { + icon.classList.remove('hide-icon'); + }); + document.querySelector('#create-icon').classList.remove('hide-icon'); + } + var $table = $('#table'); var $modalDelete = $('#modalDelete'); var $myInput = $('#myInput'); @@ -195,6 +210,16 @@ /* rest of your JavaScript code */ /*]]>*/ + if (isAdmin) { + document.querySelectorAll('.edit-icon').forEach(function(icon) { + icon.classList.remove('hide-icon'); + }); + document.querySelectorAll('.delete-icon').forEach(function(icon) { + icon.classList.remove('hide-icon'); + }); + document.querySelector('#create-icon').classList.remove('hide-icon'); + } + fetch('/buscador/contactos/search?querySearchBar=' + querySearchBar+ '&query=' + query + '&secondaryOption=' + secondaryOption) .then(response => response.json()) @@ -204,11 +229,15 @@ data.forEach(contacto => { var row = document.createElement('tr'); row.dataset.id = contacto.id; + var iconHtml = ''; + if (isAdmin) { + iconHtml = ` + `; + } row.innerHTML = ` @@ -257,9 +286,13 @@ // Start observing the document with the configured parameters observer.observe(document.querySelector('#table tbody'), { childList: true }); - document.getElementById('create-icon').addEventListener('click', function() { - console.log("Create button clicked : TEST"); - window.location = "/admin/contacto/create"; + document.addEventListener('DOMContentLoaded', (event) => { + var createIcon = document.getElementById('create-icon'); + if (createIcon) { + createIcon.addEventListener('click', function() { + window.location = "/admin/contacto/create"; + }); + } }); var tableHeaders = document.querySelectorAll('.table-header'); diff --git a/src/main/resources/templates/list/empresas.html b/src/main/resources/templates/list/empresas.html index 1870ac8..caec991 100644 --- a/src/main/resources/templates/list/empresas.html +++ b/src/main/resources/templates/list/empresas.html @@ -15,43 +15,43 @@

Listado de Empresas

- +
- +
- + Nombre - + Apellido - + Apellido2 - + Correo - + Telefono - + Empresa
+ + [[${contacto.nombre}]] - - [[${contacto.apellido}]] [[${contacto.apellido2}]] + ${iconHtml} ${contacto.nombre} - - ${contacto.apellido} ${contacto.apellido2}
@@ -61,9 +61,9 @@ @@ -114,6 +114,19 @@ function goBack() { window.history.back(); } + /**/ + //console.log(isAdmin); + if (isAdmin) { + document.querySelectorAll('.edit-icon').forEach(function(icon) { + icon.classList.remove('hide-icon'); + }); + document.querySelectorAll('.delete-icon').forEach(function(icon) { + icon.classList.remove('hide-icon'); + }); + document.querySelector('#create-icon').classList.remove('hide-icon'); + } var $table = $('#table'); var $modalDelete = $('#modalDelete'); @@ -195,10 +208,19 @@ var secondaryOption = /*[[${secondaryOption}]]*/ 'defaultSecondaryOption'; /* rest of your JavaScript code */ /*]]>*/ - //console.log("Query: " + query); //console.log("Secondary Option: " + secondaryOption); + if (isAdmin) { + document.querySelectorAll('.edit-icon').forEach(function(icon) { + icon.classList.remove('hide-icon'); + }); + document.querySelectorAll('.delete-icon').forEach(function(icon) { + icon.classList.remove('hide-icon'); + }); + document.querySelector('#create-icon').classList.remove('hide-icon'); + } + fetch('/buscador/empresas/search?querySearchBar=' + querySearchBar + '&query=' + query + '&secondaryOption=' + secondaryOption) .then(response => response.json()) .then(data => { @@ -207,12 +229,16 @@ data.forEach(empresa => { var row = document.createElement('tr'); row.dataset.id = empresa.id; + var iconHtml = ''; + if (isAdmin) { + iconHtml = ` + `; + } row.innerHTML = ` - + @@ -256,9 +282,13 @@ }); observer.observe(document.querySelector('#table tbody'), {childList: true}); - document.getElementById('create-icon').addEventListener('click', function () { - //console.log("Create button clicked : TEST"); - window.location = "/admin/empresa/create"; + document.addEventListener('DOMContentLoaded', (event) => { + var createIcon = document.getElementById('create-icon'); + if (createIcon) { + createIcon.addEventListener('click', function() { + window.location = "/admin/empresa/create"; + }); + } }); var tableHeaders = document.querySelectorAll('.table-header'); diff --git a/src/main/resources/templates/list/familias.html b/src/main/resources/templates/list/familias.html index 95c8ffd..6419460 100644 --- a/src/main/resources/templates/list/familias.html +++ b/src/main/resources/templates/list/familias.html @@ -19,14 +19,14 @@ - +
- + Nombre - + Cif - + Correo - + Telefono - + Keywords - + Sector
+ + [[${empresa.nombre}]] - - [[${empresa.cif}]] [[${empresa.correo}]] - ${empresa.nombre} - - - + ${iconHtml} + ${empresa.nombre} + ${empresa.cif} ${empresa.correo} ${empresa.telefono}
@@ -35,9 +35,9 @@ @@ -84,6 +84,20 @@ function goBack() { window.history.back(); } + /**/ + //console.log(isAdmin); + if (isAdmin) { + document.querySelectorAll('.edit-icon').forEach(function(icon) { + icon.classList.remove('hide-icon'); + }); + document.querySelectorAll('.delete-icon').forEach(function(icon) { + icon.classList.remove('hide-icon'); + }); + document.querySelector('#create-icon').classList.remove('hide-icon'); + } + var $table = $('#table'); var $modalDelete = $('#modalDelete'); var $myInput = $('#myInput'); @@ -146,7 +160,7 @@ var paginationControls = document.querySelector('#paginationControls'); var entriesCountDropdown = document.querySelector('#entriesCount'); - if (query == '') { + if (query === '') { isSearchBarUsed = false; paginationControls.style.display = ''; entriesCountDropdown.style.display = ''; @@ -158,6 +172,16 @@ entriesCountDropdown.style.display = 'none'; table.style.pointerEvents = 'none'; + if (isAdmin) { + document.querySelectorAll('.edit-icon').forEach(function(icon) { + icon.classList.remove('hide-icon'); + }); + document.querySelectorAll('.delete-icon').forEach(function(icon) { + icon.classList.remove('hide-icon'); + }); + document.querySelector('#create-icon').classList.remove('hide-icon'); + } + fetch('/buscador/familias/search?query=' + query) .then(response => response.json()) .then(data => { @@ -166,11 +190,15 @@ data.forEach(familia => { var row = document.createElement('tr'); row.dataset.id = familia.id; + var iconHtml = ''; + if (isAdmin) { + iconHtml = ` + `; + } row.innerHTML = ` `; tableBody.appendChild(row); @@ -214,9 +242,13 @@ // Start observing the document with the configured parameters observer.observe(document.querySelector('#table tbody'), { childList: true }); - document.getElementById('create-icon').addEventListener('click', function() { - console.log("Create button clicked : TEST"); - window.location = "/admin/familia/create"; + document.addEventListener('DOMContentLoaded', (event) => { + var createIcon = document.getElementById('create-icon'); + if (createIcon) { + createIcon.addEventListener('click', function() { + window.location = "/admin/familia/create"; + }); + } }); var tableHeaders = document.querySelectorAll('.table-header'); diff --git a/src/main/resources/templates/list/ofertas.html b/src/main/resources/templates/list/ofertas.html index fa95520..05617bf 100644 --- a/src/main/resources/templates/list/ofertas.html +++ b/src/main/resources/templates/list/ofertas.html @@ -19,34 +19,34 @@ - +
- + Nombre
+ + [[${familia.nombre}]] - -
+ ${iconHtml} ${familia.nombre} - -
@@ -58,9 +58,9 @@ @@ -114,6 +114,21 @@ function goBack() { window.history.back(); } + + /**/ + //console.log(isAdmin); + if (isAdmin) { + document.querySelectorAll('.edit-icon').forEach(function(icon) { + icon.classList.remove('hide-icon'); + }); + document.querySelectorAll('.delete-icon').forEach(function(icon) { + icon.classList.remove('hide-icon'); + }); + document.querySelector('#create-icon').classList.remove('hide-icon'); + } + var $table = $('#table'); var $modalDelete = $('#modalDelete'); var $myInput = $('#myInput'); @@ -183,6 +198,16 @@ /* rest of your JavaScript code */ /*]]>*/ + if (isAdmin) { + document.querySelectorAll('.edit-icon').forEach(function(icon) { + icon.classList.remove('hide-icon'); + }); + document.querySelectorAll('.delete-icon').forEach(function(icon) { + icon.classList.remove('hide-icon'); + }); + document.querySelector('#create-icon').classList.remove('hide-icon'); + } + if (querySearchBar === '') { isSearchBarUsed = false; paginationControls.style.display = ''; @@ -203,11 +228,15 @@ data.forEach(oferta => { var row = document.createElement('tr'); row.dataset.id = oferta.id; + var iconHtml = ''; + if (isAdmin) { + iconHtml = ` + `; + } row.innerHTML = ` @@ -258,9 +287,13 @@ // Start observing the document with the configured parameters observer.observe(document.querySelector('#table tbody'), { childList: true }); - document.getElementById('create-icon').addEventListener('click', function() { - //console.log("Create button clicked : TEST"); - window.location = "/admin/oferta/create"; + document.addEventListener('DOMContentLoaded', (event) => { + var createIcon = document.getElementById('create-icon'); + if (createIcon) { + createIcon.addEventListener('click', function() { + window.location = "/admin/oferta/create"; + }); + } }); var tableHeaders = document.querySelectorAll('.table-header'); diff --git a/src/main/resources/templates/list/sectores.html b/src/main/resources/templates/list/sectores.html index 38566f0..1da86c0 100644 --- a/src/main/resources/templates/list/sectores.html +++ b/src/main/resources/templates/list/sectores.html @@ -19,14 +19,14 @@ - +
- + Nombre - + Fecha - + Descripcion - + Sucursal - + Ciclo
+ + [[${oferta.nombre}]] - - [[${oferta.fecha}]] [[${oferta.descripcion}]] + ${iconHtml} ${oferta.nombre} - - ${oferta.fecha} ${oferta.descripcion}
@@ -34,9 +34,9 @@ @@ -83,6 +83,20 @@ function goBack() { window.history.back(); } + /**/ + //console.log(isAdmin); + if (isAdmin) { + document.querySelectorAll('.edit-icon').forEach(function(icon) { + icon.classList.remove('hide-icon'); + }); + document.querySelectorAll('.delete-icon').forEach(function(icon) { + icon.classList.remove('hide-icon'); + }); + document.querySelector('#create-icon').classList.remove('hide-icon'); + } + var $table = $('#table'); var $modalDelete = $('#modalDelete'); var $myInput = $('#myInput'); @@ -90,12 +104,12 @@ var isSearchBarUsed = false; $table.on('click', '.edit-icon', function(event) { - console.log("Edit icon clicked"); + //console.log("Edit icon clicked"); handleEdit(event); }); $table.on('click', '.delete-icon', function(event) { - console.log("Delete icon clicked"); + //console.log("Delete icon clicked"); handleDelete(event); }); @@ -103,13 +117,13 @@ console.log("handleEdit function called"); const row = event.target.closest('tr'); const rowId = row.dataset.id; - console.log("Row ID: " + rowId); + //console.log("Row ID: " + rowId); window.location = "/admin/sector/update/" + rowId; } function handleDelete(event) { - console.log("handleDelete function called"); - console.log("Delete icon clicked"); + //console.log("handleDelete function called"); + //console.log("Delete icon clicked"); const row = event.target.closest('tr'); const rowId = row.dataset.id; var modal = document.getElementById("modalDelete"); @@ -145,7 +159,17 @@ var paginationControls = document.querySelector('#paginationControls'); var entriesCountDropdown = document.querySelector('#entriesCount'); - if (query == '') { + if (isAdmin) { + document.querySelectorAll('.edit-icon').forEach(function(icon) { + icon.classList.remove('hide-icon'); + }); + document.querySelectorAll('.delete-icon').forEach(function(icon) { + icon.classList.remove('hide-icon'); + }); + document.querySelector('#create-icon').classList.remove('hide-icon'); + } + + if (query === '') { isSearchBarUsed = false; paginationControls.style.display = ''; entriesCountDropdown.style.display = ''; @@ -165,13 +189,15 @@ data.forEach(sector => { var row = document.createElement('tr'); row.dataset.id = sector.id; + var iconHtml = ''; + if (isAdmin) { + iconHtml = ` + `; + } row.innerHTML = ` - - + `; tableBody.appendChild(row); }); @@ -179,12 +205,12 @@ document.querySelectorAll('.edit-icon').forEach(function(icon) { icon.removeEventListener('click', handleEdit); icon.addEventListener('click', handleEdit); - console.log("Edit icon event listener attached"); + //console.log("Edit icon event listener attached"); }); document.querySelectorAll('.delete-icon').forEach(function(icon) { icon.removeEventListener('click', handleDelete); icon.addEventListener('click', handleDelete); - console.log("Delete icon event listener attached"); + //console.log("Delete icon event listener attached"); }); table.style.pointerEvents = 'auto'; @@ -214,9 +240,13 @@ // Start observing the document with the configured parameters observer.observe(document.querySelector('#table tbody'), { childList: true }); - document.getElementById('create-icon').addEventListener('click', function() { - console.log("Create button clicked : TEST"); - window.location = "/admin/sector/create"; + document.addEventListener('DOMContentLoaded', (event) => { + var createIcon = document.getElementById('create-icon'); + if (createIcon) { + createIcon.addEventListener('click', function() { + window.location = "/admin/sector/create"; + }); + } }); var tableHeaders = document.querySelectorAll('.table-header'); diff --git a/src/main/resources/templates/list/skills.html b/src/main/resources/templates/list/skills.html index a56fd03..c7be0a2 100644 --- a/src/main/resources/templates/list/skills.html +++ b/src/main/resources/templates/list/skills.html @@ -19,14 +19,14 @@ - +
- + Nombre
+ + [[${sector.nombre}]] - -
- ${sector.id} - - - ${sector.nombre} + ${iconHtml} + ${sector.nombre}
@@ -34,9 +34,9 @@ @@ -83,6 +83,20 @@ function goBack() { window.history.back(); } + /**/ + //console.log(isAdmin); + if (isAdmin) { + document.querySelectorAll('.edit-icon').forEach(function(icon) { + icon.classList.remove('hide-icon'); + }); + document.querySelectorAll('.delete-icon').forEach(function(icon) { + icon.classList.remove('hide-icon'); + }); + document.querySelector('#create-icon').classList.remove('hide-icon'); + } + var $table = $('#table'); var $modalDelete = $('#modalDelete'); var $myInput = $('#myInput'); @@ -145,7 +159,17 @@ var paginationControls = document.querySelector('#paginationControls'); var entriesCountDropdown = document.querySelector('#entriesCount'); - if (query == '') { + if (isAdmin) { + document.querySelectorAll('.edit-icon').forEach(function(icon) { + icon.classList.remove('hide-icon'); + }); + document.querySelectorAll('.delete-icon').forEach(function(icon) { + icon.classList.remove('hide-icon'); + }); + document.querySelector('#create-icon').classList.remove('hide-icon'); + } + + if (query === '') { isSearchBarUsed = false; paginationControls.style.display = ''; entriesCountDropdown.style.display = ''; @@ -165,11 +189,15 @@ data.forEach(skill => { var row = document.createElement('tr'); row.dataset.id = skill.id; + var iconHtml = ''; + if (isAdmin) { + iconHtml = ` + `; + } row.innerHTML = ` `; tableBody.appendChild(row); @@ -213,9 +241,13 @@ // Start observing the document with the configured parameters observer.observe(document.querySelector('#table tbody'), { childList: true }); - document.getElementById('create-icon').addEventListener('click', function() { - console.log("Create button clicked : TEST"); - window.location = "/admin/skill/create"; + document.addEventListener('DOMContentLoaded', (event) => { + var createIcon = document.getElementById('create-icon'); + if (createIcon) { + createIcon.addEventListener('click', function() { + window.location = "/admin/skill/create"; + }); + } }); var tableHeaders = document.querySelectorAll('.table-header'); diff --git a/src/main/resources/templates/list/sucursales.html b/src/main/resources/templates/list/sucursales.html index 256b26e..a66dc22 100644 --- a/src/main/resources/templates/list/sucursales.html +++ b/src/main/resources/templates/list/sucursales.html @@ -19,34 +19,34 @@ - +
- + Nombre
+ + [[${skill.nombre}]] - -
+ ${iconHtml} ${skill.nombre} - -
@@ -55,9 +55,9 @@ @@ -108,6 +108,21 @@ function goBack() { window.history.back(); } + + /**/ + //console.log(isAdmin); + if (isAdmin) { + document.querySelectorAll('.edit-icon').forEach(function(icon) { + icon.classList.remove('hide-icon'); + }); + document.querySelectorAll('.delete-icon').forEach(function(icon) { + icon.classList.remove('hide-icon'); + }); + document.querySelector('#create-icon').classList.remove('hide-icon'); + } + var $table = $('#table'); var $modalDelete = $('#modalDelete'); var $myInput = $('#myInput'); @@ -188,6 +203,16 @@ /* rest of your JavaScript code */ /*]]>*/ + if (isAdmin) { + document.querySelectorAll('.edit-icon').forEach(function(icon) { + icon.classList.remove('hide-icon'); + }); + document.querySelectorAll('.delete-icon').forEach(function(icon) { + icon.classList.remove('hide-icon'); + }); + document.querySelector('#create-icon').classList.remove('hide-icon'); + } + fetch('/buscador/sucursales/search?querySearchBar=' + querySearchBar + '&query=' + query + '&secondaryOption=' + secondaryOption) .then(response => response.json()) .then(data => { @@ -196,11 +221,15 @@ data.forEach(sucursal => { var row = document.createElement('tr'); row.dataset.id = sucursal.id; + var iconHtml = ''; + if (isAdmin) { + iconHtml = ` + `; + } row.innerHTML = ` @@ -248,9 +277,13 @@ // Start observing the document with the configured parameters observer.observe(document.querySelector('#table tbody'), { childList: true }); - document.getElementById('create-icon').addEventListener('click', function() { - //console.log("Create button clicked : TEST"); - window.location = "/admin/sucursal/create"; + document.addEventListener('DOMContentLoaded', (event) => { + var createIcon = document.getElementById('create-icon'); + if (createIcon) { + createIcon.addEventListener('click', function() { + window.location = "/admin/sucursal/create"; + }); + } }); var tableHeaders = document.querySelectorAll('.table-header'); diff --git a/src/main/resources/templates/user/alumno/update.html b/src/main/resources/templates/user/alumno/update.html new file mode 100644 index 0000000..cdc103e --- /dev/null +++ b/src/main/resources/templates/user/alumno/update.html @@ -0,0 +1,203 @@ + + + + + Update: Alumno + + + + + + + + + + +

Editar datos de Alumno

+ + + +
+
+ +
+ +
+
+ +
+ +
+ +
+
+ +
+ +
+ +
+
+ +
+ +
+ +
+
+ +
+ +
+ +
+
+ +
+ +
+ + +
+
+ +
+ +
+ +
+
+ +
+ +
+ +
+
+ +
+ +
+ +
+
+ +
+ +
+ +
+
+ +
+ +
+ +
+
+ + +
+ +
+ +
+
+ +
+

Select Skills

+ +
+ +
+ + +
+
+ + + + +
- + Nombre - + Localidad - + Direccion - + Sede Central - + Empresa
+ + [[${sucursal.nombre}]] - - [[${sucursal.localidad}]] [[${sucursal.direccion}]] + ${iconHtml} ${sucursal.nombre} - - ${sucursal.localidad} ${sucursal.direccion}