This commit is contained in:
skidoodle 2024-03-13 00:33:46 +01:00
commit e124a47765
19374 changed files with 9806149 additions and 0 deletions

View file

@ -0,0 +1,308 @@
-- =============================================
-- Description: <Dinamikus import>
-- =============================================
DROP PROCEDURE IF EXISTS [dbo].[uspDynamicImport]
GO
CREATE PROCEDURE [dbo].[uspDynamicImport]
@pIntezmenyId INT
,@pTanevId INT
,@pUserId INT
,@pImportJson NVARCHAR(MAX)
,@pIsTorles BIT
,@pIsSubTable BIT
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from interfering with SELECT statements.
SET NOCOUNT ON;
DECLARE
@sqlCommand NVARCHAR(MAX) = ''
,@sqlInsertCommand NVARCHAR(MAX) = ''
,@sqlUpdateCommand NVARCHAR(MAX) = ''
,@sqlDeleteCommand NVARCHAR(MAX) = ''
,@lastChangedDateTime DATETIME = GETDATE()
,@openJsonWithCommand NVARCHAR(MAX)
,@rootElementJsonWithCommand NVARCHAR(300)
,@columnNameFromJsonCommand NVARCHAR(300)
,@columnListForInsert NVARCHAR(MAX)
,@columnListForUpdate NVARCHAR(MAX)
,@rootElement NVARCHAR(100)
,@tableNameFromJson NVARCHAR(50)
,@columnCount INT
,@openJsonPath NVARCHAR(300)
CREATE TABLE #entityIds
(
ID INT
)
DECLARE @TableName TABLE
(
TableName NVARCHAR(50)
)
DECLARE @ColumnTable TABLE
(
ColumnName NVARCHAR(50)
)
DECLARE @ColumnDataTable TABLE
(
ColumnName NVARCHAR(50)
,ColumnType NVARCHAR(50)
,MaxLengthValue NVARCHAR(50)
,NumericPrecision NVARCHAR(50)
,NumericScale NVARCHAR(50)
,IsNullable NVARCHAR(50)
)
-- A Json Root elemének kiszedése változóba @rootElement
SELECT
@rootElement = [key]
FROM
OPENJSON(@pImportJson, N'strict $')
--Az importálandó táblanevének kiszedése JSON-ből (rootelem utáni elem) @tableNameFromJson
SET @rootElementJsonWithCommand = '
SELECT
@tableNameFromJson = [key]
FROM
OPENJSON (@pImportJson, N''lax $.' + @rootElement + ''')
SELECT
@tableNameFromJson
'
INSERT INTO @TableName
EXEC sp_executesql @rootElementJsonWithCommand, N'@pImportJson NVARCHAR(MAX), @tableNameFromJson NVARCHAR(50)', @pImportJson, @tableNameFromJson
SELECT @tableNameFromJson = (SELECT TOP 1 TableName FROM @TableName)
--NOTE: Megvizsgáljuk, hogy létezik-e a tábla neve a Json-ben
IF (@tableNameFromJson IS NOT NULL)
BEGIN
--Ha Törölnünk is kell akkor azzal kezdünk!
IF @pIsTorles = 1
BEGIN
--DELETE összeállítása (Igazából update mert csak töröltre állít)
SET @sqlDeleteCommand = '
UPDATE
[' + @tableNameFromJson + ']
SET
[' + @tableNameFromJson + '].[TOROLT] = ''T'',
[' + @tableNameFromJson + '].[SERIAL] = [' + @tableNameFromJson + '].[SERIAL] + 1,
[' + @tableNameFromJson + '].[LASTCHANGED] = ''' + CONVERT(NVARCHAR(32), @lastChangedDateTime, 126) + ''',
[' + @tableNameFromJson + '].[MODIFIER] = ''' + CONVERT(NVARCHAR(32), @pUserId) + '''
OUTPUT DELETED.ID
INTO #entityIds
WHERE '
IF(@pIsSubTable = 0)
BEGIN
SET @sqlDeleteCommand = @sqlDeleteCommand + '
[' + @tableNameFromJson + '].[C_INTEZMENYID] = ''' + CONVERT(NVARCHAR(32), @pIntezmenyId) + '''
AND [' + @tableNameFromJson + '].[C_TANEVID] = ''' + CONVERT(NVARCHAR(32), @pTanevId) + ''''
END
ELSE
BEGIN
SET @sqlDeleteCommand = @sqlDeleteCommand + '
[' + @tableNameFromJson + '].[C_ALINTEZMENYID] = ''' + CONVERT(NVARCHAR(32), @pIntezmenyId) + '''
AND [' + @tableNameFromJson + '].[C_ALTANEVID] = ''' + CONVERT(NVARCHAR(32), @pTanevId) + ''''
END
SET @sqlDeleteCommand = @sqlDeleteCommand + '
AND [' + @tableNameFromJson + '].[TOROLT] = ''F''
AND [' + @tableNameFromJson + '].[C_IMPORTALT] = ''T''
'
END
--Oszlopok nevei a Json-ben
SET @columnNameFromJsonCommand = '
SELECT
[key] ColumnNameList
INTO
#ColumnList
FROM
OPENJSON (@pImportJson, N''lax $.' + @rootElement + '.' + @tableNameFromJson + '[0]'')
SELECT
*
FROM
#ColumnList
'
INSERT INTO @ColumnTable
EXEC sp_executesql @columnNameFromJsonCommand, N'@pImportJson NVARCHAR(MAX)', @pImportJson
SELECT @columnCount = (SELECT COUNT(*) FROM @ColumnTable)
--NOTE: Megvizsgáljuk, hogy van-e oszlop a Json-ben
IF (@columnCount <> 0)
BEGIN
INSERT INTO
@ColumnDataTable
SELECT
COLUMN_NAME
,DATA_TYPE
,CHARACTER_MAXIMUM_LENGTH
,NUMERIC_PRECISION
,NUMERIC_SCALE
,IS_NULLABLE
FROM
INFORMATION_SCHEMA.columns
WHERE
TABLE_NAME = @tableNameFromJson
AND TABLE_SCHEMA = 'dbo'
AND COLUMN_NAME IN (SELECT ColumnName FROM @ColumnTable)
SELECT @openJsonWithCommand =
ISNULL(@openJsonWithCommand + CHAR(13) + CHAR(10) + CHAR(9) + ',', CHAR(9) + SPACE(1) + '')
+ '[' + ColumnName + '] ' + ColumnType
+ CASE
WHEN ColumnType IN ('DECIMAL', 'NUMERIC')
THEN ISNULL('(' + CONVERT(VARCHAR(2), NumericPrecision) + ', ' + CONVERT(VARCHAR(2), NumericScale) + ') ', ' ')
WHEN ColumnType IN ('NVARCHAR', 'VARCHAR', 'NCHAR', 'CHAR')
THEN ISNULL('(' + CONVERT(VARCHAR(4), IIF(MaxLengthValue = -1, 'MAX', MaxLengthValue)) + ') ', ' ')
ELSE
' '
END
+ '''$.' + ColumnName + ''''
FROM @ColumnDataTable
SET @openJsonWithCommand = '(' + CHAR(13) + CHAR(10) + @openJsonWithCommand + CHAR(13) + CHAR(10) + ' ,[Operation] int ''$.Operation''' + CHAR(13) + CHAR(10) + ')'
--OSZLOPLISTA INSERTHEZ
SELECT
@columnListForInsert = ISNULL(@columnListForInsert + ',', '') + '[' + columnDataTable.ColumnName + ']' --TODO andrejkovicse: Függvény a []-ra
FROM
@ColumnDataTable columnDataTable
WHERE
@pIsSubTable = 0 AND columnDataTable.ColumnName NOT IN ('Operation', 'ID') OR
@pIsSubTable = 1 AND columnDataTable.ColumnName NOT IN ('Operation')
--OSZLOPLISTA UPDATHEZ
SELECT
@columnListForUpdate = ISNULL(@columnListForUpdate + ',', '') + '[' + @tableNameFromJson + '].' + '[' + columnDataTable.ColumnName + '] = [ImportData].' + '[' + columnDataTable.ColumnName + ']'
FROM
@ColumnDataTable columnDataTable
WHERE
columnDataTable.ColumnName NOT IN ('Operation', 'ID', 'SERIAL', 'CREATOR', 'CREATED', 'C_IMPORTALT')
-- OPENJSON path beállítása (ez megegyezik mindhárom műveletnél)
SET @openJsonPath = N'''strict $.' + @rootElement + '.' + @tableNameFromJson + ''''
--INSERT összeállítása
SET @sqlInsertCommand = '
INSERT INTO
[' + @tableNameFromJson + '] (
' + @columnListForInsert + '
)
OUTPUT INSERTED.ID
INTO #entityIds
SELECT
' + @columnListForInsert + '
FROM
OPENJSON (@pImportJson, ' + @openJsonPath + ')
WITH '
+ @openJsonWithCommand + '
WHERE
[Operation] = 1 --NOTE: ImportItemOperationEnum.Insert
'
--UPDATE összeállítása
SET @sqlUpdateCommand = '
UPDATE
[' + @tableNameFromJson + ']
SET
' + @columnListForUpdate + ',[' + @tableNameFromJson + '].[SERIAL] = [' + @tableNameFromJson + '].[SERIAL] + 1 ' + '
OUTPUT DELETED.ID
INTO #entityIds
FROM (
SELECT
*
FROM
OPENJSON (@pImportJson, ' + @openJsonPath + ')
WITH '
+ @openJsonWithCommand + '
WHERE
[Operation] = 2 --NOTE: ImportItemOperationEnum.Update
) AS ImportData
WHERE '
IF(@pIsSubTable = 0)
BEGIN
SET @sqlUpdateCommand = @sqlUpdateCommand + '
[' + @tableNameFromJson + '].[C_INTEZMENYID] = ''' + CONVERT(NVARCHAR(32), @pIntezmenyId) + '''
AND [' + @tableNameFromJson + '].[C_TANEVID] = ''' + CONVERT(NVARCHAR(32), @pTanevId) + ''''
END
ELSE
BEGIN
SET @sqlUpdateCommand = @sqlUpdateCommand + '
[' + @tableNameFromJson + '].[C_ALINTEZMENYID] = ''' + CONVERT(NVARCHAR(32), @pIntezmenyId) + '''
AND [' + @tableNameFromJson + '].[C_ALTANEVID] = ''' + CONVERT(NVARCHAR(32), @pTanevId) + ''''
END
SET @sqlUpdateCommand = @sqlUpdateCommand + '
AND [' + @tableNameFromJson + '].[TOROLT] = ''F''
AND [' + @tableNameFromJson + '].[ID] = ImportData.ID
'
SET @sqlCommand = @sqlDeleteCommand + @sqlInsertCommand + @sqlUpdateCommand
END
IF(@sqlCommand IS NOT NULL OR @sqlCommand <> '')
BEGIN
EXEC sp_executesql @sqlCommand, N'@pImportJson NVARCHAR(MAX)', @pImportJson
IF @tableNameFromJson IN ('T_TEREM_OSSZES','T_ESZKOZ_OSSZES')
BEGIN
DECLARE @entityId int
,@entityTanevId int
,@intezmenyId int
,@kovTanevId int
DECLARE @sql nvarchar(400) = 'SELECT TOP 1 @entityTanevId = C_TANEVID FROM ' + @tableNameFromJson + ' WHERE ID = ' + (SELECT TOP 1 CAST(ID AS varchar(9)) FROM #entityIds)
EXEC sp_executesql @sql, N'@entityTanevId int output', @entityTanevId = @entityTanevId output
SELECT @intezmenyId = C_INTEZMENYID FROM T_TANEV WHERE ID = @entityTanevId
SELECT @kovTanevId = ID FROM T_TANEV_OSSZES WHERE C_INTEZMENYID = @intezmenyId AND C_KOVETKEZO = 'T' AND TOROLT = 'F'
IF @entityTanevId <> @kovTanevId AND @kovTanevId IS NOT NULL
BEGIN
DECLARE entityCur CURSOR FOR
SELECT ID FROM #entityIds
OPEN entityCur
FETCH NEXT FROM entityCur
INTO @entityId
WHILE @@FETCH_STATUS = 0
BEGIN
IF @tableNameFromJson = 'T_TEREM_OSSZES' BEGIN
EXEC sp_FollowUpTerem
@intezmenyId = @intezmenyId
,@aktTanevId = @entityTanevId
,@kovetkezoTanevId = @kovTanevId
,@teremId = @entityId
END
ELSE IF @tableNameFromJson = 'T_ESZKOZ_OSSZES' BEGIN
EXEC sp_FollowUpEszkoz
@intezmenyId = @intezmenyId
,@aktTanevId = @entityTanevId
,@kovetkezoTanevId = @kovTanevId
,@eszkozId = @entityId
END
FETCH NEXT FROM entityCur INTO @entityId
END
CLOSE entityCur
DEALLOCATE entityCur
END
END
END
END
END
GO

View file

@ -0,0 +1,79 @@
-- =============================================
-- Description: <Json daraboló a dinamikus importhoz>
-- =============================================
DROP PROCEDURE IF EXISTS [dbo].[uspDynamicImportJsonSplit]
GO
CREATE PROCEDURE [dbo].[uspDynamicImportJsonSplit]
@pIntezmenyId INT
,@pTanevId INT
,@pUserId INT
,@pImportJson NVARCHAR(MAX)
,@pIsTorles BIT
,@pIsSubTable BIT
,@pTableNameList NVARCHAR(2000)
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from interfering with SELECT statements.
SET NOCOUNT ON;
DECLARE @OrderTable TABLE (
Number INT
,TableName NVARCHAR(50)
)
--Paraméterként kapott táblanevek beszúrása
INSERT INTO
@OrderTable
SELECT
*
FROM (
SELECT
ROW_NUMBER() OVER(ORDER BY [value] DESC) Number
,VALUE TableName
FROM
STRING_SPLIT (@pTableNameList, ',')
WHERE
RTRIM(value) <> ''
) AS subSelect
DECLARE
@number INT = 1
,@tableName NVARCHAR(50)
,@actualJson NVARCHAR(MAX)
WHILE EXISTS(SELECT TableName FROM @OrderTable WHERE Number = @number)
BEGIN
SELECT
@tableName = TableName
FROM
@OrderTable
WHERE
Number = @number
IF EXISTS(SELECT [Key] FROM OPENJSON(@pImportJson, N'strict $.ImportJson') WHERE [Key] = @tableName)
BEGIN
--[dbo].[uspDynamicImport] meghívása a JSON megfelelő részével
SET @actualJson = CONVERT(NVARCHAR(max), (
SELECT
[value]
FROM
OPENJSON(@pImportJson, N'strict $.ImportJson')
WHERE
[Key] = @tableName)
)
SET @actualJson = '{"ImportJson": {"' + @tableName + '":' + @actualJson + '} }'
EXECUTE [dbo].[uspDynamicImport] @pIntezmenyId = @pIntezmenyId, @pTanevId = @pTanevId, @pUserId = @pUserId, @pImportJson = @actualJson, @pIsTorles = @pIsTorles, @pIsSubTable = @pIsSubTable
END
SET @number = @number + 1;
END
END
GO

View file

@ -0,0 +1,364 @@
-- =============================================
-- Description: <Órarend import>
-- =============================================
DROP PROCEDURE IF EXISTS [dbo].[uspOrarendImport]
GO
CREATE PROCEDURE [dbo].[uspOrarendImport]
@pIntezmenyId INT
,@pTanevId INT
,@pUserId INT
,@pImportJson NVARCHAR(MAX)
,@pIsTorles BIT
,@pIsModositas 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
TanitasiOra
SET
TanitasiOra.C_ORARENDIORAID = NULL
,TanitasiOra.SERIAL = TanitasiOra.SERIAL + 1
,TanitasiOra.LASTCHANGED = @lastChangedDateTime
,TanitasiOra.MODIFIER = @pUserId
FROM
T_TANITASIORA_OSSZES TanitasiOra
WHERE
TanitasiOra.C_INTEZMENYID = @pIntezmenyId
AND TanitasiOra.C_TANEVID = @pTanevId
AND TanitasiOra.TOROLT = 'F'
AND EXISTS
(SELECT TOP 1
ID
FROM
T_ORARENDIORA_OSSZES OrarendiOra
WHERE
OrarendiOra.ID = TanitasiOra.C_ORARENDIORAID
AND OrarendiOra.C_INTEZMENYID = @pIntezmenyId
AND OrarendiOra.C_TANEVID = @pTanevId
AND OrarendiOra.TOROLT = 'F'
AND OrarendiOra.C_IMPORTALT = 'T'
)
UPDATE
Hazifeladatok
SET
Hazifeladatok.C_ORARENDIORAID = NULL
,Hazifeladatok.SERIAL = Hazifeladatok.SERIAL + 1
,Hazifeladatok.LASTCHANGED = @lastChangedDateTime
,Hazifeladatok.MODIFIER = @pUserId
FROM
T_HAZIFELADATOK_OSSZES Hazifeladatok
WHERE
Hazifeladatok.C_INTEZMENYID = @pIntezmenyId
AND Hazifeladatok.C_TANEVID = @pTanevId
AND Hazifeladatok.TOROLT = 'F'
AND EXISTS
(SELECT TOP 1
ID
FROM
T_ORARENDIORA_OSSZES OrarendiOra
WHERE
OrarendiOra.ID = Hazifeladatok.C_ORARENDIORAID
AND OrarendiOra.C_INTEZMENYID = @pIntezmenyId
AND OrarendiOra.C_TANEVID = @pTanevId
AND OrarendiOra.TOROLT = 'F'
AND OrarendiOra.C_IMPORTALT = 'T'
)
UPDATE
OrarendiOraTulajdonsag
SET
OrarendiOraTulajdonsag.C_ORARENDIORAID = NULL
,OrarendiOraTulajdonsag.SERIAL = OrarendiOraTulajdonsag.SERIAL + 1
,OrarendiOraTulajdonsag.LASTCHANGED = @lastChangedDateTime
,OrarendiOraTulajdonsag.MODIFIER = @pUserId
FROM
T_ORARENDIORATULAJDONSAG OrarendiOraTulajdonsag
WHERE
OrarendiOraTulajdonsag.C_INTEZMENYID = @pIntezmenyId
AND OrarendiOraTulajdonsag.C_TANEVID = @pTanevId
AND OrarendiOraTulajdonsag.TOROLT = 'F'
AND EXISTS
(SELECT TOP 1
ID
FROM
T_ORARENDIORA_OSSZES OrarendiOra
WHERE
OrarendiOra.ID = OrarendiOraTulajdonsag.C_ORARENDIORAID
AND OrarendiOra.C_INTEZMENYID = @pIntezmenyId
AND OrarendiOra.C_TANEVID = @pTanevId
AND OrarendiOra.TOROLT = 'F'
AND OrarendiOra.C_IMPORTALT = 'T'
)
DELETE
HelyettesitesiIdoszak
FROM
T_HELYETTESITESIIDOSZAK_OSSZES HelyettesitesiIdoszak
WHERE
EXISTS
(SELECT TOP 1
ID
FROM
T_ORARENDIORA_OSSZES OrarendiOra
WHERE
OrarendiOra.ID = HelyettesitesiIdoszak.C_HELYETTESITETTORARENDID
AND OrarendiOra.C_INTEZMENYID = @pIntezmenyId
AND OrarendiOra.C_TANEVID = @pTanevId
AND OrarendiOra.TOROLT = 'F'
AND OrarendiOra.C_IMPORTALT = 'T'
)
--Órarendi órák törlése
UPDATE
OrarendiOra
SET
OrarendiOra.TOROLT = 'T'
,OrarendiOra.SERIAL = OrarendiOra.SERIAL + 1
,OrarendiOra.LASTCHANGED = @lastChangedDateTime
,OrarendiOra.MODIFIER = @pUserId
FROM
T_ORARENDIORA_OSSZES OrarendiOra
WHERE
OrarendiOra.C_INTEZMENYID = @pIntezmenyId
AND OrarendiOra.C_TANEVID = @pTanevId
AND OrarendiOra.TOROLT = 'F'
AND OrarendiOra.C_IMPORTALT = 'T'
AND OrarendiOra.C_ORAERVENYESSEGVEGE <> OrarendiOra.C_ORAERVENYESSEGKEZDETE
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, amik nem napirendisek(azaz C_CSENGETESIRENDORAID IS NOT NULL)
UPDATE
OrarendiOra
SET
OrarendiOra.C_ORAERVENYESSEGVEGE = @pOrarendiOraLezarasDateTime
,OrarendiOra.SERIAL = OrarendiOra.SERIAL + 1
,OrarendiOra.LASTCHANGED = @lastChangedDateTime
,OrarendiOra.MODIFIER = @pUserId
FROM
T_ORARENDIORA_OSSZES OrarendiOra
WHERE
OrarendiOra.C_INTEZMENYID = @pIntezmenyId
AND OrarendiOra.C_TANEVID = @pTanevId
AND OrarendiOra.TOROLT = 'F'
AND OrarendiOra.C_CSENGETESIRENDORAID IS NOT NULL
AND (OrarendiOra.C_ORAERVENYESSEGVEGE IS NULL
OR OrarendiOra.C_ORAERVENYESSEGVEGE > @pOrarendiOraLezarasDateTime)
AND OrarendiOra.C_ORAERVENYESSEGVEGE <> OrarendiOra.C_ORAERVENYESSEGKEZDETE
AND OrarendiOra.C_ORAERVENYESSEGKEZDETE < @pOrarendiOraLezarasDateTime
--Későbbi importált órarendi órák törlése
UPDATE
OrarendiOra
SET
OrarendiOra.TOROLT = 'T'
,OrarendiOra.SERIAL = OrarendiOra.SERIAL + 1
,OrarendiOra.LASTCHANGED = @lastChangedDateTime
,OrarendiOra.MODIFIER = @pUserId
FROM
T_ORARENDIORA_OSSZES OrarendiOra
WHERE
OrarendiOra.C_INTEZMENYID = @pIntezmenyId
AND OrarendiOra.C_TANEVID = @pTanevId
AND OrarendiOra.TOROLT = 'F'
AND OrarendiOra.C_IMPORTALT = 'T'
AND OrarendiOra.C_ORAERVENYESSEGVEGE <> OrarendiOra.C_ORAERVENYESSEGKEZDETE
AND OrarendiOra.C_ORAERVENYESSEGKEZDETE >= @pOrarendiOraLezarasDateTime
END
EXECUTE [dbo].[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 [dbo].[uspDynamicImportJsonSplit] @pIntezmenyId = @pIntezmenyId, @pTanevId = @pTanevId, @pUserId = @pUserId, @pImportJson = @pImportJson, @pIsTorles = 0, @pIsSubTable = 0, @pTableNameList = @tableNameList
--Órarendi órák beszúrása
SET @actualJson = ' { "ImportJson":{ "T_ORARENDIORA_OSSZES":' +
(SELECT
OrarendiOra. ID
,OrarendiOra.HetirendTipusId C_HETIREND
,OrarendiOra. C_HETNAPJA
,OrarendiOra.TantargyId C_TANTARGYID
,OrarendiOra.TanarId C_TANARID
,OrarendiOra.OsztalyCsoportId C_OSZTALYCSOPORTID
,OrarendiOra.TeremId C_TEREMID
,OrarendiOra.FoglalkozasId C_FOGLALKOZASID
,OrarendiOra. C_ORASZAM
,OrarendiOra. C_ORAERVENYESSEGKEZDETE
,OrarendiOra. C_ORAERVENYESSEGVEGE
,OrarendiOra. C_CSENGETESIRENDID
,OrarendiOra. C_CSENGETESIRENDORAID
,OrarendiOra.OraKezdete C_ORAKEZDETE
,OrarendiOra.OraVege C_ORAVEGE
,OrarendiOra. C_BONTOTT
,OrarendiOra. C_ORATULAJDONOSID
,OrarendiOra. C_IMPORTALT
,OrarendiOra. C_INTEZMENYID
,OrarendiOra. C_TANEVID
,OrarendiOra. TOROLT
,OrarendiOra. SERIAL
,OrarendiOra. LASTCHANGED
,OrarendiOra. CREATED
,OrarendiOra. MODIFIER
,OrarendiOra. CREATOR
,OrarendiOra. ELOZOTANEVIREKORDID
,OrarendiOra. NNID
,OrarendiOra. Operation
FROM
(SELECT
OrarendiOraJsonData.*
,OsztalyCsoport.ID OsztalyCsoportId
,Felhasznalo.ID TanarId
,Tantargy.ID TantargyId
,Foglalkozas.ID FoglalkozasId
,Terem.ID TeremId
,HetirendTipus.ID HetirendTipusId
,CsengetesiRendOra.C_KEZDETE OraKezdete
,CsengetesiRendOra.C_VEGE OraVege
FROM OPENJSON(@pImportJson, N'lax $.ImportJson.T_ORARENDIORA_OSSZES')
WITH (
ID INT '$.ID'
,C_HETNAPJA INT '$.C_HETNAPJA'
,C_ORASZAM INT '$.C_ORASZAM'
,C_ORAERVENYESSEGKEZDETE DATETIME '$.C_ORAERVENYESSEGKEZDETE'
,C_ORAERVENYESSEGVEGE DATETIME '$.C_ORAERVENYESSEGVEGE'
,C_CSENGETESIRENDID INT '$.C_CSENGETESIRENDID'
,C_CSENGETESIRENDORAID INT '$.C_CSENGETESIRENDORAID'
,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'
,TanarNev NVARCHAR(255) '$.TanarNev'
,TanarSzuletesiIdo NVARCHAR(255) '$.TanarSzuletesiIdo'
,HetirendTipusNev NVARCHAR(255) '$.HetirendTipusNev'
,TeremNev NVARCHAR(255) '$.TeremNev'
,TantargyfelosztasNev NVARCHAR(255) '$.TantargyfelosztasNev'
) OrarendiOraJsonData
LEFT JOIN
T_OSZTALYCSOPORT_OSSZES OsztalyCsoport 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(OsztalyCsoport.C_NEV),CHAR(160),CHAR(32)),CHAR(32),'(¤¤)'),'¤)(¤',''),'(¤¤)',CHAR(32)))) = LOWER(OrarendiOraJsonData.OsztalyCsoportNev)
AND OsztalyCsoport.C_INTEZMENYID = @pIntezmenyId
AND OsztalyCsoport.C_TANEVID = @pTanevId
AND OsztalyCsoport.TOROLT = 'F'
LEFT JOIN
T_TANTARGY_OSSZES Tantargy 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(Tantargy.C_NEV),CHAR(160),CHAR(32)),CHAR(32),'(¤¤)'),'¤)(¤',''),'(¤¤)',CHAR(32)))) = LOWER(OrarendiOraJsonData.TantargyNev)
AND Tantargy.C_INTEZMENYID = @pIntezmenyId
AND Tantargy.C_TANEVID = @pTanevId
AND Tantargy.TOROLT = 'F'
LEFT JOIN
T_FELHASZNALO_OSSZES Felhasznalo 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(Felhasznalo.C_NYOMTATASINEV),CHAR(160),CHAR(32)),CHAR(32),'(¤¤)'),'¤)(¤',''),'(¤¤)',CHAR(32)))) = LOWER(OrarendiOraJsonData.TanarNev)
AND (OrarendiOraJsonData.TanarSzuletesiIdo IS NULL
OR Felhasznalo.C_SZULETESIDATUM = OrarendiOraJsonData.TanarSzuletesiIdo)
AND Felhasznalo.C_INTEZMENYID = @pIntezmenyId
AND Felhasznalo.C_TANEVID = @pTanevId
AND Felhasznalo.TOROLT = 'F'
INNER JOIN
T_ALKALMAZOTT_OSSZES Alkalmazott ON
Alkalmazott.ID = Felhasznalo.ID
AND Alkalmazott.C_ALINTEZMENYID = @pIntezmenyId
AND Alkalmazott.C_ALTANEVID = @pTanevId
AND Alkalmazott.TOROLT = 'F'
LEFT JOIN
T_FOGLALKOZAS_OSSZES Foglalkozas ON
Foglalkozas.C_OSZTALYCSOPORTID = OsztalyCsoport.ID
AND Foglalkozas.C_TANARID = Felhasznalo.ID
AND Foglalkozas.C_TANTARGYID = Tantargy.ID
AND Foglalkozas.C_INTEZMENYID = @pIntezmenyId
AND Foglalkozas.C_TANEVID = @pTanevId
AND Foglalkozas.TOROLT = 'F'
LEFT JOIN
T_TEREM_OSSZES Terem 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(Terem.C_NEV),CHAR(160),CHAR(32)),CHAR(32),'(¤¤)'),'¤)(¤',''),'(¤¤)',CHAR(32)))) = LOWER(OrarendiOraJsonData.TeremNev)
AND Terem.C_INTEZMENYID = @pIntezmenyId
AND Terem.C_TANEVID = @pTanevId
AND Terem.TOROLT = 'F'
LEFT JOIN
T_DICTIONARYITEMBASE_OSSZES HetirendTipusDictionary 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(HetirendTipusDictionary.C_NAME),CHAR(160),CHAR(32)),CHAR(32),'(¤¤)'),'¤)(¤',''),'(¤¤)',CHAR(32)))) = LOWER(OrarendiOraJsonData.HetirendTipusNev)
AND HetirendTipusDictionary.C_INTEZMENYID = @pIntezmenyId
AND HetirendTipusDictionary.C_TANEVID = @pTanevId
AND HetirendTipusDictionary.TOROLT = 'F'
INNER JOIN
T_HETIRENDTIPUS_OSSZES HetirendTipus ON
HetirendTipus.ID = HetirendTipusDictionary.ID
AND HetirendTipus.C_ALINTEZMENYID = @pIntezmenyId
AND HetirendTipus.C_ALTANEVID = @pTanevId
AND HetirendTipus.TOROLT = 'F'
LEFT JOIN
T_CSENGETESIRENDORA_OSSZES CsengetesiRendOra ON
CsengetesiRendOra.ID = OrarendiOraJsonData.C_CSENGETESIRENDORAID
AND CsengetesiRendOra.C_ORASZAM = OrarendiOraJsonData.C_ORASZAM
AND CsengetesiRendOra.C_INTEZMENYID = @pIntezmenyId
AND CsengetesiRendOra.C_TANEVID = @pTanevId
AND CsengetesiRendOra.TOROLT = 'F'
) AS OrarendiOra
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 [dbo].[uspDynamicImport] @pIntezmenyId = @pIntezmenyId, @pTanevId = @pTanevId, @pUserId = @pUserId, @pImportJson = @actualJson, @pIsTorles = 0, @pIsSubTable = 0
--NOTE: Update-elnünk kell a órarendi óráknak a groud id-ját!
UPDATE
OrarendiOra
SET
OrarendiOra.C_ORARENDIORAGROUPID = ID
FROM
T_ORARENDIORA_OSSZES OrarendiOra
WHERE
OrarendiOra.C_INTEZMENYID = @pIntezmenyId
AND OrarendiOra.C_TANEVID = @pTanevId
AND OrarendiOra.TOROLT = 'F'
AND OrarendiOra.C_IMPORTALT = 'T'
END
GO

