﻿/* ===================================== */
/* Description: <Dinamikus sql az igazolások (T_IGAZOLAS) lekérdezésére és/vagy exportjára> */
/* ===================================== */
DROP PROCEDURE IF EXISTS uspGetIgazolasInfo
GO

CREATE PROCEDURE [dbo].[uspGetIgazolasInfo] 
   @pIgazolasId int = NULL
  ,@pIntezmenyId int = NULL
  ,@pTanevId int = NULL
  ,@pTanuloId int = NULL
  ,@pIgazolasKezdete datetime = NULL
  ,@pIgazolasVege datetime = NULL
  ,@pIgazolasTipusa int = NULL
  ,@pTanuloNeve nvarchar(255) = NULL
  ,@pOsztalyCsoportId int = NULL
  ,@pRogzitesDatumaIg datetime = NULL
  ,@pRogzitesDatumaTol datetime = NULL
  ,@pRogzitoId int = NULL
  ,@pIgazolasDatuma datetime = NULL
  ,@pFeladatKategoriaId int = NULL
  ,@pFeladatEllatasiHelyId int = NULL
  ,@pSzervezetTipusId int = NULL

  /* Sorting and paging */
  --,@NeedPaging bit = 0
  --,@OrderBy nvarchar(255) = 'ID'
  --,@PageNumber int = 1
  --,@PageSize int = 100
  --,@LastRowCount int = 0

  /* SimpleResult, Excel export */
  ,@SimpleResult bit = 0 -- ha true, akkor a visszaadott oszlopok szukebb listat adnak vissza, figyelve a join-ra és a where-re!
  ,@IsExport bit = 0
