﻿SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

IF OBJECT_ID('sp_GetTorzslap') IS NOT NULL
BEGIN
  DROP PROCEDURE sp_GetTorzslap
END  
GO

CREATE PROCEDURE sp_GetTorzslap
	@osztalyId				INT,
	@tanevId				INT,
	@ertekelesTipus			INT,
	@kesesTipus				INT,
	@elmeletiOraPercben		INT = 45,
    @gyakorlatiOraPercben	INT = 45,
	@iskolaErdekuSzamit		BIT,
	@isNemet				BIT ,
	@isKozossegiSzolgalat	BIT,
	@tanitasiHetekSzamaVegzos	INT,
	@tanitasiHetekSzamaNemVegzos INT

AS
BEGIN	
	SET NOCOUNT ON;

	SELECT 
		 OsztalyTanuloi.TanuloId		TanuloId
		,OsztalyTanuloi.NaploSorszam	NaploSorszam
		,OsztalyTanuloi.TorzslapSzam	TorzslapSzam	
		,OsztalyTanuloi.TanuloCsoportId	TanuloCsoportId
		,OsztalyTanuloi.BelepesDatum	BelepesDatum
		,OsztalyTanuloi.KilepesDatum	KilepesDatum
		,Agazat.C_NAME					Agazat
		,Szakkep.C_NAME					Szakkepesites
		,ReszSzakkep.C_NAME				ReszSzakkepesites
		,SzakmaCsop.C_NAME				SzakmaCsoport
	INTO #students
	FROM fnGetDokumentumOsztalyokCsoportokTanuloi(@tanevId, @osztalyId, 'T') OsztalyTanuloi
		LEFT JOIN T_DICTIONARYITEMBASE_OSSZES Agazat ON Agazat.ID = OsztalyTanuloi.AgazatId AND Agazat.C_TANEVID = @tanevId
		LEFT JOIN T_DICTIONARYITEMBASE_OSSZES Szakkep ON Szakkep.ID = OsztalyTanuloi.SzakkepesitesId AND Szakkep.C_TANEVID = @tanevId
		LEFT JOIN T_DICTIONARYITEMBASE_OSSZES ReszSzakkep ON ReszSzakkep.ID = OsztalyTanuloi.ReszSzakkepeitesId AND ReszSzakkep.C_TANEVID = @tanevId
		LEFT JOIN T_DICTIONARYITEMBASE_OSSZES SzakmaCsop ON SzakmaCsop.ID = OsztalyTanuloi.SzakmaCsoportId AND SzakmaCsop.C_TANEVID = @tanevId

	--Intézmény, tanév
  SELECT DISTINCT 
	 OsztalyCsoport.C_NEV			OsztalyNev
	,Osztaly.C_OSZTALYNAPLOLEIRASA	OsztalyMegjegyzes
	,Osztaly.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(Osztaly.C_OSZTALYNAPLOMEGNYITASA), FORMAT(Osztaly.C_OSZTALYNAPLOMEGNYITASA, 'dd. MM. yyyy'))	NaploMegnyitasanakDatuma
	,IIF(@isNemet = 0, dbo.fnGetDokumentumDatumFormatum(Osztaly.C_OSZTALYNAPLOZARASA), FORMAT(Osztaly.C_OSZTALYNAPLOZARASA, 'dd. MM. yyyy'))			NaploZarasanakDatuma 
	,tanev.C_NEV								Tanev
	,(SELECT COUNT(TanuloId) FROM #students)	TanuloSzam
	,(SELECT MIN(NaploSorszam) FROM #students)	MinNaploSorszam
	,(SELECT MAX(NaploSorszam) FROM #students)	MaxNaploSorszam
  FROM T_OSZTALYCSOPORT_OSSZES OsztalyCsoport 
  	INNER JOIN T_OSZTALY_OSSZES Osztaly ON OsztalyCsoport.ID = Osztaly.ID AND Osztaly.TOROLT = 'F'
  	LEFT JOIN T_FELHASZNALO_OSSZES ofo ON ofo.ID = Osztaly.C_OSZTALYFONOKID 
  	INNER JOIN T_INTEZMENYADATOK_OSSZES i on i.C_INTEZMENYID = OsztalyCsoport.C_INTEZMENYID AND i.C_TANEVID = @tanevId
	INNER JOIN T_TANEV_OSSZES tanev ON tanev.ID = i.C_TANEVID and tanev.TOROLT = 'F'
  WHERE OsztalyCsoport.ID = @osztalyId 

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

	--Tanuló adatok
	SELECT 
		felhasznalo.ID					TanuloId
		,felhasznalo.Azonosito			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		SzuletesiHely
		,IIF(@isNemet = 0, allampolgarsag.C_NAME, dbo.fnGetDokumentumNemet(felhasznalo.Allampolgarsag)) 
										Allampolgarsag
		,felhasznalo.Anyjaneve			AnyjaNeve
		,IIF(@isNemet = 0, szorszag.C_NAME, dbo.fnGetDokumentumNemet(felhasznalo.SzuletesiOrszag))		
										SzuletesiOrszag
		,OsztalyTanuloi.TorzslapSzam	TorzslapSzam
		,gondviselo.Gondviselok			GondviseloNeve
		,OsztalyTanuloi.NaploSorszam	NaploSorszam
		,felhasznalo.Nev				Nev2
		,Tanulo.C_SAJATOSNEVELESU		SajatosNevelesu
		,OsztalyTanuloi.TanuloCsoportId	TanuloCsoportId
		,OsztalyTanuloi.BelepesDatum	BelepesDatum
		,OsztalyTanuloi.KilepesDatum	KilepesDatum
		,OsztalyTanuloi.Agazat			Agazat
		,OsztalyTanuloi.Szakkepesites	Szakkepesites
		,OsztalyTanuloi.ReszSzakkepesites ReszSzakkepesites
		,OsztalyTanuloi.SzakmaCsoport	SzakmaCsoport
		,ISNULL(Tanulo.C_SNIKIALLITOINTEZMENY, '')														SNIKiallitoIntezmeny
		,dbo.fnGetDokumentumDatumFormatum(ISNULL(Tanulo.C_SNIOKMANYERVENYESSEGKEZDETE,''))				SNIKezdete
		,dbo.fnGetDokumentumDatumFormatum(ISNULL(Tanulo.C_SNIKONTROLLIDOPONT, ''))						SNIKontrolIdopont
		,ISNULL(Tanulo.C_ERTELMIFOGYATEKOSOKMANYSZAM + ' (Értelmi fogyatékos okmányszám)', '')			ErtelmiFogyatekosOkmanyszam
		,ISNULL(Tanulo.C_LATASSERULTOKMANYSZAM + ' (Látássérült okmányszám)', '')						LatasserultOkmanyszam
		,ISNULL(Tanulo.C_HALLASSERULTOKMANYSZAM + ' (Hallássérült okmányszám)', '')						HallasSerultOkomanyszam
		,ISNULL(Tanulo.C_BESZEDFOGYATEKOSOKMANYSZAM + ' (Beszédfogyatékos okmányszám)', '')				BeszedFogyatekosOkmanyszam
		,ISNULL(Tanulo.C_BEILLESZKEDESIPROBLEMAVALKUZ, '')												BTM
	INTO #TanuloAdatok
	FROM
		(
			SELECT 
				  ID					ID
				 ,C_OKTATASIAZONOSITO	Azonosito
				 ,C_NYOMTATASINEV		Nev
				 ,C_VEZETEKNEV			VezetekNev
				 ,C_UTONEV				Elotag
				 ,C_SZULETESIDATUM		SzuletesiDatum
				 ,C_SZULETESIHELY		SzuletesiHely
				 ,C_SZULETESIORSZAG	SzuletesiOrszag
				 ,C_ALLAMPOLGARSAGA	Allampolgarsag
				 ,IIF(@isNemet = 0, C_ANYJANEVE, LTRIM(SUBSTRING(C_ANYJANEVE, C_ANYJANEVEELVALASZTO + 1 , LEN(C_ANYJANEVE) - C_ANYJANEVEELVALASZTO)) + ' ' + LTRIM(SUBSTRING(C_ANYJANEVE, 0, C_ANYJANEVEELVALASZTO + 1))) 
										Anyjaneve
				 FROM T_FELHASZNALO_OSSZES          						
		) felhasznalo
	INNER JOIN T_TANULO_OSSZES Tanulo ON Tanulo.Id = felhasznalo.Id
	INNER JOIN T_DICTIONARYITEMBASE_OSSZES allampolgarsag ON allampolgarsag.ID = felhasznalo.Allampolgarsag AND allampolgarsag.C_TANEVID = @tanevId
	INNER JOIN T_DICTIONARYITEMBASE_OSSZES szorszag ON szorszag.ID = felhasznalo.SzuletesiOrszag AND szorszag.C_TANEVID = @tanevId
	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.C_ISTORVENYESKEPVISELO = 'T'
							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
	INNER JOIN #students OsztalyTanuloi ON OsztalyTanuloi.TanuloId = felhasznalo.ID
	ORDER BY felhasznalo.Nev

	SELECT 
		TanuloId
		,Azonosito
		,Nev
		,SzuletesiDatum
		,SzuletesiHely
		,Allampolgarsag
		,Anyjaneve
		,SzuletesiOrszag
		,TorzslapSzam
		,GondviseloNeve
		,NaploSorszam
		,Nev2
		,SajatosNevelesu
		,TanuloCsoportId
		,BelepesDatum
		,KilepesDatum
		,Szakkepesites
		,SNIKiallitoIntezmeny
		,SNIKezdete
		,SNIKontrolIdopont
		,ErtelmiFogyatekosOkmanyszam
		,LatasserultOkmanyszam
		,HallasSerultOkomanyszam
		,BeszedFogyatekosOkmanyszam
		,BTM
	FROM #TanuloAdatok ORDER BY NaploSorszam

	--Határozat
	SELECT 
		 TanuloId
		,TanuloCsoportId
		,Bejegyzes
	FROM fnGetDokumentumTanuloZaradekai(@tanevId, @osztalyId)

	--Egyéb bejegyzések 
	SELECT 
		  Tanuloid
		 ,TanuloCsoportId
		 ,Bejegyzes
		 ,Tipus_DNAME
	FROM 
	(
		SELECT 
			 bejegyzes.TanuloId	TanuloId
			,s.TanuloCsoportId
			,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'
			INNER JOIN #students s ON s.TanuloId = bejegyzes.TanuloId
		WHERE
			Tipusa IN (1539, 1545, 1546, 1547, 1548, 1549, 1550, 1551, 1552, 1553, 5477, 5478, 5478, 5479, 5481, 5480)
			AND BelepesDatum <= Datum
			AND (KilepesDatum IS NULL OR KilepesDatum >= Datum)

		UNION 

		SELECT 
			TanuloId	
			,TanuloCsoportId
			,TantargyNev
			,MentessegOka
			,dbo.fnGetDokumentumDatumFormatum(Kezdete)
		FROM fnGetDokumentumTanuloMentessegei(@tanevId, @osztalyId)
		)a
		ORDER BY Datum

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

	-- ÉRTÉKELÉSEK
	DECLARE @Ertekelesek TABLE (
		TanuloId				INT
		,TanuloCsoportId		INT
		,Targy					NVARCHAR(MAX)
		,Jegyzet				NVARCHAR(MAX)
		,Ertekeles				NVARCHAR(MAX)
		,ErtekelesValue			INT
		,ErtekelesJegyzettel	NVARCHAR(MAX)	
		,Oraszam				INT
		,RENDEZ1				INT
		,RENDEZ2				NVARCHAR(MAX)
		,RENDEZ3				INT
		,RENDEZ4				INT
		,RENDEZ5				NVARCHAR(MAX)
	)
	
	INSERT INTO @Ertekelesek
	EXEC sp_GetDokumentumErtekelesek
		@osztalyId = @osztalyId,
		@tanevId = @tanevId,
		@ertekelesTipus =@ertekelesTipus,
		@isNemet = @isNemet,
		@tanitasiHetekSzamaVegzos = @tanitasiHetekSzamaVegzos,
		@tanitasiHetekSzamaNemVegzos = @tanitasiHetekSzamaNemVegzos

	SELECT 
		TanuloId		
		,TanuloCsoportId	
		,Targy		
		,Jegyzet
		,Ertekeles			
		,ErtekelesJegyzettel				
		,Oraszam		
		,RENDEZ1	RENDEZ
	FROM @Ertekelesek
	ORDER BY RENDEZ1, RENDEZ2, RENDEZ3, RENDEZ4, RENDEZ5

	--Tanuló lista
	SELECT 
		 Nev
		,NaploSorszam
		,TorzslapSzam 
		,dbo.fnGetDokumentumDatumFormatum (KilepesDatum) KilepesDatum
	FROM #TanuloAdatok
	ORDER BY NaploSorszam

	--Közösségi szolgálat
	SELECT DISTINCT
		 OsztalyTanuloi.TanuloId
		,OsztalyTanuloi.TanuloCsoportId
		,dbo.fnGetDokumentumDatumFormatum(Datum)	Datum
		,ISNULL(' - ' + Megjegyzes, '')				Megjegyzes
		,Oraszam
		,TeljesitesHelye
		,FeljegyzoNeve
		,Tipus
		,KozossegiSzolgalatId
	FROM fnGetDokumentumKozossegiSzolgalatOsztalyonkent(@tanevId, @osztalyId) KozossegiSzolgalat
		INNER JOIN #students OsztalyTanuloi ON OsztalyTanuloi.TanuloId = KozossegiSzolgalat.TanuloId 
	WHERE 
		BelepesDatum <= Datum
		AND (OsztalyTanuloi.KilepesDatum IS NULL OR OsztalyTanuloi.KilepesDatum >= Datum)
		AND @isKozossegiSzolgalat = 1
	ORDER BY Datum

	SELECT 
		 TanuloId
		,TanuloCsoportId 
	FROM #TanuloAdatok
	WHERE
		SajatosNevelesu = 'T'
		AND (KilepesDatum IS NULL OR KilepesDatum >= GETDATE())
	
	DROP TABLE #students
	DROP TABLE #TanuloAdatok 
END 

GO