DROP FUNCTION IF EXISTS fnGetLemorzsolodottTanulokByFelhely GO CREATE FUNCTION [dbo].[fnGetLemorzsolodottTanulokByFelhely] ( @feladatEllatasiHelyId int ,@tanevId int ,@isFelevi int ,@osztalyzatTipusTypeID int = 44 ) RETURNS @FHHozTartozoTanulok TABLE( TanuloId int ,Evfolyam int ,Neme int ,TanuloNev nvarchar(510) ,OktatasiAzonosito nvarchar(11) ,OsztalyNev nvarchar(510) ,OsztalyId int ,KozepesMiatt bit ,RontottMiatt bit ) AS BEGIN DECLARE @Tanulok TABLE( TanuloId int ,EvFolyam int ,Neme int ,NyomtatasiNev nvarchar(510) ,OktatasiAzonosito nvarchar(11) ,OsztalyNev nvarchar(510) ,OsztalyId int ) DECLARE @Osztalyzatok TABLE( Id int ,Ertek float ) DECLARE @TanuloAtlagok TABLE( TanuloId int ,AktualisAtlag float ,KorabbiAtlag float ) DECLARE @KozepesAlattiTanulok TABLE( TanuloId int ) DECLARE @RontottTanulok TABLE( TanuloId int ) DECLARE @EslTantargyak TABLE( TantargyId int ,TanevId int ) -- Mi a "Közepes" értéke az adott feladatellátási helyen DECLARE @FelHelyTipusKozepes float = 3.0 DECLARE @ErtekelesTipus int = IIF(@isFelevi = 0,1520,1519) DECLARE @ExErtekelesTipus int = IIF(@ErtekelesTipus = 1520,1519,1520) SELECT @FelHelyTipusKozepes = onf.C_ESLKOZEPESATLAG FROM T_FELADATELLATASIHELY fh INNER JOIN T_OKTATASINEVELESIFELADAT onf ON onf.ID = fh.C_OKTATASINEVELESIFELADATTIPUS AND onf.C_ALTANEVID = fh.C_TANEVID AND onf.TOROLT = 'F' WHERE fh.ID = @feladatEllatasiHelyId AND fh.TOROLT='F' -- Az elõzõ tanév ID-ja DECLARE @ElozoTanevId int = 0 IF @IsFelevi = 0 BEGIN SET @ElozoTanevId = @tanevId END ELSE BEGIN SELECT @ElozoTanevId = ISNULL(elozotanev.ID,0) FROM T_TANEV akttanev INNER JOIN T_TANEV_OSSZES elozotanev ON elozotanev.TOROLT = 'F' AND elozotanev.C_SORSZAM = akttanev.C_SORSZAM-2 AND elozotanev.C_INTEZMENYID = akttanev.C_INTEZMENYID WHERE akttanev.ID = @tanevId END DECLARE @BesorolasiDatum DATE = (SELECT TOP 1 C_DATUM from T_TANEVRENDJE tr WHERE C_NAPTIPUSA = IIF(@isFelevi = 0,1395,1400) AND C_TANEVID = @tanevid AND TOROLT='F') INSERT INTO @Osztalyzatok SELECT ID ,CONVERT(float,C_VALUE) FROM T_DICTIONARYITEMBASE WHERE C_DICTIONARYTYPEID = @osztalyzatTipusTypeID AND C_TANEVID = @tanevId AND TOROLT='F' INSERT INTO @EslTantargyak ( TantargyId ,TanevId ) SELECT tgy.ID ,@tanevId FROM T_TANTARGY tgy WHERE (tgy.C_ALTANTARGYKENTNYOMTATVANYBAN='T' OR tgy.C_FOTARGYE='T') AND tgy.C_TANEVID = @tanevId AND tgy.TOROLT='F' AND tgy.C_ESLTANTARGYKATEGORIAID IS NOT NULL UNION SELECT tgy.ID ,@ElozoTanevId FROM T_TANTARGY_OSSZES tgy WHERE (tgy.C_ALTANTARGYKENTNYOMTATVANYBAN='T' OR tgy.C_FOTARGYE='T') AND tgy.C_TANEVID = @ElozoTanevId AND tgy.TOROLT='F' AND tgy.C_ESLTANTARGYKATEGORIAID IS NOT NULL -- Egy adott FH-hoz tartozó tanulók kilistázása (évfolyamonként, nemenként) összevont osztályokkal együtt INSERT INTO @Tanulok /*TODO:Tobb Osztaly*//*OM-1582*/ SELECT DISTINCT tcs.C_TANULOID ,ISNULL(tta.C_TANULOEVFOLYAMTIPUSID,1307) ,f.C_NEME ,f.C_NYOMTATASINEV ,f.C_OKTATASIAZONOSITO ,ocs.C_NEV ,ocs.ID FROM T_OSZTALYCSOPORT ocs INNER JOIN T_OSZTALY o ON o.ID = ocs.ID AND o.TOROLT='F' INNER JOIN T_TANULOCSOPORT tcs ON tcs.C_OSZTALYCSOPORTID = o.ID AND tcs.TOROLT = 'F' AND @BesorolasiDatum >= tcs.C_BELEPESDATUM AND (@BesorolasiDatum < tcs.C_KILEPESDATUM OR tcs.C_KILEPESDATUM IS NULL) INNER JOIN T_TANULOTANUGYIADATOK tta ON tta.C_TANULOCSOPORTID = tcs.ID AND tta.TOROLT = 'F' /*Ha a tanuló összevont évfolyamú osztályba jár, de van megadva neki egyénileg évfolyam a tanügyi adataiban,*/ INNER JOIN T_FELHASZNALO f ON f.ID = tcs.C_TANULOID AND f.TOROLT='F' /*akkor azt kell megjeleníteni*/ INNER JOIN T_EVFOLYAMTIPUS evtip ON evtip.ID = ocs.C_EVFOLYAMTIPUSA AND evtip.TOROLT = 'F' AND evtip.C_ALTANEVID = ocs.C_TANEVID WHERE ocs.C_FELADATELLATASIHELYID = @feladatEllatasiHelyId AND ocs.C_TANEVID = @tanevId AND ocs.C_KEPZESIFORMA = 1096 --Nappali rendszerű iskolai oktatás AND ocs.TOROLT = 'F' AND evtip.C_ISOSSZEVONT = 'T' UNION SELECT DISTINCT tcs.C_TANULOID ,ocs.C_EVFOLYAMTIPUSA ,f.C_NEME ,f.C_NYOMTATASINEV ,f.C_OKTATASIAZONOSITO ,ocs.C_NEV ,ocs.ID FROM T_OSZTALYCSOPORT ocs INNER JOIN T_TANULOCSOPORT tcs ON tcs.C_OSZTALYCSOPORTID = ocs.ID AND tcs.TOROLT = 'F' AND @BesorolasiDatum >= tcs.C_BELEPESDATUM AND (@BesorolasiDatum < tcs.C_KILEPESDATUM OR tcs.C_KILEPESDATUM IS NULL) INNER JOIN T_OSZTALY o ON o.id = tcs.C_OSZTALYCSOPORTID AND o.TOROLT='F' INNER JOIN T_FELHASZNALO f ON f.id = tcs.C_TANULOID AND f.TOROLT='F' INNER JOIN T_EVFOLYAMTIPUS evtip ON evtip.ID = ocs.C_EVFOLYAMTIPUSA AND evtip.TOROLT = 'F' AND evtip.C_ALTANEVID = ocs.C_TANEVID WHERE ocs.C_FELADATELLATASIHELYID = @feladatEllatasiHelyId AND ocs.C_TANEVID = @tanevId AND ocs.C_KEPZESIFORMA = 1096 AND ocs.TOROLT = 'F' AND evtip.C_ISOSSZEVONT = 'F' DELETE FROM @Tanulok WHERE Evfolyam BETWEEN 1303 AND 1306 --1-4 évfolyamok nem kellenek -- Visszatérési tábla számítása INSERT INTO @KozepesAlattiTanulok (TanuloId) SELECT DISTINCT fht.TanuloId FROM T_TANULOERTEKELES te INNER JOIN @EslTantargyak tgy ON tgy.TanevId = te.C_TANEVID AND tgy.TantargyId = te.C_TANTARGYID INNER JOIN @Osztalyzatok o ON o.ID = te.C_ERTEKELESOSZTALYZATID INNER JOIN @Tanulok fht ON fht.TanuloId = te.C_TANULOID LEFT JOIN T_CSOPORT cs ON cs.ID=te.C_OSZTALYCSOPORTID AND cs.TOROLT='F' WHERE te.C_TIPUSID = @ErtekelesTipus AND ISNULL(cs.C_TIPUSA,0) NOT IN (SELECT ID FROM T_CSOPORTTIPUS WHERE C_ISMUVESZETI = 'T' AND C_ALTANEVID = @tanevId) --alapf. műv okt csoportok osztályzatai nem kellenek AND te.TOROLT='F' AND te.C_TANEVID = @tanevId GROUP BY fht.TanuloId HAVING ROUND(AVG(o.Ertek),2) < @FelHelyTipusKozepes INSERT INTO @TanuloAtlagok ( TanuloId ,AktualisAtlag ,KorabbiAtlag ) SELECT fht.TanuloId ,( SELECT ROUND(AVG(o.Ertek),2) FROM T_TANULOERTEKELES te INNER JOIN @Osztalyzatok o ON o.ID = te.C_ERTEKELESOSZTALYZATID INNER JOIN @EslTantargyak tgy ON tgy.Tantargyid = te.C_TANTARGYID AND tgy.TanevId = te.C_TANEVID WHERE te.C_TANULOID = tanulo.ID AND te.C_TIPUSID = @ErtekelesTipus AND te.TOROLT='F' AND te.C_TANEVID = tanulo.C_TANEVID AND NOT EXISTS(SELECT 1 FROM T_CSOPORT WHERE ID = te.C_OSZTALYCSOPORTID AND C_TIPUSA IN (SELECT ID FROM T_CSOPORTTIPUS WHERE C_ISMUVESZETI = 'T' AND C_ALTANEVID = @tanevId)) ) AktualisAtlag ,( SELECT ROUND(AVG(o.Ertek),2) FROM T_TANULOERTEKELES_OSSZES te INNER JOIN @Osztalyzatok o ON o.ID = te.C_ERTEKELESOSZTALYZATID INNER JOIN @EslTantargyak tgy ON tgy.Tantargyid = te.C_TANTARGYID AND tgy.TanevId = te.C_TANEVID WHERE te.C_TANULOID = extanulo.ID AND te.C_TIPUSID = @ExErtekelesTipus AND te.TOROLT = 'F' AND te.C_TANEVID = extanulo.C_TANEVID AND NOT EXISTS(SELECT 1 FROM T_CSOPORT_OSSZES WHERE ID = te.C_OSZTALYCSOPORTID AND C_TIPUSA IN (SELECT ID FROM T_CSOPORTTIPUS WHERE C_ISMUVESZETI = 'T' AND C_ALTANEVID = @tanevId) AND TOROLT='F') ) KorabbiAtlag FROM @Tanulok fht INNER JOIN T_FELHASZNALO_OSSZES tanulo ON tanulo.ID = fht.TanuloId INNER JOIN T_TANULO_OSSZES t ON t.ID = tanulo.ID INNER JOIN T_FELHASZNALO_OSSZES extanulo ON tanulo.C_OKTATASIAZONOSITO = extanulo.C_OKTATASIAZONOSITO AND extanulo.C_TANEVID = @ElozoTanevId AND extanulo.TOROLT = 'F' INNER JOIN T_TANULO_OSSZES exT ON exT.ID = extanulo.ID INSERT INTO @RontottTanulok (TanuloId) SELECT DISTINCT fht.TanuloId FROM @Tanulok fht INNER JOIN @TanuloAtlagok ta ON ta.TanuloId = fht.TanuloId WHERE (ta.AktualisAtlag+1.1) <= ta.KorabbiAtlag INSERT INTO @FhHozTartozoTanulok SELECT fht.TanuloId ,fht.Evfolyam ,fht.Neme ,fht.NyomtatasiNev ,fht.OktatasiAzonosito ,fht.Osztalynev ,fht.OsztalyId ,IIF(kozepes.TanuloId IS NULL, 0, 1) ,IIF(rontott.TanuloId IS NULL, 0, 1) FROM @Tanulok fht LEFT JOIN @KozepesAlattiTanulok kozepes ON kozepes.TanuloId = fht.TanuloId LEFT JOIN @RontottTanulok rontott ON rontott.TanuloId = fht.TanuloId WHERE (kozepes.TanuloId IS NOT NULL OR rontott.TanuloId IS NOT NULL) RETURN END GO