private async void btnSync_Click(object sender, EventArgs e) { this.btnSync.Enabled = false; DateTime from = this.dtpFrom.Value; DateTime to = this.dtpTo.Value; var issueList = await JiraProxy.GetUpdatedIssueListByAssigneeList(from, to, GetSupportTeamMembers()); if (issueList == null || issueList.Count == 0) { this.btnSync.Enabled = true; return; } Dictionary <string, List <IndividualWorkLog> > IndividualWorkLogs = new Dictionary <string, List <IndividualWorkLog> >(); foreach (var issue in issueList) { if (issue == null) { continue; } /* * string taskKey = issue.fields.parent.key; * string taskSummary = issue.fields.parent.fields.summary; * string taskType = issue.fields.parent.fields.issuetype.name; * string subTaskkey = issue.key; * string subTaskSummary = issue.fields.summary; */ string issueType = issue.fields.issueType.name; IndividualWorkLog individualWorkLog = new IndividualWorkLog(); if ("Sub-task".Equals(issueType, StringComparison.InvariantCultureIgnoreCase)) { /* * issue.fields.assignee.name = "*****@*****.**" * issue.fields.assignee.emailAddress = "*****@*****.**" * issue.fields.assignee.displayName = "Gordon Chen" * issue.fields.issueType.name = "Sub-task" * issue.fields.issueType.subtask = true * issue.fields.parent.key = "ENGSUPP-14215" * issue.fields.parent.fields.summary = "Unable to delete logs in Batch Engine" * issue.fields.parent.fields.status.name = "In Progress" */ var workLogs = await JiraProxy.GetWorklogs(issue); if (workLogs != null && workLogs.Count > 0) { foreach (var worklog in workLogs) { if (DateTime.Compare(worklog.created, from) >= 0 && DateTime.Compare(worklog.created, to) <= 0) { individualWorkLog = new IndividualWorkLog(); individualWorkLog.subTaskKey = issue.key; individualWorkLog.subTaskSummary = issue.fields.summary; individualWorkLog.subTaskAssignee = issue.fields.assignee.displayName; individualWorkLog.jiraIssueKey = issue.fields.parent.key; individualWorkLog.jiraIssueSummary = issue.fields.parent.fields.summary; individualWorkLog.assignee = worklog.author.displayName; individualWorkLog.assigneeEmailAddress = worklog.author.emailAddress; individualWorkLog.timeSpent = worklog.timeSpent; individualWorkLog.comment = worklog.comment.Replace("\r\n", ";"); if (!IndividualWorkLogs.ContainsKey(individualWorkLog.jiraIssueKey)) { IndividualWorkLogs.Add(individualWorkLog.jiraIssueKey, new List <IndividualWorkLog>()); } List <IndividualWorkLog> individualWorkLogList = IndividualWorkLogs[individualWorkLog.jiraIssueKey]; individualWorkLogList.Add(individualWorkLog); IndividualWorkLogs[individualWorkLog.jiraIssueKey] = individualWorkLogList; } } } else { System.Console.WriteLine("No work log on " + issue.key); } } else { var workLogs = await JiraProxy.GetWorklogs(issue); if (workLogs != null && workLogs.Count > 0) { foreach (var worklog in workLogs) { System.Console.WriteLine("Work Log are created on " + worklog.created); if (DateTime.Compare(worklog.created, from) >= 0 && DateTime.Compare(worklog.created, to) <= 0) { individualWorkLog = new IndividualWorkLog(); //individualWorkLog.subTaskKey = issue.fields.parent.key; //individualWorkLog.subTaskSummary = issue.fields.summary; //individualWorkLog.subTaskAssignee = issue.fields.assignee.displayName; individualWorkLog.jiraIssueKey = issue.key; individualWorkLog.jiraIssueSummary = issue.fields.summary; individualWorkLog.assignee = worklog.author.displayName; individualWorkLog.assigneeEmailAddress = worklog.author.emailAddress; individualWorkLog.timeSpent = worklog.timeSpent; individualWorkLog.comment = worklog.comment.Replace("\r\n", ";"); if (!IndividualWorkLogs.ContainsKey(individualWorkLog.jiraIssueKey)) { IndividualWorkLogs.Add(individualWorkLog.jiraIssueKey, new List <IndividualWorkLog>()); } List <IndividualWorkLog> individualWorkLogList = IndividualWorkLogs[individualWorkLog.jiraIssueKey]; individualWorkLogList.Add(individualWorkLog); IndividualWorkLogs[individualWorkLog.jiraIssueKey] = individualWorkLogList; } else { System.Console.WriteLine("Work Log cannot be added."); } } } else { System.Console.WriteLine("No work log on " + issue.key); } } } if (IndividualWorkLogs.Count == 0) { this.btnSync.Enabled = true; return; } DataTable table = new DataTable("Daily Work Log Report"); table.Columns.Add("No", typeof(int)); table.Columns.Add("Name", typeof(string)); table.Columns.Add("EmailAddress", typeof(string)); table.Columns.Add("Effort", typeof(string)); table.Columns.Add("SubTaskID", typeof(string)); table.Columns.Add("SubTaskSummary", typeof(string)); table.Columns.Add("SubTaskAssignee", typeof(string)); table.Columns.Add("SubTaskComment", typeof(string)); table.Columns.Add("JiraKey", typeof(string)); table.Columns.Add("JiraSummary", typeof(string)); int index = 1; foreach (string key in IndividualWorkLogs.Keys) { List <IndividualWorkLog> individualWorkLogList = IndividualWorkLogs[key]; foreach (var workLog in individualWorkLogList) { DataRow row = table.NewRow(); row["No"] = index; row["Name"] = workLog.assignee; row["EmailAddress"] = workLog.assigneeEmailAddress; row["Effort"] = workLog.timeSpent; row["SubTaskID"] = workLog.subTaskKey; row["SubTaskSummary"] = workLog.subTaskSummary; row["SubTaskAssignee"] = workLog.subTaskAssignee; row["SubTaskComment"] = workLog.comment; row["JiraKey"] = workLog.jiraIssueKey; row["JiraSummary"] = workLog.jiraIssueSummary; table.Rows.Add(row); index++; } } dgvWorkLogReport.AutoGenerateColumns = false; dgvWorkLogReport.DataSource = table; this.btnSync.Enabled = true; }