コード例 #1
0
        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));
                }
            }
        }
コード例 #2
0
        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 }));
            }
        }