kreta/Kreta.DataAccess.Migrations/DBScripts/Database/dbo/Stored procedures/uspTantargyfelosztasImport.sql
2024-03-13 00:33:46 +01:00

428 lines
14 KiB
Transact-SQL

DROP PROCEDURE IF EXISTS uspTantargyfelosztasImport
GO
CREATE PROCEDURE 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 oo SET
oo.C_FOGLALKOZASID = NULL
,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 EXISTS (
SELECT TOP 1 ID
FROM T_FOGLALKOZAS_OSSZES fg
WHERE fg.ID = oo.C_FOGLALKOZASID
AND fg.C_INTEZMENYID = @pIntezmenyId
AND fg.C_TANEVID = @pTanevId
AND fg.TOROLT = 'F'
AND fg.C_IMPORTALT = 'T'
)
UPDATE tao SET
tao.C_FOGLALKOZASID = 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_FOGLALKOZAS_OSSZES fg
WHERE fg.ID = tao.C_FOGLALKOZASID
AND fg.C_INTEZMENYID = @pIntezmenyId
AND fg.C_TANEVID = @pTanevId
AND fg.TOROLT = 'F'
AND fg.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 uspDynamicImportJsonSplit @pIntezmenyId = @pIntezmenyId, @pTanevId = @pTanevId, @pUserId = @pUserId, @pImportJson = @pImportJson, @pIsTorles = 0, @pIsSubTable = 0, @pTableNameList = @tableNameList
--NOTE: Osztály temp tábla incializálása
CREATE TABLE #OsztalyTempTable (
ID int
,C_KETTANNYELVU char(1)
,C_NEMZETISEGI char(1)
,C_NYELVIELOKESZITO char(1)
,C_SPORT char(1)
,C_ALINTEZMENYID int
,C_ALTANEVID int
,TOROLT char(1)
,SERIAL int
,LASTCHANGED datetime
,CREATED datetime
,MODIFIER int
,CREATOR int
,ELOZOTANEVIREKORDID int
,Operation int
)
INSERT INTO #OsztalyTempTable
SELECT
ocs.ID
,o.C_KETTANNYELVU
,o.C_NEMZETISEGI
,o.C_NYELVIELOKESZITO
,o.C_SPORT
,o.C_ALINTEZMENYID
,o.C_ALTANEVID
,o.TOROLT
,o.SERIAL
,o.LASTCHANGED
,o.CREATED
,o.MODIFIER
,o.CREATOR
,o.ELOZOTANEVIREKORDID
,o.Operation
FROM OPENJSON(@pImportJson, N'lax $.ImportJson.T_OSZTALY_OSSZES')
WITH (
ID int '$.ID'
,C_KETTANNYELVU char(1) '$.C_KETTANNYELVU'
,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'
,Operation int '$.Operation'
,OsztalyCsoportNev nvarchar(255) '$.OsztalyCsoportNev'
) o
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
REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(LOWER(ocs.C_NEV),CHAR(160),CHAR(32)),CHAR(9),CHAR(32)),CHAR(32),'(¤¤)'),'¤)(¤',''),'(¤¤)',CHAR(32)) = LOWER(o.OsztalyCsoportNev)
AND ocs.C_INTEZMENYID = @pIntezmenyId
AND ocs.C_TANEVID = @pTanevId
AND ocs.TOROLT = 'F'
AND o.ID IS NULL
--NOTE: Csoport temp tábla incializálása
CREATE TABLE #CsoportTempTable (
ID int
,C_TIPUSA int
,C_OSZTALYBONTASID int
,C_ALINTEZMENYID int
,C_ALTANEVID int
,TOROLT char(1)
,SERIAL int
,LASTCHANGED datetime
,CREATED datetime
,MODIFIER int
,CREATOR int
,ELOZOTANEVIREKORDID int
,Operation int
)
INSERT INTO #CsoportTempTable
SELECT
ocs.ID
,cs.C_TIPUSA
,ob.ID
,cs.C_ALINTEZMENYID
,cs.C_ALTANEVID
,cs.TOROLT
,cs.SERIAL
,cs.LASTCHANGED
,cs.CREATED
,cs.MODIFIER
,cs.CREATOR
,cs.ELOZOTANEVIREKORDID
,cs.Operation
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'
,Operation int '$.Operation'
,OsztalyCsoportNev nvarchar(255) '$.OsztalyCsoportNev'
,OsztalybontasNev nvarchar(255) '$.OsztalybontasNev'
) cs
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
REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(LOWER(ocs.C_NEV),CHAR(160),CHAR(32)),CHAR(9),CHAR(32)),CHAR(32),'(¤¤)'),'¤)(¤',''),'(¤¤)',CHAR(32)) = LOWER(cs.OsztalyCsoportNev)
AND ocs.C_INTEZMENYID = @pIntezmenyId
AND ocs.C_TANEVID = @pTanevId
AND ocs.TOROLT = 'F'
AND cs.ID IS NULL
LEFT JOIN T_OSZTALYCSOPORT_OSSZES ob 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(ob.C_NEV),CHAR(160),CHAR(32)),CHAR(9),CHAR(32)),CHAR(32),'(¤¤)'),'¤)(¤',''),'(¤¤)',CHAR(32)) = LOWER(cs.OsztalybontasNev)
AND ob.C_INTEZMENYID = @pIntezmenyId
AND ob.C_TANEVID = @pTanevId
AND ob.TOROLT = 'F'
AND cs.ID IS NULL
--NOTE: Foglalkozas temp tábla incializálása
CREATE TABLE #FoglalkozasTempTable (
ID int
,C_TANARID int
,C_TANTARGYID int
,C_OSZTALYCSOPORTID int
,C_FOGLALKOZASTIPUSA int
,C_ORASZAM numeric(10,2)
,C_NEV nvarchar(255)
,C_ERTEKELESKELL char(1)
,C_MULASZTASKELL char(1)
,C_TANARFELVEHETI char(1)
,C_TULORASZAM numeric(10,2)
,C_ISOSSZEVONTORA char(1)
,C_ISNEMZETISEGI char(1)
,C_MEGBIZASIORASZAM numeric(10,2)
,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
,Operation int
)
INSERT INTO #FoglalkozasTempTable
SELECT
fg.ID
,fg.C_TANARID
,tt.ID
,ocs.ID
,fg.C_FOGLALKOZASTIPUSA
,fg.C_ORASZAM
,fg.C_NEV
,fg.C_ERTEKELESKELL
,fg.C_MULASZTASKELL
,fg.C_TANARFELVEHETI
,fg.C_TULORASZAM
,fg.C_ISOSSZEVONTORA
,fg.C_ISNEMZETISEGI
,fg.C_MEGBIZASIORASZAM
,fg.C_IMPORTALT
,fg.C_INTEZMENYID
,fg.C_TANEVID
,fg.TOROLT
,fg.SERIAL
,fg.LASTCHANGED
,fg.CREATED
,fg.MODIFIER
,fg.CREATOR
,fg.ELOZOTANEVIREKORDID
,fg.Operation
FROM OPENJSON(@pImportJson, N'lax $.ImportJson.T_FOGLALKOZAS_OSSZES')
WITH (
ID int '$.ID'
,C_TANARID int '$.C_TANARID'
,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_TULORASZAM numeric(10,2) '$.C_TULORASZAM'
,C_ISOSSZEVONTORA char(1) '$.C_ISOSSZEVONTORA'
,C_ISNEMZETISEGI char(1) '$.C_ISNEMZETISEGI'
,C_MEGBIZASIORASZAM numeric(10,2) '$.C_MEGBIZASIORASZAM'
,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'
,Operation int '$.Operation'
,TantargyNev nvarchar(255) '$.TantargyNev'
,OsztalyCsoportNev nvarchar(255) '$.OsztalyCsoportNev'
) fg
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
REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(LOWER(tt.C_NEV),CHAR(160),CHAR(32)),CHAR(9),CHAR(32)),CHAR(32),'(¤¤)'),'¤)(¤',''),'(¤¤)',CHAR(32)) = LOWER(fg.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
REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(LOWER(ocs.C_NEV),CHAR(160),CHAR(32)),CHAR(9),CHAR(32)),CHAR(32),'(¤¤)'),'¤)(¤',''),'(¤¤)',CHAR(32)) = LOWER(fg.OsztalyCsoportNev)
AND ocs.C_INTEZMENYID = @pIntezmenyId
AND ocs.C_TANEVID = @pTanevId
AND ocs.TOROLT = 'F'
--Osztályok beszúrása
SET @actualJson = ' { "ImportJson":{ "T_OSZTALY_OSSZES":' + (
SELECT
o.ID
,o.C_KETTANNYELVU
,o.C_NEMZETISEGI
,o.C_NYELVIELOKESZITO
,o.C_SPORT
,o.C_ALINTEZMENYID
,o.C_ALTANEVID
,o.TOROLT
,o.SERIAL
,o.LASTCHANGED
,o.CREATED
,o.MODIFIER
,o.CREATOR
,o.ELOZOTANEVIREKORDID
,o.Operation
-- Default NA értékek beállítása
,5484 AS C_AGAZAT
,6108 AS C_RESZSZAKKEPESITES
,5527 AS C_SZAKKEPESITES
,6084 AS C_SZAKMACSOPORT
,7920 AS C_AGAZATUJSZKTTIPUSID
,8122 AS C_SZAKMAIRANYTIPUSID
,7946 AS C_SZAKMATIPUSID
,8493 AS C_SZAKIRANYNKTTIPUSID
,8464 AS C_SZAKKEPESITESNKTTIPUSID
,8459 AS C_TANULMANYITERULETNKTTIPUSID
FROM #OsztalyTempTable AS o
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 uspDynamicImport @pIntezmenyId = @pIntezmenyId, @pTanevId = @pTanevId, @pUserId = @pUserId, @pImportJson = @actualJson, @pIsTorles = 0, @pIsSubTable = 1
--Csoportok beszúrása
SET @actualJson = ' { "ImportJson":{ "T_CSOPORT_OSSZES":' + (
SELECT
cs.ID
,cs.C_TIPUSA
,cs.C_OSZTALYBONTASID
,cs.C_ALINTEZMENYID
,cs.C_ALTANEVID
,cs.TOROLT
,cs.SERIAL
,cs.LASTCHANGED
,cs.CREATED
,cs.MODIFIER
,cs.CREATOR
,cs.ELOZOTANEVIREKORDID
,cs.Operation
FROM #CsoportTempTable AS cs
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 uspDynamicImport @pIntezmenyId = @pIntezmenyId, @pTanevId = @pTanevId, @pUserId = @pUserId, @pImportJson = @actualJson, @pIsTorles = 0, @pIsSubTable = 1
--Frissítjük az osztálybontott csoportok adatait az osztály adataival
UPDATE ocs
SET
ocs.C_EVFOLYAMTIPUSA = ocsParent.C_EVFOLYAMTIPUSA
,ocs.C_FELADATELLATASIHELYID = ocsParent.C_FELADATELLATASIHELYID
,ocs.SERIAL = ocs.SERIAL + 1
,ocs.LASTCHANGED = GETDATE()
,ocs.MODIFIER = @pUserId
FROM T_OSZTALYCSOPORT_OSSZES ocs
INNER JOIN #CsoportTempTable cs ON ocs.ID = cs.ID AND cs.C_OSZTALYBONTASID IS NOT NULL
INNER JOIN T_OSZTALYCSOPORT_OSSZES ocsParent ON cs.C_OSZTALYBONTASID = ocsParent.ID
WHERE ocs.C_INTEZMENYID = @pIntezmenyId
AND ocs.C_TANEVID = @pTanevId
AND ocs.TOROLT = 'F'
--Foglalkozások beszúrása
SET @actualJson = ' { "ImportJson":{ "T_FOGLALKOZAS_OSSZES":' + (
SELECT
fg.ID
,fg.C_TANARID
,fg.C_TANTARGYID
,fg.C_OSZTALYCSOPORTID
,fg.C_FOGLALKOZASTIPUSA
,fg.C_ORASZAM
,fg.C_NEV
,fg.C_ERTEKELESKELL
,fg.C_MULASZTASKELL
,fg.C_TANARFELVEHETI
,fg.C_TULORASZAM
,fg.C_ISOSSZEVONTORA
,fg.C_ISNEMZETISEGI
,fg.C_MEGBIZASIORASZAM
,fg.C_IMPORTALT
,fg.C_INTEZMENYID
,fg.C_TANEVID
,fg.TOROLT
,fg.SERIAL
,fg.LASTCHANGED
,fg.CREATED
,fg.MODIFIER
,fg.CREATOR
,fg.ELOZOTANEVIREKORDID
,fg.Operation
FROM #FoglalkozasTempTable AS fg
FOR JSON PATH,INCLUDE_NULL_VALUES
)
SET @actualJson = @actualJson + ' } }'
EXECUTE uspDynamicImport @pIntezmenyId = @pIntezmenyId, @pTanevId = @pTanevId, @pUserId = @pUserId, @pImportJson = @actualJson, @pIsTorles = @pIsTorles, @pIsSubTable = 0
END
GO