Interface FichajeRepository

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

@Repository public interface FichajeRepository extends org.springframework.data.jpa.repository.JpaRepository<Fichaje,Long>
Repositorio para gestionar las operaciones de base de datos de la entidad Fichaje. Registra y consulta las entradas y salidas de los empleados, así como sus incidencias.
  • Method Summary

    Modifier and Type
    Method
    Description
    Recupera todos los fichajes de una empresa en un rango de fechas.
    Busca fichajes activos de un empleado (sin hora de salida) para una fecha específica.
    findByEmpleadoIdEmpleadoAndFechaBetween(Long idEmpleado, LocalDate fechaInicio, LocalDate fechaFin)
    Recupera el historial de fichajes de un empleado en un rango de fechas.
    Obtiene un ranking de los empleados con más retrasos (fichajes marcados "fuera de horario").

    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

    • findByEmpleadoIdEmpleadoAndFechaAndHoraSalidaIsNull

      List<Fichaje> findByEmpleadoIdEmpleadoAndFechaAndHoraSalidaIsNull(Long idEmpleado, LocalDate fecha)
      Busca fichajes activos de un empleado (sin hora de salida) para una fecha específica. Útil para detectar si un empleado tiene un fichaje pendiente de cerrar.
      Parameters:
      idEmpleado - El ID del empleado.
      fecha - La fecha a consultar.
      Returns:
      Lista de fichajes abiertos.
    • findByEmpleadoIdEmpleadoAndFechaBetween

      List<Fichaje> findByEmpleadoIdEmpleadoAndFechaBetween(Long idEmpleado, LocalDate fechaInicio, LocalDate fechaFin)
      Recupera el historial de fichajes de un empleado en un rango de fechas.
      Parameters:
      idEmpleado - El ID del empleado.
      fechaInicio - Fecha de inicio del periodo.
      fechaFin - Fecha de fin del periodo.
      Returns:
      Lista de fichajes realizados en el periodo.
    • findByEmpleadoEmpresaIdEmpresaAndFechaBetween

      @Query("SELECT f FROM Fichaje f JOIN FETCH f.empleado e WHERE e.empresa.idEmpresa = :idEmpresa AND f.fecha BETWEEN :fechaInicio AND :fechaFin") List<Fichaje> findByEmpleadoEmpresaIdEmpresaAndFechaBetween(@Param("idEmpresa") Long idEmpresa, @Param("fechaInicio") LocalDate fechaInicio, @Param("fechaFin") LocalDate fechaFin)
      Recupera todos los fichajes de una empresa en un rango de fechas.

      Utiliza JOIN FETCH para traer al empleado en la misma consulta y evitar el problema N+1.

      Parameters:
      idEmpresa - El ID de la empresa.
      fechaInicio - Fecha de inicio del periodo.
      fechaFin - Fecha de fin del periodo.
      Returns:
      Lista de fichajes de todos los empleados de la empresa en ese periodo.
    • obtenerTopRetrasos

      @Query("SELECT f.empleado.nombre, COUNT(f) FROM Fichaje f WHERE f.empleado.empresa.idEmpresa = :idEmpresa AND f.incidencias LIKE \'%fuera de horario%\' GROUP BY f.empleado.nombre ORDER BY COUNT(f) DESC") List<Object[]> obtenerTopRetrasos(@Param("idEmpresa") Long idEmpresa)
      Obtiene un ranking de los empleados con más retrasos (fichajes marcados "fuera de horario").
      Parameters:
      idEmpresa - El ID de la empresa.
      Returns:
      Lista de arrays de objetos conteniendo el nombre del empleado y el número de retrasos.