DROP PROCEDURE IF EXISTS uspGetKozpontiOrakOrarend GO CREATE PROCEDURE [uspGetKozpontiOrakOrarend] @pIntezmenyId int ,@pTanevId int ,@pIdoszakKezdete datetime ,@pIdoszakVege datetime AS BEGIN SET NOCOUNT ON; DECLARE @sql nvarchar(max) = N'' ,@sqlOrarendiora nvarchar(max) = N'' SET @sql += N' CREATE TABLE #OsztalyCsoportok ( Id int ,Nev nvarchar(255) ,Oka nvarchar(50) ,IsVegzos char(1) ,IdoszakKezdete datetime ,IdoszakVege datetime ,INDEX IX1 CLUSTERED(Id, IdoszakKezdete, IdoszakVege) ); CREATE TABLE #NaptariNapok ( Datum datetime ,HetirendId int ,HetNapjaId int ,OrarendiNap char(1) ,OsztalyCsoportId int ,HetSorszam int ,CsengetesiRendId int ,Nev nvarchar(255) ,Oka nvarchar(50) ,IsVegzos char(1) ,IdoszakKezdete datetime ,IdoszakVege datetime ,IsEgyediNap char(1) COLLATE DATABASE_DEFAULT ,PRIMARY KEY CLUSTERED (OsztalyCsoportId, Datum, HetNapjaId, HetirendId) ); 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 ,KozpontilagToroltOraGroupId uniqueidentifier ,INDEX IX1 CLUSTERED(Datum, HetNapja, Oraszam, TanevRendOsztalyCsoportId, TantargyId, TanarID) );' /* Változók deklarálása */ SET @sql += N' DECLARE @KezdoHet int = DATEPART( ISO_WEEK, @pIdoszakKezdete) ,@ZaroHet int = DATEPART( ISO_WEEK, @pIdoszakVege); DECLARE @VegzosUtolsoTanitasiNap datetime; SELECT @VegzosUtolsoTanitasiNap = MIN(C_DATUM) FROM T_TANEVRENDJE_OSSZES WHERE TOROLT = ''F'' AND C_TANEVID = @pTanevId AND C_NAPTIPUSA IN (1402, 7600, 7601, 7602, 7603, 1395) -- AND C_OSSZESCSOPORTRAVONATKOZIK = ''T'' DECLARE @IsVegzosEvfolyam char(1) ' /* A kapcsolódó osztálycsoportok összegyűjtése */ SET @sql += N' --Performancia noveles miatt INSERT INTO #OsztalyCsoportok (Id, Nev, Oka, IsVegzos, IdoszakKezdete, IdoszakVege) SELECT ID, C_NEV, '''' AS Oka, C_VEGZOSEVFOLYAM, @pIdoszakKezdete ,IIF(C_VEGZOSEVFOLYAM = ''T'' AND @VegzosUtolsoTanitasiNap IS NOT NULL AND @pIdoszakVege > @VegzosUtolsoTanitasiNap, @VegzosUtolsoTanitasiNap + 1, @pIdoszakVege) FROM T_OSZTALYCSOPORT_OSSZES ocs WHERE ocs.C_TANEVID = @pTanevId AND ocs.TOROLT = ''F'' ' SET @sql += N' UPDATE ocs SET ocs.IdoszakVege = NewVegeDatum FROM #OsztalyCsoportok ocs INNER JOIN ( SELECT MIN(tr.C_DATUM) + 1 AS NewVegeDatum, ocstr.C_OSZTALYCSOPORTID FROM T_TANEVRENDJE_OSSZES tr INNER JOIN T_OSZTALYCSOPORT_TANEVRENDJE ocstr ON ocstr.C_TANEVRENDJEID = tr.ID WHERE tr.C_OSSZESCSOPORTRAVONATKOZIK = ''F'' AND tr.TOROLT = ''F'' AND tr.C_NAPTIPUSA IN (1402, 7600, 7601, 7602, 7603) AND tr.C_TANEVID = @pTanevId GROUP BY ocstr.C_OSZTALYCSOPORTID ) x ON x.C_OSZTALYCSOPORTID = ocs.Id WHERE ocs.IsVegzos = ''T'' ' /* A naptári napok összegyűjtése tanév rendje alapján */ SET @sql += N' INSERT INTO #NaptariNapok ( Datum ,HetirendId ,HetNapjaId ,OrarendiNap ,OsztalyCsoportId ,HetSorszam ,CsengetesiRendId ,Nev ,Oka ,IsVegzos ,IdoszakKezdete ,IdoszakVege ,IsEgyediNap ) SELECT nn.Datum ,ISNULL(tr.HetirendId, nn.HetirendId) AS HetirendId ,ISNULL(tr.HetNapjaId, nn.HetNapjaId) AS HetNapjaId ,ISNULL(tr.OrarendiNap, nn.OrarendiNap) AS OrarendiNap ,nn.OsztalyCsoportId ,ISNULL(tr.HetSorszam, nn.HetSorszam) AS HetSorszam ,ISNULL(tr.CsengetesiRendId, nn.CsengetesiRendId) AS CsengetesiRendId ,ISNULL(tr.Nev, nn.Nev) ,ISNULL(tr.Oka, nn.Oka) ,ISNULL(tr.IsVegzos, nn.IsVegzos) ,ISNULL(tr.IdoszakKezdete, nn.IdoszakKezdete) ,ISNULL(tr.IdoszakVege, nn.IdoszakVege) ,COALESCE(tr.IsEgyediNap, nn.IsEgyediNap, ''F'') FROM ( SELECT nn.C_NAPDATUMA AS Datum ,nn.C_HETIREND AS HetirendId ,nn.C_HETNAPJA AS HetNapjaId ,nn.C_ORARENDINAP AS OrarendiNap ,ocs.ID AS OsztalyCsoportId ,nn.C_HETSORSZAMA AS HetSorszam ,tr.C_CSENGETESIRENDID AS CsengetesiRendId ,ocs.Nev ,ocs.Oka ,ocs.IsVegzos ,ocs.IdoszakKezdete ,ocs.IdoszakVege ,tr.C_EGYEDINAP AS IsEgyediNap FROM T_NAPTARINAP_OSSZES nn INNER JOIN #OsztalyCsoportok ocs ON ocs.IdoszakKezdete <= nn.C_NAPDATUMA AND ocs.IdoszakVege > nn.C_NAPDATUMA LEFT JOIN T_TANEVRENDJE_OSSZES tr ON tr.C_DATUM = nn.C_NAPDATUMA AND nn.C_INTEZMENYID = tr.C_INTEZMENYID AND nn.C_TANEVID = tr.C_TANEVID AND tr.TOROLT = ''F'' AND tr.C_OSSZESCSOPORTRAVONATKOZIK = ''T'' WHERE nn.TOROLT = ''F'' AND nn.C_INTEZMENYID = @pIntezmenyId AND nn.C_TANEVID = @pTanevId ) nn LEFT JOIN ( SELECT nn.C_NAPDATUMA AS Datum ,tr.C_HETIREND AS HetirendId ,tr.C_HETNAPJA AS HetNapjaId ,tr.C_ORARENDINAP AS OrarendiNap ,ocstr.C_OSZTALYCSOPORTID AS OsztalyCsoportId ,nn.C_HETSORSZAMA AS HetSorszam ,tr.C_CSENGETESIRENDID AS CsengetesiRendId ,ocs.Nev ,ocs.Oka ,ocs.IsVegzos ,ocs.IdoszakKezdete ,ocs.IdoszakVege ,tr.C_EGYEDINAP AS IsEgyediNap FROM T_NAPTARINAP_OSSZES nn INNER JOIN T_TANEVRENDJE_OSSZES tr ON tr.C_DATUM = nn.C_NAPDATUMA AND nn.C_INTEZMENYID = tr.C_INTEZMENYID AND nn.C_TANEVID = tr.C_TANEVID AND tr.TOROLT = ''F'' AND tr.C_OSSZESCSOPORTRAVONATKOZIK = ''F'' INNER JOIN T_OSZTALYCSOPORT_TANEVRENDJE ocstr ON tr.ID = ocstr.C_TANEVRENDJEID INNER JOIN #OsztalyCsoportok ocs ON ocs.Id = ocstr.C_OSZTALYCSOPORTID AND ocs.IdoszakKezdete <= nn.C_NAPDATUMA AND ocs.IdoszakVege > nn.C_NAPDATUMA WHERE nn.TOROLT = ''F'' AND nn.C_INTEZMENYID = @pIntezmenyId AND nn.C_TANEVID = @pTanevId AND nn.C_NAPDATUMA >= @pIdoszakKezdete AND nn.C_NAPDATUMA < ocs.IdoszakVege ) tr ON nn.Datum = tr.datum AND nn.OsztalyCsoportId = tr.OsztalyCsoportId WHERE ISNULL(tr.OrarendiNap, nn.OrarendiNap) = ''T'' -- SELECT * FROM #NaptariNapok ' SET @sql += N' SELECT DISTINCT oo.ID AS Id ,oo.TOROLT ,oo.ID AS ORARENDIID ,nn.Datum AS Datum ,oo.C_BONTOTT AS Bontott ,oo.C_HETIREND AS Hetirend ,oo.C_HETNAPJA AS HetNapja ,nn.HetSorszam AS HetSorszam ,oo.C_ORAERVENYESSEGKEZDETE AS ErvenyessegKezdete ,oo.C_ORAERVENYESSEGVEGE AS ErvenyessegVege ,nn.Datum + oo.C_ORAKEZDETE AS OraKezdete ,nn.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 ,nn.Nev AS OsztalyNev ,nn.OsztalyCsoportId AS TanevRendOsztalyCsoportId ,nn.OKA 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 ,csoport.C_OSZTALYBONTASID AS OsztalyBontasId FROM T_ORARENDIORA_OSSZES oo INNER JOIN #OsztalyCsoportok ocs ON ocs.ID = oo.C_OSZTALYCSOPORTID INNER JOIN #NaptariNapok nn ON nn.HetnapjaId = oo.C_HETNAPJA AND ocs.ID = nn.OsztalyCsoportId AND nn.Datum >= oo.C_ORAERVENYESSEGKEZDETE AND ((nn.Datum < oo.C_ORAERVENYESSEGVEGE) OR (oo.C_ORAERVENYESSEGKEZDETE = oo.C_ORAERVENYESSEGVEGE AND nn.Datum = oo.C_ORAERVENYESSEGKEZDETE)) AND (oo.C_HETIREND = 1554 OR nn.HetirendId = oo.C_HETIREND) AND C_TANEVID = @pTanevId AND oo.C_EGYEDINAP = nn.IsEgyediNap 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.Datum AND hisz.TOROLT = ''F'' LEFT JOIN T_FELHASZNALO_OSSZES helyettes ON hisz.C_HELYETTESTANAROKID = helyettes.ID AND helyettes.TOROLT = ''F'' LEFT JOIN T_CSENGETESIRENDORA_OSSZES csro ON csro.C_CSENGETESIRENDID = ISNULL(nn.CsengetesiRendId, oo.C_CSENGETESIRENDID) AND csro.C_ORASZAM = oo.C_ORASZAM AND csro.TOROLT = ''F'' LEFT JOIN T_CSOPORT csoport ON csoport.ID = oo.C_OSZTALYCSOPORTID and csoport.TOROLT = ''F'' WHERE oo.C_TANEVID = @pTanevId' EXEC sp_executesql @sql, N' @pIntezmenyId int ,@pTanevId int ,@pIdoszakKezdete datetime ,@pIdoszakVege datetime' ,@pIntezmenyId = @pIntezmenyId ,@pTanevId = @pTanevId ,@pIdoszakKezdete = @pIdoszakKezdete ,@pIdoszakVege = @pIdoszakVege END GO