128 lines
10 KiB
Transact-SQL
128 lines
10 KiB
Transact-SQL
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
|