DROP PROCEDURE IF EXISTS uspTanuloKereses
GO

CREATE PROCEDURE [dbo].[uspTanuloKereses]
   @pTorolt char(1)
  ,@pDatum datetime = NULL
  ,@pTanuloBelepesNelkul bit = 0
  ,@pNincsAllampolgarsag int = NULL
  ,@pNincsAnyanyelv int = NULL
  ,@pFelvetelEve int = NULL
  ,@pTanevId int
  ,@pFeladatKategoriaId int = NULL
  ,@pTanuloNeve nvarchar(255) = NULL
  ,@pNeme int = NULL
  ,@pSzuletesiIdoKezdet datetime = NULL
  ,@pSzuletesiIdoVeg datetime = NULL
  ,@pSzuletesiHely nvarchar(50) = NULL
  ,@pOktatasiAzonosito nvarchar(20) = NULL
  ,@pOsztalyCsoportId int = NULL
  ,@pVegzosEvfolyam char(1) = NULL
  ,@pSNI char(1) = NULL
  ,@pBTM char(1) = NULL
  ,@pFeladatellatasiHelyId int = NULL
  ,@pHatranyosHelyzetId int = NULL
  ,@pEvfolyamTipusaId int = NULL
  ,@pOsztalybaSoroltTantervNelkul bit = NULL
  ,@pAktiv bit = NULL
  ,@pMuveszetiAgId int = NULL
AS BEGIN
SET NOCOUNT ON
  DECLARE @sql nvarchar(max);

IF (@pOsztalyCsoportId IS NOT NULL) BEGIN
  CREATE TABLE #OsztalyCsoportTanuloi(ID int)

  INSERT INTO #OsztalyCsoportTanuloi (ID)
  SELECT 
    C_TANULOID
  FROM T_TANULOCSOPORT_OSSZES
  WHERE C_OSZTALYCSOPORTID = @pOsztalyCsoportId 
    AND C_BELEPESDATUM <= @pDatum
    AND (C_KILEPESDATUM IS NULL OR C_KILEPESDATUM > @pDatum) 
    AND TOROLT = 'F'
END

SET @sql = N'
SELECT
   NEWID() AS ID
  ,T_FELHASZNALO_OSSZES.ID AS TanuloId
  ,tanugyiAdatok.OsztalyId AS OsztalyCsoportId
  ,T_FELHASZNALO_OSSZES.C_NYOMTATASINEV AS TanuloNeve
  ,IIF(T_FELHASZNALO_OSSZES.C_NEVSORREND = ''T'',
    T_FELHASZNALO_OSSZES.C_UTONEV + '' '' + T_FELHASZNALO_OSSZES.C_VEZETEKNEV,
    T_FELHASZNALO_OSSZES.C_VEZETEKNEV + '' '' + T_FELHASZNALO_OSSZES.C_UTONEV) AS TanuloNeveElotagNelkul
  ,T_FELHASZNALO_OSSZES.c_anyjaneve AS AnyjaNeve
  ,T_FELHASZNALO_OSSZES.C_OKTATASIAZONOSITO AS OktatasiAzonosito
  ,ISNULL(tanugyiAdatok.TantervNev, tanterv.C_NEV) AS Tanterv
  ,tanugyiAdatok.C_NEV AS Osztaly
  ,T_FELHASZNALO_OSSZES.C_SZULETESIHELY AS SzuletesiHely
  ,T_FELHASZNALO_OSSZES.C_SZULETESIDATUM AS SzuletesiIdo
  ,ISNULL(tanugyiAdatok.C_TANKOTELEZETT, T_TANULO_OSSZES.C_TANKOTELEZETT) AS Tankotelezett
  ,tanugyiAdatok.C_MUVESZETIAGID as MuveszetiAgId
