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)
   )
AS BEGIN

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

    INSERT INTO @result
    SELECT
	   C_ORATANULOIID AS TanuloId
	  ,TanuloCsoport.ID AS TanuloCsoportId
	  ,TanitasiOra.C_OSZTALYCSOPORTID AS OsztalyCsoportId
	  ,OsztalyCsoport.C_NEV AS OsztalyCsoportNev
	  ,C_TIPUS AS Tipusa
	  ,C_IGAZOLT AS Igazolt
	  ,C_IGAZOLASTIPUSA AS IgazolasTipusa
	  ,C_KESESPERCBEN AS KesesPercben
	  ,C_DATUM AS Datum
	  ,IIF(C_CSENGETESIRENDORAID IS NULL, dbo.fnGetDokumentumOrakezdetToOraszam(CONVERT(VARCHAR(5), C_ORAKEZDETE, 108), @tanevId), TanitasiOra.C_ORASZAM) AS Oraszam
	  ,IIF(C_CSENGETESIRENDORAID IS NULL, CONCAT(CONVERT(NVARCHAR(5), TanitasiOra.C_ORAKEZDETE, 108), '-',
      CONVERT(NVARCHAR(5), TanitasiOra.C_ORAVEGE, 108)), CAST(TanitasiOra.C_ORASZAM AS NVARCHAR)) AS OraszamWithOrakezdeteVege
	  ,C_TANTARGYID AS TantargyId
	  ,ISNULL(t.C_NEVNYOMTATVANYBAN, t.C_NEV) AS TantargyNev
	  ,C_HETSORSZAMA AS HetSorszama
	  ,C_GYAKORLATI AS Gyakorlati
    ,IIF(o.ID IS NOT NULL OR tanorai.tanoraiId IS NOT NULL, 'T', 'F') AS Tanorai
  FROM T_TANULOMULASZTAS_OSSZES TanuloMulasztas
	  INNER JOIN T_TANITASIORA_OSSZES TanitasiOra ON TanitasiOra.ID = TanuloMulasztas.C_TANITASIORAKID
      AND TanitasiOra.TOROLT='F'
	  INNER JOIN T_TANULOCSOPORT_OSSZES TanuloCsoport ON TanuloCsoport.C_TANULOID = TanuloMulasztas.C_ORATANULOIID
			AND TanuloCsoport.TOROLT = 'F'
			AND TanitasiOra.C_DATUM >= TanuloCsoport.C_BELEPESDATUM
      AND TanitasiOra.C_DATUM < ISNULL(TanuloCsoport.C_KILEPESDATUM, GETDATE())
      AND TanuloCsoport.C_OSZTALYCSOPORTID=@osztalyCsoportId
	  INNER JOIN T_OSZTALYCSOPORT_OSSZES OsztalyCsoport ON OsztalyCsoport.ID = TanitasiOra.C_OSZTALYCSOPORTID
		  AND OsztalyCsoport.C_FELADATKATEGORIAID = @kategoriaId
	  INNER JOIN T_TANTARGY_OSSZES t ON t.ID = TanitasiOra.C_TANTARGYID
	  LEFT JOIN (
      SELECT
         tanorai.ID AS tanoraiId
        ,cs.ID AS CsoportId
      FROM T_CSOPORT_OSSZES cs
        INNER JOIN fnGetTanoraiCeluCsoportTipusok(@tanevId) tanorai ON tanorai.ID = cs.C_TIPUSA
    ) tanorai ON tanorai.CsoportId = OsztalyCsoport.ID
    LEFT JOIN T_OSZTALY_OSSZES o ON o.ID=TanitasiOra.C_OSZTALYCSOPORTID
  WHERE TanuloMulasztas.C_TIPUS IN (1499, 1500) AND TanuloMulasztas.C_INTEZMENYID=TanitasiOra.C_INTEZMENYID
    AND (@csakTanoraiCelu = 0 OR (o.ID IS NOT NULL OR tanorai.tanoraiId IS NOT NULL))
	  AND (@iskolaErdekuSzamit = 1 OR (C_IGAZOLASTIPUSA IS NULL OR C_IGAZOLASTIPUSA <> 1533))
	  AND TanuloMulasztas.TOROLT = 'F'
	  AND (@atsoroltTanuloMulasztas = 1 OR (TanitasiOra.C_OSZTALYCSOPORTID IN (SELECT ID FROM fnGetDokumentumKapcsolodoOsztalycsoportok(@osztalyCsoportId, @tanevId, @csakTanoraiCelu))))
	  AND (@csakKivlasztottOsztalyCsoport = 0 OR TanitasiOra.C_OSZTALYCSOPORTID = @osztalyCsoportId)
	  AND (@idoszakEleje IS NULL OR C_DATUM >= @idoszakEleje)
	  AND (@idoszakVege IS NULL OR  C_DATUM <= @idoszakVege)

    RETURN
END
GO
