98 lines
No EOL
4.3 KiB
Transact-SQL
98 lines
No EOL
4.3 KiB
Transact-SQL
DROP PROCEDURE IF EXISTS uspOrarendekTorlese
|
|
GO
|
|
|
|
CREATE PROCEDURE uspOrarendekTorlese
|
|
@pTanevId int
|
|
,@pUserId int
|
|
,@pIntervallumKezdete datetime
|
|
,@pIntervallumVege datetime
|
|
,@pNezetTipus int
|
|
,@pFeladatellatasiHelyJson nvarchar(max) = NULL
|
|
,@pOsztalyJson nvarchar(max) = NULL
|
|
,@pCsoportJson nvarchar(max) = NULL
|
|
AS
|
|
BEGIN
|
|
SET NOCOUNT ON
|
|
|
|
CREATE TABLE #OrarendiOrak (Id int, ErvenyessegKezdete datetime, ErvenyessegVege datetime, Oraszam int)
|
|
|
|
INSERT INTO #OrarendiOrak
|
|
EXEC uspGetOrarendiOrakForOrarendekTorlese @pTanevId, @pIntervallumKezdete, @pIntervallumVege, @pNezetTipus, @pFeladatellatasiHelyJson, @pOsztalyJson, @pCsoportJson
|
|
|
|
-- Jelmagyarázat:
|
|
-- D1: Intervallum kezdete
|
|
-- D2: Intervallum vége
|
|
-- ÉK: Órarend érvényességének kezdete
|
|
-- ÉV: Órarend érvényességének vége
|
|
|
|
UPDATE oo
|
|
SET
|
|
oo.C_ORAERVENYESSEGKEZDETE = CASE
|
|
-- Ha ÉK < D1 <= ÉV <= D2, akkor az ÉV-t kell D1-re módosítani
|
|
WHEN updateOrak.ErvenyessegKezdete < @pIntervallumKezdete AND @pIntervallumKezdete <= updateOrak.ErvenyessegVege AND updateOrak.ErvenyessegVege <= @pIntervallumVege THEN updateOrak.ErvenyessegKezdete
|
|
|
|
-- Ha D1 <= ÉK <= D2 < ÉV, akkor az ÉK-t kell D2+1 napra módosítani
|
|
WHEN @pIntervallumKezdete <= updateOrak.ErvenyessegKezdete AND updateOrak.ErvenyessegKezdete <= @pIntervallumVege AND @pIntervallumVege < updateOrak.ErvenyessegVege THEN DATEADD(day, 1, @pIntervallumVege)
|
|
|
|
-- Ha ÉK < D1 <= D2 < ÉV, akkor az ÉV-t kell D1-ra módosítani
|
|
WHEN updateOrak.ErvenyessegKezdete < @pIntervallumKezdete AND @pIntervallumVege < updateOrak.ErvenyessegVege THEN updateOrak.ErvenyessegKezdete
|
|
|
|
ELSE oo.C_ORAERVENYESSEGKEZDETE
|
|
END
|
|
,oo.C_ORAERVENYESSEGVEGE = CASE
|
|
-- Ha ÉK < D1 <= ÉV <= D2, akkor az ÉV-t kell D1-re módosítani
|
|
WHEN updateOrak.ErvenyessegKezdete < @pIntervallumKezdete AND @pIntervallumKezdete <= updateOrak.ErvenyessegVege AND updateOrak.ErvenyessegVege <= @pIntervallumVege THEN @pIntervallumKezdete
|
|
|
|
-- Ha D1 <= ÉK <= D2 < ÉV, akkor az ÉK-t kell D2+1 napra módosítani
|
|
WHEN @pIntervallumKezdete <= updateOrak.ErvenyessegKezdete AND updateOrak.ErvenyessegKezdete <= @pIntervallumVege AND @pIntervallumVege <= updateOrak.ErvenyessegVege THEN updateOrak.ErvenyessegVege
|
|
|
|
-- Ha ÉK < D1 <= D2 < ÉV, akkor az ÉV-t kell D1-ra módosítani
|
|
WHEN updateOrak.ErvenyessegKezdete < @pIntervallumKezdete AND @pIntervallumVege < updateOrak.ErvenyessegVege THEN @pIntervallumKezdete
|
|
|
|
ELSE oo.C_ORAERVENYESSEGVEGE
|
|
END
|
|
-- Ha az óra érvényessége teljesen a D1 és D2 között van (D1 <= ÉK <= ÉV <= D2), akkor a teljes elemet törölni kell
|
|
-- vagy ha D1 <= ÉK <= D2 < ÉV és ÉV = D2+1 nappal
|
|
,oo.TOROLT = IIF((@pIntervallumKezdete <= updateOrak.ErvenyessegKezdete AND updateOrak.ErvenyessegVege <= @pIntervallumVege)
|
|
OR (@pIntervallumKezdete <= updateOrak.ErvenyessegKezdete
|
|
AND updateOrak.ErvenyessegKezdete <= @pIntervallumVege
|
|
AND @pIntervallumVege < updateOrak.ErvenyessegVege
|
|
AND updateOrak.ErvenyessegVege = DATEADD(day, 1, @pIntervallumVege)), 'T', oo.TOROLT)
|
|
,oo.LASTCHANGED = GETDATE()
|
|
,oo.MODIFIER = @pUserId
|
|
FROM T_ORARENDIORA_OSSZES oo
|
|
INNER JOIN #OrarendiOrak updateOrak ON updateOrak.Id = oo.ID
|
|
|
|
DECLARE @insertId int, @insertErvenyessegKezdete datetime, @insertErvenyessegVege datetime, @insertOraszam int
|
|
|
|
-- Kell egy új órarendi elem is azonos GROUPID-val D2+1 naptól ÉV-ig
|
|
DECLARE insertCursor CURSOR FOR
|
|
SELECT
|
|
Id
|
|
,DATEADD(day, 1, @pIntervallumVege)
|
|
,ErvenyessegVege
|
|
,Oraszam
|
|
FROM #OrarendiOrak
|
|
WHERE ErvenyessegKezdete < @pIntervallumKezdete
|
|
AND @pIntervallumVege < ErvenyessegVege
|
|
|
|
OPEN insertCursor
|
|
FETCH NEXT FROM insertCursor INTO @insertId, @insertErvenyessegKezdete, @insertErvenyessegVege, @insertOraszam
|
|
|
|
WHILE @@FETCH_STATUS = 0
|
|
BEGIN
|
|
|
|
EXEC uspCopyOrarendiElem @insertId, NULL, @insertOraszam, @insertErvenyessegKezdete, @insertErvenyessegVege, 0
|
|
|
|
FETCH NEXT FROM insertCursor INTO @insertId, @insertErvenyessegKezdete, @insertErvenyessegVege, @insertOraszam
|
|
|
|
END
|
|
CLOSE insertCursor
|
|
DEALLOCATE insertCursor
|
|
|
|
DECLARE @intezmenyId int = (SELECT TOP 1 C_INTEZMENYID FROM T_TANEV_OSSZES WHERE TOROLT = 'F' AND ID = @pTanevId)
|
|
|
|
EXEC uspGenerateOrarend @intezmenyId, @pTanevId
|
|
|
|
END
|
|
GO |