223 lines
		
	
	
		
			7.8 KiB
		
	
	
	
		
			Transact-SQL
		
	
	
	
	
	
			
		
		
	
	
			223 lines
		
	
	
		
			7.8 KiB
		
	
	
	
		
			Transact-SQL
		
	
	
	
	
	
DROP FUNCTION IF EXISTS fnGetLemorzsolodottTanulokByFelhely
 | 
						|
GO
 | 
						|
 | 
						|
CREATE FUNCTION [dbo].[fnGetLemorzsolodottTanulokByFelhely] (@feladatEllatasiHelyId int, @tanevId int, @isFelevi int) 
 | 
						|
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 @MuvCsoportTip TABLE(
 | 
						|
    CsoptipId 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 = IIF(fh.C_OKTATASINEVELESIFELADATTIPUS IN (1160, 1161, 1162, 5435, 1176, 6463),2.5,3.0)
 | 
						|
	FROM T_FELADATELLATASIHELY fh
 | 
						|
	WHERE fh.ID = @feladatEllatasiHelyId AND fh.TOROLT='F'
 | 
						|
	
 | 
						|
	INSERT INTO @MuvCsoportTip (CsoptipID)
 | 
						|
		VALUES (1071),(1070),(1069),(1068),(1067),(6756),(6757),(6758),(6759),(6760),(6761) --művészeti csoporttípusok
 | 
						|
	-- 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_TYPE = 'OsztalyzatTipus' 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 BETWEEN tcs.C_BELEPESDATUM AND ISNULL(tcs.C_KILEPESDATUM,'22000101')
 | 
						|
		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*/
 | 
						|
	WHERE ocs.C_FELADATELLATASIHELYID = @feladatEllatasiHelyId
 | 
						|
    AND ocs.C_TANEVID = @tanevId AND ocs.C_KEPZESIFORMA = 1096 
 | 
						|
    AND C_EVFOLYAMTIPUSA IN (7366,6909,6912,6913,6908,6910,6911)
 | 
						|
    AND ocs.TOROLT = 'F'
 | 
						|
	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 BETWEEN tcs.C_BELEPESDATUM AND ISNULL(tcs.C_KILEPESDATUM,'22000101')
 | 
						|
		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'
 | 
						|
	WHERE ocs.C_FELADATELLATASIHELYID = @feladatEllatasiHelyId 
 | 
						|
		AND ocs.C_TANEVID = @tanevId AND ocs.C_KEPZESIFORMA = 1096
 | 
						|
    AND C_EVFOLYAMTIPUSA NOT IN (7366,6909,6912,6913,6908,6910,6911)
 | 
						|
    AND ocs.TOROLT = '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 CsoptipID FROM @MuvCsoportTip) --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 CsoptipID FROM @MuvCsoportTip))
 | 
						|
		) 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 CsoptipID FROM @MuvCsoportTip) AND TOROLT='F')
 | 
						|
		) KorabbiAtlag
 | 
						|
	FROM @Tanulok fht
 | 
						|
		INNER JOIN T_FELHASZNALO tanulo ON tanulo.ID = fht.TanuloId
 | 
						|
    INNER JOIN T_TANULO 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 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
 |