﻿DROP PROCEDURE IF EXISTS dbo.sp_GetMulasztasokNaploNezetData
GO

CREATE PROCEDURE dbo.sp_GetMulasztasokNaploNezetData
   @pTanevId int
  ,@pIntezmenyId int
  ,@pOsztalyCsoportId int
  ,@pDatum date
  ,@pCsoportTipusTanoraiCeluId int
  ,@pIsCsoportVez int = 0
  ,@pSzervezetTipusId INT = NULL
AS
BEGIN
  SET NOCOUNT ON;

  CREATE TABLE #TempTable(
    TanitasiOraId INT NOT NULL,
    OsztalyCsoportId INT NOT NULL,
    OsztalyCsoportNev NVARCHAR(255) NOT NULL,
    OsztalyNev NVARCHAR(255) NOT NULL,
    IsOsztalyOraja BIT NOT NULL,
    IsTanoraiCelu BIT NOT NULL,
    IsTanoraiCelunakJelolt BIT NOT NULL,
    TantargyId INT NOT NULL,
    TantargyNev NVARCHAR(255) NOT NULL,
    TanarId INT NOT NULL,
    TanarNev NVARCHAR(255) NOT NULL,
    OraSorszam INT NULL,
    OraKezdete DATETIME NULL
  );

  DECLARE @sql nvarchar(max) = ''

  SET @sql += N'
  SELECT
     tn.ID AS TanitasiOraId
    ,ocs.ID AS OsztalyCsoportId
    ,ocs.C_NEV AS OsztalyCsoportNev
    ,o.C_NEV AS OsztalyNev
    ,IIF(ocs.ID = @pOsztalyCsoportId, 1, 0) AS IsOsztalyOraja
    ,IIF(cst.ID = @pCsoportTipusTanoraiCeluId, 1, 0) AS IsTanoraiCelu
    ,IIF(cst.C_ISTANORAICELU = ''T'', 1, 0) AS IsTanoraiCelunakJelolt
    ,tt.ID AS TantargyId
    ,tt.C_NEV AS TantargyNev
    ,fa.ID AS TanarId
    ,fa.C_NYOMTATASINEV AS TanarNev
    ,IIF(tn.C_CSENGETESIRENDORAID IS NOT NULL, tn.C_ORASZAM, NULL) AS OraSorszam
    ,IIF(tn.C_CSENGETESIRENDORAID IS NULL, tn.C_ORAKEZDETE, NULL) AS OraKezdete
  FROM T_TANITASIORA_OSSZES tn
    ' + IIF(@pIsCsoportVez = 0, N' INNER JOIN dbo.fnGetKapcsolodoOsztalycsoportokByDate(@pOsztalyCsoportId, @pDatum, @pDatum) kocs ON kocs.ID = tn.C_OSZTALYCSOPORTID ', '')
  SET @sql += N'
    INNER JOIN T_TANTARGY_OSSZES tt ON tt.ID = tn.C_TANTARGYID AND tt.TOROLT = ''F'' AND tt.C_TANEVID = @pTanevId AND tt.C_INTEZMENYID = @pIntezmenyId
    INNER JOIN T_FELHASZNALO_OSSZES fa ON fa.ID = tn.C_ORATULAJDONOSID AND fa.TOROLT = ''F'' AND fa.C_TANEVID = @pTanevId AND fa.C_INTEZMENYID = @pIntezmenyId
    INNER JOIN T_OSZTALYCSOPORT_OSSZES ocs ON ocs.ID = tn.C_OSZTALYCSOPORTID AND ocs.TOROLT = ''F'' AND ocs.C_TANEVID = @pTanevId AND ocs.C_INTEZMENYID = @pIntezmenyId
    LEFT JOIN T_CSOPORT_OSSZES cs ON cs.ID = tn.C_OSZTALYCSOPORTID AND cs.TOROLT = ''F'' AND cs.C_ALTANEVID = @pTanevId AND cs.C_ALINTEZMENYID = @pIntezmenyId
    LEFT JOIN T_CSOPORTTIPUS_OSSZES cst ON cst.ID = cs.C_TIPUSA AND cst.TOROLT = ''F'' AND cst.C_ALTANEVID = @pTanevId AND cst.C_ALINTEZMENYID = @pIntezmenyId
    INNER JOIN T_OSZTALYCSOPORT_OSSZES o ON o.ID = @pOsztalyCsoportId AND o.TOROLT = ''F'' AND ocs.C_TANEVID = @pTanevId AND ocs.C_INTEZMENYID = @pIntezmenyId
    INNER JOIN (SELECT ID FROM fnGetKapcsolodoOsztalycsoportokByDate(@pOsztalyCsoportId, @pDatum, @pDatum)) f on f.ID = tn.C_OSZTALYCSOPORTID
  WHERE tn.C_DATUM = @pDatum
    AND tn.C_MEGTARTOTT = ''T''
    AND tn.TOROLT = ''F''
    AND tn.C_TANEVID = @pTanevId
    AND tn.C_INTEZMENYID = @pIntezmenyId
    ' + IIF(@pIsCsoportVez = 1, N' AND tn.C_OSZTALYCSOPORTID = @pOsztalyCsoportId ','')
   
   INSERT INTO #TempTable
   EXEC sp_executesql @sql, N'
     @pTanevId INT
    ,@pIntezmenyId INT
    ,@pOsztalyCsoportId INT
    ,@pDatum DATE
    ,@pCsoportTipusTanoraiCeluId INT
    ,@pIsCsoportVez INT'
    ,@pTanevId = @pTanevId
    ,@pIntezmenyId = @pIntezmenyId
    ,@pOsztalyCsoportId = @pOsztalyCsoportId
    ,@pDatum = @pDatum
    ,@pCsoportTipusTanoraiCeluId = @pCsoportTipusTanoraiCeluId
    ,@pIsCsoportVez = @pIsCsoportVez

