﻿-- =============================================
-- Description:	<Előszedjük a tanuló értékeléseket a megadott paraméterek alapján>
-- =============================================
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

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

CREATE PROCEDURE [dbo].[uspGetTanuloErtekelesListDataSet]
	 @pTanevId			INT
	,@pTanuloId			INT				= NULL
	,@pOsztalyCsoportId	INT				= NULL
	,@pCsoportTipusId	INT				= NULL
	,@pTantargyId		INT				= NULL
	,@pErtekeloId		INT				= NULL
	,@pOsztalyzatId		INT				= NULL
	,@pErtekelesModId	INT				= NULL
	,@pTipusId			INT				= NULL
	,@pDatumTol			DATETIME		= NULL
	,@pDatumIg			DATETIME		= NULL
	,@pRogzitesDatumTol	DATETIME		= NULL
	,@pRogzitesDatumIg	DATETIME		= NULL
	,@pErtekelesSzoveg	NVARCHAR(MAX)	= NULL
	,@pErtekelesTema	NVARCHAR(255)	= NULL
AS
BEGIN

	-- SET NOCOUNT ON added to prevent extra result sets frominterfering with SELECT statements.
	SET NOCOUNT ON;
	
	--NOTE: A végén lévő konkatenálás miatt kell mindenova NVARCHAR(MAX). Ha 4000-eket használunk elszáll!
	DECLARE 
		 @sql			NVARCHAR(MAX)
		,@preSelectSql	NVARCHAR(MAX)	= ''
		,@selectSql		NVARCHAR(MAX)
		,@joinSql		NVARCHAR(MAX)
		,@whereSql		NVARCHAR(MAX)
		,@postSelectSql	NVARCHAR(MAX)	= ''

	SET @selectSql = N'
		SELECT DISTINCT
			 tanuloErtekeles.ID																ID
			,tanuloErtekeles.C_DATUM														Datum
			,tanuloErtekeles.C_ROGZITESDATUM												RogzitesDatum
			,tanuloErtekeles.C_TIPUSID														TipusId
			,tanuloErtekeles.C_ISERTESITESELKULDVE											IsErtesitesElkuldve
			,tanuloErtekeles.C_ERTEKELESMODID												ErtekelesModId
			,tanuloErtekeles.C_ERTEKELESTEMA												ErtekelesTema
			,tanuloErtekeles.C_ERTEKELESOSZTALYZATID										ErtekelesOsztalyzatId
			,tanuloErtekeles.C_ERTEKELESSZOVEG												ErtekelesSzoveg
			,tanuloErtekeles.C_ERTEKELESSZAZALEK											ErtekelesSzazalek
			,tanuloErtekeles.C_ISMAGATARTASSZORGALOM										IsMagatartasSzorgalom
			,tanuloErtekeles.C_MAGATARTASOSZTALYZATID										MagatartasOsztalyzatId
			,tanuloErtekeles.C_MAGATARTASSZOVEG												MagatartasSzoveg
			,tanuloErtekeles.C_MAGATARTASERTEKID											MagatartasErtekId
			,tanuloErtekeles.C_SZORGALOMOSZTALYZATID										SzorgalomOsztalyzatId
			,tanuloErtekeles.C_SZORGALOMSZOVEG												SzorgalomSzoveg
			,tanuloErtekeles.C_SZORGALOMERTEKID												SzorgalomErtekId
			,tanuloErtekeles.CREATED														Created
			,ISNULL(tanariAtlagSuly.C_SULY, 100)											ErtekelesSuly
			,tantargy.ID																	TantargyId
			,ISNULL(tantargy.C_NEV, ''Magatartás/Szorgalom'')								TantargyNev
			,tantargy.C_TARGYKATEGORIA														TantargyKategoriaId
			,fotargy.ID																		FotargyId
			,fotargy.C_NEV																	FotargyNev
			,fotargy.C_TARGYKATEGORIA														FotargyTantargyKategoriaId
			,tanuloFelhasznalo.ID															TanuloId
			,tanuloFelhasznalo.C_NYOMTATASINEV												TanuloNev
			,IIF(tanuloFelhasznalo.C_NEVSORREND = ''T'',									--
				 tanuloFelhasznalo.C_UTONEV + '' '' + tanuloFelhasznalo.C_VEZETEKNEV,		--
				 tanuloFelhasznalo.C_VEZETEKNEV + '' '' + tanuloFelhasznalo.C_UTONEV)		TanuloNevElotagNelkul                       
			,ertekeloFelhasznalo.ID															ErtekeloId
			,ertekeloFelhasznalo.C_NYOMTATASINEV											ErtekeloNyomtatasiNev
			,IIF(ertekeloFelhasznalo.C_NEVSORREND = ''T'',									--
				 ertekeloFelhasznalo.C_UTONEV + '' '' + ertekeloFelhasznalo.C_VEZETEKNEV,	--
				 ertekeloFelhasznalo.C_VEZETEKNEV + '' '' + ertekeloFelhasznalo.C_UTONEV)	ErtekeloNyomtatasiNevElotagNelkul
			,osztalyCsoport.C_NEV															OsztalyCsoportNev
		FROM
			T_TANULOERTEKELES_OSSZES tanuloErtekeles'
		
	SET @joinSql = N'
		LEFT JOIN
			T_TANARIATLAGSULY_OSSZES tanariAtlagSuly ON
					tanariAtlagSuly.C_TANEVID			= tanuloErtekeles.C_TANEVID
				AND tanariAtlagSuly.TOROLT				= ''F''
				AND tanariAtlagSuly.C_ERTEKELESMODID	= tanuloErtekeles.C_ERTEKELESMODID
		LEFT JOIN
			T_TANTARGY_OSSZES tantargy ON
					tantargy.C_TANEVID					= tanuloErtekeles.C_TANEVID
				AND tantargy.TOROLT						= ''F''
				AND tantargy.ID							= tanuloErtekeles.C_TANTARGYID
		LEFT JOIN
			T_TANTARGY_OSSZES fotargy ON
					fotargy.C_TANEVID					= tanuloErtekeles.C_TANEVID
				AND fotargy.TOROLT						= ''F''
				AND fotargy.ID							= tantargy.C_FOTARGYID
		INNER JOIN
			T_FELHASZNALO_OSSZES tanuloFelhasznalo ON
					tanuloFelhasznalo.C_TANEVID			= tanuloErtekeles.C_TANEVID
				AND tanuloFelhasznalo.TOROLT			= ''F''
				AND tanuloFelhasznalo.ID				= tanuloErtekeles.C_TANULOID
		INNER JOIN
			T_FELHASZNALO_OSSZES ertekeloFelhasznalo ON
					ertekeloFelhasznalo.C_TANEVID		= tanuloErtekeles.C_TANEVID
				AND ertekeloFelhasznalo.TOROLT			= ''F''
				AND ertekeloFelhasznalo.ID				= tanuloErtekeles.C_ERTEKELOID
		INNER JOIN
			T_OSZTALYCSOPORT_OSSZES osztalyCsoport ON
					osztalyCsoport.C_TANEVID			= tanuloErtekeles.C_TANEVID
				AND osztalyCsoport.TOROLT				= ''F''
				AND osztalyCsoport.ID					= tanuloErtekeles.C_OSZTALYCSOPORTID
				AND osztalyCsoport.C_FELADATKATEGORIAID	= (SELECT C_DEFAULTFELADATKATEGORIAID FROM T_TANEV_OSSZES WHERE ID = osztalyCsoport.C_TANEVID)'

	SET @whereSql = N'
		WHERE
			    tanuloErtekeles.C_TANEVID = @pTanevId
			AND tanuloErtekeles.TOROLT = ''F'''

	IF @pTanuloId IS NOT NULL
	BEGIN
		SET @whereSql += N'
			AND tanuloErtekeles.C_TANULOID = @pTanuloId'
	END

	IF @pOsztalyCsoportId IS NOT NULL
	BEGIN
		SET @preSelectSql += N'
			CREATE TABLE #OsztalyCsoportIdList(
  				ID	INT PRIMARY KEY
			)
			INSERT INTO
				#OsztalyCsoportIdList (ID)
			SELECT
				ID
			FROM 
				fnGetKapcsolodoOsztalycsoportok(@pOsztalyCsoportId)'

		SET @joinSql += N'
			LEFT JOIN
                T_TANULOCSOPORT_OSSZES tanuloCsoport ON
						tanuloCsoport.C_TANEVID		= tanuloErtekeles.C_TANEVID
                    AND tanuloCsoport.TOROLT		= ''F''
                    AND tanuloCsoport.C_TANULOID	= tanuloFelhasznalo.ID
                    AND tanuloCsoport.C_BELEPESDATUM < GETDATE()
                    AND (tanuloCsoport.C_KILEPESDATUM IS NULL OR tanuloCsoport.C_KILEPESDATUM >= GETDATE())'

		SET @whereSql += N'
			AND osztalyCsoport.ID IN (SELECT ID FROM #OsztalyCsoportIdList)
			AND EXISTS (
				SELECT 1 
				FROM 
					T_TANULOCSOPORT_OSSZES tanuloCsoport
				WHERE 
						tanuloCsoport.C_TANEVID				= tanuloErtekeles.C_TANEVID
					AND tanuloCsoport.TOROLT				= ''F''
					AND tanuloCsoport.C_OSZTALYCSOPORTID	= @pOsztalyCsoportId 
					AND tanuloCsoport.C_TANULOID			= tanuloFelhasznalo.ID
			)'

		SET @postSelectSql += N'
			DROP TABLE IF EXISTS #OsztalyCsoportIdList'
	END

	IF @pCsoportTipusId IS NOT NULL
	BEGIN
		SET @joinSql += N'
			LEFT JOIN
				T_CSOPORT_OSSZES csoport ON
						csoport.C_ALTANEVID					= tanuloErtekeles.C_TANEVID
					AND csoport.TOROLT						= ''F'' 
					AND csoport.ID							= osztalyCsoport.ID'

		SET @whereSql += N'
			AND csoport.C_TIPUSA = @pCsoportTipusId'
	END

	IF @pTantargyId IS NOT NULL
	BEGIN
		SET @whereSql += N'
			AND tantargy.ID = @pTantargyId'
	END

	IF @pErtekeloId IS NOT NULL
	BEGIN
		SET @whereSql += N'
			AND ertekeloFelhasznalo.ID = @pErtekeloId'
	END

	IF @pOsztalyzatId IS NOT NULL
	BEGIN
		SET @whereSql += N'
			AND (tanuloErtekeles.C_ERTEKELESOSZTALYZATID	= @pOsztalyzatId OR
				 tanuloErtekeles.C_MAGATARTASOSZTALYZATID	= @pOsztalyzatId OR
				 tanuloErtekeles.C_SZORGALOMOSZTALYZATID	= @pOsztalyzatId)'
	END

	IF @pErtekelesModId IS NOT NULL
	BEGIN
		SET @whereSql += N'
			AND tanuloErtekeles.C_ERTEKELESMODID = @pErtekelesModId'
	END

	IF @pTipusId IS NOT NULL
	BEGIN
		SET @whereSql += N'
			AND tanuloErtekeles.C_TIPUSID = @pTipusId'
	END

	IF @pDatumTol IS NOT NULL
	BEGIN
		--NOTE: Ide az adott nap 00:00:00 időponttal fog bejönni.
		SET @whereSql += N'
			AND tanuloErtekeles.C_DATUM >= @pDatumTol'
	END

	IF @pDatumIg IS NOT NULL
	BEGIN
		--NOTE: Ide az adott nap 23:59:59 időponttal fog bejönni.
		SET @whereSql += N'
			AND tanuloErtekeles.C_DATUM <= @pDatumIg'
	END

	IF @pRogzitesDatumTol IS NOT NULL
	BEGIN
		--NOTE: Ide az adott nap 00:00:00 időponttal fog bejönni.
		SET @whereSql += N'
			AND tanuloErtekeles.C_ROGZITESDATUM >= @pRogzitesDatumTol'
	END

	IF @pRogzitesDatumIg IS NOT NULL
	BEGIN
		--NOTE: Ide az adott nap 23:59:59 időponttal fog bejönni.
		SET @whereSql += N'
			AND tanuloErtekeles.C_ROGZITESDATUM <= @pRogzitesDatumIg'
	END

	IF @pErtekelesSzoveg IS NOT NULL
	BEGIN
		SET @whereSql += N'
			AND (tanuloErtekeles.C_ERTEKELESSZOVEG  LIKE ''%'' + @pErtekelesSzoveg + ''%'' OR
				 tanuloErtekeles.C_MAGATARTASSZOVEG LIKE ''%'' + @pErtekelesSzoveg + ''%'' OR
				 tanuloErtekeles.C_SZORGALOMSZOVEG  LIKE ''%'' + @pErtekelesSzoveg + ''%'')'
	END

	IF @pErtekelesTema IS NOT NULL
	BEGIN
		SET @whereSql += N'
			AND tanuloErtekeles.C_ERTEKELESTEMA LIKE ''%'' + @pErtekelesTema + ''%'''
	END

	SET @sql = @preSelectSql + @selectSql + @joinSql + @whereSql + @postSelectSql
	
	EXEC sp_executesql @sql, N'
		 @pTanevId			INT
		,@pTanuloId			INT				= NULL
		,@pOsztalyCsoportId	INT				= NULL
		,@pCsoportTipusId	INT				= NULL
		,@pTantargyId		INT				= NULL
		,@pErtekeloId		INT				= NULL
		,@pOsztalyzatId		INT				= NULL
		,@pErtekelesModId	INT				= NULL
		,@pTipusId			INT				= NULL
		,@pDatumTol			DATETIME		= NULL
		,@pDatumIg			DATETIME		= NULL
		,@pRogzitesDatumTol	DATETIME		= NULL
		,@pRogzitesDatumIg	DATETIME		= NULL
		,@pErtekelesSzoveg	NVARCHAR(MAX)	= NULL
		,@pErtekelesTema	NVARCHAR(255)	= NULL'
		,@pTanevId			= @pTanevId
		,@pTanuloId			= @pTanuloId
		,@pOsztalyCsoportId = @pOsztalyCsoportId
		,@pCsoportTipusId	= @pCsoportTipusId
		,@pTantargyId		= @pTantargyId
		,@pErtekeloId		= @pErtekeloId
		,@pOsztalyzatId		= @pOsztalyzatId
		,@pErtekelesModId	= @pErtekelesModId
		,@pTipusId			= @pTipusId
		,@pDatumTol			= @pDatumTol
		,@pDatumIg			= @pDatumIg
		,@pRogzitesDatumTol	= @pRogzitesDatumTol
		,@pRogzitesDatumIg	= @pRogzitesDatumIg
		,@pErtekelesSzoveg	= @pErtekelesSzoveg
		,@pErtekelesTema	= @pErtekelesTema

END


GO

