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.ElmeletOsszes ,m.GyakorlatOsszes ,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(kp.kesesIgazoltElmeletiOraban,0) + ISNULL(m.[hianyzasIgazolatlanTanoraiElmeleti], 0) + ISNULL(kp.kesesIgazolatlanElmeletiOraban,0) ElmeletOsszes ,ISNULL(m.[hianyzasIgazoltTanoraiGyakorlati], 0) + ISNULL(kp.kesesIgazoltGyakorlatiOraban,0) + ISNULL(m.[hianyzasIgazolatlanTanoraiGyakorlati], 0) + ISNULL(kp.kesesIgazolatlanGyakorlatiOraban,0) GyakorlatOsszes ,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