Implementar busqueda de elemntos multiples como empresas de varios sectores. Ajustes a controlador,repositorio y servicio para implemetralo.

master
vicsash 4 months ago
parent 48ee5e61e5
commit 8cef213edf

@ -16,6 +16,7 @@ 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 javax.servlet.http.HttpSession;
import java.text.ParseException;
import java.util.*; import java.util.*;
@Controller @Controller
@ -60,16 +61,27 @@ public class BuscadorController {
@RequestParam(defaultValue = "asc") String sortDir, @RequestParam(defaultValue = "asc") String sortDir,
@RequestParam String secondaryOption, @RequestParam String secondaryOption,
Model model){ Model model){
Page<Empresa> page = empresaService.getPage(pageNum, size, sortField, sortDir, query, secondaryOption); String[] queryMultiWord = query.split(",");
List<String> queryList = new ArrayList<>();
for (String queryForList : queryMultiWord) {
String trimmedQuery = queryForList.trim();
if (!trimmedQuery.isEmpty()) {
queryList.add(trimmedQuery);
}
}
List<Integer> itemsPage = Arrays.asList(5, 10, 15, 20, 25, 50); List<Integer> itemsPage = Arrays.asList(5, 10, 15, 20, 25, 50);
Page<Empresa> page = null;
if(queryMultiWord.length>1){
page = empresaService.getPageMultiWord(pageNum, size, sortField, sortDir, queryList, secondaryOption);
}else{
page = empresaService.getPage(pageNum, size, sortField, sortDir, query, secondaryOption);
}
if(page!=null){ if(page!=null){
List<Empresa> empresas = page.getContent(); List<Empresa> empresas = page.getContent();
addPaginationAttributes(model, pageNum, page, sortField, sortDir, query, itemsPage, size); addPaginationAttributes(model, pageNum, page, sortField, sortDir, itemsPage, size);
model.addAttribute("empresas", empresas); model.addAttribute("empresas", empresas);
model.addAttribute("query", query); model.addAttribute("query", query);
model.addAttribute("secondaryOption", secondaryOption); model.addAttribute("secondaryOption", secondaryOption);
}else{
// System.out.println("No se encontraron empresas");
} }
return "/list/empresas"; return "/list/empresas";
} }
@ -91,7 +103,6 @@ public class BuscadorController {
} }
model.addAttribute("secondaryOption",secondaryOption); model.addAttribute("secondaryOption",secondaryOption);
return "/list/sectores"; return "/list/sectores";
} }
@GetMapping("/contactos/page/{pageNum}") @GetMapping("/contactos/page/{pageNum}")
@ -100,18 +111,29 @@ public class BuscadorController {
@RequestParam(defaultValue = "10") int size, @RequestParam(defaultValue = "10") int size,
@RequestParam(defaultValue = "nombre") String sortField, @RequestParam(defaultValue = "nombre") String sortField,
@RequestParam(defaultValue = "asc") String sortDir, @RequestParam(defaultValue = "asc") String sortDir,
@RequestParam(defaultValue = "") String secondaryOption, @RequestParam String secondaryOption,
Model model) { Model model) {
Page<Contacto> page = contactosService.getPage(pageNum, size, sortField, sortDir, query, secondaryOption); String[] queryMultiWord = query.split(",");
List<String> queryList = new ArrayList<>();
for (String queryForList : queryMultiWord) {
String trimmedQuery = queryForList.trim();
if (!trimmedQuery.isEmpty()) {
queryList.add(trimmedQuery);
}
}
List<Integer> itemsPage = Arrays.asList(5, 10, 15, 20, 25, 50); List<Integer> itemsPage = Arrays.asList(5, 10, 15, 20, 25, 50);
Page<Contacto> page = null;
if(queryMultiWord.length>1){
page = contactosService.getPageMultiWord(pageNum, size, sortField, sortDir, queryList, secondaryOption);
}else{
page = contactosService.getPage(pageNum, size, sortField, sortDir, query, secondaryOption);
}
if(page!=null){ if(page!=null){
List<Contacto> contactos = page.getContent(); List<Contacto> contactos = page.getContent();
addPaginationAttributes(model, pageNum, page, sortField, sortDir, query, itemsPage, size); addPaginationAttributes(model, pageNum, page, sortField, sortDir, itemsPage, size);
model.addAttribute("contactos", contactos); model.addAttribute("contactos", contactos);
model.addAttribute("query", query); model.addAttribute("query", query);
model.addAttribute("secondaryOption", secondaryOption); model.addAttribute("secondaryOption", secondaryOption);
}else{
//System.out.println("No se encontraron Contactos");
} }
return "/list/contactos"; return "/list/contactos";
} }
@ -122,18 +144,30 @@ public class BuscadorController {
@RequestParam(defaultValue = "10") int size, @RequestParam(defaultValue = "10") int size,
@RequestParam(defaultValue = "nombre") String sortField, @RequestParam(defaultValue = "nombre") String sortField,
@RequestParam(defaultValue = "asc") String sortDir, @RequestParam(defaultValue = "asc") String sortDir,
@RequestParam(defaultValue = "") String secondaryOption, @RequestParam String secondaryOption,
Model model){ Model model) {
Page<Sucursal> page = sucursalService.getPage(pageNum, size, sortField, sortDir, query, secondaryOption); String[] queryMultiWord = query.split(",");
List<String> queryList = new ArrayList<>();
for (String queryForList : queryMultiWord) {
String trimmedQuery = queryForList.trim();
if (!trimmedQuery.isEmpty()) {
queryList.add(trimmedQuery);
}
}
List<Integer> itemsPage = Arrays.asList(5, 10, 15, 20, 25, 50); List<Integer> itemsPage = Arrays.asList(5, 10, 15, 20, 25, 50);
Page<Sucursal> page = null;
if(queryMultiWord.length>1){
page = sucursalService.getPageMultiWord(pageNum, size, sortField, sortDir, queryList, secondaryOption);
}else{
page = sucursalService.getPage(pageNum, size, sortField, sortDir, query, secondaryOption);
}
if(page!=null){ if(page!=null){
List<Sucursal> sucursals = page.getContent(); List<Sucursal> sucursales = page.getContent();
addPaginationAttributes(model, pageNum, page, sortField, sortDir, query, itemsPage, size); addPaginationAttributes(model, pageNum, page, sortField, sortDir, itemsPage, size);
model.addAttribute("sucursals",sucursals); model.addAttribute("sucursales", sucursales);
model.addAttribute("query", query); model.addAttribute("query", query);
model.addAttribute("secondaryOption", secondaryOption); model.addAttribute("secondaryOption", secondaryOption);
}else{
// System.out.println("No se encontraron sucursales");
} }
return "/list/sucursales"; return "/list/sucursales";
} }
@ -145,17 +179,30 @@ public class BuscadorController {
@RequestParam(defaultValue = "nombre") String sortField, @RequestParam(defaultValue = "nombre") String sortField,
@RequestParam(defaultValue = "asc") String sortDir, @RequestParam(defaultValue = "asc") String sortDir,
@RequestParam(defaultValue = "") String secondaryOption, @RequestParam(defaultValue = "") String secondaryOption,
Model model){ Model model) throws ParseException {
Page<Oferta> page = ofertasService.getPage(pageNum, size, sortField, sortDir, query, secondaryOption); System.out.println("Query: TEST " + query);
String[] queryMultiWord = query.split(",");
List<String> queryList = new ArrayList<>();
for (String queryForList : queryMultiWord) {
String trimmedQuery = queryForList.trim();
if (!trimmedQuery.isEmpty()) {
queryList.add(trimmedQuery);
}
}
List<Integer> itemsPage = Arrays.asList(5, 10, 15, 20, 25, 50); List<Integer> itemsPage = Arrays.asList(5, 10, 15, 20, 25, 50);
Page<Oferta> page = null;
if(queryMultiWord.length>1){
page = ofertasService.getPageMultiWord(pageNum, size, sortField, sortDir, queryList, secondaryOption);
}else{
page = ofertasService.getPage(pageNum, size, sortField, sortDir, query, secondaryOption);
}
if(page!=null){ if(page!=null){
List<Oferta> ofertas = page.getContent(); List<Oferta> ofertas = page.getContent();
addPaginationAttributes(model, pageNum, page, sortField, sortDir, query, itemsPage, size); addPaginationAttributes(model, pageNum, page, sortField, sortDir, itemsPage, size);
model.addAttribute("ofertas", ofertas); model.addAttribute("ofertas", ofertas);
model.addAttribute("query", query); model.addAttribute("query", query);
model.addAttribute("secondaryOption", secondaryOption); model.addAttribute("secondaryOption", secondaryOption);
}else{
// System.out.println("No se encontraron ofertas");
} }
return "/list/ofertas"; return "/list/ofertas";
} }
@ -190,17 +237,30 @@ public class BuscadorController {
@RequestParam(defaultValue = "nombre") String sortField, @RequestParam(defaultValue = "nombre") String sortField,
@RequestParam(defaultValue = "asc") String sortDir, @RequestParam(defaultValue = "asc") String sortDir,
@RequestParam(defaultValue = "") String secondaryOption, @RequestParam(defaultValue = "") String secondaryOption,
Model model) { Model model) throws ParseException {
Page<Ciclo> page =cicloService.getPage(pageNum, size, sortField, sortDir, query, secondaryOption); System.out.println("Query: TEST " + query);
String[] queryMultiWord = query.split(",");
List<String> queryList = new ArrayList<>();
for (String queryForList : queryMultiWord) {
String trimmedQuery = queryForList.trim();
if (!trimmedQuery.isEmpty()) {
queryList.add(trimmedQuery);
}
}
List<Integer> itemsPage = Arrays.asList(5, 10, 15, 20, 25, 50); List<Integer> itemsPage = Arrays.asList(5, 10, 15, 20, 25, 50);
Page<Ciclo> page = null;
if(queryMultiWord.length>1){
page = cicloService.getPageMultiWord(pageNum, size, sortField, sortDir, queryList, secondaryOption);
}else{
page = cicloService.getPage(pageNum, size, sortField, sortDir, query, secondaryOption);
}
if(page!=null){ if(page!=null){
List<Ciclo> ciclos = page.getContent(); List<Ciclo> ciclos = page.getContent();
addPaginationAttributes(model, pageNum, page, sortField, sortDir, query, itemsPage, size); addPaginationAttributes(model, pageNum, page, sortField, sortDir, itemsPage, size);
model.addAttribute("ciclos", ciclos); model.addAttribute("ciclos", ciclos);
model.addAttribute("query", query); model.addAttribute("query", query);
model.addAttribute("secondaryOption", secondaryOption); model.addAttribute("secondaryOption", secondaryOption);
}else{
// System.out.println("No se encontraron ofertas");
} }
return "/list/ciclos"; return "/list/ciclos";
} }
@ -214,17 +274,32 @@ public class BuscadorController {
@RequestParam(defaultValue = "") String secondaryOption, @RequestParam(defaultValue = "") String secondaryOption,
Model model) { Model model) {
Page<Alumno> page = alumnoService.getPage(pageNum, size, sortField, sortDir, query, secondaryOption); String[] queryMultiWord = query.split(",");
List<String> queryList = new ArrayList<>();
for (String queryForList : queryMultiWord) {
String trimmedQuery = queryForList.trim();
if (!trimmedQuery.isEmpty()) {
queryList.add(trimmedQuery);
}
}
List<Integer> itemsPage = Arrays.asList(5, 10, 15, 20, 25, 50); List<Integer> itemsPage = Arrays.asList(5, 10, 15, 20, 25, 50);
Page<Alumno> page = null;
if(queryMultiWord.length>1){
page = alumnoService.getPageMultiWord(pageNum, size, sortField, sortDir, queryList, secondaryOption);
}else{
page = alumnoService.getPage(pageNum, size, sortField, sortDir, query, secondaryOption);
}
if(page!=null){ if(page!=null){
List<Alumno> alumnos = page.getContent(); List<Alumno> alumnos = page.getContent();
addPaginationAttributes(model, pageNum, page, sortField, sortDir, query, itemsPage, size); addPaginationAttributes(model, pageNum, page, sortField, sortDir, itemsPage, size);
model.addAttribute("alumnos", alumnos); model.addAttribute("alumnos", alumnos);
model.addAttribute("query", query); model.addAttribute("query", query);
model.addAttribute("secondaryOption", secondaryOption); model.addAttribute("secondaryOption", secondaryOption);
}else{
// System.out.println("No se encontraron alumnos");
} }
return "/list/alumnos"; return "/list/alumnos";
} }
@ -268,7 +343,7 @@ 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) { public void addPaginationAttributes(Model model, int pageNum, Page<?> page, String sortField, String sortDir, List<Integer> itemsPage, int size) {
model.addAttribute("currentPage", pageNum); model.addAttribute("currentPage", pageNum);
model.addAttribute("totalPages", page.getTotalPages()); model.addAttribute("totalPages", page.getTotalPages());
model.addAttribute("totalItems", page.getTotalElements()); model.addAttribute("totalItems", page.getTotalElements());

@ -1,9 +1,14 @@
package com.example.proyectofinal.interfaces; package com.example.proyectofinal.interfaces;
import com.example.proyectofinal.models.empresas.Contacto;
import org.springframework.data.domain.Page; import org.springframework.data.domain.Page;
import java.util.List;
public interface IPagination<T> { public interface IPagination<T> {
Page<T> findAllPaginated(int pageNum, int size, String sortField, String sortDir); Page<T> findAllPaginated(int pageNum, int size, String sortField, String sortDir);
Page<T> getPageMultiWord(int pageNum, int size, String sortField, String sortDir, List<String> queryList, String secondaryOption);
} }

@ -4,9 +4,11 @@ import com.example.proyectofinal.models.empresas.Alumno;
import org.springframework.data.domain.Page; import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest; 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;
import org.springframework.data.repository.query.Param;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@ -57,6 +59,15 @@ public interface AlumnoRepository extends JpaRepository<Alumno, Long> {
@Query("SELECT a FROM Alumno a WHERE a.ciclo.nombre like ?1") @Query("SELECT a FROM Alumno a WHERE a.ciclo.nombre like ?1")
Page<Alumno> findAlumnoByCiclo(String query, PageRequest of); Page<Alumno> findAlumnoByCiclo(String query, PageRequest of);
@Query("SELECT a FROM Alumno a WHERE lower(a.ciclo.nombre) IN :ciclos")
Page<Alumno> findAlumnoByNombres(@Param("ciclos") String ciclos, Pageable pageable);
@Query("SELECT a FROM Alumno a WHERE lower(a.apellido) IN :queryList or lower(a.apellido2) IN :queryList")
Page<Alumno> findAlumnoByApellidos(@Param("queryList") String queryList, PageRequest of);
@Query("SELECT a FROM Alumno a WHERE lower(a.ciclo.nombre) IN :ciclos")
Page<Alumno> findAlumnoByCiclos(@Param("ciclos") String ciclos, Pageable pageable);
// @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);

@ -3,8 +3,10 @@ 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.Page;
import org.springframework.data.domain.PageRequest; 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.Query; import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import java.lang.reflect.Array; import java.lang.reflect.Array;
import java.util.ArrayList; import java.util.ArrayList;
@ -26,4 +28,10 @@ public interface CicloRepository extends JpaRepository<Ciclo, Long> {
@Query("SELECT c FROM Ciclo c WHERE c.codigo LIKE %?1%") @Query("SELECT c FROM Ciclo c WHERE c.codigo LIKE %?1%")
Page<Ciclo> findCicloByCodigo(String query, PageRequest of); Page<Ciclo> findCicloByCodigo(String query, PageRequest of);
@Query("SELECT c FROM Ciclo c WHERE LOWER(c.familia.nombre) LIKE LOWER(CONCAT('%', :query, '%'))")
Page<Ciclo> findCicloByFamilias(@Param("query") String query, Pageable pageable);
@Query("SELECT c FROM Ciclo c WHERE LOWER(c.codigo) LIKE LOWER(CONCAT('%', :query, '%'))")
Page<Ciclo> findCicloByCodigos(@Param("query") String query, Pageable pageable);
} }

@ -3,6 +3,7 @@ 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.Page;
import org.springframework.data.domain.PageRequest; 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;
@ -36,4 +37,10 @@ public interface ContactoRepository extends JpaRepository<Contacto, Long> {
@Query("SELECT c FROM Contacto c WHERE c.empresa.nombre LIKE %:query%") @Query("SELECT c FROM Contacto c WHERE c.empresa.nombre LIKE %:query%")
Page<Contacto> findContactoByEmpresa(String query, PageRequest of); Page<Contacto> findContactoByEmpresa(String query, PageRequest of);
@Query("SELECT c FROM Contacto c WHERE lower(c.nombre) IN :names")
Page<Contacto> findContactosByNames(@Param("names") List<String> names, Pageable pageable);
@Query("SELECT c FROM Contacto c WHERE lower(c.empresa.nombre) IN :companyNames")
Page<Contacto> findContactosByCompanyNames(@Param("companyNames") List<String> companyNames, Pageable pageable);
} }

@ -38,7 +38,7 @@ public interface EmpressaRepository extends JpaRepository<Empresa, Long>, JpaSpe
Page<Empresa> empresaBySector(@Param("sectorId") Long sectorId, Pageable pageable); Page<Empresa> empresaBySector(@Param("sectorId") Long sectorId, Pageable pageable);
// In EmpressaRepository.java // In EmpressaRepository.java
@Query("SELECT e FROM Empresa e WHERE e.sector.nombre = :sectorName") @Query("SELECT e FROM Empresa e WHERE e.sector.nombre like :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%") @Query("SELECT e FROM Empresa e WHERE e.nombre LIKE %:query%")
@ -47,8 +47,18 @@ public interface EmpressaRepository extends JpaRepository<Empresa, Long>, JpaSpe
@Query("SELECT e FROM Empresa e WHERE e.keywords LIKE %:query%") @Query("SELECT e FROM Empresa e WHERE e.keywords LIKE %:query%")
Page<Empresa> findEmpresasByKeywords(String query, PageRequest of); Page<Empresa> findEmpresasByKeywords(String query, PageRequest of);
// @Query() @Query("SELECT e FROM Empresa e WHERE lower(e.sector.nombre) IN :sectors")
// List<Empresa> findByQueryAndSecondaryOption(String query, String secondaryQuery); Page<Empresa> findEmpresasBySectorNames(@Param("sectors") List<String> sectors, Pageable pageable);
@Query("SELECT e FROM Empresa e WHERE lower(e.nombre) IN :queryList")
Page<Empresa> findEmpresasByEmpresaNames(List<String> queryList, PageRequest of);
@Query("SELECT e FROM Empresa e WHERE lower(e.keywords) LIKE lower(concat('%', :query, '%'))")
Page<Empresa> findEmpresasByMultKeywords(@Param("query") String query, Pageable pageable);
// @Query()
// List<Empresa> findByQueryAndSecondaryOption(String query, String secondaryQuery);
} }

