SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

IF OBJECT_ID('sp_GetDokumentumErtekelesekIdoszakonkent') IS NOT NULL
BEGIN
  DROP PROCEDURE sp_GetDokumentumErtekelesekIdoszakonkent
END  
GO

CREATE PROCEDURE sp_GetDokumentumErtekelesekIdoszakonkent
	@tanevId						INT, 
	@osztalyCsoportId				INT, 
	@ertekelesTipusa				INT, 
	@csakTanorai					BIT, 
	@csakKivlasztottOsztalyCsoport	BIT, 
	@atsoroltTanuloErtekelesek		INT,
	@fuggolegesTantargyak			BIT,
	@isMegjegyzesMegjelenjen		BIT = 1
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
			,IIF(DATEPART(mm, Datum) = @FelevVegeHonap, IIF(DATEPART(mm, Datum) = @FelevVegeHonap AND DATEPART(DD, Datum) <= @FelevVegeNap, 13, 14), DATEPART(mm, Datum))  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'
			,IIF(DATEPART(mm, Datum) = @FelevVegeHonap, IIF(DATEPART(mm, Datum) = @FelevVegeHonap AND DATEPART(DD, Datum) <= @FelevVegeNap, 13, 14), DATEPART(mm, Datum))  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) Rendez
			,
			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
			,Ertekeles 
			,Rendez
		INTO #jegyekTMP 
		FROM
		(SELECT 
			IIF(DATEPART(mm, Datum) = @FelevVegeHonap, IIF(DATEPART(mm, Datum) = @FelevVegeHonap AND DATEPART(DD, Datum) <= @FelevVegeNap, 13, 14), DATEPART(mm, Datum))  Honap
			,TanuloId
			,TanuloCsoportId
			,TantargyId
			,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
			,TargyKategoriaId Rendez
		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 
			15  Honap
			,TanuloId
			,TanuloCsoportId
			,TantargyId
			,ISNULL(CONVERT(NVARCHAR(MAX),ErtekelesOsztalyzatValue), ErtekelesSzazalek) + IIF(@isMegjegyzesMegjelenjen = 1, Jeloles, '') 
			,TargyKategoriaId Rendez
		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
			,ISNULL(CONVERT(NVARCHAR(MAX),ErtekelesOsztalyzatValue), ErtekelesSzazalek) + IIF(@isMegjegyzesMegjelenjen = 1, Jeloles, '')  
			,TargyKategoriaId Rendez
		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) 

		SELECT
			 ID
			,Honap
			,TanuloCsoportId
		INTO #TanuloIdHonap
		FROM #studentsWithTanuloCsoport
		CROSS JOIN (VALUES (2),(3),(4),(5),(6),(9),(10),(11),(12),(13),(14),(15),(16)) Honap (Honap)

		SELECT DISTINCT
			 TanuloIdHonap.Honap
			,TanuloIdHonap.Id TanuloId
			,TanuloIdHonap.TanuloCsoportId
			,TantargyId
			,STUFF((
				SELECT ', ' + CAST(Ertekeles AS nvarchar(max))
				FROM #jegyekTMP bjegyekTMP
				WHERE 
					jegyekTMP.TanuloId = bjegyekTMP.TanuloId
					AND jegyekTMP.TanuloCsoportId = bjegyekTMP.TanuloCsoportId
					AND jegyekTMP.TantargyId = bjegyekTMP.TantargyId
					AND jegyekTMP.Honap = bjegyekTMP.Honap
				FOR XML PATH(''), TYPE).value('.', 'nvarchar(max)'), 1, 2,'') Ertekeles 	
			,Rendez
			,
				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 #TanuloIdHonap TanuloIdHonap
			LEFT JOIN #jegyekTMP jegyekTMP ON TanuloIdHonap.ID = jegyekTMP.TanuloId 
												AND TanuloIdHonap.Honap = jegyekTMP.Honap 
												AND TanuloIdHonap.TanuloCsoportId = jegyekTMP.TanuloCsoportId

   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, C_TARGYKATEGORIA  FROM #jegyek j INNER JOIN T_TANTARGY_OSSZES t ON t.Id = j.TantargyId ) t
		ORDER BY C_TARGYKATEGORIA

		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 
			 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

		UNION ALL

		SELECT 
			IIF(Tipus = ''Magatartás'', 0, 1)
			,Honap
			,s.ID
			,s.TanuloCsoportId
			,Ertekeles
			,RendezHonap 
		FROM #magatartasSzorgalom m
			INNER JOIN #studentsWithTanuloCsoport s on m.Tanuloid = s.ID AND s.TanuloCsoportId = m.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 * FROM(
		SELECT 
			 TanuloId
			 ,TanuloCsoportId
			, Tipus
			, Rendez
			,[9],[10],[11],[12],[2],[3],[4],[5],[6],[13],[14],[15],[16]	
		FROM (SELECT TanuloId, TanuloCsoportId, Ertekeles, Honap, Tipus, IIF(Tipus = 'Magatartás', 0, 1) TantargyId, Rendez
				FROM #magatartasSzorgalom)a
		PIVOT (MAX(Ertekeles) FOR Honap IN ([9],[10],[11],[12],[2],[3],[4],[5],[6],[13],[14],[15],[16])) piv
		
		UNION ALL

		SELECT
			 TanuloId		TanuloId
			,TanuloCsoportId
			,C_NEV			TantargyNev
			,Rendez
			,[9],[10],[11],[12],[2],[3],[4],[5],[6],[13],[14],[15],[16]	
		FROM (SELECT TanuloId, TanuloCsoportId, Ertekeles, Honap, TantargyId, Rendez FROM #jegyek) j
			INNER JOIN (SELECT Id, C_NEV FROM T_TANTARGY_OSSZES) t ON t.Id = TantargyId
		PIVOT (MAX(Ertekeles) FOR Honap IN ([9],[10],[11],[12],[2],[3],[4],[5],[6],[13],[14],[15],[16])) piv
		)vegleges
		ORDER BY TanuloId, Rendez, Tipus
	END
END

GO