SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

IF OBJECT_ID('sp_GetErtesitesAltEsMulAdatok') IS NOT NULL BEGIN
  DROP PROCEDURE [sp_GetErtesitesAltEsMulAdatok] 
END  
GO

CREATE PROCEDURE [dbo].[sp_GetErtesitesAltEsMulAdatok]
	@pOsztalyId				INT,
	@pTanevId				INT,
	@pTankoteles			BIT,
	@pIskolaErdekuSzamit	BIT
AS
BEGIN
	SET NOCOUNT ON;

	--Mulasztasok
	DECLARE @Mulasztasok TABLE (
		TanuloId				INT
		,Igazolt				INT
		,Igazolatlan			INT
		,ElmeletIgazolt			INT
		,ElmeletIgazolatlan		INT
		,GyakorlatIgazolt		INT
		,GyakorlatIgazolatlan	INT
		,ElmeletOsszes			INT
		,GyakorlatOsszes		INT
		,Osszes					INT		
		)

	INSERT INTO @Mulasztasok
	EXEC sp_GetDokumentumMulasztasok
		@osztalyID = @pOsztalyId,
		@tanevId = @pTanevId,
		@elmeletGyakorlat = 0,
		@kesesTipus = 1499,
		@elmeletiOraPercben = 45,
		@gyakorlatiOraPercben = 60,
		@ertekelesTipus = 1520, --évvégi
		@iskolaErdekuSzamit = @pIskolaErdekuSzamit

 	CREATE TABLE  #students (ID INT PRIMARY KEY, BelepesDatum DATE, KilepesDatum DATE)
  INSERT INTO #students
  SELECT
	t.TanuloId
	,BelepesDatum
	,ISNULL(KilepesDatum, GETDATE()) 
  FROM fnGetDokumentumOsztalyokCsoportokTanuloi(@pTanevId, @pOsztalyId, 'T') t

	DECLARE @Gondviselok TABLE (TanuloId INT, GondviseloId INT)
	INSERT INTO @Gondviselok
	SELECT 
		TanuloId
		,gondviselo.Id 
	FROM T_GONDVISELO_OSSZES gondviselo 
		INNER JOIN fnGetDokumentumOsztalyokCsoportokTanuloi(@pTanevId, @pOsztalyId, 'T') tanulo ON tanulo.TanuloId = gondviselo.C_TANULOID AND gondviselo.TOROLT = 'F'

	DECLARE @CimTableTemp TABLE (FelhasznaloId INT, Cim NVARCHAR(MAX), CimTipus INT, GondviseloId INT)
	INSERT INTO @CimTableTemp
	SELECT 
		TanuloId
		,C_IRANYITOSZAM + ' ' + C_VAROS + ', ' + C_KOZTERULET + ' ' + kozterulet.C_NAME + ' ' + C_HAZSZAM
		,C_CIMTIPUSA
		,C_GONDVISELOID
	FROM fnGetDokumentumOsztalyokCsoportokTanuloi(@pTanevId, @pOsztalyId, 'T') tanulo
		INNER JOIN T_CIM_OSSZES cim ON cim.C_FELHASZNALOID = TanuloId
		INNER JOIN T_DICTIONARYITEMBASE_OSSZES kozterulet ON kozterulet.Id = C_KOZTERULETJELLEGE AND kozterulet.C_TANEVID = @pTanevId
	WHERE
		cim.TOROLT = 'F'
		AND cim.C_TANEVID = @pTanevId

	UNION

	SELECT 
		TanuloId
		,C_IRANYITOSZAM + ' ' + C_VAROS + ', ' + C_KOZTERULET + ' ' + kozterulet.C_NAME + ' ' + C_HAZSZAM
		,C_CIMTIPUSA
		,GondviseloId
	FROM @Gondviselok gonviselo
		INNER JOIN T_CIM_OSSZES cim ON cim.C_GONDVISELOID = GondviseloId
		INNER JOIN T_DICTIONARYITEMBASE_OSSZES kozterulet ON kozterulet.Id = C_KOZTERULETJELLEGE AND kozterulet.C_TANEVID = @pTanevId
	WHERE
		cim.TOROLT = 'F'
		AND cim.C_TANEVID = @pTanevId

	DECLARE @TanuloCimTable TABLE (FelhasznaloId INT, Cim NVARCHAR(MAX), Cimtipusa INT)
	INSERT INTO @TanuloCimTable
	SELECT DISTINCT
		FelhasznaloId
		,STUFF((
			SELECT DISTINCT CAST(Btemp.Cim AS NVARCHAR(MAX))  + CHAR(13) + CHAR(10)
			FROM @CimTableTemp btemp
			WHERE 
				temp.FelhasznaloId = btemp.FelhasznaloId
				AND temp.CimTipus = btemp.CimTipus
				AND GondviseloId IS NULL
			FOR XML PATH(''), TYPE)
		.value('.','NVARCHAR(MAX)'),1,0,'') 
		,CimTipus
	FROM @CimTableTemp temp
	WHERE 
		GondviseloId IS NULL

	DECLARE @GondViseloCimTable TABLE (FelhasznaloId INT, GondviseloId INT, Cim NVARCHAR(MAX), Cimtipusa INT)
	INSERT INTO @GondViseloCimTable
	SELECT DISTINCT
		FelhasznaloId
		,GondviseloId
		,STUFF((
			SELECT DISTINCT CAST(btemp.Cim AS NVARCHAR(MAX))  + CHAR(13) + CHAR(10)
			FROM @CimTableTemp btemp
			WHERE 
				temp.GondviseloId = btemp.GondviseloId
				AND temp.CimTipus = btemp.CimTipus
				AND GondviseloId IS NOT NULL
			FOR XML PATH(''), TYPE)
		.value('.','NVARCHAR(MAX)'),1,0,'') 
		,CimTipus
	FROM @CimTableTemp temp
		INNER JOIN T_DICTIONARYITEMBASE_OSSZES cimTipusa ON cimTipusa.Id = Cimtipus
	WHERE 
		GondviseloId IS NOT NULL
		AND CimTipus = 907

	DECLARE @EmailCimTableTemp TABLE (FelhasznaloId INT, EmailCim NVARCHAR(MAX), GondviseloId INT)
	INSERT INTO @EmailCimTableTemp
	SELECT 
		TanuloId
		,C_EMAILCIM 
		,C_GONDVISELOID
	FROM fnGetDokumentumOsztalyokCsoportokTanuloi(@pTanevId, @pOsztalyId, 'T') tanulo
		INNER JOIN T_EMAIL_OSSZES email ON email.C_FELHASZNALOID = TanuloId
	WHERE
		email.TOROLT = 'F'
		AND email.C_TANEVID = @pTanevId
		AND LEN(C_EMAILCIM) > 0

	UNION

	SELECT 
		TanuloId
		,C_EMAILCIM 
		,GondviseloId
	FROM @Gondviselok 
		INNER JOIN T_EMAIL_OSSZES email ON email.C_GONDVISELOID = GondviseloId
	WHERE
		email.TOROLT = 'F'
		AND email.C_TANEVID = @pTanevId
		AND LEN(C_EMAILCIM) > 0

	DECLARE @EmailCimTanuloTable TABLE (FelhasznaloId INT, EmailCim NVARCHAR(MAX))
	INSERT INTO @EmailCimTanuloTable
	SELECT DISTINCT
		FelhasznaloId
		,STUFF((
			SELECT DISTINCT CAST(btemp.EmailCim AS NVARCHAR(MAX))  + CHAR(13) + CHAR(10)
			FROM @EmailCimTableTemp btemp
			WHERE 
				temp.FelhasznaloId = btemp.FelhasznaloId
				AND btemp.GondviseloId IS NULL
			FOR XML PATH(''), TYPE)
		.value('.','NVARCHAR(MAX)'),1,0,'') Email
	FROM @EmailCimTableTemp temp
	WHERE
		GondviseloId IS NULL

	DECLARE @EmailCimGondviseloTable TABLE (FelhasznaloId INT, GondviseloId INT, EmailCim NVARCHAR(MAX))
	INSERT INTO @EmailCimGondviseloTable
	SELECT DISTINCT
		FelhasznaloId
		,GondviseloId
		,STUFF((
			SELECT DISTINCT CAST(btemp.EmailCim AS NVARCHAR(MAX))  + CHAR(13) + CHAR(10)
			FROM @EmailCimTableTemp btemp
			WHERE 
				temp.GondviseloId = btemp.GondviseloId
				AND btemp.GondviseloId IS NOT NULL
			FOR XML PATH(''), TYPE)
		.value('.','NVARCHAR(MAX)'),1,0,'') Email
	FROM @EmailCimTableTemp temp
	WHERE 
		GondviseloId IS NOT NULL

	DECLARE @TelefonTableTemp TABLE (FelhasznaloId INT, Telefon NVARCHAR(MAX),  GondviseloId INT)
	INSERT INTO @TelefonTableTemp
	SELECT 
		TanuloId
		,C_TELEFONSZAM
		,C_GONDVISELOID
	FROM fnGetDokumentumOsztalyokCsoportokTanuloi(@pTanevId, @pOsztalyId, 'T') tanulo
		INNER JOIN T_TELEFON_OSSZES telefon ON telefon.C_FELHASZNALOID = TanuloId
	WHERE
		telefon.TOROLT = 'F'
		AND telefon.C_TANEVID = @pTanevId
		AND LEN(telefon.C_TELEFONSZAM) > 0 

	UNION

	SELECT 
		TanuloId
		,C_TELEFONSZAM
		,GondviseloId
	FROM @Gondviselok gondviselo
		INNER JOIN T_TELEFON_OSSZES telefon ON telefon.C_GONDVISELOID = GondviseloId
	WHERE
		telefon.TOROLT = 'F'
		AND telefon.C_TANEVID = @pTanevId
		AND LEN(telefon.C_TELEFONSZAM) > 0 

	DECLARE @TanuloTelefonTable TABLE (FelhasznaloId INT, Telefon NVARCHAR(MAX))
	INSERT INTO @TanuloTelefonTable
	SELECT DISTINCT
		FelhasznaloId
		,STUFF((
			SELECT DISTINCT CAST(btemp.Telefon AS NVARCHAR(MAX))  + CHAR(13) + CHAR(10)
			FROM @TelefonTableTemp btemp
			WHERE 
				temp.FelhasznaloId = btemp.FelhasznaloId
				AND GondviseloId IS NULL
			FOR XML PATH(''), TYPE)
		.value('.','NVARCHAR(MAX)'),1,0,'') 
	FROM @TelefonTableTemp temp
	WHERE 
		GondviseloId IS NULL

	DECLARE @GondviseloTelefonTable TABLE (FelhasznaloID INT, GondviseloId INT, Telefon NVARCHAR(MAX))
	INSERT INTO @GondviseloTelefonTable
	SELECT DISTINCT
		FelhasznaloId
		,GondviseloId
		,STUFF((
			SELECT DISTINCT CAST(btemp.Telefon AS NVARCHAR(MAX))  + CHAR(13) + CHAR(10)
			FROM @TelefonTableTemp btemp
			WHERE 
				temp.FelhasznaloId = btemp.FelhasznaloId
				and temp.GondviseloId = btemp.GondviseloId
				AND GondviseloId IS NOT NULL
			FOR XML PATH(''), TYPE)
		.value('.','NVARCHAR(MAX)'),1,0,'') 
	FROM @TelefonTableTemp temp
	WHERE 
		GondviseloId IS NOT NULL

	SELECT 
		TanuloId
		,Gondviselok.GondviseloId
		,GondviseloAdatok.C_NEV	GondviseloNev
		,Cim					GondviseloAllandoCim
		,Telefon				GondviseloTelefon
		,RokonsagiFok.C_NAME	GondviseloRokonsagiFoka
	INTO #GondviseloAdatok
	FROM @Gondviselok Gondviselok
		INNER JOIN T_GONDVISELO_OSSZES GondviseloAdatok ON GondviseloAdatok.Id = Gondviselok.GondviseloId
		INNER JOIN T_DICTIONARYITEMBASE_OSSZES RokonsagiFok ON RokonsagiFok.Id = GondviseloAdatok.C_ROKONSAGFOKA AND RokonsagiFok.C_TANEVID = @pTanevId
		LEFT JOIN @GondViseloCimTable GondviseloCim ON GondviseloCim.GondviseloId = Gondviselok.GondviseloId
		LEFT JOIN @GondviseloTelefonTable GondviseloTelefon	ON GondviseloTelefon.GondviseloId = Gondviselok.GondviseloId
	ORDER BY TanuloId

	--Tanulói adatok
		SELECT DISTINCT
			TanuloAdatok.ID
			,TanuloAdatok.C_NYOMTATASINEV		TANULONEV
			,TanuloAdatok.C_ANYJANEVE			ANYJANEVE
			,TanuloAdatok.C_SZULETESIHELY		SZULETESIHELY
			,TanuloAdatok.C_SZULETESIDATUM		SZULETESIDATUM
			,TanuloAdatok.C_NYILVANTARTASISZAM	TorzslapSzam
			,IntezmenyAdatok.C_IGAZGATONEVE 	INT_IGAZGATO_NEV
			,IntezmenyAdatok.C_NEV				INT_NEV
			,IntezmenyAdatok.C_OMKOD			INT_OMKOD
			,IntezmenyAdatok.C_VAROS			INT_VAROS
			,dbo.fnGetDokumentumIntezmenyCime(@pTanevId) INT_CIM
			,OsztalyCsoport.C_NEV				OSZTALYCSOPORT_NEV
			,Osztalyfonok.C_NYOMTATASINEV		OSZTFO_NEV
			,ISNULL(Mulasztas.Igazolt,0)		IGAZOLT
			,ISNULL(Mulasztas.Igazolatlan,0)	IGAZOLATLAN
			,GondviseloAdatok.GondviseloNev
			,GondviseloAdatok.GondviseloAllandoCim
			,GondviseloAdatok.GondviseloTelefon
			,GondviseloRokonsagiFoka
			,TanuloAllandoCimTable.CIM					TanuloAllandoCim
			,TanuloTartozkodasiCimTable.Cim				TanuloTartozkodasiCim
		FROM T_TANULOCSOPORT_OSSZES TanuloCsoport
			INNER JOIN T_FELHASZNALO_OSSZES TanuloAdatok ON TanuloAdatok.ID = TanuloCsoport.C_TANULOID AND TanuloAdatok.TOROLT = 'F'
			INNER JOIN T_TANULO_OSSZES Tanulo ON Tanulo.ID = TanuloAdatok.ID AND Tanulo.TOROLT = 'F'
			INNER JOIN T_OSZTALYCSOPORT_OSSZES OsztalyCsoport ON OsztalyCsoport.ID = TanuloCsoport.C_OSZTALYCSOPORTID AND OsztalyCsoport.TOROLT = 'F'
			INNER JOIN T_INTEZMENYADATOK_OSSZES IntezmenyAdatok ON IntezmenyAdatok.C_TANEVID = TanuloCsoport.C_TANEVID 
													AND IntezmenyAdatok.TOROLT = 'F'
			LEFT JOIN T_OSZTALY_OSSZES Osztaly ON Osztaly.ID = OsztalyCsoport.ID AND Osztaly.TOROLT = 'F'
			LEFT JOIN T_FELHASZNALO_OSSZES Osztalyfonok ON Osztalyfonok.ID = Osztaly.C_OSZTALYFONOKID AND Osztalyfonok.TOROLT = 'F'
			LEFT JOIN @Mulasztasok Mulasztas ON Mulasztas.TanuloId = TanuloAdatok.ID 
			LEFT JOIN #GondviseloAdatok GondviseloAdatok ON GondviseloAdatok.TanuloId = TanuloCsoport.C_TANULOID 
			LEFT JOIN @TanuloCimTable TanuloAllandoCimTable ON TanuloAllandoCimTable.FelhasznaloId = TanuloCsoport.C_TANULOID AND TanuloAllandoCimTable.Cimtipusa = 907
			LEFT JOIN @TanuloCimTable TanuloTartozkodasiCimTable ON TanuloTartozkodasiCimTable.FelhasznaloId = TanuloCsoport.C_TANULOID AND TanuloTartozkodasiCimTable.Cimtipusa = 908
		WHERE
			TanuloCsoport.C_OSZTALYCSOPORTID = @pOsztalyId  
			AND TanuloCsoport.C_TANULOID IN (SELECT TanuloId FROM fnGetDokumentumOsztalyokCsoportokTanuloi(@pTanevId, @pOsztalyId, 'F'))
			AND TanuloCsoport.TOROLT = 'F' 
			AND Tanulo.C_TANKOTELEZETT = IIF(@pTankoteles = 0, 'F', 'T')
			AND TanuloCsoport.C_TANEVID = @pTanevId
		ORDER BY TanuloAdatok.C_NYOMTATASINEV


		--Mulasztások részletezése
		SELECT 
			 Mulasztasok.TanuloId
			,Mulasztasok.OsztalyCsoportId
			,Mulasztasok.OsztalyCsoportNev
			,MulasztasTipus.C_NAME	Tipusa
			,Mulasztasok.Igazolt
			,Mulasztasok.IgazolasTipusa
			,Mulasztasok.KesesPercben
			,Mulasztasok.Datum
			,Mulasztasok.Oraszam
			,Mulasztasok.TantargyId
			,Mulasztasok.TantargyNev 
		FROM fnGetDokumentumMulasztasokOsztalyonkentReszletes(@pTanevId, @pOsztalyId, @pIskolaErdekuSzamit, DEFAULT, DEFAULT, DEFAULT, DEFAULT) Mulasztasok
			LEFT JOIN T_DICTIONARYITEMBASE_OSSZES MulasztasTipus ON MulasztasTipus.Id = Mulasztasok.Tipusa AND MulasztasTipus.C_TANEVID = @pTanevId
		WHERE 
			Igazolt = 'F'

	DROP TABLE #GondviseloAdatok

	END	

GO