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); } }
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); }