IF OBJECT_ID('sp_GetTeremrend') IS NOT NULL 
BEGIN
	DROP PROCEDURE sp_GetTeremrend 
END  
GO
CREATE PROCEDURE [sp_GetTeremrend]
	@TanevId		INT,
	@IntezmenyId	INT,
	@aktivTanevId	INT

AS
BEGIN
	SET NOCOUNT ON;

DECLARE @OrarendiOra	TABLE (Hetirend int, OraSzam int, Hetnapja int, Terem nvarchar(max), Foglalkozas nvarchar(max))			--Összes órarendi óra
DECLARE @Hetirendek		TABLE (Hetirend int)																					--Összes hetirend
DECLARE @Ures			TABLE (Hetirend int, OraSzam int, Hetnapja int, Terem nvarchar(max))									--Összes hetirendhez órasávok generálva
DECLARE @Teljes			TABLE (Hetirend int, OraSzam int, Hetnapja int, Terem nvarchar(max), Foglalkozas nvarchar(max))			--@Ures tábla, a létező órákkal kiegészítve
	

DECLARE @UtolsoNap	DATE = (SELECT TOP 1 C_DATUM FROM T_TANEVRENDJE_OSSZES WHERE C_NAPTIPUSA=1395 AND C_TANEVID=@tanevid AND TOROLT='F')
DECLARE @ElsoNap	DATE = (SELECT TOP 1 C_DATUM FROM T_TANEVRENDJE_OSSZES WHERE C_NAPTIPUSA=1394 AND C_TANEVID=@tanevid AND TOROLT='F')
		,@HetEleje	DATE
		,@HetVege	DATE

IF (@tanevId = @AktivtanevId AND GETDATE() <= @UtolsoNap)
	BEGIN
		IF (GETDATE() <= @ElsoNap)
		BEGIN
			SET @HetEleje =(SELECT TOP 1 nh.C_HETKEZDONAPJA  FROM T_NAPTARIHET_OSSZES nh WHERE @ElsoNap>=CONVERT(DATE, nh.C_HETKEZDONAPJA) AND @ElsoNap<=CONVERT(DATE, nh.C_HETUTOLSONAPJA) AND nh.TOROLT='F' AND nh.C_TANEVID=@tanevId)
			SET @HetVege = (SELECT TOP 1 nh.C_HETUTOLSONAPJA  FROM T_NAPTARIHET_OSSZES nh WHERE @ElsoNap>=CONVERT(DATE, nh.C_HETKEZDONAPJA) AND @ElsoNap<=CONVERT(DATE, nh.C_HETUTOLSONAPJA) AND nh.TOROLT='F' AND nh.C_TANEVID=@tanevId)
		END
		ELSE
		BEGIN
			SET @HetEleje =(SELECT TOP 1 nh.C_HETKEZDONAPJA  FROM T_NAPTARIHET_OSSZES nh WHERE CONVERT(DATE, GETDATE())>=CONVERT(DATE, NH.C_HETKEZDONAPJA) AND CONVERT(DATE, GETDATE())<=CONVERT(DATE, nh.C_HETUTOLSONAPJA) and nh.TOROLT='F' and nh.C_TANEVID=@tanevid)
			SET @HetVege = (SELECT TOP 1 nh.C_HETUTOLSONAPJA  FROM T_NAPTARIHET_OSSZES nh WHERE CONVERT(DATE, GETDATE())>=CONVERT(DATE, nh.C_HETKEZDONAPJA) AND CONVERT(DATE, GETDATE())<=CONVERT(DATE, nh.C_HETUTOLSONAPJA) and nh.TOROLT='F' and nh.C_TANEVID=@tanevid)
		END
	END
ELSE
	BEGIN
		SET @HetEleje =(SELECT TOP 1 nh.C_HETKEZDONAPJA  FROM T_NAPTARIHET_OSSZES nh WHERE @UtolsoNap>=CONVERT(DATE, nh.C_HETKEZDONAPJA) AND @UtolsoNap<=CONVERT(DATE, nh.C_HETUTOLSONAPJA) AND nh.TOROLT='F' AND nh.C_TANEVID=@tanevId)
		SET @HetVege = (SELECT TOP 1 nh.C_HETUTOLSONAPJA  FROM T_NAPTARIHET_OSSZES nh WHERE @UtolsoNap>=CONVERT(DATE, nh.C_HETKEZDONAPJA) AND @UtolsoNap<=CONVERT(DATE, nh.C_HETUTOLSONAPJA) AND nh.TOROLT='F' AND nh.C_TANEVID=@tanevId)
	END

