﻿DROP PROCEDURE IF EXISTS [dbo].[uspGetHaladasiNaploAdatok]
GO

CREATE PROCEDURE [dbo].[uspGetHaladasiNaploAdatok]
  @tanevID int,
  @osztalyID int = null,
  @tanarID int = null,
  @feladatKategoriaId int = null,
  @isKapcsolodoCsoportokSzureseOsztalyBesorolasra int = null
AS
BEGIN
  DECLARE @cTantargyId  INT = 0
  DECLARE @cOsztalyCsoportId INT = 0
  DECLARE @cTanarId INT = 0
  DECLARE @foglalkozasNev VARCHAR(255)
  DECLARE @columns NVARCHAR(MAX), @columnsWithAlias nvarchar(max), @columnsWithType nvarchar(max), @sql NVARCHAR(MAX);
 
  SET NOCOUNT ON;
  CREATE TABLE #Foglalkozasok (
     Nev nvarchar(511) COLLATE Hungarian_CI_AI
    ,C_TANTARGYID int
    ,C_OSZTALYCSOPORTID int
    ,C_INTEZMENYID int
    ,C_TANARID int
    ,VanTTF char(1)
  )

  INSERT INTO #Foglalkozasok
  SELECT DISTINCT
     ocs.C_NEV + ' - ' + tt.C_NEV AS Nev
    ,tn.C_TANTARGYID
    ,tn.C_OSZTALYCSOPORTID
    ,tn.C_INTEZMENYID
    ,tn.C_TANARID AS C_TANARID
    ,IIF(f.ID IS NULL,'F','T') AS VanTTF
  FROM T_TANITASIORA_OSSZES tn
    LEFT JOIN T_FOGLALKOZAS_OSSZES f ON f.C_TANTARGYID = tn.C_TANTARGYID AND f.C_OSZTALYCSOPORTID = tn.C_OSZTALYCSOPORTID AND f.C_TANARID = tn.C_TANARID AND f.TOROLT = 'F'
    INNER JOIN T_OSZTALYCSOPORT_OSSZES OCS on OCS.ID = tn.C_OSZTALYCSOPORTID and OCS.TOROLT = 'F' AND (OCS.C_FELADATKATEGORIAID = @feladatKategoriaId OR @feladatKategoriaId IS NULL)
    INNER JOIN T_TANTARGY_OSSZES tt on tt.ID = tn.C_TANTARGYID and tt.TOROLT = 'F'
    LEFT JOIN (SELECT ID FROM fnGetDokumentumKapcsolodoOsztalycsoportok(@osztalyID, @tanevID, 0, @isKapcsolodoCsoportokSzureseOsztalyBesorolasra)) kocs ON kocs.ID = ocs.ID AND @osztalyID IS NOT NULL
  WHERE tn.TOROLT = 'F'
    AND tn.C_TANEVID = @tanevID
    AND (
    ((@osztalyID IS NOT NULL) AND (kocs.ID IS NOT NULL))
    OR
    ((@tanarID IS NOT NULL) AND tn.C_TANARID = @tanarID)
    )
  ORDER BY VanTTF DESC, Nev ASC

  SELECT 
    IIF(fog.VanTTF = 'F','Egyedi-','') + Nev + ' - ' + felh.C_NYOMTATASINEV AS Nev
    ,fog.VanTTF AS VanTTF
  FROM #Foglalkozasok fog
    INNER JOIN T_FELHASZNALO_OSSZES felh on fog.C_TANARID = felh.ID
  ORDER BY fog.VanTTF DESC, Nev ASC
  
  SET @columns = N'';
  SELECT @columns+=N', '+QUOTENAME([Name])
  FROM
  (
      SELECT ID AS [Name]
      FROM T_ORATULAJDONSAGTIPUS AS p
      WHERE ID BETWEEN 8356 AND 8615
      GROUP BY ID
  ) AS x;
  SET @columnsWithAlias = N'';
  SELECT @columnsWithAlias+=N', ISNULL('+QUOTENAME([Name]) + ', ''F'') AS ' +QUOTENAME([Name])
  FROM
  (
      SELECT ID AS [Name]
      FROM T_ORATULAJDONSAGTIPUS AS p
      WHERE ID BETWEEN 8356 AND 8615
      GROUP BY ID
  ) AS x;
  SET @columnsWithType = N'';
  SELECT @columnsWithType += N', '+QUOTENAME([Name]) + ' char'
  FROM
  (
      SELECT ID AS [Name]
      FROM T_ORATULAJDONSAGTIPUS AS p
      WHERE ID BETWEEN 8356 AND 8615
      GROUP BY ID
  ) AS x;

  DECLARE foglalkozasCursor CURSOR FOR 
    SELECT C_TANTARGYID, C_OSZTALYCSOPORTID, C_TANARID FROM #Foglalkozasok fog
      INNER JOIN T_FELHASZNALO_OSSZES felh on fog.C_TANARID = felh.ID
    ORDER BY VanTTF DESC, IIF(fog.VanTTF = 'F','Egyedi-','') + Nev + ' - ' + felh.C_NYOMTATASINEV ASC
      
  OPEN foglalkozasCursor
  FETCH NEXT FROM foglalkozasCursor into @cTantargyId, @cOsztalyCsoportId, @cTanarId
  
  WHILE @@FETCH_STATUS = 0 BEGIN 
    SET @sql = N'
    SELECT
       OraSorszam
      ,TanarNev
      ,TanarOktAzon
      ,Tema
      ,Helyettesitett
      ,Datum
      ,OraSzam
      ,Megjegyzes
      ,HaziFeladat
      ,TulOra
      ,TamopOra
      ,NemszakrendszeruOra
      ,IktOra
      ,NemzetisegiOra
      ,IsFelnottoktatasiSzerzodes
      ,TestnevelesOra
      ,IprOra
      ,DifferencialtOra
      ,KooperativOra
      ,MeresOra
      ,DramaOra
      ,ParhuzamosOra
      ,TiopOra
      ,VEKOP73317
      ,KAPOra
      ,Bontott
      ,Multikulturalis
      ,EFOP32317
      ,GINOP623
      ,EFOP31716
      ,EFOP33717
      ,TIOP1111212012001
      ,EFOP23517
      -- Komplex alapprogram adatok
      ,DFHTora
      ,DFHTKIPora
      ,KIPOra
      ,TEorad
      ,Rahangolodas
      ,Komplexora
      ,DigitalisAlapuAlprogram
      ,TestmozgasAlapuAlprogram
      ,EletGyakorlatAlapuAlprogram
      ,MuveszetAlapuAlprogram
      ,LogikaiAlapuAlprogram
      ,DigEszkozTipus
      ,DigPlatformTipus
      ,DigTamEszkozTipus
      ' + @columnsWithAlias + N'
    FROM (
      SELECT
        tn.ID
        ,CASE
          WHEN tn.C_MEGTARTOTT = ''T'' THEN CAST(tn.C_ORAEVESSORSZAMA AS nvarchar(max))
          ELSE ''Elmaradt''
         END AS OraSorszam
        ,fh.C_NYOMTATASINEV AS TanarNev
        ,fh.C_OKTATASIAZONOSITO AS TanarOktAzon
        ,tn.C_TEMA AS Tema
        ,IIF(tn.C_HELYETTESITOTANARID IS NOT NULL, ''T'', ''F'') AS Helyettesitett
        ,FORMAT(tn.C_DATUM, ''yyyy.MM.dd.'') AS Datum
        ,tn.C_ORASZAM AS OraSzam
        ,tn.C_MEGJEGYZES AS Megjegyzes
        ,ISNULL(tn.C_HAZIFELADAT,hf.C_FELADATSZOVEGE) AS HaziFeladat
        ,tn.C_TULORA AS TulOra
        ,tn.C_TAMOPORA AS TamopOra
        ,tn.C_NEMSZAKRENDSZERUORA AS NemszakrendszeruOra
        ,tn.C_IKTTANORA AS IktOra
        ,tn.C_NEMZETISEGIORA AS NemzetisegiOra
        ,tn.C_ISFELNOTTOKTATASISZERZODES AS IsFelnottoktatasiSzerzodes
        ,tn.C_MINDENNAPOSTESTNEVELES AS TestnevelesOra
        ,tn.C_IPRTANORA AS IprOra
        ,tn.C_DIFFERENCIALT AS DifferencialtOra
        ,tn.C_KOOPERATIV AS KooperativOra
        ,tn.C_MERES AS MeresOra
        ,tn.C_DRAMA AS DramaOra
        ,tn.C_PARHUZAMOSORA AS ParhuzamosOra
        ,tn.C_TIOP12 AS TiopOra
        ,tn.C_VEKOP73317 AS VEKOP73317
        ,tn.C_KAPORA AS KAPOra
        ,tn.C_BONTOTT AS Bontott
        ,tn.C_MULTIKULTURALISORA AS Multikulturalis
        ,tn.C_EFOP32317 AS EFOP32317
        ,tn.C_GINOP623 AS GINOP623
        ,tn.C_EFOP31716 AS EFOP31716
        ,tn.C_EFOP33717 AS EFOP33717
        ,tn.C_TIOP1111212012001 AS TIOP1111212012001
        ,tn.C_EFOP23517 AS EFOP23517
        -- Komplex alapprogram adatok
        ,tn.C_ISDFHTORA AS DFHTora
        ,tn.C_ISDFHTKIPORA AS DFHTKIPora
        ,tn.C_KIPORA KIPOra
        ,tn.C_ISTEORAD AS TEorad
        ,tn.C_ISRAHANGOLODAS AS Rahangolodas
        ,tn.C_KOMPLEXORA AS Komplexora
        ,tn.C_ISDIGITALISALAPUALPROGRAM AS DigitalisAlapuAlprogram
        ,tn.C_ISTESTMOZGASALAPUALPROGRAM AS TestmozgasAlapuAlprogram
        ,tn.C_ISELETGYAKORLATALAPUALPROGRA AS EletGyakorlatAlapuAlprogram
        ,tn.C_ISMUVESZETALAPUALPROGRAM AS MuveszetAlapuAlprogram
        ,tn.C_ISLOGIKAALAPUALPROGRAM AS LogikaiAlapuAlprogram
        ,dDigEszkozTipus.C_NAME AS DigEszkozTipus
        ,dDigPlatformTipus.C_NAME AS DigPlatformTipus
        ,ISNULL((SELECT STUFF((SELECT '', '' + d.C_NAME
           FROM T_TANITASIORADIGTAMESZKOZ_OSSZES taodte
              INNER JOIN T_DICTIONARYITEMBASE_OSSZES d ON d.ID = taodte.C_DIGTAMESZKOZTIPUSID AND d.C_TANEVID = taodte.C_TANEVID AND d.TOROLT = ''F'' AND d.ID != 8600 --Na
           WHERE taodte.C_TANITASIORAID = tn.ID
            AND taodte.TOROLT = ''F''
           ORDER BY d.ID
           FOR XML PATH('''')),1,2,'''')), '''') AS DigTamEszkozTipus
        ,tot.C_ORATULAJDONSAGID
        ,tot.C_BOOLERTEK
      FROM T_TANITASIORA_OSSZES tn
        INNER JOIN T_FELHASZNALO_OSSZES fh ON fh.ID = tn.C_TANARID
        LEFT JOIN T_HAZIFELADATOK_OSSZES hf ON hf.C_TANITASIORAID = tn.ID AND hf.TOROLT = ''F''
        LEFT JOIN T_TANITASIORATULAJDONSAG_OSSZES tot ON tot.C_TANITASIORAID = tn.ID AND tot.TOROLT = ''F''
        LEFT JOIN T_DICTIONARYITEMBASE_OSSZES dDigEszkozTipus ON dDigEszkozTipus.ID = tn.C_DIGESZKOZTIPUSID AND dDigEszkozTipus.C_TANEVID = tn.C_TANEVID AND dDigEszkozTipus.TOROLT = ''F'' AND dDigEszkozTipus.ID != 8587  -- Na
        LEFT JOIN T_DICTIONARYITEMBASE_OSSZES dDigPlatformTipus ON dDigPlatformTipus.ID = tn.C_DIGPLATFORMTIPUSID AND dDigPlatformTipus.C_TANEVID = tn.C_TANEVID AND dDigPlatformTipus.TOROLT = ''F'' AND dDigPlatformTipus.ID != 8573  --Na
      WHERE 
        tn.TOROLT = ''F''
        AND tn.C_TANEVID = @tanevID
        AND tn.C_TANARID = @cTanarId
        AND tn.C_TANTARGYID = @cTantargyId
        AND tn.C_OSZTALYCSOPORTID = @cOsztalyCsoportId
    ) AS p PIVOT (MIN(C_BOOLERTEK) FOR C_ORATULAJDONSAGID IN (' + STUFF(@columns, 1, 2, '') + N'
    )) AS j
    ORDER BY j.Datum'

    EXEC sp_executesql @sql
      ,N'@tanevID int
        ,@cTanarId int
        ,@cTantargyId int
        ,@cOsztalyCsoportId int'
      ,@tanevID = @tanevID
      ,@cTanarId = @cTanarId
      ,@cTantargyId = @cTantargyId
      ,@cOsztalyCsoportId = @cOsztalyCsoportId

    FETCH NEXT FROM foglalkozasCursor 
    INTO @cTantargyId, @cOsztalyCsoportId, @cTanarId
  END
  
  CLOSE foglalkozasCursor
  DEALLOCATE foglalkozasCursor
  
  IF (SELECT COUNT(Nev) FROM #Foglalkozasok) = 0 BEGIN 
    SET @sql = N'CREATE TABLE #nincsAdat (
       OraSorszam nvarchar(max)
      ,TanarNev nvarchar(1)
      ,TanarOktAzon nvarchar(1)
      ,Tema nvarchar(1)
      ,Helyettesitett nvarchar(1)
      ,Datum datetime
      ,OraSzam int
      ,Megjegyzes nvarchar(1)
      ,HaziFeladat nvarchar(1)
      ,TulOra char
      ,TamopOra char
      ,NemszakrendszeruOra char
      ,IktOra char
      ,NemzetisegiOra char
      ,IsFelnottoktatasiSzerzodes char
      ,TestnevelesOra char
      ,IprOra char
      ,DifferencialtOra char
      ,KooperativOra char
      ,MeresOra char
      ,DramaOra char
      ,ParhuzamosOra char
      ,TiopOra char
      ,VEKOP73317 char
      ,KAPOra char
      ,Bontott char
      ,Multikulturalis char
      ,EFOP32317 char
      ,GINOP623 char
      ,EFOP31716 char
      ,EFOP33717 char
      ,TIOP1111212012001 char
      ,EFOP23517 char
      -- Komplex alapprogram adatok
      ,DFHTora char
      ,DFHTKIPora char
      ,KIPOra char
      ,TEorad char
      ,Rahangolodas char
      ,Komplexora char
      ,DigitalisAlapuAlprogram char
      ,TestmozgasAlapuAlprogram char
      ,EletGyakorlatAlapuAlprogram char
      ,MuveszetAlapuAlprogram char
      ,LogikaiAlapuAlprogram char
      ,DigEszkozTipus int
      ,DigPlatformTipus int
      ,DigTamEszkozTipus int
      ' + @columnsWithType + N'
    )
    SELECT * FROM #nincsAdat;'

    EXEC sp_executesql @sql
  END

  -- Iktatás adatok
  IF @tanarID IS NOT NULL BEGIN
    SELECT 
       f.ID AS PedagogusId
      ,f.C_OKTATASIAZONOSITO AS PedagogusOktAzon
      ,mua.C_FELADATELLATASIHELYID AS FeladatEllatasiHelyId
    FROM T_FELHASZNALO_OSSZES AS f
      LEFT JOIN T_MUNKAUGYIADATOK_OSSZES AS mua ON mua.C_ALKALMAZOTTID = f.ID
    WHERE f.ID = @tanarID
      AND f.C_TANEVID = @tanevID
  END
  IF @osztalyID IS NOT NULL BEGIN
    DECLARE @isCsoport INT = (SELECT COUNT(ID) FROM T_CSOPORT_OSSZES WHERE ID = @osztalyID)
    IF @isCsoport = 0 BEGIN
      SELECT
        ocs.ID AS OsztalyId
        ,o.C_OSZTALYFONOKID AS OsztalyfonokId
        ,ocs.C_EVFOLYAMTIPUSA AS EvfolyamTipusa
        ,ocs.C_FELADATELLATASIHELYID AS FeladatEllatasiHelyId
        ,o.C_TANTERVID AS TantervId
        ,ocs.C_KEPZESIFORMA AS KepzesiForma
        ,o.C_AGAZAT AS Agazat
        ,o.C_SZAKMACSOPORT AS SzakmaCsoport
        ,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 AS o ON ocs.id = o.ID
      WHERE ocs.TOROLT='F' 
        AND ocs.ID = @osztalyId
        AND ocs.C_TANEVID = @tanevId
    END
    ELSE BEGIN
      SELECT 
        ocs.ID AS CsoportId
        ,cs.C_CSOPORTVEZETOID AS CsoportvezetoId
        ,cs.C_TIPUSA  AS  CsoportTipusa
        ,ISNULL(ocs.C_EVFOLYAMTIPUSA, 1296) AS EvfolyamTipusa -- 1296 = Na
        ,ocs.C_FELADATELLATASIHELYID AS FeladatEllatasiHelyId
        ,ocs.C_KERESZTFELEVES AS OJCSJKeresztfeleves
        ,ocs.C_VEGZOSEVFOLYAM AS CSJVegzosEvfolyamu
      FROM T_OSZTALYCSOPORT_OSSZES AS ocs
      INNER JOIN T_CSOPORT_OSSZES cs ON cs.ID = ocs.ID
      WHERE ocs.TOROLT = 'F'
        AND ocs.ID = @osztalyID
        AND ocs.C_TANEVID = @tanevID
    END
    SELECT DISTINCT
       felh.ID AS TanarId
      ,felh.C_OKTATASIAZONOSITO AS TanarOktAzon
    FROM #Foglalkozasok fogl
    INNER JOIN T_FELHASZNALO_OSSZES felh ON felh.ID = fogl.C_TANARID
  END

  DROP TABLE #Foglalkozasok
END 

GO