SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

DROP PROCEDURE IF EXISTS dbo.sp_GetTanoranKivuliNaplo
GO

CREATE PROCEDURE [dbo].[sp_GetTanoranKivuliNaplo]
  @tanevId				INT,
  @intezmenyId			INT, 
  @csoportId			INT,
  @iskolaErdekuSzamit	BIT	

AS
BEGIN
	SET NOCOUNT ON;

--Fejlecoldal (Fejléc)
SELECT 
	ia.C_NEV				IntezmenyNev
	,dbo.fnGetDokumentumIntezmenyCime(@tanevId) as IntezmenyCim
	,ia.C_OMKOD				OMKOD
	,ia.C_IGAZGATONEVE		IntezmenyVezeto
	,ocs.C_NEV				Csoport
	,ocs.ID					CsoportId
	,ISNULL(f.C_NYOMTATASINEV,'-')			 CsoportVezeto
	,ISNULL(cs.C_CSOPORTNAPLOLEIRAS,'-') 	 CsoportNaploLeiras
	,dbo.fnGetDokumentumDatumFormatum(cs.C_CSOPORTNAPLOMEGNYITASA)			 Megnyitas
	,ISNULL(dbo.fnGetDokumentumDatumFormatum(cs.C_CSOPORTNAPLOZARASA),'-')	 Lezaras
	,t.C_NEV as Tanev
	,cs.C_CSOPORTNAPLOLEIRAS  Megjegyzes 
	,f.ID CsoportVezetoId
	,ISNULL(ocs.C_EVFOLYAMTIPUSA, 1296) AS	EvfolyamTipusa              -- 1296 = Na
	,ocs.C_FELADATELLATASIHELYID FeladatEllatasiHelyId
	,ocs.C_KERESZTFELEVES	OJCSJKeresztfeleves
	,ocs.C_VEGZOSEVFOLYAM	CSJVegzosEvfolyamu
	,cs.C_TIPUSA	CsoportTipusa
FROM T_INTEZMENY_OSSZES i
	INNER JOIN T_INTEZMENYADATOK_OSSZES ia on ia.C_INTEZMENYID=i.ID
	INNER JOIN T_OSZTALYCSOPORT_OSSZES ocs on ocs.C_INTEZMENYID=i.ID
	INNER JOIN T_CSOPORT_OSSZES cs on cs.ID=ocs.ID 
	LEFT JOIN T_FELHASZNALO_OSSZES f on f.ID=cs.C_CSOPORTVEZETOID
	INNER JOIN T_TANEV_OSSZES t on t.ID=ia.C_TANEVID
WHERE 
	ia.C_TANEVID = @tanevid 
	AND ocs.ID = @csoportId

  CREATE TABLE  #students (ID INT, Osztaly NVARCHAR(MAX), OsztalyId INT, BelepesDatum DATETIME)
  INSERT INTO #students
  SELECT
	 TanuloId
	,dbo.fnGetDokumentumTanuloAktualisOsztaly(TanuloId)	 Osztaly /*TODO:Tobb Osztaly*//*OM-1650*/
	,dbo.fnGetDokumentumTanuloAktualisOsztalyId(TanuloId)	 OsztalyId
  ,BelepesDatum AS  BelepesDatum
  FROM fnGetDokumentumOsztalyokCsoportokTanuloi(@tanevId, @csoportId, 'T')

--Osztaly (Csoport tanulóinak osztályai)
SELECT 
	COUNT(Id) Tanulo
	,Osztaly 
	,OsztalyId
FROM #students
GROUP BY Osztaly, OsztalyId

--Napló
DECLARE @datum DATE = GETDATE()
CREATE TABLE #OraSorszam (TanitasioraId INT, OraSorszam NVARCHAR(100))
INSERT INTO #OraSorszam 
EXEC sp_GetOraSorszamByOsztaly
	@osztalyCsoportId = @csoportId,
	@datum = @datum,
	@intezmenyId = @intezmenyId,
	@tanevId = @tanevId

