kreta/Kreta.DataAccess.Migrations/Scripts/Archive/20180124131905_KRETA_150_6/sp_GenerateErtekelesekTempTablaByTanulo.sql
2024-03-13 00:33:46 +01:00

417 lines
13 KiB
Transact-SQL

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF OBJECT_ID('[dbo].[sp_GenerateErtekelesekTempTablaByTanulo]') IS NOT NULL
BEGIN
DROP PROCEDURE [dbo].[sp_GenerateErtekelesekTempTablaByTanulo]
END
GO
-- =============================================
-- Description: <Előszedi a tanulú értékeléseket, havi bontásban tanuló alapján>
-- NOTE: EZT A HÁROM TÁROLT ELJÁRÁST EGYBEN KELL KEZELNI, HA MÓDOSÍTJUK!!!
-- - sp_GenerateErtekelesekTempTabla
-- - sp_GenerateErtekelesekMagatartasSzorgalomTempTabla
-- - sp_GenerateErtekelesekTempTablaByTanulo
-- =============================================
CREATE PROCEDURE [dbo].[sp_GenerateErtekelesekTempTablaByTanulo]
@pTanuloId INT
,@pFotargyAltargyId INT = NULL
,@pFelevVegeDatum DATE
,@pErtekelesTipusEvkozi INT
,@pErtekelesTipusFelevi INT
,@pErtekelesTipusEvvegi INT
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from interfering with SELECT statements.
SET NOCOUNT ON;
DECLARE @TempDictionaryItem TABLE (
ID INT PRIMARY KEY
,C_VALUE INT
,C_ORDER INT
,C_INTEZMENYID INT
,C_TANEVID INT
)
INSERT INTO @TempDictionaryItem
SELECT
ID
,C_VALUE
,C_ORDER
,C_INTEZMENYID
,C_TANEVID
FROM
T_DICTIONARYITEMBASE
WHERE
C_TYPE IN ('OsztalyzatTipus', 'MagatartasErtekelesTipus', 'SzorgalomErtekelesTipus', 'TargyKategoriaTipus')
AND TOROLT = 'F'
DECLARE @OsztalyCsoportIdList TABLE (
ID INT PRIMARY KEY
)
INSERT INTO @OsztalyCsoportIdList (ID)
SELECT C_OSZTALYCSOPORTID ID
FROM T_TANULOCSOPORT
WHERE
C_BELEPESDATUM <= GETDATE()
AND (C_KILEPESDATUM IS NULL OR C_KILEPESDATUM >= GETDATE())
AND TOROLT = 'F'
AND C_TANULOID = @pTanuloId
DECLARE @Tantargyak TABLE (
ID INT PRIMARY KEY
,C_FOTARGYID INT
,C_NEV NVARCHAR(255)
,C_TARGYKATEGORIA INT
);
WITH tantargy_CTE (C_TANTARGYID, C_FOTARGYID)
AS (
SELECT foglalkozas.C_TANTARGYID, tantargy.C_FOTARGYID
FROM T_FOGLALKOZAS foglalkozas
INNER JOIN T_TANTARGY tantargy ON tantargy.ID = foglalkozas.C_TANTARGYID
WHERE
foglalkozas.C_OSZTALYCSOPORTID IN (SELECT ID FROM @OsztalyCsoportIdList)
AND foglalkozas.TOROLT = 'F'
UNION
SELECT orarendiOra.C_TANTARGYID, tantargy.C_FOTARGYID
FROM T_ORARENDIORA orarendiOra
INNER JOIN T_TANTARGY tantargy ON tantargy.ID = orarendiOra.C_TANTARGYID
WHERE
orarendiOra.C_OSZTALYCSOPORTID IN (SELECT ID FROM @OsztalyCsoportIdList)
AND orarendiOra.TOROLT = 'F'
UNION
SELECT C_TANTARGYID, tantargy.C_FOTARGYID
FROM T_TANULOERTEKELES tanuloErtekeles
INNER JOIN T_TANTARGY tantargy ON tantargy.ID = tanuloErtekeles.C_TANTARGYID
WHERE
tanuloErtekeles.C_TANULOID = @pTanuloId
AND tanuloErtekeles.C_TANTARGYID IS NOT NULL
AND tanuloErtekeles.TOROLT = 'F'
)
INSERT INTO @Tantargyak (ID, C_FOTARGYID, C_NEV, C_TARGYKATEGORIA)
SELECT kapcsopodoTantargy.ID, kapcsopodoTantargy.C_FOTARGYID, kapcsopodoTantargy.C_NEV, kapcsopodoTantargy.C_TARGYKATEGORIA
FROM tantargy_CTE
INNER JOIN fnGetKapcsolodoTantargyak(@pFotargyAltargyId) kapcsopodoTantargy ON tantargy_CTE.C_TANTARGYID = kapcsopodoTantargy.ID
WHERE (kapcsopodoTantargy.ID <> @pFotargyAltargyId OR @pFotargyAltargyId IS NULL)
UNION
SELECT kapcsopodoTantargy.ID, kapcsopodoTantargy.C_FOTARGYID, kapcsopodoTantargy.C_NEV, kapcsopodoTantargy.C_TARGYKATEGORIA
FROM tantargy_CTE
INNER JOIN fnGetKapcsolodoTantargyak(@pFotargyAltargyId) kapcsopodoTantargy ON tantargy_CTE.C_FOTARGYID = kapcsopodoTantargy.ID
WHERE (kapcsopodoTantargy.ID <> @pFotargyAltargyId AND @pFotargyAltargyId IS NOT NULL)
DECLARE @TempTanuloErtekeles TABLE (
ID INT
,Datum NVARCHAR(255)
,TipusId INT
,Honap NVARCHAR(2)
,TanuloId INT
,Nev NVARCHAR(255)
,ErtekelesOsztalyzat INT
,ErtekelesSzoveg NVARCHAR(MAX)
,ErtekelesSzovegRovidNev NVARCHAR(3)
,ErtekelesSzazalek INT
,MagatartasOsztalyzat INT
,MagatartasSzoveg NVARCHAR(MAX)
,MagatartasSzovegRovidNev NVARCHAR(3)
,MagatartasErtek INT
,SzorgalomOsztalyzat INT
,SzorgalomSzoveg NVARCHAR(MAX)
,SzorgalomSzovegRovidNev NVARCHAR(3)
,SzorgalomErtek INT
,Suly INT
,TantargyId INT
,TantargyKategoria INT
,FotargyId INT
)
INSERT INTO @TempTanuloErtekeles (
ID
,Datum
,TipusId
,Honap
,TanuloId
,Nev
,ErtekelesOsztalyzat
,ErtekelesSzoveg
,ErtekelesSzovegRovidNev
,ErtekelesSzazalek
,MagatartasOsztalyzat
,MagatartasSzoveg
,MagatartasSzovegRovidNev
,MagatartasErtek
,SzorgalomOsztalyzat
,SzorgalomSzoveg
,SzorgalomSzovegRovidNev
,SzorgalomErtek
,Suly
,TantargyId
,TantargyKategoria
,FotargyId
)
SELECT DISTINCT *
FROM (
SELECT DISTINCT
tanuloErtekeles.ID ID
,tanuloErtekeles.C_DATUM Datum
,tanuloErtekeles.C_TIPUSID TipusId
,CASE WHEN tanuloErtekeles.C_TIPUSID = @pErtekelesTipusFelevi
THEN 'I'
WHEN tanuloErtekeles.C_TIPUSID = @pErtekelesTipusEvvegi
THEN 'II'
ELSE
CASE
WHEN CAST(tanuloErtekeles.C_DATUM AS DATE) > @pFelevVegeDatum
THEN CAST(MONTH(tanuloErtekeles.C_DATUM) + 1 AS NVARCHAR(2))
ELSE CAST(MONTH(tanuloErtekeles.C_DATUM) AS NVARCHAR(2))
END
END Honap
,@pTanuloId TanuloId
,tantargy.C_NEV Nev
,ertekelesOsztalyzat.C_VALUE ErtekelesOsztalyzat
,tanuloErtekeles.C_ERTEKELESSZOVEG ErtekelesSzoveg
,tanuloErtekeles.C_ERTEKELESSZOVEGROVIDNEV ErtekelesSzovegRovidNev
,tanuloErtekeles.C_ERTEKELESSZAZALEK ErtekelesSzazalek
,NULL MagatartasOsztalyzat
,NULL MagatartasSzoveg
,NULL MagatartasSzovegRovidNev
,NULL MagatartasErtek
,NULL SzorgalomOsztalyzat
,NULL SzorgalomSzoveg
,NULL SzorgalomSzovegRovidNev
,NULL SzorgalomErtek
,tanariAtlagSuly.C_SULY Suly
,tantargy.ID TantargyId
,tantargyKategoria.C_ORDER TantargyKategoria
,tantargy.C_FOTARGYID FotargyId
FROM
@Tantargyak AS tantargy
LEFT JOIN
T_TANULOERTEKELES tanuloErtekeles ON
tanuloErtekeles.C_TANULOID = @pTanuloId
AND tanuloErtekeles.TOROLT = 'F'
AND tanuloErtekeles.C_ISMAGATARTASSZORGALOM = 'F'
AND tanuloErtekeles.C_TANTARGYID = tantargy.ID
LEFT JOIN @TempDictionaryItem AS ertekelesOsztalyzat ON ertekelesOsztalyzat.ID = tanuloErtekeles.C_ERTEKELESOSZTALYZATID
LEFT JOIN @TempDictionaryItem AS tantargyKategoria ON tantargyKategoria.ID = tantargy.C_TARGYKATEGORIA
LEFT JOIN
T_TANARIATLAGSULY tanariAtlagSuly ON
tanariAtlagSuly.C_ERTEKELESMODID = tanuloErtekeles.C_ERTEKELESMODID
AND tanuloErtekeles.C_ERTEKELESOSZTALYZATID IS NOT NULL
AND tanariAtlagSuly.TOROLT = 'F'
) AS temp
IF @pFotargyAltargyId IS NULL BEGIN
DECLARE @MagatartasSzorgalom TABLE (
C_NEV NVARCHAR(255)
);
INSERT INTO @MagatartasSzorgalom (C_NEV)
SELECT 'Magatartás/Szorgalom'
INSERT INTO @TempTanuloErtekeles (
ID
,Datum
,TipusId
,Honap
,TanuloId
,Nev
,ErtekelesOsztalyzat
,ErtekelesSzoveg
,ErtekelesSzovegRovidNev
,ErtekelesSzazalek
,MagatartasOsztalyzat
,MagatartasSzoveg
,MagatartasSzovegRovidNev
,MagatartasErtek
,SzorgalomOsztalyzat
,SzorgalomSzoveg
,SzorgalomSzovegRovidNev
,SzorgalomErtek
,Suly
,TantargyId
,TantargyKategoria
,FotargyId
)
SELECT DISTINCT
tanuloErtekeles.ID ID
,tanuloErtekeles.C_DATUM Datum
,tanuloErtekeles.C_TIPUSID TipusId
,CASE WHEN tanuloErtekeles.C_TIPUSID = @pErtekelesTipusFelevi
THEN 'I'
WHEN tanuloErtekeles.C_TIPUSID = @pErtekelesTipusEvvegi
THEN 'II'
ELSE
CASE
WHEN CAST(tanuloErtekeles.C_DATUM AS DATE) > @pFelevVegeDatum
THEN CAST(MONTH(tanuloErtekeles.C_DATUM) + 1 AS NVARCHAR(2))
ELSE CAST(MONTH(tanuloErtekeles.C_DATUM) AS NVARCHAR(2))
END
END Honap
,tanuloErtekeles.C_TANULOID TanuloId
,magatartasSzorgalom.C_NEV Nev
,NULL ErtekelesOsztalyzat
,NULL ErtekelesSzoveg
,NULL ErtekelesSzovegRovidNev
,NULL ErtekelesSzazalek
,magatartasOsztalyzat.C_VALUE MagatartasOsztalyzat
,tanuloErtekeles.C_MAGATARTASSZOVEG MagatartasSzoveg
,tanuloErtekeles.C_MAGATARTASSZOVEGROVIDNEV MagatartasSzovegRovidNev
,magatartasErtek.C_VALUE MagatartasErtek
,szorgalomOsztalyzat.C_VALUE SzorgalomOsztalyzat
,tanuloErtekeles.C_SZORGALOMSZOVEG SzorgalomSzoveg
,tanuloErtekeles.C_SZORGALOMSZOVEGROVIDNEV SzorgalomSzovegRovidNev
,szorgalomErtek.C_VALUE SzorgalomErtek
,100 Suly
,0 AS TantargyId
,0 AS TantargyKategoria
,NULL AS FotargyId
FROM
@MagatartasSzorgalom magatartasSzorgalom
LEFT JOIN
T_TANULOERTEKELES tanuloErtekeles ON
tanuloErtekeles.C_TANULOID = @pTanuloId
AND tanuloErtekeles.TOROLT = 'F'
AND tanuloErtekeles.C_ISMAGATARTASSZORGALOM = 'T'
AND tanuloErtekeles.C_TANTARGYID IS NULL
LEFT JOIN @TempDictionaryItem AS magatartasOsztalyzat ON magatartasOsztalyzat.ID = tanuloErtekeles.C_MAGATARTASOSZTALYZATID
LEFT JOIN @TempDictionaryItem AS szorgalomOsztalyzat ON szorgalomOsztalyzat.ID = tanuloErtekeles.C_SZORGALOMOSZTALYZATID
LEFT JOIN @TempDictionaryItem AS magatartasErtek ON magatartasErtek.ID = tanuloErtekeles.C_MAGATARTASERTEKID
LEFT JOIN @TempDictionaryItem AS szorgalomErtek ON szorgalomErtek.ID = tanuloErtekeles.C_SZORGALOMERTEKID
END
SELECT
result.ID
,Nev
,[09]
,[10]
,[11]
,[12]
,[01I]
,[01II]
,[02]
,[03]
,[04]
,[05]
,[06]
,[I]
,[II]
,Atlag
,TantargyKategoria
,FotargyId
FROM (
SELECT
pivotErtekelesek.TantargyId ID
,Nev Nev
,[9] [09]
,[10] [10]
,[11] [11]
,[12] [12]
,[1] [01I]
,[2] [01II]
,[3] [02]
,[4] [03]
,[5] [04]
,[6] [05]
,[7] [06]
,[I] [I]
,[II] [II]
,atlag.Jegy Atlag
,pivotErtekelesek.TantargyKategoria TantargyKategoria
,pivotErtekelesek.FotargyId FotargyId
FROM (
SELECT DISTINCT
tempErtekeles1.Nev
,STUFF (
(SELECT
','
+ ISNULL(CAST(tempErtekeles2.ErtekelesOsztalyzat AS VARCHAR(1)), '')
+ ISNULL(CAST(
CASE
WHEN tempErtekeles2.ErtekelesSzoveg IS NULL OR LTRIM(RTRIM(REPLACE(REPLACE(REPLACE(tempErtekeles2.ErtekelesSzoveg, CHAR(9), ''), CHAR(10), ''), CHAR(13), ''))) = ''
THEN NULL
ELSE
ISNULL(tempErtekeles2.ErtekelesSzovegRovidNev, 'sz')
END AS VARCHAR(3)), '')
+ ISNULL(CAST(tempErtekeles2.ErtekelesSzazalek AS VARCHAR(3)), '')
+ ISNULL(CAST(tempErtekeles2.MagatartasOsztalyzat AS VARCHAR(1)), '') + ','
+ ISNULL(CAST(tempErtekeles2.SzorgalomOsztalyzat AS VARCHAR(1)), '')
+ ISNULL(CAST(
CASE
WHEN tempErtekeles2.MagatartasSzoveg IS NULL OR LTRIM(RTRIM(REPLACE(REPLACE(REPLACE(tempErtekeles2.MagatartasSzoveg, CHAR(9), ''), CHAR(10), ''), CHAR(13), ''))) = ''
THEN NULL
ELSE
ISNULL(tempErtekeles2.MagatartasSzovegRovidNev, 'sz')
END AS VARCHAR(3)), '') + ','
+ ISNULL(CAST(
CASE
WHEN tempErtekeles2.SzorgalomSzoveg IS NULL OR LTRIM(RTRIM(REPLACE(REPLACE(REPLACE(tempErtekeles2.SzorgalomSzoveg, CHAR(9), ''), CHAR(10), ''), CHAR(13), ''))) = ''
THEN NULL
ELSE
ISNULL(tempErtekeles2.SzorgalomSzovegRovidNev, 'sz')
END AS VARCHAR(3)), '')
+ ISNULL(CAST(tempErtekeles2.MagatartasErtek AS VARCHAR(1)), '') + ','
+ ISNULL(CAST(tempErtekeles2.SzorgalomErtek AS VARCHAR(1)), '')
FROM @TempTanuloErtekeles tempErtekeles2
WHERE tempErtekeles1.TantargyId = tempErtekeles2.TantargyId
AND tempErtekeles1.Honap = tempErtekeles2.Honap
FOR XML PATH ('')
), 1, 1, ''
) TanuloErtekelesList
,tempErtekeles1.Honap
,tempErtekeles1.TanuloId
,tempErtekeles1.TantargyId
,tempErtekeles1.TantargyKategoria
,tempErtekeles1.FotargyId
FROM @TempTanuloErtekeles tempErtekeles1
) AS erdemjegyek
PIVOT (
MAX(TanuloErtekelesList)
FOR Honap
IN ([I], [II], [9] ,[10] ,[11] ,[12] ,[1] ,[2] ,[3] ,[4] ,[5] ,[6], [7])
) AS pivotErtekelesek
LEFT JOIN (
SELECT
TantargyId TantargyId
,ROUND (
SUM(CAST(ErtekelesOsztalyzat AS FLOAT) * CAST(ISNULL(Suly, 100) AS FLOAT) / 100) / SUM(CAST(ISNULL(Suly, 100) AS FLOAT) / 100), 2
) Jegy
FROM
@TempTanuloErtekeles
WHERE
TipusId = @pErtekelesTipusEvkozi
AND ErtekelesOsztalyzat IS NOT NULL
GROUP BY
TantargyId
) AS atlag ON
pivotErtekelesek.TantargyId = atlag.TantargyId
) AS result
LEFT JOIN
T_TANTARGY fotargy ON
result.FotargyId = fotargy.ID
LEFT JOIN @TempDictionaryItem targykategoria
ON targykategoria.ID = fotargy.C_TARGYKATEGORIA
AND targykategoria.C_INTEZMENYID = fotargy.C_INTEZMENYID
AND targykategoria.C_TANEVID = fotargy.C_TANEVID
ORDER BY
CASE WHEN result.FotargyId IS NULL THEN result.TantargyKategoria ELSE ISNULL(targykategoria.C_ORDER, 10000) END
,ISNULL(fotargy.C_NEV, result.Nev)
,ISNULL(result.FotargyId, result.ID)
,result.FotargyId
,result.Nev
END
GO