212 lines
		
	
	
		
			7.7 KiB
		
	
	
	
		
			Transact-SQL
		
	
	
	
	
	
			
		
		
	
	
			212 lines
		
	
	
		
			7.7 KiB
		
	
	
	
		
			Transact-SQL
		
	
	
	
	
	
SET ANSI_NULLS ON
 | 
						||
GO
 | 
						||
SET QUOTED_IDENTIFIER ON
 | 
						||
GO
 | 
						||
 | 
						||
IF OBJECT_ID('sp_GetOrarendKereszttabla_Osztaly') IS NOT NULL BEGIN
 | 
						||
  DROP PROCEDURE sp_GetOrarendKereszttabla_Osztaly
 | 
						||
END  
 | 
						||
GO
 | 
						||
 | 
						||
CREATE PROCEDURE sp_GetOrarendKereszttabla_Osztaly
 | 
						||
  @tanevId					INT,
 | 
						||
  @aktivTanevId				INT
 | 
						||
 | 
						||
AS
 | 
						||
BEGIN
 | 
						||
  SET NOCOUNT ON;
 | 
						||
 | 
						||
DECLARE @UtolsoNap	DATE = (SELECT TOP 1 C_DATUM FROM T_TANEVRENDJE_OSSZES WHERE C_NAPTIPUSA=1395 AND C_TANEVID=@tanevid AND TOROLT='F')
 | 
						||
		,@HetEleje	DATE
 | 
						||
		,@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)
 | 
						||
		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
 | 
						||
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
 | 
						||
 | 
						||
CREATE TABLE #KapcsolodoCsoportok (OsztalyId INT, OsztalyCsoportId INT)
 | 
						||
INSERT INTO #KapcsolodoCsoportok
 | 
						||
SELECT DISTINCT 
 | 
						||
	o.ID	Osztaly
 | 
						||
	,k.ID	KapcsolodoCsoport 
 | 
						||
FROM T_OSZTALY_OSSZES o
 | 
						||
	CROSS APPLY fnGetKapcsolodoOsztalycsoportokByDate(ID, @HetEleje, @HetVege) k
 | 
						||
WHERE 
 | 
						||
	TOROLT = 'F' 
 | 
						||
	AND C_ALTANEVID = @tanevId
 | 
						||
 | 
						||
DECLARE @OsztalyhozKapcsolodoOsszesOrarendiora TABLE (OsztalyId INT, OsztalyCsoportId INT, OrarendiOraId INT, TantargyId INT, TanarId INT, TeremId INT, HetirendId INT, HetnapjaId INT, Oraszam INT, OraErvenyessegKezdete DATE, OraErvenyessegVege DATE)
 | 
						||
INSERT INTO @OsztalyhozKapcsolodoOsszesOrarendiora
 | 
						||
SELECT 
 | 
						||
	k.OsztalyId
 | 
						||
	,k.OsztalyCsoportId
 | 
						||
	,o.ID 
 | 
						||
	,C_TANTARGYID
 | 
						||
	,C_TANARID 
 | 
						||
	,C_TEREMID
 | 
						||
	,C_HETIREND
 | 
						||
	,C_HETNAPJA
 | 
						||
	,C_ORASZAM
 | 
						||
	,C_ORAERVENYESSEGKEZDETE
 | 
						||
	,C_ORAERVENYESSEGVEGE
 | 
						||
FROM #KapcsolodoCsoportok k
 | 
						||
	LEFT JOIN T_ORARENDIORA_OSSZES o ON o.C_OSZTALYCSOPORTID = k.OsztalyCsoportId
 | 
						||
WHERE
 | 
						||
	TOROLT = 'F'
 | 
						||
 | 
						||
DECLARE @temp TABLE (OsztalyId INT, OsztalyCsoportNev NVARCHAR(MAX), OsztalyNev NVARCHAR(MAX), HetirendId INT, HetirendNev NVARCHAR(MAX), HetnapjaId INT, Oraszam INT, TantargyNev NVARCHAR(MAX), PedagogusNev NVARCHAR(MAX), TeremNev NVARCHAR(MAX))
 | 
						||
INSERT INTO @temp
 | 
						||
SELECT
 | 
						||
	OrarendiOra.OsztalyId									OsztalyId
 | 
						||
	,ocs.C_NEV												OsztalyCsoportNev
 | 
						||
	,osztalyNev.C_NEV										OsztalyNev
 | 
						||
	,OrarendiOra.HetirendId									HetirendId
 | 
						||
	,hetirend.C_NAME										HetirendNev
 | 
						||
	,OrarendiOra.HetnapjaId									HetnapjaId
 | 
						||
	,OrarendiOra.Oraszam									Oraszam
 | 
						||
	,ISNULL(Tantargy.C_NEVNYOMTATVANYBAN, Tantargy.C_NEV)	TantargyNev
 | 
						||
	,Pedagogus.C_NYOMTATASINEV								PedagogusNev
 | 
						||
	,Terem.C_NEV											TeremNev
 | 
						||
