DROP PROCEDURE IF EXISTS uspGetNyomtatvanyokOrarendOsszes GO CREATE PROCEDURE uspGetNyomtatvanyokOrarendOsszes @intezmenyId int ,@tanevID int ,@pIdoszakKezdete datetime ,@pIdoszakVege datetime ,@pTanarId int = NULL ,@pIsHelyettesitesNelkul bit = 0 ,@pOsztalyCsoportId int = NULL ,@pTanuloId int = NULL ,@pTantargyId int = NULL ,@pTeremId int = NULL ,@pCsakOrarendiOrak bit = 0 ,@pIsNapirend bit /* 0 csak orarendi ora, 1 csak napirend, NULL mindkettő */ ,@pKapcsolodoCsoportokMegjelenitese bit = NULL ,@pOsztalyBontasokMegjelenitese bit = NULL ,@pFeladatKategoriaId int = NULL AS BEGIN SET NOCOUNT ON; DECLARE @intezmenyNev nvarchar(510) ,@hetirend int CREATE TABLE #OrarendiOrak ( Datum datetime ,Hetirend int ,HetNapja int ,HetSorszam int ,OraKezdete datetime ,OraVege datetime ,Oraszam int ,TargyNev nvarchar (300) ,OsztalyNev nvarchar (255) ,TanarNev nvarchar (255) ,TeremNev nvarchar (255) ,TanarID int ,OsztCsopId int ,IsEgyediNap char(1) ) CREATE TABLE #Oraszamok ( Oraszam int, OraKezdete char(5), OraVege char(5), PRIMARY KEY(Oraszam) ) SELECT TOP 1 @intezmenyNev = i.C_NEV FROM T_INTEZMENYADATOK_OSSZES i WHERE i.C_INTEZMENYID = @intezmenyId AND i.C_TANEVID = @tanevID AND i.TOROLT = 'F' INSERT INTO #OrarendiOrak ( Datum ,Hetirend ,HetNapja ,HetSorszam ,OraKezdete ,OraVege ,Oraszam ,TargyNev ,OsztalyNev ,TanarNev ,TeremNev ,TanarID ,OsztCsopId ,IsEgyediNap ) EXEC sp_GetOrarend @pIntezmenyId = @intezmenyId ,@pTanevId = @tanevID ,@pIdoszakKezdete = @pIdoszakKezdete ,@pIdoszakVege = @pIdoszakVege ,@pTanarId = @pTanarId ,@pIsHelyettesitesNelkul = @pIsHelyettesitesNelkul ,@pOsztalyCsoportId = @pOsztalyCsoportId ,@pTanuloId = @pTanuloId ,@pTantargyId = @pTantargyId ,@pTeremId = @pTeremId ,@pCsakOrarendiOrak = @pCsakOrarendiOrak ,@pIsNapirend = @pIsNapirend ,@pFeladatKategoriaId = @pFeladatKategoriaId ,@pOszlopok = N'Datum,Hetirend,HetNapja,HetSorszam,OraKezdete,OraVege,Oraszam,TargyNev,OsztalyNev,TanarNev,TeremNev,TanarID,OsztCsopId,IsEgyediNap' -- a lekért órarendben a minden héten órákat átállítjuk a hétsorszámnak megfelelő hetirendre UPDATE orak SET orak.Hetirend = ISNULL(hr.Hetirend, orak.Hetirend) FROM #OrarendiOrak orak LEFT JOIN ( SELECT DISTINCT o.Hetirend ,o.HetSorszam FROM #OrarendiOrak o WHERE Hetirend <> 1554 ) hr ON hr.HetSorszam = orak.HetSorszam WHERE orak.Hetirend = 1554 -- kapcsolódó csoportok óráinak törlése IF @pKapcsolodoCsoportokMegjelenitese IS NOT NULL AND @pKapcsolodoCsoportokMegjelenitese = 0 DELETE orak FROM #OrarendiOrak orak INNER JOIN T_CSOPORT_OSSZES cs ON cs.TOROLT = 'F' AND cs.ID = orak.OsztCsopId AND cs.C_OSZTALYBONTASID IS NULL INNER JOIN T_CSOPORTTIPUS_OSSZES cst ON cst.C_ALTANEVID = cs.C_ALTANEVID AND cst.TOROLT = 'F' AND cst.ID = cs.C_TIPUSA WHERE OsztCsopId != @pOsztalyCsoportId -- osztálybontott csoportok óráinak törlése IF @pOsztalyBontasokMegjelenitese IS NOT NULL AND @pOsztalyBontasokMegjelenitese = 0 DELETE orak FROM #OrarendiOrak orak INNER JOIN T_CSOPORT_OSSZES cs ON cs.ID = orak.OsztCsopId AND cs.C_OSZTALYBONTASID IS NOT NULL WHERE orak.OsztCsopId != @pOsztalyCsoportId -- egyedi napok esetén ne a megtartott napon, hanem az alap hét napján jelenjen meg UPDATE orak SET orak.HetNapja=nn.C_ALAPHETNAPJA FROM #OrarendiOrak orak INNER JOIN T_NAPTARINAP_OSSZES nn ON nn.C_NAPDATUMA = orak.Datum AND nn.C_TANEVID = @tanevID AND nn.TOROLT = 'F' WHERE orak.IsEgyediNap = 'T' INSERT INTO #Oraszamok (Oraszam, OraKezdete, OraVege) SELECT C_ORASZAM ,CONVERT(char(5), C_KEZDETE, 108) ,CONVERT(char(5), C_VEGE, 108) FROM T_CSENGETESIREND_OSSZES cs INNER JOIN T_CSENGETESIRENDORA_OSSZES cso on cs.ID = cso.C_CSENGETESIRENDID WHERE cs.C_TANEVID = @tanevID AND C_AKTIV = 'T' AND cs.TOROLT = 'F' AND cso.TOROLT = 'F' SET @hetirend = (SELECT C_HETIREND FROM T_NAPTARIHET_OSSZES WHERE C_HETSORSZAMA = (SELECT TOP 1 HetSorszam FROM #OrarendiOrak) AND C_TANEVID = @tanevID AND TOROLT = 'F') SELECT DISTINCT COALESCE(@pTanarId, @pTeremId, @pOsztalyCsoportId) AS Id ,STUFF( ( SELECT DISTINCT ', ' + IIF(@pTanarId IS NOT NULL, bo.TanarNev, IIF(@pTeremId IS NOT NULL, bo.TeremNev, IIF(@pOsztalyCsoportId IS NOT NULL, bo.OsztalyNev,''))) FROM #OrarendiOrak bo WHERE bo.Hetirend = o.Hetirend FOR XML PATH(''), TYPE ).value ('.', 'NVARCHAR(MAX)') ,1 , 2, '' ) AS Nev ,@intezmenyNev AS IntezmenyNev ,dic.C_NAME AS Hetirend FROM #OrarendiOrak o INNER JOIN T_DICTIONARYITEMBASE_OSSZES dic ON dic.ID = @hetirend AND dic.C_TANEVID = @tanevID AND dic.TOROLT = 'F' DECLARE @IsNapirend int = ISNULL(@pIsNapirend, 1) SELECT COALESCE(@pTanarId, @pTeremId, @pOsztalyCsoportId) AS Id ,IIF(@pIsNapirend = 0, CAST(t.Oraszam AS nvarchar(3)), ISNULL(t.OraKezdete + ' - ' + t.OraVege, '')) AS Ora ,t.Hetirend AS HetirendId ,[1408] AS Hetfo ,[1409] AS Kedd ,[1410] AS Szerda ,[1411] AS Csutortok ,[1412] AS Pentek ,[1413] AS Szombat ,[1414] AS Vasarnap ,t.HetirendNev AS HetirendNev FROM ( SELECT * FROM ( SELECT STUFF( ( SELECT CONVERT(nvarchar(max), '--------------------' + nchar(13) + nchar(10) + bo.TargyNev + nchar(13) + nchar(10) + bo.OsztalyNev + IIF(@pTeremId IS NOT NULL OR @pOsztalyCsoportId IS NOT NULL, nchar(13) + nchar(10) + bo.TanarNev, '') + nchar(13) + nchar(10) + bo.TeremNev + nchar(13) + nchar(10)) FROM #OrarendiOrak bo WHERE (@pIsNapirend = 0 AND bo.Oraszam = osz.Oraszam and o.HetNapja = bo.HetNapja) OR (@IsNapirend <> 0 AND bo.OraKezdete = o.OraKezdete AND bo.OraVege = o.OraVege and o.HetNapja = bo.HetNapja) FOR XML PATH(''), TYPE ).value ('.', 'NVARCHAR(MAX)'), 1, 22, '' ) AS TargyNev ,o.HetNapja ,osz.Oraszam ,IIF(@IsNapirend <> 0, ISNULL(CONVERT(char(5), o.OraKezdete, 108), osz.Orakezdete), NULL) AS OraKezdete ,IIF(@IsNapirend <> 0, ISNULL(CONVERT(char(5), o.OraVege, 108), osz.OraVege), NULL) AS OraVege ,dic.C_NAME AS HetirendNev ,@hetirend AS Hetirend FROM #OrarendiOrak AS o FULL JOIN #Oraszamok AS osz ON (o.Oraszam IS NULL AND CONVERT(char(5), o.OraKezdete, 108) = osz.Orakezdete AND CONVERT(char(5), o.OraVege, 108) = osz.OraVege) OR o.Oraszam = osz.Oraszam LEFT JOIN T_DICTIONARYITEMBASE_OSSZES AS dic ON dic.C_TANEVID = @tanevID AND dic.TOROLT = 'F' AND dic.ID = @hetirend ) ot PIVOT(MAX(ot.TargyNev) FOR ot.HetNapja IN( [1408] ,[1409] ,[1410] ,[1411] ,[1412] ,[1413] ,[1414]) ) AS pv ) AS t WHERE @pIsNapirend = 0 OR (t.OraKezdete IS NOT NULL AND t.OraVege IS NOT NULL) ORDER BY HetirendNev ,CASE WHEN @pIsNapirend = 0 THEN t.Oraszam ELSE CAST(t.OraKezdete AS datetime) END -- Iktatási adatok IF @pOsztalyCsoportId IS NOT NULL BEGIN -- Osztály adatok SELECT @pOsztalyCsoportId AS OsztalyId ,ocs.C_EVFOLYAMTIPUSA AS Evfolyam ,ocs.C_FELADATELLATASIHELYID AS FeladatEllatasiHelyId ,ocs.C_KEPZESIFORMA AS KepzesiForma ,o.C_OSZTALYFONOKID AS OsztalyFonokId ,o.C_TANTERVID AS TantervId ,o.C_SZAKMACSOPORT AS SzakmaCsoport ,o.C_AGAZAT AS Agazat ,o.C_SZAKKEPESITES AS Szakkepesites ,o.C_RESZSZAKKEPESITES AS Reszszakkepesites ,o.C_AGAZATUJSZKTTIPUSID AS UjSzktAgazat ,o.C_SZAKMATIPUSID AS UjSzktSzakma ,o.C_SZAKMAIRANYTIPUSID AS UjSzktSzakmairany ,o.C_TANULMANYITERULETNKTTIPUSID AS NktTanulmanyiTerulet ,o.C_SZAKKEPESITESNKTTIPUSID AS NktSzakkepesites ,o.C_SZAKIRANYNKTTIPUSID AS NktSzakirany ,ocs.C_KERESZTFELEVES AS OJCSJKeresztfeleves ,ocs.C_VEGZOSEVFOLYAM AS CSJVegzosEvfolyamu ,ocs.C_ISTECHNIKAI AS OJTechnikaiOsztaly ,o.C_NEMZETISEGI AS OJNemzetisegi ,o.C_KETTANNYELVU AS OJKettannyelvu ,o.C_NYELVIELOKESZITO AS OJNyelviElokeszito ,ocs.C_ISGYOGYPEDAGOGIAILOGOPEDIAI AS OJIsGyogypedagogiaiLogopediai ,o.C_SPORT AS OJSportOsztaly ,o.C_AJPROGRAM AS OJAranyJanosProgram FROM T_OSZTALYCSOPORT_OSSZES ocs INNER JOIN T_OSZTALY_OSSZES o ON o.ID = ocs.ID AND o.TOROLT = 'F' AND o.C_ALTANEVID = ocs.C_TANEVID AND o.C_ALINTEZMENYID = ocs.C_INTEZMENYID WHERE ocs.ID = @pOsztalyCsoportId AND ocs.TOROLT = 'F' AND ocs.C_TANEVID = @tanevID AND ocs.C_INTEZMENYID = @intezmenyId -- Osztály csoportok SELECT DISTINCT ot.OsztCsopId AS CsoportId FROM #OrarendiOrak ot INNER JOIN T_CSOPORT_OSSZES cs ON cs.ID = ot.OsztCsopId AND cs.TOROLT = 'F' -- Alkalmazottak SELECT DISTINCT ot.TanarID AS TanarId ,f.C_OKTATASIAZONOSITO AS TanarOktAzon FROM #OrarendiOrak ot LEFT JOIN T_FELHASZNALO_OSSZES f ON f.ID = ot.TanarID AND f.TOROLT = 'F' -- Tanulók SELECT DISTINCT f.ID AS TanuloId ,f.C_NYOMTATASINEV AS TanuloNeve ,f.C_OKTATASIAZONOSITO AS TanuloOktAzon FROM #OrarendiOrak ot INNER JOIN T_TANULOCSOPORT_OSSZES tcs ON tcs.C_OSZTALYCSOPORTID = ot.OsztCsopId AND tcs.C_TANEVID = @tanevID AND tcs.TOROLT = 'F' INNER JOIN T_FELHASZNALO_OSSZES f ON f.ID = tcs.C_TANULOID AND f.TOROLT = 'F' END ELSE IF @pTanarId IS NOT NULL -- Alkalmazottak SELECT DISTINCT orak.TanarID AS TanarId ,f.C_OKTATASIAZONOSITO AS TanarOktAzon ,mua.C_FELADATELLATASIHELYID AS FeladatEllatasiHelyId FROM #OrarendiOrak orak LEFT JOIN T_FELHASZNALO_OSSZES f ON f.ID = orak.TanarID AND f.TOROLT = 'F' INNER JOIN T_MUNKAUGYIADATOK_OSSZES mua ON mua.C_ALKALMAZOTTID = orak.TanarID AND mua.TOROLT = 'F' ELSE IF @pTeremId IS NOT NULL SELECT t.ID AS TeremId ,t.C_MUKODESIHELYID AS FeladatEllatasiHelyId FROM T_TEREM_OSSZES t WHERE t.ID = @pTeremId AND t.TOROLT = 'F' END GO