﻿DROP PROCEDURE IF EXISTS uspGetOralatogatasData
GO

CREATE PROCEDURE uspGetOralatogatasData
   @pTanevId int
  ,@pFelhasznaloId int
  ,@pTol datetime = NULL
  ,@pIg datetime = NULL
  ,@pIsTanar bit
  ,@pTanarId int = NULL
  ,@pLatogatottPedagogusId int = NULL
  ,@pOsztalyCsoportId int = NULL
  ,@pIsKellKapcsolodoCsoportok bit
  ,@pTantargyId int = NULL
  ,@pFeladatKategoriaId int = NULL
  ,@pFeladatEllatasiHelyId int = NULL
AS
BEGIN
  SET NOCOUNT ON;

  DECLARE @sql nvarchar(max)
    ,@ertekeloId int

  SET @sql = N'
  SELECT 
     Oralatogatas.ID
    ,TanitasiOra.ID AS TanitasiOraId
    ,Oralatogatas.C_DATUM AS Datum
    ,CONVERT(nvarchar(25), Oralatogatas.C_DATUM, 102) AS DatumST
    ,ISNULL(DIB_VezetoiOraszamok.C_NAME, DIB_Beosztas.C_NAME) AS Beosztas
    ,TanitasiOra.C_ORASZAM AS Oraszam
    ,Felhasznalo.C_NYOMTATASINEV AS Alkalmazott
    ,Felhasznalo.ID AS AlkalmazottId
    ,Felhasznalo.C_VEZETEKNEV + '' '' + Felhasznalo.C_UTONEV AS AlkalmazottElotagNelkul
    ,Tantargy.C_NEV AS Tantargy
    ,OsztalyCsoport.C_NEV AS OsztalyCsoport
    ,IIF(Oralatogatas.C_ERTEKELOID = @pFelhasznaloId, ''T'', ''F'') AS IsSajatErtekeles
    ,LatogatottPedagogus.C_NYOMTATASINEV AS LatogatottPedagogus
    ,LatogatottPedagogus.Id AS LatogatottPedagogusId
  FROM T_ORALATOGATAS_OSSZES Oralatogatas
    INNER JOIN T_TANITASIORA_OSSZES TanitasiOra ON TanitasiOra.ID = Oralatogatas.C_MEGTARTOTTORAID AND TanitasiOra.TOROLT = ''F''
    INNER JOIN T_OSZTALYCSOPORT_OSSZES OsztalyCsoport ON OsztalyCsoport.ID = TanitasiOra.C_OSZTALYCSOPORTID AND OsztalyCsoport.TOROLT = ''F''
    INNER JOIN T_TANTARGY_OSSZES Tantargy ON Tantargy.ID = TanitasiOra.C_TANTARGYID AND Tantargy.TOROLT = ''F''
    INNER JOIN T_FELHASZNALO_OSSZES Felhasznalo ON Felhasznalo.ID = Oralatogatas.C_ERTEKELOID AND Felhasznalo.TOROLT = ''F''
    INNER JOIN T_MUNKAUGYIADATOK_OSSZES MunkaugyiAdatok ON MunkaugyiAdatok.C_ALKALMAZOTTID = Oralatogatas.C_ERTEKELOID AND MunkaugyiAdatok.TOROLT = ''F''
    LEFT JOIN T_DICTIONARYITEMBASE_OSSZES DIB_VezetoiOraszamok ON DIB_VezetoiOraszamok.ID = MunkaugyiAdatok.C_VEZETOIORASZAMOK AND MunkaugyiAdatok.C_VEZETOIORASZAMOK <> 6571 AND DIB_VezetoiOraszamok.TOROLT = ''F'' AND DIB_VezetoiOraszamok.C_TANEVID = MunkaugyiAdatok.C_TANEVID
    LEFT JOIN T_DICTIONARYITEMBASE_OSSZES DIB_Beosztas ON DIB_Beosztas.ID = MunkaugyiAdatok.C_MUNKAKORTIPUSA AND DIB_Beosztas.TOROLT = ''F'' AND DIB_Beosztas.C_TANEVID = MunkaugyiAdatok.C_TANEVID
    INNER JOIN T_FELHASZNALO_OSSZES LatogatottPedagogus ON LatogatottPedagogus.ID = TanitasiOra.C_TANARID AND LatogatottPedagogus.TOROLT = ''F''
  WHERE Oralatogatas.TOROLT = ''F''
    AND Oralatogatas.C_TANEVID = @pTanevId
  '
  SET @sql += IIF(@pTol IS NOT NULL, N'
    AND Oralatogatas.C_DATUM >= @pTol', '')
  SET @sql += IIF(@pIg IS NOT NULL, N'
    AND Oralatogatas.C_DATUM <= @pIg', '')

--NOTE: Tanár esetén azok az óralátogatások kellenek, ahol vagy ő volt az értékelő,
--vagy az ő óráját értékelték (a kiválasztott tanár).
  SET @sql += 
    CASE
      WHEN (@pIsTanar = 1) AND (@pTanarId IS NOT NULL) THEN N'
    AND (Oralatogatas.C_ERTEKELOID = @pErtekeloId AND TanitasiOra.C_TANARID = @pFelhasznaloId)'
      WHEN (@pIsTanar = 1) AND (@pTanarId IS NULL) THEN N'
    AND (Oralatogatas.C_ERTEKELOID = @pErtekeloId OR TanitasiOra.C_TANARID = @pFelhasznaloId)'
      WHEN (@pIsTanar = 0) AND (@pTanarId IS NOT NULL) THEN N'
    AND Oralatogatas.C_ERTEKELOID = @pErtekeloId'
      ELSE ''
    END
  SET @ertekeloId = 
    CASE
      WHEN (@pIsTanar = 1) AND (@pTanarId IS NOT NULL) THEN @pTanarId
      WHEN (@pIsTanar = 1) AND (@pTanarId IS NULL) THEN @pFelhasznaloId
      WHEN (@pIsTanar = 0) AND (@pTanarId IS NOT NULL) THEN @pTanarId
    END
  
  SET @sql += IIF(@pOsztalyCsoportId IS NOT NULL, IIF(@pIsKellKapcsolodoCsoportok = 0, N'
    AND TanitasiOra.C_OSZTALYCSOPORTID = @pOsztalyCsoportId', N'
    AND TanitasiOra.C_OSZTALYCSOPORTID IN (SELECT ID FROM fnGetKapcsolodoOsztalycsoportok(@pOsztalyCsoportId))'), '')

  SET @sql += IIF(@pTantargyId IS NOT NULL, N'
    AND TanitasiOra.C_TANTARGYID = @pTantargyId', '')
  SET @sql += IIF(@pFeladatKategoriaId IS NOT NULL, N'
    AND OsztalyCsoport.C_FELADATKATEGORIAID = @pFeladatKategoriaId', '')
  SET @sql += IIF(@pFeladatEllatasiHelyId IS NOT NULL, N'
    AND OsztalyCsoport.C_FELADATELLATASIHELYID = @pFeladatEllatasiHelyId', '')
  SET @sql += IIF(@pLatogatottPedagogusId IS NOT NULL, N'
    AND LatogatottPedagogus.Id = @pLatogatottPedagogusId', '')
  
  EXEC sp_executesql @sql
    ,N'
      @pTanevId int
      ,@pFelhasznaloId int
      ,@pTol datetime
      ,@pIg datetime
      ,@pErtekeloId int
      ,@pOsztalyCsoportId int
      ,@pTantargyId int
      ,@pLatogatottPedagogusId int
      ,@pFeladatKategoriaId int
      ,@pFeladatEllatasiHelyId int
    '
    ,@pTanevId = @pTanevId
    ,@pFelhasznaloId = @pFelhasznaloId
    ,@pTol = @pTol
    ,@pIg = @pIg
    ,@pErtekeloId = @ertekeloId
    ,@pOsztalyCsoportId = @pOsztalyCsoportId
    ,@pTantargyId = @pTantargyId
    ,@pLatogatottPedagogusId = @pLatogatottPedagogusId
    ,@pFeladatKategoriaId = @pFeladatKategoriaId
    ,@pFeladatEllatasiHelyId = @pFeladatEllatasiHelyId
    
END