﻿SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

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

-- =============================================
-- Description:	<Előszedi a magatartás/szorgalom tanuló értékeléseket, havi bontásban 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_GenerateMagatartasSzorgalomTempTabla]
	 @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', 'MagatartasErtekelesTipus', 'SzorgalomErtekelesTipus')
		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)
		,MagatartasOsztalyzat		INT
		,MagatartasSzoveg			NVARCHAR(MAX)
		,MagatartasSzovegRovidNev	NVARCHAR(3)
		,MagatartasErtek			INT
		,SzorgalomOsztalyzat		INT
		,SzorgalomSzoveg			NVARCHAR(MAX)
		,SzorgalomSzovegRovidNev	NVARCHAR(3)
		,SzorgalomErtek				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		
			,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
		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_MAGATARTASOSZTALYZATID
					,TanuloErtekeles.C_MAGATARTASSZOVEG
					,TanuloErtekeles.C_MAGATARTASSZOVEGROVIDNEV
					,TanuloErtekeles.C_MAGATARTASERTEKID
					,TanuloErtekeles.C_SZORGALOMOSZTALYZATID
					,TanuloErtekeles.C_SZORGALOMSZOVEG
					,TanuloErtekeles.C_SZORGALOMSZOVEGROVIDNEV
					,TanuloErtekeles.C_SZORGALOMERTEKID
				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 IS NULL
			) AS tanuloErtekeles ON
				tanuloErtekeles.C_TANULOID = tanuloCsoport.C_TANULOID
  			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
    ) AS temp

	SELECT *
    FROM (
		SELECT 
			 pivotErtekelesek.TanuloId			ID
			,pivotErtekelesek.TanuloId			TanuloId
			,TanuloNev							TanuloNev
			,AnyjaNeve							AnyjaNeve
			,SzuletesiIdo						SzuletesiIdo
			,OsztalyNev							OsztalyNev
			,NULL								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]
			,NULL								Atlag
		FROM (
			SELECT DISTINCT
				 tempErtekeles1.TanuloId
				,tempErtekeles1.TanuloNev
				,tempErtekeles1.AnyjaNeve
				,tempErtekeles1.SzuletesiIdo
				,tempErtekeles1.OsztalyNev
				,tempErtekeles1.Honap
				,STUFF (
					(SELECT 
						','
						+ 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.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
	) AS result
	ORDER BY
		result.TanuloNev
		
END


GO


