public async Task <RedirectResult> Create(WorkItem workItem, string returnUrl) { // make sure incoming number has not been set so that SetNumber method works workItem.Number = 0; // make sure item is part of this org workItem.OrganizationId = _data.CurrentOrg.Id; using (var cn = _data.GetConnection()) { if (workItem.MilestoneId < 0) { var indirectMilestones = new IndirectMilestones(); workItem.MilestoneId = await indirectMilestones.Options[workItem.MilestoneId.Value].GetMilestoneIdAsync(cn, _data.CurrentUser, workItem.OrganizationId, workItem.TeamId); } if (workItem.TeamId == 0) { if (workItem.ApplicationId.HasValue) { var app = await cn.FindAsync <Application>(workItem.ApplicationId.Value); workItem.TeamId = app.TeamId ?? _data.CurrentOrgUser.CurrentTeamId ?? 0; } if (workItem.TeamId == 0 && workItem.ProjectId.HasValue) { var prj = await cn.FindAsync <Project>(workItem.ProjectId.Value); workItem.TeamId = prj.TeamId; if (!workItem.ApplicationId.HasValue) { workItem.ApplicationId = prj.ApplicationId; } } if (workItem.TeamId == 0) { throw new Exception("Couldn't determine the TeamId for the new work item."); } } await workItem.SaveHtmlAsync(_data, cn); await workItem.SetNumberAsync(cn); if (await _data.TrySaveAsync(cn, workItem)) { if (workItem.AssignToUserId.HasValue) { await AssignToInnerAsync(cn, workItem.AssignToUserId.Value, workItem); } return(Redirect(returnUrl + $"#{workItem.Number}")); } else { // error message should be at the top return(Redirect(returnUrl)); } } }
public async Task <JsonResult> WorkItem(WorkItem fields) { try { var workItem = await _data.FindWhereAsync <WorkItem>(new { OrganizationId = _data.CurrentOrg.Id, fields.Number }); if (fields.TeamId != workItem.TeamId) { // if the team changes, then some other fields must be cleared workItem.ApplicationId = null; workItem.ProjectId = null; workItem.MilestoneId = null; } string backgroundColor = string.Empty; string className = "badge-secondary"; bool getColor = (fields.SizeId != workItem.SizeId || workItem.SizeId.HasValue); bool showMissingEstimateModifier = !fields.SizeId.HasValue; string missingEstimateModifierId = $"mod-{workItem.Number}-{OpenWorkItemsResult.UnestimatedModifier}"; workItem.TeamId = fields.TeamId; workItem.ApplicationId = fields.ApplicationId; workItem.ProjectId = fields.ProjectId; if (fields.MilestoneId.HasValue) { if (fields.MilestoneId > 0) { workItem.MilestoneId = fields.MilestoneId; } else if (fields.MilestoneId < 0) { using (var cn = _data.GetConnection()) { var indirectMilestones = new IndirectMilestones(); workItem.MilestoneId = await indirectMilestones.Options[fields.MilestoneId.Value].GetMilestoneIdAsync(cn, _data.CurrentUser, _data.CurrentOrg.Id, fields.TeamId); } } } else { workItem.MilestoneId = null; } workItem.SizeId = fields.SizeId; workItem.CloseReasonId = fields.CloseReasonId; workItem.ModifiedBy = User.Identity.Name; workItem.DateModified = _data.CurrentUser.LocalTime; await _data.TryUpdateAsync(workItem, r => r.TeamId, r => r.ApplicationId, r => r.ProjectId, r => r.MilestoneId, r => r.SizeId, r => r.CloseReasonId, r => r.ModifiedBy, r => r.DateModified); if (getColor) { using (var cn = _data.GetConnection()) { var item = await new OpenWorkItems() { Id = workItem.Id, OrgId = _data.CurrentOrg.Id, IsOpen = null }.ExecuteSingleAsync(cn); if (item.SizeId.HasValue) { backgroundColor = HtmlHelpers.WeightedColorToHex(item.ColorGradientPosition); className = string.Empty; } else { backgroundColor = string.Empty; className = "badge-secondary"; } } } return(Json(new { success = true, backgroundColor, className, showMissingEstimateModifier, missingEstimateModifierId })); } catch (Exception exc) { return(Json(new { success = false, message = exc.Message })); } }