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 sp_GetErtesitesAltEsMulAdatok
	@pOsztalyId				INT,
	@pTanevId				INT,
	@pTankoteles			BIT,
	@pIskolaErdekuSzamit	BIT,
  @pIsSzulonek BIT = 1
AS
BEGIN
	SET NOCOUNT ON;

	--Mulasztasok
	DECLARE @Mulasztasok TABLE (
		TanuloId				INT
		,TanuloCsoportId		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 = 45,
		@ertekelesTipus = 1520, --évvégi
		@iskolaErdekuSzamit = @pIskolaErdekuSzamit

  SELECT
	 TanuloId Id
	,TanuloCsoportId
	,BelepesDatum
	,ISNULL(KilepesDatum, GETDATE()) KilepesDatum
  INTO #students
  FROM fnGetDokumentumOsztalyokCsoportokTanuloi(@pTanevId, @pOsztalyId, 'T')

	DECLARE @Gondviselok TABLE (TanuloId INT, GondviseloId INT, RokonsagiFokId INT, GondviseloNev NVARCHAR(MAX))
	INSERT INTO @Gondviselok
	SELECT 		 
		 TanuloId 
		,GondviseloId
		,RokonsagifokId
		,GondviseloNev
	FROM fnGetDokumentumGondviselok (@pOsztalyId, @pTanevId, 'F', 'T')

	DECLARE @TanuloCimTable TABLE (FelhasznaloId INT, Cim NVARCHAR(MAX), Cimtipusa INT)
	INSERT INTO @TanuloCimTable
	SELECT DISTINCT
		TanuloId
		,STUFF((
			SELECT DISTINCT CAST(btemp.Cim AS NVARCHAR(MAX))  + CHAR(13) + CHAR(10)
			FROM fnGetDokumentumTanuloOrGondviseloCim (0, @pTanevId, @pOsztalyId) btemp
			WHERE 
				temp.TanuloId = btemp.TanuloId
				AND temp.CimTipusa = btemp.CimTipusa
			FOR XML PATH(''), TYPE)
		.value('.','NVARCHAR(MAX)'),1,0,'')
		,temp.CimTipusa  
	FROM fnGetDokumentumTanuloOrGondviseloCim (0, @pTanevId, @pOsztalyId) temp	

	DECLARE @GondViseloCimTable TABLE (GondviseloId INT, Cim NVARCHAR(MAX), Cimtipusa INT)
	INSERT INTO @GondViseloCimTable
	SELECT DISTINCT
		GondviseloId
		,STUFF((
			SELECT DISTINCT CAST(btemp.Cim AS NVARCHAR(MAX))  + CHAR(13) + CHAR(10)
			FROM fnGetDokumentumTanuloOrGondviseloCim (1, @pTanevId, @pOsztalyId) btemp
			WHERE 
				temp.GondviseloId = btemp.GondviseloId
				AND temp.CimTipusa = btemp.CimTipusa
			FOR XML PATH(''), TYPE)
		.value('.','NVARCHAR(MAX)'),1,0,'')
		,temp.CimTipusa 
	FROM fnGetDokumentumTanuloOrGondviseloCim (1, @pTanevId, @pOsztalyId) temp
	
		
	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
		,Gondviselok.GondviseloNev	GondviseloNev
		,Cim					GondviseloAllandoCim
		,Telefon				GondviseloTelefon
		,RokonsagiFok.C_NAME	GondviseloRokonsagiFoka
	INTO #GondviseloAdatok
	FROM @Gondviselok Gondviselok
		INNER JOIN T_DICTIONARYITEMBASE_OSSZES RokonsagiFok ON RokonsagiFok.Id = Gondviselok.RokonsagiFokId 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
		TanuloAdatok.ID
		,OsztalyTanuloi.TanuloCsoportId
		,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
		,(SELECT C_NEV FROM T_OSZTALYCSOPORT_OSSZES WHERE ID = @pOsztalyId)	OSZTALYCSOPORT_NEV
		,Osztalyfonok.C_NYOMTATASINEV		OSZTFO_NEV
		,ISNULL(Mulasztas.Igazolt,0)		IGAZOLT
		,ISNULL(Mulasztas.Igazolatlan,0)	IGAZOLATLAN
		,TanuloAllandoCimTable.CIM					TanuloAllandoCim
		,TanuloTartozkodasiCimTable.Cim				TanuloTartozkodasiCim
  INTO #tanuloiAdatok
	FROM #students OsztalyTanuloi
		INNER JOIN T_FELHASZNALO_OSSZES TanuloAdatok ON TanuloAdatok.ID = OsztalyTanuloi.ID AND TanuloAdatok.TOROLT = 'F'
		INNER JOIN T_TANULO_OSSZES Tanulo ON Tanulo.ID = TanuloAdatok.ID AND Tanulo.TOROLT = 'F'
		INNER JOIN T_INTEZMENYADATOK_OSSZES IntezmenyAdatok ON IntezmenyAdatok.C_TANEVID = TanuloAdatok.C_TANEVID 
												AND IntezmenyAdatok.TOROLT = 'F'
    INNER JOIN T_TANULOTANUGYIADATOK AS TanugyiAdatok ON TanugyiAdatok.C_TANULOCSOPORTID = OsztalyTanuloi.TanuloCsoportId
		LEFT JOIN T_OSZTALY_OSSZES Osztaly ON Osztaly.ID = @pOsztalyId 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 AND Mulasztas.TanuloCsoportId = OsztalyTanuloi.TanuloCsoportId
		LEFT JOIN @TanuloCimTable TanuloAllandoCimTable ON TanuloAllandoCimTable.FelhasznaloId =  OsztalyTanuloi.ID AND TanuloAllandoCimTable.Cimtipusa = 907
		LEFT JOIN @TanuloCimTable TanuloTartozkodasiCimTable ON TanuloTartozkodasiCimTable.FelhasznaloId = OsztalyTanuloi.ID AND TanuloTartozkodasiCimTable.Cimtipusa = 909
	WHERE
		TanugyiAdatok.C_TANKOTELEZETT = IIF(@pTankoteles = 0, 'F', 'T')
	ORDER BY TanuloAdatok.C_NYOMTATASINEV

  IF @pIsSzulonek = 1 BEGIN
		SELECT DISTINCT
      ta.*
			,GondviseloAdatok.GondviseloNev
			,GondviseloAdatok.GondviseloAllandoCim
			,GondviseloAdatok.GondviseloTelefon
			,GondviseloRokonsagiFoka
		FROM #tanuloiAdatok AS ta
      LEFT JOIN #GondviseloAdatok GondviseloAdatok ON GondviseloAdatok.TanuloId =  ta.ID
		ORDER BY TANULONEV
  END
  ELSE BEGIN
		SELECT DISTINCT
      ta.*
		FROM #tanuloiAdatok AS ta
		WHERE
      ta.Igazolatlan > 0
		ORDER BY TANULONEV
  END

		--Mulasztások részletezése
		SELECT 
			 Mulasztasok.TanuloId
			,Mulasztasok.TanuloCsoportId
			,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, DEFAULT) Mulasztasok
			LEFT JOIN T_DICTIONARYITEMBASE_OSSZES MulasztasTipus ON MulasztasTipus.Id = Mulasztasok.Tipusa AND MulasztasTipus.C_TANEVID = @pTanevId
		WHERE 
			Igazolt = 'F'

    --Gondviselo adatok
    SELECT * from #GondviseloAdatok AS Gondviselok
      LEFT JOIN @Mulasztasok Mulasztasok ON Mulasztasok.TanuloId = Gondviselok.TanuloId
    WHERE (@pIsSzulonek = 0 AND Mulasztasok.Igazolatlan > 0)
      OR (@pIsSzulonek = 1)

		--Iktatási adatok
		DECLARE @IktatasAdatok TABLE (OsztalyId INT, Evfolyam INT, FeladatEllatasiHelyId INT, KepzesiForma INT, OsztalyFonokId INT, 
			TantervId INT, SzakmaCsoport INT, Agazat INT, Szakkepesites INT, Reszszakkepesites INT,
			OJCSJKeresztfeleves CHAR, OJTechnikaiOsztaly CHAR, OJNemzetisegi CHAR, OJKettannyelvu CHAR, OJNyelviElokeszito CHAR,
			OJLogopediai CHAR, OJSportOsztaly CHAR, OJAranyJanosProgram CHAR, OJGyogypedagogiai CHAR)
		INSERT INTO @IktatasAdatok
		SELECT 
			@pOsztalyId,
			ocs.C_EVFOLYAMTIPUSA,
			ocs.C_FELADATELLATASIHELYID,
			o.C_KEPZESIFORMA,
			o.C_OSZTALYFONOKID,
			o.C_TANTERVID,
			o.C_SZAKMACSOPORT,
			o.C_AGAZAT,
			o.C_SZAKKEPESITES,
			o.C_RESZSZAKKEPESITES,
			ocs.C_KERESZTFELEVES,
			o.C_TECHNIKAIOSZTALY,
			o.C_NEMZETISEGI,
			o.C_KETTANNYELVU,
			o.C_NYELVIELOKESZITO,
			o.C_LOGOPEDIAI,
			o.C_SPORT,
			o.C_AJPROGRAM,
			o.C_GYOGYPEDAGOGIAI
		FROM T_OSZTALYCSOPORT_OSSZES ocs
			INNER JOIN T_OSZTALY o ON o.ID = ocs.ID
		WHERE ocs.ID = @pOsztalyId AND ocs.TOROLT = 'F'
			AND ocs.C_TANEVID = @pTanevId;

		SELECT * from @IktatasAdatok;

	DROP TABLE #GondviseloAdatok
  DROP TABLE #tanuloiAdatok
  DROP TABLE #students

	END	

GO