﻿DROP PROCEDURE IF EXISTS uspGetOraSorszamByOsztaly
GO

CREATE PROCEDURE uspGetOraSorszamByOsztaly
   @osztalyCsoportId int
  ,@datum date
  ,@intezmenyId int
  ,@tanevId int
AS
BEGIN
  
  SET NOCOUNT ON;
  DECLARE 
     @tanarSzamit bit
    ,@osztalybontasEgybe bit
    ,@osztalybontasCsoport bit
    ,@osszerendelesId int 
    ,@kezdoErtek int

  SET @tanarSzamit = dbo.fnGetRendszerbeallitasEnumBool(3075, @intezmenyId, @tanevId)  
  SET @osztalybontasEgybe = dbo.fnGetRendszerbeallitasEnumBool(3078, @intezmenyId, @tanevId)
  SET @osztalybontasCsoport = 0

  IF EXISTS (SELECT 1 FROM T_CSOPORT_OSSZES WHERE TOROLT='F' AND ((ID = @osztalyCsoportId AND C_OSZTALYBONTASID IS NOT NULL) OR C_OSZTALYBONTASID = @osztalyCsoportId)) 
  BEGIN
    SET @osztalybontasCsoport = 1
  END
  
  IF (@osztalybontasEgybe = 1 AND @osztalybontasCsoport = 1)
  BEGIN
    CREATE TABLE #kapcsolodoOsztalyCsoportok (OsztalyCsoportId int)
    INSERT INTO #kapcsolodoOsztalyCsoportok (OsztalyCsoportId)
    SELECT cs.ID
    FROM T_CSOPORT_OSSZES cs
    WHERE cs.C_OSZTALYBONTASID = (SELECT scs.C_OSZTALYBONTASID FROM T_CSOPORT scs WHERE scs.ID = @osztalyCsoportId) AND cs.TOROLT='F'
    UNION  
    SELECT cs.C_OSZTALYBONTASID 
    FROM T_CSOPORT_OSSZES cs
    WHERE cs.ID = @osztalyCsoportId AND cs.TOROLT='F'
    UNION
    SELECT cs.ID
    FROM T_CSOPORT_OSSZES cs
    WHERE cs.C_OSZTALYBONTASID = @osztalyCsoportId AND cs.TOROLT='F'
    UNION
    SELECT @osztalyCsoportId
  END

  SELECT 
    @osszerendelesId = h.ID 
  FROM T_ORASORSZAMOZASHALMAZ_OSSZES h
    INNER JOIN T_ORASORSZAMOZASHALMAZOSSZEREN_OSSZES oh ON h.ID = oh.C_ORASORSZAMOZASHALMAZID
      AND oh.C_OSZTALYCSOPORTID = @osztalycsoportId
      AND oh.TOROLT='F'
  WHERE h.TOROLT='F'
  --Van összerendelés
  IF @osszerendelesId IS NOT NULL BEGIN
    SELECT 
       @tanarSzamit = IIF(C_KOZOSORASORSZAMOZASELTEROTAN = 'T',1,0)
      ,@kezdoErtek = ISNULL(C_KEZDOERTEK-1,0)
    FROM T_ORASORSZAMOZASHALMAZ_OSSZES 
    WHERE ID = @osszerendelesId AND TOROLT='F'
    
      IF @tanarSzamit = 1 BEGIN
          SELECT 
             ID
            ,ROW_NUMBER() OVER(PARTITION BY C_TANARID,C_TANTARGYID ORDER BY C_ORAKEZDETE,C_NEV)+IIF(C_TANTARGYID = -1, @kezdoErtek, 0) OraSorszam
          FROM(
            SELECT
               tao.ID
              ,tao.C_ORAKEZDETE
              ,tao.C_TANTARGYID
              ,ocs.C_NEV
              ,tao.C_TANARID
            FROM T_TANITASIORA_OSSZES tao
              INNER JOIN T_OSZTALYCSOPORT_OSSZES ocs ON ocs.ID = tao.C_OSZTALYCSOPORTID AND ocs.TOROLT='F'
            WHERE tao.C_OSZTALYCSOPORTID = @osztalyCsoportId
              AND tao.C_DATUM <= @datum
              AND tao.C_SORSZAMOZANDO = 'T'
              AND tao.TOROLT='F'
              AND tao.C_MEGTARTOTT = 'T'
              AND NOT EXISTS (
                SELECT 1 
                FROM T_ORASORSZAMOZASHALMAZOSSZEREN_OSSZES
                WHERE C_ORASORSZAMOZASHALMAZID = @osszerendelesId
                  AND C_TANTARGYID = tao.C_TANTARGYID 
                  AND C_OSZTALYCSOPORTID = tao.C_OSZTALYCSOPORTID
                  AND TOROLT='F'
                )
            UNION ALL
            SELECT
               tao.ID
              ,tao.C_ORAKEZDETE
              ,-1 as C_TANTARGYID
              ,ocs.C_NEV
              ,tao.C_TANARID
            FROM T_ORASORSZAMOZASHALMAZOSSZEREN_OSSZES oh
              INNER JOIN T_TANITASIORA_OSSZES tao ON tao.C_TANTARGYID = oh.C_TANTARGYID AND tao.C_OSZTALYCSOPORTID = oh.C_OSZTALYCSOPORTID
                AND tao.C_SORSZAMOZANDO = 'T' AND tao.C_MEGTARTOTT ='T' AND tao.TOROLT='F' AND tao.C_DATUM <= @datum
              INNER JOIN T_OSZTALYCSOPORT_OSSZES ocs ON ocs.TOROLT='F' AND ocs.ID = tao.C_OSZTALYCSOPORTID AND ocs.TOROLT='F'
            WHERE oh.C_ORASORSZAMOZASHALMAZID = @osszerendelesId
              AND oh.TOROLT='F'
          ) MindenOra
      END
      ELSE BEGIN
          SELECT 
             ID
            ,ROW_NUMBER() OVER(PARTITION BY C_TANTARGYID ORDER BY C_ORAKEZDETE,C_NEV)+IIF(C_TANTARGYID = -1, @kezdoErtek, 0) OraSorszam
          FROM(
            SELECT
               tao.ID
              ,tao.C_ORAKEZDETE
              ,tao.C_TANTARGYID
              ,ocs.C_NEV
            FROM T_TANITASIORA_OSSZES tao
              INNER JOIN T_OSZTALYCSOPORT_OSSZES ocs ON ocs.ID = tao.C_OSZTALYCSOPORTID AND ocs.TOROLT='F'
            WHERE tao.C_OSZTALYCSOPORTID = @osztalycsoportId 
              AND tao.C_DATUM <= @datum
              AND tao.C_SORSZAMOZANDO = 'T'
              AND tao.C_MEGTARTOTT = 'T'
              AND tao.TOROLT='F'
              AND NOT EXISTS (
                SELECT 1 
                FROM T_ORASORSZAMOZASHALMAZOSSZEREN_OSSZES
                WHERE C_ORASORSZAMOZASHALMAZID = @osszerendelesId
                  AND C_TANTARGYID = tao.C_TANTARGYID 
                  AND C_OSZTALYCSOPORTID = tao.C_OSZTALYCSOPORTID
                  AND TOROLT='F'
                )
            UNION ALL
            SELECT
               tao.ID
              ,tao.C_ORAKEZDETE
              ,-1 as C_TANTARGYID
              ,ocs.C_NEV
            FROM T_ORASORSZAMOZASHALMAZOSSZEREN_OSSZES oh
              INNER JOIN T_TANITASIORA_OSSZES tao ON tao.C_TANTARGYID = oh.C_TANTARGYID AND tao.C_OSZTALYCSOPORTID = oh.C_OSZTALYCSOPORTID
                AND tao.C_SORSZAMOZANDO = 'T' AND tao.C_MEGTARTOTT ='T'  AND tao.TOROLT='F' AND tao.C_DATUM <= @datum
              INNER JOIN T_OSZTALYCSOPORT_OSSZES ocs ON ocs.TOROLT='F' AND ocs.ID = tao.C_OSZTALYCSOPORTID AND ocs.TOROLT='F'
            WHERE oh.C_ORASORSZAMOZASHALMAZID = @osszerendelesId AND oh.TOROLT='F'
          ) MindenOra
    END
  END
  ELSE 
  BEGIN
    IF @osztalybontasEgybe = 0 OR @osztalybontasCsoport = 0 BEGIN
      IF @tanarSzamit = 1 BEGIN
	      SELECT
           t.ID AS TanitasiOraId
          ,ROW_NUMBER() OVER (PARTITION BY t.C_TANARID, t.C_TANTARGYID ORDER BY t.C_ORAKEZDETE, C_BEJEGYZESIDEJE) AS OraSorszam
        FROM T_TANITASIORA_OSSZES t
        WHERE t.C_MEGTARTOTT = 'T'
          AND t.C_SORSZAMOZANDO = 'T'
          AND t.C_DATUM <= @datum
	      AND t.TOROLT = 'F'
          AND t.C_INTEZMENYID = @intezmenyid
          AND t.C_TANEVID = @tanevId
          AND t.C_OSZTALYCSOPORTID = @osztalyCsoportId
      END 
      ELSE BEGIN
        SELECT 
           t.ID AS TanitasiOraId
          ,ROW_NUMBER() OVER (PARTITION BY t.C_TANTARGYID ORDER BY C_ORAKEZDETE, C_BEJEGYZESIDEJE) AS OraSorszam
        FROM T_TANITASIORA_OSSZES t
        WHERE t.C_MEGTARTOTT = 'T' 
          AND t.C_SORSZAMOZANDO = 'T'
          AND t.C_OSZTALYCSOPORTID = @osztalyCsoportId
          AND t.C_DATUM <= @datum    
          AND t.TOROLT = 'F'
          AND t.C_INTEZMENYID = @intezmenyid
          AND t.C_TANEVID = @tanevId
      END
    END 
    ELSE BEGIN
      IF @tanarSzamit = 1 BEGIN
        SELECT 
           t.ID AS TanitasiOraId
          ,ROW_NUMBER() OVER (PARTITION BY t.C_TANTARGYID,t.C_TANARID ORDER BY C_ORAKEZDETE, C_BEJEGYZESIDEJE) AS OraSorszam
        FROM T_TANITASIORA_OSSZES t
        WHERE t.C_OSZTALYCSOPORTID IN (SELECT OsztalyCsoportId FROM #kapcsolodoOsztalyCsoportok)
          AND t.C_DATUM <= @datum
          AND t.C_SORSZAMOZANDO = 'T'
          AND t.C_MEGTARTOTT = 'T'
	        AND t.TOROLT = 'F'
          AND t.C_INTEZMENYID = @intezmenyid
          AND t.C_TANEVID = @tanevId
      END
      ELSE BEGIN
        SELECT 
           t.ID AS TanitasiOraId
          ,ROW_NUMBER() OVER (PARTITION BY t.C_TANTARGYID ORDER BY C_ORAKEZDETE, C_BEJEGYZESIDEJE) AS OraSorszam
        FROM T_TANITASIORA_OSSZES t
        WHERE t.C_OSZTALYCSOPORTID IN (SELECT OsztalyCsoportId FROM #kapcsolodoOsztalyCsoportok)
          AND t.C_DATUM <= @datum
          AND t.C_SORSZAMOZANDO = 'T'
          AND t.C_MEGTARTOTT = 'T'
	        AND t.TOROLT = 'F'
          AND t.C_INTEZMENYID = @intezmenyid
          AND t.C_TANEVID = @tanevId
      END
    END
  END
END
GO
