kreta/Kreta.DataAccess.Migrations/Scripts/Archive/20191028130034_KRETA2_1454/uspGondviseloImport.sql
2024-03-13 00:33:46 +01:00

314 lines
10 KiB
Transact-SQL

-- =============================================
-- Description: <Gondviselö import>
-- =============================================
DROP PROCEDURE IF EXISTS uspGondviseloImport
GO
CREATE PROCEDURE uspGondviseloImport
@pIntezmenyId int
,@pTanevId int
,@pUserId int
,@pImportJson nvarchar(MAX)
AS BEGIN
SET NOCOUNT ON;
DECLARE
@tableNameList nvarchar(2000) = 'T_GONDVISELO_OSSZES'
,@actualJson nvarchar(MAX) = ''
,@lastChangedDateTime datetime = GETDATE()
--NOTE: A törlés azért false, mert a gondviselö importálásoknál soha nem törlünk!
EXECUTE [dbo].[uspDynamicImportJsonSplit] @pIntezmenyId = @pIntezmenyId, @pTanevId = @pTanevId, @pUserId = @pUserId, @pImportJson = @pImportJson, @pIsTorles = 0, @pIsSubTable = 0, @pTableNameList = @tableNameList
--NOTE: Telefon temp tábla incializálása
CREATE TABLE #TelefonTempTable (
ID int
,C_TELEFONTIPUSA int
,C_TELEFONSZAM nvarchar(100)
,C_LEIRAS nvarchar(50)
,C_ALAPERTELMEZETT char(1)
,C_ISPUBLIC char(1)
,C_FELHASZNALOID int
,C_GONDVISELOID int
,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
#TelefonTempTable
SELECT
tf.ID
,tf.C_TELEFONTIPUSA
,tf.C_TELEFONSZAM
,tf.C_LEIRAS
,tf.C_ALAPERTELMEZETT
,tf.C_ISPUBLIC
,tf.C_FELHASZNALOID
,g.ID
,tf.C_INTEZMENYID
,tf.C_TANEVID
,tf.TOROLT
,tf.SERIAL
,tf.LASTCHANGED
,tf.CREATED
,tf.MODIFIER
,tf.CREATOR
,tf.ELOZOTANEVIREKORDID
,tf.NNID
,tf.Operation
FROM OPENJSON(@pImportJson, N'lax $.ImportJson.T_TELEFON_OSSZES')
WITH (
ID int '$.ID'
,C_TELEFONTIPUSA int '$.C_TELEFONTIPUSA'
,C_TELEFONSZAM nvarchar(100) '$.C_TELEFONSZAM'
,C_LEIRAS nvarchar(50) '$.C_LEIRAS'
,C_ALAPERTELMEZETT char(1) '$.C_ALAPERTELMEZETT'
,C_ISPUBLIC char(1) '$.C_ISPUBLIC'
,C_FELHASZNALOID int '$.C_FELHASZNALOID'
,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'
,Nev nvarchar(200) '$.Nev'
,RokonsagiFokId int '$.RokonsagiFokId'
) tf
LEFT JOIN T_GONDVISELO_OSSZES g 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(g.C_NEV),char(160),char(32)),char(32),'(¤¤)'),'¤)(¤',''),'(¤¤)',char(32)))) = LOWER(tf.Nev)
AND g.C_ROKONSAGFOKA = tf.RokonsagiFokId
AND g.C_TANULOID = tf.C_FELHASZNALOID
AND g.C_INTEZMENYID = tf.C_INTEZMENYID
AND g.C_TANEVID = tf.C_TANEVID
AND g.TOROLT = 'F'
--NOTE: Email temp tábla incializálása
CREATE TABLE #EmailTempTable (
ID int
,C_EMAILTIPUSA int
,C_EMAILCIM nvarchar(200)
,C_ALAPERTELMEZETT char(1)
,C_ISPUBLIC char(1)
,C_FELHASZNALOID int
,C_GONDVISELOID int
,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
#EmailTempTable
SELECT
e.ID
,e.C_EMAILTIPUSA
,e.C_EMAILCIM
,e.C_ALAPERTELMEZETT
,e.C_ISPUBLIC
,e.C_FELHASZNALOID
,g.ID
,e.C_INTEZMENYID
,e.C_TANEVID
,e.TOROLT
,e.SERIAL
,e.LASTCHANGED
,e.CREATED
,e.MODIFIER
,e.CREATOR
,e.ELOZOTANEVIREKORDID
,e.NNID
,e.Operation
FROM OPENJSON(@pImportJson, N'lax $.ImportJson.T_EMAIL_OSSZES')
WITH (
ID int '$.ID'
,C_EMAILTIPUSA int '$.C_EMAILTIPUSA'
,C_EMAILCIM nvarchar(200) '$.C_EMAILCIM'
,C_ALAPERTELMEZETT char(1) '$.C_ALAPERTELMEZETT'
,C_ISPUBLIC char(1) '$.C_ISPUBLIC'
,C_FELHASZNALOID int '$.C_FELHASZNALOID'
,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'
,Nev nvarchar(200) '$.Nev'
,RokonsagiFokId int '$.RokonsagiFokId'
) e
LEFT JOIN T_GONDVISELO_OSSZES g 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(g.C_NEV),char(160),char(32)),char(32),'(¤¤)'),'¤)(¤',''),'(¤¤)',char(32)))) = LOWER(e.Nev)
AND g.C_ROKONSAGFOKA = e.RokonsagiFokId
AND g.C_TANULOID = e.C_FELHASZNALOID
AND g.C_INTEZMENYID = e.C_INTEZMENYID
AND g.C_TANEVID = e.C_TANEVID
AND g.TOROLT = 'F'
--NOTE: Ha van bejövõ telefon a json-ben, akkor az ehhez a telefonhoz tartozó felhasználó összes telefonjának C_ALAPERTELMEZETT mezõjét false-ra állítjuk és a bejövõ lesz a egyedül true!
UPDATE tf SET
tf.C_ALAPERTELMEZETT = 'F'
,tf.SERIAL = tf.SERIAL + 1
,tf.LASTCHANGED = @lastChangedDateTime
,tf.MODIFIER = @pUserId
FROM T_FELHASZNALO_OSSZES fh
INNER JOIN #TelefonTempTable ON
#TelefonTempTable.C_INTEZMENYID = fh.C_INTEZMENYID
AND #TelefonTempTable.C_TANEVID = fh.C_TANEVID
AND #TelefonTempTable.TOROLT = 'F'
AND #TelefonTempTable.C_FELHASZNALOID = fh.ID
INNER JOIN T_TELEFON_OSSZES tf ON
tf.C_INTEZMENYID = fh.C_INTEZMENYID
AND tf.C_TANEVID = fh.C_TANEVID
AND tf.TOROLT = 'F'
AND tf.C_FELHASZNALOID = fh.ID
AND tf.C_ALAPERTELMEZETT = 'T'
AND tf.C_GONDVISELOID = #TelefonTempTable.C_GONDVISELOID
WHERE fh.C_INTEZMENYID = @pIntezmenyId
AND fh.C_TANEVID = @pTanevId
AND fh.TOROLT = 'F'
--NOTE: Ha van bejövõ email a json-ben, akkor az ehhez a email-hez tartozó felhasználó összes email-jének C_ALAPERTELMEZETT mezõjét false-ra állítjuk és a bejövõ lesz a egyedül true!
UPDATE e SET
e.C_ALAPERTELMEZETT = 'F'
,e.SERIAL = e.SERIAL + 1
,e.LASTCHANGED = @lastChangedDateTime
,e.MODIFIER = @pUserId
FROM T_FELHASZNALO_OSSZES fh
INNER JOIN #EmailTempTable ON
#EmailTempTable.C_INTEZMENYID = fh.C_INTEZMENYID
AND #EmailTempTable.C_TANEVID = fh.C_TANEVID
AND #EmailTempTable.TOROLT = 'F'
AND #EmailTempTable.C_FELHASZNALOID = fh.ID
INNER JOIN T_EMAIL_OSSZES e ON
e.C_INTEZMENYID = fh.C_INTEZMENYID
AND e.C_TANEVID = fh.C_TANEVID
AND e.TOROLT = 'F'
AND e.C_FELHASZNALOID = fh.ID
AND e.C_ALAPERTELMEZETT = 'T'
AND e.C_GONDVISELOID = #EmailTempTable.C_GONDVISELOID
WHERE fh.C_INTEZMENYID = @pIntezmenyId
AND fh.C_TANEVID = @pTanevId
AND fh.TOROLT = 'F'
--Telefonok beszúrása
SET @actualJson = ' { "ImportJson":{ "T_TELEFON_OSSZES":' + (
SELECT
tf.ID
,tf.C_TELEFONTIPUSA
,tf.C_TELEFONSZAM
,tf.C_LEIRAS
,tf.C_ALAPERTELMEZETT
,tf.C_ISPUBLIC
,tf.C_FELHASZNALOID
,tf.C_GONDVISELOID
,tf.C_INTEZMENYID
,tf.C_TANEVID
,tf.TOROLT
,tf.SERIAL
,tf.LASTCHANGED
,tf.CREATED
,tf.MODIFIER
,tf.CREATOR
,tf.ELOZOTANEVIREKORDID
,tf.NNID
,tf.Operation
FROM #TelefonTempTable AS tf
FOR JSON PATH,INCLUDE_NULL_VALUES
)
SET @actualJson = @actualJson + ' } }'
EXECUTE [dbo].[uspDynamicImport] @pIntezmenyId = @pIntezmenyId, @pTanevId = @pTanevId, @pUserId = @pUserId, @pImportJson = @actualJson, @pIsTorles = 0, @pIsSubTable = 0
--Emailek beszúrása
SET @actualJson = ' { "ImportJson":{ "T_EMAIL_OSSZES":' + (
SELECT
e.ID
,e.C_EMAILTIPUSA
,e.C_EMAILCIM
,e.C_ALAPERTELMEZETT
,e.C_ISPUBLIC
,e.C_FELHASZNALOID
,e.C_GONDVISELOID
,e.C_INTEZMENYID
,e.C_TANEVID
,e.TOROLT
,e.SERIAL
,e.LASTCHANGED
,e.CREATED
,e.MODIFIER
,e.CREATOR
,e.ELOZOTANEVIREKORDID
,e.NNID
,e.Operation
FROM #EmailTempTable AS e
FOR JSON PATH,INCLUDE_NULL_VALUES
)
SET @actualJson = @actualJson + ' } }'
EXECUTE [dbo].[uspDynamicImport] @pIntezmenyId = @pIntezmenyId, @pTanevId = @pTanevId, @pUserId = @pUserId, @pImportJson = @actualJson, @pIsTorles = 0, @pIsSubTable = 0
--NOTE: Vissza kell térnünk az ID-kkal a fájlletöltéshez és az emailküldéshez!
SELECT g.ID
FROM OPENJSON(@pImportJson, N'lax $.ImportJson.T_GONDVISELO_OSSZES')
WITH (
C_NEV nvarchar(200) '$.C_NEV'
,C_ROKONSAGFOKA int '$.C_ROKONSAGFOKA'
,C_TANULOID int '$.C_TANULOID'
,C_INTEZMENYID int '$.C_INTEZMENYID'
,C_TANEVID int '$.C_TANEVID'
) GondviseloJsonData
LEFT JOIN T_GONDVISELO_OSSZES g 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(REPLACE(LOWER(g.C_NEV),char(160),char(32)),char(9),char(32)),char(32),'(¤¤)'),'¤)(¤',''),'(¤¤)',char(32)))) = LOWER(GondviseloJsonData.C_NEV)
AND g.C_ROKONSAGFOKA = GondviseloJsonData.C_ROKONSAGFOKA
AND g.C_TANULOID = GondviseloJsonData.C_TANULOID
AND g.C_INTEZMENYID = GondviseloJsonData.C_INTEZMENYID
AND g.C_TANEVID = GondviseloJsonData.C_TANEVID
AND g.TOROLT = 'F'
END
GO