Terminando las busquedas basicas para el segundo dropdown, falta a implementar que peuden acceptar ams de una palabara y la barra de busqueda de lista como ahora me hace la busqueda sobre la tabla de entidad de nuevo de todas entidades

master
vicsash 5 months ago
parent c92885fac7
commit 48ee5e61e5

@ -15,6 +15,7 @@ import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RequestParam;
import javax.servlet.http.HttpSession;
import java.util.*; import java.util.*;
@Controller @Controller
@ -58,35 +59,18 @@ public class BuscadorController {
@RequestParam(defaultValue = "nombre") String sortField, @RequestParam(defaultValue = "nombre") String sortField,
@RequestParam(defaultValue = "asc") String sortDir, @RequestParam(defaultValue = "asc") String sortDir,
@RequestParam String secondaryOption, @RequestParam String secondaryOption,
Model model){ Model model){
System.out.println("Selected option TEST: " + secondaryOption);
Page<Empresa> page = empresaService.getPage(pageNum, size, sortField, sortDir, query, secondaryOption); Page<Empresa> page = empresaService.getPage(pageNum, size, sortField, sortDir, query, secondaryOption);
List<Integer> itemsPage = Arrays.asList(5, 10, 15, 20, 25, 50); List<Integer> itemsPage = Arrays.asList(5, 10, 15, 20, 25, 50);
if(page!=null){ if(page!=null){
List<Empresa> empresas = page.getContent(); List<Empresa> empresas = page.getContent();
model.addAttribute("currentPage", pageNum); addPaginationAttributes(model, pageNum, page, sortField, sortDir, query, itemsPage, size);
model.addAttribute("totalPages", page.getTotalPages());
model.addAttribute("totalItems", page.getTotalElements());
model.addAttribute("empresas", empresas); model.addAttribute("empresas", empresas);
model.addAttribute("sortField", sortField);
model.addAttribute("sortDir", sortDir);
model.addAttribute("reverseSortDir", sortDir.equals("asc") ? "desc" : "asc");
model.addAttribute("query", query); model.addAttribute("query", query);
model.addAttribute("secondaryOption", secondaryOption); model.addAttribute("secondaryOption", secondaryOption);
model.addAttribute("itemsPage", itemsPage);
model.addAttribute("currentSize", size);
}else{ }else{
System.out.println("No se encontraron empresas"); // System.out.println("No se encontraron empresas");
} }
// List<Object> models = model.asMap().values().stream().toList();
// for(Object m : models){
// System.out.println(m);
// }
return "/list/empresas"; return "/list/empresas";
} }
@ -101,15 +85,11 @@ public class BuscadorController {
String[] word = query.split("\\b(y|o)\\b|[,/]"); String[] word = query.split("\\b(y|o)\\b|[,/]");
List<Integer> itemsPage = Arrays.asList(5, 10, 15, 20, 25, 50); List<Integer> itemsPage = Arrays.asList(5, 10, 15, 20, 25, 50);
Map<String, Object> attributes = new HashMap<>(); Map<String, Object> attributes = new HashMap<>();
if (secondaryOption.equalsIgnoreCase("Todo")) { attributes = getPaginatedAttributes(pageNum, query, size, sortField, sortDir, sectorService, itemsPage);
sortField = "nombre";
sortDir = "asc";
attributes = getPaginatedAttributes(pageNum, query, size, sortField, sortDir, alumnoService, itemsPage);
}
for (Map.Entry<String, Object> entry : attributes.entrySet()) { for (Map.Entry<String, Object> entry : attributes.entrySet()) {
model.addAttribute(entry.getKey(), entry.getValue()); model.addAttribute(entry.getKey(), entry.getValue());
} }
model.addAttribute("secondaryOption",secondaryOption);
return "/list/sectores"; return "/list/sectores";
} }
@ -122,17 +102,16 @@ public class BuscadorController {
@RequestParam(defaultValue = "asc") String sortDir, @RequestParam(defaultValue = "asc") String sortDir,
@RequestParam(defaultValue = "") String secondaryOption, @RequestParam(defaultValue = "") String secondaryOption,
Model model) { Model model) {
String[] word = query.split("\\b(y|o)\\b|[,/]"); Page<Contacto> page = contactosService.getPage(pageNum, size, sortField, sortDir, query, secondaryOption);
List<Integer> itemsPage = Arrays.asList(5, 10, 15, 20, 25, 50); List<Integer> itemsPage = Arrays.asList(5, 10, 15, 20, 25, 50);
Map<String, Object> attributes =new HashMap<>(); if(page!=null){
if (secondaryOption.equalsIgnoreCase("Todo")) { List<Contacto> contactos = page.getContent();
sortField = "nombre"; addPaginationAttributes(model, pageNum, page, sortField, sortDir, query, itemsPage, size);
sortDir = "asc"; model.addAttribute("contactos", contactos);
attributes = getPaginatedAttributes(pageNum, query, size, sortField, sortDir, alumnoService, itemsPage); model.addAttribute("query", query);
} model.addAttribute("secondaryOption", secondaryOption);
}else{
for (Map.Entry<String, Object> entry : attributes.entrySet()) { //System.out.println("No se encontraron Contactos");
model.addAttribute(entry.getKey(), entry.getValue());
} }
return "/list/contactos"; return "/list/contactos";
} }
@ -145,16 +124,16 @@ public class BuscadorController {
@RequestParam(defaultValue = "asc") String sortDir, @RequestParam(defaultValue = "asc") String sortDir,
@RequestParam(defaultValue = "") String secondaryOption, @RequestParam(defaultValue = "") String secondaryOption,
Model model){ Model model){
String[] word = query.split("\\b(y|o)\\b|[,/]"); Page<Sucursal> page = sucursalService.getPage(pageNum, size, sortField, sortDir, query, secondaryOption);
List<Integer> itemsPage = Arrays.asList(5, 10, 15, 20, 25, 50); List<Integer> itemsPage = Arrays.asList(5, 10, 15, 20, 25, 50);
Map<String, Object> attributes = new HashMap<>(); if(page!=null){
if (secondaryOption.equalsIgnoreCase("Todo")) { List<Sucursal> sucursals = page.getContent();
sortField = "nombre"; addPaginationAttributes(model, pageNum, page, sortField, sortDir, query, itemsPage, size);
sortDir = "asc"; model.addAttribute("sucursals",sucursals);
attributes = getPaginatedAttributes(pageNum, query, size, sortField, sortDir, alumnoService, itemsPage); model.addAttribute("query", query);
} model.addAttribute("secondaryOption", secondaryOption);
for (Map.Entry<String, Object> entry : attributes.entrySet()) { }else{
model.addAttribute(entry.getKey(), entry.getValue()); // System.out.println("No se encontraron sucursales");
} }
return "/list/sucursales"; return "/list/sucursales";
} }
@ -167,16 +146,16 @@ public class BuscadorController {
@RequestParam(defaultValue = "asc") String sortDir, @RequestParam(defaultValue = "asc") String sortDir,
@RequestParam(defaultValue = "") String secondaryOption, @RequestParam(defaultValue = "") String secondaryOption,
Model model){ Model model){
String[] word = query.split("\\b(y|o)\\b|[,/]"); Page<Oferta> page = ofertasService.getPage(pageNum, size, sortField, sortDir, query, secondaryOption);
List<Integer> itemsPage = Arrays.asList(5, 10, 15, 20, 25, 50); List<Integer> itemsPage = Arrays.asList(5, 10, 15, 20, 25, 50);
Map<String, Object> attributes = new HashMap<>(); if(page!=null){
if (secondaryOption.equalsIgnoreCase("Todo")) { List<Oferta> ofertas = page.getContent();
sortField = "nombre"; addPaginationAttributes(model, pageNum, page, sortField, sortDir, query, itemsPage, size);
sortDir = "asc"; model.addAttribute("ofertas", ofertas);
attributes = getPaginatedAttributes(pageNum, query, size, sortField, sortDir, alumnoService, itemsPage); model.addAttribute("query", query);
} model.addAttribute("secondaryOption", secondaryOption);
for (Map.Entry<String, Object> entry : attributes.entrySet()) { }else{
model.addAttribute(entry.getKey(), entry.getValue()); // System.out.println("No se encontraron ofertas");
} }
return "/list/ofertas"; return "/list/ofertas";
} }
@ -195,11 +174,12 @@ public class BuscadorController {
if (secondaryOption.equalsIgnoreCase("Todo")) { if (secondaryOption.equalsIgnoreCase("Todo")) {
sortField = "nombre"; sortField = "nombre";
sortDir = "asc"; sortDir = "asc";
attributes = getPaginatedAttributes(pageNum, query, size, sortField, sortDir, alumnoService, itemsPage); attributes = getPaginatedAttributes(pageNum, query, size, sortField, sortDir, familiaService, itemsPage);
} }
for (Map.Entry<String, Object> entry : attributes.entrySet()) { for (Map.Entry<String, Object> entry : attributes.entrySet()) {
model.addAttribute(entry.getKey(), entry.getValue()); model.addAttribute(entry.getKey(), entry.getValue());
} }
model.addAttribute("secondaryOption",secondaryOption);
return "/list/familias"; return "/list/familias";
} }
@ -211,16 +191,16 @@ public class BuscadorController {
@RequestParam(defaultValue = "asc") String sortDir, @RequestParam(defaultValue = "asc") String sortDir,
@RequestParam(defaultValue = "") String secondaryOption, @RequestParam(defaultValue = "") String secondaryOption,
Model model) { Model model) {
String[] word = query.split("\\b(y|o)\\b|[,/]"); Page<Ciclo> page =cicloService.getPage(pageNum, size, sortField, sortDir, query, secondaryOption);
List<Integer> itemsPage = Arrays.asList(5, 10, 15, 20, 25, 50); List<Integer> itemsPage = Arrays.asList(5, 10, 15, 20, 25, 50);
Map<String, Object> attributes = new HashMap<>(); if(page!=null){
if (secondaryOption.equalsIgnoreCase("Todo")) { List<Ciclo> ciclos = page.getContent();
sortField = "nombre"; addPaginationAttributes(model, pageNum, page, sortField, sortDir, query, itemsPage, size);
sortDir = "asc"; model.addAttribute("ciclos", ciclos);
attributes = getPaginatedAttributes(pageNum, query, size, sortField, sortDir, alumnoService, itemsPage); model.addAttribute("query", query);
} model.addAttribute("secondaryOption", secondaryOption);
for (Map.Entry<String, Object> entry : attributes.entrySet()) { }else{
model.addAttribute(entry.getKey(), entry.getValue()); // System.out.println("No se encontraron ofertas");
} }
return "/list/ciclos"; return "/list/ciclos";
} }
@ -234,16 +214,16 @@ public class BuscadorController {
@RequestParam(defaultValue = "") String secondaryOption, @RequestParam(defaultValue = "") String secondaryOption,
Model model) { Model model) {
String[] word = query.split("\\b(y|o)\\b|[,/]"); Page<Alumno> page = alumnoService.getPage(pageNum, size, sortField, sortDir, query, secondaryOption);
List<Integer> itemsPage = Arrays.asList(5, 10, 15, 20, 25, 50); List<Integer> itemsPage = Arrays.asList(5, 10, 15, 20, 25, 50);
Map<String, Object> attributes = new HashMap<>(); if(page!=null){
if (secondaryOption.equalsIgnoreCase("Todo")) { List<Alumno> alumnos = page.getContent();
sortField = "nombre"; addPaginationAttributes(model, pageNum, page, sortField, sortDir, query, itemsPage, size);
sortDir = "asc"; model.addAttribute("alumnos", alumnos);
attributes = getPaginatedAttributes(pageNum, query, size, sortField, sortDir, alumnoService, itemsPage); model.addAttribute("query", query);
} model.addAttribute("secondaryOption", secondaryOption);
for (Map.Entry<String, Object> entry : attributes.entrySet()) { }else{
model.addAttribute(entry.getKey(), entry.getValue()); // System.out.println("No se encontraron alumnos");
} }
return "/list/alumnos"; return "/list/alumnos";
} }
@ -268,6 +248,7 @@ public class BuscadorController {
for (Map.Entry<String, Object> entry : attributes.entrySet()) { for (Map.Entry<String, Object> entry : attributes.entrySet()) {
model.addAttribute(entry.getKey(), entry.getValue()); model.addAttribute(entry.getKey(), entry.getValue());
} }
model.addAttribute("secondaryOption",secondaryOption);
return "/list/skills"; return "/list/skills";
} }
public <T> Map<String, Object> getPaginatedAttributes(int pageNum, String query, int size, String sortField, String sortDir, IPagination<T> service, List<Integer> itemsPage) { public <T> Map<String, Object> getPaginatedAttributes(int pageNum, String query, int size, String sortField, String sortDir, IPagination<T> service, List<Integer> itemsPage) {
@ -287,11 +268,24 @@ public class BuscadorController {
return attributes; return attributes;
} }
public void addPaginationAttributes(Model model, int pageNum, Page<?> page, String sortField, String sortDir, String query, List<Integer> itemsPage, int size) {
model.addAttribute("currentPage", pageNum);
model.addAttribute("totalPages", page.getTotalPages());
model.addAttribute("totalItems", page.getTotalElements());
model.addAttribute("sortField", sortField);
model.addAttribute("sortDir", sortDir);
model.addAttribute("reverseSortDir", sortDir.equals("asc") ? "desc" : "asc");
model.addAttribute("itemsPage", itemsPage);
model.addAttribute("currentSize", size);
}
@GetMapping("/empresas/search") @GetMapping("/empresas/search")
public ResponseEntity<List<Empresa>> searchEmpresas(@RequestParam String query) { public ResponseEntity<List<Empresa>> searchEmpresas(@RequestParam String query, @RequestParam String secondaryQuery) {
List<Empresa> empresas = empresaService.search(query); List<Empresa> searchResult = empresaService.search(query);
return ResponseEntity.ok(empresas);
return ResponseEntity.ok(searchResult);
} }
@GetMapping("/sectores/search") @GetMapping("/sectores/search")

@ -1,43 +0,0 @@
package com.example.proyectofinal.controllers;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("/editMain")
public class EditController {
@GetMapping
public String editMain(){
return "admin/editMain";
}
@GetMapping("/{text}")
public String editMain(@PathVariable String text, Model model){
model.addAttribute("text", text);
return "admin/editMenu/edit_menu";
}
@GetMapping("/{text}/{action}")
public String operationSwitch(@PathVariable String text, @PathVariable String action, Model model){
model.addAttribute("text", text);
switch(action) {
case "crear":
if(text.equalsIgnoreCase("familia")){
return "admin/editMenu/familia/familia_crear";
}
break;
case "editar":
System.out.println("editar "+text);
break;
case "borrar":
System.out.println("borrar "+ text);
break;
}
return "admin/editMenu/edit_menu";
}
}

@ -1,8 +0,0 @@
package com.example.proyectofinal.interfaces;
import org.springframework.data.domain.Page;
public interface IPaginationStrategy<T> {
Page<T> getPage(int pageNum, int size, String sortField, String sortDir, String query, IPagination<T> service);
}

@ -1,13 +0,0 @@
package com.example.proyectofinal.interfaces.specific;
import com.example.proyectofinal.interfaces.IPagination;
import com.example.proyectofinal.models.empresas.Empresa;
import org.springframework.data.domain.Page;
import java.util.List;
public interface IEmpresaSpecificPagination extends IPagination<Empresa> {
Page<Empresa> findEmpresasBySectorPaginated(Long sectorId, int pageNum, int size, String sortField, String sortDir);
}

@ -2,6 +2,8 @@ package com.example.proyectofinal.repositories.empresas;
import com.example.proyectofinal.models.empresas.Alumno; import com.example.proyectofinal.models.empresas.Alumno;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query; import org.springframework.data.jpa.repository.Query;
@ -37,7 +39,26 @@ public interface AlumnoRepository extends JpaRepository<Alumno, Long> {
@Query("SELECT a FROM Alumno a WHERE a.nia = ?1") @Query("SELECT a FROM Alumno a WHERE a.nia = ?1")
Alumno findByNia(String nia); Alumno findByNia(String nia);
@Query("SELECT a FROM Alumno a WHERE a.apellido like ?1 or a.apellido2 like ?1")
Page<Alumno> findAlumnoByApellido(String query, PageRequest of);
@Query("SELECT a FROM Alumno a WHERE a.nombre like ?1")
Page<Alumno> findAlumnoByNombre(String query, PageRequest of);
@Query(value = "SELECT * FROM alumnos a WHERE FIND_IN_SET(?1, a.keywords)", nativeQuery = true)
Page<Alumno> findAlumnoByKeywords(String query, PageRequest of);
@Query("SELECT a FROM Alumno a WHERE a.nia like ?1")
Page<Alumno> findAlumnoByNia(String query, PageRequest of);
@Query("SELECT a FROM Alumno a WHERE a.dni like ?1")
Page<Alumno> findAlumnoByDni(String query, PageRequest of);
@Query("SELECT a FROM Alumno a WHERE a.ciclo.nombre like ?1")
Page<Alumno> findAlumnoByCiclo(String query, PageRequest of);
// @Query(value = "SELECT * FROM alumnos u WHERE MATCH(u.nombre, u.keywords, " + // @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) // "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<Alumno> getAlumnoByKeywordsOrName(String keyword1); // public ArrayList<Alumno> getAlumnoByKeywordsOrName(String keyword1);
} }

