DROP FUNCTION IF EXISTS fnGetDokumentumErtekelesekOsztalyonkent
GO

CREATE FUNCTION fnGetDokumentumErtekelesekOsztalyonkent (
   @tanevId int
  ,@osztalyCsoportId int
  ,@ertekelesTipusa int = NULL
  ,@csakTanorai bit = 1
  ,@csakKivlasztottOsztalyCsoport bit = 0
  ,@atsoroltTanuloErtekelesek int = 0
  ,@includeOsztalyfonokiKategoria bit = 0
  ,@osztalyzatTipusTypeID int = 44
  ,@magatartasErtekelesTipusTypeID int = 50
  ,@szorgalomErtekelesTipusTypeID int = 51
)
RETURNS @retTanuloErtekeles TABLE
(
   ErtekelesId INT NOT NULL
  ,Datum DATE
  ,TipusId INT
  ,ErtekelesSzoveg NVARCHAR(MAX)
  ,ErtekelesSzovegFormazott NVARCHAR(MAX)
  ,ErtekelesSzovegRovidNev NVARCHAR(3)
  ,ErtekelesOsztalyzatId INT
  ,ErtekelesOsztalyzatValue INT
  ,ErtekelesOsztalyzatNev NVARCHAR(500)
  ,ErtekelesSzazalek NVARCHAR(4)
  ,MagatartasOsztalyzatId INT
  ,MagatartasOsztalyzatValue INT
  ,MagatartasOsztalyzatNev NVARCHAR(500)
  ,MagatartasSzoveg NVARCHAR(MAX)
  ,MagatartasSzovegFormazott NVARCHAR(MAX)
  ,MagatartasSzovegRovidNev NVARCHAR(6)
  ,MagatartasErtekId INT
  ,MagatartasErtek NVARCHAR(500)
  ,MagatartasErtekOsztalyzatkent INT
  ,SzorgalomOsztalyzatId INT
  ,SzorgalomOsztalyzatValue INT
  ,SzorgalomOsztalyzatNev NVARCHAR(500)
  ,SzorgalomSzoveg NVARCHAR(MAX)
  ,SzorgalomSzovegFormazott NVARCHAR(MAX)
  ,SzorgalomSzovegRovidNev NVARCHAR(6)
  ,SzorgalomErtekId INT
  ,SzorgalomErtek NVARCHAR(500)
  ,SzorgalomErtekOsztalyzatkent INT
  ,TanuloId INT
  ,TanuloCsoportId  INT
  ,OsztalyCsoportId INT
  ,TantargyId INT
  ,TantargyNevZarojellel NVARCHAR(1023)
  ,TantargyNevNyomtatvanyban NVARCHAR(510)
  ,TantargyNev NVARCHAR(510)
  ,TantargyAngolNev NVARCHAR(510)
  ,TantargyNemetNev NVARCHAR(510)
  ,TargyKategoriaId INT
  ,FotargyE CHAR(1)
  ,Altantargy CHAR(1)
  ,FotargyId INT
  ,ErtekelesTema NVARCHAR(2100)
  ,ErtekeloId INT
  ,ErtekelesModjaId INT
  ,IsMagatartasSzorgalom CHAR(1)
  ,Jeloles NVARCHAR(MAX)
  ,JelolesAndErtekelesTema NVARCHAR(MAX)
  ,RogzitesDatum DATETIME
  ,RENDEZ0 int
  ,RENDEZ1 INT
  ,RENDEZ2 NVARCHAR(510)
  ,RENDEZ3 INT
  ,RENDEZ4 INT
  ,RENDEZ5 NVARCHAR(510)
  ,IsTanulmanyiatlagbanemszamit CHAR(1)
)
AS
BEGIN
  DECLARE @kategoriaId int = (SELECT C_FELADATKATEGORIAID FROM T_OSZTALYCSOPORT_OSSZES WHERE ID = @osztalyCsoportId)

DECLARE @kapcsolodoOcsID TABLE(ID INT)
INSERT INTO @kapcsolodoOcsID (ID)
SELECT ID FROM fnGetDokumentumKapcsolodoOsztalycsoportok(@osztalyCsoportId, @tanevId, 0, DEFAULT)

