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

224 lines
8.3 KiB
Transact-SQL

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