FROM @OsztalyhozKapcsolodoOsszesOrarendiora OrarendiOra
 | 
						||
	INNER JOIN T_TANTARGY_OSSZES Tantargy ON Tantargy.Id = OrarendiOra.TantargyId
 | 
						||
	INNER JOIN T_FELHASZNALO_OSSZES Pedagogus ON Pedagogus.Id = OrarendiOra.TanarId
 | 
						||
	INNER JOIN T_TEREM_OSSZES Terem ON Terem.Id = OrarendiOra.TeremId
 | 
						||
	INNER JOIN T_DICTIONARYITEMBASE_OSSZES hetirend ON hetirend.Id = OrarendiOra.HetirendId AND hetirend.C_TANEVID = @tanevId
 | 
						||
	INNER JOIN T_OSZTALYCSOPORT_OSSZES ocs ON ocs.ID = OrarendiOra.OsztalyCsoportId
 | 
						||
	INNER JOIN T_OSZTALYCSOPORT_OSSZES osztalyNev ON osztalyNev.ID = OrarendiOra.OsztalyId
 | 
						||
WHERE
 | 
						||
	OrarendiOra.OraErvenyessegKezdete <= @Hetvege
 | 
						||
	AND OrarendiOra.OraErvenyessegVege >= @Heteleje
 | 
						||
 | 
						||
DECLARE @Hetirendek TABLE (Id INT)
 | 
						||
INSERT INTO @Hetirendek 
 | 
						||
SELECT DISTINCT HetirendId FROM @temp
 | 
						||
 | 
						||
DECLARE @OsszesOra TABLE (OsztalyId INT, Hetirend INT, Nap INT, Oraszam INT)
 | 
						||
INSERT INTO @OsszesOra
 | 
						||
