DROP PROCEDURE IF EXISTS uspGetSzervezetData
GO

CREATE PROCEDURE uspGetSzervezetData
   @pIntezmenyId int
  ,@pTanevId int
  ,@pSzervezetId int = NULL
  ,@pAdatokHalmaza int = 1 -- 0: megadott szervezet és alszervezetei, 1: megadott szervezet (SzervezetId = NULL esetén az ősszes székhely), 2: megadott szervezet alszervezetei
  ,@pNev nvarchar(255) = NULL
  ,@pAzonosito nvarchar(255) = NULL
  ,@pSzervezetCime nvarchar(255) = NULL
  ,@pTanulokSzamaTol int = NULL
  ,@pTanulokSzamaIg int = NULL
  ,@pOktatokSzamaTol int = NULL
  ,@pOktatokSzamaIg int = NULL
  ,@pCsoportokSzamaTol int = NULL
  ,@pCsoportokSzamaIg int = NULL
  ,@pTantargyakSzamaTol int = NULL
  ,@pTantargyakSzamaIg int = NULL
  ,@pHelyszinSzamaTol int = NULL
  ,@pHelyszinSzamaIg int = NULL
AS
BEGIN

  SET NOCOUNT ON;

  DECLARE @sql nvarchar(max) = N''

  SET @sql = N'
    CREATE TABLE #LathatoSzervezetek (ID int)
    INSERT INTO #LathatoSzervezetek (ID)
    SELECT lsz.ID
    FROM fnGetLathatoSzervezetek(@pIntezmenyId, @pTanevId, @pSzervezetId, @pAdatokHalmaza) lsz
  '

  SET @sql += N'
    SELECT * FROM (
      SELECT
         sz.ID AS SzervezetId
        ,sz.C_TIPUS AS SzervezetTipus
        ,sz.C_NEV AS SzervezetNev
        ,sz.C_AZONOSITO AS SzervezetAzonosito
        ,sz.C_SZERVEZETCIM AS SzervezetCim
        ,sz.C_DUALISHELYSZINTIPUSID AS HelyszinTipusId
        ,COUNT(DISTINCT cs.ID) AS CsoportokSzama
        ,COUNT(DISTINCT ma.ID) AS OktatokSzama
        ,COUNT(DISTINCT tta.ID) AS TanulokSzama
        ,COUNT(DISTINCT tt.ID) AS TantargyakSzama
        ,COUNT(DISTINCT t.ID) AS HelyszinekSzama
        ,sz.CREATOR AS RogzitoId
        ,sz.C_PARENTSZERVEZETID AS ParentSzervezetId
        ,psz.C_NEV AS ParentSzervezetNev
      FROM T_SZERVEZET_OSSZES sz
        INNER JOIN #LathatoSzervezetek lsz ON lsz.ID = sz.ID
        LEFT JOIN T_CSOPORT_OSSZES cs ON cs.C_SZERVEZETID = sz.ID AND cs.C_ALTANEVID = sz.C_TANEVID AND cs.TOROLT = ''F''
        LEFT JOIN T_MUNKAUGYIADATOK_OSSZES ma ON ma.C_SZERVEZETID = sz.ID AND ma.C_TANEVID = sz.C_TANEVID AND ma.TOROLT = ''F''
        LEFT JOIN T_TANULOTANUGYIADATOK_OSSZES tta ON tta.C_SZERVEZETID = sz.ID AND tta.C_TANEVID = sz.C_TANEVID AND tta.TOROLT = ''F''
        LEFT JOIN T_TANTARGY_OSSZES tt ON tt.C_SZERVEZETID = sz.ID AND tt.C_TANEVID = sz.C_TANEVID AND tt.TOROLT = ''F''
        LEFT JOIN T_TEREM_OSSZES t ON t.C_SZERVEZETID = sz.ID AND t.C_TANEVID = sz.C_TANEVID AND t.TOROLT = ''F''
        LEFT JOIN T_SZERVEZET_OSSZES psz ON psz.ID = sz.C_PARENTSZERVEZETID AND psz.C_TANEVID = sz.C_TANEVID AND psz.TOROLT = ''F''
      WHERE sz.C_TANEVID = @pTanevId
        AND sz.TOROLT = ''F''
      GROUP BY sz.ID, sz.C_NEV, sz.C_SZERVEZETCIM, sz.C_AZONOSITO, sz.C_TIPUS, sz.C_DUALISHELYSZINTIPUSID, sz.CREATOR, sz.C_PARENTSZERVEZETID, psz.C_NEV
    ) x
    WHERE 1 = 1
  '

  SET @sql = CONCAT(
     @sql
    ,IIF(@pNev > N'', N' AND SzervezetNev LIKE N''%'' + @pNev + N''%''', N'')
    ,IIF(@pAzonosito > N'', N' AND SzervezetAzonosito LIKE N''%'' + @pAzonosito + N''%''', N'')
    ,IIF(@pSzervezetCime > N'', N' AND SzervezetCim LIKE N''%'' + @pSzervezetCime + N''%''', N'')
    ,IIF(@pTanulokSzamaTol IS NOT NULL, N' AND TanulokSzama >=' + CAST(@pTanulokSzamaTol AS char(10)) + ' ', N'')
    ,IIF(@pTanulokSzamaIg IS NOT NULL, N' AND TanulokSzama <=' + CAST(@pTanulokSzamaIg AS char(10)) + ' ', N'')
    ,IIF(@pOktatokSzamaTol IS NOT NULL, N' AND OktatokSzama >=' + CAST(@pOktatokSzamaTol AS char(10)) + ' ', N'')
    ,IIF(@pOktatokSzamaIg IS NOT NULL, N' AND OktatokSzama <=' + CAST(@pOktatokSzamaIg AS char(10)) + ' ', N'')
    ,IIF(@pCsoportokSzamaTol IS NOT NULL, N' AND CsoportokSzama >=' + CAST(@pCsoportokSzamaTol AS char(10)) + ' ', N'')
    ,IIF(@pCsoportokSzamaIg IS NOT NULL, N' AND CsoportokSzama <=' + CAST(@pCsoportokSzamaIg AS char(10)) + ' ', N'')
    ,IIF(@pTantargyakSzamaTol IS NOT NULL, N' AND TantargyakSzama >=' + CAST(@pTantargyakSzamaTol AS char(10)) + ' ', N'')
    ,IIF(@pTantargyakSzamaIg IS NOT NULL, N' AND TantargyakSzama <=' + CAST(@pTantargyakSzamaIg AS char(10)) + ' ', N'')
    ,IIF(@pHelyszinSzamaTol IS NOT NULL, N' AND HelyszinSzama >=' + CAST(@pHelyszinSzamaTol AS char(10)) + ' ', N'')
    ,IIF(@pHelyszinSzamaIg IS NOT NULL, N' AND HelyszinSzama <=' + CAST(@pHelyszinSzamaIg AS char(10)) + ' ', N'')
  )

  EXECUTE sp_executesql @sql, N'
     @pIntezmenyId int
    ,@pTanevId int
    ,@pSzervezetId int
    ,@pAdatokHalmaza int
    ,@pNev nvarchar(255)
    ,@pAzonosito nvarchar(255)
    ,@pSzervezetCime nvarchar(255)'
    ,@pIntezmenyId = @pIntezmenyId
    ,@pTanevId = @pTanevId
    ,@pSzervezetId = @pSzervezetId
    ,@pAdatokHalmaza = @pAdatokHalmaza
    ,@pNev = @pNev
    ,@pAzonosito = @pAzonosito
    ,@pSzervezetCime = @pSzervezetCime

END

GO

