﻿DROP PROCEDURE IF EXISTS uspGetMulasztasData
GO

CREATE PROCEDURE uspGetMulasztasData
   @pTanevId int
  ,@pCsoportVezetoId int = NULL
  ,@pIsNemJelenlevoTanulokMegjelenitese bit
  ,@pTol datetime = NULL
  ,@pIg datetime = NULL
  ,@pTanuloId int = NULL
  ,@pTanuloNev nvarchar(510) = NULL
  ,@pOsztcsop int = NULL
  ,@pIsKellKapcsolodoCsoportok bit
  ,@pCsoptip int = NULL
  ,@pFogl int = NULL
  ,@pTargy int = NULL
  ,@pOraId int = NULL
  ,@pMulTip int = NULL
  ,@pKesIdo int = NULL
  ,@pIgazolasTipus int = NULL
  ,@pIsNemBesoroltTanulokMulasztasainakMegjelenitese bit
  ,@pFeladatKategoriaId int = NULL
  ,@pFeladatEllatasiHelyId int = NULL
  ,@pIgazoltsagAllapota int = NULL
  ,@pIsOnlineOra bit = NULL
  ,@pTanitasiOraId int = NULL
  ,@pSzervezetTipusId int = NULL
  ,@pSzervezetIdListString nvarchar(255) = NULL
  ,@pSzervezetNev nvarchar(255) = NULL
  ,@pSzervezetAzonosito nvarchar(255) = NULL
