﻿DROP PROCEDURE IF EXISTS uspGetEvesOraszamForTantargyAndOsztaly
GO

CREATE PROCEDURE uspGetEvesOraszamForTantargyAndOsztaly
   @pTanevId int
  ,@pIntezmenyId int
  ,@pOsztalyCsoportId int
  ,@pTantargyId int
  ,@pBeallitasTanarSzamit int
  ,@pBeallitasOsztalybontasEgybe int
AS BEGIN
  SET NOCOUNT ON;

  DECLARE
     @pTanarSzamit bit
    ,@pOsztalybontasEgybe bit
    ,@pOsztalybontasCsoport bit

  SET @pTanarSzamit = dbo.fnGetRendszerbeallitasEnumBool(@pBeallitasTanarSzamit, @pIntezmenyId, @pTanevId)
  SET @pOsztalybontasEgybe = dbo.fnGetRendszerbeallitasEnumBool(@pBeallitasOsztalybontasEgybe, @pIntezmenyId, @pTanevId)

  IF EXISTS (SELECT 1
             FROM T_CSOPORT_OSSZES cs
             WHERE cs.TOROLT = 'F'
               AND cs.C_ALTANEVID = @pTanevId
               AND ((cs.ID = @pOsztalyCsoportId AND cs.C_OSZTALYBONTASID IS NOT NULL) OR cs.C_OSZTALYBONTASID = @pOsztalyCsoportId))
  BEGIN
    SET @pOsztalybontasCsoport = 1
  END

  IF @pOsztalybontasEgybe = 0 OR @pOsztalybontasCsoport = 0
  BEGIN
    IF @pTanarSzamit = 1
    BEGIN

      SELECT
        COUNT(t.ID) AS EvesOraszam
      FROM T_TANITASIORA_OSSZES t
      WHERE t.C_MEGTARTOTT = 'T'
        AND t.C_SORSZAMOZANDO = 'T'
        AND t.C_TANTARGYID = @pTantargyId
        AND t.C_OSZTALYCSOPORTID = @pOsztalyCsoportId
        AND t.C_TANEVID = @pTanevId
        AND t.TOROLT = 'F'
      GROUP BY t.C_TANARID

    END
    ELSE
    BEGIN

      SELECT
        COUNT(t.ID) AS EvesOraszam
      FROM T_TANITASIORA_OSSZES t
      WHERE t.C_MEGTARTOTT = 'T'
        AND t.C_SORSZAMOZANDO = 'T'
        AND t.C_TANTARGYID = @pTantargyId
        AND t.C_OSZTALYCSOPORTID = @pOsztalyCsoportId
        AND t.C_TANEVID = @pTanevId
        AND t.TOROLT = 'F'

    END
  END
  ELSE
  BEGIN

    CREATE TABLE #KapcsolodoOsztalyCsoportok (
       ID int
      ,PRIMARY KEY (ID)
    )

    INSERT INTO #KapcsolodoOsztalyCsoportok (
      ID
    )
    (
      SELECT cs.ID AS ID
      FROM T_CSOPORT_OSSZES cs
      WHERE cs.TOROLT = 'F'
        AND cs.C_ALTANEVID = @pTanevId
        AND cs.C_OSZTALYBONTASID =
        (
          SELECT scs.C_OSZTALYBONTASID
          FROM T_CSOPORT_OSSZES scs
          WHERE scs.TOROLT = 'F'
            AND scs.C_ALTANEVID = @pTanevId
            AND scs.ID = @pOsztalyCsoportId
            AND scs.C_OSZTALYBONTASID IS NOT NULL
        )

      UNION

      SELECT cs.C_OSZTALYBONTASID AS ID
      FROM T_CSOPORT_OSSZES cs
      WHERE cs.TOROLT = 'F'
        AND cs.C_ALTANEVID = @pTanevId
        AND cs.ID = @pOsztalyCsoportId
        AND cs.C_OSZTALYBONTASID IS NOT NULL

      UNION

      SELECT cs.ID AS ID
      FROM T_CSOPORT_OSSZES cs
      WHERE cs.TOROLT = 'F'
        AND cs.C_ALTANEVID = @pTanevId
        AND cs.C_OSZTALYBONTASID = @pOsztalyCsoportId

      UNION

      SELECT @pOsztalyCsoportId AS ID
    )

    IF @pTanarSzamit = 1
    BEGIN

      SELECT
        COUNT(t.ID) AS EvesOraszam
      FROM T_TANITASIORA_OSSZES t
        INNER JOIN #KapcsolodoOsztalyCsoportok k ON k.ID = t.C_OSZTALYCSOPORTID
      WHERE t.C_MEGTARTOTT = 'T'
        AND t.C_SORSZAMOZANDO = 'T'
        AND t.C_TANTARGYID = @pTantargyId
        AND t.C_TANEVID = @pTanevId
        AND t.TOROLT = 'F'
      GROUP BY t.C_TANARID

    END
    ELSE
    BEGIN

      SELECT
        COUNT(t.ID) AS EvesOraszam
      FROM T_TANITASIORA_OSSZES t
        INNER JOIN #KapcsolodoOsztalyCsoportok k ON k.ID = t.C_OSZTALYCSOPORTID
      WHERE t.C_MEGTARTOTT = 'T'
        AND t.C_SORSZAMOZANDO = 'T'
        AND t.C_TANTARGYID = @pTantargyId
        AND t.C_TANEVID = @pTanevId
        AND t.TOROLT = 'F'

    END
  END
END

GO
