kreta/Kreta.DataAccess.Migrations/Scripts/Archive/20200423110024_KRETA2_3886/uspGetDokumentumErtekelesekIdoszakonkent.sql
2024-03-13 00:33:46 +01:00

519 lines
No EOL
15 KiB
Transact-SQL

DROP PROCEDURE IF EXISTS uspGetDokumentumErtekelesekIdoszakonkent
GO
CREATE PROCEDURE uspGetDokumentumErtekelesekIdoszakonkent
@tanevId int
,@osztalyCsoportId int
,@ertekelesTipusa int
,@csakTanorai bit
,@csakKivalasztottOsztalyCsoport bit
,@atsoroltTanuloErtekelesek int
,@fuggolegesTantargyak bit
,@isMegjegyzesMegjelenjen bit = 1
,@intezmenyId int
AS
BEGIN
SET NOCOUNT ON;
/* a #students tábla deklarálása az alábbi tároltakban történik: sp_GetOsztalynaplo, sp_GetCsoportNaplo, sp_GetUzenofuzetErtekelolap*/
DECLARE @FelevVegeHonap int,
@FelevVegeNap int
SELECT
@FelevVegeHonap = DATEPART(mm, C_DATUM)
,@FelevVegeNap = DATEPART(dd, C_DATUM)
FROM T_TANEVRENDJE_OSSZES
WHERE
C_NAPTIPUSA = 1400
AND TOROLT = 'F'
AND C_TANEVID = @tanevid
SELECT
Tipus
,Honap
,TanuloId
,TanuloCsoportId
,Ertekeles
,Datum
,RogzitesDatum
INTO #magatartasSzorgalomTMP
FROM
(SELECT
'Magatartás' Tipus
,CASE
WHEN DATEPART(mm, Datum) = @FelevVegeHonap AND DATEPART(DD, Datum) <= @FelevVegeNap THEN 13
WHEN DATEPART(mm, Datum) = @FelevVegeHonap AND DATEPART(DD, Datum) > @FelevVegeNap THEN 14
ELSE
DATEPART(mm, Datum)
END AS Honap
,TanuloId
,TanuloCsoportId
,ISNULL(MagatartasErtek, MagatartasOsztalyzatNev)
+ CASE
WHEN TipusId = 1518 THEN ''
WHEN TipusId = 1522 THEN '(I.)'
WHEN TipusId = 1523 THEN '(III.)'
WHEN TipusId = 1524 THEN '(II.)'
WHEN TipusId = 1525 THEN '(IV.)'
END AS Ertekeles
,Datum
,RogzitesDatum
FROM #ErtekelesekTemp
WHERE
(MagatartasErtek IS NOT NULL OR MagatartasOsztalyzatNev IS NOT NULL)
AND TipusId IN (1518, 1522, 1523, 1524, 1525)
UNION ALL
SELECT
'Szorgalom'
,CASE
WHEN DATEPART(mm, Datum) = @FelevVegeHonap AND DATEPART(DD, Datum) <= @FelevVegeNap THEN 13
WHEN DATEPART(mm, Datum) = @FelevVegeHonap AND DATEPART(DD, Datum) > @FelevVegeNap THEN 14
ELSE
DATEPART(mm, Datum)
END AS Honap
,TanuloId
,TanuloCsoportId
,ISNULL(SzorgalomErtek, SzorgalomOsztalyzatNev)
+ CASE
WHEN TipusId = 1518 THEN ''
WHEN TipusId = 1522 THEN '(I.)'
WHEN TipusId = 1523 THEN '(III.)'
WHEN TipusId = 1524 THEN '(II.)'
WHEN TipusId = 1525 THEN '(IV.)'
END AS Ertekeles
,Datum
,RogzitesDatum
FROM #ErtekelesekTemp
WHERE
(SzorgalomErtek IS NOT NULL OR SzorgalomOsztalyzatNev IS NOT NULL)
AND TipusId IN (1518, 1522, 1523, 1524, 1525)
UNION ALL
SELECT
'Szorgalom'
,15 Honap
,TanuloId
,TanuloCsoportId
,COALESCE(SzorgalomErtek, SzorgalomOsztalyzatNev, SzorgalomSzovegRovidNev) + Jeloles
,Datum
,RogzitesDatum
FROM #ErtekelesekTemp
WHERE
(SzorgalomErtek IS NOT NULL OR SzorgalomOsztalyzatNev IS NOT NULL OR SzorgalomSzovegRovidNev IS NOT NULL)
AND TipusId = 1519
UNION ALL
SELECT
'Magatartás'
,15 Honap
,TanuloId
,TanuloCsoportId
,COALESCE(MagatartasErtek, MagatartasOsztalyzatNev, MagatartasSzovegRovidNev) + Jeloles
,Datum
,RogzitesDatum
FROM #ErtekelesekTemp
WHERE
(MagatartasErtek IS NOT NULL OR MagatartasOsztalyzatNev IS NOT NULL OR MagatartasSzovegRovidNev IS NOT NULL)
AND TipusId = 1519
UNION ALL
SELECT
'Szorgalom'
,16 Honap
,TanuloId
,TanuloCsoportId
,COALESCE(SzorgalomErtek, SzorgalomOsztalyzatNev, SzorgalomSzovegRovidNev) + Jeloles
,Datum
,RogzitesDatum
FROM #ErtekelesekTemp
WHERE
(SzorgalomErtek IS NOT NULL OR SzorgalomOsztalyzatNev IS NOT NULL OR SzorgalomSzovegRovidNev IS NOT NULL)
AND TipusId = 1520
UNION ALL
SELECT
'Magatartás'
,16 Honap
,TanuloId
,TanuloCsoportId
,COALESCE(MagatartasErtek, MagatartasOsztalyzatNev, MagatartasSzovegRovidNev) + Jeloles
,Datum
,RogzitesDatum
FROM #ErtekelesekTemp
WHERE
(MagatartasErtek IS NOT NULL OR MagatartasOsztalyzatNev IS NOT NULL OR MagatartasSzovegRovidNev IS NOT NULL)
AND TipusId = 1520
)magszorg
SELECT DISTINCT
Honap
,TanuloId
,TanuloCsoportId
,Tipus
,STUFF((
SELECT ', ' + CAST(Ertekeles AS nvarchar(max))
FROM #magatartasSzorgalomTMP bmsz
WHERE
msz.TanuloId = bmsz.TanuloId
AND msz.Tipus = bmsz.Tipus
AND msz.Honap = bmsz.Honap
AND msz.TanuloCsoportId = bmsz.TanuloCsoportId
ORDER BY bmsz.Datum,bmsz.RogzitesDatum
FOR XML PATH(''), TYPE).value('.', 'nvarchar(max)'), 1, 2,'') Ertekeles
,IIF(Tipus = 'Magatartás', 0, 1) RENDEZ1
,'' RENDEZ2
,0 RENDEZ3
,0 RENDEZ4
,'' RENDEZ5
,CASE
WHEN Honap = 2 THEN 8
WHEN Honap = 3 THEN 9
WHEN Honap = 4 THEN 10
WHEN Honap = 5 THEN 11
WHEN Honap = 6 THEN 12
WHEN Honap = 9 THEN 1
WHEN Honap = 10 THEN 2
WHEN Honap = 11 THEN 3
WHEN Honap = 12 THEN 4
WHEN Honap = 13 THEN 5
WHEN Honap = 14 THEN 7
WHEN Honap = 15 THEN 6
WHEN Honap = 16 THEN 15
END AS RendezHonap
,Datum
,RogzitesDatum
INTO #magatartasSzorgalom
FROM #magatartasSzorgalomTMP msz
CREATE CLUSTERED INDEX ci111sss on #magatartasSzorgalomTMP (tanulocsoportid)
SELECT
Honap
,TanuloId
,TanuloCsoportId
,TantargyId
,TantargyNev
,Ertekeles
,RENDEZ1
,RENDEZ2
,RENDEZ3
,RENDEZ4
,RENDEZ5
,Datum
,RogzitesDatum
INTO #jegyekTMP
FROM
(SELECT
CASE
WHEN DATEPART(mm, Datum) = @FelevVegeHonap AND DATEPART(DD, Datum) <= @FelevVegeNap THEN 13
WHEN DATEPART(mm, Datum) = @FelevVegeHonap AND DATEPART(DD, Datum) > @FelevVegeNap THEN 14
ELSE
DATEPART(mm, Datum)
END AS Honap
,TanuloId
,TanuloCsoportId
,TantargyId
,TantargyNev
,ISNULL(CONVERT(NVARCHAR(MAX),ErtekelesOsztalyzatValue), ErtekelesSzazalek)
+ CASE
WHEN TipusId = 1518 THEN ''
WHEN TipusId = 1522 THEN '(I.)'
WHEN TipusId = 1523 THEN '(III.)'
WHEN TipusId = 1524 THEN '(II.)'
WHEN TipusId = 1525 THEN '(IV.)'
WHEN TipusId = 1521 THEN '(mz)'
WHEN TipusId = 1526 THEN '(pv)'
WHEN TipusId = 1527 THEN '(ov)'
WHEN TipusId = 1528 THEN '(kv)'
WHEN TipusId = 6916 THEN '(pótló v.)'
WHEN TipusId = 6917 THEN '(jv)'
WHEN TipusId = 6918 THEN '(bv)'
ELSE ' ' + LOWER(SUBSTRING(C_NAME, 0, 3))
END AS Ertekeles
,RENDEZ1
,RENDEZ2
,RENDEZ3
,RENDEZ4
,RENDEZ5
,Datum
,RogzitesDatum
FROM #ErtekelesekTemp ertekeles
LEFT JOIN T_DICTIONARYITEMBASE_OSSZES ertekesMod ON ertekeles.TipusId = ertekesMod.ID AND TOROLT = 'F' AND ertekesMod.C_TANEVID = @tanevId
WHERE
isMagatartasSzorgalom = 'F'
AND (ErtekelesOsztalyzatValue IS NOT NULL OR ErtekelesSzazalek IS NOT NULL)
AND TipusId NOT IN (1519, 1520)
UNION ALL
SELECT
CASE
WHEN TipusId = 1519 THEN 15
WHEN TipusId = 1520 THEN 16
WHEN DATEPART(mm, Datum) = @FelevVegeHonap AND DATEPART(DD, Datum) <= @FelevVegeNap THEN 13
WHEN DATEPART(mm, Datum) = @FelevVegeHonap AND DATEPART(DD, Datum) > @FelevVegeNap THEN 14
ELSE
DATEPART(mm, Datum)
END AS Honap
,TanuloId
,TanuloCsoportId
,TantargyId
,TantargyNev
,CASE
WHEN TipusId in (1519, 1520) THEN LOWER(ISNULL(ErtekelesSzovegRovidNev, 'sz'))
WHEN TipusId in (1522, 1523, 1524, 1525) THEN 'sz'
+ CASE
WHEN TipusId = 1522 THEN '(I.)'
WHEN TipusId = 1523 THEN '(III.)'
WHEN TipusId = 1524 THEN '(II.)'
WHEN TipusId = 1525 THEN '(IV.)'
END
ELSE
'sz' + Jeloles
END
AS Ertekeles
,RENDEZ1
,RENDEZ2
,RENDEZ3
,RENDEZ4
,RENDEZ5
,Datum
,RogzitesDatum
FROM #ErtekelesekTemp
WHERE
ErtekelesSzoveg IS NOT NULL
UNION ALL
SELECT
15 Honap
,TanuloId
,TanuloCsoportId
,TantargyId
,TantargyNev
,ISNULL(CONVERT(NVARCHAR(MAX),ErtekelesOsztalyzatValue), ErtekelesSzazalek) + IIF(@isMegjegyzesMegjelenjen = 1, Jeloles, '')
,RENDEZ1
,RENDEZ2
,RENDEZ3
,RENDEZ4
,RENDEZ5
,Datum
,RogzitesDatum
FROM #ErtekelesekTemp
WHERE
isMagatartasSzorgalom = 'F'
AND (ErtekelesOsztalyzatValue IS NOT NULL OR ErtekelesSzazalek IS NOT NULL)
AND TipusId = 1519
UNION ALL
SELECT
16 Honap
,TanuloId
,TanuloCsoportId
,TantargyId
,TantargyNev
,ISNULL(CONVERT(NVARCHAR(MAX),ErtekelesOsztalyzatValue), ErtekelesSzazalek) + IIF(@isMegjegyzesMegjelenjen = 1, Jeloles, '')
,RENDEZ1
,RENDEZ2
,RENDEZ3
,RENDEZ4
,RENDEZ5
,Datum
,RogzitesDatum
FROM #ErtekelesekTemp
WHERE
isMagatartasSzorgalom = 'F'
AND (ErtekelesOsztalyzatValue IS NOT NULL OR ErtekelesSzazalek IS NOT NULL)
AND TipusId = 1520
)jegyek
CREATE CLUSTERED INDEX ci111ssws on #jegyekTMP (tanulocsoportid)
-----------------------------------------------------------------------------------------------
INSERT INTO #jegyekTMP
SELECT
Honap
,TanuloId
,TanuloCsoportId
,NULL AS TantargyId
,a.Tipus
,Ertekeles
,IIF(a.Tipus = 'Magatartás', 0, 1) RENDEZ1
,'' AS RENDEZ2
,0 AS RENDEZ3
,0 AS RENDEZ4
,'' AS RENDEZ5
,Datum
,RogzitesDatum
FROM #magatartasSzorgalomTmp a
-- Összeszedjük az összes Tanuló/Tanulócsoport/Hónap-ot
SELECT
tcs.C_TANULOID AS ID
,Honap
,tcs.ID AS TanuloCsoportId
INTO #TanuloIdHonap
FROM T_TANULOCSOPORT_OSSZES tcs
CROSS JOIN (VALUES (2),(3),(4),(5),(6),(9),(10),(11),(12),(13),(14),(15),(16)) Honap (Honap)
WHERE tcs.C_OSZTALYCSOPORTID = @osztalycsoportId
INSERT INTO #Tantargyak
EXEC uspGetDokumentumTantargyakErtekeleshez @intezmenyId, @tanevId, @osztalyCsoportId, @csakKivalasztottOsztalyCsoport
SELECT
tih.Id AS TanuloId
,tih.TanuloCsoportId AS TanuloCsoportId
,tih.Honap AS Honap
,t.C_NEV AS TantargyNev
,t.ID AS TantargyId
,t.RENDEZ1
,t.RENDEZ2
,t.RENDEZ3
,t.RENDEZ4
,t.RENDEZ5
INTO #TanuloTantargyHonapTmp
FROM #TanuloIdHonap tih
INNER JOIN #Tantargyak t ON t.c_tanuloid = tih.Id and t.c_tanulocsoportid = tih.TanuloCsoportId
-----------------------------------------------------------------------------------------------------------
SELECT DISTINCT
TanuloIdHonap.Honap
,TanuloIdHonap.TanuloId
,TanuloIdHonap.TanuloCsoportId
,TanuloIdHonap.TantargyId
,TanuloIdHonap.TantargyNev
,STUFF((
SELECT ', ' + CAST(Ertekeles AS nvarchar(max))
FROM #jegyekTMP bjegyekTMP
WHERE
jegyekTMP.TanuloId = bjegyekTMP.TanuloId
AND jegyekTMP.TanuloCsoportId = bjegyekTMP.TanuloCsoportId
AND jegyekTMP.TantargyNev = bjegyekTMP.TantargyNev
AND jegyekTMP.Honap = bjegyekTMP.Honap
ORDER BY Datum, RogzitesDatum
FOR XML PATH(''), TYPE).value('.', 'nvarchar(max)'), 1, 2,'') Ertekeles
,TanuloIdHonap.RENDEZ1
,TanuloIdHonap.RENDEZ2
,TanuloIdHonap.RENDEZ3
,TanuloIdHonap.RENDEZ4
,TanuloIdHonap.RENDEZ5
,CASE
WHEN TanuloIdHonap.Honap = 2 THEN 8
WHEN TanuloIdHonap.Honap = 3 THEN 9
WHEN TanuloIdHonap.Honap = 4 THEN 10
WHEN TanuloIdHonap.Honap = 5 THEN 11
WHEN TanuloIdHonap.Honap = 6 THEN 12
WHEN TanuloIdHonap.Honap = 9 THEN 1
WHEN TanuloIdHonap.Honap = 10 THEN 2
WHEN TanuloIdHonap.Honap = 11 THEN 3
WHEN TanuloIdHonap.Honap = 12 THEN 4
WHEN TanuloIdHonap.Honap = 13 THEN 5
WHEN TanuloIdHonap.Honap = 14 THEN 7
WHEN TanuloIdHonap.Honap = 15 THEN 6
WHEN TanuloIdHonap.Honap = 16 THEN 15
END AS RendezHonap
INTO #jegyek
FROM #TanuloTantargyHonapTmp TanuloIdHonap
LEFT JOIN #jegyekTMP jegyekTMP ON TanuloIdHonap.TanuloId = jegyekTMP.TanuloId
AND TanuloIdHonap.Honap = jegyekTMP.Honap
AND TanuloIdHonap.TanuloCsoportId = jegyekTMP.TanuloCsoportId
AND TanuloIdHonap.TantargyNev = jegyekTMP.TantargyNev
IF @fuggolegesTantargyak = 1
BEGIN
DECLARE @tantargyakJegyek NVARCHAR(MAX)
DECLARE @tantargyakNevvelJegyek NVARCHAR(MAX)
SELECT @tantargyakNevvelJegyek = ISNULL(@tantargyakNevvelJegyek + ', ', '') + '[' + CAST(t.TantargyId AS NVARCHAR(MAX)) + '] AS [' + t.TantargyNev + ']',
@tantargyakJegyek = ISNULL(@tantargyakJegyek + ', ', '[0], [1],') + '[' + CAST(t.TantargyId AS NVARCHAR(MAX)) + ']'
FROM (SELECT DISTINCT TantargyId, IIF(LEN(t.c_nev) > 128, SUBSTRING(t.C_NEV,1,120) + '...', t.c_nev) AS TantargyNev, RENDEZ1
,RENDEZ2 ,RENDEZ3, RENDEZ4, RENDEZ5 FROM #jegyek j INNER JOIN T_TANTARGY_OSSZES t ON t.Id = j.TantargyId ) t
ORDER BY RENDEZ1, RENDEZ2, RENDEZ3, RENDEZ4, RENDEZ5
DECLARE @sqlJegyek NVARCHAR(MAX)
SET @sqlJegyek = '
SELECT
TanuloId tanuloID
,TanuloCsoportId
,CASE
WHEN Honap = 2 THEN ''02.''
WHEN Honap = 3 THEN ''03.''
WHEN Honap = 4 THEN ''04.''
WHEN Honap = 5 THEN ''05.''
WHEN Honap = 6 THEN ''06.''
WHEN Honap = 9 THEN ''09.''
WHEN Honap = 10 THEN ''10.''
WHEN Honap = 11 THEN ''11.''
WHEN Honap = 12 THEN ''12.''
WHEN Honap = 13 THEN ''1/I.''
WHEN Honap = 14 THEN ''1/II.''
WHEN Honap = 15 THEN ''F''
WHEN Honap = 16 THEN ''É''
END AS periodusNev
,piv.[0] AS Magatartás
,piv.[1] AS Szorgalom
,' + @tantargyakNevvelJegyek + '
FROM
(
SELECT
CASE
WHEN TantargyNev = ''Magatartás'' THEN 0
WHEN TantargyNev = ''Szorgalom'' THEN 1
ELSE TantargyId
END AS TantargyId
,Honap
,s.ID TanuloId
,s.TanuloCsoportId
,Ertekeles
,RendezHonap
FROM #jegyek j
INNER JOIN #studentsWithTanuloCsoport s on j.Tanuloid = s.ID AND s.TanuloCsoportId = j.TanuloCsoportId
)a
PIVOT (MAX(Ertekeles) FOR TantargyId in (' + @tantargyakJegyek + ')) piv
ORDER BY RendezHonap
'
IF (@tantargyakJegyek IS NULL)
BEGIN
SELECT 0 AS tanuloId, 0 as TanuloCsoportId
END
ELSE
BEGIN
EXEC sp_executesql @sqlJegyek
END
END
ELSE
BEGIN
SELECT
TanuloId
,TanuloCsoportId
,TantargyNev AS Tipus
,RENDEZ1
,RENDEZ2
,RENDEZ3
,RENDEZ4
,RENDEZ5
,[9],[10],[11],[12],[2],[3],[4],[5],[6],[13],[14],[15],[16]
FROM (
SELECT jegyek.TanuloId
,ISNULL(tanulok.TanuloCsoportId
,(SELECT TOP 1 ID FROM T_TANULOCSOPORT_OSSZES AS tcs
WHERE tcs.C_TANULOID = jegyek.TanuloId AND tcs.C_OSZTALYCSOPORTID = @osztalyCsoportId)
) AS TanuloCsoportId, Ertekeles, Honap, TantargyId, TantargyNev, RENDEZ1, RENDEZ2, RENDEZ3, RENDEZ4, RENDEZ5
FROM #jegyek AS jegyek
LEFT JOIN fnGetDokumentumOsztalyokCsoportokTanuloi(@tanevId, @osztalycsoportId, 'T') AS tanulok ON
tanulok.TanuloId = jegyek.TanuloId AND tanulok.TanuloCsoportId = jegyek.TanuloCsoportId
) j
PIVOT (MAX(Ertekeles) FOR Honap IN ([9],[10],[11],[12],[2],[3],[4],[5],[6],[13],[14],[15],[16])) piv
ORDER BY TanuloId, RENDEZ1, RENDEZ2, RENDEZ3, RENDEZ4, RENDEZ5, Tipus
END
END
GO