DROP PROCEDURE IF EXISTS uspOrarendImport GO CREATE PROCEDURE uspOrarendImport @pIntezmenyId int ,@pTanevId int ,@pUserId int ,@pImportJson nvarchar(max) ,@pIsTorles bit ,@pIsModositas bit ,@pIsNapirendImport 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 tao SET tao.C_ORARENDIORAID = 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_ORARENDIORA_OSSZES oo WHERE oo.ID = tao.C_ORARENDIORAID AND oo.C_INTEZMENYID = @pIntezmenyId AND oo.C_TANEVID = @pTanevId AND oo.TOROLT = 'F' AND oo.C_IMPORTALT = 'T' AND ((@pIsNapirendImport = 0 AND oo.C_TANORANKIVULIFOGLALKOZAS = 'F') OR (@pIsNapirendImport = 1 AND oo.C_TANORANKIVULIFOGLALKOZAS = 'T')) ) UPDATE hf SET hf.C_ORARENDIORAID = NULL ,hf.SERIAL = hf.SERIAL + 1 ,hf.LASTCHANGED = @lastChangedDateTime ,hf.MODIFIER = @pUserId FROM T_HAZIFELADATOK_OSSZES hf WHERE hf.C_INTEZMENYID = @pIntezmenyId AND hf.C_TANEVID = @pTanevId AND hf.TOROLT = 'F' AND EXISTS ( SELECT TOP 1 ID FROM T_ORARENDIORA_OSSZES oo WHERE oo.ID = hf.C_ORARENDIORAID AND oo.C_INTEZMENYID = @pIntezmenyId AND oo.C_TANEVID = @pTanevId AND oo.TOROLT = 'F' AND oo.C_IMPORTALT = 'T' AND ((@pIsNapirendImport = 0 AND oo.C_TANORANKIVULIFOGLALKOZAS = 'F') OR (@pIsNapirendImport = 1 AND oo.C_TANORANKIVULIFOGLALKOZAS = 'T')) ) UPDATE oot SET oot.C_ORARENDIORAID = NULL ,oot.SERIAL = oot.SERIAL + 1 ,oot.LASTCHANGED = @lastChangedDateTime ,oot.MODIFIER = @pUserId FROM T_ORARENDIORATULAJDONSAG oot WHERE oot.C_INTEZMENYID = @pIntezmenyId AND oot.C_TANEVID = @pTanevId AND oot.TOROLT = 'F' AND EXISTS ( SELECT TOP 1 ID FROM T_ORARENDIORA_OSSZES oo WHERE oo.ID = oot.C_ORARENDIORAID AND oo.C_INTEZMENYID = @pIntezmenyId AND oo.C_TANEVID = @pTanevId AND oo.TOROLT = 'F' AND oo.C_IMPORTALT = 'T' AND ((@pIsNapirendImport = 0 AND oo.C_TANORANKIVULIFOGLALKOZAS = 'F') OR (@pIsNapirendImport = 1 AND oo.C_TANORANKIVULIFOGLALKOZAS = 'T')) ) DELETE hi FROM T_HELYETTESITESIIDOSZAK_OSSZES hi WHERE EXISTS ( SELECT TOP 1 ID FROM T_ORARENDIORA_OSSZES oo WHERE oo.ID = hi.C_HELYETTESITETTORARENDID AND oo.C_INTEZMENYID = @pIntezmenyId AND oo.C_TANEVID = @pTanevId AND oo.TOROLT = 'F' AND oo.C_IMPORTALT = 'T' AND ((@pIsNapirendImport = 0 AND oo.C_TANORANKIVULIFOGLALKOZAS = 'F') OR (@pIsNapirendImport = 1 AND oo.C_TANORANKIVULIFOGLALKOZAS = 'T')) ) --Órarendi órák törlése UPDATE oo SET oo.TOROLT = 'T' ,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 oo.C_IMPORTALT = 'T' AND oo.C_ORAERVENYESSEGVEGE <> oo.C_ORAERVENYESSEGKEZDETE AND ((@pIsNapirendImport = 0 AND oo.C_TANORANKIVULIFOGLALKOZAS = 'F') OR (@pIsNapirendImport = 1 AND oo.C_TANORANKIVULIFOGLALKOZAS = 'T')) 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 UPDATE oo SET oo.C_ORAERVENYESSEGVEGE = @pOrarendiOraLezarasDateTime ,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 (oo.C_ORAERVENYESSEGVEGE IS NULL OR oo.C_ORAERVENYESSEGVEGE > @pOrarendiOraLezarasDateTime) AND oo.C_ORAERVENYESSEGVEGE <> oo.C_ORAERVENYESSEGKEZDETE AND oo.C_ORAERVENYESSEGKEZDETE < @pOrarendiOraLezarasDateTime AND ((@pIsNapirendImport = 0 AND oo.C_TANORANKIVULIFOGLALKOZAS = 'F') OR (@pIsNapirendImport = 1 AND oo.C_TANORANKIVULIFOGLALKOZAS = 'T')) --A korábban felvett, de későbbi időpontra importált órarendi órák törlése UPDATE oo SET oo.TOROLT = 'T' ,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 oo.C_IMPORTALT = 'T' AND oo.C_ORAERVENYESSEGVEGE <> oo.C_ORAERVENYESSEGKEZDETE AND oo.C_ORAERVENYESSEGKEZDETE >= @pOrarendiOraLezarasDateTime AND ((@pIsNapirendImport = 0 AND oo.C_TANORANKIVULIFOGLALKOZAS = 'F') OR (@pIsNapirendImport = 1 AND oo.C_TANORANKIVULIFOGLALKOZAS = 'T')) END EXECUTE 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 uspDynamicImportJsonSplit @pIntezmenyId = @pIntezmenyId, @pTanevId = @pTanevId, @pUserId = @pUserId, @pImportJson = @pImportJson, @pIsTorles = 0, @pIsSubTable = 0, @pTableNameList = @tableNameList --NOTE: Órarendi óra temp tábla incializálása CREATE TABLE #OrarendiOraTempTable ( ID int ,C_TANARID int ,C_TANTARGYID int ,C_OSZTALYCSOPORTID int ,C_TEREMID int ,C_FOGLALKOZASID int ,C_HETIREND int ,C_HETNAPJA int ,C_ORASZAM int ,C_ORAERVENYESSEGKEZDETE datetime ,C_ORAERVENYESSEGVEGE datetime ,C_TANORANKIVULIFOGLALKOZAs char(1) ,C_EGYEDINAP char(1) ,C_ISKEZZELFELVETTEGYEDINAp char(1) ,C_CSENGETESIRENDID int ,C_CSENGETESIRENDORAID int ,C_ORAKEZDETE datetime ,C_ORAVEGE datetime ,C_BONTOTT char(1) ,C_ORATULAJDONOSID int ,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 ,NNID int ,Operation int ) INSERT INTO #OrarendiOraTempTable SELECT oo.ID ,oo.C_TANARID ,tt.ID AS C_TANTARGYID ,ocs.ID AS C_OSZTALYCSOPORTID ,t.ID AS C_TEREMID ,fg.ID AS C_FOGLALKOZASID ,oo.C_HETIREND ,oo.C_HETNAPJA ,oo.C_ORASZAM ,oo.C_ORAERVENYESSEGKEZDETE ,oo.C_ORAERVENYESSEGVEGE ,oo.C_TANORANKIVULIFOGLALKOZAS ,oo.C_EGYEDINAP ,oo.C_ISKEZZELFELVETTEGYEDINAP ,oo.C_CSENGETESIRENDID ,oo.C_CSENGETESIRENDORAID ,oo.C_ORAKEZDETE ,oo.C_ORAVEGE ,oo.C_BONTOTT ,oo.C_ORATULAJDONOSID ,oo.C_IMPORTALT ,oo.C_INTEZMENYID ,oo.C_TANEVID ,oo.TOROLT ,oo.SERIAL ,oo.LASTCHANGED ,oo.CREATED ,oo.MODIFIER ,oo.CREATOR ,oo.ELOZOTANEVIREKORDID ,oo.NNID ,oo.Operation FROM OPENJSON(@pImportJson, N'lax $.ImportJson.T_ORARENDIORA_OSSZES') WITH ( ID int '$.ID' ,C_TANARID int '$.C_TANARID' ,C_HETIREND int '$.C_HETIREND' ,C_HETNAPJA int '$.C_HETNAPJA' ,C_ORASZAM int '$.C_ORASZAM' ,C_ORAERVENYESSEGKEZDETE datetime '$.C_ORAERVENYESSEGKEZDETE' ,C_ORAERVENYESSEGVEGE datetime '$.C_ORAERVENYESSEGVEGE' ,C_TANORANKIVULIFOGLALKOZAS char(1) '$.C_TANORANKIVULIFOGLALKOZAS' ,C_EGYEDINAP char(1) '$.C_EGYEDINAP' ,C_ISKEZZELFELVETTEGYEDINAP char(1) '$.C_ISKEZZELFELVETTEGYEDINAP' ,C_CSENGETESIRENDID int '$.C_CSENGETESIRENDID' ,C_CSENGETESIRENDORAID int '$.C_CSENGETESIRENDORAID' ,C_ORAKEZDETE datetime '$.C_ORAKEZDETE' ,C_ORAVEGE datetime '$.C_ORAVEGE' ,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' ,TeremNev nvarchar(255) '$.TeremNev' ) oo 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 LTRIM(RTRIM(REPLACE(REPLACE(REPLACE(REPLACE(LOWER(tt.C_NEV),CHAR(160),CHAR(32)),CHAR(32),'(¤¤)'),'¤)(¤',''),'(¤¤)',CHAR(32)))) = LOWER(oo.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 LTRIM(RTRIM(REPLACE(REPLACE(REPLACE(REPLACE(LOWER(ocs.C_NEV),CHAR(160),CHAR(32)),CHAR(32),'(¤¤)'),'¤)(¤',''),'(¤¤)',CHAR(32)))) = LOWER(oo.OsztalyCsoportNev) AND ocs.C_INTEZMENYID = @pIntezmenyId AND ocs.C_TANEVID = @pTanevId AND ocs.TOROLT = 'F' LEFT JOIN T_TEREM_OSSZES t 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(t.C_NEV),CHAR(160),CHAR(32)),CHAR(32),'(¤¤)'),'¤)(¤',''),'(¤¤)',CHAR(32)))) = LOWER(oo.TeremNev) AND t.C_INTEZMENYID = @pIntezmenyId AND t.C_TANEVID = @pTanevId AND t.TOROLT = 'F' LEFT JOIN T_FOGLALKOZAS_OSSZES fg ON fg.C_OSZTALYCSOPORTID = ocs.ID AND fg.C_TANARID = oo.C_TANARID AND fg.C_TANTARGYID = tt.ID AND fg.C_INTEZMENYID = @pIntezmenyId AND fg.C_TANEVID = @pTanevId AND fg.TOROLT = 'F' --Órarendi órák beszúrása SET @actualJson = ' { "ImportJson":{ "T_ORARENDIORA_OSSZES":' + ( SELECT oo.ID ,oo.C_TANARID ,oo.C_TANTARGYID ,oo.C_OSZTALYCSOPORTID ,oo.C_TEREMID ,oo.C_FOGLALKOZASID ,oo.C_HETIREND ,oo.C_HETNAPJA ,oo.C_ORASZAM ,oo.C_ORAERVENYESSEGKEZDETE ,oo.C_ORAERVENYESSEGVEGE ,oo.C_TANORANKIVULIFOGLALKOZAS ,oo.C_EGYEDINAP ,oo.C_ISKEZZELFELVETTEGYEDINAP ,oo.C_CSENGETESIRENDID ,oo.C_CSENGETESIRENDORAID ,oo.C_ORAKEZDETE ,oo.C_ORAVEGE ,oo.C_BONTOTT ,oo.C_ORATULAJDONOSID ,oo.C_IMPORTALT ,oo.C_INTEZMENYID ,oo.C_TANEVID ,oo.TOROLT ,oo.SERIAL ,oo.LASTCHANGED ,oo.CREATED ,oo.MODIFIER ,oo.CREATOR ,oo.ELOZOTANEVIREKORDID ,oo.NNID ,oo.Operation FROM #OrarendiOraTempTable AS oo 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 uspDynamicImport @pIntezmenyId = @pIntezmenyId, @pTanevId = @pTanevId, @pUserId = @pUserId, @pImportJson = @actualJson, @pIsTorles = 0, @pIsSubTable = 0 DROP TABLE IF EXISTS #OrarendiOraTempTable --NOTE: Update-elnünk kell a órarendi óráknak a groud id-ját! UPDATE oo SET oo.C_ORARENDIORAGROUPID = ID FROM T_ORARENDIORA_OSSZES oo WHERE oo.C_INTEZMENYID = @pIntezmenyId AND oo.C_TANEVID = @pTanevId AND oo.TOROLT = 'F' AND oo.C_IMPORTALT = 'T' AND ((@pIsNapirendImport = 0 AND oo.C_TANORANKIVULIFOGLALKOZAS = 'F') OR (@pIsNapirendImport = 1 AND oo.C_TANORANKIVULIFOGLALKOZAS = 'T')) END GO