113 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Transact-SQL
		
	
	
	
	
	
			
		
		
	
	
			113 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Transact-SQL
		
	
	
	
	
	
IF OBJECT_ID('fnGetDokumentumTanulokEvesOraszamaiOsztalynkonet') IS NOT NULL BEGIN
 | 
						|
  DROP FUNCTION fnGetDokumentumTanulokEvesOraszamaiOsztalynkonet
 | 
						|
END
 | 
						|
GO
 | 
						|
 | 
						|
SET ANSI_NULLS ON
 | 
						|
GO
 | 
						|
SET QUOTED_IDENTIFIER ON
 | 
						|
GO
 | 
						|
 | 
						|
CREATE FUNCTION fnGetDokumentumTanulokEvesOraszamaiOsztalynkonet (@tanevId INT, @osztalyId INT, @tanitasiHetekSzamaVegzos INT, @tanitasiHetekSzamaNemVegzos INT, @isFotantargyAltantargyEgyben BIT)
 | 
						|
RETURNS @result TABLE 
 | 
						|
(
 | 
						|
	TanuloId						INT,
 | 
						|
	TantargyId						INT,
 | 
						|
	Oraszam							FLOAT
 | 
						|
)
 | 
						|
AS 
 | 
						|
BEGIN
 | 
						|
 | 
						|
DECLARE @isVegzos NVARCHAR(1) = (SELECT C_VEGZOSEVFOLYAM FROM T_OSZTALYCSOPORT_OSSZES WHERE ID = @osztalyId)
 | 
						|
