﻿-- =============================================
-- Description:	<Előszedjük a tanuló értékeléseket főtárgy/altárgy alapján>
-- =============================================
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

DROP PROCEDURE IF EXISTS [dbo].[uspGetTanuloErtekelesDataSetByFotargyAltargy]
GO

CREATE PROCEDURE [dbo].[uspGetTanuloErtekelesDataSetByFotargyAltargy]
	 @pIntezmenyId			INT
	,@pTanevId				INT
	,@pTanarId				INT
	,@pTanuloId				INT
	,@pFotargyAltargyId		INT
	,@pDatum				DATE = NULL
	,@pFeladatKategoriaId	INT
AS
BEGIN

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

	IF @pDatum IS NULL
		SET @pDatum = CONVERT(DATE, GETDATE())
	
	SELECT TOP (1)
		@evfolyamTipusId = tanuloOsztaly.EvfolyamTipusId
	FROM 
		fnGetTanuloOsztaly(@pTanuloId, @pDatum, @pFeladatKategoriaId, 1) tanuloOsztaly
	ORDER BY 
		tanuloOsztaly.BelepesDatuma DESC

	CREATE TABLE #KapcsopodoTantargyak(
  		 ID					INT
		,C_FOTARGYID		INT
		,C_NEV				NVARCHAR(255)
		,C_TARGYKATEGORIA 	INT
		,C_INTEZMENYID	 	INT
		,C_TANEVID 			INT
	)
	INSERT INTO
		#KapcsopodoTantargyak
	SELECT
		 ID
		,C_FOTARGYID
		,C_NEV
		,C_TARGYKATEGORIA
		,C_INTEZMENYID
		,C_TANEVID
	FROM
		fnGetKapcsolodoTantargyak(@pIntezmenyId, @pTanevId, @pFotargyAltargyId)
	
	CREATE TABLE #OsztalyCsoportIdList(
  		 ID	INT PRIMARY KEY
	)
	INSERT INTO 
		#OsztalyCsoportIdList (ID)
  	SELECT
		OsztalyCsoport.ID
	FROM 
		T_TANULOCSOPORT_OSSZES TanuloCsoport
	INNER JOIN
		T_OSZTALYCSOPORT_OSSZES OsztalyCsoport ON
				OsztalyCsoport.C_INTEZMENYID	= TanuloCsoport.C_INTEZMENYID
			AND OsztalyCsoport.C_TANEVID		= TanuloCsoport.C_TANEVID
			AND OsztalyCsoport.TOROLT			= 'F'
			AND OsztalyCsoport.ID				= TanuloCsoport.C_OSZTALYCSOPORTID
	WHERE 
			TanuloCsoport.C_INTEZMENYID			= @pIntezmenyId
		AND TanuloCsoport.C_TANEVID				= @pTanevId
		AND TanuloCsoport.TOROLT				= 'F'
		AND TanuloCsoport.C_TANULOID			= @pTanuloId
		AND	TanuloCsoport.C_BELEPESDATUM <= GETDATE()
		AND (TanuloCsoport.C_KILEPESDATUM IS NULL OR TanuloCsoport.C_KILEPESDATUM >= GETDATE())

	CREATE TABLE #Tantargyak(
  		 ID					INT
		,C_FOTARGYID		INT
		,C_NEV				NVARCHAR(255)
		,C_TARGYKATEGORIA 	INT
		,C_INTEZMENYID	 	INT
		,C_TANEVID 			INT
	);			
	WITH tantargy_CTE (C_TANTARGYID, C_FOTARGYID, C_INTEZMENYID, C_TANEVID)  
	AS (  
		SELECT DISTINCT
			Foglalkozas.C_TANTARGYID,
			Tantargy.C_FOTARGYID,
			Tantargy.C_INTEZMENYID,
			Tantargy.C_TANEVID
		FROM
			T_FOGLALKOZAS_OSSZES Foglalkozas
		INNER JOIN
			T_TANTARGY_OSSZES Tantargy ON
				Tantargy.C_INTEZMENYID			= Foglalkozas.C_INTEZMENYID
			AND Tantargy.C_TANEVID				= Foglalkozas.C_TANEVID
			AND Tantargy.TOROLT					= 'F'
			AND	Tantargy.ID						= Foglalkozas.C_TANTARGYID 
		INNER JOIN
			#OsztalyCsoportIdList OsztalyCsoport ON 
				OsztalyCsoport.ID = Foglalkozas.C_OSZTALYCSOPORTID
		WHERE 
				Foglalkozas.C_INTEZMENYID		= @pIntezmenyId
			AND Foglalkozas.C_TANEVID			= @pTanevId
			AND Foglalkozas.TOROLT				= 'F'

		UNION

		SELECT DISTINCT
			OrarendiOra.C_TANTARGYID,
			Tantargy.C_FOTARGYID,
			Tantargy.C_INTEZMENYID,
			Tantargy.C_TANEVID
		FROM 
			T_ORARENDIORA_OSSZES OrarendiOra
		INNER JOIN
			T_TANTARGY_OSSZES Tantargy ON
				Tantargy.C_INTEZMENYID			= OrarendiOra.C_INTEZMENYID
			AND Tantargy.C_TANEVID				= OrarendiOra.C_TANEVID
			AND Tantargy.TOROLT					= 'F'
			AND	Tantargy.ID						= OrarendiOra.C_TANTARGYID			
		INNER JOIN
			#OsztalyCsoportIdList OsztalyCsoport ON 
				OsztalyCsoport.ID = OrarendiOra.C_OSZTALYCSOPORTID
		WHERE
				OrarendiOra.C_INTEZMENYID		= @pIntezmenyId
			AND OrarendiOra.C_TANEVID			= @pTanevId
			AND OrarendiOra.TOROLT				= 'F'

		UNION

		SELECT DISTINCT
			TanuloErtekeles.C_TANTARGYID,
			Tantargy.C_FOTARGYID,
			Tantargy.C_INTEZMENYID,
			Tantargy.C_TANEVID
		FROM 
			T_TANULOERTEKELES_OSSZES TanuloErtekeles
		INNER JOIN
			T_TANTARGY_OSSZES Tantargy ON 
				Tantargy.C_INTEZMENYID			= TanuloErtekeles.C_INTEZMENYID
			AND Tantargy.C_TANEVID				= TanuloErtekeles.C_TANEVID
			AND Tantargy.TOROLT					= 'F'
			AND	Tantargy.ID						= TanuloErtekeles.C_TANTARGYID 
		INNER JOIN 
			T_OSZTALYCSOPORT_OSSZES Osztaly ON
					Osztaly.C_INTEZMENYID		= TanuloErtekeles.C_INTEZMENYID
				AND Osztaly.C_TANEVID			= TanuloErtekeles.C_TANEVID
				AND	Osztaly.TOROLT				= 'F'
				AND	Osztaly.ID					= TanuloErtekeles.C_ROGZITESKORITANULOOSZTALYID
				AND Osztaly.C_EVFOLYAMTIPUSA	= @evfolyamTipusId
		WHERE 
				TanuloErtekeles.C_INTEZMENYID	= @pIntezmenyId
			AND TanuloErtekeles.C_TANEVID		= @pTanevId
			AND TanuloErtekeles.TOROLT			= 'F'
			AND	TanuloErtekeles.C_TANULOID		= @pTanuloId
			AND TanuloErtekeles.C_TANTARGYID IS NOT NULL

		UNION ALL
		--NOTE: ami-s értékelések miatt, ott nincs mentve C_ROGZITESKORITANULOOSZTALYID
		SELECT DISTINCT
			TanuloErtekeles.C_TANTARGYID,
			Tantargy.C_FOTARGYID,
			Tantargy.C_INTEZMENYID,
			Tantargy.C_TANEVID
		FROM 
			T_TANULOERTEKELES_OSSZES TanuloErtekeles
		INNER JOIN
			T_TANTARGY_OSSZES Tantargy ON 
				Tantargy.C_INTEZMENYID			= TanuloErtekeles.C_INTEZMENYID
			AND Tantargy.C_TANEVID				= TanuloErtekeles.C_TANEVID
			AND Tantargy.TOROLT					= 'F'
			AND	Tantargy.ID						= TanuloErtekeles.C_TANTARGYID 
		WHERE 
				TanuloErtekeles.C_INTEZMENYID	= @pIntezmenyId
			AND TanuloErtekeles.C_TANEVID		= @pTanevId
			AND TanuloErtekeles.TOROLT			= 'F'
			AND	TanuloErtekeles.C_TANULOID		= @pTanuloId
			AND TanuloErtekeles.C_TANTARGYID IS NOT NULL
			AND TanuloErtekeles.C_ROGZITESKORITANULOOSZTALYID IS NULL
	)  
	INSERT INTO 
		#Tantargyak (ID, C_FOTARGYID, C_NEV, C_TARGYKATEGORIA, C_INTEZMENYID, C_TANEVID)
	SELECT DISTINCT
		KapcsopodoTantargy.ID,
		KapcsopodoTantargy.C_FOTARGYID,
		KapcsopodoTantargy.C_NEV,
		KapcsopodoTantargy.C_TARGYKATEGORIA,
		KapcsopodoTantargy.C_INTEZMENYID,
		KapcsopodoTantargy.C_TANEVID
	FROM 
		tantargy_CTE
	INNER JOIN
		#KapcsopodoTantargyak KapcsopodoTantargy ON
				tantargy_CTE.C_TANTARGYID = KapcsopodoTantargy.ID 
			 OR tantargy_CTE.C_FOTARGYID = KapcsopodoTantargy.ID
	WHERE 
		(KapcsopodoTantargy.ID <> @pFotargyAltargyId)

	SELECT
		 @pTanuloId																TanuloId
		,Tantargy.ID															TantargyId

		,Tantargy.C_NEV															TantargyNev

		,TanuloErtekeles.ID														ID
		,TanuloErtekeles.C_DATUM												Datum
		,TanuloErtekeles.C_ROGZITESDATUM										RogzitesDatum
		,TanuloErtekeles.C_TIPUSID												TipusId
		,FelhasznaloErtekelo.C_NYOMTATASINEV									ErtekeloNyomtatasiNev
		,IIF(TanuloErtekeles.ID IS NULL,										--
				NULL,															--
				CASE															--
					WHEN TanuloErtekeles.C_ERTEKELOID = @pTanarId				--
						THEN 'T'												--
						ELSE 'F'												--
				END																--
		)																		Modosithato
		,TanuloErtekeles.CREATED												Created
		,TanuloErtekeles.C_ISMAGATARTASSZORGALOM								IsMagatartasSzorgalom
		,TanuloErtekeles.C_ISERTESITESELKULDVE									IsErtesitesElkuldve

		,TanuloErtekeles.C_ERTEKELESOSZTALYZATID								ErtekelesOsztalyzatId
		,TanariAtlagSuly.C_SULY													Suly
		,TanuloErtekeles.C_ERTEKELESSZOVEG										ErtekelesSzoveg
		,TanuloErtekeles.C_ERTEKELESSZOVEGROVIDNEV								ErtekelesSzovegRovidNev
		,TanuloErtekeles.C_ERTEKELESSZAZALEK									ErtekelesSzazalek
		,TanuloErtekeles.C_ERTEKELESMODID										ErtekelesModId
		,TanuloErtekeles.C_ERTEKELESTEMA										ErtekelesTema

		,Tantargy.C_TARGYKATEGORIA												TantargyKategoriaId
		,Fotargy.ID																FotargyId
		,Fotargy.C_NEV															FotargyNev
		,Fotargy.C_TARGYKATEGORIA												FotargyTantargyKategoriaId
	FROM
		#Tantargyak Tantargy
	LEFT JOIN(
		SELECT
			TanuloErtekeles.*
		FROM
			T_TANULOERTEKELES_OSSZES TanuloErtekeles
		INNER JOIN
			T_OSZTALYCSOPORT_OSSZES Osztaly ON
					Osztaly.C_INTEZMENYID				= TanuloErtekeles.C_INTEZMENYID
				AND Osztaly.C_TANEVID					= TanuloErtekeles.C_TANEVID
				AND Osztaly.TOROLT						= 'F'
				AND Osztaly.ID							= TanuloErtekeles.C_ROGZITESKORITANULOOSZTALYID
				AND	Osztaly.C_EVFOLYAMTIPUSA			= @evfolyamTipusId
				AND Osztaly.C_FELADATKATEGORIAID		= @pFeladatKategoriaId
		WHERE
				TanuloErtekeles.C_INTEZMENYID			= @pIntezmenyId
			AND TanuloErtekeles.C_TANEVID				= @pTanevId
			AND TanuloErtekeles.TOROLT					= 'F'
			AND TanuloErtekeles.C_TANULOID				= @pTanuloId
			AND TanuloErtekeles.C_ROGZITESKORITANULOOSZTALYID IS NOT NULL
			AND TanuloErtekeles.C_ISMAGATARTASSZORGALOM = 'F'

		UNION ALL

		--NOTE: AMI-s értékelések miatt! Ott nincs mentve C_ROGZITESKORITANULOOSZTALYID
		SELECT
			TanuloErtekeles.*
		FROM
			T_TANULOERTEKELES_OSSZES TanuloErtekeles
        INNER JOIN 
			T_OSZTALYCSOPORT_OSSZES Osztaly ON				
					Osztaly.C_INTEZMENYID				= TanuloErtekeles.C_INTEZMENYID
				AND Osztaly.C_TANEVID					= TanuloErtekeles.C_TANEVID
				AND Osztaly.TOROLT						= 'F'
				AND Osztaly.ID							= TanuloErtekeles.C_OSZTALYCSOPORTID
				AND Osztaly.C_FELADATKATEGORIAID		= @pFeladatKategoriaId
		WHERE
				TanuloErtekeles.C_INTEZMENYID			= @pIntezmenyId
			AND TanuloErtekeles.C_TANEVID				= @pTanevId
			AND TanuloErtekeles.TOROLT					= 'F'
			AND TanuloErtekeles.C_TANULOID				= @pTanuloId
			AND TanuloErtekeles.C_ROGZITESKORITANULOOSZTALYID IS NULL
			AND TanuloErtekeles.C_ISMAGATARTASSZORGALOM = 'F'
	) AS TanuloErtekeles ON
		TanuloErtekeles.C_TANTARGYID = Tantargy.ID
	LEFT JOIN
		T_FELHASZNALO_OSSZES FelhasznaloErtekelo ON
				FelhasznaloErtekelo.C_INTEZMENYID		= Tantargy.C_INTEZMENYID
			AND FelhasznaloErtekelo.C_TANEVID			= Tantargy.C_TANEVID
			AND FelhasznaloErtekelo.TOROLT				= 'F'
			AND FelhasznaloErtekelo.ID					= TanuloErtekeles.C_ERTEKELOID
	LEFT JOIN
		T_TANARIATLAGSULY_OSSZES TanariAtlagSuly ON
				TanariAtlagSuly.C_INTEZMENYID			= Tantargy.C_INTEZMENYID
			AND TanariAtlagSuly.C_TANEVID				= Tantargy.C_TANEVID
			AND TanariAtlagSuly.TOROLT					= 'F'
			AND	TanariAtlagSuly.C_ERTEKELESMODID		= TanuloErtekeles.C_ERTEKELESMODID
			AND TanuloErtekeles.C_ISMAGATARTASSZORGALOM = 'F'
			AND TanuloErtekeles.C_ERTEKELESOSZTALYZATID IS NOT NULL
	LEFT JOIN 
		T_TANTARGY_OSSZES Fotargy ON 
				Fotargy.C_INTEZMENYID					= Tantargy.C_INTEZMENYID
			AND Fotargy.C_TANEVID						= Tantargy.C_TANEVID
			AND Fotargy.TOROLT							= 'F'
			AND Fotargy.ID								= Tantargy.C_FOTARGYID

END


GO

