﻿DROP PROCEDURE IF EXISTS uspGetOsztalynaplo
GO

CREATE PROCEDURE uspGetOsztalynaplo
   @intezmenyId int
  ,@tanevId int
  ,@osztalyId int
  ,@isSzovegesNaplo bit = 0
  ,@iskolaErdekuSzamit bit
  ,@fuggolegesTantargyak bit
  ,@aktivTanevId int
  ,@isReszletesMulasztasok bit
  ,@isEgyebFoglalkozasok bit
  ,@minTanoraSzam int
  ,@isEllenorzo bit = 0
  ,@orarendErvenyessegiDatum date
  ,@tanuloId int = NULL
AS BEGIN
  SET NOCOUNT ON;

  DECLARE
     @ElsoNapTanevRendje date
    ,@UtolsoNapTanevRendje date
    ,@ElsoNapTanev date
    ,@UtolsoNapTanev date
    ,@isVegzos varchar (1)
    ,@FelevVege date
    ,@ElsoNap date
    ,@UtolsoNap date
    ,@VizsgaltNap date
    ,@VegzosUtolsoNap date
    ,@ocsId int
    ,@MaxOraszam int
    ,@MinOraszam int
    ,@TanitasiNapokSzama int
    ,@TanulokSzama int
    ,@HetUtolsoNapjaMegtartottOra int
    ,@HetUtolsoNapjaTanevendje int
    ,@HetUtolsoNapja int
    ,@selectList nvarchar (max)
    ,@pivotList nvarchar (max)
    ,@tantargyakNevvel nvarchar (max)
    ,@sql nvarchar (max)

  CREATE TABLE #Gondviselok (
     TanuloId int
    ,GondviseloId int PRIMARY KEY CLUSTERED
  )

  CREATE TABLE #HetAdatok (
     C_HETSORSZAMA int
    ,KezdoDatum date
    ,VegeDatum date
  )

  CREATE TABLE #EvVegiMulasztasok (
     TanuloId int
    ,TanuloCsoportId int
    ,Igazolt int
    ,Igazolatlan int
    ,ElmeletIgazolt int
    ,ElmeletIgazolatlan int
    ,GyakorlatIgazolt int
    ,GyakorlatIgazolatlan int
    ,ElmeletOsszes int
    ,GyakorlatOsszes int
    ,Osszes int
  )

  CREATE TABLE #FeleviMulasztasok (
     TanuloId int
    ,TanuloCsoportId int
    ,Igazolt int
    ,Igazolatlan int
    ,ElmeletIgazolt int
    ,ElmeletIgazolatlan int
    ,GyakorlatIgazolt int
    ,GyakorlatIgazolatlan int
    ,ElmeletOsszes int
    ,GyakorlatOsszes int
    ,Osszes int
  )

  CREATE TABLE #NapSorszamTemp (Datum date)

  CREATE TABLE #NapSorszam (
     Datum date
    ,Sorszam nvarchar(4)
  )

  CREATE TABLE #OsszesOra (
     Datum datetime
    ,FormatDate nvarchar (100)
    ,Oraszam int
    ,HetSorszama int
    ,HetNapja nvarchar (100)
    ,Megjegyzes nvarchar (1000)
    ,Sorszam nvarchar (30)
  )

  DECLARE @TanuloCimTable TABLE (
     FelhasznaloId int
    ,Cim nvarchar (max)
    ,Cimtipusa nvarchar (max)
  )

  DECLARE @GondViseloCimTable TABLE (
     GondviseloId int
    ,Cim nvarchar (max)
    ,Cimtipusa nvarchar (max)
  )

  DECLARE @EmailCimTableTemp TABLE (
     FelhasznaloId int
    ,EmailCim nvarchar (max)
    ,GondviseloId int
  )

  DECLARE @EmailCimTanuloTable TABLE (
     FelhasznaloId int
    ,EmailCim nvarchar (max)
  )

  DECLARE @EmailCimGondviseloTable TABLE (
     GondviseloId int
    ,EmailCim nvarchar (max)
  )

  DECLARE @TelefonTableTemp TABLE (
     FelhasznaloId int
    ,Telefon nvarchar (max)
    ,GondviseloId int
  )

  DECLARE @TanuloTelefonTable TABLE (
     FelhasznaloId int
    ,Telefon nvarchar (max)
  )

  DECLARE @GondviseloTelefonTable TABLE (
     GondviseloId int
    ,Telefon nvarchar (max)
  )

  CREATE TABLE #Tantargyak (
     ID int
    ,C_FOTARGYID int
    ,C_NEV nvarchar(255) COLLATE DATABASE_DEFAULT
    ,C_NEVNYOMTATVANYBAN nvarchar(255) COLLATE DATABASE_DEFAULT
    ,C_TARGYKATEGORIA int
    ,c_tanuloid int
    ,c_tanulocsoportid int
    ,RENDEZ1 int
    ,RENDEZ2 nvarchar(255) COLLATE DATABASE_DEFAULT
    ,RENDEZ3 int
    ,RENDEZ4 int
    ,RENDEZ5 nvarchar(255) COLLATE DATABASE_DEFAULT
    ,C_INTEZMENYID int
    ,C_TANEVID int
  )

  CREATE TABLE #retTanuloErtekeles (
     ErtekelesId int PRIMARY KEY NOT NULL
    ,Datum date
    ,TipusId int
    ,ErtekelesSzoveg nvarchar (max)
    ,ErtekelesSzovegRovidNev nvarchar (3)
    ,ErtekelesOsztalyzatId int
    ,ErtekelesOsztalyzatValue int
    ,ErtekelesOsztalyzatNev nvarchar (max)
    ,ErtekelesSzazalek nvarchar (max)
    ,MagatartasOsztalyzatId int
    ,MagatartasOsztalyzatValue int
    ,MagatartasOsztalyzatNev nvarchar (max)
    ,MagatartasSzoveg nvarchar (max)
    ,MagatartasSzovegRovidNev nvarchar (3)
    ,MagatartasErtekId int
    ,MagatartasErtek nvarchar (max)
    ,MagatartasErtekOsztalyzatkent int
    ,SzorgalomOsztalyzatId int
    ,SzorgalomOsztalyzatValue int
    ,SzorgalomOsztalyzatNev nvarchar (max)
    ,SzorgalomSzoveg nvarchar (max)
    ,SzorgalomSzovegRovidNev nvarchar (3)
    ,SzorgalomErtekId int
    ,SzorgalomErtek nvarchar (max)
    ,SzorgalomErtekOsztalyzatkent int
    ,TanuloId int
    ,TanuloCsoportId int
    ,OsztalyCsoportId int
    ,TantargyId int
    ,TantargyNevZarojellel nvarchar (max)
    ,TantargyNevNyomtatvanyban nvarchar (max)
    ,TantargyNev nvarchar (max)
    ,TargyKategoriaId int
    ,FotargyE char(1)
    ,Altantargy char(1)
    ,FotargyId int
    ,ErtekelesTema nvarchar (max)
    ,ErtekeloId int
    ,ErtekelesModjaId int
    ,IsMagatartasSzorgalom char(1)
    ,Jeloles nvarchar (max)
    ,JelolesAndErtekelesTema nvarchar (max)
  )

  CREATE TABLE #osztalycsoportok (
     OsztalyCsoportId int PRIMARY KEY
    ,Kezdete date
    ,Vege date
  )

  CREATE TABLE #OraSorszamTemp (
     TanitasioraId int
    ,OraSorszam int
  )

  CREATE TABLE #OraSorszam (
     TanitasioraId int PRIMARY KEY
    ,OraSorszam int
  )

  SELECT TOP 1
     @ElsoNapTanev = t.C_ELSOTANITASINAP
    ,@UtolsoNapTanev = t.C_UTOLSOTANITASINAP
  FROM t.T_TANEV_OSSZES t
  WHERE t.ID = @tanevId
    AND t.TOROLT = 'F'

  SELECT TOP 1
    @ElsoNapTanevRendje = tr.C_DATUM
  FROM T_TANEVRENDJE_OSSZES tr
  WHERE tr.C_NAPTIPUSA = 1394
    AND tr.C_TANEVID = @tanevId
    AND tr.TOROLT = 'F'

  SELECT TOP 1
    @UtolsoNapTanevRendje = tr.C_DATUM
  FROM T_TANEVRENDJE_OSSZES tr
  WHERE tr.C_NAPTIPUSA = 1395
    AND tr.C_TANEVID = @tanevId
    AND tr.TOROLT = 'F'

  SELECT TOP 1
     @isVegzos = o.C_VEGZOSEVFOLYAM
  FROM T_OSZTALYCSOPORT_OSSZES o
  WHERE o.ID = @osztalyId

  SELECT TOP 1
    @FelevVege = tr.C_DATUM
  FROM T_TANEVRENDJE_OSSZES tr
  WHERE tr.C_NAPTIPUSA = 1400
    AND tr.C_TANEVID = @tanevId
    AND tr.TOROLT = 'F'

  SET @VegzosUtolsoNap = (SELECT dbo.fnGetOsztalyVegzosTanitasiNap(@osztalyId, @intezmenyId, @tanevId))
  SET @ElsoNap = ISNULL(@ElsoNapTanevRendje, @ElsoNapTanev)
  SET @UtolsoNap = IIF(@isVegzos = 'T', COALESCE(@VegzosUtolsoNap, @UtolsoNapTanevRendje, @UtolsoNapTanev), ISNULL(@UtolsoNapTanevRendje, @UtolsoNapTanev))

  IF @tanevId = @AktivtanevId AND @orarendErvenyessegiDatum <= @UtolsoNap
      IF @orarendErvenyessegiDatum <= @ElsoNap

        SET @VizsgaltNap = (
          SELECT TOP 1
            C_HETKEZDONAPJA
          FROM T_NAPTARIHET_OSSZES
          WHERE C_HETSORSZAMA = 1
            AND TOROLT = 'F'
            AND C_TANEVID = @tanevId
        )

      ELSE

        SET @VizsgaltNap = CONVERT(date, @orarendErvenyessegiDatum)

  ELSE

      SET @VizsgaltNap = (
        SELECT TOP 1
          nh.C_HETUTOLSONAPJA
        FROM T_NAPTARIHET_OSSZES AS nh
        WHERE @UtolsoNap >= CONVERT(date, nh.C_HETKEZDONAPJA)
          AND @UtolsoNap <= CONVERT(date, nh.C_HETUTOLSONAPJA)
          AND nh.TOROLT = 'F'
          AND nh.C_TANEVID = @tanevId
      )


  INSERT INTO #NapSorszamTemp (Datum)
  EXEC sp_GetDokumentumTanitasiNapokSorszama
     @tanevId = @tanevId
    ,@osztalyId = @osztalyId

  INSERT INTO #NapSorszam (
     Datum
    ,Sorszam
  )
  SELECT
     Sorszam.Datum AS Datum
    ,CAST(DENSE_RANK() OVER(ORDER BY Sorszam.Datum) AS nvarchar(4))
  FROM #NapSorszamTemp AS Sorszam
    INNER JOIN fnGetDokumentumOsztalyMegtartottOrakSzama(@tanevId, @osztalyId) AS OrakSzama ON OrakSzama.Datum = Sorszam.Datum
  WHERE Sorszam.Datum <= @UtolsoNap
    AND (@minTanoraSzam = 0 OR OrakSzama.OrakSzama IS NOT NULL OR OrakSzama.OrakSzama >= @minTanoraSzam)

  SELECT
     TanuloId AS Id
    ,tanugyiAdatok.C_NAPLOSORSZAM AS NaploSorszam
    ,tanugyiAdatok.C_TORZSLAPSZAM AS TorzslapSzam
    ,TanuloCsoport.Id AS TanuloCsoportId
    ,OsztalyTanuloi.BelepesDatum AS BelepesDatum
    ,OsztalyTanuloi.KilepesDatum AS KilepesDatum
  INTO #studentsWithTanuloCsoport
  FROM fnGetDokumentumOsztalyokCsoportokTanuloi(@tanevId, @osztalyId, 'T') AS OsztalyTanuloi
    INNER JOIN T_TANULOCSOPORT_OSSZES TanuloCsoport ON TanuloCsoport.Id = OsztalyTanuloi.TanuloCsoportId
    INNER JOIN T_TANULOTANUGYIADATOK_OSSZES tanugyiAdatok ON tanugyiAdatok.C_TANULOCSOPORTID = tanuloCsoport.ID
      AND tanugyiAdatok.TOROLT = 'F'
  WHERE @tanuloId IS NULL
    OR TanuloId = @tanuloId

  SELECT DISTINCT
    Id
  INTO
    #students
  FROM #studentsWithTanuloCsoport

  SELECT
     DATEPART(MONTH, Datum) AS Honap
    ,TantargyId AS Id
    ,Igazolt AS IgazoltE
    ,TanuloId AS TanuloId
    ,TanuloCsoportId AS TanuloCsoportId
    ,IgazolasTipusa AS IgazolasTipus
    ,Datum AS Datum
    ,Tipusa AS Tipus
    ,KesesPercben AS KesesPercben
    ,HetSorszama AS HetSorszama
    ,Oraszam AS Oraszam
    ,CAST(DATEPART(MONTH, Datum) AS nvarchar(10)) + IIF(C_GYAKORLATI = 'T', 'G', 'E') AS ElmeletGyakorlat
    ,C_GYAKORLATI AS isGyakorlat
  INTO #mulasztasTmp
  FROM fnGetDokumentumMulasztasokOsztalyonkentReszletes(@tanevId, @osztalyId, @iskolaErdekuSzamit, DEFAULT, 0, DEFAULT, DEFAULT, DEFAULT) AS TanulokMulasztasai
    INNER JOIN T_TANTARGY_OSSZES Tantargy ON Tantargy.Id = TanulokMulasztasai.TantargyId
  WHERE @tanuloId IS NULL
    OR TanuloId = @tanuloId

  SELECT
     CAST(SUM(IIF(IgazoltE = 'T', 1, 0)) AS varchar(5)) + '/' + CAST(SUM(IIF(IgazoltE = 'F', 1, 0)) AS varchar(5)) AS HetiMulasztas
    ,HetSorszama
    ,TanuloId
    ,TanuloCsoportId
  INTO #HetiMulasztasok
  FROM #mulasztasTmp
  GROUP BY
     HetSorszama
    ,TanuloId
    ,TanuloCsoportId

  CREATE CLUSTERED INDEX ci1 ON #mulasztasTmp (
     tanuloid
    ,datum
  )

  CREATE CLUSTERED INDEX ci5 ON #HetiMulasztasok (HetSorszama)

  SELECT
     Datum
    ,TipusId
    ,ErtekelesSzoveg
    ,ErtekelesSzovegRovidNev
    ,ErtekelesOsztalyzatId
    ,ErtekelesOsztalyzatValue
    ,ErtekelesOsztalyzatNev
    ,ErtekelesSzazalek
    ,MagatartasOsztalyzatId
    ,MagatartasOsztalyzatNev
    ,MagatartasSzoveg
    ,MagatartasErtekId
    ,MagatartasErtek
    ,SzorgalomOsztalyzatId
    ,SzorgalomOsztalyzatNev
    ,SzorgalomSzoveg
    ,SzorgalomErtekId
    ,SzorgalomErtek
    ,TanuloId
    ,TanuloCsoportId
    ,OsztalyCsoportId
    ,TantargyId
    ,TantargyNevZarojellel
    ,TantargyNev
    ,TantargyNevNyomtatvanyban
    ,TargyKategoriaId
    ,FotargyE
    ,FotargyId
    ,Altantargy
    ,ErtekelesTema
    ,Jeloles
    ,JelolesAndErtekelesTema
    ,isMagatartasSzorgalom
    ,RENDEZ1
    ,RENDEZ2
    ,RENDEZ3
    ,RENDEZ4
    ,RENDEZ5
  INTO #ErtekelesekTemp
  FROM fnGetDokumentumErtekelesekOsztalyonkent(@tanevId, @osztalyId, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT)
  WHERE @tanuloId IS NULL
    OR TanuloId = @tanuloId

  CREATE CLUSTERED INDEX ci111 ON #ErtekelesekTemp (
     datum
    ,tanulocsoportid
  )

  -- Naplo fooldal
  INSERT INTO #osztalycsoportok (
     OsztalyCsoportId
    ,Kezdete
    ,Vege
  )
  SELECT
     OsztalyCsoportok.Id
    ,OsztalyCsoportok.Kezdete
    ,OsztalyCsoportok.Vege
  FROM fnGetKapcsolodoOsztalyCsoportokByDateRange(@osztalyId, @ElsoNap, @UtolsoNap, @intezmenyId, @tanevId) AS OsztalyCsoportok
    INNER JOIN fnGetDokumentumOsztalyVagyTanoraiCsoport(@tanevId) AS TanoraiCeluOsztalyCsoportok  ON TanoraiCeluOsztalyCsoportok.ID = OsztalyCsoportok.Id

  DECLARE csoport_cursor CURSOR
  FOR
    SELECT
      OsztalyCsoportId
    FROM #osztalycsoportok

    OPEN csoport_cursor

    FETCH NEXT FROM csoport_cursor
      INTO @ocsId

    WHILE @@FETCH_STATUS = 0
      BEGIN

        INSERT INTO #OraSorszamTemp
        EXEC sp_GetOraSorszamByOsztaly
           @osztalyCsoportId = @ocsId
          ,@datum = @UtolsoNap
          ,@intezmenyId = @intezmenyId
          ,@tanevId = @tanevId

        FETCH NEXT FROM csoport_cursor INTO
          @ocsId
      END

    CLOSE csoport_cursor
  DEALLOCATE csoport_cursor

  INSERT INTO #OraSorszam
  SELECT DISTINCT
     TanitasioraId
    ,OraSorszam
  FROM #OraSorszamTemp

  SELECT
     tao.Id AS TanitasioraId
    ,tao.C_DATUM AS Datum
    ,IIF(tao.C_ORASZAM IS NULL, dbo.fnGetDokumentumOrakezdetToOraszam(CONVERT(varchar(5), tao.C_ORAKEZDETE, 108), @tanevId), tao.C_ORASZAM) AS Oraszam
    ,pedagogus.ID AS PedagogusId
    ,IIF(C_MEGTARTOTT = 'T', pedagogus.C_NYOMTATASINEV, '-') AS PedagogusNev
    ,IIF(C_MEGTARTOTT = 'T', ISNULL(CONVERT(nvarchar(max), OraSorszam) + '.', '-'), '-') AS OraSorszam
    ,IIF(C_MEGTARTOTT = 'T', IIF(C_CSENGETESIRENDORAID IS NULL, '(' + CONVERT(varchar(5), C_ORAKEZDETE, 108) + ' - '
      + CONVERT(varchar(5), C_ORAVEGE, 108) + ') ', '') + REPLACE(REPLACE(C_TEMA, CHAR(0x0007), ''),CHAR(0x000B), ''), 'Elmaradt')
      + IIF(C_HELYETTESITESTIPUSA = 1496, ' (Óraösszevonás: ' + helyettesito.C_NYOMTATASINEV + ')', '')
      + IIF(C_HELYETTESITESTIPUSA IN(1494, 1495),'(Helyettesitve: ' + helyettesito.C_NYOMTATASINEV + ') ', '') AS Tema
    ,IIF(C_MEGTARTOTT = 'T', IIF(C_CSENGETESIRENDORAID IS NULL, '(' + CONVERT(varchar(5), C_ORAKEZDETE, 108) + ' - '
      + CONVERT(varchar(5), C_ORAVEGE, 108) + ') ', '') + ISNULL(CONVERT(nvarchar(max), OraSorszam), '-') + '.: '
      + IIF(C_HELYETTESITESTIPUSA = 1496, ' (Óraösszevonás, ' + helyettesito.C_NYOMTATASINEV + ') ', '')
      + IIF(C_HELYETTESITESTIPUSA IN(1494, 1495), '(Helyettesitve: ' + helyettesito.C_NYOMTATASINEV + ') ', '')
      + REPLACE(REPLACE(C_TEMA, CHAR(0x0007), ''), CHAR(0x000B), ''), 'Elmaradt') AS TemaOraSzammal
    ,tao.C_HETNAPJA AS HetNapja
    ,nh.C_HETSORSZAMA AS HetSorszama
    ,C_MEGTARTOTT AS Megtartott
    ,tao.C_TANTARGYID AS TantargyId
    ,IIF(tantargy.C_NEV <> C_NEVNYOMTATVANYBAN AND C_NEVNYOMTATVANYBAN IS NOT NULL, C_NEVNYOMTATVANYBAN + ' (' + tantargy.C_NEV + ')', tantargy.C_NEV) AS Tantargynev
    ,tao.C_OSZTALYCSOPORTID AS OsztalyCsoportId
    ,IIF(tantargy.C_NEV <> C_NEVNYOMTATVANYBAN AND C_NEVNYOMTATVANYBAN IS NOT NULL, IIF(LEN(C_NEVNYOMTATVANYBAN) + LEN(tantargy.C_NEV) < 90,C_NEVNYOMTATVANYBAN
      + ' (' + tantargy.C_NEV + ')', C_NEVNYOMTATVANYBAN), tantargy.C_NEV) + '-' + CHAR(13) + CHAR(10) + REPLACE(REPLACE(pedagogus.C_NYOMTATASINEV, '[', '('), ']', ')') AS TantargyPedagogussal
  INTO #megtartottOrak
  FROM T_TANITASIORA_OSSZES tao
    LEFT JOIN T_FELHASZNALO_OSSZES pedagogus ON pedagogus.Id = tao.C_TANARID
    LEFT JOIN T_FELHASZNALO_OSSZES helyettesito ON helyettesito.Id = tao.C_HELYETTESITOTANARID
    INNER JOIN T_TANTARGY_OSSZES tantargy ON tantargy.Id = tao.C_TANTARGYID
    LEFT JOIN (
      SELECT DISTINCT
         TanitasioraId
        ,OraSorszam
      FROM #OraSorszam
    ) AS oraSorszam ON oraSorszam.TanitasioraId = tao.Id
    INNER JOIN T_NAPTARIHET_OSSZES nh ON tao.C_DATUM BETWEEN nh.C_HETKEZDONAPJA AND nh.C_HETUTOLSONAPJA
      AND nh.C_TANEVID = @tanevId
      AND nh.TOROLT = 'F'
    INNER JOIN #osztalycsoportok OsztalyCsoportok ON OsztalyCsoportok.OsztalyCsoportId = tao.C_OSZTALYCSOPORTID
      AND tao.C_DATUM BETWEEN OsztalyCsoportok.Kezdete
      AND OsztalyCsoportok.Vege
   WHERE tao.TOROLT = 'F'

  CREATE CLUSTERED INDEX ciMegtartottOrak ON #megtartottOrak (Datum)

  SELECT
     @MaxOraszam = ISNULL(MAX(Oraszam), 4)
    ,@MinOraszam = ISNULL(MIN(Oraszam), 1)
  FROM #megtartottOrak

  SELECT
    @TanulokSzama = COUNT(DISTINCT TanuloId)
  FROM #ErtekelesekTemp
  WHERE TipusId = 1520

  SELECT
    @TanitasiNapokSzama = MAX(CAST(Sorszam AS int))
  FROM #NapSorszam

  SELECT DISTINCT
     @osztalyId AS OsztalyId
    ,ocs.C_NEV AS OsztalyNev
    ,o.C_OSZTALYNAPLOLEIRASA AS OsztalyMegjegyzes
    ,o.C_OSZTALYFONOKID AS PartnerID
    ,ofo.C_NYOMTATASINEV AS Osztalyfonok
    ,o.C_OFOHELYETTESID AS OsztalyfonokHelyettesId
    ,i.C_IGAZGATONEVE AS IntezmenyVezeto
    ,i.C_NEV AS IntezmenyNeve
    ,i.C_VAROS AS IntezmenyVaros
    ,dbo.fnGetDokumentumIntezmenyCime(@tanevId) AS IntezmenyCime
    ,i.C_OMKOD AS IntezmenyOMKod
    ,dbo.fnGetDokumentumDatumFormatum(o.C_OSZTALYNAPLOMEGNYITASA) AS NaploMegnyitasanakDatuma
    ,dbo.fnGetDokumentumDatumFormatum(o.C_OSZTALYNAPLOZARASA) AS NaploZarasanakDatuma
    ,o.C_OSZTALYNAPLOZARASA AS NaplozarasDateFormat
    ,@TanulokSzama AS TanulokSzama
    ,@TanitasiNapokSzama AS TanitasiNapokSzama
    ,@MaxOraszam AS MaxOraszam
    ,@MinOraszam AS MinOraszam
    ,@tanevId AS TanevId
    ,ocs.C_EVFOLYAMTIPUSA AS EvfolyamTipusa
    ,ocs.C_FELADATELLATASIHELYID AS FeladatEllatasiHelyId
    ,o.C_TANTERVID AS TantervId
    ,o.C_KEPZESIFORMA AS KepzesiForma
    ,o.C_AGAZAT AS Agazat
    ,o.C_SZAKMACSOPORT AS SzakmaCsoport
    ,o.C_SZAKKEPESITES AS Szakkepesites
    ,o.C_RESZSZAKKEPESITES AS Reszszakkepesites
    ,ocs.C_KERESZTFELEVES AS OJCSJKeresztfeleves
    ,ocs.C_VEGZOSEVFOLYAM AS CSJVegzosEvfolyamu
    ,o.C_TECHNIKAIOSZTALY AS OJTechnikaiOsztaly
    ,o.C_NEMZETISEGI AS OJNemzetisegi
    ,o.C_KETTANNYELVU AS OJKettannyelvu
    ,o.C_NYELVIELOKESZITO AS OJNyelviElokeszito
    ,o.C_LOGOPEDIAI AS OJLogopediai
    ,o.C_SPORT AS OJSportOsztaly
    ,o.C_AJPROGRAM AS OJAranyJanosProgram
    ,o.C_GYOGYPEDAGOGIAI AS OJGyogypedagogiai
  FROM T_OSZTALYCSOPORT_OSSZES ocs
    INNER JOIN T_OSZTALY_OSSZES o ON ocs.ID = o.ID
      AND o.torolt = 'F'
    LEFT JOIN T_FELHASZNALO_OSSZES ofo ON ofo.ID = o.C_OSZTALYFONOKID
    INNER JOIN T_INTEZMENYADATOK_OSSZES i ON i.C_INTEZMENYID = ocs.C_INTEZMENYID
      AND i.C_TANEVID = ocs.C_TANEVID
      AND i.Torolt = 'F'
  WHERE ocs.ID = @osztalyId

  -- Tanarok
  IF @isEllenorzo = 0

    SELECT DISTINCT
       targy.C_NEV AS TargyNev
      ,IIF(munkaugyiAdat.C_BETOLTETLENALLASHELY = 'T', '', tanar.C_NYOMTATASINEV) AS TanarNev
      ,targykategoria.C_ORDER
      ,tanar.ID AS TanarId
      ,tanar.C_OKTATASIAZONOSITO AS TanarOktAzon
    FROM fnGetDokumentumOsztalyokCsoportokTanuloi(@tanevID, @osztalyId, 'T') AS tanulok
      INNER JOIN T_TANULOCSOPORT_OSSZES AS tcs ON tcs.C_TANULOID = tanulok.TanuloId
        AND tcs.C_BELEPESDATUM >= tanulok.BelepesDatum
        AND (tanulok.KilepesDatum IS NULL OR tcs.C_BELEPESDATUM < tanulok.KilepesDatum)
        AND tcs.TOROLT = 'F'
      INNER JOIN T_OSZTALYCSOPORT_OSSZES AS ocs ON ocs.ID = tcs.C_OSZTALYCSOPORTID
      INNER JOIN T_FOGLALKOZAS_OSSZES AS fogl ON fogl.C_OSZTALYCSOPORTID = tcs.C_OSZTALYCSOPORTID
        AND fogl.TOROLT = 'F'
      INNER JOIN T_FELHASZNALO_OSSZES AS tanar ON fogl.C_TANARID = tanar.ID
        AND tanar.TOROLT = 'F'
      INNER JOIN T_MUNKAUGYIADATOK_OSSZES AS munkaugyiAdat ON munkaugyiAdat.C_ALKALMAZOTTID = tanar.ID
        AND munkaugyiAdat.TOROLT = 'F'
      INNER JOIN T_TANTARGY_OSSZES AS targy ON targy.ID = fogl.C_TANTARGYID
        AND targy.TOROLT = 'F'
      INNER JOIN T_TARGYKATEGORIATIPUS_OSSZES ON T_TARGYKATEGORIATIPUS_OSSZES.ID = targy.C_TARGYKATEGORIA
      INNER JOIN T_DICTIONARYITEMBASE_OSSZES AS targykategoria ON targykategoria.ID = T_TARGYKATEGORIATIPUS_OSSZES.ID
        AND targykategoria.TOROLT = 'F'
        AND targykategoria.C_TANEVID = @tanevID
    WHERE fogl.C_OSZTALYCSOPORTID IN (SELECT Id FROM fnGetDokumentumOsztalyVagyTanoraiCsoport(@tanevId))
    ORDER BY
       targykategoria.C_ORDER
      ,targy.C_NEV
      ,IIF(munkaugyiAdat.C_BETOLTETLENALLASHELY = 'T','',tanar.C_NYOMTATASINEV)

  ELSE

    SELECT DISTINCT
       Tanulok.Id AS TanuloId
      ,Tantargy.C_NEV AS TargyNev
      ,Tanar.C_NYOMTATASINEV AS TanarNev
      ,C_ORDER
    FROM #students AS Tanulok
      INNER JOIN T_TANULOCSOPORT_OSSZES AS TanuloCsoport ON TanuloCsoport.C_TANULOID = Tanulok.Id
        AND TanuloCsoport.TOROLT = 'F'
        AND @VizsgaltNap BETWEEN C_BELEPESDATUM AND ISNULL(C_KILEPESDATUM,@UtolsoNap)
      INNER JOIN T_FOGLALKOZAS_OSSZES AS Foglalkozas ON Foglalkozas.C_OSZTALYCSOPORTID = TanuloCsoport.C_OSZTALYCSOPORTID
        AND Foglalkozas.TOROLT = 'F'
      INNER JOIN T_FELHASZNALO_OSSZES AS Tanar ON Tanar.Id = Foglalkozas.C_TANARID
      INNER JOIN T_TANTARGY_OSSZES AS Tantargy ON Tantargy.Id = Foglalkozas.C_TANTARGYID
      INNER JOIN T_TARGYKATEGORIATIPUS_OSSZES AS TargyKategoria ON TargyKategoria.ID = Tantargy.C_TARGYKATEGORIA
      INNER JOIN T_DICTIONARYITEMBASE_OSSZES AS TargyKategoria_order ON TargyKategoria.ID = TargyKategoria_order.ID
        AND TargyKategoria_order.TOROLT = 'F'
        AND TargyKategoria_order.C_TANEVID = @tanevId
    ORDER BY
      C_ORDER

  -- Orarend
  EXEC sp_GetOrarendOsztalyonkent
     @intezmenyId
    ,@tanevID
    ,@osztalyid
    ,@aktivTanevId
    ,@isEgyebFoglalkozasok
    ,@orarendErvenyessegiDatum

  -- Oralatogatasok
  SELECT
     dbo.fnGetDokumentumDatumFormatum(T_ORALATOGATAS_OSSZES.C_DATUM) AS DATUM
    ,TANITASIORA.C_ORASZAM AS ORASZAM
    ,TARGY.C_NEV AS TARGYNEV
    ,T_FELHASZNALO_OSSZES.C_NYOMTATASINEV AS LATOGATO
    ,T_ORALATOGATAS_OSSZES.C_ORALATOGATOBEOSZTASA AS LATOGATOBEOSZTAS
    ,T_ORALATOGATAS_OSSZES.C_MEGJEGYZES AS ESZREVETEL
  INTO #Oralatogatas
  FROM T_ORALATOGATAS_OSSZES
    INNER JOIN T_FELHASZNALO_OSSZES ON T_FELHASZNALO_OSSZES.ID = T_ORALATOGATAS_OSSZES.C_ERTEKELOID
    INNER JOIN (
      SELECT
         ID
        ,C_TANTARGYID
        ,C_ORASZAM
        ,C_OSZTALYCSOPORTID
      FROM T_TANITASIORA_OSSZES
    ) AS TANITASIORA ON TANITASIORA.ID = T_ORALATOGATAS_OSSZES.C_MEGTARTOTTORAID
    INNER JOIN T_TANTARGY_OSSZES AS TARGY ON TARGY.ID = TANITASIORA.C_TANTARGYID
    INNER JOIN #osztalycsoportok AS ocs ON ocs.OsztalyCsoportId = C_OSZTALYCSOPORTID
  WHERE T_ORALATOGATAS_OSSZES.TOROLT = 'F'
    AND T_ORALATOGATAS_OSSZES.c_tanevId = @tanevId
    AND T_ORALATOGATAS_OSSZES.C_INTEZMENYID = @intezmenyId
   ORDER BY
      T_ORALATOGATAS_OSSZES.C_DATUM
     ,TANITASIORA.C_ORASZAM

  IF (SELECT COUNT(1) FROM #Oralatogatas) = 0

    SELECT
       NULL AS DATUM
      ,NULL AS ORASZAM
      ,NULL AS TARGYNEV
      ,NULL AS LATOGATO
      ,NULL AS LATOGATOBEOSZTAS
      ,'' AS ESZREVETEL

  ELSE

    SELECT
       DATUM
      ,ORASZAM
      ,TARGYNEV
      ,LATOGATO
      ,LATOGATOBEOSZTAS
      ,ESZREVETEL
    FROM #Oralatogatas
    ORDER BY
      DATUM

  -- Naploellenorzesek
  SELECT DISTINCT
     dbo.fnGetDokumentumDatumFormatum(C_ELLENORZESDATUMA) AS ELLENORZESDATUMA
    ,ELLENORZO.C_NYOMTATASINEV AS ELLENORZOSZEMELY
    ,T_NAPLOELLENORZES_OSSZES.C_ESZREVETEL AS ESZREVETEL
  INTO #NaploEllenorzes
  FROM T_NAPLOELLENORZES_OSSZES
    INNER JOIN T_FELHASZNALO_OSSZES AS ELLENORZO ON ELLENORZO.ID = T_NAPLOELLENORZES_OSSZES.C_ELLENORZOSZEMELYID
  WHERE C_OSZTALYID = @osztalyId
    AND T_NAPLOELLENORZES_OSSZES.TOROLT = 'F'
    AND T_NAPLOELLENORZES_OSSZES.c_tanevId = @tanevId

  IF (SELECT COUNT(1) FROM #NaploEllenorzes) = 0

    SELECT
       NULL AS ELLENORZESDATUMA
      ,NULL AS ELLENORZOSZEMELY
      ,NULL AS ESZREVETEL

  ELSE

    SELECT
       ELLENORZESDATUMA
      ,ELLENORZOSZEMELY
      ,ESZREVETEL
    FROM #NaploEllenorzes

  SELECT
    @HetUtolsoNapjaMegtartottOra = IIF(MAX(HetNapja) IS NULL OR MAX(HetNapja) <= 1412, 1412, MAX(HetNapja))
  FROM #megtartottOrak

  SELECT
    @HetUtolsoNapjaTanevendje = ISNULL(MAX(C_HETNAPJA), 1412)
  FROM #NapSorszam AS NapSorszam
    INNER JOIN T_NAPTARINAP_OSSZES AS NaptariNap ON NaptariNap.C_NAPDATUMA = NapSorszam.Datum
      AND NaptariNap.C_TANEVID = @tanevId

  SET @HetUtolsoNapja = IIF(@HetUtolsoNapjaMegtartottOra >= @HetUtolsoNapjaTanevendje, @HetUtolsoNapjaMegtartottOra, @HetUtolsoNapjaTanevendje)

  INSERT INTO #HetAdatok (
     C_HETSORSZAMA
    ,KezdoDatum
    ,VegeDatum
  )
  SELECT
     nh.C_HETSORSZAMA
    ,MIN(nn.C_NAPDATUMA) AS HetKezdete
    ,IIF(ISNULL(MAX(tr.C_DATUM), MAX(nn.C_NAPDATUMA)) > MAX(nn.C_NAPDATUMA), MAX(tr.C_DATUM), MAX(nn.C_NAPDATUMA)) AS HetVege
  FROM T_NAPTARIHET_OSSZES AS nh
    INNER JOIN T_NAPTARINAP_OSSZES AS nn ON nn.C_NAPDATUMA BETWEEN nh.C_HETKEZDONAPJA AND nh.C_HETUTOLSONAPJA
      AND nn.C_INTEZMENYID = @intezmenyId
      AND nn.C_TANEVID = @tanevId
      AND nn.C_ALAPHETNAPJA <= 1412
      AND nn.C_HETSORSZAMA = nh.C_HETSORSZAMA
      AND nn.C_NAPDATUMA BETWEEN @ElsoNap AND @UtolsoNap
      AND nn.TOROLT = 'F'
    LEFT JOIN T_TANEVRENDJE_OSSZES AS tr ON tr.C_INTEZMENYID = @intezmenyId
      AND tr.C_TANEVID = @tanevId
      AND tr.TOROLT = 'F'
      AND tr.C_DATUM BETWEEN nh.C_HETKEZDONAPJA AND nh.C_HETUTOLSONAPJA
  WHERE nh.TOROLT = 'F'
    AND nh.C_TANEVID = @tanevId
    AND nh.C_INTEZMENYID = @intezmenyId
  GROUP BY
    nh.C_HETSORSZAMA
  ORDER BY
    nh.C_HETSORSZAMA

  SELECT
     ha.C_HETSORSZAMA
    ,dbo.fnGetDokumentumDatumFormatum(ha.KezdoDatum)
    ,dbo.fnGetDokumentumDatumFormatum(ha.VegeDatum)
  FROM #HetAdatok AS ha

  INSERT INTO #OsszesOra (
     Datum
    ,FormatDate
    ,Oraszam
    ,HetSorszama
    ,HetNapja
    ,Megjegyzes
    ,Sorszam
  )
  SELECT
     Datum
    ,FormatDate
    ,Oraszam
    ,HetSorszama
    ,HetNapja
    ,IIF(RIGHT(Megjegyzes, 1) = ',', LEFT(Megjegyzes, LEN(Megjegyzes) - 1), Megjegyzes) AS Megjegyzes
    ,Sorszam
  FROM (
    SELECT
       C_NAPDATUMA AS Datum
      ,dbo.fnGetDokumentumDatumFormatum(C_NAPDATUMA) AS FormatDate
      ,oraszam AS Oraszam
      ,ha.C_HETSORSZAMA AS HetSorszama
      ,AlapHetnapja.C_NAME AS HetNapja
      ,ISNULL(trNaptipus.C_NAME + ',', '') + IIF(LEN(ISNULL(tr.C_MEGJEGYZES, '')) = 0, '', ' ' + tr.C_MEGJEGYZES + ',')
        + IIF(LEN(ISNULL(osztalyCsoportTanevRendje.Megjegyzes, '')) = 0, '', ' ' + osztalyCsoportTanevRendje.Megjegyzes + ',')
        + IIF(tr.C_HETNAPJA <> nn.C_ALAPHETNAPJA, ' (' + Hetnapja.C_NAME + ')', '') AS Megjegyzes
      ,ISNULL(Sorszam, '-') AS Sorszam
    FROM T_NAPTARINAP_OSSZES AS nn
      INNER JOIN #HetAdatok AS ha ON nn.C_NAPDATUMA BETWEEN ha.KezdoDatum AND ha.VegeDatum
      LEFT JOIN #NapSorszam AS sorszam ON sorszam.Datum = nn.C_NAPDATUMA
      LEFT JOIN T_TANEVRENDJE_OSSZES AS tr ON tr.C_DATUM = nn.C_NAPDATUMA
        AND tr.C_TANEVID = nn.C_TANEVID
        AND tr.TOROLT = 'F'
        AND tr.C_OSSZESCSOPORTRAVONATKOZIK = 'T'
      LEFT JOIN (
        SELECT
           C_DATUM
          ,ISNULL(trNaptipus.C_NAME + ', ', '') + ISNULL('(' + HetNapja.C_NAME + ')', '') + ISNULL(C_MEGJEGYZES, '') AS Megjegyzes
        FROM T_OSZTALYCSOPORT_TANEVRENDJE AS ocstr
          INNER JOIN T_TANEVRENDJE_OSSZES AS tr ON tr.Id = ocstr.C_TANEVRENDJEID
          LEFT JOIN T_DICTIONARYITEMBASE_OSSZES AS HetNapja ON HetNapja.ID = tr.C_HETNAPJA
            AND HetNapja.C_TANEVID = @tanevId
          LEFT JOIN T_DICTIONARYITEMBASE_OSSZES AS trNaptipus ON trNaptipus.ID = tr.C_NAPTIPUSA
            AND trNaptipus.C_TANEVID = @tanevId
            AND tr.C_NAPTIPUSA <> 1385
        WHERE C_OSZTALYCSOPORTID = @osztalyId
          AND tr.TOROLT = 'F'
          AND tr.C_OSSZESCSOPORTRAVONATKOZIK = 'F'
      ) AS osztalyCsoportTanevRendje ON osztalyCsoportTanevRendje.C_DATUM = nn.C_NAPDATUMA
      LEFT JOIN T_DICTIONARYITEMBASE_OSSZES AS trNaptipus ON trNaptipus.ID = tr.C_NAPTIPUSA
        AND trNaptipus.C_TANEVID = @tanevId
        AND tr.C_NAPTIPUSA <> 1385
      LEFT JOIN T_DICTIONARYITEMBASE_OSSZES AS AlapHetnapja ON AlapHetnapja.Id = nn.C_ALAPHETNAPJA
        AND AlapHetnapja.C_TANEVID = @tanevId
      LEFT JOIN T_DICTIONARYITEMBASE_OSSZES AS Hetnapja ON Hetnapja.Id = nn.C_HETNAPJA
        AND Hetnapja.C_TANEVID = @tanevId
      CROSS JOIN(VALUES
        (0),
        (1),
        (2),
        (3),
        (4),
        (5),
        (6),
        (7),
        (8),
        (9),
        (10),
        (11),
        (12),
        (13),
        (14),
        (15),
        (16),
        (17),
        (18),
        (19),
        (20),
        (21),
        (22),
        (23),
        (24),
        (25)) AS oraszam(oraszam)
    WHERE nn.C_TANEVID = @tanevId
      AND nn.TOROLT = 'F'
      AND nn.C_NAPDATUMA <= @UtolsoNap
      AND oraszam <= @MaxOraszam
      AND nn.C_HETNAPJA BETWEEN 1407 AND @HetUtolsoNapja
  ) AS NapAdatok

  IF @MinOraszam > 0

    DELETE
    FROM #OsszesOra
    WHERE
      Oraszam = 0

  IF @isSzovegesNaplo = 0
  BEGIN   /* NORMÁL OSZTÁLYNAPLÓ */
    SELECT
       MulasztasokKulso.Datum AS Datum
      ,Felhasznalo.C_NYOMTATASINEV + ' [' + STUFF(
        (
          SELECT
            ', ' + CAST(MulasztasokBelso.Oraszam AS varchar(3)) + IIF(MulasztasokBelso.Tipus = 1499, '(k)', '')
          FROM #mulasztasTmp AS MulasztasokBelso
          WHERE MulasztasokBelso.Datum = MulasztasokKulso.Datum
            AND MulasztasokBelso.TanuloId = MulasztasokKulso.TanuloId
            AND MulasztasokBelso.TanuloCsoportId = MulasztasokKulso.TanuloCsoportId
          ORDER BY
             Datum
            ,Oraszam
          FOR XML PATH(''), TYPE
        ) .value
        ('.', 'NVARCHAR(MAX)'), 1, 2, ''
      ) + '] ' + CAST(SUM(IIF(MulasztasokKulso.IgazoltE = 'T', 1, 0)) AS varchar(5)) + '/' + CAST(SUM(IIF(MulasztasokKulso.IgazoltE = 'F', 1, 0)) AS varchar(5)) AS Hianyzas
    INTO #hianyzasokTMP
    FROM #mulasztasTmp AS MulasztasokKulso
      INNER JOIN T_FELHASZNALO_OSSZES AS Felhasznalo ON Felhasznalo.Id = MulasztasokKulso.TanuloId
    GROUP BY
       MulasztasokKulso.Datum
      ,MulasztasokKulso.TanuloId
      ,TanuloCsoportId
      ,Felhasznalo.C_NYOMTATASINEV

    CREATE CLUSTERED INDEX ci2 ON #hianyzasokTMP (datum)

    SELECT
       Datum
      ,STUFF(
        (
          SELECT
            CHAR(13) + CHAR(10) + Hianyzas
          FROM #hianyzasokTMP AS bHianyzasok
          WHERE Hianyzasok.Datum = bHianyzasok.Datum
          FOR XML PATH(''), TYPE
        ) .value
        ('.', 'NVARCHAR(MAX)'), 1, 2, ''
      ) AS Hianyzas
    INTO #hianyzasok
    FROM #hianyzasokTMP AS Hianyzasok

    SELECT DISTINCT
       Datum
      ,HetSorszama
      ,HetNapja
      ,Oraszam
      ,STUFF(
        (
          SELECT
            CAST(bmto.TantargyNev AS nvarchar(max)) + CHAR(13) + CHAR(10)
          FROM #megtartottOrak AS bmto
          WHERE bmto.Datum = mto.Datum
            AND bmto.Oraszam = mto.Oraszam
          FOR XML PATH(''), TYPE
        ) .value
        ('.', 'NVARCHAR(MAX)'), 1, 0, ''
      ) AS Tantargy
    INTO #Orarend
    FROM #megtartottOrak AS mto

    SELECT DISTINCT
       Datum
      ,@MinOraszam AS Oraszam
      ,TantargyPedagogussal
      ,STUFF(
        (
          SELECT DISTINCT
            CAST(bmto.TemaOraSzammal AS nvarchar(max)) + CHAR(13) + CHAR(10)
          FROM #megtartottOrak AS bmto
          WHERE bmto.Datum = mto.Datum
            AND bmto.TantargyPedagogussal = mto.TantargyPedagogussal
          FOR XML PATH(''), TYPE
        ) .value
        ('.', 'NVARCHAR(MAX)'), 1, 0, ''
      ) AS Tema
    INTO #1nap1TantargyTobbOra
    FROM #megtartottOrak AS mto

    SELECT
      @tantargyakNevvel = ISNULL(@tantargyakNevvel + ', ', '') + '[' + IIF(LEN(TantargyPedagogussal) > 128, SUBSTRING(TantargyPedagogussal, 1, 120) + '...', TantargyPedagogussal) + ']'
    FROM (
      SELECT DISTINCT
         TantargyPedagogussal
        ,C_TARGYKATEGORIA
      FROM #megtartottOrak AS m
        INNER JOIN T_TANTARGY_OSSZES AS t ON t.Id = m.TantargyId
    ) AS t
    ORDER BY
      C_TARGYKATEGORIA

    SET @sql = '
      SELECT
         Datum
        ,Oraszam
        , ' + @tantargyakNevvel + '
      INTO #naplo
      FROM #1nap1TantargyTobbOra
      PIVOT (MAX(Tema) FOR TantargyPedagogussal IN (' + @tantargyakNevvel + ')) piv

      SELECT DISTINCT
         OsszesOra.FormatDate	AS C_NAPDATUMA
        ,Hianyzas	AS Mulasztas
        ,OsszesOra.Oraszam	AS ORASZAM
        ,NULL	AS T1ID
        ,NULL	AS T2ID
        ,NULL	AS T3ID
        ,Orarend.Tantargy	AS TANTARGY
        ,OsszesOra.HetSorszama AS C_HETSORSZAMA
        ,OsszesOra.HetNapja	AS C_HETNAPJA_DNAME
        ,OsszesOra.Sorszam AS NapSorszama
        ,OsszesOra.Megjegyzes AS Megjegyzés
        ,' + @tantargyakNevvel + '
      FROM #OsszesOra OsszesOra
        LEFT JOIN #Orarend Orarend ON Orarend.Datum = OsszesOra.Datum AND Orarend.Oraszam = OsszesOra.Oraszam
        LEFT JOIN #naplo Naplo ON Naplo.Datum = OsszesOra.Datum AND OsszesOra.Oraszam = @MinOraszam
        LEFT JOIN #hianyzasok Hianyzasok ON Hianyzasok.Datum = OsszesOra.Datum
      ORDER BY
         OsszesOra.FormatDate
        ,Oraszam
    ';

    IF @sql IS NULL

      SELECT
         NULL AS C_NAPDATUMA
        ,NULL AS Mulasztas
        ,NULL AS Megjegyzés
        ,NULL AS ORASZAM
        ,NULL AS T1ID
        ,NULL AS T2ID
        ,NULL AS T3ID
        ,NULL AS TANTARGY
        ,NULL AS C_HETSORSZAMA
        ,NULL AS C_HETNAPJA_DNAME
        ,NULL AS NapSorszama

    ELSE

        EXEC sp_executesql
           @sql
          ,N'@MinOraszam int'
          ,@MinOraszam

    DROP TABLE #1nap1TantargyTobbOra;
    DROP TABLE #OsszesOra;
    DROP TABLE #hianyzasokTMP;
    DROP TABLE #hianyzasok;
    DROP TABLE #Orarend;

  END -- NORMÁL OSZTÁLYNAPLÓ
  ELSE
  BEGIN -- SZÖVEGES OSZTÁLYNAPLÓ
    SELECT
       OsszesOra.Datum AS C_NAPDATUMA
      ,OsszesOra.HetNapja AS Napneve
      ,OsszesOra.Megjegyzes AS C_MEGJEGYZES
      ,nh.C_HETKEZDONAPJA AS C_HETKEZDONAPJA
      ,nh.C_HETUTOLSONAPJA AS C_HETUTOLSONAPJA
      ,OsszesOra.HetSorszama AS C_HETSORSZAMA
      ,OsszesOra.Oraszam AS OraSorszam
      ,OsszesOra.Sorszam AS Napszam
      ,Tantargynev AS Tantargy
      ,PedagogusNev AS Tanar
      ,Tema AS Oraanyaga
      ,OraSorszam AS C_ORAEVESSORSZAM
    INTO #szoveges
    FROM #OsszesOra AS OsszesOra
      LEFT JOIN #megtartottOrak AS mto ON mto.Datum = OsszesOra.Datum
        AND OsszesOra.Oraszam = mto.Oraszam
      INNER JOIN T_NAPTARIHET_OSSZES AS nh ON OsszesOra.Datum BETWEEN nh.C_HETKEZDONAPJA AND nh.C_HETUTOLSONAPJA
        AND nh.C_TANEVID = @tanevId
        AND nh.torolt = 'F'

    CREATE CLUSTERED INDEX ci4 ON #szoveges (C_NAPDATUMA)

    SELECT DISTINCT
       dbo.fnGetDokumentumDatumFormatum(C_NAPDATUMA) AS C_NAPDATUMA
      ,Napneve
      ,C_MEGJEGYZES
      ,C_HETKEZDONAPJA
      ,C_HETUTOLSONAPJA
      ,C_HETSORSZAMA
      ,OraSorszam
      ,Napszam
      ,(
        SELECT
          CAST(bszov.TANTARGY AS nvarchar (max)) + NCHAR(10)
        FROM #szoveges AS bszov
        WHERE bszov.C_NAPDATUMA = szov.C_NAPDATUMA
          AND bszov.ORASORSZAM = szov.ORASORSZAM
          AND bszov.napszam = szov.napszam
        FOR XML PATH('')
      ) AS TANTARGY
      ,(
        SELECT
          CAST(bszov.TANAR AS nvarchar (max)) + NCHAR(10)
        FROM #szoveges AS bszov
        WHERE bszov.C_NAPDATUMA = szov.C_NAPDATUMA
          AND bszov.ORASORSZAM = szov.ORASORSZAM
          AND bszov.napszam = szov.napszam
        FOR XML PATH('')
      ) AS TANAR
      ,(
        SELECT
          CAST(bszov.ORAANYAGA AS nvarchar (max)) + NCHAR(10)
        FROM #szoveges AS bszov
        WHERE bszov.C_NAPDATUMA = szov.C_NAPDATUMA
          AND bszov.ORASORSZAM = szov.ORASORSZAM
          AND bszov.napszam = szov.napszam
        FOR XML PATH('')
      ) AS ORAANYAGA
      ,(
        SELECT
          CAST(bszov.C_ORAEVESSORSZAM AS nvarchar (max)) + NCHAR(10)
        FROM #szoveges AS bszov
        WHERE bszov.C_NAPDATUMA = szov.C_NAPDATUMA
          AND bszov.ORASORSZAM = szov.ORASORSZAM
          AND bszov.napszam = szov.napszam
        FOR XML PATH('')
      ) AS OraEvesSorszama
    FROM #szoveges AS szov
    ORDER BY
       dbo.fnGetDokumentumDatumFormatum(C_NAPDATUMA)
      ,orasorszam

    /*Hiányzások*/
    SELECT
       NapiMulasztas.HetSorszama
      ,TanuloNeve
      ,NapiMulasztas.TanuloId
      ,MAX(Hetfo) AS Hetfo
      ,MAX(Kedd) AS Kedd
      ,MAX(Szerda) AS Szerda
      ,MAX(Csutortok) AS Csutortok
      ,MAX(Pentek) AS Pentek
      ,MAX(Szombat) AS Szombat
      ,HetiMulasztas
    FROM (
      SELECT
         HetSorszama
        ,TanuloNeve
        ,TanuloId
        ,TanuloCsoportId
        ,[1408] AS Hetfo
        ,[1409] AS Kedd
        ,[1410] AS Szerda
        ,[1411] AS Csutortok
        ,[1412] AS Pentek
        ,[1413] AS Szombat
      FROM (
        SELECT DISTINCT
           HetSorszama
          ,C_NYOMTATASINEV AS TanuloNeve
          ,TanuloId
          ,TanuloCsoportId
          ,Datum
          ,C_ALAPHETNAPJA AS Hetnapja
          ,'[' + STUFF(
            (
              SELECT
                ', ' + CAST(MulasztasokBelso.Oraszam AS varchar(3)) + IIF(MulasztasokBelso.Tipus = 1499, '(k)', '')
              FROM #mulasztasTmp AS MulasztasokBelso
              WHERE MulasztasokBelso.Datum = MulasztasokKulso.Datum
                AND MulasztasokBelso.TanuloId = MulasztasokKulso.TanuloId
                AND MulasztasokBelso.TanuloCsoportId = MulasztasokKulso.TanuloCsoportId
              ORDER BY
                 Datum
                ,Oraszam
              FOR XML PATH(''), TYPE
            ) .value
            ('.', 'VARCHAR(MAX)'), 1, 2, ''
          ) + '] ' + CAST(SUM(IIF(MulasztasokKulso.IgazoltE = 'T', 1, 0)) AS varchar(5)) + '/' + CAST(SUM(IIF(MulasztasokKulso.IgazoltE = 'F', 1, 0)) AS varchar(5)) AS Hianyzas
        FROM #mulasztasTmp AS MulasztasokKulso
          INNER JOIN T_FELHASZNALO_OSSZES AS Felhasznalo ON Felhasznalo.Id = MulasztasokKulso.TanuloId
          INNER JOIN T_NAPTARINAP_OSSZES AS NaptariNap ON NaptariNap.C_NAPDATUMA = MulasztasokKulso.Datum
            AND NaptariNap.C_TANEVID = @tanevId
        GROUP BY
           Hetsorszama
          ,C_NYOMTATASINEV
          ,TanuloId
          ,TanuloCsoportId
          ,Datum
          ,C_ALAPHETNAPJA
          ,TanuloId
      ) AS OsszefuzottMulasztasok PIVOT(MAX(Hianyzas) FOR HetNapja IN(
         [1408]
        ,[1409]
        ,[1410]
        ,[1411]
        ,[1412]
        ,[1413])) piv
    ) AS NapiMulasztas
    INNER JOIN #HetiMulasztasok AS HetiMulasztasok ON HetiMulasztasok.HetSorszama = NapiMulasztas.HetSorszama
      AND HetiMulasztasok.TanuloId = NapiMulasztas.TanuloId
      AND HetiMulasztasok.TanuloCsoportId = NapiMulasztas.TanuloCsoportId
    GROUP BY
       NapiMulasztas.HetSorszama
      ,TanuloNeve
      ,NapiMulasztas.TanuloId
      ,HetiMulasztas

  END

  /*TANULÓ adatai*/
  SELECT
     TanuloId
    ,TanuloCsoportId
    ,Sorszam
    ,TorzslapSzam
    ,OktAzon
    ,TajSzam
    ,AnyjaNeve
    ,SzulHely
    ,SzulIdo
    ,SocAdat
    ,Kepzes
    ,TanuloNeve
    ,Allampolgarsaga
    ,DiakIgazolvanySzam
    ,KilepesDatum
    ,BeirasiNaploSorszam
    ,AktualisOsztaly AS OsztalyNev
  INTO #TanuloAlapAdatok
  FROM fnGetDokumentumTanulokAdatai(@tanevId, @osztalyId)
  WHERE @tanuloId IS NULL
    OR TanuloId = @tanuloId

  SELECT
     TanuloId
    ,TanuloCsoportId
    ,Sorszam
    ,TorzslapSzam
    ,OktAzon
    ,TajSzam
    ,AnyjaNeve
    ,SzulHely
    ,SzulIdo
    ,SocAdat
    ,Kepzes
    ,TanuloNeve
    ,Allampolgarsaga
    ,DiakIgazolvanySzam
    ,KilepesDatum
    ,BeirasiNaploSorszam
    ,OsztalyNev
  FROM #TanuloAlapAdatok
  ORDER BY
    Sorszam

  INSERT INTO #Gondviselok (
     TanuloId
    ,GondviseloId
  )
  SELECT
     TanuloId
    ,GondviseloId
  FROM fnGetDokumentumGondviselok(@osztalyId, @tanevId, 'F', 'T')
  WHERE @tanuloId IS NULL
    OR TanuloId = @tanuloId

 /*TANULÓ elérhetőségei */
  INSERT INTO @TanuloCimTable (
     FelhasznaloId
    ,Cim
    ,Cimtipusa
  )
  SELECT DISTINCT
     TanuloId
    ,STUFF(
      (
        SELECT DISTINCT
          CAST(Btemp.Cim AS nvarchar (max))  + char(13) + char(10)
        FROM fnGetDokumentumTanuloOrGondviseloCim (0, @tanevId, @osztalyId) btemp
        WHERE temp.TanuloId = btemp.TanuloId
          AND temp.CimTipusa = btemp.CimTipusa
        FOR XML PATH(''), TYPE
      ).value
      ('.', 'NVARCHAR(MAX)'), 1, 0, ''
    )
    ,cimTipusa.C_NAME
  FROM fnGetDokumentumTanuloOrGondviseloCim (0, @tanevId, @osztalyId) temp
    INNER JOIN T_DICTIONARYITEMBASE_OSSZES cimTipusa ON cimTipusa.Id = temp.CimTipusa
      AND cimTipusa.C_TANEVID = @tanevId

  INSERT INTO @GondViseloCimTable (
     GondviseloId
    ,Cim
    ,Cimtipusa
  )
  SELECT DISTINCT
     GondviseloId
    ,STUFF(
      (
        SELECT DISTINCT
          CAST(Btemp.Cim AS nvarchar (max))  + char(13) + char(10)
        FROM fnGetDokumentumTanuloOrGondviseloCim (1, @tanevId, @osztalyId) btemp
        WHERE temp.GondviseloId = btemp.GondviseloId
          AND temp.CimTipusa = btemp.CimTipusa
        FOR XML PATH(''), TYPE
      ).value
      ('.', 'NVARCHAR(MAX)'), 1 ,0, ''
    )
    ,cimTipusa.C_NAME
  FROM fnGetDokumentumTanuloOrGondviseloCim (1, @tanevId, @osztalyId) temp
    INNER JOIN T_DICTIONARYITEMBASE_OSSZES cimTipusa ON cimTipusa.Id = temp.CimTipusa
       AND cimTipusa.C_TANEVID = @tanevId

  INSERT INTO @EmailCimTableTemp (
     FelhasznaloId
    ,EmailCim
    ,GondviseloId
  )
  SELECT
     TanuloId
    ,C_EMAILCIM
    ,C_GONDVISELOID
  FROM fnGetDokumentumOsztalyokCsoportokTanuloi(@tanevId, @osztalyId, 'T') tanulo
    INNER JOIN T_EMAIL_OSSZES email ON email.C_FELHASZNALOID = TanuloId
  WHERE email.TOROLT = 'F'
    AND email.C_TANEVID = @tanevId
    AND LEN(C_EMAILCIM) > 0

  INSERT INTO @EmailCimTanuloTable (
     FelhasznaloId
    ,EmailCim
  )
  SELECT DISTINCT
    FelhasznaloId
    ,STUFF(
      (
        SELECT DISTINCT
          CAST(btemp.EmailCim AS nvarchar (max)) + char(13) + char(10)
        FROM @EmailCimTableTemp btemp
        WHERE temp.FelhasznaloId = btemp.FelhasznaloId
          AND btemp.GondviseloId IS NULL
        FOR XML PATH(''), TYPE
      ).value
      ('.', 'NVARCHAR(MAX)'), 1 ,0, ''
    ) Email
  FROM @EmailCimTableTemp temp
  WHERE GondviseloId IS NULL

  INSERT INTO @EmailCimGondviseloTable (
     GondviseloId
    ,EmailCim
  )
  SELECT DISTINCT
    GondviseloId
    ,STUFF(
      (
        SELECT DISTINCT
          CAST(btemp.EmailCim AS nvarchar (max)) + char(13) + char(10)
        FROM @EmailCimTableTemp btemp
        WHERE temp.GondviseloId = btemp.GondviseloId
          AND btemp.GondviseloId IS NOT NULL
        FOR XML PATH(''), TYPE
      ).value
      ('.', 'NVARCHAR(MAX)'), 1 ,0, ''
    ) Email
  FROM @EmailCimTableTemp temp
  WHERE GondviseloId IS NOT NULL

  INSERT INTO @TelefonTableTemp (
     FelhasznaloId
    ,Telefon
    ,GondviseloId
  )
  SELECT
    TanuloId
    ,C_TELEFONSZAM
    ,C_GONDVISELOID
  FROM fnGetDokumentumOsztalyokCsoportokTanuloi(@tanevId, @osztalyId, 'T') tanulo
    INNER JOIN T_TELEFON_OSSZES telefon ON telefon.C_FELHASZNALOID = TanuloId
  WHERE
    telefon.TOROLT = 'F'
    AND telefon.C_TANEVID = @tanevId
    AND LEN(telefon.C_TELEFONSZAM) > 0

  INSERT INTO @TanuloTelefonTable (
     FelhasznaloId
    ,Telefon
  )
  SELECT DISTINCT
    FelhasznaloId
    ,STUFF(
      (
        SELECT DISTINCT
          CAST(btemp.Telefon AS nvarchar (max)) + char(13) + char(10)
        FROM @TelefonTableTemp btemp
        WHERE temp.FelhasznaloId = btemp.FelhasznaloId
          AND GondviseloId IS NULL
        FOR XML PATH(''), TYPE
      ).value
      ('.', 'NVARCHAR(MAX)'), 1 ,0, ''
    )
  FROM @TelefonTableTemp temp
  WHERE GondviseloId IS NULL

  INSERT INTO @GondviseloTelefonTable (
     GondviseloId
    ,Telefon
  )
  SELECT DISTINCT
     GondviseloId
    ,STUFF(
      (
        SELECT DISTINCT
          CAST(btemp.Telefon AS nvarchar (max)) + char(13) + char(10)
        FROM @TelefonTableTemp btemp
        WHERE temp.GondviseloId = btemp.GondviseloId
          AND temp.FelhasznaloId = btemp.FelhasznaloId
          AND GondviseloId IS NOT NULL
        FOR XML PATH(''), TYPE
      ).value
      ('.', 'NVARCHAR(MAX)'), 1 ,0, ''
    )
  FROM @TelefonTableTemp temp
  WHERE GondviseloId IS NOT NULL

  SELECT
     s.Id AS tanuloid
    ,cim.Cimtipusa AS cimtipus
    ,cim.Cim
    ,email.EmailCim AS email
    ,telefon.Telefon AS telefonszam
  FROM #students s
    LEFT JOIN @TanuloCimTable cim ON cim.FelhasznaloId = s.Id
    LEFT JOIN @EmailCimTanuloTable email ON email.FelhasznaloId = s.Id
    LEFT JOIN @TanuloTelefonTable telefon ON telefon.FelhasznaloId = s.Id
  ORDER BY Cimtipusa

  /* TANULÓ mentesség */
  SELECT
     TanuloId
    ,TanuloCsoportId
    ,ROW_NUMBER() OVER(PARTITION BY TanuloId, TanuloCsoportId ORDER BY TanuloId, TanuloCsoportId) AS Sorszam
    ,TantargyNev
    ,MentessegOka
  FROM fnGetDokumentumTanuloMentessegei(@tanevId, @osztalyId, DEFAULT)
  WHERE @tanuloId IS NULL
    OR TanuloId = @tanuloId

  /* TANULÓ határozatok */
  SELECT
     s.ID AS tanuloID
    ,s.TanuloCsoportId
    ,ROW_NUMBER() OVER(PARTITION BY s.ID, s.TanuloCsoportId ORDER BY s.ID, s.TanuloCsoportId) AS sorszam
    ,dbo.fnGetDokumentumDatumFormatum(Datum) AS datum
    ,d.C_NAME AS tipus
    ,Tartalom AS tartalom
    ,FeljegyzoNeve AS tanar
  FROM #studentsWithTanuloCsoport AS s
    INNER JOIN fnGetDokumentumTanulokFeljegyzesei(@tanevId, @osztalyId) AS feljegyzes ON feljegyzes.TanuloId = s.ID
    INNER JOIN T_DICTIONARYITEMBASE_OSSZES AS d ON d.ID = Tipusa
      AND d.C_TANEVID = @tanevId
  WHERE BelepesDatum <= feljegyzes.Datum
    AND (KilepesDatum IS NULL OR KilepesDatum >= feljegyzes.Datum)
    AND Tipusa IN (
       1543
      ,1544
      ,1547
      ,1548
      ,1549
      ,1550
      ,1551
      ,1552
      ,1553
    )

  /* TANULÓ feljegyzései */
  SELECT
     s.ID AS TanuloID
    ,s.TanuloCsoportId AS TanuloCsoportId
    ,ROW_NUMBER() OVER(PARTITION BY s.ID, s.TanuloCsoportId ORDER BY s.ID, s.TanuloCsoportId) AS Sorszam
    ,dbo.fnGetDokumentumDatumFormatum(Datum) AS Datum
    ,d.C_NAME AS Tipus
    ,Tartalom AS Tartalom
    ,FeljegyzoNeve AS Tanar
  FROM #studentsWithTanuloCsoport s
    INNER JOIN fnGetDokumentumTanulokFeljegyzesei(@tanevId, @osztalyId) feljegyzes ON feljegyzes.TanuloId = s.ID
    INNER JOIN T_DICTIONARYITEMBASE_OSSZES d ON d.ID = Tipusa
      AND d.C_TANEVID = @tanevId
  WHERE BelepesDatum <= feljegyzes.Datum
    AND (KilepesDatum IS NULL OR KilepesDatum >= feljegyzes.Datum)
    AND (@isEllenorzo = 1
      AND Tipusa NOT IN (
         1543
        ,1544
        ,1547
        ,1548
        ,1549
        ,1550
        ,1551
        ,1552
        ,1553
      )
      OR Tipusa IN (
         1535
        ,1536
        ,1540
        ,1541
        ,1542
        ,6491
        ,6906
        ,6907
        ,6950
        ,6970
      )
      OR Tipusa BETWEEN 5450 AND 5481
      OR Tipusa BETWEEN 6312 AND 6328
      OR Tipusa BETWEEN 6870 AND 6875
      OR Tipusa BETWEEN 6945 AND 6947
    )
  ORDER BY
    dbo.fnGetDokumentumDatumFormatum(Datum)

  /* TANULO mulasztása */
  EXEC sp_GetDokumentumMulasztasokIdoszakonkent
     @tanevId = @tanevId
    ,@osztalyCsoportId = @osztalyId
    ,@iskolaErdekuSzamit = @iskolaErdekuSzamit
    ,@isReszletesMulasztasok = @isReszletesMulasztasok

  /*gondviselő elérhetőségei */
  SELECT DISTINCT
     Gondviselok.TanuloId AS TanuloId
    ,Gondviselok.GondviseloNev + ' (' + RokonsagiFok.C_NAME + ')' AS C_NEV
    ,cim.Cimtipusa AS C_CIMTIPUSA
    ,cim.cim AS C_OSSZETETTCIM
    ,telefon.telefon AS C_TELEFONSZAM
    ,email.emailcim AS C_EMAILCIM
  FROM fnGetDokumentumGondviselok (@osztalyId, @tanevId, 'F', 'T') Gondviselok
    INNER JOIN T_DICTIONARYITEMBASE_OSSZES RokonsagiFok ON RokonsagiFok.ID = Gondviselok.RokonsagifokId AND RokonsagiFok.C_TANEVID = @tanevId
    LEFT JOIN @EmailCimGondviseloTable email ON email.GondviseloId = Gondviselok.GondviseloId
    LEFT JOIN @GondviseloTelefonTable telefon ON telefon.GondviseloId = Gondviselok.GondviseloId
    LEFT JOIN @GondViseloCimTable cim ON cim.GondviseloId = Gondviselok.GondviseloId
  ORDER BY cim.Cimtipusa

  /*TANULÓ osztályzatai*/
  --Osztályhoz tartozó értékelések
  EXEC sp_GetDokumentumErtekelesekIdoszakonkent
     @tanevId = @tanevId
    ,@osztalyCsoportId = @osztalyId
    ,@ertekelesTipusa = NULL
    ,@csakTanorai = 1
    ,@csakKivlasztottOsztalyCsoport = 0
    ,@atsoroltTanuloErtekelesek = 0
    ,@fuggolegesTantargyak = @fuggolegesTantargyak
    ,@intezmenyId = @intezmenyId

  /* TANULÓ záradékai */
  SELECT
     TanuloId
    ,TanuloCsoportId
    ,Bejegyzes AS Zaradek
  FROM fnGetDokumentumTanuloZaradekai(@tanevId, @osztalyId, @isEllenorzo)
  WHERE @tanuloId IS NULL
    OR TanuloId = @tanuloId

  /*Szöveges minosítések*/
  SELECT
     a.tanuloId
    ,a.TanuloCsoportId
    ,a.Honap
    ,a.Tantargy
    ,a.Ertekeles
    ,a.Tipus
  FROM (
    SELECT
       s.id AS tanuloId
      ,s.TanuloCsoportId
      ,szoveges.Honap
      ,szoveges.Tantargy
      ,szoveges.Ertekeles
      ,szoveges.Tipus
      ,szoveges.RendezHonap
      FROM #studentsWithTanuloCsoport AS s
        INNER JOIN (
          SELECT
             TanuloId AS tanuloId
            ,TanuloCsoportId
            ,'[' + CONVERT(nvarchar (max), DATEPART(MONTH, Datum)) + '. hónap]' AS Honap
            ,IIF(TantargyNev <> TantargyNevNyomtatvanyban AND TantargyNevNyomtatvanyban IS NOT NULL, TantargyNevNyomtatvanyban + ' (' + TantargyNev + ')', TantargyNev) AS Tantargy
            ,ErtekelesSzoveg + ISNULL(' *' + ErtekelesTema,'') AS Ertekeles
            ,ErtekelesTipusDictionary.C_NAME AS Tipus
            ,CASE WHEN DATEPART(MONTH, Datum) = 1 THEN 5
              WHEN DATEPART(MONTH, Datum) = 2 THEN 6
              WHEN DATEPART(MONTH, Datum) = 3 THEN 7
              WHEN DATEPART(MONTH, Datum) = 4 THEN 8
              WHEN DATEPART(MONTH, Datum) = 5 THEN 9
              WHEN DATEPART(MONTH, Datum) = 6 THEN 10
              WHEN DATEPART(MONTH, Datum) = 7 THEN 11
              WHEN DATEPART(MONTH, Datum) = 8 THEN 12
              WHEN DATEPART(MONTH, Datum) = 9 THEN 1
              WHEN DATEPART(MONTH, Datum) = 10 THEN 2
              WHEN DATEPART(MONTH, Datum) = 11 THEN 3
              WHEN DATEPART(MONTH, Datum) = 12 THEN 4 END AS RendezHonap
          FROM #ErtekelesekTemp ErtekelesTemp
            INNER JOIN T_DICTIONARYITEMBASE_OSSZES ErtekelesTipusDictionary ON ErtekelesTipusDictionary.ID = ErtekelesTemp.TipusId
              AND ErtekelesTipusDictionary.C_TANEVID = @tanevId
          WHERE ErtekelesSzoveg IS NOT NULL
        ) AS szoveges ON szoveges.TANULOID = s.Id
          AND szoveges.TanuloCsoportId = s.TanuloCsoportId

    UNION

    SELECT
       s.id AS tanuloId
      ,s.TanuloCsoportId
      ,szoveges.Honap
      ,szoveges.Tantargy
      ,szoveges.Ertekeles
      ,szoveges.Tipus
      ,szoveges.RendezHonap
    FROM #studentsWithTanuloCsoport AS s
      INNER JOIN (
        SELECT
           ErtekelesTemp.TanuloId AS tanuloId
          ,ErtekelesTemp.TanuloCsoportId
          ,'[' + CONVERT(nvarchar (max), DATEPART(MONTH, Datum)) + '. hónap]' AS Honap
          ,'Magatartás' AS Tantargy
          ,ErtekelesTemp.MagatartasSzoveg + ISNULL(' *' + ErtekelesTema, '') AS Ertekeles
          ,ErtekelesTipusDictionary.C_NAME AS Tipus
          ,CASE WHEN DATEPART(MONTH, Datum) = 1 THEN 5
            WHEN DATEPART(MONTH, Datum) = 2 THEN 6
            WHEN DATEPART(MONTH, Datum) = 3 THEN 7
            WHEN DATEPART(MONTH, Datum) = 4 THEN 8
            WHEN DATEPART(MONTH, Datum) = 5 THEN 9
            WHEN DATEPART(MONTH, Datum) = 6 THEN 10
            WHEN DATEPART(MONTH, Datum) = 7 THEN 11
            WHEN DATEPART(MONTH, Datum) = 8 THEN 12
            WHEN DATEPART(MONTH, Datum) = 9 THEN 1
            WHEN DATEPART(MONTH, Datum) = 10 THEN 2
            WHEN DATEPART(MONTH, Datum) = 11 THEN 3
            WHEN DATEPART(MONTH, Datum) = 12 THEN 4 END AS RendezHonap
        FROM #ErtekelesekTemp ErtekelesTemp
          INNER JOIN T_DICTIONARYITEMBASE_OSSZES ErtekelesTipusDictionary ON ErtekelesTipusDictionary.ID = ErtekelesTemp.TipusId
            AND ErtekelesTipusDictionary.C_TANEVID = @tanevId
        WHERE ErtekelesTemp.MagatartasSzoveg IS NOT NULL
      ) AS szoveges ON szoveges.TANULOID = s.Id
        AND szoveges.TanuloCsoportId = s.TanuloCsoportId

    UNION

    SELECT
       s.id AS tanuloId
      ,s.TanuloCsoportId
      ,szoveges.Honap
      ,szoveges.Tantargy
      ,szoveges.Ertekeles
      ,szoveges.Tipus
      ,szoveges.RendezHonap
    FROM #studentsWithTanuloCsoport AS s
      INNER JOIN (
        SELECT
           ErtekelesTemp.TanuloId AS tanuloId
          ,TanuloCsoportId
          ,'[' + CONVERT(nvarchar (max), DATEPART(MONTH, Datum)) + '. hónap]' AS Honap
          ,'Szorgalom' AS Tantargy
          ,ErtekelesTemp.SzorgalomSzoveg + ISNULL(' *' + ErtekelesTema, '') AS Ertekeles
          ,ErtekelesTipusDictionary.C_NAME AS Tipus
          ,CASE WHEN DATEPART(MONTH, Datum) = 1 THEN 5
            WHEN DATEPART(MONTH, Datum) = 2 THEN 6
            WHEN DATEPART(MONTH, Datum) = 3 THEN 7
            WHEN DATEPART(MONTH, Datum) = 4 THEN 8
            WHEN DATEPART(MONTH, Datum) = 5 THEN 9
            WHEN DATEPART(MONTH, Datum) = 6 THEN 10
            WHEN DATEPART(MONTH, Datum) = 7 THEN 11
            WHEN DATEPART(MONTH, Datum) = 8 THEN 12
            WHEN DATEPART(MONTH, Datum) = 9 THEN 1
            WHEN DATEPART(MONTH, Datum) = 10 THEN 2
            WHEN DATEPART(MONTH, Datum) = 11 THEN 3
            WHEN DATEPART(MONTH, Datum) = 12 THEN 4 END AS RendezHonap
        FROM #ErtekelesekTemp ErtekelesTemp
          INNER JOIN T_DICTIONARYITEMBASE_OSSZES ErtekelesTipusDictionary ON ErtekelesTipusDictionary.ID = ErtekelesTemp.TipusId
            AND ErtekelesTipusDictionary.C_TANEVID = @tanevId
        WHERE ErtekelesTemp.SzorgalomSzoveg IS NOT NULL
      ) AS szoveges ON szoveges.TANULOID = s.Id
        AND szoveges.TanuloCsoportId = s.TanuloCsoportId
  ) AS a
  ORDER BY
     RendezHonap
    ,Tantargy

  --Közösségi szolgálat
  SELECT
     TanuloId
    ,TanuloCsoportId
    ,Datum
    ,ISNULL(' - ' + Megjegyzes, '') AS Megjegyzes
    ,Oraszam
    ,TeljesitesHelye
    ,FeljegyzoNeve
    ,Tipus
  FROM fnGetDokumentumKozossegiSzolgalatOsztalyonkent(@tanevId, @osztalyId) AS KozossegiSzolgalat
  WHERE @tanuloId IS NULL
    OR TanuloId = @tanuloId
  ORDER BY
    IntervallumKezdete

  --Félévi, év végi mulasztások
  INSERT INTO #FeleviMulasztasok (
     TanuloId
    ,TanuloCsoportId
    ,Igazolt
    ,Igazolatlan
    ,ElmeletIgazolt
    ,ElmeletIgazolatlan
    ,GyakorlatIgazolt
    ,GyakorlatIgazolatlan
    ,ElmeletOsszes
    ,GyakorlatOsszes
    ,Osszes
  )
  EXEC sp_GetDokumentumMulasztasok
     @osztalyId = @osztalyId
    ,@tanevId = @tanevId
    ,@elmeletiOraPercben = 45
    ,@gyakorlatiOraPercben = 45
    ,@ertekelesTipus = 1519
    ,@iskolaErdekuSzamit = @iskolaErdekuSzamit

  INSERT INTO #EvVegiMulasztasok (
     TanuloId
    ,TanuloCsoportId
    ,Igazolt
    ,Igazolatlan
    ,ElmeletIgazolt
    ,ElmeletIgazolatlan
    ,GyakorlatIgazolt
    ,GyakorlatIgazolatlan
    ,ElmeletOsszes
    ,GyakorlatOsszes
    ,Osszes
  )
  EXEC sp_GetDokumentumMulasztasok
     @osztalyId = @osztalyId
    ,@tanevId = @tanevId
    ,@elmeletiOraPercben = 45
    ,@gyakorlatiOraPercben = 45
    ,@ertekelesTipus = 1520
    ,@iskolaErdekuSzamit = @iskolaErdekuSzamit

  SELECT
     TanuloAlapAdatok.tanuloId AS TanuloId
    ,ISNULL(FeleviMulasztasok.ElmeletIgazolt, 0) AS FeleviElmeletIgazolt
    ,ISNULL(FeleviMulasztasok.ElmeletIgazolatlan, 0) AS FeleviElmeletIgazolatlan
    ,ISNULL(FeleviMulasztasok.GyakorlatIgazolT, 0) AS FeleviGyakorlatIgazolt
    ,ISNULL(FeleviMulasztasok.GyakorlatIgazolatlan, 0) AS FeleviGyakorlatIgazolatlan
    ,ISNULL(FeleviMulasztasok.ElmeletIgazolt + FeleviMulasztasok.ElmeletIgazolatlan, 0) AS FeleviElmelet
    ,ISNULL(FeleviMulasztasok.GyakorlatIgazolt + FeleviMulasztasok.GyakorlatIgazolatlan, 0) AS FeleviGyakorlat
    ,ISNULL(EvVegiMulasztasok.ElmeletIgazolt, 0) AS EvVegiElmeletIgazolt
    ,ISNULL(EvVegiMulasztasok.ElmeletIgazolatlan, 0) AS EvVegiElmeletIgazolatlan
    ,ISNULL(EvVegiMulasztasok.GyakorlatIgazolt, 0) AS EvVegiGyakorlatIgazolt
    ,ISNULL(EvVegiMulasztasok.GyakorlatIgazolatlan, 0) AS EvVegiGyakorlatIgazolatlan
    ,ISNULL(EvVegiMulasztasok.ElmeletIgazolt + EvVegiMulasztasok.ElmeletIgazolatlan, 0) AS EvVegiElmelet
    ,ISNULL(EvVegiMulasztasok.GyakorlatIgazolt + EvVegiMulasztasok.GyakorlatIgazolatlan, 0) AS EvVegiGyakorlat
    ,ISNULL(FeleviMulasztasok.Osszes, 0) AS FeleviOsszes
    ,ISNULL(FeleviMulasztasok.Igazolt, 0) AS FeleviIgazolt
    ,ISNULL(FeleviMulasztasok.Igazolatlan, 0) AS FeleviIgazolatlan
    ,ISNULL(EvVegiMulasztasok.Osszes, 0) AS EvVegiOsszes
    ,ISNULL(EvVegiMulasztasok.Igazolt, 0) AS EvVegiIgazolt
    ,ISNULL(EvVegiMulasztasok.Igazolatlan, 0) AS EvVegiIgazolatlan
    ,oktAzon AS oktAzon
    ,tanuloNeve AS tanuloNeve
  FROM #TanuloAlapAdatok TanuloAlapAdatok
    LEFT JOIN #EvVegiMulasztasok EvVegiMulasztasok ON EvVegiMulasztasok.TanuloId = TanuloAlapAdatok.TanuloId
      AND EvVegiMulasztasok.TanuloCsoportId = TanuloAlapAdatok.TanuloCsoportId
    LEFT JOIN #FeleviMulasztasok FeleviMulasztasok ON FeleviMulasztasok.TanuloId = TanuloAlapAdatok.TanuloId
      AND FeleviMulasztasok.TanuloCsoportId = TanuloAlapAdatok.TanuloCsoportId
  ORDER BY
    sorszam

  --értékelésekhez tartozó feljegyzések 1. félév
  SELECT DISTINCT
     TanuloId
    ,TanuloCsoportId
    ,STUFF(
      (
        SELECT DISTINCT
          ', ' + JelolesAndErtekelesTema
        FROM #ErtekelesekTemp AS ErtekelesTemavalOsszefuz
        WHERE LEN(JelolesAndErtekelesTema) > 0
          AND Datum <= @FelevVege
          AND ErtekelesTemavalOsszefuz.TanuloId = ErtekelesTemaval.TanuloId
          AND ErtekelesTemavalOsszefuz.TanuloCsoportId = ErtekelesTemaval.TanuloCsoportId
          AND ErtekelesTemavalOsszefuz.ErtekelesSzoveg IS NULL
          AND ErtekelesTemavalOsszefuz.MagatartasSzoveg IS NULL
          AND ErtekelesTemavalOsszefuz.SzorgalomSzoveg IS NULL
        FOR XML PATH(''), TYPE
      ) .value
      ('.', 'NVARCHAR(MAX)'), 1, 2, ''
    ) AS JelolesTemaval
  FROM #ErtekelesekTemp AS ErtekelesTemaval
  WHERE LEN(JelolesAndErtekelesTema) > 0
    AND Datum <= @FelevVege
    AND ErtekelesTemaval.ErtekelesSzoveg IS NULL
    AND ErtekelesTemaval.MagatartasSzoveg IS NULL
    AND ErtekelesTemaval.SzorgalomSzoveg IS NULL

  --értékelésekhez tartozó feljegyzések 2. félév
  SELECT DISTINCT
     TanuloId
    ,TanuloCsoportId
    ,STUFF(
      (
        SELECT DISTINCT
          ', ' + JelolesAndErtekelesTema
        FROM #ErtekelesekTemp AS ErtekelesTemavalOsszefuz
        WHERE LEN(JelolesAndErtekelesTema) > 0
          AND Datum > @FelevVege
          AND ErtekelesTemavalOsszefuz.TanuloId = ErtekelesTemaval.TanuloId
          AND ErtekelesTemavalOsszefuz.TanuloCsoportId = ErtekelesTemaval.TanuloCsoportId
          AND ErtekelesTemavalOsszefuz.ErtekelesSzoveg IS NULL
          AND ErtekelesTemavalOsszefuz.MagatartasSzoveg IS NULL
          AND ErtekelesTemavalOsszefuz.SzorgalomSzoveg IS NULL
        FOR XML PATH(''), TYPE
      ) .value
      ('.', 'NVARCHAR(MAX)'), 1, 2, ''
    ) AS JelolesTemaval
  FROM #ErtekelesekTemp AS ErtekelesTemaval
  WHERE LEN(JelolesAndErtekelesTema) > 0
    AND Datum > @FelevVege
    AND ErtekelesTemaval.ErtekelesSzoveg IS NULL
    AND ErtekelesTemaval.MagatartasSzoveg IS NULL
    AND ErtekelesTemaval.SzorgalomSzoveg IS NULL

    --értékelésekhez tartozó feljegyzések
  SELECT DISTINCT
     TanuloId
    ,TanuloCsoportId
    ,STUFF(
      (
        SELECT DISTINCT
          ', ' + JelolesAndErtekelesTema
        FROM #ErtekelesekTemp AS ErtekelesTemavalOsszefuz
        WHERE LEN(JelolesAndErtekelesTema) > 0
          AND ErtekelesTemavalOsszefuz.TanuloId = ErtekelesTemaval.TanuloId
          AND ErtekelesTemavalOsszefuz.TanuloCsoportId = ErtekelesTemaval.TanuloCsoportId
          AND ErtekelesTemavalOsszefuz.ErtekelesSzoveg IS NULL
          AND ErtekelesTemavalOsszefuz.MagatartasSzoveg IS NULL
          AND ErtekelesTemavalOsszefuz.SzorgalomSzoveg IS NULL
        FOR XML PATH(''), TYPE
      ) .value
      ('.', 'NVARCHAR(MAX)'), 1, 2, ''
    ) AS JelolesTemaval
  FROM #ErtekelesekTemp AS ErtekelesTemaval
  WHERE LEN(JelolesAndErtekelesTema) > 0
    AND ErtekelesTemaval.ErtekelesSzoveg IS NULL
    AND ErtekelesTemaval.MagatartasSzoveg IS NULL
    AND ErtekelesTemaval.SzorgalomSzoveg IS NULL

  --összefüggő szakmai gyakorlat
  SELECT
     TanuloId
    ,TanuloCsoportId
    ,isTeljesitett
    ,Ertekeles
    ,Megjegyzes
    ,Datum
  FROM fnGetDokumentumOsszefuggoSzakmaiGyakorlat(@tanevId, @osztalyId)
  WHERE @tanuloId IS NULL
    OR TanuloId = @tanuloId

  --Tanuló tanult tantárgyai
  SELECT DISTINCT
     TANULO.ID AS TanuloId
    ,TANULO.TanuloCsoportId AS TanuloCsoportId
    ,STUFF(
      (
        SELECT
          ', ' + IIF(LEN(TANTARGYAK.C_NEV) > 128, SUBSTRING(TANTARGYAK.C_NEV, 1, 120) + '...', TANTARGYAK.C_NEV) AS TantargyNev
        FROM #Tantargyak AS TANTARGYAK
          LEFT JOIN T_TANULOCSOPORT_OSSZES AS tcs ON tcs.C_TANULOID = TANTARGYAK.c_tanuloid
            AND tcs.C_OSZTALYCSOPORTID = @osztalyId
        WHERE TANTARGYAK.c_tanuloid = TANULO.Id
          AND tcs.ID = TANULO.TanuloCsoportId
          AND TANTARGYAK.C_NEV NOT IN ('Magatartás', 'Szorgalom')
        ORDER BY
          TANTARGYAK.C_NEV
        FOR XML PATH(''), TYPE
      ).value
      ('.', 'NVARCHAR(MAX)'), 1, 2, ''
    ) AS TantargyNev
  FROM #studentsWithTanuloCsoport AS TANULO

  -- Osztály és csoportok a naplóban, az iktatáskor szükséges többszörös Csoport név kulcsszóhoz
  SELECT
    *
  FROM #osztalycsoportok
  WHERE OsztalyCsoportId != @osztalyId

  -- gyors feljegyzés statisztikák
  -- Házifeladat hiány
  SELECT
     s.ID AS TanuloId
    ,s.TanuloCsoportId
    ,feljegyzes.Tantargy
    ,feljegyzes.Szeptember
    ,feljegyzes.Oktober
    ,feljegyzes.November
    ,feljegyzes.December
    ,feljegyzes.Januar
    ,feljegyzes.Februar
    ,feljegyzes.Marcius
    ,feljegyzes.Aprilis
    ,feljegyzes.Majus
    ,feljegyzes.Junius
    ,feljegyzes.Felev
    ,feljegyzes.Ossz
  FROM #studentsWithTanuloCsoport AS s
    CROSS APPLY fnGetDokumentumTanulokGyorsFeljegyzeseiHavibontasban(@tanevId, @osztalyId, 6325, 0, @FelevVege, s.BelepesDatum, s.KilepesDatum) AS feljegyzes
  WHERE feljegyzes.TanuloId = s.ID

  -- Felszerelés hiány
  SELECT
     s.ID AS TanuloId
    ,s.TanuloCsoportId
    ,feljegyzes.Tantargy
    ,feljegyzes.Szeptember
    ,feljegyzes.Oktober
    ,feljegyzes.November
    ,feljegyzes.December
    ,feljegyzes.Januar
    ,feljegyzes.Februar
    ,feljegyzes.Marcius
    ,feljegyzes.Aprilis
    ,feljegyzes.Majus
    ,feljegyzes.Junius
    ,feljegyzes.Felev
    ,feljegyzes.Ossz
  FROM #studentsWithTanuloCsoport AS s
    CROSS APPLY fnGetDokumentumTanulokGyorsFeljegyzeseiHavibontasban(@tanevId, @osztalyId, 6324, 0, @FelevVege, s.BelepesDatum, s.KilepesDatum) AS feljegyzes
  WHERE feljegyzes.TanuloId = s.ID

  -- Felmentés
  SELECT
     s.ID AS TanuloId
    ,s.TanuloCsoportId
    ,feljegyzes.Tantargy
    ,feljegyzes.Szeptember
    ,feljegyzes.Oktober
    ,feljegyzes.November
    ,feljegyzes.December
    ,feljegyzes.Januar
    ,feljegyzes.Februar
    ,feljegyzes.Marcius
    ,feljegyzes.Aprilis
    ,feljegyzes.Majus
    ,feljegyzes.Junius
    ,feljegyzes.Felev
    ,feljegyzes.Ossz
  FROM #studentsWithTanuloCsoport AS s
    CROSS APPLY fnGetDokumentumTanulokGyorsFeljegyzeseiHavibontasban(@tanevId, @osztalyId, 1542, 0, @FelevVege, s.BelepesDatum, s.KilepesDatum) AS feljegyzes
  WHERE feljegyzes.TanuloId = s.ID

  --Dicséret
  SELECT
     s.ID AS TanuloId
    ,s.TanuloCsoportId
    ,feljegyzes.Tantargy
    ,feljegyzes.Szeptember
    ,feljegyzes.Oktober
    ,feljegyzes.November
    ,feljegyzes.December
    ,feljegyzes.Januar
    ,feljegyzes.Februar
    ,feljegyzes.Marcius
    ,feljegyzes.Aprilis
    ,feljegyzes.Majus
    ,feljegyzes.Junius
    ,feljegyzes.Felev
    ,feljegyzes.Ossz
  FROM #studentsWithTanuloCsoport AS s
    CROSS APPLY fnGetDokumentumTanulokGyorsFeljegyzeseiHavibontasban(@tanevId, @osztalyId, 1536, 1, @FelevVege, s.BelepesDatum, s.KilepesDatum) AS feljegyzes
  WHERE feljegyzes.TanuloId = s.ID

END
GO
