﻿DROP PROCEDURE IF EXISTS uspGetTanuloErtekelesDataSetByTantargy
GO

CREATE PROCEDURE uspGetTanuloErtekelesDataSetByTantargy
   @pTanevId int
  ,@pTanarId int
  ,@pTantargyId int
  ,@pOsztalyCsoportId int
  ,@pDatum date = NULL
  ,@pAmiKategoriaId int
AS
BEGIN
  SET NOCOUNT ON;

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

  DECLARE @feladatKategoriaId int = (SELECT C_FELADATKATEGORIAID FROM T_OSZTALYCSOPORT_OSSZES WHERE ID = @pOsztalyCsoportId)

  CREATE TABLE #TanuloOsztalyEvfolyamTipusIdList (
     TanuloId int PRIMARY KEY
    ,EvfolyamTipusId int
  )

  CREATE TABLE #Mentessegek (
     TanuloId int
    ,C_MENTESSEGOKA nvarchar (max)
    ,C_ERTEKELESMENTESITES char (1)
    ,C_SZOVEGESENERTEKELHETO char (1)
    ,RowNumber int
  )

  IF @feladatKategoriaId <> @pAmiKategoriaId
  BEGIN
    INSERT INTO #TanuloOsztalyEvfolyamTipusIdList (
       TanuloId
      ,EvfolyamTipusId
    )
    SELECT
       tanuloOsztalyList.C_TANULOID AS TanuloId
      ,tanuloOsztalyList.C_EVFOLYAMTIPUSA AS EvfolyamTipusId
    FROM fnGetOsztalyCsoportTanuloOsztalyList(@pTanevId, @pOsztalyCsoportId, @feladatKategoriaId, @pDatum) tanuloOsztalyList
  END

  INSERT INTO #Mentessegek (
     TanuloId
    ,C_MENTESSEGOKA
    ,C_ERTEKELESMENTESITES
    ,C_SZOVEGESENERTEKELHETO
    ,RowNumber
  )
  SELECT
     TanuloMentesseg.C_TANULOID
    ,TanuloMentesseg.C_MENTESSEGOKA
    ,TanuloMentesseg.C_ERTEKELESMENTESITES
    ,TanuloMentesseg.C_SZOVEGESENERTEKELHETO
    ,ROW_NUMBER() OVER (PARTITION BY TanuloMentesseg.C_TANULOID ORDER BY TanuloMentesseg.C_KEZDETE DESC) RowNumber
  FROM T_TANULOMENTESSEG_OSSZES TanuloMentesseg
  WHERE TanuloMentesseg.TOROLT = 'F'
    AND TanuloMentesseg.C_TANEVID = @pTanevId
    AND TanuloMentesseg.C_TANTARGYID = @pTantargyId
    AND ((TanuloMentesseg.C_KEZDETE IS NULL OR TanuloMentesseg.C_KEZDETE <= @pDatum) AND (TanuloMentesseg.C_VEGE IS NULL OR TanuloMentesseg.C_VEGE <= @pDatum))

  SELECT
     FelhasznaloTanulo.ID AS TanuloId
    ,@pTantargyId AS TantargyId
    ,FelhasznaloTanulo.C_NYOMTATASINEV AS TanuloNev
    ,IIF(FelhasznaloTanulo.C_NEVSORREND = 'T', FelhasznaloTanulo.C_UTONEV + ' '+ FelhasznaloTanulo.C_VEZETEKNEV, FelhasznaloTanulo.C_VEZETEKNEV + ' ' + FelhasznaloTanulo.C_UTONEV) AS TanuloNevElotagNelkul
    ,FelhasznaloTanulo.C_ANYJANEVE AS AnyjaNeve
    ,FelhasznaloTanulo.C_SZULETESIDATUM AS SzuletesiIdo
    ,OsztalyCsoport.C_FELADATKATEGORIAID AS FeladatKategoriaId
    ,OsztalyCsoport.C_NEV AS OsztalyNev
    ,TanuloMentesseg.C_MENTESSEGOKA AS MentessegOka
    ,TanuloMentesseg.C_ERTEKELESMENTESITES AS ErtkelesMentesseg
    ,TanuloMentesseg.C_SZOVEGESENERTEKELHETO AS SzovegesenErtekelheto
    ,TanuloErtekeles.ID AS ID
    ,TanuloErtekeles.C_DATUM AS Datum
    ,TanuloErtekeles.C_ROGZITESDATUM AS RogzitesDatum
    ,TanuloErtekeles.C_TIPUSID AS TipusId
    ,TanuloErtekeles.C_NYOMTATASINEV AS ErtekeloNyomtatasiNev
    ,IIF(TanuloErtekeles.C_ERTEKELOID = @pTanarId,'T','F') AS Modosithato
    ,TanuloErtekeles.C_ROGZITESDATUM AS Created
    ,TanuloErtekeles.C_ISMAGATARTASSZORGALOM 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
  FROM T_TANULOCSOPORT_OSSZES TanuloCsoport
    INNER JOIN T_TANEV_OSSZES Tanev ON Tanev.ID = TanuloCsoport.C_TANEVID AND Tanev.TOROLT = 'F'
    INNER JOIN T_FELHASZNALO_OSSZES FelhasznaloTanulo ON FelhasznaloTanulo.TOROLT = 'F' AND FelhasznaloTanulo.ID = TanuloCsoport.C_TANULOID
      AND FelhasznaloTanulo.C_TANEVID = TanuloCsoport.C_TANEVID
    INNER JOIN T_OSZTALYCSOPORT_OSSZES OsztalyCsoport ON OsztalyCsoport.TOROLT = 'F' AND OsztalyCsoport.ID = TanuloCsoport.C_OSZTALYCSOPORTID
      AND OsztalyCsoport.C_TANEVID = TanuloCsoport.C_TANEVID
    LEFT JOIN (
      SELECT
         TanuloErtekeles.*
        ,FelhasznaloErtekelo.C_NYOMTATASINEV
      FROM T_TANULOERTEKELES_OSSZES TanuloErtekeles
        INNER JOIN T_OSZTALYCSOPORT_OSSZES Osztaly ON Osztaly.TOROLT = 'F' AND Osztaly.ID = TanuloErtekeles.C_ROGZITESKORITANULOOSZTALYID
          AND Osztaly.C_TANEVID = TanuloErtekeles.C_TANEVID
          AND Osztaly.C_FELADATKATEGORIAID = @feladatKategoriaId
        INNER JOIN T_FELHASZNALO_OSSZES FelhasznaloErtekelo ON FelhasznaloErtekelo.TOROLT = 'F' AND FelhasznaloErtekelo.ID = TanuloErtekeles.C_ERTEKELOID
          AND FelhasznaloErtekelo.C_TANEVID = TanuloErtekeles.C_TANEVID
        INNER JOIN #TanuloOsztalyEvfolyamTipusIdList Evfolyam ON Evfolyam.TanuloId = TanuloErtekeles.C_TANULOID AND Evfolyam.EvfolyamTipusId = Osztaly.C_EVFOLYAMTIPUSA
      WHERE TanuloErtekeles.TOROLT = 'F'
        AND TanuloErtekeles.C_TANTARGYID = @pTantargyId
        AND TanuloErtekeles.C_TANEVID = @pTanevId
        AND TanuloErtekeles.C_ROGZITESKORITANULOOSZTALYID IS NOT NULL
        AND TanuloErtekeles.C_ISMAGATARTASSZORGALOM = 'F'

      UNION

      SELECT
         TanuloErtekeles.*
        ,FelhasznaloErtekelo.C_NYOMTATASINEV
      FROM T_TANULOERTEKELES_OSSZES TanuloErtekeles
        INNER JOIN T_OSZTALYCSOPORT_OSSZES Osztaly ON Osztaly.TOROLT = 'F' AND Osztaly.ID = TanuloErtekeles.C_OSZTALYCSOPORTID
          AND Osztaly.C_TANEVID = TanuloErtekeles.C_TANEVID
          AND Osztaly.C_FELADATKATEGORIAID = @feladatKategoriaId
        INNER JOIN T_FELHASZNALO_OSSZES FelhasznaloErtekelo ON FelhasznaloErtekelo.TOROLT = 'F' AND FelhasznaloErtekelo.ID = TanuloErtekeles.C_ERTEKELOID
          AND FelhasznaloErtekelo.C_TANEVID = TanuloErtekeles.C_TANEVID
      WHERE TanuloErtekeles.TOROLT = 'F'
        AND TanuloErtekeles.C_TANTARGYID = @pTantargyId
        AND TanuloErtekeles.C_TANEVID = @pTanevId
        AND TanuloErtekeles.C_ROGZITESKORITANULOOSZTALYID IS NULL
        AND TanuloErtekeles.C_ISMAGATARTASSZORGALOM = 'F'
    ) AS TanuloErtekeles ON TanuloErtekeles.C_TANULOID = TanuloCsoport.C_TANULOID
    LEFT JOIN T_TANARIATLAGSULY_OSSZES TanariAtlagSuly ON TanariAtlagSuly.TOROLT = 'F' AND TanariAtlagSuly.C_TANEVID = TanuloCsoport.C_TANEVID
      AND TanariAtlagSuly.C_ERTEKELESMODID = TanuloErtekeles.C_ERTEKELESMODID
    LEFT JOIN #Mentessegek TanuloMentesseg ON TanuloMentesseg.TanuloId = FelhasznaloTanulo.ID AND TanuloMentesseg.RowNumber = 1
  WHERE TanuloCsoport.TOROLT = 'F'
    AND TanuloCsoport.C_TANEVID = @pTanevId
    AND TanuloCsoport.C_OSZTALYCSOPORTID = @pOsztalyCsoportId
    AND TanuloCsoport.C_BELEPESDATUM <= @pDatum
    AND (TanuloCsoport.C_KILEPESDATUM > @pDatum OR TanuloCsoport.C_KILEPESDATUM IS NULL OR TanuloCsoport.C_KILEPESDATUM >= Tanev.C_UTOLSOTANITASINAP)

END


GO

