SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

DROP FUNCTION IF EXISTS fnGetDokumentumErtekelesekOsztalyonkent
GO

CREATE FUNCTION fnGetDokumentumErtekelesekOsztalyonkent (@tanevId INT, @osztalyCsoportId INT, @ertekelesTipusa INT = NULL, @csakTanorai BIT = 1, @csakKivlasztottOsztalyCsoport BIT = 0, @atsoroltTanuloErtekelesek INT = 0)
RETURNS @retTanuloErtekeles TABLE 
(
	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)
)
AS 
BEGIN

DECLARE @DefaultFeladatKategoriaId int =  (SELECT tev.C_DEFAULTFELADATKATEGORIAID FROM T_TANEV_OSSZES tev WHERE C_AKTIV = 'T' and tev.ID = @tanevId)
	    INSERT INTO @retTanuloErtekeles
			 SELECT DISTINCT
				   tanuloErtekeles.ID,
				   tanuloErtekeles.C_DATUM,
				   tanuloErtekeles.C_TIPUSID,
				   tanuloErtekeles.C_ERTEKELESSZOVEG,
				   tanuloErtekeles.C_ERTEKELESSZOVEGROVIDNEV,
				   tanuloErtekeles.C_ERTEKELESOSZTALYZATID,
				   ertekelesOsztalyzat.C_VALUE,
				   ertekelesOsztalyzat.C_NAME,
				   IIF(tanuloErtekeles.C_ERTEKELESSZAZALEK IS NOT NULL, CONVERT(NVARCHAR(3), tanuloErtekeles.C_ERTEKELESSZAZALEK)+'%', NULL),
				   tanuloErtekeles.C_MAGATARTASOSZTALYZATID,
				   magatartasOsztalyzat.C_VALUE,
				   magatartasOsztalyzat.C_NAME,
				   tanuloErtekeles.C_MAGATARTASSZOVEG,
				   tanuloErtekeles.C_MAGATARTASSZOVEGROVIDNEV,
				   tanuloErtekeles.C_MAGATARTASERTEKID,
				   magatartasErtek.C_NAME,
				   magatartasErtek.C_VALUE + 1,
				   tanuloErtekeles.C_SZORGALOMOSZTALYZATID,
				   szorgalomOsztalyzat.C_VALUE,
				   szorgalomOsztalyzat.C_NAME,
				   tanuloErtekeles.C_SZORGALOMSZOVEG,
				   tanuloErtekeles.C_SZORGALOMSZOVEGROVIDNEV,
				   tanuloErtekeles.C_SZORGALOMERTEKID,
				   szorgalomErtek.C_NAME,
				   szorgalomErtek.C_VALUE + 1,
				   tanuloErtekeles.C_TANULOID,
				   TanuloCsoportId,
				   tanuloErtekeles.C_OSZTALYCSOPORTID,
				   tanuloErtekeles.C_TANTARGYID,
				   IIF(tantargy.C_NEV <> tantargy.C_NEVNYOMTATVANYBAN AND tantargy.C_NEVNYOMTATVANYBAN IS NOT NULL, C_NEVNYOMTATVANYBAN +' ('+tantargy.C_NEV+')', tantargy.C_NEV),
				   tantargy.C_NEVNYOMTATVANYBAN,
				   tantargy.C_NEV,
				   tantargy.C_ANGOLNEV,
				   tantargy.C_NEMETNEV,
				   tantargy.C_TARGYKATEGORIA,
				   tantargy.C_FOTARGYE,
				   tantargy.C_ALTANTARGYKENTNYOMTATVANYBAN,
				   tantargy.C_FOTARGYID,
				   tanuloErtekeles.C_ERTEKELESTEMA,
				   tanuloErtekeles.C_ERTEKELOID,
				   tanuloErtekeles.C_ERTEKELESMODID,
				   tanuloErtekeles.C_ISMAGATARTASSZORGALOM,
				   IIF(tanuloErtekeles.C_ERTEKELESTEMA IS NOT NULL AND tanuloErtekeles.C_TIPUSID IN (1519, 1520), 
						'<i>(' + CAST(CHAR(ROW_NUMBER() OVER(PARTITION BY tanuloErtekeles.C_TANULOID, tanuloErtekeles.C_TIPUSID, IIF(tanuloErtekeles.C_ERTEKELESTEMA IS NOT NULL, 1, 0) ORDER BY tanuloErtekeles.C_DATUM) + 96) AS NVARCHAR(10))+')</i>', 
						''),
				   IIF(tanuloErtekeles.C_ERTEKELESTEMA IS NOT NULL AND tanuloErtekeles.C_TIPUSID IN(1519, 1520), 
						'<i>('+CAST(CHAR(ROW_NUMBER() OVER(PARTITION BY tanuloErtekeles.C_TANULOID, tanuloErtekeles.C_TIPUSID, IIF(tanuloErtekeles.C_ERTEKELESTEMA IS NOT NULL, 1, 0) ORDER BY tanuloErtekeles.C_DATUM) + 96) AS NVARCHAR(10)) + ')</i>: ' + tanuloErtekeles.C_ERTEKELESTEMA, 
						'') 
			 FROM T_TANULOERTEKELES_OSSZES tanuloErtekeles
				 INNER JOIN fnGetDokumentumOsztalyokCsoportokTanuloi(@tanevId, @osztalyCsoportId, 'T') tanulo ON tanulo.TanuloId = tanuloErtekeles.C_TANULOID
				 INNER JOIN T_TANULOCSOPORT_OSSZES TanuloCsoport ON TanuloCsoport.C_TANULOID = tanuloErtekeles.C_TANULOID
														AND TanuloCsoport.C_OSZTALYCSOPORTID = tanuloErtekeles.C_OSZTALYCSOPORTID
														AND tanuloErtekeles.C_DATUM BETWEEN TanuloCsoport.C_BELEPESDATUM AND ISNULL(TanuloCsoport.C_KILEPESDATUM, GETDATE())
														AND TanuloCsoport.TOROLT = 'F'
				 LEFT JOIN T_TANTARGY_OSSZES tantargy ON tantargy.Id = tanuloErtekeles.C_TANTARGYID
												AND (tantargy.C_TARGYKATEGORIA <> 1248 OR tantargy.C_TARGYKATEGORIA IS NULL)
				 LEFT JOIN T_DICTIONARYITEMBASE_OSSZES ertekelesOsztalyzat ON ertekelesOsztalyzat.ID = tanuloErtekeles.C_ERTEKELESOSZTALYZATID
																 AND ertekelesOsztalyzat.C_TANEVID = @tanevId
																 AND ertekelesOsztalyzat.C_TYPE LIKE 'OsztalyzatTipus'
				 LEFT JOIN T_DICTIONARYITEMBASE_OSSZES magatartasOsztalyzat ON magatartasOsztalyzat.ID = tanuloErtekeles.C_MAGATARTASOSZTALYZATID
																 AND magatartasOsztalyzat.C_TANEVID = @tanevId
																 AND magatartasOsztalyzat.C_TYPE LIKE 'OsztalyzatTipus'
				 LEFT JOIN T_DICTIONARYITEMBASE_OSSZES szorgalomOsztalyzat ON szorgalomOsztalyzat.ID = tanuloErtekeles.C_SZORGALOMOSZTALYZATID
																 AND szorgalomOsztalyzat.C_TANEVID = @tanevId
																 AND szorgalomOsztalyzat.C_TYPE LIKE 'OsztalyzatTipus'
				 LEFT JOIN T_DICTIONARYITEMBASE_OSSZES magatartasErtek ON magatartasErtek.ID = tanuloErtekeles.C_MAGATARTASERTEKID
																 AND magatartasErtek.C_TANEVID = @tanevId
																 AND magatartasErtek.C_TYPE LIKE 'MagatartasErtekelesTipus'
				 LEFT JOIN T_DICTIONARYITEMBASE_OSSZES szorgalomErtek ON szorgalomErtek.ID = tanuloErtekeles.C_SZORGALOMERTEKID
																AND szorgalomErtek.C_TANEVID = @tanevId
																AND szorgalomErtek.C_TYPE LIKE 'SzorgalomErtekelesTipus'
				 INNER JOIN T_OSZTALYCSOPORT_OSSZES osztalyCsoport ON osztalyCsoport.ID = tanuloErtekeles.C_OSZTALYCSOPORTID
																AND osztalyCsoport.TOROLT = 'F'and osztalyCsoport.C_FELADATKATEGORIAID = @DefaultFeladatKategoriaId
				 LEFT JOIN T_CSOPORT_OSSZES csoport ON csoport.ID = osztalyCsoport.ID
				 LEFT JOIN T_OSZTALY_OSSZES osztaly ON osztaly.ID = osztalyCsoport.ID
			 WHERE 
					tanuloErtekeles.C_TANEVID = @tanevId
				AND tanuloErtekeles.TOROLT = 'F'
				AND (@atsoroltTanuloErtekelesek > 0 
						OR (tanuloErtekeles.C_OSZTALYCSOPORTID 
						IN(
							SELECT ID FROM fnGetDokumentumKapcsolodoOsztalycsoportok(@osztalyCsoportId, @tanevId, 0))
							)
					   )
				AND (@ertekelesTipusa IS NULL OR C_TIPUSID = @ertekelesTipusa)
				AND (@csakKivlasztottOsztalyCsoport = 0 OR tanuloErtekeles.C_OSZTALYCSOPORTID = @osztalyCsoportId)
				AND (@csakTanorai = 0  OR osztaly.ID IS NOT NULL OR 
						(csoport.ID IS NOT NULL AND csoport.C_TIPUSA
							IN(
								SELECT ID FROM fnGetTanoraiCeluCsoportTipusok(@tanevId)
								)
						 )
					  )
				AND  BelepesDatum <= tanuloErtekeles.C_DATUM
				AND (KilepesDatum IS NULL OR KilepesDatum >= tanuloErtekeles.C_DATUM)

