DROP PROCEDURE IF EXISTS uspCsoportKeresesForSzervezet
GO

CREATE PROCEDURE uspCsoportKeresesForSzervezet   
  @pTanevId INT = null
  ,@pIntezmenyId INT = null
  ,@pSearchDate DATETIME = null
  ,@pCsoportNev NVARCHAR(512) = null
  ,@pTeremID INT = null
  ,@pCsopTipID INT = null
  ,@pSzervezetId INT = null
  ,@pSzervezetekHalmaza INT = null
  ,@pCsopvezID INT = null
  ,@pTanulokSzamaTol INT = null
  ,@pTanulokSzamaIg INT = null
  ,@pSzervezetNev NVARCHAR(512) = null
  ,@pSzervezetAdoszam NVARCHAR(512) = null
AS
SET NOCOUNT ON;

SELECT
  T_CSOPORT_OSSZES.ID
  ,T_TANEV_OSSZES.C_NEV AS TanevNev
  ,T_TANEV_OSSZES.ID AS TanevId
  ,T_OSZTALYCSOPORT_OSSZES.C_NEV AS CsoportNev
  ,ISNULL(T_OSZTALYCSOPORT_OSSZES.C_EVFOLYAMTIPUSA, osztalyBontasNev.C_EVFOLYAMTIPUSA) AS EvfolyamTipusaId
  ,T_TEREM_OSSZES.c_nev AS TeremNev
  ,T_OSZTALYCSOPORT_OSSZES.C_VEGZOSEVFOLYAM AS Vegzos
  ,T_CSOPORT_OSSZES.C_TIPUSA AS CsopTip
  ,CONCAT(ISNULL(TANULOK.SZAM,0), ' (', ISNULL(tcsArchiv.ArchivTanulokSzama, 0), ')') AS TanulokSzama
  ,ISNULL(TANULOK.SZAM, 0) * 1000 + ISNULL(tcsArchiv.ArchivTanulokSzama, 0) AS TanulokSzamaOrder
  ,ISNULL(TANULOK.SZAM,0) AS AktualisTanulokSzama
  ,T_DICTIONARYITEMBASE_OSSZES.C_VALUE AS EvfolyamSorszama
  ,osztalyBontasNev.C_NEV AS OsztalyBontasNev
  ,T_OSZTALYCSOPORT_OSSZES.C_MUVESZETIAGID AS MuveszetiAgId
  ,T_OSZTALYCSOPORT_OSSZES.CREATOR AS RogzitoId
  ,sz.ID AS SzervezetId
  ,sz.C_NEV AS SzervezetNeve
  ,sz.C_AZONOSITO AS SzervezetAdoszama
  ,fh.C_NYOMTATASINEV AS CsoportvezetoNev
  ,T_OSZTALYCSOPORT_OSSZES.C_MEGJEGYZES AS Megjegyzes
FROM T_CSOPORT_OSSZES WITH(NOLOCK)
INNER JOIN T_OSZTALYCSOPORT_OSSZES WITH(NOLOCK) ON  T_OSZTALYCSOPORT_OSSZES.ID = T_CSOPORT_OSSZES.ID AND T_OSZTALYCSOPORT_OSSZES.TOROLT = 'F'
LEFT JOIN T_OSZTALYCSOPORT_OSSZES osztalyBontasNev WITH(NOLOCK) ON  osztalyBontasNev.ID = T_CSOPORT_OSSZES.C_OSZTALYBONTASID AND osztalyBontasNev.TOROLT = 'F'
LEFT JOIN T_TANEV_OSSZES ON  T_TANEV_OSSZES.ID = T_OSZTALYCSOPORT_OSSZES.C_TANEVID AND T_TANEV_OSSZES.TOROLT = 'F'
LEFT JOIN T_TEREM_OSSZES ON  T_TEREM_OSSZES.ID = T_OSZTALYCSOPORT_OSSZES.C_TEREMID AND T_TEREM_OSSZES.TOROLT = 'F'
LEFT JOIN T_DICTIONARYITEMBASE_OSSZES ON  T_DICTIONARYITEMBASE_OSSZES.ID = T_OSZTALYCSOPORT_OSSZES.C_EVFOLYAMTIPUSA AND T_DICTIONARYITEMBASE_OSSZES.C_INTEZMENYID = T_OSZTALYCSOPORT_OSSZES.C_INTEZMENYID AND T_DICTIONARYITEMBASE_OSSZES.C_TANEVID = T_OSZTALYCSOPORT_OSSZES.C_TANEVID AND T_DICTIONARYITEMBASE_OSSZES.TOROLT = 'F'
INNER JOIN (
  T_SZERVEZET_OSSZES sz
  INNER JOIN (
      SELECT ID FROM dbo.fnGetLathatoSzervezetek(@pIntezmenyId, @pTanevId, @pSzervezetId, @pSzervezetekHalmaza)) AS lathato ON lathato.ID = sz.ID
  ) ON sz.ID = T_CSOPORT_OSSZES.C_SZERVEZETID AND sz.C_TANEVID = T_CSOPORT_OSSZES.C_ALTANEVID AND sz.TOROLT = 'F'