DECLARE @letszam INT=(SELECT COUNT(tcs.C_TANULOID) FROM T_TANULOCSOPORT_OSSZES tcs WHERE tcs.C_OSZTALYCSOPORTID=@csoportId AND tcs.TOROLT='F')

SELECT 
	 dbo.fnGetDokumentumDatumFormatum(tao.C_ORAKEZDETE) + CONVERT(VARCHAR(5), tao.C_ORAKEZDETE, 108) + '-' + CONVERT(VARCHAR(5), tao.C_ORAVEGE, 108)			Datum
	,IIF(tantargy.C_NEV <> C_NEVNYOMTATVANYBAN AND C_NEVNYOMTATVANYBAN IS NOT NULL, C_NEVNYOMTATVANYBAN 	--
	+ ' (' + tantargy.C_NEV + ')', tantargy.C_NEV)															TantargyNev
	,tao.C_TANTARGYID																						TantargyId
	,tao.C_MEGTARTOTT																						Megtartott
	,IIF(C_MEGTARTOTT = 'F', 'Elmaradt', tao.C_TEMA)		Tema
	,@letszam-isnull(hianyzo.Hianyzok,0)					Letszam
	,IIF(C_MEGTARTOTT = 'F', '-', f.C_NYOMTATASINEV)		Pedagogus 
	,Terem.C_NEV											TeremNev
	,isnull(Oraszam.OraSorszam + '.'
	, '-')	OraSorszam
	,tao.C_ORAKEZDETE										OraKezdete
INTO #megtartottOrak
FROM T_TANITASIORA_OSSZES tao 
	LEFT JOIN (SELECT tm.C_TANITASIORAKID Tanitasiora, COUNT(tm.C_ORATANULOIID) Hianyzok from T_TANULOMULASZTAS_OSSZES tm where tm.torolt='F' AND C_TIPUS IN (1499,1500) GROUP BY tm.C_TANITASIORAKID ) hianyzo on hianyzo.Tanitasiora=tao.ID
	LEFT JOIN T_FELHASZNALO_OSSZES f ON  f.id = tao.C_ORATULAJDONOSID
	INNER JOIN T_TANTARGY_OSSZES tantargy ON tantargy.Id = tao.C_TANTARGYID
	LEFT JOIN T_TEREM_OSSZES Terem ON Terem.Id = tao.C_TEREMID
	left JOIN #OraSorszam Oraszam ON Oraszam.TanitasioraId = tao.Id
WHERE 
	tao.C_OSZTALYCSOPORTID=@csoportId 
	AND tao.TOROLT='F'

SELECT 
	 Datum
	,TantargyNev
	,TantargyId
	,Megtartott
	,Tema
	,Letszam
	,Pedagogus 
	,TeremNev
	,OraSorszam
	,OraKezdete
