155 lines
No EOL
8.9 KiB
Transact-SQL
155 lines
No EOL
8.9 KiB
Transact-SQL
DROP PROCEDURE IF EXISTS [dbo].[uspGetTanulokMulasztasaiKesesei]
|
|
GO
|
|
|
|
-- ==========================================================================================
|
|
-- Description: <Az osztoly/csoport tanulóinak vagy egy adott tanulónak a mulasztásai>
|
|
-- ==========================================================================================
|
|
CREATE PROCEDURE [dbo].[uspGetTanulokMulasztasaiKesesei]
|
|
@pIntezmenyId INT
|
|
,@pTanevId INT
|
|
,@pOsztalyCsoportId INT = NULL
|
|
,@pTanuloId INT = NULL
|
|
,@pIsCsoportVez INT = 0
|
|
,@pSzervezetTipusId INT = NULL
|
|
AS
|
|
BEGIN
|
|
|
|
SET NOCOUNT ON;
|
|
|
|
DECLARE
|
|
@maxdate DATETIME = CONVERT(DATETIME, '2999-12-31', 120)
|
|
,@osztalyCsoportNev NVARCHAR(200)
|
|
--,@elmeletiOraPercben INT = 45 -- ha kiderül, hogy valóban szükség van ezekre, akkor majd implementálni kell
|
|
--,@gyakorlatiOraPercben INT = 45 -- de egyelőre be van égetve a lekérdezésbe
|
|
|
|
SELECT @osztalyCsoportNev = C_NEV FROM T_OSZTALYCSOPORT WHERE ID = @pOsztalyCsoportId AND TOROLT = 'F'
|
|
|
|
CREATE TABLE #TanuloCsoportok(
|
|
TanuloId INT,
|
|
OsztalyCsoportId INT,
|
|
Belepes DATETIME,
|
|
Kilepes DATETIME,
|
|
IsTanoraiCelu BIT,
|
|
IsOsztaly BIT,
|
|
PRIMARY KEY CLUSTERED (TanuloId, OsztalyCsoportId, Belepes, Kilepes)
|
|
);
|
|
|
|
INSERT INTO #TanuloCsoportok(TanuloId, OsztalyCsoportId, Belepes, Kilepes, IsTanoraiCelu, IsOsztaly)
|
|
SELECT
|
|
tcs.C_TANULOID AS TanuloId,
|
|
tcs.C_OSZTALYCSOPORTID AS OsztalyCsoportId,
|
|
tcs.C_BELEPESDATUM AS Belepes,
|
|
ISNULL(tcs.C_KILEPESDATUM, @maxdate) AS Kilepes,
|
|
CASE WHEN cst.C_ISTANORAICELU = 'T' THEN 1
|
|
WHEN cst.C_ISTANORAICELU IS NULL AND ocs.C_FELADATKATEGORIAID = 7553 THEN 1
|
|
ELSE 0
|
|
END AS IsTanoraiCelu,
|
|
CASE WHEN cs.ID IS NULL THEN 1 ELSE 0 END AS IsOsztaly
|
|
FROM (
|
|
|
|
SELECT DISTINCT
|
|
tcs2.C_TANULOID,
|
|
tcs2.C_OSZTALYCSOPORTID,
|
|
tcs2.C_BELEPESDATUM,
|
|
tcs2.C_KILEPESDATUM
|
|
FROM T_TANULOCSOPORT_OSSZES tcs1
|
|
INNER JOIN T_TANULOCSOPORT_OSSZES tcs2 ON tcs2.C_INTEZMENYID = tcs1.C_INTEZMENYID
|
|
AND tcs2.C_TANEVID = tcs1.C_TANEVID
|
|
AND tcs2.C_TANULOID = tcs1.C_TANULOID
|
|
AND tcs2.TOROLT = 'F'
|
|
WHERE tcs1.TOROLT = 'F'
|
|
AND tcs1.C_INTEZMENYID = @pIntezmenyId
|
|
AND tcs1.C_TANEVID = @pTanevId
|
|
AND tcs1.C_OSZTALYCSOPORTID = CASE WHEN @pOsztalyCsoportId IS NOT NULL AND @pTanuloId IS NULL THEN @pOsztalyCsoportId ELSE tcs1.C_OSZTALYCSOPORTID END
|
|
AND tcs2.C_TANULOID = CASE WHEN @pTanuloId IS NOT NULL THEN @pTanuloId ELSE tcs2.C_TANULOID END
|
|
AND (
|
|
(@pTanuloId IS NOT NULL OR tcs1.C_BELEPESDATUM <= GETDATE())
|
|
AND
|
|
(@pTanuloId IS NOT NULL OR (tcs1.C_KILEPESDATUM > GETDATE() OR tcs1.C_KILEPESDATUM IS NULL))
|
|
)
|
|
|
|
) tcs
|
|
LEFT JOIN T_CSOPORT_OSSZES cs ON cs.ID = tcs.C_OSZTALYCSOPORTID AND cs.TOROLT = 'F'
|
|
LEFT JOIN T_CSOPORTTIPUS_OSSZES cst ON cst.ID = cs.C_TIPUSA
|
|
AND cst.C_ALINTEZMENYID = cs.C_ALINTEZMENYID
|
|
AND cst.C_ALTANEVID = cs.C_ALTANEVID
|
|
AND cst.TOROLT = 'F'
|
|
LEFT JOIN T_OSZTALYCSOPORT ocs ON ocs.ID = tcs.C_OSZTALYCSOPORTID AND ocs.TOROLT = 'F'
|
|
WHERE @pSzervezetTipusId IS NULL OR tcs.C_OSZTALYCSOPORTID = @pOsztalyCsoportId
|
|
|
|
SELECT
|
|
fh.ID AS TanuloId
|
|
,fh.C_NYOMTATASINEV AS TanuloNev
|
|
,fh.C_SZULETESIDATUM AS SzuletesiIdo
|
|
,fh.C_ANYJANEVE AS AnyjaNeve
|
|
,@osztalyCsoportNev AS OsztCsopNev
|
|
,@pOsztalyCsoportId AS OsztalyCsoportId
|
|
,ISNULL(x.[Potlas], 0) AS Potlas
|
|
,ISNULL(x.[Szabadsag], 0) AS Szabadsag
|
|
,ISNULL(x.[Tappenz], 0) AS Tappenz
|
|
,ISNULL(x.[BetegSzabadsag], 0) AS BetegSzabadsag
|
|
,ISNULL(x.[hianyzasIgazolandoTanorai], 0) AS TanoraiHianyzasIgazolando
|
|
,ISNULL(x.[hianyzasIgazolandoTanoranKivuli], 0) AS TanoranKivuliHianyzasIgazolando
|
|
,ISNULL(x.[hianyzasIgazoltTanorai], 0) AS TanoraiHianyzasIgazolt
|
|
,ISNULL(x.[hianyzasIgazoltTanoranKivuli], 0) AS TanoranKivuliHianyzasIgazolt
|
|
,ISNULL(x.[hianyzasIgazolatlanTanorai], 0) AS TanoraiHianyzasIgazolatlan
|
|
,ISNULL(x.[hianyzasIgazolatlanTanoranKivuli], 0) AS TanoranKivuliHianyzasIgazolatlan
|
|
,ISNULL(x.[kesesIgazolandoTanorai], 0) AS TanoraiKesesDarabszamIgazolando
|
|
,ISNULL(x.[kesesIgazoltTanorai], 0) AS TanoraiKesesDarabszamIgazolt
|
|
,ISNULL(x.[kesesIgazolatlanTanorai], 0) AS TanoraiKesesDarabszamIgazolatlan
|
|
,ISNULL(x.[kesesIgazolandoTanoraiPerc], 0) AS TanoraiKesesIgazolandoPerc
|
|
,ISNULL(x.[kesesIgazoltTanoraiPerc], 0) AS TanoraiKesesIgazoltPerc
|
|
,ISNULL(x.[kesesIgazolatlanTanoraiPerc], 0) AS TanoraiKesesIgazolatlanPerc
|
|
,ISNULL(x.[kesesIgazolandoTanoraiPluszOra], 0) AS SzamitottKesesIgazolando
|
|
,ISNULL(x.[kesesIgazoltTanoraiPluszOra], 0) AS SzamitottKesesIgazolt
|
|
,ISNULL(x.[kesesIgazolatlanTanoraiPluszOra], 0) AS SzamitottKesesIgazolatlan
|
|
FROM T_FELHASZNALO_OSSZES fh
|
|
LEFT JOIN (
|
|
|
|
SELECT
|
|
m.C_ORATANULOIID as TanuloId,
|
|
-- Mulasztások
|
|
SUM(CASE WHEN m.C_TIPUS = 9114 THEN 1 ELSE 0 END) as [Potlas],
|
|
SUM(CASE WHEN m.C_TIPUS = 9084 THEN 1 ELSE 0 END) as [Szabadsag],
|
|
SUM(CASE WHEN m.C_TIPUS = 9112 THEN 1 ELSE 0 END) as [Tappenz],
|
|
SUM(CASE WHEN m.C_TIPUS = 9113 THEN 1 ELSE 0 END) as [BetegSzabadsag],
|
|
SUM(CASE WHEN m.C_TIPUS = 1500 and m.C_IGAZOLT IS NULL and cs.IsTanoraiCelu = 1 THEN 1 ELSE 0 END) as [hianyzasIgazolandoTanorai],
|
|
SUM(CASE WHEN m.C_TIPUS = 1500 and m.C_IGAZOLT IS NULL and cs.IsTanoraiCelu = 0 THEN 1 ELSE 0 END) as [hianyzasIgazolandoTanoranKivuli],
|
|
SUM(CASE WHEN m.C_TIPUS = 1500 and m.C_IGAZOLT = 'T' and cs.IsTanoraiCelu = 1 THEN 1 ELSE 0 END) as [hianyzasIgazoltTanorai],
|
|
SUM(CASE WHEN m.C_TIPUS = 1500 and m.C_IGAZOLT = 'T' and cs.IsTanoraiCelu = 0 THEN 1 ELSE 0 END) as [hianyzasIgazoltTanoranKivuli],
|
|
SUM(CASE WHEN m.C_TIPUS = 1500 and m.C_IGAZOLT = 'F' and cs.IsTanoraiCelu = 1 THEN 1 ELSE 0 END) as [hianyzasIgazolatlanTanorai],
|
|
SUM(CASE WHEN m.C_TIPUS = 1500 and m.C_IGAZOLT = 'F' and cs.IsTanoraiCelu = 0 THEN 1 ELSE 0 END) as [hianyzasIgazolatlanTanoranKivuli],
|
|
SUM(CASE WHEN m.C_TIPUS = 1499 and m.C_IGAZOLT IS NULL and cs.IsTanoraiCelu = 1 THEN 1 ELSE 0 END) as [kesesIgazolandoTanorai],
|
|
SUM(CASE WHEN m.C_TIPUS = 1499 and m.C_IGAZOLT = 'T' and cs.IsTanoraiCelu = 1 THEN 1 ELSE 0 END) as [kesesIgazoltTanorai],
|
|
SUM(CASE WHEN m.C_TIPUS = 1499 and m.C_IGAZOLT = 'F' and cs.IsTanoraiCelu = 1 THEN 1 ELSE 0 END) as [kesesIgazolatlanTanorai],
|
|
SUM(CASE WHEN m.C_TIPUS = 1499 and m.C_IGAZOLT IS NULL and cs.IsTanoraiCelu = 0 THEN 1 ELSE 0 END) as [kesesIgazolandoTanoranKivuli],
|
|
SUM(CASE WHEN m.C_TIPUS = 1499 and m.C_IGAZOLT = 'T' and cs.IsTanoraiCelu = 0 THEN 1 ELSE 0 END) as [kesesIgazoltTanoranKivuli],
|
|
SUM(CASE WHEN m.C_TIPUS = 1499 and m.C_IGAZOLT = 'F' and cs.IsTanoraiCelu = 0 THEN 1 ELSE 0 END) as [kesesIgazolatlanTanoranKivuli],
|
|
-- Késések percekben
|
|
SUM(CASE WHEN m.C_TIPUS = 1499 and m.C_IGAZOLT IS NULL and cs.IsTanoraiCelu = 1 THEN m.C_KESESPERCBEN ELSE 0 END) as [kesesIgazolandoTanoraiPerc],
|
|
SUM(CASE WHEN m.C_TIPUS = 1499 and m.C_IGAZOLT = 'T' and cs.IsTanoraiCelu = 1 THEN m.C_KESESPERCBEN ELSE 0 END) as [kesesIgazoltTanoraiPerc],
|
|
SUM(CASE WHEN m.C_TIPUS = 1499 and m.C_IGAZOLT = 'F' and cs.IsTanoraiCelu = 1 THEN m.C_KESESPERCBEN ELSE 0 END) as [kesesIgazolatlanTanoraiPerc],
|
|
-- Késések órákban
|
|
SUM(CASE WHEN m.C_TIPUS = 1499 and m.C_IGAZOLT IS NULL and cs.IsTanoraiCelu = 1 THEN m.C_KESESPERCBEN ELSE 0 END) / 45 as [kesesIgazolandoTanoraiPluszOra],
|
|
SUM(CASE WHEN m.C_TIPUS = 1499 and m.C_IGAZOLT = 'T' and cs.IsTanoraiCelu = 1 THEN m.C_KESESPERCBEN ELSE 0 END) / 45 as [kesesIgazoltTanoraiPluszOra],
|
|
SUM(CASE WHEN m.C_TIPUS = 1499 and m.C_IGAZOLT = 'F' and cs.IsTanoraiCelu = 1 THEN m.C_KESESPERCBEN ELSE 0 END) / 45 as [kesesIgazolatlanTanoraiPluszOra]
|
|
FROM T_TANULOMULASZTAS_OSSZES m
|
|
INNER JOIN T_TANITASIORA_OSSZES tn ON tn.ID = m.C_TANITASIORAKID
|
|
INNER JOIN #TanuloCsoportok cs ON cs.OsztalyCsoportId = tn.C_OSZTALYCSOPORTID
|
|
AND cs.TanuloId = m.C_ORATANULOIID
|
|
AND cs.Belepes <= tn.C_DATUM
|
|
AND cs.Kilepes > tn.C_DATUM
|
|
--LEFT JOIN T_TANTARGY t ON t.ID = tn.C_TANTARGYID -- amíg az órák hossza konstans 45 perc, addig erre nincs szükség
|
|
WHERE m.C_INTEZMENYID = @pIntezmenyId
|
|
AND m.C_TANEVID = @pTanevId
|
|
AND m.TOROLT = 'F'
|
|
AND m.C_TIPUS <> 1817
|
|
AND tn.C_OSZTALYCSOPORTID = CASE WHEN @pIsCsoportVez = 1 THEN @pOsztalyCsoportId ELSE tn.C_OSZTALYCSOPORTID END
|
|
AND EXISTS(SELECT * FROM #TanuloCsoportok tcs1 WHERE tcs1.TanuloId = m.C_ORATANULOIID AND tcs1.OsztalyCsoportId = @pOsztalyCsoportId AND tn.C_DATUM >= tcs1.Belepes AND tn.C_DATUM < tcs1.Kilepes)
|
|
GROUP BY m.C_ORATANULOIID
|
|
|
|
) x ON x.TanuloId = fh.ID
|
|
WHERE EXISTS(SELECT * FROM #TanuloCsoportok tcs2 where tcs2.TanuloId = fh.ID)
|
|
|
|
END
|
|
GO |