This commit is contained in:
skidoodle 2024-03-13 00:33:46 +01:00
commit e124a47765
19374 changed files with 9806149 additions and 0 deletions

View file

@ -0,0 +1,195 @@
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF OBJECT_ID('[dbo].[sp_Nyomtatvany_Excel_IdoszakiOsztalyStatisztika]') IS NOT NULL
BEGIN
DROP PROCEDURE [dbo].[sp_Nyomtatvany_Excel_IdoszakiOsztalyStatisztika]
END
GO
-- ===================================================================
-- Author: Badits-Nyáradi József
-- ===================================================================
CREATE PROCEDURE [dbo].[sp_Nyomtatvany_Excel_IdoszakiOsztalyStatisztika]
@pTanevId INT,
@pOsztalyId INT,
@pIntezmenyId INT,
@pErtekelestipusaId INT,
@pLezaroNaptipusId INT,
@pTanoraiCsoportTipusIds INT = 1034,
@pMulasztasTipusIdKeses INT = 1499,
@pMulasztasTipusIdHianyzas INT = 1500,
@pNemMulasztaIgazolasTipusIds INT = 1532, -- Iskola érdekű távollét
@pTanevrendjeTanevKezdeteNaptipusId INT = 1394, --Tanévrendje első nap típus
@pElmeletgyakorlat BIT = 0
AS
BEGIN
SET NOCOUNT ON;
DECLARE @idoszakEleje DATE = (
SELECT COALESCE(
(SELECT C_DATUM FROM T_TANEVRENDJE WHERE C_TANEVID = @pTanevId AND C_NAPTIPUSA = @pTanevrendjeTanevKezdeteNaptipusId),
(SELECT C_ELSOTANITASINAP FROM T_TANEV WHERE ID = @pTanevId))
);
DECLARE @idoszakVege DATE = (
SELECT COALESCE(
(SELECT C_DATUM FROM T_TANEVRENDJE WHERE C_TANEVID = @pTanevId AND C_NAPTIPUSA = @pLezaroNaptipusId),
GETDATE())
);
DECLARE @osztalyoktanoraicsoportok TABLE (OSZTALYCSOPORTID INT PRIMARY KEY, C_TIPUSA INT, C_VEGZOSEVFOLYAM CHAR(1));
DECLARE @osztalycsoportok TABLE (OSZTALYCSOPORTID INT PRIMARY KEY);
DECLARE @aktualisOsztalyCsoportok TABLE (OSZTALYCSOPORTID INT);
DECLARE @osztalyTanulok TABLE (TANULOID INT PRIMARY KEY, BELEPESDATUM DATE, KILEPESDATUM DATE);
DECLARE @szurtErtekeles TABLE (
T_TANULOERTEKELES_ID INT PRIMARY KEY, C_TANULOID INT, ERTEKELES NVARCHAR(MAX), C_ERTEKELESDATUM DATETIME,
C_TANTARGYID INT, TANTARGY_NEV NVARCHAR(255), TARGYKATEGORIA_NEV NVARCHAR(255), TARGYKATEGORIA_SORSZAM INT, T_TANTARGY_C_FOTARGYE CHAR(1), T_TANTARGY_C_ALTANTARGYKENTNYOMTATVANYBAN CHAR(1)
);
DECLARE @szurtMulasztas TABLE (TIPUS_CHAR CHAR(1), C_TIPUS INT , C_IGAZOLT CHAR(1), C_TANULOID INT, C_GYAKORLATI CHAR(1), KESESPERC INT, MULASZTASOK_SZAMA INT);
INSERT INTO @osztalyoktanoraicsoportok (OSZTALYCSOPORTID, C_TIPUSA, C_VEGZOSEVFOLYAM) (
SELECT T_OSZTALYCSOPORT.ID, C_TIPUSA, C_VEGZOSEVFOLYAM
FROM T_OSZTALYCSOPORT
LEFT JOIN T_CSOPORT ON T_OSZTALYCSOPORT.ID = T_CSOPORT.ID
LEFT JOIN T_OSZTALY ON T_OSZTALYCSOPORT.ID = T_OSZTALY.ID
WHERE ( C_TIPUSA IN (@pTanoraiCsoportTipusIds) OR T_OSZTALY.ID IS NOT NULL) AND C_TANEVID = @pTanevId
);
INSERT INTO @osztalycsoportok (OSZTALYCSOPORTID) (
SELECT ID FROM fnGetKapcsolodoOsztalycsoportok(@pOsztalyId)
WHERE (ID IN (SELECT ID FROM T_OSZTALY) OR ID IN (SELECT ID FROM T_CSOPORT WHERE C_TIPUSA IN (@pTanoraiCsoportTipusIds)))
);
INSERT INTO @aktualisOsztalyCsoportok (OSZTALYCSOPORTID) (
SELECT ID FROM fnGetKapcsolodoOsztalycsoportokByDate(@pOsztalyId, @idoszakEleje, @idoszakVege)
WHERE (ID IN (SELECT ID FROM T_OSZTALY_OSSZES) OR ID IN (SELECT ID FROM T_CSOPORT_OSSZES WHERE C_TIPUSA IN (@pTanoraiCsoportTipusIds)))
);
-- TANULÓK
INSERT INTO @osztalyTanulok (TANULOID, BELEPESDATUM, KILEPESDATUM) (
SELECT T_FELHASZNALO_OSSZES.ID AS TANULOID, C_BELEPESDATUM, C_KILEPESDATUM
FROM T_FELHASZNALO_OSSZES
INNER JOIN (
SELECT C_TANULOID, C_OSZTALYCSOPORTID, C_BELEPESDATUM, C_KILEPESDATUM
FROM T_TANULOCSOPORT_OSSZES
WHERE T_TANULOCSOPORT_OSSZES.TOROLT = 'F' AND T_TANULOCSOPORT_OSSZES.C_BELEPESDATUM < @idoszakVege
AND (T_TANULOCSOPORT_OSSZES.C_KILEPESDATUM IS NULL OR T_TANULOCSOPORT_OSSZES.C_KILEPESDATUM >= @idoszakVege)
) AS TANCSOPORT ON TANCSOPORT.C_TANULOID = T_FELHASZNALO_OSSZES.ID
WHERE T_FELHASZNALO_OSSZES.TOROLT = 'F' AND TANCSOPORT.C_OSZTALYCSOPORTID = @pOsztalyId AND T_FELHASZNALO_OSSZES.C_TANEVID = @pTanevId
);
-- OSZTÁLY
SELECT T_OSZTALY.ID, C_NEV, C_VEGZOSEVFOLYAM, T_FELHASZNALO_OSSZES.C_NYOMTATASINEV, C_OSZTALYNAPLOMEGNYITASA, C_OSZTALYNAPLOZARASA, C_OSZTALYFONOKID
FROM T_OSZTALY
INNER JOIN T_OSZTALYCSOPORT ON T_OSZTALYCSOPORT.ID = T_OSZTALY.ID
INNER JOIN T_FELHASZNALO_OSSZES ON T_OSZTALY.C_OSZTALYFONOKID = T_FELHASZNALO_OSSZES.ID
INNER JOIN T_FELADATELLATASIHELY ON T_FELADATELLATASIHELY.ID = T_OSZTALYCSOPORT.C_FELADATELLATASIHELYID
WHERE T_OSZTALYCSOPORT.ID = @pOsztalyId;
--TANULÓK LISTA
SELECT T_FELHASZNALO_OSSZES.ID AS C_TANULOID, T_FELHASZNALO_OSSZES.C_NYOMTATASINEV AS TANULONEV, T_FELHASZNALO_OSSZES.C_ANYJANEVE ANYJANEVE, T_FELHASZNALO_OSSZES.C_OKTATASIAZONOSITO AS OKTATASIAZONOSITO, BELEPESDATUM, KILEPESDATUM
FROM T_FELHASZNALO_OSSZES
INNER JOIN @osztalyTanulok AS OSZTALYTANULOK ON OSZTALYTANULOK.TANULOID = T_FELHASZNALO_OSSZES.ID
ORDER BY T_FELHASZNALO_OSSZES.C_NYOMTATASINEV;
-- ÉRTÉKELÉS
INSERT INTO @szurtErtekeles (T_TANULOERTEKELES_ID, C_TANULOID, ERTEKELES, C_ERTEKELESDATUM, C_TANTARGYID, TANTARGY_NEV, TARGYKATEGORIA_NEV, TARGYKATEGORIA_SORSZAM, T_TANTARGY_C_FOTARGYE, T_TANTARGY_C_ALTANTARGYKENTNYOMTATVANYBAN) (
SELECT T_TANULOERTEKELES.ID, C_TANULOID, COALESCE(CONVERT(NVARCHAR, ODIB.C_VALUE), T_TANULOERTEKELES.C_ERTEKELESSZOVEG, CONVERT(NVARCHAR, C_SZAZALEK)) AS ERTEKELES, C_ERTEKELESDATUM,
C_TANTARGYID, T_TANTARGY.C_NEVNYOMTATVANYBAN AS TANTARGY_NEV, T_DICTIONARYITEMBASE.C_NAME AS TARGYKATEGORIA_NEV, T_DICTIONARYITEMBASE.C_VALUE AS TARGYKATEGORIA_SORSZAM, T_TANTARGY.C_FOTARGYE, C_ALTANTARGYKENTNYOMTATVANYBAN
FROM T_OSZTALYZATERTEKELES
INNER JOIN T_TANULOERTEKELES ON T_TANULOERTEKELES.ID = T_OSZTALYZATERTEKELES.ID
INNER JOIN T_TANTARGY ON T_TANTARGY.ID = T_TANULOERTEKELES.C_TANTARGYID AND T_TANTARGY.C_TANEVID = T_TANULOERTEKELES.C_TANEVID
LEFT JOIN T_OSZTALYZATTIPUS ON T_OSZTALYZATTIPUS.ID = T_TANULOERTEKELES.C_OSZTALYZAT
LEFT JOIN T_DICTIONARYITEMBASE AS ODIB ON ODIB.ID = T_OSZTALYZATTIPUS.ID
LEFT JOIN T_TARGYKATEGORIATIPUS ON T_TARGYKATEGORIATIPUS.ID = T_TANTARGY.C_TARGYKATEGORIA
LEFT JOIN T_DICTIONARYITEMBASE ON T_DICTIONARYITEMBASE.ID = T_TARGYKATEGORIATIPUS.ID
INNER JOIN @OSZTALYTANULOK AS OSZTALYTANULOK ON OSZTALYTANULOK.TANULOID = T_TANULOERTEKELES.C_TANULOID
WHERE T_TANULOERTEKELES.C_INTEZMENYID = @pIntezmenyId AND T_OSZTALYZATERTEKELES.TOROLT = 'F' AND T_TANULOERTEKELES.C_TANEVID = @pTanevId AND C_ERTEKELESTIPUSA = @pErtekelestipusaId AND (T_TANTARGY.C_FOTARGYE = 'T' OR C_ALTANTARGYKENTNYOMTATVANYBAN = 'T' )
);
-- TANTÁRGYAK (TANTÁRGYFELOSZTÁS, ÉRTÉKELÉS)
SELECT DISTINCT C_TANTARGYID, TANTARGY_NEV, TARGYKATEGORIA_NEV, TARGYKATEGORIA_SORSZAM, C_FOTARGYE, C_ALTANTARGYKENTNYOMTATVANYBAN
FROM (
SELECT DISTINCT C_TANTARGYID, T_TANTARGY.C_NEVNYOMTATVANYBAN AS TANTARGY_NEV, T_DICTIONARYITEMBASE.C_NAME AS TARGYKATEGORIA_NEV, T_DICTIONARYITEMBASE.C_VALUE AS TARGYKATEGORIA_SORSZAM, T_TANTARGY.C_FOTARGYE, T_TANTARGY.C_ALTANTARGYKENTNYOMTATVANYBAN
FROM T_FOGLALKOZAS
INNER JOIN @aktualisOsztalyCsoportok AS OSZTALYCSOPORT ON OSZTALYCSOPORT.OSZTALYCSOPORTID = T_FOGLALKOZAS.C_OSZTALYCSOPORTID
INNER JOIN T_TANTARGY ON T_TANTARGY.ID = T_FOGLALKOZAS.C_TANTARGYID AND T_TANTARGY.C_TANEVID = T_FOGLALKOZAS.C_TANEVID
LEFT JOIN T_TARGYKATEGORIATIPUS ON T_TARGYKATEGORIATIPUS.ID = T_TANTARGY.C_TARGYKATEGORIA
LEFT JOIN T_DICTIONARYITEMBASE ON T_DICTIONARYITEMBASE.ID = T_TARGYKATEGORIATIPUS.ID
WHERE T_FOGLALKOZAS.TOROLT = 'F' AND (T_TANTARGY.C_FOTARGYE = 'T' OR C_ALTANTARGYKENTNYOMTATVANYBAN = 'T')
UNION
SELECT DISTINCT C_TANTARGYID, TANTARGY_NEV, TARGYKATEGORIA_NEV, TARGYKATEGORIA_SORSZAM, T_TANTARGY_C_FOTARGYE AS C_FOTARGYE, T_TANTARGY_C_ALTANTARGYKENTNYOMTATVANYBAN AS C_ALTANTARGYKENTNYOMTATVANYBAN
FROM @szurtErtekeles
) AS TANTARGYAK
ORDER BY TARGYKATEGORIA_SORSZAM, TANTARGY_NEV;
SELECT * FROM @szurtErtekeles;
SELECT T_TANULOERTEKELES.ID, C_TANULOID, C_MAGATARTAS, C_VALUE_M, C_NAME_M, C_SZORGALOM, C_VALUE_SZ, C_NAME_SZ, T_TANULOERTEKELES.C_ERTEKELESSZOVEG, C_ERTEKELESDATUM, T_OSZTALYFONOKIERTEKELES.TOROLT
FROM T_OSZTALYFONOKIERTEKELES
INNER JOIN T_TANULOERTEKELES ON T_TANULOERTEKELES.ID = T_OSZTALYFONOKIERTEKELES.ID
INNER JOIN (SELECT DISTINCT ID AS ID_SZ, C_VALUE AS C_VALUE_SZ, C_NAME AS C_NAME_SZ FROM T_DICTIONARYITEMBASE) AS T_DICTIONARYITEMBASE_SZ ON T_DICTIONARYITEMBASE_SZ.ID_SZ = T_OSZTALYFONOKIERTEKELES.C_SZORGALOM
INNER JOIN (SELECT DISTINCT ID AS ID_M, C_VALUE AS C_VALUE_M, C_NAME AS C_NAME_M FROM T_DICTIONARYITEMBASE) AS T_DICTIONARYITEMBASE_M ON T_DICTIONARYITEMBASE_M.ID_M = T_OSZTALYFONOKIERTEKELES.C_MAGATARTAS
INNER JOIN @osztalyTanulok AS OSZTALYTANULOK ON OSZTALYTANULOK.TANULOID = T_TANULOERTEKELES.C_TANULOID
WHERE T_TANULOERTEKELES.C_INTEZMENYID = @pIntezmenyId AND T_OSZTALYFONOKIERTEKELES.TOROLT = 'F' AND T_TANULOERTEKELES.C_TANEVID = @pTanevId AND C_ERTEKELESTIPUSA = @pErtekelestipusaId
--MULASZTÁS
INSERT INTO @szurtMulasztas (TIPUS_CHAR, C_TIPUS, C_IGAZOLT, C_TANULOID, C_GYAKORLATI, KESESPERC, MULASZTASOK_SZAMA) (
SELECT CASE WHEN C_TIPUS = @pMulasztasTipusIdKeses THEN 'K' ELSE 'H' END AS TIPUS_CHAR, C_TIPUS, C_IGAZOLT, C_ORATANULOIID, C_GYAKORLATI, SUM(C_KESESPERCBEN) AS KESESPERC, COUNT(T_TANULOMULASZTAS.ID) AS MULASZTASOK_SZAMA
FROM T_TANULOMULASZTAS
INNER JOIN @osztalyTanulok AS OSZTALYTANULOK ON OSZTALYTANULOK.TANULOID = T_TANULOMULASZTAS.C_ORATANULOIID
INNER JOIN T_TANITASIORA ON T_TANITASIORA.ID = T_TANULOMULASZTAS.C_TANITASIORAKID
INNER JOIN T_TANTARGY ON T_TANTARGY.ID = T_TANITASIORA.C_TANTARGYID AND T_TANTARGY.C_TANEVID = T_TANITASIORA.C_TANEVID
INNER JOIN T_TANULOCSOPORT ON T_TANITASIORA.C_OSZTALYCSOPORTID = T_TANULOCSOPORT.C_OSZTALYCSOPORTID AND T_TANULOMULASZTAS.C_ORATANULOIID = T_TANULOCSOPORT.C_TANULOID
AND T_TANITASIORA.C_DATUM >= T_TANULOCSOPORT.C_BELEPESDATUM AND (T_TANITASIORA.C_DATUM < T_TANULOCSOPORT.C_KILEPESDATUM OR T_TANULOCSOPORT.C_KILEPESDATUM IS NULL)
INNER JOIN @osztalyoktanoraicsoportok AS OSZTALYOKTANORAICSOPORTOK ON T_TANITASIORA.C_OSZTALYCSOPORTID = OSZTALYOKTANORAICSOPORTOK.OSZTALYCSOPORTID
WHERE T_TANULOMULASZTAS.C_INTEZMENYID = @pIntezmenyId AND T_TANULOMULASZTAS.TOROLT='F' AND T_TANITASIORA.TOROLT = 'F' AND T_TANITASIORA.C_DATUM BETWEEN @idoszakEleje AND @idoszakVege
AND C_IGAZOLT IS NOT NULL AND T_TANULOMULASZTAS.C_TANEVID=@pTanevId AND T_TANULOMULASZTAS.C_TIPUS IN (@pMulasztasTipusIdKeses, @pMulasztasTipusIdHianyzas) AND (C_IGAZOLASTIPUSA IS NULL OR C_IGAZOLASTIPUSA NOT IN (@pNemMulasztaIgazolasTipusIds))
GROUP BY C_TIPUS, C_IGAZOLT, C_ORATANULOIID, C_GYAKORLATI
);
IF @pElmeletgyakorlat=0
BEGIN
SELECT TIPUS_CHAR, C_TIPUS, C_IGAZOLT, C_TANULOID, SUM(KESESPERC) AS KESESPERC, SUM(KESESPERC)/45 AS KESESORA, SUM(MULASZTASOK_SZAMA) AS MULASZTASOK_SZAMA
FROM @szurtMulasztas
GROUP BY TIPUS_CHAR, C_TIPUS, C_IGAZOLT, C_TANULOID
ORDER BY C_TANULOID, C_TIPUS DESC, C_IGAZOLT DESC;
SELECT C_IGAZOLT, C_TANULOID, SUM(MULASZTASOK_SZAMA) AS MULASZTASOK_SZAMA
FROM (
SELECT TIPUS_CHAR, C_TIPUS, C_IGAZOLT, C_TANULOID, SUM(KESESPERC)/45 AS MULASZTASOK_SZAMA
FROM @szurtMulasztas
WHERE TIPUS_CHAR = 'K'
GROUP BY TIPUS_CHAR, C_TIPUS, C_IGAZOLT, C_TANULOID
UNION ALL
SELECT TIPUS_CHAR, C_TIPUS, C_IGAZOLT, C_TANULOID, SUM(MULASZTASOK_SZAMA) AS MULASZTASOK_SZAMA
FROM @szurtMulasztas
WHERE TIPUS_CHAR = 'H'
GROUP BY TIPUS_CHAR, C_TIPUS, C_IGAZOLT, C_TANULOID
) AS KM
GROUP BY C_IGAZOLT, C_TANULOID
ORDER BY C_TANULOID, C_IGAZOLT DESC;
END
ELSE
BEGIN
SELECT TIPUS_CHAR, C_TIPUS, C_IGAZOLT, C_TANULOID, KESESPERC, KESESPERC/(CASE WHEN C_GYAKORLATI = 'T' THEN 60 ELSE 45 END) AS KESESORA, MULASZTASOK_SZAMA, C_GYAKORLATI
FROM @szurtMulasztas
ORDER BY C_TANULOID, C_TIPUS DESC, C_IGAZOLT DESC;
SELECT C_IGAZOLT, C_TANULOID, SUM(MULASZTASOK_SZAMA) AS MULASZTASOK_SZAMA, C_GYAKORLATI
FROM (
SELECT TIPUS_CHAR, C_TIPUS, C_IGAZOLT, C_TANULOID, KESESPERC/(CASE WHEN C_GYAKORLATI = 'T' THEN 60 ELSE 45 END) AS MULASZTASOK_SZAMA, C_GYAKORLATI
FROM @szurtMulasztas
WHERE TIPUS_CHAR = 'K'
UNION ALL
SELECT TIPUS_CHAR, C_TIPUS, C_IGAZOLT, C_TANULOID, MULASZTASOK_SZAMA, C_GYAKORLATI
FROM @szurtMulasztas
WHERE TIPUS_CHAR = 'H'
) AS KM
GROUP BY C_IGAZOLT, C_TANULOID, C_GYAKORLATI
ORDER BY C_TANULOID, C_IGAZOLT DESC;
END
END