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

295 lines
No EOL
11 KiB
Transact-SQL

DROP PROCEDURE IF EXISTS uspGetTanuloErtekelesDataSetByTanulo
GO
CREATE PROCEDURE uspGetTanuloErtekelesDataSetByTanulo
@pIntezmenyId int
,@pTanevId int
,@pTanarId int
,@pTanuloId int
,@pDatum date = NULL
,@pFeladatKategoriaId INT
,@pAmiKategoriaId int
,@pOktatasiNevelesiFeladatId int = NULL
AS BEGIN
SET NOCOUNT ON;
IF @pDatum IS NULL
SET @pDatum = CONVERT(date, GETDATE())
DECLARE
@evfolyamTipusId int
,@sql nvarchar (max)
SELECT TOP (1)
@evfolyamTipusId = tanuloOsztaly.EvfolyamTipusId
FROM
fnGetTanuloOsztaly(@pTanuloId, @pDatum, NULL, 0, @pOktatasiNevelesiFeladatId) tanuloOsztaly
ORDER BY
tanuloOsztaly.BelepesDatuma DESC
SET @sql = N'
CREATE TABLE #KapcsopodoTantargyak (
ID int
,C_FOTARGYID int
,C_NEV nvarchar (255)
,C_TARGYKATEGORIA int
,C_TANEVID int
)
CREATE TABLE #Tantargyak (
ID int
,C_FOTARGYID int
,C_NEV nvarchar (255)
,C_TARGYKATEGORIA int
,C_TANEVID int
)
INSERT INTO #KapcsopodoTantargyak (
ID
,C_FOTARGYID
,C_NEV
,C_TARGYKATEGORIA
,C_TANEVID
)
SELECT
kapcsolodoTargy.ID
,kapcsolodoTargy.C_FOTARGYID
,kapcsolodoTargy.C_NEV
,kapcsolodoTargy.C_TARGYKATEGORIA
,kapcsolodoTargy.C_TANEVID
FROM fnGetKapcsolodoTantargyak(@pIntezmenyId, @pTanevId, NULL) kapcsolodoTargy
CREATE TABLE #OsztalyCsoportIdList (
ID int PRIMARY KEY
)
INSERT INTO #OsztalyCsoportIdList (
ID
)
SELECT
OsztalyCsoport.ID
FROM T_TANULOCSOPORT_OSSZES TanuloCsoport
INNER JOIN T_OSZTALYCSOPORT_OSSZES OsztalyCsoport ON OsztalyCsoport.C_TANEVID = TanuloCsoport.C_TANEVID AND OsztalyCsoport.TOROLT = ''F''
AND OsztalyCsoport.ID = TanuloCsoport.C_OSZTALYCSOPORTID
INNER JOIN T_FELADATELLATASIHELY_OSSZES FeladatEllatasiHely ON FeladatEllatasiHely.ID = OsztalyCsoport.C_FELADATELLATASIHELYID
AND (FeladatEllatasiHely.C_OKTATASINEVELESIFELADATTIPUS = @pOktatasiNevelesiFeladatId OR @pOktatasiNevelesiFeladatId IS NULL)
WHERE TanuloCsoport.C_TANEVID = @pTanevId
AND TanuloCsoport.TOROLT = ''F''
AND TanuloCsoport.C_TANULOID = @pTanuloId
AND TanuloCsoport.C_BELEPESDATUM <= @pDatum
AND (TanuloCsoport.C_KILEPESDATUM > @pDatum OR TanuloCsoport.C_KILEPESDATUM IS NULL)
'
SET @sql += N'
INSERT INTO #Tantargyak (
ID
,C_FOTARGYID
,C_NEV
,C_TARGYKATEGORIA
,C_TANEVID
)
SELECT
NULL
,NULL
,''Magatartás/Szorgalom''
,0
,@pTanevID;
WITH tantargy_CTE (
C_TANTARGYID
,C_FOTARGYID
,C_TANEVID
) AS
(
SELECT
Foglalkozas.C_TANTARGYID
,Tantargy.C_FOTARGYID
,Tantargy.C_TANEVID
FROM T_FOGLALKOZAS_OSSZES Foglalkozas
INNER JOIN T_TANTARGY_OSSZES Tantargy ON Tantargy.C_TANEVID = Foglalkozas.C_TANEVID AND Tantargy.TOROLT = ''F''
AND Tantargy.ID = Foglalkozas.C_TANTARGYID
INNER JOIN #OsztalyCsoportIdList OsztalyCsoport ON OsztalyCsoport.ID = Foglalkozas.C_OSZTALYCSOPORTID
WHERE Foglalkozas.C_TANEVID = @pTanevId
AND Foglalkozas.TOROLT = ''F''
UNION
SELECT
OrarendiOra.C_TANTARGYID
,Tantargy.C_FOTARGYID
,Tantargy.C_TANEVID
FROM T_ORARENDIORA_OSSZES OrarendiOra
INNER JOIN T_TANTARGY_OSSZES Tantargy ON Tantargy.C_TANEVID = OrarendiOra.C_TANEVID AND Tantargy.TOROLT = ''F''
AND Tantargy.ID = OrarendiOra.C_TANTARGYID
INNER JOIN #OsztalyCsoportIdList OsztalyCsoport ON OsztalyCsoport.ID = OrarendiOra.C_OSZTALYCSOPORTID
WHERE OrarendiOra.C_TANEVID = @pTanevId
AND OrarendiOra.TOROLT = ''F''
UNION
SELECT
TanuloErtekeles.C_TANTARGYID
,Tantargy.C_FOTARGYID
,Tantargy.C_TANEVID
FROM T_TANULOERTEKELES_OSSZES TanuloErtekeles
LEFT JOIN T_TANTARGY_OSSZES Tantargy ON Tantargy.C_TANEVID = TanuloErtekeles.C_TANEVID AND Tantargy.TOROLT = ''F''
AND Tantargy.ID = TanuloErtekeles.C_TANTARGYID
'
IF @pFeladatKategoriaId = @pAmiKategoriaId
BEGIN
SET @sql += N'
INNER JOIN T_OSZTALYCSOPORT_OSSZES Osztaly ON Osztaly.C_TANEVID = TanuloErtekeles.C_TANEVID AND Osztaly.TOROLT = ''F''
AND Osztaly.ID = TanuloErtekeles.C_OSZTALYCSOPORTID
INNER JOIN T_FELADATELLATASIHELY_OSSZES FeladatEllatasiHely ON FeladatEllatasiHely.ID = Osztaly.C_FELADATELLATASIHELYID
AND (FeladatEllatasiHely.C_OKTATASINEVELESIFELADATTIPUS = @pOktatasiNevelesiFeladatId OR @pOktatasiNevelesiFeladatId IS NULL)
'
END
ELSE
BEGIN
SET @sql += N'
INNER JOIN T_OSZTALYCSOPORT_OSSZES Osztaly ON Osztaly.C_TANEVID = TanuloErtekeles.C_TANEVID AND Osztaly.TOROLT = ''F''
AND Osztaly.ID = TanuloErtekeles.C_ROGZITESKORITANULOOSZTALYID
AND Osztaly.C_EVFOLYAMTIPUSA = @evfolyamTipusId
INNER JOIN T_TANULOCSOPORT_OSSZES TanuloCsoport ON TanuloCsoport.C_TANEVID = TanuloErtekeles.C_TANEVID AND TanuloCsoport.TOROLT = ''F''
AND TanuloCsoport.C_OSZTALYCSOPORTID = Osztaly.ID
AND TanuloCsoport.C_TANULOID = TanuloErtekeles.C_TANULOID
AND TanuloCsoport.C_BELEPESDATUM <= @pDatum
INNER JOIN T_FELADATELLATASIHELY_OSSZES FeladatEllatasiHely ON FeladatEllatasiHely.ID = Osztaly.C_FELADATELLATASIHELYID
AND (FeladatEllatasiHely.C_OKTATASINEVELESIFELADATTIPUS = @pOktatasiNevelesiFeladatId OR @pOktatasiNevelesiFeladatId IS NULL)
'
END
SET @sql += N'
WHERE TanuloErtekeles.C_TANEVID = @pTanevId
AND TanuloErtekeles.TOROLT = ''F''
AND TanuloErtekeles.C_TANULOID = @pTanuloId
'
IF @pFeladatKategoriaId <> @pAmiKategoriaId
SET @sql += N'
AND TanuloErtekeles.C_ROGZITESKORITANULOOSZTALYID IS NOT NULL
'
SET @sql += N'
)
INSERT INTO #Tantargyak (
ID
,C_FOTARGYID
,C_NEV
,C_TARGYKATEGORIA
,C_TANEVID
)
SELECT DISTINCT
KapcsopolodoTantargy.ID
,KapcsopolodoTantargy.C_FOTARGYID
,KapcsopolodoTantargy.C_NEV
,KapcsopolodoTantargy.C_TARGYKATEGORIA
,KapcsopolodoTantargy.C_TANEVID
FROM tantargy_CTE
INNER JOIN #KapcsopodoTantargyak KapcsopolodoTantargy ON tantargy_CTE.C_TANTARGYID = KapcsopolodoTantargy.ID OR tantargy_CTE.C_FOTARGYID = KapcsopolodoTantargy.ID
--NOTE: Azért kell a DISTINCT, ha ugyanoda ki-/besorolgatják a tanulót!
SELECT DISTINCT
@pTanuloId AS TanuloId
,Tantargy.ID AS TantargyId
,Tantargy.C_NEV AS TantargyNev
,TanuloErtekeles.ID AS ID
,TanuloErtekeles.C_DATUM AS Datum
,TanuloErtekeles.C_ROGZITESDATUM AS RogzitesDatum
,TanuloErtekeles.C_TIPUSID AS TipusId
,TanuloErtekeles.C_NYOMTATASINEV AS ErtekeloNyomtatasiNev
,IIF(TanuloErtekeles.ID IS NULL, NULL, CASE WHEN TanuloErtekeles.C_ERTEKELOID = @pTanarId THEN ''T'' ELSE ''F'' END) AS Modosithato
,TanuloErtekeles.CREATED AS Created
,IIF(TanuloErtekeles.C_ISMAGATARTASSZORGALOM IS NOT NULL, TanuloErtekeles.C_ISMAGATARTASSZORGALOM, IIF(Tantargy.ID IS NOT NULL, ''F'', ''T'')) AS IsMagatartasSzorgalom
,TanuloErtekeles.C_ISERTESITESELKULDVE AS IsErtesitesElkuldve
,TanuloErtekeles.C_ERTEKELESOSZTALYZATID AS ErtekelesOsztalyzatId
,em.C_SULY AS Suly
,TanuloErtekeles.C_ERTEKELESSZOVEG AS ErtekelesSzoveg
,TanuloErtekeles.C_ERTEKELESSZOVEGROVIDNEV AS ErtekelesSzovegRovidNev
,TanuloErtekeles.C_ERTEKELESSZAZALEK AS ErtekelesSzazalek
,TanuloErtekeles.C_ERTEKELESMODID AS ErtekelesModId
,TanuloErtekeles.C_ERTEKELESTEMA AS ErtekelesTema
,TanuloErtekeles.C_MAGATARTASOSZTALYZATID AS MagatartasOsztalyzatId
,TanuloErtekeles.C_MAGATARTASSZOVEG AS MagatartasSzoveg
,TanuloErtekeles.C_MAGATARTASSZOVEGROVIDNEV AS MagatartasSzovegRovidNev
,TanuloErtekeles.C_MAGATARTASERTEKID AS MagatartasErtekId
,TanuloErtekeles.C_SZORGALOMOSZTALYZATID AS SzorgalomOsztalyzatId
,TanuloErtekeles.C_SZORGALOMSZOVEG AS SzorgalomSzoveg
,TanuloErtekeles.C_SZORGALOMSZOVEGROVIDNEV AS SzorgalomSzovegRovidNev
,TanuloErtekeles.C_SZORGALOMERTEKID AS SzorgalomErtekId
,Tantargy.C_TARGYKATEGORIA AS TantargyKategoriaId
,Fotargy.ID AS FotargyId
,Fotargy.C_NEV AS FotargyNev
,Fotargy.C_TARGYKATEGORIA AS FotargyTantargyKategoriaId
,TantargyAdatok.C_ISTANULMANYIATLAGBANEMSZAMIT AS IsTanulmanyiAtlagbaNemSzamit
FROM #Tantargyak Tantargy
LEFT JOIN (
SELECT
TanuloErtekeles.*
,FelhasznaloErtekelo.C_NYOMTATASINEV
FROM T_TANULOERTEKELES_OSSZES TanuloErtekeles
INNER JOIN T_FELHASZNALO_OSSZES FelhasznaloErtekelo ON FelhasznaloErtekelo.C_TANEVID = TanuloErtekeles.C_TANEVID AND FelhasznaloErtekelo.TOROLT = ''F''
AND FelhasznaloErtekelo.ID = TanuloErtekeles.C_ERTEKELOID
'
IF @pFeladatKategoriaId = @pAmiKategoriaId
SET @sql += N'
INNER JOIN T_OSZTALYCSOPORT_OSSZES Osztaly ON Osztaly.C_TANEVID = TanuloErtekeles.C_TANEVID AND Osztaly.TOROLT = ''F''
AND Osztaly.ID = TanuloErtekeles.C_OSZTALYCSOPORTID
INNER JOIN T_FELADATELLATASIHELY_OSSZES FeladatEllatasiHely ON FeladatEllatasiHely.ID = Osztaly.C_FELADATELLATASIHELYID
AND (FeladatEllatasiHely.C_OKTATASINEVELESIFELADATTIPUS = @pOktatasiNevelesiFeladatId OR @pOktatasiNevelesiFeladatId IS NULL)
'
ELSE
SET @sql += N'
INNER JOIN T_OSZTALYCSOPORT_OSSZES Osztaly ON Osztaly.C_TANEVID = TanuloErtekeles.C_TANEVID AND Osztaly.TOROLT = ''F''
AND Osztaly.ID = TanuloErtekeles.C_ROGZITESKORITANULOOSZTALYID
AND Osztaly.C_EVFOLYAMTIPUSA = @evfolyamTipusId
INNER JOIN T_TANULOCSOPORT_OSSZES TanuloCsoport ON TanuloCsoport.C_TANEVID = TanuloErtekeles.C_TANEVID AND TanuloCsoport.TOROLT = ''F''
AND TanuloCsoport.C_OSZTALYCSOPORTID = Osztaly.ID
AND TanuloCsoport.C_TANULOID = TanuloErtekeles.C_TANULOID
AND TanuloCsoport.C_BELEPESDATUM <= @pDatum
INNER JOIN T_FELADATELLATASIHELY_OSSZES FeladatEllatasiHely ON FeladatEllatasiHely.ID = Osztaly.C_FELADATELLATASIHELYID
AND (FeladatEllatasiHely.C_OKTATASINEVELESIFELADATTIPUS = @pOktatasiNevelesiFeladatId OR @pOktatasiNevelesiFeladatId IS NULL)
'
SET @sql += N'
WHERE TanuloErtekeles.C_TANEVID = @pTanevId
AND TanuloErtekeles.TOROLT = ''F''
AND TanuloErtekeles.C_TANULOID = @pTanuloId
'
IF @pFeladatKategoriaId <> @pAmiKategoriaId
SET @sql += N'
AND TanuloErtekeles.C_ROGZITESKORITANULOOSZTALYID IS NOT NULL
'
SET @sql += N'
) AS TanuloErtekeles ON (TanuloErtekeles.C_TANTARGYID = Tantargy.ID OR (TanuloErtekeles.C_TANTARGYID IS NULL AND Tantargy.ID IS NULL))
LEFT JOIN T_ERTEKELESMOD_OSSZES em ON em.C_ALTANEVID = Tantargy.C_TANEVID AND em.TOROLT = ''F''
AND em.ID = TanuloErtekeles.C_ERTEKELESMODID
AND TanuloErtekeles.C_ERTEKELESOSZTALYZATID IS NOT NULL
LEFT JOIN T_TANTARGY_OSSZES Fotargy ON Fotargy.C_TANEVID = Tantargy.C_TANEVID AND Fotargy.TOROLT = ''F''
AND Fotargy.ID = Tantargy.C_FOTARGYID
LEFT JOIN T_TANTARGY_OSSZES TantargyAdatok ON TantargyAdatok.ID = Tantargy.ID
'
EXEC sp_executesql @sql, N'
@pIntezmenyId int
,@pTanevId int
,@pTanarId int
,@pTanuloId int
,@evfolyamTipusId int
,@pDatum date
,@pOktatasiNevelesiFeladatId int
'
,@pIntezmenyId = @pIntezmenyId
,@pTanevId = @pTanevId
,@pTanarId = @pTanarId
,@pTanuloId = @pTanuloId
,@evfolyamTipusId = @evfolyamTipusId
,@pDatum = @pDatum
,@pOktatasiNevelesiFeladatId = @pOktatasiNevelesiFeladatId
END
GO