View file

@ -0,0 +1,373 @@
-- =============================================
-- Description: <Tantárgyfelosztás import>
-- =============================================
DROP PROCEDURE IF EXISTS [dbo].[uspTantargyfelosztasImport]
GO
CREATE PROCEDURE [dbo].[uspTantargyfelosztasImport]
@pIntezmenyId INT
,@pTanevId INT
,@pUserId INT
,@pImportJson NVARCHAR(MAX)
,@pIsTorles BIT
AS
BEGIN
SET NOCOUNT ON;
DECLARE
@tableNameList NVARCHAR(2000) = 'T_TANTARGY_OSSZES,T_OSZTALYCSOPORT_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
--Foglalkozás kapcsolatainak törlése
UPDATE
OrarendiOra
SET
OrarendiOra.C_FOGLALKOZASID = NULL
,OrarendiOra.SERIAL = OrarendiOra.SERIAL + 1
,OrarendiOra.LASTCHANGED = @lastChangedDateTime
,OrarendiOra.MODIFIER = @pUserId
FROM
T_ORARENDIORA_OSSZES OrarendiOra
WHERE
OrarendiOra.C_INTEZMENYID = @pIntezmenyId
AND OrarendiOra.C_TANEVID = @pTanevId
AND OrarendiOra.TOROLT = 'F'
AND EXISTS
(SELECT TOP 1
ID
FROM
T_FOGLALKOZAS_OSSZES Foglalkozas
WHERE
Foglalkozas.ID = OrarendiOra.C_FOGLALKOZASID
AND Foglalkozas.C_INTEZMENYID = @pIntezmenyId
AND Foglalkozas.C_TANEVID = @pTanevId
AND Foglalkozas.TOROLT = 'F'
AND Foglalkozas.C_IMPORTALT = 'T'
)
UPDATE
TanitasiOra
SET
TanitasiOra.C_FOGLALKOZASID = NULL
,TanitasiOra.SERIAL = TanitasiOra.SERIAL + 1
,TanitasiOra.LASTCHANGED = @lastChangedDateTime
,TanitasiOra.MODIFIER = @pUserId
FROM
T_TANITASIORA_OSSZES TanitasiOra
WHERE
TanitasiOra.C_INTEZMENYID = @pIntezmenyId
AND TanitasiOra.C_TANEVID = @pTanevId
AND TanitasiOra.TOROLT = 'F'
AND EXISTS
(SELECT TOP 1
ID
FROM
T_FOGLALKOZAS_OSSZES Foglalkozas
WHERE
Foglalkozas.ID = TanitasiOra.C_FOGLALKOZASID
AND Foglalkozas.C_INTEZMENYID = @pIntezmenyId
AND Foglalkozas.C_TANEVID = @pTanevId
AND Foglalkozas.TOROLT = 'F'
AND Foglalkozas.C_IMPORTALT = 'T'
)
UPDATE
TanuloMulasztasStatisztika
SET
TanuloMulasztasStatisztika.C_TARGYMULASZTASSTATISZTIKAIID = NULL
,TanuloMulasztasStatisztika.SERIAL = TanuloMulasztasStatisztika.SERIAL + 1
,TanuloMulasztaSstatisztika.LASTCHANGED = @lastChangedDateTime
,TanuloMulasztasStatisztika.MODIFIER = @pUserId
FROM
T_TANULOTARGYMULASZTASSTATISZT_OSSZES TanuloMulasztasStatisztika
WHERE
TanuloMulasztasStatisztika.C_INTEZMENYID = @pIntezmenyId
AND TanuloMulasztasStatisztika.C_TANEVID = @pTanevId
AND TanuloMulasztasStatisztika.TOROLT = 'F'
AND EXISTS
(SELECT TOP 1
ID
FROM
T_FOGLALKOZAS_OSSZES Foglalkozas
WHERE
Foglalkozas.ID = TanuloMulasztasStatisztika.C_TARGYMULASZTASSTATISZTIKAIID
AND Foglalkozas.C_INTEZMENYID = @pIntezmenyId
AND Foglalkozas.C_TANEVID = @pTanevId
AND Foglalkozas.TOROLT = 'F'
AND Foglalkozas.C_IMPORTALT = 'T'
)
DELETE
TeremFoglalkozas
FROM
T_TEREM_FOGLALKOZAS TeremFoglalkozas
WHERE
EXISTS
(SELECT TOP 1
ID
FROM
T_FOGLALKOZAS_OSSZES Foglalkozas
WHERE
Foglalkozas.ID = TeremFoglalkozas.C_FOGLALKOZASID
AND Foglalkozas.C_INTEZMENYID = @pIntezmenyId
AND Foglalkozas.C_TANEVID = @pTanevId
AND Foglalkozas.TOROLT = 'F'
AND Foglalkozas.C_IMPORTALT = 'T'
)
END
--NOTE: A törlés azért false, mert a T_TANTARGY_OSSZES és a T_OSZTALYCSOPORT_OSSZES view-ból nem törlünk importnál!
EXECUTE [dbo].[uspDynamicImportJsonSplit] @pIntezmenyId = @pIntezmenyId, @pTanevId = @pTanevId, @pUserId = @pUserId, @pImportJson = @pImportJson, @pIsTorles = 0, @pIsSubTable = 0, @pTableNameList = @tableNameList
--Osztályok beszúrása
SET @actualJson = ' { "ImportJson":{ "T_OSZTALY_OSSZES":' +
(SELECT
Osztaly.OsztalyCsoportId ID
,Osztaly. C_KEPZESIFORMA
,Osztaly. C_TECHNIKAIOSZTALY
,Osztaly. C_GYOGYPEDAGOGIAI
,Osztaly. C_KETTANNYELVU
,Osztaly. C_LOGOPEDIAI
,Osztaly. C_NEMZETISEGI
,Osztaly. C_NYELVIELOKESZITO
,Osztaly. C_SPORT
,Osztaly. C_ALINTEZMENYID
,Osztaly. C_ALTANEVID
,Osztaly. TOROLT
,Osztaly. SERIAL
,Osztaly. LASTCHANGED
,Osztaly. CREATED
,Osztaly. MODIFIER
,Osztaly. CREATOR
,Osztaly. ELOZOTANEVIREKORDID
,Osztaly. NNID
,Osztaly. Operation
FROM
(SELECT
OsztalyJsonData.*
,OsztalyCsoport.ID OsztalyCsoportId
FROM OPENJSON(@pImportJson, N'lax $.ImportJson.T_OSZTALY_OSSZES')
WITH (
ID INT '$.ID'
,C_KEPZESIFORMA INT '$.C_KEPZESIFORMA'
,C_TECHNIKAIOSZTALY CHAR(1) '$.C_TECHNIKAIOSZTALY'
,C_GYOGYPEDAGOGIAI CHAR(1) '$.C_GYOGYPEDAGOGIAI'
,C_KETTANNYELVU CHAR(1) '$.C_KETTANNYELVU'
,C_LOGOPEDIAI CHAR(1) '$.C_LOGOPEDIAI'
,C_NEMZETISEGI CHAR(1) '$.C_NEMZETISEGI'
,C_NYELVIELOKESZITO CHAR(1) '$.C_NYELVIELOKESZITO'
,C_SPORT CHAR(1) '$.C_SPORT'
,C_ALINTEZMENYID INT '$.C_INTEZMENYID'
,C_ALTANEVID 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'
,OsztalyCsoportNev NVARCHAR(255) '$.OsztalyCsoportNev'
) OsztalyJsonData
LEFT JOIN
T_OSZTALYCSOPORT_OSSZES OsztalyCsoport 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(OsztalyCsoport.C_NEV),CHAR(160),CHAR(32)),CHAR(32),'(¤¤)'),'¤)(¤',''),'(¤¤)',CHAR(32)))) = LOWER(OsztalyJsonData.OsztalyCsoportNev)
AND OsztalyCsoport.C_INTEZMENYID = @pIntezmenyId
AND OsztalyCsoport.C_TANEVID = @pTanevId
AND OsztalyCsoport.TOROLT = 'F'
AND OsztalyJsonData.ID IS NULL
) AS Osztaly
FOR JSON PATH,INCLUDE_NULL_VALUES)
SET @actualJson = @actualJson + ' } }'
--NOTE: A törlés azért false, mert a T_OSZTALY_OSSZES view-ból nem törlünk importnál!
EXECUTE [dbo].[uspDynamicImport] @pIntezmenyId = @pIntezmenyId, @pTanevId = @pTanevId, @pUserId = @pUserId, @pImportJson = @actualJson, @pIsTorles = 0, @pIsSubTable = 1
--Csoportok beszúrása
SET @actualJson = ' { "ImportJson":{ "T_CSOPORT_OSSZES":' +
(SELECT
Csoport.OsztalyCsoportId ID
,Csoport. C_TIPUSA
,Csoport.OsztalybontasId C_OSZTALYBONTASID
,Csoport. C_ALINTEZMENYID
,Csoport. C_ALTANEVID
,Csoport. TOROLT
,Csoport. SERIAL
,Csoport. LASTCHANGED
,Csoport. CREATED
,Csoport. MODIFIER
,Csoport. CREATOR
,Csoport. ELOZOTANEVIREKORDID
,Csoport. NNID
,Csoport. Operation
FROM
(SELECT
CsoportJsonData.*
,OsztalyCsoport.ID OsztalyCsoportId
,Osztalybontas.ID OsztalybontasId
FROM OPENJSON(@pImportJson, N'lax $.ImportJson.T_CSOPORT_OSSZES')
WITH (
ID INT '$.ID'
,C_TIPUSA INT '$.C_TIPUSA'
,C_OSZTALYBONTASID INT '$.C_OSZTALYBONTASID'
,C_ALINTEZMENYID INT '$.C_INTEZMENYID'
,C_ALTANEVID 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'
,OsztalyCsoportNev NVARCHAR(255) '$.OsztalyCsoportNev'
,OsztalybontasNev NVARCHAR(255) '$.OsztalybontasNev'
) CsoportJsonData
LEFT JOIN
T_OSZTALYCSOPORT_OSSZES OsztalyCsoport 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(OsztalyCsoport.C_NEV),CHAR(160),CHAR(32)),CHAR(32),'(¤¤)'),'¤)(¤',''),'(¤¤)',CHAR(32)))) = LOWER(CsoportJsonData.OsztalyCsoportNev)
AND OsztalyCsoport.C_INTEZMENYID = @pIntezmenyId
AND OsztalyCsoport.C_TANEVID = @pTanevId
AND OsztalyCsoport.TOROLT = 'F'
AND CsoportJsonData.ID IS NULL
LEFT JOIN
T_OSZTALYCSOPORT_OSSZES Osztalybontas 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(Osztalybontas.C_NEV),CHAR(160),CHAR(32)),CHAR(32),'(¤¤)'),'¤)(¤',''),'(¤¤)',CHAR(32)))) = LOWER(CsoportJsonData.OsztalybontasNev)
AND Osztalybontas.C_INTEZMENYID = @pIntezmenyId
AND Osztalybontas.C_TANEVID = @pTanevId
AND Osztalybontas.TOROLT = 'F'
AND CsoportJsonData.ID IS NULL
) AS Csoport
FOR JSON PATH,INCLUDE_NULL_VALUES)
SET @actualJson = @actualJson + ' } }'
--NOTE: A törlés azért false, mert a T_CSOPORT_OSSZES view-ból nem törlünk importnál!
EXECUTE [dbo].[uspDynamicImport] @pIntezmenyId = @pIntezmenyId, @pTanevId = @pTanevId, @pUserId = @pUserId, @pImportJson = @actualJson, @pIsTorles = 0, @pIsSubTable = 1
--Foglalkozások beszúrása
SET @actualJson = ' { "ImportJson":{ "T_FOGLALKOZAS_OSSZES":' +
(SELECT
Foglalkozas. ID
,Foglalkozas. C_FOGLALKOZASTIPUSA
,Foglalkozas. C_ORASZAM
,Foglalkozas. C_NEV
,Foglalkozas. C_ERTEKELESKELL
,Foglalkozas. C_MULASZTASKELL
,Foglalkozas. C_TANARFELVEHETI
,Foglalkozas.OsztalyCsoportId C_OSZTALYCSOPORTID
,Foglalkozas.TantargyId C_TANTARGYID
,Foglalkozas.TanarId C_TANARID
,Foglalkozas. C_IMPORTALT
,Foglalkozas. C_INTEZMENYID
,Foglalkozas. C_TANEVID
,Foglalkozas. TOROLT
,Foglalkozas. SERIAL
,Foglalkozas. LASTCHANGED
,Foglalkozas. CREATED
,Foglalkozas. MODIFIER
,Foglalkozas. CREATOR
,Foglalkozas. ELOZOTANEVIREKORDID
,Foglalkozas. NNID
,Foglalkozas. Operation
FROM
(SELECT
FoglalkozasJsonData.*
,OsztalyCsoport.ID OsztalyCsoportId
,Felhasznalo.ID TanarId
,Tantargy.ID TantargyId
FROM OPENJSON(@pImportJson, N'lax $.ImportJson.T_FOGLALKOZAS_OSSZES')
WITH (
ID INT '$.ID'
,C_FOGLALKOZASTIPUSA INT '$.C_FOGLALKOZASTIPUSA'
,C_ORASZAM NUMERIC(10,2) '$.C_ORASZAM'
,C_NEV NVARCHAR(255) '$.C_NEV'
,C_ERTEKELESKELL CHAR(1) '$.C_ERTEKELESKELL'
,C_MULASZTASKELL CHAR(1) '$.C_MULASZTASKELL'
,C_TANARFELVEHETI CHAR(1) '$.C_TANARFELVEHETI'
,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'
,OsztalyCsoportNev NVARCHAR(255) '$.OsztalyCsoportNev'
,TanarNev NVARCHAR(255) '$.TanarNev'
,TanarSzuletesiIdo NVARCHAR(255) '$.TanarSzuletesiIdo'
,TantargyNev NVARCHAR(255) '$.TantargyNev'
) FoglalkozasJsonData
LEFT JOIN
T_OSZTALYCSOPORT_OSSZES OsztalyCsoport 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(OsztalyCsoport.C_NEV),CHAR(160),CHAR(32)),CHAR(32),'(¤¤)'),'¤)(¤',''),'(¤¤)',CHAR(32)))) = LOWER(FoglalkozasJsonData.OsztalyCsoportNev)
AND OsztalyCsoport.C_INTEZMENYID = @pIntezmenyId
AND OsztalyCsoport.C_TANEVID = @pTanevId
AND OsztalyCsoport.TOROLT = 'F'
LEFT JOIN
T_TANTARGY_OSSZES Tantargy 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(Tantargy.C_NEV),CHAR(160),CHAR(32)),CHAR(32),'(¤¤)'),'¤)(¤',''),'(¤¤)',CHAR(32)))) = LOWER(FoglalkozasJsonData.TantargyNev)
AND Tantargy.C_INTEZMENYID = @pIntezmenyId
AND Tantargy.C_TANEVID = @pTanevId
AND Tantargy.TOROLT = 'F'
LEFT JOIN
T_FELHASZNALO_OSSZES Felhasznalo 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(Felhasznalo.C_NYOMTATASINEV),CHAR(160),CHAR(32)),CHAR(32),'(¤¤)'),'¤)(¤',''),'(¤¤)',CHAR(32)))) = LOWER(FoglalkozasJsonData.TanarNev)
AND (FoglalkozasJsonData.TanarSzuletesiIdo IS NULL
OR Felhasznalo.C_SZULETESIDATUM = FoglalkozasJsonData.TanarSzuletesiIdo)
AND Felhasznalo.C_INTEZMENYID = @pIntezmenyId
AND Felhasznalo.C_TANEVID = @pTanevId
AND Felhasznalo.TOROLT = 'F'
INNER JOIN
T_ALKALMAZOTT_OSSZES Alkalmazott ON
Alkalmazott.ID = Felhasznalo.ID
AND Alkalmazott.C_ALINTEZMENYID = @pIntezmenyId
AND Alkalmazott.C_ALTANEVID = @pTanevId
AND Alkalmazott.TOROLT = 'F'
) AS Foglalkozas
FOR JSON PATH,INCLUDE_NULL_VALUES)
SET @actualJson = @actualJson + ' } }'
EXECUTE [dbo].[uspDynamicImport] @pIntezmenyId = @pIntezmenyId, @pTanevId = @pTanevId, @pUserId = @pUserId, @pImportJson = @actualJson, @pIsTorles = @pIsTorles, @pIsSubTable = 0
END
GO