DECLARE @DefaultFeladatKategoriaId int = 7553

INSERT INTO @retTanuloErtekeles
SELECT
   tanuloErtekeles.ID as ErtekelesId
  ,tanuloErtekeles.C_DATUM as Datum
  ,tanuloErtekeles.C_TIPUSID as TipusId
  ,tanuloErtekeles.C_ERTEKELESSZOVEG as ErtekelesSzoveg
  ,tanuloErtekeles.C_ERTEKELESSZOVEGFORMAZOTT as ErtekelesSzovegFormazott
  ,tanuloErtekeles.C_ERTEKELESSZOVEGROVIDNEV as ErtekelesSzovegRovidNev
  ,tanuloErtekeles.C_ERTEKELESOSZTALYZATID as ErtekelesOsztalyzatId
  ,ertekelesOsztalyzat.C_VALUE as ErtekelesOsztalyzatValue
  ,ertekelesOsztalyzat.C_NAME as ErtekelesOsztalyzatNev
  ,CONVERT(NVARCHAR(3), tanuloErtekeles.C_ERTEKELESSZAZALEK)+'%' as ErtekelesSzazalek
  ,tanuloErtekeles.C_MAGATARTASOSZTALYZATID as MagatartasOsztalyzatId
  ,magatartasOsztalyzat.C_VALUE as MagatartasOsztalyzatValue
  ,magatartasOsztalyzat.C_NAME as MagatartasOsztalyzatNev
  ,tanuloErtekeles.C_MAGATARTASSZOVEG as MagatartasSzoveg
  ,tanuloErtekeles.C_MAGATARTASSZOVEGFORMAZOTT as MagatartasSzovegFormazott
  ,tanuloErtekeles.C_MAGATARTASSZOVEGROVIDNEV as MagatartasSzovegRovidNev
  ,tanuloErtekeles.C_MAGATARTASERTEKID as MagatartasErtekId
  ,magatartasErtek.C_NAME as MagatartasErtek
  ,magatartasErtek.C_VALUE + 1 as MagatartasErtekOsztalyzatken
  ,tanuloErtekeles.C_SZORGALOMOSZTALYZATID as SzorgalomOsztalyzatId
  ,szorgalomOsztalyzat.C_VALUE as SzorgalomOsztalyzatValue
  ,szorgalomOsztalyzat.C_NAME as SzorgalomOsztalyzatNev
  ,tanuloErtekeles.C_SZORGALOMSZOVEG as SzorgalomSzoveg
  ,tanuloErtekeles.C_SZORGALOMSZOVEGFORMAZOTT as SzorgalomSzovegFormazott
  ,tanuloErtekeles.C_SZORGALOMSZOVEGROVIDNEV as SzorgalomSzovegRovidNev
  ,tanuloErtekeles.C_SZORGALOMERTEKID as SzorgalomErtekId
  ,szorgalomErtek.C_NAME as SzorgalomErtek
  ,szorgalomErtek.C_VALUE + 1 as SzorgalomErtekOsztalyzatkent
  ,tanuloErtekeles.C_TANULOID as TanuloId
  ,TanuloCsoport.ID AS TanuloCsoportId
  ,tanuloErtekeles.C_OSZTALYCSOPORTID as OsztalyCsoportId
  ,tanuloErtekeles.C_TANTARGYID as TantargyId
  ,IIF(tantargy.C_NEV <> tantargy.C_NEVNYOMTATVANYBAN AND tantargy.C_NEVNYOMTATVANYBAN IS NOT NULL, tantargy.C_NEVNYOMTATVANYBAN +' (' + tantargy.C_NEV + ')', tantargy.C_NEV) as TantargyNevZarojellel
  ,tantargy.C_NEVNYOMTATVANYBAN as TantargyNevNyomtatvanyban
  ,tantargy.C_NEV as TantargyNev
  ,tantargy.C_ANGOLNEV as TantargyAngolNev
  ,tantargy.C_NEMETNEV as TantargyNemetNev
  ,tantargy.C_TARGYKATEGORIA as TargyKategoriaId
  ,tantargy.C_FOTARGYE as FotargyE
  ,tantargy.C_ALTANTARGYKENTNYOMTATVANYBAN as Altantargy
  ,tantargy.C_FOTARGYID as FotargyId
  ,tanuloErtekeles.C_ERTEKELESTEMA as ErtekelesTema
  ,tanuloErtekeles.C_ERTEKELOID as ErtekeloId
  ,tanuloErtekeles.C_ERTEKELESMODID as ErtekelesModjaId
  ,tanuloErtekeles.C_ISMAGATARTASSZORGALOM as IsMagatartasSzorgalom
  ,CASE
    WHEN tanuloErtekeles.C_TIPUSID = 1518 THEN
      CASE
        WHEN tanuloErtekeles.C_ISMAGATARTASSZORGALOM = 'T' THEN
          CASE
            WHEN tanuloErtekeles.C_MAGATARTASSZOVEG IS NOT NULL THEN
              '<sup>' + CAST(ROW_NUMBER() OVER(PARTITION BY tanuloErtekeles.C_TANULOID, tanuloErtekeles.C_TIPUSID, IIF(tanuloErtekeles.C_MAGATARTASSZOVEG IS NOT NULL, 1, 0) ORDER BY tanuloErtekeles.C_ROGZITESDATUM) AS NVARCHAR(10))+'</sup>'
            WHEN tanuloErtekeles.C_SZORGALOMSZOVEG IS NOT NULL THEN
              '<sup>' + CAST(ROW_NUMBER() OVER(PARTITION BY tanuloErtekeles.C_TANULOID, tanuloErtekeles.C_TIPUSID, IIF(tanuloErtekeles.C_SZORGALOMSZOVEG IS NOT NULL, 1, 0) ORDER BY tanuloErtekeles.C_ROGZITESDATUM) AS NVARCHAR(10))+'</sup>'
          END
        WHEN tanuloErtekeles.C_ISMAGATARTASSZORGALOM = 'F' THEN        
          '<sup>' + CAST(ROW_NUMBER() OVER(PARTITION BY tanuloErtekeles.C_TANULOID, tanuloErtekeles.C_TIPUSID, IIF(tanuloErtekeles.C_ERTEKELESSZOVEG IS NOT NULL, 1, 0) ORDER BY tanuloErtekeles.C_ROGZITESDATUM) AS NVARCHAR(10))+'</sup>'
      END
    WHEN tanuloErtekeles.C_ERTEKELESTEMA IS NOT NULL AND tanuloErtekeles.C_TIPUSID IN (1519, 1520) THEN
      '<i>(' + CAST(CHAR(ROW_NUMBER() OVER(PARTITION BY tanuloErtekeles.C_TANULOID, tanuloErtekeles.C_TIPUSID, IIF(tanuloErtekeles.C_ERTEKELESTEMA IS NOT NULL, 1, 0) ORDER BY tanuloErtekeles.C_DATUM) + 96) AS NVARCHAR(10))+')</i>'
    WHEN tanuloErtekeles.C_ERTEKELESTEMA IS NOT NULL AND tanuloErtekeles.C_TIPUSID IN (1522, 1523, 1524, 1525) THEN
        '<i>(' + CAST(CHAR(ROW_NUMBER() OVER(PARTITION BY tanuloErtekeles.C_TANULOID, tanuloErtekeles.C_TIPUSID, IIF(tanuloErtekeles.C_ERTEKELESTEMA IS NOT NULL, 1, 0) ORDER BY tanuloErtekeles.C_DATUM) + 96) AS NVARCHAR(10))+')</i>'
    END as Jeloles
  ,CASE
    WHEN tanuloErtekeles.C_ERTEKELESTEMA IS NOT NULL AND tanuloErtekeles.C_TIPUSID IN (1519, 1520) THEN
      '<i>(' + CAST(CHAR(ROW_NUMBER() OVER(PARTITION BY tanuloErtekeles.C_TANULOID, tanuloErtekeles.C_TIPUSID, IIF(tanuloErtekeles.C_ERTEKELESTEMA IS NOT NULL, 1, 0) ORDER BY tanuloErtekeles.C_DATUM) + 96) AS NVARCHAR(10)) + ')</i>: ' + tanuloErtekeles.C_ERTEKELESTEMA
    WHEN tanuloErtekeles.C_ERTEKELESTEMA IS NOT NULL AND tanuloErtekeles.C_TIPUSID IN (1522, 1523, 1524, 1525) THEN
      '<i>(' + CAST(CHAR(ROW_NUMBER() OVER(PARTITION BY tanuloErtekeles.C_TANULOID, tanuloErtekeles.C_TIPUSID, IIF(tanuloErtekeles.C_ERTEKELESTEMA IS NOT NULL, 1, 0) ORDER BY tanuloErtekeles.C_DATUM) + 96) AS NVARCHAR(10)) + ')</i>: ' + tanuloErtekeles.C_ERTEKELESTEMA
    END as JelolesAndErtekelesTema
  ,tanuloErtekeles.C_ROGZITESDATUM as RogzitesDatum
  ,tantargy.C_SORSZAM as RENDEZ0
  ,CASE WHEN tantargy.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, tantargy.C_NEV) as RENDEZ2
  ,ISNULL(tantargy.C_FOTARGYID, tantargy.ID) as RENDEZ3
  ,tantargy.C_FOTARGYID as RENDEZ4
  ,ISNULL(tantargy.C_NEVNYOMTATVANYBAN, tantargy.C_NEV) as RENDEZ5
  ,tantargy.C_ISTANULMANYIATLAGBANEMSZAMIT as IsTanulmanyiatlagbanemszamit