-- @Hetirendek tábálába inzertálás 
INSERT INTO				@Hetirendek  
SELECT DISTINCT			C_HETIREND 
FROM					T_ORARENDIORA_OSSZES	WHERE TOROLT='F'	AND		C_TANEVID=@TANEVID	AND C_INTEZMENYID=@IntezmenyId

-- @OrarendiOra tábálába inzertálás 
INSERT INTO				@OrarendiOra  
SELECT					C_HETIREND, 
						OrarendiOra.C_ORASZAM, 
						C_HETNAPJA, 
						Terem.C_NEV, 
						--Összefűzi a foglalkozásokat, ha teremre egyszerre több foglalkozás van felvéve egy órára
						STUFF(
							(SELECT DISTINCT	', ' + ISNULL(CAST(Foglalkozas.C_NEV AS VARCHAR(MAX)),'') 
							 FROM				T_ORARENDIORA_OSSZES OrarendiOraFoglalkozas 	
							 INNER JOIN			T_FOGLALKOZAS_OSSZES	Foglalkozas					ON		Foglalkozas.ID				=		OrarendiOraFoglalkozas.C_FOGLALKOZASID				
							 where				OrarendiOraFoglalkozas.C_TEREMID			=		OrarendiOra.C_TEREMID		AND		
												(OrarendiOraFoglalkozas.C_HETIREND			=		OrarendiOra.C_HETIREND		OR		OrarendiOraFoglalkozas.C_HETIREND			=		1554)	AND																							 
												OrarendiOraFoglalkozas.C_HETNAPJA			=		OrarendiOra.C_HETNAPJA		AND 
												OrarendiOraFoglalkozas.C_ORASZAM			=		OrarendiOra.c_oraszam		AND
												((OrarendiOraFoglalkozas.C_ORAERVENYESSEGKEZDETE<=@HetEleje) and (OrarendiOraFoglalkozas.c_oraervenyessegvege>=@HetVege)or 
																						(OrarendiOraFoglalkozas.C_ORAERVENYESSEGKEZDETE>=@HetEleje) and (OrarendiOraFoglalkozas.C_ORAERVENYESSEGKEZDETE<=@HetVege)) AND
												Foglalkozas.TOROLT							=		'F'							AND
												Foglalkozas.C_INTEZMENYID					=		@IntezmenyId				AND
												Foglalkozas.C_TANEVID						=		@TanevId					AND
												OrarendiOraFoglalkozas.Torolt				='F'								AND
												OrarendiOraFoglalkozas.C_TANEVID			=@TanevId

							 FOR XML PATH('')),1,1,''
							 ) AS Foglalkozas 
FROM					T_ORARENDIORA_OSSZES	OrarendiOra
INNER JOIN				T_TEREM_OSSZES			Terem							ON		Terem.ID			=	OrarendiOra.C_TEREMID
WHERE					OrarendiOra.C_INTEZMENYID	=	@IntezmenyId	AND 
						OrarendiOra.C_TANEVID		=	@TanevId		AND 
						OrarendiOra.TOROLT			=	'F'				AND
						OrarendiOra.C_TEREMID		IS NOT NULL			
							


-- @Ures tábálába inzertálás 
INSERT INTO				@Ures
SELECT					HetiRend, 
						OraSzam, 
						Hetnapja, 
						Terem 
FROM					@Hetirendek
CROSS JOIN				(SELECT DISTINCT OraSzam	FROM @OrarendiOra)			OraSzam (OraSzam)
CROSS JOIN				(SELECT DISTINCT Terem		FROM @OrarendiOra)			Terem (Terem)
CROSS JOIN				(SELECT DISTINCT Hetnapja	FROM @OrarendiOra)			Hetnapja (Hetnapja)

	
-- @Teljes tábálába inzertálás 
INSERT INTO				@Teljes
SELECT					Ures.*, 
						OrarendiOra.Foglalkozas 