DECLARE @utolsoNap DATE = IIF( @isVegzos = 'T', 
 | 
						|
						(SELECT TOP 1 C_DATUM FROM T_TANEVRENDJE_OSSZES WHERE C_TANEVID = @tanevId AND TOROLT = 'F' AND C_NAPTIPUSA = 1402), --végzős
 | 
						|
						(SELECT TOP 1 C_DATUM FROM T_TANEVRENDJE_OSSZES WHERE C_TANEVID = @tanevId AND TOROLT = 'F' AND C_NAPTIPUSA = 1395)  --nem végzős
 | 
						|
										)	
 | 
						|
 | 
						|
	DECLARE @temp TABLE (TanuloId INT, FotargyId INT, TantargyId INT, Oraszam FLOAT, isFotargy NVARCHAR(1), isAltantargykentNyomtatvanyban nvarchar(1))
 | 
						|
	INSERT INTO @temp
 | 
						|
	SELECT 
 | 
						|
		 C_TANULOID							TanuloId
 | 
						|
		,t.C_FOTARGYID						FotargyId
 | 
						|
		,t.ID								TantargyId
 | 
						|
		,fog.C_ORASZAM						Oraszam
 | 
						|
		,t.C_FOTARGYE						isFotargy
 | 
						|
		,t.C_ALTANTARGYKENTNYOMTATVANYBAN	isAltantargy
 | 
						|
	FROM T_TANULOCSOPORT_OSSZES tcs
 | 
						|
		INNER JOIN T_FOGLALKOZAS_OSSZES fog ON fog.C_OSZTALYCSOPORTID = tcs.C_OSZTALYCSOPORTID AND fog.TOROLT = 'F' AND fog.C_TANEVID = @tanevId
 | 
						|
		INNER JOIN T_TANTARGY_OSSZES t on t.ID = fog.C_TANTARGYID AND t.C_TANEVID = @tanevId
 | 
						|
	WHERE 
 | 
						|
		tcs.C_TANULOID IN (SELECT TanuloId FROM fnGetDokumentumOsztalyokCsoportokTanuloi(@tanevId, @osztalyId, 'T'))
 | 
						|
		AND ((tcs.C_OSZTALYCSOPORTID IN (SELECT ID FROM T_OSZTALY_OSSZES)) OR (tcs.C_OSZTALYCSOPORTID IN (SELECT ID FROM T_CSOPORT_OSSZES WHERE C_TIPUSA IN (SELECT ID FROM fnGetTanoraiCeluCsoportTipusok(@tanevId)))))
 | 
						|
		AND tcs.TOROLT = 'F'
 | 
						|
		AND tcs.C_TANEVID = @tanevId
 | 
						|
		AND ISNULL(tcs.C_KILEPESDATUM, @utolsoNap) >= @utolsoNap
 | 
						|
 | 
						|
	DECLARE @default TABLE (TanuloId INT, TantargyId INT, Orasszam FLOAT)
 | 
						|
	INSERT INTO @default
 | 
						|
	SELECT 
 | 
						|
		 TanuloId
 | 
						|
		,TantargyId
 | 
						|
		,Oraszam * IIF(@isVegzos = 'T', @tanitasiHetekSzamaVegzos, @tanitasiHetekSzamaNemVegzos)
 | 
						|
	FROM @temp
 | 
						|
	WHERE
 | 
						|
		isFotargy = 'T'
 | 
						|
	UNION ALL
 | 
						|
	SELECT 
 | 
						|
		 TanuloId
 | 
						|
		,TantargyId
 | 
						|
		,Oraszam * IIF(@isVegzos = 'T', @tanitasiHetekSzamaVegzos, @tanitasiHetekSzamaNemVegzos)
 | 
						|
	FROM @temp
 | 
						|
	WHERE
 | 
						|
		isAltantargykentNyomtatvanyban = 'T'
 | 
						|
	UNION ALL
 | 
						|
		SELECT 
 | 
						|
		 TanuloId
 | 
						|
		,FotargyId
 | 
						|
		,0
 | 
						|
	FROM @temp t1
 | 
						|
	WHERE
 | 
						|
		(isFotargy = 'F' OR isFotargy IS NULL) AND (isAltantargykentNyomtatvanyban = 'F' OR isAltantargykentNyomtatvanyban IS NULL)
 | 
						|
		AND NOT EXISTS (SELECT TOP 1 t2.FotargyId FROM @temp t2 WHERE t2.FotargyId = t1. TantargyId) 
 | 
						|
 | 
						|
	DECLARE @altargy TABLE (TanuloId INT, FotargyId INT, Oraszam FLOAT)
 | 
						|
	IF @isFotantargyAltantargyEgyben = 1
 | 
						|
	BEGIN
 | 
						|
	INSERT INTO @altargy
 | 
						|
	SELECT 
 | 
						|
		 TanuloId
 | 
						|
		,FotargyId
 | 
						|
		,SUM(Oraszam) * IIF(@isVegzos = 'T', @tanitasiHetekSzamaVegzos, @tanitasiHetekSzamaNemVegzos)
 | 
						|
	FROM @temp t
 | 
						|
	WHERE
 | 
						|
		(isFotargy = 'F' OR isFotargy IS NULL) AND (isAltantargykentNyomtatvanyban = 'F' OR isAltantargykentNyomtatvanyban IS NULL)
 | 
						|
	GROUP BY TanuloId, FotargyId
 | 
						|
	END
 | 
						|
 | 
						|
	IF @isFotantargyAltantargyEgyben = 0
 | 
						|
	BEGIN
 | 
						|
	INSERT INTO @result
 | 
						|
	SELECT 
 | 
						|
		 defaultTable.TanuloId 
 | 
						|
		,defaultTable.TantargyId
 | 
						|
		,SUM(defaultTable.Orasszam)
 | 
						|
	FROM @default defaultTable	
 | 
						|
	GROUP BY defaultTable.TanuloId, defaultTable.TantargyId
 | 
						|
	END
 | 
						|
 | 
						|
	ELSE
 | 
						|
	
 | 
						|
	BEGIN
 | 
						|
	INSERT INTO @result
 | 
						|
	SELECT 
 | 
						|
		 defaultTable.TanuloId 
 | 
						|
		,defaultTable.TantargyId
 | 
						|
		,SUM(defaultTable.Orasszam) + ISNULL(altargy.Oraszam, 0)
 | 
						|
	FROM @default defaultTable	
 | 
						|
		LEFT JOIN @altargy altargy ON altargy.TanuloId = defaultTable.TanuloId AND altargy.FotargyId = defaultTable.TantargyId
 | 
						|
	GROUP BY defaultTable.TanuloId ,defaultTable.TantargyId, altargy.Oraszam
 | 
						|
	
 | 
						|
	END
 | 
						|
	RETURN
 | 
						|
	END
 | 
						|
	GO |