371 lines
14 KiB
Transact-SQL
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
|
|
|