kreta/Kreta.DataAccess.Migrations/DBScripts/Database/dbo/Stored procedures/uspGetDokumentumTantargyakErtekeleshez.sql
2024-03-13 00:33:46 +01:00

215 lines
8.3 KiB
Transact-SQL

DROP PROCEDURE IF EXISTS uspGetDokumentumTantargyakErtekeleshez
GO
CREATE PROCEDURE uspGetDokumentumTantargyakErtekeleshez
@intezmenyId int
,@tanevId int
,@osztalyCsoportId int
,@csakKivalasztottOsztalyCsoport bit
,@osztalyzatTipusTypeID int = 44
,@magatartasErtekelesTipusTypeID int = 50
,@szorgalomErtekelesTipusTypeID int = 51
,@pIsKellKapcsolodoOsztalyCsoportok bit = 0
AS
BEGIN
SET NOCOUNT ON;
DECLARE
@evfolyamTipusId int = (SELECT C_EVFOLYAMTIPUSA FROM T_OSZTALYCSOPORT_OSSZES WHERE ID = @osztalyCsoportId AND TOROLT = 'F')
,@elsoNap datetime
,@utolsoNap datetime
DECLARE @feladatKategoriaId int = (SELECT C_FELADATKATEGORIAID FROM T_OSZTALYCSOPORT_OSSZES WHERE ID = @osztalyCsoportId AND TOROLT = 'F')
SELECT @elsoNap = C_KEZDONAP, @utolsoNap = C_UTOLSONAP FROM T_TANEV_OSSZES WHERE ID = @tanevId AND TOROLT = 'F'
CREATE TABLE #kapcsolodoOsztalycsoportok (OsztalyCsoportId INT PRIMARY KEY)
IF @pIsKellKapcsolodoOsztalyCsoportok = 1
BEGIN
INSERT INTO #kapcsolodoOsztalycsoportok (OsztalyCsoportId)
SELECT
OsztalyCsoportok.Id
FROM fnGetDokumentumKapcsolodoOsztalyCsoportokByDateRange (@osztalyCsoportId, @ElsoNap, @utolsoNap, @intezmenyId, @tanevId) OsztalyCsoportok
INNER JOIN fnGetDokumentumOsztalyVagyTanoraiCsoport(@tanevId) TanoraiCeluOsztalyCsoportok on TanoraiCeluOsztalyCsoportok.ID = OsztalyCsoportok.Id
END
ELSE
BEGIN
INSERT INTO #kapcsolodoOsztalycsoportok (OsztalyCsoportId)
VALUES (@osztalyCsoportId)
END
CREATE TABLE #KapcsopodoTantargy(
ID int
,C_FOTARGYID int
,C_NEV nvarchar(255)
,C_NEVNYOMTATVANYBAN nvarchar(255)
,C_TARGYKATEGORIA int
,C_INTEZMENYID int
,C_TANEVID int
,C_SORSZAM int
)
INSERT INTO #KapcsopodoTantargy
SELECT
kt.ID
,kt.C_FOTARGYID
,kt.C_NEV
,t.C_NEVNYOMTATVANYBAN
,kt.C_TARGYKATEGORIA
,kt.C_INTEZMENYID
,kt.C_TANEVID
,t.C_SORSZAM
FROM dbo.fnGetKapcsolodoTantargyak(@intezmenyId, @tanevId, NULL) AS kt
INNER JOIN T_TANTARGY_OSSZES AS t ON t.ID = kt.ID AND t.TOROLT = 'F';
-- Összeszedjük minden tanuló-tanulócsoporthoz a tárgyakat
WITH tantargy_CTE (C_TANTARGYID, C_FOTARGYID, C_TANULOID, C_TANULOCSOPORTID, C_INTEZMENYID, C_TANEVID)
AS (
-- TTF-es tárgyak
SELECT
Foglalkozas.C_TANTARGYID
,Tantargy.C_FOTARGYID
,f.ID AS c_tanuloid
,tcsOsztaly.ID AS C_TANULOCSOPORTID
,Tantargy.C_INTEZMENYID
,Tantargy.C_TANEVID
FROM T_FOGLALKOZAS_OSSZES Foglalkozas
INNER JOIN T_TANTARGY_OSSZES Tantargy ON Tantargy.C_INTEZMENYID = Foglalkozas.C_INTEZMENYID
AND Tantargy.C_TANEVID = Foglalkozas.C_TANEVID
AND Tantargy.TOROLT = 'F'
AND Tantargy.ID = Foglalkozas.C_TANTARGYID
INNER JOIN T_TANULOCSOPORT_OSSZES tcs ON tcs.C_OSZTALYCSOPORTID = Foglalkozas.C_OSZTALYCSOPORTID
AND tcs.TOROLT = 'F'
INNER JOIN T_OSZTALYCSOPORT_OSSZES ocs ON ocs.ID = tcs.C_OSZTALYCSOPORTID AND ocs.TOROLT = 'F' AND ocs.C_FELADATKATEGORIAID = @feladatKategoriaId
INNER JOIN T_FELHASZNALO_OSSZES f ON f.ID = tcs.C_TANULOID AND f.TOROLT = 'F'
INNER JOIN T_TANULOCSOPORT_OSSZES tcsOsztaly ON tcsOsztaly.C_OSZTALYCSOPORTID = @osztalyCsoportId
AND tcsOsztaly.C_TANULOID = f.ID
AND tcsOsztaly.TOROLT = 'F'
INNER JOIN #kapcsolodoOsztalycsoportok kapcsolodoOsztalycsoportok ON kapcsolodoOsztalycsoportok.OsztalyCsoportId = Foglalkozas.C_OSZTALYCSOPORTID
WHERE
(tcsOsztaly.C_KILEPESDATUM IS NULL OR tcsOsztaly.C_KILEPESDATUM > tcs.C_BELEPESDATUM)
AND Foglalkozas.C_INTEZMENYID = @intezmenyId
AND Foglalkozas.C_TANEVID = @tanevId
AND Foglalkozas.TOROLT = 'F'
UNION
-- ttf-ben nem szereplő tárgyak
SELECT
OrarendiOra.C_TANTARGYID
,Tantargy.C_FOTARGYID
,f.ID AS C_TANULOID
,tcsOsztaly.ID AS C_TANULOCSOPORTID
,Tantargy.C_INTEZMENYID
,Tantargy.C_TANEVID
FROM T_ORARENDIORA_OSSZES OrarendiOra
INNER JOIN T_TANTARGY_OSSZES Tantargy ON Tantargy.C_INTEZMENYID = OrarendiOra.C_INTEZMENYID
AND Tantargy.C_TANEVID = OrarendiOra.C_TANEVID
AND Tantargy.TOROLT = 'F'
AND Tantargy.ID = OrarendiOra.C_TANTARGYID
INNER JOIN T_TANULOCSOPORT_OSSZES tcs ON tcs.C_OSZTALYCSOPORTID = OrarendiOra.C_OSZTALYCSOPORTID
AND (tcs.C_BELEPESDATUM < OrarendiOra.C_ORAERVENYESSEGVEGE AND (tcs.C_KILEPESDATUM IS NULL OR tcs.C_KILEPESDATUM >= OrarendiOra.C_ORAERVENYESSEGKEZDETE))
AND tcs.TOROLT = 'F'
INNER JOIN T_OSZTALYCSOPORT_OSSZES ocs ON ocs.ID = tcs.C_OSZTALYCSOPORTID AND ocs.TOROLT = 'F' AND ocs.C_FELADATKATEGORIAID = @feladatKategoriaId
INNER JOIN T_FELHASZNALO_OSSZES f ON f.ID = tcs.C_TANULOID AND f.TOROLT = 'F'
INNER JOIN T_TANULOCSOPORT_OSSZES tcsOsztaly ON tcsOsztaly.C_OSZTALYCSOPORTID = @osztalyCsoportId
AND (tcsOsztaly.C_BELEPESDATUM < OrarendiOra.C_ORAERVENYESSEGVEGE AND (tcsOsztaly.C_KILEPESDATUM IS NULL OR tcsOsztaly.C_KILEPESDATUM >= OrarendiOra.C_ORAERVENYESSEGKEZDETE))
AND tcsOsztaly.C_TANULOID = f.ID
AND tcsOsztaly.TOROLT = 'F'
WHERE
(tcsOsztaly.C_KILEPESDATUM IS NULL OR tcsOsztaly.C_KILEPESDATUM > tcs.C_BELEPESDATUM)
AND OrarendiOra.C_INTEZMENYID = @intezmenyId
AND OrarendiOra.C_TANEVID = @tanevId
AND OrarendiOra.TOROLT = 'F'
AND OrarendiOra.C_OSZTALYCSOPORTID = @osztalyCsoportId
UNION
-- Értékelést kapott tárgyak
SELECT DISTINCT
TanuloErtekeles.TantargyId
,TanuloErtekeles.FotargyId
,TanuloErtekeles.TanuloId
,TanuloErtekeles.TanuloCsoportId AS C_TANULOCSOPORTID
,@intezmenyId
,@tanevId
FROM fnGetDokumentumErtekelesekOsztalyonkent(@tanevId, @osztalyCsoportId, DEFAULT, DEFAULT, @csakKivalasztottOsztalyCsoport, DEFAULT, DEFAULT, @osztalyzatTipusTypeID, @magatartasErtekelesTipusTypeID, @szorgalomErtekelesTipusTypeID) AS TanuloErtekeles
)
SELECT
NULL
,NULL
,'Magatartás'
,''
,0
,f.ID
,tcs.ID
,0
,0
,''
,0
,0
,''
,@intezmenyId
,@tanevId
FROM T_TANULOCSOPORT_OSSZES tcs
LEFT JOIN T_FELHASZNALO_OSSZES f ON f.ID = tcs.C_TANULOID AND f.TOROLT = 'F'
WHERE
tcs.C_OSZTALYCSOPORTID = @osztalyCsoportId
AND tcs.TOROLT = 'F'
UNION ALL
SELECT
NULL
,NULL
,'Szorgalom'
,''
,0
,f.ID
,tcs.ID
,0
,1
,''
,0
,0
,''
,@intezmenyId
,@tanevId
FROM T_TANULOCSOPORT_OSSZES tcs
LEFT JOIN T_FELHASZNALO_OSSZES f ON f.ID = tcs.C_TANULOID AND f.TOROLT = 'F'
WHERE
tcs.C_OSZTALYCSOPORTID = @osztalyCsoportId
AND tcs.TOROLT = 'F'
UNION ALL
SELECT DISTINCT
KapcsopodoTantargy.ID
,KapcsopodoTantargy.C_FOTARGYID
,KapcsopodoTantargy.C_NEV
,KapcsopodoTantargy.C_NEVNYOMTATVANYBAN
,KapcsopodoTantargy.C_TARGYKATEGORIA
,tantargy_CTE.c_tanuloId
,tantargy_CTE.c_tanulocsoportid
,KapcsopodoTantargy.C_SORSZAM
,CASE WHEN KapcsopodoTantargy.C_FOTARGYID IS NULL THEN ISNULL(TargyKategoriaDictionary.C_ORDER, 10000) ELSE ISNULL(FotargyKategoriaDictionary.C_ORDER, 10000) END RENDEZ1
,ISNULL(ISNULL(Fotargy.C_NEVNYOMTATVANYBAN, Fotargy.C_NEV), ISNULL(KapcsopodoTantargy.C_NEVNYOMTATVANYBAN, KapcsopodoTantargy.C_NEV)) AS RENDEZ2
,ISNULL(KapcsopodoTantargy.C_FOTARGYID, KapcsopodoTantargy.ID) AS RENDEZ3
,KapcsopodoTantargy.C_FOTARGYID AS RENDEZ4
,ISNULL(KapcsopodoTantargy.C_NEVNYOMTATVANYBAN, KapcsopodoTantargy.C_NEV) AS RENDEZ5
,KapcsopodoTantargy.C_INTEZMENYID
,KapcsopodoTantargy.C_TANEVID
FROM tantargy_CTE
INNER JOIN #KapcsopodoTantargy KapcsopodoTantargy ON tantargy_CTE.C_TANTARGYID = KapcsopodoTantargy.ID OR tantargy_CTE.C_FOTARGYID = KapcsopodoTantargy.ID
LEFT JOIN T_TANTARGY_OSSZES Fotargy ON Fotargy.C_INTEZMENYID = tantargy_CTE.C_INTEZMENYID
AND Fotargy.C_TANEVID = tantargy_CTE.C_TANEVID
AND Fotargy.TOROLT = 'F'
AND Fotargy.ID = tantargy_CTE.C_FOTARGYID
LEFT JOIN T_DICTIONARYITEMBASE_OSSZES TargyKategoriaDictionary ON TargyKategoriaDictionary.Id = KapcsopodoTantargy.C_TARGYKATEGORIA
AND TargyKategoriaDictionary.TOROLT = 'F'
AND TargyKategoriaDictionary.C_TANEVID = @tanevId
LEFT JOIN T_DICTIONARYITEMBASE_OSSZES FotargyKategoriaDictionary ON FotargyKategoriaDictionary.ID = Fotargy.C_TARGYKATEGORIA
AND FotargyKategoriaDictionary.TOROLT = 'F'
AND FotargyKategoriaDictionary.C_TANEVID = Fotargy.C_TANEVID
END
GO