diff --git a/AdminUI/LearningHub.Nhs.AdminUI/LearningHub.Nhs.AdminUI.csproj b/AdminUI/LearningHub.Nhs.AdminUI/LearningHub.Nhs.AdminUI.csproj
index 5be3c7dcf..14ddfdbde 100644
--- a/AdminUI/LearningHub.Nhs.AdminUI/LearningHub.Nhs.AdminUI.csproj
+++ b/AdminUI/LearningHub.Nhs.AdminUI/LearningHub.Nhs.AdminUI.csproj
@@ -92,7 +92,7 @@
-
+
diff --git a/LearningHub.Nhs.WebUI/LearningHub.Nhs.WebUI.csproj b/LearningHub.Nhs.WebUI/LearningHub.Nhs.WebUI.csproj
index 5941936e3..a59bfcbcb 100644
--- a/LearningHub.Nhs.WebUI/LearningHub.Nhs.WebUI.csproj
+++ b/LearningHub.Nhs.WebUI/LearningHub.Nhs.WebUI.csproj
@@ -111,7 +111,7 @@
-
+
diff --git a/OpenAPI/LearningHub.Nhs.OpenApi.Models/LearningHub.Nhs.OpenApi.Models.csproj b/OpenAPI/LearningHub.Nhs.OpenApi.Models/LearningHub.Nhs.OpenApi.Models.csproj
index 7a4aad8fc..e7faef3dd 100644
--- a/OpenAPI/LearningHub.Nhs.OpenApi.Models/LearningHub.Nhs.OpenApi.Models.csproj
+++ b/OpenAPI/LearningHub.Nhs.OpenApi.Models/LearningHub.Nhs.OpenApi.Models.csproj
@@ -16,7 +16,7 @@
-
+
diff --git a/OpenAPI/LearningHub.Nhs.OpenApi.Services.Interface/LearningHub.Nhs.OpenApi.Services.Interface.csproj b/OpenAPI/LearningHub.Nhs.OpenApi.Services.Interface/LearningHub.Nhs.OpenApi.Services.Interface.csproj
index 1f6967d55..38a5e9711 100644
--- a/OpenAPI/LearningHub.Nhs.OpenApi.Services.Interface/LearningHub.Nhs.OpenApi.Services.Interface.csproj
+++ b/OpenAPI/LearningHub.Nhs.OpenApi.Services.Interface/LearningHub.Nhs.OpenApi.Services.Interface.csproj
@@ -16,7 +16,7 @@
-
+
diff --git a/OpenAPI/LearningHub.Nhs.OpenApi.Services/LearningHub.Nhs.OpenApi.Services.csproj b/OpenAPI/LearningHub.Nhs.OpenApi.Services/LearningHub.Nhs.OpenApi.Services.csproj
index 0ca91c767..3524cb9e4 100644
--- a/OpenAPI/LearningHub.Nhs.OpenApi.Services/LearningHub.Nhs.OpenApi.Services.csproj
+++ b/OpenAPI/LearningHub.Nhs.OpenApi.Services/LearningHub.Nhs.OpenApi.Services.csproj
@@ -24,7 +24,7 @@
-
+
diff --git a/WebAPI/LearningHub.Nhs.API/LearningHub.Nhs.Api.csproj b/WebAPI/LearningHub.Nhs.API/LearningHub.Nhs.Api.csproj
index 6ffba9df6..6a57923bd 100644
--- a/WebAPI/LearningHub.Nhs.API/LearningHub.Nhs.Api.csproj
+++ b/WebAPI/LearningHub.Nhs.API/LearningHub.Nhs.Api.csproj
@@ -30,7 +30,7 @@
-
+
diff --git a/WebAPI/LearningHub.Nhs.Api.Shared/LearningHub.Nhs.Api.Shared.csproj b/WebAPI/LearningHub.Nhs.Api.Shared/LearningHub.Nhs.Api.Shared.csproj
index 831497bc2..fa26a95ea 100644
--- a/WebAPI/LearningHub.Nhs.Api.Shared/LearningHub.Nhs.Api.Shared.csproj
+++ b/WebAPI/LearningHub.Nhs.Api.Shared/LearningHub.Nhs.Api.Shared.csproj
@@ -9,7 +9,7 @@
-
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/WebAPI/LearningHub.Nhs.Api.UnitTests/LearningHub.Nhs.Api.UnitTests.csproj b/WebAPI/LearningHub.Nhs.Api.UnitTests/LearningHub.Nhs.Api.UnitTests.csproj
index 6da2ec625..17b974e8b 100644
--- a/WebAPI/LearningHub.Nhs.Api.UnitTests/LearningHub.Nhs.Api.UnitTests.csproj
+++ b/WebAPI/LearningHub.Nhs.Api.UnitTests/LearningHub.Nhs.Api.UnitTests.csproj
@@ -11,7 +11,7 @@
-
+
diff --git a/WebAPI/LearningHub.Nhs.Database/LearningHub.Nhs.Database.sqlproj b/WebAPI/LearningHub.Nhs.Database/LearningHub.Nhs.Database.sqlproj
index 054baf7a8..42a432ae2 100644
--- a/WebAPI/LearningHub.Nhs.Database/LearningHub.Nhs.Database.sqlproj
+++ b/WebAPI/LearningHub.Nhs.Database/LearningHub.Nhs.Database.sqlproj
@@ -535,6 +535,7 @@
+
diff --git a/WebAPI/LearningHub.Nhs.Database/Stored Procedures/Activity/GetAssessmentActivityCompletionPercentage.sql b/WebAPI/LearningHub.Nhs.Database/Stored Procedures/Activity/GetAssessmentActivityCompletionPercentage.sql
new file mode 100644
index 000000000..7b8c747ef
--- /dev/null
+++ b/WebAPI/LearningHub.Nhs.Database/Stored Procedures/Activity/GetAssessmentActivityCompletionPercentage.sql
@@ -0,0 +1,30 @@
+-- =============================================
+-- Author: Swapnamol Abraham
+-- Create date: 17-12-2024
+-- Description: To get the details of completion percentage for an assessment with questionBlock
+-- =============================================
+CREATE PROCEDURE [activity].[GetAssessmentActivityCompletionPercentage]
+ @userId INT,
+ @ResourceVersionId INT,
+ @activityId INT
+AS
+BEGIN
+ -- SET NOCOUNT ON added to prevent extra result sets from
+ -- interfering with SELECT statements.
+ SET NOCOUNT ON;
+
+ SELECT @activityId as ResourceActivityId,
+ TotalQuestions,
+ CompletedQuestions,
+ CASE WHEN TotalQuestions = 0 THEN 0 ELSE (CompletedQuestions/TotalQuestions)*100 END AS CompletionPercentage
+FROM
+ (select count(ARV.Id) as TotalQuestions from resources.AssessmentResourceVersion ARV
+ INNER JOIN [resources].[BlockCollection] AS BC ON BC.Id = ARV.AssessmentContentId
+ LEFT JOIN [resources].[Block] AS B ON B.BlockCollectionId = BC.Id
+ WHERE B.BlockType = 4 AND arv.ResourceVersionId = @ResourceVersionId AND BC.Deleted = 0 ) AS Total,
+
+ (select count(ARA.Id) As completedQuestions from [activity].[AssessmentResourceActivity] ARA
+LEFT JOIN [activity].[AssessmentResourceActivityInteraction] ARAI ON ARA.Id = ARAI.AssessmentResourceActivityId
+Where ResourceActivityId = @activityId AND ARAI.Deleted = 0 ) AS Completed;
+
+END
\ No newline at end of file
diff --git a/WebAPI/LearningHub.Nhs.Database/Stored Procedures/Activity/GetUserLatestActivityCheck.sql b/WebAPI/LearningHub.Nhs.Database/Stored Procedures/Activity/GetUserLatestActivityCheck.sql
index edb56b5ad..893febb4e 100644
--- a/WebAPI/LearningHub.Nhs.Database/Stored Procedures/Activity/GetUserLatestActivityCheck.sql
+++ b/WebAPI/LearningHub.Nhs.Database/Stored Procedures/Activity/GetUserLatestActivityCheck.sql
@@ -8,7 +8,7 @@
-- Sarathlal 20-02-2024
-- Sarathlal 23-04-2024 TD-2954: Audio/Video/Assessment issue resolved and duplicate issue also resolved
-- Sarathlal 25-04-2024 TD-4067: Resource with muliple version issue resolved
--- Arunima 11-10-2024 TD-4261: Duplicate entries for the assessment results(elearning) in the My Learning page
+-- Swapna 18-12-2024 TD-5078: Removed block collection joins from the SP to improve the performance of the page
-------------------------------------------------------------------------------
CREATE PROCEDURE [activity].[GetUserLatestActivityCheck] (
@@ -39,9 +39,6 @@ BEGIN
,[t2].[MaximumAttempts] AS ResourceVersion_MaximumAttempts, [t2].[PassMark] AS ResourceVersion_PassMark,[t2].[AssessmentType] as ResourceVersion_AssessmentResourceVersion_AssessmentType
--Resource version columns ends here
- --Block columns starts here
- ,[t10].Id as Block_BlockId,[t10].[BlockCollectionId] as Block_BlockCollectionId, [t10].[BlockType] as Block_BlockType,[t10].[Title] as Block_Title, [t10].[Order] as Block_Order
- --Block columns ends here
--Video resource version starts here
,[VideoResourceVersion].[AmendDate] as VideoResourcVersion_AmendDate, [VideoResourceVersion].[AmendUserId] AS VideoResourcVersion_AmendUserId , [VideoResourceVersion].[ClosedCaptionsFileId] AS VideoResourcVersion_ClosedCaptionsFileId, [VideoResourceVersion].[CreateDate] AS VideoResourcVersion_CreateDate, [VideoResourceVersion].[CreateUserId] AS VideoResourcVersion_CreateUserId,
[VideoResourceVersion].[Deleted] AS VideoResourcVersion_Deleted, [VideoResourceVersion].[DurationInMilliseconds] AS VideoResourcVersion_DurationInMilliseconds, [VideoResourceVersion].[ResourceAzureMediaAssetId] AS VideoResourcVersion_ResourceAzureMediaAssetId, [VideoResourceVersion].[ResourceVersionId] AS VideoResourcVersion_ResourceVersionId,
@@ -75,9 +72,7 @@ BEGIN
--Assessment Resource activity startes here
,[t11].[Reason] as AssessmentResourceActivity_Reason, [t11].[ResourceActivityId] as AssessmentResourceActivity_ResourceActivityId
,[t11].[Score] as AssessmentResourceActivity_Score
- ,[t11].[Id0] as AssessmentResourceActivity_AssessmentResourceActivityInteraction_Id,[t11].[QuestionBlockId] as AssessmentResourceActivity_AssessmentResourceActivityInteraction_QuestionBlockId,
- [t11].[AssessmentResourceActivityId] as AssessmentResourceActivity_AssessmentResourceActivityInteraction_AssessmentResourceActivityId
- ,[t11].[AssessmentResourceActivityId] as AssessmentResourceActivity_AssessmentResourceActivityId
+ ,[t11].[Id] as AssessmentResourceActivity_AssessmentResourceActivityId
,[t11].[Id] as AssessmentResourceActivity_Id
--Assessment resource activity ends here
@@ -176,22 +171,45 @@ FROM (
) AS [t2]
LEFT JOIN [resources].[VideoResourceVersion] AS [VideoResourceVersion] ON [t2].[Id1] = [VideoResourceVersion].[ResourceVersionId]
LEFT JOIN [resources].[AudioResourceVersion] AS [AudeoResourceVersion] ON [t2].[Id1] = [AudeoResourceVersion].[ResourceVersionId]
-LEFT JOIN [resources].[ScormResourceVersion] AS [t3] ON [t2].[Id1] = [t3].[ResourceVersionId] and t3.Deleted=0
-LEFT JOIN [resources].[ScormResourceVersionManifest] AS [t4] ON [t3].[Id] = [t4].[ScormResourceVersionId] and [t4].[Deleted] = 0
-LEFT JOIN [resources].[BlockCollection] AS [t5] ON [t2].[AssessmentContentId] = [t5].[Id] AND [t5].[Deleted] = 0
-INNER JOIN [hierarchy].[NodePath] AS [t6] ON [t2].[NodePathId] = [t6].[Id] AND [t6].[Deleted] = 0
-LEFT JOIN [resources].[ResourceReference] AS [t7] ON [t2].[Id0] = [t7].[ResourceId] AND [t7].[Deleted] = 0
-LEFT JOIN [activity].[MediaResourceActivity] AS [t8] ON [t2].[Id] = [t8].[ResourceActivityId] AND [t8].[Deleted] = 0
-LEFT JOIN [activity].[ScormActivity] AS [t9] ON [t2].[Id] = [t9].[ResourceActivityId] AND [t9].[Deleted] = 0
-LEFT JOIN [resources].[Block] AS [t10] ON [t5].[Id] = [t10].[BlockCollectionId] AND [t10].[Deleted] = 0
LEFT JOIN (
- SELECT [AssessmentResourceActivity5].[Id], [AssessmentResourceActivity5].[AmendDate], [AssessmentResourceActivity5].[AmendUserID], [AssessmentResourceActivity5].[CreateDate], [AssessmentResourceActivity5].[CreateUserID], [AssessmentResourceActivity5].[Deleted], [AssessmentResourceActivity5].[Reason], [AssessmentResourceActivity5].[ResourceActivityId], [AssessmentResourceActivity5].[Score], [t12].[Id] AS [Id0], [t12].[AmendDate] AS [AmendDate0], [t12].[AmendUserID] AS [AmendUserID0], [t12].[AssessmentResourceActivityId], [t12].[CreateDate] AS [CreateDate0], [t12].[CreateUserID] AS [CreateUserID0], [t12].[Deleted] AS [Deleted0], [t12].[QuestionBlockId]
+ SELECT [ScormResourceVersion2].[Id], [ScormResourceVersion2].[AmendDate], [ScormResourceVersion2].[AmendUserId], [ScormResourceVersion2].[CanDownload], [ScormResourceVersion2].[ClearSuspendData], [ScormResourceVersion2].[ContentFilePath], [ScormResourceVersion2].[CreateDate], [ScormResourceVersion2].[CreateUserId], [ScormResourceVersion2].[Deleted], [ScormResourceVersion2].[DevelopmentId], [ScormResourceVersion2].[EsrLinkTypeId], [ScormResourceVersion2].[FileId], [ScormResourceVersion2].[PopupHeight], [ScormResourceVersion2].[PopupWidth], [ScormResourceVersion2].[ResourceVersionId]
+ FROM [resources].[ScormResourceVersion] AS [ScormResourceVersion2]
+ WHERE [ScormResourceVersion2].[Deleted] = 0
+) AS [t3] ON [t2].[Id1] = [t3].[ResourceVersionId]
+LEFT JOIN (
+ SELECT [ScormResourceVersionManifest3].[Id], [ScormResourceVersionManifest3].[AmendDate], [ScormResourceVersionManifest3].[AmendUserId], [ScormResourceVersionManifest3].[Author], [ScormResourceVersionManifest3].[CatalogEntry], [ScormResourceVersionManifest3].[Copyright], [ScormResourceVersionManifest3].[CreateDate], [ScormResourceVersionManifest3].[CreateUserId], [ScormResourceVersionManifest3].[Deleted], [ScormResourceVersionManifest3].[Description], [ScormResourceVersionManifest3].[Duration], [ScormResourceVersionManifest3].[ItemIdentifier], [ScormResourceVersionManifest3].[Keywords], [ScormResourceVersionManifest3].[LaunchData], [ScormResourceVersionManifest3].[ManifestURL], [ScormResourceVersionManifest3].[MasteryScore], [ScormResourceVersionManifest3].[MaxTimeAllowed], [ScormResourceVersionManifest3].[QuicklinkId], [ScormResourceVersionManifest3].[ResourceIdentifier], [ScormResourceVersionManifest3].[ScormResourceVersionId], [ScormResourceVersionManifest3].[TemplateVersion], [ScormResourceVersionManifest3].[TimeLimitAction], [ScormResourceVersionManifest3].[Title]
+ FROM [resources].[ScormResourceVersionManifest] AS [ScormResourceVersionManifest3]
+ WHERE [ScormResourceVersionManifest3].[Deleted] = 0
+) AS [t4] ON [t3].[Id] = [t4].[ScormResourceVersionId]
+INNER JOIN (
+ SELECT [NodePath].[Id], [NodePath].[AmendDate], [NodePath].[AmendUserId], [NodePath].[CatalogueNodeId], [NodePath].[CreateDate], [NodePath].[CreateUserId], [NodePath].[Deleted], [NodePath].[IsActive], [NodePath].[NodeId], [NodePath].[NodePath]
+ FROM [hierarchy].[NodePath] AS [NodePath]
+ WHERE [NodePath].[Deleted] = 0
+) AS [t6] ON [t2].[NodePathId] = [t6].[Id]
+LEFT JOIN (
+ SELECT [ResourceReference5].[Id], [ResourceReference5].[AmendDate], [ResourceReference5].[AmendUserId], [ResourceReference5].[CreateDate], [ResourceReference5].[CreateUserId], [ResourceReference5].[Deleted], [ResourceReference5].[NodePathId], [ResourceReference5].[OriginalResourceReferenceId], [ResourceReference5].[ResourceId]
+ FROM [resources].[ResourceReference] AS [ResourceReference5]
+ WHERE [ResourceReference5].[Deleted] = 0
+) AS [t7] ON [t2].[Id0] = [t7].[ResourceId]
+LEFT JOIN (
+ SELECT [MediaResourceActivity3].[Id], [MediaResourceActivity3].[ActivityStart], [MediaResourceActivity3].[AmendDate], [MediaResourceActivity3].[AmendUserID], [MediaResourceActivity3].[CreateDate], [MediaResourceActivity3].[CreateUserID], [MediaResourceActivity3].[Deleted], [MediaResourceActivity3].[PercentComplete], [MediaResourceActivity3].[ResourceActivityId], [MediaResourceActivity3].[SecondsPlayed]
+ FROM [activity].[MediaResourceActivity] AS [MediaResourceActivity3]
+ WHERE [MediaResourceActivity3].[Deleted] = 0
+) AS [t8] ON [t2].[Id] = [t8].[ResourceActivityId]
+LEFT JOIN (
+ SELECT [ScormActivity4].[Id], [ScormActivity4].[AmendDate], [ScormActivity4].[AmendUserID], [ScormActivity4].[CmiCoreExit], [ScormActivity4].[CmiCoreLesson_location], [ScormActivity4].[CmiCoreLesson_status], [ScormActivity4].[CmiCoreScoreMax], [ScormActivity4].[CmiCoreScoreMin], [ScormActivity4].[CmiCoreScoreRaw], [ScormActivity4].[CmiCoreSession_time], [ScormActivity4].[CmiSuspend_data], [ScormActivity4].[CreateDate], [ScormActivity4].[CreateUserID], [ScormActivity4].[Deleted], [ScormActivity4].[DurationSeconds], [ScormActivity4].[ResourceActivityId]
+ FROM [activity].[ScormActivity] AS [ScormActivity4]
+ WHERE [ScormActivity4].[Deleted] = 0
+) AS [t9] ON [t2].[Id] = [t9].[ResourceActivityId]
+LEFT JOIN (
+ SELECT [AssessmentResourceActivity5].[Id], [AssessmentResourceActivity5].[AmendDate], [AssessmentResourceActivity5].[AmendUserID], [AssessmentResourceActivity5].[CreateDate], [AssessmentResourceActivity5].[CreateUserID], [AssessmentResourceActivity5].[Deleted], [AssessmentResourceActivity5].[Reason], [AssessmentResourceActivity5].[ResourceActivityId], [AssessmentResourceActivity5].[Score]
FROM [activity].[AssessmentResourceActivity] AS [AssessmentResourceActivity5]
- LEFT JOIN [activity].[AssessmentResourceActivityInteraction] AS [t12] ON [AssessmentResourceActivity5].[Id] = [t12].[AssessmentResourceActivityId] AND [t12].[Deleted] = 0
WHERE [AssessmentResourceActivity5].[Deleted] = 0
) AS [t11] ON [t2].[Id] = [t11].[ResourceActivityId]
WHERE t2.ResourceVersionId=@ResourceVersionId
-ORDER BY [t2].[ActivityStart] DESC, [t2].[Id], [t2].[Id0], [t2].[Id1], [t2].[Id2], [VideoResourceVersion].[Id], [AudeoResourceVersion].[Id], [t3].[Id], [t4].[Id], [t5].[Id], [t6].[Id], [t7].[Id], [t8].[Id], [t9].[Id], [t10].[Id], [t11].[Id]
+ORDER BY [t2].[ActivityStart] DESC, [t2].[Id], [t2].[Id0], [t2].[Id1], [t2].[Id2], [VideoResourceVersion].[Id], [AudeoResourceVersion].[Id], [t3].[Id], [t4].[Id],
+[t6].[Id], [t7].[Id], [t8].[Id], [t9].[Id],
+[t11].[Id]
END
\ No newline at end of file
diff --git a/WebAPI/LearningHub.Nhs.Database/Stored Procedures/Activity/GetUserLearningActivities.sql b/WebAPI/LearningHub.Nhs.Database/Stored Procedures/Activity/GetUserLearningActivities.sql
index 0738ac2ac..bc4088a5d 100644
--- a/WebAPI/LearningHub.Nhs.Database/Stored Procedures/Activity/GetUserLearningActivities.sql
+++ b/WebAPI/LearningHub.Nhs.Database/Stored Procedures/Activity/GetUserLearningActivities.sql
@@ -10,8 +10,8 @@
-- Sarathlal 08-03-2024
-- Sarathlal 23-04-2024 TD-2954: Audio/Video/Assessment issue resolved and duplicate issue also resolved
-- Sarathlal 25-04-2024 TD-4067: Resource with muliple version issue resolved
--- Arunima 26-07-2024 TD-4411: "Completed" filter along with "Assessment" doesn't display the correct results
--- Arunima 11-10-2024 TD-4261: Duplicate entries for the assessment results(elearning) in the My Learning page
+-- Arunima 26-07-2024 TD-4411: "Completed" filter along with "Assessment" doesn't display the correct results
+-- Swapna 18-12-2024 TD-5078: Removed block collection joins from the SP to improve the performance of the page
-------------------------------------------------------------------------------
CREATE PROCEDURE [activity].[GetUserLearningActivities] (
@userId INT
@@ -80,9 +80,6 @@ BEGIN
,[t2].[MaximumAttempts] AS ResourceVersion_MaximumAttempts, [t2].[PassMark] AS ResourceVersion_PassMark, [t2].[AssessmentType] as ResourceVersion_AssessmentResourceVersion_AssessmentType
--Resource version columns ends here
- --Block columns starts here
- ,[t10].Id as Block_BlockId,[t10].[BlockCollectionId] as Block_BlockCollectionId, [t10].[BlockType] as Block_BlockType,[t10].[Title] as Block_Title, [t10].[Order] as Block_Order
- --Block columns ends here
--Video resource version starts here
,[VideoResourceVersion].[AmendDate] as VideoResourcVersion_AmendDate, [VideoResourceVersion].[AmendUserId] AS VideoResourcVersion_AmendUserId , [VideoResourceVersion].[ClosedCaptionsFileId] AS VideoResourcVersion_ClosedCaptionsFileId, [VideoResourceVersion].[CreateDate] AS VideoResourcVersion_CreateDate, [VideoResourceVersion].[CreateUserId] AS VideoResourcVersion_CreateUserId,
[VideoResourceVersion].[Deleted] AS VideoResourcVersion_Deleted, [VideoResourceVersion].[DurationInMilliseconds] AS VideoResourcVersion_DurationInMilliseconds, [VideoResourceVersion].[ResourceAzureMediaAssetId] AS VideoResourcVersion_ResourceAzureMediaAssetId, [VideoResourceVersion].[ResourceVersionId] AS VideoResourcVersion_ResourceVersionId,
@@ -118,9 +115,7 @@ BEGIN
,[t11].[Reason] as AssessmentResourceActivity_Reason, [t11].[ResourceActivityId] as AssessmentResourceActivity_ResourceActivityId
,[t11].[Score] as AssessmentResourceActivity_Score
- ,[t11].[Id0] as AssessmentResourceActivity_AssessmentResourceActivityInteraction_Id,[t11].[QuestionBlockId] as AssessmentResourceActivity_AssessmentResourceActivityInteraction_QuestionBlockId,
- [t11].[AssessmentResourceActivityId] as AssessmentResourceActivity_AssessmentResourceActivityInteraction_AssessmentResourceActivityId
- ,[t11].[AssessmentResourceActivityId] as AssessmentResourceActivity_AssessmentResourceActivityId
+ ,[t11].ResourceActivityId as AssessmentResourceActivity_AssessmentResourceActivityId
,[t11].[Id] as AssessmentResourceActivity_Id
--Assessment resource activity ends here
@@ -216,7 +211,7 @@ FROM (
WHERE ([ScormActivity].[Deleted] = 0 AND [ResourceActivity].[Id] = [ScormActivity].[ResourceActivityId])
)
IS NULL
- )
+ )
AND
(
(
@@ -228,17 +223,12 @@ FROM (
))
)
OR
- (
-- or launch resource activity completed
EXISTS
(
SELECT 1 FROM [activity].[ResourceActivity] AS [ResAct2]
WHERE [ResAct2].[Deleted] = 0 AND [ResourceActivity].[Id] = [ResAct2].[LaunchResourceActivityId] AND [ResAct2].[ActivityStatusId] in (3,7,5,4)
)
- AND
- (
- [Res].[ResourceTypeId] <> 6)
- )
)
AND
@@ -364,7 +354,7 @@ FROM (
(
(SELECT TOP(1) [ScormActivity1].[CmiCoreLesson_status]
FROM [activity].[ScormActivity] AS [ScormActivity1]
- WHERE [ScormActivity1].[Deleted] = 0 AND [ResourceActivity].[Id] = [ScormActivity1].[ResourceActivityId]) = 7
+ WHERE [ScormActivity1].[Deleted] = 0 AND [ResourceActivity].[Id] = [ScormActivity1].[ResourceActivityId]) = 2
)
)
@@ -487,20 +477,43 @@ FROM (
) AS [t2]
LEFT JOIN [resources].[VideoResourceVersion] AS [VideoResourceVersion] ON [t2].[Id1] = [VideoResourceVersion].[ResourceVersionId]
LEFT JOIN [resources].[AudioResourceVersion] AS [AudeoResourceVersion] ON [t2].[Id1] = [AudeoResourceVersion].[ResourceVersionId]
-LEFT JOIN [resources].[ScormResourceVersion] AS [t3] ON [t2].[Id1] = [t3].[ResourceVersionId] and t3.Deleted=0
-LEFT JOIN [resources].[ScormResourceVersionManifest] AS [t4] ON [t3].[Id] = [t4].[ScormResourceVersionId] and [t4].[Deleted] = 0
-LEFT JOIN [resources].[BlockCollection] AS [t5] ON [t2].[AssessmentContentId] = [t5].[Id] AND [t5].[Deleted] = 0
-INNER JOIN [hierarchy].[NodePath] AS [t6] ON [t2].[NodePathId] = [t6].[Id] AND [t6].[Deleted] = 0
-LEFT JOIN [resources].[ResourceReference] AS [t7] ON [t2].[Id0] = [t7].[ResourceId] AND [t7].[Deleted] = 0
-LEFT JOIN [activity].[MediaResourceActivity] AS [t8] ON [t2].[Id] = [t8].[ResourceActivityId] AND [t8].[Deleted] = 0
-LEFT JOIN [activity].[ScormActivity] AS [t9] ON [t2].[Id] = [t9].[ResourceActivityId] AND [t9].[Deleted] = 0
-LEFT JOIN [resources].[Block] AS [t10] ON [t5].[Id] = [t10].[BlockCollectionId] AND [t10].[Deleted] = 0
LEFT JOIN (
- SELECT [AssessmentResourceActivity5].[Id], [AssessmentResourceActivity5].[AmendDate], [AssessmentResourceActivity5].[AmendUserID], [AssessmentResourceActivity5].[CreateDate], [AssessmentResourceActivity5].[CreateUserID], [AssessmentResourceActivity5].[Deleted], [AssessmentResourceActivity5].[Reason], [AssessmentResourceActivity5].[ResourceActivityId], [AssessmentResourceActivity5].[Score], [t12].[Id] AS [Id0], [t12].[AmendDate] AS [AmendDate0], [t12].[AmendUserID] AS [AmendUserID0], [t12].[AssessmentResourceActivityId], [t12].[CreateDate] AS [CreateDate0], [t12].[CreateUserID] AS [CreateUserID0], [t12].[Deleted] AS [Deleted0], [t12].[QuestionBlockId]
+ SELECT [ScormResourceVersion2].[Id], [ScormResourceVersion2].[AmendDate], [ScormResourceVersion2].[AmendUserId], [ScormResourceVersion2].[CanDownload], [ScormResourceVersion2].[ClearSuspendData], [ScormResourceVersion2].[ContentFilePath], [ScormResourceVersion2].[CreateDate], [ScormResourceVersion2].[CreateUserId], [ScormResourceVersion2].[Deleted], [ScormResourceVersion2].[DevelopmentId], [ScormResourceVersion2].[EsrLinkTypeId], [ScormResourceVersion2].[FileId], [ScormResourceVersion2].[PopupHeight], [ScormResourceVersion2].[PopupWidth], [ScormResourceVersion2].[ResourceVersionId]
+ FROM [resources].[ScormResourceVersion] AS [ScormResourceVersion2]
+ WHERE [ScormResourceVersion2].[Deleted] = 0
+) AS [t3] ON [t2].[Id1] = [t3].[ResourceVersionId]
+LEFT JOIN (
+ SELECT [ScormResourceVersionManifest3].[Id], [ScormResourceVersionManifest3].[AmendDate], [ScormResourceVersionManifest3].[AmendUserId], [ScormResourceVersionManifest3].[Author], [ScormResourceVersionManifest3].[CatalogEntry], [ScormResourceVersionManifest3].[Copyright], [ScormResourceVersionManifest3].[CreateDate], [ScormResourceVersionManifest3].[CreateUserId], [ScormResourceVersionManifest3].[Deleted], [ScormResourceVersionManifest3].[Description], [ScormResourceVersionManifest3].[Duration], [ScormResourceVersionManifest3].[ItemIdentifier], [ScormResourceVersionManifest3].[Keywords], [ScormResourceVersionManifest3].[LaunchData], [ScormResourceVersionManifest3].[ManifestURL], [ScormResourceVersionManifest3].[MasteryScore], [ScormResourceVersionManifest3].[MaxTimeAllowed], [ScormResourceVersionManifest3].[QuicklinkId], [ScormResourceVersionManifest3].[ResourceIdentifier], [ScormResourceVersionManifest3].[ScormResourceVersionId], [ScormResourceVersionManifest3].[TemplateVersion], [ScormResourceVersionManifest3].[TimeLimitAction], [ScormResourceVersionManifest3].[Title]
+ FROM [resources].[ScormResourceVersionManifest] AS [ScormResourceVersionManifest3]
+ WHERE [ScormResourceVersionManifest3].[Deleted] = 0
+) AS [t4] ON [t3].[Id] = [t4].[ScormResourceVersionId]
+INNER JOIN (
+ SELECT [NodePath].[Id], [NodePath].[AmendDate], [NodePath].[AmendUserId], [NodePath].[CatalogueNodeId], [NodePath].[CreateDate], [NodePath].[CreateUserId], [NodePath].[Deleted], [NodePath].[IsActive], [NodePath].[NodeId], [NodePath].[NodePath]
+ FROM [hierarchy].[NodePath] AS [NodePath]
+ WHERE [NodePath].[Deleted] = 0
+) AS [t6] ON [t2].[NodePathId] = [t6].[Id]
+LEFT JOIN (
+ SELECT [ResourceReference5].[Id], [ResourceReference5].[AmendDate], [ResourceReference5].[AmendUserId], [ResourceReference5].[CreateDate], [ResourceReference5].[CreateUserId], [ResourceReference5].[Deleted], [ResourceReference5].[NodePathId], [ResourceReference5].[OriginalResourceReferenceId], [ResourceReference5].[ResourceId]
+ FROM [resources].[ResourceReference] AS [ResourceReference5]
+ WHERE [ResourceReference5].[Deleted] = 0
+) AS [t7] ON [t2].[Id0] = [t7].[ResourceId]
+LEFT JOIN (
+ SELECT [MediaResourceActivity3].[Id], [MediaResourceActivity3].[ActivityStart], [MediaResourceActivity3].[AmendDate], [MediaResourceActivity3].[AmendUserID], [MediaResourceActivity3].[CreateDate], [MediaResourceActivity3].[CreateUserID], [MediaResourceActivity3].[Deleted], [MediaResourceActivity3].[PercentComplete], [MediaResourceActivity3].[ResourceActivityId], [MediaResourceActivity3].[SecondsPlayed]
+ FROM [activity].[MediaResourceActivity] AS [MediaResourceActivity3]
+ WHERE [MediaResourceActivity3].[Deleted] = 0
+) AS [t8] ON [t2].[Id] = [t8].[ResourceActivityId]
+LEFT JOIN (
+ SELECT [ScormActivity4].[Id], [ScormActivity4].[AmendDate], [ScormActivity4].[AmendUserID], [ScormActivity4].[CmiCoreExit], [ScormActivity4].[CmiCoreLesson_location], [ScormActivity4].[CmiCoreLesson_status], [ScormActivity4].[CmiCoreScoreMax], [ScormActivity4].[CmiCoreScoreMin], [ScormActivity4].[CmiCoreScoreRaw], [ScormActivity4].[CmiCoreSession_time], [ScormActivity4].[CmiSuspend_data], [ScormActivity4].[CreateDate], [ScormActivity4].[CreateUserID], [ScormActivity4].[Deleted], [ScormActivity4].[DurationSeconds], [ScormActivity4].[ResourceActivityId]
+ FROM [activity].[ScormActivity] AS [ScormActivity4]
+ WHERE [ScormActivity4].[Deleted] = 0
+) AS [t9] ON [t2].[Id] = [t9].[ResourceActivityId]
+LEFT JOIN (
+ SELECT [AssessmentResourceActivity5].[Id], [AssessmentResourceActivity5].[AmendDate], [AssessmentResourceActivity5].[AmendUserID], [AssessmentResourceActivity5].[CreateDate], [AssessmentResourceActivity5].[CreateUserID], [AssessmentResourceActivity5].[Deleted], [AssessmentResourceActivity5].[Reason], [AssessmentResourceActivity5].[ResourceActivityId], [AssessmentResourceActivity5].[Score]
FROM [activity].[AssessmentResourceActivity] AS [AssessmentResourceActivity5]
- LEFT JOIN [activity].[AssessmentResourceActivityInteraction] AS [t12] ON [AssessmentResourceActivity5].[Id] = [t12].[AssessmentResourceActivityId] AND [t12].[Deleted] = 0
WHERE [AssessmentResourceActivity5].[Deleted] = 0
) AS [t11] ON [t2].[Id] = [t11].[ResourceActivityId]
-ORDER BY [t2].[ActivityStart] DESC, [t2].[Id], [t2].[Id0], [t2].[Id1], [t2].[Id2], [VideoResourceVersion].[Id], [AudeoResourceVersion].[Id], [t3].[Id], [t4].[Id], [t5].[Id], [t6].[Id], [t7].[Id], [t8].[Id], [t9].[Id], [t10].[Id], [t11].[Id]
+ORDER BY [t2].[ActivityStart] DESC, [t2].[Id], [t2].[Id0], [t2].[Id1], [t2].[Id2], [VideoResourceVersion].[Id], [AudeoResourceVersion].[Id], [t3].[Id], [t4].[Id],
+[t6].[Id], [t7].[Id], [t8].[Id], [t9].[Id],
+[t11].[Id]
END
\ No newline at end of file
diff --git a/WebAPI/LearningHub.Nhs.Database/Stored Procedures/Activity/GetUserLearningActivitiesCount.sql b/WebAPI/LearningHub.Nhs.Database/Stored Procedures/Activity/GetUserLearningActivitiesCount.sql
index 255339687..19801209f 100644
--- a/WebAPI/LearningHub.Nhs.Database/Stored Procedures/Activity/GetUserLearningActivitiesCount.sql
+++ b/WebAPI/LearningHub.Nhs.Database/Stored Procedures/Activity/GetUserLearningActivitiesCount.sql
@@ -9,8 +9,8 @@
-- Sarathlal 18-12-2023
-- Sarathlal 08-03-2024
-- Sarathlal 23-04-2024 TD-2954: Audio/Video/Assessment issue resolved and duplicate issue also resolved
--- Arunima 26-07-2024 TD-4411: "Completed" filter along with "Assessment" doesn't display the correct results
--- Arunima 11-10-2024 TD-4261: Duplicate entries for the assessment results(elearning) in the My Learning page
+-- Arunima 26-07-2024 TD-4411: "Completed" filter along with "Assessment" doesn't display the correct results
+-- Swapna 18-12-2024 TD-5078: Removed block collection joins from the SP to improve the performance of the page
-------------------------------------------------------------------------------
CREATE PROCEDURE [activity].[GetUserLearningActivitiesCount] (
@userId INT
@@ -143,16 +143,12 @@ FROM (
))
)
OR
- (
-- or launch resource activity completed
EXISTS
(
SELECT 1 FROM [activity].[ResourceActivity] AS [ResAct2]
WHERE [ResAct2].[Deleted] = 0 AND [ResourceActivity].[Id] = [ResAct2].[LaunchResourceActivityId] AND [ResAct2].[ActivityStatusId] in (3,7,5,4)
)
- AND
- ([Res].[ResourceTypeId] <> 6)
- )
)
AND
@@ -278,7 +274,7 @@ FROM (
(
(SELECT TOP(1) [ScormActivity1].[CmiCoreLesson_status]
FROM [activity].[ScormActivity] AS [ScormActivity1]
- WHERE [ScormActivity1].[Deleted] = 0 AND [ResourceActivity].[Id] = [ScormActivity1].[ResourceActivityId]) = 7
+ WHERE [ScormActivity1].[Deleted] = 0 AND [ResourceActivity].[Id] = [ScormActivity1].[ResourceActivityId]) = 2
)
)
@@ -398,18 +394,39 @@ FROM (
) AS [t2]
LEFT JOIN [resources].[VideoResourceVersion] AS [VideoResourceVersion] ON [t2].[Id1] = [VideoResourceVersion].[ResourceVersionId]
LEFT JOIN [resources].[AudioResourceVersion] AS [AudeoResourceVersion] ON [t2].[Id1] = [AudeoResourceVersion].[ResourceVersionId]
-LEFT JOIN [resources].[ScormResourceVersion] AS [t3] ON [t2].[Id1] = [t3].[ResourceVersionId] and t3.Deleted=0
-LEFT JOIN [resources].[ScormResourceVersionManifest] AS [t4] ON [t3].[Id] = [t4].[ScormResourceVersionId] and [t4].[Deleted] = 0
-LEFT JOIN [resources].[BlockCollection] AS [t5] ON [t2].[AssessmentContentId] = [t5].[Id] AND [t5].[Deleted] = 0
-INNER JOIN [hierarchy].[NodePath] AS [t6] ON [t2].[NodePathId] = [t6].[Id] AND [t6].[Deleted] = 0
-LEFT JOIN [resources].[ResourceReference] AS [t7] ON [t2].[Id0] = [t7].[ResourceId] AND [t7].[Deleted] = 0
-LEFT JOIN [activity].[MediaResourceActivity] AS [t8] ON [t2].[Id] = [t8].[ResourceActivityId] AND [t8].[Deleted] = 0
-LEFT JOIN [activity].[ScormActivity] AS [t9] ON [t2].[Id] = [t9].[ResourceActivityId] AND [t9].[Deleted] = 0
-LEFT JOIN [resources].[Block] AS [t10] ON [t5].[Id] = [t10].[BlockCollectionId] AND [t10].[Deleted] = 0
LEFT JOIN (
- SELECT [AssessmentResourceActivity5].[Id], [AssessmentResourceActivity5].[AmendDate], [AssessmentResourceActivity5].[AmendUserID], [AssessmentResourceActivity5].[CreateDate], [AssessmentResourceActivity5].[CreateUserID], [AssessmentResourceActivity5].[Deleted], [AssessmentResourceActivity5].[Reason], [AssessmentResourceActivity5].[ResourceActivityId], [AssessmentResourceActivity5].[Score], [t12].[Id] AS [Id0], [t12].[AmendDate] AS [AmendDate0], [t12].[AmendUserID] AS [AmendUserID0], [t12].[AssessmentResourceActivityId], [t12].[CreateDate] AS [CreateDate0], [t12].[CreateUserID] AS [CreateUserID0], [t12].[Deleted] AS [Deleted0], [t12].[QuestionBlockId]
+ SELECT [ScormResourceVersion2].[Id], [ScormResourceVersion2].[AmendDate], [ScormResourceVersion2].[AmendUserId], [ScormResourceVersion2].[CanDownload], [ScormResourceVersion2].[ClearSuspendData], [ScormResourceVersion2].[ContentFilePath], [ScormResourceVersion2].[CreateDate], [ScormResourceVersion2].[CreateUserId], [ScormResourceVersion2].[Deleted], [ScormResourceVersion2].[DevelopmentId], [ScormResourceVersion2].[EsrLinkTypeId], [ScormResourceVersion2].[FileId], [ScormResourceVersion2].[PopupHeight], [ScormResourceVersion2].[PopupWidth], [ScormResourceVersion2].[ResourceVersionId]
+ FROM [resources].[ScormResourceVersion] AS [ScormResourceVersion2]
+ WHERE [ScormResourceVersion2].[Deleted] = 0
+) AS [t3] ON [t2].[Id1] = [t3].[ResourceVersionId]
+LEFT JOIN (
+ SELECT [ScormResourceVersionManifest3].[Id], [ScormResourceVersionManifest3].[AmendDate], [ScormResourceVersionManifest3].[AmendUserId], [ScormResourceVersionManifest3].[Author], [ScormResourceVersionManifest3].[CatalogEntry], [ScormResourceVersionManifest3].[Copyright], [ScormResourceVersionManifest3].[CreateDate], [ScormResourceVersionManifest3].[CreateUserId], [ScormResourceVersionManifest3].[Deleted], [ScormResourceVersionManifest3].[Description], [ScormResourceVersionManifest3].[Duration], [ScormResourceVersionManifest3].[ItemIdentifier], [ScormResourceVersionManifest3].[Keywords], [ScormResourceVersionManifest3].[LaunchData], [ScormResourceVersionManifest3].[ManifestURL], [ScormResourceVersionManifest3].[MasteryScore], [ScormResourceVersionManifest3].[MaxTimeAllowed], [ScormResourceVersionManifest3].[QuicklinkId], [ScormResourceVersionManifest3].[ResourceIdentifier], [ScormResourceVersionManifest3].[ScormResourceVersionId], [ScormResourceVersionManifest3].[TemplateVersion], [ScormResourceVersionManifest3].[TimeLimitAction], [ScormResourceVersionManifest3].[Title]
+ FROM [resources].[ScormResourceVersionManifest] AS [ScormResourceVersionManifest3]
+ WHERE [ScormResourceVersionManifest3].[Deleted] = 0
+) AS [t4] ON [t3].[Id] = [t4].[ScormResourceVersionId]
+INNER JOIN (
+ SELECT [NodePath].[Id], [NodePath].[AmendDate], [NodePath].[AmendUserId], [NodePath].[CatalogueNodeId], [NodePath].[CreateDate], [NodePath].[CreateUserId], [NodePath].[Deleted], [NodePath].[IsActive], [NodePath].[NodeId], [NodePath].[NodePath]
+ FROM [hierarchy].[NodePath] AS [NodePath]
+ WHERE [NodePath].[Deleted] = 0
+) AS [t6] ON [t2].[NodePathId] = [t6].[Id]
+LEFT JOIN (
+ SELECT [ResourceReference5].[Id], [ResourceReference5].[AmendDate], [ResourceReference5].[AmendUserId], [ResourceReference5].[CreateDate], [ResourceReference5].[CreateUserId], [ResourceReference5].[Deleted], [ResourceReference5].[NodePathId], [ResourceReference5].[OriginalResourceReferenceId], [ResourceReference5].[ResourceId]
+ FROM [resources].[ResourceReference] AS [ResourceReference5]
+ WHERE [ResourceReference5].[Deleted] = 0
+) AS [t7] ON [t2].[Id0] = [t7].[ResourceId]
+LEFT JOIN (
+ SELECT [MediaResourceActivity3].[Id], [MediaResourceActivity3].[ActivityStart], [MediaResourceActivity3].[AmendDate], [MediaResourceActivity3].[AmendUserID], [MediaResourceActivity3].[CreateDate], [MediaResourceActivity3].[CreateUserID], [MediaResourceActivity3].[Deleted], [MediaResourceActivity3].[PercentComplete], [MediaResourceActivity3].[ResourceActivityId], [MediaResourceActivity3].[SecondsPlayed]
+ FROM [activity].[MediaResourceActivity] AS [MediaResourceActivity3]
+ WHERE [MediaResourceActivity3].[Deleted] = 0
+) AS [t8] ON [t2].[Id] = [t8].[ResourceActivityId]
+LEFT JOIN (
+ SELECT [ScormActivity4].[Id], [ScormActivity4].[AmendDate], [ScormActivity4].[AmendUserID], [ScormActivity4].[CmiCoreExit], [ScormActivity4].[CmiCoreLesson_location], [ScormActivity4].[CmiCoreLesson_status], [ScormActivity4].[CmiCoreScoreMax], [ScormActivity4].[CmiCoreScoreMin], [ScormActivity4].[CmiCoreScoreRaw], [ScormActivity4].[CmiCoreSession_time], [ScormActivity4].[CmiSuspend_data], [ScormActivity4].[CreateDate], [ScormActivity4].[CreateUserID], [ScormActivity4].[Deleted], [ScormActivity4].[DurationSeconds], [ScormActivity4].[ResourceActivityId]
+ FROM [activity].[ScormActivity] AS [ScormActivity4]
+ WHERE [ScormActivity4].[Deleted] = 0
+) AS [t9] ON [t2].[Id] = [t9].[ResourceActivityId]
+LEFT JOIN (
+ SELECT [AssessmentResourceActivity5].[Id], [AssessmentResourceActivity5].[AmendDate], [AssessmentResourceActivity5].[AmendUserID], [AssessmentResourceActivity5].[CreateDate], [AssessmentResourceActivity5].[CreateUserID], [AssessmentResourceActivity5].[Deleted], [AssessmentResourceActivity5].[Reason], [AssessmentResourceActivity5].[ResourceActivityId], [AssessmentResourceActivity5].[Score]
FROM [activity].[AssessmentResourceActivity] AS [AssessmentResourceActivity5]
- LEFT JOIN [activity].[AssessmentResourceActivityInteraction] AS [t12] ON [AssessmentResourceActivity5].[Id] = [t12].[AssessmentResourceActivityId] AND [t12].[Deleted] = 0
WHERE [AssessmentResourceActivity5].[Deleted] = 0
) AS [t11] ON [t2].[Id] = [t11].[ResourceActivityId]
GROUP BY [t2].[Id]
diff --git a/WebAPI/LearningHub.Nhs.Repository.Interface/Activity/IResourceActivityRepository.cs b/WebAPI/LearningHub.Nhs.Repository.Interface/Activity/IResourceActivityRepository.cs
index b1e5cdf06..25ecf5d39 100644
--- a/WebAPI/LearningHub.Nhs.Repository.Interface/Activity/IResourceActivityRepository.cs
+++ b/WebAPI/LearningHub.Nhs.Repository.Interface/Activity/IResourceActivityRepository.cs
@@ -95,5 +95,14 @@ int CreateActivity(
/// The resource id.
/// The .
Task> GetAllTheActivitiesFromSP(int userId, int resourceId);
+
+ ///
+ /// Get the assessment activity completion details.
+ ///
+ /// The userId.
+ /// The resourceVersionId.
+ /// The activityId.
+ /// The .
+ Task GetAssessmentActivityCompletionPercentage(int userId, int resourceVersionId, int activityId);
}
}
diff --git a/WebAPI/LearningHub.Nhs.Repository.Interface/LearningHub.Nhs.Repository.Interface.csproj b/WebAPI/LearningHub.Nhs.Repository.Interface/LearningHub.Nhs.Repository.Interface.csproj
index ac60ee1b6..b44a4bb5b 100644
--- a/WebAPI/LearningHub.Nhs.Repository.Interface/LearningHub.Nhs.Repository.Interface.csproj
+++ b/WebAPI/LearningHub.Nhs.Repository.Interface/LearningHub.Nhs.Repository.Interface.csproj
@@ -9,7 +9,7 @@
-
+
diff --git a/WebAPI/LearningHub.Nhs.Repository/Activity/ResourceActivityRepository.cs b/WebAPI/LearningHub.Nhs.Repository/Activity/ResourceActivityRepository.cs
index 46a7405fa..79c5260df 100644
--- a/WebAPI/LearningHub.Nhs.Repository/Activity/ResourceActivityRepository.cs
+++ b/WebAPI/LearningHub.Nhs.Repository/Activity/ResourceActivityRepository.cs
@@ -10,10 +10,8 @@ namespace LearningHub.Nhs.Repository.Activity
using System.Threading.Tasks;
using LearningHub.Nhs.Models.Entities.Activity;
using LearningHub.Nhs.Models.Entities.Resource;
- using LearningHub.Nhs.Models.Entities.Resource.Blocks;
using LearningHub.Nhs.Models.Enums;
using LearningHub.Nhs.Models.MyLearning;
- using LearningHub.Nhs.Models.Resource.Blocks;
using LearningHub.Nhs.Repository.Helpers;
using LearningHub.Nhs.Repository.Interface;
using LearningHub.Nhs.Repository.Interface.Activity;
@@ -183,54 +181,54 @@ public async Task IsScormActivityFinished(int userId, int scormActivityId)
/// ResourceActivity.
public async Task> GetByUserIdFromSP(int userId, Models.MyLearning.MyLearningRequestModel requestModel, DateTimeOffset detailedMediaActivityRecordingStartDate)
{
- (DateTimeOffset? startDate, DateTimeOffset? endDate) = this.ApplyDatesFilter(requestModel);
- (string strResourceTypes, bool resourceTypeFlag) = this.ApplyResourceTypesfilters(requestModel);
- (string strActivityStatus, bool activityStatusEnumFlag) = this.ApplyActivityStatusFilter(requestModel);
- var param0 = new SqlParameter("@userId", SqlDbType.Int) { Value = userId };
- var param1 = new SqlParameter("@searchText", SqlDbType.NVarChar) { Value = requestModel.SearchText == null ? DBNull.Value : requestModel.SearchText };
- var param2 = new SqlParameter("@activityStatuses", SqlDbType.NVarChar) { Value = activityStatusEnumFlag == false ? DBNull.Value : strActivityStatus };
- var param3 = new SqlParameter("@resourceTypes", SqlDbType.NVarChar) { Value = resourceTypeFlag == false ? DBNull.Value : strResourceTypes };
- var param4 = new SqlParameter("@activityStartDate", SqlDbType.DateTimeOffset) { Value = startDate == null ? DBNull.Value : startDate };
- var param5 = new SqlParameter("@activityEndDate", SqlDbType.DateTimeOffset) { Value = endDate == null ? DBNull.Value : endDate };
- var param6 = new SqlParameter("@mediaActivityRecordingStartDate", SqlDbType.DateTimeOffset) { Value = detailedMediaActivityRecordingStartDate };
- var param7 = new SqlParameter("@certificateEnabled", SqlDbType.Bit) { Value = requestModel.CertificateEnabled == false ? DBNull.Value : requestModel.CertificateEnabled };
- var param8 = new SqlParameter("@offSet", SqlDbType.Int) { Value = requestModel.Skip };
- var param9 = new SqlParameter("@fetchRows", SqlDbType.Int) { Value = requestModel.Take };
- var result = await this.DbContext.MyLearningActivity.FromSqlRaw("[activity].[GetUserLearningActivities] @userId, @searchText, @activityStatuses, @resourceTypes,@activityStartDate,@activityEndDate,@mediaActivityRecordingStartDate,@certificateEnabled,@offSet,@fetchRows ", param0, param1, param2, param3, param4, param5, param6, param7, param8, param9)
- .AsNoTracking().ToListAsync();
-
- // Bind result to ResourceActivity model
- this.BindNestedData(result);
- List listOfresourceActivities = result.Select(i => new ResourceActivity()
- {
- ActivityEnd = i.ActivityEnd,
- ActivityStart = i.ActivityStart,
- ActivityStatusId = i.ActivityStatusId,
- AmendDate = i.AmendDate,
- AmendUserId = i.AmendUserId,
- AssessmentResourceActivity = i.AssessmentResourceActivity,
- CreateDate = i.CreateDate,
- CreateUserId = i.CreateUserId,
- Deleted = i.Deleted,
- DurationSeconds = i.DurationSeconds ?? 0,
- Id = i.Id,
- InverseLaunchResourceActivity = i.Resource_InverseLaunchResourceActivity,
- LaunchResourceActivityId = i.LaunchResourceActivityId,
- MajorVersion = i.MajorVersion,
- MediaResourceActivity = i.MediaResourceActivity,
- MinorVersion = i.MinorVersion,
- NodePath = i.NodePath,
- NodePathId = i.NodePathId,
- Resource = i.Resource,
- ResourceId = i.ResourceId,
- ResourceVersion = i.ResourceVersion,
- ResourceVersionId = i.ResourceVersionId,
- Score = i.Score,
- ScormActivity = i.ScormActivity,
- UserId = i.UserId,
- }).ToList();
-
- return listOfresourceActivities.OrderByDescending(r => r.ActivityStart).AsQueryable();
+ (DateTimeOffset? startDate, DateTimeOffset? endDate) = this.ApplyDatesFilter(requestModel);
+ (string strResourceTypes, bool resourceTypeFlag) = this.ApplyResourceTypesfilters(requestModel);
+ (string strActivityStatus, bool activityStatusEnumFlag) = this.ApplyActivityStatusFilter(requestModel);
+ var param0 = new SqlParameter("@userId", SqlDbType.Int) { Value = userId };
+ var param1 = new SqlParameter("@searchText", SqlDbType.NVarChar) { Value = requestModel.SearchText == null ? DBNull.Value : requestModel.SearchText };
+ var param2 = new SqlParameter("@activityStatuses", SqlDbType.NVarChar) { Value = activityStatusEnumFlag == false ? DBNull.Value : strActivityStatus };
+ var param3 = new SqlParameter("@resourceTypes", SqlDbType.NVarChar) { Value = resourceTypeFlag == false ? DBNull.Value : strResourceTypes };
+ var param4 = new SqlParameter("@activityStartDate", SqlDbType.DateTimeOffset) { Value = startDate == null ? DBNull.Value : startDate };
+ var param5 = new SqlParameter("@activityEndDate", SqlDbType.DateTimeOffset) { Value = endDate == null ? DBNull.Value : endDate };
+ var param6 = new SqlParameter("@mediaActivityRecordingStartDate", SqlDbType.DateTimeOffset) { Value = detailedMediaActivityRecordingStartDate };
+ var param7 = new SqlParameter("@certificateEnabled", SqlDbType.Bit) { Value = requestModel.CertificateEnabled == false ? DBNull.Value : requestModel.CertificateEnabled };
+ var param8 = new SqlParameter("@offSet", SqlDbType.Int) { Value = requestModel.Skip };
+ var param9 = new SqlParameter("@fetchRows", SqlDbType.Int) { Value = requestModel.Take };
+ var result = await this.DbContext.MyLearningActivity.FromSqlRaw("[activity].[GetUserLearningActivities] @userId, @searchText, @activityStatuses, @resourceTypes,@activityStartDate,@activityEndDate,@mediaActivityRecordingStartDate,@certificateEnabled,@offSet,@fetchRows ", param0, param1, param2, param3, param4, param5, param6, param7, param8, param9)
+ .AsNoTracking().ToListAsync();
+
+ // Bind result to ResourceActivity model
+ this.BindNestedData(result);
+ List listOfresourceActivities = result.Select(i => new ResourceActivity()
+ {
+ ActivityEnd = i.ActivityEnd,
+ ActivityStart = i.ActivityStart,
+ ActivityStatusId = i.ActivityStatusId,
+ AmendDate = i.AmendDate,
+ AmendUserId = i.AmendUserId,
+ AssessmentResourceActivity = i.AssessmentResourceActivity,
+ CreateDate = i.CreateDate,
+ CreateUserId = i.CreateUserId,
+ Deleted = i.Deleted,
+ DurationSeconds = i.DurationSeconds ?? 0,
+ Id = i.Id,
+ InverseLaunchResourceActivity = i.Resource_InverseLaunchResourceActivity,
+ LaunchResourceActivityId = i.LaunchResourceActivityId,
+ MajorVersion = i.MajorVersion,
+ MediaResourceActivity = i.MediaResourceActivity,
+ MinorVersion = i.MinorVersion,
+ NodePath = i.NodePath,
+ NodePathId = i.NodePathId,
+ Resource = i.Resource,
+ ResourceId = i.ResourceId,
+ ResourceVersion = i.ResourceVersion,
+ ResourceVersionId = i.ResourceVersionId,
+ Score = i.Score,
+ ScormActivity = i.ScormActivity,
+ UserId = i.UserId,
+ }).ToList();
+
+ return listOfresourceActivities.OrderByDescending(r => r.ActivityStart).AsQueryable();
}
///
@@ -271,6 +269,28 @@ public async Task> GetAllTheActivitiesFromSP(int userId,
return activities;
}
+ ///
+ /// Gets a list of all the user's activities for a given resource version.
+ ///
+ /// The user id.>
+ /// The resource version id.
+ /// The resource activity id.
+ /// The .
+ public async Task GetAssessmentActivityCompletionPercentage(int userId, int resourceVersionId, int activityId)
+ {
+ var param0 = new SqlParameter("@p0", SqlDbType.Int) { Value = userId };
+ var param1 = new SqlParameter("@p1", SqlDbType.Int) { Value = resourceVersionId };
+ var param2 = new SqlParameter("@p2", SqlDbType.Int) { Value = activityId };
+
+ var retVal = await this.DbContext.AssessmentActivityCompletionViewModel
+ .FromSqlRaw("EXEC activity.GetAssessmentActivityCompletionPercentage @p0, @p1, @p2", param0, param1, param2)
+ .AsNoTracking()
+ .ToListAsync();
+
+ AssessmentActivityCompletionViewModel assessmentResourceActivityQuestion = retVal.FirstOrDefault();
+ return assessmentResourceActivityQuestion;
+ }
+
///
/// Get Resource Activity by user id.
///
@@ -279,42 +299,42 @@ public async Task> GetAllTheActivitiesFromSP(int userId,
/// ResourceActivity.
public async Task> GetByUserIdWithResourceVersionId(int userId, int resourceVersionId)
{
- var param0 = new SqlParameter("@userId", SqlDbType.Int) { Value = userId };
- var param1 = new SqlParameter("@resourceVersionId", SqlDbType.Int) { Value = resourceVersionId };
- var result = await this.DbContext.MyLearningActivity.FromSqlRaw("[activity].[GetUserLatestActivityCheck] @userId, @resourceVersionId ", param0, param1)
- .AsNoTracking().ToListAsync();
-
- // Bind result to ResourceActivity model
- this.BindNestedData(result);
- List listOfresourceActivities = result.Select(i => new ResourceActivity()
- {
- ActivityEnd = i.ActivityEnd,
- ActivityStart = i.ActivityStart,
- ActivityStatusId = i.ActivityStatusId,
- AmendDate = i.AmendDate,
- AmendUserId = i.AmendUserId,
- AssessmentResourceActivity = i.AssessmentResourceActivity,
- CreateDate = i.CreateDate,
- CreateUserId = i.CreateUserId,
- Deleted = i.Deleted,
- DurationSeconds = i.DurationSeconds ?? 0,
- Id = i.Id,
- InverseLaunchResourceActivity = i.Resource_InverseLaunchResourceActivity,
- LaunchResourceActivityId = i.LaunchResourceActivityId,
- MajorVersion = i.MajorVersion,
- MediaResourceActivity = i.Resource_MediaResourceActivity,
- MinorVersion = i.MinorVersion,
- NodePath = i.NodePath,
- NodePathId = i.NodePathId,
- Resource = i.Resource,
- ResourceId = i.ResourceId,
- ResourceVersion = i.ResourceVersion,
- ResourceVersionId = i.ResourceVersionId,
- Score = i.Score,
- ScormActivity = i.ScormActivity,
- UserId = i.UserId,
- }).ToList();
- return listOfresourceActivities.OrderByDescending(r => r.ActivityStart).AsQueryable();
+ var param0 = new SqlParameter("@userId", SqlDbType.Int) { Value = userId };
+ var param1 = new SqlParameter("@resourceVersionId", SqlDbType.Int) { Value = resourceVersionId };
+ var result = await this.DbContext.MyLearningActivity.FromSqlRaw("[activity].[GetUserLatestActivityCheck] @userId, @resourceVersionId ", param0, param1)
+ .AsNoTracking().ToListAsync();
+
+ // Bind result to ResourceActivity model
+ this.BindNestedData(result);
+ List listOfresourceActivities = result.Select(i => new ResourceActivity()
+ {
+ ActivityEnd = i.ActivityEnd,
+ ActivityStart = i.ActivityStart,
+ ActivityStatusId = i.ActivityStatusId,
+ AmendDate = i.AmendDate,
+ AmendUserId = i.AmendUserId,
+ AssessmentResourceActivity = i.AssessmentResourceActivity,
+ CreateDate = i.CreateDate,
+ CreateUserId = i.CreateUserId,
+ Deleted = i.Deleted,
+ DurationSeconds = i.DurationSeconds ?? 0,
+ Id = i.Id,
+ InverseLaunchResourceActivity = i.Resource_InverseLaunchResourceActivity,
+ LaunchResourceActivityId = i.LaunchResourceActivityId,
+ MajorVersion = i.MajorVersion,
+ MediaResourceActivity = i.Resource_MediaResourceActivity,
+ MinorVersion = i.MinorVersion,
+ NodePath = i.NodePath,
+ NodePathId = i.NodePathId,
+ Resource = i.Resource,
+ ResourceId = i.ResourceId,
+ ResourceVersion = i.ResourceVersion,
+ ResourceVersionId = i.ResourceVersionId,
+ Score = i.Score,
+ ScormActivity = i.ScormActivity,
+ UserId = i.UserId,
+ }).ToList();
+ return listOfresourceActivities.OrderByDescending(r => r.ActivityStart).AsQueryable();
}
private void BindNestedData(List result)
@@ -343,25 +363,7 @@ private void BindResourceVersionBlockData(List result)
{
result.ToList().ForEach(i =>
{
- var a = result.Where(x => x.Id == i.Id).ToList().DistinctBy(l => l.Block_BlockId);
- List blocksList = new List();
- foreach (var b in a)
- {
- Block blocks = new Block();
- blocks.Id = b.Block_BlockId ?? 0;
- blocks.BlockCollectionId = b.Block_BlockCollectionId ?? 0;
- var blockType = b.Block_BlockType ?? 0;
- blocks.BlockType = (BlockType)blockType;
- blocks.Title = b.Block_Title;
- blocks.Order = b.Block_Order ?? 0;
- blocksList.Add(blocks);
- }
-
- i.ResourceVersion_AssessmentResourceVersion.AssessmentContent = new BlockCollection();
- i.ResourceVersion_AssessmentResourceVersion.AssessmentContent.Blocks = blocksList;
i.ResourceVersion.AssessmentResourceVersion = new AssessmentResourceVersion();
- i.ResourceVersion.AssessmentResourceVersion.AssessmentContent = new BlockCollection();
- i.ResourceVersion.AssessmentResourceVersion.AssessmentContent.Blocks = blocksList;
int assessmentType = i.ResourceVersion_AssessmentResourceVersion_AssessmentType ?? 0;
i.ResourceVersion.AssessmentResourceVersion.AssessmentType = (AssessmentTypeEnum)assessmentType;
i.ResourceVersion.AssessmentResourceVersion.PassMark = i.ResourceVersion_PassMark;
@@ -397,21 +399,6 @@ private void BindAssessmentResourceActivityNestedData(List r
assessmentResourceActivity.Id = i.AssessmentResourceActivity_Id ?? 0;
assessmentResourceActivity.Score = i.AssessmentResourceActivity_Score;
assessmentResourceActivity.Reason = i.AssessmentResourceActivity_Reason;
- var c = result.Where(x => x.Id == i.Id).ToList().DistinctBy(l => l.AssessmentResourceActivity_AssessmentResourceActivityInteraction_QuestionBlockId);
- List assessmentResourceActivityInteractionList = new List();
- foreach (var item in c)
- {
- if (i.AssessmentResourceActivity_AssessmentResourceActivityInteraction_Id != null)
- {
- AssessmentResourceActivityInteraction assessmentResourceActivityInteraction = new AssessmentResourceActivityInteraction();
- assessmentResourceActivityInteraction.AssessmentResourceActivityId = i.AssessmentResourceActivity_AssessmentResourceActivityInteraction_AssessmentResourceActivityId ?? 0;
- assessmentResourceActivityInteraction.Id = i.AssessmentResourceActivity_AssessmentResourceActivityInteraction_Id ?? 0;
- assessmentResourceActivityInteraction.QuestionBlockId = i.AssessmentResourceActivity_AssessmentResourceActivityInteraction_QuestionBlockId ?? 0;
- assessmentResourceActivityInteractionList.Add(assessmentResourceActivityInteraction);
- }
- }
-
- assessmentResourceActivity.AssessmentResourceActivityInteractions = assessmentResourceActivityInteractionList;
i.AssessmentResourceActivity.Add(assessmentResourceActivity);
}
});
diff --git a/WebAPI/LearningHub.Nhs.Repository/LearningHub.Nhs.Repository.csproj b/WebAPI/LearningHub.Nhs.Repository/LearningHub.Nhs.Repository.csproj
index 3027cdbc6..a94854e89 100644
--- a/WebAPI/LearningHub.Nhs.Repository/LearningHub.Nhs.Repository.csproj
+++ b/WebAPI/LearningHub.Nhs.Repository/LearningHub.Nhs.Repository.csproj
@@ -9,7 +9,7 @@
-
+
diff --git a/WebAPI/LearningHub.Nhs.Repository/LearningHubDbContext.cs b/WebAPI/LearningHub.Nhs.Repository/LearningHubDbContext.cs
index 1d94dc9b6..77f14343c 100644
--- a/WebAPI/LearningHub.Nhs.Repository/LearningHubDbContext.cs
+++ b/WebAPI/LearningHub.Nhs.Repository/LearningHubDbContext.cs
@@ -15,9 +15,11 @@ namespace LearningHub.Nhs.Repository
using LearningHub.Nhs.Models.Entities.Resource.Blocks;
using LearningHub.Nhs.Models.Hierarchy;
using LearningHub.Nhs.Models.Messaging;
+ using LearningHub.Nhs.Models.MyLearning;
using LearningHub.Nhs.Models.Resource;
using LearningHub.Nhs.Models.Resource.ResourceDisplay;
using LearningHub.Nhs.Models.User;
+ using LearningHub.Nhs.Repository.Activity;
using Microsoft.EntityFrameworkCore;
///
@@ -780,6 +782,11 @@ public LearningHubDbContextOptions Options
///
public virtual DbSet AllCatalogueViewModel { get; set; }
+ ///
+ /// Gets or sets the AssessmentResourceActivityQuestionViewModel.
+ ///
+ public virtual DbSet AssessmentActivityCompletionViewModel { get; set; }
+
///
/// The on model creating.
///
diff --git a/WebAPI/LearningHub.Nhs.Services.Interface/LearningHub.Nhs.Services.Interface.csproj b/WebAPI/LearningHub.Nhs.Services.Interface/LearningHub.Nhs.Services.Interface.csproj
index b49011e8c..aa9b8c854 100644
--- a/WebAPI/LearningHub.Nhs.Services.Interface/LearningHub.Nhs.Services.Interface.csproj
+++ b/WebAPI/LearningHub.Nhs.Services.Interface/LearningHub.Nhs.Services.Interface.csproj
@@ -16,7 +16,7 @@
-
+
all
diff --git a/WebAPI/LearningHub.Nhs.Services.UnitTests/LearningHub.Nhs.Services.UnitTests.csproj b/WebAPI/LearningHub.Nhs.Services.UnitTests/LearningHub.Nhs.Services.UnitTests.csproj
index ef4a2180b..c8970073f 100644
--- a/WebAPI/LearningHub.Nhs.Services.UnitTests/LearningHub.Nhs.Services.UnitTests.csproj
+++ b/WebAPI/LearningHub.Nhs.Services.UnitTests/LearningHub.Nhs.Services.UnitTests.csproj
@@ -13,7 +13,7 @@
-
+
diff --git a/WebAPI/LearningHub.Nhs.Services/LearningHub.Nhs.Services.csproj b/WebAPI/LearningHub.Nhs.Services/LearningHub.Nhs.Services.csproj
index 9a2ab84b2..c1db140fe 100644
--- a/WebAPI/LearningHub.Nhs.Services/LearningHub.Nhs.Services.csproj
+++ b/WebAPI/LearningHub.Nhs.Services/LearningHub.Nhs.Services.csproj
@@ -13,7 +13,7 @@
-
+
diff --git a/WebAPI/LearningHub.Nhs.Services/MyLearningService.cs b/WebAPI/LearningHub.Nhs.Services/MyLearningService.cs
index a4d6049f9..82e2ce2f8 100644
--- a/WebAPI/LearningHub.Nhs.Services/MyLearningService.cs
+++ b/WebAPI/LearningHub.Nhs.Services/MyLearningService.cs
@@ -362,13 +362,12 @@ public async Task> PopulateMyLearningDetai
{
viewModel.AssessmentResourceActivityId = activity.Id;
viewModel.Complete = activity.Score != null;
- var totalQuestions = resourceActivity.ResourceVersion.AssessmentResourceVersion.AssessmentContent.Blocks.Where(b => b.BlockType == BlockType.Question).Count();
- var completedQuestions = activity.AssessmentResourceActivityInteractions.Count();
- viewModel.CompletionPercentage = totalQuestions == 0 ? 0 : Convert.ToInt32(100 * completedQuestions / Convert.ToDecimal(totalQuestions));
viewModel.ScorePercentage = activity.Score.HasValue ? (int)Math.Round(activity.Score.Value, MidpointRounding.AwayFromZero) : 0;
var currentAttempt = allAttempts.FindIndex(a => a.Id == resourceActivity.Id) + 1;
+ var assessmemntActivityQuestion = await this.resourceActivityRepository.GetAssessmentActivityCompletionPercentage(resourceActivity.CreateUserId, resourceActivity.ResourceVersionId, resourceActivity.Id);
+ viewModel.CompletionPercentage = (int)assessmemntActivityQuestion.CompletionPercentage;
if (viewModel.CompletionPercentage == 100)
{
if (resourceActivity.ResourceVersion.AssessmentResourceVersion.AssessmentType == AssessmentTypeEnum.Informal)
diff --git a/WebAPI/MigrationTool/LearningHub.Nhs.Migration.ConsoleApp/LearningHub.Nhs.Migration.ConsoleApp.csproj b/WebAPI/MigrationTool/LearningHub.Nhs.Migration.ConsoleApp/LearningHub.Nhs.Migration.ConsoleApp.csproj
index 28730e740..22f02c0cf 100644
--- a/WebAPI/MigrationTool/LearningHub.Nhs.Migration.ConsoleApp/LearningHub.Nhs.Migration.ConsoleApp.csproj
+++ b/WebAPI/MigrationTool/LearningHub.Nhs.Migration.ConsoleApp/LearningHub.Nhs.Migration.ConsoleApp.csproj
@@ -24,7 +24,7 @@
-
+
all
diff --git a/WebAPI/MigrationTool/LearningHub.Nhs.Migration.Interface/LearningHub.Nhs.Migration.Interface.csproj b/WebAPI/MigrationTool/LearningHub.Nhs.Migration.Interface/LearningHub.Nhs.Migration.Interface.csproj
index d08aa9391..8a45f5232 100644
--- a/WebAPI/MigrationTool/LearningHub.Nhs.Migration.Interface/LearningHub.Nhs.Migration.Interface.csproj
+++ b/WebAPI/MigrationTool/LearningHub.Nhs.Migration.Interface/LearningHub.Nhs.Migration.Interface.csproj
@@ -9,7 +9,7 @@
-
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/WebAPI/MigrationTool/LearningHub.Nhs.Migration.Models/LearningHub.Nhs.Migration.Models.csproj b/WebAPI/MigrationTool/LearningHub.Nhs.Migration.Models/LearningHub.Nhs.Migration.Models.csproj
index 28916df8b..64a326d3b 100644
--- a/WebAPI/MigrationTool/LearningHub.Nhs.Migration.Models/LearningHub.Nhs.Migration.Models.csproj
+++ b/WebAPI/MigrationTool/LearningHub.Nhs.Migration.Models/LearningHub.Nhs.Migration.Models.csproj
@@ -10,7 +10,7 @@
-
+
all
diff --git a/WebAPI/MigrationTool/LearningHub.Nhs.Migration.Staging.Repository/LearningHub.Nhs.Migration.Staging.Repository.csproj b/WebAPI/MigrationTool/LearningHub.Nhs.Migration.Staging.Repository/LearningHub.Nhs.Migration.Staging.Repository.csproj
index e71105e0b..226acf08a 100644
--- a/WebAPI/MigrationTool/LearningHub.Nhs.Migration.Staging.Repository/LearningHub.Nhs.Migration.Staging.Repository.csproj
+++ b/WebAPI/MigrationTool/LearningHub.Nhs.Migration.Staging.Repository/LearningHub.Nhs.Migration.Staging.Repository.csproj
@@ -9,7 +9,7 @@
-
+
diff --git a/WebAPI/MigrationTool/LearningHub.Nhs.Migration.UnitTests/LearningHub.Nhs.Migration.UnitTests.csproj b/WebAPI/MigrationTool/LearningHub.Nhs.Migration.UnitTests/LearningHub.Nhs.Migration.UnitTests.csproj
index 9addb85a0..70df59e57 100644
--- a/WebAPI/MigrationTool/LearningHub.Nhs.Migration.UnitTests/LearningHub.Nhs.Migration.UnitTests.csproj
+++ b/WebAPI/MigrationTool/LearningHub.Nhs.Migration.UnitTests/LearningHub.Nhs.Migration.UnitTests.csproj
@@ -10,7 +10,7 @@
-
+
diff --git a/WebAPI/MigrationTool/LearningHub.Nhs.Migration/LearningHub.Nhs.Migration.csproj b/WebAPI/MigrationTool/LearningHub.Nhs.Migration/LearningHub.Nhs.Migration.csproj
index 8e0c512aa..fb53d0e90 100644
--- a/WebAPI/MigrationTool/LearningHub.Nhs.Migration/LearningHub.Nhs.Migration.csproj
+++ b/WebAPI/MigrationTool/LearningHub.Nhs.Migration/LearningHub.Nhs.Migration.csproj
@@ -12,7 +12,7 @@
-
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive