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

312 lines
10 KiB
Transact-SQL

DROP PROCEDURE IF EXISTS uspGetNyomtatvanyokOrarendOsszes
GO
CREATE PROCEDURE uspGetNyomtatvanyokOrarendOsszes
@intezmenyId int
,@tanevID int
,@pIdoszakKezdete datetime
,@pIdoszakVege datetime
,@pTanarId int = NULL
,@pIsHelyettesitesNelkul bit = 0
,@pOsztalyCsoportId int = NULL
,@pTanuloId int = NULL
,@pTantargyId int = NULL
,@pTeremId int = NULL
,@pCsakOrarendiOrak bit = 0
,@pIsNapirend bit /* 0 csak orarendi ora, 1 csak napirend, NULL mindkettő */
,@pKapcsolodoCsoportokMegjelenitese bit = NULL
,@pOsztalyBontasokMegjelenitese bit = NULL
,@pFeladatKategoriaId int = NULL
AS BEGIN
SET NOCOUNT ON;
DECLARE
@intezmenyNev nvarchar(510)
,@hetirend int
CREATE TABLE #OrarendiOrak (
Datum datetime
,Hetirend int
,HetNapja int
,HetSorszam int
,OraKezdete datetime
,OraVege datetime
,Oraszam int
,TargyNev nvarchar (300)
,OsztalyNev nvarchar (255)
,TanarNev nvarchar (255)
,TeremNev nvarchar (255)
,TanarID int
,OsztCsopId int
,IsEgyediNap char(1)
)
CREATE TABLE #Oraszamok (
Oraszam int,
OraKezdete char(5),
OraVege char(5),
PRIMARY KEY(Oraszam)
)
SELECT TOP 1
@intezmenyNev = i.C_NEV
FROM T_INTEZMENYADATOK_OSSZES i
WHERE i.C_INTEZMENYID = @intezmenyId
AND i.C_TANEVID = @tanevID
AND i.TOROLT = 'F'
INSERT INTO #OrarendiOrak (
Datum
,Hetirend
,HetNapja
,HetSorszam
,OraKezdete
,OraVege
,Oraszam
,TargyNev
,OsztalyNev
,TanarNev
,TeremNev
,TanarID
,OsztCsopId
,IsEgyediNap
)
EXEC sp_GetOrarend
@pIntezmenyId = @intezmenyId
,@pTanevId = @tanevID
,@pIdoszakKezdete = @pIdoszakKezdete
,@pIdoszakVege = @pIdoszakVege
,@pTanarId = @pTanarId
,@pIsHelyettesitesNelkul = @pIsHelyettesitesNelkul
,@pOsztalyCsoportId = @pOsztalyCsoportId
,@pTanuloId = @pTanuloId
,@pTantargyId = @pTantargyId
,@pTeremId = @pTeremId
,@pCsakOrarendiOrak = @pCsakOrarendiOrak
,@pIsNapirend = @pIsNapirend
,@pFeladatKategoriaId = @pFeladatKategoriaId
,@pOszlopok = N'Datum,Hetirend,HetNapja,HetSorszam,OraKezdete,OraVege,Oraszam,TargyNev,OsztalyNev,TanarNev,TeremNev,TanarID,OsztCsopId,IsEgyediNap'
-- a lekért órarendben a minden héten órákat átállítjuk a hétsorszámnak megfelelő hetirendre
UPDATE orak
SET orak.Hetirend = ISNULL(hr.Hetirend, orak.Hetirend)
FROM #OrarendiOrak orak
LEFT JOIN (
SELECT DISTINCT
o.Hetirend
,o.HetSorszam
FROM #OrarendiOrak o
WHERE Hetirend <> 1554
) hr ON hr.HetSorszam = orak.HetSorszam
WHERE orak.Hetirend = 1554
-- kapcsolódó csoportok óráinak törlése
IF @pKapcsolodoCsoportokMegjelenitese IS NOT NULL AND @pKapcsolodoCsoportokMegjelenitese = 0
DELETE orak
FROM #OrarendiOrak orak
INNER JOIN T_CSOPORT_OSSZES cs ON cs.TOROLT = 'F'
AND cs.ID = orak.OsztCsopId
AND cs.C_OSZTALYBONTASID IS NULL
INNER JOIN T_CSOPORTTIPUS_OSSZES cst ON cst.C_ALTANEVID = cs.C_ALTANEVID AND cst.TOROLT = 'F'
AND cst.ID = cs.C_TIPUSA
WHERE OsztCsopId != @pOsztalyCsoportId
-- osztálybontott csoportok óráinak törlése
IF @pOsztalyBontasokMegjelenitese IS NOT NULL AND @pOsztalyBontasokMegjelenitese = 0
DELETE orak
FROM #OrarendiOrak orak
INNER JOIN T_CSOPORT_OSSZES cs ON cs.ID = orak.OsztCsopId
AND cs.C_OSZTALYBONTASID IS NOT NULL
WHERE orak.OsztCsopId != @pOsztalyCsoportId
-- egyedi napok esetén ne a megtartott napon, hanem az alap hét napján jelenjen meg
UPDATE orak SET orak.HetNapja=nn.C_ALAPHETNAPJA
FROM #OrarendiOrak orak
INNER JOIN T_NAPTARINAP_OSSZES nn ON nn.C_NAPDATUMA = orak.Datum AND nn.C_TANEVID = @tanevID AND nn.TOROLT = 'F'
WHERE orak.IsEgyediNap = 'T'
INSERT INTO #Oraszamok (Oraszam, OraKezdete, OraVege)
SELECT
C_ORASZAM
,CONVERT(char(5), C_KEZDETE, 108)
,CONVERT(char(5), C_VEGE, 108)
FROM T_CSENGETESIREND_OSSZES cs
INNER JOIN T_CSENGETESIRENDORA_OSSZES cso on cs.ID = cso.C_CSENGETESIRENDID
WHERE
cs.C_TANEVID = @tanevID
AND C_AKTIV = 'T'
AND cs.TOROLT = 'F'
AND cso.TOROLT = 'F'
SET @hetirend = (SELECT C_HETIREND FROM T_NAPTARIHET_OSSZES WHERE C_HETSORSZAMA = (SELECT TOP 1 HetSorszam FROM #OrarendiOrak) AND C_TANEVID = @tanevID AND TOROLT = 'F')
SELECT DISTINCT
COALESCE(@pTanarId, @pTeremId, @pOsztalyCsoportId) AS Id
,STUFF(
(
SELECT DISTINCT
', ' + IIF(@pTanarId IS NOT NULL, bo.TanarNev, IIF(@pTeremId IS NOT NULL, bo.TeremNev, IIF(@pOsztalyCsoportId IS NOT NULL, bo.OsztalyNev,'')))
FROM #OrarendiOrak bo
WHERE bo.Hetirend = o.Hetirend
FOR XML PATH(''), TYPE
).value
('.', 'NVARCHAR(MAX)') ,1 , 2, ''
) AS Nev
,@intezmenyNev AS IntezmenyNev
,dic.C_NAME AS Hetirend
FROM #OrarendiOrak o
INNER JOIN T_DICTIONARYITEMBASE_OSSZES dic ON dic.ID = @hetirend
AND dic.C_TANEVID = @tanevID
AND dic.TOROLT = 'F'
DECLARE @IsNapirend int = ISNULL(@pIsNapirend, 1)
SELECT
COALESCE(@pTanarId, @pTeremId, @pOsztalyCsoportId) AS Id
,IIF(@pIsNapirend = 0, CAST(t.Oraszam AS nvarchar(3)), ISNULL(t.OraKezdete + ' - ' + t.OraVege, '')) AS Ora
,t.Hetirend AS HetirendId
,[1408] AS Hetfo
,[1409] AS Kedd
,[1410] AS Szerda
,[1411] AS Csutortok
,[1412] AS Pentek
,[1413] AS Szombat
,[1414] AS Vasarnap
,t.HetirendNev AS HetirendNev
FROM (
SELECT
*
FROM (
SELECT
STUFF(
(
SELECT
CONVERT(nvarchar(max),
'--------------------' + nchar(13) + nchar(10)
+ bo.TargyNev + nchar(13) + nchar(10) + bo.OsztalyNev +
IIF(@pTeremId IS NOT NULL OR @pOsztalyCsoportId IS NOT NULL, nchar(13) + nchar(10) + bo.TanarNev, '') + nchar(13) + nchar(10) + bo.TeremNev + nchar(13) + nchar(10))
FROM #OrarendiOrak bo
WHERE
(@pIsNapirend = 0 AND bo.Oraszam = osz.Oraszam and o.HetNapja = bo.HetNapja)
OR
(@IsNapirend <> 0 AND bo.OraKezdete = o.OraKezdete AND bo.OraVege = o.OraVege and o.HetNapja = bo.HetNapja)
FOR XML PATH(''), TYPE
).value
('.', 'NVARCHAR(MAX)'), 1, 22, ''
) AS TargyNev
,o.HetNapja
,osz.Oraszam
,IIF(@IsNapirend <> 0, ISNULL(CONVERT(char(5), o.OraKezdete, 108), osz.Orakezdete), NULL) AS OraKezdete
,IIF(@IsNapirend <> 0, ISNULL(CONVERT(char(5), o.OraVege, 108), osz.OraVege), NULL) AS OraVege
,dic.C_NAME AS HetirendNev
,@hetirend AS Hetirend
FROM #OrarendiOrak AS o
FULL JOIN #Oraszamok AS osz ON (o.Oraszam IS NULL AND CONVERT(char(5), o.OraKezdete, 108) = osz.Orakezdete AND CONVERT(char(5), o.OraVege, 108) = osz.OraVege) OR o.Oraszam = osz.Oraszam
LEFT JOIN T_DICTIONARYITEMBASE_OSSZES AS dic ON dic.C_TANEVID = @tanevID
AND dic.TOROLT = 'F'
AND dic.ID = @hetirend
) ot PIVOT(MAX(ot.TargyNev) FOR ot.HetNapja IN(
[1408]
,[1409]
,[1410]
,[1411]
,[1412]
,[1413]
,[1414])
) AS pv
) AS t
WHERE @pIsNapirend = 0 OR (t.OraKezdete IS NOT NULL AND t.OraVege IS NOT NULL)
ORDER BY
HetirendNev
,CASE WHEN @pIsNapirend = 0 THEN t.Oraszam ELSE CAST(t.OraKezdete AS datetime) END
-- Iktatási adatok
IF @pOsztalyCsoportId IS NOT NULL
BEGIN
-- Osztály adatok
SELECT
@pOsztalyCsoportId AS OsztalyId
,ocs.C_EVFOLYAMTIPUSA AS Evfolyam
,ocs.C_FELADATELLATASIHELYID AS FeladatEllatasiHelyId
,ocs.C_KEPZESIFORMA AS KepzesiForma
,o.C_OSZTALYFONOKID AS OsztalyFonokId
,o.C_TANTERVID AS TantervId
,o.C_SZAKMACSOPORT AS SzakmaCsoport
,o.C_AGAZAT AS Agazat
,o.C_SZAKKEPESITES AS Szakkepesites
,o.C_RESZSZAKKEPESITES AS Reszszakkepesites
,o.C_AGAZATUJSZKTTIPUSID AS UjSzktAgazat
,o.C_SZAKMATIPUSID AS UjSzktSzakma
,o.C_SZAKMAIRANYTIPUSID AS UjSzktSzakmairany
,o.C_TANULMANYITERULETNKTTIPUSID AS NktTanulmanyiTerulet
,o.C_SZAKKEPESITESNKTTIPUSID AS NktSzakkepesites
,o.C_SZAKIRANYNKTTIPUSID AS NktSzakirany
,ocs.C_KERESZTFELEVES AS OJCSJKeresztfeleves
,ocs.C_VEGZOSEVFOLYAM AS CSJVegzosEvfolyamu
,ocs.C_ISTECHNIKAI AS OJTechnikaiOsztaly
,o.C_NEMZETISEGI AS OJNemzetisegi
,o.C_KETTANNYELVU AS OJKettannyelvu
,o.C_NYELVIELOKESZITO AS OJNyelviElokeszito
,ocs.C_ISGYOGYPEDAGOGIAILOGOPEDIAI AS OJIsGyogypedagogiaiLogopediai
,o.C_SPORT AS OJSportOsztaly
,o.C_AJPROGRAM AS OJAranyJanosProgram
FROM T_OSZTALYCSOPORT_OSSZES ocs
INNER JOIN T_OSZTALY_OSSZES o ON o.ID = ocs.ID AND o.TOROLT = 'F'
AND o.C_ALTANEVID = ocs.C_TANEVID
AND o.C_ALINTEZMENYID = ocs.C_INTEZMENYID
WHERE ocs.ID = @pOsztalyCsoportId
AND ocs.TOROLT = 'F'
AND ocs.C_TANEVID = @tanevID
AND ocs.C_INTEZMENYID = @intezmenyId
-- Osztály csoportok
SELECT DISTINCT
ot.OsztCsopId AS CsoportId
FROM #OrarendiOrak ot
INNER JOIN T_CSOPORT_OSSZES cs ON cs.ID = ot.OsztCsopId
AND cs.TOROLT = 'F'
-- Alkalmazottak
SELECT DISTINCT
ot.TanarID AS TanarId
,f.C_OKTATASIAZONOSITO AS TanarOktAzon
FROM #OrarendiOrak ot
LEFT JOIN T_FELHASZNALO_OSSZES f ON f.ID = ot.TanarID
AND f.TOROLT = 'F'
-- Tanulók
SELECT DISTINCT
f.ID AS TanuloId
,f.C_NYOMTATASINEV AS TanuloNeve
,f.C_OKTATASIAZONOSITO AS TanuloOktAzon
FROM #OrarendiOrak ot
INNER JOIN T_TANULOCSOPORT_OSSZES tcs ON tcs.C_OSZTALYCSOPORTID = ot.OsztCsopId
AND tcs.C_TANEVID = @tanevID
AND tcs.TOROLT = 'F'
INNER JOIN T_FELHASZNALO_OSSZES f ON f.ID = tcs.C_TANULOID
AND f.TOROLT = 'F'
END
ELSE
IF @pTanarId IS NOT NULL
-- Alkalmazottak
SELECT DISTINCT
orak.TanarID AS TanarId
,f.C_OKTATASIAZONOSITO AS TanarOktAzon
,mua.C_FELADATELLATASIHELYID AS FeladatEllatasiHelyId
FROM #OrarendiOrak orak
LEFT JOIN T_FELHASZNALO_OSSZES f ON f.ID = orak.TanarID
AND f.TOROLT = 'F'
INNER JOIN T_MUNKAUGYIADATOK_OSSZES mua ON mua.C_ALKALMAZOTTID = orak.TanarID
AND mua.TOROLT = 'F'
ELSE
IF @pTeremId IS NOT NULL
SELECT
t.ID AS TeremId
,t.C_MUKODESIHELYID AS FeladatEllatasiHelyId
FROM T_TEREM_OSSZES t
WHERE t.ID = @pTeremId
AND t.TOROLT = 'F'
END
GO