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

View File

@@ -0,0 +1,175 @@
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF OBJECT_ID('fnGetDokumentumErtekelesekOsztalyonkent') IS NOT NULL
BEGIN
DROP FUNCTION fnGetDokumentumErtekelesekOsztalyonkent
END
GO
CREATE FUNCTION fnGetDokumentumErtekelesekOsztalyonkent (@tanevId INT, @osztalyCsoportId INT, @ertekelesTipusa INT = NULL, @csakTanorai BIT = 1, @csakKivlasztottOsztalyCsoport BIT = 0, @atsoroltTanuloErtekelesek INT = 0)
RETURNS @retTanuloErtekeles TABLE
(
ErtekelesId INT primary key NOT NULL,
Datum DATE,
TipusId INT,
ErtekelesSzoveg NVARCHAR(MAX),
ErtekelesSzovegRovidNev NVARCHAR(3),
ErtekelesOsztalyzatId INT,
ErtekelesOsztalyzatValue INT,
ErtekelesOsztalyzatNev NVARCHAR(MAX),
ErtekelesSzazalek NVARCHAR(MAX),
MagatartasOsztalyzatId INT,
MagatartasOsztalyzatValue INT,
MagatartasOsztalyzatNev NVARCHAR(MAX),
MagatartasSzoveg NVARCHAR(MAX),
MagatartasSzovegRovidNev NVARCHAR(3),
MagatartasErtekId INT,
MagatartasErtek NVARCHAR(MAX),
MagatartasErtekOsztalyzatkent INT,
SzorgalomOsztalyzatId INT,
SzorgalomOsztalyzatValue INT,
SzorgalomOsztalyzatNev NVARCHAR(MAX),
SzorgalomSzoveg NVARCHAR(MAX),
SzorgalomSzovegRovidNev NVARCHAR(3),
SzorgalomErtekId INT,
SzorgalomErtek NVARCHAR(MAX),
SzorgalomErtekOsztalyzatkent INT,
TanuloId INT,
OsztalyCsoportId INT,
TantargyId INT,
TantargyNevZarojellel NVARCHAR(MAX),
TantargyNevNyomtatvanyban NVARCHAR(MAX),
TantargyNev NVARCHAR(MAX),
TargyKategoriaId INT,
FotargyE CHAR(1),
Altantargy CHAR(1),
FotargyId INT,
ErtekelesTema NVARCHAR(MAX),
IsMagatartasSzorgalom CHAR(1),
Jeloles NVARCHAR(MAX),
JelolesAndErtekelesTema NVARCHAR(MAX)
)
AS
BEGIN
INSERT INTO @retTanuloErtekeles
SELECT
tanuloErtekeles.ID ErtekelesId
,tanuloErtekeles.C_DATUM Datum
,tanuloErtekeles.C_TIPUSID TipusId
,tanuloErtekeles.C_ERTEKELESSZOVEG ErtekelesSzoveg
,tanuloErtekeles.C_ERTEKELESSZOVEGROVIDNEV ErtekelesSzovegRovidNev
,tanuloErtekeles.C_ERTEKELESOSZTALYZATID ErtekelesOsztalyzatId
,ertekelesOsztalyzat.C_VALUE ErtekelesOsztalyzatValue
,ertekelesOsztalyzat.C_NAME ErtekelesOsztalyzatNev
,IIF(tanuloErtekeles.C_ERTEKELESSZAZALEK IS NOT NULL --
,CONVERT(NVARCHAR(3), tanuloErtekeles.C_ERTEKELESSZAZALEK) + '%' --
,NULL) ErtekelesSzazalek
,tanuloErtekeles.C_MAGATARTASOSZTALYZATID MagatartasOsztalyzatId
,magatartasOsztalyzat.C_VALUE MagatartasOsztalyzatValue
,magatartasOsztalyzat.C_NAME MagatartasOsztalyzatNev
,tanuloErtekeles.C_MAGATARTASSZOVEG MagatartasSzoveg
,tanuloErtekeles.C_MAGATARTASSZOVEGROVIDNEV MagatartasSzovegRovidNev
,tanuloErtekeles.C_MAGATARTASERTEKID MagatartasErtekId
,magatartasErtek.C_NAME MagatartasErtek
,magatartasErtek.C_VALUE + 1 MagatartasErtekOsztalyzatkent
,tanuloErtekeles.C_SZORGALOMOSZTALYZATID SzorgalomOsztalyzatId
,szorgalomOsztalyzat.C_VALUE SzorgalomOsztalyzatValue
,szorgalomOsztalyzat.C_NAME SzorgalomOsztalyzatNev
,tanuloErtekeles.C_SZORGALOMSZOVEG SzorgalomSzoveg
,tanuloErtekeles.C_SZORGALOMSZOVEGROVIDNEV SzorgalomSzovegRovidNev
,tanuloErtekeles.C_SZORGALOMERTEKID SzorgalomErtekId
,szorgalomErtek.C_NAME SzorgalomErtek
,szorgalomErtek.C_VALUE + 1 SzorgalomErtekOsztalyzatkent
,tanuloErtekeles.C_TANULOID TanuloId
,tanuloErtekeles.C_OSZTALYCSOPORTID OsztalyCsoportId
,tanuloErtekeles.C_TANTARGYID TantargyId
,IIF(tantargy.C_NEV <> tantargy.C_NEVNYOMTATVANYBAN AND tantargy.C_NEVNYOMTATVANYBAN IS NOT NULL --
,C_NEVNYOMTATVANYBAN + ' (' + tantargy.C_NEV + ')' --
,tantargy.C_NEV) TantargyNevZarojellel
,tantargy.C_NEVNYOMTATVANYBAN TantargyNevNyomtatvanyban
,tantargy.C_NEV TantargyNev
,tantargy.C_TARGYKATEGORIA TargyKategoriaId
,tantargy.C_FOTARGYE FotargyE
,tantargy.C_ALTANTARGYKENTNYOMTATVANYBAN Altantargy
,tantargy.C_FOTARGYID FotargyId
,tanuloErtekeles.C_ERTEKELESTEMA ErtekelesTema
,tanuloErtekeles.C_ISMAGATARTASSZORGALOM IsMagatartasSzorgalom
,IIF( --
tanuloErtekeles.C_ERTEKELESTEMA IS NOT NULL AND tanuloErtekeles.C_TIPUSID IN (1519, 1520), '<i>(' + CAST(CHAR(ROW_NUMBER() OVER (PARTITION BY tanuloErtekeles.C_TANULOID, tanuloErtekeles.C_TIPUSID, IIF(tanuloErtekeles.C_ERTEKELESTEMA IS NOT NULL, 1, 0) ORDER BY tanuloErtekeles.C_DATUM) + 96) AS NVARCHAR(10)) + ')</i>', ''
) Jeloles
,IIF( --
tanuloErtekeles.C_ERTEKELESTEMA IS NOT NULL AND tanuloErtekeles.C_TIPUSID IN (1519, 1520), '<i>(' + CAST(CHAR(ROW_NUMBER() OVER (PARTITION BY tanuloErtekeles.C_TANULOID, tanuloErtekeles.C_TIPUSID, IIF(tanuloErtekeles.C_ERTEKELESTEMA IS NOT NULL, 1, 0) ORDER BY tanuloErtekeles.C_DATUM) + 96) AS NVARCHAR(10)) + ')</i>: ' + tanuloErtekeles.C_ERTEKELESTEMA, ''
) JelolesAndErtekelesTema
FROM T_TANULOERTEKELES_OSSZES tanuloErtekeles
INNER JOIN
fnGetDokumentumOsztalyokCsoportokTanuloi(@tanevId, @osztalyCsoportId, 'T') tanulo ON
tanulo.TanuloId = tanuloErtekeles.C_TANULOID
LEFT JOIN
T_TANTARGY_OSSZES tantargy ON
tantargy.Id = tanuloErtekeles.C_TANTARGYID
AND (tantargy.C_TARGYKATEGORIA <> 1248 OR tantargy.C_TARGYKATEGORIA IS NULL)
LEFT JOIN
T_DICTIONARYITEMBASE_OSSZES ertekelesOsztalyzat ON
ertekelesOsztalyzat.ID = tanuloErtekeles.C_ERTEKELESOSZTALYZATID
AND ertekelesOsztalyzat.C_TANEVID = @tanevId
AND ertekelesOsztalyzat.C_TYPE LIKE 'OsztalyzatTipus'
LEFT JOIN
T_DICTIONARYITEMBASE_OSSZES magatartasOsztalyzat ON
magatartasOsztalyzat.ID = tanuloErtekeles.C_MAGATARTASOSZTALYZATID
AND magatartasOsztalyzat.C_TANEVID = @tanevId
AND magatartasOsztalyzat.C_TYPE LIKE 'OsztalyzatTipus'
LEFT JOIN
T_DICTIONARYITEMBASE_OSSZES szorgalomOsztalyzat ON
szorgalomOsztalyzat.ID = tanuloErtekeles.C_SZORGALOMOSZTALYZATID
AND szorgalomOsztalyzat.C_TANEVID = @tanevId
AND szorgalomOsztalyzat.C_TYPE LIKE 'OsztalyzatTipus'
LEFT JOIN
T_DICTIONARYITEMBASE_OSSZES magatartasErtek ON
magatartasErtek.ID = tanuloErtekeles.C_MAGATARTASERTEKID
AND magatartasErtek.C_TANEVID = @tanevId
AND magatartasErtek.C_TYPE LIKE 'MagatartasErtekelesTipus'
LEFT JOIN
T_DICTIONARYITEMBASE_OSSZES szorgalomErtek ON
szorgalomErtek.ID = tanuloErtekeles.C_SZORGALOMERTEKID
AND szorgalomErtek.C_TANEVID = @tanevId
AND szorgalomErtek.C_TYPE LIKE 'SzorgalomErtekelesTipus'
INNER JOIN
T_OSZTALYCSOPORT_OSSZES osztalyCsoport ON
osztalyCsoport.ID = tanuloErtekeles.C_OSZTALYCSOPORTID AND osztalyCsoport.TOROLT = 'F'
LEFT JOIN
T_CSOPORT_OSSZES csoport ON
csoport.ID = tanuloErtekeles.C_OSZTALYCSOPORTID
LEFT JOIN
T_OSZTALY_OSSZES osztaly ON
osztaly.ID = tanuloErtekeles.C_OSZTALYCSOPORTID
WHERE
tanuloErtekeles.Torolt = 'F'
AND (@atsoroltTanuloErtekelesek > 0 OR (tanuloErtekeles.C_DATUM >= BelepesDatum AND C_OSZTALYCSOPORTID IN (SELECT ID FROM fnGetDokumentumKapcsolodoOsztalycsoportok(@osztalyCsoportId, @tanevId))))
AND (tanuloErtekeles.C_DATUM <= KilepesDatum OR KilepesDatum IS NULL)
AND (@ertekelesTipusa IS NULL OR C_TIPUSID = @ertekelesTipusa)
AND (@csakKivlasztottOsztalyCsoport = 0 OR C_OSZTALYCSOPORTID = @osztalyCsoportId)
AND (@csakTanorai = 0 OR osztaly.ID IS NOT NULL OR (csoport.ID IS NOT NULL AND csoport.C_TIPUSA IN (SELECT ID FROM fnGetTanoraiCeluCsoportTipusok(@tanevId))))
IF @atsoroltTanuloErtekelesek = 1
BEGIN
DECLARE @osztalyTantargyak TABLE (TantargyId INT)
INSERT INTO @osztalyTantargyak
SELECT DISTINCT TantargyId FROM @retTanuloErtekeles
WHERE OsztalyCsoportId IN (SELECT ID FROM fnGetDokumentumKapcsolodoOsztalycsoportok(@osztalyCsoportId, @tanevId))
UNION
SELECT DISTINCT C_TANTARGYID
FROM T_FOGLALKOZAS_OSSZES
INNER JOIN fnGetDokumentumKapcsolodoOsztalycsoportok(@osztalyCsoportId, @tanevId) AS OSZTALYCSOPORT ON OSZTALYCSOPORT.ID = T_FOGLALKOZAS_OSSZES.C_OSZTALYCSOPORTID
WHERE T_FOGLALKOZAS_OSSZES.TOROLT = 'F'
DELETE FROM @retTanuloErtekeles
WHERE ErtekelesId NOT IN (
SELECT ErtekelesId FROM @retTanuloErtekeles
WHERE TantargyId IS NULL OR TantargyId IN (SELECT TantargyId FROM @osztalyTantargyak)
)
END
RETURN
END;
GO

