// GET: Sprint/EditSprint/5 public async Task <ActionResult> EditSprint(int?id) { //Ensure valid input if (id == null) { return(new HttpStatusCodeResult(HttpStatusCode.BadRequest)); } //Find the sprint in the database var sprint = await _db.Sprints.FindAsync(id); if (sprint == null) { return(HttpNotFound("Sprint not found.")); } //TODO: Ensure user is allowed access to this project //Calculate the earliest start date for this sprint var prevSprints = sprint.Project.Sprints.Where(sprint1 => sprint1.Iteration == sprint.Iteration - 1); var prevSprintsArray = prevSprints as Sprint[] ?? prevSprints.ToArray(); ViewBag.notBefore = prevSprintsArray.Any() ? prevSprintsArray.First().EndDate.ToString("MM-dd-yyyy") : null; //Create view model and return var model = new SprintEditViewModel() { Id = sprint.Id, SprintDuration = sprint.Project.SprintDuration, StartDate = sprint.StartDate, EndDate = sprint.EndDate }; return(PartialView("_SprintEdit", model)); }
public async Task <ActionResult> EditSprint(SprintEditViewModel model) { //Ensure model is valid if (!ModelState.IsValid) { return(PartialView("_SprintEdit", model)); } //Find database sprint var sprint = await _db.Sprints.FindAsync(model.Id); if (sprint == null) { return(HttpNotFound("Sprint not found.")); } //TODO: Ensure user is allowed access to this project //Validate sprint dates if (model.EndDate < DateTime.Now) { model.Error = "You cannot set the end date to the past."; return(PartialView("_SprintEdit", model)); } //Attempt to store the edit try { //Update the database sprint.StartDate = model.StartDate; sprint.EndDate = model.EndDate; await _db.SaveChangesAsync(); //Update future sprints with new schedule var futureSprints = sprint.Project.Sprints.Where(s => s.Iteration > sprint.Iteration); var lastSprint = sprint; foreach (var futureSprint in futureSprints) { futureSprint.StartDate = lastSprint.EndDate; futureSprint.EndDate = futureSprint.StartDate.AddDays(7 * sprint.Project.SprintDuration); lastSprint = futureSprint; } await _db.SaveChangesAsync(); } catch (Exception exception) { //Return error model.Error = exception.Message; return(PartialView("_SprintEdit", model)); } //Create view model and return var sprintSettingViewModel = new SprintSettingsViewModel() { Id = sprint.Project.Id, Info = "Sprint Updated", FormViewModel = new SprintSettingsFormViewModel() { Id = sprint.Project.Id, SprintDuration = sprint.Project.SprintDuration }, TableViewModel = new SprintSettingsTableViewModel() { Id = sprint.Project.Id, Sprints = GetTableItemsList(sprint.Project) } }; return(PartialView("_SprintSettings", sprintSettingViewModel)); }