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

334 lines
18 KiB
Transact-SQL

DROP PROCEDURE IF EXISTS sp_GetDokumentumMulasztasok
GO
-- ===========================================================================
-- Description: Dokumentumokban használt mulasztás összesítő osztály alapján
-- ===========================================================================
CREATE PROCEDURE sp_GetDokumentumMulasztasok
@osztalyId int
,@tanevId int
,@elmeletiOraPercben int = 45
,@gyakorlatiOraPercben int = 45
,@ertekelesTipus int
,@iskolaErdekuSzamit bit
,@isMuveszetOktatasi bit = 0
,@negyedevreSzamoltMulasztasok bit = 1
AS
BEGIN
SET NOCOUNT ON;
CREATE TABLE #Tanulo (
TanuloId int
,TanuloCsoportId int
,BelepesDatum date
,KilepesDatum date
,PRIMARY KEY (TanuloId, TanuloCsoportId, BelepesDatum)
)
INSERT INTO #Tanulo
SELECT
TanuloId
,TanuloCsoportId
,BelepesDatum
,KilepesDatum
FROM fnGetDokumentumOsztalyokCsoportokTanuloi(@tanevId, @osztalyId, 'T')
DECLARE
@IdoszakUtolsoNap int
,@IdoszakElsoNap int
,@IdoszakKezdete date
,@IdoszakVege date
,@KeresztFeleves nvarchar(1)
,@kategoriaId int
,@intezmenyId int
SET @intezmenyId = (SELECT C_INTEZMENYID FROM T_TANEV_OSSZES WHERE ID = @tanevId AND TOROLT = 'F')
SELECT
@KeresztFeleves = C_KERESZTFELEVES
,@kategoriaId = C_FELADATKATEGORIAID
FROM T_OSZTALYCSOPORT_OSSZES
WHERE ID = @osztalyId
SET @IdoszakUtolsoNap =
CASE @KeresztFeleves
WHEN 'F' THEN
CASE @ertekelesTipus
WHEN 1519 THEN 1400 --Félévi jegy/értékelés -> Első félév vége
WHEN 1520 THEN 1395 --Év végi jegy/értékelés -> Utolsó tanítási nap
WHEN 1522 THEN 1403 --I. né. jegy/értékelés -> I. negyedév vége
WHEN 1524 THEN 1400 --II. né. jegy/értékelés -> Első félév vége
WHEN 1523 THEN 1404 --III. né. jegy/értékelés -> III. negyedév vége
WHEN 1525 THEN 1395 --IV. né. jegy/értékelés -> Utolsó tanítási nap
END
WHEN 'T' THEN
CASE @ertekelesTipus
WHEN 1519 THEN 1395 --Félévi jegy/értékelés -> Utolsó tanítási nap
WHEN 1520 THEN 1400 --Év végi jegy/értékelés -> Első félév vége
WHEN 1522 THEN 1404 --I. né. jegy/értékelés -> III. negyedév vége
WHEN 1524 THEN 1395 --II. né. jegy/értékelés -> Utolsó tanítási nap
WHEN 1523 THEN 1403 --III. né. jegy/értékelés -> I. negyedév vége
WHEN 1525 THEN 1400 --IV. né. jegy/értékelés -> Első félév vége
END
END
SET @IdoszakElsoNap =
CASE @KeresztFeleves
WHEN 'F' THEN
CASE @ertekelesTipus
WHEN 1519 THEN 1394 --Félévi jegy/értékelés -> Első tanítási nap
WHEN 1520 THEN 1394 --Év végi jegy/értékelés -> Első tanítási nap
WHEN 1522 THEN 1394 --I. né. jegy/értékelés -> Első tanítási nap
WHEN 1524 THEN IIF(@negyedevreSzamoltMulasztasok = 1, 1403,1394) --II. né. jegy/értékelés -> I. negyedév vége
WHEN 1523 THEN IIF(@negyedevreSzamoltMulasztasok = 1, 1400,1394) --III. né. jegy/értékelés -> Első félév vége
WHEN 1525 THEN IIF(@negyedevreSzamoltMulasztasok = 1, 1404,1394) --IV. né. jegy/értékelés -> III. negyedév vége
END
WHEN 'T' THEN
CASE @ertekelesTipus
WHEN 1519 THEN 1400 --Félévi jegy/értékelés -> Első félév vége
WHEN 1520 THEN 1394 --Év végi jegy/értékelés -> Első tanítási nap
WHEN 1522 THEN IIF(@negyedevreSzamoltMulasztasok = 1, 1400,1394) --I. né. jegy/értékelés -> Első félév vége
WHEN 1524 THEN IIF(@negyedevreSzamoltMulasztasok = 1, 1404,1394) --II. né. jegy/értékelés -> III. negyedév vége
WHEN 1523 THEN IIF(@negyedevreSzamoltMulasztasok = 1, 1394,1394) --III. né. jegy/értékelés -> Első tanítási nap
WHEN 1525 THEN IIF(@negyedevreSzamoltMulasztasok = 1, 1403,1394) --IV. né. jegy/értékelés -> I. negyedév vége
END
END
CREATE TABLE #SzurtCsoportTipus (
CsoportTipusId int PRIMARY KEY
)
IF @isMuveszetOktatasi = 0 BEGIN
INSERT INTO #SzurtCsoportTipus
SELECT ID
FROM fnGetTanoraiCeluCsoportTipusok(@tanevId)
END
ELSE BEGIN
IF @kategoriaId = 7555 -- AMI-s csoportot kérünk le
BEGIN
INSERT INTO #SzurtCsoportTipus (CsoportTipusId)
SELECT ID
FROM T_CSOPORTTIPUS_OSSZES
WHERE C_ALTANEVID = @tanevId
AND TOROLT = 'F'
AND C_ISMUVESZETI = 'T'
END
ELSE
BEGIN
INSERT INTO #SzurtCsoportTipus (CsoportTipusId)
SELECT C_TIPUSA
FROM T_CSOPORT_OSSZES
WHERE TOROLT = 'F'
AND C_ALTANEVID = @tanevId
AND ID = @osztalyId
END
END
SET @IdoszakKezdete = (SELECT TOP 1 DATEADD(day, IIF((@KeresztFeleves = 'F' AND @ertekelesTipus IN (1519,1520,1522)) OR (@KeresztFeleves = 'T' AND @ertekelesTipus IN (1520,1522,1523)), 0, 1), C_DATUM) FROM T_TANEVRENDJE_OSSZES WHERE C_NAPTIPUSA = @IdoszakElsoNap AND C_TANEVID = @tanevId AND TOROLT='F')
SET @IdoszakVege = (SELECT TOP 1 C_DATUM FROM T_TANEVRENDJE_OSSZES WHERE C_NAPTIPUSA = @IdoszakUtolsoNap AND C_TANEVID = @tanevId AND TOROLT='F')
--IF @IdoszakVege IS NULL BEGIN
--SET @IdoszakVege = (SELECT IIF(GETDATE() > C_UTOLSONAP, C_UTOLSONAP, GETDATE()) FROM T_TANEV WHERE ID = @tanevId)
--END
SELECT
t.TANULOID tanuloid
,t.TanuloCsoportId tanulocsoportid
,ISNULL(mu.[hianyzasIgazoltTanoraiElmeleti], 0) + ISNULL(mu.[hianyzasIgazoltTanoraiGyakorlati], 0)
+ ISNULL(kp.kesesIgazoltElmeletiOraban,0) + ISNULL(kp.kesesIgazoltGyakorlatiOraban,0)
+ IIF(t.BelepesDatum <= @IdoszakVege , ISNULL(ta.C_HOZOTTIGAZOLTHIANYZAS, 0),0)
AS Igazolt
,ISNULL(mu.[hianyzasIgazolatlanTanoraiElmeleti], 0) + ISNULL(mu.[hianyzasIgazolatlanTanoraiGyakorlati], 0)
+ ISNULL(kp.kesesIgazolatlanElmeletiOraban,0) + ISNULL(kp.kesesIgazolatlanGyakorlatiOraban,0)
+ IIF(t.BelepesDatum <= @IdoszakVege , ISNULL(ta.C_HOZOTTIGAZOLATLANHIANYZAS, 0),0)
AS Igazolatlan
,ISNULL(mu.[hianyzasIgazoltTanoraiElmeleti], 0) + ISNULL(kp.kesesIgazoltElmeletiOraban,0)
+ IIF(t.BelepesDatum <= @IdoszakVege , ISNULL(ta.C_HOZOTTIGAZOLTHIANYZAS, 0),0)
AS ElmeletIgazolt
,ISNULL(mu.[hianyzasIgazolatlanTanoraiElmeleti], 0) + ISNULL(kp.kesesIgazolatlanElmeletiOraban,0)
+ IIF(t.BelepesDatum <= @IdoszakVege , ISNULL(ta.C_HOZOTTIGAZOLATLANHIANYZAS, 0),0)
AS ElmeletIgazolatlan
,ISNULL(mu.[hianyzasIgazoltTanoraiGyakorlati], 0) + ISNULL(kp.kesesIgazoltGyakorlatiOraban,0)
AS GyakorlatiIgazolt
,ISNULL(mu.[hianyzasIgazolatlanTanoraiGyakorlati], 0) + ISNULL(kp.kesesIgazolatlanGyakorlatiOraban,0)
AS GyakorlatiIgazolatlan
,ISNULL(mu.[hianyzasIgazoltTanoraiElmeleti], 0) + ISNULL(kp.kesesIgazoltElmeletiOraban,0)
+ ISNULL(mu.[hianyzasIgazolatlanTanoraiElmeleti], 0) + ISNULL(kp.kesesIgazolatlanElmeletiOraban,0)
+ IIF(t.BelepesDatum <= @IdoszakVege , ISNULL(ta.C_HOZOTTIGAZOLTHIANYZAS, 0),0)
+ IIF(t.BelepesDatum <= @IdoszakVege , ISNULL(ta.C_HOZOTTIGAZOLATLANHIANYZAS, 0),0)
AS ElmeletOsszes
,ISNULL(mu.[hianyzasIgazoltTanoraiGyakorlati], 0) + ISNULL(kp.kesesIgazoltGyakorlatiOraban,0)
+ ISNULL(mu.[hianyzasIgazolatlanTanoraiGyakorlati], 0) + ISNULL(kp.kesesIgazolatlanGyakorlatiOraban,0)
AS GyakorlatOsszes
,ISNULL(mu.[hianyzasIgazoltTanoraiElmeleti], 0) + ISNULL(mu.[hianyzasIgazoltTanoraiGyakorlati], 0)
+ ISNULL(kp.kesesIgazoltElmeletiOraban,0) + ISNULL(kp.kesesIgazoltGyakorlatiOraban,0)
+ ISNULL(mu.[hianyzasIgazolatlanTanoraiElmeleti], 0) + ISNULL(mu.[hianyzasIgazolatlanTanoraiGyakorlati], 0)
+ ISNULL(kp.kesesIgazolatlanElmeletiOraban,0) + ISNULL(kp.kesesIgazolatlanGyakorlatiOraban,0)
+ IIF(t.BelepesDatum <= @IdoszakVege , ISNULL(ta.C_HOZOTTIGAZOLTHIANYZAS, 0),0)
+ IIF(t.BelepesDatum <= @IdoszakVege , ISNULL(ta.C_HOZOTTIGAZOLATLANHIANYZAS, 0),0)
AS Osszes
FROM #Tanulo t
LEFT JOIN (
SELECT
tanuloId
,tanulocsoportid
,[hianyzasIgazoltTanoraiElmeleti]
,[hianyzasIgazoltTanoraiGyakorlati]
,[hianyzasIgazolatlanTanoraiElmeleti]
,[hianyzasIgazolatlanTanoraiGyakorlati]
FROM (
SELECT
x.tanuloId, x.tanulocsoportid
,'Hianyzas' +
CASE isIgazolt WHEN 'T' THEN 'Igazolt' WHEN '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
mu.C_ORATANULOIID AS tanuloId
,tanulok.TanuloCsoportId
,mu.C_TIPUS mulasztasTipus
,mu.C_IGAZOLT isIgazolt
,IIF((@isMuveszetOktatasi = 0 AND cs.ID IS NULL), 'T', IIF((@isMuveszetOktatasi = 1 AND (csmuv.ID IS NOT NULL OR tcs.C_OSZTALYCSOPORTID = @osztalyid)),'T','F')) AS isTanorai
,IIF(t.C_GYAKORLATI='T', 'T', 'F') as isGyakorlati
,COUNT(1) AS cnt
FROM T_TANULOMULASZTAS_OSSZES mu
INNER JOIN #Tanulo tanulok ON tanulok.TanuloId = mu.C_ORATANULOIID
INNER JOIN T_TANITASIORA_OSSZES tn ON tn.ID = mu.C_TANITASIORAKID
INNER JOIN (SELECT ID FROM fnGetDokumentumKapcsolodoOsztalycsoportok(@osztalyID, @tanevId, 0, DEFAULT)) kocs ON kocs.ID = tn.C_OSZTALYCSOPORTID
INNER JOIN T_TANTARGY_OSSZES t on t.id=tn.C_TANTARGYID
LEFT JOIN (
SELECT cs.ID
FROM T_CSOPORT_OSSZES cs
INNER JOIN T_CSOPORTTIPUS_OSSZES cst On cst.ID = cs.C_TIPUSA AND cst.C_ALTANEVID = cs.C_ALTANEVID AND cst.C_ISTANORAICELU = 'F'
WHERE cs.C_ALTANEVID = @tanevId
) cs ON tn.C_OSZTALYCSOPORTID = cs.ID
LEFT JOIN (
SELECT cs.ID
FROM T_CSOPORT_OSSZES cs
INNER JOIN #SzurtCsoportTipus cst On cst.CsoportTipusId = cs.C_TIPUSA
WHERE cs.C_ALTANEVID = @tanevId
) csmuv ON tn.C_OSZTALYCSOPORTID = csmuv.ID
INNER JOIN T_TANULOCSOPORT_OSSZES tcs ON tcs.C_OSZTALYCSOPORTID = tn.C_OSZTALYCSOPORTID AND tanulok.TanuloId = tcs.C_TANULOID AND tcs.TOROLT = 'F'
INNER JOIN T_OSZTALYCSOPORT_OSSZES ocs ON ocs.ID = tn.C_OSZTALYCSOPORTID AND ocs.C_FELADATKATEGORIAID = @kategoriaId AND ocs.Torolt = 'F'
WHERE tn.C_DATUM BETWEEN @IdoszakKezdete AND @IdoszakVege
AND mu.C_TANEVID = @tanevId
AND mu.Torolt ='F'
AND tn.Torolt ='F'
AND mu.C_IGAZOLT IS NOT NULL
AND tn.C_TANEVID = @tanevId
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 tanulok.BelepesDatum <= tn.C_DATUM
AND (tanulok.KilepesDatum IS NULL OR tanulok.KilepesDatum >= tn.C_DATUM)
AND mu.C_TIPUS = 1500
AND (
(@isMuveszetOktatasi = 0)
OR
(@isMuveszetOktatasi = 1 AND (csmuv.ID IS NOT NULL OR tcs.C_OSZTALYCSOPORTID = @osztalyid))
)
GROUP BY mu.C_ORATANULOIID, tanulok.TanuloCsoportId, mu.C_TIPUS, mu.C_IGAZOLT, IIF((@isMuveszetOktatasi = 0 AND cs.ID IS NULL), 'T', IIF((@isMuveszetOktatasi = 1 AND (csmuv.ID IS NOT NULL OR tcs.C_OSZTALYCSOPORTID = @osztalyid)),'T','F')), t.C_GYAKORLATI
) x
) p
PIVOT (
MAX(cnt)
FOR piv IN (
[hianyzasIgazoltTanoraiElmeleti], [hianyzasIgazoltTanoraiGyakorlati],
[hianyzasIgazolatlanTanoraiElmeleti], [hianyzasIgazolatlanTanoraiGyakorlati]
)
) AS pvt
) mu on mu.tanuloId = t.tanuloId and mu.TanuloCsoportId = t.TanuloCsoportId
LEFT JOIN (
SELECT
tanuloId
,tanulocsoportid
,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
,x.tanulocsoportid
,'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.tanulocsoportid
,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
mu.C_ORATANULOIID AS tanuloId
,tanulok.tanulocsoportid
,mu.C_IGAZOLT isIgazolt
,t.C_GYAKORLATI AS isGyakorlati
,SUM(mu.C_KESESPERCBEN) AS keses
FROM T_TANULOMULASZTAS_OSSZES mu
INNER JOIN #Tanulo tanulok ON tanulok.TanuloId = mu.C_ORATANULOIID
INNER JOIN T_TANITASIORA_OSSZES tn ON tn.ID = mu.C_TANITASIORAKID
INNER JOIN (SELECT ID FROM fnGetDokumentumKapcsolodoOsztalycsoportok(@osztalyID, @tanevId, 0, DEFAULT)) kocs ON kocs.ID = tn.C_OSZTALYCSOPORTID
INNER JOIN T_TANTARGY_OSSZES t ON t.ID = tn.C_TANTARGYID
LEFT JOIN (
SELECT cs.ID, cs.C_TIPUSA
FROM T_CSOPORT_OSSZES cs
INNER JOIN T_CSOPORTTIPUS_OSSZES cst On cst.ID = cs.C_TIPUSA AND cst.C_ALTANEVID = cs.C_ALTANEVID AND cst.C_ISTANORAICELU = 'F'
) cs ON tn.C_OSZTALYCSOPORTID = cs.ID
LEFT JOIN (
SELECT cs.ID
FROM T_CSOPORT_OSSZES cs
INNER JOIN #SzurtCsoportTipus cst On cst.CsoportTipusId = cs.C_TIPUSA
) csmuv ON tn.C_OSZTALYCSOPORTID = csmuv.ID
INNER JOIN T_TANULOCSOPORT_OSSZES tcs ON tcs.C_OSZTALYCSOPORTID = tn.C_OSZTALYCSOPORTID and tanulok.TanuloId = tcs.C_TANULOID AND tcs.TOROLT = 'F'
INNER JOIN T_OSZTALYCSOPORT_OSSZES ocs ON ocs.ID = tn.C_OSZTALYCSOPORTID AND ocs.C_FELADATKATEGORIAID = @kategoriaId AND ocs.Torolt = 'F'
WHERE mu.C_TANEVID = @tanevId
AND (
(@isMuveszetOktatasi = 0 AND (cs.ID IS NULL OR cs.C_TIPUSA IN (SELECT CsoportTipusId FROM #SzurtCsoportTipus)))
OR
(@isMuveszetOktatasi = 1 AND (csmuv.ID IS NOT NULL OR tcs.C_OSZTALYCSOPORTID = @osztalyid))
)
AND mu.C_TIPUS = 1499
AND mu.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 tanulok.BelepesDatum <= tn.C_DATUM
AND (tanulok.KilepesDatum IS NULL OR tanulok.KilepesDatum >= tn.C_DATUM)
AND tn.C_DATUM BETWEEN @IdoszakKezdete AND @IdoszakVege
GROUP BY mu.C_ORATANULOIID, tanulok.TanuloCsoportId, mu.C_IGAZOLT, t.C_GYAKORLATI
) xx
GROUP BY tanuloId, TanuloCsoportId, xx.isIgazolt
) x
) p
PIVOT (
MAX(kesesOraban)
FOR piv IN (
kesesIgazolandoTanoraiPluszOra, kesesIgazoltTanoraiPluszOra, kesesIgazolatlanTanoraiPluszOra
)
) AS pvt
GROUP BY tanuloId, TanuloCsoportId
) kp ON t.tanuloId = kp.tanuloId AND kp.TanuloCsoportId = t.TanuloCsoportId
LEFT join T_TANULOTANUGYIADATOK ta on t.TanuloCsoportId = ta.C_TANULOCSOPORTID
END
GO