FROM T_FELHASZNALO_OSSZES' 
+ IIF(@pOsztalyCsoportId IS NOT NULL, '
  INNER JOIN #OsztalyCsoportTanuloi ocst ON ocst.ID = T_FELHASZNALO_OSSZES.ID ', '') + '
  LEFT JOIN
    (SELECT 
       tanulo.ID TanuloId
      ,tta.C_TANKOTELEZETT
      ,tcso.C_OSZTALYCSOPORTID OsztalyId
      ,ocs.C_NEV
      ,ocs.C_MUVESZETIAGID
      ,tanterv.C_NEV TantervNev
      ,ocs.C_VEGZOSEVFOLYAM
      ,ocs.C_FELADATELLATASIHELYID
      ,ocs.C_FELADATKATEGORIAID
      ,ocs.C_EVFOLYAMTIPUSA
    FROM T_TANULO_OSSZES tanulo
      INNER JOIN T_TANULOCSOPORT_OSSZES tcso ON tcso.C_TANULOID = tanulo.ID 
        AND tcso.TOROLT=''F'' 
        AND tcso.C_BELEPESDATUM <= @pDatum  
        AND (tcso.C_KILEPESDATUM IS NULL OR tcso.C_KILEPESDATUM > @pDatum )
      INNER JOIN T_OSZTALYCSOPORT_OSSZES ocs ON ocs.ID = tcso.C_OSZTALYCSOPORTID AND ocs.TOROLT = ''F''
      INNER JOIN T_TANULOTANUGYIADATOK_OSSZES tta ON tta.C_TANULOCSOPORTID = tcso.ID AND tta.TOROLT=''F''
      INNER JOIN T_TANTERV_OSSZES tanterv on tanterv.ID = tta.C_TANTERVID AND tanterv.TOROLT = ''F''
    WHERE tanulo.C_ALTANEVID =  @pTanevId 
    ) as tanugyiAdatok ON tanugyiAdatok.TanuloId = T_FELHASZNALO_OSSZES.ID 
  INNER JOIN T_TANULO_OSSZES ON T_FELHASZNALO_OSSZES.ID=T_TANULO_OSSZES.ID
  INNER JOIN T_TANEV_OSSZES ON T_TANEV_OSSZES.ID = T_TANULO_OSSZES.C_FELVETELTANEVEID
  INNER JOIN T_TANTERV_OSSZES tanterv on tanterv.ID = T_TANULO_OSSZES.C_TANTERVID AND tanterv.TOROLT = ''F'' '

SET @sql += N' 
WHERE T_FELHASZNALO_OSSZES.TOROLT= @pTorolt
  AND T_TANULO_OSSZES.TOROLT= @pTorolt
  AND tanterv.TOROLT=''F''
  AND T_FELHASZNALO_OSSZES.C_TANEVID =  @pTanevId '
  + IIF(@pTanuloNeve IS NOT NULL AND @pTanuloNeve <> '', ' AND T_FELHASZNALO_OSSZES.C_NYOMTATASINEV LIKE ''%'' + @pTanuloNeve + ''%'' ', '') + 
  + IIF(@pNeme IS NOT NULL, ' AND T_FELHASZNALO_OSSZES.C_NEME = @pNeme ', '') + 
  + IIF(@pSzuletesiIdoKezdet IS NOT NULL, ' AND T_FELHASZNALO_OSSZES.C_SZULETESIDATUM >= @pSzuletesiIdoKezdet ', '') + 
  + IIF(@pSzuletesiIdoVeg IS NOT NULL, ' AND T_FELHASZNALO_OSSZES.C_SZULETESIDATUM <= @pSzuletesiIdoVeg ', '') + 
  + IIF(@pSzuletesiHely IS NOT NULL, ' AND T_FELHASZNALO_OSSZES.C_SZULETESIHELY LIKE ''%'' + @pSzuletesiHely + ''%'' ', '') + 
  + IIF(@pOktatasiAzonosito IS NOT NULL AND @pOktatasiAzonosito <> '',' AND T_FELHASZNALO_OSSZES.C_OKTATASIAZONOSITO LIKE ''%'' + @pOktatasiAzonosito + ''%'' ', '') + 
  + IIF(@pVegzosEvfolyam IS NOT NULL AND @pVegzosEvfolyam <> '', ' AND tanugyiAdatok.C_VEGZOSEVFOLYAM = @pVegzosEvfolyam ', '') + 
  + IIF(@pSNI IS NOT NULL AND @pSNI <> '', ' AND T_TANULO_OSSZES.C_SAJATOSNEVELESU = @pSNI ', '') + 
  + IIF(@pBTM IS NOT NULL AND @pBTM <> '', ' AND T_TANULO_OSSZES.C_BTMPROBLEMAS = @pBTM ', '') + 
  + IIF(@pFeladatellatasiHelyId IS NOT NULL, ' AND tanugyiAdatok.C_FELADATELLATASIHELYID = @pFeladatellatasiHelyId ', '') + 
  + IIF(@pHatranyosHelyzetId IS NOT NULL, ' AND T_TANULO_OSSZES.C_HATRANYOSHELYZETU = @pHatranyosHelyzetId ', '') + 
  + IIF(@pEvfolyamTipusaId IS NOT NULL, ' AND tanugyiAdatok.C_EVFOLYAMTIPUSA = @pEvfolyamTipusaId ', '') + 
  + IIF(@pOsztalybaSoroltTantervNelkul IS NOT NULL AND @pOsztalybaSoroltTantervNelkul = 1, '  AND T_TANULO_OSSZES.C_TANTERVID IS NULL AND tanugyiAdatok.OsztalyId IS NOT NULL ', '') + 
  + IIF(@pAktiv = 1, '  AND tanugyiAdatok.OsztalyId IS NOT NULL ', '') + 
  + IIF(@pFeladatKategoriaId IS NOT NULL, ' AND tanugyiAdatok.C_FELADATKATEGORIAID = @pFeladatKategoriaId ', '') + 
  + IIF(@pMuveszetiAgId IS NOT NULL, ' AND tanugyiAdatok.C_MUVESZETIAGID = @pMuveszetiAgId ', '') + 
  + IIF(@pNincsAllampolgarsag IS NOT NULL, ' AND T_FELHASZNALO_OSSZES.C_ALLAMPOLGARSAGA = @pNincsAllampolgarsag ', '') + 
  + IIF(@pNincsAnyanyelv IS NOT NULL, ' AND (T_FELHASZNALO_OSSZES.C_ANYANYELVE = @pNincsAnyanyelv OR T_FELHASZNALO_OSSZES.C_ANYANYELVE IS NULL) ', '') + 
  + IIF(@pTanuloBelepesNelkul = 1, ' AND NOT EXISTS(SELECT C_FELHASZNALOID FROM T_FELHASZNALOBELEPES_OSSZES fb WHERE fb.C_FELHASZNALOID = T_FELHASZNALO_OSSZES.ID AND fb.TOROLT = ''F'' AND fb.C_GONDVISELOID IS NULL) ', '') + 
  + IIF(@pFelvetelEve IS NOT NULL, ' AND T_TANEV_OSSZES.ID = @pFelvetelEve ', '') + 
  ' AND T_TANULO_OSSZES.C_ALTANEVID =  @pTanevId '
  
EXEC sp_executesql @sql, N'
     @pTorolt char(1)
    ,@pDatum datetime = NULL
    ,@pTanuloBelepesNelkul bit = 0
    ,@pNincsAllampolgarsag int = NULL
    ,@pNincsAnyanyelv int = NULL
    ,@pFelvetelEve int = NULL
    ,@pTanevId int
    ,@pFeladatKategoriaId int = NULL
    ,@pTanuloNeve nvarchar(255) = NULL
    ,@pNeme int = NULL
    ,@pSzuletesiIdoKezdet datetime = NULL
    ,@pSzuletesiIdoVeg datetime = NULL
    ,@pSzuletesiHely nvarchar(50) = NULL
    ,@pOktatasiAzonosito nvarchar(20) = NULL
    ,@pOsztalyCsoportId int = NULL
    ,@pVegzosEvfolyam char(1) = NULL
    ,@pSNI char(1) = NULL
    ,@pBTM char(1) = NULL
    ,@pFeladatellatasiHelyId int = NULL
    ,@pHatranyosHelyzetId int = NULL
    ,@pEvfolyamTipusaId int = NULL
    ,@pOsztalybaSoroltTantervNelkul bit = NULL
    ,@pAktiv bit = NULL
    ,@pMuveszetiAgId int = NULL '
    ,@pTorolt = @pTorolt
    ,@pDatum = @pDatum
    ,@pTanuloBelepesNelkul = @pTanuloBelepesNelkul
    ,@pNincsAllampolgarsag = @pNincsAllampolgarsag
    ,@pNincsAnyanyelv = @pNincsAnyanyelv
    ,@pFelvetelEve = @pFelvetelEve
    ,@pTanevId = @pTanevId
    ,@pFeladatKategoriaId = @pFeladatKategoriaId
    ,@pTanuloNeve = @pTanuloNeve
    ,@pNeme = @pNeme
    ,@pSzuletesiIdoKezdet = @pSzuletesiIdoKezdet
    ,@pSzuletesiIdoVeg = @pSzuletesiIdoVeg
    ,@pSzuletesiHely = @pSzuletesiHely
    ,@pOktatasiAzonosito = @pOktatasiAzonosito
    ,@pOsztalyCsoportId  = @pOsztalyCsoportId
    ,@pVegzosEvfolyam = @pVegzosEvfolyam
    ,@pSNI = @pSNI
    ,@pBTM = @pBTM
    ,@pFeladatellatasiHelyId = @pFeladatellatasiHelyId
    ,@pHatranyosHelyzetId = @pHatranyosHelyzetId
    ,@pEvfolyamTipusaId = @pEvfolyamTipusaId
    ,@pOsztalybaSoroltTantervNelkul = @pOsztalybaSoroltTantervNelkul
    ,@pAktiv = @pAktiv
    ,@pMuveszetiAgId = @pMuveszetiAgId
END

GO