AS
BEGIN

  SET NOCOUNT ON;

  DECLARE @sql nvarchar(max)
    ,@whereClause nvarchar(max) = N'
      WHERE tm.TOROLT = ''F'' AND tm.C_TANEVID = @tanevId'

  SET @sql = N'
  SELECT
       tm.ID as ID
      ,fh.ID AS TanuloId
      ,fh.C_NYOMTATASINEV as TanuloNev
      ,IIF(fh.C_NEVSORREND = ''T'',
          fh.C_UTONEV + '' '' + fh.C_VEZETEKNEV,
          fh.C_VEZETEKNEV + '' '' + fh.C_UTONEV) as TanuloNevElotagNelkul
      ,fh.C_SZULETESIDATUM as SzuletesiIdo
      ,fh.C_OKTATASIAZONOSITO AS OktatasiAzonosito
      ,tao.C_ORASZAM as Oraszam
      ,tao.C_DATUM as Datum
      ,ocs.C_NEV as OsztCsopNev
      ,tgy.C_NEV as TargyNev
      ,tm.C_TIPUS as MulTip
      ,tm.C_KESESPERCBEN as KesesPerc
      ,tm.C_IGAZOLT as Igazolt
      ,tm.C_IGAZOLASTIPUSA as IgazolasTipus
      ,tm.C_MEGJEGYZES as Megjegyzes
      ,ISNULL(totOnlineOra.C_BOOLERTEK, ottOnlineOra.C_BOOLDEFAULT) AS IsOnlineOra
      ,ISNULL(ig.C_MEGJEGYZES, tm.C_MEGJEGYZES) as IgazolasMegjegyzes
  FROM T_TANULOMULASZTAS_OSSZES tm
      INNER JOIN T_TANITASIORA_OSSZES tao on tao.ID = tm.C_TANITASIORAKID AND tao.TOROLT = ''F''
      INNER JOIN T_FELHASZNALO_OSSZES fh on fh.ID = tm.C_ORATANULOIID AND fh.TOROLT = ''F''
      INNER JOIN T_TANTARGY_OSSZES tgy on tgy.ID = tao.C_TANTARGYID AND tgy.TOROLT = ''F''
      INNER JOIN T_OSZTALYCSOPORT_OSSZES ocs on ocs.ID = tao.C_OSZTALYCSOPORTID AND ocs.TOROLT = ''F''
      INNER JOIN T_ORATULAJDONSAGTIPUS_OSSZES ottOnlineOra ON ottOnlineOra.TOROLT = ''F'' AND ottOnlineOra.C_ALTANEVID = tao.C_TANEVID AND ottOnlineOra.ID = 8615
      LEFT JOIN T_TANITASIORATULAJDONSAG_OSSZES totOnlineOra ON totOnlineOra.C_ORATULAJDONSAGID = ottOnlineOra.ID AND totOnlineOra.C_TANEVID = ottOnlineOra.C_ALTANEVID AND totOnlineOra.TOROLT = ''F'' AND totOnlineOra.C_TANITASIORAID = tao.ID
      OUTER APPLY (
        SELECT TOP 1 innerIg.C_MEGJEGYZES
        FROM T_IGAZOLAS_OSSZES innerIg 
        WHERE innerIg.TOROLT = ''F'' 
          AND tao.C_DATUM BETWEEN innerIg.C_KEZDETE AND innerIg.C_VEGE 
          AND innerIg.C_TANULOID = tm.C_ORATANULOIID 
          AND tm.C_IGAZOLT = ''T''
      ) ig
  '

  SET @sql += IIF(@pOsztcsop IS NOT NULL, N'
      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= @osztcsop', '')
  SET @sql += IIF(@pCsoportVezetoId IS NOT NULL, N'
      INNER JOIN T_CSOPORT_OSSZES csvcs on csvcs.C_CSOPORTVEZETOID = @csoportVezetoId 
        AND csvcs.TOROLT = ''F'' AND csvcs.ID = tao.C_OSZTALYCSOPORTID', '')
  SET @whereClause += IIF(@pTol IS NOT NULL, N'
      AND tao.C_DATUM >= CAST(@tol as date)', '')
  SET @whereClause += IIF(@pIg IS NOT NULL, N'
      AND tao.C_DATUM <= CAST(@ig as date)', '')
  SET @whereClause += IIF(@pTanuloId IS NOT NULL, N'
      AND fh.ID = @tanuloId', '')
  SET @whereClause += IIF(@pTanuloNev IS NOT NULL AND @pTanuloNev <> '', N'
      AND fh.C_NYOMTATASINEV LIKE ''%'' + @tanuloNev + ''%''', '')
  SET @whereClause += IIF(@pOsztcsop IS NOT NULL
    ,IIF(@pIsKellKapcsolodoCsoportok = 1, N'
      AND tao.C_OSZTALYCSOPORTID in (SELECT ID FROM fnGetKapcsolodoOsztalycsoportok(@osztcsop))', N'
      AND tao.C_OSZTALYCSOPORTID = @osztcsop')
    ,'')
  SET @whereClause += IIF(@pCsoptip IS NOT NULL, N'
      AND EXISTS ( SELECT 1 FROM T_CSOPORT_OSSZES
                      WHERE T_CSOPORT_OSSZES.TOROLT = ''F'' AND (T_CSOPORT_OSSZES.ID = tao.C_OSZTALYCSOPORTID '
        + IIF(@pCsoptip = 1034
            , N'
                         OR T_CSOPORT_OSSZES.C_OSZTALYBONTASID = tao.C_OSZTALYCSOPORTID'
            , N'')
        + N') AND T_CSOPORT_OSSZES.C_TIPUSA = @csoptip)'
      , '')
  SET @whereClause += IIF(@pFogl IS NOT NULL, N'
      AND tao.C_FOGLALKOZASID = @fogl', '')
  SET @whereClause += IIF(@pTargy IS NOT NULL, N'
      AND tao.C_TANTARGYID = @targy', '')
  SET @whereClause += IIF(@pOraId IS NOT NULL, N'
      AND tao.ID = @oraId', '')
  SET @whereClause += IIF(@pMulTip IS NOT NULL, N'
      AND tm.C_TIPUS = @mulTip', '')
  SET @whereClause += IIF(@pKesIdo IS NOT NULL AND @pKesIdo > 0, N'
      AND tm.C_KESESPERCBEN <= @kesIdo', '')
  SET @whereClause += 
      CASE @pIgazoltsagAllapota
      WHEN 0 THEN N'
      AND tm.C_IGAZOLT = ''F'''
      WHEN 1 THEN N'
      AND tm.C_IGAZOLT = ''T'''
      WHEN 2 THEN N'
      AND tm.C_IGAZOLT IS NULL'
      ELSE ''
      END
  SET @whereClause += IIF(@pIgazolasTipus IS NOT NULL, N'
      AND tm.C_IGAZOLASTIPUSA = @igazolasTipus', '')
  SET @whereClause += N'
      AND tm.C_TIPUS <> @jelenlet'
  SET @whereClause += IIF(@pIsNemJelenlevoTanulokMegjelenitese = 1, '', N'
      AND tm.C_TIPUS != 1817')
  SET @whereClause += IIF(@pIsNemBesoroltTanulokMulasztasainakMegjelenitese = 0, N'
      AND EXISTS (
        SELECT TOP 1 1 
        FROM T_TANULOCSOPORT_OSSZES tcs 
        WHERE tcs.C_OSZTALYCSOPORTID = ocs.ID
          AND tcs.C_TANULOID = fh.ID
          AND tcs.TOROLT = ''F''
          AND tcs.C_BELEPESDATUM <= tao.C_DATUM
          AND (tcs.C_KILEPESDATUM IS NULL OR tcs.C_KILEPESDATUM >= tao.C_DATUM))', '')
  SET @whereClause += IIF(@pFeladatKategoriaId IS NOT NULL, N'
      AND ocs.C_FELADATKATEGORIAID = @feladatKategoriaId', '')
  SET @whereClause += IIF(@pFeladatEllatasiHelyId IS NOT NULL, N'
      AND ocs.C_FELADATELLATASIHELYID = @feladatEllatasiHelyId', '')
  SET @whereClause += IIF(@pIsOnlineOra IS NOT NULL, N'
    AND ISNULL(totOnlineOra.C_BOOLERTEK, ottOnlineOra.C_BOOLDEFAULT) = ' + IIF(@pIsOnlineOra = 1, '''T''', '''F'''), '')
  SET @whereClause += IIF(@pTanitasiOraId IS NOT NULL, N'
      AND tao.ID = @tanitasiOraId', '')

  IF @pSzervezetTipusId IS NOT NULL BEGIN
    SET @sql += N'
        LEFT JOIN T_CSOPORT_OSSZES cs on cs.C_ALTANEVID = ocs.C_TANEVID AND cs.C_ALINTEZMENYID = ocs.C_INTEZMENYID AND cs.TOROLT = ''F'' AND cs.ID = ocs.ID
        INNER JOIN T_SZERVEZET_OSSZES sz ON sz.C_TANEVID = tm.C_TANEVID AND sz.C_INTEZMENYID = tm.C_INTEZMENYID AND sz.TOROLT = ''F'' AND sz.ID = cs.C_SZERVEZETID AND sz.C_TIPUS = @pSzervezetTipusId'
    IF (@pSzervezetIdListString IS NOT NULL AND LEN(@pSzervezetIdListString) > 0) BEGIN
      SET @whereClause += N'
          AND sz.ID IN (' + @pSzervezetIdListString + ')'
    END
    IF @pSzervezetNev IS NOT NULL BEGIN
      SET @whereClause += N'
          AND sz.C_NEV LIKE ''%'' + @pSzervezetNev + ''%'''
    END
    IF @pSzervezetAzonosito IS NOT NULL BEGIN
      SET @whereClause += N'
          AND sz.C_AZONOSITO LIKE ''%'' + @pSzervezetAzonosito + ''%'''
    END
  END

  SET @sql += @whereClause

  EXEC sp_executesql @sql ,N'
     @tanevId int
    ,@csoportVezetoId int = NULL
    ,@tol datetime = NULL
    ,@ig datetime = NULL
    ,@tanuloId int = NULL
    ,@tanuloNev nvarchar(510) = NULL
    ,@osztcsop int = NULL
    ,@csoptip int = NULL
    ,@fogl int = NULL
    ,@targy int = NULL
    ,@oraId int = NULL
    ,@mulTip int = NULL
    ,@kesIdo int = NULL
    ,@igazolasTipus int = NULL
    ,@feladatKategoriaId int = NULL
    ,@feladatEllatasiHelyId int = NULL
    ,@jelenlet int
    ,@tanitasiOraId int
    ,@pSzervezetTipusId int = NULL
    ,@pSzervezetNev nvarchar(255) = NULL
    ,@pSzervezetAzonosito nvarchar(255) = NULL'
    ,@tanevId = @pTanevId
    ,@csoportVezetoId = @pCsoportVezetoId
    ,@tol = @pTol
    ,@ig = @pIg
    ,@tanuloId = @pTanuloId
    ,@tanuloNev = @pTanuloNev
    ,@osztcsop = @pOsztcsop
    ,@csoptip = @pCsoptip
    ,@fogl = @pFogl
    ,@targy = @pTargy
    ,@oraId = @pOraId
    ,@mulTip = @pMulTip
    ,@kesIdo = @pKesIdo
    ,@igazolasTipus = @pIgazolasTipus
    ,@feladatKategoriaId = @pFeladatKategoriaId
    ,@feladatEllatasiHelyId = @pFeladatEllatasiHelyId
    ,@jelenlet = 1498 -- MulasztasTipusEnum.jelenlet
    ,@tanitasiOraId = @pTanitasiOraId
    ,@pSzervezetTipusId = @pSzervezetTipusId
    ,@pSzervezetNev = @pSzervezetNev
    ,@pSzervezetAzonosito = @pSzervezetAzonosito

END

GO