@ -9,6 +9,7 @@ import org.springframework.data.jpa.repository.Modifying;
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 java.util.Date;
import java.util.List; import java.util.List;
public interface OfertaRepository extends JpaRepository<Oferta, Long> { public interface OfertaRepository extends JpaRepository<Oferta, Long> {
@ -50,10 +51,24 @@ public interface OfertaRepository extends JpaRepository<Oferta, Long> {
@Query("SELECT o FROM Oferta o WHERE o.nombre LIKE %:query%") @Query("SELECT o FROM Oferta o WHERE o.nombre LIKE %:query%")
Page<Oferta> findOfertaByNombre(String query, PageRequest of); Page<Oferta> findOfertaByNombre(String query, PageRequest of);
@Query("SELECT o FROM Oferta o WHERE o.fecha LIKE %:query%") @Query("SELECT o FROM Oferta o WHERE o.fecha < :query")
Page<Oferta> findOfertaByFecha(String query, PageRequest of); Page<Oferta> findOfertaByFechaAntes(Date query, PageRequest of);
@Query("SELECT o FROM Oferta o WHERE o.sucursal.nombre LIKE %:query%") @Query("SELECT o FROM Oferta o WHERE o.fecha > :query")
Page<Oferta> findOfertaByEmpresa(String query, PageRequest of); Page<Oferta> findOfertaByFechaDespues(Date query, PageRequest of);
@Query("SELECT o FROM Oferta o WHERE o.sucursal.empresa.nombre LIKE %:query%")
Page<Oferta> findOfertaByEmpresa(@Param("query") String query, Pageable pageable);
@Query(value = "SELECT * FROM ofertas o WHERE YEAR(o.fecha) = YEAR(:dateQuery)", nativeQuery = true)
Page<Oferta> findOfertaByFechaAnyo(@Param("dateQuery") Date dateQuery, Pageable pageable);
@Query("SELECT o FROM Oferta o WHERE lower(o.nombre) IN :queryList")
Page<Oferta> findOfertasByNombres(@Param("queryList") String queryList, Pageable pageable);
@Query("SELECT o FROM Oferta o WHERE lower(o.sucursal.empresa.nombre) IN :queryList")
Page<Oferta> findOfertaByEmpresas(@Param("queryList") String queryList, Pageable pageable);
@Query("SELECT o FROM Oferta o JOIN o.skills s WHERE lower(s.nombre) IN :queryList")
Page<Oferta> findOfertaBySkills(@Param("queryList") String queryList, Pageable pageable);
} }

@ -3,6 +3,7 @@ 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.Page;
import org.springframework.data.domain.PageRequest; 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.Query; import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param; import org.springframework.data.repository.query.Param;
@ -33,4 +34,13 @@ public interface SucursalRepository extends JpaRepository<Sucursal, Long> {
@Query("SELECT s FROM Sucursal s WHERE s.localidad LIKE %:query%") @Query("SELECT s FROM Sucursal s WHERE s.localidad LIKE %:query%")
Page<Sucursal> findSucursalByLocalidad(String query, PageRequest of); Page<Sucursal> findSucursalByLocalidad(String query, PageRequest of);
@Query("SELECT s FROM Sucursal s WHERE s.nombre LIKE %:query%")
Page<Sucursal> findSucursalesByNombre(@Param("query") String query, Pageable pageable);
@Query("SELECT s FROM Sucursal s WHERE s.empresa.nombre LIKE %:query%")
Page<Sucursal> findSucursalesByEmpresa(@Param("query") String query, Pageable pageable);
@Query("SELECT s FROM Sucursal s WHERE s.localidad LIKE %:query%")
Page<Sucursal> findSucursalesByLocalidad(@Param("query") String query, Pageable pageable);
} }