@ -1,6 +1,8 @@
package com.example.proyectofinal.repositories.empresas; package com.example.proyectofinal.repositories.empresas;
import com.example.proyectofinal.models.empresas.Ciclo; import com.example.proyectofinal.models.empresas.Ciclo;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query; import org.springframework.data.jpa.repository.Query;
@ -18,4 +20,10 @@ public interface CicloRepository extends JpaRepository<Ciclo, Long> {
@Query("SELECT c FROM Ciclo c WHERE c.nombre LIKE %?1% or c.familia.nombre LIKE %?1% or c.codigo LIKE %?1%") @Query("SELECT c FROM Ciclo c WHERE c.nombre LIKE %?1% or c.familia.nombre LIKE %?1% or c.codigo LIKE %?1%")
List<Ciclo> search(String query); List<Ciclo> search(String query);
@Query("SELECT c FROM Ciclo c WHERE c.familia.nombre LIKE %?1%")
Page<Ciclo> findCicloByFamilia(String query, PageRequest of);
@Query("SELECT c FROM Ciclo c WHERE c.codigo LIKE %?1%")
Page<Ciclo> findCicloByCodigo(String query, PageRequest of);
} }

@ -1,6 +1,8 @@
package com.example.proyectofinal.repositories.empresas; package com.example.proyectofinal.repositories.empresas;
import com.example.proyectofinal.models.empresas.Contacto; import com.example.proyectofinal.models.empresas.Contacto;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query; import org.springframework.data.jpa.repository.Query;
@ -13,9 +15,6 @@ public interface ContactoRepository extends JpaRepository<Contacto, Long> {
@Query("SELECT c FROM Contacto c WHERE c.empresa.id = ?1") @Query("SELECT c FROM Contacto c WHERE c.empresa.id = ?1")
ArrayList<Contacto> findBySector(Long id); ArrayList<Contacto> findBySector(Long id);
// @Query(value = "SELECT * FROM contactos u WHERE MATCH(u.nombre, u.apellido,u.apellido2, u.correo, u.telefono) AGAINST(?1 IN BOOLEAN MODE)", nativeQuery = true)
// public ArrayList<Contacto> getContactoFullTextSeach(String keyword1);
@Query(value="Delete from contactos where fk_empressa =?1", nativeQuery = true) @Query(value="Delete from contactos where fk_empressa =?1", nativeQuery = true)
public void deleteByEmpresaId(Long id); public void deleteByEmpresaId(Long id);
@ -31,4 +30,10 @@ public interface ContactoRepository extends JpaRepository<Contacto, Long> {
@Modifying @Modifying
@Query(value = "INSERT INTO contactos (nombre, apellido, apellido2, correo, telefono, fk_empressa) VALUES (:nombre, :apellido, :apellido2, :correo, :telefono, :fk_empressa)", nativeQuery = true) @Query(value = "INSERT INTO contactos (nombre, apellido, apellido2, correo, telefono, fk_empressa) VALUES (:nombre, :apellido, :apellido2, :correo, :telefono, :fk_empressa)", nativeQuery = true)
void insertContacto(@Param("nombre") String nombre, @Param("apellido") String apellido, @Param("apellido2") String apellido2, @Param("correo") String correo, @Param("telefono") String telefono, @Param("fk_empressa") Long fk_empressa); void insertContacto(@Param("nombre") String nombre, @Param("apellido") String apellido, @Param("apellido2") String apellido2, @Param("correo") String correo, @Param("telefono") String telefono, @Param("fk_empressa") Long fk_empressa);
@Query("SELECT c FROM Contacto c WHERE c.nombre like %:query%")
Page<Contacto> findContactoByNombre(String query, PageRequest of);
@Query("SELECT c FROM Contacto c WHERE c.empresa.nombre LIKE %:query%")
Page<Contacto> findContactoByEmpresa(String query, PageRequest of);
} }

