kreta/Kreta.DataAccess.Migrations/Scripts/Archive/20180113151822_KRETA_4736/sp_GetDokumentumMulasztasok.sql
2024-03-13 00:33:46 +01:00

227 lines
10 KiB
Transact-SQL

IF OBJECT_ID('sp_GetDokumentumMulasztasok') IS NOT NULL BEGIN
DROP PROCEDURE sp_GetDokumentumMulasztasok
END
GO
-- ===========================================================================
-- Description: Dokumentumokban használt mulasztás összesítő osztály alapján
-- ===========================================================================
CREATE PROCEDURE [dbo].[sp_GetDokumentumMulasztasok]
@osztalyId INT
,@tanevId INT
,@elmeletGyakorlat BIT = 0
,@kesesTipus INT = 1499
,@elmeletiOraPercben INT = 45
,@gyakorlatiOraPercben INT = 60
,@ertekelesTipus INT
,@iskolaErdekuSzamit BIT
AS
BEGIN
SET NOCOUNT ON;
DECLARE @Tanulok table (
tanuloId int PRIMARY KEY
);
INSERT INTO @Tanulok
SELECT TanuloId
FROM fnGetDokumentumOsztalyokCsoportokTanuloi(@tanevId, @osztalyId, 'T')
DECLARE @Idoszak INT
DECLARE @IdoszakVege DATE
SET @Idoszak =
CASE @ertekelesTipus
WHEN 1519 THEN 1400 --félévi
WHEN 1520 THEN 1395 --év végi
WHEN 1522 THEN 1403 --I. negyedévi
WHEN 1523 THEN 1404 --III. negyedévi
END
SET @IdoszakVege = (SELECT TOP 1 C_DATUM FROM T_TANEVRENDJE_OSSZES WHERE C_NAPTIPUSA = @Idoszak AND C_TANEVID = @tanevId AND TOROLT='F')
SELECT
t.TANULOID tanuloid
,m.Igazolt
,m.Igazolatlan
,m.ElmeletIgazolt
,m.ElmeletIgazolatlan
,m.GyakorlatiIgazolt
,m.GyakorlatiIgazolatlan
,m.Osszes
FROM @Tanulok t
LEFT JOIN (
SELECT DISTINCT
m.tanuloId
,ISNULL(m.[hianyzasIgazoltTanoraiElmeleti], 0) + ISNULL(m.[hianyzasIgazoltTanoraiGyakorlati], 0) + ISNULL(kp.kesesIgazoltElmeletiOraban,0) + ISNULL(kp.kesesIgazoltGyakorlatiOraban,0) Igazolt
,ISNULL(m.[hianyzasIgazolatlanTanoraiElmeleti], 0) + ISNULL(m.[hianyzasIgazolatlanTanoraiGyakorlati], 0) + ISNULL(kp.kesesIgazolatlanElmeletiOraban,0) + ISNULL(kp.kesesIgazolatlanGyakorlatiOraban,0) Igazolatlan
,ISNULL(m.[hianyzasIgazoltTanoraiElmeleti], 0) + ISNULL(kp.kesesIgazoltElmeletiOraban,0) ElmeletIgazolt
,ISNULL(m.[hianyzasIgazolatlanTanoraiElmeleti], 0) + ISNULL(kp.kesesIgazolatlanElmeletiOraban,0) ElmeletIgazolatlan
,ISNULL(m.[hianyzasIgazoltTanoraiGyakorlati], 0) + ISNULL(kp.kesesIgazoltGyakorlatiOraban,0) GyakorlatiIgazolt
,ISNULL(m.[hianyzasIgazolatlanTanoraiGyakorlati], 0) + ISNULL(kp.kesesIgazolatlanGyakorlatiOraban,0) GyakorlatiIgazolatlan
,ISNULL(m.[hianyzasIgazoltTanoraiElmeleti], 0) + ISNULL(m.[hianyzasIgazoltTanoraiGyakorlati], 0) + ISNULL(kp.kesesIgazoltElmeletiOraban,0) + ISNULL(kp.kesesIgazoltGyakorlatiOraban,0)+
ISNULL(m.[hianyzasIgazolatlanTanoraiElmeleti], 0) + ISNULL(m.[hianyzasIgazolatlanTanoraiGyakorlati], 0) + ISNULL(kp.kesesIgazolatlanElmeletiOraban,0) + ISNULL(kp.kesesIgazolatlanGyakorlatiOraban,0) Osszes
FROM (
SELECT
tanuloId,
[hianyzasIgazoltTanoraiElmeleti], [hianyzasIgazoltTanoraiGyakorlati],
[hianyzasIgazolatlanTanoraiElmeleti], [hianyzasIgazolatlanTanoraiGyakorlati],
[kesesIgazoltTanoraiElmeleti],[kesesIgazoltTanoraiGyakorlati],
[kesesIgazolatlanTanoraiElmeleti], [kesesIgazolatlanTanoraiGyakorlati]
FROM (
SELECT
x.tanuloId
,CASE mulasztasTipus WHEN 1500 THEN 'Hianyzas' WHEN 1499 THEN 'Keses' END +
CASE WHEN isIgazolt IS NULL THEN 'Igazolando' WHEN isIgazolt = 'T' THEN 'Igazolt' WHEN isIgazolt = 'F' THEN 'Igazolatlan' END +
CASE isTanorai WHEN 'T' THEN 'Tanorai' WHEN 'F' THEN 'TanoranKivuli' END +
CASE isGyakorlati WHEN 'T' THEN 'Gyakorlati' WHEN 'F' THEN 'Elmeleti' END
AS piv
,cnt
FROM (
SELECT
m.C_ORATANULOIID AS tanuloId
,m.C_TIPUS mulasztasTipus
,m.C_IGAZOLT isIgazolt
,IIF(cs.ID IS NULL, 'T', 'F') AS isTanorai
,IIF(t.C_GYAKORLATI='T', 'T', 'F') as isGyakorlati
,COUNT(1) AS cnt
FROM T_TANULOMULASZTAS_OSSZES m
INNER JOIN @Tanulok tanulok ON tanulok.TanuloId = m.C_ORATANULOIID
INNER JOIN T_TANITASIORA_OSSZES tn ON tn.ID = m.C_TANITASIORAKID
INNER JOIN T_TANTARGY_OSSZES t on t.id=tn.C_TANTARGYID
LEFT JOIN T_CSOPORT_OSSZES cs ON tn.C_OSZTALYCSOPORTID = cs.ID AND cs.C_TIPUSA NOT IN (SELECT ID FROM fnGetTanoraiCeluCsoportTipusok(@tanevId))
INNER JOIN T_TANULOCSOPORT_OSSZES tcs ON tcs.C_OSZTALYCSOPORTID = tn.C_OSZTALYCSOPORTID AND tanulok.TanuloId = tcs.C_TANULOID AND tcs.TOROLT = 'F'
WHERE tn.C_DATUM <= @IdoszakVege
AND m.C_TANEVID = @tanevId
AND m.Torolt ='F'
AND tn.Torolt ='F'
AND (@iskolaErdekuSzamit = 1 OR (C_IGAZOLASTIPUSA <> 1533 OR C_IGAZOLASTIPUSA IS NULL))
AND tcs.C_BELEPESDATUM <= tn.C_DATUM
AND (tcs.C_KILEPESDATUM IS NULL OR tcs.C_KILEPESDATUM > tn.C_DATUM)
AND m.C_TIPUS IN (1500 ,1499)
GROUP BY m.C_ORATANULOIID, m.C_TIPUS, m.C_IGAZOLT, IIF(cs.ID IS NULL, 'T', 'F'), t.C_GYAKORLATI
) x
) p
PIVOT (
MAX(cnt)
FOR piv IN (
[hianyzasIgazoltTanoraiElmeleti], [hianyzasIgazoltTanoraiGyakorlati],
[hianyzasIgazolatlanTanoraiElmeleti], [hianyzasIgazolatlanTanoraiGyakorlati],
[kesesIgazoltTanoraiElmeleti],[kesesIgazoltTanoraiGyakorlati],
[kesesIgazolatlanTanoraiElmeleti], [kesesIgazolatlanTanoraiGyakorlati]
)
) AS pvt
) m
LEFT JOIN (
SELECT
tanuloId
,[kesesIgazolandoTanoraiPerc]
,[kesesIgazoltTanoraiPerc]
,[kesesIgazolatlanTanoraiPerc]
FROM (
SELECT
x.tanuloId
,'Keses' +
CASE WHEN isIgazolt IS NULL THEN 'Igazolando' WHEN isIgazolt = 'T' THEN 'Igazolt' WHEN isIgazolt = 'F' THEN 'Igazolatlan' END +
'TanoraiPerc' AS piv
,kesesPercben
FROM (
SELECT
m.C_ORATANULOIID AS tanuloId
,m.C_IGAZOLT isIgazolt
,SUM(m.C_KESESPERCBEN) AS kesesPercben
FROM T_TANULOMULASZTAS_OSSZES m
INNER JOIN @Tanulok tanulok ON tanulok.TanuloId = m.C_ORATANULOIID
INNER JOIN T_TANITASIORA_OSSZES tn ON tn.ID = m.C_TANITASIORAKID
LEFT JOIN T_CSOPORT_OSSZES cs ON tn.C_OSZTALYCSOPORTID = cs.ID
INNER JOIN T_TANULOCSOPORT_OSSZES tcs ON tcs.C_OSZTALYCSOPORTID = tn.C_OSZTALYCSOPORTID AND tanulok.TanuloId = tcs.C_TANULOID AND tcs.TOROLT = 'F'
WHERE tn.C_DATUM <= @IdoszakVege
AND m.C_TANEVID = @tanevId
AND m.Torolt ='F'
AND tn.Torolt ='F'
AND (cs.ID IS NULL OR cs.C_TIPUSA IN (SELECT ID FROM fnGetTanoraiCeluCsoportTipusok(@tanevId)))
AND m.C_TIPUS = 1499
AND (@iskolaErdekuSzamit = 1 OR (C_IGAZOLASTIPUSA <> 1533 OR C_IGAZOLASTIPUSA IS NULL))
AND tcs.C_BELEPESDATUM <= tn.C_DATUM
AND (tcs.C_KILEPESDATUM IS NULL OR tcs.C_KILEPESDATUM > tn.C_DATUM)
GROUP BY m.C_ORATANULOIID, m.C_IGAZOLT
) x
) p
PIVOT (
MAX(kesesPercben)
FOR piv IN
([kesesIgazolandoTanoraiPerc], [kesesIgazoltTanoraiPerc], [kesesIgazolatlanTanoraiPerc])
) AS pvt
) k ON k.tanuloId = m.tanuloId
LEFT JOIN (
SELECT
tanuloId
,SUM(kesesIgazolandoTanoraiPluszOra) AS kesesIgazolandoTanoraiPluszOra
,SUM(kesesIgazoltTanoraiPluszOra) AS kesesIgazoltTanoraiPluszOra
,SUM(kesesIgazolatlanTanoraiPluszOra) AS kesesIgazolatlanTanoraiPluszOra
,SUM(kesesIgazoltElmeletiOraban) AS kesesIgazoltElmeletiOraban
,SUM(kesesIgazolatlanElmeletiOraban) AS kesesIgazolatlanElmeletiOraban
,SUM(kesesIgazoltGyakorlatiOraban) AS kesesIgazoltGyakorlatiOraban
,SUM(kesesIgazolatlanGyakorlatiOraban) AS kesesIgazolatlanGyakorlatiOraban
FROM (
SELECT
x.tanuloId
,'Keses' +
CASE
WHEN isIgazolt IS NULL THEN 'Igazolando'
WHEN isIgazolt = 'T' THEN 'Igazolt'
WHEN isIgazolt = 'F' THEN 'Igazolatlan'
END + 'TanoraiPluszOra' AS piv
,kesesOraban
,kesesIgazoltElmeletiOraban
,kesesIgazolatlanElmeletiOraban
,kesesIgazoltGyakorlatiOraban
,kesesIgazolatlanGyakorlatiOraban
FROM (
SELECT
xx.tanuloId
,xx.isIgazolt
,SUM(xx.keses / (CASE WHEN isGyakorlati = 'F' THEN @elmeletiOraPercben ELSE @gyakorlatiOraPercben END)) AS kesesOraban
,SUM(CASE WHEN isGyakorlati = 'F' and isIgazolt='T' THEN xx.keses / @elmeletiOraPercben ELSE 0 END) AS kesesIgazoltElmeletiOraban
,SUM(CASE WHEN isGyakorlati = 'F' and isIgazolt='F' THEN xx.keses / @elmeletiOraPercben ELSE 0 END) AS kesesIgazolatlanElmeletiOraban
,SUM(CASE WHEN isGyakorlati = 'T' and isIgazolt='T' THEN xx.keses / @gyakorlatiOraPercben ELSE 0 END) AS kesesIgazoltGyakorlatiOraban
,SUM(CASE WHEN isGyakorlati = 'T' and isIgazolt='F' THEN xx.keses / @gyakorlatiOraPercben ELSE 0 END) AS kesesIgazolatlanGyakorlatiOraban
FROM (
SELECT
m.C_ORATANULOIID AS tanuloId
,m.C_IGAZOLT isIgazolt
,t.C_GYAKORLATI AS isGyakorlati
,SUM(m.C_KESESPERCBEN) AS keses
FROM T_TANULOMULASZTAS_OSSZES m
INNER JOIN @Tanulok tanulok ON tanulok.TanuloId = m.C_ORATANULOIID
INNER JOIN T_TANITASIORA_OSSZES tn ON tn.ID = m.C_TANITASIORAKID
INNER JOIN T_TANTARGY_OSSZES t ON t.ID = tn.C_TANTARGYID
LEFT JOIN T_CSOPORT_OSSZES cs ON tn.C_OSZTALYCSOPORTID = cs.ID
INNER JOIN T_TANULOCSOPORT_OSSZES tcs ON tcs.C_OSZTALYCSOPORTID = tn.C_OSZTALYCSOPORTID and tanulok.TanuloId = tcs.C_TANULOID AND tcs.TOROLT = 'F'
WHERE m.C_TANEVID = @tanevId
AND (cs.ID IS NULL OR cs.C_TIPUSA IN (SELECT ID FROM fnGetTanoraiCeluCsoportTipusok(@tanevId)))
AND m.C_TIPUS = 1499
AND m.TOROLT = 'F'
AND tn.Torolt ='F'
AND (@iskolaErdekuSzamit = 1 OR (C_IGAZOLASTIPUSA <> 1533 OR C_IGAZOLASTIPUSA IS NULL))
AND tcs.C_BELEPESDATUM <= tn.C_DATUM
AND (tcs.C_KILEPESDATUM IS NULL OR tcs.C_KILEPESDATUM > tn.C_DATUM)
GROUP BY m.C_ORATANULOIID, m.C_IGAZOLT, t.C_GYAKORLATI
) xx
GROUP BY tanuloId, xx.isIgazolt
) x
) p
PIVOT (
MAX(kesesOraban)
FOR piv IN (
kesesIgazolandoTanoraiPluszOra, kesesIgazoltTanoraiPluszOra, kesesIgazolatlanTanoraiPluszOra
)
) AS pvt
GROUP BY tanuloId
) kp ON m.tanuloId = kp.tanuloId
) m on m.tanuloId=t.tanuloId
END
GO