﻿IF OBJECT_ID('[dbo].[sp_GetNapkozisNaplo]') IS NOT NULL BEGIN
  DROP PROCEDURE [dbo].[sp_GetNapkozisNaplo]
END  
GO

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

AS
BEGIN
  SET NOCOUNT ON;
--Tanulók adatai, elérhetőségei
  DECLARE @tanulok table (
    Id int, TanuloCsoportId INT, Nev nvarchar(max), Osztaly nvarchar(max), Sorszam nvarchar(max), beirasiSorszam nvarchar(max), Torzslapszam nvarchar(max), Allampolgarsaga nvarchar(max), DiakIg nvarchar(max), 
  	SzulHely nvarchar(max), SzulIdo nvarchar(max), Anyja nvarchar(max), Taj nvarchar(max), OktAzon nvarchar(max), Kilepes nvarchar(max), Kepzes nvarchar(max),
  	TanuloCimTipus nvarchar(max), TanuloCim nvarchar(max), TanuloEmail nvarchar(max), szoc nvarchar(max)
  )
 
  INSERT INTO @tanulok
  SELECT DISTINCT 
     tanulok.TanuloId Id
	,tanulok.TanuloCsoportId
    ,iif(KilepesDatum IS NOT NULL,f.C_NYOMTATASINEV+' (kilépett)', f.C_NYOMTATASINEV) as Nev
    ,dbo.fnGetDokumentumTanuloAktualisOsztaly(t.Id) as Osztaly
    ,NaploSorszam
	,t.C_BEIRASINAPLOSORSZAM as beirasiSorszam
    ,Torzslapszam
    ,Allampolgarsaga.Allampolgarsaga as Allampolgarsag
    ,t.C_DIAKIGAZOLVANYSZAM as DiakIg
    ,f.C_SZULETESIHELY as SzulHely
    ,FORMAT(f.c_szuletesidatum, 'yyyy.MM.dd.') as SzulIdo
    ,f.C_ANYJANEVE as Anyja
    ,f.C_TAJSZAM as Taj
    ,f.C_OKTATASIAZONOSITO as OktAzon
    ,FORMAT(KilepesDatum, 'yyyy.MM.dd.') as Kilepes
    ,tt.c_nev as Kepzes 
  	,cim.Tipus
    ,cim.cim
    ,email.c_emailcim as TanuloEmail
    ,IIF(t.C_MAGANTANULO = 'T', 'Magántanuló (' + MagantanulosagOka.C_NAME + '), ', '') +
        IIF(t.C_JOGVISZONYATSZUNETELTETO = 'T', 'Jogviszony szüneteltetve, ', '') + 
        IIF(t.C_SZAKMAIGYAKORLATON = 'T', 'Szakmai gyakorlat, ', '') + 
        IIF(t.C_SZOCIALISTAMOGATAS = 'T', 'Szociális támogatás, ', '') AS szoc
  FROM fnGetDokumentumOsztalyokCsoportokTanuloi (@tanevId, @csoportId, 'T') tanulok
  	INNER JOIN T_FELHASZNALO_OSSZES f ON f.id = tanulok.TanuloId AND f.torolt='F'
	INNER JOIN T_TANULO_OSSZES t ON t.ID = f.ID
	INNER JOIN T_TANTERV_OSSZES tt ON tt.ID = t.C_TANTERVID AND tt.TOROLT = 'F' AND tt.C_TANEVID = @tanevId
  	INNER JOIN (SELECT distinct d.id Id, d.c_name Allampolgarsaga FROM T_DICTIONARYITEMBASE_OSSZES d) Allampolgarsaga ON Allampolgarsaga.Id=f.c_allampolgarsaga
  	INNER JOIN (
      SELECT DISTINCT
		TanuloId										TanuloId
		,cimTipusa.C_NAME								Tipus
		,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,'')				Cim
		FROM fnGetDokumentumTanuloOrGondviseloCim (0, @tanevId, @csoportid) temp
		INNER JOIN T_DICTIONARYITEMBASE_OSSZES cimTipusa ON cimTipusa.Id = temp.CimTipusa
	)cim ON cim.TanuloId=tanulok.TanuloId
  	LEFT JOIN T_TELEFON_OSSZES tel ON tel.c_felhasznaloid=f.id AND tel.c_gondviseloid is null AND tel.torolt='F' AND tel.c_alapertelmezett='T'
  	LEFT JOIN T_EMAIL_OSSZES email ON email.c_felhasznaloid=tanulok.TanuloId AND email.c_gondviseloid is null AND email.torolt='F' AND email.c_alapertelmezett='T'
	LEFT JOIN T_DICTIONARYITEMBASE_OSSZES MagantanulosagOka on MagantanulosagOka.ID = t.C_MAGANTANULOSAGANAKOKA AND MagantanulosagOka.C_TANEVID = f.C_TANEVID

