示例#1
0
        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;
        }