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