From ea6c8a7d631a3f55a86028997f05cb8a2cef7380 Mon Sep 17 00:00:00 2001 From: vicsash Date: Mon, 6 May 2024 15:35:52 +0200 Subject: [PATCH] Acabando con oepracion de borar,edit y crear en todas las entidades. Refactorizacion del codigo de metodos de paginacion a un metodo y un interfaz de paginacion. Refactorizacion de los scripts y cambios a css de una tablas. Quitando el id de las tabla que el usuario no necesita a verlos. --- .../controllers/BuscadorController.java | 285 ++++++++------- .../modelControllers/AlumnoController.java | 92 +++++ .../modelControllers/CicloController.java | 87 +++++ .../modelControllers/FamiliaController.java | 71 ++-- .../modelControllers/OfertaController.java | 107 ++++++ .../modelControllers/SkillController.java | 65 ++++ .../proyectofinal/models/empresas/Alumno.java | 5 +- .../proyectofinal/models/empresas/Oferta.java | 1 + .../proyectofinal/models/empresas/Skill.java | 13 + .../empresas/AlumnoRepository.java | 28 ++ .../empresas/CicloRepository.java | 8 +- .../empresas/ContactoRepository.java | 2 +- .../empresas/EmpressaRepository.java | 2 +- .../empresas/FamiliaRepository.java | 6 + .../empresas/OfertaRepository.java | 25 +- .../empresas/SectorRepository.java | 2 +- .../empresas/SkillRepository.java | 13 +- .../servicios/AlumnoService.java | 80 +++++ .../proyectofinal/servicios/CicloService.java | 96 +++++ .../servicios/ContactosService.java | 12 +- .../servicios/EmpresaService.java | 34 +- .../servicios/FamiliaService.java | 69 +++- .../servicios/OfertaService.java | 58 ++- .../servicios/SectorService.java | 2 +- .../proyectofinal/servicios/SkillService.java | 27 +- .../servicios/SucursalService.java | 7 +- .../servicios/implemetations/IAlumno.java | 23 ++ .../servicios/implemetations/ICiclos.java | 27 ++ .../servicios/implemetations/IContactos.java | 6 +- .../servicios/implemetations/IEmpresa.java | 4 +- .../servicios/implemetations/IFamilia.java | 20 ++ .../servicios/implemetations/IOferta.java | 7 +- .../servicios/implemetations/IPagination.java | 8 + .../servicios/implemetations/ISector.java | 4 +- .../servicios/implemetations/ISkill.java | 7 +- .../servicios/implemetations/ISucursal.java | 5 +- src/main/resources/static/orderTable.js | 3 +- src/main/resources/static/style.css | 9 +- .../templates/admin/alumno/create.html | 205 +++++++++++ .../templates/admin/alumno/update.html | 203 +++++++++++ .../templates/admin/ciclo/create.html | 123 +++++++ .../templates/admin/ciclo/update.html | 121 +++++++ .../templates/admin/familia/create.html | 99 ++++-- .../templates/admin/familia/delete.html | 10 - .../templates/admin/familia/edit.html | 10 - .../templates/admin/familia/update.html | 101 ++++++ .../templates/admin/oferta/create.html | 156 ++++++++ .../templates/admin/oferta/update.html | 152 ++++++++ .../templates/admin/skill/create.html | 105 ++++++ .../templates/admin/skill/update.html | 107 ++++++ .../resources/templates/list/alumnos.html | 332 ++++++++++++++++-- src/main/resources/templates/list/ciclo.html | 43 --- src/main/resources/templates/list/ciclos.html | 251 +++++++++++++ .../resources/templates/list/contactos.html | 164 ++++++--- .../resources/templates/list/empresas.html | 180 ++++++---- .../resources/templates/list/familias.html | 220 +++++++++++- .../resources/templates/list/ofertas.html | 257 +++++++++++++- .../resources/templates/list/sectores.html | 176 ++++++---- src/main/resources/templates/list/skills.html | 222 +++++++++++- .../resources/templates/list/sucursales.html | 169 +++++---- 60 files changed, 4053 insertions(+), 673 deletions(-) create mode 100644 src/main/java/com/example/proyectofinal/controllers/modelControllers/AlumnoController.java create mode 100644 src/main/java/com/example/proyectofinal/controllers/modelControllers/CicloController.java create mode 100644 src/main/java/com/example/proyectofinal/controllers/modelControllers/OfertaController.java create mode 100644 src/main/java/com/example/proyectofinal/controllers/modelControllers/SkillController.java create mode 100644 src/main/java/com/example/proyectofinal/servicios/AlumnoService.java create mode 100644 src/main/java/com/example/proyectofinal/servicios/CicloService.java create mode 100644 src/main/java/com/example/proyectofinal/servicios/implemetations/IAlumno.java create mode 100644 src/main/java/com/example/proyectofinal/servicios/implemetations/ICiclos.java create mode 100644 src/main/java/com/example/proyectofinal/servicios/implemetations/IFamilia.java create mode 100644 src/main/java/com/example/proyectofinal/servicios/implemetations/IPagination.java create mode 100644 src/main/resources/templates/admin/alumno/create.html create mode 100644 src/main/resources/templates/admin/alumno/update.html create mode 100644 src/main/resources/templates/admin/ciclo/create.html create mode 100644 src/main/resources/templates/admin/ciclo/update.html delete mode 100644 src/main/resources/templates/admin/familia/delete.html delete mode 100644 src/main/resources/templates/admin/familia/edit.html create mode 100644 src/main/resources/templates/admin/familia/update.html create mode 100644 src/main/resources/templates/admin/oferta/create.html create mode 100644 src/main/resources/templates/admin/oferta/update.html create mode 100644 src/main/resources/templates/admin/skill/create.html create mode 100644 src/main/resources/templates/admin/skill/update.html delete mode 100644 src/main/resources/templates/list/ciclo.html create mode 100644 src/main/resources/templates/list/ciclos.html diff --git a/src/main/java/com/example/proyectofinal/controllers/BuscadorController.java b/src/main/java/com/example/proyectofinal/controllers/BuscadorController.java index b6d2760..9fbf63c 100644 --- a/src/main/java/com/example/proyectofinal/controllers/BuscadorController.java +++ b/src/main/java/com/example/proyectofinal/controllers/BuscadorController.java @@ -3,13 +3,9 @@ package com.example.proyectofinal.controllers; import com.example.proyectofinal.models.empresas.*; import com.example.proyectofinal.repositories.empresas.*; -import com.example.proyectofinal.servicios.ContactosService; -import com.example.proyectofinal.servicios.SectorService; -import com.example.proyectofinal.servicios.SucursalService; -import com.example.proyectofinal.servicios.implemetations.IEmpresa; +import com.example.proyectofinal.servicios.*; +import com.example.proyectofinal.servicios.implemetations.IPagination; import org.springframework.data.domain.Page; -import org.springframework.data.domain.PageRequest; -import org.springframework.data.domain.Pageable; import org.springframework.http.ResponseEntity; import org.springframework.ui.Model; import org.springframework.beans.factory.annotation.Autowired; @@ -28,25 +24,27 @@ public class BuscadorController { @Autowired private EmpressaRepository empressaRepository; @Autowired - private AlumnoRepository alumnoRepository; + private AlumnoService alumnoService; @Autowired - private OfertaRepository ofertaRepository; + private OfertaService ofertasService; @Autowired private SectorService sectorService; @Autowired private SucursalService sucursalService; @Autowired - private SkillRepository skillRepository; - + private SkillService skillService; + @Autowired + private AlumnoRepository alumnoRepository; @Autowired private ContactosService contactosService; @Autowired - private FamiliaRepository familiaRepository; + private FamiliaService familiaService; @Autowired - private CicloRepository cicloRepository; - + private CicloService cicloService; + @Autowired + private OfertaRepository ofertaRepository; @Autowired - private IEmpresa empresaService; + private EmpresaService empresaService; @GetMapping public String buscador(){ @@ -58,19 +56,16 @@ public class BuscadorController { @RequestParam(defaultValue = "") String query, Model model, @RequestParam(defaultValue = "10") int size, - @RequestParam(defaultValue = "id") String sortField, + @RequestParam(defaultValue = "nombre") String sortField, @RequestParam(defaultValue = "asc") String sortDir){ String[] word = query.split("\\b(y|o)\\b|[,/]"); List itemsPage = Arrays.asList(5, 10, 15, 20, 25, 50); if (word.length == 1 && (word[0].equalsIgnoreCase("all") || word[0].equalsIgnoreCase("todas"))) { - sortField = "id"; + sortField = "nombre"; sortDir = "asc"; } - Page page = this.empresaService.finadAllpaginated(pageNum, size, sortField, sortDir); - List empresas = page.getContent(); - model.addAttribute("currentSize", size); - Map attributes = getPagAtrEmpresas(pageNum, query, size, sortField, sortDir, empresas, itemsPage); + Map attributes = getPaginatedAttributes(pageNum, query, size, sortField, sortDir, empresaService, itemsPage); for (Map.Entry entry : attributes.entrySet()) { model.addAttribute(entry.getKey(), entry.getValue()); } @@ -82,22 +77,18 @@ public class BuscadorController { @RequestParam(defaultValue = "") String query, Model model, @RequestParam(defaultValue = "10") int size, - @RequestParam(defaultValue = "id") String sortField, + @RequestParam(defaultValue = "nombre") String sortField, @RequestParam(defaultValue = "asc") String sortDir){ String[] word = query.split("\\b(y|o)\\b|[,/]"); List itemsPage = Arrays.asList(5, 10, 15, 20, 25, 50); if (word.length == 1 && (word[0].equalsIgnoreCase("all") || word[0].equalsIgnoreCase("todas"))) { - sortField = "id"; + sortField = "nombre"; sortDir = "asc"; } - Page page = this.sectorService.finadAllpaginated(pageNum, size, sortField, sortDir); - List sectors = page.getContent(); - model.addAttribute("currentSize", size); - Map attributes = getPagAtrSetores(pageNum, query, size, sortField, sortDir, sectors, itemsPage); + Map attributes = getPaginatedAttributes(pageNum, query, size, sortField, sortDir, sectorService, itemsPage); for (Map.Entry entry : attributes.entrySet()) { model.addAttribute(entry.getKey(), entry.getValue()); } - return "/list/sectores"; } @@ -107,18 +98,15 @@ public class BuscadorController { @RequestParam(defaultValue = "") String query, Model model, @RequestParam(defaultValue = "10") int size, - @RequestParam(defaultValue = "id") String sortField, + @RequestParam(defaultValue = "nombre") String sortField, @RequestParam(defaultValue = "asc") String sortDir) { String[] word = query.split("\\b(y|o)\\b|[,/]"); List itemsPage = Arrays.asList(5, 10, 15, 20, 25, 50); if (word.length == 1 && (word[0].equalsIgnoreCase("all") || word[0].equalsIgnoreCase("todas"))) { - sortField = "id"; + sortField = "nombre"; sortDir = "asc"; } - Page page = this.contactosService.finadAllpaginated(pageNum, size, sortField, sortDir); - List contactos = page.getContent(); - model.addAttribute("currentSize", size); - Map attributes = getPagAtrContactos(pageNum, query, size, sortField, sortDir, contactos, itemsPage); + Map attributes = getPaginatedAttributes(pageNum, query, size, sortField, sortDir, contactosService, itemsPage); for (Map.Entry entry : attributes.entrySet()) { model.addAttribute(entry.getKey(), entry.getValue()); } @@ -130,141 +118,135 @@ public class BuscadorController { @RequestParam(defaultValue = "") String query, Model model, @RequestParam(defaultValue = "10") int size, - @RequestParam(defaultValue = "id") String sortField, + @RequestParam(defaultValue = "nombre") String sortField, @RequestParam(defaultValue = "asc") String sortDir){ String[] word = query.split("\\b(y|o)\\b|[,/]"); List itemsPage = Arrays.asList(5, 10, 15, 20, 25, 50); if (word.length == 1 && (word[0].equalsIgnoreCase("all") || word[0].equalsIgnoreCase("todas"))) { - sortField = "id"; + sortField = "nombre"; sortDir = "asc"; } - Page page = this.sucursalService.finadAllpaginated(pageNum, size, sortField, sortDir); - List sucursals = page.getContent(); - model.addAttribute("currentSize", size); - Map attributes = getPagAtrSucursales(pageNum, query, size, sortField, sortDir, sucursals, itemsPage); + Map attributes = getPaginatedAttributes(pageNum, query, size, sortField, sortDir, sucursalService, itemsPage); for (Map.Entry entry : attributes.entrySet()) { model.addAttribute(entry.getKey(), entry.getValue()); } return "/list/sucursales"; } - public String searchAlumnosList(@RequestParam String query, @RequestParam String searchOption, @RequestParam(required = false) String filter, Model model, @RequestParam(defaultValue = "0") int page, @RequestParam(defaultValue = "10") int size) { - Pageable pageable = PageRequest.of(page, size); - String[] word = query.split("\\b(y|o)\\b|[,/]"); - if (word.length == 1 && word[0].equalsIgnoreCase("all") || word[0].equalsIgnoreCase("todos")) { - List alumnos = new ArrayList<>(alumnoRepository.findAll()); - model.addAttribute("alumnos", alumnos); - return "/list/alumnos"; - } - return "/list/alumnos"; - } - @GetMapping("/ofertas") - public String searchOfertasList(@RequestParam String query, @RequestParam String searchOption, @RequestParam(required = false) String filter, Model model, @RequestParam(defaultValue = "0") int page, @RequestParam(defaultValue = "10") int size){ - Pageable pageable = PageRequest.of(page, size); + @GetMapping("/ofertas/page/{pageNum}") + public String searchOfertasList(@PathVariable int pageNum, + @RequestParam(defaultValue = "") String query, + Model model, + @RequestParam(defaultValue = "10") int size, + @RequestParam(defaultValue = "nombre") String sortField, + @RequestParam(defaultValue = "asc") String sortDir){ String[] word = query.split("\\b(y|o)\\b|[,/]"); - if (word.length == 1 && word[0].equalsIgnoreCase("all") || word[0].equalsIgnoreCase("todas")) { - List ofertas = new ArrayList<>(ofertaRepository.findAll()); - model.addAttribute("ofertas", ofertas); - return "/list/ofertas"; + List itemsPage = Arrays.asList(5, 10, 15, 20, 25, 50); + if (word.length == 1 && (word[0].equalsIgnoreCase("all") || word[0].equalsIgnoreCase("todas"))) { + sortField = "nombre"; + sortDir = "asc"; + } + Map attributes = getPaginatedAttributes(pageNum, query, size, sortField, sortDir, ofertasService, itemsPage); + for (Map.Entry entry : attributes.entrySet()) { + model.addAttribute(entry.getKey(), entry.getValue()); } return "/list/ofertas"; } - @GetMapping("/familias") - public String searchFamiliasList(@RequestParam String query, @RequestParam String searchOption, @RequestParam(required = false) String filter, Model model, @RequestParam(defaultValue = "0") int page, @RequestParam(defaultValue = "10") int size) { - Pageable pageable = PageRequest.of(page, size); + @GetMapping("/familias/page/{pageNum}") + public String searchFamiliasList(@PathVariable int pageNum, + @RequestParam(defaultValue = "") String query, + Model model, + @RequestParam(defaultValue = "10") int size, + @RequestParam(defaultValue = "nombre") String sortField, + @RequestParam(defaultValue = "asc") String sortDir) { String[] word = query.split("\\b(y|o)\\b|[,/]"); - if (word.length == 1 && word[0].equalsIgnoreCase("all") || word[0].equalsIgnoreCase("todas")) { - List familias = new ArrayList<>(familiaRepository.findAll()); - model.addAttribute("familias", familias); - return "/list/familias"; + List itemsPage = Arrays.asList(5, 10, 15, 20, 25, 50); + if (word.length == 1 && (word[0].equalsIgnoreCase("all") || word[0].equalsIgnoreCase("todas"))) { + sortField = "nombre"; + sortDir = "asc"; + } + Map attributes = getPaginatedAttributes(pageNum, query, size, sortField, sortDir, familiaService, itemsPage); + for (Map.Entry entry : attributes.entrySet()) { + model.addAttribute(entry.getKey(), entry.getValue()); } return "/list/familias"; } - @GetMapping("/ciclos") - public String searchCiclosList(@RequestParam String query, @RequestParam String searchOption, @RequestParam(required = false) String filter, Model model, @RequestParam(defaultValue = "0") int page, @RequestParam(defaultValue = "10") int size) { - Pageable pageable = PageRequest.of(page, size); + @GetMapping("/ciclos/page/{pageNum}") + public String searchCiclosList(@PathVariable int pageNum, + @RequestParam(defaultValue = "") String query, + Model model, + @RequestParam(defaultValue = "10") int size, + @RequestParam(defaultValue = "nombre") String sortField, + @RequestParam(defaultValue = "asc") String sortDir) { String[] word = query.split("\\b(y|o)\\b|[,/]"); - if (word.length == 1 && word[0].equalsIgnoreCase("all") || word[0].equalsIgnoreCase("todas")) { - List ciclos = new ArrayList<>(cicloRepository.findAll()); - model.addAttribute("ciclos", ciclos); - return "/list/ciclos"; + List itemsPage = Arrays.asList(5, 10, 15, 20, 25, 50); + if (word.length == 1 && (word[0].equalsIgnoreCase("all") || word[0].equalsIgnoreCase("todas"))) { + sortField = "nombre"; + sortDir = "asc"; + } + Map attributes = getPaginatedAttributes(pageNum, query, size, sortField, sortDir, cicloService, itemsPage); + for (Map.Entry entry : attributes.entrySet()) { + model.addAttribute(entry.getKey(), entry.getValue()); } return "/list/ciclos"; } + @GetMapping("/alumnos/page/{pageNum}") + public String searchAlumnosList(@PathVariable int pageNum, + @RequestParam(defaultValue = "") String query, + Model model, + @RequestParam(defaultValue = "10") int size, + @RequestParam(defaultValue = "nombre") String sortField, + @RequestParam(defaultValue = "asc") String sortDir) { - - @GetMapping("/skills") - public String searchSkillsList(@RequestParam String query, @RequestParam String searchOption, @RequestParam(required = false) String filter, Model model, @RequestParam(defaultValue = "0") int page, @RequestParam(defaultValue = "10") int size) { - Pageable pageable = PageRequest.of(page, size); String[] word = query.split("\\b(y|o)\\b|[,/]"); - if (word.length == 1 && word[0].equalsIgnoreCase("all") || word[0].equalsIgnoreCase("todas")) { - List skills = new ArrayList<>(skillRepository.findAll()); - model.addAttribute("skills", skills); - return "/list/skills"; + List itemsPage = Arrays.asList(5, 10, 15, 20, 25, 50); + if (word.length == 1 && (word[0].equalsIgnoreCase("all") || word[0].equalsIgnoreCase("todas"))) { + sortField = "nombre"; + sortDir = "asc"; } - return "/list/skills"; - } - - - public Map getPagAtrEmpresas(int pageNum, String query, int size, String sortField, String sortDir, List empresas, List itemsPage) { - Map attributes = new HashMap<>(); - Page page = this.empresaService.finadAllpaginated(pageNum, size, "id", "asc"); - attributes.put("currentPage", pageNum); - attributes.put("totalPages", page.getTotalPages()); - attributes.put("totalItems", page.getTotalElements()); - attributes.put("sortField", sortField); - attributes.put("sortDir", sortDir); - attributes.put("reverseSortDir", sortDir.equals("asc") ? "desc" : "asc"); - attributes.put("empresas", empresas); - attributes.put("query", query); - attributes.put("itemsPage", itemsPage); - return attributes; - } - - public Map getPagAtrSetores(int pageNum, String query, int size, String sortField, String sortDir, List sectors, List itemsPage) { - Map attributes = new HashMap<>(); - Page page = this.sectorService.finadAllpaginated(pageNum, size, "id", "asc"); - attributes.put("currentPage", pageNum); - attributes.put("totalPages", page.getTotalPages()); - attributes.put("totalItems", page.getTotalElements()); - attributes.put("sortField", sortField); - attributes.put("sortDir", sortDir); - attributes.put("reverseSortDir", sortDir.equals("asc") ? "desc" : "asc"); - attributes.put("sectores", sectors); - attributes.put("query", query); - attributes.put("itemsPage", itemsPage); - return attributes; + Map attributes = getPaginatedAttributes(pageNum, query, size, sortField, sortDir, alumnoService, itemsPage); + for (Map.Entry entry : attributes.entrySet()) { + model.addAttribute(entry.getKey(), entry.getValue()); + } + return "/list/alumnos"; } - public Map getPagAtrContactos(int pageNum, String query, int size, String sortField, String sortDir, List contactos, List itemsPage) { - Map attributes = new HashMap<>(); - Page page = this.contactosService.finadAllpaginated(pageNum, size, "id", "asc"); - attributes.put("currentPage", pageNum); - attributes.put("totalPages", page.getTotalPages()); - attributes.put("totalItems", page.getTotalElements()); - attributes.put("sortField", sortField); - attributes.put("sortDir", sortDir); - attributes.put("reverseSortDir", sortDir.equals("asc") ? "desc" : "asc"); - attributes.put("contactos", contactos); - attributes.put("query", query); - attributes.put("itemsPage", itemsPage); - return attributes; + @GetMapping("/skills/page/{pageNum}") + public String searchSkillsList(@PathVariable int pageNum, + @RequestParam(defaultValue = "") String query, + Model model, + @RequestParam(defaultValue = "10") int size, + @RequestParam(defaultValue = "nombre") String sortField, + @RequestParam(defaultValue = "asc") String sortDir) { + String[] word = query.split("\\b(y|o)\\b|[,/]"); + List itemsPage = Arrays.asList(5, 10, 15, 20, 25, 50); + if (word.length == 1 && (word[0].equalsIgnoreCase("all") || word[0].equalsIgnoreCase("todas"))) { + sortField = "nombre"; + sortDir = "asc"; + } + Map attributes = getPaginatedAttributes(pageNum, query, size, sortField, sortDir, skillService, itemsPage); + for (Map.Entry entry : attributes.entrySet()) { + model.addAttribute(entry.getKey(), entry.getValue()); + } + return "/list/skills"; } - public Map getPagAtrSucursales(int pageNum, String query, int size, String sortField, String sortDir, List sucursals, List itemsPage) { + public Map getPaginatedAttributes(int pageNum, String query, int size, String sortField, String sortDir, IPagination service, List itemsPage) { Map attributes = new HashMap<>(); - Page page = this.sucursalService.finadAllpaginated(pageNum, size, "id", "asc"); + Page page = service.findAllPaginated(pageNum, size, sortField, sortDir); + List items = page.getContent(); attributes.put("currentPage", pageNum); attributes.put("totalPages", page.getTotalPages()); attributes.put("totalItems", page.getTotalElements()); attributes.put("sortField", sortField); attributes.put("sortDir", sortDir); attributes.put("reverseSortDir", sortDir.equals("asc") ? "desc" : "asc"); - attributes.put("sucursales", sucursals); + attributes.put("items", items); attributes.put("query", query); attributes.put("itemsPage", itemsPage); + attributes.put("currentSize", size); return attributes; } @@ -292,4 +274,55 @@ public class BuscadorController { return ResponseEntity.ok(sucursals); } + @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 query) { + List ciclos = cicloService.search(query); + return ResponseEntity.ok(ciclos); + } + @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 query) { + List alumnos = alumnoService.search(query); + for (Alumno alumno : alumnos) { + List skillsData = alumnoRepository.findSkillsByAlumnoId(alumno.getId()); + Set skills = new HashSet<>(); + for (Object[] skillData : skillsData) { + Skill skill = new Skill(); + skill.setId((Long) skillData[0]); + skill.setNombre((String) skillData[1]); + skills.add(skill); + } + alumno.setSkills(skills); + } + return ResponseEntity.ok(alumnos); + } + + + @GetMapping("/ofertas/search") + public ResponseEntity> searchOfertas(@RequestParam String query) { + List ofertas = ofertasService.search(query); + for (Oferta oferta : ofertas) { + List skillsData = ofertaRepository.findSkillsByOfertaId(oferta.getId()); + Set skills = new HashSet<>(); + for (Object[] skillData : skillsData) { + Skill skill = new Skill(); + skill.setId((Long) skillData[0]); + skill.setNombre((String) skillData[1]); + skills.add(skill); + } + oferta.setSkills(skills); + } + return ResponseEntity.ok(ofertas); + } + } \ No newline at end of file diff --git a/src/main/java/com/example/proyectofinal/controllers/modelControllers/AlumnoController.java b/src/main/java/com/example/proyectofinal/controllers/modelControllers/AlumnoController.java new file mode 100644 index 0000000..156f4df --- /dev/null +++ b/src/main/java/com/example/proyectofinal/controllers/modelControllers/AlumnoController.java @@ -0,0 +1,92 @@ +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 org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Set; + +@Controller +@RequestMapping() +public class AlumnoController { + @Autowired + private AlumnoService alumnoService; + + @Autowired + private SkillService skillService; + + @Autowired + private CicloService cicloService; + + @GetMapping("/admin/alumno/create") + public String showCreateForm(Model model) { + Alumno alumno = new Alumno(); + List ciclos = cicloService.findAll(); + List skills = skillService.findAll(); + model.addAttribute("skills", skills); + model.addAttribute("alumno", alumno); + model.addAttribute("ciclos", ciclos); + return "admin/alumno/create"; + } + + @PostMapping("/alumno/save") + public ResponseEntity saveAlumno(Alumno alumno, @RequestParam("ciclo") Long ciclo, @RequestParam("skills") List skills){ + try{ + Ciclo cicloEntity = cicloService.findById(ciclo); + Set skillEntities = skillService.findAllByIds(skills); + alumno.setCiclo(cicloEntity); + alumno.setSkills(skillEntities); + Alumno testIfExist = alumnoService.exists(alumno); + if(testIfExist != null){ + return new ResponseEntity<>("El alumno ya existe", HttpStatus.BAD_REQUEST); + } + alumnoService.save(alumno); + return new ResponseEntity<>("El alumno fue guardado con exito", HttpStatus.OK); + }catch (Exception e) { + return new ResponseEntity<>(e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR); + } + } + + @GetMapping("/admin/alumno/update/{id}") + public String showUpdateForm(Model model, @PathVariable Long id) { + Alumno alumno = alumnoService.findById(id); + List ciclos = cicloService.findAll(); + List skills = skillService.findAll(); + model.addAttribute("skills", skills); + model.addAttribute("alumno", alumno); + model.addAttribute("ciclos", ciclos); + return "admin/alumno/update"; + } + + @PostMapping("/alumno/update") + public ResponseEntity updateAlumno(Alumno alumno, @RequestParam("ciclo") Long ciclo, @RequestParam("skills") List skills){ + try{ + Ciclo cicloEntity = cicloService.findById(ciclo); + Set skillEntities = skillService.findAllByIds(skills); + alumno.setCiclo(cicloEntity); + alumno.setSkills(skillEntities); + alumnoService.save(alumno); + return new ResponseEntity<>("El alumno fue actualizado con exito", HttpStatus.OK); + }catch (Exception e) { + return new ResponseEntity<>(e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR); + } + } + + @GetMapping("/alumno/delete/{id}") + public ResponseEntity deleteAlumno(@PathVariable Long id){ + try{ + alumnoService.deleteById(id); + return new ResponseEntity<>("El alumno ha sido eliminado", HttpStatus.OK); + }catch (Exception e){ + return new ResponseEntity<>(e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/example/proyectofinal/controllers/modelControllers/CicloController.java b/src/main/java/com/example/proyectofinal/controllers/modelControllers/CicloController.java new file mode 100644 index 0000000..8fe3321 --- /dev/null +++ b/src/main/java/com/example/proyectofinal/controllers/modelControllers/CicloController.java @@ -0,0 +1,87 @@ +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 org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +@Controller +@RequestMapping() +public class CicloController { + + @Autowired + private CicloService cicloService; + + @Autowired + private FamiliaService familiaService; + + @GetMapping("/admin/ciclo/create") + public String showCreateForm(Model model) { + Ciclo ciclo = new Ciclo(); + List familias = familiaService.findAll(); + Familia familia = new Familia(); + model.addAttribute("ciclo", ciclo); + model.addAttribute("familias", familias); + model.addAttribute("familia", familia); + return "admin/ciclo/create"; + } + + + @PostMapping("/ciclo/save") + public ResponseEntity saveCiclo(Ciclo ciclo, @RequestParam("familia") Long familiaId){ + try{ + Familia familia = familiaService.findById(familiaId); + ciclo.setFamilia(familia); + if(cicloService.exists(ciclo) != null){ + return new ResponseEntity<>("Este ciclo ya existe en la base de datos", HttpStatus.BAD_REQUEST); + }else{ + cicloService.save(ciclo); + return new ResponseEntity<>("El ciclo fue guardado con exito", HttpStatus.OK); + } + }catch (Exception e) { + e.printStackTrace(); + return new ResponseEntity<>(e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR); + } + } + + @GetMapping("/admin/ciclo/update/{id}") + public String showUpdateForm(Model model, @PathVariable Long id) { + Ciclo ciclo = cicloService.findById(id); + List familias = familiaService.findAll(); + Familia familia = new Familia(); + model.addAttribute("ciclo", ciclo); + model.addAttribute("familias", familias); + model.addAttribute("familia", familia); + return "admin/ciclo/update"; + } + + @PostMapping("/ciclo/update") + public ResponseEntity updateCiclo(Ciclo ciclo, @RequestParam("familia.id") Long familiaId){ + try{ + Familia familia = familiaService.findById(familiaId); + ciclo.setFamilia(familia); + cicloService.save(ciclo); + return new ResponseEntity<>("Los datos del ciclo fue renovados con exito", HttpStatus.OK); + }catch (Exception e) { + return new ResponseEntity<>(e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR); + } + } + + @GetMapping("/ciclo/delete/{id}") + public ResponseEntity deleteCiclo(@PathVariable Long id){ + try{ + cicloService.deleteById(id); + return new ResponseEntity<>("El ciclo ha sido eliminado", HttpStatus.OK); + }catch (Exception e){ + return new ResponseEntity<>(e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR); + } + } +} 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 4927540..8ef56a7 100644 --- a/src/main/java/com/example/proyectofinal/controllers/modelControllers/FamiliaController.java +++ b/src/main/java/com/example/proyectofinal/controllers/modelControllers/FamiliaController.java @@ -1,44 +1,65 @@ package com.example.proyectofinal.controllers.modelControllers; -import com.example.proyectofinal.models.empresas.Ciclo; -import com.example.proyectofinal.repositories.empresas.CicloRepository; +import com.example.proyectofinal.models.empresas.Familia; import com.example.proyectofinal.servicios.FamiliaService; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.*; -import java.util.HashSet; -import java.util.Set; - @Controller -@RequestMapping("/familia") +@RequestMapping() public class FamiliaController { - @Autowired - private CicloRepository cicloRepository; - @Autowired private FamiliaService familiaService; - @PostMapping("/crearFamilia") - @ResponseBody - public String editFamilia(@RequestParam String name) { - String result = familiaService.createFamilia(name); - System.out.println(name); - if (result.equals("Familia creada")) { - return "redirect:/editMain"; - }else if (result.equals("Familia ya existe")){ - return result; - } else { - return "redirect:/error"; + @GetMapping("/admin/familia/create") + public String showCreateForm(Model model) { + Familia familia = new Familia(); + model.addAttribute("familia", familia); + return "admin/familia/create"; + } + + @PostMapping("/familia/save") + public ResponseEntity saveFamilia(Familia familia){ + try{ + if(familiaService.findByName(familia.getNombre()) != null){ + System.out.println("Este familia ya existe en la base de datos"); + return new ResponseEntity<>("Este familia ya existe en la base de datos", HttpStatus.BAD_REQUEST); + }else { + familiaService.save(familia); + return new ResponseEntity<>("La familia fue guardado con exito", HttpStatus.OK); + } + }catch (Exception e) { + 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); + model.addAttribute("familia", familia); + return "admin/familia/update"; + } + @PostMapping("/familia/update") + public ResponseEntity updateFamilia(Familia familia){ + try{ + familiaService.save(familia); + return new ResponseEntity<>("La familia ha sido actualizado con exito", HttpStatus.OK); + }catch (Exception e) { + return new ResponseEntity<>(e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR); + } + } - @GetMapping("/{id}") - public String getFamiliaById(@PathVariable Long id, Model model) { - Set cicloSet = new HashSet<>(cicloRepository.findCicloByFamiliaId(id)); - model.addAttribute("ciclos", cicloSet); - return "ciclo"; + @GetMapping("/familia/delete/{id}") + public ResponseEntity deleteFamilia(@PathVariable Long id){ + try{ + familiaService.deleteById(id); + return new ResponseEntity<>("La familia ha sido eliminado", HttpStatus.OK); + }catch (Exception e){ + return new ResponseEntity<>(e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR); + } } } diff --git a/src/main/java/com/example/proyectofinal/controllers/modelControllers/OfertaController.java b/src/main/java/com/example/proyectofinal/controllers/modelControllers/OfertaController.java new file mode 100644 index 0000000..e820754 --- /dev/null +++ b/src/main/java/com/example/proyectofinal/controllers/modelControllers/OfertaController.java @@ -0,0 +1,107 @@ +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 org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +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; + +@Controller +@RequestMapping() +public class OfertaController { + @Autowired + private OfertaService ofertaService; + + @Autowired + private SkillService skillService; + + @Autowired + private SucursalService sucursalService; + + @Autowired + private CicloService cicloService; + + @GetMapping("/admin/oferta/create") + public String showCreateForm(Model model) { + Oferta oferta = new Oferta(); + List ciclos = cicloService.findAll(); + List skills = skillService.findAll(); + List sucursals = sucursalService.findAll(); + model.addAttribute("sucursals", sucursals); + model.addAttribute("skills", skills); + model.addAttribute("oferta", oferta); + model.addAttribute("ciclos", ciclos); + 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{ + Ciclo cicloEntity = cicloService.findById(ciclo); + Sucursal sucursalEntity = sucursalService.findById(sucursal); + Set skillEntities = skillService.findAllByIds(skills); + oferta.setCiclo(cicloEntity); + oferta.setSucursal(sucursalEntity); + oferta.setSkills(skillEntities); + Oferta testIfExist = ofertaService.findByName(oferta.getNombre()); + if(testIfExist != null){ + return new ResponseEntity<>("Esta oferta ya existe en la base de datos", HttpStatus.BAD_REQUEST); + }else { + ofertaService.save(oferta); + return new ResponseEntity<>("La oferta fue guadada con exito", HttpStatus.OK); + } + }catch (Exception e) { + 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); + List ciclos = cicloService.findAll(); + List skills = skillService.findAll(); + List sucursals = sucursalService.findAll(); + model.addAttribute("sucursals", sucursals); + model.addAttribute("skills", skills); + model.addAttribute("oferta", oferta); + model.addAttribute("ciclos", ciclos); + 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"); + try{ + Ciclo cicloEntity = cicloService.findById(ciclo); + Sucursal sucursalEntity = sucursalService.findById(sucursal); + Set skillEntities = skillService.findAllByIds(skills); + oferta.setCiclo(cicloEntity); + oferta.setSucursal(sucursalEntity); + oferta.setSkills(skillEntities); + ofertaService.save(oferta); + return new ResponseEntity<>("La oferta fue guadada con exito", HttpStatus.OK); + }catch (Exception e) { + return new ResponseEntity<>(e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR); + } + } + + @GetMapping("/oferta/delete/{id}") + public ResponseEntity deleteOferta(@PathVariable Long id){ + try{ + ofertaService.deleteById(id); + return new ResponseEntity<>("La oferta ha sido eliminado", HttpStatus.OK); + }catch (Exception e){ + return new ResponseEntity<>(e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR); + } + } + +} diff --git a/src/main/java/com/example/proyectofinal/controllers/modelControllers/SkillController.java b/src/main/java/com/example/proyectofinal/controllers/modelControllers/SkillController.java new file mode 100644 index 0000000..c9db785 --- /dev/null +++ b/src/main/java/com/example/proyectofinal/controllers/modelControllers/SkillController.java @@ -0,0 +1,65 @@ +package com.example.proyectofinal.controllers.modelControllers; + +import com.example.proyectofinal.models.empresas.Skill; +import com.example.proyectofinal.servicios.SkillService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.*; + +@Controller +@RequestMapping() +public class SkillController { + @Autowired + private SkillService skillService; + + @GetMapping("/admin/skill/create") + public String showCreateForm(Model model) { + Skill skill = new Skill(); + model.addAttribute("skill", skill); + return "admin/skill/create"; + } + + @PostMapping("/skill/save") + public ResponseEntity saveSkill(Skill skill){ + try{ + if(skillService.findByName(skill.getNombre()) != null){ + return new ResponseEntity<>("Este skill ya existe en la base de datos", HttpStatus.BAD_REQUEST); + }else { + skillService.save(skill); + return new ResponseEntity<>("El skill fue guardado con exito", HttpStatus.OK); + } + }catch (Exception e) { + return new ResponseEntity<>(e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR); + } + } + + @GetMapping("/admin/skill/update/{id}") + public String showUpdateForm(Model model, @PathVariable Long id) { + Skill skill = skillService.findById(id); + model.addAttribute("skill", skill); + return "admin/skill/update"; + } + + @PostMapping("/skill/update") + public ResponseEntity updateSkill(Skill skill){ + try{ + skillService.save(skill); + return new ResponseEntity<>("El skill fue renovado", HttpStatus.OK); + }catch (Exception e) { + return new ResponseEntity<>(e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR); + } + } + + @GetMapping("/skill/delete/{id}") + public ResponseEntity deleteSkill(@PathVariable Long id){ + try{ + skillService.deleteById(id); + return new ResponseEntity<>("Skill ha sido eliminada", HttpStatus.OK); + }catch (Exception e){ + return new ResponseEntity<>(e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR); + } + } +} \ No newline at end of file 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 8a4fc21..b09ec24 100644 --- a/src/main/java/com/example/proyectofinal/models/empresas/Alumno.java +++ b/src/main/java/com/example/proyectofinal/models/empresas/Alumno.java @@ -1,6 +1,7 @@ package com.example.proyectofinal.models.empresas; import jakarta.persistence.*; +import jdk.jfr.Name; import lombok.*; import org.hibernate.annotations.OnDelete; import org.hibernate.annotations.OnDeleteAction; @@ -34,7 +35,8 @@ public class Alumno { @NonNull @DateTimeFormat(pattern = "yyyy-mm-dd") - private Date fechaNacimiento; + @Name("fecha_nacimiento") + private String fechaNacimiento; @NonNull @Column(length = 45) @@ -79,4 +81,5 @@ public class Alumno { @JoinColumn(name = "fk_ciclo",referencedColumnName = "id") @OnDelete(action = OnDeleteAction.CASCADE) private Ciclo ciclo; + } 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 1f544c8..b1df36e 100644 --- a/src/main/java/com/example/proyectofinal/models/empresas/Oferta.java +++ b/src/main/java/com/example/proyectofinal/models/empresas/Oferta.java @@ -25,6 +25,7 @@ public class Oferta { @Column(length = 70) private String nombre; //TODO see the order of elements + @NonNull @DateTimeFormat(pattern = "yyyy-mm-dd") private String fecha; 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 639544e..644f21f 100644 --- a/src/main/java/com/example/proyectofinal/models/empresas/Skill.java +++ b/src/main/java/com/example/proyectofinal/models/empresas/Skill.java @@ -8,6 +8,7 @@ import lombok.NonNull; import org.hibernate.annotations.OnDelete; import org.hibernate.annotations.OnDeleteAction; +import java.util.Objects; import java.util.Set; @Entity @@ -30,4 +31,16 @@ public class Skill { @ManyToMany(mappedBy = "skills") private Set ofertas; + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + Skill skill = (Skill) o; + return id == skill.id; + } + + @Override + public int hashCode() { + return Objects.hashCode(id); + } } diff --git a/src/main/java/com/example/proyectofinal/repositories/empresas/AlumnoRepository.java b/src/main/java/com/example/proyectofinal/repositories/empresas/AlumnoRepository.java index e050c7c..3368b54 100644 --- a/src/main/java/com/example/proyectofinal/repositories/empresas/AlumnoRepository.java +++ b/src/main/java/com/example/proyectofinal/repositories/empresas/AlumnoRepository.java @@ -3,12 +3,40 @@ package com.example.proyectofinal.repositories.empresas; import com.example.proyectofinal.models.empresas.Alumno; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.jpa.repository.Query; import java.util.ArrayList; +import java.util.List; public interface AlumnoRepository extends JpaRepository { + @Query("Delete from Alumno a where a.ciclo.id = ?1") + void deleteByCiclo(Long id); + + @Query("SELECT a FROM Alumno a WHERE a.ciclo.id = ?1") + List findByCiclo(Long id); + + @Modifying + @Query(value = "DELETE FROM alumno_skill WHERE fk_alumno = ?1", nativeQuery = true) + void deleteSkillByAlumnoId(Long id); + + @Query(value = "Select s.* from skills s " + + "inner join oferta_skill os on s.id = os.fk_skills " + + "where os.fk_oferta =?1", nativeQuery = true) + List findSkillsByAlumnoId(long id); + + + @Query("SELECT a FROM Alumno a JOIN a.skills s WHERE a.nombre LIKE %:query% OR a.apellido " + + "LIKE %:query% OR a.apellido2 LIKE %:query% OR a.correo LIKE %:query% OR a.correo2 " + + "LIKE %:query% OR a.nacionalidad LIKE %:query% OR a.genero LIKE %:query% OR a.dni " + + "LIKE %:query% OR a.nia LIKE %:query% OR s.nombre LIKE %:query%") + List search(String query); + + + @Query("SELECT a FROM Alumno a WHERE a.nia = ?1") + Alumno findByNia(String nia); + // @Query(value = "SELECT * FROM alumnos u WHERE MATCH(u.nombre, u.keywords, " + // "u.apellido, u.apellido2, u.correo, u.correo2, u.nacionalidad, u.genero, u.dni, u.nia ) AGAINST(?1 IN BOOLEAN MODE)", nativeQuery = true) // public ArrayList getAlumnoByKeywordsOrName(String keyword1); diff --git a/src/main/java/com/example/proyectofinal/repositories/empresas/CicloRepository.java b/src/main/java/com/example/proyectofinal/repositories/empresas/CicloRepository.java index 251a075..ae2df96 100644 --- a/src/main/java/com/example/proyectofinal/repositories/empresas/CicloRepository.java +++ b/src/main/java/com/example/proyectofinal/repositories/empresas/CicloRepository.java @@ -6,12 +6,16 @@ import org.springframework.data.jpa.repository.Query; import java.lang.reflect.Array; import java.util.ArrayList; +import java.util.List; public interface CicloRepository extends JpaRepository { // @Query(value = "SELECT * FROM ciclos u WHERE MATCH(u.nombre, u.familias) AGAINST(?1 IN BOOLEAN MODE)", nativeQuery = true) // public Ciclo getCicloByKeywordsOrName(String keyword1); - @Query(value = "Select * from ciclos c where c.familia_id = ?1", nativeQuery = true) - public ArrayList findCicloByFamiliaId(Long id); + @Query("SELECT c FROM Ciclo c WHERE c.familia.id = :id") + List findCicloByFamiliaId(Long id); + + @Query("SELECT c FROM Ciclo c WHERE c.nombre LIKE %?1% or c.familia.nombre LIKE %?1% or c.codigo LIKE %?1%") + List search(String query); } diff --git a/src/main/java/com/example/proyectofinal/repositories/empresas/ContactoRepository.java b/src/main/java/com/example/proyectofinal/repositories/empresas/ContactoRepository.java index 9655d75..8365960 100644 --- a/src/main/java/com/example/proyectofinal/repositories/empresas/ContactoRepository.java +++ b/src/main/java/com/example/proyectofinal/repositories/empresas/ContactoRepository.java @@ -25,7 +25,7 @@ public interface ContactoRepository extends JpaRepository { @Query(value="SELECT * FROM contactos c WHERE nombre= ?1 and apellido = ?2 and apellido2 =?3", nativeQuery = true) Contacto existsByNombreApe(String nombre, String apellido, String apellido2); - @Query("SELECT c FROM Contacto c WHERE c.nombre LIKE %:query% OR c.apellido LIKE %:query% OR c.apellido2 LIKE %:query% OR c.correo LIKE %:query% OR c.telefono LIKE %:query% OR c.empresa.nombre LIKE %:query% OR CAST(c.id AS string) = :query") + @Query("SELECT c FROM Contacto c WHERE c.nombre LIKE %:query% OR c.apellido LIKE %:query% OR c.apellido2 LIKE %:query% OR c.correo LIKE %:query% OR c.telefono LIKE %:query% OR c.empresa.nombre LIKE %:query%") List search(@Param("query") String query); @Modifying diff --git a/src/main/java/com/example/proyectofinal/repositories/empresas/EmpressaRepository.java b/src/main/java/com/example/proyectofinal/repositories/empresas/EmpressaRepository.java index 62cda80..f77e949 100644 --- a/src/main/java/com/example/proyectofinal/repositories/empresas/EmpressaRepository.java +++ b/src/main/java/com/example/proyectofinal/repositories/empresas/EmpressaRepository.java @@ -24,7 +24,7 @@ public interface EmpressaRepository extends JpaRepository, JpaSpe @Query(value = "SELECT * FROM empresas order by id Asc", nativeQuery = true) List findAllAsc(); - @Query("SELECT e FROM Empresa e WHERE e.nombre LIKE %:query% OR e.cif LIKE %:query% OR e.correo LIKE %:query% OR e.telefono LIKE %:query% OR e.keywords LIKE %:query% OR e.sector.nombre LIKE %:query% OR CAST(e.id AS string) = :query") + @Query("SELECT e FROM Empresa e WHERE e.nombre LIKE %:query% OR e.cif LIKE %:query% OR e.correo LIKE %:query% OR e.telefono LIKE %:query% OR e.keywords LIKE %:query% OR e.sector.nombre LIKE %:query%") List search(@Param("query") String query); @Query("SELECT e FROM Empresa e WHERE e.cif = :cif") diff --git a/src/main/java/com/example/proyectofinal/repositories/empresas/FamiliaRepository.java b/src/main/java/com/example/proyectofinal/repositories/empresas/FamiliaRepository.java index f4991e5..5af32f4 100644 --- a/src/main/java/com/example/proyectofinal/repositories/empresas/FamiliaRepository.java +++ b/src/main/java/com/example/proyectofinal/repositories/empresas/FamiliaRepository.java @@ -1,9 +1,12 @@ package com.example.proyectofinal.repositories.empresas; import com.example.proyectofinal.models.empresas.Familia; +import com.example.proyectofinal.models.empresas.Sector; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; +import java.util.List; import java.util.Optional; public interface FamiliaRepository extends JpaRepository { @@ -12,4 +15,7 @@ public interface FamiliaRepository extends JpaRepository { @Query(value = "SELECT * FROM familias u WHERE MATCH(u.nombre) AGAINST(?1 IN BOOLEAN MODE)", nativeQuery = true) Optional findByName(String name); + + @Query("SELECT f FROM Familia f WHERE f.nombre LIKE %:query%") + List search(@Param("query") String query); } diff --git a/src/main/java/com/example/proyectofinal/repositories/empresas/OfertaRepository.java b/src/main/java/com/example/proyectofinal/repositories/empresas/OfertaRepository.java index 89136d9..effffc6 100644 --- a/src/main/java/com/example/proyectofinal/repositories/empresas/OfertaRepository.java +++ b/src/main/java/com/example/proyectofinal/repositories/empresas/OfertaRepository.java @@ -4,8 +4,8 @@ import com.example.proyectofinal.models.empresas.Oferta; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; -import java.util.ArrayList; import java.util.List; public interface OfertaRepository extends JpaRepository { @@ -16,12 +16,29 @@ public interface OfertaRepository extends JpaRepository { @Query(value="Select * from ofertas where fk_sucursal = ?1", nativeQuery = true) public List findBySucursalId(Long id); - @Query(value="Select * from ofertas where fk_ciclo = ?1", nativeQuery = true) - public List findBySCiclolId(Long id); + @Query("Select o from Oferta o where o.ciclo.id = ?1") + List findByCiclold(Long id); @Modifying - @Query(value = "DELETE FROM oferta_skill WHERE fk_oferta = ?1", nativeQuery = true) + @Query(value = "DELETE FROM oferta_skill " + + "WHERE fk_oferta = ?1", nativeQuery = true) void deleteSkillsByOfertaId(Long id); + @Query(value = "SELECT s.* FROM skills s INNER JOIN " + + "oferta_skill os ON s.id = os.fk_skills " + + "WHERE os.fk_oferta = ?1", nativeQuery = true) + public List findSkillsByOfertaId(Long id); + + @Query("SELECT o FROM Oferta o JOIN o.skills s " + + "WHERE o.nombre LIKE %:query% OR o.descripcion " + + "LIKE %:query% OR o.fecha LIKE %:query% " + + "OR o.sucursal.nombre LIKE %:query% " + + "OR o.ciclo.nombre LIKE %:query% OR s.nombre " + + "LIKE %:query%") + List search(@Param("query") String query); + + @Query("SELECT o FROM Oferta o WHERE o.nombre = :name") + Oferta findByNombre(String name); + } diff --git a/src/main/java/com/example/proyectofinal/repositories/empresas/SectorRepository.java b/src/main/java/com/example/proyectofinal/repositories/empresas/SectorRepository.java index 4c40798..baf9875 100644 --- a/src/main/java/com/example/proyectofinal/repositories/empresas/SectorRepository.java +++ b/src/main/java/com/example/proyectofinal/repositories/empresas/SectorRepository.java @@ -13,7 +13,7 @@ public interface SectorRepository extends JpaRepository { Sector findByNombre(String nombre); - @Query("SELECT s FROM Sector s WHERE s.nombre LIKE %:query% OR CAST(s.id AS string) LIKE %:query%") + @Query("SELECT s FROM Sector s WHERE s.nombre LIKE %:query% ") List search(@Param("query") String query); // @Query(value = "SELECT * FROM sectores u WHERE MATCH(u.nombre) AGAINST(?1 IN BOOLEAN MODE)", nativeQuery = true) diff --git a/src/main/java/com/example/proyectofinal/repositories/empresas/SkillRepository.java b/src/main/java/com/example/proyectofinal/repositories/empresas/SkillRepository.java index 4ee9942..486aa43 100644 --- a/src/main/java/com/example/proyectofinal/repositories/empresas/SkillRepository.java +++ b/src/main/java/com/example/proyectofinal/repositories/empresas/SkillRepository.java @@ -2,15 +2,24 @@ package com.example.proyectofinal.repositories.empresas; import com.example.proyectofinal.models.empresas.Skill; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.jpa.repository.Query; import java.util.ArrayList; +import java.util.List; public interface SkillRepository extends JpaRepository { -// @Query(value = "SELECT * FROM skills u WHERE MATCH(u.nombre) AGAINST(?1 IN BOOLEAN MODE)", nativeQuery = true) -// public ArrayList getSkillFullTextSeach(String word); + @Query("SELECT s FROM Skill s WHERE s.nombre LIKE %:query%") + List search(String query); + @Modifying + @Query(value = "DELETE FROM oferta_skill WHERE fk_skills = ?1", nativeQuery = true) + void deleteSkillOferta(Long id); + + @Modifying + @Query(value = "DELETE FROM alumno_skill WHERE fk_skills = ?1", nativeQuery = true) + void deleteSkillAlumno(Long id); } diff --git a/src/main/java/com/example/proyectofinal/servicios/AlumnoService.java b/src/main/java/com/example/proyectofinal/servicios/AlumnoService.java new file mode 100644 index 0000000..7bc3cb4 --- /dev/null +++ b/src/main/java/com/example/proyectofinal/servicios/AlumnoService.java @@ -0,0 +1,80 @@ +package com.example.proyectofinal.servicios; + +import com.example.proyectofinal.models.empresas.Alumno; +import com.example.proyectofinal.repositories.empresas.AlumnoRepository; +import com.example.proyectofinal.servicios.implemetations.IAlumno; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; +import org.springframework.data.domain.Sort; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +@Service +public class AlumnoService implements IAlumno{ + @Autowired + private AlumnoRepository alumnoRepository; + @Override + public List findAll() { + return alumnoRepository.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(); + Pageable pageable = PageRequest.of(pageNum - 1,pageSize,sort); + return this.alumnoRepository.findAll(pageable); + } + @Override + public Alumno findById(Long id) { + return alumnoRepository.findById(id).orElse(null); + } + + @Override + public Alumno findByName(String name) { + return null; + } + + @Override + public Alumno save(Alumno alumno) { + return alumnoRepository.save(alumno); + } + + @Transactional + @Override + public void deleteById(Long id) { + Alumno alumno = alumnoRepository.findById(id).orElse(null); + if(alumno != null){ + alumnoRepository.deleteSkillByAlumnoId(alumno.getId()); + alumnoRepository.deleteById(id); + } + } + + @Override + public List search(String query) { + return alumnoRepository.search(query); + } + + @Override + public Alumno exists(Alumno alumno) { + return alumnoRepository.findByNia(alumno.getNia()); + } + @Transactional + @Override + public void deleteByCiclo(Long id) { + List alumnos = alumnoRepository.findByCiclo(id); + if(!alumnos.isEmpty()){ + for(Alumno alumno : alumnos){ + System.out.println("Deleting alumno with id: " + alumno.getId()); + alumnoRepository.deleteSkillByAlumnoId(alumno.getId()); // delete associated skills + alumnoRepository.deleteById(alumno.getId()); // then delete the alumno + } + } + } + +} diff --git a/src/main/java/com/example/proyectofinal/servicios/CicloService.java b/src/main/java/com/example/proyectofinal/servicios/CicloService.java new file mode 100644 index 0000000..e6b84f6 --- /dev/null +++ b/src/main/java/com/example/proyectofinal/servicios/CicloService.java @@ -0,0 +1,96 @@ +package com.example.proyectofinal.servicios; + +import com.example.proyectofinal.models.empresas.Ciclo; +import com.example.proyectofinal.models.empresas.Familia; +import com.example.proyectofinal.repositories.empresas.CicloRepository; +import com.example.proyectofinal.servicios.implemetations.ICiclos; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; +import org.springframework.data.domain.Sort; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +@Service +public class CicloService implements ICiclos { + @Autowired + private CicloRepository cicloRepository; + @Autowired + private AlumnoService alumnoService; + @Autowired + private OfertaService ofertaService; + + @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(); + Pageable pageable = PageRequest.of(pageNum - 1,pageSize,sort); + return this.cicloRepository.findAll(pageable); + } + + @Override + public List findAll() { + return cicloRepository.findAll(); + } + + @Override + public Ciclo findById(Long id) { + return cicloRepository.findById(id).orElse(null); + } + + @Override + public Ciclo findByName(String name) { + return null; + } + + @Override + public Ciclo save(Ciclo ciclo) { + return cicloRepository.save(ciclo); + } + @Transactional + @Override + public void deleteById(Long id) { + Ciclo ciclo = cicloRepository.findById(id).orElse(null); + if(ciclo != null){ + alumnoService.deleteByCiclo(ciclo.getId()); + ofertaService.deleteByCicloId(ciclo.getId()); + cicloRepository.deleteById(id); + } + } + + @Override + public List search(String query) { + return cicloRepository.search(query); + } + + @Override + public void deleteByFamilia(Familia familia) { + + } + + @Override + public Ciclo exists(Ciclo ciclo) { + return null; + } + + + @Transactional + @Override + public void deleteByFamiliaId(Long id) { + List ciclos = cicloRepository.findCicloByFamiliaId(id); + if(ciclos != null){ + for (Ciclo ciclo : ciclos) { + System.out.println("Deleting ciclo with id: " + ciclo.getId()); + alumnoService.deleteByCiclo(ciclo.getId()); + ofertaService.deleteByCicloId(ciclo.getId()); + cicloRepository.deleteById(ciclo.getId()); + } + } + } + + +} diff --git a/src/main/java/com/example/proyectofinal/servicios/ContactosService.java b/src/main/java/com/example/proyectofinal/servicios/ContactosService.java index b6bf0ae..147fa6f 100644 --- a/src/main/java/com/example/proyectofinal/servicios/ContactosService.java +++ b/src/main/java/com/example/proyectofinal/servicios/ContactosService.java @@ -27,12 +27,10 @@ public class ContactosService implements IContactos { } @Override - public Page finadAllpaginated(int pageNum, int pageSize, String sortField, String sortDir) { - Sort sort = sortDir.equalsIgnoreCase(Sort.Direction.ASC.name()) - ? Sort.by(sortField).ascending() : - Sort.by(sortField).descending(); - Pageable pageable = PageRequest.of(pageNum - 1,pageSize,sort); - return this.contactoRepository.findAll(pageable); + 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); + return this.contactoRepository.findAll(pageRequest); } @Override @@ -92,4 +90,6 @@ public class ContactosService implements IContactos { public Contacto exists(Contacto contacto) { return contactoRepository.existsByNombreApe(contacto.getNombre(),contacto.getApellido(),contacto.getApellido2()); } + + } diff --git a/src/main/java/com/example/proyectofinal/servicios/EmpresaService.java b/src/main/java/com/example/proyectofinal/servicios/EmpresaService.java index 1990393..3d05ba1 100644 --- a/src/main/java/com/example/proyectofinal/servicios/EmpresaService.java +++ b/src/main/java/com/example/proyectofinal/servicios/EmpresaService.java @@ -5,24 +5,20 @@ import com.example.proyectofinal.models.empresas.Oferta; import com.example.proyectofinal.models.empresas.Sucursal; import com.example.proyectofinal.repositories.empresas.EmpressaRepository; import com.example.proyectofinal.repositories.empresas.OfertaRepository; -import com.example.proyectofinal.repositories.empresas.SkillRepository; import com.example.proyectofinal.servicios.implemetations.IEmpresa; import org.springframework.transaction.annotation.Transactional; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; -import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; import org.springframework.stereotype.Service; - - import java.util.List; @Service public class EmpresaService implements IEmpresa { @Autowired - private EmpressaRepository empressaRepository; + private EmpressaRepository empresaRepository; @Autowired private ContactosService contactosService; @Autowired @@ -35,32 +31,31 @@ public class EmpresaService implements IEmpresa { @Override public List findAll() { - return empressaRepository.findAll(); + return empresaRepository.findAll(); } @Override - public Page finadAllpaginated(int pageNum, int pageSize, String sortField, String sortDir) { - Sort sort = sortDir.equalsIgnoreCase(Sort.Direction.ASC.name()) - ? Sort.by(sortField).ascending() : - Sort.by(sortField).descending(); - Pageable pageable = PageRequest.of(pageNum - 1,pageSize,sort); - return this.empressaRepository.findAll(pageable); + 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 = empresaRepository.findAll(pageRequest); + return result; } @Override public Empresa findById(Long id) { - return empressaRepository.findById(id).orElse(null); + return empresaRepository.findById(id).orElse(null); } @Override public Empresa save(Empresa empresa) { - return empressaRepository.save(empresa); + return empresaRepository.save(empresa); } @Transactional @Override public void deleteById(Long id) { - Empresa empresa = empressaRepository.findById(id).orElse(null); + Empresa empresa = empresaRepository.findById(id).orElse(null); if (empresa != null) { contactosService.deleteByEmpresa(empresa); List sucursales = sucursalService.findByEmpresa(empresa); @@ -72,25 +67,26 @@ public class EmpresaService implements IEmpresa { } sucursalService.deleteById(sucursal.getId()); } - empressaRepository.deleteById(id); + empresaRepository.deleteById(id); } } @Override public List search(String query ) { - return empressaRepository.search(query); + return empresaRepository.search(query); } @Override public Empresa exists(Empresa empresa) { String cif = empresa.getCif(); - return empressaRepository.existsCif(cif); + return empresaRepository.existsCif(cif); } @Override public List findBySector(Long id) { - return empressaRepository.findBySector(id); + return empresaRepository.findBySector(id); } + } diff --git a/src/main/java/com/example/proyectofinal/servicios/FamiliaService.java b/src/main/java/com/example/proyectofinal/servicios/FamiliaService.java index e2ebf4c..40cf1dc 100644 --- a/src/main/java/com/example/proyectofinal/servicios/FamiliaService.java +++ b/src/main/java/com/example/proyectofinal/servicios/FamiliaService.java @@ -1,34 +1,65 @@ package com.example.proyectofinal.servicios; +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; +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; @Service -public class FamiliaService { +public class FamiliaService implements IFamilia { @Autowired private FamiliaRepository familiaRepository; + @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; + } + + @Override + public Familia findById(Long id) { + return familiaRepository.findById(id).orElse(null); + } + + @Override + public Familia findByName(String name) { + return null; + } + + @Override + public Familia save(Familia familia) { + return familiaRepository.save(familia); + } - public String createFamilia(String name) { - if (familiaRepository.findByName(name).isPresent()) { - return "Familia ya existe"; - } else { - Familia newFamilia = new Familia(); - newFamilia.setNombre(name); - familiaRepository.save(newFamilia); - return "Familia creada"; - } + @Override + public void deleteById(Long id) { + System.out.println("Deleting familia with id: " + id); + cicloService.deleteByFamiliaId(id); + familiaRepository.deleteById(id); } - public String updateFamilia(Long id, String name) { - if (familiaRepository.findById(id).isPresent()) { - Familia familia = familiaRepository.findById(id).get(); - familia.setNombre(name); - familiaRepository.save(familia); - return "Familia actualizada"; - } else { - return "Familia no encontrada"; - } + @Override + public List search(String query) { + return familiaRepository.search(query); } } diff --git a/src/main/java/com/example/proyectofinal/servicios/OfertaService.java b/src/main/java/com/example/proyectofinal/servicios/OfertaService.java index 9e39061..969574d 100644 --- a/src/main/java/com/example/proyectofinal/servicios/OfertaService.java +++ b/src/main/java/com/example/proyectofinal/servicios/OfertaService.java @@ -1,17 +1,28 @@ package com.example.proyectofinal.servicios; import com.example.proyectofinal.models.empresas.Oferta; +import com.example.proyectofinal.models.empresas.Skill; import com.example.proyectofinal.models.empresas.Sucursal; import com.example.proyectofinal.repositories.empresas.OfertaRepository; import com.example.proyectofinal.servicios.implemetations.IOferta; +import jakarta.persistence.EntityManager; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; +import org.springframework.data.domain.Sort; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import java.util.HashSet; import java.util.List; +import java.util.Set; @Service public class OfertaService implements IOferta { + + @Autowired + private EntityManager entityManager; @Autowired private OfertaRepository ofertaRepository; @@ -21,8 +32,27 @@ public class OfertaService implements IOferta { } @Override - public Page finadAllpaginated(int pageNum, int pageSize, String sortField, String sortDir) { - return null; + 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(); + Pageable pageable = PageRequest.of(pageNum - 1, pageSize, sort); + Page page = this.ofertaRepository.findAll(pageable); + + List ofertas = page.getContent(); + for (Oferta oferta : ofertas) { + List skillsData = ofertaRepository.findSkillsByOfertaId(oferta.getId()); + Set skills = new HashSet<>(); + for (Object[] skillData : skillsData) { + Skill skill = new Skill(); + skill.setId((Long) skillData[0]); + skill.setNombre((String) skillData[1]); + skills.add(skill); + } + oferta.setSkills(skills); + } + + return page; } @Override @@ -32,7 +62,7 @@ public class OfertaService implements IOferta { @Override public Oferta findByName(String name) { - return null; + return ofertaRepository.findByNombre(name); } @Override @@ -40,18 +70,36 @@ public class OfertaService implements IOferta { return ofertaRepository.save(oferta); } + @Transactional @Override public void deleteById(Long id) { - ofertaRepository.deleteById(id); + Oferta oferta = findById(id); + if (oferta != null) { + ofertaRepository.deleteSkillsByOfertaId(id); + ofertaRepository.deleteById(id); + } } @Override public List search(String query) { - return List.of(); + return ofertaRepository.search(query); } @Override public List findBySucursal(Sucursal sucursal) { return ofertaRepository.findBySucursalId(sucursal.getId()); } + + @Transactional + @Override + public void deleteByCicloId(Long id) { + List ofertas = ofertaRepository.findByCiclold(id); + if (ofertas != null) { + for(Oferta oferta : ofertas){ + System.out.println("Deleting oferta with id: " + oferta.getId()); + ofertaRepository.deleteSkillsByOfertaId(oferta.getId()); + ofertaRepository.deleteById(oferta.getId()); + } + } + } } diff --git a/src/main/java/com/example/proyectofinal/servicios/SectorService.java b/src/main/java/com/example/proyectofinal/servicios/SectorService.java index ce10a56..f0bba12 100644 --- a/src/main/java/com/example/proyectofinal/servicios/SectorService.java +++ b/src/main/java/com/example/proyectofinal/servicios/SectorService.java @@ -38,7 +38,7 @@ public class SectorService implements ISector { } @Override - public Page finadAllpaginated(int pageNum, int pageSize, String sortField, String sortDir) { + 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(); diff --git a/src/main/java/com/example/proyectofinal/servicios/SkillService.java b/src/main/java/com/example/proyectofinal/servicios/SkillService.java index ada6a20..27b0485 100644 --- a/src/main/java/com/example/proyectofinal/servicios/SkillService.java +++ b/src/main/java/com/example/proyectofinal/servicios/SkillService.java @@ -5,9 +5,15 @@ import com.example.proyectofinal.repositories.empresas.SkillRepository; import com.example.proyectofinal.servicios.implemetations.ISkill; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; +import org.springframework.data.domain.Sort; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import java.util.HashSet; import java.util.List; +import java.util.Set; @Service public class SkillService implements ISkill { @@ -20,8 +26,13 @@ public class SkillService implements ISkill { } @Override - public Page finadAllpaginated(int pageNum, int pageSize, String sortField, String sortDir) { - return null; + 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(); + Pageable pageable = PageRequest.of(pageNum - 1,pageSize,sort); + //System.out.println("TEST SKILL " +skillRepository.findAll(pageable)); + return this.skillRepository.findAll(pageable); } @Override @@ -39,13 +50,23 @@ public class SkillService implements ISkill { return skillRepository.save(skill); } + @Transactional @Override public void deleteById(Long id) { + skillRepository.deleteSkillOferta(id); + skillRepository.deleteSkillAlumno(id); skillRepository.deleteById(id); } @Override public List search(String query) { - return List.of(); + return skillRepository.search(query); + } + + @Override + public Set findAllByIds(List skills) { + return new HashSet<>(skillRepository.findAllById(skills)); } + + } diff --git a/src/main/java/com/example/proyectofinal/servicios/SucursalService.java b/src/main/java/com/example/proyectofinal/servicios/SucursalService.java index b9d0273..fb55bf3 100644 --- a/src/main/java/com/example/proyectofinal/servicios/SucursalService.java +++ b/src/main/java/com/example/proyectofinal/servicios/SucursalService.java @@ -29,11 +29,10 @@ public class SucursalService implements ISucursal { @Override public List findAll() { - return List.of(); + return sucursalRepository.findAll(); } - @Override - public Page finadAllpaginated(int pageNum, int pageSize, String sortField, String sortDir) { + 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(); @@ -61,7 +60,6 @@ public class SucursalService implements ISucursal { Sucursal sucursal = findById(id); List ofertas = ofertaService.findBySucursal(sucursal); for (Oferta oferta : ofertas) { - ofertaRepository.deleteSkillsByOfertaId(oferta.getId()); ofertaService.deleteById(oferta.getId()); } sucursalRepository.deleteById(id); @@ -82,4 +80,5 @@ public class SucursalService implements ISucursal { return sucursalRepository.findByName(sucursal.getNombre()); } + } diff --git a/src/main/java/com/example/proyectofinal/servicios/implemetations/IAlumno.java b/src/main/java/com/example/proyectofinal/servicios/implemetations/IAlumno.java new file mode 100644 index 0000000..e828375 --- /dev/null +++ b/src/main/java/com/example/proyectofinal/servicios/implemetations/IAlumno.java @@ -0,0 +1,23 @@ +package com.example.proyectofinal.servicios.implemetations; + +import com.example.proyectofinal.models.empresas.Alumno; + +import java.util.List; + +public interface IAlumno extends IPagination { + List findAll(); + + Alumno findById(Long id); + + Alumno findByName(String name); + + Alumno save(Alumno ciclo); + + void deleteById(Long id); + + List search(String query); + + Alumno exists(Alumno alumno); + + void deleteByCiclo(Long id); +} diff --git a/src/main/java/com/example/proyectofinal/servicios/implemetations/ICiclos.java b/src/main/java/com/example/proyectofinal/servicios/implemetations/ICiclos.java new file mode 100644 index 0000000..9be82a3 --- /dev/null +++ b/src/main/java/com/example/proyectofinal/servicios/implemetations/ICiclos.java @@ -0,0 +1,27 @@ +package com.example.proyectofinal.servicios.implemetations; + +import com.example.proyectofinal.models.empresas.Ciclo; +import com.example.proyectofinal.models.empresas.Familia; + +import java.util.List; + +public interface ICiclos extends IPagination { + List findAll(); + + Ciclo findById(Long id); + + Ciclo findByName(String name); + + Ciclo save(Ciclo ciclo); + + void deleteById(Long id); + + List search(String query); + + void deleteByFamilia(Familia familia); + + Ciclo exists(Ciclo ciclo); + + void deleteByFamiliaId(Long id); +} + diff --git a/src/main/java/com/example/proyectofinal/servicios/implemetations/IContactos.java b/src/main/java/com/example/proyectofinal/servicios/implemetations/IContactos.java index 927d843..b79b627 100644 --- a/src/main/java/com/example/proyectofinal/servicios/implemetations/IContactos.java +++ b/src/main/java/com/example/proyectofinal/servicios/implemetations/IContactos.java @@ -2,16 +2,12 @@ package com.example.proyectofinal.servicios.implemetations; import com.example.proyectofinal.models.empresas.Contacto; import com.example.proyectofinal.models.empresas.Empresa; -import com.example.proyectofinal.models.empresas.Sucursal; -import org.springframework.data.domain.Page; import java.util.List; -public interface IContactos { +public interface IContactos extends IPagination { List findAll(); - Page finadAllpaginated(int pageNum, int pageSize, String sortField, String sortDir); - Contacto findById(Long id); Contacto findByName(String name); diff --git a/src/main/java/com/example/proyectofinal/servicios/implemetations/IEmpresa.java b/src/main/java/com/example/proyectofinal/servicios/implemetations/IEmpresa.java index fd06c5c..c8d06d2 100644 --- a/src/main/java/com/example/proyectofinal/servicios/implemetations/IEmpresa.java +++ b/src/main/java/com/example/proyectofinal/servicios/implemetations/IEmpresa.java @@ -1,15 +1,13 @@ package com.example.proyectofinal.servicios.implemetations; import com.example.proyectofinal.models.empresas.Empresa; -import org.springframework.data.domain.Page; import java.util.List; -public interface IEmpresa { +public interface IEmpresa extends IPagination { List findAll(); - Page finadAllpaginated(int pageNum, int pageSize, String sortField, String sortDir); Empresa findById(Long id); diff --git a/src/main/java/com/example/proyectofinal/servicios/implemetations/IFamilia.java b/src/main/java/com/example/proyectofinal/servicios/implemetations/IFamilia.java new file mode 100644 index 0000000..fbdcb7f --- /dev/null +++ b/src/main/java/com/example/proyectofinal/servicios/implemetations/IFamilia.java @@ -0,0 +1,20 @@ +package com.example.proyectofinal.servicios.implemetations; + +import com.example.proyectofinal.models.empresas.Familia; + +import java.util.List; + +public interface IFamilia extends IPagination { + List findAll(); + + Familia findById(Long id); + + Familia findByName(String name); + + Familia save(Familia familia); + + void deleteById(Long id); + + List search(String query); + +} diff --git a/src/main/java/com/example/proyectofinal/servicios/implemetations/IOferta.java b/src/main/java/com/example/proyectofinal/servicios/implemetations/IOferta.java index 6c57a08..960b5fc 100644 --- a/src/main/java/com/example/proyectofinal/servicios/implemetations/IOferta.java +++ b/src/main/java/com/example/proyectofinal/servicios/implemetations/IOferta.java @@ -2,15 +2,12 @@ package com.example.proyectofinal.servicios.implemetations; import com.example.proyectofinal.models.empresas.Oferta; import com.example.proyectofinal.models.empresas.Sucursal; -import org.springframework.data.domain.Page; import java.util.List; -public interface IOferta { +public interface IOferta extends IPagination { List findAll(); - Page finadAllpaginated(int pageNum, int pageSize, String sortField, String sortDir); - Oferta findById(Long id); Oferta findByName(String name); @@ -22,4 +19,6 @@ public interface IOferta { List search(String query); List findBySucursal(Sucursal sucursal); + + void deleteByCicloId(Long id); } diff --git a/src/main/java/com/example/proyectofinal/servicios/implemetations/IPagination.java b/src/main/java/com/example/proyectofinal/servicios/implemetations/IPagination.java new file mode 100644 index 0000000..3d093b8 --- /dev/null +++ b/src/main/java/com/example/proyectofinal/servicios/implemetations/IPagination.java @@ -0,0 +1,8 @@ +package com.example.proyectofinal.servicios.implemetations; + +import org.springframework.data.domain.Page; + +public interface IPagination { + + Page findAllPaginated(int pageNum, int size, String sortField, String sortDir); +} diff --git a/src/main/java/com/example/proyectofinal/servicios/implemetations/ISector.java b/src/main/java/com/example/proyectofinal/servicios/implemetations/ISector.java index 697bcfd..562b200 100644 --- a/src/main/java/com/example/proyectofinal/servicios/implemetations/ISector.java +++ b/src/main/java/com/example/proyectofinal/servicios/implemetations/ISector.java @@ -1,14 +1,12 @@ package com.example.proyectofinal.servicios.implemetations; import com.example.proyectofinal.models.empresas.Sector; -import org.springframework.data.domain.Page; import java.util.List; -public interface ISector { +public interface ISector extends IPagination { List findAll(); - Page finadAllpaginated(int pageNum, int pageSize, String sortField, String sortDir); Sector findById(Long id); diff --git a/src/main/java/com/example/proyectofinal/servicios/implemetations/ISkill.java b/src/main/java/com/example/proyectofinal/servicios/implemetations/ISkill.java index e6d6ed9..df43451 100644 --- a/src/main/java/com/example/proyectofinal/servicios/implemetations/ISkill.java +++ b/src/main/java/com/example/proyectofinal/servicios/implemetations/ISkill.java @@ -4,12 +4,11 @@ import com.example.proyectofinal.models.empresas.Skill; import org.springframework.data.domain.Page; import java.util.List; +import java.util.Set; -public interface ISkill { +public interface ISkill extends IPagination{ List findAll(); - Page finadAllpaginated(int pageNum, int pageSize, String sortField, String sortDir); - Skill findById(Long id); Skill findByName(String name); @@ -19,4 +18,6 @@ public interface ISkill { void deleteById(Long id); List search(String query); + + Set findAllByIds(List skills); } diff --git a/src/main/java/com/example/proyectofinal/servicios/implemetations/ISucursal.java b/src/main/java/com/example/proyectofinal/servicios/implemetations/ISucursal.java index c58b4e1..ee17596 100644 --- a/src/main/java/com/example/proyectofinal/servicios/implemetations/ISucursal.java +++ b/src/main/java/com/example/proyectofinal/servicios/implemetations/ISucursal.java @@ -2,15 +2,12 @@ package com.example.proyectofinal.servicios.implemetations; import com.example.proyectofinal.models.empresas.Empresa; import com.example.proyectofinal.models.empresas.Sucursal; -import org.springframework.data.domain.Page; import java.util.List; -public interface ISucursal { +public interface ISucursal extends IPagination { List findAll(); - Page finadAllpaginated(int pageNum, int pageSize, String sortField, String sortDir); - Sucursal findById(Long id); Sucursal findByName(String name); diff --git a/src/main/resources/static/orderTable.js b/src/main/resources/static/orderTable.js index 69e392b..7bd654e 100644 --- a/src/main/resources/static/orderTable.js +++ b/src/main/resources/static/orderTable.js @@ -1,6 +1,6 @@ $('#entriesCount').on('change', function(){ var entriesCount = $('#entriesCount').val(); - console.log(entriesCount); + console.log('entriesCount:', entriesCount); var url = window.location.href; var newUrl; if (url.includes('size=')) { @@ -8,6 +8,7 @@ $('#entriesCount').on('change', function(){ } else { newUrl = url.includes('?') ? url + '&size=' + entriesCount : url + '?size=' + entriesCount; } + console.log('newUrl:', newUrl); window.location.href = newUrl; }); diff --git a/src/main/resources/static/style.css b/src/main/resources/static/style.css index c1cf085..59f9de7 100644 --- a/src/main/resources/static/style.css +++ b/src/main/resources/static/style.css @@ -135,16 +135,16 @@ html, body { padding:10px; } -#edit-icon, #delete-icon { +.edit-icon, #delete-icon { min-width: 24px; } -#edit-icon { +.edit-icon { color: #ffa600; margin-right: 10px; margin-left: 10px; font-size: 24px; } -#delete-icon { +.delete-icon { color: red; margin-left: 5px; font-size: 24px; @@ -215,5 +215,8 @@ html, body { .modal p{ font-size: 20px; } +.scrollable-table { + overflow-x: auto; +} diff --git a/src/main/resources/templates/admin/alumno/create.html b/src/main/resources/templates/admin/alumno/create.html new file mode 100644 index 0000000..41dafbd --- /dev/null +++ b/src/main/resources/templates/admin/alumno/create.html @@ -0,0 +1,205 @@ + + + + + Creacion: Alumno + + + + + + + + + + +

Añadir Alumno

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

Select Skills

+ +
+ +
+ + +
+
+
+ + + \ No newline at end of file diff --git a/src/main/resources/templates/admin/alumno/update.html b/src/main/resources/templates/admin/alumno/update.html new file mode 100644 index 0000000..cdc103e --- /dev/null +++ b/src/main/resources/templates/admin/alumno/update.html @@ -0,0 +1,203 @@ + + + + + Update: Alumno + + + + + + + + + + +

Editar datos de Alumno

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

Select Skills

+ +
+ +
+ + +
+
+
+ + + + diff --git a/src/main/resources/templates/admin/ciclo/create.html b/src/main/resources/templates/admin/ciclo/create.html new file mode 100644 index 0000000..24a1e2a --- /dev/null +++ b/src/main/resources/templates/admin/ciclo/create.html @@ -0,0 +1,123 @@ + + + + + Creacion: Ciclo + + + + + + + + +

Añadir Ciclo

+ +
+
+
+ +
+ +
+
+ +
+ +
+ +
+
+ +
+ +
+ +
+
+ +
+ + +
+
+
+ + + + diff --git a/src/main/resources/templates/admin/ciclo/update.html b/src/main/resources/templates/admin/ciclo/update.html new file mode 100644 index 0000000..34a8e5d --- /dev/null +++ b/src/main/resources/templates/admin/ciclo/update.html @@ -0,0 +1,121 @@ + + + + + Update: Ciclo + + + + + + + + +

Editar datos de Ciclo

+ +
+ +
+
+ +
+ +
+
+ +
+ +
+ +
+
+ +
+ +
+ +
+
+ +
+ + +
+
+
+ + + + diff --git a/src/main/resources/templates/admin/familia/create.html b/src/main/resources/templates/admin/familia/create.html index 956a09b..fdcadcf 100644 --- a/src/main/resources/templates/admin/familia/create.html +++ b/src/main/resources/templates/admin/familia/create.html @@ -4,8 +4,10 @@ Creacion: Familia + + + - -

CREAR FAMILIA

- - -
-
-
- -
- - - + }); + + + - \ No newline at end of file + diff --git a/src/main/resources/templates/admin/familia/delete.html b/src/main/resources/templates/admin/familia/delete.html deleted file mode 100644 index 566549b..0000000 --- a/src/main/resources/templates/admin/familia/delete.html +++ /dev/null @@ -1,10 +0,0 @@ - - - - - Title - - - - - \ No newline at end of file diff --git a/src/main/resources/templates/admin/familia/edit.html b/src/main/resources/templates/admin/familia/edit.html deleted file mode 100644 index 566549b..0000000 --- a/src/main/resources/templates/admin/familia/edit.html +++ /dev/null @@ -1,10 +0,0 @@ - - - - - Title - - - - - \ No newline at end of file diff --git a/src/main/resources/templates/admin/familia/update.html b/src/main/resources/templates/admin/familia/update.html new file mode 100644 index 0000000..c4c3915 --- /dev/null +++ b/src/main/resources/templates/admin/familia/update.html @@ -0,0 +1,101 @@ + + + + + Update: Familia + + + + + + + + +

Editar datos de Familia

+ +
+ +
+
+ +
+ +
+
+
+ + +
+
+
+ + + + diff --git a/src/main/resources/templates/admin/oferta/create.html b/src/main/resources/templates/admin/oferta/create.html new file mode 100644 index 0000000..1211cd1 --- /dev/null +++ b/src/main/resources/templates/admin/oferta/create.html @@ -0,0 +1,156 @@ + + + + + Creacion: Oferta + + + + + + + + + + +

Añadir Oferta

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

Select Skills

+ +
+ +
+ + +
+
+
+ + + diff --git a/src/main/resources/templates/admin/oferta/update.html b/src/main/resources/templates/admin/oferta/update.html new file mode 100644 index 0000000..aa03616 --- /dev/null +++ b/src/main/resources/templates/admin/oferta/update.html @@ -0,0 +1,152 @@ + + + + + Update: Oferta + + + + + + + + + + +

Editar datos de Oferta

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

Select Skills

+ +
+ +
+ + +
+
+
+ + + diff --git a/src/main/resources/templates/admin/skill/create.html b/src/main/resources/templates/admin/skill/create.html new file mode 100644 index 0000000..f7a4d82 --- /dev/null +++ b/src/main/resources/templates/admin/skill/create.html @@ -0,0 +1,105 @@ + + + + + Creacion: Skill + + + + + + + + +

Añadir Skill

+ +
+
+
+ +
+ +
+
+
+ + +
+
+
+ + + + diff --git a/src/main/resources/templates/admin/skill/update.html b/src/main/resources/templates/admin/skill/update.html new file mode 100644 index 0000000..d2da7a0 --- /dev/null +++ b/src/main/resources/templates/admin/skill/update.html @@ -0,0 +1,107 @@ + + + + + Update: Skill + + + + + + + + +

Editar Skill

+ +
+ +
+ +
+ +
+ +
+
+ +
+ + +
+
+
+ + + + diff --git a/src/main/resources/templates/list/alumnos.html b/src/main/resources/templates/list/alumnos.html index c214f00..73a3790 100644 --- a/src/main/resources/templates/list/alumnos.html +++ b/src/main/resources/templates/list/alumnos.html @@ -3,62 +3,322 @@ + - Title + Lista: Alumnos - - -

Listado de Alumnos

-
- +
+ +

Listado de Alumnos

+ +
+ + + + +
+
- - - - - - - - - - - - - + + + + + + + + + + + + + + - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + +
IdNombreApellido 1Apellido 2Fecha NacimientoGeneroNIADNI/NIECorreo 1Correo 2NacionalidadKeywordsCiclo + + Nombre + + + + Apellido + + + + Apellido2 + + + + Fecha Nacimeinto + + + + Genero + + + + NIA + + + + DNI/NIE/Numero de pasaporte + + + + Correo + + + + Correo2 + + + + Nacionalidad + + + + Keywords + + + + Ciclo + + + Skills +
[[${alumno.id}]][[${alumno.nombre}]][[${alumno.apellido}]][[${alumno.apellido2}]][[${alumno.fechaNacimiento}]][[${alumno.genero}]][[${alumno.nia}]][[${alumno.dni}]][[${alumno.correo}]][[${alumno.correo2}]][[${alumno.nacionalidad}]][[${keyword}]][[${alumno.ciclo.nombre}]]
+ [[${alumno.nombre}]] + + + [[${alumno.apellido}]][[${alumno.apellido2}]][[${alumno.fechaNacimiento}]][[${alumno.genero}]][[${alumno.nia}]][[${alumno.dni}]][[${alumno.correo}]][[${alumno.correo2}]][[${alumno.nacionalidad}]][[${alumno.keywords}]][[${alumno.ciclo.nombre}]] + +
- +
+ +
+ + + + + + var $table = $('#table'); + var $modalDelete = $('#modalDelete'); + var $myInput = $('#myInput'); + var $createIcon = $('#create-icon'); + var isSearchBarUsed = false; + + $table.on('click', '.edit-icon', function(event) { + console.log("Edit icon clicked"); + handleEdit(event); + }); + $table.on('click', '.delete-icon', function(event) { + console.log("Delete icon clicked"); + handleDelete(event); + }); + + function handleEdit(event) { + console.log("handleEdit function called"); + const row = event.target.closest('tr'); + const rowId = row.dataset.id; + console.log("Row ID: " + rowId); + window.location = "/admin/alumno/update/" + rowId; + } + + function handleDelete(event) { + 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"); + var closeSpan = document.getElementsByClassName("close")[0]; + var deleteSpan = document.getElementsByClassName("delete")[0]; + modal.style.display = "block"; + document.body.style.pointerEvents = 'none'; + modal.style.pointerEvents = 'auto'; + + closeSpan.onclick = function() { + modal.style.display = "none"; + document.body.style.pointerEvents = 'auto'; + } + + deleteSpan.onclick = function() { + $.ajax({ + url: '/alumno/delete/' + rowId, + type: 'GET', + success: function(response) { + if (response === "El alumno ha sido eliminado") { + alert("Alumno borrado con exito"); + window.location.reload(); + } else { + alert("Error al borrar alumno"); + } + } + }); + } + } + + $myInput.on('input', function() { + var query = document.querySelector('#myInput').value; + var paginationControls = document.querySelector('#paginationControls'); + var entriesCountDropdown = document.querySelector('#entriesCount'); + + if (query == '') { + isSearchBarUsed = false; + paginationControls.style.display = ''; + entriesCountDropdown.style.display = ''; + table.style.pointerEvents = ''; + location.reload(); + } else { + isSearchBarUsed = true; + paginationControls.style.display = 'none'; + entriesCountDropdown.style.display = 'none'; + table.style.pointerEvents = 'none'; + + fetch('/buscador/alumnos/search?query=' + query) + .then(response => response.json()) + .then(data => { + var tableBody = document.querySelector('#table tbody'); + tableBody.innerHTML = ''; + data.forEach(alumno => { + var row = document.createElement('tr'); + row.dataset.id = alumno.id; + row.innerHTML = ` + + ${alumno.nombre} + + + + ${alumno.apellido} + ${alumno.apellido2} + ${alumno.fechaNacimiento} + ${alumno.genero} + ${alumno.nia} + ${alumno.dni} + ${alumno.correo} + ${alumno.correo2} + ${alumno.nacionalidad} + ${alumno.keywords} + ${alumno.ciclo.nombre} + + ${alumno.skills.map(skill => skill.nombre).join(', ')} + + `; + tableBody.appendChild(row); + }); + + document.querySelectorAll('.edit-icon').forEach(function(icon) { + icon.removeEventListener('click', handleEdit); + icon.addEventListener('click', handleEdit); + 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"); + }); + + table.style.pointerEvents = 'auto'; + }); + } + }); + + document.querySelector('#table').addEventListener('click', function(event) { + if (event.target.matches('.edit-icon')) { + handleEdit(event); + } else if (event.target.matches('.delete-icon')) { + handleDelete(event); + } + }); + + // Create a new observer + const observer = new MutationObserver(function() { + // Attach the event listeners to the edit and delete icons + document.querySelectorAll('.edit-icon').forEach(function(icon) { + icon.addEventListener('click', handleEdit); + }); + document.querySelectorAll('.delete-icon').forEach(function(icon) { + icon.addEventListener('click', handleDelete); + }); + }); + + // 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"; + }); + + var tableHeaders = document.querySelectorAll('.table-header'); + tableHeaders.forEach(function(header) { + header.addEventListener('click', function(event) { + // If the search bar is currently being used, prevent the default action of the click event + if (isSearchBarUsed) { + event.preventDefault(); + } + }); + }); + \ No newline at end of file diff --git a/src/main/resources/templates/list/ciclo.html b/src/main/resources/templates/list/ciclo.html deleted file mode 100644 index 1331337..0000000 --- a/src/main/resources/templates/list/ciclo.html +++ /dev/null @@ -1,43 +0,0 @@ - - - - - - - - Title - - - - - -

Listado de Ciclos

-
- - - - - - - - - - - - - - - -
IdNombreFamilia
[[${ciclo.id}]][[${ciclo.nombre}]][[${ciclo.familia.nombre}]]
-
- - - - - \ No newline at end of file diff --git a/src/main/resources/templates/list/ciclos.html b/src/main/resources/templates/list/ciclos.html new file mode 100644 index 0000000..12ec857 --- /dev/null +++ b/src/main/resources/templates/list/ciclos.html @@ -0,0 +1,251 @@ + + + + + + + + + Lista: Cilos + + + +
+ +

Listado de Ciclos

+ +
+ + + + +
+ + + + + + + + + + + + + + +
+ + Nombre + + + + Codigo + + + + Familia + +
+ [[${ciclo.nombre}]] + + + [[${ciclo.codigo}]][[${ciclo.familia.nombre}]]
+
+
+ +
+ + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/templates/list/contactos.html b/src/main/resources/templates/list/contactos.html index ed13729..979ca75 100644 --- a/src/main/resources/templates/list/contactos.html +++ b/src/main/resources/templates/list/contactos.html @@ -25,11 +25,6 @@ - - - + @@ -120,22 +114,79 @@ \ No newline at end of file diff --git a/src/main/resources/templates/list/empresas.html b/src/main/resources/templates/list/empresas.html index 54887e6..369e59d 100644 --- a/src/main/resources/templates/list/empresas.html +++ b/src/main/resources/templates/list/empresas.html @@ -25,11 +25,6 @@
- - Id - - Nombre @@ -63,12 +58,11 @@
[[${contacto.id}]]
[[${contacto.nombre}]] - - + + [[${contacto.apellido}]] [[${contacto.apellido2}]]
- - - + @@ -117,27 +111,81 @@ - \ No newline at end of file diff --git a/src/main/resources/templates/list/familias.html b/src/main/resources/templates/list/familias.html index db2e44b..68ad470 100644 --- a/src/main/resources/templates/list/familias.html +++ b/src/main/resources/templates/list/familias.html @@ -3,40 +3,234 @@ + - Title + Lista:Familia - - -

Familias

-
-
- - Id - - Nombre @@ -63,12 +58,11 @@
[[${empresa.id}]]
[[${empresa.nombre}]] - - + + [[${empresa.cif}]] [[${empresa.correo}]]
+
+ +

Listado de Familias

+ +
+ + + + +
+
- - - + - - - + +
IdNombre
+ + Nombre + +
[[${familia.id}]][[${familia.nombre}]]
+ [[${familia.nombre}]] + + +
- +
+ +
+ + + + + \ No newline at end of file diff --git a/src/main/resources/templates/list/ofertas.html b/src/main/resources/templates/list/ofertas.html index a5cbe86..b0a9ac9 100644 --- a/src/main/resources/templates/list/ofertas.html +++ b/src/main/resources/templates/list/ofertas.html @@ -3,43 +3,272 @@ + - Title + Lista Ofertas - - -

Listado de Ofertas

-
- +
+ +

Listado de Ofertas

+ +
+ + + + +
+
- - - - + + + + + + - + - - + + + + +
IdNombreDescripcionFecha + + Nombre + + + + Fecha + + + + Descripcion + + + + Sucursal + + + + Ciclo + + + Skills +
[[${oferta.id}]][[${oferta.nombre}]][[${oferta.descripcion}]] + [[${oferta.nombre}]] + + + [[${oferta.fecha}]][[${oferta.descripcion}]][[${oferta.sucursal.nombre}]][[${oferta.ciclo.nombre}]] + +
- +
+ +
+ + + + + \ No newline at end of file diff --git a/src/main/resources/templates/list/sectores.html b/src/main/resources/templates/list/sectores.html index 91ef224..5a264e6 100644 --- a/src/main/resources/templates/list/sectores.html +++ b/src/main/resources/templates/list/sectores.html @@ -25,11 +25,6 @@ - - - + @@ -89,21 +83,79 @@ diff --git a/src/main/resources/templates/list/skills.html b/src/main/resources/templates/list/skills.html index f572cea..d892e60 100644 --- a/src/main/resources/templates/list/skills.html +++ b/src/main/resources/templates/list/skills.html @@ -3,39 +3,233 @@ + - Title + Lista: Skills - - -

Listado de Skills

-
-
- - Id - - Nombre @@ -37,12 +32,11 @@
[[${sector.id}]]
- [[${sector.nombre}]] - - + [[${sector.nombre}]] + +
+
+ +

Listado de Skills

+ +
+ + + + +
+
- - - + - - - - + +
IdNombre
+ + Nombre + +
[[${skill.id}]][[${skill.nombre}]]
+ [[${skill.nombre}]] + + +
- +
+ +
+ + + + + \ No newline at end of file diff --git a/src/main/resources/templates/list/sucursales.html b/src/main/resources/templates/list/sucursales.html index 0e56baf..659b8cd 100644 --- a/src/main/resources/templates/list/sucursales.html +++ b/src/main/resources/templates/list/sucursales.html @@ -25,11 +25,6 @@ - - - + @@ -114,22 +108,79 @@ \ No newline at end of file
- - Id - - Nombre @@ -58,12 +53,11 @@
[[${sucursal.id}]]
[[${sucursal.nombre}]] - - + + [[${sucursal.localidad}]] [[${sucursal.direccion}]]