DROP PROCEDURE IF EXISTS dbo.uspGetEntitySzervezetList
GO

CREATE PROCEDURE dbo.uspGetEntitySzervezetList(
  @pEntityId int
  ,@pEntityName nvarchar(250)
)
AS
BEGIN

  SET NOCOUNT ON;

  DECLARE @lekerdezesDatuma datetime = GETDATE()

  -- Védelem arra az esetre ha feltünne az adatbázisban egy újabb tábla C_SZERVEZETID oszloppal.
  DECLARE @missing_table nvarchar(100);
  SELECT TOP 1
    @missing_table = N'Kezeletlen tábla: ' + t.name
  FROM sys.tables t
    INNER JOIN sys.columns c on c.object_id = t.object_id
  WHERE c.name = 'C_SZERVEZETID'
    AND t.name NOT IN ('T_MUNKAUGYIADATOK', 'T_TANULOTANUGYIADATOK', 'T_TEREM', 'T_CSOPORT', 'T_TANTARGY','T_SZAKMUNKASZERZODES','T_IGAZOLAS')

  IF @missing_table IS NOT NULL THROW 50000, @missing_table, 1;

  -- ebbe a táblába gyűjtjük a találatokat
  CREATE TABLE #Result(
    EntitasNev sysname, 
    SzervezetId int, 
    Cnt int
  )

  IF @pEntityName IN ('T_TANULO')
  BEGIN

    INSERT INTO #Result(EntitasNev, SzervezetId, Cnt)
    SELECT 'T_CSOPORT' as EntitasNev, cs.C_SZERVEZETID AS SzervezetId, COUNT(1) AS Cnt
    FROM T_TANULOCSOPORT_OSSZES tcs
      INNER JOIN T_CSOPORT_OSSZES cs ON cs.ID = tcs.C_OSZTALYCSOPORTID
        AND cs.TOROLT = 'F'
    WHERE tcs.C_TANULOID = @pEntityId
      AND tcs.TOROLT = 'F'
      AND tcs.C_BELEPESDATUM <= @lekerdezesDatuma AND (tcs.C_KILEPESDATUM IS NULL OR tcs.C_KILEPESDATUM > @lekerdezesDatuma)
      AND cs.C_SZERVEZETID IS NOT NULL
    GROUP BY cs.C_SZERVEZETID

    INSERT INTO #Result(EntitasNev, SzervezetId, Cnt)
    SELECT
       'T_TANTARGY' AS EntitasNev
      ,tt.C_SZERVEZETID AS SzervezetId
      ,COUNT(1) AS Cnt
    FROM T_TANULOCSOPORT_OSSZES tcs
      INNER JOIN T_ORARENDIORA_OSSZES oo ON oo.C_OSZTALYCSOPORTID = tcs.C_OSZTALYCSOPORTID
        AND oo.TOROLT = 'F'
      INNER JOIN T_TANTARGY_OSSZES tt ON tt.ID = oo.C_TANTARGYID
        AND tt.TOROLT = 'F'
    WHERE tcs.C_TANULOID = @pEntityId
      AND tcs.TOROLT = 'F'
      AND tcs.C_BELEPESDATUM <= @lekerdezesDatuma AND (tcs.C_KILEPESDATUM IS NULL OR tcs.C_KILEPESDATUM > @lekerdezesDatuma)
      AND tt.C_SZERVEZETID IS NOT NULL
    GROUP BY tt.C_SZERVEZETID

    INSERT INTO #Result(EntitasNev, SzervezetId, Cnt)
    SELECT
       'T_TEREM' AS EntitasNev
      ,t.C_SZERVEZETID AS SzervezetId
      ,COUNT(1) AS Cnt
    FROM T_TANULOCSOPORT_OSSZES tcs
      INNER JOIN T_ORARENDIORA_OSSZES oo ON oo.C_OSZTALYCSOPORTID = tcs.C_OSZTALYCSOPORTID
        AND oo.TOROLT = 'F'
      INNER JOIN T_TEREM_OSSZES t ON t.ID = oo.C_TEREMID
        AND t.TOROLT = 'F'
    WHERE tcs.C_TANULOID = @pEntityId
      AND tcs.TOROLT = 'F'
      AND tcs.C_BELEPESDATUM <= @lekerdezesDatuma AND (tcs.C_KILEPESDATUM IS NULL OR tcs.C_KILEPESDATUM > @lekerdezesDatuma)
      AND t.C_SZERVEZETID IS NOT NULL
    GROUP BY t.C_SZERVEZETID

    INSERT INTO #Result(EntitasNev, SzervezetId, Cnt)
    SELECT
       'T_TANULOTANUGYIADATOK' AS EntitasNev
      ,ta.C_SZERVEZETID AS SzervezetId
      ,COUNT(1) AS Cnt
    FROM T_TANULOCSOPORT_OSSZES tcs
      INNER JOIN T_TANULOTANUGYIADATOK_OSSZES ta ON ta.C_TANULOCSOPORTID = tcs.ID
        AND ta.TOROLT = 'F'
    WHERE tcs.C_TANULOID = @pEntityId
      AND tcs.TOROLT = 'F'
      AND ta.C_SZERVEZETID IS NOT NULL
    GROUP BY ta.C_SZERVEZETID

  END

  IF @pEntityName IN ('T_ALKALMAZOTT')
  BEGIN

    INSERT INTO #Result(EntitasNev, SzervezetId, Cnt)
    SELECT
       'T_MUNKAUGYIADATOK' AS EntitasNev
      ,m.C_SZERVEZETID AS SzervezetId
      ,COUNT(1) AS Cnt
    FROM T_MUNKAUGYIADATOK_OSSZES m
    WHERE m.C_ALKALMAZOTTID = @pEntityId
      AND m.TOROLT = 'F'
      AND m.C_SZERVEZETID IS NOT NULL
    GROUP BY m.C_SZERVEZETID

    INSERT INTO #Result(EntitasNev, SzervezetId, Cnt)
    SELECT
       'T_TEREM' AS EntitasNev
      ,t.C_SZERVEZETID AS SzervezetId
      ,COUNT(1) AS Cnt
    FROM T_ORARENDIORA_OSSZES oo 
      INNER JOIN T_TEREM_OSSZES t ON t.ID = oo.C_TEREMID
        AND t.TOROLT = 'F'
    WHERE oo.C_TANARID = @pEntityId
      AND oo.TOROLT = 'F'
      AND t.C_SZERVEZETID IS NOT NULL
    GROUP BY t.C_SZERVEZETID

    INSERT INTO #Result(EntitasNev, SzervezetId, Cnt)
    SELECT
       'T_TANTARGY' AS EntitasNev
      ,tt.C_SZERVEZETID AS SzervezetId
      ,COUNT(1) AS Cnt
    FROM T_ORARENDIORA_OSSZES oo 
      INNER JOIN T_TANTARGY_OSSZES tt ON tt.ID = oo.C_TANTARGYID
        AND tt.TOROLT = 'F'
    WHERE oo.C_TANARID = @pEntityId
      AND oo.TOROLT = 'F'
      AND tt.C_SZERVEZETID IS NOT NULL
    GROUP BY tt.C_SZERVEZETID

  END

  -- csak visszaadjuk az eredményt
  SELECT * FROM #Result
END

GO