private CaseAnalysisInfo ConstructCaseAnalysisInfoModel(AccelaCase caseInfo, int SFCaseCommentCount, int SFDevCaseCommentCount, int SFQACaseCommentCount, Dictionary <DateTime, string> CommentHistories) { CaseAnalysisInfo caseAnalysisInfo = new CaseAnalysisInfo(); caseAnalysisInfo.Product = caseInfo.Product; caseAnalysisInfo.SFID = caseInfo.CaseNumber; caseAnalysisInfo.JiraKey = String.Empty; caseAnalysisInfo.SFCaseCommentCount = SFCaseCommentCount; caseAnalysisInfo.SFDevCaseCommentCount = SFDevCaseCommentCount; caseAnalysisInfo.SFQACaseCommentCount = SFQACaseCommentCount; string customer = (caseInfo.Customer != null && !String.IsNullOrEmpty(caseInfo.Customer.Name) ? caseInfo.Customer.Name : (caseInfo.Account != null ? caseInfo.Account.Name : "")); if (customer.IndexOf("Accela") >= 0 && caseInfo.Account != null && !String.IsNullOrEmpty(caseInfo.Account.Name)) { customer = caseInfo.Account.Name; } caseAnalysisInfo.Customer = customer; caseAnalysisInfo.Severity = caseInfo.Priority; caseAnalysisInfo.Version = caseInfo.CurrentVersion; caseAnalysisInfo.OpenDate = caseInfo.CreatedDate.ToShortDateString(); caseAnalysisInfo.Summary = caseInfo.Subject; caseAnalysisInfo.SFQueue = caseInfo.Owner.Name; caseAnalysisInfo.SFStatus = caseInfo.Status; caseAnalysisInfo.CommentHistories = CommentHistories; return(caseAnalysisInfo); }
private async void btnScanCaseCrossProject_Click(object sender, EventArgs e) { this.btnScanCaseCrossProject.Enabled = false; string caseIDs = this.txtCaseIdList.Text; List <string> caseIdList = new List <string>(); if (String.IsNullOrEmpty(caseIDs) || caseIDs.Trim().Length == 0) { // Show one error message "ERROR: Please enter case id" (this.MdiParent as MainForm).ShowStatusMessage("ERROR: Please enter case id"); this.btnScanCaseCrossProject.Enabled = true; return; } else { (this.MdiParent as MainForm).ShowStatusMessage(""); string[] caseIDArray = caseIDs.Split(','); Regex reg = new Regex(@"\d{2}ACC-\d{5}"); foreach (string caseId in caseIDArray) { if (reg.IsMatch(caseId)) { if (!caseIdList.Contains(caseId.Trim())) { caseIdList.Add(caseId.Trim()); } } else { // Show one error message "ERROR: Invalid Format for XXXX" (this.MdiParent as MainForm).ShowStatusMessage("ERROR: Invalid Format for " + caseId); this.btnScanCaseCrossProject.Enabled = true; return; } } } List <string> projects = new List <string>(); projects.Add("ENGSUPP"); if (this.chkProjectAATHETA.Checked) { projects.Add("AATHETA"); } if (this.chkProjectCAGAMMA.Checked) { projects.Add("CAGAMMA"); } if (this.chkProjectPMA.Checked) { projects.Add("PMA"); } if (projects.Count == 0) { MessageBox.Show("Please select one project at least."); return; } var GetCaseList = SalesforceProxy.GetCaseList(caseIdList); var caseListTmp = await GetCaseList; Dictionary <string, AccelaCase> AccelaCaseMapper = new Dictionary <string, AccelaCase>(); foreach (var caseInfo in caseListTmp) { AccelaCaseMapper.Add(caseInfo.CaseNumber, caseInfo); } List <AccelaCaseStatusMapper> AccelaCaseStatusMapper = new List <AccelaCaseStatusMapper>(); foreach (string caseId in caseIdList) { var GetIssueListBySalesforceId = JiraProxy.GetIssueListBySalesforceId(caseId, projects); var issueListTmp = await GetIssueListBySalesforceId; AccelaCaseStatusMapper accelaCaseStatus = new AccelaCaseStatusMapper(); foreach (var issue in issueListTmp) { string jiraKey = issue.key; string status = (issue != null ? issue.fields.status.name : ""); if (jiraKey.StartsWith("ENGSUPP-")) { if (String.IsNullOrEmpty(accelaCaseStatus.SalesforceID)) { accelaCaseStatus.SalesforceID = issue.fields.customfield_10600; } accelaCaseStatus.SuppJiraID = jiraKey; accelaCaseStatus.SuppJiraStatus = status; accelaCaseStatus.SuppAssignee = (issue.fields.assignee != null ? issue.fields.assignee.emailAddress : ""); if (AccelaCaseMapper.ContainsKey(accelaCaseStatus.SalesforceID)) { AccelaCase accelaCase = AccelaCaseMapper[accelaCaseStatus.SalesforceID]; accelaCaseStatus.SFQueue = accelaCase.Owner.Name; accelaCaseStatus.SFStatus = accelaCase.Status; accelaCaseStatus.Summary = accelaCase.Subject; } } } foreach (var issue in issueListTmp) { string jiraKey = issue.key; string status = (issue != null ? issue.fields.status.name : ""); if (!jiraKey.StartsWith("ENGSUPP-")) { if (String.IsNullOrEmpty(accelaCaseStatus.SalesforceID)) { accelaCaseStatus.SalesforceID = issue.fields.customfield_10600; if (AccelaCaseMapper.ContainsKey(accelaCaseStatus.SalesforceID)) { AccelaCase accelaCase = AccelaCaseMapper[accelaCaseStatus.SalesforceID]; accelaCaseStatus.SFQueue = accelaCase.Owner.Name; accelaCaseStatus.SFStatus = accelaCase.Status; accelaCaseStatus.Summary = accelaCase.Subject; } } // Skipe some jira issue when their status is same already. //if (status == accelaCaseStatus.SuppJiraStatus) //{ // continue; //} if (String.IsNullOrEmpty(accelaCaseStatus.LinkedJiraID)) { accelaCaseStatus.LinkedJiraID = jiraKey; accelaCaseStatus.LinkedJiraStatus = status; accelaCaseStatus.LinkedJiraAssignee = (issue.fields.assignee != null ? issue.fields.assignee.emailAddress : ""); if (status != accelaCaseStatus.SuppJiraStatus) { accelaCaseStatus.NeedSync = true; } } else { accelaCaseStatus.LinkedJiraID += "," + jiraKey; if (status != "" && accelaCaseStatus.LinkedJiraStatus.IndexOf(status) < 0) { accelaCaseStatus.LinkedJiraStatus += "," + status; } if (status != accelaCaseStatus.SuppJiraStatus) { accelaCaseStatus.NeedSync = true; } if (issue.fields.assignee != null && accelaCaseStatus.LinkedJiraAssignee.IndexOf(issue.fields.assignee.emailAddress) < 0) { accelaCaseStatus.LinkedJiraAssignee += "," + issue.fields.assignee.emailAddress; } } } } // All status is same. //if (!String.IsNullOrEmpty(accelaCaseStatus.LinkedJiraID)) { AccelaCaseStatusMapper.Add(accelaCaseStatus); } } DataTable table = new DataTable("Accela Case Status Report"); table.Columns.Add("No", typeof(int)); table.Columns.Add("SFID", typeof(string)); table.Columns.Add("SuppJiraID", typeof(string)); table.Columns.Add("SuppJiraAssignee", typeof(string)); table.Columns.Add("LinkedJiraID", typeof(string)); table.Columns.Add("LinkedJiraAssignee", typeof(string)); table.Columns.Add("Summary", typeof(string)); table.Columns.Add("SFQueue", typeof(string)); table.Columns.Add("SFStatus", typeof(string)); table.Columns.Add("SuppJiraStatus", typeof(string)); table.Columns.Add("LinkedJiraStatus", typeof(string)); table.Columns.Add("Sync", typeof(bool)); int index = 0; foreach (var accelaCaseStatus in AccelaCaseStatusMapper) { DataRow row = table.NewRow(); row["No"] = ++index; row["SFID"] = accelaCaseStatus.SalesforceID; row["SuppJiraID"] = accelaCaseStatus.SuppJiraID; row["SuppJiraAssignee"] = accelaCaseStatus.SuppAssignee; row["LinkedJiraID"] = accelaCaseStatus.LinkedJiraID; row["LinkedJiraAssignee"] = accelaCaseStatus.LinkedJiraAssignee; row["Summary"] = accelaCaseStatus.Summary; row["SFQueue"] = accelaCaseStatus.SFQueue; row["SFStatus"] = accelaCaseStatus.SFStatus; row["SuppJiraStatus"] = accelaCaseStatus.SuppJiraStatus; row["LinkedJiraStatus"] = accelaCaseStatus.LinkedJiraStatus; row["Sync"] = accelaCaseStatus.NeedSync; table.Rows.Add(row); } this.grdAccelaCaseStatus.AutoGenerateColumns = false; this.grdAccelaCaseStatus.DataSource = table; this.btnScanCaseCrossProject.Enabled = true; }