﻿-- =============================================
-- Description:  <Előszedjük a tanuló értékeléseket a megadott paraméterek alapján>
-- =============================================
DROP PROCEDURE IF EXISTS uspGetTanuloErtekelesListDataSet
GO

CREATE PROCEDURE uspGetTanuloErtekelesListDataSet
   @pTanevId int
  ,@pId int = NULL
  ,@pTanuloId int = NULL
  ,@pOsztalyCsoportId int = NULL
  ,@pCsoportTipusId int = NULL
  ,@pTantargyId int = NULL
  ,@pErtekeloId int = NULL
  ,@pOsztalyzatId int = NULL
  ,@pErtekelesModId int = NULL
  ,@pTipusId int = NULL
  ,@pDatumTol datetime = NULL
  ,@pDatumIg datetime = NULL
  ,@pRogzitesDatumTol datetime = NULL
  ,@pRogzitesDatumIg datetime = NULL
  ,@pErtekelesSzoveg nvarchar(max) = NULL
  ,@pErtekelesTema nvarchar(255) = NULL
  ,@pKellKapcsolodoCsoportok char = 'F'
  ,@pFeladatKategoriaId int = NULL
  ,@pFeladatEllatasiHelyId int = NULL
AS
BEGIN

  SET NOCOUNT ON;
  
  DECLARE 
     @sql nvarchar(max)
    ,@preSelectSql nvarchar(max) = ''
    ,@selectSql nvarchar(max)
    ,@joinSql nvarchar(max)
    ,@whereSql nvarchar(max)
    ,@postSelectSql nvarchar(max) = ''

  SET @selectSql = N'
    SELECT DISTINCT
       ert.ID AS ID
      ,ert.C_DATUM AS Datum
      ,ert.C_ROGZITESDATUM AS RogzitesDatum
      ,ert.C_TIPUSID AS TipusId
      ,ert.C_ISERTESITESELKULDVE AS IsErtesitesElkuldve
      ,ert.C_ERTEKELESMODID AS ErtekelesModId
      ,ert.C_ERTEKELESTEMA AS ErtekelesTema
      ,ert.C_ERTEKELESOSZTALYZATID AS ErtekelesOsztalyzatId
      ,ert.C_ERTEKELESSZOVEG AS ErtekelesSzoveg
      ,ert.C_ERTEKELESSZAZALEK AS ErtekelesSzazalek
      ,ert.C_ISMAGATARTASSZORGALOM AS IsMagatartasSzorgalom
      ,ert.C_MAGATARTASOSZTALYZATID AS MagatartasOsztalyzatId
      ,ert.C_MAGATARTASSZOVEG AS MagatartasSzoveg
      ,ert.C_MAGATARTASERTEKID AS MagatartasErtekId
      ,ert.C_SZORGALOMOSZTALYZATID AS SzorgalomOsztalyzatId
      ,ert.C_SZORGALOMSZOVEG AS SzorgalomSzoveg
      ,ert.C_SZORGALOMERTEKID AS SzorgalomErtekId
      ,ert.CREATED AS Created
      ,ISNULL(suly.C_SULY, 100) AS ErtekelesSuly
      ,tantargy.ID AS TantargyId
      ,ISNULL(tantargy.C_NEV, ''Magatartás/Szorgalom'') AS TantargyNev
      ,tantargy.C_TARGYKATEGORIA AS TantargyKategoriaId
      ,fotargy.ID AS FotargyId
      ,fotargy.C_NEV AS FotargyNev
      ,fotargy.C_TARGYKATEGORIA AS FotargyTantargyKategoriaId
      ,tanulo.ID AS TanuloId
      ,tanulo.C_NYOMTATASINEV AS TanuloNev
      ,IIF(tanulo.C_NEVSORREND = ''T'',                  --
         tanulo.C_UTONEV + '' '' + tanulo.C_VEZETEKNEV,    --
         tanulo.C_VEZETEKNEV + '' '' + tanulo.C_UTONEV
       )  AS TanuloNevElotagNelkul                       
      ,tanar.ID AS ErtekeloId
      ,tanar.C_NYOMTATASINEV AS ErtekeloNyomtatasiNev
      ,IIF(tanar.C_NEVSORREND = ''T'',                  --
         tanar.C_UTONEV + '' '' + tanar.C_VEZETEKNEV,  --
         tanar.C_VEZETEKNEV + '' '' + tanar.C_UTONEV
       ) AS  ErtekeloNyomtatasiNevElotagNelkul
      ,ocs.C_NEV AS OsztalyCsoportNev
      ,rogziteskoriTanuloOsztaly.ID AS RogziteskoriTanuloOsztalyId
      ,rogziteskoriTanuloOsztaly.C_EVFOLYAMTIPUSA AS RogziteskoriTanuloOsztalyEvfolyamTipusId
    FROM T_TANULOERTEKELES_OSSZES ert'
    
  SET @joinSql = N'
      LEFT JOIN T_TANARIATLAGSULY_OSSZES suly ON suly.C_TANEVID = ert.C_TANEVID
        AND suly.TOROLT = ''F''
        AND suly.C_ERTEKELESMODID = ert.C_ERTEKELESMODID
      LEFT JOIN T_TANTARGY_OSSZES tantargy ON tantargy.C_TANEVID = ert.C_TANEVID
        AND tantargy.TOROLT = ''F''
        AND tantargy.ID = ert.C_TANTARGYID
      LEFT JOIN T_TANTARGY_OSSZES fotargy ON fotargy.C_TANEVID = ert.C_TANEVID
        AND fotargy.TOROLT = ''F''
        AND fotargy.ID = tantargy.C_FOTARGYID
      LEFT JOIN T_OSZTALYCSOPORT_OSSZES rogziteskoriTanuloOsztaly ON rogziteskoriTanuloOsztaly.C_TANEVID  = ert.C_TANEVID
        AND rogziteskoriTanuloOsztaly.TOROLT = ''F''
        AND rogziteskoriTanuloOsztaly.ID = ert.C_ROGZITESKORITANULOOSZTALYID
      INNER JOIN T_FELHASZNALO_OSSZES tanulo ON tanulo.C_TANEVID = ert.C_TANEVID
        AND tanulo.TOROLT = ''F''
        AND tanulo.ID = ert.C_TANULOID
      INNER JOIN T_FELHASZNALO_OSSZES tanar ON tanar.C_TANEVID = ert.C_TANEVID
        AND tanar.TOROLT = ''F''
        AND tanar.ID = ert.C_ERTEKELOID
      INNER JOIN T_OSZTALYCSOPORT_OSSZES ocs ON ocs.C_TANEVID = ert.C_TANEVID
        AND ocs.TOROLT = ''F''
        AND ocs.ID = ert.C_OSZTALYCSOPORTID'

  SET @whereSql = N'
    WHERE ert.C_TANEVID = @pTanevId
      AND ert.TOROLT = ''F'''

  IF @pId IS NOT NULL BEGIN
    SET @whereSql += N'
      AND ert.ID = @pId'
  END
  
  IF @pTanuloId IS NOT NULL BEGIN
    SET @whereSql += N'
      AND ert.C_TANULOID = @pTanuloId'
  END

  IF @pOsztalyCsoportId IS NOT NULL BEGIN

  SET @preSelectSql += N'
    CREATE TABLE #OsztalyCsoportIdList(
        ID  int PRIMARY KEY
    )

    INSERT INTO #OsztalyCsoportIdList (ID)'
    
  IF(@pKellKapcsolodoCsoportok = 'T') BEGIN

    SET @preSelectSql += N'
     SELECT ID
     FROM fnGetKapcsolodoOsztalycsoportok(@pOsztalyCsoportId)'
  END
  ELSE BEGIN
    SET @preSelectSql += N'
      VALUES (@pOsztalyCsoportId)
      '
  END

    SET @joinSql += N'
      LEFT JOIN T_TANULOCSOPORT_OSSZES tcs ON tcs.C_TANEVID = ert.C_TANEVID
        AND tcs.TOROLT = ''F''
        AND tcs.C_TANULOID = tanulo.ID
        AND tcs.C_BELEPESDATUM <= GETDATE()
        AND (tcs.C_KILEPESDATUM IS NULL OR tcs.C_KILEPESDATUM >= GETDATE())'

    SET @whereSql += N'
      AND ert.C_OSZTALYCSOPORTID IN (SELECT ID FROM #OsztalyCsoportIdList)
      AND EXISTS (
        SELECT 1 
        FROM 
          T_TANULOCSOPORT_OSSZES tcs
        WHERE 
            tcs.C_TANEVID = ert.C_TANEVID
          AND tcs.TOROLT = ''F''
          AND tcs.C_OSZTALYCSOPORTID = @pOsztalyCsoportId 
          AND tcs.C_TANULOID = ert.C_TANULOID
      )'

    SET @postSelectSql += N'
      DROP TABLE IF EXISTS #OsztalyCsoportIdList'
  END

  IF @pCsoportTipusId IS NOT NULL BEGIN
    SET @joinSql += N'
      LEFT JOIN T_CSOPORT_OSSZES csoport ON csoport.C_ALTANEVID = ert.C_TANEVID
        AND csoport.TOROLT = ''F'' 
        AND csoport.ID = ocs.ID'

    SET @whereSql += N'
      AND csoport.C_TIPUSA = @pCsoportTipusId'
  END

  IF @pTantargyId IS NOT NULL BEGIN
    SET @whereSql += N'
      AND tantargy.ID = @pTantargyId'
  END

  IF @pErtekeloId IS NOT NULL BEGIN
    SET @whereSql += N'
      AND tanar.ID = @pErtekeloId'
  END

  IF @pOsztalyzatId IS NOT NULL BEGIN
    SET @whereSql += N'
      AND (ert.C_ERTEKELESOSZTALYZATID  = @pOsztalyzatId OR
         ert.C_MAGATARTASOSZTALYZATID  = @pOsztalyzatId OR
         ert.C_SZORGALOMOSZTALYZATID  = @pOsztalyzatId)'
  END

  IF @pErtekelesModId IS NOT NULL BEGIN
    SET @whereSql += N'
      AND ert.C_ERTEKELESMODID = @pErtekelesModId'
  END

  IF @pTipusId IS NOT NULL BEGIN
    SET @whereSql += N'
      AND ert.C_TIPUSID = @pTipusId'
  END

  IF @pDatumTol IS NOT NULL BEGIN
    --NOTE: Ide az adott nap 00:00:00 időponttal fog bejönni.
    SET @whereSql += N'
      AND ert.C_DATUM >= @pDatumTol'
  END

  IF @pDatumIg IS NOT NULL BEGIN
    --NOTE: Ide az adott nap 23:59:59 időponttal fog bejönni.
    SET @whereSql += N'
      AND ert.C_DATUM <= @pDatumIg'
  END

  IF @pRogzitesDatumTol IS NOT NULL
  BEGIN
    --NOTE: Ide az adott nap 00:00:00 időponttal fog bejönni.
    SET @whereSql += N'
      AND ert.C_ROGZITESDATUM >= @pRogzitesDatumTol'
  END

  IF @pRogzitesDatumIg IS NOT NULL BEGIN
    --NOTE: Ide az adott nap 23:59:59 időponttal fog bejönni.
    SET @whereSql += N'
      AND ert.C_ROGZITESDATUM <= @pRogzitesDatumIg'
  END

  IF @pErtekelesSzoveg IS NOT NULL BEGIN
    SET @whereSql += N'
      AND (ert.C_ERTEKELESSZOVEG  LIKE ''%'' + @pErtekelesSzoveg + ''%'' OR
         ert.C_MAGATARTASSZOVEG LIKE ''%'' + @pErtekelesSzoveg + ''%'' OR
         ert.C_SZORGALOMSZOVEG  LIKE ''%'' + @pErtekelesSzoveg + ''%'')'
  END

  IF @pErtekelesTema IS NOT NULL BEGIN
    SET @whereSql += N'
      AND ert.C_ERTEKELESTEMA LIKE ''%'' + @pErtekelesTema + ''%'''
  END

  IF @pFeladatKategoriaId IS NOT NULL BEGIN
    SET @whereSql += N'
      AND ocs.C_FELADATKATEGORIAID = @pFeladatKategoriaId'
  END

  IF @pFeladatEllatasiHelyId IS NOT NULL BEGIN
    SET @whereSql += N'
      AND ocs.C_FELADATELLATASIHELYID = @pFeladatEllatasiHelyId'
  END

  SET @sql = @preSelectSql + @selectSql + @joinSql + @whereSql + @postSelectSql
  
  --SELECT @sql
    
  EXEC sp_executesql @sql, N'
     @pTanevId int
    ,@pId int = NULL
    ,@pTanuloId int = NULL
    ,@pOsztalyCsoportId int = NULL
    ,@pCsoportTipusId int = NULL
    ,@pTantargyId int = NULL
    ,@pErtekeloId int = NULL
    ,@pOsztalyzatId int = NULL
    ,@pErtekelesModId int = NULL
    ,@pTipusId int = NULL
    ,@pDatumTol datetime = NULL
    ,@pDatumIg datetime = NULL
    ,@pRogzitesDatumTol datetime = NULL
    ,@pRogzitesDatumIg datetime = NULL
    ,@pErtekelesSzoveg nvarchar(max) = NULL
    ,@pErtekelesTema nvarchar(255) = NULL
    ,@pFeladatKategoriaId int = NULL
    ,@pFeladatEllatasiHelyId int = NULL'
    ,@pTanevId = @pTanevId
    ,@pId = @pId
    ,@pTanuloId = @pTanuloId
    ,@pOsztalyCsoportId = @pOsztalyCsoportId
    ,@pCsoportTipusId  = @pCsoportTipusId
    ,@pTantargyId = @pTantargyId
    ,@pErtekeloId = @pErtekeloId
    ,@pOsztalyzatId = @pOsztalyzatId
    ,@pErtekelesModId  = @pErtekelesModId
    ,@pTipusId = @pTipusId
    ,@pDatumTol = @pDatumTol
    ,@pDatumIg = @pDatumIg
    ,@pRogzitesDatumTol  = @pRogzitesDatumTol
    ,@pRogzitesDatumIg = @pRogzitesDatumIg
    ,@pErtekelesSzoveg = @pErtekelesSzoveg
    ,@pErtekelesTema = @pErtekelesTema
    ,@pFeladatKategoriaId = @pFeladatKategoriaId
    ,@pFeladatEllatasiHelyId = @pFeladatEllatasiHelyId
    
END
GO

