public TicketEditViewModel EditTicketViewModel(TicketEditBindingModel invalidInput, IEnumerable <ModelError> errors) { var viewModel = new TicketEditViewModel { TicketId = invalidInput.TicketId, Title = invalidInput.Title, CreatedDate = invalidInput.CreatedDate, UpdatedDate = invalidInput.UpdatedDate, CreatorName = invalidInput.CreatorName, Type = invalidInput.Type, Status = invalidInput.Status, Priority = invalidInput.Priority, Content = invalidInput.Content, RemoveAssigned = new Dictionary <string, bool>(), Errors = new List <string>() }; if (invalidInput.RemoveAssigned != null) { foreach (var(username, flag) in invalidInput.RemoveAssigned) { viewModel.RemoveAssigned[username] = flag; } } if (errors != null) { foreach (var error in errors) { viewModel.Errors.Add(error.ErrorMessage); } } return(viewModel); }
public async Task EditTicket(Ticket ticket, TicketEditBindingModel input, HttpContext request) { var currentUser = await _userManager.GetUserAsync(request.User); ticket.UpdatedDate = DateTime.Now; ticket.Type = input.Type; ticket.Status = input.Status; ticket.Priority = input.Priority; ticket.Title = input.Title; ticket.Creator = currentUser; ticket.Content = input.Content; if (input.RemoveAssigned != null) { // Unassign the flagged users from the Ticket. foreach (var(username, remove) in input.RemoveAssigned .Where(entry => entry.Value == true)) { var userId = _context.Users.Single(u => u.UserName == username).Id; var userTicket = _context.UserTickets.Find(userId, ticket.TicketId); ticket.Assigned.Remove(userTicket); _context.UserTickets.Remove(userTicket); } } // Assign the users to the ticket by creating new UserTickets. foreach (string username in input.AddAssigned.Where(entry => entry != null)) { var user = _context.Users.Single(u => u.UserName == username); var userTicket = _userTicketService.CreateUserTicket(user, ticket); ticket.Assigned.Add(userTicket); } }
public async Task <IActionResult> Edit(Guid id, TicketEditBindingModel input) { if (!ModelState.IsValid) { IEnumerable <ModelError> allErrors = ModelState.Values.SelectMany(m => m.Errors); var viewModel = _ticketService.EditTicketViewModel(input, allErrors); return(View(viewModel)); } var ticket = _ticketService.GetTicket(id); if (ticket == null) { return(View("Error404")); } var authResult = await _authService.AuthorizeAsync(HttpContext.User, ticket.Creator.Id, "TicketEditPrivileges"); if (!authResult.Succeeded) { return(new ForbidResult()); } await _ticketService.EditTicket(ticket, input, HttpContext); _context.SaveChanges(true); return(ticket.Status == Ticket.TicketStatus.Closed ? RedirectToAction("Index", new { scope = "closed" }) : RedirectToAction("Index")); }