kreta/Kreta.DataAccess.Migrations/Scripts/Archive/20170327110702_Init/Stored procedures/sp_GetTeremrend.sql
2024-03-13 00:33:46 +01:00

192 lines
No EOL
6.7 KiB
Transact-SQL

IF OBJECT_ID('sp_GetTeremrend') IS NOT NULL
BEGIN
DROP PROCEDURE sp_GetTeremrend
END
GO
CREATE PROCEDURE [sp_GetTeremrend]
@TanevId int,
@IntezmenyId int
AS
BEGIN
SET NOCOUNT ON;
DECLARE @OrarendiOra TABLE (Hetirend int, OraSzam int, Hetnapja int, Terem nvarchar(max), Foglalkozas nvarchar(max)) --Összes órarendi óra
DECLARE @Hetirendek TABLE (Hetirend int) --Összes hetirend
DECLARE @Ures TABLE (Hetirend int, OraSzam int, Hetnapja int, Terem nvarchar(max)) --Összes hetirendhez órasávok generálva
DECLARE @Teljes TABLE (Hetirend int, OraSzam int, Hetnapja int, Terem nvarchar(max), Foglalkozas nvarchar(max)) --@Ures tábla, a létező órákkal kiegészítve
DECLARE @AKTUALISHETELEJE DATE=(SELECT TOP 1 C_HETKEZDONAPJA FROM T_NAPTARIHET
WHERE C_INTEZMENYID=@IntezmenyId AND C_TANEVID=@TANEVID
AND TOROLT='F' AND C_HETKEZDONAPJA<=CONVERT(DATE,GETDATE())
AND C_HETUTOLSONAPJA>=CONVERT(DATE,GETDATE())
)
DECLARE @AKTUALISHETVEGE DATE=( SELECT TOP 1 C_HETUTOLSONAPJA FROM T_NAPTARIHET
WHERE C_INTEZMENYID=@IntezmenyId AND C_TANEVID=@TanevId
AND TOROLT='F' AND C_HETKEZDONAPJA<=CONVERT(DATE,GETDATE())
AND C_HETUTOLSONAPJA>=CONVERT(DATE,GETDATE())
)
-- @Hetirendek tábálába inzertálás
INSERT INTO @Hetirendek
SELECT DISTINCT C_HETIREND
FROM T_ORARENDIORA_OSSZES WHERE TOROLT='F' AND C_TANEVID=@TANEVID AND C_INTEZMENYID=@IntezmenyId
-- @OrarendiOra tábálába inzertálás
INSERT INTO @OrarendiOra
SELECT C_HETIREND,
OrarendiOra.C_ORASZAM,
C_HETNAPJA,
Terem.C_NEV,
--Összefűzi a foglalkozásokat, ha teremre egyszerre több foglalkozás van felvéve egy órára
STUFF(
(SELECT DISTINCT ', ' + ISNULL(CAST(Foglalkozas.C_NEV AS VARCHAR(MAX)),'')
FROM T_ORARENDIORA_OSSZES OrarendiOraFoglalkozas
INNER JOIN T_FOGLALKOZAS_OSSZES Foglalkozas ON Foglalkozas.ID = OrarendiOraFoglalkozas.C_FOGLALKOZASID
where OrarendiOraFoglalkozas.C_TEREMID = OrarendiOra.C_TEREMID AND
(OrarendiOraFoglalkozas.C_HETIREND = OrarendiOra.C_HETIREND OR OrarendiOraFoglalkozas.C_HETIREND = 1554) AND
OrarendiOraFoglalkozas.C_HETNAPJA = OrarendiOra.C_HETNAPJA AND
OrarendiOraFoglalkozas.C_ORASZAM = OrarendiOra.c_oraszam AND
((OrarendiOraFoglalkozas.C_ORAERVENYESSEGKEZDETE<=@AktualisHetEleje) and (OrarendiOraFoglalkozas.c_oraervenyessegvege>=@AktualisHetVege)or
(OrarendiOraFoglalkozas.C_ORAERVENYESSEGKEZDETE>=@AktualisHetEleje) and (OrarendiOraFoglalkozas.C_ORAERVENYESSEGKEZDETE<=@AktualisHetVege)) AND
Foglalkozas.TOROLT = 'F' AND
Foglalkozas.C_INTEZMENYID = @IntezmenyId AND
Foglalkozas.C_TANEVID = @TanevId AND
OrarendiOraFoglalkozas.Torolt ='F' AND
OrarendiOraFoglalkozas.C_TANEVID =@TanevId
FOR XML PATH('')),1,1,''
) AS Foglalkozas
FROM T_ORARENDIORA_OSSZES OrarendiOra
INNER JOIN T_TEREM_OSSZES Terem ON Terem.ID = OrarendiOra.C_TEREMID
WHERE OrarendiOra.C_INTEZMENYID = @IntezmenyId AND
OrarendiOra.C_TANEVID = @TanevId AND
OrarendiOra.TOROLT = 'F' AND
OrarendiOra.C_TEREMID IS NOT NULL
-- @Ures tábálába inzertálás
INSERT INTO @Ures
SELECT HetiRend,
OraSzam,
Hetnapja,
Terem
FROM @Hetirendek
CROSS JOIN (SELECT DISTINCT OraSzam FROM @OrarendiOra) OraSzam (OraSzam)
CROSS JOIN (SELECT DISTINCT Terem FROM @OrarendiOra) Terem (Terem)
CROSS JOIN (SELECT DISTINCT Hetnapja FROM @OrarendiOra) Hetnapja (Hetnapja)
-- @Teljes tábálába inzertálás
INSERT INTO @Teljes
SELECT Ures.*,
OrarendiOra.Foglalkozas
FROM @Ures Ures
LEFT JOIN @OrarendiOra OrarendiOra ON OrarendiOra.Hetirend = Ures.Hetirend AND
OrarendiOra.Hetnapja = Ures.Hetnapja AND
OrarendiOra.OraSzam = Ures.OraSzam AND
OrarendiOra.Terem = Ures.Terem
-- Az Excel nyomtatvány munkalap- és táblázat nevei
SELECT Hetnapja
FROM (SELECT DISTINCT C_NAME Hetnapja,
C_VALUE Sorrend
FROM @OrarendiOra
INNER JOIN T_DICTIONARYITEMBASE_OSSZES DictionaryItemBase on DictionaryItemBase.ID = Hetnapja
) Hetnapja
ORDER BY Sorrend
SELECT Hetirend
FROM (SELECT DISTINCT C_NAME Hetirend,
C_VALUE Sorrend
FROM @Hetirendek
INNER JOIN T_DICTIONARYITEMBASE_OSSZES DictionaryItemBase on DictionaryItemBase.ID = Hetirend
--WHERE DictionaryItemBase.ID <> 1554--Minden hét
) Hetirend
ORDER BY Hetirend
-- @Teljes tábla feltöltése, fő lekérdezés
DECLARE KurzorHetirend CURSOR FOR
SELECT Hetirend
FROM @Hetirendek
--WHERE Hetirend <> 1554
ORDER BY Hetirend
DECLARE @Hetirend INT
DECLARE KurzorHetnapja CURSOR FOR
SELECT DISTINCT Hetnapja
FROM @Ures
ORDER BY Hetnapja
DECLARE @Hetnapja INT
OPEN KurzorHetirend
FETCH NEXT FROM KurzorHetirend INTO @Hetirend
WHILE @@FETCH_STATUS = 0
BEGIN
OPEN KurzorHetnapja
FETCH NEXT FROM KurzorHetnapja INTO @Hetnapja
-- A "Minden hét" óráinak inzertálása minden hetirendbe
INSERT INTO @Teljes
SELECT @Hetirend,
OraSzam,
Hetnapja,
Terem,
Foglalkozas
FROM @OrarendiOra
WHERE Hetirend = 1554
WHILE @@FETCH_STATUS = 0
BEGIN
CREATE table #VeglegesteremOrarend(Terem nvarchar(max), [0] nvarchar(max), [1] nvarchar(max), [2] nvarchar(max), [3] nvarchar(max), [4] nvarchar(max), [5] nvarchar(max),
[6] nvarchar(max), [7] nvarchar(max), [8] nvarchar(max), [9] nvarchar(max), [10] nvarchar(max))
INSERT INTO #VeglegesTeremOrarend
SELECT Vegleges.Terem,
Vegleges.[0],
Vegleges.[1],
Vegleges.[2],
Vegleges.[3],
Vegleges.[4],
Vegleges.[5],
Vegleges.[6],
Vegleges.[7],
Vegleges.[8],
Vegleges.[9],
Vegleges.[10]
FROM @Teljes
PIVOT
(
MAX(Foglalkozas) FOR OraSzam IN ([0],[1],[2],[3],[4],[5],[6],[7],[8],[9],[10])
) Vegleges
WHERE Vegleges.Hetirend = @Hetirend AND
Vegleges.Hetnapja = @Hetnapja
SELECT *
FROM #VeglegesTeremOrarend
DROP TABLE #VeglegesTeremOrarend
FETCH NEXT FROM KurzorHetnapja INTO @Hetnapja
END
FETCH NEXT FROM KurzorHetirend INTO @Hetirend
CLOSE KurzorHetnapja
END
CLOSE KurzorHetirend
DEALLOCATE KurzorHetnapja
DEALLOCATE KurzorHetirend
END
GO