-- ============================================= -- 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 ,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.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' ,Operation int '$.Operation' ,Nev nvarchar(200) '$.Nev' ,RokonsagiFokId int '$.RokonsagiFokId' ) tf INNER 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 REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(LOWER(g.C_NEV),CHAR(160),CHAR(32)),CHAR(9),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_ISHIBASANMEGADVA char(1) ,C_INTEZMENYID int ,C_TANEVID int ,TOROLT char(1) ,SERIAL int ,LASTCHANGED datetime ,CREATED datetime ,MODIFIER int ,CREATOR int ,ELOZOTANEVIREKORDID 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_ISHIBASANMEGADVA ,e.C_INTEZMENYID ,e.C_TANEVID ,e.TOROLT ,e.SERIAL ,e.LASTCHANGED ,e.CREATED ,e.MODIFIER ,e.CREATOR ,e.ELOZOTANEVIREKORDID ,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_ISHIBASANMEGADVA char(1) '$.C_ISHIBASANMEGADVA' ,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' ,Operation int '$.Operation' ,Nev nvarchar(200) '$.Nev' ,RokonsagiFokId int '$.RokonsagiFokId' ) e INNER 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 REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(LOWER(g.C_NEV),CHAR(160),CHAR(32)),CHAR(9),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: Cim temp tábla incializálása CREATE TABLE #CimTempTable ( ID int ,C_CIMTIPUSA int ,C_ORSZAG int ,C_IRANYITOSZAM nvarchar(40) ,C_VAROS nvarchar(100) ,C_KOZTERULET nvarchar(80) ,C_HAZSZAM nvarchar(60) ,C_EMELET nvarchar(80) ,C_AJTO nvarchar(60) ,C_ALAPERTELMEZETT char(1) ,C_KOZTERULETJELLEGENEV nvarchar(100) ,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 ,Operation int ) INSERT INTO #CimTempTable SELECT c.ID ,c.C_CIMTIPUSA ,c.C_ORSZAG ,c.C_IRANYITOSZAM ,c.C_VAROS ,c.C_KOZTERULET ,c.C_HAZSZAM ,c.C_EMELET ,c.C_AJTO ,c.C_ALAPERTELMEZETT ,c.C_KOZTERULETJELLEGENEV ,c.C_FELHASZNALOID ,g.ID ,c.C_INTEZMENYID ,c.C_TANEVID ,c.TOROLT ,c.SERIAL ,c.LASTCHANGED ,c.CREATED ,c.MODIFIER ,c.CREATOR ,c.ELOZOTANEVIREKORDID ,c.Operation FROM OPENJSON(@pImportJson, N'lax $.ImportJson.T_CIM_OSSZES') WITH ( ID int '$.ID' ,C_CIMTIPUSA int '$.C_CIMTIPUSA' ,C_ORSZAG int '$.C_ORSZAG' ,C_IRANYITOSZAM nvarchar(40) '$.C_IRANYITOSZAM' ,C_VAROS nvarchar(100) '$.C_VAROS' ,C_KOZTERULET nvarchar(80) '$.C_KOZTERULET' ,C_HAZSZAM nvarchar(60) '$.C_HAZSZAM' ,C_EMELET nvarchar(80) '$.C_EMELET' ,C_AJTO nvarchar(60) '$.C_AJTO' ,C_ALAPERTELMEZETT char(1) '$.C_ALAPERTELMEZETT' ,C_KOZTERULETJELLEGENEV nvarchar(100) '$.C_KOZTERULETJELLEGENEV' ,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' ,Operation int '$.Operation' ,Nev nvarchar(200) '$.Nev' ,RokonsagiFokId int '$.RokonsagiFokId' ) c INNER 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 REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(LOWER(g.C_NEV),CHAR(160),CHAR(32)),CHAR(9),CHAR(32)),CHAR(32),'(¤¤)'),'¤)(¤',''),'(¤¤)',CHAR(32)) = LOWER(c.Nev) AND g.C_ROKONSAGFOKA = c.RokonsagiFokId AND g.C_TANULOID = c.C_FELHASZNALOID AND g.C_INTEZMENYID = c.C_INTEZMENYID AND g.C_TANEVID = c.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 AND #TelefonTempTable.Operation = 1 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 AND #EmailTempTable.Operation = 1 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' --NOTE: Ha van bejövő cím a json-ben, akkor az ehhez a címhez tartozó felhasználó összes címének C_ALAPERTELMEZETT mezőjét false-ra állítjuk és a bejövő lesz a egyedül true! UPDATE c SET c.C_ALAPERTELMEZETT = 'F' ,c.SERIAL = c.SERIAL + 1 ,c.LASTCHANGED = @lastChangedDateTime ,c.MODIFIER = @pUserId FROM T_FELHASZNALO_OSSZES fh INNER JOIN #CimTempTable ON #CimTempTable.C_INTEZMENYID = fh.C_INTEZMENYID AND #CimTempTable.C_TANEVID = fh.C_TANEVID AND #CimTempTable.TOROLT = 'F' AND #CimTempTable.C_FELHASZNALOID = fh.ID AND #CimTempTable.Operation = 1 INNER JOIN T_CIM_OSSZES c ON c.C_INTEZMENYID = fh.C_INTEZMENYID AND c.C_TANEVID = fh.C_TANEVID AND c.TOROLT = 'F' AND c.C_FELHASZNALOID = fh.ID AND c.C_ALAPERTELMEZETT = 'T' AND c.C_GONDVISELOID = #CimTempTable.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.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_ISHIBASANMEGADVA ,e.C_INTEZMENYID ,e.C_TANEVID ,e.TOROLT ,e.SERIAL ,e.LASTCHANGED ,e.CREATED ,e.MODIFIER ,e.CREATOR ,e.ELOZOTANEVIREKORDID ,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 --Címek beszúrása SET @actualJson = ' { "ImportJson":{ "T_CIM_OSSZES":' + ( SELECT c.ID ,c.C_CIMTIPUSA ,c.C_ORSZAG ,c.C_IRANYITOSZAM ,c.C_VAROS ,c.C_KOZTERULET ,c.C_HAZSZAM ,c.C_EMELET ,c.C_AJTO ,c.C_ALAPERTELMEZETT ,c.C_KOZTERULETJELLEGENEV ,c.C_FELHASZNALOID ,c.C_GONDVISELOID ,c.C_INTEZMENYID ,c.C_TANEVID ,c.TOROLT ,c.SERIAL ,c.LASTCHANGED ,c.CREATED ,c.MODIFIER ,c.CREATOR ,c.ELOZOTANEVIREKORDID ,c.Operation FROM #CimTempTable AS c WHERE c.C_CIMTIPUSA is not null and c.C_ORSZAG is not null 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 INNER 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