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
	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
		,COALESCE(SzorgalomErtek, SzorgalomOsztalyzatNev, SzorgalomSzovegRovidNev) + Jeloles
	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
	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
	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
	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
			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 ö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 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