--Kezdőoldal
  SELECT ia.c_nev as IntezmenyNev, dbo.fnGetDokumentumIntezmenyCime(@tanevId) as IntezmenyCim, ia.c_omkod as OMKOD, ia.c_igazgatoneve as IntezmenyVezeto, ocs.c_nev NapkozisCsoport, iif(len(ocs.c_nev)>17, SUBSTRING (ocs.c_nev, 1 , 17)+'...', ocs.c_nev) RovidNev,
		isnull(f.c_nyomtatasinev,'-') as CsoportVezeto, isnull(cs.c_csoportnaploleiras,'-') as CsoportNaploLeiras, FORMAT(cs.c_csoportnaplomegnyitasa, 'yyyy.MM.dd.') as Megnyitas, 
		isnull(FORMAT(cs.c_csoportnaplozarasa, 'yyyy.MM.dd.'),'-') as Lezaras 
  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 AND ocs.c_tanevid = @tanevid AND ocs.id = @csoportId
  	INNER JOIN T_CSOPORT_OSSZES cs ON cs.id = ocs.id 
  	LEFT JOIN T_FELHASZNALO_OSSZES f ON f.id = cs.c_csoportvezetoid
  WHERE i.id = @intezmenyid 
    AND ia.c_tanevid = @tanevid 

  --Csoportot vezette
  SELECT isnull(f.c_nyomtatasinev,'-') as CsoportVezeto FROM T_CSOPORT_OSSZES cs
  	LEFT JOIN T_FELHASZNALO_OSSZES f ON f.id=cs.c_csoportvezetoid
  WHERE cs.id=@csoportId AND cs.c_altanevid=@tanevid AND cs.c_alintezmenyid=@intezmenyid

  --Tanulók
  SELECT DISTINCT Nev, Osztaly, OktAzon 
  FROM @tanulok 
  ORDER BY Nev

  --Naplóhetek
  DECLARE @elsonap as date
  DECLARE @utolsonap as date

  IF (
    SELECT c_osztalycsoportid FROM T_OSZTALYCSOPORT_TANEVRENDJE otr 
		INNER JOIN t_tanevrendje_osszes tr ON tr.id=otr.c_tanevrendjeid AND tr.c_naptipusa=1394 
	  WHERE c_osztalycsoportid=@csoportid
  ) IS NULL begin 
		SET @elsonap= (SELECT top 1 c_datum FROM t_tanevrendje_osszes tr WHERE c_naptipusa=1394 AND c_tanevid=@tanevId AND c_intezmenyid=@intezmenyId AND torolt='F' AND c_osszescsoportravonatkozik='T')
  END
  ELSE BEGIN
	SET @elsonap = (
    SELECT top 1 tr.C_DATUM 
    FROM T_OSZTALYCSOPORT_TANEVRENDJE  otr
		  INNER JOIN t_tanevrendje_osszes tr ON tr.id=otr.c_tanevrendjeid AND tr.c_naptipusa=1394
		WHERE c_osztalycsoportid=@csoportid)
  END

  IF (
    SELECT c_osztalycsoportid 
    FROM T_OSZTALYCSOPORT_TANEVRENDJE otr 
		  INNER JOIN t_tanevrendje_osszes tr ON tr.id=otr.c_tanevrendjeid AND tr.c_naptipusa=1395 
	  WHERE c_osztalycsoportid=@csoportId
  ) IS NULL
  BEGIN 
		SET @utolsonap = (SELECT top 1 c_datum FROM t_tanevrendje_osszes tr WHERE c_naptipusa=1395 AND c_tanevid=@tanevId AND c_intezmenyid=@intezmenyId AND torolt='F' AND c_osszescsoportravonatkozik='T')
  END
  ELSE BEGIN
		SET @utolsonap = (
      SELECT top 1 tr.C_DATUM 
      FROM T_OSZTALYCSOPORT_TANEVRENDJE  otr
			  INNER JOIN t_tanevrendje_osszes tr ON tr.id=otr.c_tanevrendjeid AND tr.c_naptipusa=1395
			WHERE c_osztalycsoportid=@csoportId)
  END

  	SELECT 
		nn.C_HETSORSZAMA Het
		,FORMAT(MIN(nn.C_NAPDATUMA), 'yyyy.MM.dd.') HetEleje
		,FORMAT(MAX(nn.C_NAPDATUMA), 'yyyy.MM.dd.') HetVege
	FROM T_NAPTARINAP_OSSZES nn
	WHERE 
		nn.C_NAPDATUMA BETWEEN @ElsoNap AND @UtolsoNap
		AND nn.C_HETNAPJA BETWEEN 1407 AND 1413
		AND nn.TOROLT='F' 
		AND nn.c_tanevId = @tanevId
	GROUP BY nn.C_HETSORSZAMA
	ORDER BY MIN(nn.C_NAPDATUMA)

  --Tanuló adatok
  SELECT * FROM @tanulok ORDER BY Nev

