﻿/*
  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ó!
*/

DROP FUNCTION IF EXISTS fnGetKapcsolodoOsztalycsoportok
GO

CREATE FUNCTION fnGetKapcsolodoOsztalycsoportok (
   @osztalyCsoportId int
)
  RETURNS @ocs TABLE (ID int)
AS BEGIN

  DECLARE @kategoriaId int = (SELECT C_FELADATKATEGORIAID FROM T_OSZTALYCSOPORT_OSSZES WHERE ID = @osztalyCsoportId)

  INSERT INTO @ocs
  SELECT @osztalyCsoportId AS ID /* Önmaga */

  UNION

  SELECT ID /* Osztály esetén, a bontott csoportok */
  FROM T_CSOPORT_OSSZES
  WHERE C_OSZTALYBONTASID = @osztalyCsoportId  AND TOROLT = 'F'

  UNION

  SELECT C_OSZTALYBONTASID AS ID /* Csoport esetén, a ha bontott, akkor az osztálya */
  FROM T_CSOPORT_OSSZES
  WHERE ID = @osztalyCsoportId
    AND C_OSZTALYBONTASID IS NOT NULL AND TOROLT = 'F'

  UNION

  SELECT ID /* Csoport esetén, a ha bontott, akkor az osztályának a többi csoportbontása */
  FROM T_CSOPORT_OSSZES
  WHERE C_OSZTALYBONTASID IN (
    SELECT C_OSZTALYBONTASID FROM T_CSOPORT_OSSZES
    WHERE ID = @osztalyCsoportId AND TOROLT = 'F'
  ) AND TOROLT ='F'

  UNION

  SELECT tcs2.C_OSZTALYCSOPORTID /* Azok az osztálycsoportok, ahová járnak tanulók a @osztalyCsoportId-ból */
  FROM T_TANULOCSOPORT_OSSZES tcs
    INNER JOIN T_TANULOCSOPORT_OSSZES tcs2 ON tcs2.C_TANULOID = tcs.C_TANULOID
    INNER JOIN T_OSZTALYCSOPORT_OSSZES ocs ON ocs.ID = tcs2.C_OSZTALYCSOPORTID
  --NOTE: A T_CSOPORT_OSSZES INNER JOIN-ra azért van szükség, mert az AMI-nál visszaadná a többi osztályt is, amibe még jár, de azok nem kapcsolódóak.
    INNER JOIN T_CSOPORT_OSSZES cs ON cs.ID = ocs.ID AND cs.C_OSZTALYBONTASID IS NULL
  INNER JOIN T_TANEV_OSSZES tanev ON tanev.ID = tcs.C_TANEVID AND tanev.TOROLT = 'F'
  WHERE tcs.C_OSZTALYCSOPORTID = @osztalyCsoportId
    AND tcs.C_BELEPESDATUM <= GETDATE() AND (tcs.C_KILEPESDATUM > GETDATE() OR tcs.C_KILEPESDATUM IS NULL OR tcs.C_KILEPESDATUM >= tanev.C_UTOLSOTANITASINAP)
    AND tcs2.C_BELEPESDATUM <= GETDATE() AND (tcs2.C_KILEPESDATUM > GETDATE() OR tcs2.C_KILEPESDATUM IS NULL OR tcs2.C_KILEPESDATUM >= tanev.C_UTOLSOTANITASINAP)
    AND tcs.TOROLT = 'F'
    AND tcs2.TOROLT = 'F'
    AND ocs.C_FELADATKATEGORIAID = @kategoriaId

    RETURN
END
GO