SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO IF OBJECT_ID('dbo.sp_GetOrarendOsztalyonkent') IS NOT NULL BEGIN DROP PROCEDURE dbo.sp_GetOrarendOsztalyonkent END GO CREATE PROCEDURE [dbo].[sp_GetOrarendOsztalyonkent] @intezmenyId INT, @tanevId INT, @osztalyId INT, @aktivTanevId INT AS BEGIN SET NOCOUNT ON; DECLARE @UtolsoNap DATE = (SELECT TOP 1 C_NAPDATUMA FROM T_NAPTARINAP_OSSZES WHERE C_NAPTIPUSA=1395 AND C_TANEVID=@tanevid AND TOROLT='F') ,@HetEleje DATE ,@HetVege DATE DECLARE @osztalyNev NVARCHAR(MAX)=(SELECT ocs.C_NEV FROM T_OSZTALYCSOPORT_OSSZES OCS WHERE ocs.ID=@osztalyId) 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 DECLARE @temp TABLE (HetirendId INT, HetnapjaId INT, Oraszam INT, TantargyNev NVARCHAR(MAX), PedagogusNev NVARCHAR(MAX), TeremNev NVARCHAR(MAX)) INSERT INTO @temp SELECT OrarendiOra.C_HETIREND HetirendId ,OrarendiOra.C_HETNAPJA HetnapjaId ,OrarendiOra.C_ORASZAM Oraszam ,ISNULL(Tantargy.C_NEVNYOMTATVANYBAN, Tantargy.C_NEV) TantargyNev ,Pedagogus.C_NYOMTATASINEV PedagogusNev ,Terem.C_NEV TeremNev FROM T_ORARENDIORA_OSSZES OrarendiOra INNER JOIN fnGetKapcsolodoOsztalycsoportok(@osztalyId) 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 WHERE OrarendiOra.Torolt = 'F' AND OrarendiOra.C_ORAERVENYESSEGKEZDETE <= @Hetvege AND OrarendiOra.C_ORAERVENYESSEGVEGE >= @Heteleje 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 @OsszesOra TABLE (Hetirend INT, Nap INT, Oraszam INT) INSERT INTO @OsszesOra SELECT DISTINCT oo.Id, Nap.Nap , OraSzam.OraSzam FROM @Hetirendek oo CROSS JOIN (VALUES (0),(1),(2),(3),(4),(5),(6),(7),(8),(9),(10)) OraSzam (OraSzam) CROSS JOIN (VALUES (1408),(1409),(1410),(1411),(1412), (1413)) Nap (Nap) DECLARE @TenylegesOra TABLE (Hetirend INT, Nap INT, OraSzam INT, 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+' ('+bveg.PedagogusNev+', '+bveg.TeremNev+')' AS VARCHAR(max)) FROM @temp 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,2,' ') Foglalkozasok FROM @temp 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]))pv INNER JOIN T_DICTIONARYITEMBASE_OSSZES dic ON dic.id=Hetirend AND dic.C_TANEVID = @tanevId ORDER BY Hetirend, Ora END GO