DROP PROCEDURE IF EXISTS uspGetSzakkepzesiJuttatasokTanulok GO CREATE PROCEDURE [dbo].[uspGetSzakkepzesiJuttatasokTanulok] @pTanevId int ,@pIntezmenyId int ,@pDatum datetime ,@pTanuloNeve nvarchar(510) = NULL ,@pOktatasiAzonosito nvarchar(40) = NULL ,@pEvfolyamTipusaId int = NULL ,@pFeladatKategoria int = NULL ,@pJogosultsag char(1) = NULL ,@pJuttatasOsszege int = NULL ,@pOsztalyId int = NULL ,@pJuttatasTipus int ,@pOsszevonas nvarchar(100) = NULL ,@pTanuloTipus int = NULL ,@pApaczaiJogosultEvfolyamIdList NVARCHAR(MAX) = NULL AS BEGIN SET NOCOUNT ON DECLARE @sql nvarchar(MAX) IF @pJuttatasTipus = 8618 BEGIN CREATE TABLE #apaczaiJogosultEvfolyamok (ID int) INSERT INTO #apaczaiJogosultEvfolyamok SELECT value FROM string_split(@pApaczaiJogosultEvfolyamIdList, ',') END SET @sql = N' SET @pDatum = DATEADD(month, -1, @pDatum) DECLARE @defaultJuttatasHatarnap int = 15 DECLARE @tanevUtlsoNapja DATE = (SELECT C_UTOLSONAP FROM T_TANEV_OSSZES WHERE ID=@pTanevId AND TOROLT = ''F'') DECLARE @utolsoNapTanevRendje DATE = (SELECT TOP 1 C_DATUM FROM T_TANEVRENDJE_OSSZES WHERE C_NAPTIPUSA = 1395 AND C_TANEVID = @pTanevId AND TOROLT = ''F'') DECLARE @utolsoNapTanev DATE = (SELECT TOP 1 C_UTOLSOTANITASINAP FROM T_TANEV_OSSZES WHERE ID = @pTanevId AND TOROLT = ''F'') DECLARE @isVegzos CHAR(1) = IIF(@pOsztalyId IS NOT NULL ,(SELECT TOP 1 C_VEGZOSEVFOLYAM FROM T_OSZTALYCSOPORT_OSSZES WHERE ID = @pOsztalyId), ''F'') DECLARE @vegzosUtolsoNap DATE = (SELECT dbo.fnGetOsztalyVegzosTanitasiNap(@pOsztalyId, @pIntezmenyId, @pTanevId)) DECLARE @elsoNap DATE = (SELECT TOP 1 C_KEZDONAP FROM T_TANEV_OSSZES WHERE ID = @pTanevId AND TOROLT = ''F'') DECLARE @utolsoNap DATE = IIF(@isVegzos = ''T'', COALESCE(@vegzosUtolsoNap, @utolsoNapTanevRendje, @utolsoNapTanev), ISNULL(@utolsoNapTanevRendje, @utolsoNapTanev)) IF @pDatum < @elsoNap BEGIN SET @pDatum = @elsoNap END IF @pDatum > @utolsoNap BEGIN SET @pDatum = @utolsoNap END DECLARE @elseje datetime = DATETIMEFROMPARTS(DATEPART(year, @pDatum), DATEPART(month, @pDatum), 1, 0, 0, 0, 0) DECLARE @juttatasHatarnap int = (SELECT ISNULL(DATEPART(day, C_JUTTATASHATARNAP), @defaultJuttatasHatarnap) FROM T_INTEZMENYADATOK_OSSZES WHERE C_TANEVID = @pTanevId AND TOROLT = ''F'') + 1 CREATE TABLE #tanulok ( TanuloId int ,TanuloNeve nvarchar(510) ,OktatasiAzonosito nvarchar(40) ,AnyjaNeve nvarchar(128) ,SzuletesiHelye nvarchar(100) ,SzuletesiIdeje datetime ,Evfolyam int ,Osztaly nvarchar(510) ,OsztalyId int ,BelepesDatum datetime ,KilepesDatum datetime ,TanuloCsoportId int ,Beszamitasos char(1)' IF @pJuttatasTipus = 8617 BEGIN SET @sql += N' ,SzakmaiVizsgaEredmenye float ,SzakmaiVizsgaSzakkepesitesMegnevezese nvarchar(200) ,IsJavitoVizsga char(1) ,IsPotloVizsga char(1) ,SzakmaiVizsgaSzakkepesitesAzonosito nvarchar(30) ,VizsgaDatum datetime ,BizonyitvanySzama varchar(100)' END ELSE IF @pJuttatasTipus IN (7888, 8618) BEGIN SET @sql += N' ,KeziAtlag float ,SzamitottAtlag float ,Szazalek int ,Bankszamlaszam nvarchar(48) ,IdpEgyediAzonosito uniqueidentifier' END SET @sql += N') ' IF @pJuttatasTipus IN (7888, 8618) BEGIN SET @sql += N' CREATE TABLE #osszevonasok (generalthonap int) INSERT INTO #osszevonasok SELECT value FROM string_split(@pOsszevonas, '','') ' END IF @pTanuloTipus = 1 BEGIN SET @sql += N' CREATE TABLE #odDiakok (tanuloId int) INSERT INTO #odDiakok SELECT t.ID FROM T_TANULO_OSSZES t INNER JOIN T_TANULOCSOPORT_OSSZES tcs ON tcs.C_TANULOID = t.ID AND (tcs.C_KILEPESDATUM IS NULL OR tcs.C_KILEPESDATUM > GETDATE()) AND tcs.TOROLT = ''F'' INNER JOIN T_OSZTALYCSOPORT_OSSZES ocs ON ocs.ID = tcs.C_OSZTALYCSOPORTID AND ocs.C_EVFOLYAMTIPUSA in (7904, 7889, 7868) AND ocs.C_FELADATKATEGORIAID = @pFeladatKategoria AND ocs.TOROLT = ''F'' INNER JOIN T_OSZTALY_OSSZES o ON o.ID = ocs.ID AND o.TOROLT = ''F'' INNER JOIN T_INTEZMENYADATOK ia ON ia.C_TANEVID = t.C_ALTANEVID AND ia.C_ISSZAKKEPZOJUTTATAS = ''T'' AND ia.TOROLT = ''F'' WHERE t.C_ALTANEVID = @pTanevId AND t.TOROLT = ''F'' UNION SELECT t.ID FROM T_TANULO_OSSZES t INNER JOIN T_INTEZMENYADATOK ia ON ia.C_TANEVID = t.C_ALTANEVID AND ia.C_ISSZAKKEPZOJUTTATAS = ''T'' AND ia.TOROLT = ''F'' WHERE t.C_ISBESZAMITASOS = ''T'' AND t.C_ALTANEVID = @pTanevId AND t.TOROLT = ''F'' UNION SELECT t.ID FROM T_TANULO_OSSZES t INNER JOIN T_TANULOCSOPORT_OSSZES tcs ON tcs.C_TANULOID = t.ID AND (tcs.C_KILEPESDATUM IS NULL OR tcs.C_KILEPESDATUM > GETDATE()) AND tcs.TOROLT = ''F'' INNER JOIN T_TANULOTANUGYIADATOK_OSSZES tta ON tta.C_TANULOCSOPORTID = tcs.ID AND (tta.C_AGAZATUJSZKTTIPUSID <> 7920 OR tta.C_SZAKMATIPUSID <> 7946) -- AgazatUjSzktTipus.Na, SzakmaTipus.Na AND tta.TOROLT = ''F'' INNER JOIN T_INTEZMENYADATOK ia ON ia.C_TANEVID = t.C_ALTANEVID AND ia.C_ISSZAKKEPZOJUTTATAS = ''T'' AND ia.TOROLT = ''F'' WHERE t.C_ALTANEVID = @pTanevId AND t.TOROLT = ''F'' ' END SET @sql += N' INSERT INTO #tanulok SELECT f.ID AS TanuloId ,f.C_NYOMTATASINEV AS TanuloNeve ,f.C_OKTATASIAZONOSITO as OktatasiAzonosito ,f.C_ANYJANEVE AS AnyjaNeve ,f.C_SZULETESIHELY AS SzuletesiHelye ,f.C_SZULETESIDATUM AS SzuletesiIdeje ,IIF(evtip.C_ISOSSZEVONT = ''T'', tta.C_TANULOEVFOLYAMTIPUSID, evtip.ID) AS Evfolyam ,ocs.C_NEV AS Osztaly ,ocs.ID AS OsztalyId ,tcs.C_BELEPESDATUM AS BelepesDatum ,tcs.C_KILEPESDATUM AS KilepesDatum ,tcs.ID AS TanuloCsoportId ,ISNULL(tta.C_ISBESZAMITASOS, t.C_ISBESZAMITASOS) Beszamitasos' IF @pJuttatasTipus = 8617 BEGIN SET @sql += N' ,epj.C_ERDEMJEGY AS SzakmaiVizsgaEredmenye ,epj.C_SZAKKEPESITESMEGNEVEZES AS SzakmaiVizsgaSzakkepesitesMegnevezese ,epj.C_ISJAVITOVIZSGA AS IsJavitoVizsga ,epj.C_ISPOTVIZSGA AS IsPotloVizsga ,epj.C_SZAKKEPESITESAZONOSITO AS SzakmaiVizsgaSzakkepesitesAzonosito ,epj.C_VIZSGADATUM AS VizsgaDatum ,epj.C_BIZONYITVANYSZAMA AS BizonyitvanySzama' END ELSE IF @pJuttatasTipus IN (7888, 8618) BEGIN SET @sql += N' ,t.C_KEZIATLAG AS KeziAtlag ,t.C_SZAMITOTTATLAG AS SzamitottAtlag ,dbo.fnGetOsztondijSzazalek(ISNULL(tta.C_ISBESZAMITASOS, t.C_ISBESZAMITASOS) ,ISNULL(tta.C_ISBESZAMITASOSFIXSZAZALEK,t.C_ISBESZAMITASOSFIXSZAZALEK) ,ISNULL(t.C_KEZIATLAG, t.C_SZAMITOTTATLAG) ,CASE WHEN evtip.C_ISOSSZEVONT = ''T'' THEN dibCodetta.C_CODE ELSE dibCodeocs.C_CODE END ,IIF(ocs.C_EVFOLYAMTIPUSA IN (7866,7883),''T'',''F'') ,t.C_ISSIKERESAGAZATIVIZSGA ,t.C_ISATLAGSZAKKEPZESI ) AS Szazalek ,t.C_BANKSZAMLASZAM AS Bankszamlaszam ,f.C_IDPEGYEDIAZONOSITO AS IdpEgyediAzonosito' END SET @sql += N' FROM T_FELHASZNALO_OSSZES f INNER JOIN T_TANULO_OSSZES t ON t.ID = f.ID AND t.TOROLT = ''F'' INNER JOIN T_TANULOCSOPORT_OSSZES tcs ON tcs.C_TANULOID = t.ID AND tcs.TOROLT = ''F'' LEFT JOIN T_TANULOCSOPORT_OSSZES tcs2 on tcs2.C_TANULOID = t.ID AND (tcs.C_KILEPESDATUM < tcs2.C_KILEPESDATUM OR (tcs.C_KILEPESDATUM IS NOT NULL AND tcs2.C_KILEPESDATUM IS NULL)) AND tcs2.TOROLT = ''F'' INNER JOIN T_OSZTALY_OSSZES o ON o.ID = tcs.C_OSZTALYCSOPORTID AND o.TOROLT = ''F'' INNER JOIN T_OSZTALYCSOPORT_OSSZES ocs ON ocs.ID = o.ID AND ocs.TOROLT = ''F'' INNER JOIN T_DICTIONARYITEMBASE_OSSZES dibCodeocs ON dibCodeocs.ID = ocs.C_EVFOLYAMTIPUSA AND dibCodeocs.C_TANEVID = ocs.C_TANEVID AND dibCodeocs.TOROLT = ''F'' INNER JOIN T_EVFOLYAMTIPUS_OSSZES evtip ON evtip.ID = ocs.C_EVFOLYAMTIPUSA AND evtip.TOROLT = ''F'' AND evtip.C_ALTANEVID = ocs.C_TANEVID ' SET @sql += IIF(@pFeladatKategoria IS NOT NULL, N' AND ocs.C_FELADATKATEGORIAID = @pFeladatKategoria', '') IF @pJuttatasTipus = 8617 BEGIN SET @sql += N' AND ocs.C_VEGZOSEVFOLYAM = ''T'' ' END SET @sql += N' LEFT JOIN T_TANULOTANUGYIADATOK_OSSZES tta ON tta.C_TANULOCSOPORTID = tcs.ID AND tta.TOROLT = ''F'' LEFT JOIN T_DICTIONARYITEMBASE_OSSZES dibCodetta ON dibCodetta.ID = tta.C_TANULOEVFOLYAMTIPUSID AND dibCodetta.C_TANEVID = tta.C_TANEVID AND dibCodetta.TOROLT = ''F''' IF @pJuttatasTipus = 8617 BEGIN SET @sql += N' LEFT JOIN T_EPJTANULOIADAT_OSSZES epj ON epj.C_TANULOID = t.ID AND epj.TOROLT = ''F'' AND epj.C_ISAKTIV = ''T'' ' END IF @pTanuloTipus = 1 BEGIN SET @sql += N' INNER JOIN #odDiakok odDiakok ON odDiakok.tanuloId = f.ID ' END SET @sql += N' WHERE f.C_TANEVID = @pTanevId AND f.TOROLT = ''F'' AND tcs2.ID IS NULL SELECT tanulok.TanuloId ,tanulok.TanuloNeve ,tanulok.OktatasiAzonosito ,tanulok.AnyjaNeve ,tanulok.SzuletesiHelye ,tanulok.SzuletesiIdeje ,tanulok.Evfolyam ,tanulok.Osztaly ,tanulok.OsztalyId ' IF @pJuttatasTipus IN (7888, 8618) BEGIN SET @sql += N' ,CASE -- van összevonás, de csak aktuális értéket kapok WHEN @pOsszevonas IS NOT NULL AND COUNT(j.C_ISJOGOSULT) = 1 THEN MAX(j.C_ISJOGOSULT) -- van összevonás, és két értéket kapok, akkor csak akkor nem jogosult, ha mindkettő nem jogosult WHEN @pOsszevonas IS NOT NULL AND COUNT(j.C_ISJOGOSULT) > 1 THEN IIF(AVG(IIF(j.C_ISJOGOSULT = ''T'', 1.0, 0.0)) = 0, ''F'', ''T'') -- nincs összevonás, csak aktuális értéket kapok ELSE MAX(j.C_ISJOGOSULT) END AS Jogosultsag ,CASE -- van összevonás, de csak aktuális értéket kapok WHEN @pOsszevonas IS NOT NULL AND COUNT(j.C_ELUTASITASOKA) = 1 THEN MAX(j.C_ELUTASITASOKA) -- van összevonás, és több értéket kapok, akkor az elutasítás oka csak akkor 0-tól különböző, ha a hozzá tartozó jogoslutság minden esetben F -- ilyenkor az elutasítás okokat bit szerint összesítjük, és megjelenítjük az összes okot, ami szerepelt az értékekben WHEN @pOsszevonas IS NOT NULL AND COUNT(j.C_ELUTASITASOKA) > 1 THEN IIF(AVG(IIF(j.C_ISJOGOSULT = ''T'', 1.0, 0.0)) = 0, MAX(j.C_ELUTASITASOKA & 0x01) + MAX(j.C_ELUTASITASOKA & 0x02) + MAX(j.C_ELUTASITASOKA & 0x04) + MAX(j.C_ELUTASITASOKA & 0x08) + MAX(j.C_ELUTASITASOKA & 0x10) + MAX(j.C_ELUTASITASOKA & 0x20) + MAX(j.C_ELUTASITASOKA & 0x40) + MAX(j.C_ELUTASITASOKA & 0x80) + MAX(j.C_ELUTASITASOKA & 0x100) + MAX(j.C_ELUTASITASOKA & 0x200) + MAX(j.C_ELUTASITASOKA & 0x400) + MAX(j.C_ELUTASITASOKA & 0x800) + MAX(j.C_ELUTASITASOKA & 0x1000) + MAX(j.C_ELUTASITASOKA & 0x2000) + MAX(j.C_ELUTASITASOKA & 0x4000) + MAX(j.C_ELUTASITASOKA & 0x8000), 0) -- nincs összevonás, csak aktuális értéket kapok ELSE MAX(j.C_ELUTASITASOKA) END AS NemJogosultsagOka ,CASE WHEN @pOsszevonas IS NOT NULL AND COUNT(j.ID) = 1 THEN SUM(2*j.C_OSSZEG) ELSE IIF(SUM(IIF(j.C_ISJOGOSULT = ''T'', j.C_OSSZEG, 0)) = 0, NULL, SUM(IIF(j.C_ISJOGOSULT = ''T'', j.C_OSSZEG, 0))) END AS OsztondijOsszege ' END ELSE IF @pJuttatasTipus = 8617 BEGIN SET @sql += N' ,j.C_ISJOGOSULT AS Jogosultsag ,j.C_ELUTASITASOKA AS NemJogosultsagOka ,j.C_OSSZEG AS OsztondijOsszege ' END SET @sql += N' ,tanulok.Beszamitasos AS Beszamitasos ' IF @pJuttatasTipus = 8617 BEGIN SET @sql += N' ,tanulok.SzakmaiVizsgaEredmenye AS SzakmaiVizsgaEredmenye ,tanulok.SzakmaiVizsgaSzakkepesitesMegnevezese AS SzakmaiVizsgaSzakkepesitesMegnevezese ,tanulok.IsJavitoVizsga AS IsJavitoVizsga ,tanulok.IsPotloVizsga AS IsPotloVizsga ,tanulok.SzakmaiVizsgaSzakkepesitesAzonosito AS SzakmaiVizsgaSzakkepesitesAzonosito ,tanulok.VizsgaDatum AS VizsgaDatum ,tanulok.BizonyitvanySzama AS BizonyitvanySzama ' END ELSE IF @pJuttatasTipus IN (7888, 8618) BEGIN SET @sql += N' ,tanulok.KeziAtlag ,tanulok.SzamitottAtlag ,tanulok.Szazalek ,tanulok.Bankszamlaszam ,tanulok.IdpEgyediAzonosito ' END SET @sql += N' FROM #tanulok tanulok LEFT JOIN T_JUTTATAS_OSSZES j ON j.C_TANULOID = tanulok.TanuloId AND (j.C_ISAKTIV = ''T'' ' IF @pJuttatasTipus IN (7888, 8618) BEGIN SET @sql += N' OR (@pOsszevonas IS NOT NULL AND j.C_GENERALTHONAP in (SELECT generalthonap from #osszevonasok)) ' END SET @sql += N' ) AND j.C_JUTTATASTIPUSID = @pJuttatasTipus AND j.TOROLT = ''F'' ' IF @pJuttatasTipus = 8618 BEGIN SET @sql += N'INNER JOIN #apaczaiJogosultEvfolyamok apaczaiJogosultEvfolyamok ON apaczaiJogosultEvfolyamok.ID = tanulok.Evfolyam ' END SET @sql += N'WHERE 1 = 1 ' SET @sql += IIF(@pTanuloNeve IS NOT NULL AND @pTanuloNeve <> '', ' AND tanulok.TanuloNeve LIKE ''%'' + @pTanuloNeve + ''%'' ', '') SET @sql += IIF(@pOktatasiAzonosito IS NOT NULL, ' AND tanulok.OktatasiAzonosito LIKE ''%'' + @pOktatasiAzonosito + ''%'' ', '') SET @sql += IIF(@pEvfolyamTipusaId IS NOT NULL, ' AND tanulok.Evfolyam = @pEvfolyamTipusaId', '') SET @sql += IIF(@pOsztalyId IS NOT NULL, ' AND tanulok.OsztalyId = @pOsztalyId', '') SET @sql += IIF(@pJogosultsag IS NOT NULL, ' AND j.C_ISJOGOSULT = @pJogosultsag','') SET @sql += IIF(@pJuttatasOsszege IS NOT NULL, IIF(@pJuttatasOsszege = 0, ' AND (j.C_OSSZEG = 0 OR j.C_OSSZEG IS NULL)', ' AND j.C_OSSZEG = @pJuttatasOsszege'), '') IF @pJuttatasTipus IN (7888, 8618) BEGIN SET @sql += N' GROUP BY tanulok.TanuloId ,tanulok.TanuloNeve ,tanulok.OktatasiAzonosito ,tanulok.AnyjaNeve ,tanulok.SzuletesiHelye ,tanulok.SzuletesiIdeje ,tanulok.Evfolyam ,tanulok.Osztaly ,tanulok.OsztalyId ,tanulok.Beszamitasos ,tanulok.KeziAtlag ,tanulok.SzamitottAtlag ,tanulok.Szazalek ,tanulok.Bankszamlaszam ,tanulok.IdpEgyediAzonosito ' END EXEC sp_executesql @sql ,N'@pTanevId int ,@pIntezmenyId int ,@pDatum datetime ,@pTanuloNeve nvarchar(510) ,@pOktatasiAzonosito nvarchar(40) ,@pEvfolyamTipusaId int ,@pOsztalyId int ,@pFeladatKategoria int ,@pJogosultsag char(1) ,@pJuttatasOsszege int ,@pJuttatasTipus int ,@pOsszevonas nvarchar(100)' ,@pTanevId = @pTanevId ,@pIntezmenyId = @pIntezmenyId ,@pDatum = @pDatum ,@pTanuloNeve = @pTanuloNeve ,@pOktatasiAzonosito = @pOktatasiAzonosito ,@pEvfolyamTipusaId = @pEvfolyamTipusaId ,@pOsztalyId = @pOsztalyId ,@pFeladatKategoria = @pFeladatKategoria ,@pJogosultsag = @pJogosultsag ,@pJuttatasOsszege = @pJuttatasOsszege ,@pJuttatasTipus = @pJuttatasTipus ,@pOsszevonas = @pOsszevonas END