public IActionResult AddExistingUserToPlan(AddUserToPlanDTO addUserToPlan, int planId)
        {
            _loggerManager.Info($"AddExistingUserToPlan is requested");
            Response.StatusCode = StatusCodes.Status202Accepted;

            if (planId <= 0)
            {
                _loggerManager.Warn($"AddExistingUserToPlan requesy is bad");
                Response.StatusCode = StatusCodes.Status400BadRequest;

                return(PartialView("~/Views/User/Partials/_AddNewUser.cshtml"));
            }

            var existingUser = addUserToPlan.ExistingUser;

            if (TryValidateModel(existingUser))
            {
                var result = _planRepository.AddUserToPlan(existingUser.Id.Value, planId, existingUser.PositionId.Value);

                if (result)
                {
                    _loggerManager.Warn($"AddExistingUserToPlan successfully added an user");

                    Response.StatusCode = StatusCodes.Status201Created;
                }
                else
                {
                    _loggerManager.Warn($"AddExistingUserToPlan was unable to add user to a plan");

                    ModelState.AddModelError(string.Empty, sharedResource.userAddExistingUserToPlanProblem);
                }
            }
            else
            {
                _loggerManager.Warn($"AddExistingUserToPlan is invalid");
            }

            return(PartialView("~/Views/User/Partials/_AddExistingUser.cshtml"));
        }
        public IActionResult AddNewUserToPlan(AddUserToPlanDTO addUserToPlan, int planId)
        {
            _loggerManager.Info($"AddNewUserToPlan is requested");
            Response.StatusCode = StatusCodes.Status202Accepted;

            if (planId <= 0)
            {
                Response.StatusCode = StatusCodes.Status400BadRequest;

                _loggerManager.Warn($"AddNewUserToPlan request is bad");

                return(PartialView("~/Views/User/Partials/_AddNewUser.cshtml"));
            }

            var planNewUser = addUserToPlan.NewUser;

            if (TryValidateModel(planNewUser))
            {
                if (_userRepository.FindByCondition(u => u.Email == planNewUser.Email).Any())
                {
                    _loggerManager.Warn($"AddNewUserToPlan - an user with the email exists");

                    ModelState.AddModelError("NewUser.Email", sharedResource.userAddNewUserToPlanProblemEmailAlreadyExist);

                    return(PartialView("~/Views/User/Partials/_AddNewUser.cshtml"));
                }

                var newUser = new NewUserDTO
                {
                    FirstName  = planNewUser.FirstName,
                    LastName   = planNewUser.LastName,
                    Email      = planNewUser.Email,
                    PositionId = planNewUser.PositionId
                };

                newUser.Password = _userRepository.GeneratePassword();
                newUser.Role     = Roles.Employee;
                var user = _userRepository.AddNew(newUser, HttpContext.GetUserId());

                if (user == null)
                {
                    _loggerManager.Warn($"AddNewUserToPlan - Adding a new user failed");

                    ModelState.AddModelError(string.Empty, sharedResource.userAddNewUserToPlanFailed);

                    return(PartialView("~/Views/User/Partials/_AddNewUser.cshtml"));
                }

                if (!_emailService.SendPasswordToUser(newUser.Password, user))
                {
                    _loggerManager.Error($"AddNewUserToPlan - Email was not sent to the user");

                    ModelState.AddModelError(string.Empty, sharedResource.userAddNewUserToPlanEmailNotSent);

                    return(PartialView("~/Views/User/Partials/_AddNewUser.cshtml"));
                }

                if (!_planRepository.AddUserToPlan(user.Id, planId, newUser.PositionId.Value))
                {
                    _loggerManager.Error($"AddNewUserToPlan - User was not added to the planning team");

                    ModelState.AddModelError(string.Empty, sharedResource.userAddNewUserToPlanNotAddedToTeam);

                    return(PartialView("~/Views/User/Partials/_AddNewUser.cshtml"));
                }

                _loggerManager.Info($"AddNewUserToPlan succeesfully added a user");

                Response.StatusCode = StatusCodes.Status201Created;
            }
            else
            {
                _loggerManager.Warn($"AddNewUserToPlan request is invalid");
            }

            return(PartialView("~/Views/User/Partials/_AddNewUser.cshtml"));
        }