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,36 @@
DROP INDEX IF EXISTS T_TANITASIORA.NCI_TanitasiOra_TanevId_IntezmenyId_Datum
CREATE INDEX NCI_TanitasiOra_TanevId_IntezmenyId_Datum
ON T_TANITASIORA (
C_TANEVID
,C_INTEZMENYID
,C_DATUM
)
INCLUDE(C_OSZTALYCSOPORTID,C_TANTARGYID,C_MEGTARTOTT)
WHERE TOROLT = 'F'
WITH (FILLFACTOR = 80)
GO
DROP INDEX IF EXISTS T_OSZTALYCSOPORT.NCI_OsztalyCsoport_IntezmenyId_TanevId_FeladatKategoriaId
CREATE INDEX NCI_OsztalyCsoport_IntezmenyId_TanevId_FeladatKategoriaId
ON T_OSZTALYCSOPORT (
C_INTEZMENYID
,C_TANEVID
,C_FELADATKATEGORIAID
)
WHERE TOROLT = 'F'
WITH (FILLFACTOR = 80)
GO
DROP INDEX IF EXISTS T_TANULOERTEKELES.NCI_TanuloErtekeles_TanuloId_TipusId_IntezmenyId_TanevId_ErtekelesOsztalyzatId
CREATE INDEX NCI_TanuloErtekeles_TanuloId_TipusId_IntezmenyId_TanevId_ErtekelesOsztalyzatId
ON T_TANULOERTEKELES (
C_TANULOID
,C_TIPUSID
,C_INTEZMENYID
,C_TANEVID
,C_ERTEKELESOSZTALYZATID
)
INCLUDE (C_ERTEKELESMODID, C_ROGZITESKORITANULOOSZTALYID, C_TANTARGYID,C_MAGATARTASERTEKID,C_MAGATARTASOSZTALYZATID,C_DATUM,C_OSZTALYCSOPORTID,C_SZORGALOMERTEKID,C_SZORGALOMOSZTALYZATID)
WHERE TOROLT = 'F'
WITH (FILLFACTOR = 80)

View file

