﻿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_DATUM FROM T_TANEVRENDJE_OSSZES WHERE C_NAPTIPUSA = 1394 AND C_TANEVID = @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, 7553) 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