option (recompile);

	    IF @atsoroltTanuloErtekelesek = 1
		   BEGIN
			  DECLARE @osztalyTantargyak TABLE
				(
					TantargyId INT
				);

			  INSERT INTO @osztalyTantargyak
				    SELECT DISTINCT
						 TantargyId
				    FROM
					    @retTanuloErtekeles
				    WHERE 
						OsztalyCsoportId IN
						(
							SELECT ID FROM fnGetDokumentumKapcsolodoOsztalycsoportok(@osztalyCsoportId, @tanevId, 0)
						)

				    UNION

				    SELECT DISTINCT
						 C_TANTARGYID
				    FROM
					    T_FOGLALKOZAS_OSSZES
				    INNER JOIN fnGetDokumentumKapcsolodoOsztalycsoportok(@osztalyCsoportId, @tanevId, 0) AS OSZTALYCSOPORT ON OSZTALYCSOPORT.ID = T_FOGLALKOZAS_OSSZES.C_OSZTALYCSOPORTID
				    WHERE 
						T_FOGLALKOZAS_OSSZES.TOROLT = 'F'

			  DELETE FROM @retTanuloErtekeles
			  WHERE
				   ErtekelesId NOT IN
					(
						SELECT
							 ErtekelesId
						FROM
							@retTanuloErtekeles
						WHERE 
							TantargyId IS NULL
							OR TantargyId IN
							(
								SELECT
									 TantargyId
								FROM @osztalyTantargyak
							)
					)
		END
	RETURN
END

GO
