SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO DROP PROCEDURE IF EXISTS dbo.sp_GetOrarend GO CREATE PROCEDURE dbo.sp_GetOrarend @pIntezmenyId int ,@pTanevId int ,@pIdoszakKezdete date ,@pIdoszakVege date ,@pTanarId int = NULL ,@pIsHelyettesitesNelkul bit = 0 ,@pOsztalyCsoportId int = NULL ,@pTanuloId int = NULL ,@pTantargyId int = NULL ,@pTeremId int = NULL ,@pCsakOrarendiOrak bit ,@pIsNapirend bit = 0 ,@pFeladatKategoriaId int = NULL ,@pOrakezdete time = NULL ,@pOravege time = NULL ,@pHetnapja int = NULL ,@pIsKozpontilagToroltOrak int = 0 ,@pOszlopok nvarchar(4000) = '*' -- sql injection rulez AS SET NOCOUNT ON; DECLARE @SQL NVARCHAR(MAX) = ''; --SET @pOrakezdete = CONVERT(datetime, CONVERT(TIME, @pOrakezdete)); --SET @pOravege = CONVERT(datetime, CONVERT(TIME, @pOravege)); -- DROP TABLE IF EXISTS #KapcsolodoCsoportok SET @SQL += ' CREATE TABLE #KapcsolodoCsoportok( ID int NOT NULL, Kezdete date NOT NULL, Vege date NOT NULL, IsOsztaly bit, PRIMARY KEY CLUSTERED(ID, Kezdete, Vege) ); '; -- Összes osztályhoz vagy csoporthoz kapcsolódó további osztályok vagy csoportok megkeresése IF @pOsztalyCsoportId IS NOT NULL SET @SQL += ' INSERT INTO #KapcsolodoCsoportok(ID, Kezdete, Vege, IsOsztaly) SELECT DISTINCT ID, Kezdete, Vege, 1 as IsOsztaly FROM dbo.fnGetKapcsolodoOsztalyCsoportokByDateRange(@pOsztalyCsoportId, @pIdoszakKezdete, @pIdoszakVege, @pIntezmenyId, @pTanevId) t; '; -- Összes a tanulóhoz kapcsolódó további osztályok vagy csoportok megkeresése (amelyek még nincsenek meg) IF @pTanuloId IS NOT NULL SET @SQL += ' INSERT INTO #KapcsolodoCsoportok(ID, Kezdete, Vege, IsOsztaly) SELECT DISTINCT tcs.C_OSZTALYCSOPORTID AS ID, tcs.C_BELEPESDATUM AS Kezdete, ISNULL(tcs.C_KILEPESDATUM, t.C_UTOLSONAP) AS Vege, 0 As IsOsztaly FROM T_TANULOCSOPORT_OSSZES tcs INNER JOIN T_TANEV_OSSZES t on t.ID = tcs.C_TANEVID WHERE t.TOROLT = ''F'' AND tcs.C_INTEZMENYID = @pIntezmenyId AND tcs.C_TANEVID = @pTanevId AND tcs.C_TANULOID = @pTanuloId AND tcs.TOROLT = ''F'' AND tcs.C_BELEPESDATUM <= @pIdoszakVege AND (tcs.C_KILEPESDATUM > @pIdoszakKezdete OR tcs.C_KILEPESDATUM IS NULL) AND NOT EXISTS(SELECT * FROM #KapcsolodoCsoportok k WHERE k.ID = tcs.C_OSZTALYCSOPORTID); '; -- Fő lekérdezés SET @SQL += ' SELECT ' + @pOszlopok + ' FROM ( SELECT ISNULL(tn.Id, oo.Id) AS Id ,ISNULL(tn.ORARENDIID, oo.ORARENDIID) AS ORARENDIID ,ISNULL(tn.Datum, oo.Datum) AS Datum ,ISNULL(tn.Bontott, oo.Bontott) AS Bontott ,ISNULL(tn.Hetirend, oo.Hetirend) AS Hetirend ,ISNULL(tn.HetNapja, oo.HetNapja) AS HetNapja ,ISNULL(tn.HetSorszam, oo.HetSorszam) AS HetSorszam ,IIF(tn.Id IS NOT NULL, NULL, oo.ErvenyessegKezdete) AS ErvenyessegKezdete ,IIF(tn.Id IS NOT NULL, NULL, oo.ErvenyessegVege) AS ErvenyessegVege ,ISNULL(tn.OraKezdet, oo.OraKezdet) AS OraKezdete ,ISNULL(tn.OraVeg, oo.OraVeg) AS OraVege ,ISNULL(tn.Oraszam, oo.Oraszam) AS Oraszam ,ISNULL(tantargy.C_ROVIDNEV, tantargy.C_NEV) AS TargyNev -- [3]: itt kellene javítani ISNULL helyett COALESCE ,COALESCE(tantargy.C_ROVIDNEV, tantargy.C_NEV) AS TargyNevForMobile ,tantargy.C_TARGYKATEGORIA AS TargykategoriaID ,ISNULL(tn.Megtartott, oo.Megtartott) AS Megtartott ,ISNULL(tn.CsengetesiRendOraID, oo.CsengetesiRendOraID) AS CsengetesiRendOraID ,ISNULL(tn.CsengetesiRendID, oo.CsengetesiRendID) AS CsengetesiRendID ,CAST(ISNULL(oo.MaxOraszam, 48) AS INT) AS MaxNapiOraszam ,osztaly.C_NEV AS OsztalyNev ,ISNULL(tn.TanevRendOsztalyCsoportId, oo.TanevRendOsztalyCsoportId) AS TanevRendOsztalyCsoportId ,ISNULL(tn.MegjelenesOka, oo.MegjelenesOka) AS MegjelenesOka ,tanar.C_NYOMTATASINEV AS TanarNev ,tanar.C_IDPEGYEDIAZONOSITO AS TanarIdpUniqueId ,terem.C_NEV AS TeremNev ,ISNULL(tn.TeremId, oo.TeremId) AS TeremId ,ISNULL(tn.OraTipus, oo.OraTipus) AS OraTipus ,ISNULL(tn.Hianyzas, oo.Hianyzas) AS Hianyzas ,ISNULL(tn.Keses, oo.Keses) AS Keses ,ISNULL(tn.Ures, oo.Ures) AS Ures ,ISNULL(tn.HelyettesitoTanarID, oo.HelyettesitoTanarID) AS HelyettesitoTanarID ,helyettes.C_NYOMTATASINEV AS HelyettesitoTanarNev ,helyettes.C_IDPEGYEDIAZONOSITO AS HelyettesitoTanarIdpUniqueId ,oo.HelyettesitesId AS HelyettesitesId ,ISNULL(tn.TanarID, oo.TanarID) AS TanarID ,ISNULL(tn.AdminAltalKiirt, oo.AdminAltalKiirt) AS AdminAltalKiirt ,ISNULL(tn.GroupId, oo.GroupId) AS GroupId ,tn.Tema AS Tema ,tn.EvesOraSorszam AS EvesOraSorszam ,ISNULL(tn.TantargyId, oo.TantargyId) AS TantargyId ,ISNULL(tn.OsztCsopId, oo.OsztCsopId) AS OsztCsopId ,csoport.C_OSZTALYBONTASID AS OsztalyBontasId ,ISNULL(tn.IsEgyediNap, oo.IsEgyediNap) as IsEgyediNap ,terem.C_TOBBORATLEHETTARTANI AS TeremTobbOratLehetTartani ,oo.KozpontiOraGroupId ,oo.KozpontilagToroltOraGroupId ,ISNULL(oo.CREATED, tn.CREATED) CREATED ,ISNULL(oo.LASTCHANGED, tn.LASTCHANGED) LASTCHANGED FROM ( -- Órarendi órák + helyettesítések SELECT orr.C_ORARENDIORAID AS Id ,orr.C_ORARENDIORAID AS ORARENDIID ,orr.C_DATUM AS Datum ,orr.C_BONTOTT AS Bontott ,orr.C_HETIREND AS Hetirend ,orr.C_HETNAPJA AS HetNapja ,orr.C_HETSORSZAMA AS HetSorszam ,orr.C_ORAERVENYESSEGKEZDETE AS ErvenyessegKezdete ,orr.C_ORAERVENYESSEGVEGE AS ErvenyessegVege ,CAST(orr.C_DATUM AS DATETIME) + CAST(orr.C_ORAKEZDETE AS DATETIME) AS OraKezdet ,CAST(orr.C_DATUM AS DATETIME) + CAST(orr.C_ORAVEGE AS DATETIME) AS OraVeg ,orr.C_ORAKEZDETE AS OraKezdete ,orr.C_ORAVEGE AS OraVege ,orr.C_ORASZAM AS Oraszam ,orr.C_MAXORASZAM AS MaxOraszam ,''F'' AS Megtartott ,csro.ID AS CsengetesiRendOraID ,csro.C_CSENGETESIRENDID AS CsengetesiRendID ,orr.C_OSZTALYCSOPORTID AS TanevRendOsztalyCsoportId ,'''' AS MegjelenesOka ,orr.C_TEREMID AS TeremId ,''OrarendiOra'' AS OraTipus ,''F'' AS Hianyzas ,''F'' AS Keses ,''F'' AS Ures ,orr.C_HELYETTESTANAROKID AS HelyettesitoTanarID ,orr.C_HELYETTESITESID AS HelyettesitesId ,orr.C_TANARID AS TanarID ,NULL AS AdminAltalKiirt ,orr.C_ORARENDIORAGROUPID AS GroupId ,NULL AS Tema ,orr.C_TANTARGYID AS TantargyId ,orr.C_OSZTALYCSOPORTID AS OsztCsopId ,orr.C_EGYEDINAP as IsEgyediNap ,orr.C_KOZPONTIORAGROUPID as KozpontiOraGroupId ,orr.C_KOZPONTILAGTOROLTORAGROUPID as KozpontilagToroltOraGroupId ,orr.CREATED ,orr.LASTCHANGED FROM T_ORARENDTELJES_OSSZES orr LEFT JOIN T_CSENGETESIRENDORA_OSSZES csro ON csro.C_CSENGETESIRENDID = orr.C_CSENGETESIRENDID AND csro.C_ORASZAM = orr.C_ORASZAM AND csro.TOROLT = ''F'' LEFT JOIN #KapcsolodoCsoportok kocs ON orr.C_OSZTALYCSOPORTID = kocs.Id AND orr.C_DATUM >= kocs.Kezdete AND orr.C_DATUM < kocs.Vege WHERE 0 = 0 AND orr.C_INTEZMENYID = @pIntezmenyId AND orr.C_TANEVID = @pTanevId AND orr.C_DATUM >= @pIdoszakKezdete AND orr.C_DATUM < @pIdoszakVege AND ((@pIsNapirend = 1 OR @pIsNapirend IS NULL) OR csro.ID IS NOT NULL) AND ((@pIsNapirend = 0 OR @pIsNapirend IS NULL) OR orr.C_CSENGETESIRENDID IS NULL) AND ((@pIsNapirend = 0 OR @pIsNapirend = 1) OR ((orr.C_CSENGETESIRENDID IS NOT NULL AND csro.C_CSENGETESIRENDID IS NOT NULL) OR (orr.C_CSENGETESIRENDID IS NULL AND csro.C_CSENGETESIRENDID IS NULL))) AND (@pTantargyId IS NULL OR orr.C_TANTARGYID = @pTantargyId) AND ((@pOravege IS NULL OR @pOrakezdete IS NULL) OR (orr.C_ORAVEGE > @pOrakezdete AND orr.C_ORAKEZDETE < @pOravege)) AND (@pHetnapja IS NULL OR orr.C_HETNAPJA = @pHetnapja) AND (@pTeremId IS NULL OR orr.C_TEREMID = @pTeremId) AND (@pOsztalyCsoportId IS NULL OR kocs.Id IS NOT NULL) AND (@pTanuloId IS NULL OR kocs.Id IS NOT NULL) AND (@pFeladatKategoriaId IS NULL OR orr.C_FELADATKATEGORIAID = @pFeladatKategoriaId) AND ((@pOsztalyCsoportId IS NULL AND @pTanuloId IS NULL) OR orr.C_ISOSZTALYORARENDBENEMLATSZIK = ''F'') AND ( ((@pTanarId IS NULL AND @pIsHelyettesitesNelkul = 1) AND (orr.C_TANARID IS NOT NULL OR orr.C_HELYETTESTANAROKID IS NULL)) OR ((@pTanarId IS NULL AND @pIsHelyettesitesNelkul = 0) AND (orr.C_TANARID IS NOT NULL OR orr.C_HELYETTESTANAROKID IS NOT NULL)) OR ((@pTanarId IS NOT NULL AND @pIsHelyettesitesNelkul = 1) AND orr.C_TANARID = @pTanarId) OR ((@pTanarId IS NOT NULL AND @pIsHelyettesitesNelkul = 0) AND (orr.C_TANARID = @pTanarId OR orr.C_HELYETTESTANAROKID = @pTanarId)) ) ) oo FULL JOIN ( -- Tanítási órák + helyettesítések SELECT tao.ID AS Id ,NULL AS ORARENDIID ,CAST(tao.C_DATUM AS DATE) AS Datum ,tao.C_BONTOTT AS Bontott ,1554 AS Hetirend ,tao.C_HETNAPJA AS HetNapja ,tao.C_HETSORSZAMA AS HetSorszam ,tao.C_ORAKEZDETE AS OraKezdet ,tao.C_ORAVEGE AS OraVeg ,CAST(tao.C_ORAKEZDETE AS TIME) AS OraKezdete ,CAST(tao.C_ORAVEGE AS TIME) AS OraVege ,tao.C_ORASZAM AS Oraszam ,tao.C_MEGTARTOTT AS Megtartott ,tao.C_CSENGETESIRENDORAID AS CsengetesiRendOraID ,tao.C_CSENGETESIRENDID AS CsengetesiRendID ,tao.C_OSZTALYCSOPORTID AS TanevRendOsztalyCsoportId ,'''' AS MegjelenesOka ,tao.C_TEREMID as TeremId ,''TanitasiOra'' AS OraTipus ,IIF(mh.ID IS NULL, ''F'', ''T'') AS Hianyzas ,IIF(mk.ID IS NULL, ''F'', ''T'') AS Keses ,IIF(mu.ID IS NULL, ''F'', ''T'') AS Ures ,tao.C_HELYETTESITOTANARID AS HelyettesitoTanarID ,tao.C_TANARID AS TanarID ,tao.C_ADMINALTALKIIRT AS AdminAltalKiirt ,tao.C_ORARENDIORAGROUPID AS GroupId ,tao.C_TEMA AS Tema ,tao.C_TANTARGYID AS TantargyId ,tao.C_OSZTALYCSOPORTID AS OsztCsopId ,tao.C_EGYEDINAP as IsEgyediNap ,tao.C_ORAEVESSORSZAMA AS EvesOraSorszam ,tao.CREATED ,tao.LASTCHANGED FROM T_TANITASIORA_OSSZES tao INNER JOIN T_OSZTALYCSOPORT_OSSZES ocs ON ocs.ID = tao.C_OSZTALYCSOPORTID AND ocs.TOROLT = ''F'' AND ocs.C_INTEZMENYID = @pIntezmenyId AND ocs.C_TANEVID = @pTanevId INNER JOIN T_TANTARGY_OSSZES tt ON tao.C_TANTARGYID = tt.ID AND tt.C_INTEZMENYID = @pIntezmenyId AND tt.C_TANEVID = @pTanevId LEFT JOIN #KapcsolodoCsoportok kocs ON tao.C_OSZTALYCSOPORTID = kocs.Id AND tao.C_DATUM >= kocs.Kezdete AND tao.C_DATUM < kocs.Vege LEFT JOIN T_TANULOMULASZTAS_OSSZES mh ON mh.C_TANITASIORAKID = tao.ID AND mh.C_ORATANULOIID = @pTanuloId AND mh.C_TIPUS = 1500 AND mh.TOROLT = ''F'' LEFT JOIN T_TANULOMULASZTAS_OSSZES mk ON mk.C_TANITASIORAKID = tao.ID AND mk.C_ORATANULOIID = @pTanuloId AND mk.C_TIPUS = 1499 AND mk.TOROLT = ''F'' LEFT JOIN T_TANULOMULASZTAS_OSSZES mu ON mu.C_TANITASIORAKID = tao.ID AND mu.C_ORATANULOIID = @pTanuloId AND mu.C_TIPUS = 1817 AND mu.TOROLT = ''F'' WHERE 0 = 0 AND (@pCsakOrarendiOrak = 0) AND tao.TOROLT = ''F'' AND tao.C_INTEZMENYID = @pIntezmenyId AND tao.C_TANEVID = @pTanevId AND tao.C_DATUM >= @pIdoszakKezdete AND tao.C_DATUM < @pIdoszakVege AND (@pOsztalyCsoportId IS NULL OR kocs.Id IS NOT NULL) AND (@pTanuloId IS NULL OR kocs.Id IS NOT NULL) AND ((@pIsNapirend = 0 OR @pIsNapirend IS NULL) OR tao.C_CSENGETESIRENDID IS NULL) AND ((@pIsNapirend = 1 OR @pIsNapirend IS NULL) OR tao.C_CSENGETESIRENDID IS NOT NULL) AND ((@pTanarId IS NULL OR @pIsHelyettesitesNelkul = 1) OR (tao.C_TANARID = @pTanarId OR tao.C_HELYETTESITOTANARID = @pTanarId)) AND ((@pTanarId IS NULL OR @pIsHelyettesitesNelkul = 0) OR (tao.C_TANARID = @pTanarId)) AND (@pTantargyId IS NULL OR tao.C_TANTARGYID = @pTantargyId) AND ((@pOravege IS NULL OR @pOrakezdete IS NULL) OR (CAST(tao.C_ORAVEGE AS TIME) > @pOrakezdete AND CAST(tao.C_ORAKEZDETE AS TIME) < @pOravege)) AND (@pHetnapja IS NULL OR tao.C_HETNAPJA = @pHetnapja) AND (@pTeremId IS NULL OR tao.C_TEREMID = @pTeremId) AND (@pFeladatKategoriaId IS NULL OR ocs.C_FELADATKATEGORIAID = @pFeladatKategoriaId) AND (@pTanuloId IS NULL OR ((mu.C_TIPUS <> 1817 OR mu.C_TIPUS IS NULL) OR (tt.C_ISOSZTALYORARENDBENEMLATSZIK = ''F''))) ) tn ON 0 = 0 AND tn.Datum = oo.Datum AND tn.HetNapja = oo.HetNapja AND ((@pIsNapirend IS NULL OR @pIsNapirend = 0) OR (tn.OraKezdete = oo.OraKezdete AND tn.OraVege = oo.OraVege)) AND ((@pIsNapirend IS NULL OR @pIsNapirend = 1) OR (tn.Oraszam = oo.Oraszam)) AND (@pIsNapirend IS NOT NULL OR ((tn.CsengetesiRendID IS NULL AND tn.OraKezdete = oo.OraKezdete AND tn.OraVege = oo.OraVege) OR (tn.CsengetesiRendID IS NOT NULL AND tn.Oraszam = oo.Oraszam))) AND tn.TanevRendOsztalyCsoportId = oo.TanevRendOsztalyCsoportId AND tn.TantargyId = oo.TantargyId AND tn.TanarID = oo.TanarID LEFT JOIN T_TANTARGY_OSSZES tantargy ON tantargy.ID = ISNULL(tn.TantargyId, oo.TantargyId) AND (@pOsztalyCsoportId IS NULL OR tantargy.C_ISOSZTALYORARENDBENEMLATSZIK = ''F'') AND tantargy.C_INTEZMENYID = @pIntezmenyId AND tantargy.C_TANEVID = @pTanevId LEFT JOIN T_FELHASZNALO_OSSZES tanar ON tanar.ID = ISNULL(tn.TanarID, oo.TanarID) AND tanar.C_INTEZMENYID = @pIntezmenyId AND tanar.C_TANEVID = @pTanevId LEFT JOIN T_TEREM_OSSZES terem ON terem.ID = ISNULL(tn.TeremId, oo.TeremId) AND terem.C_INTEZMENYID = @pIntezmenyId AND terem.C_TANEVID = @pTanevId LEFT JOIN T_CSOPORT_OSSZES csoport ON csoport.ID = ISNULL(tn.OsztCsopId, oo.OsztCsopId) AND csoport.C_ALINTEZMENYID = @pIntezmenyId AND csoport.C_ALTANEVID = @pTanevId LEFT JOIN T_FELHASZNALO_OSSZES helyettes ON helyettes.ID = ISNULL(tn.HelyettesitoTanarID, oo.HelyettesitoTanarID) AND helyettes.C_INTEZMENYID = @pIntezmenyId AND helyettes.C_TANEVID = @pTanevId LEFT JOIN T_OSZTALYCSOPORT_OSSZES osztaly ON osztaly.ID = ISNULL(tn.OsztCsopId, oo.OsztCsopId) AND (@pFeladatKategoriaId IS NULL OR osztaly.C_FELADATKATEGORIAID = @pFeladatKategoriaId) AND osztaly.C_INTEZMENYID = @pIntezmenyId AND osztaly.C_TANEVID = @pTanevId ) main OPTION (OPTIMIZE FOR UNKNOWN) '; EXEC sp_executesql @stmt = @SQL ,@params = N' @pIntezmenyId int ,@pTanevId int ,@pIdoszakKezdete date ,@pIdoszakVege date ,@pTanarId int ,@pIsHelyettesitesNelkul bit ,@pOsztalyCsoportId int ,@pTanuloId int ,@pTantargyId int ,@pTeremId int ,@pCsakOrarendiOrak bit ,@pIsNapirend bit ,@pFeladatKategoriaId int ,@pOrakezdete time ,@pOravege time ,@pHetnapja int ,@pIsKozpontilagToroltOrak int' ,@pIntezmenyId = @pIntezmenyId ,@pTanevId = @pTanevId ,@pIdoszakKezdete = @pIdoszakKezdete ,@pIdoszakVege = @pIdoszakVege ,@pTanarId = @pTanarId ,@pIsHelyettesitesNelkul = @pIsHelyettesitesNelkul ,@pOsztalyCsoportId = @pOsztalyCsoportId ,@pTanuloId = @pTanuloId ,@pTantargyId = @pTantargyId ,@pTeremId = @pTeremId ,@pCsakOrarendiOrak = @pCsakOrarendiOrak ,@pIsNapirend = @pIsNapirend ,@pFeladatKategoriaId = @pFeladatKategoriaId ,@pOrakezdete = @pOrakezdete ,@pOravege = @pOravege ,@pHetnapja = @pHetnapja ,@pIsKozpontilagToroltOrak = @pIsKozpontilagToroltOrak GO