﻿DROP PROCEDURE IF EXISTS uspGetTanulokEsOsztalyokCsoportokGrid
GO

CREATE PROCEDURE uspGetTanulokEsOsztalyokCsoportokGrid
   @pTanevId int = NULL
  ,@pTanuloSrc nvarchar(1000) = NULL
  ,@pOsztalyId int = NULL
  ,@pCsoportId int = NULL
  ,@pFeladatKategoriaId int = NULL
  ,@pBelepesiDatumTol datetime = NULL
  ,@pBelepesiDatumIg datetime = NULL
  ,@pKilepesiDatumTol datetime = NULL
  ,@pKilepesiDatumIg datetime = NULL
  ,@pZaradekokSzamaTol int = NULL
  ,@pZaradekokSzamaIg int = NULL
  ,@pKiVagyAtSorolasiZaradek bit = NULL
  ,@pNaplosorszamTol int = NULL
  ,@pNaplosorszamIg int = NULL
  ,@pTorzslapszam nvarchar(100) = NULL
  ,@pKileptetesiDatumTol datetime = NULL
  ,@pKileptetesiDatumIg datetime = NULL
  ,@pUtolsoModositasDatumTol datetime = NULL
  ,@pUtolsoModositasDatumIg datetime = NULL
  ,@pIsKiirt bit = 0
  ,@pIsZaradekBontott bit = 0
  ,@pIsExport bit = 0
  ,@pIsImport bit = 0
  ,@pIsCsoport bit = 0
  ,@pKovTanev bit = 0
  
