1+ -- -----------------------------------------------------------------------------
2+ -- Author OA
3+ -- Created 24 JUN 2024 Nov 2020
4+ -- Purpose Break down the GetDashboardResources SP to smaller SP for a specific data type
5+ --
6+ -- Modification History
7+ --
8+ -- 24 Jun 2024 OA Initial Revision
9+ -- 27 Jun 2024 SA My Learning Dashboard Tray showing Wrong Counts
10+ -- -----------------------------------------------------------------------------
11+
12+ CREATE PROCEDURE [resources].[GetMyInProgressDashboardResources]
13+ @UserId INT ,
14+ @PageNumber INT = 1 ,
15+ @TotalRecords INT OUTPUT
16+ AS
17+ BEGIN
18+ DECLARE @MaxPageNumber INT = 4
19+
20+ IF @PageNumber > 4
21+ BEGIN
22+ SET @PageNumber = @MaxPageNumber
23+ END
24+
25+ DECLARE @FetchRows INT = 3
26+ DECLARE @MaxRows INT = @MaxPageNUmber * @FetchRows
27+ DECLARE @OffsetRows INT = (@PageNumber - 1 ) * @FetchRows
28+
29+ DECLARE @MyActivity TABLE (ResourceId [int] NOT NULL PRIMARY KEY , ResourceActivityId [int] NOT NULL );
30+
31+ INSERT INTO @MyActivity
32+ SELECT TOP (@MaxRows) ra .ResourceId , MAX (ra .Id ) ResourceActivityId
33+ FROM
34+ (SELECT a .Id ,a .ResourceId ,a .ResourceVersionId ,a .LaunchResourceActivityId ,a .UserId ,a .ActivityStatusId ,a .ActivityStart FROM activity .ResourceActivity a INNER JOIN (SELECT ResourceId, MAX (Id) as id FROM activity .ResourceActivity GROUP BY ResourceId) AS b ON a .ResourceId = b .ResourceId AND a .id = b .id order by a .Id desc OFFSET 0 ROWS ) ra
35+ JOIN [resources].[Resource] r ON ra .ResourceId = r .Id
36+ JOIN [resources].[ResourceVersion] rv ON rv .Id = ra .ResourceVersionId
37+ LEFT JOIN [resources].[AssessmentResourceVersion] arv ON arv .ResourceVersionId = ra .ResourceVersionId
38+ LEFT JOIN [activity].[AssessmentResourceActivity] ara ON ara .ResourceActivityId = COALESCE (ra .LaunchResourceActivityId , ra .Id )
39+ LEFT JOIN [activity].[MediaResourceActivity] mar ON mar .ResourceActivityId = COALESCE (ra .LaunchResourceActivityId , ra .Id )
40+ LEFT JOIN [activity].[ScormActivity] sa ON sa .ResourceActivityId = ra .Id
41+ WHERE ra .UserId = @UserId
42+ AND (
43+ (r .ResourceTypeId IN (1 , 5 , 8 , 9 ,10 , 12 ) AND ra .ActivityStatusId <> 3 )
44+ OR (r .ResourceTypeId IN (2 , 7 ) AND (mar .Id IS NULL OR (mar .Id IS NOT NULL AND mar .PercentComplete < 100 ) OR ra .ActivityStart < ' 2020-09-07 00:00:00 +00:00' ))
45+ OR (r .ResourceTypeId = 6 AND (sa .CmiCoreLesson_status NOT IN (3 , 5 ) AND (ra .ActivityStatusId NOT IN (3 , 5 ))))
46+ OR ((r .ResourceTypeId = 11 AND arv .AssessmentType = 2 ) AND ((ara .Id IS NOT NULL AND ara .score < arv .PassMark ) OR ra .ActivityStatusId = 7 ))
47+
48+ OR ((r .ResourceTypeId = 11 AND arv .AssessmentType = 1 ) AND ra .ActivityStatusId = 7 )
49+ )
50+ GROUP BY ra .ResourceId
51+ ORDER BY ResourceActivityId DESC
52+
53+ SELECT ma .ResourceActivityId , r .Id AS ResourceId
54+ ,( SELECT TOP 1 rr .OriginalResourceReferenceId
55+ FROM [resources].[ResourceReference] rr
56+ JOIN hierarchy .NodePath np on np .id = rr .NodePathId and np .NodeId = n .Id and np .Deleted = 0
57+ WHERE rr .ResourceId = rv .ResourceId AND rr .Deleted = 0
58+ ) AS ResourceReferenceID
59+ ,r .CurrentResourceVersionId AS ResourceVersionId
60+ ,r .ResourceTypeId AS ResourceTypeId
61+ ,rv .Title
62+ ,rv .Description
63+ ,CASE
64+ WHEN r .ResourceTypeId = 7 THEN
65+ (SELECT vrv .DurationInMilliseconds from [resources].[VideoResourceVersion] vrv WHERE vrv.[ResourceVersionId] = r .CurrentResourceVersionId )
66+ WHEN r .ResourceTypeId = 2 THEN
67+ (SELECT vrv .DurationInMilliseconds from [resources].[AudioResourceVersion] vrv WHERE vrv.[ResourceVersionId] = r .CurrentResourceVersionId )
68+ ELSE
69+ NULL
70+ END AS DurationInMilliseconds
71+ ,CASE WHEN n .id = 1 THEN NULL ELSE cnv .Name END AS CatalogueName
72+ ,cnv .Url AS Url
73+ ,CASE WHEN n .id = 1 THEN NULL ELSE cnv .BadgeUrl END AS BadgeUrl
74+ ,cnv .RestrictedAccess
75+ ,CAST (CASE WHEN cnv .RestrictedAccess = 1 AND auth .CatalogueNodeId IS NULL THEN 0 ELSE 1 END AS bit ) AS HasAccess
76+ ,ub .Id AS BookMarkId
77+ ,CAST (ISNULL (ub.[Deleted], 1 ) ^ 1 AS BIT ) AS IsBookmarked
78+ ,rvrs .AverageRating
79+ ,rvrs .RatingCount
80+ FROM @MyActivity ma
81+ JOIN activity .ResourceActivity ra ON ra .id = ma .ResourceActivityId
82+ JOIN resources .resourceversion rv ON rv .id = ra .ResourceVersionId AND rv .Deleted = 0
83+ JOIN Resources .Resource r ON r .Id = rv .ResourceId
84+ JOIN hierarchy .Publication p ON rv .PublicationId = p .Id AND p .Deleted = 0
85+ JOIN resources .ResourceVersionRatingSummary rvrs ON rv .Id = rvrs .ResourceVersionId AND rvrs .Deleted = 0
86+ JOIN hierarchy .NodeResource nr ON r .Id = nr .ResourceId AND nr .Deleted = 0
87+ JOIN hierarchy .Node n ON n .Id = nr .NodeId AND n .Hidden = 0 AND n .Deleted = 0
88+ JOIN hierarchy .NodePath np ON np .NodeId = n .Id AND np .Deleted = 0 AND np .IsActive = 1
89+ JOIN hierarchy .NodeVersion nv ON nv .NodeId = np .CatalogueNodeId AND nv .VersionStatusId = 2 AND nv .Deleted = 0
90+ JOIN hierarchy .CatalogueNodeVersion cnv ON cnv .NodeVersionId = nv .Id AND cnv .Deleted = 0
91+ LEFT JOIN hub .UserBookmark ub ON ub .UserId = @UserId AND ub .ResourceReferenceId = (SELECT TOP 1 rr .OriginalResourceReferenceId
92+ FROM [resources].[ResourceReference] rr
93+ JOIN hierarchy .NodePath np on np .id = rr .NodePathId and np .NodeId = n .Id and np .Deleted = 0
94+ WHERE rr .ResourceId = rv .ResourceId AND rr .Deleted = 0 )
95+ LEFT JOIN ( SELECT DISTINCT CatalogueNodeId
96+ FROM [hub].[RoleUserGroupView] rug JOIN hub .UserUserGroup uug ON rug .UserGroupId = uug .UserGroupId
97+ WHERE rug .ScopeTypeId = 1 and rug .RoleId in (1 ,2 ,3 ) and uug .Deleted = 0 and uug .UserId = @userId) auth ON n .Id = auth .CatalogueNodeId
98+ ORDER BY ma .ResourceActivityId DESC
99+ OFFSET @OffsetRows ROWS
100+ FETCH NEXT @FetchRows ROWS ONLY
101+
102+ SELECT @TotalRecords = CASE WHEN COUNT (ma .ResourceActivityId ) > 12 THEN @MaxRows ELSE COUNT (* ) END
103+ FROM @MyActivity ma
104+ JOIN activity .ResourceActivity ra ON ra .id = ma .ResourceActivityId
105+ JOIN resources .resourceversion rv ON rv .id = ra .ResourceVersionId AND rv .Deleted = 0
106+ JOIN Resources .Resource r ON r .Id = rv .ResourceId
107+ JOIN hierarchy .Publication p ON rv .PublicationId = p .Id AND p .Deleted = 0
108+ JOIN resources .ResourceVersionRatingSummary rvrs ON rv .Id = rvrs .ResourceVersionId AND rvrs .Deleted = 0
109+ JOIN hierarchy .NodeResource nr ON r .Id = nr .ResourceId AND nr .Deleted = 0
110+ JOIN hierarchy .Node n ON n .Id = nr .NodeId AND n .Hidden = 0 AND n .Deleted = 0
111+ JOIN hierarchy .NodePath np ON np .NodeId = n .Id AND np .Deleted = 0 AND np .IsActive = 1
112+ JOIN hierarchy .NodeVersion nv ON nv .NodeId = np .CatalogueNodeId AND nv .VersionStatusId = 2 AND nv .Deleted = 0
113+ JOIN hierarchy .CatalogueNodeVersion cnv ON cnv .NodeVersionId = nv .Id AND cnv .Deleted = 0
114+ LEFT JOIN hub .UserBookmark ub ON ub .UserId = @UserId AND ub .ResourceReferenceId = (SELECT TOP 1 rr .OriginalResourceReferenceId
115+ FROM [resources].[ResourceReference] rr
116+ JOIN hierarchy .NodePath np on np .id = rr .NodePathId and np .NodeId = n .Id and np .Deleted = 0
117+ WHERE rr .ResourceId = rv .ResourceId AND rr .Deleted = 0 )
118+ LEFT JOIN ( SELECT DISTINCT CatalogueNodeId
119+ FROM [hub].[RoleUserGroupView] rug JOIN hub .UserUserGroup uug ON rug .UserGroupId = uug .UserGroupId
120+ WHERE rug .ScopeTypeId = 1 and rug .RoleId in (1 ,2 ,3 ) and uug .Deleted = 0 and uug .UserId = @userId) auth ON n .Id = auth .CatalogueNodeId
121+
122+ END
0 commit comments