﻿DROP PROCEDURE IF EXISTS uspGetTanuloOsztalyCsoportjai
GO

CREATE PROCEDURE uspGetTanuloOsztalyCsoportjai
   @pTanuloIds nvarchar (max)
  ,@pTanevId int
  ,@pIsAktiv bit
  ,@pFeladatKategoriaId int
  ,@pOsztalyfonokIds nvarchar (max)
  ,@pOktatasiNevelesiFeladatId int = null
AS BEGIN
  SET NOCOUNT ON;

  DECLARE
     @tanevNev nvarchar (30)
    ,@sql nvarchar (max) =N''

  SELECT
    @tanevNev = C_NEV
  FROM T_TANEV
  WHERE ID = @pTanevId

  IF @pTanuloIds IS NOT NULL BEGIN
    SET @sql += N'
      CREATE TABLE #TanuloIds (TanuloId int)
      INSERT INTO #TanuloIds(TanuloId)
      SELECT value FROM STRING_SPLIT(@pTanuloIds,'','')
    '
  END

  IF @pOsztalyfonokIds IS NOT NULL BEGIN
    SET @sql += N'
      CREATE TABLE #OsztalyFonokok (OsztalyFonokId int)
      INSERT INTO #OsztalyFonokok(OsztalyFonokId)
      SELECT value FROM STRING_SPLIT(@pOsztalyfonokIds,'','')
    '
  END

  SET @sql += N'
  SELECT DISTINCT
     CASE WHEN @pTanuloIds IS NULL THEN -1 ELSE tcs.ID END AS ID
    ,tcs.C_OSZTALYCSOPORTID AS OsztalyCsoportId
    ,ocs.C_NEV AS Nev
    ,ocs.C_EVFOLYAMTIPUSA AS EvfolyamTipus
    ,ocs.C_FELADATKATEGORIAID AS FeladatKategoriaId
    ,feh.C_OKTATASINEVELESIFELADATTIPUS AS OktatasiNevelesiFeladatId
    ,@tanevNev AS Tanev
    ,CASE WHEN @pOsztalyfonokIds IS NULL THEN tcs.C_TANULOID ELSE -1 END AS TanuloId
    ,tcs.C_BELEPESDATUM AS ErvKezd
    ,tcs.C_KILEPESDATUM AS ErvVeg
    ,cs.C_TIPUSA AS CsoportTipus
    ,ob.C_NEV AS Osztalybontas
    ,ocs.C_KEPZESIFORMA AS KepzesiForma
    ,CASE WHEN o.ID IS NOT NULL THEN ''F'' ELSE ''T'' END AS IsCsoport
    ,o.C_OSZTALYFONOKID AS OsztalyfonokId
    ,o.C_OFOHELYETTESID AS OsztalyfonokHelyettesId
    ,cs.C_CSOPORTVEZETOID AS CsoportVezetoId
  FROM T_TANULOCSOPORT_OSSZES tcs
    INNER JOIN T_OSZTALYCSOPORT_OSSZES ocs ON ocs.ID = tcs.C_OSZTALYCSOPORTID '+IIF(@pFeladatKategoriaId IS NULL,'','AND ocs.C_FELADATKATEGORIAID = @pFeladatKategoriaId')+ N'
      AND ocs.TOROLT = ''F''
      AND ocs.C_TANEVID = tcs.C_TANEVID
    INNER JOIN T_FELADATELLATASIHELY feh ON ocs.C_FELADATELLATASIHELYID = feh.ID 
      AND feh.TOROLT = ''F''
      AND feh.C_TANEVID = tcs.C_TANEVID
    LEFT JOIN T_CSOPORT_OSSZES cs ON cs.ID = ocs.ID
      AND cs.TOROLT = ''F''
      AND cs.C_ALTANEVID = tcs.C_TANEVID
    LEFT JOIN T_OSZTALYCSOPORT_OSSZES ob ON ob.ID = cs.C_OSZTALYBONTASID
      AND ob.TOROLT = ''F''
      AND ob.C_TANEVID = tcs.C_TANEVID
    LEFT JOIN T_OSZTALY_OSSZES o ON ocs.ID = o.ID
      AND o.TOROLT = ''F''
      AND o.C_ALTANEVID = tcs.C_TANEVID
    '+IIF(@pTanuloIds IS NOT NULL,' INNER JOIN #TanuloIds t ON t.Tanuloid = tcs.C_TANULOID','')+'
    '+IIF(@pOsztalyfonokIds IS NOT NULL,' INNER JOIN #OsztalyFonokok osztf ON osztf.OsztalyFonokId = o.C_OSZTALYFONOKID','')+'
  WHERE tcs.TOROLT = ''F''
    AND tcs.C_TANEVID = @tanevId'
    + IIF(@pOktatasiNevelesiFeladatId IS NOT NULL, ' AND feh.C_OKTATASINEVELESIFELADATTIPUS = @pOktatasiNevelesiFeladatId', '')
    + IIF(@pIsAktiv = 1, ' AND tcs.C_BELEPESDATUM <= GETDATE() AND (tcs.C_KILEPESDATUM IS NULL OR tcs.C_KILEPESDATUM > GETDATE())', '')

  EXEC sp_executesql @sql, N'
     @pTanuloIds nvarchar (max)
    ,@tanevNev nvarchar (30)
    ,@tanevId int
    ,@pFeladatKategoriaId int
    ,@pOsztalyfonokIds nvarchar (max)
    ,@pOktatasiNevelesiFeladatId int'
    ,@pTanuloIds = @pTanuloIds
    ,@tanevNev = @tanevNev
    ,@tanevId = @pTanevId
    ,@pFeladatKategoriaId = @pFeladatKategoriaId
    ,@pOsztalyfonokIds = @pOsztalyfonokIds
    ,@pOktatasiNevelesiFeladatId = @pOktatasiNevelesiFeladatId

END
GO