LEFT JOIN (
  SELECT
    C_OSZTALYCSOPORTID
    ,COUNT(DISTINCT C_TANULOID) AS SZAM
  FROM T_TANULOCSOPORT_OSSZES WITH(NOLOCK)
  INNER JOIN T_TANEV_OSSZES tanev ON  tanev.ID = T_TANULOCSOPORT_OSSZES.C_TANEVID AND tanev.C_INTEZMENYID = T_TANULOCSOPORT_OSSZES.C_INTEZMENYID
  WHERE T_TANULOCSOPORT_OSSZES.TOROLT = 'F'
    AND (
      (
        IIF( @pSearchDate > tanev.C_UTOLSONAP ,tanev.C_UTOLSONAP,@pSearchDate) BETWEEN T_TANULOCSOPORT_OSSZES.C_BELEPESDATUM AND ISNULL(T_TANULOCSOPORT_OSSZES.C_KILEPESDATUM, tanev.C_UTOLSONAP) AND tanev.C_AKTIV = 'T'
      )
      OR
      tanev.C_AKTIV = 'F'
    )
  GROUP BY C_OSZTALYCSOPORTID
) TANULOK ON TANULOK.C_OSZTALYCSOPORTID = T_CSOPORT_OSSZES.ID
LEFT JOIN (
  SELECT
    COUNT(DISTINCT C_TANULOID) AS ArchivTanulokSzama
    ,C_OSZTALYCSOPORTID
  FROM T_TANULOCSOPORT_OSSZES tcs WITH(NOLOCK)
  WHERE tcs.TOROLT = 'F'
  GROUP BY C_OSZTALYCSOPORTID
) tcsArchiv ON tcsArchiv.C_OSZTALYCSOPORTID = T_CSOPORT_OSSZES.ID
LEFT JOIN T_FELHASZNALO_OSSZES fh ON fh.ID = T_CSOPORT_OSSZES.C_CSOPORTVEZETOID AND fh.TOROLT ='F' AND fh.C_TANEVID = T_CSOPORT_OSSZES.C_ALTANEVID
WHERE T_CSOPORT_OSSZES.TOROLT = 'F'
  AND T_CSOPORT_OSSZES.C_ALTANEVID = @pTanevId
  AND (@pCsoportNev IS NULL OR T_OSZTALYCSOPORT_OSSZES.C_NEV LIKE '%' + @pCsoportNev + '%')
  AND (@pCsopTipID IS NULL OR T_CSOPORT_OSSZES.C_TIPUSA = @pCsopTipID)
  AND (@pTeremID IS NULL OR T_OSZTALYCSOPORT_OSSZES.C_TEREMID = @pTeremID)
  AND (@pCsopvezID IS NULL OR T_CSOPORT_OSSZES.C_CSOPORTVEZETOID = @pCsopvezID)
  AND (@pTanulokSzamaTol IS NULL OR ISNULL(TANULOK.SZAM, 0) >= @pTanulokSzamaTol)
  AND (@pTanulokSzamaIg IS NULL OR  ISNULL(TANULOK.SZAM, 0) <= @pTanulokSzamaIg)
  AND (@pSzervezetNev IS NULL OR sz.C_NEV LIKE '%' + @pSzervezetNev + '%')
  AND (@pSzervezetAdoszam IS NULL OR sz.C_AZONOSITO LIKE '%' + @pSzervezetAdoszam + '%')
OPTION(RECOMPILE)
GO