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}