kreta/Kreta.DataAccess.Migrations/Scripts/Archive/20200429154825_KRETA2_4067/uspOrarendImport.sql
2024-03-13 00:33:46 +01:00

353 lines
12 KiB
Transact-SQL

DROP PROCEDURE IF EXISTS uspOrarendImport
GO
CREATE PROCEDURE uspOrarendImport
@pIntezmenyId int
,@pTanevId int
,@pUserId int
,@pImportJson nvarchar(max)
,@pIsTorles bit
,@pIsModositas bit
,@pIsNapirendImport bit
,@pOrarendiOraLezarasDateTime datetime = NULL
AS
BEGIN
SET NOCOUNT ON;
DECLARE
@tableNameList nvarchar(2000) = 'T_TEREM_OSSZES'
,@actualJson nvarchar(max) = ''
,@lastChangedDateTime datetime = GETDATE()
--Ha törlés van, akkor a kapcsolódások törlésével kell kezdenünk!
IF (@pIsTorles = 1) BEGIN
--Órarendi óra kapcsolatainak törlése
UPDATE tao SET
tao.C_ORARENDIORAID = NULL
,tao.SERIAL = tao.SERIAL + 1
,tao.LASTCHANGED = @lastChangedDateTime
,tao.MODIFIER = @pUserId
FROM T_TANITASIORA_OSSZES tao
WHERE tao.C_INTEZMENYID = @pIntezmenyId
AND tao.C_TANEVID = @pTanevId
AND tao.TOROLT = 'F'
AND EXISTS (
SELECT TOP 1 ID
FROM T_ORARENDIORA_OSSZES oo
WHERE oo.ID = tao.C_ORARENDIORAID
AND oo.C_INTEZMENYID = @pIntezmenyId
AND oo.C_TANEVID = @pTanevId
AND oo.TOROLT = 'F'
AND oo.C_IMPORTALT = 'T'
AND ((@pIsNapirendImport = 0 AND oo.C_CSENGETESIRENDID IS NOT NULL)
OR (@pIsNapirendImport = 1 AND oo.C_CSENGETESIRENDID IS NULL))
)
UPDATE hf SET
hf.TOROLT = 'T'
,hf.SERIAL = hf.SERIAL + 1
,hf.LASTCHANGED = @lastChangedDateTime
,hf.MODIFIER = @pUserId
FROM T_HAZIFELADATOK_OSSZES hf
WHERE hf.C_INTEZMENYID = @pIntezmenyId
AND hf.C_TANEVID = @pTanevId
AND hf.TOROLT = 'F'
AND EXISTS (
SELECT TOP 1 ID
FROM T_ORARENDIORA_OSSZES oo
WHERE oo.ID = hf.C_ORARENDIORAID
AND oo.C_INTEZMENYID = @pIntezmenyId
AND oo.C_TANEVID = @pTanevId
AND oo.TOROLT = 'F'
AND oo.C_IMPORTALT = 'T'
AND ((@pIsNapirendImport = 0 AND oo.C_CSENGETESIRENDID IS NOT NULL)
OR (@pIsNapirendImport = 1 AND oo.C_CSENGETESIRENDID IS NULL))
)
UPDATE oot SET
oot.C_ORARENDIORAID = NULL
,oot.SERIAL = oot.SERIAL + 1
,oot.LASTCHANGED = @lastChangedDateTime
,oot.MODIFIER = @pUserId
FROM T_ORARENDIORATULAJDONSAG oot
WHERE oot.C_INTEZMENYID = @pIntezmenyId
AND oot.C_TANEVID = @pTanevId
AND oot.TOROLT = 'F'
AND EXISTS (
SELECT TOP 1 ID
FROM T_ORARENDIORA_OSSZES oo
WHERE oo.ID = oot.C_ORARENDIORAID
AND oo.C_INTEZMENYID = @pIntezmenyId
AND oo.C_TANEVID = @pTanevId
AND oo.TOROLT = 'F'
AND oo.C_IMPORTALT = 'T'
AND ((@pIsNapirendImport = 0 AND oo.C_CSENGETESIRENDID IS NOT NULL)
OR (@pIsNapirendImport = 1 AND oo.C_CSENGETESIRENDID IS NULL))
)
DELETE hi
FROM T_HELYETTESITESIIDOSZAK_OSSZES hi
WHERE EXISTS (
SELECT TOP 1 ID
FROM T_ORARENDIORA_OSSZES oo
WHERE oo.ID = hi.C_HELYETTESITETTORARENDID
AND oo.C_INTEZMENYID = @pIntezmenyId
AND oo.C_TANEVID = @pTanevId
AND oo.TOROLT = 'F'
AND oo.C_IMPORTALT = 'T'
AND ((@pIsNapirendImport = 0 AND oo.C_CSENGETESIRENDID IS NOT NULL)
OR (@pIsNapirendImport = 1 AND oo.C_CSENGETESIRENDID IS NULL))
)
--Órarendi órák törlése
UPDATE oo SET
oo.TOROLT = 'T'
,oo.SERIAL = oo.SERIAL + 1
,oo.LASTCHANGED = @lastChangedDateTime
,oo.MODIFIER = @pUserId
FROM T_ORARENDIORA_OSSZES oo
WHERE oo.C_INTEZMENYID = @pIntezmenyId
AND oo.C_TANEVID = @pTanevId
AND oo.TOROLT = 'F'
AND oo.C_IMPORTALT = 'T'
AND oo.C_ORAERVENYESSEGVEGE <> oo.C_ORAERVENYESSEGKEZDETE
AND ((@pIsNapirendImport = 0 AND oo.C_CSENGETESIRENDID IS NOT NULL)
OR (@pIsNapirendImport = 1 AND oo.C_CSENGETESIRENDID IS NULL))
END
--Ha módosítás van, akkor a már létező órarendi órák módosításával kell kezdenünk!
IF (@pIsModositas = 1) BEGIN
--Korábbi órarendi órák lezárása
UPDATE oo SET
oo.C_ORAERVENYESSEGVEGE = @pOrarendiOraLezarasDateTime
,oo.SERIAL = oo.SERIAL + 1
,oo.LASTCHANGED = @lastChangedDateTime
,oo.MODIFIER = @pUserId
FROM T_ORARENDIORA_OSSZES oo
WHERE oo.C_INTEZMENYID = @pIntezmenyId
AND oo.C_TANEVID = @pTanevId
AND oo.TOROLT = 'F'
AND (oo.C_ORAERVENYESSEGVEGE IS NULL
OR oo.C_ORAERVENYESSEGVEGE > @pOrarendiOraLezarasDateTime)
AND oo.C_ORAERVENYESSEGVEGE <> oo.C_ORAERVENYESSEGKEZDETE
AND oo.C_ORAERVENYESSEGKEZDETE < @pOrarendiOraLezarasDateTime
AND ((@pIsNapirendImport = 0 AND oo.C_CSENGETESIRENDID IS NOT NULL)
OR (@pIsNapirendImport = 1 AND oo.C_CSENGETESIRENDID IS NULL))
--A korábban felvett, de későbbi időpontra importált órarendi órák törlése
UPDATE oo SET
oo.TOROLT = 'T'
,oo.SERIAL = oo.SERIAL + 1
,oo.LASTCHANGED = @lastChangedDateTime
,oo.MODIFIER = @pUserId
FROM T_ORARENDIORA_OSSZES oo
WHERE oo.C_INTEZMENYID = @pIntezmenyId
AND oo.C_TANEVID = @pTanevId
AND oo.TOROLT = 'F'
AND oo.C_IMPORTALT = 'T'
AND oo.C_ORAERVENYESSEGVEGE <> oo.C_ORAERVENYESSEGKEZDETE
AND oo.C_ORAERVENYESSEGKEZDETE >= @pOrarendiOraLezarasDateTime
AND ((@pIsNapirendImport = 0 AND oo.C_CSENGETESIRENDID IS NOT NULL)
OR (@pIsNapirendImport = 1 AND oo.C_CSENGETESIRENDID IS NULL))
END
EXECUTE uspTantargyfelosztasImport @pIntezmenyId, @pTanevId, @pUserId, @pImportJson, @pIsTorles
--NOTE: A törlés azért false, mert a T_TEREM_OSSZES view-ból nem törlünk importnál!
EXECUTE uspDynamicImportJsonSplit @pIntezmenyId = @pIntezmenyId, @pTanevId = @pTanevId, @pUserId = @pUserId, @pImportJson = @pImportJson, @pIsTorles = 0, @pIsSubTable = 0, @pTableNameList = @tableNameList
--NOTE: Órarendi óra temp tábla incializálása
CREATE TABLE #OrarendiOraTempTable (
ID int
,C_TANARID int
,C_TANTARGYID int
,C_OSZTALYCSOPORTID int
,C_TEREMID int
,C_FOGLALKOZASID int
,C_HETIREND int
,C_HETNAPJA int
,C_ORASZAM int
,C_ORAERVENYESSEGKEZDETE datetime
,C_ORAERVENYESSEGVEGE datetime
,C_EGYEDINAP char(1)
,C_ISKEZZELFELVETTEGYEDINAp char(1)
,C_CSENGETESIRENDID int
,C_CSENGETESIRENDORAID int
,C_ORAKEZDETE datetime
,C_ORAVEGE datetime
,C_BONTOTT char(1)
,C_ORATULAJDONOSID int
,C_IMPORTALT char(1)
,C_INTEZMENYID int
,C_TANEVID int
,TOROLT char(1)
,SERIAL int
,LASTCHANGED datetime
,CREATED datetime
,MODIFIER int
,CREATOR int
,ELOZOTANEVIREKORDID int
,NNID int
,Operation int
)
INSERT INTO #OrarendiOraTempTable
SELECT
oo.ID
,oo.C_TANARID
,tt.ID AS C_TANTARGYID
,ocs.ID AS C_OSZTALYCSOPORTID
,t.ID AS C_TEREMID
,fg.ID AS C_FOGLALKOZASID
,oo.C_HETIREND
,oo.C_HETNAPJA
,oo.C_ORASZAM
,oo.C_ORAERVENYESSEGKEZDETE
,oo.C_ORAERVENYESSEGVEGE
,oo.C_EGYEDINAP
,oo.C_ISKEZZELFELVETTEGYEDINAP
,oo.C_CSENGETESIRENDID
,oo.C_CSENGETESIRENDORAID
,oo.C_ORAKEZDETE
,oo.C_ORAVEGE
,oo.C_BONTOTT
,oo.C_ORATULAJDONOSID
,oo.C_IMPORTALT
,oo.C_INTEZMENYID
,oo.C_TANEVID
,oo.TOROLT
,oo.SERIAL
,oo.LASTCHANGED
,oo.CREATED
,oo.MODIFIER
,oo.CREATOR
,oo.ELOZOTANEVIREKORDID
,oo.NNID
,oo.Operation
FROM OPENJSON(@pImportJson, N'lax $.ImportJson.T_ORARENDIORA_OSSZES')
WITH (
ID int '$.ID'
,C_TANARID int '$.C_TANARID'
,C_HETIREND int '$.C_HETIREND'
,C_HETNAPJA int '$.C_HETNAPJA'
,C_ORASZAM int '$.C_ORASZAM'
,C_ORAERVENYESSEGKEZDETE datetime '$.C_ORAERVENYESSEGKEZDETE'
,C_ORAERVENYESSEGVEGE datetime '$.C_ORAERVENYESSEGVEGE'
,C_EGYEDINAP char(1) '$.C_EGYEDINAP'
,C_ISKEZZELFELVETTEGYEDINAP char(1) '$.C_ISKEZZELFELVETTEGYEDINAP'
,C_CSENGETESIRENDID int '$.C_CSENGETESIRENDID'
,C_CSENGETESIRENDORAID int '$.C_CSENGETESIRENDORAID'
,C_ORAKEZDETE datetime '$.C_ORAKEZDETE'
,C_ORAVEGE datetime '$.C_ORAVEGE'
,C_BONTOTT char(1) '$.C_BONTOTT'
,C_ORATULAJDONOSID int '$.C_ORATULAJDONOSID'
,C_IMPORTALT char(1) '$.C_IMPORTALT'
,C_INTEZMENYID int '$.C_INTEZMENYID'
,C_TANEVID int '$.C_TANEVID'
,TOROLT char(1) '$.TOROLT'
,SERIAL int '$.SERIAL'
,LASTCHANGED datetime '$.LASTCHANGED'
,CREATED datetime '$.CREATED'
,MODIFIER int '$.MODIFIER'
,CREATOR int '$.CREATOR'
,ELOZOTANEVIREKORDID int '$.ELOZOTANEVIREKORDID'
,NNID int '$.NNID'
,Operation int '$.Operation'
,TantargyNev nvarchar(255) '$.TantargyNev'
,OsztalyCsoportNev nvarchar(255) '$.OsztalyCsoportNev'
,TeremNev nvarchar(255) '$.TeremNev'
) oo
LEFT JOIN T_TANTARGY_OSSZES tt ON
--NOTE: A leküldött adat már teljesen jól formázott, de a db-ben lehetnek rossz adatok. Az összehasonlításhoz ezt csináljuk:
-- Kisbetűsítjük -> Lecseréljük a NO BREAK SPACE-eket, SPACE-ekre -> Lecseréljük az összes többszörös szóközt egyre -> Trimmelünk
LTRIM(RTRIM(REPLACE(REPLACE(REPLACE(REPLACE(LOWER(tt.C_NEV),CHAR(160),CHAR(32)),CHAR(32),'(¤¤)'),'¤)(¤',''),'(¤¤)',CHAR(32)))) = LOWER(oo.TantargyNev)
AND tt.C_INTEZMENYID = @pIntezmenyId
AND tt.C_TANEVID = @pTanevId
AND tt.TOROLT = 'F'
LEFT JOIN T_OSZTALYCSOPORT_OSSZES ocs ON
--NOTE: A leküldött adat már teljesen jól formázott, de a db-ben lehetnek rossz adatok. Az összehasonlításhoz ezt csináljuk:
-- Kisbetűsítjük -> Lecseréljük a NO BREAK SPACE-eket, SPACE-ekre -> Lecseréljük az összes többszörös szóközt egyre -> Trimmelünk
LTRIM(RTRIM(REPLACE(REPLACE(REPLACE(REPLACE(LOWER(ocs.C_NEV),CHAR(160),CHAR(32)),CHAR(32),'(¤¤)'),'¤)(¤',''),'(¤¤)',CHAR(32)))) = LOWER(oo.OsztalyCsoportNev)
AND ocs.C_INTEZMENYID = @pIntezmenyId
AND ocs.C_TANEVID = @pTanevId
AND ocs.TOROLT = 'F'
LEFT JOIN T_TEREM_OSSZES t ON
--NOTE: A leküldött adat már teljesen jól formázott, de a db-ben lehetnek rossz adatok. Az összehasonlításhoz ezt csináljuk:
-- Kisbetűsítjük -> Lecseréljük a NO BREAK SPACE-eket, SPACE-ekre -> Lecseréljük az összes többszörös szóközt egyre -> Trimmelünk
LTRIM(RTRIM(REPLACE(REPLACE(REPLACE(REPLACE(LOWER(t.C_NEV),CHAR(160),CHAR(32)),CHAR(32),'(¤¤)'),'¤)(¤',''),'(¤¤)',CHAR(32)))) = LOWER(oo.TeremNev)
AND t.C_INTEZMENYID = @pIntezmenyId
AND t.C_TANEVID = @pTanevId
AND t.TOROLT = 'F'
LEFT JOIN T_FOGLALKOZAS_OSSZES fg ON
fg.C_OSZTALYCSOPORTID = ocs.ID
AND fg.C_TANARID = oo.C_TANARID
AND fg.C_TANTARGYID = tt.ID
AND fg.C_INTEZMENYID = @pIntezmenyId
AND fg.C_TANEVID = @pTanevId
AND fg.TOROLT = 'F'
--Órarendi órák beszúrása
SET @actualJson = ' { "ImportJson":{ "T_ORARENDIORA_OSSZES":' + (
SELECT
oo.ID
,oo.C_TANARID
,oo.C_TANTARGYID
,oo.C_OSZTALYCSOPORTID
,oo.C_TEREMID
,oo.C_FOGLALKOZASID
,oo.C_HETIREND
,oo.C_HETNAPJA
,oo.C_ORASZAM
,oo.C_ORAERVENYESSEGKEZDETE
,oo.C_ORAERVENYESSEGVEGE
,oo.C_EGYEDINAP
,oo.C_ISKEZZELFELVETTEGYEDINAP
,oo.C_CSENGETESIRENDID
,oo.C_CSENGETESIRENDORAID
,oo.C_ORAKEZDETE
,oo.C_ORAVEGE
,oo.C_BONTOTT
,oo.C_ORATULAJDONOSID
,oo.C_IMPORTALT
,oo.C_INTEZMENYID
,oo.C_TANEVID
,oo.TOROLT
,oo.SERIAL
,oo.LASTCHANGED
,oo.CREATED
,oo.MODIFIER
,oo.CREATOR
,oo.ELOZOTANEVIREKORDID
,oo.NNID
,oo.Operation
FROM #OrarendiOraTempTable AS oo
FOR JSON PATH,INCLUDE_NULL_VALUES
)
SET @actualJson = @actualJson + ' } }'
--NOTE: A törlés azért false, mert a T_ORARENDIORA_OSSZES view-ból korábban elvégeztük a törlést, mivel egyéb feltélek is kellettek hozzá, ami nem szerepel a uspDynamicImport-ban.
EXECUTE uspDynamicImport @pIntezmenyId = @pIntezmenyId, @pTanevId = @pTanevId, @pUserId = @pUserId, @pImportJson = @actualJson, @pIsTorles = 0, @pIsSubTable = 0
DROP TABLE IF EXISTS #OrarendiOraTempTable
--NOTE: Update-elnünk kell a órarendi óráknak a groud id-ját!
UPDATE oo SET
oo.C_ORARENDIORAGROUPID = ID
FROM T_ORARENDIORA_OSSZES oo
WHERE oo.C_INTEZMENYID = @pIntezmenyId
AND oo.C_TANEVID = @pTanevId
AND oo.TOROLT = 'F'
AND oo.C_IMPORTALT = 'T'
AND ((@pIsNapirendImport = 0 AND oo.C_CSENGETESIRENDID IS NOT NULL)
OR (@pIsNapirendImport = 1 AND oo.C_CSENGETESIRENDID IS NULL))
END
GO