Exemple #1
0
        private static string BaseSql(ProjectInfoSortOptions sort = ProjectInfoSortOptions.Priority)
        {
            return($@"WITH [source] AS (
				SELECT
					[p].*,
					[ptr].[Name] AS [PriorityTier],
					[ptr].[Rank] AS [TierRank],
					[ptr].[MaxProjects] AS [MaxProjects],
					[app].[Name] AS [ApplicationName],
					(SELECT 
						SUM(COALESCE([wid].[EstimateHours], [sz].[EstimateHours])) 
						FROM [dbo].[WorkItem] [wi] LEFT JOIN [dbo].[WorkItemSize] [sz] ON [wi].[SizeId]=[sz].[Id] 
						LEFT JOIN [dbo].[WorkItemDevelopment] [wid] ON [wi].[Id]=[wid].[WorkItemId]
						WHERE [wi].[ProjectId]=[p].[Id] AND [wi].[CloseReasonId] IS NULL) AS [EstimateHours],
					(SELECT COUNT(1) FROM [dbo].[WorkItem] WHERE [ProjectId]=[p].[Id]) AS [TotalWorkItems],
					(SELECT COUNT(1) FROM [dbo].[WorkItem] WHERE [ProjectId]=[p].[Id] AND [CloseReasonId] IS NULL) AS [OpenWorkItems],
					(SELECT COUNT(1) FROM [dbo].[WorkItem] WHERE [ProjectId]=[p].[Id] AND [CloseReasonId] IS NOT NULL) AS [ClosedWorkItems],
					(SELECT COUNT(1) 
						FROM 
							[dbo].[WorkItem] [wi]
							LEFT JOIN [dbo].[WorkItemDevelopment] [wid] ON [wi].[Id]=[wid].[WorkItemId]
							LEFT JOIN [dbo].[WorkItemSize] [sz] ON [wi].[SizeId]=[sz].[Id] 
						WHERE 
							[ProjectId]=[p].[Id] AND [CloseReasonId] IS NULL AND
							COALESCE([wid].[EstimateHours], [sz].[EstimateHours]) IS NULL) AS [UnestimatedWorkItems],
					(SELECT COUNT(1) FROM [dbo].[WorkItem] WHERE [ProjectId]=[p].[Id] AND [CloseReasonId] IS NULL AND [MilestoneId] IS NOT NULL AND [ActivityId] IS NULL) AS [StoppedWorkItems],
					(SELECT COUNT(1) FROM [dbo].[WorkItem] WHERE [ProjectId]=[p].[Id] AND [CloseReasonId] IS NULL AND [MilestoneId] IS NULL) AS [UnscheduledWorkItems],
					(SELECT COUNT(1) FROM [dbo].[WorkItem] WHERE [ProjectId]=[p].[Id] AND [CloseReasonId] IS NULL AND [HasImpediment]=1) AS [ImpededWorkItems],
					CASE
						WHEN EXISTS(SELECT 1 FROM [dbo].[WorkItem] WHERE [ProjectId]=[p].[Id]) THEN 0
						WHEN [p].[HtmlBody] IS NOT NULL THEN 0
						ELSE 1
					END AS [AllowDelete]
				FROM
					[dbo].[Project] [p]
					INNER JOIN [dbo].[Application] [app] ON [p].[ApplicationId]=[app].[Id]
					LEFT JOIN [dbo].[FnPriorityTierRanges](@orgId) [ptr] ON
						[p].[Priority] >= [ptr].[MinPriority] AND
						[p].[Priority] <= [ptr].[MaxPriority]
				WHERE
					[app].[OrganizationId]=@orgId                   
					{{andWhere}}
			) SELECT
				[source].*,
				CASE
					WHEN [TotalWorkItems] > 0 THEN CONVERT(float, [ClosedWorkItems]) / CONVERT(float, [TotalWorkItems])
					ELSE 0
				END AS [PercentComplete]				
			FROM
				[source]
			ORDER BY {SortOptions[sort]}"            );
        }
Exemple #2
0
 public ProjectInfo(ProjectInfoSortOptions sort = ProjectInfoSortOptions.Name) : base(BaseSql(sort))
 {
 }
Exemple #3
0
 public ProjectInfo(ProjectInfoSortOptions sort = ProjectInfoSortOptions.Priority) : base(BaseSql(sort))
 {
 }