public async Task <ActionResult> Transition(IssueTransitionViewModel model) { if (model?.Issue == null || model.Issue.Id == 0 || model.Transition == IssueTransition.Assign && model.SolverId == null) { return(new HttpStatusCodeResult(HttpStatusCode.BadRequest, BusinessErrors.IssueInvalid)); } //get issue var issue = await _db.Issues.GetAsync(model.Issue.Id); if (issue == null) { return(HttpNotFound(BusinessErrors.IssueInvalid)); } try { await _transitionService.Transition(issue, model.Transition, model.SolverId, model.Comment); } catch (Exception ex) { return(new HttpStatusCodeResult(HttpStatusCode.BadRequest, ex.Message)); } return(RedirectToAction("Index", "Issue")); }
public async Task <ActionResult> Transition(int?id, IssueTransition?transition) { if (id == null || transition == null) { return(new HttpStatusCodeResult(HttpStatusCode.BadRequest)); } var issue = await _db.Issues.GetAsync(id.Value); if (issue == null) { return(HttpNotFound()); } var model = new IssueTransitionViewModel { Issue = issue, Transition = transition.Value }; if (transition != IssueTransition.Assign) { return(View(model)); } //if transition is assign we need solvers var solverRole = await _db.Roles.SingleOrDefaultAsync(r => r.Name.ToLower().Equals("solver")); var solvers = await _db.Users.FindAsync(u => u.Roles.Any(r => r.RoleId == solverRole.Id)); var solverList = solvers as IList <ApplicationUser> ?? solvers.ToList(); if (solvers == null || !solverList.Any()) { return(new HttpStatusCodeResult(HttpStatusCode.NotFound, BusinessErrors.NoSolvers)); } //make select list item model.Solvers = solverList.Select(solver => new SelectListItem { Text = solver.UserName, Value = solver.Id }).ToList(); return(View(model)); }