﻿-- =============================================
-- Description: <Előszedjük a tanuló értékeléseket tantárgy alapján>
-- =============================================
DROP PROCEDURE IF EXISTS [dbo].[uspGetTanuloErtekelesDataSetByTantargy]
GO

CREATE PROCEDURE [dbo].[uspGetTanuloErtekelesDataSetByTantargy]
   @pIntezmenyId int
  ,@pTanevId int
  ,@pTanarId int
  ,@pTantargyId int
  ,@pOsztalyCsoportId int
  ,@pDatum date = NULL
AS
BEGIN
  SET NOCOUNT ON;
  
  IF @pDatum IS NULL BEGIN
    SET @pDatum = GETDATE()
  END

  CREATE TABLE #TanuloOsztalyEvfolyamTipusIdList(
     TanuloId INT PRIMARY KEY
    ,EvfolyamTipusId INT
  )
  INSERT INTO #TanuloOsztalyEvfolyamTipusIdList
  SELECT 
     TanuloId
    ,EvfolyamTipusId 
  FROM dbo.fnGetOsztalyCsoportTanuloOsztalyList(@pIntezmenyId, @pTanevId, @pOsztalyCsoportId, @pDatum)

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

  INSERT INTO #Mentessegek (
     TanuloId
    ,C_MENTESSEGOKA
    ,C_ERTEKELESMENTESITES
    ,C_SZOVEGESENERTEKELHETO
    ,rn
  ) SELECT 
     C_TANULOID
    ,C_MENTESSEGOKA
    ,C_ERTEKELESMENTESITES
    ,C_SZOVEGESENERTEKELHETO
    ,ROW_NUMBER() OVER (PARTITION BY C_TANULOID ORDER BY C_KEZDETE DESC) rn
  FROM T_TANULOMENTESSEG_OSSZES 
  WHERE TOROLT='F' AND C_TANTARGYID = @pTantargyId AND ((C_KEZDETE IS NULL OR C_KEZDETE <= @pDatum) AND (C_VEGE IS NULL OR 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_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 --NOTE: Azért TanuloCsoport-ból indul ki, mert a tanulókat akkor is meg kell jeleníteni, ha nincs értékelésük
    INNER JOIN T_FELHASZNALO_OSSZES FelhasznaloTanulo ON FelhasznaloTanulo.TOROLT = 'F' AND FelhasznaloTanulo.ID = TanuloCsoport.C_TANULOID
    INNER JOIN T_OSZTALYCSOPORT_OSSZES OsztalyCsoport ON OsztalyCsoport.TOROLT = 'F' AND OsztalyCsoport.ID = TanuloCsoport.C_OSZTALYCSOPORTID 
    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 
        INNER JOIN T_FELHASZNALO_OSSZES FelhasznaloErtekelo ON FelhasznaloErtekelo.TOROLT = 'F' AND FelhasznaloErtekelo.ID = TanuloErtekeles.C_ERTEKELOID
        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
      UNION ALL 
      SELECT TanuloErtekeles.*,FelhasznaloErtekelo.C_NYOMTATASINEV
      FROM T_TANULOERTEKELES_OSSZES TanuloErtekeles
        INNER JOIN T_FELHASZNALO_OSSZES FelhasznaloErtekelo ON FelhasznaloErtekelo.TOROLT = 'F' AND FelhasznaloErtekelo.ID = TanuloErtekeles.C_ERTEKELOID
      WHERE TanuloErtekeles.TOROLT = 'F' AND TanuloErtekeles.C_TANTARGYID = @pTantargyId AND TanuloErtekeles.C_ROGZITESKORITANULOOSZTALYID IS NULL
    ) AS TanuloErtekeles ON TanuloErtekeles.C_TANULOID = TanuloCsoport.C_TANULOID
    LEFT JOIN T_TANARIATLAGSULY_OSSZES TanariAtlagSuly ON TanariAtlagSuly.TOROLT = 'F'
      AND TanariAtlagSuly.C_ERTEKELESMODID = TanuloErtekeles.C_ERTEKELESMODID AND TanuloErtekeles.C_ISMAGATARTASSZORGALOM = 'F' AND TanuloErtekeles.C_ERTEKELESOSZTALYZATID IS NOT NULL
    LEFT JOIN #Mentessegek TanuloMentesseg ON TanuloMentesseg.TanuloId = FelhasznaloTanulo.ID AND TanuloMentesseg.rn = 1
  WHERE TanuloCsoport.TOROLT = 'F' AND TanuloCsoport.C_OSZTALYCSOPORTID = @pOsztalyCsoportId 
    AND TanuloCsoport.C_BELEPESDATUM <= @pDatum AND (TanuloCsoport.C_KILEPESDATUM IS NULL OR TanuloCsoport.C_KILEPESDATUM > @pDatum)
    
END
GO
