kreta/Kreta.DataAccess.Migrations/DBScripts/Database/dbo/Stored procedures/uspGetSzakkepzesiJuttatasokTanulok.sql
2024-03-13 00:33:46 +01:00

401 lines
No EOL
15 KiB
Transact-SQL

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