@ -0,0 +1,422 @@
DROP PROCEDURE IF EXISTS [dbo].[sp_Nyomtatvany_Excel_IdoszakiOsztalyokTantargyiStatisztika]
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;
--Const
DECLARE
@ElsoFelveVege int = 1400
,@IneVege int = 1403
,@IIIneVege int = 1404
,@UtolsoTanitasiNap int = 1395
,@VegzosUtolsoTanitasiNap int = 1402
,@iskolaErdekuSzamit bit = dbo.fnGetRendszerbeallitasEnumBool(1683, @pIntezmenyId, @pTanevId)
,@DefaultFeladatKategoriaId int = 7553 /*OktNevelesiKategoriaEnum.Alapkepzes*/
CREATE TABLE #tantargyak (
TantargyId int
,TantargyNev nvarchar(255)
,TargykategoriaSorszam int
)
CREATE TABLE #osztalyokTanulokszama (
OsztalyId int
,TanulokSzama int
)
CREATE TABLE #osztalyokErtekeles (
OsztalyId int
,TantargyId int
,Atlag float
)
CREATE TABLE #osztalyokMagszorg (
OsztalyId int
,MagAtlag float
,SzorgAtlag float
)
CREATE TABLE #osztalyokMulasztas (
OsztalyId int
,TIPUS_CHAR char(1)
,C_TIPUS int
,C_IGAZOLT char(1)
,MulasztasokSzama int
,C_GYAKORLATI char(1)
,DESCR char(3)
)
CREATE TABLE #szurtMulasztas (
TIPUS_CHAR char(1)
,C_TIPUS int
,C_IGAZOLT char(1)
,C_TANULOID int
,C_GYAKORLATI char(1)
,KESESPERC int
,MulasztasokSzama int
)
CREATE TABLE #tempMulasztas (
TIPUS int
,IGAZOLT char(1)
,GYAKORLATI char(1)
,KESESPERC int
,MulasztasokSzama int
,OsztalyId int
)
CREATE TABLE #csopTip (
ID int PRIMARY KEY CLUSTERED
)
CREATE TABLE #OsztalyokTanulok(
OsztalyId int
,TanuloId int
INDEX IX_OT CLUSTERED (TanuloId)
)
CREATE TABLE #tempOsztalyok(
OsztalyId int
,OsztalyNev nvarchar(255)
,Sorrend int
,KereszFeleves char(1)
,VegzosEVfolyam char(1)
,Letszam int
,IdoszakKezdeteNaptipusId int
,IdoszakVegeNaptipusId int
,IdoszakKezdete datetime
,IdoszakVege datetime
INDEX IX_tmpO CLUSTERED(OsztalyId)
)
CREATE TABLE #tempOsztalyErtekelesek(
TantargyId int
,Osztalyzat int
,TanuloId int
,OsztalyId int
,MagatartasOsztalyzat int
,SzorgalomOsztalyzat int
INDEX IX_tmpO_tgy CLUSTERED(TantargyId)
)
-- TANTÁRGYAK
INSERT INTO #tantargyak (
TantargyId
,TantargyNev
,TargyKategoriaSorszam
)
SELECT
tgy.ID AS TantargyId
,COALESCE(tgy.C_NEVNYOMTATVANYBAN, tgy.C_NEV) AS TantargyNev
,ISNULL(dibKat.C_VALUE,0)
FROM T_TANTARGY_OSSZES tgy
INNER JOIN T_DICTIONARYITEMBASE_OSSZES AS dibKat ON dibKat.ID = tgy.C_TARGYKATEGORIA AND dibKat.C_TANEVID = tgy.C_TANEVID
WHERE tgy.TOROLT = 'F' AND tgy.C_TANEVID = @pTanevId
INSERT INTO #tantargyak(
TantargyId
,TantargyNev
,TargyKategoriaSorszam
)
VALUES(-1,'Magatartás',-2),(-2,'Szorgalom',-1)
-- OSZTÁLYOK
INSERT INTO #tempOsztalyok(
OsztalyId
,OsztalyNev
,Sorrend
,KereszFeleves
,VegzosEVfolyam
,Letszam
,IdoszakKezdeteNaptipusId
,IdoszakVegeNaptipusId
)
SELECT
ocs.ID AS OsztalyId
,ocs.C_NEV AS OsztalyNev
,dibEvf.C_ORDER AS Sorrend
,ocs.C_KERESZTFELEVES AS KereszFeleves
,ocs.C_VEGZOSEVFOLYAM AS VegzosEVfolyam
,0 Letszam
,IIF(ocs.C_KERESZTFELEVES = 'F', @pTanevrendjeTanevKezdeteNaptipusId,
CASE
WHEN @pLezaroNaptipusId = @ElsoFelveVege THEN @ElsoFelveVege
WHEN @pLezaroNaptipusId = @UtolsoTanitasiNap THEN @pTanevrendjeTanevKezdeteNaptipusId
WHEN @pLezaroNaptipusId = @IneVege THEN @ElsoFelveVege
WHEN @pLezaroNaptipusId = @IIIneVege THEN @pTanevrendjeTanevKezdeteNaptipusId
END) IdoszakKezdeteNaptipusId
,IIF(ocs.C_KERESZTFELEVES = 'F', IIF(ocs.C_VEGZOSEVFOLYAM = 'T' AND @pLezaroNaptipusId = @UtolsoTanitasiNap, @VegzosUtolsoTanitasiNap, @pLezaroNaptipusId),
CASE
WHEN @pLezaroNaptipusId = @ElsoFelveVege THEN @UtolsoTanitasiNap
WHEN @pLezaroNaptipusId = @UtolsoTanitasiNap THEN @ElsoFelveVege
WHEN @pLezaroNaptipusId = @IneVege THEN @IIIneVege
WHEN @pLezaroNaptipusId = @IIIneVege THEN @IneVege
END) IdoszakVegeNaptipusId
FROM T_OSZTALYCSOPORT_OSSZES ocs
INNER JOIN T_OSZTALY_OSSZES o ON o.ID = ocs.ID
INNER JOIN T_DICTIONARYITEMBASE_OSSZES AS dibEvf ON dibEvf.ID = ocs.C_EVFOLYAMTIPUSA AND dibEvf.TOROLT = 'F'
AND dibEvf.C_TANEVID = ocs.C_TANEVID
WHERE ocs.TOROLT = 'F'
AND ocs.C_TANEVID = @pTanevId
AND ocs.C_FELADATKATEGORIAID = @DefaultFeladatKategoriaId
UPDATE #tempOsztalyok SET
IdoszakKezdete = ISNULL(
(SELECT TOP 1 C_DATUM
FROM T_TANEVRENDJE_OSSZES tr
LEFT JOIN T_OSZTALYCSOPORT_TANEVRENDJE ocstr ON tr.ID = ocstr.C_TANEVRENDJEID
WHERE tr.C_TANEVID = @pTanevId AND tr.C_NAPTIPUSA = IdoszakKezdeteNaptipusId AND tr.TOROLT = 'F' AND (C_OSZTALYCSOPORTID IS NULL OR C_OSZTALYCSOPORTID = OsztalyId)
ORDER BY C_OSZTALYCSOPORTID DESC),
(SELECT TOP 1 C_KEZDONAP FROM T_TANEV_OSSZES WHERE ID = @pTanevId))
,IdoszakVege = ISNULL(
(SELECT TOP 1 C_DATUM
FROM T_TANEVRENDJE_OSSZES tr
LEFT JOIN T_OSZTALYCSOPORT_TANEVRENDJE ocstr ON tr.ID = ocstr.C_TANEVRENDJEID
WHERE tr.C_TANEVID = @pTanevId AND tr.C_NAPTIPUSA = IdoszakVegeNaptipusId AND TOROLT = 'F' AND (C_OSZTALYCSOPORTID IS NULL OR C_OSZTALYCSOPORTID = OsztalyId)
ORDER BY C_OSZTALYCSOPORTID DESC),
GETDATE())
UPDATE #tempOsztalyok SET Letszam = DB FROM (
SELECT
COUNT(*) db
,o.OsztalyId
FROM #tempOsztalyok o
INNER JOIN T_TANULOCSOPORT_OSSZES tcso ON tcso.C_OSZTALYCSOPORTID = o.OsztalyId
AND tcso.TOROLT='F'
AND o.IdoszakVege BETWEEN tcso.C_BELEPESDATUM AND ISNULL(tcso.C_KILEPESDATUM,'22000101')
GROUP BY o.OsztalyId) x
WHERE x.OsztalyId = #tempOsztalyok.OsztalyId
INSERT INTO #OsztalyokTanulok(
OsztalyId
,TanuloId
)
SELECT DISTINCT
o.OsztalyId
,tcso.C_TANULOID
FROM T_TANULOCSOPORT_OSSZES tcso
INNER JOIN #tempOsztalyok o ON o.OsztalyId = tcso.C_OSZTALYCSOPORTID
WHERE tcso.TOROLT='F' AND tcso.C_TANEVID = @pTanevId
AND o.IdoszakVege BETWEEN tcso.C_BELEPESDATUM AND ISNULL(tcso.C_KILEPESDATUM,'22000101')
INSERT INTO #csopTip(ID)
SELECT Id FROM fnGetDokumentumOsztalyVagyTanoraiCsoport (@pTanevId)
INSERT INTO #tempMulasztas(
TIPUS
,IGAZOLT
,GYAKORLATI
,KESESPERC
,MulasztasokSzama
,OsztalyId
)
SELECT
tm.C_TIPUS -- 1500 hiányzás, 1499 késés
,tm.C_IGAZOLT
,tgy.C_GYAKORLATI
,SUM(tm.C_KESESPERCBEN)
,COUNT(tm.ID) AS MulasztasokSzama
,o.OsztalyId
FROM T_TANULOMULASZTAS_OSSZES tm
INNER JOIN T_TANITASIORA_OSSZES tao ON tao.ID = tm.C_TANITASIORAKID
AND tao.TOROLT = 'F'
AND tao.C_MEGTARTOTT = 'T'
AND tao.C_TANEVID = @pTanevId
INNER JOIN #OsztalyokTanulok ot ON ot.TanuloId = tm.C_ORATANULOIID
INNER JOIN #tempOsztalyok o ON o.OsztalyId = ot.OsztalyId
AND tao.C_DATUM <= o.IdoszakVege
INNER JOIN T_TANTARGY_OSSZES tgy ON tgy.ID = tao.C_TANTARGYID AND tgy.TOROLT='F'
INNER JOIN #csopTip csop ON csop.ID=tao.C_OSZTALYCSOPORTID
WHERE tm.C_TIPUS BETWEEN 1499 AND 1500
AND (@iskolaErdekuSzamit = 1 OR ISNULL(C_IGAZOLASTIPUSA,0)<>1533)
AND tm.TOROLT = 'F' AND tm.C_IGAZOLT IS NOT NULL
AND tm.C_TANEVID = @pTanevId
GROUP BY C_TIPUS, C_IGAZOLT, C_GYAKORLATI, o.OsztalyId
--ÉRTÉKELÉS LISTA
INSERT INTO #tempOsztalyErtekelesek(
TantargyId
,Osztalyzat
,TanuloId
,OsztalyId
,MagatartasOsztalyzat
,SzorgalomOsztalyzat
)
SELECT
te.C_TANTARGYID as TantargyId
,ertekelesOsztalyzat.C_VALUE Osztalyzat
,te.C_TANULOID TanuloId
,o.OsztalyId OsztalyId
,ISNULL(magatartasOsztalyzat.C_VALUE,magatartasErtek.C_VALUE + 1) MagatartasOsztalyzat
,ISNULL(szorgalomOsztalyzat.C_VALUE,szorgalomErtek.C_VALUE+1) SzorgalomOsztalyzat
FROM T_TANULOERTEKELES_OSSZES te
INNER JOIN #OsztalyokTanulok t ON t.TanuloId = te.C_TANULOID
INNER JOIN #tempOsztalyok o ON o.OsztalyId = t.OsztalyId
INNER JOIN #csopTip tanorai ON tanorai.ID = te.C_OSZTALYCSOPORTID
LEFT JOIN T_TANTARGY_OSSZES tgy ON tgy.ID= te.C_TANTARGYID AND tgy.TOROLT='F'
LEFT JOIN T_DICTIONARYITEMBASE_OSSZES ertekelesOsztalyzat ON ertekelesOsztalyzat.ID = te.C_ERTEKELESOSZTALYZATID
AND ertekelesOsztalyzat.C_TANEVID = @pTanevId
AND ertekelesOsztalyzat.C_TYPE = 'OsztalyzatTipus'
AND ertekelesOsztalyzat.TOROLT='F'
LEFT JOIN T_DICTIONARYITEMBASE_OSSZES magatartasOsztalyzat ON magatartasOsztalyzat.ID = te.C_MAGATARTASOSZTALYZATID
AND magatartasOsztalyzat.C_TANEVID = @pTanevId
AND magatartasOsztalyzat.C_TYPE = 'OsztalyzatTipus'
AND magatartasOsztalyzat.TOROLT='F'
LEFT JOIN T_DICTIONARYITEMBASE_OSSZES szorgalomOsztalyzat ON szorgalomOsztalyzat.ID = te.C_SZORGALOMOSZTALYZATID
AND szorgalomOsztalyzat.C_TANEVID = @pTanevId
AND szorgalomOsztalyzat.C_TYPE = 'OsztalyzatTipus'
AND szorgalomOsztalyzat.TOROLT='F'
LEFT JOIN T_DICTIONARYITEMBASE_OSSZES magatartasErtek ON magatartasErtek.ID = te.C_MAGATARTASERTEKID
AND magatartasErtek.C_TANEVID = @pTanevId
AND magatartasErtek.C_TYPE = 'MagatartasErtekelesTipus'
AND magatartasErtek.TOROLT='F'
LEFT JOIN T_DICTIONARYITEMBASE_OSSZES szorgalomErtek ON szorgalomErtek.ID = te.C_SZORGALOMERTEKID
AND szorgalomErtek.C_TANEVID = @pTanevId
AND szorgalomErtek.C_TYPE = 'SzorgalomErtekelesTipus'
AND szorgalomErtek.TOROLT='F'
WHERE te.C_TANEVID = @pTanevId
AND te.TOROLT = 'F'
AND C_TIPUSID = @pErtekelestipusaId
AND ISNULL(tgy.C_TARGYKATEGORIA,0) <> 1248
INSERT INTO #osztalyokErtekeles (
OSZTALYID
,TANTARGYID
,ATLAG
)
SELECT
OsztalyId
,TantargyId
,ROUND(AVG(CAST(Osztalyzat AS float)), 2) AS ATLAG
FROM #tempOsztalyErtekelesek AS ERTEKELESEK
WHERE TantargyId IS NOT NULL
AND Osztalyzat IS NOT NULL
GROUP BY OsztalyId,TantargyId
--MAGATARTAS-SZORGALOM LISTA
INSERT INTO #osztalyokMagszorg (
OSZTALYID
,MAGATLAG
,SZORGATLAG
)
SELECT
OsztalyId
,ROUND(AVG(CAST(MagatartasOsztalyzat AS float)), 2) AS MAGATLAG
,ROUND(AVG(CAST(SzorgalomOsztalyzat AS float)), 2) AS SZORGATLAG
FROM #tempOsztalyErtekelesek AS ERTEKELESEK
WHERE TantargyId IS NULL
AND SzorgalomOsztalyzat IS NOT NULL
AND MagatartasOsztalyzat IS NOT NULL
GROUP BY OsztalyId
CREATE TABLE #OsztalyHozottMulasztas (
OsztalyID int
,Gyakorlati char(1)
,HozottIgazolt int
,HozottIgazolatlan int
)
INSERT INTO #OsztalyHozottMulasztas (
OsztalyID
,HozottIgazolt
,HozottIgazolatlan
)
SELECT
o.OsztalyId
,SUM(IIF(tcs.C_BELEPESDATUM < IdoszaKVege,ISNULL(tta.C_HOZOTTIGAZOLTHIANYZAS,0),0))
,SUM(IIF(tcs.C_BELEPESDATUM < IdoszaKVege,ISNULL(tta.C_HOZOTTIGAZOLATLANHIANYZAS,0),0))
FROM #tempOsztalyok o
INNER JOIN T_OSZTALYCSOPORT_OSSZES ocs ON ocs.ID = o.OsztalyId AND ocs.TOROLT = 'F'
INNER JOIN T_TANULOCSOPORT_OSSZES tcs ON tcs.C_OSZTALYCSOPORTID = ocs.ID AND ocs.C_TANEVID = @pTanevId AND tcs.TOROLT = 'F'
INNER JOIN T_TANULOTANUGYIADATOK tta ON tta.C_TANULOCSOPORTID = tcs.ID AND tta.C_TANEVID = @pTanevId AND tta.TOROLT = 'F'
GROUP BY o.OsztalyId
UPDATE mul
SET MulasztasokSzama += hmul.HozottIgazolt
FROM #OsztalyHozottMulasztas hmul
INNER JOIN #tempMulasztas mul on hmul.OsztalyID = mul.OsztalyId
WHERE mul.Gyakorlati = 'F' AND mul.IGAZOLT = 'T' AND mul.TIPUS = 1500
UPDATE mul
SET MulasztasokSzama += hmul.HozottIgazolatlan
FROM #OsztalyHozottMulasztas hmul
INNER JOIN #tempMulasztas mul on hmul.OsztalyID = mul.OsztalyId
WHERE mul.Gyakorlati = 'F' AND mul.IGAZOLT = 'F' AND mul.TIPUS = 1500
UPDATE #tempMulasztas SET
MulasztasokSzama = NULL
WHERE KESESPERC IS NOT NULL
SELECT
OsztalyId
,OsztalyNev
,Letszam
FROM #tempOsztalyok
ORDER BY Sorrend,OsztalyNev
SELECT
TantargyId
,TantargyNev
FROM #tantargyak
ORDER BY TargyKategoriaSorszam,TantargyNev
SELECT
tgy.TantargyId
,o.Osztalyid
,o.OsztalyNev
,tgy.TantargyNev
,ert.Atlag
FROM #tantargyak tgy
INNER JOIN #osztalyokErtekeles ert ON ert.TantargyId = tgy.TantargyId
INNER JOIN #tempOsztalyok o ON o.OsztalyId = ert.OsztalyId
UNION
SELECT
tgy.TantargyId
,o.Osztalyid
,o.OsztalyNev
,tgy.TantargyNev
,mag.MagAtlag
FROM #tantargyak tgy
INNER JOIN #osztalyokMagszorg mag ON tgy.TantargyId = -1
INNER JOIN #tempOsztalyok o ON o.OsztalyId = mag.OsztalyId
UNION
SELECT
tgy.TantargyId
,o.Osztalyid
,o.OsztalyNev
,tgy.TantargyNev
,szorg.SzorgAtlag
FROM #tantargyak tgy
INNER JOIN #osztalyokMagszorg szorg ON tgy.TantargyId = -2
INNER JOIN #tempOsztalyok o ON o.OsztalyId = szorg.OsztalyId
IF @pElmeletgyakorlat = 0
BEGIN
SELECT
OsztalyId
,Tipus
,Igazolt
,SUM(KESESPERC)/45 as Késés
,SUM(MulasztasokSzama) as Mulasztás
FROM #tempMulasztas
GROUP BY OsztalyId,Tipus,Igazolt
END
ELSE
BEGIN
SELECT
OsztalyId
,Tipus
,Igazolt
,Gyakorlati
,SUM(KESESPERC)/45 as Késés
,SUM(MulasztasokSzama) as Mulasztás
FROM #tempMulasztas
GROUP BY OsztalyId,Tipus,Igazolt,Gyakorlati
END
END
GO