@ -4,13 +4,11 @@ import com.example.proyectofinal.models.empresas.Alumno;
import com.example.proyectofinal.repositories.empresas.AlumnoRepository; import com.example.proyectofinal.repositories.empresas.AlumnoRepository;
import com.example.proyectofinal.servicios.implemetations.IAlumno; import com.example.proyectofinal.servicios.implemetations.IAlumno;
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.*;
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.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.List; import java.util.List;
@Service @Service
@ -18,7 +16,6 @@ public class AlumnoService implements IAlumno{
@Autowired @Autowired
private AlumnoRepository alumnoRepository; private AlumnoRepository alumnoRepository;
@Override @Override
public Page<Alumno> getPage(int pageNum, int size, String sortField, String sortDir, String query, String secondaryOption) { public Page<Alumno> getPage(int pageNum, int size, String sortField, String sortDir, String query, String secondaryOption) {
if(secondaryOption.equalsIgnoreCase("Todo")){ if(secondaryOption.equalsIgnoreCase("Todo")){
@ -45,14 +42,8 @@ public class AlumnoService implements IAlumno{
return alumnoRepository.findAll(); return alumnoRepository.findAll();
} }
@Override
public Page<Alumno> 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 @Override
public Alumno findById(Long id) { public Alumno findById(Long id) {
return alumnoRepository.findById(id).orElse(null); return alumnoRepository.findById(id).orElse(null);
@ -100,6 +91,39 @@ public class AlumnoService implements IAlumno{
} }
} }
@Override
public Page<Alumno> 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 Page<Alumno> getPageMultiWord(int pageNum, int size, String sortField, String sortDir, List<String> queryList, String secondaryOption) {
List<Alumno> allMatches = new ArrayList<>();
for (String query : queryList) {
query = query.trim().toLowerCase();
Page<Alumno> page;
if (secondaryOption.equals("Nombre")) {
page = alumnoRepository.findAlumnoByNombres(query, PageRequest.of(pageNum - 1, size, Sort.by(sortField).ascending()));
allMatches.addAll(page.getContent());
} else if (secondaryOption.equals("Apellido")) {
page = alumnoRepository.findAlumnoByApellidos(query, PageRequest.of(pageNum - 1, size, Sort.by(sortField).ascending()));
allMatches.addAll(page.getContent());
} else if (secondaryOption.equals("Ciclo")) {
page = alumnoRepository.findAlumnoByCiclos(query, PageRequest.of(pageNum - 1, size, Sort.by(sortField).ascending()));
allMatches.addAll(page.getContent());
} else if (secondaryOption.equals("Keywords")) {
page = alumnoRepository.findAlumnoByKeywords(query, PageRequest.of(pageNum - 1, size, Sort.by(sortField).ascending()));
allMatches.addAll(page.getContent());
}
}
// Convert the list of all matches to a page
int start = (int) PageRequest.of(pageNum - 1, size).getOffset();
int end = Math.min((start + PageRequest.of(pageNum - 1, size).getPageSize()), allMatches.size());
return new PageImpl<>(allMatches.subList(start, end), PageRequest.of(pageNum - 1, size), allMatches.size());
}
} }

@ -5,13 +5,11 @@ import com.example.proyectofinal.models.empresas.Familia;
import com.example.proyectofinal.repositories.empresas.CicloRepository; import com.example.proyectofinal.repositories.empresas.CicloRepository;
import com.example.proyectofinal.servicios.implemetations.ICiclos; import com.example.proyectofinal.servicios.implemetations.ICiclos;
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.*;
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.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.List; import java.util.List;
@Service @Service
@ -23,14 +21,7 @@ public class CicloService implements ICiclos {
@Autowired @Autowired
private OfertaService ofertaService; private OfertaService ofertaService;
@Override
public Page<Ciclo> 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 @Override
public List<Ciclo> findAll() { public List<Ciclo> findAll() {
@ -104,6 +95,33 @@ public class CicloService implements ICiclos {
return null; return null;
} }
} }
@Override
public Page<Ciclo> 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 Page<Ciclo> getPageMultiWord(int pageNum, int size, String sortField, String sortDir, List<String> queryList, String secondaryOption) {
List<Ciclo> allMatches = new ArrayList<>();
for (String query : queryList) {
query = query.trim().toLowerCase();
Page<Ciclo> page;
if (secondaryOption.equals("Familia")) {
page = cicloRepository.findCicloByFamilias(query, PageRequest.of(pageNum - 1, size, Sort.by(sortField).ascending()));
allMatches.addAll(page.getContent());
} else if (secondaryOption.equals("Codigo")) {
page = cicloRepository.findCicloByCodigos(query, PageRequest.of(pageNum - 1, size, Sort.by(sortField).ascending()));
allMatches.addAll(page.getContent());
}
}
// Convert the list of all matches to a page
int start = (int) PageRequest.of(pageNum - 1, size).getOffset();
int end = Math.min((start + PageRequest.of(pageNum - 1, size).getPageSize()), allMatches.size());
return new PageImpl<>(allMatches.subList(start, end), PageRequest.of(pageNum - 1, size), allMatches.size());
}
} }