SET @sql = N''
SET @sql += N'
  SELECT
     tcs.C_TANULOID AS TanuloId
    ,ft.C_NYOMTATASINEV AS TanuloNev
    ,ft.C_ANYJANEVE AS AnyjaNeve
    ,ft.C_SZULETESIDATUM AS SzuletesiIdo
    ,tbl.OsztalyCsoportId
    ,tbl.OsztalyCsoportNev
    ,tbl.OsztalyNev
    ,tbl.IsOsztalyOraja
    ,tbl.IsTanoraiCelu
    ,tbl.IsTanoraiCelunakJelolt
    ,tbl.TantargyId
    ,tbl.TantargyNev
    ,tbl.TanarId
    ,tbl.TanarNev
    ,tbl.OraSorszam
    ,tbl.OraKezdete
    ,tbl.TanitasiOraId
    ,tm.ID AS MulasztasId
    ,tm.C_TIPUS AS MulasztasTipus
    ,tm.C_IGAZOLT AS IsIgazolt
    ,tm.C_IGAZOLASTIPUSA AS IgazolasTipus
    ,tm.C_MEGJEGYZES AS Megjegyzes
    ,tm.C_KESESPERCBEN AS KesesPercben
  FROM (
    SELECT
       C_TANULOID
      ,C_OSZTALYCSOPORTID
    FROM T_TANULOCSOPORT_OSSZES tcs ' + 
      IIF(@pSzervezetTipusId IS NULL, 'INNER JOIN T_TANULOTANUGYIADATOK_OSSZES tta ON tta.C_TANULOCSOPORTID = tcs.ID 
        AND tta.TOROLT = ''F''
        AND tta.C_TANEVID = @pTanevId 
        AND tta.C_INTEZMENYID = @pIntezmenyId
        AND tta.C_JOGVISZONYATSZUNETELTETO = ''F''','')+' 
    WHERE C_OSZTALYCSOPORTID = @pOsztalyCsoportId
      AND C_BELEPESDATUM <= @pDatum
      AND (C_KILEPESDATUM > @pDatum OR C_KILEPESDATUM IS NULL)
      AND tcs.TOROLT = ''F''
      AND tcs.C_TANEVID = @pTanevId 
      AND tcs.C_INTEZMENYID = @pIntezmenyId
      AND C_TANULOID IN (
        SELECT
          C_TANULOID
        FROM T_TANULOCSOPORT_OSSZES tcs2
        WHERE tcs2.C_OSZTALYCSOPORTID IN (SELECT OsztalyCsoportId FROM #TempTable)
          AND tcs2.C_TANEVID = @pTanevId 
          AND tcs2.C_INTEZMENYID = @pIntezmenyId
          AND tcs2.TOROLT = ''F''
          AND tcs2.C_BELEPESDATUM <= @pDatum
          AND (tcs2.C_KILEPESDATUM > @pDatum OR tcs2.C_KILEPESDATUM IS NULL)
      )
   ) tcs
    CROSS JOIN #TempTable tbl
    INNER JOIN T_FELHASZNALO_OSSZES ft ON tcs.C_TANULOID = ft.ID
      AND ft.TOROLT = ''F''
      AND ft.C_TANEVID = @pTanevId 
      AND ft.C_INTEZMENYID = @pIntezmenyId
    LEFT JOIN T_TANULOMULASZTAS_OSSZES tm ON tcs.C_TANULOID = tm.C_ORATANULOIID
      AND tm.C_TANITASIORAKID = tbl.TanitasiOraId
      AND tm.TOROLT = ''F''
      AND tm.C_TANEVID = @pTanevId 
      AND tm.C_INTEZMENYID = @pIntezmenyId
    LEFT JOIN T_TANULOMENTESSEG_OSSZES mentesseg ON mentesseg.C_TANULOID = tcs.C_TANULOID
      AND mentesseg.C_TANTARGYID = tbl.TantargyId
      AND mentesseg.C_ORAMENTESITES = ''T''
      AND mentesseg.TOROLT = ''F''
      AND mentesseg.C_TANEVID = @pTanevId 
      AND mentesseg.C_INTEZMENYID = @pIntezmenyId
  WHERE
    tcs.C_TANULOID IN (
      SELECT 
        C_TANULOID
      FROM T_TANULOCSOPORT_OSSZES tcs2
      WHERE tbl.OsztalyCsoportId = tcs2.C_OSZTALYCSOPORTID
        AND tcs2.C_TANEVID = @pTanevId 
        AND tcs2.C_INTEZMENYID = @pIntezmenyId
        AND tcs2.TOROLT = ''F''
        AND tcs2.C_BELEPESDATUM <= @pDatum
        AND (tcs2.C_KILEPESDATUM > @pDatum OR tcs2.C_KILEPESDATUM IS NULL)
      )
    AND (tm.C_TIPUS <> 1817 OR tm.C_TIPUS IS NULL)
    AND (mentesseg.ID IS NULL OR (mentesseg.C_KEZDETE > @pDatum OR mentesseg.C_VEGE < @pDatum))
  ORDER BY ft.C_NYOMTATASINEV '

  EXEC sp_executesql @sql, N'
     @pTanevId INT
    ,@pIntezmenyId INT
    ,@pOsztalyCsoportId INT
    ,@pDatum DATE
    ,@pCsoportTipusTanoraiCeluId INT
    ,@pIsCsoportVez INT'
    ,@pTanevId = @pTanevId
    ,@pIntezmenyId = @pIntezmenyId
    ,@pOsztalyCsoportId = @pOsztalyCsoportId
    ,@pDatum = @pDatum
    ,@pCsoportTipusTanoraiCeluId = @pCsoportTipusTanoraiCeluId
    ,@pIsCsoportVez = @pIsCsoportVez
END
GO

