DROP PROCEDURE IF EXISTS sp_GetDokumentumTanuloOrarend GO CREATE PROCEDURE sp_GetDokumentumTanuloOrarend @tanevId INT, @tanuloId INT, @aktivTanevId INT, @isEgyebFoglalkozasok BIT, @orarendErvenyessegiDatum DATE, @feladatKategoriaId INT = NULL 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 ,@tanuloNev NVARCHAR(MAX) = (SELECT C_NYOMTATASINEV FROM T_FELHASZNALO_OSSZES WHERE ID = @tanuloId) 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_ROVIDNEV, 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_TANULOCSOPORT_OSSZES TanuloCsoport ON TanuloCsoport.C_TANULOID = @tanuloId AND TanuloCsoport.C_OSZTALYCSOPORTID = OrarendiOra.C_OSZTALYCSOPORTID AND TanuloCsoport.TOROLT = 'F' AND @VizsgaltNap BETWEEN C_BELEPESDATUM AND ISNULL(C_KILEPESDATUM, @UtolsoNap) 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 AND (ocs.C_FELADATKATEGORIAID = @feladatKategoriaId OR @feladatKategoriaId IS NULL) LEFT JOIN T_CSENGETESIRENDORA_OSSZES CsengetesiRendOra ON CsengetesiRendOra.Id = OrarendiOra.C_CSENGETESIRENDORAID LEFT JOIN T_CSOPORT_OSSZES Csoport ON Csoport.Id = OrarendiOra.C_OSZTALYCSOPORTID 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 tantargy.C_ISOSZTALYORARENDBENEMLATSZIK = 'F' 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 (TanuloId 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) + 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 @tanuloId , 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 ,@tanuloNev TanuloNev 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 INNER JOIN @Orakezdetek ok ON ok.Ora = pv.Ora ORDER BY Ora END DROP TABLE #CsengetesiRendAdatok DROP TABLE #Orarend DROP TABLE #OrarendiOrak GO