@ -5,14 +5,14 @@ import com.example.proyectofinal.models.empresas.Empresa;
import com.example.proyectofinal.repositories.empresas.EmpressaRepository; 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.*;
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.stereotype.Service;
import com.example.proyectofinal.repositories.empresas.ContactoRepository; import com.example.proyectofinal.repositories.empresas.ContactoRepository;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List; import java.util.List;
@Service @Service
@ -34,6 +34,8 @@ public class ContactosService implements IContactos {
return this.contactoRepository.findAll(pageRequest); return this.contactoRepository.findAll(pageRequest);
} }
@Override @Override
public Contacto findById(Long id) { public Contacto findById(Long id) {
return contactoRepository.findById(id).orElse(null); return contactoRepository.findById(id).orElse(null);
@ -105,5 +107,23 @@ public class ContactosService implements IContactos {
} }
} }
@Override
public Page<Contacto> getPageMultiWord(int pageNum, int size, String sortField, String sortDir, List<String> queryList, String secondaryOption) {
List<Contacto> allMatches = new ArrayList<>();
for (String query : queryList) {
query = query.trim().toLowerCase();
Page<Contacto> page;
if (secondaryOption.equals("Nombre")) {
page = contactoRepository.findContactosByNames(Collections.singletonList(query), PageRequest.of(pageNum - 1, size, Sort.by(sortField).ascending()));
allMatches.addAll(page.getContent());
} else if (secondaryOption.equals("Empresa")) {
page = contactoRepository.findContactosByCompanyNames(Collections.singletonList(query), PageRequest.of(pageNum - 1, size, Sort.by(sortField).ascending()));
allMatches.addAll(page.getContent());
}
}
// Convert the list of all matches to a page
int start = (int) PageRequest.of(pageNum - 1, size).getOffset();
int end = Math.min((start + PageRequest.of(pageNum - 1, size).getPageSize()), allMatches.size());
return new PageImpl<>(allMatches.subList(start, end), PageRequest.of(pageNum - 1, size), allMatches.size());
}
} }

