/*
  Minden olyan esetben amikor egy osztályhoz tartozó csoportokat kell meghatározni, 
  akkor az alábbi módon kell ezeket megadni:
    a. Egy osztályhoz tartozik minden olyan csoport, amelynek tagja az osztály bármelyik tanulója.
       Tehát ha egy osztályból akár egyetlen tanuló is tagja egy csoportnak, akkor az az osztályhoz is kapcsolódik.
    b. Továbbá egy osztályhoz mindig kapcsolódnak az osztálybontásosnak jelölt csoportjaik is, 
       függetlenül attól, hogy abban van-e tanuló!
*/

IF OBJECT_ID('fnGetKapcsolodoOsztalycsoportokByDate') IS NOT NULL BEGIN
  DROP FUNCTION fnGetKapcsolodoOsztalycsoportokByDate
END
GO

CREATE FUNCTION fnGetKapcsolodoOsztalycsoportokByDate (@osztalyCsoportId int, @start datetime, @end datetime)
  RETURNS TABLE
RETURN (
  SELECT @osztalyCsoportId AS ID, 'OsztalycsoportOraja' AS OKA
  UNION
  SELECT ID, 'OsztalybontottOra' AS OKA FROM T_CSOPORT_OSSZES  
  WHERE C_OSZTALYBONTASID = @osztalyCsoportId
  UNION 
  SELECT DISTINCT tcs.C_OSZTALYCSOPORTID, 'TanuloMasOra' AS OKA FROM T_TANULOCSOPORT_OSSZES tcs
  WHERE tcs.C_TANULOID IN (
    SELECT x.C_TANULOID FROM T_TANULOCSOPORT_OSSZES x 
    WHERE x.C_OSZTALYCSOPORTID = @osztalyCsoportId 
		AND (x.C_BELEPESDATUM <= @end AND (x.C_KILEPESDATUM > @start OR x.C_KILEPESDATUM IS NULL)) 
    )
	  AND (tcs.C_BELEPESDATUM <= @end AND (tcs.C_KILEPESDATUM > @start OR tcs.C_KILEPESDATUM IS NULL)) 
    AND tcs.C_OSZTALYCSOPORTID <> @osztalyCsoportId
    AND tcs.C_OSZTALYCSOPORTID NOT IN (
      SELECT ID FROM T_CSOPORT_OSSZES  
      WHERE C_OSZTALYBONTASID = @osztalyCsoportId
    )
    AND tcs.C_OSZTALYCSOPORTID NOT IN (
      SELECT C_OSZTALYBONTASID AS ID FROM T_CSOPORT_OSSZES
    WHERE ID = @osztalyCsoportId 
      AND C_OSZTALYBONTASID IS NOT NULL    
    )
    AND tcs.C_OSZTALYCSOPORTID NOT IN (
      SELECT ID
      FROM T_CSOPORT_OSSZES 
      WHERE C_OSZTALYBONTASID IN (
        SELECT C_OSZTALYBONTASID 
        FROM T_CSOPORT_OSSZES 
        WHERE ID = @osztalyCsoportId
      )
    )
  UNION
  SELECT C_OSZTALYBONTASID AS ID, 'OsztalybontottOra' AS OKA FROM T_CSOPORT_OSSZES
  WHERE ID = @osztalyCsoportId 
    AND C_OSZTALYBONTASID IS NOT NULL
  UNION
  SELECT ID, 'OsztalybontottOra' AS OKA FROM T_CSOPORT_OSSZES 
  WHERE C_OSZTALYBONTASID IN (
    SELECT C_OSZTALYBONTASID FROM T_CSOPORT_OSSZES 
    WHERE ID = @osztalyCsoportId
  )
  AND ID <> @osztalyCsoportId
)
GO