View file

@ -0,0 +1,597 @@
-- =============================================
-- Description: <Tanulo KIFIR import>
-- =============================================
DROP PROCEDURE IF EXISTS [dbo].[uspTanuloKifirImport]
GO
CREATE PROCEDURE [dbo].[uspTanuloKifirImport]
@pIntezmenyId INT
,@pTanevId INT
,@pUserId INT
,@pImportJson NVARCHAR(MAX)
AS
BEGIN
SET NOCOUNT ON;
DECLARE
@tableNameList NVARCHAR(2000) = 'T_FELHASZNALO_OSSZES'
,@actualJson NVARCHAR(MAX) = ''
,@lastChangedDateTime DATETIME = GETDATE()
--NOTE: A törlés azért false, mert a tanuló 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: Tanulo temp tábla incializálása
CREATE TABLE #TanuloTempTable (
ID INT
,C_TANTERVID INT
,C_ALLAMIGONDOZOTT CHAR(1)
,C_BEILLESZKEDESINEHEZSEG CHAR(1)
,C_BEJARO CHAR(1)
,C_EVISMETLO CHAR(1)
,C_JOGVISZONYATSZUNETELTETO CHAR(1)
,C_MAGANTANULO CHAR(1)
,C_POLGARISZERZODESES CHAR(1)
,C_SZAKMAIGYAKORLATON CHAR(1)
,C_SZOCIALISTAMOGATAS CHAR(1)
,C_TANDIJATFIZETO CHAR(1)
,C_TANKOTELEZETT CHAR(1)
,C_TANULOSZERZODESES CHAR(1)
,C_TERITESIDIJATFIZETO CHAR(1)
,C_TESTNEVELESTIPUSA INT
,C_VENDEG CHAR(1)
,C_BTMPROBLEMAS CHAR(1)
,C_DIAKSPORTKOROS CHAR(1)
,C_HALMOZOTTANFOGYATEKOS CHAR(1)
,C_KOLLEGIUMIELLATASOS CHAR(1)
,C_SAJATOSNEVELESU CHAR(1)
,C_VESZELYEZTETETT CHAR(1)
,C_BEILLESZKEDESIPROBLEMAVALKUZ CHAR(1)
,C_MAGATARTASIPROBLEMAVALKUZD CHAR(1)
,C_TANULASIPROBLEMADISZGRAFIA CHAR(1)
,C_TANULASIPROBLEMAVALKUZD CHAR(1)
,C_TANULASIPROBLEMAVALKUZDDISZK CHAR(1)
,C_TANULASIPROBLEMAVALKUZDDISZL CHAR(1)
,C_KOZEPFOKUOKTATASBATIZENHATOD CHAR(1)
,C_MENEDEKJOGGALRENDELKEZO CHAR(1)
,C_EGYEBDONTO CHAR(1)
,C_MEGALLAPODASOS CHAR(1)
,C_OSZTV CHAR(1)
,C_SZETVAGAZAT CHAR(1)
,C_SZKTV CHAR(1)
,C_TECHNIKUSIEVFOLYAM CHAR(1)
,C_EGYUTTMUKODESES CHAR(1)
,C_ISKOLAIKERETEKKOZOTT CHAR(1)
,C_ISSZAKMAIGYAKORLATHIANY CHAR(1)
,C_ISKIFIRIMPORTALT CHAR(1)
,C_FELVETELTANEVEID INT
,C_ALINTEZMENYID INT
,C_ALTANEVID INT
,TOROLT CHAR(1)
,SERIAL INT
,LASTCHANGED DATETIME
,CREATED DATETIME
,MODIFIER INT
,CREATOR INT
,ELOZOTANEVIREKORDID INT
,NNID INT
,Operation INT
)
INSERT INTO
#TanuloTempTable
SELECT
Felhasznalo.ID
,TanuloJsonData.C_TANTERVID
,TanuloJsonData.C_ALLAMIGONDOZOTT
,TanuloJsonData.C_BEILLESZKEDESINEHEZSEG
,TanuloJsonData.C_BEJARO
,TanuloJsonData.C_EVISMETLO
,TanuloJsonData.C_JOGVISZONYATSZUNETELTETO
,TanuloJsonData.C_MAGANTANULO
,TanuloJsonData.C_POLGARISZERZODESES
,TanuloJsonData.C_SZAKMAIGYAKORLATON
,TanuloJsonData.C_SZOCIALISTAMOGATAS
,TanuloJsonData.C_TANDIJATFIZETO
,TanuloJsonData.C_TANKOTELEZETT
,TanuloJsonData.C_TANULOSZERZODESES
,TanuloJsonData.C_TERITESIDIJATFIZETO
,TanuloJsonData.C_TESTNEVELESTIPUSA
,TanuloJsonData.C_VENDEG
,TanuloJsonData.C_BTMPROBLEMAS
,TanuloJsonData.C_DIAKSPORTKOROS
,TanuloJsonData.C_HALMOZOTTANFOGYATEKOS
,TanuloJsonData.C_KOLLEGIUMIELLATASOS
,TanuloJsonData.C_SAJATOSNEVELESU
,TanuloJsonData.C_VESZELYEZTETETT
,TanuloJsonData.C_BEILLESZKEDESIPROBLEMAVALKUZ
,TanuloJsonData.C_MAGATARTASIPROBLEMAVALKUZD
,TanuloJsonData.C_TANULASIPROBLEMADISZGRAFIA
,TanuloJsonData.C_TANULASIPROBLEMAVALKUZD
,TanuloJsonData.C_TANULASIPROBLEMAVALKUZDDISZK
,TanuloJsonData.C_TANULASIPROBLEMAVALKUZDDISZL
,TanuloJsonData.C_KOZEPFOKUOKTATASBATIZENHATOD
,TanuloJsonData.C_MENEDEKJOGGALRENDELKEZO
,TanuloJsonData.C_EGYEBDONTO
,TanuloJsonData.C_MEGALLAPODASOS
,TanuloJsonData.C_OSZTV
,TanuloJsonData.C_SZETVAGAZAT
,TanuloJsonData.C_SZKTV
,TanuloJsonData.C_TECHNIKUSIEVFOLYAM
,TanuloJsonData.C_EGYUTTMUKODESES
,TanuloJsonData.C_ISKOLAIKERETEKKOZOTT
,TanuloJsonData.C_ISSZAKMAIGYAKORLATHIANY
,TanuloJsonData.C_ISKIFIRIMPORTALT
,TanuloJsonData.C_FELVETELTANEVEID
,TanuloJsonData.C_ALINTEZMENYID
,TanuloJsonData.C_ALTANEVID
,TanuloJsonData.TOROLT
,TanuloJsonData.SERIAL
,TanuloJsonData.LASTCHANGED
,TanuloJsonData.CREATED
,TanuloJsonData.MODIFIER
,TanuloJsonData.CREATOR
,TanuloJsonData.ELOZOTANEVIREKORDID
,TanuloJsonData.NNID
,TanuloJsonData.Operation
FROM OPENJSON(@pImportJson, N'lax $.ImportJson.T_TANULO_OSSZES')
WITH (
ID INT '$.ID'
,C_TANTERVID INT '$.C_TANTERVID'
,C_ALLAMIGONDOZOTT CHAR(1) '$.C_ALLAMIGONDOZOTT'
,C_BEILLESZKEDESINEHEZSEG CHAR(1) '$.C_BEILLESZKEDESINEHEZSEG'
,C_BEJARO CHAR(1) '$.C_BEJARO'
,C_EVISMETLO CHAR(1) '$.C_EVISMETLO'
,C_JOGVISZONYATSZUNETELTETO CHAR(1) '$.C_JOGVISZONYATSZUNETELTETO'
,C_MAGANTANULO CHAR(1) '$.C_MAGANTANULO'
,C_POLGARISZERZODESES CHAR(1) '$.C_POLGARISZERZODESES'
,C_SZAKMAIGYAKORLATON CHAR(1) '$.C_SZAKMAIGYAKORLATON'
,C_SZOCIALISTAMOGATAS CHAR(1) '$.C_SZOCIALISTAMOGATAS'
,C_TANDIJATFIZETO CHAR(1) '$.C_TANDIJATFIZETO'
,C_TANKOTELEZETT CHAR(1) '$.C_TANKOTELEZETT'
,C_TANULOSZERZODESES CHAR(1) '$.C_TANULOSZERZODESES'
,C_TERITESIDIJATFIZETO CHAR(1) '$.C_TERITESIDIJATFIZETO'
,C_TESTNEVELESTIPUSA INT '$.C_TESTNEVELESTIPUSA'
,C_VENDEG CHAR(1) '$.C_VENDEG'
,C_BTMPROBLEMAS CHAR(1) '$.C_BTMPROBLEMAS'
,C_DIAKSPORTKOROS CHAR(1) '$.C_DIAKSPORTKOROS'
,C_HALMOZOTTANFOGYATEKOS CHAR(1) '$.C_HALMOZOTTANFOGYATEKOS'
,C_KOLLEGIUMIELLATASOS CHAR(1) '$.C_KOLLEGIUMIELLATASOS'
,C_SAJATOSNEVELESU CHAR(1) '$.C_SAJATOSNEVELESU'
,C_VESZELYEZTETETT CHAR(1) '$.C_VESZELYEZTETETT'
,C_BEILLESZKEDESIPROBLEMAVALKUZ CHAR(1) '$.C_BEILLESZKEDESIPROBLEMAVALKUZ'
,C_MAGATARTASIPROBLEMAVALKUZD CHAR(1) '$.C_MAGATARTASIPROBLEMAVALKUZD'
,C_TANULASIPROBLEMADISZGRAFIA CHAR(1) '$.C_TANULASIPROBLEMADISZGRAFIA'
,C_TANULASIPROBLEMAVALKUZD CHAR(1) '$.C_TANULASIPROBLEMAVALKUZD'
,C_TANULASIPROBLEMAVALKUZDDISZK CHAR(1) '$.C_TANULASIPROBLEMAVALKUZDDISZK'
,C_TANULASIPROBLEMAVALKUZDDISZL CHAR(1) '$.C_TANULASIPROBLEMAVALKUZDDISZL'
,C_KOZEPFOKUOKTATASBATIZENHATOD CHAR(1) '$.C_KOZEPFOKUOKTATASBATIZENHATOD'
,C_MENEDEKJOGGALRENDELKEZO CHAR(1) '$.C_MENEDEKJOGGALRENDELKEZO'
,C_EGYEBDONTO CHAR(1) '$.C_EGYEBDONTO'
,C_MEGALLAPODASOS CHAR(1) '$.C_MEGALLAPODASOS'
,C_OSZTV CHAR(1) '$.C_OSZTV'
,C_SZETVAGAZAT CHAR(1) '$.C_SZETVAGAZAT'
,C_SZKTV CHAR(1) '$.C_SZKTV'
,C_TECHNIKUSIEVFOLYAM CHAR(1) '$.C_TECHNIKUSIEVFOLYAM'
,C_EGYUTTMUKODESES CHAR(1) '$.C_EGYUTTMUKODESES'
,C_ISKOLAIKERETEKKOZOTT CHAR(1) '$.C_ISKOLAIKERETEKKOZOTT'
,C_ISSZAKMAIGYAKORLATHIANY CHAR(1) '$.C_ISSZAKMAIGYAKORLATHIANY'
,C_ISKIFIRIMPORTALT CHAR(1) '$.C_ISKIFIRIMPORTALT'
,C_FELVETELTANEVEID INT '$.C_FELVETELTANEVEID'
,C_ALINTEZMENYID INT '$.C_INTEZMENYID'
,C_ALTANEVID 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'
,Vezeteknev NVARCHAR(255) '$.Vezeteknev'
,Keresztnev NVARCHAR(255) '$.Keresztnev'
,SzuletesiHely NVARCHAR(50) '$.SzuletesiHely'
,SzuletesiIdo DATETIME '$.SzuletesiIdo'
,OktatasiAzonosito NVARCHAR(20) '$.OktatasiAzonosito'
) TanuloJsonData
LEFT JOIN
T_FELHASZNALO_OSSZES Felhasznalo 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(Felhasznalo.C_VEZETEKNEV),CHAR(160),CHAR(32)),CHAR(32),'(¤¤)'),'¤)(¤',''),'(¤¤)',CHAR(32)))) = LOWER(TanuloJsonData.Vezeteknev)
AND LTRIM(RTRIM(REPLACE(REPLACE(REPLACE(REPLACE(LOWER(Felhasznalo.C_UTONEV),CHAR(160),CHAR(32)),CHAR(32),'(¤¤)'),'¤)(¤',''),'(¤¤)',CHAR(32)))) = LOWER(TanuloJsonData.Keresztnev)
AND LTRIM(RTRIM(REPLACE(REPLACE(REPLACE(REPLACE(LOWER(Felhasznalo.C_SZULETESIHELY),CHAR(160),CHAR(32)),CHAR(32),'(¤¤)'),'¤)(¤',''),'(¤¤)',CHAR(32)))) = LOWER(TanuloJsonData.SzuletesiHely)
AND Felhasznalo.C_SZULETESIDATUM = TanuloJsonData.SzuletesiIdo
AND Felhasznalo.C_OKTATASIAZONOSITO = TanuloJsonData.OktatasiAzonosito
AND Felhasznalo.C_INTEZMENYID = @pIntezmenyId
AND Felhasznalo.C_TANEVID = @pTanevId
AND Felhasznalo.TOROLT = 'F'
--NOTE: Cim temp tábla incializálása
CREATE TABLE #CimTempTable (
ID INT
,C_CIMTIPUSA INT
,C_IRANYITOSZAM NVARCHAR(20)
,C_VAROS NVARCHAR(50)
,C_KOZTERULET NVARCHAR(40)
,C_KOZTERULETJELLEGE INT
,C_HAZSZAM NVARCHAR(30)
,C_ORSZAG INT
,C_ALAPERTELMEZETT CHAR(1)
,C_EMELET NVARCHAR(40)
,C_AJTO NVARCHAR(30)
,C_FELHASZNALOID 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
#CimTempTable
SELECT
CimJsonData.ID
,CimJsonData.C_CIMTIPUSA
,CimJsonData.C_IRANYITOSZAM
,CimJsonData.C_VAROS
,CimJsonData.C_KOZTERULET
,CimJsonData.C_KOZTERULETJELLEGE
,CimJsonData.C_HAZSZAM
,CimJsonData.C_ORSZAG
,CimJsonData.C_ALAPERTELMEZETT
,CimJsonData.C_EMELET
,CimJsonData.C_AJTO
,Felhasznalo.ID
,CimJsonData.C_INTEZMENYID
,CimJsonData.C_TANEVID
,CimJsonData.TOROLT
,CimJsonData.SERIAL
,CimJsonData.LASTCHANGED
,CimJsonData.CREATED
,CimJsonData.MODIFIER
,CimJsonData.CREATOR
,CimJsonData.ELOZOTANEVIREKORDID
,CimJsonData.NNID
,CimJsonData.Operation
FROM OPENJSON(@pImportJson, N'lax $.ImportJson.T_CIM_OSSZES')
WITH (
ID INT '$.ID'
,C_CIMTIPUSA INT '$.C_CIMTIPUSA'
,C_IRANYITOSZAM NVARCHAR(20) '$.C_IRANYITOSZAM'
,C_VAROS NVARCHAR(50) '$.C_VAROS'
,C_KOZTERULET NVARCHAR(40) '$.C_KOZTERULET'
,C_KOZTERULETJELLEGE INT '$.C_KOZTERULETJELLEGE'
,C_HAZSZAM NVARCHAR(30) '$.C_HAZSZAM'
,C_ORSZAG INT '$.C_ORSZAG'
,C_ALAPERTELMEZETT CHAR(1) '$.C_ALAPERTELMEZETT'
,C_EMELET NVARCHAR(40) '$.C_EMELET'
,C_AJTO NVARCHAR(30) '$.C_AJTO'
,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'
,Vezeteknev NVARCHAR(255) '$.Vezeteknev'
,Keresztnev NVARCHAR(255) '$.Keresztnev'
,SzuletesiHely NVARCHAR(50) '$.SzuletesiHely'
,SzuletesiIdo DATETIME '$.SzuletesiIdo'
,OktatasiAzonosito NVARCHAR(20) '$.OktatasiAzonosito'
) CimJsonData
LEFT JOIN
T_FELHASZNALO_OSSZES Felhasznalo 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(Felhasznalo.C_VEZETEKNEV),CHAR(160),CHAR(32)),CHAR(32),'(¤¤)'),'¤)(¤',''),'(¤¤)',CHAR(32)))) = LOWER(CimJsonData.Vezeteknev)
AND LTRIM(RTRIM(REPLACE(REPLACE(REPLACE(REPLACE(LOWER(Felhasznalo.C_UTONEV),CHAR(160),CHAR(32)),CHAR(32),'(¤¤)'),'¤)(¤',''),'(¤¤)',CHAR(32)))) = LOWER(CimJsonData.Keresztnev)
AND LTRIM(RTRIM(REPLACE(REPLACE(REPLACE(REPLACE(LOWER(Felhasznalo.C_SZULETESIHELY),CHAR(160),CHAR(32)),CHAR(32),'(¤¤)'),'¤)(¤',''),'(¤¤)',CHAR(32)))) = LOWER(CimJsonData.SzuletesiHely)
AND Felhasznalo.C_SZULETESIDATUM = CimJsonData.SzuletesiIdo
AND Felhasznalo.C_OKTATASIAZONOSITO = CimJsonData.OktatasiAzonosito
AND Felhasznalo.C_INTEZMENYID = @pIntezmenyId
AND Felhasznalo.C_TANEVID = @pTanevId
AND Felhasznalo.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_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
EmailJsonData.ID
,EmailJsonData.C_EMAILTIPUSA
,EmailJsonData.C_EMAILCIM
,EmailJsonData.C_ALAPERTELMEZETT
,EmailJsonData.C_ISPUBLIC
,Felhasznalo.ID
,EmailJsonData.C_INTEZMENYID
,EmailJsonData.C_TANEVID
,EmailJsonData.TOROLT
,EmailJsonData.SERIAL
,EmailJsonData.LASTCHANGED
,EmailJsonData.CREATED
,EmailJsonData.MODIFIER
,EmailJsonData.CREATOR
,EmailJsonData.ELOZOTANEVIREKORDID
,EmailJsonData.NNID
,EmailJsonData.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_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'
,Vezeteknev NVARCHAR(255) '$.Vezeteknev'
,Keresztnev NVARCHAR(255) '$.Keresztnev'
,SzuletesiHely NVARCHAR(50) '$.SzuletesiHely'
,SzuletesiIdo DATETIME '$.SzuletesiIdo'
,OktatasiAzonosito NVARCHAR(20) '$.OktatasiAzonosito'
) EmailJsonData
LEFT JOIN
T_FELHASZNALO_OSSZES Felhasznalo 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(Felhasznalo.C_VEZETEKNEV),CHAR(160),CHAR(32)),CHAR(32),'(¤¤)'),'¤)(¤',''),'(¤¤)',CHAR(32)))) = LOWER(EmailJsonData.Vezeteknev)
AND LTRIM(RTRIM(REPLACE(REPLACE(REPLACE(REPLACE(LOWER(Felhasznalo.C_UTONEV),CHAR(160),CHAR(32)),CHAR(32),'(¤¤)'),'¤)(¤',''),'(¤¤)',CHAR(32)))) = LOWER(EmailJsonData.Keresztnev)
AND LTRIM(RTRIM(REPLACE(REPLACE(REPLACE(REPLACE(LOWER(Felhasznalo.C_SZULETESIHELY),CHAR(160),CHAR(32)),CHAR(32),'(¤¤)'),'¤)(¤',''),'(¤¤)',CHAR(32)))) = LOWER(EmailJsonData.SzuletesiHely)
AND Felhasznalo.C_SZULETESIDATUM = EmailJsonData.SzuletesiIdo
AND Felhasznalo.C_OKTATASIAZONOSITO = EmailJsonData.OktatasiAzonosito
AND Felhasznalo.C_INTEZMENYID = @pIntezmenyId
AND Felhasznalo.C_TANEVID = @pTanevId
--NOTE: Ha van bejövő cím állandó lakcím típusú 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
Cim
SET
Cim.C_ALAPERTELMEZETT = 'F'
,Cim.SERIAL = Cim.SERIAL + 1
,Cim.LASTCHANGED = @lastChangedDateTime
,Cim.MODIFIER = @pUserId
FROM
T_FELHASZNALO_OSSZES Felhasznalo
INNER JOIN
#CimTempTable ON
#CimTempTable.C_INTEZMENYID = Felhasznalo.C_INTEZMENYID
AND #CimTempTable.C_TANEVID = Felhasznalo.C_TANEVID
AND #CimTempTable.TOROLT = 'F'
AND #CimTempTable.C_FELHASZNALOID = Felhasznalo.ID
INNER JOIN
T_CIM_OSSZES Cim ON
Cim.C_INTEZMENYID = Felhasznalo.C_INTEZMENYID
AND Cim.C_TANEVID = Felhasznalo.C_TANEVID
AND Cim.TOROLT = 'F'
AND Cim.C_FELHASZNALOID = Felhasznalo.ID
AND Cim.C_ALAPERTELMEZETT = 'T'
WHERE
Felhasznalo.C_INTEZMENYID = @pIntezmenyId
AND Felhasznalo.C_TANEVID = @pTanevId
AND Felhasznalo.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
Email
SET
Email.C_ALAPERTELMEZETT = 'F'
,Email.SERIAL = Email.SERIAL + 1
,Email.LASTCHANGED = @lastChangedDateTime
,Email.MODIFIER = @pUserId
FROM
T_FELHASZNALO_OSSZES Felhasznalo
INNER JOIN
#EmailTempTable ON
#EmailTempTable.C_INTEZMENYID = Felhasznalo.C_INTEZMENYID
AND #EmailTempTable.C_TANEVID = Felhasznalo.C_TANEVID
AND #EmailTempTable.TOROLT = 'F'
AND #EmailTempTable.C_FELHASZNALOID = Felhasznalo.ID
INNER JOIN
T_EMAIL_OSSZES Email ON
Email.C_INTEZMENYID = Felhasznalo.C_INTEZMENYID
AND Email.C_TANEVID = Felhasznalo.C_TANEVID
AND Email.TOROLT = 'F'
AND Email.C_FELHASZNALOID = Felhasznalo.ID
AND Email.C_ALAPERTELMEZETT = 'T'
WHERE
Felhasznalo.C_INTEZMENYID = @pIntezmenyId
AND Felhasznalo.C_TANEVID = @pTanevId
AND Felhasznalo.TOROLT = 'F'
--Tanulók beszúrása
SET @actualJson = ' { "ImportJson":{ "T_TANULO_OSSZES":' + (
SELECT
Tanulo.ID
,Tanulo.C_TANTERVID
,Tanulo.C_ALLAMIGONDOZOTT
,Tanulo.C_BEILLESZKEDESINEHEZSEG
,Tanulo.C_BEJARO
,Tanulo.C_EVISMETLO
,Tanulo.C_JOGVISZONYATSZUNETELTETO
,Tanulo.C_MAGANTANULO
,Tanulo.C_POLGARISZERZODESES
,Tanulo.C_SZAKMAIGYAKORLATON
,Tanulo.C_SZOCIALISTAMOGATAS
,Tanulo.C_TANDIJATFIZETO
,Tanulo.C_TANKOTELEZETT
,Tanulo.C_TANULOSZERZODESES
,Tanulo.C_TERITESIDIJATFIZETO
,Tanulo.C_TESTNEVELESTIPUSA
,Tanulo.C_VENDEG
,Tanulo.C_BTMPROBLEMAS
,Tanulo.C_DIAKSPORTKOROS
,Tanulo.C_HALMOZOTTANFOGYATEKOS
,Tanulo.C_KOLLEGIUMIELLATASOS
,Tanulo.C_SAJATOSNEVELESU
,Tanulo.C_VESZELYEZTETETT
,Tanulo.C_BEILLESZKEDESIPROBLEMAVALKUZ
,Tanulo.C_MAGATARTASIPROBLEMAVALKUZD
,Tanulo.C_TANULASIPROBLEMADISZGRAFIA
,Tanulo.C_TANULASIPROBLEMAVALKUZD
,Tanulo.C_TANULASIPROBLEMAVALKUZDDISZK
,Tanulo.C_TANULASIPROBLEMAVALKUZDDISZL
,Tanulo.C_KOZEPFOKUOKTATASBATIZENHATOD
,Tanulo.C_MENEDEKJOGGALRENDELKEZO
,Tanulo.C_EGYEBDONTO
,Tanulo.C_MEGALLAPODASOS
,Tanulo.C_OSZTV
,Tanulo.C_SZETVAGAZAT
,Tanulo.C_SZKTV
,Tanulo.C_TECHNIKUSIEVFOLYAM
,Tanulo.C_EGYUTTMUKODESES
,Tanulo.C_ISKOLAIKERETEKKOZOTT
,Tanulo.C_ISSZAKMAIGYAKORLATHIANY
,Tanulo.C_ISKIFIRIMPORTALT
,Tanulo.C_FELVETELTANEVEID
,Tanulo.C_ALINTEZMENYID
,Tanulo.C_ALTANEVID
,Tanulo.TOROLT
,Tanulo.SERIAL
,Tanulo.LASTCHANGED
,Tanulo.CREATED
,Tanulo.MODIFIER
,Tanulo.CREATOR
,Tanulo.ELOZOTANEVIREKORDID
,Tanulo.NNID
,Tanulo.Operation
FROM
#TanuloTempTable AS Tanulo
FOR JSON PATH,INCLUDE_NULL_VALUES
)
SET @actualJson = @actualJson + ' } }'
--NOTE: A törlés azért false, mert a tanuló importálásoknál soha nem törlünk!
EXECUTE [dbo].[uspDynamicImport] @pIntezmenyId = @pIntezmenyId, @pTanevId = @pTanevId, @pUserId = @pUserId, @pImportJson = @actualJson, @pIsTorles = 0, @pIsSubTable = 1
DROP TABLE IF EXISTS #TanuloTempTable
--Címek beszúrása
SET @actualJson = ' { "ImportJson":{ "T_CIM_OSSZES":' + (
SELECT
Cim.ID
,Cim.C_CIMTIPUSA
,Cim.C_IRANYITOSZAM
,Cim.C_VAROS
,Cim.C_KOZTERULET
,Cim.C_KOZTERULETJELLEGE
,Cim.C_HAZSZAM
,Cim.C_ORSZAG
,Cim.C_ALAPERTELMEZETT
,Cim.C_EMELET
,Cim.C_AJTO
,Cim.C_FELHASZNALOID
,Cim.C_INTEZMENYID
,Cim.C_TANEVID
,Cim.TOROLT
,Cim.SERIAL
,Cim.LASTCHANGED
,Cim.CREATED
,Cim.MODIFIER
,Cim.CREATOR
,Cim.ELOZOTANEVIREKORDID
,Cim.NNID
,Cim.Operation
FROM
#CimTempTable AS Cim
FOR JSON PATH,INCLUDE_NULL_VALUES
)
SET @actualJson = @actualJson + ' } }'
--NOTE: A törlés azért false, mert a tanuló importálásoknál soha nem törlünk!
EXECUTE [dbo].[uspDynamicImport] @pIntezmenyId = @pIntezmenyId, @pTanevId = @pTanevId, @pUserId = @pUserId, @pImportJson = @actualJson, @pIsTorles = 0, @pIsSubTable = 0
DROP TABLE IF EXISTS #CimTempTable
--Emailek beszúrása
SET @actualJson = ' { "ImportJson":{ "T_EMAIL_OSSZES":' + (
SELECT
Email.ID
,Email.C_EMAILTIPUSA
,Email.C_EMAILCIM
,Email.C_ALAPERTELMEZETT
,Email.C_ISPUBLIC
,Email.C_FELHASZNALOID
,Email.C_INTEZMENYID
,Email.C_TANEVID
,Email.TOROLT
,Email.SERIAL
,Email.LASTCHANGED
,Email.CREATED
,Email.MODIFIER
,Email.CREATOR
,Email.ELOZOTANEVIREKORDID
,Email.NNID
,Email.Operation
FROM
#EmailTempTable AS Email
FOR JSON PATH,INCLUDE_NULL_VALUES
)
SET @actualJson = @actualJson + ' } }'
--NOTE: A törlés azért false, mert a tanuló importálásoknál soha nem törlünk!
EXECUTE [dbo].[uspDynamicImport] @pIntezmenyId = @pIntezmenyId, @pTanevId = @pTanevId, @pUserId = @pUserId, @pImportJson = @actualJson, @pIsTorles = 0, @pIsSubTable = 0
DROP TABLE IF EXISTS #EmailTempTable
END
GO