DROP FUNCTION IF EXISTS fnGetDokumentumMulasztasokOsztalyonkentReszletes
GO

CREATE FUNCTION fnGetDokumentumMulasztasokOsztalyonkentReszletes (
    @tanevId int
   ,@osztalyCsoportId int
   ,@iskolaErdekuSzamit bit
   ,@csakKivlasztottOsztalyCsoport bit = 0
   ,@atsoroltTanuloMulasztas bit = 1
   ,@idoszakEleje date = NULL
   ,@idoszakVege date = NULL
   ,@csakTanoraiCelu int = 1
  )
  RETURNS @result TABLE (
     TanuloId int
    ,TanuloCsoportId int
    ,OsztalyCsoportId int
    ,OsztalyCsoportNev nvarchar (255)
    ,Tipusa int
    ,Igazolt char (1)
    ,IgazolasTipusa int
    ,KesesPercben int null
    ,Datum datetime
    ,Oraszam nvarchar (255)
    ,OraszamWithOrakezdeteVege nvarchar (255)
    ,TantargyId int
    ,TantargyNev nvarchar (255)
    ,HetSorszama int
    ,Gyakorlati char(1)
    ,Tanorai char(1)
    ,RENDEZ0 int
    ,RENDEZ1 int
    ,RENDEZ2 nvarchar(255)
    ,RENDEZ3 int
    ,RENDEZ4 int
    ,RENDEZ5 nvarchar(255)
  )
