200 lines
		
	
	
		
			7.6 KiB
		
	
	
	
		
			Transact-SQL
		
	
	
	
	
	
			
		
		
	
	
			200 lines
		
	
	
		
			7.6 KiB
		
	
	
	
		
			Transact-SQL
		
	
	
	
	
	
IF OBJECT_ID('sp_GetTeremrend') IS NOT NULL 
 | 
						|
BEGIN
 | 
						|
	DROP PROCEDURE sp_GetTeremrend 
 | 
						|
END  
 | 
						|
GO
 | 
						|
CREATE PROCEDURE [sp_GetTeremrend]
 | 
						|
	@TanevId		int,
 | 
						|
	@IntezmenyId	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 @AktivtanevId INT = (SELECT ID FROM T_TANEV_OSSZES TANEV WHERE C_AKTIV='T' AND C_INTEZMENYID=@IntezmenyId)
 | 
						|
 | 
						|
	DECLARE @UtolsoNap DATE = (SELECT TOP 1 C_NAPDATUMA FROM T_NAPTARINAP_OSSZES WHERE C_NAPTIPUSA=1395 AND C_INTEZMENYID=@intezmenyId AND C_TANEVID=@tanevid AND TOROLT='F')
 | 
						|
 | 
						|
	DECLARE @HetEleje DATE
 | 
						|
	DECLARE @HetVege DATE
 | 
						|
 | 
						|
	IF (@tanevId = @AktivtanevId AND GETDATE() <= @UtolsoNap)
 | 
						|
		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 and nh.C_INTEZMENYID=@intezmenyId)
 | 
						|
			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 and nh.C_INTEZMENYID=@intezmenyId)
 | 
						|
		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 AND NH.C_INTEZMENYID=@intezmenyId)
 | 
						|
			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 AND NH.C_INTEZMENYID=@intezmenyId)
 | 
						|
		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 |