﻿DROP FUNCTION IF EXISTS fnGetOsztalyCsoportokUtolsoTanitasiNap
GO

CREATE FUNCTION fnGetOsztalyCsoportokUtolsoTanitasiNap (@pTanevId int  ,@pOsztalyCsoportId int = NULL
)
returns @ResultTable TABLE (OsztalycsoportId int, UtolsoTanitasiNap Datetime, VegzosEvfolyam CHAR(1))
AS BEGIN
  DECLARE @VegzosUtolsoTanitasiNap datetime;
    SELECT @VegzosUtolsoTanitasiNap = MIN(C_DATUM)
    FROM T_TANEVRENDJE_OSSZES
    WHERE TOROLT = 'F'
      AND C_TANEVID = @pTanevId
      AND C_NAPTIPUSA IN (1402, 7600, 7601, 7602, 7603, 1395) 
      AND C_OSSZESCSOPORTRAVONATKOZIK = 'T'

INSERT INTO @ResultTable (OsztalycsoportId, UtolsoTanitasiNap, VegzosEvfolyam)
  SELECT
       ocs.ID AS OsztalycsoportId
      ,IIF(C_VEGZOSEVFOLYAM = 'T', IIF(x.C_OSZTALYCSOPORTID IS NOT NULL, NewVegeDatum, @VegzosUtolsoTanitasiNap), t.C_UTOLSONAP) AS UtolsoTanitasiNap
      ,C_VEGZOSEVFOLYAM AS VegzosEvfolyam
    FROM T_OSZTALYCSOPORT_OSSZES ocs
    INNER JOIN T_TANEV_OSSZES t ON t.ID = @pTanevId AND t.ID = ocs.C_TANEVID AND t.TOROLT = 'F'
    LEFT JOIN (
        SELECT MIN(tr.C_DATUM) AS NewVegeDatum, ocstr.C_OSZTALYCSOPORTID
        FROM T_TANEVRENDJE_OSSZES tr
          INNER JOIN T_OSZTALYCSOPORT_TANEVRENDJE ocstr ON ocstr.C_TANEVRENDJEID = tr.ID
        WHERE tr.C_OSSZESCSOPORTRAVONATKOZIK = 'F'
          AND tr.TOROLT = 'F'
          AND tr.C_NAPTIPUSA IN (1402, 7600, 7601, 7602, 7603)
          AND tr.C_TANEVID = @pTanevId
        GROUP BY ocstr.C_OSZTALYCSOPORTID
      ) x ON x.C_OSZTALYCSOPORTID = ocs.Id
    WHERE (@pOsztalyCsoportId IS NULL OR @pOsztalyCsoportId = ocs.ID) AND ocs.TOROLT = 'F'
    RETURN

END
GO
