﻿IF OBJECT_ID('fnGetDokumentumTanulokEvesOraszamaiOsztalyonkent') IS NOT NULL BEGIN
  DROP FUNCTION fnGetDokumentumTanulokEvesOraszamaiOsztalyonkent
END
GO

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

CREATE FUNCTION fnGetDokumentumTanulokEvesOraszamaiOsztalyonkent (@tanevId INT, @osztalyId INT, @tanitasiHetekSzamaVegzos INT, @tanitasiHetekSzamaNemVegzos INT, @isFotantargyAltantargyEgyben BIT)
RETURNS @result TABLE 
(
  TanuloId int,
  TantargyId int,
  Oraszam float
)
AS 
BEGIN
  DECLARE @feladatKategoriaId int = (SELECT C_FELADATKATEGORIAID FROM T_OSZTALYCSOPORT_OSSZES WHERE ID = @osztalyId)
  DECLARE @isVegzos NVARCHAR(1) = (SELECT C_VEGZOSEVFOLYAM FROM T_OSZTALYCSOPORT_OSSZES WHERE ID = @osztalyId)
  DECLARE @isKeresztfeleves NVARCHAR(1) = (SELECT C_KERESZTFELEVES FROM T_OSZTALYCSOPORT_OSSZES WHERE ID = @osztalyId)

  DECLARE @utolsoNapForMindenVegzos DATE = (SELECT MIN(C_DATUM) FROM T_TANEVRENDJE_OSSZES WHERE C_OSSZESCSOPORTRAVONATKOZIK = 'T' AND C_NAPTIPUSA IN (1402, 7603) AND C_TANEVID = @tanevId AND TOROLT = 'F')
  DECLARE @utolsoNapForMindenNemVegzos DATE = (SELECT C_DATUM FROM T_TANEVRENDJE_OSSZES WHERE C_OSSZESCSOPORTRAVONATKOZIK = 'T' AND C_NAPTIPUSA = 1395 AND C_TANEVID = @tanevId AND TOROLT = 'F')
  DECLARE @utolsoNapForOsztalyVegzos DATE = (
    SELECT MIN(C_DATUM) FROM T_TANEVRENDJE_OSSZES tr 
      INNER JOIN T_OSZTALYCSOPORT_TANEVRENDJE ocstr ON tr.ID = ocstr.C_TANEVRENDJEID 
    WHERE C_NAPTIPUSA IN (1402, 7603) AND C_OSZTALYCSOPORTID = @osztalyId AND tr.TOROLT = 'F')
  DECLARE @utolsoNapForOsztalyNemVegzos DATE = (
    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 = @osztalyId AND tr.TOROLT = 'F')

  DECLARE @utolsoNapForMindenKeresztfelevesVegzos DATE = (SELECT C_DATUM FROM T_TANEVRENDJE_OSSZES WHERE C_OSSZESCSOPORTRAVONATKOZIK = 'T' AND C_NAPTIPUSA = 7602 AND C_TANEVID = @tanevId AND TOROLT = 'F')
  DECLARE @utolsoNapForMindenKeresztfelevesNemVegzos DATE = (SELECT C_DATUM FROM T_TANEVRENDJE_OSSZES WHERE C_OSSZESCSOPORTRAVONATKOZIK = 'T' AND C_NAPTIPUSA = 1400 AND C_TANEVID = @tanevId AND TOROLT = 'F')
  DECLARE @utolsoNapForOsztalyKeresztfelevesVegzos DATE = (
    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 = @osztalyId AND tr.TOROLT = 'F')    
  DECLARE @utolsoNapForOsztalyKeresztfelevesNemVegzos DATE = (
    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 = @osztalyId AND tr.TOROLT = 'F')    

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

  DECLARE @temp table (
     TanuloId int
    ,FotargyId int
    ,TantargyId int
    ,Oraszam float
    ,isFotargy nvarchar(1)
    ,isAltantargykentNyomtatvanyban nvarchar(1)
  )

  INSERT INTO @temp
  SELECT 
     C_TANULOID
    ,t.C_FOTARGYID
    ,t.ID
    ,fog.C_ORASZAM
    ,t.C_FOTARGYE
    ,t.C_ALTANTARGYKENTNYOMTATVANYBAN
  FROM T_TANULOCSOPORT_OSSZES tcs
    INNER JOIN T_FOGLALKOZAS_OSSZES fog ON fog.C_OSZTALYCSOPORTID = tcs.C_OSZTALYCSOPORTID AND fog.TOROLT = 'F' AND fog.C_TANEVID = @tanevId
    INNER JOIN T_TANTARGY_OSSZES t on t.ID = fog.C_TANTARGYID AND t.C_TANEVID = @tanevId
    INNER JOIN T_OSZTALYCSOPORT_OSSZES AS ocs ON ocs.ID = tcs.C_OSZTALYCSOPORTID AND ocs.C_FELADATKATEGORIAID = @feladatKategoriaId AND ocs.C_TANEVID = @tanevID AND ocs.TOROLT = 'F'
  WHERE 
    tcs.C_TANULOID IN (SELECT TanuloId FROM fnGetDokumentumOsztalyokCsoportokTanuloi(@tanevId, @osztalyId, 'T'))
    AND tcs.C_OSZTALYCSOPORTID IN (SELECT ID FROM fnGetDokumentumKapcsolodoOsztalycsoportok(@osztalyId, @tanevId, DEFAULT, DEFAULT))
    AND tcs.TOROLT = 'F'
    AND tcs.C_TANEVID = @tanevId
    AND ISNULL(tcs.C_KILEPESDATUM, @utolsoNap) >= @utolsoNap

  DECLARE @default table (
     TanuloId int
    ,TantargyId int
    ,Orasszam float
  )

  INSERT INTO @default
  SELECT 
     TanuloId
    ,TantargyId
    ,Oraszam * IIF(@isVegzos = 'T', @tanitasiHetekSzamaVegzos, @tanitasiHetekSzamaNemVegzos)
  FROM @temp
  WHERE
    isFotargy = 'T'
  UNION ALL
  SELECT 
     TanuloId
    ,TantargyId
    ,Oraszam * IIF(@isVegzos = 'T', @tanitasiHetekSzamaVegzos, @tanitasiHetekSzamaNemVegzos)
  FROM @temp
  WHERE
    isAltantargykentNyomtatvanyban = 'T'
  UNION ALL
  SELECT 
     TanuloId
    ,TantargyId
    ,Oraszam * IIF(@isVegzos = 'T', @tanitasiHetekSzamaVegzos, @tanitasiHetekSzamaNemVegzos)
  FROM @temp
  WHERE
    isFotargy = 'F' AND isAltantargykentNyomtatvanyban = 'F'
  UNION ALL
    SELECT 
     TanuloId
    ,FotargyId
    ,0
  FROM @temp t1
  WHERE
    (isFotargy = 'F' OR isFotargy IS NULL) AND (isAltantargykentNyomtatvanyban = 'F' OR isAltantargykentNyomtatvanyban IS NULL)
    AND NOT EXISTS (SELECT TOP 1 t2.FotargyId FROM @temp t2 WHERE t2.FotargyId = t1. TantargyId) 

  DECLARE @altargy table (
     TanuloId int
    ,FotargyId int
    ,Oraszam float
  )

  IF @isFotantargyAltantargyEgyben = 1
  BEGIN
    INSERT INTO @altargy
    SELECT 
       TanuloId
      ,FotargyId
      ,SUM(Oraszam) * IIF(@isVegzos = 'T', @tanitasiHetekSzamaVegzos, @tanitasiHetekSzamaNemVegzos)
    FROM @temp t
    WHERE
      (isFotargy = 'F' OR isFotargy IS NULL) AND (isAltantargykentNyomtatvanyban = 'F' OR isAltantargykentNyomtatvanyban IS NULL)
    GROUP BY TanuloId, FotargyId
  END

  IF @isFotantargyAltantargyEgyben = 0
  BEGIN
    INSERT INTO @result
    SELECT 
       defaultTable.TanuloId 
      ,defaultTable.TantargyId
      ,SUM(defaultTable.Orasszam)
    FROM @default defaultTable
    GROUP BY defaultTable.TanuloId, defaultTable.TantargyId
  END

  ELSE
  
  BEGIN
    INSERT INTO @result
    SELECT 
       defaultTable.TanuloId 
      ,defaultTable.TantargyId
      ,SUM(defaultTable.Orasszam) + ISNULL(altargy.Oraszam, 0)
    FROM @default defaultTable
      LEFT JOIN @altargy altargy ON altargy.TanuloId = defaultTable.TanuloId AND altargy.FotargyId = defaultTable.TantargyId
    GROUP BY defaultTable.TanuloId ,defaultTable.TantargyId, altargy.Oraszam
  END
  RETURN
END

GO

