﻿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,
	@nyomtatvanyNyelvEnum	INT,
	@isKozossegiSzolgalat	BIT,
	@tanitasiHetekSzamaVegzos	 INT,
	@tanitasiHetekSzamaNemVegzos INT,
	@isAltantargyBeszamitasa BIT,
	@isMuveszetOktatasi		BIT = 0

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
		,IIF(Szakkep.ID = 5527, '', Szakkep.C_NAME + '(szakképesítés)')					Szakkepesites
		,IIF(ReszSzakkep.ID = 6108, '', ReszSzakkep.C_NAME + '(részszakképesítés)')		ReszSzakkepesites
		,SzakmaCsop.C_NAME				SzakmaCsoport
		,ROW_NUMBER() OVER(ORDER BY LEN(TorzslapSzam), TorzslapSzam) AS Row#
	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

	DECLARE @minTorzslapszam NVARCHAR(MAX) = (SELECT TorzslapSzam FROM #students WHERE Row# = (SELECT MIN(Row#) FROM #students))
	DECLARE @maxTorzslapszam NVARCHAR(MAX) = (SELECT TorzslapSzam FROM #students WHERE Row# = (SELECT MAX(Row#) FROM #students))	

	DECLARE @csoportVezeto NVARCHAR(MAX) = 
	(	SELECT 
			C_NYOMTATASINEV 
		FROM T_FELHASZNALO_OSSZES felhasznalo 
			INNER JOIN T_CSOPORT_OSSZES csoport ON felhasznalo.ID = csoport.C_CSOPORTVEZETOID 
		WHERE csoport.ID = @osztalyId
	)

	DECLARE @osztalyFonok NVARCHAR(MAX) = 
	(	SELECT 
			C_NYOMTATASINEV 
		FROM T_FELHASZNALO_OSSZES felhasznalo 
			INNER JOIN T_OSZTALY_OSSZES osztaly ON felhasznalo.ID = osztaly.C_OSZTALYFONOKID 
		WHERE osztaly.ID = @osztalyId
	)
	--Intézmény, tanév
	if @isMuveszetOktatasi = 0
	begin
  SELECT DISTINCT 
	 OsztalyCsoport.C_NEV			OsztalyNev
	,Osztaly.C_OSZTALYNAPLOLEIRASA	OsztalyMegjegyzes
	,Osztaly.C_OSZTALYFONOKID		PartnerID
	,IIF(@nyomtatvanyNyelvEnum = 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(@nyomtatvanyNyelvEnum = 0, dbo.fnGetDokumentumDatumFormatum(Osztaly.C_OSZTALYNAPLOMEGNYITASA), FORMAT(Osztaly.C_OSZTALYNAPLOMEGNYITASA, 'dd. MM. yyyy'))	NaploMegnyitasanakDatuma
	,IIF(@nyomtatvanyNyelvEnum = 0, dbo.fnGetDokumentumDatumFormatum(Osztaly.C_OSZTALYNAPLOZARASA), FORMAT(Osztaly.C_OSZTALYNAPLOZARASA, 'dd. MM. yyyy'))			NaploZarasanakDatuma 
	,tanev.C_NEV								Tanev
	,(SELECT COUNT(TanuloId) FROM #students)	TanuloSzam
	,@minTorzslapszam			MinNaploSorszam
	,@maxTorzslapszam			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 
  END
  ELSE
  BEGIN
    SELECT DISTINCT 
	 OsztalyCsoport.C_NEV			OsztalyNev
	,csoport.C_CSOPORTNAPLOLEIRAS	OsztalyMegjegyzes
	,csoport.C_CSOPORTVEZETOID		PartnerID
	,IIF(@nyomtatvanyNyelvEnum = 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(@nyomtatvanyNyelvEnum = 0, dbo.fnGetDokumentumDatumFormatum(csoport.C_CSOPORTNAPLOMEGNYITASA), FORMAT(csoport.C_CSOPORTNAPLOMEGNYITASA, 'dd. MM. yyyy'))	NaploMegnyitasanakDatuma
	,IIF(@nyomtatvanyNyelvEnum = 0, dbo.fnGetDokumentumDatumFormatum(csoport.C_CSOPORTNAPLOZARASA), FORMAT(csoport.C_CSOPORTNAPLOZARASA, 'dd. MM. yyyy'))			NaploZarasanakDatuma 
	,tanev.C_NEV								Tanev
	,(SELECT COUNT(TanuloId) FROM #students)	TanuloSzam
	,@minTorzslapszam			MinNaploSorszam
	,@maxTorzslapszam			MaxNaploSorszam
  FROM T_OSZTALYCSOPORT_OSSZES OsztalyCsoport 
  	INNER JOIN T_CSOPORT_OSSZES csoport ON OsztalyCsoport.ID = csoport.ID AND csoport.TOROLT = 'F'
  	LEFT JOIN T_FELHASZNALO_OSSZES ofo ON ofo.ID = csoport.C_CSOPORTVEZETOID 
  	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 
  END
	--Osztály, évfolyam
	SELECT 
		 OsztalyCsoport.C_NEV
		,EvfolyamTipusa.C_NAME_1 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 DISTINCT 
		felhasznalo.ID					TanuloId
		,felhasznalo.Azonosito			Azonosito
		,IIF(@nyomtatvanyNyelvEnum = 0, felhasznalo.Nev, felhasznalo.Elotag + ' '  + felhasznalo.VezetekNev) 
										Nev
		,IIF(@nyomtatvanyNyelvEnum = 0, dbo.fnGetDokumentumDatumFormatum(felhasznalo.SzuletesiDatum), FORMAT(felhasznalo.SzuletesiDatum, 'dd. MM. yyyy')) 
										SzuletesiDatum
		,felhasznalo.SzuletesiHely		SzuletesiHely
		,IIF(@nyomtatvanyNyelvEnum = 0, LOWER(allampolgarsag.C_NAME), dbo.fnGetDokumentumIdegenNyelv(@nyomtatvanyNyelvEnum, felhasznalo.Allampolgarsag)) 
										Allampolgarsag
		,felhasznalo.Anyjaneve			AnyjaNeve
		,IIF(@nyomtatvanyNyelvEnum = 0, szorszag.C_NAME, dbo.fnGetDokumentumIdegenNyelv(@nyomtatvanyNyelvEnum, 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
	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(@nyomtatvanyNyelvEnum = 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 
				g.C_TANULOID TanuloId
				,STUFF((SELECT C_NEV + IIF(@nyomtatvanyNyelvEnum = 0, ' (' + LOWER(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'
							AND g.C_TANEVID = @tanevId 
						FOR XML PATH(''), TYPE)
					.value('.','NVARCHAR(MAX)'),1,0,'') Gondviselok
			FROM T_GONDVISELO_OSSZES g
			WHERE 
				g.TOROLT = 'F'
				AND	g.C_ISTORVENYESKEPVISELO = 'T'
				AND g.C_TANEVID = @tanevId 
			) 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
		,ReszSzakkepesites
	FROM #TanuloAdatok ORDER BY LEN(TorzslapSzam), TorzslapSzam

	--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, 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,
		@isMuveszetOktatasi = @isMuveszetOktatasi
	
	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				FLOAT
		,RENDEZ1				INT
		,RENDEZ2				NVARCHAR(MAX)
		,RENDEZ3				INT
		,RENDEZ4				INT
		,RENDEZ5				NVARCHAR(MAX)
	)
	
	INSERT INTO @Ertekelesek
	EXEC sp_GetDokumentumErtekelesek
		@osztalyId = @osztalyId,
		@tanevId = @tanevId,
		@ertekelesTipus =@ertekelesTipus,
		@nyomtatvanyNyelvEnum = @nyomtatvanyNyelvEnum,
		@tanitasiHetekSzamaVegzos = @tanitasiHetekSzamaVegzos,
		@tanitasiHetekSzamaNemVegzos = @tanitasiHetekSzamaNemVegzos,
		@isAltantargyBeszamitasa = @isAltantargyBeszamitasa,
		@isMuveszetOktatasi = @isMuveszetOktatasi

	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 Nev

	--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 
		 s.TanuloId				TanuloId
		,s.TanuloCsoportId		TanuloCsoportId
		,ISNULL(Tanulo.C_SNIKIALLITOINTEZMENY, '')																			SNIKiallitoIntezmeny
		,dbo.fnGetDokumentumDatumFormatum(Tanulo.C_SNIOKMANYERVENYESSEGKEZDETE)												SNIKezdete
		,dbo.fnGetDokumentumDatumFormatum(Tanulo.C_SNIKONTROLLIDOPONT)														SNIKontrolIdopont
		,ISNULL(Tanulo.C_ERTELMIFOGYATEKOSOKMANYSZAM + '(Értelmi fogyatékos okmányszám) ', '')
		+ISNULL(Tanulo.C_LATASSERULTOKMANYSZAM + '(Látássérült okmányszám) ', '')						
		+ISNULL(Tanulo.C_HALLASSERULTOKMANYSZAM + '(Hallássérült okmányszám) ', '')					
		+ISNULL(Tanulo.C_BESZEDFOGYATEKOSOKMANYSZAM + '(Beszédfogyatékos okmányszám) ', '')		
		+ISNULL(Tanulo.C_MOZGASSERULTOKMANYSZAM + '(Mozgáskorlátozott okmányszám) ', '')
		+ISNULL(Tanulo.C_DISZGRAFIAOKMANYSZAM + '(Diszgráfia okmányszám) ', '')
		+ISNULL(Tanulo.C_DISZKALKULIAOKMANYSZAM + '(Diszkalkulia okmányszám) ', '')
		+ISNULL(Tanulo.C_DISZLEXIAOKMANYSZAM + '(Diszlexia okmányszám) ', '')	
		+ISNULL(TANULO.C_VISELKEDESORGANIKUSOKMANYSZA + '(Viselkedés fejlődésének rendellenessége okmányszám) ', '')
		+ISNULL(TANULO.C_VISELKEDESNEMORGANIKUSOKMANY + '(Viselkedés fejlődésének rendellenessége okmányszám) ', '')		
		+ISNULL(TANULO.C_MEGISMEROORGANIKUSOKMANYSZAM + '(Megismerő funkciók rendellenessége okmányszám) ', '')		
		+ISNULL(TANULO.C_MEGISMERONEMORGANIKUSOKMANYS + '(Megismerő funkciók rendellenessége okmányszám) ', '')				SNIOkmanyszamok
		,ISNULL(Tanulo.C_BEILLESZKEDESIPROBLEMAVALKUZ, '')		BTM 
	FROM #students s
	INNER JOIN T_TANULO_OSSZES Tanulo ON Tanulo.Id =  s.TanuloId
	WHERE
		Tanulo.C_SAJATOSNEVELESU = 'T'
	
	DROP TABLE #students
	DROP TABLE #TanuloAdatok 
END 

