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

View file

@ -0,0 +1,236 @@
-- ==========================================================================================
-- Author: Telek Ákos
-- Create date: 2016.05.31.
-- Description: Ha az adott tanévhez nincs egy naptári nap sem, akkor létrehoz egy alapot.
-- Ha van, akkor update-el a tanév rendje alapján.
-- ==========================================================================================
IF OBJECT_ID('[sp_GenerateNaptariNapok]') IS NOT NULL BEGIN
DROP PROCEDURE [sp_GenerateNaptariNapok]
END
GO
CREATE PROCEDURE [sp_GenerateNaptariNapok]
@intezmenyId int,
@tanevId int,
@overrideDefault bit = 0 -- felülírja-e az alapadatokat is?
AS
BEGIN
SET NOCOUNT ON;
SET DATEFIRST 1; -- Sets the first day of the week to a number from 1 (Monday) through 7 (Sunday).
DECLARE
@startDate datetime
,@endDate datetime
,@firstDay datetime
,@lastDay datetime
,@hetvegiTanitas int;
-- Adott @tanevId alapján kezdő és végdátum lekérdezése
SELECT
@startDate = t.C_KEZDONAP
,@endDate = t.C_UTOLSONAP
,@firstDay = t.C_ELSOTANITASINAP
,@lastDay = t.C_UTOLSOTANITASINAP
FROM T_TANEV t
WHERE t.ID = @tanevId
IF (SELECT COUNT(1) FROM T_NAPTARINAP_OSSZES WHERE C_TANEVID = @tanevId) = 0 BEGIN
SET @hetvegiTanitas = dbo.fnGetRendszerbeallitasEnumBool(7683, @intezmenyId, @tanevId)
-- 1 - H-P
-- 2 - H-Szo
-- 3 - H-V
-- a két dátum közötti napok kigenerálása
;WITH ctedaterange AS (
SELECT [Dates] = @startDate, week = 1
UNION ALL
SELECT [dates] + 1, week + IIF(DATEPART(dw, dates + 1) = 1, 1, 0)
FROM ctedaterange
WHERE [dates] + 1 <= @endDate
)
INSERT INTO T_NAPTARINAP (
C_HETIREND
,C_HETNAPJA
,C_HETSORSZAMA
,C_NAPDATUMA
,C_NAPTIPUSA
,C_ORARENDINAP
,C_ALAPHETIREND
,C_ALAPHETNAPJA
,C_ALAPNAPTIPUSA
,C_ALAPORARENDINAP
,C_ALAPCSENGETESIRENDID
,C_AKTIVCSENGETESIRENDID
,C_INTEZMENYID
,C_TANEVID
,TOROLT
,SERIAL
,LASTCHANGED
,CREATED
,MODIFIER
,CREATOR
) SELECT
ISNULL(h.C_HETIREND, 1554) AS C_HETIREND -- C_HETIREND - int
,hn.ID AS C_HETNAPJA -- C_HETNAPJA - int
,h.C_HETSORSZAMA AS C_HETSORSZAMA -- C_HETSORSZAMA - int
,s.dates AS C_NAPDATUMA -- C_NAPDATUMA - datetime
,CASE
WHEN DATEPART(dw, s.dates) = 6 AND @hetvegiTanitas IN (2, 3)
THEN 1386 -- 'Munkaszüneti nap'
WHEN DATEPART(dw, s.dates) = 7 AND @hetvegiTanitas = 3
THEN 1386 -- 'Munkaszüneti nap'
ELSE 1385 -- 'Tanítási nap'
END AS C_NAPTIPUSA -- C_NAPTIPUSA - int
,CASE
WHEN DATEPART(dw, s.dates) = 6 AND @hetvegiTanitas IN (2, 3)
THEN 'F' -- 'Munkaszüneti nap'
WHEN DATEPART(dw, s.dates) = 7 AND @hetvegiTanitas = 3
THEN 'F' -- 'Munkaszüneti nap'
ELSE 'T' -- 'Tanítási nap'
END AS C_ORARENDINAP -- C_ORARENDINAP - char(1)
,ISNULL(h.C_HETIREND, 1554) AS C_ALAPHETIREND -- C_ALAPHETIREND - int
,hn.ID AS C_ALAPHETNAPJA -- C_ALAPHETNAPJA - int
,CASE
WHEN DATEPART(dw, s.dates) = 6 AND @hetvegiTanitas IN (2, 3)
THEN 1386 -- 'Munkaszüneti nap'
WHEN DATEPART(dw, s.dates) = 7 AND @hetvegiTanitas = 3
THEN 1386 -- 'Munkaszüneti nap'
ELSE 1385 -- 'Tanítási nap'
END AS C_ALAPNAPTIPUSA -- C_ALAPNAPTIPUSA - int
,CASE
WHEN DATEPART(dw, s.dates) = 6 AND @hetvegiTanitas IN (2, 3)
THEN 'F' -- 'Munkaszüneti nap'
WHEN DATEPART(dw, s.dates) = 7 AND @hetvegiTanitas = 3
THEN 'F' -- 'Munkaszüneti nap'
ELSE 'T' -- 'Tanítási nap'
END AS C_ALAPORARENDINAP -- C_ALAPORARENDINAP - char(1)
,NULL AS C_ALAPCSENGETESIRENDID -- C_ALAPCSENGETESIRENDID - int
,NULL AS C_AKTIVCSENGETESIRENDID -- C_AKTIVCSENGETESIRENDID - int
,@intezmenyId AS C_INTEZMENYID -- C_INTEZMENYID - int
,@tanevId AS C_TANEVID -- C_TANEVID - int
,'F' AS TOROLT -- TOROLT - char(1)
,0 AS SERIAL -- SERIAL - int
,GETDATE() AS LASTCHANGED -- LASTCHANGED - datetime
,GETDATE() AS CREATED -- CREATED - datetime
,NULL AS MODIFIER -- MODIFIER - int
,NULL AS CREATOR -- CREATOR - int
FROM ctedaterange s
LEFT JOIN T_TANEVRENDJE_OSSZES t ON s.dates = t.C_DATUM AND t.C_TANEVID = @tanevId
INNER JOIN T_DICTIONARYITEMBASE_OSSZES hn ON hn.C_VALUE = DATEPART(dw, s.dates) AND hn.C_TYPE = 'HetNapjaTipus' AND hn.C_TANEVID = @tanevId
LEFT JOIN T_NAPTARIHET_OSSZES h ON s.dates BETWEEN h.C_HETKEZDONAPJA AND h.C_HETUTOLSONAPJA AND h.C_TANEVID = @tanevId
ORDER BY s.dates
OPTION (maxrecursion 0) -- hogy ne legyen korlátozva a regurzitás mélysége a CTE-ben /* default 100 */
END
ELSE BEGIN
SELECT @firstDay = ro.C_DATUM
FROM T_TANEVRENDJE_OSSZES ro
WHERE ro.C_TANEVID = @tanevId
AND ro.C_NAPTIPUSA = 1394
SELECT @lastDay = ro.C_DATUM
FROM T_TANEVRENDJE_OSSZES ro
WHERE ro.C_TANEVID = @tanevId
AND ro.C_NAPTIPUSA = 1395
SELECT
@firstDay = ISNULL(@firstDay, C_KEZDONAP)
,@lastDay = ISNULL(@lastDay, C_UTOLSONAP)
FROM T_TANEV_OSSZES
WHERE ID = @tanevId
IF @overrideDefault = 1 BEGIN
UPDATE T_NAPTARINAP_OSSZES SET -- Nyári szünet UPDATE-je
C_NAPTIPUSA = IIF(DATEPART(dw, C_NAPDATUMA) BETWEEN 1 AND 5, 1392, C_NAPTIPUSA)
,C_ALAPNAPTIPUSA = IIF(DATEPART(dw, C_NAPDATUMA) BETWEEN 1 AND 5, 1392, C_ALAPNAPTIPUSA)
,C_ORARENDINAP = 'F'
,C_ALAPORARENDINAP = 'F'
WHERE (C_NAPDATUMA < @firstDay OR C_NAPDATUMA > @lastDay)
AND C_TANEVID = @tanevId
END
IF @hetvegiTanitas = 1 BEGIN -- H - P
UPDATE nn SET
nn.C_ALAPORARENDINAP = 'F'
,nn.C_ORARENDINAP = IIF(tr.ID IS NULL, 'F', nn.C_ORARENDINAP)
,nn.C_NAPTIPUSA = IIF(tr.ID IS NULL, 1386, nn.C_NAPTIPUSA)
,nn.C_ALAPNAPTIPUSA = 1386
FROM T_NAPTARINAP_OSSZES nn
LEFT JOIN T_TANEVRENDJE_OSSZES tr ON tr.C_DATUM = nn.C_NAPDATUMA AND tr.C_OSSZESCSOPORTRAVONATKOZIK = 'T' AND tr.TOROLT = 'F'
WHERE DATEPART(dw, nn.C_NAPDATUMA) IN (6, 7)
AND nn.C_TANEVID = @tanevId
AND nn.C_NAPDATUMA BETWEEN @firstDay AND @lastDay
END
IF @hetvegiTanitas = 2 BEGIN -- H - Szo
UPDATE nn SET
nn.C_ALAPORARENDINAP = 'T'
,nn.C_ORARENDINAP = IIF(tr.ID IS NULL, 'T', nn.C_ORARENDINAP)
,nn.C_NAPTIPUSA = IIF(tr.ID IS NULL, 1385, nn.C_NAPTIPUSA)
,nn.C_ALAPNAPTIPUSA = 1385
FROM T_NAPTARINAP_OSSZES nn
LEFT JOIN T_TANEVRENDJE_OSSZES tr ON tr.C_DATUM = nn.C_NAPDATUMA AND tr.C_OSSZESCSOPORTRAVONATKOZIK = 'T' AND tr.TOROLT = 'F'
WHERE DATEPART(dw, nn.C_NAPDATUMA) = 6
AND nn.C_TANEVID = @tanevId
AND nn.C_NAPDATUMA BETWEEN @firstDay AND @lastDay
UPDATE nn SET
nn.C_ALAPORARENDINAP = 'F'
,nn.C_ORARENDINAP = IIF(tr.ID IS NULL, 'F', nn.C_ORARENDINAP)
,nn.C_NAPTIPUSA = IIF(tr.ID IS NULL, 1386, nn.C_NAPTIPUSA)
,nn.C_ALAPNAPTIPUSA = 1386
FROM T_NAPTARINAP_OSSZES nn
LEFT JOIN T_TANEVRENDJE_OSSZES tr ON tr.C_DATUM = nn.C_NAPDATUMA AND tr.C_OSSZESCSOPORTRAVONATKOZIK = 'T' AND tr.TOROLT = 'F'
WHERE DATEPART(dw, nn.C_NAPDATUMA) = 7
AND nn.C_TANEVID = @tanevId
AND nn.C_NAPDATUMA BETWEEN @firstDay AND @lastDay
END
IF @hetvegiTanitas = 3 BEGIN -- H - V
UPDATE nn SET
nn.C_ALAPORARENDINAP = 'T'
,nn.C_ORARENDINAP = IIF(tr.ID IS NULL, 'T', nn.C_ORARENDINAP)
,nn.C_NAPTIPUSA = IIF(tr.ID IS NULL, 1385, nn.C_NAPTIPUSA)
,nn.C_ALAPNAPTIPUSA = 1385
FROM T_NAPTARINAP_OSSZES nn
LEFT JOIN T_TANEVRENDJE_OSSZES tr ON tr.C_DATUM = nn.C_NAPDATUMA AND tr.C_OSSZESCSOPORTRAVONATKOZIK = 'T' AND tr.TOROLT = 'F'
WHERE DATEPART(dw, nn.C_NAPDATUMA) IN (6, 7)
AND nn.C_TANEVID = @tanevId
AND nn.C_NAPDATUMA BETWEEN @firstDay AND @lastDay
END
UPDATE n SET
n.C_HETIREND = IIF(x.TOROLT = 'F', ISNULL(x.C_HETIREND, ISNULL(h.C_HETIREND,n.C_ALAPHETIREND)), ISNULL(h.C_HETIREND,n.C_ALAPHETIREND))
,n.C_HETNAPJA = IIF(x.TOROLT = 'F', ISNULL(x.C_HETNAPJA, n.C_HETNAPJA), n.C_ALAPHETNAPJA)
,n.C_NAPTIPUSA = IIF(x.TOROLT = 'F', ISNULL(x.C_NAPTIPUSA, n.C_NAPTIPUSA), n.C_ALAPNAPTIPUSA)
,n.C_ORARENDINAP = IIF(x.TOROLT = 'F', ISNULL(x.C_ORARENDINAP, n.C_ORARENDINAP), n.C_ALAPORARENDINAP)
,n.C_AKTIVCSENGETESIRENDID = IIF(x.TOROLT = 'F', ISNULL(x.C_CSENGETESIRENDID, n.C_AKTIVCSENGETESIRENDID), n.C_ALAPCSENGETESIRENDID)
,n.C_ALAPHETIREND = IIF(@overrideDefault = 0 OR x.TOROLT = 'T', n.C_ALAPHETIREND, h.C_HETIREND)
,n.C_ALAPHETNAPJA = IIF(@overrideDefault = 0 OR x.TOROLT = 'T', n.C_ALAPHETNAPJA, ISNULL(x.C_HETNAPJA, n.C_ALAPHETNAPJA))
,n.C_ALAPNAPTIPUSA = IIF(@overrideDefault = 0 OR x.TOROLT = 'T', n.C_ALAPNAPTIPUSA, ISNULL(x.C_NAPTIPUSA, n.C_ALAPNAPTIPUSA))
,n.C_ALAPORARENDINAP = IIF(@overrideDefault = 0 OR x.TOROLT = 'T', n.C_ALAPORARENDINAP, ISNULL(x.C_ORARENDINAP, n.C_ALAPORARENDINAP))
,n.C_ALAPCSENGETESIRENDID = IIF(@overrideDefault = 0 OR x.TOROLT = 'T', n.C_AKTIVCSENGETESIRENDID, ISNULL(x.C_CSENGETESIRENDID, n.C_ALAPCSENGETESIRENDID))
FROM T_NAPTARINAP_OSSZES n
INNER JOIN T_NAPTARIHET_OSSZES h ON n.C_NAPDATUMA BETWEEN h.C_HETKEZDONAPJA AND h.C_HETUTOLSONAPJA
LEFT JOIN (
SELECT ro.C_DATUM, ro.TOROLT, ro.C_HETNAPJA, ro.C_NAPTIPUSA, ro.C_ORARENDINAP, ro.C_CSENGETESIRENDID ,ro.C_HETIREND
FROM T_TANEVRENDJE_OSSZES ro
WHERE ro.C_TANEVID = @tanevId
AND ro.TOROLT = 'F'
AND NOT EXISTS (SELECT 1 FROM T_OSZTALYCSOPORT_TANEVRENDJE o WHERE o.C_TANEVRENDJEID = ro.ID)
UNION ALL
SELECT DISTINCT ro.C_DATUM, ro.TOROLT, NULL, NULL, NULL, NULL,NULL
FROM T_TANEVRENDJE_OSSZES ro
WHERE ro.C_TANEVID = @tanevId
AND ro.TOROLT = 'T'
AND NOT EXISTS (SELECT 1 FROM T_TANEVRENDJE_OSSZES r WHERE ro.C_DATUM = r.C_DATUM AND C_TANEVID = @tanevId AND TOROLT = 'F')
AND NOT EXISTS (SELECT 1 FROM T_OSZTALYCSOPORT_TANEVRENDJE o WHERE o.C_TANEVRENDJEID = ro.ID)
) x ON x.C_DATUM = n.C_NAPDATUMA
WHERE n.C_TANEVID = @tanevId AND h.C_TANEVID = @tanevId
END
END
GO

