-- ============================================= -- Description: -- ============================================= 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