/// <summary> /// Get Items By Selected Matrix Filter /// </summary> /// <param name="projectName"> /// project Name /// </param> /// <returns> /// Work Item list /// </returns> private MatrixData GetItemsByMatrixFilter(string projectName) { var data = new MatrixData(); string rowStateCondition = BuildQueryStateCondition(matrixReportData.StateRowsSelectedItem); string columnStateCondition = BuildQueryStateCondition(matrixReportData.StateColumnsSelectedItem); string relatedStateCondition = matrixReportData.RelatedSelectedItem == ResourceHelper.GetResourceString("ALL") ? string.Empty : string.Format("[System.Links.LinkType] = '{0}'", matrixReportData.RelatedSelectedItem); string dateCondition = BuildQueryDateCondition(); string queryText; if (matrixReportData.IncludeNotLinkedItems) { // Rows queryText = BuildQuery(projectName, matrixReportData.RowsTypesSelectedItem, rowStateCondition, dateCondition, true, string.Empty); data.Rows = tfsManager.ExecuteQuery(queryText).Cast <WorkItem>().ToList(); // Columns queryText = BuildQuery(projectName, matrixReportData.ColumnsTypesSelectedItem, columnStateCondition, dateCondition, true, string.Empty); data.Columns = tfsManager.ExecuteQuery(queryText).Cast <WorkItem>().ToList(); } else { // columns queryText = BuildQuery(projectName, matrixReportData.ColumnsTypesSelectedItem, columnStateCondition, dateCondition, false); var q = new Query(tfsManager.ItemsStore, queryText); WorkItemLinkInfo[] colIds = q.RunLinkQuery(); // rows queryText = BuildQuery(projectName, matrixReportData.RowsTypesSelectedItem, rowStateCondition, dateCondition, false, relatedStateCondition); q = new Query(tfsManager.ItemsStore, queryText); WorkItemLinkInfo[] rowIds = q.RunLinkQuery(); foreach (WorkItemLinkInfo rowId in rowIds) { foreach (WorkItemLinkInfo colId in colIds) { if (colId.TargetId == rowId.SourceId && colId.SourceId != 0) { var rowItem = tfsManager.GetWorkItem(rowId.SourceId); var colItem = tfsManager.GetWorkItem(colId.SourceId); if (IsLinked(rowItem, colItem)) { if (data.Rows.All(t => t.Id != rowId.SourceId)) { data.Rows.Add(rowItem); } if (data.Columns.All(t => t.Id != colId.SourceId)) { data.Columns.Add(colItem); } } } } } } return(data); }
/// <summary> /// Generate Traceability Matrix Report /// </summary> /// <param name="project"> /// Project Name /// </param> public void GenerateMatrix(string project) { var popup = new MatrixReport(); InitMatrixPopUp(popup, project); popup.Create(null, Icons.TraceabilityMatrix); if (!popup.IsCanceled) { matrixReportData.ColumnsTypesSelectedItem = popup.HorizontalTypes.SelectedItem.ToString(); matrixReportData.RowsTypesSelectedItem = popup.VerticalTypes.SelectedItem.ToString(); matrixReportData.RelatedSelectedItem = popup.Relateds.SelectedItem.ToString(); if (popup.chkIncludeNotLinked.IsChecked != null) { matrixReportData.IncludeNotLinkedItems = popup.chkIncludeNotLinked.IsChecked.Value; } matrixReportData.DateFrom = popup.dateFrom.SelectedDate; matrixReportData.DateTo = popup.dateTo.SelectedDate; matrixReportData.StateColumnsSelectedItem = popup.GetSelectedStates(popup.StateHorisontal); matrixReportData.StateRowsSelectedItem = popup.GetSelectedStates(popup.StateVertical); progressDialog = new ProgressDialog(); string uiCulture = Thread.CurrentThread.CurrentUICulture.ToString(); progressDialog.Execute( (cancelTokenSource) => { Thread.CurrentThread.CurrentUICulture = new CultureInfo(uiCulture); cancellationTokenSource = cancelTokenSource; var workItemsInColumn = new List <WorkItem>(); var workItemsInRow = new List <WorkItem>(); if (!cancellationTokenSource.IsCancellationRequested) { progressDialog.UpdateProgress(0, ResourceHelper.GetResourceString("MSG_RETRIEVING_DATA"), true); MatrixData data = GetItemsByMatrixFilter(project); workItemsInRow = data.Rows; workItemsInColumn = data.Columns; if (workItemsInRow.Count == 0 || workItemsInColumn.Count == 0) { MessageBox.Show(ResourceHelper.GetResourceString("MSG_DATA_NOT_AVAILABLE"), string.Empty, MessageBoxButton.OK, MessageBoxImage.Information); return; } workItemsInRow.Sort((x, y) => x.Id.CompareTo(y.Id)); workItemsInColumn.Sort((x, y) => x.Id.CompareTo(y.Id)); DrawMatrixReport(project, workItemsInRow, workItemsInColumn); } }); progressDialog.Create(string.Format(ResourceHelper.GetResourceString("MSG_TRACEBILITY_MATRIX"), project), Icons.TraceabilityMatrix); } }
/// <summary> /// Get Items By Selected Matrix Filter /// </summary> /// <param name="projectName"> /// project Name /// </param> /// <returns> /// Work Item list /// </returns> private MatrixData GetItemsByMatrixFilter(string projectName) { var data = new MatrixData(); string rowStateCondition = BuildQueryStateCondition(matrixReportData.StateRowsSelectedItem); string columnStateCondition = BuildQueryStateCondition(matrixReportData.StateColumnsSelectedItem); string relatedStateCondition = matrixReportData.RelatedSelectedItem == ResourceHelper.GetResourceString("ALL") ? string.Empty : string.Format("[System.Links.LinkType] = '{0}'", matrixReportData.RelatedSelectedItem); string dateCondition = BuildQueryDateCondition(); string queryText; if (matrixReportData.IncludeNotLinkedItems) { // Rows queryText = BuildQuery(projectName, matrixReportData.RowsTypesSelectedItem, rowStateCondition, dateCondition, true, string.Empty); data.Rows = tfsManager.ExecuteQuery(queryText).Cast<WorkItem>().ToList(); // Columns queryText = BuildQuery(projectName, matrixReportData.ColumnsTypesSelectedItem, columnStateCondition, dateCondition, true, string.Empty); data.Columns = tfsManager.ExecuteQuery(queryText).Cast<WorkItem>().ToList(); } else { // columns queryText = BuildQuery(projectName, matrixReportData.ColumnsTypesSelectedItem, columnStateCondition, dateCondition, false); var q = new Query(tfsManager.ItemsStore, queryText); WorkItemLinkInfo[] colIds = q.RunLinkQuery(); // rows queryText = BuildQuery(projectName, matrixReportData.RowsTypesSelectedItem, rowStateCondition, dateCondition, false, relatedStateCondition); q = new Query(tfsManager.ItemsStore, queryText); WorkItemLinkInfo[] rowIds = q.RunLinkQuery(); foreach (WorkItemLinkInfo rowId in rowIds) { foreach (WorkItemLinkInfo colId in colIds) { if (colId.TargetId == rowId.SourceId && colId.SourceId != 0) { var rowItem = tfsManager.GetWorkItem(rowId.SourceId); var colItem = tfsManager.GetWorkItem(colId.SourceId); if (IsLinked(rowItem, colItem)) { if (data.Rows.All(t => t.Id != rowId.SourceId)) { data.Rows.Add(rowItem); } if (data.Columns.All(t => t.Id != colId.SourceId)) { data.Columns.Add(colItem); } } } } } } return data; }