This commit is contained in:
2024-03-13 00:33:46 +01:00
commit e124a47765
19374 changed files with 9806149 additions and 0 deletions

View File

@@ -0,0 +1,12 @@
--Migration
DROP INDEX IF EXISTS NCI_OrarendiOra_TanevId_IntezmenyId_HetNapja_OraervenyessegKezdete_OrarevenyessegVege ON T_ORARENDIORA
GO
IF NOT EXISTS (SELECT 1 FROM sys.indexes WHERE name = 'NCI_OrarendiOra_TanevId_IntezmenyId_HetNapja_OraervenyessegKezdete_OrarevenyessegVege') BEGIN
CREATE INDEX NCI_OrarendiOra_TanevId_IntezmenyId_HetNapja_OraervenyessegKezdete_OrarevenyessegVege
ON T_ORARENDIORA (C_TANEVID, C_INTEZMENYID, C_HETNAPJA, C_ORAERVENYESSEGKEZDETE, C_ORAERVENYESSEGVEGE)
INCLUDE (C_EGYEDINAP, C_OSZTALYCSOPORTID, C_HETIREND, TOROLT, C_ORASZAM)
WHERE TOROLT = 'F'
WITH (FILLFACTOR = 80)
END
GO

View File

@@ -0,0 +1,349 @@
DROP PROCEDURE IF EXISTS sp_GetOrarend
GO
CREATE PROCEDURE sp_GetOrarend
@pIntezmenyId int
,@pTanevId 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
,@pIsNapirend bit = 0 /*0 csak orarendi ora, 1 csak napirend, NULL mindkettő*/
,@pFeladatKategoriaId int = NULL
,@pOrakezdete datetime = NULL
,@pOravege datetime = NULL
,@pHetnapja int = NULL
AS BEGIN
SET NOCOUNT ON;
SET @pOrakezdete = CONVERT(datetime,CONVERT(TIME, @pOrakezdete))
SET @pOravege = CONVERT(datetime,CONVERT(TIME, @pOravege))
DECLARE @sqlOrarendiOra nvarchar(max) =N''
DECLARE @sql nvarchar(max) = ''
IF @pOsztalyCsoportId IS NOT NULL OR @pTanuloId IS NOT NULL BEGIN
SET @sql = N'
CREATE TABLE #Orarend (
C_DATUM datetime
,C_ORARENDIORAID int
,C_OSZTALYCSOPORTID int
INDEX IX1 CLUSTERED(C_ORARENDIORAID, C_DATUM)
);'
END
IF @pOsztalyCsoportId IS NOT NULL BEGIN
SET @sql += N'
INSERT INTO #Orarend (C_DATUM, C_ORARENDIORAID, C_OSZTALYCSOPORTID)
SELECT orr.C_DATUM, orr.C_ORARENDIORAID, kocs.ID
FROM T_ORAREND_OSSZES orr
INNER JOIN T_ORARENDIORA_OSSZES oo ON oo.ID = orr.C_ORARENDIORAID
INNER JOIN fnGetKapcsolodoOsztalyCsoportokByDateRange(@pOsztalyCsoportId, @pIdoszakKezdete, @pIdoszakVege, @pIntezmenyId, @pTanevId) kocs ON oo.C_OSZTALYCSOPORTID = kocs.Id AND orr.C_DATUM >= kocs.Kezdete AND orr.C_DATUM < kocs.Vege
AND oo.C_TANEVID = @pTanevId AND oo.TOROLT = ''F'' AND orr.C_TANEVID = @pTanevId'
END
IF @pTanuloId IS NOT NULL BEGIN
SET @sql += N'
INSERT INTO #Orarend (C_DATUM, C_ORARENDIORAID, C_OSZTALYCSOPORTID)
SELECT orr.C_DATUM, orr.C_ORARENDIORAID, tcs.C_OSZTALYCSOPORTID
FROM T_ORAREND_OSSZES orr
INNER JOIN T_ORARENDIORA_OSSZES oo ON oo.ID = orr.C_ORARENDIORAID
INNER JOIN T_TANULOCSOPORT_OSSZES tcs ON oo.C_OSZTALYCSOPORTID = tcs.C_OSZTALYCSOPORTID AND orr.C_DATUM >= tcs.C_BELEPESDATUM AND (orr.C_DATUM < tcs.C_KILEPESDATUM OR tcs.C_KILEPESDATUM IS NULL)
AND oo.C_TANEVID = @pTanevId
AND oo.TOROLT = ''F''
AND orr.C_TANEVID = @pTanevId
AND tcs.C_TANULOID = @pTanuloId
AND orr.C_DATUM >= @pIdoszakKezdete
AND orr.C_DATUM < @pIdoszakVege
AND tcs.TOROLT = ''F'''
END
SET @sql += N'
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 NULL
,KozpontilagToroltOraGroupId uniqueidentifier NULL
,INDEX IX1 CLUSTERED(Datum, HetNapja, Oraszam, TanevRendOsztalyCsoportId, TantargyId, TanarID)
);'
IF @pCsakOrarendiOrak = 0 BEGIN
SET @sql += N'
INSERT INTO #OrarendTable
'
END
SET @sqlOrarendiora += N'
SELECT DISTINCT
oo.ID AS Id
,oo.ID AS ORARENDIID
,orr.C_DATUM AS Datum
,oo.C_BONTOTT AS Bontott
,oo.C_HETIREND AS Hetirend
,oo.C_HETNAPJA AS HetNapja
,nn.C_HETSORSZAMA AS HetSorszam
,oo.C_ORAERVENYESSEGKEZDETE AS ErvenyessegKezdete
,oo.C_ORAERVENYESSEGVEGE AS ErvenyessegVege
,orr.C_DATUM + oo.C_ORAKEZDETE AS OraKezdete
,orr.C_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
,ocs.C_NEV AS OsztalyNev
,ocs.ID AS TanevRendOsztalyCsoportId
,'''' 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
FROM ' + IIF(@pOsztalyCsoportId IS NULL AND @pTanuloId IS NULL, 'T_ORAREND', '#Orarend') + ' orr
INNER JOIN T_NAPTARINAP_OSSZES nn ON orr.C_DATUM = nn.C_NAPDATUMA
INNER JOIN T_ORARENDIORA_OSSZES oo ON orr.C_ORARENDIORAID = oo.ID --AND oo.TOROLT = ''F''
INNER JOIN T_OSZTALYCSOPORT_OSSZES ocs ON ocs.ID = oo.C_OSZTALYCSOPORTID
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.C_NAPDATUMA AND hisz.TOROLT = ''F''
LEFT JOIN T_FELHASZNALO_OSSZES helyettes ON hisz.C_HELYETTESTANAROKID = helyettes.ID AND helyettes.TOROLT = ''F''
' + IIF(@pIsNapirend = 0, 'INNER', 'LEFT') + ' JOIN T_CSENGETESIRENDORA_OSSZES csro ON csro.C_CSENGETESIRENDID = oo.C_CSENGETESIRENDID AND csro.C_ORASZAM = oo.C_ORASZAM AND csro.TOROLT = ''F''
WHERE oo.TOROLT = ''F'' --AND orr.C_TANEVID = @pTanevId
' + IIF(@pOsztalyCsoportId IS NULL AND @pTanuloId IS NULL,' AND orr.C_DATUM >= @pIdoszakKezdete AND orr.C_DATUM < @pIdoszakVege AND orr.C_TANEVID = @pTanevId',' ') + '
' + CASE WHEN @pIsNapirend = 1 THEN N'AND oo.C_CSENGETESIRENDID IS NULL ' WHEN @pIsNapirend IS NULL THEN N'AND ((oo.C_CSENGETESIRENDID IS NOT NULL AND csro.C_CSENGETESIRENDID IS NOT NULL) OR (oo.C_CSENGETESIRENDID IS NULL AND csro.C_CSENGETESIRENDID IS NULL))' ELSE '' END + '
' + IIF(@pTantargyId IS NULL, N'', N'AND oo.C_TANTARGYID = @pTantargyId') + N'
' + IIF(@pOravege IS NOT NULL AND @pOrakezdete IS NOT NULL, N'AND oo.C_ORAVEGE > @pOrakezdete AND oo.C_ORAKEZDETE < @pOravege', N'') + N'
' + IIF(@pHetnapja IS NULL, N'', N'AND nn.C_HETNAPJA = @pHetnapja') + N'
' + IIF(@pTeremId IS NULL, N'', 'AND oo.C_TEREMID = @pTeremId') + N'
' + IIF(@pFeladatKategoriaId IS NULL, N'', 'AND ocs.C_FELADATKATEGORIAID = @pFeladatKategoriaId')
SET @sql += @sqlOrarendiOra + N'
' + IIF(@pTanarId IS NULL, N'', 'AND oo.C_TANARID = @pTanarId')
IF @pTanarId IS NOT NULL AND @pIsHelyettesitesNelkul = 0 BEGIN
SET @sql += N'
UNION ALL
' + @sqlOrarendiOra + '
AND hisz.C_HELYETTESTANAROKID = @pTanarId
AND hisz.C_HELYETTESITESNAPJA = orr.C_DATUM
'
END
IF @pCsakOrarendiOrak = 0 BEGIN
/* TanításiÓra lekérdezés */
SET @sql += N'
SELECT
ISNULL(tn.Id, oo.Id) AS Id
,ISNULL(tn.ORARENDIID, oo.ORARENDIID) AS ORARENDIID
,ISNULL(tn.Datum, oo.Datum) AS Datum
,ISNULL(tn.Bontott, oo.Bontott) AS Bontott
,ISNULL(tn.Hetirend, oo.Hetirend) AS Hetirend
,ISNULL(tn.HetNapja, oo.HetNapja) AS HetNapja
,ISNULL(tn.HetSorszam, oo.HetSorszam) AS HetSorszam
,IIF(tn.Id IS NOT NULL, NULL, oo.ErvenyessegKezdete) AS ErvenyessegKezdete
,IIF(tn.Id IS NOT NULL, NULL, oo.ErvenyessegVege) AS ErvenyessegVege
,ISNULL(tn.OraKezdete, oo.OraKezdete) AS OraKezdete
,ISNULL(tn.OraVege, oo.OraVege) AS OraVege
,ISNULL(tn.Oraszam, oo.Oraszam) AS Oraszam
,ISNULL(tn.TargyNev, oo.TargyNev) AS TargyNev
,ISNULL(tn.TargyNevForMobile, oo.TargyNevForMobile) AS TargyNevForMobile
,ISNULL(tn.TargykategoriaID, oo.TargykategoriaID) AS TargykategoriaID
,ISNULL(tn.Megtartott, oo.Megtartott) AS Megtartott
,ISNULL(tn.CsengetesiRendOraID, oo.CsengetesiRendOraID) AS CsengetesiRendOraID
,ISNULL(tn.CsengetesiRendID, oo.CsengetesiRendID) AS CsengetesiRendID
,ISNULL(tn.MaxNapiOraszam, oo.MaxNapiOraszam) AS MaxNapiOraszam
,ISNULL(tn.OsztalyNev, oo.OsztalyNev) AS OsztalyNev
,ISNULL(tn.TanevRendOsztalyCsoportId, oo.TanevRendOsztalyCsoportId) AS TanevRendOsztalyCsoportId
,ISNULL(tn.MegjelenesOka, oo.MegjelenesOka) AS MegjelenesOka
,ISNULL(tn.TanarNev, oo.TanarNev) AS TanarNev
,ISNULL(tn.TeremNev, oo.TeremNev) AS TeremNev
,ISNULL(tn.TeremId, oo.TeremId) AS TeremId
,ISNULL(tn.OraTipus, oo.OraTipus) AS OraTipus
,ISNULL(tn.Hianyzas, oo.Hianyzas) AS Hianyzas
,ISNULL(tn.Keses, oo.Keses) AS Keses
,ISNULL(tn.Ures, oo.Ures) AS Ures
,ISNULL(tn.HelyettesitoTanarID, oo.HelyettesitoTanarID) AS HelyettesitoTanarID
,ISNULL(tn.HelyettesitoTanarNev, oo.HelyettesitoTanarNev) AS HelyettesitoTanarNev
,oo.HelyettesitesId AS HelyettesitesId
,ISNULL(tn.TanarID, oo.TanarID) AS TanarID
,ISNULL(tn.AdminAltalKiirt, oo.AdminAltalKiirt) AS AdminAltalKiirt
,ISNULL(tn.GroupId, oo.GroupId) AS GroupId
,tn.Tema AS Tema
,ISNULL(tn.TantargyId, oo.TantargyId) AS TantargyId
,ISNULL(tn.OsztCsopId, oo.OsztCsopId) AS OsztCsopId
,ISNULL(tn.IsEgyediNap, oo.IsEgyediNap) as IsEgyediNap
,ISNULL(tn.TeremTobbOratLehetTartani, oo.TeremTobbOratLehetTartani) as TeremTobbOratLehetTartani
,oo.KozpontiOraGroupId
,oo.KozpontilagToroltOraGroupId
FROM #OrarendTable oo
'
SET @sql += N'
FULL JOIN (
SELECT
tao.ID AS Id
,NULL AS ORARENDIID
,tao.C_DATUM AS Datum
,tao.C_BONTOTT AS Bontott
,1554 AS Hetirend
,tao.C_HETNAPJA AS HetNapja
,tao.C_HETSORSZAMA AS HetSorszam
,tao.C_ORAKEZDETE AS OraKezdete
,tao.C_ORAVEGE AS OraVege
,tao.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
,tao.C_MEGTARTOTT AS Megtartott
,tao.C_CSENGETESIRENDORAID AS CsengetesiRendOraID
,tao.C_CSENGETESIRENDID AS CsengetesiRendID
,MAX(tao.C_ORASZAM) OVER() AS MaxNapiOraszam
,ocs.C_NEV AS OsztalyNev
,tao.C_OSZTALYCSOPORTID AS TanevRendOsztalyCsoportId
,'''' AS MegjelenesOka
,tanar.C_NYOMTATASINEV AS TanarNev
,terem.C_NEV AS TeremNev
,terem.ID as TeremId
,''TanitasiOra'' AS OraTipus
,' + IIF(@pTanuloId IS NULL, N'''F''', N'IIF(mh.ID IS NULL, ''F'', ''T'')') + N' AS Hianyzas
,' + IIF(@pTanuloId IS NULL, N'''F''', N'IIF(mk.ID IS NULL, ''F'', ''T'')') + N' AS Keses
,' + IIF(@pTanuloId IS NULL, N'''F''', N'IIF(mu.ID IS NULL, ''F'', ''T'')') + N' AS Ures
,helyettes.ID HelyettesitoTanarID
,helyettes.C_NYOMTATASINEV HelyettesitoTanarNev
,tanar.ID AS TanarID
,tao.C_ADMINALTALKIIRT AS AdminAltalKiirt
,tao.C_ORARENDIORAGROUPID AS GroupId
,tao.C_TEMA AS Tema
,tao.C_TANTARGYID AS TantargyId
,tao.C_OSZTALYCSOPORTID AS OsztCsopId
,tao.C_EGYEDINAP as IsEgyediNap
,ISNULL(terem.C_TOBBORATLEHETTARTANI,''F'') as TeremTobbOratLehetTartani
FROM T_TANITASIORA_OSSZES tao
INNER JOIN T_OSZTALYCSOPORT_OSSZES ocs ON ocs.ID = tao.C_OSZTALYCSOPORTID AND ocs.TOROLT = ''F''
' + IIF(@pOsztalyCsoportId IS NULL, '', 'INNER JOIN dbo.fnGetKapcsolodoOsztalyCsoportokByDateRange(@pOsztalyCsoportId, @pIdoszakKezdete, @pIdoszakVege, @pIntezmenyId, @pTanevId) kocs ON tao.C_OSZTALYCSOPORTID = kocs.Id AND tao.C_DATUM >= kocs.Kezdete AND tao.C_DATUM < kocs.Vege') + '
INNER JOIN T_TANTARGY_OSSZES tt ON tao.C_TANTARGYID = tt.ID
INNER JOIN T_FELHASZNALO_OSSZES tanar ON tao.C_TANARID = tanar.ID
LEFT JOIN T_FELHASZNALO_OSSZES helyettes ON helyettes.ID = tao.C_HELYETTESITOTANARID
INNER JOIN T_TEREM_OSSZES terem ON terem.ID = tao.C_TEREMID
'
IF @pTanuloId IS NOT NULL BEGIN
SET @sql += N'
LEFT JOIN T_TANULOMULASZTAS_OSSZES mh ON mh.C_TANITASIORAKID = tao.ID AND mh.C_ORATANULOIID = @pTanuloId AND mh.C_TIPUS = 1500 AND mh.TOROLT = ''F''
LEFT JOIN T_TANULOMULASZTAS_OSSZES mk ON mk.C_TANITASIORAKID = tao.ID AND mk.C_ORATANULOIID = @pTanuloId AND mk.C_TIPUS = 1499 AND mk.TOROLT = ''F''
LEFT JOIN T_TANULOMULASZTAS_OSSZES mu ON mu.C_TANITASIORAKID = tao.ID AND mu.C_ORATANULOIID = @pTanuloId AND mu.C_TIPUS = 1817 AND mu.TOROLT = ''F''
'
END
SET @sql += N'
WHERE tao.TOROLT = ''F'' AND tao.C_TANEVID = @pTanevId
AND tao.C_DATUM >= @pIdoszakKezdete AND tao.C_DATUM < @pIdoszakVege
' + CASE @pIsNapirend WHEN 1 THEN N'AND tao.C_CSENGETESIRENDID IS NULL ' WHEN 0 THEN 'AND tao.C_CSENGETESIRENDID IS NOT NULL ' ELSE '' END + '
' + IIF(@pTanarId IS NULL, N'', IIF(@pIsHelyettesitesNelkul = 0, 'AND (tao.C_TANARID = @pTanarId OR tao.C_HELYETTESITOTANARID = @pTanarId)', 'AND tao.C_TANARID = @pTanarId')) + '
' + IIF(@pTantargyId IS NULL, N'', 'AND tao.C_TANTARGYID = @pTantargyId') + '
' + IIF(@pOravege IS NOT NULL AND @pOrakezdete IS NOT NULL, N'AND tao.C_ORAVEGE > @pOrakezdete AND tao.C_ORAKEZDETE < @pOravege', N'') + N'
' + IIF(@pHetnapja IS NULL, N'', N'AND tao.C_HETNAPJA = @pHetnapja') + N'
' + IIF(@pTeremId IS NULL, N'', 'AND tao.C_TEREMID = @pTeremId') + N'
' + IIF(@pFeladatKategoriaId IS NULL, N'', 'AND ocs.C_FELADATKATEGORIAID = @pFeladatKategoriaId') + N'
) tn ON tn.Datum = oo.Datum
AND tn.HetNapja = oo.HetNapja
' + CASE @pIsNapirend WHEN 1 THEN N'AND tn.OraKezdete = oo.OraKezdete AND tn.OraVege = oo.OraVege ' WHEN 0 THEN N'AND tn.Oraszam = oo.Oraszam ' ELSE N'AND ((tn.CsengetesiRendID IS NULL AND tn.OraKezdete = oo.OraKezdete AND tn.OraVege = oo.OraVege) OR (tn.CsengetesiRendID IS NOT NULL AND tn.Oraszam = oo.Oraszam)) ' END + '
AND tn.TanevRendOsztalyCsoportId = oo.TanevRendOsztalyCsoportId
AND tn.TantargyId = oo.TantargyId
AND tn.TanarID = oo.TanarID
'
END
--SELECT @sql
EXEC sp_executesql @sql, N'
@pIntezmenyId int
,@pTanevId int
,@pIdoszakKezdete datetime
,@pIdoszakVege datetime
,@pTanarId int
,@pIsHelyettesitesNelkul bit
,@pOsztalyCsoportId int
,@pTanuloId int
,@pTantargyId int
,@pTeremId int
,@pCsakOrarendiOrak bit
,@pIsNapirend bit
,@pFeladatKategoriaId int
,@pOrakezdete datetime
,@pOravege datetime
,@pHetnapja int'
,@pIntezmenyId = @pIntezmenyId
,@pTanevId = @pTanevId
,@pIdoszakKezdete = @pIdoszakKezdete
,@pIdoszakVege = @pIdoszakVege
,@pTanarId = @pTanarId
,@pIsHelyettesitesNelkul = @pIsHelyettesitesNelkul
,@pOsztalyCsoportId = @pOsztalyCsoportId
,@pTanuloId = @pTanuloId
,@pTantargyId = @pTantargyId
,@pTeremId = @pTeremId
,@pCsakOrarendiOrak = @pCsakOrarendiOrak
,@pIsNapirend = @pIsNapirend
,@pFeladatKategoriaId = @pFeladatKategoriaId
,@pOrakezdete = @pOrakezdete
,@pOravege = @pOravege
,@pHetnapja = @pHetnapja
END
GO

View File

@@ -0,0 +1,303 @@
DROP PROCEDURE IF EXISTS uspGenerateOrarend
GO
CREATE PROCEDURE uspGenerateOrarend
@pIntezmenyId int
,@pTanevId int
,@pIdoszakKezdete datetime = NULL
,@pIdoszakVege datetime = NULL
,@pOrarendiOraId int = NULL
,@pOsztalycsoportId int = NULL
AS
BEGIN
SET NOCOUNT ON;
DECLARE
@sql nvarchar(max) = N''
,@aktivCsengetesirend int;
SELECT
@pIdoszakKezdete = ISNULL(@pIdoszakKezdete, C_KEZDONAP)
,@pIdoszakVege = ISNULL(@pIdoszakVege, C_UTOLSONAP)
FROM T_TANEV
WHERE ID = @pTanevId
SELECT @aktivCsengetesirend = ID
FROM T_CSENGETESIREND
WHERE C_TANEVID = @pTanevId
AND TOROLT = 'F'
AND C_AKTIV = 'T'
IF @pOrarendiOraId IS NOT NULL BEGIN
IF (SELECT TOROLT FROM T_ORARENDIORA_OSSZES WHERE ID = @pOrarendiOraId) = 'T' BEGIN
DELETE orr
FROM T_ORAREND orr
WHERE orr.C_ORARENDIORAID = @pOrarendiOraId
END
ELSE BEGIN
DELETE orr
FROM T_ORAREND orr
WHERE orr.C_ORARENDIORAID = @pOrarendiOraId
AND (C_DATUM < @pIdoszakKezdete OR C_DATUM >= @pIdoszakVege)
END
END
ELSE BEGIN
DELETE orr
FROM T_ORAREND orr
INNER JOIN T_ORARENDIORA_OSSZES oo ON oo.ID = orr.C_ORARENDIORAID
WHERE oo.TOROLT = 'T' AND oo.C_TANEVID = @pTanevId
END
SET @sql += N'
CREATE TABLE #Osztalycsoport (
Id int
,IdoszakVege datetime
,TanevId int
)
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''
--PRINT ''Oszt<EFBFBD>lycsoport insert''
INSERT INTO #Osztalycsoport (Id, IdoszakVege, TanevId)
SELECT ocs.ID, IIF(C_VEGZOSEVFOLYAM = ''T'', @VegzosUtolsoTanitasiNap, @pIdoszakVege), ocs.C_TANEVID
FROM T_OSZTALYCSOPORT_OSSZES ocs
' + IIF(@pOrarendiOraId IS NULL, '', 'INNER JOIN T_ORARENDIORA_OSSZES oo ON oo.C_OSZTALYCSOPORTID = ocs.ID AND oo.TOROLT = ''F'' AND oo.ID = @pOrarendiOraId') + '
WHERE ocs.TOROLT = ''F'' ' + IIF(@pOsztalycsoportId IS NULL, '', 'AND ocs.ID = @pOsztalycsoportId') + '
--PRINT ''Oszt<EFBFBD>lycsoport update''
UPDATE ocs SET
ocs.IdoszakVege = NewVegeDatum
FROM #OsztalyCsoport ocs
INNER JOIN (
SELECT MIN(tr.C_DATUM) 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'
IF @pOsztalycsoportId IS NOT NULL OR @pOrarendiOraId IS NOT NULL BEGIN
SET @sql += N'
CREATE TABLE #OrarendiOra (
Id int primary key
);
--PRINT ''OrarendiOraTemp insert''
INSERT INTO #OrarendiOra (id)
SELECT ID
FROM T_ORARENDIORA_OSSZES
WHERE TOROLT = ''F''
' + IIF(@pOsztalycsoportId IS NULL, '', 'AND C_OSZTALYCSOPORTID = @pOsztalycsoportId')
+ IIF(@pOrarendiOraId IS NULL, '', 'AND ID = @pOrarendiOraId') + '
'
END
SET @sql += N'
CREATE TABLE #NaptariNap (
C_TANEVID int
,C_INTEZMENYID int
,C_NAPDATUMA datetime
,C_HETNAPJA int
,C_HETIREND int
,C_EGYEDINAP char(1) COLLATE Hungarian_CI_AI
,C_CSENGETESIRENDID int
,INDEX IX_001 CLUSTERED (C_TANEVID, C_HETNAPJA, C_INTEZMENYID, C_NAPDATUMA)
)
INSERT INTO #NaptariNap (
C_TANEVID
,C_INTEZMENYID
,C_NAPDATUMA
,C_HETNAPJA
,C_HETIREND
,C_EGYEDINAP
,C_CSENGETESIRENDID
) SELECT
nn.C_TANEVID
,nn.C_INTEZMENYID
,nn.C_NAPDATUMA
,nn.C_HETNAPJA
,nn.C_HETIREND
,ISNULL(tr.C_EGYEDINAP, ''F'')
,ISNULL(nn.C_AKTIVCSENGETESIRENDID, @aktivCsengetesirend)
FROM T_NAPTARINAP_OSSZES nn
LEFT JOIN T_TANEVRENDJE_OSSZES tr ON tr.C_DATUM = nn.C_NAPDATUMA AND tr.C_TANEVID = nn.C_TANEVID AND tr.C_OSSZESCSOPORTRAVONATKOZIK = ''T'' AND tr.TOROLT = ''F''
WHERE nn.C_TANEVID = @pTanevId AND nn.TOROLT = ''F''
AND nn.C_ORARENDINAP = ''T''
AND nn.C_NAPDATUMA BETWEEN @pIdoszakKezdete AND @pIdoszakVege
' + IIF(@pOrarendiOraId IS NULL, '', 'AND nn.C_HETNAPJA = (SELECT C_HETNAPJA FROM T_ORARENDIORA_OSSZES WHERE ID = @pOrarendiOraId)') + '
CREATE TABLE #NaptariNapOsztalycsoport (
C_TANEVID int
,C_INTEZMENYID int
,C_NAPDATUMA datetime
,C_HETNAPJA int
,C_HETIREND int
,C_EGYEDINAP char(1) COLLATE Hungarian_CI_AI
,C_OSZTALYCSOPORTID int
,C_CSENGETESIRENDID int
,INDEX IX_001 CLUSTERED (C_TANEVID, C_HETNAPJA, C_INTEZMENYID, C_NAPDATUMA, C_OSZTALYCSOPORTID)
)
INSERT INTO #NaptariNapOsztalycsoport (
C_TANEVID
,C_INTEZMENYID
,C_NAPDATUMA
,C_HETNAPJA
,C_HETIREND
,C_EGYEDINAP
,C_OSZTALYCSOPORTID
,C_CSENGETESIRENDID
) SELECT
tr.C_TANEVID
,tr.C_INTEZMENYID
,tr.C_DATUM
,tr.C_HETNAPJA
,tr.C_HETIREND
,tr.C_EGYEDINAP
,ocstr.C_OSZTALYCSOPORTID
,ISNULL(tr.C_CSENGETESIRENDID, @aktivCsengetesirend)
FROM T_TANEVRENDJE_OSSZES tr
INNER JOIN T_OSZTALYCSOPORT_TANEVRENDJE ocstr ON ocstr.C_TANEVRENDJEID = tr.ID
WHERE tr.C_TANEVID = @pTanevId
AND tr.TOROLT = ''F''
AND tr.C_ORARENDINAP = ''T''
AND tr.C_OSSZESCSOPORTRAVONATKOZIK = ''F''
AND tr.C_DATUM BETWEEN @pIdoszakKezdete AND @pIdoszakVege
' + IIF(@pOsztalycsoportId IS NULL, '', 'AND ocstr.C_OSZTALYCSOPORTID = @pOsztalycsoportId' )
SET @sql += N'
CREATE TABLE #Orarend (
Datum datetime
,OrarendiOraId int
,PRIMARY KEY CLUSTERED (Datum, OrarendioraId)
);
--PRINT ''Napt<EFBFBD>rinapTemp insert''
INSERT INTO #Orarend (
Datum
,OrarendiOraId
)'
SET @sql += N'
SELECT nn.C_NAPDATUMA, oo.ID
FROM #NaptariNap nn
INNER JOIN T_ORARENDIORA_OSSZES oo ON oo.C_HETNAPJA = nn.C_HETNAPJA
AND (oo.C_HETIREND = 1554 OR oo.C_HETIREND = nn.C_HETIREND)
AND nn.C_EGYEDINAP = oo.C_EGYEDINAP
AND oo.TOROLT=''F''
AND oo.C_TANEVID = nn.C_TANEVID
AND oo.C_INTEZMENYID = nn.C_INTEZMENYID
AND oo.C_ORAERVENYESSEGKEZDETE <= nn.C_NAPDATUMA AND oo.C_ORAERVENYESSEGVEGE > nn.C_NAPDATUMA
INNER JOIN #Osztalycsoport ocs ON ocs.Id = oo.C_OSZTALYCSOPORTID AND ocs.IdoszakVege >= nn.C_NAPDATUMA
'+IIF(@pOrarendiOraId IS NULL AND @pOsztalyCsoportId IS NULL, '', 'INNER JOIN #OrarendiOra oo2 ON oo2.Id = oo.ID') + '
WHERE NOT EXISTS (
SELECT 1 FROM T_TANEVRENDJE_OSSZES tr2
INNER JOIN T_OSZTALYCSOPORT_TANEVRENDJE ocstr ON tr2.ID = ocstr.C_TANEVRENDJEID
WHERE tr2.C_OSSZESCSOPORTRAVONATKOZIK = ''F'' AND tr2.TOROLT = ''F''
AND ocs.Id = ocstr.C_OSZTALYCSOPORTID AND nn.C_NAPDATUMA = tr2.C_DATUM)
AND (EXISTS (SELECT 1 FROM T_CSENGETESIRENDORA_OSSZES csro WHERE csro.C_CSENGETESIRENDID = nn.C_CSENGETESIRENDID AND oo.C_ORASZAM = csro.C_ORASZAM AND csro.TOROLT = ''F'') OR oo.C_ORASZAM IS NULL)
UNION ALL
SELECT nn.C_NAPDATUMA, oo.ID
FROM #NaptariNap nn
INNER JOIN T_ORARENDIORA_OSSZES oo ON oo.C_HETNAPJA = nn.C_HETNAPJA
AND (oo.C_HETIREND = 1554 OR oo.C_HETIREND = nn.C_HETIREND)
AND nn.C_EGYEDINAP = oo.C_EGYEDINAP
AND oo.TOROLT=''F''
AND oo.C_TANEVID = nn.C_TANEVID
AND oo.C_INTEZMENYID = nn.C_INTEZMENYID
AND oo.C_ORAERVENYESSEGKEZDETE = nn.C_NAPDATUMA AND oo.C_ORAERVENYESSEGVEGE = nn.C_NAPDATUMA
INNER JOIN #Osztalycsoport ocs ON ocs.Id = oo.C_OSZTALYCSOPORTID AND ocs.IdoszakVege >= nn.C_NAPDATUMA
'+IIF(@pOrarendiOraId IS NULL AND @pOsztalyCsoportId IS NULL, '', 'INNER JOIN #OrarendiOra oo2 ON oo2.Id = oo.ID') + '
WHERE NOT EXISTS (
SELECT 1 FROM T_TANEVRENDJE_OSSZES tr2
INNER JOIN T_OSZTALYCSOPORT_TANEVRENDJE ocstr ON tr2.ID = ocstr.C_TANEVRENDJEID
WHERE tr2.C_OSSZESCSOPORTRAVONATKOZIK = ''F'' AND tr2.TOROLT = ''F''
AND ocs.Id = ocstr.C_OSZTALYCSOPORTID AND nn.C_NAPDATUMA = tr2.C_DATUM)
AND (EXISTS (SELECT 1 FROM T_CSENGETESIRENDORA_OSSZES csro WHERE csro.C_CSENGETESIRENDID = nn.C_CSENGETESIRENDID AND oo.C_ORASZAM = csro.C_ORASZAM AND csro.TOROLT = ''F'') OR oo.C_ORASZAM IS NULL)
UNION ALL'
SET @sql += N'
SELECT nn.C_NAPDATUMA, oo.ID
FROM #NaptariNapOsztalycsoport nn
INNER JOIN T_ORARENDIORA_OSSZES oo ON oo.C_HETNAPJA = nn.C_HETNAPJA
AND (oo.C_HETIREND = 1554 OR oo.C_HETIREND = nn.C_HETIREND)
AND nn.C_EGYEDINAP = oo.C_EGYEDINAP
AND oo.TOROLT=''F''
AND oo.C_TANEVID = nn.C_TANEVID
AND oo.C_INTEZMENYID = nn.C_INTEZMENYID
AND oo.C_ORAERVENYESSEGKEZDETE <= nn.C_NAPDATUMA AND oo.C_ORAERVENYESSEGVEGE > nn.C_NAPDATUMA
AND oo.C_OSZTALYCSOPORTID = nn.C_OSZTALYCSOPORTID
INNER JOIN #Osztalycsoport ocs ON ocs.Id = nn.C_OSZTALYCSOPORTID AND ocs.IdoszakVege >= nn.C_NAPDATUMA
'+IIF(@pOrarendiOraId IS NULL AND @pOsztalyCsoportId IS NULL, '', 'INNER JOIN #OrarendiOra oo2 ON oo2.Id = oo.ID') + '
WHERE (EXISTS (SELECT 1 FROM T_CSENGETESIRENDORA_OSSZES csro WHERE csro.C_CSENGETESIRENDID = nn.C_CSENGETESIRENDID AND oo.C_ORASZAM = csro.C_ORASZAM AND csro.TOROLT = ''F'') OR oo.C_ORASZAM IS NULL)
UNION ALL
SELECT nn.C_NAPDATUMA, oo.ID
FROM #NaptariNapOsztalycsoport nn
INNER JOIN T_ORARENDIORA_OSSZES oo ON oo.C_HETNAPJA = nn.C_HETNAPJA
AND (oo.C_HETIREND = 1554 OR oo.C_HETIREND = nn.C_HETIREND)
AND nn.C_EGYEDINAP = oo.C_EGYEDINAP
AND oo.TOROLT=''F''
AND oo.C_TANEVID = nn.C_TANEVID
AND oo.C_INTEZMENYID = nn.C_INTEZMENYID
AND oo.C_ORAERVENYESSEGKEZDETE = nn.C_NAPDATUMA AND oo.C_ORAERVENYESSEGVEGE = nn.C_NAPDATUMA
AND oo.C_OSZTALYCSOPORTID = nn.C_OSZTALYCSOPORTID
INNER JOIN #Osztalycsoport ocs ON ocs.Id = nn.C_OSZTALYCSOPORTID AND ocs.IdoszakVege >= nn.C_NAPDATUMA
'+IIF(@pOrarendiOraId IS NULL AND @pOsztalyCsoportId IS NULL, '', 'INNER JOIN #OrarendiOra oo2 ON oo2.Id = oo.ID') + '
WHERE (EXISTS (SELECT 1 FROM T_CSENGETESIRENDORA_OSSZES csro WHERE csro.C_CSENGETESIRENDID = nn.C_CSENGETESIRENDID AND oo.C_ORASZAM = csro.C_ORASZAM AND csro.TOROLT = ''F'') OR oo.C_ORASZAM IS NULL)
'
SET @sql += N'
--PRINT ''MERGE''
MERGE T_ORAREND_OSSZES trg
USING #Orarend src ON
trg.C_ORARENDIORAID = src.OrarendioraId AND src.Datum = trg.C_DATUM
WHEN NOT MATCHED BY TARGET THEN
INSERT (
C_ORARENDIORAID
,C_DATUM
,C_TANEVID
,C_INTEZMENYID
) VALUES (
src.OrarendiOraId
,src.Datum
,@pTanevId
,@pIntezmenyId
)
WHEN NOT MATCHED BY SOURCE AND trg.C_TANEVID = @pTanevId AND trg.C_DATUM BETWEEN @pIdoszakKezdete AND @pIdoszakVege
' + IIF(@pOrarendiOraId IS NULL AND @pOsztalyCsoportId IS NULL, '', 'AND trg.C_ORARENDIORAID IN (SELECT Id FROM #OrarendiOra)') + '
THEN
DELETE
--OUTPUT $action, DELETED.C_DATUM, DELETED.C_ORARENDIORAID, INSERTED.C_DATUM, INSERTED.C_ORARENDIORAID
;'
-- select @sql
EXEC sp_executesql @sql,N'
@pIntezmenyId int
,@pTanevId int
,@pIdoszakKezdete datetime
,@pIdoszakVege datetime
,@pOrarendiOraId int
,@pOsztalycsoportId int
,@aktivCsengetesirend int'
,@pIntezmenyId = @pIntezmenyId
,@pTanevId = @pTanevId
,@pIdoszakKezdete = @pIdoszakKezdete
,@pIdoszakVege = @pIdoszakVege
,@pOrarendiOraId = @pOrarendiOraId
,@pOsztalycsoportId = @pOsztalycsoportId
,@aktivCsengetesirend = @aktivCsengetesirend
END
GO