DROP PROCEDURE IF EXISTS uspGetTanuloErtekelesDataSetByTanulo GO CREATE PROCEDURE uspGetTanuloErtekelesDataSetByTanulo @pIntezmenyId int ,@pTanevId int ,@pTanarId int ,@pTanuloId int ,@pDatum date = NULL ,@pAmiKategoriaId int ,@pFeladatKategoriaId int = NULL ,@pKiiratkozottNeJelenjenMeg bit = 1 ,@pOsztalyCsoportId int = NULL AS BEGIN SET NOCOUNT ON; DECLARE @evfolyamTipusId int ,@sql nvarchar (max) IF @pDatum IS NULL SET @pDatum = CONVERT(date, GETDATE()) SELECT TOP (1) @evfolyamTipusId = tanuloOsztaly.EvfolyamTipusId FROM fnGetTanuloOsztaly(@pTanuloId, @pDatum, @pFeladatKategoriaId, @pKiiratkozottNeJelenjenMeg) 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 DISTINCT OsztalyCsoport.ID FROM T_TANULOCSOPORT_OSSZES TanuloCsoport INNER JOIN T_OSZTALY_OSSZES Osztaly ON Osztaly.ID = TanuloCsoport.C_OSZTALYCSOPORTID AND Osztaly.C_ALTANEVID = TanuloCsoport.C_TANEVID AND Osztaly.TOROLT = ''F'' INNER JOIN T_OSZTALYCSOPORT_OSSZES OsztalyCsoport ON OsztalyCsoport.ID = Osztaly.ID AND OsztalyCsoport.C_TANEVID = TanuloCsoport.C_TANEVID AND OsztalyCsoport.TOROLT = ''F'' AND (OsztalyCsoport.C_FELADATKATEGORIAID = @pFeladatKategoriaId OR @pFeladatKategoriaId IS NULL) INNER JOIN T_TANEV_OSSZES Tanev ON Tanev.ID = TanuloCsoport.C_TANEVID AND Tanev.TOROLT = ''F'' WHERE TanuloCsoport.C_TANEVID = @pTanevId AND TanuloCsoport.TOROLT = ''F'' AND TanuloCsoport.C_TANULOID = @pTanuloId AND TanuloCsoport.C_BELEPESDATUM <= @pDatum ' IF @pKiiratkozottNeJelenjenMeg = 1 SET @sql += N' AND (TanuloCsoport.C_KILEPESDATUM > @pDatum OR TanuloCsoport.C_KILEPESDATUM IS NULL OR TanuloCsoport.C_KILEPESDATUM >= Tanev.C_UTOLSOTANITASINAP) ' 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.ID = Foglalkozas.C_TANTARGYID AND Tantargy.C_TANEVID = Foglalkozas.C_TANEVID AND Tantargy.TOROLT = ''F'' 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.ID = OrarendiOra.C_TANTARGYID AND Tantargy.C_TANEVID = OrarendiOra.C_TANEVID AND Tantargy.TOROLT = ''F'' 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.ID = TanuloErtekeles.C_TANTARGYID AND Tantargy.C_TANEVID = TanuloErtekeles.C_TANEVID AND Tantargy.TOROLT = ''F'' ' IF @pFeladatKategoriaId IS NOT NULL IF @pFeladatKategoriaId <> @pAmiKategoriaId SET @sql += N' INNER JOIN T_OSZTALYCSOPORT_OSSZES Osztaly ON Osztaly.ID = TanuloErtekeles.C_ROGZITESKORITANULOOSZTALYID AND Osztaly.C_TANEVID = TanuloErtekeles.C_TANEVID AND Osztaly.TOROLT = ''F'' AND Osztaly.C_EVFOLYAMTIPUSA = @evfolyamTipusId AND Osztaly.C_FELADATKATEGORIAID = @pFeladatKategoriaId ' ELSE SET @sql += N' INNER JOIN T_OSZTALYCSOPORT_OSSZES Osztaly ON Osztaly.ID = TanuloErtekeles.C_OSZTALYCSOPORTID AND Osztaly.C_TANEVID = TanuloErtekeles.C_TANEVID AND Osztaly.TOROLT = ''F'' AND Osztaly.C_EVFOLYAMTIPUSA = @evfolyamTipusId AND Osztaly.C_FELADATKATEGORIAID = @pFeladatKategoriaId ' SET @sql += N' WHERE TanuloErtekeles.C_TANEVID = @pTanevId AND TanuloErtekeles.TOROLT = ''F'' AND TanuloErtekeles.C_TANULOID = @pTanuloId ' IF @pFeladatKategoriaId IS NOT NULL BEGIN IF @pFeladatKategoriaId = @pAmiKategoriaId SET @sql += N' AND TanuloErtekeles.C_ROGZITESKORITANULOOSZTALYID IS NULL ' ELSE SET @sql += N' AND TanuloErtekeles.C_ROGZITESKORITANULOOSZTALYID IS NOT NULL ' END 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 SELECT @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 ,FelhasznaloErtekelo.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 ,TanariAtlagSuly.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 FROM #Tantargyak Tantargy LEFT JOIN ( SELECT TanuloErtekeles.* FROM T_TANULOERTEKELES_OSSZES TanuloErtekeles ' IF @pFeladatKategoriaId IS NOT NULL IF @pFeladatKategoriaId <> @pAmiKategoriaId SET @sql += N' INNER JOIN T_OSZTALYCSOPORT_OSSZES Osztaly ON Osztaly.ID = TanuloErtekeles.C_ROGZITESKORITANULOOSZTALYID AND Osztaly.C_TANEVID = TanuloErtekeles.C_TANEVID AND Osztaly.TOROLT = ''F'' AND Osztaly.C_EVFOLYAMTIPUSA = @evfolyamTipusId AND Osztaly.C_FELADATKATEGORIAID = @pFeladatKategoriaId ' ELSE SET @sql += N' INNER JOIN T_OSZTALYCSOPORT_OSSZES Osztaly ON Osztaly.ID = TanuloErtekeles.C_OSZTALYCSOPORTID AND Osztaly.C_TANEVID = TanuloErtekeles.C_TANEVID AND Osztaly.TOROLT = ''F'' AND Osztaly.C_EVFOLYAMTIPUSA = @evfolyamTipusId AND Osztaly.C_FELADATKATEGORIAID = @pFeladatKategoriaId ' SET @sql += N' WHERE TanuloErtekeles.C_TANEVID = @pTanevId AND TanuloErtekeles.TOROLT = ''F'' AND TanuloErtekeles.C_TANULOID = @pTanuloId ' IF @pFeladatKategoriaId IS NOT NULL BEGIN IF @pFeladatKategoriaId = @pAmiKategoriaId SET @sql += N' AND TanuloErtekeles.C_ROGZITESKORITANULOOSZTALYID IS NULL ' ELSE SET @sql += N' AND TanuloErtekeles.C_ROGZITESKORITANULOOSZTALYID IS NOT NULL ' END SET @sql += N' ) AS TanuloErtekeles ON (TanuloErtekeles.C_TANTARGYID = Tantargy.ID OR (TanuloErtekeles.C_TANTARGYID IS NULL AND Tantargy.ID IS NULL)) INNER JOIN T_FELHASZNALO_OSSZES FelhasznaloErtekelo ON FelhasznaloErtekelo.ID = TanuloErtekeles.C_ERTEKELOID AND FelhasznaloErtekelo.C_TANEVID = Tantargy.C_TANEVID AND FelhasznaloErtekelo.TOROLT = ''F'' LEFT JOIN T_TANARIATLAGSULY_OSSZES TanariAtlagSuly ON TanariAtlagSuly.C_ERTEKELESMODID = TanuloErtekeles.C_ERTEKELESMODID AND TanariAtlagSuly.C_TANEVID = Tantargy.C_TANEVID AND TanariAtlagSuly.TOROLT = ''F'' LEFT JOIN T_TANTARGY_OSSZES Fotargy ON Fotargy.ID = Tantargy.C_FOTARGYID AND Fotargy.C_TANEVID = Tantargy.C_TANEVID AND Fotargy.TOROLT = ''F'' ' EXEC sp_executesql @sql, N' @pIntezmenyId int ,@pTanevId int ,@pTanarId int ,@pTanuloId int ,@pFeladatKategoriaId int ,@evfolyamTipusId int ,@pDatum date ' ,@pIntezmenyId = @pIntezmenyId ,@pTanevId = @pTanevId ,@pTanarId = @pTanarId ,@pTanuloId = @pTanuloId ,@pFeladatKategoriaId = @pFeladatKategoriaId ,@evfolyamTipusId = @evfolyamTipusId ,@pDatum = @pDatum END GO