﻿DROP PROCEDURE IF EXISTS uspGetTanuloErtekelesDataSetByTanulo
GO

CREATE PROCEDURE uspGetTanuloErtekelesDataSetByTanulo
   @pIntezmenyId int
  ,@pTanevId int
  ,@pTanarId int
  ,@pTanuloId 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'
  CREATE TABLE #KapcsopodoTantargyak (
     ID int
    ,C_FOTARGYID int
    ,C_NEV nvarchar (255)
    ,C_TARGYKATEGORIA int
    ,C_TANEVID int
  )

  CREATE TABLE #Tantargyak (
     ID int
    ,C_FOTARGYID int
    ,C_NEV nvarchar (255)
    ,C_TARGYKATEGORIA int
    ,C_TANEVID int
  )

  INSERT INTO #KapcsopodoTantargyak (
     ID
    ,C_FOTARGYID
    ,C_NEV
    ,C_TARGYKATEGORIA
    ,C_TANEVID
  )
  SELECT
     kapcsolodoTargy.ID
    ,kapcsolodoTargy.C_FOTARGYID
    ,kapcsolodoTargy.C_NEV
    ,kapcsolodoTargy.C_TARGYKATEGORIA
    ,kapcsolodoTargy.C_TANEVID
  FROM fnGetKapcsolodoTantargyak(@pIntezmenyId, @pTanevId, NULL) kapcsolodoTargy

  CREATE TABLE #OsztalyCsoportIdList (
    ID int PRIMARY KEY
  )

  INSERT INTO #OsztalyCsoportIdList (
    ID
  )
  SELECT DISTINCT
    OsztalyCsoport.ID
  FROM T_TANULOCSOPORT_OSSZES TanuloCsoport
    INNER JOIN T_OSZTALY_OSSZES Osztaly ON Osztaly.ID	= TanuloCsoport.C_OSZTALYCSOPORTID AND Osztaly.C_ALTANEVID = TanuloCsoport.C_TANEVID
      AND Osztaly.TOROLT = ''F''
    INNER JOIN T_OSZTALYCSOPORT_OSSZES OsztalyCsoport ON OsztalyCsoport.ID = Osztaly.ID AND OsztalyCsoport.C_TANEVID = TanuloCsoport.C_TANEVID
      AND OsztalyCsoport.TOROLT = ''F''
      AND (OsztalyCsoport.C_FELADATKATEGORIAID = @pFeladatKategoriaId OR @pFeladatKategoriaId IS NULL)
    INNER JOIN T_TANEV_OSSZES Tanev ON Tanev.ID = TanuloCsoport.C_TANEVID AND Tanev.TOROLT = ''F''
  WHERE TanuloCsoport.C_TANEVID = @pTanevId
    AND TanuloCsoport.TOROLT = ''F''
    AND TanuloCsoport.C_TANULOID = @pTanuloId
    AND	TanuloCsoport.C_BELEPESDATUM <= @pDatum
  '

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

  SET @sql += N'
  INSERT INTO #Tantargyak (
     ID
    ,C_FOTARGYID
    ,C_NEV
    ,C_TARGYKATEGORIA
    ,C_TANEVID
  )
  SELECT
     NULL
    ,NULL
    ,''Magatartás/Szorgalom''
    ,0
    ,@pTanevID;

  WITH tantargy_CTE (
     C_TANTARGYID
    ,C_FOTARGYID
    ,C_TANEVID
  ) AS
  (
    SELECT
       Foglalkozas.C_TANTARGYID
      ,Tantargy.C_FOTARGYID
      ,Tantargy.C_TANEVID
    FROM T_FOGLALKOZAS_OSSZES Foglalkozas
      INNER JOIN T_TANTARGY_OSSZES Tantargy ON Tantargy.ID = Foglalkozas.C_TANTARGYID AND Tantargy.C_TANEVID = Foglalkozas.C_TANEVID
        AND Tantargy.TOROLT = ''F''
      INNER JOIN #OsztalyCsoportIdList OsztalyCsoport ON OsztalyCsoport.ID = Foglalkozas.C_OSZTALYCSOPORTID
    WHERE Foglalkozas.C_TANEVID = @pTanevId
      AND Foglalkozas.TOROLT = ''F''

    UNION

    SELECT
       OrarendiOra.C_TANTARGYID
      ,Tantargy.C_FOTARGYID
      ,Tantargy.C_TANEVID
    FROM T_ORARENDIORA_OSSZES OrarendiOra
      INNER JOIN T_TANTARGY_OSSZES Tantargy ON Tantargy.ID = OrarendiOra.C_TANTARGYID AND Tantargy.C_TANEVID = OrarendiOra.C_TANEVID
        AND Tantargy.TOROLT = ''F''
      INNER JOIN #OsztalyCsoportIdList OsztalyCsoport ON OsztalyCsoport.ID = OrarendiOra.C_OSZTALYCSOPORTID
    WHERE OrarendiOra.C_TANEVID = @pTanevId
      AND OrarendiOra.TOROLT = ''F''

    UNION

    SELECT
       TanuloErtekeles.C_TANTARGYID
      ,Tantargy.C_FOTARGYID
      ,Tantargy.C_TANEVID
    FROM T_TANULOERTEKELES_OSSZES TanuloErtekeles
      LEFT JOIN T_TANTARGY_OSSZES Tantargy ON Tantargy.ID = TanuloErtekeles.C_TANTARGYID AND Tantargy.C_TANEVID = TanuloErtekeles.C_TANEVID
        AND Tantargy.TOROLT = ''F''
  '

  IF @pFeladatKategoriaId IS NOT NULL AND  @pFeladatKategoriaId <> @pAmiKategoriaId
    SET @sql += N'
      INNER JOIN T_OSZTALYCSOPORT_OSSZES Osztaly ON Osztaly.ID = TanuloErtekeles.C_ROGZITESKORITANULOOSZTALYID AND Osztaly.C_TANEVID = TanuloErtekeles.C_TANEVID
        AND Osztaly.TOROLT = ''F''
        AND Osztaly.C_EVFOLYAMTIPUSA = @evfolyamTipusId
        AND Osztaly.C_FELADATKATEGORIAID = @pFeladatKategoriaId
  '

  SET @sql += N'
    WHERE TanuloErtekeles.C_TANEVID = @pTanevId
      AND TanuloErtekeles.TOROLT = ''F''
      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 += N'
  )

  INSERT INTO #Tantargyak (
     ID
    ,C_FOTARGYID
    ,C_NEV
    ,C_TARGYKATEGORIA
    ,C_TANEVID
  )
  SELECT DISTINCT
     KapcsopolodoTantargy.ID
    ,KapcsopolodoTantargy.C_FOTARGYID
    ,KapcsopolodoTantargy.C_NEV
    ,KapcsopolodoTantargy.C_TARGYKATEGORIA
    ,KapcsopolodoTantargy.C_TANEVID
  FROM tantargy_CTE
    INNER JOIN #KapcsopodoTantargyak KapcsopolodoTantargy ON tantargy_CTE.C_TANTARGYID = KapcsopolodoTantargy.ID OR tantargy_CTE.C_FOTARGYID = KapcsopolodoTantargy.ID

  SELECT
     @pTanuloId AS TanuloId
    ,Tantargy.ID AS TantargyId
    ,Tantargy.C_NEV AS TantargyNev
    ,TanuloErtekeles.ID AS ID
    ,TanuloErtekeles.C_DATUM AS Datum
    ,TanuloErtekeles.C_ROGZITESDATUM AS RogzitesDatum
    ,TanuloErtekeles.C_TIPUSID AS TipusId
    ,FelhasznaloErtekelo.C_NYOMTATASINEV AS ErtekeloNyomtatasiNev
    ,IIF(TanuloErtekeles.ID IS NULL, NULL, CASE WHEN TanuloErtekeles.C_ERTEKELOID = @pTanarId THEN ''T'' ELSE ''F'' END) AS Modosithato
    ,TanuloErtekeles.CREATED AS Created
    ,IIF(TanuloErtekeles.C_ISMAGATARTASSZORGALOM IS NOT NULL, TanuloErtekeles.C_ISMAGATARTASSZORGALOM, IIF(Tantargy.ID IS NOT NULL, ''F'',  ''T'')) AS IsMagatartasSzorgalom
    ,TanuloErtekeles.C_ISERTESITESELKULDVE AS IsErtesitesElkuldve
    ,TanuloErtekeles.C_ERTEKELESOSZTALYZATID AS ErtekelesOsztalyzatId
    ,TanariAtlagSuly.C_SULY AS Suly
    ,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
    ,Tantargy.C_TARGYKATEGORIA AS TantargyKategoriaId
    ,Fotargy.ID AS FotargyId
    ,Fotargy.C_NEV AS FotargyNev
    ,Fotargy.C_TARGYKATEGORIA AS FotargyTantargyKategoriaId
  FROM #Tantargyak Tantargy
    LEFT JOIN (
      SELECT
        TanuloErtekeles.*
      FROM T_TANULOERTEKELES_OSSZES TanuloErtekeles
  '

  IF @pFeladatKategoriaId IS NOT NULL AND  @pFeladatKategoriaId <> @pAmiKategoriaId
    SET @sql += N'
        INNER JOIN T_OSZTALYCSOPORT_OSSZES Osztaly ON Osztaly.ID = TanuloErtekeles.C_ROGZITESKORITANULOOSZTALYID AND Osztaly.C_TANEVID = TanuloErtekeles.C_TANEVID
          AND Osztaly.TOROLT = ''F''
          AND Osztaly.C_EVFOLYAMTIPUSA = @evfolyamTipusId
          AND Osztaly.C_FELADATKATEGORIAID = @pFeladatKategoriaId
  '

  SET @sql += N'
      WHERE TanuloErtekeles.C_TANEVID = @pTanevId
        AND TanuloErtekeles.TOROLT = ''F''
        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 += N'
    ) AS TanuloErtekeles ON (TanuloErtekeles.C_TANTARGYID = Tantargy.ID OR (TanuloErtekeles.C_TANTARGYID IS NULL AND Tantargy.ID IS NULL))
    INNER JOIN T_FELHASZNALO_OSSZES FelhasznaloErtekelo ON FelhasznaloErtekelo.ID = TanuloErtekeles.C_ERTEKELOID AND FelhasznaloErtekelo.C_TANEVID = Tantargy.C_TANEVID
      AND FelhasznaloErtekelo.TOROLT = ''F''
    LEFT JOIN T_TANARIATLAGSULY_OSSZES TanariAtlagSuly ON TanariAtlagSuly.C_ERTEKELESMODID = TanuloErtekeles.C_ERTEKELESMODID AND TanariAtlagSuly.C_TANEVID = Tantargy.C_TANEVID
      AND TanariAtlagSuly.TOROLT = ''F''
    LEFT JOIN T_TANTARGY_OSSZES Fotargy ON Fotargy.ID = Tantargy.C_FOTARGYID AND Fotargy.C_TANEVID = Tantargy.C_TANEVID
      AND Fotargy.TOROLT = ''F''
  '

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

END
GO
