﻿DROP PROCEDURE IF EXISTS uspGetTanuloErtekelesDetailDataSet
GO

CREATE PROCEDURE uspGetTanuloErtekelesDetailDataSet
   @pTanevId int
  ,@pTanuloId int
  ,@pTantargyId int = NULL
  ,@pShowToroltElemek bit
  ,@pTanarId int
  ,@pErtekelesMegjelenesFajtaEnumTantargyId int
  ,@pErtekelesMegjelenesFajtaEnumMagatartasSzorgalomId int
  ,@pErtekelesMegjelenesFajtaId int
  ,@pDatum date = NULL
  ,@pAmiKategoriaId int
  ,@pFeladatKategoriaId int = NULL
  ,@pKiiratkozottNeJelenjenMeg  bit = 1
AS BEGIN
  SET NOCOUNT ON;

  DECLARE
     @evfolyamTipusId int
    ,@sql nvarchar (max)

  IF @pDatum IS NULL
    SET @pDatum = CONVERT(date, GETDATE())

  SELECT TOP (1)
    @evfolyamTipusId = tanuloOsztaly.EvfolyamTipusId
  FROM fnGetTanuloOsztaly(@pTanuloId, @pDatum, @pFeladatKategoriaId, @pKiiratkozottNeJelenjenMeg) tanuloOsztaly
  ORDER BY tanuloOsztaly.BelepesDatuma DESC

  SET @sql = N'
  SELECT DISTINCT
     TanuloErtekeles.ID AS ID
    ,TanuloErtekeles.C_DATUM AS Datum
    ,TanuloErtekeles.C_ROGZITESDATUM AS RogzitesDatum
    ,TanuloErtekeles.C_TIPUSID AS TipusId
    ,TanuloErtekeles.C_ISERTESITESELKULDVE AS IsErtesitesElkuldve
    ,TanuloErtekeles.C_TANORAID AS TanoraId
    ,TanuloErtekeles.C_ERTEKELESOSZTALYZATID AS ErtekelesOsztalyzatId
    ,TanuloErtekeles.C_ERTEKELESSZOVEG AS ErtekelesSzoveg
    ,TanuloErtekeles.C_ERTEKELESSZOVEGROVIDNEV AS ErtekelesSzovegRovidNev
    ,TanuloErtekeles.C_ERTEKELESSZAZALEK AS ErtekelesSzazalek
    ,TanuloErtekeles.C_ERTEKELESMODID AS ErtekelesModId
    ,TanuloErtekeles.C_ERTEKELESTEMA AS ErtekelesTema
    ,TanuloErtekeles.C_MAGATARTASOSZTALYZATID AS MagatartasOsztalyzatId
    ,TanuloErtekeles.C_MAGATARTASSZOVEG AS MagatartasSzoveg
    ,TanuloErtekeles.C_MAGATARTASSZOVEGROVIDNEV AS MagatartasSzovegRovidNev
    ,TanuloErtekeles.C_MAGATARTASERTEKID AS MagatartasErtekId
    ,TanuloErtekeles.C_SZORGALOMOSZTALYZATID AS SzorgalomOsztalyzatId
    ,TanuloErtekeles.C_SZORGALOMSZOVEG AS SzorgalomSzoveg
    ,TanuloErtekeles.C_SZORGALOMSZOVEGROVIDNEV AS SzorgalomSzovegRovidNev
    ,TanuloErtekeles.C_SZORGALOMERTEKID AS SzorgalomErtekId
    ,TanuloErtekeles.C_ISMAGATARTASSZORGALOM AS IsMagatartasSzorgalom
    ,TanuloErtekeles.CREATED AS Created
    ,TanuloErtekeles.TOROLT AS Torolt
    ,TanuloErtekeles.C_TANULOID AS TanuloId
    ,TanariAtlagSuly.C_SULY AS Suly
    ,Felhasznalo.C_NYOMTATASINEV AS ErtekeloNyomtatasiNev
    ,Tantargy.C_TARGYKATEGORIA AS TantargyKategoriaId
    ,CASE WHEN TanuloErtekeles.C_ERTEKELOID = @pTanarId THEN ''T'' ELSE ''F'' END AS Modosithato
  FROM T_TANULOERTEKELES_OSSZES TanuloErtekeles
  '

  IF @pFeladatKategoriaId IS NOT NULL AND @pFeladatKategoriaId <> @pAmiKategoriaId
  BEGIN
    SET @sql += N'
    INNER JOIN T_OSZTALYCSOPORT_OSSZES Osztaly ON Osztaly.ID = TanuloErtekeles.C_ROGZITESKORITANULOOSZTALYID AND Osztaly.TOROLT = IIF(@pShowToroltElemek = 1, TanuloErtekeles.TOROLT, ''F'')
      AND Osztaly.C_TANEVID = TanuloErtekeles.C_TANEVID
      AND Osztaly.C_EVFOLYAMTIPUSA = @evfolyamTipusId
      AND Osztaly.C_FELADATKATEGORIAID = @pFeladatKategoriaId
    INNER JOIN T_TANEV_OSSZES Tanev ON Tanev.ID = TanuloErtekeles.C_TANEVID AND Tanev.TOROLT = IIF(@pShowToroltElemek = 1, TanuloErtekeles.TOROLT, ''F'')
    INNER JOIN T_TANULOCSOPORT_OSSZES TanuloCsoport ON TanuloCsoport.C_OSZTALYCSOPORTID = TanuloErtekeles.C_ROGZITESKORITANULOOSZTALYID AND TanuloCsoport.C_TANULOID = @pTanuloId
      AND TanuloCsoport.C_TANEVID = TanuloErtekeles.C_TANEVID
      AND	TanuloCsoport.C_BELEPESDATUM <= @pDatum
      AND TanuloCsoport.TOROLT = IIF(@pShowToroltElemek = 1, TanuloErtekeles.TOROLT, ''F'')
  '

    IF @pKiiratkozottNeJelenjenMeg = 1
      SET @sql += N'
      AND (TanuloCsoport.C_KILEPESDATUM > @pDatum OR TanuloCsoport.C_KILEPESDATUM IS NULL OR TanuloCsoport.C_KILEPESDATUM >= Tanev.C_UTOLSOTANITASINAP)
  '
  END

  SET @sql += N'
    LEFT JOIN T_TANTARGY_OSSZES Tantargy ON Tantargy.C_TANEVID = TanuloErtekeles.C_TANEVID AND Tantargy.TOROLT = IIF(@pShowToroltElemek = 1, TanuloErtekeles.TOROLT, ''F'')
      AND	Tantargy.ID = TanuloErtekeles.C_TANTARGYID
    INNER JOIN T_FELHASZNALO_OSSZES AS Felhasznalo ON Felhasznalo.TOROLT = IIF(@pShowToroltElemek = 1, TanuloErtekeles.TOROLT, ''F'') AND Felhasznalo.C_TANEVID = TanuloErtekeles.C_TANEVID
      AND Felhasznalo.ID = TanuloErtekeles.C_ERTEKELOID
    LEFT JOIN T_TANARIATLAGSULY_OSSZES AS TanariAtlagSuly ON TanariAtlagSuly.TOROLT = IIF(@pShowToroltElemek = 1, TanuloErtekeles.TOROLT, ''F'') AND TanariAtlagSuly.C_TANEVID = TanuloErtekeles.C_TANEVID
      AND TanariAtlagSuly.C_ERTEKELESMODID = TanuloErtekeles.C_ERTEKELESMODID
      AND TanuloErtekeles.C_ERTEKELESOSZTALYZATID IS NOT NULL
  WHERE TanuloErtekeles.TOROLT = IIF(@pShowToroltElemek = 1, TanuloErtekeles.TOROLT, ''F'')
    AND TanuloErtekeles.C_TANEVID = @pTanevId
    AND TanuloErtekeles.C_TANULOID = @pTanuloId'

  IF @pFeladatKategoriaId IS NOT NULL
  BEGIN
    IF @pFeladatKategoriaId = @pAmiKategoriaId
      SET @sql += N'
    AND TanuloErtekeles.C_ROGZITESKORITANULOOSZTALYID IS NULL
  '
    ELSE
      SET @sql += N'
    AND TanuloErtekeles.C_ROGZITESKORITANULOOSZTALYID IS NOT NULL
  '
  END

  SET @sql +=
  CASE
    WHEN @pErtekelesMegjelenesFajtaId = @pErtekelesMegjelenesFajtaEnumTantargyId
    THEN N'
    AND (TanuloErtekeles.C_ISMAGATARTASSZORGALOM = ''F'' AND TanuloErtekeles.C_TANTARGYID = @pTantargyId)
  '
      WHEN @pErtekelesMegjelenesFajtaId = @pErtekelesMegjelenesFajtaEnumMagatartasSzorgalomId
      THEN N'
    AND (TanuloErtekeles.C_ISMAGATARTASSZORGALOM = ''T'' AND TanuloErtekeles.C_TANTARGYID IS NULL)
  '
      ELSE N'
    AND ((TanuloErtekeles.C_ISMAGATARTASSZORGALOM = ''F'' AND TanuloErtekeles.C_TANTARGYID = @pTantargyId AND @pTantargyId IS NOT NULL)
      OR (TanuloErtekeles.C_ISMAGATARTASSZORGALOM = ''T'' AND TanuloErtekeles.C_TANTARGYID IS NULL AND @pTantargyId IS NULL))
  '
  END

  SET @sql += N'
  ORDER BY
     Datum DESC
    ,RogzitesDatum DESC'


  EXEC sp_executesql @sql, N'
     @pTanevId int
    ,@pTanuloId int
    ,@pTantargyId int
    ,@pShowToroltElemek bit
    ,@pTanarId int
    ,@evfolyamTipusId int
    ,@pFeladatKategoriaId int
    ,@pDatum date
    '
    ,@pTanevId = @pTanevId
    ,@pTanuloId = @pTanuloId
    ,@pTantargyId = @pTantargyId
    ,@pShowToroltElemek = @pShowToroltElemek
    ,@pTanarId = @pTanarId
    ,@evfolyamTipusId = @evfolyamTipusId
    ,@pFeladatKategoriaId= @pFeladatKategoriaId
    ,@pDatum = @pDatum

END
GO
