260 lines
No EOL
9.9 KiB
Transact-SQL
260 lines
No EOL
9.9 KiB
Transact-SQL
DROP PROCEDURE IF EXISTS sp_GetOrarendOsztalyonkent
|
|
GO
|
|
|
|
CREATE PROCEDURE sp_GetOrarendOsztalyonkent
|
|
@intezmenyId INT,
|
|
@tanevId INT,
|
|
@osztalyId INT,
|
|
@aktivTanevId INT,
|
|
@isEgyebFoglalkozasok BIT,
|
|
@orarendErvenyessegiDatum DATE,
|
|
@isOsztalyTanuloOrarendbenNemLatszik BIT = null
|
|
|
|
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')
|
|
,@ElsoNap DATE = (SELECT TOP 1 C_KEZDONAP FROM T_TANEV_OSSZES WHERE ID = @tanevId AND TOROLT = 'F')
|
|
,@VizsgaltNap DATE
|
|
,@isVegzos VARCHAR(1) = (SELECT TOP 1 C_VEGZOSEVFOLYAM FROM T_OSZTALYCSOPORT_OSSZES WHERE ID = @osztalyId)
|
|
,@VegzosUtolsoNap DATE = (SELECT TOP 1 C_DATUM FROM T_TANEVRENDJE_OSSZES WHERE C_TANEVID = @tanevId AND C_NAPTIPUSA = 1402 AND TOROLT = 'F')
|
|
,@osztalyNev NVARCHAR(MAX) = (SELECT C_NEV FROM T_OSZTALYCSOPORT_OSSZES WHERE ID = @osztalyId)
|
|
|
|
SET @UtolsoNap = (SELECT IIF(@isVegzos = 'T', @VegzosUtolsoNap, @UtolsoNap))
|
|
|
|
IF (@tanevId = @aktivTanevId AND @orarendErvenyessegiDatum <= @UtolsoNap)
|
|
BEGIN
|
|
IF (@orarendErvenyessegiDatum <= @ElsoNap)
|
|
BEGIN
|
|
SET @VizsgaltNap = (SELECT TOP 1 C_HETKEZDONAPJA FROM T_NAPTARIHET_OSSZES WHERE C_HETSORSZAMA = 1 AND TOROLT = 'F' AND C_TANEVID = @tanevId)
|
|
END
|
|
ELSE
|
|
BEGIN
|
|
SET @VizsgaltNap = CONVERT(DATE, @orarendErvenyessegiDatum)
|
|
END
|
|
END
|
|
ELSE
|
|
BEGIN
|
|
SET @VizsgaltNap = @UtolsoNap
|
|
END
|
|
|
|
SELECT
|
|
C_ORASZAM OraSzam
|
|
,CONVERT(VARCHAR(5), C_KEZDETE, 108) Kezdete
|
|
,CONVERT(VARCHAR(5), C_VEGE, 108) Vege
|
|
INTO #CsengetesiRendAdatok
|
|
FROM T_CSENGETESIRENDORA_OSSZES CsengetesiRendOra
|
|
INNER JOIN T_CSENGETESIREND_OSSZES CsengetesiRend ON CsengetesiRend.Id = CsengetesiRendOra.C_CSENGETESIRENDID
|
|
WHERE
|
|
CsengetesiRendOra.C_TANEVID = @tanevId
|
|
AND CsengetesiRendOra.TOROLT = 'F'
|
|
AND CsengetesiRend.TOROLT = 'F'
|
|
AND CsengetesiRend.C_AKTIV = 'T'
|
|
|
|
DECLARE @MinCsengetesiRendOraKezdet NVARCHAR(10) = (SELECT MIN(Kezdete) FROM #CsengetesiRendAdatok)
|
|
DECLARE @MinCsengetesiRendOraszam INT = (SELECT MIN(OraSzam) FROM #CsengetesiRendAdatok)
|
|
|
|
SELECT
|
|
OrarendiOra.C_HETIREND HetirendId
|
|
,OrarendiOra.C_HETNAPJA HetnapjaId
|
|
,CsengetesiRendOra.C_ORASZAM OraSzam
|
|
,CONVERT(VARCHAR(5), OrarendiOra.C_ORAKEZDETE, 108) Kezdete
|
|
,CONVERT(VARCHAR(5), OrarendiOra.C_ORAVEGE, 108) Vege
|
|
,ISNULL(Tantargy.C_NEVNYOMTATVANYBAN, Tantargy.C_NEV) TantargyNev
|
|
,Pedagogus.C_NYOMTATASINEV PedagogusNev
|
|
,Terem.C_NEV TeremNev
|
|
,ocs.C_NEV OsztalyCsoportNev
|
|
INTO #OrarendiOrak
|
|
FROM T_ORARENDIORA_OSSZES OrarendiOra
|
|
INNER JOIN fnGetKapcsolodoOsztalycsoportokByDate(@osztalyId, @VizsgaltNap, @VizsgaltNap) Kapcsolodo ON Kapcsolodo.Id = OrarendiOra.C_OSZTALYCSOPORTID
|
|
INNER JOIN T_TANTARGY_OSSZES Tantargy ON Tantargy.Id = OrarendiOra.C_TANTARGYID
|
|
INNER JOIN T_FELHASZNALO_OSSZES Pedagogus ON Pedagogus.Id = OrarendiOra.C_TANARID
|
|
INNER JOIN T_TEREM_OSSZES Terem ON Terem.Id = OrarendiOra.C_TEREMID
|
|
INNER JOIN T_OSZTALYCSOPORT_OSSZES ocs ON ocs.ID = OrarendiOra.C_OSZTALYCSOPORTID
|
|
LEFT JOIN T_CSENGETESIRENDORA_OSSZES CsengetesiRendOra ON CsengetesiRendOra.Id = OrarendiOra.C_CSENGETESIRENDORAID
|
|
LEFT JOIN T_CSOPORT_OSSZES Csoport ON Csoport.Id = Kapcsolodo.Id
|
|
WHERE
|
|
OrarendiOra.Torolt = 'F'
|
|
AND @VizsgaltNap BETWEEN OrarendiOra.C_ORAERVENYESSEGKEZDETE AND OrarendiOra.C_ORAERVENYESSEGVEGE
|
|
AND (@isEgyebFoglalkozasok = 1 OR (Csoport.C_TIPUSA IN (SELECT ID FROM fnGetTanoraiCeluCsoportTipusok(@tanevId)) OR Csoport.C_TIPUSA IS NULL))
|
|
AND (@isOsztalyTanuloOrarendbenNemLatszik <> 1 OR @isOsztalyTanuloOrarendbenNemLatszik IS NULL OR Tantargy.C_ISOSZTALYORARENDBENEMLATSZIK = 'F')
|
|
|
|
SELECT
|
|
OraSzam
|
|
,HetirendId
|
|
,HetnapjaId
|
|
,OsztalyCsoportNev
|
|
,PedagogusNev
|
|
,TantargyNev
|
|
,TeremNev
|
|
,Kezdete
|
|
,Vege
|
|
INTO #OrarendTEMP
|
|
FROM
|
|
(
|
|
SELECT
|
|
MAX(CsengetesiRendAdatok.OraSzam) OraSzam
|
|
,OrarendiOrak.HetirendId HetirendId
|
|
,OrarendiOrak.HetnapjaId HetnapjaId
|
|
,OrarendiOrak.OsztalyCsoportNev OsztalyCsoportNev
|
|
,OrarendiOrak.PedagogusNev PedagogusNev
|
|
,OrarendiOrak.TantargyNev TantargyNev
|
|
,OrarendiOrak.TeremNev TeremNev
|
|
,OrarendiOrak.Kezdete Kezdete
|
|
,OrarendiOrak.Vege Vege
|
|
FROM #CsengetesiRendAdatok CsengetesiRendAdatok
|
|
LEFT JOIN #OrarendiOrak OrarendiOrak ON OrarendiOrak.Kezdete >= CsengetesiRendAdatok.Kezdete
|
|
WHERE
|
|
OrarendiOrak.OraSzam IS NULL
|
|
GROUP BY
|
|
OrarendiOrak.HetirendId
|
|
,OrarendiOrak.HetnapjaId
|
|
,OrarendiOrak.OsztalyCsoportNev
|
|
,OrarendiOrak.PedagogusNev
|
|
,OrarendiOrak.TantargyNev
|
|
,OrarendiOrak.TeremNev
|
|
,OrarendiOrak.Kezdete
|
|
,OrarendiOrak.Vege
|
|
|
|
UNION
|
|
|
|
SELECT
|
|
MAX(CsengetesiRendAdatok.OraSzam) OraSzam
|
|
,OrarendiOrak.HetirendId HetirendId
|
|
,OrarendiOrak.HetnapjaId HetnapjaId
|
|
,OrarendiOrak.OsztalyCsoportNev OsztalyCsoportNev
|
|
,OrarendiOrak.PedagogusNev PedagogusNev
|
|
,OrarendiOrak.TantargyNev TantargyNev
|
|
,OrarendiOrak.TeremNev TeremNev
|
|
,OrarendiOrak.Kezdete Kezdete
|
|
,OrarendiOrak.Vege Vege
|
|
FROM #CsengetesiRendAdatok CsengetesiRendAdatok
|
|
LEFT JOIN #OrarendiOrak OrarendiOrak ON OrarendiOrak.OraSzam = CsengetesiRendAdatok.OraSzam
|
|
WHERE
|
|
OrarendiOrak.OraSzam IS NOT NULL
|
|
GROUP BY
|
|
OrarendiOrak.HetirendId
|
|
,OrarendiOrak.HetnapjaId
|
|
,OrarendiOrak.OsztalyCsoportNev
|
|
,OrarendiOrak.PedagogusNev
|
|
,OrarendiOrak.TantargyNev
|
|
,OrarendiOrak.TeremNev
|
|
,OrarendiOrak.Kezdete
|
|
,OrarendiOrak.Vege
|
|
)OrarendioraOraszammal
|
|
|
|
INSERT INTO #OrarendTEMP
|
|
SELECT
|
|
@MinCsengetesiRendOraszam
|
|
,OrarendiOrak.HetirendId HetirendId
|
|
,OrarendiOrak.HetnapjaId HetnapjaId
|
|
,OrarendiOrak.OsztalyCsoportNev OsztalyCsoportNev
|
|
,OrarendiOrak.PedagogusNev PedagogusNev
|
|
,OrarendiOrak.TantargyNev TantargyNev
|
|
,OrarendiOrak.TeremNev TeremNev
|
|
,OrarendiOrak.Kezdete Kezdete
|
|
,OrarendiOrak.Vege Vege
|
|
FROM #orarendiorak OrarendiOrak
|
|
WHERE
|
|
Kezdete < @MinCsengetesiRendOraKezdet
|
|
|
|
SELECT
|
|
Orarend.OraSzam
|
|
,HetirendId
|
|
,HetnapjaId
|
|
,OsztalyCsoportNev
|
|
,PedagogusNev
|
|
,TantargyNev
|
|
,TeremNev
|
|
,IIF(Orarend.Kezdete != CsengetesiRendAdatok.Kezdete OR Orarend.Vege != CsengetesiRendAdatok.Vege, Orarend.Kezdete + ' - ' + Orarend.Vege, '') KezdesVegeIdopont
|
|
INTO #Orarend
|
|
FROM #OrarendTEMP Orarend
|
|
INNER JOIN #CsengetesiRendAdatok CsengetesiRendAdatok on CsengetesiRendAdatok.Oraszam = Orarend.OraSzam
|
|
|
|
DECLARE @Hetirendek TABLE (Id INT)
|
|
DECLARE @HetirendCount INT = (SELECT COUNT(DISTINCT oo.C_HETIREND) FROM T_ORARENDIORA_OSSZES oo WHERE oo.TOROLT='F' AND oo.C_TANEVID=@tanevId)
|
|
|
|
IF (@HetirendCount=1)
|
|
BEGIN
|
|
INSERT INTO @Hetirendek
|
|
SELECT DISTINCT oo.c_hetirend FROM T_ORARENDIORA_OSSZES oo WHERE oo.TOROLT='F' AND oo.C_TANEVID = @tanevId
|
|
END
|
|
ELSE
|
|
BEGIN
|
|
INSERT INTO @Hetirendek
|
|
SELECT DISTINCT oo.C_HETIREND from T_ORARENDIORA_OSSZES oo WHERE oo.TOROLT='F' AND oo.C_TANEVID=@tanevId AND oo.C_HETIREND <> 1554
|
|
END
|
|
|
|
DECLARE @Orakezdetek TABLE (Ora INT)
|
|
INSERT INTO @orakezdetek
|
|
SELECT DISTINCT OraSzam from #CsengetesiRendAdatok
|
|
|
|
DECLARE @OsszesOra TABLE (Hetirend INT, Nap INT, Oraszam nvarchar(20))
|
|
INSERT INTO @OsszesOra
|
|
SELECT DISTINCT oo.Id, Nap , OraSzam FROM @Hetirendek oo
|
|
CROSS JOIN (SELECT Ora FROM @Orakezdetek) OraSzam (OraSzam)
|
|
CROSS JOIN (VALUES (1408),(1409),(1410),(1411),(1412), (1413),(1414)) Nap (Nap)
|
|
|
|
DECLARE @TenylegesOra TABLE (Hetirend INT, Nap INT, OraSzam NVARCHAR(20), Foglalkozas NVARCHAR(MAX))
|
|
DECLARE @Orarend TABLE (osztalyId INT, Ora int, Hetirend INT, Nap INT, Foglalkozas NVARCHAR(MAX))
|
|
|
|
DECLARE kur CURSOR FOR
|
|
SELECT Id FROM @Hetirendek
|
|
|
|
DECLARE @HetirendId int
|
|
|
|
OPEN kur
|
|
FETCH NEXT FROM kur INTO @HetirendId
|
|
|
|
WHILE @@FETCH_STATUS = 0
|
|
BEGIN
|
|
INSERT INTO @TenylegesOra
|
|
SELECT DISTINCT
|
|
@HetirendId
|
|
,veg.HetnapjaId
|
|
,veg.Oraszam
|
|
,STUFF((SELECT DISTINCT
|
|
CAST('<b>' + bveg.TantargyNev + '</b>' + CHAR(13) + CHAR(10)
|
|
+ IIF(LEN(KezdesVegeIdopont) > 0, ' (' + KezdesVegeIdopont +')' + CHAR(13) + CHAR(10), '')
|
|
+ IIF(bveg.OsztalyCsoportNev <> @osztalyNev, bveg.OsztalyCsoportNev + CHAR(13) + CHAR(10), '')
|
|
+ bveg.PedagogusNev + CHAR(13) + CHAR(10)
|
|
+ bveg.TeremNev + CHAR(13) + CHAR(10) AS VARCHAR(max))
|
|
FROM #Orarend bveg
|
|
WHERE bveg.HetnapjaId = veg.HetnapjaId
|
|
AND bveg.Oraszam = veg.Oraszam
|
|
AND (bveg.HetirendId = @HetirendId OR bveg.HetirendId = 1554)
|
|
FOR XML PATH(''), TYPE)
|
|
.value('.','NVARCHAR(MAX)'),1,0,'') Foglalkozasok
|
|
FROM #Orarend veg
|
|
FETCH NEXT FROM kur INTO @HetirendId
|
|
END
|
|
CLOSE kur
|
|
DEALLOCATE kur
|
|
|
|
/*Végleges órarend*/
|
|
INSERT INTO @Orarend
|
|
SELECT @osztalyId
|
|
, OsszesOra.Oraszam
|
|
, OsszesOra.Hetirend
|
|
, OsszesOra.Nap
|
|
, TenylegesOra.Foglalkozas
|
|
FROM @OsszesOra OsszesOra
|
|
LEFT JOIN @TenylegesOra TenylegesOra ON OsszesOra.Hetirend = TenylegesOra.Hetirend AND OsszesOra.Nap = TenylegesOra.Nap AND OsszesOra.Oraszam = TenylegesOra.Oraszam
|
|
ORDER BY OsszesOra.Hetirend, OsszesOra.Nap, OsszesOra.Oraszam
|
|
|
|
SELECT
|
|
pv.*
|
|
, dic.C_NAME HETIREND_DNAME
|
|
,@osztalyNev OsztalyNev
|
|
FROM @Orarend
|
|
PIVOT (MAX(Foglalkozas) FOR Nap IN ([1408],[1409],[1410],[1411],[1412],[1413],[1414]))pv
|
|
INNER JOIN T_DICTIONARYITEMBASE_OSSZES dic ON dic.id=Hetirend AND dic.C_TANEVID = @tanevId
|
|
INNER JOIN @Orakezdetek ok ON ok.Ora = pv.Ora
|
|
ORDER BY Ora
|
|
END
|
|
|
|
DROP TABLE #CsengetesiRendAdatok
|
|
DROP TABLE #Orarend
|
|
DROP TABLE #OrarendiOrak
|
|
GO |