AS BEGIN
  SET NOCOUNT ON;

  DECLARE @sql nvarchar(max) = ''

  /* SELECT part */
  SET @sql +=
  --IIF(@NeedPaging = 1 AND @LastRowCount = 0 AND @IsExport = 0, N'SELECT *, COUNT(ID) OVER () AS RN FROM (', N'') --Pager
  + N'
  SELECT DISTINCT
     igazolas.ID AS ID
    ,tanulo.C_NYOMTATASINEV AS Nev
    ,felhasznalo.C_NYOMTATASINEV AS Rogzito
    ,igazolas.C_KEZDETE AS Kezdete
    ,igazolas.C_VEGE AS Vege
    ,igazolas.C_MEGJEGYZES AS Megjegyzes
    ,igazolas.C_IGAZOLASTIPUSA AS IgazolasTipusa
    ,igazolas.C_ROGZITESDATUMA AS RogzitesDatuma

    ' + IIF(@SimpleResult = 1, N'', N'
    ,tanulo.ID AS TanuloId
    ,IIF(tanulo.C_NEVSORREND = ''T''
          ,tanulo.C_UTONEV + '' '' + tanulo.C_VEZETEKNEV
          ,tanulo.C_VEZETEKNEV + '' '' + tanulo.C_UTONEV) AS NevElotagNelkul
    ,IIF(felhasznalo.C_NEVSORREND = ''T''
          ,felhasznalo.C_UTONEV + '' '' + felhasznalo.C_VEZETEKNEV
          ,felhasznalo.C_VEZETEKNEV + '' '' + felhasznalo.C_UTONEV) AS RogzitoElotagNelkul') + '
    ' + IIF(@IsExport = 1 AND @SimpleResult = 0, N',tanulo.C_SZULETESIDATUM AS SzuletesiDatum', N'') + N'
    ' + IIF(@IsExport = 1 AND @SimpleResult = 0, N',tanulo.C_OKTATASIAZONOSITO AS OktatasiAzonosito', N'') + N'
    --,COUNT(igazolas.ID) OVER () AS db

  FROM T_IGAZOLAS igazolas
    INNER JOIN T_FELHASZNALO felhasznalo ON felhasznalo.ID = igazolas.C_ROGZITOID AND felhasznalo.TOROLT=''F''
    INNER JOIN T_FELHASZNALO tanulo ON tanulo.ID = igazolas.C_TANULOID AND tanulo.TOROLT=''F''
    '
  IF (@SimpleResult = 0 AND (@pOsztalyCsoportId IS NOT NULL OR @pFeladatKategoriaId IS NOT NULL OR @pFeladatEllatasiHelyId IS NOT NULL)) -- Ha SimpleResult=1, akkor nem joinol és nem is lehet osztalycsoportra vagy feladatkategoriaidra szűrni
  SET @sql += N'
    INNER JOIN T_TANULOCSOPORT tanuloCsoport
        INNER JOIN T_OSZTALY o ON o.ID = tanuloCsoport.C_OSZTALYCSOPORTID AND o.TOROLT=''F''
      ON tanuloCsoport.C_TANULOID = igazolas.C_TANULOID AND tanuloCsoport.TOROLT=''F''
        --AND (igazolas.C_KEZDETE >= tanulocsoport.C_BELEPESDATUM AND (igazolas.C_KEZDETE < tanulocsoport.C_KILEPESDATUM OR tanulocsoport.C_KILEPESDATUM IS NULL))
    INNER JOIN T_OSZTALYCSOPORT osztalyCsoport ON tanuloCsoport.C_OSZTALYCSOPORTID = osztalyCsoport.ID AND osztalyCsoport.TOROLT=''F''
  '
  /* WHERE part */
  SET @sql += N'
  WHERE
        igazolas.TOROLT = ''F''
    ' + IIF(@pIgazolasId IS NULL, N'', N' AND igazolas.ID = @pIgazolasId') + N'
    ' + IIF(@pIntezmenyId IS NULL, N'', N' AND igazolas.C_INTEZMENYID = @pIntezmenyId') + '
    ' + IIF(@pTanevId IS NULL, N'', N' AND igazolas.C_TANEVID = @pTanevId') + '
    ' + IIF(@pTanuloId IS NULL, N'', N' AND igazolas.C_TANULOID IN (@pTanuloId)') + '
    ' + IIF(@pIgazolasKezdete IS NULL, N'', N' AND igazolas.C_KEZDETE >= @pIgazolasKezdete') + '
    ' + IIF(@pIgazolasVege IS NULL, N'', N' AND igazolas.C_VEGE <= @pIgazolasVege') + '
    ' + IIF(@pIgazolasTipusa IS NULL, N'', N' AND igazolas.C_IGAZOLASTIPUSA = @pIgazolasTipusa') + '
    ' + IIF(@pTanuloNeve IS NULL, N'', N' AND tanulo.C_NYOMTATASINEV LIKE Concat(''%'',@pTanuloNeve,''%'')') + '
    ' + IIF(@pRogzitesDatumaIg IS NULL, N'', N' AND CONVERT(date, igazolas.C_ROGZITESDATUMA) <= @pRogzitesDatumaIg') + '
    ' + IIF(@pRogzitesDatumaTol IS NULL, N'', N' AND CONVERT(date, igazolas.C_ROGZITESDATUMA) >= @pRogzitesDatumaTol') + '
    ' + IIF(@pRogzitoId IS NULL, N'', N' AND igazolas.C_ROGZITOID = @pRogzitoId') + '
    ' + IIF(@pSzervezetTipusId IS NULL, N' AND igazolas.C_SZERVEZETID IS NULL',N' AND igazolas.C_SZERVEZETID IS NOT NULL') + '
    ' + IIF(@pIgazolasDatuma IS NULL, N'', N' AND igazolas.C_KEZDETE <= @pIgazolasDatuma AND @pIgazolasDatuma <= igazolas.C_VEGE') + ''

  IF (@SimpleResult = 0 AND (@pOsztalyCsoportId IS NOT NULL OR @pFeladatKategoriaId IS NOT NULL OR @pFeladatEllatasiHelyId IS NOT NULL))
  SET @sql += N'
    ' + IIF(@SimpleResult = 1, N'', N' AND tanuloCsoport.C_BELEPESDATUM <= igazolas.C_KEZDETE AND (tanuloCsoport.C_KILEPESDATUM > igazolas.C_KEZDETE OR tanuloCsoport.C_KILEPESDATUM IS NULL)') + '
    ' + IIF(@pOsztalyCsoportId IS NULL, N'', N' AND tanuloCsoport.C_OSZTALYCSOPORTID = @pOsztalyCsoportId') + '
    ' + IIF(@pFeladatKategoriaId IS NULL, N'', N' AND osztalyCsoport.C_FELADATKATEGORIAID = @pFeladatKategoriaId') + '
    ' + IIF(@pFeladatEllatasiHelyId IS NULL, N'', N' AND osztalyCsoport.C_FELADATELLATASIHELYID = @pFeladatEllatasiHelyId') + ''

  EXEC sp_executesql @sql, N'
     @pIgazolasId int
    ,@pIntezmenyId int
    ,@pTanevId int
    ,@pTanuloId int
    ,@pIgazolasKezdete datetime
    ,@pIgazolasVege datetime
    ,@pIgazolasTipusa int
    ,@pTanuloNeve nvarchar(255)
    ,@pOsztalyCsoportId int
    ,@pRogzitesDatumaIg datetime
    ,@pRogzitesDatumaTol datetime
    ,@pRogzitoId int
    ,@pIgazolasDatuma datetime
    ,@SimpleResult bit
    ,@IsExport bit
    ,@pFeladatKategoriaId int
    ,@pFeladatEllatasiHelyId int
    '
    ,@pIgazolasId = @pIgazolasId
    ,@pIntezmenyId = @pIntezmenyId
    ,@pTanevId = @pTanevId
    ,@pTanuloId = @pTanuloId
    ,@pIgazolasKezdete = @pIgazolasKezdete
    ,@pIgazolasVege = @pIgazolasVege
    ,@pIgazolasTipusa = @pIgazolasTipusa
    ,@pTanuloNeve = @pTanuloNeve
    ,@pOsztalyCsoportId = @pOsztalyCsoportId
    ,@pRogzitesDatumaIg = @pRogzitesDatumaIg
    ,@pRogzitesDatumaTol = @pRogzitesDatumaTol
    ,@pRogzitoId = @pRogzitoId
    ,@pIgazolasDatuma = @pIgazolasDatuma
    ,@SimpleResult = @SimpleResult
    ,@IsExport = @IsExport
    ,@pFeladatKategoriaId = @pFeladatKategoriaId
    ,@pFeladatEllatasiHelyId = @pFeladatEllatasiHelyId

END
GO