AS BEGIN

  DECLARE @kategoriaId int = (SELECT C_FELADATKATEGORIAID FROM T_OSZTALYCSOPORT_OSSZES WHERE ID = @osztalyCsoportId)
  DECLARE @defaultCsengetesiRendId int

  DECLARE @tanoraiCsoportok TABLE( 
     OsztalyCsoportId int
  )

  SELECT @defaultCsengetesiRendId = ID 
  FROM T_CSENGETESIREND_OSSZES csr
  WHERE csr.TOROLT='F' 
    AND csr.C_AKTIV = 'T' 
    AND csr.C_TANEVID = @tanevId

  IF @kategoriaId <> 7555 -- NEM AMI-s osztályoknál
  BEGIN
    INSERT INTO @tanoraiCsoportok(OsztalyCsoportId)
    SELECT
      ID
    FROM fnGetDokumentumOsztalyVagyTanoraiCsoport(@tanevId)
  END
  ELSE
  BEGIN
    -- AMI törzslapoknál ezekhez az osztálycsoportokhoz szedjük össze a mulasztásokat
    INSERT INTO @tanoraiCsoportok(OsztalyCsoportId)
    SELECT ID
    FROM fnGetDokumentumKapcsolodoOsztalycsoportok(@osztalyCsoportId, @tanevId, 0, DEFAULT)
  END

  INSERT INTO @result
  SELECT
     tm.C_ORATANULOIID AS TanuloId
    ,tcs2.ID AS TanuloCsoportId
    ,tao.C_OSZTALYCSOPORTID AS OsztalyCsoportId
    ,ocs.C_NEV AS OsztalyCsoportNev
    ,tm.C_TIPUS AS Tipusa
    ,tm.C_IGAZOLT AS Igazolt
    ,tm.C_IGAZOLASTIPUSA AS IgazolasTipusa
    ,tm.C_KESESPERCBEN AS KesesPercben
    ,tao.C_DATUM AS Datum
    ,IIF(tao.C_CSENGETESIRENDORAID IS NULL,
      (SELECT 
         ISNULL(MAX(csro.C_ORASZAM), 0)  
       FROM T_CSENGETESIRENDORA_OSSZES csro
       WHERE csro.TOROLT = 'F'
         AND csro.C_CSENGETESIRENDID = @defaultCsengetesiRendId
         AND CONVERT(nvarchar(5), C_KEZDETE, 108) <= CONVERT(nvarchar(5), C_ORAKEZDETE, 108)
      ),tao.C_ORASZAM) as Oraszam
    ,IIF(tao.C_CSENGETESIRENDORAID IS NULL, CONCAT(CONVERT(nvarchar(5), tao.C_ORAKEZDETE, 108), '-',
      CONVERT(nvarchar(5), tao.C_ORAVEGE, 108)), CAST(tao.C_ORASZAM AS nvarchar(5))) AS OraszamWithOrakezdeteVege
    ,tao.C_TANTARGYID AS TantargyId
    ,ISNULL(tgy.C_NEVNYOMTATVANYBAN, tgy.C_NEV) AS TantargyNev
    ,tao.C_HETSORSZAMA AS HetSorszama
    ,tgy.C_GYAKORLATI AS Gyakorlati
    ,IIF(tanorai.OsztalyCsoportId IS NULL, 'F', 'T') AS Tanorai
    ,tgy.C_SORSZAM AS RENDEZ0
    ,IIF(tgy.C_FOTARGYID IS NULL,ISNULL(dibtgykat.C_ORDER, 10000),ISNULL(dibftgykat.C_ORDER, 10000)) AS RENDEZ1
    ,COALESCE(ftgy.C_NEVNYOMTATVANYBAN, ftgy.C_NEV, tgy.C_NEV) AS RENDEZ2
    ,ISNULL(tgy.C_FOTARGYID, tgy.ID) AS RENDEZ3
    ,tgy.C_FOTARGYID AS RENDEZ4
    ,ISNULL(tgy.C_NEVNYOMTATVANYBAN, tgy.C_NEV) AS RENDEZ5
  FROM T_TANULOMULASZTAS_OSSZES tm
    INNER JOIN T_TANITASIORA_OSSZES tao ON tao.ID = tm.C_TANITASIORAKID
      AND tao.TOROLT='F'
    INNER JOIN T_TANULOCSOPORT_OSSZES tcs ON tcs.C_TANULOID = tm.C_ORATANULOIID
      AND tcs.TOROLT = 'F'
      AND tao.C_DATUM >= tcs.C_BELEPESDATUM
      AND tao.C_DATUM <= ISNULL(tcs.C_KILEPESDATUM, GETDATE())
      AND tcs.C_OSZTALYCSOPORTID= tao.C_OSZTALYCSOPORTID
    INNER JOIN T_TANULOCSOPORT_OSSZES tcs2 ON tcs2.C_TANULOID = tm.C_ORATANULOIID
      AND tcs2.TOROLT = 'F'
      AND tao.C_DATUM >= tcs2.C_BELEPESDATUM
      AND tao.C_DATUM < ISNULL(tcs2.C_KILEPESDATUM, GETDATE())
      AND tcs2.C_OSZTALYCSOPORTID= @osztalyCsoportId
    INNER JOIN T_OSZTALYCSOPORT_OSSZES ocs ON ocs.ID = tao.C_OSZTALYCSOPORTID
      AND ocs.C_FELADATKATEGORIAID = @kategoriaId
    INNER JOIN T_TANTARGY_OSSZES tgy ON tgy.ID = tao.C_TANTARGYID
    LEFT JOIN T_DICTIONARYITEMBASE_OSSZES dibtgykat ON dibtgykat.Id = tgy.C_TARGYKATEGORIA
      AND dibtgykat.TOROLT = 'F'
      AND dibtgykat.C_TANEVID = @tanevId
    LEFT JOIN T_TANTARGY_OSSZES ftgy ON tgy.C_FOTARGYID = ftgy.ID
    LEFT JOIN T_DICTIONARYITEMBASE_OSSZES dibftgykat ON dibftgykat.ID = ftgy.C_TARGYKATEGORIA
      AND dibftgykat.TOROLT = 'F'
      AND dibftgykat.C_TANEVID = ftgy.C_TANEVID
    LEFT JOIN @tanoraiCsoportok tanorai ON tanorai.OsztalyCsoportId = ocs.ID
  WHERE tm.C_TIPUS BETWEEN 1499 AND 1500
    AND tm.TOROLT = 'F'
    AND (@csakTanoraiCelu = 0 OR tanorai.OsztalyCsoportId IS NOT NULL)
    AND (@iskolaErdekuSzamit = 1 OR (tm.C_IGAZOLASTIPUSA IS NULL OR tm.C_IGAZOLASTIPUSA <> 1533))
    AND (@atsoroltTanuloMulasztas = 1 OR (tao.C_OSZTALYCSOPORTID IN (SELECT ID FROM fnGetDokumentumKapcsolodoOsztalycsoportok(@osztalyCsoportId, @tanevId, @csakTanoraiCelu, DEFAULT))))
    AND (@csakKivlasztottOsztalyCsoport = 0 OR tao.C_OSZTALYCSOPORTID = @osztalyCsoportId)
    AND (@idoszakEleje IS NULL OR tao.C_DATUM >= @idoszakEleje)
    AND (@idoszakVege IS NULL OR tao.C_DATUM <= @idoszakVege)

  RETURN
END
GO
