SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO IF OBJECT_ID('sp_GetTeremOrarend') IS NOT NULL BEGIN DROP PROCEDURE sp_GetTeremOrarend END GO CREATE PROCEDURE sp_GetTeremOrarend @intezmenyId INT, @tanevId INT, @teremId INT, @aktivTanevId INT, @isEgyebFoglalkozasok BIT, @isReszletes BIT = 1 AS BEGIN SET NOCOUNT ON; IF @isReszletes = 1 BEGIN SELECT T_INTEZMENYADATOK_OSSZES.C_NEV IntezmenyNeve ,T_INTEZMENYADATOK_OSSZES.C_OMKOD IntezmenyOMKod FROM T_INTEZMENYADATOK_OSSZES WHERE T_INTEZMENYADATOK_OSSZES.TOROLT = 'F' AND T_INTEZMENYADATOK_OSSZES.C_TANEVID = @tanevId END 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 ,@IdoszakKezdete DATE ,@IdoszakVege DATE IF (@tanevId = @AktivtanevId AND GETDATE() <= @UtolsoNap) BEGIN IF (GETDATE() <= @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, GETDATE()) 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 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 OrarendiOra.C_OSZTALYCSOPORTID = Csoport.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)) AND Orarendiora.C_TEREMID = @teremId 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)) 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('' + bveg.TantargyNev + '' + CHAR(13) + CHAR(10) + IIF(LEN(KezdesVegeIdopont) > 0, ' (' + KezdesVegeIdopont +')' + CHAR(13) + CHAR(10), '') + bveg.OsztalyCsoportNev + CHAR(13) + CHAR(10) + bveg.PedagogusNev + 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 @teremId , 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 IF @isReszletes = 1 BEGIN SELECT Terem.Id TeremId ,Terem.C_NEV TeremNev ,Hetirend HetirendId ,HetirendDictionary.C_NAME HetirendNev FROM T_TEREM_OSSZES Terem CROSS JOIN (SELECT ID FROM @Hetirendek) Hetirend (Hetirend) INNER JOIN T_DICTIONARYITEMBASE_OSSZES HetirendDictionary ON HetirendDictionary.id = Hetirend AND HetirendDictionary.C_TANEVID = @tanevId END SELECT @teremId TeremId ,pv.Ora Ora ,Hetirend HetirendId ,(SELECT C_NEV FROM T_TEREM_OSSZES WHERE Id = @teremId) TeremNev ,[1408] 'Hetfo' ,[1409] 'Kedd' ,[1410] 'Szerda' ,[1411] 'Csutortok' ,[1412] 'Pentek' ,[1413] 'Szombat' FROM @Orarend PIVOT (MAX(Foglalkozas) FOR Nap in([1408],[1409],[1410],[1411],[1412],[1413]))pv INNER JOIN @Orakezdetek ok ON ok.Ora = pv.Ora ORDER BY Hetirend, Ora END DROP TABLE #CsengetesiRendAdatok DROP TABLE #Orarend DROP TABLE #OrarendiOrak GO