DROP PROCEDURE IF EXISTS sp_GetOrarend GO CREATE PROCEDURE sp_GetOrarend @pIntezmenyId int ,@pTanevId 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 ,@pIsNapirend bit = 0 /*0 csak orarendi ora, 1 csak napirend, NULL mindkettő*/ ,@pFeladatKategoriaId int = NULL ,@pOrakezdete datetime = NULL ,@pOravege datetime = NULL ,@pHetnapja int = NULL AS BEGIN SET NOCOUNT ON; SET @pOrakezdete = CONVERT(datetime,CONVERT(TIME, @pOrakezdete)) SET @pOravege = CONVERT(datetime,CONVERT(TIME, @pOravege)) DECLARE @sqlOrarendiOra nvarchar(max) =N'' DECLARE @sql nvarchar(max) = '' IF @pOsztalyCsoportId IS NOT NULL BEGIN SET @sql = N' CREATE TABLE #Orarend ( C_DATUM datetime ,C_ORARENDIORAID int ,C_OSZTALYCSOPORTID int INDEX IX1 CLUSTERED(C_ORARENDIORAID, C_DATUM) ); INSERT INTO #Orarend (C_DATUM, C_ORARENDIORAID, C_OSZTALYCSOPORTID) SELECT orr.C_DATUM, orr.C_ORARENDIORAID, kocs.ID FROM T_ORAREND_OSSZES orr INNER JOIN T_ORARENDIORA_OSSZES oo ON oo.ID = orr.C_ORARENDIORAID INNER JOIN fnGetKapcsolodoOsztalyCsoportokByDateRange(@pOsztalyCsoportId, @pIdoszakKezdete, @pIdoszakVege, @pIntezmenyId, @pTanevId) kocs ON oo.C_OSZTALYCSOPORTID = kocs.Id AND orr.C_DATUM >= kocs.Kezdete AND orr.C_DATUM < kocs.Vege AND oo.C_TANEVID = 563 AND oo.TOROLT = ''F'' AND orr.C_TANEVID = 563' END SET @sql += N' CREATE TABLE #OrarendTable ( Id int ,ORARENDIID int ,Datum datetime ,Bontott char(1) ,Hetirend int ,HetNapja int ,HetSorszam int ,ErvenyessegKezdete datetime ,ErvenyessegVege datetime ,OraKezdete datetime ,OraVege datetime ,Oraszam int ,TargyNev nvarchar(300) ,TargyNevForMobile nvarchar(300) ,TargykategoriaID int ,Megtartott char(1) ,CsengetesiRendOraID int ,CsengetesiRendID int ,MaxNapiOraszam int ,OsztalyNev nvarchar(255) ,TanevRendOsztalyCsoportId int ,MegjelenesOka nvarchar(300) ,TanarNev nvarchar(255) ,TeremNev nvarchar(255) ,TeremId int ,OraTipus nvarchar(200) ,Hianyzas char(1) ,Keses char(1) ,Ures char(1) ,HelyettesitoTanarID int ,HelyettesitoTanarNev nvarchar(255) ,HelyettesitesId int ,TanarID int ,AdminAltalKiirt char(1) ,GroupId int ,Tema nvarchar(max) ,TantargyId int ,OsztCsopId int ,IsEgyediNap char(1) ,TeremTobbOratLehetTartani char(1) ,KozpontiOraGroupId uniqueidentifier NULL ,KozpontilagToroltOraGroupId uniqueidentifier NULL ,INDEX IX1 CLUSTERED(Datum, HetNapja, Oraszam, TanevRendOsztalyCsoportId, TantargyId, TanarID) );' IF @pCsakOrarendiOrak = 0 BEGIN SET @sql += N' INSERT INTO #OrarendTable ' END SET @sqlOrarendiora += N' SELECT oo.ID AS Id ,oo.ID AS ORARENDIID ,orr.C_DATUM AS Datum ,oo.C_BONTOTT AS Bontott ,oo.C_HETIREND AS Hetirend ,oo.C_HETNAPJA AS HetNapja ,nn.C_HETSORSZAMA AS HetSorszam ,oo.C_ORAERVENYESSEGKEZDETE AS ErvenyessegKezdete ,oo.C_ORAERVENYESSEGVEGE AS ErvenyessegVege ,orr.C_DATUM + oo.C_ORAKEZDETE AS OraKezdete ,orr.C_DATUM + oo.C_ORAVEGE AS OraVege ,oo.C_ORASZAM AS Oraszam ,ISNULL(tt.C_ROVIDNEV, tt.C_NEV) AS TargyNev ,COALESCE(tt.C_ROVIDNEV, tt.C_NEV) AS TargyNevForMobile ,tt.C_TARGYKATEGORIA AS TargykategoriaID ,''F'' AS Megtartott ,csro.ID AS CsengetesiRendOraID ,csro.C_CSENGETESIRENDID AS CsengetesiRendID ,MAX(oo.C_ORASZAM) OVER() AS MaxNapiOraszam ,ocs.C_NEV AS OsztalyNev ,ocs.ID AS TanevRendOsztalyCsoportId ,'''' AS MegjelenesOka ,tanar.C_NYOMTATASINEV AS TanarNev ,terem.C_NEV AS TeremNev ,terem.ID AS TeremId ,''OrarendiOra'' AS OraTipus ,''F'' AS Hianyzas ,''F'' AS Keses ,''F'' AS Ures ,hisz.C_HELYETTESTANAROKID AS HelyettesitoTanarID ,helyettes.C_NYOMTATASINEV AS HelyettesitoTanarNev ,hisz.Id AS HelyettesitesId ,tanar.ID AS TanarID ,NULL AS AdminAltalKiirt ,oo.C_ORARENDIORAGROUPID AS GroupId ,NULL AS Tema ,oo.C_TANTARGYID AS TantargyId ,oo.C_OSZTALYCSOPORTID AS OsztCsopId ,oo.C_EGYEDINAP as IsEgyediNap ,ISNULL(terem.C_TOBBORATLEHETTARTANI,''F'') as TeremTobbOratLehetTartani ,oo.C_KOZPONTIORAGROUPID as KozpontiOraGroupId ,oo.C_KOZPONTILAGTOROLTORAGROUPID as KozpontilagToroltOraGroupId FROM ' + IIF(@pOsztalyCsoportId IS NULL, 'T_ORAREND', '#Orarend') + ' orr INNER JOIN T_NAPTARINAP_OSSZES nn ON orr.C_DATUM = nn.C_NAPDATUMA INNER JOIN T_ORARENDIORA_OSSZES oo ON orr.C_ORARENDIORAID = oo.ID --AND oo.TOROLT = ''F'' INNER JOIN T_OSZTALYCSOPORT_OSSZES ocs ON ocs.ID = oo.C_OSZTALYCSOPORTID INNER JOIN T_TANTARGY_OSSZES tt ON tt.ID = oo.C_TANTARGYID AND tt.TOROLT = ''F'' INNER JOIN T_FELHASZNALO_OSSZES tanar ON tanar.ID = oo.C_TANARID AND tanar.TOROLT = ''F'' LEFT JOIN T_TEREM_OSSZES terem ON terem.id = oo.C_TEREMID AND terem.TOROLT = ''F'' LEFT JOIN T_HELYETTESITESIIDOSZAK_OSSZES hisz ON oo.ID = hisz.C_HELYETTESITETTORARENDID AND hisz.C_HELYETTESITESNAPJA = nn.C_NAPDATUMA AND hisz.TOROLT = ''F'' LEFT JOIN T_FELHASZNALO_OSSZES helyettes ON hisz.C_HELYETTESTANAROKID = helyettes.ID AND helyettes.TOROLT = ''F'' ' + IIF(@pIsNapirend = 0, 'INNER', 'LEFT') + ' JOIN T_CSENGETESIRENDORA_OSSZES csro ON csro.C_CSENGETESIRENDID = oo.C_CSENGETESIRENDID AND csro.C_ORASZAM = oo.C_ORASZAM AND csro.TOROLT = ''F'' WHERE oo.TOROLT = ''F'' --AND orr.C_TANEVID = @pTanevId ' + IIF(@pOsztalyCsoportId IS NULL,' AND orr.C_DATUM >= @pIdoszakKezdete AND orr.C_DATUM < @pIdoszakVege AND orr.C_TANEVID = @pTanevId',' ') + ' ' + CASE WHEN @pIsNapirend = 1 THEN N'AND oo.C_CSENGETESIRENDID IS NULL ' WHEN @pIsNapirend IS NULL THEN N'AND ((oo.C_CSENGETESIRENDID IS NOT NULL AND csro.C_CSENGETESIRENDID IS NOT NULL) OR (oo.C_CSENGETESIRENDID IS NULL AND csro.C_CSENGETESIRENDID IS NULL))' ELSE '' END + ' ' + IIF(@pTantargyId IS NULL, N'', N'AND oo.C_TANTARGYID = @pTantargyId') + N' ' + IIF(@pOravege IS NOT NULL AND @pOrakezdete IS NOT NULL, N'AND oo.C_ORAVEGE > @pOrakezdete AND oo.C_ORAKEZDETE < @pOravege', N'') + N' ' + IIF(@pHetnapja IS NULL, N'', N'AND nn.C_HETNAPJA = @pHetnapja') + N' ' + IIF(@pTeremId IS NULL, N'', 'AND oo.C_TEREMID = @pTeremId') + N' ' + IIF(@pFeladatKategoriaId IS NULL, N'', 'AND ocs.C_FELADATKATEGORIAID = @pFeladatKategoriaId') SET @sql += @sqlOrarendiOra + N' ' + IIF(@pTanarId IS NULL, N'', 'AND oo.C_TANARID = @pTanarId') IF @pTanarId IS NOT NULL AND @pIsHelyettesitesNelkul = 0 BEGIN SET @sql += N' UNION ALL ' + @sqlOrarendiOra + ' AND hisz.C_HELYETTESTANAROKID = @pTanarId AND hisz.C_HELYETTESITESNAPJA = orr.C_DATUM ' END IF @pCsakOrarendiOrak = 0 BEGIN /* TanításiÓra lekérdezés */ SET @sql += N' 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.OraKezdete, oo.OraKezdete) AS OraKezdete ,ISNULL(tn.OraVege, oo.OraVege) AS OraVege ,ISNULL(tn.Oraszam, oo.Oraszam) AS Oraszam ,ISNULL(tn.TargyNev, oo.TargyNev) AS TargyNev ,ISNULL(tn.TargyNevForMobile, oo.TargyNevForMobile) AS TargyNevForMobile ,ISNULL(tn.TargykategoriaID, oo.TargykategoriaID) AS TargykategoriaID ,ISNULL(tn.Megtartott, oo.Megtartott) AS Megtartott ,ISNULL(tn.CsengetesiRendOraID, oo.CsengetesiRendOraID) AS CsengetesiRendOraID ,ISNULL(tn.CsengetesiRendID, oo.CsengetesiRendID) AS CsengetesiRendID ,ISNULL(tn.MaxNapiOraszam, oo.MaxNapiOraszam) AS MaxNapiOraszam ,ISNULL(tn.OsztalyNev, oo.OsztalyNev) AS OsztalyNev ,ISNULL(tn.TanevRendOsztalyCsoportId, oo.TanevRendOsztalyCsoportId) AS TanevRendOsztalyCsoportId ,ISNULL(tn.MegjelenesOka, oo.MegjelenesOka) AS MegjelenesOka ,ISNULL(tn.TanarNev, oo.TanarNev) AS TanarNev ,ISNULL(tn.TeremNev, oo.TeremNev) 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 ,ISNULL(tn.HelyettesitoTanarNev, oo.HelyettesitoTanarNev) AS HelyettesitoTanarNev ,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 ,ISNULL(tn.TantargyId, oo.TantargyId) AS TantargyId ,ISNULL(tn.OsztCsopId, oo.OsztCsopId) AS OsztCsopId ,ISNULL(tn.IsEgyediNap, oo.IsEgyediNap) as IsEgyediNap ,ISNULL(tn.TeremTobbOratLehetTartani, oo.TeremTobbOratLehetTartani) as TeremTobbOratLehetTartani ,oo.KozpontiOraGroupId ,oo.KozpontilagToroltOraGroupId FROM #OrarendTable oo ' SET @sql += N' FULL JOIN ( SELECT tao.ID AS Id ,NULL AS ORARENDIID ,tao.C_DATUM AS Datum ,tao.C_BONTOTT AS Bontott ,1554 AS Hetirend ,tao.C_HETNAPJA AS HetNapja ,tao.C_HETSORSZAMA AS HetSorszam ,tao.C_ORAKEZDETE AS OraKezdete ,tao.C_ORAVEGE AS OraVege ,tao.C_ORASZAM AS Oraszam ,ISNULL(tt.C_ROVIDNEV, tt.C_NEV) AS TargyNev ,COALESCE(tt.C_ROVIDNEV, tt.C_NEV) AS TargyNevForMobile ,tt.C_TARGYKATEGORIA AS TargykategoriaID ,tao.C_MEGTARTOTT AS Megtartott ,tao.C_CSENGETESIRENDORAID AS CsengetesiRendOraID ,tao.C_CSENGETESIRENDID AS CsengetesiRendID ,MAX(tao.C_ORASZAM) OVER() AS MaxNapiOraszam ,ocs.C_NEV AS OsztalyNev ,tao.C_OSZTALYCSOPORTID AS TanevRendOsztalyCsoportId ,'''' AS MegjelenesOka ,tanar.C_NYOMTATASINEV AS TanarNev ,terem.C_NEV AS TeremNev ,terem.ID as TeremId ,''TanitasiOra'' AS OraTipus ,' + IIF(@pTanuloId IS NULL, N'''F''', N'IIF(mh.ID IS NULL, ''F'', ''T'')') + N' AS Hianyzas ,' + IIF(@pTanuloId IS NULL, N'''F''', N'IIF(mk.ID IS NULL, ''F'', ''T'')') + N' AS Keses ,' + IIF(@pTanuloId IS NULL, N'''F''', N'IIF(mu.ID IS NULL, ''F'', ''T'')') + N' AS Ures ,helyettes.ID HelyettesitoTanarID ,helyettes.C_NYOMTATASINEV HelyettesitoTanarNev ,tanar.ID 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 ,ISNULL(terem.C_TOBBORATLEHETTARTANI,''F'') as TeremTobbOratLehetTartani FROM T_TANITASIORA_OSSZES tao INNER JOIN T_OSZTALYCSOPORT_OSSZES ocs ON ocs.ID = tao.C_OSZTALYCSOPORTID AND ocs.TOROLT = ''F'' ' + IIF(@pOsztalyCsoportId IS NULL, '', 'INNER JOIN dbo.fnGetKapcsolodoOsztalyCsoportokByDateRange(@pOsztalyCsoportId, @pIdoszakKezdete, @pIdoszakVege, @pIntezmenyId, @pTanevId) kocs ON tao.C_OSZTALYCSOPORTID = kocs.Id AND tao.C_DATUM >= kocs.Kezdete AND tao.C_DATUM < kocs.Vege') + ' INNER JOIN T_TANTARGY_OSSZES tt ON tao.C_TANTARGYID = tt.ID INNER JOIN T_FELHASZNALO_OSSZES tanar ON tao.C_TANARID = tanar.ID LEFT JOIN T_FELHASZNALO_OSSZES helyettes ON helyettes.ID = tao.C_HELYETTESITOTANARID INNER JOIN T_TEREM_OSSZES terem ON terem.ID = tao.C_TEREMID ' IF @pTanuloId IS NOT NULL BEGIN SET @sql += N' 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'' ' END SET @sql += N' WHERE tao.TOROLT = ''F'' AND tao.C_TANEVID = @pTanevId AND tao.C_DATUM >= @pIdoszakKezdete AND tao.C_DATUM < @pIdoszakVege ' + CASE @pIsNapirend WHEN 1 THEN N'AND tao.C_CSENGETESIRENDID IS NULL ' WHEN 0 THEN 'AND tao.C_CSENGETESIRENDID IS NOT NULL ' ELSE '' END + ' ' + IIF(@pTanarId IS NULL, N'', IIF(@pIsHelyettesitesNelkul = 0, 'AND (tao.C_TANARID = @pTanarId OR tao.C_HELYETTESITOTANARID = @pTanarId)', 'AND tao.C_TANARID = @pTanarId')) + ' ' + IIF(@pTantargyId IS NULL, N'', 'AND tao.C_TANTARGYID = @pTantargyId') + ' ' + IIF(@pOravege IS NOT NULL AND @pOrakezdete IS NOT NULL, N'AND tao.C_ORAVEGE > @pOrakezdete AND tao.C_ORAKEZDETE < @pOravege', N'') + N' ' + IIF(@pHetnapja IS NULL, N'', N'AND tao.C_HETNAPJA = @pHetnapja') + N' ' + IIF(@pTeremId IS NULL, N'', 'AND tao.C_TEREMID = @pTeremId') + N' ' + IIF(@pFeladatKategoriaId IS NULL, N'', 'AND ocs.C_FELADATKATEGORIAID = @pFeladatKategoriaId') + N' ) tn ON tn.Datum = oo.Datum AND tn.HetNapja = oo.HetNapja ' + CASE @pIsNapirend WHEN 1 THEN N'AND tn.OraKezdete = oo.OraKezdete AND tn.OraVege = oo.OraVege ' WHEN 0 THEN N'AND tn.Oraszam = oo.Oraszam ' ELSE N'AND ((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)) ' END + ' AND tn.TanevRendOsztalyCsoportId = oo.TanevRendOsztalyCsoportId AND tn.TantargyId = oo.TantargyId AND tn.TanarID = oo.TanarID ' END EXEC sp_executesql @sql, N' @pIntezmenyId int ,@pTanevId int ,@pIdoszakKezdete datetime ,@pIdoszakVege datetime ,@pTanarId int ,@pIsHelyettesitesNelkul bit ,@pOsztalyCsoportId int ,@pTanuloId int ,@pTantargyId int ,@pTeremId int ,@pCsakOrarendiOrak bit ,@pIsNapirend bit ,@pFeladatKategoriaId int ,@pOrakezdete datetime ,@pOravege datetime ,@pHetnapja 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 END GO