DROP PROCEDURE IF EXISTS uspGetIktatottDokumentum GO CREATE PROCEDURE dbo.uspGetIktatottDokumentum @pTanevId INT, @pKategoriaId INT = NULL, @pDokumentumTipus INT = NULL, @pDokumentumNeve NVARCHAR(256) = NULL, @pFeladatEllatasiHely INT = NULL, @pIktatoSzam NVARCHAR(50) = NULL, @pIktatasKezdete DATETIME = NULL, @pIktatasVege DATETIME = NULL, @pOsztalyId INT = NULL, @pEvfolyamId INT = NULL, @pKepzesTipusId INT = NULL, @pOsztalyFonokId INT = NULL , @pTantervId INT = NULL, @pOsztalyjellemzoId INT = NULL, @pSzakcsoportId INT = NULL, @pAgazatId INT = NULL, @pSzakkepesitesId INT = NULL, @pReszszakkepesitesId INT = NULL, @pCsoportnevId INT = NULL, @pCsoporttipusId INT = NULL, @pCsoportjellemzoId INT = NULL, @pTanuloNeve NVARCHAR(50) = NULL, @pAlkalmazottId INT = NULL, @pTanuloOktAzon NVARCHAR(20) = NULL, @pAlkalmazottOktAzon NVARCHAR(20) = NULL, @pGondviseloNeve NVARCHAR(50) = NULL, @pIktatoSzemely NVARCHAR(50) = NULL, @pDokumentumStatusz INT = NULL, @pFoszamosDokumentumId INT = NULL, @pOrderBy NVARCHAR(256) = NULL, @pFirstRow INT = NULL, @pLastRow INT = NULL AS BEGIN SET NOCOUNT ON; DECLARE @whereCondition NVARCHAR(MAX) = '' DECLARE @sql NVARCHAR(MAX); DECLARE @paramDefinition NVARCHAR(MAX) SET @sql = N'SELECT * INTO #tmpIktDok FROM ( SELECT * FROM fnGetIktatottDokumentumok(@tanevId)' IF @pKategoriaId IS NOT NULL BEGIN SET @whereCondition += CONCAT(IIF(@whereCondition = '', N' WHERE ', N' AND '), N'Kategoria = @kategoriaId') END IF @pDokumentumTipus IS NOT NULL BEGIN SET @whereCondition += CONCAT(IIF(@whereCondition = '', N' WHERE ', N' AND '), N'DokumentumTipus = @dokumentumTipus') END IF @pDokumentumNeve IS NOT NULL BEGIN SET @whereCondition += CONCAT(IIF(@whereCondition = '', N' WHERE ', N' AND '), N'DokumentumNeve LIKE ''%'' + @dokumentumNeve + ''%''') END IF @pFeladatEllatasiHely IS NOT NULL BEGIN SET @whereCondition += CONCAT(IIF(@whereCondition = '', N' WHERE ', N' AND '), N'FeladatellatasihelyId = @feladatEllatasiHely') END IF @pIktatoSzam IS NOT NULL BEGIN SET @whereCondition += CONCAT(IIF(@whereCondition = '', N' WHERE ', N' AND '), N'Iktatoszam LIKE ''%'' + @iktatoSzam + ''%''') END IF @pIktatasKezdete IS NOT NULL AND @pIktatasVege IS NOT NULL BEGIN SET @whereCondition += CONCAT(IIF(@whereCondition = '', N' WHERE ', N' AND '), N'IktatasDatuma BETWEEN @iktatasKezdete AND @iktatasVege') END IF @pIktatoSzemely IS NOT NULL BEGIN SET @whereCondition += CONCAT(IIF(@whereCondition = '', N' WHERE ', N' AND '), N'IktatoSzemelye LIKE ''%'' + @iktatoSzemely + ''%''') END IF @pDokumentumStatusz IS NOT NULL BEGIN SET @whereCondition += CONCAT(IIF(@whereCondition = '', N' WHERE ', N' AND '), N'Statusz = @dokumentumStatusz') END SET @sql += CONCAT(@whereCondition, ') data;') SET @whereCondition = '' declare @nct int = 0 set @nct = case when @pOsztalyId IS NOT NULL then 1 else 0 END+ case when @pEvfolyamId IS NOT NULL then 1 else 0 END+ case when @pKepzesTipusId IS NOT NULL then 1 else 0 END+ case when @pOsztalyFonokId IS NOT NULL then 1 else 0 END+ case when @pTantervId IS NOT NULL then 1 else 0 END+ case when @pOsztalyjellemzoId IS NOT NULL then 1 else 0 END+ case when @pSzakcsoportId IS NOT NULL then 1 else 0 END+ case when @pAgazatId IS NOT NULL then 1 else 0 END+ case when @pSzakkepesitesId IS NOT NULL then 1 else 0 END+ case when @pReszszakkepesitesId IS NOT NULL then 1 else 0 END+ case when @pCsoportnevId IS NOT NULL then 1 else 0 END+ case when @pCsoporttipusId IS NOT NULL then 1 else 0 END+ case when @pCsoportjellemzoId IS NOT NULL then 1 else 0 END+ case when @pTanuloNeve IS NOT NULL then 1 else 0 END+ case when @pAlkalmazottId IS NOT NULL then 1 else 0 END+ case when @pTanuloOktAzon IS NOT NULL then 1 else 0 END+ case when @pAlkalmazottOktAzon IS NOT NULL then 1 else 0 END+ case when @pGondviseloNeve IS NOT NULL then 1 else 0 END SET @sql += N' SELECT * INTO #selIktDok FROM ( SELECT #tmpIktDok.* FROM #tmpIktDok' IF @nct > 0 BEGIN SET @sql += ' LEFT JOIN ( SELECT COUNT(datadarab.C_IKTATOTTDOKUMENTUMID) AS darab, datadarab.C_IKTATOTTDOKUMENTUMID FROM ( SELECT dksz.C_DOKUMENTUMKULCSSZOTIPUS, dksz.C_IKTATOTTDOKUMENTUMID FROM T_DOKUMENTUMKULCSSZOERTEK_OSSZES AS dksze INNER JOIN T_DOKUMENTUMKULCSSZO_OSSZES AS dksz ON dksz.C_DOKUMENTUMKULCSSZOERTEKID = dksze.ID WHERE dksz.C_IKTATOTTDOKUMENTUMID IN (SELECT ID FROM #tmpIktDok) AND (' IF (@pOsztalyId IS NOT NULL) BEGIN SET @whereCondition += CONCAT(IIF(@whereCondition = '', '', N' OR '), N'(dksz.C_DOKUMENTUMKULCSSZOTIPUS = 7399 AND dksze.C_ERTEK = CAST(@osztalyId as nvarchar))') END IF (@pEvfolyamId IS NOT NULL) BEGIN SET @whereCondition += CONCAT(IIF(@whereCondition = '', '', N' OR '), N'(dksz.C_DOKUMENTUMKULCSSZOTIPUS = 7400 AND dksze.C_ERTEK = CAST(@evfolyamId as nvarchar))') END IF (@pKepzesTipusId IS NOT NULL) BEGIN SET @whereCondition += CONCAT(IIF(@whereCondition = '', '', N' OR '), N'(dksz.C_DOKUMENTUMKULCSSZOTIPUS = 7402 AND dksze.C_ERTEK = CAST(@kepzesTipusId as nvarchar))') END IF (@pOsztalyFonokId IS NOT NULL) BEGIN SET @whereCondition += CONCAT(IIF(@whereCondition = '', '', N' OR '), N'(dksz.C_DOKUMENTUMKULCSSZOTIPUS = 7403 AND dksze.C_ERTEK = CAST(@osztalyFonokId as nvarchar))') END IF (@pTantervId IS NOT NULL) BEGIN SET @whereCondition += CONCAT(IIF(@whereCondition = '', '', N' OR '), N'(dksz.C_DOKUMENTUMKULCSSZOTIPUS = 7404 AND dksze.C_ERTEK = CAST(@tantervId as nvarchar))') END IF (@pOsztalyjellemzoId IS NOT NULL) BEGIN SET @whereCondition += CONCAT(IIF(@whereCondition = '', '', N' OR '), N'(dksz.C_DOKUMENTUMKULCSSZOTIPUS = 7405 AND dksze.C_ERTEK = CAST(@osztalyjellemzoId as nvarchar))') END IF (@pSzakcsoportId IS NOT NULL) BEGIN SET @whereCondition += CONCAT(IIF(@whereCondition = '', '', N' OR '), N'(dksz.C_DOKUMENTUMKULCSSZOTIPUS = 7406 AND dksze.C_ERTEK = CAST(@szakcsoportId as nvarchar))') END IF (@pAgazatId IS NOT NULL) BEGIN SET @whereCondition += CONCAT(IIF(@whereCondition = '', '', N' OR '), N'(dksz.C_DOKUMENTUMKULCSSZOTIPUS = 7407 AND dksze.C_ERTEK = CAST(@agazatId as nvarchar))') END IF (@pSzakkepesitesId IS NOT NULL) BEGIN SET @whereCondition += CONCAT(IIF(@whereCondition = '', '', N' OR '), N'(dksz.C_DOKUMENTUMKULCSSZOTIPUS = 7408 AND dksze.C_ERTEK = CAST(@szakkepesitesId as nvarchar))') END IF (@pReszszakkepesitesId IS NOT NULL) BEGIN SET @whereCondition += CONCAT(IIF(@whereCondition = '', '', N' OR '), N'(dksz.C_DOKUMENTUMKULCSSZOTIPUS = 7409 AND dksze.C_ERTEK = CAST(@reszszakkepesitesId as nvarchar))') END IF (@pCsoportnevId IS NOT NULL) BEGIN SET @whereCondition += CONCAT(IIF(@whereCondition = '', '', N' OR '), N'(dksz.C_DOKUMENTUMKULCSSZOTIPUS = 7410 AND dksze.C_ERTEK = CAST(@csoportnevId as nvarchar))') END IF (@pCsoporttipusId IS NOT NULL) BEGIN SET @whereCondition += CONCAT(IIF(@whereCondition = '', '', N' OR '), N'(dksz.C_DOKUMENTUMKULCSSZOTIPUS = 7411 AND dksze.C_ERTEK = CAST(@csoporttipusId as nvarchar))') END IF (@pCsoportjellemzoId IS NOT NULL) BEGIN SET @whereCondition += CONCAT(IIF(@whereCondition = '', '', N' OR '), N'(dksz.C_DOKUMENTUMKULCSSZOTIPUS = 7413 AND dksze.C_ERTEK = CAST(@csoportjellemzoId as nvarchar))') END IF (@pTanuloNeve IS NOT NULL) BEGIN SET @whereCondition += CONCAT(IIF(@whereCondition = '', '', N' OR '), N'(dksz.C_DOKUMENTUMKULCSSZOTIPUS = 7414 AND dksze.C_ERTEK LIKE ''%'' + @tanuloNeve + ''%'')') END IF (@pAlkalmazottId IS NOT NULL) BEGIN SET @whereCondition += CONCAT(IIF(@whereCondition = '', '', N' OR '), N'(dksz.C_DOKUMENTUMKULCSSZOTIPUS = 7415 AND dksze.C_ERTEK = CAST(@alkalmazottId as nvarchar))') END IF (@pTanuloOktAzon IS NOT NULL) BEGIN SET @whereCondition += CONCAT(IIF(@whereCondition = '', '', N' OR '), N'(dksz.C_DOKUMENTUMKULCSSZOTIPUS = 7417 AND dksze.C_ERTEK LIKE ''%'' + @tanuloOktAzon + ''%'')') END IF (@pAlkalmazottOktAzon IS NOT NULL) BEGIN SET @whereCondition += CONCAT(IIF(@whereCondition = '', '', N' OR '), N'(dksz.C_DOKUMENTUMKULCSSZOTIPUS = 7418 AND dksze.C_ERTEK LIKE ''%'' + @alkalmazottOktAzon + ''%'')') END IF (@pGondviseloNeve IS NOT NULL) BEGIN SET @whereCondition += CONCAT(IIF(@whereCondition = '', '', N' OR '), N'(dksz.C_DOKUMENTUMKULCSSZOTIPUS = 7416 AND dksze.C_ERTEK LIKE ''%'' + @gondviseloNeve + ''%'')') END SET @sql += @whereCondition SET @sql += N') GROUP BY dksz.C_IKTATOTTDOKUMENTUMID, dksz.C_DOKUMENTUMKULCSSZOTIPUS ) datadarab GROUP BY datadarab.C_IKTATOTTDOKUMENTUMID ) darabok ON #tmpIktDok.ID = darabok.C_IKTATOTTDOKUMENTUMID WHERE darabok.darab = @cnt' END SET @sql += ') AS sel'; IF @pFoszamosDokumentumId IS NULL BEGIN SET @sql += N' SELECT a.* INTO #alszamos FROM #selIktDok AS a INNER JOIN ( SELECT FoszamosDokumentumId, MAX(IktatasDatuma) AS datum FROM #selIktDok GROUP BY FoszamosDokumentumId ) b ON a.FoszamosDokumentumId = b.FoszamosDokumentumId AND a.IktatasDatuma = b.datum WHERE a.FoszamosDokumentumId IS NOT NULL SELECT a.* INTO #resultIktDok FROM #selIktDok AS a WHERE a.FoszamosDokumentumId IS NULL AND a.ID NOT IN (SELECT FoszamosDokumentumId FROM #alszamos) INSERT INTO #resultIktDok SELECT * FROM #alszamos DROP TABLE #alszamos;' END ELSE BEGIN SET @sql += N' SELECT * INTO #resultIktDok FROM #selIktDok WHERE ID != @foszamosDokumentumId AND FoszamosDokumentumId = (SELECT FoszamosDokumentumId FROM #selIktDok WHERE ID = @foszamosDokumentumId) INSERT INTO #resultIktDok SELECT * FROM #selIktDok WHERE ID = (SELECT FoszamosDokumentumId FROM #selIktDok WHERE ID = @foszamosDokumentumId)' END SET @sql += CONCAT(N' SELECT COUNT(#resultIktDok.ID) FROM #resultIktDok;', IIF(@pFirstRow IS NULL AND @pLastRow IS NULL, CONCAT(N' SELECT * FROM #resultIktDok', IIF(@pOrderBy IS NOT NULL, CONCAT(' ORDER BY ', @pOrderBy), '') ), CONCAT(N' SELECT * FROM ( SELECT ROW_NUMBER() OVER(ORDER BY ', IIF(@pOrderBy IS NULL, '(SELECT 0)', @pOrderBy) ,') AS rnum, #resultIktDok.* FROM #resultIktDok ) qqq WHERE qqq.rnum BETWEEN @firstRow AND @lastRow')), N' DROP TABLE #resultIktDok; DROP TABLE #tmpIktDok; DROP TABLE #selIktDok;'); --PRINT @sql SET @paramDefinition = N'@tanevId INT, @kategoriaId INT, @dokumentumTipus INT, @dokumentumNeve NVARCHAR(256), @feladatEllatasiHely INT, @iktatoSzam NVARCHAR(50), @iktatasKezdete DATETIME, @iktatasVege DATETIME, @osztalyId INT, @evfolyamId INT, @kepzesTipusId INT, @osztalyFonokId INT , @tantervId INT, @osztalyjellemzoId INT, @szakcsoportId INT, @agazatId INT, @szakkepesitesId INT, @reszszakkepesitesId INT, @csoportnevId INT, @csoporttipusId INT, @csoportjellemzoId INT, @tanuloNeve NVARCHAR(50), @alkalmazottId INT, @tanuloOktAzon NVARCHAR(20), @alkalmazottOktAzon NVARCHAR(20), @gondviseloNeve NVARCHAR(50), @iktatoSzemely NVARCHAR(50), @dokumentumStatusz INT, @foszamosDokumentumId INT, @orderBy NVARCHAR(256), @firstRow INT, @lastRow INT, @cnt INT' EXEC sp_executesql @sql, @paramDefinition, @tanevId = @pTanevId, @kategoriaId = @pKategoriaId, @dokumentumTipus = @pDokumentumTipus, @dokumentumNeve = @pDokumentumNeve, @feladatEllatasiHely = @pFeladatEllatasiHely, @iktatoSzam = @pIktatoSzam, @iktatasKezdete = @pIktatasKezdete, @iktatasVege = @pIktatasVege, @osztalyId = @pOsztalyId, @evfolyamId = @pEvfolyamId, @kepzesTipusId = @pKepzesTipusId, @osztalyFonokId = @pOsztalyFonokId, @tantervId = @pTantervId, @osztalyjellemzoId = @pOsztalyjellemzoId, @szakcsoportId = @pSzakcsoportId, @agazatId = @pAgazatId, @szakkepesitesId = @pSzakkepesitesId, @reszszakkepesitesId = @pReszszakkepesitesId, @csoportnevId = @pCsoportnevId, @csoporttipusId = @pCsoporttipusId, @csoportjellemzoId = @pCsoportjellemzoId, @tanuloNeve = @pTanuloNeve, @alkalmazottId = @pAlkalmazottId, @tanuloOktAzon = @pTanuloOktAzon, @alkalmazottOktAzon = @pAlkalmazottOktAzon, @gondviseloNeve = @pGondviseloNeve, @iktatoSzemely = @pIktatoSzemely, @dokumentumStatusz = @pDokumentumStatusz, @foszamosDokumentumId = @pFoszamosDokumentumId, @orderBy = @pOrderBy, @firstRow = @pFirstRow, @lastRow = @pLastRow, @cnt = @nct END GO