DROP PROCEDURE IF EXISTS uspGetDokumentumErtekelesekIdoszakonkent GO CREATE PROCEDURE uspGetDokumentumErtekelesekIdoszakonkent @tanevId int ,@osztalyCsoportId int ,@ertekelesTipusa int ,@csakTanorai bit ,@csakKivalasztottOsztalyCsoport bit ,@atsoroltTanuloErtekelesek int ,@fuggolegesTantargyak bit ,@isMegjegyzesMegjelenjen bit = 1 ,@intezmenyId int AS BEGIN SET NOCOUNT ON; /* a #students tábla deklarálása az alábbi tároltakban történik: sp_GetOsztalynaplo, sp_GetCsoportNaplo, sp_GetUzenofuzetErtekelolap*/ DECLARE @FelevVegeHonap int, @FelevVegeNap int SELECT @FelevVegeHonap = DATEPART(mm, C_DATUM) ,@FelevVegeNap = DATEPART(dd, C_DATUM) FROM T_TANEVRENDJE_OSSZES WHERE C_NAPTIPUSA = 1400 AND TOROLT = 'F' AND C_TANEVID = @tanevid SELECT Tipus ,Honap ,TanuloId ,TanuloCsoportId ,Ertekeles ,Datum ,RogzitesDatum INTO #magatartasSzorgalomTMP FROM (SELECT 'Magatartás' Tipus ,CASE WHEN DATEPART(mm, Datum) = @FelevVegeHonap AND DATEPART(DD, Datum) <= @FelevVegeNap THEN 13 WHEN DATEPART(mm, Datum) = @FelevVegeHonap AND DATEPART(DD, Datum) > @FelevVegeNap THEN 14 ELSE DATEPART(mm, Datum) END AS Honap ,TanuloId ,TanuloCsoportId ,ISNULL(MagatartasErtek, MagatartasOsztalyzatNev) + CASE WHEN TipusId = 1518 THEN '' WHEN TipusId = 1522 THEN '(I.)' WHEN TipusId = 1523 THEN '(III.)' WHEN TipusId = 1524 THEN '(II.)' WHEN TipusId = 1525 THEN '(IV.)' END AS Ertekeles ,Datum ,RogzitesDatum FROM #ErtekelesekTemp WHERE (MagatartasErtek IS NOT NULL OR MagatartasOsztalyzatNev IS NOT NULL) AND TipusId IN (1518, 1522, 1523, 1524, 1525) UNION ALL SELECT 'Szorgalom' ,CASE WHEN DATEPART(mm, Datum) = @FelevVegeHonap AND DATEPART(DD, Datum) <= @FelevVegeNap THEN 13 WHEN DATEPART(mm, Datum) = @FelevVegeHonap AND DATEPART(DD, Datum) > @FelevVegeNap THEN 14 ELSE DATEPART(mm, Datum) END AS Honap ,TanuloId ,TanuloCsoportId ,ISNULL(SzorgalomErtek, SzorgalomOsztalyzatNev) + CASE WHEN TipusId = 1518 THEN '' WHEN TipusId = 1522 THEN '(I.)' WHEN TipusId = 1523 THEN '(III.)' WHEN TipusId = 1524 THEN '(II.)' WHEN TipusId = 1525 THEN '(IV.)' END AS Ertekeles ,Datum ,RogzitesDatum FROM #ErtekelesekTemp WHERE (SzorgalomErtek IS NOT NULL OR SzorgalomOsztalyzatNev IS NOT NULL) AND TipusId IN (1518, 1522, 1523, 1524, 1525) UNION ALL SELECT 'Szorgalom' ,15 Honap ,TanuloId ,TanuloCsoportId ,COALESCE(SzorgalomErtek, SzorgalomOsztalyzatNev, SzorgalomSzovegRovidNev) + Jeloles ,Datum ,RogzitesDatum FROM #ErtekelesekTemp WHERE (SzorgalomErtek IS NOT NULL OR SzorgalomOsztalyzatNev IS NOT NULL OR SzorgalomSzovegRovidNev IS NOT NULL) AND TipusId = 1519 UNION ALL SELECT 'Magatartás' ,15 Honap ,TanuloId ,TanuloCsoportId ,COALESCE(MagatartasErtek, MagatartasOsztalyzatNev, MagatartasSzovegRovidNev) + Jeloles ,Datum ,RogzitesDatum FROM #ErtekelesekTemp WHERE (MagatartasErtek IS NOT NULL OR MagatartasOsztalyzatNev IS NOT NULL OR MagatartasSzovegRovidNev IS NOT NULL) AND TipusId = 1519 UNION ALL SELECT 'Szorgalom' ,16 Honap ,TanuloId ,TanuloCsoportId ,COALESCE(SzorgalomErtek, SzorgalomOsztalyzatNev, SzorgalomSzovegRovidNev) + Jeloles ,Datum ,RogzitesDatum FROM #ErtekelesekTemp WHERE (SzorgalomErtek IS NOT NULL OR SzorgalomOsztalyzatNev IS NOT NULL OR SzorgalomSzovegRovidNev IS NOT NULL) AND TipusId = 1520 UNION ALL SELECT 'Magatartás' ,16 Honap ,TanuloId ,TanuloCsoportId ,COALESCE(MagatartasErtek, MagatartasOsztalyzatNev, MagatartasSzovegRovidNev) + Jeloles ,Datum ,RogzitesDatum FROM #ErtekelesekTemp WHERE (MagatartasErtek IS NOT NULL OR MagatartasOsztalyzatNev IS NOT NULL OR MagatartasSzovegRovidNev IS NOT NULL) AND TipusId = 1520 )magszorg SELECT DISTINCT Honap ,TanuloId ,TanuloCsoportId ,Tipus ,STUFF(( SELECT ', ' + CAST(Ertekeles AS nvarchar(max)) FROM #magatartasSzorgalomTMP bmsz WHERE msz.TanuloId = bmsz.TanuloId AND msz.Tipus = bmsz.Tipus AND msz.Honap = bmsz.Honap AND msz.TanuloCsoportId = bmsz.TanuloCsoportId ORDER BY bmsz.Datum,bmsz.RogzitesDatum FOR XML PATH(''), TYPE).value('.', 'nvarchar(max)'), 1, 2,'') Ertekeles ,IIF(Tipus = 'Magatartás', 0, 1) RENDEZ1 ,'' RENDEZ2 ,0 RENDEZ3 ,0 RENDEZ4 ,'' RENDEZ5 ,CASE WHEN Honap = 2 THEN 8 WHEN Honap = 3 THEN 9 WHEN Honap = 4 THEN 10 WHEN Honap = 5 THEN 11 WHEN Honap = 6 THEN 12 WHEN Honap = 9 THEN 1 WHEN Honap = 10 THEN 2 WHEN Honap = 11 THEN 3 WHEN Honap = 12 THEN 4 WHEN Honap = 13 THEN 5 WHEN Honap = 14 THEN 7 WHEN Honap = 15 THEN 6 WHEN Honap = 16 THEN 15 END AS RendezHonap ,Datum ,RogzitesDatum INTO #magatartasSzorgalom FROM #magatartasSzorgalomTMP msz CREATE CLUSTERED INDEX ci111sss on #magatartasSzorgalomTMP (tanulocsoportid) SELECT Honap ,TanuloId ,TanuloCsoportId ,TantargyId ,TantargyNev ,Ertekeles ,RENDEZ1 ,RENDEZ2 ,RENDEZ3 ,RENDEZ4 ,RENDEZ5 ,Datum ,RogzitesDatum INTO #jegyekTMP FROM (SELECT CASE WHEN DATEPART(mm, Datum) = @FelevVegeHonap AND DATEPART(DD, Datum) <= @FelevVegeNap THEN 13 WHEN DATEPART(mm, Datum) = @FelevVegeHonap AND DATEPART(DD, Datum) > @FelevVegeNap THEN 14 ELSE DATEPART(mm, Datum) END AS Honap ,TanuloId ,TanuloCsoportId ,TantargyId ,TantargyNev ,ISNULL(CONVERT(NVARCHAR(MAX),ErtekelesOsztalyzatValue), ErtekelesSzazalek) + CASE WHEN TipusId = 1518 THEN '' WHEN TipusId = 1522 THEN '(I.)' WHEN TipusId = 1523 THEN '(III.)' WHEN TipusId = 1524 THEN '(II.)' WHEN TipusId = 1525 THEN '(IV.)' WHEN TipusId = 1521 THEN '(mz)' WHEN TipusId = 1526 THEN '(pv)' WHEN TipusId = 1527 THEN '(ov)' WHEN TipusId = 1528 THEN '(kv)' WHEN TipusId = 6916 THEN '(pótló v.)' WHEN TipusId = 6917 THEN '(jv)' WHEN TipusId = 6918 THEN '(bv)' ELSE ' ' + LOWER(SUBSTRING(C_NAME, 0, 3)) END AS Ertekeles ,RENDEZ1 ,RENDEZ2 ,RENDEZ3 ,RENDEZ4 ,RENDEZ5 ,Datum ,RogzitesDatum FROM #ErtekelesekTemp ertekeles LEFT JOIN T_DICTIONARYITEMBASE_OSSZES ertekesMod ON ertekeles.TipusId = ertekesMod.ID AND TOROLT = 'F' AND ertekesMod.C_TANEVID = @tanevId WHERE isMagatartasSzorgalom = 'F' AND (ErtekelesOsztalyzatValue IS NOT NULL OR ErtekelesSzazalek IS NOT NULL) AND TipusId NOT IN (1519, 1520) UNION ALL SELECT CASE WHEN TipusId = 1519 THEN 15 WHEN TipusId = 1520 THEN 16 WHEN DATEPART(mm, Datum) = @FelevVegeHonap AND DATEPART(DD, Datum) <= @FelevVegeNap THEN 13 WHEN DATEPART(mm, Datum) = @FelevVegeHonap AND DATEPART(DD, Datum) > @FelevVegeNap THEN 14 ELSE DATEPART(mm, Datum) END AS Honap ,TanuloId ,TanuloCsoportId ,TantargyId ,TantargyNev ,CASE WHEN TipusId in (1519, 1520) THEN LOWER(ISNULL(ErtekelesSzovegRovidNev, 'sz')) WHEN TipusId in (1522, 1523, 1524, 1525) THEN 'sz' + CASE WHEN TipusId = 1522 THEN '(I.)' WHEN TipusId = 1523 THEN '(III.)' WHEN TipusId = 1524 THEN '(II.)' WHEN TipusId = 1525 THEN '(IV.)' END ELSE 'sz' + Jeloles END AS Ertekeles ,RENDEZ1 ,RENDEZ2 ,RENDEZ3 ,RENDEZ4 ,RENDEZ5 ,Datum ,RogzitesDatum FROM #ErtekelesekTemp WHERE ErtekelesSzoveg IS NOT NULL UNION ALL SELECT 15 Honap ,TanuloId ,TanuloCsoportId ,TantargyId ,TantargyNev ,ISNULL(CONVERT(NVARCHAR(MAX),ErtekelesOsztalyzatValue), ErtekelesSzazalek) + IIF(@isMegjegyzesMegjelenjen = 1, Jeloles, '') ,RENDEZ1 ,RENDEZ2 ,RENDEZ3 ,RENDEZ4 ,RENDEZ5 ,Datum ,RogzitesDatum FROM #ErtekelesekTemp WHERE isMagatartasSzorgalom = 'F' AND (ErtekelesOsztalyzatValue IS NOT NULL OR ErtekelesSzazalek IS NOT NULL) AND TipusId = 1519 UNION ALL SELECT 16 Honap ,TanuloId ,TanuloCsoportId ,TantargyId ,TantargyNev ,ISNULL(CONVERT(NVARCHAR(MAX),ErtekelesOsztalyzatValue), ErtekelesSzazalek) + IIF(@isMegjegyzesMegjelenjen = 1, Jeloles, '') ,RENDEZ1 ,RENDEZ2 ,RENDEZ3 ,RENDEZ4 ,RENDEZ5 ,Datum ,RogzitesDatum FROM #ErtekelesekTemp WHERE isMagatartasSzorgalom = 'F' AND (ErtekelesOsztalyzatValue IS NOT NULL OR ErtekelesSzazalek IS NOT NULL) AND TipusId = 1520 )jegyek CREATE CLUSTERED INDEX ci111ssws on #jegyekTMP (tanulocsoportid) ----------------------------------------------------------------------------------------------- INSERT INTO #jegyekTMP SELECT Honap ,TanuloId ,TanuloCsoportId ,NULL AS TantargyId ,a.Tipus ,Ertekeles ,IIF(a.Tipus = 'Magatartás', 0, 1) RENDEZ1 ,'' AS RENDEZ2 ,0 AS RENDEZ3 ,0 AS RENDEZ4 ,'' AS RENDEZ5 ,Datum ,RogzitesDatum FROM #magatartasSzorgalomTmp a -- Összeszedjük az összes Tanuló/Tanulócsoport/Hónap-ot SELECT tcs.C_TANULOID AS ID ,Honap ,tcs.ID AS TanuloCsoportId INTO #TanuloIdHonap FROM T_TANULOCSOPORT_OSSZES tcs CROSS JOIN (VALUES (2),(3),(4),(5),(6),(9),(10),(11),(12),(13),(14),(15),(16)) Honap (Honap) WHERE tcs.C_OSZTALYCSOPORTID = @osztalycsoportId INSERT INTO #Tantargyak EXEC uspGetDokumentumTantargyakErtekeleshez @intezmenyId, @tanevId, @osztalyCsoportId, @csakKivalasztottOsztalyCsoport SELECT tih.Id AS TanuloId ,tih.TanuloCsoportId AS TanuloCsoportId ,tih.Honap AS Honap ,t.C_NEV AS TantargyNev ,t.ID AS TantargyId ,t.RENDEZ1 ,t.RENDEZ2 ,t.RENDEZ3 ,t.RENDEZ4 ,t.RENDEZ5 INTO #TanuloTantargyHonapTmp FROM #TanuloIdHonap tih INNER JOIN #Tantargyak t ON t.c_tanuloid = tih.Id and t.c_tanulocsoportid = tih.TanuloCsoportId ----------------------------------------------------------------------------------------------------------- SELECT DISTINCT TanuloIdHonap.Honap ,TanuloIdHonap.TanuloId ,TanuloIdHonap.TanuloCsoportId ,TanuloIdHonap.TantargyId ,TanuloIdHonap.TantargyNev ,STUFF(( SELECT ', ' + CAST(Ertekeles AS nvarchar(max)) FROM #jegyekTMP bjegyekTMP WHERE jegyekTMP.TanuloId = bjegyekTMP.TanuloId AND jegyekTMP.TanuloCsoportId = bjegyekTMP.TanuloCsoportId AND jegyekTMP.TantargyNev = bjegyekTMP.TantargyNev AND jegyekTMP.Honap = bjegyekTMP.Honap ORDER BY Datum, RogzitesDatum FOR XML PATH(''), TYPE).value('.', 'nvarchar(max)'), 1, 2,'') Ertekeles ,TanuloIdHonap.RENDEZ1 ,TanuloIdHonap.RENDEZ2 ,TanuloIdHonap.RENDEZ3 ,TanuloIdHonap.RENDEZ4 ,TanuloIdHonap.RENDEZ5 ,CASE WHEN TanuloIdHonap.Honap = 2 THEN 8 WHEN TanuloIdHonap.Honap = 3 THEN 9 WHEN TanuloIdHonap.Honap = 4 THEN 10 WHEN TanuloIdHonap.Honap = 5 THEN 11 WHEN TanuloIdHonap.Honap = 6 THEN 12 WHEN TanuloIdHonap.Honap = 9 THEN 1 WHEN TanuloIdHonap.Honap = 10 THEN 2 WHEN TanuloIdHonap.Honap = 11 THEN 3 WHEN TanuloIdHonap.Honap = 12 THEN 4 WHEN TanuloIdHonap.Honap = 13 THEN 5 WHEN TanuloIdHonap.Honap = 14 THEN 7 WHEN TanuloIdHonap.Honap = 15 THEN 6 WHEN TanuloIdHonap.Honap = 16 THEN 15 END AS RendezHonap INTO #jegyek FROM #TanuloTantargyHonapTmp TanuloIdHonap LEFT JOIN #jegyekTMP jegyekTMP ON TanuloIdHonap.TanuloId = jegyekTMP.TanuloId AND TanuloIdHonap.Honap = jegyekTMP.Honap AND TanuloIdHonap.TanuloCsoportId = jegyekTMP.TanuloCsoportId AND TanuloIdHonap.TantargyNev = jegyekTMP.TantargyNev IF @fuggolegesTantargyak = 1 BEGIN DECLARE @tantargyakJegyek NVARCHAR(MAX) DECLARE @tantargyakNevvelJegyek NVARCHAR(MAX) SELECT @tantargyakNevvelJegyek = ISNULL(@tantargyakNevvelJegyek + ', ', '') + '[' + CAST(t.TantargyId AS NVARCHAR(MAX)) + '] AS [' + t.TantargyNev + ']', @tantargyakJegyek = ISNULL(@tantargyakJegyek + ', ', '[0], [1],') + '[' + CAST(t.TantargyId AS NVARCHAR(MAX)) + ']' FROM (SELECT DISTINCT TantargyId, IIF(LEN(t.c_nev) > 128, SUBSTRING(t.C_NEV,1,120) + '...', t.c_nev) AS TantargyNev, RENDEZ1 ,RENDEZ2 ,RENDEZ3, RENDEZ4, RENDEZ5 FROM #jegyek j INNER JOIN T_TANTARGY_OSSZES t ON t.Id = j.TantargyId ) t ORDER BY RENDEZ1, RENDEZ2, RENDEZ3, RENDEZ4, RENDEZ5 DECLARE @sqlJegyek NVARCHAR(MAX) SET @sqlJegyek = ' SELECT TanuloId tanuloID ,TanuloCsoportId ,CASE WHEN Honap = 2 THEN ''02.'' WHEN Honap = 3 THEN ''03.'' WHEN Honap = 4 THEN ''04.'' WHEN Honap = 5 THEN ''05.'' WHEN Honap = 6 THEN ''06.'' WHEN Honap = 9 THEN ''09.'' WHEN Honap = 10 THEN ''10.'' WHEN Honap = 11 THEN ''11.'' WHEN Honap = 12 THEN ''12.'' WHEN Honap = 13 THEN ''1/I.'' WHEN Honap = 14 THEN ''1/II.'' WHEN Honap = 15 THEN ''F'' WHEN Honap = 16 THEN ''É'' END AS periodusNev ,piv.[0] AS Magatartás ,piv.[1] AS Szorgalom ,' + @tantargyakNevvelJegyek + ' FROM ( SELECT CASE WHEN TantargyNev = ''Magatartás'' THEN 0 WHEN TantargyNev = ''Szorgalom'' THEN 1 ELSE TantargyId END AS TantargyId ,Honap ,s.ID TanuloId ,s.TanuloCsoportId ,Ertekeles ,RendezHonap FROM #jegyek j INNER JOIN #studentsWithTanuloCsoport s on j.Tanuloid = s.ID AND s.TanuloCsoportId = j.TanuloCsoportId )a PIVOT (MAX(Ertekeles) FOR TantargyId in (' + @tantargyakJegyek + ')) piv ORDER BY RendezHonap ' IF (@tantargyakJegyek IS NULL) BEGIN SELECT 0 AS tanuloId, 0 as TanuloCsoportId END ELSE BEGIN EXEC sp_executesql @sqlJegyek END END ELSE BEGIN SELECT TanuloId ,TanuloCsoportId ,TantargyNev AS Tipus ,RENDEZ1 ,RENDEZ2 ,RENDEZ3 ,RENDEZ4 ,RENDEZ5 ,[9],[10],[11],[12],[2],[3],[4],[5],[6],[13],[14],[15],[16] FROM ( SELECT jegyek.TanuloId ,ISNULL(tanulok.TanuloCsoportId ,(SELECT TOP 1 ID FROM T_TANULOCSOPORT_OSSZES AS tcs WHERE tcs.C_TANULOID = jegyek.TanuloId AND tcs.C_OSZTALYCSOPORTID = @osztalyCsoportId) ) AS TanuloCsoportId, Ertekeles, Honap, TantargyId, TantargyNev, RENDEZ1, RENDEZ2, RENDEZ3, RENDEZ4, RENDEZ5 FROM #jegyek AS jegyek LEFT JOIN fnGetDokumentumOsztalyokCsoportokTanuloi(@tanevId, @osztalycsoportId, 'T') AS tanulok ON tanulok.TanuloId = jegyek.TanuloId AND tanulok.TanuloCsoportId = jegyek.TanuloCsoportId ) j PIVOT (MAX(Ertekeles) FOR Honap IN ([9],[10],[11],[12],[2],[3],[4],[5],[6],[13],[14],[15],[16])) piv ORDER BY TanuloId, RENDEZ1, RENDEZ2, RENDEZ3, RENDEZ4, RENDEZ5, Tipus END END GO