DROP PROCEDURE IF EXISTS [dbo].[uspGetOsztalycsoportTantargyiMulasztasai] GO CREATE PROCEDURE [dbo].[uspGetOsztalycsoportTantargyiMulasztasai] @pOsztalyId int ,@pTantargyId int ,@pTanevid int ,@pIntezmenyId int ,@pCsakMegtartott bit /*0 - nem, 1 - igen */ ,@pDate datetime AS BEGIN SET NOCOUNT ON; DECLARE @oraPerc int ,@isIskolaiErdekuSzamit bit = dbo.fnGetRendszerbeallitasEnumBool(1683, @pIntezmenyId, @pTanevid) ,@isOsztalyValtasSzamit bit = dbo.fnGetRendszerbeallitasEnumBool(8702, @pIntezmenyId, @pTanevid) SET @oraPerc = ISNULL(( SELECT TOP 1 csp.C_ORAPERC FROM T_OSZTALYCSOPORT ocs LEFT JOIN T_CSOPORT cs on cs.ID = ocs.ID AND cs.TOROLT = 'F' LEFT JOIN T_CSOPORTTIPUS csp ON csp.ID = cs.C_TIPUSA AND cs.TOROLT = 'F' WHERE ocs.ID = @pOsztalyId AND ocs.TOROLT = 'F'), 45) DECLARE @feladatKategoriaId INT = (SELECT C_FELADATKATEGORIAID FROM T_OSZTALYCSOPORT_OSSZES WHERE ID = @pOsztalyId AND TOROLT = 'F') CREATE TABLE #TanoraCeluOsztalyCsoportok (OsztalyCsoportId int PRIMARY KEY CLUSTERED) INSERT INTO #TanoraCeluOsztalyCsoportok(OsztalyCsoportId) SELECT DISTINCT tcs2.C_OSZTALYCSOPORTID FROM T_TANULOCSOPORT tcs1 INNER JOIN T_TANULOCSOPORT tcs2 on tcs2.C_TANULOID = tcs1.C_TANULOID and tcs2.TOROLT = 'F' WHERE tcs1.TOROLT = 'F' AND tcs1.C_OSZTALYCSOPORTID = @pOsztalyId AND ( EXISTS( SELECT * FROM T_OSZTALYCSOPORT_OSSZES ocs INNER JOIN T_OSZTALY o on o.ID = ocs.ID and o.TOROLT = 'F' WHERE ocs.TOROLT = 'F' AND ocs.ID = tcs2.C_OSZTALYCSOPORTID AND ocs.C_FELADATKATEGORIAID = @feladatKategoriaId ) OR EXISTS( SELECT * FROM T_CSOPORT_OSSZES ocs INNER JOIN T_CSOPORTTIPUS_OSSZES cst ON cst.ID = ocs.C_TIPUSA AND cst.TOROLT = 'F' WHERE ocs.TOROLT = 'F' AND ocs.ID = tcs2.C_OSZTALYCSOPORTID AND cst.C_ISTANORAICELU = 'T' ) ) INSERT INTO #Result(TanuloId, TantargyId, Mulasztas, MegtartottOra, HatralevoOra) SELECT DISTINCT tcs.C_TANULOID, @pTantargyId, 0, 0, 0 FROM T_TANULOCSOPORT_OSSZES tcs WHERE tcs.C_OSZTALYCSOPORTID = @pOsztalyId AND tcs.C_TANEVID = @pTanevId AND tcs.TOROLT = 'F' AND (@isOsztalyValtasSzamit = 0 OR (tcs.C_BELEPESDATUM <= @pDate AND ISNULL(tcs.C_KILEPESDATUM, '2100-01-01') > @pDate)) UPDATE r SET r.Mulasztas = ISNULL(o.Mulasztas,0) ,r.MegtartottOra = ISNULL(o.MegtartottOra,0) ,r.HatralevoOra = ISNULL(o.HatralevoOra,0) FROM #Result r LEFT JOIN ( SELECT tcs.C_TANULOID ,SUM(IIF(C_TIPUS = 1500, 1, 0)) + (SUM(IIF(C_TIPUS = 1499, C_KESESPERCBEN, 0)) / @oraPerc) AS Mulasztas ,COUNT(DISTINCT tn.ID) AS MegtartottOra ,IIF(@pCsakMegtartott = 1, NULL, 0) AS HatralevoOra FROM T_TANULOCSOPORT_OSSZES tcs INNER JOIN T_TANITASIORA_OSSZES tn ON tn.C_OSZTALYCSOPORTID = tcs.C_OSZTALYCSOPORTID AND tn.C_DATUM >= tcs.C_BELEPESDATUM AND tn.C_DATUM < ISNULL(tcs.C_KILEPESDATUM, '2100-01-01') AND tn.C_MEGTARTOTT = 'T' AND tn.TOROLT = 'F' LEFT JOIN T_TANULOMULASZTAS_OSSZES tm ON tm.C_TANITASIORAKID = tn.ID AND tm.C_ORATANULOIID = tcs.C_TANULOID AND tm.C_TIPUS BETWEEN 1499 AND 1500 AND tm.TOROLT = 'F' AND (@isIskolaiErdekuSzamit = 1 OR ISNULL(tm.C_IGAZOLASTIPUSA, -1) <> 1533) WHERE tcs.TOROLT = 'F' AND tn.C_TANTARGYID = @pTantargyId AND EXISTS(SELECT * FROM #TanoraCeluOsztalyCsoportok ocs WHERE ocs.OsztalyCsoportId = tn.C_OSZTALYCSOPORTID) AND (@isOsztalyValtasSzamit = 0 OR (tcs.C_BELEPESDATUM <= @pDate AND ISNULL(tcs.C_KILEPESDATUM, '2100-01-01') > @pDate)) GROUP BY tcs.C_TANULOID ) o ON o.C_TANULOID = r.TanuloId IF @pCsakMegtartott = 0 BEGIN DECLARE @idoszakKezdete datetime = GETDATE() DECLARE @idoszakVege datetime SELECT TOP 1 @idoszakVege = C_NAPDATUMA FROM T_NAPTARINAP WHERE C_INTEZMENYID = @pIntezmenyId AND C_TANEVID = @pTanevId AND C_NAPTIPUSA = 1395 IF @idoszakVege IS NULL SET @idoszakVege = ( SELECT C_UTOLSOTANITASINAP FROM T_TANEV WHERE ID = @pTanevid AND TOROLT = 'F') DECLARE @Count int SELECT @Count = COUNT(*) FROM T_ORARENDTELJES_OSSZES orr WHERE orr.C_INTEZMENYID = @pIntezmenyId AND orr.C_TANEVID = @pTanevId AND orr.C_DATUM BETWEEN @idoszakKezdete AND @idoszakVege --AND orr.C_OSZTALYCSOPORTID = @pOsztalyId AND orr.C_TANTARGYID = @pTantargyId AND orr.C_FELADATKATEGORIAID = @feladatKategoriaId AND NOT EXISTS(SELECT * FROM T_TANITASIORA_OSSZES t WITH (FORCESEEK) WHERE t.C_INTEZMENYID = orr.C_INTEZMENYID AND t.C_TANEVID = orr.C_TANEVID AND t.C_ORARENDIORAID = orr.C_ORARENDIORAID AND t.C_MEGTARTOTT = 'T' AND t.TOROLT = 'F') AND EXISTS(SELECT * FROM #TanoraCeluOsztalyCsoportok ocs WHERE ocs.OsztalyCsoportId = orr.C_OSZTALYCSOPORTID) UPDATE #Result SET HatralevoOra = @Count END END