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

280 lines
10 KiB
Transact-SQL

DROP PROCEDURE IF EXISTS uspGetKozpontiOrakOrarend
GO
CREATE PROCEDURE [uspGetKozpontiOrakOrarend]
@pIntezmenyId int
,@pTanevId int
,@pIdoszakKezdete datetime
,@pIdoszakVege datetime
AS
BEGIN
SET NOCOUNT ON;
DECLARE
@sql nvarchar(max) = N''
,@sqlOrarendiora nvarchar(max) = N''
SET @sql += N'
CREATE TABLE #OsztalyCsoportok (
Id int
,Nev nvarchar(255)
,Oka nvarchar(50)
,IsVegzos char(1)
,IdoszakKezdete datetime
,IdoszakVege datetime
,INDEX IX1 CLUSTERED(Id, IdoszakKezdete, IdoszakVege)
);
CREATE TABLE #NaptariNapok (
Datum datetime
,HetirendId int
,HetNapjaId int
,OrarendiNap char(1)
,OsztalyCsoportId int
,HetSorszam int
,CsengetesiRendId int
,Nev nvarchar(255)
,Oka nvarchar(50)
,IsVegzos char(1)
,IdoszakKezdete datetime
,IdoszakVege datetime
,IsEgyediNap char(1) COLLATE DATABASE_DEFAULT
,PRIMARY KEY CLUSTERED (OsztalyCsoportId, Datum, HetNapjaId, HetirendId)
);
CREATE TABLE #OrarendTable (
Id int
,ORARENDIID int
,Datum datetime
,Bontott char(1)
,Hetirend int
,HetNapja int
,HetSorszam int
,ErvenyessegKezdete datetime
,ErvenyessegVege datetime
,OraKezdete datetime
,OraVege datetime
,Oraszam int
,TargyNev nvarchar(300)
,TargyNevForMobile nvarchar(300)
,TargykategoriaID int
,Megtartott char(1)
,CsengetesiRendOraID int
,CsengetesiRendID int
,MaxNapiOraszam int
,OsztalyNev nvarchar(255)
,TanevRendOsztalyCsoportId int
,MegjelenesOka nvarchar(300)
,TanarNev nvarchar(255)
,TeremNev nvarchar(255)
,TeremId int
,OraTipus nvarchar(200)
,Hianyzas char(1)
,Keses char(1)
,Ures char(1)
,HelyettesitoTanarID int
,HelyettesitoTanarNev nvarchar(255)
,HelyettesitesId int
,TanarID int
,AdminAltalKiirt char(1)
,GroupId int
,Tema nvarchar(max)
,TantargyId int
,OsztCsopId int
,IsEgyediNap char(1)
,TeremTobbOratLehetTartani char(1)
,KozpontiOraGroupId uniqueidentifier
,KozpontilagToroltOraGroupId uniqueidentifier
,INDEX IX1 CLUSTERED(Datum, HetNapja, Oraszam, TanevRendOsztalyCsoportId, TantargyId, TanarID)
);'
/* Változók deklarálása */
SET @sql += N'
DECLARE
@KezdoHet int = DATEPART( ISO_WEEK, @pIdoszakKezdete)
,@ZaroHet int = DATEPART( ISO_WEEK, @pIdoszakVege);
DECLARE @VegzosUtolsoTanitasiNap datetime;
SELECT @VegzosUtolsoTanitasiNap = MIN(C_DATUM)
FROM T_TANEVRENDJE_OSSZES
WHERE TOROLT = ''F''
AND C_TANEVID = @pTanevId
AND C_NAPTIPUSA IN (1402, 7600, 7601, 7602, 7603, 1395) --
AND C_OSSZESCSOPORTRAVONATKOZIK = ''T''
DECLARE @IsVegzosEvfolyam char(1)
'
/* A kapcsolódó osztálycsoportok összegyűjtése */
SET @sql += N'
--Performancia noveles miatt
INSERT INTO #OsztalyCsoportok (Id, Nev, Oka, IsVegzos, IdoszakKezdete, IdoszakVege)
SELECT ID, C_NEV, '''' AS Oka, C_VEGZOSEVFOLYAM, @pIdoszakKezdete
,IIF(C_VEGZOSEVFOLYAM = ''T'' AND @VegzosUtolsoTanitasiNap IS NOT NULL AND @pIdoszakVege > @VegzosUtolsoTanitasiNap, @VegzosUtolsoTanitasiNap + 1, @pIdoszakVege)
FROM T_OSZTALYCSOPORT_OSSZES ocs
WHERE ocs.C_TANEVID = @pTanevId
AND ocs.TOROLT = ''F''
'
SET @sql += N'
UPDATE ocs SET
ocs.IdoszakVege = NewVegeDatum
FROM #OsztalyCsoportok ocs
INNER JOIN (
SELECT MIN(tr.C_DATUM) + 1 AS NewVegeDatum, ocstr.C_OSZTALYCSOPORTID
FROM T_TANEVRENDJE_OSSZES tr
INNER JOIN T_OSZTALYCSOPORT_TANEVRENDJE ocstr ON ocstr.C_TANEVRENDJEID = tr.ID
WHERE tr.C_OSSZESCSOPORTRAVONATKOZIK = ''F''
AND tr.TOROLT = ''F''
AND tr.C_NAPTIPUSA IN (1402, 7600, 7601, 7602, 7603)
AND tr.C_TANEVID = @pTanevId
GROUP BY ocstr.C_OSZTALYCSOPORTID
) x ON x.C_OSZTALYCSOPORTID = ocs.Id
WHERE ocs.IsVegzos = ''T''
'
/* A naptári napok összegyűjtése tanév rendje alapján */
SET @sql += N'
INSERT INTO #NaptariNapok (
Datum
,HetirendId
,HetNapjaId
,OrarendiNap
,OsztalyCsoportId
,HetSorszam
,CsengetesiRendId
,Nev
,Oka
,IsVegzos
,IdoszakKezdete
,IdoszakVege
,IsEgyediNap
) SELECT
nn.Datum
,ISNULL(tr.HetirendId, nn.HetirendId) AS HetirendId
,ISNULL(tr.HetNapjaId, nn.HetNapjaId) AS HetNapjaId
,ISNULL(tr.OrarendiNap, nn.OrarendiNap) AS OrarendiNap
,nn.OsztalyCsoportId
,ISNULL(tr.HetSorszam, nn.HetSorszam) AS HetSorszam
,ISNULL(tr.CsengetesiRendId, nn.CsengetesiRendId) AS CsengetesiRendId
,ISNULL(tr.Nev, nn.Nev)
,ISNULL(tr.Oka, nn.Oka)
,ISNULL(tr.IsVegzos, nn.IsVegzos)
,ISNULL(tr.IdoszakKezdete, nn.IdoszakKezdete)
,ISNULL(tr.IdoszakVege, nn.IdoszakVege)
,COALESCE(tr.IsEgyediNap, nn.IsEgyediNap, ''F'')
FROM (
SELECT
nn.C_NAPDATUMA AS Datum
,nn.C_HETIREND AS HetirendId
,nn.C_HETNAPJA AS HetNapjaId
,nn.C_ORARENDINAP AS OrarendiNap
,ocs.ID AS OsztalyCsoportId
,nn.C_HETSORSZAMA AS HetSorszam
,tr.C_CSENGETESIRENDID AS CsengetesiRendId
,ocs.Nev
,ocs.Oka
,ocs.IsVegzos
,ocs.IdoszakKezdete
,ocs.IdoszakVege
,tr.C_EGYEDINAP AS IsEgyediNap
FROM T_NAPTARINAP_OSSZES nn
INNER JOIN #OsztalyCsoportok ocs ON ocs.IdoszakKezdete <= nn.C_NAPDATUMA AND ocs.IdoszakVege > nn.C_NAPDATUMA
LEFT JOIN T_TANEVRENDJE_OSSZES tr ON tr.C_DATUM = nn.C_NAPDATUMA AND nn.C_INTEZMENYID = tr.C_INTEZMENYID AND nn.C_TANEVID = tr.C_TANEVID AND tr.TOROLT = ''F'' AND tr.C_OSSZESCSOPORTRAVONATKOZIK = ''T''
WHERE nn.TOROLT = ''F''
AND nn.C_INTEZMENYID = @pIntezmenyId AND nn.C_TANEVID = @pTanevId
) nn
LEFT JOIN (
SELECT
nn.C_NAPDATUMA AS Datum
,tr.C_HETIREND AS HetirendId
,tr.C_HETNAPJA AS HetNapjaId
,tr.C_ORARENDINAP AS OrarendiNap
,ocstr.C_OSZTALYCSOPORTID AS OsztalyCsoportId
,nn.C_HETSORSZAMA AS HetSorszam
,tr.C_CSENGETESIRENDID AS CsengetesiRendId
,ocs.Nev
,ocs.Oka
,ocs.IsVegzos
,ocs.IdoszakKezdete
,ocs.IdoszakVege
,tr.C_EGYEDINAP AS IsEgyediNap
FROM T_NAPTARINAP_OSSZES nn
INNER JOIN T_TANEVRENDJE_OSSZES tr ON tr.C_DATUM = nn.C_NAPDATUMA AND nn.C_INTEZMENYID = tr.C_INTEZMENYID AND nn.C_TANEVID = tr.C_TANEVID AND tr.TOROLT = ''F'' AND tr.C_OSSZESCSOPORTRAVONATKOZIK = ''F''
INNER JOIN T_OSZTALYCSOPORT_TANEVRENDJE ocstr ON tr.ID = ocstr.C_TANEVRENDJEID
INNER JOIN #OsztalyCsoportok ocs ON ocs.Id = ocstr.C_OSZTALYCSOPORTID AND ocs.IdoszakKezdete <= nn.C_NAPDATUMA AND ocs.IdoszakVege > nn.C_NAPDATUMA
WHERE nn.TOROLT = ''F''
AND nn.C_INTEZMENYID = @pIntezmenyId AND nn.C_TANEVID = @pTanevId
AND nn.C_NAPDATUMA >= @pIdoszakKezdete AND nn.C_NAPDATUMA < ocs.IdoszakVege
) tr ON nn.Datum = tr.datum AND nn.OsztalyCsoportId = tr.OsztalyCsoportId
WHERE ISNULL(tr.OrarendiNap, nn.OrarendiNap) = ''T''
-- SELECT * FROM #NaptariNapok
'
SET @sql += N'
SELECT DISTINCT
oo.ID AS Id
,oo.TOROLT
,oo.ID AS ORARENDIID
,nn.Datum AS Datum
,oo.C_BONTOTT AS Bontott
,oo.C_HETIREND AS Hetirend
,oo.C_HETNAPJA AS HetNapja
,nn.HetSorszam AS HetSorszam
,oo.C_ORAERVENYESSEGKEZDETE AS ErvenyessegKezdete
,oo.C_ORAERVENYESSEGVEGE AS ErvenyessegVege
,nn.Datum + oo.C_ORAKEZDETE AS OraKezdete
,nn.Datum + oo.C_ORAVEGE AS OraVege
,oo.C_ORASZAM AS Oraszam
,ISNULL(tt.C_ROVIDNEV, tt.C_NEV) AS TargyNev
,COALESCE(tt.C_ROVIDNEV, tt.C_NEV) AS TargyNevForMobile
,tt.C_TARGYKATEGORIA AS TargykategoriaID
,''F'' AS Megtartott
,csro.ID AS CsengetesiRendOraID
,csro.C_CSENGETESIRENDID AS CsengetesiRendID
,MAX(oo.C_ORASZAM) OVER() AS MaxNapiOraszam
,nn.Nev AS OsztalyNev
,nn.OsztalyCsoportId AS TanevRendOsztalyCsoportId
,nn.OKA AS MegjelenesOka
,tanar.C_NYOMTATASINEV AS TanarNev
,terem.C_NEV AS TeremNev
,terem.ID AS TeremId
,''OrarendiOra'' AS OraTipus
,''F'' AS Hianyzas
,''F'' AS Keses
,''F'' AS Ures
,hisz.C_HELYETTESTANAROKID AS HelyettesitoTanarID
,helyettes.C_NYOMTATASINEV AS HelyettesitoTanarNev
,hisz.Id AS HelyettesitesId
,tanar.ID AS TanarID
,NULL AS AdminAltalKiirt
,oo.C_ORARENDIORAGROUPID AS GroupId
,NULL AS Tema
,oo.C_TANTARGYID AS TantargyId
,oo.C_OSZTALYCSOPORTID AS OsztCsopId
,oo.C_EGYEDINAP as IsEgyediNap
,ISNULL(terem.C_TOBBORATLEHETTARTANI,''F'') as TeremTobbOratLehetTartani
,oo.C_KOZPONTIORAGROUPID as KozpontiOraGroupId
,oo.C_KOZPONTILAGTOROLTORAGROUPID as KozpontilagToroltOraGroupId
,csoport.C_OSZTALYBONTASID AS OsztalyBontasId
FROM T_ORARENDIORA_OSSZES oo
INNER JOIN #OsztalyCsoportok ocs ON ocs.ID = oo.C_OSZTALYCSOPORTID
INNER JOIN #NaptariNapok nn ON nn.HetnapjaId = oo.C_HETNAPJA
AND ocs.ID = nn.OsztalyCsoportId
AND nn.Datum >= oo.C_ORAERVENYESSEGKEZDETE
AND ((nn.Datum < oo.C_ORAERVENYESSEGVEGE) OR (oo.C_ORAERVENYESSEGKEZDETE = oo.C_ORAERVENYESSEGVEGE AND nn.Datum = oo.C_ORAERVENYESSEGKEZDETE))
AND (oo.C_HETIREND = 1554 OR nn.HetirendId = oo.C_HETIREND)
AND C_TANEVID = @pTanevId
AND oo.C_EGYEDINAP = nn.IsEgyediNap
INNER JOIN T_TANTARGY_OSSZES tt ON tt.ID = oo.C_TANTARGYID AND tt.TOROLT = ''F''
INNER JOIN T_FELHASZNALO_OSSZES tanar ON tanar.ID = oo.C_TANARID AND tanar.TOROLT = ''F''
LEFT JOIN T_TEREM_OSSZES terem ON terem.id = oo.C_TEREMID AND terem.TOROLT = ''F''
LEFT JOIN T_HELYETTESITESIIDOSZAK_OSSZES hisz ON oo.ID = hisz.C_HELYETTESITETTORARENDID AND hisz.C_HELYETTESITESNAPJA = nn.Datum AND hisz.TOROLT = ''F''
LEFT JOIN T_FELHASZNALO_OSSZES helyettes ON hisz.C_HELYETTESTANAROKID = helyettes.ID AND helyettes.TOROLT = ''F''
LEFT JOIN T_CSENGETESIRENDORA_OSSZES csro ON csro.C_CSENGETESIRENDID = ISNULL(nn.CsengetesiRendId, oo.C_CSENGETESIRENDID) AND csro.C_ORASZAM = oo.C_ORASZAM AND csro.TOROLT = ''F''
LEFT JOIN T_CSOPORT csoport ON csoport.ID = oo.C_OSZTALYCSOPORTID and csoport.TOROLT = ''F''
WHERE oo.C_TANEVID = @pTanevId'
EXEC sp_executesql @sql, N'
@pIntezmenyId int
,@pTanevId int
,@pIdoszakKezdete datetime
,@pIdoszakVege datetime'
,@pIntezmenyId = @pIntezmenyId
,@pTanevId = @pTanevId
,@pIdoszakKezdete = @pIdoszakKezdete
,@pIdoszakVege = @pIdoszakVege
END
GO