Interface AsignacionTurnoRepository

All Superinterfaces:
org.springframework.data.repository.CrudRepository<AsignacionTurno,Long>, org.springframework.data.jpa.repository.JpaRepository<AsignacionTurno,Long>, org.springframework.data.repository.ListCrudRepository<AsignacionTurno,Long>, org.springframework.data.repository.ListPagingAndSortingRepository<AsignacionTurno,Long>, org.springframework.data.repository.PagingAndSortingRepository<AsignacionTurno,Long>, org.springframework.data.repository.query.QueryByExampleExecutor<AsignacionTurno>, org.springframework.data.repository.Repository<AsignacionTurno,Long>

@Repository public interface AsignacionTurnoRepository extends org.springframework.data.jpa.repository.JpaRepository<AsignacionTurno,Long>
Repositorio para gestionar las operaciones de base de datos de la entidad AsignacionTurno. Se encarga de la persistencia de las planificaciones de turnos para los empleados.
  • Method Summary

    Modifier and Type
    Method
    Description
    Cuenta el número de empleados distintos que tienen un turno planificado para el día de hoy.
    Recupera todas las asignaciones de turno de una empresa.
    Busca las asignaciones de turno para una empresa y departamento específicos.
    Recupera todas las asignaciones de turno de un empleado.
    Busca las asignaciones de turno de un empleado para una fecha concreta.
    findByEmpleadoIdEmpleadoAndFechaBetween(Long idEmpleado, LocalDate fechaInicio, LocalDate fechaFin)
    Busca las asignaciones de turno de un empleado en un rango de fechas determinado.

    Methods inherited from interface org.springframework.data.repository.CrudRepository

    count, delete, deleteAll, deleteAll, deleteAllById, deleteById, existsById, findById, save

    Methods inherited from interface org.springframework.data.jpa.repository.JpaRepository

    deleteAllByIdInBatch, deleteAllInBatch, deleteAllInBatch, deleteInBatch, findAll, findAll, flush, getById, getOne, getReferenceById, saveAllAndFlush, saveAndFlush

    Methods inherited from interface org.springframework.data.repository.ListCrudRepository

    findAll, findAllById, saveAll

    Methods inherited from interface org.springframework.data.repository.ListPagingAndSortingRepository

    findAll

    Methods inherited from interface org.springframework.data.repository.PagingAndSortingRepository

    findAll

    Methods inherited from interface org.springframework.data.repository.query.QueryByExampleExecutor

    count, exists, findAll, findBy, findOne
  • Method Details

    • findByEmpleadoIdEmpleadoAndFecha

      List<AsignacionTurno> findByEmpleadoIdEmpleadoAndFecha(Long idEmpleado, LocalDate fecha)
      Busca las asignaciones de turno de un empleado para una fecha concreta.
      Parameters:
      idEmpleado - El ID del empleado.
      fecha - La fecha a consultar.
      Returns:
      Lista de asignaciones de turno encontradas.
    • findByEmpleadoEmpresaIdEmpresaAndEmpleadoDepartamentoIgnoreCase

      @Query("SELECT a FROM AsignacionTurno a JOIN FETCH a.empleado e JOIN FETCH a.turno t WHERE e.empresa.idEmpresa = :idEmpresa AND LOWER(e.departamento) = LOWER(:departamento)") List<AsignacionTurno> findByEmpleadoEmpresaIdEmpresaAndEmpleadoDepartamentoIgnoreCase(@Param("idEmpresa") Long idEmpresa, @Param("departamento") String departamento)
      Busca las asignaciones de turno para una empresa y departamento específicos.

      Utiliza un doble JOIN FETCH para traer al empleado y su turno asignado en una sola consulta SQL, eliminando el problema N+1 múltiple.

      Parameters:
      idEmpresa - El ID de la empresa.
      departamento - El nombre del departamento (ignora mayúsculas/minúsculas).
      Returns:
      Lista de asignaciones para ese departamento.
    • findByEmpleadoEmpresaIdEmpresa

      List<AsignacionTurno> findByEmpleadoEmpresaIdEmpresa(Long idEmpresa)
      Recupera todas las asignaciones de turno de una empresa.
      Parameters:
      idEmpresa - El ID de la empresa.
      Returns:
      Lista de asignaciones de la empresa.
    • findByEmpleadoIdEmpleado

      List<AsignacionTurno> findByEmpleadoIdEmpleado(Long idEmpleado)
      Recupera todas las asignaciones de turno de un empleado.
      Parameters:
      idEmpleado - El ID del empleado.
      Returns:
      Lista de asignaciones del empleado.
    • findByEmpleadoIdEmpleadoAndFechaBetween

      @Query("SELECT a FROM AsignacionTurno a JOIN FETCH a.turno t JOIN FETCH a.empleado e WHERE e.idEmpleado = :idEmpleado AND a.fecha BETWEEN :fechaInicio AND :fechaFin") List<AsignacionTurno> findByEmpleadoIdEmpleadoAndFechaBetween(@Param("idEmpleado") Long idEmpleado, @Param("fechaInicio") LocalDate fechaInicio, @Param("fechaFin") LocalDate fechaFin)
      Busca las asignaciones de turno de un empleado en un rango de fechas determinado.

      Utiliza JOIN FETCH para cargar el turno y el empleado asociados, evitando latencia y consultas N+1 al renderizar el calendario mensual.

      Parameters:
      idEmpleado - El ID del empleado.
      fechaInicio - Fecha inicial del rango.
      fechaFin - Fecha final del rango.
      Returns:
      Lista de asignaciones en el periodo indicado.
    • contarEmpleadosPlanificadosHoy

      @Query("SELECT COUNT(DISTINCT a.empleado.idEmpleado) FROM AsignacionTurno a WHERE a.empleado.empresa.idEmpresa = :idEmpresa AND a.fecha = :fechaHoy") Long contarEmpleadosPlanificadosHoy(@Param("idEmpresa") Long idEmpresa, @Param("fechaHoy") LocalDate fechaHoy)
      Cuenta el número de empleados distintos que tienen un turno planificado para el día de hoy.
      Parameters:
      idEmpresa - El ID de la empresa.
      fechaHoy - La fecha actual.
      Returns:
      Número total de empleados planificados hoy.