--Mulasztások
  DECLARE @Mulasztasok TABLE ( IgazoltE nvarchar(1), Tanulo int, Tipus int)

  	DECLARE @FelevVege DATE = (SELECT TOP 1 C_DATUM FROM T_TANEVRENDJE_OSSZES tr WHERE C_NAPTIPUSA = 1400 AND C_TANEVID=@tanevId AND TOROLT = 'F')

	SELECT 
		 DATEPART(MONTH, Datum)				Honap
		 ,TantargyId						Id
		 ,Igazolt							IgazoltE
		 ,TanuloId							TanuloId
		 ,TanuloCsoportId					TanuloCsoportId
		 ,IgazolasTipusa					IgazolasTipus
		 ,Datum								Datum
		 ,Tipusa							Tipus
		 ,KesesPercben						KesesPercben
		 ,HetSorszama						HetSorszama
		 ,Oraszam							Oraszam
		 ,CAST(DATEPART(MONTH, Datum) AS NVARCHAR(10)) + IIF(C_GYAKORLATI = 'T', 'G', 'E') ElmeletGyakorlat
		 ,C_GYAKORLATI						isGyakorlat
	INTO #mulasztasTmp 
	FROM fnGetDokumentumMulasztasokOsztalyonkentReszletes(@tanevId, @csoportId, @iskolaErdekuSzamit, 1, 0, DEFAULT, DEFAULT) TanulokMulasztasai
		INNER JOIN T_TANTARGY_OSSZES Tantargy ON Tantargy.Id = TanulokMulasztasai.TantargyId

	SELECT  
		 TanuloId	Id
		,TanuloCsoportId
		,Sorszam
		,TorzslapSzam
		,OktAzon
		,TajSzam
		,AnyjaNeve
		,SzulHely
		,SzulIdo
		,SocAdat
		,Kepzes
		,TanuloNeve
		,Allampolgarsaga
		,DiakIgazolvanySzam
		,KilepesDatum
		,BeirasiNaploSorszam
		,AktualisOsztaly	Osztaly
	INTO #studentsWithTanuloCsoport
	FROM fnGetDokumentumTanulokAdatai(@tanevId, @csoportId)