FROM T_TANULOERTEKELES_OSSZES tanuloErtekeles
  INNER JOIN T_TANULOCSOPORT_OSSZES TanuloCsoport ON TanuloCsoport.C_TANULOID = tanuloErtekeles.C_TANULOID
    AND TanuloCsoport.C_OSZTALYCSOPORTID = @osztalyCsoportId
    AND TanuloCsoport.C_BELEPESDATUM <= tanuloErtekeles.C_DATUM
    AND (TanuloCsoport.C_KILEPESDATUM >= tanuloErtekeles.C_DATUM OR TanuloCsoport.C_KILEPESDATUM IS NULL)
    AND TanuloCsoport.TOROLT = 'F'
  INNER JOIN T_TANULOCSOPORT_OSSZES ErtekeleshezTartozoOsztalyCsoport ON ErtekeleshezTartozoOsztalyCsoport.C_TANULOID = tanuloErtekeles.C_TANULOID
    AND ErtekeleshezTartozoOsztalyCsoport.C_OSZTALYCSOPORTID = tanuloErtekeles.C_OSZTALYCSOPORTID
    AND ErtekeleshezTartozoOsztalyCsoport.C_BELEPESDATUM <= tanuloErtekeles.C_DATUM
    AND (ErtekeleshezTartozoOsztalyCsoport.C_KILEPESDATUM >= tanuloErtekeles.C_DATUM OR ErtekeleshezTartozoOsztalyCsoport.C_KILEPESDATUM IS NULL)
    AND ErtekeleshezTartozoOsztalyCsoport.TOROLT = 'F'
    AND ErtekeleshezTartozoOsztalyCsoport.C_TANEVID = @tanevId
  LEFT JOIN T_TANTARGY_OSSZES tantargy ON tantargy.Id = tanuloErtekeles.C_TANTARGYID AND tantargy.TOROLT = 'F'
  LEFT JOIN T_DICTIONARYITEMBASE_OSSZES ertekelesOsztalyzat ON ertekelesOsztalyzat.ID = tanuloErtekeles.C_ERTEKELESOSZTALYZATID
    AND ertekelesOsztalyzat.C_TANEVID = @tanevId
    AND ertekelesOsztalyzat.C_DICTIONARYTYPEID = @osztalyzatTipusTypeID
  LEFT JOIN T_DICTIONARYITEMBASE_OSSZES magatartasOsztalyzat ON magatartasOsztalyzat.ID = tanuloErtekeles.C_MAGATARTASOSZTALYZATID
    AND magatartasOsztalyzat.C_TANEVID = @tanevId
    AND magatartasOsztalyzat.C_DICTIONARYTYPEID = @osztalyzatTipusTypeID
  LEFT JOIN T_DICTIONARYITEMBASE_OSSZES szorgalomOsztalyzat ON szorgalomOsztalyzat.ID = tanuloErtekeles.C_SZORGALOMOSZTALYZATID
    AND szorgalomOsztalyzat.C_TANEVID = @tanevId
    AND szorgalomOsztalyzat.C_DICTIONARYTYPEID = @osztalyzatTipusTypeID
  LEFT JOIN T_DICTIONARYITEMBASE_OSSZES magatartasErtek ON magatartasErtek.ID = tanuloErtekeles.C_MAGATARTASERTEKID
    AND magatartasErtek.C_TANEVID = @tanevId
    AND magatartasErtek.C_DICTIONARYTYPEID = @magatartasErtekelesTipusTypeID
  LEFT JOIN T_DICTIONARYITEMBASE_OSSZES szorgalomErtek ON szorgalomErtek.ID = tanuloErtekeles.C_SZORGALOMERTEKID
    AND szorgalomErtek.C_TANEVID = @tanevId
    AND szorgalomErtek.C_DICTIONARYTYPEID = @szorgalomErtekelesTipusTypeID
  LEFT JOIN T_DICTIONARYITEMBASE_OSSZES TargyKategoriaDictionary ON TargyKategoriaDictionary.Id = tantargy.C_TARGYKATEGORIA
    AND TargyKategoriaDictionary.TOROLT = 'F'
    AND TargyKategoriaDictionary.C_TANEVID = @tanevId
  LEFT JOIN T_TANTARGY_OSSZES FotargyTable ON tantargy.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
  INNER JOIN T_OSZTALYCSOPORT_OSSZES osztalyCsoport ON osztalyCsoport.ID = tanuloErtekeles.C_OSZTALYCSOPORTID
    AND osztalyCsoport.TOROLT = 'F' and osztalyCsoport.C_FELADATKATEGORIAID = @kategoriaId
  LEFT JOIN (
       SELECT
          tanorai.ID as tanoraiId
         ,cs.ID as CsoportId
       FROM T_CSOPORT_OSSZES cs
         INNER JOIN fnGetTanoraiCeluCsoportTipusok(@tanevId) tanorai ON tanorai.ID = cs.C_TIPUSA
       ) tanorai ON tanorai.CsoportId = OsztalyCsoport.ID
  LEFT JOIN T_OSZTALY_OSSZES osztaly ON osztaly.ID = tanuloErtekeles.C_OSZTALYCSOPORTID
