public WorkMetric(JItemStatus itemStatus, DateTime start, DateTime end, int startHour, int endHour, JIssue issue, List <JIssue> issues, string forceIgnoreReason) { ItemStatus = itemStatus; Start = start; End = end; StartHour = startHour; EndHour = endHour; if (!string.IsNullOrWhiteSpace(forceIgnoreReason)) { _forceIgnoreReason = forceIgnoreReason; } CalculateExclusions(issue, issues); }
private List <WorkMetric> BuildIssueMetrics(JIssue issue, List <JIssue> jIssues) { var ret = new List <WorkMetric>(); SortedDictionary <DateTime, JItemStatus> statusStartList = new SortedDictionary <DateTime, JItemStatus>(); foreach (var changeLog in issue.ChangeLogs) { var items = changeLog.Items.Where(item => item.FieldName == "status"); foreach (JIssueChangeLogItem item in items) { var itemStatus = _repo.JItemStatuses.SingleOrDefault(y => y.StatusName.ToLower() == item.ToValue.ToLower()); if (itemStatus == null && issue.IssueType.ToLower() != "epic") { var err = string.Format("Error getting JItemStatus for Issue {0} ({1}). Cannot determine calendar/active work time for state: '{2}'. (** If this item SHOULD be included in calendarWork or activeWork calculations then a value will need to be added to the JiraConIssueStatus.txt for status: {2})", issue.Key, issue.IssueType, item.ToValue); ConsoleUtil.WriteLine(err, ConsoleColor.DarkRed, ConsoleColor.Gray, false); ConsoleUtil.WriteLine("PRESS ANY KEY TO CONTINUE", ConsoleColor.DarkRed, ConsoleColor.Gray, false); var ok = Console.ReadKey(true); } if (itemStatus == null) { itemStatus = new JItemStatus(item.ToValue.ToLower(), "ERROR", "ERROR", "ERROR"); } statusStartList.Add(changeLog.CreatedDate, itemStatus); } } if (statusStartList.Count == 0) { return(ret); } var keys = statusStartList.Keys.ToList().OrderBy(x => x).ToList(); string forceIgnoreReason = null; if (_forceIgnoreKeyAndReason.ContainsKey(issue.Key)) { forceIgnoreReason = _forceIgnoreKeyAndReason[issue.Key]; } for (int i = 0; i < keys.Count; i++) { //takes care of entries for first (if more than one item exists) and last if (keys.Count == 1) { ret.Add(new WorkMetric(statusStartList[keys[i]], keys[i], DateTime.Now, _startHour, _endHour, issue, jIssues, forceIgnoreReason)); } else if (i == keys.Count - 1) { ret.Add(new WorkMetric(statusStartList[keys[i - 1]], keys[i - 1], keys[i], _startHour, _endHour, issue, jIssues, forceIgnoreReason)); ret.Add(new WorkMetric(statusStartList[keys[i]], keys[i], DateTime.Now, _startHour, _endHour, issue, jIssues, forceIgnoreReason)); } else if (i > 0) { ret.Add(new WorkMetric(statusStartList[keys[i - 1]], keys[i - 1], keys[i], _startHour, _endHour, issue, jIssues, forceIgnoreReason)); } } return(ret); }