@ -1,12 +1,16 @@
package com.example.proyectofinal.repositories.empresas; package com.example.proyectofinal.repositories.empresas;
import com.example.proyectofinal.models.empresas.Contacto;
import com.example.proyectofinal.models.empresas.Empresa; import com.example.proyectofinal.models.empresas.Empresa;
import org.springframework.data.domain.Page; import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor; import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Query; import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param; import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@ -37,4 +41,15 @@ public interface EmpressaRepository extends JpaRepository<Empresa, Long>, JpaSpe
@Query("SELECT e FROM Empresa e WHERE e.sector.nombre = :sectorName") @Query("SELECT e FROM Empresa e WHERE e.sector.nombre = :sectorName")
Page<Empresa> findEmpresasBySectorName(@Param("sectorName") String sectorName, Pageable pageable); Page<Empresa> findEmpresasBySectorName(@Param("sectorName") String sectorName, Pageable pageable);
@Query("SELECT e FROM Empresa e WHERE e.nombre LIKE %:query%")
Page<Empresa> findEmpresasByEmpresaName(String query, PageRequest of);
@Query("SELECT e FROM Empresa e WHERE e.keywords LIKE %:query%")
Page<Empresa> findEmpresasByKeywords(String query, PageRequest of);
// @Query()
// List<Empresa> findByQueryAndSecondaryOption(String query, String secondaryQuery);
} }

@ -1,6 +1,9 @@
package com.example.proyectofinal.repositories.empresas; package com.example.proyectofinal.repositories.empresas;
import com.example.proyectofinal.models.empresas.Oferta; import com.example.proyectofinal.models.empresas.Oferta;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query; import org.springframework.data.jpa.repository.Query;
@ -41,4 +44,16 @@ public interface OfertaRepository extends JpaRepository<Oferta, Long> {
Oferta findByNombre(String name); Oferta findByNombre(String name);
@Query(value = "SELECT o FROM Oferta o JOIN o.skills s WHERE s.nombre = ?1", nativeQuery = false)
Page<Oferta> findOfertaBySkill(String skillName, Pageable pageable);
@Query("SELECT o FROM Oferta o WHERE o.nombre LIKE %:query%")
Page<Oferta> findOfertaByNombre(String query, PageRequest of);
@Query("SELECT o FROM Oferta o WHERE o.fecha LIKE %:query%")
Page<Oferta> findOfertaByFecha(String query, PageRequest of);
@Query("SELECT o FROM Oferta o WHERE o.sucursal.nombre LIKE %:query%")
Page<Oferta> findOfertaByEmpresa(String query, PageRequest of);
} }

@ -1,6 +1,8 @@
package com.example.proyectofinal.repositories.empresas; package com.example.proyectofinal.repositories.empresas;
import com.example.proyectofinal.models.empresas.Sucursal; import com.example.proyectofinal.models.empresas.Sucursal;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query; import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param; import org.springframework.data.repository.query.Param;
@ -22,4 +24,13 @@ public interface SucursalRepository extends JpaRepository<Sucursal, Long> {
@Query("SELECT s FROM Sucursal s WHERE s.nombre = :nombre") @Query("SELECT s FROM Sucursal s WHERE s.nombre = :nombre")
Sucursal findByName(String nombre); Sucursal findByName(String nombre);
@Query("SELECT s FROM Sucursal s WHERE s.empresa.nombre LIKE %:query%")
Page<Sucursal> findSucursalByEmpresa(String query, PageRequest of);
@Query("SELECT s FROM Sucursal s WHERE s.nombre LIKE %:query%")
Page<Sucursal> findSucursalaByNombre(String query, PageRequest of);
@Query("SELECT s FROM Sucursal s WHERE s.localidad LIKE %:query%")
Page<Sucursal> findSucursalByLocalidad(String query, PageRequest of);
} }

@ -17,6 +17,29 @@ import java.util.List;
public class AlumnoService implements IAlumno{ public class AlumnoService implements IAlumno{
@Autowired @Autowired
private AlumnoRepository alumnoRepository; private AlumnoRepository alumnoRepository;
@Override
public Page<Alumno> getPage(int pageNum, int size, String sortField, String sortDir, String query, String secondaryOption) {
if(secondaryOption.equalsIgnoreCase("Todo")){
return findAllPaginated(pageNum, size, sortField, sortDir);
}else if (secondaryOption.equals("Apellido")) {
return alumnoRepository.findAlumnoByApellido(query, PageRequest.of(pageNum - 1, size, Sort.by(sortField).ascending()));
} else if(secondaryOption.equals("Nombre")) {
return alumnoRepository.findAlumnoByNombre(query, PageRequest.of(pageNum - 1, size, Sort.by(sortField).ascending()));
}else if(secondaryOption.equals("Keywords")) {
return alumnoRepository.findAlumnoByKeywords(query, PageRequest.of(pageNum - 1, size, Sort.by(sortField).ascending()));
}else if(secondaryOption.equals("Nia")) {
return alumnoRepository.findAlumnoByNia(query, PageRequest.of(pageNum - 1, size, Sort.by(sortField).ascending()));
}else if(secondaryOption.equals("Dni")) {
return alumnoRepository.findAlumnoByDni(query, PageRequest.of(pageNum - 1, size, Sort.by(sortField).ascending()));
}else if(secondaryOption.equals("Ciclo")) {
return alumnoRepository.findAlumnoByCiclo(query, PageRequest.of(pageNum - 1, size, Sort.by(sortField).ascending()));
} else {
return null;
}
}
@Override @Override
public List<Alumno> findAll() { public List<Alumno> findAll() {
return alumnoRepository.findAll(); return alumnoRepository.findAll();
@ -77,4 +100,6 @@ public class AlumnoService implements IAlumno{
} }
} }
} }

@ -92,5 +92,18 @@ public class CicloService implements ICiclos {
} }
} }
@Override
public Page<Ciclo> getPage(int pageNum, int size, String sortField, String sortDir, String query, String secondaryOption) {
if(secondaryOption.equalsIgnoreCase("Todo")){
return findAllPaginated(pageNum, size, sortField, sortDir);
}else if(secondaryOption.equals("Familia")) {
return cicloRepository.findCicloByFamilia(query, PageRequest.of(pageNum - 1, size, Sort.by(sortField).ascending()));
} else if(secondaryOption.equals("Codigo")) {
return cicloRepository.findCicloByCodigo(query, PageRequest.of(pageNum - 1, size, Sort.by(sortField).ascending()));
} else {
return null;
}
}
} }

@ -2,6 +2,7 @@ package com.example.proyectofinal.servicios;
import com.example.proyectofinal.models.empresas.Contacto; import com.example.proyectofinal.models.empresas.Contacto;
import com.example.proyectofinal.models.empresas.Empresa; import com.example.proyectofinal.models.empresas.Empresa;
import com.example.proyectofinal.repositories.empresas.EmpressaRepository;
import com.example.proyectofinal.servicios.implemetations.IContactos; import com.example.proyectofinal.servicios.implemetations.IContactos;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page; import org.springframework.data.domain.Page;
@ -91,5 +92,18 @@ public class ContactosService implements IContactos {
return contactoRepository.existsByNombreApe(contacto.getNombre(),contacto.getApellido(),contacto.getApellido2()); return contactoRepository.existsByNombreApe(contacto.getNombre(),contacto.getApellido(),contacto.getApellido2());
} }
@Override
public Page<Contacto> getPage(int pageNum, int size, String sortField, String sortDir, String query, String secondaryOption) {
if(secondaryOption.equalsIgnoreCase("Todo")){
return findAllPaginated(pageNum, size, sortField, sortDir);
} else if(secondaryOption.equals("Nombre")) {
return contactoRepository.findContactoByNombre(query, PageRequest.of(pageNum - 1, size, Sort.by(sortField).ascending()));
}else if(secondaryOption.equals("Empresa")) {
return contactoRepository.findContactoByEmpresa(query, PageRequest.of(pageNum - 1, size, Sort.by(sortField).ascending()));
} else {
return null;
}
}
} }

@ -1,9 +1,6 @@
package com.example.proyectofinal.servicios; package com.example.proyectofinal.servicios;
import com.example.proyectofinal.interfaces.specific.IEmpresaSpecificPagination;
import com.example.proyectofinal.models.empresas.Empresa; import com.example.proyectofinal.models.empresas.Empresa;
import com.example.proyectofinal.models.empresas.Oferta; import com.example.proyectofinal.models.empresas.Oferta;
import com.example.proyectofinal.models.empresas.Sector;
import com.example.proyectofinal.models.empresas.Sucursal; import com.example.proyectofinal.models.empresas.Sucursal;
import com.example.proyectofinal.repositories.empresas.EmpressaRepository; import com.example.proyectofinal.repositories.empresas.EmpressaRepository;
import com.example.proyectofinal.repositories.empresas.OfertaRepository; import com.example.proyectofinal.repositories.empresas.OfertaRepository;
@ -18,7 +15,7 @@ import org.springframework.stereotype.Service;
import java.util.List; import java.util.List;
@Service @Service
public class EmpresaService implements IEmpresa, IEmpresaSpecificPagination { public class EmpresaService implements IEmpresa {
@Autowired @Autowired
private EmpressaRepository empresaRepository; private EmpressaRepository empresaRepository;
@ -31,16 +28,23 @@ public class EmpresaService implements IEmpresa, IEmpresaSpecificPagination {
@Autowired @Autowired
private OfertaRepository ofertaRepository; private OfertaRepository ofertaRepository;
@Override
public Page<Empresa> getPage(int pageNum, int size, String sortField, String sortDir, String query, String secondaryOption) { public Page<Empresa> getPage(int pageNum, int size, String sortField, String sortDir, String query, String secondaryOption) {
if(secondaryOption.equalsIgnoreCase("Todo")){ if(secondaryOption.equalsIgnoreCase("Todo")){
return findAllPaginated(pageNum, size, sortField, sortDir); return findAllPaginated(pageNum, size, sortField, sortDir);
}else if (secondaryOption.equals("Sector")) { }else if (secondaryOption.equals("Sector")) {
return empresaRepository.findEmpresasBySectorName(query, PageRequest.of(pageNum - 1, size, Sort.by(sortField).ascending())); return empresaRepository.findEmpresasBySectorName(query, PageRequest.of(pageNum - 1, size, Sort.by(sortField).ascending()));
} else if(secondaryOption.equals("Nombre")) {
return empresaRepository.findEmpresasByEmpresaName(query, PageRequest.of(pageNum - 1, size, Sort.by(sortField).ascending()));
}else if(secondaryOption.equals("Keywords")) {
return empresaRepository.findEmpresasByKeywords(query, PageRequest.of(pageNum - 1, size, Sort.by(sortField).ascending()));
} else { } else {
return null; return null;
} }
} }
@Override @Override
public List<Empresa> findAll() { public List<Empresa> findAll() {
return empresaRepository.findAll(); return empresaRepository.findAll();
@ -53,13 +57,7 @@ public class EmpresaService implements IEmpresa, IEmpresaSpecificPagination {
Page<Empresa> result = empresaRepository.findAll(pageRequest); Page<Empresa> result = empresaRepository.findAll(pageRequest);
return result; return result;
} }
@Override
public Page<Empresa> findEmpresasBySectorPaginated(Long sectorId, 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<Empresa> result = empresaRepository.empresaBySector(sectorId, pageRequest);
return result;
}
@Override @Override
public Empresa findById(Long id) { public Empresa findById(Long id) {
@ -106,5 +104,10 @@ public class EmpresaService implements IEmpresa, IEmpresaSpecificPagination {
return empresaRepository.findBySector(id); return empresaRepository.findBySector(id);
} }
// @Override
// public List<Empresa> getEmpresasByQueryAndSecondaryOption(String query, String secondaryQuery) {
// return empresaRepository.findByQueryAndSecondaryOption(query, secondaryQuery);
// }
} }

@ -26,6 +26,23 @@ public class OfertaService implements IOferta {
@Autowired @Autowired
private OfertaRepository ofertaRepository; private OfertaRepository ofertaRepository;
@Override
public Page<Oferta> getPage(int pageNum, int size, String sortField, String sortDir, String query, String secondaryOption) {
if(secondaryOption.equalsIgnoreCase("Todo")){
return findAllPaginated(pageNum, size, sortField, sortDir);
}else if (secondaryOption.equals("Skill")) {
return ofertaRepository.findOfertaBySkill(query, PageRequest.of(pageNum - 1, size, Sort.by(sortField).ascending()));
} else if(secondaryOption.equals("Nombre")) {
return ofertaRepository.findOfertaByNombre(query, PageRequest.of(pageNum - 1, size, Sort.by(sortField).ascending()));
}else if(secondaryOption.equals("Fecha")) {
return ofertaRepository.findOfertaByFecha(query, PageRequest.of(pageNum - 1, size, Sort.by(sortField).ascending()));
}else if(secondaryOption.equals("Empresa")) {
return ofertaRepository.findOfertaByEmpresa(query, PageRequest.of(pageNum - 1, size, Sort.by(sortField).ascending()));
} else {
return null;
}
}
@Override @Override
public List<Oferta> findAll() { public List<Oferta> findAll() {
return ofertaRepository.findAll(); return ofertaRepository.findAll();
@ -102,4 +119,6 @@ public class OfertaService implements IOferta {
} }
} }
} }
} }

