kreta/Kreta.DataAccess.Migrations/DBScripts/Database/dbo/Stored procedures/uspGetTanulokMulasztasaiKesesei.sql
2024-03-13 00:33:46 +01:00

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