public async Task <IActionResult> AddTask(string id)
        {
            ViewData["TaskStatuses"] = _storyService.GetAllTaskStatus();
            var model = new BoardAddTaskViewModel
            {
                StoryId = id,
                Users   = new List <ProjectUserDetailViewModel>()
            };


            var users = _userManager.Users.Select(user => new UserDetailViewModel
            {
                Id          = user.Id,
                FirstName   = user.FirstName,
                LastName    = user.LastName,
                Username    = user.UserName,
                Email       = user.Email,
                PhoneNumber = user.PhoneNumber,
                ImageUrl    = user.ImageUrl
            });

            var roles = _roleManager.Roles
                        .Where(x => x.Name != "Admin")
                        .OrderBy(x => x.Name)
                        .Select(r => new ApplicationRoleDetailViewModel
            {
                Id          = r.Id,
                RoleName    = r.Name,
                Description = r.Description
            });

            var story = await _storyService.GetByIdAsync(int.Parse(id));

            var sprint = await _sprintService.GetByIdAsync(story.SprintId);

            //
            var userRoles = _projectService.GetProjectUserRoles(sprint.ProjectId.ToString());

            foreach (var userRole in userRoles)
            {
                var user = await users.FirstOrDefaultAsync(x => x.Id == userRole.UserId);

                var role = await roles.FirstOrDefaultAsync(x => x.Id == userRole.RoleId);

                var projectUser = new ProjectUserDetailViewModel
                {
                    ProjectId    = id,
                    UserId       = userRole.UserId,
                    RoleId       = userRole.RoleId,
                    FirstName    = user.FirstName,
                    LastName     = user.LastName,
                    ImageUrl     = user.ImageUrl,
                    UserRoleName = role.RoleName
                };
                model.Users.Add(projectUser);
            }
            return(View(model));
        }
        public async Task <IActionResult> AddUser(ProjectUserDetailViewModel model)
        {
            if (!ModelState.IsValid)
            {
                ModelState.AddModelError("Error", "Error");
                return(RedirectToAction(nameof(Edit), new { model.ProjectId }));
            }

            var userRole = new ApplicationUserRole
            {
                ProjectId = model.ProjectId,
                UserId    = model.UserId,
                RoleId    = model.RoleId
            };

            await _projectService.AddUser(userRole);

            return(RedirectToAction(nameof(Edit), new { id = model.ProjectId }));
        }
        public async Task <IActionResult> Edit(string id)
        {
            var project = await _projectService.GetByIdAsync(id);

            if (project == null)
            {
                throw new ApplicationException($"Unable to load project with ID '{id}'.");
            }

            var users = _userManager.Users.Select(user => new UserDetailViewModel
            {
                Id          = user.Id,
                FirstName   = user.FirstName,
                LastName    = user.LastName,
                Username    = user.UserName,
                Email       = user.Email,
                PhoneNumber = user.PhoneNumber,
                ImageUrl    = user.ImageUrl
            });

            var roles = _roleManager.Roles
                        .Where(x => x.Name != "Admin")
                        .OrderBy(x => x.Name)
                        .Select(r => new ApplicationRoleDetailViewModel
            {
                Id          = r.Id,
                RoleName    = r.Name,
                Description = r.Description
            });

            var model = new ProjectDetailViewModel
            {
                Id           = id,
                Name         = project.Name,
                Description  = project.Description,
                ProjectUsers = new List <ProjectUserDetailViewModel>(),
                Users        = users,
                Roles        = roles
            };

            var userRoles = _projectService.GetProjectUserRoles(id);

            foreach (var userRole in userRoles)
            {
                var user = await users.FirstOrDefaultAsync(x => x.Id == userRole.UserId);

                var role = await roles.FirstOrDefaultAsync(x => x.Id == userRole.RoleId);

                var projectUser = new ProjectUserDetailViewModel
                {
                    ProjectId    = id,
                    UserId       = userRole.UserId,
                    RoleId       = userRole.RoleId,
                    FirstName    = user.FirstName,
                    LastName     = user.LastName,
                    ImageUrl     = user.ImageUrl,
                    UserRoleName = role.RoleName
                };
                model.ProjectUsers.Add(projectUser);
            }

            return(View(model));
        }