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

