SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

IF OBJECT_ID('fnGetDokumentumErtekelesekOsztalyonkent') IS NOT NULL
BEGIN
	DROP FUNCTION fnGetDokumentumErtekelesekOsztalyonkent
END
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),
	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
	    INSERT INTO @retTanuloErtekeles
			 SELECT DISTINCT
				   [tanuloErtekeles].[ID] [ErtekelesId],
				   [tanuloErtekeles].[C_DATUM] [Datum],
				   [tanuloErtekeles].[C_TIPUSID] [TipusId],
				   [tanuloErtekeles].[C_ERTEKELESSZOVEG] [ErtekelesSzoveg],
				   [tanuloErtekeles].[C_ERTEKELESSZOVEGROVIDNEV] [ErtekelesSzovegRovidNev],
				   [tanuloErtekeles].[C_ERTEKELESOSZTALYZATID] [ErtekelesOsztalyzatId],
				   [ertekelesOsztalyzat].[C_VALUE] [ErtekelesOsztalyzatValue],
				   [ertekelesOsztalyzat].[C_NAME] [ErtekelesOsztalyzatNev],
				   IIF([tanuloErtekeles].[C_ERTEKELESSZAZALEK] IS NOT NULL													--
				   , CONVERT(NVARCHAR(3), [tanuloErtekeles].[C_ERTEKELESSZAZALEK])+'%'									--
				   , NULL) [ErtekelesSzazalek],
				   [tanuloErtekeles].[C_MAGATARTASOSZTALYZATID] [MagatartasOsztalyzatId],
				   [magatartasOsztalyzat].[C_VALUE] [MagatartasOsztalyzatValue],
				   [magatartasOsztalyzat].[C_NAME] [MagatartasOsztalyzatNev],
				   [tanuloErtekeles].[C_MAGATARTASSZOVEG] [MagatartasSzoveg],
				   [tanuloErtekeles].[C_MAGATARTASSZOVEGROVIDNEV] [MagatartasSzovegRovidNev],
				   [tanuloErtekeles].[C_MAGATARTASERTEKID] [MagatartasErtekId],
				   [magatartasErtek].[C_NAME] [MagatartasErtek],
				   [magatartasErtek].[C_VALUE] + 1 [MagatartasErtekOsztalyzatkent],
				   [tanuloErtekeles].[C_SZORGALOMOSZTALYZATID] [SzorgalomOsztalyzatId],
				   [szorgalomOsztalyzat].[C_VALUE] [SzorgalomOsztalyzatValue],
				   [szorgalomOsztalyzat].[C_NAME] [SzorgalomOsztalyzatNev],
				   [tanuloErtekeles].[C_SZORGALOMSZOVEG] [SzorgalomSzoveg],
				   [tanuloErtekeles].[C_SZORGALOMSZOVEGROVIDNEV] [SzorgalomSzovegRovidNev],
				   [tanuloErtekeles].[C_SZORGALOMERTEKID] [SzorgalomErtekId],
				   [szorgalomErtek].[C_NAME] [SzorgalomErtek],
				   [szorgalomErtek].[C_VALUE] + 1 [SzorgalomErtekOsztalyzatkent],
				   [tanuloErtekeles].[C_TANULOID] [TanuloId],
				   TanuloCsoportId,
				   [tanuloErtekeles].[C_OSZTALYCSOPORTID] [OsztalyCsoportId],
				   [tanuloErtekeles].[C_TANTARGYID] [TantargyId],
				   IIF([tantargy].[C_NEV] <> [tantargy].[C_NEVNYOMTATVANYBAN]
					  AND [tantargy].[C_NEVNYOMTATVANYBAN] IS NOT NULL		--
				   , [C_NEVNYOMTATVANYBAN]+' ('+[tantargy].[C_NEV]+')'													--
				   , [tantargy].[C_NEV]) [TantargyNevZarojellel],
				   [tantargy].[C_NEVNYOMTATVANYBAN] [TantargyNevNyomtatvanyban],
				   [tantargy].[C_NEV] [TantargyNev],
				   [tantargy].[C_TARGYKATEGORIA] [TargyKategoriaId],
				   [tantargy].[C_FOTARGYE] [FotargyE],
				   [tantargy].[C_ALTANTARGYKENTNYOMTATVANYBAN] [Altantargy],
				   [tantargy].[C_FOTARGYID] [FotargyId],
				   [tanuloErtekeles].[C_ERTEKELESTEMA] [ErtekelesTema],
				   [tanuloErtekeles].[C_ERTEKELOID] [ErtekeloId],
				   [tanuloErtekeles].[C_ERTEKELESMODID] [ErtekelesModjaId],
				   [tanuloErtekeles].[C_ISMAGATARTASSZORGALOM] [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>', '') [Jeloles],
				   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], '') [JelolesAndErtekelesTema]
			 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'
			 LEFT JOIN
				 [T_CSOPORT_OSSZES] [csoport] ON [csoport].[ID] = [tanuloErtekeles].[C_OSZTALYCSOPORTID]
			 LEFT JOIN
				 [T_OSZTALY_OSSZES] [osztaly] ON [osztaly].[ID] = [tanuloErtekeles].[C_OSZTALYCSOPORTID]
			 WHERE [tanuloErtekeles].[Torolt] = 'F'
				  AND (@atsoroltTanuloErtekelesek > 0
					  OR ([tanuloErtekeles].[C_OSZTALYCSOPORTID] IN
(
    SELECT
		 [ID]
    FROM
	    [fnGetDokumentumKapcsolodoOsztalycsoportok](@osztalyCsoportId, @tanevId)
)))
				 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)
)))
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)
)
				    UNION
				    SELECT DISTINCT
						 [C_TANTARGYID]
				    FROM
					    [T_FOGLALKOZAS_OSSZES]
				    INNER JOIN
					    [fnGetDokumentumKapcsolodoOsztalycsoportok](@osztalyCsoportId, @tanevId) 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