FROM #megtartottOrak ORDER BY OraKezdete

 /*TANULÓ adatai*/
	SELECT  DISTINCT
		 TanuloId
		,OktAzon
		,TajSzam
		,AnyjaNeve
		,SzulHely
		,SzulIdo
		,SocAdat
		,Kepzes
		,TanuloNeve
		,Allampolgarsaga
		,DiakIgazolvanySzam
		,AktualisOsztaly	Osztalya
    ,BelepesDatum
	FROM fnGetDokumentumTanulokAdatai(@tanevId, @csoportId)
	ORDER BY TanuloNeve

 /*TANULÓ elérhetőségei */
  	DECLARE @Gondviselok TABLE (TanuloId INT, GondviseloId INT)
	INSERT INTO @Gondviselok
	SELECT 		 
		 TanuloId 
		,GondviseloId
	FROM fnGetDokumentumGondviselok (@csoportId, @tanevId, 'F', 'T')


	DECLARE @TanuloCimTable TABLE (FelhasznaloId INT, Cim NVARCHAR(MAX), Cimtipusa NVARCHAR(MAX))
	INSERT INTO @TanuloCimTable
	SELECT DISTINCT
		TanuloId
		,STUFF((
			SELECT DISTINCT CAST(Btemp.Cim AS NVARCHAR(MAX))  + CHAR(13) + CHAR(10)
			FROM fnGetDokumentumTanuloOrGondviseloCim (0, @tanevId, @csoportid) btemp
			WHERE 
				temp.TanuloId = btemp.TanuloId
				AND temp.CimTipusa = btemp.CimTipusa
			FOR XML PATH(''), TYPE)
		.value('.','NVARCHAR(MAX)'),1,0,'')
		,cimTipusa.C_NAME 
	FROM fnGetDokumentumTanuloOrGondviseloCim (0, @tanevId, @csoportid) temp
	INNER JOIN T_DICTIONARYITEMBASE_OSSZES cimTipusa ON cimTipusa.Id = temp.CimTipusa AND cimTipusa.C_TANEVID = @tanevId

	DECLARE @GondViseloCimTable TABLE (GondviseloId INT, Cim NVARCHAR(MAX), Cimtipusa NVARCHAR(MAX))
	INSERT INTO @GondViseloCimTable
	SELECT DISTINCT
		GondviseloId
		,STUFF((
			SELECT DISTINCT CAST(btemp.Cim AS NVARCHAR(MAX))  + CHAR(13) + CHAR(10)
			FROM fnGetDokumentumTanuloOrGondviseloCim (1, @tanevId, @csoportid) btemp
			WHERE 
				temp.GondviseloId = btemp.GondviseloId
				AND temp.CimTipusa = btemp.CimTipusa
			FOR XML PATH(''), TYPE)
		.value('.','NVARCHAR(MAX)'),1,0,'')
		,cimTipusa.C_NAME  
	FROM fnGetDokumentumTanuloOrGondviseloCim (1, @tanevId, @csoportid) temp
	INNER JOIN T_DICTIONARYITEMBASE_OSSZES cimTipusa ON cimTipusa.Id = temp.CimTipusa AND cimTipusa.C_TANEVID = @tanevId

	DECLARE @EmailCimTableTemp TABLE (FelhasznaloId INT, EmailCim NVARCHAR(MAX), GondviseloId INT)
	INSERT INTO @EmailCimTableTemp
	SELECT 
		TanuloId
		,C_EMAILCIM 
		,C_GONDVISELOID
	FROM fnGetDokumentumOsztalyokCsoportokTanuloi(@tanevId, @csoportId, 'T') tanulo
		INNER JOIN T_EMAIL_OSSZES email ON email.C_FELHASZNALOID = TanuloId 
	WHERE
		email.TOROLT = 'F'
		AND email.C_TANEVID = @tanevId
		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 = @tanevId
		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 (GondviseloId INT, EmailCim NVARCHAR(MAX))
	INSERT INTO @EmailCimGondviseloTable
	SELECT DISTINCT
		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(@tanevId, @csoportId, 'T') tanulo
		INNER JOIN T_TELEFON_OSSZES telefon ON telefon.C_FELHASZNALOID = TanuloId
	WHERE
		telefon.TOROLT = 'F'
		AND telefon.C_TANEVID = @tanevId
		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 = @tanevId
		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 (GondviseloId INT, Telefon NVARCHAR(MAX))
	INSERT INTO @GondviseloTelefonTable
	SELECT DISTINCT
		GondviseloId
		,STUFF((
			SELECT DISTINCT CAST(btemp.Telefon AS NVARCHAR(MAX))  + CHAR(13) + CHAR(10)
			FROM @TelefonTableTemp btemp
			WHERE 
				temp.GondviseloId = btemp.GondviseloId
				AND temp.FelhasznaloId = btemp.FelhasznaloId
				AND GondviseloId IS NOT NULL
			FOR XML PATH(''), TYPE)
		.value('.','NVARCHAR(MAX)'),1,0,'') 
	FROM @TelefonTableTemp temp
	WHERE 
		GondviseloId IS NOT NULL

	SELECT 
		s.ID tanuloid 
		,cim.Cimtipusa cimtipus
		,cim.Cim 
		,email.EmailCim email
		,telefon.Telefon telefonszam
	FROM #students s
		LEFT JOIN @TanuloCimTable cim ON cim.FelhasznaloId = s.ID
		LEFT JOIN @EmailCimTanuloTable email ON email.FelhasznaloId = s.ID
		LEFT JOIN @TanuloTelefonTable telefon ON telefon.FelhasznaloId = s.ID
	ORDER BY Cimtipusa

	  /*gondviselő elérhetőségei */
	SELECT DISTINCT
		 Gondviselok.TanuloId
		,Gondviselok.GondviseloNev + ' (' + RokonsagiFok.C_NAME + ')' C_NEV
		,cim.Cimtipusa		C_CIMTIPUSA
		,cim.cim			C_OSSZETETTCIM
		,telefon.telefon	C_TELEFONSZAM
		,email.emailcim		C_EMAILCIM 
	FROM fnGetDokumentumGondviselok (@csoportId, @tanevId, 'F', 'T') Gondviselok
		INNER JOIN T_DICTIONARYITEMBASE_OSSZES RokonsagiFok ON RokonsagiFok.ID = Gondviselok.RokonsagifokId AND RokonsagiFok.C_TANEVID = @tanevId
		LEFT JOIN @EmailCimGondviseloTable email ON email.GondviseloId = Gondviselok.GondviseloId
		LEFT JOIN @GondviseloTelefonTable telefon ON telefon.GondviseloId = Gondviselok.GondviseloId
		LEFT JOIN @GondViseloCimTable cim ON cim.GondviseloId = Gondviselok.GondviseloId

	--Megtartott órák száma
	SELECT 
		COUNT(TantargyId)				TantargyOraszam
		,Tantargynev					TantargyNev
	INTO #MegtartottOrakSzama 
	FROM #megtartottOrak 
	WHERE Megtartott = 'T'
	GROUP BY TantargyId, TantargyNev


	SELECT DISTINCT
		SUM(tmp.TantargyOraszam)		OsszesTantargySzam
		,STUFF((
			SELECT DISTINCT ', ' + btmp.TantargyNev + '(' + CAST(btmp.TantargyOraszam AS NVARCHAR(MAX)) + ')'  
			FROM #MegtartottOrakSzama btmp
		FOR XML PATH(''), TYPE)
		.value('.','NVARCHAR(MAX)'),1,2,'')	  Tantargyak
	FROM #MegtartottOrakSzama tmp

	-- Csoport tanárai
	  SELECT 
	 targy.C_NEV			TargyNev
	,tanar.C_NYOMTATASINEV	TanarNev
	,targykategoria.C_ORDER
	,tanar.ID TanarId
	,tanar.C_OKTATASIAZONOSITO TanarOktAzon
  FROM T_FELHASZNALO_OSSZES tanar
  	INNER JOIN T_FOGLALKOZAS_OSSZES f ON f.C_TANARID = tanar.ID and f.TOROLT='F' and f.C_OSZTALYCSOPORTID = @csoportId
  	INNER JOIN T_TANTARGY_OSSZES targy ON targy.ID = f.C_TANTARGYID and targy.TOROLT='F'
	INNER JOIN T_TARGYKATEGORIATIPUS_OSSZES ON T_TARGYKATEGORIATIPUS_OSSZES.ID = targy.C_TARGYKATEGORIA
    INNER JOIN T_DICTIONARYITEMBASE_OSSZES targykategoria ON targykategoria.ID = T_TARGYKATEGORIATIPUS_OSSZES.ID AND targykategoria.TOROLT = 'F' AND targykategoria.C_TANEVID = @tanevId
  WHERE tanar.TOROLT = 'F' AND f.TOROLT = 'F'
    AND tanar.C_INTEZMENYID = @intezmenyid
    AND tanar.c_tanevId = @tanevId
  GROUP BY 
	C_ORDER, targy.C_NEV, tanar.C_NYOMTATASINEV, tanar.ID, tanar.C_OKTATASIAZONOSITO
  ORDER BY 
	C_ORDER, targy.C_NEV, tanar.C_NYOMTATASINEV
END

GO