Exemplo n.º 1
0
        public JiraIssue(JiraServer server, JToken issue)
        {
            try {
                Server = server;

                Key        = issue["key"].Value <string>();
                Id         = issue["id"].Value <int>();
                ProjectKey = Key.Substring(0, Key.LastIndexOf('-'));

                var fields = issue["fields"];

                ParentKey = fields["parent"] != null && fields["parent"].HasValues ? fields["parent"]["key"].Value <string>() : null;
                getSubtasks(fields["subtasks"]);
                Summary = fields["summary"].Value <string>();
                getAttachments(fields["attachment"]);
                Status        = fields["status"]["name"].Value <string>();
                StatusIconUrl = fields["status"]["iconUrl"].Value <string>();
                StatusId      = fields["status"]["id"].Value <int>();
                var prio = fields["priority"];
                if (prio != null && prio.HasValues)
                {
                    Priority        = prio["name"].Value <string>();
                    PriorityIconUrl = fields["priority"]["iconUrl"].Value <string>();
                    PriorityId      = fields["priority"]["id"].Value <int>();
                }

                var renderedDescription = issue["renderedFields"]["description"];
                Description = renderedDescription != null?renderedDescription.Value <string>() : fields["description"].Value <string>();

                IssueType        = fields["issuetype"]["name"].Value <string>();
                IssueTypeIconUrl = fields["issuetype"]["iconUrl"].Value <string>();
                IssueTypeId      = fields["issuetype"]["id"].Value <int>();
                if (fields["assignee"] != null && fields["assignee"].HasValues)
                {
                    Assignee = fields["assignee"]["name"].Value <string>();
                    JiraServerCache.Instance.getUsers(server).putUser(new JiraUser(Assignee, fields["assignee"]["displayName"].Value <string>()));
                }
                else
                {
                    Assignee = "Unknown";
                }
                if (fields["reporter"] != null && fields["reporter"].HasValues)
                {
                    Reporter = fields["reporter"]["name"].Value <string>();
                    JiraServerCache.Instance.getUsers(server).putUser(new JiraUser(Reporter, fields["reporter"]["displayName"].Value <string>()));
                }
                else
                {
                    Reporter = "Unknown";
                }
                CreationDate = DateTime.Parse(fields["created"].Value <string>(), CultureInfo.InvariantCulture);
                UpdateDate   = DateTime.Parse(fields["updated"].Value <string>(), CultureInfo.InvariantCulture);
                Resolution   = fields["resolution"] != null && fields["resolution"].HasValues ? fields["resolution"]["name"].Value <string>() : null;
                ResolutionId = Resolution != null ? fields["resolution"]["id"].Value <int>() : UNKNOWN;

                getTimeFieldsFromJson(issue);

                if (fields["versions"] != null)
                {
                    foreach (var v in fields["versions"])
                    {
                        Versions.Add(v["name"].Value <string>());
                    }
                }
                if (fields["fixVersions"] != null)
                {
                    foreach (var v in fields["fixVersions"])
                    {
                        FixVersions.Add(v["name"].Value <string>());
                    }
                }
                if (fields["components"] != null)
                {
                    foreach (var v in fields["components"])
                    {
                        Components.Add(v["name"].Value <string>());
                    }
                }
                var env = fields["environment"];
                Environment = env != null?env.Value <string>() : null;

                getComments(fields["comment"], issue["renderedFields"]["comment"]);
                getIssueLinks(fields["issuelinks"]);

//                RestIssue = issue;
            } catch (Exception e) {
                throw new InvalidOperationException("Unable to parse issue JSON object: " + issue, e);
            }
        }
Exemplo n.º 2
0
        public void UpdateFromExisting(Issue issue)
        {
            this.FixVersions          = FixVersions == null || FixVersions?.Count == 0 ? new List <FixVersion>() : FixVersions;
            this.Status               = UpdateIfDifferent <string>(Status, issue.fields.status.name)?.ToString();
            this.Summary              = UpdateIfDifferent <string>(Summary, issue.fields.summary)?.ToString();
            this.Reporter             = UpdateIfDifferent <string>(Reporter, issue.fields.reporter.displayName)?.ToString();
            this.Assignee             = UpdateIfDifferent <string>(Assignee, issue.fields.assignee?.displayName)?.ToString();
            this.NetsuiteTicketNumber = UpdateIfDifferent <string>(NetsuiteTicketNumber, issue.fields?.customfield_10080)?.ToString();
            this.IssueId              = UpdateIfDifferent <string>(IssueId, issue.id).ToString();
            this.LastRefreshTime      = DateTime.Now;
            this.NetsuiteTicketNumber = issue.fields.customfield_10080;
            try
            {
                var newFixVersion         = (_serializer.Deserialize <FixVersion[]>(issue.fields.fixVersions)).ToList();
                var contextualFixVersions = new List <FixVersion>();
                var fixVersionCopy        = this.FixVersions.ToArray();
                if (newFixVersion.Count > 0)
                {
                    foreach (FixVersion fixVersion in newFixVersion)
                    {
                        if (!_dbContext.FixVersions.Any() || (!_dbContext.FixVersions.Any(x => x.id == fixVersion.id) && !fixVersionCopy.Contains(fixVersion)))
                        {
                            _dbContext.Entry(fixVersion).State = EntityState.Added;
                            contextualFixVersions.Add(fixVersion);
                        }
                        else
                        {
                            contextualFixVersions.Add(_dbContext.FixVersions.FirstOrDefault(x => x.name == fixVersion.name));
                        }
                        try
                        {
                            _dbContext.SaveChanges();
                        }
                        catch { }
                    }
                    FixVersions.AddRange(contextualFixVersions.ToList());
                    _dbContext.SaveChanges();
                }
            }
            catch (Exception ex)
            {
                this.FixVersions = new List <FixVersion>(); //= _dbContext.FixVersions.Create();
            }

            //manage linked netsuite tickets
            //List<NetsuiteApiResult> nsTickets = new List<NetsuiteApiResult>();
            //foreach (var ticket in issue.fields.customfield_10080.Split(',').ToList())
            //{
            //    if (NetsuiteApiResults.All(x => x.columns.casenumber != ticket))
            //    {
            //        if (!_dbContext.NetsuiteTickets.Any(x => x.columns.casenumber == ticket))
            //        {
            //            NetsuiteApiResult newNsApiResult = new NetsuiteApiResult();
            //            newNsApiResult.columns = new Columns();
            //            newNsApiResult.columns.casenumber = ticket;
            //            newNsApiResult.columns.JiraIssues.Add(this);
            //            newNsApiResult.id = new Random().Next(1, 99999).ToString();
            //            _dbContext.Entry(ticket).State = EntityState.Added;
            //            nsTickets.Add(newNsApiResult);
            //        }
            //        else
            //        {
            //            NetsuiteApiResult existingApiResult = _dbContext.NetsuiteTickets.FirstOrDefault(x => x.columns.casenumber == ticket);
            //            nsTickets.Add(existingApiResult);
            //        }
            //    }
            //}
            //NetsuiteApiResults.AddRange(nsTickets);


            //manage new comments
            List <String> commentsToAdd = new List <string>();

            foreach (var comment in issue.fields.comments)
            {
                if (Comments.All(x => comment.body.ToString() != x))
                {
                    commentsToAdd.Add(comment.body);
                }
            }
            Comments.AddRange(commentsToAdd);
        }