DROP PROCEDURE IF EXISTS uspGetBukasraAlloTanulok
GO

CREATE PROCEDURE uspGetBukasraAlloTanulok
	 @pIntezmenyId			int
	,@pTanevId				int
	,@pOsztalyCsoportIdXML	XML = NULL
	
AS
BEGIN

DECLARE @ocsId int

DECLARE @OsztalyCsoport TABLE(Id int)

IF @pOsztalyCsoportIdXML IS NOT NULL
BEGIN
	DECLARE @ValasztottOsztalyok TABLE(Id int)
	INSERT INTO @ValasztottOsztalyok(Id)
    SELECT Data FROM fnConvertXmlIntListToTable(@pOsztalyCsoportIdXML, 'a', 'b')
   
    INSERT INTO @OsztalyCsoport
    SELECT Id
    FROM @ValasztottOsztalyok 
END
ELSE BEGIN
	INSERT INTO @OsztalyCsoport
    SELECT osztalyok.OsztalyId FROM  fnGetDokumentumOsztalyokTanevenkent (@pTanevId) osztalyok
END

DECLARE ocsCur CURSOR FOR 
	SELECT Id FROM @OsztalyCsoport

CREATE TABLE #ErtekelesTemp 
(
	 [OMKod]					NVARCHAR(MAX)
	,[SzulHelyIdoAnyjaNeve]		NVARCHAR(MAX)
	,[TanuloNev]				NVARCHAR(MAX)
	,[OsztalyCsoportNev]		NVARCHAR(MAX)
	,[TantargyNev]				NVARCHAR(MAX)
	,[Atlag]					DECIMAL(10,2)
	,[TanarNeve]				NVARCHAR(MAX)
)
CREATE TABLE #CsoportNevek (OsztalyCsoportNeve nvarchar(200))		 

OPEN ocsCur
FETCH NEXT FROM ocsCur INTO @ocsId

WHILE @@FETCH_STATUS = 0
BEGIN
	TRUNCATE TABLE #ErtekelesTemp
	INSERT INTO #ErtekelesTemp 
	(
		 [OMKod]
		,[SzulHelyIdoAnyjaNeve]
		,[TanuloNev]
		,[OsztalyCsoportNev]
		,[TantargyNev]
		,[Atlag]
		,[TanarNeve]
	 )
	SELECT
		 tanulo.C_OKTATASIAZONOSITO		AS OMKod
		,tanulo.C_SZULETESIHELY + ', ' + CAST(FORMAT(tanulo.C_SZULETESIDATUM, 'yyyy.MM.dd.') AS nvarchar(200)) + ', '+ tanulo.C_ANYJANEVE AS SzulHelyIdoAnyjaNeve
		,tanulo.C_NYOMTATASINEV			AS TanuloNev
		,osztalyCsoport.C_NEV			AS OsztalyCsoportNev
		,ertekeles.TantargyNev			AS TantargyNev
		,ROUND(SUM(CAST(ertekeles.ErtekelesOsztalyzatValue AS FLOAT) * CAST(ISNULL(tanariAtlagSuly.C_SULY, 100) AS FLOAT) / 100) / SUM(CAST(ISNULL(tanariAtlagSuly.C_SULY, 100) AS FLOAT) / 100), 2) AS Atlag
		,tanar.C_NYOMTATASINEV			AS TanarNeve
	FROM 
		[fnGetDokumentumErtekelesekOsztalyonkent] (@pTanevId, @ocsId, DEFAULT, DEFAULT, 1, DEFAULT) ertekeles
	LEFT JOIN T_TANARIATLAGSULY tanariAtlagSuly ON 
			tanariAtlagSuly.C_TANEVID = @pTanevId
		AND tanariAtlagSuly.TOROLT = 'F' 
		AND tanariAtlagSuly.C_ERTEKELESMODID = ertekeles.ErtekelesModjaId 
	INNER JOIN T_OSZTALYCSOPORT_OSSZES osztalyCsoport ON 
			osztalyCsoport.C_TANEVID = @pTanevId
		AND osztalyCsoport.TOROLT = 'F' 
		AND osztalyCsoport.ID = ertekeles.OsztalyCsoportId
	INNER JOIN T_FELHASZNALO_OSSZES tanulo ON
			tanulo.C_TANEVID = @pTanevId
		AND tanulo.TOROLT = 'F'
		AND tanulo.ID = ertekeles.TanuloId		 
	INNER JOIN T_FELHASZNALO_OSSZES tanar ON
			tanar.C_TANEVID = @pTanevId
		AND tanar.TOROLT = 'F' 
		AND	tanar.ID = ertekeles.ErtekeloId
	WHERE
		ertekeles.ErtekelesOsztalyzatValue IS NOT NULL
	GROUP BY
		 tanulo.C_OKTATASIAZONOSITO
		,tanulo.C_SZULETESIHELY 
		,tanulo.C_SZULETESIDATUM
		,tanulo.C_ANYJANEVE
		,tanulo.C_NYOMTATASINEV
		,osztalyCsoport.C_NEV
		,ertekeles.TantargyNev
		,tanar.C_NYOMTATASINEV
	HAVING 
		ROUND(SUM(CAST(ertekeles.ErtekelesOsztalyzatValue AS FLOAT) * CAST(ISNULL(tanariAtlagSuly.C_SULY, 100) AS FLOAT) / 100) / SUM(CAST(ISNULL(tanariAtlagSuly.C_SULY, 100) AS FLOAT) / 100), 2) < 2

	IF EXISTS(SELECT 1 FROM #ErtekelesTemp)
	BEGIN
		SELECT 
			 tmp.OMKod
			,tmp.SzulHelyIdoAnyjaNeve
			,tmp.TanuloNev
			,tmp.OsztalyCsoportNev
			,tmp.TantargyNev
			,tmp.Atlag
			,tmp.TanarNeve
		FROM #ErtekelesTemp tmp ORDER BY [TanuloNev],[TantargyNev]

		INSERT INTO #CsoportNevek (OsztalyCsoportNeve)
		SELECT top 1 [OsztalyCsoportNev] FROM #ErtekelesTemp 
	END
	
	FETCH NEXT FROM ocsCur INTO @ocsId	
END

CLOSE ocsCur
DEALLOCATE ocsCur

SELECT * FROM #CsoportNevek

DROP TABLE #ErtekelesTemp
DROP TABLE #CsoportNevek

END
GO