@ -80,5 +80,20 @@ public class SucursalService implements ISucursal {
return sucursalRepository.findByName(sucursal.getNombre()); return sucursalRepository.findByName(sucursal.getNombre());
} }
@Override
public Page<Sucursal> getPage(int pageNum, int size, String sortField, String sortDir, String query, String secondaryOption) {
if(secondaryOption.equalsIgnoreCase("Todo")){
return findAllPaginated(pageNum, size, sortField, sortDir);
}else if (secondaryOption.equals("Empressa")) {
return sucursalRepository.findSucursalByEmpresa(query, PageRequest.of(pageNum - 1, size, Sort.by(sortField).ascending()));
} else if(secondaryOption.equals("Nombre")) {
return sucursalRepository.findSucursalaByNombre(query, PageRequest.of(pageNum - 1, size, Sort.by(sortField).ascending()));
}else if(secondaryOption.equals("Localidad")) {
return sucursalRepository.findSucursalByLocalidad(query, PageRequest.of(pageNum - 1, size, Sort.by(sortField).ascending()));
} else {
return null;
}
}
} }

@ -2,6 +2,7 @@ package com.example.proyectofinal.servicios.implemetations;
import com.example.proyectofinal.interfaces.IPagination; import com.example.proyectofinal.interfaces.IPagination;
import com.example.proyectofinal.models.empresas.Alumno; import com.example.proyectofinal.models.empresas.Alumno;
import org.springframework.data.domain.Page;
import java.util.List; import java.util.List;
@ -21,4 +22,7 @@ public interface IAlumno extends IPagination<Alumno> {
Alumno exists(Alumno alumno); Alumno exists(Alumno alumno);
void deleteByCiclo(Long id); void deleteByCiclo(Long id);
Page<Alumno> getPage(int pageNum, int size, String sortField, String sortDir, String query, String secondaryOption);
} }

@ -3,6 +3,7 @@ package com.example.proyectofinal.servicios.implemetations;
import com.example.proyectofinal.interfaces.IPagination; import com.example.proyectofinal.interfaces.IPagination;
import com.example.proyectofinal.models.empresas.Ciclo; import com.example.proyectofinal.models.empresas.Ciclo;
import com.example.proyectofinal.models.empresas.Familia; import com.example.proyectofinal.models.empresas.Familia;
import org.springframework.data.domain.Page;
import java.util.List; import java.util.List;
@ -24,5 +25,7 @@ public interface ICiclos extends IPagination<Ciclo> {
Ciclo exists(Ciclo ciclo); Ciclo exists(Ciclo ciclo);
void deleteByFamiliaId(Long id); void deleteByFamiliaId(Long id);
Page<Ciclo> getPage(int pageNum, int size, String sortField, String sortDir, String query, String secondaryOption);
} }

@ -3,6 +3,7 @@ package com.example.proyectofinal.servicios.implemetations;
import com.example.proyectofinal.interfaces.IPagination; import com.example.proyectofinal.interfaces.IPagination;
import com.example.proyectofinal.models.empresas.Contacto; import com.example.proyectofinal.models.empresas.Contacto;
import com.example.proyectofinal.models.empresas.Empresa; import com.example.proyectofinal.models.empresas.Empresa;
import org.springframework.data.domain.Page;
import java.util.List; import java.util.List;
@ -22,4 +23,6 @@ public interface IContactos extends IPagination<Contacto> {
void deleteByEmpresa(Empresa empresa); void deleteByEmpresa(Empresa empresa);
Contacto exists(Contacto contacto); Contacto exists(Contacto contacto);
Page<Contacto> getPage(int pageNum, int size, String sortField, String sortDir, String query, String secondaryOption);
} }

@ -1,8 +1,8 @@
package com.example.proyectofinal.servicios.implemetations; package com.example.proyectofinal.servicios.implemetations;
import com.example.proyectofinal.interfaces.IPagination; import com.example.proyectofinal.interfaces.IPagination;
import com.example.proyectofinal.interfaces.specific.IEmpresaSpecificPagination;
import com.example.proyectofinal.models.empresas.Empresa; import com.example.proyectofinal.models.empresas.Empresa;
import org.springframework.data.domain.Page;
import java.util.List; import java.util.List;
@ -22,4 +22,7 @@ public interface IEmpresa extends IPagination<Empresa> {
List<Empresa> findBySector(Long id); List<Empresa> findBySector(Long id);
Page<Empresa> getPage(int pageNum, int size, String sortField, String sortDir, String query, String secondaryOption);
// List<Empresa> getEmpresasByQueryAndSecondaryOption(String query, String secondaryQuery);
} }

@ -3,6 +3,7 @@ package com.example.proyectofinal.servicios.implemetations;
import com.example.proyectofinal.interfaces.IPagination; import com.example.proyectofinal.interfaces.IPagination;
import com.example.proyectofinal.models.empresas.Oferta; import com.example.proyectofinal.models.empresas.Oferta;
import com.example.proyectofinal.models.empresas.Sucursal; import com.example.proyectofinal.models.empresas.Sucursal;
import org.springframework.data.domain.Page;
import java.util.List; import java.util.List;
@ -22,4 +23,6 @@ public interface IOferta extends IPagination<Oferta> {
List<Oferta> findBySucursal(Sucursal sucursal); List<Oferta> findBySucursal(Sucursal sucursal);
void deleteByCicloId(Long id); void deleteByCicloId(Long id);
Page<Oferta> getPage(int pageNum, int size, String sortField, String sortDir, String query, String secondaryOption);
} }

@ -3,6 +3,7 @@ package com.example.proyectofinal.servicios.implemetations;
import com.example.proyectofinal.interfaces.IPagination; import com.example.proyectofinal.interfaces.IPagination;
import com.example.proyectofinal.models.empresas.Empresa; import com.example.proyectofinal.models.empresas.Empresa;
import com.example.proyectofinal.models.empresas.Sucursal; import com.example.proyectofinal.models.empresas.Sucursal;
import org.springframework.data.domain.Page;
import java.util.List; import java.util.List;
@ -22,4 +23,6 @@ public interface ISucursal extends IPagination<Sucursal> {
List<Sucursal> findByEmpresa(Empresa empresa); List<Sucursal> findByEmpresa(Empresa empresa);
Sucursal exists(Sucursal sucursal); Sucursal exists(Sucursal sucursal);
Page<Sucursal> getPage(int pageNum, int size, String sortField, String sortDir, String query, String secondaryOption);
} }

@ -1,7 +1,7 @@
spring.datasource.url=jdbc:mysql://localhost:3306/projfin spring.datasource.url=jdbc:mysql://localhost:3306/projfin
spring.datasource.username=projfin spring.datasource.username=projfin
spring.h2.console.enabled=true spring.h2.console.enabled=true
spring.datasource.password=1234 spring.datasource.password=1234S
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

@ -1,17 +0,0 @@
.back-button {
display: flex;
position: fixed;
bottom: 0;
left: 0;
width: 200px !important;
height: 50px !important;
font-size: 25px !important;
margin-top: 100px;
background-color: #007BFF;
color: white;
font-weight: bolder;
border-radius: 5px;
justify-content: center;
align-items: center;
font-family: Verdana, Geneva, Tahoma, sans-serif;
}

@ -165,7 +165,7 @@
options = ['Todo', 'Nombre', 'Empresa']; options = ['Todo', 'Nombre', 'Empresa'];
break; break;
case'ofertas': case'ofertas':
options = ['Todo', 'Nombre', 'Empresa','Fecha']; options = ['Todo', 'Nombre', 'Empresa','Fecha','Skill'];
break; break;
case'sucursales': case'sucursales':
options = ['Todo', 'Nombre', 'Empresa','Localidad']; options = ['Todo', 'Nombre', 'Empresa','Localidad'];
@ -177,10 +177,10 @@
options = ['Todo']; options = ['Todo'];
break; break;
case'ciclos': case'ciclos':
options = ['Todo','Familia']; options = ['Todo','Familia','Codigo'];
break; break;
case'alumnos': case'alumnos':
options = ['Todo', 'Nombre', 'Apellidos','Ciclo','Keywords']; options = ['Todo', 'Nombre', 'Apellido','Ciclo','Keywords','Nia' ,'Dni'];
break; break;
default: default:
options = []; options = [];