@ -5,6 +5,7 @@ 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;
import com.example.proyectofinal.servicios.implemetations.IEmpresa; import com.example.proyectofinal.servicios.implemetations.IEmpresa;
import org.springframework.data.domain.PageImpl;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
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;
@ -12,11 +13,12 @@ import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort; import org.springframework.data.domain.Sort;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List; import java.util.List;
@Service @Service
public class EmpresaService implements IEmpresa { public class EmpresaService implements IEmpresa {
@Autowired @Autowired
private EmpressaRepository empresaRepository; private EmpressaRepository empresaRepository;
@Autowired @Autowired
@ -28,20 +30,6 @@ public class EmpresaService implements IEmpresa {
@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) {
if(secondaryOption.equalsIgnoreCase("Todo")){
return findAllPaginated(pageNum, size, sortField, sortDir);
}else if (secondaryOption.equals("Sector")) {
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 {
return null;
}
}
@ -103,6 +91,43 @@ public class EmpresaService implements IEmpresa {
public List<Empresa> findBySector(Long id) { public List<Empresa> findBySector(Long id) {
return empresaRepository.findBySector(id); return empresaRepository.findBySector(id);
} }
@Override
public Page<Empresa> 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("Sector")) {
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 {
return null;
}
}
@Override
public Page<Empresa> getPageMultiWord(int pageNum, int size, String sortField, String sortDir,List<String> queryMultiWord, String secondaryOption) {
List<Empresa> allMatches = new ArrayList<>();
for (String query : queryMultiWord) {
query = query.trim().toLowerCase();
Page<Empresa> page;
if (secondaryOption.equals("Nombre")) {
page = empresaRepository.findEmpresasByEmpresaName(query, PageRequest.of(pageNum - 1, size, Sort.by(sortField).ascending()));
allMatches.addAll(page.getContent());
} else if (secondaryOption.equals("Sector")) {
page = empresaRepository.findEmpresasBySectorName(query, PageRequest.of(pageNum - 1, size, Sort.by(sortField).ascending()));
allMatches.addAll(page.getContent());
} else if (secondaryOption.equals("Keywords")) {
page = empresaRepository.findEmpresasByMultKeywords(query, PageRequest.of(pageNum - 1, size, Sort.by(sortField).ascending()));
allMatches.addAll(page.getContent());
}
}
// Convert the list of all matches to a page
int start = (int) PageRequest.of(pageNum - 1, size).getOffset();
int end = Math.min((start + PageRequest.of(pageNum - 1, size).getPageSize()), allMatches.size());
return new PageImpl<>(allMatches.subList(start, end), PageRequest.of(pageNum - 1, size), allMatches.size());
}
// @Override // @Override
// public List<Empresa> getEmpresasByQueryAndSecondaryOption(String query, String secondaryQuery) { // public List<Empresa> getEmpresasByQueryAndSecondaryOption(String query, String secondaryQuery) {

@ -36,6 +36,11 @@ public class FamiliaService implements IFamilia {
return result; return result;
} }
@Override
public Page<Familia> getPageMultiWord(int pageNum, int size, String sortField, String sortDir, List<String> queryList, String secondaryOption) {
return null;
}
@Override @Override
public Familia findById(Long id) { public Familia findById(Long id) {
return familiaRepository.findById(id).orElse(null); return familiaRepository.findById(id).orElse(null);

@ -7,16 +7,13 @@ import com.example.proyectofinal.repositories.empresas.OfertaRepository;
import com.example.proyectofinal.servicios.implemetations.IOferta; import com.example.proyectofinal.servicios.implemetations.IOferta;
import jakarta.persistence.EntityManager; import jakarta.persistence.EntityManager;
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.*;
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.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.util.HashSet; import java.text.ParseException;
import java.util.List; import java.text.SimpleDateFormat;
import java.util.Set; import java.util.*;
@Service @Service
public class OfertaService implements IOferta { public class OfertaService implements IOferta {
@ -26,22 +23,7 @@ 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() {
@ -72,6 +54,7 @@ public class OfertaService implements IOferta {
return page; return page;
} }
@Override @Override
public Oferta findById(Long id) { public Oferta findById(Long id) {
return ofertaRepository.findById(id).orElse(null); return ofertaRepository.findById(id).orElse(null);
@ -119,6 +102,62 @@ public class OfertaService implements IOferta {
} }
} }
} }
@Override
public Page<Oferta> getPage(int pageNum, int size, String sortField, String sortDir, String query, String secondaryOption) throws ParseException {
Date dateQuery = null;
if(isDate(query)){
dateQuery = new SimpleDateFormat("yyyy-MM-dd").parse(query);
System.out.println("Date query TEST: " + dateQuery);
}
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 antes")) {
return ofertaRepository.findOfertaByFechaAntes(dateQuery, PageRequest.of(pageNum - 1, size, Sort.by(sortField).ascending()));
} else if(secondaryOption.equals("Fecha despues")) {
return ofertaRepository.findOfertaByFechaDespues(dateQuery, PageRequest.of(pageNum - 1, size, Sort.by(sortField).ascending()));
} else if(secondaryOption.equals("Año")) {
return ofertaRepository.findOfertaByFechaAnyo(dateQuery, 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
public Page<Oferta> getPageMultiWord(int pageNum, int size, String sortField, String sortDir, List<String> queryMultiWord, String secondaryOption) {
List<Oferta> allMatches = new ArrayList<>();
for (String query : queryMultiWord) {
query = query.trim().toLowerCase();
Page<Oferta> page;
if (secondaryOption.equals("Nombre")) {
page = ofertaRepository.findOfertasByNombres(query, PageRequest.of(pageNum - 1, size, Sort.by(sortField).ascending()));
allMatches.addAll(page.getContent());
} else if (secondaryOption.equals("Empresa")) {
page = ofertaRepository.findOfertaByEmpresas(query, PageRequest.of(pageNum - 1, size, Sort.by(sortField).ascending()));
allMatches.addAll(page.getContent());
} else if (secondaryOption.equals("Skill")) {
page = ofertaRepository.findOfertaBySkills(query, PageRequest.of(pageNum - 1, size, Sort.by(sortField).ascending()));
allMatches.addAll(page.getContent());
}
}
// Convert the list of all matches to a page
int start = (int) PageRequest.of(pageNum - 1, size).getOffset();
int end = Math.min((start + PageRequest.of(pageNum - 1, size).getPageSize()), allMatches.size());
return new PageImpl<>(allMatches.subList(start, end), PageRequest.of(pageNum - 1, size), allMatches.size());
}
public boolean isDate(String query) {
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); // Adjust this to match the date format of your query
try {
Date date = formatter.parse(query);
return true; // The query is a date
} catch (ParseException e) {
return false; // The query is not a date
}
}
} }

@ -46,6 +46,11 @@ public class SectorService implements ISector {
return this.sectorRepository.findAll(pageable); return this.sectorRepository.findAll(pageable);
} }
@Override
public Page<Sector> getPageMultiWord(int pageNum, int size, String sortField, String sortDir, List<String> queryList, String secondaryOption) {
return null;
}
@Override @Override
public Sector findById(Long id) { public Sector findById(Long id) {
return sectorRepository.findById(id).orElse(null); return sectorRepository.findById(id).orElse(null);

@ -35,6 +35,11 @@ public class SkillService implements ISkill {
return this.skillRepository.findAll(pageable); return this.skillRepository.findAll(pageable);
} }
@Override
public Page<Skill> getPageMultiWord(int pageNum, int size, String sortField, String sortDir, List<String> queryList, String secondaryOption) {
return null;
}
@Override @Override
public Skill findById(Long id) { public Skill findById(Long id) {
return skillRepository.findById(id).orElse(null); return skillRepository.findById(id).orElse(null);

@ -8,12 +8,10 @@ import com.example.proyectofinal.repositories.empresas.SkillRepository;
import com.example.proyectofinal.repositories.empresas.SucursalRepository; import com.example.proyectofinal.repositories.empresas.SucursalRepository;
import com.example.proyectofinal.servicios.implemetations.ISucursal; import com.example.proyectofinal.servicios.implemetations.ISucursal;
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.*;
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.stereotype.Service;
import java.util.ArrayList;
import java.util.List; import java.util.List;
@Service @Service
public class SucursalService implements ISucursal { public class SucursalService implements ISucursal {
@ -40,6 +38,8 @@ public class SucursalService implements ISucursal {
return this.sucursalRepository.findAll(pageable); return this.sucursalRepository.findAll(pageable);
} }
@Override @Override
public Sucursal findById(Long id) { public Sucursal findById(Long id) {
return sucursalRepository.findById(id).orElse(null); return sucursalRepository.findById(id).orElse(null);
@ -84,7 +84,7 @@ public class SucursalService implements ISucursal {
public Page<Sucursal> getPage(int pageNum, int size, String sortField, String sortDir, String query, String secondaryOption) { public Page<Sucursal> 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("Empressa")) { }else if (secondaryOption.equals("Empresa")) {
return sucursalRepository.findSucursalByEmpresa(query, PageRequest.of(pageNum - 1, size, Sort.by(sortField).ascending())); return sucursalRepository.findSucursalByEmpresa(query, PageRequest.of(pageNum - 1, size, Sort.by(sortField).ascending()));
} else if(secondaryOption.equals("Nombre")) { } else if(secondaryOption.equals("Nombre")) {
return sucursalRepository.findSucursalaByNombre(query, PageRequest.of(pageNum - 1, size, Sort.by(sortField).ascending())); return sucursalRepository.findSucursalaByNombre(query, PageRequest.of(pageNum - 1, size, Sort.by(sortField).ascending()));
@ -94,6 +94,28 @@ public class SucursalService implements ISucursal {
return null; return null;
} }
} }
@Override
public Page<Sucursal> getPageMultiWord(int pageNum, int size, String sortField, String sortDir, List<String> queryList, String secondaryOption) {
List<Sucursal> allMatches = new ArrayList<>();
for (String query : queryList) {
query = query.trim().toLowerCase();
Page<Sucursal> page;
if (secondaryOption.equals("Nombre")) {
page = sucursalRepository.findSucursalesByNombre(query, PageRequest.of(pageNum - 1, size, Sort.by(sortField).ascending()));
allMatches.addAll(page.getContent());
} else if (secondaryOption.equals("Empresa")) {
page = sucursalRepository.findSucursalesByEmpresa(query, PageRequest.of(pageNum - 1, size, Sort.by(sortField).ascending()));
allMatches.addAll(page.getContent());
} else if (secondaryOption.equals("Localidad")) {
page = sucursalRepository.findSucursalesByLocalidad(query, PageRequest.of(pageNum - 1, size, Sort.by(sortField).ascending()));
allMatches.addAll(page.getContent());
}
}
// Convert the list of all matches to a page
System.out.println("TEST TEST TEST size"+allMatches.size());
System.out.println("TEST TEST TEST " + allMatches);
int start = (int) PageRequest.of(pageNum - 1, size).getOffset();
int end = Math.min((start + PageRequest.of(pageNum - 1, size).getPageSize()), allMatches.size());
return new PageImpl<>(allMatches.subList(start, end), PageRequest.of(pageNum - 1, size), allMatches.size());
}
} }

@ -24,5 +24,7 @@ public interface IEmpresa extends IPagination<Empresa> {
Page<Empresa> getPage(int pageNum, int size, String sortField, String sortDir, String query, String secondaryOption); Page<Empresa> getPage(int pageNum, int size, String sortField, String sortDir, String query, String secondaryOption);
Page<Empresa> getPageMultiWord(int pageNum, int size, String sortField, String sortDir, List<String> queryMultiWord, String secondaryOption);
// List<Empresa> getEmpresasByQueryAndSecondaryOption(String query, String secondaryQuery); // List<Empresa> getEmpresasByQueryAndSecondaryOption(String query, String secondaryQuery);
} }

@ -5,6 +5,7 @@ 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 org.springframework.data.domain.Page;
import java.text.ParseException;
import java.util.List; import java.util.List;
public interface IOferta extends IPagination<Oferta> { public interface IOferta extends IPagination<Oferta> {
@ -24,5 +25,5 @@ public interface IOferta extends IPagination<Oferta> {
void deleteByCicloId(Long id); void deleteByCicloId(Long id);
Page<Oferta> getPage(int pageNum, int size, String sortField, String sortDir, String query, String secondaryOption); Page<Oferta> getPage(int pageNum, int size, String sortField, String sortDir, String query, String secondaryOption) throws ParseException;
} }

@ -47,6 +47,9 @@
justify-content: space-between; justify-content: space-between;
width: 100%; width: 100%;
} }
#date{
margin-top: 15px;
}
</style> </style>
</head> </head>
<body > <body >
@ -56,7 +59,7 @@
</div> </div>
<div class="form-container" style="display: flex; justify-content: center; align-items: center; height: calc(100vh - 60px);"> <div class="form-container" style="display: flex; justify-content: center; align-items: center; height: calc(100vh - 60px);">
<form action="/buscador/" method="get" id="searchForm"> <form action="/buscador/" method="get" id="searchForm" onsubmit="submitForm()">
<div class="search-container" id="searchContainer"> <div class="search-container" id="searchContainer">
<input type="text" name="query" placeholder="Buscar..."> <input type="text" name="query" placeholder="Buscar...">
<input type="submit" value="Buscar"> <input type="submit" value="Buscar">
@ -77,26 +80,63 @@
<select id="secondaryDropdown"></select> <select id="secondaryDropdown"></select>
<input type="hidden" name="secondaryOption" id="hiddenSecondaryOption"> <input type="hidden" name="secondaryOption" id="hiddenSecondaryOption">
</div> </div>
<div id="date">
<input type="date" id="datePicker" name="query" style="display: none;">
</div>
</form> </form>
</div> </div>
<script> <script>
// Get reference to the date picker
var datePicker = document.getElementById('datePicker');
// Add an event listener to the date picker
datePicker.addEventListener('change', function() {
var searchBar = document.querySelector('input[name="query"]');
var secondaryOption = document.getElementById('secondaryDropdown').value;
// If the selected option is 'Fecha antes', 'Fecha despues', or 'Año', set the value of the search bar to the value of the date picker
if (['Fecha antes', 'Fecha despues', 'Año'].includes(secondaryOption)) {
searchBar.value = datePicker.value;
}
// Log the value of the search bar to the console
console.log("Query: " + searchBar.value);
});
document.getElementById('searchForm').addEventListener('submit', function() {
var searchOption = document.getElementById('searchOption').value;
var secondaryOption = document.getElementById('secondaryDropdown').value;
var datePicker = document.getElementById('datePicker');
var searchBar = document.querySelector('input[name="query"]');
// If the selected option is 'Fecha antes', 'Fecha despues', or 'Año', set the value of the search bar to the value of the date picker
if (['Fecha antes', 'Fecha despues', 'Año'].includes(secondaryOption)) {
searchBar.value = datePicker.value;
}
// Update the value of the hidden input field
document.getElementById('hiddenSecondaryOption').value = secondaryOption;
this.action = "/buscador/" + searchOption + "/page/1";
});
// Get references to the primary dropdown, the search bar, and the secondary dropdown // Get references to the primary dropdown, the search bar, and the secondary dropdown
var primaryDropdown = document.getElementById('searchOption'); var primaryDropdown = document.getElementById('searchOption');
var searchBar = document.querySelector('input[name="query"]'); var searchBar = document.querySelector('input[name="query"]');
var secondaryDropdown = document.getElementById('secondaryDropdown'); var secondaryDropdown = document.getElementById('secondaryDropdown');
// Add an event listener to the secondary dropdown
secondaryDropdown.addEventListener('change', function() { secondaryDropdown.addEventListener('change', function() {
//console.log("Selected option in secondary dropdown: " + secondaryDropdown.value); var datePicker = document.getElementById('datePicker');
// If the selected option is "Todas", disable the search bar and set its value to "Todas" if (['Fecha antes', 'Fecha despues', 'Año'].includes(secondaryDropdown.value)) {
if (secondaryDropdown.value === 'Todo') { searchBar.value = '';
searchBar.disabled = true;
datePicker.style.display = 'block';
} else if (secondaryDropdown.value === 'Todo') {
searchBar.value = 'Todo'; searchBar.value = 'Todo';
searchBar.disabled = true; searchBar.disabled = true;
datePicker.style.display = 'none';
} else { } else {
searchBar.value = ''; searchBar.value = '';
searchBar.disabled = false; searchBar.disabled = false;
datePicker.style.display = 'none';
} }
}); });
@ -165,7 +205,7 @@
options = ['Todo', 'Nombre', 'Empresa']; options = ['Todo', 'Nombre', 'Empresa'];
break; break;
case'ofertas': case'ofertas':
options = ['Todo', 'Nombre', 'Empresa','Fecha','Skill']; options = ['Todo', 'Nombre', 'Empresa','Fecha antes','Fecha despues','Año','Skill'];
break; break;
case'sucursales': case'sucursales':
options = ['Todo', 'Nombre', 'Empresa','Localidad']; options = ['Todo', 'Nombre', 'Empresa','Localidad'];
@ -208,14 +248,26 @@
searchBar.value = 'Todo'; searchBar.value = 'Todo';
searchBar.disabled = true; searchBar.disabled = true;
document.getElementById('searchForm').addEventListener('submit', function() { function submitForm() {
var searchOption = document.getElementById('searchOption').value; var searchOption = document.getElementById('searchOption').value;
var secondaryOption = document.getElementById('secondaryDropdown').value; var secondaryOption = document.getElementById('secondaryDropdown').value;
var datePicker = document.getElementById('datePicker');
// If the selected option is 'Fecha antes', 'Fecha despues', or 'Año', set the value of the search bar to the value of the date picker
if (['Fecha antes', 'Fecha despues', 'Año'].includes(secondaryOption)) {
datePicker.name = "query";
} else {
datePicker.name = "";
}
// Log the query to the console
console.log("Query SENT TEST: " + datePicker.value);
// Update the value of the hidden input field // Update the value of the hidden input field
document.getElementById('hiddenSecondaryOption').value = secondaryOption; document.getElementById('hiddenSecondaryOption').value = secondaryOption;
this.action = "/buscador/" + searchOption + "/page/1"; this.action = "/buscador/" + searchOption + "/page/1";
}); return true;
}
window.onload = function() { window.onload = function() {
primaryDropdown.dispatchEvent(new Event('change')); primaryDropdown.dispatchEvent(new Event('change'));
}; };

@ -53,7 +53,7 @@
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
<tr class="cell" th:each="sucursal :${sucursals}" th:data-id="${sucursal.id}"> <tr class="cell" th:each="sucursal :${sucursales}" 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>

Loading…
Cancel
Save

Powered by INFORMATICA.FP.EDU.ES.