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))		 
CREATE TABLE #OsszErtekeles
(
	ErtekelesId						INT NOT NULL,
	Datum							DATE,
	TipusId							INT,
	ErtekelesSzoveg					NVARCHAR(MAX),
	ErtekelesSzovegRovidNev			NVARCHAR(3),
	ErtekelesOsztalyzatId			INT,
	ErtekelesOsztalyzatValue		INT, 
	ErtekelesOsztalyzatNev			NVARCHAR(MAX),
	ErtekelesSzazalek				NVARCHAR(MAX),
	MagatartasOsztalyzatId			INT,
	MagatartasOsztalyzatValue		INT, 
	MagatartasOsztalyzatNev			NVARCHAR(MAX),
	MagatartasSzoveg				NVARCHAR(MAX),
	MagatartasSzovegRovidNev		NVARCHAR(3),
	MagatartasErtekId				INT,
	MagatartasErtek					NVARCHAR(MAX),
	MagatartasErtekOsztalyzatkent	INT,
	SzorgalomOsztalyzatId			INT,
	SzorgalomOsztalyzatValue		INT, 
	SzorgalomOsztalyzatNev			NVARCHAR(MAX),
	SzorgalomSzoveg					NVARCHAR(MAX),
	SzorgalomSzovegRovidNev			NVARCHAR(3),
	SzorgalomErtekId				INT,
	SzorgalomErtek					NVARCHAR(MAX),
	SzorgalomErtekOsztalyzatkent	INT,
	TanuloId						INT,
	TanuloCsoportId					INT,
	OsztalyCsoportId				INT,
	TantargyId						INT,
	TantargyNevZarojellel			NVARCHAR(MAX),
	TantargyNevNyomtatvanyban		NVARCHAR(MAX),
	TantargyNev						NVARCHAR(MAX),
	TantargyAngolNev				NVARCHAR(MAX),
	TantargyNemetNev				NVARCHAR(MAX),
	TargyKategoriaId				INT,
	FotargyE						CHAR(1),
	Altantargy						CHAR(1),
	FotargyId						INT,
	ErtekelesTema					NVARCHAR(MAX),
	ErtekeloId						INT,
	ErtekelesModjaId				INT,
	IsMagatartasSzorgalom			CHAR(1),
	Jeloles							NVARCHAR(MAX),
	JelolesAndErtekelesTema			NVARCHAR(MAX)
  ,RogzitesDatum DATE
)

OPEN ocsCur
FETCH NEXT FROM ocsCur INTO @ocsId

WHILE @@FETCH_STATUS = 0
BEGIN
    TRUNCATE TABLE #OsszErtekeles
    INSERT INTO #OsszErtekeles
        SELECT * from [fnGetDokumentumErtekelesekOsztalyonkent] (@pTanevId, @ocsId, DEFAULT, DEFAULT, 1, DEFAULT)

	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
    ,STUFF((
      SELECT DISTINCT ', ' + f.C_NYOMTATASINEV
      FROM #OsszErtekeles
        INNER JOIN T_FELHASZNALO_OSSZES AS f ON f.ID = #OsszErtekeles.ErtekeloId AND f.C_TANEVID = @pTanevId
      WHERE (TantargyId = ertekeles.TantargyId) AND (TanuloId = ertekeles.TanuloId)
      FOR XML PATH(''),TYPE).value('(./text())[1]','VARCHAR(MAX)'), 1, 2, '') AS TanarNeve
	FROM 
		#OsszErtekeles 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		 
	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
    ,ertekeles.TantargyId
    ,ertekeles.TanuloId
	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
DROP TABLE #OsszErtekeles

END
GO