EXEC sp_GetDokumentumMulasztasokIdoszakonkent
	@tanevId					= @tanevId,
	@osztalyCsoportId			= @csoportId,
	@iskolaErdekuSzamit			= @iskolaErdekuSzamit,
	@isReszletesMulasztasok		= 0

  --Napló
  SELECT distinct nn.c_hetsorszama as Het, d.Nap as Nap, FORMAT(nn.c_napdatuma, 'yyyy. MMMM dd.', 'hu-hu') as Datum FROM T_NAPTARINAP_OSSZES nn 
  	LEFT JOIN T_TANITASIORA_OSSZES tao ON tao.c_datum=nn.c_napdatuma AND tao.c_osztalycsoportid=@csoportid AND tao.torolt='F'
  	LEFT JOIN (SELECT distinct d.id as ID, d.c_name Nap FROM T_DICTIONARYITEMBASE_OSSZES d) d ON d.id=nn.c_hetnapja 
  	LEFT JOIN T_FOGLALKOZAS_OSSZES fog ON fog.id=tao.c_foglalkozasid AND fog.c_tanevid=@tanevid
  	LEFT JOIN T_FELHASZNALO_OSSZES f ON f.id=fog.c_tanarid AND f.torolt='F'
  WHERE nn.c_napdatuma>=@elsonap AND nn.c_napdatuma<=@utolsonap
  ORDER BY nn.c_hetsorszama,FORMAT(nn.c_napdatuma, 'yyyy. MMMM dd.', 'hu-hu')

  --Napló adatok
  DECLARE @datum DATE = GETDATE()
  CREATE TABLE #OraSorszam (TanitasioraId INT PRIMARY KEY, OraSorszam INT)

  INSERT INTO #OraSorszam
	EXEC	sp_GetOraSorszamByOsztaly
  	@osztalyCsoportId = @csoportId,
  	@datum = @datum,
  	@intezmenyId = @intezmenyId,
  	@tanevId = @tanevId

  SELECT DISTINCT 
	 tao.C_ORASZAM																							Oraszam
	,tao.C_HETSORSZAMA																						Het
    ,FORMAT(tao.C_DATUM, 'yyyy. MMMM dd.', 'hu-hu')															Datum
	,CONVERT(VARCHAR(5), tao.C_ORAKEZDETE, 108) + '-' + CONVERT(VARCHAR(5), tao.C_ORAVEGE, 108)				DatumKezdettel
	,ISNULL('Helyettesítő: ' + helyettesito.C_NYOMTATASINEV, f.C_NYOMTATASINEV)								Tanar
	,IIF(tantargy.C_NEV <> C_NEVNYOMTATVANYBAN AND C_NEVNYOMTATVANYBAN IS NOT NULL, C_NEVNYOMTATVANYBAN 	--
	+ ' (' + tantargy.C_NEV + ')', tantargy.C_NEV)															TantargyNev
    ,tao.C_TEMA																								Tema  
	,OraSorszam
	,C_ORAKEZDETE
  FROM T_TANITASIORA_OSSZES tao
  	LEFT JOIN T_FOGLALKOZAS_OSSZES fog ON fog.id = tao.C_FOGLALKOZASID AND fog.TOROLT = 'F'
  	LEFT JOIN T_FELHASZNALO_OSSZES f ON f.id = tao.C_TANARID AND f.TOROLT = 'F'
	LEFT JOIN T_FELHASZNALO_OSSZES helyettesito ON helyettesito.ID = tao.C_HELYETTESITOTANARID
	INNER JOIN T_TANTARGY_OSSZES tantargy ON tantargy.Id = tao.C_TANTARGYID
	LEFT JOIN (SELECT DISTINCT OraSorszam, TanitasioraId FROM #OraSorszam) oraSorszam ON oraSorszam.TanitasioraId = tao.Id
  WHERE 
      tao.C_OSZTALYCSOPORTID = @csoportid 
      AND tao.TOROLT = 'F' 
  ORDER BY tao.C_ORAKEZDETE, tao.C_ORASZAM	

  --Napló mulasztás
	SELECT C_HETSORSZAMA Het, C_NYOMTATASINEV Tanulo, 
      MAX([1]) AS [Hetfo], MAX([2]) AS [Kedd], MAX([3]) AS [Szerda], 
      MAX([4]) AS [Csutortok], MAX([5]) AS [Pentek], MAX([6]) AS [Szombat] 
    FROM (
      SELECT C_HETSORSZAMA, C_NYOMTATASINEV, [0], [1], [2], [3], [4], [5], [6]
      FROM (
       SELECT DISTINCT n.C_NAPTARINAPID, DATEPART(dw,n.C_DATUM) AS NAP, t.C_NYOMTATASINEV, n.C_HETSORSZAMA,
        '[' + STUFF((
          SELECT ', ' + CAST(OraSorszam AS VARCHAR(3)) + IIF(tm.C_TIPUS = 1499, '(k)','')
          FROM T_TANULOMULASZTAS_OSSZES tm
            INNER JOIN T_TANITASIORA_OSSZES o ON o.ID = tm.C_TANITASIORAKID
			LEFT JOIN (SELECT DISTINCT OraSorszam, TanitasioraId FROM #OraSorszam) oraSorszam ON oraSorszam.TanitasioraId = o.Id
          WHERE n.C_NAPTARINAPID = o.C_NAPTARINAPID
            AND m.C_ORATANULOIID = tm.C_ORATANULOIID
            AND tm.C_TANEVID = @tanevId
			and tm.torolt='F' and tm.c_intezmenyId=@intezmenyId and o.c_tanevId=@tanevId
			and o.C_OSZTALYCSOPORTID = @csoportId
			and o.TOROLT = 'F'
          ORDER BY o.C_NAPTARINAPID, o.C_ORASZAM
          FOR XML PATH(''), TYPE).value('.', 'varchar(max)'),1,2,'') + '] ' + CAST(SUM(IIF(m.C_IGAZOLT = 'T', 1, 0)) AS varchar(2)) + '/' + CAST(SUM(IIF(m.C_IGAZOLT = 'F', 1, 0)) AS varchar(2)) AS hianyzas
        FROM T_TANITASIORA_OSSZES n
          INNER JOIN T_TANULOMULASZTAS_OSSZES m ON m.C_TANITASIORAKID = n.ID  and m.torolt='F' 
          INNER JOIN T_FELHASZNALO_OSSZES t ON t.ID = m.C_ORATANULOIID
        WHERE 
			n.C_TANEVID = @tanevId 
			AND m.C_TANEVID = @tanevId 
			AND (@iskolaErdekuSzamit = 1 OR C_IGAZOLASTIPUSA <> 1533)
			and n.C_OSZTALYCSOPORTID = @csoportId
			and n.TOROLT = 'F'
        GROUP BY n.C_NAPTARINAPID, C_ORATANULOIID, C_NYOMTATASINEV, n.C_HETSORSZAMA, n.C_DATUM) AS SUB
        PIVOT
        (
        MAX(HIANYZAS)
        FOR NAP IN ([0], [1], [2], [3], [4], [5], [6])
      ) AS PivotTable
    ) AS ASD
    GROUP BY C_HETSORSZAMA, C_NYOMTATASINEV
    ORDER BY C_HETSORSZAMA 

  --Tanuló feljegyzései
SELECT 
	tte.C_TANULOID								AS Tanulo
	,FORMAT(tao.c_datum, 'yyyy.MM.dd.')			AS Idopont
	,d.C_NAME									AS Tipus
	,te.C_TARTALOM								AS Feljegyzes
	,f.C_NYOMTATASINEV							AS Feljegyzo 
FROM T_TANULO_TANULOESEMENY tte
	INNER JOIN T_TANULOESEMENY_OSSZES te ON te.Id = tte.C_TANULOESEMENYID
	INNER JOIN T_TANITASIORA_OSSZES	tao ON tao.Id = te.C_TANITASIORAID
	INNER JOIN T_FELHASZNALO_OSSZES	f ON f.Id = te.C_FELJEGYZOID
	INNER JOIN T_DICTIONARYITEMBASE_OSSZES d ON d.Id = te.C_TIPUS
WHERE 
	C_OSZTALYCSOPORTID = @csoportId
	AND te.TOROLT = 'F'
	AND C_TIPUS <> 1534

  --Tanuló gondviselői
  SELECT 'Gondviselő ('+Rokonsag.Rokonsag+'):' as Fejlec, tcs.c_tanuloid Tanulo, g.c_nev Gondviselo, gcim.Tipus Tipus,gcim.Cim as Cim, gtel.c_telefonszam Telefon, gemail.C_EMAILCIM Email 
  FROM T_TANULOCSOPORT_OSSZES tcs
  	INNER JOIN T_GONDVISELO_OSSZES g ON g.c_tanuloid=tcs.c_tanuloid AND g.torolt='F'
  	LEFT JOIN (
      	SELECT DISTINCT
			GondviseloId										GondviseloId
			,cimTipusa.C_NAME									Tipus
			,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,'')					Cim
		FROM fnGetDokumentumTanuloOrGondviseloCim (1, @tanevId, @csoportid) temp
		INNER JOIN T_DICTIONARYITEMBASE_OSSZES cimTipusa ON cimTipusa.Id = temp.CimTipusa
  	)gcim ON gcim.GondviseloId=g.id
  	LEFT JOIN T_TELEFON_OSSZES gtel ON gtel.c_gondviseloid=g.id AND gtel.torolt='F'
  	LEFT JOIN T_EMAIL_OSSZES gemail ON gemail.c_gondviseloid=g.id AND gemail.torolt='F'
  	LEFT JOIN (SELECT distinct d.id Id, d.c_name Rokonsag FROM T_DICTIONARYITEMBASE_OSSZES d) Rokonsag ON Rokonsag.Id=g.c_rokonsagfoka
  WHERE tcs.c_osztalycsoportid=@csoportId AND tcs.c_tanevid=@tanevid AND tcs.torolt='F'

END
GO
