﻿-- ================================
-- CREATED: 2017-02-17
-- CREATOR: Telek Ákos
-- ================================
--
-- A négy paraméter az alábbi: 
--  •	Tanár ID-ja
--  •	Kellenek-e osztályok (ez szinte mindig igaz érték, azt állítja, hogy a lekérdezés a kapcsolódó osztályokat is include-olja)
--  •	Kellenek-e csoportok (ez azt állítja, hogy a lekérdezés a kapcsolódó csoportokat is include-olja)
--  •	Kellenek-e azok, amelyekben "csak" tanít, azaz nem ofő, vagy ilyesmi, hanem csak tanítja (ez pl osztályfőnöki funkcióknál, mulasztások kezelése hasonló esetekben hamis, azaz 0, de például feljegyzéseknél igaz).
-- Ahol át kell vezetni (zárójelben a három változó paraméter státusza):
--  •	Tanári feladatok / Feljegyzések (1,1,1), Faliújság (1,1,1) illetve Tanított tanulók (1,1,1)
--  •	Osztályfőnöki feladatok / Igazolások (1,1,0), Mulasztások kezelése (1,1,0), Naplóellenőrzés (1,0,0), Osztály tanulói (1,0,0)
--  •	Dokumentumoknál, ha tanár nyitja meg, akkor szintén
--
-- Használata:
--
-- DECLARE @kapcsolodoOsztalyok TABLE (ID int)
-- INSERT INTO @kapcsolodoOsztalyok (ID)
-- EXEC sp_GetTanarKapcsolodoOsztalyai (150621, 1, 1, 1)
--
-- SELECT * 
-- FROM T_TABLE t
--   INNER JOIN @kapcsolodoOsztalyok k ON t.C_OSZTALYCSOPORTID = k.ID  
--
/*TODO:Tobb Osztaly*//*OM-1668*/

IF OBJECT_ID(N'dbo.sp_GetTanarKapcsolodoOsztalyai') IS NOT NULL BEGIN
  DROP PROCEDURE dbo.sp_GetTanarKapcsolodoOsztalyai
END
GO

CREATE PROCEDURE dbo.sp_GetTanarKapcsolodoOsztalyai
   @tanarId int
  ,@osztalyKell bit = 1
  ,@csoportKell bit = 1
  ,@tartottOraKell bit = 1
  ,@feladatKategoriaId int = null
