DROP PROCEDURE IF EXISTS [dbo].[uspNyomtatvany_Excel_IdoszakiOsztalyStatisztika]
GO

CREATE PROCEDURE [dbo].[uspNyomtatvany_Excel_IdoszakiOsztalyStatisztika]
   @pTanevId int
  ,@pOsztalyId int
  ,@pIntezmenyId int
  ,@pErtekelestipusaId int
  ,@pLezaroNaptipusId int
  ,@pMulasztasTipusIdKeses int = 1499
  ,@pMulasztasTipusIdHianyzas int = 1500
  ,@pTanevrendjeTanevKezdeteNaptipusId int = 1394 --Tanévrendje első nap típus
  ,@pTanoraiDicseretTipusId int = 1536 -- Tanórai dicséret
  ,@pFelszereleshianyTipusId int = 6324 -- Felszereléshiány
  ,@pHaziFeladatHianyTipusId int = 6325 -- Házi feladat hiány
  ,@pAtsoroltTanuloAdatok int = 1
  ,@pOsztalyInditasaId int = 1
  ,@pElmeletgyakorlat bit = 0
  ,@pOsztalyzatTipusTypeID int = 44
  ,@pMagatartasErtekelesTipusTypeID int = 50
  ,@pSzorgalomErtekelesTipusTypeID int = 51
