﻿-- =============================================
-- Author:      Telek Ákos
-- Create date: 2018.01.15.
-- Description: Órarend lekérdezése
-- =============================================
DROP PROCEDURE IF EXISTS [dbo].[sp_GetOrarend]
GO

CREATE PROCEDURE [dbo].[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ő*/
AS
BEGIN /*TODO:Tobb Osztaly*//*OM-1575*/
  SET NOCOUNT ON;
  DECLARE @sql nvarchar(max) = ''
  
  CREATE TABLE #OsztalyCsoportok (
     Id int
    ,Nev nvarchar(255)
    ,Oka nvarchar(50)
    ,IsVegzos char(1)
    ,IdoszakKezdete datetime
    ,IdoszakVege datetime
    ,INDEX IX1 CLUSTERED(Id, Nev, IsVegzos)
  );  

  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 (Datum, OsztalyCsoportId, HetirendId, HetNapjaId)
  );  

  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)
    ,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  
    ,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 = C_DATUM
  FROM T_TANEVRENDJE_OSSZES
  WHERE TOROLT = ''F''
    AND C_TANEVID = @pTanevId
    AND C_NAPTIPUSA = 1402 
  DECLARE @IsVegzosEvfolyam char(1)
  '
  
  /* A kapcsolódó osztálycsoportok összegyűjtése */
  SET @sql += N'
  IF @pOsztalyCsoportId IS NOT NULL BEGIN
    SELECT @IsVegzosEvfolyam = C_VEGZOSEVFOLYAM 
    FROM T_OSZTALYCSOPORT_OSSZES
    WHERE ID = @pOsztalyCsoportId  

    INSERT INTO #OsztalyCsoportok (Id, Nev, Oka, IsVegzos, IdoszakKezdete, IdoszakVege)
    SELECT 
    kocs.ID, ocs.C_NEV,
    kocs.OKA, ocs.C_VEGZOSEVFOLYAM, kocs.Kezdete, 
    CASE 
      WHEN ocs.C_VEGZOSEVFOLYAM = ''T'' AND @VegzosUtolsoTanitasiNap IS NOT NULL AND kocs.Vege > @VegzosUtolsoTanitasiNap THEN  @VegzosUtolsoTanitasiNap + 1
      WHEN kocs.Vege <  @pIdoszakVege THEN kocs.Vege
      ELSE @pIdoszakVege
    END
    FROM dbo.fnGetKopcsolodoOsztalyCsoportokByDateRange(@pOsztalyCsoportId, @pIdoszakKezdete, @pIdoszakVege, @pIntezmenyId, @pTanevId) kocs
    INNER JOIN T_OSZTALYCSOPORT_OSSZES ocs ON ocs.ID = kocs.ID AND ocs.TOROLT = ''F''

  END
  ELSE BEGIN
    IF @pTanuloId IS NOT NULL BEGIN
      
      SELECT @IsVegzosEvfolyam = ocs.C_VEGZOSEVFOLYAM
      FROM T_TANULOCSOPORT_OSSZES tcs
        INNER JOIN T_OSZTALYCSOPORT_OSSZES ocs ON ocs.ID = tcs.C_OSZTALYCSOPORTID
      WHERE EXISTS (SELECT 1 FROM T_OSZTALY_OSSZES o WHERE o.ID = ocs.ID)
        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)
            
      INSERT INTO #OsztalyCsoportok (Id, Nev, Oka, IsVegzos, IdoszakKezdete, IdoszakVege)    
      SELECT 
         tcs.C_OSZTALYCSOPORTID
        ,ocs.C_NEV
        ,'''' AS Oka
        ,@IsVegzosEvfolyam
        ,IIF(tcs.C_BELEPESDATUM < @pIdoszakKezdete, @pIdoszakKezdete, tcs.C_BELEPESDATUM)
        ,CASE 
          WHEN @pIdoszakVege <= @VegzosUtolsoTanitasiNap AND @pIdoszakVege <= ISNULL(tcs.C_KILEPESDATUM, @pIdoszakVege)
          THEN @pIdoszakVege
          WHEN @IsVegzosEvfolyam = ''T'' AND @VegzosUtolsoTanitasiNap <= @pIdoszakVege AND @VegzosUtolsoTanitasiNap <= ISNULL(tcs.C_KILEPESDATUM, @pIdoszakVege)
          THEN @VegzosUtolsoTanitasiNap
          ELSE ISNULL(tcs.C_KILEPESDATUM, @pIdoszakVege)
         END
      FROM T_TANULOCSOPORT_OSSZES tcs
        INNER JOIN T_OSZTALYCSOPORT_OSSZES ocs ON tcs.C_OSZTALYCSOPORTID = ocs.ID AND ocs.TOROLT = ''F''
      WHERE tcs.C_TANULOID = @pTanuloId AND tcs.TOROLT = ''F''
        AND tcs.C_BELEPESDATUM <= @pIdoszakVege
        AND (tcs.C_KILEPESDATUM > @pIdoszakKezdete OR tcs.C_KILEPESDATUM IS NULL)
      
    END
    --Performancia noveles miatt
    ELSE IF @pTanarId IS NOT NULL BEGIN
      INSERT INTO #OsztalyCsoportok (Id, Nev, Oka, IsVegzos, IdoszakKezdete, IdoszakVege)    
    	SELECT 
         ID 
    	  ,ocs.C_NEV
        ,''''
        ,ocs.C_VEGZOSEVFOLYAM
        ,@pIdoszakKezdete
        ,IIF(ocs.C_VEGZOSEVFOLYAM = ''T'' AND @VegzosUtolsoTanitasiNap IS NOT NULL AND @pIdoszakVege > @VegzosUtolsoTanitasiNap, @VegzosUtolsoTanitasiNap + 1, @pIdoszakVege)
    	FROM (	
    		SELECT 
          oo.C_OSZTALYCSOPORTID
        FROM T_ORARENDIORA_OSSZES oo
        WHERE oo.C_TANARID = @pTanarId
          AND oo.C_ORAERVENYESSEGKEZDETE <= @pIdoszakVege
          AND oo.C_ORAERVENYESSEGVEGE >= @pIdoszakKezdete
          AND oo.TOROLT = ''F''
    		UNION
        SELECT 
          oo.C_OSZTALYCSOPORTID
        FROM T_HELYETTESITESIIDOSZAK_OSSZES hi
          INNER JOIN T_ORARENDIORA_OSSZES oo ON oo.ID = hi.C_HELYETTESITETTORARENDID AND oo.TOROLT = ''F''
        WHERE hi.C_HELYETTESTANAROKID = @pTanarId
          AND hi.C_HELYETTESITESNAPJA >= @pIdoszakKezdete
          AND hi.C_HELYETTESITESNAPJA <= @pIdoszakVege
          AND hi.TOROLT = ''F''
  		  UNION
        SELECT
          tno.C_OSZTALYCSOPORTID
        FROM T_TANITASIORA_OSSZES tno
        WHERE tno.C_HELYETTESITOTANARID = @pTanarId
          AND tno.C_DATUM <= @pIdoszakVege
          AND tno.C_DATUM >= @pIdoszakKezdete
          AND tno.TOROLT = ''F''
    		  
  		  UNION
  		    SELECT
            tno.C_OSZTALYCSOPORTID
          FROM T_TANITASIORA_OSSZES tno
          WHERE tno.C_TANARID = @pTanarId 
            AND tno.C_DATUM <= @pIdoszakVege
            AND tno.C_DATUM >= @pIdoszakKezdete
            AND tno.TOROLT = ''F''
  		) x
      INNER JOIN T_OSZTALYCSOPORT_OSSZES ocs ON ocs.ID = x.C_OSZTALYCSOPORTID
    END
  --Performancia noveles miatt
    ELSE BEGIN
      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 
      WHERE C_TANEVID = @pTanevId AND TOROLT = ''F''
    END
  END  
  '
  /* 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''
  '
  
  /* Órarend lekérdezés */
  IF @pCsakOrarendiOrak = 0 BEGIN
    SET @sql += N'
    INSERT INTO #OrarendTable
    '
    
  END
  
  SET @sql += N'
    SELECT DISTINCT
       oo.ID AS Id
      ,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
      ,''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
    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''
      LEFT  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''
      ' + IIF(@pIsNapirend = 0, 'INNER', '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''
    WHERE oo.TOROLT = ''F'' 
      ' + 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 + '  
      AND oo.C_TANEVID = @pTanevId
      ' + IIF(@pTanarId IS NULL, N'', IIF(@pIsHelyettesitesNelkul = 0, N'AND (oo.C_TANARID = @pTanarId OR hisz.C_HELYETTESTANAROKID = @pTanarId)', 'AND oo.C_TANARID = @pTanarId')) + N'
      ' + IIF(@pTantargyId IS NULL, N'', N'AND oo.C_TANTARGYID = @pTantargyId') + N'
      ' + IIF(@pTeremId IS NULL, N'', 'AND oo.C_TEREMID = @pTeremId')
  
  SET @sql += N'
    ' + IIF(@pCsakOrarendiOrak = 0, N'', N'ORDER BY OraKezdete') + N'
    '
  
  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.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
    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
        ,nn.HetirendId 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
        ,nn.Nev AS OsztalyNev
        ,tao.C_OSZTALYCSOPORTID AS TanevRendOsztalyCsoportId
        ,nn.OKA AS MegjelenesOka 
        ,tanar.C_NYOMTATASINEV AS TanarNev
        ,terem.C_NEV AS TeremNev
        ,''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        
      FROM #NaptariNapok nn 
        INNER JOIN T_TANITASIORA_OSSZES tao ON tao.C_OSZTALYCSOPORTID = nn.OsztalyCsoportId AND nn.Datum = tao.C_DATUM AND tao.C_TANEVID = @pTanevId 
        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''
        ' + 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(@pTeremId IS NULL, N'', 'AND tao.C_TEREMID = @pTeremId') + '
    ) 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
    '
 
  SET @sql += N'
   --ORDER BY OraKezdete
   '
END
  --SELECT @sql
  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'
    ,@pIntezmenyId = @pIntezmenyId
    ,@pTanevId = @pTanevId
    ,@pIdoszakKezdete = @pIdoszakKezdete
    ,@pIdoszakVege = @pIdoszakVege
    ,@pTanarId =   @pTanarId
    ,@pIsHelyettesitesNelkul  = @pIsHelyettesitesNelkul
    ,@pOsztalyCsoportId  =  @pOsztalyCsoportId
    ,@pTanuloId  = @pTanuloId
    ,@pTantargyId  = @pTantargyId
    ,@pTeremId  = @pTeremId
    ,@pCsakOrarendiOrak  = @pCsakOrarendiOrak
    ,@pIsNapirend  = @pIsNapirend
END
GO


EXEC[dbo].[sp_Global_CreateSchemaStoredProcedures]
	@pSchemaName = NULL, --esetén az összes sémán végigmegy
	@pStoredProcedureNames =  N'<StoredProcedureNames><StoredProcedureName>sp_GetOrarend</StoredProcedureName></StoredProcedureNames>' --| NULL esetén az összes nem globális tárolt eljáráson végigmegy
  