kreta/Kreta.DataAccess.Migrations/Scripts/Archive/20181030180408_AL_91/sp_OrarendImport.sql
2024-03-13 00:33:46 +01:00

371 lines
14 KiB
Transact-SQL

-- =============================================
-- 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