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

201 lines
No EOL
7.5 KiB
Transact-SQL
Raw Blame History

DROP PROCEDURE IF EXISTS sp_GetOrarendKereszttabla_Pedagogus
GO
CREATE PROCEDURE sp_GetOrarendKereszttabla_Pedagogus
@tanevId INT,
@aktivTanevId INT
AS
BEGIN
SET NOCOUNT ON;
DECLARE @UtolsoNap DATE = (SELECT TOP 1 C_DATUM FROM T_TANEVRENDJE_OSSZES WHERE C_NAPTIPUSA=1395 AND C_TANEVID=@tanevid AND TOROLT='F')
,@HetEleje DATE
,@HetVege DATE
IF (@tanevId = @AktivtanevId AND GETDATE() <= @UtolsoNap)
BEGIN
SET @HetEleje = (SELECT TOP 1 nh.C_HETKEZDONAPJA FROM T_NAPTARIHET_OSSZES nh WHERE CONVERT(DATE, GETDATE())>=CONVERT(DATE, NH.C_HETKEZDONAPJA) AND CONVERT(DATE, GETDATE())<=CONVERT(DATE, nh.C_HETUTOLSONAPJA) and nh.TOROLT='F' and nh.C_TANEVID=@tanevid)
SET @HetVege = (SELECT TOP 1 nh.C_HETUTOLSONAPJA FROM T_NAPTARIHET_OSSZES nh WHERE CONVERT(DATE, GETDATE())>=CONVERT(DATE, nh.C_HETKEZDONAPJA) AND CONVERT(DATE, GETDATE())<=CONVERT(DATE, nh.C_HETUTOLSONAPJA) and nh.TOROLT='F' and nh.C_TANEVID=@tanevid)
END
ELSE
BEGIN
SET @HetEleje = (SELECT TOP 1 nh.C_HETKEZDONAPJA FROM T_NAPTARIHET_OSSZES nh WHERE @UtolsoNap>=CONVERT(DATE, nh.C_HETKEZDONAPJA) AND @UtolsoNap<=CONVERT(DATE, nh.C_HETUTOLSONAPJA) AND nh.TOROLT='F' AND nh.C_TANEVID=@tanevId)
SET @HetVege = (SELECT TOP 1 nh.C_HETUTOLSONAPJA FROM T_NAPTARIHET_OSSZES nh WHERE @UtolsoNap>=CONVERT(DATE, nh.C_HETKEZDONAPJA) AND @UtolsoNap<=CONVERT(DATE, nh.C_HETUTOLSONAPJA) AND nh.TOROLT='F' AND nh.C_TANEVID=@tanevId)
END
CREATE TABLE #KapcsolodoCsoportok (OsztalyId INT, OsztalyCsoportId INT)
INSERT INTO #KapcsolodoCsoportok
SELECT DISTINCT
o.ID Osztaly
,k.ID KapcsolodoCsoport
FROM T_OSZTALY_OSSZES o
CROSS APPLY fnGetKapcsolodoOsztalycsoportokByDate(ID, @HetEleje, @HetVege) k
WHERE
o.TOROLT = 'F'
AND o.C_ALTANEVID = @tanevId
DECLARE @PedagogushozKapcsolodoOsszesOrarendiora TABLE (OsztalyId INT, OsztalyCsoportId INT, OrarendiOraId INT, TantargyId INT, PedagogusId INT, TeremId INT, HetirendId INT, HetnapjaId INT, Oraszam INT, OraErvenyessegKezdete DATE, OraErvenyessegVege DATE)
INSERT INTO @PedagogushozKapcsolodoOsszesOrarendiora
SELECT
k.OsztalyId
,K.OsztalyCsoportId
,o.ID
,C_TANTARGYID
,C_TANARID
,C_TEREMID
,C_HETIREND
,C_HETNAPJA
,C_ORASZAM
,C_ORAERVENYESSEGKEZDETE
,C_ORAERVENYESSEGVEGE
FROM #KapcsolodoCsoportok k
LEFT JOIN T_ORARENDIORA_OSSZES o ON o.C_OSZTALYCSOPORTID = k.OsztalyCsoportId
WHERE
TOROLT = 'F'
CREATE TABLE #temp (PedagogusId INT, HetirendId INT, HetirendNev NVARCHAR(MAX), HetnapjaId INT, Oraszam INT, TantargyNev NVARCHAR(MAX), TeremNev NVARCHAR(MAX), OsztalyNev NVARCHAR(MAX))
INSERT INTO #temp
SELECT
OrarendiOra.PedagogusId PedagogusId
,OrarendiOra.HetirendId HetirendId
,hetirend.C_NAME HetirendNev
,OrarendiOra.HetnapjaId HetnapjaId
,OrarendiOra.Oraszam Oraszam
,ISNULL(Tantargy.C_NEVNYOMTATVANYBAN, Tantargy.C_NEV) TantargyNev
,Terem.C_NEV TeremNev
,ocs.C_NEV OsztalyNev
FROM @PedagogushozKapcsolodoOsszesOrarendiora OrarendiOra
INNER JOIN T_TANTARGY_OSSZES Tantargy ON Tantargy.Id = OrarendiOra.TantargyId
INNER JOIN T_TEREM_OSSZES Terem ON Terem.Id = OrarendiOra.TeremId
INNER JOIN T_DICTIONARYITEMBASE_OSSZES hetirend ON hetirend.Id = OrarendiOra.HetirendId AND hetirend.C_TANEVID = @tanevId
INNER JOIN T_OSZTALYCSOPORT_OSSZES ocs ON ocs.Id = OrarendiOrA.OsztalyCsoportId
WHERE
OrarendiOra.OraErvenyessegKezdete <= @Hetvege
AND OrarendiOra.OraErvenyessegVege >= @Heteleje
DECLARE @Hetirendek TABLE (Id INT)
INSERT INTO @Hetirendek
SELECT DISTINCT HetirendId FROM #temp
DECLARE @OsszesOra TABLE (PedagogusId INT, Hetirend INT, Nap INT, Oraszam INT)
INSERT INTO @OsszesOra
SELECT DISTINCT PedagogusId, oo.Id, Nap.Nap , OraSzam.OraSzam FROM @Hetirendek oo
CROSS JOIN (SELECT DISTINCT PedagogusId FROM #temp) Pedagogus(PedagogusId)
CROSS JOIN (SELECT DISTINCT Oraszam FROM #temp) OraSzam (OraSzam)
CROSS JOIN (VALUES (1408),(1409),(1410),(1411),(1412),(1413)) Nap (Nap)
DECLARE @TenylegesOra TABLE (PedagogusId INT, Nap INT, OraSzam INT, Foglalkozas NVARCHAR(MAX))
INSERT INTO @TenylegesOra
SELECT
PedagogusId
,HetnapjaId
,Oraszam
,STUFF((SELECT DISTINCT ', ' + CAST(bveg.TantargyNev+' (' +bveg.OsztalyNev+', ' + bveg.TeremNev +', ' +HetirendNev+')' AS VARCHAR(max))
FROM #temp bveg
WHERE
bveg.HetnapjaId=veg.HetnapjaId
AND bveg.Oraszam=veg.Oraszam
AND (bveg.HetirendId=HetirendId OR bveg.HetirendId=1554)
AND bveg.PedagogusId = veg.PedagogusId
FOR XML PATH(''), TYPE)
.value('.','NVARCHAR(MAX)'),1,2,' ') Foglalkozasok
FROM #temp veg
/*V<EFBFBD>gleges <20>rarend*/
CREATE TABLE #Orarend (PedagogusId INT, PedagogusNev NVARCHAR(MAX), Ora INT, Nap INT, Foglalkozas NVARCHAR(MAX))
INSERT INTO #Orarend
SELECT
OsszesOra.PedagogusId
,ped.C_NYOMTATASINEV
,OsszesOra.Oraszam
,OsszesOra.Nap
,TenylegesOra.Foglalkozas
FROM @OsszesOra OsszesOra
LEFT JOIN @TenylegesOra TenylegesOra ON OsszesOra.Nap=TenylegesOra.Nap AND OsszesOra.Oraszam=TenylegesOra.Oraszam AND TenylegesOra.PedagogusId = OsszesOra.PedagogusId
LEFT JOIN T_FELHASZNALO_OSSZES ped ON ped.ID = OsszesOra.PedagogusId
ORDER BY OsszesOra.Hetirend, OsszesOra.Nap, OsszesOra.Oraszam
--------------------------------------------------------------------------------------------------------------
CREATE TABLE #Napok (Nev NVARCHAR(MAX), Oraszam INT, Rendez INT)
INSERT INTO #Napok
SELECT DISTINCT
*
, CASE
WHEN nap = 'hetfo' THEN 1
WHEN nap = 'kedd' THEN 2
WHEN nap = 'szerda' THEN 3
WHEN nap = 'csutortok' THEN 4
WHEN nap = 'pentek' THEN 5
END
FROM (VALUES ('hetfo'), ('kedd'), ('szerda'), ('csutortok'), ('pentek')) AS napok(nap)
CROSS JOIN (SELECT DISTINCT Oraszam FROM #temp) OraSzam (OraSzam)
DECLARE @Oraszamok NVARCHAR(MAX),
@OraszamokAlias NVARCHAR(MAX)
SELECT @Oraszamok = ISNULL(@Oraszamok + ', ', '') + '[' + CAST(Oraszam AS NVARCHAR(MAX)) + ']'
FROM (SELECT DISTINCT Oraszam FROM #temp ) o
SELECT @OraszamokAlias = ISNULL(@OraszamokAlias + ', ', '') + Nev +'.' + '[' + CAST(Oraszam AS NVARCHAR(MAX)) + ']' FROM #Napok ORDER BY Rendez, Oraszam
DECLARE @sql NVARCHAR(MAX)
SET @sql = '
SELECT DISTINCT
f.C_NYOMTATASINEV PedagogusNev,
' + @OraszamokAlias + '
FROM (SELECT DISTINCT PedagogusId FROM #temp) k
INNER JOIN (
SELECT
PedagogusId
,'+ @Oraszamok +'
FROM #Orarend
PIVOT (MAX(Foglalkozas) FOR Ora IN (' + @Oraszamok + '))a
WHERE Nap = 1408
) hetfo ON hetfo.PedagogusId = k.PedagogusId
INNER JOIN (
SELECT
PedagogusId
,'+ @Oraszamok +'
FROM #Orarend
PIVOT (MAX(Foglalkozas) FOR Ora IN (' + @Oraszamok + '))a
WHERE Nap = 1409
) kedd ON kedd.PedagogusId = k.PedagogusId
INNER JOIN (
SELECT
PedagogusId
,'+ @Oraszamok +'
FROM #Orarend
PIVOT (MAX(Foglalkozas) FOR Ora IN (' + @Oraszamok + '))a
WHERE Nap = 1410
) szerda ON szerda.PedagogusId = k.PedagogusId
INNER JOIN (
SELECT
PedagogusId
,'+ @Oraszamok +'
FROM #Orarend
PIVOT (MAX(Foglalkozas) FOR Ora IN (' + @Oraszamok + '))a
WHERE Nap = 1411
) csutortok ON csutortok.PedagogusId = k.PedagogusId
INNER JOIN (
SELECT
PedagogusId
,'+ @Oraszamok +'
FROM #Orarend
PIVOT (MAX(Foglalkozas) FOR Ora IN (' + @Oraszamok + '))a
WHERE Nap = 1412
) pentek ON pentek.PedagogusId = k.PedagogusId
INNER JOIN T_FELHASZNALO_OSSZES f ON f.Id = k.PedagogusId
ORDER BY C_NYOMTATASINEV
'
EXEC sp_executesql @sql
DROP TABLE #Napok
DROP TABLE #Orarend
DROP TABLE #KapcsolodoCsoportok
END
GO