View File

@@ -0,0 +1,46 @@
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF OBJECT_ID('fnGetDokumentumMulasztasokOsztalyonkentReszletes') IS NOT NULL
BEGIN
DROP FUNCTION fnGetDokumentumMulasztasokOsztalyonkentReszletes
END
GO
CREATE FUNCTION fnGetDokumentumMulasztasokOsztalyonkentReszletes (@tanevId INT, @osztalyCsoportId INT, @iskolaErdekuSzamit BIT, @csakKivlasztottOsztalyCsoport BIT = 0, @atsoroltTanuloMulasztas BIT = 1, @idoszakEleje DATE = NULL, @idoszakVege DATE = NULL)
RETURNS TABLE
RETURN (
SELECT
C_ORATANULOIID TanuloId
,C_OSZTALYCSOPORTID OsztalyCsoportId
,OsztalyCsoport.C_NEV OsztalyCsoportNev
,C_TIPUS Tipusa
,C_IGAZOLT Igazolt
,C_IGAZOLASTIPUSA IgazolasTipusa
,C_KESESPERCBEN KesesPercben
,C_DATUM Datum
,C_ORASZAM Oraszam
,C_TANTARGYID TantargyId
,ISNULL(t.C_NEVNYOMTATVANYBAN, t.C_NEV) TantargyNev
,NaptariHetek.C_HETSORSZAMA HetSorszama
,C_GYAKORLATI Gyakorlati
FROM T_TANULOMULASZTAS_OSSZES TanuloMulasztas
INNER JOIN fnGetDokumentumOsztalyokCsoportokTanuloi(@tanevId, @osztalyCsoportId, 'T') AS TANULO ON TANULO.TanuloId = TanuloMulasztas.C_ORATANULOIID
INNER JOIN T_TANITASIORA_OSSZES TanitasiOra ON TanitasiOra.ID = TanuloMulasztas.C_TANITASIORAKID
INNER JOIN T_OSZTALYCSOPORT_OSSZES OsztalyCsoport ON OsztalyCsoport.ID = TanitasiOra.C_OSZTALYCSOPORTID
INNER JOIN T_TANTARGY_OSSZES t on t.ID = TanitasiOra.C_TANTARGYID
INNER JOIN T_NAPTARIHET_OSSZES NaptariHetek ON TanitasiOra.C_DATUM BETWEEN NaptariHetek.C_HETKEZDONAPJA AND NaptariHetek.C_HETUTOLSONAPJA
WHERE
TanuloMulasztas.C_TIPUS IN (1499, 1500)
AND TanitasiOra.C_OSZTALYCSOPORTID IN (SELECT Id FROM fnGetDokumentumOsztalyVagyTanoraiCsoport(@tanevId))
AND (@iskolaErdekuSzamit = 1 OR (C_IGAZOLASTIPUSA IS NULL OR C_IGAZOLASTIPUSA <> 1533))
AND TanuloMulasztas.TOROLT = 'F'
AND NaptariHetek.C_TANEVID = @tanevId
AND (@atsoroltTanuloMulasztas = 1 OR TanitasiOra.C_DATUM >= BelepesDatum )
AND (TanitasiOra.C_DATUM <= KilepesDatum OR KilepesDatum IS NULL)
AND (@csakKivlasztottOsztalyCsoport = 0 OR C_OSZTALYCSOPORTID = @osztalyCsoportId)
AND (@idoszakEleje IS NULL OR C_DATUM >= @idoszakEleje)
AND (@idoszakVege IS NULL OR C_DATUM <= @idoszakVege)
)

