﻿SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

IF OBJECT_ID('[dbo].[sp_GenerateErtekelesekTempTablaByTanulo]') IS NOT NULL
BEGIN
	DROP PROCEDURE [dbo].[sp_GenerateErtekelesekTempTablaByTanulo]
END
GO

-- =============================================
-- Description:	<Előszedi a tanulú értékeléseket, havi bontásban tanuló alapján>
-- NOTE: EZT A HÁROM TÁROLT ELJÁRÁST EGYBEN KELL KEZELNI, HA MÓDOSÍTJUK!!!	
--		-	sp_GenerateErtekelesekTempTabla
--		-	sp_GenerateErtekelesekMagatartasSzorgalomTempTabla
--		-	sp_GenerateErtekelesekTempTablaByTanulo
-- =============================================

CREATE PROCEDURE [dbo].[sp_GenerateErtekelesekTempTablaByTanulo]
	 @pTanuloId					INT
	,@pFotargyAltargyId			INT = NULL
	,@pFelevVegeDatum			DATE
	,@pErtekelesTipusEvkozi		INT
	,@pErtekelesTipusFelevi		INT
	,@pErtekelesTipusEvvegi		INT
AS
BEGIN

	-- SET NOCOUNT ON added to prevent extra result sets from interfering with SELECT statements.
	SET NOCOUNT ON;

	DECLARE @TempDictionaryItem TABLE (
		 ID				INT PRIMARY KEY
		,C_VALUE		INT
		,C_ORDER		INT
		,C_INTEZMENYID	INT
		,C_TANEVID		INT
	)
				  
	INSERT INTO @TempDictionaryItem
	SELECT
		 ID
		,C_VALUE
		,C_ORDER
		,C_INTEZMENYID
		,C_TANEVID
	FROM 
		T_DICTIONARYITEMBASE 
	WHERE 
			C_TYPE IN ('OsztalyzatTipus', 'MagatartasErtekelesTipus', 'SzorgalomErtekelesTipus', 'TargyKategoriaTipus')
		AND TOROLT = 'F'
		
	DECLARE @OsztalyCsoportIdList TABLE (
  		 ID	INT PRIMARY KEY
	)

	INSERT INTO @OsztalyCsoportIdList (ID)
  	SELECT C_OSZTALYCSOPORTID ID
	FROM T_TANULOCSOPORT 
	WHERE 
			C_BELEPESDATUM <= GETDATE()
		AND (C_KILEPESDATUM IS NULL OR C_KILEPESDATUM >= GETDATE())
		AND TOROLT = 'F'
		AND C_TANULOID = @pTanuloId

	DECLARE @Tantargyak TABLE (
  		 ID					INT PRIMARY KEY
		,C_FOTARGYID		INT
		,C_NEV				NVARCHAR(255)
		,C_TARGYKATEGORIA 	INT
	);
			
	WITH tantargy_CTE (C_TANTARGYID, C_FOTARGYID)  
	AS (  
		SELECT foglalkozas.C_TANTARGYID, tantargy.C_FOTARGYID
		FROM T_FOGLALKOZAS foglalkozas
		INNER JOIN T_TANTARGY tantargy ON tantargy.ID = foglalkozas.C_TANTARGYID 
		WHERE 
				foglalkozas.C_OSZTALYCSOPORTID IN (SELECT ID FROM @OsztalyCsoportIdList)
			AND foglalkozas.TOROLT = 'F'
		UNION
		SELECT orarendiOra.C_TANTARGYID, tantargy.C_FOTARGYID
		FROM T_ORARENDIORA orarendiOra
		INNER JOIN T_TANTARGY tantargy ON tantargy.ID = orarendiOra.C_TANTARGYID 
		WHERE 
				orarendiOra.C_OSZTALYCSOPORTID IN (SELECT ID FROM @OsztalyCsoportIdList)
			AND orarendiOra.TOROLT = 'F'
		UNION
		SELECT tanuloErtekeles.C_TANTARGYID, tantargy.C_FOTARGYID
		FROM T_TANULOERTEKELES tanuloErtekeles
		INNER JOIN T_TANTARGY tantargy ON tantargy.ID = tanuloErtekeles.C_TANTARGYID 
		WHERE 
				tanuloErtekeles.C_TANULOID = @pTanuloId 
			AND tanuloErtekeles.C_TANTARGYID IS NOT NULL 
			AND tanuloErtekeles.TOROLT = 'F'
	)
  
	INSERT INTO @Tantargyak (ID, C_FOTARGYID, C_NEV, C_TARGYKATEGORIA)
	SELECT DISTINCT kapcsopodoTantargy.ID, kapcsopodoTantargy.C_FOTARGYID, kapcsopodoTantargy.C_NEV, kapcsopodoTantargy.C_TARGYKATEGORIA 
	FROM tantargy_CTE
	INNER JOIN fnGetKapcsolodoTantargyak(@pFotargyAltargyId) kapcsopodoTantargy ON tantargy_CTE.C_TANTARGYID = kapcsopodoTantargy.ID OR tantargy_CTE.C_FOTARGYID = kapcsopodoTantargy.ID
	WHERE (kapcsopodoTantargy.ID <> @pFotargyAltargyId OR @pFotargyAltargyId IS NULL)

	DECLARE @TempTanuloErtekeles TABLE (
		 ID							INT
		,Datum						NVARCHAR(255)
		,TipusId					INT
		,Honap						NVARCHAR(2)
		,TanuloId					INT
		,Nev						NVARCHAR(255)
		,ErtekelesOsztalyzat		INT
		,ErtekelesSzoveg			NVARCHAR(MAX)
		,ErtekelesSzovegRovidNev	NVARCHAR(3)
		,ErtekelesSzazalek			INT
		,MagatartasOsztalyzat		INT
		,MagatartasSzoveg			NVARCHAR(MAX)
		,MagatartasSzovegRovidNev	NVARCHAR(3)
		,MagatartasErtek			INT
		,SzorgalomOsztalyzat		INT
		,SzorgalomSzoveg			NVARCHAR(MAX)
		,SzorgalomSzovegRovidNev	NVARCHAR(3)
		,SzorgalomErtek				INT
		,Suly						INT
		,TantargyId					INT
		,TantargyKategoria			INT
		,FotargyId					INT
	)

	INSERT INTO @TempTanuloErtekeles (
		 ID	
		,Datum	
		,TipusId
		,Honap
		,TanuloId
		,Nev
		,ErtekelesOsztalyzat
		,ErtekelesSzoveg
		,ErtekelesSzovegRovidNev
		,ErtekelesSzazalek
		,MagatartasOsztalyzat
		,MagatartasSzoveg	
		,MagatartasSzovegRovidNev
		,MagatartasErtek
		,SzorgalomOsztalyzat
		,SzorgalomSzoveg	
		,SzorgalomSzovegRovidNev
		,SzorgalomErtek	
		,Suly	
		,TantargyId	
		,TantargyKategoria
		,FotargyId
	)	
	SELECT DISTINCT *
	FROM (
		SELECT DISTINCT
    		 tanuloErtekeles.ID							ID
			,tanuloErtekeles.C_DATUM					Datum
			,tanuloErtekeles.C_TIPUSID					TipusId
			,CASE WHEN tanuloErtekeles.C_TIPUSID = @pErtekelesTipusFelevi 
					THEN 'I'
				WHEN tanuloErtekeles.C_TIPUSID = @pErtekelesTipusEvvegi 
					THEN 'II'
				ELSE					
					CASE 
						WHEN CAST(tanuloErtekeles.C_DATUM AS DATE) > @pFelevVegeDatum
							THEN CAST(MONTH(tanuloErtekeles.C_DATUM) + 1 AS NVARCHAR(2))
							ELSE CAST(MONTH(tanuloErtekeles.C_DATUM) AS NVARCHAR(2))
					END 
				END										Honap
			,@pTanuloId									TanuloId
			,tantargy.C_NEV								Nev
			,ertekelesOsztalyzat.C_VALUE				ErtekelesOsztalyzat
			,tanuloErtekeles.C_ERTEKELESSZOVEG			ErtekelesSzoveg
			,tanuloErtekeles.C_ERTEKELESSZOVEGROVIDNEV	ErtekelesSzovegRovidNev
			,tanuloErtekeles.C_ERTEKELESSZAZALEK		ErtekelesSzazalek
			,NULL										MagatartasOsztalyzat
  			,NULL										MagatartasSzoveg	
  			,NULL										MagatartasSzovegRovidNev
  			,NULL										MagatartasErtek
  			,NULL										SzorgalomOsztalyzat
  			,NULL										SzorgalomSzoveg	
  			,NULL										SzorgalomSzovegRovidNev
  			,NULL										SzorgalomErtek	
			,tanariAtlagSuly.C_SULY						Suly
			,tantargy.ID								TantargyId
			,tantargyKategoria.C_ORDER					TantargyKategoria
			,tantargy.C_FOTARGYID						FotargyId
		FROM 
			@Tantargyak AS tantargy
			LEFT JOIN 
				T_TANULOERTEKELES tanuloErtekeles ON  
						tanuloErtekeles.C_TANULOID = @pTanuloId 
					AND tanuloErtekeles.TOROLT = 'F'
					AND tanuloErtekeles.C_ISMAGATARTASSZORGALOM = 'F'
					AND tanuloErtekeles.C_TANTARGYID = tantargy.ID 
			LEFT JOIN @TempDictionaryItem AS ertekelesOsztalyzat ON ertekelesOsztalyzat.ID = tanuloErtekeles.C_ERTEKELESOSZTALYZATID
			LEFT JOIN @TempDictionaryItem AS tantargyKategoria ON tantargyKategoria.ID = tantargy.C_TARGYKATEGORIA
			LEFT JOIN 
				T_TANARIATLAGSULY tanariAtlagSuly ON  
						tanariAtlagSuly.C_ERTEKELESMODID = tanuloErtekeles.C_ERTEKELESMODID 
					AND tanuloErtekeles.C_ERTEKELESOSZTALYZATID IS NOT NULL
					AND tanariAtlagSuly.TOROLT = 'F'
    ) AS temp  
   
	IF @pFotargyAltargyId IS NULL BEGIN	

		DECLARE @MagatartasSzorgalom TABLE (
			C_NEV	NVARCHAR(255)
		);

		INSERT INTO @MagatartasSzorgalom (C_NEV) 
		SELECT 'Magatartás/Szorgalom'
  
   		INSERT INTO @TempTanuloErtekeles (
  			 ID	
  			,Datum	
  			,TipusId
  			,Honap
  			,TanuloId
  			,Nev
  			,ErtekelesOsztalyzat
  			,ErtekelesSzoveg
  			,ErtekelesSzovegRovidNev
  			,ErtekelesSzazalek
  			,MagatartasOsztalyzat
  			,MagatartasSzoveg	
  			,MagatartasSzovegRovidNev
  			,MagatartasErtek
  			,SzorgalomOsztalyzat
  			,SzorgalomSzoveg	
  			,SzorgalomSzovegRovidNev
  			,SzorgalomErtek	
  			,Suly	
  			,TantargyId	
  			,TantargyKategoria
  			,FotargyId
		)	 
  		SELECT DISTINCT
      		 tanuloErtekeles.ID							ID
  			,tanuloErtekeles.C_DATUM					Datum
  			,tanuloErtekeles.C_TIPUSID					TipusId
  			,CASE WHEN tanuloErtekeles.C_TIPUSID = @pErtekelesTipusFelevi 
  					THEN 'I'
  				WHEN tanuloErtekeles.C_TIPUSID = @pErtekelesTipusEvvegi 
  					THEN 'II'
  				ELSE					
  					CASE 
  						WHEN CAST(tanuloErtekeles.C_DATUM AS DATE) > @pFelevVegeDatum
  							THEN CAST(MONTH(tanuloErtekeles.C_DATUM) + 1 AS NVARCHAR(2))
  							ELSE CAST(MONTH(tanuloErtekeles.C_DATUM) AS NVARCHAR(2))
  					END 
  				END										Honap
  			,tanuloErtekeles.C_TANULOID					TanuloId
  			,magatartasSzorgalom.C_NEV					Nev
  			,NULL										ErtekelesOsztalyzat
  			,NULL										ErtekelesSzoveg
  			,NULL										ErtekelesSzovegRovidNev
  			,NULL										ErtekelesSzazalek
  			,magatartasOsztalyzat.C_VALUE				MagatartasOsztalyzat
    		,tanuloErtekeles.C_MAGATARTASSZOVEG			MagatartasSzoveg	
    		,tanuloErtekeles.C_MAGATARTASSZOVEGROVIDNEV	MagatartasSzovegRovidNev
    		,magatartasErtek.C_VALUE					MagatartasErtek
    		,szorgalomOsztalyzat.C_VALUE				SzorgalomOsztalyzat
    		,tanuloErtekeles.C_SZORGALOMSZOVEG			SzorgalomSzoveg	
    		,tanuloErtekeles.C_SZORGALOMSZOVEGROVIDNEV	SzorgalomSzovegRovidNev
    		,szorgalomErtek.C_VALUE						SzorgalomErtek	
			,100										Suly
  			,0 AS TantargyId
  			,0 AS TantargyKategoria
  			,NULL AS FotargyId    
		FROM 
			@MagatartasSzorgalom magatartasSzorgalom
			LEFT JOIN 
				T_TANULOERTEKELES tanuloErtekeles ON  
						tanuloErtekeles.C_TANULOID = @pTanuloId 
					AND tanuloErtekeles.TOROLT = 'F'
					AND tanuloErtekeles.C_ISMAGATARTASSZORGALOM = 'T'
					AND tanuloErtekeles.C_TANTARGYID IS NULL 
  			LEFT JOIN @TempDictionaryItem AS magatartasOsztalyzat ON magatartasOsztalyzat.ID = tanuloErtekeles.C_MAGATARTASOSZTALYZATID
  			LEFT JOIN @TempDictionaryItem AS szorgalomOsztalyzat ON szorgalomOsztalyzat.ID = tanuloErtekeles.C_SZORGALOMOSZTALYZATID
  			LEFT JOIN @TempDictionaryItem AS magatartasErtek ON magatartasErtek.ID = tanuloErtekeles.C_MAGATARTASERTEKID
  			LEFT JOIN @TempDictionaryItem AS szorgalomErtek ON szorgalomErtek.ID = tanuloErtekeles.C_SZORGALOMERTEKID
	END  

	SELECT
		 result.ID
		,Nev
		,[09]
		,[10]
		,[11]
		,[12]
		,[01I]
		,[01II]
		,[02]
		,[03]
		,[04]
		,[05] 
		,[06]
		,[I]
		,[II]
		,Atlag
		,TantargyKategoria
		,FotargyId
	FROM (
		SELECT 
			 pivotErtekelesek.TantargyId		ID
			,Nev								Nev
			,[9]								[09]
			,[10]								[10]
			,[11]								[11]
			,[12]								[12]
			,[1]								[01I]
			,[2]								[01II]
			,[3]								[02]
			,[4]								[03]
			,[5]								[04]
			,[6]								[05]
			,[7]								[06]
			,[I]								[I]
			,[II]								[II]
			,atlag.Jegy							Atlag
			,pivotErtekelesek.TantargyKategoria	TantargyKategoria
			,pivotErtekelesek.FotargyId			FotargyId
		FROM (
			SELECT DISTINCT
				 tempErtekeles1.Nev
				,STUFF (
					(SELECT 
						','
						+ ISNULL(CAST(tempErtekeles2.ErtekelesOsztalyzat AS VARCHAR(1)), '')
						+ ISNULL(CAST(
							CASE
								WHEN tempErtekeles2.ErtekelesSzoveg IS NULL OR LTRIM(RTRIM(REPLACE(REPLACE(REPLACE(tempErtekeles2.ErtekelesSzoveg, CHAR(9), ''), CHAR(10), ''), CHAR(13), ''))) = ''
									THEN NULL 
								ELSE
									ISNULL(tempErtekeles2.ErtekelesSzovegRovidNev, 'sz')
							END AS VARCHAR(3)), '')
						+ ISNULL(CAST(tempErtekeles2.ErtekelesSzazalek AS VARCHAR(3)), '')
						+ ISNULL(CAST(tempErtekeles2.MagatartasOsztalyzat AS VARCHAR(1)), '') + ','
						+ ISNULL(CAST(tempErtekeles2.SzorgalomOsztalyzat AS VARCHAR(1)), '')
						+ ISNULL(CAST(
							CASE
								WHEN tempErtekeles2.MagatartasSzoveg IS NULL OR LTRIM(RTRIM(REPLACE(REPLACE(REPLACE(tempErtekeles2.MagatartasSzoveg, CHAR(9), ''), CHAR(10), ''), CHAR(13), ''))) = ''
									THEN NULL
								ELSE
									ISNULL(tempErtekeles2.MagatartasSzovegRovidNev, 'sz')
							END AS VARCHAR(3)), '') + ','
						+  ISNULL(CAST(
							CASE
								WHEN tempErtekeles2.SzorgalomSzoveg IS NULL OR LTRIM(RTRIM(REPLACE(REPLACE(REPLACE(tempErtekeles2.SzorgalomSzoveg, CHAR(9), ''), CHAR(10), ''), CHAR(13), ''))) = ''
									THEN NULL
								ELSE
									ISNULL(tempErtekeles2.SzorgalomSzovegRovidNev, 'sz')
							END AS VARCHAR(3)), '')
						+ ISNULL(CAST(tempErtekeles2.MagatartasErtek AS VARCHAR(1)), '') + ','
						+ ISNULL(CAST(tempErtekeles2.SzorgalomErtek AS VARCHAR(1)), '')
					FROM @TempTanuloErtekeles tempErtekeles2
					WHERE tempErtekeles1.TantargyId = tempErtekeles2.TantargyId
						AND tempErtekeles1.Honap = tempErtekeles2.Honap
					FOR XML PATH ('')
					), 1, 1, ''
				) TanuloErtekelesList
				,tempErtekeles1.Honap
				,tempErtekeles1.TanuloId
				,tempErtekeles1.TantargyId
				,tempErtekeles1.TantargyKategoria
				,tempErtekeles1.FotargyId
			FROM @TempTanuloErtekeles tempErtekeles1
		) AS erdemjegyek
		PIVOT (
			MAX(TanuloErtekelesList) 
			FOR Honap 
			IN ([I], [II], [9] ,[10] ,[11] ,[12] ,[1] ,[2] ,[3] ,[4] ,[5] ,[6], [7])
		) AS pivotErtekelesek         
			LEFT JOIN (
				SELECT 
					 TantargyId		TantargyId
					,ROUND (
						SUM(CAST(ErtekelesOsztalyzat AS FLOAT) * CAST(ISNULL(Suly, 100) AS FLOAT) / 100) / SUM(CAST(ISNULL(Suly, 100) AS FLOAT) / 100), 2
					 )				Jegy
				FROM
					@TempTanuloErtekeles
				WHERE
						TipusId = @pErtekelesTipusEvkozi
					AND ErtekelesOsztalyzat IS NOT NULL
				GROUP BY 
					TantargyId
			) AS atlag ON
				pivotErtekelesek.TantargyId = atlag.TantargyId
	) AS result
	LEFT JOIN 
		T_TANTARGY fotargy ON 
		result.FotargyId = fotargy.ID
	LEFT JOIN @TempDictionaryItem targykategoria 
			ON	targykategoria.ID = fotargy.C_TARGYKATEGORIA 
			AND targykategoria.C_INTEZMENYID = fotargy.C_INTEZMENYID 
			AND targykategoria.C_TANEVID = fotargy.C_TANEVID
	ORDER BY 
		 CASE WHEN result.FotargyId IS NULL THEN ISNULL(result.TantargyKategoria, 10000) ELSE ISNULL(targykategoria.C_ORDER, 10000) END
		,ISNULL(fotargy.C_NEV, result.Nev)
		,ISNULL(result.FotargyId, result.ID)
		,result.FotargyId
		,result.Nev
	
END


GO

