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

220 lines
8.7 KiB
Transact-SQL

DROP PROCEDURE IF EXISTS uspGetMulasztasData
GO
CREATE PROCEDURE uspGetMulasztasData
@pTanevId int
,@pCsoportVezetoId int = NULL
,@pIsNemJelenlevoTanulokMegjelenitese bit
,@pTol datetime = NULL
,@pIg datetime = NULL
,@pTanuloId int = NULL
,@pTanuloNev nvarchar(510) = NULL
,@pOsztcsop int = NULL
,@pIsKellKapcsolodoCsoportok bit
,@pCsoptip int = NULL
,@pFogl int = NULL
,@pTargy int = NULL
,@pOraId int = NULL
,@pMulTip int = NULL
,@pKesIdo int = NULL
,@pIgazolasTipus int = NULL
,@pIsNemBesoroltTanulokMulasztasainakMegjelenitese bit
,@pFeladatKategoriaId int = NULL
,@pFeladatEllatasiHelyId int = NULL
,@pIgazoltsagAllapota int = NULL
,@pIsOnlineOra bit = NULL
,@pTanitasiOraId int = NULL
,@pSzervezetTipusId int = NULL
,@pSzervezetIdListString nvarchar(255) = NULL
,@pSzervezetNev nvarchar(255) = NULL
,@pSzervezetAzonosito nvarchar(255) = NULL
AS
BEGIN
SET NOCOUNT ON;
DECLARE @sql nvarchar(max)
,@whereClause nvarchar(max) = N'
WHERE tm.TOROLT = ''F'' AND tm.C_TANEVID = @tanevId'
SET @sql = N'
SELECT
tm.ID as ID
,fh.ID AS TanuloId
,fh.C_NYOMTATASINEV as TanuloNev
,IIF(fh.C_NEVSORREND = ''T'',
fh.C_UTONEV + '' '' + fh.C_VEZETEKNEV,
fh.C_VEZETEKNEV + '' '' + fh.C_UTONEV) as TanuloNevElotagNelkul
,fh.C_SZULETESIDATUM as SzuletesiIdo
,fh.C_OKTATASIAZONOSITO AS OktatasiAzonosito
,tao.C_ORASZAM as Oraszam
,tao.C_DATUM as Datum
,ocs.C_NEV as OsztCsopNev
,tgy.C_NEV as TargyNev
,tm.C_TIPUS as MulTip
,tm.C_KESESPERCBEN as KesesPerc
,tm.C_IGAZOLT as Igazolt
,tm.C_IGAZOLASTIPUSA as IgazolasTipus
,tm.C_MEGJEGYZES as Megjegyzes
,ISNULL(totOnlineOra.C_BOOLERTEK, ottOnlineOra.C_BOOLDEFAULT) AS IsOnlineOra
,ISNULL(ig.C_MEGJEGYZES, tm.C_MEGJEGYZES) as IgazolasMegjegyzes
FROM T_TANULOMULASZTAS_OSSZES tm
INNER JOIN T_TANITASIORA_OSSZES tao on tao.ID = tm.C_TANITASIORAKID AND tao.TOROLT = ''F''
INNER JOIN T_FELHASZNALO_OSSZES fh on fh.ID = tm.C_ORATANULOIID AND fh.TOROLT = ''F''
INNER JOIN T_TANTARGY_OSSZES tgy on tgy.ID = tao.C_TANTARGYID AND tgy.TOROLT = ''F''
INNER JOIN T_OSZTALYCSOPORT_OSSZES ocs on ocs.ID = tao.C_OSZTALYCSOPORTID AND ocs.TOROLT = ''F''
INNER JOIN T_ORATULAJDONSAGTIPUS_OSSZES ottOnlineOra ON ottOnlineOra.TOROLT = ''F'' AND ottOnlineOra.C_ALTANEVID = tao.C_TANEVID AND ottOnlineOra.ID = 8615
LEFT JOIN T_TANITASIORATULAJDONSAG_OSSZES totOnlineOra ON totOnlineOra.C_ORATULAJDONSAGID = ottOnlineOra.ID AND totOnlineOra.C_TANEVID = ottOnlineOra.C_ALTANEVID AND totOnlineOra.TOROLT = ''F'' AND totOnlineOra.C_TANITASIORAID = tao.ID
OUTER APPLY (
SELECT TOP 1 innerIg.C_MEGJEGYZES
FROM T_IGAZOLAS_OSSZES innerIg
WHERE innerIg.TOROLT = ''F''
AND tao.C_DATUM BETWEEN innerIg.C_KEZDETE AND innerIg.C_VEGE
AND innerIg.C_TANULOID = tm.C_ORATANULOIID
AND tm.C_IGAZOLT = ''T''
) ig
'
SET @sql += IIF(@pOsztcsop IS NOT NULL, N'
INNER JOIN T_TANULOCSOPORT_OSSZES tcs ON tcs.C_TANULOID = tm.C_ORATANULOIID
AND tcs.TOROLT = ''F''
AND tao.C_DATUM >= tcs.C_BELEPESDATUM
AND tao.C_DATUM < ISNULL(tcs.C_KILEPESDATUM, GETDATE())
AND tcs.C_OSZTALYCSOPORTID= @osztcsop', '')
SET @sql += IIF(@pCsoportVezetoId IS NOT NULL, N'
INNER JOIN T_CSOPORT_OSSZES csvcs on csvcs.C_CSOPORTVEZETOID = @csoportVezetoId
AND csvcs.TOROLT = ''F'' AND csvcs.ID = tao.C_OSZTALYCSOPORTID', '')
SET @whereClause += IIF(@pTol IS NOT NULL, N'
AND tao.C_DATUM >= CAST(@tol as date)', '')
SET @whereClause += IIF(@pIg IS NOT NULL, N'
AND tao.C_DATUM <= CAST(@ig as date)', '')
SET @whereClause += IIF(@pTanuloId IS NOT NULL, N'
AND fh.ID = @tanuloId', '')
SET @whereClause += IIF(@pTanuloNev IS NOT NULL AND @pTanuloNev <> '', N'
AND fh.C_NYOMTATASINEV LIKE ''%'' + @tanuloNev + ''%''', '')
SET @whereClause += IIF(@pOsztcsop IS NOT NULL
,IIF(@pIsKellKapcsolodoCsoportok = 1, N'
AND tao.C_OSZTALYCSOPORTID in (SELECT ID FROM fnGetKapcsolodoOsztalycsoportok(@osztcsop))', N'
AND tao.C_OSZTALYCSOPORTID = @osztcsop')
,'')
SET @whereClause += IIF(@pCsoptip IS NOT NULL, N'
AND EXISTS ( SELECT 1 FROM T_CSOPORT_OSSZES
WHERE T_CSOPORT_OSSZES.TOROLT = ''F'' AND (T_CSOPORT_OSSZES.ID = tao.C_OSZTALYCSOPORTID '
+ IIF(@pCsoptip = 1034
, N'
OR T_CSOPORT_OSSZES.C_OSZTALYBONTASID = tao.C_OSZTALYCSOPORTID'
, N'')
+ N') AND T_CSOPORT_OSSZES.C_TIPUSA = @csoptip)'
, '')
SET @whereClause += IIF(@pFogl IS NOT NULL, N'
AND tao.C_FOGLALKOZASID = @fogl', '')
SET @whereClause += IIF(@pTargy IS NOT NULL, N'
AND tao.C_TANTARGYID = @targy', '')
SET @whereClause += IIF(@pOraId IS NOT NULL, N'
AND tao.ID = @oraId', '')
SET @whereClause += IIF(@pMulTip IS NOT NULL, N'
AND tm.C_TIPUS = @mulTip', '')
SET @whereClause += IIF(@pKesIdo IS NOT NULL AND @pKesIdo > 0, N'
AND tm.C_KESESPERCBEN <= @kesIdo', '')
SET @whereClause +=
CASE @pIgazoltsagAllapota
WHEN 0 THEN N'
AND tm.C_IGAZOLT = ''F'''
WHEN 1 THEN N'
AND tm.C_IGAZOLT = ''T'''
WHEN 2 THEN N'
AND tm.C_IGAZOLT IS NULL'
ELSE ''
END
SET @whereClause += IIF(@pIgazolasTipus IS NOT NULL, N'
AND tm.C_IGAZOLASTIPUSA = @igazolasTipus', '')
SET @whereClause += N'
AND tm.C_TIPUS <> @jelenlet'
SET @whereClause += IIF(@pIsNemJelenlevoTanulokMegjelenitese = 1, '', N'
AND tm.C_TIPUS != 1817')
SET @whereClause += IIF(@pIsNemBesoroltTanulokMulasztasainakMegjelenitese = 0, N'
AND EXISTS (
SELECT TOP 1 1
FROM T_TANULOCSOPORT_OSSZES tcs
WHERE tcs.C_OSZTALYCSOPORTID = ocs.ID
AND tcs.C_TANULOID = fh.ID
AND tcs.TOROLT = ''F''
AND tcs.C_BELEPESDATUM <= tao.C_DATUM
AND (tcs.C_KILEPESDATUM IS NULL OR tcs.C_KILEPESDATUM >= tao.C_DATUM))', '')
SET @whereClause += IIF(@pFeladatKategoriaId IS NOT NULL, N'
AND ocs.C_FELADATKATEGORIAID = @feladatKategoriaId', '')
SET @whereClause += IIF(@pFeladatEllatasiHelyId IS NOT NULL, N'
AND ocs.C_FELADATELLATASIHELYID = @feladatEllatasiHelyId', '')
SET @whereClause += IIF(@pIsOnlineOra IS NOT NULL, N'
AND ISNULL(totOnlineOra.C_BOOLERTEK, ottOnlineOra.C_BOOLDEFAULT) = ' + IIF(@pIsOnlineOra = 1, '''T''', '''F'''), '')
SET @whereClause += IIF(@pTanitasiOraId IS NOT NULL, N'
AND tao.ID = @tanitasiOraId', '')
IF @pSzervezetTipusId IS NOT NULL BEGIN
SET @sql += N'
LEFT JOIN T_CSOPORT_OSSZES cs on cs.C_ALTANEVID = ocs.C_TANEVID AND cs.C_ALINTEZMENYID = ocs.C_INTEZMENYID AND cs.TOROLT = ''F'' AND cs.ID = ocs.ID
INNER JOIN T_SZERVEZET_OSSZES sz ON sz.C_TANEVID = tm.C_TANEVID AND sz.C_INTEZMENYID = tm.C_INTEZMENYID AND sz.TOROLT = ''F'' AND sz.ID = cs.C_SZERVEZETID AND sz.C_TIPUS = @pSzervezetTipusId'
IF (@pSzervezetIdListString IS NOT NULL AND LEN(@pSzervezetIdListString) > 0) BEGIN
SET @whereClause += N'
AND sz.ID IN (' + @pSzervezetIdListString + ')'
END
IF @pSzervezetNev IS NOT NULL BEGIN
SET @whereClause += N'
AND sz.C_NEV LIKE ''%'' + @pSzervezetNev + ''%'''
END
IF @pSzervezetAzonosito IS NOT NULL BEGIN
SET @whereClause += N'
AND sz.C_AZONOSITO LIKE ''%'' + @pSzervezetAzonosito + ''%'''
END
END
SET @sql += @whereClause
EXEC sp_executesql @sql ,N'
@tanevId int
,@csoportVezetoId int = NULL
,@tol datetime = NULL
,@ig datetime = NULL
,@tanuloId int = NULL
,@tanuloNev nvarchar(510) = NULL
,@osztcsop int = NULL
,@csoptip int = NULL
,@fogl int = NULL
,@targy int = NULL
,@oraId int = NULL
,@mulTip int = NULL
,@kesIdo int = NULL
,@igazolasTipus int = NULL
,@feladatKategoriaId int = NULL
,@feladatEllatasiHelyId int = NULL
,@jelenlet int
,@tanitasiOraId int
,@pSzervezetTipusId int = NULL
,@pSzervezetNev nvarchar(255) = NULL
,@pSzervezetAzonosito nvarchar(255) = NULL'
,@tanevId = @pTanevId
,@csoportVezetoId = @pCsoportVezetoId
,@tol = @pTol
,@ig = @pIg
,@tanuloId = @pTanuloId
,@tanuloNev = @pTanuloNev
,@osztcsop = @pOsztcsop
,@csoptip = @pCsoptip
,@fogl = @pFogl
,@targy = @pTargy
,@oraId = @pOraId
,@mulTip = @pMulTip
,@kesIdo = @pKesIdo
,@igazolasTipus = @pIgazolasTipus
,@feladatKategoriaId = @pFeladatKategoriaId
,@feladatEllatasiHelyId = @pFeladatEllatasiHelyId
,@jelenlet = 1498 -- MulasztasTipusEnum.jelenlet
,@tanitasiOraId = @pTanitasiOraId
,@pSzervezetTipusId = @pSzervezetTipusId
,@pSzervezetNev = @pSzervezetNev
,@pSzervezetAzonosito = @pSzervezetAzonosito
END
GO