示例#1
0
        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);
        }