AS
BEGIN
  DECLARE @sql nvarchar(max)
  
  IF 1758 IN (SELECT C_SZEREPKORTIPUS FROM T_FELHASZNALO_SZEREPKOR INNER JOIN T_SZEREPKOR ON T_SZEREPKOR.ID = T_FELHASZNALO_SZEREPKOR.C_SZEREPKORID WHERE T_FELHASZNALO_SZEREPKOR.C_FELHASZNALOID = @tanarId) BEGIN
    IF @osztalyKell = 1 BEGIN 
      SET @sql = N'
        SELECT o.ID 
        FROM T_OSZTALY o
        INNER JOIN T_OSZTALYCSOPORT OsztalyCsoport ON OsztalyCsoport.ID = o.ID AND (@feladatKategoriaId IS NULL OR OsztalyCsoport.C_FELADATKATEGORIAID = @feladatKategoriaId) 
        WHERE o.C_ALTANEVID = (SELECT ID FROM T_TANEV WHERE C_AKTIV = ''T'')
          AND o.TOROLT = ''F'''
    END  
    IF @csoportKell = 1 BEGIN
      SET @sql = ISNULL(@sql + CHAR(13) + CHAR(10) + N'UNION' + CHAR(13) + CHAR(10), N'') + N'
        SELECT cs.ID 
        FROM T_CSOPORT cs
        INNER JOIN T_OSZTALYCSOPORT OsztalyCsoport ON OsztalyCsoport.ID = cs.ID AND (@feladatKategoriaId IS NULL OR OsztalyCsoport.C_FELADATKATEGORIAID = @feladatKategoriaId)
        WHERE cs.C_ALTANEVID = (SELECT ID FROM T_TANEV WHERE C_AKTIV = ''T'')
          AND cs.TOROLT = ''F'''
    END
  END
  ELSE BEGIN
  IF (SELECT C_MUNKAKORTIPUSA FROM T_MUNKAUGYIADATOK WHERE C_ALKALMAZOTTID = @tanarId) IN (1762, 1763, 3027, 3028)  BEGIN
    IF @osztalyKell = 1 BEGIN 
      SET @sql = N'
        SELECT o.ID 
        FROM T_OSZTALY o
        INNER JOIN T_OSZTALYCSOPORT OsztalyCsoport ON OsztalyCsoport.ID = o.ID AND (@feladatKategoriaId IS NULL OR OsztalyCsoport.C_FELADATKATEGORIAID = @feladatKategoriaId) 
        WHERE o.C_ALTANEVID = (SELECT ID FROM T_TANEV WHERE C_AKTIV = ''T'')
          AND o.TOROLT = ''F'''
    END  
    IF @csoportKell = 1 BEGIN
      SET @sql = ISNULL(@sql + CHAR(13) + CHAR(10) + N'UNION' + CHAR(13) + CHAR(10), N'') + N'
        SELECT cs.ID 
        FROM T_CSOPORT cs
        INNER JOIN T_OSZTALYCSOPORT OsztalyCsoport ON OsztalyCsoport.ID = cs.ID AND (@feladatKategoriaId IS NULL OR OsztalyCsoport.C_FELADATKATEGORIAID = @feladatKategoriaId) 
        WHERE cs.C_ALTANEVID = (SELECT ID FROM T_TANEV WHERE C_AKTIV = ''T'')
          AND cs.TOROLT = ''F'''
    END
  END
  ELSE BEGIN
    IF (SELECT C_VEZETOIORASZAMOK FROM T_MUNKAUGYIADATOK WHERE C_ALKALMAZOTTID = @tanarId) IN (6572, 6573, 6574) -- 6572 - Intézményvezető, 6573 - Tagintézmény-vezető, 6574 - Intézményegység-vezető
	 BEGIN
    IF @osztalyKell = 1 BEGIN 
      SET @sql = N'
        SELECT o.ID 
        FROM T_OSZTALY o
        INNER JOIN T_OSZTALYCSOPORT OsztalyCsoport ON OsztalyCsoport.ID = o.ID AND (@feladatKategoriaId IS NULL OR OsztalyCsoport.C_FELADATKATEGORIAID = @feladatKategoriaId)
        WHERE o.C_ALTANEVID = (SELECT ID FROM T_TANEV WHERE C_AKTIV = ''T'')
          AND o.TOROLT = ''F'''
    END  
    IF @csoportKell = 1 BEGIN
      SET @sql = ISNULL(@sql + CHAR(13) + CHAR(10) + N'UNION' + CHAR(13) + CHAR(10), N'') + N'
        SELECT cs.ID 
        FROM T_CSOPORT cs
        INNER JOIN T_OSZTALYCSOPORT OsztalyCsoport ON OsztalyCsoport.ID = cs.ID AND (@feladatKategoriaId IS NULL OR OsztalyCsoport.C_FELADATKATEGORIAID = @feladatKategoriaId)
        WHERE cs.C_ALTANEVID = (SELECT ID FROM T_TANEV WHERE C_AKTIV = ''T'')
          AND cs.TOROLT = ''F'''
    END
  END
  ELSE BEGIN
    IF @osztalyKell = 1 BEGIN 
      SET @sql = N'
        SELECT ocs.ID 
        FROM T_OSZTALYCSOPORT ocs
          INNER JOIN T_OSZTALY o ON o.ID = ocs.ID
        WHERE (o.C_OSZTALYFONOKID = @tanarId OR o.C_OFOHELYETTESID = @tanarId)
          AND (@feladatKategoriaId IS NULL OR ocs.C_FELADATKATEGORIAID = @feladatKategoriaId) 
          AND ocs.TOROLT = ''F'''
    END

    IF @csoportKell = 1 BEGIN
      SET @sql = ISNULL(@sql + CHAR(13) + CHAR(10) + N'UNION' + CHAR(13) + CHAR(10), N'') + N'
        SELECT ocs.ID 
        FROM T_OSZTALYCSOPORT ocs
          INNER JOIN T_CSOPORT cs ON cs.ID = ocs.ID
        WHERE cs.C_CSOPORTVEZETOID = @tanarId
          AND (@feladatKategoriaId IS NULL OR ocs.C_FELADATKATEGORIAID = @feladatKategoriaId) 
          AND ocs.TOROLT = ''F'''
    END
    
    IF @tartottOraKell = 1 BEGIN
      IF @osztalyKell = 1 BEGIN 
        SET @sql = ISNULL(@sql + CHAR(13) + CHAR(10) + 'UNION' + CHAR(13) + CHAR(10), '') + '
          SELECT f.C_OSZTALYCSOPORTID 
          FROM T_FOGLALKOZAS f
            INNER JOIN T_OSZTALY o ON o.id = f.C_OSZTALYCSOPORTID
          WHERE f.C_TANARID = @tanarId
            AND f.TOROLT = ''F''
            AND o.TOROLT = ''F'''
      END
      IF @osztalyKell = 1 BEGIN 
        SET @sql = ISNULL(@sql + CHAR(13) + CHAR(10) + 'UNION' + CHAR(13) + CHAR(10), '') + '
          SELECT f.C_OSZTALYCSOPORTID 
          FROM T_FOGLALKOZAS f
            INNER JOIN T_CSOPORT cs ON cs.id = f.C_OSZTALYCSOPORTID
          WHERE f.C_TANARID = @tanarId
            AND f.TOROLT = ''F''
            AND cs.TOROLT = ''F'''
      END
    END
  END
  END
END
  EXEC sp_executesql @sql, N'@tanarId int, @feladatKategoriaId int', @tanarId, @feladatKategoriaId
  
END
GO

 
