﻿SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

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

CREATE PROCEDURE [dbo].[sp_GetTorzslap]
	@osztalyId				INT,
	@tanevId				INT,
	@ertekelesTipus			INT,
	@kesesTipus				INT,
	@elmeletiOraPercben		INT = 45,
    @gyakorlatiOraPercben	INT = 60,
	@iskolaErdekuSzamit		BIT,
	@isNemet				BIT 

AS
BEGIN
	SET NOCOUNT ON;

	--Osztályhoz tartozó tanulók
	DECLARE @NaploSorszam TABLE (
		TanuloId INT
		,Sorszam INT	
		)

	INSERT INTO @NaploSorszam
	EXEC sp_GetDokumentumTanuloNaploSorszam
		@osztalyId = @osztalyId

	DECLARE @Tanulok TABLE (TanuloId int, KilepesDatum DATE, NaploSorszam INT)
	INSERT INTO @Tanulok
	SELECT 
		t.TanuloId
		,KilepesDatum 
		,n.Sorszam
	FROM fnGetDokumentumOsztalyokCsoportokTanuloi(@tanevId, @osztalyId, 'T') t
		INNER JOIN @NaploSorszam n ON n.TanuloId = t.TanuloId

	--Intézmény, tanév
  SELECT DISTINCT 
	ocs.C_NEV					OsztalyNev
	,o.C_OSZTALYNAPLOLEIRASA	OsztalyMegjegyzes
	,o.C_OSZTALYFONOKID			PartnerID
	,IIF(@isNemet = 0, ofo.C_NYOMTATASINEV, ofo.C_UTONEV + ' ' + ofo.C_VEZETEKNEV)		Osztalyfonok
	,i.C_IGAZGATONEVE			IntezmenyVezeto
	,i.C_NEV					IntezmenyNeve
	,i.C_VAROS					IntezmenyVaros
	,dbo.fnGetDokumentumIntezmenyCime(@tanevId)	IntezmenyCime
	,i.C_OMKOD					IntezmenyOMKod
	,IIF(@isNemet = 0, dbo.fnGetDokumentumDatumFormatum(o.C_OSZTALYNAPLOMEGNYITASA), FORMAT(o.C_OSZTALYNAPLOMEGNYITASA, 'dd. MM. yyyy')) NaploMegnyitasanakDatuma
	,IIF(@isNemet = 0, dbo.fnGetDokumentumDatumFormatum(o.C_OSZTALYNAPLOZARASA), FORMAT(o.C_OSZTALYNAPLOZARASA, 'dd. MM. yyyy'))			NaploZarasanakDatuma 
	,tanev.C_NEV TANEV
	,(SELECT COUNT(TanuloId) FROM @Tanulok) TanuloSzam
	,(SELECT MIN(NaploSorszam) FROM @Tanulok) MinNaploSorszam
	,(SELECT MAX(NaploSorszam) FROM @Tanulok) MaxNaploSorszam
  FROM T_OSZTALYCSOPORT_OSSZES ocs 
  	INNER JOIN T_OSZTALY_OSSZES o ON ocs.ID = o.ID and o.torolt='F'
  	LEFT JOIN T_FELHASZNALO_OSSZES ofo ON ofo.ID = o.C_OSZTALYFONOKID 
  	INNER JOIN T_INTEZMENYADATOK_OSSZES i on i.C_INTEZMENYID=ocs.C_INTEZMENYID AND i.C_TANEVID = @tanevId
	INNER JOIN T_TANEV_OSSZES tanev ON tanev.ID = i.C_TANEVID and tanev.TOROLT = 'F'
  WHERE ocs.ID = @osztalyId 

	--Osztály, évfolyam
	SELECT 
		T_OSZTALYCSOPORT_OSSZES.C_NEV,
		EvfolyamTipusa.C_NAME C_EVFOLYAMTIPUSA_DNAME
	FROM T_OSZTALYCSOPORT_OSSZES 
		INNER JOIN T_DICTIONARYITEMBASE_OSSZES EvfolyamTipusa ON EvfolyamTipusa.Id = T_OSZTALYCSOPORT_OSSZES.C_EVFOLYAMTIPUSA
	WHERE 
		T_OSZTALYCSOPORT_OSSZES.ID = @osztalyId
		AND EvfolyamTipusa.c_tanevid = @tanevId

	--Tanuló adatok
	SELECT DISTINCT 
		felhasznalo.ID TanuloId,
		felhasznalo.Azonosito,
		IIF(@isNemet = 0, felhasznalo.Nev, felhasznalo.Elotag + ' '  + felhasznalo.VezetekNev) Nev,
		IIF(@isNemet = 0, dbo.fnGetDokumentumDatumFormatum(felhasznalo.SzuletesiDatum), FORMAT(felhasznalo.SzuletesiDatum, 'dd. MM. yyyy')) SzuletesiDatum,
		felhasznalo.SzuletesiHely,
		IIF(@isNemet = 0, allampolgarsag.C_NAME, dbo.fnGetDokumentumNemet(felhasznalo.Allampolgarsag)) Allampolgarsag,
		felhasznalo.Anyjaneve,
		IIF(@isNemet = 0, szorszag.C_NAME, dbo.fnGetDokumentumNemet(felhasznalo.SzuletesiOrszag)) SzuletesiOrszag,
		felhasznalo.TorzslapSzam,
		gondviselo.Gondviselok GondviseloNeve,
		naploSorszam.Sorszam NaploSorszam,
		dbo.fnGetDokumentumDatumFormatum(felhasznalo.KilepesDatum) KilepesDatum,
		felhasznalo.Nev Nev2,
		Tanulo.C_SAJATOSNEVELESU	SajatosNevelesu
	INTO #TanuloAdatok
	FROM
		(
			SELECT 
				 T_FELHASZNALO_OSSZES.ID AS ID,
				 T_FELHASZNALO_OSSZES.C_OKTATASIAZONOSITO Azonosito,
				 T_FELHASZNALO_OSSZES.C_NYOMTATASINEV Nev,
				 T_FELHASZNALO_OSSZES.C_VEZETEKNEV VezetekNev,
				 T_FELHASZNALO_OSSZES.C_UTONEV Elotag,
				 T_FELHASZNALO_OSSZES.C_SZULETESIDATUM SzuletesiDatum,
				 T_FELHASZNALO_OSSZES.C_SZULETESIHELY SzuletesiHely,
				 T_FELHASZNALO_OSSZES.C_SZULETESIORSZAG SzuletesiOrszag,
				 T_FELHASZNALO_OSSZES.C_ALLAMPOLGARSAGA Allampolgarsag,
				 IIF(@isNemet = 0, T_FELHASZNALO_OSSZES.C_ANYJANEVE, LTRIM(SUBSTRING(C_ANYJANEVE, C_ANYJANEVEELVALASZTO + 1 , LEN(C_ANYJANEVE)-C_ANYJANEVEELVALASZTO)) + ' ' + LTRIM(SUBSTRING(C_ANYJANEVE, 0, C_ANYJANEVEELVALASZTO + 1))) Anyjaneve,
				 T_FELHASZNALO_OSSZES.C_NYILVANTARTASISZAM TorzslapSzam,
				 TANCSOPORT.KilepesDatum
				 FROM T_FELHASZNALO_OSSZES          
					INNER JOIN @Tanulok TANCSOPORT
						ON TANCSOPORT.TanuloId = T_FELHASZNALO_OSSZES.ID 
				 WHERE  
					T_FELHASZNALO_OSSZES.C_TANEVID = @tanevId
		) felhasznalo
	INNER JOIN T_TANULO_OSSZES Tanulo ON Tanulo.Id = felhasznalo.Id
	INNER JOIN T_DICTIONARYITEMBASE_OSSZES allampolgarsag ON allampolgarsag.ID = felhasznalo.Allampolgarsag
	INNER JOIN T_DICTIONARYITEMBASE_OSSZES szorszag ON szorszag.ID = felhasznalo.SzuletesiOrszag
	LEFT JOIN 
			(
			SELECT DISTINCT
				g.C_TANULOID TanuloId
				,STUFF((SELECT C_NEV + IIF(@isNemet = 0, ' (' + d.C_NAME +')', '') + CHAR(13) + CHAR(10) 
						FROM T_GONDVISELO_OSSZES bg		
							INNER JOIN T_DICTIONARYITEMBASE_OSSZES d on d.ID = bg.C_ROKONSAGFOKA AND d.C_TANEVID = bg.C_TANEVID				
						WHERE 
							bg.C_TANULOID=g.C_TANULOID
							AND bg.TOROLT = 'F'
						FOR XML PATH(''), TYPE)
					.value('.','NVARCHAR(MAX)'),1,0,'') Gondviselok
			FROM T_GONDVISELO_OSSZES g
			) gondviselo on felhasznalo.ID = gondviselo.TanuloId
	LEFT JOIN @NaploSorszam naploSorszam on naploSorszam.TanuloId = felhasznalo.ID
	ORDER BY felhasznalo.Nev

	SELECT * FROM #TanuloAdatok ORDER BY NaploSorszam

	--Határozat
	SELECT DISTINCT
		C_TANULOID			TanuloId
		,tcs.C_ZARADEK		Bejegyzes
	FROM T_TANULOCSOPORT_OSSZES tcs
	WHERE 
		tcs.C_TANULOID IN (SELECT TanuloId from @Tanulok)
		AND TOROLT = 'F'
		AND C_ZARADEK IS NOT NULL 
		AND LEN(C_ZARADEK) > 0
		AND C_TANEVID = @tanevId
		AND C_OSZTALYCSOPORTID IN (SELECT ID FROM T_OSZTALY_OSSZES WHERE TOROLT = 'F')

	UNION 

	SELECT DISTINCT
		C_TANULOID			TanuloId
		,tcs.C_VEGZARADEK	Bejegyzes
	FROM T_TANULOCSOPORT_OSSZES tcs
	WHERE 
		tcs.C_TANULOID IN (SELECT TanuloId from @Tanulok)
		AND TOROLT = 'F'
		AND C_VEGZARADEK IS NOT NULL 
		AND LEN(C_VEGZARADEK) > 0
		AND C_TANEVID = @tanevId
		AND C_OSZTALYCSOPORTID IN (SELECT ID FROM T_OSZTALY_OSSZES WHERE TOROLT = 'F')

	--Egyéb bejegyzések 
	SELECT 
		 Tanuloid
		 ,Bejegyzes
		 ,Tipus_DNAME
	FROM 
	(
		SELECT 
			bejegyzes.TanuloId	TanuloId
			,Tartalom			Bejegyzes 
			,C_NAME				Tipus_DNAME		
			,dbo.fnGetDokumentumDatumFormatum(bejegyzes.Datum)	Datum
			FROM fnGetDokumentumTanulokFeljegyzesei(@tanevId, @osztalyId) bejegyzes
			INNER JOIN T_DICTIONARYITEMBASE_OSSZES d ON d.ID = Tipusa AND C_TANEVID = @tanevId AND d.TOROLT = 'F'
		WHERE
			Tipusa IN (1539, 1545, 1546, 1547, 1548, 1549, 1550, 1551, 1552, 1553, 5477, 5478, 5478, 5479, 5481, 5480)

		UNION 

		SELECT 
			s.TanuloId tanuloId 
			, mentesseg.mentessegOka
			, ISNULL(IIF(mentesseg = '', '', LEFT(mentesseg, LEN(mentesseg)- 1)),' ') + ' (' + mentesseg.tantargyNev +')'
			, dbo.fnGetDokumentumDatumFormatum(C_KEZDETE)
		FROM @Tanulok s
		INNER JOIN  (SELECT DISTINCT 
								mentesseg.C_TANULOID tanuloId
								, IIF(t.C_NEV <> C_NEVNYOMTATVANYBAN AND C_NEVNYOMTATVANYBAN IS NOT NULL, C_NEVNYOMTATVANYBAN + ' (' + t.C_NEV + ')', t.C_NEV) tantargyNev
								, mentesseg.C_MENTESSEGOKA  + ' ' + ISNULL('(' + FORMAT(C_KEZDETE, 'yyyy.MM.dd.') + ' - ' + FORMAT(C_VEGE, 'yyyy.MM.dd.') + ')', '' ) mentessegOka
								, IIF(mentesseg.C_ERTEKELESMENTESITES = 'T', 'Értékelésmentesség, ', '') + IIF(mentesseg.C_ORAMENTESITES = 'T', 'Óramentesség, ', '') as mentesseg 
								, mentesseg.C_KEZDETE
				FROM T_TANULOMENTESSEG_OSSZES mentesseg
					INNER JOIN T_TANTARGY_OSSZES t on t.ID = mentesseg.C_TANTARGYID
					INNER JOIN @Tanulok s ON s.TanuloId = mentesseg.C_TANULOID
				WHERE 
					mentesseg.TOROLT='F' 
					AND mentesseg.C_TANEVID = @tanevId
				) mentesseg ON s.TanuloId=mentesseg.TANULOID
		)a
		ORDER BY Datum

	-- MULASZTÁSOK
	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 = @osztalyId,
		@tanevId = @tanevId,
		@elmeletGyakorlat = 0,
		@kesesTipus = @kesesTipus,
		@elmeletiOraPercben = @elmeletiOraPercben,
		@gyakorlatiOraPercben = @gyakorlatiOraPercben,
		@ertekelesTipus = @ertekelesTipus,
		@iskolaErdekuSzamit = @iskolaErdekuSzamit
	
	SELECT 
		 TanuloTable.TanuloId 
		,Igazolt 
		,Igazolatlan 
		,ElmeletIgazolt 
		,ElmeletIgazolatlan 
		,GyakorlatIgazolt 
		,GyakorlatIgazolatlan 
		,ElmeletOsszes
		,GyakorlatOsszes
		,Osszes	
	FROM @Mulasztasok mulasztasok
		INNER JOIN @Tanulok TanuloTable ON mulasztasok.TanuloId = TanuloTable.TanuloId

	-- ÉRTÉKELÉSEK
	DECLARE @Ertekelesek TABLE (
		TanuloId			 INT
		,Targy				 NVARCHAR(MAX)
		,Jegyzet			 NVARCHAR(MAX)
		,Ertekeles			 NVARCHAR(MAX)	
		,ErtekelesJegyzettel NVARCHAR(MAX)	
		,Oraszam			 INT
		,RENDEZ				 INT
	)
	
	INSERT INTO @Ertekelesek
	EXEC sp_GetDokumentumErtekelesek
		@osztalyId = @osztalyId,
		@tanevId = @tanevId,
		@ertekelesTipus =@ertekelesTipus,
		@isNemet = @isNemet

	SELECT 
		TanuloId			
		,Targy		
		,Jegyzet
		,Ertekeles			
		,ErtekelesJegyzettel				
		,Oraszam		
		,RENDEZ
	FROM 
	@Ertekelesek

	--Tanuló lista
	SELECT 
		Nev
		,NaploSorszam
		,TorzslapSzam 
		,KilepesDatum
	FROM #TanuloAdatok
	/*WHERE 
		KilepesDatum IS NULL OR KilepesDatum >= ISNULL((SELECT C_OSZTALYNAPLOZARASA FROM T_OSZTALY_OSSZES WHERE ID = @osztalyId), GETDATE())*/
	ORDER BY NaploSorszam

	--Közösségi szolgálat
	SELECT 
		TanuloId
		,dbo.fnGetDokumentumDatumFormatum(Datum) Datum
		,ISNULL(' - ' + Megjegyzes, '') Megjegyzes
		,Oraszam
		,TeljesitesHelye
		,FeljegyzoNeve
		,Tipus 
	FROM fnGetDokumentumKozossegiSzolgalatOsztalyonkent(@tanevId, @osztalyId)
	ORDER BY Datum

	SELECT 
		TanuloId 
	FROM #TanuloAdatok
	WHERE
		SajatosNevelesu = 'T'

	DROP TABLE #TanuloAdatok 
END 

GO