﻿-- =============================================
-- 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)	= ''
		,@lineBreak		CHAR(2)			= CHAR(13) + CHAR(10)

	SET @selectSql = '
		SELECT DISTINCT
			 tanuloErtekeles.ID																ID
			,tanuloErtekeles.C_DATUM														Datum
			,tanuloErtekeles.C_TIPUSID														TipusId
			,tanuloErtekeles.C_ROGZITESDATUM												RogzitesDatum
			,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
			,tantargy.C_NEV																	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' + @lineBreak
		
	SET @joinSql = '
		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
		LEFT JOIN
			T_FELHASZNALO_OSSZES tanuloFelhasznalo ON
					tanuloFelhasznalo.C_TANEVID			= tanuloErtekeles.C_TANEVID
				AND tanuloFelhasznalo.TOROLT			= ''F''
				AND tanuloFelhasznalo.ID				= tanuloErtekeles.C_TANULOID
		LEFT JOIN
			T_FELHASZNALO_OSSZES ertekeloFelhasznalo ON
					ertekeloFelhasznalo.C_TANEVID		= tanuloErtekeles.C_TANEVID
				AND ertekeloFelhasznalo.TOROLT			= ''F''
				AND ertekeloFelhasznalo.ID				= tanuloErtekeles.C_ERTEKELOID
		LEFT 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)
		LEFT JOIN
			T_CSOPORT_OSSZES csoport ON
					csoport.C_ALTANEVID					= tanuloErtekeles.C_TANEVID
				AND csoport.TOROLT						= ''F'' 
				AND csoport.ID							= osztalyCsoport.ID' + @lineBreak

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

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

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

		SET @joinSql += '
			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())' + @lineBreak

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

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

	IF @pCsoportTipusId IS NOT NULL
	BEGIN
		SET @whereSql += ' AND csoport.C_TIPUSA = @pCsoportTipusId' + @lineBreak
	END

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

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

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

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

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

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

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

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

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

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

	IF @pErtekelesTema IS NOT NULL
	BEGIN
		SET @whereSql += ' AND LOWER(tanuloErtekeles.C_ERTEKELESTEMA) LIKE ''%'' + @pErtekelesTema + ''%''' + @lineBreak
	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