SELECT DISTINCT Osztaly, oo.Id, Nap.Nap , OraSzam.OraSzam FROM @Hetirendek oo
 | 
						||
	CROSS JOIN (SELECT DISTINCT OsztalyId FROM #KapcsolodoCsoportok) Osztaly(Osztaly)
 | 
						||
	CROSS JOIN (SELECT DISTINCT Oraszam FROM @temp) OraSzam (OraSzam)
 | 
						||
	CROSS JOIN (VALUES (1408),(1409),(1410),(1411),(1412),(1413)) Nap (Nap)
 | 
						||
 | 
						||
DECLARE @TenylegesOra TABLE (OsztalyId INT, Nap INT, OraSzam INT, Foglalkozas NVARCHAR(MAX))
 | 
						||
INSERT INTO @TenylegesOra
 | 
						||
SELECT 
 | 
						||
	OsztalyId
 | 
						||
	,HetnapjaId
 | 
						||
	,Oraszam
 | 
						||
	,STUFF((SELECT DISTINCT ', ' + CAST(bveg.TantargyNev+' ('+IIF(bveg.OsztalyCsoportNev <> bveg.OsztalyNev, bveg.OsztalyCsoportNev +', ', '') +bveg.PedagogusNev+', '+bveg.TeremNev+', ' +HetirendNev+')' AS VARCHAR(max)) 
 | 
						||
			FROM @temp bveg 
 | 
						||
			WHERE 
 | 
						||
					bveg.HetnapjaId=veg.HetnapjaId 
 | 
						||
					AND bveg.Oraszam=veg.Oraszam  
 | 
						||
					AND (bveg.HetirendId=HetirendId OR bveg.HetirendId=1554)
 | 
						||
					AND bveg.OsztalyId = veg.OsztalyId
 | 
						||
			FOR XML PATH(''), TYPE)
 | 
						||
			.value('.','NVARCHAR(MAX)'),1,2,' ') Foglalkozasok	 
 | 
						||
FROM @temp veg
 | 
						||
 | 
						||
/*V<EFBFBD>gleges <20>rarend*/
 | 
						||
CREATE TABLE #Orarend (OsztalyId INT, OsztalyNev NVARCHAR(MAX), Ora INT,  Nap INT, Foglalkozas NVARCHAR(MAX))
 | 
						||
INSERT INTO #Orarend
 | 
						||
SELECT	
 | 
						||
		OsszesOra.OsztalyId
 | 
						||
		,ocs.C_NEV
 | 
						||
		,OsszesOra.Oraszam
 | 
						||
		,OsszesOra.Nap
 | 
						||
		,TenylegesOra.Foglalkozas 		
 | 
						||
FROM @OsszesOra OsszesOra
 | 
						||
	LEFT JOIN @TenylegesOra TenylegesOra ON OsszesOra.Nap=TenylegesOra.Nap AND OsszesOra.Oraszam=TenylegesOra.Oraszam AND TenylegesOra.OsztalyId = OsszesOra.OsztalyId
 | 
						||
	LEFT JOIN T_OSZTALYCSOPORT_OSSZES ocs ON ocs.ID = OsszesOra.OsztalyId
 | 
						||
ORDER BY OsszesOra.Hetirend, OsszesOra.Nap, OsszesOra.Oraszam
 | 
						||
 | 
						||
--------------------------------------------------------------------------------------------------------------
 | 
						||
CREATE TABLE #Napok (Nev NVARCHAR(MAX), Oraszam INT, Rendez INT)
 | 
						||
INSERT INTO #Napok
 | 
						||
SELECT DISTINCT 
 | 
						||
	*
 | 
						||
	, CASE 
 | 
						||
		WHEN nap = 'hetfo' THEN 1 
 | 
						||
		WHEN nap = 'kedd' THEN 2 
 | 
						||
		WHEN nap = 'szerda' THEN 3
 | 
						||
		WHEN nap = 'csutortok' THEN 4
 | 
						||
		WHEN nap = 'pentek' THEN 5 		
 | 
						||
		END
 | 
						||
FROM (VALUES ('hetfo'), ('kedd'), ('szerda'), ('csutortok'), ('pentek')) AS napok(nap)
 | 
						||
CROSS JOIN (SELECT DISTINCT Oraszam FROM @temp) OraSzam (OraSzam)
 | 
						||
 | 
						||
DECLARE @Oraszamok NVARCHAR(MAX),
 | 
						||
		@OraszamokAlias NVARCHAR(MAX)
 | 
						||
 | 
						||
SELECT @Oraszamok = ISNULL(@Oraszamok + ', ', '') + '[' + CAST(Oraszam AS NVARCHAR(MAX)) + ']'
 | 
						||
FROM (SELECT DISTINCT Oraszam FROM @temp ) o
 | 
						||
 | 
						||
SELECT @OraszamokAlias = ISNULL(@OraszamokAlias + ', ', '') +  Nev +'.' + '[' + CAST(Oraszam AS NVARCHAR(MAX)) + ']' FROM #Napok ORDER BY Rendez, Oraszam
 | 
						||
 | 
						||
DECLARE @sql NVARCHAR(MAX)
 | 
						||
SET @sql = '
 | 
						||
SELECT DISTINCT 
 | 
						||
	ocs.C_NEV OsztalyNev, 
 | 
						||
	' + @OraszamokAlias + '
 | 
						||
FROM #KapcsolodoCsoportok k
 | 
						||
INNER JOIN (
 | 
						||
			SELECT 
 | 
						||
				OsztalyId
 | 
						||
				,'+ @Oraszamok +'
 | 
						||
			FROM #Orarend 	
 | 
						||
			PIVOT (MAX(Foglalkozas) FOR Ora IN (' + @Oraszamok + '))a
 | 
						||
			WHERE Nap = 1408
 | 
						||
			) hetfo ON hetfo.OsztalyId = k.OsztalyId
 | 
						||
INNER JOIN (
 | 
						||
			SELECT 
 | 
						||
				OsztalyId
 | 
						||
				,'+ @Oraszamok +'
 | 
						||
			FROM #Orarend 	
 | 
						||
			PIVOT (MAX(Foglalkozas) FOR Ora IN (' + @Oraszamok + '))a
 | 
						||
			WHERE Nap = 1409
 | 
						||
			) kedd ON kedd.OsztalyId = k.OsztalyId
 | 
						||
INNER JOIN (
 | 
						||
			SELECT 
 | 
						||
				OsztalyId
 | 
						||
				,'+ @Oraszamok +'
 | 
						||
			FROM #Orarend 	
 | 
						||
			PIVOT (MAX(Foglalkozas) FOR Ora IN (' + @Oraszamok + '))a
 | 
						||
			WHERE Nap = 1410
 | 
						||
			) szerda ON szerda.OsztalyId = k.OsztalyId
 | 
						||
INNER JOIN (
 | 
						||
			SELECT 
 | 
						||
				OsztalyId
 | 
						||
				,'+ @Oraszamok +'
 | 
						||
			FROM #Orarend 	
 | 
						||
			PIVOT (MAX(Foglalkozas) FOR Ora IN (' + @Oraszamok + '))a
 | 
						||
			WHERE Nap = 1411
 | 
						||
			) csutortok ON csutortok.OsztalyId = k.OsztalyId
 | 
						||
INNER JOIN (
 | 
						||
			SELECT 
 | 
						||
				OsztalyId
 | 
						||
				,'+ @Oraszamok +'
 | 
						||
			FROM #Orarend 	
 | 
						||
			PIVOT (MAX(Foglalkozas) FOR Ora IN (' + @Oraszamok + '))a
 | 
						||
			WHERE Nap = 1412
 | 
						||
			) pentek ON pentek.OsztalyId = k.OsztalyId
 | 
						||
INNER JOIN T_OSZTALYCSOPORT_OSSZES ocs ON ocs.Id = k.OsztalyId
 | 
						||
ORDER BY C_NEV
 | 
						||
'
 | 
						||
 | 
						||
EXEC sp_executesql @sql
 | 
						||
 | 
						||
DROP TABLE #Napok
 | 
						||
DROP TABLE #Orarend
 | 
						||
DROP TABLE #KapcsolodoCsoportok
 | 
						||
 | 
						||
END
 | 
						||
 | 
						||
GO |