public async Task <NewEmployeeDto> Create(NewEmployeeDto newEmployeeDto) { if (newEmployeeDto == null) { throw new ArgumentNullException(nameof(newEmployeeDto)); } var password = newEmployeeDto.Password; if (string.IsNullOrWhiteSpace(password)) { throw new Exception("Password is required"); } if (_repository.FindByEmail(newEmployeeDto.Email).Result != null) { throw new Exception("Email \"" + newEmployeeDto.Email + "\" is already taken"); } var newEmployee = _mapper.Map <Employee>(newEmployeeDto); if (!newEmployeeDto.IsManualHolidaysInput) { var currentTime = _timeService.GetCurrentTime(); var workedTime = _timeService.GetWorkDays(newEmployee.WorksFromDate, currentTime); var workDaysPerYear = _timeService.GetCurrentYearWorkDays(); newEmployee.FreeWorkDays = Math.Round(workedTime * ((double)newEmployee.DaysOfVacation / workDaysPerYear), 2); } else { if (newEmployeeDto.FreeWorkDays is null) { throw new ArgumentNullException(); } newEmployee.FreeWorkDays = (double)newEmployeeDto.FreeWorkDays; } newEmployee.CurrentAvailableLeaves = newEmployee.ParentalLeaveLimit; newEmployee.NextMonthAvailableLeaves = newEmployee.ParentalLeaveLimit; await _repository.Create(newEmployee); await _userService.Create(newEmployee, newEmployeeDto); await _notificationSettingsService.Create(newEmployee.Id); var employeeDto = _mapper.Map <NewEmployeeDto>(newEmployee); return(employeeDto); }