-- ============================================= -- Description: <> -- ============================================= SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO IF OBJECT_ID('[dbo].[sp_OrarendImport]') IS NOT NULL BEGIN DROP PROCEDURE [dbo].[sp_OrarendImport] END GO CREATE PROCEDURE [dbo].[sp_OrarendImport] @pImportJson NVARCHAR(MAX) ,@pIsTorles BIT ,@pIsModositas BIT ,@pOrarendiOraLezarasDateTime DATETIME = NULL ,@pUserId INT ,@pTanevId INT ,@pIntezmenyId INT AS BEGIN SET NOCOUNT ON; DECLARE @tableNameList NVARCHAR(2000) = 'T_TEREM_OSSZES' ,@actualJson NVARCHAR(MAX) = '' ,@lastChangedDateTime DATETIME = GETDATE() ,@modifierId INT = @pUserId --Ha törölnünk vagy módosítanunk is kell akkor azzal kezdünk! IF (@pIsTorles = 1) BEGIN --Órarenid óra kapcsolatainak törlése UPDATE TanitasiOra SET TanitasiOra.C_ORARENDIORAID = NULL ,TanitasiOra.SERIAL = TanitasiOra.SERIAL + 1 ,TanitasiOra.LASTCHANGED = @lastChangedDateTime ,TanitasiOra.MODIFIER = @modifierId 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 = @modifierId 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 = @modifierId 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 = @modifierId 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 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 = @modifierId 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 = @modifierId 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].[sp_TantargyfelosztasImport] @pImportJson ,@pIsTorles ,@pUserId ,@pTanevId ,@pIntezmenyId --NOTE: A törlés itt azért false, mert a T_TEREM_OSSZES view-ból nem törlünk importnál EXECUTE [dbo].[sp_DynamicImportJsonSplit] @pImportJson = @pImportJson , @pIsTorles = 0, @pUserId = @pUserId, @pInsertAlways = 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_INTEZMENYID ,OrarendiOra. C_TANEVID ,OrarendiOra. C_IMPORTALT ,OrarendiOra. TOROLT ,OrarendiOra. SERIAL ,OrarendiOra. LASTCHANGED ,OrarendiOra. CREATED ,OrarendiOra. MODIFIER ,OrarendiOra. CREATOR ,OrarendiOra. NNID ,OrarendiOra. ELOZOTANEVIREKORDID 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_INTEZMENYID INT '$.C_INTEZMENYID' ,C_TANEVID INT '$.C_TANEVID' ,C_IMPORTALT CHAR(1) '$.C_IMPORTALT' ,TOROLT CHAR(1) '$.TOROLT' ,SERIAL INT '$.SERIAL' ,LASTCHANGED DATETIME '$.LASTCHANGED' ,CREATED DATETIME '$.CREATED' ,MODIFIER INT '$.MODIFIER' ,CREATOR INT '$.CREATOR' ,NNID INT '$.NNID' ,ELOZOTANEVIREKORDID INT '$.ELOZOTANEVIREKORDID' ,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 itt azért false, mert a T_FOGLALKOZAS_OSSZES view-ból korábban elvégeztük a törlést, mivel az osztálycsoport és a tantárgy törlések miatt, nem találná. EXECUTE [dbo].[sp_DynamicImport] @pImportJson = @actualJson , @pIsTorles = 0, @pUserId = @pUserId, @pInsertAlways = 0 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