|
| 1 | +------------------------------------------------------------------------------- |
| 2 | +-- Author Tobi |
| 3 | +-- Created 22-08-2025 |
| 4 | +-- Purpose Gets the certificate details for all completed resources. |
| 5 | +-- |
| 6 | +-- Modification History |
| 7 | +-- |
| 8 | +-- 22-08-2025 Tobi Initial Revision |
| 9 | +------------------------------------------------------------------------------- |
| 10 | +CREATE PROCEDURE [resources].[GetUsercertificateDetails] |
| 11 | + @UserId INT, |
| 12 | + @FilterText NVARCHAR(200) = N'' |
| 13 | +AS |
| 14 | +BEGIN |
| 15 | + SET NOCOUNT ON; |
| 16 | + |
| 17 | + -- Temp table for better stats and indexing |
| 18 | + IF OBJECT_ID('tempdb..#MyActivity') IS NOT NULL |
| 19 | + DROP TABLE #MyActivity; |
| 20 | + |
| 21 | + CREATE TABLE #MyActivity ( |
| 22 | + ResourceId INT NOT NULL, |
| 23 | + ResourceActivityId INT NOT NULL, |
| 24 | + PRIMARY KEY CLUSTERED (ResourceActivityId) |
| 25 | + ); |
| 26 | + |
| 27 | + INSERT INTO #MyActivity (ResourceId, ResourceActivityId) |
| 28 | + SELECT |
| 29 | + ra.ResourceId, |
| 30 | + MAX(ra.Id) AS ResourceActivityId |
| 31 | + FROM activity.ResourceActivity ra |
| 32 | + JOIN resources.Resource r |
| 33 | + ON ra.ResourceId = r.Id |
| 34 | + JOIN resources.ResourceVersion rv |
| 35 | + ON rv.Id = ra.ResourceVersionId |
| 36 | + WHERE ra.UserId = @UserId |
| 37 | + AND rv.CertificateEnabled = 1 |
| 38 | + AND ( |
| 39 | + (r.ResourceTypeId IN (2, 7) AND ra.ActivityStatusId = 3) |
| 40 | + OR (ra.ActivityStart < '2020-09-07T00:00:00+00:00') |
| 41 | + OR EXISTS ( |
| 42 | + SELECT 1 |
| 43 | + FROM activity.MediaResourceActivity mar |
| 44 | + WHERE mar.ResourceActivityId = ra.Id |
| 45 | + AND mar.PercentComplete = 100 |
| 46 | + ) |
| 47 | + OR (r.ResourceTypeId = 6 AND ( |
| 48 | + EXISTS ( |
| 49 | + SELECT 1 |
| 50 | + FROM activity.ScormActivity sa |
| 51 | + WHERE sa.ResourceActivityId = ra.Id |
| 52 | + AND sa.CmiCoreLesson_status IN (3,5) |
| 53 | + ) |
| 54 | + OR ra.ActivityStatusId IN (3,5) |
| 55 | + )) |
| 56 | + OR (r.ResourceTypeId = 11 AND ( |
| 57 | + EXISTS ( |
| 58 | + SELECT 1 |
| 59 | + FROM activity.AssessmentResourceActivity ara |
| 60 | + JOIN resources.AssessmentResourceVersion arv |
| 61 | + ON arv.ResourceVersionId = ra.ResourceVersionId |
| 62 | + WHERE ara.ResourceActivityId = ra.Id |
| 63 | + AND ara.Score >= arv.PassMark |
| 64 | + ) |
| 65 | + OR ra.ActivityStatusId IN (3,5) |
| 66 | + )) |
| 67 | + OR (r.ResourceTypeId IN (1, 5, 8, 9, 10, 12) |
| 68 | + AND ra.ActivityStatusId = 3) |
| 69 | + ) |
| 70 | + GROUP BY ra.ResourceId; |
| 71 | + |
| 72 | + -- Full result set without paging |
| 73 | + SELECT |
| 74 | + rv.Id, |
| 75 | + rv.Title, |
| 76 | + r.ResourceTypeId, |
| 77 | + ( |
| 78 | + SELECT TOP (1) rr.OriginalResourceReferenceId |
| 79 | + FROM resources.ResourceReference rr |
| 80 | + JOIN hierarchy.NodePath np |
| 81 | + ON np.Id = rr.NodePathId |
| 82 | + AND np.NodeId = n.Id |
| 83 | + AND np.Deleted = 0 |
| 84 | + WHERE rr.ResourceId = rv.ResourceId |
| 85 | + AND rr.Deleted = 0 |
| 86 | + ) AS ResourceReferenceID, |
| 87 | + rv.MajorVersion, |
| 88 | + rv.MinorVersion, |
| 89 | + ra.ActivityStart AS AwardedDate, |
| 90 | + NULL AS CertificateDownloadUrl, |
| 91 | + NULL AS CertificatePreviewUrl |
| 92 | + FROM #MyActivity ma |
| 93 | + JOIN activity.ResourceActivity ra |
| 94 | + ON ra.Id = ma.ResourceActivityId |
| 95 | + JOIN resources.ResourceVersion rv |
| 96 | + ON rv.Id = ra.ResourceVersionId |
| 97 | + AND rv.Deleted = 0 |
| 98 | + JOIN resources.Resource r |
| 99 | + ON r.Id = rv.ResourceId |
| 100 | + JOIN hierarchy.Publication p |
| 101 | + ON rv.PublicationId = p.Id |
| 102 | + AND p.Deleted = 0 |
| 103 | + JOIN hierarchy.NodeResource nr |
| 104 | + ON r.Id = nr.ResourceId |
| 105 | + AND nr.Deleted = 0 |
| 106 | + JOIN hierarchy.Node n |
| 107 | + ON n.Id = nr.NodeId |
| 108 | + AND n.Hidden = 0 |
| 109 | + AND n.Deleted = 0 |
| 110 | + JOIN hierarchy.NodePath np |
| 111 | + ON np.NodeId = n.Id |
| 112 | + AND np.Deleted = 0 |
| 113 | + AND np.IsActive = 1 |
| 114 | + JOIN hierarchy.NodeVersion nv |
| 115 | + ON nv.NodeId = np.CatalogueNodeId |
| 116 | + AND nv.VersionStatusId = 2 |
| 117 | + AND nv.Deleted = 0 |
| 118 | + JOIN hierarchy.CatalogueNodeVersion cnv |
| 119 | + ON cnv.NodeVersionId = nv.Id |
| 120 | + AND cnv.Deleted = 0 |
| 121 | + WHERE ( |
| 122 | + @FilterText = N'' |
| 123 | + OR rv.Title LIKE @FilterText + N'%' |
| 124 | + ) |
| 125 | + ORDER BY ma.ResourceActivityId DESC, rv.Title |
| 126 | + OPTION (RECOMPILE); |
| 127 | +END; |
| 128 | +GO |
| 129 | + |
0 commit comments