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

206 lines
8.3 KiB
Transact-SQL

DROP PROCEDURE IF EXISTS uspFeljegyzesekKereses
GO
CREATE PROCEDURE uspFeljegyzesekKereses
@pTanevId int = NULL
,@pIntezmenyId int = NULL
,@pOsztalyId int = NULL
,@OktNevKatTipus int = NULL
,@pFeladatEllatasiHelyId int = NULL
,@pTanuloId int = NULL
,@pOsztalyCsoportId int = NULL
,@pFeljegyzoId int = NULL
,@pTipus int = NULL
,@pDatumTol datetime = NULL
,@pDatumIg datetime = NULL
,@pIsElektronikusUzenet bit
,@pElektronikusUzenetTipusEnum int
,@pIsKellKapcsolodoCsoportok bit
,@pRogzitesDatumTol datetime = NULL
,@pRogzitesDatumIg datetime = NULL
,@pFeljegyzesSzovege nvarchar(max) = 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)
,@whereSql nvarchar(max)
SET @sql = N'
SELECT
tanuloesemeny.ID AS ID
,tanuloesemeny.C_ESEMENYDATUMA AS Datum
,tanuloesemeny.C_MEGJEGYZES AS Megjegyzes
,tanuloesemeny.C_TARTALOM AS Tartalom
,tanuloesemeny.C_TIPUS AS Tipus
,tanuloesemeny.C_FELJEGYZOID AS FeljegyzoId
,tanuloesemeny.C_TANTARGYID AS TantargyId
,tanuloesemeny.C_ROGZITESDATUMA AS RogzitesDatuma
,TANULO.ID AS TanuloId
,TANULO.C_NYOMTATASINEV AS TanuloNev
,TANULO.C_SZULETESIDATUM AS SzuletesiDatum
,TANULO.C_OKTATASIAZONOSITO AS OktatasiAzonosito
,IIF(TANULO.C_NEVSORREND = ''T'', TANULO.C_UTONEV + '' '' + TANULO.C_VEZETEKNEV, TANULO.C_VEZETEKNEV + '' '' + TANULO.C_UTONEV) AS TanuloNevElotagNelkul
,FELJEGYZO.C_NYOMTATASINEV AS FeljegyzoNev
,IIF(FELJEGYZO.C_NEVSORREND = ''T'', FELJEGYZO.C_UTONEV + '' '' + FELJEGYZO.C_VEZETEKNEV, FELJEGYZO.C_VEZETEKNEV + '' '' + FELJEGYZO.C_UTONEV) AS FeljegyzoNevElotagNelkul
,ISNULL(ocs.ID, beirasOcs.ID) AS OsztalyCsoportId
,ISNULL(ocs.C_NEV, ISNULL(beirasOcs.C_NEV, ISNULL(rogzitesOcs.C_NEV, ''-''))) AS OsztalyCsoportNev
,STUFF((
SELECT '', '' + CAST(ocsop.C_NEV AS nvarchar(max))
FROM T_TANULOCSOPORT_OSSZES tcs
INNER JOIN T_OSZTALY_OSSZES o on o.ID = tcs.C_OSZTALYCSOPORTID
AND o.TOROLT = ''F''
INNER JOIN T_OSZTALYCSOPORT_OSSZES ocsop on ocsop.ID = o.ID
AND ocsop.TOROLT = ''F''
AND (@pFeladatEllatasiHelyId IS NULL OR ocsop.C_FELADATELLATASIHELYID = @pFeladatEllatasiHelyId)
AND (@OktNevKatTipus IS NULL OR ocsop.C_FELADATKATEGORIAID = @OktNevKatTipus)
WHERE tcs.TOROLT = ''F''
AND tcs.C_TANULOID = T_TANULO_TANULOESEMENY.C_TANULOID
AND tcs.C_BELEPESDATUM <= tanuloesemeny.C_ESEMENYDATUMA AND (tcs.C_KILEPESDATUM IS NULL OR tcs.C_KILEPESDATUM > tanuloesemeny.C_ESEMENYDATUMA)
FOR XML PATH ('''')), 1, 1, '''') AS OsztalyNev
,tanuloesemeny.C_TARGY AS Cim
FROM T_TANULOESEMENY_OSSZES AS tanuloesemeny
INNER JOIN T_TANULO_TANULOESEMENY ON tanuloesemeny.ID = T_TANULO_TANULOESEMENY.C_TANULOESEMENYID
LEFT JOIN (
SELECT
tanitasiora.ID AS TanitasioraId
,ocs.ID
,ocs.C_NEV
,ocs.C_FELADATELLATASIHELYID
,ocs.C_FELADATKATEGORIAID
,ocs.C_TANEVID
,ocs.C_INTEZMENYID
FROM T_TANITASIORA_OSSZES tanitasiora
INNER JOIN T_OSZTALYCSOPORT_OSSZES ocs ON ocs.ID = tanitasiora.C_OSZTALYCSOPORTID
AND ocs.TOROLT = ''F''
AND (@OktNevKatTipus IS NULL OR C_FELADATKATEGORIAID = @OktNevKatTipus)
AND (@pFeladatEllatasiHelyId IS NULL OR ocs.C_FELADATELLATASIHELYID= @pFeladatEllatasiHelyId)
) ocs on ocs.TanitasioraId = tanuloesemeny.C_TANITASIORAID
LEFT JOIN T_OSZTALYCSOPORT_OSSZES rogzitesOcs ON tanuloesemeny.C_ROGZITESKORIOSZTALYID = rogzitesOcs.ID
LEFT JOIN T_OSZTALYCSOPORT_OSSZES beirasOcs ON tanuloesemeny.C_BEIRASOSZTALYCSOPORTID = beirasOcs.ID
INNER JOIN T_FELHASZNALO_OSSZES TANULO ON TANULO.ID = T_TANULO_TANULOESEMENY.C_TANULOID
AND TANULO.TOROLT = ''F''
INNER JOIN T_FELHASZNALO_OSSZES FELJEGYZO ON FELJEGYZO.ID = tanuloesemeny.C_FELJEGYZOID
AND FELJEGYZO.TOROLT = ''F'''
SET @whereSql = N'
WHERE tanuloesemeny.TOROLT = ''F''
AND (@pFeladatEllatasiHelyId IS NULL OR COALESCE(ocs.C_FELADATELLATASIHELYID, rogzitesOcs.C_FELADATELLATASIHELYID, beirasOcs.C_FELADATELLATASIHELYID) = @pFeladatEllatasiHelyId)
AND (@OktNevKatTipus IS NULL OR ocs.C_FELADATKATEGORIAID = @OktNevKatTipus OR rogzitesOcs.C_FELADATKATEGORIAID = @OktNevKatTipus)
AND tanuloesemeny.C_INTEZMENYID = @pIntezmenyId
AND tanuloesemeny.C_TANEVID = @pTanevId'
IF (@pOsztalyId IS NOT NULL) SET @whereSql += N'
AND EXISTS(
SELECT 1
FROM T_TANULOCSOPORT_OSSZES tcs
WHERE tcs.C_TANULOID = T_TANULO_TANULOESEMENY.C_TANULOID
AND C_BELEPESDATUM <= tanuloesemeny.C_ESEMENYDATUMA
AND (C_KILEPESDATUM > tanuloesemeny.C_ESEMENYDATUMA OR C_KILEPESDATUM IS NULL)
AND C_OSZTALYCSOPORTID = @pOsztalyId)'
IF (@pTanuloId IS NOT NULL) SET @whereSql += N'
AND T_TANULO_TANULOESEMENY.C_TANULOID = @pTanuloId'
IF (@pOsztalyCsoportId IS NOT NULL)
SET @whereSql +=
IIF(@pIsKellKapcsolodoCsoportok = 1, N'
AND ISNULL(ocs.ID, beirasOcs.ID) IN (SELECT ID FROM fnGetKapcsolodoOsztalycsoportok(@pOsztalyCsoportId))', N'
AND (ocs.ID = @pOsztalyCsoportId OR beirasOcs.ID = @pOsztalyCsoportId)')
IF (@pFeljegyzoId IS NOT NULL) SET @whereSql += N'
AND tanuloesemeny.C_FELJEGYZOID = @pFeljegyzoId'
IF (@pTipus IS NOT NULL) SET @whereSql += N'
AND tanuloesemeny.C_TIPUS = @pTipus'
IF (@pDatumTol IS NOT NULL) SET @whereSql += N'
AND tanuloesemeny.C_ESEMENYDATUMA >= @pDatumTol'
IF (@pDatumIg IS NOT NULL) SET @whereSql += N'
AND tanuloesemeny.C_ESEMENYDATUMA < @pDatumIg'
IF (@pRogzitesDatumTol IS NOT NULL) SET @whereSql += N'
AND tanuloesemeny.C_ROGZITESDATUMA >= @pRogzitesDatumTol'
IF (@pRogzitesDatumIg IS NOT NULL) SET @whereSql += N'
AND tanuloesemeny.C_ROGZITESDATUMA < @pRogzitesDatumIg'
IF (@pIsElektronikusUzenet = 1) SET @whereSql += N'
AND tanuloesemeny.C_TIPUS = @pElektronikusUzenetTipusEnum'
ELSE SET @whereSql += N'
AND tanuloesemeny.C_TIPUS <> @pElektronikusUzenetTipusEnum'
IF (@pFeljegyzesSzovege IS NOT NULL) SET @whereSql += N'
AND tanuloesemeny.C_TARTALOM LIKE ''%'' + @pFeljegyzesSzovege + ''%'''
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 = tanuloesemeny.C_TANEVID AND sz.C_INTEZMENYID = tanuloesemeny.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 @whereSql += N'
AND sz.ID IN (' + @pSzervezetIdListString + ')'
END
IF @pSzervezetNev IS NOT NULL BEGIN
SET @whereSql += N'
AND sz.C_NEV LIKE ''%'' + @pSzervezetNev + ''%'''
END
IF @pSzervezetAzonosito IS NOT NULL BEGIN
SET @whereSql += N'
AND sz.C_AZONOSITO LIKE ''%'' + @pSzervezetAzonosito + ''%'''
END
END
SET @sql += @whereSql
EXEC sys.Sp_executesql @sql, N'
@pTanevId int = NULL
,@pIntezmenyId int = NULL
,@pOsztalyId int
,@OktNevKatTipus int
,@pFeladatEllatasiHelyId int
,@pTanuloId int
,@pOsztalyCsoportId int
,@pFeljegyzoId int
,@pTipus int
,@pDatumTol datetime
,@pDatumIg datetime
,@pIsElektronikusUzenet bit
,@pElektronikusUzenetTipusEnum int
,@pRogzitesDatumTol datetime
,@pRogzitesDatumIg datetime
,@pFeljegyzesSzovege nvarchar(max)
,@pSzervezetTipusId int = NULL
,@pSzervezetNev nvarchar(255) = NULL
,@pSzervezetAzonosito nvarchar(255) = NULL'
,@pTanevId
,@pIntezmenyId
,@pOsztalyId
,@OktNevKatTipus
,@pFeladatEllatasiHelyId
,@pTanuloId
,@pOsztalyCsoportId
,@pFeljegyzoId
,@pTipus
,@pDatumTol
,@pDatumIg
,@pIsElektronikusUzenet
,@pElektronikusUzenetTipusEnum
,@pRogzitesDatumTol
,@pRogzitesDatumIg
,@pFeljegyzesSzovege
,@pSzervezetTipusId = @pSzervezetTipusId
,@pSzervezetNev = @pSzervezetNev
,@pSzervezetAzonosito = @pSzervezetAzonosito
END
GO