FROM					@Ures Ures
LEFT JOIN				@OrarendiOra OrarendiOra ON OrarendiOra.Hetirend	=	Ures.Hetirend			AND
													OrarendiOra.Hetnapja	=	Ures.Hetnapja			AND
													OrarendiOra.OraSzam		=	Ures.OraSzam			AND
													OrarendiOra.Terem		=	Ures.Terem																	

-- Az Excel nyomtatvány munkalap- és táblázat nevei 
SELECT					Hetnapja 
FROM					(SELECT DISTINCT 			C_NAME		Hetnapja,
													C_VALUE		Sorrend
						FROM						@OrarendiOra
						INNER JOIN					T_DICTIONARYITEMBASE_OSSZES DictionaryItemBase on DictionaryItemBase.ID	=	Hetnapja						
						)							Hetnapja	
ORDER BY				Sorrend					

SELECT					Hetirend 
FROM					(SELECT DISTINCT 			C_NAME		Hetirend,
													C_VALUE		Sorrend
						FROM						@Hetirendek
						INNER JOIN					T_DICTIONARYITEMBASE_OSSZES DictionaryItemBase on DictionaryItemBase.ID	=	Hetirend	
						--WHERE						DictionaryItemBase.ID	<>	1554--Minden hét				
						)							Hetirend	
ORDER BY				Hetirend	

-- @Teljes tábla feltöltése, fő lekérdezés 
DECLARE					KurzorHetirend			CURSOR FOR 
SELECT					Hetirend 
FROM					@Hetirendek
--WHERE					Hetirend				<>				1554
ORDER BY				Hetirend

DECLARE					@Hetirend				INT

DECLARE					KurzorHetnapja			CURSOR FOR 
SELECT DISTINCT			Hetnapja 
FROM					@Ures 
ORDER BY				Hetnapja

DECLARE					@Hetnapja				INT

OPEN					KurzorHetirend
FETCH NEXT FROM			KurzorHetirend			INTO			@Hetirend

WHILE @@FETCH_STATUS = 0 
		BEGIN

		OPEN			KurzorHetnapja
		FETCH NEXT FROM	KurzorHetnapja			INTO			@Hetnapja

		-- A "Minden hét" óráinak inzertálása minden hetirendbe 
		INSERT INTO		@Teljes
		SELECT			@Hetirend, 
						OraSzam, 
						Hetnapja, 
						Terem, 
						Foglalkozas 
		FROM			@OrarendiOra 
		WHERE			Hetirend				=				1554

		WHILE @@FETCH_STATUS = 0 
			BEGIN

			CREATE table #VeglegesteremOrarend(Terem nvarchar(max), [0] nvarchar(max), [1] nvarchar(max), [2] nvarchar(max), [3] nvarchar(max), [4] nvarchar(max), [5] nvarchar(max),
																	[6] nvarchar(max), [7] nvarchar(max), [8] nvarchar(max), [9] nvarchar(max), [10] nvarchar(max))

			INSERT INTO	#VeglegesTeremOrarend 
			SELECT		Vegleges.Terem, 
						Vegleges.[0], 
						Vegleges.[1], 
						Vegleges.[2], 
						Vegleges.[3], 
						Vegleges.[4], 
						Vegleges.[5], 
						Vegleges.[6],
						Vegleges.[7], 
						Vegleges.[8], 
						Vegleges.[9], 
						Vegleges.[10]
			FROM		@Teljes  

			PIVOT
			(
						MAX(Foglalkozas)		FOR		OraSzam				IN		([0],[1],[2],[3],[4],[5],[6],[7],[8],[9],[10])
			)			Vegleges

			WHERE		Vegleges.Hetirend		=		@Hetirend			AND 
						Vegleges.Hetnapja		=		@Hetnapja

			SELECT		* 
			FROM		#VeglegesTeremOrarend

			DROP TABLE	#VeglegesTeremOrarend
			FETCH NEXT FROM KurzorHetnapja		INTO	@Hetnapja  

			END

FETCH NEXT FROM			KurzorHetirend			INTO	@Hetirend  
CLOSE					KurzorHetnapja

END

CLOSE					KurzorHetirend
DEALLOCATE				KurzorHetnapja
DEALLOCATE				KurzorHetirend

END

GO