public async Task CreateTicket(TicketCreateBindingModel form, HttpContext request) { var ticket = new Ticket { Title = form.Title, Creator = await _userManager.GetUserAsync(request.User), Content = form.Content, CommentThreads = new List <CommentThread>(), Assigned = new List <UserTicket>(), Project = _context.Projects.Include(p => p.Members).Single(p => p.Title.Equals(form.SelectedProject)) }; var projectMemberIds = ticket.Project.Members.Select(m => m.Id).ToList(); foreach (string username in form.AddAssigned.Where(entry => entry != null)) { var user = _context.Users.Single(u => u.UserName == username); Debug.Assert(user != null); var userTicket = _userTicketService.CreateUserTicket(user, ticket); ticket.Assigned.Add(userTicket); // If the user is not already a member of the given project, add them as a member. if (!projectMemberIds.Contains(user.Id)) { var userProject = _userProjectService.CreateUserProject(user, ticket.Project); ticket.Project.Members.Add(userProject); } } _context.Tickets.Add(ticket); _context.SaveChanges(true); }
public TicketCreateViewModel CreateTicketViewModel(TicketCreateBindingModel ticket = null, IEnumerable <ModelError> errors = null) { var viewModel = new TicketCreateViewModel { Errors = new List <string>() }; var projectTitles = _context.Projects .Select(p => p.Title) .ToList(); viewModel.Projects = new SelectList(projectTitles); if (ticket != null) { viewModel.Title = ticket.Title; viewModel.Type = ticket.Type; viewModel.Priority = ticket.Priority; } if (errors != null) { foreach (var error in errors) { viewModel.Errors.Add(error.ErrorMessage); } } return(viewModel); }
public async Task <IActionResult> Create(TicketCreateBindingModel input) { if (!ModelState.IsValid) { IEnumerable <ModelError> allErrors = ModelState.Values.SelectMany(v => v.Errors); var viewModel = _ticketService.CreateTicketViewModel(input, allErrors); return(View(viewModel)); } await _ticketService.CreateTicket(input, HttpContext); return(RedirectToAction("Index", new { scope = "created" })); }