private void DisplayInfoForTheUser(ProgressChangedEventArgs e) { OwnUserState userState = e.UserState as OwnUserState; labelInfo.Text = userState.Status; if (userState.UpdateNeeded == true) { userState.UpdateNeeded = false; } }
internal WorkItemCollection GetWorkItemCollection(string startDate) { // It is needed, to get all the WIs from the start date because it is possible, that somebody made a change out of the selected time period for the WI. string wiql = "SELECT * FROM WorkItems WHERE [System.TeamProject] ='TIA' AND " + "([System.WorkItemType] = 'Request' AND [Siemens.Industry.Common.Component] CONTAINS 'PLF') AND " + "[System.ChangedDate] >= '" + startDate + "'"; OwnUserState userState = new OwnUserState() { Status = "Getting WorkItems..." }; BackgroundWorker.ReportProgress(-1, userState); WorkItemCollection workItemCollection = Utils.TfsUtils.QueryWorkItems(wiql); return(workItemCollection); }
private WorkItemCollection GetWorkItemCollection() { // It is needed, to get all the WIs from the start date because it is possible, that somebody made a change out of the selected time period for the WI. string wiql = "SELECT * FROM WorkItems WHERE [System.TeamProject] ='TIA' AND " + "(([System.WorkItemType] = 'Task' AND" + "[System.AreaPath] UNDER 'TIA\\Development\\HMI Runtime Innovation Line' ) OR " + "([System.WorkItemType] = 'Request' AND [Siemens.Industry.Common.Component] CONTAINS 'PLF')) AND " + "[System.ChangedDate] >= '" + dateTimePicker_StartDate.Value.Date.ToString() + "'"; OwnUserState userState = new OwnUserState() { Status = "Getting WorkItems..." }; m_BackgroundWorker.ReportProgress(-1, userState); WorkItemCollection workItemCollection = Utils.TfsUtils.QueryWorkItems(wiql); return(workItemCollection); }
void backgroundWorker_ProgressChanged(object sender, ProgressChangedEventArgs e) { if (e.ProgressPercentage < 0) { toolStripProgressBar_Info.Style = ProgressBarStyle.Marquee; TaskbarProgress.SetState(this.Handle, TaskbarProgress.TaskbarStates.Indeterminate); } else { toolStripProgressBar_Info.Style = ProgressBarStyle.Blocks; toolStripProgressBar_Info.Value = e.ProgressPercentage; TaskbarProgress.SetValue(this.Handle, e.ProgressPercentage, 100); } OwnUserState userState = e.UserState as OwnUserState; labelInfo.Text = userState.Status; if (userState.UpdateNeeded == true) { dataGridView_Result.Refresh(); userState.UpdateNeeded = false; } }
private void ParseTFSHistory(WorkItemCollection workItemCollection) { if (workItemCollection != null) { DataRow dr; WorkItem workItem; OwnUserState userState = new OwnUserState(); double savedCompletedWorkOriginalValue, completedDelta, remainingDelta, rqEffort = 0; Field savedRemainingWorkField, remainingWorkField, completedWorkField; DateTime changeDate, startDate = dateTimePicker_StartDate.Value.Date, endDate = dateTimePicker_EndDate.Value.Date.AddHours(23.9999); bool hackInProgress, isRequest, isOpenIssue = false, rqEffortFound = false; int foundItems = 0, lastrow = 0, workItemCount = workItemCollection.Count; string changedBy, history, authenticatedUser = Utils.TfsUtils.AuthorizedUser; // Completed(Original)Value, Remaining... object COV, CV, ROV, RV; userState.Status = "Starting to parse..."; m_BackgroundWorker.ReportProgress(0, userState); for (int i = 0; i < workItemCount; i++) { if (m_BackgroundWorker.CancellationPending) { i = workItemCount; continue; } workItem = workItemCollection[i]; isRequest = workItem.Type.Name.ToUpperInvariant().Equals("REQUEST"); isOpenIssue = false; userState.Status = string.Format("Checking {0}. Found: {1}", workItem.Id, foundItems); m_BackgroundWorker.ReportProgress((i * 100) / workItemCount, userState); savedCompletedWorkOriginalValue = 0; savedRemainingWorkField = null; remainingDelta = 0; dr = null; hackInProgress = false; foreach (Revision workItemRevision in workItem.Revisions) { changeDate = (DateTime)workItemRevision.Fields["Changed Date"].Value; changedBy = workItemRevision.Fields["Changed By"].Value.ToString(); if (changedBy == authenticatedUser && changeDate >= startDate && changeDate <= endDate) { rqEffort = 0; rqEffortFound = false; history = workItemRevision.Fields["History"].Value.ToString().ToLowerInvariant(); if (isRequest) { isOpenIssue = workItem.Fields["Type Of Request"].Value.ToString().ToUpperInvariant() == ("OPEN ISSUE"); foreach (string regexPattern in m_regexPatternList) { Regex regex = new Regex(regexPattern); var match = regex.Match(history); string hours = match.Groups["hours"].Value; if (!string.IsNullOrEmpty(hours)) { if (rqEffort != 0) { MessageBox.Show(string.Format("An RQ effort: {0} in Work Item {1}, in revision {2} is already parsed either for ITEST or DEV.\nDuplicate entry in one revision?", rqEffort, workItem.Id, workItemRevision.Index), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } rqEffortFound = true; hours = hours.Replace(".", DecimalSeparator); hours = hours.Replace(",", DecimalSeparator); if (!double.TryParse(hours, out rqEffort)) { MessageBox.Show(string.Format("Unable to parse RQ effort: {0} in Work Item {1}, in revision {2}", hours, workItem.Id, workItemRevision.Index), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } } } } remainingWorkField = workItemRevision.Fields["Remaining Work"]; completedWorkField = workItemRevision.Fields["Completed Work"]; COV = completedWorkField.OriginalValue; CV = completedWorkField.Value; ROV = remainingWorkField.OriginalValue; RV = remainingWorkField.Value; completedDelta = 0; if (((COV != null || hackInProgress || isRequest) && CV != COV) || rqEffortFound) { if (!rqEffortFound && CV != null) { if (COV != null) { completedDelta = (double)CV - (double)COV; } else if (hackInProgress) { completedDelta = (double)CV - savedCompletedWorkOriginalValue; remainingWorkField = savedRemainingWorkField; savedCompletedWorkOriginalValue = 0; savedRemainingWorkField = null; hackInProgress = false; } else if (isRequest) { completedDelta = (double)CV; } } else if (!rqEffortFound) { // Hack: the user changed the the origial meaningful value to 'null'. Probably the user cleared the field accidentally, and in a next revision it is fixed. if (workItemRevision.Index == workItem.Revisions.Count - 1) { // This is the last revision: not yet fixed. // Add error line. dr = AddResultTableRow(workItem, workItemRevision, changedBy, remainingWorkField, completedWorkField, null, null, null, "completedWorkField.Value == null and this is the last revision", false); // Skip this. continue; } else { hackInProgress = true; savedCompletedWorkOriginalValue = (double)COV; savedRemainingWorkField = remainingWorkField; continue; } } else if (rqEffortFound) { completedDelta = rqEffort; } foundItems++; userState.UpdateNeeded = true; if (!isRequest && !rqEffortFound) { if (ROV != null && RV != null) { remainingDelta = (double)RV - (double)ROV; } else if (RV != null) { remainingDelta = (double)RV; } else if (ROV != null) { remainingDelta = (double)ROV; } else { remainingDelta = 0; } } dr = AddResultTableRow(workItem, workItemRevision, changedBy, remainingWorkField, completedWorkField, completedDelta, remainingDelta, rqEffort, string.Empty, isOpenIssue); lastrow = UpdateSumTable(lastrow, changedBy, completedDelta, rqEffort, isOpenIssue); } } } if (hackInProgress) { // Hack not finished. Add error line. dr = AddResultTableRow(workItem, null, null, null, null, null, null, null, string.Format("The CompletedWork Value was nulled, although there was a CompletedWork OriginalValue with {0} ", savedCompletedWorkOriginalValue), false); hackInProgress = false; } } } }
// TODO: This should be done in some nicer way :S LINQ maybe? private void ParseTFSHistory(WorkItemCollection workItemCollection, DateTime startDate, DateTime endDate) { if (workItemCollection != null) { WorkItem workItem; OwnUserState userState = new OwnUserState(); double itestEffort = 0; DateTime changeDate; endDate = endDate.AddHours(23.9999); bool isOpenIssue = false; int foundItems = 0, workItemCount = workItemCollection.Count; string changedBy, history; userState.Status = "Starting to parse..."; BackgroundWorker.ReportProgress(0, userState); for (int i = 0; i < workItemCount; i++) { if (BackgroundWorker.CancellationPending) { i = workItemCount; continue; } workItem = workItemCollection[i]; isOpenIssue = false; userState.Status = string.Format("Checking {0}. Found: {1}", workItem.Id, foundItems); BackgroundWorker.ReportProgress((i * 100) / workItemCount, userState); foreach (Revision workItemRevision in workItem.Revisions) { changeDate = (DateTime)workItemRevision.Fields["Changed Date"].Value; changedBy = workItemRevision.Fields["Changed By"].Value.ToString(); if (Parent.Users.Contains(changedBy) && changeDate >= startDate && changeDate <= endDate) { itestEffort = 0; history = workItemRevision.Fields["History"].Value.ToString().ToLowerInvariant(); isOpenIssue = workItem.Fields["Type Of Request"].Value.ToString().ToUpperInvariant() == ("OPEN ISSUE"); Regex regex = new Regex(@"itest.e(f+)ort?:.?(?<hours>(\d+[\.|\,]?)\d*)"); var match = regex.Match(history); string hours = match.Groups["hours"].Value; if (!string.IsNullOrEmpty(hours)) { hours = hours.Replace(".", DecimalSeparator); hours = hours.Replace(",", DecimalSeparator); if (!double.TryParse(hours, out itestEffort)) { MessageBox.Show(string.Format("Unable to parse ITEST effort: {0} in Work Item {1}, in revision {2}", hours, workItem.Id, workItemRevision.Index), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } else { foundItems++; userState.UpdateNeeded = true; } Parent.UpdateSumValue(itestEffort, isOpenIssue); } } } } } }