@ -92,7 +92,7 @@
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
<tr class="cell" th:each="alumno :${items}" th:data-id="${alumno.id}"> <tr class="cell" th:each="alumno :${alumnos}" th:data-id="${alumno.id}">
<td> <td>
[[${alumno.nombre}]] [[${alumno.nombre}]]
<i class="edit-icon fas fa-pen-square"></i> <i class="edit-icon fas fa-pen-square"></i>
@ -120,24 +120,21 @@
<div class="page"> <div class="page">
<nav aria-label="Page navigation" id="paginationControls"> <nav aria-label="Page navigation" id="paginationControls">
<ul class="pagination"> <ul class="pagination">
<input type="hidden" name="secondaryOption" id="hiddenSecondaryOption" th:value="${secondaryOption}">
<li class="page-item" th:classappend="${currentPage == 1 ? 'disabled' : ''}"> <li class="page-item" th:classappend="${currentPage == 1 ? 'disabled' : ''}">
<a class="page-link" th:href="@{'/buscador/alumnos/page/' + ${1} + '?query=' + ${query} + '&size=' + ${currentSize}}">Prim</a> <a class="page-link" th:href="@{'/buscador/alumnos/page/' + ${1} + '?query=' + ${query} + '&size=' + ${currentSize} + '&secondaryOption=' + ${secondaryOption}}">Prim</a>
</li> </li>
<li class="page-item" th:classappend="${currentPage == 1 ? 'disabled' : ''}"> <li class="page-item" th:classappend="${currentPage == 1 ? 'disabled' : ''}">
<a class="page-link" th:href="@{'/buscador/alumnos/page/' + ${currentPage - 1} + '?query=' + ${query} + '&size=' + ${currentSize}}">Ant</a> <a class="page-link" th:href="@{'/buscador/alumnos/page/' + ${currentPage - 1} + '?query=' + ${query} + '&size=' + ${currentSize} + '&secondaryOption=' + ${secondaryOption}}">Ant</a>
</li> </li>
<li class="page-item" th:each="pageNum : ${#numbers.sequence(1, totalPages)}" th:classappend="${pageNum eq currentPage ? 'active' : ''}"> <li class="page-item" th:each="pageNum : ${#numbers.sequence(1, totalPages)}" th:classappend="${pageNum eq currentPage ? 'active' : ''}">
<th:block th:if="${pageNum lt 3 or pageNum gt totalPages - 2 or pageNum eq currentPage - 2 or pageNum eq currentPage - 1 or pageNum eq currentPage or pageNum eq currentPage + 1 or pageNum eq currentPage + 2}"> <a class="page-link" th:href="@{'/buscador/alumnos/page/' + ${pageNum} + '?query=' + ${query} + '&size=' + ${currentSize} + '&secondaryOption=' + ${secondaryOption}}">[[${pageNum}]]</a>
<a class="page-link" th:href="@{'/buscador/alumnos/page/' + ${pageNum} + '?query=' + ${query} + '&size=' + ${currentSize}}">[[${pageNum}]]</a>
</th:block>
<th:block th:if="${pageNum eq 3 and currentPage gt 5}">...</th:block>
<th:block th:if="${pageNum eq totalPages - 2 and currentPage lt totalPages - 4}">...</th:block>
</li> </li>
<li class="page-item" th:classappend="${currentPage == totalPages ? 'disabled' : ''}"> <li class="page-item" th:classappend="${currentPage == totalPages ? 'disabled' : ''}">
<a class="page-link" th:href="@{'/buscador/alumnos/page/' + ${currentPage + 1} + '?query=' + ${query} + '&size=' + ${currentSize}}">Sig</a> <a class="page-link" th:href="@{'/buscador/alumnos/page/' + ${currentPage + 1} + '?query=' + ${query} + '&size=' + ${currentSize} + '&secondaryOption=' + ${secondaryOption}}">Sig</a>
</li> </li>
<li class="page-item" th:classappend="${currentPage == totalPages ? 'disabled' : ''}"> <li class="page-item" th:classappend="${currentPage == totalPages ? 'disabled' : ''}">
<a class="page-link" th:href="@{'/buscador/alumnos/page/' + ${totalPages} + '?query=' + ${query} + '&size=' + ${currentSize}}">Ult</a> <a class="page-link" th:href="@{'/buscador/alumnos/page/' + ${totalPages} + '?query=' + ${query} + '&size=' + ${currentSize} + '&secondaryOption=' + ${secondaryOption}}">Ult</a>
</li> </li>
</ul> </ul>
</nav> </nav>

@ -42,7 +42,7 @@
</th> </th>
</thead> </thead>
<tbody> <tbody>
<tr class="cell" th:each="ciclo :${items}" th:data-id="${ciclo.id}"> <tr class="cell" th:each="ciclo :${ciclos}" th:data-id="${ciclo.id}">
<td> <td>
[[${ciclo.nombre}]] [[${ciclo.nombre}]]
<i class="edit-icon fas fa-pen-square"></i> <i class="edit-icon fas fa-pen-square"></i>
@ -57,24 +57,21 @@
<div class="page"> <div class="page">
<nav aria-label="Page navigation" id="paginationControls"> <nav aria-label="Page navigation" id="paginationControls">
<ul class="pagination"> <ul class="pagination">
<input type="hidden" name="secondaryOption" id="hiddenSecondaryOption" th:value="${secondaryOption}">
<li class="page-item" th:classappend="${currentPage == 1 ? 'disabled' : ''}"> <li class="page-item" th:classappend="${currentPage == 1 ? 'disabled' : ''}">
<a class="page-link" th:href="@{'/buscador/ciclos/page/' + ${1} + '?query=' + ${query} + '&size=' + ${currentSize}}">Prim</a> <a class="page-link" th:href="@{'/buscador/ciclos/page/' + ${1} + '?query=' + ${query} + '&size=' + ${currentSize} + '&secondaryOption=' + ${secondaryOption}}">Prim</a>
</li> </li>
<li class="page-item" th:classappend="${currentPage == 1 ? 'disabled' : ''}"> <li class="page-item" th:classappend="${currentPage == 1 ? 'disabled' : ''}">
<a class="page-link" th:href="@{'/buscador/ciclos/page/' + ${currentPage - 1} + '?query=' + ${query} + '&size=' + ${currentSize}}">Ant</a> <a class="page-link" th:href="@{'/buscador/ciclos/page/' + ${currentPage - 1} + '?query=' + ${query} + '&size=' + ${currentSize} + '&secondaryOption=' + ${secondaryOption}}">Ant</a>
</li> </li>
<li class="page-item" th:each="pageNum : ${#numbers.sequence(1, totalPages)}" th:classappend="${pageNum eq currentPage ? 'active' : ''}"> <li class="page-item" th:each="pageNum : ${#numbers.sequence(1, totalPages)}" th:classappend="${pageNum eq currentPage ? 'active' : ''}">
<th:block th:if="${pageNum lt 3 or pageNum gt totalPages - 2 or pageNum eq currentPage - 2 or pageNum eq currentPage - 1 or pageNum eq currentPage or pageNum eq currentPage + 1 or pageNum eq currentPage + 2}"> <a class="page-link" th:href="@{'/buscador/ciclos/page/' + ${pageNum} + '?query=' + ${query} + '&size=' + ${currentSize} + '&secondaryOption=' + ${secondaryOption}}">[[${pageNum}]]</a>
<a class="page-link" th:href="@{'/buscador/ciclos/page/' + ${pageNum} + '?query=' + ${query} + '&size=' + ${currentSize}}">[[${pageNum}]]</a>
</th:block>
<th:block th:if="${pageNum eq 3 and currentPage gt 5}">...</th:block>
<th:block th:if="${pageNum eq totalPages - 2 and currentPage lt totalPages - 4}">...</th:block>
</li> </li>
<li class="page-item" th:classappend="${currentPage == totalPages ? 'disabled' : ''}"> <li class="page-item" th:classappend="${currentPage == totalPages ? 'disabled' : ''}">
<a class="page-link" th:href="@{'/buscador/ciclos/page/' + ${currentPage + 1} + '?query=' + ${query} + '&size=' + ${currentSize}}">Sig</a> <a class="page-link" th:href="@{'/buscador/ciclos/page/' + ${currentPage + 1} + '?query=' + ${query} + '&size=' + ${currentSize} + '&secondaryOption=' + ${secondaryOption}}">Sig</a>
</li> </li>
<li class="page-item" th:classappend="${currentPage == totalPages ? 'disabled' : ''}"> <li class="page-item" th:classappend="${currentPage == totalPages ? 'disabled' : ''}">
<a class="page-link" th:href="@{'/buscador/ciclos/page/' + ${totalPages} + '?query=' + ${query} + '&size=' + ${currentSize}}">Ult</a> <a class="page-link" th:href="@{'/buscador/ciclos/page/' + ${totalPages} + '?query=' + ${query} + '&size=' + ${currentSize} + '&secondaryOption=' + ${secondaryOption}}">Ult</a>
</li> </li>
</ul> </ul>
</nav> </nav>

@ -58,7 +58,7 @@
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
<tr class="cell" th:each="contacto :${items}" th:data-id="${contacto.id}"> <tr class="cell" th:each="contacto :${contactos}" th:data-id="${contacto.id}">
<td> <td>
[[${contacto.nombre}]] [[${contacto.nombre}]]
<i class="edit-icon fas fa-pen-square"></i> <i class="edit-icon fas fa-pen-square"></i>
@ -73,27 +73,25 @@
</tbody> </tbody>
</table> </table>
</div> </div>
<div class="page"> <div class="page">
<nav aria-label="Page navigation" id="paginationControls"> <nav aria-label="Page navigation" id="paginationControls">
<ul class="pagination"> <ul class="pagination">
<input type="hidden" name="secondaryOption" id="hiddenSecondaryOption" th:value="${secondaryOption}">
<li class="page-item" th:classappend="${currentPage == 1 ? 'disabled' : ''}"> <li class="page-item" th:classappend="${currentPage == 1 ? 'disabled' : ''}">
<a class="page-link" th:href="@{'/buscador/contactos/page/' + ${1} + '?query=' + ${query} + '&size=' + ${currentSize}}">Prim</a> <a class="page-link" th:href="@{'/buscador/contactos/page/' + ${1} + '?query=' + ${query} + '&size=' + ${currentSize} + '&secondaryOption=' + ${secondaryOption}}">Prim</a>
</li> </li>
<li class="page-item" th:classappend="${currentPage == 1 ? 'disabled' : ''}"> <li class="page-item" th:classappend="${currentPage == 1 ? 'disabled' : ''}">
<a class="page-link" th:href="@{'/buscador/contactos/page/' + ${currentPage - 1} + '?query=' + ${query} + '&size=' + ${currentSize}}">Ant</a> <a class="page-link" th:href="@{'/buscador/contactos/page/' + ${currentPage - 1} + '?query=' + ${query} + '&size=' + ${currentSize} + '&secondaryOption=' + ${secondaryOption}}">Ant</a>
</li> </li>
<li class="page-item" th:each="pageNum : ${#numbers.sequence(1, totalPages)}" th:classappend="${pageNum eq currentPage ? 'active' : ''}"> <li class="page-item" th:each="pageNum : ${#numbers.sequence(1, totalPages)}" th:classappend="${pageNum eq currentPage ? 'active' : ''}">
<th:block th:if="${pageNum lt 3 or pageNum gt totalPages - 2 or pageNum eq currentPage - 2 or pageNum eq currentPage - 1 or pageNum eq currentPage or pageNum eq currentPage + 1 or pageNum eq currentPage + 2}"> <a class="page-link" th:href="@{'/buscador/contactos/page/' + ${pageNum} + '?query=' + ${query} + '&size=' + ${currentSize} + '&secondaryOption=' + ${secondaryOption}}">[[${pageNum}]]</a>
<a class="page-link" th:href="@{'/buscador/contactos/page/' + ${pageNum} + '?query=' + ${query} + '&size=' + ${currentSize}}">[[${pageNum}]]</a>
</th:block>
<th:block th:if="${pageNum eq 3 and currentPage gt 5}">...</th:block>
<th:block th:if="${pageNum eq totalPages - 2 and currentPage lt totalPages - 4}">...</th:block>
</li> </li>
<li class="page-item" th:classappend="${currentPage == totalPages ? 'disabled' : ''}"> <li class="page-item" th:classappend="${currentPage == totalPages ? 'disabled' : ''}">
<a class="page-link" th:href="@{'/buscador/contactos/page/' + ${currentPage + 1} + '?query=' + ${query} + '&size=' + ${currentSize}}">Sig</a> <a class="page-link" th:href="@{'/buscador/contactos/page/' + ${currentPage + 1} + '?query=' + ${query} + '&size=' + ${currentSize} + '&secondaryOption=' + ${secondaryOption}}">Sig</a>
</li> </li>
<li class="page-item" th:classappend="${currentPage == totalPages ? 'disabled' : ''}"> <li class="page-item" th:classappend="${currentPage == totalPages ? 'disabled' : ''}">
<a class="page-link" th:href="@{'/buscador/contactos/page/' + ${totalPages} + '?query=' + ${query} + '&size=' + ${currentSize}}">Ult</a> <a class="page-link" th:href="@{'/buscador/contactos/page/' + ${totalPages} + '?query=' + ${query} + '&size=' + ${currentSize} + '&secondaryOption=' + ${secondaryOption}}">Ult</a>
</li> </li>
</ul> </ul>
</nav> </nav>

