Class EmpleadoService

java.lang.Object
com.gestorrh.api.service.EmpleadoService

@Service public class EmpleadoService extends Object
Servicio encargado de la gestión integral del capital humano de las organizaciones.

Proporciona la lógica de negocio necesaria para administrar el ciclo de vida del empleado: desde el alta inicial con generación de credenciales temporales, hasta la gestión de bajas, readmisiones y el mantenimiento del perfil profesional.

Implementa políticas estrictas de seguridad multi-tenant para asegurar que los datos del personal sean accesibles únicamente por la empresa propietaria o el propio empleado.

  • Field Details

    • empleadoRepository

      private final EmpleadoRepository empleadoRepository
    • empresaRepository

      private final EmpresaRepository empresaRepository
    • codificadorPassword

      private final org.springframework.security.crypto.password.PasswordEncoder codificadorPassword
  • Constructor Details

    • EmpleadoService

      public EmpleadoService()
  • Method Details

    • crearEmpleado

      @Transactional public RespuestaCrearEmpleadoDTO crearEmpleado(PeticionCrearEmpleadoDTO peticion)
      Registra un nuevo empleado en la organización y le vincula automáticamente a la empresa solicitante.

      El proceso de alta automatiza la seguridad inicial: genera una contraseña aleatoria de 8 caracteres mediante UUID para el primer inicio de sesión del trabajador.

      Parameters:
      peticion - Objeto PeticionCrearEmpleadoDTO con la información del nuevo trabajador.
      Returns:
      RespuestaCrearEmpleadoDTO que incluye la identificación del sistema y la contraseña temporal generada.
      Throws:
      RuntimeException - Si el correo electrónico ya existe en la base de datos (Restricción de unicidad).
    • obtenerEmpleadosDeEmpresa

      @Transactional(readOnly=true) public List<RespuestaEmpleadoDTO> obtenerEmpleadosDeEmpresa()
      Recupera la lista completa de empleados que pertenecen a la empresa autenticada.

      Calcula dinámicamente el estado de actividad basándose en la fecha de baja del contrato.

      Returns:
      List de RespuestaEmpleadoDTO con el personal de la empresa.
    • actualizarEmpleado

      @Transactional public RespuestaEmpleadoDTO actualizarEmpleado(Long idEmpleado, PeticionActualizarEmpleadoDTO peticion)
      Actualiza la información profesional y de contacto de un empleado.

      Verifica estrictamente que el empleado pertenezca a la empresa que solicita la modificación.

      Parameters:
      idEmpleado - Identificador único del empleado a modificar.
      peticion - DTO con los nuevos datos (nombre, apellidos, puesto, rol, etc.).
      Returns:
      RespuestaEmpleadoDTO con los datos actualizados.
      Throws:
      RuntimeException - Si el empleado no existe o pertenece a otra empresa (Violación de seguridad).
    • darDeBajaEmpleado

      @Transactional public void darDeBajaEmpleado(Long idEmpleado, LocalDate fechaBaja)
      Tramita la baja laboral de un empleado en el sistema.

      Si la fecha de baja es igual o anterior a hoy, el empleado se marca como inactivo inmediatamente. Si es posterior, la baja queda programada para su procesamiento automático futuro.

      Parameters:
      idEmpleado - Identificador del empleado.
      fechaBaja - Fecha efectiva de la finalización del contrato.
    • readmitirEmpleado

      @Transactional public RespuestaCrearEmpleadoDTO readmitirEmpleado(Long idEmpleado)
      Reincorpora a un empleado que previamente se encontraba en estado de baja.

      Limpia la fecha de fin de contrato, reactiva la cuenta y genera una nueva contraseña de acceso.

      Parameters:
      idEmpleado - Identificador del empleado a readmitir.
      Returns:
      RespuestaCrearEmpleadoDTO con la nueva contraseña de acceso para el empleado reincorporado.
    • obtenerMiPerfil

      @Transactional(readOnly=true) public RespuestaEmpleadoDTO obtenerMiPerfil()
      Recupera la información detallada del perfil del empleado que ha iniciado sesión. Este método se basa en el contexto de seguridad JWT.
      Returns:
      RespuestaEmpleadoDTO con los datos del perfil propio del empleado.
    • cambiarMiContrasena

      @Transactional public void cambiarMiContrasena(PeticionCambiarPasswordDTO peticion)
      Permite al empleado autenticado actualizar su contraseña personal.

      Requiere la validación exitosa de su contraseña actual.

      Parameters:
      peticion - DTO con la contraseña actual y la nueva contraseña deseada.