﻿DROP FUNCTION IF EXISTS fnGetElsoUtolsoTanitasiNapFelevVege
GO

CREATE FUNCTION fnGetElsoUtolsoTanitasiNapFelevVege(@tanevId INT, @osztalyCsoportId INT)
RETURNS @result TABLE 
(
   ElsoTanitasiNap datetime
  ,UtolsoTanitasiNap datetime
  ,FelevVege datetime
)
AS 
BEGIN
  DECLARE @isVegzos char(1) = (SELECT C_VEGZOSEVFOLYAM FROM T_OSZTALYCSOPORT_OSSZES WHERE ID = @osztalyCsoportId)
  DECLARE @isKeresztfeleves char(1) = (SELECT C_KERESZTFELEVES FROM T_OSZTALYCSOPORT_OSSZES WHERE ID = @osztalyCsoportId)

  DECLARE @utolsoNapForMindenVegzos datetime = (
    SELECT TOP 1 C_DATUM 
    FROM (
      SELECT C_DATUM 
      FROM T_TANEVRENDJE_OSSZES 
      WHERE C_OSSZESCSOPORTRAVONATKOZIK = 'T' 
        AND C_NAPTIPUSA IN (1402, 7600, 7601, 7603) 
        AND C_TANEVID = @tanevId 
        AND TOROLT = 'F') o ORDER BY C_DATUM)
  DECLARE @utolsoNapForMindenNemVegzos datetime = (SELECT C_DATUM FROM T_TANEVRENDJE_OSSZES WHERE C_OSSZESCSOPORTRAVONATKOZIK = 'T' AND C_NAPTIPUSA = 1395 AND C_TANEVID = @tanevId AND TOROLT = 'F')
  DECLARE @utolsoNapForOsztalyVegzos datetime = (
    SELECT TOP 1 C_DATUM
    FROM (
      SELECT C_DATUM FROM T_TANEVRENDJE_OSSZES tr 
        INNER JOIN T_OSZTALYCSOPORT_TANEVRENDJE ocstr ON tr.ID = ocstr.C_TANEVRENDJEID
      WHERE C_NAPTIPUSA IN (1402, 7600, 7601, 7603)
        AND C_OSZTALYCSOPORTID = @osztalyCsoportId
        AND tr.C_TANEVID = @tanevId
        AND tr.TOROLT = 'F') o ORDER BY C_DATUM)
  DECLARE @utolsoNapForOsztalyNemVegzos datetime = (
    SELECT C_DATUM FROM T_TANEVRENDJE_OSSZES tr 
      INNER JOIN T_OSZTALYCSOPORT_TANEVRENDJE ocstr ON tr.ID = ocstr.C_TANEVRENDJEID 
    WHERE C_NAPTIPUSA = 1395 AND C_OSZTALYCSOPORTID = @osztalyCsoportId AND tr.TOROLT = 'F')

  DECLARE @utolsoNapForMindenKeresztfelevesVegzos datetime = (SELECT C_DATUM FROM T_TANEVRENDJE_OSSZES WHERE C_OSSZESCSOPORTRAVONATKOZIK = 'T' AND C_NAPTIPUSA = 7602 AND C_TANEVID = @tanevId AND TOROLT = 'F')
  DECLARE @utolsoNapForMindenKeresztfelevesNemVegzos datetime = (SELECT C_DATUM FROM T_TANEVRENDJE_OSSZES WHERE C_OSSZESCSOPORTRAVONATKOZIK = 'T' AND C_NAPTIPUSA = 1400 AND C_TANEVID = @tanevId AND TOROLT = 'F')
  DECLARE @utolsoNapForOsztalyKeresztfelevesVegzos datetime = (
    SELECT C_DATUM FROM T_TANEVRENDJE_OSSZES tr 
      INNER JOIN T_OSZTALYCSOPORT_TANEVRENDJE ocstr ON tr.ID = ocstr.C_TANEVRENDJEID 
    WHERE C_NAPTIPUSA = 7602 AND C_OSZTALYCSOPORTID = @osztalyCsoportId AND tr.TOROLT = 'F')    
  DECLARE @utolsoNapForOsztalyKeresztfelevesNemVegzos datetime = (
    SELECT C_DATUM FROM T_TANEVRENDJE_OSSZES tr 
      INNER JOIN T_OSZTALYCSOPORT_TANEVRENDJE ocstr ON tr.ID = ocstr.C_TANEVRENDJEID 
    WHERE C_NAPTIPUSA = 1400 AND C_OSZTALYCSOPORTID = @osztalyCsoportId AND tr.TOROLT = 'F')    

  DECLARE @utolsoTanitasiNapTanev datetime = (SELECT TOP 1 C_UTOLSOTANITASINAP FROM T_TANEV_OSSZES WHERE ID = @tanevId AND TOROLT = 'F')

  DECLARE @utolsoNap datetime 
  IF (@isKeresztfeleves = 'T')
  BEGIN
    IF (@isVegzos = 'T')
      BEGIN
        SET @utolsoNap = (SELECT COALESCE(@utolsoNapForOsztalyKeresztfelevesVegzos, @utolsoNapForMindenKeresztfelevesVegzos, @utolsoNapForOsztalyVegzos, @utolsoNapForMindenVegzos, @utolsoTanitasiNapTanev)) 
      END
    ELSE
      BEGIN
        SET @utolsoNap = (SELECT COALESCE(@utolsoNapForOsztalyKeresztfelevesNemVegzos, @utolsoNapForMindenKeresztfelevesNemVegzos, @utolsoNapForOsztalyNemVegzos, @utolsoNapForMindenNemVegzos, @utolsoTanitasiNapTanev)) 
      END
  END
  ELSE
  BEGIN
    IF (@isVegzos = 'T')
      BEGIN
        SET @utolsoNap = (SELECT COALESCE(@utolsoNapForOsztalyVegzos, @utolsoNapForMindenVegzos, @utolsoTanitasiNapTanev)) 
      END
    ELSE
      BEGIN
        SET @utolsoNap = (SELECT COALESCE(@utolsoNapForOsztalyNemVegzos, @utolsoNapForMindenNemVegzos, @utolsoTanitasiNapTanev)) 
      END
  END

  DECLARE @elsoNapForMinden datetime = (SELECT C_DATUM FROM T_TANEVRENDJE_OSSZES WHERE C_OSSZESCSOPORTRAVONATKOZIK = 'T' AND C_NAPTIPUSA = 1394 AND C_TANEVID = @tanevId AND TOROLT = 'F')
  DECLARE @elsoNapForOsztaly datetime = (
    SELECT C_DATUM FROM T_TANEVRENDJE_OSSZES tr 
      INNER JOIN T_OSZTALYCSOPORT_TANEVRENDJE ocstr ON tr.ID = ocstr.C_TANEVRENDJEID 
    WHERE C_NAPTIPUSA = 1394 AND C_OSZTALYCSOPORTID = @osztalyCsoportId AND tr.TOROLT = 'F')

  DECLARE @elsoNapForMindenKeresztfeleves datetime = (SELECT C_DATUM FROM T_TANEVRENDJE_OSSZES WHERE C_OSSZESCSOPORTRAVONATKOZIK = 'T' AND C_NAPTIPUSA = 7604 AND C_TANEVID = @tanevId AND TOROLT = 'F')
  DECLARE @elsoNapForOsztalyKeresztfeleves datetime = (
    SELECT C_DATUM FROM T_TANEVRENDJE_OSSZES tr 
      INNER JOIN T_OSZTALYCSOPORT_TANEVRENDJE ocstr ON tr.ID = ocstr.C_TANEVRENDJEID 
    WHERE C_NAPTIPUSA = 7604 AND C_OSZTALYCSOPORTID = @osztalyCsoportId AND tr.TOROLT = 'F')    

  DECLARE @elsoTanitasiNapTanev datetime = (SELECT TOP 1 C_ELSOTANITASINAP FROM T_TANEV_OSSZES WHERE ID = @tanevId AND TOROLT = 'F')

  DECLARE @elsoNap datetime 
  IF (@isKeresztfeleves = 'T')
  BEGIN
    SET @elsoNap = (SELECT COALESCE(@elsoNapForOsztalyKeresztfeleves, @elsoNapForMindenKeresztfeleves, @elsoNapForOsztaly, @elsoNapForMinden, @elsoTanitasiNapTanev))
  END
  ELSE
  BEGIN
    SET @elsoNap = (SELECT COALESCE(@elsoNapForOsztaly, @elsoNapForMinden, @elsoTanitasiNapTanev))
  END

  DECLARE @felevVegeForMinden datetime = (SELECT C_DATUM FROM T_TANEVRENDJE_OSSZES WHERE C_OSSZESCSOPORTRAVONATKOZIK = 'T' AND C_NAPTIPUSA = 1400 AND C_TANEVID = @tanevId AND TOROLT = 'F')
  DECLARE @felevVegeForOsztaly datetime = (
    SELECT C_DATUM FROM T_TANEVRENDJE_OSSZES tr 
      INNER JOIN T_OSZTALYCSOPORT_TANEVRENDJE ocstr ON tr.ID = ocstr.C_TANEVRENDJEID 
    WHERE C_NAPTIPUSA = 1400 AND C_OSZTALYCSOPORTID = @osztalyCsoportId AND tr.TOROLT = 'F')

  DECLARE @felevVegeForMindenKeresztfeleves datetime = (SELECT C_DATUM FROM T_TANEVRENDJE_OSSZES WHERE C_OSSZESCSOPORTRAVONATKOZIK = 'T' AND C_NAPTIPUSA = 7605 AND C_TANEVID = @tanevId AND TOROLT = 'F')
  DECLARE @felevVegeForOsztalyKeresztfeleves datetime = (
    SELECT C_DATUM FROM T_TANEVRENDJE_OSSZES tr 
      INNER JOIN T_OSZTALYCSOPORT_TANEVRENDJE ocstr ON tr.ID = ocstr.C_TANEVRENDJEID 
    WHERE C_NAPTIPUSA = 7605 AND C_OSZTALYCSOPORTID = @osztalyCsoportId AND tr.TOROLT = 'F')    

  DECLARE @felevVege datetime 
  IF (@isKeresztfeleves = 'T')
  BEGIN
    SET @felevVege = (SELECT COALESCE(@felevVegeForOsztalyKeresztfeleves, @felevVegeForMindenKeresztfeleves, @felevVegeForOsztaly, @felevVegeForMinden))
  END
  ELSE
  BEGIN
    SET @felevVege = (SELECT COALESCE(@felevVegeForOsztaly, @felevVegeForMinden))
  END

  INSERT INTO @result
  SELECT @elsoNap, @utolsoNap, @felevVege

  RETURN
END
GO
