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