public void updateEmployee(EmployeeDTO employeeDTO) {
   Employee employee = employeeRepository.findOneByEmail(employeeDTO.getEmail()).get();
   if (checkIfValidEntity(employee)) {
     employee.setFunctionalLevel(employeeDTO.getFunctionalLevel());
     employee.setActive(employeeDTO.getActive());
     if (employeeDTO.getActive() == false && employee.getCurrentCar() != null) {
       moveCurrentCarToCarHistory(employee);
     }
     employeeRepository.save(employee);
   }
 }
 @Override
 public Employee createEmployee(EmployeeDTO employeeDTO) {
   Employee employee = new Employee();
   employee.setEmail(employeeDTO.getEmail());
   employee.setPasswordHash(hashPassword(employeeDTO.getPassword()));
   employee.setRole(employeeDTO.getRole());
   return employeeRepository.save(employee);
 }
  @Override
  public CarDTO assignPoolCarToEmployee(EmployeeDTO employeeDTO, CarDTO carDTO) {
    Employee employee = employeeRepository.findOneByEmail(employeeDTO.getEmail()).get();

    updatePoolCar(carRepository.findOne(carDTO.getId()));
    Car currentCar = employee.getCurrentCar();

    if (currentCar != null) {
      Set<Car> carHistory = employee.getCarHistory();
      currentCar.setEndLeasing(LocalDate.now());
      carHistory.add(currentCar);
    }
    employee.setCurrentCar(carRepository.findOne(carDTO.getId()));
    employee.setReceivedMailForNewCar(false);
    employeeRepository.save(employee);
    return carDTO;
  }
 @Override
 public EmployeeDTO getEmployeeById(long id) {
   Optional<Employee> employee = Optional.ofNullable(employeeRepository.findOne(id));
   if (employee.isPresent()) {
     return mapEmployeeToEmployeeDtoObject(employee.get());
   } else {
     throw new IllegalArgumentException("there is no employee found with id " + id);
   }
 }
 @Override
 public Collection<EmployeeDTO> getAllEmployees() {
   //        List<Employee> employeeList = employeeRepository.findAll(new Sort("email"));
   //        List<EmployeeDTO> employeeDTOList = new ArrayList<>();
   //        for (Employee employee : employeeList) {
   //            employeeDTOList.add(mapEmployeeToEmployeeDtoObject(employee));
   //        }
   //        return employeeDTOList;
   return mapEmployeeListToEmployeeDTOList(employeeRepository.findAll(new Sort("email")));
 }
 @Override
 public EmployeeDTO getEmployeeDtoByEmail(String email) {
   Optional<Employee> employee = employeeRepository.findOneByEmail(email);
   if (employee.isPresent()) {
     return mapEmployeeToEmployeeDtoObject(employee.get());
   } else {
     throw new IllegalArgumentException(
         "there is no employee found with email ' " + email + " '.");
   }
 }
  @Override
  public CarDTO assignCarToEmployee(
      Order order, int leasingDurationInYears, String numberPlate, String vinNumber) {
    Employee employee = order.getEmployee();
    if (employee.getCurrentCar() != null) {
      moveCurrentCarToCarHistory(employee);
    }

    Car car = createNewCarFromOrder(order, leasingDurationInYears, numberPlate, vinNumber);

    employee.setCurrentCar(car);

    employeeRepository.save(employee);
    return CarMapper.mapCarObjectToCarDTO(car);
  }
 @Override
 public Optional<Employee> getOptionalEmployeeByEmail(String email) {
   return employeeRepository.findOneByEmail(email);
 }
 @Override
 public List<EmployeeDTO> getAllEmployeesByActive(boolean isActive) {
   return mapEmployeeListToEmployeeDTOList(employeeRepository.findAllByActive(isActive));
 }