AS
BEGIN
  SET NOCOUNT ON;
  --Const
  DECLARE 
     @ElsoFelveVege int = 1400
    ,@IneVege int = 1403
    ,@IIIneVege int = 1404
    ,@UtolsoTanitasiNap int = 1395
    ,@VegzosUtolsoTanitasiNap int = 1402
    ,@kesespercHianyzashoz int = 45
    ,@kesespercGyakHianyzashoz int = 45
    ,@iskolaErdekuParam int = 1683
    ,@idoszakEleje date 
    ,@idoszakVege date
    --Iskolaerdeku tavollet szamit
  DECLARE
     @iskolaErdekuSzamit bit = [dbo].fnGetRendszerbeallitasEnumBool(@iskolaErdekuParam, @pIntezmenyId, @pTanevId)
    --Osztaly jellemzo
    ,@vegzosEvfolyamu bit = (SELECT IIF(C_VEGZOSEVFOLYAM = 'T', 1, 0) FROM T_OSZTALYCSOPORT_OSSZES WHERE ID = @pOsztalyId)

    --Osztalyjellemzok alapjan a lezaro naptipus csereje
  SET @pLezaroNaptipusId = (
    SELECT CASE 
      WHEN (@pOsztalyInditasaId = 0 OR @pOsztalyInditasaId = 2) AND @vegzosEvfolyamu = 1 AND @pLezaroNaptipusId = @UtolsoTanitasiNap THEN @VegzosUtolsoTanitasiNap
      WHEN (@pOsztalyInditasaId = 0 OR @pOsztalyInditasaId = 2) THEN @pLezaroNaptipusId
      WHEN @pLezaroNaptipusId = @ElsoFelveVege THEN @UtolsoTanitasiNap
      WHEN @pLezaroNaptipusId = @UtolsoTanitasiNap THEN @ElsoFelveVege
      WHEN @pLezaroNaptipusId = @IneVege THEN @IIIneVege
      WHEN @pLezaroNaptipusId = @IIIneVege THEN @IneVege 
    END
  )

  CREATE TABLE #aktualisOsztalyCsoportok (
    OSZTALYCSOPORTID int
  )

  CREATE TABLE #szurtErtekeles (
     T_TANULOERTEKELES_ID int PRIMARY KEY
    ,C_TANULOID int
    ,ERTEKELES nvarchar(max)
    ,ERTEKELES_SZOVEG_MEGJEGYZES nvarchar(max)
    ,C_ERTEKELESDATUM DATETIME
    ,C_TANTARGYID int
    ,TANTARGY_NEV nvarchar(255) COLLATE DATABASE_DEFAULT
    ,TARGYKATEGORIA_NEV nvarchar(255) COLLATE DATABASE_DEFAULT
    ,TARGYKATEGORIA_SORSZAM int
    ,T_TANTARGY_C_FOTARGYE char(1) COLLATE DATABASE_DEFAULT
    ,T_TANTARGY_C_ALTANTARGYKENTNYOMTATVANYBAN char(1) COLLATE DATABASE_DEFAULT
    ,C_OSZTALYCSOPORTID int
    ,RENDEZ0 int
    ,RENDEZ1 int
    ,RENDEZ2 nvarchar(255) COLLATE DATABASE_DEFAULT
    ,RENDEZ3 int
    ,RENDEZ4 int
    ,RENDEZ5 nvarchar(255) COLLATE DATABASE_DEFAULT
  )
  CREATE TABLE #szurtMulasztas (
     TIPUS_CHAR char(1)
    ,C_TIPUS int
    ,C_IGAZOLT char(1) COLLATE DATABASE_DEFAULT
    ,C_TANULOID int
    ,C_TANULOCSOPORTID int
    ,C_GYAKORLATI char(1) COLLATE DATABASE_DEFAULT
    ,KESESPERC int
    ,MULASZTASOK_SZAMA int
    ,HOZOTTIGAZOLTMULTASZTASOK_SZAMA int
    ,HOZOTTIGAZOLATLANTMULTASZTASOK_SZAMA int
    ,FELDOLGOZATLANOK_SZAMA int
  )  
  CREATE TABLE #Tanulok (
     TanuloId int 
    ,TanulocsoportId int PRIMARY KEY
  )
  CREATE TABLE #Tipusok (
     Tipus_Char char(1)
    ,Igazolt char(1)
    ,Tipus int
    ,Gyakorlati char(1)
  )

  SELECT TOP 1 @idoszakEleje = 
    ISNULL(tr.C_DATUM,te.C_KEZDONAP) 
  FROM T_TANEV_OSSZES te
    LEFT JOIN T_TANEVRENDJE_OSSZES tr ON tr.C_TANEVID = te.ID AND tr.TOROLT='F' AND tr.C_NAPTIPUSA = @pTanevrendjeTanevKezdeteNaptipusId
    LEFT JOIN T_OSZTALYCSOPORT_TANEVRENDJE ocstr ON ocstr.C_TANEVRENDJEID = tr.ID 
      AND (ocstr.C_OSZTALYCSOPORTID IS NULL OR ocstr.C_OSZTALYCSOPORTID = @pOsztalyId)
  WHERE te.ID = @pTanevId
  ORDER BY ocstr.C_OSZTALYCSOPORTID DESC
  
  SELECT @idoszakVege= ISNULL(
    (
    SELECT TOP 1 
      C_DATUM
    FROM T_TANEVRENDJE_OSSZES tr
      LEFT JOIN T_OSZTALYCSOPORT_TANEVRENDJE ocstr ON tr.ID = ocstr.C_TANEVRENDJEID
        AND (ocstr.C_OSZTALYCSOPORTID IS NULL OR ocstr.C_OSZTALYCSOPORTID = @pOsztalyId)
    WHERE tr.C_TANEVID = @pTanevId AND tr.C_NAPTIPUSA = @pLezaroNaptipusId AND tr.TOROLT = 'F'
    ORDER BY ocstr.C_OSZTALYCSOPORTID DESC
    )
    ,GETDATE()
  )

  DECLARE @utolsoTanitasiNapDatum date
  SELECT @utolsoTanitasiNapDatum = UtolsoTanitasiNap
  FROM fnGetOsztalyCsoportokUtolsoTanitasiNap(@pTanevId, @pOsztalyId)

  IF @pAtsoroltTanuloAdatok IN (0,1)
  BEGIN
    INSERT INTO #aktualisOsztalyCsoportok (OSZTALYCSOPORTID)
    SELECT ID
    FROM fnGetDokumentumKapcsolodoOsztalycsoportok(@pOsztalyId, @pTanevId, DEFAULT, DEFAULT)
  END
  ELSE
  BEGIN
    INSERT INTO #aktualisOsztalyCsoportok (OSZTALYCSOPORTID)
    SELECT KapcsOszt.ID
    FROM fnGetKapcsolodoOsztalycsoportokByDate(@pOsztalyId, @idoszakEleje, @utolsoTanitasiNapDatum) KapcsOszt
      WHERE (ID IN (
        SELECT ID 
        FROM T_OSZTALY_OSSZES 
        UNION 
        SELECT ID 
        FROM T_CSOPORT_OSSZES 
        WHERE C_TIPUSA IN (SELECT ID FROM fnGetTanoraiCeluCsoportTipusok(@pTanevId))
        )
      )
  END

  -- ÉRTÉKELÉS insert
  INSERT INTO #szurtErtekeles (
     T_TANULOERTEKELES_ID
    ,C_TANULOID
    ,ERTEKELES
    ,ERTEKELES_SZOVEG_MEGJEGYZES
    ,C_ERTEKELESDATUM
    ,C_TANTARGYID
    ,TANTARGY_NEV
    ,TARGYKATEGORIA_NEV
    ,TARGYKATEGORIA_SORSZAM
    ,T_TANTARGY_C_FOTARGYE
    ,T_TANTARGY_C_ALTANTARGYKENTNYOMTATVANYBAN
    ,C_OSZTALYCSOPORTID
    ,RENDEZ0
    ,RENDEZ1
    ,RENDEZ2
    ,RENDEZ3
    ,RENDEZ4
    ,RENDEZ5
  )
  SELECT
     ROW_NUMBER() OVER (ORDER BY TanuloId)
    ,TanuloId
    ,COALESCE(
      IIF(ErtekelesOsztalyzatValue IS NOT NULL,
        CONCAT(
          IIF(IsTanulmanyiatlagbanemszamit = 'T','"',''), CAST(ErtekelesOsztalyzatValue AS nvarchar(max)), IIF(IsTanulmanyiatlagbanemszamit = 'T','"','')
        ),
        NULL
      ),
      IIF(ErtekelesSzoveg IS NOT NULL, IIF(ErtekelesSzovegRovidNev IS NOT NULL, '"' + ErtekelesSzovegRovidNev + '"', 'sz'), NULL),
      '%')
    ,ISNULL(ErtekelesSzoveg, ISNULL(ErtekelesSzazalek + ' ', '') + ISNULL(ErtekelesTema, ''))
    ,Datum
    ,TantargyId
    ,COALESCE(TantargyNevNyomtatvanyban, TantargyNev) AS TANTARGY_NEV
    ,dib.C_NAME
    ,dib.C_VALUE
    ,FotargyE
    ,Altantargy
    ,OsztalyCsoportId
    ,RENDEZ0
    ,RENDEZ1
    ,RENDEZ2
    ,RENDEZ3
    ,RENDEZ4
    ,RENDEZ5
  FROM fnGetDokumentumErtekelesekOsztalyonkent (@pTanevId, @pOsztalyId, @pErtekelestipusaId, DEFAULT, DEFAULT, @pAtsoroltTanuloAdatok, DEFAULT, @pOsztalyzatTipusTypeID, @pMagatartasErtekelesTipusTypeID, @pSzorgalomErtekelesTipusTypeID) AS ERTEKELESEK
    LEFT JOIN T_DICTIONARYITEMBASE_OSSZES dib ON dib.ID = ERTEKELESEK.TargyKategoriaId AND dib.C_TANEVID = @pTanevId
  WHERE TantargyId IS NOT NULL AND (FotargyE = 'T' OR Altantargy = 'T')

  --MULASZTÁS insert
  INSERT INTO #Tipusok (Tipus_Char,Igazolt,Tipus,Gyakorlati)VALUES
    ('H','T',1500,'T'),('H','F',1500,'T'),('K','T',1499,'T'),('K','F',1499,'T'),
    ('H','T',1500,'F'),('H','F',1500,'F'),('K','T',1499,'F'),('K','F',1499,'F')
    ,('H','-',1500,'T'),('H','-',1500,'F'),('K','-',1499,'T'),('K','-',1499,'F')
  
  INSERT INTO #Tanulok
  SELECT DISTINCT
     tcs.C_TANULOID
    ,x.ID TanuloCsoportId
  FROM T_TANULOCSOPORT_OSSZES tcs
  CROSS APPLY (SELECT TOP 1 belepes.ID 
               FROM T_TANULOCSOPORT_OSSZES belepes 
               WHERE 
                belepes.C_TANULOID = tcs.C_TANULOID 
                AND belepes.C_OSZTALYCSOPORTID = tcs.C_OSZTALYCSOPORTID 
                AND belepes.TOROLT = 'F' 
                AND belepes.C_TANEVID = tcs.C_TANEVID 
               ORDER BY C_BELEPESDATUM desc) x 
  WHERE 
    tcs.C_OSZTALYCSOPORTID = @pOsztalyId 
    AND tcs.C_BELEPESDATUM <= @idoszakVege
    AND (tcs.C_KILEPESDATUM IS NULL OR tcs.C_KILEPESDATUM > @idoszakVege)
    AND tcs.TOROLT = 'F' 
    AND tcs.C_TANEVID = @pTanevId
  
  INSERT INTO #szurtMulasztas (TIPUS_CHAR, C_TIPUS, C_IGAZOLT, C_TANULOID, C_TANULOCSOPORTID, C_GYAKORLATI,KESESPERC,MULASZTASOK_SZAMA, HOZOTTIGAZOLTMULTASZTASOK_SZAMA, HOZOTTIGAZOLATLANTMULTASZTASOK_SZAMA, FELDOLGOZATLANOK_SZAMA)
  SELECT Tipus_Char, Tipus,Igazolt,TanuloId, TanulocsoportId,Gyakorlati,0,0,0,0,0
  FROM #Tanulok 
    CROSS APPLY #Tipusok

  UPDATE szm SET
     KESESPERC = m.KesesPercben
    ,MULASZTASOK_SZAMA = m.MULASZTASOK_SZAMA
    ,HOZOTTIGAZOLTMULTASZTASOK_SZAMA = ISNULL(IIF(szm.C_IGAZOLT = 'T',hianyzas.HOZOTTIGAZOLTHIANYZAS,0),0)
    ,HOZOTTIGAZOLATLANTMULTASZTASOK_SZAMA = ISNULL(IIF(szm.C_IGAZOLT = 'F',hianyzas.HOZOTTIGAZOLATLANHIANYZAS,0),0)
  FROM #szurtMulasztas szm
    LEFT JOIN (
      SELECT 
         m.Tipusa
        ,m.Igazolt
        ,m.TanuloId
        ,m.TanuloCsoportId
        ,m.Gyakorlati
        ,SUM(ISNULL(KesesPercben,0)) as KesesPercben
        ,ISNULL(COUNT(m.Tipusa),0) AS MULASZTASOK_SZAMA
      FROM fnGetDokumentumMulasztasokOsztalyonkentReszletes (@pTanevId, @pOsztalyId, @iskolaErdekuSzamit, 0, IIF(@pAtsoroltTanuloAdatok > 0, 1, 0), @idoszakEleje, @idoszakVege, DEFAULT) m
      WHERE m.Igazolt IS NOT NULL 
        AND m.Tipusa BETWEEN @pMulasztasTipusIdKeses AND @pMulasztasTipusIdHianyzas
      GROUP BY m.Tipusa, m.Igazolt, m.TanuloId, m.TanuloCsoportId, m.Gyakorlati
    ) m ON m.Gyakorlati = szm.C_GYAKORLATI 
       AND m.Tipusa = szm.C_TIPUS 
       AND m.Igazolt = szm.C_IGAZOLT 
       AND m.TanuloId = szm.C_TANULOID
       AND m.TanuloCsoportId = szm.C_TANULOCSOPORTID
    LEFT JOIN (
      SELECT
         tcs.C_TANULOID
        ,SUM(tta.C_HOZOTTIGAZOLTHIANYZAS) as  HOZOTTIGAZOLTHIANYZAS
        ,SUM(tta.C_HOZOTTIGAZOLATLANHIANYZAS) as HOZOTTIGAZOLATLANHIANYZAS
      FROM T_TANULOCSOPORT_OSSZES tcs
        INNER JOIN T_TANULOTANUGYIADATOK_OSSZES tta ON tta.C_TANULOCSOPORTID = tcs.ID 
          AND tta.C_TANEVID = @pTanevId AND tta.TOROLT = 'F'
      WHERE tcs.C_OSZTALYCSOPORTID = @pOsztalyId 
        AND tcs.C_TANEVID = @pTanevId 
        AND tcs.C_BELEPESDATUM < @idoszakVege 
        AND tcs.TOROLT = 'F'
      GROUP BY tcs.C_TANULOID
    ) hianyzas on hianyzas.C_TANULOID = szm.C_TANULOID 
     AND szm.TIPUS_CHAR = 'H' 
     AND szm.C_GYAKORLATI = 'F'

  UPDATE szm SET
    FELDOLGOZATLANOK_SZAMA = IIF(m.Tipusa = 1500, ISNULL(m.MULASZTASOK_SZAMA, 0), ISNULL(m.KesesPercben, 0))
  FROM #szurtMulasztas szm
    LEFT JOIN (
      SELECT 
         m.Tipusa
        ,m.Igazolt
        ,m.TanuloId
        ,m.TanuloCsoportId
        ,m.Gyakorlati
        ,SUM(ISNULL(KesesPercben,0)) as KesesPercben
        ,ISNULL(COUNT(m.Tipusa),0) AS MULASZTASOK_SZAMA
      FROM fnGetDokumentumMulasztasokOsztalyonkentReszletes (@pTanevId, @pOsztalyId, @iskolaErdekuSzamit, 0, IIF(@pAtsoroltTanuloAdatok > 0, 1, 0), @idoszakEleje, @idoszakVege, DEFAULT) m
      WHERE m.Igazolt IS NULL 
        AND m.Tipusa BETWEEN @pMulasztasTipusIdKeses AND @pMulasztasTipusIdHianyzas
      GROUP BY m.Tipusa, m.Igazolt, m.TanuloId, m.TanuloCsoportId, m.Gyakorlati
    ) m ON m.Gyakorlati = szm.C_GYAKORLATI 
       AND m.Tipusa = szm.C_TIPUS 
       AND (m.Igazolt IS NULL AND szm.C_IGAZOLT='-')
       AND m.TanuloId = szm.C_TANULOID
       AND m.TanuloCsoportId = szm.C_TANULOCSOPORTID

  --==================== SELECTEK ==========================
  -- OSZTÁLY
  SELECT 
     o.ID
    ,ocs.C_NEV
    ,ocs.C_VEGZOSEVFOLYAM
    ,fh.C_NYOMTATASINEV
    ,o.C_OSZTALYNAPLOMEGNYITASA
    ,o.C_OSZTALYNAPLOZARASA
    ,o.C_OSZTALYFONOKID
  FROM T_OSZTALY_OSSZES o
    INNER JOIN T_OSZTALYCSOPORT_OSSZES ocs ON ocs.ID = o.ID AND ocs.TOROLT='F'
    LEFT JOIN T_FELHASZNALO_OSSZES fh ON o.C_OSZTALYFONOKID = fh.ID AND fh.TOROLT='F'
    INNER JOIN T_FELADATELLATASIHELY_OSSZES felh ON felh.ID = ocs.C_FELADATELLATASIHELYID AND felh.TOROLT='F'
  WHERE ocs.ID = @pOsztalyId
  --TANULÓK LISTA
  SELECT 
     fh.ID as C_TANULOID
    ,fh.C_NYOMTATASINEV as TANULONEV
    ,fh.C_ANYJANEVE as ANYJANEVE
    ,fh.C_OKTATASIAZONOSITO as OKTATASIAZONOSITO
  FROM T_FELHASZNALO_OSSZES fh
    INNER JOIN #Tanulok AS ot ON ot.TANULOID = fh.ID
  WHERE fh.TOROLT='F'
  ORDER BY fh.C_NYOMTATASINEV;
  -- TANTÁRGYAK (TANTÁRGYFELOSZTÁS, ÉRTÉKELÉS)
  SELECT DISTINCT 
     C_TANTARGYID
    ,TANTARGY_NEV
    ,C_FOTARGYE
    ,C_ALTANTARGYKENTNYOMTATVANYBAN
    ,RENDEZ0
    ,RENDEZ1
    ,RENDEZ2
    ,RENDEZ3
    ,RENDEZ4
    ,RENDEZ5
  FROM (
    SELECT DISTINCT 
       f.C_TANTARGYID
      ,COALESCE(tgy.C_NEVNYOMTATVANYBAN, tgy.C_NEV) as TANTARGY_NEV
      ,tgy.C_FOTARGYE
      ,tgy.C_ALTANTARGYKENTNYOMTATVANYBAN
      ,tgy.C_SORSZAM as RENDEZ0
      ,CASE WHEN tgy.C_FOTARGYID IS NULL THEN ISNULL(TargyKategoriaDictionary.C_ORDER, 10000) ELSE ISNULL(FotargyKategoriaDictionary.C_ORDER, 10000) END as RENDEZ1
      ,COALESCE(FotargyTable.C_NEVNYOMTATVANYBAN, FotargyTable.C_NEV, tgy.C_NEV) as RENDEZ2
      ,ISNULL(tgy.C_FOTARGYID, tgy.ID) as RENDEZ3
      ,tgy.C_FOTARGYID as RENDEZ4
      ,ISNULL(tgy.C_NEVNYOMTATVANYBAN, tgy.C_NEV) as RENDEZ5
    FROM T_FOGLALKOZAS_OSSZES f
      INNER JOIN #aktualisOsztalyCsoportok ocs ON ocs.OSZTALYCSOPORTID = f.C_OSZTALYCSOPORTID
      INNER JOIN T_TANTARGY_OSSZES tgy ON tgy.ID = f.C_TANTARGYID AND tgy.C_TANEVID = @pTanevId
      LEFT JOIN T_DICTIONARYITEMBASE_OSSZES TargyKategoriaDictionary ON TargyKategoriaDictionary.Id = tgy.C_TARGYKATEGORIA
        AND TargyKategoriaDictionary.TOROLT = 'F'
        AND TargyKategoriaDictionary.C_TANEVID = @pTanevId
      LEFT JOIN T_TANTARGY_OSSZES FotargyTable ON tgy.C_FOTARGYID = FotargyTable.ID
      LEFT JOIN T_DICTIONARYITEMBASE_OSSZES FotargyKategoriaDictionary ON FotargyKategoriaDictionary.ID = FotargyTable.C_TARGYKATEGORIA
        AND FotargyKategoriaDictionary.TOROLT = 'F'
        AND FotargyKategoriaDictionary.C_TANEVID = FotargyTable.C_TANEVID
    WHERE f.TOROLT = 'F' AND (tgy.C_FOTARGYE = 'T' OR tgy.C_ALTANTARGYKENTNYOMTATVANYBAN = 'T')
    UNION
    SELECT DISTINCT 
       C_TANTARGYID
      ,TANTARGY_NEV
      ,T_TANTARGY_C_FOTARGYE AS C_FOTARGYE
      ,T_TANTARGY_C_ALTANTARGYKENTNYOMTATVANYBAN AS C_ALTANTARGYKENTNYOMTATVANYBAN
      ,RENDEZ0
      ,RENDEZ1
      ,RENDEZ2
      ,RENDEZ3
      ,RENDEZ4
      ,RENDEZ5
    FROM #szurtErtekeles
    WHERE (@pAtsoroltTanuloAdatok = 2 OR C_OSZTALYCSOPORTID IN (SELECT OSZTALYCSOPORTID FROM #aktualisOsztalyCsoportok))
  ) AS TANTARGYAK
  ORDER BY RENDEZ0,RENDEZ1,RENDEZ2,RENDEZ3,RENDEZ4,RENDEZ5,TANTARGY_NEV;
  -- ÉRTÉKELÉS lista
  SELECT *
  FROM #szurtErtekeles; 
  --MAGATARTÁS-SZORGALOM
  SELECT 
     ROW_NUMBER() OVER (ORDER BY TanuloId) AS ID
    ,TanuloId AS C_TANULOID
    ,COALESCE(CAST(MagatartasOsztalyzatValue AS nvarchar(6)), CAST(MagatartasErtekOsztalyzatkent AS nvarchar(6)), IIF(MagatartasSzovegRovidNev IS NOT NULL, '"' + MagatartasSzovegRovidNev + '"', 'sz')) AS MagatartasOsztalyzat
    ,MagatartasErtek
    ,COALESCE(CAST(SzorgalomOsztalyzatValue AS nvarchar(6)), CAST(SzorgalomErtekOsztalyzatkent AS nvarchar(6)), IIF(SzorgalomSzovegRovidNev IS NOT NULL, '"' + SzorgalomSzovegRovidNev + '"', 'sz')) AS SzorgalomOsztalyzat
    ,SzorgalomErtek
    ,ErtekelesSzoveg AS C_ERTEKELESSZOVEG
    ,Datum AS C_ERTEKELESDATUM
    ,'F' AS TOROLT -- y tho?
  FROM fnGetDokumentumErtekelesekOsztalyonkent (@pTanevId, @pOsztalyId, @pErtekelestipusaId, DEFAULT, DEFAULT, @pAtsoroltTanuloAdatok, DEFAULT, @pOsztalyzatTipusTypeID, @pMagatartasErtekelesTipusTypeID, @pSzorgalomErtekelesTipusTypeID) AS ERTEKELESEK
  WHERE TantargyId IS NULL AND (@pAtsoroltTanuloAdatok > 0 OR OsztalyCsoportId IN (SELECT OSZTALYCSOPORTID FROM #aktualisOsztalyCsoportok));
  --MULASZTÁS stat
  IF @pElmeletgyakorlat=0
  BEGIN
    WITH cte AS (
       SELECT
          TIPUS_CHAR
        ,C_TIPUS
        ,C_IGAZOLT
        ,C_TANULOID
        ,SUM(KESESPERC) AS KESESPERC
        ,SUM(KESESPERC)/@kesespercHianyzashoz AS KESESORA
        ,SUM(ISNULL(MULASZTASOK_SZAMA,0)) AS MULASZTASOK_SZAMA
        ,SUM(HOZOTTIGAZOLTMULTASZTASOK_SZAMA) AS HOZOTTIGAZOLTMULTASZTASOK_SZAMA
        ,SUM(HOZOTTIGAZOLATLANTMULTASZTASOK_SZAMA) AS HOZOTTIGAZOLATLANTMULTASZTASOK_SZAMA
        ,SUM(FELDOLGOZATLANOK_SZAMA) AS FELDOLGOZATLANOK_SZAMA
      FROM #szurtMulasztas
      GROUP BY TIPUS_CHAR, C_TIPUS, C_IGAZOLT, C_TANULOID
    )

    SELECT
       szm.TIPUS_CHAR
      ,szm.C_TIPUS
      ,szm.C_IGAZOLT
      ,szm.C_TANULOID
      ,szm.KESESPERC
      ,szm.KESESORA
      ,ISNULL(szm.MULASZTASOK_SZAMA,0) + ISNULL((SELECT KESESORA FROM cte WHERE cte.C_TANULOID = szm.C_TANULOID AND cte.C_TIPUS = 1499 AND szm.C_TIPUS = 1500 AND cte.C_IGAZOLT = szm.C_IGAZOLT), 0) +
       IIF(szm.TIPUS_CHAR = 'K',0,IIF(szm.C_IGAZOLT = 'T',szm.HOZOTTIGAZOLTMULTASZTASOK_SZAMA,szm.HOZOTTIGAZOLATLANTMULTASZTASOK_SZAMA))
         AS OSSZES_MULASZTASOK_SZAMA
      ,ISNULL(szm.MULASZTASOK_SZAMA, 0) AS MULASZTASOK_SZAMA
      ,IIF(szm.TIPUS_CHAR = 'K',0,IIF(szm.C_IGAZOLT = 'T',szm.HOZOTTIGAZOLTMULTASZTASOK_SZAMA,szm.HOZOTTIGAZOLATLANTMULTASZTASOK_SZAMA))
         AS HOZOTTMULASZTASOK_SZAMA
      ,szm.FELDOLGOZATLANOK_SZAMA
    FROM cte AS szm
    ORDER BY szm.C_TANULOID, szm.C_TIPUS, szm.C_IGAZOLT DESC

    SELECT 
        C_IGAZOLT
      ,C_TANULOID
      ,SUM(MULASZTASOK_SZAMA) AS MULASZTASOK_SZAMA
    FROM (
      SELECT 
          TIPUS_CHAR
        ,C_TIPUS
        ,C_IGAZOLT
        ,C_TANULOID
        ,SUM(KESESPERC)/@kesespercHianyzashoz AS MULASZTASOK_SZAMA
      FROM #szurtMulasztas
      WHERE TIPUS_CHAR = 'K'
      GROUP BY TIPUS_CHAR, C_TIPUS, C_IGAZOLT, C_TANULOID
      UNION ALL
      SELECT 
          TIPUS_CHAR
        ,C_TIPUS
        ,C_IGAZOLT
        ,C_TANULOID
        ,SUM(MULASZTASOK_SZAMA) AS MULASZTASOK_SZAMA
      FROM #szurtMulasztas
      WHERE TIPUS_CHAR = 'H'
      GROUP BY TIPUS_CHAR, C_TIPUS, C_IGAZOLT, C_TANULOID
    ) AS KM
    GROUP BY C_IGAZOLT, C_TANULOID
    ORDER BY C_TANULOID, C_IGAZOLT DESC
  END
  ELSE
  BEGIN
    WITH cte AS (
    SELECT
       szm.TIPUS_CHAR
      ,szm.C_TIPUS
      ,szm.C_IGAZOLT
      ,szm.C_TANULOID
      ,SUM(szm.KESESPERC) AS KESESPERC
      ,SUM(szm.KESESORA) AS KESESORA
      ,SUM(ISNULL(szm.MULASZTASOK_SZAMA,0)) AS MULASZTASOK_SZAMA
      ,SUM(IIF(szm.TIPUS_CHAR = 'K'
        ,0
        ,IIF(szm.C_IGAZOLT = 'T'
            ,szm.HOZOTTIGAZOLTMULTASZTASOK_SZAMA
            ,szm.HOZOTTIGAZOLATLANTMULTASZTASOK_SZAMA
           )
       )) AS HOZOTTMULASZTASOK_SZAMA
      ,szm.C_GYAKORLATI
      ,SUM(szm.FELDOLGOZATLANOK_SZAMA) AS FELDOLGOZATLANOK_SZAMA
    FROM (
      SELECT
         TIPUS_CHAR
        ,C_TIPUS
        ,C_IGAZOLT
        ,C_TANULOID
        ,KESESPERC
        ,KESESPERC/(CASE WHEN C_GYAKORLATI = 'T' THEN @kesespercGyakHianyzashoz ELSE @kesespercHianyzashoz END) AS KESESORA
        ,MULASZTASOK_SZAMA
        ,HOZOTTIGAZOLTMULTASZTASOK_SZAMA
        ,HOZOTTIGAZOLATLANTMULTASZTASOK_SZAMA
        ,C_GYAKORLATI
        ,FELDOLGOZATLANOK_SZAMA
      FROM #szurtMulasztas  ) AS szm
    GROUP BY TIPUS_CHAR, C_TIPUS, C_IGAZOLT, C_GYAKORLATI, C_TANULOID
    )

    SELECT 
       szm.TIPUS_CHAR
      ,szm.C_TIPUS
      ,szm.C_IGAZOLT
      ,szm.C_TANULOID
      ,szm.KESESPERC
      ,szm.KESESORA
      ,MULASZTASOK_SZAMA + ISNULL((SELECT KESESORA FROM cte WHERE cte.C_TANULOID = szm.C_TANULOID AND cte.C_TIPUS = 1499 AND szm.C_TIPUS = 1500 AND cte.C_IGAZOLT = szm.C_IGAZOLT AND cte.C_GYAKORLATI = szm.C_GYAKORLATI), 0)
        + IIF(szm.TIPUS_CHAR = 'K' OR szm.C_GYAKORLATI = 'T'
          ,0
          ,szm.HOZOTTMULASZTASOK_SZAMA
        ) AS OSSZES_MULASZTASOK_SZAMA
      ,MULASZTASOK_SZAMA
      ,HOZOTTMULASZTASOK_SZAMA
      ,C_GYAKORLATI
      ,FELDOLGOZATLANOK_SZAMA
    FROM cte AS szm
    ORDER BY szm.C_TANULOID, szm.C_TIPUS DESC, szm.C_IGAZOLT DESC

    SELECT C_IGAZOLT, C_TANULOID, SUM(MULASZTASOK_SZAMA) AS MULASZTASOK_SZAMA, C_GYAKORLATI
    FROM (
      SELECT TIPUS_CHAR, C_TIPUS, C_IGAZOLT, C_TANULOID, KESESPERC/(CASE WHEN C_GYAKORLATI = 'T' THEN @kesespercGyakHianyzashoz ELSE @kesespercHianyzashoz END) AS MULASZTASOK_SZAMA, C_GYAKORLATI
      FROM #szurtMulasztas
      WHERE TIPUS_CHAR = 'K'
       UNION ALL
      SELECT TIPUS_CHAR, C_TIPUS, C_IGAZOLT, C_TANULOID, MULASZTASOK_SZAMA, C_GYAKORLATI
      FROM #szurtMulasztas
      WHERE TIPUS_CHAR = 'H'
    ) AS KM
    GROUP BY C_IGAZOLT, C_TANULOID, C_GYAKORLATI
    ORDER BY C_TANULOID, C_IGAZOLT DESC
  END
  --TANÓRAI FELJEGYZÉSEK
  SELECT 
     C_TANULOID
    ,SUM(IIF(C_TIPUS = @pTanoraiDicseretTipusId, 1, 0)) AS TanoraiDicseret
    ,SUM(IIF(C_TIPUS = @pFelszereleshianyTipusId, 1, 0)) AS FelszerelesHiany
    ,SUM(IIF(C_TIPUS = @pHaziFeladatHianyTipusId, 1, 0)) AS HaziFeladatHiany
    ,'F' AS TOROLT
  FROM T_TANULOESEMENY_OSSZES AS TANULOESEMENY
    INNER JOIN T_TANITASIORA_OSSZES AS TANITASIORA ON TANITASIORA.ID = TANULOESEMENY.C_TANITASIORAID
    INNER JOIN T_TANULO_TANULOESEMENY AS TANULO_TANULOE ON TANULO_TANULOE.C_TANULOESEMENYID = TANULOESEMENY.ID
    INNER JOIN T_DICTIONARYITEMBASE_OSSZES AS TIPUS ON TIPUS.ID = TANULOESEMENY.C_TIPUS AND TIPUS.C_TANEVID = TANULOESEMENY.C_TANEVID AND TIPUS.TOROLT = 'F'
    INNER JOIN #Tanulok AS OSZTALYTANULOK ON OSZTALYTANULOK.TANULOID = TANULO_TANULOE.C_TANULOID
    INNER JOIN #aktualisOsztalyCsoportok AS OSZTALYCSOPORT ON OSZTALYCSOPORT.OSZTALYCSOPORTID = TANITASIORA.C_OSZTALYCSOPORTID
    LEFT JOIN T_CSOPORT_OSSZES AS CSOPORT ON CSOPORT.ID = OSZTALYCSOPORT.OSZTALYCSOPORTID AND CSOPORT.TOROLT = 'F'
    LEFT JOIN T_OSZTALY_OSSZES AS OSZTALY ON OSZTALY.ID = OSZTALYCSOPORT.OSZTALYCSOPORTID AND OSZTALY.TOROLT = 'F'
  WHERE TANULOESEMENY.TOROLT = 'F' AND TANITASIORA.TOROLT = 'F' AND TANULOESEMENY.C_TANEVID = @pTanevId AND C_TANITASIORAID IS NOT NULL
    AND TANITASIORA.C_DATUM BETWEEN @idoszakEleje AND @idoszakVege
    AND TANITASIORA.C_OSZTALYCSOPORTID IN (SELECT OSZTALYCSOPORTID FROM #aktualisOsztalyCsoportok)
  GROUP BY C_TANULOID
  -- Osztály adatok az iktatáshoz
  SELECT
     f.C_NYOMTATASINEV Osztalyfonok
    ,f.ID OsztalyfonokId
    ,ocs.C_NEV Osztalynev
    ,@pOsztalyId OsztalyId
    ,ocs.C_EVFOLYAMTIPUSA EvfolyamTipusa
    ,ocs.C_FELADATELLATASIHELYID FeladatEllatasiHelyId
    ,o.C_TANTERVID TantervId
    ,ocs.C_KEPZESIFORMA KepzesiForma
    ,o.C_AGAZAT Agazat
    ,o.C_SZAKMACSOPORT SzakmaCsoport
    ,o.C_SZAKKEPESITES Szakkepesites
    ,o.C_RESZSZAKKEPESITES 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 OJCSJKeresztfeleves
    ,ocs.C_VEGZOSEVFOLYAM CSJVegzosEvfolyamu
    ,ocs.C_ISTECHNIKAI OJTechnikaiOsztaly
    ,o.C_NEMZETISEGI OJNemzetisegi
    ,o.C_KETTANNYELVU OJKettannyelvu
    ,o.C_NYELVIELOKESZITO OJNyelviElokeszito
    ,ocs.C_ISGYOGYPEDAGOGIAILOGOPEDIAI OJIsGyogypedagogiaiLogopediai
    ,o.C_SPORT OJSportOsztaly
    ,o.C_AJPROGRAM OJAranyJanosProgram
  FROM T_OSZTALYCSOPORT_OSSZES ocs
    INNER JOIN T_OSZTALY_OSSZES o ON o.ID = ocs.id
    LEFT JOIN T_FELHASZNALO_OSSZES f ON f.ID = o.C_OSZTALYFONOKID
  WHERE ocs.ID = @pOsztalyId AND ocs.C_TANEVID = @pTanevId AND ocs.TOROLT = 'F';
  
  SELECT 
     C_TANULOID
    ,[D] AS Dicseret
    ,[K] AS Kituno
  FROM (
  SELECT 
     C_TANULOID
    ,T_TANULOERTEKELES_ID
    ,LEFT(ERTEKELES_SZOVEG_MEGJEGYZES, 1) AS Szoveg
  FROM #szurtErtekeles
  WHERE ERTEKELES = '5'
    AND REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(ERTEKELES_SZOVEG_MEGJEGYZES,CHAR(160),CHAR(32)),CHAR(9),CHAR(32)),CHAR(32),'(¤¤)'),'¤)(¤',''),'(¤¤)',CHAR(32)) IN ( 'Dicséret', 'Kitűnő' )    
  ) AS s
  PIVOT(COUNT(T_TANULOERTEKELES_ID) FOR Szoveg IN ([D], [K])) piv
  ORDER BY C_TANULOID
END
GO