WHERE tanuloErtekeles.C_TANEVID = @tanevId
  AND tanuloErtekeles.TOROLT = 'F'
  AND (@atsoroltTanuloErtekelesek = 1 OR (tanuloErtekeles.C_OSZTALYCSOPORTID IN(SELECT ID FROM @kapcsolodoOcsID)))
  AND (@ertekelesTipusa IS NULL OR C_TIPUSID = @ertekelesTipusa)
  AND (@csakKivlasztottOsztalyCsoport = 0 OR tanuloErtekeles.C_OSZTALYCSOPORTID = @osztalyCsoportId)
  AND (@csakTanorai = 0 OR osztaly.ID IS NOT NULL OR tanorai.tanoraiId IS NOT NULL)
  AND ((ISNULL(tantargy.C_TARGYKATEGORIA,0) <> 1248) OR @includeOsztalyfonokiKategoria = 1)

  IF @atsoroltTanuloErtekelesek > 0
  BEGIN
    DECLARE @osztalyTantargyak TABLE (TantargyId INT)

    INSERT INTO @osztalyTantargyak (TantargyId)
    SELECT DISTINCT
     TantargyId
    FROM @retTanuloErtekeles
    WHERE OsztalyCsoportId IN (SELECT ID FROM @kapcsolodoOcsID)
    UNION
    SELECT DISTINCT
      C_TANTARGYID
    FROM T_FOGLALKOZAS_OSSZES
      INNER JOIN @kapcsolodoOcsID AS OSZTALYCSOPORT ON OSZTALYCSOPORT.ID = T_FOGLALKOZAS_OSSZES.C_OSZTALYCSOPORTID
    WHERE T_FOGLALKOZAS_OSSZES.TOROLT = 'F'

    DELETE FROM @retTanuloErtekeles
    WHERE TantargyId NOT IN (SELECT TantargyId FROM @osztalyTantargyak)
  END

    RETURN
END
GO