DROP PROCEDURE IF EXISTS sp_GetDokumentumErtekelesekIdoszakonkent GO CREATE PROCEDURE sp_GetDokumentumErtekelesekIdoszakonkent @tanevId int ,@osztalyCsoportId int ,@ertekelesTipusa int ,@csakTanorai bit ,@csakKivlasztottOsztalyCsoport 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 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 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 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 ,ISNULL(SzorgalomErtek, SzorgalomOsztalyzatNev) + Jeloles FROM #ErtekelesekTemp WHERE (SzorgalomErtek IS NOT NULL OR SzorgalomOsztalyzatNev IS NOT NULL) AND TipusId = 1519 UNION ALL SELECT 'Magatartás' ,15 Honap ,TanuloId ,TanuloCsoportId ,ISNULL(MagatartasErtek, MagatartasOsztalyzatNev) + Jeloles FROM #ErtekelesekTemp WHERE (MagatartasErtek IS NOT NULL OR MagatartasOsztalyzatNev IS NOT NULL) AND TipusId = 1519 UNION ALL SELECT 'Szorgalom' ,16 Honap ,TanuloId ,TanuloCsoportId ,ISNULL(SzorgalomErtek, SzorgalomOsztalyzatNev) + Jeloles FROM #ErtekelesekTemp WHERE (SzorgalomErtek IS NOT NULL OR SzorgalomOsztalyzatNev IS NOT NULL) AND TipusId = 1520 UNION ALL SELECT 'Magatartás' ,16 Honap ,TanuloId ,TanuloCsoportId ,ISNULL(MagatartasErtek, MagatartasOsztalyzatNev) + Jeloles FROM #ErtekelesekTemp WHERE (MagatartasErtek IS NOT NULL OR MagatartasOsztalyzatNev 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 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 INTO #magatartasSzorgalom FROM #magatartasSzorgalomTMP msz CREATE CLUSTERED INDEX ci111sss on #magatartasSzorgalomTMP (tanulocsoportid) SELECT Honap ,TanuloId ,TanuloCsoportId ,TantargyId ,TantargyNev ,Ertekeles ,RENDEZ1 ,RENDEZ2 ,RENDEZ3 ,RENDEZ4 ,RENDEZ5 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 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 ,LOWER(ISNULL(ErtekelesSzovegRovidNev, SUBSTRING(ErtekelesSzoveg, 1, 3))) AS Ertekeles ,RENDEZ1 ,RENDEZ2 ,RENDEZ3 ,RENDEZ4 ,RENDEZ5 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 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 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 FROM #magatartasSzorgalomTmp a -- Összeszedjük az osztályhoz kapcsolódó csoportokat CREATE TABLE #OsztalyCsoportIdList( ID INT PRIMARY KEY ) IF EXISTS (SELECT ID FROM T_OSZTALY_OSSZES WHERE ID = @osztalyCsoportId) BEGIN INSERT INTO #OsztalyCsoportIdList (ID) SELECT ID FROM fnGetKapcsolodoOsztalycsoportok(@osztalyCsoportId, 7553) -- Nem tanórai célú csoportok eltávolítása DELETE ocsl FROM #OsztalyCsoportIdList ocsl LEFT JOIN T_CSOPORT_OSSZES cs ON cs.ID = ocsl.ID WHERE cs.C_TIPUSA <> 1034 END ELSE BEGIN -- Csoport esetén csak a keresett csoport kell legyen tagja INSERT INTO #OsztalyCsoportIdList (ID) SELECT @osztalyCsoportId END -- Ö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 INNER JOIN #OsztalyCsoportIdList ocsil ON tcs.C_OSZTALYCSOPORTID = ocsil.ID INNER JOIN ( -- Kidobjuk a csoportok által behozott, más osztályba járó tanulókat SELECT TanuloId FROM fnGetDokumentumOsztalyokCsoportokTanuloi(@tanevId, @osztalyCsoportId, 'T') ) AS Tanulok ON Tanulok.TanuloId = tcs.C_TANULOID CROSS JOIN (VALUES (2),(3),(4),(5),(6),(9),(10),(11),(12),(13),(14),(15),(16)) Honap (Honap) INSERT INTO #Tantargyak EXEC uspGetDokumentumTantargyakErtekeleshez @intezmenyId, @tanevId, @osztalyCsoportId SELECT tih.Id TanuloId ,tih.TanuloCsoportId TanuloCsoportId ,tih.Honap Honap ,t.C_NEV TantargyNev ,t.ID 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 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 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 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