@ -59,6 +59,7 @@
</thead> </thead>
<tbody> <tbody>
<tr class="cell" th:each="empresa :${empresas}" th:data-id="${empresa.id}"> <tr class="cell" th:each="empresa :${empresas}" th:data-id="${empresa.id}">
<td> <td>
<a th:href="@{/templates/admin/empresa/{id}(id=${empresa.id})}">[[${empresa.nombre}]]</a> <a th:href="@{/templates/admin/empresa/{id}(id=${empresa.id})}">[[${empresa.nombre}]]</a>
<i class="edit-icon fas fa-pen-square"></i> <i class="edit-icon fas fa-pen-square"></i>
@ -76,24 +77,21 @@
<div class="page"> <div class="page">
<nav aria-label="Page navigation" id="paginationControls"> <nav aria-label="Page navigation" id="paginationControls">
<ul class="pagination"> <ul class="pagination">
<input type="hidden" name="secondaryOption" id="hiddenSecondaryOption" th:value="${secondaryOption}">
<li class="page-item" th:classappend="${currentPage == 1 ? 'disabled' : ''}"> <li class="page-item" th:classappend="${currentPage == 1 ? 'disabled' : ''}">
<a class="page-link" th:href="@{'/buscador/empresas/page/' + ${1} + '?query=' + ${query} + '&size=' + ${currentSize}}">Prim</a> <a class="page-link" th:href="@{'/buscador/empresas/page/' + ${1} + '?query=' + ${query} + '&size=' + ${currentSize} + '&secondaryOption=' + ${secondaryOption}}">Prim</a>
</li> </li>
<li class="page-item" th:classappend="${currentPage == 1 ? 'disabled' : ''}"> <li class="page-item" th:classappend="${currentPage == 1 ? 'disabled' : ''}">
<a class="page-link" th:href="@{'/buscador/empresas/page/' + ${currentPage - 1} + '?query=' + ${query} + '&size=' + ${currentSize}}">Ant</a> <a class="page-link" th:href="@{'/buscador/empresas/page/' + ${currentPage - 1} + '?query=' + ${query} + '&size=' + ${currentSize} + '&secondaryOption=' + ${secondaryOption}}">Ant</a>
</li> </li>
<li class="page-item" th:each="pageNum : ${#numbers.sequence(1, totalPages)}" th:classappend="${pageNum eq currentPage ? 'active' : ''}"> <li class="page-item" th:each="pageNum : ${#numbers.sequence(1, totalPages)}" th:classappend="${pageNum eq currentPage ? 'active' : ''}">
<th:block th:if="${pageNum lt 3 or pageNum gt totalPages - 2 or pageNum eq currentPage - 2 or pageNum eq currentPage - 1 or pageNum eq currentPage or pageNum eq currentPage + 1 or pageNum eq currentPage + 2}"> <a class="page-link" th:href="@{'/buscador/empresas/page/' + ${pageNum} + '?query=' + ${query} + '&size=' + ${currentSize} + '&secondaryOption=' + ${secondaryOption}}">[[${pageNum}]]</a>
<a class="page-link" th:href="@{'/buscador/empresas/page/' + ${pageNum} + '?query=' + ${query} + '&size=' + ${currentSize}}">[[${pageNum}]]</a>
</th:block>
<th:block th:if="${pageNum eq 3 and currentPage gt 5}">...</th:block>
<th:block th:if="${pageNum eq totalPages - 2 and currentPage lt totalPages - 4}">...</th:block>
</li> </li>
<li class="page-item" th:classappend="${currentPage == totalPages ? 'disabled' : ''}"> <li class="page-item" th:classappend="${currentPage == totalPages ? 'disabled' : ''}">
<a class="page-link" th:href="@{'/buscador/empresas/page/' + ${currentPage + 1} + '?query=' + ${query} + '&size=' + ${currentSize}}">Sig</a> <a class="page-link" th:href="@{'/buscador/empresas/page/' + ${currentPage + 1} + '?query=' + ${query} + '&size=' + ${currentSize} + '&secondaryOption=' + ${secondaryOption}}">Sig</a>
</li> </li>
<li class="page-item" th:classappend="${currentPage == totalPages ? 'disabled' : ''}"> <li class="page-item" th:classappend="${currentPage == totalPages ? 'disabled' : ''}">
<a class="page-link" th:href="@{'/buscador/empresas/page/' + ${totalPages} + '?query=' + ${query} + '&size=' + ${currentSize}}">Ult</a> <a class="page-link" th:href="@{'/buscador/empresas/page/' + ${totalPages} + '?query=' + ${query} + '&size=' + ${currentSize} + '&secondaryOption=' + ${secondaryOption}}">Ult</a>
</li> </li>
</ul> </ul>
</nav> </nav>
@ -116,18 +114,19 @@
function goBack() { function goBack() {
window.history.back(); window.history.back();
} }
var $table = $('#table'); var $table = $('#table');
var $modalDelete = $('#modalDelete'); var $modalDelete = $('#modalDelete');
var $myInput = $('#myInput'); var $myInput = $('#myInput');
var $createIcon = $('#create-icon'); var $createIcon = $('#create-icon');
var isSearchBarUsed = false; var isSearchBarUsed = false;
$table.on('click', '.edit-icon', function(event) { $table.on('click', '.edit-icon', function (event) {
console.log("Edit icon clicked"); console.log("Edit icon clicked");
handleEdit(event); handleEdit(event);
}); });
$table.on('click', '.delete-icon', function(event) { $table.on('click', '.delete-icon', function (event) {
console.log("Delete icon clicked"); console.log("Delete icon clicked");
handleDelete(event); handleDelete(event);
}); });
@ -152,16 +151,16 @@
document.body.style.pointerEvents = 'none'; document.body.style.pointerEvents = 'none';
modal.style.pointerEvents = 'auto'; modal.style.pointerEvents = 'auto';
closeSpan.onclick = function() { closeSpan.onclick = function () {
modal.style.display = "none"; modal.style.display = "none";
document.body.style.pointerEvents = 'auto'; document.body.style.pointerEvents = 'auto';
} }
deleteSpan.onclick = function() { deleteSpan.onclick = function () {
$.ajax({ $.ajax({
url: '/empresa/delete/' + rowId, url: '/empresa/delete/' + rowId,
type: 'GET', type: 'GET',
success: function(response) { success: function (response) {
if (response === "La empresa ha sido eliminada") { if (response === "La empresa ha sido eliminada") {
alert("Empresa borrada con exito"); alert("Empresa borrada con exito");
window.location.reload(); window.location.reload();
@ -173,10 +172,12 @@
} }
} }
$myInput.on('input', function() {
$myInput.on('input', function () {
var query = document.querySelector('#myInput').value; var query = document.querySelector('#myInput').value;
var paginationControls = document.querySelector('#paginationControls'); var paginationControls = document.querySelector('#paginationControls');
var entriesCountDropdown = document.querySelector('#entriesCount'); var entriesCountDropdown = document.querySelector('#entriesCount');
var empresasData = document.querySelector('#empresasData').value; // Retrieve the serialized empresas
if (query == '') { if (query == '') {
isSearchBarUsed = false; isSearchBarUsed = false;
@ -213,12 +214,12 @@
tableBody.appendChild(row); tableBody.appendChild(row);
}); });
document.querySelectorAll('.edit-icon').forEach(function(icon) { document.querySelectorAll('.edit-icon').forEach(function (icon) {
icon.removeEventListener('click', handleEdit); icon.removeEventListener('click', handleEdit);
icon.addEventListener('click', handleEdit); icon.addEventListener('click', handleEdit);
console.log("Edit icon event listener attached"); console.log("Edit icon event listener attached");
}); });
document.querySelectorAll('.delete-icon').forEach(function(icon) { document.querySelectorAll('.delete-icon').forEach(function (icon) {
icon.removeEventListener('click', handleDelete); icon.removeEventListener('click', handleDelete);
icon.addEventListener('click', handleDelete); icon.addEventListener('click', handleDelete);
console.log("Delete icon event listener attached"); console.log("Delete icon event listener attached");
@ -229,7 +230,7 @@
} }
}); });
document.querySelector('#table').addEventListener('click', function(event) { document.querySelector('#table').addEventListener('click', function (event) {
if (event.target.matches('.edit-icon')) { if (event.target.matches('.edit-icon')) {
handleEdit(event); handleEdit(event);
} else if (event.target.matches('.delete-icon')) { } else if (event.target.matches('.delete-icon')) {
@ -237,24 +238,24 @@
} }
}); });
const observer = new MutationObserver(function() { const observer = new MutationObserver(function () {
document.querySelectorAll('.edit-icon').forEach(function(icon) { document.querySelectorAll('.edit-icon').forEach(function (icon) {
icon.addEventListener('click', handleEdit); icon.addEventListener('click', handleEdit);
}); });
document.querySelectorAll('.delete-icon').forEach(function(icon) { document.querySelectorAll('.delete-icon').forEach(function (icon) {
icon.addEventListener('click', handleDelete); icon.addEventListener('click', handleDelete);
}); });
}); });
observer.observe(document.querySelector('#table tbody'), { childList: true }); observer.observe(document.querySelector('#table tbody'), {childList: true});
document.getElementById('create-icon').addEventListener('click', function() { document.getElementById('create-icon').addEventListener('click', function () {
console.log("Create button clicked : TEST"); console.log("Create button clicked : TEST");
window.location = "/admin/empresa/create"; window.location = "/admin/empresa/create";
}); });
var tableHeaders = document.querySelectorAll('.table-header'); var tableHeaders = document.querySelectorAll('.table-header');
tableHeaders.forEach(function(header) { tableHeaders.forEach(function (header) {
header.addEventListener('click', function(event) { header.addEventListener('click', function (event) {
if (isSearchBarUsed) { if (isSearchBarUsed) {
event.preventDefault(); event.preventDefault();
} }

@ -46,24 +46,21 @@
<div class="page"> <div class="page">
<nav aria-label="Page navigation" id="paginationControls"> <nav aria-label="Page navigation" id="paginationControls">
<ul class="pagination"> <ul class="pagination">
<input type="hidden" name="secondaryOption" id="hiddenSecondaryOption" th:value="${secondaryOption}">
<li class="page-item" th:classappend="${currentPage == 1 ? 'disabled' : ''}"> <li class="page-item" th:classappend="${currentPage == 1 ? 'disabled' : ''}">
<a class="page-link" th:href="@{'/buscador/familia/page/' + ${1} + '?query=' + ${query} + '&size=' + ${currentSize}}">Prim</a> <a class="page-link" th:href="@{'/buscador/familias/page/' + ${1} + '?query=' + ${query} + '&size=' + ${currentSize} + '&secondaryOption=' + ${secondaryOption}}">Prim</a>
</li> </li>
<li class="page-item" th:classappend="${currentPage == 1 ? 'disabled' : ''}"> <li class="page-item" th:classappend="${currentPage == 1 ? 'disabled' : ''}">
<a class="page-link" th:href="@{'/buscador/familia/page/' + ${currentPage - 1} + '?query=' + ${query} + '&size=' + ${currentSize}}">Ant</a> <a class="page-link" th:href="@{'/buscador/familias/page/' + ${currentPage - 1} + '?query=' + ${query} + '&size=' + ${currentSize} + '&secondaryOption=' + ${secondaryOption}}">Ant</a>
</li> </li>
<li class="page-item" th:each="pageNum : ${#numbers.sequence(1, totalPages)}" th:classappend="${pageNum eq currentPage ? 'active' : ''}"> <li class="page-item" th:each="pageNum : ${#numbers.sequence(1, totalPages)}" th:classappend="${pageNum eq currentPage ? 'active' : ''}">
<th:block th:if="${pageNum lt 3 or pageNum gt totalPages - 2 or pageNum eq currentPage - 2 or pageNum eq currentPage - 1 or pageNum eq currentPage or pageNum eq currentPage + 1 or pageNum eq currentPage + 2}"> <a class="page-link" th:href="@{'/buscador/familias/page/' + ${pageNum} + '?query=' + ${query} + '&size=' + ${currentSize} + '&secondaryOption=' + ${secondaryOption}}">[[${pageNum}]]</a>
<a class="page-link" th:href="@{'/buscador/familia/page/' + ${pageNum} + '?query=' + ${query} + '&size=' + ${currentSize}}">[[${pageNum}]]</a>
</th:block>
<th:block th:if="${pageNum eq 3 and currentPage gt 5}">...</th:block>
<th:block th:if="${pageNum eq totalPages - 2 and currentPage lt totalPages - 4}">...</th:block>
</li> </li>
<li class="page-item" th:classappend="${currentPage == totalPages ? 'disabled' : ''}"> <li class="page-item" th:classappend="${currentPage == totalPages ? 'disabled' : ''}">
<a class="page-link" th:href="@{'/buscador/familia/page/' + ${currentPage + 1} + '?query=' + ${query} + '&size=' + ${currentSize}}">Sig</a> <a class="page-link" th:href="@{'/buscador/familias/page/' + ${currentPage + 1} + '?query=' + ${query} + '&size=' + ${currentSize} + '&secondaryOption=' + ${secondaryOption}}">Sig</a>
</li> </li>
<li class="page-item" th:classappend="${currentPage == totalPages ? 'disabled' : ''}"> <li class="page-item" th:classappend="${currentPage == totalPages ? 'disabled' : ''}">
<a class="page-link" th:href="@{'/buscador/familia/page/' + ${totalPages} + '?query=' + ${query} + '&size=' + ${currentSize}}">Ult</a> <a class="page-link" th:href="@{'/buscador/familias/page/' + ${totalPages} + '?query=' + ${query} + '&size=' + ${currentSize} + '&secondaryOption=' + ${secondaryOption}}">Ult</a>
</li> </li>
</ul> </ul>
</nav> </nav>

@ -56,8 +56,7 @@
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
<tr class="cell" th:each="oferta :${items}" th:data-id="${oferta.id}"> <tr class="cell" th:each="oferta :${ofertas}" th:data-id="${oferta.id}">
<td>[[${oferta.id}]]</td>
<td> <td>
[[${oferta.nombre}]] [[${oferta.nombre}]]
<i class="edit-icon fas fa-pen-square"></i> <i class="edit-icon fas fa-pen-square"></i>
@ -77,24 +76,21 @@
<div class="page"> <div class="page">
<nav aria-label="Page navigation" id="paginationControls"> <nav aria-label="Page navigation" id="paginationControls">
<ul class="pagination"> <ul class="pagination">
<input type="hidden" name="secondaryOption" id="hiddenSecondaryOption" th:value="${secondaryOption}">
<li class="page-item" th:classappend="${currentPage == 1 ? 'disabled' : ''}"> <li class="page-item" th:classappend="${currentPage == 1 ? 'disabled' : ''}">
<a class="page-link" th:href="@{'/buscador/ofertas/page/' + ${1} + '?query=' + ${query} + '&size=' + ${currentSize}}">Prim</a> <a class="page-link" th:href="@{'/buscador/ofertas/page/' + ${1} + '?query=' + ${query} + '&size=' + ${currentSize} + '&secondaryOption=' + ${secondaryOption}}">Prim</a>
</li> </li>
<li class="page-item" th:classappend="${currentPage == 1 ? 'disabled' : ''}"> <li class="page-item" th:classappend="${currentPage == 1 ? 'disabled' : ''}">
<a class="page-link" th:href="@{'/buscador/ofertas/page/' + ${currentPage - 1} + '?query=' + ${query} + '&size=' + ${currentSize}}">Ant</a> <a class="page-link" th:href="@{'/buscador/ofertas/page/' + ${currentPage - 1} + '?query=' + ${query} + '&size=' + ${currentSize} + '&secondaryOption=' + ${secondaryOption}}">Ant</a>
</li> </li>
<li class="page-item" th:each="pageNum : ${#numbers.sequence(1, totalPages)}" th:classappend="${pageNum eq currentPage ? 'active' : ''}"> <li class="page-item" th:each="pageNum : ${#numbers.sequence(1, totalPages)}" th:classappend="${pageNum eq currentPage ? 'active' : ''}">
<th:block th:if="${pageNum lt 3 or pageNum gt totalPages - 2 or pageNum eq currentPage - 2 or pageNum eq currentPage - 1 or pageNum eq currentPage or pageNum eq currentPage + 1 or pageNum eq currentPage + 2}"> <a class="page-link" th:href="@{'/buscador/ofertas/page/' + ${pageNum} + '?query=' + ${query} + '&size=' + ${currentSize} + '&secondaryOption=' + ${secondaryOption}}">[[${pageNum}]]</a>
<a class="page-link" th:href="@{'/buscador/ofertas/page/' + ${pageNum} + '?query=' + ${query} + '&size=' + ${currentSize}}">[[${pageNum}]]</a>
</th:block>
<th:block th:if="${pageNum eq 3 and currentPage gt 5}">...</th:block>
<th:block th:if="${pageNum eq totalPages - 2 and currentPage lt totalPages - 4}">...</th:block>
</li> </li>
<li class="page-item" th:classappend="${currentPage == totalPages ? 'disabled' : ''}"> <li class="page-item" th:classappend="${currentPage == totalPages ? 'disabled' : ''}">
<a class="page-link" th:href="@{'/buscador/ofertas/page/' + ${currentPage + 1} + '?query=' + ${query} + '&size=' + ${currentSize}}">Sig</a> <a class="page-link" th:href="@{'/buscador/ofertas/page/' + ${currentPage + 1} + '?query=' + ${query} + '&size=' + ${currentSize} + '&secondaryOption=' + ${secondaryOption}}">Sig</a>
</li> </li>
<li class="page-item" th:classappend="${currentPage == totalPages ? 'disabled' : ''}"> <li class="page-item" th:classappend="${currentPage == totalPages ? 'disabled' : ''}">
<a class="page-link" th:href="@{'/buscador/ofertas/page/' + ${totalPages} + '?query=' + ${query} + '&size=' + ${currentSize}}">Ult</a> <a class="page-link" th:href="@{'/buscador/ofertas/page/' + ${totalPages} + '?query=' + ${query} + '&size=' + ${currentSize} + '&secondaryOption=' + ${secondaryOption}}">Ult</a>
</li> </li>
</ul> </ul>
</nav> </nav>

@ -45,24 +45,21 @@
<div class="page"> <div class="page">
<nav aria-label="Page navigation" id="paginationControls"> <nav aria-label="Page navigation" id="paginationControls">
<ul class="pagination"> <ul class="pagination">
<input type="hidden" name="secondaryOption" id="hiddenSecondaryOption" th:value="${secondaryOption}">
<li class="page-item" th:classappend="${currentPage == 1 ? 'disabled' : ''}"> <li class="page-item" th:classappend="${currentPage == 1 ? 'disabled' : ''}">
<a class="page-link" th:href="@{'/buscador/sectores/page/' + ${1} + '?query=' + ${query} + '&size=' + ${currentSize}}">Prim</a> <a class="page-link" th:href="@{'/buscador/sectores/page/' + ${1} + '?query=' + ${query} + '&size=' + ${currentSize} + '&secondaryOption=' + ${secondaryOption}}">Prim</a>
</li> </li>
<li class="page-item" th:classappend="${currentPage == 1 ? 'disabled' : ''}"> <li class="page-item" th:classappend="${currentPage == 1 ? 'disabled' : ''}">
<a class="page-link" th:href="@{'/buscador/sectores/page/' + ${currentPage - 1} + '?query=' + ${query} + '&size=' + ${currentSize}}">Ant</a> <a class="page-link" th:href="@{'/buscador/sectores/page/' + ${currentPage - 1} + '?query=' + ${query} + '&size=' + ${currentSize} + '&secondaryOption=' + ${secondaryOption}}">Ant</a>
</li> </li>
<li class="page-item" th:each="pageNum : ${#numbers.sequence(1, totalPages)}" th:classappend="${pageNum eq currentPage ? 'active' : ''}"> <li class="page-item" th:each="pageNum : ${#numbers.sequence(1, totalPages)}" th:classappend="${pageNum eq currentPage ? 'active' : ''}">
<th:block th:if="${pageNum lt 3 or pageNum gt totalPages - 2 or pageNum eq currentPage - 2 or pageNum eq currentPage - 1 or pageNum eq currentPage or pageNum eq currentPage + 1 or pageNum eq currentPage + 2}"> <a class="page-link" th:href="@{'/buscador/sectores/page/' + ${pageNum} + '?query=' + ${query} + '&size=' + ${currentSize} + '&secondaryOption=' + ${secondaryOption}}">[[${pageNum}]]</a>
<a class="page-link" th:href="@{'/buscador/sectores/page/' + ${pageNum} + '?query=' + ${query} + '&size=' + ${currentSize}}">[[${pageNum}]]</a>
</th:block>
<th:block th:if="${pageNum eq 3 and currentPage gt 5}">...</th:block>
<th:block th:if="${pageNum eq totalPages - 2 and currentPage lt totalPages - 4}">...</th:block>
</li> </li>
<li class="page-item" th:classappend="${currentPage == totalPages ? 'disabled' : ''}"> <li class="page-item" th:classappend="${currentPage == totalPages ? 'disabled' : ''}">
<a class="page-link" th:href="@{'/buscador/sectores/page/' + ${currentPage + 1} + '?query=' + ${query} + '&size=' + ${currentSize}}">Sig</a> <a class="page-link" th:href="@{'/buscador/sectores/page/' + ${currentPage + 1} + '?query=' + ${query} + '&size=' + ${currentSize} + '&secondaryOption=' + ${secondaryOption}}">Sig</a>
</li> </li>
<li class="page-item" th:classappend="${currentPage == totalPages ? 'disabled' : ''}"> <li class="page-item" th:classappend="${currentPage == totalPages ? 'disabled' : ''}">
<a class="page-link" th:href="@{'/buscador/sectores/page/' + ${totalPages} + '?query=' + ${query} + '&size=' + ${currentSize}}">Ult</a> <a class="page-link" th:href="@{'/buscador/sectores/page/' + ${totalPages} + '?query=' + ${query} + '&size=' + ${currentSize} + '&secondaryOption=' + ${secondaryOption}}">Ult</a>
</li> </li>
</ul> </ul>
</nav> </nav>

@ -45,24 +45,21 @@
<div class="page"> <div class="page">
<nav aria-label="Page navigation" id="paginationControls"> <nav aria-label="Page navigation" id="paginationControls">
<ul class="pagination"> <ul class="pagination">
<input type="hidden" name="secondaryOption" id="hiddenSecondaryOption" th:value="${secondaryOption}">
<li class="page-item" th:classappend="${currentPage == 1 ? 'disabled' : ''}"> <li class="page-item" th:classappend="${currentPage == 1 ? 'disabled' : ''}">
<a class="page-link" th:href="@{'/buscador/skills/page/' + ${1} + '?query=' + ${query} + '&size=' + ${currentSize}}">Prim</a> <a class="page-link" th:href="@{'/buscador/skills/page/' + ${1} + '?query=' + ${query} + '&size=' + ${currentSize} + '&secondaryOption=' + ${secondaryOption}}">Prim</a>
</li> </li>
<li class="page-item" th:classappend="${currentPage == 1 ? 'disabled' : ''}"> <li class="page-item" th:classappend="${currentPage == 1 ? 'disabled' : ''}">
<a class="page-link" th:href="@{'/buscador/skills/page/' + ${currentPage - 1} + '?query=' + ${query} + '&size=' + ${currentSize}}">Ant</a> <a class="page-link" th:href="@{'/buscador/skills/page/' + ${currentPage - 1} + '?query=' + ${query} + '&size=' + ${currentSize} + '&secondaryOption=' + ${secondaryOption}}">Ant</a>
</li> </li>
<li class="page-item" th:each="pageNum : ${#numbers.sequence(1, totalPages)}" th:classappend="${pageNum eq currentPage ? 'active' : ''}"> <li class="page-item" th:each="pageNum : ${#numbers.sequence(1, totalPages)}" th:classappend="${pageNum eq currentPage ? 'active' : ''}">
<th:block th:if="${pageNum lt 3 or pageNum gt totalPages - 2 or pageNum eq currentPage - 2 or pageNum eq currentPage - 1 or pageNum eq currentPage or pageNum eq currentPage + 1 or pageNum eq currentPage + 2}"> <a class="page-link" th:href="@{'/buscador/skills/page/' + ${pageNum} + '?query=' + ${query} + '&size=' + ${currentSize} + '&secondaryOption=' + ${secondaryOption}}">[[${pageNum}]]</a>
<a class="page-link" th:href="@{'/buscador/skills/page/' + ${pageNum} + '?query=' + ${query} + '&size=' + ${currentSize}}">[[${pageNum}]]</a>
</th:block>
<th:block th:if="${pageNum eq 3 and currentPage gt 5}">...</th:block>
<th:block th:if="${pageNum eq totalPages - 2 and currentPage lt totalPages - 4}">...</th:block>
</li> </li>
<li class="page-item" th:classappend="${currentPage == totalPages ? 'disabled' : ''}"> <li class="page-item" th:classappend="${currentPage == totalPages ? 'disabled' : ''}">
<a class="page-link" th:href="@{'/buscador/skills/page/' + ${currentPage + 1} + '?query=' + ${query} + '&size=' + ${currentSize}}">Sig</a> <a class="page-link" th:href="@{'/buscador/skills/page/' + ${currentPage + 1} + '?query=' + ${query} + '&size=' + ${currentSize} + '&secondaryOption=' + ${secondaryOption}}">Sig</a>
</li> </li>
<li class="page-item" th:classappend="${currentPage == totalPages ? 'disabled' : ''}"> <li class="page-item" th:classappend="${currentPage == totalPages ? 'disabled' : ''}">
<a class="page-link" th:href="@{'/buscador/skills/page/' + ${totalPages} + '?query=' + ${query} + '&size=' + ${currentSize}}">Ult</a> <a class="page-link" th:href="@{'/buscador/skills/page/' + ${totalPages} + '?query=' + ${query} + '&size=' + ${currentSize} + '&secondaryOption=' + ${secondaryOption}}">Ult</a>
</li> </li>
</ul> </ul>
</nav> </nav>

@ -53,7 +53,7 @@
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
<tr class="cell" th:each="sucursal :${items}" th:data-id="${sucursal.id}"> <tr class="cell" th:each="sucursal :${sucursals}" th:data-id="${sucursal.id}">
<td> <td>
[[${sucursal.nombre}]] [[${sucursal.nombre}]]
<i class="edit-icon fas fa-pen-square"></i> <i class="edit-icon fas fa-pen-square"></i>
@ -70,24 +70,21 @@
<div class="page"> <div class="page">
<nav aria-label="Page navigation" id="paginationControls"> <nav aria-label="Page navigation" id="paginationControls">
<ul class="pagination"> <ul class="pagination">
<input type="hidden" name="secondaryOption" id="hiddenSecondaryOption" th:value="${secondaryOption}">
<li class="page-item" th:classappend="${currentPage == 1 ? 'disabled' : ''}"> <li class="page-item" th:classappend="${currentPage == 1 ? 'disabled' : ''}">
<a class="page-link" th:href="@{'/buscador/sucursales/page/' + ${1} + '?query=' + ${query} + '&size=' + ${currentSize}}">Prim</a> <a class="page-link" th:href="@{'/buscador/sucursales/page/' + ${1} + '?query=' + ${query} + '&size=' + ${currentSize} + '&secondaryOption=' + ${secondaryOption}}">Prim</a>
</li> </li>
<li class="page-item" th:classappend="${currentPage == 1 ? 'disabled' : ''}"> <li class="page-item" th:classappend="${currentPage == 1 ? 'disabled' : ''}">
<a class="page-link" th:href="@{'/buscador/sucursales/page/' + ${currentPage - 1} + '?query=' + ${query} + '&size=' + ${currentSize}}">Ant</a> <a class="page-link" th:href="@{'/buscador/sucursales/page/' + ${currentPage - 1} + '?query=' + ${query} + '&size=' + ${currentSize} + '&secondaryOption=' + ${secondaryOption}}">Ant</a>
</li> </li>
<li class="page-item" th:each="pageNum : ${#numbers.sequence(1, totalPages)}" th:classappend="${pageNum eq currentPage ? 'active' : ''}"> <li class="page-item" th:each="pageNum : ${#numbers.sequence(1, totalPages)}" th:classappend="${pageNum eq currentPage ? 'active' : ''}">
<th:block th:if="${pageNum lt 3 or pageNum gt totalPages - 2 or pageNum eq currentPage - 2 or pageNum eq currentPage - 1 or pageNum eq currentPage or pageNum eq currentPage + 1 or pageNum eq currentPage + 2}"> <a class="page-link" th:href="@{'/buscador/sucursales/page/' + ${pageNum} + '?query=' + ${query} + '&size=' + ${currentSize} + '&secondaryOption=' + ${secondaryOption}}">[[${pageNum}]]</a>
<a class="page-link" th:href="@{'/buscador/sucursales/page/' + ${pageNum} + '?query=' + ${query} + '&size=' + ${currentSize}}">[[${pageNum}]]</a>
</th:block>
<th:block th:if="${pageNum eq 3 and currentPage gt 5}">...</th:block>
<th:block th:if="${pageNum eq totalPages - 2 and currentPage lt totalPages - 4}">...</th:block>
</li> </li>
<li class="page-item" th:classappend="${currentPage == totalPages ? 'disabled' : ''}"> <li class="page-item" th:classappend="${currentPage == totalPages ? 'disabled' : ''}">
<a class="page-link" th:href="@{'/buscador/sucursales/page/' + ${currentPage + 1} + '?query=' + ${query} + '&size=' + ${currentSize}}">Sig</a> <a class="page-link" th:href="@{'/buscador/sucursales/page/' + ${currentPage + 1} + '?query=' + ${query} + '&size=' + ${currentSize} + '&secondaryOption=' + ${secondaryOption}}">Sig</a>
</li> </li>
<li class="page-item" th:classappend="${currentPage == totalPages ? 'disabled' : ''}"> <li class="page-item" th:classappend="${currentPage == totalPages ? 'disabled' : ''}">
<a class="page-link" th:href="@{'/buscador/sucursales/page/' + ${totalPages} + '?query=' + ${query} + '&size=' + ${currentSize}}">Ult</a> <a class="page-link" th:href="@{'/buscador/sucursales/page/' + ${totalPages} + '?query=' + ${query} + '&size=' + ${currentSize} + '&secondaryOption=' + ${secondaryOption}}">Ult</a>
</li> </li>
</ul> </ul>
</nav> </nav>

Loading…
Cancel
Save

Powered by INFORMATICA.FP.EDU.ES.