﻿GO

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 = 60,
	@iskolaErdekuSzamit		BIT
AS
BEGIN
	SET NOCOUNT ON;

	--Osztályhoz tartozó tanulók
	DECLARE @Tanulok TABLE (TanuloId int, KilepesDatum DATE)
	INSERT INTO @Tanulok
	SELECT TanuloId, KilepesDatum FROM fnGetDokumentumOsztalyokCsoportokTanuloi(@tanevId, @osztalyId, 'T') 

	--Intézmény, tanév
  SELECT DISTINCT 
	ocs.C_NEV					OsztalyNev
	,o.C_OSZTALYNAPLOLEIRASA	OsztalyMegjegyzes
	,o.C_OSZTALYFONOKID			PartnerID
	,ofo.C_NYOMTATASINEV		Osztalyfonok
	,i.C_IGAZGATONEVE			IntezmenyVezeto
	,i.C_NEV					IntezmenyNeve
	,i.C_IRANYITOSZAM			IntezmenyIranyitoszam
	,i.C_VAROS					IntezmenyVaros
	,i.C_CIME					IntezmenyCime
	,i.C_OMKOD					IntezmenyOMKod
	,FORMAT(o.c_osztalynaplomegnyitasa, 'yyyy. MMMM dd.', 'hu-hu')	NaploMegnyitasanakDatuma
	,FORMAT(o.c_osztalynaplozarasa, 'yyyy. MMMM dd.', 'hu-hu')		NaploZarasanakDatuma 
	,tanev.C_NEV TANEV
	,(SELECT COUNT(TanuloId) FROM @Tanulok) TanuloSzam
  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,
		T_OSZTALYCSOPORT_OSSZES.C_EVFOLYAMTIPUSA
	FROM T_OSZTALYCSOPORT_OSSZES 
	WHERE 
		T_OSZTALYCSOPORT_OSSZES.ID = @osztalyId

	--Tanuló adatok
	DECLARE @NaploSorszam TABLE (
		TanuloId INT
		,Sorszam INT	
		)

	INSERT INTO @NaploSorszam
	EXEC sp_GetDokumentumTanuloNaploSorszam
		@osztalyId = @osztalyId

	SELECT 
		felhasznalo.ID TanuloId,
		felhasznalo.Azonosito,
		felhasznalo.Nev,
		felhasznalo.SzuletesiDatum,
		felhasznalo.SzuletesiHely,
		felhasznalo.Allampolgarsag,
		felhasznalo.Anyjaneve,
		felhasznalo.SzuletesiOrszag,
		felhasznalo.TorzslapSzam,
		gondviselo.Gondviselok GondviseloNeve,
		naploSorszam.Sorszam NaploSorszam,
		Adatvaltozas.Feljegyzes Adatvaltozas,
		felhasznalo.KilepesDatum
	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_SZULETESIDATUM SzuletesiDatum,
				 T_FELHASZNALO_OSSZES.C_SZULETESIHELY SzuletesiHely,
				 T_FELHASZNALO_OSSZES.C_SZULETESIORSZAG SzuletesiOrszag,
				 T_FELHASZNALO_OSSZES.C_ALLAMPOLGARSAGA Allampolgarsag,
				 T_FELHASZNALO_OSSZES.C_ANYJANEVE 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
					AND T_FELHASZNALO_OSSZES.TOROLT='F'
		) felhasznalo
	LEFT JOIN 
			(
			SELECT DISTINCT
				g.C_TANULOID TanuloId
				,STUFF((SELECT  ' , ' + C_NEV + ' (' + d.C_NAME +')'
						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,3,'') Gondviselok
			FROM T_GONDVISELO_OSSZES g
			) gondviselo on felhasznalo.ID = gondviselo.TanuloId
	LEFT JOIN @NaploSorszam naploSorszam on naploSorszam.TanuloId = felhasznalo.ID
	LEFT JOIN (SELECT DISTINCT
					hatarozat.TanuloId
					,STUFF((SELECT  ' | ' + CAST(Tartalom AS VARCHAR(max)) 
							FROM fnGetDokumentumTanulokFeljegyzesei(@tanevId, @osztalyId) bhatarozat 							
							WHERE 
								bhatarozat.TanuloId=hatarozat.TanuloId
								AND Tipusa = 1545
							FOR XML PATH(''), TYPE)
						.value('.','NVARCHAR(MAX)'),1,2,' ') Feljegyzes
				FROM fnGetDokumentumTanulokFeljegyzesei(@tanevId, @osztalyId) hatarozat
				WHERE
					Tipusa = 1545 --Feljegyzések személyi adatok változásához:
				) Adatvaltozas on Adatvaltozas.TanuloId = felhasznalo.ID
	ORDER BY felhasznalo.Nev

	SELECT * FROM #TanuloAdatok ORDER BY Nev

	--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		
			,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, 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 +')'
			, C_KEZDETE
		FROM @Tanulok s
		LEFT 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 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
		,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 
		TanuloId 
		,Igazolt 
		,Igazolatlan 
		,ElmeletIgazolt 
		,ElmeletIgazolatlan 
		,GyakorlatIgazolt 
		,GyakorlatIgazolatlan 
		,Osszes	
	FROM @Mulasztasok

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

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

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

	DROP TABLE #TanuloAdatok
END 

GO