View File

@@ -0,0 +1,148 @@
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF OBJECT_ID('[dbo].[sp_GetPedagogusAltalAdottErtekelesek]') IS NOT NULL
BEGIN
DROP PROCEDURE [dbo].[sp_GetPedagogusAltalAdottErtekelesek]
END
GO
CREATE PROCEDURE [dbo].[sp_GetPedagogusAltalAdottErtekelesek]
@pTanarId INT,
@pEvkozi INT,
@pFelevi INT,
@pEvvegi INT,
@pTanevId INT,
@pFelevVegeNaptipusId INT,
@pErtekelesmodSuly BIT = 0
AS
BEGIN
DECLARE @osztalyId INT = 0;
DECLARE @tantargyId INT = 0;
DECLARE @rowId INT = 0;
DECLARE @maxCharNumErtekelesSzoveg INT = 20;
SET NOCOUNT ON;
DECLARE @felevVege DATE = (
SELECT COALESCE(
(SELECT C_DATUM FROM T_TANEVRENDJE WHERE C_TANEVID = @pTanevId AND C_NAPTIPUSA = @pFelevVegeNaptipusId),
GETDATE()
)
);
SELECT T_TANARIATLAGSULY.C_ERTEKELESMODID AS ID, T_DICTIONARYITEMBASE.C_NAME, T_TANARIATLAGSULY.C_ERTEKELESMODID, C_SULY, CAST(C_SULY AS NVARCHAR) + '%' AS C_SULYSZAZALEK, ' (' + NCHAR(97 + ROW_NUMBER() OVER(ORDER BY T_DICTIONARYITEMBASE.C_ORDER ASC) - 1) + ')' AS Row#
INTO #tempTanariAtlagsuly
FROM T_TANARIATLAGSULY
INNER JOIN T_ERTEKELESMOD ON T_ERTEKELESMOD.ID = T_TANARIATLAGSULY.C_ERTEKELESMODID
LEFT JOIN T_DICTIONARYITEMBASE ON T_DICTIONARYITEMBASE.ID = T_ERTEKELESMOD.ID
WHERE T_TANARIATLAGSULY.TOROLT = 'F' AND T_TANARIATLAGSULY.C_TANEVID = @pTanevId AND T_DICTIONARYITEMBASE.TOROLT = 'F' AND T_DICTIONARYITEMBASE.C_TANEVID = @pTanevId
ORDER BY T_DICTIONARYITEMBASE.C_ORDER;
SELECT DISTINCT ROW_NUMBER ( ) OVER (ORDER BY TARGYKATEGSORREND, EVFOLYAMSORREND, OSZTALYCSOPORTNEV, TARGYNEV) AS SORSZAM, TANTARGYID, OSZTALYID, CAST(ROW_NUMBER ( ) OVER (ORDER BY TARGYKATEGSORREND, EVFOLYAMSORREND, OSZTALYCSOPORTNEV, TARGYNEV) AS NVARCHAR(10)) + '. ' + NEV AS NEV
INTO #tempFoglalkozasok
FROM (
SELECT DISTINCT T_TANTARGY_OSSZES.ID AS TANTARGYID, T_OSZTALYCSOPORT_OSSZES.ID AS OSZTALYID,
TARGYKATEG.C_ORDER AS TARGYKATEGSORREND, EVFOLYAM.C_ORDER AS EVFOLYAMSORREND,
T_OSZTALYCSOPORT_OSSZES.C_NEV AS OSZTALYCSOPORTNEV, T_TANTARGY_OSSZES.C_NEV AS TARGYNEV, T_OSZTALYCSOPORT_OSSZES.C_NEV + '-' + T_TANTARGY_OSSZES.C_NEV AS NEV
FROM T_FOGLALKOZAS_OSSZES
INNER JOIN T_OSZTALYCSOPORT_OSSZES ON T_OSZTALYCSOPORT_OSSZES.ID = T_FOGLALKOZAS_OSSZES.C_OSZTALYCSOPORTID
INNER JOIN T_TANTARGY_OSSZES ON T_TANTARGY_OSSZES.ID = T_FOGLALKOZAS_OSSZES.C_TANTARGYID
LEFT JOIN T_DICTIONARYITEMBASE AS TARGYKATEG ON TARGYKATEG.ID = T_TANTARGY_OSSZES.C_TARGYKATEGORIA AND TARGYKATEG.C_TANEVID = T_TANTARGY_OSSZES.C_TANEVID
LEFT JOIN T_DICTIONARYITEMBASE AS EVFOLYAM ON EVFOLYAM.ID = T_OSZTALYCSOPORT_OSSZES.C_EVFOLYAMTIPUSA AND EVFOLYAM.C_TANEVID = T_OSZTALYCSOPORT_OSSZES.C_TANEVID
WHERE T_FOGLALKOZAS_OSSZES.TOROLT = 'F' AND T_TANTARGY_OSSZES.TOROLT = 'F' AND T_OSZTALYCSOPORT_OSSZES.TOROLT = 'F' AND
T_FOGLALKOZAS_OSSZES.C_TANARID = @pTanarId AND T_FOGLALKOZAS_OSSZES.C_TANEVID = @pTanevId
UNION
SELECT DISTINCT T_TANTARGY_OSSZES.ID AS TANTARGYID, T_OSZTALYCSOPORT_OSSZES.ID AS OSZTALYID,
TARGYKATEG.C_ORDER AS TARGYKATEGSORREND, EVFOLYAM.C_ORDER AS EVFOLYAMSORREND,
T_OSZTALYCSOPORT_OSSZES.C_NEV AS OSZTALYCSOPORTNEV, T_TANTARGY_OSSZES.C_NEV AS TARGYNEV, T_OSZTALYCSOPORT_OSSZES.C_NEV + '-' + T_TANTARGY_OSSZES.C_NEV AS NEV
FROM T_TANULOERTEKELES_OSSZES
INNER JOIN T_OSZTALYCSOPORT_OSSZES ON T_OSZTALYCSOPORT_OSSZES.ID = T_TANULOERTEKELES_OSSZES.C_OSZTALYCSOPORTID
INNER JOIN T_TANTARGY_OSSZES ON T_TANTARGY_OSSZES.ID = T_TANULOERTEKELES_OSSZES.C_TANTARGYID
LEFT JOIN T_DICTIONARYITEMBASE AS TARGYKATEG ON TARGYKATEG.ID = T_TANTARGY_OSSZES.C_TARGYKATEGORIA AND TARGYKATEG.C_TANEVID = T_TANTARGY_OSSZES.C_TANEVID
LEFT JOIN T_DICTIONARYITEMBASE AS EVFOLYAM ON EVFOLYAM.ID = T_OSZTALYCSOPORT_OSSZES.C_EVFOLYAMTIPUSA AND EVFOLYAM.C_TANEVID = T_OSZTALYCSOPORT_OSSZES.C_TANEVID
WHERE T_TANULOERTEKELES_OSSZES.TOROLT = 'F' AND T_TANTARGY_OSSZES.TOROLT = 'F' AND T_OSZTALYCSOPORT_OSSZES.TOROLT = 'F' AND
T_TANULOERTEKELES_OSSZES.C_ERTEKELOID = @pTanarId AND T_TANULOERTEKELES_OSSZES.C_TANEVID = @pTanevId
) AS FOGLALKOZASOK
ORDER BY SORSZAM;
DECLARE @tempErtekeles TABLE (ID INT, TANULOID INT, NEV NVARCHAR(255), C_BELEPESDATUM NVARCHAR(15), C_KILEPESDATUM NVARCHAR(15), OSZTID INT, ERTEKELESDATUMA NVARCHAR(255), ERTEKELESTIPUSA INT, ERTEKELESMODJA INT, ERTEKELES NVARCHAR(MAX), OSZTALYZAT INT, HONAP INT);
SELECT * FROM #tempFoglalkozasok
ORDER BY SORSZAM;
WHILE (1 = 1)
BEGIN
DELETE FROM @tempErtekeles;
SELECT TOP 1 @rowId = SORSZAM, @tantargyId = TANTARGYID, @osztalyId = OSZTALYID
FROM #tempFoglalkozasok
WHERE SORSZAM > @rowId
ORDER BY SORSZAM;
IF @@ROWCOUNT = 0
BEGIN
BREAK;
END
INSERT INTO @tempErtekeles
SELECT *
FROM (
SELECT DISTINCT T_TANULOERTEKELES_OSSZES.ID, T_TANULOCSOPORT_OSSZES.C_TANULOID AS TANULOID, T_FELHASZNALO_OSSZES.C_NYOMTATASINEV AS NEV, COALESCE(FORMAT(C_BELEPESDATUM, 'yyyy. MM. dd'), '') AS C_BELEPESDATUM, COALESCE(FORMAT(C_KILEPESDATUM, 'yyyy. MM. dd'), '') AS C_KILEPESDATUM,
T_TANULOCSOPORT_OSSZES.C_OSZTALYCSOPORTID AS OSZTID,
T_TANULOERTEKELES_OSSZES.C_DATUM AS ERTEKELESDATUMA, T_TANULOERTEKELES_OSSZES.C_TIPUSID AS ERTEKELESTIPUSA, T_TANULOERTEKELES_OSSZES.C_ERTEKELESMODID AS ERTEKELESMODJA,
(
(CASE WHEN C_TIPUSID NOT IN (@pEvkozi, @pFelevi, @pEvvegi) THEN '{' ELSE '' END) +
COALESCE(CONVERT(NVARCHAR, TDIB_JEGY.C_VALUE), (CASE WHEN C_ERTEKELESSZOVEG IS NOT NULL THEN '[' + CASE WHEN LEN(C_ERTEKELESSZOVEG) > @maxCharNumErtekelesSzoveg THEN STUFF(C_ERTEKELESSZOVEG, @maxCharNumErtekelesSzoveg, 1000000, '...') ELSE C_ERTEKELESSZOVEG END + ']' ELSE NULL END), CONVERT(NVARCHAR, C_ERTEKELESSZAZALEK) + '%') +
(CASE WHEN C_TIPUSID NOT IN (@pEvkozi, @pFelevi, @pEvvegi) THEN '}' ELSE '' END) +
(CASE WHEN @pErtekelesmodSuly = 1 AND C_TIPUSID IN (@pEvkozi) AND ISNULL(TANARIATLAGSULY.C_SULY, 100) <> 100 THEN TANARIATLAGSULY.Row# ELSE '' END)
) AS ERTEKELES,
TDIB_JEGY.C_VALUE AS OSZTALYZAT, (CASE WHEN MONTH(C_DATUM) >= 9 THEN 100 WHEN MONTH(C_DATUM) > 1 AND MONTH(C_DATUM) < 9 THEN 200 ELSE (CASE WHEN C_DATUM > @felevVege THEN 200 ELSE 100 END) END) + MONTH(C_DATUM) AS HONAP
FROM T_TANULOCSOPORT_OSSZES
INNER JOIN T_FELHASZNALO_OSSZES ON T_FELHASZNALO_OSSZES.ID = T_TANULOCSOPORT_OSSZES.C_TANULOID
LEFT JOIN T_TANULOERTEKELES_OSSZES ON T_TANULOERTEKELES_OSSZES.C_TANTARGYID = @tantargyId AND T_TANULOERTEKELES_OSSZES.C_TANULOID = T_TANULOCSOPORT_OSSZES.C_TANULOID AND T_TANULOERTEKELES_OSSZES.TOROLT = 'F' AND T_TANULOERTEKELES_OSSZES.C_TANEVID = @pTanevId AND T_TANULOERTEKELES_OSSZES.C_ERTEKELOID = @pTanarId
LEFT JOIN T_DICTIONARYITEMBASE_OSSZES AS TDIB_JEGY ON TDIB_JEGY.ID = T_TANULOERTEKELES_OSSZES.C_ERTEKELESOSZTALYZATID AND TDIB_JEGY.TOROLT = 'F' AND TDIB_JEGY.C_TANEVID = @pTanevId
LEFT JOIN #tempTanariAtlagsuly AS TANARIATLAGSULY on TANARIATLAGSULY.C_ERTEKELESMODID = T_TANULOERTEKELES_OSSZES.C_ERTEKELESMODID
WHERE T_TANULOCSOPORT_OSSZES.C_TANEVID = @pTanevId AND T_TANULOCSOPORT_OSSZES.C_OSZTALYCSOPORTID = @osztalyId AND T_TANULOCSOPORT_OSSZES.TOROLT = 'F'
) AS tempErtekeles;
SELECT CAST(ROW_NUMBER ( ) OVER (ORDER BY NEV) AS NVARCHAR(10)) + '.' AS "#", RESULT.*
FROM (
SELECT PIVOTERTEKEL.TANULOID AS ID, NEV AS "Név", BESOROLAS AS "Csoport tagja",
[109] AS Szeptember, [110] AS Október, [111] AS November, [112] AS December, [101] AS "Január / I.", FELEV.JEGY AS [I. félév$@8], [201] AS "Január / II.", [202] AS Február, [203] AS Március, [204] AS Április, [205] AS Május, [206] AS Június,
EVVEGE.JEGY AS [II. félév$@9], ATLAG.SULYOZOTTATLAG AS "Átlag"
FROM (
SELECT DISTINCT T1.NEV, C_BELEPESDATUM + ' - ' + C_KILEPESDATUM AS BESOROLAS, STUFF (
(SELECT ', ' + ISNULL(T2.ERTEKELES, '')
FROM @tempErtekeles AS T2
WHERE T1.TANULOID = T2.TANULOID AND T1.HONAP = T2.HONAP AND T1.ERTEKELESTIPUSA NOT IN (@pFelevi, @pEvvegi) AND T2.ERTEKELESTIPUSA NOT IN (@pFelevi, @pEvvegi) -- = @pEvkozi--AND T1.ERTEKELESTIPUSA = @pEvkozi
ORDER BY ERTEKELESDATUMA
FOR XML PATH ('')
), 1, 2, '') AS ERTEKELESEK, T1.HONAP, T1.TANULOID
FROM @tempErtekeles AS T1
) AS ERDEMJEGYEK
PIVOT ( MAX(ERTEKELESEK) FOR HONAP IN ([109], [110], [111], [112], [101], [201], [202], [203], [204], [205], [206])) AS PIVOTERTEKEL
LEFT JOIN (
SELECT TANULOID, AVG(OSZTALYZAT) AS JEGY
FROM @tempErtekeles
WHERE ERTEKELESTIPUSA = @pFelevi
GROUP BY TANULOID
) AS FELEV ON PIVOTERTEKEL.TANULOID = FELEV.TANULOID
LEFT JOIN (
SELECT TANULOID, AVG(OSZTALYZAT) AS JEGY
FROM @tempErtekeles
WHERE ERTEKELESTIPUSA = @pEvvegi
GROUP BY TANULOID
) AS EVVEGE ON PIVOTERTEKEL.TANULOID = EVVEGE.TANULOID
LEFT JOIN (
SELECT TANULOID, ROUND(AVG(CAST(OSZTALYZAT AS FLOAT)), 2) AS ATLAG, ROUND(SUM(CAST(OSZTALYZAT AS FLOAT) * CAST(ISNULL(T_TANARIATLAGSULY.C_SULY, 100) AS FLOAT) / 100) / SUM(CAST(ISNULL(T_TANARIATLAGSULY.C_SULY, 100) AS FLOAT) / 100), 2) AS SULYOZOTTATLAG
FROM @tempErtekeles AS tempErtekeles
LEFT JOIN T_TANARIATLAGSULY on T_TANARIATLAGSULY.C_ERTEKELESMODID = tempErtekeles.ERTEKELESMODJA AND T_TANARIATLAGSULY.TOROLT = 'F' AND T_TANARIATLAGSULY.C_TANEVID = @pTanevId
WHERE ERTEKELESTIPUSA = @pEvkozi AND OSZTALYZAT IS NOT NULL
GROUP BY TANULOID
) AS ATLAG ON PIVOTERTEKEL.TANULOID = ATLAG.TANULOID
) AS RESULT
ORDER BY NEV;
END
SELECT ID, Row# AS "Jelmagyarázat", C_NAME AS "Értékelésmód", C_SULYSZAZALEK AS "Értékelés súlyozása"
FROM #tempTanariAtlagsuly
ORDER BY Row#;
IF OBJECT_ID('tempdb..#tempErtekeles') IS NOT NULL DROP TABLE #tempErtekeles
IF OBJECT_ID('tempdb..#tempFoglalkozasok') IS NOT NULL DROP TABLE #tempFoglalkozasok
IF OBJECT_ID('tempdb..#tempTanariAtlagsuly') IS NOT NULL DROP TABLE #tempTanariAtlagsuly
END
GO

View File

@@ -0,0 +1,196 @@
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
CREATE PROCEDURE [dbo].[sp_Nyomtatvany_Excel_IdoszakiOsztalyStatisztika]
@pTanevId INT,
@pOsztalyId INT,
@pIntezmenyId INT,
@pErtekelestipusaId INT,
@pLezaroNaptipusId INT,
@pMulasztasTipusIdKeses INT = 1499,
@pMulasztasTipusIdHianyzas INT = 1500,
@pTanevrendjeTanevKezdeteNaptipusId INT = 1394, --Tanévrendje első nap típus
@pTanoraiDicseretTipusId INT = 1536, -- Tanórai dicséret
@pFelszereleshianyTipusId INT = 6324, -- Felszereléshiány
@pHaziFeladatHianyTipusId INT = 6325, -- Házi feladat hiány
@pAtsoroltTanuloAdatok INT = 1,
@pElmeletgyakorlat BIT = 0
AS
BEGIN
SET NOCOUNT ON;
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), ERTEKELES_SZOVEG_MEGJEGYZES 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), C_OSZTALYCSOPORTID INT
);
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);
DECLARE @idoszakEleje DATE = (
SELECT ISNULL(
(SELECT TOP 1 C_DATUM
FROM T_TANEVRENDJE_OSSZES
LEFT JOIN T_OSZTALYCSOPORT_TANEVRENDJE ON T_TANEVRENDJE_OSSZES.ID = T_OSZTALYCSOPORT_TANEVRENDJE.C_TANEVRENDJEID
WHERE C_TANEVID = @pTanevId AND C_NAPTIPUSA = @pTanevrendjeTanevKezdeteNaptipusId AND TOROLT = 'F' AND (C_OSZTALYCSOPORTID IS NULL OR C_OSZTALYCSOPORTID = @pOsztalyId)
ORDER BY C_OSZTALYCSOPORTID DESC),
(SELECT TOP 1 C_ELSOTANITASINAP FROM T_TANEV_OSSZES WHERE ID = @pTanevId))
);
DECLARE @idoszakVege DATE = (
SELECT ISNULL(
(SELECT TOP 1 C_DATUM
FROM T_TANEVRENDJE_OSSZES
LEFT JOIN T_OSZTALYCSOPORT_TANEVRENDJE ON T_TANEVRENDJE_OSSZES.ID = T_OSZTALYCSOPORT_TANEVRENDJE.C_TANEVRENDJEID
WHERE C_TANEVID = @pTanevId AND C_NAPTIPUSA = @pLezaroNaptipusId AND TOROLT = 'F' AND (C_OSZTALYCSOPORTID IS NULL OR C_OSZTALYCSOPORTID = @pOsztalyId)
ORDER BY C_OSZTALYCSOPORTID DESC),
GETDATE())
);
IF @pAtsoroltTanuloAdatok = 0
BEGIN
INSERT INTO @aktualisOsztalyCsoportok (OSZTALYCSOPORTID)
SELECT ID
FROM fnGetDokumentumKapcsolodoOsztalycsoportok(@pOsztalyId, @pTanevId)
--WHERE (ID IN (SELECT ID FROM T_OSZTALY_OSSZES) OR ID IN (SELECT ID FROM T_CSOPORT_OSSZES WHERE C_TIPUSA IN (SELECT ID FROM fnGetTanoraiCeluCsoportTipusok(@pTanevId))));
END
ELSE IF @pAtsoroltTanuloAdatok = 1
BEGIN
INSERT INTO @aktualisOsztalyCsoportok (OSZTALYCSOPORTID)
SELECT ID
FROM fnGetDokumentumKapcsolodoOsztalycsoportok(@pOsztalyId, @pTanevId)
--WHERE (ID IN (SELECT ID FROM T_OSZTALY_OSSZES) OR ID IN (SELECT ID FROM T_CSOPORT_OSSZES WHERE C_TIPUSA IN (SELECT ID FROM fnGetTanoraiCeluCsoportTipusok(@pTanevId))));
END
ELSE
BEGIN
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 (SELECT ID FROM fnGetTanoraiCeluCsoportTipusok(@pTanevId))));
END
-- 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_OSSZES.ID, C_NEV, C_VEGZOSEVFOLYAM, T_FELHASZNALO_OSSZES.C_NYOMTATASINEV, C_OSZTALYNAPLOMEGNYITASA, C_OSZTALYNAPLOZARASA, C_OSZTALYFONOKID
FROM T_OSZTALY_OSSZES
INNER JOIN T_OSZTALYCSOPORT_OSSZES ON T_OSZTALYCSOPORT_OSSZES.ID = T_OSZTALY_OSSZES.ID
LEFT JOIN T_FELHASZNALO_OSSZES ON T_OSZTALY_OSSZES.C_OSZTALYFONOKID = T_FELHASZNALO_OSSZES.ID
INNER JOIN T_FELADATELLATASIHELY_OSSZES ON T_FELADATELLATASIHELY_OSSZES.ID = T_OSZTALYCSOPORT_OSSZES.C_FELADATELLATASIHELYID
WHERE T_OSZTALYCSOPORT_OSSZES.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, ERTEKELES_SZOVEG_MEGJEGYZES, C_ERTEKELESDATUM, C_TANTARGYID, TANTARGY_NEV, TARGYKATEGORIA_NEV, TARGYKATEGORIA_SORSZAM, T_TANTARGY_C_FOTARGYE, T_TANTARGY_C_ALTANTARGYKENTNYOMTATVANYBAN, C_OSZTALYCSOPORTID)
SELECT ROW_NUMBER() OVER (ORDER BY TanuloId), TanuloId, COALESCE(ErtekelesOsztalyzatValue, IIF(ErtekelesSzoveg IS NOT NULL, ISNULL(ErtekelesSzovegRovidNev, NULL), NULL), ErtekelesSzazalek), ErtekelesSzoveg, Datum,
TantargyId, TantargyNevZarojellel, TARGYKATEG.C_NAME, TARGYKATEG.C_VALUE, FotargyE, Altantargy, OsztalyCsoportId
FROM fnGetDokumentumErtekelesekOsztalyonkent (@pTanevId, @pOsztalyId, @pErtekelestipusaId, DEFAULT, DEFAULT, @pAtsoroltTanuloAdatok) AS ERTEKELESEK
LEFT JOIN T_DICTIONARYITEMBASE_OSSZES AS TARGYKATEG ON TARGYKATEG.ID = ERTEKELESEK.TargyKategoriaId AND TARGYKATEG.C_TANEVID = @pTanevId
WHERE TantargyId IS NOT NULL AND (FotargyE = 'T' OR Altantargy = '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, COALESCE(TANTARGY.C_NEVNYOMTATVANYBAN, TANTARGY.C_NEV) AS TANTARGY_NEV, TARGYKATEG.C_NAME AS TARGYKATEGORIA_NEV, TARGYKATEG.C_VALUE AS TARGYKATEGORIA_SORSZAM, C_FOTARGYE, C_ALTANTARGYKENTNYOMTATVANYBAN
FROM T_FOGLALKOZAS_OSSZES
INNER JOIN @aktualisOsztalyCsoportok AS OSZTALYCSOPORT ON OSZTALYCSOPORT.OSZTALYCSOPORTID = T_FOGLALKOZAS_OSSZES.C_OSZTALYCSOPORTID
INNER JOIN T_TANTARGY_OSSZES AS TANTARGY ON TANTARGY.ID = T_FOGLALKOZAS_OSSZES.C_TANTARGYID AND TANTARGY.C_TANEVID = T_FOGLALKOZAS_OSSZES.C_TANEVID
LEFT JOIN T_DICTIONARYITEMBASE_OSSZES AS TARGYKATEG ON TARGYKATEG.ID = TANTARGY.C_TARGYKATEGORIA AND TARGYKATEG.C_TANEVID = @pTanevId
WHERE T_FOGLALKOZAS_OSSZES.TOROLT = 'F' AND (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
WHERE (@pAtsoroltTanuloAdatok = 2 OR C_OSZTALYCSOPORTID IN (SELECT OSZTALYCSOPORTID FROM @aktualisOsztalyCsoportok))
) AS TANTARGYAK
ORDER BY TARGYKATEGORIA_SORSZAM, TANTARGY_NEV;
-- ÉRTÉKELÉS lista
SELECT *
FROM @szurtErtekeles;
--MAGATARTÁS-SZORGALOM
SELECT ROW_NUMBER() OVER (ORDER BY TanuloId) AS ID, TanuloId AS C_TANULOID,
COALESCE(CAST(MagatartasOsztalyzatValue AS NVARCHAR(MAX)), CAST(MagatartasErtekOsztalyzatkent AS NVARCHAR(MAX)), MagatartasSzovegRovidNev) AS MagatartasOsztalyzat, MagatartasErtek,
COALESCE(CAST(SzorgalomOsztalyzatValue AS NVARCHAR(MAX)), CAST(SzorgalomErtekOsztalyzatkent AS NVARCHAR(MAX)), SzorgalomSzovegRovidNev) AS SzorgalomOsztalyzat, SzorgalomErtek,
ErtekelesSzoveg AS C_ERTEKELESSZOVEG, Datum AS C_ERTEKELESDATUM, 'F' AS TOROLT
FROM fnGetDokumentumErtekelesekOsztalyonkent (@pTanevId, @pOsztalyId, @pErtekelestipusaId, DEFAULT, DEFAULT, @pAtsoroltTanuloAdatok) AS ERTEKELESEK
WHERE TantargyId IS NULL AND (@pAtsoroltTanuloAdatok > 0 OR OsztalyCsoportId IN (SELECT OSZTALYCSOPORTID FROM @aktualisOsztalyCsoportok));
--MULASZTÁS
INSERT INTO @szurtMulasztas (TIPUS_CHAR, C_TIPUS, C_IGAZOLT, C_TANULOID, C_GYAKORLATI, KESESPERC, MULASZTASOK_SZAMA)
SELECT IIF(Tipusa = @pMulasztasTipusIdKeses, 'K', 'H'), Tipusa, Igazolt, TanuloId, Gyakorlati, SUM(KesesPercben), COUNT(1) AS MULASZTASOK_SZAMA
FROM fnGetDokumentumMulasztasokOsztalyonkentReszletes (@pTanevId, @pOsztalyId, 0, 0, IIF(@pAtsoroltTanuloAdatok > 0, 1, 0), @idoszakEleje, @idoszakVege) AS MULASZTASOK
WHERE Igazolt IS NOT NULL AND Tipusa IN (@pMulasztasTipusIdKeses, @pMulasztasTipusIdHianyzas)
GROUP BY Tipusa, Igazolt, TanuloId, 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
--TANÓRAI FELJEGYZÉSEK
SELECT C_TANULOID, SUM(IIF(C_TIPUS = @pTanoraiDicseretTipusId, 1, 0)) AS TanoraiDicseret, SUM(IIF(C_TIPUS = @pFelszereleshianyTipusId, 1, 0)) AS FelszerelesHiany, SUM(IIF(C_TIPUS = @pHaziFeladatHianyTipusId, 1, 0)) AS HaziFeladatHiany, 'F' AS TOROLT
FROM T_TANULOESEMENY_OSSZES AS TANULOESEMENY
INNER JOIN T_TANITASIORA_OSSZES AS TANITASIORA ON TANITASIORA.ID = TANULOESEMENY.C_TANITASIORAID
INNER JOIN T_TANULO_TANULOESEMENY AS TANULO_TANULOE ON TANULO_TANULOE.C_TANULOESEMENYID = TANULOESEMENY.ID
INNER JOIN T_DICTIONARYITEMBASE AS TIPUS ON TIPUS.ID = TANULOESEMENY.C_TIPUS AND TIPUS.C_TANEVID = TANULOESEMENY.C_TANEVID
INNER JOIN @osztalyTanulok AS OSZTALYTANULOK ON OSZTALYTANULOK.TANULOID = TANULO_TANULOE.C_TANULOID
INNER JOIN @aktualisOsztalyCsoportok AS OSZTALYCSOPORT ON OSZTALYCSOPORT.OSZTALYCSOPORTID = TANITASIORA.C_OSZTALYCSOPORTID
LEFT JOIN T_CSOPORT_OSSZES AS CSOPORT ON CSOPORT.ID = OSZTALYCSOPORT.OSZTALYCSOPORTID
LEFT JOIN T_OSZTALY_OSSZES AS OSZTALY ON OSZTALY.ID = OSZTALYCSOPORT.OSZTALYCSOPORTID
WHERE TANULOESEMENY.TOROLT = 'F' AND TANITASIORA.TOROLT = 'F' AND TANULOESEMENY.C_TANEVID = 5 AND C_TANITASIORAID IS NOT NULL
AND TANITASIORA.C_DATUM BETWEEN @idoszakEleje AND @idoszakVege
AND TANITASIORA.C_OSZTALYCSOPORTID IN (SELECT OSZTALYCSOPORTID FROM @aktualisOsztalyCsoportok)
GROUP BY C_TANULOID
END
GO

View File

@@ -0,0 +1,214 @@
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF OBJECT_ID('[dbo].[sp_Nyomtatvany_Excel_IdoszakiOsztalyokTantargyiStatisztika]') IS NOT NULL
BEGIN
DROP PROCEDURE [dbo].[sp_Nyomtatvany_Excel_IdoszakiOsztalyokTantargyiStatisztika]
END
GO
CREATE PROCEDURE [dbo].[sp_Nyomtatvany_Excel_IdoszakiOsztalyokTantargyiStatisztika]
@pTanevId 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
@pAtsoroltTanuloAdatok INT = 1,
@pElmeletgyakorlat BIT = 0
AS
BEGIN
SET NOCOUNT ON;
DECLARE @idoszakEleje DATE = (
SELECT COALESCE(
(SELECT C_DATUM FROM T_TANEVRENDJE_OSSZES WHERE C_TANEVID = @pTanevId AND C_NAPTIPUSA = @pTanevrendjeTanevKezdeteNaptipusId),
(SELECT C_ELSOTANITASINAP FROM T_TANEV_OSSZES WHERE ID = @pTanevId))
);
DECLARE @idoszakVege DATE = (
SELECT COALESCE(
(SELECT C_DATUM FROM T_TANEVRENDJE_OSSZES 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 @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);
DECLARE @tantargyak TABLE(TANTARGYID INT, TANTARGY_NEV NVARCHAR(MAX), TARGYKATEGORIA_NEV NVARCHAR(MAX), TARGYKATEGORIA_SORSZAM INT, C_FOTARGYE CHAR(1), C_ALTANTARGYKENTNYOMTATVANYBAN CHAR(1));
DECLARE @osztalyok TABLE(OSZTALYID INT, NEV NVARCHAR(MAX), EVFOLYAM INT, SORREND INT);
DECLARE @osztalyokTanulokszama TABLE (OSZTALYID INT, TANULOKSZAMA INT);
DECLARE @osztalyokErtekeles TABLE (OSZTALYID INT, TANTARGYID INT, ATLAG FLOAT);
DECLARE @osztalyokMulasztas TABLE (OSZTALYID INT, TIPUS_CHAR CHAR(1), C_TIPUS INT, C_IGAZOLT CHAR(1), MULASZTASOK_SZAMA INT, C_GYAKORLATI CHAR(1), DESCR CHAR(3));
-- OSZTÁLYOK ÉS TANÓRAI CSOPORTOK
INSERT INTO @osztalyoktanoraicsoportok (OSZTALYCSOPORTID, C_TIPUSA, C_VEGZOSEVFOLYAM) (
SELECT T_OSZTALYCSOPORT_OSSZES.ID, C_TIPUSA, C_VEGZOSEVFOLYAM
FROM T_OSZTALYCSOPORT_OSSZES
LEFT JOIN T_CSOPORT_OSSZES ON T_OSZTALYCSOPORT_OSSZES.ID = T_CSOPORT_OSSZES.ID
LEFT JOIN T_OSZTALY_OSSZES ON T_OSZTALYCSOPORT_OSSZES.ID = T_OSZTALY_OSSZES.ID
WHERE ( C_TIPUSA IN (SELECT ID FROM fnGetTanoraiCeluCsoportTipusok(@pTanevId)) OR T_OSZTALY_OSSZES.ID IS NOT NULL) AND C_TANEVID = @pTanevId
);
-- TANTÁRGYAK
INSERT INTO @tantargyak (TANTARGYID, TANTARGY_NEV, TARGYKATEGORIA_NEV, TARGYKATEGORIA_SORSZAM, C_FOTARGYE, C_ALTANTARGYKENTNYOMTATVANYBAN)
SELECT T_TANTARGY_OSSZES.ID AS TANTARGYID, COALESCE(T_TANTARGY_OSSZES.C_NEVNYOMTATVANYBAN, T_TANTARGY_OSSZES.C_NEV) AS TANTARGY_NEV, T_DICTIONARYITEMBASE_OSSZES.C_NAME AS TARGYKATEGORIA_NEV, T_DICTIONARYITEMBASE_OSSZES.C_VALUE AS TARGYKATEGORIA_SORSZAM, T_TANTARGY_OSSZES.C_FOTARGYE, T_TANTARGY_OSSZES.C_ALTANTARGYKENTNYOMTATVANYBAN
FROM T_TANTARGY_OSSZES
LEFT JOIN T_TARGYKATEGORIATIPUS_OSSZES ON T_TARGYKATEGORIATIPUS_OSSZES.ID = T_TANTARGY_OSSZES.C_TARGYKATEGORIA
LEFT JOIN T_DICTIONARYITEMBASE_OSSZES ON T_DICTIONARYITEMBASE_OSSZES.ID = T_TARGYKATEGORIATIPUS_OSSZES.ID
WHERE T_TANTARGY_OSSZES.TOROLT = 'F' AND T_TANTARGY_OSSZES.C_INTEZMENYID = @pIntezmenyId AND T_TANTARGY_OSSZES.C_TANEVID = @pTanevId
ORDER BY TARGYKATEGORIA_SORSZAM, TANTARGY_NEV;
-- OSZTÁLYOK
SELECT T_OSZTALYCSOPORT_OSSZES.ID AS OSZTALYID, T_OSZTALYCSOPORT_OSSZES.C_NEV AS NEV, T_OSZTALYCSOPORT_OSSZES.C_EVFOLYAMTIPUSA AS EVFOLYAM, T_DICTIONARYITEMBASE_OSSZES.C_ORDER AS SORREND, ROW_NUMBER() OVER(ORDER BY T_DICTIONARYITEMBASE_OSSZES.C_ORDER ASC, T_OSZTALYCSOPORT_OSSZES.C_NEV ASC) AS Row#
INTO #tempOsztalyok
FROM T_OSZTALYCSOPORT_OSSZES
JOIN T_OSZTALY_OSSZES ON T_OSZTALY_OSSZES.ID = T_OSZTALYCSOPORT_OSSZES.ID
JOIN T_TANEV_OSSZES ON T_TANEV_OSSZES.ID = T_OSZTALYCSOPORT_OSSZES.C_TANEVID
JOIN T_DICTIONARYITEMBASE_OSSZES ON T_DICTIONARYITEMBASE_OSSZES.ID = T_OSZTALYCSOPORT_OSSZES.C_EVFOLYAMTIPUSA AND T_DICTIONARYITEMBASE_OSSZES.TOROLT = 'F' AND T_DICTIONARYITEMBASE_OSSZES.C_TANEVID = T_TANEV_OSSZES.ID
WHERE T_OSZTALYCSOPORT_OSSZES.TOROLT = 'F' AND T_OSZTALYCSOPORT_OSSZES.C_INTEZMENYID=@pIntezmenyId AND T_TANEV_OSSZES.TOROLT = 'F' AND T_TANEV_OSSZES.ID = @pTanevId
ORDER BY Row#;
DECLARE @pOsztalyId INT = 0;
DECLARE @sorrend INT = 0;
WHILE (1 = 1)
BEGIN
DELETE FROM @szurtMulasztas;
DELETE FROM @osztalycsoportok;
DELETE FROM @aktualisOsztalyCsoportok;
DELETE FROM @osztalyTanulok;
SELECT TOP 1 @pOsztalyId = OSZTALYID, @sorrend = Row#
FROM #tempOsztalyok
WHERE @sorrend < Row#
ORDER BY Row#;
IF @@ROWCOUNT = 0
BEGIN
BREAK;
END
INSERT INTO @osztalycsoportok (OSZTALYCSOPORTID) (
SELECT ID FROM fnGetKapcsolodoOsztalycsoportok(@pOsztalyId)
WHERE (ID IN (SELECT ID FROM T_OSZTALY_OSSZES) OR ID IN (SELECT ID FROM T_CSOPORT WHERE C_TIPUSA IN (SELECT ID FROM fnGetTanoraiCeluCsoportTipusok(@pTanevId))))
);
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 (SELECT ID FROM fnGetTanoraiCeluCsoportTipusok(@pTanevId))))
);
-- 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
);
--TANULÓK LISTA
INSERT INTO @osztalyokTanulokszama (OSZTALYID, TANULOKSZAMA)
SELECT @pOsztalyId AS OSZTALYID, COUNT(T_FELHASZNALO_OSSZES.ID) AS TANULOKSZAMA
FROM T_FELHASZNALO_OSSZES
INNER JOIN @osztalyTanulok AS OSZTALYTANULOK ON OSZTALYTANULOK.TANULOID = T_FELHASZNALO_OSSZES.ID;
INSERT INTO @osztalyokErtekeles (OSZTALYID, TANTARGYID, ATLAG)
SELECT @pOsztalyId AS OSZTALYID, TantargyId, ROUND(AVG(CAST(ErtekelesOsztalyzatValue AS FLOAT)), 2) AS ATLAG
FROM fnGetDokumentumErtekelesekOsztalyonkent (@pTanevId, @pOsztalyId, @pErtekelestipusaId, DEFAULT, DEFAULT, @pAtsoroltTanuloAdatok) AS ERTEKELESEK
LEFT JOIN T_DICTIONARYITEMBASE_OSSZES AS TARGYKATEG ON TARGYKATEG.ID = ERTEKELESEK.TargyKategoriaId AND TARGYKATEG.C_TANEVID = @pTanevId
WHERE TantargyId IS NOT NULL AND (FotargyE = 'T' OR Altantargy = 'T') AND ErtekelesOsztalyzatValue IS NOT NULL
GROUP BY TantargyId;
--MULASZTÁS
INSERT INTO @szurtMulasztas (TIPUS_CHAR, C_TIPUS, C_IGAZOLT, C_TANULOID, C_GYAKORLATI, KESESPERC, MULASZTASOK_SZAMA)
SELECT IIF(Tipusa = @pMulasztasTipusIdKeses, 'K', 'H'), Tipusa, Igazolt, TanuloId, Gyakorlati, SUM(KesesPercben), COUNT(1) AS MULASZTASOK_SZAMA
FROM fnGetDokumentumMulasztasokOsztalyonkentReszletes (@pTanevId, @pOsztalyId, 0, 0, IIF(@pAtsoroltTanuloAdatok > 0, 1, 0), @idoszakEleje, @idoszakVege) AS MULASZTASOK
WHERE Igazolt IS NOT NULL AND Tipusa IN (@pMulasztasTipusIdKeses, @pMulasztasTipusIdHianyzas)
GROUP BY Tipusa, Igazolt, TanuloId, Gyakorlati
IF @pElmeletgyakorlat=0
BEGIN
INSERT INTO @osztalyokMulasztas (OSZTALYID, TIPUS_CHAR, C_TIPUS, C_IGAZOLT, MULASZTASOK_SZAMA, C_GYAKORLATI, DESCR)
SELECT @pOsztalyId AS OSZTALYID, TIPUS_CHAR, C_TIPUS, C_IGAZOLT, CASE WHEN TIPUS_CHAR = 'K' THEN SUM(KESESORA) ELSE SUM(MULASZTASOK_SZAMA) END MULASZTASOK_SZAMA, 'F' AS C_GYAKORLATI, TIPUS_CHAR + C_IGAZOLT + 'F' AS DESCR
FROM (
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
) AS T_SUM_MULASZTAS
GROUP BY TIPUS_CHAR, C_TIPUS, C_IGAZOLT
ORDER BY C_TIPUS DESC, C_IGAZOLT DESC;
END
ELSE
BEGIN
INSERT INTO @osztalyokMulasztas (OSZTALYID, TIPUS_CHAR, C_TIPUS, C_IGAZOLT, MULASZTASOK_SZAMA, C_GYAKORLATI, DESCR)
SELECT @pOsztalyId AS OSZTALYID, TIPUS_CHAR, C_TIPUS, C_IGAZOLT, CASE WHEN TIPUS_CHAR = 'K' THEN SUM(KESESORA) ELSE SUM(MULASZTASOK_SZAMA) END MULASZTASOK_SZAMA, C_GYAKORLATI, TIPUS_CHAR + C_IGAZOLT + C_GYAKORLATI
FROM (
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
) AS T_SUM_MULASZTAS
GROUP BY TIPUS_CHAR, C_TIPUS, C_GYAKORLATI, C_IGAZOLT
ORDER BY C_TIPUS DESC, C_IGAZOLT DESC;
END
END
DECLARE @cols AS NVARCHAR(MAX);
DECLARE @colsHeader AS NVARCHAR(MAX);
DECLARE @query AS NVARCHAR(MAX);
SELECT OSZTALYID, TANTARGYID, ATLAG
INTO #tempErtekeles
FROM @osztalyokErtekeles;
SELECT OSZTALYID, TANULOKSZAMA
INTO #tempTanulokszama
FROM @osztalyokTanulokszama;
SELECT @colsHeader = ISNULL(@colsHeader + ', ', '') + QUOTENAME(TANTARGYAK.TANTARGYID) + ' AS ' + QUOTENAME(TANTARGYAK.TANTARGY_NEV),
@cols = ISNULL(@cols + ', ', '') + QUOTENAME(TANTARGYAK.TANTARGYID)
FROM (
SELECT DISTINCT TANTARGYID, TANTARGY_NEV, TARGYKATEGORIA_SORSZAM
FROM @tantargyak
) AS TANTARGYAK
ORDER BY TARGYKATEGORIA_SORSZAM, TANTARGY_NEV;
SET @query =
'SELECT NEV AS [Osztályok], TANULOILETSZAM.TANULOKSZAMA AS [Tanulók száma], ' + @colsHeader + '
FROM (SELECT OSZTALYID, NEV, Row# FROM #tempOsztalyok) AS OSZTALYOK
LEFT JOIN (
SELECT OSZTALYID AS E_OSZTALYID, TANTARGYID, ATLAG
FROM #tempErtekeles
) AS ERTEKELES ON ERTEKELES.E_OSZTALYID = OSZTALYOK.OSZTALYID
PIVOT (
MAX(ATLAG)
FOR TANTARGYID IN (' + @cols + ')
) AS PIVOTTABLE
LEFT JOIN #tempTanulokszama AS TANULOILETSZAM ON PIVOTTABLE.OSZTALYID = TANULOILETSZAM.OSZTALYID
ORDER BY Row#';
execute(@query);
SELECT * INTO #tempMulasztas
FROM @osztalyokMulasztas;
IF @pElmeletgyakorlat=0
BEGIN
SET @cols = 'HTF,KTF,HFF,KFF'
SET @colsHeader = 'HTF AS [Igazolt hiányzás],KTF AS [Igazolt késés (óra)],HFF AS [Igazolatlan hiányzás],KFF AS [Igazolatlan késés (óra)]'
END
ELSE
BEGIN
SET @cols = 'HTF,KTF,HFF,KFF,HTT,KTT,HFT,KFT'
SET @colsHeader = 'HTF AS [Elméleti igazolt hiányzás],KTF AS [Elméleti igazolt késés (óra)],HFF AS [Elméleti igazolatlan hiányzás],KFF AS [Elméleti igazolatlan késés (óra)],HTT AS [Gyakorlati igazolt hiányzás],KTT AS [Gyakorlati igazolt késés (óra)],HFT AS [Gyakorlati igazolatlan hiányzás],KFT AS [Gyakorlati igazolatlan késés (óra)]'
END
SET @query =
'SELECT ' + @colsHeader + '
FROM (SELECT OSZTALYID, NEV, Row# FROM #tempOsztalyok) AS OSZTALYOK
LEFT JOIN (
SELECT OSZTALYID AS M_OSZTALYID, MULASZTASOK_SZAMA, DESCR
FROM #tempMulasztas
) AS MULASZTAS ON MULASZTAS.M_OSZTALYID = OSZTALYOK.OSZTALYID
PIVOT (
MAX(MULASZTASOK_SZAMA)
FOR DESCR IN (' + @cols + ')
) AS PIVOTTABLE
ORDER BY Row#';
execute(@query);
IF OBJECT_ID('tempdb..#tempOsztalyok') IS NOT NULL DROP TABLE #tempOsztalyok
IF OBJECT_ID('tempdb..#tempTanulokszama') IS NOT NULL DROP TABLE #tempTanulokszama
IF OBJECT_ID('tempdb..#tempErtekeles') IS NOT NULL DROP TABLE #tempErtekeles
IF OBJECT_ID('tempdb..#tempMulasztas') IS NOT NULL DROP TABLE #tempMulasztas
END
GO