266 lines
		
	
	
		
			9.1 KiB
		
	
	
	
		
			Transact-SQL
		
	
	
	
	
	
			
		
		
	
	
			266 lines
		
	
	
		
			9.1 KiB
		
	
	
	
		
			Transact-SQL
		
	
	
	
	
	
SET ANSI_NULLS ON
 | 
						|
GO
 | 
						|
 | 
						|
SET QUOTED_IDENTIFIER ON
 | 
						|
GO
 | 
						|
 | 
						|
IF OBJECT_ID('sp_GetOrarendOsztalyonkent') IS NOT NULL BEGIN
 | 
						|
  DROP PROCEDURE sp_GetOrarendOsztalyonkent
 | 
						|
END
 | 
						|
GO
 | 
						|
 | 
						|
CREATE PROCEDURE sp_GetOrarendOsztalyonkent
 | 
						|
  @intezmenyId			INT,
 | 
						|
  @tanevId				INT,
 | 
						|
  @osztalyId			INT,
 | 
						|
  @aktivTanevId			INT,
 | 
						|
  @isEgyebFoglalkozasok	BIT,
 | 
						|
  @orarendErvenyessegiDatum	DATE
 | 
						|
 | 
						|
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')
 | 
						|
			,@ElsoNap	DATE = (SELECT TOP 1 C_KEZDONAP FROM T_TANEV_OSSZES WHERE ID = @tanevId AND TOROLT = 'F')
 | 
						|
			,@VizsgaltNap		DATE
 | 
						|
			,@isVegzos VARCHAR(1) = (SELECT TOP 1 C_VEGZOSEVFOLYAM FROM T_OSZTALYCSOPORT_OSSZES WHERE ID = @osztalyId)
 | 
						|
			,@VegzosUtolsoNap DATE = (SELECT TOP 1 C_DATUM FROM T_TANEVRENDJE_OSSZES WHERE C_TANEVID = @tanevId AND C_NAPTIPUSA = 1402 AND TOROLT = 'F')
 | 
						|
			,@osztalyNev NVARCHAR(MAX) = (SELECT C_NEV FROM T_OSZTALYCSOPORT_OSSZES WHERE ID = @osztalyId)
 | 
						|
 | 
						|
	SET @UtolsoNap = (SELECT IIF(@isVegzos = 'T', @VegzosUtolsoNap, @UtolsoNap))
 | 
						|
 | 
						|
	IF (@tanevId = @aktivTanevId AND @orarendErvenyessegiDatum <= @UtolsoNap)
 | 
						|
		BEGIN
 | 
						|
			IF (@orarendErvenyessegiDatum <= @ElsoNap)
 | 
						|
			BEGIN
 | 
						|
				SET @VizsgaltNap = (SELECT TOP 1 C_HETKEZDONAPJA FROM T_NAPTARIHET_OSSZES WHERE C_HETSORSZAMA = 1 AND TOROLT = 'F' AND C_TANEVID = @tanevId)
 | 
						|
			END
 | 
						|
			ELSE
 | 
						|
			BEGIN
 | 
						|
				SET @VizsgaltNap = CONVERT(DATE, @orarendErvenyessegiDatum)
 | 
						|
			END
 | 
						|
		END
 | 
						|
	ELSE
 | 
						|
		BEGIN
 | 
						|
			SET @VizsgaltNap = @UtolsoNap
 | 
						|
		END
 | 
						|
 | 
						|
  SELECT
 | 
						|
	 C_ORASZAM								OraSzam
 | 
						|
	,CONVERT(VARCHAR(5), C_KEZDETE, 108)	Kezdete
 | 
						|
	,CONVERT(VARCHAR(5), C_VEGE, 108)		Vege
 | 
						|
  INTO #CsengetesiRendAdatok
 | 
						|
  FROM T_CSENGETESIRENDORA_OSSZES CsengetesiRendOra
 | 
						|
	INNER JOIN T_CSENGETESIREND_OSSZES CsengetesiRend ON CsengetesiRend.Id = CsengetesiRendOra.C_CSENGETESIRENDID
 | 
						|
  WHERE
 | 
						|
	CsengetesiRendOra.C_TANEVID = @tanevId
 | 
						|
	AND CsengetesiRendOra.TOROLT = 'F'
 | 
						|
	AND CsengetesiRend.TOROLT = 'F'
 | 
						|
	AND CsengetesiRend.C_AKTIV = 'T'
 | 
						|
 | 
						|
	DECLARE  @MinCsengetesiRendOraKezdet NVARCHAR(10) = (SELECT MIN(Kezdete) FROM #CsengetesiRendAdatok)
 | 
						|
	DECLARE  @MinCsengetesiRendOraszam INT = (SELECT MIN(OraSzam) FROM #CsengetesiRendAdatok)
 | 
						|
 | 
						|
	SELECT
 | 
						|
		OrarendiOra.C_HETIREND									HetirendId
 | 
						|
		,OrarendiOra.C_HETNAPJA									HetnapjaId
 | 
						|
		,CsengetesiRendOra.C_ORASZAM							OraSzam
 | 
						|
		,CONVERT(VARCHAR(5), OrarendiOra.C_ORAKEZDETE, 108)		Kezdete
 | 
						|
		,CONVERT(VARCHAR(5), OrarendiOra.C_ORAVEGE, 108)		Vege
 | 
						|
		,ISNULL(Tantargy.C_NEVNYOMTATVANYBAN, Tantargy.C_NEV)	TantargyNev
 | 
						|
		,Pedagogus.C_NYOMTATASINEV								PedagogusNev
 | 
						|
		,Terem.C_NEV											TeremNev
 | 
						|
		,ocs.C_NEV												OsztalyCsoportNev
 | 
						|
	INTO #OrarendiOrak
 | 
						|
	FROM T_ORARENDIORA_OSSZES OrarendiOra
 | 
						|
		INNER JOIN fnGetKapcsolodoOsztalycsoportokByDate(@osztalyId, @VizsgaltNap, @VizsgaltNap) Kapcsolodo ON Kapcsolodo.Id = OrarendiOra.C_OSZTALYCSOPORTID
 | 
						|
		INNER JOIN T_TANTARGY_OSSZES Tantargy ON Tantargy.Id = OrarendiOra.C_TANTARGYID
 | 
						|
		INNER JOIN T_FELHASZNALO_OSSZES Pedagogus ON Pedagogus.Id = OrarendiOra.C_TANARID
 | 
						|
		INNER JOIN T_TEREM_OSSZES Terem ON Terem.Id = OrarendiOra.C_TEREMID
 | 
						|
		INNER JOIN T_OSZTALYCSOPORT_OSSZES	ocs ON ocs.ID = OrarendiOra.C_OSZTALYCSOPORTID
 | 
						|
		LEFT JOIN T_CSENGETESIRENDORA_OSSZES CsengetesiRendOra ON CsengetesiRendOra.Id = OrarendiOra.C_CSENGETESIRENDORAID
 | 
						|
		LEFT JOIN T_CSOPORT_OSSZES Csoport ON Csoport.Id = Kapcsolodo.Id
 | 
						|
	WHERE
 | 
						|
		OrarendiOra.Torolt = 'F'
 | 
						|
		AND @VizsgaltNap BETWEEN OrarendiOra.C_ORAERVENYESSEGKEZDETE AND OrarendiOra.C_ORAERVENYESSEGVEGE
 | 
						|
		AND (@isEgyebFoglalkozasok = 1 OR (Csoport.C_TIPUSA IN (SELECT ID FROM fnGetTanoraiCeluCsoportTipusok(@tanevId)) OR Csoport.C_TIPUSA IS NULL))
 | 
						|
 | 
						|
	SELECT
 | 
						|
		OraSzam
 | 
						|
		,HetirendId
 | 
						|
		,HetnapjaId
 | 
						|
		,OsztalyCsoportNev
 | 
						|
		,PedagogusNev
 | 
						|
		,TantargyNev
 | 
						|
		,TeremNev
 | 
						|
		,Kezdete
 | 
						|
		,Vege
 | 
						|
	INTO #OrarendTEMP
 | 
						|
	FROM
 | 
						|
	(
 | 
						|
		SELECT
 | 
						|
			 MAX(CsengetesiRendAdatok.OraSzam)	OraSzam
 | 
						|
			,OrarendiOrak.HetirendId			HetirendId
 | 
						|
			,OrarendiOrak.HetnapjaId			HetnapjaId
 | 
						|
			,OrarendiOrak.OsztalyCsoportNev		OsztalyCsoportNev
 | 
						|
			,OrarendiOrak.PedagogusNev			PedagogusNev
 | 
						|
			,OrarendiOrak.TantargyNev			TantargyNev
 | 
						|
			,OrarendiOrak.TeremNev				TeremNev
 | 
						|
			,OrarendiOrak.Kezdete				Kezdete
 | 
						|
			,OrarendiOrak.Vege					Vege
 | 
						|
		FROM #CsengetesiRendAdatok CsengetesiRendAdatok
 | 
						|
			LEFT JOIN #OrarendiOrak OrarendiOrak ON OrarendiOrak.Kezdete >= CsengetesiRendAdatok.Kezdete
 | 
						|
		WHERE
 | 
						|
			OrarendiOrak.OraSzam IS NULL
 | 
						|
		GROUP BY
 | 
						|
			 OrarendiOrak.HetirendId
 | 
						|
			,OrarendiOrak.HetnapjaId
 | 
						|
			,OrarendiOrak.OsztalyCsoportNev
 | 
						|
			,OrarendiOrak.PedagogusNev
 | 
						|
			,OrarendiOrak.TantargyNev
 | 
						|
			,OrarendiOrak.TeremNev
 | 
						|
			,OrarendiOrak.Kezdete
 | 
						|
			,OrarendiOrak.Vege
 | 
						|
 | 
						|
		UNION
 | 
						|
 | 
						|
		SELECT
 | 
						|
			 MAX(CsengetesiRendAdatok.OraSzam)	OraSzam
 | 
						|
			,OrarendiOrak.HetirendId			HetirendId
 | 
						|
			,OrarendiOrak.HetnapjaId			HetnapjaId
 | 
						|
			,OrarendiOrak.OsztalyCsoportNev		OsztalyCsoportNev
 | 
						|
			,OrarendiOrak.PedagogusNev			PedagogusNev
 | 
						|
			,OrarendiOrak.TantargyNev			TantargyNev
 | 
						|
			,OrarendiOrak.TeremNev				TeremNev
 | 
						|
			,OrarendiOrak.Kezdete				Kezdete
 | 
						|
			,OrarendiOrak.Vege					Vege
 | 
						|
		FROM #CsengetesiRendAdatok CsengetesiRendAdatok
 | 
						|
			LEFT JOIN #OrarendiOrak OrarendiOrak ON OrarendiOrak.OraSzam = CsengetesiRendAdatok.OraSzam
 | 
						|
		WHERE
 | 
						|
			OrarendiOrak.OraSzam IS NOT NULL
 | 
						|
		GROUP BY
 | 
						|
			 OrarendiOrak.HetirendId
 | 
						|
			,OrarendiOrak.HetnapjaId
 | 
						|
			,OrarendiOrak.OsztalyCsoportNev
 | 
						|
			,OrarendiOrak.PedagogusNev
 | 
						|
			,OrarendiOrak.TantargyNev
 | 
						|
			,OrarendiOrak.TeremNev
 | 
						|
			,OrarendiOrak.Kezdete
 | 
						|
			,OrarendiOrak.Vege
 | 
						|
	)OrarendioraOraszammal
 | 
						|
 | 
						|
	INSERT INTO #OrarendTEMP
 | 
						|
	SELECT
 | 
						|
		@MinCsengetesiRendOraszam
 | 
						|
		,OrarendiOrak.HetirendId			HetirendId
 | 
						|
		,OrarendiOrak.HetnapjaId			HetnapjaId
 | 
						|
		,OrarendiOrak.OsztalyCsoportNev		OsztalyCsoportNev
 | 
						|
		,OrarendiOrak.PedagogusNev			PedagogusNev
 | 
						|
		,OrarendiOrak.TantargyNev			TantargyNev
 | 
						|
		,OrarendiOrak.TeremNev				TeremNev
 | 
						|
		,OrarendiOrak.Kezdete				Kezdete
 | 
						|
		,OrarendiOrak.Vege					Vege
 | 
						|
	FROM #orarendiorak  OrarendiOrak
 | 
						|
	WHERE
 | 
						|
		Kezdete < @MinCsengetesiRendOraKezdet
 | 
						|
 | 
						|
	SELECT
 | 
						|
		 Orarend.OraSzam
 | 
						|
		,HetirendId
 | 
						|
		,HetnapjaId
 | 
						|
		,OsztalyCsoportNev
 | 
						|
		,PedagogusNev
 | 
						|
		,TantargyNev
 | 
						|
		,TeremNev
 | 
						|
		,IIF(Orarend.Kezdete != CsengetesiRendAdatok.Kezdete OR Orarend.Vege != CsengetesiRendAdatok.Vege, Orarend.Kezdete + ' - ' + Orarend.Vege, '') KezdesVegeIdopont
 | 
						|
	INTO #Orarend
 | 
						|
	FROM #OrarendTEMP Orarend
 | 
						|
		INNER JOIN #CsengetesiRendAdatok CsengetesiRendAdatok on CsengetesiRendAdatok.Oraszam = Orarend.OraSzam
 | 
						|
 | 
						|
	DECLARE @Hetirendek TABLE (Id INT)
 | 
						|
	DECLARE @HetirendCount INT = (SELECT COUNT(DISTINCT oo.C_HETIREND) FROM T_ORARENDIORA_OSSZES oo WHERE oo.TOROLT='F' AND oo.C_TANEVID=@tanevId)
 | 
						|
 | 
						|
	IF (@HetirendCount=1)
 | 
						|
	BEGIN
 | 
						|
		INSERT INTO @Hetirendek
 | 
						|
		SELECT DISTINCT oo.c_hetirend FROM T_ORARENDIORA_OSSZES oo WHERE oo.TOROLT='F' AND oo.C_TANEVID = @tanevId
 | 
						|
	END
 | 
						|
	ELSE
 | 
						|
	BEGIN
 | 
						|
		INSERT INTO @Hetirendek
 | 
						|
		SELECT DISTINCT oo.C_HETIREND from T_ORARENDIORA_OSSZES oo WHERE oo.TOROLT='F' AND oo.C_TANEVID=@tanevId AND oo.C_HETIREND <> 1554
 | 
						|
	END
 | 
						|
 | 
						|
	DECLARE @Orakezdetek TABLE (Ora INT)
 | 
						|
	INSERT INTO @orakezdetek
 | 
						|
	SELECT DISTINCT OraSzam from #CsengetesiRendAdatok
 | 
						|
 | 
						|
	DECLARE @OsszesOra TABLE (Hetirend INT, Nap INT, Oraszam nvarchar(20))
 | 
						|
	INSERT INTO @OsszesOra
 | 
						|
	SELECT DISTINCT oo.Id, Nap , OraSzam FROM @Hetirendek oo
 | 
						|
		CROSS JOIN (SELECT Ora FROM @Orakezdetek) OraSzam (OraSzam)
 | 
						|
		CROSS JOIN (VALUES (1408),(1409),(1410),(1411),(1412), (1413),(1414)) Nap (Nap)
 | 
						|
 | 
						|
	DECLARE @TenylegesOra TABLE (Hetirend INT, Nap INT, OraSzam NVARCHAR(20), Foglalkozas NVARCHAR(MAX))
 | 
						|
	DECLARE @Orarend TABLE (osztalyId INT, Ora int, Hetirend INT,  Nap INT, Foglalkozas NVARCHAR(MAX))
 | 
						|
 | 
						|
	DECLARE kur CURSOR FOR
 | 
						|
	SELECT Id FROM @Hetirendek
 | 
						|
 | 
						|
	DECLARE @HetirendId int
 | 
						|
 | 
						|
	OPEN kur
 | 
						|
	FETCH NEXT FROM kur INTO @HetirendId
 | 
						|
 | 
						|
	WHILE @@FETCH_STATUS = 0
 | 
						|
	BEGIN
 | 
						|
			INSERT INTO @TenylegesOra
 | 
						|
				SELECT DISTINCT
 | 
						|
					@HetirendId
 | 
						|
					,veg.HetnapjaId
 | 
						|
					,veg.Oraszam
 | 
						|
					,STUFF((SELECT DISTINCT
 | 
						|
							CAST('<b>' + bveg.TantargyNev + '</b>' + CHAR(13) + CHAR(10)
 | 
						|
							+ IIF(LEN(KezdesVegeIdopont) > 0, ' (' + KezdesVegeIdopont +')' + CHAR(13) + CHAR(10), '')
 | 
						|
							+ IIF(bveg.OsztalyCsoportNev <> @osztalyNev, bveg.OsztalyCsoportNev + CHAR(13) + CHAR(10), '')
 | 
						|
							+ bveg.PedagogusNev + CHAR(13) + CHAR(10)
 | 
						|
							+ bveg.TeremNev + CHAR(13) + CHAR(10) AS VARCHAR(max))
 | 
						|
				FROM #Orarend bveg
 | 
						|
				WHERE bveg.HetnapjaId = veg.HetnapjaId
 | 
						|
						AND bveg.Oraszam = veg.Oraszam
 | 
						|
						AND (bveg.HetirendId = @HetirendId OR bveg.HetirendId = 1554)
 | 
						|
				FOR XML PATH(''), TYPE)
 | 
						|
				.value('.','NVARCHAR(MAX)'),1,0,'') Foglalkozasok
 | 
						|
				FROM #Orarend veg
 | 
						|
			FETCH NEXT FROM kur INTO @HetirendId
 | 
						|
	END
 | 
						|
	CLOSE kur
 | 
						|
	DEALLOCATE kur
 | 
						|
 | 
						|
	/*Végleges órarend*/
 | 
						|
	INSERT INTO @Orarend
 | 
						|
	SELECT @osztalyId
 | 
						|
			, OsszesOra.Oraszam
 | 
						|
			, OsszesOra.Hetirend
 | 
						|
			, OsszesOra.Nap
 | 
						|
			, TenylegesOra.Foglalkozas
 | 
						|
	FROM @OsszesOra OsszesOra
 | 
						|
		LEFT JOIN @TenylegesOra TenylegesOra ON OsszesOra.Hetirend = TenylegesOra.Hetirend AND OsszesOra.Nap = TenylegesOra.Nap AND OsszesOra.Oraszam = TenylegesOra.Oraszam
 | 
						|
	ORDER BY OsszesOra.Hetirend, OsszesOra.Nap, OsszesOra.Oraszam
 | 
						|
 | 
						|
	SELECT
 | 
						|
		pv.*
 | 
						|
		, dic.C_NAME	HETIREND_DNAME
 | 
						|
		,@osztalyNev	OsztalyNev
 | 
						|
	FROM @Orarend
 | 
						|
		PIVOT (MAX(Foglalkozas) FOR Nap IN ([1408],[1409],[1410],[1411],[1412],[1413],[1414]))pv
 | 
						|
		INNER JOIN T_DICTIONARYITEMBASE_OSSZES dic ON dic.id=Hetirend AND dic.C_TANEVID = @tanevId
 | 
						|
		INNER JOIN @Orakezdetek ok ON ok.Ora = pv.Ora
 | 
						|
	ORDER BY Ora
 | 
						|
		END
 | 
						|
 | 
						|
		DROP TABLE #CsengetesiRendAdatok
 | 
						|
		DROP TABLE #Orarend
 | 
						|
		DROP TABLE #OrarendiOrak
 | 
						|
GO |