﻿SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

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

-- =============================================
-- Description:	<Előszedi a tanuló értékeléseket, havi bontásban tantárgy és osztálycsoport 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_GenerateErtekelesekTempTabla]
	 @pTantargyId				INT
	,@pOsztalyCsoportId			INT
	,@pFelevVegeDatum			DATE
	,@pErtekelesTipusEvkozi		INT
	,@pErtekelesTipusFelevi		INT
	,@pErtekelesTipusEvvegi		INT
	,@pDatum					DATE = NULL
AS
BEGIN

	-- SET NOCOUNT ON added to prevent extra result sets from interfering with SELECT statements.
	SET NOCOUNT ON;
	
	IF @pDatum IS NULL
		SET @pDatum = GETDATE()

	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')
		AND TOROLT = 'F'

	DECLARE @TempTanuloErtekeles TABLE (
		 ID							INT
		,Datum						NVARCHAR(255)
		,TipusId					INT
		,TanuloId					INT
		,TanuloNev					NVARCHAR(255)
		,AnyjaNeve					NVARCHAR(255)
		,SzuletesiIdo				DATE
		,OsztalyNev					NVARCHAR(255)
		,Honap						NVARCHAR(2)
		,ErtekelesOsztalyzat		INT
		,ErtekelesSzoveg			NVARCHAR(MAX)
		,ErtekelesSzovegRovidNev	NVARCHAR(3)
		,ErtekelesSzazalek			INT
		,Suly						INT
	)

	INSERT INTO @TempTanuloErtekeles
	SELECT DISTINCT *
    FROM (
		SELECT DISTINCT
    		 tanuloErtekeles.ID							ID
			,tanuloErtekeles.C_DATUM					Datum
			,tanuloErtekeles.C_TIPUSID					TipusId
			,tanuloCsoport.C_TANULOID					TanuloId
			,felhasznalo.C_NYOMTATASINEV				TanuloNev
			,felhasznalo.C_ANYJANEVE					AnyjaNeve
			,felhasznalo.C_SZULETESIDATUM				SzuletesiIdo	
			,osztalyCsoport.C_NEV						OsztalyNev		
			,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
			,ertekelesOsztalyzat.C_VALUE				ErtekelesOsztalyzat
			,tanuloErtekeles.C_ERTEKELESSZOVEG			ErtekelesSzoveg
			,tanuloErtekeles.C_ERTEKELESSZOVEGROVIDNEV	ErtekelesSzovegRovidNev
			,tanuloErtekeles.C_ERTEKELESSZAZALEK		ErtekelesSzazalek
			,tanariAtlagSuly.C_SULY						Suly
		FROM (
			SELECT
				 C_TANULOID
				,C_OSZTALYCSOPORTID
			FROM
				T_TANULOCSOPORT
			WHERE
					TOROLT = 'F'
				AND C_BELEPESDATUM <= @pDatum
				AND (C_KILEPESDATUM IS NULL OR C_KILEPESDATUM >= @pDatum)
				AND C_OSZTALYCSOPORTID = @pOsztalyCsoportId
			) AS tanuloCsoport
			INNER JOIN (
				SELECT 
					 ID
					,C_NYOMTATASINEV
					,C_ANYJANEVE
					,C_SZULETESIDATUM
				FROM 
					T_FELHASZNALO
				WHERE 
					TOROLT = 'F' 
			) AS felhasznalo ON 
				felhasznalo.ID = tanuloCsoport.C_TANULOID
			LEFT JOIN 
				T_OSZTALYCSOPORT osztalyCsoport ON
						osztalyCsoport.ID = tanuloCsoport.C_OSZTALYCSOPORTID 
					AND osztalyCsoport.TOROLT = 'F'
			LEFT JOIN (
				SELECT
					 TanuloErtekeles.ID
					,TanuloErtekeles.C_DATUM
					,TanuloErtekeles.C_TIPUSID
					,TanuloErtekeles.C_TANULOID
					,TanuloErtekeles.C_ERTEKELESOSZTALYZATID
					,TanuloErtekeles.C_ERTEKELESSZOVEG
					,TanuloErtekeles.C_ERTEKELESSZOVEGROVIDNEV
					,TanuloErtekeles.C_ERTEKELESSZAZALEK
					,TanuloErtekeles.C_ERTEKELESMODID
				FROM
					T_TANULOERTEKELES TanuloErtekeles
			INNER JOIN T_OSZTALYCSOPORT Osztaly ON
					Osztaly.ID					= TanuloErtekeles.C_ROGZITESKORITANULOOSZTALYID
				AND	Osztaly.TOROLT				= 'F'
				AND Osztaly.C_EVFOLYAMTIPUSA	= (SELECT EvfolyamTipusId FROM dbo.fnGetTanuloOsztaly(TanuloErtekeles.C_TANULOID))
				WHERE
						TanuloErtekeles.TOROLT = 'F' 
					AND TanuloErtekeles.C_TANTARGYID = @pTantargyId
			) AS tanuloErtekeles ON
				tanuloErtekeles.C_TANULOID = tanuloCsoport.C_TANULOID
			LEFT JOIN @TempDictionaryItem AS ertekelesOsztalyzat ON ertekelesOsztalyzat.ID = tanuloErtekeles.C_ERTEKELESOSZTALYZATID
			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

	SELECT
		 result.*
		,result2.ErtkelesMentesseg
		,result2.SzovegesenErtekelheto
    FROM (
		SELECT 
			 pivotErtekelesek.TanuloId			ID
			,pivotErtekelesek.TanuloId			TanuloId
			,TanuloNev							TanuloNev
			,AnyjaNeve							AnyjaNeve
			,SzuletesiIdo						SzuletesiIdo
			,OsztalyNev							OsztalyNev
			,@pTantargyId						TantargyId
			,[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
		FROM (
			SELECT DISTINCT
				 tempErtekeles1.TanuloId
				,tempErtekeles1.TanuloNev
				,tempErtekeles1.AnyjaNeve
				,tempErtekeles1.SzuletesiIdo
				,tempErtekeles1.OsztalyNev
				,tempErtekeles1.Honap
				,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)), '')
					FROM 
						@TempTanuloErtekeles tempErtekeles2
					WHERE 
						tempErtekeles1.TanuloId = tempErtekeles2.TanuloId AND 
						tempErtekeles1.Honap = tempErtekeles2.Honap
					FOR XML PATH ('')
					), 1, 1, ''
				) TanuloErtekelesList
			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 
					 TanuloId		TanuloId
					,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 
					TanuloId
			) AS atlag ON
				pivotErtekelesek.TanuloId = atlag.TanuloId
	) AS result
		INNER JOIN (
			SELECT DISTINCT
				 felhasznalo.ID								ID
				,felhasznalo.ID								TanuloId
				,tanuloMentesseg.C_ERTEKELESMENTESITES		ErtkelesMentesseg
				,tanuloMentesseg.C_SZOVEGESENERTEKELHETO	SzovegesenErtekelheto
			FROM
				T_TANULOCSOPORT AS tanuloCsoport
			INNER JOIN T_FELHASZNALO felhasznalo ON 
				felhasznalo.ID = tanuloCsoport.C_TANULOID
			LEFT JOIN T_TANULOMENTESSEG tanuloMentesseg ON 
					tanuloMentesseg.C_TANULOID = felhasznalo.ID
				AND tanuloMentesseg.TOROLT = 'F'
				AND tanuloMentesseg.C_TANTARGYID = @pTantargyId
			    AND (tanuloMentesseg.C_KEZDETE IS NULL OR tanuloMentesseg.C_KEZDETE <= @pDatum)
			    AND (tanuloMentesseg.C_VEGE IS NULL OR tanuloMentesseg.C_VEGE >= @pDatum)
			WHERE 
					tanuloCsoport.TOROLT = 'F'
				AND tanuloCsoport.C_OSZTALYCSOPORTID = @pOsztalyCsoportId
				AND tanuloCsoport.C_BELEPESDATUM <= @pDatum
				AND (tanuloCsoport.C_KILEPESDATUM IS NULL OR tanuloCsoport.C_KILEPESDATUM >= @pDatum)
		) AS result2 ON
			result2.TanuloId = result.TanuloId
	ORDER BY
		result.TanuloNev
		
END


GO