AS
BEGIN
  SET NOCOUNT ON;
  DECLARE @sql nvarchar(max) = N''
  DECLARE @osztalycsoportipus nvarchar(7) = IIF(@pIsCsoport = 0 ,'Osztaly','Csoport')
  DECLARE @zaradeksql nvarchar(max) = N''

  SET @sql += N'

  CREATE TABLE #Zaradekok (C_TANULOCSOPORTID int NOT NULL PRIMARY KEY, KiVagyAtsorolasiZaradekokSzama int, ZaradekokSzama int)
  INSERT INTO #Zaradekok
  SELECT 
     C_TANULOCSOPORTID
    ,SUM(IIF(C_ISKIVAGYATSOROLASIZARADEK = ''T'',1,0)) as KiVagyAtsorolasiZaradekokSzama
    ,SUM(1) AS ZaradekokSzama
  FROM T_ZARADEK_OSSZES
    WHERE TOROLT = ''F''
    AND C_TANEVID = @pTanevId
  GROUP BY C_TANULOCSOPORTID

  SELECT
    tcs.ID as ID
    ,tcs.C_TANULOID as TanuloId
    ,tv.C_NEV as Tanev
    ,ocs.C_NEV as ' + @osztalycsoportipus + N'Nev
    ,f.C_NYOMTATASINEV as TanuloNev
    ,IIF(f.C_NEVSORREND = ''F'',
      f.C_VEZETEKNEV + '' '' + f.C_UTONEV,
      f.C_UTONEV + '' '' + f.C_VEZETEKNEV)    AS NevElotagNelkul
    ,tcs.C_BELEPESDATUM as BelepesDatum
    ,tcs.C_KILEPESDATUM as KilepesDatum
    ,' + IIF(@pIsCsoport = 0,N'tta.C_NAPLOSORSZAM',N'NULL') + N' as NaploSorszam
    ,' + IIF(@pIsCsoport = 0,N'tta.C_TORZSLAPSZAM',N'NULL') + N' as TorzslapSzam
    ,tcs.C_KILEPESROGZITESDATUM as KilepesRogzitesDatum
    ,tcs.LASTCHANGED as UtolsoModositas 
    ,ocs.ID as ' + @osztalycsoportipus + N'Id '+    
    IIF(@pIsCsoport = 1, N',TanuloOsztalyString.Osztalynev AS TanuloOsztalyai','') + N'
    ,ISNULL(zaradek.ZaradekokSzama,0) AS ZaradekokSzama
    ,IIF(zaradek.KiVagyAtsorolasiZaradekokSzama > 0 , ''Van'', ''Nincs'') AS Vegzaradek '+
    IIF(@pIsCsoport = 1, N',C_ISAUTOEGYENICSOPORT AS IsAutoEgyeniCsoport','') + N'
  FROM T_TANULOCSOPORT_OSSZES tcs ' +
    IIF(@pIsCsoport = 0,N'INNER JOIN T_TANULOTANUGYIADATOK_OSSZES tta ON tta.C_TANULOCSOPORTID = tcs.ID AND tta.TOROLT = ''F''','') + N'
    INNER JOIN T_TANEV_OSSZES tv on tv.ID = tcs.C_TANEVID and tv.TOROLT = ''F''
    INNER JOIN T_FELHASZNALO_OSSZES f on f.ID = tcs.C_TANULOID and f.TOROLT = ''F''
    INNER JOIN T_TANULO_OSSZES t on t.ID = tcs.C_TANULOID and t.TOROLT = ''F''
    INNER JOIN T_OSZTALYCSOPORT_OSSZES ocs on ocs.ID = tcs.C_OSZTALYCSOPORTID 
      and ocs.TOROLT = ''F'' '+
      IIF(@pFeladatKategoriaId IS NOT NULL,N' AND ocs.C_FELADATKATEGORIAID = @pFeladatKategoriaId','') + N'
    INNER JOIN T_' + @osztalycsoportipus + N'_OSSZES cs on cs.ID = ocs.ID and cs.TOROLT = ''F''' + 
    IIF(@pIsCsoport = 1,N' CROSS APPLY fnGetTanuloOsztalyString(tcs.C_TANULOID, default, ocs.C_FELADATKATEGORIAID, default, @pKovTanev, @pOsztalyId) TanuloOsztalyString','') + N'
    LEFT JOIN #Zaradekok zaradek ON zaradek.C_TANULOCSOPORTID = tcs.ID
  WHERE tcs.TOROLT = ''F'' ' +
    IIF(@pTanevId IS NULL,'',N' AND f.C_TANEVID = @pTanevId AND t.C_ALTANEVID = @pTanevId AND ocs.C_TANEVID = @pTanevId AND cs.C_ALTANEVID = @pTanevId ') +
    IIF(@pIsKiirt = 1,N' AND tcs.C_KILEPESDATUM IS NOT NULL ','') +
    IIF(@pTanuloSrc IS NOT NULL, N' AND LOWER(f.C_NYOMTATASINEV) LIKE ''%'' + LOWER(@pTanuloSrc) + ''%''','') + 
    IIF(@pIsCsoport = 0 AND @pOsztalyId IS NOT NULL, N' AND ocs.ID = @pOsztalyId ','') + 
    IIF(@pCsoportId IS NOT NULL, N' AND ocs.ID = @pCsoportId ','') + 
    IIF(@pBelepesiDatumTol IS NOT NULL, N' AND tcs.C_BELEPESDATUM >= @pBelepesiDatumTol ', '' ) + 
    IIF(@pBelepesiDatumIg IS NOT NULL, N' AND tcs.C_BELEPESDATUM <= @pBelepesiDatumIg ', '' ) + 
    IIF(@pKilepesiDatumTol IS NOT NULL, N' AND tcs.C_KILEPESDATUM >= @pKilepesiDatumTol ', '' ) + 
    IIF(@pKilepesiDatumIg IS NOT NULL, N' AND tcs.C_KILEPESDATUM <= @pKilepesiDatumIg ', '' ) +     
    IIF(@pIsCsoport = 0 AND @pNaplosorszamTol IS NOT NULL, N' AND tta.C_NAPLOSORSZAM >= @pNaplosorszamTol ', '' ) + 
    IIF(@pIsCsoport = 0 AND @pNaplosorszamIg IS NOT NULL, N' AND tta.C_NAPLOSORSZAM <= @pNaplosorszamIg ', '' ) + 
    IIF(@pIsCsoport = 0 AND @pTorzslapszam IS NOT NULL, N' AND tta.C_TORZSLAPSZAM LIKE ''%'' + LOWER(@pTorzslapszam) + ''%''', '' ) + 
    IIF(@pKileptetesiDatumTol IS NOT NULL, N' AND tcs.C_KILEPESROGZITESDATUM >= @pKileptetesiDatumTol ', '' ) + 
    IIF(@pKileptetesiDatumIg IS NOT NULL, N' AND tcs.C_KILEPESROGZITESDATUM <= @pKileptetesiDatumIg ', '' ) + 
    IIF(@pUtolsoModositasDatumTol IS NOT NULL, N' AND tcs.LASTCHANGED >= @pUtolsoModositasDatumTol ', '' ) + 
    IIF(@pUtolsoModositasDatumIg IS NOT NULL, N' AND tcs.LASTCHANGED <= @pUtolsoModositasDatumIg ', '' ) +
    IIF(@pIsCsoport = 1 AND @pOsztalyId IS NOT NULL, N' AND TanuloOsztalyString.Osztalynev IS NOT NULL ','') +
    IIF(@pZaradekokSzamaTol IS NOT NULL, N' AND ISNULL(zaradek.ZaradekokSzama, 0) >= @pZaradekokSzamaTol','') +
    IIF(@pZaradekokSzamaIg IS NOT NULL, N' AND ISNULL(zaradek.ZaradekokSzama, 0) <= @pZaradekokSzamaIg','') +
    IIF(@pKiVagyAtSorolasiZaradek = 1, N' AND zaradek.KiVagyAtsorolasiZaradekokSzama > 0','') +
    IIF(@pKiVagyAtSorolasiZaradek IS NOT NULL AND @pKiVagyAtSorolasiZaradek = 0, N' AND (zaradek.KiVagyAtsorolasiZaradekokSzama < 1 OR zaradek.KiVagyAtsorolasiZaradekokSzama IS NULL)','')

  EXEC sp_executesql @sql, N'
   @pTanevId int = NULL
  ,@pTanuloSrc nvarchar(1000) = NULL 
  ,@pFeladatKategoriaId int = NULL
  ,@pOsztalyId int = NULL
  ,@pCsoportId int = NULL
  ,@pBelepesiDatumTol datetime = NULL
  ,@pBelepesiDatumIg datetime = NULL
  ,@pKilepesiDatumTol datetime = NULL
  ,@pKilepesiDatumIg datetime = NULL
  ,@pZaradekokSzamaTol int = NULL
  ,@pZaradekokSzamaIg int = NULL
  ,@pKiVagyAtSorolasiZaradek int = NULL
  ,@pNaplosorszamTol int = NULL
  ,@pNaplosorszamIg int = NULL
  ,@pTorzslapszam nvarchar(1000) = NULL
  ,@pKileptetesiDatumTol datetime = NULL
  ,@pKileptetesiDatumIg datetime = NULL
  ,@pUtolsoModositasDatumTol datetime = NULL
  ,@pUtolsoModositasDatumIg datetime = NULL
  ,@pKovTanev bit = 0'
  ,@pTanevId = @pTanevId
  ,@pTanuloSrc = @pTanuloSrc
  ,@pFeladatKategoriaId = @pFeladatKategoriaId
  ,@pOsztalyId = @pOsztalyId
  ,@pCsoportId = @pCsoportId
  ,@pBelepesiDatumTol = @pBelepesiDatumTol
  ,@pBelepesiDatumIg = @pBelepesiDatumIg
  ,@pKilepesiDatumTol = @pKilepesiDatumTol
  ,@pKilepesiDatumIg = @pKilepesiDatumIg
  ,@pZaradekokSzamaTol = @pZaradekokSzamaTol
  ,@pZaradekokSzamaIg = @pZaradekokSzamaIg
  ,@pKiVagyAtSorolasiZaradek = @pKiVagyAtSorolasiZaradek
  ,@pNaplosorszamTol = @pNaplosorszamTol
  ,@pNaplosorszamIg = @pNaplosorszamIg
  ,@pTorzslapszam = @pTorzslapszam
  ,@pKileptetesiDatumTol = @pKileptetesiDatumTol
  ,@pKileptetesiDatumIg = @pKileptetesiDatumIg
  ,@pUtolsoModositasDatumTol = @pUtolsoModositasDatumTol
  ,@pUtolsoModositasDatumIg = @pUtolsoModositasDatumIg
  ,@pKovTanev = @pKovTanev
    
END
GO