View file

@ -0,0 +1,528 @@
-- =============================================
-- Author: Telek Ákos
-- Create date: 2018.01.15.
-- Description: Órarend lekérdezése
-- =============================================
DROP PROCEDURE IF EXISTS [dbo].[sp_GetOrarend]
GO
CREATE PROCEDURE [dbo].[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
AS
BEGIN
SET NOCOUNT ON;
DECLARE
@sql nvarchar(max) = ''
,@sqlOrarendiora nvarchar(max) = ''
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
,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'
IF @pOsztalyCsoportId IS NOT NULL BEGIN
SELECT @IsVegzosEvfolyam = C_VEGZOSEVFOLYAM
FROM T_OSZTALYCSOPORT_OSSZES
WHERE ID = @pOsztalyCsoportId
INSERT INTO #OsztalyCsoportok (Id, Nev, Oka, IsVegzos, IdoszakKezdete, IdoszakVege)
SELECT
kocs.ID
,ocs.C_NEV
,'''' AS OKA
,ocs.C_VEGZOSEVFOLYAM
,kocs.Kezdete
,CASE
WHEN ocs.C_VEGZOSEVFOLYAM = ''T'' AND @VegzosUtolsoTanitasiNap IS NOT NULL AND kocs.Vege > @VegzosUtolsoTanitasiNap THEN @VegzosUtolsoTanitasiNap + 1
WHEN kocs.Vege < @pIdoszakVege THEN kocs.Vege
ELSE @pIdoszakVege
END
FROM dbo.fnGetKapcsolodoOsztalyCsoportokByDateRange(@pOsztalyCsoportId, @pIdoszakKezdete, @pIdoszakVege, @pIntezmenyId, @pTanevId) kocs
INNER JOIN T_OSZTALYCSOPORT_OSSZES ocs ON ocs.ID = kocs.ID AND ocs.TOROLT = ''F''
END
ELSE BEGIN
IF @pTanuloId IS NOT NULL BEGIN
SELECT @IsVegzosEvfolyam = ocs.C_VEGZOSEVFOLYAM
FROM T_TANULOCSOPORT_OSSZES tcs
INNER JOIN T_OSZTALYCSOPORT_OSSZES ocs ON ocs.ID = tcs.C_OSZTALYCSOPORTID
WHERE EXISTS (SELECT 1 FROM T_OSZTALY_OSSZES o WHERE o.ID = ocs.ID)
AND tcs.C_TANULOID = @pTanuloId AND tcs.TOROLT = ''F''
AND tcs.C_BELEPESDATUM <= @pIdoszakVege
AND (tcs.C_KILEPESDATUM > @pIdoszakKezdete OR tcs.C_KILEPESDATUM IS NULL)
INSERT INTO #OsztalyCsoportok (Id, Nev, Oka, IsVegzos, IdoszakKezdete, IdoszakVege)
SELECT
tcs.C_OSZTALYCSOPORTID
,ocs.C_NEV
,'''' AS Oka
,@IsVegzosEvfolyam
,IIF(tcs.C_BELEPESDATUM < @pIdoszakKezdete, @pIdoszakKezdete, tcs.C_BELEPESDATUM)
,CASE
WHEN @pIdoszakVege <= @VegzosUtolsoTanitasiNap AND @pIdoszakVege <= ISNULL(tcs.C_KILEPESDATUM, @pIdoszakVege)
THEN @pIdoszakVege
WHEN @IsVegzosEvfolyam = ''T'' AND @VegzosUtolsoTanitasiNap <= @pIdoszakVege AND @VegzosUtolsoTanitasiNap <= ISNULL(tcs.C_KILEPESDATUM, @pIdoszakVege)
THEN @VegzosUtolsoTanitasiNap+1
ELSE ISNULL(tcs.C_KILEPESDATUM, @pIdoszakVege)
END
FROM T_TANULOCSOPORT_OSSZES tcs
INNER JOIN T_OSZTALYCSOPORT_OSSZES ocs ON tcs.C_OSZTALYCSOPORTID = ocs.ID AND ocs.TOROLT = ''F''
WHERE tcs.C_TANULOID = @pTanuloId AND tcs.TOROLT = ''F''
AND tcs.C_BELEPESDATUM <= @pIdoszakVege
AND (tcs.C_KILEPESDATUM > @pIdoszakKezdete OR tcs.C_KILEPESDATUM IS NULL)
' + IIF(@pFeladatKategoriaId IS NULL, '', 'AND ocs.C_FELADATKATEGORIAID = @pFeladatKategoriaId') + '
END'
SET @sql += N'
--Performancia noveles miatt
ELSE IF @pTanarId IS NOT NULL BEGIN
INSERT INTO #OsztalyCsoportok (Id, Nev, Oka, IsVegzos, IdoszakKezdete, IdoszakVege)
SELECT
ID
,ocs.C_NEV
,''''
,ocs.C_VEGZOSEVFOLYAM
,@pIdoszakKezdete
,IIF(ocs.C_VEGZOSEVFOLYAM = ''T'' AND @VegzosUtolsoTanitasiNap IS NOT NULL AND @pIdoszakVege > @VegzosUtolsoTanitasiNap, @VegzosUtolsoTanitasiNap + 1, @pIdoszakVege)
FROM (
SELECT
oo.C_OSZTALYCSOPORTID
FROM T_ORARENDIORA_OSSZES oo
WHERE oo.C_TANARID = @pTanarId
-- AND oo.C_ORAERVENYESSEGKEZDETE <= @pIdoszakVege
-- AND oo.C_ORAERVENYESSEGVEGE >= @pIdoszakKezdete
AND oo.TOROLT = ''F''
UNION
SELECT
oo.C_OSZTALYCSOPORTID
FROM T_HELYETTESITESIIDOSZAK_OSSZES hi
INNER JOIN T_ORARENDIORA_OSSZES oo ON oo.ID = hi.C_HELYETTESITETTORARENDID AND oo.TOROLT = ''F''
WHERE hi.C_HELYETTESTANAROKID = @pTanarId
AND hi.C_HELYETTESITESNAPJA >= @pIdoszakKezdete
AND hi.C_HELYETTESITESNAPJA < @pIdoszakVege
AND hi.TOROLT = ''F''
UNION
SELECT
tno.C_OSZTALYCSOPORTID
FROM T_TANITASIORA_OSSZES tno
WHERE tno.C_HELYETTESITOTANARID = @pTanarId
AND tno.C_DATUM < @pIdoszakVege
AND tno.C_DATUM >= @pIdoszakKezdete
AND tno.TOROLT = ''F''
UNION
SELECT
tno.C_OSZTALYCSOPORTID
FROM T_TANITASIORA_OSSZES tno
WHERE tno.C_TANARID = @pTanarId
AND tno.C_DATUM < @pIdoszakVege
AND tno.C_DATUM >= @pIdoszakKezdete
AND tno.TOROLT = ''F''
) x
INNER JOIN T_OSZTALYCSOPORT_OSSZES ocs ON ocs.ID = x.C_OSZTALYCSOPORTID
' + IIF(@pFeladatKategoriaId IS NULL, '', 'WHERE ocs.C_FELADATKATEGORIAID = @pFeladatKategoriaId') + '
END
--Performancia noveles miatt
ELSE BEGIN
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''
' + IIF(@pFeladatKategoriaId IS NULL, '', 'AND ocs.C_FELADATKATEGORIAID = @pFeladatKategoriaId') + '
END
END'
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
'
/* Órarend lekérdezés */
IF @pCsakOrarendiOrak = 0 BEGIN
SET @sql += N'
INSERT INTO #OrarendTable
'
END
SET @sqlOrarendiora += N'
SELECT DISTINCT
oo.ID AS Id
,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
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''
' + IIF(@pIsNapirend = 0, 'INNER', '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''
WHERE oo.TOROLT = ''F''
' + 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 + '
AND oo.C_TANEVID = @pTanevId
' + IIF(@pTantargyId IS NULL, N'', N'AND oo.C_TANTARGYID = @pTantargyId') + N'
' + IIF(@pTeremId IS NULL, N'', 'AND oo.C_TEREMID = @pTeremId')
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 >= @pIdoszakKezdete AND hisz.C_HELYETTESITESNAPJA < ocs.IdoszakVege
'
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
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
,oo.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
FROM T_TANITASIORA_OSSZES tao
INNER JOIN #OsztalyCsoportok oo ON tao.C_OSZTALYCSOPORTID = oo.Id AND tao.C_DATUM >= oo.IdoszakKezdete AND tao.C_DATUM < oo.IdoszakVege
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(@pTeremId IS NULL, N'', 'AND tao.C_TEREMID = @pTeremId') + '
) 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
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'
,@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
END